UNPKG

react-planner-viewer

Version:

react-planner-viewer is a React Component for view plans builded with react-planner in 2D mode

200 lines (172 loc) 20.6 kB
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import _ from 'lodash'; import Translator from './translator/translator'; import Catalog from './catalog/catalog'; import actions from './actions/export'; import { objectsMap } from './utils/objects-utils'; import { Content } from './components/export'; import { VERSION } from './version'; var wrapperStyle = { display: 'flex', flexFlow: 'row nowrap' }; var ReactPlanner = function (_Component) { _inherits(ReactPlanner, _Component); function ReactPlanner() { _classCallCheck(this, ReactPlanner); return _possibleConstructorReturn(this, (ReactPlanner.__proto__ || Object.getPrototypeOf(ReactPlanner)).apply(this, arguments)); } _createClass(ReactPlanner, [{ key: 'getChildContext', value: function getChildContext() { var _this2 = this; return _extends({}, objectsMap(actions, function (actionNamespace) { return _this2.props[actionNamespace]; }), { translator: this.props.translator, catalog: this.props.catalog }); } }, { key: 'componentWillMount', value: function componentWillMount() { var store = this.context.store; var _props = this.props, projectActions = _props.projectActions, catalog = _props.catalog, stateExtractor = _props.stateExtractor, plugins = _props.plugins, state = _props.state, areaActions = _props.areaActions, heatMapValues = _props.heatMapValues, heatMapColors = _props.heatMapColors, newScene = _props.newScene; plugins.forEach(function (plugin) { return plugin(store, stateExtractor); }); projectActions.initCatalog(catalog); //modified for the viewer var plannerState = stateExtractor(state); var scene = plannerState.scene; var layerID = scene.selectedLayer; if (newScene) { projectActions.loadProject(newScene); } areaActions.showHeatMapAreas(layerID, heatMapValues, heatMapColors); } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { var stateExtractor = nextProps.stateExtractor, areaActions = nextProps.areaActions, state = nextProps.state, projectActions = nextProps.projectActions, catalog = nextProps.catalog, newScene = nextProps.newScene; var plannerState = stateExtractor(state); var catalogReady = plannerState.getIn(['catalog', 'ready']); if (!catalogReady) { projectActions.initCatalog(catalog); } if (nextProps.newScene && nextProps.newScene !== newScene) { var json = JSON.parse(nextProps.newScene); projectActions.loadProject(json); } //AREA KPIS var scene = plannerState.scene; var layerID = scene.selectedLayer; if (!_.isEqual(nextProps.heatMapValues, this.props.heatMapValues)) { areaActions.showHeatMapAreas(layerID, nextProps.heatMapValues, this.props.heatMapColors); } } }, { key: 'render', value: function render() { var _props2 = this.props, width = _props2.width, height = _props2.height, state = _props2.state, stateExtractor = _props2.stateExtractor, props = _objectWithoutProperties(_props2, ['width', 'height', 'state', 'stateExtractor']); var contentW = width; var contentH = height; var extractedState = stateExtractor(state); //change sizes contentW = width; contentH = height; return React.createElement( 'div', { style: _extends({}, wrapperStyle, { height: height }) }, React.createElement(Content, _extends({ width: contentW, height: contentH, state: extractedState }, props, { onWheel: function onWheel(event) { return event.preventDefault(); } })) ); } }]); return ReactPlanner; }(Component); ReactPlanner.propTypes = { translator: PropTypes.instanceOf(Translator), catalog: PropTypes.instanceOf(Catalog), allowProjectFileSupport: PropTypes.bool, plugins: PropTypes.arrayOf(PropTypes.func), autosaveKey: PropTypes.string, autosaveDelay: PropTypes.number, width: PropTypes.number.isRequired, height: PropTypes.number.isRequired, stateExtractor: PropTypes.func.isRequired, toolbarButtons: PropTypes.array, sidebarComponents: PropTypes.array, footerbarComponents: PropTypes.array, customContents: PropTypes.object, softwareSignature: PropTypes.string, //modified for the viewer heatMapValues: PropTypes.arrayOf(PropTypes.object), heatMapColors: PropTypes.array, onSelectArea: PropTypes.func, newScene: PropTypes.object }; ReactPlanner.contextTypes = { store: PropTypes.object.isRequired }; ReactPlanner.childContextTypes = _extends({}, objectsMap(actions, function () { return PropTypes.object; }), { translator: PropTypes.object, catalog: PropTypes.object }); ReactPlanner.defaultProps = { translator: new Translator(), catalog: new Catalog(), plugins: [], allowProjectFileSupport: true, softwareSignature: 'React-Planner ' + VERSION, toolbarButtons: [], sidebarComponents: [], footerbarComponents: [], customContents: {}, heatMapValues: [], heatMapColors: ['white', 'blue'] }; //redux connect function mapStateToProps(reduxState) { return { state: reduxState }; } function mapDispatchToProps(dispatch) { return objectsMap(actions, function (actionNamespace) { return bindActionCreators(actions[actionNamespace], dispatch); }); } export default connect(mapStateToProps, mapDispatchToProps)(ReactPlanner); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWFjdC1wbGFubmVyLmpzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsImJpbmRBY3Rpb25DcmVhdG9ycyIsImNvbm5lY3QiLCJfIiwiVHJhbnNsYXRvciIsIkNhdGFsb2ciLCJhY3Rpb25zIiwib2JqZWN0c01hcCIsIkNvbnRlbnQiLCJWRVJTSU9OIiwid3JhcHBlclN0eWxlIiwiZGlzcGxheSIsImZsZXhGbG93IiwiUmVhY3RQbGFubmVyIiwicHJvcHMiLCJhY3Rpb25OYW1lc3BhY2UiLCJ0cmFuc2xhdG9yIiwiY2F0YWxvZyIsInN0b3JlIiwiY29udGV4dCIsInByb2plY3RBY3Rpb25zIiwic3RhdGVFeHRyYWN0b3IiLCJwbHVnaW5zIiwic3RhdGUiLCJhcmVhQWN0aW9ucyIsImhlYXRNYXBWYWx1ZXMiLCJoZWF0TWFwQ29sb3JzIiwibmV3U2NlbmUiLCJmb3JFYWNoIiwicGx1Z2luIiwiaW5pdENhdGFsb2ciLCJwbGFubmVyU3RhdGUiLCJzY2VuZSIsImxheWVySUQiLCJzZWxlY3RlZExheWVyIiwibG9hZFByb2plY3QiLCJzaG93SGVhdE1hcEFyZWFzIiwibmV4dFByb3BzIiwiY2F0YWxvZ1JlYWR5IiwiZ2V0SW4iLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiaXNFcXVhbCIsIndpZHRoIiwiaGVpZ2h0IiwiY29udGVudFciLCJjb250ZW50SCIsImV4dHJhY3RlZFN0YXRlIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInByb3BUeXBlcyIsImluc3RhbmNlT2YiLCJhbGxvd1Byb2plY3RGaWxlU3VwcG9ydCIsImJvb2wiLCJhcnJheU9mIiwiZnVuYyIsImF1dG9zYXZlS2V5Iiwic3RyaW5nIiwiYXV0b3NhdmVEZWxheSIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJ0b29sYmFyQnV0dG9ucyIsImFycmF5Iiwic2lkZWJhckNvbXBvbmVudHMiLCJmb290ZXJiYXJDb21wb25lbnRzIiwiY3VzdG9tQ29udGVudHMiLCJvYmplY3QiLCJzb2Z0d2FyZVNpZ25hdHVyZSIsIm9uU2VsZWN0QXJlYSIsImNvbnRleHRUeXBlcyIsImNoaWxkQ29udGV4dFR5cGVzIiwiZGVmYXVsdFByb3BzIiwibWFwU3RhdGVUb1Byb3BzIiwicmVkdXhTdGF0ZSIsIm1hcERpc3BhdGNoVG9Qcm9wcyIsImRpc3BhdGNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPQSxLQUFQLElBQWdCQyxTQUFoQixRQUFpQyxPQUFqQztBQUNBLE9BQU9DLFNBQVAsTUFBc0IsWUFBdEI7QUFDQSxTQUFTQyxrQkFBVCxRQUFtQyxPQUFuQztBQUNBLFNBQVNDLE9BQVQsUUFBd0IsYUFBeEI7QUFDQSxPQUFPQyxDQUFQLE1BQWMsUUFBZDs7QUFFQSxPQUFPQyxVQUFQLE1BQXVCLHlCQUF2QjtBQUNBLE9BQU9DLE9BQVAsTUFBb0IsbUJBQXBCO0FBQ0EsT0FBT0MsT0FBUCxNQUFvQixrQkFBcEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLHVCQUEzQjtBQUNBLFNBQ0VDLE9BREYsUUFFTyxxQkFGUDtBQUdBLFNBQVNDLE9BQVQsUUFBd0IsV0FBeEI7O0FBRUEsSUFBTUMsZUFBZTtBQUNuQkMsV0FBUyxNQURVO0FBRW5CQyxZQUFVO0FBRlMsQ0FBckI7O0lBS01DLFk7Ozs7Ozs7Ozs7O3NDQUVjO0FBQUE7O0FBQ2hCLDBCQUNLTixXQUFXRCxPQUFYLEVBQW9CO0FBQUEsZUFBbUIsT0FBS1EsS0FBTCxDQUFXQyxlQUFYLENBQW5CO0FBQUEsT0FBcEIsQ0FETDtBQUVFQyxvQkFBWSxLQUFLRixLQUFMLENBQVdFLFVBRnpCO0FBR0VDLGlCQUFTLEtBQUtILEtBQUwsQ0FBV0c7QUFIdEI7QUFLRDs7O3lDQUVvQjtBQUFBLFVBQ2JDLEtBRGEsR0FDSCxLQUFLQyxPQURGLENBQ2JELEtBRGE7QUFBQSxtQkFFb0csS0FBS0osS0FGekc7QUFBQSxVQUViTSxjQUZhLFVBRWJBLGNBRmE7QUFBQSxVQUVHSCxPQUZILFVBRUdBLE9BRkg7QUFBQSxVQUVZSSxj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aEI7QUFBQSxDQUFwQixDQURMO0FBRUVuRCxjQUFZaEIsVUFBVW1FLE1BRnhCO0FBR0VsRCxXQUFTakIsVUFBVW1FO0FBSHJCOztBQU1BdEQsYUFBYTJELFlBQWIsR0FBNEI7QUFDMUJ4RCxjQUFZLElBQUlaLFVBQUosRUFEYztBQUUxQmEsV0FBUyxJQUFJWixPQUFKLEVBRmlCO0FBRzFCaUIsV0FBUyxFQUhpQjtBQUkxQitCLDJCQUF5QixJQUpDO0FBSzFCZSx3Q0FBb0MzRCxPQUxWO0FBTTFCcUQsa0JBQWdCLEVBTlU7QUFPMUJFLHFCQUFtQixFQVBPO0FBUTFCQyx1QkFBcUIsRUFSSztBQVMxQkMsa0JBQWdCLEVBVFU7QUFVMUJ6QyxpQkFBZSxFQVZXO0FBVzFCQyxpQkFBZSxDQUFDLE9BQUQsRUFBUyxNQUFUO0FBWFcsQ0FBNUI7O0FBY0E7QUFDQSxTQUFTK0MsZUFBVCxDQUF5QkMsVUFBekIsRUFBcUM7QUFDbkMsU0FBTztBQUNMbkQsV0FBT21EO0FBREYsR0FBUDtBQUdEOztBQUVELFNBQVNDLGtCQUFULENBQTRCQyxRQUE1QixFQUFzQztBQUNwQyxTQUFPckUsV0FBV0QsT0FBWCxFQUFvQjtBQUFBLFdBQW1CTCxtQkFBbUJLLFFBQVFTLGVBQVIsQ0FBbkIsRUFBNkM2RCxRQUE3QyxDQUFuQjtBQUFBLEdBQXBCLENBQVA7QUFDRDs7QUFFRCxlQUFlMUUsUUFBUXVFLGVBQVIsRUFBeUJFLGtCQUF6QixFQUE2QzlELFlBQTdDLENBQWYiLCJmaWxlIjoicmVhY3QtcGxhbm5lci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgYmluZEFjdGlvbkNyZWF0b3JzIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCBUcmFuc2xhdG9yIGZyb20gJy4vdHJhbnNsYXRvci90cmFuc2xhdG9yJztcbmltcG9ydCBDYXRhbG9nIGZyb20gJy4vY2F0YWxvZy9jYXRhbG9nJztcbmltcG9ydCBhY3Rpb25zIGZyb20gJy4vYWN0aW9ucy9leHBvcnQnO1xuaW1wb3J0IHsgb2JqZWN0c01hcCB9IGZyb20gJy4vdXRpbHMvb2JqZWN0cy11dGlscyc7XG5pbXBvcnQge1xuICBDb250ZW50LFxufSBmcm9tICcuL2NvbXBvbmVudHMvZXhwb3J0JztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nO1xuXG5jb25zdCB3cmFwcGVyU3R5bGUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleEZsb3c6ICdyb3cgbm93cmFwJ1xufTtcblxuY2xhc3MgUmVhY3RQbGFubmVyIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBnZXRDaGlsZENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9iamVjdHNNYXAoYWN0aW9ucywgYWN0aW9uTmFtZXNwYWNlID0+IHRoaXMucHJvcHNbYWN0aW9uTmFtZXNwYWNlXSksXG4gICAgICB0cmFuc2xhdG9yOiB0aGlzLnByb3BzLnRyYW5zbGF0b3IsXG4gICAgICBjYXRhbG9nOiB0aGlzLnByb3BzLmNhdGFsb2csXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIGxldCB7IHN0b3JlIH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgbGV0IHsgcHJvamVjdEFjdGlvbnMsIGNhdGFsb2csIHN0YXRlRXh0cmFjdG9yLCBwbHVnaW5zLCBzdGF0ZSwgYXJlYUFjdGlvbnMsIGhlYXRNYXBWYWx1ZXMsIGhlYXRNYXBDb2xvcnMsIG5ld1NjZW5lIH0gPSB0aGlzLnByb3BzO1xuICAgIHBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luKHN0b3JlLCBzdGF0ZUV4dHJhY3RvcikpO1xuICAgIHByb2plY3RBY3Rpb25zLmluaXRDYXRhbG9nKGNhdGFsb2cpO1xuXG4gICAgLy9tb2RpZmllZCBmb3IgdGhlIHZpZXdlclxuICAgIGxldCBwbGFubmVyU3RhdGUgPSBzdGF0ZUV4dHJhY3RvcihzdGF0ZSk7XG4gICAgY29uc3QgeyBzY2VuZSB9ID0gcGxhbm5lclN0YXRlO1xuICAgIGNvbnN0IGxheWVySUQgPSBzY2VuZS5zZWxlY3RlZExheWVyO1xuICAgIGlmKG5ld1NjZW5lKXtcbiAgICAgIHByb2plY3RBY3Rpb25zLmxvYWRQcm9qZWN0KG5ld1NjZW5lKTtcbiAgICB9XG4gICAgYXJlYUFjdGlvbnMuc2hvd0hlYXRNYXBBcmVhcyhsYXllcklELCBoZWF0TWFwVmFsdWVzLCBoZWF0TWFwQ29sb3JzKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgbGV0IHsgc3RhdGVFeHRyYWN0b3IsIGFyZWFBY3Rpb25zLCBzdGF0ZSwgcHJvamVjdEFjdGlvbnMsIGNhdGFsb2csIG5ld1NjZW5lIH0gPSBuZXh0UHJvcHM7XG4gICAgbGV0IHBsYW5uZXJTdGF0ZSA9IHN0YXRlRXh0cmFjdG9yKHN0YXRlKTtcbiAgICBsZXQgY2F0YWxvZ1JlYWR5ID0gcGxhbm5lclN0YXRlLmdldEluKFsnY2F0YWxvZycsICdyZWFkeSddKTtcbiAgICBpZiAoIWNhdGFsb2dSZWFkeSkge1xuICAgICAgcHJvamVjdEFjdGlvbnMuaW5pdENhdGFsb2coY2F0YWxvZyk7XG4gICAgfSBcbiAgICBpZihuZXh0UHJvcHMubmV3U2NlbmUgJiYgbmV4dFByb3BzLm5ld1NjZW5lICE9PSBuZXdTY2VuZSl7XG4gICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UobmV4dFByb3BzLm5ld1NjZW5lKTtcbiAgICAgIHByb2plY3RBY3Rpb25zLmxvYWRQcm9qZWN0KGpzb24pO1xuICAgIH1cblxuICAgIC8vQVJFQSBLUElTXG4gICAgY29uc3QgeyBzY2VuZSB9ID0gcGxhbm5lclN0YXRlO1xuICAgIGNvbnN0IGxheWVySUQgPSBzY2VuZS5zZWxlY3RlZExheWVyO1xuICAgIGlmICghXy5pc0VxdWFsKG5leHRQcm9wcy5oZWF0TWFwVmFsdWVzLCB0aGlzLnByb3BzLmhlYXRNYXBWYWx1ZXMpKSB7XG4gICAgICBhcmVhQWN0aW9ucy5zaG93SGVhdE1hcEFyZWFzKGxheWVySUQsIG5leHRQcm9wcy5oZWF0TWFwVmFsdWVzLCB0aGlzLnByb3BzLmhlYXRNYXBDb2xvcnMpO1xuICAgIH1cblxuICB9XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0LCBzdGF0ZSwgc3RhdGVFeHRyYWN0b3IsIC4uLnByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCBjb250ZW50VyA9IHdpZHRoO1xuICAgIGxldCBjb250ZW50SCA9IGhlaWdodDtcbiAgICBsZXQgZXh0cmFjdGVkU3RhdGUgPSBzdGF0ZUV4dHJhY3RvcihzdGF0ZSk7XG4gICAgLy9jaGFuZ2Ugc2l6ZXNcbiAgICBjb250ZW50VyA9IHdpZHRoO1xuICAgIGNvbnRlbnRIID0gaGVpZ2h0O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXt7IC4uLndyYXBwZXJTdHlsZSwgaGVpZ2h0IH19PlxuICAgICAgICA8Q29udGVudCB3aWR0aD17Y29udGVudFd9IGhlaWdodD17Y29udGVudEh9IHN0YXRlPXtleHRyYWN0ZWRTdGF0ZX0gey4uLnByb3BzfSBvbldoZWVsPXtldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFBsYW5uZXIucHJvcFR5cGVzID0ge1xuICB0cmFuc2xhdG9yOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihUcmFuc2xhdG9yKSxcbiAgY2F0YWxvZzogUHJvcFR5cGVzLmluc3RhbmNlT2YoQ2F0YWxvZyksXG4gIGFsbG93UHJvamVjdEZpbGVTdXBwb3J0OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGx1Z2luczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICBhdXRvc2F2ZUtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgYXV0b3NhdmVEZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgaGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHN0YXRlRXh0cmFjdG9yOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB0b29sYmFyQnV0dG9uczogUHJvcFR5cGVzLmFycmF5LFxuICBzaWRlYmFyQ29tcG9uZW50czogUHJvcFR5cGVzLmFycmF5LFxuICBmb290ZXJiYXJDb21wb25lbnRzOiBQcm9wVHlwZXMuYXJyYXksXG4gIGN1c3RvbUNvbnRlbnRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzb2Z0d2FyZVNpZ25hdHVyZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLy9tb2RpZmllZCBmb3IgdGhlIHZpZXdlclxuICBoZWF0TWFwVmFsdWVzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KSxcbiAgaGVhdE1hcENvbG9yczogUHJvcFR5cGVzLmFycmF5LFxuICBvblNlbGVjdEFyZWE6IFByb3BUeXBlcy5mdW5jLFxuICBuZXdTY2VuZTogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cblJlYWN0UGxhbm5lci5jb250ZXh0VHlwZXMgPSB7XG4gIHN0b3JlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG59O1xuXG5SZWFjdFBsYW5uZXIuY2hpbGRDb250ZXh0VHlwZXMgPSB7XG4gIC4uLm9iamVjdHNNYXAoYWN0aW9ucywgKCkgPT4gUHJvcFR5cGVzLm9iamVjdCksXG4gIHRyYW5zbGF0b3I6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNhdGFsb2c6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuXG5SZWFjdFBsYW5uZXIuZGVmYXVsdFByb3BzID0ge1xuICB0cmFuc2xhdG9yOiBuZXcgVHJhbnNsYXRvcigpLFxuICBjYXRhbG9nOiBuZXcgQ2F0YWxvZygpLFxuICBwbHVnaW5zOiBbXSxcbiAgYWxsb3dQcm9qZWN0RmlsZVN1cHBvcnQ6IHRydWUsXG4gIHNvZnR3YXJlU2lnbmF0dXJlOiBgUmVhY3QtUGxhbm5lciAke1ZFUlNJT059YCxcbiAgdG9vbGJhckJ1dHRvbnM6IFtdLFxuICBzaWRlYmFyQ29tcG9uZW50czogW10sXG4gIGZvb3RlcmJhckNvbXBvbmVudHM6IFtdLFxuICBjdXN0b21Db250ZW50czoge30sXG4gIGhlYXRNYXBWYWx1ZXM6IFtdLFxuICBoZWF0TWFwQ29sb3JzOiBbJ3doaXRlJywnYmx1ZSddLFxufTtcblxuLy9yZWR1eCBjb25uZWN0XG5mdW5jdGlvbiBtYXBTdGF0ZVRvUHJvcHMocmVkdXhTdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHN0YXRlOiByZWR1eFN0YXRlXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoKSB7XG4gIHJldHVybiBvYmplY3RzTWFwKGFjdGlvbnMsIGFjdGlvbk5hbWVzcGFjZSA9PiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uc1thY3Rpb25OYW1lc3BhY2VdLCBkaXNwYXRjaCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShSZWFjdFBsYW5uZXIpO1xuIl19