kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
248 lines (213 loc) • 28.3 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 _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 _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reselect = require("reselect");
var _styledComponents = require("../common/styled-components");
var _icons = require("../common/icons");
var _sourceDataCatalog = _interopRequireDefault(require("./common/source-data-catalog"));
var _filterPanel = _interopRequireDefault(require("./filter-panel/filter-panel"));
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 _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; } }
FilterManagerFactory.deps = [_sourceDataCatalog["default"], _filterPanel["default"]];
function FilterManagerFactory(SourceDataCatalog, FilterPanel) {
var _class, _temp;
return _temp = _class = /*#__PURE__*/function (_Component) {
(0, _inherits2["default"])(FilterManager, _Component);
var _super = _createSuper(FilterManager);
function FilterManager() {
var _this;
(0, _classCallCheck2["default"])(this, FilterManager);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
/* selectors */
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "datasetsSelector", function (state) {
return state.datasets;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "defaultDatasetSelector", (0, _reselect.createSelector)(_this.datasetsSelector, function (datasets) {
return Object.keys(datasets).length && Object.keys(datasets)[0] || null;
}));
/* actions */
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_addFilter", function () {
var defaultDataset = _this.defaultDatasetSelector(_this.props);
_this.props.addFilter(defaultDataset);
});
return _this;
}
(0, _createClass2["default"])(FilterManager, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props = this.props,
filters = _this$props.filters,
datasets = _this$props.datasets,
mapState = _this$props.mapState,
auth = _this$props.auth,
project = _this$props.project,
layers = _this$props.layers;
var isAnyFilterAnimating = filters.some(function (f) {
return f.isAnimating;
});
var hadEmptyFilter = filters.some(function (f) {
return !f.name;
});
var hadDataset = Object.keys(datasets).length;
return (/*#__PURE__*/_react["default"].createElement("div", {
className: "filter-manager"
}, /*#__PURE__*/_react["default"].createElement(SourceDataCatalog, {
datasets: datasets,
showDatasetTable: this.props.showDatasetTable
}), /*#__PURE__*/_react["default"].createElement(_styledComponents.SidePanelDivider, null), /*#__PURE__*/_react["default"].createElement(_styledComponents.SidePanelSection, null, filters && filters.map(function (filter, idx) {
return (/*#__PURE__*/_react["default"].createElement(FilterPanel, {
key: "".concat(filter.id, "-").concat(idx),
idx: idx,
filters: filters,
filter: filter,
layers: layers,
datasets: datasets,
mapState: mapState,
isAnyFilterAnimating: isAnyFilterAnimating,
removeFilter: function removeFilter() {
return _this2.props.removeFilter(idx, mapState, auth, project);
},
enlargeFilter: function enlargeFilter() {
return _this2.props.enlargeFilter(idx);
},
toggleAnimation: function toggleAnimation() {
return _this2.props.toggleAnimation(idx);
},
setFilter: _this2.props.setFilter,
setFilterAPI: _this2.props.setFilterAPI,
auth: auth,
project: project
})
);
})), /*#__PURE__*/_react["default"].createElement(_styledComponents.Button, {
inactive: hadEmptyFilter || !hadDataset,
width: "105px",
onClick: this._addFilter
}, /*#__PURE__*/_react["default"].createElement(_icons.Add, {
height: "12px"
}), "Add Filter"))
);
}
}]);
return FilterManager;
}(_react.Component), (0, _defineProperty2["default"])(_class, "propTypes", {
datasets: _propTypes["default"].object,
addFilter: _propTypes["default"].func.isRequired,
removeFilter: _propTypes["default"].func.isRequired,
enlargeFilter: _propTypes["default"].func.isRequired,
toggleAnimation: _propTypes["default"].func.isRequired,
setFilter: _propTypes["default"].func.isRequired,
filters: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
layers: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
showDatasetTable: _propTypes["default"].func,
setFilterAPI: _propTypes["default"].func.isRequired,
mapState: _propTypes["default"].object,
auth: _propTypes["default"].object.isRequired,
project: _propTypes["default"].object.isRequired,
// fields can be undefined when dataset is not selected
fields: _propTypes["default"].arrayOf(_propTypes["default"].any)
}), _temp;
}
var _default = exports["default"] = FilterManagerFactory; // import React, {Component} from 'react';
// import PropTypes from 'prop-types';
// import {createSelector} from 'reselect';
// import {
// SidePanelSection,
// SidePanelDivider,
// Button
// } from 'components/common/styled-components';
// import {Add} from 'components/common/icons';
// import SourceDataCatalogFactory from './common/source-data-catalog';
// import FilterPanelFactory from './filter-panel/filter-panel';
// FilterManagerFactory.deps = [SourceDataCatalogFactory, FilterPanelFactory];
// function FilterManagerFactory(SourceDataCatalog, FilterPanel) {
// return class FilterManager extends Component {
// static propTypes = {
// datasets: PropTypes.object,
// layers: PropTypes.arrayOf(PropTypes.any).isRequired,
// addFilter: PropTypes.func.isRequired,
// removeFilter: PropTypes.func.isRequired,
// enlargeFilter: PropTypes.func.isRequired,
// toggleAnimation: PropTypes.func.isRequired,
// setFilter: PropTypes.func.isRequired,
// filters: PropTypes.arrayOf(PropTypes.any).isRequired,
// showDatasetTable: PropTypes.func,
// // fields can be undefined when dataset is not selected
// fields: PropTypes.arrayOf(PropTypes.any)
// };
// /* selectors */
// datasetsSelector = state => state.datasets;
// defaultDatasetSelector = createSelector(
// this.datasetsSelector,
// datasets =>
// (Object.keys(datasets).length && Object.keys(datasets)[0]) || null
// );
// /* actions */
// _addFilter = () => {
// const defaultDataset = this.defaultDatasetSelector(this.props);
// this.props.addFilter(defaultDataset);
// };
// render() {
// const {filters, datasets, layers} = this.props;
// const isAnyFilterAnimating = filters.some(f => f.isAnimating);
// const hadEmptyFilter = filters.some(f => !f.name);
// const hadDataset = Object.keys(datasets).length;
// return (
// <div className="filter-manager">
// <SourceDataCatalog
// datasets={datasets}
// showDatasetTable={this.props.showDatasetTable}
// />
// <SidePanelDivider />
// <SidePanelSection>
// {filters &&
// filters.map((filter, idx) => (
// <FilterPanel
// key={`${filter.id}-${idx}`}
// idx={idx}
// filters={filters}
// filter={filter}
// datasets={datasets}
// layers={layers}
// isAnyFilterAnimating={isAnyFilterAnimating}
// removeFilter={() => this.props.removeFilter(idx)}
// enlargeFilter={() => this.props.enlargeFilter(idx)}
// toggleAnimation={() => this.props.toggleAnimation(idx)}
// setFilter={this.props.setFilter}
// />
// ))}
// </SidePanelSection>
// <Button
// inactive={hadEmptyFilter || !hadDataset}
// width="105px"
// onClick={this._addFilter}
// >
// <Add height="12px" />
// Add Filter
// </Button>
// </div>
// );
// }
// };
// }
// export default FilterManagerFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvZmlsdGVyLW1hbmFnZXIuanMiXSwibmFtZXMiOlsiRmlsdGVyTWFuYWdlckZhY3RvcnkiLCJkZXBzIiwiU291cmNlRGF0YUNhdGFsb2dGYWN0b3J5IiwiRmlsdGVyUGFuZWxGYWN0b3J5IiwiU291cmNlRGF0YUNhdGFsb2ciLCJGaWx0ZXJQYW5lbCIsInN0YXRlIiwiZGF0YXNldHMiLCJkYXRhc2V0c1NlbGVjdG9yIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImRlZmF1bHREYXRhc2V0IiwiZGVmYXVsdERhdGFzZXRTZWxlY3RvciIsInByb3BzIiwiYWRkRmlsdGVyIiwiZmlsdGVycyIsIm1hcFN0YXRlIiwiYXV0aCIsInByb2plY3QiLCJsYXllcnMiLCJpc0FueUZpbHRlckFuaW1hdGluZyIsInNvbWUiLCJmIiwiaXNBbmltYXRpbmciLCJoYWRFbXB0eUZpbHRlciIsIm5hbWUiLCJoYWREYXRhc2V0Iiwic2hvd0RhdGFzZXRUYWJsZSIsIm1hcCIsImZpbHRlciIsImlkeCIsImlkIiwicmVtb3ZlRmlsdGVyIiwiZW5sYXJnZUZpbHRlciIsInRvZ2dsZUFuaW1hdGlvbiIsInNldEZpbHRlciIsInNldEZpbHRlckFQSSIsIl9hZGRGaWx0ZXIiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJmdW5jIiwiaXNSZXF1aXJlZCIsImFycmF5T2YiLCJhbnkiLCJmaWVsZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQUEsb0JBQW9CLENBQUNDLElBQXJCLEdBQTRCLENBQUNDLDZCQUFELEVBQTJCQyx1QkFBM0IsQ0FBNUI7O0FBRUEsU0FBU0gsb0JBQVQsQ0FBOEJJLGlCQUE5QixFQUFpREMsV0FBakQsRUFBOEQ7QUFBQTs7QUFDNUQ7QUFBQTs7QUFBQTs7QUFB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QixJQUFBQSxJQUFJLEVBQUVzQixzQkFBVUMsTUFBVixDQUFpQkUsVUFaTjtBQWFqQnhCLElBQUFBLE9BQU8sRUFBRXFCLHNCQUFVQyxNQUFWLENBQWlCRSxVQWJUO0FBY2pCO0FBQ0FHLElBQUFBLE1BQU0sRUFBRU4sc0JBQVVJLE9BQVYsQ0FBa0JKLHNCQUFVSyxHQUE1QjtBQWZTLEdBRHJCO0FBa0ZEOztvQ0FFYzdDLG9CLEVBQXNCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHtcbiAgU2lkZVBhbmVsU2VjdGlvbixcbiAgU2lkZVBhbmVsRGl2aWRlcixcbiAgQnV0dG9uXG59IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7QWRkfSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQgU291cmNlRGF0YUNhdGFsb2dGYWN0b3J5IGZyb20gJy4vY29tbW9uL3NvdXJjZS1kYXRhLWNhdGFsb2cnO1xuaW1wb3J0IEZpbHRlclBhbmVsRmFjdG9yeSBmcm9tICcuL2ZpbHRlci1wYW5lbC9maWx0ZXItcGFuZWwnO1xuXG5GaWx0ZXJNYW5hZ2VyRmFjdG9yeS5kZXBzID0gW1NvdXJjZURhdGFDYXRhbG9nRmFjdG9yeSwgRmlsdGVyUGFuZWxGYWN0b3J5XTtcblxuZnVuY3Rpb24gRmlsdGVyTWFuYWdlckZhY3RvcnkoU291cmNlRGF0YUNhdGFsb2csIEZpbHRlclBhbmVsKSB7XG4gIHJldHVybiBjbGFzcyBGaWx0ZXJNYW5hZ2VyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgZGF0YXNldHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBhZGRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICByZW1vdmVGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBlbmxhcmdlRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdG9nZ2xlQW5pbWF0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgZmlsdGVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIHNob3dEYXRhc2V0VGFibGU6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgc2V0RmlsdGVyQVBJOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgbWFwU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBhdXRoOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBwcm9qZWN0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICAvLyBmaWVsZHMgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIGRhdGFzZXQgaXMgbm90IHNlbGVjdGVkXG4gICAgICBmaWVsZHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpXG4gICAgfTtcblxuICAgIC8qIHNlbGVjdG9ycyAqL1xuICAgIGRhdGFzZXRzU2VsZWN0b3IgPSBzdGF0ZSA9PiBzdGF0ZS5kYXRhc2V0cztcbiAgICBkZWZhdWx0RGF0YXNldFNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmRhdGFzZXRzU2VsZWN0b3IsXG4gICAgICBkYXRhc2V0cyA9PlxuICAgICAgICAoT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCAmJiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF0pIHx8IG51bGxcbiAgICApO1xuXG4gICAgLyogYWN0aW9ucyAqL1xuICAgIF9hZGRGaWx0ZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IHRoaXMuZGVmYXVsdERhdGFzZXRTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIHRoaXMucHJvcHMuYWRkRmlsdGVyKGRlZmF1bHREYXRhc2V0KTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2ZpbHRlcnMsIGRhdGFzZXRzLCBtYXBTdGF0ZSwgYXV0aCwgcHJvamVjdCwgbGF5ZXJzfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBpc0FueUZpbHRlckFuaW1hdGluZyA9IGZpbHRlcnMuc29tZShmID0+IGYuaXNBbmltYXRpbmcpO1xuICAgICAgY29uc3QgaGFkRW1wdHlGaWx0ZXIgPSBmaWx0ZXJzLnNvbWUoZiA9PiAhZi5uYW1lKTtcbiAgICAgIGNvbnN0IGhhZERhdGFzZXQgPSBPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1tYW5hZ2VyXCI+XG4gICAgICAgICAgPFNvdXJjZURhdGFDYXRhbG9nXG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBzaG93RGF0YXNldFRhYmxlPXt0aGlzLnByb3BzLnNob3dEYXRhc2V0VGFibGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U2lkZVBhbmVsRGl2aWRlciAvPlxuICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAge2ZpbHRlcnMgJiZcbiAgICAgICAgICAgICAgZmlsdGVycy5tYXAoKGZpbHRlciwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgPEZpbHRlclBhbmVsXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2ZpbHRlci5pZH0tJHtpZHh9YH1cbiAgICAgICAgICAgICAgICAgIGlkeD17aWR4fVxuICAgICAgICAgICAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgICAgICAgICAgICBpc0FueUZpbHRlckFuaW1hdGluZz17aXNBbnlGaWx0ZXJBbmltYXRpbmd9XG4gICAgICAgICAgICAgICAgICByZW1vdmVGaWx0ZXI9eygpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVtb3ZlRmlsdGVyKGlkeCwgbWFwU3RhdGUsIGF1dGgsIHByb2plY3QpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbmxhcmdlRmlsdGVyPXsoKSA9PiB0aGlzLnByb3BzLmVubGFyZ2VGaWx0ZXIoaWR4KX1cbiAgICAgICAgICAgICAgICAgIHRvZ2dsZUFuaW1hdGlvbj17KCkgPT4gdGhpcy5wcm9wcy50b2dnbGVBbmltYXRpb24oaWR4KX1cbiAgICAgICAgICAgICAgICAgIHNldEZpbHRlcj17dGhpcy5wcm9wcy5zZXRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJBUEk9e3RoaXMucHJvcHMuc2V0RmlsdGVyQVBJfVxuICAgICAgICAgICAgICAgICAgYXV0aD17YXV0aH1cbiAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGluYWN0aXZlPXtoYWRFbXB0eUZpbHRlciB8fCAhaGFkRGF0YXNldH1cbiAgICAgICAgICAgIHdpZHRoPVwiMTA1cHhcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5fYWRkRmlsdGVyfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBZGQgaGVpZ2h0PVwiMTJweFwiIC8+XG4gICAgICAgICAgICBBZGQgRmlsdGVyXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlck1hbmFnZXJGYWN0b3J5OyAvLyBpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0Jztcbi8vIGltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG4vLyBpbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG4vLyBpbXBvcnQge1xuLy8gICBTaWRlUGFuZWxTZWN0aW9uLFxuLy8gICBTaWRlUGFuZWxEaXZpZGVyLFxuLy8gICBCdXR0b25cbi8vIH0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuLy8gaW1wb3J0IHtBZGR9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ljb25zJztcbi8vIGltcG9ydCBTb3VyY2VEYXRhQ2F0YWxvZ0ZhY3RvcnkgZnJvbSAnLi9jb21tb24vc291cmNlLWRhdGEtY2F0YWxvZyc7XG4vLyBpbXBvcnQgRmlsdGVyUGFuZWxGYWN0b3J5IGZyb20gJy4vZmlsdGVyLXBhbmVsL2ZpbHRlci1wYW5lbCc7XG5cbi8vIEZpbHRlck1hbmFnZXJGYWN0b3J5LmRlcHMgPSBbU291cmNlRGF0YUNhdGFsb2dGYWN0b3J5LCBGaWx0ZXJQYW5lbEZhY3RvcnldO1xuXG4vLyBmdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyRmFjdG9yeShTb3VyY2VEYXRhQ2F0YWxvZywgRmlsdGVyUGFuZWwpIHtcbi8vICAgcmV0dXJuIGNsYXNzIEZpbHRlck1hbmFnZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuLy8gICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4vLyAgICAgICBkYXRhc2V0czogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgICAgIGxheWVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbi8vICAgICAgIGFkZEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgICAgIHJlbW92ZUZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgICAgIGVubGFyZ2VGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgICAgICB0b2dnbGVBbmltYXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgICAgICBzZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgICAgICBmaWx0ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KS5pc1JlcXVpcmVkLFxuLy8gICAgICAgc2hvd0RhdGFzZXRUYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbi8vICAgICAgIC8vIGZpZWxkcyBjYW4gYmUgdW5kZWZpbmVkIHdoZW4gZGF0YXNldCBpcyBub3Qgc2VsZWN0ZWRcbi8vICAgICAgIGZpZWxkczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSlcbi8vICAgICB9O1xuXG4vLyAgICAgLyogc2VsZWN0b3JzICovXG4vLyAgICAgZGF0YXNldHNTZWxlY3RvciA9IHN0YXRlID0+IHN0YXRlLmRhdGFzZXRzO1xuLy8gICAgIGRlZmF1bHREYXRhc2V0U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcihcbi8vICAgICAgIHRoaXMuZGF0YXNldHNTZWxlY3Rvcixcbi8vICAgICAgIGRhdGFzZXRzID0+XG4vLyAgICAgICAgIChPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoICYmIE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXSkgfHwgbnVsbFxuLy8gICAgICk7XG5cbi8vICAgICAvKiBhY3Rpb25zICovXG4vLyAgICAgX2FkZEZpbHRlciA9ICgpID0+IHtcbi8vICAgICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gdGhpcy5kZWZhdWx0RGF0YXNldFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuLy8gICAgICAgdGhpcy5wcm9wcy5hZGRGaWx0ZXIoZGVmYXVsdERhdGFzZXQpO1xuLy8gICAgIH07XG5cbi8vICAgICByZW5kZXIoKSB7XG4vLyAgICAgICBjb25zdCB7ZmlsdGVycywgZGF0YXNldHMsIGxheWVyc30gPSB0aGlzLnByb3BzO1xuLy8gICAgICAgY29uc3QgaXNBbnlGaWx0ZXJBbmltYXRpbmcgPSBmaWx0ZXJzLnNvbWUoZiA9PiBmLmlzQW5pbWF0aW5nKTtcbi8vICAgICAgIGNvbnN0IGhhZEVtcHR5RmlsdGVyID0gZmlsdGVycy5zb21lKGYgPT4gIWYubmFtZSk7XG4vLyAgICAgICBjb25zdCBoYWREYXRhc2V0ID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aDtcblxuLy8gICAgICAgcmV0dXJuIChcbi8vICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItbWFuYWdlclwiPlxuLy8gICAgICAgICAgIDxTb3VyY2VEYXRhQ2F0YWxvZ1xuLy8gICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuLy8gICAgICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17dGhpcy5wcm9wcy5zaG93RGF0YXNldFRhYmxlfVxuLy8gICAgICAgICAgIC8+XG4vLyAgICAgICAgICAgPFNpZGVQYW5lbERpdmlkZXIgLz5cbi8vICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbi8vICAgICAgICAgICAgIHtmaWx0ZXJzICYmXG4vLyAgICAgICAgICAgICAgIGZpbHRlcnMubWFwKChmaWx0ZXIsIGlkeCkgPT4gKFxuLy8gICAgICAgICAgICAgICAgIDxGaWx0ZXJQYW5lbFxuLy8gICAgICAgICAgICAgICAgICAga2V5PXtgJHtmaWx0ZXIuaWR9LSR7aWR4fWB9XG4vLyAgICAgICAgICAgICAgICAgICBpZHg9e2lkeH1cbi8vICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4vLyAgICAgICAgICAgICAgICAgICBmaWx0ZXI9e2ZpbHRlcn1cbi8vICAgICAgICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbi8vICAgICAgICAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuLy8gICAgICAgICAgICAgICAgICAgaXNBbnlGaWx0ZXJBbmltYXRpbmc9e2lzQW55RmlsdGVyQW5pbWF0aW5nfVxuLy8gICAgICAgICAgICAgICAgICAgcmVtb3ZlRmlsdGVyPXsoKSA9PiB0aGlzLnByb3BzLnJlbW92ZUZpbHRlcihpZHgpfVxuLy8gICAgICAgICAgICAgICAgICAgZW5sYXJnZUZpbHRlcj17KCkgPT4gdGhpcy5wcm9wcy5lbmxhcmdlRmlsdGVyKGlkeCl9XG4vLyAgICAgICAgICAgICAgICAgICB0b2dnbGVBbmltYXRpb249eygpID0+IHRoaXMucHJvcHMudG9nZ2xlQW5pbWF0aW9uKGlkeCl9XG4vLyAgICAgICAgICAgICAgICAgICBzZXRGaWx0ZXI9e3RoaXMucHJvcHMuc2V0RmlsdGVyfVxuLy8gICAgICAgICAgICAgICAgIC8+XG4vLyAgICAgICAgICAgICAgICkpfVxuLy8gICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbi8vICAgICAgICAgICA8QnV0dG9uXG4vLyAgICAgICAgICAgICBpbmFjdGl2ZT17aGFkRW1wdHlGaWx0ZXIgfHwgIWhhZERhdGFzZXR9XG4vLyAgICAgICAgICAgICB3aWR0aD1cIjEwNXB4XCJcbi8vICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuX2FkZEZpbHRlcn1cbi8vICAgICAgICAgICA+XG4vLyAgICAgICAgICAgICA8QWRkIGhlaWdodD1cIjEycHhcIiAvPlxuLy8gICAgICAgICAgICAgQWRkIEZpbHRlclxuLy8gICAgICAgICAgIDwvQnV0dG9uPlxuLy8gICAgICAgICA8L2Rpdj5cbi8vICAgICAgICk7XG4vLyAgICAgfVxuLy8gICB9O1xuLy8gfVxuXG4vLyBleHBvcnQgZGVmYXVsdCBGaWx0ZXJNYW5hZ2VyRmFjdG9yeTtcbiJdfQ==