@agilemotion/oui-react-js 2.0.13 → 2.0.15
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/RestService.js +12 -4
- package/dist/RestUtils.js +33 -4
- package/dist/Utils.js +82 -1
- package/dist/components/AlertBar.js +22 -10
- package/dist/components/Button.js +19 -7
- package/dist/components/DataGrid.js +118 -31
- package/dist/components/ProgressTracker.js +195 -37
- package/dist/components/StepperTitleBar.js +28 -24
- package/dist/components/TabPanel.js +30 -19
- package/dist/components/TableCellContent.js +38 -1
- package/dist/components/Turnstile.js +14 -3
- package/dist/components/form/FieldSet.js +13 -1
- package/dist/components/form/MultiLookupField.js +407 -0
- package/dist/event/RouteActionHandler.js +28 -4
- package/dist/event/ServiceCallActionHandler.js +56 -17
- package/dist/view/Dashboard.js +4 -1
- package/dist/view/security/RegisterInteractionPortal.js +100 -14
- package/package.json +1 -1
|
@@ -31,8 +31,28 @@ var _Switch = _interopRequireDefault(require("@mui/material/Switch"));
|
|
|
31
31
|
var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
|
|
32
32
|
var _GrabContext = _interopRequireDefault(require("../interaction/GrabContext"));
|
|
33
33
|
var _CursorOverlay = _interopRequireDefault(require("../interaction/CursorOverlay"));
|
|
34
|
+
var _reactHtmlRenderer = _interopRequireDefault(require("react-html-renderer"));
|
|
34
35
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
35
36
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
37
|
+
const Handlebars = require('handlebars');
|
|
38
|
+
|
|
39
|
+
// Register the same convenience helpers HtmlPanel exposes so a
|
|
40
|
+
// tileDisplayTemplate has access to {{#if (eq ...)}} / {{#if (gt ...)}} etc.
|
|
41
|
+
// Idempotent on multiple imports — Handlebars.registerHelper just overwrites.
|
|
42
|
+
Handlebars.registerHelper({
|
|
43
|
+
eq: (v1, v2) => v1 === v2,
|
|
44
|
+
ne: (v1, v2) => v1 !== v2,
|
|
45
|
+
lt: (v1, v2) => v1 < v2,
|
|
46
|
+
gt: (v1, v2) => v1 > v2,
|
|
47
|
+
lte: (v1, v2) => v1 <= v2,
|
|
48
|
+
gte: (v1, v2) => v1 >= v2,
|
|
49
|
+
and() {
|
|
50
|
+
return Array.prototype.every.call(arguments, Boolean);
|
|
51
|
+
},
|
|
52
|
+
or() {
|
|
53
|
+
return Array.prototype.slice.call(arguments, 0, -1).some(Boolean);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
36
56
|
const MULTI_SELECT_CHECKBOX_COL_WIDTH = exports.MULTI_SELECT_CHECKBOX_COL_WIDTH = 64;
|
|
37
57
|
function evaluateTableCellWidth(multiSelect, column, columnCount) {
|
|
38
58
|
let width = _ApplicationManager.default.isExpression(column.attributes['width']) ? _DynamicJS.default.executeScript("popupTitle_".concat(column.id), column.attributes['width'], column) : column.attributes['width'];
|
|
@@ -61,8 +81,7 @@ function getSorting(order, orderBy) {
|
|
|
61
81
|
}
|
|
62
82
|
const useStyles = (0, _styles.makeStyles)(theme => ({
|
|
63
83
|
root: {
|
|
64
|
-
width: '100%'
|
|
65
|
-
marginTop: theme.spacing(3)
|
|
84
|
+
width: '100%'
|
|
66
85
|
},
|
|
67
86
|
paper: {
|
|
68
87
|
width: '100%',
|
|
@@ -376,27 +395,31 @@ const DataGrid = exports.DataGrid = /*#__PURE__*/_react.default.memo(props => {
|
|
|
376
395
|
function doHandleClick(event, id) {
|
|
377
396
|
if (_Utils.default.isNull(props.config.disableRowSelection) || props.config.disableRowSelection === false) {
|
|
378
397
|
_ApplicationManager.default.enableFormMarkers(true);
|
|
379
|
-
const
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
newSelected = newSelected.concat(selected.slice(0, -1));
|
|
389
|
-
} else if (selectedIndex > 0) {
|
|
390
|
-
newSelected = newSelected.concat(selected.slice(0, selectedIndex), selected.slice(selectedIndex + 1));
|
|
391
|
-
}
|
|
398
|
+
const existingIndex = selected.indexOf(id);
|
|
399
|
+
let newSelected;
|
|
400
|
+
if (props.multiSelect === true) {
|
|
401
|
+
// Toggle behaviour: clicking an already-selected row removes
|
|
402
|
+
// it; otherwise add it to the selection. Without this, the
|
|
403
|
+
// multi-select picker (e.g. MultiLookupField) leaves users
|
|
404
|
+
// unable to back out a row they ticked by accident.
|
|
405
|
+
if (existingIndex >= 0) {
|
|
406
|
+
newSelected = [...selected.slice(0, existingIndex), ...selected.slice(existingIndex + 1)];
|
|
392
407
|
} else {
|
|
393
|
-
newSelected
|
|
408
|
+
newSelected = [...selected, id];
|
|
394
409
|
}
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
410
|
+
} else {
|
|
411
|
+
// Single-select: no-op on re-click (preserved from prior
|
|
412
|
+
// behaviour — single-row grids rely on this to avoid
|
|
413
|
+
// accidental deselect during cell edits).
|
|
414
|
+
if (existingIndex >= 0) {
|
|
415
|
+
return;
|
|
399
416
|
}
|
|
417
|
+
newSelected = [id];
|
|
418
|
+
}
|
|
419
|
+
let selectedRows = getSelectedRows(newSelected);
|
|
420
|
+
setSelected(newSelected);
|
|
421
|
+
if (!_Utils.default.isNull(props.onSelectionChange)) {
|
|
422
|
+
props.onSelectionChange(selectedRows);
|
|
400
423
|
}
|
|
401
424
|
}
|
|
402
425
|
}
|
|
@@ -661,14 +684,34 @@ const DataGrid = exports.DataGrid = /*#__PURE__*/_react.default.memo(props => {
|
|
|
661
684
|
let event = new _Event.default(props.handle, props.viewId, rows);
|
|
662
685
|
_Observable.default.fireEvent(_EventType.default.DATA_ARRIVED, event);
|
|
663
686
|
|
|
687
|
+
// Plain React-prop callback for consumers that want to react to a
|
|
688
|
+
// data load without going through the eventManager subscription
|
|
689
|
+
// dance. Receives the freshly-rendered rows array. Used by
|
|
690
|
+
// MultiLookupField to pre-select rows that are already in the
|
|
691
|
+
// field's value, so the operator can see which results they have
|
|
692
|
+
// already added.
|
|
693
|
+
if (!_Utils.default.isNull(props.onRowsLoaded)) {
|
|
694
|
+
props.onRowsLoaded(rows);
|
|
695
|
+
}
|
|
696
|
+
|
|
664
697
|
// Tile grids auto-select the first row after a load when no
|
|
665
698
|
// selection is in place yet, so the consumer view always has a
|
|
666
|
-
// currently-selected item to render details for.
|
|
667
|
-
//
|
|
668
|
-
//
|
|
669
|
-
//
|
|
670
|
-
//
|
|
671
|
-
|
|
699
|
+
// currently-selected item to render details for.
|
|
700
|
+
//
|
|
701
|
+
// Configurable per-instance via `tileAutoSelect`. Defaults to
|
|
702
|
+
// true (existing behaviour). Views like the registration
|
|
703
|
+
// primary-contact picker set it to false because auto-selecting
|
|
704
|
+
// would create a misleading default — the user must actively
|
|
705
|
+
// choose. The DATA_ARRIVED-driven rebind on back-nav (see
|
|
706
|
+
// primary-contact.json) still works because it sets the
|
|
707
|
+
// selection explicitly via api.select().
|
|
708
|
+
//
|
|
709
|
+
// Firing SELECTION_CHANGE inline (not via fireSelectionEvent,
|
|
710
|
+
// which would read the still-stale `selected` state on this
|
|
711
|
+
// tick) so the downstream subscriber wakes up on the same tick
|
|
712
|
+
// as the data arrival.
|
|
713
|
+
const autoSelect = _Utils.default.isNull(config === null || config === void 0 ? void 0 : config.tileAutoSelect) ? true : config.tileAutoSelect === true;
|
|
714
|
+
if (autoSelect && (config === null || config === void 0 ? void 0 : config.gridType) === 'TILE' && rows.length > 0 && selected.length === 0) {
|
|
672
715
|
const firstRowId = rows[0].id;
|
|
673
716
|
const firstRowList = [firstRowId];
|
|
674
717
|
setSelected(firstRowList);
|
|
@@ -800,11 +843,55 @@ const DataGrid = exports.DataGrid = /*#__PURE__*/_react.default.memo(props => {
|
|
|
800
843
|
props.valueChangeHandler(valueRows, !isRowErrorsEmpty());
|
|
801
844
|
}
|
|
802
845
|
};
|
|
846
|
+
|
|
847
|
+
// Cache the compiled Handlebars template across tile renders so a 75-row
|
|
848
|
+
// grid doesn't recompile the same string 75 times per render pass. Keyed
|
|
849
|
+
// by the raw template string so a config swap rebuilds automatically.
|
|
850
|
+
const tileTemplateCacheRef = _react.default.useRef({
|
|
851
|
+
key: null,
|
|
852
|
+
fn: null
|
|
853
|
+
});
|
|
803
854
|
function getTileLabel(row) {
|
|
855
|
+
// When tileDisplayTemplate is set, render rich HTML — the column
|
|
856
|
+
// list becomes a no-op for the tile body (columns still drive table
|
|
857
|
+
// mode + the column-config metadata; they're not duplicated as
|
|
858
|
+
// text). Otherwise we fall through to the column iteration, which
|
|
859
|
+
// is the legacy default. Mirrors HtmlPanel: Handlebars compile,
|
|
860
|
+
// apply against the row, render via HTMLRenderer. Supports nested
|
|
861
|
+
// paths ({{person.names}}) and the standard helper set
|
|
862
|
+
// (eq / ne / lt / gt / lte / gte / and / or) registered above.
|
|
863
|
+
const tileDisplayTemplate = config.tileDisplayTemplate;
|
|
864
|
+
if (!_Utils.default.isNull(tileDisplayTemplate)) {
|
|
865
|
+
try {
|
|
866
|
+
if (tileTemplateCacheRef.current.key !== tileDisplayTemplate) {
|
|
867
|
+
tileTemplateCacheRef.current = {
|
|
868
|
+
key: tileDisplayTemplate,
|
|
869
|
+
fn: Handlebars.compile(tileDisplayTemplate)
|
|
870
|
+
};
|
|
871
|
+
}
|
|
872
|
+
const html = tileTemplateCacheRef.current.fn(row);
|
|
873
|
+
return /*#__PURE__*/_react.default.createElement(_reactHtmlRenderer.default, {
|
|
874
|
+
html: html
|
|
875
|
+
});
|
|
876
|
+
} catch (e) {
|
|
877
|
+
// Don't blank the whole grid because one tile's template
|
|
878
|
+
// referenced a missing nested key; log + fall through to
|
|
879
|
+
// the legacy renderer so the user sees *something*.
|
|
880
|
+
console.error('[DataGrid] tileDisplayTemplate render failed for row', row, e);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
804
883
|
let counter = 0;
|
|
805
884
|
return /*#__PURE__*/_react.default.createElement("span", null, config.columns.map(column => !column.attributes.hidden ? /*#__PURE__*/_react.default.createElement("span", {
|
|
806
885
|
key: counter++
|
|
807
|
-
},
|
|
886
|
+
},
|
|
887
|
+
// readNestedProperty handles dotted ids
|
|
888
|
+
// like "person.names" — direct row[id]
|
|
889
|
+
// bracket access only worked for flat
|
|
890
|
+
// fields and silently rendered blank
|
|
891
|
+
// when the value lived under a sub-object.
|
|
892
|
+
// Mirrors the STANDARD-mode resolution in
|
|
893
|
+
// TableCellContent.jsx.
|
|
894
|
+
_Utils.default.readNestedProperty(row, !_Utils.default.isNull(column.dataBinding) ? column.dataBinding : column.id), /*#__PURE__*/_react.default.createElement("br", null)) : null));
|
|
808
895
|
}
|
|
809
896
|
function renderTile(row, key) {
|
|
810
897
|
const isItemSelected = isSelected(row.id);
|
|
@@ -900,7 +987,7 @@ const DataGrid = exports.DataGrid = /*#__PURE__*/_react.default.memo(props => {
|
|
|
900
987
|
}, note.message)));
|
|
901
988
|
}) : null, rowsPerPageOptions.includes(props.config.pageSize) ? config.gridType === 'TILE' ? /*#__PURE__*/_react.default.createElement("div", {
|
|
902
989
|
style: {
|
|
903
|
-
|
|
990
|
+
padding: '16px'
|
|
904
991
|
}
|
|
905
992
|
}, /*#__PURE__*/_react.default.createElement("div", null, isFilterable() ? /*#__PURE__*/_react.default.createElement(_DataGridFilter.default, {
|
|
906
993
|
handle: filterHandle,
|
|
@@ -914,12 +1001,12 @@ const DataGrid = exports.DataGrid = /*#__PURE__*/_react.default.memo(props => {
|
|
|
914
1001
|
className: classes.root
|
|
915
1002
|
}, /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
916
1003
|
container: true,
|
|
917
|
-
spacing:
|
|
1004
|
+
spacing: 2
|
|
918
1005
|
}, /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
919
1006
|
container: true,
|
|
920
1007
|
item: true,
|
|
921
1008
|
xs: 12,
|
|
922
|
-
spacing:
|
|
1009
|
+
spacing: 2
|
|
923
1010
|
}, renderTiles())))) : /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
|
|
924
1011
|
style: {
|
|
925
1012
|
width: '100%',
|
|
@@ -1075,4 +1162,4 @@ const DataGrid = exports.DataGrid = /*#__PURE__*/_react.default.memo(props => {
|
|
|
1075
1162
|
onRowsPerPageChange: handleChangeRowsPerPage
|
|
1076
1163
|
})) : null) : null);
|
|
1077
1164
|
});
|
|
1078
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfcmVhY3RTdXBlclJlc3BvbnNpdmVUYWJsZSIsIl9DaGVja2JveCIsIl9VdGlscyIsIl9SZXN0U2VydmljZSIsIl9EYXRhR3JpZEZpbHRlciIsIl9EYXRhR3JpZEhlYWRpbmciLCJfVGFibGVDZWxsQ29udGVudCIsIl9UYWJsZVBhZ2luYXRpb24iLCJfY29sb3JzIiwiX0V2ZW50IiwiX09ic2VydmFibGUiLCJfRXZlbnRUeXBlIiwiX0dyaWQiLCJfQnV0dG9uIiwiJCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0FsZXJ0IiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9MYXlvdXQiLCJfRHluYW1pY0pTIiwiX1N3aXRjaCIsIl9Gb3JtQ29udHJvbExhYmVsIiwiX0dyYWJDb250ZXh0IiwiX0N1cnNvck92ZXJsYXkiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJNVUxUSV9TRUxFQ1RfQ0hFQ0tCT1hfQ09MX1dJRFRIIiwiZXhwb3J0cyIsImV2YWx1YXRlVGFibGVDZWxsV2lkdGgiLCJtdWx0aVNlbGVjdCIsImNvbHVtbiIsImNvbHVtbkNvdW50Iiwid2lkdGgiLCJhcHBsaWNhdGlvbk1hbmFnZXIiLCJpc0V4cHJlc3Npb24iLCJhdHRyaWJ1dGVzIiwiZHluYW1pY0pTIiwiZXhlY3V0ZVNjcmlwdCIsImNvbmNhdCIsImlkIiwiVXRpbHMiLCJpc051bGwiLCJkZXNjIiwiYSIsImIiLCJvcmRlckJ5Iiwic3RhYmxlU29ydCIsImFycmF5IiwiY21wIiwic3RhYmlsaXplZFRoaXMiLCJtYXAiLCJlbCIsImluZGV4Iiwic29ydCIsIm9yZGVyIiwiZ2V0U29ydGluZyIsInVzZVN0eWxlcyIsIm1ha2VTdHlsZXMiLCJ0aGVtZSIsInJvb3QiLCJtYXJnaW5Ub3AiLCJzcGFjaW5nIiwicGFwZXIiLCJoZWlnaHQiLCJwb3NpdGlvbiIsInpJbmRleCIsInNjcm9sbFBhZGRpbmciLCJwYWRkaW5nIiwibm9TY3JvbGxQYWRkaW5nIiwidGFibGVCb2R5IiwiZGlzcGxheSIsIm92ZXJmbG93WSIsInRhYmxlU2VsZWN0ZWQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJncmV5MzAwIiwiYmFja2dyb3VuZCIsInRhYmxlUm93IiwidGFibGVXcmFwcGVyIiwidGFibGUiLCJ2aXN1YWxseUhpZGRlbiIsImJvcmRlciIsImNsaXAiLCJtYXJnaW4iLCJ0b3AiLCJEYXRhR3JpZCIsIlJlYWN0IiwibWVtbyIsInByb3BzIiwiX2NvbmZpZyRhdHRyaWJ1dGVzIiwiX3Byb3BzJGNvbmZpZyRhdHRyaWJ1IiwiX3Byb3BzJGNvbmZpZyRhdHRyaWJ1MiIsIl9wcm9wcyRjb25maWckYXR0cmlidTMiLCJjbGFzc2VzIiwic2V0T3JkZXIiLCJ1c2VTdGF0ZSIsImNvbmZpZyIsInBhcnNlQ29uZmlnIiwidmlld0lkIiwic2V0T3JkZXJCeSIsInNlbGVjdGVkIiwic2V0U2VsZWN0ZWQiLCJ0b3RhbE51bWJlck9mUm93cyIsInNldFRvdGFsTnVtYmVyT2ZSb3dzIiwiY3JpdGVyaWEiLCJwYWdlIiwic2V0UGFnZSIsInJvd3MiLCJzZXRSb3dzIiwiZGVsZXRlZFJvd3MiLCJzZXREZWxldGVkUm93cyIsImVkaXRhYmxlIiwic2V0RWRpdGFibGUiLCJzY3JvbGxXaWR0aCIsInNldFNjcm9sbFdpZHRoIiwicm93c1BlclBhZ2VPcHRpb25zIiwicm93c1BlclBhZ2VMb2FkaW5nIiwic2V0Um93c1BlclBhZ2VMb2FkaW5nIiwicm93c1BlclBhZ2UiLCJzZXRSb3dzUGVyUGFnZSIsInBhZ2VTaXplIiwiaGlnaGxpZ2h0Um93U2VsZWN0aW9uIiwidXNlUmVmIiwiZGlzYWJsZVJvd1NlbGVjdGlvbiIsImNlbGxzIiwiaGVhZGluZ0hhbmRsZSIsImZpbHRlckhhbmRsZSIsImNvbHVtbkxheW91dEhhbmRsZXMiLCJlZGl0b3JIYW5kbGVzIiwicm93RXJyb3JNYXAiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsIndyYXAiLCJzZXRXcmFwIiwicm93Q291bnQiLCJyb3dzUmVmIiwibm90ZUtleSIsImNvbHVtbldpZHRocyIsImRyYWdTcGVjIiwicm93R3JhYlNwZWMiLCJyb3ciLCJyb3dzR3JhYmJhYmxlIiwiZW5hYmxlZCIsImFwaSIsInBhcmFtZXRlcnMiLCJpc0ZpbHRlcmFibGUiLCJnZXRQYXJhbWV0ZXJzIiwic2VsZWN0aW9uIiwic2VsZWN0ZWRSb3dzIiwibGVuZ3RoIiwiaiIsInB1c2giLCJjb2x1bW5EYXRhQmluZGluZ3MiLCJjb2x1bW5OYW1lcyIsImNvbHVtbnMiLCJkYXRhQmluZGluZyIsImdldENoaWxkcmVuIiwiY2hpbGRyZW4iLCJjaGlsZCIsInByb3BlcnRpZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHkiLCJjb2x1bW5MYXlvdXRIYW5kbGUiLCJtb3JlQ2hpbGRyZW4iLCJlZGl0b3JIYW5kbGUiLCJsb2FkRGF0YSIsImFjdGlvbkNvbmZpZyIsImV2ZW50Iiwic2VhcmNoIiwiZGVsZXRlU2VsZWN0ZWRSb3dzIiwibmV3Um93cyIsImZpbHRlciIsImlzU2VsZWN0ZWQiLCJnZXRTZWxlY3RlZFJvd3MiLCJzcGxpY2UiLCJuZXdSb3ciLCJvblNlbGVjdGlvbkNoYW5nZSIsInVwZGF0ZVNjcm9sbEJhclBhZGRpbmciLCJjdXJyZW50IiwidmFsdWVDaGFuZ2VDYWxsYmFjayIsImNsZWFyIiwiRXZlbnQiLCJoYW5kbGUiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJTRUxFQ1RJT05fQ0hBTkdFIiwiZGVsZXRlUm93cyIsInJvd0lkcyIsImlkU2V0IiwiU2V0IiwicmVtYWluaW5nIiwic2VsZWN0IiwiYWRkUm93cyIsIm9ic2VydmVSb3ciLCJuZXdTZWxlY3Rpb24iLCJudW1iZXJPZlBhZ2VzIiwicmVmcmVzaCIsInBhcnNlZENvbmZpZyIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJmb3JtQXBpIiwiaGFuZGxlUm93R3JhYlRvZ2dsZSIsImlzUm93R3JhYmJhYmxlIiwiR3JhYkNvbnRleHQiLCJpc0FjdGl2ZSIsImdyYWIiLCJyb3dJbmRleCIsImNvbXBvbmVudElkIiwiQ3Vyc29yT3ZlcmxheSIsInNob3ciLCJST1dfR1JBQl9TVEFSVCIsInRib2R5IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJ3aW5kb3ciLCJvbnJlc2l6ZSIsImhhbmRsZVJlcXVlc3RTb3J0IiwiaXNEZXNjIiwiaGFuZGxlU2VsZWN0QWxsQ2xpY2siLCJ0YXJnZXQiLCJjaGVja2VkIiwibmV3U2VsZWN0ZWRzIiwibmFtZSIsImVuYWJsZUZvcm1NYXJrZXJzIiwiZG9IYW5kbGVDbGljayIsInNlbGVjdGVkSW5kZXgiLCJpbmRleE9mIiwibmV3U2VsZWN0ZWQiLCJzbGljZSIsImZpcmVTZWxlY3Rpb25FdmVudCIsImdyaWRUeXBlIiwiaXNSb3dEcmFnRGlzYWJsZWQiLCJkaXNhYmxlZFdoZW4iLCJleGVjdXRlU2NyaXB0T2JqZWN0Iiwic2V0Q3Vyc29yIiwiY3Vyc29yIiwiYm9keSIsInN0eWxlIiwiaGFuZGxlUm93TW91c2VFbnRlciIsImhhbmRsZVJvd01vdXNlTGVhdmUiLCJoYW5kbGVDbGljayIsImNsb3Nlc3QiLCJzdG9wUHJvcGFnYXRpb24iLCJvbkNlbGxTZWxlY3Rpb25DaGFuZ2UiLCJoYW5kbGVDZWxsQ2xpY2siLCJmaWVsZFR5cGUiLCJoYW5kbGVDaGFuZ2VQYWdlIiwibmV3UGFnZSIsImN1cnJlbnRQYWdlIiwiaGFuZGxlQ2hhbmdlUm93c1BlclBhZ2UiLCJ2YWx1ZSIsInByb2Nlc3NEYXRhIiwiZGF0YSIsImNvbmYiLCJ0b3RhbE51bWJlck9mUmVjb3JkcyIsInJlY29yZHMiLCJ1cGRhdGVSb3dDbGFzc2VzIiwidGFibGVSb3dzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwic2VydmljZSIsImRhdGFTZXJ2aWNlIiwic2VydmljZVR5cGUiLCJ0eXBlIiwibWV0aG9kIiwiaW52b2tlUnBjIiwiaW52b2tlUmVzdCIsImNvbXBvbmVudCIsInRoZW4iLCJyZXN1bHQiLCJjYXRjaCIsImNvbnNvbGUiLCJlcnJvciIsImVycm9yVHlwZSIsInB1Ymxpc2hFcnJvck1lc3NhZ2UiLCJFcnJvciIsInJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZSIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsImV2ZW50SGFuZGxpbmdDb25maWciLCJzdWJzY3JpcHRpb25zIiwiYWRkU3Vic2NyaXB0aW9ucyIsImFkZFN5c3RlbVN1YnNjcmlwdGlvbnMiLCJpc0VkaXRhYmxlIiwidmlzaWJsZUNvbHVtbkNvdW50IiwiaGlkZGVuIiwiZ2V0Q29tcG9uZW50QXR0cmlidXRlIiwic2VsZWN0aW9uTW9kZSIsImVkaXRvciIsImRlZmF1bHRFZGl0b3IiLCJkYXRhUXVlcnlOYW1lIiwiaGFzTG9hZEV2ZW50IiwibG9hZFN1YnNjcmlwdGlvbnMiLCJzdWJzY3JpcHRpb24iLCJldmVudFR5cGUiLCJsb2FkU3Vic2NyaXB0aW9uIiwiYWN0aW9ucyIsImFjdGlvbiIsImFjdGlvblR5cGUiLCJhdXRvTG9hZERhdGEiLCJDT01QT05FTlRfTE9BRCIsImFkZFJvd0ZvY3VzTGlzdGVuZXIiLCJmb2N1c291dCIsInNlbGVjdGVkRWxlbWVudCIsInJvd0F0dHJpYnV0ZXMiLCJjbGFzc0V2YWx1YXRvciIsImNsYXNzTmFtZSIsInVwZGF0ZVJvd1JlYWRPbmx5U3RhdHVzIiwicmVhZE9ubHlFdmFsdWF0b3IiLCJyZWFkT25seSIsInVwZGF0ZUNvbHVtblJlYWRPbmx5U3RhdHVzIiwiY29sdW1uUmVhZE9ubHkiLCJwcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyIsIkRBVEFfQVJSSVZFRCIsImZpcnN0Um93SWQiLCJmaXJzdFJvd0xpc3QiLCJzZWxlY3Rpb25FdmVudCIsIlJPV19ERUxFVEVEIiwicm93VmFsdWVzIiwiZWRpdG9yQ2hhbmdlSGFuZGxlciIsInJvd0lkIiwiZmllbGQiLCJ1cGRhdGVOZXN0ZWRQcm9wZXJ0eSIsImNyZWF0ZUNlbGwiLCJjb2x1bW5OYW1lIiwiY2VsbEhhbmRsZSIsInJvd0NlbGxzIiwiY2VsbHNFbnRyeSIsInJlZnJlc2hDZWxsIiwiY2VsbCIsInJlbW92ZUFsbFJvd0Vycm9yc0J5Q29sdW1uIiwicm93RXJyb3JzIiwicm93RXJyb3JIYW5kbGVyIiwia2V5cyIsImZpbmQiLCJyb3dFcnJvciIsImlzUm93RXJyb3JzRW1wdHkiLCJrZXkiLCJ2YWx1ZVJvd3MiLCJ2YWx1ZUNoYW5nZUhhbmRsZXIiLCJnZXRUaWxlTGFiZWwiLCJjb3VudGVyIiwiY3JlYXRlRWxlbWVudCIsInJlbmRlclRpbGUiLCJpc0l0ZW1TZWxlY3RlZCIsIml0ZW0iLCJ4cyIsIm1lcmdlT2JqZWN0cyIsInRpbGVTdHlsZSIsIm1pbldpZHRoIiwidmFyaWFudCIsImNvbG9yIiwib25DbGljayIsInJlbmRlclRpbGVzIiwiX3Byb3BzJGNvbmZpZyIsIm1lc3NhZ2UiLCJlbXB0eU1lc3NhZ2UiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJtaW5IZWlnaHQiLCJmb250U2l6ZSIsImZvbnRTdHlsZSIsIkZyYWdtZW50IiwibGFiZWxJZCIsImNyZWF0ZUNvbHVtbkxheW91dEhhbmRsZSIsImNyZWF0ZUNlbGxFZGl0b3JIYW5kbGUiLCJoYXNCb3JkZXIiLCJtZXJnZVN0eWxlcyIsImJvcmRlclJhZGl1cyIsIm5vdGVzIiwibm90ZSIsIm1hcmdpbkJvdHRvbSIsIm1lc3NhZ2VUeXBlIiwiaW5jbHVkZXMiLCJmaWx0ZXJXcmFwcGVyQ2xhc3MiLCJvbkZpbHRlclN1Ym1pdCIsIm9uUmVxdWVzdFNvcnQiLCJjb250YWluZXIiLCJib3JkZXJCb3R0b20iLCJjb250cm9sIiwib25DaGFuZ2UiLCJzeCIsImxhYmVsIiwiVGFibGUiLCJjZWxsU3BhY2luZyIsIm51bVNlbGVjdGVkIiwib25TZWxlY3RBbGxDbGljayIsInJlc2l6ZUhhbmRsZXIiLCJUYm9keSIsIm1heEhlaWdodCIsImJvZHlNYXhIZWlnaHQiLCJkZWZhdWx0Um93U3R5bGUiLCJmbGV4V3JhcCIsIlRyIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwib25Eb3VibGVDbGljayIsIm9uUm93RG91YmxlQ2xpY2siLCJyb2xlIiwidGFiSW5kZXgiLCJUZCIsImlucHV0UHJvcHMiLCJfcm93JGNvbHVtblJlYWRPbmx5IiwiX2NvbHVtbiRlZGl0b3IiLCJsYXlvdXQiLCJhbGlnbiIsImRpc2FibGVkIiwiZm9ybSIsIkxheW91dCIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImNvbCIsInBhcmVudCIsIm9uUm93RXJyb3IiLCJyZWZDYWxsYmFjayIsInZhbGlkYXRvciIsImNvbHVtbkNvbmZpZyIsImNvbnRlbnRUeXBlIiwiY2VsbEZvcm1hdHRlciIsInBhZ2luYXRpb24iLCJwYWduYXRpb24iLCJjb3VudCIsImJhY2tJY29uQnV0dG9uUHJvcHMiLCJuZXh0SWNvbkJ1dHRvblByb3BzIiwib25QYWdlQ2hhbmdlIiwib25Sb3dzUGVyUGFnZUNoYW5nZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9EYXRhR3JpZC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7bWFrZVN0eWxlc30gZnJvbSAnQG11aS9zdHlsZXMnO1xuaW1wb3J0IHtUYWJsZSwgVGJvZHksIFRkLCBUcn0gZnJvbSAncmVhY3Qtc3VwZXItcmVzcG9uc2l2ZS10YWJsZSc7XG5pbXBvcnQgJ3JlYWN0LXN1cGVyLXJlc3BvbnNpdmUtdGFibGUvZGlzdC9TdXBlclJlc3BvbnNpdmVUYWJsZVN0eWxlLmNzcyc7XG5pbXBvcnQgQ2hlY2tib3ggZnJvbSAnQG11aS9tYXRlcmlhbC9DaGVja2JveCc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vVXRpbHMnO1xuaW1wb3J0ICcuL0RhdGFHcmlkLmNzcyc7XG5pbXBvcnQge2ludm9rZVJlc3QsIGludm9rZVJwY30gZnJvbSAnLi4vUmVzdFNlcnZpY2UnO1xuaW1wb3J0IERhdGFHcmlkRmlsdGVyIGZyb20gJy4vRGF0YUdyaWRGaWx0ZXInO1xuaW1wb3J0IERhdGFHcmlkSGVhZGluZyBmcm9tICcuL0RhdGFHcmlkSGVhZGluZyc7XG5pbXBvcnQgVGFibGVDZWxsQ29udGVudCBmcm9tICcuL1RhYmxlQ2VsbENvbnRlbnQnO1xuaW1wb3J0IFRhYmxlUGFnaW5hdGlvbiBmcm9tICdAbXVpL21hdGVyaWFsL1RhYmxlUGFnaW5hdGlvbic7XG5pbXBvcnQge2dyZXkzMDB9IGZyb20gJ21hdGVyaWFsLXVpL3N0eWxlcy9jb2xvcnMnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uL2V2ZW50L0V2ZW50JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi4vZXZlbnQvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gJy4uL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQgR3JpZCBmcm9tICdAbXVpL21hdGVyaWFsL0dyaWQnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgQWxlcnQgZnJvbSAncmVhY3QtYm9vdHN0cmFwL0FsZXJ0JztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCB7TGF5b3V0fSBmcm9tICcuL2xheW91dC9MYXlvdXQnO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tIFwiLi4vRHluYW1pY0pTXCI7XG5pbXBvcnQgU3dpdGNoIGZyb20gJ0BtdWkvbWF0ZXJpYWwvU3dpdGNoJztcbmltcG9ydCBGb3JtQ29udHJvbExhYmVsIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbCc7XG5pbXBvcnQgR3JhYkNvbnRleHQgZnJvbSAnLi4vaW50ZXJhY3Rpb24vR3JhYkNvbnRleHQnO1xuaW1wb3J0IEN1cnNvck92ZXJsYXkgZnJvbSBcIi4uL2ludGVyYWN0aW9uL0N1cnNvck92ZXJsYXlcIjtcblxuZXhwb3J0IGNvbnN0IE1VTFRJX1NFTEVDVF9DSEVDS0JPWF9DT0xfV0lEVEggPSA2NDtcblxuZnVuY3Rpb24gZXZhbHVhdGVUYWJsZUNlbGxXaWR0aChtdWx0aVNlbGVjdCwgY29sdW1uLCBjb2x1bW5Db3VudCkge1xuXG4gICAgbGV0IHdpZHRoID0gYXBwbGljYXRpb25NYW5hZ2VyLmlzRXhwcmVzc2lvbihjb2x1bW4uYXR0cmlidXRlc1snd2lkdGgnXSkgP1xuICAgICAgICBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdChgcG9wdXBUaXRsZV8ke2NvbHVtbi5pZH1gLGNvbHVtbi5hdHRyaWJ1dGVzWyd3aWR0aCddLCBjb2x1bW4pIDogY29sdW1uLmF0dHJpYnV0ZXNbJ3dpZHRoJ107XG5cbiAgICByZXR1cm4gbXVsdGlTZWxlY3QgPT09IHRydWUgP1xuICAgICAgICAnY2FsYygnICsgKCFVdGlscy5pc051bGwod2lkdGgpID8gd2lkdGggOlxuICAgICAgICAgICAgKDEwMCAvIGNvbHVtbkNvdW50KSArICclJykgKyAnIC0gJyArIChNVUxUSV9TRUxFQ1RfQ0hFQ0tCT1hfQ09MX1dJRFRIIC8gY29sdW1uQ291bnQpICsgJ3B4KSdcbiAgICAgICAgOlxuICAgICAgICAodHlwZW9mIHdpZHRoICE9PSAndW5kZWZpbmVkJyA/IHdpZHRoIDogKDEwMCAvIGNvbHVtbkNvdW50KSArICclJyk7XG59XG5cbmZ1bmN0aW9uIGRlc2MoYSwgYiwgb3JkZXJCeSkge1xuICAgIGlmIChiW29yZGVyQnldIDwgYVtvcmRlckJ5XSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChiW29yZGVyQnldID4gYVtvcmRlckJ5XSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHN0YWJsZVNvcnQoYXJyYXksIGNtcCkge1xuICAgIGNvbnN0IHN0YWJpbGl6ZWRUaGlzID0gYXJyYXkubWFwKChlbCwgaW5kZXgpID0+IFtlbCwgaW5kZXhdKTtcbiAgICBzdGFiaWxpemVkVGhpcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yZGVyID0gY21wKGFbMF0sIGJbMF0pO1xuICAgICAgICBpZiAob3JkZXIgIT09IDApIHJldHVybiBvcmRlcjtcbiAgICAgICAgcmV0dXJuIGFbMV0gLSBiWzFdO1xuICAgIH0pO1xuICAgIHJldHVybiBzdGFiaWxpemVkVGhpcy5tYXAoZWwgPT4gZWxbMF0pO1xufVxuXG5mdW5jdGlvbiBnZXRTb3J0aW5nKG9yZGVyLCBvcmRlckJ5KSB7XG4gICAgcmV0dXJuIG9yZGVyID09PSAnZGVzYycgPyAoYSwgYikgPT4gZGVzYyhhLCBiLCBvcmRlckJ5KSA6IChhLCBiKSA9PiAtZGVzYyhhLCBiLCBvcmRlckJ5KTtcbn1cblxuY29uc3QgdXNlU3R5bGVzID0gbWFrZVN0eWxlcyh0aGVtZSA9PiAoe1xuICAgIHJvb3Q6IHtcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgbWFyZ2luVG9wOiB0aGVtZS5zcGFjaW5nKDMpLFxuICAgIH0sXG4gICAgcGFwZXI6IHtcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICB6SW5kZXg6ICcwJyxcbiAgICB9LFxuICAgIHNjcm9sbFBhZGRpbmc6IHtcbiAgICAgICAgcGFkZGluZzogJzhweCAhaW1wb3J0YW50J1xuICAgIH0sXG4gICAgbm9TY3JvbGxQYWRkaW5nOiB7XG4gICAgICAgIHBhZGRpbmc6ICcwICFpbXBvcnRhbnQnLFxuICAgICAgICB3aWR0aDogJzFweCAhaW1wb3J0YW50J1xuICAgIH0sXG4gICAgdGFibGVCb2R5OiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgIG92ZXJmbG93WTogJ2F1dG8nXG4gICAgfSxcbiAgICB0YWJsZVNlbGVjdGVkOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZ3JleTMwMCxcbiAgICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2YxZjFmMSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdGFibGVSb3c6IHtcbiAgICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2YxZjFmMSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdGFibGVXcmFwcGVyOiB7XG4gICAgICAgIGhlaWdodDogJzEwMCUnXG4gICAgfSxcbiAgICB0YWJsZToge1xuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB9LFxuICAgIHZpc3VhbGx5SGlkZGVuOiB7XG4gICAgICAgIGJvcmRlcjogMCxcbiAgICAgICAgY2xpcDogJ3JlY3QoMCAwIDAgMCknLFxuICAgICAgICBoZWlnaHQ6IDEsXG4gICAgICAgIG1hcmdpbjogLTEsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICB0b3A6IDIwLFxuICAgICAgICB3aWR0aDogMSxcbiAgICB9XG59KSk7XG5cbmV4cG9ydCBjb25zdCBEYXRhR3JpZCA9IFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHVzZVN0eWxlcygpO1xuICAgIGNvbnN0IFtvcmRlciwgc2V0T3JkZXJdID0gUmVhY3QudXNlU3RhdGUoJ2Rlc2MnKTtcbiAgICBjb25zdCBbY29uZmlnXSA9IFJlYWN0LnVzZVN0YXRlKFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKSk7XG4gICAgY29uc3QgW29yZGVyQnksIHNldE9yZGVyQnldID0gUmVhY3QudXNlU3RhdGUoJ2lkJyk7XG4gICAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3RvdGFsTnVtYmVyT2ZSb3dzLCBzZXRUb3RhbE51bWJlck9mUm93c10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbY3JpdGVyaWFdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtwYWdlLCBzZXRQYWdlXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtyb3dzLCBzZXRSb3dzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbZGVsZXRlZFJvd3MsIHNldERlbGV0ZWRSb3dzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbZWRpdGFibGUsIHNldEVkaXRhYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc2Nyb2xsV2lkdGgsIHNldFNjcm9sbFdpZHRoXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtyb3dzUGVyUGFnZU9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGUoWzE1LCAzMCwgNDUsIDYwLCA3NSwgMTUwLCAzMDBdKTtcbiAgICBjb25zdCBbcm93c1BlclBhZ2VMb2FkaW5nLCBzZXRSb3dzUGVyUGFnZUxvYWRpbmddID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gICAgY29uc3QgW3Jvd3NQZXJQYWdlLCBzZXRSb3dzUGVyUGFnZV0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5jb25maWcucGFnZVNpemUpO1xuICAgIGNvbnN0IGhpZ2hsaWdodFJvd1NlbGVjdGlvbiA9IFJlYWN0LnVzZVJlZighVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5oaWdobGlnaHRSb3dTZWxlY3Rpb24pXG4gICAgICAgID8gcHJvcHMuY29uZmlnLmhpZ2hsaWdodFJvd1NlbGVjdGlvbiA6ICFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3Rpb24pID8gIXByb3BzLmNvbmZpZy5kaXNhYmxlUm93U2VsZWN0aW9uIDogdHJ1ZSk7XG4gICAgY29uc3QgW2NlbGxzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbaGVhZGluZ0hhbmRsZV0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2ZpbHRlckhhbmRsZV0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2NvbHVtbkxheW91dEhhbmRsZXNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtlZGl0b3JIYW5kbGVzXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbcm93RXJyb3JNYXBdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFt3cmFwLCBzZXRXcmFwXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCByb3dDb3VudCA9IFJlYWN0LnVzZVJlZigtMSk7XG4gICAgY29uc3Qgcm93c1JlZiA9IFJlYWN0LnVzZVJlZihbXSk7XG4gICAgbGV0IG5vdGVLZXkgPSAwO1xuICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IFJlYWN0LnVzZVJlZih7fSk7XG5cbiAgICBjb25zdCBkcmFnU3BlYyA9IGNvbmZpZy5hdHRyaWJ1dGVzPy5kcmFnU3BlYyB8fCB7fTtcbiAgICBjb25zdCByb3dHcmFiU3BlYyA9IGRyYWdTcGVjLnJvdyB8fCB7fTtcbiAgICBjb25zdCByb3dzR3JhYmJhYmxlID0gcm93R3JhYlNwZWMuZW5hYmxlZCA9PT0gdHJ1ZTtcblxuICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBjcml0ZXJpYSgpIHtcbiAgICAgICAgICAgICAgICBjcml0ZXJpYS5wYXJhbWV0ZXJzID0gaXNGaWx0ZXJhYmxlKCkgPyBmaWx0ZXJIYW5kbGUuYXBpLmdldFBhcmFtZXRlcnMoKSA6IFtdO1xuICAgICAgICAgICAgICAgIGNyaXRlcmlhLnBhZ2VTaXplID0gcm93c1BlclBhZ2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY3JpdGVyaWE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvd3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFtpXSA9PT0gcm93c1tqXS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHJvd3Nbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkUm93cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgY29sdW1uRGF0YUJpbmRpbmdzKCkge1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5OYW1lcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbiA9IGNvbmZpZy5jb2x1bW5zW2ldO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5wdXNoKCFVdGlscy5pc051bGwoY29sdW1uLmRhdGFCaW5kaW5nKSA/IGNvbHVtbi5kYXRhQmluZGluZyA6IGNvbHVtbi5pZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbk5hbWVzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldENoaWxkcmVuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGVhZGluZ0hhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgaGVhZGluZ0hhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWx0ZXJIYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZpbHRlckhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNvbHVtbkxheW91dEhhbmRsZXMpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1uTGF5b3V0SGFuZGxlID0gY29sdW1uTGF5b3V0SGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY29sdW1uTGF5b3V0SGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29sdW1uTGF5b3V0SGFuZGxlLmFwaSkgJiYgIVV0aWxzLmlzTnVsbChjb2x1bW5MYXlvdXRIYW5kbGUuYXBpLmdldENoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vcmVDaGlsZHJlbiA9IGNvbHVtbkxheW91dEhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1vcmVDaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG1vcmVDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZWRpdG9ySGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlZGl0b3JIYW5kbGUgPSBlZGl0b3JIYW5kbGVzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChlZGl0b3JIYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlZGl0b3JIYW5kbGUuYXBpKSAmJiAhVXRpbHMuaXNOdWxsKGVkaXRvckhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9yZUNoaWxkcmVuID0gZWRpdG9ySGFuZGxlLmFwaS5nZXRDaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwobW9yZUNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgbW9yZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2FkRGF0YTogKGFjdGlvbkNvbmZpZywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBzZWFyY2goYWN0aW9uQ29uZmlnLCBldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWRSb3dzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyA6IGRpc3Bvc2UgZnJvbSBvYnNlcnZlclxuICAgICAgICAgICAgICAgIGxldCBuZXdSb3dzID0gcm93cy5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzU2VsZWN0ZWQocm93LmlkKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHNldERlbGV0ZWRSb3dzKGdldFNlbGVjdGVkUm93cyhzZWxlY3RlZCkpO1xuICAgICAgICAgICAgICAgIHJvd3Muc3BsaWNlKDAsIHJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5ld1JvdyBvZiBuZXdSb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaChuZXdSb3cpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKFtdKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5vblNlbGVjdGlvbkNoYW5nZShbXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXBkYXRlU2Nyb2xsQmFyUGFkZGluZygpO1xuICAgICAgICAgICAgICAgIHJvd0NvdW50LmN1cnJlbnQgPSByb3dzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAvLyBTeW5jIHRoZSByZWYgdGhhdCBiYWNrcyB0aGUgYGdldCByb3dzYCBnZXR0ZXIg4oCUIG90aGVyd2lzZVxuICAgICAgICAgICAgICAgIC8vIGFwaS5yb3dzIHJldHVybnMgd2hhdGV2ZXIgcm93c1JlZiB3YXMgYXQgbGFzdCBzeW5jIChvZnRlblxuICAgICAgICAgICAgICAgIC8vIGVtcHR5IGFmdGVyIGEgcHJldmlvdXMgY2xlYXIoKSksIGV2ZW4gdGhvdWdoIHRoZSBsb2NhbFxuICAgICAgICAgICAgICAgIC8vIGByb3dzYCBhcnJheSBoYXMgYmVlbiBtdXRhdGVkLiBjbGVhcigpIGRvZXMgdGhpczsgZGF0YSBsb2FkXG4gICAgICAgICAgICAgICAgLy8gZG9lcyB0aGlzOyBhZGRSb3dzL2RlbGV0ZVNlbGVjdGVkUm93cyBkaWRuJ3Qg4oCUIGxlYWRpbmcgdG9cbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zlckxpc3QncyB0cmFuc2Zlci1hbGwtYmFjayBmYWlsaW5nIGJlY2F1c2UgYXBpLnJvd3NcbiAgICAgICAgICAgICAgICAvLyBzaG93ZWQgZW1wdHkgcmlnaHQgYWZ0ZXIgYSB0cmFuc2Zlci1hbGwtb3V0LlxuICAgICAgICAgICAgICAgIHJvd3NSZWYuY3VycmVudCA9IHJvd3M7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VDYWxsYmFjayhyb3dzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByb3dzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyA6IGRpc3Bvc2UgZnJvbSBvYnNlcnZlclxuICAgICAgICAgICAgICAgIHJvd3NSZWYuY3VycmVudCA9IFtdO1xuICAgICAgICAgICAgICAgIHNldFJvd3MoW10pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCBnZXRTZWxlY3RlZFJvd3MoW10pKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5TRUxFQ1RJT05fQ0hBTkdFLCBldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gU3VyZ2ljYWwgZGVsZXRlIGJ5IHJvdyBpZHMg4oCUIGRvZXMgTk9UIHRvdWNoIHRoZSBzZWxlY3Rpb24gc3RhdGUuXG4gICAgICAgICAgICAvLyBDb3VudGVycGFydCB0byBkZWxldGVTZWxlY3RlZFJvd3MgZm9yIGNhc2VzIChUcmFuc2Zlckxpc3QgZG91YmxlLVxuICAgICAgICAgICAgLy8gY2xpY2spIHdoZXJlIHRoZSBjYWxsZXIgd2FudHMgdG8gcmVtb3ZlIHNwZWNpZmljIHJvd3Mgd2l0aG91dFxuICAgICAgICAgICAgLy8gaGlqYWNraW5nIHRoZSB1c2VyJ3MgY3VycmVudCBncmlkIHNlbGVjdGlvbi5cbiAgICAgICAgICAgIGRlbGV0ZVJvd3M6IChyb3dJZHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJvd0lkcyB8fCByb3dJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gcm93cztcbiAgICAgICAgICAgICAgICBjb25zdCBpZFNldCA9IG5ldyBTZXQocm93SWRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1haW5pbmcgPSByb3dzLmZpbHRlcigocm93KSA9PiAhaWRTZXQuaGFzKHJvdy5pZCkpO1xuICAgICAgICAgICAgICAgIHJvd3Muc3BsaWNlKDAsIHJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByZW1haW5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbEJhclBhZGRpbmcoKTtcbiAgICAgICAgICAgICAgICByb3dDb3VudC5jdXJyZW50ID0gcm93cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcm93c1JlZi5jdXJyZW50ID0gcm93cztcbiAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZUNhbGxiYWNrKHJvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdDogKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQocm93cyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkUm93czogKG5ld1Jvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5ld1JvdyBvZiBuZXdSb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaChvYnNlcnZlUm93KG5ld1JvdykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBuZXdTZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5ld1JvdyBvZiBuZXdSb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5wdXNoKG5ld1Jvdy5pZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuZGlzYWJsZVJvd1NlbGVjdGlvbikgfHwgcHJvcHMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3Rpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKG5ld1NlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMub25TZWxlY3Rpb25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlKG5ld1Jvd3MpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbEJhclBhZGRpbmcoKTtcbiAgICAgICAgICAgICAgICByb3dDb3VudC5jdXJyZW50ID0gcm93cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgLy8gU2VlIGRlbGV0ZVNlbGVjdGVkUm93cyBmb3IgdGhlIHJhdGlvbmFsZSDigJQga2VlcCByb3dzUmVmIGluXG4gICAgICAgICAgICAgICAgLy8gc3luYyB3aXRoIHRoZSBtdXRhdGVkIGxvY2FsIHJvd3MgYXJyYXkgc28gdGhlIGBnZXQgcm93c2BcbiAgICAgICAgICAgICAgICAvLyBnZXR0ZXIgcmV0dXJucyBjdXJyZW50IGRhdGEgYWZ0ZXIgYWRkUm93cy5cbiAgICAgICAgICAgICAgICByb3dzUmVmLmN1cnJlbnQgPSByb3dzO1xuICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlQ2FsbGJhY2socm93cyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcm93cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgbnVtYmVyT2ZQYWdlcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxOdW1iZXJPZlJvd3MgLyByb3dzUGVyUGFnZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgcm93cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93c1JlZi5jdXJyZW50O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlYXJjaDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlYXJjaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlckhhbmRsZSAmJiBmaWx0ZXJIYW5kbGUuYXBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckhhbmRsZS5hcGkucmVmcmVzaCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyc2VkQ29uZmlnLnZpc2libGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCB2aXNpYmxlKHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICBzZXRWaXNpYmxlKHZpc2libGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtQXBpID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5jb25maWcuaWQgKyBcIl9lZGl0X2Zvcm1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaGFuZGxlUm93R3JhYlRvZ2dsZShyb3csIGluZGV4KSB7XG4gICAgICAgIGlmICghaXNSb3dHcmFiYmFibGUocm93KSkgcmV0dXJuO1xuICAgICAgICBpZiAoR3JhYkNvbnRleHQuaXNBY3RpdmUoKSkgcmV0dXJuO1xuXG4gICAgICAgIEdyYWJDb250ZXh0LmdyYWIocHJvcHMuaGFuZGxlLCB7XG4gICAgICAgICAgICByb3csXG4gICAgICAgICAgICByb3dJbmRleDogaW5kZXgsXG4gICAgICAgICAgICBjb21wb25lbnRJZDogcHJvcHMuY29uZmlnLmlkLFxuICAgICAgICAgICAgdmlld0lkOiBwcm9wcy52aWV3SWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgQ3Vyc29yT3ZlcmxheS5zaG93KCk7XG5cbiAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChcbiAgICAgICAgICAgIEV2ZW50VHlwZS5ST1dfR1JBQl9TVEFSVCxcbiAgICAgICAgICAgIG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgcm93KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbEJhclBhZGRpbmcoKSB7XG4gICAgICAgIHZhciB0Ym9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluVGFibGVCb2R5Jyk7XG4gICAgICAgIGlmICh0Ym9keSAhPT0gbnVsbCAmJiB0eXBlb2YgdGJvZHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzZXRTY3JvbGxXaWR0aCh0Ym9keS5vZmZzZXRXaWR0aCAtIHRib2R5LmNsaWVudFdpZHRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdpbmRvdy5vbnJlc2l6ZSA9IGZ1bmN0aW9uIG9ucmVzaXplKCkge1xuICAgICAgICB1cGRhdGVTY3JvbGxCYXJQYWRkaW5nKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVJlcXVlc3RTb3J0ID0gKGV2ZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBjb25zdCBpc0Rlc2MgPSBvcmRlckJ5ID09PSBwcm9wZXJ0eSAmJiBvcmRlciA9PT0gJ2Rlc2MnO1xuICAgICAgICBzZXRPcmRlcihpc0Rlc2MgPyAnYXNjJyA6ICdkZXNjJyk7XG4gICAgICAgIHNldE9yZGVyQnkocHJvcGVydHkpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTZWxlY3RBbGxDbGljayhldmVudCkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5kaXNhYmxlUm93U2VsZWN0aW9uKSB8fCBwcm9wcy5jb25maWcuZGlzYWJsZVJvd1NlbGVjdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkcyA9IHJvd3MubWFwKG4gPT4gbi5uYW1lKTtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZChuZXdTZWxlY3RlZHMpO1xuICAgICAgICAgICAgICAgIHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlKG5ld1NlbGVjdGVkcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKFtdKTtcbiAgICAgICAgICAgICAgICBwcm9wcy5vblNlbGVjdGlvbkNoYW5nZShbXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkUm93cyhzZWxlY3RlZCkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGVjdGVkLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5pZCA9PT0gc2VsZWN0ZWRbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dzLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRSb3dzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvSGFuZGxlQ2xpY2soZXZlbnQsIGlkKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3Rpb24pIHx8IHByb3BzLmNvbmZpZy5kaXNhYmxlUm93U2VsZWN0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgICAgICAgICBpZihzZWxlY3RlZC5pbmRleE9mKGlkKSA8IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3U2VsZWN0ZWQgPSBbXTtcblxuICAgICAgICAgICAgICAgIGlmIChwcm9wcy5tdWx0aVNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkID0gbmV3U2VsZWN0ZWQuY29uY2F0KHNlbGVjdGVkLCBpZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWQgPSBuZXdTZWxlY3RlZC5jb25jYXQoc2VsZWN0ZWQuc2xpY2UoMSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSW5kZXggPT09IHNlbGVjdGVkLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkID0gbmV3U2VsZWN0ZWQuY29uY2F0KHNlbGVjdGVkLnNsaWNlKDAsIC0xKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkID0gbmV3U2VsZWN0ZWQuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLnNsaWNlKDAsIHNlbGVjdGVkSW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLnNsaWNlKHNlbGVjdGVkSW5kZXggKyAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZC5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gZ2V0U2VsZWN0ZWRSb3dzKG5ld1NlbGVjdGVkKTtcblxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKG5ld1NlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5vblNlbGVjdGlvbkNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMub25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXJlU2VsZWN0aW9uRXZlbnQoKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb25maWcpICYmICghVXRpbHMuaXNOdWxsKGhlYWRpbmdIYW5kbGUpIHx8IGNvbmZpZy5ncmlkVHlwZSA9PT0gJ1RJTEUnKSkge1xuICAgICAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZ2V0U2VsZWN0ZWRSb3dzKHNlbGVjdGVkKSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuU0VMRUNUSU9OX0NIQU5HRSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSb3dHcmFiYmFibGUocm93KSB7XG4gICAgICAgIHJldHVybiByb3dzR3JhYmJhYmxlICYmICFpc1Jvd0RyYWdEaXNhYmxlZChyb3cpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUm93RHJhZ0Rpc2FibGVkKHJvdykge1xuICAgICAgICBpZiAoIWRyYWdTcGVjLmRpc2FibGVkV2hlbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0T2JqZWN0KFxuICAgICAgICAgICAgJ1JPVy0nICsgcm93LmlkICsgJy1kcmFnLWRpc2FibGVkJyxcbiAgICAgICAgICAgIGRyYWdTcGVjLmRpc2FibGVkV2hlbixcbiAgICAgICAgICAgIHByb3BzLmNvbmZpZy5pZCxcbiAgICAgICAgICAgIHtyb3c6IHJvd30sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEN1cnNvcihjdXJzb3IpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBjdXJzb3IgfHwgJ2RlZmF1bHQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVJvd01vdXNlRW50ZXIocm93KSB7XG4gICAgICAgIGlmICghaXNSb3dHcmFiYmFibGUocm93KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBzaG93IGdyYWIgY3Vyc29yIGlmIG5vdCBhbHJlYWR5IGhvbGRpbmcgc29tZXRoaW5nXG4gICAgICAgIGlmICghR3JhYkNvbnRleHQuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgc2V0Q3Vyc29yKHJvd0dyYWJTcGVjLmN1cnNvciB8fCAnZ3JhYicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlUm93TW91c2VMZWF2ZSgpIHtcbiAgICAgICAgc2V0Q3Vyc29yKCdkZWZhdWx0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQsIHJvdywgaW5kZXgpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZWRpdENlbGwnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChyb3dzR3JhYmJhYmxlICYmICFpc1Jvd0RyYWdEaXNhYmxlZChyb3cpKSB7XG4gICAgICAgICAgICBoYW5kbGVSb3dHcmFiVG9nZ2xlKHJvdywgaW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMub25DZWxsU2VsZWN0aW9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9IYW5kbGVDbGljayhldmVudCwgcm93LmlkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVDZWxsQ2xpY2soZXZlbnQsIGlkLCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZFR5cGUgIT09ICdkb2N1bWVudCcpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gOiBFdmFsdWF0ZSBpZiB0aGlzIGNhbGwgaXMgbmVjZXNzYXJ5XG4gICAgICAgICAgICBkb0hhbmRsZUNsaWNrKGV2ZW50LCBpZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5vbkNlbGxTZWxlY3Rpb25DaGFuZ2UpKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkNlbGxTZWxlY3Rpb25DaGFuZ2UoaWQsIGNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VQYWdlKGV2ZW50LCBuZXdQYWdlKSB7XG4gICAgICAgIGNyaXRlcmlhLmN1cnJlbnRQYWdlID0gbmV3UGFnZSArIDE7XG4gICAgICAgIHNldFBhZ2UobmV3UGFnZSk7XG4gICAgICAgIHNlYXJjaCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZVJvd3NQZXJQYWdlKGV2ZW50KSB7XG4gICAgICAgIHNldFJvd3NQZXJQYWdlKHJvd3NQZXJQYWdlID0+IGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIHNldFBhZ2UoMCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JzZXJ2ZVJvdyA9IChyb3cpID0+IHtcbiAgICAgICAgLypsZXQgb2JzZXJ2YWJsZVJvdyA9IG9ic2VydmFibGUocm93KTtcbiAgICAgICAgb2JzZXJ2ZShcbiAgICAgICAgICAgIG9ic2VydmFibGVSb3csXG4gICAgICAgICAgICBjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgb2xkVmFsdWUgPSBjaGFuZ2Uub2xkVmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hDZWxsKHJvdy5pZCwgY2hhbmdlLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZVJvdzsqL1xuXG4gICAgICAgIHJldHVybiByb3c7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NEYXRhKGRhdGEsIGNvbmYpIHtcbiAgICAgICAgc2V0VG90YWxOdW1iZXJPZlJvd3MoZGF0YS50b3RhbE51bWJlck9mUmVjb3JkcyA/IGRhdGEudG90YWxOdW1iZXJPZlJlY29yZHMgOiBkYXRhLnJlY29yZHMubGVuZ3RoKTtcblxuICAgICAgICByb3dzUmVmLmN1cnJlbnQgPSBkYXRhLnJlY29yZHM7XG4gICAgICAgIHVwZGF0ZVJvd0NsYXNzZXMoZGF0YS5yZWNvcmRzKTtcbiAgICAgICAgbGV0IHRhYmxlUm93cyA9IFtdO1xuICAgICAgICBsZXQgcmVjb3JkcyA9IGRhdGEucmVjb3JkcztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0YWJsZVJvd3MucHVzaChvYnNlcnZlUm93KHJlY29yZHNbaV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFJvd3ModGFibGVSb3dzKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2ggPSAoYWN0aW9uQ29uZmlnID0gbnVsbCwgZXZlbnQpID0+IHtcbiAgICAgICAgbGV0IGNvbmYgPSBjb25maWc7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoY29uZikpIHtcbiAgICAgICAgICAgIGNvbmYgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VydmljZSA9ICFVdGlscy5pc051bGwoY29uZi5kYXRhU2VydmljZSkgPyBjb25mLmRhdGFTZXJ2aWNlIDogIVV0aWxzLmlzTnVsbChhY3Rpb25Db25maWcpID8gYWN0aW9uQ29uZmlnLmRhdGFTZXJ2aWNlIDogbnVsbDtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZSkpIHtcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlVHlwZSA9IHNlcnZpY2UudHlwZTtcbiAgICAgICAgICAgIGlmICghc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZSA9ICdycGMnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdycGMnIHx8IHNlcnZpY2VUeXBlID09PSAncmVzdCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWV0aG9kID0gc2VydmljZVR5cGUgPT09ICdycGMnID8gaW52b2tlUnBjIDogaW52b2tlUmVzdDtcbiAgICAgICAgICAgICAgICBtZXRob2Qoe1xuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHByb3BzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld0lkOiBwcm9wcy52aWV3SWQsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50XG4gICAgICAgICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhKHJlc3VsdCwgY29uZik7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZS5lcnJvclR5cGUgIT09ICdJTlZBTElEX1BBUkFNRVRFUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnB1Ymxpc2hFcnJvck1lc3NhZ2UoZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBzZXJ2aWNlIHR5cGUgOiAnICsgc2VydmljZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFjdGlvbkNvbmZpZyAmJiBhY3Rpb25Db25maWcudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUoYWN0aW9uQ29uZmlnLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YShkYXRhLCBjb25mKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjcml0ZXJpYS5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIGlmICghcm93c1BlclBhZ2VMb2FkaW5nKSB7XG4gICAgICAgICAgICBzZXRSb3dzUGVyUGFnZUxvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgc2VhcmNoKCk7XG4gICAgICAgIH1cbiAgICB9LCBbcm93c1BlclBhZ2VdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICB9KTtcblxuICAgIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICB9LCBbXSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsZXQgZXZlbnRIYW5kbGluZ0NvbmZpZyA9IFV0aWxzLmlzTnVsbChjb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZykgPyB7fSA6IGNvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnO1xuICAgICAgICBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMgPSBVdGlscy5pc051bGwoZXZlbnRIYW5kbGluZ0NvbmZpZy5zdWJzY3JpcHRpb25zKSA/IFtdIDogZXZlbnRIYW5kbGluZ0NvbmZpZy5zdWJzY3JpcHRpb25zO1xuXG4gICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZFN5c3RlbVN1YnNjcmlwdGlvbnMocHJvcHMudmlld0lkLCBjb25maWcpO1xuICAgICAgICBsZXQgaXNFZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICBsZXQgdmlzaWJsZUNvbHVtbkNvdW50ID0gMDtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgbGV0IGhpZGRlbiA9IFV0aWxzLmdldENvbXBvbmVudEF0dHJpYnV0ZShjb2x1bW4sICdoaWRkZW4nLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24oaGlkZGVuLCBwcm9wcy5jb25maWcuaWQpKSB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUNvbHVtbkNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY29sdW1uID0gY29uZmlnLmNvbHVtbnNbaV07XG5cbiAgICAgICAgICAgIGlmICghaXNFZGl0YWJsZSAmJiBjb2x1bW4uYXR0cmlidXRlc1snZWRpdGFibGUnXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlzRWRpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNldEVkaXRhYmxlKHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZighY29sdW1uLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4uYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2x1bW4uYXR0cmlidXRlcy53aWR0aCA9IGV2YWx1YXRlVGFibGVDZWxsV2lkdGgocHJvcHMuc2VsZWN0aW9uTW9kZSA9PT0gJ01VTFRJUExFJywgY29sdW1uLCB2aXNpYmxlQ29sdW1uQ291bnQpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29sdW1uLmF0dHJpYnV0ZXMpICYmIGNvbHVtbi5hdHRyaWJ1dGVzWydlZGl0YWJsZSddID09PSB0cnVlICYmIFV0aWxzLmlzTnVsbChjb2x1bW4uZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0RWRpdG9yID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdEVkaXRvci5maWVsZFR5cGUgPSAnVEVYVF9GSUVMRCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEVkaXRvci5pZCA9IGNvbHVtbi5pZCArICdFZGl0b3InO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uLmVkaXRvciA9IGRlZmF1bHRFZGl0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjcml0ZXJpYS5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIGNyaXRlcmlhLmRhdGFRdWVyeU5hbWUgPSBjb25maWcuZGF0YVF1ZXJ5TmFtZTtcblxuICAgICAgICBsZXQgaGFzTG9hZEV2ZW50O1xuICAgICAgICBsZXQgbG9hZFN1YnNjcmlwdGlvbnMgPSBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMuZmlsdGVyKChzdWJzY3JpcHRpb24pID0+IHN1YnNjcmlwdGlvbi5ldmVudFR5cGUgPT09ICdDT01QT05FTlRfTE9BRCcpO1xuICAgICAgICBmb3IgKGNvbnN0IGxvYWRTdWJzY3JpcHRpb24gb2YgbG9hZFN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChsb2FkU3Vic2NyaXB0aW9uLmFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5hY3Rpb25UeXBlID09PSAnbG9hZERhdGEnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaGFzTG9hZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhdXRvTG9hZERhdGEgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnYXV0b0xvYWREYXRhJywgbnVsbCk7XG4gICAgICAgIGlmICghaGFzTG9hZEV2ZW50ICYmIChhdXRvTG9hZERhdGEgPT09IG51bGwgfHwgYXV0b0xvYWREYXRhID09PSB0cnVlKSkge1xuICAgICAgICAgICAgc2VhcmNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5DT01QT05FTlRfTE9BRCwgZXZlbnQpO1xuICAgIH0sIFtdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmRhdGEpKSB7XG4gICAgICAgICAgICBsZXQgY29uZiA9IGNvbmZpZztcbiAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoY29uZikpIHtcbiAgICAgICAgICAgICAgICBjb25mID0gVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9jZXNzRGF0YShwcm9wcy5kYXRhLCBjb25mKTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy5kYXRhXSk7XG5cbiAgICBmdW5jdGlvbiBhZGRSb3dGb2N1c0xpc3RlbmVyKHJvdykge1xuICAgICAgICAkKCcjUk9XLScgKyByb3cuaWQpXG4gICAgICAgICAgICAuZm9jdXNvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBuZXdTZWxlY3RlZCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0ZWRFbGVtZW50IG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnQgIT09IHJvdy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWQucHVzaChzZWxlY3RlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuZGlzYWJsZVJvd1NlbGVjdGlvbikgfHwgcHJvcHMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3Rpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKG5ld1NlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVSb3dDbGFzc2VzID0gKG5ld1Jvd3MpID0+IHtcbiAgICAgICAgaWYgKG5ld1Jvd3MpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb25maWcucm93QXR0cmlidXRlcyAmJiBwcm9wcy5jb25maWcucm93QXR0cmlidXRlcy5jbGFzc0V2YWx1YXRvcikge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgbmV3Um93cykge1xuICAgICAgICAgICAgICAgICAgICByb3cuY2xhc3NOYW1lID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHRPYmplY3QoJ1JPVy0nICsgcm93LmlkICsgJ2NsYXNzRXZhbHVhdG9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy5yb3dBdHRyaWJ1dGVzLmNsYXNzRXZhbHVhdG9yLCBwcm9wcy5jb25maWcuaWQsIHtpbmRleH0sIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZVJvd1JlYWRPbmx5U3RhdHVzID0gKG5ld1Jvd3MpID0+IHtcbiAgICAgICAgaWYgKG5ld1Jvd3MpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb25maWcucm93QXR0cmlidXRlcyAmJiBwcm9wcy5jb25maWcucm93QXR0cmlidXRlcy5yZWFkT25seUV2YWx1YXRvcikge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgbmV3Um93cykge1xuICAgICAgICAgICAgICAgICAgICByb3cucmVhZE9ubHkgPSBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdE9iamVjdCgnUk9XLScgKyByb3cuaWQgKyAncmVhZE9ubHlFdmFsdWF0b3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuY29uZmlnLnJvd0F0dHJpYnV0ZXMucmVhZE9ubHlFdmFsdWF0b3IsIHByb3BzLmNvbmZpZy5pZCwge2luZGV4fSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlQ29sdW1uUmVhZE9ubHlTdGF0dXMgPSAoY29sdW1uLCBuZXdSb3dzKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uYXR0cmlidXRlcyAmJiBjb2x1bW4uYXR0cmlidXRlcy5yZWFkT25seUV2YWx1YXRvcikge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIG5ld1Jvd3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJvdy5jb2x1bW5SZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICByb3cuY29sdW1uUmVhZE9ubHkgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3cuY29sdW1uUmVhZE9ubHlbY29sdW1uLmlkXSA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0T2JqZWN0KCdDT0wtJyArIHJvdy5pZCArICctJyArIGNvbHVtbi5pZCArICctcmVhZE9ubHlFdmFsdWF0b3InLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uYXR0cmlidXRlcy5yZWFkT25seUV2YWx1YXRvciwgcHJvcHMuY29uZmlnLmlkLCB7aW5kZXh9LCBudWxsKTtcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdXBkYXRlU2Nyb2xsQmFyUGFkZGluZygpO1xuICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMocHJvcHMuY29uZmlnLmlkKTtcbiAgICAgICAgcm93Q291bnQuY3VycmVudCA9IHJvd3MubGVuZ3RoO1xuXG4gICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgcm93cyk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLkRBVEFfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgIC8vIFRpbGUgZ3JpZHMgYXV0by1zZWxlY3QgdGhlIGZpcnN0IHJvdyBhZnRlciBhIGxvYWQgd2hlbiBub1xuICAgICAgICAvLyBzZWxlY3Rpb24gaXMgaW4gcGxhY2UgeWV0LCBzbyB0aGUgY29uc3VtZXIgdmlldyBhbHdheXMgaGFzIGFcbiAgICAgICAgLy8gY3VycmVudGx5LXNlbGVjdGVkIGl0ZW0gdG8gcmVuZGVyIGRldGFpbHMgZm9yLiBGaXJpbmdcbiAgICAgICAgLy8gU0VMRUNUSU9OX0NIQU5HRSBpbmxpbmUgKG5vdCB2aWEgZmlyZVNlbGVjdGlvbkV2ZW50LCB3aGljaFxuICAgICAgICAvLyB3b3VsZCByZWFkIHRoZSBzdGlsbC1zdGFsZSBgc2VsZWN0ZWRgIHN0YXRlIG9uIHRoaXMgdGljaylcbiAgICAgICAgLy8gc28gdGhlIGRvd25zdHJlYW0gc3Vic2NyaWJlciB3YWtlcyB1cCBvbiB0aGUgc2FtZSB0aWNrIGFzXG4gICAgICAgIC8vIHRoZSBkYXRhIGFycml2YWwuXG4gICAgICAgIGlmIChjb25maWc/LmdyaWRUeXBlID09PSAnVElMRScgJiYgcm93cy5sZW5ndGggPiAwICYmIHNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJZCA9IHJvd3NbMF0uaWQ7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvd0xpc3QgPSBbZmlyc3RSb3dJZF07XG4gICAgICAgICAgICBzZXRTZWxlY3RlZChmaXJzdFJvd0xpc3QpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gZ2V0U2VsZWN0ZWRSb3dzKGZpcnN0Um93TGlzdCk7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5vblNlbGVjdGlvbkNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5vblNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZFJvd3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNlbGVjdGlvbkV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCBzZWxlY3RlZFJvd3MpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuU0VMRUNUSU9OX0NIQU5HRSwgc2VsZWN0aW9uRXZlbnQpO1xuICAgICAgICB9XG4gICAgfSwgW3Jvd3NdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGRlbGV0ZWRSb3dzKSAmJiBkZWxldGVkUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIGRlbGV0ZWRSb3dzKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLlJPV19ERUxFVEVELCBldmVudCk7XG4gICAgICAgICAgICBzZXREZWxldGVkUm93cyhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0NvdW50LmN1cnJlbnQgPSByb3dzLmxlbmd0aDtcbiAgICB9LCBbZGVsZXRlZFJvd3NdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnJvd3MpKSB7XG4gICAgICAgICAgICBsZXQgcm93VmFsdWVzID0gW107XG5cbiAgICAgICAgICAgIHJvd3NSZWYuY3VycmVudCA9IHByb3BzLnJvd3M7XG4gICAgICAgICAgICB1cGRhdGVSb3dDbGFzc2VzKHByb3BzLnJvd3MpO1xuICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgcHJvcHMucm93cykge1xuICAgICAgICAgICAgICAgIHJvd1ZhbHVlcy5wdXNoKG9ic2VydmVSb3cocm93KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVwZGF0ZVJvd1JlYWRPbmx5U3RhdHVzKHByb3BzLnJvd3MpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVDb2x1bW5SZWFkT25seVN0YXR1cyhjb2x1bW4sIHByb3BzLnJvd3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByb3dzUmVmLmN1cnJlbnQgPSByb3dWYWx1ZXM7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZChbXSk7XG4gICAgICAgICAgICBzZXRSb3dzKHJvd1ZhbHVlcyk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMucm93c10pO1xuXG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB1cGRhdGVSb3dSZWFkT25seVN0YXR1cyhyb3dzKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHVwZGF0ZUNvbHVtblJlYWRPbmx5U3RhdHVzKGNvbHVtbiwgcm93cyk7XG4gICAgICAgIH1cbiAgICB9LCBbcm93c10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZmlyZVNlbGVjdGlvbkV2ZW50KCk7XG4gICAgfSwgW3NlbGVjdGVkXSk7XG5cbiAgICBjb25zdCBpc1NlbGVjdGVkID0gaWQgPT4gc2VsZWN0ZWQuaW5kZXhPZihpZCkgIT09IC0xO1xuICAgIGNvbnN0IGVkaXRvckNoYW5nZUhhbmRsZXIgPSAocm93SWQsIGZpZWxkLCB2YWx1ZSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICAgICAgICBpZiAocm93LmlkID09PSByb3dJZCkge1xuICAgICAgICAgICAgICAgIFV0aWxzLnVwZGF0ZU5lc3RlZFByb3BlcnR5KHJvdywgZmllbGQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlQ2hhbmdlQ2FsbGJhY2socm93cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzRmlsdGVyYWJsZSA9ICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5jb25maWcuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGNvbHVtbiA9IHByb3BzLmNvbmZpZy5jb2x1bW5zW2ldO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5hdHRyaWJ1dGVzWydmaWx0ZXJhYmxlJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlQ2VsbCA9IChyb3csIGNvbHVtbk5hbWUsIGNlbGxIYW5kbGUpID0+IHtcbiAgICAgICAgbGV0IHJvd0NlbGxzID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjZWxsc0VudHJ5IG9mIGNlbGxzKSB7XG4gICAgICAgICAgICBpZiAoY2VsbHNFbnRyeS5yb3dJZCA9PT0gcm93LmlkKSB7XG4gICAgICAgICAgICAgICAgcm93Q2VsbHMgPSBjZWxsc0VudHJ5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChyb3dDZWxscykgfHwgcm93Q2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByb3dDZWxscyA9IHt9O1xuICAgICAgICAgICAgcm93Q2VsbHMucm93SWQgPSByb3cuaWQ7XG4gICAgICAgICAgICBjZWxscy5wdXNoKHJvd0NlbGxzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0NlbGxzW2NvbHVtbk5hbWVdID0gY2VsbEhhbmRsZTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVmcmVzaENlbGwgPSAocm93SWQsIGNvbHVtbk5hbWUpID0+IHtcbiAgICAgICAgbGV0IHJvd0NlbGxzID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIGNlbGxzKSB7XG4gICAgICAgICAgICBpZiAoY2VsbC5yb3dJZCA9PT0gcm93SWQpIHtcbiAgICAgICAgICAgICAgICByb3dDZWxscyA9IGNlbGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChyb3dDZWxscykpIHtcbiAgICAgICAgICAgIGxldCBjZWxsID0gcm93Q2VsbHNbY29sdW1uTmFtZV07XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGNlbGwpKSB7XG4gICAgICAgICAgICAgICAgY2VsbC5hcGkucmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbW92ZUFsbFJvd0Vycm9yc0J5Q29sdW1uID0gKGNvbHVtbk5hbWUsIHJvd0Vycm9ycykgPT4ge1xuICAgICAgICBpZiAocm93RXJyb3JzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcm93RXJyb3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0Vycm9yc1tpXS5jb2x1bW4gPT09IGNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93RXJyb3JzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByb3dFcnJvckhhbmRsZXIgPSAocm93SWQsIGVycm9yLCBjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvd0Vycm9yTWFwKS5sZW5ndGggPT09IDAgfHwgIXJvd0Vycm9yTWFwW3Jvd0lkXSkge1xuICAgICAgICAgICAgcm93RXJyb3JNYXBbcm93SWRdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghcm93RXJyb3JNYXBbcm93SWRdLmZpbmQocm93RXJyb3IgPT4gcm93RXJyb3IuY29sdW1uID09PSBjb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgcm93RXJyb3JNYXBbcm93SWRdLnB1c2goZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlQWxsUm93RXJyb3JzQnlDb2x1bW4oY29sdW1uLCByb3dFcnJvck1hcFtyb3dJZF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaXNSb3dFcnJvcnNFbXB0eSA9ICgpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvd0Vycm9yTWFwKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocm93RXJyb3JNYXApKSB7XG4gICAgICAgICAgICBpZiAocm93RXJyb3JNYXBba2V5XS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVDaGFuZ2VDYWxsYmFjayA9ICh2YWx1ZVJvd3MpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHZhbHVlUm93cywgIWlzUm93RXJyb3JzRW1wdHkoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0VGlsZUxhYmVsKHJvdykge1xuICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICB7Y29uZmlnLmNvbHVtbnMubWFwKGNvbHVtbiA9PiAoXG4gICAgICAgICAgICAgICAgICAgICFjb2x1bW4uYXR0cmlidXRlcy5oaWRkZW4gP1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtjb3VudGVyKyt9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbIVV0aWxzLmlzTnVsbChjb2x1bW4uZGF0YUJpbmRpbmcpID8gY29sdW1uLmRhdGFCaW5kaW5nIDogY29sdW1uLmlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXJUaWxlKHJvdywga2V5KSB7XG4gICAgICAgIGNvbnN0IGlzSXRlbVNlbGVjdGVkID0gaXNTZWxlY3RlZChyb3cuaWQpO1xuICAgICAgICByZXR1cm4gKDxHcmlkIGl0ZW0geHMgc3R5bGU9e1V0aWxzLm1lcmdlT2JqZWN0cyhwcm9wcy5jb25maWcudGlsZVN0eWxlLCB7XG4gICAgICAgICAgICBoZWlnaHQ6ICcyMDBweCcsXG4gICAgICAgICAgICBtaW5XaWR0aDogJzIwMHB4J1xuICAgICAgICB9KX0ga2V5PXtrZXl9PlxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiBjb2xvcj17XCJzZWNvbmRhcnlcIn1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaXNJdGVtU2VsZWN0ZWQgPyAnMXB4IHNvbGlkIDFweCBzb2xpZCAjZjJhOTAwJyA6ICcxcHggc29saWQgI2UyZTJlMicsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpc0l0ZW1TZWxlY3RlZCA/ICcjZmZmOGUxJyA6ICcjZmFmYWZhJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4gZG9IYW5kbGVDbGljayhldmVudCwgcm93LmlkKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdldFRpbGVMYWJlbChyb3cpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvR3JpZD4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlclRpbGVzKCkge1xuICAgICAgICBpZiAoIXJvd3MgfHwgcm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIFRpbGUgZ3JpZCBoYXMgbm8gbmF0aXZlIGVtcHR5LXJvdyBhZmZvcmRhbmNlIGxpa2UgdGhlIHRhYmxlXG4gICAgICAgICAgICAvLyBwYXRoIChgb3VpVGFibGUtZW1wdHlgIENTUyksIHNvIHBhaW50IHRoZSBtZXNzYWdlIGlubGluZS5cbiAgICAgICAgICAgIC8vIENhbGxlciBjYW4gb3ZlcnJpZGUgdmlhIGBjb25maWcuZW1wdHlNZXNzYWdlYCBmb3Igdmlldy1cbiAgICAgICAgICAgIC8vIHNwZWNpZmljIGNvcHkgKFwiTm8gcHJvY3VyZW1lbnRzIHlldFwiLCBldGMpLlxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHByb3BzLmNvbmZpZz8uZW1wdHlNZXNzYWdlIHx8ICdObyBpdGVtcyB0byBzaG93JztcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEdyaWQgaXRlbSB4cz17MTJ9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAnMTIwcHgnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM5ZTllOWUnLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzAuODc1cmVtJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFN0eWxlOiAnaXRhbGljJyxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAge21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByb3dzLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJdGVtU2VsZWN0ZWQgPSBpc1NlbGVjdGVkKHJvdy5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbElkID0gYGVuaGFuY2VkLXRhYmxlLWNoZWNrYm94LSR7aW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5pbmRleCA9IGluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclRpbGUocm93LCBpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb2x1bW5MYXlvdXRIYW5kbGUoY29sdW1uLCBpbmRleCkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGNvbHVtbkxheW91dEhhbmRsZXNbY29sdW1uLmlkICsgaW5kZXhdKSkge1xuICAgICAgICAgICAgbGV0IGhhbmRsZSA9IHt9O1xuICAgICAgICAgICAgY29sdW1uTGF5b3V0SGFuZGxlc1tjb2x1bW4uaWQgKyBpbmRleF0gPSBoYW5kbGU7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbkxheW91dEhhbmRsZXNbY29sdW1uLmlkICsgaW5kZXhdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNlbGxFZGl0b3JIYW5kbGUoY29sdW1uKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZWRpdG9ySGFuZGxlc1tjb2x1bW4uaWQgKyBcIl9lZGl0b3JcIl0pKSB7XG4gICAgICAgICAgICBsZXQgaGFuZGxlID0ge307XG4gICAgICAgICAgICBlZGl0b3JIYW5kbGVzW2NvbHVtbi5pZCArIFwiX2VkaXRvclwiXSA9IGhhbmRsZTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWRpdG9ySGFuZGxlc1tjb2x1bW4uaWQgKyBcIl9lZGl0b3JcIl07XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgdmlzaWJsZSAmJlxuICAgICAgICA8ZGl2IGlkPXtwcm9wcy5jb25maWcuaWR9IGNsYXNzTmFtZT17VXRpbHMuZ2V0Q29tcG9uZW50QXR0cmlidXRlKHByb3BzLmNvbmZpZywgJ2NsYXNzTmFtZScsIG51bGwpfSBzdHlsZT17KFV0aWxzLmlzTnVsbChwcm9wcy5oYXNCb3JkZXIpIHx8IHByb3BzLmhhc0JvcmRlciA9PT0gdHJ1ZSkgP1xuICAgICAgICAgICAgVXRpbHMubWVyZ2VTdHlsZXMoe1xuICAgICAgICAgICAgICAgIG1hcmdpbjogJzAnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTJlMmUyJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICB9LCBwcm9wcy5jb25maWcpIDogVXRpbHMubWVyZ2VTdHlsZXMoe30sIHByb3BzLmNvbmZpZyl9PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLm5vdGVzKSA/XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy5ub3Rlcy5tYXAoKG5vdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17bm90ZUtleSsrfSBzdHlsZT17e3BhZGRpbmc6ICc4cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFsZXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAnMCd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PXtub3RlLm1lc3NhZ2VUeXBlID09PSAnV0FSTicgPyAnd2FybmluZycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZS5tZXNzYWdlVHlwZSA9PT0gJ0lORk8nID8gJycgOiAnZGFuZ2VyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Y29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCknfX0+e25vdGUubWVzc2FnZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BbGVydD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm93c1BlclBhZ2VPcHRpb25zLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5wYWdlU2l6ZSkgP1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuZ3JpZFR5cGUgPT09ICdUSUxFJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luOiAnMCAwIDhweCA4cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaWx0ZXJhYmxlKCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEYXRhR3JpZEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU9e2ZpbHRlckhhbmRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtwcm9wcy5jb25maWd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJXcmFwcGVyQ2xhc3M9e3Byb3BzLmZpbHRlcldyYXBwZXJDbGFzc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGg9e3Njcm9sbFdpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpbHRlclN1Ym1pdD17c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlcXVlc3RTb3J0PXtoYW5kbGVSZXF1ZXN0U29ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5yb290fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQgY29udGFpbmVyIHNwYWNpbmc9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQgY29udGFpbmVyIGl0ZW0geHM9ezEyfSBzcGFjaW5nPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclRpbGVzKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICc0cHggOHB4IDAgOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNlMmUyZTInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt3cmFwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFdyYXAoZS50YXJnZXQuY2hlY2tlZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4PXt7ICcmIC5NdWlGb3JtQ29udHJvbExhYmVsLWxhYmVsJzogeyBmb250U2l6ZTogJzAuNzVyZW0nIH0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiV3JhcCB0YWJsZSB0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ge2ByZXNwb25zaXZlLXRhYmxlYH0gc3R5bGU9e3toZWlnaHQ6IHByb3BzLmhlaWdodH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUgY2xhc3NOYW1lPXtgJHsnb3VpVGFibGUnICsgKHJvd3MubGVuZ3RoID09PSAwID8gJyBvdWlUYWJsZS1lbXB0eScgOiAnJyl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxTcGFjaW5nPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJ0YWJsZVRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6ICcxMDAlJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzc05hbWU9eydmaWx0ZXJIZWFkJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3dpZHRoOiAnY2FsYygxMDAlIC0gJyArIHByb3BzLnNjcm9sbFdpZHRoICsgJ3B4KSd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpbHRlcmFibGUoKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEYXRhR3JpZEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlPXtmaWx0ZXJIYW5kbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9e2NvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyV3JhcHBlckNsYXNzPXtwcm9wcy5maWx0ZXJXcmFwcGVyQ2xhc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aD17c2Nyb2xsV2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpbHRlclN1Ym1pdD17c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZXF1ZXN0U29ydD17aGFuZGxlUmVxdWVzdFNvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERhdGFHcmlkSGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17aGVhZGluZ0hhbmRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9e2NvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1TZWxlY3RlZD17c2VsZWN0ZWQubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoPXtzY3JvbGxXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdEFsbENsaWNrPXtoYW5kbGVTZWxlY3RBbGxDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlcXVlc3RTb3J0PXtoYW5kbGVSZXF1ZXN0U29ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudD17dG90YWxOdW1iZXJPZlJvd3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSb3dzKFsuLi5yb3dzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRib2R5IGNsYXNzTmFtZT17Y2xhc3Nlcy50YWJsZUJvZHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3ttYXhIZWlnaHQ6IFV0aWxzLmlzTnVsbChwcm9wcy5ib2R5TWF4SGVpZ2h0KSA/IHByb3BzLmJvZHlNYXhIZWlnaHQgOiAnNDJ2aCd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFpblRhYmxlQm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3dzLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0l0ZW1TZWxlY3RlZCA9IGlzU2VsZWN0ZWQocm93LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWxJZCA9IGBlbmhhbmNlZC10YWJsZS1jaGVja2JveC0ke2luZGV4fWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRSb3dTdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy5yb3dBdHRyaWJ1dGVzICYmIHByb3BzLmNvbmZpZy5yb3dBdHRyaWJ1dGVzLnN0eWxlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLm1lcmdlT2JqZWN0cyhwcm9wcy5jb25maWcucm93QXR0cmlidXRlcy5zdHlsZSwgZGVmYXVsdFJvd1N0eWxlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Um93U3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBoYW5kbGVSb3dNb3VzZUVudGVyKHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXtoYW5kbGVSb3dNb3VzZUxlYXZlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGhhbmRsZUNsaWNrKGV2ZW50LCByb3csIGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRvdWJsZUNsaWNrPXtldmVudCA9PiBwcm9wcy5vblJvd0RvdWJsZUNsaWNrICYmIHByb3BzLm9uUm93RG91YmxlQ2xpY2socm93LCBldmVudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNoZWNrZWQ9e2lzSXRlbVNlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXsnUk9XLScgKyByb3cuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2lzSXRlbVNlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17J291aS10YWJsZS1yb3cgJyArICgoaGlnaGxpZ2h0Um93U2VsZWN0aW9uLmN1cnJlbnQgPyBpc0l0ZW1TZWxlY3RlZCA/IGNsYXNzZXMudGFibGVTZWxlY3RlZCA6IGNsYXNzZXMudGFibGVSb3cgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAocm93LmNsYXNzTmFtZSA/ICgnICcgKyByb3cuY2xhc3NOYW1lKSA6ICcnKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc2VsZWN0aW9uTW9kZSA9PT0gJ01VTFRJUExFJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGQgcGFkZGluZz1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17TVVMVElfU0VMRUNUX0NIRUNLQk9YX0NPTF9XSURUSCArICdweCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnc2VsZWN0Q2VsbCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0l0ZW1TZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17eydhcmlhLWxhYmVsbGVkYnknOiBsYWJlbElkfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZD4gOiBudWxsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKGNvbHVtbi5hdHRyaWJ1dGVzWydoaWRkZW4nXSwgcHJvcHMuY29uZmlnLmlkKSA9PT0gdHJ1ZSA/IG51bGwgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmxheW91dCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbHVtbi5hdHRyaWJ1dGVzLndpZHRoID8gY29sdW1uLmF0dHJpYnV0ZXMud2lkdGggOiAoMTAwIC8gY29uZmlnLmNvbHVtbnMubGVuZ3RoKSArICclJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17IXByb3BzLmRpc2FibGVkICYmIGlzSXRlbVNlbGVjdGVkICYmICFVdGlscy5pc051bGwocHJvcHMuZm9ybSkgJiYgIVV0aWxzLmlzTnVsbChjb2x1bW4uZWRpdG9yKSA/ICdlZGl0Q2VsbCcgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4ICsgXCJfXCIgKyBjb2x1bW4uaWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU9e2NyZWF0ZUNvbHVtbkxheW91dEhhbmRsZShjb2x1bW4sIGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXggKyBcIl9cIiArIGNvbHVtbi5pZCArIFwiX2xheW91dFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVSb3c9e3Jvd3MuZmluZCgocikgPT4gci5pZCA9PT0gcm93LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz17SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwcm9wcy5jb25maWcuY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uLmlkKS5sYXlvdXQpKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfSBwYXJlbnQ9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGQ+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4uYXR0cmlidXRlcy53aWR0aCA/IGNvbHVtbi5hdHRyaWJ1dGVzLndpZHRoIDogKDEwMCAvIGNvbmZpZy5jb2x1bW5zLmxlbmd0aCkgKyAnJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9eyFwcm9wcy5kaXNhYmxlZCAmJiBpc0l0ZW1TZWxlY3RlZCAmJiAhVXRpbHMuaXNOdWxsKGNvbHVtbi5lZGl0b3IpID8gJ2VkaXRDZWxsJyA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXggKyBcIl9cIiArIGNvbHVtbi5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4gaGFuZGxlQ2VsbENsaWNrKGV2ZW50LCByb3cuaWQsIGNvbHVtbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsQ29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD17d3JhcH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUm93RXJyb3I9e3Jvd0Vycm9ySGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17Y3JlYXRlQ2VsbEVkaXRvckhhbmRsZShjb2x1bW4pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkPXtwcm9wcy52aWV3SWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3I9eyFwcm9wcy5kaXNhYmxlZCAmJiAhcm93LnJlYWRPbmx5ICYmICFyb3cuY29sdW1uUmVhZE9ubHk/Lltjb2x1bW4/LmlkXSA/IGNvbHVtbi5lZGl0b3IgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmQ2FsbGJhY2s9e2NyZWF0ZUNlbGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD17aXNJdGVtU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I9e2NvbHVtbi52YWxpZGF0b3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZUhhbmRsZXI9e2VkaXRvckNoYW5nZUhhbmRsZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db25maWc9e2NvbHVtbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFCaW5kaW5nPXshVXRpbHMuaXNOdWxsKGNvbHVtbi5kYXRhQmluZGluZykgPyBjb2x1bW4uZGF0YUJpbmRpbmcgOiBjb2x1bW4uaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlPXtjb2x1bW4uZmllbGRUeXBlIHx8IGNvbHVtbi5lZGl0b3I/LmZpZWxkVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxGb3JtYXR0ZXI9e2NvbHVtbi5jZWxsRm9ybWF0dGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JpdGVyaWE9e2NyaXRlcmlhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuYXR0cmlidXRlcz8ucGFnaW5hdGlvbikgJiYgKFV0aWxzLmlzTnVsbChwcm9wcy5wYWdpbmF0aW9uKSB8fCBwcm9wcy5wYWdpbmF0aW9uID09PSB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5wYWdpbmF0aW9uICYmIHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5wYWduYXRpb24gPT09IHRydWUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFnaW5hdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVQYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJncmlkLXRhYmxlLXBhZ2luYXRpb25cIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93c1BlclBhZ2VPcHRpb25zPXtyb3dzUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudD1cImRpdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PXt0b3RhbE51bWJlck9mUm93c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93c1BlclBhZ2U9e3Jvd3NQZXJQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlPXtwYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrSWNvbkJ1dHRvblByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbCc6ICdwcmV2aW91cyBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEljb25CdXR0b25Qcm9wcz17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiAnbmV4dCBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QYWdlQ2hhbmdlPXtoYW5kbGVDaGFuZ2VQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJvd3NQZXJQYWdlQ2hhbmdlPXtoYW5kbGVDaGFuZ2VSb3dzUGVyUGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLDBCQUFBLEdBQUFGLE9BQUE7QUFDQUEsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sZUFB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
|
|
1165
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfcmVhY3RTdXBlclJlc3BvbnNpdmVUYWJsZSIsIl9DaGVja2JveCIsIl9VdGlscyIsIl9SZXN0U2VydmljZSIsIl9EYXRhR3JpZEZpbHRlciIsIl9EYXRhR3JpZEhlYWRpbmciLCJfVGFibGVDZWxsQ29udGVudCIsIl9UYWJsZVBhZ2luYXRpb24iLCJfY29sb3JzIiwiX0V2ZW50IiwiX09ic2VydmFibGUiLCJfRXZlbnRUeXBlIiwiX0dyaWQiLCJfQnV0dG9uIiwiJCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0FsZXJ0IiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9MYXlvdXQiLCJfRHluYW1pY0pTIiwiX1N3aXRjaCIsIl9Gb3JtQ29udHJvbExhYmVsIiwiX0dyYWJDb250ZXh0IiwiX0N1cnNvck92ZXJsYXkiLCJfcmVhY3RIdG1sUmVuZGVyZXIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJIYW5kbGViYXJzIiwicmVnaXN0ZXJIZWxwZXIiLCJlcSIsInYxIiwidjIiLCJuZSIsImx0IiwiZ3QiLCJsdGUiLCJndGUiLCJhbmQiLCJBcnJheSIsInByb3RvdHlwZSIsImV2ZXJ5IiwiYXJndW1lbnRzIiwiQm9vbGVhbiIsIm9yIiwic2xpY2UiLCJzb21lIiwiTVVMVElfU0VMRUNUX0NIRUNLQk9YX0NPTF9XSURUSCIsImV4cG9ydHMiLCJldmFsdWF0ZVRhYmxlQ2VsbFdpZHRoIiwibXVsdGlTZWxlY3QiLCJjb2x1bW4iLCJjb2x1bW5Db3VudCIsIndpZHRoIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNFeHByZXNzaW9uIiwiYXR0cmlidXRlcyIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHQiLCJjb25jYXQiLCJpZCIsIlV0aWxzIiwiaXNOdWxsIiwiZGVzYyIsImEiLCJiIiwib3JkZXJCeSIsInN0YWJsZVNvcnQiLCJhcnJheSIsImNtcCIsInN0YWJpbGl6ZWRUaGlzIiwibWFwIiwiZWwiLCJpbmRleCIsInNvcnQiLCJvcmRlciIsImdldFNvcnRpbmciLCJ1c2VTdHlsZXMiLCJtYWtlU3R5bGVzIiwidGhlbWUiLCJyb290IiwicGFwZXIiLCJoZWlnaHQiLCJwb3NpdGlvbiIsInpJbmRleCIsInNjcm9sbFBhZGRpbmciLCJwYWRkaW5nIiwibm9TY3JvbGxQYWRkaW5nIiwidGFibGVCb2R5IiwiZGlzcGxheSIsIm92ZXJmbG93WSIsInRhYmxlU2VsZWN0ZWQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJncmV5MzAwIiwiYmFja2dyb3VuZCIsInRhYmxlUm93IiwidGFibGVXcmFwcGVyIiwidGFibGUiLCJ2aXN1YWxseUhpZGRlbiIsImJvcmRlciIsImNsaXAiLCJtYXJnaW4iLCJ0b3AiLCJEYXRhR3JpZCIsIlJlYWN0IiwibWVtbyIsInByb3BzIiwiX2NvbmZpZyRhdHRyaWJ1dGVzIiwiX3Byb3BzJGNvbmZpZyRhdHRyaWJ1IiwiX3Byb3BzJGNvbmZpZyRhdHRyaWJ1MiIsIl9wcm9wcyRjb25maWckYXR0cmlidTMiLCJjbGFzc2VzIiwic2V0T3JkZXIiLCJ1c2VTdGF0ZSIsImNvbmZpZyIsInBhcnNlQ29uZmlnIiwidmlld0lkIiwic2V0T3JkZXJCeSIsInNlbGVjdGVkIiwic2V0U2VsZWN0ZWQiLCJ0b3RhbE51bWJlck9mUm93cyIsInNldFRvdGFsTnVtYmVyT2ZSb3dzIiwiY3JpdGVyaWEiLCJwYWdlIiwic2V0UGFnZSIsInJvd3MiLCJzZXRSb3dzIiwiZGVsZXRlZFJvd3MiLCJzZXREZWxldGVkUm93cyIsImVkaXRhYmxlIiwic2V0RWRpdGFibGUiLCJzY3JvbGxXaWR0aCIsInNldFNjcm9sbFdpZHRoIiwicm93c1BlclBhZ2VPcHRpb25zIiwicm93c1BlclBhZ2VMb2FkaW5nIiwic2V0Um93c1BlclBhZ2VMb2FkaW5nIiwicm93c1BlclBhZ2UiLCJzZXRSb3dzUGVyUGFnZSIsInBhZ2VTaXplIiwiaGlnaGxpZ2h0Um93U2VsZWN0aW9uIiwidXNlUmVmIiwiZGlzYWJsZVJvd1NlbGVjdGlvbiIsImNlbGxzIiwiaGVhZGluZ0hhbmRsZSIsImZpbHRlckhhbmRsZSIsImNvbHVtbkxheW91dEhhbmRsZXMiLCJlZGl0b3JIYW5kbGVzIiwicm93RXJyb3JNYXAiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsIndyYXAiLCJzZXRXcmFwIiwicm93Q291bnQiLCJyb3dzUmVmIiwibm90ZUtleSIsImNvbHVtbldpZHRocyIsImRyYWdTcGVjIiwicm93R3JhYlNwZWMiLCJyb3ciLCJyb3dzR3JhYmJhYmxlIiwiZW5hYmxlZCIsImFwaSIsInBhcmFtZXRlcnMiLCJpc0ZpbHRlcmFibGUiLCJnZXRQYXJhbWV0ZXJzIiwic2VsZWN0aW9uIiwic2VsZWN0ZWRSb3dzIiwibGVuZ3RoIiwiaiIsInB1c2giLCJjb2x1bW5EYXRhQmluZGluZ3MiLCJjb2x1bW5OYW1lcyIsImNvbHVtbnMiLCJkYXRhQmluZGluZyIsImdldENoaWxkcmVuIiwiY2hpbGRyZW4iLCJjaGlsZCIsInByb3BlcnRpZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHkiLCJjb2x1bW5MYXlvdXRIYW5kbGUiLCJtb3JlQ2hpbGRyZW4iLCJlZGl0b3JIYW5kbGUiLCJsb2FkRGF0YSIsImFjdGlvbkNvbmZpZyIsImV2ZW50Iiwic2VhcmNoIiwiZGVsZXRlU2VsZWN0ZWRSb3dzIiwibmV3Um93cyIsImZpbHRlciIsImlzU2VsZWN0ZWQiLCJnZXRTZWxlY3RlZFJvd3MiLCJzcGxpY2UiLCJuZXdSb3ciLCJvblNlbGVjdGlvbkNoYW5nZSIsInVwZGF0ZVNjcm9sbEJhclBhZGRpbmciLCJjdXJyZW50IiwidmFsdWVDaGFuZ2VDYWxsYmFjayIsImNsZWFyIiwiRXZlbnQiLCJoYW5kbGUiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJTRUxFQ1RJT05fQ0hBTkdFIiwiZGVsZXRlUm93cyIsInJvd0lkcyIsImlkU2V0IiwiU2V0IiwicmVtYWluaW5nIiwic2VsZWN0IiwiYWRkUm93cyIsIm9ic2VydmVSb3ciLCJuZXdTZWxlY3Rpb24iLCJudW1iZXJPZlBhZ2VzIiwicmVmcmVzaCIsInBhcnNlZENvbmZpZyIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJmb3JtQXBpIiwiaGFuZGxlUm93R3JhYlRvZ2dsZSIsImlzUm93R3JhYmJhYmxlIiwiR3JhYkNvbnRleHQiLCJpc0FjdGl2ZSIsImdyYWIiLCJyb3dJbmRleCIsImNvbXBvbmVudElkIiwiQ3Vyc29yT3ZlcmxheSIsInNob3ciLCJST1dfR1JBQl9TVEFSVCIsInRib2R5IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJ3aW5kb3ciLCJvbnJlc2l6ZSIsImhhbmRsZVJlcXVlc3RTb3J0IiwiaXNEZXNjIiwiaGFuZGxlU2VsZWN0QWxsQ2xpY2siLCJ0YXJnZXQiLCJjaGVja2VkIiwibmV3U2VsZWN0ZWRzIiwibmFtZSIsImVuYWJsZUZvcm1NYXJrZXJzIiwiZG9IYW5kbGVDbGljayIsImV4aXN0aW5nSW5kZXgiLCJpbmRleE9mIiwibmV3U2VsZWN0ZWQiLCJmaXJlU2VsZWN0aW9uRXZlbnQiLCJncmlkVHlwZSIsImlzUm93RHJhZ0Rpc2FibGVkIiwiZGlzYWJsZWRXaGVuIiwiZXhlY3V0ZVNjcmlwdE9iamVjdCIsInNldEN1cnNvciIsImN1cnNvciIsImJvZHkiLCJzdHlsZSIsImhhbmRsZVJvd01vdXNlRW50ZXIiLCJoYW5kbGVSb3dNb3VzZUxlYXZlIiwiaGFuZGxlQ2xpY2siLCJjbG9zZXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwib25DZWxsU2VsZWN0aW9uQ2hhbmdlIiwiaGFuZGxlQ2VsbENsaWNrIiwiZmllbGRUeXBlIiwiaGFuZGxlQ2hhbmdlUGFnZSIsIm5ld1BhZ2UiLCJjdXJyZW50UGFnZSIsImhhbmRsZUNoYW5nZVJvd3NQZXJQYWdlIiwidmFsdWUiLCJwcm9jZXNzRGF0YSIsImRhdGEiLCJjb25mIiwidG90YWxOdW1iZXJPZlJlY29yZHMiLCJyZWNvcmRzIiwidXBkYXRlUm93Q2xhc3NlcyIsInRhYmxlUm93cyIsInVuZGVmaW5lZCIsInNlcnZpY2UiLCJkYXRhU2VydmljZSIsInNlcnZpY2VUeXBlIiwidHlwZSIsIm1ldGhvZCIsImludm9rZVJwYyIsImludm9rZVJlc3QiLCJjb21wb25lbnQiLCJ0aGVuIiwicmVzdWx0IiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJlcnJvclR5cGUiLCJwdWJsaXNoRXJyb3JNZXNzYWdlIiwiRXJyb3IiLCJyZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUiLCJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwic3Vic2NyaXB0aW9ucyIsImFkZFN1YnNjcmlwdGlvbnMiLCJhZGRTeXN0ZW1TdWJzY3JpcHRpb25zIiwiaXNFZGl0YWJsZSIsInZpc2libGVDb2x1bW5Db3VudCIsImhpZGRlbiIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsInNlbGVjdGlvbk1vZGUiLCJlZGl0b3IiLCJkZWZhdWx0RWRpdG9yIiwiZGF0YVF1ZXJ5TmFtZSIsImhhc0xvYWRFdmVudCIsImxvYWRTdWJzY3JpcHRpb25zIiwic3Vic2NyaXB0aW9uIiwiZXZlbnRUeXBlIiwibG9hZFN1YnNjcmlwdGlvbiIsImFjdGlvbnMiLCJhY3Rpb24iLCJhY3Rpb25UeXBlIiwiYXV0b0xvYWREYXRhIiwiQ09NUE9ORU5UX0xPQUQiLCJhZGRSb3dGb2N1c0xpc3RlbmVyIiwiZm9jdXNvdXQiLCJzZWxlY3RlZEVsZW1lbnQiLCJyb3dBdHRyaWJ1dGVzIiwiY2xhc3NFdmFsdWF0b3IiLCJjbGFzc05hbWUiLCJ1cGRhdGVSb3dSZWFkT25seVN0YXR1cyIsInJlYWRPbmx5RXZhbHVhdG9yIiwicmVhZE9ubHkiLCJ1cGRhdGVDb2x1bW5SZWFkT25seVN0YXR1cyIsImNvbHVtblJlYWRPbmx5IiwicHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMiLCJEQVRBX0FSUklWRUQiLCJvblJvd3NMb2FkZWQiLCJhdXRvU2VsZWN0IiwidGlsZUF1dG9TZWxlY3QiLCJmaXJzdFJvd0lkIiwiZmlyc3RSb3dMaXN0Iiwic2VsZWN0aW9uRXZlbnQiLCJST1dfREVMRVRFRCIsInJvd1ZhbHVlcyIsImVkaXRvckNoYW5nZUhhbmRsZXIiLCJyb3dJZCIsImZpZWxkIiwidXBkYXRlTmVzdGVkUHJvcGVydHkiLCJjcmVhdGVDZWxsIiwiY29sdW1uTmFtZSIsImNlbGxIYW5kbGUiLCJyb3dDZWxscyIsImNlbGxzRW50cnkiLCJyZWZyZXNoQ2VsbCIsImNlbGwiLCJyZW1vdmVBbGxSb3dFcnJvcnNCeUNvbHVtbiIsInJvd0Vycm9ycyIsInJvd0Vycm9ySGFuZGxlciIsImtleXMiLCJmaW5kIiwicm93RXJyb3IiLCJpc1Jvd0Vycm9yc0VtcHR5Iiwia2V5IiwidmFsdWVSb3dzIiwidmFsdWVDaGFuZ2VIYW5kbGVyIiwidGlsZVRlbXBsYXRlQ2FjaGVSZWYiLCJmbiIsImdldFRpbGVMYWJlbCIsInRpbGVEaXNwbGF5VGVtcGxhdGUiLCJjb21waWxlIiwiaHRtbCIsImNyZWF0ZUVsZW1lbnQiLCJjb3VudGVyIiwicmVhZE5lc3RlZFByb3BlcnR5IiwicmVuZGVyVGlsZSIsImlzSXRlbVNlbGVjdGVkIiwiaXRlbSIsInhzIiwibWVyZ2VPYmplY3RzIiwidGlsZVN0eWxlIiwibWluV2lkdGgiLCJ2YXJpYW50IiwiY29sb3IiLCJvbkNsaWNrIiwicmVuZGVyVGlsZXMiLCJfcHJvcHMkY29uZmlnIiwibWVzc2FnZSIsImVtcHR5TWVzc2FnZSIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsIm1pbkhlaWdodCIsImZvbnRTaXplIiwiZm9udFN0eWxlIiwiRnJhZ21lbnQiLCJsYWJlbElkIiwiY3JlYXRlQ29sdW1uTGF5b3V0SGFuZGxlIiwiY3JlYXRlQ2VsbEVkaXRvckhhbmRsZSIsImhhc0JvcmRlciIsIm1lcmdlU3R5bGVzIiwiYm9yZGVyUmFkaXVzIiwibm90ZXMiLCJub3RlIiwibWFyZ2luQm90dG9tIiwibWVzc2FnZVR5cGUiLCJpbmNsdWRlcyIsImZpbHRlcldyYXBwZXJDbGFzcyIsIm9uRmlsdGVyU3VibWl0Iiwib25SZXF1ZXN0U29ydCIsImNvbnRhaW5lciIsInNwYWNpbmciLCJib3JkZXJCb3R0b20iLCJjb250cm9sIiwib25DaGFuZ2UiLCJzeCIsImxhYmVsIiwiVGFibGUiLCJjZWxsU3BhY2luZyIsIm51bVNlbGVjdGVkIiwib25TZWxlY3RBbGxDbGljayIsInJlc2l6ZUhhbmRsZXIiLCJUYm9keSIsIm1heEhlaWdodCIsImJvZHlNYXhIZWlnaHQiLCJkZWZhdWx0Um93U3R5bGUiLCJmbGV4V3JhcCIsIlRyIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwib25Eb3VibGVDbGljayIsIm9uUm93RG91YmxlQ2xpY2siLCJyb2xlIiwidGFiSW5kZXgiLCJUZCIsImlucHV0UHJvcHMiLCJfcm93JGNvbHVtblJlYWRPbmx5IiwiX2NvbHVtbiRlZGl0b3IiLCJsYXlvdXQiLCJhbGlnbiIsImRpc2FibGVkIiwiZm9ybSIsIkxheW91dCIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImNvbCIsInBhcmVudCIsIm9uUm93RXJyb3IiLCJyZWZDYWxsYmFjayIsInZhbGlkYXRvciIsImNvbHVtbkNvbmZpZyIsImNvbnRlbnRUeXBlIiwiY2VsbEZvcm1hdHRlciIsInBhZ2luYXRpb24iLCJwYWduYXRpb24iLCJjb3VudCIsImJhY2tJY29uQnV0dG9uUHJvcHMiLCJuZXh0SWNvbkJ1dHRvblByb3BzIiwib25QYWdlQ2hhbmdlIiwib25Sb3dzUGVyUGFnZUNoYW5nZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9EYXRhR3JpZC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7bWFrZVN0eWxlc30gZnJvbSAnQG11aS9zdHlsZXMnO1xuaW1wb3J0IHtUYWJsZSwgVGJvZHksIFRkLCBUcn0gZnJvbSAncmVhY3Qtc3VwZXItcmVzcG9uc2l2ZS10YWJsZSc7XG5pbXBvcnQgJ3JlYWN0LXN1cGVyLXJlc3BvbnNpdmUtdGFibGUvZGlzdC9TdXBlclJlc3BvbnNpdmVUYWJsZVN0eWxlLmNzcyc7XG5pbXBvcnQgQ2hlY2tib3ggZnJvbSAnQG11aS9tYXRlcmlhbC9DaGVja2JveCc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vVXRpbHMnO1xuaW1wb3J0ICcuL0RhdGFHcmlkLmNzcyc7XG5pbXBvcnQge2ludm9rZVJlc3QsIGludm9rZVJwY30gZnJvbSAnLi4vUmVzdFNlcnZpY2UnO1xuaW1wb3J0IERhdGFHcmlkRmlsdGVyIGZyb20gJy4vRGF0YUdyaWRGaWx0ZXInO1xuaW1wb3J0IERhdGFHcmlkSGVhZGluZyBmcm9tICcuL0RhdGFHcmlkSGVhZGluZyc7XG5pbXBvcnQgVGFibGVDZWxsQ29udGVudCBmcm9tICcuL1RhYmxlQ2VsbENvbnRlbnQnO1xuaW1wb3J0IFRhYmxlUGFnaW5hdGlvbiBmcm9tICdAbXVpL21hdGVyaWFsL1RhYmxlUGFnaW5hdGlvbic7XG5pbXBvcnQge2dyZXkzMDB9IGZyb20gJ21hdGVyaWFsLXVpL3N0eWxlcy9jb2xvcnMnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uL2V2ZW50L0V2ZW50JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi4vZXZlbnQvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gJy4uL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQgR3JpZCBmcm9tICdAbXVpL21hdGVyaWFsL0dyaWQnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgQWxlcnQgZnJvbSAncmVhY3QtYm9vdHN0cmFwL0FsZXJ0JztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCB7TGF5b3V0fSBmcm9tICcuL2xheW91dC9MYXlvdXQnO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tIFwiLi4vRHluYW1pY0pTXCI7XG5pbXBvcnQgU3dpdGNoIGZyb20gJ0BtdWkvbWF0ZXJpYWwvU3dpdGNoJztcbmltcG9ydCBGb3JtQ29udHJvbExhYmVsIGZyb20gJ0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbCc7XG5pbXBvcnQgR3JhYkNvbnRleHQgZnJvbSAnLi4vaW50ZXJhY3Rpb24vR3JhYkNvbnRleHQnO1xuaW1wb3J0IEN1cnNvck92ZXJsYXkgZnJvbSBcIi4uL2ludGVyYWN0aW9uL0N1cnNvck92ZXJsYXlcIjtcbmltcG9ydCBIVE1MUmVuZGVyZXIgZnJvbSAncmVhY3QtaHRtbC1yZW5kZXJlcic7XG5cbmNvbnN0IEhhbmRsZWJhcnMgPSByZXF1aXJlKCdoYW5kbGViYXJzJyk7XG5cbi8vIFJlZ2lzdGVyIHRoZSBzYW1lIGNvbnZlbmllbmNlIGhlbHBlcnMgSHRtbFBhbmVsIGV4cG9zZXMgc28gYVxuLy8gdGlsZURpc3BsYXlUZW1wbGF0ZSBoYXMgYWNjZXNzIHRvIHt7I2lmIChlcSAuLi4pfX0gLyB7eyNpZiAoZ3QgLi4uKX19IGV0Yy5cbi8vIElkZW1wb3RlbnQgb24gbXVsdGlwbGUgaW1wb3J0cyDigJQgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlciBqdXN0IG92ZXJ3cml0ZXMuXG5IYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKHtcbiAgICBlcTogKHYxLCB2MikgPT4gdjEgPT09IHYyLFxuICAgIG5lOiAodjEsIHYyKSA9PiB2MSAhPT0gdjIsXG4gICAgbHQ6ICh2MSwgdjIpID0+IHYxIDwgdjIsXG4gICAgZ3Q6ICh2MSwgdjIpID0+IHYxID4gdjIsXG4gICAgbHRlOiAodjEsIHYyKSA9PiB2MSA8PSB2MixcbiAgICBndGU6ICh2MSwgdjIpID0+IHYxID49IHYyLFxuICAgIGFuZCgpIHsgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKGFyZ3VtZW50cywgQm9vbGVhbik7IH0sXG4gICAgb3IoKSB7IHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIC0xKS5zb21lKEJvb2xlYW4pOyB9XG59KTtcblxuZXhwb3J0IGNvbnN0IE1VTFRJX1NFTEVDVF9DSEVDS0JPWF9DT0xfV0lEVEggPSA2NDtcblxuZnVuY3Rpb24gZXZhbHVhdGVUYWJsZUNlbGxXaWR0aChtdWx0aVNlbGVjdCwgY29sdW1uLCBjb2x1bW5Db3VudCkge1xuXG4gICAgbGV0IHdpZHRoID0gYXBwbGljYXRpb25NYW5hZ2VyLmlzRXhwcmVzc2lvbihjb2x1bW4uYXR0cmlidXRlc1snd2lkdGgnXSkgP1xuICAgICAgICBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdChgcG9wdXBUaXRsZV8ke2NvbHVtbi5pZH1gLGNvbHVtbi5hdHRyaWJ1dGVzWyd3aWR0aCddLCBjb2x1bW4pIDogY29sdW1uLmF0dHJpYnV0ZXNbJ3dpZHRoJ107XG5cbiAgICByZXR1cm4gbXVsdGlTZWxlY3QgPT09IHRydWUgP1xuICAgICAgICAnY2FsYygnICsgKCFVdGlscy5pc051bGwod2lkdGgpID8gd2lkdGggOlxuICAgICAgICAgICAgKDEwMCAvIGNvbHVtbkNvdW50KSArICclJykgKyAnIC0gJyArIChNVUxUSV9TRUxFQ1RfQ0hFQ0tCT1hfQ09MX1dJRFRIIC8gY29sdW1uQ291bnQpICsgJ3B4KSdcbiAgICAgICAgOlxuICAgICAgICAodHlwZW9mIHdpZHRoICE9PSAndW5kZWZpbmVkJyA/IHdpZHRoIDogKDEwMCAvIGNvbHVtbkNvdW50KSArICclJyk7XG59XG5cbmZ1bmN0aW9uIGRlc2MoYSwgYiwgb3JkZXJCeSkge1xuICAgIGlmIChiW29yZGVyQnldIDwgYVtvcmRlckJ5XSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChiW29yZGVyQnldID4gYVtvcmRlckJ5XSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHN0YWJsZVNvcnQoYXJyYXksIGNtcCkge1xuICAgIGNvbnN0IHN0YWJpbGl6ZWRUaGlzID0gYXJyYXkubWFwKChlbCwgaW5kZXgpID0+IFtlbCwgaW5kZXhdKTtcbiAgICBzdGFiaWxpemVkVGhpcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yZGVyID0gY21wKGFbMF0sIGJbMF0pO1xuICAgICAgICBpZiAob3JkZXIgIT09IDApIHJldHVybiBvcmRlcjtcbiAgICAgICAgcmV0dXJuIGFbMV0gLSBiWzFdO1xuICAgIH0pO1xuICAgIHJldHVybiBzdGFiaWxpemVkVGhpcy5tYXAoZWwgPT4gZWxbMF0pO1xufVxuXG5mdW5jdGlvbiBnZXRTb3J0aW5nKG9yZGVyLCBvcmRlckJ5KSB7XG4gICAgcmV0dXJuIG9yZGVyID09PSAnZGVzYycgPyAoYSwgYikgPT4gZGVzYyhhLCBiLCBvcmRlckJ5KSA6IChhLCBiKSA9PiAtZGVzYyhhLCBiLCBvcmRlckJ5KTtcbn1cblxuY29uc3QgdXNlU3R5bGVzID0gbWFrZVN0eWxlcyh0aGVtZSA9PiAoe1xuICAgIHJvb3Q6IHtcbiAgICAgICAgd2lkdGg6ICcxMDAlJ1xuICAgIH0sXG4gICAgcGFwZXI6IHtcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICB6SW5kZXg6ICcwJyxcbiAgICB9LFxuICAgIHNjcm9sbFBhZGRpbmc6IHtcbiAgICAgICAgcGFkZGluZzogJzhweCAhaW1wb3J0YW50J1xuICAgIH0sXG4gICAgbm9TY3JvbGxQYWRkaW5nOiB7XG4gICAgICAgIHBhZGRpbmc6ICcwICFpbXBvcnRhbnQnLFxuICAgICAgICB3aWR0aDogJzFweCAhaW1wb3J0YW50J1xuICAgIH0sXG4gICAgdGFibGVCb2R5OiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgIG92ZXJmbG93WTogJ2F1dG8nXG4gICAgfSxcbiAgICB0YWJsZVNlbGVjdGVkOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZ3JleTMwMCxcbiAgICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2YxZjFmMSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdGFibGVSb3c6IHtcbiAgICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2YxZjFmMSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdGFibGVXcmFwcGVyOiB7XG4gICAgICAgIGhlaWdodDogJzEwMCUnXG4gICAgfSxcbiAgICB0YWJsZToge1xuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB9LFxuICAgIHZpc3VhbGx5SGlkZGVuOiB7XG4gICAgICAgIGJvcmRlcjogMCxcbiAgICAgICAgY2xpcDogJ3JlY3QoMCAwIDAgMCknLFxuICAgICAgICBoZWlnaHQ6IDEsXG4gICAgICAgIG1hcmdpbjogLTEsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICB0b3A6IDIwLFxuICAgICAgICB3aWR0aDogMSxcbiAgICB9XG59KSk7XG5cbmV4cG9ydCBjb25zdCBEYXRhR3JpZCA9IFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHVzZVN0eWxlcygpO1xuICAgIGNvbnN0IFtvcmRlciwgc2V0T3JkZXJdID0gUmVhY3QudXNlU3RhdGUoJ2Rlc2MnKTtcbiAgICBjb25zdCBbY29uZmlnXSA9IFJlYWN0LnVzZVN0YXRlKFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKSk7XG4gICAgY29uc3QgW29yZGVyQnksIHNldE9yZGVyQnldID0gUmVhY3QudXNlU3RhdGUoJ2lkJyk7XG4gICAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3RvdGFsTnVtYmVyT2ZSb3dzLCBzZXRUb3RhbE51bWJlck9mUm93c10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbY3JpdGVyaWFdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtwYWdlLCBzZXRQYWdlXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtyb3dzLCBzZXRSb3dzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbZGVsZXRlZFJvd3MsIHNldERlbGV0ZWRSb3dzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbZWRpdGFibGUsIHNldEVkaXRhYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc2Nyb2xsV2lkdGgsIHNldFNjcm9sbFdpZHRoXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtyb3dzUGVyUGFnZU9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGUoWzE1LCAzMCwgNDUsIDYwLCA3NSwgMTUwLCAzMDBdKTtcbiAgICBjb25zdCBbcm93c1BlclBhZ2VMb2FkaW5nLCBzZXRSb3dzUGVyUGFnZUxvYWRpbmddID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gICAgY29uc3QgW3Jvd3NQZXJQYWdlLCBzZXRSb3dzUGVyUGFnZV0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5jb25maWcucGFnZVNpemUpO1xuICAgIGNvbnN0IGhpZ2hsaWdodFJvd1NlbGVjdGlvbiA9IFJlYWN0LnVzZVJlZighVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5oaWdobGlnaHRSb3dTZWxlY3Rpb24pXG4gICAgICAgID8gcHJvcHMuY29uZmlnLmhpZ2hsaWdodFJvd1NlbGVjdGlvbiA6ICFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3Rpb24pID8gIXByb3BzLmNvbmZpZy5kaXNhYmxlUm93U2VsZWN0aW9uIDogdHJ1ZSk7XG4gICAgY29uc3QgW2NlbGxzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbaGVhZGluZ0hhbmRsZV0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2ZpbHRlckhhbmRsZV0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2NvbHVtbkxheW91dEhhbmRsZXNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtlZGl0b3JIYW5kbGVzXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbcm93RXJyb3JNYXBdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFt3cmFwLCBzZXRXcmFwXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCByb3dDb3VudCA9IFJlYWN0LnVzZVJlZigtMSk7XG4gICAgY29uc3Qgcm93c1JlZiA9IFJlYWN0LnVzZVJlZihbXSk7XG4gICAgbGV0IG5vdGVLZXkgPSAwO1xuICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IFJlYWN0LnVzZVJlZih7fSk7XG5cbiAgICBjb25zdCBkcmFnU3BlYyA9IGNvbmZpZy5hdHRyaWJ1dGVzPy5kcmFnU3BlYyB8fCB7fTtcbiAgICBjb25zdCByb3dHcmFiU3BlYyA9IGRyYWdTcGVjLnJvdyB8fCB7fTtcbiAgICBjb25zdCByb3dzR3JhYmJhYmxlID0gcm93R3JhYlNwZWMuZW5hYmxlZCA9PT0gdHJ1ZTtcblxuICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBjcml0ZXJpYSgpIHtcbiAgICAgICAgICAgICAgICBjcml0ZXJpYS5wYXJhbWV0ZXJzID0gaXNGaWx0ZXJhYmxlKCkgPyBmaWx0ZXJIYW5kbGUuYXBpLmdldFBhcmFtZXRlcnMoKSA6IFtdO1xuICAgICAgICAgICAgICAgIGNyaXRlcmlhLnBhZ2VTaXplID0gcm93c1BlclBhZ2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY3JpdGVyaWE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvd3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFtpXSA9PT0gcm93c1tqXS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHJvd3Nbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkUm93cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgY29sdW1uRGF0YUJpbmRpbmdzKCkge1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5OYW1lcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbiA9IGNvbmZpZy5jb2x1bW5zW2ldO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5wdXNoKCFVdGlscy5pc051bGwoY29sdW1uLmRhdGFCaW5kaW5nKSA/IGNvbHVtbi5kYXRhQmluZGluZyA6IGNvbHVtbi5pZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbk5hbWVzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldENoaWxkcmVuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGVhZGluZ0hhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgaGVhZGluZ0hhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWx0ZXJIYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZpbHRlckhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNvbHVtbkxheW91dEhhbmRsZXMpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1uTGF5b3V0SGFuZGxlID0gY29sdW1uTGF5b3V0SGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY29sdW1uTGF5b3V0SGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29sdW1uTGF5b3V0SGFuZGxlLmFwaSkgJiYgIVV0aWxzLmlzTnVsbChjb2x1bW5MYXlvdXRIYW5kbGUuYXBpLmdldENoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vcmVDaGlsZHJlbiA9IGNvbHVtbkxheW91dEhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1vcmVDaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG1vcmVDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZWRpdG9ySGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlZGl0b3JIYW5kbGUgPSBlZGl0b3JIYW5kbGVzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChlZGl0b3JIYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlZGl0b3JIYW5kbGUuYXBpKSAmJiAhVXRpbHMuaXNOdWxsKGVkaXRvckhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW9yZUNoaWxkcmVuID0gZWRpdG9ySGFuZGxlLmFwaS5nZXRDaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwobW9yZUNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgbW9yZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2FkRGF0YTogKGFjdGlvbkNvbmZpZywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBzZWFyY2goYWN0aW9uQ29uZmlnLCBldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWRSb3dzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyA6IGRpc3Bvc2UgZnJvbSBvYnNlcnZlclxuICAgICAgICAgICAgICAgIGxldCBuZXdSb3dzID0gcm93cy5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzU2VsZWN0ZWQocm93LmlkKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHNldERlbGV0ZWRSb3dzKGdldFNlbGVjdGVkUm93cyhzZWxlY3RlZCkpO1xuICAgICAgICAgICAgICAgIHJvd3Muc3BsaWNlKDAsIHJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5ld1JvdyBvZiBuZXdSb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaChuZXdSb3cpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKFtdKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5vblNlbGVjdGlvbkNoYW5nZShbXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXBkYXRlU2Nyb2xsQmFyUGFkZGluZygpO1xuICAgICAgICAgICAgICAgIHJvd0NvdW50LmN1cnJlbnQgPSByb3dzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAvLyBTeW5jIHRoZSByZWYgdGhhdCBiYWNrcyB0aGUgYGdldCByb3dzYCBnZXR0ZXIg4oCUIG90aGVyd2lzZVxuICAgICAgICAgICAgICAgIC8vIGFwaS5yb3dzIHJldHVybnMgd2hhdGV2ZXIgcm93c1JlZiB3YXMgYXQgbGFzdCBzeW5jIChvZnRlblxuICAgICAgICAgICAgICAgIC8vIGVtcHR5IGFmdGVyIGEgcHJldmlvdXMgY2xlYXIoKSksIGV2ZW4gdGhvdWdoIHRoZSBsb2NhbFxuICAgICAgICAgICAgICAgIC8vIGByb3dzYCBhcnJheSBoYXMgYmVlbiBtdXRhdGVkLiBjbGVhcigpIGRvZXMgdGhpczsgZGF0YSBsb2FkXG4gICAgICAgICAgICAgICAgLy8gZG9lcyB0aGlzOyBhZGRSb3dzL2RlbGV0ZVNlbGVjdGVkUm93cyBkaWRuJ3Qg4oCUIGxlYWRpbmcgdG9cbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zlckxpc3QncyB0cmFuc2Zlci1hbGwtYmFjayBmYWlsaW5nIGJlY2F1c2UgYXBpLnJvd3NcbiAgICAgICAgICAgICAgICAvLyBzaG93ZWQgZW1wdHkgcmlnaHQgYWZ0ZXIgYSB0cmFuc2Zlci1hbGwtb3V0LlxuICAgICAgICAgICAgICAgIHJvd3NSZWYuY3VycmVudCA9IHJvd3M7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VDYWxsYmFjayhyb3dzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByb3dzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyA6IGRpc3Bvc2UgZnJvbSBvYnNlcnZlclxuICAgICAgICAgICAgICAgIHJvd3NSZWYuY3VycmVudCA9IFtdO1xuICAgICAgICAgICAgICAgIHNldFJvd3MoW10pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCBnZXRTZWxlY3RlZFJvd3MoW10pKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5TRUxFQ1RJT05fQ0hBTkdFLCBldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gU3VyZ2ljYWwgZGVsZXRlIGJ5IHJvdyBpZHMg4oCUIGRvZXMgTk9UIHRvdWNoIHRoZSBzZWxlY3Rpb24gc3RhdGUuXG4gICAgICAgICAgICAvLyBDb3VudGVycGFydCB0byBkZWxldGVTZWxlY3RlZFJvd3MgZm9yIGNhc2VzIChUcmFuc2Zlckxpc3QgZG91YmxlLVxuICAgICAgICAgICAgLy8gY2xpY2spIHdoZXJlIHRoZSBjYWxsZXIgd2FudHMgdG8gcmVtb3ZlIHNwZWNpZmljIHJvd3Mgd2l0aG91dFxuICAgICAgICAgICAgLy8gaGlqYWNraW5nIHRoZSB1c2VyJ3MgY3VycmVudCBncmlkIHNlbGVjdGlvbi5cbiAgICAgICAgICAgIGRlbGV0ZVJvd3M6IChyb3dJZHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJvd0lkcyB8fCByb3dJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gcm93cztcbiAgICAgICAgICAgICAgICBjb25zdCBpZFNldCA9IG5ldyBTZXQocm93SWRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1haW5pbmcgPSByb3dzLmZpbHRlcigocm93KSA9PiAhaWRTZXQuaGFzKHJvdy5pZCkpO1xuICAgICAgICAgICAgICAgIHJvd3Muc3BsaWNlKDAsIHJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByZW1haW5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbEJhclBhZGRpbmcoKTtcbiAgICAgICAgICAgICAgICByb3dDb3VudC5jdXJyZW50ID0gcm93cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcm93c1JlZi5jdXJyZW50ID0gcm93cztcbiAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZUNhbGxiYWNrKHJvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdDogKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQocm93cyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkUm93czogKG5ld1Jvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5ld1JvdyBvZiBuZXdSb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaChvYnNlcnZlUm93KG5ld1JvdykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBuZXdTZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5ld1JvdyBvZiBuZXdSb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5wdXNoKG5ld1Jvdy5pZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuZGlzYWJsZVJvd1NlbGVjdGlvbikgfHwgcHJvcHMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3Rpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKG5ld1NlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMub25TZWxlY3Rpb25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlKG5ld1Jvd3MpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbEJhclBhZGRpbmcoKTtcbiAgICAgICAgICAgICAgICByb3dDb3VudC5jdXJyZW50ID0gcm93cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgLy8gU2VlIGRlbGV0ZVNlbGVjdGVkUm93cyBmb3IgdGhlIHJhdGlvbmFsZSDigJQga2VlcCByb3dzUmVmIGluXG4gICAgICAgICAgICAgICAgLy8gc3luYyB3aXRoIHRoZSBtdXRhdGVkIGxvY2FsIHJvd3MgYXJyYXkgc28gdGhlIGBnZXQgcm93c2BcbiAgICAgICAgICAgICAgICAvLyBnZXR0ZXIgcmV0dXJucyBjdXJyZW50IGRhdGEgYWZ0ZXIgYWRkUm93cy5cbiAgICAgICAgICAgICAgICByb3dzUmVmLmN1cnJlbnQgPSByb3dzO1xuICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlQ2FsbGJhY2socm93cyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcm93cztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgbnVtYmVyT2ZQYWdlcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxOdW1iZXJPZlJvd3MgLyByb3dzUGVyUGFnZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgcm93cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93c1JlZi5jdXJyZW50O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlYXJjaDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlYXJjaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlckhhbmRsZSAmJiBmaWx0ZXJIYW5kbGUuYXBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckhhbmRsZS5hcGkucmVmcmVzaCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyc2VkQ29uZmlnLnZpc2libGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCB2aXNpYmxlKHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICBzZXRWaXNpYmxlKHZpc2libGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtQXBpID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5jb25maWcuaWQgKyBcIl9lZGl0X2Zvcm1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaGFuZGxlUm93R3JhYlRvZ2dsZShyb3csIGluZGV4KSB7XG4gICAgICAgIGlmICghaXNSb3dHcmFiYmFibGUocm93KSkgcmV0dXJuO1xuICAgICAgICBpZiAoR3JhYkNvbnRleHQuaXNBY3RpdmUoKSkgcmV0dXJuO1xuXG4gICAgICAgIEdyYWJDb250ZXh0LmdyYWIocHJvcHMuaGFuZGxlLCB7XG4gICAgICAgICAgICByb3csXG4gICAgICAgICAgICByb3dJbmRleDogaW5kZXgsXG4gICAgICAgICAgICBjb21wb25lbnRJZDogcHJvcHMuY29uZmlnLmlkLFxuICAgICAgICAgICAgdmlld0lkOiBwcm9wcy52aWV3SWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgQ3Vyc29yT3ZlcmxheS5zaG93KCk7XG5cbiAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChcbiAgICAgICAgICAgIEV2ZW50VHlwZS5ST1dfR1JBQl9TVEFSVCxcbiAgICAgICAgICAgIG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgcm93KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbEJhclBhZGRpbmcoKSB7XG4gICAgICAgIHZhciB0Ym9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluVGFibGVCb2R5Jyk7XG4gICAgICAgIGlmICh0Ym9keSAhPT0gbnVsbCAmJiB0eXBlb2YgdGJvZHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzZXRTY3JvbGxXaWR0aCh0Ym9keS5vZmZzZXRXaWR0aCAtIHRib2R5LmNsaWVudFdpZHRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdpbmRvdy5vbnJlc2l6ZSA9IGZ1bmN0aW9uIG9ucmVzaXplKCkge1xuICAgICAgICB1cGRhdGVTY3JvbGxCYXJQYWRkaW5nKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVJlcXVlc3RTb3J0ID0gKGV2ZW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBjb25zdCBpc0Rlc2MgPSBvcmRlckJ5ID09PSBwcm9wZXJ0eSAmJiBvcmRlciA9PT0gJ2Rlc2MnO1xuICAgICAgICBzZXRPcmRlcihpc0Rlc2MgPyAnYXNjJyA6ICdkZXNjJyk7XG4gICAgICAgIHNldE9yZGVyQnkocHJvcGVydHkpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTZWxlY3RBbGxDbGljayhldmVudCkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5kaXNhYmxlUm93U2VsZWN0aW9uKSB8fCBwcm9wcy5jb25maWcuZGlzYWJsZVJvd1NlbGVjdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkcyA9IHJvd3MubWFwKG4gPT4gbi5uYW1lKTtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZChuZXdTZWxlY3RlZHMpO1xuICAgICAgICAgICAgICAgIHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlKG5ld1NlbGVjdGVkcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkKFtdKTtcbiAgICAgICAgICAgICAgICBwcm9wcy5vblNlbGVjdGlvbkNoYW5nZShbXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkUm93cyhzZWxlY3RlZCkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHJvdyA9IHJvd3NbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGVjdGVkLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5pZCA9PT0gc2VsZWN0ZWRbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dzLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRSb3dzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvSGFuZGxlQ2xpY2soZXZlbnQsIGlkKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3Rpb24pIHx8IHByb3BzLmNvbmZpZy5kaXNhYmxlUm93U2VsZWN0aW9uID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gc2VsZWN0ZWQuaW5kZXhPZihpZCk7XG4gICAgICAgICAgICBsZXQgbmV3U2VsZWN0ZWQ7XG5cbiAgICAgICAgICAgIGlmIChwcm9wcy5tdWx0aVNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFRvZ2dsZSBiZWhhdmlvdXI6IGNsaWNraW5nIGFuIGFscmVhZHktc2VsZWN0ZWQgcm93IHJlbW92ZXNcbiAgICAgICAgICAgICAgICAvLyBpdDsgb3RoZXJ3aXNlIGFkZCBpdCB0byB0aGUgc2VsZWN0aW9uLiBXaXRob3V0IHRoaXMsIHRoZVxuICAgICAgICAgICAgICAgIC8vIG11bHRpLXNlbGVjdCBwaWNrZXIgKGUuZy4gTXVsdGlMb29rdXBGaWVsZCkgbGVhdmVzIHVzZXJzXG4gICAgICAgICAgICAgICAgLy8gdW5hYmxlIHRvIGJhY2sgb3V0IGEgcm93IHRoZXkgdGlja2VkIGJ5IGFjY2lkZW50LlxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0luZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWQgPSBbLi4uc2VsZWN0ZWQuc2xpY2UoMCwgZXhpc3RpbmdJbmRleCksIC4uLnNlbGVjdGVkLnNsaWNlKGV4aXN0aW5nSW5kZXggKyAxKV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWQgPSBbLi4uc2VsZWN0ZWQsIGlkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNpbmdsZS1zZWxlY3Q6IG5vLW9wIG9uIHJlLWNsaWNrIChwcmVzZXJ2ZWQgZnJvbSBwcmlvclxuICAgICAgICAgICAgICAgIC8vIGJlaGF2aW91ciDigJQgc2luZ2xlLXJvdyBncmlkcyByZWx5IG9uIHRoaXMgdG8gYXZvaWRcbiAgICAgICAgICAgICAgICAvLyBhY2NpZGVudGFsIGRlc2VsZWN0IGR1cmluZyBjZWxsIGVkaXRzKS5cbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWQgPSBbaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gZ2V0U2VsZWN0ZWRSb3dzKG5ld1NlbGVjdGVkKTtcblxuICAgICAgICAgICAgc2V0U2VsZWN0ZWQobmV3U2VsZWN0ZWQpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMub25TZWxlY3Rpb25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMub25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRSb3dzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpcmVTZWxlY3Rpb25FdmVudCgpIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGNvbmZpZykgJiYgKCFVdGlscy5pc051bGwoaGVhZGluZ0hhbmRsZSkgfHwgY29uZmlnLmdyaWRUeXBlID09PSAnVElMRScpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCBnZXRTZWxlY3RlZFJvd3Moc2VsZWN0ZWQpKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5TRUxFQ1RJT05fQ0hBTkdFLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Jvd0dyYWJiYWJsZShyb3cpIHtcbiAgICAgICAgcmV0dXJuIHJvd3NHcmFiYmFibGUgJiYgIWlzUm93RHJhZ0Rpc2FibGVkKHJvdyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSb3dEcmFnRGlzYWJsZWQocm93KSB7XG4gICAgICAgIGlmICghZHJhZ1NwZWMuZGlzYWJsZWRXaGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHRPYmplY3QoXG4gICAgICAgICAgICAnUk9XLScgKyByb3cuaWQgKyAnLWRyYWctZGlzYWJsZWQnLFxuICAgICAgICAgICAgZHJhZ1NwZWMuZGlzYWJsZWRXaGVuLFxuICAgICAgICAgICAgcHJvcHMuY29uZmlnLmlkLFxuICAgICAgICAgICAge3Jvdzogcm93fSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0Q3Vyc29yKGN1cnNvcikge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IGN1cnNvciB8fCAnZGVmYXVsdCc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlUm93TW91c2VFbnRlcihyb3cpIHtcbiAgICAgICAgaWYgKCFpc1Jvd0dyYWJiYWJsZShyb3cpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IHNob3cgZ3JhYiBjdXJzb3IgaWYgbm90IGFscmVhZHkgaG9sZGluZyBzb21ldGhpbmdcbiAgICAgICAgaWYgKCFHcmFiQ29udGV4dC5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICBzZXRDdXJzb3Iocm93R3JhYlNwZWMuY3Vyc29yIHx8ICdncmFiJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVSb3dNb3VzZUxlYXZlKCkge1xuICAgICAgICBzZXRDdXJzb3IoJ2RlZmF1bHQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCwgcm93LCBpbmRleCkge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5lZGl0Q2VsbCcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHJvd3NHcmFiYmFibGUgJiYgIWlzUm93RHJhZ0Rpc2FibGVkKHJvdykpIHtcbiAgICAgICAgICAgIGhhbmRsZVJvd0dyYWJUb2dnbGUocm93LCBpbmRleCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5vbkNlbGxTZWxlY3Rpb25DaGFuZ2UpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBkb0hhbmRsZUNsaWNrKGV2ZW50LCByb3cuaWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUNlbGxDbGljayhldmVudCwgaWQsIGNvbHVtbikge1xuICAgICAgICBpZiAoY29sdW1uLmZpZWxkVHlwZSAhPT0gJ2RvY3VtZW50Jykge1xuICAgICAgICAgICAgLy8gVE9ETyA6IEV2YWx1YXRlIGlmIHRoaXMgY2FsbCBpcyBuZWNlc3NhcnlcbiAgICAgICAgICAgIGRvSGFuZGxlQ2xpY2soZXZlbnQsIGlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLm9uQ2VsbFNlbGVjdGlvbkNoYW5nZSkpIHtcbiAgICAgICAgICAgIHByb3BzLm9uQ2VsbFNlbGVjdGlvbkNoYW5nZShpZCwgY29sdW1uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZVBhZ2UoZXZlbnQsIG5ld1BhZ2UpIHtcbiAgICAgICAgY3JpdGVyaWEuY3VycmVudFBhZ2UgPSBuZXdQYWdlICsgMTtcbiAgICAgICAgc2V0UGFnZShuZXdQYWdlKTtcbiAgICAgICAgc2VhcmNoKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlUm93c1BlclBhZ2UoZXZlbnQpIHtcbiAgICAgICAgc2V0Um93c1BlclBhZ2Uocm93c1BlclBhZ2UgPT4gZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgc2V0UGFnZSgwKTtcbiAgICB9XG5cbiAgICBjb25zdCBvYnNlcnZlUm93ID0gKHJvdykgPT4ge1xuICAgICAgICAvKmxldCBvYnNlcnZhYmxlUm93ID0gb2JzZXJ2YWJsZShyb3cpO1xuICAgICAgICBvYnNlcnZlKFxuICAgICAgICAgICAgb2JzZXJ2YWJsZVJvdyxcbiAgICAgICAgICAgIGNoYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCBvbGRWYWx1ZSA9IGNoYW5nZS5vbGRWYWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaENlbGwocm93LmlkLCBjaGFuZ2UubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlUm93OyovXG5cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoZGF0YSwgY29uZikge1xuICAgICAgICBzZXRUb3RhbE51bWJlck9mUm93cyhkYXRhLnRvdGFsTnVtYmVyT2ZSZWNvcmRzID8gZGF0YS50b3RhbE51bWJlck9mUmVjb3JkcyA6IGRhdGEucmVjb3Jkcy5sZW5ndGgpO1xuXG4gICAgICAgIHJvd3NSZWYuY3VycmVudCA9IGRhdGEucmVjb3JkcztcbiAgICAgICAgdXBkYXRlUm93Q2xhc3NlcyhkYXRhLnJlY29yZHMpO1xuICAgICAgICBsZXQgdGFibGVSb3dzID0gW107XG4gICAgICAgIGxldCByZWNvcmRzID0gZGF0YS5yZWNvcmRzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRhYmxlUm93cy5wdXNoKG9ic2VydmVSb3cocmVjb3Jkc1tpXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0Um93cyh0YWJsZVJvd3MpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaCA9IChhY3Rpb25Db25maWcgPSBudWxsLCBldmVudCkgPT4ge1xuICAgICAgICBsZXQgY29uZiA9IGNvbmZpZztcbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChjb25mKSkge1xuICAgICAgICAgICAgY29uZiA9IFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZXJ2aWNlID0gIVV0aWxzLmlzTnVsbChjb25mLmRhdGFTZXJ2aWNlKSA/IGNvbmYuZGF0YVNlcnZpY2UgOiAhVXRpbHMuaXNOdWxsKGFjdGlvbkNvbmZpZykgPyBhY3Rpb25Db25maWcuZGF0YVNlcnZpY2UgOiBudWxsO1xuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChzZXJ2aWNlKSkge1xuICAgICAgICAgICAgbGV0IHNlcnZpY2VUeXBlID0gc2VydmljZS50eXBlO1xuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlID0gJ3JwYyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ3JwYycgfHwgc2VydmljZVR5cGUgPT09ICdyZXN0Jykge1xuICAgICAgICAgICAgICAgIGxldCBtZXRob2QgPSBzZXJ2aWNlVHlwZSA9PT0gJ3JwYycgPyBpbnZva2VScGMgOiBpbnZva2VSZXN0O1xuICAgICAgICAgICAgICAgIG1ldGhvZCh7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogcHJvcHMuaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3SWQ6IHByb3BzLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGEocmVzdWx0LCBjb25mKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICBpZihlLmVycm9yVHlwZSAhPT0gJ0lOVkFMSURfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMucHVibGlzaEVycm9yTWVzc2FnZShlLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHNlcnZpY2UgdHlwZSA6ICcgKyBzZXJ2aWNlVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uQ29uZmlnICYmIGFjdGlvbkNvbmZpZy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gYXBwbGljYXRpb25NYW5hZ2VyLnJlc29sdmVQYXJhbWV0ZXJDb25maWdWYWx1ZShhY3Rpb25Db25maWcudmFsdWUpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhKGRhdGEsIGNvbmYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNyaXRlcmlhLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgaWYgKCFyb3dzUGVyUGFnZUxvYWRpbmcpIHtcbiAgICAgICAgICAgIHNldFJvd3NQZXJQYWdlTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBzZWFyY2goKTtcbiAgICAgICAgfVxuICAgIH0sIFtyb3dzUGVyUGFnZV0pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgIH0pO1xuXG4gICAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgIH0sIFtdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxldCBldmVudEhhbmRsaW5nQ29uZmlnID0gVXRpbHMuaXNOdWxsKGNvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnKSA/IHt9IDogY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWc7XG4gICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucyA9IFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpID8gW10gOiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnM7XG5cbiAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGluZ0NvbmZpZywgcHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyhwcm9wcy52aWV3SWQsIGNvbmZpZyk7XG4gICAgICAgIGxldCBpc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIGxldCB2aXNpYmxlQ29sdW1uQ291bnQgPSAwO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBsZXQgaGlkZGVuID0gVXRpbHMuZ2V0Q29tcG9uZW50QXR0cmlidXRlKGNvbHVtbiwgJ2hpZGRlbicsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihoaWRkZW4sIHByb3BzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlQ29sdW1uQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSBjb25maWcuY29sdW1uc1tpXTtcblxuICAgICAgICAgICAgaWYgKCFpc0VkaXRhYmxlICYmIGNvbHVtbi5hdHRyaWJ1dGVzWydlZGl0YWJsZSddID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaXNFZGl0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0RWRpdGFibGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKCFjb2x1bW4uYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgIGNvbHVtbi5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbHVtbi5hdHRyaWJ1dGVzLndpZHRoID0gZXZhbHVhdGVUYWJsZUNlbGxXaWR0aChwcm9wcy5zZWxlY3Rpb25Nb2RlID09PSAnTVVMVElQTEUnLCBjb2x1bW4sIHZpc2libGVDb2x1bW5Db3VudCk7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb2x1bW4uYXR0cmlidXRlcykgJiYgY29sdW1uLmF0dHJpYnV0ZXNbJ2VkaXRhYmxlJ10gPT09IHRydWUgJiYgVXRpbHMuaXNOdWxsKGNvbHVtbi5lZGl0b3IpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRFZGl0b3IgPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RWRpdG9yLmZpZWxkVHlwZSA9ICdURVhUX0ZJRUxEJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0RWRpdG9yLmlkID0gY29sdW1uLmlkICsgJ0VkaXRvcic7XG5cbiAgICAgICAgICAgICAgICBjb2x1bW4uZWRpdG9yID0gZGVmYXVsdEVkaXRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNyaXRlcmlhLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgY3JpdGVyaWEuZGF0YVF1ZXJ5TmFtZSA9IGNvbmZpZy5kYXRhUXVlcnlOYW1lO1xuXG4gICAgICAgIGxldCBoYXNMb2FkRXZlbnQ7XG4gICAgICAgIGxldCBsb2FkU3Vic2NyaXB0aW9ucyA9IGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucy5maWx0ZXIoKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLmV2ZW50VHlwZSA9PT0gJ0NPTVBPTkVOVF9MT0FEJyk7XG4gICAgICAgIGZvciAoY29uc3QgbG9hZFN1YnNjcmlwdGlvbiBvZiBsb2FkU3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgaWYgKGxvYWRTdWJzY3JpcHRpb24uYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmFjdGlvblR5cGUgPT09ICdsb2FkRGF0YScpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBoYXNMb2FkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGF1dG9Mb2FkRGF0YSA9IFV0aWxzLmdldENvbXBvbmVudEF0dHJpYnV0ZShjb25maWcsICdhdXRvTG9hZERhdGEnLCBudWxsKTtcbiAgICAgICAgaWYgKCFoYXNMb2FkRXZlbnQgJiYgKGF1dG9Mb2FkRGF0YSA9PT0gbnVsbCB8fCBhdXRvTG9hZERhdGEgPT09IHRydWUpKSB7XG4gICAgICAgICAgICBzZWFyY2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgbnVsbCk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELCBldmVudCk7XG4gICAgfSwgW10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMuZGF0YSkpIHtcbiAgICAgICAgICAgIGxldCBjb25mID0gY29uZmlnO1xuICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChjb25mKSkge1xuICAgICAgICAgICAgICAgIGNvbmYgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2Nlc3NEYXRhKHByb3BzLmRhdGEsIGNvbmYpO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLmRhdGFdKTtcblxuICAgIGZ1bmN0aW9uIGFkZFJvd0ZvY3VzTGlzdGVuZXIocm93KSB7XG4gICAgICAgICQoJyNST1ctJyArIHJvdy5pZClcbiAgICAgICAgICAgIC5mb2N1c291dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1NlbGVjdGVkID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RlZEVsZW1lbnQgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCAhPT0gcm93LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZC5wdXNoKHNlbGVjdGVkRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5kaXNhYmxlUm93U2VsZWN0aW9uKSB8fCBwcm9wcy5jb25maWcuZGlzYWJsZVJvd1NlbGVjdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQobmV3U2VsZWN0ZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZVJvd0NsYXNzZXMgPSAobmV3Um93cykgPT4ge1xuICAgICAgICBpZiAobmV3Um93cykge1xuICAgICAgICAgICAgaWYgKHByb3BzLmNvbmZpZy5yb3dBdHRyaWJ1dGVzICYmIHByb3BzLmNvbmZpZy5yb3dBdHRyaWJ1dGVzLmNsYXNzRXZhbHVhdG9yKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBuZXdSb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5jbGFzc05hbWUgPSBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdE9iamVjdCgnUk9XLScgKyByb3cuaWQgKyAnY2xhc3NFdmFsdWF0b3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuY29uZmlnLnJvd0F0dHJpYnV0ZXMuY2xhc3NFdmFsdWF0b3IsIHByb3BzLmNvbmZpZy5pZCwge2luZGV4fSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlUm93UmVhZE9ubHlTdGF0dXMgPSAobmV3Um93cykgPT4ge1xuICAgICAgICBpZiAobmV3Um93cykge1xuICAgICAgICAgICAgaWYgKHByb3BzLmNvbmZpZy5yb3dBdHRyaWJ1dGVzICYmIHByb3BzLmNvbmZpZy5yb3dBdHRyaWJ1dGVzLnJlYWRPbmx5RXZhbHVhdG9yKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBuZXdSb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZWFkT25seSA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0T2JqZWN0KCdST1ctJyArIHJvdy5pZCArICdyZWFkT25seUV2YWx1YXRvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5jb25maWcucm93QXR0cmlidXRlcy5yZWFkT25seUV2YWx1YXRvciwgcHJvcHMuY29uZmlnLmlkLCB7aW5kZXh9LCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVDb2x1bW5SZWFkT25seVN0YXR1cyA9IChjb2x1bW4sIG5ld1Jvd3MpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5hdHRyaWJ1dGVzICYmIGNvbHVtbi5hdHRyaWJ1dGVzLnJlYWRPbmx5RXZhbHVhdG9yKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgbmV3Um93cykge1xuICAgICAgICAgICAgICAgIGlmICghcm93LmNvbHVtblJlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5jb2x1bW5SZWFkT25seSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdy5jb2x1bW5SZWFkT25seVtjb2x1bW4uaWRdID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHRPYmplY3QoJ0NPTC0nICsgcm93LmlkICsgJy0nICsgY29sdW1uLmlkICsgJy1yZWFkT25seUV2YWx1YXRvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5hdHRyaWJ1dGVzLnJlYWRPbmx5RXZhbHVhdG9yLCBwcm9wcy5jb25maWcuaWQsIHtpbmRleH0sIG51bGwpO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB1cGRhdGVTY3JvbGxCYXJQYWRkaW5nKCk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5wcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyhwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICByb3dDb3VudC5jdXJyZW50ID0gcm93cy5sZW5ndGg7XG5cbiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCByb3dzKTtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuREFUQV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgLy8gUGxhaW4gUmVhY3QtcHJvcCBjYWxsYmFjayBmb3IgY29uc3VtZXJzIHRoYXQgd2FudCB0byByZWFjdCB0byBhXG4gICAgICAgIC8vIGRhdGEgbG9hZCB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGV2ZW50TWFuYWdlciBzdWJzY3JpcHRpb25cbiAgICAgICAgLy8gZGFuY2UuIFJlY2VpdmVzIHRoZSBmcmVzaGx5LXJlbmRlcmVkIHJvd3MgYXJyYXkuIFVzZWQgYnlcbiAgICAgICAgLy8gTXVsdGlMb29rdXBGaWVsZCB0byBwcmUtc2VsZWN0IHJvd3MgdGhhdCBhcmUgYWxyZWFkeSBpbiB0aGVcbiAgICAgICAgLy8gZmllbGQncyB2YWx1ZSwgc28gdGhlIG9wZXJhdG9yIGNhbiBzZWUgd2hpY2ggcmVzdWx0cyB0aGV5IGhhdmVcbiAgICAgICAgLy8gYWxyZWFkeSBhZGRlZC5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMub25Sb3dzTG9hZGVkKSkge1xuICAgICAgICAgICAgcHJvcHMub25Sb3dzTG9hZGVkKHJvd3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGlsZSBncmlkcyBhdXRvLXNlbGVjdCB0aGUgZmlyc3Qgcm93IGFmdGVyIGEgbG9hZCB3aGVuIG5vXG4gICAgICAgIC8vIHNlbGVjdGlvbiBpcyBpbiBwbGFjZSB5ZXQsIHNvIHRoZSBjb25zdW1lciB2aWV3IGFsd2F5cyBoYXMgYVxuICAgICAgICAvLyBjdXJyZW50bHktc2VsZWN0ZWQgaXRlbSB0byByZW5kZXIgZGV0YWlscyBmb3IuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIENvbmZpZ3VyYWJsZSBwZXItaW5zdGFuY2UgdmlhIGB0aWxlQXV0b1NlbGVjdGAuIERlZmF1bHRzIHRvXG4gICAgICAgIC8vIHRydWUgKGV4aXN0aW5nIGJlaGF2aW91cikuIFZpZXdzIGxpa2UgdGhlIHJlZ2lzdHJhdGlvblxuICAgICAgICAvLyBwcmltYXJ5LWNvbnRhY3QgcGlja2VyIHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIGF1dG8tc2VsZWN0aW5nXG4gICAgICAgIC8vIHdvdWxkIGNyZWF0ZSBhIG1pc2xlYWRpbmcgZGVmYXVsdCDigJQgdGhlIHVzZXIgbXVzdCBhY3RpdmVseVxuICAgICAgICAvLyBjaG9vc2UuIFRoZSBEQVRBX0FSUklWRUQtZHJpdmVuIHJlYmluZCBvbiBiYWNrLW5hdiAoc2VlXG4gICAgICAgIC8vIHByaW1hcnktY29udGFjdC5qc29uKSBzdGlsbCB3b3JrcyBiZWNhdXNlIGl0IHNldHMgdGhlXG4gICAgICAgIC8vIHNlbGVjdGlvbiBleHBsaWNpdGx5IHZpYSBhcGkuc2VsZWN0KCkuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEZpcmluZyBTRUxFQ1RJT05fQ0hBTkdFIGlubGluZSAobm90IHZpYSBmaXJlU2VsZWN0aW9uRXZlbnQsXG4gICAgICAgIC8vIHdoaWNoIHdvdWxkIHJlYWQgdGhlIHN0aWxsLXN0YWxlIGBzZWxlY3RlZGAgc3RhdGUgb24gdGhpc1xuICAgICAgICAvLyB0aWNrKSBzbyB0aGUgZG93bnN0cmVhbSBzdWJzY3JpYmVyIHdha2VzIHVwIG9uIHRoZSBzYW1lIHRpY2tcbiAgICAgICAgLy8gYXMgdGhlIGRhdGEgYXJyaXZhbC5cbiAgICAgICAgY29uc3QgYXV0b1NlbGVjdCA9IFV0aWxzLmlzTnVsbChjb25maWc/LnRpbGVBdXRvU2VsZWN0KSA/IHRydWUgOiBjb25maWcudGlsZUF1dG9TZWxlY3QgPT09IHRydWU7XG4gICAgICAgIGlmIChhdXRvU2VsZWN0ICYmIGNvbmZpZz8uZ3JpZFR5cGUgPT09ICdUSUxFJyAmJiByb3dzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvd0lkID0gcm93c1swXS5pZDtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93TGlzdCA9IFtmaXJzdFJvd0lkXTtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKGZpcnN0Um93TGlzdCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSBnZXRTZWxlY3RlZFJvd3MoZmlyc3RSb3dMaXN0KTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkUm93cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uRXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIHNlbGVjdGVkUm93cyk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5TRUxFQ1RJT05fQ0hBTkdFLCBzZWxlY3Rpb25FdmVudCk7XG4gICAgICAgIH1cbiAgICB9LCBbcm93c10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGVsZXRlZFJvd3MpICYmIGRlbGV0ZWRSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZGVsZXRlZFJvd3MpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuUk9XX0RFTEVURUQsIGV2ZW50KTtcbiAgICAgICAgICAgIHNldERlbGV0ZWRSb3dzKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93Q291bnQuY3VycmVudCA9IHJvd3MubGVuZ3RoO1xuICAgIH0sIFtkZWxldGVkUm93c10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMucm93cykpIHtcbiAgICAgICAgICAgIGxldCByb3dWYWx1ZXMgPSBbXTtcblxuICAgICAgICAgICAgcm93c1JlZi5jdXJyZW50ID0gcHJvcHMucm93cztcbiAgICAgICAgICAgIHVwZGF0ZVJvd0NsYXNzZXMocHJvcHMucm93cyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBwcm9wcy5yb3dzKSB7XG4gICAgICAgICAgICAgICAgcm93VmFsdWVzLnB1c2gob2JzZXJ2ZVJvdyhyb3cpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlUm93UmVhZE9ubHlTdGF0dXMocHJvcHMucm93cyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUNvbHVtblJlYWRPbmx5U3RhdHVzKGNvbHVtbiwgcHJvcHMucm93cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJvd3NSZWYuY3VycmVudCA9IHJvd1ZhbHVlcztcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKFtdKTtcbiAgICAgICAgICAgIHNldFJvd3Mocm93VmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy5yb3dzXSk7XG5cblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVJvd1JlYWRPbmx5U3RhdHVzKHJvd3MpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgdXBkYXRlQ29sdW1uUmVhZE9ubHlTdGF0dXMoY29sdW1uLCByb3dzKTtcbiAgICAgICAgfVxuICAgIH0sIFtyb3dzXSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBmaXJlU2VsZWN0aW9uRXZlbnQoKTtcbiAgICB9LCBbc2VsZWN0ZWRdKTtcblxuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBpZCA9PiBzZWxlY3RlZC5pbmRleE9mKGlkKSAhPT0gLTE7XG4gICAgY29uc3QgZWRpdG9yQ2hhbmdlSGFuZGxlciA9IChyb3dJZCwgZmllbGQsIHZhbHVlKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgICAgIGlmIChyb3cuaWQgPT09IHJvd0lkKSB7XG4gICAgICAgICAgICAgICAgVXRpbHMudXBkYXRlTmVzdGVkUHJvcGVydHkocm93LCBmaWVsZCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWVDaGFuZ2VDYWxsYmFjayhyb3dzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNGaWx0ZXJhYmxlID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmNvbmZpZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY29sdW1uID0gcHJvcHMuY29uZmlnLmNvbHVtbnNbaV07XG4gICAgICAgICAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZXNbJ2ZpbHRlcmFibGUnXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVDZWxsID0gKHJvdywgY29sdW1uTmFtZSwgY2VsbEhhbmRsZSkgPT4ge1xuICAgICAgICBsZXQgcm93Q2VsbHMgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNlbGxzRW50cnkgb2YgY2VsbHMpIHtcbiAgICAgICAgICAgIGlmIChjZWxsc0VudHJ5LnJvd0lkID09PSByb3cuaWQpIHtcbiAgICAgICAgICAgICAgICByb3dDZWxscyA9IGNlbGxzRW50cnk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHJvd0NlbGxzKSB8fCByb3dDZWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJvd0NlbGxzID0ge307XG4gICAgICAgICAgICByb3dDZWxscy5yb3dJZCA9IHJvdy5pZDtcbiAgICAgICAgICAgIGNlbGxzLnB1c2gocm93Q2VsbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93Q2VsbHNbY29sdW1uTmFtZV0gPSBjZWxsSGFuZGxlO1xuICAgIH07XG5cbiAgICBjb25zdCByZWZyZXNoQ2VsbCA9IChyb3dJZCwgY29sdW1uTmFtZSkgPT4ge1xuICAgICAgICBsZXQgcm93Q2VsbHMgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNlbGwgb2YgY2VsbHMpIHtcbiAgICAgICAgICAgIGlmIChjZWxsLnJvd0lkID09PSByb3dJZCkge1xuICAgICAgICAgICAgICAgIHJvd0NlbGxzID0gY2VsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHJvd0NlbGxzKSkge1xuICAgICAgICAgICAgbGV0IGNlbGwgPSByb3dDZWxsc1tjb2x1bW5OYW1lXTtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY2VsbCkpIHtcbiAgICAgICAgICAgICAgICBjZWxsLmFwaS5yZWZyZXNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlQWxsUm93RXJyb3JzQnlDb2x1bW4gPSAoY29sdW1uTmFtZSwgcm93RXJyb3JzKSA9PiB7XG4gICAgICAgIGlmIChyb3dFcnJvcnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSByb3dFcnJvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAocm93RXJyb3JzW2ldLmNvbHVtbiA9PT0gY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByb3dFcnJvcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJvd0Vycm9ySGFuZGxlciA9IChyb3dJZCwgZXJyb3IsIGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93RXJyb3JNYXApLmxlbmd0aCA9PT0gMCB8fCAhcm93RXJyb3JNYXBbcm93SWRdKSB7XG4gICAgICAgICAgICByb3dFcnJvck1hcFtyb3dJZF0gPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCFyb3dFcnJvck1hcFtyb3dJZF0uZmluZChyb3dFcnJvciA9PiByb3dFcnJvci5jb2x1bW4gPT09IGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICByb3dFcnJvck1hcFtyb3dJZF0ucHVzaChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVBbGxSb3dFcnJvcnNCeUNvbHVtbihjb2x1bW4sIHJvd0Vycm9yTWFwW3Jvd0lkXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc1Jvd0Vycm9yc0VtcHR5ID0gKCkgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93RXJyb3JNYXApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyb3dFcnJvck1hcCkpIHtcbiAgICAgICAgICAgIGlmIChyb3dFcnJvck1hcFtrZXldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUNoYW5nZUNhbGxiYWNrID0gKHZhbHVlUm93cykgPT4ge1xuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIodmFsdWVSb3dzLCAhaXNSb3dFcnJvcnNFbXB0eSgpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZSBhY3Jvc3MgdGlsZSByZW5kZXJzIHNvIGEgNzUtcm93XG4gICAgLy8gZ3JpZCBkb2Vzbid0IHJlY29tcGlsZSB0aGUgc2FtZSBzdHJpbmcgNzUgdGltZXMgcGVyIHJlbmRlciBwYXNzLiBLZXllZFxuICAgIC8vIGJ5IHRoZSByYXcgdGVtcGxhdGUgc3RyaW5nIHNvIGEgY29uZmlnIHN3YXAgcmVidWlsZHMgYXV0b21hdGljYWxseS5cbiAgICBjb25zdCB0aWxlVGVtcGxhdGVDYWNoZVJlZiA9IFJlYWN0LnVzZVJlZih7a2V5OiBudWxsLCBmbjogbnVsbH0pO1xuXG4gICAgZnVuY3Rpb24gZ2V0VGlsZUxhYmVsKHJvdykge1xuICAgICAgICAvLyBXaGVuIHRpbGVEaXNwbGF5VGVtcGxhdGUgaXMgc2V0LCByZW5kZXIgcmljaCBIVE1MIOKAlCB0aGUgY29sdW1uXG4gICAgICAgIC8vIGxpc3QgYmVjb21lcyBhIG5vLW9wIGZvciB0aGUgdGlsZSBib2R5IChjb2x1bW5zIHN0aWxsIGRyaXZlIHRhYmxlXG4gICAgICAgIC8vIG1vZGUgKyB0aGUgY29sdW1uLWNvbmZpZyBtZXRhZGF0YTsgdGhleSdyZSBub3QgZHVwbGljYXRlZCBhc1xuICAgICAgICAvLyB0ZXh0KS4gT3RoZXJ3aXNlIHdlIGZhbGwgdGhyb3VnaCB0byB0aGUgY29sdW1uIGl0ZXJhdGlvbiwgd2hpY2hcbiAgICAgICAgLy8gaXMgdGhlIGxlZ2FjeSBkZWZhdWx0LiBNaXJyb3JzIEh0bWxQYW5lbDogSGFuZGxlYmFycyBjb21waWxlLFxuICAgICAgICAvLyBhcHBseSBhZ2FpbnN0IHRoZSByb3csIHJlbmRlciB2aWEgSFRNTFJlbmRlcmVyLiBTdXBwb3J0cyBuZXN0ZWRcbiAgICAgICAgLy8gcGF0aHMgKHt7cGVyc29uLm5hbWVzfX0pIGFuZCB0aGUgc3RhbmRhcmQgaGVscGVyIHNldFxuICAgICAgICAvLyAoZXEgLyBuZSAvIGx0IC8gZ3QgLyBsdGUgLyBndGUgLyBhbmQgLyBvcikgcmVnaXN0ZXJlZCBhYm92ZS5cbiAgICAgICAgY29uc3QgdGlsZURpc3BsYXlUZW1wbGF0ZSA9IGNvbmZpZy50aWxlRGlzcGxheVRlbXBsYXRlO1xuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh0aWxlRGlzcGxheVRlbXBsYXRlKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodGlsZVRlbXBsYXRlQ2FjaGVSZWYuY3VycmVudC5rZXkgIT09IHRpbGVEaXNwbGF5VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZVRlbXBsYXRlQ2FjaGVSZWYuY3VycmVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdGlsZURpc3BsYXlUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuOiBIYW5kbGViYXJzLmNvbXBpbGUodGlsZURpc3BsYXlUZW1wbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IHRpbGVUZW1wbGF0ZUNhY2hlUmVmLmN1cnJlbnQuZm4ocm93KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEhUTUxSZW5kZXJlciBodG1sPXtodG1sfS8+O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIERvbid0IGJsYW5rIHRoZSB3aG9sZSBncmlkIGJlY2F1c2Ugb25lIHRpbGUncyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZWQgYSBtaXNzaW5nIG5lc3RlZCBrZXk7IGxvZyArIGZhbGwgdGhyb3VnaCB0b1xuICAgICAgICAgICAgICAgIC8vIHRoZSBsZWdhY3kgcmVuZGVyZXIgc28gdGhlIHVzZXIgc2VlcyAqc29tZXRoaW5nKi5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbRGF0YUdyaWRdIHRpbGVEaXNwbGF5VGVtcGxhdGUgcmVuZGVyIGZhaWxlZCBmb3Igcm93Jywgcm93LCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIHtjb25maWcuY29sdW1ucy5tYXAoY29sdW1uID0+IChcbiAgICAgICAgICAgICAgICAgICAgIWNvbHVtbi5hdHRyaWJ1dGVzLmhpZGRlbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e2NvdW50ZXIrK30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWROZXN0ZWRQcm9wZXJ0eSBoYW5kbGVzIGRvdHRlZCBpZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2UgXCJwZXJzb24ubmFtZXNcIiDigJQgZGlyZWN0IHJvd1tpZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJyYWNrZXQgYWNjZXNzIG9ubHkgd29ya2VkIGZvciBmbGF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWVsZHMgYW5kIHNpbGVudGx5IHJlbmRlcmVkIGJsYW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBsaXZlZCB1bmRlciBhIHN1Yi1vYmplY3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaXJyb3JzIHRoZSBTVEFOREFSRC1tb2RlIHJlc29sdXRpb24gaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhYmxlQ2VsbENvbnRlbnQuanN4LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMucmVhZE5lc3RlZFByb3BlcnR5KHJvdywgIVV0aWxzLmlzTnVsbChjb2x1bW4uZGF0YUJpbmRpbmcpID8gY29sdW1uLmRhdGFCaW5kaW5nIDogY29sdW1uLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXJUaWxlKHJvdywga2V5KSB7XG4gICAgICAgIGNvbnN0IGlzSXRlbVNlbGVjdGVkID0gaXNTZWxlY3RlZChyb3cuaWQpO1xuICAgICAgICByZXR1cm4gKDxHcmlkIGl0ZW0geHMgc3R5bGU9e1V0aWxzLm1lcmdlT2JqZWN0cyhwcm9wcy5jb25maWcudGlsZVN0eWxlLCB7XG4gICAgICAgICAgICBoZWlnaHQ6ICcyMDBweCcsXG4gICAgICAgICAgICBtaW5XaWR0aDogJzIwMHB4J1xuICAgICAgICB9KX0ga2V5PXtrZXl9PlxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiBjb2xvcj17XCJzZWNvbmRhcnlcIn1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaXNJdGVtU2VsZWN0ZWQgPyAnMXB4IHNvbGlkIDFweCBzb2xpZCAjZjJhOTAwJyA6ICcxcHggc29saWQgI2UyZTJlMicsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpc0l0ZW1TZWxlY3RlZCA/ICcjZmZmOGUxJyA6ICcjZmFmYWZhJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4gZG9IYW5kbGVDbGljayhldmVudCwgcm93LmlkKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdldFRpbGVMYWJlbChyb3cpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvR3JpZD4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlclRpbGVzKCkge1xuICAgICAgICBpZiAoIXJvd3MgfHwgcm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIFRpbGUgZ3JpZCBoYXMgbm8gbmF0aXZlIGVtcHR5LXJvdyBhZmZvcmRhbmNlIGxpa2UgdGhlIHRhYmxlXG4gICAgICAgICAgICAvLyBwYXRoIChgb3VpVGFibGUtZW1wdHlgIENTUyksIHNvIHBhaW50IHRoZSBtZXNzYWdlIGlubGluZS5cbiAgICAgICAgICAgIC8vIENhbGxlciBjYW4gb3ZlcnJpZGUgdmlhIGBjb25maWcuZW1wdHlNZXNzYWdlYCBmb3Igdmlldy1cbiAgICAgICAgICAgIC8vIHNwZWNpZmljIGNvcHkgKFwiTm8gcHJvY3VyZW1lbnRzIHlldFwiLCBldGMpLlxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHByb3BzLmNvbmZpZz8uZW1wdHlNZXNzYWdlIHx8ICdObyBpdGVtcyB0byBzaG93JztcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEdyaWQgaXRlbSB4cz17MTJ9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAnMTIwcHgnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM5ZTllOWUnLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzAuODc1cmVtJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFN0eWxlOiAnaXRhbGljJyxcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAge21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByb3dzLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJdGVtU2VsZWN0ZWQgPSBpc1NlbGVjdGVkKHJvdy5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbElkID0gYGVuaGFuY2VkLXRhYmxlLWNoZWNrYm94LSR7aW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5pbmRleCA9IGluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclRpbGUocm93LCBpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb2x1bW5MYXlvdXRIYW5kbGUoY29sdW1uLCBpbmRleCkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGNvbHVtbkxheW91dEhhbmRsZXNbY29sdW1uLmlkICsgaW5kZXhdKSkge1xuICAgICAgICAgICAgbGV0IGhhbmRsZSA9IHt9O1xuICAgICAgICAgICAgY29sdW1uTGF5b3V0SGFuZGxlc1tjb2x1bW4uaWQgKyBpbmRleF0gPSBoYW5kbGU7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbkxheW91dEhhbmRsZXNbY29sdW1uLmlkICsgaW5kZXhdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNlbGxFZGl0b3JIYW5kbGUoY29sdW1uKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZWRpdG9ySGFuZGxlc1tjb2x1bW4uaWQgKyBcIl9lZGl0b3JcIl0pKSB7XG4gICAgICAgICAgICBsZXQgaGFuZGxlID0ge307XG4gICAgICAgICAgICBlZGl0b3JIYW5kbGVzW2NvbHVtbi5pZCArIFwiX2VkaXRvclwiXSA9IGhhbmRsZTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWRpdG9ySGFuZGxlc1tjb2x1bW4uaWQgKyBcIl9lZGl0b3JcIl07XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgdmlzaWJsZSAmJlxuICAgICAgICA8ZGl2IGlkPXtwcm9wcy5jb25maWcuaWR9IGNsYXNzTmFtZT17VXRpbHMuZ2V0Q29tcG9uZW50QXR0cmlidXRlKHByb3BzLmNvbmZpZywgJ2NsYXNzTmFtZScsIG51bGwpfSBzdHlsZT17KFV0aWxzLmlzTnVsbChwcm9wcy5oYXNCb3JkZXIpIHx8IHByb3BzLmhhc0JvcmRlciA9PT0gdHJ1ZSkgP1xuICAgICAgICAgICAgVXRpbHMubWVyZ2VTdHlsZXMoe1xuICAgICAgICAgICAgICAgIG1hcmdpbjogJzAnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTJlMmUyJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICB9LCBwcm9wcy5jb25maWcpIDogVXRpbHMubWVyZ2VTdHlsZXMoe30sIHByb3BzLmNvbmZpZyl9PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLm5vdGVzKSA/XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy5ub3Rlcy5tYXAoKG5vdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17bm90ZUtleSsrfSBzdHlsZT17e3BhZGRpbmc6ICc4cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFsZXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAnMCd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PXtub3RlLm1lc3NhZ2VUeXBlID09PSAnV0FSTicgPyAnd2FybmluZycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZS5tZXNzYWdlVHlwZSA9PT0gJ0lORk8nID8gJycgOiAnZGFuZ2VyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Y29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCknfX0+e25vdGUubWVzc2FnZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BbGVydD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm93c1BlclBhZ2VPcHRpb25zLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5wYWdlU2l6ZSkgP1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuZ3JpZFR5cGUgPT09ICdUSUxFJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cGFkZGluZzogJzE2cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaWx0ZXJhYmxlKCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEYXRhR3JpZEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU9e2ZpbHRlckhhbmRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtwcm9wcy5jb25maWd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJXcmFwcGVyQ2xhc3M9e3Byb3BzLmZpbHRlcldyYXBwZXJDbGFzc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGg9e3Njcm9sbFdpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpbHRlclN1Ym1pdD17c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlcXVlc3RTb3J0PXtoYW5kbGVSZXF1ZXN0U29ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5yb290fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIHNwYWNpbmc9ezJ9ID0gMTZweCBnYXAgYmV0d2VlbiB0aWxlIGNhcmRzIChNVUkgMSB1bml0ID0gOHB4KS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dGVyIHdyYXBwZXIgbm93IHVzZXMgdW5pZm9ybSBwYWRkaW5nIGluc3RlYWQgb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXJsaWVyIGFzeW1tZXRyaWMgYG1hcmdpbjogMCAwIDhweCA4cHhgIHNvIGNhcmRzIGFyZW4ndFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2ggYWdhaW5zdCB0aGUgdG9wICsgcmlnaHQgb2YgdGhlIGdyaWQgY29udGFpbmVyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQgY29udGFpbmVyIHNwYWNpbmc9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQgY29udGFpbmVyIGl0ZW0geHM9ezEyfSBzcGFjaW5nPXsyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclRpbGVzKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICc0cHggOHB4IDAgOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNlMmUyZTInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt3cmFwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFdyYXAoZS50YXJnZXQuY2hlY2tlZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4PXt7ICcmIC5NdWlGb3JtQ29udHJvbExhYmVsLWxhYmVsJzogeyBmb250U2l6ZTogJzAuNzVyZW0nIH0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiV3JhcCB0YWJsZSB0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ge2ByZXNwb25zaXZlLXRhYmxlYH0gc3R5bGU9e3toZWlnaHQ6IHByb3BzLmhlaWdodH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUgY2xhc3NOYW1lPXtgJHsnb3VpVGFibGUnICsgKHJvd3MubGVuZ3RoID09PSAwID8gJyBvdWlUYWJsZS1lbXB0eScgOiAnJyl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxTcGFjaW5nPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJ0YWJsZVRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6ICcxMDAlJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzc05hbWU9eydmaWx0ZXJIZWFkJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3dpZHRoOiAnY2FsYygxMDAlIC0gJyArIHByb3BzLnNjcm9sbFdpZHRoICsgJ3B4KSd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpbHRlcmFibGUoKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEYXRhR3JpZEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlPXtmaWx0ZXJIYW5kbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9e2NvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyV3JhcHBlckNsYXNzPXtwcm9wcy5maWx0ZXJXcmFwcGVyQ2xhc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aD17c2Nyb2xsV2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpbHRlclN1Ym1pdD17c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZXF1ZXN0U29ydD17aGFuZGxlUmVxdWVzdFNvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERhdGFHcmlkSGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17aGVhZGluZ0hhbmRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9e2NvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1TZWxlY3RlZD17c2VsZWN0ZWQubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoPXtzY3JvbGxXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdEFsbENsaWNrPXtoYW5kbGVTZWxlY3RBbGxDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlcXVlc3RTb3J0PXtoYW5kbGVSZXF1ZXN0U29ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudD17dG90YWxOdW1iZXJPZlJvd3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSb3dzKFsuLi5yb3dzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRib2R5IGNsYXNzTmFtZT17Y2xhc3Nlcy50YWJsZUJvZHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3ttYXhIZWlnaHQ6IFV0aWxzLmlzTnVsbChwcm9wcy5ib2R5TWF4SGVpZ2h0KSA/IHByb3BzLmJvZHlNYXhIZWlnaHQgOiAnNDJ2aCd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFpblRhYmxlQm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3dzLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0l0ZW1TZWxlY3RlZCA9IGlzU2VsZWN0ZWQocm93LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWxJZCA9IGBlbmhhbmNlZC10YWJsZS1jaGVja2JveC0ke2luZGV4fWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRSb3dTdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy5yb3dBdHRyaWJ1dGVzICYmIHByb3BzLmNvbmZpZy5yb3dBdHRyaWJ1dGVzLnN0eWxlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLm1lcmdlT2JqZWN0cyhwcm9wcy5jb25maWcucm93QXR0cmlidXRlcy5zdHlsZSwgZGVmYXVsdFJvd1N0eWxlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Um93U3R5bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBoYW5kbGVSb3dNb3VzZUVudGVyKHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXtoYW5kbGVSb3dNb3VzZUxlYXZlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGhhbmRsZUNsaWNrKGV2ZW50LCByb3csIGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRvdWJsZUNsaWNrPXtldmVudCA9PiBwcm9wcy5vblJvd0RvdWJsZUNsaWNrICYmIHByb3BzLm9uUm93RG91YmxlQ2xpY2socm93LCBldmVudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNoZWNrZWQ9e2lzSXRlbVNlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXsnUk9XLScgKyByb3cuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2lzSXRlbVNlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17J291aS10YWJsZS1yb3cgJyArICgoaGlnaGxpZ2h0Um93U2VsZWN0aW9uLmN1cnJlbnQgPyBpc0l0ZW1TZWxlY3RlZCA/IGNsYXNzZXMudGFibGVTZWxlY3RlZCA6IGNsYXNzZXMudGFibGVSb3cgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAocm93LmNsYXNzTmFtZSA/ICgnICcgKyByb3cuY2xhc3NOYW1lKSA6ICcnKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc2VsZWN0aW9uTW9kZSA9PT0gJ01VTFRJUExFJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGQgcGFkZGluZz1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17TVVMVElfU0VMRUNUX0NIRUNLQk9YX0NPTF9XSURUSCArICdweCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnc2VsZWN0Q2VsbCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0l0ZW1TZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17eydhcmlhLWxhYmVsbGVkYnknOiBsYWJlbElkfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZD4gOiBudWxsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKGNvbHVtbi5hdHRyaWJ1dGVzWydoaWRkZW4nXSwgcHJvcHMuY29uZmlnLmlkKSA9PT0gdHJ1ZSA/IG51bGwgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmxheW91dCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbHVtbi5hdHRyaWJ1dGVzLndpZHRoID8gY29sdW1uLmF0dHJpYnV0ZXMud2lkdGggOiAoMTAwIC8gY29uZmlnLmNvbHVtbnMubGVuZ3RoKSArICclJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17IXByb3BzLmRpc2FibGVkICYmIGlzSXRlbVNlbGVjdGVkICYmICFVdGlscy5pc051bGwocHJvcHMuZm9ybSkgJiYgIVV0aWxzLmlzTnVsbChjb2x1bW4uZWRpdG9yKSA/ICdlZGl0Q2VsbCcgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4ICsgXCJfXCIgKyBjb2x1bW4uaWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU9e2NyZWF0ZUNvbHVtbkxheW91dEhhbmRsZShjb2x1bW4sIGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXggKyBcIl9cIiArIGNvbHVtbi5pZCArIFwiX2xheW91dFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVSb3c9e3Jvd3MuZmluZCgocikgPT4gci5pZCA9PT0gcm93LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz17SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwcm9wcy5jb25maWcuY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5pZCA9PT0gY29sdW1uLmlkKS5sYXlvdXQpKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfSBwYXJlbnQ9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGQ+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4uYXR0cmlidXRlcy53aWR0aCA/IGNvbHVtbi5hdHRyaWJ1dGVzLndpZHRoIDogKDEwMCAvIGNvbmZpZy5jb2x1bW5zLmxlbmd0aCkgKyAnJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9eyFwcm9wcy5kaXNhYmxlZCAmJiBpc0l0ZW1TZWxlY3RlZCAmJiAhVXRpbHMuaXNOdWxsKGNvbHVtbi5lZGl0b3IpID8gJ2VkaXRDZWxsJyA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXggKyBcIl9cIiArIGNvbHVtbi5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4gaGFuZGxlQ2VsbENsaWNrKGV2ZW50LCByb3cuaWQsIGNvbHVtbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsQ29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD17d3JhcH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUm93RXJyb3I9e3Jvd0Vycm9ySGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17Y3JlYXRlQ2VsbEVkaXRvckhhbmRsZShjb2x1bW4pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkPXtwcm9wcy52aWV3SWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3I9eyFwcm9wcy5kaXNhYmxlZCAmJiAhcm93LnJlYWRPbmx5ICYmICFyb3cuY29sdW1uUmVhZE9ubHk/Lltjb2x1bW4/LmlkXSA/IGNvbHVtbi5lZGl0b3IgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmQ2FsbGJhY2s9e2NyZWF0ZUNlbGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD17aXNJdGVtU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I9e2NvbHVtbi52YWxpZGF0b3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZUhhbmRsZXI9e2VkaXRvckNoYW5nZUhhbmRsZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db25maWc9e2NvbHVtbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFCaW5kaW5nPXshVXRpbHMuaXNOdWxsKGNvbHVtbi5kYXRhQmluZGluZykgPyBjb2x1bW4uZGF0YUJpbmRpbmcgOiBjb2x1bW4uaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlPXtjb2x1bW4uZmllbGRUeXBlIHx8IGNvbHVtbi5lZGl0b3I/LmZpZWxkVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxGb3JtYXR0ZXI9e2NvbHVtbi5jZWxsRm9ybWF0dGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JpdGVyaWE9e2NyaXRlcmlhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuYXR0cmlidXRlcz8ucGFnaW5hdGlvbikgJiYgKFV0aWxzLmlzTnVsbChwcm9wcy5wYWdpbmF0aW9uKSB8fCBwcm9wcy5wYWdpbmF0aW9uID09PSB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5wYWdpbmF0aW9uICYmIHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5wYWduYXRpb24gPT09IHRydWUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFnaW5hdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVQYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJncmlkLXRhYmxlLXBhZ2luYXRpb25cIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93c1BlclBhZ2VPcHRpb25zPXtyb3dzUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudD1cImRpdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PXt0b3RhbE51bWJlck9mUm93c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93c1BlclBhZ2U9e3Jvd3NQZXJQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlPXtwYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrSWNvbkJ1dHRvblByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbCc6ICdwcmV2aW91cyBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEljb25CdXR0b25Qcm9wcz17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiAnbmV4dCBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QYWdlQ2hhbmdlPXtoYW5kbGVDaGFuZ2VQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJvd3NQZXJQYWdlQ2hhbmdlPXtoYW5kbGVDaGFuZ2VSb3dzUGVyUGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLDBCQUFBLEdBQUFGLE9BQUE7QUFDQUEsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sZUFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sZ0JBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLGlCQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxnQkFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsT0FBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBWixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVksV0FBQSxHQUFBYixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQWEsVUFBQSxHQUFBZCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQWMsS0FBQSxHQUFBZixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQWUsT0FBQSxHQUFBaEIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFnQixDQUFBLEdBQUFDLHVCQUFBLENBQUFqQixPQUFBO0FBQ0EsSUFBQWtCLE1BQUEsR0FBQW5CLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBbUIsbUJBQUEsR0FBQXBCLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBb0IsT0FBQSxHQUFBcEIsT0FBQTtBQUNBLElBQUFxQixVQUFBLEdB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
|