UNPKG

kepler.gl

Version:

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

118 lines (115 loc) 22.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getLayerBlendingParameters = getLayerBlendingParameters; exports.patchDeckRendererForPostProcessing = patchDeckRendererForPostProcessing; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _window = require("global/window"); var _constants = require("@kepler.gl/constants"); var _core = require("@deck.gl/core"); function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project /** * Convert layer blending config to deck.gl 9.x parameters format. * In deck.gl 9.x, blending is set via `parameters` prop using WebGPU-style string constants * instead of calling setParameters with GL constants. */ function getLayerBlendingParameters(layerBlending) { var blending = _constants.LAYER_BLENDINGS[layerBlending]; if (!blending) return {}; var blendFunc = blending.blendFunc, blendEquation = blending.blendEquation; if (!blendFunc) return {}; var params = { blend: true }; if (blendFunc.length >= 2) { if (!_constants.GL_BLEND_FUNC_TO_WEBGPU[blendFunc[0]]) _window.console.warn("Unmapped blend function: ".concat(blendFunc[0], ", falling back to 'one'")); if (!_constants.GL_BLEND_FUNC_TO_WEBGPU[blendFunc[1]]) _window.console.warn("Unmapped blend function: ".concat(blendFunc[1], ", falling back to 'zero'")); params.blendColorSrcFactor = _constants.GL_BLEND_FUNC_TO_WEBGPU[blendFunc[0]] || _constants.BLEND_FACTOR.ONE; params.blendColorDstFactor = _constants.GL_BLEND_FUNC_TO_WEBGPU[blendFunc[1]] || _constants.BLEND_FACTOR.ZERO; } if (blendFunc.length >= 4) { if (!_constants.GL_BLEND_FUNC_TO_WEBGPU[blendFunc[2]]) _window.console.warn("Unmapped blend function: ".concat(blendFunc[2], ", falling back to 'one'")); if (!_constants.GL_BLEND_FUNC_TO_WEBGPU[blendFunc[3]]) _window.console.warn("Unmapped blend function: ".concat(blendFunc[3], ", falling back to 'zero'")); params.blendAlphaSrcFactor = _constants.GL_BLEND_FUNC_TO_WEBGPU[blendFunc[2]] || _constants.BLEND_FACTOR.ONE; params.blendAlphaDstFactor = _constants.GL_BLEND_FUNC_TO_WEBGPU[blendFunc[3]] || _constants.BLEND_FACTOR.ZERO; } else { params.blendAlphaSrcFactor = params.blendColorSrcFactor; params.blendAlphaDstFactor = params.blendColorDstFactor; } if (Array.isArray(blendEquation)) { params.blendColorOperation = _constants.GL_BLEND_EQ_TO_WEBGPU[blendEquation[0]] || _constants.BLEND_OPERATION.ADD; params.blendAlphaOperation = _constants.GL_BLEND_EQ_TO_WEBGPU[blendEquation[1]] || _constants.BLEND_OPERATION.ADD; } else if (blendEquation) { params.blendColorOperation = _constants.GL_BLEND_EQ_TO_WEBGPU[blendEquation] || _constants.BLEND_OPERATION.ADD; params.blendAlphaOperation = params.blendColorOperation; } return params; } /** * Patch DeckRenderer to include depth-stencil attachments on post-processing * framebuffers. In deck.gl 9, _resizeRenderBuffers creates FBOs with only color * attachments, which breaks depth testing when post-processing effects are active. * This was not an issue in deck.gl 8 where Framebuffer() auto-created a depth buffer. */ var _deckRendererPatched = false; function patchDeckRendererForPostProcessing() { if (_deckRendererPatched) return; _deckRendererPatched = true; var proto = _core.DeckRenderer.prototype; var original = typeof proto._resizeRenderBuffers === 'function' ? proto._resizeRenderBuffers : null; proto._resizeRenderBuffers = function _resizeRenderBufferPatched() { var _this$device, _this = this; if (!((_this$device = this.device) !== null && _this$device !== void 0 && _this$device.canvasContext)) { return original === null || original === void 0 ? void 0 : original.call(this); } var renderBuffers = this.renderBuffers; var size = this.device.canvasContext.getDrawingBufferSize(); var _size = (0, _slicedToArray2["default"])(size, 2), width = _size[0], height = _size[1]; if (renderBuffers.length === 0) { [0, 1].map(function (i) { var colorTexture = _this.device.createTexture({ sampler: { minFilter: _constants.FILTER_MODE.LINEAR, magFilter: _constants.FILTER_MODE.LINEAR }, width: width, height: height }); var depthTexture = _this.device.createTexture({ id: "deck-renderbuffer-".concat(i, "-depth"), format: _constants.DEPTH_STENCIL_FORMAT.DEPTH24_PLUS, usage: _constants.TEXTURE_USAGE.RENDER_ATTACHMENT | _constants.TEXTURE_USAGE.SAMPLE, width: width, height: height }); renderBuffers.push(_this.device.createFramebuffer({ id: "deck-renderbuffer-".concat(i), colorAttachments: [colorTexture], depthStencilAttachment: depthTexture })); }); } var _iterator = _createForOfIteratorHelper(renderBuffers), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var buffer = _step.value; buffer.resize(size); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfY29yZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnMiLCJsYXllckJsZW5kaW5nIiwiYmxlbmRpbmciLCJMQVlFUl9CTEVORElOR1MiLCJibGVuZEZ1bmMiLCJibGVuZEVxdWF0aW9uIiwicGFyYW1zIiwiYmxlbmQiLCJHTF9CTEVORF9GVU5DX1RPX1dFQkdQVSIsIkNvbnNvbGUiLCJ3YXJuIiwiY29uY2F0IiwiYmxlbmRDb2xvclNyY0ZhY3RvciIsIkJMRU5EX0ZBQ1RPUiIsIk9ORSIsImJsZW5kQ29sb3JEc3RGYWN0b3IiLCJaRVJPIiwiYmxlbmRBbHBoYVNyY0ZhY3RvciIsImJsZW5kQWxwaGFEc3RGYWN0b3IiLCJibGVuZENvbG9yT3BlcmF0aW9uIiwiR0xfQkxFTkRfRVFfVE9fV0VCR1BVIiwiQkxFTkRfT1BFUkFUSU9OIiwiQUREIiwiYmxlbmRBbHBoYU9wZXJhdGlvbiIsIl9kZWNrUmVuZGVyZXJQYXRjaGVkIiwicGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZyIsInByb3RvIiwiRGVja1JlbmRlcmVyIiwicHJvdG90eXBlIiwib3JpZ2luYWwiLCJfcmVzaXplUmVuZGVyQnVmZmVycyIsIl9yZXNpemVSZW5kZXJCdWZmZXJQYXRjaGVkIiwiX3RoaXMkZGV2aWNlIiwiX3RoaXMiLCJkZXZpY2UiLCJjYW52YXNDb250ZXh0IiwicmVuZGVyQnVmZmVycyIsInNpemUiLCJnZXREcmF3aW5nQnVmZmVyU2l6ZSIsIl9zaXplIiwiX3NsaWNlZFRvQXJyYXkyIiwid2lkdGgiLCJoZWlnaHQiLCJtYXAiLCJpIiwiY29sb3JUZXh0dXJlIiwiY3JlYXRlVGV4dHVyZSIsInNhbXBsZXIiLCJtaW5GaWx0ZXIiLCJGSUxURVJfTU9ERSIsIkxJTkVBUiIsIm1hZ0ZpbHRlciIsImRlcHRoVGV4dHVyZSIsImlkIiwiZm9ybWF0IiwiREVQVEhfU1RFTkNJTF9GT1JNQVQiLCJERVBUSDI0X1BMVVMiLCJ1c2FnZSIsIlRFWFRVUkVfVVNBR0UiLCJSRU5ERVJfQVRUQUNITUVOVCIsIlNBTVBMRSIsInB1c2giLCJjcmVhdGVGcmFtZWJ1ZmZlciIsImNvbG9yQXR0YWNobWVudHMiLCJkZXB0aFN0ZW5jaWxBdHRhY2htZW50IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJidWZmZXIiLCJyZXNpemUiLCJlcnIiXSwic291cmNlcyI6WyIuLi9zcmMvZ2wtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IHtcbiAgTEFZRVJfQkxFTkRJTkdTLFxuICBHTF9CTEVORF9GVU5DX1RPX1dFQkdQVSxcbiAgR0xfQkxFTkRfRVFfVE9fV0VCR1BVLFxuICBCTEVORF9PUEVSQVRJT04sXG4gIEJMRU5EX0ZBQ1RPUixcbiAgRklMVEVSX01PREUsXG4gIERFUFRIX1NURU5DSUxfRk9STUFULFxuICBURVhUVVJFX1VTQUdFXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7RGVja1JlbmRlcmVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcblxuLyoqXG4gKiBDb252ZXJ0IGxheWVyIGJsZW5kaW5nIGNvbmZpZyB0byBkZWNrLmdsIDkueCBwYXJhbWV0ZXJzIGZvcm1hdC5cbiAqIEluIGRlY2suZ2wgOS54LCBibGVuZGluZyBpcyBzZXQgdmlhIGBwYXJhbWV0ZXJzYCBwcm9wIHVzaW5nIFdlYkdQVS1zdHlsZSBzdHJpbmcgY29uc3RhbnRzXG4gKiBpbnN0ZWFkIG9mIGNhbGxpbmcgc2V0UGFyYW1ldGVycyB3aXRoIEdMIGNvbnN0YW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzKFxuICBsYXllckJsZW5kaW5nOiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+IHtcbiAgY29uc3QgYmxlbmRpbmcgPSBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ107XG4gIGlmICghYmxlbmRpbmcpIHJldHVybiB7fTtcbiAgY29uc3Qge2JsZW5kRnVuYywgYmxlbmRFcXVhdGlvbn0gPSBibGVuZGluZztcbiAgaWYgKCFibGVuZEZ1bmMpIHJldHVybiB7fTtcblxuICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+ID0ge1xuICAgIGJsZW5kOiB0cnVlXG4gIH07XG5cbiAgaWYgKGJsZW5kRnVuYy5sZW5ndGggPj0gMikge1xuICAgIGlmICghR0xfQkxFTkRfRlVOQ19UT19XRUJHUFVbYmxlbmRGdW5jWzBdXSlcbiAgICAgIENvbnNvbGUud2FybihgVW5tYXBwZWQgYmxlbmQgZnVuY3Rpb246ICR7YmxlbmRGdW5jWzBdfSwgZmFsbGluZyBiYWNrIHRvICdvbmUnYCk7XG4gICAgaWYgKCFHTF9CTEVORF9GVU5DX1RPX1dFQkdQVVtibGVuZEZ1bmNbMV1dKVxuICAgICAgQ29uc29sZS53YXJuKGBVbm1hcHBlZCBibGVuZCBmdW5jdGlvbjogJHtibGVuZEZ1bmNbMV19LCBmYWxsaW5nIGJhY2sgdG8gJ3plcm8nYCk7XG4gICAgcGFyYW1zLmJsZW5kQ29sb3JTcmNGYWN0b3IgPSBHTF9CTEVORF9GVU5DX1RPX1dFQkdQVVtibGVuZEZ1bmNbMF1dIHx8IEJMRU5EX0ZBQ1RPUi5PTkU7XG4gICAgcGFyYW1zLmJsZW5kQ29sb3JEc3RGYWN0b3IgPSBHTF9CTEVORF9GVU5DX1RPX1dFQkdQVVtibGVuZEZ1bmNbMV1dIHx8IEJMRU5EX0ZBQ1RPUi5aRVJPO1xuICB9XG4gIGlmIChibGVuZEZ1bmMubGVuZ3RoID49IDQpIHtcbiAgICBpZiAoIUdMX0JMRU5EX0ZVTkNfVE9fV0VCR1BVW2JsZW5kRnVuY1syXV0pXG4gICAgICBDb25zb2xlLndhcm4oYFVubWFwcGVkIGJsZW5kIGZ1bmN0aW9uOiAke2JsZW5kRnVuY1syXX0sIGZhbGxpbmcgYmFjayB0byAnb25lJ2ApO1xuICAgIGlmICghR0xfQkxFTkRfRlVOQ19UT19XRUJHUFVbYmxlbmRGdW5jWzNdXSlcbiAgICAgIENvbnNvbGUud2FybihgVW5tYXBwZWQgYmxlbmQgZnVuY3Rpb246ICR7YmxlbmRGdW5jWzNdfSwgZmFsbGluZyBiYWNrIHRvICd6ZXJvJ2ApO1xuICAgIHBhcmFtcy5ibGVuZEFscGhhU3JjRmFjdG9yID0gR0xfQkxFTkRfRlVOQ19UT19XRUJHUFVbYmxlbmRGdW5jWzJdXSB8fCBCTEVORF9GQUNUT1IuT05FO1xuICAgIHBhcmFtcy5ibGVuZEFscGhhRHN0RmFjdG9yID0gR0xfQkxFTkRfRlVOQ19UT19XRUJHUFVbYmxlbmRGdW5jWzNdXSB8fCBCTEVORF9GQUNUT1IuWkVSTztcbiAgfSBlbHNlIHtcbiAgICBwYXJhbXMuYmxlbmRBbHBoYVNyY0ZhY3RvciA9IHBhcmFtcy5ibGVuZENvbG9yU3JjRmFjdG9yO1xuICAgIHBhcmFtcy5ibGVuZEFscGhhRHN0RmFjdG9yID0gcGFyYW1zLmJsZW5kQ29sb3JEc3RGYWN0b3I7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShibGVuZEVxdWF0aW9uKSkge1xuICAgIHBhcmFtcy5ibGVuZENvbG9yT3BlcmF0aW9uID0gR0xfQkxFTkRfRVFfVE9fV0VCR1BVW2JsZW5kRXF1YXRpb25bMF1dIHx8IEJMRU5EX09QRVJBVElPTi5BREQ7XG4gICAgcGFyYW1zLmJsZW5kQWxwaGFPcGVyYXRpb24gPSBHTF9CTEVORF9FUV9UT19XRUJHUFVbYmxlbmRFcXVhdGlvblsxXV0gfHwgQkxFTkRfT1BFUkFUSU9OLkFERDtcbiAgfSBlbHNlIGlmIChibGVuZEVxdWF0aW9uKSB7XG4gICAgcGFyYW1zLmJsZW5kQ29sb3JPcGVyYXRpb24gPSBHTF9CTEVORF9FUV9UT19XRUJHUFVbYmxlbmRFcXVhdGlvbl0gfHwgQkxFTkRfT1BFUkFUSU9OLkFERDtcbiAgICBwYXJhbXMuYmxlbmRBbHBoYU9wZXJhdGlvbiA9IHBhcmFtcy5ibGVuZENvbG9yT3BlcmF0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBQYXRjaCBEZWNrUmVuZGVyZXIgdG8gaW5jbHVkZSBkZXB0aC1zdGVuY2lsIGF0dGFjaG1lbnRzIG9uIHBvc3QtcHJvY2Vzc2luZ1xuICogZnJhbWVidWZmZXJzLiBJbiBkZWNrLmdsIDksIF9yZXNpemVSZW5kZXJCdWZmZXJzIGNyZWF0ZXMgRkJPcyB3aXRoIG9ubHkgY29sb3JcbiAqIGF0dGFjaG1lbnRzLCB3aGljaCBicmVha3MgZGVwdGggdGVzdGluZyB3aGVuIHBvc3QtcHJvY2Vzc2luZyBlZmZlY3RzIGFyZSBhY3RpdmUuXG4gKiBUaGlzIHdhcyBub3QgYW4gaXNzdWUgaW4gZGVjay5nbCA4IHdoZXJlIEZyYW1lYnVmZmVyKCkgYXV0by1jcmVhdGVkIGEgZGVwdGggYnVmZmVyLlxuICovXG5pbnRlcmZhY2UgRGVja1JlbmRlcmVySW50ZXJuYWxzIHtcbiAgX3Jlc2l6ZVJlbmRlckJ1ZmZlcnM/OiAoKSA9PiB2b2lkO1xuICBkZXZpY2U6IHtcbiAgICBjYW52YXNDb250ZXh0OiB7Z2V0RHJhd2luZ0J1ZmZlclNpemUoKTogW251bWJlciwgbnVtYmVyXX07XG4gICAgY3JlYXRlVGV4dHVyZShwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB1bmtub3duO1xuICAgIGNyZWF0ZUZyYW1lYnVmZmVyKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHtyZXNpemUoc2l6ZTogW251bWJlciwgbnVtYmVyXSk6IHZvaWR9O1xuICB9O1xuICByZW5kZXJCdWZmZXJzOiB7cmVzaXplKHNpemU6IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkfVtdO1xufVxuXG5sZXQgX2RlY2tSZW5kZXJlclBhdGNoZWQgPSBmYWxzZTtcbmV4cG9ydCBmdW5jdGlvbiBwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nKCk6IHZvaWQge1xuICBpZiAoX2RlY2tSZW5kZXJlclBhdGNoZWQpIHJldHVybjtcbiAgX2RlY2tSZW5kZXJlclBhdGNoZWQgPSB0cnVlO1xuXG4gIGNvbnN0IHByb3RvID0gRGVja1JlbmRlcmVyLnByb3RvdHlwZSBhcyB1bmtub3duIGFzIERlY2tSZW5kZXJlckludGVybmFscztcbiAgY29uc3Qgb3JpZ2luYWwgPVxuICAgIHR5cGVvZiBwcm90by5fcmVzaXplUmVuZGVyQnVmZmVycyA9PT0gJ2Z1bmN0aW9uJyA/IHByb3RvLl9yZXNpemVSZW5kZXJCdWZmZXJzIDogbnVsbDtcblxuICBwcm90by5fcmVzaXplUmVuZGVyQnVmZmVycyA9IGZ1bmN0aW9uIF9yZXNpemVSZW5kZXJCdWZmZXJQYXRjaGVkKHRoaXM6IERlY2tSZW5kZXJlckludGVybmFscykge1xuICAgIGlmICghdGhpcy5kZXZpY2U/LmNhbnZhc0NvbnRleHQpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbD8uY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCB7cmVuZGVyQnVmZmVyc30gPSB0aGlzO1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLmRldmljZS5jYW52YXNDb250ZXh0LmdldERyYXdpbmdCdWZmZXJTaXplKCk7XG4gICAgY29uc3QgW3dpZHRoLCBoZWlnaHRdID0gc2l6ZTtcbiAgICBpZiAocmVuZGVyQnVmZmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIFswLCAxXS5tYXAoKGk6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBjb2xvclRleHR1cmUgPSB0aGlzLmRldmljZS5jcmVhdGVUZXh0dXJlKHtcbiAgICAgICAgICBzYW1wbGVyOiB7bWluRmlsdGVyOiBGSUxURVJfTU9ERS5MSU5FQVIsIG1hZ0ZpbHRlcjogRklMVEVSX01PREUuTElORUFSfSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlcHRoVGV4dHVyZSA9IHRoaXMuZGV2aWNlLmNyZWF0ZVRleHR1cmUoe1xuICAgICAgICAgIGlkOiBgZGVjay1yZW5kZXJidWZmZXItJHtpfS1kZXB0aGAsXG4gICAgICAgICAgZm9ybWF0OiBERVBUSF9TVEVOQ0lMX0ZPUk1BVC5ERVBUSDI0X1BMVVMsXG4gICAgICAgICAgdXNhZ2U6IFRFWFRVUkVfVVNBR0UuUkVOREVSX0FUVEFDSE1FTlQgfCBURVhUVVJFX1VTQUdFLlNBTVBMRSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbmRlckJ1ZmZlcnMucHVzaChcbiAgICAgICAgICB0aGlzLmRldmljZS5jcmVhdGVGcmFtZWJ1ZmZlcih7XG4gICAgICAgICAgICBpZDogYGRlY2stcmVuZGVyYnVmZmVyLSR7aX1gLFxuICAgICAgICAgICAgY29sb3JBdHRhY2htZW50czogW2NvbG9yVGV4dHVyZV0sXG4gICAgICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50OiBkZXB0aFRleHR1cmVcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIHJlbmRlckJ1ZmZlcnMpIHtcbiAgICAgIGJ1ZmZlci5yZXNpemUoc2l6ZSk7XG4gICAgfVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFVQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFBMkMsU0FBQUcsMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxFQUFBLFVBQUFSLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxVQUFBQSxDQUFBLEtBQUFlLENBQUEsRUFBQUwsQ0FBQSxnQkFBQU0sU0FBQSxpSkFBQUMsQ0FBQSxFQUFBQyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFSLENBQUEsV0FBQUEsRUFBQSxJQUFBVCxDQUFBLEdBQUFBLENBQUEsQ0FBQWtCLElBQUEsQ0FBQXBCLENBQUEsTUFBQVksQ0FBQSxXQUFBQSxFQUFBLFFBQUFaLENBQUEsR0FBQUUsQ0FBQSxDQUFBbUIsSUFBQSxXQUFBSCxDQUFBLEdBQUFsQixDQUFBLENBQUFhLElBQUEsRUFBQWIsQ0FBQSxLQUFBQyxDQUFBLFdBQUFBLEVBQUFELENBQUEsSUFBQW1CLENBQUEsT0FBQUYsQ0FBQSxHQUFBakIsQ0FBQSxLQUFBZSxDQUFBLFdBQUFBLEVBQUEsVUFBQUcsQ0FBQSxZQUFBaEIsQ0FBQSxjQUFBQSxDQUFBLDhCQUFBaUIsQ0FBQSxRQUFBRixDQUFBO0FBQUEsU0FBQVYsNEJBQUFQLENBQUEsRUFBQWtCLENBQUEsUUFBQWxCLENBQUEsMkJBQUFBLENBQUEsU0FBQXNCLGlCQUFBLENBQUF0QixDQUFBLEVBQUFrQixDQUFBLE9BQUFoQixDQUFBLE1BQUFxQixRQUFBLENBQUFILElBQUEsQ0FBQXBCLENBQUEsRUFBQXdCLEtBQUEsNkJBQUF0QixDQUFBLElBQUFGLENBQUEsQ0FBQXlCLFdBQUEsS0FBQXZCLENBQUEsR0FBQUYsQ0FBQSxDQUFBeUIsV0FBQSxDQUFBQyxJQUFBLGFBQUF4QixDQUFBLGNBQUFBLENBQUEsR0FBQUcsS0FBQSxDQUFBc0IsSUFBQSxDQUFBM0IsQ0FBQSxvQkFBQUUsQ0FBQSwrQ0FBQTBCLElBQUEsQ0FBQTFCLENBQUEsSUFBQW9CLGlCQUFBLENBQUF0QixDQUFBLEVBQUFrQixDQUFBO0FBQUEsU0FBQUksa0JBQUF0QixDQUFBLEVBQUFrQixDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBUSxNQUFBLE1BQUFVLENBQUEsR0FBQWxCLENBQUEsQ0FBQVEsTUFBQSxZQUFBUCxDQUFBLE1BQUFXLENBQUEsR0FBQVAsS0FBQSxDQUFBYSxDQUFBLEdBQUFqQixDQUFBLEdBQUFpQixDQUFBLEVBQUFqQixDQUFBLElBQUFXLENBQUEsQ0FBQVgsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsVUFBQVcsQ0FBQSxJQWQzQztBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNpQiwwQkFBMEJBLENBQ3hDQyxhQUFxQixFQUNhO0VBQ2xDLElBQU1DLFFBQVEsR0FBR0MsMEJBQWUsQ0FBQ0YsYUFBYSxDQUFDO0VBQy9DLElBQUksQ0FBQ0MsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0VBQ3hCLElBQU9FLFNBQVMsR0FBbUJGLFFBQVEsQ0FBcENFLFNBQVM7SUFBRUMsYUFBYSxHQUFJSCxRQUFRLENBQXpCRyxhQUFhO0VBQy9CLElBQUksQ0FBQ0QsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0VBRXpCLElBQU1FLE1BQXdDLEdBQUc7SUFDL0NDLEtBQUssRUFBRTtFQUNULENBQUM7RUFFRCxJQUFJSCxTQUFTLENBQUN6QixNQUFNLElBQUksQ0FBQyxFQUFFO0lBQ3pCLElBQUksQ0FBQzZCLGtDQUF1QixDQUFDSixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeENLLGVBQU8sQ0FBQ0MsSUFBSSw2QkFBQUMsTUFBQSxDQUE2QlAsU0FBUyxDQUFDLENBQUMsQ0FBQyw0QkFBeUIsQ0FBQztJQUNqRixJQUFJLENBQUNJLGtDQUF1QixDQUFDSixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeENLLGVBQU8sQ0FBQ0MsSUFBSSw2QkFBQUMsTUFBQSxDQUE2QlAsU0FBUyxDQUFDLENBQUMsQ0FBQyw2QkFBMEIsQ0FBQztJQUNsRkUsTUFBTSxDQUFDTSxtQkFBbUIsR0FBR0osa0NBQXVCLENBQUNKLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJUyx1QkFBWSxDQUFDQyxHQUFHO0lBQ3RGUixNQUFNLENBQUNTLG1CQUFtQixHQUFHUCxrQ0FBdUIsQ0FBQ0osU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUlTLHVCQUFZLENBQUNHLElBQUk7RUFDekY7RUFDQSxJQUFJWixTQUFTLENBQUN6QixNQUFNLElBQUksQ0FBQyxFQUFFO0lBQ3pCLElBQUksQ0FBQzZCLGtDQUF1QixDQUFDSixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeENLLGVBQU8sQ0FBQ0MsSUFBSSw2QkFBQUMsTUFBQSxDQUE2QlAsU0FBUyxDQUFDLENBQUMsQ0FBQyw0QkFBeUIsQ0FBQztJQUNqRixJQUFJLENBQUNJLGtDQUF1QixDQUFDSixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeENLLGVBQU8sQ0FBQ0MsSUFBSSw2QkFBQUMsTUFBQSxDQUE2QlAsU0FBUyxDQUFDLENBQUMsQ0FBQyw2QkFBMEIsQ0FBQztJQUNsRkUsTUFBTSxDQUFDVyxtQkFBbUIsR0FBR1Qsa0NBQXVCLENBQUNKLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJUyx1QkFBWSxDQUFDQyxHQUFHO0lBQ3RGUixNQUFNLENBQUNZLG1CQUFtQixHQUFHVixrQ0FBdUIsQ0FBQ0osU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUlTLHVCQUFZLENBQUNHLElBQUk7RUFDekYsQ0FBQyxNQUFNO0lBQ0xWLE1BQU0sQ0FBQ1csbUJBQW1CLEdBQUdYLE1BQU0sQ0FBQ00sbUJBQW1CO0lBQ3ZETixNQUFNLENBQUNZLG1CQUFtQixHQUFHWixNQUFNLENBQUNTLG1CQUFtQjtFQUN6RDtFQUVBLElBQUl2QyxLQUFLLENBQUNDLE9BQU8sQ0FBQzRCLGFBQWEsQ0FBQyxFQUFFO0lBQ2hDQyxNQUFNLENBQUNhLG1CQUFtQixHQUFHQyxnQ0FBcUIsQ0FBQ2YsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUlnQiwwQkFBZSxDQUFDQyxHQUFHO0lBQzNGaEIsTUFBTSxDQUFDaUIsbUJBQW1CLEdBQUdILGdDQUFxQixDQUFDZixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSWdCLDBCQUFlLENBQUNDLEdBQUc7RUFDN0YsQ0FBQyxNQUFNLElBQUlqQixhQUFhLEVBQUU7SUFDeEJDLE1BQU0sQ0FBQ2EsbUJBQW1CLEdBQUdDLGdDQUFxQixDQUFDZixhQUFhLENBQUMsSUFBSWdCLDBCQUFlLENBQUNDLEdBQUc7SUFDeEZoQixNQUFNLENBQUNpQixtQkFBbUIsR0FBR2pCLE1BQU0sQ0FBQ2EsbUJBQW1CO0VBQ3pEO0VBRUEsT0FBT2IsTUFBTTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFXQSxJQUFJa0Isb0JBQW9CLEdBQUcsS0FBSztBQUN6QixTQUFTQyxrQ0FBa0NBLENBQUEsRUFBUztFQUN6RCxJQUFJRCxvQkFBb0IsRUFBRTtFQUMxQkEsb0JBQW9CLEdBQUcsSUFBSTtFQUUzQixJQUFNRSxLQUFLLEdBQUdDLGtCQUFZLENBQUNDLFNBQTZDO0VBQ3hFLElBQU1DLFFBQVEsR0FDWixPQUFPSCxLQUFLLENBQUNJLG9CQUFvQixLQUFLLFVBQVUsR0FBR0osS0FBSyxDQUFDSSxvQkFBb0IsR0FBRyxJQUFJO0VBRXRGSixLQUFLLENBQUNJLG9CQUFvQixHQUFHLFNBQVNDLDBCQUEwQkEsQ0FBQSxFQUE4QjtJQUFBLElBQUFDLFlBQUE7TUFBQUMsS0FBQTtJQUM1RixJQUFJLEdBQUFELFlBQUEsR0FBQyxJQUFJLENBQUNFLE1BQU0sY0FBQUYsWUFBQSxlQUFYQSxZQUFBLENBQWFHLGFBQWEsR0FBRTtNQUMvQixPQUFPTixRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDN0I7SUFFQSxJQUFPNkMsYUFBYSxHQUFJLElBQUksQ0FBckJBLGFBQWE7SUFDcEIsSUFBTUMsSUFBSSxHQUFHLElBQUksQ0FBQ0gsTUFBTSxDQUFDQyxhQUFhLENBQUNHLG9CQUFvQixDQUFDLENBQUM7SUFDN0QsSUFBQUMsS0FBQSxPQUFBQyxlQUFBLGFBQXdCSCxJQUFJO01BQXJCSSxLQUFLLEdBQUFGLEtBQUE7TUFBRUcsTUFBTSxHQUFBSCxLQUFBO0lBQ3BCLElBQUlILGFBQWEsQ0FBQ3pELE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDOUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNnRSxHQUFHLENBQUMsVUFBQ0MsQ0FBUyxFQUFLO1FBQ3hCLElBQU1DLFlBQVksR0FBR1osS0FBSSxDQUFDQyxNQUFNLENBQUNZLGFBQWEsQ0FBQztVQUM3Q0MsT0FBTyxFQUFFO1lBQUNDLFNBQVMsRUFBRUMsc0JBQVcsQ0FBQ0MsTUFBTTtZQUFFQyxTQUFTLEVBQUVGLHNCQUFXLENBQUNDO1VBQU0sQ0FBQztVQUN2RVQsS0FBSyxFQUFMQSxLQUFLO1VBQ0xDLE1BQU0sRUFBTkE7UUFDRixDQUFDLENBQUM7UUFDRixJQUFNVSxZQUFZLEdBQUduQixLQUFJLENBQUNDLE1BQU0sQ0FBQ1ksYUFBYSxDQUFDO1VBQzdDTyxFQUFFLHVCQUFBMUMsTUFBQSxDQUF1QmlDLENBQUMsV0FBUTtVQUNsQ1UsTUFBTSxFQUFFQywrQkFBb0IsQ0FBQ0MsWUFBWTtVQUN6Q0MsS0FBSyxFQUFFQyx3QkFBYSxDQUFDQyxpQkFBaUIsR0FBR0Qsd0JBQWEsQ0FBQ0UsTUFBTTtVQUM3RG5CLEtBQUssRUFBTEEsS0FBSztVQUNMQyxNQUFNLEVBQU5BO1FBQ0YsQ0FBQyxDQUFDO1FBQ0ZOLGFBQWEsQ0FBQ3lCLElBQUksQ0FDaEI1QixLQUFJLENBQUNDLE1BQU0sQ0FBQzRCLGlCQUFpQixDQUFDO1VBQzVCVCxFQUFFLHVCQUFBMUMsTUFBQSxDQUF1QmlDLENBQUMsQ0FBRTtVQUM1Qm1CLGdCQUFnQixFQUFFLENBQUNsQixZQUFZLENBQUM7VUFDaENtQixzQkFBc0IsRUFBRVo7UUFDMUIsQ0FBQyxDQUNILENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSjtJQUFDLElBQUFhLFNBQUEsR0FBQS9GLDBCQUFBLENBQ29Ca0UsYUFBYTtNQUFBOEIsS0FBQTtJQUFBO01BQWxDLEtBQUFELFNBQUEsQ0FBQW5GLENBQUEsTUFBQW9GLEtBQUEsR0FBQUQsU0FBQSxDQUFBbEYsQ0FBQSxJQUFBQyxJQUFBLEdBQW9DO1FBQUEsSUFBekJtRixNQUFNLEdBQUFELEtBQUEsQ0FBQWpGLEtBQUE7UUFDZmtGLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDL0IsSUFBSSxDQUFDO01BQ3JCO0lBQUMsU0FBQWdDLEdBQUE7TUFBQUosU0FBQSxDQUFBN0YsQ0FBQSxDQUFBaUcsR0FBQTtJQUFBO01BQUFKLFNBQUEsQ0FBQS9FLENBQUE7SUFBQTtFQUNILENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==