kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
442 lines (435 loc) • 43.9 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PROPERTY_GROUPS = exports.LAYER_VIS_CONFIGS = exports.LAYER_TEXT_CONFIGS = exports.DEFAULT_TEXT_LABEL = exports.DEFAULT_LAYER_OPACITY = exports.DEFAULT_CUSTOM_PALETTE = exports.DEFAULT_COLOR_UI = exports.DEFAULT_COLOR_RANGE = void 0;
var _keymirror = _interopRequireDefault(require("keymirror"));
var _defaultSettings = require("../constants/default-settings");
var _colorRanges = require("../constants/color-ranges");
// Copyright (c) 2023 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 PROPERTY_GROUPS = exports.PROPERTY_GROUPS = (0, _keymirror["default"])({
color: null,
stroke: null,
radius: null,
height: null,
// for heatmap aggregation
cell: null,
precision: null
});
var DEFAULT_LAYER_OPACITY = exports.DEFAULT_LAYER_OPACITY = 0.8;
var DEFAULT_TEXT_LABEL = exports.DEFAULT_TEXT_LABEL = {
field: null,
color: [255, 255, 255],
size: 18,
offset: [0, 0],
anchor: 'start',
alignment: 'center'
};
var DEFAULT_COLOR_RANGE = exports.DEFAULT_COLOR_RANGE = _colorRanges.DefaultColorRange;
var DEFAULT_CUSTOM_PALETTE = exports.DEFAULT_CUSTOM_PALETTE = {
name: 'Custom Palette',
type: 'custom',
category: 'Custom',
colors: []
};
var DEFAULT_COLOR_UI = exports.DEFAULT_COLOR_UI = {
// customPalette in edit
customPalette: DEFAULT_CUSTOM_PALETTE,
// show color sketcher modal
showSketcher: false,
// show color range selection panel
showDropdown: false,
// color range selector config
colorRangeConfig: {
type: 'all',
steps: 6,
reversed: false,
custom: false
}
};
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'
},
trailLength: {
type: 'number',
defaultValue: 180,
label: 'Stroke Width',
isRanged: false,
range: [1, 1000],
step: 1,
group: PROPERTY_GROUPS.stroke,
property: 'trailLength'
},
// 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: DEFAULT_LAYER_OPACITY,
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'
},
// used in point layer
outline: {
type: 'boolean',
defaultValue: false,
label: 'Outline',
group: PROPERTY_GROUPS.display,
property: 'outline'
},
colorRange: {
type: 'color-range-select',
defaultValue: _colorRanges.DefaultColorRange,
label: 'Color range',
group: PROPERTY_GROUPS.color,
property: 'colorRange'
},
strokeColorRange: {
type: 'color-range-select',
defaultValue: _colorRanges.DefaultColorRange,
label: 'Stroke Color range',
group: PROPERTY_GROUPS.color,
property: 'strokeColorRange'
},
targetColor: {
type: 'color-select',
label: 'Target Color',
defaultValue: null,
group: PROPERTY_GROUPS.color,
property: 'targetColor'
},
strokeColor: {
type: 'color-select',
label: 'Stroke Color',
defaultValue: null,
group: PROPERTY_GROUPS.color,
property: 'strokeColor'
},
aggregation: {
type: 'select',
defaultValue: _defaultSettings.AGGREGATION_TYPES.count,
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;
}
},
heightAggregation: {
type: 'select',
defaultValue: _defaultSettings.AGGREGATION_TYPES.average,
label: 'Height Aggregation',
// aggregation options are based on
options: Object.keys(_defaultSettings.AGGREGATION_TYPES),
group: PROPERTY_GROUPS.color,
property: 'heightAggregation',
condition: function condition(config) {
return config.heightField;
}
},
percentile: {
type: 'number',
defaultValue: [0, 100],
label: function label(config) {
return "Filter by ".concat(config.colorField ? "".concat(config.visConfig.colorAggregation, " ").concat(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 ".concat(config.sizeField ? "".concat(config.visConfig.sizeAggregation, " ").concat(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'
},
sizeScale: {
type: 'number',
defaultValue: 10,
label: 'Size Scale',
isRanged: false,
range: [1, 1000],
step: 1,
// group: PROPERTY_GROUPS.cell,
property: 'sizeScale'
},
angle: {
type: 'number',
defaultValue: 0,
// label: 'Size Scale',
isRanged: false,
range: [0, 360],
step: 1 // group: PROPERTY_GROUPS.cell,
// property: 'sizeScale'
},
worldUnitSize: {
type: 'number',
defaultValue: 1,
label: 'World Unit Size',
isRanged: false,
range: [0, 500],
step: 0.0001,
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 is deprecated by deck.gl
'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: '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: 'Stroke',
defaultValue: true,
group: PROPERTY_GROUPS.display,
property: 'stroked'
},
filled: {
type: 'boolean',
label: 'Fill',
defaultValue: true,
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
},
textAlignment: {
type: 'select',
options: ['top', 'center', 'bottom'],
multiSelect: false,
searchable: false
}
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvbGF5ZXItZmFjdG9yeS5qcyJdLCJuYW1lcyI6WyJQUk9QRVJUWV9HUk9VUFMiLCJjb2xvciIsInN0cm9rZSIsInJhZGl1cyIsImhlaWdodCIsImNlbGwiLCJwcmVjaXNpb24iLCJERUZBVUxUX0xBWUVSX09QQUNJVFkiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJmaWVsZCIsInNpemUiLCJvZmZzZXQiLCJhbmNob3IiLCJhbGlnbm1lbnQiLCJERUZBVUxUX0NPTE9SX1JBTkdFIiwiRGVmYXVsdENvbG9yUmFuZ2UiLCJERUZBVUxUX0NVU1RPTV9QQUxFVFRFIiwibmFtZSIsInR5cGUiLCJjYXRlZ29yeSIsImNvbG9ycyIsIkRFRkFVTFRfQ09MT1JfVUkiLCJjdXN0b21QYWxldHRlIiwic2hvd1NrZXRjaGVyIiwic2hvd0Ryb3Bkb3duIiwiY29sb3JSYW5nZUNvbmZpZyIsInN0ZXBzIiwicmV2ZXJzZWQiLCJjdXN0b20iLCJMQVlFUl9WSVNfQ09ORklHUyIsInRoaWNrbmVzcyIsImRlZmF1bHRWYWx1ZSIsImxhYmVsIiwiaXNSYW5nZWQiLCJyYW5nZSIsInN0ZXAiLCJncm91cCIsInByb3BlcnR5Iiwic3Ryb2tlV2lkdGhSYW5nZSIsInRyYWlsTGVuZ3RoIiwiZml4ZWRSYWRpdXMiLCJkZXNjcmlwdGlvbiIsInJhZGl1c1JhbmdlIiwiY2x1c3RlclJhZGl1cyIsImNsdXN0ZXJSYWRpdXNSYW5nZSIsIm9wYWNpdHkiLCJjb3ZlcmFnZSIsIm91dGxpbmUiLCJkaXNwbGF5IiwiY29sb3JSYW5nZSIsInN0cm9rZUNvbG9yUmFuZ2UiLCJ0YXJnZXRDb2xvciIsInN0cm9rZUNvbG9yIiwiYWdncmVnYXRpb24iLCJBR0dSRUdBVElPTl9UWVBFUyIsImNvdW50Iiwib3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJjb25kaXRpb24iLCJjb25maWciLCJjb2xvckZpZWxkIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiYXZlcmFnZSIsInNpemVGaWVsZCIsImhlaWdodEFnZ3JlZ2F0aW9uIiwiaGVpZ2h0RmllbGQiLCJwZXJjZW50aWxlIiwidmlzQ29uZmlnIiwiY29sb3JBZ2dyZWdhdGlvbiIsImNvbG9yU2NhbGUiLCJlbGV2YXRpb25QZXJjZW50aWxlIiwiZW5hYmxlM2QiLCJyZXNvbHV0aW9uIiwic2l6ZVNjYWxlIiwiYW5nbGUiLCJ3b3JsZFVuaXRTaXplIiwiZWxldmF0aW9uU2NhbGUiLCJlbGV2YXRpb25SYW5nZSIsImNvdmVyYWdlUmFuZ2UiLCJzdHJva2VkIiwiZmlsbGVkIiwiZXh0cnVkZWQiLCJ3aXJlZnJhbWUiLCJ3ZWlnaHQiLCJ3ZWlnaHRGaWVsZCIsImhlYXRtYXBSYWRpdXMiLCJMQVlFUl9URVhUX0NPTkZJR1MiLCJmb250U2l6ZSIsInZhbHVlMCIsInNob3dJbnB1dCIsInRleHRBbmNob3IiLCJtdWx0aVNlbGVjdCIsInNlYXJjaGFibGUiLCJ0ZXh0QWxpZ25tZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFvQkE7O0FBRUE7O0FBQ0E7O0FBdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT08sSUFBTUEsZUFBZSw2QkFBRywyQkFBVTtBQUN2Q0MsRUFBQUEsS0FBSyxFQUFFLElBRGdDO0FBRXZDQyxFQUFBQSxNQUFNLEVBQUUsSUFGK0I7QUFHdkNDLEVBQUFBLE1BQU0sRUFBRSxJQUgrQjtBQUl2Q0MsRUFBQUEsTUFBTSxFQUFFLElBSitCO0FBTXZDO0FBQ0FDLEVBQUFBLElBQUksRUFBRSxJQVBpQztBQVF2Q0MsRUFBQUEsU0FBUyxFQUFFO0FBUjRCLENBQVYsQ0FBeEI7QUFXQSxJQUFNQyxxQkFBcUIsbUNBQUcsR0FBOUI7QUFFQSxJQUFNQyxrQkFBa0IsZ0NBQUc7QUFDaENDLEVBQUFBLEtBQUssRUFBRSxJQUR5QjtBQUVoQ1IsRUFBQUEsS0FBSyxFQUFFLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxH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QUFVLEVBQUU7QUFKQztBQWhCaUIsQ0FBM0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7RGVmYXVsdENvbG9yUmFuZ2V9IGZyb20gJ2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuXG5leHBvcnQgY29uc3QgUFJPUEVSVFlfR1JPVVBTID0ga2V5TWlycm9yKHtcbiAgY29sb3I6IG51bGwsXG4gIHN0cm9rZTogbnVsbCxcbiAgcmFkaXVzOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG5cbiAgLy8gZm9yIGhlYXRtYXAgYWdncmVnYXRpb25cbiAgY2VsbDogbnVsbCxcbiAgcHJlY2lzaW9uOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfT1BBQ0lUWSA9IDAuODtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVYVF9MQUJFTCA9IHtcbiAgZmllbGQ6IG51bGwsXG4gIGNvbG9yOiBbMjU1LCAyNTUsIDI1NV0sXG4gIHNpemU6IDE4LFxuICBvZmZzZXQ6IFswLCAwXSxcbiAgYW5jaG9yOiAnc3RhcnQnLFxuICBhbGlnbm1lbnQ6ICdjZW50ZXInXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT0xPUl9SQU5HRSA9IERlZmF1bHRDb2xvclJhbmdlO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DVVNUT01fUEFMRVRURSA9IHtcbiAgbmFtZTogJ0N1c3RvbSBQYWxldHRlJyxcbiAgdHlwZTogJ2N1c3RvbScsXG4gIGNhdGVnb3J5OiAnQ3VzdG9tJyxcbiAgY29sb3JzOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfVUkgPSB7XG4gIC8vIGN1c3RvbVBhbGV0dGUgaW4gZWRpdFxuICBjdXN0b21QYWxldHRlOiBERUZBVUxUX0NVU1RPTV9QQUxFVFRFLFxuICAvLyBzaG93IGNvbG9yIHNrZXRjaGVyIG1vZGFsXG4gIHNob3dTa2V0Y2hlcjogZmFsc2UsXG4gIC8vIHNob3cgY29sb3IgcmFuZ2Ugc2VsZWN0aW9uIHBhbmVsXG4gIHNob3dEcm9wZG93bjogZmFsc2UsXG4gIC8vIGNvbG9yIHJhbmdlIHNlbGVjdG9yIGNvbmZpZ1xuICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgdHlwZTogJ2FsbCcsXG4gICAgc3RlcHM6IDYsXG4gICAgcmV2ZXJzZWQ6IGZhbHNlLFxuICAgIGN1c3RvbTogZmFsc2VcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1ZJU19DT05GSUdTID0ge1xuICB0aGlja25lc3M6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDIsXG4gICAgbGFiZWw6ICdTdHJva2UgV2lkdGgnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAndGhpY2tuZXNzJ1xuICB9LFxuICBzdHJva2VXaWR0aFJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTBdLFxuICAgIGxhYmVsOiAnU3Ryb2tlIFdpZHRoIFJhbmdlJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDIwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAnc2l6ZVJhbmdlJ1xuICB9LFxuICB0cmFpbExlbmd0aDoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMTgwLFxuICAgIGxhYmVsOiAnU3Ryb2tlIFdpZHRoJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFsxLCAxMDAwXSxcbiAgICBzdGVwOiAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAndHJhaWxMZW5ndGgnXG4gIH0sXG4gIC8vIHJhZGl1cyBpcyBhY3R1YWxseSByYWRpdXNTY2FsZSBpbiBkZWNrLmdsXG4gIHJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMTAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAncmFkaXVzJ1xuICB9LFxuICBmaXhlZFJhZGl1czoge1xuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnRml4ZWQgUmFkaXVzIHRvIG1ldGVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ01hcCByYWRpdXMgdG8gYWJzb2x1dGUgcmFkaXVzIGluIG1ldGVycywgZS5nLiA1IHRvIDUgbWV0ZXJzJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2ZpeGVkUmFkaXVzJ1xuICB9LFxuICByYWRpdXNSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDUwXSxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDUwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGxhYmVsOiAnUmFkaXVzIFJhbmdlJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBjbHVzdGVyUmFkaXVzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdDbHVzdGVyIFNpemUgKG0pJyxcbiAgICBkZWZhdWx0VmFsdWU6IDQwLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzEsIDUwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAnY2x1c3RlclJhZGl1cydcbiAgfSxcbiAgY2x1c3RlclJhZGl1c1JhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdSYWRpdXMgUmFuZ2UgKG0pJyxcbiAgICBkZWZhdWx0VmFsdWU6IFsxLCA0MF0sXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFsxLCAxNTBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBvcGFjaXR5OiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xBWUVSX09QQUNJVFksXG4gICAgbGFiZWw6ICdPcGFjaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdvcGFjaXR5J1xuICB9LFxuICBjb3ZlcmFnZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICBsYWJlbDogJ0NvdmVyYWdlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlJ1xuICB9LFxuICAvLyB1c2VkIGluIHBvaW50IGxheWVyXG4gIG91dGxpbmU6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ091dGxpbmUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ291dGxpbmUnXG4gIH0sXG4gIGNvbG9yUmFuZ2U6IHtcbiAgICB0eXBlOiAnY29sb3ItcmFuZ2Utc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IERlZmF1bHRDb2xvclJhbmdlLFxuICAgIGxhYmVsOiAnQ29sb3IgcmFuZ2UnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdjb2xvclJhbmdlJ1xuICB9LFxuICBzdHJva2VDb2xvclJhbmdlOiB7XG4gICAgdHlwZTogJ2NvbG9yLXJhbmdlLXNlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBEZWZhdWx0Q29sb3JSYW5nZSxcbiAgICBsYWJlbDogJ1N0cm9rZSBDb2xvciByYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZUNvbG9yUmFuZ2UnXG4gIH0sXG4gIHRhcmdldENvbG9yOiB7XG4gICAgdHlwZTogJ2NvbG9yLXNlbGVjdCcsXG4gICAgbGFiZWw6ICdUYXJnZXQgQ29sb3InLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAndGFyZ2V0Q29sb3InXG4gIH0sXG4gIHN0cm9rZUNvbG9yOiB7XG4gICAgdHlwZTogJ2NvbG9yLXNlbGVjdCcsXG4gICAgbGFiZWw6ICdTdHJva2UgQ29sb3InLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlQ29sb3InXG4gIH0sXG4gIGFnZ3JlZ2F0aW9uOiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBBR0dSRUdBVElPTl9UWVBFUy5jb3VudCxcbiAgICBsYWJlbDogJ0NvbG9yIEFnZ3JlZ2F0aW9uJyxcbiAgICAvLyBhZ2dyZWdhdGlvbiBvcHRpb25zIGFyZSBiYXNlZCBvbiBjb2xvciBmaWVsZCB0eXBlc1xuICAgIG9wdGlvbnM6IE9iamVjdC5rZXlzKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnY29sb3JBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLmNvbG9yRmllbGRcbiAgfSxcbiAgc2l6ZUFnZ3JlZ2F0aW9uOiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlLFxuICAgIGxhYmVsOiAnSGVpZ2h0IEFnZ3JlZ2F0aW9uJyxcbiAgICAvLyBhZ2dyZWdhdGlvbiBvcHRpb25zIGFyZSBiYXNlZCBvbiBjb2xvciBmaWVsZCB0eXBlc1xuICAgIG9wdGlvbnM6IE9iamVjdC5rZXlzKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ3NpemVBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnNpemVGaWVsZFxuICB9LFxuICBoZWlnaHRBZ2dyZWdhdGlvbjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBsYWJlbDogJ0hlaWdodCBBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb25cbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ2hlaWdodEFnZ3JlZ2F0aW9uJyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcuaGVpZ2h0RmllbGRcbiAgfSxcbiAgcGVyY2VudGlsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDEwMF0sXG4gICAgbGFiZWw6IGNvbmZpZyA9PlxuICAgICAgYEZpbHRlciBieSAke1xuICAgICAgICBjb25maWcuY29sb3JGaWVsZFxuICAgICAgICAgID8gYCR7Y29uZmlnLnZpc0NvbmZpZy5jb2xvckFnZ3JlZ2F0aW9ufSAke2NvbmZpZy5jb2xvckZpZWxkLm5hbWV9YFxuICAgICAgICAgIDogJ2NvdW50J1xuICAgICAgfSBwZXJjZW50aWxlYCxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAncGVyY2VudGlsZScsXG5cbiAgICAvLyBwZXJjZW50aWxlIGZpbHRlciBvbmx5IG1ha2VzIHNlbnNlIHdpdGggbGluZWFyIGFnZ3JlZ2F0aW9uXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLmNvbG9yU2NhbGUgIT09ICdvcmRpbmFsJ1xuICB9LFxuICBlbGV2YXRpb25QZXJjZW50aWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTAwXSxcbiAgICBsYWJlbDogY29uZmlnID0+XG4gICAgICBgRmlsdGVyIGJ5ICR7XG4gICAgICAgIGNvbmZpZy5zaXplRmllbGRcbiAgICAgICAgICA/IGAke2NvbmZpZy52aXNDb25maWcuc2l6ZUFnZ3JlZ2F0aW9ufSAke2NvbmZpZy5zaXplRmllbGQubmFtZX1gXG4gICAgICAgICAgOiAnY291bnQnXG4gICAgICB9IHBlcmNlbnRpbGVgLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZWxldmF0aW9uUGVyY2VudGlsZScsXG4gICAgLy8gcGVyY2VudGlsZSBmaWx0ZXIgb25seSBtYWtlcyBzZW5zZSB3aXRoIGxpbmVhciBhZ2dyZWdhdGlvblxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+XG4gICAgICBjb25maWcudmlzQ29uZmlnLmVuYWJsZTNkICYmIChjb25maWcuY29sb3JGaWVsZCB8fCBjb25maWcuc2l6ZUZpZWxkKVxuICB9LFxuICByZXNvbHV0aW9uOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiA4LFxuICAgIGxhYmVsOiAnUmVzb2x1dGlvbiByYW5nZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTNdLFxuICAgIHN0ZXA6IDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAncmVzb2x1dGlvbidcbiAgfSxcbiAgc2l6ZVNjYWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAxMCxcbiAgICBsYWJlbDogJ1NpemUgU2NhbGUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzEsIDEwMDBdLFxuICAgIHN0ZXA6IDEsXG4gICAgLy8gZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnc2l6ZVNjYWxlJ1xuICB9LFxuICBhbmdsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAvLyBsYWJlbDogJ1NpemUgU2NhbGUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDM2MF0sXG4gICAgc3RlcDogMVxuICAgIC8vIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICAvLyBwcm9wZXJ0eTogJ3NpemVTY2FsZSdcbiAgfSxcbiAgd29ybGRVbml0U2l6ZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICBsYWJlbDogJ1dvcmxkIFVuaXQgU2l6ZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgNTAwXSxcbiAgICBzdGVwOiAwLjAwMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd29ybGRVbml0U2l6ZSdcbiAgfSxcbiAgZWxldmF0aW9uU2NhbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDUsXG4gICAgbGFiZWw6ICdFbGV2YXRpb24gU2NhbGUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZWxldmF0aW9uU2NhbGUnXG4gIH0sXG4gIGVsZXZhdGlvblJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgNTAwXSxcbiAgICBsYWJlbDogJ0hlaWdodCBTY2FsZScsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnc2l6ZVJhbmdlJ1xuICB9LFxuICBjb3ZlcmFnZVJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMV0sXG4gICAgbGFiZWw6ICdDb3ZlcmFnZSBSYW5nZScsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAnY292ZXJhZ2VSYW5nZSdcbiAgfSxcbiAgLy8gaGkgcHJlY2lzaW9uIGlzIGRlcHJlY2F0ZWQgYnkgZGVjay5nbFxuICAnaGktcHJlY2lzaW9uJzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnSGlnaCBQcmVjaXNpb24gUmVuZGVyaW5nJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnByZWNpc2lvbixcbiAgICBwcm9wZXJ0eTogJ2hpLXByZWNpc2lvbicsXG4gICAgZGVzY3JpcHRpb246ICdIaWdoIHByZWNpc2lvbiB3aWxsIHJlc3VsdCBpbiBzbG93ZXIgcGVyZm9ybWFuY2UnXG4gIH0sXG4gIGVuYWJsZTNkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdIZWlnaHQnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZW5hYmxlM2QnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2xpY2sgYnV0dG9uIGF0IHRvcCByaWdodCBvZiB0aGUgbWFwIHRvIHN3aXRjaCB0byAzZCB2aWV3J1xuICB9LFxuICBzdHJva2VkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnU3Ryb2tlJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlZCdcbiAgfSxcbiAgZmlsbGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnRmlsbCcsXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ2ZpbGxlZCdcbiAgfSxcbiAgZXh0cnVkZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ0VuYWJsZSBQb2x5Z29uIEhlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnZXh0cnVkZWQnXG4gIH0sXG4gIHdpcmVmcmFtZToge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnU2hvdyBXaXJlZnJhbWUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ3dpcmVmcmFtZSdcbiAgfSxcbiAgLy8gdXNlZCBmb3IgaGVhdG1hcFxuICB3ZWlnaHQ6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXZWlnaHQgSW50ZW5zaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLjAxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd2VpZ2h0JyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcud2VpZ2h0RmllbGRcbiAgfSxcbiAgaGVhdG1hcFJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1cydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1RFWFRfQ09ORklHUyA9IHtcbiAgZm9udFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzEsIDEwMF0sXG4gICAgdmFsdWUwOiAxLFxuICAgIHN0ZXA6IDEsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIGxhYmVsOiAnRm9udCBzaXplJyxcbiAgICBzaG93SW5wdXQ6IHRydWVcbiAgfSxcbiAgdGV4dEFuY2hvcjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG9wdGlvbnM6IFsnc3RhcnQnLCAnbWlkZGxlJywgJ2VuZCddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9LFxuICB0ZXh0QWxpZ25tZW50OiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgb3B0aW9uczogWyd0b3AnLCAnY2VudGVyJywgJ2JvdHRvbSddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9XG59O1xuIl19