kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
148 lines (119 loc) • 18 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = RangePlotFactory;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireWildcard(require("styled-components"));
var _rangeBrush = _interopRequireDefault(require("./range-brush"));
var _histogramPlot = _interopRequireDefault(require("./histogram-plot"));
var _lineChart = _interopRequireDefault(require("./line-chart"));
var _utils = require("../../utils/utils");
var _templateObject;
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var StyledRangePlot = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: ", "px;\n display: flex;\n position: 'relative';\n"])), function (props) {
return props.theme.sliderBarHeight;
});
RangePlotFactory.deps = [_rangeBrush["default"], _histogramPlot["default"], _lineChart["default"]];
function RangePlotFactory(RangeBrush, HistogramPlot, LineChart) {
var RangePlot = function RangePlot(_ref) {
var onBrush = _ref.onBrush,
range = _ref.range,
value = _ref.value,
width = _ref.width,
plotType = _ref.plotType,
lineChart = _ref.lineChart,
histogram = _ref.histogram,
isEnlarged = _ref.isEnlarged,
isRanged = _ref.isRanged,
theme = _ref.theme,
chartProps = (0, _objectWithoutProperties2["default"])(_ref, ["onBrush", "range", "value", "width", "plotType", "lineChart", "histogram", "isEnlarged", "isRanged", "theme"]);
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
brushing = _useState2[0],
setBrushing = _useState2[1];
var _useState3 = (0, _react.useState)(null),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
hoveredDP = _useState4[0],
onMouseMove = _useState4[1];
var _useState5 = (0, _react.useState)(false),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
enableChartHover = _useState6[0],
setEnableChartHover = _useState6[1];
var height = isEnlarged ? theme.rangePlotHLarge : theme.rangePlotH;
var onBrushStart = (0, _react.useCallback)(function () {
setBrushing(true);
onMouseMove(null);
setEnableChartHover(false);
}, [setBrushing, onMouseMove, setEnableChartHover]);
var onBrushEnd = (0, _react.useCallback)(function () {
setBrushing(false);
setEnableChartHover(true);
}, [setBrushing, setEnableChartHover]);
var onMouseoverHandle = (0, _react.useCallback)(function () {
onMouseMove(null);
setEnableChartHover(false);
}, [onMouseMove, setEnableChartHover]);
var onMouseoutHandle = (0, _react.useCallback)(function () {
setEnableChartHover(true);
}, [setEnableChartHover]); // JsDom have limited support for SVG, d3 will fail
var brushComponent = (0, _utils.isTest)() ? null : /*#__PURE__*/_react["default"].createElement(RangeBrush, (0, _extends2["default"])({
onBrush: onBrush,
onBrushStart: onBrushStart,
onBrushEnd: onBrushEnd,
range: range,
value: value,
width: width,
height: height,
isRanged: isRanged,
onMouseoverHandle: onMouseoverHandle,
onMouseoutHandle: onMouseoutHandle
}, chartProps));
var commonProps = _objectSpread({
width: width,
value: value,
height: height,
margin: isEnlarged ? theme.rangePlotMarginLarge : theme.rangePlotMargin,
brushComponent: brushComponent,
brushing: brushing,
isEnlarged: isEnlarged,
enableChartHover: enableChartHover,
onMouseMove: onMouseMove,
hoveredDP: hoveredDP,
isRanged: isRanged
}, chartProps);
return /*#__PURE__*/_react["default"].createElement(StyledRangePlot, {
style: {
height: "".concat(isEnlarged ? theme.rangePlotContainerHLarge : theme.rangePlotContainerH, "px")
},
className: "kg-range-slider__plot"
}, plotType === 'lineChart' && lineChart ? /*#__PURE__*/_react["default"].createElement(LineChart, (0, _extends2["default"])({
lineChart: lineChart
}, commonProps)) : /*#__PURE__*/_react["default"].createElement(HistogramPlot, (0, _extends2["default"])({
histogram: histogram
}, commonProps)));
};
RangePlot.propTypes = {
value: _propTypes["default"].arrayOf(_propTypes["default"].number).isRequired,
histogram: _propTypes["default"].arrayOf(_propTypes["default"].shape({
x0: _propTypes["default"].number,
x1: _propTypes["default"].number
})),
lineChart: _propTypes["default"].object,
plotType: _propTypes["default"].string,
isEnlarged: _propTypes["default"].bool,
onBlur: _propTypes["default"].func,
width: _propTypes["default"].number.isRequired
};
return (0, _styledComponents.withTheme)(RangePlot);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbW1vbi9yYW5nZS1wbG90LmpzIl0sIm5hbWVzIjpbIlN0eWxlZFJhbmdlUGxvdCIsInN0eWxlZCIsImRpdiIsInByb3BzIiwidGhlbWUiLCJzbGlkZXJCYXJIZWlnaHQiLCJSYW5nZVBsb3RGYWN0b3J5IiwiZGVwcyIsIlJhbmdlQnJ1c2hGYWN0b3J5IiwiSGlzdG9ncmFtUGxvdEZhY3RvcnkiLCJMaW5lQ2hhcnRGYWN0b3J5IiwiUmFuZ2VCcnVzaCIsIkhpc3RvZ3JhbVBsb3QiLCJMaW5lQ2hhcnQiLCJSYW5nZVBsb3QiLCJvbkJydXNoIiwicmFuZ2UiLCJ2YWx1ZSIsIndpZHRoIiwicGxvdFR5cGUiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJpc0VubGFyZ2VkIiwiaXNSYW5nZWQiLCJjaGFydFByb3BzIiwiYnJ1c2hpbmciLCJzZXRCcnVzaGluZyIsImhvdmVyZWREUCIsIm9uTW91c2VNb3ZlIiwiZW5hYmxlQ2hhcnRIb3ZlciIsInNldEVuYWJsZUNoYXJ0SG92ZXIiLCJoZWlnaHQiLCJyYW5nZVBsb3RITGFyZ2UiLCJyYW5nZVBsb3RIIiwib25CcnVzaFN0YXJ0Iiwib25CcnVzaEVuZCIsIm9uTW91c2VvdmVySGFuZGxlIiwib25Nb3VzZW91dEhhbmRsZSIsImJydXNoQ29tcG9uZW50IiwiY29tbW9uUHJvcHMiLCJtYXJnaW4iLCJyYW5nZVBsb3RNYXJnaW5MYXJnZSIsInJhbmdlUGxvdE1hcmdpbiIsInJhbmdlUGxvdENvbnRhaW5lckhMYXJnZSIsInJhbmdlUGxvdENvbnRhaW5lckgiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJhcnJheU9mIiwibnVtYmVyIiwiaXNSZXF1aXJlZCIsInNoYXBlIiwieDAiLCJ4MSIsIm9iamVjdCIsInN0cmluZyIsImJvb2wiLCJvbkJsdXIiLCJmdW5jIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FB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LFNBQVMsRUFBRXlCLHNCQUFVQyxPQUFWLENBQ1RELHNCQUFVSSxLQUFWLENBQWdCO0FBQ2RDLE1BQUFBLEVBQUUsRUFBRUwsc0JBQVVFLE1BREE7QUFFZEksTUFBQUEsRUFBRSxFQUFFTixzQkFBVUU7QUFGQSxLQUFoQixDQURTLENBRlM7QUFRcEI1QixJQUFBQSxTQUFTLEVBQUUwQixzQkFBVU8sTUFSRDtBQVNwQmxDLElBQUFBLFFBQVEsRUFBRTJCLHNCQUFVUSxNQVRBO0FBVXBCaEMsSUFBQUEsVUFBVSxFQUFFd0Isc0JBQVVTLElBVkY7QUFXcEJDLElBQUFBLE1BQU0sRUFBRVYsc0JBQVVXLElBWEU7QUFZcEJ2QyxJQUFBQSxLQUFLLEVBQUU0QixzQkFBVUUsTUFBVixDQUFpQkM7QUFaSixHQUF0QjtBQWNBLFNBQU8saUNBQVVuQyxTQUFWLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlLCB1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBSYW5nZUJydXNoRmFjdG9yeSBmcm9tICcuL3JhbmdlLWJydXNoJztcbmltcG9ydCBIaXN0b2dyYW1QbG90RmFjdG9yeSBmcm9tICcuL2hpc3RvZ3JhbS1wbG90JztcbmltcG9ydCBMaW5lQ2hhcnRGYWN0b3J5IGZyb20gJy4vbGluZS1jaGFydCc7XG5pbXBvcnQge2lzVGVzdH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5jb25zdCBTdHlsZWRSYW5nZVBsb3QgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNsaWRlckJhckhlaWdodH1weDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZSc7XG5gO1xuXG5SYW5nZVBsb3RGYWN0b3J5LmRlcHMgPSBbUmFuZ2VCcnVzaEZhY3RvcnksIEhpc3RvZ3JhbVBsb3RGYWN0b3J5LCBMaW5lQ2hhcnRGYWN0b3J5XTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmFuZ2VQbG90RmFjdG9yeShSYW5nZUJydXNoLCBIaXN0b2dyYW1QbG90LCBMaW5lQ2hhcnQpIHtcbiAgY29uc3QgUmFuZ2VQbG90ID0gKHtcbiAgICBvbkJydXNoLFxuICAgIHJhbmdlLFxuICAgIHZhbHVlLFxuICAgIHdpZHRoLFxuICAgIHBsb3RUeXBlLFxuICAgIGxpbmVDaGFydCxcbiAgICBoaXN0b2dyYW0sXG4gICAgaXNFbmxhcmdlZCxcbiAgICBpc1JhbmdlZCxcbiAgICB0aGVtZSxcbiAgICAuLi5jaGFydFByb3BzXG4gIH0pID0+IHtcbiAgICBjb25zdCBbYnJ1c2hpbmcsIHNldEJydXNoaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaG92ZXJlZERQLCBvbk1vdXNlTW92ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbZW5hYmxlQ2hhcnRIb3Zlciwgc2V0RW5hYmxlQ2hhcnRIb3Zlcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgaGVpZ2h0ID0gaXNFbmxhcmdlZCA/IHRoZW1lLnJhbmdlUGxvdEhMYXJnZSA6IHRoZW1lLnJhbmdlUGxvdEg7XG5cbiAgICBjb25zdCBvbkJydXNoU3RhcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBzZXRCcnVzaGluZyh0cnVlKTtcbiAgICAgIG9uTW91c2VNb3ZlKG51bGwpO1xuICAgICAgc2V0RW5hYmxlQ2hhcnRIb3ZlcihmYWxzZSk7XG4gICAgfSwgW3NldEJydXNoaW5nLCBvbk1vdXNlTW92ZSwgc2V0RW5hYmxlQ2hhcnRIb3Zlcl0pO1xuXG4gICAgY29uc3Qgb25CcnVzaEVuZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHNldEJydXNoaW5nKGZhbHNlKTtcbiAgICAgIHNldEVuYWJsZUNoYXJ0SG92ZXIodHJ1ZSk7XG4gICAgfSwgW3NldEJydXNoaW5nLCBzZXRFbmFibGVDaGFydEhvdmVyXSk7XG5cbiAgICBjb25zdCBvbk1vdXNlb3ZlckhhbmRsZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIG9uTW91c2VNb3ZlKG51bGwpO1xuICAgICAgc2V0RW5hYmxlQ2hhcnRIb3ZlcihmYWxzZSk7XG4gICAgfSwgW29uTW91c2VNb3ZlLCBzZXRFbmFibGVDaGFydEhvdmVyXSk7XG5cbiAgICBjb25zdCBvbk1vdXNlb3V0SGFuZGxlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0RW5hYmxlQ2hhcnRIb3Zlcih0cnVlKTtcbiAgICB9LCBbc2V0RW5hYmxlQ2hhcnRIb3Zlcl0pO1xuXG4gICAgLy8gSnNEb20gaGF2ZSBsaW1pdGVkIHN1cHBvcnQgZm9yIFNWRywgZDMgd2lsbCBmYWlsXG4gICAgY29uc3QgYnJ1c2hDb21wb25lbnQgPSBpc1Rlc3QoKSA/IG51bGwgOiAoXG4gICAgICA8UmFuZ2VCcnVzaFxuICAgICAgICBvbkJydXNoPXtvbkJydXNofVxuICAgICAgICBvbkJydXNoU3RhcnQ9e29uQnJ1c2hTdGFydH1cbiAgICAgICAgb25CcnVzaEVuZD17b25CcnVzaEVuZH1cbiAgICAgICAgcmFuZ2U9e3JhbmdlfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgaGVpZ2h0PXtoZWlnaHR9XG4gICAgICAgIGlzUmFuZ2VkPXtpc1JhbmdlZH1cbiAgICAgICAgb25Nb3VzZW92ZXJIYW5kbGU9e29uTW91c2VvdmVySGFuZGxlfVxuICAgICAgICBvbk1vdXNlb3V0SGFuZGxlPXtvbk1vdXNlb3V0SGFuZGxlfVxuICAgICAgICB7Li4uY2hhcnRQcm9wc31cbiAgICAgIC8+XG4gICAgKTtcblxuICAgIGNvbnN0IGNvbW1vblByb3BzID0ge1xuICAgICAgd2lkdGgsXG4gICAgICB2YWx1ZSxcbiAgICAgIGhlaWdodCxcbiAgICAgIG1hcmdpbjogaXNFbmxhcmdlZCA/IHRoZW1lLnJhbmdlUGxvdE1hcmdpbkxhcmdlIDogdGhlbWUucmFuZ2VQbG90TWFyZ2luLFxuICAgICAgYnJ1c2hDb21wb25lbnQsXG4gICAgICBicnVzaGluZyxcbiAgICAgIGlzRW5sYXJnZWQsXG4gICAgICBlbmFibGVDaGFydEhvdmVyLFxuICAgICAgb25Nb3VzZU1vdmUsXG4gICAgICBob3ZlcmVkRFAsXG4gICAgICBpc1JhbmdlZCxcbiAgICAgIC4uLmNoYXJ0UHJvcHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRSYW5nZVBsb3RcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBoZWlnaHQ6IGAke2lzRW5sYXJnZWQgPyB0aGVtZS5yYW5nZVBsb3RDb250YWluZXJITGFyZ2UgOiB0aGVtZS5yYW5nZVBsb3RDb250YWluZXJIfXB4YFxuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJrZy1yYW5nZS1zbGlkZXJfX3Bsb3RcIlxuICAgICAgPlxuICAgICAgICB7cGxvdFR5cGUgPT09ICdsaW5lQ2hhcnQnICYmIGxpbmVDaGFydCA/IChcbiAgICAgICAgICA8TGluZUNoYXJ0IGxpbmVDaGFydD17bGluZUNoYXJ0fSB7Li4uY29tbW9uUHJvcHN9IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPEhpc3RvZ3JhbVBsb3QgaGlzdG9ncmFtPXtoaXN0b2dyYW19IHsuLi5jb21tb25Qcm9wc30gLz5cbiAgICAgICAgKX1cbiAgICAgIDwvU3R5bGVkUmFuZ2VQbG90PlxuICAgICk7XG4gIH07XG5cbiAgUmFuZ2VQbG90LnByb3BUeXBlcyA9IHtcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlcikuaXNSZXF1aXJlZCxcbiAgICBoaXN0b2dyYW06IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgeDA6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIHgxOiBQcm9wVHlwZXMubnVtYmVyXG4gICAgICB9KVxuICAgICksXG4gICAgbGluZUNoYXJ0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBsb3RUeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlzRW5sYXJnZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxuICB9O1xuICByZXR1cm4gd2l0aFRoZW1lKFJhbmdlUGxvdCk7XG59XG4iXX0=