UNPKG

@kepler.gl/constants

Version:

kepler.gl constants used by kepler.gl components, actions and reducers

605 lines (603 loc) 60.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.UNKNOWN_COLOR_KEY = exports.PROPERTY_GROUPS = exports.LAYER_VIS_CONFIGS = exports.LAYER_TYPES = exports.LAYER_TEXT_CONFIGS = exports.EDITOR_AVAILABLE_LAYERS = exports.DEFAULT_TEXT_LABEL = exports.DEFAULT_LAYER_OPACITY = exports.DEFAULT_LAYER_LABEL = exports.DEFAULT_HIGHLIGHT_COLOR = exports.DEFAULT_CUSTOM_PALETTE = exports.DEFAULT_COLOR_UI = exports.DEFAULT_COLOR_RANGE = void 0; var _keymirror = _interopRequireDefault(require("keymirror")); var _defaultSettings = require("./default-settings"); var _colorPalettes = require("./color-palettes"); // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var PROPERTY_GROUPS = exports.PROPERTY_GROUPS = (0, _keymirror["default"])({ color: null, stroke: null, radius: null, height: null, angle: null, scenegraph: null, // for heatmap aggregation cell: null, precision: null, display: null, interaction: null }); var DEFAULT_LAYER_OPACITY = exports.DEFAULT_LAYER_OPACITY = 0.8; var DEFAULT_HIGHLIGHT_COLOR = exports.DEFAULT_HIGHLIGHT_COLOR = [252, 242, 26, 255]; var DEFAULT_LAYER_LABEL = exports.DEFAULT_LAYER_LABEL = 'new layer'; var DEFAULT_TEXT_LABEL = exports.DEFAULT_TEXT_LABEL = { field: null, color: [255, 255, 255], size: 18, weight: 400, offset: [0, 0], anchor: 'start', alignment: 'center', outlineWidth: 0, outlineColor: [255, 0, 0, 255], background: false, backgroundColor: [0, 0, 200, 255] }; var DEFAULT_COLOR_PALETTE = _colorPalettes.KEPLER_COLOR_PALETTES.find(function (_ref) { var name = _ref.name; return name === _defaultSettings.DEFAULT_LAYER_COLOR_PALETTE; }); var DEFAULT_COLOR_RANGE = exports.DEFAULT_COLOR_RANGE = (0, _colorPalettes.colorPaletteToColorRange)(DEFAULT_COLOR_PALETTE, { reversed: false, steps: _defaultSettings.DEFAULT_LAYER_COLOR_PALETTE_STEPS }); var DEFAULT_CUSTOM_PALETTE = exports.DEFAULT_CUSTOM_PALETTE = { name: 'color.customPalette', type: 'custom', category: 'Custom', colors: [] }; var UNKNOWN_COLOR_KEY = exports.UNKNOWN_COLOR_KEY = '__unknownColor__'; 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, // show color chart showColorChart: false, // color range selector config colorRangeConfig: { type: 'all', steps: 6, reversed: false, colorBlindSafe: false, custom: false, customBreaks: false } }; var LAYER_VIS_CONFIGS = exports.LAYER_VIS_CONFIGS = { thickness: { type: 'number', defaultValue: 2, label: 'layerVisConfigs.strokeWidth', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.stroke, property: 'thickness', allowCustomValue: true }, strokeWidthRange: { type: 'number', defaultValue: [0, 10], label: 'layerVisConfigs.strokeWidthRange', isRanged: true, range: [0, 200], step: 0.1, group: PROPERTY_GROUPS.stroke, property: 'sizeRange', allowCustomValue: true }, trailLength: { type: 'number', defaultValue: 180, label: 'layerVisConfigs.strokeWidth', isRanged: false, range: [1, 1000], step: 1, group: PROPERTY_GROUPS.stroke, property: 'trailLength', allowCustomValue: true }, fadeTrail: { defaultValue: true, type: 'boolean', label: 'layerVisConfigs.fadeTrail', group: PROPERTY_GROUPS.stroke, property: 'fadeTrail' }, billboard: { defaultValue: false, type: 'boolean', label: 'layerVisConfigs.billboard', description: 'layerVisConfigs.billboardDescription', group: PROPERTY_GROUPS.display, property: 'billboard' }, // radius is actually radiusScale in deck.gl radius: { type: 'number', defaultValue: 10, label: 'layerVisConfigs.radius', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'radius', allowCustomValue: true }, fixedRadius: { defaultValue: false, type: 'boolean', label: 'layerVisConfigs.fixedRadius', description: 'layerVisConfigs.fixedRadiusDescription', group: PROPERTY_GROUPS.radius, property: 'fixedRadius' }, fixedHeight: { defaultValue: false, type: 'boolean', label: 'layerVisConfigs.fixedHeight', description: 'layerVisConfigs.fixedHeightDescription', group: PROPERTY_GROUPS.height, property: 'fixedHeight' }, radiusRange: { type: 'number', defaultValue: [0, 50], isRanged: true, range: [0, 500], step: 0.1, label: 'layerVisConfigs.radiusRange', group: PROPERTY_GROUPS.radius, property: 'radiusRange', allowCustomValue: true }, clusterRadius: { type: 'number', label: 'layerVisConfigs.clusterRadius', defaultValue: 40, isRanged: false, range: [1, 500], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'clusterRadius', allowCustomValue: true }, clusterRadiusRange: { type: 'number', label: 'layerVisConfigs.radiusRangePixels', defaultValue: [1, 40], isRanged: true, range: [1, 150], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'radiusRange', allowCustomValue: true }, opacity: { type: 'number', defaultValue: DEFAULT_LAYER_OPACITY, label: 'layerVisConfigs.opacity', isRanged: false, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.color, property: 'opacity', allowCustomValue: false }, coverage: { type: 'number', defaultValue: 1, label: 'layerVisConfigs.coverage', isRanged: false, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.cell, property: 'coverage', allowCustomValue: false }, // used in point layer outline: { type: 'boolean', defaultValue: false, label: 'layer.outline', group: PROPERTY_GROUPS.display, property: 'outline' }, colorRange: { type: 'color-range-select', defaultValue: DEFAULT_COLOR_RANGE, label: 'layerVisConfigs.colorRange', group: PROPERTY_GROUPS.color, property: 'colorRange' }, strokeColorRange: { type: 'color-range-select', defaultValue: DEFAULT_COLOR_RANGE, label: 'layerVisConfigs.strokeColorRange', group: PROPERTY_GROUPS.color, property: 'strokeColorRange' }, targetColor: { type: 'color-select', label: 'layerVisConfigs.targetColor', defaultValue: null, group: PROPERTY_GROUPS.color, property: 'targetColor' }, strokeColor: { type: 'color-select', label: 'layerVisConfigs.strokeColor', defaultValue: null, group: PROPERTY_GROUPS.color, property: 'strokeColor' }, colorAggregation: { type: 'select', defaultValue: _defaultSettings.AGGREGATION_TYPES.average, label: 'layerVisConfigs.colorAggregation', // 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 Boolean(config.colorField); } }, sizeAggregation: { type: 'select', defaultValue: _defaultSettings.AGGREGATION_TYPES.average, label: 'layerVisConfigs.heightAggregation', // 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 Boolean(config.sizeField); } }, 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'; }, allowCustomValue: false }, 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 Boolean(config.visConfig.enable3d && (config.colorField || config.sizeField)); }, allowCustomValue: false }, resolution: { type: 'number', defaultValue: 8, label: 'layerVisConfigs.resolution', isRanged: false, range: [0, 13], step: 1, group: PROPERTY_GROUPS.cell, property: 'resolution', allowCustomValue: true }, sizeScale: { type: 'number', defaultValue: 10, label: 'layerVisConfigs.sizeScale', isRanged: false, range: [1, 1000], step: 1, group: PROPERTY_GROUPS.stroke, property: 'sizeScale', allowCustomValue: true }, angle: { type: 'number', label: 'layerVisConfigs.angle', defaultValue: 0, isRanged: false, range: [0, 360], group: PROPERTY_GROUPS.angle, step: 1, property: 'angle', allowCustomValue: true }, worldUnitSize: { type: 'number', defaultValue: 1, label: 'layerVisConfigs.worldUnitSize', isRanged: false, range: [0, 500], step: 0.0001, group: PROPERTY_GROUPS.cell, property: 'worldUnitSize', allowCustomValue: true }, elevationScale: { type: 'number', defaultValue: 5, label: 'layerVisConfigs.elevationScale', isRanged: false, range: [0, 1000], step: 0.1, group: PROPERTY_GROUPS.height, property: 'elevationScale', allowCustomValue: true }, enableElevationZoomFactor: { type: 'boolean', defaultValue: true, label: 'layerVisConfigs.enableElevationZoomFactor', group: PROPERTY_GROUPS.height, property: 'enableElevationZoomFactor', description: 'layerVisConfigs.enableElevationZoomFactorDescription' }, elevationRange: { type: 'number', defaultValue: [0, 500], label: 'layerVisConfigs.heightScale', isRanged: true, range: [0, 1000], step: 0.01, group: PROPERTY_GROUPS.height, property: 'sizeRange', allowCustomValue: true }, heightRange: { type: 'number', defaultValue: [0, 500], label: 'Height Scale', isRanged: true, range: [0, 1000], step: 0.01, group: PROPERTY_GROUPS.height, property: 'heightRange', allowCustomValue: true }, coverageRange: { type: 'number', defaultValue: [0, 1], label: 'layerVisConfigs.coverageRange', isRanged: true, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.radius, property: 'coverageRange', allowCustomValue: false }, // hi precision is deprecated by deck.gl 'hi-precision': { type: 'boolean', defaultValue: false, label: 'layerVisConfigs.highPrecisionRendering', group: PROPERTY_GROUPS.precision, property: 'hi-precision', description: 'layerVisConfigs.highPrecisionRenderingDescription' }, enable3d: { type: 'boolean', defaultValue: false, label: 'layerVisConfigs.height', group: PROPERTY_GROUPS.height, property: 'enable3d', description: 'layerVisConfigs.heightDescription' }, stroked: { type: 'boolean', label: 'layerVisConfigs.stroke', defaultValue: true, group: PROPERTY_GROUPS.display, property: 'stroked' }, filled: { type: 'boolean', label: 'layerVisConfigs.fill', defaultValue: false, group: PROPERTY_GROUPS.display, property: 'filled' }, extruded: { type: 'boolean', defaultValue: false, label: 'layerVisConfigs.enablePolygonHeight', group: PROPERTY_GROUPS.display, property: 'extruded' }, wireframe: { type: 'boolean', defaultValue: false, label: 'layerVisConfigs.showWireframe', group: PROPERTY_GROUPS.display, property: 'wireframe' }, // used for heatmap weight: { type: 'number', defaultValue: 1, label: 'layerVisConfigs.weightIntensity', isRanged: false, range: [0.01, 500], step: 0.01, group: PROPERTY_GROUPS.cell, property: 'weight', condition: function condition(config) { return Boolean(config.weightField); }, allowCustomValue: true }, heatmapRadius: { type: 'number', defaultValue: 20, label: 'layerVisConfigs.radius', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.cell, property: 'radius', allowCustomValue: true }, darkBaseMapEnabled: { type: 'boolean', defaultValue: true, label: 'layerVisConfigs.darkModeEnabled', property: 'darkBaseMapEnabled', group: PROPERTY_GROUPS.display }, allowHover: { type: 'boolean', defaultValue: true, label: 'layerVisConfigs.allowHover', description: 'layerVisConfigs.allowHoverDescription', group: PROPERTY_GROUPS.interaction, property: 'allowHover' }, showNeighborOnHover: { type: 'boolean', defaultValue: false, label: 'layerVisConfigs.showNeighborOnHover', group: PROPERTY_GROUPS.interaction, property: 'showNeighborOnHover' }, showHighlightColor: { type: 'boolean', defaultValue: true, label: 'layerVisConfigs.showHighlightColor', group: PROPERTY_GROUPS.interaction, property: 'showHighlightColor' }, scenegraph: { defaultValue: null, type: 'input', label: 'layerVisConfigs.scenegraph', group: PROPERTY_GROUPS.scenegraph, property: 'scenegraph' }, scenegraphEnabled: { defaultValue: false, type: 'boolean', label: 'layerVisConfigs.scenegraphEnabled', group: PROPERTY_GROUPS.scenegraph, property: 'scenegraphEnabled' }, scenegraphCustomModelUrl: { defaultValue: '', type: 'input', label: 'layerVisConfigs.scenegraphCustomModelUrl', group: PROPERTY_GROUPS.scenegraph, property: 'scenegraphCustomModelUrl' }, scenegraphColorEnabled: { defaultValue: false, type: 'boolean', label: 'layerVisConfigs.scenegraphColorEnabled', group: PROPERTY_GROUPS.scenegraph, property: 'scenegraphColorEnabled' }, scenegraphUseTrailColor: { defaultValue: false, type: 'boolean', label: 'layerVisConfigs.scenegraphUseTrailColor', group: PROPERTY_GROUPS.scenegraph, property: 'scenegraphUseTrailColor' }, scenegraphColor: { defaultValue: null, type: 'color-select', label: 'layerVisConfigs.scenegraphColor', group: PROPERTY_GROUPS.scenegraph, property: 'scenegraphColor' } }; 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 }, fontWeight: { type: 'number', range: [100, 900], value0: 100, step: 100, isRanged: false, label: 'Font weight', showInput: true }, outlineWidth: { type: 'number', range: [0, 1], value0: 0, step: 0.01, isRanged: false, label: 'Outline width', showInput: true }, textAnchor: { type: 'select', options: ['start', 'middle', 'end'], multiSelect: false, searchable: false }, textAlignment: { type: 'select', options: ['top', 'center', 'bottom'], multiSelect: false, searchable: false } }; var LAYER_TYPES = exports.LAYER_TYPES = (0, _keymirror["default"])({ point: null, arc: null, line: null, grid: null, hexagon: null, geojson: null, cluster: null, icon: null, heatmap: null, hexagonId: null, '3D': null, trip: null, s2: null, flow: null, vectorTile: null, rasterTile: null, wms: null, tile3d: null, bitmap: null }); var EDITOR_AVAILABLE_LAYERS = exports.EDITOR_AVAILABLE_LAYERS = [LAYER_TYPES.point, LAYER_TYPES.hexagon, LAYER_TYPES.arc, LAYER_TYPES.line, LAYER_TYPES.hexagonId, LAYER_TYPES.geojson, LAYER_TYPES.heatmap]; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfa2V5bWlycm9yIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVmYXVsdFNldHRpbmdzIiwiX2NvbG9yUGFsZXR0ZXMiLCJQUk9QRVJUWV9HUk9VUFMiLCJleHBvcnRzIiwia2V5TWlycm9yIiwiY29sb3IiLCJzdHJva2UiLCJyYWRpdXMiLCJoZWlnaHQiLCJhbmdsZSIsInNjZW5lZ3JhcGgiLCJjZWxsIiwicHJlY2lzaW9uIiwiZGlzcGxheSIsImludGVyYWN0aW9uIiwiREVGQVVMVF9MQVlFUl9PUEFDSVRZIiwiREVGQVVMVF9ISUdITElHSFRfQ09MT1IiLCJERUZBVUxUX0xBWUVSX0xBQkVMIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiZmllbGQiLCJzaXplIiwid2VpZ2h0Iiwib2Zmc2V0IiwiYW5jaG9yIiwiYWxpZ25tZW50Iiwib3V0bGluZVdpZHRoIiwib3V0bGluZUNvbG9yIiwiYmFja2dyb3VuZCIsImJhY2tncm91bmRDb2xvciIsIkRFRkFVTFRfQ09MT1JfUEFMRVRURSIsIktFUExFUl9DT0xPUl9QQUxFVFRFUyIsImZpbmQiLCJfcmVmIiwibmFtZSIsIkRFRkFVTFRfTEFZRVJfQ09MT1JfUEFMRVRURSIsIkRFRkFVTFRfQ09MT1JfUkFOR0UiLCJjb2xvclBhbGV0dGVUb0NvbG9yUmFuZ2UiLCJyZXZlcnNlZCIsInN0ZXBzIiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTIiwiREVGQVVMVF9DVVNUT01fUEFMRVRURSIsInR5cGUiLCJjYXRlZ29yeSIsImNvbG9ycyIsIlVOS05PV05fQ09MT1JfS0VZIiwiREVGQVVMVF9DT0xPUl9VSSIsImN1c3RvbVBhbGV0dGUiLCJzaG93U2tldGNoZXIiLCJzaG93RHJvcGRvd24iLCJzaG93Q29sb3JDaGFydCIsImNvbG9yUmFuZ2VDb25maWciLCJjb2xvckJsaW5kU2FmZSIsImN1c3RvbSIsImN1c3RvbUJyZWFrcyIsIkxBWUVSX1ZJU19DT05GSUdTIiwidGhpY2tuZXNzIiwiZGVmYXVsdFZhbHVlIiwibGFiZWwiLCJpc1JhbmdlZCIsInJhbmdlIiwic3RlcCIsImdyb3VwIiwicHJvcGVydHkiLCJhbGxvd0N1c3RvbVZhbHVlIiwic3Ryb2tlV2lkdGhSYW5nZSIsInRyYWlsTGVuZ3RoIiwiZmFkZVRyYWlsIiwiYmlsbGJvYXJkIiwiZGVzY3JpcHRpb24iLCJmaXhlZFJhZGl1cyIsImZpeGVkSGVpZ2h0IiwicmFkaXVzUmFuZ2UiLCJjbHVzdGVyUmFkaXVzIiwiY2x1c3RlclJhZGl1c1JhbmdlIiwib3BhY2l0eSIsImNvdmVyYWdlIiwib3V0bGluZSIsImNvbG9yUmFuZ2UiLCJzdHJva2VDb2xvclJhbmdlIiwidGFyZ2V0Q29sb3IiLCJzdHJva2VDb2xvciIsImNvbG9yQWdncmVnYXRpb24iLCJBR0dSRUdBVElPTl9UWVBFUyIsImF2ZXJhZ2UiLCJvcHRpb25zIiwiT2JqZWN0Iiwia2V5cyIsImNvbmRpdGlvbiIsImNvbmZpZyIsIkJvb2xlYW4iLCJjb2xvckZpZWxkIiwic2l6ZUFnZ3JlZ2F0aW9uIiwic2l6ZUZpZWxkIiwicGVyY2VudGlsZSIsImNvbmNhdCIsInZpc0NvbmZpZyIsImNvbG9yU2NhbGUiLCJlbGV2YXRpb25QZXJjZW50aWxlIiwiZW5hYmxlM2QiLCJyZXNvbHV0aW9uIiwic2l6ZVNjYWxlIiwid29ybGRVbml0U2l6ZSIsImVsZXZhdGlvblNjYWxlIiwiZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciIsImVsZXZhdGlvblJhbmdlIiwiaGVpZ2h0UmFuZ2UiLCJjb3ZlcmFnZVJhbmdlIiwic3Ryb2tlZCIsImZpbGxlZCIsImV4dHJ1ZGVkIiwid2lyZWZyYW1lIiwid2VpZ2h0RmllbGQiLCJoZWF0bWFwUmFkaXVzIiwiZGFya0Jhc2VNYXBFbmFibGVkIiwiYWxsb3dIb3ZlciIsInNob3dOZWlnaGJvck9uSG92ZXIiLCJzaG93SGlnaGxpZ2h0Q29sb3IiLCJzY2VuZWdyYXBoRW5hYmxlZCIsInNjZW5lZ3JhcGhDdXN0b21Nb2RlbFVybCIsInNjZW5lZ3JhcGhDb2xvckVuYWJsZWQiLCJzY2VuZWdyYXBoVXNlVHJhaWxDb2xvciIsInNjZW5lZ3JhcGhDb2xvciIsIkxBWUVSX1RFWFRfQ09ORklHUyIsImZvbnRTaXplIiwidmFsdWUwIiwic2hvd0lucHV0IiwiZm9udFdlaWdodCIsInRleHRBbmNob3IiLCJtdWx0aVNlbGVjdCIsInNlYXJjaGFibGUiLCJ0ZXh0QWxpZ25tZW50IiwiTEFZRVJfVFlQRVMiLCJwb2ludCIsImFyYyIsImxpbmUiLCJncmlkIiwiaGV4YWdvbiIsImdlb2pzb24iLCJjbHVzdGVyIiwiaWNvbiIsImhlYXRtYXAiLCJoZXhhZ29uSWQiLCJ0cmlwIiwiczIiLCJmbG93IiwidmVjdG9yVGlsZSIsInJhc3RlclRpbGUiLCJ3bXMiLCJ0aWxlM2QiLCJiaXRtYXAiLCJFRElUT1JfQVZBSUxBQkxFX0xBWUVSUyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sYXllcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGtleU1pcnJvciBmcm9tICdrZXltaXJyb3InO1xuXG5pbXBvcnQge1xuICBBR0dSRUdBVElPTl9UWVBFUyxcbiAgREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFLFxuICBERUZBVUxUX0xBWUVSX0NPTE9SX1BBTEVUVEVfU1RFUFNcbn0gZnJvbSAnLi9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7XG4gIENvbG9yUmFuZ2UsXG4gIENvbG9yVUksXG4gIExheWVyVGV4dENvbmZpZyxcbiAgTGF5ZXJUZXh0TGFiZWwsXG4gIExheWVyVmlzQ29uZmlnU2V0dGluZ3MsXG4gIFJHQkFDb2xvclxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7Q29sb3JQYWxldHRlLCBLRVBMRVJfQ09MT1JfUEFMRVRURVMsIGNvbG9yUGFsZXR0ZVRvQ29sb3JSYW5nZX0gZnJvbSAnLi9jb2xvci1wYWxldHRlcyc7XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0aW9uVHlwZXMgPSBrZXlvZiB0eXBlb2YgQUdHUkVHQVRJT05fVFlQRVM7XG5cbmV4cG9ydCBjb25zdCBQUk9QRVJUWV9HUk9VUFMgPSBrZXlNaXJyb3Ioe1xuICBjb2xvcjogbnVsbCxcbiAgc3Ryb2tlOiBudWxsLFxuICByYWRpdXM6IG51bGwsXG4gIGhlaWdodDogbnVsbCxcbiAgYW5nbGU6IG51bGwsXG4gIHNjZW5lZ3JhcGg6IG51bGwsXG4gIC8vIGZvciBoZWF0bWFwIGFnZ3JlZ2F0aW9uXG4gIGNlbGw6IG51bGwsXG4gIHByZWNpc2lvbjogbnVsbCxcbiAgZGlzcGxheTogbnVsbCxcbiAgaW50ZXJhY3Rpb246IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9PUEFDSVRZID0gMC44O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSElHSExJR0hUX0NPTE9SOiBSR0JBQ29sb3IgPSBbMjUyLCAyNDIsIDI2LCAyNTVdO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfTEFCRUwgPSAnbmV3IGxheWVyJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVYVF9MQUJFTDogTGF5ZXJUZXh0TGFiZWwgPSB7XG4gIGZpZWxkOiBudWxsLFxuICBjb2xvcjogWzI1NSwgMjU1LCAyNTVdLFxuICBzaXplOiAxOCxcbiAgd2VpZ2h0OiA0MDAsXG4gIG9mZnNldDogWzAsIDBdLFxuICBhbmNob3I6ICdzdGFydCcsXG4gIGFsaWdubWVudDogJ2NlbnRlcicsXG4gIG91dGxpbmVXaWR0aDogMCxcbiAgb3V0bGluZUNvbG9yOiBbMjU1LCAwLCAwLCAyNTVdLFxuICBiYWNrZ3JvdW5kOiBmYWxzZSxcbiAgYmFja2dyb3VuZENvbG9yOiBbMCwgMCwgMjAwLCAyNTVdXG59O1xuXG5jb25zdCBERUZBVUxUX0NPTE9SX1BBTEVUVEUgPSBLRVBMRVJfQ09MT1JfUEFMRVRURVMuZmluZChcbiAgKHtuYW1lfSkgPT4gbmFtZSA9PT0gREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFXG4pIGFzIENvbG9yUGFsZXR0ZTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfUkFOR0UgPSBjb2xvclBhbGV0dGVUb0NvbG9yUmFuZ2UoREVGQVVMVF9DT0xPUl9QQUxFVFRFLCB7XG4gIHJldmVyc2VkOiBmYWxzZSxcbiAgc3RlcHM6IERFRkFVTFRfTEFZRVJfQ09MT1JfUEFMRVRURV9TVEVQU1xufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NVU1RPTV9QQUxFVFRFOiBDb2xvclJhbmdlID0ge1xuICBuYW1lOiAnY29sb3IuY3VzdG9tUGFsZXR0ZScsXG4gIHR5cGU6ICdjdXN0b20nLFxuICBjYXRlZ29yeTogJ0N1c3RvbScsXG4gIGNvbG9yczogW11cbn07XG5cbmV4cG9ydCBjb25zdCBVTktOT1dOX0NPTE9SX0tFWSA9ICdfX3Vua25vd25Db2xvcl9fJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfVUk6IENvbG9yVUkgPSB7XG4gIC8vIGN1c3RvbVBhbGV0dGUgaW4gZWRpdFxuICBjdXN0b21QYWxldHRlOiBERUZBVUxUX0NVU1RPTV9QQUxFVFRFLFxuICAvLyBzaG93IGNvbG9yIHNrZXRjaGVyIG1vZGFsXG4gIHNob3dTa2V0Y2hlcjogZmFsc2UsXG4gIC8vIHNob3cgY29sb3IgcmFuZ2Ugc2VsZWN0aW9uIHBhbmVsXG4gIHNob3dEcm9wZG93bjogZmFsc2UsXG4gIC8vIHNob3cgY29sb3IgY2hhcnRcbiAgc2hvd0NvbG9yQ2hhcnQ6IGZhbHNlLFxuICAvLyBjb2xvciByYW5nZSBzZWxlY3RvciBjb25maWdcbiAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgIHR5cGU6ICdhbGwnLFxuICAgIHN0ZXBzOiA2LFxuICAgIHJldmVyc2VkOiBmYWxzZSxcbiAgICBjb2xvckJsaW5kU2FmZTogZmFsc2UsXG4gICAgY3VzdG9tOiBmYWxzZSxcbiAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBMQVlFUl9WSVNfQ09ORklHUzogTGF5ZXJWaXNDb25maWdTZXR0aW5ncyA9IHtcbiAgdGhpY2tuZXNzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAyLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnN0cm9rZVdpZHRoJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnN0cm9rZSxcbiAgICBwcm9wZXJ0eTogJ3RoaWNrbmVzcycsXG4gICAgYWxsb3dDdXN0b21WYWx1ZTogdHJ1ZVxuICB9LFxuICBzdHJva2VXaWR0aFJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTBdLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnN0cm9rZVdpZHRoUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMjAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5zdHJva2UsXG4gICAgcHJvcGVydHk6ICdzaXplUmFuZ2UnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgdHJhaWxMZW5ndGg6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDE4MCxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zdHJva2VXaWR0aCcsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMSwgMTAwMF0sXG4gICAgc3RlcDogMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnN0cm9rZSxcbiAgICBwcm9wZXJ0eTogJ3RyYWlsTGVuZ3RoJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIGZhZGVUcmFpbDoge1xuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuZmFkZVRyYWlsJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnN0cm9rZSxcbiAgICBwcm9wZXJ0eTogJ2ZhZGVUcmFpbCdcbiAgfSxcbiAgYmlsbGJvYXJkOiB7XG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuYmlsbGJvYXJkJyxcbiAgICBkZXNjcmlwdGlvbjogJ2xheWVyVmlzQ29uZmlncy5iaWxsYm9hcmREZXNjcmlwdGlvbicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnYmlsbGJvYXJkJ1xuICB9LFxuICAvLyByYWRpdXMgaXMgYWN0dWFsbHkgcmFkaXVzU2NhbGUgaW4gZGVjay5nbFxuICByYWRpdXM6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEwLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnJhZGl1cycsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgZml4ZWRSYWRpdXM6IHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5maXhlZFJhZGl1cycsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuZml4ZWRSYWRpdXNEZXNjcmlwdGlvbicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdmaXhlZFJhZGl1cydcbiAgfSxcbiAgZml4ZWRIZWlnaHQ6IHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5maXhlZEhlaWdodCcsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuZml4ZWRIZWlnaHREZXNjcmlwdGlvbicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdmaXhlZEhlaWdodCdcbiAgfSxcbiAgcmFkaXVzUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCA1MF0sXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCA1MDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5yYWRpdXNSYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdyYWRpdXNSYW5nZScsXG4gICAgYWxsb3dDdXN0b21WYWx1ZTogdHJ1ZVxuICB9LFxuICBjbHVzdGVyUmFkaXVzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuY2x1c3RlclJhZGl1cycsXG4gICAgZGVmYXVsdFZhbHVlOiA0MCxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFsxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NsdXN0ZXJSYWRpdXMnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgY2x1c3RlclJhZGl1c1JhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MucmFkaXVzUmFuZ2VQaXhlbHMnLFxuICAgIGRlZmF1bHRWYWx1ZTogWzEsIDQwXSxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzEsIDE1MF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAncmFkaXVzUmFuZ2UnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgb3BhY2l0eToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9MQVlFUl9PUEFDSVRZLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLm9wYWNpdHknLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDFdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ29wYWNpdHknLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IGZhbHNlXG4gIH0sXG4gIGNvdmVyYWdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmNvdmVyYWdlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiBmYWxzZVxuICB9LFxuICAvLyB1c2VkIGluIHBvaW50IGxheWVyXG4gIG91dGxpbmU6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ2xheWVyLm91dGxpbmUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ291dGxpbmUnXG4gIH0sXG4gIGNvbG9yUmFuZ2U6IHtcbiAgICB0eXBlOiAnY29sb3ItcmFuZ2Utc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfQ09MT1JfUkFOR0UsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuY29sb3JSYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ2NvbG9yUmFuZ2UnXG4gIH0sXG4gIHN0cm9rZUNvbG9yUmFuZ2U6IHtcbiAgICB0eXBlOiAnY29sb3ItcmFuZ2Utc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfQ09MT1JfUkFOR0UsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc3Ryb2tlQ29sb3JSYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZUNvbG9yUmFuZ2UnXG4gIH0sXG4gIHRhcmdldENvbG9yOiB7XG4gICAgdHlwZTogJ2NvbG9yLXNlbGVjdCcsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MudGFyZ2V0Q29sb3InLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAndGFyZ2V0Q29sb3InXG4gIH0sXG4gIHN0cm9rZUNvbG9yOiB7XG4gICAgdHlwZTogJ2NvbG9yLXNlbGVjdCcsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc3Ryb2tlQ29sb3InLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlQ29sb3InXG4gIH0sXG4gIGNvbG9yQWdncmVnYXRpb246IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuY29sb3JBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb24gY29sb3IgZmllbGQgdHlwZXNcbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUykgYXMgQWdncmVnYXRpb25UeXBlc1tdLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdjb2xvckFnZ3JlZ2F0aW9uJyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBCb29sZWFuKGNvbmZpZy5jb2xvckZpZWxkKVxuICB9LFxuICBzaXplQWdncmVnYXRpb246IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuaGVpZ2h0QWdncmVnYXRpb24nLFxuICAgIC8vIGFnZ3JlZ2F0aW9uIG9wdGlvbnMgYXJlIGJhc2VkIG9uIGNvbG9yIGZpZWxkIHR5cGVzXG4gICAgb3B0aW9uczogT2JqZWN0LmtleXMoQUdHUkVHQVRJT05fVFlQRVMpIGFzIEFnZ3JlZ2F0aW9uVHlwZXNbXSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ3NpemVBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gQm9vbGVhbihjb25maWcuc2l6ZUZpZWxkKVxuICB9LFxuICBwZXJjZW50aWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTAwXSxcbiAgICBsYWJlbDogY29uZmlnID0+XG4gICAgICBgRmlsdGVyIGJ5ICR7XG4gICAgICAgIGNvbmZpZy5jb2xvckZpZWxkXG4gICAgICAgICAgPyBgJHtjb25maWcudmlzQ29uZmlnLmNvbG9yQWdncmVnYXRpb259ICR7Y29uZmlnLmNvbG9yRmllbGQubmFtZX1gXG4gICAgICAgICAgOiAnY291bnQnXG4gICAgICB9IHBlcmNlbnRpbGVgLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdwZXJjZW50aWxlJyxcblxuICAgIC8vIHBlcmNlbnRpbGUgZmlsdGVyIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBsaW5lYXIgYWdncmVnYXRpb25cbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcuY29sb3JTY2FsZSAhPT0gJ29yZGluYWwnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IGZhbHNlXG4gIH0sXG4gIGVsZXZhdGlvblBlcmNlbnRpbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxMDBdLFxuICAgIGxhYmVsOiBjb25maWcgPT5cbiAgICAgIGBGaWx0ZXIgYnkgJHtcbiAgICAgICAgY29uZmlnLnNpemVGaWVsZCA/IGAke2NvbmZpZy52aXNDb25maWcuc2l6ZUFnZ3JlZ2F0aW9ufSAke2NvbmZpZy5zaXplRmllbGQubmFtZX1gIDogJ2NvdW50J1xuICAgICAgfSBwZXJjZW50aWxlYCxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ2VsZXZhdGlvblBlcmNlbnRpbGUnLFxuICAgIC8vIHBlcmNlbnRpbGUgZmlsdGVyIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBsaW5lYXIgYWdncmVnYXRpb25cbiAgICBjb25kaXRpb246IGNvbmZpZyA9PlxuICAgICAgQm9vbGVhbihjb25maWcudmlzQ29uZmlnLmVuYWJsZTNkICYmIChjb25maWcuY29sb3JGaWVsZCB8fCBjb25maWcuc2l6ZUZpZWxkKSksXG4gICAgYWxsb3dDdXN0b21WYWx1ZTogZmFsc2VcbiAgfSxcbiAgcmVzb2x1dGlvbjoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogOCxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5yZXNvbHV0aW9uJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxM10sXG4gICAgc3RlcDogMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNlbGwsXG4gICAgcHJvcGVydHk6ICdyZXNvbHV0aW9uJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIHNpemVTY2FsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMTAsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc2l6ZVNjYWxlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFsxLCAxMDAwXSxcbiAgICBzdGVwOiAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAnc2l6ZVNjYWxlJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIGFuZ2xlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuYW5nbGUnLFxuICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAzNjBdLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuYW5nbGUsXG4gICAgc3RlcDogMSxcbiAgICBwcm9wZXJ0eTogJ2FuZ2xlJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIHdvcmxkVW5pdFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Mud29ybGRVbml0U2l6ZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgNTAwXSxcbiAgICBzdGVwOiAwLjAwMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd29ybGRVbml0U2l6ZScsXG4gICAgYWxsb3dDdXN0b21WYWx1ZTogdHJ1ZVxuICB9LFxuICBlbGV2YXRpb25TY2FsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogNSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5lbGV2YXRpb25TY2FsZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTAwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZWxldmF0aW9uU2NhbGUnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3Rvcjoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yJyxcbiAgICBkZXNjcmlwdGlvbjogJ2xheWVyVmlzQ29uZmlncy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yRGVzY3JpcHRpb24nXG4gIH0sXG4gIGVsZXZhdGlvblJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgNTAwXSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5oZWlnaHRTY2FsZScsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnc2l6ZVJhbmdlJyxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlXG4gIH0sXG4gIGhlaWdodFJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgNTAwXSxcbiAgICBsYWJlbDogJ0hlaWdodCBTY2FsZScsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnaGVpZ2h0UmFuZ2UnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgY292ZXJhZ2VSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDFdLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmNvdmVyYWdlUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlUmFuZ2UnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IGZhbHNlXG4gIH0sXG4gIC8vIGhpIHByZWNpc2lvbiBpcyBkZXByZWNhdGVkIGJ5IGRlY2suZ2xcbiAgJ2hpLXByZWNpc2lvbic6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5oaWdoUHJlY2lzaW9uUmVuZGVyaW5nJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnByZWNpc2lvbixcbiAgICBwcm9wZXJ0eTogJ2hpLXByZWNpc2lvbicsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuaGlnaFByZWNpc2lvblJlbmRlcmluZ0Rlc2NyaXB0aW9uJ1xuICB9LFxuICBlbmFibGUzZDoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmhlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbmFibGUzZCcsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuaGVpZ2h0RGVzY3JpcHRpb24nXG4gIH0sXG4gIHN0cm9rZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc3Ryb2tlJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlZCdcbiAgfSxcbiAgZmlsbGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmZpbGwnLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnZmlsbGVkJ1xuICB9LFxuICBleHRydWRlZDoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmVuYWJsZVBvbHlnb25IZWlnaHQnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ2V4dHJ1ZGVkJ1xuICB9LFxuICB3aXJlZnJhbWU6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zaG93V2lyZWZyYW1lJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmRpc3BsYXksXG4gICAgcHJvcGVydHk6ICd3aXJlZnJhbWUnXG4gIH0sXG4gIC8vIHVzZWQgZm9yIGhlYXRtYXBcbiAgd2VpZ2h0OiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLndlaWdodEludGVuc2l0eScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMC4wMSwgNTAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3dlaWdodCcsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gQm9vbGVhbihjb25maWcud2VpZ2h0RmllbGQpLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgaGVhdG1hcFJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MucmFkaXVzJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNlbGwsXG4gICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWVcbiAgfSxcbiAgZGFya0Jhc2VNYXBFbmFibGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5kYXJrTW9kZUVuYWJsZWQnLFxuICAgIHByb3BlcnR5OiAnZGFya0Jhc2VNYXBFbmFibGVkJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmRpc3BsYXlcbiAgfSxcbiAgYWxsb3dIb3Zlcjoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuYWxsb3dIb3ZlcicsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuYWxsb3dIb3ZlckRlc2NyaXB0aW9uJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmludGVyYWN0aW9uLFxuICAgIHByb3BlcnR5OiAnYWxsb3dIb3ZlcidcbiAgfSxcbiAgc2hvd05laWdoYm9yT25Ib3Zlcjoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnNob3dOZWlnaGJvck9uSG92ZXInLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaW50ZXJhY3Rpb24sXG4gICAgcHJvcGVydHk6ICdzaG93TmVpZ2hib3JPbkhvdmVyJ1xuICB9LFxuICBzaG93SGlnaGxpZ2h0Q29sb3I6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnNob3dIaWdobGlnaHRDb2xvcicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5pbnRlcmFjdGlvbixcbiAgICBwcm9wZXJ0eTogJ3Nob3dIaWdobGlnaHRDb2xvcidcbiAgfSxcbiAgc2NlbmVncmFwaDoge1xuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAnaW5wdXQnLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnNjZW5lZ3JhcGgnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc2NlbmVncmFwaCxcbiAgICBwcm9wZXJ0eTogJ3NjZW5lZ3JhcGgnXG4gIH0sXG4gIHNjZW5lZ3JhcGhFbmFibGVkOiB7XG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc2NlbmVncmFwaEVuYWJsZWQnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc2NlbmVncmFwaCxcbiAgICBwcm9wZXJ0eTogJ3NjZW5lZ3JhcGhFbmFibGVkJ1xuICB9LFxuICBzY2VuZWdyYXBoQ3VzdG9tTW9kZWxVcmw6IHtcbiAgICBkZWZhdWx0VmFsdWU6ICcnLFxuICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc2NlbmVncmFwaEN1c3RvbU1vZGVsVXJsJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnNjZW5lZ3JhcGgsXG4gICAgcHJvcGVydHk6ICdzY2VuZWdyYXBoQ3VzdG9tTW9kZWxVcmwnXG4gIH0sXG4gIHNjZW5lZ3JhcGhDb2xvckVuYWJsZWQ6IHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zY2VuZWdyYXBoQ29sb3JFbmFibGVkJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnNjZW5lZ3JhcGgsXG4gICAgcHJvcGVydHk6ICdzY2VuZWdyYXBoQ29sb3JFbmFibGVkJ1xuICB9LFxuICBzY2VuZWdyYXBoVXNlVHJhaWxDb2xvcjoge1xuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnNjZW5lZ3JhcGhVc2VUcmFpbENvbG9yJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnNjZW5lZ3JhcGgsXG4gICAgcHJvcGVydHk6ICdzY2VuZWdyYXBoVXNlVHJhaWxDb2xvcidcbiAgfSxcbiAgc2NlbmVncmFwaENvbG9yOiB7XG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIHR5cGU6ICdjb2xvci1zZWxlY3QnLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnNjZW5lZ3JhcGhDb2xvcicsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5zY2VuZWdyYXBoLFxuICAgIHByb3BlcnR5OiAnc2NlbmVncmFwaENvbG9yJ1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgTEFZRVJfVEVYVF9DT05GSUdTOiBMYXllclRleHRDb25maWcgPSB7XG4gIGZvbnRTaXplOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgcmFuZ2U6IFsxLCAxMDBdLFxuICAgIHZhbHVlMDogMSxcbiAgICBzdGVwOiAxLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICBsYWJlbDogJ0ZvbnQgc2l6ZScsXG4gICAgc2hvd0lucHV0OiB0cnVlXG4gIH0sXG4gIGZvbnRXZWlnaHQ6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzEwMCwgOTAwXSxcbiAgICB2YWx1ZTA6IDEwMCxcbiAgICBzdGVwOiAxMDAsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIGxhYmVsOiAnRm9udCB3ZWlnaHQnLFxuICAgIHNob3dJbnB1dDogdHJ1ZVxuICB9LFxuICBvdXRsaW5lV2lkdGg6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzAsIDFdLFxuICAgIHZhbHVlMDogMCxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICBsYWJlbDogJ091dGxpbmUgd2lkdGgnLFxuICAgIHNob3dJbnB1dDogdHJ1ZVxuICB9LFxuICB0ZXh0QW5jaG9yOiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgb3B0aW9uczogWydzdGFydCcsICdtaWRkbGUnLCAnZW5kJ10sXG4gICAgbXVsdGlTZWxlY3Q6IGZhbHNlLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlXG4gIH0sXG4gIHRleHRBbGlnbm1lbnQ6IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBvcHRpb25zOiBbJ3RvcCcsICdjZW50ZXInLCAnYm90dG9tJ10sXG4gICAgbXVsdGlTZWxlY3Q6IGZhbHNlLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlXG4gIH1cbn07XG5leHBvcnQgY29uc3QgTEFZRVJfVFlQRVMgPSBrZXlNaXJyb3Ioe1xuICBwb2ludDogbnVsbCxcbiAgYXJjOiBudWxsLFxuICBsaW5lOiBudWxsLFxuICBncmlkOiBudWxsLFxuICBoZXhhZ29uOiBudWxsLFxuICBnZW9qc29uOiBudWxsLFxuICBjbHVzdGVyOiBudWxsLFxuICBpY29uOiBudWxsLFxuICBoZWF0bWFwOiBudWxsLFxuICBoZXhhZ29uSWQ6IG51bGwsXG4gICczRCc6IG51bGwsXG4gIHRyaXA6IG51bGwsXG4gIHMyOiBudWxsLFxuICBmbG93OiBudWxsLFxuICB2ZWN0b3JUaWxlOiBudWxsLFxuICByYXN0ZXJUaWxlOiBudWxsLFxuICB3bXM6IG51bGwsXG4gIHRpbGUzZDogbnVsbCxcbiAgYml0bWFwOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEVESVRPUl9BVkFJTEFCTEVfTEFZRVJTOiBzdHJpbmdbXSA9IFtcbiAgTEFZRVJfVFlQRVMucG9pbnQsXG4gIExBWUVSX1RZUEVTLmhleGFnb24sXG4gIExBWUVSX1RZUEVTLmFyYyxcbiAgTEFZRVJfVFlQRVMubGluZSxcbiAgTEFZRVJfVFlQRVMuaGV4YWdvbklkLFxuICBMQVlFUl9UWVBFUy5nZW9qc29uLFxuICBMQVlFUl9UWVBFUy5oZWF0bWFwXG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0EsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQWFBLElBQUFFLGNBQUEsR0FBQUYsT0FBQTtBQWxCQTtBQUNBOztBQXFCTyxJQUFNRyxlQUFlLEdBQUFDLE9BQUEsQ0FBQUQsZUFBQSxHQUFHLElBQUFFLHFCQUFTLEVBQUM7RUFDdkNDLEtBQUssRUFBRSxJQUFJO0VBQ1hDLE1BQU0sRUFBRSxJQUFJO0VBQ1pDLE1BQU0sRUFBRSxJQUFJO0VBQ1pDLE1BQU0sRUFBRSxJQUFJO0VBQ1pDLEtBQUssRUFBRSxJQUFJO0VBQ1hDLFVBQVUsRUFBRSxJQUFJO0VBQ2hCO0VBQ0FDLElBQUksRUFBRSxJQUFJO0VBQ1ZDLFNBQVMsRUFBRSxJQUFJO0VBQ2ZDLE9BQU8sRUFBRSxJQUFJO0VBQ2JDLFdB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