UNPKG

kepler.gl

Version:

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

152 lines (150 loc) 22.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.updateLayerColor = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _react = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"); var _utils = require("@openassistant/utils"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/actions/src"); var _zod = require("zod"); var _lib = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-redux/lib"); 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; } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project // This file is used to call the LAYER_VISUAL_CHANNEL_CHANGE to update the layer style function UpdateLayerColorToolComponent(_ref) { var layer = _ref.layer, newConfig = _ref.newConfig, channel = _ref.channel, newVisConfig = _ref.newVisConfig; var dispatch = (0, _lib.useDispatch)(); (0, _react.useEffect)(function () { dispatch((0, _src.layerVisualChannelConfigChange)(layer, newConfig, channel, newVisConfig)); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return null; } /** * Update the color of a layer * NOTE: this tool should be updated to updateLayerStyle including color, size, opacity, etc. */ var updateLayerColor = exports.updateLayerColor = (0, _utils.extendedTool)({ description: 'Update the color of a layer', parameters: _zod.z.object({ layerId: _zod.z.string(), numberOfColors: _zod.z.number(), customColors: _zod.z.array(_zod.z.string()).describe('An array of hex color values. Please try to generate colors from user description like: van gogh starry night, water color etc.') }), execute: executeUpdateLayerColor, context: { getLayers: function getLayers() { throw new Error('getLayers() not implemented.'); }, layerVisualChannelConfigChange: function layerVisualChannelConfigChange() { throw new Error('layerVisualChannelConfigChange() not implemented.'); } }, component: UpdateLayerColorToolComponent }); function isUpdateLayerColorArgs(args) { return (0, _typeof2["default"])(args) === 'object' && args !== null && typeof args.layerId === 'string' && typeof args.numberOfColors === 'number' && Array.isArray(args.customColors) && args.customColors.every(function (color) { return typeof color === 'string'; }); } function isUpdateLayerColorFunctionContext(context) { return (0, _typeof2["default"])(context) === 'object' && context !== null && typeof context.getLayers === 'function'; } function executeUpdateLayerColor(_x, _x2) { return _executeUpdateLayerColor.apply(this, arguments); } function _executeUpdateLayerColor() { _executeUpdateLayerColor = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(args, options) { var layerId, numberOfColors, customColors, getLayers, layers, layer, channel, newConfig, oldColorRange, newColorRange, newVisConfig; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.prev = 0; if (isUpdateLayerColorArgs(args)) { _context.next = 3; break; } throw new Error('Invalid updateLayerColor arguments'); case 3: if (isUpdateLayerColorFunctionContext(options.context)) { _context.next = 5; break; } throw new Error('Invalid updateLayerColor function context'); case 5: layerId = args.layerId, numberOfColors = args.numberOfColors, customColors = args.customColors; getLayers = options.context.getLayers; // get layer from visState by layerId layers = getLayers(); layer = layers.find(function (l) { return l.id === layerId; }); if (layer) { _context.next = 11; break; } throw new Error("Layer with id ".concat(layerId, " not found")); case 11: if (!(numberOfColors !== customColors.length)) { _context.next = 13; break; } throw new Error("customColors array must contain exactly ".concat(numberOfColors, " colors")); case 13: channel = 'color'; newConfig = { // colorScale: 'custom' }; oldColorRange = layer.config.visConfig.colorRange; newColorRange = _objectSpread(_objectSpread({}, oldColorRange), {}, { colors: customColors }, oldColorRange.colorMap ? { colorMap: (0, _toConsumableArray2["default"])(oldColorRange.colorMap.map(function (c, i) { return [c[0], customColors[i]]; })) } : {}); newVisConfig = { colorRange: newColorRange, strokeColorRange: newColorRange }; return _context.abrupt("return", { llmResult: { success: true, details: "Color updated successfully to ".concat(customColors.join(', '), " for layer ").concat(layerId) }, additionalData: { layerId: layerId, layer: layer, newConfig: newConfig, channel: channel, newVisConfig: newVisConfig } }); case 21: _context.prev = 21; _context.t0 = _context["catch"](0); return _context.abrupt("return", { llmResult: { success: false, error: _context.t0 instanceof Error ? _context.t0.message : 'Unknown error', instruction: "Try to fix the error. If the error persists, pause the execution and ask the user to try with different prompt and context." } }); case 24: case "end": return _context.stop(); } }, _callee, null, [[0, 21]]); })); return _executeUpdateLayerColor.apply(this, arguments); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3V0aWxzIiwiX3NyYyIsIl96b2QiLCJfbGliIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJVcGRhdGVMYXllckNvbG9yVG9vbENvbXBvbmVudCIsIl9yZWYiLCJsYXllciIsIm5ld0NvbmZpZyIsImNoYW5uZWwiLCJuZXdWaXNDb25maWciLCJkaXNwYXRjaCIsInVzZURpc3BhdGNoIiwidXNlRWZmZWN0IiwibGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlIiwidXBkYXRlTGF5ZXJDb2xvciIsImV4cG9ydHMiLCJleHRlbmRlZFRvb2wiLCJkZXNjcmlwdGlvbiIsInBhcmFtZXRlcnMiLCJ6Iiwib2JqZWN0IiwibGF5ZXJJZCIsInN0cmluZyIsIm51bWJlck9mQ29sb3JzIiwibnVtYmVyIiwiY3VzdG9tQ29sb3JzIiwiYXJyYXkiLCJkZXNjcmliZSIsImV4ZWN1dGUiLCJleGVjdXRlVXBkYXRlTGF5ZXJDb2xvciIsImNvbnRleHQiLCJnZXRMYXllcnMiLCJFcnJvciIsImNvbXBvbmVudCIsImlzVXBkYXRlTGF5ZXJDb2xvckFyZ3MiLCJhcmdzIiwiX3R5cGVvZjIiLCJBcnJheSIsImlzQXJyYXkiLCJldmVyeSIsImNvbG9yIiwiaXNVcGRhdGVMYXllckNvbG9yRnVuY3Rpb25Db250ZXh0IiwiX3giLCJfeDIiLCJfZXhlY3V0ZVVwZGF0ZUxheWVyQ29sb3IiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIm9wdGlvbnMiLCJsYXllcnMiLCJvbGRDb2xvclJhbmdlIiwibmV3Q29sb3JSYW5nZSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJmaW5kIiwibCIsImlkIiwiY29uY2F0IiwiY29uZmlnIiwidmlzQ29uZmlnIiwiY29sb3JSYW5nZSIsImNvbG9ycyIsImNvbG9yTWFwIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm1hcCIsImMiLCJpIiwic3Ryb2tlQ29sb3JSYW5nZSIsImFicnVwdCIsImxsbVJlc3VsdCIsInN1Y2Nlc3MiLCJkZXRhaWxzIiwiam9pbiIsImFkZGl0aW9uYWxEYXRhIiwidDAiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbnN0cnVjdGlvbiIsInN0b3AiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWktYXNzaXN0YW50L3NyYy90b29scy9rZXBsZXItdG9vbHMvbGF5ZXItc3R5bGUtdG9vbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gVGhpcyBmaWxlIGlzIHVzZWQgdG8gY2FsbCB0aGUgTEFZRVJfVklTVUFMX0NIQU5ORUxfQ0hBTkdFIHRvIHVwZGF0ZSB0aGUgbGF5ZXIgc3R5bGVcblxuaW1wb3J0IHt1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7ZXh0ZW5kZWRUb29sfSBmcm9tICdAb3BlbmFzc2lzdGFudC91dGlscyc7XG5pbXBvcnQge2xheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZX0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQmFzZUNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtMYXllclZpc0NvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge3VzZURpc3BhdGNofSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmZ1bmN0aW9uIFVwZGF0ZUxheWVyQ29sb3JUb29sQ29tcG9uZW50KHtsYXllciwgbmV3Q29uZmlnLCBjaGFubmVsLCBuZXdWaXNDb25maWd9KSB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoKGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShsYXllciwgbmV3Q29uZmlnLCBjaGFubmVsLCBuZXdWaXNDb25maWcpKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGNvbG9yIG9mIGEgbGF5ZXJcbiAqIE5PVEU6IHRoaXMgdG9vbCBzaG91bGQgYmUgdXBkYXRlZCB0byB1cGRhdGVMYXllclN0eWxlIGluY2x1ZGluZyBjb2xvciwgc2l6ZSwgb3BhY2l0eSwgZXRjLlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJDb2xvciA9IGV4dGVuZGVkVG9vbCh7XG4gIGRlc2NyaXB0aW9uOiAnVXBkYXRlIHRoZSBjb2xvciBvZiBhIGxheWVyJyxcbiAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuICAgIGxheWVySWQ6IHouc3RyaW5nKCksXG4gICAgbnVtYmVyT2ZDb2xvcnM6IHoubnVtYmVyKCksXG4gICAgY3VzdG9tQ29sb3JzOiB6XG4gICAgICAuYXJyYXkoei5zdHJpbmcoKSlcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgJ0FuIGFycmF5IG9mIGhleCBjb2xvciB2YWx1ZXMuIFBsZWFzZSB0cnkgdG8gZ2VuZXJhdGUgY29sb3JzIGZyb20gdXNlciBkZXNjcmlwdGlvbiBsaWtlOiB2YW4gZ29naCBzdGFycnkgbmlnaHQsIHdhdGVyIGNvbG9yIGV0Yy4nXG4gICAgICApXG4gIH0pLFxuICBleGVjdXRlOiBleGVjdXRlVXBkYXRlTGF5ZXJDb2xvcixcbiAgY29udGV4dDoge1xuICAgIGdldExheWVyczogKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRMYXllcnMoKSBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfSxcbiAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2U6ICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKCkgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50OiBVcGRhdGVMYXllckNvbG9yVG9vbENvbXBvbmVudFxufSk7XG5cbnR5cGUgVXBkYXRlTGF5ZXJDb2xvckFyZ3MgPSB7XG4gIGxheWVySWQ6IHN0cmluZztcbiAgbnVtYmVyT2ZDb2xvcnM6IG51bWJlcjtcbiAgY3VzdG9tQ29sb3JzOiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIGlzVXBkYXRlTGF5ZXJDb2xvckFyZ3MoYXJnczogYW55KTogYXJncyBpcyBVcGRhdGVMYXllckNvbG9yQXJncyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmXG4gICAgYXJncyAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiBhcmdzLmxheWVySWQgPT09ICdzdHJpbmcnICYmXG4gICAgdHlwZW9mIGFyZ3MubnVtYmVyT2ZDb2xvcnMgPT09ICdudW1iZXInICYmXG4gICAgQXJyYXkuaXNBcnJheShhcmdzLmN1c3RvbUNvbG9ycykgJiZcbiAgICBhcmdzLmN1c3RvbUNvbG9ycy5ldmVyeShjb2xvciA9PiB0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKVxuICApO1xufVxuXG50eXBlIFVwZGF0ZUxheWVyQ29sb3JGdW5jdGlvbkNvbnRleHQgPSB7XG4gIGdldExheWVyczogKCkgPT4gTGF5ZXJbXTtcbn07XG5cbmZ1bmN0aW9uIGlzVXBkYXRlTGF5ZXJDb2xvckZ1bmN0aW9uQ29udGV4dChcbiAgY29udGV4dDogYW55XG4pOiBjb250ZXh0IGlzIFVwZGF0ZUxheWVyQ29sb3JGdW5jdGlvbkNvbnRleHQge1xuICByZXR1cm4gdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnICYmIGNvbnRleHQgIT09IG51bGwgJiYgdHlwZW9mIGNvbnRleHQuZ2V0TGF5ZXJzID09PSAnZnVuY3Rpb24nO1xufVxuXG50eXBlIEV4ZWN1dGVVcGRhdGVMYXllckNvbG9yUmVzdWx0ID0ge1xuICBsbG1SZXN1bHQ6IHtcbiAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgIGRldGFpbHM/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgaW5zdHJ1Y3Rpb24/OiBzdHJpbmc7XG4gIH07XG4gIGFkZGl0aW9uYWxEYXRhPzoge1xuICAgIGxheWVySWQ6IHN0cmluZztcbiAgICBsYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz47XG4gICAgY2hhbm5lbDogc3RyaW5nO1xuICAgIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG4gIH07XG59O1xuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlVXBkYXRlTGF5ZXJDb2xvcihhcmdzLCBvcHRpb25zKTogUHJvbWlzZTxFeGVjdXRlVXBkYXRlTGF5ZXJDb2xvclJlc3VsdD4ge1xuICB0cnkge1xuICAgIGlmICghaXNVcGRhdGVMYXllckNvbG9yQXJncyhhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVwZGF0ZUxheWVyQ29sb3IgYXJndW1lbnRzJyk7XG4gICAgfVxuICAgIGlmICghaXNVcGRhdGVMYXllckNvbG9yRnVuY3Rpb25Db250ZXh0KG9wdGlvbnMuY29udGV4dCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1cGRhdGVMYXllckNvbG9yIGZ1bmN0aW9uIGNvbnRleHQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7bGF5ZXJJZCwgbnVtYmVyT2ZDb2xvcnMsIGN1c3RvbUNvbG9yc30gPSBhcmdzO1xuICAgIGNvbnN0IHtnZXRMYXllcnN9ID0gb3B0aW9ucy5jb250ZXh0O1xuXG4gICAgLy8gZ2V0IGxheWVyIGZyb20gdmlzU3RhdGUgYnkgbGF5ZXJJZFxuICAgIGNvbnN0IGxheWVycyA9IGdldExheWVycygpO1xuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoIWxheWVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIHdpdGggaWQgJHtsYXllcklkfSBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICAvLyB2ZXJpZnkgbnVtYmVyT2ZDb2xvcnMgaXMgZXF1YWwgdG8gY3VzdG9tQ29sb3JzLmxlbmd0aFxuICAgIGlmIChudW1iZXJPZkNvbG9ycyAhPT0gY3VzdG9tQ29sb3JzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjdXN0b21Db2xvcnMgYXJyYXkgbXVzdCBjb250YWluIGV4YWN0bHkgJHtudW1iZXJPZkNvbG9yc30gY29sb3JzYCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbCA9ICdjb2xvcic7XG5cbiAgICBjb25zdCBuZXdDb25maWcgPSB7XG4gICAgICAvLyBjb2xvclNjYWxlOiAnY3VzdG9tJ1xuICAgIH0gYXMgUGFydGlhbDxMYXllckJhc2VDb25maWc+O1xuXG4gICAgY29uc3Qgb2xkQ29sb3JSYW5nZSA9IGxheWVyLmNvbmZpZy52aXNDb25maWcuY29sb3JSYW5nZTtcbiAgICBjb25zdCBuZXdDb2xvclJhbmdlID0ge1xuICAgICAgLi4ub2xkQ29sb3JSYW5nZSxcbiAgICAgIGNvbG9yczogY3VzdG9tQ29sb3JzLFxuICAgICAgLi4uKG9sZENvbG9yUmFuZ2UuY29sb3JNYXBcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBjb2xvck1hcDogWy4uLm9sZENvbG9yUmFuZ2UuY29sb3JNYXAubWFwKChjLCBpKSA9PiBbY1swXSwgY3VzdG9tQ29sb3JzW2ldXSldXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KVxuICAgIH07XG5cbiAgICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgICBjb2xvclJhbmdlOiBuZXdDb2xvclJhbmdlLFxuICAgICAgc3Ryb2tlQ29sb3JSYW5nZTogbmV3Q29sb3JSYW5nZVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGxtUmVzdWx0OiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGRldGFpbHM6IGBDb2xvciB1cGRhdGVkIHN1Y2Nlc3NmdWxseSB0byAke2N1c3RvbUNvbG9ycy5qb2luKCcsICcpfSBmb3IgbGF5ZXIgJHtsYXllcklkfWBcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICBsYXllcklkLFxuICAgICAgICBsYXllcixcbiAgICAgICAgbmV3Q29uZmlnLFxuICAgICAgICBjaGFubmVsLFxuICAgICAgICBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBsbG1SZXN1bHQ6IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgaW5zdHJ1Y3Rpb246IGBUcnkgdG8gZml4IHRoZSBlcnJvci4gSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwYXVzZSB0aGUgZXhlY3V0aW9uIGFuZCBhc2sgdGhlIHVzZXIgdG8gdHJ5IHdpdGggZGlmZmVyZW50IHByb21wdCBhbmQgY29udGV4dC5gXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFLQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxJQUFBLEdBQUFGLE9BQUE7QUFHQSxJQUFBRyxJQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxJQUFBLEdBQUFKLE9BQUE7QUFBd0MsU0FBQUssUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUFuQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUEsSUFYeEM7QUFDQTtBQUVBO0FBVUEsU0FBU29CLDZCQUE2QkEsQ0FBQUMsSUFBQSxFQUE0QztFQUFBLElBQTFDQyxLQUFLLEdBQUFELElBQUEsQ0FBTEMsS0FBSztJQUFFQyxTQUFTLEdBQUFGLElBQUEsQ0FBVEUsU0FBUztJQUFFQyxPQUFPLEdBQUFILElBQUEsQ0FBUEcsT0FBTztJQUFFQyxZQUFZLEdBQUFKLElBQUEsQ0FBWkksWUFBWTtFQUM3RSxJQUFNQyxRQUFRLEdBQUcsSUFBQUMsZ0JBQVcsRUFBQyxDQUFDO0VBRTlCLElBQUFDLGdCQUFTLEVBQUMsWUFBTTtJQUNkRixRQUFRLENBQUMsSUFBQUcsbUNBQThCLEVBQUNQLEtBQUssRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFlBQVksQ0FBQyxDQUFDO0lBQ2pGO0VBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLE9BQU8sSUFBSTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUssZ0JBQWdCLEdBQUFDLE9BQUEsQ0FBQUQsZ0JBQUEsR0FBRyxJQUFBRSxtQkFBWSxFQUFDO0VBQzNDQyxXQUFXLEVBQUUsNkJBQTZCO0VBQzFDQyxVQUFVLEVBQUVDLE1BQUMsQ0FBQ0MsTUFBTSxDQUFDO0lBQ25CQyxPQUFPLEVBQUVGLE1BQUMsQ0FBQ0csTUFBTSxDQUFDLENBQUM7SUFDbkJDLGNBQWMsRUFBRUosTUFBQyxDQUFDSyxNQUFNLENBQUMsQ0FBQztJQUMxQkMsWUFBWSxFQUFFTixNQUFDLENBQ1pPLEtBQUssQ0FBQ1AsTUFBQyxDQUFDRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ2pCSyxRQUFRLENBQ1AsaUlBQ0Y7RUFDSixDQUFDLENBQUM7RUFDRkMsT0FBTyxFQUFFQyx1QkFBdUI7RUFDaENDLE9BQU8sRUFBRTtJQUNQQyxTQUFTLEVBQUUsU0FBWEEsU0FBU0EsQ0FBQSxFQUFRO01BQ2YsTUFBTSxJQUFJQyxLQUFLLENBQUMsOEJBQThCLENBQUM7SUFDakQsQ0FBQztJQUNEbkIsOEJBQThCLEVBQUUsU0FBaENBLDhCQUE4QkEsQ0FBQSxFQUFRO01BQ3BDLE1BQU0sSUFBSW1CLEtBQUssQ0FBQyxtREFBbUQsQ0FBQztJQUN0RTtFQUNGLENBQUM7RUFDREMsU0FBUyxFQUFFN0I7QUFDYixDQUFDLENBQUM7QUFRRixTQUFTOEIsc0JBQXNCQSxDQUFDQyxJQUFTLEVBQWdDO0VBQ3ZFLE9BQ0UsSUFBQUMsUUFBQSxhQUFPRCxJQUFJLE1BQUssUUFBUSxJQUN4QkEsSUFBSSxLQUFLLElBQUksSUFDYixPQUFPQSxJQUFJLENBQUNkLE9BQU8sS0FBSyxRQUFRLElBQ2hDLE9BQU9jLElBQUksQ0FBQ1osY0FBYyxLQUFLLFFBQVEsSUFDdkNjLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxJQUFJLENBQUNWLFlBQVksQ0FBQyxJQUNoQ1UsSUFBSSxDQUFDVixZQUFZLENBQUNjLEtBQUssQ0FBQyxVQUFBQyxLQUFLO0lBQUEsT0FBSSxPQUFPQSxLQUFLLEtBQUssUUFBUTtFQUFBLEVBQUM7QUFFL0Q7QUFNQSxTQUFTQyxpQ0FBaUNBLENBQ3hDWCxPQUFZLEVBQ2dDO0VBQzVDLE9BQU8sSUFBQU0sUUFBQSxhQUFPTixPQUFPLE1BQUssUUFBUSxJQUFJQSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU9BLE9BQU8sQ0FBQ0MsU0FBUyxLQUFLLFVBQVU7QUFDbkc7QUFBQyxTQWtCY0YsdUJBQXVCQSxDQUFBYSxFQUFBLEVBQUFDLEdBQUE7RUFBQSxPQUFBQyx3QkFBQSxDQUFBakQsS0FBQSxPQUFBRSxTQUFBO0FBQUE7QUFBQSxTQUFBK0MseUJBQUE7RUFBQUEsd0JBQUEsT0FBQUMsa0JBQUEsMkJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUF0QyxTQUFBQyxRQUF1Q2IsSUFBSSxFQUFFYyxPQUFPO0lBQUEsSUFBQTVCLE9BQUEsRUFBQUUsY0FBQSxFQUFBRSxZQUFBLEVBQUFNLFNBQUEsRUFBQW1CLE1BQUEsRUFBQTVDLEtBQUEsRUFBQUUsT0FBQSxFQUFBRCxTQUFBLEVBQUE0QyxhQUFBLEVBQUFDLGFBQUEsRUFBQTNDLFlBQUE7SUFBQSxPQUFBcUMsWUFBQSxZQUFBTyxJQUFBLFVBQUFDLFNBQUFDLFFBQUE7TUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtRQUFBO1VBQUFGLFFBQUEsQ0FBQUMsSUFBQTtVQUFBLElBRTNDdEIsc0JBQXNCLENBQUNDLElBQUksQ0FBQztZQUFBb0IsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBLE1BQ3pCLElBQUl6QixLQUFLLENBQUMsb0NBQW9DLENBQUM7UUFBQTtVQUFBLElBRWxEUyxpQ0FBaUMsQ0FBQ1EsT0FBTyxDQUFDbkIsT0FBTyxDQUFDO1lBQUF5QixRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUEsTUFDL0MsSUFBSXpCLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQztRQUFBO1VBR3ZEWCxPQUFPLEdBQWtDYyxJQUFJLENBQTdDZCxPQUFPLEVBQUVFLGNBQWMsR0FBa0JZLElBQUksQ0FBcENaLGNBQWMsRUFBRUUsWUFBWSxHQUFJVSxJQUFJLENBQXBCVixZQUFZO1VBQ3JDTSxTQUFTLEdBQUlrQixPQUFPLENBQUNuQixPQUFPLENBQTVCQyxTQUFTLEVBRWhCO1VBQ01tQixNQUFNLEdBQUduQixTQUFTLENBQUMsQ0FBQztVQUNwQnpCLEtBQUssR0FBRzRDLE1BQU0sQ0FBQ1EsSUFBSSxDQUFDLFVBQUFDLENBQUM7WUFBQSxPQUFJQSxDQUFDLENBQUNDLEVBQUUsS0FBS3ZDLE9BQU87VUFBQSxFQUFDO1VBQUEsSUFDM0NmLEtBQUs7WUFBQWlELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxNQUNGLElBQUl6QixLQUFLLGtCQUFBNkIsTUFBQSxDQUFrQnhDLE9BQU8sZUFBWSxDQUFDO1FBQUE7VUFBQSxNQUluREUsY0FBYyxLQUFLRSxZQUFZLENBQUMzQixNQUFNO1lBQUF5RCxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUEsTUFDbEMsSUFBSXpCLEtBQUssNENBQUE2QixNQUFBLENBQTRDdEMsY0FBYyxZQUFTLENBQUM7UUFBQTtVQUcvRWYsT0FBTyxHQUFHLE9BQU87VUFFakJELFNBQVMsR0FBRztZQUNoQjtVQUFBLENBQ0Q7VUFFSzRDLGFBQWEsR0FBRzdDLEtBQUssQ0FBQ3dELE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxVQUFVO1VBQ2pEWixhQUFhLEdBQUF4RCxhQUFBLENBQUFBLGFBQUEsS0FDZHVELGFBQWE7WUFDaEJjLE1BQU0sRUFBRXhDO1VBQVksR0FDaEIwQixhQUFhLENBQUNlLFFBQVEsR0FDdEI7WUFDRUEsUUFBUSxNQUFBQyxtQkFBQSxhQUFNaEIsYUFBYSxDQUFDZSxRQUFRLENBQUNFLEdBQUcsQ0FBQyxVQUFDQyxDQUFDLEVBQUVDLENBQUM7Y0FBQSxPQUFLLENBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTVDLFlBQVksQ0FBQzZDLENBQUMsQ0FBQyxDQUFDO1lBQUEsRUFBQztVQUM3RSxDQUFDLEdBQ0QsQ0FBQyxDQUFDO1VBR0Y3RCxZQUFZLEdBQUc7WUFDbkJ1RCxVQUFVLEVBQUVaLGFBQWE7WUFDekJtQixnQkFBZ0IsRUFBRW5CO1VBQ3BCLENBQUM7VUFBQSxPQUFBRyxRQUFBLENBQUFpQixNQUFBLFdBRU07WUFDTEMsU0FBUyxFQUFFO2NBQ1RDLE9BQU8sRUFBRSxJQUFJO2NBQ2JDLE9BQU8sbUNBQUFkLE1BQUEsQ0FBbUNwQyxZQUFZLENBQUNtRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFBZixNQUFBLENBQWN4QyxPQUFPO1lBQ3hGLENBQUM7WUFDRHdELGNBQWMsRUFBRTtjQUNkeEQsT0FBTyxFQUFQQSxPQUFPO2NBQ1BmLEtBQUssRUFBTEEsS0FBSztjQUNMQyxTQUFTLEVBQVRBLFNBQVM7Y0FDVEMsT0FBTyxFQUFQQSxPQUFPO2NBQ1BDLFlBQVksRUFBWkE7WUFDRjtVQUNGLENBQUM7UUFBQTtVQUFBOEMsUUFBQSxDQUFBQyxJQUFBO1VBQUFELFFBQUEsQ0FBQXVCLEVBQUEsR0FBQXZCLFFBQUE7VUFBQSxPQUFBQSxRQUFBLENBQUFpQixNQUFBLFdBRU07WUFDTEMsU0FBUyxFQUFFO2NBQ1RDLE9BQU8sRUFBRSxLQUFLO2NBQ2RLLEtBQUssRUFBRXhCLFFBQUEsQ0FBQXVCLEVBQUEsWUFBaUI5QyxLQUFLLEdBQUd1QixRQUFBLENBQUF1QixFQUFBLENBQU1FLE9BQU8sR0FBRyxlQUFlO2NBQy9EQyxXQUFXO1lBQ2I7VUFDRixDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUExQixRQUFBLENBQUEyQixJQUFBO01BQUE7SUFBQSxHQUFBbEMsT0FBQTtFQUFBLENBRUo7RUFBQSxPQUFBSix3QkFBQSxDQUFBakQsS0FBQSxPQUFBRSxTQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=