kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
220 lines (219 loc) • 39.1 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _reactSortableHoc = require("react-sortable-hoc");
var _styledComponents = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components"));
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/common-utils/src");
var _common = require("../../common");
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
// @ts-expect-error - react-sortable-hoc libdef does not match true exports
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var SliderInput = (0, _styledComponents["default"])(_common.Input)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: 48px;\n margin: 0 4px 0 8px;\n font-size: ", ";\n"])), function (props) {
return props.theme.list1Size;
});
var StyledInputRow = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n width: 100%;\n justify-content: space-between;\n .layer__drag-handle {\n visibility: ", ";\n }\n .side-panel-panel__label {\n margin-bottom: 0;\n text-transform: none;\n }\n"])), function (props) {
return props.isEditing ? 'visible' : 'hidden';
});
var StyledTrash = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n align-items: center;\n margin-left: 8px;\n visibility: ", ";\n\n &:hover {\n cursor: pointer;\n color: ", ";\n }\n"])), function (props) {
return props.theme.subtextColor;
}, function (props) {
return props.isEditing ? 'visible' : 'hidden';
}, function (props) {
return props.theme.subtextColorActive;
});
var StyledDragHandle = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n opacity: 0;\n"])));
var dragHandleActive = (0, _styledComponents.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n .layer__drag-handle {\n color: ", ";\n opacity: 1;\n cursor: move;\n }\n"])), function (props) {
return props.theme.textColorHl;
});
var StyledSortableItem = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n padding: 4px 0;\n z-index: ", ";\n margin-left: -6px;\n\n &:not(.sorting) {\n &:hover {\n ", ";\n }\n }\n\n &.sorting-colors {\n background-color: ", ";\n ", ";\n }\n"])), function (props) {
return props.theme.dropdownWrapperZ + 1;
}, dragHandleActive, function (props) {
return props.theme.panelBackgroundHover;
}, dragHandleActive);
var SortableContainer = (0, _reactSortableHoc.sortableContainer)(function (_ref) {
var children = _ref.children;
return /*#__PURE__*/_react["default"].createElement("div", null, children);
});
var DragHandle = (0, _reactSortableHoc.sortableHandle)(function (_ref2) {
var className = _ref2.className,
children = _ref2.children;
return /*#__PURE__*/_react["default"].createElement(StyledDragHandle, {
className: className
}, children);
});
var SortableItem = (0, _reactSortableHoc.sortableElement)(function (_ref3) {
var children = _ref3.children,
isSorting = _ref3.isSorting;
return /*#__PURE__*/_react["default"].createElement(StyledSortableItem, {
className: (0, _classnames["default"])('custom-palette__sortable-items', {
sorting: isSorting
})
}, children);
});
function stringToNumber(val) {
return val === '' ? null : Number(val);
}
var InputRow = function InputRow(_ref4) {
var idx = _ref4.idx,
stop = _ref4.stop,
value = _ref4.value,
isSorting = _ref4.isSorting,
isEditing = _ref4.isEditing,
_onChange = _ref4.onChange,
onRemove = _ref4.onRemove;
return /*#__PURE__*/_react["default"].createElement(SortableItem, {
key: idx,
index: idx,
isSorting: isSorting
}, /*#__PURE__*/_react["default"].createElement(StyledInputRow, {
isEditing: isEditing
}, /*#__PURE__*/_react["default"].createElement(DragHandle, {
className: "layer__drag-handle"
}, /*#__PURE__*/_react["default"].createElement(_common.Icons.VertDots, {
height: "20px"
})), /*#__PURE__*/_react["default"].createElement(_common.PanelLabel, null, "zoom"), /*#__PURE__*/_react["default"].createElement(SliderInput, {
className: "vis-config-zoom__input__stop",
type: "number",
id: "".concat(idx, "-stop"),
key: "".concat(idx, "-stop"),
value: stop,
onChange: function onChange(e) {
return _onChange([stringToNumber(e.target.value), value]);
},
disabled: !isEditing
}), /*#__PURE__*/_react["default"].createElement(SliderInput, {
className: "vis-config-zoom__input__value",
type: "number",
id: "".concat(idx, "-value"),
key: "".concat(idx, "-value"),
value: value,
onChange: function onChange(e) {
return _onChange([stop, stringToNumber(e.target.value)]);
},
disabled: !isEditing
}), /*#__PURE__*/_react["default"].createElement(_common.PanelLabel, null, "px"), /*#__PURE__*/_react["default"].createElement(StyledTrash, {
isEditing: isEditing
}, /*#__PURE__*/_react["default"].createElement(_common.Icons.Trash, {
onClick: onRemove,
height: "16px"
}))));
};
function insertStop(stops) {
var newStops = null;
var i = 0;
while (!newStops && i < stops.length) {
if (stops[i][0] + 1 < stops[i + 1][0]) {
var st = stops[i][0] + 1;
var value = (stops[i][1] + stops[i + 1][1]) / 2;
newStops = [].concat((0, _toConsumableArray2["default"])(stops.slice(0, i + 1)), [[st, value]], (0, _toConsumableArray2["default"])(stops.slice(i + 1)));
} else {
i++;
}
}
if (!newStops) {
newStops = [].concat((0, _toConsumableArray2["default"])(stops.slice(0, i)), [[stops[i][0], (stops[i][1] + stops[i + 1][1]) / 2]], (0, _toConsumableArray2["default"])(stops.slice(i)));
}
return newStops;
}
var VisConfigByZoomInputContainer = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n margin: 8px 8px 12px 8px;\n\n .bottom-action {\n margin-top: 8px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n }\n\n .bottom-action.editing {\n justify-content: space-between;\n }\n"])), function (props) {
return props.isEditing ? props.theme.AZURE950 : 'transparent';
});
var VisConfigByZoomInput = function VisConfigByZoomInput(_ref5) {
var _ref5$config = _ref5.config,
config = _ref5$config === void 0 ? {} : _ref5$config,
property = _ref5.property,
onChange = _ref5.onChange;
var _useState = (0, _react.useState)(config.stops || []),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
stopsState = _useState2[0],
setStops = _useState2[1];
var _useState3 = (0, _react.useState)(false),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
isSorting = _useState4[0],
toggleSorting = _useState4[1];
var _useState5 = (0, _react.useState)(false),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
isEditing = _useState6[0],
toggleEditing = _useState6[1];
var onConfirm = (0, _react.useCallback)(function () {
onChange((0, _defineProperty2["default"])({}, property, _objectSpread(_objectSpread({}, config), {}, {
stops: stopsState
})));
toggleEditing(false);
}, [property, config, stopsState, onChange, toggleEditing]);
var addStop = (0, _react.useCallback)(function () {
return setStops(insertStop(stopsState));
}, [setStops, stopsState]);
var removeStop = (0, _react.useCallback)(function (i) {
return setStops([].concat((0, _toConsumableArray2["default"])(stopsState.slice(0, i)), (0, _toConsumableArray2["default"])(stopsState.slice(i + 1))));
}, [setStops, stopsState]);
var onSortEnd = (0, _react.useCallback)(function (_ref6) {
var oldIndex = _ref6.oldIndex,
newIndex = _ref6.newIndex;
var newStopsState = (0, _src.arrayMove)(stopsState, oldIndex, newIndex);
setStops(newStopsState);
toggleSorting(false);
}, [stopsState, setStops, toggleSorting]);
var onSortStart = (0, _react.useCallback)(function () {
toggleSorting(true);
}, [toggleSorting]);
return /*#__PURE__*/_react["default"].createElement(VisConfigByZoomInputContainer, {
isEditing: isEditing
}, /*#__PURE__*/_react["default"].createElement(SortableContainer, {
className: "custom-palette-container",
onSortEnd: onSortEnd,
onSortStart: onSortStart,
lockAxis: "y",
helperClass: "sorting-colors",
useDragHandle: true
}, stopsState.map(function (stop, idx) {
return /*#__PURE__*/_react["default"].createElement(InputRow, {
isEditing: isEditing,
key: "input-".concat(idx),
idx: idx,
stop: stop[0],
value: stop[1],
isSorting: isSorting,
onChange: function onChange(v) {
return setStops(Object.assign((0, _toConsumableArray2["default"])(stopsState || []), (0, _defineProperty2["default"])({}, idx, v)));
},
onRemove: function onRemove() {
return removeStop(idx);
}
});
})), isEditing ? /*#__PURE__*/_react["default"].createElement("div", {
className: "bottom-action editing"
}, /*#__PURE__*/_react["default"].createElement(_common.Button, {
secondary: true,
onClick: addStop,
small: true
}, /*#__PURE__*/_react["default"].createElement(_common.Icons.Add, {
height: "16px"
}), " Add Stop"), /*#__PURE__*/_react["default"].createElement(_common.Button, {
onClick: onConfirm,
small: true
}, "Confirm")) : /*#__PURE__*/_react["default"].createElement("div", {
className: "bottom-action"
}, /*#__PURE__*/_react["default"].createElement(_common.Button, {
onClick: function onClick() {
return toggleEditing(true);
},
small: true
}, "Edit")));
};
var _default = exports["default"] = VisConfigByZoomInput;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcmVhY3RTb3J0YWJsZUhvYyIsIl9zdHlsZWRDb21wb25lbnRzIiwiX3NyYyIsIl9jb21tb24iLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfdGVtcGxhdGVPYmplY3Q1IiwiX3RlbXBsYXRlT2JqZWN0NiIsIl90ZW1wbGF0ZU9iamVjdDciLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJTbGlkZXJJbnB1dCIsInN0eWxlZCIsIklucHV0IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwibGlzdDFTaXplIiwiU3R5bGVkSW5wdXRSb3ciLCJkaXYiLCJpc0VkaXRpbmciLCJTdHlsZWRUcmFzaCIsInN1YnRleHRDb2xvciIsInN1YnRleHRDb2xvckFjdGl2ZSIsIlN0eWxlZERyYWdIYW5kbGUiLCJkcmFnSGFuZGxlQWN0aXZlIiwiY3NzIiwidGV4dENvbG9ySGwiLCJTdHlsZWRTb3J0YWJsZUl0ZW0iLCJkcm9wZG93bldyYXBwZXJaIiwicGFuZWxCYWNrZ3JvdW5kSG92ZXIiLCJTb3J0YWJsZUNvbnRhaW5lciIsInNvcnRhYmxlQ29udGFpbmVyIiwiX3JlZiIsImNoaWxkcmVuIiwiY3JlYXRlRWxlbWVudCIsIkRyYWdIYW5kbGUiLCJzb3J0YWJsZUhhbmRsZSIsIl9yZWYyIiwiY2xhc3NOYW1lIiwiU29ydGFibGVJdGVtIiwic29ydGFibGVFbGVtZW50IiwiX3JlZjMiLCJpc1NvcnRpbmciLCJjbGFzc25hbWVzIiwic29ydGluZyIsInN0cmluZ1RvTnVtYmVyIiwidmFsIiwiTnVtYmVyIiwiSW5wdXRSb3ciLCJfcmVmNCIsImlkeCIsInN0b3AiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwib25SZW1vdmUiLCJrZXkiLCJpbmRleCIsIkljb25zIiwiVmVydERvdHMiLCJoZWlnaHQiLCJQYW5lbExhYmVsIiwidHlwZSIsImlkIiwiY29uY2F0IiwidGFyZ2V0IiwiZGlzYWJsZWQiLCJUcmFzaCIsIm9uQ2xpY2siLCJpbnNlcnRTdG9wIiwic3RvcHMiLCJuZXdTdG9wcyIsInN0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInNsaWNlIiwiVmlzQ29uZmlnQnlab29tSW5wdXRDb250YWluZXIiLCJBWlVSRTk1MCIsIlZpc0NvbmZpZ0J5Wm9vbUlucHV0IiwiX3JlZjUiLCJfcmVmNSRjb25maWciLCJjb25maWciLCJwcm9wZXJ0eSIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInN0b3BzU3RhdGUiLCJzZXRTdG9wcyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwidG9nZ2xlU29ydGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwidG9nZ2xlRWRpdGluZyIsIm9uQ29uZmlybSIsInVzZUNhbGxiYWNrIiwiYWRkU3RvcCIsInJlbW92ZVN0b3AiLCJvblNvcnRFbmQiLCJfcmVmNiIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJuZXdTdG9wc1N0YXRlIiwiYXJyYXlNb3ZlIiwib25Tb3J0U3RhcnQiLCJsb2NrQXhpcyIsImhlbHBlckNsYXNzIiwidXNlRHJhZ0hhbmRsZSIsIm1hcCIsInYiLCJhc3NpZ24iLCJCdXR0b24iLCJzZWNvbmRhcnkiLCJzbWFsbCIsIkFkZCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL3JhZGl1cy1ieS16b29tLWlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuLy8gQHRzLWV4cGVjdC1lcnJvciAtIHJlYWN0LXNvcnRhYmxlLWhvYyBsaWJkZWYgZG9lcyBub3QgbWF0Y2ggdHJ1ZSBleHBvcnRzXG5pbXBvcnQge3NvcnRhYmxlQ29udGFpbmVyLCBzb3J0YWJsZUVsZW1lbnQsIHNvcnRhYmxlSGFuZGxlfSBmcm9tICdyZWFjdC1zb3J0YWJsZS1ob2MnO1xuaW1wb3J0IHN0eWxlZCwge2Nzc30gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge1pvb21TdG9wcywgWm9vbVN0b3BzQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7YXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCB7SWNvbnMsIElucHV0LCBQYW5lbExhYmVsLCBCdXR0b259IGZyb20gJy4uLy4uL2NvbW1vbic7XG5cbmNvbnN0IFNsaWRlcklucHV0ID0gc3R5bGVkKElucHV0KWBcbiAgd2lkdGg6IDQ4cHg7XG4gIG1hcmdpbjogMCA0cHggMCA4cHg7XG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5saXN0MVNpemV9O1xuYDtcblxudHlwZSBTdHlsZWRJbnB1dFJvd1Byb3BzID0ge1xuICBpc0VkaXRpbmc/OiBib29sZWFuO1xufTtcblxuY29uc3QgU3R5bGVkSW5wdXRSb3cgPSBzdHlsZWQuZGl2PFN0eWxlZElucHV0Um93UHJvcHM+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAubGF5ZXJfX2RyYWctaGFuZGxlIHtcbiAgICB2aXNpYmlsaXR5OiAke3Byb3BzID0+IChwcm9wcy5pc0VkaXRpbmcgPyAndmlzaWJsZScgOiAnaGlkZGVuJyl9O1xuICB9XG4gIC5zaWRlLXBhbmVsLXBhbmVsX19sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgfVxuYDtcblxudHlwZSBTdHlsZWRUcmFzaFByb3BzID0ge1xuICBpc0VkaXRpbmc/OiBib29sZWFuO1xufTtcblxuY29uc3QgU3R5bGVkVHJhc2ggPSBzdHlsZWQuZGl2PFN0eWxlZFRyYXNoUHJvcHM+YFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3J9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tbGVmdDogOHB4O1xuICB2aXNpYmlsaXR5OiAke3Byb3BzID0+IChwcm9wcy5pc0VkaXRpbmcgPyAndmlzaWJsZScgOiAnaGlkZGVuJyl9O1xuXG4gICY6aG92ZXIge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3JBY3RpdmV9O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWREcmFnSGFuZGxlID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgb3BhY2l0eTogMDtcbmA7XG5cbmNvbnN0IGRyYWdIYW5kbGVBY3RpdmUgPSBjc3NgXG4gIC5sYXllcl9fZHJhZy1oYW5kbGUge1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckhsfTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGN1cnNvcjogbW92ZTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkU29ydGFibGVJdGVtID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogNHB4IDA7XG4gIHotaW5kZXg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZHJvcGRvd25XcmFwcGVyWiArIDF9O1xuICBtYXJnaW4tbGVmdDogLTZweDtcblxuICAmOm5vdCguc29ydGluZykge1xuICAgICY6aG92ZXIge1xuICAgICAgJHtkcmFnSGFuZGxlQWN0aXZlfTtcbiAgICB9XG4gIH1cblxuICAmLnNvcnRpbmctY29sb3JzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnBhbmVsQmFja2dyb3VuZEhvdmVyfTtcbiAgICAke2RyYWdIYW5kbGVBY3RpdmV9O1xuICB9XG5gO1xuXG5jb25zdCBTb3J0YWJsZUNvbnRhaW5lciA9IHNvcnRhYmxlQ29udGFpbmVyKCh7Y2hpbGRyZW59KSA9PiA8ZGl2PntjaGlsZHJlbn08L2Rpdj4pO1xuY29uc3QgRHJhZ0hhbmRsZSA9IHNvcnRhYmxlSGFuZGxlKCh7Y2xhc3NOYW1lLCBjaGlsZHJlbn0pID0+IChcbiAgPFN0eWxlZERyYWdIYW5kbGUgY2xhc3NOYW1lPXtjbGFzc05hbWV9PntjaGlsZHJlbn08L1N0eWxlZERyYWdIYW5kbGU+XG4pKTtcbmNvbnN0IFNvcnRhYmxlSXRlbSA9IHNvcnRhYmxlRWxlbWVudCgoe2NoaWxkcmVuLCBpc1NvcnRpbmd9KSA9PiAoXG4gIDxTdHlsZWRTb3J0YWJsZUl0ZW1cbiAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2N1c3RvbS1wYWxldHRlX19zb3J0YWJsZS1pdGVtcycsIHtzb3J0aW5nOiBpc1NvcnRpbmd9KX1cbiAgPlxuICAgIHtjaGlsZHJlbn1cbiAgPC9TdHlsZWRTb3J0YWJsZUl0ZW0+XG4pKTtcblxuZnVuY3Rpb24gc3RyaW5nVG9OdW1iZXIodmFsKSB7XG4gIHJldHVybiB2YWwgPT09ICcnID8gbnVsbCA6IE51bWJlcih2YWwpO1xufVxuXG50eXBlIElucHV0Um93UHJvcHMgPSB7XG4gIGlkeDogbnVtYmVyO1xuICBzdG9wOiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGlzU29ydGluZzogYm9vbGVhbjtcbiAgaXNFZGl0aW5nOiBib29sZWFuO1xuICBvbkNoYW5nZTogKHZhbHVlOiBbbnVtYmVyIHwgbnVsbCwgbnVtYmVyIHwgbnVsbF0pID0+IHZvaWQ7XG4gIG9uUmVtb3ZlOiAoKSA9PiB2b2lkO1xufTtcbmNvbnN0IElucHV0Um93OiBSZWFjdC5GQzxJbnB1dFJvd1Byb3BzPiA9ICh7XG4gIGlkeCxcbiAgc3RvcCxcbiAgdmFsdWUsXG4gIGlzU29ydGluZyxcbiAgaXNFZGl0aW5nLFxuICBvbkNoYW5nZSxcbiAgb25SZW1vdmVcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8U29ydGFibGVJdGVtIGtleT17aWR4fSBpbmRleD17aWR4fSBpc1NvcnRpbmc9e2lzU29ydGluZ30+XG4gICAgICA8U3R5bGVkSW5wdXRSb3cgaXNFZGl0aW5nPXtpc0VkaXRpbmd9PlxuICAgICAgICA8RHJhZ0hhbmRsZSBjbGFzc05hbWU9XCJsYXllcl9fZHJhZy1oYW5kbGVcIj5cbiAgICAgICAgICA8SWNvbnMuVmVydERvdHMgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvRHJhZ0hhbmRsZT5cbiAgICAgICAgPFBhbmVsTGFiZWw+em9vbTwvUGFuZWxMYWJlbD5cbiAgICAgICAgPFNsaWRlcklucHV0XG4gICAgICAgICAgY2xhc3NOYW1lPVwidmlzLWNvbmZpZy16b29tX19pbnB1dF9fc3RvcFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgaWQ9e2Ake2lkeH0tc3RvcGB9XG4gICAgICAgICAga2V5PXtgJHtpZHh9LXN0b3BgfVxuICAgICAgICAgIHZhbHVlPXtzdG9wfVxuICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IG9uQ2hhbmdlKFtzdHJpbmdUb051bWJlcihlLnRhcmdldC52YWx1ZSksIHZhbHVlXSl9XG4gICAgICAgICAgZGlzYWJsZWQ9eyFpc0VkaXRpbmd9XG4gICAgICAgIC8+XG4gICAgICAgIDxTbGlkZXJJbnB1dFxuICAgICAgICAgIGNsYXNzTmFtZT1cInZpcy1jb25maWctem9vbV9faW5wdXRfX3ZhbHVlXCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBpZD17YCR7aWR4fS12YWx1ZWB9XG4gICAgICAgICAga2V5PXtgJHtpZHh9LXZhbHVlYH1cbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgb25DaGFuZ2U9e2UgPT4gb25DaGFuZ2UoW3N0b3AsIHN0cmluZ1RvTnVtYmVyKGUudGFyZ2V0LnZhbHVlKV0pfVxuICAgICAgICAgIGRpc2FibGVkPXshaXNFZGl0aW5nfVxuICAgICAgICAvPlxuICAgICAgICA8UGFuZWxMYWJlbD5weDwvUGFuZWxMYWJlbD5cbiAgICAgICAgPFN0eWxlZFRyYXNoIGlzRWRpdGluZz17aXNFZGl0aW5nfT5cbiAgICAgICAgICA8SWNvbnMuVHJhc2ggb25DbGljaz17b25SZW1vdmV9IGhlaWdodD1cIjE2cHhcIiAvPlxuICAgICAgICA8L1N0eWxlZFRyYXNoPlxuICAgICAgPC9TdHlsZWRJbnB1dFJvdz5cbiAgICA8L1NvcnRhYmxlSXRlbT5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGluc2VydFN0b3Aoc3RvcHM6IFpvb21TdG9wcyk6IFpvb21TdG9wcyB7XG4gIGxldCBuZXdTdG9wczogWm9vbVN0b3BzIHwgbnVsbCA9IG51bGw7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKCFuZXdTdG9wcyAmJiBpIDwgc3RvcHMubGVuZ3RoKSB7XG4gICAgaWYgKHN0b3BzW2ldWzBdICsgMSA8IHN0b3BzW2kgKyAxXVswXSkge1xuICAgICAgY29uc3Qgc3QgPSBzdG9wc1tpXVswXSArIDE7XG4gICAgICBjb25zdCB2YWx1ZSA9IChzdG9wc1tpXVsxXSArIHN0b3BzW2kgKyAxXVsxXSkgLyAyO1xuICAgICAgbmV3U3RvcHMgPSBbLi4uc3RvcHMuc2xpY2UoMCwgaSArIDEpLCBbc3QsIHZhbHVlXSwgLi4uc3RvcHMuc2xpY2UoaSArIDEpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghbmV3U3RvcHMpIHtcbiAgICBuZXdTdG9wcyA9IFtcbiAgICAgIC4uLnN0b3BzLnNsaWNlKDAsIGkpLFxuICAgICAgW3N0b3BzW2ldWzBdLCAoc3RvcHNbaV1bMV0gKyBzdG9wc1tpICsgMV1bMV0pIC8gMl0sXG4gICAgICAuLi5zdG9wcy5zbGljZShpKVxuICAgIF07XG4gIH1cblxuICByZXR1cm4gbmV3U3RvcHM7XG59XG5cbnR5cGUgVmlzQ29uZmlnQnlab29tSW5wdXRDb250YWluZXJQcm9wcyA9IHtcbiAgaXNFZGl0aW5nPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFZpc0NvbmZpZ0J5Wm9vbUlucHV0Q29udGFpbmVyID0gc3R5bGVkLmRpdjxWaXNDb25maWdCeVpvb21JbnB1dENvbnRhaW5lclByb3BzPmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuaXNFZGl0aW5nID8gcHJvcHMudGhlbWUuQVpVUkU5NTAgOiAndHJhbnNwYXJlbnQnKX07XG4gIG1hcmdpbjogOHB4IDhweCAxMnB4IDhweDtcblxuICAuYm90dG9tLWFjdGlvbiB7XG4gICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICB9XG5cbiAgLmJvdHRvbS1hY3Rpb24uZWRpdGluZyB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG5gO1xuXG50eXBlIFByb3BzID0ge1xuICBjb25maWc6IFpvb21TdG9wc0NvbmZpZztcbiAgcHJvcGVydHk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdW5pdDogc3RyaW5nO1xuICBvbkNoYW5nZTogKHVwZGF0ZTogUmVjb3JkPHN0cmluZywgWm9vbVN0b3BzQ29uZmlnPikgPT4gdm9pZDtcbn07XG5cbmNvbnN0IFZpc0NvbmZpZ0J5Wm9vbUlucHV0OiBSZWFjdC5GQzxQcm9wcz4gPSAoe2NvbmZpZyA9IHt9LCBwcm9wZXJ0eSwgb25DaGFuZ2V9KSA9PiB7XG4gIGNvbnN0IFtzdG9wc1N0YXRlLCBzZXRTdG9wc10gPSB1c2VTdGF0ZShjb25maWcuc3RvcHMgfHwgW10pO1xuICBjb25zdCBbaXNTb3J0aW5nLCB0b2dnbGVTb3J0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzRWRpdGluZywgdG9nZ2xlRWRpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgb25Db25maXJtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uQ2hhbmdlKHtcbiAgICAgIFtwcm9wZXJ0eV06IHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBzdG9wczogc3RvcHNTdGF0ZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZUVkaXRpbmcoZmFsc2UpO1xuICB9LCBbcHJvcGVydHksIGNvbmZpZywgc3RvcHNTdGF0ZSwgb25DaGFuZ2UsIHRvZ2dsZUVkaXRpbmddKTtcbiAgY29uc3QgYWRkU3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHNldFN0b3BzKGluc2VydFN0b3Aoc3RvcHNTdGF0ZSkpLCBbc2V0U3RvcHMsIHN0b3BzU3RhdGVdKTtcbiAgY29uc3QgcmVtb3ZlU3RvcCA9IHVzZUNhbGxiYWNrKFxuICAgIGkgPT4gc2V0U3RvcHMoWy4uLnN0b3BzU3RhdGUuc2xpY2UoMCwgaSksIC4uLnN0b3BzU3RhdGUuc2xpY2UoaSArIDEpXSksXG4gICAgW3NldFN0b3BzLCBzdG9wc1N0YXRlXVxuICApO1xuICBjb25zdCBvblNvcnRFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoe29sZEluZGV4LCBuZXdJbmRleH0pID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0b3BzU3RhdGUgPSBhcnJheU1vdmUoc3RvcHNTdGF0ZSwgb2xkSW5kZXgsIG5ld0luZGV4KTtcbiAgICAgIHNldFN0b3BzKG5ld1N0b3BzU3RhdGUpO1xuICAgICAgdG9nZ2xlU29ydGluZyhmYWxzZSk7XG4gICAgfSxcbiAgICBbc3RvcHNTdGF0ZSwgc2V0U3RvcHMsIHRvZ2dsZVNvcnRpbmddXG4gICk7XG4gIGNvbnN0IG9uU29ydFN0YXJ0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZVNvcnRpbmcodHJ1ZSk7XG4gIH0sIFt0b2dnbGVTb3J0aW5nXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlzQ29uZmlnQnlab29tSW5wdXRDb250YWluZXIgaXNFZGl0aW5nPXtpc0VkaXRpbmd9PlxuICAgICAgPFNvcnRhYmxlQ29udGFpbmVyXG4gICAgICAgIGNsYXNzTmFtZT1cImN1c3RvbS1wYWxldHRlLWNvbnRhaW5lclwiXG4gICAgICAgIG9uU29ydEVuZD17b25Tb3J0RW5kfVxuICAgICAgICBvblNvcnRTdGFydD17b25Tb3J0U3RhcnR9XG4gICAgICAgIGxvY2tBeGlzPVwieVwiXG4gICAgICAgIGhlbHBlckNsYXNzPVwic29ydGluZy1jb2xvcnNcIlxuICAgICAgICB1c2VEcmFnSGFuZGxlXG4gICAgICA+XG4gICAgICAgIHtzdG9wc1N0YXRlLm1hcCgoc3RvcCwgaWR4KSA9PiAoXG4gICAgICAgICAgPElucHV0Um93XG4gICAgICAgICAgICBpc0VkaXRpbmc9e2lzRWRpdGluZ31cbiAgICAgICAgICAgIGtleT17YGlucHV0LSR7aWR4fWB9XG4gICAgICAgICAgICBpZHg9e2lkeH1cbiAgICAgICAgICAgIHN0b3A9e3N0b3BbMF19XG4gICAgICAgICAgICB2YWx1ZT17c3RvcFsxXX1cbiAgICAgICAgICAgIGlzU29ydGluZz17aXNTb3J0aW5nfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3YgPT4gc2V0U3RvcHMoT2JqZWN0LmFzc2lnbihbLi4uKHN0b3BzU3RhdGUgfHwgW10pXSwge1tpZHhdOiB2fSkpfVxuICAgICAgICAgICAgb25SZW1vdmU9eygpID0+IHJlbW92ZVN0b3AoaWR4KX1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgIDwvU29ydGFibGVDb250YWluZXI+XG4gICAgICB7aXNFZGl0aW5nID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJvdHRvbS1hY3Rpb24gZWRpdGluZ1wiPlxuICAgICAgICAgIDxCdXR0b24gc2Vjb25kYXJ5IG9uQ2xpY2s9e2FkZFN0b3B9IHNtYWxsPlxuICAgICAgICAgICAgPEljb25zLkFkZCBoZWlnaHQ9XCIxNnB4XCIgLz4gQWRkIFN0b3BcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uQ29uZmlybX0gc21hbGw+XG4gICAgICAgICAgICBDb25maXJtXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3R0b20tYWN0aW9uXCI+XG4gICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB0b2dnbGVFZGl0aW5nKHRydWUpfSBzbWFsbD5cbiAgICAgICAgICAgIEVkaXRcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvVmlzQ29uZmlnQnlab29tSW5wdXRDb250YWluZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWaXNDb25maWdC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
;