kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
239 lines (197 loc) • 27 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = MapPopoverFactory;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _layerHoverInfo = _interopRequireDefault(require("./layer-hover-info"));
var _coordinateInfo = _interopRequireDefault(require("./coordinate-info"));
var _icons = require("../common/icons");
var _errorBoundary = _interopRequireDefault(require("../common/error-boundary"));
var _templateObject, _templateObject2;
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
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; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var MAX_WIDTH = 500;
var MAX_HEIGHT = 600;
var StyledMapPopover = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n font-size: 11px;\n font-weight: 500;\n background-color: ", ";\n color: ", ";\n z-index: 1001;\n position: absolute;\n overflow-x: auto;\n\n .gutter {\n height: 6px;\n }\n\n table {\n margin: 2px 12px 12px 12px;\n width: auto;\n\n tbody {\n border-top: transparent;\n border-bottom: transparent;\n }\n\n td {\n border-color: transparent;\n padding: 4px;\n color: ", ";\n }\n\n td.row__value {\n text-align: right;\n font-weight: 500;\n color: ", ";\n }\n }\n"])), function (props) {
return props.theme.scrollBar;
}, function (props) {
return props.theme.panelBackground;
}, function (props) {
return props.theme.textColor;
}, function (props) {
return props.theme.textColor;
}, function (props) {
return props.theme.textColorHl;
});
var StyledPin = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n left: 50%;\n transform: rotate(30deg);\n top: 10px;\n color: ", ";\n\n :hover {\n cursor: pointer;\n color: ", ";\n }\n"])), function (props) {
return props.theme.primaryBtnBgd;
}, function (props) {
return props.theme.linkBtnColor;
});
MapPopoverFactory.deps = [_layerHoverInfo["default"], _coordinateInfo["default"]];
function MapPopoverFactory(LayerHoverInfo, CoordinateInfo) {
var MapPopover = /*#__PURE__*/function (_PureComponent) {
(0, _inherits2["default"])(MapPopover, _PureComponent);
var _super = _createSuper(MapPopover);
function MapPopover(props) {
var _this;
(0, _classCallCheck2["default"])(this, MapPopover);
_this = _super.call(this, props);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "popover", (0, _react.createRef)());
_this.state = {
width: 380,
height: 160
};
return _this;
}
(0, _createClass2["default"])(MapPopover, [{
key: "componentDidMount",
value: function componentDidMount() {
this._setContainerSize();
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
this._setContainerSize();
}
}, {
key: "_setContainerSize",
value: function _setContainerSize() {
var node = this.popover.current;
if (!node) {
return;
}
var width = Math.min(Math.round(node.scrollWidth), MAX_WIDTH);
var height = Math.min(Math.round(node.scrollHeight), MAX_HEIGHT);
if (width !== this.state.width || height !== this.state.height) {
this.setState({
width: width,
height: height
});
}
}
}, {
key: "_getPosition",
value: function _getPosition(x, y) {
var topOffset = 20;
var leftOffset = 20;
var _this$props = this.props,
mapW = _this$props.mapW,
mapH = _this$props.mapH;
var _this$state = this.state,
width = _this$state.width,
height = _this$state.height;
var pos = {};
if (x + leftOffset + width > mapW) {
pos.right = mapW - x + leftOffset;
} else {
pos.left = x + leftOffset;
}
if (y + topOffset + height > mapH) {
pos.bottom = 10;
} else {
pos.top = y + topOffset;
}
return pos;
} // the commented part is from previous commits ...... incase commit below the comment does not work
// return (
// <StyledMapPopover
// innerRef={comp => {
// this.popover = comp;
// }}
// className={classnames('map-popover', {hidden})}
// style={{
// ...style,
// maxWidth: width
// }}
// onMouseEnter={() => {
// this.setState({isMouseOver: true});
// }}
// onMouseLeave={() => {
// this.setState({isMouseOver: false});
// }}
// >
// {freezed ? (
// <div className="map-popover__top">
// <div className="gutter" />
// <StyledPin className="popover-pin" onClick={this.props.onClose}>
// <Pin height="16px" />
// </StyledPin>
// </div>
// ) : null}
// <StyledLayerName className="map-popover__layer-name">
// <Layers height="12px" />
// {layer.config.label}
// </StyledLayerName>
// <table className="map-popover__table">
// {layer.isAggregated ? (
// layer.type === 'boundary' || layer.type === 'pincode' ? (
// <CellInfoBoundary {...infoProps} />
// ) : (
// <CellInfo {...infoProps} />
// )
// ) : (
// <EntryInfo {...infoProps} />
}, {
key: "render",
value: function render() {
var _this$props2 = this.props,
x = _this$props2.x,
y = _this$props2.y,
freezed = _this$props2.freezed,
coordinate = _this$props2.coordinate,
layerHoverProp = _this$props2.layerHoverProp;
var style = Number.isFinite(x) && Number.isFinite(y) ? this._getPosition(x, y) : {};
return (/*#__PURE__*/_react["default"].createElement(_errorBoundary["default"], null, /*#__PURE__*/_react["default"].createElement(StyledMapPopover, {
ref: this.popover,
className: "map-popover",
style: _objectSpread(_objectSpread({}, style), {}, {
maxWidth: MAX_WIDTH
})
}, freezed ? /*#__PURE__*/_react["default"].createElement("div", {
className: "map-popover__top"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "gutter"
}), /*#__PURE__*/_react["default"].createElement(StyledPin, {
className: "popover-pin",
onClick: this.props.onClose
}, /*#__PURE__*/_react["default"].createElement(_icons.Pin, {
height: "16px"
}))) : null, Array.isArray(coordinate) && /*#__PURE__*/_react["default"].createElement(CoordinateInfo, {
coordinate: coordinate
}), layerHoverProp ? /*#__PURE__*/_react["default"].createElement(LayerHoverInfo, layerHoverProp) : null))
);
}
}]);
return MapPopover;
}(_react.PureComponent);
(0, _defineProperty2["default"])(MapPopover, "propTypes", {
layerHoverProp: _propTypes["default"].object,
coordinate: _propTypes["default"].oneOfType([_propTypes["default"].array, _propTypes["default"].bool]),
freezed: _propTypes["default"].bool,
x: _propTypes["default"].number,
y: _propTypes["default"].number,
mapW: _propTypes["default"].number.isRequired,
mapH: _propTypes["default"].number.isRequired,
onClose: _propTypes["default"].func.isRequired
});
return MapPopover;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21hcC9tYXAtcG9wb3Zlci5qcyJdLCJuYW1lcyI6WyJNQVhfV0lEVEgiLCJNQVhfSEVJR0hUIiwiU3R5bGVkTWFwUG9wb3ZlciIsInN0eWxlZCIsImRpdiIsInByb3BzIiwidGhlbWUiLCJzY3JvbGxCYXIiLCJwYW5lbEJhY2tncm91bmQiLCJ0ZXh0Q29sb3IiLCJ0ZXh0Q29sb3JIbCIsIlN0eWxlZFBpbiIsInByaW1hcnlCdG5CZ2QiLCJsaW5rQnRuQ29sb3IiLCJNYXBQb3BvdmVyRmFjdG9yeSIsImRlcHMiLCJMYXllckhvdmVySW5mb0ZhY3RvcnkiLCJDb29yZGluYXRlSW5mb0ZhY3RvcnkiLCJMYXllckhvdmVySW5mbyIsIkNvb3JkaW5hdGVJbmZvIiwiTWFwUG9wb3ZlciIsInN0YXRlIiwid2lkdGgiLCJoZWlnaHQiLCJfc2V0Q29udGFpbmVyU2l6ZSIsIm5vZGUiLCJwb3BvdmVyIiwiY3VycmVudCIsIk1hdGgiLCJtaW4iLCJyb3VuZCIsInNjcm9sbFdpZHRoIiwic2Nyb2xsSGVpZ2h0Iiwic2V0U3RhdGUiLCJ4IiwieSIsInRvcE9mZnNldCIsImxlZnRPZmZzZXQiLCJtYXBXIiwibWFwSCIsInBvcyIsInJpZ2h0IiwibGVmdCIsImJvdHRvbSIsInRvcCIsImZyZWV6ZWQiLCJjb29yZGluYXRlIiwibGF5ZXJIb3ZlclByb3AiLCJzdHlsZSIsIk51bWJlciIsImlzRmluaXRlIiwiX2dldFBvc2l0aW9uIiwibWF4V2lkdGgiLCJvbkNsb3NlIiwiQXJyYXkiLCJpc0FycmF5IiwiUHVyZUNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9iamVjdCIsIm9uZU9mVHlwZSIsImFycmF5IiwiYm9vbCIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJmdW5jIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7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O0FBS2pCM0IsSUFBQUEsQ0FBQyxFQUFFc0Isc0JBQVVLLE1BTEk7QUFNakJ4QixJQUFBQSxJQUFJLEVBQUVtQixzQkFBVUssTUFBVixDQUFpQkMsVUFOTjtBQU9qQnhCLElBQUFBLElBQUksRUFBRWtCLHNCQUFVSyxNQUFWLENBQWlCQyxVQVBOO0FBUWpCVixJQUFBQSxPQUFPLEVBQUVJLHNCQUFVTyxJQUFWLENBQWVEO0FBUlAsR0FGbUQ7QUEwSXhFLFNBQU8zQyxVQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHtQdXJlQ29tcG9uZW50LCBjcmVhdGVSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBMYXllckhvdmVySW5mb0ZhY3RvcnkgZnJvbSAnLi9sYXllci1ob3Zlci1pbmZvJztcbmltcG9ydCBDb29yZGluYXRlSW5mb0ZhY3RvcnkgZnJvbSAnLi9jb29yZGluYXRlLWluZm8nO1xuaW1wb3J0IHtQaW59IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ljb25zJztcbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2Vycm9yLWJvdW5kYXJ5JztcblxuY29uc3QgTUFYX1dJRFRIID0gNTAwO1xuY29uc3QgTUFYX0hFSUdIVCA9IDYwMDtcblxuY29uc3QgU3R5bGVkTWFwUG9wb3ZlciA9IHN0eWxlZC5kaXZgXG4gICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2Nyb2xsQmFyfTtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnBhbmVsQmFja2dyb3VuZH07XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gIHotaW5kZXg6IDEwMDE7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3ZlcmZsb3cteDogYXV0bztcblxuICAuZ3V0dGVyIHtcbiAgICBoZWlnaHQ6IDZweDtcbiAgfVxuXG4gIHRhYmxlIHtcbiAgICBtYXJnaW46IDJweCAxMnB4IDEycHggMTJweDtcbiAgICB3aWR0aDogYXV0bztcblxuICAgIHRib2R5IHtcbiAgICAgIGJvcmRlci10b3A6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWJvdHRvbTogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgdGQge1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIHBhZGRpbmc6IDRweDtcbiAgICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gICAgfVxuXG4gICAgdGQucm93X192YWx1ZSB7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRQaW4gPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMzBkZWcpO1xuICB0b3A6IDEwcHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnByaW1hcnlCdG5CZ2R9O1xuXG4gIDpob3ZlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxpbmtCdG5Db2xvcn07XG4gIH1cbmA7XG5cbk1hcFBvcG92ZXJGYWN0b3J5LmRlcHMgPSBbTGF5ZXJIb3ZlckluZm9GYWN0b3J5LCBDb29yZGluYXRlSW5mb0ZhY3RvcnldO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXBQb3BvdmVyRmFjdG9yeShMYXllckhvdmVySW5mbywgQ29vcmRpbmF0ZUluZm8pIHtcbiAgY2xhc3MgTWFwUG9wb3ZlciBleHRlbmRzIFB1cmVDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBsYXllckhvdmVyUHJvcDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIGNvb3JkaW5hdGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgICAgIGZyZWV6ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgeDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIHk6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBtYXBXOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgICBtYXBIOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICB3aWR0aDogMzgwLFxuICAgICAgICBoZWlnaHQ6IDE2MFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuX3NldENvbnRhaW5lclNpemUoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLl9zZXRDb250YWluZXJTaXplKCk7XG4gICAgfVxuXG4gICAgcG9wb3ZlciA9IGNyZWF0ZVJlZigpO1xuXG4gICAgX3NldENvbnRhaW5lclNpemUoKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5wb3BvdmVyLmN1cnJlbnQ7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKE1hdGgucm91bmQobm9kZS5zY3JvbGxXaWR0aCksIE1BWF9XSURUSCk7XG4gICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1pbihNYXRoLnJvdW5kKG5vZGUuc2Nyb2xsSGVpZ2h0KSwgTUFYX0hFSUdIVCk7XG5cbiAgICAgIGlmICh3aWR0aCAhPT0gdGhpcy5zdGF0ZS53aWR0aCB8fCBoZWlnaHQgIT09IHRoaXMuc3RhdGUuaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3dpZHRoLCBoZWlnaHR9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfZ2V0UG9zaXRpb24oeCwgeSkge1xuICAgICAgY29uc3QgdG9wT2Zmc2V0ID0gMjA7XG4gICAgICBjb25zdCBsZWZ0T2Zmc2V0ID0gMjA7XG4gICAgICBjb25zdCB7bWFwVywgbWFwSH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGNvbnN0IHBvcyA9IHt9O1xuICAgICAgaWYgKHggKyBsZWZ0T2Zmc2V0ICsgd2lkdGggPiBtYXBXKSB7XG4gICAgICAgIHBvcy5yaWdodCA9IG1hcFcgLSB4ICsgbGVmdE9mZnNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvcy5sZWZ0ID0geCArIGxlZnRPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ICsgdG9wT2Zmc2V0ICsgaGVpZ2h0ID4gbWFwSCkge1xuICAgICAgICBwb3MuYm90dG9tID0gMTA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3MudG9wID0geSArIHRvcE9mZnNldDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBvcztcbiAgICB9XG4gICAgLy8gdGhlIGNvbW1lbnRlZCBwYXJ0IGlzIGZyb20gcHJldmlvdXMgY29tbWl0cyAuLi4uLi4gaW5jYXNlIGNvbW1pdCBiZWxvdyB0aGUgY29tbWVudCBkb2VzIG5vdCB3b3JrXG4gICAgLy8gcmV0dXJuIChcbiAgICAvLyAgIDxTdHlsZWRNYXBQb3BvdmVyXG4gICAgLy8gICAgIGlubmVyUmVmPXtjb21wID0+IHtcbiAgICAvLyAgICAgICB0aGlzLnBvcG92ZXIgPSBjb21wO1xuICAgIC8vICAgICB9fVxuICAgIC8vICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ21hcC1wb3BvdmVyJywge2hpZGRlbn0pfVxuICAgIC8vICAgICBzdHlsZT17e1xuICAgIC8vICAgICAgIC4uLnN0eWxlLFxuICAgIC8vICAgICAgIG1heFdpZHRoOiB3aWR0aFxuICAgIC8vICAgICB9fVxuICAgIC8vICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHtcbiAgICAvLyAgICAgICB0aGlzLnNldFN0YXRlKHtpc01vdXNlT3ZlcjogdHJ1ZX0pO1xuICAgIC8vICAgICB9fVxuICAgIC8vICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHtcbiAgICAvLyAgICAgICB0aGlzLnNldFN0YXRlKHtpc01vdXNlT3ZlcjogZmFsc2V9KTtcbiAgICAvLyAgICAgfX1cbiAgICAvLyAgID5cbiAgICAvLyAgICAge2ZyZWV6ZWQgPyAoXG4gICAgLy8gICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXAtcG9wb3Zlcl9fdG9wXCI+XG4gICAgLy8gICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImd1dHRlclwiIC8+XG4gICAgLy8gICAgICAgICA8U3R5bGVkUGluIGNsYXNzTmFtZT1cInBvcG92ZXItcGluXCIgb25DbGljaz17dGhpcy5wcm9wcy5vbkNsb3NlfT5cbiAgICAvLyAgICAgICAgICAgPFBpbiBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAvLyAgICAgICAgIDwvU3R5bGVkUGluPlxuICAgIC8vICAgICAgIDwvZGl2PlxuICAgIC8vICAgICApIDogbnVsbH1cbiAgICAvLyAgICAgPFN0eWxlZExheWVyTmFtZSBjbGFzc05hbWU9XCJtYXAtcG9wb3Zlcl9fbGF5ZXItbmFtZVwiPlxuICAgIC8vICAgICAgIDxMYXllcnMgaGVpZ2h0PVwiMTJweFwiIC8+XG4gICAgLy8gICAgICAge2xheWVyLmNvbmZpZy5sYWJlbH1cbiAgICAvLyAgICAgPC9TdHlsZWRMYXllck5hbWU+XG4gICAgLy8gICAgIDx0YWJsZSBjbGFzc05hbWU9XCJtYXAtcG9wb3Zlcl9fdGFibGVcIj5cbiAgICAvLyAgICAgICB7bGF5ZXIuaXNBZ2dyZWdhdGVkID8gKFxuICAgIC8vICAgICAgICAgbGF5ZXIudHlwZSA9PT0gJ2JvdW5kYXJ5JyB8fCBsYXllci50eXBlID09PSAncGluY29kZScgPyAoXG4gICAgLy8gICAgICAgICAgIDxDZWxsSW5mb0JvdW5kYXJ5IHsuLi5pbmZvUHJvcHN9IC8+XG4gICAgLy8gICAgICAgICApIDogKFxuICAgIC8vICAgICAgICAgICA8Q2VsbEluZm8gey4uLmluZm9Qcm9wc30gLz5cbiAgICAvLyAgICAgICAgIClcbiAgICAvLyAgICAgICApIDogKFxuICAgIC8vICAgICAgICAgPEVudHJ5SW5mbyB7Li4uaW5mb1Byb3BzfSAvPlxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHt4LCB5LCBmcmVlemVkLCBjb29yZGluYXRlLCBsYXllckhvdmVyUHJvcH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBzdHlsZSA9XG4gICAgICAgIE51bWJlci5pc0Zpbml0ZSh4KSAmJiBOdW1iZXIuaXNGaW5pdGUoeSkgPyB0aGlzLl9nZXRQb3NpdGlvbih4LCB5KSA6IHt9O1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXJyb3JCb3VuZGFyeT5cbiAgICAgICAgICA8U3R5bGVkTWFwUG9wb3ZlclxuICAgICAgICAgICAgcmVmPXt0aGlzLnBvcG92ZXJ9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJtYXAtcG9wb3ZlclwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IE1BWF9XSURUSFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZnJlZXplZCA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXAtcG9wb3Zlcl9fdG9wXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJndXR0ZXJcIiAvPlxuICAgICAgICAgICAgICAgIDxTdHlsZWRQaW4gY2xhc3NOYW1lPVwicG9wb3Zlci1waW5cIiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xvc2V9PlxuICAgICAgICAgICAgICAgICAgPFBpbiBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZFBpbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtBcnJheS5pc0FycmF5KGNvb3JkaW5hdGUpICYmIChcbiAgICAgICAgICAgICAgPENvb3JkaW5hdGVJbmZvIGNvb3JkaW5hdGU9e2Nvb3JkaW5hdGV9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2xheWVySG92ZXJQcm9wID8gPExheWVySG92ZXJJbmZvIHsuLi5sYXllckhvdmVyUHJvcH0gLz4gOiBudWxsfVxuICAgICAgICAgIDwvU3R5bGVkTWFwUG9wb3Zlcj5cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTWFwUG9wb3Zlcjtcbn1cbiJdfQ==