UNPKG

kepler.gl

Version:

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

524 lines (467 loc) 55.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.EXPORT_DATA_TYPE_OPTIONS = exports.EXPORT_DATA_TYPE = exports.DEFAULT_EXPORT_IMAGE_NAME = exports.RESOLUTION_OPTIONS = exports.RATIO_OPTIONS = exports.RATIOS = exports.RESOLUTIONS = exports.MAX_DEFAULT_TOOLTIPS = exports.LAYER_BLENDINGS = exports.NO_VALUE_COLOR = exports.DEFAULT_LIGHT_SETTINGS = exports.DEFAULT_TOOLTIP_FIELDS = exports.DEFAULT_LAYER_COLOR = exports.LAYER_TYPES = exports.CHANNEL_SCALE_SUPPORTED_FIELDS = exports.FIELD_OPTS = exports.DEFAULT_AGGREGATION = exports.notSupportAggrOpts = exports.notSupportedScaleOpts = exports.ordinalFieldAggrScaleFunctions = exports.ordinalFieldScaleFunctions = exports.linearFieldAggrScaleFunctions = exports.linearFieldScaleFunctions = exports.AGGREGATION_TYPES = exports.CHANNEL_SCALES = exports.FIELD_DISPLAY_FORMAT = exports.defaultFormat = exports.FILED_TYPE_DISPLAY = exports.FIELD_COLORS = exports.ALL_FIELD_TYPES = exports.SCALE_FUNC = exports.SCALE_TYPES = exports.TRIP_ARC_FIELDS = exports.TRIP_POINT_FIELDS = exports.ICON_FIELDS = exports.GEOJSON_FIELDS = exports.DEFAULT_MAP_STYLES = exports.DEFAULT_LAYER_GROUPS = exports.PANELS_FOOTER = exports.PANELS = exports.DIMENSIONS = exports.KEPLER_GL_VERSION = exports.KEPLER_GL_NAME = exports.ADD_MAP_STYLE_ID = exports.EXPORT_CONFIG_ID = exports.EXPORT_DATA_ID = exports.EXPORT_IMAGE_ID = exports.ADD_DATA_ID = exports.DELETE_DATA_ID = exports.DATA_TABLE_ID = exports.LAYER_CONFIG_ID = exports.ICON_PREFIX = exports.STYLE_PREFIX = exports.CLOUDFRONT = exports.ACTION_PREFIX = undefined; var _extends3 = require('babel-runtime/helpers/extends'); var _extends4 = _interopRequireDefault(_extends3); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _FILED_TYPE_DISPLAY, _FIELD_DISPLAY_FORMAT, _linearFieldScaleFunc, _CHANNEL_SCALES$color, _CHANNEL_SCALES$sizeA, _linearFieldAggrScale, _ordinalFieldScaleFun, _CHANNEL_SCALES$color2, _ordinalFieldAggrScal, _notSupportedScaleOpt, _notSupportAggrOpts, _DEFAULT_AGGREGATION; // Copyright (c) 2018 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. var _keymirror = require('keymirror'); var _keymirror2 = _interopRequireDefault(_keymirror); var _icons = require('../components/common/icons'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ACTION_PREFIX = exports.ACTION_PREFIX = '@@kepler.gl/'; var CLOUDFRONT = exports.CLOUDFRONT = 'https://d1a3f4spazzrp4.cloudfront.net/kepler.gl'; var STYLE_PREFIX = exports.STYLE_PREFIX = CLOUDFRONT + '/map-styles'; var ICON_PREFIX = exports.ICON_PREFIX = CLOUDFRONT + '/geodude'; // Modal Ids var LAYER_CONFIG_ID = exports.LAYER_CONFIG_ID = 'copyConfig'; var DATA_TABLE_ID = exports.DATA_TABLE_ID = 'dataTable'; var DELETE_DATA_ID = exports.DELETE_DATA_ID = 'deleteData'; var ADD_DATA_ID = exports.ADD_DATA_ID = 'addData'; var EXPORT_IMAGE_ID = exports.EXPORT_IMAGE_ID = 'exportImage'; var EXPORT_DATA_ID = exports.EXPORT_DATA_ID = 'exportData'; var EXPORT_CONFIG_ID = exports.EXPORT_CONFIG_ID = 'exportConfig'; var ADD_MAP_STYLE_ID = exports.ADD_MAP_STYLE_ID = 'addMapStyle'; var KEPLER_GL_NAME = exports.KEPLER_GL_NAME = 'kepler.gl'; var KEPLER_GL_VERSION = exports.KEPLER_GL_VERSION = 'v1.0'; var DIMENSIONS = exports.DIMENSIONS = { sidePanel: { width: 300, margin: { top: 20, left: 20, bottom: 30, right: 20 }, headerHeight: 96 }, mapControl: { width: 204, padding: 12 } }; var PANELS = exports.PANELS = [{ id: 'layer', label: 'Layers', iconComponent: _icons.Layers }, { id: 'filter', label: 'Filters', iconComponent: _icons.FilterFunnel }, { id: 'interaction', label: 'Interactions', iconComponent: _icons.CursorClick }, { id: 'map', label: 'Base map', iconComponent: _icons.Settings }]; var PANELS_FOOTER = exports.PANELS_FOOTER = [{ id: LAYER_CONFIG_ID, label: 'Copy Config', icon: 'clipboard' }]; // MAP STYLES var DEFAULT_LAYER_GROUPS = exports.DEFAULT_LAYER_GROUPS = [{ slug: 'label', filter: function filter(_ref) { var id = _ref.id; return id.match(/(?=(label|place-|poi-))/); }, defaultVisibility: true }, { slug: 'road', filter: function filter(_ref2) { var id = _ref2.id; return id.match(/(?=(road|railway|tunnel|street|bridge))(?!.*label)/); }, defaultVisibility: true }, { slug: 'border', filter: function filter(_ref3) { var id = _ref3.id; return id.match(/border|boundaries/); }, defaultVisibility: false }, { slug: 'building', filter: function filter(_ref4) { var id = _ref4.id; return id.match(/building/); }, defaultVisibility: true }, { slug: 'water', filter: function filter(_ref5) { var id = _ref5.id; return id.match(/(?=(water|stream|ferry))/); }, defaultVisibility: true }, { slug: 'land', filter: function filter(_ref6) { var id = _ref6.id; return id.match(/(?=(parks|landcover|industrial|sand|hillshade))/); }, defaultVisibility: true }]; var DEFAULT_MAP_STYLES = exports.DEFAULT_MAP_STYLES = [{ id: 'dark', label: 'Dark', url: STYLE_PREFIX + '/dark', icon: ICON_PREFIX + '/UBER_DARK_V2.png', layerGroups: DEFAULT_LAYER_GROUPS }, { id: 'light', label: 'Light', url: STYLE_PREFIX + '/light', icon: ICON_PREFIX + '/UBER_LIGHT_V2.png', layerGroups: DEFAULT_LAYER_GROUPS }, { id: 'muted', label: 'Muted Light', url: STYLE_PREFIX + '/muted-light', icon: ICON_PREFIX + '/UBER_MUTED_LIGHT.png', layerGroups: DEFAULT_LAYER_GROUPS }, { id: 'muted_night', label: 'Muted Night', url: STYLE_PREFIX + '/muted-night', icon: ICON_PREFIX + '/UBER_MUTED_NIGHT.png', layerGroups: DEFAULT_LAYER_GROUPS }]; var GEOJSON_FIELDS = exports.GEOJSON_FIELDS = { geojson: ['_geojson', 'all_points', 'geojson'] }; var ICON_FIELDS = exports.ICON_FIELDS = { icon: ['icon'] }; var TRIP_POINT_FIELDS = exports.TRIP_POINT_FIELDS = [['lat', 'lng'], ['lat', 'lon'], ['latitude', 'longitude']]; var TRIP_ARC_FIELDS = exports.TRIP_ARC_FIELDS = { lat0: 'begintrip', lng0: 'begintrip', lat1: 'dropoff', lng1: 'dropoff' }; var SCALE_TYPES = exports.SCALE_TYPES = (0, _keymirror2.default)({ ordinal: null, quantile: null, quantize: null, linear: null, // for radius sqrt: null, // ordinal domain to linear range point: null }); var SCALE_FUNC = exports.SCALE_FUNC = { linear: require('d3-scale').scaleLinear, quantize: require('d3-scale').scaleQuantize, quantile: require('d3-scale').scaleQuantile, ordinal: require('d3-scale').scaleOrdinal, sqrt: require('d3-scale').scaleSqrt, point: require('d3-scale').scalePoint }; var ALL_FIELD_TYPES = exports.ALL_FIELD_TYPES = (0, _keymirror2.default)({ boolean: null, date: null, geojson: null, integer: null, real: null, string: null, timestamp: null, point: null }); var ORANGE = '248, 194, 28'; var PINK = '231, 189, 194'; var PURPLE = '160, 106, 206'; var BLUE = '140, 210, 205'; var BLUE2 = '106, 160, 206'; var BLUE3 = '0, 172, 237'; var GREEN = '106, 160, 56'; var RED = '237, 88, 106'; var FIELD_COLORS = exports.FIELD_COLORS = { default: RED }; var FILED_TYPE_DISPLAY = exports.FILED_TYPE_DISPLAY = (_FILED_TYPE_DISPLAY = {}, (0, _defineProperty3.default)(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.boolean, { label: 'bool', color: PINK }), (0, _defineProperty3.default)(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.date, { label: 'date', color: PURPLE }), (0, _defineProperty3.default)(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.geojson, { label: 'geo', color: BLUE2 }), (0, _defineProperty3.default)(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.integer, { label: 'int', color: ORANGE }), (0, _defineProperty3.default)(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.real, { label: 'float', color: ORANGE }), (0, _defineProperty3.default)(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.string, { label: 'string', color: BLUE }), (0, _defineProperty3.default)(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.timestamp, { label: 'time', color: GREEN }), (0, _defineProperty3.default)(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.point, { label: 'point', color: BLUE3 }), _FILED_TYPE_DISPLAY); var defaultFormat = exports.defaultFormat = function defaultFormat(d) { return d; }; var FIELD_DISPLAY_FORMAT = exports.FIELD_DISPLAY_FORMAT = (_FIELD_DISPLAY_FORMAT = {}, (0, _defineProperty3.default)(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.string, defaultFormat), (0, _defineProperty3.default)(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.timestamp, defaultFormat), (0, _defineProperty3.default)(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.integer, defaultFormat), (0, _defineProperty3.default)(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.boolean, function (d) { return String(d); }), (0, _defineProperty3.default)(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.date, defaultFormat), (0, _defineProperty3.default)(_FIELD_DISPLAY_FORMAT, ALL_FIELD_TYPES.geojson, defaultFormat), _FIELD_DISPLAY_FORMAT); var CHANNEL_SCALES = exports.CHANNEL_SCALES = (0, _keymirror2.default)({ color: null, radius: null, size: null, colorAggr: null, sizeAggr: null }); var AGGREGATION_TYPES = exports.AGGREGATION_TYPES = { // default count: 'count', // linear average: 'average', maximum: 'maximum', minimum: 'minimum', median: 'median', sum: 'sum', // ordinal mode: 'mode', countUnique: 'count unique' }; var linearFieldScaleFunctions = exports.linearFieldScaleFunctions = (_linearFieldScaleFunc = {}, (0, _defineProperty3.default)(_linearFieldScaleFunc, CHANNEL_SCALES.color, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), (0, _defineProperty3.default)(_linearFieldScaleFunc, CHANNEL_SCALES.radius, [SCALE_TYPES.sqrt]), (0, _defineProperty3.default)(_linearFieldScaleFunc, CHANNEL_SCALES.size, [SCALE_TYPES.linear]), _linearFieldScaleFunc); var linearFieldAggrScaleFunctions = exports.linearFieldAggrScaleFunctions = (_linearFieldAggrScale = {}, (0, _defineProperty3.default)(_linearFieldAggrScale, CHANNEL_SCALES.colorAggr, (_CHANNEL_SCALES$color = {}, (0, _defineProperty3.default)(_CHANNEL_SCALES$color, AGGREGATION_TYPES.average, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), (0, _defineProperty3.default)(_CHANNEL_SCALES$color, AGGREGATION_TYPES.maximum, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), (0, _defineProperty3.default)(_CHANNEL_SCALES$color, AGGREGATION_TYPES.minimum, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), (0, _defineProperty3.default)(_CHANNEL_SCALES$color, AGGREGATION_TYPES.median, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), (0, _defineProperty3.default)(_CHANNEL_SCALES$color, AGGREGATION_TYPES.sum, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), _CHANNEL_SCALES$color)), (0, _defineProperty3.default)(_linearFieldAggrScale, CHANNEL_SCALES.sizeAggr, (_CHANNEL_SCALES$sizeA = {}, (0, _defineProperty3.default)(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.average, [SCALE_TYPES.linear]), (0, _defineProperty3.default)(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.maximum, [SCALE_TYPES.linear]), (0, _defineProperty3.default)(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.minimum, [SCALE_TYPES.linear]), (0, _defineProperty3.default)(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.median, [SCALE_TYPES.linear]), (0, _defineProperty3.default)(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.sum, [SCALE_TYPES.linear]), _CHANNEL_SCALES$sizeA)), _linearFieldAggrScale); var ordinalFieldScaleFunctions = exports.ordinalFieldScaleFunctions = (_ordinalFieldScaleFun = {}, (0, _defineProperty3.default)(_ordinalFieldScaleFun, CHANNEL_SCALES.color, [SCALE_TYPES.ordinal]), (0, _defineProperty3.default)(_ordinalFieldScaleFun, CHANNEL_SCALES.radius, [SCALE_TYPES.point]), (0, _defineProperty3.default)(_ordinalFieldScaleFun, CHANNEL_SCALES.size, [SCALE_TYPES.point]), _ordinalFieldScaleFun); var ordinalFieldAggrScaleFunctions = exports.ordinalFieldAggrScaleFunctions = (_ordinalFieldAggrScal = {}, (0, _defineProperty3.default)(_ordinalFieldAggrScal, CHANNEL_SCALES.colorAggr, (_CHANNEL_SCALES$color2 = {}, (0, _defineProperty3.default)(_CHANNEL_SCALES$color2, AGGREGATION_TYPES.mode, [SCALE_TYPES.ordinal]), (0, _defineProperty3.default)(_CHANNEL_SCALES$color2, AGGREGATION_TYPES.countUnique, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), _CHANNEL_SCALES$color2)), (0, _defineProperty3.default)(_ordinalFieldAggrScal, CHANNEL_SCALES.sizeAggr, {}), _ordinalFieldAggrScal); var notSupportedScaleOpts = exports.notSupportedScaleOpts = (_notSupportedScaleOpt = {}, (0, _defineProperty3.default)(_notSupportedScaleOpt, CHANNEL_SCALES.color, []), (0, _defineProperty3.default)(_notSupportedScaleOpt, CHANNEL_SCALES.radius, []), (0, _defineProperty3.default)(_notSupportedScaleOpt, CHANNEL_SCALES.size, []), _notSupportedScaleOpt); var notSupportAggrOpts = exports.notSupportAggrOpts = (_notSupportAggrOpts = {}, (0, _defineProperty3.default)(_notSupportAggrOpts, CHANNEL_SCALES.colorAggr, {}), (0, _defineProperty3.default)(_notSupportAggrOpts, CHANNEL_SCALES.sizeAggr, {}), _notSupportAggrOpts); /** * Default aggregation are based on ocunt */ var DEFAULT_AGGREGATION = exports.DEFAULT_AGGREGATION = (_DEFAULT_AGGREGATION = {}, (0, _defineProperty3.default)(_DEFAULT_AGGREGATION, CHANNEL_SCALES.colorAggr, (0, _defineProperty3.default)({}, AGGREGATION_TYPES.count, [SCALE_TYPES.quantize, SCALE_TYPES.quantile])), (0, _defineProperty3.default)(_DEFAULT_AGGREGATION, CHANNEL_SCALES.sizeAggr, (0, _defineProperty3.default)({}, AGGREGATION_TYPES.count, [SCALE_TYPES.linear])), _DEFAULT_AGGREGATION); /** * Define what type of scale operation is allowed on each type of fields */ var FIELD_OPTS = exports.FIELD_OPTS = { string: { type: 'categorical', scale: (0, _extends4.default)({}, ordinalFieldScaleFunctions, ordinalFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, real: { type: 'numerical', scale: (0, _extends4.default)({}, linearFieldScaleFunctions, linearFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, timestamp: { type: 'time', scale: (0, _extends4.default)({}, linearFieldScaleFunctions, notSupportAggrOpts), format: { legend: function legend(d) { return d; } } }, integer: { type: 'numerical', scale: (0, _extends4.default)({}, linearFieldScaleFunctions, linearFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, boolean: { type: 'boolean', scale: (0, _extends4.default)({}, ordinalFieldScaleFunctions, ordinalFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, date: { scale: (0, _extends4.default)({}, ordinalFieldScaleFunctions, ordinalFieldAggrScaleFunctions), format: { legend: function legend(d) { return d; } } }, geojson: { type: 'geometry', scale: (0, _extends4.default)({}, notSupportedScaleOpts, notSupportAggrOpts), format: { legend: function legend(d) { return '...'; } } } }; var CHANNEL_SCALE_SUPPORTED_FIELDS = exports.CHANNEL_SCALE_SUPPORTED_FIELDS = Object.keys(CHANNEL_SCALES).reduce(function (accu, key) { return (0, _extends4.default)({}, accu, (0, _defineProperty3.default)({}, key, Object.keys(FIELD_OPTS).filter(function (ft) { return Object.keys(FIELD_OPTS[ft].scale[key]).length; }))); }, {}); // TODO: shan delete use of LAYER_TYPES var LAYER_TYPES = exports.LAYER_TYPES = (0, _keymirror2.default)({ point: null, arc: null, cluster: null, line: null, grid: null, geojson: null, icon: null, heatmap: null, hexagon: null }); var DEFAULT_LAYER_COLOR = exports.DEFAULT_LAYER_COLOR = { tripArc: '#9226C6', begintrip_lat: '#1E96BE', dropoff_lat: '#FF991F', request_lat: '#52A353' }; // let user pass in default tooltip fields var DEFAULT_TOOLTIP_FIELDS = exports.DEFAULT_TOOLTIP_FIELDS = []; var DEFAULT_LIGHT_SETTINGS = exports.DEFAULT_LIGHT_SETTINGS = { lightsPosition: [-122.45, 37.66, 8000, -122.0, 38.0, 8000], ambientRatio: 0.4, diffuseRatio: 0.6, specularRatio: 0.3, lightsStrength: [0.9, 0.0, 0.8, 0.0], numberOfLights: 2 }; var NO_VALUE_COLOR = exports.NO_VALUE_COLOR = [147, 147, 147]; var LAYER_BLENDINGS = exports.LAYER_BLENDINGS = { additive: { blendFunc: ['SRC_ALPHA', 'DST_ALPHA'], blendEquation: 'FUNC_ADD' }, normal: { // reference to // https://limnu.com/webgl-blending-youre-probably-wrong/ blendFunc: ['SRC_ALPHA', 'ONE_MINUS_SRC_ALPHA', 'ONE', 'ONE_MINUS_SRC_ALPHA'], blendEquation: ['FUNC_ADD', 'FUNC_ADD'] }, subtractive: { blendFunc: ['ONE', 'ONE_MINUS_DST_COLOR', 'SRC_ALPHA', 'DST_ALPHA'], blendEquation: ['FUNC_SUBTRACT', 'FUNC_ADD'] } }; var MAX_DEFAULT_TOOLTIPS = exports.MAX_DEFAULT_TOOLTIPS = 5; var RESOLUTIONS = exports.RESOLUTIONS = (0, _keymirror2.default)({ ONE_X: null, TWO_X: null }); var RATIOS = exports.RATIOS = (0, _keymirror2.default)({ SCREEN: null, FOUR_BY_THREE: null, SIXTEEN_BY_NINE: null }); var RATIO_OPTIONS = exports.RATIO_OPTIONS = [{ id: RATIOS.SCREEN, label: 'Original Screen', getSize: function getSize(screenW, screenH) { return { width: screenW, height: screenH }; } }, { id: RATIOS.FOUR_BY_THREE, label: '4:3', getSize: function getSize(screenW, screenH) { return { width: screenW, height: Math.round(screenW * 0.75) }; } }, { id: RATIOS.SIXTEEN_BY_NINE, label: '16:9', getSize: function getSize(screenW, screenH) { return { width: screenW, height: Math.round(screenW * 0.5625) }; } }]; var RESOLUTION_OPTIONS = exports.RESOLUTION_OPTIONS = [{ id: RESOLUTIONS.ONE_X, label: '1x', available: true, scale: 1, zoomOffset: Math.log2(1), getSize: function getSize(screenW, screenH) { return { width: screenW, height: screenH }; } }, { id: RESOLUTIONS.TWO_X, label: '2x', available: true, scale: 2, zoomOffset: Math.log2(2), getSize: function getSize(screenW, screenH) { return { width: screenW * 2, height: screenH * 2 }; } }]; var DEFAULT_EXPORT_IMAGE_NAME = exports.DEFAULT_EXPORT_IMAGE_NAME = 'kepler-gl.png'; var EXPORT_DATA_TYPE = exports.EXPORT_DATA_TYPE = (0, _keymirror2.default)({ CSV: null // SHAPEFILE: null, // JSON: null, // GEOJSON: null, // TOPOJSON: null }); var EXPORT_DATA_TYPE_OPTIONS = exports.EXPORT_DATA_TYPE_OPTIONS = [{ id: EXPORT_DATA_TYPE.CSV, label: 'csv', available: true // { // id: EXPORT_DATA_TYPE.SHAPEFILE, // label: 'shapefile', // available: false // }, // { // id: EXPORT_DATA_TYPE.JSON, // label: 'json', // available: false // }, // { // id: EXPORT_DATA_TYPE.GEOJSON, // label: 'geojson', // available: false // }, // { // id: EXPORT_DATA_TYPE.TOPOJSON, // label: 'topojson', // available: false // } }]; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5qcyJdLCJuYW1lcyI6WyJBQ1RJT05fUFJFRklYIiwiQ0xPVURGUk9OVCIsIlNUWUxFX1BSRUZJWCIsIklDT05fUFJFRklYIiwiTEFZRVJfQ09ORklHX0lEIiwiREFUQV9UQUJMRV9JRCIsIkRFTEVURV9EQVRBX0lEIiwiQUREX0RBVEFfSUQiLCJFWFBPUlRfSU1BR0VfSUQiLCJFWFBPUlRfREFUQV9JRCIsIkVYUE9SVF9DT05GSUdfSUQiLCJBRERfTUFQX1NUWUxFX0lEIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIkRJTUVOU0lPTlMiLCJzaWRlUGFuZWwiLCJ3aWR0aCIsIm1hcmdpbiIsInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCIsImhlYWRlckhlaWdodCIsIm1hcENvbnRyb2wiLCJwYWRkaW5nIiwiUEFORUxTIiwiaWQiLCJsYWJlbCIsImljb25Db21wb25lbnQiLCJMYXllcnMiLCJGaWx0ZXJGdW5uZWwiLCJDdXJzb3JDbGljayIsIlNldHRpbmdzIiwiUEFORUxTX0ZPT1RFUiIsImljb24iLCJERUZBVUxUX0xBWUVSX0dST1VQUyIsInNsdWciLCJmaWx0ZXIiLCJtYXRjaCIsImRlZmF1bHRWaXNpYmlsaXR5IiwiREVGQVVMVF9NQVBfU1RZTEVTIiwidXJsIiwibGF5ZXJHcm91cHMiLCJHRU9KU09OX0ZJRUxEUyIsImdlb2pzb24iLCJJQ09OX0ZJRUxEUyIsIlRSSVBfUE9JTlRfRklFTERTIiwiVFJJUF9BUkNfRklFTERTIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsIlNDQUxFX1RZUEVTIiwib3JkaW5hbCIsInF1YW50aWxlIiwicXVhbnRpemUiLCJsaW5lYXIiLCJzcXJ0IiwicG9pbnQiLCJTQ0FMRV9GVU5DIiwicmVxdWlyZSIsInNjYWxlTGluZWFyIiwic2NhbGVRdWFudGl6ZSIsInNjYWxlUXVhbnRpbGUiLCJzY2FsZU9yZGluYWwiLCJzY2FsZVNxcnQiLCJzY2FsZVBvaW50IiwiQUxMX0ZJRUxEX1RZUEVTIiwiYm9vbGVhbiIsImRhdGUiLCJpbnRlZ2VyIiwicmVhbCIsInN0cmluZyIsInRpbWVzdGFtcCIsIk9SQU5HRSIsIlBJTksiLCJQVVJQTEUiLCJCTFVFIiwiQkxVRTIiLCJCTFVFMyIsIkdSRUVOIiwiUkVEIiwiRklFTERfQ09MT1JTIiwiZGVmYXVsdCIsIkZJTEVEX1RZUEVfRElTUExBWSIsImNvbG9yIiwiZGVmYXVsdEZvcm1hdCIsImQiLCJGSUVMRF9ESVNQTEFZX0ZPUk1BVCIsIlN0cmluZyIsIkNIQU5ORUxfU0NBTEVTIiwicmFkaXVzIiwic2l6ZSIsImNvbG9yQWdnciIsInNpemVBZ2dyIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJjb3VudCIsImF2ZXJhZ2UiLCJtYXhpbXVtIiwibWluaW11bSIsIm1lZGlhbiIsInN1bSIsIm1vZGUiLCJjb3VudFVuaXF1ZSIsImxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnMiLCJsaW5lYXJGaWVsZEFnZ3JTY2FsZUZ1bmN0aW9ucyIsIm9yZGluYWxGaWVsZFNjYWxlRnVuY3Rpb25zIiwib3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwibm90U3VwcG9ydGVkU2NhbGVPcHRzIiwibm90U3VwcG9ydEFnZ3JPcHRzIiwiREVGQVVMVF9BR0dSRUdBVElPTiIsIkZJRUxEX09QVFMiLCJ0eXBlIiwic2NhbGUiLCJmb3JtYXQiLCJsZWdlbmQiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjdSIsImtleSIsImZ0IiwibGVuZ3RoIiwiTEFZRVJfVFlQRVMiLCJhcmMiLCJjbHVzdGVyIiwibGluZSIsImdyaWQiLCJoZWF0bWFwIiwiaGV4YWdvbiIsIkRFRkFVTFRfTEFZRVJfQ09MT1IiLCJ0cmlwQXJjIiwiYmVnaW50cmlwX2xhdCIsImRyb3BvZmZfbGF0IiwicmVxdWVzdF9sYXQiLCJERUZBVUxUX1RPT0xUSVBfRklFTERTIiwiREVGQVVMVF9MSUdIVF9TRVRUSU5HUyIsImxpZ2h0c1Bvc2l0aW9uIiwiYW1iaWVudFJhdGlvIiwiZGlmZnVzZVJhdGlvIiwic3BlY3VsYXJSYXRpbyIsImxpZ2h0c1N0cmVuZ3RoIiwibnVtYmVyT2ZMaWdodHMiLCJOT19WQUxVRV9DT0xPUiIsIkxBWUVSX0JMRU5ESU5HUyIsImFkZGl0aXZlIiwiYmxlbmRGdW5jIiwiYmxlbmRFcXVhdGlvbiIsIm5vcm1hbCIsInN1YnRyYWN0aXZlIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJSRVNPTFVUSU9OUyIsIk9ORV9YIiwiVFdPX1giLCJSQVRJT1MiLCJTQ1JFRU4iLCJGT1VSX0JZX1RIUkVFIiwiU0lYVEVFTl9CWV9OSU5FIiwiUkFUSU9fT1BUSU9OUyIsImdldFNpemUiLCJzY3JlZW5XIiwic2NyZWVuSCIsImhlaWdodCIsIk1hdGgiLCJyb3VuZCIsIlJFU09MVVRJT05fT1BUSU9OUyIsImF2YWlsYWJsZSIsInpvb21PZmZzZXQiLCJsb2cyIiwiREVGQVVMVF9FWFBPUlRfSU1BR0VfTkFNRSIsIkVYUE9SVF9EQVRBX1RZUEUiLCJDU1YiLCJFWFBPUlRfREFUQV9UWVBFX09QVElPTlMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztvUkFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQWlCQTs7OztBQWZPLElBQU1BLHdDQUFnQixjQUF0QjtBQUNBLElBQU1DLGtDQUFhLGlEQUFuQjtBQUNBLElBQU1DLHNDQUFrQkQsVUFBbEIsZ0JBQU47QUFDQSxJQUFNRSxvQ0FBaUJGLFVBQWpCLGFBQU47O0FBRVA7QUFDTyxJQUFNRyw0Q0FBa0IsWUFBeEI7QUFDQSxJQUFNQyx3Q0FBZ0IsV0FBdEI7QUFDQSxJQUFNQywwQ0FBaUIsWUFBdkI7QUFDQSxJQUFNQyxvQ0FBYyxTQUFwQjtBQUNBLElBQU1DLDRDQUFrQixhQUF4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V0FBdUI7QUFDOUJsSixhQUFPaUosT0FEdUI7QUFFOUJFLGNBQVFEO0FBRnNCLEtBQXZCO0FBQUE7QUFOd0IsQ0FBRCxFQVUvQjtBQUNEeEksTUFBSThILFlBQVlFLEtBRGY7QUFFRC9ILFNBQU8sSUFGTjtBQUdENEksYUFBVyxJQUhWO0FBSUR0RCxTQUFPLENBSk47QUFLRHVELGNBQVlKLEtBQUtLLElBQUwsQ0FBVSxDQUFWLENBTFg7QUFNRFQsV0FBUyxpQkFBQ0MsT0FBRCxFQUFVQyxPQUFWO0FBQUEsV0FBdUI7QUFDOUJsSixhQUFPaUosVUFBVSxDQURhO0FBRTlCRSxjQUFRRCxVQUFVO0FBRlksS0FBdkI7QUFBQTtBQU5SLENBVitCLENBQTNCOztBQXNCQSxJQUFNUSxnRUFBNEIsZUFBbEM7O0FBRUEsSUFBTUMsOENBQW1CLHlCQUFVO0FBQ3hDQyxPQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFMd0MsQ0FBVixDQUF6Qjs7QUFRQSxJQUFNQyw4REFBMkIsQ0FDdEM7QUFDRW5KLE1BQUlpSixpQkFBaUJDLEdBRHZCO0FBRUVqSixTQUFPLEtBRlQ7QUFHRTRJLGFBQVc7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeEJBLENBRHNDLENBQWpDIiwiZmlsZSI6ImRlZmF1bHQtc2V0dGluZ3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTggVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fUFJFRklYID0gJ0BAa2VwbGVyLmdsLyc7XG5leHBvcnQgY29uc3QgQ0xPVURGUk9OVCA9ICdodHRwczovL2QxYTNmNHNwYXp6cnA0LmNsb3VkZnJvbnQubmV0L2tlcGxlci5nbCc7XG5leHBvcnQgY29uc3QgU1RZTEVfUFJFRklYID0gYCR7Q0xPVURGUk9OVH0vbWFwLXN0eWxlc2A7XG5leHBvcnQgY29uc3QgSUNPTl9QUkVGSVggPSBgJHtDTE9VREZST05UfS9nZW9kdWRlYDtcblxuLy8gTW9kYWwgSWRzXG5leHBvcnQgY29uc3QgTEFZRVJfQ09ORklHX0lEID0gJ2NvcHlDb25maWcnO1xuZXhwb3J0IGNvbnN0IERBVEFfVEFCTEVfSUQgPSAnZGF0YVRhYmxlJztcbmV4cG9ydCBjb25zdCBERUxFVEVfREFUQV9JRCA9ICdkZWxldGVEYXRhJztcbmV4cG9ydCBjb25zdCBBRERfREFUQV9JRCA9ICdhZGREYXRhJztcbmV4cG9ydCBjb25zdCBFWFBPUlRfSU1BR0VfSUQgPSAnZXhwb3J0SW1hZ2UnO1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX0lEID0gJ2V4cG9ydERhdGEnO1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9DT05GSUdfSUQgPSAnZXhwb3J0Q29uZmlnJztcbmV4cG9ydCBjb25zdCBBRERfTUFQX1NUWUxFX0lEID0gJ2FkZE1hcFN0eWxlJztcblxuaW1wb3J0IHtcbiAgTGF5ZXJzLFxuICBGaWx0ZXJGdW5uZWwsXG4gIFNldHRpbmdzLFxuICBDdXJzb3JDbGlja1xufSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9pY29ucyc7XG5cbmV4cG9ydCBjb25zdCBLRVBMRVJfR0xfTkFNRSA9ICdrZXBsZXIuZ2wnO1xuZXhwb3J0IGNvbnN0IEtFUExFUl9HTF9WRVJTSU9OID0gJ3YxLjAnO1xuXG5leHBvcnQgY29uc3QgRElNRU5TSU9OUyA9IHtcbiAgc2lkZVBhbmVsOiB7XG4gICAgd2lkdGg6IDMwMCxcbiAgICBtYXJnaW46IHt0b3A6IDIwLCBsZWZ0OiAyMCwgYm90dG9tOiAzMCwgcmlnaHQ6IDIwfSxcbiAgICBoZWFkZXJIZWlnaHQ6IDk2XG4gIH0sXG4gIG1hcENvbnRyb2w6IHtcbiAgICB3aWR0aDogMjA0LFxuICAgIHBhZGRpbmc6IDEyXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBQQU5FTFMgPSBbXG4gIHtcbiAgICBpZDogJ2xheWVyJyxcbiAgICBsYWJlbDogJ0xheWVycycsXG4gICAgaWNvbkNvbXBvbmVudDogTGF5ZXJzXG4gIH0sXG4gIHtcbiAgICBpZDogJ2ZpbHRlcicsXG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBpY29uQ29tcG9uZW50OiBGaWx0ZXJGdW5uZWxcbiAgfSxcbiAge1xuICAgIGlkOiAnaW50ZXJhY3Rpb24nLFxuICAgIGxhYmVsOiAnSW50ZXJhY3Rpb25zJyxcbiAgICBpY29uQ29tcG9uZW50OiBDdXJzb3JDbGlja1xuICB9LFxuICB7XG4gICAgaWQ6ICdtYXAnLFxuICAgIGxhYmVsOiAnQmFzZSBtYXAnLFxuICAgIGljb25Db21wb25lbnQ6IFNldHRpbmdzXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBQQU5FTFNfRk9PVEVSID0gW1xuICB7XG4gICAgaWQ6IExBWUVSX0NPTkZJR19JRCxcbiAgICBsYWJlbDogJ0NvcHkgQ29uZmlnJyxcbiAgICBpY29uOiAnY2xpcGJvYXJkJ1xuICB9XG5dO1xuXG4vLyBNQVAgU1RZTEVTXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0dST1VQUyA9IFtcbiAge1xuICAgIHNsdWc6ICdsYWJlbCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PShsYWJlbHxwbGFjZS18cG9pLSkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWVcbiAgfSxcbiAge1xuICAgIHNsdWc6ICdyb2FkJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvKD89KHJvYWR8cmFpbHdheXx0dW5uZWx8c3RyZWV0fGJyaWRnZSkpKD8hLipsYWJlbCkvKSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogdHJ1ZVxuICB9LFxuICB7XG4gICAgc2x1ZzogJ2JvcmRlcicsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goL2JvcmRlcnxib3VuZGFyaWVzLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYnVpbGRpbmcnLFxuICAgIGZpbHRlcjogKHtpZH0pID0+IGlkLm1hdGNoKC9idWlsZGluZy8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnd2F0ZXInLFxuICAgIGZpbHRlcjogKHtpZH0pID0+IGlkLm1hdGNoKC8oPz0od2F0ZXJ8c3RyZWFtfGZlcnJ5KSkvKSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogdHJ1ZVxuICB9LFxuICB7XG4gICAgc2x1ZzogJ2xhbmQnLFxuICAgIGZpbHRlcjogKHtpZH0pID0+IGlkLm1hdGNoKC8oPz0ocGFya3N8bGFuZGNvdmVyfGluZHVzdHJpYWx8c2FuZHxoaWxsc2hhZGUpKS8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUF9TVFlMRVMgPSBbXG4gIHtcbiAgICBpZDogJ2RhcmsnLFxuICAgIGxhYmVsOiAnRGFyaycsXG4gICAgdXJsOiBgJHtTVFlMRV9QUkVGSVh9L2RhcmtgLFxuICAgIGljb246IGAke0lDT05fUFJFRklYfS9VQkVSX0RBUktfVjIucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFNcbiAgfSxcbiAge1xuICAgIGlkOiAnbGlnaHQnLFxuICAgIGxhYmVsOiAnTGlnaHQnLFxuICAgIHVybDogYCR7U1RZTEVfUFJFRklYfS9saWdodGAsXG4gICAgaWNvbjogYCR7SUNPTl9QUkVGSVh9L1VCRVJfTElHSFRfVjIucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFNcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTGlnaHQnLFxuICAgIHVybDogYCR7U1RZTEVfUFJFRklYfS9tdXRlZC1saWdodGAsXG4gICAgaWNvbjogYCR7SUNPTl9QUkVGSVh9L1VCRVJfTVVURURfTElHSFQucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFNcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWRfbmlnaHQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTmlnaHQnLFxuICAgIHVybDogYCR7U1RZTEVfUFJFRklYfS9tdXRlZC1uaWdodGAsXG4gICAgaWNvbjogYCR7SUNPTl9QUkVGSVh9L1VCRVJfTVVURURfTklHSFQucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFNcbiAgfVxuXTtcblxuZXhwb3J0IGNvbnN0IEdFT0pTT05fRklFTERTID0ge1xuICBnZW9qc29uOiBbJ19nZW9qc29uJywgJ2FsbF9wb2ludHMnLCAnZ2VvanNvbiddXG59O1xuXG5leHBvcnQgY29uc3QgSUNPTl9GSUVMRFMgPSB7XG4gIGljb246IFsnaWNvbiddXG59O1xuXG5leHBvcnQgY29uc3QgVFJJUF9QT0lOVF9GSUVMRFMgPSBbXG4gIFsnbGF0JywgJ2xuZyddLFxuICBbJ2xhdCcsICdsb24nXSxcbiAgWydsYXRpdHVkZScsICdsb25naXR1ZGUnXVxuXTtcblxuZXhwb3J0IGNvbnN0IFRSSVBfQVJDX0ZJRUxEUyA9IHtcbiAgbGF0MDogJ2JlZ2ludHJpcCcsXG4gIGxuZzA6ICdiZWdpbnRyaXAnLFxuICBsYXQxOiAnZHJvcG9mZicsXG4gIGxuZzE6ICdkcm9wb2ZmJ1xufTtcblxuZXhwb3J0IGNvbnN0IFNDQUxFX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgb3JkaW5hbDogbnVsbCxcbiAgcXVhbnRpbGU6IG51bGwsXG4gIHF1YW50aXplOiBudWxsLFxuICBsaW5lYXI6IG51bGwsXG5cbiAgLy8gZm9yIHJhZGl1c1xuICBzcXJ0OiBudWxsLFxuICAvLyBvcmRpbmFsIGRvbWFpbiB0byBsaW5lYXIgcmFuZ2VcbiAgcG9pbnQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgU0NBTEVfRlVOQyA9IHtcbiAgbGluZWFyOiByZXF1aXJlKCdkMy1zY2FsZScpLnNjYWxlTGluZWFyLFxuICBxdWFudGl6ZTogcmVxdWlyZSgnZDMtc2NhbGUnKS5zY2FsZVF1YW50aXplLFxuICBxdWFudGlsZTogcmVxdWlyZSgnZDMtc2NhbGUnKS5zY2FsZVF1YW50aWxlLFxuICBvcmRpbmFsOiByZXF1aXJlKCdkMy1zY2FsZScpLnNjYWxlT3JkaW5hbCxcbiAgc3FydDogcmVxdWlyZSgnZDMtc2NhbGUnKS5zY2FsZVNxcnQsXG4gIHBvaW50OiByZXF1aXJlKCdkMy1zY2FsZScpLnNjYWxlUG9pbnRcbn07XG5cbmV4cG9ydCBjb25zdCBBTExfRklFTERfVFlQRVMgPSBrZXlNaXJyb3Ioe1xuICBib29sZWFuOiBudWxsLFxuICBkYXRlOiBudWxsLFxuICBnZW9qc29uOiBudWxsLFxuICBpbnRlZ2VyOiBudWxsLFxuICByZWFsOiBudWxsLFxuICBzdHJpbmc6IG51bGwsXG4gIHRpbWVzdGFtcDogbnVsbCxcbiAgcG9pbnQ6IG51bGxcbn0pO1xuXG5jb25zdCBPUkFOR0UgPSAnMjQ4LCAxOTQsIDI4JztcbmNvbnN0IFBJTksgPSAnMjMxLCAxODksIDE5NCc7XG5jb25zdCBQVVJQTEUgPSAnMTYwLCAxMDYsIDIwNic7XG5jb25zdCBCTFVFID0gJzE0MCwgMjEwLCAyMDUnO1xuY29uc3QgQkxVRTIgPSAnMTA2LCAxNjAsIDIwNic7XG5jb25zdCBCTFVFMyA9ICcwLCAxNzIsIDIzNyc7XG5jb25zdCBHUkVFTiA9ICcxMDYsIDE2MCwgNTYnO1xuY29uc3QgUkVEID0gJzIzNywgODgsIDEwNic7XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9DT0xPUlMgPSB7XG4gIGRlZmF1bHQ6IFJFRFxufTtcblxuZXhwb3J0IGNvbnN0IEZJTEVEX1RZUEVfRElTUExBWSA9IHtcbiAgW0FMTF9GSUVMRF9UWVBFUy5ib29sZWFuXToge1xuICAgIGxhYmVsOiAnYm9vbCcsXG4gICAgY29sb3I6IFBJTktcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXToge1xuICAgIGxhYmVsOiAnZGF0ZScsXG4gICAgY29sb3I6IFBVUlBMRVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmdlb2pzb25dOiB7XG4gICAgbGFiZWw6ICdnZW8nLFxuICAgIGNvbG9yOiBCTFVFMlxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiB7XG4gICAgbGFiZWw6ICdpbnQnLFxuICAgIGNvbG9yOiBPUkFOR0VcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIGxhYmVsOiAnZmxvYXQnLFxuICAgIGNvbG9yOiBPUkFOR0VcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiB7XG4gICAgbGFiZWw6ICdzdHJpbmcnLFxuICAgIGNvbG9yOiBCTFVFXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXToge1xuICAgIGxhYmVsOiAndGltZScsXG4gICAgY29sb3I6IEdSRUVOXG4gIH0sXG4gIC8vIGZpZWxkIHBhaXJzXG4gIFtBTExfRklFTERfVFlQRVMucG9pbnRdOiB7XG4gICAgbGFiZWw6ICdwb2ludCcsXG4gICAgY29sb3I6IEJMVUUzXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Rm9ybWF0ID0gZCA9PiBkO1xuXG5leHBvcnQgY29uc3QgRklFTERfRElTUExBWV9GT1JNQVQgPSB7XG4gIFtBTExfRklFTERfVFlQRVMuc3RyaW5nXTogZGVmYXVsdEZvcm1hdCxcbiAgW0FMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXBdOiBkZWZhdWx0Rm9ybWF0LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiBkZWZhdWx0Rm9ybWF0LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiBkID0+IFN0cmluZyhkKSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXTogZGVmYXVsdEZvcm1hdCxcbiAgW0FMTF9GSUVMRF9UWVBFUy5nZW9qc29uXTogZGVmYXVsdEZvcm1hdFxufTtcblxuZXhwb3J0IGNvbnN0IENIQU5ORUxfU0NBTEVTID0ga2V5TWlycm9yKHtcbiAgY29sb3I6IG51bGwsXG4gIHJhZGl1czogbnVsbCxcbiAgc2l6ZTogbnVsbCxcbiAgY29sb3JBZ2dyOiBudWxsLFxuICBzaXplQWdncjogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBBR0dSRUdBVElPTl9UWVBFUyA9IHtcbiAgLy8gZGVmYXVsdFxuICBjb3VudDogJ2NvdW50JyxcbiAgLy8gbGluZWFyXG4gIGF2ZXJhZ2U6ICdhdmVyYWdlJyxcbiAgbWF4aW11bTogJ21heGltdW0nLFxuICBtaW5pbXVtOiAnbWluaW11bScsXG4gIG1lZGlhbjogJ21lZGlhbicsXG4gIHN1bTogJ3N1bScsXG4gIC8vIG9yZGluYWxcbiAgbW9kZTogJ21vZGUnLFxuICBjb3VudFVuaXF1ZTogJ2NvdW50IHVuaXF1ZSdcbn07XG5cbmV4cG9ydCBjb25zdCBsaW5lYXJGaWVsZFNjYWxlRnVuY3Rpb25zID0ge1xuICBbQ0hBTk5FTF9TQ0FMRVMuY29sb3JdOiBbU0NBTEVfVFlQRVMucXVhbnRpemUsIFNDQUxFX1RZUEVTLnF1YW50aWxlXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnJhZGl1c106IFtTQ0FMRV9UWVBFUy5zcXJ0XSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbU0NBTEVfVFlQRVMubGluZWFyXVxufTtcblxuZXhwb3J0IGNvbnN0IGxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zID0ge1xuICBbQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyXToge1xuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZV0sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1heGltdW1dOiBbU0NBTEVfVFlQRVMucXVhbnRpemUsIFNDQUxFX1RZUEVTLnF1YW50aWxlXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMubWluaW11bV06IFtTQ0FMRV9UWVBFUy5xdWFudGl6ZSwgU0NBTEVfVFlQRVMucXVhbnRpbGVdLFxuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5tZWRpYW5dOiBbU0NBTEVfVFlQRVMucXVhbnRpemUsIFNDQUxFX1RZUEVTLnF1YW50aWxlXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuc3VtXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZV1cbiAgfSxcblxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2VdOiBbU0NBTEVfVFlQRVMubGluZWFyXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMubWF4aW11bV06IFtTQ0FMRV9UWVBFUy5saW5lYXJdLFxuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtXTogW1NDQUxFX1RZUEVTLmxpbmVhcl0sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1lZGlhbl06IFtTQ0FMRV9UWVBFUy5saW5lYXJdLFxuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5zdW1dOiBbU0NBTEVfVFlQRVMubGluZWFyXVxuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgb3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMgPSB7XG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvcl06IFtTQ0FMRV9UWVBFUy5vcmRpbmFsXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnJhZGl1c106IFtTQ0FMRV9UWVBFUy5wb2ludF0sXG4gIFtDSEFOTkVMX1NDQUxFUy5zaXplXTogW1NDQUxFX1RZUEVTLnBvaW50XVxufTtcblxuZXhwb3J0IGNvbnN0IG9yZGluYWxGaWVsZEFnZ3JTY2FsZUZ1bmN0aW9ucyA9IHtcbiAgLy8gW0NIQU5ORUxfU0NBTEVTLmNvbG9yQWdncl06IFtTQ0FMRV9UWVBFUy5vcmRpbmFsLCBTQ0FMRV9UWVBFUy5saW5lYXJdLFxuICBbQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyXToge1xuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5tb2RlXTogW1NDQUxFX1RZUEVTLm9yZGluYWxdLFxuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5jb3VudFVuaXF1ZV06IFtTQ0FMRV9UWVBFUy5xdWFudGl6ZSwgU0NBTEVfVFlQRVMucXVhbnRpbGVdXG4gIH0sXG5cbiAgLy8gQ3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCB5ZXRcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVBZ2dyXToge31cbn07XG5cbmV4cG9ydCBjb25zdCBub3RTdXBwb3J0ZWRTY2FsZU9wdHMgPSB7XG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvcl06IFtdLFxuICBbQ0hBTk5FTF9TQ0FMRVMucmFkaXVzXTogW10sXG4gIFtDSEFOTkVMX1NDQUxFUy5zaXplXTogW11cbn07XG5cbmV4cG9ydCBjb25zdCAgbm90U3VwcG9ydEFnZ3JPcHRzID0ge1xuICBbQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyXToge30sXG4gIFtDSEFOTkVMX1NDQUxFUy5zaXplQWdncl06IHt9XG59O1xuXG4vKipcbiAqIERlZmF1bHQgYWdncmVnYXRpb24gYXJlIGJhc2VkIG9uIG9jdW50XG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FHR1JFR0FUSU9OID0ge1xuICBbQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyXToge1xuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5jb3VudF06IFtTQ0FMRV9UWVBFUy5xdWFudGl6ZSwgU0NBTEVfVFlQRVMucXVhbnRpbGVdXG4gIH0sXG4gIFtDSEFOTkVMX1NDQUxFUy5zaXplQWdncl06IHtcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuY291bnRdOiBbU0NBTEVfVFlQRVMubGluZWFyXVxuICB9XG59O1xuXG4vKipcbiAqIERlZmluZSB3aGF0IHR5cGUgb2Ygc2NhbGUgb3BlcmF0aW9uIGlzIGFsbG93ZWQgb24gZWFjaCB0eXBlIG9mIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgRklFTERfT1BUUyA9IHtcbiAgc3RyaW5nOiB7XG4gICAgdHlwZTogJ2NhdGVnb3JpY2FsJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ub3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5vcmRpbmFsRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGRcbiAgICB9XG4gIH0sXG4gIHJlYWw6IHtcbiAgICB0eXBlOiAnbnVtZXJpY2FsJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLmxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogZCA9PiBkXG4gICAgfVxuICB9LFxuICB0aW1lc3RhbXA6IHtcbiAgICB0eXBlOiAndGltZScsXG4gICAgc2NhbGU6IHtcbiAgICAgIC4uLmxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5ub3RTdXBwb3J0QWdnck9wdHNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGRcbiAgICB9XG4gIH0sXG4gIGludGVnZXI6IHtcbiAgICB0eXBlOiAnbnVtZXJpY2FsJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLmxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogZCA9PiBkXG4gICAgfVxuICB9LFxuICBib29sZWFuOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5vcmRpbmF