kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
208 lines (169 loc) • 22.9 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _sliderHandle = _interopRequireDefault(require("./slider-handle"));
var _sliderBarHandle = _interopRequireDefault(require("./slider-bar-handle"));
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; }
function _templateObject2() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n flex-grow: 1;\n margin-top: ", "px;\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin-bottom: 12px;\n background-color: ", ";\n height: ", ";\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
function noop() {}
var StyledRangeSlider = _styledComponents["default"].div(_templateObject(), function (props) {
return props.theme.sliderBarBgd;
}, function (props) {
return props.theme.sliderBarHeight;
});
var SliderWrapper = _styledComponents["default"].div(_templateObject2(), function (props) {
return props.isRanged ? 0 : 10;
});
var Slider =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(Slider, _Component);
function Slider() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2["default"])(this, Slider);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(Slider)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "ref", undefined);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_saveRef", function (ref) {
_this.ref = ref;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "slide0Listener", function (x) {
var xPercent = x / _this.ref.offsetWidth;
var maxDelta = _this.props.maxValue - _this.props.minValue;
var val = xPercent * maxDelta;
_this.props.onSlider0Change.call((0, _assertThisInitialized2["default"])(_this), val + _this.props.value0);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "slide1Listener", function (x) {
var xPercent = x / _this.ref.offsetWidth;
var maxDelta = _this.props.maxValue - _this.props.minValue;
var val = xPercent * maxDelta;
_this.props.onSlider1Change(val + _this.props.value1);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "sliderBarListener", function (x) {
var xPercent = x / _this.ref.offsetWidth;
var maxDelta = _this.props.maxValue - _this.props.minValue;
var val = xPercent * maxDelta;
var val0 = val + _this.props.value0;
var val1 = val + _this.props.value1;
_this.props.onSliderBarChange(val0, val1);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "calcHandleLeft0", function (w, l, num) {
return w === 0 ? "calc(".concat(l, "% - ").concat(_this.props.sliderHandleWidth / 2, "px)") : "calc(".concat(l, "% - ").concat(_this.props.sliderHandleWidth / 2, "px)");
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "calcHandleLeft1", function (w, l) {
return _this.props.isRanged && w === 0 ? "".concat(l, "%") : "calc(".concat(l + w, "% - ").concat(_this.props.sliderHandleWidth / 2, "px)");
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "createSlider", function (width, v0Left) {
return _react["default"].createElement("div", null, _react["default"].createElement(StyledRangeSlider, {
className: "kg-range-slider"
}, _react["default"].createElement(_sliderHandle["default"], {
className: "kg-range-slider__handle",
left: _this.calcHandleLeft0(width, v0Left),
valueListener: _this.slide0Listener,
sliderHandleWidth: _this.props.sliderHandleWidth,
display: _this.props.isRanged
}), _react["default"].createElement(_sliderHandle["default"], {
className: "kg-range-slider__handle",
left: _this.calcHandleLeft1(width, v0Left),
valueListener: _this.slide1Listener,
sliderHandleWidth: _this.props.sliderHandleWidth
}), _react["default"].createElement(_sliderBarHandle["default"], {
width: width,
v0Left: v0Left,
enableBarDrag: _this.props.enableBarDrag,
sliderBarListener: _this.sliderBarListener
})));
});
return _this;
}
(0, _createClass2["default"])(Slider, [{
key: "render",
value: function render() {
var _this$props = this.props,
classSet = _this$props.classSet,
isRanged = _this$props.isRanged,
maxValue = _this$props.maxValue,
minValue = _this$props.minValue,
value1 = _this$props.value1;
var value0 = !isRanged && minValue > 0 ? minValue : this.props.value0;
var currValDelta = value1 - value0;
var maxDelta = maxValue - minValue;
var width = currValDelta / maxDelta * 100;
var v0Left = (value0 - minValue) / maxDelta * 100;
return _react["default"].createElement(SliderWrapper, {
className: (0, _classnames["default"])('kg-slider', _objectSpread({}, classSet)),
innerRef: this._saveRef,
isRanged: isRanged
}, this.createSlider(width, v0Left));
}
}]);
return Slider;
}(_react.Component);
exports["default"] = Slider;
(0, _defineProperty2["default"])(Slider, "propTypes", {
title: _propTypes["default"].string,
isRanged: _propTypes["default"].bool,
value0: _propTypes["default"].number,
value1: _propTypes["default"].number,
minValue: _propTypes["default"].number,
maxValue: _propTypes["default"].number,
sliderHandleWidth: _propTypes["default"].number,
onSlider0Change: _propTypes["default"].func,
onInput0Change: _propTypes["default"].func,
onSlider1Change: _propTypes["default"].func,
onInput1Change: _propTypes["default"].func,
onSliderBarChange: _propTypes["default"].func,
step: _propTypes["default"].number,
enableBarDrag: _propTypes["default"].bool
});
(0, _defineProperty2["default"])(Slider, "defaultProps", {
title: '',
isRanged: true,
value0: 0,
value1: 100,
minValue: 0,
maxValue: 100,
step: 1,
sliderHandleWidth: 12,
enableBarDrag: false,
onSlider0Change: noop,
onInput0Change: noop,
onSlider1Change: noop,
onInput1Change: noop,
onSliderBarChange: noop,
disabled: false
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbW1vbi9zbGlkZXIvc2xpZGVyLmpzIl0sIm5hbWVzIjpbIm5vb3AiLCJTdHlsZWRSYW5nZVNsaWRlciIsInN0eWxlZCIsImRpdiIsInByb3BzIiwidGhlbWUiLCJzbGlkZXJCYXJCZ2QiLCJzbGlkZXJCYXJIZWlnaHQiLCJTbGlkZXJXcmFwcGVyIiwiaXNSYW5nZWQiLCJTbGlkZXIiLCJ1bmRlZmluZWQiLCJyZWYiLCJ4IiwieFBlcmNlbnQiLCJvZmZzZXRXaWR0aCIsIm1heERlbHRhIiwibWF4VmFsdWUiLCJtaW5WYWx1ZSIsInZhbCIsIm9uU2xpZGVyMENoYW5nZSIsImNhbGwiLCJ2YWx1ZTAiLCJvblNsaWRlcjFDaGFuZ2UiLCJ2YWx1ZTEiLCJ2YWwwIiwidmFsMSIsIm9uU2xpZGVyQmFyQ2hhbmdlIiwidyIsImwiLCJudW0iLCJzbGlkZXJIYW5kbGVXaWR0aCIsIndpZHRoIiwidjBMZWZ0IiwiY2FsY0hhbmRsZUxlZnQwIiwic2xpZGUwTGlzdGVuZXIiLCJjYWxjSGFuZGxlTGVmdDEiLCJzbGlkZTFMaXN0ZW5lciIsImVuYWJsZUJhckRyYWciLCJzbGlkZXJCYXJMaXN0ZW5lciIsImNsYXNzU2V0IiwiY3VyclZhbERlbHRhIiwiX3NhdmVSZWYiLCJjcmVhdGVTbGlkZXIiLCJDb21wb25lbnQiLCJ0aXRsZSIsIlByb3BUeXBlcyIsInN0cmluZyIsImJvb2wiLCJudW1iZXIiLCJmdW5jIiwib25JbnB1dDBDaGFuZ2UiLCJvbklucHV0MUNoYW5nZSIsInN0ZXAiLCJkaXNhYmxlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLFNBQVNBLElBQVQsR0FBZ0IsQ0FBRTs7QUFFbEIsSUFBTUMsaUJBQWlCLEdBQUdDLDZCQUFPQyxHQUFWLG9CQUdELFVBQUFDLEtB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RlU7QUFHcEJhLEVBQUFBLE1BQU0sRUFBRSxDQUhZO0FBSXBCRSxFQUFBQSxNQUFNLEVBQUUsR0FKWTtBQUtwQk4sRUFBQUEsUUFBUSxFQUFFLENBTFU7QUFNcEJELEVBQUFBLFFBQVEsRUFBRSxHQU5VO0FBT3BCb0MsRUFBQUEsSUFBSSxFQUFFLENBUGM7QUFRcEJ0QixFQUFBQSxpQkFBaUIsRUFBRSxFQVJDO0FBU3BCTyxFQUFBQSxhQUFhLEVBQUUsS0FUSztBQVVwQmxCLEVBQUFBLGVBQWUsRUFBRXBCLElBVkc7QUFXcEJtRCxFQUFBQSxjQUFjLEVBQUVuRCxJQVhJO0FBWXBCdUIsRUFBQUEsZUFBZSxFQUFFdkIsSUFaRztBQWFwQm9ELEVBQUFBLGNBQWMsRUFBRXBELElBYkk7QUFjcEIyQixFQUFBQSxpQkFBaUIsRUFBRTNCLElBZEM7QUFlcEJzRCxFQUFBQSxRQUFRLEVBQUU7QUFmVSxDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IFNsaWRlckhhbmRsZSBmcm9tICcuL3NsaWRlci1oYW5kbGUnO1xuaW1wb3J0IFNsaWRlckJhckhhbmRsZSBmcm9tICcuL3NsaWRlci1iYXItaGFuZGxlJztcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmNvbnN0IFN0eWxlZFJhbmdlU2xpZGVyID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNsaWRlckJhckJnZH07XG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zbGlkZXJCYXJIZWlnaHR9O1xuYDtcblxuY29uc3QgU2xpZGVyV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGZsZXgtZ3JvdzogMTtcbiAgbWFyZ2luLXRvcDogJHtwcm9wcyA9PiBwcm9wcy5pc1JhbmdlZCA/IDAgOiAxMH1weDtcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNsaWRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaXNSYW5nZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHZhbHVlMDogUHJvcFR5cGVzLm51bWJlcixcbiAgICB2YWx1ZTE6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbWluVmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbWF4VmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgc2xpZGVySGFuZGxlV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb25TbGlkZXIwQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbklucHV0MENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TbGlkZXIxQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbklucHV0MUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TbGlkZXJCYXJDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIHN0ZXA6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW5hYmxlQmFyRHJhZzogUHJvcFR5cGVzLmJvb2xcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHRpdGxlOiAnJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICB2YWx1ZTA6IDAsXG4gICAgdmFsdWUxOiAxMDAsXG4gICAgbWluVmFsdWU6IDAsXG4gICAgbWF4VmFsdWU6IDEwMCxcbiAgICBzdGVwOiAxLFxuICAgIHNsaWRlckhhbmRsZVdpZHRoOiAxMixcbiAgICBlbmFibGVCYXJEcmFnOiBmYWxzZSxcbiAgICBvblNsaWRlcjBDaGFuZ2U6IG5vb3AsXG4gICAgb25JbnB1dDBDaGFuZ2U6IG5vb3AsXG4gICAgb25TbGlkZXIxQ2hhbmdlOiBub29wLFxuICAgIG9uSW5wdXQxQ2hhbmdlOiBub29wLFxuICAgIG9uU2xpZGVyQmFyQ2hhbmdlOiBub29wLFxuICAgIGRpc2FibGVkOiBmYWxzZVxuICB9O1xuXG4gIHJlZiA9IHVuZGVmaW5lZDtcblxuICBfc2F2ZVJlZiA9IHJlZiA9PiB7XG4gICAgdGhpcy5yZWYgPSByZWY7XG4gIH07XG5cbiAgc2xpZGUwTGlzdGVuZXIgPSB4ID0+IHtcbiAgICBjb25zdCB4UGVyY2VudCA9IHggLyB0aGlzLnJlZi5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBtYXhEZWx0YSA9IHRoaXMucHJvcHMubWF4VmFsdWUgLSB0aGlzLnByb3BzLm1pblZhbHVlO1xuICAgIGNvbnN0IHZhbCA9IHhQZXJjZW50ICogbWF4RGVsdGE7XG4gICAgdGhpcy5wcm9wcy5vblNsaWRlcjBDaGFuZ2UuY2FsbCh0aGlzLCB2YWwgKyB0aGlzLnByb3BzLnZhbHVlMCk7XG4gIH07XG5cbiAgc2xpZGUxTGlzdGVuZXIgPSB4ID0+IHtcbiAgICBjb25zdCB4UGVyY2VudCA9IHggLyB0aGlzLnJlZi5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBtYXhEZWx0YSA9IHRoaXMucHJvcHMubWF4VmFsdWUgLSB0aGlzLnByb3BzLm1pblZhbHVlO1xuICAgIGNvbnN0IHZhbCA9IHhQZXJjZW50ICogbWF4RGVsdGE7XG4gICAgdGhpcy5wcm9wcy5vblNsaWRlcjFDaGFuZ2UodmFsICsgdGhpcy5wcm9wcy52YWx1ZTEpO1xuICB9O1xuXG4gIHNsaWRlckJhckxpc3RlbmVyID0geCA9PiB7XG4gICAgY29uc3QgeFBlcmNlbnQgPSB4IC8gdGhpcy5yZWYub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgbWF4RGVsdGEgPSB0aGlzLnByb3BzLm1heFZhbHVlIC0gdGhpcy5wcm9wcy5taW5WYWx1ZTtcbiAgICBjb25zdCB2YWwgPSB4UGVyY2VudCAqIG1heERlbHRhO1xuICAgIGNvbnN0IHZhbDAgPSB2YWwgKyB0aGlzLnByb3BzLnZhbHVlMDtcbiAgICBjb25zdCB2YWwxID0gdmFsICsgdGhpcy5wcm9wcy52YWx1ZTE7XG4gICAgdGhpcy5wcm9wcy5vblNsaWRlckJhckNoYW5nZSh2YWwwLCB2YWwxKTtcbiAgfTtcblxuICBjYWxjSGFuZGxlTGVmdDAgPSAodywgbCwgbnVtKSA9PiB7XG4gICAgcmV0dXJuIHcgPT09IDAgPyBgY2FsYygke2x9JSAtICR7dGhpcy5wcm9wcy5zbGlkZXJIYW5kbGVXaWR0aCAvIDJ9cHgpYCA6XG4gICAgICBgY2FsYygke2x9JSAtICR7dGhpcy5wcm9wcy5zbGlkZXJIYW5kbGVXaWR0aCAvIDJ9cHgpYDtcbiAgfTtcblxuICBjYWxjSGFuZGxlTGVmdDEgPSAodywgbCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzUmFuZ2VkICYmIHcgPT09IDBcbiAgICAgID8gYCR7bH0lYFxuICAgICAgOiBgY2FsYygke2wgKyB3fSUgLSAke3RoaXMucHJvcHMuc2xpZGVySGFuZGxlV2lkdGggLyAyfXB4KWA7XG4gIH07XG5cbiAgY3JlYXRlU2xpZGVyID0gKHdpZHRoLCB2MExlZnQpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPFN0eWxlZFJhbmdlU2xpZGVyIGNsYXNzTmFtZT1cImtnLXJhbmdlLXNsaWRlclwiPlxuICAgICAgICAgIDxTbGlkZXJIYW5kbGVcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImtnLXJhbmdlLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgICAgIGxlZnQ9e3RoaXMuY2FsY0hhbmRsZUxlZnQwKHdpZHRoLCB2MExlZnQpfVxuICAgICAgICAgICAgdmFsdWVMaXN0ZW5lcj17dGhpcy5zbGlkZTBMaXN0ZW5lcn1cbiAgICAgICAgICAgIHNsaWRlckhhbmRsZVdpZHRoPXt0aGlzLnByb3BzLnNsaWRlckhhbmRsZVdpZHRofVxuICAgICAgICAgICAgZGlzcGxheT17dGhpcy5wcm9wcy5pc1JhbmdlZH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTbGlkZXJIYW5kbGVcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImtnLXJhbmdlLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgICAgIGxlZnQ9e3RoaXMuY2FsY0hhbmRsZUxlZnQxKHdpZHRoLCB2MExlZnQpfVxuICAgICAgICAgICAgdmFsdWVMaXN0ZW5lcj17dGhpcy5zbGlkZTFMaXN0ZW5lcn1cbiAgICAgICAgICAgIHNsaWRlckhhbmRsZVdpZHRoPXt0aGlzLnByb3BzLnNsaWRlckhhbmRsZVdpZHRofVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFNsaWRlckJhckhhbmRsZVxuICAgICAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICAgICAgdjBMZWZ0PXt2MExlZnR9XG4gICAgICAgICAgICBlbmFibGVCYXJEcmFnPXt0aGlzLnByb3BzLmVuYWJsZUJhckRyYWd9XG4gICAgICAgICAgICBzbGlkZXJCYXJMaXN0ZW5lcj17dGhpcy5zbGlkZXJCYXJMaXN0ZW5lcn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZFJhbmdlU2xpZGVyPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2xhc3NTZXQsXG4gICAgICBpc1JhbmdlZCxcbiAgICAgIG1heFZhbHVlLFxuICAgICAgbWluVmFsdWUsXG4gICAgICB2YWx1ZTFcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB2YWx1ZTAgPSAhaXNSYW5nZWQgJiYgbWluVmFsdWUgPiAwID8gbWluVmFsdWUgOiB0aGlzLnByb3BzLnZhbHVlMDtcbiAgICBjb25zdCBjdXJyVmFsRGVsdGEgPSB2YWx1ZTEgLSB2YWx1ZTA7XG4gICAgY29uc3QgbWF4RGVsdGEgPSBtYXhWYWx1ZSAtIG1pblZhbHVlO1xuICAgIGNvbnN0IHdpZHRoID0gY3VyclZhbERlbHRhIC8gbWF4RGVsdGEgKiAxMDA7XG5cbiAgICBjb25zdCB2MExlZnQgPSAodmFsdWUwIC0gbWluVmFsdWUpIC8gbWF4RGVsdGEgKiAxMDA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNsaWRlcldyYXBwZXJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdrZy1zbGlkZXInLCB7Li4uY2xhc3NTZXR9KX1cbiAgICAgICAgaW5uZXJSZWY9e3RoaXMuX3NhdmVSZWZ9XG4gICAgICAgIGlzUmFuZ2VkPXtpc1JhbmdlZH1cbiAgICAgID5cbiAgICAgICAge3RoaXMuY3JlYXRlU2xpZGVyKHdpZHRoLCB2MExlZnQpfVxuICAgICAgPC9TbGlkZXJXcmFwcGVyPlxuICAgICk7XG4gIH1cbn1cbiJdfQ==