@kepler.gl/reducers 3.3.0-alpha.1 → 3.3.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/combined-updaters.d.ts +5 -1
- package/dist/combined-updaters.js +51 -2
- package/dist/composers.d.ts +1 -0
- package/dist/composers.js +2 -2
- package/dist/layer-utils.d.ts +23 -5
- package/dist/layer-utils.js +278 -21
- package/dist/map-state-updaters.d.ts +14 -21
- package/dist/map-state-updaters.js +88 -10
- package/dist/map-state.d.ts +2 -78
- package/dist/map-state.js +2 -2
- package/dist/ui-state-updaters.d.ts +1 -1
- package/dist/ui-state-updaters.js +7 -4
- package/dist/vis-state-merger.d.ts +7 -0
- package/dist/vis-state-merger.js +169 -8
- package/dist/vis-state-selectors.d.ts +42 -6
- package/dist/vis-state-updaters.d.ts +38 -1
- package/dist/vis-state-updaters.js +278 -22
- package/dist/vis-state.d.ts +8 -4
- package/dist/vis-state.js +2 -2
- package/package.json +21 -21
package/dist/layer-utils.js
CHANGED
|
@@ -4,23 +4,35 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
exports.addLayerOrGroupToLayerOrder = addLayerOrGroupToLayerOrder;
|
|
7
8
|
exports.addLayerToLayerOrder = addLayerToLayerOrder;
|
|
8
9
|
exports.areAnyDeckLayersLoading = areAnyDeckLayersLoading;
|
|
9
10
|
exports.bindLayerCallbacks = bindLayerCallbacks;
|
|
11
|
+
exports.buildLayerOrderHierarchy = buildLayerOrderHierarchy;
|
|
10
12
|
exports.calculateLayerData = calculateLayerData;
|
|
11
13
|
exports.computeDeckLayers = computeDeckLayers;
|
|
12
14
|
exports.findDefaultLayer = findDefaultLayer;
|
|
15
|
+
exports.findParentGroupForLayer = findParentGroupForLayer;
|
|
13
16
|
exports.getCustomDeckLayers = getCustomDeckLayers;
|
|
17
|
+
exports.getFlatLayerOrder = getFlatLayerOrder;
|
|
18
|
+
exports.getIndexFromLayerEntryId = getIndexFromLayerEntryId;
|
|
19
|
+
exports.getLayerGroupFromLayerOrder = getLayerGroupFromLayerOrder;
|
|
14
20
|
exports.getLayerHoverProp = getLayerHoverProp;
|
|
15
21
|
exports.getLayerHoverPropValue = getLayerHoverPropValue;
|
|
16
22
|
exports.getLayerOrderFromLayers = getLayerOrderFromLayers;
|
|
23
|
+
exports.getNewLayerGroup = getNewLayerGroup;
|
|
24
|
+
exports.isLayerPresentInLayerOrder = isLayerPresentInLayerOrder;
|
|
17
25
|
exports.isLayerRenderable = isLayerRenderable;
|
|
18
26
|
exports.isLayerVisible = isLayerVisible;
|
|
19
27
|
exports.mergeLayerVisConfigForNewDatasets = mergeLayerVisConfigForNewDatasets;
|
|
20
28
|
exports.prepareLayersForDeck = prepareLayersForDeck;
|
|
21
29
|
exports.prepareLayersToRender = prepareLayersToRender;
|
|
30
|
+
exports.removeElementFromLayerOrder = removeElementFromLayerOrder;
|
|
31
|
+
exports.removeGhostLayerFromLayerOrder = removeGhostLayerFromLayerOrder;
|
|
22
32
|
exports.renderDeckGlLayer = renderDeckGlLayer;
|
|
23
33
|
exports.reorderLayerOrder = reorderLayerOrder;
|
|
34
|
+
exports.replaceLayerEntryInLayerOrder = replaceLayerEntryInLayerOrder;
|
|
35
|
+
exports.updateLayerGroupInLayerOrder = updateLayerGroupInLayerOrder;
|
|
24
36
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
25
37
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
26
38
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
@@ -30,6 +42,9 @@ var _layers = require("@kepler.gl/layers");
|
|
|
30
42
|
var _utils = require("@kepler.gl/utils");
|
|
31
43
|
var _commonUtils = require("@kepler.gl/common-utils");
|
|
32
44
|
var _deckglLayers = require("@kepler.gl/deckgl-layers");
|
|
45
|
+
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; } } }; }
|
|
46
|
+
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; } }
|
|
47
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
33
48
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
34
49
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
|
35
50
|
// Copyright contributors to the kepler.gl project
|
|
@@ -263,12 +278,61 @@ function bindLayerCallbacks() {
|
|
|
263
278
|
}));
|
|
264
279
|
}, {});
|
|
265
280
|
}
|
|
281
|
+
function computeDeckLayersFromLayerOrder(layerOrder, layers, layerData, currentLayersForDeck, renderProps, layerCallbacks) {
|
|
282
|
+
var datasets = renderProps.datasets,
|
|
283
|
+
hoverInfo = renderProps.hoverInfo,
|
|
284
|
+
clicked = renderProps.clicked,
|
|
285
|
+
mapState = renderProps.mapState,
|
|
286
|
+
interactionConfig = renderProps.interactionConfig,
|
|
287
|
+
animationConfig = renderProps.animationConfig,
|
|
288
|
+
mapLayers = renderProps.mapLayers,
|
|
289
|
+
hasShadowEffect = renderProps.hasShadowEffect;
|
|
290
|
+
return layerOrder.slice().reverse().reduce(function (overlays, element) {
|
|
291
|
+
if ((0, _utils.isPlainObject)(element)) {
|
|
292
|
+
var layerGroup = element;
|
|
293
|
+
if (!layerGroup.isVisible) {
|
|
294
|
+
return overlays;
|
|
295
|
+
}
|
|
296
|
+
return overlays.concat(computeDeckLayersFromLayerOrder(layerGroup.layerOrder, layers, layerData, currentLayersForDeck, renderProps, layerCallbacks));
|
|
297
|
+
}
|
|
298
|
+
var layerId = element;
|
|
299
|
+
if (!currentLayersForDeck[layerId]) {
|
|
300
|
+
return overlays;
|
|
301
|
+
}
|
|
302
|
+
var layerIndex = layers.findIndex(function (_ref3) {
|
|
303
|
+
var id = _ref3.id;
|
|
304
|
+
return id === layerId;
|
|
305
|
+
});
|
|
306
|
+
if (layerIndex === -1) {
|
|
307
|
+
return overlays;
|
|
308
|
+
}
|
|
309
|
+
var bindedLayerCallbacks = layerCallbacks ? bindLayerCallbacks(layerCallbacks, layerIndex) : {};
|
|
310
|
+
var layer = layers[layerIndex];
|
|
311
|
+
var data = layerData[layerIndex];
|
|
312
|
+
var layerOverlay = renderDeckGlLayer({
|
|
313
|
+
datasets: datasets,
|
|
314
|
+
layer: layer,
|
|
315
|
+
layerIndex: layerIndex,
|
|
316
|
+
data: data,
|
|
317
|
+
hoverInfo: hoverInfo,
|
|
318
|
+
clicked: clicked,
|
|
319
|
+
mapState: mapState,
|
|
320
|
+
interactionConfig: interactionConfig,
|
|
321
|
+
animationConfig: animationConfig,
|
|
322
|
+
mapLayers: mapLayers,
|
|
323
|
+
experimentalContext: {
|
|
324
|
+
hasShadowEffect: hasShadowEffect
|
|
325
|
+
}
|
|
326
|
+
}, bindedLayerCallbacks);
|
|
327
|
+
return overlays.concat(layerOverlay || []);
|
|
328
|
+
}, []);
|
|
329
|
+
}
|
|
266
330
|
|
|
267
331
|
// eslint-disable-next-line complexity
|
|
268
|
-
function computeDeckLayers(
|
|
269
|
-
var visState =
|
|
270
|
-
mapState =
|
|
271
|
-
mapStyle =
|
|
332
|
+
function computeDeckLayers(_ref4, options, layerCallbacks, deckGlProps) {
|
|
333
|
+
var visState = _ref4.visState,
|
|
334
|
+
mapState = _ref4.mapState,
|
|
335
|
+
mapStyle = _ref4.mapStyle;
|
|
272
336
|
var datasets = visState.datasets,
|
|
273
337
|
effects = visState.effects,
|
|
274
338
|
layers = visState.layers,
|
|
@@ -279,13 +343,13 @@ function computeDeckLayers(_ref3, options, layerCallbacks, deckGlProps) {
|
|
|
279
343
|
interactionConfig = visState.interactionConfig,
|
|
280
344
|
animationConfig = visState.animationConfig,
|
|
281
345
|
splitMaps = visState.splitMaps;
|
|
282
|
-
var
|
|
283
|
-
mapIndex =
|
|
284
|
-
mapboxApiAccessToken =
|
|
285
|
-
mapboxApiUrl =
|
|
286
|
-
primaryMap =
|
|
287
|
-
layersForDeck =
|
|
288
|
-
editorInfo =
|
|
346
|
+
var _ref5 = options || {},
|
|
347
|
+
mapIndex = _ref5.mapIndex,
|
|
348
|
+
mapboxApiAccessToken = _ref5.mapboxApiAccessToken,
|
|
349
|
+
mapboxApiUrl = _ref5.mapboxApiUrl,
|
|
350
|
+
primaryMap = _ref5.primaryMap,
|
|
351
|
+
layersForDeck = _ref5.layersForDeck,
|
|
352
|
+
editorInfo = _ref5.editorInfo;
|
|
289
353
|
var dataLayers = [];
|
|
290
354
|
var hasShadowEffect = effects.some(function (effect) {
|
|
291
355
|
return effect.type === _constants.LIGHT_AND_SHADOW_EFFECT.type;
|
|
@@ -293,13 +357,34 @@ function computeDeckLayers(_ref3, options, layerCallbacks, deckGlProps) {
|
|
|
293
357
|
if (layerData && layerData.length) {
|
|
294
358
|
var mapLayers = (0, _utils.getMapLayersFromSplitMaps)(splitMaps, mapIndex || 0);
|
|
295
359
|
var currentLayersForDeck = layersForDeck || prepareLayersForDeck(layers, layerData);
|
|
296
|
-
dataLayers = layerOrder.slice().reverse().
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
360
|
+
dataLayers = layerOrder.slice().reverse().reduce(function (overlays, element) {
|
|
361
|
+
if ((0, _utils.isPlainObject)(element)) {
|
|
362
|
+
var layerGroup = element;
|
|
363
|
+
if (!layerGroup.isVisible) {
|
|
364
|
+
return overlays;
|
|
365
|
+
}
|
|
366
|
+
return overlays.concat(computeDeckLayersFromLayerOrder(layerGroup.layerOrder, layers, layerData, currentLayersForDeck, {
|
|
367
|
+
datasets: datasets,
|
|
368
|
+
hoverInfo: hoverInfo,
|
|
369
|
+
clicked: clicked,
|
|
370
|
+
mapState: mapState,
|
|
371
|
+
interactionConfig: interactionConfig,
|
|
372
|
+
animationConfig: animationConfig,
|
|
373
|
+
mapLayers: mapLayers,
|
|
374
|
+
hasShadowEffect: hasShadowEffect
|
|
375
|
+
}, layerCallbacks));
|
|
376
|
+
}
|
|
377
|
+
var layerId = element;
|
|
378
|
+
if (!currentLayersForDeck[layerId]) {
|
|
379
|
+
return overlays;
|
|
380
|
+
}
|
|
381
|
+
var layerIndex = layers.findIndex(function (_ref6) {
|
|
382
|
+
var id = _ref6.id;
|
|
301
383
|
return id === layerId;
|
|
302
384
|
});
|
|
385
|
+
if (layerIndex === -1) {
|
|
386
|
+
return overlays;
|
|
387
|
+
}
|
|
303
388
|
var bindedLayerCallbacks = layerCallbacks ? bindLayerCallbacks(layerCallbacks, layerIndex) : {};
|
|
304
389
|
var layer = layers[layerIndex];
|
|
305
390
|
var data = layerData[layerIndex];
|
|
@@ -346,14 +431,186 @@ function computeDeckLayers(_ref3, options, layerCallbacks, deckGlProps) {
|
|
|
346
431
|
return [].concat((0, _toConsumableArray2["default"])(customBottomDeckLayers), (0, _toConsumableArray2["default"])(dataLayers), (0, _toConsumableArray2["default"])(customTopDeckLayers), editorLayer);
|
|
347
432
|
}
|
|
348
433
|
function getLayerOrderFromLayers(layers) {
|
|
349
|
-
return layers.map(function (
|
|
350
|
-
var id =
|
|
434
|
+
return layers.map(function (_ref7) {
|
|
435
|
+
var id = _ref7.id;
|
|
351
436
|
return id;
|
|
352
437
|
});
|
|
353
438
|
}
|
|
439
|
+
|
|
440
|
+
// --- Layer Group Utilities ---
|
|
441
|
+
|
|
442
|
+
function getNewLayerGroup(props) {
|
|
443
|
+
var _props$id, _props$label, _props$isVisible, _props$layerOrder, _props$isIncludedInLe;
|
|
444
|
+
return {
|
|
445
|
+
id: (_props$id = props === null || props === void 0 ? void 0 : props.id) !== null && _props$id !== void 0 ? _props$id : (0, _commonUtils.generateHashId)(6),
|
|
446
|
+
label: (_props$label = props === null || props === void 0 ? void 0 : props.label) !== null && _props$label !== void 0 ? _props$label : 'New group',
|
|
447
|
+
isVisible: (_props$isVisible = props === null || props === void 0 ? void 0 : props.isVisible) !== null && _props$isVisible !== void 0 ? _props$isVisible : true,
|
|
448
|
+
layerOrder: (_props$layerOrder = props === null || props === void 0 ? void 0 : props.layerOrder) !== null && _props$layerOrder !== void 0 ? _props$layerOrder : [],
|
|
449
|
+
isIncludedInLegend: (_props$isIncludedInLe = props === null || props === void 0 ? void 0 : props.isIncludedInLegend) !== null && _props$isIncludedInLe !== void 0 ? _props$isIncludedInLe : true
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
function addLayerOrGroupToLayerOrder(layerOrder, element, atIndex) {
|
|
453
|
+
var idx = atIndex !== null && atIndex !== void 0 ? atIndex : 0;
|
|
454
|
+
var result = (0, _toConsumableArray2["default"])(layerOrder);
|
|
455
|
+
result.splice(idx, 0, element);
|
|
456
|
+
return result;
|
|
457
|
+
}
|
|
458
|
+
function removeElementFromLayerOrder(layerOrder, element) {
|
|
459
|
+
if (!layerOrder) return [];
|
|
460
|
+
var elementId = typeof element === 'string' ? element : element.id;
|
|
461
|
+
var newLayerOrder = layerOrder.filter(function (entry) {
|
|
462
|
+
if ((0, _utils.isPlainObject)(entry)) {
|
|
463
|
+
return entry.id !== elementId;
|
|
464
|
+
}
|
|
465
|
+
return entry !== elementId;
|
|
466
|
+
});
|
|
467
|
+
newLayerOrder = newLayerOrder.map(function (entry) {
|
|
468
|
+
if ((0, _utils.isPlainObject)(entry)) {
|
|
469
|
+
var group = entry;
|
|
470
|
+
return _objectSpread(_objectSpread({}, group), {}, {
|
|
471
|
+
layerOrder: removeElementFromLayerOrder(group.layerOrder, elementId)
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
return entry;
|
|
475
|
+
});
|
|
476
|
+
return newLayerOrder;
|
|
477
|
+
}
|
|
478
|
+
function getLayerGroupFromLayerOrder(layerOrder, layerGroupId) {
|
|
479
|
+
var group;
|
|
480
|
+
for (var i = 0; i < layerOrder.length && !group; i++) {
|
|
481
|
+
var entry = layerOrder[i];
|
|
482
|
+
if ((0, _utils.isPlainObject)(entry)) {
|
|
483
|
+
var grp = entry;
|
|
484
|
+
group = grp.id === layerGroupId ? grp : getLayerGroupFromLayerOrder(grp.layerOrder, layerGroupId);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
return group;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Find the parent group that contains a given layer ID.
|
|
492
|
+
* Returns undefined if the layer is at the root level.
|
|
493
|
+
*/
|
|
494
|
+
function findParentGroupForLayer(layerOrder, layerId) {
|
|
495
|
+
var _iterator = _createForOfIteratorHelper(layerOrder),
|
|
496
|
+
_step;
|
|
497
|
+
try {
|
|
498
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
499
|
+
var entry = _step.value;
|
|
500
|
+
if ((0, _utils.isPlainObject)(entry)) {
|
|
501
|
+
var group = entry;
|
|
502
|
+
if (group.layerOrder.some(function (e) {
|
|
503
|
+
return typeof e === 'string' && e === layerId;
|
|
504
|
+
})) {
|
|
505
|
+
return group;
|
|
506
|
+
}
|
|
507
|
+
var nested = findParentGroupForLayer(group.layerOrder, layerId);
|
|
508
|
+
if (nested) return nested;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
} catch (err) {
|
|
512
|
+
_iterator.e(err);
|
|
513
|
+
} finally {
|
|
514
|
+
_iterator.f();
|
|
515
|
+
}
|
|
516
|
+
return undefined;
|
|
517
|
+
}
|
|
518
|
+
function getIndexFromLayerEntryId(layerOrder, layerEntryId) {
|
|
519
|
+
return layerOrder.findIndex(function (entry) {
|
|
520
|
+
return (0, _utils.isPlainObject)(entry) ? entry.id === layerEntryId : entry === layerEntryId;
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
function isLayerPresentInLayerOrder(layerOrder, layerId) {
|
|
524
|
+
var found = false;
|
|
525
|
+
for (var i = 0; i < layerOrder.length && !found; i++) {
|
|
526
|
+
var entry = layerOrder[i];
|
|
527
|
+
if ((0, _utils.isPlainObject)(entry)) {
|
|
528
|
+
found = isLayerPresentInLayerOrder(entry.layerOrder, layerId);
|
|
529
|
+
} else {
|
|
530
|
+
found = layerId === entry;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
return found;
|
|
534
|
+
}
|
|
535
|
+
function replaceLayerEntryInLayerOrder(layerOrder, oldEntry, newEntry) {
|
|
536
|
+
var oldEntryId = typeof oldEntry === 'string' ? oldEntry : oldEntry.id;
|
|
537
|
+
return layerOrder.map(function (entry) {
|
|
538
|
+
if (typeof entry === 'string') {
|
|
539
|
+
return entry === oldEntryId ? newEntry : entry;
|
|
540
|
+
} else if ((0, _utils.isPlainObject)(entry)) {
|
|
541
|
+
var grp = entry;
|
|
542
|
+
if (grp.id === oldEntryId) {
|
|
543
|
+
return newEntry;
|
|
544
|
+
}
|
|
545
|
+
return _objectSpread(_objectSpread({}, grp), {}, {
|
|
546
|
+
layerOrder: replaceLayerEntryInLayerOrder(grp.layerOrder, oldEntry, newEntry)
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
return entry;
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
function updateLayerGroupInLayerOrder(layerOrder, newLayerGroup) {
|
|
553
|
+
return layerOrder.map(function (entry) {
|
|
554
|
+
if ((0, _utils.isPlainObject)(entry)) {
|
|
555
|
+
var grp = entry;
|
|
556
|
+
if (grp.id === newLayerGroup.id) {
|
|
557
|
+
return newLayerGroup;
|
|
558
|
+
}
|
|
559
|
+
return _objectSpread(_objectSpread({}, grp), {}, {
|
|
560
|
+
layerOrder: updateLayerGroupInLayerOrder(grp.layerOrder, newLayerGroup)
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
return entry;
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
function getFlatLayerOrder(layerOrder) {
|
|
567
|
+
return layerOrder.reduce(function (acc, orderEntry) {
|
|
568
|
+
if ((0, _utils.isPlainObject)(orderEntry)) {
|
|
569
|
+
return [].concat((0, _toConsumableArray2["default"])(acc), (0, _toConsumableArray2["default"])(getFlatLayerOrder(orderEntry.layerOrder)));
|
|
570
|
+
}
|
|
571
|
+
return [].concat((0, _toConsumableArray2["default"])(acc), [orderEntry]);
|
|
572
|
+
}, []);
|
|
573
|
+
}
|
|
574
|
+
function buildLayerOrderHierarchy(layerOrder, layers) {
|
|
575
|
+
var validLayers = layers === null || layers === void 0 ? void 0 : layers.filter(Boolean);
|
|
576
|
+
return layerOrder.reduce(function (acc, element) {
|
|
577
|
+
if ((0, _utils.isPlainObject)(element)) {
|
|
578
|
+
return [].concat((0, _toConsumableArray2["default"])(acc), [['layerGroup', element]]);
|
|
579
|
+
}
|
|
580
|
+
var layer = validLayers === null || validLayers === void 0 ? void 0 : validLayers.find(function (l) {
|
|
581
|
+
return l.id === element;
|
|
582
|
+
});
|
|
583
|
+
if (!layer || layer.config.hidden) {
|
|
584
|
+
return acc;
|
|
585
|
+
}
|
|
586
|
+
return [].concat((0, _toConsumableArray2["default"])(acc), [['layer', layer]]);
|
|
587
|
+
}, []);
|
|
588
|
+
}
|
|
589
|
+
function removeGhostLayerFromLayerOrder(layerOrder, layers) {
|
|
590
|
+
return layerOrder.reduce(function (acc, entry) {
|
|
591
|
+
if (typeof entry === 'string') {
|
|
592
|
+
if (layers.find(function (l) {
|
|
593
|
+
return l.id === entry;
|
|
594
|
+
})) {
|
|
595
|
+
acc.push(entry);
|
|
596
|
+
}
|
|
597
|
+
} else {
|
|
598
|
+
var grp = entry;
|
|
599
|
+
if (grp.layerOrder) {
|
|
600
|
+
acc.push(_objectSpread(_objectSpread({}, grp), {}, {
|
|
601
|
+
layerOrder: removeGhostLayerFromLayerOrder(grp.layerOrder, layers)
|
|
602
|
+
}));
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
return acc;
|
|
606
|
+
}, []);
|
|
607
|
+
}
|
|
354
608
|
function reorderLayerOrder(layerOrder, originLayerId, destinationLayerId) {
|
|
355
|
-
var activeIndex = layerOrder
|
|
356
|
-
var overIndex = layerOrder
|
|
609
|
+
var activeIndex = getIndexFromLayerEntryId(layerOrder, originLayerId);
|
|
610
|
+
var overIndex = getIndexFromLayerEntryId(layerOrder, destinationLayerId);
|
|
611
|
+
if (activeIndex === -1 || overIndex === -1) {
|
|
612
|
+
return layerOrder;
|
|
613
|
+
}
|
|
357
614
|
return (0, _commonUtils.arrayMove)(layerOrder, activeIndex, overIndex);
|
|
358
615
|
}
|
|
359
616
|
function addLayerToLayerOrder(layerOrder, layerId) {
|
|
@@ -373,4 +630,4 @@ function areAnyDeckLayersLoading(layers) {
|
|
|
373
630
|
return layer.internalState && !layer.isLoaded;
|
|
374
631
|
});
|
|
375
632
|
}
|
|
376
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbnN0YW50cyIsIl9sYXllcnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfZGVja2dsTGF5ZXJzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImxheWVyUHJvcHMiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImxjIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwicHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3VuZExheWVycyIsImNvbmNhdCIsIm1hcCIsInAiLCJ0eXBlIiwiZGF0YUlkIiwiaWQiLCJpc1Zpc2libGUiLCJsYXllciIsInNldEluaXRpYWxMYXllckNvbmZpZyIsImRhdGFDb250YWluZXIiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJzdGF0ZSIsInBhdGNoIiwiZGF0YXNldElkc1RvUGF0Y2giLCJoYXNEZWZpbmVkUGF0Y2hWYWx1ZSIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJkYXRhc2V0SWRTZXQiLCJTZXQiLCJsYXllcnMiLCJjb25maWciLCJoYXMiLCJzZXR0aW5ncyIsInZpc0NvbmZpZ1NldHRpbmdzIiwiYWxsb3dlZEtleXMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJwYXJ0aWFsIiwiYWNjIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJjYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJsYXllckRhdGEiLCJpc1ZhbGlkIiwiX29sZERhdGFVcGRhdGVUcmlnZ2VycyIsImhhc0FsbENvbHVtbnMiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiZXJyb3JNZXNzYWdlIiwiZXJyIiwiQ29uc29sZSIsImVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwic3Vic3RyaW5nIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJfcmVmIiwiYW5pbWF0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Db25maWciLCJob3ZlckluZm8iLCJsYXllcnNUb1JlbmRlciIsInRvb2x0aXAiLCJlbmFibGVkIiwicGlja2VkIiwib2JqZWN0Iiwib3ZlcmxheSIsImlkeCIsImluZGV4IiwiZ2V0SG92ZXJEYXRhIiwiX2RhdGFzZXRzJGRhdGFJZCIsImZpZWxkcyIsImRhdGEiLCJmaWVsZHNUb1Nob3ciLCJjdXJyZW50VGltZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsInZpc2libGUiLCJyZW5kZXJMYXllciIsImlzTGF5ZXJSZW5kZXJhYmxlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJzaG91bGRSZW5kZXJMYXllciIsImlzTGF5ZXJWaXNpYmxlIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJhY2N1Iiwib3ZlcmxheVR5cGUiLCJPVkVSTEFZX1RZUEVfQ09OU1QiLCJkZWNrZ2wiLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJnZXRDdXN0b21EZWNrTGF5ZXJzIiwiZGVja0dsUHJvcHMiLCJib3R0b21EZWNrTGF5ZXJzIiwiaXNGdW5jdGlvbiIsInRvcERlY2tMYXllcnMiLCJ0b3BMYXllcnMiLCJiaW5kTGF5ZXJDYWxsYmFja3MiLCJ2YWwiLCJjb21wdXRlRGVja0xheWVycyIsIl9yZWYzIiwib3B0aW9ucyIsInZpc1N0YXRlIiwibWFwU3R5bGUiLCJlZmZlY3RzIiwibGF5ZXJPcmRlciIsInNwbGl0TWFwcyIsIl9yZWY0IiwibWFwSW5kZXgiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsInByaW1hcnlNYXAiLCJsYXllcnNGb3JEZWNrIiwiZWRpdG9ySW5mbyIsImRhdGFMYXllcnMiLCJoYXNTaGFkb3dFZmZlY3QiLCJlZmZlY3QiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJjdXJyZW50TGF5ZXJzRm9yRGVjayIsInNsaWNlIiwicmV2ZXJzZSIsIm92ZXJsYXlzIiwibGF5ZXJJZCIsImZpbmRJbmRleCIsIl9yZWY1IiwiYmluZGVkTGF5ZXJDYWxsYmFja3MiLCJsYXllck92ZXJsYXkiLCJ2aXNpYmxlTGF5ZXJHcm91cHMiLCJUaHJlZURCdWlsZGluZ0xheWVyIiwidGhyZWVEQnVpbGRpbmdDb2xvciIsInVwZGF0ZVRyaWdnZXJzIiwiZ2V0RmlsbENvbG9yIiwiX2dldEN1c3RvbURlY2tMYXllcnMiLCJfZ2V0Q3VzdG9tRGVja0xheWVyczIiLCJfc2xpY2VkVG9BcnJheTIiLCJjdXN0b21Cb3R0b21EZWNrTGF5ZXJzIiwiY3VzdG9tVG9wRGVja0xheWVycyIsImVkaXRvckxheWVyIiwiZ2V0RWRpdG9yTGF5ZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJfcmVmNiIsInJlb3JkZXJMYXllck9yZGVyIiwib3JpZ2luTGF5ZXJJZCIsImRlc3RpbmF0aW9uTGF5ZXJJZCIsImFjdGl2ZUluZGV4IiwiaW5kZXhPZiIsIm92ZXJJbmRleCIsImFycmF5TW92ZSIsImFkZExheWVyVG9MYXllck9yZGVyIiwiZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZSIsImZpZWxkSW5kZXgiLCJEYXRhUm93IiwidmFsdWVBdCIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiaW50ZXJuYWxTdGF0ZSIsImlzTG9hZGVkIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xheWVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcblxuaW1wb3J0IHtHRU9DT0RFUl9MQVlFUl9JRCwgTElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbnR5cGUgRGVja0xheWVyUHJvcHMgPSBhbnk7XG5pbXBvcnQge1xuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRvb2x0aXBGaWVsZCxcbiAgQ29tcGFyZVR5cGUsXG4gIFNwbGl0TWFwTGF5ZXJzLFxuICBFZGl0b3IsXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBCaW5kZWRMYXllckNhbGxiYWNrcyxcbiAgTGF5ZXJDYWxsYmFja3MsXG4gIFZpZXdwb3J0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUsXG4gIEZpbmREZWZhdWx0TGF5ZXJQcm9wcyxcbiAgTGF5ZXIsXG4gIExheWVyQ2xhc3Nlc1R5cGUsXG4gIE9WRVJMQVlfVFlQRV9DT05TVCxcbiAgZ2V0RWRpdG9yTGF5ZXJcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuXG5pbXBvcnQgS2VwbGVyVGFibGUgZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtpc0Z1bmN0aW9uLCBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzLCBEYXRhUm93fSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7YXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtcbiAgcG9pbnRzOiBhbnlbXTtcbiAgY29sb3JWYWx1ZT86IGFueTtcbiAgZWxldmF0aW9uVmFsdWU/OiBhbnk7XG4gIGFnZ3JlZ2F0ZWREYXRhPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBtZWFzdXJlOiBzdHJpbmc7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9XG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBudWxsO1xuICBmaWVsZHM6IEZpZWxkW107XG4gIGZpZWxkc1RvU2hvdzogVG9vbHRpcEZpZWxkW107XG4gIGxheWVyOiBMYXllcjtcbiAgcHJpbWFyeURhdGE/OiBEYXRhUm93IHwgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSB8IG51bGw7XG4gIGNvbXBhcmVUeXBlPzogQ29tcGFyZVR5cGU7XG4gIGN1cnJlbnRUaW1lPzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddWydjdXJyZW50VGltZSddO1xufTtcblxuLyoqXG4gKiBGaW5kIGRlZmF1bHQgbGF5ZXJzIGZyb20gZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQ6IEtlcGxlclRhYmxlLCBsYXllckNsYXNzZXM6IExheWVyQ2xhc3Nlc1R5cGUpOiBMYXllcltdIHtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJQcm9wcyA9IChPYmplY3Qua2V5cyhsYXllckNsYXNzZXMpIGFzIEFycmF5PGtleW9mIExheWVyQ2xhc3Nlc1R5cGU+KS5yZWR1Y2UoXG4gICAgKHByZXZpb3VzLCBsYykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0OiBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSA9XG4gICAgICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbGNdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgcHJldmlvdXMpXG4gICAgICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAgICAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG4gICAgICBjb25zdCBmb3VuZExheWVycyA9IHJlc3VsdC5mb3VuZExheWVycyB8fCBwcmV2aW91cztcblxuICAgICAgcmV0dXJuIGZvdW5kTGF5ZXJzLmNvbmNhdChcbiAgICAgICAgcHJvcHMubWFwKHAgPT4gKHtcbiAgICAgICAgICAuLi5wLFxuICAgICAgICAgIHR5cGU6IGxjLFxuICAgICAgICAgIGRhdGFJZDogZGF0YXNldC5pZCxcbiAgICAgICAgICAvLyBzZXQgYXJjIGxheWVyIGluaXRpYWwgdmlzaWJsaXR5IHRvIGZhbHNlLCBiZWNhdXNlIGFyY3MgdGVuZCB0byBiZSB0b28gbXVzeVxuICAgICAgICAgIC4uLihsYyA9PT0gJ2FyYycgfHwgbGMgPT09ICdsaW5lJyA/IHtpc1Zpc2libGU6IGZhbHNlfSA6IHt9KVxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbXSBhcyAoRmluZERlZmF1bHRMYXllclByb3BzICYge3R5cGU6IHN0cmluZ30pW11cbiAgKTtcblxuICAvLyBnbyB0aHJvdWdoIGFsbCBsYXllclByb3BzIHRvIGNyZWF0ZSBsYXllclxuICByZXR1cm4gbGF5ZXJQcm9wcy5tYXAocHJvcHMgPT4ge1xuICAgIGNvbnN0IGxheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1twcm9wcy50eXBlXShwcm9wcyk7XG4gICAgcmV0dXJuIHR5cGVvZiBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbicgJiYgZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgICA/IGxheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgICAgOiBsYXllcjtcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbGllcyBgcGF0Y2hgIHRvIGBjb25maWcudmlzQ29uZmlnYCBvbmx5IGZvciBsYXllcnMgd2hvc2UgYGRhdGFJZGAgaXMgaW4gYGRhdGFzZXRJZHNUb1BhdGNoYC5cbiAqIExheWVycyBmb3IgZGF0YXNldHMgdGhhdCB3ZXJlIGFscmVhZHkgb24gdGhlIG1hcCBhcmUgbGVmdCB1bmNoYW5nZWQg4oCUIGBhZGREYXRhVG9NYXBgXG4gKiBLZXlzIHdob3NlIHBhdGNoIHZhbHVlIGlzIGB1bmRlZmluZWRgIGFyZSBza2lwcGVkIHNvIGV4aXN0aW5nIHZpc0NvbmZpZyBpcyBub3QgY2xlYXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXRjaDogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQsXG4gIGRhdGFzZXRJZHNUb1BhdGNoOiBzdHJpbmdbXVxuKTogVmlzU3RhdGUge1xuICBpZiAoIXBhdGNoIHx8ICFPYmplY3Qua2V5cyhwYXRjaCkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaGFzRGVmaW5lZFBhdGNoVmFsdWUgPSAoT2JqZWN0LmtleXMocGF0Y2gpIGFzIEFycmF5PGtleW9mIExheWVyVmlzQ29uZmlnPikuc29tZShcbiAgICBrZXkgPT4gcGF0Y2hba2V5XSAhPT0gdW5kZWZpbmVkXG4gICk7XG4gIGlmICghaGFzRGVmaW5lZFBhdGNoVmFsdWUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0SWRTZXQgPSBuZXcgU2V0KGRhdGFzZXRJZHNUb1BhdGNoKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQgfHwgIWRhdGFzZXRJZFNldC5oYXMobGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBsYXllci52aXNDb25maWdTZXR0aW5ncztcbiAgICAgIGlmICghc2V0dGluZ3MpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyO1xuICAgICAgfVxuICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSAoT2JqZWN0LmtleXMocGF0Y2gpIGFzIEFycmF5PGtleW9mIExheWVyVmlzQ29uZmlnPikuZmlsdGVyKFxuICAgICAgICBrZXkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNldHRpbmdzLCBrZXkpICYmIHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIGlmICghYWxsb3dlZEtleXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnRpYWwgPSBhbGxvd2VkS2V5cy5yZWR1Y2U8UGFydGlhbDxMYXllclZpc0NvbmZpZz4+KChhY2MsIGtleSkgPT4ge1xuICAgICAgICBhY2Nba2V5XSA9IHBhdGNoW2tleV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgICByZXR1cm4gbGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcocGFydGlhbCk7XG4gICAgfSlcbiAgfTtcbn1cblxudHlwZSBNaW5WaXNTdGF0ZUZvckxheWVyRGF0YSA9IHtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xuICBhbmltYXRpb25Db25maWc6IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIGxheWVyIGRhdGEgYmFzZWQgb24gbGF5ZXIgdHlwZSwgY29sIENvbmZpZyxcbiAqIHJldHVybiB1cGRhdGVkIGxheWVyIGlmIGNvbG9yRG9tYWluLCBkYXRhTWFwIGhhcyBjaGFuZ2VkLlxuICogQWxzbywgcmV0dXJucyB1cGRhdGVkIGxheWVyIGluIGNhc2UgdGhlIGlucHV0IGxheWVyIHdhcyBpbiBpbnZhbGlkIHN0YXRlLlxuICogQWRkcyBhbiBlcnJvciBtZXNzYWdlIHRvIHRoZSBsYXllciBpbiBjYXNlIG9mIGFuIGV4Y2VwdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUxheWVyRGF0YTxTIGV4dGVuZHMgTWluVmlzU3RhdGVGb3JMYXllckRhdGE+KFxuICBsYXllcjogTGF5ZXIsXG4gIHN0YXRlOiBTLFxuICBvbGRMYXllckRhdGE/OiBhbnlcbik6IHtcbiAgbGF5ZXJEYXRhOiBhbnk7XG4gIGxheWVyOiBMYXllcjtcbn0ge1xuICBsZXQgbGF5ZXJEYXRhO1xuICB0cnkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgdXBkYXRlcyBkYXRhIGFmdGVyIGFuIGVycm9yXG4gICAgaWYgKCFsYXllci5pc1ZhbGlkKSB7XG4gICAgICBsYXllci5fb2xkRGF0YVVwZGF0ZVRyaWdnZXJzID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghbGF5ZXIudHlwZSB8fCAhbGF5ZXIuaGFzQWxsQ29sdW1ucygpIHx8ICFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgICByZXR1cm4ge2xheWVyLCBsYXllckRhdGE6IHt9fTtcbiAgICB9XG5cbiAgICBsYXllckRhdGEgPSBsYXllci5mb3JtYXRMYXllckRhdGEoc3RhdGUuZGF0YXNldHMsIG9sZExheWVyRGF0YSk7XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBkYXRhIGZvciB0aGUgbGF5ZXIgaXMgdXBkYXRlZCB3aXRob3V0IGVycm9yc1xuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgLy8gU3dpdGNoIHRvIHZpc2libGUgYWZ0ZXIgYW4gZXJyb3JcbiAgICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsYXllci5pc1ZhbGlkID0gdHJ1ZTtcbiAgICBsYXllci5lcnJvck1lc3NhZ2UgPSBudWxsO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBDb25zb2xlLmVycm9yKGVycik7XG4gICAgbGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgfSk7XG4gICAgbGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuXG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID1cbiAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDEwMCkgOiAnVW5rbm93biBlcnJvcic7XG5cbiAgICBsYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJEYXRhXG4gIH07XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHByb3BzIHBhc3NlZCB0byBMYXllckhvdmVySW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3Aoe1xuICBhbmltYXRpb25Db25maWcsXG4gIGludGVyYWN0aW9uQ29uZmlnLFxuICBob3ZlckluZm8sXG4gIGxheWVycyxcbiAgbGF5ZXJzVG9SZW5kZXIsXG4gIGRhdGFzZXRzXG59OiB7XG4gIGludGVyYWN0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnaW50ZXJhY3Rpb25Db25maWcnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG4gIGhvdmVySW5mbzogVmlzU3RhdGVbJ2hvdmVySW5mbyddO1xuICBsYXllcnM6IFZpc1N0YXRlWydsYXllcnMnXTtcbiAgbGF5ZXJzVG9SZW5kZXI6IExheWVyc1RvUmVuZGVyO1xuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ107XG59KTogTGF5ZXJIb3ZlclByb3AgfCBudWxsIHtcbiAgaWYgKGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuZW5hYmxlZCAmJiBob3ZlckluZm8gJiYgaG92ZXJJbmZvLnBpY2tlZCkge1xuICAgIC8vIGlmIGFueXRoaW5nIGhvdmVyZWRcbiAgICBjb25zdCB7b2JqZWN0LCBsYXllcjogb3ZlcmxheX0gPSBob3ZlckluZm87XG5cbiAgICAvLyBkZWNrZ2wgbGF5ZXIgdG8ga2VwbGVyLWdsIGxheWVyXG4gICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbb3ZlcmxheS5wcm9wcy5pZHhdO1xuXG4gICAgLy8gTk9URTogZm9yIGJpbmFyeSBmb3JtYXQgR2VvanNvbkxheWVyLCBkZWNrIHdpbGwgcmV0dXJuIG9iamVjdD1udWxsIGJ1dCBob3ZlckluZm8uaW5kZXggPj0gMFxuICAgIGlmIChcbiAgICAgIChvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4ID49IDApICYmXG4gICAgICBsYXllciAmJlxuICAgICAgbGF5ZXIuZ2V0SG92ZXJEYXRhICYmXG4gICAgICBsYXllcnNUb1JlbmRlcltsYXllci5pZF1cbiAgICApIHtcbiAgICAgIC8vIGlmIGxheWVyIGlzIHZpc2libGUgYW5kIGhhdmUgaG92ZXJlZCBkYXRhXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbmZpZzoge2RhdGFJZH1cbiAgICAgIH0gPSBsYXllcjtcbiAgICAgIGlmICghZGF0YUlkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpZWxkc30gPSBkYXRhc2V0c1tkYXRhSWRdO1xuICAgICAgY29uc3QgZGF0YTogRGF0YVJvdyB8IG51bGwgPSBsYXllci5nZXRIb3ZlckRhdGEoXG4gICAgICAgIG9iamVjdCB8fCBob3ZlckluZm8uaW5kZXgsXG4gICAgICAgIGRhdGFDb250YWluZXIsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBob3ZlckluZm9cbiAgICAgICk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBmaWVsZHNUb1Nob3cgPSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZmllbGRzLFxuICAgICAgICBmaWVsZHNUb1Nob3csXG4gICAgICAgIGxheWVyLFxuICAgICAgICBjdXJyZW50VGltZTogYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRGVja0dsTGF5ZXIocHJvcHM6IGFueSwgbGF5ZXJDYWxsYmFja3M6IHtba2V5OiBzdHJpbmddOiBhbnl9KSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBsYXllcixcbiAgICBsYXllckluZGV4LFxuICAgIGRhdGEsXG4gICAgaG92ZXJJbmZvLFxuICAgIGNsaWNrZWQsXG4gICAgbWFwU3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgIG1hcExheWVycyxcbiAgICBleHBlcmltZW50YWxDb250ZXh0XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBjb25zdCB7Z3B1RmlsdGVyfSA9IGRhdGFzZXQgfHwge307XG4gIGNvbnN0IG9iamVjdEhvdmVyZWQgPSBjbGlja2VkIHx8IGhvdmVySW5mbztcbiAgY29uc3QgdmlzaWJsZSA9ICFtYXBMYXllcnMgfHwgKG1hcExheWVycyAmJiBtYXBMYXllcnNbbGF5ZXIuaWRdKTtcbiAgLy8gTGF5ZXIgaXMgTGF5ZXIgY2xhc3NcbiAgcmV0dXJuIGxheWVyLnJlbmRlckxheWVyKHtcbiAgICBkYXRhLFxuICAgIGdwdUZpbHRlcixcbiAgICBpZHg6IGxheWVySW5kZXgsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgbGF5ZXJDYWxsYmFja3MsXG4gICAgbWFwU3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgIG9iamVjdEhvdmVyZWQsXG4gICAgdmlzaWJsZSxcbiAgICBkYXRhc2V0LFxuICAgIGV4cGVyaW1lbnRhbENvbnRleHRcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUmVuZGVyYWJsZShsYXllcjogTGF5ZXIsIGxheWVyRGF0YSkge1xuICByZXR1cm4gbGF5ZXIuaWQgIT09IEdFT0NPREVSX0xBWUVSX0lEICYmIGxheWVyLnNob3VsZFJlbmRlckxheWVyKGxheWVyRGF0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyVmlzaWJsZShsYXllciwgbWFwTGF5ZXJzKSB7XG4gIHJldHVybiAoXG4gICAgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZSAmJlxuICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGRvbid0IHJlbmRlciBpdFxuICAgICghbWFwTGF5ZXJzIHx8IChtYXBMYXllcnMgJiYgbWFwTGF5ZXJzW2xheWVyLmlkXSkpXG4gICk7XG59XG5cbi8vIFByZXBhcmUgYSBkaWN0IG9mIGxheWVycyByZW5kZXJlZCBieSB0aGUgZGVjay5nbFxuLy8gTm90ZSwgaXNWaXNpYmxlOiBmYWxzZSBsYXllciBpcyBwYXNzZWQgdG8gZGVjay5nbCBoZXJlXG4vLyByZXR1cm4ge1tpZF06IHRydWUgXFwgZmFsc2V9XG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUxheWVyc0ZvckRlY2soXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBWaXNTdGF0ZVsnbGF5ZXJEYXRhJ11cbik6IHtcbiAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbn0ge1xuICByZXR1cm4gbGF5ZXJzLnJlZHVjZShcbiAgICAoYWNjdSwgbGF5ZXIsIGlkeCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbbGF5ZXIuaWRdOlxuICAgICAgICBpc0xheWVyUmVuZGVyYWJsZShsYXllciwgbGF5ZXJEYXRhW2lkeF0pICYmIGxheWVyLm92ZXJsYXlUeXBlID09PSBPVkVSTEFZX1RZUEVfQ09OU1QuZGVja2dsXG4gICAgfSksXG4gICAge31cbiAgKTtcbn1cblxuLy8gUHJlcGFyZSBhIGRpY3Qgb2YgcmVuZGVyZWQgbGF5ZXJzIHJlbmRlcmVkIGluIHRoZSBtYXBcbi8vIFRoaXMgaW5jbHVkZXMgb25seSB0aGUgdmlzaWJpbGUgbGF5ZXJzIGZvciBzaW5nbGUgbWFwIHZpZXcgYW5kIHNwbGl0IG1hcCB2aWV3XG4vLyByZXR1cm4ge1tpZF06IHRydWUgXFwgZmFsc2V9XG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUxheWVyc1RvUmVuZGVyKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddLFxuICBtYXBMYXllcnM/OiBTcGxpdE1hcExheWVycyB8IHVuZGVmaW5lZCB8IG51bGxcbik6IExheWVyc1RvUmVuZGVyIHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTogaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBpc0xheWVyVmlzaWJsZShsYXllciwgbWFwTGF5ZXJzKVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbnR5cGUgQ3VzdG9tRGVja0xheWVyID0gRGVja0xheWVyPERlY2tMYXllclByb3BzPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1c3RvbURlY2tMYXllcnMoZGVja0dsUHJvcHM/OiBhbnkpOiBbQ3VzdG9tRGVja0xheWVyW10sIEN1c3RvbURlY2tMYXllcltdXSB7XG4gIGNvbnN0IGJvdHRvbURlY2tMYXllcnMgPSBBcnJheS5pc0FycmF5KGRlY2tHbFByb3BzPy5sYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8ubGF5ZXJzXG4gICAgOiBpc0Z1bmN0aW9uKGRlY2tHbFByb3BzPy5sYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8ubGF5ZXJzKClcbiAgICA6IFtdO1xuICBjb25zdCB0b3BEZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LnRvcExheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LnRvcExheWVycygpXG4gICAgOiBbXTtcblxuICByZXR1cm4gW2JvdHRvbURlY2tMYXllcnMsIHRvcERlY2tMYXllcnNdO1xufVxuXG5leHBvcnQgdHlwZSBDb21wdXRlRGVja0xheWVyc1Byb3BzID0ge1xuICBtYXBJbmRleD86IG51bWJlcjtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybD86IHN0cmluZztcbiAgcHJpbWFyeU1hcD86IGJvb2xlYW47XG4gIGxheWVyc0ZvckRlY2s/OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn07XG4gIGVkaXRvckluZm8/OiB7XG4gICAgZWRpdG9yOiBFZGl0b3I7XG4gICAgZWRpdG9yTWVudUFjdGl2ZTogYm9vbGVhbjtcbiAgICBvblNldEZlYXR1cmVzOiAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gYW55O1xuICAgIHNldFNlbGVjdGVkRmVhdHVyZTogKFxuICAgICAgZmVhdHVyZTogRmVhdHVyZSB8IG51bGwsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0PzogRmVhdHVyZVNlbGVjdGlvbkNvbnRleHRcbiAgICApID0+IGFueTtcbiAgICBvbkFwcGx5UG9seWdvbkZpbHRlckFsbD86IChmZWF0dXJlOiBGZWF0dXJlKSA9PiBhbnk7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb246IHtcbiAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW107XG4gICAgfTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleGVzOiBudW1iZXJbXTtcbiAgICB2aWV3cG9ydDogVmlld3BvcnQ7XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZExheWVyQ2FsbGJhY2tzKFxuICBsYXllckNhbGxiYWNrczogTGF5ZXJDYWxsYmFja3MgPSB7fSxcbiAgaWR4OiBudW1iZXJcbik6IEJpbmRlZExheWVyQ2FsbGJhY2tzIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyQ2FsbGJhY2tzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBba2V5XTogdmFsID0+IGxheWVyQ2FsbGJhY2tzW2tleV0oaWR4LCB2YWwpXG4gICAgfSksXG4gICAge30gYXMgUmVjb3JkPHN0cmluZywgKHZhbDogdW5rbm93bikgPT4gdm9pZD5cbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGVja0xheWVycyhcbiAge3Zpc1N0YXRlLCBtYXBTdGF0ZSwgbWFwU3R5bGV9OiBhbnksXG4gIG9wdGlvbnM/OiBDb21wdXRlRGVja0xheWVyc1Byb3BzLFxuICBsYXllckNhbGxiYWNrcz86IExheWVyQ2FsbGJhY2tzLFxuICBkZWNrR2xQcm9wcz86IGFueVxuKTogTGF5ZXJbXSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBlZmZlY3RzLFxuICAgIGxheWVycyxcbiAgICBsYXllck9yZGVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgc3BsaXRNYXBzXG4gIH0gPSB2aXNTdGF0ZTtcblxuICBjb25zdCB7bWFwSW5kZXgsIG1hcGJveEFwaUFjY2Vzc1Rva2VuLCBtYXBib3hBcGlVcmwsIHByaW1hcnlNYXAsIGxheWVyc0ZvckRlY2ssIGVkaXRvckluZm99ID1cbiAgICBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBkYXRhTGF5ZXJzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0IGhhc1NoYWRvd0VmZmVjdCA9IGVmZmVjdHMuc29tZShlZmZlY3QgPT4ge1xuICAgIHJldHVybiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZTtcbiAgfSk7XG5cbiAgaWYgKGxheWVyRGF0YSAmJiBsYXllckRhdGEubGVuZ3RoKSB7XG4gICAgY29uc3QgbWFwTGF5ZXJzID0gZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyhzcGxpdE1hcHMsIG1hcEluZGV4IHx8IDApO1xuXG4gICAgY29uc3QgY3VycmVudExheWVyc0ZvckRlY2sgPSBsYXllcnNGb3JEZWNrIHx8IHByZXBhcmVMYXllcnNGb3JEZWNrKGxheWVycywgbGF5ZXJEYXRhKTtcblxuICAgIGRhdGFMYXllcnMgPSBsYXllck9yZGVyXG4gICAgICAuc2xpY2UoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbHRlcihpZCA9PiBjdXJyZW50TGF5ZXJzRm9yRGVja1tpZF0pXG4gICAgICAucmVkdWNlKChvdmVybGF5cywgbGF5ZXJJZCkgPT4ge1xuICAgICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgICBjb25zdCBiaW5kZWRMYXllckNhbGxiYWNrcyA9IGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgPyBiaW5kTGF5ZXJDYWxsYmFja3MobGF5ZXJDYWxsYmFja3MsIGxheWVySW5kZXgpXG4gICAgICAgICAgOiB7fTtcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbbGF5ZXJJbmRleF07XG4gICAgICAgIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG4gICAgICAgIGNvbnN0IGxheWVyT3ZlcmxheSA9IHJlbmRlckRlY2tHbExheWVyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICBsYXllckluZGV4LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgICAgZXhwZXJpbWVudGFsQ29udGV4dDoge1xuICAgICAgICAgICAgICBoYXNTaGFkb3dFZmZlY3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJpbmRlZExheWVyQ2FsbGJhY2tzXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQobGF5ZXJPdmVybGF5IHx8IFtdKTtcbiAgICAgIH0sIFtdKTtcbiAgfVxuXG4gIGlmICghcHJpbWFyeU1hcCkge1xuICAgIHJldHVybiBkYXRhTGF5ZXJzO1xuICB9XG5cbiAgaWYgKFxuICAgIG1hcFN0eWxlPy52aXNpYmxlTGF5ZXJHcm91cHNbJzNkIGJ1aWxkaW5nJ10gJiZcbiAgICBwcmltYXJ5TWFwICYmXG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW4gJiZcbiAgICBtYXBib3hBcGlVcmxcbiAgKSB7XG4gICAgZGF0YUxheWVycy5wdXNoKFxuICAgICAgbmV3IFRocmVlREJ1aWxkaW5nTGF5ZXIoe1xuICAgICAgICBpZDogJ19rZXBsZXJnbF8zZC1idWlsZGluZycsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIHRocmVlREJ1aWxkaW5nQ29sb3I6IG1hcFN0eWxlLnRocmVlREJ1aWxkaW5nQ29sb3IsXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgZ2V0RmlsbENvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IFtjdXN0b21Cb3R0b21EZWNrTGF5ZXJzLCBjdXN0b21Ub3BEZWNrTGF5ZXJzXSA9IGdldEN1c3RvbURlY2tMYXllcnMoZGVja0dsUHJvcHMpO1xuXG4gIGNvbnN0IGVkaXRvckxheWVyOiBhbnlbXSA9IFtdO1xuICBpZiAoZWRpdG9ySW5mbykge1xuICAgIGVkaXRvckxheWVyLnB1c2goXG4gICAgICBnZXRFZGl0b3JMYXllcih7XG4gICAgICAgIC4uLmVkaXRvckluZm9cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbLi4uY3VzdG9tQm90dG9tRGVja0xheWVycywgLi4uZGF0YUxheWVycywgLi4uY3VzdG9tVG9wRGVja0xheWVycywgLi4uZWRpdG9yTGF5ZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnM8VCBleHRlbmRzIHtpZDogc3RyaW5nfT4obGF5ZXJzOiBUW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBsYXllcnMubWFwKCh7aWR9KSA9PiBpZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW9yZGVyTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogVmlzU3RhdGVbJ2xheWVyT3JkZXInXSxcbiAgb3JpZ2luTGF5ZXJJZDogc3RyaW5nLFxuICBkZXN0aW5hdGlvbkxheWVySWQ6IHN0cmluZ1xuKTogVmlzU3RhdGVbJ2xheWVyT3JkZXInXSB7XG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gbGF5ZXJPcmRlci5pbmRleE9mKG9yaWdpbkxheWVySWQpO1xuICBjb25zdCBvdmVySW5kZXggPSBsYXllck9yZGVyLmluZGV4T2YoZGVzdGluYXRpb25MYXllcklkKTtcblxuICByZXR1cm4gYXJyYXlNb3ZlKGxheWVyT3JkZXIsIGFjdGl2ZUluZGV4LCBvdmVySW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTGF5ZXJUb0xheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogc3RyaW5nW10ge1xuICByZXR1cm4gW2xheWVySWQsIC4uLmxheWVyT3JkZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZShcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBmaWVsZEluZGV4OiBudW1iZXJcbikge1xuICBpZiAoIWRhdGEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgRGF0YVJvdykgcmV0dXJuIGRhdGEudmFsdWVBdChmaWVsZEluZGV4KTtcbiAgcmV0dXJuIGRhdGFbZmllbGRJbmRleF07XG59XG5cbi8qKiBDaGVja3MgaWYgYW55IERlY2sgbGF5ZXJzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFyZUFueURlY2tMYXllcnNMb2FkaW5nKGxheWVyczogRGVja0xheWVyW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVycy5zb21lKFxuICAgIC8vIGxheWVyLmlzTG9hZGVkIGNoYW5nZXMgZnJlcXVlbnRseSBpbiBEZWNrIChldmVuIG9uIGhvdmVyKSBzbyB3ZSBjaGVjayBhZGRpdGlvbmFsIHByb3BlcnRpZXNcbiAgICBsYXllciA9PiBsYXllci5pbnRlcm5hbFN0YXRlICYmICFsYXllci5pc0xvYWRlZFxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQWdCQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFXQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxZQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxhQUFBLEdBQUFMLE9BQUE7QUFBNkQsU0FBQU0sUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUFuQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUEsSUFuQzdEO0FBQ0E7QUErREE7QUFDQTtBQUNBO0FBQ08sU0FBU29CLGdCQUFnQkEsQ0FBQ0MsT0FBb0IsRUFBRUMsWUFBOEIsRUFBVztFQUM5RixJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU8sRUFBRTtFQUNYO0VBRUEsSUFBTUUsVUFBVSxHQUFJcEIsTUFBTSxDQUFDQyxJQUFJLENBQUNrQixZQUFZLENBQUMsQ0FBbUNFLE1BQU0sQ0FDcEYsVUFBQ0MsUUFBUSxFQUFFQyxFQUFFLEVBQUs7SUFDaEIsSUFBTUMsTUFBd0MsR0FDNUMsT0FBT0wsWUFBWSxDQUFDSSxFQUFFLENBQUMsQ0FBQ0UscUJBQXFCLEtBQUssVUFBVSxHQUN4RE4sWUFBWSxDQUFDSSxFQUFFLENBQUMsQ0FBQ0UscUJBQXFCLENBQUNQLE9BQU8sRUFBRUksUUFBUSxDQUFDLEdBQ3pEO01BQUNJLEtBQUssRUFBRTtJQUFFLENBQUM7SUFFakIsSUFBTUEsS0FBSyxHQUFHQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBR0EsTUFBTSxDQUFDRSxLQUFLLElBQUksRUFBRTtJQUNqRSxJQUFNRyxXQUFXLEdBQUdMLE1BQU0sQ0FBQ0ssV0FBVyxJQUFJUCxRQUFRO0lBRWxELE9BQU9PLFdBQVcsQ0FBQ0MsTUFBTSxDQUN2QkosS0FBSyxDQUFDSyxHQUFHLENBQUMsVUFBQUMsQ0FBQztNQUFBLE9BQUF2QixhQUFBLENBQUFBLGFBQUEsS0FDTnVCLENBQUM7UUFDSkMsSUFBSSxFQUFFVixFQUFFO1FBQ1JXLE1BQU0sRUFBRWhCLE9BQU8sQ0FBQ2lCO01BQUUsR0FFZFosRUFBRSxLQUFLLEtBQUssSUFBSUEsRUFBRSxLQUFLLE1BQU0sR0FBRztRQUFDYSxTQUFTLEVBQUU7TUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQUEsQ0FDM0QsQ0FDSixDQUFDO0VBQ0gsQ0FBQyxFQUNELEVBQ0YsQ0FBQzs7RUFFRDtFQUNBLE9BQU9oQixVQUFVLENBQUNXLEdBQUcsQ0FBQyxVQUFBTCxLQUFLLEVBQUk7SUFDN0IsSUFBTVcsS0FBSyxHQUFHLElBQUlsQixZQUFZLENBQUNPLEtBQUssQ0FBQ08sSUFBSSxDQUFDLENBQUNQLEtBQUssQ0FBQztJQUNqRCxPQUFPLE9BQU9XLEtBQUssQ0FBQ0MscUJBQXFCLEtBQUssVUFBVSxJQUFJcEIsT0FBTyxDQUFDcUIsYUFBYSxHQUM3RUYsS0FBSyxDQUFDQyxxQkFBcUIsQ0FBQ3BCLE9BQU8sQ0FBQyxHQUNwQ21CLEtBQUs7RUFDWCxDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0csaUNBQWlDQSxDQUMvQ0MsS0FBZSxFQUNmQyxLQUEwQyxFQUMxQ0MsaUJBQTJCLEVBQ2pCO0VBQ1YsSUFBSSxDQUFDRCxLQUFLLElBQUksQ0FBQzFDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDeUMsS0FBSyxDQUFDLENBQUMvQixNQUFNLEVBQUU7SUFDeEMsT0FBTzhCLEtBQUs7RUFDZDtFQUVBLElBQU1HLG9CQUFvQixHQUFJNUMsTUFBTSxDQUFDQyxJQUFJLENBQUN5QyxLQUFLLENBQUMsQ0FBaUNHLElBQUksQ0FDbkYsVUFBQUMsR0FBRztJQUFBLE9BQUlKLEtBQUssQ0FBQ0ksR0FBRyxDQUFDLEtBQUtDLFNBQVM7RUFBQSxDQUNqQyxDQUFDO0VBQ0QsSUFBSSxDQUFDSCxvQkFBb0IsRUFBRTtJQUN6QixPQUFPSCxLQUFLO0VBQ2Q7RUFFQSxJQUFNTyxZQUFZLEdBQUcsSUFBSUMsR0FBRyxDQUFDTixpQkFBaUIsQ0FBQztFQUUvQyxPQUFBbEMsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnQyxLQUFLO0lBQ1JTLE1BQU0sRUFBRVQsS0FBSyxDQUFDUyxNQUFNLENBQUNuQixHQUFHLENBQUMsVUFBQU0sS0FBSyxFQUFJO01BQ2hDLElBQUksQ0FBQ0EsS0FBSyxDQUFDYyxNQUFNLENBQUNqQixNQUFNLElBQUksQ0FBQ2MsWUFBWSxDQUFDSSxHQUFHLENBQUNmLEtBQUssQ0FBQ2MsTUFBTSxDQUFDakIsTUFBTSxDQUFDLEVBQUU7UUFDbEUsT0FBT0csS0FBSztNQUNkO01BQ0EsSUFBTWdCLFFBQVEsR0FBR2hCLEtBQUssQ0FBQ2lCLGlCQUFpQjtNQUN4QyxJQUFJLENBQUNELFFBQVEsRUFBRTtRQUNiLE9BQU9oQixLQUFLO01BQ2Q7TUFDQSxJQUFNa0IsV0FBVyxHQUFJdkQsTUFBTSxDQUFDQyxJQUFJLENBQUN5QyxLQUFLLENBQUMsQ0FBaUN0QyxNQUFNLENBQzVFLFVBQUEwQyxHQUFHO1FBQUEsT0FBSTlDLE1BQU0sQ0FBQ3dELFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNMLFFBQVEsRUFBRVAsR0FBRyxDQUFDLElBQUlKLEtBQUssQ0FBQ0ksR0FBRyxDQUFDLEtBQUtDLFNBQVM7TUFBQSxDQUN4RixDQUFDO01BQ0QsSUFBSSxDQUFDUSxXQUFXLENBQUM1QyxNQUFNLEVBQUU7UUFDdkIsT0FBTzBCLEtBQUs7TUFDZDtNQUNBLElBQU1zQixPQUFPLEdBQUdKLFdBQVcsQ0FBQ2xDLE1BQU0sQ0FBMEIsVUFBQ3VDLEdBQUcsRUFBRWQsR0FBRyxFQUFLO1FBQ3hFYyxHQUFHLENBQUNkLEdBQUcsQ0FBQyxHQUFHSixLQUFLLENBQUNJLEdBQUcsQ0FBQztRQUNyQixPQUFPYyxHQUFHO01BQ1osQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ04sT0FBT3ZCLEtBQUssQ0FBQ3dCLG9CQUFvQixDQUFDRixPQUFPLENBQUM7SUFDNUMsQ0FBQztFQUFDO0FBRU47QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRyxrQkFBa0JBLENBQ2hDekIsS0FBWSxFQUNaSSxLQUFRLEVBQ1JzQixZQUFrQixFQUlsQjtFQUNBLElBQUlDLFNBQVM7RUFDYixJQUFJO0lBQ0Y7SUFDQSxJQUFJLENBQUMzQixLQUFLLENBQUM0QixPQUFPLEVBQUU7TUFDbEI1QixLQUFLLENBQUM2QixzQkFBc0IsR0FBR25CLFNBQVM7SUFDMUM7SUFFQSxJQUFJLENBQUNWLEtBQUssQ0FBQ0osSUFBSSxJQUFJLENBQUNJLEtBQUssQ0FBQzhCLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQzlCLEtBQUssQ0FBQ2MsTUFBTSxDQUFDakIsTUFBTSxFQUFFO01BQ2pFLE9BQU87UUFBQ0csS0FBSyxFQUFMQSxLQUFLO1FBQUUyQixTQUFTLEVBQUUsQ0FBQztNQUFDLENBQUM7SUFDL0I7SUFFQUEsU0FBUyxHQUFHM0IsS0FBSyxDQUFDK0IsZUFBZSxDQUFDM0IsS0FBSyxDQUFDNEIsUUFBUSxFQUFFTixZQUFZLENBQUM7O0lBRS9EO0lBQ0EsSUFBSSxDQUFDMUIsS0FBSyxDQUFDNEIsT0FBTyxFQUFFO01BQ2xCO01BQ0E1QixLQUFLLEdBQUdBLEtBQUssQ0FBQ2lDLGlCQUFpQixDQUFDO1FBQzlCbEMsU0FBUyxFQUFFO01BQ2IsQ0FBQyxDQUFDO0lBQ0o7SUFDQUMsS0FBSyxDQUFDNEIsT0FBTyxHQUFHLElBQUk7SUFDcEI1QixLQUFLLENBQUNrQyxZQUFZLEdBQUcsSUFBSTtFQUMzQixDQUFDLENBQUMsT0FBT0MsR0FBRyxFQUFFO0lBQ1pDLG1CQUFPLENBQUNDLEtBQUssQ0FBQ0YsR0FBRyxDQUFDO0lBQ2xCbkMsS0FBSyxHQUFHQSxLQUFLLENBQUNpQyxpQkFBaUIsQ0FBQztNQUM5QmxDLFNBQVMsRUFBRTtJQUNiLENBQUMsQ0FBQztJQUNGQyxLQUFLLENBQUM0QixPQUFPLEdBQUcsS0FBSztJQUVyQjVCLEtBQUssQ0FBQ2tDLFlBQVksR0FDaEJDLEdBQUcsWUFBWUcsS0FBSyxJQUFJSCxHQUFHLENBQUNJLE9BQU8sR0FBR0osR0FBRyxDQUFDSSxPQUFPLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsZUFBZTtJQUV2RmIsU0FBUyxHQUFHLENBQUMsQ0FBQztFQUNoQjtFQUVBLE9BQU87SUFDTDNCLEtBQUssRUFBTEEsS0FBSztJQUNMMkIsU0FBUyxFQUFUQTtFQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTYyxpQkFBaUJBLENBQUFDLElBQUEsRUFjUDtFQUFBLElBYnhCQyxlQUFlLEdBQUFELElBQUEsQ0FBZkMsZUFBZTtJQUNmQyxpQkFBaUIsR0FBQUYsSUFBQSxDQUFqQkUsaUJBQWlCO0lBQ2pCQyxTQUFTLEdBQUFILElBQUEsQ0FBVEcsU0FBUztJQUNUaEMsTUFBTSxHQUFBNkIsSUFBQSxDQUFON0IsTUFBTTtJQUNOaUMsY0FBYyxHQUFBSixJQUFBLENBQWRJLGNBQWM7SUFDZGQsUUFBUSxHQUFBVSxJQUFBLENBQVJWLFFBQVE7RUFTUixJQUFJWSxpQkFBaUIsQ0FBQ0csT0FBTyxDQUFDQyxPQUFPLElBQUlILFNBQVMsSUFBSUEsU0FBUyxDQUFDSSxNQUFNLEVBQUU7SUFDdEU7SUFDQSxJQUFPQyxNQUFNLEdBQW9CTCxTQUFTLENBQW5DSyxNQUFNO01BQVNDLE9BQU8sR0FBSU4sU0FBUyxDQUEzQjdDLEtBQUs7O0lBRXBCO0lBQ0EsSUFBTUEsS0FBSyxHQUFHYSxNQUFNLENBQUNzQyxPQUFPLENBQUM5RCxLQUFLLENBQUMrRCxHQUFHLENBQUM7O0lBRXZDO0lBQ0EsSUFDRSxDQUFDRixNQUFNLElBQUlMLFNBQVMsQ0FBQ1EsS0FBSyxJQUFJLENBQUMsS0FDL0JyRCxLQUFLLElBQ0xBLEtBQUssQ0FBQ3NELFlBQVksSUFDbEJSLGNBQWMsQ0FBQzlDLEtBQUssQ0FBQ0YsRUFBRSxDQUFDLEVBQ3hCO01BQ0E7TUFDQSxJQUNXRCxNQUFNLEdBQ2JHLEtBQUssQ0FEUGMsTUFBTSxDQUFHakIsTUFBTTtNQUVqQixJQUFJLENBQUNBLE1BQU0sRUFBRTtRQUNYLE9BQU8sSUFBSTtNQUNiO01BQ0EsSUFBQTBELGdCQUFBLEdBQWdDdkIsUUFBUSxDQUFDbkMsTUFBTSxDQUFDO1FBQXpDSyxhQUFhLEdBQUFxRCxnQkFBQSxDQUFickQsYUFBYTtRQUFFc0QsTUFBTSxHQUFBRCxnQkFBQSxDQUFOQyxNQUFNO01BQzVCLElBQU1DLElBQW9CLEdBQUd6RCxLQUFLLENBQUNzRCxZQUFZLENBQzdDSixNQUFNLElBQUlMLFNBQVMsQ0FBQ1EsS0FBSyxFQUN6Qm5ELGFBQWEsRUFDYnNELE1BQU0sRUFDTmIsZUFBZSxFQUNmRSxTQUNGLENBQUM7TUFDRCxJQUFJLENBQUNZLElBQUksRUFBRTtRQUNULE9BQU8sSUFBSTtNQUNiO01BQ0EsSUFBTUMsWUFBWSxHQUFHZCxpQkFBaUIsQ0FBQ0csT0FBTyxDQUFDakMsTUFBTSxDQUFDNEMsWUFBWSxDQUFDN0QsTUFBTSxDQUFDO01BRTFFLE9BQU87UUFDTDRELElBQUksRUFBSkEsSUFBSTtRQUNKRCxNQUFNLEVBQU5BLE1BQU07UUFDTkUsWUFBWSxFQUFaQSxZQUFZO1FBQ1oxRCxLQUFLLEVBQUxBLEtBQUs7UUFDTDJELFdBQVcsRUFBRWhCLGVBQWUsQ0FBQ2dCO01BQy9CLENBQUM7SUFDSDtFQUNGO0VBRUEsT0FBTyxJQUFJO0FBQ2I7QUFFTyxTQUFTQyxpQkFBaUJBLENBQUN2RSxLQUFVLEVBQUV3RSxjQUFvQyxFQUFFO0VBQ2xGLElBQ0U3QixRQUFRLEdBV04zQyxLQUFLLENBWFAyQyxRQUFRO0lBQ1JoQyxLQUFLLEdBVUhYLEtBQUssQ0FWUFcsS0FBSztJQUNMOEQsVUFBVSxHQVNSekUsS0FBSyxDQVRQeUUsVUFBVTtJQUNWTCxJQUFJLEdBUUZwRSxLQUFLLENBUlBvRSxJQUFJO0lBQ0paLFNBQVMsR0FPUHhELEtBQUssQ0FQUHdELFNBQVM7SUFDVGtCLE9BQU8sR0FNTDFFLEtBQUssQ0FOUDBFLE9BQU87SUFDUEMsUUFBUSxHQUtOM0UsS0FBSyxDQUxQMkUsUUFBUTtJQUNScEIsaUJBQWlCLEdBSWZ2RCxLQUFLLENBSlB1RCxpQkFBaUI7SUFDakJELGVBQWUsR0FHYnRELEtBQUssQ0FIUHNELGVBQWU7SUFDZnNCLFNBQVMsR0FFUDVFLEtBQUssQ0FGUDRFLFNBQVM7SUFDVEMsbUJBQW1CLEdBQ2pCN0UsS0FBSyxDQURQNkUsbUJBQW1CO0VBRXJCLElBQU1yRixPQUFPLEdBQUdtRCxRQUFRLENBQUNoQyxLQUFLLENBQUNjLE1BQU0sQ0FBQ2pCLE1BQU0sQ0FBQztFQUM3QyxJQUFBc0UsS0FBQSxHQUFvQnRGLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFBMUJ1RixTQUFTLEdBQUFELEtBQUEsQ0FBVEMsU0FBUztFQUNoQixJQUFNQyxhQUFhLEdBQUdOLE9BQU8sSUFBSWxCLFNBQVM7RUFDMUMsSUFBTXlCLE9BQU8sR0FBRyxDQUFDTCxTQUFTLElBQUtBLFNBQVMsSUFBSUEsU0FBUyxDQUFDakUsS0FBSyxDQUFDRixFQUFFLENBQUU7RUFDaEU7RUFDQSxPQUFPRSxLQUFLLENBQUN1RSxXQUFXLENBQUM7SUFDdkJkLElBQUksRUFBSkEsSUFBSTtJQUNKVyxTQUFTLEVBQVRBLFNBQVM7SUFDVGhCLEdBQUcsRUFBRVUsVUFBVTtJQUNmbEIsaUJBQWlCLEVBQWpCQSxpQkFBaUI7SUFDakJpQixjQUFjLEVBQWRBLGNBQWM7SUFDZEcsUUFBUSxFQUFSQSxRQUFRO0lBQ1JyQixlQUFlLEVBQWZBLGVBQWU7SUFDZjBCLGFBQWEsRUFBYkEsYUFBYTtJQUNiQyxPQUFPLEVBQVBBLE9BQU87SUFDUHpGLE9BQU8sRUFBUEEsT0FBTztJQUNQcUYsbUJBQW1CLEVBQW5CQTtFQUNGLENBQUMsQ0FBQztBQUNKO0FBRU8sU0FBU00saUJBQWlCQSxDQUFDeEUsS0FBWSxFQUFFMkIsU0FBUyxFQUFFO0VBQ3pELE9BQU8zQixLQUFLLENBQUNGLEVBQUUsS0FBSzJFLDRCQUFpQixJQUFJekUsS0FBSyxDQUFDMEUsaUJBQWlCLENBQUMvQyxTQUFTLENBQUM7QUFDN0U7QUFFTyxTQUFTZ0QsY0FBY0EsQ0FBQzNFLEtBQUssRUFBRWlFLFNBQVMsRUFBRTtFQUMvQyxPQUNFakUsS0FBSyxDQUFDYyxNQUFNLENBQUNmLFNBQVM7RUFDdEI7RUFDQyxDQUFDa0UsU0FBUyxJQUFLQSxTQUFTLElBQUlBLFNBQVMsQ0FBQ2pFLEtBQUssQ0FBQ0YsRUFBRSxDQUFFLENBQUM7QUFFdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBUzhFLG9CQUFvQkEsQ0FDbEMvRCxNQUFlLEVBQ2ZjLFNBQWdDLEVBR2hDO0VBQ0EsT0FBT2QsTUFBTSxDQUFDN0IsTUFBTSxDQUNsQixVQUFDNkYsSUFBSSxFQUFFN0UsS0FBSyxFQUFFb0QsR0FBRztJQUFBLE9BQUFoRixhQUFBLENBQUFBLGFBQUEsS0FDWnlHLElBQUksV0FBQXJHLGdCQUFBLGlCQUNOd0IsS0FBSyxDQUFDRixFQUFFLEVBQ1AwRSxpQkFBaUIsQ0FBQ3hFLEtBQUssRUFBRTJCLFNBQVMsQ0FBQ3lCLEdBQUcsQ0FBQyxDQUFDLElBQUlwRCxLQUFLLENBQUM4RSxXQUFXLEtBQUtDLDBCQUFrQixDQUFDQyxNQUFNO0VBQUEsQ0FDN0YsRUFDRixDQUFDLENBQ0gsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLHFCQUFxQkEsQ0FDbkNwRSxNQUFlLEVBQ2ZjLFNBQWdDLEVBQ2hDc0MsU0FBNkMsRUFDN0I7RUFDaEIsT0FBT3BELE1BQU0sQ0FBQzdCLE1BQU0sQ0FDbEIsVUFBQzZGLElBQUksRUFBRTdFLEtBQUssRUFBRW9ELEdBQUc7SUFBQSxPQUFBaEYsYUFBQSxDQUFBQSxhQUFBLEtBQ1p5RyxJQUFJLFdBQUFyRyxnQkFBQSxpQkFDTndCLEtBQUssQ0FBQ0YsRUFBRSxFQUFHMEUsaUJBQWlCLENBQUN4RSxLQUFLLEVBQUUyQixTQUFTLENBQUN5QixHQUFHLENBQUMsQ0FBQyxJQUFJdUIsY0FBYyxDQUFDM0UsS0FBSyxFQUFFaUUsU0FBUyxDQUFDO0VBQUEsQ0FDeEYsRUFDRixDQUFDLENBQ0gsQ0FBQztBQUNIO0FBSU8sU0FBU2lCLG1CQUFtQkEsQ0FBQ0MsV0FBaUIsRUFBMEM7RUFDN0YsSUFBTUMsZ0JBQWdCLEdBQUc5RixLQUFLLENBQUNDLE9BQU8sQ0FBQzRGLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFdEUsTUFBTSxDQUFDLEdBQ3ZEc0UsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUV0RSxNQUFNLEdBQ25CLElBQUF3RSxpQkFBVSxFQUFDRixXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRXRFLE1BQU0sQ0FBQyxHQUMvQnNFLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFdEUsTUFBTSxDQUFDLENBQUMsR0FDckIsRUFBRTtFQUNOLElBQU15RSxhQUFhLEdBQUdoRyxLQUFLLENBQUNDLE9BQU8sQ0FBQzRGLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFSSxTQUFTLENBQUMsR0FDdkRKLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFSSxTQUFTLEdBQ3RCLElBQUFGLGlCQUFVLEVBQUNGLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFSSxTQUFTLENBQUMsR0FDbENKLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFSSxTQUFTLENBQUMsQ0FBQyxHQUN4QixFQUFFO0VBRU4sT0FBTyxDQUFDSCxnQkFBZ0IsRUFBRUUsYUFBYSxDQUFDO0FBQzFDO0FBMEJPLFNBQVNFLGtCQUFrQkEsQ0FBQSxFQUdWO0VBQUEsSUFGdEIzQixjQUE4QixHQUFBeEYsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQXFDLFNBQUEsR0FBQXJDLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFBQSxJQUNuQytFLEdBQVcsR0FBQS9FLFNBQUEsQ0FBQUMsTUFBQSxPQUFBRCxTQUFBLE1BQUFxQyxTQUFBO0VBRVgsT0FBTy9DLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDaUcsY0FBYyxDQUFDLENBQUM3RSxNQUFNLENBQ3ZDLFVBQUM2RixJQUFJLEVBQUVwRSxHQUFHO0lBQUEsT0FBQXJDLGFBQUEsQ0FBQUEsYUFBQSxLQUNMeUcsSUFBSSxXQUFBckcsZ0JBQUEsaUJBQ05pQyxHQUFHLEVBQUcsVUFBQWdGLEdBQUc7TUFBQSxPQUFJNUIsY0FBYyxDQUFDcEQsR0FBRyxDQUFDLENBQUMyQyxHQUFHLEVBQUVxQyxHQUFHLENBQUM7SUFBQTtFQUFBLENBQzNDLEVBQ0YsQ0FBQyxDQUNILENBQUM7QUFDSDs7QUFFQTtBQUNPLFNBQVNDLGlCQUFpQkEsQ0FBQUMsS0FBQSxFQUUvQkMsT0FBZ0MsRUFDaEMvQixjQUErQixFQUMvQnNCLFdBQWlCLEVBQ1I7RUFBQSxJQUpSVSxRQUFRLEdBQUFGLEtBQUEsQ0FBUkUsUUFBUTtJQUFFN0IsUUFBUSxHQUFBMkIsS0FBQSxDQUFSM0IsUUFBUTtJQUFFOEIsUUFBUSxHQUFBSCxLQUFBLENBQVJHLFFBQVE7RUFLN0IsSUFDRTlELFFBQVEsR0FVTjZELFFBQVEsQ0FWVjdELFFBQVE7SUFDUitELE9BQU8sR0FTTEYsUUFBUSxDQVRWRSxPQUFPO0lBQ1BsRixNQUFNLEdBUUpnRixRQUFRLENBUlZoRixNQUFNO0lBQ05tRixVQUFVLEdBT1JILFFBQVEsQ0FQVkcsVUFBVTtJQUNWckUsU0FBUyxHQU1Qa0UsUUFBUSxDQU5WbEUsU0FBUztJQUNUa0IsU0FBUyxHQUtQZ0QsUUFBUSxDQUxWaEQsU0FBUztJQUNUa0IsT0FBTyxHQUlMOEIsUUFBUSxDQUpWOUIsT0FBTztJQUNQbkIsaUJBQWlCLEdBR2ZpRCxRQUFRLENBSFZqRCxpQkFBaUI7SUFDakJELGVBQWUsR0FFYmtELFFBQVEsQ0FGVmxELGVBQWU7SUFDZnNELFNBQVMsR0FDUEosUUFBUSxDQURWSSxTQUFTO0VBR1gsSUFBQUMsS0FBQSxHQUNFTixPQUFPLElBQUksQ0FBQyxDQUFDO0lBRFJPLFFBQVEsR0FBQUQsS0FBQSxDQUFSQyxRQUFRO0lBQUVDLG9CQUFvQixHQUFBRixLQUFBLENBQXBCRSxvQkFBb0I7SUFBRUMsWUFBWSxHQUFBSCxLQUFBLENBQVpHLFlBQVk7SUFBRUMsVUFBVSxHQUFBSixLQUFBLENBQVZJLFVBQVU7SUFBRUMsYUFBYSxHQUFBTCxLQUFBLENBQWJLLGFBQWE7SUFBRUMsVUFBVSxHQUFBTixLQUFBLENBQVZNLFVBQVU7RUFHMUYsSUFBSUMsVUFBaUIsR0FBRyxFQUFFO0VBRTFCLElBQU1DLGVBQWUsR0FBR1gsT0FBTyxDQUFDdkYsSUFBSSxDQUFDLFVBQUFtRyxNQUFNLEVBQUk7SUFDN0MsT0FBT0EsTUFBTSxDQUFDL0csSUFBSSxLQUFLZ0gsa0NBQXVCLENBQUNoSCxJQUFJO0VBQ3JELENBQUMsQ0FBQztFQUVGLElBQUkrQixTQUFTLElBQUlBLFNBQVMsQ0FBQ3JELE1BQU0sRUFBRTtJQUNqQyxJQUFNMkYsU0FBUyxHQUFHLElBQUE0QyxnQ0FBeUIsRUFBQ1osU0FBUyxFQUFFRSxRQUFRLElBQUksQ0FBQyxDQUFDO0lBRXJFLElBQU1XLG9CQUFvQixHQUFHUCxhQUFhLElBQUkzQixvQkFBb0IsQ0FBQy9ELE1BQU0sRUFBRWMsU0FBUyxDQUFDO0lBRXJGOEUsVUFBVSxHQUFHVCxVQUFVLENBQ3BCZSxLQUFLLENBQUMsQ0FBQyxDQUNQQyxPQUFPLENBQUMsQ0FBQyxDQUNUakosTUFBTSxDQUFDLFVBQUErQixFQUFFO01BQUEsT0FBSWdILG9CQUFvQixDQUFDaEgsRUFBRSxDQUFDO0lBQUEsRUFBQyxDQUN0Q2QsTUFBTSxDQUFDLFVBQUNpSSxRQUFRLEVBQUVDLE9BQU8sRUFBSztNQUM3QixJQUFNcEQsVUFBVSxHQUFHakQsTUFBTSxDQUFDc0csU0FBUyxDQUFDLFVBQUFDLEtBQUE7UUFBQSxJQUFFdEgsRUFBRSxHQUFBc0gsS0FBQSxDQUFGdEgsRUFBRTtRQUFBLE9BQU1BLEVBQUUsS0FBS29ILE9BQU87TUFBQSxFQUFDO01BQzdELElBQU1HLG9CQUFvQixHQUFHeEQsY0FBYyxHQUN2QzJCLGtCQUFrQixDQUFDM0IsY0FBYyxFQUFFQyxVQUFVLENBQUMsR0FDOUMsQ0FBQyxDQUFDO01BQ04sSUFBTTlELEtBQUssR0FBR2EsTUFBTSxDQUFDaUQsVUFBVSxDQUFDO01BQ2hDLElBQU1MLElBQUksR0FBRzlCLFNBQVMsQ0FBQ21DLFVBQVUsQ0FBQztNQUNsQyxJQUFNd0QsWUFBWSxHQUFHMUQsaUJBQWlCLENBQ3BDO1FBQ0U1QixRQUFRLEVBQVJBLFFBQVE7UUFDUmhDLEtBQUssRUFBTEEsS0FBSztRQUNMOEQsVUFBVSxFQUFWQSxVQUFVO1FBQ1ZMLElBQUksRUFBSkEsSUFBSTtRQUNKWixTQUFTLEVBQVRBLFNBQVM7UUFDVGtCLE9BQU8sRUFBUEEsT0FBTztRQUNQQyxRQUFRLEVBQVJBLFFBQVE7UUFDUnBCLGlCQUFpQixFQUFqQkEsaUJBQWlCO1FBQ2pCRCxlQUFlLEVBQWZBLGVBQWU7UUFDZnNCLFNBQVMsRUFBVEEsU0FBUztRQUNUQyxtQkFBbUIsRUFBRTtVQUNuQndDLGVBQWUsRUFBZkE7UUFDRjtNQUNGLENBQUMsRUFDRFcsb0JBQ0YsQ0FBQztNQUNELE9BQU9KLFFBQVEsQ0FBQ3hILE1BQU0sQ0FBQzZILFlBQVksSUFBSSxFQUFFLENBQUM7SUFDNUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNWO0VBRUEsSUFBSSxDQUFDaEIsVUFBVSxFQUFFO0lBQ2YsT0FBT0csVUFBVTtFQUNuQjtFQUVBLElBQ0VYLFFBQVEsYUFBUkEsUUFBUSxlQUFSQSxRQUFRLENBQUV5QixrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFDM0NqQixVQUFVLElBQ1ZGLG9CQUFvQixJQUNwQkMsWUFBWSxFQUNaO0lBQ0FJLFVBQVUsQ0FBQ3ZJLElBQUksQ0FDYixJQUFJc0osaUNBQW1CLENBQUM7TUFDdEIxSCxFQUFFLEVBQUUsdUJBQXVCO01BQzNCc0csb0JBQW9CLEVBQXBCQSxvQkFBb0I7TUFDcEJDLFlBQVksRUFBWkEsWUFBWTtNQUNab0IsbUJBQW1CLEVBQUUzQixRQUFRLENBQUMyQixtQkFBbUI7TUFDakRDLGNBQWMsRUFBRTtRQUNkQyxZQUFZLEVBQUU3QixRQUFRLENBQUMyQjtNQUN6QjtJQUNGLENBQUMsQ0FDSCxDQUFDO0VBQ0g7RUFFQSxJQUFBRyxvQkFBQSxHQUFzRDFDLG1CQUFtQixDQUFDQyxXQUFXLENBQUM7SUFBQTBDLHFCQUFBLE9BQUFDLGVBQUEsYUFBQUYsb0JBQUE7SUFBL0VHLHNCQUFzQixHQUFBRixxQkFBQTtJQUFFRyxtQkFBbUIsR0FBQUgscUJBQUE7RUFFbEQsSUFBTUksV0FBa0IsR0FBRyxFQUFFO0VBQzdCLElBQUl6QixVQUFVLEVBQUU7SUFDZHlCLFdBQVcsQ0FBQy9KLElBQUksQ0FDZCxJQUFBZ0ssc0JBQWMsRUFBQTlKLGFBQUEsS0FDVG9JLFVBQVUsQ0FDZCxDQUNILENBQUM7RUFDSDtFQUVBLFVBQUEvRyxNQUFBLEtBQUEwSSxtQkFBQSxhQUFXSixzQkFBc0IsT0FBQUksbUJBQUEsYUFBSzFCLFVBQVUsT0FBQTBCLG1CQUFBLGFBQUtILG1CQUFtQixHQUFLQyxXQUFXO0FBQzFGO0FBRU8sU0FBU0csdUJBQXVCQSxDQUF5QnZILE1BQVcsRUFBWTtFQUNyRixPQUFPQSxNQUFNLENBQUNuQixHQUFHLENBQUMsVUFBQTJJLEtBQUE7SUFBQSxJQUFFdkksRUFBRSxHQUFBdUksS0FBQSxDQUFGdkksRUFBRTtJQUFBLE9BQU1BLEVBQUU7RUFBQSxFQUFDO0FBQ2pDO0FBRU8sU0FBU3dJLGlCQUFpQkEsQ0FDL0J0QyxVQUFrQyxFQUNsQ3VDLGFBQXFCLEVBQ3JCQyxrQkFBMEIsRUFDRjtFQUN4QixJQUFNQyxXQUFXLEdBQUd6QyxVQUFVLENBQUMwQyxPQUFPLENBQUNILGFBQWEsQ0FBQztFQUNyRCxJQUFNSSxTQUFTLEdBQUczQyxVQUFVLENBQUMwQyxPQUFPLENBQUNGLGtCQUFrQixDQUFDO0VBRXhELE9BQU8sSUFBQUksc0JBQVMsRUFBQzVDLFVBQVUsRUFBRXlDLFdBQVcsRUFBRUUsU0FBUyxDQUFDO0FBQ3REO0FBRU8sU0FBU0Usb0JBQW9CQSxDQUNsQzdDLFVBQWtDLEVBQ2xDa0IsT0FBZSxFQUNMO0VBQ1YsUUFBUUEsT0FBTyxFQUFBekgsTUFBQSxLQUFBMEksbUJBQUEsYUFBS25DLFVBQVU7QUFDaEM7QUFFTyxTQUFTOEMsc0JBQXNCQSxDQUNwQ3JGLElBQTRELEVBQzVEc0YsVUFBa0IsRUFDbEI7RUFDQSxJQUFJLENBQUN0RixJQUFJLEVBQUUsT0FBTy9DLFNBQVM7RUFDM0IsSUFBSStDLElBQUksWUFBWXVGLGNBQU8sRUFBRSxPQUFPdkYsSUFBSSxDQUFDd0YsT0FBTyxDQUFDRixVQUFVLENBQUM7RUFDNUQsT0FBT3RGLElBQUksQ0FBQ3NGLFVBQVUsQ0FBQztBQUN6Qjs7QUFFQTtBQUNPLFNBQVNHLHVCQUF1QkEsQ0FBQ3JJLE1BQW1CLEVBQVc7RUFDcEUsT0FBT0EsTUFBTSxDQUFDTCxJQUFJO0VBQ2hCO0VBQ0EsVUFBQVIsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ21KLGFBQWEsSUFBSSxDQUFDbkosS0FBSyxDQUFDb0osUUFBUTtFQUFBLENBQ2pELENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
633
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbnN0YW50cyIsIl9sYXllcnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfZGVja2dsTGF5ZXJzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiZmluZERlZmF1bHRMYXllciIsImRhdGFzZXQiLCJsYXllckNsYXNzZXMiLCJsYXllclByb3BzIiwicmVkdWNlIiwicHJldmlvdXMiLCJsYyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsInByb3BzIiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJtYXAiLCJwIiwidHlwZSIsImRhdGFJZCIsImlkIiwiaXNWaXNpYmxlIiwibGF5ZXIiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJkYXRhQ29udGFpbmVyIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwic3RhdGUiLCJwYXRjaCIsImRhdGFzZXRJZHNUb1BhdGNoIiwiaGFzRGVmaW5lZFBhdGNoVmFsdWUiLCJzb21lIiwia2V5IiwidW5kZWZpbmVkIiwiZGF0YXNldElkU2V0IiwiU2V0IiwibGF5ZXJzIiwiY29uZmlnIiwiaGFzIiwic2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsImFsbG93ZWRLZXlzIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwYXJ0aWFsIiwiYWNjIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJjYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJsYXllckRhdGEiLCJpc1ZhbGlkIiwiX29sZERhdGFVcGRhdGVUcmlnZ2VycyIsImhhc0FsbENvbHVtbnMiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiZXJyb3JNZXNzYWdlIiwiZXJyIiwiQ29uc29sZSIsImVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwic3Vic3RyaW5nIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJfcmVmIiwiYW5pbWF0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Db25maWciLCJob3ZlckluZm8iLCJsYXllcnNUb1JlbmRlciIsInRvb2x0aXAiLCJlbmFibGVkIiwicGlja2VkIiwib2JqZWN0Iiwib3ZlcmxheSIsImlkeCIsImluZGV4IiwiZ2V0SG92ZXJEYXRhIiwiX2RhdGFzZXRzJGRhdGFJZCIsImZpZWxkcyIsImRhdGEiLCJmaWVsZHNUb1Nob3ciLCJjdXJyZW50VGltZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsInZpc2libGUiLCJyZW5kZXJMYXllciIsImlzTGF5ZXJSZW5kZXJhYmxlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJzaG91bGRSZW5kZXJMYXllciIsImlzTGF5ZXJWaXNpYmxlIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJhY2N1Iiwib3ZlcmxheVR5cGUiLCJPVkVSTEFZX1RZUEVfQ09OU1QiLCJkZWNrZ2wiLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJnZXRDdXN0b21EZWNrTGF5ZXJzIiwiZGVja0dsUHJvcHMiLCJib3R0b21EZWNrTGF5ZXJzIiwiaXNGdW5jdGlvbiIsInRvcERlY2tMYXllcnMiLCJ0b3BMYXllcnMiLCJiaW5kTGF5ZXJDYWxsYmFja3MiLCJ2YWwiLCJjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyIiwibGF5ZXJPcmRlciIsImN1cnJlbnRMYXllcnNGb3JEZWNrIiwicmVuZGVyUHJvcHMiLCJoYXNTaGFkb3dFZmZlY3QiLCJyZXZlcnNlIiwib3ZlcmxheXMiLCJlbGVtZW50IiwiaXNQbGFpbk9iamVjdCIsImxheWVyR3JvdXAiLCJsYXllcklkIiwiZmluZEluZGV4IiwiX3JlZjMiLCJiaW5kZWRMYXllckNhbGxiYWNrcyIsImxheWVyT3ZlcmxheSIsImNvbXB1dGVEZWNrTGF5ZXJzIiwiX3JlZjQiLCJvcHRpb25zIiwidmlzU3RhdGUiLCJtYXBTdHlsZSIsImVmZmVjdHMiLCJzcGxpdE1hcHMiLCJfcmVmNSIsIm1hcEluZGV4IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJwcmltYXJ5TWFwIiwibGF5ZXJzRm9yRGVjayIsImVkaXRvckluZm8iLCJkYXRhTGF5ZXJzIiwiZWZmZWN0IiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzIiwiX3JlZjYiLCJ2aXNpYmxlTGF5ZXJHcm91cHMiLCJUaHJlZURCdWlsZGluZ0xheWVyIiwidGhyZWVEQnVpbGRpbmdDb2xvciIsInVwZGF0ZVRyaWdnZXJzIiwiZ2V0RmlsbENvbG9yIiwiX2dldEN1c3RvbURlY2tMYXllcnMiLCJfZ2V0Q3VzdG9tRGVja0xheWVyczIiLCJfc2xpY2VkVG9BcnJheTIiLCJjdXN0b21Cb3R0b21EZWNrTGF5ZXJzIiwiY3VzdG9tVG9wRGVja0xheWVycyIsImVkaXRvckxheWVyIiwiZ2V0RWRpdG9yTGF5ZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJfcmVmNyIsImdldE5ld0xheWVyR3JvdXAiLCJfcHJvcHMkaWQiLCJfcHJvcHMkbGFiZWwiLCJfcHJvcHMkaXNWaXNpYmxlIiwiX3Byb3BzJGxheWVyT3JkZXIiLCJfcHJvcHMkaXNJbmNsdWRlZEluTGUiLCJnZW5lcmF0ZUhhc2hJZCIsImxhYmVsIiwiaXNJbmNsdWRlZEluTGVnZW5kIiwiYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyIiwiYXRJbmRleCIsInNwbGljZSIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsImVsZW1lbnRJZCIsIm5ld0xheWVyT3JkZXIiLCJlbnRyeSIsImdyb3VwIiwiZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyIiwibGF5ZXJHcm91cElkIiwiaSIsImdycCIsImZpbmRQYXJlbnRHcm91cEZvckxheWVyIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJuZXN0ZWQiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJsYXllckVudHJ5SWQiLCJpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlciIsImZvdW5kIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJvbGRFbnRyeSIsIm5ld0VudHJ5Iiwib2xkRW50cnlJZCIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJuZXdMYXllckdyb3VwIiwiZ2V0RmxhdExheWVyT3JkZXIiLCJvcmRlckVudHJ5IiwiYnVpbGRMYXllck9yZGVySGllcmFyY2h5IiwidmFsaWRMYXllcnMiLCJCb29sZWFuIiwiZmluZCIsImwiLCJoaWRkZW4iLCJyZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIiLCJyZW9yZGVyTGF5ZXJPcmRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJhY3RpdmVJbmRleCIsIm92ZXJJbmRleCIsImFycmF5TW92ZSIsImFkZExheWVyVG9MYXllck9yZGVyIiwiZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZSIsImZpZWxkSW5kZXgiLCJEYXRhUm93IiwidmFsdWVBdCIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiaW50ZXJuYWxTdGF0ZSIsImlzTG9hZGVkIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xheWVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcblxuaW1wb3J0IHtHRU9DT0RFUl9MQVlFUl9JRCwgTElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbnR5cGUgRGVja0xheWVyUHJvcHMgPSBhbnk7XG5pbXBvcnQge1xuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRvb2x0aXBGaWVsZCxcbiAgQ29tcGFyZVR5cGUsXG4gIFNwbGl0TWFwTGF5ZXJzLFxuICBFZGl0b3IsXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBCaW5kZWRMYXllckNhbGxiYWNrcyxcbiAgTGF5ZXJDYWxsYmFja3MsXG4gIFZpZXdwb3J0LFxuICBMYXllck9yZGVyR3JvdXAsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJFbnRyeSxcbiAgRmxhdExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJIaWVyYXJjaHlcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSxcbiAgRmluZERlZmF1bHRMYXllclByb3BzLFxuICBMYXllcixcbiAgTGF5ZXJDbGFzc2VzVHlwZSxcbiAgT1ZFUkxBWV9UWVBFX0NPTlNULFxuICBnZXRFZGl0b3JMYXllclxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5cbmltcG9ydCBLZXBsZXJUYWJsZSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2lzRnVuY3Rpb24sIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsIERhdGFSb3csIGlzUGxhaW5PYmplY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHthcnJheU1vdmUsIGdlbmVyYXRlSGFzaElkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtcbiAgcG9pbnRzOiBhbnlbXTtcbiAgY29sb3JWYWx1ZT86IGFueTtcbiAgZWxldmF0aW9uVmFsdWU/OiBhbnk7XG4gIGFnZ3JlZ2F0ZWREYXRhPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBtZWFzdXJlOiBzdHJpbmc7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9XG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRzVG9TaG93OiBUb29sdGlwRmllbGRbXTtcbiAgbGF5ZXI6IExheWVyO1xuICBwcmltYXJ5RGF0YT86IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsO1xuICBjb21wYXJlVHlwZT86IENvbXBhcmVUeXBlO1xuICBjdXJyZW50VGltZT86IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXVsnY3VycmVudFRpbWUnXTtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyUHJvcHMgPSAoT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKSBhcyBBcnJheTxrZXlvZiBMYXllckNsYXNzZXNUeXBlPikucmVkdWNlKFxuICAgIChwcmV2aW91cywgbGMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIHByZXZpb3VzKVxuICAgICAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgICAgY29uc3QgZm91bmRMYXllcnMgPSByZXN1bHQuZm91bmRMYXllcnMgfHwgcHJldmlvdXM7XG5cbiAgICAgIHJldHVybiBmb3VuZExheWVycy5jb25jYXQoXG4gICAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICB0eXBlOiBsYyxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgLy8gc2V0IGFyYyBsYXllciBpbml0aWFsIHZpc2libGl0eSB0byBmYWxzZSwgYmVjYXVzZSBhcmNzIHRlbmQgdG8gYmUgdG9vIG11c3lcbiAgICAgICAgICAuLi4obGMgPT09ICdhcmMnIHx8IGxjID09PSAnbGluZScgPyB7aXNWaXNpYmxlOiBmYWxzZX0gOiB7fSlcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW10gYXMgKEZpbmREZWZhdWx0TGF5ZXJQcm9wcyAmIHt0eXBlOiBzdHJpbmd9KVtdXG4gICk7XG5cbiAgLy8gZ28gdGhyb3VnaCBhbGwgbGF5ZXJQcm9wcyB0byBjcmVhdGUgbGF5ZXJcbiAgcmV0dXJuIGxheWVyUHJvcHMubWFwKHByb3BzID0+IHtcbiAgICBjb25zdCBsYXllciA9IG5ldyBsYXllckNsYXNzZXNbcHJvcHMudHlwZV0ocHJvcHMpO1xuICAgIHJldHVybiB0eXBlb2YgbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYHBhdGNoYCB0byBgY29uZmlnLnZpc0NvbmZpZ2Agb25seSBmb3IgbGF5ZXJzIHdob3NlIGBkYXRhSWRgIGlzIGluIGBkYXRhc2V0SWRzVG9QYXRjaGAuXG4gKiBMYXllcnMgZm9yIGRhdGFzZXRzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIHRoZSBtYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIOKAlCBgYWRkRGF0YVRvTWFwYFxuICogS2V5cyB3aG9zZSBwYXRjaCB2YWx1ZSBpcyBgdW5kZWZpbmVkYCBhcmUgc2tpcHBlZCBzbyBleGlzdGluZyB2aXNDb25maWcgaXMgbm90IGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF0Y2g6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0SWRzVG9QYXRjaDogc3RyaW5nW11cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFwYXRjaCB8fCAhT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc0RlZmluZWRQYXRjaFZhbHVlID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLnNvbWUoXG4gICAga2V5ID0+IHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICApO1xuICBpZiAoIWhhc0RlZmluZWRQYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldElkU2V0ID0gbmV3IFNldChkYXRhc2V0SWRzVG9QYXRjaCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkIHx8ICFkYXRhc2V0SWRTZXQuaGFzKGxheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3M7XG4gICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLmZpbHRlcihcbiAgICAgICAga2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXR0aW5ncywga2V5KSAmJiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0aWFsID0gYWxsb3dlZEtleXMucmVkdWNlPFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBwYXRjaFtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHBhcnRpYWwpO1xuICAgIH0pXG4gIH07XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgQ29uc29sZS5lcnJvcihlcnIpO1xuICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIGxheWVyLmlzVmFsaWQgPSBmYWxzZTtcblxuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9XG4gICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCAxMDApIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgbGF5ZXJEYXRhID0ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyLFxuICAgIGxheWVyRGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9wcyBwYXNzZWQgdG8gTGF5ZXJIb3ZlckluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgYW5pbWF0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgaG92ZXJJbmZvLFxuICBsYXllcnMsXG4gIGxheWVyc1RvUmVuZGVyLFxuICBkYXRhc2V0c1xufToge1xuICBpbnRlcmFjdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2ludGVyYWN0aW9uQ29uZmlnJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xuICBob3ZlckluZm86IFZpc1N0YXRlWydob3ZlckluZm8nXTtcbiAgbGF5ZXJzOiBWaXNTdGF0ZVsnbGF5ZXJzJ107XG4gIGxheWVyc1RvUmVuZGVyOiBMYXllcnNUb1JlbmRlcjtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xufSk6IExheWVySG92ZXJQcm9wIHwgbnVsbCB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiYgaG92ZXJJbmZvICYmIGhvdmVySW5mby5waWNrZWQpIHtcbiAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgY29uc3Qge29iamVjdCwgbGF5ZXI6IG92ZXJsYXl9ID0gaG92ZXJJbmZvO1xuXG4gICAgLy8gZGVja2dsIGxheWVyIHRvIGtlcGxlci1nbCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW292ZXJsYXkucHJvcHMuaWR4XTtcblxuICAgIC8vIE5PVEU6IGZvciBiaW5hcnkgZm9ybWF0IEdlb2pzb25MYXllciwgZGVjayB3aWxsIHJldHVybiBvYmplY3Q9bnVsbCBidXQgaG92ZXJJbmZvLmluZGV4ID49IDBcbiAgICBpZiAoXG4gICAgICAob2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCA+PSAwKSAmJlxuICAgICAgbGF5ZXIgJiZcbiAgICAgIGxheWVyLmdldEhvdmVyRGF0YSAmJlxuICAgICAgbGF5ZXJzVG9SZW5kZXJbbGF5ZXIuaWRdXG4gICAgKSB7XG4gICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgY29uc3Qge1xuICAgICAgICBjb25maWc6IHtkYXRhSWR9XG4gICAgICB9ID0gbGF5ZXI7XG4gICAgICBpZiAoIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHN9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICAgIGNvbnN0IGRhdGE6IERhdGFSb3cgfCBudWxsID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKFxuICAgICAgICBvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4LFxuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvXG4gICAgICApO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllcixcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckRlY2tHbExheWVyKHByb3BzOiBhbnksIGxheWVyQ2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogYW55fSkge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJJbmRleCxcbiAgICBkYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3Qge2dwdUZpbHRlcn0gPSBkYXRhc2V0IHx8IHt9O1xuICBjb25zdCBvYmplY3RIb3ZlcmVkID0gY2xpY2tlZCB8fCBob3ZlckluZm87XG4gIGNvbnN0IHZpc2libGUgPSAhbWFwTGF5ZXJzIHx8IChtYXBMYXllcnMgJiYgbWFwTGF5ZXJzW2xheWVyLmlkXSk7XG4gIC8vIExheWVyIGlzIExheWVyIGNsYXNzXG4gIHJldHVybiBsYXllci5yZW5kZXJMYXllcih7XG4gICAgZGF0YSxcbiAgICBncHVGaWx0ZXIsXG4gICAgaWR4OiBsYXllckluZGV4LFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgIG1hcFN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBvYmplY3RIb3ZlcmVkLFxuICAgIHZpc2libGUsXG4gICAgZGF0YXNldCxcbiAgICBleHBlcmltZW50YWxDb250ZXh0XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclJlbmRlcmFibGUobGF5ZXI6IExheWVyLCBsYXllckRhdGEpIHtcbiAgcmV0dXJuIGxheWVyLmlkICE9PSBHRU9DT0RFUl9MQVlFUl9JRCAmJiBsYXllci5zaG91bGRSZW5kZXJMYXllcihsYXllckRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycykge1xuICByZXR1cm4gKFxuICAgIGxheWVyLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBkb24ndCByZW5kZXIgaXRcbiAgICAoIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pKVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiBsYXllcnMgcmVuZGVyZWQgYnkgdGhlIGRlY2suZ2xcbi8vIE5vdGUsIGlzVmlzaWJsZTogZmFsc2UgbGF5ZXIgaXMgcGFzc2VkIHRvIGRlY2suZ2wgaGVyZVxuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNGb3JEZWNrKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddXG4pOiB7XG4gIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG59IHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTpcbiAgICAgICAgaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBsYXllci5vdmVybGF5VHlwZSA9PT0gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8vIFByZXBhcmUgYSBkaWN0IG9mIHJlbmRlcmVkIGxheWVycyByZW5kZXJlZCBpbiB0aGUgbWFwXG4vLyBUaGlzIGluY2x1ZGVzIG9ubHkgdGhlIHZpc2liaWxlIGxheWVycyBmb3Igc2luZ2xlIG1hcCB2aWV3IGFuZCBzcGxpdCBtYXAgdmlld1xuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNUb1JlbmRlcihcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXSxcbiAgbWFwTGF5ZXJzPzogU3BsaXRNYXBMYXllcnMgfCB1bmRlZmluZWQgfCBudWxsXG4pOiBMYXllcnNUb1JlbmRlciB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06IGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycylcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG50eXBlIEN1c3RvbURlY2tMYXllciA9IERlY2tMYXllcjxEZWNrTGF5ZXJQcm9wcz47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzPzogYW55KTogW0N1c3RvbURlY2tMYXllcltdLCBDdXN0b21EZWNrTGF5ZXJbXV0ge1xuICBjb25zdCBib3R0b21EZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVycygpXG4gICAgOiBbXTtcbiAgY29uc3QgdG9wRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnMoKVxuICAgIDogW107XG5cbiAgcmV0dXJuIFtib3R0b21EZWNrTGF5ZXJzLCB0b3BEZWNrTGF5ZXJzXTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcHV0ZURlY2tMYXllcnNQcm9wcyA9IHtcbiAgbWFwSW5kZXg/OiBudW1iZXI7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIHByaW1hcnlNYXA/OiBib29sZWFuO1xuICBsYXllcnNGb3JEZWNrPzoge1trZXk6IHN0cmluZ106IGJvb2xlYW59O1xuICBlZGl0b3JJbmZvPzoge1xuICAgIGVkaXRvcjogRWRpdG9yO1xuICAgIGVkaXRvck1lbnVBY3RpdmU6IGJvb2xlYW47XG4gICAgb25TZXRGZWF0dXJlczogKGZlYXR1cmVzOiBGZWF0dXJlW10pID0+IGFueTtcbiAgICBzZXRTZWxlY3RlZEZlYXR1cmU6IChcbiAgICAgIGZlYXR1cmU6IEZlYXR1cmUgfCBudWxsLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dD86IEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0XG4gICAgKSA9PiBhbnk7XG4gICAgb25BcHBseVBvbHlnb25GaWx0ZXJBbGw/OiAoZmVhdHVyZTogRmVhdHVyZSkgPT4gYW55O1xuICAgIGZlYXR1cmVDb2xsZWN0aW9uOiB7XG4gICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICBmZWF0dXJlczogRmVhdHVyZVtdO1xuICAgIH07XG4gICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhlczogbnVtYmVyW107XG4gICAgdmlld3BvcnQ6IFZpZXdwb3J0O1xuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRMYXllckNhbGxiYWNrcyhcbiAgbGF5ZXJDYWxsYmFja3M6IExheWVyQ2FsbGJhY2tzID0ge30sXG4gIGlkeDogbnVtYmVyXG4pOiBCaW5kZWRMYXllckNhbGxiYWNrcyB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhsYXllckNhbGxiYWNrcykucmVkdWNlKFxuICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2tleV06IHZhbCA9PiBsYXllckNhbGxiYWNrc1trZXldKGlkeCwgdmFsKVxuICAgIH0pLFxuICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsICh2YWw6IHVua25vd24pID0+IHZvaWQ+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEZWNrTGF5ZXJzRnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBhbnlbXSxcbiAgY3VycmVudExheWVyc0ZvckRlY2s6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSxcbiAgcmVuZGVyUHJvcHM6IHtcbiAgICBkYXRhc2V0czogYW55O1xuICAgIGhvdmVySW5mbzogYW55O1xuICAgIGNsaWNrZWQ6IGFueTtcbiAgICBtYXBTdGF0ZTogYW55O1xuICAgIGludGVyYWN0aW9uQ29uZmlnOiBhbnk7XG4gICAgYW5pbWF0aW9uQ29uZmlnOiBhbnk7XG4gICAgbWFwTGF5ZXJzOiBhbnk7XG4gICAgaGFzU2hhZG93RWZmZWN0OiBib29sZWFuO1xuICB9LFxuICBsYXllckNhbGxiYWNrcz86IGFueVxuKTogYW55W10ge1xuICBjb25zdCB7ZGF0YXNldHMsIGhvdmVySW5mbywgY2xpY2tlZCwgbWFwU3RhdGUsIGludGVyYWN0aW9uQ29uZmlnLCBhbmltYXRpb25Db25maWcsIG1hcExheWVycywgaGFzU2hhZG93RWZmZWN0fSA9IHJlbmRlclByb3BzO1xuICByZXR1cm4gbGF5ZXJPcmRlclxuICAgIC5zbGljZSgpXG4gICAgLnJldmVyc2UoKVxuICAgIC5yZWR1Y2UoKG92ZXJsYXlzLCBlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGlmICghbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChcbiAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICByZW5kZXJQcm9wcyxcbiAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJZCA9IGVsZW1lbnQgYXMgc3RyaW5nO1xuICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgPyBiaW5kTGF5ZXJDYWxsYmFja3MobGF5ZXJDYWxsYmFja3MsIGxheWVySW5kZXgpXG4gICAgICAgIDoge307XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAge1xuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmluZGVkTGF5ZXJDYWxsYmFja3NcbiAgICAgICk7XG4gICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgfSwgW10gYXMgYW55W10pO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVEZWNrTGF5ZXJzKFxuICB7dmlzU3RhdGUsIG1hcFN0YXRlLCBtYXBTdHlsZX06IGFueSxcbiAgb3B0aW9ucz86IENvbXB1dGVEZWNrTGF5ZXJzUHJvcHMsXG4gIGxheWVyQ2FsbGJhY2tzPzogTGF5ZXJDYWxsYmFja3MsXG4gIGRlY2tHbFByb3BzPzogYW55XG4pOiBMYXllcltdIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGVmZmVjdHMsXG4gICAgbGF5ZXJzLFxuICAgIGxheWVyT3JkZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBzcGxpdE1hcHNcbiAgfSA9IHZpc1N0YXRlO1xuXG4gIGNvbnN0IHttYXBJbmRleCwgbWFwYm94QXBpQWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybCwgcHJpbWFyeU1hcCwgbGF5ZXJzRm9yRGVjaywgZWRpdG9ySW5mb30gPVxuICAgIG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGRhdGFMYXllcnM6IGFueVtdID0gW107XG5cbiAgY29uc3QgaGFzU2hhZG93RWZmZWN0ID0gZWZmZWN0cy5zb21lKGVmZmVjdCA9PiB7XG4gICAgcmV0dXJuIGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlO1xuICB9KTtcblxuICBpZiAobGF5ZXJEYXRhICYmIGxheWVyRGF0YS5sZW5ndGgpIHtcbiAgICBjb25zdCBtYXBMYXllcnMgPSBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzKHNwbGl0TWFwcywgbWFwSW5kZXggfHwgMCk7XG5cbiAgICBjb25zdCBjdXJyZW50TGF5ZXJzRm9yRGVjayA9IGxheWVyc0ZvckRlY2sgfHwgcHJlcGFyZUxheWVyc0ZvckRlY2sobGF5ZXJzLCBsYXllckRhdGEpO1xuXG4gICAgZGF0YUxheWVycyA9IGxheWVyT3JkZXJcbiAgICAgIC5zbGljZSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBlbGVtZW50IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgICBsYXllckdyb3VwLmxheWVyT3JkZXIsXG4gICAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgICBjdXJyZW50TGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICAgICAge2RhdGFzZXRzLCBob3ZlckluZm8sIGNsaWNrZWQsIG1hcFN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZywgYW5pbWF0aW9uQ29uZmlnLCBtYXBMYXllcnMsIGhhc1NoYWRvd0VmZmVjdH0sXG4gICAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllcklkID0gZWxlbWVudCBhcyBzdHJpbmc7XG4gICAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICA/IGJpbmRMYXllckNhbGxiYWNrcyhsYXllckNhbGxiYWNrcywgbGF5ZXJJbmRleClcbiAgICAgICAgICA6IHt9O1xuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGxheWVyRGF0YVtsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmluZGVkTGF5ZXJDYWxsYmFja3NcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgICAgfSwgW10pO1xuICB9XG5cbiAgaWYgKCFwcmltYXJ5TWFwKSB7XG4gICAgcmV0dXJuIGRhdGFMYXllcnM7XG4gIH1cblxuICBpZiAoXG4gICAgbWFwU3R5bGU/LnZpc2libGVMYXllckdyb3Vwc1snM2QgYnVpbGRpbmcnXSAmJlxuICAgIHByaW1hcnlNYXAgJiZcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiAmJlxuICAgIG1hcGJveEFwaVVybFxuICApIHtcbiAgICBkYXRhTGF5ZXJzLnB1c2goXG4gICAgICBuZXcgVGhyZWVEQnVpbGRpbmdMYXllcih7XG4gICAgICAgIGlkOiAnX2tlcGxlcmdsXzNkLWJ1aWxkaW5nJyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgdGhyZWVEQnVpbGRpbmdDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvcixcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICBnZXRGaWxsQ29sb3I6IG1hcFN0eWxlLnRocmVlREJ1aWxkaW5nQ29sb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY29uc3QgW2N1c3RvbUJvdHRvbURlY2tMYXllcnMsIGN1c3RvbVRvcERlY2tMYXllcnNdID0gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcyk7XG5cbiAgY29uc3QgZWRpdG9yTGF5ZXI6IGFueVtdID0gW107XG4gIGlmIChlZGl0b3JJbmZvKSB7XG4gICAgZWRpdG9yTGF5ZXIucHVzaChcbiAgICAgIGdldEVkaXRvckxheWVyKHtcbiAgICAgICAgLi4uZWRpdG9ySW5mb1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIFsuLi5jdXN0b21Cb3R0b21EZWNrTGF5ZXJzLCAuLi5kYXRhTGF5ZXJzLCAuLi5jdXN0b21Ub3BEZWNrTGF5ZXJzLCAuLi5lZGl0b3JMYXllcl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXllck9yZGVyRnJvbUxheWVyczxUIGV4dGVuZHMge2lkOiBzdHJpbmd9PihsYXllcnM6IFRbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGxheWVycy5tYXAoKHtpZH0pID0+IGlkKTtcbn1cblxuLy8gLS0tIExheWVyIEdyb3VwIFV0aWxpdGllcyAtLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0xheWVyR3JvdXAocHJvcHM/OiBQYXJ0aWFsPExheWVyT3JkZXJHcm91cD4pOiBMYXllck9yZGVyR3JvdXAge1xuICByZXR1cm4ge1xuICAgIGlkOiBwcm9wcz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAgbGFiZWw6IHByb3BzPy5sYWJlbCA/PyAnTmV3IGdyb3VwJyxcbiAgICBpc1Zpc2libGU6IHByb3BzPy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICBsYXllck9yZGVyOiBwcm9wcz8ubGF5ZXJPcmRlciA/PyBbXSxcbiAgICBpc0luY2x1ZGVkSW5MZWdlbmQ6IHByb3BzPy5pc0luY2x1ZGVkSW5MZWdlbmQgPz8gdHJ1ZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBlbGVtZW50OiBMYXllck9yZGVyRW50cnksXG4gIGF0SW5kZXg/OiBudW1iZXJcbik6IExheWVyT3JkZXIge1xuICBjb25zdCBpZHggPSBhdEluZGV4ID8/IDA7XG4gIGNvbnN0IHJlc3VsdCA9IFsuLi5sYXllck9yZGVyXTtcbiAgcmVzdWx0LnNwbGljZShpZHgsIDAsIGVsZW1lbnQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBlbGVtZW50OiBMYXllck9yZGVyRW50cnlcbik6IExheWVyT3JkZXIge1xuICBpZiAoIWxheWVyT3JkZXIpIHJldHVybiBbXTtcbiAgY29uc3QgZWxlbWVudElkID0gdHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZWxlbWVudCA6IGVsZW1lbnQuaWQ7XG4gIGxldCBuZXdMYXllck9yZGVyID0gbGF5ZXJPcmRlci5maWx0ZXIoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgcmV0dXJuIChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkICE9PSBlbGVtZW50SWQ7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeSAhPT0gZWxlbWVudElkO1xuICB9KTtcblxuICBuZXdMYXllck9yZGVyID0gbmV3TGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGdyb3VwLmxheWVyT3JkZXIsIGVsZW1lbnRJZClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld0xheWVyT3JkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGxheWVyR3JvdXBJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBsZXQgZ3JvdXA6IExheWVyT3JkZXJHcm91cCB8IHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllck9yZGVyLmxlbmd0aCAmJiAhZ3JvdXA7IGkrKykge1xuICAgIGNvbnN0IGVudHJ5ID0gbGF5ZXJPcmRlcltpXTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdycCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGdyb3VwID1cbiAgICAgICAgZ3JwLmlkID09PSBsYXllckdyb3VwSWQgPyBncnAgOiBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBwYXJlbnQgZ3JvdXAgdGhhdCBjb250YWlucyBhIGdpdmVuIGxheWVyIElELlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGxheWVyIGlzIGF0IHRoZSByb290IGxldmVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBsYXllck9yZGVyKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncm91cC5sYXllck9yZGVyLnNvbWUoZSA9PiB0eXBlb2YgZSA9PT0gJ3N0cmluZycgJiYgZSA9PT0gbGF5ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgfVxuICAgICAgY29uc3QgbmVzdGVkID0gZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIoZ3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gICAgICBpZiAobmVzdGVkKSByZXR1cm4gbmVzdGVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXI6IExheWVyT3JkZXIsIGxheWVyRW50cnlJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIGxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgaXNQbGFpbk9iamVjdChlbnRyeSkgPyAoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5pZCA9PT0gbGF5ZXJFbnRyeUlkIDogZW50cnkgPT09IGxheWVyRW50cnlJZFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclByZXNlbnRJbkxheWVyT3JkZXIobGF5ZXJPcmRlcjogTGF5ZXJPcmRlciwgbGF5ZXJJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBmb3VuZCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVyT3JkZXIubGVuZ3RoICYmICFmb3VuZDsgaSsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBsYXllck9yZGVyW2ldO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgZm91bmQgPSBpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlcigoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm91bmQgPSBsYXllcklkID09PSBlbnRyeTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIG9sZEVudHJ5OiBMYXllck9yZGVyRW50cnksXG4gIG5ld0VudHJ5OiBMYXllck9yZGVyRW50cnlcbik6IExheWVyT3JkZXIge1xuICBjb25zdCBvbGRFbnRyeUlkID0gdHlwZW9mIG9sZEVudHJ5ID09PSAnc3RyaW5nJyA/IG9sZEVudHJ5IDogb2xkRW50cnkuaWQ7XG4gIHJldHVybiBsYXllck9yZGVyLm1hcChlbnRyeSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBlbnRyeSA9PT0gb2xkRW50cnlJZCA/IG5ld0VudHJ5IDogZW50cnk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5pZCA9PT0gb2xkRW50cnlJZCkge1xuICAgICAgICByZXR1cm4gbmV3RW50cnk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ncnAsXG4gICAgICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKGdycC5sYXllck9yZGVyLCBvbGRFbnRyeSwgbmV3RW50cnkpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbmV3TGF5ZXJHcm91cDogTGF5ZXJPcmRlckdyb3VwXG4pOiBMYXllck9yZGVyIHtcbiAgcmV0dXJuIGxheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdycCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncnAuaWQgPT09IG5ld0xheWVyR3JvdXAuaWQpIHtcbiAgICAgICAgcmV0dXJuIG5ld0xheWVyR3JvdXA7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ncnAsXG4gICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIG5ld0xheWVyR3JvdXApXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJPcmRlcjogTGF5ZXJPcmRlcik6IEZsYXRMYXllck9yZGVyIHtcbiAgcmV0dXJuIGxheWVyT3JkZXIucmVkdWNlKChhY2MsIG9yZGVyRW50cnkpID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChvcmRlckVudHJ5KSkge1xuICAgICAgcmV0dXJuIFsuLi5hY2MsIC4uLmdldEZsYXRMYXllck9yZGVyKChvcmRlckVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkubGF5ZXJPcmRlcildO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLmFjYywgb3JkZXJFbnRyeSBhcyBzdHJpbmddO1xuICB9LCBbXSBhcyBGbGF0TGF5ZXJPcmRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZExheWVyT3JkZXJIaWVyYXJjaHkoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGxheWVycz86IExheWVyW10gfCByZWFkb25seSBMYXllcltdXG4pOiBMYXllck9yZGVySGllcmFyY2h5IHtcbiAgY29uc3QgdmFsaWRMYXllcnMgPSBsYXllcnM/LmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIGxheWVyT3JkZXIucmVkdWNlKChhY2MsIGVsZW1lbnQpID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIFsuLi5hY2MsIFsnbGF5ZXJHcm91cCcsIGVsZW1lbnQgYXMgTGF5ZXJPcmRlckdyb3VwXSBhcyBjb25zdF07XG4gICAgfVxuICAgIGNvbnN0IGxheWVyID0gdmFsaWRMYXllcnM/LmZpbmQobCA9PiBsLmlkID09PSBlbGVtZW50KTtcbiAgICBpZiAoIWxheWVyIHx8IGxheWVyLmNvbmZpZy5oaWRkZW4pIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWNjLCBbJ2xheWVyJywgbGF5ZXJdIGFzIGNvbnN0XTtcbiAgfSwgW10gYXMgTGF5ZXJPcmRlckhpZXJhcmNoeSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGxheWVyczoge2lkOiBzdHJpbmd9W11cbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gZW50cnkpKSB7XG4gICAgICAgIGFjYy5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5sYXllck9yZGVyKSB7XG4gICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICAuLi5ncnAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogcmVtb3ZlR2hvc3RMYXllckZyb21MYXllck9yZGVyKGdycC5sYXllck9yZGVyLCBsYXllcnMpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSBhcyBMYXllck9yZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlb3JkZXJMYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBvcmlnaW5MYXllcklkOiBzdHJpbmcsXG4gIGRlc3RpbmF0aW9uTGF5ZXJJZDogc3RyaW5nXG4pOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddIHtcbiAgY29uc3QgYWN0aXZlSW5kZXggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gIGNvbnN0IG92ZXJJbmRleCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyLCBkZXN0aW5hdGlvbkxheWVySWQpO1xuXG4gIGlmIChhY3RpdmVJbmRleCA9PT0gLTEgfHwgb3ZlckluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBsYXllck9yZGVyO1xuICB9XG4gIHJldHVybiBhcnJheU1vdmUobGF5ZXJPcmRlciwgYWN0aXZlSW5kZXgsIG92ZXJJbmRleCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRMYXllclRvTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogVmlzU3RhdGVbJ2xheWVyT3JkZXInXSxcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyIHtcbiAgcmV0dXJuIFtsYXllcklkLCAuLi5sYXllck9yZGVyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wVmFsdWUoXG4gIGRhdGE6IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBmaWVsZEluZGV4OiBudW1iZXJcbikge1xuICBpZiAoIWRhdGEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgRGF0YVJvdykgcmV0dXJuIGRhdGEudmFsdWVBdChmaWVsZEluZGV4KTtcbiAgcmV0dXJuIGRhdGFbZmllbGRJbmRleF07XG59XG5cbi8qKiBDaGVja3MgaWYgYW55IERlY2sgbGF5ZXJzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFyZUFueURlY2tMYXllcnNMb2FkaW5nKGxheWVyczogRGVja0xheWVyW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVycy5zb21lKFxuICAgIC8vIGxheWVyLmlzTG9hZGVkIGNoYW5nZXMgZnJlcXVlbnRseSBpbiBEZWNrIChldmVuIG9uIGhvdmVyKSBzbyB3ZSBjaGVjayBhZGRpdGlvbmFsIHByb3BlcnRpZXNcbiAgICBsYXllciA9PiBsYXllci5pbnRlcm5hbFN0YXRlICYmICFsYXllci5pc0xvYWRlZFxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQXFCQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFXQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxZQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxhQUFBLEdBQUFMLE9BQUE7QUFBNkQsU0FBQU0sMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxFQUFBLFVBQUFSLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxVQUFBQSxDQUFBLEtBQUFlLENBQUEsRUFBQUwsQ0FBQSxnQkFBQU0sU0FBQSxpSkFBQUMsQ0FBQSxFQUFBQyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFSLENBQUEsV0FBQUEsRUFBQSxJQUFBVCxDQUFBLEdB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TTtNQUNMLElBQU1LLEdBQUcsR0FBR0wsS0FBd0I7TUFDcEMsSUFBSUssR0FBRyxDQUFDcEUsVUFBVSxFQUFFO1FBQ2xCcEUsR0FBRyxDQUFDakQsSUFBSSxDQUFBRSxhQUFBLENBQUFBLGFBQUEsS0FDSHVMLEdBQUc7VUFDTnBFLFVBQVUsRUFBRTJGLDhCQUE4QixDQUFDdkIsR0FBRyxDQUFDcEUsVUFBVSxFQUFFN0UsTUFBTTtRQUFDLEVBQ25FLENBQUM7TUFDSjtJQUNGO0lBQ0EsT0FBT1MsR0FBRztFQUNaLENBQUMsRUFBRSxFQUFnQixDQUFDO0FBQ3RCO0FBRU8sU0FBU2dLLGlCQUFpQkEsQ0FDL0I1RixVQUFrQyxFQUNsQzZGLGFBQXFCLEVBQ3JCQyxrQkFBMEIsRUFDRjtFQUN4QixJQUFNQyxXQUFXLEdBQUd0Qix3QkFBd0IsQ0FBQ3pFLFVBQVUsRUFBRTZGLGFBQWEsQ0FBQztFQUN2RSxJQUFNRyxTQUFTLEdBQUd2Qix3QkFBd0IsQ0FBQ3pFLFVBQVUsRUFBRThGLGtCQUFrQixDQUFDO0VBRTFFLElBQUlDLFdBQVcsS0FBSyxDQUFDLENBQUMsSUFBSUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO0lBQzFDLE9BQU9oRyxVQUFVO0VBQ25CO0VBQ0EsT0FBTyxJQUFBaUcsc0JBQVMsRUFBQ2pHLFVBQVUsRUFBRStGLFdBQVcsRUFBRUMsU0FBUyxDQUFDO0FBQ3REO0FBRU8sU0FBU0Usb0JBQW9CQSxDQUNsQ2xHLFVBQWtDLEVBQ2xDUyxPQUFlLEVBQ0g7RUFDWixRQUFRQSxPQUFPLEVBQUExRyxNQUFBLEtBQUE4SSxtQkFBQSxhQUFLN0MsVUFBVTtBQUNoQztBQUVPLFNBQVNtRyxzQkFBc0JBLENBQ3BDckksSUFBb0UsRUFDcEVzSSxVQUFrQixFQUNsQjtFQUNBLElBQUksQ0FBQ3RJLElBQUksRUFBRSxPQUFPOUMsU0FBUztFQUMzQixJQUFJOEMsSUFBSSxZQUFZdUksY0FBTyxFQUFFLE9BQU92SSxJQUFJLENBQUN3SSxPQUFPLENBQUNGLFVBQVUsQ0FBQztFQUM1RCxPQUFPdEksSUFBSSxDQUFDc0ksVUFBVSxDQUFDO0FBQ3pCOztBQUVBO0FBQ08sU0FBU0csdUJBQXVCQSxDQUFDcEwsTUFBbUIsRUFBVztFQUNwRSxPQUFPQSxNQUFNLENBQUNMLElBQUk7RUFDaEI7RUFDQSxVQUFBUixLQUFLO0lBQUEsT0FBSUEsS0FBSyxDQUFDa00sYUFBYSxJQUFJLENBQUNsTSxLQUFLLENBQUNtTSxRQUFRO0VBQUEsQ0FDakQsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
|