kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
220 lines (219 loc) • 38.9 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("react"));
var _reactSortableHoc = require("react-sortable-hoc");
var _styledComponents = _interopRequireWildcard(require("styled-components"));
var _utils = require("@kepler.gl/utils");
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, _utils.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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcmVhY3RTb3J0YWJsZUhvYyIsIl9zdHlsZWRDb21wb25lbnRzIiwiX3V0aWxzIiwiX2NvbW1vbiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIlNsaWRlcklucHV0Iiwic3R5bGVkIiwiSW5wdXQiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJsaXN0MVNpemUiLCJTdHlsZWRJbnB1dFJvdyIsImRpdiIsImlzRWRpdGluZyIsIlN0eWxlZFRyYXNoIiwic3VidGV4dENvbG9yIiwic3VidGV4dENvbG9yQWN0aXZlIiwiU3R5bGVkRHJhZ0hhbmRsZSIsImRyYWdIYW5kbGVBY3RpdmUiLCJjc3MiLCJ0ZXh0Q29sb3JIbCIsIlN0eWxlZFNvcnRhYmxlSXRlbSIsImRyb3Bkb3duV3JhcHBlcloiLCJwYW5lbEJhY2tncm91bmRIb3ZlciIsIlNvcnRhYmxlQ29udGFpbmVyIiwic29ydGFibGVDb250YWluZXIiLCJfcmVmIiwiY2hpbGRyZW4iLCJjcmVhdGVFbGVtZW50IiwiRHJhZ0hhbmRsZSIsInNvcnRhYmxlSGFuZGxlIiwiX3JlZjIiLCJjbGFzc05hbWUiLCJTb3J0YWJsZUl0ZW0iLCJzb3J0YWJsZUVsZW1lbnQiLCJfcmVmMyIsImlzU29ydGluZyIsImNsYXNzbmFtZXMiLCJzb3J0aW5nIiwic3RyaW5nVG9OdW1iZXIiLCJ2YWwiLCJOdW1iZXIiLCJJbnB1dFJvdyIsIl9yZWY0IiwiaWR4Iiwic3RvcCIsInZhbHVlIiwib25DaGFuZ2UiLCJvblJlbW92ZSIsImtleSIsImluZGV4IiwiSWNvbnMiLCJWZXJ0RG90cyIsImhlaWdodCIsIlBhbmVsTGFiZWwiLCJ0eXBlIiwiaWQiLCJjb25jYXQiLCJ0YXJnZXQiLCJkaXNhYmxlZCIsIlRyYXNoIiwib25DbGljayIsImluc2VydFN0b3AiLCJzdG9wcyIsIm5ld1N0b3BzIiwic3QiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwic2xpY2UiLCJWaXNDb25maWdCeVpvb21JbnB1dENvbnRhaW5lciIsIkFaVVJFOTUwIiwiVmlzQ29uZmlnQnlab29tSW5wdXQiLCJfcmVmNSIsIl9yZWY1JGNvbmZpZyIsImNvbmZpZyIsInByb3BlcnR5IiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic3RvcHNTdGF0ZSIsInNldFN0b3BzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJ0b2dnbGVTb3J0aW5nIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b2dnbGVFZGl0aW5nIiwib25Db25maXJtIiwidXNlQ2FsbGJhY2siLCJhZGRTdG9wIiwicmVtb3ZlU3RvcCIsIm9uU29ydEVuZCIsIl9yZWY2Iiwib2xkSW5kZXgiLCJuZXdJbmRleCIsIm5ld1N0b3BzU3RhdGUiLCJhcnJheU1vdmUiLCJvblNvcnRTdGFydCIsImxvY2tBeGlzIiwiaGVscGVyQ2xhc3MiLCJ1c2VEcmFnSGFuZGxlIiwibWFwIiwidiIsImFzc2lnbiIsIkJ1dHRvbiIsInNlY29uZGFyeSIsInNtYWxsIiwiQWRkIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvcmFkaXVzLWJ5LXpvb20taW5wdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG4vLyBAdHMtZXhwZWN0LWVycm9yIC0gcmVhY3Qtc29ydGFibGUtaG9jIGxpYmRlZiBkb2VzIG5vdCBtYXRjaCB0cnVlIGV4cG9ydHNcbmltcG9ydCB7c29ydGFibGVDb250YWluZXIsIHNvcnRhYmxlRWxlbWVudCwgc29ydGFibGVIYW5kbGV9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgc3R5bGVkLCB7Y3NzfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7Wm9vbVN0b3BzLCBab29tU3RvcHNDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHthcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge0ljb25zLCBJbnB1dCwgUGFuZWxMYWJlbCwgQnV0dG9ufSBmcm9tICcuLi8uLi9jb21tb24nO1xuXG5jb25zdCBTbGlkZXJJbnB1dCA9IHN0eWxlZChJbnB1dClgXG4gIHdpZHRoOiA0OHB4O1xuICBtYXJnaW46IDAgNHB4IDAgOHB4O1xuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGlzdDFTaXplfTtcbmA7XG5cbnR5cGUgU3R5bGVkSW5wdXRSb3dQcm9wcyA9IHtcbiAgaXNFZGl0aW5nPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFN0eWxlZElucHV0Um93ID0gc3R5bGVkLmRpdjxTdHlsZWRJbnB1dFJvd1Byb3BzPmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLmxheWVyX19kcmFnLWhhbmRsZSB7XG4gICAgdmlzaWJpbGl0eTogJHtwcm9wcyA9PiAocHJvcHMuaXNFZGl0aW5nID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpfTtcbiAgfVxuICAuc2lkZS1wYW5lbC1wYW5lbF9fbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIH1cbmA7XG5cbnR5cGUgU3R5bGVkVHJhc2hQcm9wcyA9IHtcbiAgaXNFZGl0aW5nPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFN0eWxlZFRyYXNoID0gc3R5bGVkLmRpdjxTdHlsZWRUcmFzaFByb3BzPmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yfTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgdmlzaWJpbGl0eTogJHtwcm9wcyA9PiAocHJvcHMuaXNFZGl0aW5nID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpfTtcblxuICAmOmhvdmVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yQWN0aXZlfTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkRHJhZ0hhbmRsZSA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG9wYWNpdHk6IDA7XG5gO1xuXG5jb25zdCBkcmFnSGFuZGxlQWN0aXZlID0gY3NzYFxuICAubGF5ZXJfX2RyYWctaGFuZGxlIHtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gICAgb3BhY2l0eTogMTtcbiAgICBjdXJzb3I6IG1vdmU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZFNvcnRhYmxlSXRlbSA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDRweCAwO1xuICB6LWluZGV4OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmRyb3Bkb3duV3JhcHBlclogKyAxfTtcbiAgbWFyZ2luLWxlZnQ6IC02cHg7XG5cbiAgJjpub3QoLnNvcnRpbmcpIHtcbiAgICAmOmhvdmVyIHtcbiAgICAgICR7ZHJhZ0hhbmRsZUFjdGl2ZX07XG4gICAgfVxuICB9XG5cbiAgJi5zb3J0aW5nLWNvbG9ycyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5wYW5lbEJhY2tncm91bmRIb3Zlcn07XG4gICAgJHtkcmFnSGFuZGxlQWN0aXZlfTtcbiAgfVxuYDtcblxuY29uc3QgU29ydGFibGVDb250YWluZXIgPSBzb3J0YWJsZUNvbnRhaW5lcigoe2NoaWxkcmVufSkgPT4gPGRpdj57Y2hpbGRyZW59PC9kaXY+KTtcbmNvbnN0IERyYWdIYW5kbGUgPSBzb3J0YWJsZUhhbmRsZSgoe2NsYXNzTmFtZSwgY2hpbGRyZW59KSA9PiAoXG4gIDxTdHlsZWREcmFnSGFuZGxlIGNsYXNzTmFtZT17Y2xhc3NOYW1lfT57Y2hpbGRyZW59PC9TdHlsZWREcmFnSGFuZGxlPlxuKSk7XG5jb25zdCBTb3J0YWJsZUl0ZW0gPSBzb3J0YWJsZUVsZW1lbnQoKHtjaGlsZHJlbiwgaXNTb3J0aW5nfSkgPT4gKFxuICA8U3R5bGVkU29ydGFibGVJdGVtXG4gICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdjdXN0b20tcGFsZXR0ZV9fc29ydGFibGUtaXRlbXMnLCB7c29ydGluZzogaXNTb3J0aW5nfSl9XG4gID5cbiAgICB7Y2hpbGRyZW59XG4gIDwvU3R5bGVkU29ydGFibGVJdGVtPlxuKSk7XG5cbmZ1bmN0aW9uIHN0cmluZ1RvTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdmFsID09PSAnJyA/IG51bGwgOiBOdW1iZXIodmFsKTtcbn1cblxudHlwZSBJbnB1dFJvd1Byb3BzID0ge1xuICBpZHg6IG51bWJlcjtcbiAgc3RvcDogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICBpc1NvcnRpbmc6IGJvb2xlYW47XG4gIGlzRWRpdGluZzogYm9vbGVhbjtcbiAgb25DaGFuZ2U6ICh2YWx1ZTogW251bWJlciB8IG51bGwsIG51bWJlciB8IG51bGxdKSA9PiB2b2lkO1xuICBvblJlbW92ZTogKCkgPT4gdm9pZDtcbn07XG5jb25zdCBJbnB1dFJvdzogUmVhY3QuRkM8SW5wdXRSb3dQcm9wcz4gPSAoe1xuICBpZHgsXG4gIHN0b3AsXG4gIHZhbHVlLFxuICBpc1NvcnRpbmcsXG4gIGlzRWRpdGluZyxcbiAgb25DaGFuZ2UsXG4gIG9uUmVtb3ZlXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFNvcnRhYmxlSXRlbSBrZXk9e2lkeH0gaW5kZXg9e2lkeH0gaXNTb3J0aW5nPXtpc1NvcnRpbmd9PlxuICAgICAgPFN0eWxlZElucHV0Um93IGlzRWRpdGluZz17aXNFZGl0aW5nfT5cbiAgICAgICAgPERyYWdIYW5kbGUgY2xhc3NOYW1lPVwibGF5ZXJfX2RyYWctaGFuZGxlXCI+XG4gICAgICAgICAgPEljb25zLlZlcnREb3RzIGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICA8L0RyYWdIYW5kbGU+XG4gICAgICAgIDxQYW5lbExhYmVsPnpvb208L1BhbmVsTGFiZWw+XG4gICAgICAgIDxTbGlkZXJJbnB1dFxuICAgICAgICAgIGNsYXNzTmFtZT1cInZpcy1jb25maWctem9vbV9faW5wdXRfX3N0b3BcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIGlkPXtgJHtpZHh9LXN0b3BgfVxuICAgICAgICAgIGtleT17YCR7aWR4fS1zdG9wYH1cbiAgICAgICAgICB2YWx1ZT17c3RvcH1cbiAgICAgICAgICBvbkNoYW5nZT17ZSA9PiBvbkNoYW5nZShbc3RyaW5nVG9OdW1iZXIoZS50YXJnZXQudmFsdWUpLCB2YWx1ZV0pfVxuICAgICAgICAgIGRpc2FibGVkPXshaXNFZGl0aW5nfVxuICAgICAgICAvPlxuICAgICAgICA8U2xpZGVySW5wdXRcbiAgICAgICAgICBjbGFzc05hbWU9XCJ2aXMtY29uZmlnLXpvb21fX2lucHV0X192YWx1ZVwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgaWQ9e2Ake2lkeH0tdmFsdWVgfVxuICAgICAgICAgIGtleT17YCR7aWR4fS12YWx1ZWB9XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IG9uQ2hhbmdlKFtzdG9wLCBzdHJpbmdUb051bWJlcihlLnRhcmdldC52YWx1ZSldKX1cbiAgICAgICAgICBkaXNhYmxlZD17IWlzRWRpdGluZ31cbiAgICAgICAgLz5cbiAgICAgICAgPFBhbmVsTGFiZWw+cHg8L1BhbmVsTGFiZWw+XG4gICAgICAgIDxTdHlsZWRUcmFzaCBpc0VkaXRpbmc9e2lzRWRpdGluZ30+XG4gICAgICAgICAgPEljb25zLlRyYXNoIG9uQ2xpY2s9e29uUmVtb3ZlfSBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAgICAgPC9TdHlsZWRUcmFzaD5cbiAgICAgIDwvU3R5bGVkSW5wdXRSb3c+XG4gICAgPC9Tb3J0YWJsZUl0ZW0+XG4gICk7XG59O1xuXG5mdW5jdGlvbiBpbnNlcnRTdG9wKHN0b3BzOiBab29tU3RvcHMpOiBab29tU3RvcHMge1xuICBsZXQgbmV3U3RvcHM6IFpvb21TdG9wcyB8IG51bGwgPSBudWxsO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlICghbmV3U3RvcHMgJiYgaSA8IHN0b3BzLmxlbmd0aCkge1xuICAgIGlmIChzdG9wc1tpXVswXSArIDEgPCBzdG9wc1tpICsgMV1bMF0pIHtcbiAgICAgIGNvbnN0IHN0ID0gc3RvcHNbaV1bMF0gKyAxO1xuICAgICAgY29uc3QgdmFsdWUgPSAoc3RvcHNbaV1bMV0gKyBzdG9wc1tpICsgMV1bMV0pIC8gMjtcbiAgICAgIG5ld1N0b3BzID0gWy4uLnN0b3BzLnNsaWNlKDAsIGkgKyAxKSwgW3N0LCB2YWx1ZV0sIC4uLnN0b3BzLnNsaWNlKGkgKyAxKV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICB9XG4gIH1cblxuICBpZiAoIW5ld1N0b3BzKSB7XG4gICAgbmV3U3RvcHMgPSBbXG4gICAgICAuLi5zdG9wcy5zbGljZSgwLCBpKSxcbiAgICAgIFtzdG9wc1tpXVswXSwgKHN0b3BzW2ldWzFdICsgc3RvcHNbaSArIDFdWzFdKSAvIDJdLFxuICAgICAgLi4uc3RvcHMuc2xpY2UoaSlcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0b3BzO1xufVxuXG50eXBlIFZpc0NvbmZpZ0J5Wm9vbUlucHV0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGlzRWRpdGluZz86IGJvb2xlYW47XG59O1xuXG5jb25zdCBWaXNDb25maWdCeVpvb21JbnB1dENvbnRhaW5lciA9IHN0eWxlZC5kaXY8VmlzQ29uZmlnQnlab29tSW5wdXRDb250YWluZXJQcm9wcz5gXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmlzRWRpdGluZyA/IHByb3BzLnRoZW1lLkFaVVJFOTUwIDogJ3RyYW5zcGFyZW50Jyl9O1xuICBtYXJnaW46IDhweCA4cHggMTJweCA4cHg7XG5cbiAgLmJvdHRvbS1hY3Rpb24ge1xuICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5ib3R0b20tYWN0aW9uLmVkaXRpbmcge1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuYDtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29uZmlnOiBab29tU3RvcHNDb25maWc7XG4gIHByb3BlcnR5OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHVuaXQ6IHN0cmluZztcbiAgb25DaGFuZ2U6ICh1cGRhdGU6IFJlY29yZDxzdHJpbmcsIFpvb21TdG9wc0NvbmZpZz4pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBWaXNDb25maWdCeVpvb21JbnB1dDogUmVhY3QuRkM8UHJvcHM+ID0gKHtjb25maWcgPSB7fSwgcHJvcGVydHksIG9uQ2hhbmdlfSkgPT4ge1xuICBjb25zdCBbc3RvcHNTdGF0ZSwgc2V0U3RvcHNdID0gdXNlU3RhdGUoY29uZmlnLnN0b3BzIHx8IFtdKTtcbiAgY29uc3QgW2lzU29ydGluZywgdG9nZ2xlU29ydGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0VkaXRpbmcsIHRvZ2dsZUVkaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uQ29uZmlybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNoYW5nZSh7XG4gICAgICBbcHJvcGVydHldOiB7XG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgc3RvcHM6IHN0b3BzU3RhdGVcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0b2dnbGVFZGl0aW5nKGZhbHNlKTtcbiAgfSwgW3Byb3BlcnR5LCBjb25maWcsIHN0b3BzU3RhdGUsIG9uQ2hhbmdlLCB0b2dnbGVFZGl0aW5nXSk7XG4gIGNvbnN0IGFkZFN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiBzZXRTdG9wcyhpbnNlcnRTdG9wKHN0b3BzU3RhdGUpKSwgW3NldFN0b3BzLCBzdG9wc1N0YXRlXSk7XG4gIGNvbnN0IHJlbW92ZVN0b3AgPSB1c2VDYWxsYmFjayhcbiAgICBpID0+IHNldFN0b3BzKFsuLi5zdG9wc1N0YXRlLnNsaWNlKDAsIGkpLCAuLi5zdG9wc1N0YXRlLnNsaWNlKGkgKyAxKV0pLFxuICAgIFtzZXRTdG9wcywgc3RvcHNTdGF0ZV1cbiAgKTtcbiAgY29uc3Qgb25Tb3J0RW5kID0gdXNlQ2FsbGJhY2soXG4gICAgKHtvbGRJbmRleCwgbmV3SW5kZXh9KSA9PiB7XG4gICAgICBjb25zdCBuZXdTdG9wc1N0YXRlID0gYXJyYXlNb3ZlKHN0b3BzU3RhdGUsIG9sZEluZGV4LCBuZXdJbmRleCk7XG4gICAgICBzZXRTdG9wcyhuZXdTdG9wc1N0YXRlKTtcbiAgICAgIHRvZ2dsZVNvcnRpbmcoZmFsc2UpO1xuICAgIH0sXG4gICAgW3N0b3BzU3RhdGUsIHNldFN0b3BzLCB0b2dnbGVTb3J0aW5nXVxuICApO1xuICBjb25zdCBvblNvcnRTdGFydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVTb3J0aW5nKHRydWUpO1xuICB9LCBbdG9nZ2xlU29ydGluZ10pO1xuXG4gIHJldHVybiAoXG4gICAgPFZpc0NvbmZpZ0J5Wm9vbUlucHV0Q29udGFpbmVyIGlzRWRpdGluZz17aXNFZGl0aW5nfT5cbiAgICAgIDxTb3J0YWJsZUNvbnRhaW5lclxuICAgICAgICBjbGFzc05hbWU9XCJjdXN0b20tcGFsZXR0ZS1jb250YWluZXJcIlxuICAgICAgICBvblNvcnRFbmQ9e29uU29ydEVuZH1cbiAgICAgICAgb25Tb3J0U3RhcnQ9e29uU29ydFN0YXJ0fVxuICAgICAgICBsb2NrQXhpcz1cInlcIlxuICAgICAgICBoZWxwZXJDbGFzcz1cInNvcnRpbmctY29sb3JzXCJcbiAgICAgICAgdXNlRHJhZ0hhbmRsZVxuICAgICAgPlxuICAgICAgICB7c3RvcHNTdGF0ZS5tYXAoKHN0b3AsIGlkeCkgPT4gKFxuICAgICAgICAgIDxJbnB1dFJvd1xuICAgICAgICAgICAgaXNFZGl0aW5nPXtpc0VkaXRpbmd9XG4gICAgICAgICAgICBrZXk9e2BpbnB1dC0ke2lkeH1gfVxuICAgICAgICAgICAgaWR4PXtpZHh9XG4gICAgICAgICAgICBzdG9wPXtzdG9wWzBdfVxuICAgICAgICAgICAgdmFsdWU9e3N0b3BbMV19XG4gICAgICAgICAgICBpc1NvcnRpbmc9e2lzU29ydGluZ31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt2ID0+IHNldFN0b3BzKE9iamVjdC5hc3NpZ24oWy4uLihzdG9wc1N0YXRlIHx8IFtdKV0sIHtbaWR4XTogdn0pKX1cbiAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiByZW1vdmVTdG9wKGlkeCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L1NvcnRhYmxlQ29udGFpbmVyPlxuICAgICAge2lzRWRpdGluZyA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3R0b20tYWN0aW9uIGVkaXRpbmdcIj5cbiAgICAgICAgICA8QnV0dG9uIHNlY29uZGFyeSBvbkNsaWNrPXthZGRTdG9wfSBzbWFsbD5cbiAgICAgICAgICAgIDxJY29ucy5BZGQgaGVpZ2h0PVwiMTZweFwiIC8+IEFkZCBTdG9wXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvbkNvbmZpcm19IHNtYWxsPlxuICAgICAgICAgICAgQ29uZmlybVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm90dG9tLWFjdGlvblwiPlxuICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gdG9nZ2xlRWRpdGluZyh0cnVlKX0gc21hbGw+XG4gICAgICAgICAgICBFZGl0XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L1Zpc0NvbmZpZ0J5Wm9vbUlucHV0Q29udGFpbmVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVmlzQ29uZmlnQnlab29tSW5wdXQ7XG4iXSwibWFwcGlu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
;