@kepler.gl/reducers 3.3.0-alpha.10 → 3.3.0-alpha.12
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/combined-updaters.js +1 -1
- package/dist/cjs/layer-utils.js +15 -7
- package/dist/cjs/map-state-updaters.js +1 -1
- package/dist/cjs/map-style-updaters.js +4 -5
- package/dist/cjs/merger-handler.js +2 -2
- package/dist/cjs/middleware.js +4 -6
- package/dist/cjs/provider-state-updaters.js +15 -16
- package/dist/cjs/root.js +2 -2
- package/dist/cjs/vis-state-merger.js +68 -26
- package/dist/cjs/vis-state-selectors.js +26 -8
- package/dist/cjs/vis-state-updaters.js +233 -167
- package/dist/esm/combined-updaters.js +1 -1
- package/dist/esm/layer-utils.js +15 -7
- package/dist/esm/map-state-updaters.js +1 -1
- package/dist/esm/map-style-updaters.js +2 -2
- package/dist/esm/merger-handler.js +2 -2
- package/dist/esm/middleware.js +4 -6
- package/dist/esm/provider-state-updaters.js +4 -4
- package/dist/esm/root.js +2 -2
- package/dist/esm/vis-state-merger.js +64 -23
- package/dist/esm/vis-state-selectors.js +25 -7
- package/dist/esm/vis-state-updaters.js +229 -162
- package/dist/layer-utils.d.ts +1 -0
- package/dist/middleware.d.ts +2 -2
- package/dist/root.d.ts +1 -1
- package/dist/vis-state-selectors.d.ts +53 -6
- package/dist/vis-state-updaters.d.ts +4 -3
- package/package.json +16 -17
|
@@ -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; }
|
|
@@ -654,7 +655,9 @@ export function mergeAnnotations(state, annotations) {
|
|
|
654
655
|
return a.id;
|
|
655
656
|
}));
|
|
656
657
|
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
|
|
658
|
+
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) {
|
|
659
|
+
return Number.isFinite(value);
|
|
660
|
+
});
|
|
658
661
|
}).map(function (a) {
|
|
659
662
|
return _objectSpread({
|
|
660
663
|
isVisible: true,
|
|
@@ -893,6 +896,27 @@ export function validateSavedTextLabel(fields, _ref7, savedTextLabel) {
|
|
|
893
896
|
});
|
|
894
897
|
}
|
|
895
898
|
|
|
899
|
+
/**
|
|
900
|
+
* Saved visual channel field/scale may live in any of:
|
|
901
|
+
* - `config[key]` after schema parse (VisualChannelSchemaV1 folds channels into config)
|
|
902
|
+
* - `visualChannels[key]` as a sibling of `config` (unparsed addDataToMap payload)
|
|
903
|
+
* - `config.visualChannels[key]` (common mistake of nesting visualChannels inside config)
|
|
904
|
+
*
|
|
905
|
+
* Without this lookup, programmatic GeoJSON strokeColorField never binds and
|
|
906
|
+
* strokeColorDomain stays at the default `[0, 1]` (kepler.gl #3061).
|
|
907
|
+
*/
|
|
908
|
+
function getSavedVisualChannelValue(savedLayer, key) {
|
|
909
|
+
var config = savedLayer.config;
|
|
910
|
+
if (config && config[key] !== undefined) {
|
|
911
|
+
return config[key];
|
|
912
|
+
}
|
|
913
|
+
var channels = savedLayer.visualChannels || config && config.visualChannels;
|
|
914
|
+
if (channels && _typeof(channels) === 'object' && channels[key] !== undefined) {
|
|
915
|
+
return channels[key];
|
|
916
|
+
}
|
|
917
|
+
return undefined;
|
|
918
|
+
}
|
|
919
|
+
|
|
896
920
|
/**
|
|
897
921
|
* Validate saved visual channels config with new data,
|
|
898
922
|
* refer to vis-state-schema.js VisualChannelSchemaV1
|
|
@@ -903,24 +927,24 @@ export function validateSavedVisualChannels(fields, newLayer, savedLayer) {
|
|
|
903
927
|
var field = _ref9.field,
|
|
904
928
|
scale = _ref9.scale,
|
|
905
929
|
key = _ref9.key;
|
|
930
|
+
var savedField = getSavedVisualChannelValue(savedLayer, field);
|
|
931
|
+
var savedScale = getSavedVisualChannelValue(savedLayer, scale);
|
|
906
932
|
var foundField;
|
|
907
|
-
if (
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
throw new Error("Layer has invalid visual channel field: ".concat(field));
|
|
923
|
-
}
|
|
933
|
+
if (savedField !== null && savedField !== void 0 && savedField.name) {
|
|
934
|
+
foundField = fields.find(function (fd) {
|
|
935
|
+
return fd.name === savedField.name;
|
|
936
|
+
});
|
|
937
|
+
}
|
|
938
|
+
var foundChannel = _objectSpread(_objectSpread({}, foundField ? _defineProperty({}, field, foundField) : {}), savedScale ? _defineProperty({}, scale, savedScale) : {});
|
|
939
|
+
if (Object.keys(foundChannel).length) {
|
|
940
|
+
newLayer.updateLayerConfig(foundChannel);
|
|
941
|
+
}
|
|
942
|
+
newLayer.validateVisualChannel(key);
|
|
943
|
+
if (options.throwOnError) {
|
|
944
|
+
var _newLayer$config$fiel;
|
|
945
|
+
var fieldName = savedField === null || savedField === void 0 ? void 0 : savedField.name;
|
|
946
|
+
if (fieldName && fieldName !== ((_newLayer$config$fiel = newLayer.config[field]) === null || _newLayer$config$fiel === void 0 ? void 0 : _newLayer$config$fiel.name)) {
|
|
947
|
+
throw new Error("Layer has invalid visual channel field: ".concat(field));
|
|
924
948
|
}
|
|
925
949
|
}
|
|
926
950
|
});
|
|
@@ -964,9 +988,26 @@ function _getColumnConfigForValidation(newLayer) {
|
|
|
964
988
|
return colMode.key === newLayer.config.columnMode;
|
|
965
989
|
}) : null;
|
|
966
990
|
if (colModeConfig) {
|
|
967
|
-
// only validate columns in column mode
|
|
968
|
-
|
|
969
|
-
return
|
|
991
|
+
// only validate columns in column mode (including tabbed columnGroups)
|
|
992
|
+
var groupColumns = (colModeConfig.columnGroups || []).flatMap(function (group) {
|
|
993
|
+
return group.columns || [];
|
|
994
|
+
});
|
|
995
|
+
var requiredKeys = new Set(colModeConfig.requiredColumns || []);
|
|
996
|
+
columnConfig = [].concat(_toConsumableArray(colModeConfig.requiredColumns || []), _toConsumableArray(colModeConfig.optionalColumns || []), _toConsumableArray(groupColumns)).reduce(function (accu, key) {
|
|
997
|
+
var col = columnConfig[key];
|
|
998
|
+
if (!col) {
|
|
999
|
+
return accu;
|
|
1000
|
+
}
|
|
1001
|
+
// Optionality must follow the active mode: a field optional in another mode
|
|
1002
|
+
// (e.g. altitude in UV) is still required when this mode lists it in requiredColumns.
|
|
1003
|
+
if (requiredKeys.has(key)) {
|
|
1004
|
+
var _optional = col.optional,
|
|
1005
|
+
requiredCol = _objectWithoutProperties(col, _excluded2);
|
|
1006
|
+
return _objectSpread(_objectSpread({}, accu), {}, _defineProperty({}, key, requiredCol));
|
|
1007
|
+
}
|
|
1008
|
+
return _objectSpread(_objectSpread({}, accu), {}, _defineProperty({}, key, _objectSpread(_objectSpread({}, col), {}, {
|
|
1009
|
+
optional: true
|
|
1010
|
+
})));
|
|
970
1011
|
}, {});
|
|
971
1012
|
}
|
|
972
1013
|
return columnConfig;
|
|
@@ -1158,4 +1199,4 @@ export var VIS_STATE_MERGERS = [{
|
|
|
1158
1199
|
prop: 'editor',
|
|
1159
1200
|
combineConfigs: combineEditorConfigs
|
|
1160
1201
|
}];
|
|
1161
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJmaW5kQnlJZCIsImFnZ3JlZ2F0ZSIsImlzUGxhaW5PYmplY3QiLCJjcmVhdGVFZmZlY3QiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJBR0dSRUdBVElPTl9UWVBFUyIsIkxBWUVSX0JMRU5ESU5HUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiaXNBbm5vdGF0aW9uS2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJDVVJSRU5UX1ZFUlNJT04iLCJhc3NpZ25HcHVDaGFubmVscyIsInJlc2V0RmlsdGVyR3B1TW9kZSIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVkIiwiZmFpbGVkIiwidXBkYXRlZERhdGFzZXRzIiwidXBkYXRlZEZpbHRlcnMiLCJpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyIiwiZmlsdGVycyIsImRhdGFzZXRzVG9GaWx0ZXIiLCJmIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJsYXllcnMiLCJfb2JqZWN0U3ByZWFkIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwicmVwbGFjZUZpbHRlckRhdGFzZXRJZHMiLCJzYXZlZEZpbHRlciIsImRhdGFJZFRvVXNlIiwicmVwbGFjZWQiLCJmb3JFYWNoIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsIl9kZWZpbmVQcm9wZXJ0eSIsInB1c2giLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsImxheWVyQ29uZmlnIiwidmlzdWFsQ2hhbm5lbHMiLCJwYXJzZUxheWVyQ29uZmlnIiwic2NoZW1hIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uIiwic2F2ZWRDb25maWciLCJ2ZXJzaW9uIiwiY29uZmlnIiwidmlzU3RhdGUiLCJsYXllck9yZGVyIiwicGFyc2VTYXZlZENvbmZpZyIsImN1cnJlbnRJdGVtcyIsIml0ZW1zIiwicHJlc2VydmVkT3JkZXIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJkZWZhdWx0U3RhcnQiLCJuZXdJdGVtcyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJpdGVtIiwidmFsdWUiLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsImkiLCJwcmVjZWVkSWR4IiwiX2xvb3AiLCJwcmVjZWVkSXRlbUlkIiwiZmluZEluZGV4IiwiZXJyIiwiZSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsImFwcGx5IiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsIl9leGNsdWRlZCIsImNvbmZpZ1RvTWVyZ2UiLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0b29sdGlwIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsIl9sb29wMiIsInRvQmVDb21iaW5lZFByb3BzIiwiYyIsInAiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiZmluZCIsIl9yZWYzIiwibmFtZSIsIl9hZ2dyZWdhdGUiLCJzaXplIiwibWF4aW11bSIsImxpbWl0U2VhcmNoIiwiX3VubWVyZ2VkJHRvb2x0aXAiLCJfdW5tZXJnZWQkdG9vbHRpcDIiLCJfc3RhdGUkaW50ZXJhY3Rpb25Ub0IiLCJfdW5tZXJnZWQkdG9vbHRpcDMiLCJyZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvMiIsIm1lcmdlU3BsaXRNYXBzIiwic3BsaXRNYXBzIiwic20iLCJlbnRyaWVzIiwiX3JlZjQiLCJfcmVmNSIsIl9zbGljZWRUb0FycmF5IiwicHVzaFRvIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsIm1lcmdlRWZmZWN0cyIsIm5ld0VmZmVjdHMiLCJlZmZlY3QiLCJhbGwiLCJpc0NvbmZpZ0FjdGl2ZSIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJleGlzdGluZ0lkcyIsImEiLCJ2YWxpZEFubm90YXRpb25zIiwia2luZCIsImFuY2hvclBvaW50IiwiaXNWaXNpYmxlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJsYWJlbCIsImxpbmVDb2xvciIsImxpbmVXaWR0aCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0b29sdGlwQ29uZmlnIiwiX2xvb3A0IiwiYWxsRmllbGRzIiwiZmllbGRzIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJmaWVsZCIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY2IiwiYWxsQ29sRm91bmQiLCJldmVyeSIsInZhbGlkYXRlQ29sdW1uIiwicnYiLCJ0aHJvd09uRXJyb3IiLCJyZXF1aXJlZENvbHVtbnMiLCJrIiwib3B0aW9uYWwiLCJtaXNzaW5nQ29sdW1ucyIsIkVycm9yIiwiam9pbiIsImNvbmZpZ0NvbHVtbnMiLCJpbnZhbGlkQ29sdW1ucyIsIl9jb2x1bW5zJGsiLCJjb2x1bW4iLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwiX3JlZjciLCJzYXZlZFRleHRMYWJlbCIsIl9yZWY4IiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJ0ZXh0TGFiZWwiLCJmZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY2N1IiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwic2F2ZWRMYXllciIsInZhbHVlcyIsIl9yZWY5Iiwic2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfc2F2ZWRMYXllciRjb25maWciLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJvcHRpb25hbENvbHVtbnMiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImhpZGRlbiIsImhpZ2hsaWdodENvbG9yIiwiY29waWVkVmlzQ29uZmlnIiwiY29weUxheWVyQ29uZmlnIiwidmlzQ29uZmlnIiwic2hhbGxvd0NvcHkiLCJ2YWxpZGF0ZVZpc0NvbmZpZyIsIm1lcmdlRWRpdG9yIiwic2F2ZWRFZGl0b3IiLCJfc2F2ZWRFZGl0b3IkdmlzaWJsZSIsImVkaXRvciIsImZlYXR1cmVzIiwidmlzaWJsZSIsImNvbWJpbmVFZGl0b3JDb25maWdzIiwibmV4dENvbmZpZyIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibmV3RGF0YUVudHJpZXMiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIm5ld0RhdGFzZXRJZHMiLCJfc3RhdGUkcHJlc2VydmVEYXRhc2UiLCJhcnIiLCJfcmVmMTEiLCJ0YWxseXMiLCJNYXAiLCJzZXQiLCJnZXQiLCJuZXh0IiwiVklTX1NUQVRFX01FUkdFUlMiLCJtZXJnZSIsInByb3AiLCJ0b01lcmdlUHJvcCIsInByZXNlcnZlT3JkZXIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsInNhdmVVbm1lcmdlZCIsImNvbWJpbmVDb25maWdzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS1tZXJnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCBmbGF0dGVuRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9mbGF0dGVuRGVlcCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge1xuICBhcnJheUluc2VydCxcbiAgZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyxcbiAgZmluZEJ5SWQsXG4gIGFnZ3JlZ2F0ZSxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVFlQRVMsXG4gIExBWUVSX0JMRU5ESU5HUyxcbiAgT1ZFUkxBWV9CTEVORElOR1MsXG4gIGlzQW5ub3RhdGlvbktpbmQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NVUlJFTlRfVkVSU0lPTiwgVmlzU3RhdGUsIFZpc1N0YXRlTWVyZ2VycywgS2VwbGVyR0xTY2hlbWFDbGFzc30gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkTGF5ZXIsXG4gIFBhcnNlZFZpc1N0YXRlLFxuICBTYXZlZEludGVyYWN0aW9uQ29uZmlnLFxuICBUb29sdGlwSW5mbyxcbiAgU2F2ZWRFZGl0b3IsXG4gIFBhcnNlZENvbmZpZyxcbiAgRmlsdGVyLFxuICBFZmZlY3QgYXMgRWZmZWN0VHlwZSxcbiAgUGFyc2VkRWZmZWN0LFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBQYXJzZWRGaWx0ZXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFNhdmVkQW5pbWF0aW9uQ29uZmlnLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyR3JvdXBcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlLCBEYXRhc2V0cywgYXNzaWduR3B1Q2hhbm5lbHMsIHJlc2V0RmlsdGVyR3B1TW9kZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7Z2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgbGV0IHBsb3RUeXBlO1xuICAgICAgLy8gVE9ETzogbW9yZSBnZW5lcmljIGFwcHJvYWNoIHRvIHNhdmUgcGxvdFR5cGUuY29sb3JzQnlEYXRhSWRcbiAgICAgIGlmIChmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkPy5bZGF0YUlkXSkge1xuICAgICAgICAvLyByZXBsYWNlIGNvbG9yQnlEYXRhSWQgaW4gZmlsdGVyLnBsb3RUeXBlXG4gICAgICAgIGNvbnN0IHtbZGF0YUlkXTogY29sb3IsIC4uLnJlc3R9ID0gZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZCB8fCB7fTtcbiAgICAgICAgcGxvdFR5cGUgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgICAgICAgIGNvbG9yc0J5RGF0YUlkOiB7XG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgW2RhdGFJZFRvVXNlXTogY29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXBsYWNlZC5wdXNoKHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZCxcbiAgICAgICAgLi4uKHBsb3RUeXBlID8ge3Bsb3RUeXBlfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gZXhwb3J0ZWQgbGF5ZXIgY29uZmlndXJhdGlvbiBjb250YWlucyB2aXN1YWxDaGFubmVscyBwcm9wZXJ0eVxuICByZXR1cm4gbGF5ZXJDb25maWc/LnZpc3VhbENoYW5uZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMYXllckNvbmZpZyhcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzLFxuICBsYXllckNvbmZpZzogYW55XG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIC8vIGFzc3VtZSB0aGUgbGF5ZXIgY29uZmlnIGlzIGN1cnJlbnQgdmVyc2lvblxuICBjb25zdCBzYXZlZENvbmZpZyA9IHtcbiAgICB2ZXJzaW9uOiBDVVJSRU5UX1ZFUlNJT04sXG4gICAgY29uZmlnOiB7XG4gICAgICB2aXNTdGF0ZToge2xheWVyczogW2xheWVyQ29uZmlnXSwgbGF5ZXJPcmRlcjogW2xheWVyQ29uZmlnLmlkXX1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkQ29uZmlnKT8udmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICBjdXJyZW50SXRlbXM6IEZpbHRlcltdLFxuICBpdGVtczogRmlsdGVyW10sXG4gIHByZXNlcnZlZE9yZGVyOiBhbnlbXSA9IFtdLFxuICBkZWZhdWx0U3RhcnQ/OiBib29sZWFuXG4pIHtcbiAgbGV0IG5ld0l0ZW1zID0gWy4uLmN1cnJlbnRJdGVtc107XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRJZHggPSBwcmVzZXJ2ZWRPcmRlci5pbmRleE9mKGl0ZW0uaWQpO1xuICAgIC8vIGluc2VydEF0IHRoZSBlbmQgYnkgZGVmYXVsdFxuICAgIGxldCBpbnNlcnRBdCA9IGRlZmF1bHRTdGFydCA/IDAgOiBuZXdJdGVtcy5sZW5ndGg7XG4gICAgaWYgKGV4cGVjdGVkSWR4ID4gMCkge1xuICAgICAgLy8gbG9vayBmb3IgbGF5ZXIgdG8gaW5zZXJ0IGFmdGVyXG4gICAgICBsZXQgaSA9IGV4cGVjdGVkSWR4ICsgMTtcbiAgICAgIGxldCBwcmVjZWVkSWR4ID0gLTE7XG4gICAgICB3aGlsZSAoaS0tID4gMCAmJiBwcmVjZWVkSWR4IDwgMCkge1xuICAgICAgICAvLyBrZWVwIGxvb2tpbmcgZm9yIHByZWNlZWQgbGF5ZXIgdGhhdCBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgICBjb25zdCBwcmVjZWVkSXRlbUlkID0gcHJlc2VydmVkT3JkZXJbaSAtIDFdO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbmV3SXRlbXMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gcHJlY2VlZEl0ZW1JZCk7XG4gICAgICB9XG4gICAgICBpZiAocHJlY2VlZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIGlmIGZvdW5kXG4gICAgICAgIGluc2VydEF0ID0gcHJlY2VlZElkeCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld0l0ZW1zID0gYXJyYXlJbnNlcnQobmV3SXRlbXMsIGluc2VydEF0LCBpdGVtKTtcbiAgfVxuICByZXR1cm4gbmV3SXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGU6IFZpc1N0YXRlLCBsYXllckNvbmZpZzogYW55KTogTGF5ZXIgfCBudWxsIHtcbiAgLy8gY2hlY2sgaWYgdGhlIGxheWVyIGNvbmZpZyBpcyBwYXJzZWRcbiAgY29uc3QgcGFyc2VkTGF5ZXJDb25maWcgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZylcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBsYXllckNvbmZpZylcbiAgICA6IGxheWVyQ29uZmlnO1xuXG4gIGlmICghcGFyc2VkTGF5ZXJDb25maWcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBmaXJzdCB2YWxpZGF0ZSBjb25maWcgYWdhaW5zdCBkYXRhc2V0XG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIFtwYXJzZWRMYXllckNvbmZpZ10sXG4gICAge2FsbG93RW1wdHlDb2x1bW46IHRydWV9XG4gICk7XG5cbiAgaWYgKGZhaWxlZD8ubGVuZ3RoIHx8ICF2YWxpZGF0ZWQubGVuZ3RoKSB7XG4gICAgLy8gZmFpbGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlZFswXTtcbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBmaWx0ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyKFxuICBuZXdGaWx0ZXI6IEZpbHRlcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRGaWx0ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZSh7ZmlsdGVyczogW25ld0ZpbHRlcl19LCBzY2hlbWEpO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5maWx0ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBsYXllciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVMYXllcihcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2xheWVyczogW25ld0xheWVyXSwgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZWZmZWN0IGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVmZmVjdChcbiAgbmV3RWZmZWN0OiBFZmZlY3RUeXBlLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEVmZmVjdCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtlZmZlY3RzOiBbbmV3RWZmZWN0XSwgZWZmZWN0T3JkZXI6IFtuZXdFZmZlY3QuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZWZmZWN0cz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCB2aXMgc3RhdGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWaXNTdGF0ZShcbiAgdmlzU3RhdGU6IFBhcnRpYWw8VmlzU3RhdGU+LFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZFZpc1N0YXRlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2F2ZWRTdGF0ZSA9IHNjaGVtYS5nZXRDb25maWdUb1NhdmUoe1xuICAgIHZpc1N0YXRlXG4gIH0pO1xuICByZXR1cm4gc2F2ZWRTdGF0ZSA/IHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkU3RhdGUpPy52aXNTdGF0ZSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJzIGZyb20gZGUtc2VyaWFsaXplZCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBnZXRMYXllck9yZGVyRnJvbUxheWVycyhsYXllcnNUb01lcmdlKVxuICAgIDogc3RhdGUucHJlc2VydmVMYXllck9yZGVyO1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGF5ZXJzVG9NZXJnZSkgfHwgIWxheWVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRvbid0IG1lcmdlIGxheWVyIGlmIGRhdGFzZXQgaXMgYmVpbmcgbWVyZ2VkXG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJzZWRMYXllcltdID0gW107XG4gIGNvbnN0IHRvTWVyZ2U6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgbGF5ZXJzVG9NZXJnZS5mb3JFYWNoKChsOiBQYXJzZWRMYXllcikgPT4ge1xuICAgIGlmIChsPy5jb25maWc/LmRhdGFJZCAmJiBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tsLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICB1bm1lcmdlZC5wdXNoKGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b01lcmdlLnB1c2gobCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7dmFsaWRhdGVkOiBtZXJnZWRMYXllciwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgdG9NZXJnZVxuICApO1xuICB1bm1lcmdlZC5wdXNoKC4uLmZhaWxlZCk7XG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyXG4gICk7XG5cbiAgbGV0IG1lcmdlZFN0YXRlOiBTID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyLFxuICAgIGxheWVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmxheWVyVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG5cbiAgLy8gQXBwbHkgcGVuZGluZyBsYXllck9yZGVyIHdpdGggZ3JvdXBzIGlmIGxheWVycyBhcmUgbm93IGF2YWlsYWJsZVxuICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQgJiYgbWVyZ2VkU3RhdGUubGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzYXZlZE9yZGVyID0gbWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQ7XG4gICAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyT3JkZXIobWVyZ2VkU3RhdGUsIHNhdmVkT3JkZXIpO1xuICAgIC8vIEtlZXAgc2F2ZWRMYXllck9yZGVyIGF2YWlsYWJsZSBmb3IgZnV0dXJlIGRlZmVycmVkIGxheWVyc1xuICAgIGlmIChtZXJnZWRTdGF0ZS5sYXllclRvQmVNZXJnZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSB7Li4ubWVyZ2VkU3RhdGUsIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZE9yZGVyfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgY3VycmVudExheWVycyxcbiAgbGF5ZXJzVG9JbnNlcnQsXG4gIGN1cnJlbnRPcmRlcixcbiAgcHJlc2VydmVkT3JkZXI6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAoIWxheWVyc1RvSW5zZXJ0Py5sZW5ndGgpIHtcbiAgICByZXR1cm4ge25ld0xheWVyczogY3VycmVudExheWVycywgbmV3TGF5ZXJPcmRlcjogY3VycmVudE9yZGVyfTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRMYXllclF1ZXVlID0gY3VycmVudE9yZGVyXG4gICAgLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKVxuICAgIC5tYXAoaWQgPT4gZmluZEJ5SWQoaWQpKGN1cnJlbnRMYXllcnMpKVxuICAgIC5maWx0ZXIobGF5ZXIgPT4gQm9vbGVhbihsYXllcikpO1xuICBjb25zdCBuZXdMYXllcnMgPSBjdXJyZW50TGF5ZXJzLmNvbmNhdChsYXllcnNUb0luc2VydCk7XG4gIGNvbnN0IG5ld0xheWVyT3JkZXJRdWV1ZSA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgY3VycmVudExheWVyUXVldWUsXG4gICAgbGF5ZXJzVG9JbnNlcnQsXG4gICAgcHJlc2VydmVkT3JkZXIsXG4gICAgdHJ1ZVxuICApO1xuXG4gIGNvbnN0IG5ld0ZsYXRMYXllck9yZGVyID0gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobmV3TGF5ZXJPcmRlclF1ZXVlKTtcblxuICAvLyBJZiBubyBncm91cHMgZXhpc3QgaW4gY3VycmVudCBvcmRlciwganVzdCB1c2UgdGhlIG5ldyBmbGF0IG9yZGVyXG4gIGNvbnN0IGhhc0dyb3VwcyA9IGN1cnJlbnRPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV3TGF5ZXJPcmRlcjogbmV3RmxhdExheWVyT3JkZXIsXG4gICAgICBuZXdMYXllcnNcbiAgICB9O1xuICB9XG5cbiAgLy8gUmVidWlsZCBsYXllck9yZGVyIHByZXNlcnZpbmcgZ3JvdXBzIGluIHRoZWlyIHJlbGF0aXZlIHBvc2l0aW9ucy5cbiAgLy8gUmVwbGFjZSBlYWNoIHN0cmluZyBlbnRyeSB3aXRoIGl0cyB1cGRhdGVkIHBvc2l0aW9uIGZyb20gbmV3RmxhdExheWVyT3JkZXIsXG4gIC8vIGFuZCBrZWVwIGdyb3VwcyBhcy1pcy5cbiAgY29uc3QgZXhpc3RpbmdGbGF0SWRzID0gbmV3IFNldChcbiAgICBjdXJyZW50T3JkZXIuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIGFzIHN0cmluZ1tdXG4gICk7XG4gIGNvbnN0IG5ld0luc2VydGVkSWRzID0gbmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+ICFleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSk7XG5cbiAgLy8gUmVidWlsZDogd2FsayB0aHJvdWdoIGN1cnJlbnRPcmRlciwgcmVwbGFjZSBzdHJpbmcgZW50cmllcyB3aXRoIHRoZWlyXG4gIC8vIG5ldyBwb3NpdGlvbiBlcXVpdmFsZW50cyBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLCB0aGVuIGFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzXG4gIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICBjb25zdCBmbGF0UXVldWUgPSBbLi4ubmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+IGV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKV07XG4gIGxldCBmbGF0SWR4ID0gMDtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN1cnJlbnRPcmRlcikge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgcmVzdWx0LnB1c2goZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVwbGFjZSB3aXRoIGNvcnJlc3BvbmRpbmcgZW50cnkgZnJvbSByZW9yZGVyZWQgZmxhdCBsaXN0XG4gICAgICBpZiAoZmxhdElkeCA8IGZsYXRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmxhdFF1ZXVlW2ZsYXRJZHhdKTtcbiAgICAgICAgZmxhdElkeCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzIGF0IHRoZSBmcm9udCAodGhleSBhcmUgbmV3KVxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXI6IFsuLi5uZXdJbnNlcnRlZElkcywgLi4ucmVzdWx0XSxcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBzYXZlZCBsYXllck9yZGVyIHdpdGggY3VycmVudCBzdGF0ZSB0byByZXN0b3JlIGxheWVyIGdyb3Vwcy5cbiAqIENhbGxlZCBhZnRlciBsYXllcnMgaGF2ZSBiZWVuIG1lcmdlZC4gSWYgdGhlIHNhdmVkIGNvbmZpZyBjb250YWlucyBhIGxheWVyT3JkZXJcbiAqIHdpdGggZ3JvdXBzLCB0aGlzIHJlcGxhY2VzIHRoZSBmbGF0IGxheWVyT3JkZXIgd2l0aCB0aGUgc2F2ZWQgaGllcmFyY2hpY2FsIG9uZSxcbiAqIGZpbHRlcmluZyBvdXQgYW55IGxheWVyIElEcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllck9yZGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzYXZlZExheWVyT3JkZXI/OiBhbnlbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIXNhdmVkTGF5ZXJPcmRlciB8fCAhQXJyYXkuaXNBcnJheShzYXZlZExheWVyT3JkZXIpIHx8IHNhdmVkTGF5ZXJPcmRlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgc2F2ZWQgbGF5ZXJPcmRlciBjb250YWlucyBhbnkgZ3JvdXBzXG4gIGNvbnN0IGhhc0dyb3VwcyA9IHNhdmVkTGF5ZXJPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICAvLyBObyBncm91cHMgLSB0aGUgbGF5ZXIgbWVyZ2VyIGFscmVhZHkgaGFuZGxlZCBvcmRlcmluZyB2aWEgcHJlc2VydmVMYXllck9yZGVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgbGF5ZXJzIGhhdmVuJ3QgYmVlbiBtZXJnZWQgeWV0LCBzdG9yZSBmb3IgbGF0ZXJcbiAgaWYgKHN0YXRlLmxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRMYXllck9yZGVyXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgc2V0IG9mIHZhbGlkIGxheWVyIElEcyBmcm9tIGN1cnJlbnQgc3RhdGVcbiAgY29uc3QgdmFsaWRMYXllcklkcyA9IG5ldyBTZXQoc3RhdGUubGF5ZXJzLm1hcChsID0+IGwuaWQpKTtcblxuICAvLyBSZWN1cnNpdmVseSBmaWx0ZXIgdGhlIHNhdmVkIGxheWVyT3JkZXIgdG8gb25seSBpbmNsdWRlIHZhbGlkIGxheWVyc1xuICBmdW5jdGlvbiBmaWx0ZXJMYXllck9yZGVyKG9yZGVyOiBhbnlbXSk6IExheWVyT3JkZXIge1xuICAgIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyKTtcbiAgICAgICAgLy8gS2VlcCB0aGUgZ3JvdXAgZXZlbiBpZiBlbXB0eSAodXNlciBtYXkgd2FudCB0aGUgZW1wdHkgZ3JvdXApXG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBmaWx0ZXJlZEdyb3VwT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgJiYgdmFsaWRMYXllcklkcy5oYXMoZW50cnkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmVkTGF5ZXJPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoc2F2ZWRMYXllck9yZGVyKTtcblxuICAvLyBGaW5kIGFueSBsYXllcnMgaW4gdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBhcmVuJ3QgaW4gdGhlIHJlc3RvcmVkIG9yZGVyXG4gIC8vIChjb3VsZCBoYXBwZW4gaWYgbGF5ZXJzIHdlcmUgYWRkZWQgYmV0d2VlbiBzYXZlIGFuZCBsb2FkKVxuICBjb25zdCBsYXllcklkc0luUmVzdG9yZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZnVuY3Rpb24gY29sbGVjdElkcyhvcmRlcjogYW55W10pIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29sbGVjdElkcygoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBsYXllcklkc0luUmVzdG9yZWQuYWRkKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29sbGVjdElkcyhyZXN0b3JlZExheWVyT3JkZXIpO1xuXG4gIC8vIEFkZCBhbnkgbWlzc2luZyBsYXllcnMgYXQgdGhlIHRvcFxuICBjb25zdCBtaXNzaW5nTGF5ZXJzID0gc3RhdGUubGF5ZXJzXG4gICAgLmZpbHRlcihsID0+ICFsYXllcklkc0luUmVzdG9yZWQuaGFzKGwuaWQpKVxuICAgIC5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IFsuLi5taXNzaW5nTGF5ZXJzLCAuLi5yZXN0b3JlZExheWVyT3JkZXJdLFxuICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiB8IHVuZGVmaW5lZFxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZDogTmVzdGVkUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuICBjb25zdCB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICAoT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSBhcyBBcnJheTxrZXlvZiBTYXZlZEludGVyYWN0aW9uQ29uZmlnPikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9XG4gICAgICAgIGtleSA9PT0gJ3Rvb2x0aXAnIHx8IGtleSA9PT0gJ2JydXNoJyB8fCBrZXkgPT09ICdnZW9jb2RlcidcbiAgICAgICAgICA/IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBjb25zdCB7ZW5hYmxlZCwgLi4uY29uZmlnU2F2ZWR9ID0gaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkW2tleV0gfHwge307XG5cbiAgICAgIGxldCBjb25maWdUb01lcmdlID0gY29uZmlnU2F2ZWQ7XG5cbiAgICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfSA9IG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbmZpZ1NhdmVkIGFzIFNhdmVkSW50ZXJhY3Rpb25Db25maWdbJ3Rvb2x0aXAnXVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIG1lcmdlIG5ldyBkYXRhc2V0IHRvb2x0aXBzIHdpdGggb3JpZ2luYWwgZGF0YXNldCB0b29sdGlwc1xuICAgICAgICBjb25maWdUb01lcmdlID0ge1xuICAgICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgICAgLi4uKGN1cnJlbnRDb25maWcgYXMgVG9vbHRpcEluZm9bJ2NvbmZpZyddKS5maWVsZHNUb1Nob3csXG4gICAgICAgICAgICAuLi5tZXJnZWRUb29sdGlwXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh1bm1lcmdlZFRvb2x0aXApLmxlbmd0aCkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICB1bm1lcmdlZC50b29sdGlwID0ge2ZpZWxkc1RvU2hvdzogdW5tZXJnZWRUb29sdGlwLCBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtZXJnZWRba2V5XSA9IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSxcbiAgICAgICAgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKSxcbiAgICAgICAgLi4uKGN1cnJlbnRDb25maWdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZmlnOiBwaWNrKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAuLi5jb25maWdUb01lcmdlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgLi4ubWVyZ2VkXG4gICAgfSxcbiAgICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbihzdGF0ZSwgdW5tZXJnZWQpXG4gIH07XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1tdKTogU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyB7XG4gIGNvbnN0IGNvbWJpbmVkID0gey4uLmNvbmZpZ3NbMF19O1xuICAvLyBoYW5kbGUgZWFjaCBwcm9wZXJ0eSBrZXkgb2YgYW4gYEludGVyYWN0aW9uQ29uZmlnYCwgZS5nLiB0b29sdGlwLCBnZW9jb2RlciwgYnJ1c2gsIGNvb3JkaW5hdGVcbiAgLy8gYnkgY29tYmluaW5nIHZhbHVlcyBmb3IgZWFjaCBhbW9uZyBhbGwgcGFzc2VkIGluIGNvbmZpZ3NcblxuICBmb3IgKGNvbnN0IGtleSBpbiBjb21iaW5lZCkge1xuICAgIGNvbnN0IHRvQmVDb21iaW5lZFByb3BzID0gY29uZmlncy5tYXAoYyA9PiBjW2tleV0pO1xuXG4gICAgLy8gYWxsIG9mIHRoZXNlIGhhdmUgYW4gZW5hYmxlZCBib29sZWFuXG4gICAgY29tYmluZWRba2V5XSA9IHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGVuYWJsZWQgdmFsdWVzIHRydWU/XG4gICAgICBlbmFibGVkOiB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uZW5hYmxlZClcbiAgICB9O1xuXG4gICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBjb21wYXJlTW9kZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZU1vZGUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uY29tcGFyZU1vZGUpO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGNvbXBhcmUgdHlwZSBtb2RlLCBpdCB3aWxsIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZVxuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlVHlwZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICB0b0JlQ29tYmluZWRQcm9wcy5tYXAocCA9PiBwLmNvbXBhcmVUeXBlKVxuICAgICAgKTtcblxuICAgICAgLy8gY29tYmluZSBmaWVsZHNUb1Nob3cgYW1vbmcgYWxsIGRhdGFzZXQgaWRzXG4gICAgICBjb21iaW5lZFtrZXldLmZpZWxkc1RvU2hvdyA9IHRvQmVDb21iaW5lZFByb3BzXG4gICAgICAgIC5tYXAocCA9PiBwLmZpZWxkc1RvU2hvdylcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBuZXh0RmllbGRzVG9TaG93KSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBuZXh0RGF0YUlkS2V5IGluIG5leHRGaWVsZHNUb1Nob3cpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUb29sdGlwRmllbGRzID0gbmV4dEZpZWxkc1RvU2hvd1tuZXh0RGF0YUlkS2V5XTtcbiAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRhc2V0IGlkIGlzIG5vdCBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyB0aGVuIGFkZCBpdCB3aXRoIGl0cyB0b29sdGlwIGZpZWxkc1xuICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0gPSBuZXh0VG9vbHRpcEZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGUgZGF0YXNldCBpZCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHNvIG9ubHkgYWRkIHRoZSBuZXh0IHRvb2x0aXAgZmllbGRzIGZvciB0aGlzIGRhdGFzZXQncyBhcnJheSBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBwcmVzZW50LFxuICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgdG9vbHRpcEZpZWxkLm5hbWUgcHJvcGVydHkgZm9yIHVuaXF1ZW5lc3NcbiAgICAgICAgICAgICAgbmV4dFRvb2x0aXBGaWVsZHMuZm9yRWFjaChuZXh0VEYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldLmZpbmQoKHtuYW1lfSkgPT4gbmV4dFRGLm5hbWUgPT09IG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0ucHVzaChuZXh0VEYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYnJ1c2gnKSB7XG4gICAgICAvLyBrZWVwIHRoZSBiaWdnZXN0IGJydXNoIHNpemVcbiAgICAgIGNvbWJpbmVkW2tleV0uc2l6ZSA9XG4gICAgICAgIGFnZ3JlZ2F0ZSh0b0JlQ29tYmluZWRQcm9wcywgQUdHUkVHQVRJT05fVFlQRVMubWF4aW11bSwgcCA9PiBwLnNpemUpID8/IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2dlb2NvZGVyJykge1xuICAgICAgY29tYmluZWRba2V5XS5saW1pdFNlYXJjaCA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5saW1pdFNlYXJjaCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkO1xufVxuXG5mdW5jdGlvbiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb248UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+XG4pIHtcbiAgaWYgKCF1bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93KSB7XG4gICAgcmV0dXJuIHN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZC50b29sdGlwLFxuICAgICAgLi4uKHR5cGVvZiB1bm1lcmdlZD8udG9vbHRpcD8uZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8ge2VuYWJsZWQ6IHVubWVyZ2VkLnRvb2x0aXAuZW5hYmxlZH1cbiAgICAgICAgOiB7fSksXG4gICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3csXG4gICAgICAgIC4uLnVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3dcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMoaW50ZXJhY3Rpb25Db25maWcsIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLFxuICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICBbZGF0YUlkVG9SZXBsYWNlXTogaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE1lcmdlIHNwbGl0TWFwcyBjb25maWcgd2l0aCBjdXJyZW50IHZpc1N0ZXRlLlxuICogMS4gaWYgY3VycmVudCBtYXAgaXMgc3BsaXQsIGJ1dCBzcGxpdE1hcCBET0VTTk9UIGNvbnRhaW4gbWFwc1xuICogICAgOiBkb24ndCBtZXJnZSBhbnl0aGluZ1xuICogMi4gaWYgY3VycmVudCBtYXAgaXMgTk9UIHNwbGl0LCBidXQgc3BsaXRNYXBzIGNvbnRhaW4gbWFwc1xuICogICAgOiBhZGQgdG8gc3BsaXRNYXBzLCBhbmQgYWRkIGN1cnJlbnQgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTcGxpdE1hcHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNwbGl0TWFwczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnc3BsaXRNYXBzJ10gPSBbXVxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZCA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc20ubGF5ZXJzKTtcbiAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICBlbnRyaWVzLmZvckVhY2goKFtpZCwgdmFsdWVdKSA9PiB7XG4gICAgICAgIC8vIGNoZWNrIGlmIGxheWVyIGV4aXN0c1xuICAgICAgICBjb25zdCBwdXNoVG8gPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGlkKSA/IG1lcmdlZCA6IHVubWVyZ2VkO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBtYXAgcGFuZWwgaWYgY3VycmVudCBtYXAgaXMgbm90IHNwbGl0XG4gICAgICAgIHB1c2hUb1tpXSA9IHB1c2hUb1tpXSB8fCB7XG4gICAgICAgICAgLy8ga2VlcCBpZFxuICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgIGxheWVyczogcHVzaFRvID09PSBtZXJnZWQgPyBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAoc3RhdGUubGF5ZXJzKSA6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHB1c2hUb1tpXS5sYXllcnMgPSB7XG4gICAgICAgICAgLi4ucHVzaFRvW2ldLmxheWVycyxcbiAgICAgICAgICBbaWRdOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIGFyZSBtZXJnaW5nIGlmIHRoZXJlIGFyZSBubyBsYXllcnMgaW4gYm90aCBzcGxpdCBtYXBcbiAgICAgIG1lcmdlZC5wdXNoKHNtKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBtZXJnZWQsXG4gICAgc3BsaXRNYXBzVG9CZU1lcmdlZDogWy4uLnN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGVmZmVjdHMgd2l0aCBzYXZlZCBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWZmZWN0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZWZmZWN0czogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZWZmZWN0cyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbXG4gICAgLi4uc3RhdGUuZWZmZWN0cyxcbiAgICAuLi4oZWZmZWN0cyB8fCBbXSlcbiAgICAgIC5tYXAoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIGZyb21Db25maWdcbiAgICAgICAgICA/IGNyZWF0ZUVmZmVjdChcbiAgICAgICAgICAgICAgZGVlcG1lcmdlLmFsbChbXG4gICAgICAgICAgICAgICAgZWZmZWN0LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC8vIGNvbGxhcHNlIGFsbCBwYW5lbHMgd2hlbiBsb2FkaW5nIGVmZmVjdHNcbiAgICAgICAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IChlZmZlY3QgYXMgRWZmZWN0VHlwZSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihlZmZlY3QgJiYgZWZmZWN0LmlzVmFsaWRUb1NhdmUoKSk7XG4gICAgICB9KVxuICBdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXI6IG5ld0VmZmVjdHMubWFwKGVmZmVjdCA9PiBlZmZlY3QuaWQpXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgYW5ub3RhdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5ub3RhdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYW5ub3RhdGlvbnM6IGFueVtdKTogUyB7XG4gIGlmICghYW5ub3RhdGlvbnMgfHwgIWFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoc3RhdGUuYW5ub3RhdGlvbnMubWFwKGEgPT4gYS5pZCkpO1xuICBjb25zdCB2YWxpZEFubm90YXRpb25zID0gYW5ub3RhdGlvbnNcbiAgICAuZmlsdGVyKFxuICAgICAgYSA9PlxuICAgICAgICBhICYmXG4gICAgICAgIGEuaWQgJiZcbiAgICAgICAgIWV4aXN0aW5nSWRzLmhhcyhhLmlkKSAmJlxuICAgICAgICBpc0Fubm90YXRpb25LaW5kKGEua2luZCkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShhLmFuY2hvclBvaW50KSAmJlxuICAgICAgICBhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMlxuICAgIClcbiAgICAubWFwKGEgPT4gKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplOiB0cnVlLFxuICAgICAgYXV0b1NpemVZOiB0cnVlLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgbGluZUNvbG9yOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICAgIGxpbmVXaWR0aDogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgICB0ZXh0V2lkdGg6IDAsXG4gICAgICB0ZXh0SGVpZ2h0OiAwLFxuICAgICAgLi4uYVxuICAgIH0pKTtcbiAgaWYgKCF2YWxpZEFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbLi4uc3RhdGUuYW5ub3RhdGlvbnMsIC4uLnZhbGlkQW5ub3RhdGlvbnNdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgW2xheWVyVGV4dExhYmVsXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgY29uc3Qgc2F2ZWRUZXh0TGFiZWxzID0gQXJyYXkuaXNBcnJheShzYXZlZFRleHRMYWJlbCkgPyBzYXZlZFRleHRMYWJlbCA6IFtzYXZlZFRleHRMYWJlbF07XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRleHRMYWJlbC5maWVsZFxuICAgICAgPyBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKHRleHRMYWJlbC5maWVsZCkuZXZlcnkoa2V5ID0+IHRleHRMYWJlbC5maWVsZFtrZXldID09PSBmZFtrZXldKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0ZXh0IGxhYmVsIGZpZWxkOiAke0pTT04uc3RyaW5naWZ5KHRleHRMYWJlbC5maWVsZCl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyVGV4dExhYmVsKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSB8fCBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdmlzdWFsIGNoYW5uZWxzIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pOiBudWxsIHwgTGF5ZXIge1xuICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQsIHNjYWxlLCBrZXl9KSA9PiB7XG4gICAgbGV0IGZvdW5kRmllbGQ7XG4gICAgaWYgKHNhdmVkTGF5ZXIuY29uZmlnKSB7XG4gICAgICBpZiAoc2F2ZWRMYXllci5jb25maWdbZmllbGRdKSB7XG4gICAgICAgIGZvdW5kRmllbGQgPSBmaWVsZHMuZmluZChcbiAgICAgICAgICBmZCA9PiBzYXZlZExheWVyLmNvbmZpZyAmJiBmZC5uYW1lID09PSBzYXZlZExheWVyLmNvbmZpZ1tmaWVsZF0ubmFtZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZENoYW5uZWwgPSB7XG4gICAgICAgIC4uLihmb3VuZEZpZWxkID8ge1tmaWVsZF06IGZvdW5kRmllbGR9IDoge30pLFxuICAgICAgICAuLi4oc2F2ZWRMYXllci5jb25maWdbc2NhbGVdID8ge1tzY2FsZV06IHNhdmVkTGF5ZXIuY29uZmlnW3NjYWxlXX0gOiB7fSlcbiAgICAgIH07XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZm91bmRDaGFubmVsKS5sZW5ndGgpIHtcbiAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICAgIH1cblxuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gc2F2ZWRMYXllci5jb25maWc/LltmaWVsZF0/Lm5hbWU7XG4gICAgICAgIGlmIChmaWVsZE5hbWUgJiYgZmllbGROYW1lICE9PSBuZXdMYXllci5jb25maWdbZmllbGRdPy5uYW1lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB2aXN1YWwgY2hhbm5lbCBmaWVsZDogJHtmaWVsZH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxudHlwZSBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge1xuICBhbGxvd0VtcHR5Q29sdW1uPzogYm9vbGVhbjtcbiAgdGhyb3dPbkVycm9yPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIGxheWVyczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgb3B0aW9ucz86IFZhbGlkYXRlTGF5ZXJPcHRpb25cbikge1xuICBjb25zdCB2YWxpZGF0ZWQ6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdO1xuXG4gIGxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBsZXQgdmFsaWRhdGVMYXllcjogTGF5ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChsYXllcj8uY29uZmlnPy5kYXRhSWQpIHtcbiAgICAgIGlmIChkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSkge1xuICAgICAgICAvLyBkYXRhc2V0cyBhcmUgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgdmFsaWRhdGVMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAgICAgICAgICBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSxcbiAgICAgICAgICBsYXllcixcbiAgICAgICAgICBsYXllckNsYXNzZXMsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZUxheWVyKSB7XG4gICAgICB2YWxpZGF0ZWQucHVzaCh2YWxpZGF0ZUxheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGF0YXNldHMgbm90IHlldCBsb2FkZWRcbiAgICAgIGZhaWxlZC5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7dmFsaWRhdGVkLCBmYWlsZWR9O1xufVxuXG4vKipcbiAqIEdldCByZXF1aXJlZCBjb2x1bW5zIGZvciB2YWxpZGF0aW9uIGJhc2VkIG9uIGNvbHVtbiBtb2RlXG4gKi9cbmZ1bmN0aW9uIF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKSB7XG4gIC8vIGZpbmQgY29sdW1uIGZpZWxkSWR4XG4gIGxldCBjb2x1bW5Db25maWcgPSBuZXdMYXllci5nZXRMYXllckNvbHVtbnMoKTtcbiAgLy8gaWYgY29sdW1uTW9kZSBpcyBkZWZpbmVkLCBmaW5kIGNvbHVtbiBtb2RlIGNvbmZpZ1xuICBjb25zdCBjb2xNb2RlQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLmNvbHVtbk1vZGVcbiAgICA/IChuZXdMYXllci5zdXBwb3J0ZWRDb2x1bW5Nb2RlcyB8fCBbXSkuZmluZChcbiAgICAgICAgY29sTW9kZSA9PiBjb2xNb2RlLmtleSA9PT0gbmV3TGF5ZXIuY29uZmlnLmNvbHVtbk1vZGVcbiAgICAgIClcbiAgICA6IG51bGw7XG5cbiAgaWYgKGNvbE1vZGVDb25maWcpIHtcbiAgICAvLyBvbmx5IHZhbGlkYXRlIGNvbHVtbnMgaW4gY29sdW1uIG1vZGVcbiAgICBjb2x1bW5Db25maWcgPSBbXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uKGNvbE1vZGVDb25maWcub3B0aW9uYWxDb2x1bW5zIHx8IFtdKVxuICAgIF0ucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtbkNvbmZpZ1trZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjb2x1bW5Db25maWc7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgb3B0aW9uczogVmFsaWRhdGVMYXllck9wdGlvbiA9IHt9XG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCB7ZmllbGRzLCBpZDogZGF0YUlkfSA9IGRhdGFzZXQ7XG4gIGNvbnN0IHt0eXBlfSA9IHNhdmVkTGF5ZXI7XG4gIGNvbnN0IHt0aHJvd09uRXJyb3J9ID0gb3B0aW9ucztcbiAgLy8gbGF5ZXIgZG9lc250IGhhdmUgYSB2YWxpZCB0eXBlXG4gIGlmICghdHlwZSB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyQ2xhc3NlcywgdHlwZSkgfHwgIXNhdmVkTGF5ZXIuY29uZmlnKSB7XG4gICAgaWYgKHRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0eXBlIFwiJHt0eXBlfVwiIG9yIGNvbmZpZyBpcyBtaXNzaW5nYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1t0eXBlXSh7XG4gICAgaWQ6IHNhdmVkTGF5ZXIuaWQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsOiBzYXZlZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBjb2xvcjogc2F2ZWRMYXllci5jb25maWcuY29sb3IsXG4gICAgaXNWaXNpYmxlOiBzYXZlZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaGlkZGVuOiBzYXZlZExheWVyLmNvbmZpZy5oaWRkZW4sXG4gICAgY29sdW1uTW9kZTogc2F2ZWRMYXllci5jb25maWcuY29sdW1uTW9kZSxcbiAgICBoaWdobGlnaHRDb2xvcjogc2F2ZWRMYXllci5jb25maWcuaGlnaGxpZ2h0Q29sb3JcbiAgfSk7XG5cbiAgY29uc3QgY29sdW1uQ29uZmlnID0gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpO1xuXG4gIGlmIChPYmplY3Qua2V5cyhjb2x1bW5Db25maWcpKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gICAgICBmaWVsZHMsXG4gICAgICBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgY29sdW1uQ29uZmlnLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgaWYgKGNvbHVtbnMpIHtcbiAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgY29sdW1uczoge1xuICAgICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgICAgIC4uLmNvbHVtbnNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5hbGxvd0VtcHR5Q29sdW1uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0ZXh0TGFiZWwgPVxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCAmJiBuZXdMYXllci5jb25maWcudGV4dExhYmVsXG4gICAgICA/IHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gICAgICAgICAgZmllbGRzLFxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKVxuICAgICAgOiBuZXdMYXllci5jb25maWcudGV4dExhYmVsO1xuXG4gIC8vIGNvcHkgdmlzQ29uZmlnIG92ZXIgdG8gZW1wdHlMYXllciB0byBtYWtlIHN1cmUgaXQgaGFzIGFsbCB0aGUgcHJvcHNcbiAgY29uc3QgY29waWVkVmlzQ29uZmlnID0gbmV3TGF5ZXIuY29weUxheWVyQ29uZmlnKFxuICAgIG5ld0xheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnIHx8IHt9LFxuICAgIHtcbiAgICAgIHNoYWxsb3dDb3B5OiBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddXG4gICAgfVxuICApO1xuXG4gIC8vIGNhbGwgbGF5ZXIgbWV0aG9kcyB0byB2YWxpZGF0ZSB2aXNDb25maWcgd2hlbiBzd2l0Y2hpbmcgZGF0YXNldFxuICBjb25zdCB2aXNDb25maWcgPSBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZ1xuICAgID8gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWcoZGF0YXNldCwgY29waWVkVmlzQ29uZmlnKVxuICAgIDogY29waWVkVmlzQ29uZmlnO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICB2aXNDb25maWcsXG4gICAgdGV4dExhYmVsXG4gIH0pO1xuXG4gIC8vIHZpc3VhbCBjaGFubmVsIGZpZWxkIGlzIHNhdmVkIHRvIGJlIHtuYW1lLCB0eXBlfVxuICAvLyBmaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkIGJ5IG1hdGNoaW5nIGJvdGggbmFtZSBhbmQgdHlwZVxuICAvLyByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICBuZXdMYXllciA9IHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhmaWVsZHMsIG5ld0xheWVyLCBzYXZlZExheWVyLCBvcHRpb25zKTtcblxuICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgaWYgKCFuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmU6ICR7bmV3TGF5ZXIuaWR9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZGl0b3I8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgc2F2ZWRFZGl0b3I6IFNhdmVkRWRpdG9yKSB7XG4gIGlmICghc2F2ZWRFZGl0b3IpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCAuLi4oc2F2ZWRFZGl0b3IuZmVhdHVyZXMgfHwgW10pXSxcbiAgICAgIC8vIGlmIHNhdmVkRWRpdG9yLnZpc2libGUgaXMgdW5kZWZpbmVkIGtlZXAgc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICAgIHZpc2libGU6IHNhdmVkRWRpdG9yLnZpc2libGUgPz8gc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFZGl0b3JDb25maWdzKGNvbmZpZ3M6IFNhdmVkRWRpdG9yW10pOiBTYXZlZEVkaXRvciB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZShcbiAgICAoYWNjLCBuZXh0Q29uZmlnKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIGZlYXR1cmVzOiBbLi4uYWNjLmZlYXR1cmVzLCAuLi4obmV4dENvbmZpZy5mZWF0dXJlcyB8fCBbXSldXG4gICAgICB9O1xuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3RhcnQgd2l0aDpcbiAgICAgIC8vIC0gZW1wdHkgYXJyYXkgZm9yIGZlYXR1cmVzIGFjY3VtdWxhdGlvblxuICAgICAgLy8gLSBhbmQgYXJlIGFueSBvZiB0aGUgY29uZmlncycgdmlzaWJsZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHZpc2libGU6IGNvbmZpZ3Muc29tZShjID0+IGM/LnZpc2libGUpXG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlOiBWaXNTdGF0ZSwgbmV3RGF0YUVudHJpZXM6IERhdGFzZXRzKTogRGF0YXNldHMge1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgLi4ubmV3RGF0YUVudHJpZXNcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcikpIHtcbiAgICAvLyBwcmVzZXJ2ZURhdGFzZXRPcmRlciAgbWlnaHQgbm90IGluY2x1ZGUgdGhlICBuZXcgZGF0YXNldHNcbiAgICBjb25zdCBuZXdEYXRhc2V0SWRzID0gT2JqZWN0LmtleXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgICBpZCA9PiAhc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXI/LmluY2x1ZGVzKGlkKVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciwgLi4ubmV3RGF0YXNldElkc10ucmVkdWNlKFxuICAgICAgKGFjY3UsIGRhdGFJZCkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4uKG1lcmdlZFtkYXRhSWRdID8ge1tkYXRhSWRdOiBtZXJnZWRbZGF0YUlkXX0gOiB7fSlcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyoqXG4gKiBTaW1saWFyIHB1cnBvc2UgdG8gYWdncmVnYXRpb24gdXRpbHMgYGdldE1vZGVgIGZ1bmN0aW9uLFxuICogYnV0IHJldHVybnMgdGhlIG1vZGUgaW4gdGhlIHNhbWUgdmFsdWUgdHlwZSB3aXRob3V0IGNvZXJjaW5nIHRvIGEgc3RyaW5nLlxuICogSXQgaWdub3JlcyBgdW5kZWZpbmVkYCBvciBgbnVsbGAgdmFsdWVzLCBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm8gbW9kZSBjb3VsZCBiZSBjYWxjdWxhdGVkLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZTxUPihhcnI6IFRbXSk6IFQgfCBudWxsIHtcbiAgY29uc3QgdGFsbHlzID0gbmV3IE1hcCgpO1xuICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIGlmICghdGFsbHlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCB0YWxseXMuZ2V0KHZhbHVlKSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJldHVybiB0aGUgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdCB0b3RhbCBvY2N1cnJlbmNlIGNvdW50XG4gIGlmICh0YWxseXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBbLi4udGFsbHlzLmVudHJpZXMoKV0/LnJlZHVjZSgoYWNjLCBuZXh0KSA9PiAobmV4dFsxXSA+IGFjY1sxXSA/IG5leHQgOiBhY2MpKVswXTtcbn1cblxuZXhwb3J0IGNvbnN0IFZJU19TVEFURV9NRVJHRVJTOiBWaXNTdGF0ZU1lcmdlcnM8YW55PiA9IFtcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVycyxcbiAgICBwcm9wOiAnbGF5ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2xheWVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlTGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVyT3JkZXIsXG4gICAgcHJvcDogJ2xheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VGaWx0ZXJzLFxuICAgIHByb3A6ICdmaWx0ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2ZpbHRlclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUZpbHRlck9yZGVyJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUZpbHRlckRhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUVmZmVjdHMsXG4gICAgcHJvcDogJ2VmZmVjdHMnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VBbm5vdGF0aW9ucyxcbiAgICBwcm9wOiAnYW5ub3RhdGlvbnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnYW5ub3RhdGlvbnNUb0JlTWVyZ2VkJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlSW50ZXJhY3Rpb25zLFxuICAgIHByb3A6ICdpbnRlcmFjdGlvbkNvbmZpZycsXG4gICAgdG9NZXJnZVByb3A6ICdpbnRlcmFjdGlvblRvQmVNZXJnZWQnLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzLFxuICAgIHNhdmVVbm1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VMYXllckJsZW5kaW5nLCBwcm9wOiAnbGF5ZXJCbGVuZGluZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3N9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlT3ZlcmxheUJsZW5kaW5nLFxuICAgIHByb3A6ICdvdmVybGF5QmxlbmRpbmcnLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlU3BsaXRNYXBzLCBwcm9wOiAnc3BsaXRNYXBzJywgdG9NZXJnZVByb3A6ICdzcGxpdE1hcHNUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VBbmltYXRpb25Db25maWcsIHByb3A6ICdhbmltYXRpb25Db25maWcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUFuaW1hdGlvbkNvbmZpZ3N9LFxuICB7bWVyZ2U6IG1lcmdlRWRpdG9yLCBwcm9wOiAnZWRpdG9yJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVFZGl0b3JDb25maWdzfVxuXTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsSUFBSSxNQUFNLHdCQUF3QjtBQUN6QyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLFdBQVcsTUFBTSwrQkFBK0I7QUFDdkQsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FDRUMsV0FBVyxFQUNYQyw4QkFBOEIsRUFDOUJDLHNCQUFzQixFQUN0QkMsNkJBQTZCLEVBQzdCQyxRQUFRLEVBQ1JDLFNBQVMsRUFDVEMsYUFBYSxRQUNSLGtCQUFrQjtBQUd6QixTQUFRQyxZQUFZLFFBQU8sb0JBQW9CO0FBQy9DLFNBQVFDLGtCQUFrQixRQUFPLHlCQUF5QjtBQUMxRCxTQUNFQyxpQkFBaUIsRUFDakJDLGVBQWUsRUFDZkMsaUJBQWlCLEVBQ2pCQyxnQkFBZ0IsRUFDaEJDLDZCQUE2QixFQUM3QkMsNkJBQTZCLFFBQ3hCLHNCQUFzQjtBQUM3QixTQUFRQyxlQUFlLFFBQXVELG9CQUFvQjtBQW9CbEcsU0FBK0JDLGlCQUFpQixFQUFFQyxrQkFBa0IsUUFBTyxrQkFBa0I7QUFFN0YsU0FBUUMsdUJBQXVCLFFBQU8sZUFBZTs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsWUFB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
|
|
1202
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJmaW5kQnlJZCIsImFnZ3JlZ2F0ZSIsImlzUGxhaW5PYmplY3QiLCJjcmVhdGVFZmZlY3QiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJBR0dSRUdBVElPTl9UWVBFUyIsIkxBWUVSX0JMRU5ESU5HUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiaXNBbm5vdGF0aW9uS2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJDVVJSRU5UX1ZFUlNJT04iLCJhc3NpZ25HcHVDaGFubmVscyIsInJlc2V0RmlsdGVyR3B1TW9kZSIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVkIiwiZmFpbGVkIiwidXBkYXRlZERhdGFzZXRzIiwidXBkYXRlZEZpbHRlcnMiLCJpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyIiwiZmlsdGVycyIsImRhdGFzZXRzVG9GaWx0ZXIiLCJmIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJsYXllcnMiLCJfb2JqZWN0U3ByZWFkIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwicmVwbGFjZUZpbHRlckRhdGFzZXRJZHMiLCJzYXZlZEZpbHRlciIsImRhdGFJZFRvVXNlIiwicmVwbGFjZWQiLCJmb3JFYWNoIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsIl9kZWZpbmVQcm9wZXJ0eSIsInB1c2giLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsImxheWVyQ29uZmlnIiwidmlzdWFsQ2hhbm5lbHMiLCJwYXJzZUxheWVyQ29uZmlnIiwic2NoZW1hIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uIiwic2F2ZWRDb25maWciLCJ2ZXJzaW9uIiwiY29uZmlnIiwidmlzU3RhdGUiLCJsYXllck9yZGVyIiwicGFyc2VTYXZlZENvbmZpZyIsImN1cnJlbnRJdGVtcyIsIml0ZW1zIiwicHJlc2VydmVkT3JkZXIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJkZWZhdWx0U3RhcnQiLCJuZXdJdGVtcyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJpdGVtIiwidmFsdWUiLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsImkiLCJwcmVjZWVkSWR4IiwiX2xvb3AiLCJwcmVjZWVkSXRlbUlkIiwiZmluZEluZGV4IiwiZXJyIiwiZSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsImFwcGx5IiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsIl9leGNsdWRlZCIsImNvbmZpZ1RvTWVyZ2UiLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0b29sdGlwIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsIl9sb29wMiIsInRvQmVDb21iaW5lZFByb3BzIiwiYyIsInAiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiZmluZCIsIl9yZWYzIiwibmFtZSIsIl9hZ2dyZWdhdGUiLCJzaXplIiwibWF4aW11bSIsImxpbWl0U2VhcmNoIiwiX3VubWVyZ2VkJHRvb2x0aXAiLCJfdW5tZXJnZWQkdG9vbHRpcDIiLCJfc3RhdGUkaW50ZXJhY3Rpb25Ub0IiLCJfdW5tZXJnZWQkdG9vbHRpcDMiLCJyZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvMiIsIm1lcmdlU3BsaXRNYXBzIiwic3BsaXRNYXBzIiwic20iLCJlbnRyaWVzIiwiX3JlZjQiLCJfcmVmNSIsIl9zbGljZWRUb0FycmF5IiwicHVzaFRvIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsIm1lcmdlRWZmZWN0cyIsIm5ld0VmZmVjdHMiLCJlZmZlY3QiLCJhbGwiLCJpc0NvbmZpZ0FjdGl2ZSIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJleGlzdGluZ0lkcyIsImEiLCJ2YWxpZEFubm90YXRpb25zIiwia2luZCIsImFuY2hvclBvaW50IiwiZXZlcnkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImlzVmlzaWJsZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwibGFiZWwiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyIsIm1lcmdlQW5pbWF0aW9uQ29uZmlnIiwiYW5pbWF0aW9uIiwiY3VycmVudFRpbWUiLCJhbmltYXRpb25Db25maWciLCJkb21haW4iLCJjb21iaW5lQW5pbWF0aW9uQ29uZmlncyIsIl9hZ2dyZWdhdGUyIiwiX2FnZ3JlZ2F0ZTMiLCJtaW5pbXVtIiwic3BlZWQiLCJ2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zIiwic2F2ZWRDb2xzIiwiZW1wdHlDb2xzIiwib3B0aW9ucyIsImNvbHVtbnMiLCJfbG9vcDUiLCJfT2JqZWN0JGtleXMiLCJfaSIsInNhdmVkIiwiZmllbGRJZHgiLCJfcmVmNiIsImFsbENvbEZvdW5kIiwidmFsaWRhdGVDb2x1bW4iLCJydiIsInRocm93T25FcnJvciIsInJlcXVpcmVkQ29sdW1ucyIsImsiLCJvcHRpb25hbCIsIm1pc3NpbmdDb2x1bW5zIiwiRXJyb3IiLCJqb2luIiwiY29uZmlnQ29sdW1ucyIsImludmFsaWRDb2x1bW5zIiwiX2NvbHVtbnMkayIsImNvbHVtbiIsInZhbGlkYXRvciIsInZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwiLCJfcmVmNyIsInNhdmVkVGV4dExhYmVsIiwiX3JlZjgiLCJsYXllclRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVscyIsInRleHRMYWJlbCIsImZkIiwiSlNPTiIsInN0cmluZ2lmeSIsImFjY3UiLCJnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZSIsInNhdmVkTGF5ZXIiLCJjaGFubmVscyIsIl90eXBlb2YiLCJ2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMiLCJ2YWx1ZXMiLCJfcmVmOSIsInNjYWxlIiwic2F2ZWRGaWVsZCIsInNhdmVkU2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJncm91cENvbHVtbnMiLCJjb2x1bW5Hcm91cHMiLCJmbGF0TWFwIiwicmVxdWlyZWRLZXlzIiwib3B0aW9uYWxDb2x1bW5zIiwiY29sIiwiX29wdGlvbmFsIiwicmVxdWlyZWRDb2wiLCJfZXhjbHVkZWQyIiwiZGF0YXNldCIsInR5cGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJoaWRkZW4iLCJoaWdobGlnaHRDb2xvciIsImNvcGllZFZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInZpc0NvbmZpZyIsInNoYWxsb3dDb3B5IiwidmFsaWRhdGVWaXNDb25maWciLCJtZXJnZUVkaXRvciIsInNhdmVkRWRpdG9yIiwiX3NhdmVkRWRpdG9yJHZpc2libGUiLCJlZGl0b3IiLCJmZWF0dXJlcyIsInZpc2libGUiLCJjb21iaW5lRWRpdG9yQ29uZmlncyIsIm5leHRDb25maWciLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsIm5ld0RhdGFFbnRyaWVzIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJuZXdEYXRhc2V0SWRzIiwiX3N0YXRlJHByZXNlcnZlRGF0YXNlIiwiYXJyIiwiX3JlZjExIiwidGFsbHlzIiwiTWFwIiwic2V0IiwiZ2V0IiwibmV4dCIsIlZJU19TVEFURV9NRVJHRVJTIiwibWVyZ2UiLCJwcm9wIiwidG9NZXJnZVByb3AiLCJwcmVzZXJ2ZU9yZGVyIiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJzYXZlVW5tZXJnZWQiLCJjb21iaW5lQ29uZmlncyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtbWVyZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgZmxhdHRlbkRlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZmxhdHRlbkRlZXAnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtcbiAgYXJyYXlJbnNlcnQsXG4gIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMsXG4gIGZpbmRCeUlkLFxuICBhZ2dyZWdhdGUsXG4gIGlzUGxhaW5PYmplY3Rcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1RZUEVTLFxuICBMQVlFUl9CTEVORElOR1MsXG4gIE9WRVJMQVlfQkxFTkRJTkdTLFxuICBpc0Fubm90YXRpb25LaW5kLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEhcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtDVVJSRU5UX1ZFUlNJT04sIFZpc1N0YXRlLCBWaXNTdGF0ZU1lcmdlcnMsIEtlcGxlckdMU2NoZW1hQ2xhc3N9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCB7XG4gIFBhcnNlZExheWVyLFxuICBQYXJzZWRWaXNTdGF0ZSxcbiAgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgVG9vbHRpcEluZm8sXG4gIFNhdmVkRWRpdG9yLFxuICBQYXJzZWRDb25maWcsXG4gIEZpbHRlcixcbiAgRWZmZWN0IGFzIEVmZmVjdFR5cGUsXG4gIFBhcnNlZEVmZmVjdCxcbiAgTGF5ZXJDb2x1bW5zLFxuICBMYXllckNvbHVtbixcbiAgUGFyc2VkRmlsdGVyLFxuICBOZXN0ZWRQYXJ0aWFsLFxuICBTYXZlZEFuaW1hdGlvbkNvbmZpZyxcbiAgTGF5ZXJPcmRlcixcbiAgTGF5ZXJPcmRlckdyb3VwXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge2dldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcblxuLyoqXG4gKiBNZXJnZSBsb2FkZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBmaWx0ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZmlsdGVycyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlRmlsdGVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBmaWx0ZXJzVG9NZXJnZT8ubWFwKGwgPT4gbC5pZClcbiAgICA6IHN0YXRlLnByZXNlcnZlRmlsdGVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnNUb01lcmdlKSB8fCAhZmlsdGVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKTtcbiAgbGV0IHVwZGF0ZWRGaWx0ZXJzID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHZhbGlkYXRlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyXG4gICk7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyIHdpdGggZXhpc3RpbmdcbiAgdXBkYXRlZEZpbHRlcnMgPSByZXNldEZpbHRlckdwdU1vZGUodXBkYXRlZEZpbHRlcnMpO1xuICB1cGRhdGVkRmlsdGVycyA9IGFzc2lnbkdwdUNoYW5uZWxzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZGF0YXNldHNUb0ZpbHRlciA9IHVuaXEoZmxhdHRlbkRlZXAodmFsaWRhdGVkLm1hcChmID0+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+IGEuaWQpKTtcbiAgY29uc3QgdmFsaWRBbm5vdGF0aW9ucyA9IGFubm90YXRpb25zXG4gICAgLmZpbHRlcihcbiAgICAgIGEgPT5cbiAgICAgICAgYSAmJlxuICAgICAgICBhLmlkICYmXG4gICAgICAgICFleGlzdGluZ0lkcy5oYXMoYS5pZCkgJiZcbiAgICAgICAgaXNBbm5vdGF0aW9uS2luZChhLmtpbmQpICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYS5hbmNob3JQb2ludCkgJiZcbiAgICAgICAgKGEuYW5jaG9yUG9pbnQubGVuZ3RoID09PSAyIHx8IGEuYW5jaG9yUG9pbnQubGVuZ3RoID09PSAzKSAmJlxuICAgICAgICBhLmFuY2hvclBvaW50LmV2ZXJ5KHZhbHVlID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpXG4gICAgKVxuICAgIC5tYXAoYSA9PiAoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgYXV0b1NpemU6IHRydWUsXG4gICAgICBhdXRvU2l6ZVk6IHRydWUsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBsaW5lQ29sb3I6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgICAgbGluZVdpZHRoOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICAgIHRleHRXaWR0aDogMCxcbiAgICAgIHRleHRIZWlnaHQ6IDAsXG4gICAgICAuLi5hXG4gICAgfSkpO1xuICBpZiAoIXZhbGlkQW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFsuLi5zdGF0ZS5hbm5vdGF0aW9ucywgLi4udmFsaWRBbm5vdGF0aW9uc11cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwIHdpdGggc2F2ZWQgY29uZmlnLFxuICogdmFsaWRhdGUgZmllbGRzVG9TaG93XG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gdG9vbHRpcENvbmZpZ1xuICogQHJldHVybiAtIHttZXJnZWRUb29sdGlwOiB7fSwgdW5tZXJnZWRUb29sdGlwOiB7fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHRvb2x0aXBDb25maWc6IFBpY2s8VG9vbHRpcEluZm9bJ2NvbmZpZyddLCAnZmllbGRzVG9TaG93Jz4gfCBudWxsID0gbnVsbFxuKSB7XG4gIGNvbnN0IHVubWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuICBjb25zdCBtZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG5cbiAgaWYgKFxuICAgICF0b29sdGlwQ29uZmlnIHx8XG4gICAgIXRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93IHx8XG4gICAgIU9iamVjdC5rZXlzKHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KS5sZW5ndGhcbiAgKSB7XG4gICAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBkYXRhSWQgaW4gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpIHtcbiAgICBpZiAoIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gfHwgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbZGF0YUlkXSkge1xuICAgICAgLy8gaXMgbm90IHlldCBsb2FkZWRcbiAgICAgIHVubWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgZGF0YXNldCBpcyBsb2FkZWRcbiAgICAgIGNvbnN0IGFsbEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzLm1hcChkID0+IGQubmFtZSk7XG4gICAgICBjb25zdCBmb3VuZEZpZWxkc1RvU2hvdyA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF0uZmlsdGVyKGZpZWxkID0+XG4gICAgICAgIGFsbEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKVxuICAgICAgKTtcblxuICAgICAgbWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gZm91bmRGaWVsZHNUb1Nob3c7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xufVxuLyoqXG4gKiBNZXJnZSBsYXllckJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyQmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyQmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVyQmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIGxheWVyIGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICovXG5mdW5jdGlvbiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBsYXllciBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBvdmVybGF5QmxlbmRpbmcgd2l0aCBzYXZlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPdmVybGF5QmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIG92ZXJsYXlCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnb3ZlcmxheUJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAob3ZlcmxheUJsZW5kaW5nICYmIE9WRVJMQVlfQkxFTkRJTkdTW292ZXJsYXlCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIG92ZXJsYXkgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKiovXG5mdW5jdGlvbiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIG92ZXJsYXkgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2UgYW5pbWF0aW9uIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbmltYXRpb25Db25maWc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFuaW1hdGlvbjogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnYW5pbWF0aW9uQ29uZmlnJ11cbik6IFMge1xuICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5jdXJyZW50VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmFuaW1hdGlvbixcbiAgICAgICAgZG9tYWluOiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRBbmltYXRpb25Db25maWdbXSk6IFNhdmVkQW5pbWF0aW9uQ29uZmlnIHtcbiAgLy8gZ2V0IHRoZSBzbWFsbGVzdCB2YWx1ZXMgb2YgY3VycmVudFRpbWUgYW5kIHNwZWVkIGFtb25nIGFsbCBjb25maWdzXG4gIHJldHVybiB7XG4gICAgY3VycmVudFRpbWU6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuY3VycmVudFRpbWUpID8/IG51bGwsXG4gICAgc3BlZWQ6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuc3BlZWQpID8/IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb2x1bW5zIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICpcbiAqIEBwYXJhbSBmaWVsZHNcbiAqIEBwYXJhbSBzYXZlZENvbHNcbiAqIEBwYXJhbSBlbXB0eUNvbHNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuIC0gdmFsaWRhdGVkIGNvbHVtbnMgb3IgbnVsbFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgc2F2ZWRDb2xzOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9ID0ge30sXG4gIGVtcHR5Q29sczogTGF5ZXJDb2x1bW5zLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIC8vIFByZXBhcmUgY29sdW1ucyBmb3IgdGhlIHZhbGlkYXRvclxuICBjb25zdCBjb2x1bW5zOiB0eXBlb2YgZW1wdHlDb2xzID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVtcHR5Q29scykpIHtcbiAgICBjb2x1bW5zW2tleV0gPSB7Li4uZW1wdHlDb2xzW2tleV19O1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZENvbHNba2V5XTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleCgoe25hbWV9KSA9PiBuYW1lID09PSBzYXZlZCk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmb3VuZCBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnNba2V5XS5maWVsZElkeCA9IGZpZWxkSWR4O1xuICAgICAgICBjb2x1bW5zW2tleV0udmFsdWUgPSBzYXZlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGFjdHVhbCBjb2x1bW4gZmllbGRJZHgsIGluIGNhc2UgaXQgaGFzIGNoYW5nZWRcbiAgY29uc3QgYWxsQ29sRm91bmQgPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5ldmVyeShrZXkgPT5cbiAgICB2YWxpZGF0ZUNvbHVtbihjb2x1bW5zW2tleV0sIGNvbHVtbnMsIGZpZWxkcylcbiAgKTtcblxuICBjb25zdCBydiA9IGFsbENvbEZvdW5kID8gY29sdW1ucyA6IG51bGw7XG4gIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGVtcHR5Q29scykuZmlsdGVyKGsgPT4gIWVtcHR5Q29sc1trXS5vcHRpb25hbCk7XG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSByZXF1aXJlZENvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXS52YWx1ZSk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGNvbHVtbnM6ICR7bWlzc2luZ0NvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnQ29sdW1ucyA9IE9iamVjdC5rZXlzKHNhdmVkQ29scyk7XG4gICAgY29uc3QgaW52YWxpZENvbHVtbnMgPSBjb25maWdDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10/LnZhbHVlKTtcbiAgICBpZiAoaW52YWxpZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIGNvbHVtbnM6ICR7aW52YWxpZENvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcnY7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgbGF5ZXIgY29sdW1uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbihcbiAgY29sdW1uOiBMYXllckNvbHVtbiAmIHt2YWxpZGF0b3I/OiB0eXBlb2YgdmFsaWRhdGVDb2x1bW59LFxuICBjb2x1bW5zOiBMYXllckNvbHVtbnMsXG4gIGFsbEZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbHVtbi5vcHRpb25hbCB8fCBjb2x1bW4udmFsdWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY29sdW1uLnZhbGlkYXRvcikge1xuICAgIHJldHVybiBjb2x1bW4udmFsaWRhdG9yKGNvbHVtbiwgY29sdW1ucywgYWxsRmllbGRzKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdGV4dCBsYWJlbCBjb25maWcgd2l0aCBuZXcgZGF0YVxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBUZXh0TGFiZWxTY2hlbWFWMVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZmllbGRzXG4gKiBAcGFyYW0ge09iamVjdH0gc2F2ZWRUZXh0TGFiZWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gdmFsaWRhdGVkIHRleHRsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgZmllbGRzLFxuICBbbGF5ZXJUZXh0TGFiZWxdLFxuICBzYXZlZFRleHRMYWJlbCxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICBjb25zdCBzYXZlZFRleHRMYWJlbHMgPSBBcnJheS5pc0FycmF5KHNhdmVkVGV4dExhYmVsKSA/IHNhdmVkVGV4dExhYmVsIDogW3NhdmVkVGV4dExhYmVsXTtcblxuICAvLyB2YWxpZGF0ZSBmaWVsZFxuICByZXR1cm4gc2F2ZWRUZXh0TGFiZWxzLm1hcCh0ZXh0TGFiZWwgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGV4dExhYmVsLmZpZWxkXG4gICAgICA/IGZpZWxkcy5maW5kKGZkID0+XG4gICAgICAgICAgT2JqZWN0LmtleXModGV4dExhYmVsLmZpZWxkKS5ldmVyeShrZXkgPT4gdGV4dExhYmVsLmZpZWxkW2tleV0gPT09IGZkW2tleV0pXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHRleHQgbGFiZWwgZmllbGQ6ICR7SlNPTi5zdHJpbmdpZnkodGV4dExhYmVsLmZpZWxkKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJUZXh0TGFiZWwpLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBrZXkgPT09ICdmaWVsZCcgPyBmaWVsZCA6IHRleHRMYWJlbFtrZXldIHx8IGxheWVyVGV4dExhYmVsW2tleV1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTYXZlZCB2aXN1YWwgY2hhbm5lbCBmaWVsZC9zY2FsZSBtYXkgbGl2ZSBpbiBhbnkgb2Y6XG4gKiAtIGBjb25maWdba2V5XWAgYWZ0ZXIgc2NoZW1hIHBhcnNlIChWaXN1YWxDaGFubmVsU2NoZW1hVjEgZm9sZHMgY2hhbm5lbHMgaW50byBjb25maWcpXG4gKiAtIGB2aXN1YWxDaGFubmVsc1trZXldYCBhcyBhIHNpYmxpbmcgb2YgYGNvbmZpZ2AgKHVucGFyc2VkIGFkZERhdGFUb01hcCBwYXlsb2FkKVxuICogLSBgY29uZmlnLnZpc3VhbENoYW5uZWxzW2tleV1gIChjb21tb24gbWlzdGFrZSBvZiBuZXN0aW5nIHZpc3VhbENoYW5uZWxzIGluc2lkZSBjb25maWcpXG4gKlxuICogV2l0aG91dCB0aGlzIGxvb2t1cCwgcHJvZ3JhbW1hdGljIEdlb0pTT04gc3Ryb2tlQ29sb3JGaWVsZCBuZXZlciBiaW5kcyBhbmRcbiAqIHN0cm9rZUNvbG9yRG9tYWluIHN0YXlzIGF0IHRoZSBkZWZhdWx0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyOiBQYXJzZWRMYXllciwga2V5OiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCBjb25maWcgPSBzYXZlZExheWVyLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICBpZiAoY29uZmlnICYmIGNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29uZmlnW2tleV07XG4gIH1cbiAgY29uc3QgY2hhbm5lbHMgPVxuICAgIChzYXZlZExheWVyIGFzIHt2aXN1YWxDaGFubmVscz86IFJlY29yZDxzdHJpbmcsIGFueT59KS52aXN1YWxDaGFubmVscyB8fFxuICAgIChjb25maWcgJiYgY29uZmlnLnZpc3VhbENoYW5uZWxzKTtcbiAgaWYgKGNoYW5uZWxzICYmIHR5cGVvZiBjaGFubmVscyA9PT0gJ29iamVjdCcgJiYgY2hhbm5lbHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNoYW5uZWxzW2tleV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB2aXN1YWwgY2hhbm5lbHMgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbik6IG51bGwgfCBMYXllciB7XG4gIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZCwgc2NhbGUsIGtleX0pID0+IHtcbiAgICBjb25zdCBzYXZlZEZpZWxkID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgZmllbGQpO1xuICAgIGNvbnN0IHNhdmVkU2NhbGUgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBzY2FsZSk7XG4gICAgbGV0IGZvdW5kRmllbGQ7XG4gICAgaWYgKHNhdmVkRmllbGQ/Lm5hbWUpIHtcbiAgICAgIGZvdW5kRmllbGQgPSBmaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBzYXZlZEZpZWxkLm5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kQ2hhbm5lbCA9IHtcbiAgICAgIC4uLihmb3VuZEZpZWxkID8ge1tmaWVsZF06IGZvdW5kRmllbGR9IDoge30pLFxuICAgICAgLi4uKHNhdmVkU2NhbGUgPyB7W3NjYWxlXTogc2F2ZWRTY2FsZX0gOiB7fSlcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyhmb3VuZENoYW5uZWwpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICB9XG5cbiAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkRmllbGQ/Lm5hbWU7XG4gICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHZpc3VhbCBjaGFubmVsIGZpZWxkOiAke2ZpZWxkfWApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxudHlwZSBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge1xuICBhbGxvd0VtcHR5Q29sdW1uPzogYm9vbGVhbjtcbiAgdGhyb3dPbkVycm9yPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIGxheWVyczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgb3B0aW9ucz86IFZhbGlkYXRlTGF5ZXJPcHRpb25cbikge1xuICBjb25zdCB2YWxpZGF0ZWQ6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdO1xuXG4gIGxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBsZXQgdmFsaWRhdGVMYXllcjogTGF5ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChsYXllcj8uY29uZmlnPy5kYXRhSWQpIHtcbiAgICAgIGlmIChkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSkge1xuICAgICAgICAvLyBkYXRhc2V0cyBhcmUgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgdmFsaWRhdGVMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAgICAgICAgICBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSxcbiAgICAgICAgICBsYXllcixcbiAgICAgICAgICBsYXllckNsYXNzZXMsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZUxheWVyKSB7XG4gICAgICB2YWxpZGF0ZWQucHVzaCh2YWxpZGF0ZUxheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGF0YXNldHMgbm90IHlldCBsb2FkZWRcbiAgICAgIGZhaWxlZC5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7dmFsaWRhdGVkLCBmYWlsZWR9O1xufVxuXG4vKipcbiAqIEdldCByZXF1aXJlZCBjb2x1bW5zIGZvciB2YWxpZGF0aW9uIGJhc2VkIG9uIGNvbHVtbiBtb2RlXG4gKi9cbmZ1bmN0aW9uIF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKSB7XG4gIC8vIGZpbmQgY29sdW1uIGZpZWxkSWR4XG4gIGxldCBjb2x1bW5Db25maWcgPSBuZXdMYXllci5nZXRMYXllckNvbHVtbnMoKTtcbiAgLy8gaWYgY29sdW1uTW9kZSBpcyBkZWZpbmVkLCBmaW5kIGNvbHVtbiBtb2RlIGNvbmZpZ1xuICBjb25zdCBjb2xNb2RlQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLmNvbHVtbk1vZGVcbiAgICA/IChuZXdMYXllci5zdXBwb3J0ZWRDb2x1bW5Nb2RlcyB8fCBbXSkuZmluZChcbiAgICAgICAgY29sTW9kZSA9PiBjb2xNb2RlLmtleSA9PT0gbmV3TGF5ZXIuY29uZmlnLmNvbHVtbk1vZGVcbiAgICAgIClcbiAgICA6IG51bGw7XG5cbiAgaWYgKGNvbE1vZGVDb25maWcpIHtcbiAgICAvLyBvbmx5IHZhbGlkYXRlIGNvbHVtbnMgaW4gY29sdW1uIG1vZGUgKGluY2x1ZGluZyB0YWJiZWQgY29sdW1uR3JvdXBzKVxuICAgIGNvbnN0IGdyb3VwQ29sdW1ucyA9IChjb2xNb2RlQ29uZmlnLmNvbHVtbkdyb3VwcyB8fCBbXSkuZmxhdE1hcChncm91cCA9PiBncm91cC5jb2x1bW5zIHx8IFtdKTtcbiAgICBjb25zdCByZXF1aXJlZEtleXMgPSBuZXcgU2V0KGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKTtcbiAgICBjb2x1bW5Db25maWcgPSBbXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uKGNvbE1vZGVDb25maWcub3B0aW9uYWxDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLmdyb3VwQ29sdW1uc1xuICAgIF0ucmVkdWNlKChhY2N1LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbkNvbmZpZ1trZXldO1xuICAgICAgaWYgKCFjb2wpIHtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9XG4gICAgICAvLyBPcHRpb25hbGl0eSBtdXN0IGZvbGxvdyB0aGUgYWN0aXZlIG1vZGU6IGEgZmllbGQgb3B0aW9uYWwgaW4gYW5vdGhlciBtb2RlXG4gICAgICAvLyAoZS5nLiBhbHRpdHVkZSBpbiBVVikgaXMgc3RpbGwgcmVxdWlyZWQgd2hlbiB0aGlzIG1vZGUgbGlzdHMgaXQgaW4gcmVxdWlyZWRDb2x1bW5zLlxuICAgICAgaWYgKHJlcXVpcmVkS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICBjb25zdCB7b3B0aW9uYWw6IF9vcHRpb25hbCwgLi4ucmVxdWlyZWRDb2x9ID0gY29sO1xuICAgICAgICByZXR1cm4gey4uLmFjY3UsIFtrZXldOiByZXF1aXJlZENvbH07XG4gICAgICB9XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtrZXldOiB7Li4uY29sLCBvcHRpb25hbDogdHJ1ZX19O1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHJldHVybiBjb2x1bW5Db25maWc7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgb3B0aW9uczogVmFsaWRhdGVMYXllck9wdGlvbiA9IHt9XG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCB7ZmllbGRzLCBpZDogZGF0YUlkfSA9IGRhdGFzZXQ7XG4gIGNvbnN0IHt0eXBlfSA9IHNhdmVkTGF5ZXI7XG4gIGNvbnN0IHt0aHJvd09uRXJyb3J9ID0gb3B0aW9ucztcbiAgLy8gbGF5ZXIgZG9lc250IGhhdmUgYSB2YWxpZCB0eXBlXG4gIGlmICghdHlwZSB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyQ2xhc3NlcywgdHlwZSkgfHwgIXNhdmVkTGF5ZXIuY29uZmlnKSB7XG4gICAgaWYgKHRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0eXBlIFwiJHt0eXBlfVwiIG9yIGNvbmZpZyBpcyBtaXNzaW5nYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1t0eXBlXSh7XG4gICAgaWQ6IHNhdmVkTGF5ZXIuaWQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsOiBzYXZlZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBjb2xvcjogc2F2ZWRMYXllci5jb25maWcuY29sb3IsXG4gICAgaXNWaXNpYmxlOiBzYXZlZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaGlkZGVuOiBzYXZlZExheWVyLmNvbmZpZy5oaWRkZW4sXG4gICAgY29sdW1uTW9kZTogc2F2ZWRMYXllci5jb25maWcuY29sdW1uTW9kZSxcbiAgICBoaWdobGlnaHRDb2xvcjogc2F2ZWRMYXllci5jb25maWcuaGlnaGxpZ2h0Q29sb3JcbiAgfSk7XG5cbiAgY29uc3QgY29sdW1uQ29uZmlnID0gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpO1xuXG4gIGlmIChPYmplY3Qua2V5cyhjb2x1bW5Db25maWcpKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gICAgICBmaWVsZHMsXG4gICAgICBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgY29sdW1uQ29uZmlnLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgaWYgKGNvbHVtbnMpIHtcbiAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgY29sdW1uczoge1xuICAgICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgICAgIC4uLmNvbHVtbnNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5hbGxvd0VtcHR5Q29sdW1uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0ZXh0TGFiZWwgPVxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCAmJiBuZXdMYXllci5jb25maWcudGV4dExhYmVsXG4gICAgICA/IHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gICAgICAgICAgZmllbGRzLFxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKVxuICAgICAgOiBuZXdMYXllci5jb25maWcudGV4dExhYmVsO1xuXG4gIC8vIGNvcHkgdmlzQ29uZmlnIG92ZXIgdG8gZW1wdHlMYXllciB0byBtYWtlIHN1cmUgaXQgaGFzIGFsbCB0aGUgcHJvcHNcbiAgY29uc3QgY29waWVkVmlzQ29uZmlnID0gbmV3TGF5ZXIuY29weUxheWVyQ29uZmlnKFxuICAgIG5ld0xheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnIHx8IHt9LFxuICAgIHtcbiAgICAgIHNoYWxsb3dDb3B5OiBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddXG4gICAgfVxuICApO1xuXG4gIC8vIGNhbGwgbGF5ZXIgbWV0aG9kcyB0byB2YWxpZGF0ZSB2aXNDb25maWcgd2hlbiBzd2l0Y2hpbmcgZGF0YXNldFxuICBjb25zdCB2aXNDb25maWcgPSBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZ1xuICAgID8gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWcoZGF0YXNldCwgY29waWVkVmlzQ29uZmlnKVxuICAgIDogY29waWVkVmlzQ29uZmlnO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICB2aXNDb25maWcsXG4gICAgdGV4dExhYmVsXG4gIH0pO1xuXG4gIC8vIHZpc3VhbCBjaGFubmVsIGZpZWxkIGlzIHNhdmVkIHRvIGJlIHtuYW1lLCB0eXBlfVxuICAvLyBmaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkIGJ5IG1hdGNoaW5nIGJvdGggbmFtZSBhbmQgdHlwZVxuICAvLyByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICBuZXdMYXllciA9IHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhmaWVsZHMsIG5ld0xheWVyLCBzYXZlZExheWVyLCBvcHRpb25zKTtcblxuICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgaWYgKCFuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmU6ICR7bmV3TGF5ZXIuaWR9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZGl0b3I8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgc2F2ZWRFZGl0b3I6IFNhdmVkRWRpdG9yKSB7XG4gIGlmICghc2F2ZWRFZGl0b3IpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCAuLi4oc2F2ZWRFZGl0b3IuZmVhdHVyZXMgfHwgW10pXSxcbiAgICAgIC8vIGlmIHNhdmVkRWRpdG9yLnZpc2libGUgaXMgdW5kZWZpbmVkIGtlZXAgc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICAgIHZpc2libGU6IHNhdmVkRWRpdG9yLnZpc2libGUgPz8gc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFZGl0b3JDb25maWdzKGNvbmZpZ3M6IFNhdmVkRWRpdG9yW10pOiBTYXZlZEVkaXRvciB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZShcbiAgICAoYWNjLCBuZXh0Q29uZmlnKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIGZlYXR1cmVzOiBbLi4uYWNjLmZlYXR1cmVzLCAuLi4obmV4dENvbmZpZy5mZWF0dXJlcyB8fCBbXSldXG4gICAgICB9O1xuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3RhcnQgd2l0aDpcbiAgICAgIC8vIC0gZW1wdHkgYXJyYXkgZm9yIGZlYXR1cmVzIGFjY3VtdWxhdGlvblxuICAgICAgLy8gLSBhbmQgYXJlIGFueSBvZiB0aGUgY29uZmlncycgdmlzaWJsZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHZpc2libGU6IGNvbmZpZ3Muc29tZShjID0+IGM/LnZpc2libGUpXG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlOiBWaXNTdGF0ZSwgbmV3RGF0YUVudHJpZXM6IERhdGFzZXRzKTogRGF0YXNldHMge1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgLi4ubmV3RGF0YUVudHJpZXNcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcikpIHtcbiAgICAvLyBwcmVzZXJ2ZURhdGFzZXRPcmRlciAgbWlnaHQgbm90IGluY2x1ZGUgdGhlICBuZXcgZGF0YXNldHNcbiAgICBjb25zdCBuZXdEYXRhc2V0SWRzID0gT2JqZWN0LmtleXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgICBpZCA9PiAhc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXI/LmluY2x1ZGVzKGlkKVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciwgLi4ubmV3RGF0YXNldElkc10ucmVkdWNlKFxuICAgICAgKGFjY3UsIGRhdGFJZCkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4uKG1lcmdlZFtkYXRhSWRdID8ge1tkYXRhSWRdOiBtZXJnZWRbZGF0YUlkXX0gOiB7fSlcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyoqXG4gKiBTaW1saWFyIHB1cnBvc2UgdG8gYWdncmVnYXRpb24gdXRpbHMgYGdldE1vZGVgIGZ1bmN0aW9uLFxuICogYnV0IHJldHVybnMgdGhlIG1vZGUgaW4gdGhlIHNhbWUgdmFsdWUgdHlwZSB3aXRob3V0IGNvZXJjaW5nIHRvIGEgc3RyaW5nLlxuICogSXQgaWdub3JlcyBgdW5kZWZpbmVkYCBvciBgbnVsbGAgdmFsdWVzLCBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm8gbW9kZSBjb3VsZCBiZSBjYWxjdWxhdGVkLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZTxUPihhcnI6IFRbXSk6IFQgfCBudWxsIHtcbiAgY29uc3QgdGFsbHlzID0gbmV3IE1hcCgpO1xuICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIGlmICghdGFsbHlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCB0YWxseXMuZ2V0KHZhbHVlKSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJldHVybiB0aGUgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdCB0b3RhbCBvY2N1cnJlbmNlIGNvdW50XG4gIGlmICh0YWxseXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBbLi4udGFsbHlzLmVudHJpZXMoKV0/LnJlZHVjZSgoYWNjLCBuZXh0KSA9PiAobmV4dFsxXSA+IGFjY1sxXSA/IG5leHQgOiBhY2MpKVswXTtcbn1cblxuZXhwb3J0IGNvbnN0IFZJU19TVEFURV9NRVJHRVJTOiBWaXNTdGF0ZU1lcmdlcnM8YW55PiA9IFtcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVycyxcbiAgICBwcm9wOiAnbGF5ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2xheWVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlTGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVyT3JkZXIsXG4gICAgcHJvcDogJ2xheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VGaWx0ZXJzLFxuICAgIHByb3A6ICdmaWx0ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2ZpbHRlclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUZpbHRlck9yZGVyJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUZpbHRlckRhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUVmZmVjdHMsXG4gICAgcHJvcDogJ2VmZmVjdHMnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VBbm5vdGF0aW9ucyxcbiAgICBwcm9wOiAnYW5ub3RhdGlvbnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnYW5ub3RhdGlvbnNUb0JlTWVyZ2VkJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlSW50ZXJhY3Rpb25zLFxuICAgIHByb3A6ICdpbnRlcmFjdGlvbkNvbmZpZycsXG4gICAgdG9NZXJnZVByb3A6ICdpbnRlcmFjdGlvblRvQmVNZXJnZWQnLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzLFxuICAgIHNhdmVVbm1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VMYXllckJsZW5kaW5nLCBwcm9wOiAnbGF5ZXJCbGVuZGluZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3N9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlT3ZlcmxheUJsZW5kaW5nLFxuICAgIHByb3A6ICdvdmVybGF5QmxlbmRpbmcnLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlU3BsaXRNYXBzLCBwcm9wOiAnc3BsaXRNYXBzJywgdG9NZXJnZVByb3A6ICdzcGxpdE1hcHNUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VBbmltYXRpb25Db25maWcsIHByb3A6ICdhbmltYXRpb25Db25maWcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUFuaW1hdGlvbkNvbmZpZ3N9LFxuICB7bWVyZ2U6IG1lcmdlRWRpdG9yLCBwcm9wOiAnZWRpdG9yJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVFZGl0b3JDb25maWdzfVxuXTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLE9BQU9BLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsSUFBSSxNQUFNLHdCQUF3QjtBQUN6QyxPQUFPQyxXQUFXLE1BQU0sK0JBQStCO0FBQ3ZELE9BQU9DLFNBQVMsTUFBTSxXQUFXO0FBQ2pDLFNBQ0VDLFdBQVcsRUFDWEMsOEJBQThCLEVBQzlCQyxzQkFBc0IsRUFDdEJDLDZCQUE2QixFQUM3QkMsUUFBUSxFQUNSQyxTQUFTLEVBQ1RDLGFBQWEsUUFDUixrQkFBa0I7QUFHekIsU0FBUUMsWUFBWSxRQUFPLG9CQUFvQjtBQUMvQyxTQUFRQyxrQkFBa0IsUUFBTyx5QkFBeUI7QUFDMUQsU0FDRUMsaUJBQWlCLEVBQ2pCQyxlQUFlLEVBQ2ZDLGlCQUFpQixFQUNqQkMsZ0JBQWdCLEVBQ2hCQyw2QkFBNkIsRUFDN0JDLDZCQUE2QixRQUN4QixzQkFBc0I7QUFDN0IsU0FBUUMsZUFBZSxRQUF1RCxvQkFBb0I7QUFvQmxHLFNBQStCQyxpQkFBaUIsRUFBRUMsa0JBQWtCLFFBQU8sa0JBQWtCO0FBRTdGLFNBQVFDLHVCQUF1QixRQUFPLGVBQWU7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLFlBQVlBLENBQzFCQyxLQUFRLEVBQ1JDLGNBQWdFLEVBQ2hFQyxVQUFvQixFQUNqQjtFQUNILElBQU1DLG1CQUFtQixHQUFHRCxVQUFVLEdBQ2xDRCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRUcsR0FBRyxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLEVBQUU7RUFBQSxFQUFDLEdBQzlCTixLQUFLLENBQUNHLG1CQUFtQjtFQUU3QixJQUFJLENBQUNJLEtBQUssQ0FBQ0MsT0FBTyxDQUFDUCxjQUFjLENBQUMsSUFBSSxDQUFDQSxjQUFjLENBQUNRLE1BQU0sRUFBRTtJQUM1RCxPQUFPVCxLQUFLO0VBQ2Q7RUFFQSxJQUFBVSxxQkFBQSxHQUE2QzNCLDZCQUE2QixDQUFDaUIsS0FBSyxFQUFFQyxjQUFjLENBQUM7SUFBMUZVLFNBQVMsR0FBQUQscUJBQUEsQ0FBVEMsU0FBUztJQUFFQyxNQUFNLEdBQUFGLHFCQUFBLENBQU5FLE1BQU07SUFBRUMsZUFBZSxHQUFBSCxxQkFBQSxDQUFmRyxlQUFlO0VBQ3pDLElBQUlDLGNBQWMsR0FBR0MsK0JBQStCLENBQ2xEZixLQUFLLENBQUNnQixPQUFPLEVBQ2JMLFNBQVMsRUFDVFIsbUJBQ0YsQ0FBQzs7RUFFRDtFQUNBVyxjQUFjLEdBQUdqQixrQkFBa0IsQ0FBQ2lCLGNBQWMsQ0FBQztFQUNuREEsY0FBYyxHQUFHbEIsaUJBQWlCLENBQUNrQixjQUFjLENBQUM7RUFDbEQ7RUFDQSxJQUFNRyxnQkFBZ0IsR0FBR3pDLElBQUksQ0FBQ0UsV0FBVyxDQUFDaUMsU0FBUyxDQUFDUCxHQUFHLENBQUMsVUFBQWMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ0MsTUFBTTtFQUFBLEVBQUMsQ0FBQyxDQUFDO0VBRXhFLElBQU1DLFFBQVEsR0FBR3RDLHNCQUFzQixDQUNyQ21DLGdCQUFnQixFQUNoQkosZUFBZSxFQUNmQyxjQUFjLEVBQ2RkLEtBQUssQ0FBQ3FCLE1BQ1IsQ0FBQztFQUVELE9BQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNLdEIsS0FBSztJQUNSZ0IsT0FBTyxFQUFFRixjQUFjO0lBQ3ZCUyxRQUFRLEVBQUVILFFBQVE7SUFDbEJqQixtQkFBbUIsRUFBbkJBLG1CQUFtQjtJQUNuQnFCLGdCQUFnQixLQUFBQyxNQUFBLENBQUFDLGtCQUFBLENBQU0xQixLQUFLLENBQUN3QixnQkFBZ0IsR0FBQUUsa0JBQUEsQ0FBS2QsTUFBTTtFQUFDO0FBRTVEOztBQUVBO0FBQ0EsT0FBTyxTQUFTZSx1QkFBdUJBLENBQ3JDQyxXQUFxQixFQUNyQlQsTUFBYyxFQUNkVSxXQUFtQixFQUNuQjtFQUNBLElBQU1DLFFBQWtCLEdBQUcsRUFBRTtFQUM3QkYsV0FBVyxDQUFDRyxPQUFPLENBQUMsVUFBQUMsTUFBTSxFQUFJO0lBQzVCLElBQUlBLE1BQU0sQ0FBQ2IsTUFBTSxDQUFDYyxRQUFRLENBQUNkLE1BQU0sQ0FBQyxFQUFFO01BQUEsSUFBQWUsZ0JBQUE7TUFDbEMsSUFBTUMsU0FBUyxHQUFHSCxNQUFNLENBQUNiLE1BQU0sQ0FBQ2YsR0FBRyxDQUFDLFVBQUFnQyxDQUFDO1FBQUEsT0FBS0EsQ0FBQyxLQUFLakIsTUFBTSxHQUFHVSxXQUFXLEdBQUdPLENBQUM7TUFBQSxDQUFDLENBQUM7TUFDMUUsSUFBSUMsUUFBUTtNQUNaO01BQ0EsS0FBQUgsZ0JBQUEsR0FBSUYsTUFBTSxDQUFDSyxRQUFRLGNBQUFILGdCQUFBLGdCQUFBQSxnQkFBQSxHQUFmQSxnQkFBQSxDQUFpQkksY0FBYyxjQUFBSixnQkFBQSxlQUEvQkEsZ0JBQUEsQ0FBa0NmLE1BQU0sQ0FBQyxFQUFFO1FBQUEsSUFBQW9CLGlCQUFBO1FBQzdDO1FBQ0EsSUFBQUMsSUFBQSxHQUFtQyxFQUFBRCxpQkFBQSxHQUFBUCxNQUFNLENBQUNLLFFBQVEsY0FBQUUsaUJBQUEsdUJBQWZBLGlCQUFBLENBQWlCRCxjQUFjLEtBQUksQ0FBQyxDQUFDO1VBQXZERyxLQUFLLEdBQUFELElBQUEsQ0FBZHJCLE1BQU07VUFBYXVCLElBQUksR0FBQUMsd0JBQUEsQ0FBQUgsSUFBQSxHQUF2QnJCLE1BQU0sRUFBQWYsR0FBQSxDQUFBd0MsY0FBQTtRQUNkUCxRQUFRLEdBQUFmLGFBQUEsQ0FBQUEsYUFBQSxLQUNIVSxNQUFNLENBQUNLLFFBQVE7VUFDbEJDLGNBQWMsRUFBQWhCLGFBQUEsQ0FBQUEsYUFBQSxLQUNUb0IsSUFBSSxPQUFBRyxlQUFBLEtBQ05oQixXQUFXLEVBQUdZLEtBQUs7UUFDckIsRUFDRjtNQUNIO01BQ0FYLFFBQVEsQ0FBQ2dCLElBQUksQ0FBQXhCLGFBQUEsQ0FBQUEsYUFBQSxLQUNSVSxNQUFNO1FBQ1RiLE1BQU0sRUFBRWdCO01BQVMsR0FDYkUsUUFBUSxHQUFHO1FBQUNBLFFBQVEsRUFBUkE7TUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQy9CLENBQUM7SUFDSjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU9QLFFBQVEsQ0FBQ3JCLE1BQU0sR0FBR3FCLFFBQVEsR0FBRyxJQUFJO0FBQzFDO0FBRUEsT0FBTyxTQUFTaUIsb0JBQW9CQSxDQUFDQyxXQUFnQixFQUFXO0VBQzlEO0VBQ0EsT0FBT0EsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVDLGNBQWM7QUFDcEM7QUFFQSxPQUFPLFNBQVNDLGdCQUFnQkEsQ0FDOUJDLE1BQTJCLEVBQzNCSCxXQUFnQixFQUNTO0VBQUEsSUFBQUkscUJBQUE7RUFDekI7RUFDQSxJQUFNQyxXQUFXLEdBQUc7SUFDbEJDLE9BQU8sRUFBRTNELGVBQWU7SUFDeEI0RCxNQUFNLEVBQUU7TUFDTkMsUUFBUSxFQUFFO1FBQUNuQyxNQUFNLEVBQUUsQ0FBQzJCLFdBQVcsQ0FBQztRQUFFUyxVQUFVLEVBQUUsQ0FBQ1QsV0FBVyxDQUFDMUMsRUFBRTtNQUFDO0lBQ2hFO0VBQ0YsQ0FBQztFQUVELFFBQUE4QyxxQkFBQSxHQUFPRCxNQUFNLENBQUNPLGdCQUFnQixDQUFDTCxXQUFXLENBQUMsY0FBQUQscUJBQUEsZ0JBQUFBLHFCQUFBLEdBQXBDQSxxQkFBQSxDQUFzQ0ksUUFBUSxjQUFBSixxQkFBQSxnQkFBQUEscUJBQUEsR0FBOUNBLHFCQUFBLENBQWdEL0IsTUFBTSxjQUFBK0IscUJBQUEsdUJBQXREQSxxQkFBQSxDQUF5RCxDQUFDLENBQUM7QUFDcEU7QUFFQSxTQUFTckMsK0JBQStCQSxDQUN0QzRDLFlBQXNCLEVBQ3RCQyxLQUFlLEVBR2Y7RUFBQSxJQUZBQyxjQUFxQixHQUFBQyxTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUMxQkUsWUFBc0IsR0FBQUYsU0FBQSxDQUFBckQsTUFBQSxPQUFBcUQsU0FBQSxNQUFBQyxTQUFBO0VBRXRCLElBQUlFLFFBQVEsR0FBQXZDLGtCQUFBLENBQU9pQyxZQUFZLENBQUM7RUFBQyxJQUFBTyxTQUFBLEdBQUFDLDBCQUFBLENBRWRQLEtBQUs7SUFBQVEsS0FBQTtFQUFBO0lBQXhCLEtBQUFGLFNBQUEsQ0FBQUcsQ0FBQSxNQUFBRCxLQUFBLEdBQUFGLFNBQUEsQ0FBQUksQ0FBQSxJQUFBQyxJQUFBLEdBQTBCO01BQUEsSUFBZkMsSUFBSSxHQUFBSixLQUFBLENBQUFLLEtBQUE7TUFDYixJQUFNQyxXQUFXLEdBQUdiLGNBQWMsQ0FBQ2MsT0FBTyxDQUFDSCxJQUFJLENBQUNsRSxFQUFFLENBQUM7TUFDbkQ7TUFDQSxJQUFJc0UsUUFBUSxHQUFHWixZQUFZLEdBQUcsQ0FBQyxHQUFHQyxRQUFRLENBQUN4RCxNQUFNO01BQ2pELElBQUlpRSxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQ25CO1FBQ0EsSUFBSUcsQ0FBQyxHQUFHSCxXQUFXLEdBQUcsQ0FBQztRQUN2QixJQUFJSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQUMsSUFBQUMsS0FBQSxZQUFBQSxNQUFBLEVBQ2M7VUFDaEM7VUFDQSxJQUFNQyxhQUFhLEdBQUduQixjQUFjLENBQUNnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzNDQyxVQUFVLEdBQUdiLFFBQVEsQ0FBQ2dCLFNBQVMsQ0FBQyxVQUFBN0MsQ0FBQztZQUFBLE9BQUlBLENBQUMsQ0FBQzlCLEVBQUUsS0FBSzBFLGFBQWE7VUFBQSxFQUFDO1FBQzlELENBQUM7UUFKRCxPQUFPSCxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUlDLFVBQVUsR0FBRyxDQUFDO1VBQUFDLEtBQUE7UUFBQTtRQUtoQyxJQUFJRCxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUU7VUFDbkI7VUFDQUYsUUFBUSxHQUFHRSxVQUFVLEdBQUcsQ0FBQztRQUMzQjtNQUNGO01BQ0FiLFFBQVEsR0FBR3JGLFdBQVcsQ0FBQ3FGLFFBQVEsRUFBRVcsUUFBUSxFQUFFSixJQUFJLENBQUM7SUFDbEQ7RUFBQyxTQUFBVSxHQUFBO0lBQUFoQixTQUFBLENBQUFpQixDQUFBLENBQUFELEdBQUE7RUFBQTtJQUFBaEIsU0FBQSxDQUFBaEQsQ0FBQTtFQUFBO0VBQ0QsT0FBTytDLFFBQVE7QUFDakI7QUFFQSxPQUFPLFNBQVNtQixxQkFBcUJBLENBQUNwRixLQUFlLEVBQUVnRCxXQUFnQixFQUFnQjtFQUNyRjtFQUNBLElBQU1xQyxpQkFBaUIsR0FBR3RDLG9CQUFvQixDQUFDQyxXQUFXLENBQUMsR0FDdkRFLGdCQUFnQixDQUFDbEQsS0FBSyxDQUFDbUQsTUFBTSxFQUFFSCxXQUFXLENBQUMsR0FDM0NBLFdBQVc7RUFFZixJQUFJLENBQUNxQyxpQkFBaUIsRUFBRTtJQUN0QixPQUFPLElBQUk7RUFDYjtFQUNBO0VBQ0EsSUFBQUMscUJBQUEsR0FBNEJDLHdCQUF3QixDQUNsRHZGLEtBQUssQ0FBQ3VCLFFBQVEsRUFDZHZCLEtBQUssQ0FBQ3dGLFlBQVksRUFDbEIsQ0FBQ0gsaUJBQWlCLENBQUMsRUFDbkI7TUFBQ0ksZ0JBQWdCLEVBQUU7SUFBSSxDQUN6QixDQUFDO0lBTE05RSxTQUFTLEdBQUEyRSxxQkFBQSxDQUFUM0UsU0FBUztJQUFFQyxNQUFNLEdBQUEwRSxxQkFBQSxDQUFOMUUsTUFBTTtFQU94QixJQUFJQSxNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFSCxNQUFNLElBQUksQ0FBQ0UsU0FBUyxDQUFDRixNQUFNLEVBQUU7SUFDdkM7SUFDQSxPQUFPLElBQUk7RUFDYjtFQUVBLElBQU1pRixRQUFRLEdBQUcvRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0VBQzdCK0UsUUFBUSxDQUFDQyxpQkFBaUIsQ0FBQzNGLEtBQUssQ0FBQ3VCLFFBQVEsQ0FBQztFQUMxQyxPQUFPbUUsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNFLGVBQWVBLENBQzdCQyxTQUFpQixFQUNqQjFDLE1BQTJCLEVBQ0Q7RUFBQSxJQUFBMkMscUJBQUE7RUFDMUIsSUFBTUMsa0JBQWtCLEdBQUdDLGlCQUFpQixDQUFDO0lBQUNoRixPQUFPLEVBQUUsQ0FBQzZFLFNBQVM7RUFBQyxDQUFDLEVBQUUxQyxNQUFNLENBQUM7RUFDNUUsT0FBTzRDLGtCQUFrQixhQUFsQkEsa0JBQWtCLGdCQUFBRCxxQkFBQSxHQUFsQkMsa0JBQWtCLENBQUUvRSxPQUFPLGNBQUE4RSxxQkFBQSx1QkFBM0JBLHFCQUFBLENBQThCLENBQUMsQ0FBQztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNHLGNBQWNBLENBQzVCUCxRQUFlLEVBQ2Z2QyxNQUEyQixFQUNGO0VBQUEsSUFBQStDLHFCQUFBO0VBQ3pCLElBQU1ILGtCQUFrQixHQUFHQyxpQkFBaUIsQ0FDMUM7SUFBQzNFLE1BQU0sRUFBRSxDQUFDcUUsUUFBUSxDQUFDO0lBQUVqQyxVQUFVLEVBQUUsQ0FBQ2lDLFFBQVEsQ0FBQ3BGLEVBQUU7RUFBQyxDQUFDLEVBQy9DNkMsTUFDRixDQUFDO0VBQ0QsT0FBTzRDLGtCQUFrQixhQUFsQkEsa0JBQWtCLGdCQUFBRyxxQkFBQSxHQUFsQkgsa0JBQWtCLENBQUUxRSxNQUFNLGNBQUE2RSxxQkFBQSx1QkFBMUJBLHFCQUFBLENBQTZCLENBQUMsQ0FBQztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLGVBQWVBLENBQzdCQyxTQUFxQixFQUNyQmpELE1BQTJCLEVBQ0Q7RUFBQSxJQUFBa0QscUJBQUE7RUFDMUIsSUFBTU4sa0JBQWtCLEdBQUdDLGlCQUFpQixDQUMxQztJQUFDTSxPQUFPLEVBQUUsQ0FBQ0YsU0FBUyxDQUFDO0lBQUVHLFdBQVcsRUFBRSxDQUFDSCxTQUFTLENBQUM5RixFQUFFO0VBQUMsQ0FBQyxFQUNuRDZDLE1BQ0YsQ0FBQztFQUNELE9BQU80QyxrQkFBa0IsYUFBbEJBLGtCQUFrQixnQkFBQU0scUJBQUEsR0FBbEJOLGtCQUFrQixDQUFFTyxPQUFPLGNBQUFELHFCQUFBLHVCQUEzQkEscUJBQUEsQ0FBOEIsQ0FBQyxDQUFDO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0wsaUJBQWlCQSxDQUMvQnhDLFFBQTJCLEVBQzNCTCxNQUEyQixFQUNDO0VBQUEsSUFBQXFELHNCQUFBO0VBQzVCLElBQU1DLFVBQVUsR0FBR3RELE1BQU0sQ0FBQ3VELGVBQWUsQ0FBQztJQUN4Q2xELFFBQVEsRUFBUkE7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPaUQsVUFBVSxJQUFBRCxzQkFBQSxHQUFHckQsTUFBTSxDQUFDTyxnQkFBZ0IsQ0FBQytDLFVBQVUsQ0FBQyxjQUFBRCxzQkFBQSx1QkFBbkNBLHNCQUFBLENBQXFDaEQsUUFBUSxHQUFHTyxTQUFTO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzRDLFdBQVdBLENBQ3pCM0csS0FBUSxFQUdMO0VBQUEsSUFGSDRHLGFBQThELEdBQUE5QyxTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUNuRTVELFVBQW9CLEdBQUE0RCxTQUFBLENBQUFyRCxNQUFBLE9BQUFxRCxTQUFBLE1BQUFDLFNBQUE7RUFFcEIsSUFBTThDLGtCQUFrQixHQUFHM0csVUFBVSxHQUNqQ0osdUJBQXVCLENBQUM4RyxhQUFhLENBQUMsR0FDdEM1RyxLQUFLLENBQUM2RyxrQkFBa0I7RUFDNUIsSUFBSSxDQUFDdEcsS0FBSyxDQUFDQyxPQUFPLENBQUNvRyxhQUFhLENBQUMsSUFBSSxDQUFDQSxhQUFhLENBQUNuRyxNQUFNLEVBQUU7SUFDMUQsT0FBT1QsS0FBSztFQUNkO0VBQ0E7RUFDQSxJQUFNOEcsUUFBdUIsR0FBRyxFQUFFO0VBQ2xDLElBQU1DLE9BQXNCLEdBQUcsRUFBRTtFQUNqQ0gsYUFBYSxDQUFDN0UsT0FBTyxDQUFDLFVBQUMxQixDQUFjLEVBQUs7SUFBQSxJQUFBMkcsU0FBQTtJQUN4QyxJQUFJM0csQ0FBQyxhQUFEQSxDQUFDLGdCQUFBMkcsU0FBQSxHQUFEM0csQ0FBQyxDQUFFa0QsTUFBTSxjQUFBeUQsU0FBQSxlQUFUQSxTQUFBLENBQVc3RixNQUFNLElBQUluQixLQUFLLENBQUNpSCxpQkFBaUIsQ0FBQzVHLENBQUMsQ0FBQ2tELE1BQU0sQ0FBQ3BDLE1BQU0sQ0FBQyxFQUFFO01BQ2pFMkYsUUFBUSxDQUFDaEUsSUFBSSxDQUFDekMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsTUFBTTtNQUNMMEcsT0FBTyxDQUFDakUsSUFBSSxDQUFDekMsQ0FBQyxDQUFDO0lBQ2pCO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBQTZHLHNCQUFBLEdBQXlDM0Isd0JBQXdCLENBQy9EdkYsS0FBSyxDQUFDdUIsUUFBUSxFQUNkdkIsS0FBSyxDQUFDd0YsWUFBWSxFQUNsQnVCLE9BQ0YsQ0FBQztJQUppQkksV0FBVyxHQUFBRCxzQkFBQSxDQUF0QnZHLFNBQVM7SUFBZUMsTUFBTSxHQUFBc0csc0JBQUEsQ0FBTnRHLE1BQU07RUFLckNrRyxRQUFRLENBQUNoRSxJQUFJLENBQUFzRSxLQUFBLENBQWJOLFFBQVEsRUFBQXBGLGtCQUFBLENBQVNkLE1BQU0sRUFBQztFQUN4QjtFQUNBLElBQUF5RyxxQkFBQSxHQUFtQ0MsdUJBQXVCLENBQ3hEdEgsS0FBSyxDQUFDcUIsTUFBTSxFQUNaOEYsV0FBVyxFQUNYbkgsS0FBSyxDQUFDeUQsVUFBVSxFQUNoQm9ELGtCQUNGLENBQUM7SUFMTVUsYUFBYSxHQUFBRixxQkFBQSxDQUFiRSxhQUFhO0lBQUVDLFNBQVMsR0FBQUgscUJBQUEsQ0FBVEcsU0FBUztFQU8vQixJQUFJQyxXQUFjLEdBQUFuRyxhQUFBLENBQUFBLGFBQUEsS0FDYnRCLEtBQUs7SUFDUnFCLE1BQU0sRUFBRW1HLFNBQVM7SUFDakIvRCxVQUFVLEVBQUU4RCxhQUFhO0lBQ3pCVixrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUNsQmEsZUFBZSxLQUFBakcsTUFBQSxDQUFBQyxrQkFBQSxDQUFNMUIsS0FBSyxDQUFDMEgsZUFBZSxHQUFLWixRQUFRO0VBQUMsRUFDekQ7O0VBRUQ7RUFDQSxJQUFJVyxXQUFXLENBQUNFLG9CQUFvQixJQUFJRixXQUFXLENBQUNwRyxNQUFNLENBQUNaLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDckUsSUFBTW1ILFVBQVUsR0FBR0gsV0FBVyxDQUFDRSxvQkFBb0I7SUFDbkRGLFdBQVcsR0FBR0ksZUFBZSxDQUFDSixXQUFXLEVBQUVHLFVBQVUsQ0FBQztJQUN0RDtJQUNBLElBQUlILFdBQVcsQ0FBQ0MsZUFBZSxDQUFDakgsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUMxQ2dILFdBQVcsR0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUFPbUcsV0FBVztRQUFFRSxvQkFBb0IsRUFBRUM7TUFBVSxFQUFDO0lBQ2xFO0VBQ0Y7RUFFQSxPQUFPSCxXQUFXO0FBQ3BCO0FBRUEsT0FBTyxTQUFTSCx1QkFBdUJBLENBQ3JDUSxhQUFhLEVBQ2JDLGNBQWMsRUFDZEMsWUFBWSxFQUVaO0VBQUEsSUFEQW5FLGNBQXdCLEdBQUFDLFNBQUEsQ0FBQXJELE1BQUEsUUFBQXFELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsRUFBRTtFQUU3QixJQUFJLEVBQUNpRSxjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFFdEgsTUFBTSxHQUFFO0lBQzNCLE9BQU87TUFBQytHLFNBQVMsRUFBRU0sYUFBYTtNQUFFUCxhQUFhLEVBQUVTO0lBQVksQ0FBQztFQUNoRTtFQUVBLElBQU1DLGlCQUFpQixHQUFHRCxZQUFZLENBQ25DaEcsTUFBTSxDQUFDLFVBQUFrRyxLQUFLO0lBQUEsT0FBSSxPQUFPQSxLQUFLLEtBQUssUUFBUTtFQUFBLEVBQUMsQ0FDMUM5SCxHQUFHLENBQUMsVUFBQUUsRUFBRTtJQUFBLE9BQUl0QixRQUFRLENBQUNzQixFQUFFLENBQUMsQ0FBQ3dILGFBQWEsQ0FBQztFQUFBLEVBQUMsQ0FDdEM5RixNQUFNLENBQUMsVUFBQW1HLEtBQUs7SUFBQSxPQUFJQyxPQUFPLENBQUNELEtBQUssQ0FBQztFQUFBLEVBQUM7RUFDbEMsSUFBTVgsU0FBUyxHQUFHTSxhQUFhLENBQUNyRyxNQUFNLENBQUNzRyxjQUFjLENBQUM7RUFDdEQsSUFBTU0sa0JBQWtCLEdBQUd0SCwrQkFBK0IsQ0FDeERrSCxpQkFBaUIsRUFDakJGLGNBQWMsRUFDZGxFLGNBQWMsRUFDZCxJQUNGLENBQUM7RUFFRCxJQUFNeUUsaUJBQWlCLEdBQUd4SSx1QkFBdUIsQ0FBQ3VJLGtCQUFrQixDQUFDOztFQUVyRTtFQUNBLElBQU1FLFNBQVMsR0FBR1AsWUFBWSxDQUFDUSxJQUFJLENBQUMsVUFBQU4sS0FBSztJQUFBLE9BQUloSixhQUFhLENBQUNnSixLQUFLLENBQUM7RUFBQSxFQUFDO0VBQ2xFLElBQUksQ0FBQ0ssU0FBUyxFQUFFO0lBQ2QsT0FBTztNQUNMaEIsYUFBYSxFQUFFZSxpQkFBaUI7TUFDaENkLFNBQVMsRUFBVEE7SUFDRixDQUFDO0VBQ0g7O0VBRUE7RUFDQTtFQUNBO0VBQ0EsSUFBTWlCLGVBQWUsR0FBRyxJQUFJQyxHQUFHLENBQzdCVixZQUFZLENBQUNoRyxNQUFNLENBQUMsVUFBQWtHLEtBQUs7SUFBQSxPQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRO0VBQUEsRUFDeEQsQ0FBQztFQUNELElBQU1TLGNBQWMsR0FBR0wsaUJBQWlCLENBQUN0RyxNQUFNLENBQUMsVUFBQTFCLEVBQUU7SUFBQSxPQUFJLENBQUNtSSxlQUFlLENBQUNHLEdBQUcsQ0FBQ3RJLEVBQUUsQ0FBQztFQUFBLEVBQUM7O0VBRS9FO0VBQ0E7RUFDQSxJQUFNdUksTUFBa0IsR0FBRyxFQUFFO0VBQzdCLElBQU1DLFNBQVMsR0FBQXBILGtCQUFBLENBQU80RyxpQkFBaUIsQ0FBQ3RHLE1BQU0sQ0FBQyxVQUFBMUIsRUFBRTtJQUFBLE9BQUltSSxlQUFlLENBQUNHLEdBQUcsQ0FBQ3RJLEVBQUUsQ0FBQztFQUFBLEVBQUMsQ0FBQztFQUM5RSxJQUFJeUksT0FBTyxHQUFHLENBQUM7RUFBQyxJQUFBQyxVQUFBLEdBQUE3RSwwQkFBQSxDQUVJNkQsWUFBWTtJQUFBaUIsTUFBQTtFQUFBO0lBQWhDLEtBQUFELFVBQUEsQ0FBQTNFLENBQUEsTUFBQTRFLE1BQUEsR0FBQUQsVUFBQSxDQUFBMUUsQ0FBQSxJQUFBQyxJQUFBLEdBQWtDO01BQUEsSUFBdkIyRCxLQUFLLEdBQUFlLE1BQUEsQ0FBQXhFLEtBQUE7TUFDZCxJQUFJdkYsYUFBYSxDQUFDZ0osS0FBSyxDQUFDLEVBQUU7UUFDeEJXLE1BQU0sQ0FBQy9GLElBQUksQ0FBQ29GLEtBQXdCLENBQUM7TUFDdkMsQ0FBQyxNQUFNO1FBQ0w7UUFDQSxJQUFJYSxPQUFPLEdBQUdELFNBQVMsQ0FBQ3JJLE1BQU0sRUFBRTtVQUM5Qm9JLE1BQU0sQ0FBQy9GLElBQUksQ0FBQ2dHLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7VUFDL0JBLE9BQU8sRUFBRTtRQUNYO01BQ0Y7SUFDRjs7SUFFQTtFQUFBLFNBQUE3RCxHQUFBO0lBQUE4RCxVQUFBLENBQUE3RCxDQUFBLENBQUFELEdBQUE7RUFBQTtJQUFBOEQsVUFBQSxDQUFBOUgsQ0FBQTtFQUFBO0VBQ0EsT0FBTztJQUNMcUcsYUFBYSxLQUFBOUYsTUFBQSxDQUFBQyxrQkFBQSxDQUFNaUgsY0FBYyxHQUFLRSxNQUFNLENBQUM7SUFDN0NyQixTQUFTLEVBQVRBO0VBQ0YsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0ssZUFBZUEsQ0FDN0I3SCxLQUFRLEVBQ1JrSixlQUF1QixFQUN2QmhKLFVBQW9CLEVBQ2pCO0VBQ0gsSUFBSSxDQUFDZ0osZUFBZSxJQUFJLENBQUMzSSxLQUFLLENBQUNDLE9BQU8sQ0FBQzBJLGVBQWUsQ0FBQyxJQUFJQSxlQUFlLENBQUN6SSxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ3ZGLE9BQU9ULEtBQUs7RUFDZDs7RUFFQTtFQUNBLElBQU11SSxTQUFTLEdBQUdXLGVBQWUsQ0FBQ1YsSUFBSSxDQUFDLFVBQUFOLEtBQUs7SUFBQSxPQUFJaEosYUFBYSxDQUFDZ0osS0FBSyxDQUFDO0VBQUEsRUFBQztFQUNyRSxJQUFJLENBQUNLLFNBQVMsRUFBRTtJQUNkO0lBQ0EsT0FBT3ZJLEtBQUs7RUFDZDs7RUFFQTtFQUNBLElBQUlBLEtBQUssQ0FBQ3FCLE1BQU0sQ0FBQ1osTUFBTSxLQUFLLENBQUMsRUFBRTtJQUM3QixPQUFBYSxhQUFBLENBQUFBLGFBQUEsS0FDS3RCLEtBQUs7TUFDUjJILG9CQUFvQixFQUFFdUI7SUFBZTtFQUV6Qzs7RUFFQTtFQUNBLElBQU1DLGFBQWEsR0FBRyxJQUFJVCxHQUFHLENBQUMxSSxLQUFLLENBQUNxQixNQUFNLENBQUNqQixHQUFHLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ0MsRUFBRTtFQUFBLEVBQUMsQ0FBQzs7RUFFMUQ7RUFDQSxTQUFTOEksZ0JBQWdCQSxDQUFDQyxLQUFZLEVBQWM7SUFDbEQsSUFBTVIsTUFBa0IsR0FBRyxFQUFFO0lBQUMsSUFBQVMsVUFBQSxHQUFBbkYsMEJBQUEsQ0FDVmtGLEtBQUs7TUFBQUUsTUFBQTtJQUFBO01BQXpCLEtBQUFELFVBQUEsQ0FBQWpGLENBQUEsTUFBQWtGLE1BQUEsR0FBQUQsVUFBQSxDQUFBaEYsQ0FBQSxJQUFBQyxJQUFBLEdBQTJCO1FBQUEsSUFBaEIyRCxLQUFLLEdBQUFxQixNQUFBLENBQUE5RSxLQUFBO1FBQ2QsSUFBSXZGLGFBQWEsQ0FBQ2dKLEtBQUssQ0FBQyxFQUFFO1VBQ3hCLElBQU1zQixLQUFLLEdBQUd0QixLQUF3QjtVQUN0QyxJQUFNdUIsa0JBQWtCLEdBQUdMLGdCQUFnQixDQUFDSSxLQUFLLENBQUMvRixVQUFVLENBQUM7VUFDN0Q7VUFDQW9GLE1BQU0sQ0FBQy9GLElBQUksQ0FBQXhCLGFBQUEsQ0FBQUEsYUFBQSxLQUNOa0ksS0FBSztZQUNSL0YsVUFBVSxFQUFFZ0c7VUFBa0IsRUFDL0IsQ0FBQztRQUNKLENBQUMsTUFBTSxJQUFJLE9BQU92QixLQUFLLEtBQUssUUFBUSxJQUFJaUIsYUFBYSxDQUFDUCxHQUFHLENBQUNWLEtBQUssQ0FBQyxFQUFFO1VBQ2hFVyxNQUFNLENBQUMvRixJQUFJLENBQUNvRixLQUFLLENBQUM7UUFDcEI7TUFDRjtJQUFDLFNBQUFoRCxHQUFBO01BQUFvRSxVQUFBLENBQUFuRSxDQUFBLENBQUFELEdBQUE7SUFBQTtNQUFBb0UsVUFBQSxDQUFBcEksQ0FBQTtJQUFBO0lBQ0QsT0FBTzJILE1BQU07RUFDZjtFQUVBLElBQU1hLGtCQUFrQixHQUFHTixnQkFBZ0IsQ0FBQ0YsZUFBZSxDQUFDOztFQUU1RDtFQUNBO0VBQ0EsSUFBTVMsa0JBQWtCLEdBQUcsSUFBSWpCLEdBQUcsQ0FBUyxDQUFDO0VBQzVDLFNBQVNrQixVQUFVQSxDQUFDUCxLQUFZLEVBQUU7SUFBQSxJQUFBUSxVQUFBLEdBQUExRiwwQkFBQSxDQUNaa0YsS0FBSztNQUFBUyxNQUFBO0lBQUE7TUFBekIsS0FBQUQsVUFBQSxDQUFBeEYsQ0FBQSxNQUFBeUYsTUFBQSxHQUFBRCxVQUFBLENBQUF2RixDQUFBLElBQUFDLElBQUEsR0FBMkI7UUFBQSxJQUFoQjJELEtBQUssR0FBQTRCLE1BQUEsQ0FBQXJGLEtBQUE7UUFDZCxJQUFJdkYsYUFBYSxDQUFDZ0osS0FBSyxDQUFDLEVBQUU7VUFDeEIwQixVQUFVLENBQUUxQixLQUFLLENBQXFCekUsVUFBVSxDQUFDO1FBQ25ELENBQUMsTUFBTSxJQUFJLE9BQU95RSxLQUFLLEtBQUssUUFBUSxFQUFFO1VBQ3BDeUIsa0JBQWtCLENBQUNJLEdBQUcsQ0FBQzdCLEtBQUssQ0FBQztRQUMvQjtNQUNGO0lBQUMsU0FBQWhELEdBQUE7TUFBQTJFLFVBQUEsQ0FBQTFFLENBQUEsQ0FBQUQsR0FBQTtJQUFBO01BQUEyRSxVQUFBLENBQUEzSSxDQUFBO0lBQUE7RUFDSDtFQUNBMEksVUFBVSxDQUFDRixrQkFBa0IsQ0FBQzs7RUFFOUI7RUFDQSxJQUFNTSxhQUFhLEdBQUdoSyxLQUFLLENBQUNxQixNQUFNLENBQUNXLE1BQU0sQ0FBQyxVQUFBM0IsQ0FBQztJQUFBLE9BQUksQ0FBQ3NKLGtCQUFrQixDQUFDZixHQUFHLENBQUN2SSxDQUFDLENBQUNDLEVBQUUsQ0FBQztFQUFBLEVBQUMsQ0FBQ0YsR0FBRyxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLEVBQUU7RUFBQSxFQUFDO0VBRTVGLE9BQUFnQixhQUFBLENBQUFBLGFBQUEsS0FDS3RCLEtBQUs7SUFDUnlELFVBQVUsS0FBQWhDLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTXNJLGFBQWEsR0FBQXRJLGtCQUFBLENBQUtnSSxrQkFBa0IsRUFBQztJQUNyRC9CLG9CQUFvQixFQUFFO0VBQUk7QUFFOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNzQyxpQkFBaUJBLENBQy9CakssS0FBUSxFQUNSa0sscUJBQWtFLEVBQy9EO0VBQ0gsSUFBTUMsTUFBNkMsR0FBRyxDQUFDLENBQUM7RUFDeEQsSUFBTXJELFFBQXlDLEdBQUcsQ0FBQyxDQUFDO0VBRXBELElBQUlvRCxxQkFBcUIsRUFBRTtJQUN4QkUsTUFBTSxDQUFDQyxJQUFJLENBQUNILHFCQUFxQixDQUFDLENBQXlDbkksT0FBTyxDQUFDLFVBQUF1SSxHQUFHLEVBQUk7TUFDekYsSUFBSSxDQUFDdEssS0FBSyxDQUFDdUssaUJBQWlCLENBQUNELEdBQUcsQ0FBQyxFQUFFO1FBQ2pDO01BQ0Y7TUFFQSxJQUFNRSxhQUFhLEdBQ2pCRixHQUFHLEtBQUssU0FBUyxJQUFJQSxHQUFHLEtBQUssT0FBTyxJQUFJQSxHQUFHLEtBQUssVUFBVSxHQUN0RHRLLEtBQUssQ0FBQ3VLLGlCQUFpQixDQUFDRCxHQUFHLENBQUMsQ0FBQy9HLE1BQU0sR0FDbkMsSUFBSTtNQUVWLElBQUFrSCxLQUFBLEdBQWtDUCxxQkFBcUIsQ0FBQ0ksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQTNESSxPQUFPLEdBQUFELEtBQUEsQ0FBUEMsT0FBTztRQUFLQyxXQUFXLEdBQUFoSSx3QkFBQSxDQUFBOEgsS0FBQSxFQUFBRyxTQUFBO01BRTlCLElBQUlDLGFBQWEsR0FBR0YsV0FBVztNQUUvQixJQUFJTCxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQ3JCLElBQUFRLHFCQUFBLEdBQXlDQyw2QkFBNkIsQ0FDcEUvSyxLQUFLLEVBQ0wySyxXQUNGLENBQUM7VUFITUssYUFBYSxHQUFBRixxQkFBQSxDQUFiRSxhQUFhO1VBQUVDLGVBQWUsR0FBQUgscUJBQUEsQ0FBZkcsZUFBZTs7UUFLckM7UUFDQUosYUFBYSxHQUFHO1VBQ2RLLFlBQVksRUFBQTVKLGFBQUEsQ0FBQUEsYUFBQSxLQUNOa0osYUFBYSxDQUEyQlUsWUFBWSxHQUNyREYsYUFBYTtRQUVwQixDQUFDO1FBRUQsSUFBSVosTUFBTSxDQUFDQyxJQUFJLENBQUNZLGVBQWUsQ0FBQyxDQUFDeEssTUFBTSxFQUFFO1VBQ3ZDO1VBQ0FxRyxRQUFRLENBQUNxRSxPQUFPLEdBQUc7WUFBQ0QsWUFBWSxFQUFFRCxlQUFlO1lBQUVQLE9BQU8sRUFBRXRDLE9BQU8sQ0FBQ3NDLE9BQU87VUFBQyxDQUFDO1FBQy9FO01BQ0Y7TUFFQVAsTUFBTSxDQUFDRyxHQUFHLENBQUMsR0FBQWhKLGFBQUEsQ0FBQUEsYUFBQSxLQUNOdEIsS0FBSyxDQUFDdUssaUJBQWlCLENBQUNELEdBQUcsQ0FBQztRQUMvQkksT0FBTyxFQUFFdEMsT0FBTyxDQUFDc0MsT0FBTztNQUFDLEdBQ3JCRixhQUFhLEdBQ2I7UUFDRWpILE1BQU0sRUFBRTlFLElBQUksQ0FBQTZDLGFBQUEsQ0FBQUEsYUFBQSxLQUVMa0osYUFBYSxHQUNiSyxhQUFhLEdBRWxCVCxNQUFNLENBQUNDLElBQUksQ0FBQ0csYUFBYSxDQUMzQjtNQUNGLENBQUMsR0FDRCxDQUFDLENBQUMsQ0FDUDtJQUNILENBQUMsQ0FBQztFQUNKO0VBRUEsSUFBTVksU0FBUyxHQUFBOUosYUFBQSxDQUFBQSxhQUFBLEtBQ1Z0QixLQUFLO0lBQ1J1SyxpQkFBaUIsRUFBQWpKLGFBQUEsQ0FBQUEsYUFBQSxLQUNadEIsS0FBSyxDQUFDdUssaUJBQWlCLEdBQ3ZCSixNQUFNLENBQ1Y7SUFDREQscUJBQXFCLEVBQUVtQix3QkFBd0IsQ0FBQ3JMLEtBQUssRUFBRThHLFFBQVE7RUFBQyxFQUNqRTtFQUNELE9BQU9zRSxTQUFTO0FBQ2xCO0FBRUEsU0FBU0UseUJBQXlCQSxDQUFDQyxPQUFpQyxFQUEwQjtFQUM1RixJQUFNQyxRQUFRLEdBQUFsSyxhQUFBLEtBQU9pSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEM7RUFDQTtFQUFBLElBQUFFLE1BQUEsWUFBQUEsT0FBQW5CLEdBQUEsRUFFNEI7SUFDMUIsSUFBTW9CLGlCQUFpQixHQUFHSCxPQUFPLENBQUNuTCxHQUFHLENBQUMsVUFBQXVMLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNyQixHQUFHLENBQUM7SUFBQSxFQUFDOztJQUVsRDtJQUNBa0IsUUFBUSxDQUFDbEIsR0FBRyxDQUFDLEdBQUc7TUFDZDtNQUNBSSxPQUFPLEVBQUVnQixpQkFBaUIsQ0FBQ2xELElBQUksQ0FBQyxVQUFBb0QsQ0FBQztRQUFBLE9BQUlBLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFbEIsT0FBTztNQUFBO0lBQ2pELENBQUM7SUFFRCxJQUFJSixHQUFHLEtBQUssU0FBUyxFQUFFO01BQ3JCO01BQ0FrQixRQUFRLENBQUNsQixHQUFHLENBQUMsQ0FBQ3VCLFdBQVcsR0FBR0gsaUJBQWlCLENBQUNsRCxJQUFJLENBQUMsVUFBQW9ELENBQUM7UUFBQSxPQUFJQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRUMsV0FBVztNQUFBLEVBQUM7O01BRXZFO01BQ0FMLFFBQVEsQ0FBQ2xCLEdBQUcsQ0FBQyxDQUFDd0IsV0FBVyxHQUFHQyw2QkFBNkIsQ0FDdkRMLGlCQUFpQixDQUFDdEwsR0FBRyxDQUFDLFVBQUF3TCxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDRSxXQUFXO01BQUEsRUFDMUMsQ0FBQzs7TUFFRDtNQUNBTixRQUFRLENBQUNsQixHQUFHLENBQUMsQ0FBQ1ksWUFBWSxHQUFHUSxpQkFBaUIsQ0FDM0N0TCxHQUFHLENBQUMsVUFBQXdMLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUNWLFlBQVk7TUFBQSxFQUFDLENBQ3hCYyxNQUFNLENBQUMsVUFBQ0MsR0FBRyxFQUFFQyxnQkFBZ0IsRUFBSztRQUFBLElBQUFDLE1BQUEsWUFBQUEsT0FBQUMsYUFBQSxFQUNhO1VBQzVDLElBQU1DLGlCQUFpQixHQUFHSCxnQkFBZ0IsQ0FBQ0UsYUFBYSxDQUFDO1VBQ3pELElBQUksQ0FBQ0gsR0FBRyxDQUFDRyxhQUFhLENBQUMsRUFBRTtZQUN2QjtZQUNBO1lBQ0FILEdBQUcsQ0FBQ0csYUFBYSxDQUFDLEdBQUdDLGlCQUFpQjtVQUN4QyxDQUFDLE1BQU07WUFDTDtZQUNBO1lBQ0E7WUFDQUEsaUJBQWlCLENBQUN0SyxPQUFPLENBQUMsVUFBQXVLLE1BQU0sRUFBSTtjQUNsQyxJQUFJLENBQUNMLEdBQUcsQ0FBQ0csYUFBYSxDQUFDLENBQUNHLElBQUksQ0FBQyxVQUFBQyxLQUFBO2dCQUFBLElBQUVDLElBQUksR0FBQUQsS0FBQSxDQUFKQyxJQUFJO2dCQUFBLE9BQU1ILE1BQU0sQ0FBQ0csSUFBSSxLQUFLQSxJQUFJO2NBQUEsRUFBQyxFQUFFO2dCQUM5RFIsR0FBRyxDQUFDRyxhQUFhLENBQUMsQ0FBQ3RKLElBQUksQ0FBQ3dKLE1BQU0sQ0FBQztjQUNqQztZQUNGLENBQUMsQ0FBQztVQUNKO1FBQ0YsQ0FBQztRQWhCRCxLQUFLLElBQU1GLGFBQWEsSUFBSUYsZ0JBQWdCO1VBQUFDLE1BQUEsQ0FBQUMsYUFBQTtRQUFBO1FBaUI1QyxPQUFPSCxHQUFHO01BQ1osQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1Y7SUFFQSxJQUFJM0IsR0FBRyxLQUFLLE9BQU8sRUFBRTtNQUFBLElBQUFvQyxVQUFBO01BQ25CO01BQ0FsQixRQUFRLENBQUNsQixHQUFHLENBQUMsQ0FBQ3FDLElBQUksSUFBQUQsVUFBQSxHQUNoQnpOLFNBQVMsQ0FBQ3lNLGlCQUFpQixFQUFFck0saUJBQWlCLENBQUN1TixPQUFPLEVBQUUsVUFBQWhCLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUNlLElBQUk7TUFBQSxFQUFDLGNBQUFELFVBQUEsY0FBQUEsVUFBQSxHQUFJLElBQUk7SUFDaEY7SUFFQSxJQUFJcEMsR0FBRyxLQUFLLFVBQVUsRUFBRTtNQUN0QmtCLFFBQVEsQ0FBQ2xCLEdBQUcsQ0FBQyxDQUFDdUMsV0FBVyxHQUFHbkIsaUJBQWlCLENBQUNsRCxJQUFJLENBQUMsVUFBQW9ELENBQUM7UUFBQSxPQUFJQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRWlCLFdBQVc7TUFBQSxFQUFDO0lBQ3pFO0VBQ0YsQ0FBQztFQXBERCxLQUFLLElBQU12QyxHQUFHLElBQUlrQixRQUFRO0lBQUFDLE1BQUEsQ0FBQW5CLEdBQUE7RUFBQTtFQXNEMUIsT0FBT2tCLFFBQVE7QUFDakI7QUFFQSxTQUFTSCx3QkFBd0JBLENBQy9CckwsS0FBUSxFQUNSOEcsUUFBeUMsRUFDekM7RUFBQSxJQUFBZ0csaUJBQUEsRUFBQUMsa0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsa0JBQUE7RUFDQSxJQUFJLEVBQUNuRyxRQUFRLGFBQVJBLFFBQVEsZ0JBQUFnRyxpQkFBQSxHQUFSaEcsUUFBUSxDQUFFcUUsT0FBTyxjQUFBMkIsaUJBQUEsZUFBakJBLGlCQUFBLENBQW1CNUIsWUFBWSxHQUFFO0lBQ3BDLE9BQU9sTCxLQUFLLENBQUNrSyxxQkFBcUI7RUFDcEM7RUFDQSxPQUFPO0lBQ0xpQixPQUFPLEVBQUE3SixhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNGdEIsS0FBSyxDQUFDa0sscUJBQXFCLENBQUNpQixPQUFPLEdBQ2xDLFFBQU9yRSxRQUFRLGFBQVJBLFFBQVEsZ0JBQUFpRyxrQkFBQSxHQUFSakcsUUFBUSxDQUFFcUUsT0FBTyxjQUFBNEIsa0JBQUEsdUJBQWpCQSxrQkFBQSxDQUFtQnJDLE9BQU8sTUFBSyxTQUFTLEdBQy9DO01BQUNBLE9BQU8sRUFBRTVELFFBQVEsQ0FBQ3FFLE9BQU8sQ0FBQ1Q7SUFBTyxDQUFDLEdBQ25DLENBQUMsQ0FBQztNQUNOUSxZQUFZLEVBQUE1SixhQUFBLENBQUFBLGFBQUEsTUFBQTBMLHFCQUFBLEdBQ1BoTixLQUFLLENBQUNrSyxxQkFBcUIsY0FBQThDLHFCQUFBLGdCQUFBQSxxQkFBQSxHQUEzQkEscUJBQUEsQ0FBNkI3QixPQUFPLGNBQUE2QixxQkFBQSx1QkFBcENBLHFCQUFBLENBQXNDOUIsWUFBWSxHQUNsRHBFLFFBQVEsYUFBUkEsUUFBUSxnQkFBQW1HLGtCQUFBLEdBQVJuRyxRQUFRLENBQUVxRSxPQUFPLGNBQUE4QixrQkFBQSx1QkFBakJBLGtCQUFBLENBQW1CL0IsWUFBWTtJQUNuQztFQUVMLENBQUM7QUFDSDtBQUVBLFNBQVNnQyw0QkFBNEJBLENBQUMzQyxpQkFBaUIsRUFBRXBKLE1BQWMsRUFBRWdNLGVBQXVCLEVBQUU7RUFBQSxJQUFBQyxxQkFBQTtFQUNoRyxJQUFJN0MsaUJBQWlCLGFBQWpCQSxpQkFBaUIsZ0JBQUE2QyxxQkFBQSxHQUFqQjdDLGlCQUFpQixDQUFFWSxPQUFPLGNBQUFpQyxxQkFBQSxlQUExQkEscUJBQUEsQ0FBNEJsQyxZQUFZLENBQUMvSixNQUFNLENBQUMsRUFBRTtJQUFBLElBQUFrTSxzQkFBQTtJQUNwRCxPQUFBL0wsYUFBQSxDQUFBQSxhQUFBLEtBQ0tpSixpQkFBaUI7TUFDcEJZLE9BQU8sRUFBQTdKLGFBQUEsQ0FBQUEsYUFBQSxLQUNGaUosaUJBQWlCLENBQUNZLE9BQU87UUFDNUJELFlBQVksRUFBQXJJLGVBQUEsS0FDVHNLLGVBQWUsRUFBRzVDLGlCQUFpQixhQUFqQkEsaUJBQWlCLGdCQUFBOEMsc0JBQUEsR0FBakI5QyxpQkFBaUIsQ0FBRVksT0FBTyxjQUFBa0Msc0JBQUEsdUJBQTFCQSxzQkFBQSxDQUE0Qm5DLFlBQVksQ0FBQy9KLE1BQU0sQ0FBQztNQUNwRTtJQUNGO0VBRUw7RUFDQSxPQUFPLElBQUk7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU21NLGNBQWNBLENBQzVCdE4sS0FBUSxFQUVMO0VBQUEsSUFESHVOLFNBQTZELEdBQUF6SixTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFFbEUsSUFBTXFHLE1BQU0sR0FBQXpJLGtCQUFBLENBQU8xQixLQUFLLENBQUN1TixTQUFTLENBQUM7RUFDbkMsSUFBTXpHLFFBQVEsR0FBRyxFQUFFO0VBQ25CeUcsU0FBUyxDQUFDeEwsT0FBTyxDQUFDLFVBQUN5TCxFQUFFLEVBQUUzSSxDQUFDLEVBQUs7SUFDM0IsSUFBTTRJLE9BQU8sR0FBR3JELE1BQU0sQ0FBQ3FELE9BQU8sQ0FBQ0QsRUFBRSxDQUFDbk0sTUFBTSxDQUFDO0lBQ3pDLElBQUlvTSxPQUFPLENBQUNoTixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3RCZ04sT0FBTyxDQUFDMUwsT0FBTyxDQUFDLFVBQUEyTCxLQUFBLEVBQWlCO1FBQUEsSUFBQUMsS0FBQSxHQUFBQyxjQUFBLENBQUFGLEtBQUE7VUFBZnBOLEVBQUUsR0FBQXFOLEtBQUE7VUFBRWxKLEtBQUssR0FBQWtKLEtBQUE7UUFDekI7UUFDQSxJQUFNRSxNQUFNLEdBQUc3TixLQUFLLENBQUNxQixNQUFNLENBQUNrTCxJQUFJLENBQUMsVUFBQWxNLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNDLEVBQUUsS0FBS0EsRUFBRTtRQUFBLEVBQUMsR0FBRzZKLE1BQU0sR0FBR3JELFFBQVE7O1FBRXRFO1FBQ0ErRyxNQUFNLENBQUNoSixDQUFDLENBQUMsR0FBR2dKLE1BQU0sQ0FBQ2hKLENBQUMsQ0FBQyxJQUFBdkQsYUFBQSxDQUFBQSxhQUFBLEtBRWhCa00sRUFBRTtVQUNMbk0sTUFBTSxFQUFFd00sTUFBTSxLQUFLMUQsTUFBTSxHQUFHdEwsOEJBQThCLENBQUNtQixLQUFLLENBQUNxQixNQUFNLENBQUMsR0FBRztRQUFFLEVBQzlFO1FBQ0R3TSxNQUFNLENBQUNoSixDQUFDLENBQUMsQ0FBQ3hELE1BQU0sR0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ1h1TSxNQUFNLENBQUNoSixDQUFDLENBQUMsQ0FBQ3hELE1BQU0sT0FBQXdCLGVBQUEsS0FDbEJ2QyxFQUFFLEVBQUdtRSxLQUFLLEVBQ1o7TUFDSCxDQUFDLENBQUM7SUFDSixDQUFDLE1BQU07TUFDTDtNQUNBMEYsTUFBTSxDQUFDckgsSUFBSSxDQUFDMEssRUFBRSxDQUFDO0lBQ2pCO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsT0FBQWxNLGFBQUEsQ0FBQUEsYUFBQSxLQUNLdEIsS0FBSztJQUNSdU4sU0FBUyxFQUFFcEQsTUFBTTtJQUNqQjJELG1CQUFtQixLQUFBck0sTUFBQSxDQUFBQyxrQkFBQSxDQUFNMUIsS0FBSyxDQUFDOE4sbUJBQW1CLEdBQUtoSCxRQUFRO0VBQUM7QUFFcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTaUgsWUFBWUEsQ0FDMUIvTixLQUFRLEVBQ1JzRyxPQUF5RCxFQUN6RHBHLFVBQW9CLEVBQ2pCO0VBQ0gsSUFBTThOLFVBQVUsTUFBQXZNLE1BQUEsQ0FBQUMsa0JBQUEsQ0FDWDFCLEtBQUssQ0FBQ3NHLE9BQU8sR0FBQTVFLGtCQUFBLENBQ2IsQ0FBQzRFLE9BQU8sSUFBSSxFQUFFLEVBQ2RsRyxHQUFHLENBQUMsVUFBQTZOLE1BQU0sRUFBSTtJQUNiLE9BQU8vTixVQUFVLEdBQ2JmLFlBQVksQ0FDVlIsU0FBUyxDQUFDdVAsR0FBRyxDQUFDLENBQ1pELE1BQU0sRUFDTjtNQUNFO01BQ0FFLGNBQWMsRUFBRTtJQUNsQixDQUFDLENBQ0YsQ0FDSCxDQUFDLEdBQ0FGLE1BQXFCO0VBQzVCLENBQUMsQ0FBQyxDQUNEak0sTUFBTSxDQUFDLFVBQUFpTSxNQUFNLEVBQUk7SUFDaEIsT0FBTzdGLE9BQU8sQ0FBQzZGLE1BQU0sSUFBSUEsTUFBTSxDQUFDRyxhQUFhLENBQUMsQ0FBQyxDQUFDO0VBQ2xELENBQUMsQ0FBQyxFQUNMO0VBQ0QsT0FBQTlNLGFBQUEsQ0FBQUEsYUFBQSxLQUNLdEIsS0FBSztJQUNSc0csT0FBTyxFQUFFMEgsVUFBVTtJQUNuQnpILFdBQVcsRUFBRXlILFVBQVUsQ0FBQzVOLEdBQUcsQ0FBQyxVQUFBNk4sTUFBTTtNQUFBLE9BQUlBLE1BQU0sQ0FBQzNOLEVBQUU7SUFBQTtFQUFDO0FBRXBEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUytOLGdCQUFnQkEsQ0FBcUJyTyxLQUFRLEVBQUVzTyxXQUFrQixFQUFLO0VBQ3BGLElBQUksQ0FBQ0EsV0FBVyxJQUFJLENBQUNBLFdBQVcsQ0FBQzdOLE1BQU0sRUFBRTtJQUN2QyxPQUFPVCxLQUFLO0VBQ2Q7RUFDQSxJQUFNdU8sV0FBVyxHQUFHLElBQUk3RixHQUFHLENBQUMxSSxLQUFLLENBQUNzTyxXQUFXLENBQUNsTyxHQUFHLENBQUMsVUFBQW9PLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNsTyxFQUFFO0VBQUEsRUFBQyxDQUFDO0VBQzdELElBQU1tTyxnQkFBZ0IsR0FBR0gsV0FBVyxDQUNqQ3RNLE1BQU0sQ0FDTCxVQUFBd00sQ0FBQztJQUFBLE9BQ0NBLENBQUMsSUFDREEsQ0FBQyxDQUFDbE8sRUFBRSxJQUNKLENBQUNpTyxXQUFXLENBQUMzRixHQUFHLENBQUM0RixDQUFDLENBQUNsTyxFQUFFLENBQUMsSUFDdEJkLGdCQUFnQixDQUFDZ1AsQ0FBQyxDQUFDRSxJQUFJLENBQUMsSUFDeEJuTyxLQUFLLENBQUNDLE9BQU8sQ0FBQ2dPLENBQUMsQ0FBQ0csV0FBVyxDQUFDLEtBQzNCSCxDQUFDLENBQUNHLFdBQVcsQ0FBQ2xPLE1BQU0sS0FBSyxDQUFDLElBQUkrTixDQUFDLENBQUNHLFdBQVcsQ0FBQ2xPLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFDMUQrTixDQUFDLENBQUNHLFdBQVcsQ0FBQ0MsS0FBSyxDQUFDLFVBQUFuSyxLQUFLO01BQUEsT0FBSW9LLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDckssS0FBSyxDQUFDO0lBQUEsRUFBQztFQUFBLENBQ3hELENBQUMsQ0FDQXJFLEdBQUcsQ0FBQyxVQUFBb08sQ0FBQztJQUFBLE9BQUFsTixhQUFBO01BQ0p5TixTQUFTLEVBQUUsSUFBSTtNQUNmQyxRQUFRLEVBQUUsSUFBSTtNQUNkQyxTQUFTLEVBQUUsSUFBSTtNQUNmQyxLQUFLLEVBQUUsRUFBRTtNQUNUQyxTQUFTLEVBQUUxUCw2QkFBNkI7TUFDeEMyUCxTQUFTLEVBQUUxUCw2QkFBNkI7TUFDeEMyUCxTQUFTLEVBQUUsQ0FBQztNQUNaQyxVQUFVLEVBQUU7SUFBQyxHQUNWZCxDQUFDO0VBQUEsQ0FDSixDQUFDO0VBQ0wsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ2hPLE1BQU0sRUFBRTtJQUM1QixPQUFPVCxLQUFLO0VBQ2Q7RUFDQSxPQUFBc0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0t0QixLQUFLO0lBQ1JzTyxXQUFXLEtBQUE3TSxNQUFBLENBQUFDLGtCQUFBLENBQU0xQixLQUFLLENBQUNzTyxXQUFXLEdBQUE1TSxrQkFBQSxDQUFLK00sZ0JBQWdCO0VBQUM7QUFFNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzFELDZCQUE2QkEsQ0FDM0MvSyxLQUFlLEVBRWY7RUFBQSxJQURBdVAsYUFBaUUsR0FBQXpMLFNBQUEsQ0FBQXJELE1BQUEsUUFBQXFELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsSUFBSTtFQUV4RSxJQUFNbUgsZUFBc0QsR0FBRyxDQUFDLENBQUM7RUFDakUsSUFBTUQsYUFBb0QsR0FBRyxDQUFDLENBQUM7RUFFL0QsSUFDRSxDQUFDdUUsYUFBYSxJQUNkLENBQUNBLGFBQWEsQ0FBQ3JFLFlBQVksSUFDM0IsQ0FBQ2QsTUFBTSxDQUFDQyxJQUFJLENBQUNrRixhQUFhLENBQUNyRSxZQUFZLENBQUMsQ0FBQ3pLLE1BQU0sRUFDL0M7SUFDQSxPQUFPO01BQUN1SyxhQUFhLEVBQWJBLGFBQWE7TUFBRUMsZUFBZSxFQUFmQTtJQUFlLENBQUM7RUFDekM7RUFBQyxJQUFBdUUsTUFBQSxZQUFBQSxPQUFBLEVBRWdEO0lBQy9DLElBQUksQ0FBQ3hQLEtBQUssQ0FBQ3VCLFFBQVEsQ0FBQ0osTUFBTSxDQUFDLElBQUluQixLQUFLLENBQUNpSCxpQkFBaUIsQ0FBQzlGLE1BQU0sQ0FBQyxFQUFFO01BQzlEO01BQ0E4SixlQUFlLENBQUM5SixNQUFNLENBQUMsR0FBR29PLGFBQWEsQ0FBQ3JFLFlBQVksQ0FBQy9KLE1BQU0sQ0FBQztJQUM5RCxDQUFDLE1BQU07TUFDTDtNQUNBLElBQU1zTyxTQUFTLEdBQUd6UCxLQUFLLENBQUN1QixRQUFRLENBQUNKLE1BQU0sQ0FBQyxDQUFDdU8sTUFBTSxDQUFDdFAsR0FBRyxDQUFDLFVBQUFnQyxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDcUssSUFBSTtNQUFBLEVBQUM7TUFDaEUsSUFBTWtELGlCQUFpQixHQUFHSixhQUFhLENBQUNyRSxZQUFZLENBQUMvSixNQUFNLENBQUMsQ0FBQ2EsTUFBTSxDQUFDLFVBQUE0TixLQUFLO1FBQUEsT0FDdkVILFNBQVMsQ0FBQ3hOLFFBQVEsQ0FBQzJOLEtBQUssQ0FBQ25ELElBQUksQ0FBQztNQUFBLENBQ2hDLENBQUM7TUFFRHpCLGFBQWEsQ0FBQzdKLE1BQU0sQ0FBQyxHQUFHd08saUJBQWlCO0lBQzNDO0VBQ0YsQ0FBQztFQWJELEtBQUssSUFBTXhPLE1BQU0sSUFBSW9PLGFBQWEsQ0FBQ3JFLFlBQVk7SUFBQXNFLE1BQUE7RUFBQTtFQWUvQyxPQUFPO0lBQUN4RSxhQUFhLEVBQWJBLGFBQWE7SUFBRUMsZUFBZSxFQUFmQTtFQUFlLENBQUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzRFLGtCQUFrQkEsQ0FDaEM3UCxLQUFRLEVBQ1I4UCxhQUFxRSxFQUNsRTtFQUNILElBQUlBLGFBQWEsSUFBSXhRLGVBQWUsQ0FBQ3dRLGFBQWEsQ0FBQyxFQUFFO0lBQ25ELE9BQUF4TyxhQUFBLENBQUFBLGFBQUEsS0FDS3RCLEtBQUs7TUFDUjhQLGFBQWEsRUFBYkE7SUFBYTtFQUVqQjtFQUVBLE9BQU85UCxLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTK1AsMkJBQTJCQSxDQUFDeEUsT0FBaUIsRUFBaUI7RUFDckU7RUFDQSxPQUFPUSw2QkFBNkIsQ0FBQ1IsT0FBTyxDQUFDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3lFLG9CQUFvQkEsQ0FDbENoUSxLQUFRLEVBQ1JpUSxlQUF5RSxFQUN0RTtFQUNILElBQUlBLGVBQWUsSUFBSTFRLGlCQUFpQixDQUFDMFEsZUFBZSxDQUFDLEVBQUU7SUFDekQsT0FBQTNPLGFBQUEsQ0FBQUEsYUFBQSxLQUNLdEIsS0FBSztNQUNSaVEsZUFBZSxFQUFmQTtJQUFlO0VBRW5CO0VBRUEsT0FBT2pRLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNrUSw2QkFBNkJBLENBQUMzRSxPQUFpQixFQUFpQjtFQUN2RTtFQUNBLE9BQU9RLDZCQUE2QixDQUFDUixPQUFPLENBQUM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTNEUsb0JBQW9CQSxDQUNsQ25RLEtBQVEsRUFDUm9RLFNBQW1FLEVBQ2hFO0VBQ0gsSUFBSUEsU0FBUyxJQUFJQSxTQUFTLENBQUNDLFdBQVcsRUFBRTtJQUN0QyxPQUFBL08sYUFBQSxDQUFBQSxhQUFBLEtBQ0t0QixLQUFLO01BQ1JzUSxlQUFlLEVBQUFoUCxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNWdEIsS0FBSyxDQUFDc1EsZUFBZSxHQUNyQkYsU0FBUztRQUNaRyxNQUFNLEVBQUU7TUFBSTtJQUNiO0VBRUw7RUFFQSxPQUFPdlEsS0FBSztBQUNkO0FBRUEsU0FBU3dRLHVCQUF1QkEsQ0FBQ2pGLE9BQStCLEVBQXdCO0VBQUEsSUFBQWtGLFdBQUEsRUFBQUMsV0FBQTtFQUN0RjtFQUNBLE9BQU87SUFDTEwsV0FBVyxHQUFBSSxXQUFBLEdBQUV4UixTQUFTLENBQUNzTSxPQUFPLEVBQUVsTSxpQkFBaUIsQ0FBQ3NSLE9BQU8sRUFBRSxVQUFBaEYsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzBFLFdBQVc7SUFBQSxFQUFDLGNBQUFJLFdBQUEsY0FBQUEsV0FBQSxHQUFJLElBQUk7SUFDdEZHLEtBQUssR0FBQUYsV0FBQSxHQUFFelIsU0FBUyxDQUFDc00sT0FBTyxFQUFFbE0saUJBQWlCLENBQUNzUixPQUFPLEVBQUUsVUFBQWhGLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNpRixLQUFLO0lBQUEsRUFBQyxjQUFBRixXQUFBLGNBQUFBLFdBQUEsR0FBSTtFQUN4RSxDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTyxTQUFTRyx5QkFBeUJBLENBQ3ZDbkIsTUFBNkIsRUFNN0I7RUFBQSxJQUxBb0IsU0FFQyxHQUFBaE4sU0FBQSxDQUFBckQsTUFBQSxRQUFBcUQsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxDQUFDLENBQUM7RUFBQSxJQUNOaU4sU0FBdUIsR0FBQWpOLFNBQUEsQ0FBQXJELE1BQUEsT0FBQXFELFNBQUEsTUFBQUMsU0FBQTtFQUFBLElBQ3ZCaU4sT0FBaUMsR0FBQWxOLFNBQUEsQ0FBQXJELE1BQUEsUUFBQXFELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRXRDO0VBQ0EsSUFBTW1OLE9BQXlCLEdBQUcsQ0FBQyxDQUFDO0VBQUMsSUFBQUMsTUFBQSxZQUFBQSxPQUFBLEVBQ0s7SUFBckMsSUFBTTVHLEdBQUcsR0FBQTZHLFlBQUEsQ0FBQUMsRUFBQTtJQUNaSCxPQUFPLENBQUMzRyxHQUFHLENBQUMsR0FBQWhKLGFBQUEsS0FBT3lQLFNBQVMsQ0FBQ3pHLEdBQUcsQ0FBQyxDQUFDO0lBRWxDLElBQU0rRyxLQUFLLEdBQUdQLFNBQVMsQ0FBQ3hHLEdBQUcsQ0FBQztJQUM1QixJQUFJK0csS0FBSyxFQUFFO01BQ1QsSUFBTUMsUUFBUSxHQUFHNUIsTUFBTSxDQUFDekssU0FBUyxDQUFDLFVBQUFzTSxLQUFBO1FBQUEsSUFBRTlFLElBQUksR0FBQThFLEtBQUEsQ0FBSjlFLElBQUk7UUFBQSxPQUFNQSxJQUFJLEtBQUs0RSxLQUFLO01BQUEsRUFBQztNQUU3RCxJQUFJQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDakI7UUFDQUwsT0FBTyxDQUFDM0csR0FBRyxDQUFDLENBQUNnSCxRQUFRLEdBQUdBLFFBQVE7UUFDaENMLE9BQU8sQ0FBQzNHLEdBQUcsQ0FBQyxDQUFDN0YsS0FBSyxHQUFHNE0sS0FBSztNQUM1QjtJQUNGO0VBQ0YsQ0FBQztFQWJELFNBQUFELEVBQUEsTUFBQUQsWUFBQSxHQUFrQi9HLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDMEcsU0FBUyxDQUFDLEVBQUFLLEVBQUEsR0FBQUQsWUFBQSxDQUFBMVEsTUFBQSxFQUFBMlEsRUFBQTtJQUFBRixNQUFBO0VBQUE7O0VBZXhDO0VBQ0EsSUFBTU0sV0FBVyxHQUFHcEgsTUFBTSxDQUFDQyxJQUFJLENBQUM0RyxPQUFPLENBQUMsQ0FBQ3JDLEtBQUssQ0FBQyxVQUFBdEUsR0FBRztJQUFBLE9BQ2hEbUgsY0FBYyxDQUFDUixPQUFPLENBQUMzRyxHQUFHLENBQUMsRUFBRTJHLE9BQU8sRUFBRXZCLE1BQU0sQ0FBQztFQUFBLENBQy9DLENBQUM7RUFFRCxJQUFNZ0MsRUFBRSxHQUFHRixXQUFXLEdBQUdQLE9BQU8sR0FBRyxJQUFJO0VBQ3ZDLElBQUlELE9BQU8sQ0FBQ1csWUFBWSxFQUFFO0lBQ3hCLElBQU1DLGVBQWUsR0FBR3hILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDMEcsU0FBUyxDQUFDLENBQUMvTyxNQUFNLENBQUMsVUFBQTZQLENBQUM7TUFBQSxPQUFJLENBQUNkLFNBQVMsQ0FBQ2MsQ0FBQyxDQUFDLENBQUNDLFFBQVE7SUFBQSxFQUFDO0lBQ2xGLElBQU1DLGNBQWMsR0FBR0gsZUFBZSxDQUFDNVAsTUFBTSxDQUFDLFVBQUE2UCxDQUFDO01BQUEsT0FBSSxFQUFDWixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHWSxDQUFDLENBQUMsQ0FBQ3BOLEtBQUs7SUFBQSxFQUFDO0lBQ3ZFLElBQUlzTixjQUFjLENBQUN0UixNQUFNLEVBQUU7TUFDekIsTUFBTSxJQUFJdVIsS0FBSywwQ0FBQXZRLE1BQUEsQ0FBMENzUSxjQUFjLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBRSxDQUFDO0lBQ3ZGO0lBQ0EsSUFBTUMsYUFBYSxHQUFHOUgsTUFBTSxDQUFDQyxJQUFJLENBQUN5RyxTQUFTLENBQUM7SUFDNUMsSUFBTXFCLGNBQWMsR0FBR0QsYUFBYSxDQUFDbFEsTUFBTSxDQUFDLFVBQUE2UCxDQUFDO01BQUEsSUFBQU8sVUFBQTtNQUFBLE9BQUksRUFBQ25CLE9BQU8sYUFBUEEsT0FBTyxnQkFBQW1CLFVBQUEsR0FBUG5CLE9BQU8sQ0FBR1ksQ0FBQyxDQUFDLGNBQUFPLFVBQUEsZUFBWkEsVUFBQSxDQUFjM04sS0FBSztJQUFBLEVBQUM7SUFDdEUsSUFBSTBOLGNBQWMsQ0FBQzFSLE1BQU0sRUFBRTtNQUN6QixNQUFNLElBQUl1UixLQUFLLCtCQUFBdlEsTUFBQSxDQUErQjBRLGNBQWMsQ0FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFFLENBQUM7SUFDNUU7RUFDRjtFQUVBLE9BQU9QLEVBQUU7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNELGNBQWNBLENBQzVCWSxNQUF5RCxFQUN6RHBCLE9BQXFCLEVBQ3JCeEIsU0FBZ0MsRUFDdkI7RUFDVCxJQUFJNEMsTUFBTSxDQUFDUCxRQUFRLElBQUlPLE1BQU0sQ0FBQzVOLEtBQUssRUFBRTtJQUNuQyxPQUFPLElBQUk7RUFDYjtFQUNBLElBQUk0TixNQUFNLENBQUNDLFNBQVMsRUFBRTtJQUNwQixPQUFPRCxNQUFNLENBQUNDLFNBQVMsQ0FBQ0QsTUFBTSxFQUFFcEIsT0FBTyxFQUFFeEIsU0FBUyxDQUFDO0VBQ3JEO0VBQ0EsT0FBTyxLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTOEMsc0JBQXNCQSxDQUNwQzdDLE1BQU0sRUFBQThDLEtBQUEsRUFFTkMsY0FBYyxFQUVkO0VBQUEsSUFBQUMsS0FBQSxHQUFBOUUsY0FBQSxDQUFBNEUsS0FBQTtJQUhDRyxjQUFjLEdBQUFELEtBQUE7RUFBQSxJQUVmMUIsT0FBaUMsR0FBQWxOLFNBQUEsQ0FBQXJELE1BQUEsUUFBQXFELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRXRDLElBQU04TyxlQUFlLEdBQUdyUyxLQUFLLENBQUNDLE9BQU8sQ0FBQ2lTLGNBQWMsQ0FBQyxHQUFHQSxjQUFjLEdBQUcsQ0FBQ0EsY0FBYyxDQUFDOztFQUV6RjtFQUNBLE9BQU9HLGVBQWUsQ0FBQ3hTLEdBQUcsQ0FBQyxVQUFBeVMsU0FBUyxFQUFJO0lBQ3RDLElBQU1qRCxLQUFLLEdBQUdpRCxTQUFTLENBQUNqRCxLQUFLLEdBQ3pCRixNQUFNLENBQUNuRCxJQUFJLENBQUMsVUFBQXVHLEVBQUU7TUFBQSxPQUNaMUksTUFBTSxDQUFDQyxJQUFJLENBQUN3SSxTQUFTLENBQUNqRCxLQUFLLENBQUMsQ0FBQ2hCLEtBQUssQ0FBQyxVQUFBdEUsR0FBRztRQUFBLE9BQUl1SSxTQUFTLENBQUNqRCxLQUFLLENBQUN0RixHQUFHLENBQUMsS0FBS3dJLEVBQUUsQ0FBQ3hJLEdBQUcsQ0FBQztNQUFBLEVBQUM7SUFBQSxDQUM3RSxDQUFDLEdBQ0QsSUFBSTtJQUVSLElBQUlzRixLQUFLLEtBQUs3TCxTQUFTLElBQUlpTixPQUFPLENBQUNXLFlBQVksRUFBRTtNQUMvQyxNQUFNLElBQUlLLEtBQUssd0NBQUF2USxNQUFBLENBQXdDc1IsSUFBSSxDQUFDQyxTQUFTLENBQUNILFNBQVMsQ0FBQ2pELEtBQUssQ0FBQyxDQUFFLENBQUM7SUFDM0Y7SUFFQSxPQUFPeEYsTUFBTSxDQUFDQyxJQUFJLENBQUNzSSxjQUFjLENBQUMsQ0FBQzNHLE1BQU0sQ0FDdkMsVUFBQ2lILElBQUksRUFBRTNJLEdBQUc7TUFBQSxPQUFBaEosYUFBQSxDQUFBQSxhQUFBLEtBQ0wyUixJQUFJLE9BQUFwUSxlQUFBLEtBQ055SCxHQUFHLEVBQUdBLEdBQUcsS0FBSyxPQUFPLEdBQUdzRixLQUFLLEdBQUdpRCxTQUFTLENBQUN2SSxHQUFHLENBQUMsSUFBSXFJLGNBQWMsQ0FBQ3JJLEdBQUcsQ0FBQztJQUFBLENBQ3RFLEVBQ0YsQ0FBQyxDQUNILENBQUM7RUFDSCxDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTNEksMEJBQTBCQSxDQUFDQyxVQUF1QixFQUFFN0ksR0FBVyxFQUFPO0VBQzdFLElBQU0vRyxNQUFNLEdBQUc0UCxVQUFVLENBQUM1UCxNQUF5QztFQUNuRSxJQUFJQSxNQUFNLElBQUlBLE1BQU0sQ0FBQytHLEdBQUcsQ0FBQyxLQUFLdkcsU0FBUyxFQUFFO0lBQ3ZDLE9BQU9SLE1BQU0sQ0FBQytHLEdBQUcsQ0FBQztFQUNwQjtFQUNBLElBQU04SSxRQUFRLEdBQ1hELFVBQVUsQ0FBNENsUSxjQUFjLElBQ3BFTSxNQUFNLElBQUlBLE1BQU0sQ0FBQ04sY0FBZTtFQUNuQyxJQUFJbVEsUUFBUSxJQUFJQyxPQUFBLENBQU9ELFFBQVEsTUFBSyxRQUFRLElBQUlBLFFBQVEsQ0FBQzlJLEdBQUcsQ0FBQyxLQUFLdkcsU0FBUyxFQUFFO0lBQzNFLE9BQU9xUCxRQUFRLENBQUM5SSxHQUFHLENBQUM7RUFDdEI7RUFDQSxPQUFPdkcsU0FBUztBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3VQLDJCQUEyQkEsQ0FDekM1RCxNQUE2QixFQUM3QmhLLFFBQWUsRUFDZnlOLFVBQXVCLEVBRVQ7RUFBQSxJQURkbkMsT0FBaUMsR0FBQWxOLFNBQUEsQ0FBQXJELE1BQUEsUUFBQXFELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRXRDc0csTUFBTSxDQUFDbUosTUFBTSxDQUFDN04sUUFBUSxDQUFDekMsY0FBYyxDQUFDLENBQUNsQixPQUFPLENBQUMsVUFBQXlSLEtBQUEsRUFBeUI7SUFBQSxJQUF2QjVELEtBQUssR0FBQTRELEtBQUEsQ0FBTDVELEtBQUs7TUFBRTZELEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO01BQUVuSixHQUFHLEdBQUFrSixLQUFBLENBQUhsSixHQUFHO0lBQ2hFLElBQU1vSixVQUFVLEdBQUdSLDBCQUEwQixDQUFDQyxVQUFVLEVBQUV2RCxLQUFLLENBQUM7SUFDaEUsSUFBTStELFVBQVUsR0FBR1QsMEJBQTBCLENBQUNDLFVBQVUsRUFBRU0sS0FBSyxDQUFDO0lBQ2hFLElBQUlHLFVBQVU7SUFDZCxJQUFJRixVQUFVLGFBQVZBLFVBQVUsZUFBVkEsVUFBVSxDQUFFakgsSUFBSSxFQUFFO01BQ3BCbUgsVUFBVSxHQUFHbEUsTUFBTSxDQUFDbkQsSUFBSSxDQUFDLFVBQUF1RyxFQUFFO1FBQUEsT0FBSUEsRUFBRSxDQUFDckcsSUFBSSxLQUFLaUgsVUFBVSxDQUFDakgsSUFBSTtNQUFBLEVBQUM7SUFDN0Q7SUFFQSxJQUFNb0gsWUFBWSxHQUFBdlMsYUFBQSxDQUFBQSxhQUFBLEtBQ1pzUyxVQUFVLEdBQUEvUSxlQUFBLEtBQUsrTSxLQUFLLEVBQUdnRSxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQ3ZDRCxVQUFVLEdBQUE5USxlQUFBLEtBQUs0USxLQUFLLEVBQUdFLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FDNUM7SUFDRCxJQUFJdkosTUFBTSxDQUFDQyxJQUFJLENBQUN3SixZQUFZLENBQUMsQ0FBQ3BULE1BQU0sRUFBRTtNQUNwQ2lGLFFBQVEsQ0FBQ29PLGlCQUFpQixDQUFDRCxZQUFZLENBQUM7SUFDMUM7SUFFQW5PLFFBQVEsQ0FBQ3FPLHFCQUFxQixDQUFDekosR0FBRyxDQUFDO0lBQ25DLElBQUkwRyxPQUFPLENBQUNXLFlBQVksRUFBRTtNQUFBLElBQUFxQyxxQkFBQTtNQUN4QixJQUFNQyxTQUFTLEdBQUdQLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFakgsSUFBSTtNQUNsQyxJQUFJd0gsU0FBUyxJQUFJQSxTQUFTLE9BQUFELHFCQUFBLEdBQUt0TyxRQUFRLENBQUNuQyxNQUFNLENBQUNxTSxLQUFLLENBQUMsY0FBQW9FLHFCQUFBLHVCQUF0QkEscUJBQUEsQ0FBd0J2SCxJQUFJLEdBQUU7UUFDM0QsTUFBTSxJQUFJdUYsS0FBSyw0Q0FBQXZRLE1BQUEsQ0FBNENtTyxLQUFLLENBQUUsQ0FBQztNQUNyRTtJQUNGO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBT2xLLFFBQVE7QUFDakI7QUFPQSxPQUFPLFNBQVNILHdCQUF3QkEsQ0FDdENoRSxRQUFrQixFQUNsQmlFLFlBQXNDLEVBR3RDO0VBQUEsSUFGQW5FLE1BQXVELEdBQUF5QyxTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUM1RGtOLE9BQTZCLEdBQUFsTixTQUFBLENBQUFyRCxNQUFBLE9BQUFxRCxTQUFBLE1BQUFDLFNBQUE7RUFFN0IsSUFBTXBELFNBQWtCLEdBQUcsRUFBRTtFQUM3QixJQUFNQyxNQUF1RCxHQUFHLEVBQUU7RUFFbEVTLE1BQU0sQ0FBQ1UsT0FBTyxDQUFDLFVBQUFvRyxLQUFLLEVBQUk7SUFBQSxJQUFBK0wsYUFBQTtJQUN0QixJQUFJQyxhQUEyQixHQUFHLElBQUk7SUFFdEMsSUFBSWhNLEtBQUssYUFBTEEsS0FBSyxnQkFBQStMLGFBQUEsR0FBTC9MLEtBQUssQ0FBRTVFLE1BQU0sY0FBQTJRLGFBQUEsZUFBYkEsYUFBQSxDQUFlL1MsTUFBTSxFQUFFO01BQ3pCLElBQUlJLFFBQVEsQ0FBQzRHLEtBQUssQ0FBQzVFLE1BQU0sQ0FBQ3BDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pDO1FBQ0FnVCxhQUFhLEdBQUdDLHFCQUFxQixDQUNuQzdTLFFBQVEsQ0FBQzRHLEtBQUssQ0FBQzVFLE1BQU0sQ0FBQ3BDLE1BQU0sQ0FBQyxFQUM3QmdILEtBQUssRUFDTDNDLFlBQVksRUFDWndMLE9BQ0YsQ0FBQztNQUNIO0lBQ0Y7SUFFQSxJQUFJbUQsYUFBYSxFQUFFO01BQ2pCeFQsU0FBUyxDQUFDbUMsSUFBSSxDQUFDcVIsYUFBYSxDQUFDO0lBQy9CLENBQUMsTUFBTTtNQUNMO01BQ0F2VCxNQUFNLENBQUNrQyxJQUFJLENBQUNxRixLQUFLLENBQUM7SUFDcEI7RUFDRixDQUFDLENBQUM7RUFFRixPQUFPO0lBQUN4SCxTQUFTLEVBQVRBLFNBQVM7SUFBRUMsTUFBTSxFQUFOQTtFQUFNLENBQUM7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBU3lULDZCQUE2QkEsQ0FBQzNPLFFBQVEsRUFBRTtFQUMvQztFQUNBLElBQUk0TyxZQUFZLEdBQUc1TyxRQUFRLENBQUM2TyxlQUFlLENBQUMsQ0FBQztFQUM3QztFQUNBLElBQU1DLGFBQWEsR0FBRzlPLFFBQVEsQ0FBQ25DLE1BQU0sQ0FBQ2tSLFVBQVUsR0FDNUMsQ0FBQy9PLFFBQVEsQ0FBQ2dQLG9CQUFvQixJQUFJLEVBQUUsRUFBRW5JLElBQUksQ0FDeEMsVUFBQW9JLE9BQU87SUFBQSxPQUFJQSxPQUFPLENBQUNySyxHQUFHLEtBQUs1RSxRQUFRLENBQUNuQyxNQUFNLENBQUNrUixVQUFVO0VBQUEsQ0FDdkQsQ0FBQyxHQUNELElBQUk7RUFFUixJQUFJRCxhQUFhLEVBQUU7SUFDakI7SUFDQSxJQUFNSSxZQUFZLEdBQUcsQ0FBQ0osYUFBYSxDQUFDSyxZQUFZLElBQUksRUFBRSxFQUFFQyxPQUFPLENBQUMsVUFBQXRMLEtBQUs7TUFBQSxPQUFJQSxLQUFLLENBQUN5SCxPQUFPLElBQUksRUFBRTtJQUFBLEVBQUM7SUFDN0YsSUFBTThELFlBQVksR0FBRyxJQUFJck0sR0FBRyxDQUFDOEwsYUFBYSxDQUFDNUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztJQUNqRTBDLFlBQVksR0FBRyxHQUFBN1MsTUFBQSxDQUFBQyxrQkFBQSxDQUNUOFMsYUFBYSxDQUFDNUMsZUFBZSxJQUFJLEVBQUUsR0FBQWxRLGtCQUFBLENBQ25DOFMsYUFBYSxDQUFDUSxlQUFlLElBQUksRUFBRSxHQUFBdFQsa0JBQUEsQ0FDcENrVCxZQUFZLEdBQ2Y1SSxNQUFNLENBQUMsVUFBQ2lILElBQUksRUFBRTNJLEdBQUcsRUFBSztNQUN0QixJQUFNMkssR0FBRyxHQUFHWCxZQUFZLENBQUNoSyxHQUFHLENBQUM7TUFDN0IsSUFBSSxDQUFDMkssR0FBRyxFQUFFO1FBQ1IsT0FBT2hDLElBQUk7TUFDYjtNQUNBO01BQ0E7TUFDQSxJQUFJOEIsWUFBWSxDQUFDbk0sR0FBRyxDQUFDMEIsR0FBRyxDQUFDLEVBQUU7UUFDekIsSUFBaUI0SyxTQUFTLEdBQW9CRCxHQUFHLENBQTFDbkQsUUFBUTtVQUFnQnFELFdBQVcsR0FBQXhTLHdCQUFBLENBQUlzUyxHQUFHLEVBQUFHLFVBQUE7UUFDakQsT0FBQTlULGFBQUEsQ0FBQUEsYUFBQSxLQUFXMlIsSUFBSSxPQUFBcFEsZUFBQSxLQUFHeUgsR0FBRyxFQUFHNkssV0FBVztNQUNyQztNQUNBLE9BQUE3VCxhQUFBLENBQUFBLGFBQUEsS0FBVzJSLElBQUksT0FBQXBRLGVBQUEsS0FBR3lILEdBQUcsRUFBQWhKLGFBQUEsQ0FBQUEsYUFBQSxLQUFPMlQsR0FBRztRQUFFbkQsUUFBUSxFQUFFO01BQUk7SUFDakQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ1I7RUFFQSxPQUFPd0MsWUFBWTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTRixxQkFBcUJBLENBQ25DaUIsT0FBb0IsRUFDcEJsQyxVQUF1QixFQUN2QjNOLFlBQXNDLEVBRXhCO0VBQUEsSUFEZHdMLE9BQTRCLEdBQUFsTixTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVqQyxJQUFPNEwsTUFBTSxHQUFnQjJGLE9BQU8sQ0FBN0IzRixNQUFNO0lBQU12TyxNQUFNLEdBQUlrVSxPQUFPLENBQXJCL1UsRUFBRTtFQUNqQixJQUFPZ1YsSUFBSSxHQUFJbkMsVUFBVSxDQUFsQm1DLElBQUk7RUFDWCxJQUFPM0QsWUFBWSxHQUFJWCxPQUFPLENBQXZCVyxZQUFZO0VBQ25CO0VBQ0EsSUFBSSxDQUFDMkQsSUFBSSxJQUFJLENBQUNsTCxNQUFNLENBQUNtTCxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDalEsWUFBWSxFQUFFOFAsSUFBSSxDQUFDLElBQUksQ0FBQ25DLFVBQVUsQ0FBQzVQLE1BQU0sRUFBRTtJQUM1RixJQUFJb08sWUFBWSxFQUFFO01BQ2hCLE1BQU0sSUFBSUssS0FBSyw2QkFBQXZRLE1BQUEsQ0FBNEI2VCxJQUFJLDRCQUF3QixDQUFDO0lBQzFFO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFJNVAsUUFBUSxHQUFHLElBQUlGLFlBQVksQ0FBQzhQLElBQUksQ0FBQyxDQUFDO0lBQ3BDaFYsRUFBRSxFQUFFNlMsVUFBVSxDQUFDN1MsRUFBRTtJQUNqQmEsTUFBTSxFQUFOQSxNQUFNO0lBQ04rTixLQUFLLEVBQUVpRSxVQUFVLENBQUM1UCxNQUFNLENBQUMyTCxLQUFLO0lBQzlCek0sS0FBSyxFQUFFMFEsVUFBVSxDQUFDNVAsTUFBTSxDQUFDZCxLQUFLO0lBQzlCc00sU0FBUyxFQUFFb0UsVUFBVSxDQUFDNVAsTUFBTSxDQUFDd0wsU0FBUztJQUN0QzJHLE1BQU0sRUFBRXZDLFVBQVUsQ0FBQzVQLE1BQU0sQ0FBQ21TLE1BQU07SUFDaENqQixVQUFVLEVBQUV0QixVQUFVLENBQUM1UCxNQUFNLENBQUNrUixVQUFVO0lBQ3hDa0IsY0FBYyxFQUFFeEMsVUFBVSxDQUFDNVAsTUFBTSxDQUFDb1M7RUFDcEMsQ0FBQyxDQUFDO0VBRUYsSUFBTXJCLFlBQVksR0FBR0QsNkJBQTZCLENBQUMzTyxRQUFRLENBQUM7RUFFNUQsSUFBSTBFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDaUssWUFBWSxDQUFDLEVBQUU7SUFDN0IsSUFBTXJELE9BQU8sR0FBR0oseUJBQXlCLENBQ3ZDbkIsTUFBTSxFQUNOeUQsVUFBVSxDQUFDNVAsTUFBTSxDQUFDME4sT0FBTyxFQUN6QnFELFlBQVksRUFDWnRELE9BQ0YsQ0FBQztJQUNELElBQUlDLE9BQU8sRUFBRTtNQUNYdkwsUUFBUSxDQUFDb08saUJBQWlCLENBQUM7UUFDekI3QyxPQUFPLEVBQUEzUCxhQUFBLENBQUFBLGFBQUEsS0FDRm9FLFFBQVEsQ0FBQ25DLE1BQU0sQ0FBQzBOLE9BQU8sR0FDdkJBLE9BQU87TUFFZCxDQUFDLENBQUM7SUFDSixDQUFDLE1BQU0sSUFBSSxDQUFDRCxPQUFPLENBQUN2TCxnQkFBZ0IsRUFBRTtNQUNwQyxPQUFPLElBQUk7SUFDYjtFQUNGO0VBRUEsSUFBTW9OLFNBQVMsR0FDYk0sVUFBVSxDQUFDNVAsTUFBTSxDQUFDc1AsU0FBUyxJQUFJbk4sUUFBUSxDQUFDbkMsTUFBTSxDQUFDc1AsU0FBUyxHQUNwRE4sc0JBQXNCLENBQ3BCN0MsTUFBTSxFQUNOaEssUUFBUSxDQUFDbkMsTUFBTSxDQUFDc1AsU0FBUyxFQUN6Qk0sVUFBVSxDQUFDNVAsTUFBTSxDQUFDc1AsU0FBUyxFQUMzQjdCLE9BQ0YsQ0FBQyxHQUNEdEwsUUFBUSxDQUFDbkMsTUFBTSxDQUFDc1AsU0FBUzs7RUFFL0I7RUFDQSxJQUFNK0MsZUFBZSxHQUFHbFEsUUFBUSxDQUFDbVEsZUFBZSxDQUM5Q25RLFFBQVEsQ0FBQ25DLE1BQU0sQ0FBQ3VTLFNBQVMsRUFDekIzQyxVQUFVLENBQUM1UCxNQUFNLENBQUN1UyxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQ2pDO0lBQ0VDLFdBQVcsRUFBRSxDQUFDLFlBQVksRUFBRSxrQkFBa0I7RUFDaEQsQ0FDRixDQUFDOztFQUVEO0VBQ0EsSUFBTUQsU0FBUyxHQUFHcFEsUUFBUSxDQUFDc1EsaUJBQWlCLEdBQ3hDdFEsUUFBUSxDQUFDc1EsaUJBQWlCLENBQUNYLE9BQU8sRUFBRU8sZUFBZSxDQUFDLEdBQ3BEQSxlQUFlO0VBRW5CbFEsUUFBUSxDQUFDb08saUJBQWlCLENBQUM7SUFDekJnQyxTQUFTLEVBQVRBLFNBQVM7SUFDVGpELFNBQVMsRUFBVEE7RUFDRixDQUFDLENBQUM7O0VBRUY7RUFDQTtFQUNBO0VBQ0FuTixRQUFRLEdBQUc0TiwyQkFBMkIsQ0FBQzVELE1BQU0sRUFBRWhLLFFBQVEsRUFBRXlOLFVBQVUsRUFBRW5DLE9BQU8sQ0FBQztFQUU3RSxJQUFJVyxZQUFZLEVBQUU7SUFDaEIsSUFBSSxDQUFDak0sUUFBUSxDQUFDMEksYUFBYSxDQUFDLENBQUMsRUFBRTtNQUM3QixNQUFNLElBQUk0RCxLQUFLLGdDQUFBdlEsTUFBQSxDQUFnQ2lFLFFBQVEsQ0FBQ3BGLEVBQUUsQ0FBRSxDQUFDO0lBQy9EO0VBQ0Y7RUFFQSxPQUFPb0YsUUFBUTtBQUNqQjtBQUVBLE9BQU8sU0FBU3VRLFdBQVdBLENBQXFCalcsS0FBUSxFQUFFa1csV0FBd0IsRUFBRTtFQUFBLElBQUFDLG9CQUFBO0VBQ2xGLElBQUksQ0FBQ0QsV0FBVyxFQUFFO0lBQ2hCLE9BQU9sVyxLQUFLO0VBQ2Q7RUFDQSxPQUFBc0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0t0QixLQUFLO0lBQ1JvVyxNQUFNLEVBQUE5VSxhQUFBLENBQUFBLGFBQUEsS0FDRHRCLEtBQUssQ0FBQ29XLE1BQU07TUFDZkMsUUFBUSxLQUFBNVUsTUFBQSxDQUFBQyxrQkFBQSxDQUFNMUIsS0FBSyxDQUFDb1csTUFBTSxDQUFDQyxRQUFRLEdBQUEzVSxrQkFBQSxDQUFNd1UsV0FBVyxDQUFDRyxRQUFRLElBQUksRUFBRSxFQUFFO01BQ3JFO01BQ0FDLE9BQU8sR0FBQUgsb0JBQUEsR0FBRUQsV0FBVyxDQUFDSSxPQUFPLGNBQUFILG9CQUFBLGNBQUFBLG9CQUFBLEdBQUluVyxLQUFLLENBQUNvVyxNQUFNLENBQUNFO0lBQU87RUFDckQ7QUFFTDtBQUVBLFNBQVNDLG9CQUFvQkEsQ0FBQ2hMLE9BQXNCLEVBQWU7RUFDakUsT0FBT0EsT0FBTyxDQUFDUyxNQUFNLENBQ25CLFVBQUNDLEdBQUcsRUFBRXVLLFVBQVUsRUFBSztJQUNuQixPQUFBbFYsYUFBQSxDQUFBQSxhQUFBLEtBQ0sySyxHQUFHO01BQ05vSyxRQUFRLEtBQUE1VSxNQUFBLENBQUFDLGtCQUFBLENBQU11SyxHQUFHLENBQUNvSyxRQUFRLEdBQUEzVSxrQkFBQSxDQUFNOFUsVUFBVSxDQUFDSCxRQUFRLElBQUksRUFBRTtJQUFFO0VBRS9ELENBQUMsRUFDRDtJQUNFO0lBQ0E7SUFDQTtJQUNBQSxRQUFRLEVBQUUsRUFBRTtJQUNaQyxPQUFPLEVBQUUvSyxPQUFPLENBQUMvQyxJQUFJLENBQUMsVUFBQW1ELENBQUM7TUFBQSxPQUFJQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRTJLLE9BQU87SUFBQTtFQUN2QyxDQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0csb0JBQW9CQSxDQUFDelcsS0FBZSxFQUFFMFcsY0FBd0IsRUFBWTtFQUN4RixJQUFNdk0sTUFBTSxHQUFBN0ksYUFBQSxDQUFBQSxhQUFBLEtBQ1B0QixLQUFLLENBQUN1QixRQUFRLEdBQ2RtVixjQUFjLENBQ2xCO0VBRUQsSUFBSW5XLEtBQUssQ0FBQ0MsT0FBTyxDQUFDUixLQUFLLENBQUMyVyxvQkFBb0IsQ0FBQyxFQUFFO0lBQzdDO0lBQ0EsSUFBTUMsYUFBYSxHQUFHeE0sTUFBTSxDQUFDQyxJQUFJLENBQUNGLE1BQU0sQ0FBQyxDQUFDbkksTUFBTSxDQUM5QyxVQUFBMUIsRUFBRTtNQUFBLElBQUF1VyxxQkFBQTtNQUFBLE9BQUksR0FBQUEscUJBQUEsR0FBQzdXLEtBQUssQ0FBQzJXLG9CQUFvQixjQUFBRSxxQkFBQSxlQUExQkEscUJBQUEsQ0FBNEI1VSxRQUFRLENBQUMzQixFQUFFLENBQUM7SUFBQSxDQUNqRCxDQUFDO0lBQ0QsT0FBTyxHQUFBbUIsTUFBQSxDQUFBQyxrQkFBQSxDQUFJMUIsS0FBSyxDQUFDMlcsb0JBQW9CLEdBQUFqVixrQkFBQSxDQUFLa1YsYUFBYSxHQUFFNUssTUFBTSxDQUM3RCxVQUFDaUgsSUFBSSxFQUFFOVIsTUFBTTtNQUFBLE9BQUFHLGFBQUEsQ0FBQUEsYUFBQSxLQUNSMlIsSUFBSSxHQUNIOUksTUFBTSxDQUFDaEosTUFBTSxDQUFDLEdBQUEwQixlQUFBLEtBQUsxQixNQUFNLEVBQUdnSixNQUFNLENBQUNoSixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFBQSxDQUNwRCxFQUNGLENBQUMsQ0FDSCxDQUFDO0VBQ0g7RUFFQSxPQUFPZ0osTUFBTTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTNEIsNkJBQTZCQSxDQUFJK0ssR0FBUSxFQUFZO0VBQUEsSUFBQUMsTUFBQTtFQUM1RCxJQUFNQyxNQUFNLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7RUFDeEJILEdBQUcsQ0FBQy9VLE9BQU8sQ0FBQyxVQUFBMEMsS0FBSyxFQUFJO0lBQ25CLElBQUlyRixrQkFBa0IsQ0FBQ3FGLEtBQUssQ0FBQyxFQUFFO01BQzdCLElBQUksQ0FBQ3VTLE1BQU0sQ0FBQ3BPLEdBQUcsQ0FBQ25FLEtBQUssQ0FBQyxFQUFFO1FBQ3RCdVMsTUFBTSxDQUFDRSxHQUFHLENBQUN6UyxLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQ3RCLENBQUMsTUFBTTtRQUNMdVMsTUFBTSxDQUFDRSxHQUFHLENBQUN6UyxLQUFLLEVBQUV1UyxNQUFNLENBQUNHLEdBQUcsQ0FBQzFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMxQztJQUNGO0VBQ0YsQ0FBQyxDQUFDO0VBQ0Y7RUFDQSxJQUFJdVMsTUFBTSxDQUFDckssSUFBSSxLQUFLLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUk7RUFDYjtFQUNBLFFBQUFvSyxNQUFBLEdBQUFyVixrQkFBQSxDQUFXc1YsTUFBTSxDQUFDdkosT0FBTyxDQUFDLENBQUMsZUFBQXNKLE1BQUEsdUJBQXBCQSxNQUFBLENBQXVCL0ssTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRW1MLElBQUk7SUFBQSxPQUFNQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUduTCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdtTCxJQUFJLEdBQUduTCxHQUFHO0VBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pGO0FBRUEsT0FBTyxJQUFNb0wsaUJBQXVDLEdBQUcsQ0FDckQ7RUFDRUMsS0FBSyxFQUFFM1EsV0FBVztFQUNsQjRRLElBQUksRUFBRSxRQUFRO0VBQ2RDLFdBQVcsRUFBRSxpQkFBaUI7RUFDOUJDLGFBQWEsRUFBRTtBQUNqQixDQUFDLEVBQ0Q7RUFDRUgsS0FBSyxFQUFFelAsZUFBZTtFQUN0QjBQLElBQUksRUFBRTtBQUNSLENBQUMsRUFDRDtFQUNFRCxLQUFLLEVBQUV2WCxZQUFZO0VBQ25Cd1gsSUFBSSxFQUFFLFNBQVM7RUFDZkMsV0FBVyxFQUFFLGtCQUFrQjtFQUMvQkMsYUFBYSxFQUFFLHFCQUFxQjtFQUNwQ0MsdUJBQXVCLEVBQUUvVjtBQUMzQixDQUFDLEVBQ0Q7RUFDRTJWLEtBQUssRUFBRXZKLFlBQVk7RUFDbkJ3SixJQUFJLEVBQUU7QUFDUixDQUFDLEVBQ0Q7RUFDRUQsS0FBSyxFQUFFakosZ0JBQWdCO0VBQ3ZCa0osSUFBSSxFQUFFLGFBQWE7RUFDbkJDLFdBQVcsRUFBRTtBQUNmLENBQUMsRUFDRDtFQUNFRixLQUFLLEVBQUVyTixpQkFBaUI7RUFDeEJzTixJQUFJLEVBQUUsbUJBQW1CO0VBQ3pCQyxXQUFXLEVBQUUsdUJBQXVCO0VBQ3BDRSx1QkFBdUIsRUFBRXhLLDRCQUE0QjtFQUNyRHlLLFlBQVksRUFBRXRNLHdCQUF3QjtFQUN0Q3VNLGNBQWMsRUFBRXRNO0FBQ2xCLENBQUMsRUFDRDtFQUFDZ00sS0FBSyxFQUFFekgsa0JBQWtCO0VBQUUwSCxJQUFJLEVBQUUsZUFBZTtFQUFFSyxjQUFjLEVBQUU3SDtBQUEyQixDQUFDLEVBQy9GO0VBQ0V1SCxLQUFLLEVBQUV0SCxvQkFBb0I7RUFDM0J1SCxJQUFJLEVBQUUsaUJBQWlCO0VBQ3ZCSyxjQUFjLEVBQUUxSDtBQUNsQixDQUFDLEVBQ0Q7RUFBQ29ILEtBQUssRUFBRWhLLGNBQWM7RUFBRWlLLElBQUksRUFBRSxXQUFXO0VBQUVDLFdBQVcsRUFBRTtBQUFxQixDQUFDLEVBQzlFO0VBQUNGLEtBQUssRUFBRW5ILG9CQUFvQjtFQUFFb0gsSUFBSSxFQUFFLGlCQUFpQjtFQUFFSyxjQUFjLEVBQUVwSDtBQUF1QixDQUFDLEVBQy9GO0VBQUM4RyxLQUFLLEVBQUVyQixXQUFXO0VBQUVzQixJQUFJLEVBQUUsUUFBUTtFQUFFSyxjQUFjLEVBQUVyQjtBQUFvQixDQUFDLENBQzNFIiwiaWdub3JlTGlzdCI6W119
|