UNPKG

kepler.gl.geoiq

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

159 lines (128 loc) 17.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); 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 _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _deck = require("deck.gl"); var _luma = require("luma.gl"); var _h3Utils = require("../../layers/h3-hexagon-layer/h3-utils"); var _shaderUtils = require("../layer-utils/shader-utils"); 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 addInstanceCoverage(vs) { var addDecl = (0, _shaderUtils.editShader)(vs, 'hexagon cell vs add instance', 'attribute vec3 instancePickingColors;', "attribute vec3 instancePickingColors;\n attribute float instanceCoverage;"); return (0, _shaderUtils.editShader)(addDecl, 'hexagon cell vs add instance', 'float dotRadius = project_scale(radius) * mix(coverage, 0.0, noRender);', 'float dotRadius = project_scale(radius) * mix(coverage * instanceCoverage, 0.0, noRender);'); } // TODO: export all dekc.gl layers from kepler.gl var H3HexagonCellLayer = /*#__PURE__*/ function (_HexagonCellLayer) { (0, _inherits2["default"])(H3HexagonCellLayer, _HexagonCellLayer); function H3HexagonCellLayer() { (0, _classCallCheck2["default"])(this, H3HexagonCellLayer); return (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(H3HexagonCellLayer).apply(this, arguments)); } (0, _createClass2["default"])(H3HexagonCellLayer, [{ key: "getShaders", value: function getShaders() { var shaders = (0, _get2["default"])((0, _getPrototypeOf2["default"])(H3HexagonCellLayer.prototype), "getShaders", this).call(this); return _objectSpread({}, shaders, { vs: addInstanceCoverage(shaders.vs) }); } }, { key: "getCylinderGeometry", value: function getCylinderGeometry(radius) { var distortion = this.getDistortion(); var cylinderGeometry = new _luma.CylinderGeometry({ radius: radius, topRadius: radius, bottomRadius: radius, topCap: true, bottomCap: true, height: 1, verticalAxis: 'z', nradial: 6, nvertical: 1 }); if (distortion) { var pos = cylinderGeometry.attributes.positions.value; var adjusted = (0, _h3Utils.distortCylinderPositions)(pos, distortion); cylinderGeometry.attributes.positions.value = adjusted; } return cylinderGeometry; } }, { key: "getDistortion", value: function getDistortion() { var _this = this; var _this$props = this.props, hexagonVertices = _this$props.hexagonVertices, hexagonCenter = _this$props.hexagonCenter; if (Array.isArray(hexagonVertices) && hexagonVertices.length >= 6 && Array.isArray(hexagonCenter)) { var screenVertices = hexagonVertices.map(function (d) { return _this.projectFlat(d); }); var screenCentroid = this.projectFlat(hexagonCenter); return (0, _h3Utils.getH3VerticeTransform)(screenVertices, screenCentroid); } return null; } }, { key: "updateRadiusAngle", value: function updateRadiusAngle() { var _this$props2 = this.props, angle = _this$props2.angle, radius = _this$props2.radius; var hexagonVertices = this.props.hexagonVertices; if (Array.isArray(hexagonVertices) && hexagonVertices.length >= 6) { var viewport = this.context.viewport; // calculate angle and vertices from hexagonVertices if provided var vertices = this.props.hexagonVertices; var vertex0 = vertices[0]; var vertex3 = vertices[3]; // project to space coordinates var _viewport$getDistance = viewport.getDistanceScales(), pixelsPerMeter = _viewport$getDistance.pixelsPerMeter; var spaceCoord0 = this.projectFlat(vertex0); var spaceCoord3 = this.projectFlat(vertex3); angle = (0, _h3Utils.getAngle)(spaceCoord0, spaceCoord3); radius = (0, _h3Utils.getRadius)(spaceCoord0, spaceCoord3) / pixelsPerMeter[0]; } this.setState({ angle: angle, radius: radius }); } }, { key: "draw", value: function draw(opts) { var uniforms = opts.uniforms; (0, _get2["default"])((0, _getPrototypeOf2["default"])(H3HexagonCellLayer.prototype), "draw", this).call(this, _objectSpread({}, opts, { uniforms: _objectSpread({}, uniforms, { picking_uHighlightScale: this.props.extruded ? 1.4 : 0.0 }) })); } }, { key: "initializeState", value: function initializeState() { (0, _get2["default"])((0, _getPrototypeOf2["default"])(H3HexagonCellLayer.prototype), "initializeState", this).call(this); this.getAttributeManager().addInstanced({ instanceCoverage: { size: 1, accessor: 'getCoverage' } }); } }]); return H3HexagonCellLayer; }(_deck.HexagonCellLayer); exports["default"] = H3HexagonCellLayer; H3HexagonCellLayer.layerName = 'H3HexagonCellLayer'; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNrZ2wtbGF5ZXJzL2gzLWhleGFnb24tY2VsbC1sYXllci9oMy1oZXhhZ29uLWNlbGwtbGF5ZXIuanMiXSwibmFtZXMiOlsiYWRkSW5zdGFuY2VDb3ZlcmFnZSIsInZzIiwiYWRkRGVjbCIsIkgzSGV4YWdvbkNlbGxMYXllciIsInNoYWRlcnMiLCJyYWRpdXMiLCJkaXN0b3J0aW9uIiwiZ2V0RGlzdG9ydGlvbiIsImN5bGluZGVyR2VvbWV0cnkiLCJDeWxpbmRlckdlb21ldHJ5IiwidG9wUmFkaXVzIiwiYm90dG9tUmFkaXVzIiwidG9wQ2FwIiwiYm90dG9tQ2FwIiwiaGVpZ2h0IiwidmVydGljYWxBeGlzIiwibnJhZGlhbCIsIm52ZXJ0aWNhbCIsInBvcyIsImF0dHJpYnV0ZXMiLCJwb3NpdGlvbnMiLCJ2YWx1ZSIsImFkanVzdGVkIiwicHJvcHMiLCJoZXhhZ29uVmVydGljZXMiLCJoZXhhZ29uQ2VudGVyIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwic2NyZWVuVmVydGljZXMiLCJtYXAiLCJkIiwicHJvamVjdEZsYXQiLCJzY3JlZW5DZW50cm9pZCIsImFuZ2xlIiwidmlld3BvcnQiLCJjb250ZXh0IiwidmVydGljZXMiLCJ2ZXJ0ZXgwIiwidmVydGV4MyIsImdldERpc3RhbmNlU2NhbGVzIiwicGl4ZWxzUGVyTWV0ZXIiLCJzcGFjZUNvb3JkMCIsInNwYWNlQ29vcmQzIiwic2V0U3RhdGUiLCJvcHRzIiwidW5pZm9ybXMiLCJwaWNraW5nX3VIaWdobGlnaHRTY2FsZSIsImV4dHJ1ZGVkIiwiZ2V0QXR0cmlidXRlTWFuYWdlciIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlQ292ZXJhZ2UiLCJzaXplIiwiYWNjZXNzb3IiLCJIZXhhZ29uQ2VsbExheWVyIiwibGF5ZXJOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsU0FBU0EsbUJB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O0FBQUEsWUFTMURDLGNBVDBELHlCQVMxREEsY0FUMEQ7O0FBVWpFLFlBQU1DLFdBQVcsR0FBRyxLQUFLVixXQUFMLENBQWlCTSxPQUFqQixDQUFwQjtBQUNBLFlBQU1LLFdBQVcsR0FBRyxLQUFLWCxXQUFMLENBQWlCTyxPQUFqQixDQUFwQjtBQUVBTCxRQUFBQSxLQUFLLEdBQUcsdUJBQVNRLFdBQVQsRUFBc0JDLFdBQXRCLENBQVI7QUFDQXRDLFFBQUFBLE1BQU0sR0FBRyx3QkFBVXFDLFdBQVYsRUFBdUJDLFdBQXZCLElBQXFDRixjQUFjLENBQUMsQ0FBRCxDQUE1RDtBQUNEOztBQUVELFdBQUtHLFFBQUwsQ0FBYztBQUFDVixRQUFBQSxLQUFLLEVBQUxBLEtBQUQ7QUFBUTdCLFFBQUFBLE1BQU0sRUFBTkE7QUFBUixPQUFkO0FBQ0Q7Ozt5QkFFSXdDLEksRUFBTTtBQUFBLFVBQ0ZDLFFBREUsR0FDVUQsSUFEVixDQUNGQyxRQURFO0FBR1QsdUlBQ0tELElBREw7QUFFRUMsUUFBQUEsUUFBUSxvQkFDSEEsUUFERztBQUVOQyxVQUFBQSx1QkFBdUIsRUFBRSxLQUFLeEIsS0FBTCxDQUFXeUIsUUFBWCxHQUFzQixHQUF0QixHQUE0QjtBQUYvQztBQUZWO0FBT0Q7OztzQ0FFaUI7QUFDaEI7QUFFQSxXQUFLQyxtQkFBTCxHQUEyQkMsWUFBM0IsQ0FBd0M7QUFDdENDLFFBQUFBLGdCQUFnQixFQUFFO0FBQUNDLFVBQUFBLElBQUksRUFBRSxDQUFQO0FBQVVDLFVBQUFBLFFBQVEsRUFBRTtBQUFwQjtBQURvQixPQUF4QztBQUdEOzs7RUEzRjZDQyxzQjs7O0FBOEZoRG5ELGtCQUFrQixDQUFDb0QsU0FBbkIsR0FBK0Isb0JBQS9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtIZXhhZ29uQ2VsbExheWVyfSBmcm9tICdkZWNrLmdsJztcbmltcG9ydCB7Q3lsaW5kZXJHZW9tZXRyeX0gZnJvbSAnbHVtYS5nbCc7XG5pbXBvcnQge2dldEFuZ2xlLCBnZXRSYWRpdXMsIGdldEgzVmVydGljZVRyYW5zZm9ybSwgZGlzdG9ydEN5bGluZGVyUG9zaXRpb25zfSBmcm9tICdsYXllcnMvaDMtaGV4YWdvbi1sYXllci9oMy11dGlscyc7XG5pbXBvcnQge2VkaXRTaGFkZXJ9IGZyb20gJ2RlY2tnbC1sYXllcnMvbGF5ZXItdXRpbHMvc2hhZGVyLXV0aWxzJztcblxuZnVuY3Rpb24gYWRkSW5zdGFuY2VDb3ZlcmFnZSh2cykge1xuICBjb25zdCBhZGREZWNsID0gZWRpdFNoYWRlcihcbiAgICB2cyxcbiAgICAnaGV4YWdvbiBjZWxsIHZzIGFkZCBpbnN0YW5jZScsXG4gICAgJ2F0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlUGlja2luZ0NvbG9yczsnLFxuICAgIGBhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG4gICAgIGF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZUNvdmVyYWdlO2BcbiAgKTtcblxuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICBhZGREZWNsLFxuICAgICdoZXhhZ29uIGNlbGwgdnMgYWRkIGluc3RhbmNlJyxcbiAgICAnZmxvYXQgZG90UmFkaXVzID0gcHJvamVjdF9zY2FsZShyYWRpdXMpICogbWl4KGNvdmVyYWdlLCAwLjAsIG5vUmVuZGVyKTsnLFxuICAgICdmbG9hdCBkb3RSYWRpdXMgPSBwcm9qZWN0X3NjYWxlKHJhZGl1cykgKiBtaXgoY292ZXJhZ2UgKiBpbnN0YW5jZUNvdmVyYWdlLCAwLjAsIG5vUmVuZGVyKTsnXG4gICk7XG59XG5cbi8vIFRPRE86IGV4cG9ydCBhbGwgZGVrYy5nbCBsYXllcnMgZnJvbSBrZXBsZXIuZ2xcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEgzSGV4YWdvbkNlbGxMYXllciBleHRlbmRzIEhleGFnb25DZWxsTGF5ZXIge1xuXG4gIGdldFNoYWRlcnMoKSB7XG4gICAgY29uc3Qgc2hhZGVycyA9IHN1cGVyLmdldFNoYWRlcnMoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zaGFkZXJzLFxuICAgICAgdnM6IGFkZEluc3RhbmNlQ292ZXJhZ2Uoc2hhZGVycy52cylcbiAgICB9O1xuICB9XG5cbiAgZ2V0Q3lsaW5kZXJHZW9tZXRyeShyYWRpdXMpIHtcbiAgICBjb25zdCBkaXN0b3J0aW9uID0gdGhpcy5nZXREaXN0b3J0aW9uKCk7XG5cbiAgICBjb25zdCBjeWxpbmRlckdlb21ldHJ5ID0gbmV3IEN5bGluZGVyR2VvbWV0cnkoe1xuICAgICAgcmFkaXVzLFxuICAgICAgdG9wUmFkaXVzOiByYWRpdXMsXG4gICAgICBib3R0b21SYWRpdXM6IHJhZGl1cyxcbiAgICAgIHRvcENhcDogdHJ1ZSxcbiAgICAgIGJvdHRvbUNhcDogdHJ1ZSxcbiAgICAgIGhlaWdodDogMSxcbiAgICAgIHZlcnRpY2FsQXhpczogJ3onLFxuICAgICAgbnJhZGlhbDogNixcbiAgICAgIG52ZXJ0aWNhbDogMVxuICAgIH0pO1xuXG4gICAgaWYgKGRpc3RvcnRpb24pIHtcbiAgICAgIGNvbnN0IHBvcyA9IGN5bGluZGVyR2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbnMudmFsdWU7XG4gICAgICBjb25zdCBhZGp1c3RlZCA9IGRpc3RvcnRDeWxpbmRlclBvc2l0aW9ucyhwb3MsIGRpc3RvcnRpb24pO1xuICAgICAgY3lsaW5kZXJHZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9ucy52YWx1ZSA9IGFkanVzdGVkO1xuICAgIH1cblxuICAgIHJldHVybiBjeWxpbmRlckdlb21ldHJ5O1xuICB9XG5cbiAgZ2V0RGlzdG9ydGlvbigpIHtcbiAgICBjb25zdCB7aGV4YWdvblZlcnRpY2VzLCBoZXhhZ29uQ2VudGVyfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZXhhZ29uVmVydGljZXMpICYmXG4gICAgICBoZXhhZ29uVmVydGljZXMubGVuZ3RoID49IDYgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoaGV4YWdvbkNlbnRlcikpIHtcbiAgICAgICAgY29uc3Qgc2NyZWVuVmVydGljZXMgPSBoZXhhZ29uVmVydGljZXMubWFwKGQgPT4gdGhpcy5wcm9qZWN0RmxhdChkKSk7XG4gICAgICAgIGNvbnN0IHNjcmVlbkNlbnRyb2lkID0gdGhpcy5wcm9qZWN0RmxhdChoZXhhZ29uQ2VudGVyKTtcbiAgICAgICAgcmV0dXJuIGdldEgzVmVydGljZVRyYW5zZm9ybShzY3JlZW5WZXJ0aWNlcywgc2NyZWVuQ2VudHJvaWQpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdXBkYXRlUmFkaXVzQW5nbGUoKSB7XG4gICAgbGV0IHthbmdsZSwgcmFkaXVzfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge2hleGFnb25WZXJ0aWNlc30gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGV4YWdvblZlcnRpY2VzKSAmJiBoZXhhZ29uVmVydGljZXMubGVuZ3RoID49IDYpIHtcbiAgICAgIGNvbnN0IHt2aWV3cG9ydH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICAvLyBjYWxjdWxhdGUgYW5nbGUgYW5kIHZlcnRpY2VzIGZyb20gaGV4YWdvblZlcnRpY2VzIGlmIHByb3ZpZGVkXG4gICAgICBjb25zdCB2ZXJ0aWNlcyA9IHRoaXMucHJvcHMuaGV4YWdvblZlcnRpY2VzO1xuXG4gICAgICBjb25zdCB2ZXJ0ZXgwID0gdmVydGljZXNbMF07XG4gICAgICBjb25zdCB2ZXJ0ZXgzID0gdmVydGljZXNbM107XG5cbiAgICAgIC8vIHByb2plY3QgdG8gc3BhY2UgY29vcmRpbmF0ZXNcbiAgICAgIGNvbnN0IHtwaXhlbHNQZXJNZXRlcn0gPSB2aWV3cG9ydC5nZXREaXN0YW5jZVNjYWxlcygpO1xuICAgICAgY29uc3Qgc3BhY2VDb29yZDAgPSB0aGlzLnByb2plY3RGbGF0KHZlcnRleDApO1xuICAgICAgY29uc3Qgc3BhY2VDb29yZDMgPSB0aGlzLnByb2plY3RGbGF0KHZlcnRleDMpO1xuXG4gICAgICBhbmdsZSA9IGdldEFuZ2xlKHNwYWNlQ29vcmQwLCBzcGFjZUNvb3JkMyk7XG4gICAgICByYWRpdXMgPSBnZXRSYWRpdXMoc3BhY2VDb29yZDAsIHNwYWNlQ29vcmQzKSAvcGl4ZWxzUGVyTWV0ZXJbMF07XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7YW5nbGUsIHJhZGl1c30pO1xuICB9XG5cbiAgZHJhdyhvcHRzKSB7XG4gICAgY29uc3Qge3VuaWZvcm1zfSA9IG9wdHM7XG5cbiAgICBzdXBlci5kcmF3KHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICB1bmlmb3Jtczoge1xuICAgICAgICAuLi51bmlmb3JtcyxcbiAgICAgICAgcGlja2luZ191SGlnaGxpZ2h0U2NhbGU6IHRoaXMucHJvcHMuZXh0cnVkZWQgPyAxLjQgOiAwLjBcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHN1cGVyLmluaXRpYWxpemVTdGF0ZSgpO1xuXG4gICAgdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCkuYWRkSW5zdGFuY2VkKHtcbiAgICAgIGluc3RhbmNlQ292ZXJhZ2U6IHtzaXplOiAxLCBhY2Nlc3NvcjogJ2dldENvdmVyYWdlJ31cbiAgICB9KTtcbiAgfVxufVxuXG5IM0hleGFnb25DZWxsTGF5ZXIubGF5ZXJOYW1lID0gJ0gzSGV4YWdvbkNlbGxMYXllcic7XG4iXX0=