@kepler.gl/reducers 3.2.6 → 3.3.0-alpha.1
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/combined-updaters.d.ts +1 -1
- package/dist/combined-updaters.js +6 -9
- package/dist/composer-helpers.d.ts +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/layer-utils.d.ts +16 -8
- package/dist/layer-utils.js +42 -1
- package/dist/map-state-updaters.d.ts +6 -4
- package/dist/map-state-updaters.js +4 -2
- package/dist/map-state.d.ts +20 -16
- package/dist/map-style-updaters.d.ts +3 -3
- package/dist/provider-state-updaters.d.ts +2 -2
- package/dist/root.d.ts +1 -1
- package/dist/ui-state-updaters.d.ts +38 -3
- package/dist/ui-state-updaters.js +116 -32
- package/dist/ui-state.js +2 -2
- package/dist/vis-state-merger.d.ts +5 -1
- package/dist/vis-state-merger.js +44 -2
- package/dist/vis-state-selectors.d.ts +11 -2
- package/dist/vis-state-selectors.js +3 -3
- package/dist/vis-state-updaters.d.ts +51 -65
- package/dist/vis-state-updaters.js +391 -130
- package/dist/vis-state.d.ts +52 -104
- package/dist/vis-state.js +2 -2
- package/package.json +24 -22
package/dist/vis-state-merger.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.createLayerFromConfig = createLayerFromConfig;
|
|
|
10
10
|
exports.insertLayerAtRightOrder = insertLayerAtRightOrder;
|
|
11
11
|
exports.isSavedLayerConfigV1 = isSavedLayerConfigV1;
|
|
12
12
|
exports.mergeAnimationConfig = mergeAnimationConfig;
|
|
13
|
+
exports.mergeAnnotations = mergeAnnotations;
|
|
13
14
|
exports.mergeDatasetsByOrder = mergeDatasetsByOrder;
|
|
14
15
|
exports.mergeEditor = mergeEditor;
|
|
15
16
|
exports.mergeEffects = mergeEffects;
|
|
@@ -320,7 +321,7 @@ function mergeInteractions(state, interactionToBeMerged) {
|
|
|
320
321
|
if (!state.interactionConfig[key]) {
|
|
321
322
|
return;
|
|
322
323
|
}
|
|
323
|
-
var currentConfig = key === 'tooltip' || key === 'brush' ? state.interactionConfig[key].config : null;
|
|
324
|
+
var currentConfig = key === 'tooltip' || key === 'brush' || key === 'geocoder' ? state.interactionConfig[key].config : null;
|
|
324
325
|
var _ref2 = interactionToBeMerged[key] || {},
|
|
325
326
|
enabled = _ref2.enabled,
|
|
326
327
|
configSaved = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
|
|
@@ -419,6 +420,11 @@ function combineInteractionConfigs(configs) {
|
|
|
419
420
|
return p.size;
|
|
420
421
|
})) !== null && _aggregate !== void 0 ? _aggregate : null;
|
|
421
422
|
}
|
|
423
|
+
if (key === 'geocoder') {
|
|
424
|
+
combined[key].limitSearch = toBeCombinedProps.some(function (p) {
|
|
425
|
+
return p === null || p === void 0 ? void 0 : p.limitSearch;
|
|
426
|
+
});
|
|
427
|
+
}
|
|
422
428
|
};
|
|
423
429
|
for (var key in combined) {
|
|
424
430
|
_loop2(key);
|
|
@@ -511,6 +517,38 @@ function mergeEffects(state, effects, fromConfig) {
|
|
|
511
517
|
});
|
|
512
518
|
}
|
|
513
519
|
|
|
520
|
+
/**
|
|
521
|
+
* Merge annotations with saved config
|
|
522
|
+
*/
|
|
523
|
+
function mergeAnnotations(state, annotations) {
|
|
524
|
+
if (!annotations || !annotations.length) {
|
|
525
|
+
return state;
|
|
526
|
+
}
|
|
527
|
+
var existingIds = new Set(state.annotations.map(function (a) {
|
|
528
|
+
return a.id;
|
|
529
|
+
}));
|
|
530
|
+
var validAnnotations = annotations.filter(function (a) {
|
|
531
|
+
return a && a.id && !existingIds.has(a.id) && (0, _constants.isAnnotationKind)(a.kind) && Array.isArray(a.anchorPoint) && a.anchorPoint.length === 2;
|
|
532
|
+
}).map(function (a) {
|
|
533
|
+
return _objectSpread({
|
|
534
|
+
isVisible: true,
|
|
535
|
+
autoSize: true,
|
|
536
|
+
autoSizeY: true,
|
|
537
|
+
label: '',
|
|
538
|
+
lineColor: _constants.INITIAL_ANNOTATION_LINE_COLOR,
|
|
539
|
+
lineWidth: _constants.INITIAL_ANNOTATION_LINE_WIDTH,
|
|
540
|
+
textWidth: 0,
|
|
541
|
+
textHeight: 0
|
|
542
|
+
}, a);
|
|
543
|
+
});
|
|
544
|
+
if (!validAnnotations.length) {
|
|
545
|
+
return state;
|
|
546
|
+
}
|
|
547
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
548
|
+
annotations: [].concat((0, _toConsumableArray2["default"])(state.annotations), (0, _toConsumableArray2["default"])(validAnnotations))
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
|
|
514
552
|
/**
|
|
515
553
|
* Merge interactionConfig.tooltip with saved config,
|
|
516
554
|
* validate fieldsToShow
|
|
@@ -959,6 +997,10 @@ var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
|
|
|
959
997
|
}, {
|
|
960
998
|
merge: mergeEffects,
|
|
961
999
|
prop: 'effects'
|
|
1000
|
+
}, {
|
|
1001
|
+
merge: mergeAnnotations,
|
|
1002
|
+
prop: 'annotations',
|
|
1003
|
+
toMergeProp: 'annotationsToBeMerged'
|
|
962
1004
|
}, {
|
|
963
1005
|
merge: mergeInteractions,
|
|
964
1006
|
prop: 'interactionConfig',
|
|
@@ -987,4 +1029,4 @@ var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
|
|
|
987
1029
|
prop: 'editor',
|
|
988
1030
|
combineConfigs: combineEditorConfigs
|
|
989
1031
|
}];
|
|
990
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2VmZmVjdHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX3NjaGVtYXMiLCJfdGFibGUiLCJfbGF5ZXJVdGlscyIsIl9leGNsdWRlZCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3RvUHJvcGVydHlLZXkiLCJpIiwiX3RvUHJpbWl0aXZlIiwiX3R5cGVvZiIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIm1lcmdlRmlsdGVycyIsInN0YXRlIiwiZmlsdGVyc1RvTWVyZ2UiLCJmcm9tQ29uZmlnIiwicHJlc2VydmVGaWx0ZXJPcmRlciIsIm1hcCIsImwiLCJpZCIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwidmFsaWRhdGVkIiwiZmFpbGVkIiwidXBkYXRlZERhdGFzZXRzIiwidXBkYXRlZEZpbHRlcnMiLCJpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyIiwiZmlsdGVycyIsInJlc2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWxzIiwiZGF0YXNldHNUb0ZpbHRlciIsInVuaXEiLCJmbGF0dGVuRGVlcCIsImRhdGFJZCIsImZpbHRlcmVkIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsImxheWVycyIsImRhdGFzZXRzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJyZXBsYWNlRmlsdGVyRGF0YXNldElkcyIsInNhdmVkRmlsdGVyIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlZCIsImluY2x1ZGVzIiwiX2ZpbHRlciRwbG90VHlwZSIsIm5ld0RhdGFJZCIsImQiLCJwbG90VHlwZSIsImNvbG9yc0J5RGF0YUlkIiwiX2ZpbHRlciRwbG90VHlwZTIiLCJfcmVmIiwiY29sb3IiLCJyZXN0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24iLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJDVVJSRU5UX1ZFUlNJT04iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsInVuZGVmaW5lZCIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJpdGVtIiwiZXhwZWN0ZWRJZHgiLCJpbmRleE9mIiwiaW5zZXJ0QXQiLCJwcmVjZWVkSWR4IiwiX2xvb3AiLCJwcmVjZWVkSXRlbUlkIiwiZmluZEluZGV4IiwiYXJyYXlJbnNlcnQiLCJlcnIiLCJjcmVhdGVMYXllckZyb21Db25maWciLCJwYXJzZWRMYXllckNvbmZpZyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YSIsInZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFsbG93RW1wdHlDb2x1bW4iLCJuZXdMYXllciIsInVwZGF0ZUxheWVyRG9tYWluIiwic2VyaWFsaXplRmlsdGVyIiwibmV3RmlsdGVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRmIiwic2VyaWFsaXplZFZpc1N0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJzZXJpYWxpemVMYXllciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkbCIsInNlcmlhbGl6ZUVmZmVjdCIsIm5ld0VmZmVjdCIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZSIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbjIiLCJzYXZlZFN0YXRlIiwiZ2V0Q29uZmlnVG9TYXZlIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwicHJlc2VydmVMYXllck9yZGVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsIl9pbnNlcnRMYXllckF0UmlnaHRPciIsImluc2VydExheWVyQXRSaWdodE9yZGVyIiwibmV3TGF5ZXJPcmRlciIsIm5ld0xheWVycyIsImxheWVyVG9CZU1lcmdlZCIsImN1cnJlbnRMYXllcnMiLCJsYXllcnNUb0luc2VydCIsImN1cnJlbnRPcmRlciIsImN1cnJlbnRMYXllclF1ZXVlIiwiZmluZEJ5SWQiLCJsYXllciIsIkJvb2xlYW4iLCJuZXdMYXllck9yZGVyUXVldWUiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsImtleSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VycmVudENvbmZpZyIsIl9yZWYyIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIl9tZXJnZUludGVyYWN0aW9uVG9vbCIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsIl9sb29wMiIsInRvQmVDb21iaW5lZFByb3BzIiwiYyIsInNvbWUiLCJwIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsImdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlIiwicmVkdWNlIiwiYWNjIiwibmV4dEZpZWxkc1RvU2hvdyIsIl9sb29wMyIsIm5leHREYXRhSWRLZXkiLCJuZXh0VG9vbHRpcEZpZWxkcyIsIm5leHRURiIsImZpbmQiLCJfcmVmMyIsIl9hZ2dyZWdhdGUiLCJzaXplIiwiYWdncmVnYXRlIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJtYXhpbXVtIiwiX3VubWVyZ2VkJHRvb2x0aXAiLCJfdW5tZXJnZWQkdG9vbHRpcDIiLCJfc3RhdGUkaW50ZXJhY3Rpb25Ub0IiLCJfdW5tZXJnZWQkdG9vbHRpcDMiLCJyZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvMiIsIm1lcmdlU3BsaXRNYXBzIiwic3BsaXRNYXBzIiwic20iLCJlbnRyaWVzIiwiX3JlZjQiLCJfcmVmNSIsIl9zbGljZWRUb0FycmF5MiIsInB1c2hUbyIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJtZXJnZUVmZmVjdHMiLCJuZXdFZmZlY3RzIiwiZWZmZWN0IiwiY3JlYXRlRWZmZWN0IiwiZGVlcG1lcmdlIiwiYWxsIiwiaXNDb25maWdBY3RpdmUiLCJpc1ZhbGlkVG9TYXZlIiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiTEFZRVJfQkxFTkRJTkdTIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJPVkVSTEFZX0JMRU5ESU5HUyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY2IiwiYWxsQ29sRm91bmQiLCJldmVyeSIsInZhbGlkYXRlQ29sdW1uIiwicnYiLCJ0aHJvd09uRXJyb3IiLCJyZXF1aXJlZENvbHVtbnMiLCJrIiwib3B0aW9uYWwiLCJtaXNzaW5nQ29sdW1ucyIsIkVycm9yIiwiam9pbiIsImNvbmZpZ0NvbHVtbnMiLCJpbnZhbGlkQ29sdW1ucyIsIl9jb2x1bW5zJGsiLCJjb2x1bW4iLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwiX3JlZjciLCJzYXZlZFRleHRMYWJlbCIsIl9yZWY4IiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJ0ZXh0TGFiZWwiLCJmZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY2N1IiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwic2F2ZWRMYXllciIsInZhbHVlcyIsIl9yZWY5Iiwic2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfc2F2ZWRMYXllciRjb25maWciLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJvcHRpb25hbENvbHVtbnMiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwibGFiZWwiLCJpc1Zpc2libGUiLCJoaWRkZW4iLCJoaWdobGlnaHRDb2xvciIsImNvcGllZFZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInZpc0NvbmZpZyIsInNoYWxsb3dDb3B5IiwidmFsaWRhdGVWaXNDb25maWciLCJtZXJnZUVkaXRvciIsInNhdmVkRWRpdG9yIiwiX3NhdmVkRWRpdG9yJHZpc2libGUiLCJlZGl0b3IiLCJmZWF0dXJlcyIsInZpc2libGUiLCJjb21iaW5lRWRpdG9yQ29uZmlncyIsIm5leHRDb25maWciLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsIm5ld0RhdGFFbnRyaWVzIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJuZXdEYXRhc2V0SWRzIiwiX3N0YXRlJHByZXNlcnZlRGF0YXNlIiwiYXJyIiwiX3JlZjEzIiwidGFsbHlzIiwiTWFwIiwibm90TnVsbG9yVW5kZWZpbmVkIiwiaGFzIiwic2V0IiwiZ2V0IiwiVklTX1NUQVRFX01FUkdFUlMiLCJleHBvcnRzIiwibWVyZ2UiLCJwcm9wIiwidG9NZXJnZVByb3AiLCJwcmVzZXJ2ZU9yZGVyIiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJzYXZlVW5tZXJnZWQiLCJjb21iaW5lQ29uZmlncyJdLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtbWVyZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC91bmlxJztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC9waWNrJztcbmltcG9ydCBmbGF0dGVuRGVlcCBmcm9tICdsb2Rhc2gvZmxhdHRlbkRlZXAnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtcbiAgYXJyYXlJbnNlcnQsXG4gIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMsXG4gIGZpbmRCeUlkLFxuICBhZ2dyZWdhdGVcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVMsIExBWUVSX0JMRU5ESU5HUywgT1ZFUkxBWV9CTEVORElOR1N9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCBWaXNTdGF0ZSwgVmlzU3RhdGVNZXJnZXJzLCBLZXBsZXJHTFNjaGVtYUNsYXNzfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBQYXJzZWRMYXllcixcbiAgUGFyc2VkVmlzU3RhdGUsXG4gIFNhdmVkSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBJbmZvLFxuICBTYXZlZEVkaXRvcixcbiAgUGFyc2VkQ29uZmlnLFxuICBGaWx0ZXIsXG4gIEVmZmVjdCBhcyBFZmZlY3RUeXBlLFxuICBQYXJzZWRFZmZlY3QsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW4sXG4gIFBhcnNlZEZpbHRlcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgU2F2ZWRBbmltYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlLCBEYXRhc2V0cywgYXNzaWduR3B1Q2hhbm5lbHMsIHJlc2V0RmlsdGVyR3B1TW9kZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7Z2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgbGV0IHBsb3RUeXBlO1xuICAgICAgLy8gVE9ETzogbW9yZSBnZW5lcmljIGFwcHJvYWNoIHRvIHNhdmUgcGxvdFR5cGUuY29sb3JzQnlEYXRhSWRcbiAgICAgIGlmIChmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkPy5bZGF0YUlkXSkge1xuICAgICAgICAvLyByZXBsYWNlIGNvbG9yQnlEYXRhSWQgaW4gZmlsdGVyLnBsb3RUeXBlXG4gICAgICAgIGNvbnN0IHtbZGF0YUlkXTogY29sb3IsIC4uLnJlc3R9ID0gZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZCB8fCB7fTtcbiAgICAgICAgcGxvdFR5cGUgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgICAgICAgIGNvbG9yc0J5RGF0YUlkOiB7XG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgW2RhdGFJZFRvVXNlXTogY29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXBsYWNlZC5wdXNoKHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZCxcbiAgICAgICAgLi4uKHBsb3RUeXBlID8ge3Bsb3RUeXBlfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gZXhwb3J0ZWQgbGF5ZXIgY29uZmlndXJhdGlvbiBjb250YWlucyB2aXN1YWxDaGFubmVscyBwcm9wZXJ0eVxuICByZXR1cm4gbGF5ZXJDb25maWc/LnZpc3VhbENoYW5uZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMYXllckNvbmZpZyhcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzLFxuICBsYXllckNvbmZpZzogYW55XG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIC8vIGFzc3VtZSB0aGUgbGF5ZXIgY29uZmlnIGlzIGN1cnJlbnQgdmVyc2lvblxuICBjb25zdCBzYXZlZENvbmZpZyA9IHtcbiAgICB2ZXJzaW9uOiBDVVJSRU5UX1ZFUlNJT04sXG4gICAgY29uZmlnOiB7XG4gICAgICB2aXNTdGF0ZToge2xheWVyczogW2xheWVyQ29uZmlnXSwgbGF5ZXJPcmRlcjogW2xheWVyQ29uZmlnLmlkXX1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkQ29uZmlnKT8udmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICBjdXJyZW50SXRlbXM6IEZpbHRlcltdLFxuICBpdGVtczogRmlsdGVyW10sXG4gIHByZXNlcnZlZE9yZGVyOiBhbnlbXSA9IFtdLFxuICBkZWZhdWx0U3RhcnQ/OiBib29sZWFuXG4pIHtcbiAgbGV0IG5ld0l0ZW1zID0gWy4uLmN1cnJlbnRJdGVtc107XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRJZHggPSBwcmVzZXJ2ZWRPcmRlci5pbmRleE9mKGl0ZW0uaWQpO1xuICAgIC8vIGluc2VydEF0IHRoZSBlbmQgYnkgZGVmYXVsdFxuICAgIGxldCBpbnNlcnRBdCA9IGRlZmF1bHRTdGFydCA/IDAgOiBuZXdJdGVtcy5sZW5ndGg7XG4gICAgaWYgKGV4cGVjdGVkSWR4ID4gMCkge1xuICAgICAgLy8gbG9vayBmb3IgbGF5ZXIgdG8gaW5zZXJ0IGFmdGVyXG4gICAgICBsZXQgaSA9IGV4cGVjdGVkSWR4ICsgMTtcbiAgICAgIGxldCBwcmVjZWVkSWR4ID0gLTE7XG4gICAgICB3aGlsZSAoaS0tID4gMCAmJiBwcmVjZWVkSWR4IDwgMCkge1xuICAgICAgICAvLyBrZWVwIGxvb2tpbmcgZm9yIHByZWNlZWQgbGF5ZXIgdGhhdCBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgICBjb25zdCBwcmVjZWVkSXRlbUlkID0gcHJlc2VydmVkT3JkZXJbaSAtIDFdO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbmV3SXRlbXMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gcHJlY2VlZEl0ZW1JZCk7XG4gICAgICB9XG4gICAgICBpZiAocHJlY2VlZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIGlmIGZvdW5kXG4gICAgICAgIGluc2VydEF0ID0gcHJlY2VlZElkeCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld0l0ZW1zID0gYXJyYXlJbnNlcnQobmV3SXRlbXMsIGluc2VydEF0LCBpdGVtKTtcbiAgfVxuICByZXR1cm4gbmV3SXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGU6IFZpc1N0YXRlLCBsYXllckNvbmZpZzogYW55KTogTGF5ZXIgfCBudWxsIHtcbiAgLy8gY2hlY2sgaWYgdGhlIGxheWVyIGNvbmZpZyBpcyBwYXJzZWRcbiAgY29uc3QgcGFyc2VkTGF5ZXJDb25maWcgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZylcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBsYXllckNvbmZpZylcbiAgICA6IGxheWVyQ29uZmlnO1xuXG4gIGlmICghcGFyc2VkTGF5ZXJDb25maWcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBmaXJzdCB2YWxpZGF0ZSBjb25maWcgYWdhaW5zdCBkYXRhc2V0XG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIFtwYXJzZWRMYXllckNvbmZpZ10sXG4gICAge2FsbG93RW1wdHlDb2x1bW46IHRydWV9XG4gICk7XG5cbiAgaWYgKGZhaWxlZD8ubGVuZ3RoIHx8ICF2YWxpZGF0ZWQubGVuZ3RoKSB7XG4gICAgLy8gZmFpbGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlZFswXTtcbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBmaWx0ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyKFxuICBuZXdGaWx0ZXI6IEZpbHRlcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRGaWx0ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZSh7ZmlsdGVyczogW25ld0ZpbHRlcl19LCBzY2hlbWEpO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5maWx0ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBsYXllciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVMYXllcihcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2xheWVyczogW25ld0xheWVyXSwgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZWZmZWN0IGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVmZmVjdChcbiAgbmV3RWZmZWN0OiBFZmZlY3RUeXBlLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEVmZmVjdCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtlZmZlY3RzOiBbbmV3RWZmZWN0XSwgZWZmZWN0T3JkZXI6IFtuZXdFZmZlY3QuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZWZmZWN0cz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCB2aXMgc3RhdGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWaXNTdGF0ZShcbiAgdmlzU3RhdGU6IFBhcnRpYWw8VmlzU3RhdGU+LFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZFZpc1N0YXRlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2F2ZWRTdGF0ZSA9IHNjaGVtYS5nZXRDb25maWdUb1NhdmUoe1xuICAgIHZpc1N0YXRlXG4gIH0pO1xuICByZXR1cm4gc2F2ZWRTdGF0ZSA/IHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkU3RhdGUpPy52aXNTdGF0ZSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJzIGZyb20gZGUtc2VyaWFsaXplZCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBnZXRMYXllck9yZGVyRnJvbUxheWVycyhsYXllcnNUb01lcmdlKVxuICAgIDogc3RhdGUucHJlc2VydmVMYXllck9yZGVyO1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGF5ZXJzVG9NZXJnZSkgfHwgIWxheWVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRvbid0IG1lcmdlIGxheWVyIGlmIGRhdGFzZXQgaXMgYmVpbmcgbWVyZ2VkXG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJzZWRMYXllcltdID0gW107XG4gIGNvbnN0IHRvTWVyZ2U6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgbGF5ZXJzVG9NZXJnZS5mb3JFYWNoKChsOiBQYXJzZWRMYXllcikgPT4ge1xuICAgIGlmIChsPy5jb25maWc/LmRhdGFJZCAmJiBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tsLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICB1bm1lcmdlZC5wdXNoKGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b01lcmdlLnB1c2gobCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7dmFsaWRhdGVkOiBtZXJnZWRMYXllciwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgdG9NZXJnZVxuICApO1xuICB1bm1lcmdlZC5wdXNoKC4uLmZhaWxlZCk7XG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlcixcbiAgICBsYXllclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5sYXllclRvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gIGN1cnJlbnRMYXllcnMsXG4gIGxheWVyc1RvSW5zZXJ0LFxuICBjdXJyZW50T3JkZXIsXG4gIHByZXNlcnZlZE9yZGVyOiBzdHJpbmdbXSA9IFtdXG4pIHtcbiAgaWYgKCFsYXllcnNUb0luc2VydD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtuZXdMYXllcnM6IGN1cnJlbnRMYXllcnMsIG5ld0xheWVyT3JkZXI6IGN1cnJlbnRPcmRlcn07XG4gIH1cbiAgLy8gcGVyc2VydmVkT3JkZXIgWydhJywgJ2InLCAnYyddO1xuICAvLyBsYXllck9yZGVyIFsnYScsICdiJywgJ2MnXVxuICBjb25zdCBjdXJyZW50TGF5ZXJRdWV1ZSA9IGN1cnJlbnRPcmRlclxuICAgIC5tYXAoaWQgPT4gZmluZEJ5SWQoaWQpKGN1cnJlbnRMYXllcnMpKVxuICAgIC5maWx0ZXIobGF5ZXIgPT4gQm9vbGVhbihsYXllcikpO1xuICBjb25zdCBuZXdMYXllcnMgPSBjdXJyZW50TGF5ZXJzLmNvbmNhdChsYXllcnNUb0luc2VydCk7XG4gIGNvbnN0IG5ld0xheWVyT3JkZXJRdWV1ZSA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgY3VycmVudExheWVyUXVldWUsXG4gICAgbGF5ZXJzVG9JbnNlcnQsXG4gICAgcHJlc2VydmVkT3JkZXIsXG4gICAgdHJ1ZVxuICApO1xuXG4gIC8vIHJlY29uc3RydWN0IGxheWVyT3JkZXIgYWZ0ZXIgaW5zZXJ0XG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBnZXRMYXllck9yZGVyRnJvbUxheWVycyhuZXdMYXllck9yZGVyUXVldWUpO1xuXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcixcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+IHwgdW5kZWZpbmVkXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkOiBOZXN0ZWRQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG5cbiAgaWYgKGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICAgIChPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpIGFzIEFycmF5PGtleW9mIFNhdmVkSW50ZXJhY3Rpb25Db25maWc+KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID1cbiAgICAgICAga2V5ID09PSAndG9vbHRpcCcgfHwga2V5ID09PSAnYnJ1c2gnID8gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWcgOiBudWxsO1xuXG4gICAgICBjb25zdCB7ZW5hYmxlZCwgLi4uY29uZmlnU2F2ZWR9ID0gaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkW2tleV0gfHwge307XG5cbiAgICAgIGxldCBjb25maWdUb01lcmdlID0gY29uZmlnU2F2ZWQ7XG5cbiAgICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfSA9IG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbmZpZ1NhdmVkIGFzIFNhdmVkSW50ZXJhY3Rpb25Db25maWdbJ3Rvb2x0aXAnXVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIG1lcmdlIG5ldyBkYXRhc2V0IHRvb2x0aXBzIHdpdGggb3JpZ2luYWwgZGF0YXNldCB0b29sdGlwc1xuICAgICAgICBjb25maWdUb01lcmdlID0ge1xuICAgICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgICAgLi4uKGN1cnJlbnRDb25maWcgYXMgVG9vbHRpcEluZm9bJ2NvbmZpZyddKS5maWVsZHNUb1Nob3csXG4gICAgICAgICAgICAuLi5tZXJnZWRUb29sdGlwXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh1bm1lcmdlZFRvb2x0aXApLmxlbmd0aCkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICB1bm1lcmdlZC50b29sdGlwID0ge2ZpZWxkc1RvU2hvdzogdW5tZXJnZWRUb29sdGlwLCBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtZXJnZWRba2V5XSA9IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSxcbiAgICAgICAgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKSxcbiAgICAgICAgLi4uKGN1cnJlbnRDb25maWdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZmlnOiBwaWNrKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAuLi5jb25maWdUb01lcmdlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgLi4ubWVyZ2VkXG4gICAgfSxcbiAgICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbihzdGF0ZSwgdW5tZXJnZWQpXG4gIH07XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1tdKTogU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyB7XG4gIGNvbnN0IGNvbWJpbmVkID0gey4uLmNvbmZpZ3NbMF19O1xuICAvLyBoYW5kbGUgZWFjaCBwcm9wZXJ0eSBrZXkgb2YgYW4gYEludGVyYWN0aW9uQ29uZmlnYCwgZS5nLiB0b29sdGlwLCBnZW9jb2RlciwgYnJ1c2gsIGNvb3JkaW5hdGVcbiAgLy8gYnkgY29tYmluaW5nIHZhbHVlcyBmb3IgZWFjaCBhbW9uZyBhbGwgcGFzc2VkIGluIGNvbmZpZ3NcblxuICBmb3IgKGNvbnN0IGtleSBpbiBjb21iaW5lZCkge1xuICAgIGNvbnN0IHRvQmVDb21iaW5lZFByb3BzID0gY29uZmlncy5tYXAoYyA9PiBjW2tleV0pO1xuXG4gICAgLy8gYWxsIG9mIHRoZXNlIGhhdmUgYW4gZW5hYmxlZCBib29sZWFuXG4gICAgY29tYmluZWRba2V5XSA9IHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGVuYWJsZWQgdmFsdWVzIHRydWU/XG4gICAgICBlbmFibGVkOiB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uZW5hYmxlZClcbiAgICB9O1xuXG4gICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBjb21wYXJlTW9kZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZU1vZGUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uY29tcGFyZU1vZGUpO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGNvbXBhcmUgdHlwZSBtb2RlLCBpdCB3aWxsIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZVxuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlVHlwZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICB0b0JlQ29tYmluZWRQcm9wcy5tYXAocCA9PiBwLmNvbXBhcmVUeXBlKVxuICAgICAgKTtcblxuICAgICAgLy8gY29tYmluZSBmaWVsZHNUb1Nob3cgYW1vbmcgYWxsIGRhdGFzZXQgaWRzXG4gICAgICBjb21iaW5lZFtrZXldLmZpZWxkc1RvU2hvdyA9IHRvQmVDb21iaW5lZFByb3BzXG4gICAgICAgIC5tYXAocCA9PiBwLmZpZWxkc1RvU2hvdylcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBuZXh0RmllbGRzVG9TaG93KSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBuZXh0RGF0YUlkS2V5IGluIG5leHRGaWVsZHNUb1Nob3cpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUb29sdGlwRmllbGRzID0gbmV4dEZpZWxkc1RvU2hvd1tuZXh0RGF0YUlkS2V5XTtcbiAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRhc2V0IGlkIGlzIG5vdCBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyB0aGVuIGFkZCBpdCB3aXRoIGl0cyB0b29sdGlwIGZpZWxkc1xuICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0gPSBuZXh0VG9vbHRpcEZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGUgZGF0YXNldCBpZCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHNvIG9ubHkgYWRkIHRoZSBuZXh0IHRvb2x0aXAgZmllbGRzIGZvciB0aGlzIGRhdGFzZXQncyBhcnJheSBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBwcmVzZW50LFxuICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgdG9vbHRpcEZpZWxkLm5hbWUgcHJvcGVydHkgZm9yIHVuaXF1ZW5lc3NcbiAgICAgICAgICAgICAgbmV4dFRvb2x0aXBGaWVsZHMuZm9yRWFjaChuZXh0VEYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldLmZpbmQoKHtuYW1lfSkgPT4gbmV4dFRGLm5hbWUgPT09IG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0ucHVzaChuZXh0VEYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYnJ1c2gnKSB7XG4gICAgICAvLyBrZWVwIHRoZSBiaWdnZXN0IGJydXNoIHNpemVcbiAgICAgIGNvbWJpbmVkW2tleV0uc2l6ZSA9XG4gICAgICAgIGFnZ3JlZ2F0ZSh0b0JlQ29tYmluZWRQcm9wcywgQUdHUkVHQVRJT05fVFlQRVMubWF4aW11bSwgcCA9PiBwLnNpemUpID8/IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkO1xufVxuXG5mdW5jdGlvbiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb248UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+XG4pIHtcbiAgaWYgKCF1bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93KSB7XG4gICAgcmV0dXJuIHN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZC50b29sdGlwLFxuICAgICAgLi4uKHR5cGVvZiB1bm1lcmdlZD8udG9vbHRpcD8uZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8ge2VuYWJsZWQ6IHVubWVyZ2VkLnRvb2x0aXAuZW5hYmxlZH1cbiAgICAgICAgOiB7fSksXG4gICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3csXG4gICAgICAgIC4uLnVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3dcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMoaW50ZXJhY3Rpb25Db25maWcsIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLFxuICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICBbZGF0YUlkVG9SZXBsYWNlXTogaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE1lcmdlIHNwbGl0TWFwcyBjb25maWcgd2l0aCBjdXJyZW50IHZpc1N0ZXRlLlxuICogMS4gaWYgY3VycmVudCBtYXAgaXMgc3BsaXQsIGJ1dCBzcGxpdE1hcCBET0VTTk9UIGNvbnRhaW4gbWFwc1xuICogICAgOiBkb24ndCBtZXJnZSBhbnl0aGluZ1xuICogMi4gaWYgY3VycmVudCBtYXAgaXMgTk9UIHNwbGl0LCBidXQgc3BsaXRNYXBzIGNvbnRhaW4gbWFwc1xuICogICAgOiBhZGQgdG8gc3BsaXRNYXBzLCBhbmQgYWRkIGN1cnJlbnQgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTcGxpdE1hcHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNwbGl0TWFwczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnc3BsaXRNYXBzJ10gPSBbXVxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZCA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc20ubGF5ZXJzKTtcbiAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICBlbnRyaWVzLmZvckVhY2goKFtpZCwgdmFsdWVdKSA9PiB7XG4gICAgICAgIC8vIGNoZWNrIGlmIGxheWVyIGV4aXN0c1xuICAgICAgICBjb25zdCBwdXNoVG8gPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGlkKSA/IG1lcmdlZCA6IHVubWVyZ2VkO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBtYXAgcGFuZWwgaWYgY3VycmVudCBtYXAgaXMgbm90IHNwbGl0XG4gICAgICAgIHB1c2hUb1tpXSA9IHB1c2hUb1tpXSB8fCB7XG4gICAgICAgICAgLy8ga2VlcCBpZFxuICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgIGxheWVyczogcHVzaFRvID09PSBtZXJnZWQgPyBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAoc3RhdGUubGF5ZXJzKSA6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHB1c2hUb1tpXS5sYXllcnMgPSB7XG4gICAgICAgICAgLi4ucHVzaFRvW2ldLmxheWVycyxcbiAgICAgICAgICBbaWRdOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIGFyZSBtZXJnaW5nIGlmIHRoZXJlIGFyZSBubyBsYXllcnMgaW4gYm90aCBzcGxpdCBtYXBcbiAgICAgIG1lcmdlZC5wdXNoKHNtKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBtZXJnZWQsXG4gICAgc3BsaXRNYXBzVG9CZU1lcmdlZDogWy4uLnN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGVmZmVjdHMgd2l0aCBzYXZlZCBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWZmZWN0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZWZmZWN0czogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZWZmZWN0cyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbXG4gICAgLi4uc3RhdGUuZWZmZWN0cyxcbiAgICAuLi4oZWZmZWN0cyB8fCBbXSlcbiAgICAgIC5tYXAoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIGZyb21Db25maWdcbiAgICAgICAgICA/IGNyZWF0ZUVmZmVjdChcbiAgICAgICAgICAgICAgZGVlcG1lcmdlLmFsbChbXG4gICAgICAgICAgICAgICAgZWZmZWN0LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC8vIGNvbGxhcHNlIGFsbCBwYW5lbHMgd2hlbiBsb2FkaW5nIGVmZmVjdHNcbiAgICAgICAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IChlZmZlY3QgYXMgRWZmZWN0VHlwZSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihlZmZlY3QgJiYgZWZmZWN0LmlzVmFsaWRUb1NhdmUoKSk7XG4gICAgICB9KVxuICBdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXI6IG5ld0VmZmVjdHMubWFwKGVmZmVjdCA9PiBlZmZlY3QuaWQpXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgW2xheWVyVGV4dExhYmVsXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgY29uc3Qgc2F2ZWRUZXh0TGFiZWxzID0gQXJyYXkuaXNBcnJheShzYXZlZFRleHRMYWJlbCkgPyBzYXZlZFRleHRMYWJlbCA6IFtzYXZlZFRleHRMYWJlbF07XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRleHRMYWJlbC5maWVsZFxuICAgICAgPyBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKHRleHRMYWJlbC5maWVsZCkuZXZlcnkoa2V5ID0+IHRleHRMYWJlbC5maWVsZFtrZXldID09PSBmZFtrZXldKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0ZXh0IGxhYmVsIGZpZWxkOiAke0pTT04uc3RyaW5naWZ5KHRleHRMYWJlbC5maWVsZCl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyVGV4dExhYmVsKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSB8fCBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdmlzdWFsIGNoYW5uZWxzIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pOiBudWxsIHwgTGF5ZXIge1xuICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQsIHNjYWxlLCBrZXl9KSA9PiB7XG4gICAgbGV0IGZvdW5kRmllbGQ7XG4gICAgaWYgKHNhdmVkTGF5ZXIuY29uZmlnKSB7XG4gICAgICBpZiAoc2F2ZWRMYXllci5jb25maWdbZmllbGRdKSB7XG4gICAgICAgIGZvdW5kRmllbGQgPSBmaWVsZHMuZmluZChcbiAgICAgICAgICBmZCA9PiBzYXZlZExheWVyLmNvbmZpZyAmJiBmZC5uYW1lID09PSBzYXZlZExheWVyLmNvbmZpZ1tmaWVsZF0ubmFtZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZENoYW5uZWwgPSB7XG4gICAgICAgIC4uLihmb3VuZEZpZWxkID8ge1tmaWVsZF06IGZvdW5kRmllbGR9IDoge30pLFxuICAgICAgICAuLi4oc2F2ZWRMYXllci5jb25maWdbc2NhbGVdID8ge1tzY2FsZV06IHNhdmVkTGF5ZXIuY29uZmlnW3NjYWxlXX0gOiB7fSlcbiAgICAgIH07XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZm91bmRDaGFubmVsKS5sZW5ndGgpIHtcbiAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICAgIH1cblxuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gc2F2ZWRMYXllci5jb25maWc/LltmaWVsZF0/Lm5hbWU7XG4gICAgICAgIGlmIChmaWVsZE5hbWUgJiYgZmllbGROYW1lICE9PSBuZXdMYXllci5jb25maWdbZmllbGRdPy5uYW1lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB2aXN1YWwgY2hhbm5lbCBmaWVsZDogJHtmaWVsZH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxudHlwZSBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge1xuICBhbGxvd0VtcHR5Q29sdW1uPzogYm9vbGVhbjtcbiAgdGhyb3dPbkVycm9yPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIGxheWVyczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgb3B0aW9ucz86IFZhbGlkYXRlTGF5ZXJPcHRpb25cbikge1xuICBjb25zdCB2YWxpZGF0ZWQ6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdO1xuXG4gIGxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBsZXQgdmFsaWRhdGVMYXllcjogTGF5ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChsYXllcj8uY29uZmlnPy5kYXRhSWQpIHtcbiAgICAgIGlmIChkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSkge1xuICAgICAgICAvLyBkYXRhc2V0cyBhcmUgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgdmFsaWRhdGVMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAgICAgICAgICBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSxcbiAgICAgICAgICBsYXllcixcbiAgICAgICAgICBsYXllckNsYXNzZXMsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZUxheWVyKSB7XG4gICAgICB2YWxpZGF0ZWQucHVzaCh2YWxpZGF0ZUxheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGF0YXNldHMgbm90IHlldCBsb2FkZWRcbiAgICAgIGZhaWxlZC5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7dmFsaWRhdGVkLCBmYWlsZWR9O1xufVxuXG4vKipcbiAqIEdldCByZXF1aXJlZCBjb2x1bW5zIGZvciB2YWxpZGF0aW9uIGJhc2VkIG9uIGNvbHVtbiBtb2RlXG4gKi9cbmZ1bmN0aW9uIF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKSB7XG4gIC8vIGZpbmQgY29sdW1uIGZpZWxkSWR4XG4gIGxldCBjb2x1bW5Db25maWcgPSBuZXdMYXllci5nZXRMYXllckNvbHVtbnMoKTtcbiAgLy8gaWYgY29sdW1uTW9kZSBpcyBkZWZpbmVkLCBmaW5kIGNvbHVtbiBtb2RlIGNvbmZpZ1xuICBjb25zdCBjb2xNb2RlQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLmNvbHVtbk1vZGVcbiAgICA/IChuZXdMYXllci5zdXBwb3J0ZWRDb2x1bW5Nb2RlcyB8fCBbXSkuZmluZChcbiAgICAgICAgY29sTW9kZSA9PiBjb2xNb2RlLmtleSA9PT0gbmV3TGF5ZXIuY29uZmlnLmNvbHVtbk1vZGVcbiAgICAgIClcbiAgICA6IG51bGw7XG5cbiAgaWYgKGNvbE1vZGVDb25maWcpIHtcbiAgICAvLyBvbmx5IHZhbGlkYXRlIGNvbHVtbnMgaW4gY29sdW1uIG1vZGVcbiAgICBjb2x1bW5Db25maWcgPSBbXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uKGNvbE1vZGVDb25maWcub3B0aW9uYWxDb2x1bW5zIHx8IFtdKVxuICAgIF0ucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtbkNvbmZpZ1trZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjb2x1bW5Db25maWc7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgb3B0aW9uczogVmFsaWRhdGVMYXllck9wdGlvbiA9IHt9XG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCB7ZmllbGRzLCBpZDogZGF0YUlkfSA9IGRhdGFzZXQ7XG4gIGNvbnN0IHt0eXBlfSA9IHNhdmVkTGF5ZXI7XG4gIGNvbnN0IHt0aHJvd09uRXJyb3J9ID0gb3B0aW9ucztcbiAgLy8gbGF5ZXIgZG9lc250IGhhdmUgYSB2YWxpZCB0eXBlXG4gIGlmICghdHlwZSB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyQ2xhc3NlcywgdHlwZSkgfHwgIXNhdmVkTGF5ZXIuY29uZmlnKSB7XG4gICAgaWYgKHRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0eXBlIFwiJHt0eXBlfVwiIG9yIGNvbmZpZyBpcyBtaXNzaW5nYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1t0eXBlXSh7XG4gICAgaWQ6IHNhdmVkTGF5ZXIuaWQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsOiBzYXZlZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBjb2xvcjogc2F2ZWRMYXllci5jb25maWcuY29sb3IsXG4gICAgaXNWaXNpYmxlOiBzYXZlZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaGlkZGVuOiBzYXZlZExheWVyLmNvbmZpZy5oaWRkZW4sXG4gICAgY29sdW1uTW9kZTogc2F2ZWRMYXllci5jb25maWcuY29sdW1uTW9kZSxcbiAgICBoaWdobGlnaHRDb2xvcjogc2F2ZWRMYXllci5jb25maWcuaGlnaGxpZ2h0Q29sb3JcbiAgfSk7XG5cbiAgY29uc3QgY29sdW1uQ29uZmlnID0gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpO1xuXG4gIGlmIChPYmplY3Qua2V5cyhjb2x1bW5Db25maWcpKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gICAgICBmaWVsZHMsXG4gICAgICBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgY29sdW1uQ29uZmlnLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgaWYgKGNvbHVtbnMpIHtcbiAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgY29sdW1uczoge1xuICAgICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgICAgIC4uLmNvbHVtbnNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5hbGxvd0VtcHR5Q29sdW1uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0ZXh0TGFiZWwgPVxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCAmJiBuZXdMYXllci5jb25maWcudGV4dExhYmVsXG4gICAgICA/IHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gICAgICAgICAgZmllbGRzLFxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKVxuICAgICAgOiBuZXdMYXllci5jb25maWcudGV4dExhYmVsO1xuXG4gIC8vIGNvcHkgdmlzQ29uZmlnIG92ZXIgdG8gZW1wdHlMYXllciB0byBtYWtlIHN1cmUgaXQgaGFzIGFsbCB0aGUgcHJvcHNcbiAgY29uc3QgY29waWVkVmlzQ29uZmlnID0gbmV3TGF5ZXIuY29weUxheWVyQ29uZmlnKFxuICAgIG5ld0xheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnIHx8IHt9LFxuICAgIHtcbiAgICAgIHNoYWxsb3dDb3B5OiBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddXG4gICAgfVxuICApO1xuXG4gIC8vIGNhbGwgbGF5ZXIgbWV0aG9kcyB0byB2YWxpZGF0ZSB2aXNDb25maWcgd2hlbiBzd2l0Y2hpbmcgZGF0YXNldFxuICBjb25zdCB2aXNDb25maWcgPSBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZ1xuICAgID8gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWcoZGF0YXNldCwgY29waWVkVmlzQ29uZmlnKVxuICAgIDogY29waWVkVmlzQ29uZmlnO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICB2aXNDb25maWcsXG4gICAgdGV4dExhYmVsXG4gIH0pO1xuXG4gIC8vIHZpc3VhbCBjaGFubmVsIGZpZWxkIGlzIHNhdmVkIHRvIGJlIHtuYW1lLCB0eXBlfVxuICAvLyBmaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkIGJ5IG1hdGNoaW5nIGJvdGggbmFtZSBhbmQgdHlwZVxuICAvLyByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICBuZXdMYXllciA9IHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhmaWVsZHMsIG5ld0xheWVyLCBzYXZlZExheWVyLCBvcHRpb25zKTtcblxuICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgaWYgKCFuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmU6ICR7bmV3TGF5ZXIuaWR9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZGl0b3I8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgc2F2ZWRFZGl0b3I6IFNhdmVkRWRpdG9yKSB7XG4gIGlmICghc2F2ZWRFZGl0b3IpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCAuLi4oc2F2ZWRFZGl0b3IuZmVhdHVyZXMgfHwgW10pXSxcbiAgICAgIC8vIGlmIHNhdmVkRWRpdG9yLnZpc2libGUgaXMgdW5kZWZpbmVkIGtlZXAgc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICAgIHZpc2libGU6IHNhdmVkRWRpdG9yLnZpc2libGUgPz8gc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFZGl0b3JDb25maWdzKGNvbmZpZ3M6IFNhdmVkRWRpdG9yW10pOiBTYXZlZEVkaXRvciB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZShcbiAgICAoYWNjLCBuZXh0Q29uZmlnKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIGZlYXR1cmVzOiBbLi4uYWNjLmZlYXR1cmVzLCAuLi4obmV4dENvbmZpZy5mZWF0dXJlcyB8fCBbXSldXG4gICAgICB9O1xuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3RhcnQgd2l0aDpcbiAgICAgIC8vIC0gZW1wdHkgYXJyYXkgZm9yIGZlYXR1cmVzIGFjY3VtdWxhdGlvblxuICAgICAgLy8gLSBhbmQgYXJlIGFueSBvZiB0aGUgY29uZmlncycgdmlzaWJsZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHZpc2libGU6IGNvbmZpZ3Muc29tZShjID0+IGM/LnZpc2libGUpXG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlOiBWaXNTdGF0ZSwgbmV3RGF0YUVudHJpZXM6IERhdGFzZXRzKTogRGF0YXNldHMge1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgLi4ubmV3RGF0YUVudHJpZXNcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcikpIHtcbiAgICAvLyBwcmVzZXJ2ZURhdGFzZXRPcmRlciAgbWlnaHQgbm90IGluY2x1ZGUgdGhlICBuZXcgZGF0YXNldHNcbiAgICBjb25zdCBuZXdEYXRhc2V0SWRzID0gT2JqZWN0LmtleXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgICBpZCA9PiAhc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXI/LmluY2x1ZGVzKGlkKVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciwgLi4ubmV3RGF0YXNldElkc10ucmVkdWNlKFxuICAgICAgKGFjY3UsIGRhdGFJZCkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4uKG1lcmdlZFtkYXRhSWRdID8ge1tkYXRhSWRdOiBtZXJnZWRbZGF0YUlkXX0gOiB7fSlcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyoqXG4gKiBTaW1saWFyIHB1cnBvc2UgdG8gYWdncmVnYXRpb24gdXRpbHMgYGdldE1vZGVgIGZ1bmN0aW9uLFxuICogYnV0IHJldHVybnMgdGhlIG1vZGUgaW4gdGhlIHNhbWUgdmFsdWUgdHlwZSB3aXRob3V0IGNvZXJjaW5nIHRvIGEgc3RyaW5nLlxuICogSXQgaWdub3JlcyBgdW5kZWZpbmVkYCBvciBgbnVsbGAgdmFsdWVzLCBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm8gbW9kZSBjb3VsZCBiZSBjYWxjdWxhdGVkLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZTxUPihhcnI6IFRbXSk6IFQgfCBudWxsIHtcbiAgY29uc3QgdGFsbHlzID0gbmV3IE1hcCgpO1xuICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIGlmICghdGFsbHlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCB0YWxseXMuZ2V0KHZhbHVlKSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJldHVybiB0aGUgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdCB0b3RhbCBvY2N1cnJlbmNlIGNvdW50XG4gIGlmICh0YWxseXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBbLi4udGFsbHlzLmVudHJpZXMoKV0/LnJlZHVjZSgoYWNjLCBuZXh0KSA9PiAobmV4dFsxXSA+IGFjY1sxXSA/IG5leHQgOiBhY2MpKVswXTtcbn1cblxuZXhwb3J0IGNvbnN0IFZJU19TVEFURV9NRVJHRVJTOiBWaXNTdGF0ZU1lcmdlcnM8YW55PiA9IFtcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVycyxcbiAgICBwcm9wOiAnbGF5ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2xheWVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlTGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUZpbHRlcnMsXG4gICAgcHJvcDogJ2ZpbHRlcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlRmlsdGVyT3JkZXInLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlRmlsdGVyRGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRWZmZWN0cyxcbiAgICBwcm9wOiAnZWZmZWN0cydcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUludGVyYWN0aW9ucyxcbiAgICBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLFxuICAgIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyxcbiAgICBzYXZlVW5tZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbixcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZUludGVyYWN0aW9uQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZU92ZXJsYXlCbGVuZGluZyxcbiAgICBwcm9wOiAnb3ZlcmxheUJsZW5kaW5nJyxcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVBbmltYXRpb25Db25maWdzfSxcbiAge21lcmdlOiBtZXJnZUVkaXRvciwgcHJvcDogJ2VkaXRvcicsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lRWRpdG9yQ29uZmlnc31cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBVUEsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsUUFBQSxHQUFBUixPQUFBO0FBa0JBLElBQUFTLE1BQUEsR0FBQVQsT0FBQTtBQUVBLElBQUFVLFdBQUEsR0FBQVYsT0FBQTtBQUFzRCxJQUFBVyxTQUFBO0FBQUEsU0FBQUMsMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxFQUFBLFVBQUFSLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxVQUFBQSxDQUFBLEtBQUFlLENBQUEsRUFBQUwsQ0FBQSxnQkFBQU0sU0FBQSxpSkFBQUMsQ0FBQSxFQUFBQyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFSLENBQUEsV0FBQUEsRUFBQSxJQUFBVCxDQUFBLEdBQUFBLENBQUEsQ0FBQWtCLElBQUEsQ0FBQXBCLENBQUEsTUFBQVksQ0FBQSxXQUFBQSxFQUFBLFFBQUFaLENBQUEsR0FBQUUsQ0FBQSxDQUFBbUIsSUFBQSxXQUFBSCxDQUFBLEdBQUFsQixDQUFBLENBQUFhLElBQUEsRUFBQWIsQ0FBQSxLQUFBQyxDQUFBLFdBQUFBLEVBQUFELENBQUEsSUFBQW1CLENBQUEsT0FBQUYsQ0FBQSxHQUFBakIsQ0FBQSxLQUFBZSxDQUFBLFdBQUFBLEVBQUEsVUFBQUcsQ0FBQSxZQUFBaEIsQ0FBQSxjQUFBQSxDQUFBLDhCQUFBaUIsQ0FBQSxRQUFBRixDQUFBO0FBQUEsU0FBQVYsNEJBQUFQLENBQUEsRUFBQWtCLENBQUEsUUFBQWxCLENBQUEsMkJBQUFBLENBQUEsU0FBQXNCLGlCQUFBLENBQUF0QixDQUFBLEVBQUFrQixDQUFBLE9BQUFoQixDQUFBLE1BQUFxQixRQUFBLENBQUFILElBQUEsQ0FBQXBCLENBQUEsRUFBQXdCLEtBQUEsNkJBQUF0QixDQUFBLElBQUFGLENBQUEsQ0FBQXlCLFdBQUEsS0FBQXZCLENBQUEsR0FBQUYsQ0FBQSxDQUFBeUIsV0FBQSxDQUFBQyxJQUFBLGFBQUF4QixDQUFBLGNBQUFBLENBQUEsR0FBQUcsS0FBQSxDQUFBc0IsSUFBQSxDQUFBM0IsQ0FBQSxvQkFBQUUsQ0FBQSwrQ0FBQTBCLElBQUEsQ0FBQTFCLENBQUEsSUFBQW9CLGlCQUFBLENBQUF0QixDQUFBLEVBQUFrQixDQUFBO0FBQUEsU0FBQUksa0JBQUF0QixDQUFBLEVBQUFrQixDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBUSxNQUFBLE1BQUFVLENBQUEsR0FBQWxCLENBQUEsQ0FBQVEsTUFBQSxZQUFBUCxDQUFBLE1BQUFXLENBQUEsR0FBQVAsS0FBQSxDQUFBYSxDQUFBLEdBQUFqQixDQUFBLEdBQUFpQixDQUFBLEVBQUFqQixDQUFBLElBQUFXLENBQUEsQ0FBQVgsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsVUFBQVcsQ0FBQTtBQUFBLFNBQUFpQixlQUFBM0IsQ0FBQSxRQUFBNEIsQ0FBQSxHQUFBQyxZQUFBLENBQUE3QixDQUFBLGdDQUFBOEIsT0FBQSxDQUFBRixDQUFBLElBQUFBLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFDLGFBQUE3QixDQUFBLEVBQUFGLENBQUEsb0JBQUFnQyxPQUFBLENBQUE5QixDQUFBLE1BQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBRCxDQUFBLEdBQUFDLENBQUEsQ0FBQUMsTUFBQSxDQUFBOEIsV0FBQSxrQkFBQWhDLENBQUEsUUFBQTZCLENBQUEsR0FBQTdCLENBQUEsQ0FBQW1CLElBQUEsQ0FBQWxCLENBQUEsRUFBQUYsQ0FBQSxnQ0FBQWdDLE9BQUEsQ0FBQUYsQ0FBQSxVQUFBQSxDQUFBLFlBQUFkLFNBQUEseUVBQUFoQixDQUFBLEdBQUFrQyxNQUFBLEdBQUFDLE1BQUEsRUFBQWpDLENBQUE7QUFBQSxTQUFBa0MsUUFBQW5DLENBQUEsRUFBQUQsQ0FBQSxRQUFBRSxDQUFBLEdBQUFtQyxNQUFBLENBQUFDLElBQUEsQ0FBQXJDLENBQUEsT0FBQW9DLE1BQUEsQ0FBQUUscUJBQUEsUUFBQXRCLENBQUEsR0FBQW9CLE1BQUEsQ0FBQUUscUJBQUEsQ0FBQXRDLENBQUEsR0FBQUQsQ0FBQSxLQUFBaUIsQ0FBQSxHQUFBQSxDQUFBLENBQUF1QixNQUFBLFdBQUF4QyxDQUFBLFdBQUFxQyxNQUFBLENBQUFJLHdCQUFBLENBQUF4QyxDQUFBLEVBQUFELENBQUEsRUFBQTBDLFVBQUEsT0FBQXhDLENBQUEsQ0FBQXlDLElBQUEsQ0FBQUMsS0FBQSxDQUFBMUMsQ0FBQSxFQUFBZSxDQUFBLFlBQUFmLENBQUE7QUFBQSxTQUFBMkMsY0FBQTVDLENBQUEsYUFBQUQsQ0FBQSxNQUFBQSxDQUFBLEdBQUE4QyxTQUFBLENBQUF0QyxNQUFBLEVBQUFSLENBQUEsVUFBQUUsQ0FBQSxXQUFBNEMsU0FBQSxDQUFBOUMsQ0FBQSxJQUFBOEMsU0FBQSxDQUFBOUMsQ0FBQSxRQUFBQSxDQUFBLE9BQUFvQyxPQUFBLENBQUFDLE1BQUEsQ0FBQW5DLENBQUEsT0FBQTZDLE9BQUEsV0FBQS9DLENBQUEsUUFBQWdELGdCQUFBLGFBQUEvQyxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxDQUFBRixDQUFBLFNBQUFxQyxNQUFBLENBQUFZLHlCQUFBLEdBQUFaLE1BQUEsQ0FBQWEsZ0JBQUEsQ0FBQWpELENBQUEsRUFBQW9DLE1BQUEsQ0FBQVkseUJBQUEsQ0FBQS9DLENBQUEsS0FBQWtDLE9BQUEsQ0FBQUMsTUFBQSxDQUFBbkMsQ0FBQSxHQUFBNkMsT0FBQSxXQUFBL0MsQ0FBQSxJQUFBcUMsTUFBQSxDQUFBYyxjQUFBLENBQUFsRCxDQUFBLEVBQUFELENBQUEsRUFBQXFDLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQXZDLENBQUEsRUFBQUYsQ0FBQSxpQkFBQUMsQ0FBQSxJQXhDdEQ7QUFDQTtBQXlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU21ELFlBQVlBLENBQzFCQyxLQUFRLEVBQ1JDLGNBQWdFLEVBQ2hFQyxVQUFvQixFQUNqQjtFQUNILElBQU1DLG1CQUFtQixHQUFHRCxVQUFVLEdBQ2xDRCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRUcsR0FBRyxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLEVBQUU7RUFBQSxFQUFDLEdBQzlCTixLQUFLLENBQUNHLG1CQUFtQjtFQUU3QixJQUFJLENBQUNuRCxLQUFLLENBQUNDLE9BQU8sQ0FBQ2dELGNBQWMsQ0FBQyxJQUFJLENBQUNBLGNBQWMsQ0FBQzlDLE1BQU0sRUFBRTtJQUM1RCxPQUFPNkMsS0FBSztFQUNkO0VBRUEsSUFBQU8scUJBQUEsR0FBNkMsSUFBQUMsb0NBQTZCLEVBQUNSLEtBQUssRUFBRUMsY0FBYyxDQUFDO0lBQTFGUSxTQUFTLEdBQUFGLHFCQUFBLENBQVRFLFNBQVM7SUFBRUMsTUFBTSxHQUFBSCxxQkFBQSxDQUFORyxNQUFNO0lBQUVDLGVBQWUsR0FBQUoscUJBQUEsQ0FBZkksZUFBZTtFQUN6QyxJQUFJQyxjQUFjLEdBQUdDLCtCQUErQixDQUNsRGIsS0FBSyxDQUFDYyxPQUFPLEVBQ2JMLFNBQVMsRUFDVE4sbUJBQ0YsQ0FBQzs7RUFFRDtFQUNBUyxjQUFjLEdBQUcsSUFBQUcseUJBQWtCLEVBQUNILGNBQWMsQ0FBQztFQUNuREEsY0FBYyxHQUFHLElBQUFJLHdCQUFpQixFQUFDSixjQUFjLENBQUM7RUFDbEQ7RUFDQSxJQUFNSyxnQkFBZ0IsR0FBRyxJQUFBQyxnQkFBSSxFQUFDLElBQUFDLHVCQUFXLEVBQUNWLFNBQVMsQ0FBQ0wsR0FBRyxDQUFDLFVBQUExQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDMEQsTUFBTTtFQUFBLEVBQUMsQ0FBQyxDQUFDO0VBRXhFLElBQU1DLFFBQVEsR0FBRyxJQUFBQyw2QkFBc0IsRUFDckNMLGdCQUFnQixFQUNoQk4sZUFBZSxFQUNmQyxjQUFjLEVBQ2RaLEtBQUssQ0FBQ3VCLE1BQ1IsQ0FBQztFQUVELE9BQUEvQixhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztJQUNSYyxPQUFPLEVBQUVGLGNBQWM7SUFDdkJZLFFBQVEsRUFBRUgsUUFBUTtJQUNsQmxCLG1CQUFtQixFQUFuQkEsbUJBQW1CO0lBQ25Cc0IsZ0JBQWdCLEtBQUFDLE1BQUEsS0FBQUMsbUJBQUEsYUFBTTNCLEtBQUssQ0FBQ3lCLGdCQUFnQixPQUFBRSxtQkFBQSxhQUFLakIsTUFBTTtFQUFDO0FBRTVEOztBQUVBO0FBQ08sU0FBU2tCLHVCQUF1QkEsQ0FDckNDLFdBQXFCLEVBQ3JCVCxNQUFjLEVBQ2RVLFdBQW1CLEVBQ25CO0VBQ0EsSUFBTUMsUUFBa0IsR0FBRyxFQUFFO0VBQzdCRixXQUFXLENBQUNuQyxPQUFPLENBQUMsVUFBQVAsTUFBTSxFQUFJO0lBQzVCLElBQUlBLE1BQU0sQ0FBQ2lDLE1BQU0sQ0FBQ1ksUUFBUSxDQUFDWixNQUFNLENBQUMsRUFBRTtNQUFBLElBQUFhLGdCQUFBO01BQ2xDLElBQU1DLFNBQVMsR0FBRy9DLE1BQU0sQ0FBQ2lDLE1BQU0sQ0FBQ2hCLEdBQUcsQ0FBQyxVQUFBK0IsQ0FBQztRQUFBLE9BQUtBLENBQUMsS0FBS2YsTUFBTSxHQUFHVSxXQUFXLEdBQUdLLENBQUM7TUFBQSxDQUFDLENBQUM7TUFDMUUsSUFBSUMsUUFBUTtNQUNaO01BQ0EsS0FBQUgsZ0JBQUEsR0FBSTlDLE1BQU0sQ0FBQ2lELFFBQVEsY0FBQUgsZ0JBQUEsZ0JBQUFBLGdCQUFBLEdBQWZBLGdCQUFBLENBQWlCSSxjQUFjLGNBQUFKLGdCQUFBLGVBQS9CQSxnQkFBQSxDQUFrQ2IsTUFBTSxDQUFDLEVBQUU7UUFBQSxJQUFBa0IsaUJBQUE7UUFDN0M7UUFDQSxJQUFBQyxJQUFBLEdBQW1DLEVBQUFELGlCQUFBLEdBQUFuRCxNQUFNLENBQUNpRCxRQUFRLGNBQUFFLGlCQUFBLHVCQUFmQSxpQkFBQSxDQUFpQkQsY0FBYyxLQUFJLENBQUMsQ0FBQztVQUF2REcsS0FBSyxHQUFBRCxJQUFBLENBQWRuQixNQUFNO1VBQWFxQixJQUFJLE9BQUFDLHlCQUFBLGFBQUFILElBQUEsR0FBdkJuQixNQUFNLEVBQUFoQixHQUFBLENBQUE1QixjQUFBO1FBQ2Q0RCxRQUFRLEdBQUE1QyxhQUFBLENBQUFBLGFBQUEsS0FDSEwsTUFBTSxDQUFDaUQsUUFBUTtVQUNsQkMsY0FBYyxFQUFBN0MsYUFBQSxDQUFBQSxhQUFBLEtBQ1RpRCxJQUFJLFdBQUE5QyxnQkFBQSxpQkFDTm1DLFdBQVcsRUFBR1UsS0FBSztRQUNyQixFQUNGO01BQ0g7TUFDQVQsUUFBUSxDQUFDekMsSUFBSSxDQUFBRSxhQUFBLENBQUFBLGFBQUEsS0FDUkwsTUFBTTtRQUNUaUMsTUFBTSxFQUFFYztNQUFTLEdBQ2JFLFFBQVEsR0FBRztRQUFDQSxRQUFRLEVBQVJBO01BQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUMvQixDQUFDO0lBQ0o7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPTCxRQUFRLENBQUM1RSxNQUFNLEdBQUc0RSxRQUFRLEdBQUcsSUFBSTtBQUMxQztBQUVPLFNBQVNZLG9CQUFvQkEsQ0FBQ0MsV0FBZ0IsRUFBVztFQUM5RDtFQUNBLE9BQU9BLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFQyxjQUFjO0FBQ3BDO0FBRU8sU0FBU0MsZ0JBQWdCQSxDQUM5QkMsTUFBMkIsRUFDM0JILFdBQWdCLEVBQ1M7RUFBQSxJQUFBSSxxQkFBQTtFQUN6QjtFQUNBLElBQU1DLFdBQVcsR0FBRztJQUNsQkMsT0FBTyxFQUFFQyx3QkFBZTtJQUN4QkMsTUFBTSxFQUFFO01BQ05DLFFBQVEsRUFBRTtRQUFDOUIsTUFBTSxFQUFFLENBQUNxQixXQUFXLENBQUM7UUFBRVUsVUFBVSxFQUFFLENBQUNWLFdBQVcsQ0FBQ3RDLEVBQUU7TUFBQztJQUNoRTtFQUNGLENBQUM7RUFFRCxRQUFBMEMscUJBQUEsR0FBT0QsTUFBTSxDQUFDUSxnQkFBZ0IsQ0FBQ04sV0FBVyxDQUFDLGNBQUFELHFCQUFBLGdCQUFBQSxxQkFBQSxHQUFwQ0EscUJBQUEsQ0FBc0NLLFFBQVEsY0FBQUwscUJBQUEsZ0JBQUFBLHFCQUFBLEdBQTlDQSxxQkFBQSxDQUFnRHpCLE1BQU0sY0FBQXlCLHFCQUFBLHVCQUF0REEscUJBQUEsQ0FBeUQsQ0FBQyxDQUFDO0FBQ3BFO0FBRUEsU0FBU25DLCtCQUErQkEsQ0FDdEMyQyxZQUFzQixFQUN0QkMsS0FBZSxFQUdmO0VBQUEsSUFGQUMsY0FBcUIsR0FBQWpFLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxFQUFFO0VBQUEsSUFDMUJtRSxZQUFzQixHQUFBbkUsU0FBQSxDQUFBdEMsTUFBQSxPQUFBc0MsU0FBQSxNQUFBa0UsU0FBQTtFQUV0QixJQUFJRSxRQUFRLE9BQUFsQyxtQkFBQSxhQUFPNkIsWUFBWSxDQUFDO0VBQUMsSUFBQU0sU0FBQSxHQUFBcEgsMEJBQUEsQ0FFZCtHLEtBQUs7SUFBQU0sS0FBQTtFQUFBO0lBQXhCLEtBQUFELFNBQUEsQ0FBQXhHLENBQUEsTUFBQXlHLEtBQUEsR0FBQUQsU0FBQSxDQUFBdkcsQ0FBQSxJQUFBQyxJQUFBLEdBQTBCO01BQUEsSUFBZndHLElBQUksR0FBQUQsS0FBQSxDQUFBdEcsS0FBQTtNQUNiLElBQU13RyxXQUFXLEdBQUdQLGNBQWMsQ0FBQ1EsT0FBTyxDQUFDRixJQUFJLENBQUMxRCxFQUFFLENBQUM7TUFDbkQ7TUFDQSxJQUFJNkQsUUFBUSxHQUFHUCxZQUFZLEdBQUcsQ0FBQyxHQUFHQyxRQUFRLENBQUMxRyxNQUFNO01BQ2pELElBQUk4RyxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQ25CO1FBQ0EsSUFBSXhGLENBQUMsR0FBR3dGLFdBQVcsR0FBRyxDQUFDO1FBQ3ZCLElBQUlHLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFBQyxJQUFBQyxLQUFBLFlBQUFBLE1BQUEsRUFDYztVQUNoQztVQUNBLElBQU1DLGFBQWEsR0FBR1osY0FBYyxDQUFDakYsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUMzQzJGLFVBQVUsR0FBR1AsUUFBUSxDQUFDVSxTQUFTLENBQUMsVUFBQXBDLENBQUM7WUFBQSxPQUFJQSxDQUFDLENBQUM3QixFQUFFLEtBQUtnRSxhQUFhO1VBQUEsRUFBQztRQUM5RCxDQUFDO1FBSkQsT0FBTzdGLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSTJGLFVBQVUsR0FBRyxDQUFDO1VBQUFDLEtBQUE7UUFBQTtRQUtoQyxJQUFJRCxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUU7VUFDbkI7VUFDQUQsUUFBUSxHQUFHQyxVQUFVLEdBQUcsQ0FBQztRQUMzQjtNQUNGO01BQ0FQLFFBQVEsR0FBRyxJQUFBVyxrQkFBVyxFQUFDWCxRQUFRLEVBQUVNLFFBQVEsRUFBRUgsSUFBSSxDQUFDO0lBQ2xEO0VBQUMsU0FBQVMsR0FBQTtJQUFBWCxTQUFBLENBQUFsSCxDQUFBLENBQUE2SCxHQUFBO0VBQUE7SUFBQVgsU0FBQSxDQUFBcEcsQ0FBQTtFQUFBO0VBQ0QsT0FBT21HLFFBQVE7QUFDakI7QUFFTyxTQUFTYSxxQkFBcUJBLENBQUMxRSxLQUFlLEVBQUU0QyxXQUFnQixFQUFnQjtFQUNyRjtFQUNBLElBQU0rQixpQkFBaUIsR0FBR2hDLG9CQUFvQixDQUFDQyxXQUFXLENBQUMsR0FDdkRFLGdCQUFnQixDQUFDOUMsS0FBSyxDQUFDK0MsTUFBTSxFQUFFSCxXQUFXLENBQUMsR0FDM0NBLFdBQVc7RUFFZixJQUFJLENBQUMrQixpQkFBaUIsRUFBRTtJQUN0QixPQUFPLElBQUk7RUFDYjtFQUNBO0VBQ0EsSUFBQUMscUJBQUEsR0FBNEJDLHdCQUF3QixDQUNsRDdFLEtBQUssQ0FBQ3dCLFFBQVEsRUFDZHhCLEtBQUssQ0FBQzhFLFlBQVksRUFDbEIsQ0FBQ0gsaUJBQWlCLENBQUMsRUFDbkI7TUFBQ0ksZ0JBQWdCLEVBQUU7SUFBSSxDQUN6QixDQUFDO0lBTE10RSxTQUFTLEdBQUFtRSxxQkFBQSxDQUFUbkUsU0FBUztJQUFFQyxNQUFNLEdBQUFrRSxxQkFBQSxDQUFObEUsTUFBTTtFQU94QixJQUFJQSxNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFdkQsTUFBTSxJQUFJLENBQUNzRCxTQUFTLENBQUN0RCxNQUFNLEVBQUU7SUFDdkM7SUFDQSxPQUFPLElBQUk7RUFDYjtFQUVBLElBQU02SCxRQUFRLEdBQUd2RSxTQUFTLENBQUMsQ0FBQyxDQUFDO0VBQzdCdUUsUUFBUSxDQUFDQyxpQkFBaUIsQ0FBQ2pGLEtBQUssQ0FBQ3dCLFFBQVEsQ0FBQztFQUMxQyxPQUFPd0QsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSxlQUFlQSxDQUM3QkMsU0FBaUIsRUFDakJwQyxNQUEyQixFQUNEO0VBQUEsSUFBQXFDLHFCQUFBO0VBQzFCLElBQU1DLGtCQUFrQixHQUFHQyxpQkFBaUIsQ0FBQztJQUFDeEUsT0FBTyxFQUFFLENBQUNxRSxTQUFTO0VBQUMsQ0FBQyxFQUFFcEMsTUFBTSxDQUFDO0VBQzVFLE9BQU9zQyxrQkFBa0IsYUFBbEJBLGtCQUFrQixnQkFBQUQscUJBQUEsR0FBbEJDLGtCQUFrQixDQUFFdkUsT0FBTyxjQUFBc0UscUJBQUEsdUJBQTNCQSxxQkFBQSxDQUE4QixDQUFDLENBQUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU0csY0FBY0EsQ0FDNUJQLFFBQWUsRUFDZmpDLE1BQTJCLEVBQ0Y7RUFBQSxJQUFBeUMscUJBQUE7RUFDekIsSUFBTUgsa0JBQWtCLEdBQUdDLGlCQUFpQixDQUMxQztJQUFDL0QsTUFBTSxFQUFFLENBQUN5RCxRQUFRLENBQUM7SUFBRTFCLFVBQVUsRUFBRSxDQUFDMEIsUUFBUSxDQUFDMUUsRUFBRTtFQUFDLENBQUMsRUFDL0N5QyxNQUNGLENBQUM7RUFDRCxPQUFPc0Msa0JBQWtCLGFBQWxCQSxrQkFBa0IsZ0JBQUFHLHFCQUFBLEdBQWxCSCxrQkFBa0IsQ0FBRTlELE1BQU0sY0FBQWlFLHFCQUFBLHVCQUExQkEscUJBQUEsQ0FBNkIsQ0FBQyxDQUFDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLGVBQWVBLENBQzdCQyxTQUFxQixFQUNyQjNDLE1BQTJCLEVBQ0Q7RUFBQSxJQUFBNEMscUJBQUE7RUFDMUIsSUFBTU4sa0JBQWtCLEdBQUdDLGlCQUFpQixDQUMxQztJQUFDTSxPQUFPLEVBQUUsQ0FBQ0YsU0FBUyxDQUFDO0lBQUVHLFdBQVcsRUFBRSxDQUFDSCxTQUFTLENBQUNwRixFQUFFO0VBQUMsQ0FBQyxFQUNuRHlDLE1BQ0YsQ0FBQztFQUNELE9BQU9zQyxrQkFBa0IsYUFBbEJBLGtCQUFrQixnQkFBQU0scUJBQUEsR0FBbEJOLGtCQUFrQixDQUFFTyxPQUFPLGNBQUFELHFCQUFBLHVCQUEzQkEscUJBQUEsQ0FBOEIsQ0FBQyxDQUFDO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNMLGlCQUFpQkEsQ0FDL0JqQyxRQUEyQixFQUMzQk4sTUFBMkIsRUFDQztFQUFBLElBQUErQyxzQkFBQTtFQUM1QixJQUFNQyxVQUFVLEdBQUdoRCxNQUFNLENBQUNpRCxlQUFlLENBQUM7SUFDeEMzQyxRQUFRLEVBQVJBO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBTzBDLFVBQVUsSUFBQUQsc0JBQUEsR0FBRy9DLE1BQU0sQ0FBQ1EsZ0JBQWdCLENBQUN3QyxVQUFVLENBQUMsY0FBQUQsc0JBQUEsdUJBQW5DQSxzQkFBQSxDQUFxQ3pDLFFBQVEsR0FBR00sU0FBUztBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTc0MsV0FBV0EsQ0FDekJqRyxLQUFRLEVBR0w7RUFBQSxJQUZIa0csYUFBOEQsR0FBQXpHLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxFQUFFO0VBQUEsSUFDbkVTLFVBQW9CLEdBQUFULFNBQUEsQ0FBQXRDLE1BQUEsT0FBQXNDLFNBQUEsTUFBQWtFLFNBQUE7RUFFcEIsSUFBTXdDLGtCQUFrQixHQUFHakcsVUFBVSxHQUNqQyxJQUFBa0csbUNBQXVCLEVBQUNGLGFBQWEsQ0FBQyxHQUN0Q2xHLEtBQUssQ0FBQ21HLGtCQUFrQjtFQUM1QixJQUFJLENBQUNuSixLQUFLLENBQUNDLE9BQU8sQ0FBQ2lKLGFBQWEsQ0FBQyxJQUFJLENBQUNBLGFBQWEsQ0FBQy9JLE1BQU0sRUFBRTtJQUMxRCxPQUFPNkMsS0FBSztFQUNkO0VBQ0E7RUFDQSxJQUFNcUcsUUFBdUIsR0FBRyxFQUFFO0VBQ2xDLElBQU1DLE9BQXNCLEdBQUcsRUFBRTtFQUNqQ0osYUFBYSxDQUFDeEcsT0FBTyxDQUFDLFVBQUNXLENBQWMsRUFBSztJQUFBLElBQUFrRyxTQUFBO0lBQ3hDLElBQUlsRyxDQUFDLGFBQURBLENBQUMsZ0JBQUFrRyxTQUFBLEdBQURsRyxDQUFDLENBQUUrQyxNQUFNLGNBQUFtRCxTQUFBLGVBQVRBLFNBQUEsQ0FBV25GLE1BQU0sSUFBSXBCLEtBQUssQ0FBQ3dHLGlCQUFpQixDQUFDbkcsQ0FBQyxDQUFDK0MsTUFBTSxDQUFDaEMsTUFBTSxDQUFDLEVBQUU7TUFDakVpRixRQUFRLENBQUMvRyxJQUFJLENBQUNlLENBQUMsQ0FBQztJQUNsQixDQUFDLE1BQU07TUFDTGlHLE9BQU8sQ0FBQ2hILElBQUksQ0FBQ2UsQ0FBQyxDQUFDO0lBQ2pCO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBQW9HLHNCQUFBLEdBQXlDNUIsd0JBQXdCLENBQy9EN0UsS0FBSyxDQUFDd0IsUUFBUSxFQUNkeEIsS0FBSyxDQUFDOEUsWUFBWSxFQUNsQndCLE9BQ0YsQ0FBQztJQUppQkksV0FBVyxHQUFBRCxzQkFBQSxDQUF0QmhHLFNBQVM7SUFBZUMsTUFBTSxHQUFBK0Ysc0JBQUEsQ0FBTi9GLE1BQU07RUFLckMyRixRQUFRLENBQUMvRyxJQUFJLENBQUFDLEtBQUEsQ0FBYjhHLFFBQVEsTUFBQTFFLG1CQUFBLGFBQVNqQixNQUFNLEVBQUM7RUFDeEI7RUFDQSxJQUFBaUcscUJBQUEsR0FBbUNDLHVCQUF1QixDQUN4RDVHLEtBQUssQ0FBQ3VCLE1BQU0sRUFDWm1GLFdBQVcsRUFDWDFHLEtBQUssQ0FBQ3NELFVBQVUsRUFDaEI2QyxrQkFDRixDQUFDO0lBTE1VLGFBQWEsR0FBQUYscUJBQUEsQ0FBYkUsYUFBYTtJQUFFQyxTQUFTLEdBQUFILHFCQUFBLENBQVRHLFNBQVM7RUFPL0IsT0FBQXRILGFBQUEsQ0FBQUEsYUFBQSxLQUNLUSxLQUFLO0lBQ1J1QixNQUFNLEVBQUV1RixTQUFTO0lBQ2pCeEQsVUFBVSxFQUFFdUQsYUFBYTtJQUN6QlYsa0JBQWtCLEVBQWxCQSxrQkFBa0I7SUFDbEJZLGVBQWUsS0FBQXJGLE1BQUEsS0FBQUMsbUJBQUEsYUFBTTNCLEtBQUssQ0FBQytHLGVBQWUsR0FBS1YsUUFBUTtFQUFDO0FBRTVEO0FBRU8sU0FBU08sdUJBQXVCQSxDQUNyQ0ksYUFBYSxFQUNiQyxjQUFjLEVBQ2RDLFlBQVksRUFFWjtFQUFBLElBREF4RCxjQUF3QixHQUFBakUsU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLEVBQUU7RUFFN0IsSUFBSSxFQUFDd0gsY0FBYyxhQUFkQSxjQUFjLGVBQWRBLGNBQWMsQ0FBRTlKLE1BQU0sR0FBRTtJQUMzQixPQUFPO01BQUMySixTQUFTLEVBQUVFLGFBQWE7TUFBRUgsYUFBYSxFQUFFSztJQUFZLENBQUM7RUFDaEU7RUFDQTtFQUNBO0VBQ0EsSUFBTUMsaUJBQWlCLEdBQUdELFlBQVksQ0FDbkM5RyxHQUFHLENBQUMsVUFBQUUsRUFBRTtJQUFBLE9BQUksSUFBQThHLGVBQVEsRUFBQzlHLEVBQUUsQ0FBQyxDQUFDMEcsYUFBYSxDQUFDO0VBQUEsRUFBQyxDQUN0QzdILE1BQU0sQ0FBQyxVQUFBa0ksS0FBSztJQUFBLE9BQUlDLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDO0VBQUEsRUFBQztFQUNsQyxJQUFNUCxTQUFTLEdBQUdFLGFBQWEsQ0FBQ3RGLE1BQU0sQ0FBQ3VGLGNBQWMsQ0FBQztFQUN0RCxJQUFNTSxrQkFBa0IsR0FBRzFHLCtCQUErQixDQUN4RHNHLGlCQUFpQixFQUNqQkYsY0FBYyxFQUNkdkQsY0FBYyxFQUNkLElBQ0YsQ0FBQzs7RUFFRDtFQUNBLElBQU1tRCxhQUFhLEdBQUcsSUFBQVQsbUNBQXVCLEVBQUNtQixrQkFBa0IsQ0FBQztFQUVqRSxPQUFPO0lBQ0xWLGFBQWEsRUFBYkEsYUFBYTtJQUNiQyxTQUFTLEVBQVRBO0VBQ0YsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU1UsaUJBQWlCQSxDQUMvQnhILEtBQVEsRUFDUnlILHFCQUFrRSxFQUMvRDtFQUNILElBQU1DLE1BQTZDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hELElBQU1yQixRQUF5QyxHQUFHLENBQUMsQ0FBQztFQUVwRCxJQUFJb0IscUJBQXFCLEVBQUU7SUFDeEJ6SSxNQUFNLENBQUNDLElBQUksQ0FBQ3dJLHFCQUFxQixDQUFDLENBQXlDL0gsT0FBTyxDQUFDLFVBQUFpSSxHQUFHLEVBQUk7TUFDekYsSUFBSSxDQUFDM0gsS0FBSyxDQUFDNEgsaUJBQWlCLENBQUNELEdBQUcsQ0FBQyxFQUFFO1FBQ2pDO01BQ0Y7TUFFQSxJQUFNRSxhQUFhLEdBQ2pCRixHQUFHLEtBQUssU0FBUyxJQUFJQSxHQUFHLEtBQUssT0FBTyxHQUFHM0gsS0FBSyxDQUFDNEgsaUJBQWlCLENBQUNELEdBQUcsQ0FBQyxDQUFDdkUsTUFBTSxHQUFHLElBQUk7TUFFbkYsSUFBQTBFLEtBQUEsR0FBa0NMLHFCQUFxQixDQUFDRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFBM0RJLE9BQU8sR0FBQUQsS0FBQSxDQUFQQyxPQUFPO1FBQUtDLFdBQVcsT0FBQXRGLHlCQUFBLGFBQUFvRixLQUFBLEVBQUFyTCxTQUFBO01BRTlCLElBQUl3TCxhQUFhLEdBQUdELFdBQVc7TUFFL0IsSUFBSUwsR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUNyQixJQUFBTyxxQkFBQSxHQUF5Q0MsNkJBQTZCLENBQ3BFbkksS0FBSyxFQUNMZ0ksV0FDRixDQUFDO1VBSE1JLGFBQWEsR0FBQUYscUJBQUEsQ0FBYkUsYUFBYTtVQUFFQyxlQUFlLEdBQUFILHFCQUFBLENBQWZHLGVBQWU7O1FBS3JDO1FBQ0FKLGFBQWEsR0FBRztVQUNkSyxZQUFZLEVBQUE5SSxhQUFBLENBQUFBLGFBQUEsS0FDTnFJLGFBQWEsQ0FBMkJTLFlBQVksR0FDckRGLGFBQWE7UUFFcEIsQ0FBQztRQUVELElBQUlwSixNQUFNLENBQUNDLElBQUksQ0FBQ29KLGVBQWUsQ0FBQyxDQUFDbEwsTUFBTSxFQUFFO1VBQ3ZDO1VBQ0FrSixRQUFRLENBQUNrQyxPQUFPLEdBQUc7WUFBQ0QsWUFBWSxFQUFFRCxlQUFlO1lBQUVOLE9BQU8sRUFBRVQsT0FBTyxDQUFDUyxPQUFPO1VBQUMsQ0FBQztRQUMvRTtNQUNGO01BRUFMLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLEdBQUFuSSxhQUFBLENBQUFBLGFBQUEsS0FDTlEsS0FBSyxDQUFDNEgsaUJBQWlCLENBQUNELEdBQUcsQ0FBQztRQUMvQkksT0FBTyxFQUFFVCxPQUFPLENBQUNTLE9BQU87TUFBQyxHQUNyQkYsYUFBYSxHQUNiO1FBQ0V6RSxNQUFNLEVBQUUsSUFBQW9GLGdCQUFJLEVBQUFoSixhQUFBLENBQUFBLGFBQUEsS0FFTHFJLGFBQWEsR0FDYkksYUFBYSxHQUVsQmpKLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNEksYUFBYSxDQUMzQjtNQUNGLENBQUMsR0FDRCxDQUFDLENBQUMsQ0FDUDtJQUNILENBQUMsQ0FBQztFQUNKO0VBRUEsSUFBTVksU0FBUyxHQUFBakosYUFBQSxDQUFBQSxhQUFBLEtBQ1ZRLEtBQUs7SUFDUjRILGlCQUFpQixFQUFBcEksYUFBQSxDQUFBQSxhQUFBLEtBQ1pRLEtBQUssQ0FBQzRILGlCQUFpQixHQUN2QkYsTUFBTSxDQUNWO0lBQ0RELHFCQUFxQixFQUFFaUIsd0JBQXdCLENBQUMxSSxLQUFLLEVBQUVxRyxRQUFRO0VBQUMsRUFDakU7RUFDRCxPQUFPb0MsU0FBUztBQUNsQjtBQUVBLFNBQVNFLHlCQUF5QkEsQ0FBQ0MsT0FBaUMsRUFBMEI7RUFDNUYsSUFBTUMsUUFBUSxHQUFBckosYUFBQSxLQUFPb0osT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDO0VBQ0E7RUFBQSxJQUFBRSxNQUFBLFlBQUFBLE9BQUFuQixHQUFBLEVBRTRCO0lBQzFCLElBQU1vQixpQkFBaUIsR0FBR0gsT0FBTyxDQUFDeEksR0FBRyxDQUFDLFVBQUE0SSxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDckIsR0FBRyxDQUFDO0lBQUEsRUFBQzs7SUFFbEQ7SUFDQWtCLFFBQVEsQ0FBQ2xCLEdBQUcsQ0FBQyxHQUFHO01BQ2Q7TUFDQUksT0FBTyxFQUFFZ0IsaUJBQWlCLENBQUNFLElBQUksQ0FBQyxVQUFBQyxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxhQUFEQSxDQUFDLHVCQUFEQSxDQUFDLENBQUVuQixPQUFPO01BQUE7SUFDakQsQ0FBQztJQUVELElBQUlKLEdBQUcsS0FBSyxTQUFTLEVBQUU7TUFDckI7TUFDQWtCLFFBQVEsQ0FBQ2xCLEdBQUcsQ0FBQyxDQUFDd0IsV0FBVyxHQUFHSixpQkFBaUIsQ0FBQ0UsSUFBSSxDQUFDLFVBQUFDLENBQUM7UUFBQSxPQUFJQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRUMsV0FBVztNQUFBLEVBQUM7O01BRXZFO01BQ0FOLFFBQVEsQ0FBQ2xCLEdBQUcsQ0FBQyxDQUFDeUIsV0FBVyxHQUFHQyw2QkFBNkIsQ0FDdkROLGlCQUFpQixDQUFDM0ksR0FBRyxDQUFDLFVBQUE4SSxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDRSxXQUFXO01BQUEsRUFDMUMsQ0FBQzs7TUFFRDtNQUNBUCxRQUFRLENBQUNsQixHQUFHLENBQUMsQ0FBQ1csWUFBWSxHQUFHUyxpQkFBaUIsQ0FDM0MzSSxHQUFHLENBQUMsVUFBQThJLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUNaLFlBQVk7TUFBQSxFQUFDLENBQ3hCZ0IsTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRUMsZ0JBQWdCLEVBQUs7UUFBQSxJQUFBQyxNQUFBLFlBQUFBLE9BQUFDLGFBQUEsRUFDYTtVQUM1QyxJQUFNQyxpQkFBaUIsR0FBR0gsZ0JBQWdCLENBQUNFLGFBQWEsQ0FBQztVQUN6RCxJQUFJLENBQUNILEdBQUcsQ0FBQ0csYUFBYSxDQUFDLEVBQUU7WUFDdkI7WUFDQTtZQUNBSCxHQUFHLENBQUNHLGFBQWEsQ0FBQyxHQUFHQyxpQkFBaUI7VUFDeEMsQ0FBQyxNQUFNO1lBQ0w7WUFDQTtZQUNBO1lBQ0FBLGlCQUFpQixDQUFDakssT0FBTyxDQUFDLFVBQUFrSyxNQUFNLEVBQUk7Y0FDbEMsSUFBSSxDQUFDTCxHQUFHLENBQUNHLGFBQWEsQ0FBQyxDQUFDRyxJQUFJLENBQUMsVUFBQUMsS0FBQTtnQkFBQSxJQUFFekwsSUFBSSxHQUFBeUwsS0FBQSxDQUFKekwsSUFBSTtnQkFBQSxPQUFNdUwsTUFBTSxDQUFDdkwsSUFBSSxLQUFLQSxJQUFJO2NBQUEsRUFBQyxFQUFFO2dCQUM5RGtMLEdBQUcsQ0FBQ0csYUFBYSxDQUFDLENBQUNwSyxJQUFJLENBQUNzSyxNQUFNLENBQUM7Y0FDakM7WUFDRixDQUFDLENBQUM7VUFDSjtRQUNGLENBQUM7UUFoQkQsS0FBSyxJQUFNRixhQUFhLElBQUlGLGdCQUFnQjtVQUFBQyxNQUFBLENBQUFDLGFBQUE7UUFBQTtRQWlCNUMsT0FBT0gsR0FBRztNQUNaLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNWO0lBRUEsSUFBSTVCLEdBQUcsS0FBSyxPQUFPLEVBQUU7TUFBQSxJQUFBb0MsVUFBQTtNQUNuQjtNQUNBbEIsUUFBUSxDQUFDbEIsR0FBRyxDQUFDLENBQUNxQyxJQUFJLElBQUFELFVBQUEsR0FDaEIsSUFBQUUsZ0JBQVMsRUFBQ2xCLGlCQUFpQixFQUFFbUIsNEJBQWlCLENBQUNDLE9BQU8sRUFBRSxVQUFBakIsQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQ2MsSUFBSTtNQUFBLEVBQUMsY0FBQUQsVUFBQSxjQUFBQSxVQUFBLEdBQUksSUFBSTtJQUNoRjtFQUNGLENBQUM7RUFoREQsS0FBSyxJQUFNcEMsR0FBRyxJQUFJa0IsUUFBUTtJQUFBQyxNQUFBLENBQUFuQixHQUFBO0VBQUE7RUFrRDFCLE9BQU9rQixRQUFRO0FBQ2pCO0FBRUEsU0FBU0gsd0JBQXdCQSxDQUMvQjFJLEtBQVEsRUFDUnFHLFFBQXlDLEVBQ3pDO0VBQUEsSUFBQStELGlCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGtCQUFBO0VBQ0EsSUFBSSxFQUFDbEUsUUFBUSxhQUFSQSxRQUFRLGdCQUFBK0QsaUJBQUEsR0FBUi9ELFFBQVEsQ0FBRWtDLE9BQU8sY0FBQTZCLGlCQUFBLGVBQWpCQSxpQkFBQSxDQUFtQjlCLFlBQVksR0FBRTtJQUNwQyxPQUFPdEksS0FBSyxDQUFDeUgscUJBQXFCO0VBQ3BDO0VBQ0EsT0FBTztJQUNMYyxPQUFPLEVBQUEvSSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNGUSxLQUFLLENBQUN5SCxxQkFBcUIsQ0FBQ2MsT0FBTyxHQUNsQyxRQUFPbEMsUUFBUSxhQUFSQSxRQUFRLGdCQUFBZ0Usa0JBQUEsR0FBUmhFLFFBQVEsQ0FBRWtDLE9BQU8sY0FBQThCLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUJ0QyxPQUFPLE1BQUssU0FBUyxHQUMvQztNQUFDQSxPQUFPLEVBQUUxQixRQUFRLENBQUNrQyxPQUFPLENBQUNSO0lBQU8sQ0FBQyxHQUNuQyxDQUFDLENBQUM7TUFDTk8sWUFBWSxFQUFBOUksYUFBQSxDQUFBQSxhQUFBLE1BQUE4SyxxQkFBQSxHQUNQdEssS0FBSyxDQUFDeUgscUJBQXFCLGNBQUE2QyxxQkFBQSxnQkFBQUEscUJBQUEsR0FBM0JBLHFCQUFBLENBQTZCL0IsT0FBTyxjQUFBK0IscUJBQUEsdUJBQXBDQSxxQkFBQSxDQUFzQ2hDLFlBQVksR0FDbERqQyxRQUFRLGFBQVJBLFFBQVEsZ0JBQUFrRSxrQkFBQSxHQUFSbEUsUUFBUSxDQUFFa0MsT0FBTyxjQUFBZ0Msa0JBQUEsdUJBQWpCQSxrQkFBQSxDQUFtQmpDLFlBQVk7SUFDbkM7RUFFTCxDQUFDO0FBQ0g7QUFFQSxTQUFTa0MsNEJBQTRCQSxDQUFDNUMsaUJBQWlCLEVBQUV4RyxNQUFjLEVBQUVxSixlQUF1QixFQUFFO0VBQUEsSUFBQUMscUJBQUE7RUFDaEcsSUFBSTlDLGlCQUFpQixhQUFqQkEsaUJBQWlCLGdCQUFBOEMscUJBQUEsR0FBakI5QyxpQkFBaUIsQ0FBRVcsT0FBTyxjQUFBbUMscUJBQUEsZUFBMUJBLHFCQUFBLENBQTRCcEMsWUFBWSxDQUFDbEgsTUFBTSxDQUFDLEVBQUU7SUFBQSxJQUFBdUosc0JBQUE7SUFDcEQsT0FBQW5MLGFBQUEsQ0FBQUEsYUFBQSxLQUNLb0ksaUJBQWlCO01BQ3BCVyxPQUFPLEVBQUEvSSxhQUFBLENBQUFBLGFBQUEsS0FDRm9JLGlCQUFpQixDQUFDVyxPQUFPO1FBQzVCRCxZQUFZLE1BQUEzSSxnQkFBQSxpQkFDVDhLLGVBQWUsRUFBRzdDLGlCQUFpQixhQUFqQkEsaUJBQWlCLGdCQUFBK0Msc0JBQUEsR0FBakIvQyxpQkFBaUIsQ0FBRVcsT0FBTyxjQUFBb0Msc0JBQUEsdUJBQTFCQSxzQkFBQSxDQUE0QnJDLFlBQVksQ0FBQ2xILE1BQU0sQ0FBQztNQUNwRTtJQUNGO0VBRUw7RUFDQSxPQUFPLElBQUk7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN3SixjQUFjQSxDQUM1QjVLLEtBQVEsRUFFTDtFQUFBLElBREg2SyxTQUE2RCxHQUFBcEwsU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLEVBQUU7RUFFbEUsSUFBTWlJLE1BQU0sT0FBQS9GLG1CQUFBLGFBQU8zQixLQUFLLENBQUM2SyxTQUFTLENBQUM7RUFDbkMsSUFBTXhFLFFBQVEsR0FBRyxFQUFFO0VBQ25Cd0UsU0FBUyxDQUFDbkwsT0FBTyxDQUFDLFVBQUNvTCxFQUFFLEVBQUVyTSxDQUFDLEVBQUs7SUFDM0IsSUFBTXNNLE9BQU8sR0FBRy9MLE1BQU0sQ0FBQytMLE9BQU8sQ0FBQ0QsRUFBRSxDQUFDdkosTUFBTSxDQUFDO0lBQ3pDLElBQUl3SixPQUFPLENBQUM1TixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3RCNE4sT0FBTyxDQUFDckwsT0FBTyxDQUFDLFVBQUFzTCxLQUFBLEVBQWlCO1FBQUEsSUFBQUMsS0FBQSxPQUFBQyxlQUFBLGFBQUFGLEtBQUE7VUFBZjFLLEVBQUUsR0FBQTJLLEtBQUE7VUFBRXhOLEtBQUssR0FBQXdOLEtBQUE7UUFDekI7UUFDQSxJQUFNRSxNQUFNLEdBQUduTCxLQUFLLENBQUN1QixNQUFNLENBQUNzSSxJQUFJLENBQUMsVUFBQXhKLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNDLEVBQUUsS0FBS0EsRUFBRTtRQUFBLEVBQUMsR0FBR29ILE1BQU0sR0FBR3JCLFFBQVE7O1FBRXRFO1FBQ0E4RSxNQUFNLENBQUMxTSxDQUFDLENBQUMsR0FBRzBNLE1BQU0sQ0FBQzFNLENBQUMsQ0FBQyxJQUFBZSxhQUFBLENBQUFBLGFBQUEsS0FFaEJzTCxFQUFFO1VBQ0x2SixNQUFNLEVBQUU0SixNQUFNLEtBQUt6RCxNQUFNLEdBQUcsSUFBQTBELHFDQUE4QixFQUFDcEwsS0FBSyxDQUFDdUIsTUFBTSxDQUFDLEdBQUc7UUFBRSxFQUM5RTtRQUNENEosTUFBTSxDQUFDMU0sQ0FBQyxDQUFDLENBQUM4QyxNQUFNLEdBQUEvQixhQUFBLENBQUFBLGFBQUEsS0FDWDJMLE1BQU0sQ0FBQzFNLENBQUMsQ0FBQyxDQUFDOEMsTUFBTSxXQUFBNUIsZ0JBQUEsaUJBQ2xCVyxFQUFFLEVBQUc3QyxLQUFLLEVBQ1o7TUFDSCxDQUFDLENBQUM7SUFDSixDQUFDLE1BQU07TUFDTDtNQUNBaUssTUFBTSxDQUFDcEksSUFBSSxDQUFDd0wsRUFBRSxDQUFDO0lBQ2pCO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsT0FBQXRMLGFBQUEsQ0FBQUEsYUFBQSxLQUNLUSxLQUFLO0lBQ1I2SyxTQUFTLEVBQUVuRCxNQUFNO0lBQ2pCMkQsbUJBQW1CLEtBQUEzSixNQUFBLEtBQUFDLG1CQUFBLGFBQU0zQixLQUFLLENBQUNxTCxtQkFBbUIsR0FBS2hGLFFBQVE7RUFBQztBQUVwRTs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTaUYsWUFBWUEsQ0FDMUJ0TCxLQUFRLEVBQ1I0RixPQUF5RCxFQUN6RDFGLFVBQW9CLEVBQ2pCO0VBQ0gsSUFBTXFMLFVBQVUsTUFBQTdKLE1BQUEsS0FBQUMsbUJBQUEsYUFDWDNCLEtBQUssQ0FBQzRGLE9BQU8sT0FBQWpFLG1CQUFBLGFBQ2IsQ0FBQ2lFLE9BQU8sSUFBSSxFQUFFLEVBQ2R4RixHQUFHLENBQUMsVUFBQW9MLE1BQU0sRUFBSTtJQUNiLE9BQU90TCxVQUFVLEdBQ2IsSUFBQXVMLHFCQUFZLEVBQ1ZDLHFCQUFTLENBQUNDLEdBQUcsQ0FBQyxDQUNaSCxNQUFNLEVBQ047TUFDRTtNQUNBSSxjQUFjLEVBQUU7SUFDbEIsQ0FBQyxDQUNGLENBQ0gsQ0FBQyxHQUNBSixNQUFxQjtFQUM1QixDQUFDLENBQUMsQ0FDRHJNLE1BQU0sQ0FBQyxVQUFBcU0sTUFBTSxFQUFJO0lBQ2hCLE9BQU9sRSxPQUFPLENBQUNrRSxNQUFNLElBQUlBLE1BQU0sQ0FBQ0ssYUFBYSxDQUFDLENBQUMsQ0FBQztFQUNsRCxDQUFDLENBQUMsRUFDTDtFQUNELE9BQUFyTSxhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztJQUNSNEYsT0FBTyxFQUFFMkYsVUFBVTtJQUNuQjFGLFdBQVcsRUFBRTBGLFVBQVUsQ0FBQ25MLEdBQUcsQ0FBQyxVQUFBb0wsTUFBTTtNQUFBLE9BQUlBLE1BQU0sQ0FBQ2xMLEVBQUU7SUFBQTtFQUFDO0FBRXBEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTNkgsNkJBQTZCQSxDQUMzQ25JLEtBQWUsRUFFZjtFQUFBLElBREE4TCxhQUFpRSxHQUFBck0sU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLElBQUk7RUFFeEUsSUFBTTRJLGVBQXNELEdBQUcsQ0FBQyxDQUFDO0VBQ2pFLElBQU1ELGFBQW9ELEdBQUcsQ0FBQyxDQUFDO0VBRS9ELElBQ0UsQ0FBQzBELGFBQWEsSUFDZCxDQUFDQSxhQUFhLENBQUN4RCxZQUFZLElBQzNCLENBQUN0SixNQUFNLENBQUNDLElBQUksQ0FBQzZNLGFBQWEsQ0FBQ3hELFlBQVksQ0FBQyxDQUFDbkwsTUFBTSxFQUMvQztJQUNBLE9BQU87TUFBQ2lMLGFBQWEsRUFBYkEsYUFBYTtNQUFFQyxlQUFlLEVBQWZBO0lBQWUsQ0FBQztFQUN6QztFQUFDLElBQUEwRCxNQUFBLFlBQUFBLE9BQUEsRUFFZ0Q7SUFDL0MsSUFBSSxDQUFDL0wsS0FBSyxDQUFDd0IsUUFBUSxDQUFDSixNQUFNLENBQUMsSUFBSXBCLEtBQUssQ0FBQ3dHLGlCQUFpQixDQUFDcEYsTUFBTSxDQUFDLEVBQUU7TUFDOUQ7TUFDQWlILGVBQWUsQ0FBQ2pILE1BQU0sQ0FBQyxHQUFHMEssYUFBYSxDQUFDeEQsWUFBWSxDQUFDbEgsTUFBTSxDQUFDO0lBQzlELENBQUMsTUFBTTtNQUNMO01BQ0EsSUFBTTRLLFNBQVMsR0FBR2hNLEtBQUssQ0FBQ3dCLFFBQVEsQ0FBQ0osTUFBTSxDQUFDLENBQUM2SyxNQUFNLENBQUM3TCxHQUFHLENBQUMsVUFBQStCLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUM5RCxJQUFJO01BQUEsRUFBQztNQUNoRSxJQUFNNk4saUJBQWlCLEdBQUdKLGFBQWEsQ0FBQ3hELFlBQVksQ0FBQ2xILE1BQU0sQ0FBQyxDQUFDakMsTUFBTSxDQUFDLFVBQUFnTixLQUFLO1FBQUEsT0FDdkVILFNBQVMsQ0FBQ2hLLFFBQVEsQ0FBQ21LLEtBQUssQ0FBQzlOLElBQUksQ0FBQztNQUFBLENBQ2hDLENBQUM7TUFFRCtKLGFBQWEsQ0FBQ2hILE1BQU0sQ0FBQyxHQUFHOEssaUJBQWlCO0lBQzNDO0VBQ0YsQ0FBQztFQWJELEtBQUssSUFBTTlLLE1BQU0sSUFBSTBLLGFBQWEsQ0FBQ3hELFlBQVk7SUFBQXlELE1BQUE7RUFBQTtFQWUvQyxPQUFPO0lBQUMzRCxhQUFhLEVBQWJBLGFBQWE7SUFBRUMsZUFBZSxFQUFmQTtFQUFlLENBQUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMrRCxrQkFBa0JBLENBQ2hDcE0sS0FBUSxFQUNScU0sYUFBcUUsRUFDbEU7RUFDSCxJQUFJQSxhQUFhLElBQUlDLDBCQUFlLENBQUNELGFBQWEsQ0FBQyxFQUFFO0lBQ25ELE9BQUE3TSxhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztNQUNScU0sYUFBYSxFQUFiQTtJQUFhO0VBRWpCO0VBRUEsT0FBT3JNLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVN1TSwyQkFBMkJBLENBQUMzRCxPQUFpQixFQUFpQjtFQUNyRTtFQUNBLE9BQU9TLDZCQUE2QixDQUFDVCxPQUFPLENBQUM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBUzRELG9CQUFvQkEsQ0FDbEN4TSxLQUFRLEVBQ1J5TSxlQUF5RSxFQUN0RTtFQUNILElBQUlBLGVBQWUsSUFBSUMsNEJBQWlCLENBQUNELGVBQWUsQ0FBQyxFQUFFO0lBQ3pELE9BQUFqTixhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztNQUNSeU0sZUFBZSxFQUFmQTtJQUFlO0VBRW5CO0VBRUEsT0FBT3pNLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMyTSw2QkFBNkJBLENBQUMvRCxPQUFpQixFQUFpQjtFQUN2RTtFQUNBLE9BQU9TLDZCQUE2QixDQUFDVCxPQUFPLENBQUM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU2dFLG9CQUFvQkEsQ0FDbEM1TSxLQUFRLEVBQ1I2TSxTQUFtRSxFQUNoRTtFQUNILElBQUlBLFNBQVMsSUFBSUEsU0FBUyxDQUFDQyxXQUFXLEVBQUU7SUFDdEMsT0FBQXROLGFBQUEsQ0FBQUEsYUFBQSxLQUNLUSxLQUFLO01BQ1IrTSxlQUFlLEVBQUF2TixhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNWUSxLQUFLLENBQUMrTSxlQUFlLEdBQ3JCRixTQUFTO1FBQ1pHLE1BQU0sRUFBRTtNQUFJO0lBQ2I7RUFFTDtFQUVBLE9BQU9oTixLQUFLO0FBQ2Q7QUFFQSxTQUFTaU4sdUJBQXVCQSxDQUFDckUsT0FBK0IsRUFBd0I7RUFBQSxJQUFBc0UsV0FBQSxFQUFBQyxXQUFBO0VBQ3RGO0VBQ0EsT0FBTztJQUNMTCxXQUFXLEdBQUFJLFdBQUEsR0FBRSxJQUFBakQsZ0JBQVMsRUFBQ3JCLE9BQU8sRUFBRXNCLDRCQUFpQixDQUFDa0QsT0FBTyxFQUFFLFVBQUFwRSxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDOEQsV0FBVztJQUFBLEVBQUMsY0FBQUksV0FBQSxjQUFBQSxXQUFBLEdBQUksSUFBSTtJQUN0RkcsS0FBSyxHQUFBRixXQUFBLEdBQUUsSUFBQWxELGdCQUFTLEVBQUNyQixPQUFPLEVBQUVzQiw0QkFBaUIsQ0FBQ2tELE9BQU8sRUFBRSxVQUFBcEUsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3FFLEtBQUs7SUFBQSxFQUFDLGNBQUFGLFdBQUEsY0FBQUEsV0FBQSxHQUFJO0VBQ3hFLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxTQUFTRyx5QkFBeUJBLENBQ3ZDckIsTUFBNkIsRUFNN0I7RUFBQSxJQUxBc0IsU0FFQyxHQUFBOU4sU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUFBLElBQ04rTixTQUF1QixHQUFBL04sU0FBQSxDQUFBdEMsTUFBQSxPQUFBc0MsU0FBQSxNQUFBa0UsU0FBQTtFQUFBLElBQ3ZCOEosT0FBaUMsR0FBQWhPLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFdEM7RUFDQSxJQUFNaU8sT0FBeUIsR0FBRyxDQUFDLENBQUM7RUFBQyxJQUFBQyxNQUFBLFlBQUFBLE9BQUEsRUFDSztJQUFyQyxJQUFNaEcsR0FBRyxHQUFBaUcsWUFBQSxDQUFBQyxFQUFBO0lBQ1pILE9BQU8sQ0FBQy9GLEdBQUcsQ0FBQyxHQUFBbkksYUFBQSxLQUFPZ08sU0FBUyxDQUFDN0YsR0FBRyxDQUFDLENBQUM7SUFFbEMsSUFBTW1HLEtBQUssR0FBR1AsU0FBUyxDQUFDNUYsR0FBRyxDQUFDO0lBQzVCLElBQUltRyxLQUFLLEVBQUU7TUFDVCxJQUFNQyxRQUFRLEdBQUc5QixNQUFNLENBQUMxSCxTQUFTLENBQUMsVUFBQXlKLEtBQUE7UUFBQSxJQUFFM1AsSUFBSSxHQUFBMlAsS0FBQSxDQUFKM1AsSUFBSTtRQUFBLE9BQU1BLElBQUksS0FBS3lQLEtBQUs7TUFBQSxFQUFDO01BRTdELElBQUlDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUNqQjtRQUNBTCxPQUFPLENBQUMvRixHQUFHLENBQUMsQ0FBQ29HLFFBQVEsR0FBR0EsUUFBUTtRQUNoQ0wsT0FBTyxDQUFDL0YsR0FBRyxDQUFDLENBQUNsSyxLQUFLLEdBQUdxUSxLQUFLO01BQzVCO0lBQ0Y7RUFDRixDQUFDO0VBYkQsU0FBQUQsRUFBQSxNQUFBRCxZQUFBLEdBQWtCNU8sTUFBTSxDQUFDQyxJQUFJLENBQUN1TyxTQUFTLENBQUMsRUFBQUssRUFBQSxHQUFBRCxZQUFBLENBQUF6USxNQUFBLEVBQUEwUSxFQUFBO0lBQUFGLE1BQUE7RUFBQTs7RUFleEM7RUFDQSxJQUFNTSxXQUFXLEdBQUdqUCxNQUFNLENBQUNDLElBQUksQ0FBQ3lPLE9BQU8sQ0FBQyxDQUFDUSxLQUFLLENBQUMsVUFBQXZHLEdBQUc7SUFBQSxPQUNoRHdHLGNBQWMsQ0FBQ1QsT0FBTyxDQUFDL0YsR0FBRyxDQUFDLEVBQUUrRixPQUFPLEVBQUV6QixNQUFNLENBQUM7RUFBQSxDQUMvQyxDQUFDO0VBRUQsSUFBTW1DLEVBQUUsR0FBR0gsV0FBVyxHQUFHUCxPQUFPLEdBQUcsSUFBSTtFQUN2QyxJQUFJRCxPQUFPLENBQUNZLFlBQVksRUFBRTtJQUN4QixJQUFNQyxlQUFlLEdBQUd0UCxNQUFNLENBQUNDLElBQUksQ0FBQ3VPLFNBQVMsQ0FBQyxDQUFDck8sTUFBTSxDQUFDLFVBQUFvUCxDQUFDO01BQUEsT0FBSSxDQUFDZixTQUFTLENBQUNlLENBQUMsQ0FBQyxDQUFDQyxRQUFRO0lBQUEsRUFBQztJQUNsRixJQUFNQyxjQUFjLEdBQUdILGVBQWUsQ0FBQ25QLE1BQU0sQ0FBQyxVQUFBb1AsQ0FBQztNQUFBLE9BQUksRUFBQ2IsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBR2EsQ0FBQyxDQUFDLENBQUM5USxLQUFLO0lBQUEsRUFBQztJQUN2RSxJQUFJZ1IsY0FBYyxDQUFDdFIsTUFBTSxFQUFFO01BQ3pCLE1BQU0sSUFBSXVSLEtBQUssMENBQUFoTixNQUFBLENBQTBDK00sY0FBYyxDQUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUUsQ0FBQztJQUN2RjtJQUNBLElBQU1DLGFBQWEsR0FBRzVQLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDc08sU0FBUyxDQUFDO0lBQzVDLElBQU1zQixjQUFjLEdBQUdELGFBQWEsQ0FBQ3pQLE1BQU0sQ0FBQyxVQUFBb1AsQ0FBQztNQUFBLElBQUFPLFVBQUE7TUFBQSxPQUFJLEVBQUNwQixPQUFPLGFBQVBBLE9BQU8sZ0JBQUFvQixVQUFBLEdBQVBwQixPQUFPLENBQUdhLENBQUMsQ0FBQyxjQUFBTyxVQUFBLGVBQVpBLFVBQUEsQ0FBY3JSLEtBQUs7SUFBQSxFQUFDO0lBQ3RFLElBQUlvUixjQUFjLENBQUMxUixNQUFNLEVBQUU7TUFDekIsTUFBTSxJQUFJdVIsS0FBSywrQkFBQWhOLE1BQUEsQ0FBK0JtTixjQUFjLENBQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBRSxDQUFDO0lBQzVFO0VBQ0Y7RUFFQSxPQUFPUCxFQUFFO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU0QsY0FBY0EsQ0FDNUJZLE1BQXlELEVBQ3pEckIsT0FBcUIsRUFDckIxQixTQUFnQyxFQUN2QjtFQUNULElBQUkrQyxNQUFNLENBQUNQLFFBQVEsSUFBSU8sTUFBTSxDQUFDdFIsS0FBSyxFQUFFO0lBQ25DLE9BQU8sSUFBSTtFQUNiO0VBQ0EsSUFBSXNSLE1BQU0sQ0FBQ0MsU0FBUyxFQUFFO0lBQ3BCLE9BQU9ELE1BQU0sQ0FBQ0MsU0FBUyxDQUFDRCxNQUFNLEVBQUVyQixPQUFPLEVBQUUxQixTQUFTLENBQUM7RUFDckQ7RUFDQSxPQUFPLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTaUQsc0JBQXNCQSxDQUNwQ2hELE1BQU0sRUFBQWlELEtBQUEsRUFFTkMsY0FBYyxFQUVkO0VBQUEsSUFBQUMsS0FBQSxPQUFBbEUsZUFBQSxhQUFBZ0UsS0FBQTtJQUhDRyxjQUFjLEdBQUFELEtBQUE7RUFBQSxJQUVmM0IsT0FBaUMsR0FBQWhPLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFdEMsSUFBTTZQLGVBQWUsR0FBR3RTLEtBQUssQ0FBQ0MsT0FBTyxDQUFDa1MsY0FBYyxDQUFDLEdBQUdBLGNBQWMsR0FBRyxDQUFDQSxjQUFjLENBQUM7O0VBRXpGO0VBQ0EsT0FBT0csZUFBZSxDQUFDbFAsR0FBRyxDQUFDLFVBQUFtUCxTQUFTLEVBQUk7SUFDdEMsSUFBTXBELEtBQUssR0FBR29ELFNBQVMsQ0FBQ3BELEtBQUssR0FDekJGLE1BQU0sQ0FBQ3BDLElBQUksQ0FBQyxVQUFBMkYsRUFBRTtNQUFBLE9BQ1p4USxNQUFNLENBQUNDLElBQUksQ0FBQ3NRLFNBQVMsQ0FBQ3BELEtBQUssQ0FBQyxDQUFDK0IsS0FBSyxDQUFDLFVBQUF2RyxHQUFHO1FBQUEsT0FBSTRILFNBQVMsQ0FBQ3BELEtBQUssQ0FBQ3hFLEdBQUcsQ0FBQyxLQUFLNkgsRUFBRSxDQUFDN0gsR0FBRyxDQUFDO01BQUEsRUFBQztJQUFBLENBQzdFLENBQUMsR0FDRCxJQUFJO0lBRVIsSUFBSXdFLEtBQUssS0FBS3hJLFNBQVMsSUFBSThKLE9BQU8sQ0FBQ1ksWUFBWSxFQUFFO01BQy9DLE1BQU0sSUFBSUssS0FBSyx3Q0FBQWhOLE1BQUEsQ0FBd0MrTixJQUFJLENBQUNDLFNBQVMsQ0FBQ0gsU0FBUyxDQUFDcEQsS0FBSyxDQUFDLENBQUUsQ0FBQztJQUMzRjtJQUVBLE9BQU9uTixNQUFNLENBQUNDLElBQUksQ0FBQ29RLGNBQWMsQ0FBQyxDQUFDL0YsTUFBTSxDQUN2QyxVQUFDcUcsSUFBSSxFQUFFaEksR0FBRztNQUFBLE9BQUFuSSxhQUFBLENBQUFBLGFBQUEsS0FDTG1RLElBQUksV0FBQWhRLGdCQUFBLGlCQUNOZ0ksR0FBRyxFQUFHQSxHQUFHLEtBQUssT0FBTyxHQUFHd0UsS0FBSyxHQUFHb0QsU0FBUyxDQUFDNUgsR0FBRyxDQUFDLElBQUkwSCxjQUFjLENBQUMxSCxHQUFHLENBQUM7SUFBQSxDQUN0RSxFQUNGLENBQUMsQ0FDSCxDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTaUksMkJBQTJCQSxDQUN6QzNELE1BQTZCLEVBQzdCakgsUUFBZSxFQUNmNkssVUFBdUIsRUFFVDtFQUFBLElBRGRwQyxPQUFpQyxHQUFBaE8sU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUV0Q1QsTUFBTSxDQUFDOFEsTUFBTSxDQUFDOUssUUFBUSxDQUFDbkMsY0FBYyxDQUFDLENBQUNuRCxPQUFPLENBQUMsVUFBQXFRLEtBQUEsRUFBeUI7SUFBQSxJQUF2QjVELEtBQUssR0FBQTRELEtBQUEsQ0FBTDVELEtBQUs7TUFBRTZELEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO01BQUVySSxHQUFHLEdBQUFvSSxLQUFBLENBQUhwSSxHQUFHO0lBQ2hFLElBQUlzSSxVQUFVO0lBQ2QsSUFBSUosVUFBVSxDQUFDek0sTUFBTSxFQUFFO01BQ3JCLElBQUl5TSxVQUFVLENBQUN6TSxNQUFNLENBQUMrSSxLQUFLLENBQUMsRUFBRTtRQUM1QjhELFVBQVUsR0FBR2hFLE1BQU0sQ0FBQ3BDLElBQUksQ0FDdEIsVUFBQTJGLEVBQUU7VUFBQSxPQUFJSyxVQUFVLENBQUN6TSxNQUFNLElBQUlvTSxFQUFFLENBQUNuUixJQUFJLEtBQUt3UixVQUFVLENBQUN6TSxNQUFNLENBQUMrSSxLQUFLLENBQUMsQ0FBQzlOLElBQUk7UUFBQSxDQUN0RSxDQUFDO01BQ0g7TUFFQSxJQUFNNlIsWUFBWSxHQUFBMVEsYUFBQSxDQUFBQSxhQUFBLEtBQ1p5USxVQUFVLE9BQUF0USxnQkFBQSxpQkFBS3dNLEtBQUssRUFBRzhELFVBQVUsSUFBSSxDQUFDLENBQUMsR0FDdkNKLFVBQVUsQ0FBQ3pNLE1BQU0sQ0FBQzRNLEtBQUssQ0FBQyxPQUFBclEsZ0JBQUEsaUJBQUtxUSxLQUFLLEVBQUdILFVBQVUsQ0FBQ3pNLE1BQU0sQ0FBQzRNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN4RTtNQUNELElBQUloUixNQUFNLENBQUNDLElBQUksQ0FBQ2lSLFlBQVksQ0FBQyxDQUFDL1MsTUFBTSxFQUFFO1FBQ3BDNkgsUUFBUSxDQUFDbUwsaUJBQWlCLENBQUNELFlBQVksQ0FBQztNQUMxQztNQUVBbEwsUUFBUSxDQUFDb0wscUJBQXFCLENBQUN6SSxHQUFHLENBQUM7TUFDbkMsSUFBSThGLE9BQU8sQ0FBQ1ksWUFBWSxFQUFFO1FBQUEsSUFBQWdDLGtCQUFBLEVBQUFDLHFCQUFBO1FBQ3hCLElBQU1DLFNBQVMsSUFBQUYsa0JBQUEsR0FBR1IsVUFBVSxDQUFDek0sTUFBTSxjQUFBaU4sa0JBQUEsZ0JBQUFBLGtCQUFBLEdBQWpCQSxrQkFBQSxDQUFvQmxFLEtBQUssQ0FBQyxjQUFBa0Usa0JBQUEsdUJBQTFCQSxrQkFBQSxDQUE0QmhTLElBQUk7UUFDbEQsSUFBSWtTLFNBQVMsSUFBSUEsU0FBUyxPQUFBRCxxQkFBQSxHQUFLdEwsUUFBUSxDQUFDNUIsTUFBTSxDQUFDK0ksS0FBSyxDQUFDLGNBQUFtRSxxQkFBQSx1QkFBdEJBLHFCQUFBLENBQXdCalMsSUFBSSxHQUFFO1VBQzNELE1BQU0sSUFBSXFRLEtBQUssNENBQUFoTixNQUFBLENBQTRDeUssS0FBSyxDQUFFLENBQUM7UUFDckU7TUFDRjtJQUNGO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBT25ILFFBQVE7QUFDakI7QUFPTyxTQUFTSCx3QkFBd0JBLENBQ3RDckQsUUFBa0IsRUFDbEJzRCxZQUFzQyxFQUd0QztFQUFBLElBRkF2RCxNQUF1RCxHQUFBOUIsU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUM1RGdPLE9BQTZCLEdBQUFoTyxTQUFBLENBQUF0QyxNQUFBLE9BQUFzQyxTQUFBLE1BQUFrRSxTQUFBO0VBRTdCLElBQU1sRCxTQUFrQixHQUFHLEVBQUU7RUFDN0IsSUFBTUMsTUFBdUQsR0FBRyxFQUFFO0VBRWxFYSxNQUFNLENBQUM3QixPQUFPLENBQUMsVUFBQTJILEtBQUssRUFBSTtJQUFBLElBQUFtSixhQUFBO0lBQ3RCLElBQUlDLGFBQTJCLEdBQUcsSUFBSTtJQUV0QyxJQUFJcEosS0FBSyxhQUFMQSxLQUFLLGdCQUFBbUosYUFBQSxHQUFMbkosS0FBSyxDQUFFakUsTUFBTSxjQUFBb04sYUFBQSxlQUFiQSxhQUFBLENBQWVwUCxNQUFNLEVBQUU7TUFDekIsSUFBSUksUUFBUSxDQUFDNkYsS0FBSyxDQUFDakUsTUFBTSxDQUFDaEMsTUFBTSxDQUFDLEVBQUU7UUFDakM7UUFDQXFQLGFBQWEsR0FBR0MscUJBQXFCLENBQ25DbFAsUUFBUSxDQUFDNkYsS0FBSyxDQUFDakUsTUFBTSxDQUFDaEMsTUFBTSxDQUFDLEVBQzdCaUcsS0FBSyxFQUNMdkMsWUFBWSxFQUNaMkksT0FDRixDQUFDO01BQ0g7SUFDRjtJQUVBLElBQUlnRCxhQUFhLEVBQUU7TUFDakJoUSxTQUFTLENBQUNuQixJQUFJLENBQUNtUixhQUFhLENBQUM7SUFDL0IsQ0FBQyxNQUFNO01BQ0w7TUFDQS9QLE1BQU0sQ0FBQ3BCLElBQUksQ0FBQytILEtBQUssQ0FBQztJQUNwQjtFQUNGLENBQUMsQ0FBQztFQUVGLE9BQU87SUFBQzVHLFNBQVMsRUFBVEEsU0FBUztJQUFFQyxNQUFNLEVBQU5BO0VBQU0sQ0FBQztBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTaVEsNkJBQTZCQSxDQUFDM0wsUUFBUSxFQUFFO0VBQy9DO0VBQ0EsSUFBSTRMLFlBQVksR0FBRzVMLFFBQVEsQ0FBQzZMLGVBQWUsQ0FBQyxDQUFDO0VBQzdDO0VBQ0EsSUFBTUMsYUFBYSxHQUFHOUwsUUFBUSxDQUFDNUIsTUFBTSxDQUFDMk4sVUFBVSxHQUM1QyxDQUFDL0wsUUFBUSxDQUFDZ00sb0JBQW9CLElBQUksRUFBRSxFQUFFbkgsSUFBSSxDQUN4QyxVQUFBb0gsT0FBTztJQUFBLE9BQUlBLE9BQU8sQ0FBQ3RKLEdBQUcsS0FBSzNDLFFBQVEsQ0FBQzVCLE1BQU0sQ0FBQzJOLFVBQVU7RUFBQSxDQUN2RCxDQUFDLEdBQ0QsSUFBSTtFQUVSLElBQUlELGFBQWEsRUFBRTtJQUNqQjtJQUNBRixZQUFZLEdBQUcsR0FBQWxQLE1BQUEsS0FBQUMsbUJBQUEsYUFDVG1QLGFBQWEsQ0FBQ3hDLGVBQWUsSUFBSSxFQUFFLE9BQUEzTSxtQkFBQSxhQUNuQ21QLGFBQWEsQ0FBQ0ksZUFBZSxJQUFJLEVBQUUsR0FDdkM1SCxNQUFNLENBQ04sVUFBQ3FHLElBQUksRUFBRWhJLEdBQUc7TUFBQSxPQUFBbkksYUFBQSxDQUFBQSxhQUFBLEtBQ0xtUSxJQUFJLFdBQUFoUSxnQkFBQSxpQkFDTmdJLEdBQUcsRUFBR2lKLFlBQVksQ0FBQ2pKLEdBQUcsQ0FBQztJQUFBLENBQ3hCLEVBQ0YsQ0FBQyxDQUNILENBQUM7RUFDSDtFQUVBLE9BQU9pSixZQUFZO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRixxQkFBcUJBLENBQ25DUyxPQUFvQixFQUNwQnRCLFVBQXVCLEVBQ3ZCL0ssWUFBc0MsRUFFeEI7RUFBQSxJQURkMkksT0FBNEIsR0FBQWhPLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFakMsSUFBT3dNLE1BQU0sR0FBZ0JrRixPQUFPLENBQTdCbEYsTUFBTTtJQUFNN0ssTUFBTSxHQUFJK1AsT0FBTyxDQUFyQjdRLEVBQUU7RUFDakIsSUFBTzhRLElBQUksR0FBSXZCLFVBQVUsQ0FBbEJ1QixJQUFJO0VBQ1gsSUFBTy9DLFlBQVksR0FBSVosT0FBTyxDQUF2QlksWUFBWTtFQUNuQjtFQUNBLElBQUksQ0FBQytDLElBQUksSUFBSSxDQUFDcFMsTUFBTSxDQUFDcVMsU0FBUyxDQUFDQyxjQUFjLENBQUN2VCxJQUFJLENBQUMrRyxZQUFZLEVBQUVzTSxJQUFJLENBQUMsSUFBSSxDQUFDdkIsVUFBVSxDQUFDek0sTUFBTSxFQUFFO0lBQzVGLElBQUlpTCxZQUFZLEVBQUU7TUFDaEIsTUFBTSxJQUFJSyxLQUFLLDZCQUFBaE4sTUFBQSxDQUE0QjBQLElBQUksNEJBQXdCLENBQUM7SUFDMUU7SUFDQSxPQUFPLElBQUk7RUFDYjtFQUVBLElBQUlwTSxRQUFRLEdBQUcsSUFBSUYsWUFBWSxDQUFDc00sSUFBSSxDQUFDLENBQUM7SUFDcEM5USxFQUFFLEVBQUV1UCxVQUFVLENBQUN2UCxFQUFFO0lBQ2pCYyxNQUFNLEVBQU5BLE1BQU07SUFDTm1RLEtBQUssRUFBRTFCLFVBQVUsQ0FBQ3pNLE1BQU0sQ0FBQ21PLEtBQUs7SUFDOUIvTyxLQUFLLEVBQUVxTixVQUFVLENBQUN6TSxNQUFNLENBQUNaLEtBQUs7SUFDOUJnUCxTQUFTLEVBQUUzQixVQUFVLENBQUN6TSxNQUFNLENBQUNvTyxTQUFTO0lBQ3RDQyxNQUFNLEVBQUU1QixVQUFVLENBQUN6TSxNQUFNLENBQUNxTyxNQUFNO0lBQ2hDVixVQUFVLEVBQUVsQixVQUFVLENBQUN6TSxNQUFNLENBQUMyTixVQUFVO0lBQ3hDVyxjQUFjLEVBQUU3QixVQUFVLENBQUN6TSxNQUFNLENBQUNzTztFQUNwQyxDQUFDLENBQUM7RUFFRixJQUFNZCxZQUFZLEdBQUdELDZCQUE2QixDQUFDM0wsUUFBUSxDQUFDO0VBRTVELElBQUloRyxNQUFNLENBQUNDLElBQUksQ0FBQzJSLFlBQVksQ0FBQyxFQUFFO0lBQzdCLElBQU1sRCxPQUFPLEdBQUdKLHlCQUF5QixDQUN2Q3JCLE1BQU0sRUFDTjRELFVBQVUsQ0FBQ3pNLE1BQU0sQ0FBQ3NLLE9BQU8sRUFDekJrRCxZQUFZLEVBQ1puRCxPQUNGLENBQUM7SUFDRCxJQUFJQyxPQUFPLEVBQUU7TUFDWDFJLFFBQVEsQ0FBQ21MLGlCQUFpQixDQUFDO1FBQ3pCekMsT0FBTyxFQUFBbE8sYUFBQSxDQUFBQSxhQUFBLEtBQ0Z3RixRQUFRLENBQUM1QixNQUFNLENBQUNzSyxPQUFPLEdBQ3ZCQSxPQUFPO01BRWQsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxNQUFNLElBQUksQ0FBQ0QsT0FBTyxDQUFDMUksZ0JBQWdCLEVBQUU7TUFDcEMsT0FBTyxJQUFJO0lBQ2I7RUFDRjtFQUVBLElBQU13SyxTQUFTLEdBQ2JNLFVBQVUsQ0FBQ3pNLE1BQU0sQ0FBQ21NLFNBQVMsSUFBSXZLLFFBQVEsQ0FBQzVCLE1BQU0sQ0FBQ21NLFNBQVMsR0FDcEROLHNCQUFzQixDQUNwQmhELE1BQU0sRUFDTmpILFFBQVEsQ0FBQzVCLE1BQU0sQ0FBQ21NLFNBQVMsRUFDekJNLFVBQVUsQ0FBQ3pNLE1BQU0sQ0FBQ21NLFNBQVMsRUFDM0I5QixPQUNGLENBQUMsR0FDRHpJLFFBQVEsQ0FBQzVCLE1BQU0sQ0FBQ21NLFNBQVM7O0VBRS9CO0VBQ0EsSUFBTW9DLGVBQWUsR0FBRzNNLFFBQVEsQ0FBQzRNLGVBQWUsQ0FDOUM1TSxRQUFRLENBQUM1QixNQUFNLENBQUN5TyxTQUFTLEVBQ3pCaEMsVUFBVSxDQUFDek0sTUFBTSxDQUFDeU8sU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUNqQztJQUNFQyxXQUFXLEVBQUUsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCO0VBQ2hELENBQ0YsQ0FBQzs7RUFFRDtFQUNBLElBQU1ELFNBQVMsR0FBRzdNLFFBQVEsQ0FBQytNLGlCQUFpQixHQUN4Qy9NLFFBQVEsQ0FBQytNLGlCQUFpQixDQUFDWixPQUFPLEVBQUVRLGVBQWUsQ0FBQyxHQUNwREEsZUFBZTtFQUVuQjNNLFFBQVEsQ0FBQ21MLGlCQUFpQixDQUFDO0lBQ3pCMEIsU0FBUyxFQUFUQSxTQUFTO0lBQ1R0QyxTQUFTLEVBQVRBO0VBQ0YsQ0FBQyxDQUFDOztFQUVGO0VBQ0E7RUFDQTtFQUNBdkssUUFBUSxHQUFHNEssMkJBQTJCLENBQUMzRCxNQUFNLEVBQUVqSCxRQUFRLEVBQUU2SyxVQUFVLEVBQUVwQyxPQUFPLENBQUM7RUFFN0UsSUFBSVksWUFBWSxFQUFFO0lBQ2hCLElBQUksQ0FBQ3JKLFFBQVEsQ0FBQzZHLGFBQWEsQ0FBQyxDQUFDLEVBQUU7TUFDN0IsTUFBTSxJQUFJNkMsS0FBSyxnQ0FBQWhOLE1BQUEsQ0FBZ0NzRCxRQUFRLENBQUMxRSxFQUFFLENBQUUsQ0FBQztJQUMvRDtFQUNGO0VBRUEsT0FBTzBFLFFBQVE7QUFDakI7QUFFTyxTQUFTZ04sV0FBV0EsQ0FBcUJoUyxLQUFRLEVBQUVpUyxXQUF3QixFQUFFO0VBQUEsSUFBQUMsb0JBQUE7RUFDbEYsSUFBSSxDQUFDRCxXQUFXLEVBQUU7SUFDaEIsT0FBT2pTLEtBQUs7RUFDZDtFQUNBLE9BQUFSLGFBQUEsQ0FBQUEsYUFBQSxLQUNLUSxLQUFLO0lBQ1JtUyxNQUFNLEVBQUEzUyxhQUFBLENBQUFBLGFBQUEsS0FDRFEsS0FBSyxDQUFDbVMsTUFBTTtNQUNmQyxRQUFRLEtBQUExUSxNQUFBLEtBQUFDLG1CQUFBLGFBQU0zQixLQUFLLENBQUNtUyxNQUFNLENBQUNDLFFBQVEsT0FBQXpRLG1CQUFBLGFBQU1zUSxXQUFXLENBQUNHLFFBQVEsSUFBSSxFQUFFLEVBQUU7TUFDckU7TUFDQUMsT0FBTyxHQUFBSCxvQkFBQSxHQUFFRCxXQUFXLENBQUNJLE9BQU8sY0FBQUgsb0JBQUEsY0FBQUEsb0JBQUEsR0FBSWxTLEtBQUssQ0FBQ21TLE1BQU0sQ0FBQ0U7SUFBTztFQUNyRDtBQUVMO0FBRUEsU0FBU0Msb0JBQW9CQSxDQUFDMUosT0FBc0IsRUFBZTtFQUNqRSxPQUFPQSxPQUFPLENBQUNVLE1BQU0sQ0FDbkIsVUFBQ0MsR0FBRyxFQUFFZ0osVUFBVSxFQUFLO0lBQ25CLE9BQUEvUyxhQUFBLENBQUFBLGFBQUEsS0FDSytKLEdBQUc7TUFDTjZJLFFBQVEsS0FBQTFRLE1BQUEsS0FBQUMsbUJBQUEsYUFBTTRILEdBQUcsQ0FBQzZJLFFBQVEsT0FBQXpRLG1CQUFBLGFBQU00USxVQUFVLENBQUNILFFBQVEsSUFBSSxFQUFFO0lBQUU7RUFFL0QsQ0FBQyxFQUNEO0lBQ0U7SUFDQTtJQUNBO0lBQ0FBLFFBQVEsRUFBRSxFQUFFO0lBQ1pDLE9BQU8sRUFBRXpKLE9BQU8sQ0FBQ0ssSUFBSSxDQUFDLFVBQUFELENBQUM7TUFBQSxPQUFJQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRXFKLE9BQU87SUFBQTtFQUN2QyxDQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNHLG9CQUFvQkEsQ0FBQ3hTLEtBQWUsRUFBRXlTLGNBQXdCLEVBQVk7RUFDeEYsSUFBTS9LLE1BQU0sR0FBQWxJLGFBQUEsQ0FBQUEsYUFBQSxLQUNQUSxLQUFLLENBQUN3QixRQUFRLEdBQ2RpUixjQUFjLENBQ2xCO0VBRUQsSUFBSXpWLEtBQUssQ0FBQ0MsT0FBTyxDQUFDK0MsS0FBSyxDQUFDMFMsb0JBQW9CLENBQUMsRUFBRTtJQUM3QztJQUNBLElBQU1DLGFBQWEsR0FBRzNULE1BQU0sQ0FBQ0MsSUFBSSxDQUFDeUksTUFBTSxDQUFDLENBQUN2SSxNQUFNLENBQzlDLFVBQUFtQixFQUFFO01BQUEsSUFBQXNTLHFCQUFBO01BQUEsT0FBSSxHQUFBQSxxQkFBQSxHQUFDNVMsS0FBSyxDQUFDMFMsb0JBQW9CLGNBQUFFLHFCQUFBLGVBQTFCQSxxQkFBQSxDQUE0QjVRLFFBQVEsQ0FBQzFCLEVBQUUsQ0FBQztJQUFBLENBQ2pELENBQUM7SUFDRCxPQUFPLEdBQUFvQixNQUFBLEtBQUFDLG1CQUFBLGFBQUkzQixLQUFLLENBQUMwUyxvQkFBb0IsT0FBQS9RLG1CQUFBLGFBQUtnUixhQUFhLEdBQUVySixNQUFNLENBQzdELFVBQUNxRyxJQUFJLEVBQUV2TyxNQUFNO01BQUEsT0FBQTVCLGFBQUEsQ0FBQUEsYUFBQSxLQUNSbVEsSUFBSSxHQUNIakksTUFBTSxDQUFDdEcsTUFBTSxDQUFDLE9BQUF6QixnQkFBQSxpQkFBS3lCLE1BQU0sRUFBR3NHLE1BQU0sQ0FBQ3RHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUFBLENBQ3BELEVBQ0YsQ0FBQyxDQUNILENBQUM7RUFDSDtFQUVBLE9BQU9zRyxNQUFNO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMyQiw2QkFBNkJBLENBQUl3SixHQUFRLEVBQVk7RUFBQSxJQUFBQyxNQUFBO0VBQzVELElBQU1DLE1BQU0sR0FBRyxJQUFJQyxHQUFHLENBQUMsQ0FBQztFQUN4QkgsR0FBRyxDQUFDblQsT0FBTyxDQUFDLFVBQUFqQyxLQUFLLEVBQUk7SUFDbkIsSUFBSSxJQUFBd1YsK0JBQWtCLEVBQUN4VixLQUFLLENBQUMsRUFBRTtNQUM3QixJQUFJLENBQUNzVixNQUFNLENBQUNHLEdBQUcsQ0FBQ3pWLEtBQUssQ0FBQyxFQUFFO1FBQ3RCc1YsTUFBTSxDQUFDSSxHQUFHLENBQUMxVixLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQ3RCLENBQUMsTUFBTTtRQUNMc1YsTUFBTSxDQUFDSSxHQUFHLENBQUMxVixLQUFLLEVBQUVzVixNQUFNLENBQUNLLEdBQUcsQ0FBQzNWLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMxQztJQUNGO0VBQ0YsQ0FBQyxDQUFDO0VBQ0Y7RUFDQSxJQUFJc1YsTUFBTSxDQUFDL0ksSUFBSSxLQUFLLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUk7RUFDYjtFQUNBLFFBQUE4SSxNQUFBLE9BQUFuUixtQkFBQSxhQUFXb1IsTUFBTSxDQUFDaEksT0FBTyxDQUFDLENBQUMsZUFBQStILE1BQUEsdUJBQXBCQSxNQUFBLENBQXVCeEosTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRXZMLElBQUk7SUFBQSxPQUFNQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUd1TCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUd2TCxJQUFJLEdBQUd1TCxHQUFHO0VBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pGO0FBRU8sSUFBTThKLGlCQUF1QyxHQUFBQyxPQUFBLENBQUFELGlCQUFBLEdBQUcsQ0FDckQ7RUFDRUUsS0FBSyxFQUFFdE4sV0FBVztFQUNsQnVOLElBQUksRUFBRSxRQUFRO0VBQ2RDLFdBQVcsRUFBRSxpQkFBaUI7RUFDOUJDLGFBQWEsRUFBRTtBQUNqQixDQUFDLEVBQ0Q7RUFDRUgsS0FBSyxFQUFFeFQsWUFBWTtFQUNuQnlULElBQUksRUFBRSxTQUFTO0VBQ2ZDLFdBQVcsRUFBRSxrQkFBa0I7RUFDL0JDLGFBQWEsRUFBRSxxQkFBcUI7RUFDcENDLHVCQUF1QixFQUFFL1I7QUFDM0IsQ0FBQyxFQUNEO0VBQ0UyUixLQUFLLEVBQUVqSSxZQUFZO0VBQ25Ca0ksSUFBSSxFQUFFO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VELEtBQUssRUFBRS9MLGlCQUFpQjtFQUN4QmdNLElBQUksRUFBRSxtQkFBbUI7RUFDekJDLFdBQVcsRUFBRSx1QkFBdUI7RUFDcENFLHVCQUF1QixFQUFFbkosNEJBQTRCO0VBQ3JEb0osWUFBWSxFQUFFbEwsd0JBQXdCO0VBQ3RDbUwsY0FBYyxFQUFFbEw7QUFDbEIsQ0FBQyxFQUNEO0VBQUM0SyxLQUFLLEVBQUVuSCxrQkFBa0I7RUFBRW9ILElBQUksRUFBRSxlQUFlO0VBQUVLLGNBQWMsRUFBRXRIO0FBQTJCLENBQUMsRUFDL0Y7RUFDRWdILEtBQUssRUFBRS9HLG9CQUFvQjtFQUMzQmdILElBQUksRUFBRSxpQkFBaUI7RUFDdkJLLGNBQWMsRUFBRWxIO0FBQ2xCLENBQUMsRUFDRDtFQUFDNEcsS0FBSyxFQUFFM0ksY0FBYztFQUFFNEksSUFBSSxFQUFFLFdBQVc7RUFBRUMsV0FBVyxFQUFFO0FBQXFCLENBQUMsRUFDOUU7RUFBQ0YsS0FBSyxFQUFFM0csb0JBQW9CO0VBQUU0RyxJQUFJLEVBQUUsaUJBQWlCO0VBQUVLLGNBQWMsRUFBRTVHO0FBQXVCLENBQUMsRUFDL0Y7RUFBQ3NHLEtBQUssRUFBRXZCLFdBQVc7RUFBRXdCLElBQUksRUFBRSxRQUFRO0VBQUVLLGNBQWMsRUFBRXZCO0FBQW9CLENBQUMsQ0FDM0UiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
1032
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2VmZmVjdHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX3NjaGVtYXMiLCJfdGFibGUiLCJfbGF5ZXJVdGlscyIsIl9leGNsdWRlZCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3RvUHJvcGVydHlLZXkiLCJpIiwiX3RvUHJpbWl0aXZlIiwiX3R5cGVvZiIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIm1lcmdlRmlsdGVycyIsInN0YXRlIiwiZmlsdGVyc1RvTWVyZ2UiLCJmcm9tQ29uZmlnIiwicHJlc2VydmVGaWx0ZXJPcmRlciIsIm1hcCIsImwiLCJpZCIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwidmFsaWRhdGVkIiwiZmFpbGVkIiwidXBkYXRlZERhdGFzZXRzIiwidXBkYXRlZEZpbHRlcnMiLCJpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyIiwiZmlsdGVycyIsInJlc2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWxzIiwiZGF0YXNldHNUb0ZpbHRlciIsInVuaXEiLCJmbGF0dGVuRGVlcCIsImRhdGFJZCIsImZpbHRlcmVkIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsImxheWVycyIsImRhdGFzZXRzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJyZXBsYWNlRmlsdGVyRGF0YXNldElkcyIsInNhdmVkRmlsdGVyIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlZCIsImluY2x1ZGVzIiwiX2ZpbHRlciRwbG90VHlwZSIsIm5ld0RhdGFJZCIsImQiLCJwbG90VHlwZSIsImNvbG9yc0J5RGF0YUlkIiwiX2ZpbHRlciRwbG90VHlwZTIiLCJfcmVmIiwiY29sb3IiLCJyZXN0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24iLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJDVVJSRU5UX1ZFUlNJT04iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsInVuZGVmaW5lZCIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJpdGVtIiwiZXhwZWN0ZWRJZHgiLCJpbmRleE9mIiwiaW5zZXJ0QXQiLCJwcmVjZWVkSWR4IiwiX2xvb3AiLCJwcmVjZWVkSXRlbUlkIiwiZmluZEluZGV4IiwiYXJyYXlJbnNlcnQiLCJlcnIiLCJjcmVhdGVMYXllckZyb21Db25maWciLCJwYXJzZWRMYXllckNvbmZpZyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YSIsInZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFsbG93RW1wdHlDb2x1bW4iLCJuZXdMYXllciIsInVwZGF0ZUxheWVyRG9tYWluIiwic2VyaWFsaXplRmlsdGVyIiwibmV3RmlsdGVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRmIiwic2VyaWFsaXplZFZpc1N0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJzZXJpYWxpemVMYXllciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkbCIsInNlcmlhbGl6ZUVmZmVjdCIsIm5ld0VmZmVjdCIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZSIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbjIiLCJzYXZlZFN0YXRlIiwiZ2V0Q29uZmlnVG9TYXZlIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwicHJlc2VydmVMYXllck9yZGVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsIl9pbnNlcnRMYXllckF0UmlnaHRPciIsImluc2VydExheWVyQXRSaWdodE9yZGVyIiwibmV3TGF5ZXJPcmRlciIsIm5ld0xheWVycyIsImxheWVyVG9CZU1lcmdlZCIsImN1cnJlbnRMYXllcnMiLCJsYXllcnNUb0luc2VydCIsImN1cnJlbnRPcmRlciIsImN1cnJlbnRMYXllclF1ZXVlIiwiZmluZEJ5SWQiLCJsYXllciIsIkJvb2xlYW4iLCJuZXdMYXllck9yZGVyUXVldWUiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsImtleSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VycmVudENvbmZpZyIsIl9yZWYyIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIl9tZXJnZUludGVyYWN0aW9uVG9vbCIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsIl9sb29wMiIsInRvQmVDb21iaW5lZFByb3BzIiwiYyIsInNvbWUiLCJwIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsImdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlIiwicmVkdWNlIiwiYWNjIiwibmV4dEZpZWxkc1RvU2hvdyIsIl9sb29wMyIsIm5leHREYXRhSWRLZXkiLCJuZXh0VG9vbHRpcEZpZWxkcyIsIm5leHRURiIsImZpbmQiLCJfcmVmMyIsIl9hZ2dyZWdhdGUiLCJzaXplIiwiYWdncmVnYXRlIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJtYXhpbXVtIiwibGltaXRTZWFyY2giLCJfdW5tZXJnZWQkdG9vbHRpcCIsIl91bm1lcmdlZCR0b29sdGlwMiIsIl9zdGF0ZSRpbnRlcmFjdGlvblRvQiIsIl91bm1lcmdlZCR0b29sdGlwMyIsInJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfaW50ZXJhY3Rpb25Db25maWckdG8iLCJfaW50ZXJhY3Rpb25Db25maWckdG8yIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJzbSIsImVudHJpZXMiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkyIiwicHVzaFRvIiwiZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsIm1lcmdlRWZmZWN0cyIsIm5ld0VmZmVjdHMiLCJlZmZlY3QiLCJjcmVhdGVFZmZlY3QiLCJkZWVwbWVyZ2UiLCJhbGwiLCJpc0NvbmZpZ0FjdGl2ZSIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJleGlzdGluZ0lkcyIsIlNldCIsInZhbGlkQW5ub3RhdGlvbnMiLCJoYXMiLCJpc0Fubm90YXRpb25LaW5kIiwia2luZCIsImFuY2hvclBvaW50IiwiaXNWaXNpYmxlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJsYWJlbCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiTEFZRVJfQkxFTkRJTkdTIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJPVkVSTEFZX0JMRU5ESU5HUyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY2IiwiYWxsQ29sRm91bmQiLCJldmVyeSIsInZhbGlkYXRlQ29sdW1uIiwicnYiLCJ0aHJvd09uRXJyb3IiLCJyZXF1aXJlZENvbHVtbnMiLCJrIiwib3B0aW9uYWwiLCJtaXNzaW5nQ29sdW1ucyIsIkVycm9yIiwiam9pbiIsImNvbmZpZ0NvbHVtbnMiLCJpbnZhbGlkQ29sdW1ucyIsIl9jb2x1bW5zJGsiLCJjb2x1bW4iLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwiX3JlZjciLCJzYXZlZFRleHRMYWJlbCIsIl9yZWY4IiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJ0ZXh0TGFiZWwiLCJmZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY2N1IiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwic2F2ZWRMYXllciIsInZhbHVlcyIsIl9yZWY5Iiwic2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfc2F2ZWRMYXllciRjb25maWciLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJvcHRpb25hbENvbHVtbnMiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaGlkZGVuIiwiaGlnaGxpZ2h0Q29sb3IiLCJjb3BpZWRWaXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJ2aXNDb25maWciLCJzaGFsbG93Q29weSIsInZhbGlkYXRlVmlzQ29uZmlnIiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsIl9zYXZlZEVkaXRvciR2aXNpYmxlIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJ2aXNpYmxlIiwiY29tYmluZUVkaXRvckNvbmZpZ3MiLCJuZXh0Q29uZmlnIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJuZXdEYXRhRW50cmllcyIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwibmV3RGF0YXNldElkcyIsIl9zdGF0ZSRwcmVzZXJ2ZURhdGFzZSIsImFyciIsIl9yZWYxMyIsInRhbGx5cyIsIk1hcCIsIm5vdE51bGxvclVuZGVmaW5lZCIsInNldCIsImdldCIsIlZJU19TVEFURV9NRVJHRVJTIiwiZXhwb3J0cyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIiwiY29tYmluZUNvbmZpZ3MiXSwic291cmNlcyI6WyIuLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gvdW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gvcGljayc7XG5pbXBvcnQgZmxhdHRlbkRlZXAgZnJvbSAnbG9kYXNoL2ZsYXR0ZW5EZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzLFxuICBmaW5kQnlJZCxcbiAgYWdncmVnYXRlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge1xuICBBR0dSRUdBVElPTl9UWVBFUyxcbiAgTEFZRVJfQkxFTkRJTkdTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgaXNBbm5vdGF0aW9uS2luZCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCBWaXNTdGF0ZSwgVmlzU3RhdGVNZXJnZXJzLCBLZXBsZXJHTFNjaGVtYUNsYXNzfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBQYXJzZWRMYXllcixcbiAgUGFyc2VkVmlzU3RhdGUsXG4gIFNhdmVkSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBJbmZvLFxuICBTYXZlZEVkaXRvcixcbiAgUGFyc2VkQ29uZmlnLFxuICBGaWx0ZXIsXG4gIEVmZmVjdCBhcyBFZmZlY3RUeXBlLFxuICBQYXJzZWRFZmZlY3QsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW4sXG4gIFBhcnNlZEZpbHRlcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgU2F2ZWRBbmltYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlLCBEYXRhc2V0cywgYXNzaWduR3B1Q2hhbm5lbHMsIHJlc2V0RmlsdGVyR3B1TW9kZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7Z2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgbGV0IHBsb3RUeXBlO1xuICAgICAgLy8gVE9ETzogbW9yZSBnZW5lcmljIGFwcHJvYWNoIHRvIHNhdmUgcGxvdFR5cGUuY29sb3JzQnlEYXRhSWRcbiAgICAgIGlmIChmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkPy5bZGF0YUlkXSkge1xuICAgICAgICAvLyByZXBsYWNlIGNvbG9yQnlEYXRhSWQgaW4gZmlsdGVyLnBsb3RUeXBlXG4gICAgICAgIGNvbnN0IHtbZGF0YUlkXTogY29sb3IsIC4uLnJlc3R9ID0gZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZCB8fCB7fTtcbiAgICAgICAgcGxvdFR5cGUgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgICAgICAgIGNvbG9yc0J5RGF0YUlkOiB7XG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgW2RhdGFJZFRvVXNlXTogY29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXBsYWNlZC5wdXNoKHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZCxcbiAgICAgICAgLi4uKHBsb3RUeXBlID8ge3Bsb3RUeXBlfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gZXhwb3J0ZWQgbGF5ZXIgY29uZmlndXJhdGlvbiBjb250YWlucyB2aXN1YWxDaGFubmVscyBwcm9wZXJ0eVxuICByZXR1cm4gbGF5ZXJDb25maWc/LnZpc3VhbENoYW5uZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMYXllckNvbmZpZyhcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzLFxuICBsYXllckNvbmZpZzogYW55XG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIC8vIGFzc3VtZSB0aGUgbGF5ZXIgY29uZmlnIGlzIGN1cnJlbnQgdmVyc2lvblxuICBjb25zdCBzYXZlZENvbmZpZyA9IHtcbiAgICB2ZXJzaW9uOiBDVVJSRU5UX1ZFUlNJT04sXG4gICAgY29uZmlnOiB7XG4gICAgICB2aXNTdGF0ZToge2xheWVyczogW2xheWVyQ29uZmlnXSwgbGF5ZXJPcmRlcjogW2xheWVyQ29uZmlnLmlkXX1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkQ29uZmlnKT8udmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICBjdXJyZW50SXRlbXM6IEZpbHRlcltdLFxuICBpdGVtczogRmlsdGVyW10sXG4gIHByZXNlcnZlZE9yZGVyOiBhbnlbXSA9IFtdLFxuICBkZWZhdWx0U3RhcnQ/OiBib29sZWFuXG4pIHtcbiAgbGV0IG5ld0l0ZW1zID0gWy4uLmN1cnJlbnRJdGVtc107XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRJZHggPSBwcmVzZXJ2ZWRPcmRlci5pbmRleE9mKGl0ZW0uaWQpO1xuICAgIC8vIGluc2VydEF0IHRoZSBlbmQgYnkgZGVmYXVsdFxuICAgIGxldCBpbnNlcnRBdCA9IGRlZmF1bHRTdGFydCA/IDAgOiBuZXdJdGVtcy5sZW5ndGg7XG4gICAgaWYgKGV4cGVjdGVkSWR4ID4gMCkge1xuICAgICAgLy8gbG9vayBmb3IgbGF5ZXIgdG8gaW5zZXJ0IGFmdGVyXG4gICAgICBsZXQgaSA9IGV4cGVjdGVkSWR4ICsgMTtcbiAgICAgIGxldCBwcmVjZWVkSWR4ID0gLTE7XG4gICAgICB3aGlsZSAoaS0tID4gMCAmJiBwcmVjZWVkSWR4IDwgMCkge1xuICAgICAgICAvLyBrZWVwIGxvb2tpbmcgZm9yIHByZWNlZWQgbGF5ZXIgdGhhdCBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgICBjb25zdCBwcmVjZWVkSXRlbUlkID0gcHJlc2VydmVkT3JkZXJbaSAtIDFdO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbmV3SXRlbXMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gcHJlY2VlZEl0ZW1JZCk7XG4gICAgICB9XG4gICAgICBpZiAocHJlY2VlZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIGlmIGZvdW5kXG4gICAgICAgIGluc2VydEF0ID0gcHJlY2VlZElkeCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld0l0ZW1zID0gYXJyYXlJbnNlcnQobmV3SXRlbXMsIGluc2VydEF0LCBpdGVtKTtcbiAgfVxuICByZXR1cm4gbmV3SXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGU6IFZpc1N0YXRlLCBsYXllckNvbmZpZzogYW55KTogTGF5ZXIgfCBudWxsIHtcbiAgLy8gY2hlY2sgaWYgdGhlIGxheWVyIGNvbmZpZyBpcyBwYXJzZWRcbiAgY29uc3QgcGFyc2VkTGF5ZXJDb25maWcgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZylcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBsYXllckNvbmZpZylcbiAgICA6IGxheWVyQ29uZmlnO1xuXG4gIGlmICghcGFyc2VkTGF5ZXJDb25maWcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBmaXJzdCB2YWxpZGF0ZSBjb25maWcgYWdhaW5zdCBkYXRhc2V0XG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIFtwYXJzZWRMYXllckNvbmZpZ10sXG4gICAge2FsbG93RW1wdHlDb2x1bW46IHRydWV9XG4gICk7XG5cbiAgaWYgKGZhaWxlZD8ubGVuZ3RoIHx8ICF2YWxpZGF0ZWQubGVuZ3RoKSB7XG4gICAgLy8gZmFpbGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlZFswXTtcbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBmaWx0ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyKFxuICBuZXdGaWx0ZXI6IEZpbHRlcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRGaWx0ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZSh7ZmlsdGVyczogW25ld0ZpbHRlcl19LCBzY2hlbWEpO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5maWx0ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBsYXllciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVMYXllcihcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2xheWVyczogW25ld0xheWVyXSwgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZWZmZWN0IGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVmZmVjdChcbiAgbmV3RWZmZWN0OiBFZmZlY3RUeXBlLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEVmZmVjdCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtlZmZlY3RzOiBbbmV3RWZmZWN0XSwgZWZmZWN0T3JkZXI6IFtuZXdFZmZlY3QuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZWZmZWN0cz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCB2aXMgc3RhdGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWaXNTdGF0ZShcbiAgdmlzU3RhdGU6IFBhcnRpYWw8VmlzU3RhdGU+LFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZFZpc1N0YXRlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2F2ZWRTdGF0ZSA9IHNjaGVtYS5nZXRDb25maWdUb1NhdmUoe1xuICAgIHZpc1N0YXRlXG4gIH0pO1xuICByZXR1cm4gc2F2ZWRTdGF0ZSA/IHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkU3RhdGUpPy52aXNTdGF0ZSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJzIGZyb20gZGUtc2VyaWFsaXplZCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBnZXRMYXllck9yZGVyRnJvbUxheWVycyhsYXllcnNUb01lcmdlKVxuICAgIDogc3RhdGUucHJlc2VydmVMYXllck9yZGVyO1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGF5ZXJzVG9NZXJnZSkgfHwgIWxheWVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRvbid0IG1lcmdlIGxheWVyIGlmIGRhdGFzZXQgaXMgYmVpbmcgbWVyZ2VkXG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJzZWRMYXllcltdID0gW107XG4gIGNvbnN0IHRvTWVyZ2U6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgbGF5ZXJzVG9NZXJnZS5mb3JFYWNoKChsOiBQYXJzZWRMYXllcikgPT4ge1xuICAgIGlmIChsPy5jb25maWc/LmRhdGFJZCAmJiBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tsLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICB1bm1lcmdlZC5wdXNoKGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b01lcmdlLnB1c2gobCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7dmFsaWRhdGVkOiBtZXJnZWRMYXllciwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgdG9NZXJnZVxuICApO1xuICB1bm1lcmdlZC5wdXNoKC4uLmZhaWxlZCk7XG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlcixcbiAgICBsYXllclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5sYXllclRvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gIGN1cnJlbnRMYXllcnMsXG4gIGxheWVyc1RvSW5zZXJ0LFxuICBjdXJyZW50T3JkZXIsXG4gIHByZXNlcnZlZE9yZGVyOiBzdHJpbmdbXSA9IFtdXG4pIHtcbiAgaWYgKCFsYXllcnNUb0luc2VydD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtuZXdMYXllcnM6IGN1cnJlbnRMYXllcnMsIG5ld0xheWVyT3JkZXI6IGN1cnJlbnRPcmRlcn07XG4gIH1cbiAgLy8gcGVyc2VydmVkT3JkZXIgWydhJywgJ2InLCAnYyddO1xuICAvLyBsYXllck9yZGVyIFsnYScsICdiJywgJ2MnXVxuICBjb25zdCBjdXJyZW50TGF5ZXJRdWV1ZSA9IGN1cnJlbnRPcmRlclxuICAgIC5tYXAoaWQgPT4gZmluZEJ5SWQoaWQpKGN1cnJlbnRMYXllcnMpKVxuICAgIC5maWx0ZXIobGF5ZXIgPT4gQm9vbGVhbihsYXllcikpO1xuICBjb25zdCBuZXdMYXllcnMgPSBjdXJyZW50TGF5ZXJzLmNvbmNhdChsYXllcnNUb0luc2VydCk7XG4gIGNvbnN0IG5ld0xheWVyT3JkZXJRdWV1ZSA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgY3VycmVudExheWVyUXVldWUsXG4gICAgbGF5ZXJzVG9JbnNlcnQsXG4gICAgcHJlc2VydmVkT3JkZXIsXG4gICAgdHJ1ZVxuICApO1xuXG4gIC8vIHJlY29uc3RydWN0IGxheWVyT3JkZXIgYWZ0ZXIgaW5zZXJ0XG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBnZXRMYXllck9yZGVyRnJvbUxheWVycyhuZXdMYXllck9yZGVyUXVldWUpO1xuXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcixcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+IHwgdW5kZWZpbmVkXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkOiBOZXN0ZWRQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG5cbiAgaWYgKGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICAgIChPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpIGFzIEFycmF5PGtleW9mIFNhdmVkSW50ZXJhY3Rpb25Db25maWc+KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID1cbiAgICAgICAga2V5ID09PSAndG9vbHRpcCcgfHwga2V5ID09PSAnYnJ1c2gnIHx8IGtleSA9PT0gJ2dlb2NvZGVyJ1xuICAgICAgICAgID8gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWdcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHtlbmFibGVkLCAuLi5jb25maWdTYXZlZH0gPSBpbnRlcmFjdGlvblRvQmVNZXJnZWRba2V5XSB8fCB7fTtcblxuICAgICAgbGV0IGNvbmZpZ1RvTWVyZ2UgPSBjb25maWdTYXZlZDtcblxuICAgICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29uZmlnU2F2ZWQgYXMgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1sndG9vbHRpcCddXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUludGVyYWN0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnW10pOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnIHtcbiAgY29uc3QgY29tYmluZWQgPSB7Li4uY29uZmlnc1swXX07XG4gIC8vIGhhbmRsZSBlYWNoIHByb3BlcnR5IGtleSBvZiBhbiBgSW50ZXJhY3Rpb25Db25maWdgLCBlLmcuIHRvb2x0aXAsIGdlb2NvZGVyLCBicnVzaCwgY29vcmRpbmF0ZVxuICAvLyBieSBjb21iaW5pbmcgdmFsdWVzIGZvciBlYWNoIGFtb25nIGFsbCBwYXNzZWQgaW4gY29uZmlnc1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGNvbWJpbmVkKSB7XG4gICAgY29uc3QgdG9CZUNvbWJpbmVkUHJvcHMgPSBjb25maWdzLm1hcChjID0+IGNba2V5XSk7XG5cbiAgICAvLyBhbGwgb2YgdGhlc2UgaGF2ZSBhbiBlbmFibGVkIGJvb2xlYW5cbiAgICBjb21iaW5lZFtrZXldID0ge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgZW5hYmxlZCB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGVuYWJsZWQ6IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5lbmFibGVkKVxuICAgIH07XG5cbiAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGNvbXBhcmVNb2RlIHZhbHVlcyB0cnVlP1xuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlTW9kZSA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5jb21wYXJlTW9kZSk7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgY29tcGFyZSB0eXBlIG1vZGUsIGl0IHdpbGwgYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlXG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVUeXBlID0gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoXG4gICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHAuY29tcGFyZVR5cGUpXG4gICAgICApO1xuXG4gICAgICAvLyBjb21iaW5lIGZpZWxkc1RvU2hvdyBhbW9uZyBhbGwgZGF0YXNldCBpZHNcbiAgICAgIGNvbWJpbmVkW2tleV0uZmllbGRzVG9TaG93ID0gdG9CZUNvbWJpbmVkUHJvcHNcbiAgICAgICAgLm1hcChwID0+IHAuZmllbGRzVG9TaG93KVxuICAgICAgICAucmVkdWNlKChhY2MsIG5leHRGaWVsZHNUb1Nob3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5leHREYXRhSWRLZXkgaW4gbmV4dEZpZWxkc1RvU2hvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRvb2x0aXBGaWVsZHMgPSBuZXh0RmllbGRzVG9TaG93W25leHREYXRhSWRLZXldO1xuICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFzZXQgaWQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHRoZW4gYWRkIGl0IHdpdGggaXRzIHRvb2x0aXAgZmllbGRzXG4gICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XSA9IG5leHRUb29sdGlwRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkYXRhc2V0IGlkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gc28gb25seSBhZGQgdGhlIG5leHQgdG9vbHRpcCBmaWVsZHMgZm9yIHRoaXMgZGF0YXNldCdzIGFycmF5IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQsXG4gICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSB0b29sdGlwRmllbGQubmFtZSBwcm9wZXJ0eSBmb3IgdW5pcXVlbmVzc1xuICAgICAgICAgICAgICBuZXh0VG9vbHRpcEZpZWxkcy5mb3JFYWNoKG5leHRURiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0uZmluZCgoe25hbWV9KSA9PiBuZXh0VEYubmFtZSA9PT0gbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XS5wdXNoKG5leHRURik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdicnVzaCcpIHtcbiAgICAgIC8vIGtlZXAgdGhlIGJpZ2dlc3QgYnJ1c2ggc2l6ZVxuICAgICAgY29tYmluZWRba2V5XS5zaXplID1cbiAgICAgICAgYWdncmVnYXRlKHRvQmVDb21iaW5lZFByb3BzLCBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLCBwID0+IHAuc2l6ZSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZ2VvY29kZXInKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmxpbWl0U2VhcmNoID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmxpbWl0U2VhcmNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tYmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz5cbikge1xuICBpZiAoIXVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3cpIHtcbiAgICByZXR1cm4gc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9vbHRpcDoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkLnRvb2x0aXAsXG4gICAgICAuLi4odHlwZW9mIHVubWVyZ2VkPy50b29sdGlwPy5lbmFibGVkID09PSAnYm9vbGVhbidcbiAgICAgICAgPyB7ZW5hYmxlZDogdW5tZXJnZWQudG9vbHRpcC5lbmFibGVkfVxuICAgICAgICA6IHt9KSxcbiAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdyxcbiAgICAgICAgLi4udW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyhpbnRlcmFjdGlvbkNvbmZpZywgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAsXG4gICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgIFtkYXRhSWRUb1JlcGxhY2VdOiBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTWVyZ2Ugc3BsaXRNYXBzIGNvbmZpZyB3aXRoIGN1cnJlbnQgdmlzU3RldGUuXG4gKiAxLiBpZiBjdXJyZW50IG1hcCBpcyBzcGxpdCwgYnV0IHNwbGl0TWFwIERPRVNOT1QgY29udGFpbiBtYXBzXG4gKiAgICA6IGRvbid0IG1lcmdlIGFueXRoaW5nXG4gKiAyLiBpZiBjdXJyZW50IG1hcCBpcyBOT1Qgc3BsaXQsIGJ1dCBzcGxpdE1hcHMgY29udGFpbiBtYXBzXG4gKiAgICA6IGFkZCB0byBzcGxpdE1hcHMsIGFuZCBhZGQgY3VycmVudCBsYXllcnMgdG8gc3BsaXRNYXBzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGl0TWFwczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc3BsaXRNYXBzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydzcGxpdE1hcHMnXSA9IFtdXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkID0gWy4uLnN0YXRlLnNwbGl0TWFwc107XG4gIGNvbnN0IHVubWVyZ2VkID0gW107XG4gIHNwbGl0TWFwcy5mb3JFYWNoKChzbSwgaSkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzbS5sYXllcnMpO1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVudHJpZXMuZm9yRWFjaCgoW2lkLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgLy8gY2hlY2sgaWYgbGF5ZXIgZXhpc3RzXG4gICAgICAgIGNvbnN0IHB1c2hUbyA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gaWQpID8gbWVyZ2VkIDogdW5tZXJnZWQ7XG5cbiAgICAgICAgLy8gY3JlYXRlIG1hcCBwYW5lbCBpZiBjdXJyZW50IG1hcCBpcyBub3Qgc3BsaXRcbiAgICAgICAgcHVzaFRvW2ldID0gcHVzaFRvW2ldIHx8IHtcbiAgICAgICAgICAvLyBrZWVwIGlkXG4gICAgICAgICAgLi4uc20sXG4gICAgICAgICAgbGF5ZXJzOiBwdXNoVG8gPT09IG1lcmdlZCA/IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChzdGF0ZS5sYXllcnMpIDogW11cbiAgICAgICAgfTtcbiAgICAgICAgcHVzaFRvW2ldLmxheWVycyA9IHtcbiAgICAgICAgICAuLi5wdXNoVG9baV0ubGF5ZXJzLFxuICAgICAgICAgIFtpZF06IHZhbHVlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgYXJlIG1lcmdpbmcgaWYgdGhlcmUgYXJlIG5vIGxheWVycyBpbiBib3RoIHNwbGl0IG1hcFxuICAgICAgbWVyZ2VkLnB1c2goc20pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IG1lcmdlZCxcbiAgICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgZWZmZWN0cyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbUNvbmZpZ1xuICAgICAgICAgID8gY3JlYXRlRWZmZWN0KFxuICAgICAgICAgICAgICBkZWVwbWVyZ2UuYWxsKFtcbiAgICAgICAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuICAgICAgICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKGVmZmVjdCBhcyBFZmZlY3RUeXBlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGVmZmVjdCAmJiBlZmZlY3QuaXNWYWxpZFRvU2F2ZSgpKTtcbiAgICAgIH0pXG4gIF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlcjogbmV3RWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5pZClcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhbm5vdGF0aW9uczogYW55W10pOiBTIHtcbiAgaWYgKCFhbm5vdGF0aW9ucyB8fCAhYW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChzdGF0ZS5hbm5vdGF0aW9ucy5tYXAoYSA9PiBhLmlkKSk7XG4gIGNvbnN0IHZhbGlkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgIC5maWx0ZXIoXG4gICAgICBhID0+XG4gICAgICAgIGEgJiZcbiAgICAgICAgYS5pZCAmJlxuICAgICAgICAhZXhpc3RpbmdJZHMuaGFzKGEuaWQpICYmXG4gICAgICAgIGlzQW5ub3RhdGlvbktpbmQoYS5raW5kKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGEuYW5jaG9yUG9pbnQpICYmXG4gICAgICAgIGEuYW5jaG9yUG9pbnQubGVuZ3RoID09PSAyXG4gICAgKVxuICAgIC5tYXAoYSA9PiAoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgYXV0b1NpemU6IHRydWUsXG4gICAgICBhdXRvU2l6ZVk6IHRydWUsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBsaW5lQ29sb3I6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgICAgbGluZVdpZHRoOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICAgIHRleHRXaWR0aDogMCxcbiAgICAgIHRleHRIZWlnaHQ6IDAsXG4gICAgICAuLi5hXG4gICAgfSkpO1xuICBpZiAoIXZhbGlkQW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFsuLi5zdGF0ZS5hbm5vdGF0aW9ucywgLi4udmFsaWRBbm5vdGF0aW9uc11cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwIHdpdGggc2F2ZWQgY29uZmlnLFxuICogdmFsaWRhdGUgZmllbGRzVG9TaG93XG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gdG9vbHRpcENvbmZpZ1xuICogQHJldHVybiAtIHttZXJnZWRUb29sdGlwOiB7fSwgdW5tZXJnZWRUb29sdGlwOiB7fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHRvb2x0aXBDb25maWc6IFBpY2s8VG9vbHRpcEluZm9bJ2NvbmZpZyddLCAnZmllbGRzVG9TaG93Jz4gfCBudWxsID0gbnVsbFxuKSB7XG4gIGNvbnN0IHVubWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuICBjb25zdCBtZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG5cbiAgaWYgKFxuICAgICF0b29sdGlwQ29uZmlnIHx8XG4gICAgIXRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93IHx8XG4gICAgIU9iamVjdC5rZXlzKHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KS5sZW5ndGhcbiAgKSB7XG4gICAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBkYXRhSWQgaW4gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpIHtcbiAgICBpZiAoIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gfHwgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbZGF0YUlkXSkge1xuICAgICAgLy8gaXMgbm90IHlldCBsb2FkZWRcbiAgICAgIHVubWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgZGF0YXNldCBpcyBsb2FkZWRcbiAgICAgIGNvbnN0IGFsbEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzLm1hcChkID0+IGQubmFtZSk7XG4gICAgICBjb25zdCBmb3VuZEZpZWxkc1RvU2hvdyA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF0uZmlsdGVyKGZpZWxkID0+XG4gICAgICAgIGFsbEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKVxuICAgICAgKTtcblxuICAgICAgbWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gZm91bmRGaWVsZHNUb1Nob3c7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xufVxuLyoqXG4gKiBNZXJnZSBsYXllckJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyQmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyQmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVyQmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIGxheWVyIGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICovXG5mdW5jdGlvbiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBsYXllciBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBvdmVybGF5QmxlbmRpbmcgd2l0aCBzYXZlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPdmVybGF5QmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIG92ZXJsYXlCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnb3ZlcmxheUJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAob3ZlcmxheUJsZW5kaW5nICYmIE9WRVJMQVlfQkxFTkRJTkdTW292ZXJsYXlCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIG92ZXJsYXkgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKiovXG5mdW5jdGlvbiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIG92ZXJsYXkgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2UgYW5pbWF0aW9uIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbmltYXRpb25Db25maWc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFuaW1hdGlvbjogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnYW5pbWF0aW9uQ29uZmlnJ11cbik6IFMge1xuICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5jdXJyZW50VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmFuaW1hdGlvbixcbiAgICAgICAgZG9tYWluOiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRBbmltYXRpb25Db25maWdbXSk6IFNhdmVkQW5pbWF0aW9uQ29uZmlnIHtcbiAgLy8gZ2V0IHRoZSBzbWFsbGVzdCB2YWx1ZXMgb2YgY3VycmVudFRpbWUgYW5kIHNwZWVkIGFtb25nIGFsbCBjb25maWdzXG4gIHJldHVybiB7XG4gICAgY3VycmVudFRpbWU6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuY3VycmVudFRpbWUpID8/IG51bGwsXG4gICAgc3BlZWQ6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuc3BlZWQpID8/IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb2x1bW5zIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICpcbiAqIEBwYXJhbSBmaWVsZHNcbiAqIEBwYXJhbSBzYXZlZENvbHNcbiAqIEBwYXJhbSBlbXB0eUNvbHNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuIC0gdmFsaWRhdGVkIGNvbHVtbnMgb3IgbnVsbFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgc2F2ZWRDb2xzOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9ID0ge30sXG4gIGVtcHR5Q29sczogTGF5ZXJDb2x1bW5zLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIC8vIFByZXBhcmUgY29sdW1ucyBmb3IgdGhlIHZhbGlkYXRvclxuICBjb25zdCBjb2x1bW5zOiB0eXBlb2YgZW1wdHlDb2xzID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVtcHR5Q29scykpIHtcbiAgICBjb2x1bW5zW2tleV0gPSB7Li4uZW1wdHlDb2xzW2tleV19O1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZENvbHNba2V5XTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleCgoe25hbWV9KSA9PiBuYW1lID09PSBzYXZlZCk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmb3VuZCBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnNba2V5XS5maWVsZElkeCA9IGZpZWxkSWR4O1xuICAgICAgICBjb2x1bW5zW2tleV0udmFsdWUgPSBzYXZlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGFjdHVhbCBjb2x1bW4gZmllbGRJZHgsIGluIGNhc2UgaXQgaGFzIGNoYW5nZWRcbiAgY29uc3QgYWxsQ29sRm91bmQgPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5ldmVyeShrZXkgPT5cbiAgICB2YWxpZGF0ZUNvbHVtbihjb2x1bW5zW2tleV0sIGNvbHVtbnMsIGZpZWxkcylcbiAgKTtcblxuICBjb25zdCBydiA9IGFsbENvbEZvdW5kID8gY29sdW1ucyA6IG51bGw7XG4gIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGVtcHR5Q29scykuZmlsdGVyKGsgPT4gIWVtcHR5Q29sc1trXS5vcHRpb25hbCk7XG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSByZXF1aXJlZENvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXS52YWx1ZSk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGNvbHVtbnM6ICR7bWlzc2luZ0NvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnQ29sdW1ucyA9IE9iamVjdC5rZXlzKHNhdmVkQ29scyk7XG4gICAgY29uc3QgaW52YWxpZENvbHVtbnMgPSBjb25maWdDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10/LnZhbHVlKTtcbiAgICBpZiAoaW52YWxpZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIGNvbHVtbnM6ICR7aW52YWxpZENvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcnY7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgbGF5ZXIgY29sdW1uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbihcbiAgY29sdW1uOiBMYXllckNvbHVtbiAmIHt2YWxpZGF0b3I/OiB0eXBlb2YgdmFsaWRhdGVDb2x1bW59LFxuICBjb2x1bW5zOiBMYXllckNvbHVtbnMsXG4gIGFsbEZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbHVtbi5vcHRpb25hbCB8fCBjb2x1bW4udmFsdWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY29sdW1uLnZhbGlkYXRvcikge1xuICAgIHJldHVybiBjb2x1bW4udmFsaWRhdG9yKGNvbHVtbiwgY29sdW1ucywgYWxsRmllbGRzKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdGV4dCBsYWJlbCBjb25maWcgd2l0aCBuZXcgZGF0YVxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBUZXh0TGFiZWxTY2hlbWFWMVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZmllbGRzXG4gKiBAcGFyYW0ge09iamVjdH0gc2F2ZWRUZXh0TGFiZWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gdmFsaWRhdGVkIHRleHRsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgZmllbGRzLFxuICBbbGF5ZXJUZXh0TGFiZWxdLFxuICBzYXZlZFRleHRMYWJlbCxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICBjb25zdCBzYXZlZFRleHRMYWJlbHMgPSBBcnJheS5pc0FycmF5KHNhdmVkVGV4dExhYmVsKSA/IHNhdmVkVGV4dExhYmVsIDogW3NhdmVkVGV4dExhYmVsXTtcblxuICAvLyB2YWxpZGF0ZSBmaWVsZFxuICByZXR1cm4gc2F2ZWRUZXh0TGFiZWxzLm1hcCh0ZXh0TGFiZWwgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGV4dExhYmVsLmZpZWxkXG4gICAgICA/IGZpZWxkcy5maW5kKGZkID0+XG4gICAgICAgICAgT2JqZWN0LmtleXModGV4dExhYmVsLmZpZWxkKS5ldmVyeShrZXkgPT4gdGV4dExhYmVsLmZpZWxkW2tleV0gPT09IGZkW2tleV0pXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHRleHQgbGFiZWwgZmllbGQ6ICR7SlNPTi5zdHJpbmdpZnkodGV4dExhYmVsLmZpZWxkKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJUZXh0TGFiZWwpLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBrZXkgPT09ICdmaWVsZCcgPyBmaWVsZCA6IHRleHRMYWJlbFtrZXldIHx8IGxheWVyVGV4dExhYmVsW2tleV1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB2aXN1YWwgY2hhbm5lbHMgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbik6IG51bGwgfCBMYXllciB7XG4gIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZCwgc2NhbGUsIGtleX0pID0+IHtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBpZiAoc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICAgIGlmIChzYXZlZExheWVyLmNvbmZpZ1tmaWVsZF0pIHtcbiAgICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKFxuICAgICAgICAgIGZkID0+IHNhdmVkTGF5ZXIuY29uZmlnICYmIGZkLm5hbWUgPT09IHNhdmVkTGF5ZXIuY29uZmlnW2ZpZWxkXS5uYW1lXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kQ2hhbm5lbCA9IHtcbiAgICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogZm91bmRGaWVsZH0gOiB7fSksXG4gICAgICAgIC4uLihzYXZlZExheWVyLmNvbmZpZ1tzY2FsZV0gPyB7W3NjYWxlXTogc2F2ZWRMYXllci5jb25maWdbc2NhbGVdfSA6IHt9KVxuICAgICAgfTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhmb3VuZENoYW5uZWwpLmxlbmd0aCkge1xuICAgICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhmb3VuZENoYW5uZWwpO1xuICAgICAgfVxuXG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICAgIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBzYXZlZExheWVyLmNvbmZpZz8uW2ZpZWxkXT8ubmFtZTtcbiAgICAgICAgaWYgKGZpZWxkTmFtZSAmJiBmaWVsZE5hbWUgIT09IG5ld0xheWVyLmNvbmZpZ1tmaWVsZF0/Lm5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHZpc3VhbCBjaGFubmVsIGZpZWxkOiAke2ZpZWxkfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG50eXBlIFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7XG4gIGFsbG93RW1wdHlDb2x1bW4/OiBib29sZWFuO1xuICB0aHJvd09uRXJyb3I/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgbGF5ZXJzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBvcHRpb25zPzogVmFsaWRhdGVMYXllck9wdGlvblxuKSB7XG4gIGNvbnN0IHZhbGlkYXRlZDogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyOiBMYXllciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGxheWVyPy5jb25maWc/LmRhdGFJZCkge1xuICAgICAgaWYgKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICAgICAgICAgIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVyQ2xhc3NlcyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG5cbi8qKlxuICogR2V0IHJlcXVpcmVkIGNvbHVtbnMgZm9yIHZhbGlkYXRpb24gYmFzZWQgb24gY29sdW1uIG1vZGVcbiAqL1xuZnVuY3Rpb24gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpIHtcbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgbGV0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICAvLyBpZiBjb2x1bW5Nb2RlIGlzIGRlZmluZWQsIGZpbmQgY29sdW1uIG1vZGUgY29uZmlnXG4gIGNvbnN0IGNvbE1vZGVDb25maWcgPSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgID8gKG5ld0xheWVyLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoY29sTW9kZUNvbmZpZykge1xuICAgIC8vIG9ubHkgdmFsaWRhdGUgY29sdW1ucyBpbiBjb2x1bW4gbW9kZVxuICAgIGNvbHVtbkNvbmZpZyA9IFtcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5vcHRpb25hbENvbHVtbnMgfHwgW10pXG4gICAgXS5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogY29sdW1uQ29uZmlnW2tleV1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbHVtbkNvbmZpZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBvcHRpb25zOiBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge31cbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IHtmaWVsZHMsIGlkOiBkYXRhSWR9ID0gZGF0YXNldDtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXJDbGFzc2VzLCB0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHR5cGUgXCIke3R5cGV9XCIgb3IgY29uZmlnIGlzIG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBjb2x1bW5Nb2RlOiBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5Nb2RlLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvclxuICB9KTtcblxuICBjb25zdCBjb2x1bW5Db25maWcgPSBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcik7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbkNvbmZpZykpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgICAgIGZpZWxkcyxcbiAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICBjb2x1bW5Db25maWcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgLi4uY29sdW1uc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCBjb3BpZWRWaXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWcgfHwge30sXG4gICAge1xuICAgICAgc2hhbGxvd0NvcHk6IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ11cbiAgICB9XG4gICk7XG5cbiAgLy8gY2FsbCBsYXllciBtZXRob2RzIHRvIHZhbGlkYXRlIHZpc0NvbmZpZyB3aGVuIHN3aXRjaGluZyBkYXRhc2V0XG4gIGNvbnN0IHZpc0NvbmZpZyA9IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnXG4gICAgPyBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZyhkYXRhc2V0LCBjb3BpZWRWaXNDb25maWcpXG4gICAgOiBjb3BpZWRWaXNDb25maWc7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIHZpc0NvbmZpZyxcbiAgICB0ZXh0TGFiZWxcbiAgfSk7XG5cbiAgLy8gdmlzdWFsIGNoYW5uZWwgZmllbGQgaXMgc2F2ZWQgdG8gYmUge25hbWUsIHR5cGV9XG4gIC8vIGZpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGQgYnkgbWF0Y2hpbmcgYm90aCBuYW1lIGFuZCB0eXBlXG4gIC8vIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gIG5ld0xheWVyID0gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKGZpZWxkcywgbmV3TGF5ZXIsIHNhdmVkTGF5ZXIsIG9wdGlvbnMpO1xuXG4gIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICBpZiAoIW5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZTogJHtuZXdMYXllci5pZH1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVkaXRvcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBzYXZlZEVkaXRvcjogU2F2ZWRFZGl0b3IpIHtcbiAgaWYgKCFzYXZlZEVkaXRvcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIC4uLihzYXZlZEVkaXRvci5mZWF0dXJlcyB8fCBbXSldLFxuICAgICAgLy8gaWYgc2F2ZWRFZGl0b3IudmlzaWJsZSBpcyB1bmRlZmluZWQga2VlcCBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgICAgdmlzaWJsZTogc2F2ZWRFZGl0b3IudmlzaWJsZSA/PyBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUVkaXRvckNvbmZpZ3MoY29uZmlnczogU2F2ZWRFZGl0b3JbXSk6IFNhdmVkRWRpdG9yIHtcbiAgcmV0dXJuIGNvbmZpZ3MucmVkdWNlKFxuICAgIChhY2MsIG5leHRDb25maWcpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgZmVhdHVyZXM6IFsuLi5hY2MuZmVhdHVyZXMsIC4uLihuZXh0Q29uZmlnLmZlYXR1cmVzIHx8IFtdKV1cbiAgICAgIH07XG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBzdGFydCB3aXRoOlxuICAgICAgLy8gLSBlbXB0eSBhcnJheSBmb3IgZmVhdHVyZXMgYWNjdW11bGF0aW9uXG4gICAgICAvLyAtIGFuZCBhcmUgYW55IG9mIHRoZSBjb25maWdzJyB2aXNpYmxlIHZhbHVlcyB0cnVlP1xuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgdmlzaWJsZTogY29uZmlncy5zb21lKGMgPT4gYz8udmlzaWJsZSlcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGU6IFZpc1N0YXRlLCBuZXdEYXRhRW50cmllczogRGF0YXNldHMpOiBEYXRhc2V0cyB7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAuLi5uZXdEYXRhRW50cmllc1xuICB9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyKSkge1xuICAgIC8vIHByZXNlcnZlRGF0YXNldE9yZGVyICBtaWdodCBub3QgaW5jbHVkZSB0aGUgIG5ldyBkYXRhc2V0c1xuICAgIGNvbnN0IG5ld0RhdGFzZXRJZHMgPSBPYmplY3Qua2V5cyhtZXJnZWQpLmZpbHRlcihcbiAgICAgIGlkID0+ICFzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcj8uaW5jbHVkZXMoaWQpXG4gICAgKTtcbiAgICByZXR1cm4gWy4uLnN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyLCAuLi5uZXdEYXRhc2V0SWRzXS5yZWR1Y2UoXG4gICAgICAoYWNjdSwgZGF0YUlkKSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICAuLi4obWVyZ2VkW2RhdGFJZF0gPyB7W2RhdGFJZF06IG1lcmdlZFtkYXRhSWRdfSA6IHt9KVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIFNpbWxpYXIgcHVycG9zZSB0byBhZ2dyZWdhdGlvbiB1dGlscyBgZ2V0TW9kZWAgZnVuY3Rpb24sXG4gKiBidXQgcmV0dXJucyB0aGUgbW9kZSBpbiB0aGUgc2FtZSB2YWx1ZSB0eXBlIHdpdGhvdXQgY29lcmNpbmcgdG8gYSBzdHJpbmcuXG4gKiBJdCBpZ25vcmVzIGB1bmRlZmluZWRgIG9yIGBudWxsYCB2YWx1ZXMsIGJ1dCByZXR1cm5zIGBudWxsYCBpZiBubyBtb2RlIGNvdWxkIGJlIGNhbGN1bGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlPFQ+KGFycjogVFtdKTogVCB8IG51bGwge1xuICBjb25zdCB0YWxseXMgPSBuZXcgTWFwKCk7XG4gIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgaWYgKCF0YWxseXMuaGFzKHZhbHVlKSkge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIHRhbGx5cy5nZXQodmFsdWUpICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmV0dXJuIHRoZSB2YWx1ZSB3aXRoIHRoZSBoaWdoZXN0IHRvdGFsIG9jY3VycmVuY2UgY291bnRcbiAgaWYgKHRhbGx5cy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIFsuLi50YWxseXMuZW50cmllcygpXT8ucmVkdWNlKChhY2MsIG5leHQpID0+IChuZXh0WzFdID4gYWNjWzFdID8gbmV4dCA6IGFjYykpWzBdO1xufVxuXG5leHBvcnQgY29uc3QgVklTX1NUQVRFX01FUkdFUlM6IFZpc1N0YXRlTWVyZ2Vyczxhbnk+ID0gW1xuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJzLFxuICAgIHByb3A6ICdsYXllcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnbGF5ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVMYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRmlsdGVycyxcbiAgICBwcm9wOiAnZmlsdGVycycsXG4gICAgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVGaWx0ZXJPcmRlcicsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VFZmZlY3RzLFxuICAgIHByb3A6ICdlZmZlY3RzJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgcHJvcDogJ2Fubm90YXRpb25zJyxcbiAgICB0b01lcmdlUHJvcDogJ2Fubm90YXRpb25zVG9CZU1lcmdlZCdcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUludGVyYWN0aW9ucyxcbiAgICBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLFxuICAgIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyxcbiAgICBzYXZlVW5tZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbixcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZUludGVyYWN0aW9uQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZU92ZXJsYXlCbGVuZGluZyxcbiAgICBwcm9wOiAnb3ZlcmxheUJsZW5kaW5nJyxcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVBbmltYXRpb25Db25maWdzfSxcbiAge21lcmdlOiBtZXJnZUVkaXRvciwgcHJvcDogJ2VkaXRvcicsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lRWRpdG9yQ29uZmlnc31cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQVVBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQVFBLElBQUFRLFFBQUEsR0FBQVIsT0FBQTtBQWtCQSxJQUFBUyxNQUFBLEdBQUFULE9BQUE7QUFFQSxJQUFBVSxXQUFBLEdBQUFWLE9BQUE7QUFBc0QsSUFBQVcsU0FBQTtBQUFBLFNBQUFDLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxN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
|
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
interface LoaderInfo {
|
|
2
|
+
name: string;
|
|
3
|
+
extensions: string[];
|
|
4
|
+
}
|
|
5
|
+
export declare const getFileFormatNames: ((state: {
|
|
6
|
+
loaders: LoaderInfo[];
|
|
7
|
+
}) => string[]) & import("reselect").OutputSelectorFields<(args_0: LoaderInfo[]) => string[], {
|
|
2
8
|
clearCache: () => void;
|
|
3
9
|
}> & {
|
|
4
10
|
clearCache: () => void;
|
|
5
11
|
};
|
|
6
|
-
export declare const getFileExtensions: ((state:
|
|
12
|
+
export declare const getFileExtensions: ((state: {
|
|
13
|
+
loaders: LoaderInfo[];
|
|
14
|
+
}) => string[]) & import("reselect").OutputSelectorFields<(args_0: LoaderInfo[]) => string[], {
|
|
7
15
|
clearCache: () => void;
|
|
8
16
|
}> & {
|
|
9
17
|
clearCache: () => void;
|
|
10
18
|
};
|
|
19
|
+
export {};
|
|
@@ -11,8 +11,8 @@ var _reselect = require("reselect");
|
|
|
11
11
|
// Copyright contributors to the kepler.gl project
|
|
12
12
|
|
|
13
13
|
// NOTE: default formats must match file-handler-test.js
|
|
14
|
-
var DEFAULT_FILE_EXTENSIONS = ['csv', 'json', 'geojson', 'arrow', 'parquet'];
|
|
15
|
-
var DEFAULT_FILE_FORMATS = ['CSV', 'Json', 'GeoJSON', 'Arrow', 'Parquet'];
|
|
14
|
+
var DEFAULT_FILE_EXTENSIONS = ['csv', 'tsv', 'dsv', 'json', 'geojson', 'arrow', 'parquet'];
|
|
15
|
+
var DEFAULT_FILE_FORMATS = ['CSV', 'TSV', 'DSV', 'Json', 'GeoJSON', 'Arrow', 'Parquet'];
|
|
16
16
|
var getFileFormatNames = exports.getFileFormatNames = (0, _reselect.createSelector)(function (state) {
|
|
17
17
|
return state.loaders;
|
|
18
18
|
}, function (loaders) {
|
|
@@ -27,4 +27,4 @@ var getFileExtensions = exports.getFileExtensions = (0, _reselect.createSelector
|
|
|
27
27
|
return loader.extensions;
|
|
28
28
|
})));
|
|
29
29
|
});
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVzZWxlY3QiLCJyZXF1aXJlIiwiREVGQVVMVF9GSUxFX0VYVEVOU0lPTlMiLCJERUZBVUxUX0ZJTEVfRk9STUFUUyIsImdldEZpbGVGb3JtYXROYW1lcyIsImV4cG9ydHMiLCJjcmVhdGVTZWxlY3RvciIsInN0YXRlIiwibG9hZGVycyIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJtYXAiLCJsb2FkZXIiLCJuYW1lIiwiZ2V0RmlsZUV4dGVuc2lvbnMiLCJmbGF0TWFwIiwiZXh0ZW5zaW9ucyJdLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtc2VsZWN0b3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcblxuLy8gTk9URTogZGVmYXVsdCBmb3JtYXRzIG11c3QgbWF0Y2ggZmlsZS1oYW5kbGVyLXRlc3QuanNcbmNvbnN0IERFRkFVTFRfRklMRV9FWFRFTlNJT05TID0gWydjc3YnLCAndHN2JywgJ2RzdicsICdqc29uJywgJ2dlb2pzb24nLCAnYXJyb3cnLCAncGFycXVldCddO1xuY29uc3QgREVGQVVMVF9GSUxFX0ZPUk1BVFMgPSBbJ0NTVicsICdUU1YnLCAnRFNWJywgJ0pzb24nLCAnR2VvSlNPTicsICdBcnJvdycsICdQYXJxdWV0J107XG5cbmludGVyZmFjZSBMb2FkZXJJbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBleHRlbnNpb25zOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZpbGVGb3JtYXROYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKFxuICAoc3RhdGU6IHtsb2FkZXJzOiBMb2FkZXJJbmZvW119KSA9PiBzdGF0ZS5sb2FkZXJzLFxuICBsb2FkZXJzID0+IFsuLi5ERUZBVUxUX0ZJTEVfRk9STUFUUywgLi4ubG9hZGVycy5tYXAobG9hZGVyID0+IGxvYWRlci5uYW1lKV1cbik7XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlRXh0ZW5zaW9ucyA9IGNyZWF0ZVNlbGVjdG9yKFxuICAoc3RhdGU6IHtsb2FkZXJzOiBMb2FkZXJJbmZvW119KSA9PiBzdGF0ZS5sb2FkZXJzLFxuICBsb2FkZXJzID0+IFsuLi5ERUZBVUxUX0ZJTEVfRVhURU5TSU9OUywgLi4ubG9hZGVycy5mbGF0TWFwKGxvYWRlciA9PiBsb2FkZXIuZXh0ZW5zaW9ucyldXG4pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUdBLElBQUFBLFNBQUEsR0FBQUMsT0FBQTtBQUhBO0FBQ0E7O0FBSUE7QUFDQSxJQUFNQyx1QkFBdUIsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQztBQUM1RixJQUFNQyxvQkFBb0IsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQztBQU9sRixJQUFNQyxrQkFBa0IsR0FBQUMsT0FBQSxDQUFBRCxrQkFBQSxHQUFHLElBQUFFLHdCQUFjLEVBQzlDLFVBQUNDLEtBQThCO0VBQUEsT0FBS0EsS0FBSyxDQUFDQyxPQUFPO0FBQUEsR0FDakQsVUFBQUEsT0FBTztFQUFBLFVBQUFDLE1BQUEsQ0FBUU4sb0JBQW9CLE1BQUFPLG1CQUFBLGFBQUtGLE9BQU8sQ0FBQ0csR0FBRyxDQUFDLFVBQUFDLE1BQU07SUFBQSxPQUFJQSxNQUFNLENBQUNDLElBQUk7RUFBQSxFQUFDO0FBQUEsQ0FDNUUsQ0FBQztBQUVNLElBQU1DLGlCQUFpQixHQUFBVCxPQUFBLENBQUFTLGlCQUFBLEdBQUcsSUFBQVIsd0JBQWMsRUFDN0MsVUFBQ0MsS0FBOEI7RUFBQSxPQUFLQSxLQUFLLENBQUNDLE9BQU87QUFBQSxHQUNqRCxVQUFBQSxPQUFPO0VBQUEsVUFBQUMsTUFBQSxDQUFRUCx1QkFBdUIsTUFBQVEsbUJBQUEsYUFBS0YsT0FBTyxDQUFDTyxPQUFPLENBQUMsVUFBQUgsTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQ0ksVUFBVTtFQUFBLEVBQUM7QUFBQSxDQUN6RixDQUFDIiwiaWdub3JlTGlzdCI6W119
|