@kepler.gl/reducers 3.3.0-alpha.15 → 3.3.0-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/combined-updaters.js +166 -8
- package/dist/cjs/composers.js +4 -5
- package/dist/cjs/dataset-ops-updaters.js +289 -0
- package/dist/cjs/dataset-ops-updaters.spec.js +257 -0
- package/dist/cjs/interaction-utils.js +156 -4
- package/dist/cjs/layer-utils.js +133 -8
- package/dist/cjs/ui-state-updaters.js +86 -47
- package/dist/cjs/ui-state.js +2 -2
- package/dist/cjs/vis-state-merger.js +35 -4
- package/dist/cjs/vis-state-selectors.js +5 -4
- package/dist/cjs/vis-state-updaters.js +599 -182
- package/dist/cjs/vis-state.js +2 -2
- package/dist/combined-updaters.d.ts +21 -1
- package/dist/composers.d.ts +3 -0
- package/dist/dataset-ops-updaters.d.ts +18 -0
- package/dist/dataset-ops-updaters.spec.d.ts +1 -0
- package/dist/esm/combined-updaters.js +166 -8
- package/dist/esm/composers.js +3 -2
- package/dist/esm/dataset-ops-updaters.js +274 -0
- package/dist/esm/dataset-ops-updaters.spec.js +256 -0
- package/dist/esm/interaction-utils.js +150 -1
- package/dist/esm/layer-utils.js +131 -8
- package/dist/esm/ui-state-updaters.js +85 -46
- package/dist/esm/ui-state.js +2 -2
- package/dist/esm/vis-state-merger.js +35 -4
- package/dist/esm/vis-state-selectors.js +5 -4
- package/dist/esm/vis-state-updaters.js +557 -186
- package/dist/esm/vis-state.js +2 -2
- package/dist/interaction-utils.d.ts +21 -1
- package/dist/layer-utils.d.ts +16 -0
- package/dist/ui-state-updaters.d.ts +20 -0
- package/dist/vis-state-updaters.d.ts +32 -13
- package/dist/vis-state.d.ts +16 -0
- package/package.json +16 -16
package/dist/esm/layer-utils.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
3
4
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
4
5
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
5
6
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
@@ -14,6 +15,7 @@ import { GEOCODER_LAYER_ID, LIGHT_AND_SHADOW_EFFECT } from '@kepler.gl/constants
|
|
|
14
15
|
import { OVERLAY_TYPE_CONST, getEditorLayer } from '@kepler.gl/layers';
|
|
15
16
|
import { isFunction, getMapLayersFromSplitMaps, DataRow, isPlainObject } from '@kepler.gl/utils';
|
|
16
17
|
import { arrayMove, generateHashId } from '@kepler.gl/common-utils';
|
|
18
|
+
import { getLayerZoomOpacityFactor } from './interaction-utils';
|
|
17
19
|
import { ThreeDBuildingLayer } from '@kepler.gl/deckgl-layers';
|
|
18
20
|
/**
|
|
19
21
|
* Find default layers from fields
|
|
@@ -173,6 +175,67 @@ export function getLayerHoverProp(_ref) {
|
|
|
173
175
|
}
|
|
174
176
|
return null;
|
|
175
177
|
}
|
|
178
|
+
var ZOOM_OPACITY_PROP_KEYS = ['opacity', 'lineOpacity', 'strokeOpacity'];
|
|
179
|
+
|
|
180
|
+
/** Stroke and outline props replace the parent opacity, so they need the same factor. */
|
|
181
|
+
function scaleZoomOpacitySubLayerProps(subLayerProps, factor) {
|
|
182
|
+
if (!subLayerProps) {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
var changed = false;
|
|
186
|
+
var next = {};
|
|
187
|
+
for (var _i = 0, _Object$keys = Object.keys(subLayerProps); _i < _Object$keys.length; _i++) {
|
|
188
|
+
var id = _Object$keys[_i];
|
|
189
|
+
var sublayer = subLayerProps[id];
|
|
190
|
+
if (!sublayer || _typeof(sublayer) !== 'object') {
|
|
191
|
+
next[id] = sublayer;
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
var scaled = _objectSpread({}, sublayer);
|
|
195
|
+
var sublayerChanged = false;
|
|
196
|
+
var _iterator = _createForOfIteratorHelper(ZOOM_OPACITY_PROP_KEYS),
|
|
197
|
+
_step;
|
|
198
|
+
try {
|
|
199
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
200
|
+
var key = _step.value;
|
|
201
|
+
if (typeof sublayer[key] === 'number') {
|
|
202
|
+
scaled[key] = sublayer[key] * factor;
|
|
203
|
+
sublayerChanged = true;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
} catch (err) {
|
|
207
|
+
_iterator.e(err);
|
|
208
|
+
} finally {
|
|
209
|
+
_iterator.f();
|
|
210
|
+
}
|
|
211
|
+
next[id] = sublayerChanged ? scaled : sublayer;
|
|
212
|
+
if (sublayerChanged) {
|
|
213
|
+
changed = true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return changed ? next : undefined;
|
|
217
|
+
}
|
|
218
|
+
function applyZoomOpacityToDeckLayer(deckLayer, factor) {
|
|
219
|
+
var _deckLayer$props, _deckLayer$props2, _deckLayer$props3;
|
|
220
|
+
if (Array.isArray(deckLayer)) {
|
|
221
|
+
return deckLayer.map(function (layer) {
|
|
222
|
+
return applyZoomOpacityToDeckLayer(layer, factor);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
if (!deckLayer || factor === 1 || typeof deckLayer.clone !== 'function') {
|
|
226
|
+
return deckLayer;
|
|
227
|
+
}
|
|
228
|
+
var baseOpacity = (_deckLayer$props = deckLayer.props) === null || _deckLayer$props === void 0 ? void 0 : _deckLayer$props.opacity;
|
|
229
|
+
var opacity = (typeof baseOpacity === 'number' ? baseOpacity : 1) * factor;
|
|
230
|
+
var subLayerProps = scaleZoomOpacitySubLayerProps((_deckLayer$props2 = deckLayer.props) === null || _deckLayer$props2 === void 0 ? void 0 : _deckLayer$props2._subLayerProps, factor);
|
|
231
|
+
return deckLayer.clone(_objectSpread({
|
|
232
|
+
opacity: opacity,
|
|
233
|
+
// Fully faded layers are not pickable.
|
|
234
|
+
visible: ((_deckLayer$props3 = deckLayer.props) === null || _deckLayer$props3 === void 0 ? void 0 : _deckLayer$props3.visible) !== false && factor > 0
|
|
235
|
+
}, subLayerProps ? {
|
|
236
|
+
_subLayerProps: subLayerProps
|
|
237
|
+
} : {}));
|
|
238
|
+
}
|
|
176
239
|
export function renderDeckGlLayer(props, layerCallbacks) {
|
|
177
240
|
var datasets = props.datasets,
|
|
178
241
|
layer = props.layer,
|
|
@@ -193,7 +256,7 @@ export function renderDeckGlLayer(props, layerCallbacks) {
|
|
|
193
256
|
// instead of leaking undefined into deck.gl's visible prop
|
|
194
257
|
var visible = !mapLayers || Boolean(mapLayers[layer.id]);
|
|
195
258
|
// Layer is Layer class
|
|
196
|
-
|
|
259
|
+
var rendered = layer.renderLayer({
|
|
197
260
|
data: data,
|
|
198
261
|
gpuFilter: gpuFilter,
|
|
199
262
|
idx: layerIndex,
|
|
@@ -206,6 +269,8 @@ export function renderDeckGlLayer(props, layerCallbacks) {
|
|
|
206
269
|
dataset: dataset,
|
|
207
270
|
experimentalContext: experimentalContext
|
|
208
271
|
});
|
|
272
|
+
var factor = getLayerZoomOpacityFactor(layer.id, mapState === null || mapState === void 0 ? void 0 : mapState.zoom, interactionConfig);
|
|
273
|
+
return applyZoomOpacityToDeckLayer(rendered, factor);
|
|
209
274
|
}
|
|
210
275
|
export function isLayerRenderable(layer, layerData) {
|
|
211
276
|
return layer.id !== GEOCODER_LAYER_ID && layer.shouldRenderLayer(layerData);
|
|
@@ -464,16 +529,74 @@ export function getLayerGroupFromLayerOrder(layerOrder, layerGroupId) {
|
|
|
464
529
|
return group;
|
|
465
530
|
}
|
|
466
531
|
|
|
532
|
+
/**
|
|
533
|
+
* Groups that contain `entryId`, nearest parent first.
|
|
534
|
+
* `entryId` may be a layer id or a nested group id.
|
|
535
|
+
*/
|
|
536
|
+
export function getAncestorLayerGroups(layerOrder, entryId) {
|
|
537
|
+
var ancestors = [];
|
|
538
|
+
var _visit = function visit(entries) {
|
|
539
|
+
var _iterator2 = _createForOfIteratorHelper(entries),
|
|
540
|
+
_step2;
|
|
541
|
+
try {
|
|
542
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
543
|
+
var entry = _step2.value;
|
|
544
|
+
if (typeof entry === 'string') {
|
|
545
|
+
if (entry === entryId) {
|
|
546
|
+
return true;
|
|
547
|
+
}
|
|
548
|
+
continue;
|
|
549
|
+
}
|
|
550
|
+
if (!isPlainObject(entry)) {
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
var group = entry;
|
|
554
|
+
if (group.id === entryId) {
|
|
555
|
+
return true;
|
|
556
|
+
}
|
|
557
|
+
if (_visit(group.layerOrder)) {
|
|
558
|
+
ancestors.push(group);
|
|
559
|
+
return true;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
} catch (err) {
|
|
563
|
+
_iterator2.e(err);
|
|
564
|
+
} finally {
|
|
565
|
+
_iterator2.f();
|
|
566
|
+
}
|
|
567
|
+
return false;
|
|
568
|
+
};
|
|
569
|
+
_visit(layerOrder);
|
|
570
|
+
return ancestors;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Whether a layer should be drawn in the map legend.
|
|
575
|
+
* A layer stays on the map when this is false. Missing flags count as included.
|
|
576
|
+
* An ancestor group with `isIncludedInLegend: false` hides the layer as well.
|
|
577
|
+
*/
|
|
578
|
+
export function isLayerShownInLegend(layer, layerOrder) {
|
|
579
|
+
if (layer.config.isIncludedInLegend === false) {
|
|
580
|
+
return false;
|
|
581
|
+
}
|
|
582
|
+
if (!(layerOrder !== null && layerOrder !== void 0 && layerOrder.length)) {
|
|
583
|
+
return true;
|
|
584
|
+
}
|
|
585
|
+
return getAncestorLayerGroups(layerOrder, layer.id).every(function (group) {
|
|
586
|
+
return group.isIncludedInLegend !== false;
|
|
587
|
+
});
|
|
588
|
+
}
|
|
589
|
+
|
|
467
590
|
/**
|
|
468
591
|
* Find the parent group that contains a given layer ID.
|
|
469
592
|
* Returns undefined if the layer is at the root level.
|
|
470
593
|
*/
|
|
471
594
|
export function findParentGroupForLayer(layerOrder, layerId) {
|
|
472
|
-
var
|
|
473
|
-
|
|
595
|
+
var _iterator3 = _createForOfIteratorHelper(layerOrder),
|
|
596
|
+
_step3;
|
|
474
597
|
try {
|
|
475
|
-
for (
|
|
476
|
-
var entry =
|
|
598
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
599
|
+
var entry = _step3.value;
|
|
477
600
|
if (isPlainObject(entry)) {
|
|
478
601
|
var group = entry;
|
|
479
602
|
if (group.layerOrder.some(function (e) {
|
|
@@ -486,9 +609,9 @@ export function findParentGroupForLayer(layerOrder, layerId) {
|
|
|
486
609
|
}
|
|
487
610
|
}
|
|
488
611
|
} catch (err) {
|
|
489
|
-
|
|
612
|
+
_iterator3.e(err);
|
|
490
613
|
} finally {
|
|
491
|
-
|
|
614
|
+
_iterator3.f();
|
|
492
615
|
}
|
|
493
616
|
return undefined;
|
|
494
617
|
}
|
|
@@ -607,4 +730,4 @@ export function areAnyDeckLayersLoading(layers) {
|
|
|
607
730
|
return layer.internalState && !layer.isLoaded;
|
|
608
731
|
});
|
|
609
732
|
}
|
|
610
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zb2xlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImdldEVkaXRvckxheWVyIiwiaXNGdW5jdGlvbiIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJEYXRhUm93IiwiaXNQbGFpbk9iamVjdCIsImFycmF5TW92ZSIsImdlbmVyYXRlSGFzaElkIiwiVGhyZWVEQnVpbGRpbmdMYXllciIsImZpbmREZWZhdWx0TGF5ZXIiLCJkYXRhc2V0IiwibGF5ZXJDbGFzc2VzIiwibGF5ZXJQcm9wcyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImxjIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwicHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3VuZExheWVycyIsImNvbmNhdCIsIm1hcCIsInAiLCJfb2JqZWN0U3ByZWFkIiwidHlwZSIsImRhdGFJZCIsImlkIiwiaXNWaXNpYmxlIiwibGF5ZXIiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJkYXRhQ29udGFpbmVyIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwic3RhdGUiLCJwYXRjaCIsImRhdGFzZXRJZHNUb1BhdGNoIiwibGVuZ3RoIiwiaGFzRGVmaW5lZFBhdGNoVmFsdWUiLCJzb21lIiwia2V5IiwidW5kZWZpbmVkIiwiZGF0YXNldElkU2V0IiwiU2V0IiwibGF5ZXJzIiwiY29uZmlnIiwiaGFzIiwic2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsImFsbG93ZWRLZXlzIiwiZmlsdGVyIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicGFydGlhbCIsImFjYyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiaXNWYWxpZCIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJoYXNBbGxDb2x1bW5zIiwiZm9ybWF0TGF5ZXJEYXRhIiwiZGF0YXNldHMiLCJ1cGRhdGVMYXllckNvbmZpZyIsImVycm9yTWVzc2FnZSIsImVyciIsImVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwic3Vic3RyaW5nIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJfcmVmIiwiYW5pbWF0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Db25maWciLCJob3ZlckluZm8iLCJsYXllcnNUb1JlbmRlciIsInRvb2x0aXAiLCJlbmFibGVkIiwicGlja2VkIiwib2JqZWN0Iiwib3ZlcmxheSIsImlkeCIsImluZGV4IiwiZ2V0SG92ZXJEYXRhIiwiX2RhdGFzZXRzJGRhdGFJZCIsImZpZWxkcyIsImRhdGEiLCJmaWVsZHNUb1Nob3ciLCJjdXJyZW50VGltZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsInZpc2libGUiLCJCb29sZWFuIiwicmVuZGVyTGF5ZXIiLCJpc0xheWVyUmVuZGVyYWJsZSIsInNob3VsZFJlbmRlckxheWVyIiwiaXNMYXllclZpc2libGUiLCJwcmVwYXJlTGF5ZXJzRm9yRGVjayIsImFjY3UiLCJfZGVmaW5lUHJvcGVydHkiLCJvdmVybGF5VHlwZSIsImRlY2tnbCIsInByZXBhcmVMYXllcnNUb1JlbmRlciIsImdldEN1c3RvbURlY2tMYXllcnMiLCJkZWNrR2xQcm9wcyIsImJvdHRvbURlY2tMYXllcnMiLCJ0b3BEZWNrTGF5ZXJzIiwidG9wTGF5ZXJzIiwiYmluZExheWVyQ2FsbGJhY2tzIiwiYXJndW1lbnRzIiwidmFsIiwiY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlciIsImxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzRm9yRGVjayIsInJlbmRlclByb3BzIiwiaGFzU2hhZG93RWZmZWN0IiwiaXNBbm5vdGF0aW9uTW9kZSIsInNsaWNlIiwicmV2ZXJzZSIsIm92ZXJsYXlzIiwiZWxlbWVudCIsImxheWVyR3JvdXAiLCJsYXllcklkIiwiZmluZEluZGV4IiwiX3JlZjMiLCJiaW5kZWRMYXllckNhbGxiYWNrcyIsImxheWVyT3ZlcmxheSIsImNvbXB1dGVEZWNrTGF5ZXJzIiwiX3JlZjQiLCJvcHRpb25zIiwidmlzU3RhdGUiLCJtYXBTdHlsZSIsImVmZmVjdHMiLCJzcGxpdE1hcHMiLCJfcmVmNSIsIm1hcEluZGV4IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJwcmltYXJ5TWFwIiwibGF5ZXJzRm9yRGVjayIsImVkaXRvckluZm8iLCJkYXRhTGF5ZXJzIiwiZWZmZWN0IiwiX3JlZjYiLCJ2aXNpYmxlTGF5ZXJHcm91cHMiLCJwdXNoIiwidGhyZWVEQnVpbGRpbmdDb2xvciIsInBpY2thYmxlIiwidXBkYXRlVHJpZ2dlcnMiLCJnZXRGaWxsQ29sb3IiLCJfZ2V0Q3VzdG9tRGVja0xheWVycyIsIl9nZXRDdXN0b21EZWNrTGF5ZXJzMiIsIl9zbGljZWRUb0FycmF5IiwiY3VzdG9tQm90dG9tRGVja0xheWVycyIsImN1c3RvbVRvcERlY2tMYXllcnMiLCJlZGl0b3JMYXllciIsIl90b0NvbnN1bWFibGVBcnJheSIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiX3JlZjciLCJnZXROZXdMYXllckdyb3VwIiwiX3Byb3BzJGlkIiwiX3Byb3BzJGxhYmVsIiwiX3Byb3BzJGlzVmlzaWJsZSIsIl9wcm9wcyRsYXllck9yZGVyIiwiX3Byb3BzJGlzSW5jbHVkZWRJbkxlIiwibGFiZWwiLCJpc0luY2x1ZGVkSW5MZWdlbmQiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJhdEluZGV4Iiwic3BsaWNlIiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwiZWxlbWVudElkIiwibmV3TGF5ZXJPcmRlciIsImVudHJ5IiwiZ3JvdXAiLCJnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIiLCJsYXllckdyb3VwSWQiLCJpIiwiZ3JwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwibmVzdGVkIiwiZiIsImdldEluZGV4RnJvbUxheWVyRW50cnlJZCIsImxheWVyRW50cnlJZCIsImlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyIiwiZm91bmQiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsIm9sZEVudHJ5IiwibmV3RW50cnkiLCJvbGRFbnRyeUlkIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsIm5ld0xheWVyR3JvdXAiLCJnZXRGbGF0TGF5ZXJPcmRlciIsIm9yZGVyRW50cnkiLCJidWlsZExheWVyT3JkZXJIaWVyYXJjaHkiLCJ2YWxpZExheWVycyIsImZpbmQiLCJsIiwiaGlkZGVuIiwicmVtb3ZlR2hvc3RMYXllckZyb21MYXllck9yZGVyIiwicmVvcmRlckxheWVyT3JkZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwiYWN0aXZlSW5kZXgiLCJvdmVySW5kZXgiLCJhZGRMYXllclRvTGF5ZXJPcmRlciIsImdldExheWVySG92ZXJQcm9wVmFsdWUiLCJmaWVsZEluZGV4IiwidmFsdWVBdCIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiaW50ZXJuYWxTdGF0ZSIsImlzTG9hZGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcblxuaW1wb3J0IHtHRU9DT0RFUl9MQVlFUl9JRCwgTElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbnR5cGUgRGVja0xheWVyUHJvcHMgPSBhbnk7XG5pbXBvcnQge1xuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRvb2x0aXBGaWVsZCxcbiAgQ29tcGFyZVR5cGUsXG4gIFNwbGl0TWFwTGF5ZXJzLFxuICBFZGl0b3IsXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBCaW5kZWRMYXllckNhbGxiYWNrcyxcbiAgTGF5ZXJDYWxsYmFja3MsXG4gIFZpZXdwb3J0LFxuICBMYXllck9yZGVyR3JvdXAsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJFbnRyeSxcbiAgRmxhdExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJIaWVyYXJjaHlcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSxcbiAgRmluZERlZmF1bHRMYXllclByb3BzLFxuICBMYXllcixcbiAgTGF5ZXJDbGFzc2VzVHlwZSxcbiAgT1ZFUkxBWV9UWVBFX0NPTlNULFxuICBnZXRFZGl0b3JMYXllclxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5cbmltcG9ydCBLZXBsZXJUYWJsZSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2lzRnVuY3Rpb24sIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsIERhdGFSb3csIGlzUGxhaW5PYmplY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHthcnJheU1vdmUsIGdlbmVyYXRlSGFzaElkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtcbiAgcG9pbnRzOiBhbnlbXTtcbiAgY29sb3JWYWx1ZT86IGFueTtcbiAgZWxldmF0aW9uVmFsdWU/OiBhbnk7XG4gIGFnZ3JlZ2F0ZWREYXRhPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBtZWFzdXJlOiBzdHJpbmc7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9XG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRzVG9TaG93OiBUb29sdGlwRmllbGRbXTtcbiAgbGF5ZXI6IExheWVyO1xuICBwcmltYXJ5RGF0YT86IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsO1xuICBjb21wYXJlVHlwZT86IENvbXBhcmVUeXBlO1xuICBjdXJyZW50VGltZT86IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXVsnY3VycmVudFRpbWUnXTtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyUHJvcHMgPSAoT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKSBhcyBBcnJheTxrZXlvZiBMYXllckNsYXNzZXNUeXBlPikucmVkdWNlKFxuICAgIChwcmV2aW91cywgbGMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIHByZXZpb3VzKVxuICAgICAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgICAgY29uc3QgZm91bmRMYXllcnMgPSByZXN1bHQuZm91bmRMYXllcnMgfHwgcHJldmlvdXM7XG5cbiAgICAgIHJldHVybiBmb3VuZExheWVycy5jb25jYXQoXG4gICAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICB0eXBlOiBsYyxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgLy8gc2V0IGFyYyBsYXllciBpbml0aWFsIHZpc2libGl0eSB0byBmYWxzZSwgYmVjYXVzZSBhcmNzIHRlbmQgdG8gYmUgdG9vIG11c3lcbiAgICAgICAgICAuLi4obGMgPT09ICdhcmMnIHx8IGxjID09PSAnbGluZScgPyB7aXNWaXNpYmxlOiBmYWxzZX0gOiB7fSlcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW10gYXMgKEZpbmREZWZhdWx0TGF5ZXJQcm9wcyAmIHt0eXBlOiBzdHJpbmd9KVtdXG4gICk7XG5cbiAgLy8gZ28gdGhyb3VnaCBhbGwgbGF5ZXJQcm9wcyB0byBjcmVhdGUgbGF5ZXJcbiAgcmV0dXJuIGxheWVyUHJvcHMubWFwKHByb3BzID0+IHtcbiAgICBjb25zdCBsYXllciA9IG5ldyBsYXllckNsYXNzZXNbcHJvcHMudHlwZV0ocHJvcHMpO1xuICAgIHJldHVybiB0eXBlb2YgbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYHBhdGNoYCB0byBgY29uZmlnLnZpc0NvbmZpZ2Agb25seSBmb3IgbGF5ZXJzIHdob3NlIGBkYXRhSWRgIGlzIGluIGBkYXRhc2V0SWRzVG9QYXRjaGAuXG4gKiBMYXllcnMgZm9yIGRhdGFzZXRzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIHRoZSBtYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIOKAlCBgYWRkRGF0YVRvTWFwYFxuICogS2V5cyB3aG9zZSBwYXRjaCB2YWx1ZSBpcyBgdW5kZWZpbmVkYCBhcmUgc2tpcHBlZCBzbyBleGlzdGluZyB2aXNDb25maWcgaXMgbm90IGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF0Y2g6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0SWRzVG9QYXRjaDogc3RyaW5nW11cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFwYXRjaCB8fCAhT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc0RlZmluZWRQYXRjaFZhbHVlID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLnNvbWUoXG4gICAga2V5ID0+IHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICApO1xuICBpZiAoIWhhc0RlZmluZWRQYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldElkU2V0ID0gbmV3IFNldChkYXRhc2V0SWRzVG9QYXRjaCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkIHx8ICFkYXRhc2V0SWRTZXQuaGFzKGxheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3M7XG4gICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLmZpbHRlcihcbiAgICAgICAga2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXR0aW5ncywga2V5KSAmJiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0aWFsID0gYWxsb3dlZEtleXMucmVkdWNlPFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBwYXRjaFtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHBhcnRpYWwpO1xuICAgIH0pXG4gIH07XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgQ29uc29sZS5lcnJvcihlcnIpO1xuICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIGxheWVyLmlzVmFsaWQgPSBmYWxzZTtcblxuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9XG4gICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCAxMDApIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgbGF5ZXJEYXRhID0ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyLFxuICAgIGxheWVyRGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9wcyBwYXNzZWQgdG8gTGF5ZXJIb3ZlckluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgYW5pbWF0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgaG92ZXJJbmZvLFxuICBsYXllcnMsXG4gIGxheWVyc1RvUmVuZGVyLFxuICBkYXRhc2V0c1xufToge1xuICBpbnRlcmFjdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2ludGVyYWN0aW9uQ29uZmlnJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xuICBob3ZlckluZm86IFZpc1N0YXRlWydob3ZlckluZm8nXTtcbiAgbGF5ZXJzOiBWaXNTdGF0ZVsnbGF5ZXJzJ107XG4gIGxheWVyc1RvUmVuZGVyOiBMYXllcnNUb1JlbmRlcjtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xufSk6IExheWVySG92ZXJQcm9wIHwgbnVsbCB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiYgaG92ZXJJbmZvICYmIGhvdmVySW5mby5waWNrZWQpIHtcbiAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgY29uc3Qge29iamVjdCwgbGF5ZXI6IG92ZXJsYXl9ID0gaG92ZXJJbmZvO1xuXG4gICAgLy8gZGVja2dsIGxheWVyIHRvIGtlcGxlci1nbCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW292ZXJsYXkucHJvcHMuaWR4XTtcblxuICAgIC8vIE5PVEU6IGZvciBiaW5hcnkgZm9ybWF0IEdlb2pzb25MYXllciwgZGVjayB3aWxsIHJldHVybiBvYmplY3Q9bnVsbCBidXQgaG92ZXJJbmZvLmluZGV4ID49IDBcbiAgICBpZiAoXG4gICAgICAob2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCA+PSAwKSAmJlxuICAgICAgbGF5ZXIgJiZcbiAgICAgIGxheWVyLmdldEhvdmVyRGF0YSAmJlxuICAgICAgbGF5ZXJzVG9SZW5kZXJbbGF5ZXIuaWRdXG4gICAgKSB7XG4gICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgY29uc3Qge1xuICAgICAgICBjb25maWc6IHtkYXRhSWR9XG4gICAgICB9ID0gbGF5ZXI7XG4gICAgICBpZiAoIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHN9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICAgIGNvbnN0IGRhdGE6IERhdGFSb3cgfCBudWxsID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKFxuICAgICAgICBvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4LFxuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvXG4gICAgICApO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllcixcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckRlY2tHbExheWVyKHByb3BzOiBhbnksIGxheWVyQ2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogYW55fSkge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJJbmRleCxcbiAgICBkYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3Qge2dwdUZpbHRlcn0gPSBkYXRhc2V0IHx8IHt9O1xuICBjb25zdCBvYmplY3RIb3ZlcmVkID0gY2xpY2tlZCB8fCBob3ZlckluZm87XG4gIC8vIGluIHNwbGl0IG1vZGUgYSBsYXllciBtaXNzaW5nIGZyb20gbWFwTGF5ZXJzIGlzIGhpZGRlbiwgc28gY29lcmNlIHRvIGEgYm9vbGVhblxuICAvLyBpbnN0ZWFkIG9mIGxlYWtpbmcgdW5kZWZpbmVkIGludG8gZGVjay5nbCdzIHZpc2libGUgcHJvcFxuICBjb25zdCB2aXNpYmxlID0gIW1hcExheWVycyB8fCBCb29sZWFuKG1hcExheWVyc1tsYXllci5pZF0pO1xuICAvLyBMYXllciBpcyBMYXllciBjbGFzc1xuICByZXR1cm4gbGF5ZXIucmVuZGVyTGF5ZXIoe1xuICAgIGRhdGEsXG4gICAgZ3B1RmlsdGVyLFxuICAgIGlkeDogbGF5ZXJJbmRleCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBsYXllckNhbGxiYWNrcyxcbiAgICBtYXBTdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgb2JqZWN0SG92ZXJlZCxcbiAgICB2aXNpYmxlLFxuICAgIGRhdGFzZXQsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyOiBMYXllciwgbGF5ZXJEYXRhKSB7XG4gIHJldHVybiBsYXllci5pZCAhPT0gR0VPQ09ERVJfTEFZRVJfSUQgJiYgbGF5ZXIuc2hvdWxkUmVuZGVyTGF5ZXIobGF5ZXJEYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBtYXBMYXllcnMpIHtcbiAgcmV0dXJuIChcbiAgICBsYXllci5jb25maWcuaXNWaXNpYmxlICYmXG4gICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgZG9uJ3QgcmVuZGVyIGl0XG4gICAgKCFtYXBMYXllcnMgfHwgKG1hcExheWVycyAmJiBtYXBMYXllcnNbbGF5ZXIuaWRdKSlcbiAgKTtcbn1cblxuLy8gUHJlcGFyZSBhIGRpY3Qgb2YgbGF5ZXJzIHJlbmRlcmVkIGJ5IHRoZSBkZWNrLmdsXG4vLyBOb3RlLCBpc1Zpc2libGU6IGZhbHNlIGxheWVyIGlzIHBhc3NlZCB0byBkZWNrLmdsIGhlcmVcbi8vIHJldHVybiB7W2lkXTogdHJ1ZSBcXCBmYWxzZX1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGF5ZXJzRm9yRGVjayhcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXVxuKToge1xuICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xufSB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06XG4gICAgICAgIGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgbGF5ZXIub3ZlcmxheVR5cGUgPT09IE9WRVJMQVlfVFlQRV9DT05TVC5kZWNrZ2xcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiByZW5kZXJlZCBsYXllcnMgcmVuZGVyZWQgaW4gdGhlIG1hcFxuLy8gVGhpcyBpbmNsdWRlcyBvbmx5IHRoZSB2aXNpYmlsZSBsYXllcnMgZm9yIHNpbmdsZSBtYXAgdmlldyBhbmQgc3BsaXQgbWFwIHZpZXdcbi8vIHJldHVybiB7W2lkXTogdHJ1ZSBcXCBmYWxzZX1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGF5ZXJzVG9SZW5kZXIoXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBWaXNTdGF0ZVsnbGF5ZXJEYXRhJ10sXG4gIG1hcExheWVycz86IFNwbGl0TWFwTGF5ZXJzIHwgdW5kZWZpbmVkIHwgbnVsbFxuKTogTGF5ZXJzVG9SZW5kZXIge1xuICByZXR1cm4gbGF5ZXJzLnJlZHVjZShcbiAgICAoYWNjdSwgbGF5ZXIsIGlkeCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbbGF5ZXIuaWRdOiBpc0xheWVyUmVuZGVyYWJsZShsYXllciwgbGF5ZXJEYXRhW2lkeF0pICYmIGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBtYXBMYXllcnMpXG4gICAgfSksXG4gICAge31cbiAgKTtcbn1cblxudHlwZSBDdXN0b21EZWNrTGF5ZXIgPSBEZWNrTGF5ZXI8RGVja0xheWVyUHJvcHM+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcz86IGFueSk6IFtDdXN0b21EZWNrTGF5ZXJbXSwgQ3VzdG9tRGVja0xheWVyW11dIHtcbiAgY29uc3QgYm90dG9tRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LmxheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy5sYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LmxheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy5sYXllcnMoKVxuICAgIDogW107XG4gIGNvbnN0IHRvcERlY2tMYXllcnMgPSBBcnJheS5pc0FycmF5KGRlY2tHbFByb3BzPy50b3BMYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8udG9wTGF5ZXJzXG4gICAgOiBpc0Z1bmN0aW9uKGRlY2tHbFByb3BzPy50b3BMYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKClcbiAgICA6IFtdO1xuXG4gIHJldHVybiBbYm90dG9tRGVja0xheWVycywgdG9wRGVja0xheWVyc107XG59XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVEZWNrTGF5ZXJzUHJvcHMgPSB7XG4gIG1hcEluZGV4PzogbnVtYmVyO1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgbWFwYm94QXBpVXJsPzogc3RyaW5nO1xuICBwcmltYXJ5TWFwPzogYm9vbGVhbjtcbiAgaXNBbm5vdGF0aW9uTW9kZT86IGJvb2xlYW47XG4gIGxheWVyc0ZvckRlY2s/OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn07XG4gIGVkaXRvckluZm8/OiB7XG4gICAgZWRpdG9yOiBFZGl0b3I7XG4gICAgZWRpdG9yTWVudUFjdGl2ZTogYm9vbGVhbjtcbiAgICBvblNldEZlYXR1cmVzOiAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gYW55O1xuICAgIHNldFNlbGVjdGVkRmVhdHVyZTogKFxuICAgICAgZmVhdHVyZTogRmVhdHVyZSB8IG51bGwsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0PzogRmVhdHVyZVNlbGVjdGlvbkNvbnRleHRcbiAgICApID0+IGFueTtcbiAgICBvbkFwcGx5UG9seWdvbkZpbHRlckFsbD86IChmZWF0dXJlOiBGZWF0dXJlKSA9PiBhbnk7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb246IHtcbiAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW107XG4gICAgfTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleGVzOiBudW1iZXJbXTtcbiAgICB2aWV3cG9ydDogVmlld3BvcnQ7XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZExheWVyQ2FsbGJhY2tzKFxuICBsYXllckNhbGxiYWNrczogTGF5ZXJDYWxsYmFja3MgPSB7fSxcbiAgaWR4OiBudW1iZXJcbik6IEJpbmRlZExheWVyQ2FsbGJhY2tzIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyQ2FsbGJhY2tzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBba2V5XTogdmFsID0+IGxheWVyQ2FsbGJhY2tzW2tleV0oaWR4LCB2YWwpXG4gICAgfSksXG4gICAge30gYXMgUmVjb3JkPHN0cmluZywgKHZhbDogdW5rbm93bikgPT4gdm9pZD5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IGFueVtdLFxuICBjdXJyZW50TGF5ZXJzRm9yRGVjazoge1trZXk6IHN0cmluZ106IGJvb2xlYW59LFxuICByZW5kZXJQcm9wczoge1xuICAgIGRhdGFzZXRzOiBhbnk7XG4gICAgaG92ZXJJbmZvOiBhbnk7XG4gICAgY2xpY2tlZDogYW55O1xuICAgIG1hcFN0YXRlOiBhbnk7XG4gICAgaW50ZXJhY3Rpb25Db25maWc6IGFueTtcbiAgICBhbmltYXRpb25Db25maWc6IGFueTtcbiAgICBtYXBMYXllcnM6IGFueTtcbiAgICBoYXNTaGFkb3dFZmZlY3Q6IGJvb2xlYW47XG4gICAgaXNBbm5vdGF0aW9uTW9kZT86IGJvb2xlYW47XG4gIH0sXG4gIGxheWVyQ2FsbGJhY2tzPzogYW55XG4pOiBhbnlbXSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBtYXBTdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgbWFwTGF5ZXJzLFxuICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICBpc0Fubm90YXRpb25Nb2RlXG4gIH0gPSByZW5kZXJQcm9wcztcbiAgcmV0dXJuIGxheWVyT3JkZXJcbiAgICAuc2xpY2UoKVxuICAgIC5yZXZlcnNlKClcbiAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGVsZW1lbnQgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgICAgIGxheWVyR3JvdXAubGF5ZXJPcmRlcixcbiAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgICAgIGN1cnJlbnRMYXllcnNGb3JEZWNrLFxuICAgICAgICAgICAgcmVuZGVyUHJvcHMsXG4gICAgICAgICAgICBsYXllckNhbGxiYWNrc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxheWVySWQgPSBlbGVtZW50IGFzIHN0cmluZztcbiAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgIGlmIChsYXllckluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBiaW5kZWRMYXllckNhbGxiYWNrcyA9IGxheWVyQ2FsbGJhY2tzXG4gICAgICAgID8gYmluZExheWVyQ2FsbGJhY2tzKGxheWVyQ2FsbGJhY2tzLCBsYXllckluZGV4KVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBkYXRhID0gbGF5ZXJEYXRhW2xheWVySW5kZXhdO1xuICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBsYXllcixcbiAgICAgICAgICBsYXllckluZGV4LFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIG1hcExheWVycyxcbiAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICBoYXNTaGFkb3dFZmZlY3QsXG4gICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBiaW5kZWRMYXllckNhbGxiYWNrc1xuICAgICAgKTtcbiAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQobGF5ZXJPdmVybGF5IHx8IFtdKTtcbiAgICB9LCBbXSBhcyBhbnlbXSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnMoXG4gIHt2aXNTdGF0ZSwgbWFwU3RhdGUsIG1hcFN0eWxlfTogYW55LFxuICBvcHRpb25zPzogQ29tcHV0ZURlY2tMYXllcnNQcm9wcyxcbiAgbGF5ZXJDYWxsYmFja3M/OiBMYXllckNhbGxiYWNrcyxcbiAgZGVja0dsUHJvcHM/OiBhbnlcbik6IExheWVyW10ge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgZWZmZWN0cyxcbiAgICBsYXllcnMsXG4gICAgbGF5ZXJPcmRlcixcbiAgICBsYXllckRhdGEsXG4gICAgaG92ZXJJbmZvLFxuICAgIGNsaWNrZWQsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgIHNwbGl0TWFwc1xuICB9ID0gdmlzU3RhdGU7XG5cbiAgY29uc3Qge1xuICAgIG1hcEluZGV4LFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgIG1hcGJveEFwaVVybCxcbiAgICBwcmltYXJ5TWFwLFxuICAgIGxheWVyc0ZvckRlY2ssXG4gICAgZWRpdG9ySW5mbyxcbiAgICBpc0Fubm90YXRpb25Nb2RlXG4gIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBkYXRhTGF5ZXJzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0IGhhc1NoYWRvd0VmZmVjdCA9IGVmZmVjdHMuc29tZShlZmZlY3QgPT4ge1xuICAgIHJldHVybiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZTtcbiAgfSk7XG5cbiAgaWYgKGxheWVyRGF0YSAmJiBsYXllckRhdGEubGVuZ3RoKSB7XG4gICAgY29uc3QgbWFwTGF5ZXJzID0gZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyhzcGxpdE1hcHMsIG1hcEluZGV4IHx8IDApO1xuXG4gICAgY29uc3QgY3VycmVudExheWVyc0ZvckRlY2sgPSBsYXllcnNGb3JEZWNrIHx8IHByZXBhcmVMYXllcnNGb3JEZWNrKGxheWVycywgbGF5ZXJEYXRhKTtcblxuICAgIGRhdGFMYXllcnMgPSBsYXllck9yZGVyXG4gICAgICAuc2xpY2UoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLnJlZHVjZSgob3ZlcmxheXMsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgICAgaWYgKCFsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KFxuICAgICAgICAgICAgY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllcklkID0gZWxlbWVudCBhcyBzdHJpbmc7XG4gICAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICA/IGJpbmRMYXllckNhbGxiYWNrcyhsYXllckNhbGxiYWNrcywgbGF5ZXJJbmRleClcbiAgICAgICAgICA6IHt9O1xuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGxheWVyRGF0YVtsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmluZGVkTGF5ZXJDYWxsYmFja3NcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgICAgfSwgW10pO1xuICB9XG5cbiAgaWYgKCFwcmltYXJ5TWFwKSB7XG4gICAgcmV0dXJuIGRhdGFMYXllcnM7XG4gIH1cblxuICBpZiAoXG4gICAgbWFwU3R5bGU/LnZpc2libGVMYXllckdyb3Vwc1snM2QgYnVpbGRpbmcnXSAmJlxuICAgIHByaW1hcnlNYXAgJiZcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiAmJlxuICAgIG1hcGJveEFwaVVybFxuICApIHtcbiAgICBkYXRhTGF5ZXJzLnB1c2goXG4gICAgICBuZXcgVGhyZWVEQnVpbGRpbmdMYXllcih7XG4gICAgICAgIGlkOiAnX2tlcGxlcmdsXzNkLWJ1aWxkaW5nJyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgdGhyZWVEQnVpbGRpbmdDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvcixcbiAgICAgICAgcGlja2FibGU6IEJvb2xlYW4oaXNBbm5vdGF0aW9uTW9kZSksXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgZ2V0RmlsbENvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IFtjdXN0b21Cb3R0b21EZWNrTGF5ZXJzLCBjdXN0b21Ub3BEZWNrTGF5ZXJzXSA9IGdldEN1c3RvbURlY2tMYXllcnMoZGVja0dsUHJvcHMpO1xuXG4gIGNvbnN0IGVkaXRvckxheWVyOiBhbnlbXSA9IFtdO1xuICBpZiAoZWRpdG9ySW5mbykge1xuICAgIGVkaXRvckxheWVyLnB1c2goXG4gICAgICBnZXRFZGl0b3JMYXllcih7XG4gICAgICAgIC4uLmVkaXRvckluZm8sXG4gICAgICAgIG1hcFN0YXRlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gWy4uLmN1c3RvbUJvdHRvbURlY2tMYXllcnMsIC4uLmRhdGFMYXllcnMsIC4uLmN1c3RvbVRvcERlY2tMYXllcnMsIC4uLmVkaXRvckxheWVyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzPFQgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KGxheWVyczogVFtdKTogc3RyaW5nW10ge1xuICByZXR1cm4gbGF5ZXJzLm1hcCgoe2lkfSkgPT4gaWQpO1xufVxuXG4vLyAtLS0gTGF5ZXIgR3JvdXAgVXRpbGl0aWVzIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TGF5ZXJHcm91cChwcm9wcz86IFBhcnRpYWw8TGF5ZXJPcmRlckdyb3VwPik6IExheWVyT3JkZXJHcm91cCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHByb3BzPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogcHJvcHM/LmxhYmVsID8/ICdOZXcgZ3JvdXAnLFxuICAgIGlzVmlzaWJsZTogcHJvcHM/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGxheWVyT3JkZXI6IHByb3BzPy5sYXllck9yZGVyID8/IFtdLFxuICAgIGlzSW5jbHVkZWRJbkxlZ2VuZDogcHJvcHM/LmlzSW5jbHVkZWRJbkxlZ2VuZCA/PyB0cnVlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGVsZW1lbnQ6IExheWVyT3JkZXJFbnRyeSxcbiAgYXRJbmRleD86IG51bWJlclxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IGlkeCA9IGF0SW5kZXggPz8gMDtcbiAgY29uc3QgcmVzdWx0ID0gWy4uLmxheWVyT3JkZXJdO1xuICByZXN1bHQuc3BsaWNlKGlkeCwgMCwgZWxlbWVudCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGVsZW1lbnQ6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGlmICghbGF5ZXJPcmRlcikgcmV0dXJuIFtdO1xuICBjb25zdCBlbGVtZW50SWQgPSB0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogZWxlbWVudC5pZDtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBsYXllck9yZGVyLmZpbHRlcihlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXR1cm4gKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkuaWQgIT09IGVsZW1lbnRJZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5ICE9PSBlbGVtZW50SWQ7XG4gIH0pO1xuXG4gIG5ld0xheWVyT3JkZXIgPSBuZXdMYXllck9yZGVyLm1hcChlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdyb3VwLFxuICAgICAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoZ3JvdXAubGF5ZXJPcmRlciwgZWxlbWVudElkKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9KTtcblxuICByZXR1cm4gbmV3TGF5ZXJPcmRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJHcm91cElkOiBzdHJpbmdcbik6IExheWVyT3JkZXJHcm91cCB8IHVuZGVmaW5lZCB7XG4gIGxldCBncm91cDogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVyT3JkZXIubGVuZ3RoICYmICFncm91cDsgaSsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBsYXllck9yZGVyW2ldO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgZ3JvdXAgPVxuICAgICAgICBncnAuaWQgPT09IGxheWVyR3JvdXBJZCA/IGdycCA6IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHBhcmVudCBncm91cCB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gbGF5ZXIgSUQuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgbGF5ZXIgaXMgYXQgdGhlIHJvb3QgbGV2ZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxheWVyT3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdyb3VwLmxheWVyT3JkZXIuc29tZShlID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlID09PSBsYXllcklkKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXN0ZWQgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihncm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgICAgIGlmIChuZXN0ZWQpIHJldHVybiBuZXN0ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlcjogTGF5ZXJPcmRlciwgbGF5ZXJFbnRyeUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICBpc1BsYWluT2JqZWN0KGVudHJ5KSA/IChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkID09PSBsYXllckVudHJ5SWQgOiBlbnRyeSA9PT0gbGF5ZXJFbnRyeUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBmb3VuZCA9IGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3VuZCA9IGxheWVySWQgPT09IGVudHJ5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgb2xkRW50cnk6IExheWVyT3JkZXJFbnRyeSxcbiAgbmV3RW50cnk6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IG9sZEVudHJ5SWQgPSB0eXBlb2Ygb2xkRW50cnkgPT09ICdzdHJpbmcnID8gb2xkRW50cnkgOiBvbGRFbnRyeS5pZDtcbiAgcmV0dXJuIGxheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVudHJ5ID09PSBvbGRFbnRyeUlkID8gbmV3RW50cnkgOiBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBvbGRFbnRyeUlkKSB7XG4gICAgICAgIHJldHVybiBuZXdFbnRyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIG9sZEVudHJ5LCBuZXdFbnRyeSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBuZXdMYXllckdyb3VwOiBMYXllck9yZGVyR3JvdXBcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5pZCA9PT0gbmV3TGF5ZXJHcm91cC5pZCkge1xuICAgICAgICByZXR1cm4gbmV3TGF5ZXJHcm91cDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGF0TGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyKTogRmxhdExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgb3JkZXJFbnRyeSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9yZGVyRW50cnkpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgLi4uZ2V0RmxhdExheWVyT3JkZXIoKG9yZGVyRW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKV07XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWNjLCBvcmRlckVudHJ5IGFzIHN0cmluZ107XG4gIH0sIFtdIGFzIEZsYXRMYXllck9yZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeShcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzPzogTGF5ZXJbXSB8IHJlYWRvbmx5IExheWVyW11cbik6IExheWVyT3JkZXJIaWVyYXJjaHkge1xuICBjb25zdCB2YWxpZExheWVycyA9IGxheWVycz8uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgWydsYXllckdyb3VwJywgZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXBdIGFzIGNvbnN0XTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXIgPSB2YWxpZExheWVycz8uZmluZChsID0+IGwuaWQgPT09IGVsZW1lbnQpO1xuICAgIGlmICghbGF5ZXIgfHwgbGF5ZXIuY29uZmlnLmhpZGRlbikge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIFsnbGF5ZXInLCBsYXllcl0gYXMgY29uc3RdO1xuICB9LCBbXSBhcyBMYXllck9yZGVySGllcmFyY2h5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiB7aWQ6IHN0cmluZ31bXVxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBlbnRyeSkpIHtcbiAgICAgICAgYWNjLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmxheWVyT3JkZXIpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIC4uLmdycCxcbiAgICAgICAgICBsYXllck9yZGVyOiByZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIG9yaWdpbkxheWVySWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25MYXllcklkOiBzdHJpbmdcbik6IFZpc1N0YXRlWydsYXllck9yZGVyJ10ge1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgY29uc3Qgb3ZlckluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG5cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSB8fCBvdmVySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxheWVyT3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFycmF5TW92ZShsYXllck9yZGVyLCBhY3RpdmVJbmRleCwgb3ZlckluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gW2xheWVySWQsIC4uLmxheWVyT3JkZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZShcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpZWxkSW5kZXg6IG51bWJlclxuKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRhUm93KSByZXR1cm4gZGF0YS52YWx1ZUF0KGZpZWxkSW5kZXgpO1xuICByZXR1cm4gZGF0YVtmaWVsZEluZGV4XTtcbn1cblxuLyoqIENoZWNrcyBpZiBhbnkgRGVjayBsYXllcnMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYXJlQW55RGVja0xheWVyc0xvYWRpbmcobGF5ZXJzOiBEZWNrTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXJzLnNvbWUoXG4gICAgLy8gbGF5ZXIuaXNMb2FkZWQgY2hhbmdlcyBmcmVxdWVudGx5IGluIERlY2sgKGV2ZW4gb24gaG92ZXIpIHNvIHdlIGNoZWNrIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgIGxheWVyID0+IGxheWVyLmludGVybmFsU3RhdGUgJiYgIWxheWVyLmlzTG9hZGVkXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxPQUFPLE1BQU0sZ0JBQWdCO0FBRXBDLFNBQVFDLGlCQUFpQixFQUFFQyx1QkFBdUIsUUFBTyxzQkFBc0I7QUFxQi9FLFNBS0VDLGtCQUFrQixFQUNsQkMsY0FBYyxRQUNULG1CQUFtQjtBQUkxQixTQUFRQyxVQUFVLEVBQUVDLHlCQUF5QixFQUFFQyxPQUFPLEVBQUVDLGFBQWEsUUFBTyxrQkFBa0I7QUFDOUYsU0FBUUMsU0FBUyxFQUFFQyxjQUFjLFFBQU8seUJBQXlCO0FBRWpFLFNBQVFDLG1CQUFtQixRQUFPLDBCQUEwQjtBQTZCNUQ7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxnQkFBZ0JBLENBQUNDLE9BQW9CLEVBQUVDLFlBQThCLEVBQVc7RUFDOUYsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPLEVBQUU7RUFDWDtFQUVBLElBQU1FLFVBQVUsR0FBSUMsTUFBTSxDQUFDQyxJQUFJLENBQUNILFlBQVksQ0FBQyxDQUFtQ0ksTUFBTSxDQUNwRixVQUFDQyxRQUFRLEVBQUVDLEVBQUUsRUFBSztJQUNoQixJQUFNQyxNQUF3QyxHQUM1QyxPQUFPUCxZQUFZLENBQUNNLEVBQUUsQ0FB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QUFNO01BQ0wsSUFBTUssR0FBRyxHQUFHTCxLQUF3QjtNQUNwQyxJQUFJSyxHQUFHLENBQUNsRSxVQUFVLEVBQUU7UUFDbEJuRSxHQUFHLENBQUNvRyxJQUFJLENBQUFsSSxhQUFBLENBQUFBLGFBQUEsS0FDSG1LLEdBQUc7VUFDTmxFLFVBQVUsRUFBRStGLDhCQUE4QixDQUFDN0IsR0FBRyxDQUFDbEUsVUFBVSxFQUFFOUUsTUFBTTtRQUFDLEVBQ25FLENBQUM7TUFDSjtJQUNGO0lBQ0EsT0FBT1csR0FBRztFQUNaLENBQUMsRUFBRSxFQUFnQixDQUFDO0FBQ3RCO0FBRUEsT0FBTyxTQUFTbUssaUJBQWlCQSxDQUMvQmhHLFVBQWtDLEVBQ2xDaUcsYUFBcUIsRUFDckJDLGtCQUEwQixFQUNGO0VBQ3hCLElBQU1DLFdBQVcsR0FBR3JCLHdCQUF3QixDQUFDOUUsVUFBVSxFQUFFaUcsYUFBYSxDQUFDO0VBQ3ZFLElBQU1HLFNBQVMsR0FBR3RCLHdCQUF3QixDQUFDOUUsVUFBVSxFQUFFa0csa0JBQWtCLENBQUM7RUFFMUUsSUFBSUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxJQUFJQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDMUMsT0FBT3BHLFVBQVU7RUFDbkI7RUFDQSxPQUFPdEgsU0FBUyxDQUFDc0gsVUFBVSxFQUFFbUcsV0FBVyxFQUFFQyxTQUFTLENBQUM7QUFDdEQ7QUFFQSxPQUFPLFNBQVNDLG9CQUFvQkEsQ0FDbENyRyxVQUFrQyxFQUNsQ1UsT0FBZSxFQUNIO0VBQ1osUUFBUUEsT0FBTyxFQUFBOUcsTUFBQSxDQUFBZ0osa0JBQUEsQ0FBSzVDLFVBQVU7QUFDaEM7QUFFQSxPQUFPLFNBQVNzRyxzQkFBc0JBLENBQ3BDeEksSUFBb0UsRUFDcEV5SSxVQUFrQixFQUNsQjtFQUNBLElBQUksQ0FBQ3pJLElBQUksRUFBRSxPQUFPL0MsU0FBUztFQUMzQixJQUFJK0MsSUFBSSxZQUFZdEYsT0FBTyxFQUFFLE9BQU9zRixJQUFJLENBQUMwSSxPQUFPLENBQUNELFVBQVUsQ0FBQztFQUM1RCxPQUFPekksSUFBSSxDQUFDeUksVUFBVSxDQUFDO0FBQ3pCOztBQUVBO0FBQ0EsT0FBTyxTQUFTRSx1QkFBdUJBLENBQUN2TCxNQUFtQixFQUFXO0VBQ3BFLE9BQU9BLE1BQU0sQ0FBQ0wsSUFBSTtFQUNoQjtFQUNBLFVBQUFULEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNzTSxhQUFhLElBQUksQ0FBQ3RNLEtBQUssQ0FBQ3VNLFFBQVE7RUFBQSxDQUNqRCxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|
|
733
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zb2xlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImdldEVkaXRvckxheWVyIiwiaXNGdW5jdGlvbiIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJEYXRhUm93IiwiaXNQbGFpbk9iamVjdCIsImFycmF5TW92ZSIsImdlbmVyYXRlSGFzaElkIiwiZ2V0TGF5ZXJab29tT3BhY2l0eUZhY3RvciIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImxheWVyUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldmlvdXMiLCJsYyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsInByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJtYXAiLCJwIiwiX29iamVjdFNwcmVhZCIsInR5cGUiLCJkYXRhSWQiLCJpZCIsImlzVmlzaWJsZSIsImxheWVyIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwiZGF0YUNvbnRhaW5lciIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInN0YXRlIiwicGF0Y2giLCJkYXRhc2V0SWRzVG9QYXRjaCIsImxlbmd0aCIsImhhc0RlZmluZWRQYXRjaFZhbHVlIiwic29tZSIsImtleSIsInVuZGVmaW5lZCIsImRhdGFzZXRJZFNldCIsIlNldCIsImxheWVycyIsImNvbmZpZyIsImhhcyIsInNldHRpbmdzIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJhbGxvd2VkS2V5cyIsImZpbHRlciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInBhcnRpYWwiLCJhY2MiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImNhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsImxheWVyRGF0YSIsImlzVmFsaWQiLCJfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzIiwiaGFzQWxsQ29sdW1ucyIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwidXBkYXRlTGF5ZXJDb25maWciLCJlcnJvck1lc3NhZ2UiLCJlcnIiLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsInN1YnN0cmluZyIsImdldExheWVySG92ZXJQcm9wIiwiX3JlZiIsImFuaW1hdGlvbkNvbmZpZyIsImludGVyYWN0aW9uQ29uZmlnIiwiaG92ZXJJbmZvIiwibGF5ZXJzVG9SZW5kZXIiLCJ0b29sdGlwIiwiZW5hYmxlZCIsInBpY2tlZCIsIm9iamVjdCIsIm92ZXJsYXkiLCJpZHgiLCJpbmRleCIsImdldEhvdmVyRGF0YSIsIl9kYXRhc2V0cyRkYXRhSWQiLCJmaWVsZHMiLCJkYXRhIiwiZmllbGRzVG9TaG93IiwiY3VycmVudFRpbWUiLCJaT09NX09QQUNJVFlfUFJPUF9LRVlTIiwic2NhbGVab29tT3BhY2l0eVN1YkxheWVyUHJvcHMiLCJzdWJMYXllclByb3BzIiwiZmFjdG9yIiwiY2hhbmdlZCIsIm5leHQiLCJfaSIsIl9PYmplY3Qka2V5cyIsInN1YmxheWVyIiwiX3R5cGVvZiIsInNjYWxlZCIsInN1YmxheWVyQ2hhbmdlZCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImUiLCJmIiwiYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyIiwiZGVja0xheWVyIiwiX2RlY2tMYXllciRwcm9wcyIsIl9kZWNrTGF5ZXIkcHJvcHMyIiwiX2RlY2tMYXllciRwcm9wczMiLCJjbG9uZSIsImJhc2VPcGFjaXR5Iiwib3BhY2l0eSIsIl9zdWJMYXllclByb3BzIiwidmlzaWJsZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsIkJvb2xlYW4iLCJyZW5kZXJlZCIsInJlbmRlckxheWVyIiwiem9vbSIsImlzTGF5ZXJSZW5kZXJhYmxlIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJpc0xheWVyVmlzaWJsZSIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiYWNjdSIsIl9kZWZpbmVQcm9wZXJ0eSIsIm92ZXJsYXlUeXBlIiwiZGVja2dsIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwiZ2V0Q3VzdG9tRGVja0xheWVycyIsImRlY2tHbFByb3BzIiwiYm90dG9tRGVja0xheWVycyIsInRvcERlY2tMYXllcnMiLCJ0b3BMYXllcnMiLCJiaW5kTGF5ZXJDYWxsYmFja3MiLCJhcmd1bWVudHMiLCJ2YWwiLCJjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyIiwibGF5ZXJPcmRlciIsImN1cnJlbnRMYXllcnNGb3JEZWNrIiwicmVuZGVyUHJvcHMiLCJoYXNTaGFkb3dFZmZlY3QiLCJpc0Fubm90YXRpb25Nb2RlIiwic2xpY2UiLCJyZXZlcnNlIiwib3ZlcmxheXMiLCJlbGVtZW50IiwibGF5ZXJHcm91cCIsImxheWVySWQiLCJmaW5kSW5kZXgiLCJfcmVmMyIsImJpbmRlZExheWVyQ2FsbGJhY2tzIiwibGF5ZXJPdmVybGF5IiwiY29tcHV0ZURlY2tMYXllcnMiLCJfcmVmNCIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsIm1hcFN0eWxlIiwiZWZmZWN0cyIsInNwbGl0TWFwcyIsIl9yZWY1IiwibWFwSW5kZXgiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsInByaW1hcnlNYXAiLCJsYXllcnNGb3JEZWNrIiwiZWRpdG9ySW5mbyIsImRhdGFMYXllcnMiLCJlZmZlY3QiLCJfcmVmNiIsInZpc2libGVMYXllckdyb3VwcyIsInB1c2giLCJ0aHJlZURCdWlsZGluZ0NvbG9yIiwicGlja2FibGUiLCJ1cGRhdGVUcmlnZ2VycyIsImdldEZpbGxDb2xvciIsIl9nZXRDdXN0b21EZWNrTGF5ZXJzIiwiX2dldEN1c3RvbURlY2tMYXllcnMyIiwiX3NsaWNlZFRvQXJyYXkiLCJjdXN0b21Cb3R0b21EZWNrTGF5ZXJzIiwiY3VzdG9tVG9wRGVja0xheWVycyIsImVkaXRvckxheWVyIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJfcmVmNyIsImdldE5ld0xheWVyR3JvdXAiLCJfcHJvcHMkaWQiLCJfcHJvcHMkbGFiZWwiLCJfcHJvcHMkaXNWaXNpYmxlIiwiX3Byb3BzJGxheWVyT3JkZXIiLCJfcHJvcHMkaXNJbmNsdWRlZEluTGUiLCJsYWJlbCIsImlzSW5jbHVkZWRJbkxlZ2VuZCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsImF0SW5kZXgiLCJzcGxpY2UiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJlbGVtZW50SWQiLCJuZXdMYXllck9yZGVyIiwiZW50cnkiLCJncm91cCIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVyR3JvdXBJZCIsImkiLCJncnAiLCJnZXRBbmNlc3RvckxheWVyR3JvdXBzIiwiZW50cnlJZCIsImFuY2VzdG9ycyIsInZpc2l0IiwiZW50cmllcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpc0xheWVyU2hvd25JbkxlZ2VuZCIsImV2ZXJ5IiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibmVzdGVkIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwibGF5ZXJFbnRyeUlkIiwiaXNMYXllclByZXNlbnRJbkxheWVyT3JkZXIiLCJmb3VuZCIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwib2xkRW50cnkiLCJuZXdFbnRyeSIsIm9sZEVudHJ5SWQiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwibmV3TGF5ZXJHcm91cCIsImdldEZsYXRMYXllck9yZGVyIiwib3JkZXJFbnRyeSIsImJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeSIsInZhbGlkTGF5ZXJzIiwiZmluZCIsImwiLCJoaWRkZW4iLCJyZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIiLCJyZW9yZGVyTGF5ZXJPcmRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJhY3RpdmVJbmRleCIsIm92ZXJJbmRleCIsImFkZExheWVyVG9MYXllck9yZGVyIiwiZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZSIsImZpZWxkSW5kZXgiLCJ2YWx1ZUF0IiwiYXJlQW55RGVja0xheWVyc0xvYWRpbmciLCJpbnRlcm5hbFN0YXRlIiwiaXNMb2FkZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGF5ZXItdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuXG5pbXBvcnQge0dFT0NPREVSX0xBWUVSX0lELCBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVH0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMYXllciBhcyBEZWNrTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xudHlwZSBEZWNrTGF5ZXJQcm9wcyA9IGFueTtcbmltcG9ydCB7XG4gIEZpZWxkLFxuICBMYXllclZpc0NvbmZpZyxcbiAgVG9vbHRpcEZpZWxkLFxuICBDb21wYXJlVHlwZSxcbiAgU3BsaXRNYXBMYXllcnMsXG4gIEVkaXRvcixcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVNlbGVjdGlvbkNvbnRleHQsXG4gIEJpbmRlZExheWVyQ2FsbGJhY2tzLFxuICBMYXllckNhbGxiYWNrcyxcbiAgVmlld3BvcnQsXG4gIExheWVyT3JkZXJHcm91cCxcbiAgTGF5ZXJPcmRlcixcbiAgTGF5ZXJPcmRlckVudHJ5LFxuICBGbGF0TGF5ZXJPcmRlcixcbiAgTGF5ZXJPcmRlckhpZXJhcmNoeVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlLFxuICBGaW5kRGVmYXVsdExheWVyUHJvcHMsXG4gIExheWVyLFxuICBMYXllckNsYXNzZXNUeXBlLFxuICBPVkVSTEFZX1RZUEVfQ09OU1QsXG4gIGdldEVkaXRvckxheWVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcblxuaW1wb3J0IEtlcGxlclRhYmxlIGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7aXNGdW5jdGlvbiwgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcywgRGF0YVJvdywgaXNQbGFpbk9iamVjdH0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2FycmF5TW92ZSwgZ2VuZXJhdGVIYXNoSWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7Z2V0TGF5ZXJab29tT3BhY2l0eUZhY3Rvcn0gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5cbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtcbiAgcG9pbnRzOiBhbnlbXTtcbiAgY29sb3JWYWx1ZT86IGFueTtcbiAgZWxldmF0aW9uVmFsdWU/OiBhbnk7XG4gIGFnZ3JlZ2F0ZWREYXRhPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBtZWFzdXJlOiBzdHJpbmc7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9XG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRzVG9TaG93OiBUb29sdGlwRmllbGRbXTtcbiAgbGF5ZXI6IExheWVyO1xuICBwcmltYXJ5RGF0YT86IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsO1xuICBjb21wYXJlVHlwZT86IENvbXBhcmVUeXBlO1xuICBjdXJyZW50VGltZT86IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXVsnY3VycmVudFRpbWUnXTtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyUHJvcHMgPSAoT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKSBhcyBBcnJheTxrZXlvZiBMYXllckNsYXNzZXNUeXBlPikucmVkdWNlKFxuICAgIChwcmV2aW91cywgbGMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIHByZXZpb3VzKVxuICAgICAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgICAgY29uc3QgZm91bmRMYXllcnMgPSByZXN1bHQuZm91bmRMYXllcnMgfHwgcHJldmlvdXM7XG5cbiAgICAgIHJldHVybiBmb3VuZExheWVycy5jb25jYXQoXG4gICAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICB0eXBlOiBsYyxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgLy8gc2V0IGFyYyBsYXllciBpbml0aWFsIHZpc2libGl0eSB0byBmYWxzZSwgYmVjYXVzZSBhcmNzIHRlbmQgdG8gYmUgdG9vIG11c3lcbiAgICAgICAgICAuLi4obGMgPT09ICdhcmMnIHx8IGxjID09PSAnbGluZScgPyB7aXNWaXNpYmxlOiBmYWxzZX0gOiB7fSlcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW10gYXMgKEZpbmREZWZhdWx0TGF5ZXJQcm9wcyAmIHt0eXBlOiBzdHJpbmd9KVtdXG4gICk7XG5cbiAgLy8gZ28gdGhyb3VnaCBhbGwgbGF5ZXJQcm9wcyB0byBjcmVhdGUgbGF5ZXJcbiAgcmV0dXJuIGxheWVyUHJvcHMubWFwKHByb3BzID0+IHtcbiAgICBjb25zdCBsYXllciA9IG5ldyBsYXllckNsYXNzZXNbcHJvcHMudHlwZV0ocHJvcHMpO1xuICAgIHJldHVybiB0eXBlb2YgbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYHBhdGNoYCB0byBgY29uZmlnLnZpc0NvbmZpZ2Agb25seSBmb3IgbGF5ZXJzIHdob3NlIGBkYXRhSWRgIGlzIGluIGBkYXRhc2V0SWRzVG9QYXRjaGAuXG4gKiBMYXllcnMgZm9yIGRhdGFzZXRzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIHRoZSBtYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIOKAlCBgYWRkRGF0YVRvTWFwYFxuICogS2V5cyB3aG9zZSBwYXRjaCB2YWx1ZSBpcyBgdW5kZWZpbmVkYCBhcmUgc2tpcHBlZCBzbyBleGlzdGluZyB2aXNDb25maWcgaXMgbm90IGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF0Y2g6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0SWRzVG9QYXRjaDogc3RyaW5nW11cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFwYXRjaCB8fCAhT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc0RlZmluZWRQYXRjaFZhbHVlID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLnNvbWUoXG4gICAga2V5ID0+IHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICApO1xuICBpZiAoIWhhc0RlZmluZWRQYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldElkU2V0ID0gbmV3IFNldChkYXRhc2V0SWRzVG9QYXRjaCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkIHx8ICFkYXRhc2V0SWRTZXQuaGFzKGxheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3M7XG4gICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLmZpbHRlcihcbiAgICAgICAga2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXR0aW5ncywga2V5KSAmJiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0aWFsID0gYWxsb3dlZEtleXMucmVkdWNlPFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBwYXRjaFtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHBhcnRpYWwpO1xuICAgIH0pXG4gIH07XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgQ29uc29sZS5lcnJvcihlcnIpO1xuICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIGxheWVyLmlzVmFsaWQgPSBmYWxzZTtcblxuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9XG4gICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCAxMDApIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgbGF5ZXJEYXRhID0ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyLFxuICAgIGxheWVyRGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9wcyBwYXNzZWQgdG8gTGF5ZXJIb3ZlckluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgYW5pbWF0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgaG92ZXJJbmZvLFxuICBsYXllcnMsXG4gIGxheWVyc1RvUmVuZGVyLFxuICBkYXRhc2V0c1xufToge1xuICBpbnRlcmFjdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2ludGVyYWN0aW9uQ29uZmlnJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xuICBob3ZlckluZm86IFZpc1N0YXRlWydob3ZlckluZm8nXTtcbiAgbGF5ZXJzOiBWaXNTdGF0ZVsnbGF5ZXJzJ107XG4gIGxheWVyc1RvUmVuZGVyOiBMYXllcnNUb1JlbmRlcjtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xufSk6IExheWVySG92ZXJQcm9wIHwgbnVsbCB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiYgaG92ZXJJbmZvICYmIGhvdmVySW5mby5waWNrZWQpIHtcbiAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgY29uc3Qge29iamVjdCwgbGF5ZXI6IG92ZXJsYXl9ID0gaG92ZXJJbmZvO1xuXG4gICAgLy8gZGVja2dsIGxheWVyIHRvIGtlcGxlci1nbCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW292ZXJsYXkucHJvcHMuaWR4XTtcblxuICAgIC8vIE5PVEU6IGZvciBiaW5hcnkgZm9ybWF0IEdlb2pzb25MYXllciwgZGVjayB3aWxsIHJldHVybiBvYmplY3Q9bnVsbCBidXQgaG92ZXJJbmZvLmluZGV4ID49IDBcbiAgICBpZiAoXG4gICAgICAob2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCA+PSAwKSAmJlxuICAgICAgbGF5ZXIgJiZcbiAgICAgIGxheWVyLmdldEhvdmVyRGF0YSAmJlxuICAgICAgbGF5ZXJzVG9SZW5kZXJbbGF5ZXIuaWRdXG4gICAgKSB7XG4gICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgY29uc3Qge1xuICAgICAgICBjb25maWc6IHtkYXRhSWR9XG4gICAgICB9ID0gbGF5ZXI7XG4gICAgICBpZiAoIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHN9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICAgIGNvbnN0IGRhdGE6IERhdGFSb3cgfCBudWxsID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKFxuICAgICAgICBvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4LFxuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvXG4gICAgICApO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllcixcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgWk9PTV9PUEFDSVRZX1BST1BfS0VZUyA9IFsnb3BhY2l0eScsICdsaW5lT3BhY2l0eScsICdzdHJva2VPcGFjaXR5J107XG5cbi8qKiBTdHJva2UgYW5kIG91dGxpbmUgcHJvcHMgcmVwbGFjZSB0aGUgcGFyZW50IG9wYWNpdHksIHNvIHRoZXkgbmVlZCB0aGUgc2FtZSBmYWN0b3IuICovXG5mdW5jdGlvbiBzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyhcbiAgc3ViTGF5ZXJQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCxcbiAgZmFjdG9yOiBudW1iZXJcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAoIXN1YkxheWVyUHJvcHMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGNvbnN0IG5leHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyhzdWJMYXllclByb3BzKSkge1xuICAgIGNvbnN0IHN1YmxheWVyID0gc3ViTGF5ZXJQcm9wc1tpZF07XG4gICAgaWYgKCFzdWJsYXllciB8fCB0eXBlb2Ygc3VibGF5ZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICBuZXh0W2lkXSA9IHN1YmxheWVyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNjYWxlZCA9IHsuLi5zdWJsYXllcn07XG4gICAgbGV0IHN1YmxheWVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFpPT01fT1BBQ0lUWV9QUk9QX0tFWVMpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3VibGF5ZXJba2V5XSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2NhbGVkW2tleV0gPSBzdWJsYXllcltrZXldICogZmFjdG9yO1xuICAgICAgICBzdWJsYXllckNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXh0W2lkXSA9IHN1YmxheWVyQ2hhbmdlZCA/IHNjYWxlZCA6IHN1YmxheWVyO1xuICAgIGlmIChzdWJsYXllckNoYW5nZWQpIHtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hhbmdlZCA/IG5leHQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFwcGx5Wm9vbU9wYWNpdHlUb0RlY2tMYXllcihkZWNrTGF5ZXI6IGFueSwgZmFjdG9yOiBudW1iZXIpOiBhbnkge1xuICBpZiAoQXJyYXkuaXNBcnJheShkZWNrTGF5ZXIpKSB7XG4gICAgcmV0dXJuIGRlY2tMYXllci5tYXAobGF5ZXIgPT4gYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyKGxheWVyLCBmYWN0b3IpKTtcbiAgfVxuICBpZiAoIWRlY2tMYXllciB8fCBmYWN0b3IgPT09IDEgfHwgdHlwZW9mIGRlY2tMYXllci5jbG9uZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBkZWNrTGF5ZXI7XG4gIH1cbiAgY29uc3QgYmFzZU9wYWNpdHkgPSBkZWNrTGF5ZXIucHJvcHM/Lm9wYWNpdHk7XG4gIGNvbnN0IG9wYWNpdHkgPSAodHlwZW9mIGJhc2VPcGFjaXR5ID09PSAnbnVtYmVyJyA/IGJhc2VPcGFjaXR5IDogMSkgKiBmYWN0b3I7XG4gIGNvbnN0IHN1YkxheWVyUHJvcHMgPSBzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyhkZWNrTGF5ZXIucHJvcHM/Ll9zdWJMYXllclByb3BzLCBmYWN0b3IpO1xuICByZXR1cm4gZGVja0xheWVyLmNsb25lKHtcbiAgICBvcGFjaXR5LFxuICAgIC8vIEZ1bGx5IGZhZGVkIGxheWVycyBhcmUgbm90IHBpY2thYmxlLlxuICAgIHZpc2libGU6IGRlY2tMYXllci5wcm9wcz8udmlzaWJsZSAhPT0gZmFsc2UgJiYgZmFjdG9yID4gMCxcbiAgICAuLi4oc3ViTGF5ZXJQcm9wcyA/IHtfc3ViTGF5ZXJQcm9wczogc3ViTGF5ZXJQcm9wc30gOiB7fSlcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEZWNrR2xMYXllcihwcm9wczogYW55LCBsYXllckNhbGxiYWNrczoge1trZXk6IHN0cmluZ106IGFueX0pIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGxheWVyLFxuICAgIGxheWVySW5kZXgsXG4gICAgZGF0YSxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBtYXBTdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgbWFwTGF5ZXJzLFxuICAgIGV4cGVyaW1lbnRhbENvbnRleHRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IHtncHVGaWx0ZXJ9ID0gZGF0YXNldCB8fCB7fTtcbiAgY29uc3Qgb2JqZWN0SG92ZXJlZCA9IGNsaWNrZWQgfHwgaG92ZXJJbmZvO1xuICAvLyBpbiBzcGxpdCBtb2RlIGEgbGF5ZXIgbWlzc2luZyBmcm9tIG1hcExheWVycyBpcyBoaWRkZW4sIHNvIGNvZXJjZSB0byBhIGJvb2xlYW5cbiAgLy8gaW5zdGVhZCBvZiBsZWFraW5nIHVuZGVmaW5lZCBpbnRvIGRlY2suZ2wncyB2aXNpYmxlIHByb3BcbiAgY29uc3QgdmlzaWJsZSA9ICFtYXBMYXllcnMgfHwgQm9vbGVhbihtYXBMYXllcnNbbGF5ZXIuaWRdKTtcbiAgLy8gTGF5ZXIgaXMgTGF5ZXIgY2xhc3NcbiAgY29uc3QgcmVuZGVyZWQgPSBsYXllci5yZW5kZXJMYXllcih7XG4gICAgZGF0YSxcbiAgICBncHVGaWx0ZXIsXG4gICAgaWR4OiBsYXllckluZGV4LFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgIG1hcFN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBvYmplY3RIb3ZlcmVkLFxuICAgIHZpc2libGUsXG4gICAgZGF0YXNldCxcbiAgICBleHBlcmltZW50YWxDb250ZXh0XG4gIH0pO1xuICBjb25zdCBmYWN0b3IgPSBnZXRMYXllclpvb21PcGFjaXR5RmFjdG9yKGxheWVyLmlkLCBtYXBTdGF0ZT8uem9vbSwgaW50ZXJhY3Rpb25Db25maWcpO1xuICByZXR1cm4gYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyKHJlbmRlcmVkLCBmYWN0b3IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclJlbmRlcmFibGUobGF5ZXI6IExheWVyLCBsYXllckRhdGEpIHtcbiAgcmV0dXJuIGxheWVyLmlkICE9PSBHRU9DT0RFUl9MQVlFUl9JRCAmJiBsYXllci5zaG91bGRSZW5kZXJMYXllcihsYXllckRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycykge1xuICByZXR1cm4gKFxuICAgIGxheWVyLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBkb24ndCByZW5kZXIgaXRcbiAgICAoIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pKVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiBsYXllcnMgcmVuZGVyZWQgYnkgdGhlIGRlY2suZ2xcbi8vIE5vdGUsIGlzVmlzaWJsZTogZmFsc2UgbGF5ZXIgaXMgcGFzc2VkIHRvIGRlY2suZ2wgaGVyZVxuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNGb3JEZWNrKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddXG4pOiB7XG4gIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG59IHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTpcbiAgICAgICAgaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBsYXllci5vdmVybGF5VHlwZSA9PT0gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8vIFByZXBhcmUgYSBkaWN0IG9mIHJlbmRlcmVkIGxheWVycyByZW5kZXJlZCBpbiB0aGUgbWFwXG4vLyBUaGlzIGluY2x1ZGVzIG9ubHkgdGhlIHZpc2liaWxlIGxheWVycyBmb3Igc2luZ2xlIG1hcCB2aWV3IGFuZCBzcGxpdCBtYXAgdmlld1xuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNUb1JlbmRlcihcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXSxcbiAgbWFwTGF5ZXJzPzogU3BsaXRNYXBMYXllcnMgfCB1bmRlZmluZWQgfCBudWxsXG4pOiBMYXllcnNUb1JlbmRlciB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06IGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycylcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG50eXBlIEN1c3RvbURlY2tMYXllciA9IERlY2tMYXllcjxEZWNrTGF5ZXJQcm9wcz47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzPzogYW55KTogW0N1c3RvbURlY2tMYXllcltdLCBDdXN0b21EZWNrTGF5ZXJbXV0ge1xuICBjb25zdCBib3R0b21EZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVycygpXG4gICAgOiBbXTtcbiAgY29uc3QgdG9wRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnMoKVxuICAgIDogW107XG5cbiAgcmV0dXJuIFtib3R0b21EZWNrTGF5ZXJzLCB0b3BEZWNrTGF5ZXJzXTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcHV0ZURlY2tMYXllcnNQcm9wcyA9IHtcbiAgbWFwSW5kZXg/OiBudW1iZXI7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIHByaW1hcnlNYXA/OiBib29sZWFuO1xuICBpc0Fubm90YXRpb25Nb2RlPzogYm9vbGVhbjtcbiAgbGF5ZXJzRm9yRGVjaz86IHtba2V5OiBzdHJpbmddOiBib29sZWFufTtcbiAgZWRpdG9ySW5mbz86IHtcbiAgICBlZGl0b3I6IEVkaXRvcjtcbiAgICBlZGl0b3JNZW51QWN0aXZlOiBib29sZWFuO1xuICAgIG9uU2V0RmVhdHVyZXM6IChmZWF0dXJlczogRmVhdHVyZVtdKSA9PiBhbnk7XG4gICAgc2V0U2VsZWN0ZWRGZWF0dXJlOiAoXG4gICAgICBmZWF0dXJlOiBGZWF0dXJlIHwgbnVsbCxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHQ/OiBGZWF0dXJlU2VsZWN0aW9uQ29udGV4dFxuICAgICkgPT4gYW55O1xuICAgIG9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsPzogKGZlYXR1cmU6IEZlYXR1cmUpID0+IGFueTtcbiAgICBmZWF0dXJlQ29sbGVjdGlvbjoge1xuICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbiAgICB9O1xuICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IG51bWJlcltdO1xuICAgIHZpZXdwb3J0OiBWaWV3cG9ydDtcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTGF5ZXJDYWxsYmFja3MoXG4gIGxheWVyQ2FsbGJhY2tzOiBMYXllckNhbGxiYWNrcyA9IHt9LFxuICBpZHg6IG51bWJlclxuKTogQmluZGVkTGF5ZXJDYWxsYmFja3Mge1xuICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJDYWxsYmFja3MpLnJlZHVjZShcbiAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtrZXldOiB2YWwgPT4gbGF5ZXJDYWxsYmFja3Nba2V5XShpZHgsIHZhbClcbiAgICB9KSxcbiAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCAodmFsOiB1bmtub3duKSA9PiB2b2lkPlxuICApO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogYW55W10sXG4gIGN1cnJlbnRMYXllcnNGb3JEZWNrOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sXG4gIHJlbmRlclByb3BzOiB7XG4gICAgZGF0YXNldHM6IGFueTtcbiAgICBob3ZlckluZm86IGFueTtcbiAgICBjbGlja2VkOiBhbnk7XG4gICAgbWFwU3RhdGU6IGFueTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzogYW55O1xuICAgIGFuaW1hdGlvbkNvbmZpZzogYW55O1xuICAgIG1hcExheWVyczogYW55O1xuICAgIGhhc1NoYWRvd0VmZmVjdDogYm9vbGVhbjtcbiAgICBpc0Fubm90YXRpb25Nb2RlPzogYm9vbGVhbjtcbiAgfSxcbiAgbGF5ZXJDYWxsYmFja3M/OiBhbnlcbik6IGFueVtdIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgaGFzU2hhZG93RWZmZWN0LFxuICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgfSA9IHJlbmRlclByb3BzO1xuICByZXR1cm4gbGF5ZXJPcmRlclxuICAgIC5zbGljZSgpXG4gICAgLnJldmVyc2UoKVxuICAgIC5yZWR1Y2UoKG92ZXJsYXlzLCBlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGlmICghbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChcbiAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICByZW5kZXJQcm9wcyxcbiAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJZCA9IGVsZW1lbnQgYXMgc3RyaW5nO1xuICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgPyBiaW5kTGF5ZXJDYWxsYmFja3MobGF5ZXJDYWxsYmFja3MsIGxheWVySW5kZXgpXG4gICAgICAgIDoge307XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAge1xuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRlZExheWVyQ2FsbGJhY2tzXG4gICAgICApO1xuICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgIH0sIFtdIGFzIGFueVtdKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGVja0xheWVycyhcbiAge3Zpc1N0YXRlLCBtYXBTdGF0ZSwgbWFwU3R5bGV9OiBhbnksXG4gIG9wdGlvbnM/OiBDb21wdXRlRGVja0xheWVyc1Byb3BzLFxuICBsYXllckNhbGxiYWNrcz86IExheWVyQ2FsbGJhY2tzLFxuICBkZWNrR2xQcm9wcz86IGFueVxuKTogTGF5ZXJbXSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBlZmZlY3RzLFxuICAgIGxheWVycyxcbiAgICBsYXllck9yZGVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgc3BsaXRNYXBzXG4gIH0gPSB2aXNTdGF0ZTtcblxuICBjb25zdCB7XG4gICAgbWFwSW5kZXgsXG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgbWFwYm94QXBpVXJsLFxuICAgIHByaW1hcnlNYXAsXG4gICAgbGF5ZXJzRm9yRGVjayxcbiAgICBlZGl0b3JJbmZvLFxuICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGRhdGFMYXllcnM6IGFueVtdID0gW107XG5cbiAgY29uc3QgaGFzU2hhZG93RWZmZWN0ID0gZWZmZWN0cy5zb21lKGVmZmVjdCA9PiB7XG4gICAgcmV0dXJuIGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlO1xuICB9KTtcblxuICBpZiAobGF5ZXJEYXRhICYmIGxheWVyRGF0YS5sZW5ndGgpIHtcbiAgICBjb25zdCBtYXBMYXllcnMgPSBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzKHNwbGl0TWFwcywgbWFwSW5kZXggfHwgMCk7XG5cbiAgICBjb25zdCBjdXJyZW50TGF5ZXJzRm9yRGVjayA9IGxheWVyc0ZvckRlY2sgfHwgcHJlcGFyZUxheWVyc0ZvckRlY2sobGF5ZXJzLCBsYXllckRhdGEpO1xuXG4gICAgZGF0YUxheWVycyA9IGxheWVyT3JkZXJcbiAgICAgIC5zbGljZSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBlbGVtZW50IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgICBsYXllckdyb3VwLmxheWVyT3JkZXIsXG4gICAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgICBjdXJyZW50TGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICAgICAgaGFzU2hhZG93RWZmZWN0LFxuICAgICAgICAgICAgICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxheWVySWQgPSBlbGVtZW50IGFzIHN0cmluZztcbiAgICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgICBpZiAobGF5ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmluZGVkTGF5ZXJDYWxsYmFja3MgPSBsYXllckNhbGxiYWNrc1xuICAgICAgICAgID8gYmluZExheWVyQ2FsbGJhY2tzKGxheWVyQ2FsbGJhY2tzLCBsYXllckluZGV4KVxuICAgICAgICAgIDoge307XG4gICAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW2xheWVySW5kZXhdO1xuICAgICAgICBjb25zdCBkYXRhID0gbGF5ZXJEYXRhW2xheWVySW5kZXhdO1xuICAgICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgbGF5ZXJJbmRleCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIG1hcExheWVycyxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgICAgaGFzU2hhZG93RWZmZWN0LFxuICAgICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBiaW5kZWRMYXllckNhbGxiYWNrc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgICB9LCBbXSk7XG4gIH1cblxuICBpZiAoIXByaW1hcnlNYXApIHtcbiAgICByZXR1cm4gZGF0YUxheWVycztcbiAgfVxuXG4gIGlmIChcbiAgICBtYXBTdHlsZT8udmlzaWJsZUxheWVyR3JvdXBzWyczZCBidWlsZGluZyddICYmXG4gICAgcHJpbWFyeU1hcCAmJlxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuICYmXG4gICAgbWFwYm94QXBpVXJsXG4gICkge1xuICAgIGRhdGFMYXllcnMucHVzaChcbiAgICAgIG5ldyBUaHJlZURCdWlsZGluZ0xheWVyKHtcbiAgICAgICAgaWQ6ICdfa2VwbGVyZ2xfM2QtYnVpbGRpbmcnLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICB0aHJlZURCdWlsZGluZ0NvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yLFxuICAgICAgICBwaWNrYWJsZTogQm9vbGVhbihpc0Fubm90YXRpb25Nb2RlKSxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICBnZXRGaWxsQ29sb3I6IG1hcFN0eWxlLnRocmVlREJ1aWxkaW5nQ29sb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY29uc3QgW2N1c3RvbUJvdHRvbURlY2tMYXllcnMsIGN1c3RvbVRvcERlY2tMYXllcnNdID0gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcyk7XG5cbiAgY29uc3QgZWRpdG9yTGF5ZXI6IGFueVtdID0gW107XG4gIGlmIChlZGl0b3JJbmZvKSB7XG4gICAgZWRpdG9yTGF5ZXIucHVzaChcbiAgICAgIGdldEVkaXRvckxheWVyKHtcbiAgICAgICAgLi4uZWRpdG9ySW5mbyxcbiAgICAgICAgbWFwU3RhdGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbLi4uY3VzdG9tQm90dG9tRGVja0xheWVycywgLi4uZGF0YUxheWVycywgLi4uY3VzdG9tVG9wRGVja0xheWVycywgLi4uZWRpdG9yTGF5ZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnM8VCBleHRlbmRzIHtpZDogc3RyaW5nfT4obGF5ZXJzOiBUW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBsYXllcnMubWFwKCh7aWR9KSA9PiBpZCk7XG59XG5cbi8vIC0tLSBMYXllciBHcm91cCBVdGlsaXRpZXMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdMYXllckdyb3VwKHByb3BzPzogUGFydGlhbDxMYXllck9yZGVyR3JvdXA+KTogTGF5ZXJPcmRlckdyb3VwIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogcHJvcHM/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBwcm9wcz8ubGFiZWwgPz8gJ05ldyBncm91cCcsXG4gICAgaXNWaXNpYmxlOiBwcm9wcz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgbGF5ZXJPcmRlcjogcHJvcHM/LmxheWVyT3JkZXIgPz8gW10sXG4gICAgaXNJbmNsdWRlZEluTGVnZW5kOiBwcm9wcz8uaXNJbmNsdWRlZEluTGVnZW5kID8/IHRydWVcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5LFxuICBhdEluZGV4PzogbnVtYmVyXG4pOiBMYXllck9yZGVyIHtcbiAgY29uc3QgaWR4ID0gYXRJbmRleCA/PyAwO1xuICBjb25zdCByZXN1bHQgPSBbLi4ubGF5ZXJPcmRlcl07XG4gIHJlc3VsdC5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5XG4pOiBMYXllck9yZGVyIHtcbiAgaWYgKCFsYXllck9yZGVyKSByZXR1cm4gW107XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGVsZW1lbnQgOiBlbGVtZW50LmlkO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IGxheWVyT3JkZXIuZmlsdGVyKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJldHVybiAoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5pZCAhPT0gZWxlbWVudElkO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkgIT09IGVsZW1lbnRJZDtcbiAgfSk7XG5cbiAgbmV3TGF5ZXJPcmRlciA9IG5ld0xheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyLCBlbGVtZW50SWQpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xuXG4gIHJldHVybiBuZXdMYXllck9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllckdyb3VwSWQ6IHN0cmluZ1xuKTogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGdyb3VwOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWdyb3VwOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBncm91cCA9XG4gICAgICAgIGdycC5pZCA9PT0gbGF5ZXJHcm91cElkID8gZ3JwIDogZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKGdycC5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogR3JvdXBzIHRoYXQgY29udGFpbiBgZW50cnlJZGAsIG5lYXJlc3QgcGFyZW50IGZpcnN0LlxuICogYGVudHJ5SWRgIG1heSBiZSBhIGxheWVyIGlkIG9yIGEgbmVzdGVkIGdyb3VwIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5jZXN0b3JMYXllckdyb3VwcyhsYXllck9yZGVyOiBMYXllck9yZGVyLCBlbnRyeUlkOiBzdHJpbmcpOiBMYXllck9yZGVyR3JvdXBbXSB7XG4gIGNvbnN0IGFuY2VzdG9yczogTGF5ZXJPcmRlckdyb3VwW10gPSBbXTtcblxuICBjb25zdCB2aXNpdCA9IChlbnRyaWVzOiBMYXllck9yZGVyKTogYm9vbGVhbiA9PiB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZW50cnkgPT09IGVudHJ5SWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncm91cC5pZCA9PT0gZW50cnlJZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2aXNpdChncm91cC5sYXllck9yZGVyKSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaChncm91cCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgdmlzaXQobGF5ZXJPcmRlcik7XG4gIHJldHVybiBhbmNlc3RvcnM7XG59XG5cbi8qKlxuICogV2hldGhlciBhIGxheWVyIHNob3VsZCBiZSBkcmF3biBpbiB0aGUgbWFwIGxlZ2VuZC5cbiAqIEEgbGF5ZXIgc3RheXMgb24gdGhlIG1hcCB3aGVuIHRoaXMgaXMgZmFsc2UuIE1pc3NpbmcgZmxhZ3MgY291bnQgYXMgaW5jbHVkZWQuXG4gKiBBbiBhbmNlc3RvciBncm91cCB3aXRoIGBpc0luY2x1ZGVkSW5MZWdlbmQ6IGZhbHNlYCBoaWRlcyB0aGUgbGF5ZXIgYXMgd2VsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJTaG93bkluTGVnZW5kKFxuICBsYXllcjoge2lkOiBzdHJpbmc7IGNvbmZpZzoge2lzSW5jbHVkZWRJbkxlZ2VuZD86IGJvb2xlYW59fSxcbiAgbGF5ZXJPcmRlcj86IExheWVyT3JkZXJcbik6IGJvb2xlYW4ge1xuICBpZiAobGF5ZXIuY29uZmlnLmlzSW5jbHVkZWRJbkxlZ2VuZCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFsYXllck9yZGVyPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZ2V0QW5jZXN0b3JMYXllckdyb3VwcyhsYXllck9yZGVyLCBsYXllci5pZCkuZXZlcnkoXG4gICAgZ3JvdXAgPT4gZ3JvdXAuaXNJbmNsdWRlZEluTGVnZW5kICE9PSBmYWxzZVxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHBhcmVudCBncm91cCB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gbGF5ZXIgSUQuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgbGF5ZXIgaXMgYXQgdGhlIHJvb3QgbGV2ZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxheWVyT3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdyb3VwLmxheWVyT3JkZXIuc29tZShlID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlID09PSBsYXllcklkKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXN0ZWQgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihncm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgICAgIGlmIChuZXN0ZWQpIHJldHVybiBuZXN0ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlcjogTGF5ZXJPcmRlciwgbGF5ZXJFbnRyeUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICBpc1BsYWluT2JqZWN0KGVudHJ5KSA/IChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkID09PSBsYXllckVudHJ5SWQgOiBlbnRyeSA9PT0gbGF5ZXJFbnRyeUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBmb3VuZCA9IGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3VuZCA9IGxheWVySWQgPT09IGVudHJ5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgb2xkRW50cnk6IExheWVyT3JkZXJFbnRyeSxcbiAgbmV3RW50cnk6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IG9sZEVudHJ5SWQgPSB0eXBlb2Ygb2xkRW50cnkgPT09ICdzdHJpbmcnID8gb2xkRW50cnkgOiBvbGRFbnRyeS5pZDtcbiAgcmV0dXJuIGxheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVudHJ5ID09PSBvbGRFbnRyeUlkID8gbmV3RW50cnkgOiBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBvbGRFbnRyeUlkKSB7XG4gICAgICAgIHJldHVybiBuZXdFbnRyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIG9sZEVudHJ5LCBuZXdFbnRyeSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBuZXdMYXllckdyb3VwOiBMYXllck9yZGVyR3JvdXBcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5pZCA9PT0gbmV3TGF5ZXJHcm91cC5pZCkge1xuICAgICAgICByZXR1cm4gbmV3TGF5ZXJHcm91cDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGF0TGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyKTogRmxhdExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgb3JkZXJFbnRyeSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9yZGVyRW50cnkpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgLi4uZ2V0RmxhdExheWVyT3JkZXIoKG9yZGVyRW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKV07XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWNjLCBvcmRlckVudHJ5IGFzIHN0cmluZ107XG4gIH0sIFtdIGFzIEZsYXRMYXllck9yZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeShcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzPzogTGF5ZXJbXSB8IHJlYWRvbmx5IExheWVyW11cbik6IExheWVyT3JkZXJIaWVyYXJjaHkge1xuICBjb25zdCB2YWxpZExheWVycyA9IGxheWVycz8uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgWydsYXllckdyb3VwJywgZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXBdIGFzIGNvbnN0XTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXIgPSB2YWxpZExheWVycz8uZmluZChsID0+IGwuaWQgPT09IGVsZW1lbnQpO1xuICAgIGlmICghbGF5ZXIgfHwgbGF5ZXIuY29uZmlnLmhpZGRlbikge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIFsnbGF5ZXInLCBsYXllcl0gYXMgY29uc3RdO1xuICB9LCBbXSBhcyBMYXllck9yZGVySGllcmFyY2h5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiB7aWQ6IHN0cmluZ31bXVxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBlbnRyeSkpIHtcbiAgICAgICAgYWNjLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmxheWVyT3JkZXIpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIC4uLmdycCxcbiAgICAgICAgICBsYXllck9yZGVyOiByZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIG9yaWdpbkxheWVySWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25MYXllcklkOiBzdHJpbmdcbik6IFZpc1N0YXRlWydsYXllck9yZGVyJ10ge1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgY29uc3Qgb3ZlckluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG5cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSB8fCBvdmVySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxheWVyT3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFycmF5TW92ZShsYXllck9yZGVyLCBhY3RpdmVJbmRleCwgb3ZlckluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gW2xheWVySWQsIC4uLmxheWVyT3JkZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZShcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpZWxkSW5kZXg6IG51bWJlclxuKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRhUm93KSByZXR1cm4gZGF0YS52YWx1ZUF0KGZpZWxkSW5kZXgpO1xuICByZXR1cm4gZGF0YVtmaWVsZEluZGV4XTtcbn1cblxuLyoqIENoZWNrcyBpZiBhbnkgRGVjayBsYXllcnMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYXJlQW55RGVja0xheWVyc0xvYWRpbmcobGF5ZXJzOiBEZWNrTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXJzLnNvbWUoXG4gICAgLy8gbGF5ZXIuaXNMb2FkZWQgY2hhbmdlcyBmcmVxdWVudGx5IGluIERlY2sgKGV2ZW4gb24gaG92ZXIpIHNvIHdlIGNoZWNrIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgIGxheWVyID0+IGxheWVyLmludGVybmFsU3RhdGUgJiYgIWxheWVyLmlzTG9hZGVkXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsT0FBTyxNQUFNLGdCQUFnQjtBQUVwQyxTQUFRQyxpQkFBaUIsRUFBRUMsdUJBQXVCLFFBQU8sc0JBQXNCO0FBcUIvRSxTQUtFQyxrQkFBa0IsRUFDbEJDLGNBQWMsUUFDVCxtQkFBbUI7QUFJMUIsU0FBUUMsVUFBVSxFQUFFQyx5QkFBeUIsRUFBRUMsT0FBTyxFQUFFQyxhQUFhLFFBQU8sa0JBQWtCO0FBQzlGLFNBQVFDLFNBQVMsRUFBRUMsY0FBYyxRQUFPLHlCQUF5QjtBQUNqRSxTQUFRQyx5QkFBeUIsUUFBTyxxQkFBcUI7QUFFN0QsU0FBUUMsbUJBQW1CLFFBQU8sMEJBQTBCO0FBNkI1RDtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLGdCQUFnQkEsQ0FBQ0MsT0FBb0IsRUFBRUMsWUFBOEIsRUFBVztFQUM5RixJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU8sRUFBRTtFQUNYO0VBRUEsSUFBTUUsVUFBVSxHQUFJQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsWUFBWSxDQUFDLENBQW1DSSxNQUFNLENBQ3BGLFVBQUNDLFFBQVEsRUFBRUMsRUFBRSxFQUFLO0lBQ2hCLElBQU1DLE1BQXdDLEdBQzVDLE9BQU9QLFlBQVksQ0FBQ00sRUFBRSxDQUFDLENBQUNFLHFCQUFxQixLQUFLLFVBQVUsR0FDeERSLFlBQVksQ0FBQ00sRUFBRSxDQUFDLENBQUNFLHFCQUFxQixDQUFDVCxPQUFPLEVBQUVNLFFBQVEsQ0FBQyxHQUN6RDtNQUFDSSxLQUFLLEVBQUU7SUFBRSxDQUFDO0lBRWpCLElBQU1BLEtBQUssR0FBR0MsS0FBSyxDQUFDQyxPQUFPLENBQUNKLE1BQU0sQ0FBQyxHQUFHQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0UsS0FBSyxJQUFJLEVBQUU7SUFDakUsSUFBTUcsV0FBVyxHQUFHTCxNQUFNLENBQUNLLFdBQVcsSUFBSVAsUUFBUTtJQUVsRCxPQUFPTyxXQUFXLENBQUNDLE1BQU0sQ0FDdkJKLEtBQUssQ0FBQ0ssR0FBRyxDQUFDLFVBQUFDLENBQUM7TUFBQSxPQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDTkQsQ0FBQztRQUNKRSxJQUFJLEVBQUVYLEVBQUU7UUFDUlksTUFBTSxFQUFFbkIsT0FBTyxDQUFDb0I7TUFBRSxHQUVkYixFQUFFLEtBQUssS0FBSyxJQUFJQSxFQUFFLEtBQUssTUFBTSxHQUFHO1FBQUNjLFNBQVMsRUFBRTtNQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFBQSxDQUMzRCxDQUNKLENBQUM7RUFDSCxDQUFDLEVBQ0QsRUFDRixDQUFDOztFQUVEO0VBQ0EsT0FBT25CLFVBQVUsQ0FBQ2EsR0FBRyxDQUFDLFVBQUFMLEtBQUssRUFBSTtJQUM3QixJQUFNWSxLQUFLLEdBQUcsSUFBSXJCLFlBQVksQ0FBQ1MsS0FBSyxDQUFDUSxJQUFJLENBQUMsQ0FBQ1IsS0FBSyxDQUFDO0lBQ2pELE9BQU8sT0FBT1ksS0FBSyxDQUFDQyxxQkFBcUIsS0FBSyxVQUFVLElBQUl2QixPQUFPLENBQUN3QixhQUFhLEdBQzdFRixLQUFLLENBQUNDLHFCQUFxQixDQUFDdkIsT0FBTyxDQUFDLEdBQ3BDc0IsS0FBSztFQUNYLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNHLGlDQUFpQ0EsQ0FDL0NDLEtBQWUsRUFDZkMsS0FBMEMsRUFDMUNDLGlCQUEyQixFQUNqQjtFQUNWLElBQUksQ0FBQ0QsS0FBSyxJQUFJLENBQUN4QixNQUFNLENBQUNDLElBQUksQ0FBQ3VCLEtBQUssQ0FBQyxDQUFDRSxNQUFNLEVBQUU7SUFDeEMsT0FBT0gsS0FBSztFQUNkO0VBRUEsSUFBTUksb0JBQW9CLEdBQUkzQixNQUFNLENBQUNDLElBQUksQ0FBQ3VCLEtBQUssQ0FBQyxDQUFpQ0ksSUFBSSxDQUNuRixVQUFBQyxHQUFHO0lBQUEsT0FBSUwsS0FBSyxDQUFDSyxHQUFHLENBQUMsS0FBS0MsU0FBUztFQUFBLENBQ2pDLENBQUM7RUFDRCxJQUFJLENBQUNILG9CQUFvQixFQUFFO0lBQ3pCLE9BQU9KLEtBQUs7RUFDZDtFQUVBLElBQU1RLFlBQVksR0FBRyxJQUFJQyxHQUFHLENBQUNQLGlCQUFpQixDQUFDO0VBRS9DLE9BQUFYLGFBQUEsQ0FBQUEsYUFBQSxLQUNLUyxLQUFLO0lBQ1JVLE1BQU0sRUFBRVYsS0FBSyxDQUFDVSxNQUFNLENBQUNyQixHQUFHLENBQUMsVUFBQU8sS0FBSyxFQUFJO01BQ2hDLElBQUksQ0FBQ0EsS0FBSyxDQUFDZSxNQUFNLENBQUNsQixNQUFNLElBQUksQ0FBQ2UsWUFBWSxDQUFDSSxHQUFHLENBQUNoQixLQUFLLENBQUNlLE1BQU0sQ0FBQ2xCLE1BQU0sQ0FBQyxFQUFFO1FBQ2xFLE9BQU9HLEtBQUs7TUFDZDtNQUNBLElBQU1pQixRQUFRLEdBQUdqQixLQUFLLENBQUNrQixpQkFBaUI7TUFDeEMsSUFBSSxDQUFDRCxRQUFRLEVBQUU7UUFDYixPQUFPakIsS0FBSztNQUNkO01BQ0EsSUFBTW1CLFdBQVcsR0FBSXRDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDdUIsS0FBSyxDQUFDLENBQWlDZSxNQUFNLENBQzVFLFVBQUFWLEdBQUc7UUFBQSxPQUFJN0IsTUFBTSxDQUFDd0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ04sUUFBUSxFQUFFUCxHQUFHLENBQUMsSUFBSUwsS0FBSyxDQUFDSyxHQUFHLENBQUMsS0FBS0MsU0FBUztNQUFBLENBQ3hGLENBQUM7TUFDRCxJQUFJLENBQUNRLFdBQVcsQ0FBQ1osTUFBTSxFQUFFO1FBQ3ZCLE9BQU9QLEtBQUs7TUFDZDtNQUNBLElBQU13QixPQUFPLEdBQUdMLFdBQVcsQ0FBQ3BDLE1BQU0sQ0FBMEIsVUFBQzBDLEdBQUcsRUFBRWYsR0FBRyxFQUFLO1FBQ3hFZSxHQUFHLENBQUNmLEdBQUcsQ0FBQyxHQUFHTCxLQUFLLENBQUNLLEdBQUcsQ0FBQztRQUNyQixPQUFPZSxHQUFHO01BQ1osQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ04sT0FBT3pCLEtBQUssQ0FBQzBCLG9CQUFvQixDQUFDRixPQUFPLENBQUM7SUFDNUMsQ0FBQztFQUFDO0FBRU47QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNHLGtCQUFrQkEsQ0FDaEMzQixLQUFZLEVBQ1pJLEtBQVEsRUFDUndCLFlBQWtCLEVBSWxCO0VBQ0EsSUFBSUMsU0FBUztFQUNiLElBQUk7SUFDRjtJQUNBLElBQUksQ0FBQzdCLEtBQUssQ0FBQzhCLE9BQU8sRUFBRTtNQUNsQjlCLEtBQUssQ0FBQytCLHNCQUFzQixHQUFHcEIsU0FBUztJQUMxQztJQUVBLElBQUksQ0FBQ1gsS0FBSyxDQUFDSixJQUFJLElBQUksQ0FBQ0ksS0FBSyxDQUFDZ0MsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDaEMsS0FBSyxDQUFDZSxNQUFNLENBQUNsQixNQUFNLEVBQUU7TUFDakUsT0FBTztRQUFDRyxLQUFLLEVBQUxBLEtBQUs7UUFBRTZCLFNBQVMsRUFBRSxDQUFDO01BQUMsQ0FBQztJQUMvQjtJQUVBQSxTQUFTLEdBQUc3QixLQUFLLENBQUNpQyxlQUFlLENBQUM3QixLQUFLLENBQUM4QixRQUFRLEVBQUVOLFlBQVksQ0FBQzs7SUFFL0Q7SUFDQSxJQUFJLENBQUM1QixLQUFLLENBQUM4QixPQUFPLEVBQUU7TUFDbEI7TUFDQTlCLEtBQUssR0FBR0EsS0FBSyxDQUFDbUMsaUJBQWlCLENBQUM7UUFDOUJwQyxTQUFTLEVBQUU7TUFDYixDQUFDLENBQUM7SUFDSjtJQUNBQyxLQUFLLENBQUM4QixPQUFPLEdBQUcsSUFBSTtJQUNwQjlCLEtBQUssQ0FBQ29DLFlBQVksR0FBRyxJQUFJO0VBQzNCLENBQUMsQ0FBQyxPQUFPQyxHQUFHLEVBQUU7SUFDWnpFLE9BQU8sQ0FBQzBFLEtBQUssQ0FBQ0QsR0FBRyxDQUFDO0lBQ2xCckMsS0FBSyxHQUFHQSxLQUFLLENBQUNtQyxpQkFBaUIsQ0FBQztNQUM5QnBDLFNBQVMsRUFBRTtJQUNiLENBQUMsQ0FBQztJQUNGQyxLQUFLLENBQUM4QixPQUFPLEdBQUcsS0FBSztJQUVyQjlCLEtBQUssQ0FBQ29DLFlBQVksR0FDaEJDLEdBQUcsWUFBWUUsS0FBSyxJQUFJRixHQUFHLENBQUNHLE9BQU8sR0FBR0gsR0FBRyxDQUFDRyxPQUFPLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsZUFBZTtJQUV2RlosU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQjtFQUVBLE9BQU87SUFDTDdCLEtBQUssRUFBTEEsS0FBSztJQUNMNkIsU0FBUyxFQUFUQTtFQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNhLGlCQUFpQkEsQ0FBQUMsSUFBQSxFQWNQO0VBQUEsSUFieEJDLGVBQWUsR0FBQUQsSUFBQSxDQUFmQyxlQUFlO0lBQ2ZDLGlCQUFpQixHQUFBRixJQUFBLENBQWpCRSxpQkFBaUI7SUFDakJDLFNBQVMsR0FBQUgsSUFBQSxDQUFURyxTQUFTO0lBQ1RoQyxNQUFNLEdBQUE2QixJQUFBLENBQU43QixNQUFNO0lBQ05pQyxjQUFjLEdBQUFKLElBQUEsQ0FBZEksY0FBYztJQUNkYixRQUFRLEdBQUFTLElBQUEsQ0FBUlQsUUFBUTtFQVNSLElBQUlXLGlCQUFpQixDQUFDRyxPQUFPLENBQUNDLE9BQU8sSUFBSUgsU0FBUyxJQUFJQSxTQUFTLENBQUNJLE1BQU0sRUFBRTtJQUN0RTtJQUNBLElBQU9DLE1BQU0sR0FBb0JMLFNBQVMsQ0FBbkNLLE1BQU07TUFBU0MsT0FBTyxHQUFJTixTQUFTLENBQTNCOUMsS0FBSzs7SUFFcEI7SUFDQSxJQUFNQSxLQUFLLEdBQUdjLE1BQU0sQ0FBQ3NDLE9BQU8sQ0FBQ2hFLEtBQUssQ0FBQ2lFLEdBQUcsQ0FBQzs7SUFFdkM7SUFDQSxJQUNFLENBQUNGLE1BQU0sSUFBSUwsU0FBUyxDQUFDUSxLQUFLLElBQUksQ0FBQyxLQUMvQnRELEtBQUssSUFDTEEsS0FBSyxDQUFDdUQsWUFBWSxJQUNsQlIsY0FBYyxDQUFDL0MsS0FBSyxDQUFDRixFQUFFLENBQUMsRUFDeEI7TUFDQTtNQUNBLElBQ1dELE1BQU0sR0FDYkcsS0FBSyxDQURQZSxNQUFNLENBQUdsQixNQUFNO01BRWpCLElBQUksQ0FBQ0EsTUFBTSxFQUFFO1FBQ1gsT0FBTyxJQUFJO01BQ2I7TUFDQSxJQUFBMkQsZ0JBQUEsR0FBZ0N0QixRQUFRLENBQUNyQyxNQUFNLENBQUM7UUFBekNLLGFBQWEsR0FBQXNELGdCQUFBLENBQWJ0RCxhQUFhO1FBQUV1RCxNQUFNLEdBQUFELGdCQUFBLENBQU5DLE1BQU07TUFDNUIsSUFBTUMsSUFBb0IsR0FBRzFELEtBQUssQ0FBQ3VELFlBQVksQ0FDN0NKLE1BQU0sSUFBSUwsU0FBUyxDQUFDUSxLQUFLLEVBQ3pCcEQsYUFBYSxFQUNidUQsTUFBTSxFQUNOYixlQUFlLEVBQ2ZFLFNBQ0YsQ0FBQztNQUNELElBQUksQ0FBQ1ksSUFBSSxFQUFFO1FBQ1QsT0FBTyxJQUFJO01BQ2I7TUFDQSxJQUFNQyxZQUFZLEdBQUdkLGlCQUFpQixDQUFDRyxPQUFPLENBQUNqQyxNQUFNLENBQUM0QyxZQUFZLENBQUM5RCxNQUFNLENBQUM7TUFFMUUsT0FBTztRQUNMNkQsSUFBSSxFQUFKQSxJQUFJO1FBQ0pELE1BQU0sRUFBTkEsTUFBTTtRQUNORSxZQUFZLEVBQVpBLFlBQVk7UUFDWjNELEtBQUssRUFBTEEsS0FBSztRQUNMNEQsV0FBVyxFQUFFaEIsZUFBZSxDQUFDZ0I7TUFDL0IsQ0FBQztJQUNIO0VBQ0Y7RUFFQSxPQUFPLElBQUk7QUFDYjtBQUVBLElBQU1DLHNCQUFzQixHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUM7O0FBRTFFO0FBQ0EsU0FBU0MsNkJBQTZCQSxDQUNwQ0MsYUFBOEMsRUFDOUNDLE1BQWMsRUFDbUI7RUFDakMsSUFBSSxDQUFDRCxhQUFhLEVBQUU7SUFDbEIsT0FBT3BELFNBQVM7RUFDbEI7RUFDQSxJQUFJc0QsT0FBTyxHQUFHLEtBQUs7RUFDbkIsSUFBTUMsSUFBeUIsR0FBRyxDQUFDLENBQUM7RUFDcEMsU0FBQUMsRUFBQSxNQUFBQyxZQUFBLEdBQWlCdkYsTUFBTSxDQUFDQyxJQUFJLENBQUNpRixhQUFhLENBQUMsRUFBQUksRUFBQSxHQUFBQyxZQUFBLENBQUE3RCxNQUFBLEVBQUE0RCxFQUFBLElBQUU7SUFBeEMsSUFBTXJFLEVBQUUsR0FBQXNFLFlBQUEsQ0FBQUQsRUFBQTtJQUNYLElBQU1FLFFBQVEsR0FBR04sYUFBYSxDQUFDakUsRUFBRSxDQUFDO0lBQ2xDLElBQUksQ0FBQ3VFLFFBQVEsSUFBSUMsT0FBQSxDQUFPRCxRQUFRLE1BQUssUUFBUSxFQUFFO01BQzdDSCxJQUFJLENBQUNwRSxFQUFFLENBQUMsR0FBR3VFLFFBQVE7TUFDbkI7SUFDRjtJQUNBLElBQU1FLE1BQU0sR0FBQTVFLGFBQUEsS0FBTzBFLFFBQVEsQ0FBQztJQUM1QixJQUFJRyxlQUFlLEdBQUcsS0FBSztJQUFDLElBQUFDLFNBQUEsR0FBQUMsMEJBQUEsQ0FDVmIsc0JBQXNCO01BQUFjLEtBQUE7SUFBQTtNQUF4QyxLQUFBRixTQUFBLENBQUFHLENBQUEsTUFBQUQsS0FBQSxHQUFBRixTQUFBLENBQUFJLENBQUEsSUFBQUMsSUFBQSxHQUEwQztRQUFBLElBQS9CcEUsR0FBRyxHQUFBaUUsS0FBQSxDQUFBSSxLQUFBO1FBQ1osSUFBSSxPQUFPVixRQUFRLENBQUMzRCxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUU7VUFDckM2RCxNQUFNLENBQUM3RCxHQUFHLENBQUMsR0FBRzJELFFBQVEsQ0FBQzNELEdBQUcsQ0FBQyxHQUFHc0QsTUFBTTtVQUNwQ1EsZUFBZSxHQUFHLElBQUk7UUFDeEI7TUFDRjtJQUFDLFNBQUFuQyxHQUFBO01BQUFvQyxTQUFBLENBQUFPLENBQUEsQ0FBQTNDLEdBQUE7SUFBQTtNQUFBb0MsU0FBQSxDQUFBUSxDQUFBO0lBQUE7SUFDRGYsSUFBSSxDQUFDcEUsRUFBRSxDQUFDLEdBQUcwRSxlQUFlLEdBQUdELE1BQU0sR0FBR0YsUUFBUTtJQUM5QyxJQUFJRyxlQUFlLEVBQUU7TUFDbkJQLE9BQU8sR0FBRyxJQUFJO0lBQ2hCO0VBQ0Y7RUFDQSxPQUFPQSxPQUFPLEdBQUdDLElBQUksR0FBR3ZELFNBQVM7QUFDbkM7QUFFQSxTQUFTdUUsMkJBQTJCQSxDQUFDQyxTQUFjLEVBQUVuQixNQUFjLEVBQU87RUFBQSxJQUFBb0IsZ0JBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUE7RUFDeEUsSUFBSWpHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNkYsU0FBUyxDQUFDLEVBQUU7SUFDNUIsT0FBT0EsU0FBUyxDQUFDMUYsR0FBRyxDQUFDLFVBQUFPLEtBQUs7TUFBQSxPQUFJa0YsMkJBQTJCLENBQUNsRixLQUFLLEVBQUVnRSxNQUFNLENBQUM7SUFBQSxFQUFDO0VBQzNFO0VBQ0EsSUFBSSxDQUFDbUIsU0FBUyxJQUFJbkIsTUFBTSxLQUFLLENBQUMsSUFBSSxPQUFPbUIsU0FBUyxDQUFDSSxLQUFLLEtBQUssVUFBVSxFQUFFO0lBQ3ZFLE9BQU9KLFNBQVM7RUFDbEI7RUFDQSxJQUFNSyxXQUFXLElBQUFKLGdCQUFBLEdBQUdELFNBQVMsQ0FBQy9GLEtBQUssY0FBQWdHLGdCQUFBLHVCQUFmQSxnQkFBQSxDQUFpQkssT0FBTztFQUM1QyxJQUFNQSxPQUFPLEdBQUcsQ0FBQyxPQUFPRCxXQUFXLEtBQUssUUFBUSxHQUFHQSxXQUFXLEdBQUcsQ0FBQyxJQUFJeEIsTUFBTTtFQUM1RSxJQUFNRCxhQUFhLEdBQUdELDZCQUE2QixFQUFBdUIsaUJBQUEsR0FBQ0YsU0FBUyxDQUFDL0YsS0FBSyxjQUFBaUcsaUJBQUEsdUJBQWZBLGlCQUFBLENBQWlCSyxjQUFjLEVBQUUxQixNQUFNLENBQUM7RUFDNUYsT0FBT21CLFNBQVMsQ0FBQ0ksS0FBSyxDQUFBNUYsYUFBQTtJQUNwQjhGLE9BQU8sRUFBUEEsT0FBTztJQUNQO0lBQ0FFLE9BQU8sRUFBRSxFQUFBTCxpQkFBQSxHQUFBSCxTQUFTLENBQUMvRixLQUFLLGNBQUFrRyxpQkFBQSx1QkFBZkEsaUJBQUEsQ0FBaUJLLE9BQU8sTUFBSyxLQUFLLElBQUkzQixNQUFNLEdBQUc7RUFBQyxHQUNyREQsYUFBYSxHQUFHO0lBQUMyQixjQUFjLEVBQUUzQjtFQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDekQsQ0FBQztBQUNKO0FBRUEsT0FBTyxTQUFTNkIsaUJBQWlCQSxDQUFDeEcsS0FBVSxFQUFFeUcsY0FBb0MsRUFBRTtFQUNsRixJQUNFM0QsUUFBUSxHQVdOOUMsS0FBSyxDQVhQOEMsUUFBUTtJQUNSbEMsS0FBSyxHQVVIWixLQUFLLENBVlBZLEtBQUs7SUFDTDhGLFVBQVUsR0FTUjFHLEtBQUssQ0FUUDBHLFVBQVU7SUFDVnBDLElBQUksR0FRRnRFLEtBQUssQ0FSUHNFLElBQUk7SUFDSlosU0FBUyxHQU9QMUQsS0FBSyxDQVBQMEQsU0FBUztJQUNUaUQsT0FBTyxHQU1MM0csS0FBSyxDQU5QMkcsT0FBTztJQUNQQyxRQUFRLEdBS041RyxLQUFLLENBTFA0RyxRQUFRO0lBQ1JuRCxpQkFBaUIsR0FJZnpELEtBQUssQ0FKUHlELGlCQUFpQjtJQUNqQkQsZUFBZSxHQUdieEQsS0FBSyxDQUhQd0QsZUFBZTtJQUNmcUQsU0FBUyxHQUVQN0csS0FBSyxDQUZQNkcsU0FBUztJQUNUQyxtQkFBbUIsR0FDakI5RyxLQUFLLENBRFA4RyxtQkFBbUI7RUFFckIsSUFBTXhILE9BQU8sR0FBR3dELFFBQVEsQ0FBQ2xDLEtBQUssQ0FBQ2UsTUFBTSxDQUFDbEIsTUFBTSxDQUFDO0VBQzdDLElBQUFzRyxLQUFBLEdBQW9CekgsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUExQjBILFNBQVMsR0FBQUQsS0FBQSxDQUFUQyxTQUFTO0VBQ2hCLElBQU1DLGFBQWEsR0FBR04sT0FBTyxJQUFJakQsU0FBUztFQUMxQztFQUNBO0VBQ0EsSUFBTTZDLE9BQU8sR0FBRyxDQUFDTSxTQUFTLElBQUlLLE9BQU8sQ0FBQ0wsU0FBUyxDQUFDakcsS0FBSyxDQUFDRixFQUFFLENBQUMsQ0FBQztFQUMxRDtFQUNBLElBQU15RyxRQUFRLEdBQUd2RyxLQUFLLENBQUN3RyxXQUFXLENBQUM7SUFDakM5QyxJQUFJLEVBQUpBLElBQUk7SUFDSjBDLFNBQVMsRUFBVEEsU0FBUztJQUNUL0MsR0FBRyxFQUFFeUMsVUFBVTtJQUNmakQsaUJBQWlCLEVBQWpCQSxpQkFBaUI7SUFDakJnRCxjQUFjLEVBQWRBLGNBQWM7SUFDZEcsUUFBUSxFQUFSQSxRQUFRO0lBQ1JwRCxlQUFlLEVBQWZBLGVBQWU7SUFDZnlELGFBQWEsRUFBYkEsYUFBYTtJQUNiVixPQUFPLEVBQVBBLE9BQU87SUFDUGpILE9BQU8sRUFBUEEsT0FBTztJQUNQd0gsbUJBQW1CLEVBQW5CQTtFQUNGLENBQUMsQ0FBQztFQUNGLElBQU1sQyxNQUFNLEdBQUd6Rix5QkFBeUIsQ0FBQ3lCLEtBQUssQ0FBQ0YsRUFBRSxFQUFFa0csUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUVTLElBQUksRUFBRTVELGlCQUFpQixDQUFDO0VBQ3JGLE9BQU9xQywyQkFBMkIsQ0FBQ3FCLFFBQVEsRUFBRXZDLE1BQU0sQ0FBQztBQUN0RDtBQUVBLE9BQU8sU0FBUzBDLGlCQUFpQkEsQ0FBQzFHLEtBQVksRUFBRTZCLFNBQVMsRUFBRTtFQUN6RCxPQUFPN0IsS0FBSyxDQUFDRixFQUFFLEtBQUtqQyxpQkFBaUIsSUFBSW1DLEtBQUssQ0FBQzJHLGlCQUFpQixDQUFDOUUsU0FBUyxDQUFDO0FBQzdFO0FBRUEsT0FBTyxTQUFTK0UsY0FBY0EsQ0FBQzVHLEtBQUssRUFBRWlHLFNBQVMsRUFBRTtFQUMvQyxPQUNFakcsS0FBSyxDQUFDZSxNQUFNLENBQUNoQixTQUFTO0VBQ3RCO0VBQ0MsQ0FBQ2tHLFNBQVMsSUFBS0EsU0FBUyxJQUFJQSxTQUFTLENBQUNqRyxLQUFLLENBQUNGLEVBQUUsQ0FBRSxDQUFDO0FBRXREOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUytHLG9CQUFvQkEsQ0FDbEMvRixNQUFlLEVBQ2ZlLFNBQWdDLEVBR2hDO0VBQ0EsT0FBT2YsTUFBTSxDQUFDL0IsTUFBTSxDQUNsQixVQUFDK0gsSUFBSSxFQUFFOUcsS0FBSyxFQUFFcUQsR0FBRztJQUFBLE9BQUExRCxhQUFBLENBQUFBLGFBQUEsS0FDWm1ILElBQUksT0FBQUMsZUFBQSxLQUNOL0csS0FBSyxDQUFDRixFQUFFLEVBQ1A0RyxpQkFBaUIsQ0FBQzFHLEtBQUssRUFBRTZCLFNBQVMsQ0FBQ3dCLEdBQUcsQ0FBQyxDQUFDLElBQUlyRCxLQUFLLENBQUNnSCxXQUFXLEtBQUtqSixrQkFBa0IsQ0FBQ2tKLE1BQU07RUFBQSxDQUM3RixFQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxxQkFBcUJBLENBQ25DcEcsTUFBZSxFQUNmZSxTQUFnQyxFQUNoQ29FLFNBQTZDLEVBQzdCO0VBQ2hCLE9BQU9uRixNQUFNLENBQUMvQixNQUFNLENBQ2xCLFVBQUMrSCxJQUFJLEVBQUU5RyxLQUFLLEVBQUVxRCxHQUFHO0lBQUEsT0FBQTFELGFBQUEsQ0FBQUEsYUFBQSxLQUNabUgsSUFBSSxPQUFBQyxlQUFBLEtBQ04vRyxLQUFLLENBQUNGLEVBQUUsRUFBRzRHLGlCQUFpQixDQUFDMUcsS0FBSyxFQUFFNkIsU0FBUyxDQUFDd0IsR0FBRyxDQUFDLENBQUMsSUFBSXVELGNBQWMsQ0FBQzVHLEtBQUssRUFBRWlHLFNBQVMsQ0FBQztFQUFBLENBQ3hGLEVBQ0YsQ0FBQyxDQUNILENBQUM7QUFDSDtBQUlBLE9BQU8sU0FBU2tCLG1CQUFtQkEsQ0FBQ0MsV0FBaUIsRUFBMEM7RUFDN0YsSUFBTUMsZ0JBQWdCLEdBQUdoSSxLQUFLLENBQUNDLE9BQU8sQ0FBQzhILFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFdEcsTUFBTSxDQUFDLEdBQ3ZEc0csV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUV0RyxNQUFNLEdBQ25CN0MsVUFBVSxDQUFDbUosV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUV0RyxNQUFNLENBQUMsR0FDL0JzRyxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRXRHLE1BQU0sQ0FBQyxDQUFDLEdBQ3JCLEVBQUU7RUFDTixJQUFNd0csYUFBYSxHQUFHakksS0FBSyxDQUFDQyxPQUFPLENBQUM4SCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUcsU0FBUyxDQUFDLEdBQ3ZESCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUcsU0FBUyxHQUN0QnRKLFVBQVUsQ0FBQ21KLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFRyxTQUFTLENBQUMsR0FDbENILFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFRyxTQUFTLENBQUMsQ0FBQyxHQUN4QixFQUFFO0VBRU4sT0FBTyxDQUFDRixnQkFBZ0IsRUFBRUMsYUFBYSxDQUFDO0FBQzFDO0FBMkJBLE9BQU8sU0FBU0Usa0JBQWtCQSxDQUFBLEVBR1Y7RUFBQSxJQUZ0QjNCLGNBQThCLEdBQUE0QixTQUFBLENBQUFsSCxNQUFBLFFBQUFrSCxTQUFBLFFBQUE5RyxTQUFBLEdBQUE4RyxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBQUEsSUFDbkNwRSxHQUFXLEdBQUFvRSxTQUFBLENBQUFsSCxNQUFBLE9BQUFrSCxTQUFBLE1BQUE5RyxTQUFBO0VBRVgsT0FBTzlCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDK0csY0FBYyxDQUFDLENBQUM5RyxNQUFNLENBQ3ZDLFVBQUMrSCxJQUFJLEVBQUVwRyxHQUFHO0lBQUEsT0FBQWYsYUFBQSxDQUFBQSxhQUFBLEtBQ0xtSCxJQUFJLE9BQUFDLGVBQUEsS0FDTnJHLEdBQUcsRUFBRyxVQUFBZ0gsR0FBRztNQUFBLE9BQUk3QixjQUFjLENBQUNuRixHQUFHLENBQUMsQ0FBQzJDLEdBQUcsRUFBRXFFLEdBQUcsQ0FBQztJQUFBO0VBQUEsQ0FDM0MsRUFDRixDQUFDLENBQ0gsQ0FBQztBQUNIO0FBRUEsU0FBU0MsK0JBQStCQSxDQUN0Q0MsVUFBc0IsRUFDdEI5RyxNQUFlLEVBQ2ZlLFNBQWdCLEVBQ2hCZ0csb0JBQThDLEVBQzlDQyxXQVVDLEVBQ0RqQyxjQUFvQixFQUNiO0VBQ1AsSUFDRTNELFFBQVEsR0FTTjRGLFdBQVcsQ0FUYjVGLFFBQVE7SUFDUlksU0FBUyxHQVFQZ0YsV0FBVyxDQVJiaEYsU0FBUztJQUNUaUQsT0FBTyxHQU9MK0IsV0FBVyxDQVBiL0IsT0FBTztJQUNQQyxRQUFRLEdBTU44QixXQUFXLENBTmI5QixRQUFRO0lBQ1JuRCxpQkFBaUIsR0FLZmlGLFdBQVcsQ0FMYmpGLGlCQUFpQjtJQUNqQkQsZUFBZSxHQUlia0YsV0FBVyxDQUpibEYsZUFBZTtJQUNmcUQsU0FBUyxHQUdQNkIsV0FBVyxDQUhiN0IsU0FBUztJQUNUOEIsZUFBZSxHQUViRCxXQUFXLENBRmJDLGVBQWU7SUFDZkMsZ0JBQWdCLEdBQ2RGLFdBQVcsQ0FEYkUsZ0JBQWdCO0VBRWxCLE9BQU9KLFVBQVUsQ0FDZEssS0FBSyxDQUFDLENBQUMsQ0FDUEMsT0FBTyxDQUFDLENBQUMsQ0FDVG5KLE1BQU0sQ0FBQyxVQUFDb0osUUFBUSxFQUFFQyxPQUFPLEVBQUs7SUFDN0IsSUFBSWhLLGFBQWEsQ0FBQ2dLLE9BQU8sQ0FBQyxFQUFFO01BQzFCLElBQU1DLFVBQVUsR0FBR0QsT0FBMEI7TUFDN0MsSUFBSSxDQUFDQyxVQUFVLENBQUN0SSxTQUFTLEVBQUU7UUFDekIsT0FBT29JLFFBQVE7TUFDakI7TUFDQSxPQUFPQSxRQUFRLENBQUMzSSxNQUFNLENBQ3BCbUksK0JBQStCLENBQzdCVSxVQUFVLENBQUNULFVBQVUsRUFDckI5RyxNQUFNLEVBQ05lLFNBQVMsRUFDVGdHLG9CQUFvQixFQUNwQkMsV0FBVyxFQUNYakMsY0FDRixDQUNGLENBQUM7SUFDSDtJQUNBLElBQU15QyxPQUFPLEdBQUdGLE9BQWlCO0lBQ2pDLElBQUksQ0FBQ1Asb0JBQW9CLENBQUNTLE9BQU8sQ0FBQyxFQUFFO01BQ2xDLE9BQU9ILFFBQVE7SUFDakI7SUFDQSxJQUFNckMsVUFBVSxHQUFHaEYsTUFBTSxDQUFDeUgsU0FBUyxDQUFDLFVBQUFDLEtBQUE7TUFBQSxJQUFFMUksRUFBRSxHQUFBMEksS0FBQSxDQUFGMUksRUFBRTtNQUFBLE9BQU1BLEVBQUUsS0FBS3dJLE9BQU87SUFBQSxFQUFDO0lBQzdELElBQUl4QyxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDckIsT0FBT3FDLFFBQVE7SUFDakI7SUFDQSxJQUFNTSxvQkFBb0IsR0FBRzVDLGNBQWMsR0FDdkMyQixrQkFBa0IsQ0FBQzNCLGNBQWMsRUFBRUMsVUFBVSxDQUFDLEdBQzlDLENBQUMsQ0FBQztJQUNOLElBQU05RixLQUFLLEdBQUdjLE1BQU0sQ0FBQ2dGLFVBQVUsQ0FBQztJQUNoQyxJQUFNcEMsSUFBSSxHQUFHN0IsU0FBUyxDQUFDaUUsVUFBVSxDQUFDO0lBQ2xDLElBQU00QyxZQUFZLEdBQUc5QyxpQkFBaUIsQ0FDcEM7TUFDRTFELFFBQVEsRUFBUkEsUUFBUTtNQUNSbEMsS0FBSyxFQUFMQSxLQUFLO01BQ0w4RixVQUFVLEVBQVZBLFVBQVU7TUFDVnBDLElBQUksRUFBSkEsSUFBSTtNQUNKWixTQUFTLEVBQVRBLFNBQVM7TUFDVGlELE9BQU8sRUFBUEEsT0FBTztNQUNQQyxRQUFRLEVBQVJBLFFBQVE7TUFDUm5ELGlCQUFpQixFQUFqQkEsaUJBQWlCO01BQ2pCRCxlQUFlLEVBQWZBLGVBQWU7TUFDZnFELFNBQVMsRUFBVEEsU0FBUztNQUNUQyxtQkFBbUIsRUFBRTtRQUNuQjZCLGVBQWUsRUFBZkEsZUFBZTtRQUNmQyxnQkFBZ0IsRUFBaEJBO01BQ0Y7SUFDRixDQUFDLEVBQ0RTLG9CQUNGLENBQUM7SUFDRCxPQUFPTixRQUFRLENBQUMzSSxNQUFNLENBQUNrSixZQUFZLElBQUksRUFBRSxDQUFDO0VBQzVDLENBQUMsRUFBRSxFQUFXLENBQUM7QUFDbkI7O0FBRUE7QUFDQSxPQUFPLFNBQVNDLGlCQUFpQkEsQ0FBQUMsS0FBQSxFQUUvQkMsT0FBZ0MsRUFDaENoRCxjQUErQixFQUMvQnVCLFdBQWlCLEVBQ1I7RUFBQSxJQUpSMEIsUUFBUSxHQUFBRixLQUFBLENBQVJFLFFBQVE7SUFBRTlDLFFBQVEsR0FBQTRDLEtBQUEsQ0FBUjVDLFFBQVE7SUFBRStDLFFBQVEsR0FBQUgsS0FBQSxDQUFSRyxRQUFRO0VBSzdCLElBQ0U3RyxRQUFRLEdBVU40RyxRQUFRLENBVlY1RyxRQUFRO0lBQ1I4RyxPQUFPLEdBU0xGLFFBQVEsQ0FUVkUsT0FBTztJQUNQbEksTUFBTSxHQVFKZ0ksUUFBUSxDQVJWaEksTUFBTTtJQUNOOEcsVUFBVSxHQU9Sa0IsUUFBUSxDQVBWbEIsVUFBVTtJQUNWL0YsU0FBUyxHQU1QaUgsUUFBUSxDQU5WakgsU0FBUztJQUNUaUIsU0FBUyxHQUtQZ0csUUFBUSxDQUxWaEcsU0FBUztJQUNUaUQsT0FBTyxHQUlMK0MsUUFBUSxDQUpWL0MsT0FBTztJQUNQbEQsaUJBQWlCLEdBR2ZpRyxRQUFRLENBSFZqRyxpQkFBaUI7SUFDakJELGVBQWUsR0FFYmtHLFFBQVEsQ0FGVmxHLGVBQWU7SUFDZnFHLFNBQVMsR0FDUEgsUUFBUSxDQURWRyxTQUFTO0VBR1gsSUFBQUMsS0FBQSxHQVFJTCxPQUFPLElBQUksQ0FBQyxDQUFDO0lBUGZNLFFBQVEsR0FBQUQsS0FBQSxDQUFSQyxRQUFRO0lBQ1JDLG9CQUFvQixHQUFBRixLQUFBLENBQXBCRSxvQkFBb0I7SUFDcEJDLFlBQVksR0FBQUgsS0FBQSxDQUFaRyxZQUFZO0lBQ1pDLFVBQVUsR0FBQUosS0FBQSxDQUFWSSxVQUFVO0lBQ1ZDLGFBQWEsR0FBQUwsS0FBQSxDQUFiSyxhQUFhO0lBQ2JDLFVBQVUsR0FBQU4sS0FBQSxDQUFWTSxVQUFVO0lBQ1Z4QixnQkFBZ0IsR0FBQWtCLEtBQUEsQ0FBaEJsQixnQkFBZ0I7RUFHbEIsSUFBSXlCLFVBQWlCLEdBQUcsRUFBRTtFQUUxQixJQUFNMUIsZUFBZSxHQUFHaUIsT0FBTyxDQUFDdkksSUFBSSxDQUFDLFVBQUFpSixNQUFNLEVBQUk7SUFDN0MsT0FBT0EsTUFBTSxDQUFDOUosSUFBSSxLQUFLOUIsdUJBQXVCLENBQUM4QixJQUFJO0VBQ3JELENBQUMsQ0FBQztFQUVGLElBQUlpQyxTQUFTLElBQUlBLFNBQVMsQ0FBQ3RCLE1BQU0sRUFBRTtJQUNqQyxJQUFNMEYsU0FBUyxHQUFHL0gseUJBQXlCLENBQUMrSyxTQUFTLEVBQUVFLFFBQVEsSUFBSSxDQUFDLENBQUM7SUFFckUsSUFBTXRCLG9CQUFvQixHQUFHMEIsYUFBYSxJQUFJMUMsb0JBQW9CLENBQUMvRixNQUFNLEVBQUVlLFNBQVMsQ0FBQztJQUVyRjRILFVBQVUsR0FBRzdCLFVBQVUsQ0FDcEJLLEtBQUssQ0FBQyxDQUFDLENBQ1BDLE9BQU8sQ0FBQyxDQUFDLENBQ1RuSixNQUFNLENBQUMsVUFBQ29KLFFBQVEsRUFBRUMsT0FBTyxFQUFLO01BQzdCLElBQUloSyxhQUFhLENBQUNnSyxPQUFPLENBQUMsRUFBRTtRQUMxQixJQUFNQyxVQUFVLEdBQUdELE9BQTBCO1FBQzdDLElBQUksQ0FBQ0MsVUFBVSxDQUFDdEksU0FBUyxFQUFFO1VBQ3pCLE9BQU9vSSxRQUFRO1FBQ2pCO1FBQ0EsT0FBT0EsUUFBUSxDQUFDM0ksTUFBTSxDQUNwQm1JLCtCQUErQixDQUM3QlUsVUFBVSxDQUFDVCxVQUFVLEVBQ3JCOUcsTUFBTSxFQUNOZSxTQUFTLEVBQ1RnRyxvQkFBb0IsRUFDcEI7VUFDRTNGLFFBQVEsRUFBUkEsUUFBUTtVQUNSWSxTQUFTLEVBQVRBLFNBQVM7VUFDVGlELE9BQU8sRUFBUEEsT0FBTztVQUNQQyxRQUFRLEVBQVJBLFFBQVE7VUFDUm5ELGlCQUFpQixFQUFqQkEsaUJBQWlCO1VBQ2pCRCxlQUFlLEVBQWZBLGVBQWU7VUFDZnFELFNBQVMsRUFBVEEsU0FBUztVQUNUOEIsZUFBZSxFQUFmQSxlQUFlO1VBQ2ZDLGdCQUFnQixFQUFoQkE7UUFDRixDQUFDLEVBQ0RuQyxjQUNGLENBQ0YsQ0FBQztNQUNIO01BQ0EsSUFBTXlDLE9BQU8sR0FBR0YsT0FBaUI7TUFDakMsSUFBSSxDQUFDUCxvQkFBb0IsQ0FBQ1MsT0FBTyxDQUFDLEVBQUU7UUFDbEMsT0FBT0gsUUFBUTtNQUNqQjtNQUNBLElBQU1yQyxVQUFVLEdBQUdoRixNQUFNLENBQUN5SCxTQUFTLENBQUMsVUFBQW9CLEtBQUE7UUFBQSxJQUFFN0osRUFBRSxHQUFBNkosS0FBQSxDQUFGN0osRUFBRTtRQUFBLE9BQU1BLEVBQUUsS0FBS3dJLE9BQU87TUFBQSxFQUFDO01BQzdELElBQUl4QyxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDckIsT0FBT3FDLFFBQVE7TUFDakI7TUFDQSxJQUFNTSxvQkFBb0IsR0FBRzVDLGNBQWMsR0FDdkMyQixrQkFBa0IsQ0FBQzNCLGNBQWMsRUFBRUMsVUFBVSxDQUFDLEdBQzlDLENBQUMsQ0FBQztNQUNOLElBQU05RixLQUFLLEdBQUdjLE1BQU0sQ0FBQ2dGLFVBQVUsQ0FBQztNQUNoQyxJQUFNcEMsSUFBSSxHQUFHN0IsU0FBUyxDQUFDaUUsVUFBVSxDQUFDO01BQ2xDLElBQU00QyxZQUFZLEdBQUc5QyxpQkFBaUIsQ0FDcEM7UUFDRTFELFFBQVEsRUFBUkEsUUFBUTtRQUNSbEMsS0FBSyxFQUFMQSxLQUFLO1FBQ0w4RixVQUFVLEVBQVZBLFVBQVU7UUFDVnBDLElBQUksRUFBSkEsSUFBSTtRQUNKWixTQUFTLEVBQVRBLFNBQVM7UUFDVGlELE9BQU8sRUFBUEEsT0FBTztRQUNQQyxRQUFRLEVBQVJBLFFBQVE7UUFDUm5ELGlCQUFpQixFQUFqQkEsaUJBQWlCO1FBQ2pCRCxlQUFlLEVBQWZBLGVBQWU7UUFDZnFELFNBQVMsRUFBVEEsU0FBUztRQUNUQyxtQkFBbUIsRUFBRTtVQUNuQjZCLGVBQWUsRUFBZkEsZUFBZTtVQUNmQyxnQkFBZ0IsRUFBaEJBO1FBQ0Y7TUFDRixDQUFDLEVBQ0RTLG9CQUNGLENBQUM7TUFDRCxPQUFPTixRQUFRLENBQUMzSSxNQUFNLENBQUNrSixZQUFZLElBQUksRUFBRSxDQUFDO0lBQzVDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDVjtFQUVBLElBQUksQ0FBQ1ksVUFBVSxFQUFFO0lBQ2YsT0FBT0csVUFBVTtFQUNuQjtFQUVBLElBQ0VWLFFBQVEsYUFBUkEsUUFBUSxlQUFSQSxRQUFRLENBQUVhLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUMzQ04sVUFBVSxJQUNWRixvQkFBb0IsSUFDcEJDLFlBQVksRUFDWjtJQUNBSSxVQUFVLENBQUNJLElBQUksQ0FDYixJQUFJckwsbUJBQW1CLENBQUM7TUFDdEJzQixFQUFFLEVBQUUsdUJBQXVCO01BQzNCc0osb0JBQW9CLEVBQXBCQSxvQkFBb0I7TUFDcEJDLFlBQVksRUFBWkEsWUFBWTtNQUNaUyxtQkFBbUIsRUFBRWYsUUFBUSxDQUFDZSxtQkFBbUI7TUFDakRDLFFBQVEsRUFBRXpELE9BQU8sQ0FBQzBCLGdCQUFnQixDQUFDO01BQ25DZ0MsY0FBYyxFQUFFO1FBQ2RDLFlBQVksRUFBRWxCLFFBQVEsQ0FBQ2U7TUFDekI7SUFDRixDQUFDLENBQ0gsQ0FBQztFQUNIO0VBRUEsSUFBQUksb0JBQUEsR0FBc0QvQyxtQkFBbUIsQ0FBQ0MsV0FBVyxDQUFDO0lBQUErQyxxQkFBQSxHQUFBQyxjQUFBLENBQUFGLG9CQUFBO0lBQS9FRyxzQkFBc0IsR0FBQUYscUJBQUE7SUFBRUcsbUJBQW1CLEdBQUFILHFCQUFBO0VBRWxELElBQU1JLFdBQWtCLEdBQUcsRUFBRTtFQUM3QixJQUFJZixVQUFVLEVBQUU7SUFDZGUsV0FBVyxDQUFDVixJQUFJLENBQ2Q3TCxjQUFjLENBQUEyQixhQUFBLENBQUFBLGFBQUEsS0FDVDZKLFVBQVU7TUFDYnhELFFBQVEsRUFBUkE7SUFBUSxFQUNULENBQ0gsQ0FBQztFQUNIO0VBRUEsVUFBQXhHLE1BQUEsQ0FBQWdMLGtCQUFBLENBQVdILHNCQUFzQixHQUFBRyxrQkFBQSxDQUFLZixVQUFVLEdBQUFlLGtCQUFBLENBQUtGLG1CQUFtQixHQUFLQyxXQUFXO0FBQzFGO0FBRUEsT0FBTyxTQUFTRSx1QkFBdUJBLENBQXlCM0osTUFBVyxFQUFZO0VBQ3JGLE9BQU9BLE1BQU0sQ0FBQ3JCLEdBQUcsQ0FBQyxVQUFBaUwsS0FBQTtJQUFBLElBQUU1SyxFQUFFLEdBQUE0SyxLQUFBLENBQUY1SyxFQUFFO0lBQUEsT0FBTUEsRUFBRTtFQUFBLEVBQUM7QUFDakM7O0FBRUE7O0FBRUEsT0FBTyxTQUFTNkssZ0JBQWdCQSxDQUFDdkwsS0FBZ0MsRUFBbUI7RUFBQSxJQUFBd0wsU0FBQSxFQUFBQyxZQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLHFCQUFBO0VBQ2xGLE9BQU87SUFDTGxMLEVBQUUsR0FBQThLLFNBQUEsR0FBRXhMLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFVSxFQUFFLGNBQUE4SyxTQUFBLGNBQUFBLFNBQUEsR0FBSXRNLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbEMyTSxLQUFLLEdBQUFKLFlBQUEsR0FBRXpMLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNkwsS0FBSyxjQUFBSixZQUFBLGNBQUFBLFlBQUEsR0FBSSxXQUFXO0lBQ2xDOUssU0FBUyxHQUFBK0ssZ0JBQUEsR0FBRTFMLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFVyxTQUFTLGNBQUErSyxnQkFBQSxjQUFBQSxnQkFBQSxHQUFJLElBQUk7SUFDbkNsRCxVQUFVLEdBQUFtRCxpQkFBQSxHQUFFM0wsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV3SSxVQUFVLGNBQUFtRCxpQkFBQSxjQUFBQSxpQkFBQSxHQUFJLEVBQUU7SUFDbkNHLGtCQUFrQixHQUFBRixxQkFBQSxHQUFFNUwsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU4TCxrQkFBa0IsY0FBQUYscUJBQUEsY0FBQUEscUJBQUEsR0FBSTtFQUNuRCxDQUFDO0FBQ0g7QUFFQSxPQUFPLFNBQVNHLDJCQUEyQkEsQ0FDekN2RCxVQUFzQixFQUN0QlEsT0FBd0IsRUFDeEJnRCxPQUFnQixFQUNKO0VBQ1osSUFBTS9ILEdBQUcsR0FBRytILE9BQU8sYUFBUEEsT0FBTyxjQUFQQSxPQUFPLEdBQUksQ0FBQztFQUN4QixJQUFNbE0sTUFBTSxHQUFBc0wsa0JBQUEsQ0FBTzVDLFVBQVUsQ0FBQztFQUM5QjFJLE1BQU0sQ0FBQ21NLE1BQU0sQ0FBQ2hJLEdBQUcsRUFBRSxDQUFDLEVBQUUrRSxPQUFPLENBQUM7RUFDOUIsT0FBT2xKLE1BQU07QUFDZjtBQUVBLE9BQU8sU0FBU29NLDJCQUEyQkEsQ0FDekMxRCxVQUFzQixFQUN0QlEsT0FBd0IsRUFDWjtFQUNaLElBQUksQ0FBQ1IsVUFBVSxFQUFFLE9BQU8sRUFBRTtFQUMxQixJQUFNMkQsU0FBUyxHQUFHLE9BQU9uRCxPQUFPLEtBQUssUUFBUSxHQUFHQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ3RJLEVBQUU7RUFDcEUsSUFBSTBMLGFBQWEsR0FBRzVELFVBQVUsQ0FBQ3hHLE1BQU0sQ0FBQyxVQUFBcUssS0FBSyxFQUFJO0lBQzdDLElBQUlyTixhQUFhLENBQUNxTixLQUFLLENBQUMsRUFBRTtNQUN4QixPQUFRQSxLQUFLLENBQXFCM0wsRUFBRSxLQUFLeUwsU0FBUztJQUNwRDtJQUNBLE9BQU9FLEtBQUssS0FBS0YsU0FBUztFQUM1QixDQUFDLENBQUM7RUFFRkMsYUFBYSxHQUFHQSxhQUFhLENBQUMvTCxHQUFHLENBQUMsVUFBQWdNLEtBQUssRUFBSTtJQUN6QyxJQUFJck4sYUFBYSxDQUFDcU4sS0FBSyxDQUFDLEVBQUU7TUFDeEIsSUFBTUMsS0FBSyxHQUFHRCxLQUF3QjtNQUN0QyxPQUFBOUwsYUFBQSxDQUFBQSxhQUFBLEtBQ0srTCxLQUFLO1FBQ1I5RCxVQUFVLEVBQUUwRCwyQkFBMkIsQ0FBQ0ksS0FBSyxDQUFDOUQsVUFBVSxFQUFFMkQsU0FBUztNQUFDO0lBRXhFO0lBQ0EsT0FBT0UsS0FBSztFQUNkLENBQUMsQ0FBQztFQUVGLE9BQU9ELGFBQWE7QUFDdEI7QUFFQSxPQUFPLFNBQVNHLDJCQUEyQkEsQ0FDekMvRCxVQUFzQixFQUN0QmdFLFlBQW9CLEVBQ1M7RUFDN0IsSUFBSUYsS0FBa0M7RUFDdEMsS0FBSyxJQUFJRyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdqRSxVQUFVLENBQUNySCxNQUFNLElBQUksQ0FBQ21MLEtBQUssRUFBRUcsQ0FBQyxFQUFFLEVBQUU7SUFDcEQsSUFBTUosS0FBSyxHQUFHN0QsVUFBVSxDQUFDaUUsQ0FBQyxDQUFDO0lBQzNCLElBQUl6TixhQUFhLENBQUNxTixLQUFLLENBQUMsRUFBRTtNQUN4QixJQUFNSyxHQUFHLEdBQUdMLEtBQXdCO01BQ3BDQyxLQUFLLEdBQ0hJLEdBQUcsQ0FBQ2hNLEVBQUUsS0FBSzhMLFlBQVksR0FBR0UsR0FBRyxHQUFHSCwyQkFBMkIsQ0FBQ0csR0FBRyxDQUFDbEUsVUFBVSxFQUFFZ0UsWUFBWSxDQUFDO0lBQzdGO0VBQ0Y7RUFDQSxPQUFPRixLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNLLHNCQUFzQkEsQ0FBQ25FLFVBQXNCLEVBQUVvRSxPQUFlLEVBQXFCO0VBQ2pHLElBQU1DLFNBQTRCLEdBQUcsRUFBRTtFQUV2QyxJQUFNQyxNQUFLLEdBQUcsU0FBUkEsS0FBS0EsQ0FBSUMsT0FBbUIsRUFBYztJQUFBLElBQUFDLFVBQUEsR0FBQTFILDBCQUFBLENBQzFCeUgsT0FBTztNQUFBRSxNQUFBO0lBQUE7TUFBM0IsS0FBQUQsVUFBQSxDQUFBeEgsQ0FBQSxNQUFBeUgsTUFBQSxHQUFBRCxVQUFBLENBQUF2SCxDQUFBLElBQUFDLElBQUEsR0FBNkI7UUFBQSxJQUFsQjJHLEtBQUssR0FBQVksTUFBQSxDQUFBdEgsS0FBQTtRQUNkLElBQUksT0FBTzBHLEtBQUssS0FBSyxRQUFRLEVBQUU7VUFDN0IsSUFBSUEsS0FBSyxLQUFLTyxPQUFPLEVBQUU7WUFDckIsT0FBTyxJQUFJO1VBQ2I7VUFDQTtRQUNGO1FBQ0EsSUFBSSxDQUFDNU4sYUFBYSxDQUFDcU4sS0FBSyxDQUFDLEVBQUU7VUFDekI7UUFDRjtRQUNBLElBQU1DLEtBQUssR0FBR0QsS0FBd0I7UUFDdEMsSUFBSUMsS0FBSyxDQUFDNUwsRUFBRSxLQUFLa00sT0FBTyxFQUFFO1VBQ3hCLE9BQU8sSUFBSTtRQUNiO1FBQ0EsSUFBSUUsTUFBSyxDQUFDUixLQUFLLENBQUM5RCxVQUFVLENBQUMsRUFBRTtVQUMzQnFFLFNBQVMsQ0FBQ3BDLElBQUksQ0FBQzZCLEtBQUssQ0FBQztVQUNyQixPQUFPLElBQUk7UUFDYjtNQUNGO0lBQUMsU0FBQXJKLEdBQUE7TUFBQStKLFVBQUEsQ0FBQXBILENBQUEsQ0FBQTNDLEdBQUE7SUFBQTtNQUFBK0osVUFBQSxDQUFBbkgsQ0FBQTtJQUFBO0lBQ0QsT0FBTyxLQUFLO0VBQ2QsQ0FBQztFQUVEaUgsTUFBSyxDQUFDdEUsVUFBVSxDQUFDO0VBQ2pCLE9BQU9xRSxTQUFTO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNLLG9CQUFvQkEsQ0FDbEN0TSxLQUEyRCxFQUMzRDRILFVBQXVCLEVBQ2Q7RUFDVCxJQUFJNUgsS0FBSyxDQUFDZSxNQUFNLENBQUNtSyxrQkFBa0IsS0FBSyxLQUFLLEVBQUU7SUFDN0MsT0FBTyxLQUFLO0VBQ2Q7RUFDQSxJQUFJLEVBQUN0RCxVQUFVLGFBQVZBLFVBQVUsZUFBVkEsVUFBVSxDQUFFckgsTUFBTSxHQUFFO0lBQ3ZCLE9BQU8sSUFBSTtFQUNiO0VBQ0EsT0FBT3dMLHNCQUFzQixDQUFDbkUsVUFBVSxFQUFFNUgsS0FBSyxDQUFDRixFQUFFLENBQUMsQ0FBQ3lNLEtBQUssQ0FDdkQsVUFBQWIsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ1Isa0JBQWtCLEtBQUssS0FBSztFQUFBLENBQzdDLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU3NCLHVCQUF1QkEsQ0FDckM1RSxVQUFzQixFQUN0QlUsT0FBZSxFQUNjO0VBQUEsSUFBQW1FLFVBQUEsR0FBQS9ILDBCQUFBLENBQ1RrRCxVQUFVO0lBQUE4RSxNQUFBO0VBQUE7SUFBOUIsS0FBQUQsVUFBQSxDQUFBN0gsQ0FBQSxNQUFBOEgsTUFBQSxHQUFBRCxVQUFBLENBQUE1SCxDQUFBLElBQUFDLElBQUEsR0FBZ0M7TUFBQSxJQUFyQjJHLEtBQUssR0FBQWlCLE1BQUEsQ0FBQTNILEtBQUE7TUFDZCxJQUFJM0csYUFBYSxDQUFDcU4sS0FBSyxDQUFDLEVBQUU7UUFDeEIsSUFBTUMsS0FBSyxHQUFHRCxLQUF3QjtRQUN0QyxJQUFJQyxLQUFLLENBQUM5RCxVQUFVLENBQUNuSCxJQUFJLENBQUMsVUFBQXVFLENBQUM7VUFBQSxPQUFJLE9BQU9BLENBQUMsS0FBSyxRQUFRLElBQUlBLENBQUMsS0FBS3NELE9BQU87UUFBQSxFQUFDLEVBQUU7VUFDdEUsT0FBT29ELEtBQUs7UUFDZDtRQUNBLElBQU1pQixNQUFNLEdBQUdILHVCQUF1QixDQUFDZCxLQUFLLENBQUM5RCxVQUFVLEVBQUVVLE9BQU8sQ0FBQztRQUNqRSxJQUFJcUUsTUFBTSxFQUFFLE9BQU9BLE1BQU07TUFDM0I7SUFDRjtFQUFDLFNBQUF0SyxHQUFBO0lBQUFvSyxVQUFBLENBQUF6SCxDQUFBLENBQUEzQyxHQUFBO0VBQUE7SUFBQW9LLFVBQUEsQ0FBQXhILENBQUE7RUFBQTtFQUNELE9BQU90RSxTQUFTO0FBQ2xCO0FBRUEsT0FBTyxTQUFTaU0sd0JBQXdCQSxDQUFDaEYsVUFBc0IsRUFBRWlGLFlBQW9CLEVBQVU7RUFDN0YsT0FBT2pGLFVBQVUsQ0FBQ1csU0FBUyxDQUFDLFVBQUFrRCxLQUFLO0lBQUEsT0FDL0JyTixhQUFhLENBQUNxTixLQUFLLENBQUMsR0FBSUEsS0FBSyxDQUFxQjNMLEVBQUUsS0FBSytNLFlBQVksR0FBR3BCLEtBQUssS0FBS29CLFlBQVk7RUFBQSxDQUNoRyxDQUFDO0FBQ0g7QUFFQSxPQUFPLFNBQVNDLDBCQUEwQkEsQ0FBQ2xGLFVBQXNCLEVBQUVVLE9BQWUsRUFBVztFQUMzRixJQUFJeUUsS0FBSyxHQUFHLEtBQUs7RUFDakIsS0FBSyxJQUFJbEIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHakUsVUFBVSxDQUFDckgsTUFBTSxJQUFJLENBQUN3TSxLQUFLLEVBQUVsQixDQUFDLEVBQUUsRUFBRTtJQUNwRCxJQUFNSixLQUFLLEdBQUc3RCxVQUFVLENBQUNpRSxDQUFDLENBQUM7SUFDM0IsSUFBSXpOLGFBQWEsQ0FBQ3FOLEtBQUssQ0FBQyxFQUFFO01BQ3hCc0IsS0FBSyxHQUFHRCwwQkFBMEIsQ0FBRXJCLEtBQUssQ0FBcUI3RCxVQUFVLEVBQUVVLE9BQU8sQ0FBQztJQUNwRixDQUFDLE1BQU07TUFDTHlFLEtBQUssR0FBR3pFLE9BQU8sS0FBS21ELEtBQUs7SUFDM0I7RUFDRjtFQUNBLE9BQU9zQixLQUFLO0FBQ2Q7QUFFQSxPQUFPLFNBQVNDLDZCQUE2QkEsQ0FDM0NwRixVQUFzQixFQUN0QnFGLFFBQXlCLEVBQ3pCQyxRQUF5QixFQUNiO0VBQ1osSUFBTUMsVUFBVSxHQUFHLE9BQU9GLFFBQVEsS0FBSyxRQUFRLEdBQUdBLFFBQVEsR0FBR0EsUUFBUSxDQUFDbk4sRUFBRTtFQUN4RSxPQUFPOEgsVUFBVSxDQUFDbkksR0FBRyxDQUFDLFVBQUFnTSxLQUFLLEVBQUk7SUFDN0IsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO01BQzdCLE9BQU9BLEtBQUssS0FBSzBCLFVBQVUsR0FBR0QsUUFBUSxHQUFHekIsS0FBSztJQUNoRCxDQUFDLE1BQU0sSUFBSXJOLGFBQWEsQ0FBQ3FOLEtBQUssQ0FBQyxFQUFFO01BQy9CLElBQU1LLEdBQUcsR0FBR0wsS0FBd0I7TUFDcEMsSUFBSUssR0FBRyxDQUFDaE0sRUFBRSxLQUFLcU4sVUFBVSxFQUFFO1FBQ3pCLE9BQU9ELFFBQVE7TUFDakI7TUFDQSxPQUFBdk4sYUFBQSxDQUFBQSxhQUFBLEtBQ0ttTSxHQUFHO1FBQ05sRSxVQUFVLEVBQUVvRiw2QkFBNkIsQ0FBQ2xCLEdBQUcsQ0FBQ2xFLFVBQVUsRUFBRXFGLFFBQVEsRUFBRUMsUUFBUTtNQUFDO0lBRWpGO0lBQ0EsT0FBT3pCLEtBQUs7RUFDZCxDQUFDLENBQUM7QUFDSjtBQUVBLE9BQU8sU0FBUzJCLDRCQUE0QkEsQ0FDMUN4RixVQUFzQixFQUN0QnlGLGFBQThCLEVBQ2xCO0VBQ1osT0FBT3pGLFVBQVUsQ0FBQ25JLEdBQUcsQ0FBQyxVQUFBZ00sS0FBSyxFQUFJO0lBQzdCLElBQUlyTixhQUFhLENBQUNxTixLQUFLLENBQUMsRUFBRTtNQUN4QixJQUFNSyxHQUFHLEdBQUdMLEtBQXdCO01BQ3BDLElBQUlLLEdBQUcsQ0FBQ2hNLEVBQUUsS0FBS3VOLGFBQWEsQ0FBQ3ZOLEVBQUUsRUFBRTtRQUMvQixPQUFPdU4sYUFBYTtNQUN0QjtNQUNBLE9BQUExTixhQUFBLENBQUFBLGFBQUEsS0FDS21NLEdBQUc7UUFDTmxFLFVBQVUsRUFBRXdGLDRCQUE0QixDQUFDdEIsR0FBRyxDQUFDbEUsVUFBVSxFQUFFeUYsYUFBYTtNQUFDO0lBRTNFO0lBQ0EsT0FBTzVCLEtBQUs7RUFDZCxDQUFDLENBQUM7QUFDSjtBQUVBLE9BQU8sU0FBUzZCLGlCQUFpQkEsQ0FBQzFGLFVBQXNCLEVBQWtCO0VBQ3hFLE9BQU9BLFVBQVUsQ0FBQzdJLE1BQU0sQ0FBQyxVQUFDMEMsR0FBRyxFQUFFOEwsVUFBVSxFQUFLO0lBQzVDLElBQUluUCxhQUFhLENBQUNtUCxVQUFVLENBQUMsRUFBRTtNQUM3QixVQUFBL04sTUFBQSxDQUFBZ0wsa0JBQUEsQ0FBVy9JLEdBQUcsR0FBQStJLGtCQUFBLENBQUs4QyxpQkFBaUIsQ0FBRUMsVUFBVSxDQUFxQjNGLFVBQVUsQ0FBQztJQUNsRjtJQUNBLFVBQUFwSSxNQUFBLENBQUFnTCxrQkFBQSxDQUFXL0ksR0FBRyxJQUFFOEwsVUFBVTtFQUM1QixDQUFDLEVBQUUsRUFBb0IsQ0FBQztBQUMxQjtBQUVBLE9BQU8sU0FBU0Msd0JBQXdCQSxDQUN0QzVGLFVBQXNCLEVBQ3RCOUcsTUFBbUMsRUFDZDtFQUNyQixJQUFNMk0sV0FBVyxHQUFHM00sTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVNLE1BQU0sQ0FBQ2tGLE9BQU8sQ0FBQztFQUMzQyxPQUFPc0IsVUFBVSxDQUFDN0ksTUFBTSxDQUFDLFVBQUMwQyxHQUFHLEVBQUUyRyxPQUFPLEVBQUs7SUFDekMsSUFBSWhLLGFBQWEsQ0FBQ2dLLE9BQU8sQ0FBQyxFQUFFO01BQzFCLFVBQUE1SSxNQUFBLENBQUFnTCxrQkFBQSxDQUFXL0ksR0FBRyxJQUFFLENBQUMsWUFBWSxFQUFFMkcsT0FBTyxDQUFvQjtJQUM1RDtJQUNBLElBQU1wSSxLQUFLLEdBQUd5TixXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUMsSUFBSSxDQUFDLFVBQUFDLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUM3TixFQUFFLEtBQUtzSSxPQUFPO0lBQUEsRUFBQztJQUN0RCxJQUFJLENBQUNwSSxLQUFLLElBQUlBLEtBQUssQ0FBQ2UsTUFBTSxDQUFDNk0sTUFBTSxFQUFFO01BQ2pDLE9BQU9uTSxHQUFHO0lBQ1o7SUFDQSxVQUFBakMsTUFBQSxDQUFBZ0wsa0JBQUEsQ0FBVy9JLEdBQUcsSUFBRSxDQUFDLE9BQU8sRUFBRXpCLEtBQUssQ0FBQztFQUNsQyxDQUFDLEVBQUUsRUFBeUIsQ0FBQztBQUMvQjtBQUVBLE9BQU8sU0FBUzZOLDhCQUE4QkEsQ0FDNUNqRyxVQUFzQixFQUN0QjlHLE1BQXNCLEVBQ1Y7RUFDWixPQUFPOEcsVUFBVSxDQUFDN0ksTUFBTSxDQUFDLFVBQUMwQyxHQUFHLEVBQUVnSyxLQUFLLEVBQUs7SUFDdkMsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO01BQzdCLElBQUkzSyxNQUFNLENBQUM0TSxJQUFJLENBQUMsVUFBQUMsQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQzdOLEVBQUUsS0FBSzJMLEtBQUs7TUFBQSxFQUFDLEVBQUU7UUFDcENoSyxHQUFHLENBQUNvSSxJQUFJLENBQUM0QixLQUFLLENBQUM7TUFDakI7SUFDRixDQUFDLE1BQU07TUFDTCxJQUFNSyxHQUFHLEdBQUdMLEtBQXdCO01BQ3BDLElBQUlLLEdBQUcsQ0FBQ2xFLFVBQVUsRUFBRTtRQUNsQm5HLEdBQUcsQ0FBQ29JLElBQUksQ0FBQWxLLGFBQUEsQ0FBQUEsYUFBQSxLQUNIbU0sR0FBRztVQUNObEUsVUFBVSxFQUFFaUcsOEJBQThCLENBQUMvQixHQUFHLENBQUNsRSxVQUFVLEVBQUU5RyxNQUFNO1FBQUMsRUFDbkUsQ0FBQztNQUNKO0lBQ0Y7SUFDQSxPQUFPVyxHQUFHO0VBQ1osQ0FBQyxFQUFFLEVBQWdCLENBQUM7QUFDdEI7QUFFQSxPQUFPLFNBQVNxTSxpQkFBaUJBLENBQy9CbEcsVUFBa0MsRUFDbENtRyxhQUFxQixFQUNyQkMsa0JBQTBCLEVBQ0Y7RUFDeEIsSUFBTUMsV0FBVyxHQUFHckIsd0JBQXdCLENBQUNoRixVQUFVLEVBQUVtRyxhQUFhLENBQUM7RUFDdkUsSUFBTUcsU0FBUyxHQUFHdEIsd0JBQXdCLENBQUNoRixVQUFVLEVBQUVvRyxrQkFBa0IsQ0FBQztFQUUxRSxJQUFJQyxXQUFXLEtBQUssQ0FBQyxDQUFDLElBQUlDLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtJQUMxQyxPQUFPdEcsVUFBVTtFQUNuQjtFQUNBLE9BQU92SixTQUFTLENBQUN1SixVQUFVLEVBQUVxRyxXQUFXLEVBQUVDLFNBQVMsQ0FBQztBQUN0RDtBQUVBLE9BQU8sU0FBU0Msb0JBQW9CQSxDQUNsQ3ZHLFVBQWtDLEVBQ2xDVSxPQUFlLEVBQ0g7RUFDWixRQUFRQSxPQUFPLEVBQUE5SSxNQUFBLENBQUFnTCxrQkFBQSxDQUFLNUMsVUFBVTtBQUNoQztBQUVBLE9BQU8sU0FBU3dHLHNCQUFzQkEsQ0FDcEMxSyxJQUFvRSxFQUNwRTJLLFVBQWtCLEVBQ2xCO0VBQ0EsSUFBSSxDQUFDM0ssSUFBSSxFQUFFLE9BQU8vQyxTQUFTO0VBQzNCLElBQUkrQyxJQUFJLFlBQVl2RixPQUFPLEVBQUUsT0FBT3VGLElBQUksQ0FBQzRLLE9BQU8sQ0FBQ0QsVUFBVSxDQUFDO0VBQzVELE9BQU8zSyxJQUFJLENBQUMySyxVQUFVLENBQUM7QUFDekI7O0FBRUE7QUFDQSxPQUFPLFNBQVNFLHVCQUF1QkEsQ0FBQ3pOLE1BQW1CLEVBQVc7RUFDcEUsT0FBT0EsTUFBTSxDQUFDTCxJQUFJO0VBQ2hCO0VBQ0EsVUFBQVQsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ3dPLGFBQWEsSUFBSSxDQUFDeE8sS0FBSyxDQUFDeU8sUUFBUTtFQUFBLENBQ2pELENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
|