kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
352 lines (341 loc) • 30.5 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LAYER_TEXT_CONFIGS = exports.LAYER_VIS_CONFIGS = exports.PROPERTY_GROUPS = undefined;
var _keymirror = require('keymirror');
var _keymirror2 = _interopRequireDefault(_keymirror);
var _defaultSettings = require('../constants/default-settings');
var _colorRanges = require('../constants/color-ranges');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var PROPERTY_GROUPS = exports.PROPERTY_GROUPS = (0, _keymirror2.default)({
color: null,
stroke: null,
radius: null,
height: null,
// for heatmap aggregation
cell: null,
precision: null
}); // 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 LAYER_VIS_CONFIGS = exports.LAYER_VIS_CONFIGS = {
thickness: {
type: 'number',
defaultValue: 2,
label: 'Stroke Width',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.stroke,
property: 'thickness'
},
strokeWidthRange: {
type: 'number',
defaultValue: [0, 10],
label: 'Stroke Width Range',
isRanged: true,
range: [0, 200],
step: 0.1,
group: PROPERTY_GROUPS.stroke,
property: 'sizeRange'
},
// radius is actually radiusScale in deck.gl
radius: {
type: 'number',
defaultValue: 10,
label: 'Radius',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.radius,
property: 'radius'
},
fixedRadius: {
defaultValue: false,
type: 'boolean',
label: 'Fixed Radius to meter',
description: 'Map radius to absolute radius in meters, e.g. 5 to 5 meters',
group: PROPERTY_GROUPS.radius,
property: 'fixedRadius'
},
radiusRange: {
type: 'number',
defaultValue: [0, 50],
isRanged: true,
range: [0, 500],
step: 0.1,
label: 'Radius Range',
group: PROPERTY_GROUPS.radius,
property: 'radiusRange'
},
clusterRadius: {
type: 'number',
label: 'Cluster Size (m)',
defaultValue: 40,
isRanged: false,
range: [1, 500],
step: 0.1,
group: PROPERTY_GROUPS.radius,
property: 'clusterRadius'
},
clusterRadiusRange: {
type: 'number',
label: 'Radius Range (m)',
defaultValue: [1, 40],
isRanged: true,
range: [1, 150],
step: 0.1,
group: PROPERTY_GROUPS.radius,
property: 'radiusRange'
},
opacity: {
type: 'number',
defaultValue: 0.8,
label: 'Opacity',
isRanged: false,
range: [0, 1],
step: 0.01,
group: PROPERTY_GROUPS.color,
property: 'opacity'
},
coverage: {
type: 'number',
defaultValue: 1,
label: 'Coverage',
isRanged: false,
range: [0, 1],
step: 0.01,
group: PROPERTY_GROUPS.cell,
property: 'coverage'
},
outline: {
type: 'boolean',
defaultValue: false,
label: 'Draw outline',
group: PROPERTY_GROUPS.display,
property: 'outline'
},
colorRange: {
type: 'color-range-select',
defaultValue: _colorRanges.DefaultColorRange,
label: 'Color range',
group: PROPERTY_GROUPS.color,
property: 'colorRange'
},
targetColor: {
type: 'color-select',
label: 'Target Color',
defaultValue: null,
group: PROPERTY_GROUPS.color,
property: 'targetColor'
},
aggregation: {
type: 'select',
defaultValue: _defaultSettings.AGGREGATION_TYPES.average,
label: 'Color Aggregation',
// aggregation options are based on color field types
options: Object.keys(_defaultSettings.AGGREGATION_TYPES),
group: PROPERTY_GROUPS.color,
property: 'colorAggregation',
condition: function condition(config) {
return config.colorField;
}
},
sizeAggregation: {
type: 'select',
defaultValue: _defaultSettings.AGGREGATION_TYPES.average,
label: 'Height Aggregation',
// aggregation options are based on color field types
options: Object.keys(_defaultSettings.AGGREGATION_TYPES),
group: PROPERTY_GROUPS.height,
property: 'sizeAggregation',
condition: function condition(config) {
return config.sizeField;
}
},
percentile: {
type: 'number',
defaultValue: [0, 100],
label: function label(config) {
return 'Filter by ' + (config.colorField ? config.visConfig.colorAggregation + ' ' + config.colorField.name : 'count') + ' percentile';
},
isRanged: true,
range: [0, 100],
step: 0.01,
group: PROPERTY_GROUPS.color,
property: 'percentile',
// percentile filter only makes sense with linear aggregation
condition: function condition(config) {
return config.colorScale !== 'ordinal';
}
},
elevationPercentile: {
type: 'number',
defaultValue: [0, 100],
label: function label(config) {
return 'Filter by ' + (config.sizeField ? config.visConfig.sizeAggregation + ' ' + config.sizeField.name : 'count') + ' percentile';
},
isRanged: true,
range: [0, 100],
step: 0.01,
group: PROPERTY_GROUPS.height,
property: 'elevationPercentile',
// percentile filter only makes sense with linear aggregation
condition: function condition(config) {
return config.visConfig.enable3d && (config.colorField || config.sizeField);
}
},
resolution: {
type: 'number',
defaultValue: 8,
label: 'Resolution range',
isRanged: false,
range: [0, 13],
step: 1,
group: PROPERTY_GROUPS.cell,
property: 'resolution'
},
worldUnitSize: {
type: 'number',
defaultValue: 1,
label: 'World Unit Size',
isRanged: false,
range: [0.01, 500],
step: 0.01,
group: PROPERTY_GROUPS.cell,
property: 'worldUnitSize'
},
elevationScale: {
type: 'number',
defaultValue: 5,
label: 'Elevation Scale',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.height,
property: 'elevationScale'
},
elevationRange: {
type: 'number',
defaultValue: [0, 500],
label: 'Height Scale',
isRanged: true,
range: [0, 1000],
step: 0.01,
group: PROPERTY_GROUPS.height,
property: 'sizeRange'
},
coverageRange: {
type: 'number',
defaultValue: [0, 1],
label: 'Coverage Range',
isRanged: true,
range: [0, 1],
step: 0.01,
group: PROPERTY_GROUPS.radius,
property: 'coverageRange'
},
'hi-precision': {
type: 'boolean',
defaultValue: false,
label: 'High Precision Rendering',
group: PROPERTY_GROUPS.precision,
property: 'hi-precision',
description: 'High precision will result in slower performance'
},
enable3d: {
type: 'boolean',
defaultValue: false,
label: 'Enable Height',
group: PROPERTY_GROUPS.height,
property: 'enable3d',
description: 'Click button at top right of the map to switch to 3d view'
},
stroked: {
type: 'boolean',
label: 'Polygon Stroke',
defaultValue: true,
group: PROPERTY_GROUPS.display,
property: 'stroked'
},
filled: {
type: 'boolean',
label: 'Polygon Fill',
defaultValue: false,
group: PROPERTY_GROUPS.display,
property: 'filled'
},
extruded: {
type: 'boolean',
defaultValue: false,
label: 'Enable Polygon Height',
group: PROPERTY_GROUPS.display,
property: 'extruded'
},
wireframe: {
type: 'boolean',
defaultValue: false,
label: 'Show Wireframe',
group: PROPERTY_GROUPS.display,
property: 'wireframe'
},
// used for heatmap
weight: {
type: 'number',
defaultValue: 1,
label: 'Weight Intensity',
isRanged: false,
range: [0.01, 500],
step: 0.01,
group: PROPERTY_GROUPS.cell,
property: 'weight',
condition: function condition(config) {
return config.weightField;
}
},
heatmapRadius: {
type: 'number',
defaultValue: 20,
label: 'Radius',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.cell,
property: 'radius'
}
};
var LAYER_TEXT_CONFIGS = exports.LAYER_TEXT_CONFIGS = {
fontSize: {
type: 'number',
range: [1, 100],
value0: 1,
step: 1,
isRanged: false,
label: 'Font size',
showInput: true
},
textAnchor: {
type: 'select',
options: ['start', 'middle', 'end'],
multiSelect: false,
searchable: false
}
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvbGF5ZXItZmFjdG9yeS5qcyJdLCJuYW1lcyI6WyJQUk9QRVJUWV9HUk9VUFMiLCJjb2xvciIsInN0cm9rZSIsInJhZGl1cyIsImhlaWdodCIsImNlbGwiLCJwcmVjaXNpb24iLCJMQVlFUl9WSVNfQ09ORklHUyIsInRoaWNrbmVzcyIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJsYWJlbCIsImlzUmFuZ2VkIiwicmFuZ2UiLCJzdGVwIiwiZ3JvdXAiLCJwcm9wZXJ0eSIsInN0cm9rZVdpZHRoUmFuZ2UiLCJmaXhlZFJhZGl1cyIsImRlc2NyaXB0aW9uIiwicmFkaXVzUmFuZ2UiLCJjbHVzdGVyUmFkaXVzIiwiY2x1c3RlclJhZGl1c1JhbmdlIiwib3BhY2l0eSIsImNvdmVyYWdlIiwib3V0bGluZSIsImRpc3BsYXkiLCJjb2xvclJhbmdlIiwiRGVmYXVsdENvbG9yUmFuZ2UiLCJ0YXJnZXRDb2xvciIsImFnZ3JlZ2F0aW9uIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJhdmVyYWdlIiwib3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJjb25kaXRpb24iLCJjb25maWciLCJjb2xvckZpZWxkIiwic2l6ZUFnZ3JlZ2F0aW9uIiwic2l6ZUZpZWxkIiwicGVyY2VudGlsZSIsInZpc0NvbmZpZyIsImNvbG9yQWdncmVnYXRpb24iLCJuYW1lIiwiY29sb3JTY2FsZSIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJlbmFibGUzZCIsInJlc29sdXRpb24iLCJ3b3JsZFVuaXRTaXplIiwiZWxldmF0aW9uU2NhbGUiLCJlbGV2YXRpb25SYW5nZSIsImNvdmVyYWdlUmFuZ2UiLCJzdHJva2VkIiwiZmlsbGVkIiwiZXh0cnVkZWQiLCJ3aXJlZnJhbWUiLCJ3ZWlnaHQiLCJ3ZWlnaHRGaWVsZCIsImhlYXRtYXBSYWRpdXMiLCJMQVlFUl9URVhUX0NPTkZJR1MiLCJmb250U2l6ZSIsInZhbHVlMCIsInNob3dJbnB1dCIsInRleHRBbmNob3IiLCJtdWx0aVNl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QUE7QUFUTCxHQXJRdUI7QUFnUi9CQyxpQkFBZTtBQUNibEQsVUFBTSxRQURPO0FBRWJDLGtCQUFjLEVBRkQ7QUFHYkMsV0FBTyxRQUhNO0FBSWJDLGNBQVUsS0FKRztBQUtiQyxXQUFPLENBQUMsQ0FBRCxFQUFJLEdBQUosQ0FMTTtBQU1iQyxVQUFNLEdBTk87QUFPYkMsV0FBT2YsZ0JBQWdCSyxJQVBWO0FBUWJXLGNBQVU7QUFSRztBQWhSZ0IsQ0FBMUI7O0FBNFJBLElBQU00QyxrREFBcUI7QUFDaENDLFlBQVU7QUFDUnBELFVBQU0sUUFERTtBQUVSSSxXQUFPLENBQUMsQ0FBRCxFQUFJLEdBQUosQ0FGQztBQUdSaUQsWUFBUSxDQUhBO0FBSVJoRCxVQUFNLENBSkU7QUFLUkYsY0FBVSxLQUxGO0FBTVJELFdBQU8sV0FOQztBQU9Sb0QsZUFBVztBQVBILEdBRHNCO0FBVWhDQyxjQUFZO0FBQ1Z2RCxVQUFNLFFBREk7QUFFVndCLGFBQVMsQ0FBQyxPQUFELEVBQVUsUUFBVixFQUFvQixLQUFwQixDQUZDO0FBR1ZnQyxpQkFBYSxLQUhIO0FBSVZDLGdCQUFZO0FBSkY7QUFWb0IsQ0FBM0IiLCJmaWxlIjoibGF5ZXItZmFjdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOCBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJztcblxuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtEZWZhdWx0Q29sb3JSYW5nZX0gZnJvbSAnY29uc3RhbnRzL2NvbG9yLXJhbmdlcyc7XG5cbmV4cG9ydCBjb25zdCBQUk9QRVJUWV9HUk9VUFMgPSBrZXlNaXJyb3Ioe1xuICBjb2xvcjogbnVsbCxcbiAgc3Ryb2tlOiBudWxsLFxuICByYWRpdXM6IG51bGwsXG4gIGhlaWdodDogbnVsbCxcblxuICAvLyBmb3IgaGVhdG1hcCBhZ2dyZWdhdGlvblxuICBjZWxsOiBudWxsLFxuICBwcmVjaXNpb246IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgTEFZRVJfVklTX0NPTkZJR1MgPSB7XG4gIHRoaWNrbmVzczoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMixcbiAgICBsYWJlbDogJ1N0cm9rZSBXaWR0aCcsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5zdHJva2UsXG4gICAgcHJvcGVydHk6ICd0aGlja25lc3MnXG4gIH0sXG4gIHN0cm9rZVdpZHRoUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxMF0sXG4gICAgbGFiZWw6ICdTdHJva2UgV2lkdGggUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMjAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5zdHJva2UsXG4gICAgcHJvcGVydHk6ICdzaXplUmFuZ2UnXG4gIH0sXG4gIC8vIHJhZGl1cyBpcyBhY3R1YWxseSByYWRpdXNTY2FsZSBpbiBkZWNrLmdsXG4gIHJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMTAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAncmFkaXVzJ1xuICB9LFxuICBmaXhlZFJhZGl1czoge1xuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnRml4ZWQgUmFkaXVzIHRvIG1ldGVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ01hcCByYWRpdXMgdG8gYWJzb2x1dGUgcmFkaXVzIGluIG1ldGVycywgZS5nLiA1IHRvIDUgbWV0ZXJzJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2ZpeGVkUmFkaXVzJ1xuICB9LFxuICByYWRpdXNSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDUwXSxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDUwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGxhYmVsOiAnUmFkaXVzIFJhbmdlJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBjbHVzdGVyUmFkaXVzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdDbHVzdGVyIFNpemUgKG0pJyxcbiAgICBkZWZhdWx0VmFsdWU6IDQwLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzEsIDUwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAnY2x1c3RlclJhZGl1cydcbiAgfSxcbiAgY2x1c3RlclJhZGl1c1JhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdSYWRpdXMgUmFuZ2UgKG0pJyxcbiAgICBkZWZhdWx0VmFsdWU6IFsxLCA0MF0sXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFsxLCAxNTBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBvcGFjaXR5OiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAwLjgsXG4gICAgbGFiZWw6ICdPcGFjaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdvcGFjaXR5J1xuICB9LFxuICBjb3ZlcmFnZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICBsYWJlbDogJ0NvdmVyYWdlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlJ1xuICB9LFxuICBvdXRsaW5lOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdEcmF3IG91dGxpbmUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ291dGxpbmUnXG4gIH0sXG4gIGNvbG9yUmFuZ2U6IHtcbiAgICB0eXBlOiAnY29sb3ItcmFuZ2Utc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IERlZmF1bHRDb2xvclJhbmdlLFxuICAgIGxhYmVsOiAnQ29sb3IgcmFuZ2UnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdjb2xvclJhbmdlJ1xuICB9LFxuICB0YXJnZXRDb2xvcjoge1xuICAgIHR5cGU6ICdjb2xvci1zZWxlY3QnLFxuICAgIGxhYmVsOiAnVGFyZ2V0IENvbG9yJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ3RhcmdldENvbG9yJ1xuICB9LFxuICBhZ2dyZWdhdGlvbjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBsYWJlbDogJ0NvbG9yIEFnZ3JlZ2F0aW9uJyxcbiAgICAvLyBhZ2dyZWdhdGlvbiBvcHRpb25zIGFyZSBiYXNlZCBvbiBjb2xvciBmaWVsZCB0eXBlc1xuICAgIG9wdGlvbnM6IE9iamVjdC5rZXlzKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnY29sb3JBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLmNvbG9yRmllbGRcbiAgfSxcbiAgc2l6ZUFnZ3JlZ2F0aW9uOiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlLFxuICAgIGxhYmVsOiAnSGVpZ2h0IEFnZ3JlZ2F0aW9uJyxcbiAgICAvLyBhZ2dyZWdhdGlvbiBvcHRpb25zIGFyZSBiYXNlZCBvbiBjb2xvciBmaWVsZCB0eXBlc1xuICAgIG9wdGlvbnM6IE9iamVjdC5rZXlzKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ3NpemVBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnNpemVGaWVsZFxuICB9LFxuICBwZXJjZW50aWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTAwXSxcbiAgICBsYWJlbDogY29uZmlnID0+XG4gICAgICBgRmlsdGVyIGJ5ICR7XG4gICAgICAgIGNvbmZpZy5jb2xvckZpZWxkXG4gICAgICAgICAgPyBgJHtjb25maWcudmlzQ29uZmlnLmNvbG9yQWdncmVnYXRpb259ICR7Y29uZmlnLmNvbG9yRmllbGQubmFtZX1gXG4gICAgICAgICAgOiAnY291bnQnXG4gICAgICB9IHBlcmNlbnRpbGVgLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdwZXJjZW50aWxlJyxcblxuICAgIC8vIHBlcmNlbnRpbGUgZmlsdGVyIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBsaW5lYXIgYWdncmVnYXRpb25cbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcuY29sb3JTY2FsZSAhPT0gJ29yZGluYWwnXG4gIH0sXG4gIGVsZXZhdGlvblBlcmNlbnRpbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxMDBdLFxuICAgIGxhYmVsOiBjb25maWcgPT5cbiAgICAgIGBGaWx0ZXIgYnkgJHtcbiAgICAgICAgY29uZmlnLnNpemVGaWVsZFxuICAgICAgICAgID8gYCR7Y29uZmlnLnZpc0NvbmZpZy5zaXplQWdncmVnYXRpb259ICR7Y29uZmlnLnNpemVGaWVsZC5uYW1lfWBcbiAgICAgICAgICA6ICdjb3VudCdcbiAgICAgIH0gcGVyY2VudGlsZWAsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbGV2YXRpb25QZXJjZW50aWxlJyxcbiAgICAvLyBwZXJjZW50aWxlIGZpbHRlciBvbmx5IG1ha2VzIHNlbnNlIHdpdGggbGluZWFyIGFnZ3JlZ2F0aW9uXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCAmJiAoY29uZmlnLmNvbG9yRmllbGQgfHwgY29uZmlnLnNpemVGaWVsZClcbiAgfSxcbiAgcmVzb2x1dGlvbjoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogOCxcbiAgICBsYWJlbDogJ1Jlc29sdXRpb24gcmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEzXSxcbiAgICBzdGVwOiAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3Jlc29sdXRpb24nXG4gIH0sXG4gIHdvcmxkVW5pdFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXb3JsZCBVbml0IFNpemUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAuMDEsIDUwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNlbGwsXG4gICAgcHJvcGVydHk6ICd3b3JsZFVuaXRTaXplJ1xuICB9LFxuICBlbGV2YXRpb25TY2FsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogNSxcbiAgICBsYWJlbDogJ0VsZXZhdGlvbiBTY2FsZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbGV2YXRpb25TY2FsZSdcbiAgfSxcbiAgZWxldmF0aW9uUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCA1MDBdLFxuICAgIGxhYmVsOiAnSGVpZ2h0IFNjYWxlJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdzaXplUmFuZ2UnXG4gIH0sXG4gIGNvdmVyYWdlUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxXSxcbiAgICBsYWJlbDogJ0NvdmVyYWdlIFJhbmdlJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDFdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdjb3ZlcmFnZVJhbmdlJ1xuICB9LFxuICAnaGktcHJlY2lzaW9uJzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnSGlnaCBQcmVjaXNpb24gUmVuZGVyaW5nJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnByZWNpc2lvbixcbiAgICBwcm9wZXJ0eTogJ2hpLXByZWNpc2lvbicsXG4gICAgZGVzY3JpcHRpb246ICdIaWdoIHByZWNpc2lvbiB3aWxsIHJlc3VsdCBpbiBzbG93ZXIgcGVyZm9ybWFuY2UnXG4gIH0sXG4gIGVuYWJsZTNkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdFbmFibGUgSGVpZ2h0JyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ2VuYWJsZTNkJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NsaWNrIGJ1dHRvbiBhdCB0b3AgcmlnaHQgb2YgdGhlIG1hcCB0byBzd2l0Y2ggdG8gM2QgdmlldydcbiAgfSxcbiAgc3Ryb2tlZDoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBsYWJlbDogJ1BvbHlnb24gU3Ryb2tlJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlZCdcbiAgfSxcbiAgZmlsbGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnUG9seWdvbiBGaWxsJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ2ZpbGxlZCdcbiAgfSxcbiAgZXh0cnVkZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ0VuYWJsZSBQb2x5Z29uIEhlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnZXh0cnVkZWQnXG4gIH0sXG4gIHdpcmVmcmFtZToge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnU2hvdyBXaXJlZnJhbWUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ3dpcmVmcmFtZSdcbiAgfSxcbiAgLy8gdXNlZCBmb3IgaGVhdG1hcFxuICB3ZWlnaHQ6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXZWlnaHQgSW50ZW5zaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLjAxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd2VpZ2h0JyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcud2VpZ2h0RmllbGRcbiAgfSxcbiAgaGVhdG1hcFJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1cydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1RFWFRfQ09ORklHUyA9IHtcbiAgZm9udFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzEsIDEwMF0sXG4gICAgdmFsdWUwOiAxLFxuICAgIHN0ZXA6IDEsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIGxhYmVsOiAnRm9udCBzaXplJyxcbiAgICBzaG93SW5wdXQ6IHRydWVcbiAgfSxcbiAgdGV4dEFuY2hvcjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG9wdGlvbnM6IFsnc3RhcnQnLCAnbWlkZGxlJywgJ2VuZCddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9XG59O1xuIl19