@kepler.gl/constants 3.3.0-alpha.0 → 3.3.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotation.d.ts +23 -0
- package/dist/cjs/annotation.js +45 -0
- package/dist/cjs/color-palettes.js +461 -0
- package/dist/cjs/colors-by-theme.js +519 -0
- package/dist/cjs/dataset.js +176 -0
- package/dist/cjs/default-settings.js +1740 -0
- package/dist/cjs/gpu-parameters.js +125 -0
- package/dist/{index.js → cjs/index.js} +13 -1
- package/dist/cjs/keyevent.js +26 -0
- package/dist/cjs/layers.js +609 -0
- package/dist/{plot.js → cjs/plot.js} +1 -1
- package/dist/cjs/time.js +194 -0
- package/dist/cjs/tooltip.js +221 -0
- package/dist/cjs/user-feedbacks.js +15 -0
- package/dist/cjs/user-guides.js +19 -0
- package/dist/dataset.d.ts +70 -1
- package/dist/default-settings.d.ts +106 -2
- package/dist/esm/annotation.js +38 -0
- package/dist/esm/color-palettes.js +453 -0
- package/dist/esm/colors-by-theme.js +513 -0
- package/dist/esm/dataset.js +169 -0
- package/dist/esm/default-settings.js +1734 -0
- package/dist/esm/gpu-parameters.js +119 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/keyevent.js +19 -0
- package/dist/esm/layers.js +602 -0
- package/dist/esm/plot.js +9 -0
- package/dist/esm/time.js +190 -0
- package/dist/esm/tooltip.js +215 -0
- package/dist/esm/user-feedbacks.js +9 -0
- package/dist/esm/user-guides.js +13 -0
- package/dist/index.d.ts +1 -0
- package/dist/layers.d.ts +7 -0
- package/package.json +25 -16
- package/dist/color-palettes.js +0 -462
- package/dist/colors-by-theme.js +0 -519
- package/dist/dataset.js +0 -63
- package/dist/default-settings.js +0 -1495
- package/dist/gpu-parameters.js +0 -125
- package/dist/keyevent.js +0 -26
- package/dist/layers.js +0 -549
- package/dist/time.js +0 -194
- package/dist/tooltip.js +0 -221
- package/dist/user-feedbacks.js +0 -15
- package/dist/user-guides.js +0 -19
- package/umd/keplergl.min.js +0 -58
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Copyright contributors to the kepler.gl project
|
|
3
|
+
|
|
4
|
+
export var DatasetType = /*#__PURE__*/function (DatasetType) {
|
|
5
|
+
DatasetType["LOCAL"] = "local";
|
|
6
|
+
DatasetType["EXTERNALLY_HOSTED"] = "externally-hosted";
|
|
7
|
+
DatasetType["VECTOR_TILE"] = "vector-tile";
|
|
8
|
+
DatasetType["RASTER_TILE"] = "raster-tile";
|
|
9
|
+
DatasetType["WMS_TILE"] = "wms-tile";
|
|
10
|
+
DatasetType["TILE_3D"] = "tile-3d";
|
|
11
|
+
DatasetType["BITMAP"] = "bitmap";
|
|
12
|
+
return DatasetType;
|
|
13
|
+
}({});
|
|
14
|
+
export var REMOTE_FILE_FORMATS = ['auto', 'csv', 'geojson', 'json', 'arrow', 'parquet'];
|
|
15
|
+
export var REMOTE_FILE_MIME_TYPES = {
|
|
16
|
+
csv: 'text/csv',
|
|
17
|
+
geojson: 'application/geo+json',
|
|
18
|
+
json: 'application/json',
|
|
19
|
+
arrow: 'application/vnd.apache.arrow.file',
|
|
20
|
+
parquet: 'application/vnd.apache.parquet'
|
|
21
|
+
};
|
|
22
|
+
export var REMOTE_FILE_EXTENSIONS = {
|
|
23
|
+
csv: 'csv',
|
|
24
|
+
geojson: 'geojson',
|
|
25
|
+
json: 'json',
|
|
26
|
+
arrow: 'arrow',
|
|
27
|
+
parquet: 'parquet'
|
|
28
|
+
};
|
|
29
|
+
export var MIME_TO_REMOTE_FILE_EXTENSION = {
|
|
30
|
+
'text/csv': 'csv',
|
|
31
|
+
'text/tab-separated-values': 'tsv',
|
|
32
|
+
'application/geo+json': 'geojson',
|
|
33
|
+
'application/vnd.geo+json': 'geojson',
|
|
34
|
+
'application/json': 'json',
|
|
35
|
+
'application/vnd.apache.arrow.file': 'arrow',
|
|
36
|
+
'application/vnd.apache.arrow.stream': 'arrow',
|
|
37
|
+
'application/vnd.apache.parquet': 'parquet',
|
|
38
|
+
'application/x-parquet': 'parquet'
|
|
39
|
+
};
|
|
40
|
+
export var DATASET_REFRESH_INTERVAL_OPTIONS = [{
|
|
41
|
+
value: 0,
|
|
42
|
+
labelId: 'datasetTitle.refreshOff'
|
|
43
|
+
}, {
|
|
44
|
+
value: 10000,
|
|
45
|
+
labelId: 'datasetTitle.refresh10s'
|
|
46
|
+
}, {
|
|
47
|
+
value: 15000,
|
|
48
|
+
labelId: 'datasetTitle.refresh15s'
|
|
49
|
+
}, {
|
|
50
|
+
value: 60000,
|
|
51
|
+
labelId: 'datasetTitle.refresh1m'
|
|
52
|
+
}, {
|
|
53
|
+
value: 300000,
|
|
54
|
+
labelId: 'datasetTitle.refresh5m'
|
|
55
|
+
}, {
|
|
56
|
+
value: 900000,
|
|
57
|
+
labelId: 'datasetTitle.refresh15m'
|
|
58
|
+
}];
|
|
59
|
+
|
|
60
|
+
/** Select value for a user-entered interval that is not one of the presets. */
|
|
61
|
+
export var DATASET_REFRESH_CUSTOM_VALUE = 'custom';
|
|
62
|
+
/** Default custom poll interval when switching from Off to Custom. */
|
|
63
|
+
export var DATASET_REFRESH_DEFAULT_CUSTOM_MS = 30000;
|
|
64
|
+
export var DATASET_REFRESH_MIN_INTERVAL_MS = 100;
|
|
65
|
+
export function isPresetDatasetRefreshInterval(ms) {
|
|
66
|
+
return DATASET_REFRESH_INTERVAL_OPTIONS.some(function (option) {
|
|
67
|
+
return option.value === ms;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Runtime copy of {@link ExternalDatasetMetadata} with `format` renamed to avoid colliding with DATASET_FORMATS. */
|
|
72
|
+
|
|
73
|
+
export function getDatasetRefreshIntervalMs(metadata) {
|
|
74
|
+
var value = metadata === null || metadata === void 0 ? void 0 : metadata.refreshIntervalMs;
|
|
75
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Parse a seconds field into ms, or null if the input is not a positive number. */
|
|
79
|
+
export function parseCustomRefreshIntervalMs(secondsText) {
|
|
80
|
+
var seconds = Number.parseFloat(secondsText);
|
|
81
|
+
if (!Number.isFinite(seconds) || seconds <= 0) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return Math.max(DATASET_REFRESH_MIN_INTERVAL_MS, Math.round(seconds * 1000));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Display string for the custom seconds input (keeps tenths for sub-second values). */
|
|
88
|
+
export function formatCustomRefreshSeconds(ms) {
|
|
89
|
+
var seconds = Math.max(DATASET_REFRESH_MIN_INTERVAL_MS, ms) / 1000;
|
|
90
|
+
if (Number.isInteger(seconds)) {
|
|
91
|
+
return String(seconds);
|
|
92
|
+
}
|
|
93
|
+
return String(Number(seconds.toFixed(3)));
|
|
94
|
+
}
|
|
95
|
+
export function getRemoteSourceFormat(metadata) {
|
|
96
|
+
var candidate = typeof (metadata === null || metadata === void 0 ? void 0 : metadata.sourceFormat) === 'string' && metadata.sourceFormat || typeof (metadata === null || metadata === void 0 ? void 0 : metadata.format) === 'string' && metadata.format || undefined;
|
|
97
|
+
if (candidate && candidate !== 'auto' && Object.prototype.hasOwnProperty.call(REMOTE_FILE_EXTENSIONS, candidate)) {
|
|
98
|
+
return candidate;
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
export var RemoteTileFormat = /*#__PURE__*/function (RemoteTileFormat) {
|
|
103
|
+
RemoteTileFormat["MVT"] = "mvt";
|
|
104
|
+
RemoteTileFormat["PMTILES"] = "pmtiles";
|
|
105
|
+
RemoteTileFormat["WMS"] = "wms";
|
|
106
|
+
return RemoteTileFormat;
|
|
107
|
+
}({});
|
|
108
|
+
export var PMTilesType = /*#__PURE__*/function (PMTilesType) {
|
|
109
|
+
PMTilesType["RASTER"] = "raster";
|
|
110
|
+
PMTilesType["MVT"] = "mvt";
|
|
111
|
+
return PMTilesType;
|
|
112
|
+
}({});
|
|
113
|
+
export var REMOTE_TILE = 'remote';
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Raster tileset metadata in STAC Item format. STAC version must be >= 1.0.0,
|
|
117
|
+
* and the EO and Raster STAC extensions are required. This metadata shape can
|
|
118
|
+
* be passed to the map to synchronously add a raster tileset.
|
|
119
|
+
* @see https://github.com/radiantearth/stac-spec/blob/master/item-spec/item-spec.md
|
|
120
|
+
*/
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Raster tileset metadata with a remote metadata URL. This metadata can
|
|
124
|
+
* be passed to the map to asynchronously load a raster tileset.
|
|
125
|
+
*/
|
|
126
|
+
|
|
127
|
+
export var RasterTileType = /*#__PURE__*/function (RasterTileType) {
|
|
128
|
+
RasterTileType["STAC"] = "stac";
|
|
129
|
+
RasterTileType["PMTILES"] = "pmtiles";
|
|
130
|
+
return RasterTileType;
|
|
131
|
+
}({});
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Raster tileset metadata.
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
export var TILE3D_PROVIDERS = {
|
|
138
|
+
google: {
|
|
139
|
+
name: 'Google 3D Tiles',
|
|
140
|
+
urlKey: 'google',
|
|
141
|
+
attribution: {
|
|
142
|
+
title: 'Built with Google Maps.',
|
|
143
|
+
url: '',
|
|
144
|
+
logoUrl: 'https://studio-public-data.foursquare.com/statics/images/google-watermark-white.png',
|
|
145
|
+
height: 17,
|
|
146
|
+
bottom: 0
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
cesium: {
|
|
150
|
+
name: 'Cesium ion',
|
|
151
|
+
urlKey: 'ion.cesium',
|
|
152
|
+
attribution: {
|
|
153
|
+
title: 'Cesium.',
|
|
154
|
+
url: 'https://cesium.com/',
|
|
155
|
+
height: 19,
|
|
156
|
+
bottom: 0
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
arcgis: {
|
|
160
|
+
name: 'ArcGIS',
|
|
161
|
+
urlKey: 'arcgis',
|
|
162
|
+
attribution: {
|
|
163
|
+
title: 'Powered by Esri.',
|
|
164
|
+
url: 'https://arcgis.com/',
|
|
165
|
+
height: 16
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhc2V0VHlwZSIsIlJFTU9URV9GSUxFX0ZPUk1BVFMiLCJSRU1PVEVfRklMRV9NSU1FX1RZUEVTIiwiY3N2IiwiZ2VvanNvbiIsImpzb24iLCJhcnJvdyIsInBhcnF1ZXQiLCJSRU1PVEVfRklMRV9FWFRFTlNJT05TIiwiTUlNRV9UT19SRU1PVEVfRklMRV9FWFRFTlNJT04iLCJEQVRBU0VUX1JFRlJFU0hfSU5URVJWQUxfT1BUSU9OUyIsInZhbHVlIiwibGFiZWxJZCIsIkRBVEFTRVRfUkVGUkVTSF9DVVNUT01fVkFMVUUiLCJEQVRBU0VUX1JFRlJFU0hfREVGQVVMVF9DVVNUT01fTVMiLCJEQVRBU0VUX1JFRlJFU0hfTUlOX0lOVEVSVkFMX01TIiwiaXNQcmVzZXREYXRhc2V0UmVmcmVzaEludGVydmFsIiwibXMiLCJzb21lIiwib3B0aW9uIiwiZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zIiwibWV0YWRhdGEiLCJyZWZyZXNoSW50ZXJ2YWxNcyIsIk51bWJlciIsImlzRmluaXRlIiwicGFyc2VDdXN0b21SZWZyZXNoSW50ZXJ2YWxNcyIsInNlY29uZHNUZXh0Iiwic2Vjb25kcyIsInBhcnNlRmxvYXQiLCJNYXRoIiwibWF4Iiwicm91bmQiLCJmb3JtYXRDdXN0b21SZWZyZXNoU2Vjb25kcyIsImlzSW50ZWdlciIsIlN0cmluZyIsInRvRml4ZWQiLCJnZXRSZW1vdGVTb3VyY2VGb3JtYXQiLCJjYW5kaWRhdGUiLCJzb3VyY2VGb3JtYXQiLCJmb3JtYXQiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJSZW1vdGVUaWxlRm9ybWF0IiwiUE1UaWxlc1R5cGUiLCJSRU1PVEVfVElMRSIsIlJhc3RlclRpbGVUeXBlIiwiVElMRTNEX1BST1ZJREVSUyIsImdvb2dsZSIsIm5hbWUiLCJ1cmxLZXkiLCJhdHRyaWJ1dGlvbiIsInRpdGxlIiwidXJsIiwibG9nb1VybCIsImhlaWdodCIsImJvdHRvbSIsImNlc2l1bSIsImFyY2dpcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhc2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmV4cG9ydCBlbnVtIERhdGFzZXRUeXBlIHtcbiAgTE9DQUwgPSAnbG9jYWwnLFxuICBFWFRFUk5BTExZX0hPU1RFRCA9ICdleHRlcm5hbGx5LWhvc3RlZCcsXG4gIFZFQ1RPUl9USUxFID0gJ3ZlY3Rvci10aWxlJyxcbiAgUkFTVEVSX1RJTEUgPSAncmFzdGVyLXRpbGUnLFxuICBXTVNfVElMRSA9ICd3bXMtdGlsZScsXG4gIFRJTEVfM0QgPSAndGlsZS0zZCcsXG4gIEJJVE1BUCA9ICdiaXRtYXAnXG59XG5cbmV4cG9ydCBjb25zdCBSRU1PVEVfRklMRV9GT1JNQVRTID0gWydhdXRvJywgJ2NzdicsICdnZW9qc29uJywgJ2pzb24nLCAnYXJyb3cnLCAncGFycXVldCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUmVtb3RlRmlsZUZvcm1hdCA9ICh0eXBlb2YgUkVNT1RFX0ZJTEVfRk9STUFUUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFJFTU9URV9GSUxFX01JTUVfVFlQRVM6IFJlY29yZDxFeGNsdWRlPFJlbW90ZUZpbGVGb3JtYXQsICdhdXRvJz4sIHN0cmluZz4gPSB7XG4gIGNzdjogJ3RleHQvY3N2JyxcbiAgZ2VvanNvbjogJ2FwcGxpY2F0aW9uL2dlbytqc29uJyxcbiAganNvbjogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICBhcnJvdzogJ2FwcGxpY2F0aW9uL3ZuZC5hcGFjaGUuYXJyb3cuZmlsZScsXG4gIHBhcnF1ZXQ6ICdhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnBhcnF1ZXQnXG59O1xuXG5leHBvcnQgY29uc3QgUkVNT1RFX0ZJTEVfRVhURU5TSU9OUzogUmVjb3JkPEV4Y2x1ZGU8UmVtb3RlRmlsZUZvcm1hdCwgJ2F1dG8nPiwgc3RyaW5nPiA9IHtcbiAgY3N2OiAnY3N2JyxcbiAgZ2VvanNvbjogJ2dlb2pzb24nLFxuICBqc29uOiAnanNvbicsXG4gIGFycm93OiAnYXJyb3cnLFxuICBwYXJxdWV0OiAncGFycXVldCdcbn07XG5cbmV4cG9ydCBjb25zdCBNSU1FX1RPX1JFTU9URV9GSUxFX0VYVEVOU0lPTjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ3RleHQvY3N2JzogJ2NzdicsXG4gICd0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzJzogJ3RzdicsXG4gICdhcHBsaWNhdGlvbi9nZW8ranNvbic6ICdnZW9qc29uJyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5nZW8ranNvbic6ICdnZW9qc29uJyxcbiAgJ2FwcGxpY2F0aW9uL2pzb24nOiAnanNvbicsXG4gICdhcHBsaWNhdGlvbi92bmQuYXBhY2hlLmFycm93LmZpbGUnOiAnYXJyb3cnLFxuICAnYXBwbGljYXRpb24vdm5kLmFwYWNoZS5hcnJvdy5zdHJlYW0nOiAnYXJyb3cnLFxuICAnYXBwbGljYXRpb24vdm5kLmFwYWNoZS5wYXJxdWV0JzogJ3BhcnF1ZXQnLFxuICAnYXBwbGljYXRpb24veC1wYXJxdWV0JzogJ3BhcnF1ZXQnXG59O1xuXG5leHBvcnQgY29uc3QgREFUQVNFVF9SRUZSRVNIX0lOVEVSVkFMX09QVElPTlM6IHt2YWx1ZTogbnVtYmVyOyBsYWJlbElkOiBzdHJpbmd9W10gPSBbXG4gIHt2YWx1ZTogMCwgbGFiZWxJZDogJ2RhdGFzZXRUaXRsZS5yZWZyZXNoT2ZmJ30sXG4gIHt2YWx1ZTogMTBfMDAwLCBsYWJlbElkOiAnZGF0YXNldFRpdGxlLnJlZnJlc2gxMHMnfSxcbiAge3ZhbHVlOiAxNV8wMDAsIGxhYmVsSWQ6ICdkYXRhc2V0VGl0bGUucmVmcmVzaDE1cyd9LFxuICB7dmFsdWU6IDYwXzAwMCwgbGFiZWxJZDogJ2RhdGFzZXRUaXRsZS5yZWZyZXNoMW0nfSxcbiAge3ZhbHVlOiAzMDBfMDAwLCBsYWJlbElkOiAnZGF0YXNldFRpdGxlLnJlZnJlc2g1bSd9LFxuICB7dmFsdWU6IDkwMF8wMDAsIGxhYmVsSWQ6ICdkYXRhc2V0VGl0bGUucmVmcmVzaDE1bSd9XG5dO1xuXG4vKiogU2VsZWN0IHZhbHVlIGZvciBhIHVzZXItZW50ZXJlZCBpbnRlcnZhbCB0aGF0IGlzIG5vdCBvbmUgb2YgdGhlIHByZXNldHMuICovXG5leHBvcnQgY29uc3QgREFUQVNFVF9SRUZSRVNIX0NVU1RPTV9WQUxVRSA9ICdjdXN0b20nO1xuLyoqIERlZmF1bHQgY3VzdG9tIHBvbGwgaW50ZXJ2YWwgd2hlbiBzd2l0Y2hpbmcgZnJvbSBPZmYgdG8gQ3VzdG9tLiAqL1xuZXhwb3J0IGNvbnN0IERBVEFTRVRfUkVGUkVTSF9ERUZBVUxUX0NVU1RPTV9NUyA9IDMwXzAwMDtcbmV4cG9ydCBjb25zdCBEQVRBU0VUX1JFRlJFU0hfTUlOX0lOVEVSVkFMX01TID0gMTAwO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmVzZXREYXRhc2V0UmVmcmVzaEludGVydmFsKG1zOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIERBVEFTRVRfUkVGUkVTSF9JTlRFUlZBTF9PUFRJT05TLnNvbWUob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gbXMpO1xufVxuXG5leHBvcnQgdHlwZSBFeHRlcm5hbERhdGFzZXRSZWZyZXNoU3RhdHVzID0gJ2lkbGUnIHwgJ2xvYWRpbmcnIHwgJ2Vycm9yJztcblxuZXhwb3J0IHR5cGUgRXh0ZXJuYWxEYXRhc2V0TWV0YWRhdGEgPSB7XG4gIC8qKiBSZW1vdGUgVVJMIG9mIHRoZSBkYXRhc2V0IGZpbGUuICovXG4gIHNvdXJjZTogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgZm9ybWF0IGhpbnQgZm9yIGV4dGVuc2lvbmxlc3MgVVJMcyAoU0FTIGtleXMsIGV0YykuICovXG4gIGZvcm1hdD86IEV4Y2x1ZGU8UmVtb3RlRmlsZUZvcm1hdCwgJ2F1dG8nPiB8IHN0cmluZztcbiAgLyoqIExhc3Qga25vd24gc2l6ZSBvZiB0aGUgaG9zdGVkIHJlc291cmNlLCBpbiBieXRlcy4gKi9cbiAgc2l6ZT86IG51bWJlcjtcbiAgLyoqIFBvbGwgaW50ZXJ2YWwgaW4gbXMuIE9taXR0ZWQgb3IgMCBtZWFucyBtYW51YWwgcmVmcmVzaCBvbmx5LiAqL1xuICByZWZyZXNoSW50ZXJ2YWxNcz86IG51bWJlcjtcbn07XG5cbi8qKiBSdW50aW1lIGNvcHkgb2Yge0BsaW5rIEV4dGVybmFsRGF0YXNldE1ldGFkYXRhfSB3aXRoIGBmb3JtYXRgIHJlbmFtZWQgdG8gYXZvaWQgY29sbGlkaW5nIHdpdGggREFUQVNFVF9GT1JNQVRTLiAqL1xuZXhwb3J0IHR5cGUgRXh0ZXJuYWxEYXRhc2V0UnVudGltZU1ldGFkYXRhID0ge1xuICBzb3VyY2U6IHN0cmluZztcbiAgc291cmNlRm9ybWF0PzogRXhjbHVkZTxSZW1vdGVGaWxlRm9ybWF0LCAnYXV0byc+IHwgc3RyaW5nO1xuICBzaXplPzogbnVtYmVyO1xuICByZWZyZXNoSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgZXRhZz86IHN0cmluZztcbiAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICBsYXN0RmV0Y2hlZEF0PzogbnVtYmVyO1xuICByZWZyZXNoU3RhdHVzPzogRXh0ZXJuYWxEYXRhc2V0UmVmcmVzaFN0YXR1cztcbiAgcmVmcmVzaEVycm9yPzogc3RyaW5nO1xuICAvKiogRG93bmxvYWQgcHJvZ3Jlc3MgMOKAkzEwMCB3aGlsZSBgcmVmcmVzaFN0YXR1c2AgaXMgYGxvYWRpbmdgLiAqL1xuICByZWZyZXNoUHJvZ3Jlc3M/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zKG1ldGFkYXRhPzoge3JlZnJlc2hJbnRlcnZhbE1zPzogdW5rbm93bn0pOiBudW1iZXIge1xuICBjb25zdCB2YWx1ZSA9IG1ldGFkYXRhPy5yZWZyZXNoSW50ZXJ2YWxNcztcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSAmJiB2YWx1ZSA+IDAgPyB2YWx1ZSA6IDA7XG59XG5cbi8qKiBQYXJzZSBhIHNlY29uZHMgZmllbGQgaW50byBtcywgb3IgbnVsbCBpZiB0aGUgaW5wdXQgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3VzdG9tUmVmcmVzaEludGVydmFsTXMoc2Vjb25kc1RleHQ6IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBzZWNvbmRzID0gTnVtYmVyLnBhcnNlRmxvYXQoc2Vjb25kc1RleHQpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShzZWNvbmRzKSB8fCBzZWNvbmRzIDw9IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gTWF0aC5tYXgoREFUQVNFVF9SRUZSRVNIX01JTl9JTlRFUlZBTF9NUywgTWF0aC5yb3VuZChzZWNvbmRzICogMTAwMCkpO1xufVxuXG4vKiogRGlzcGxheSBzdHJpbmcgZm9yIHRoZSBjdXN0b20gc2Vjb25kcyBpbnB1dCAoa2VlcHMgdGVudGhzIGZvciBzdWItc2Vjb25kIHZhbHVlcykuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Q3VzdG9tUmVmcmVzaFNlY29uZHMobXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHNlY29uZHMgPSBNYXRoLm1heChEQVRBU0VUX1JFRlJFU0hfTUlOX0lOVEVSVkFMX01TLCBtcykgLyAxMDAwO1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcihzZWNvbmRzKSkge1xuICAgIHJldHVybiBTdHJpbmcoc2Vjb25kcyk7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhOdW1iZXIoc2Vjb25kcy50b0ZpeGVkKDMpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobWV0YWRhdGE/OiB7XG4gIHNvdXJjZUZvcm1hdD86IHVua25vd247XG4gIGZvcm1hdD86IHVua25vd247XG59KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY2FuZGlkYXRlID1cbiAgICAodHlwZW9mIG1ldGFkYXRhPy5zb3VyY2VGb3JtYXQgPT09ICdzdHJpbmcnICYmIG1ldGFkYXRhLnNvdXJjZUZvcm1hdCkgfHxcbiAgICAodHlwZW9mIG1ldGFkYXRhPy5mb3JtYXQgPT09ICdzdHJpbmcnICYmIG1ldGFkYXRhLmZvcm1hdCkgfHxcbiAgICB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICBjYW5kaWRhdGUgJiZcbiAgICBjYW5kaWRhdGUgIT09ICdhdXRvJyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSRU1PVEVfRklMRV9FWFRFTlNJT05TLCBjYW5kaWRhdGUpXG4gICkge1xuICAgIHJldHVybiBjYW5kaWRhdGU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gUmVtb3RlVGlsZUZvcm1hdCB7XG4gIE1WVCA9ICdtdnQnLFxuICBQTVRJTEVTID0gJ3BtdGlsZXMnLFxuICBXTVMgPSAnd21zJ1xufVxuXG5leHBvcnQgZW51bSBQTVRpbGVzVHlwZSB7XG4gIFJBU1RFUiA9ICdyYXN0ZXInLFxuICBNVlQgPSAnbXZ0J1xufVxuXG5leHBvcnQgY29uc3QgUkVNT1RFX1RJTEUgPSAncmVtb3RlJztcblxuZXhwb3J0IHR5cGUgVmVjdG9yVGlsZURhdGFzZXRNZXRhZGF0YSA9IHtcbiAgdHlwZTogdHlwZW9mIFJFTU9URV9USUxFO1xuICByZW1vdGVUaWxlRm9ybWF0OiBSZW1vdGVUaWxlRm9ybWF0O1xuICB0aWxlc2V0RGF0YVVybDogc3RyaW5nO1xuICB0aWxlc2V0TWV0YWRhdGFVcmw/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJhc3RlciB0aWxlc2V0IG1ldGFkYXRhIGluIFNUQUMgSXRlbSBmb3JtYXQuIFNUQUMgdmVyc2lvbiBtdXN0IGJlID49IDEuMC4wLFxuICogYW5kIHRoZSBFTyBhbmQgUmFzdGVyIFNUQUMgZXh0ZW5zaW9ucyBhcmUgcmVxdWlyZWQuIFRoaXMgbWV0YWRhdGEgc2hhcGUgY2FuXG4gKiBiZSBwYXNzZWQgdG8gdGhlIG1hcCB0byBzeW5jaHJvbm91c2x5IGFkZCBhIHJhc3RlciB0aWxlc2V0LlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmFkaWFudGVhcnRoL3N0YWMtc3BlYy9ibG9iL21hc3Rlci9pdGVtLXNwZWMvaXRlbS1zcGVjLm1kXG4gKi9cbmV4cG9ydCB0eXBlIFJhc3RlclRpbGVMb2NhbE1ldGFkYXRhID0ge1xuICB0eXBlOiAnRmVhdHVyZSc7XG5cbiAgLyoqIFVSTCBmb3IgdGlsZXNldCBtZXRhZGF0YS4gKi9cbiAgbWV0YWRhdGFVcmw/OiBzdHJpbmc7XG4gIHN0YWNfdmVyc2lvbjogc3RyaW5nO1xuICBzdGFjX2V4dGVuc2lvbnM6IHN0cmluZ1tdO1xuICBhc3NldHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG4vKipcbiAqIFJhc3RlciB0aWxlc2V0IG1ldGFkYXRhIHdpdGggYSByZW1vdGUgbWV0YWRhdGEgVVJMLiBUaGlzIG1ldGFkYXRhIGNhblxuICogYmUgcGFzc2VkIHRvIHRoZSBtYXAgdG8gYXN5bmNocm9ub3VzbHkgbG9hZCBhIHJhc3RlciB0aWxlc2V0LlxuICovXG5leHBvcnQgdHlwZSBSYXN0ZXJUaWxlUmVtb3RlTWV0YWRhdGEgPSB7XG4gIG1ldGFkYXRhVXJsOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZW51bSBSYXN0ZXJUaWxlVHlwZSB7XG4gIFNUQUMgPSAnc3RhYycsXG4gIFBNVElMRVMgPSAncG10aWxlcydcbn1cblxuZXhwb3J0IHR5cGUgUmFzdGVyVGlsZU1ldGFkYXRhU291cmNlVHlwZSA9IHtcbiAgcG10aWxlc1R5cGU/OiBQTVRpbGVzVHlwZTtcbn07XG5cbi8qKlxuICogUmFzdGVyIHRpbGVzZXQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCB0eXBlIFJhc3RlclRpbGVEYXRhc2V0TWV0YWRhdGEgPSAoUmFzdGVyVGlsZUxvY2FsTWV0YWRhdGEgfCBSYXN0ZXJUaWxlUmVtb3RlTWV0YWRhdGEpICZcbiAgUmFzdGVyVGlsZU1ldGFkYXRhU291cmNlVHlwZTtcblxuZXhwb3J0IHR5cGUgV01TRGF0YXNldE1ldGFkYXRhID0ge1xuICB0eXBlOiB0eXBlb2YgUkVNT1RFX1RJTEU7XG4gIHJlbW90ZVRpbGVGb3JtYXQ6IFJlbW90ZVRpbGVGb3JtYXQuV01TO1xuICB0aWxlc2V0RGF0YVVybDogc3RyaW5nO1xuICB0aWxlc2V0TWV0YWRhdGFVcmw6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBsYXllcnM6IHtuYW1lOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmc7IGJvdW5kaW5nQm94OiBudW1iZXJbXSB8IG51bGx9W107XG4gIGxhYmVsPzogc3RyaW5nO1xuICBhdHRyaWJ1dGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRpbGUzRFByb3ZpZGVyQXR0cmlidXRpb24gPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBsb2dvVXJsPzogc3RyaW5nO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIGJvdHRvbT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRpbGUzRFByb3ZpZGVyID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVybEtleTogc3RyaW5nO1xuICBhdHRyaWJ1dGlvbj86IFRpbGUzRFByb3ZpZGVyQXR0cmlidXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgVElMRTNEX1BST1ZJREVSUzogUmVjb3JkPHN0cmluZywgVGlsZTNEUHJvdmlkZXI+ID0ge1xuICBnb29nbGU6IHtcbiAgICBuYW1lOiAnR29vZ2xlIDNEIFRpbGVzJyxcbiAgICB1cmxLZXk6ICdnb29nbGUnLFxuICAgIGF0dHJpYnV0aW9uOiB7XG4gICAgICB0aXRsZTogJ0J1aWx0IHdpdGggR29vZ2xlIE1hcHMuJyxcbiAgICAgIHVybDogJycsXG4gICAgICBsb2dvVXJsOlxuICAgICAgICAnaHR0cHM6Ly9zdHVkaW8tcHVibGljLWRhdGEuZm91cnNxdWFyZS5jb20vc3RhdGljcy9pbWFnZXMvZ29vZ2xlLXdhdGVybWFyay13aGl0ZS5wbmcnLFxuICAgICAgaGVpZ2h0OiAxNyxcbiAgICAgIGJvdHRvbTogMFxuICAgIH1cbiAgfSxcbiAgY2VzaXVtOiB7XG4gICAgbmFtZTogJ0Nlc2l1bSBpb24nLFxuICAgIHVybEtleTogJ2lvbi5jZXNpdW0nLFxuICAgIGF0dHJpYnV0aW9uOiB7dGl0bGU6ICdDZXNpdW0uJywgdXJsOiAnaHR0cHM6Ly9jZXNpdW0uY29tLycsIGhlaWdodDogMTksIGJvdHRvbTogMH1cbiAgfSxcbiAgYXJjZ2lzOiB7XG4gICAgbmFtZTogJ0FyY0dJUycsXG4gICAgdXJsS2V5OiAnYXJjZ2lzJyxcbiAgICBhdHRyaWJ1dGlvbjoge3RpdGxlOiAnUG93ZXJlZCBieSBFc3JpLicsIHVybDogJ2h0dHBzOi8vYXJjZ2lzLmNvbS8nLCBoZWlnaHQ6IDE2fVxuICB9XG59O1xuXG5leHBvcnQgdHlwZSBUaWxlM0REYXRhc2V0TWV0YWRhdGEgPSB7XG4gIHRpbGUzZFVybDogc3RyaW5nO1xuICB0aWxlM2RBY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgdGlsZTNkUHJvdmlkZXI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBCaXRtYXBCb3VuZHMgPVxuICB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG4gIHwgW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dO1xuXG5leHBvcnQgdHlwZSBCaXRtYXBEYXRhc2V0TWV0YWRhdGEgPSB7XG4gIGltYWdlVXJsOiBzdHJpbmc7XG4gIGJvdW5kczogQml0bWFwQm91bmRzO1xuICBpc0RhdGFVcmk/OiBib29sZWFuO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQSxXQUFZQSxXQUFXLDBCQUFYQSxXQUFXO0VBQVhBLFdBQVc7RUFBWEEsV0FBVztFQUFYQSxXQUFXO0VBQVhBLFdBQVc7RUFBWEEsV0FBVztFQUFYQSxXQUFXO0VBQVhBLFdBQVc7RUFBQSxPQUFYQSxXQUFXO0FBQUE7QUFVdkIsT0FBTyxJQUFNQyxtQkFBbUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFVO0FBR2xHLE9BQU8sSUFBTUMsc0JBQXlFLEdBQUc7RUFDdkZDLEdBQUcsRUFBRSxVQUFVO0VBQ2ZDLE9BQU8sRUFBRSxzQkFBc0I7RUFDL0JDLElBQUksRUFBRSxrQkFBa0I7RUFDeEJDLEtBQUssRUFBRSxtQ0FBbUM7RUFDMUNDLE9BQU8sRUFBRTtBQUNYLENBQUM7QUFFRCxPQUFPLElBQU1DLHNCQUF5RSxHQUFHO0VBQ3ZGTCxHQUFHLEVBQUUsS0FBSztFQUNWQyxPQUFPLEVBQUUsU0FBUztFQUNsQkMsSUFBSSxFQUFFLE1BQU07RUFDWkMsS0FBSyxFQUFFLE9BQU87RUFDZEMsT0FBTyxFQUFFO0FBQ1gsQ0FBQztBQUVELE9BQU8sSUFBTUUsNkJBQXFELEdBQUc7RUFDbkUsVUFBVSxFQUFFLEtBQUs7RUFDakIsMkJBQTJCLEVBQUUsS0FBSztFQUNsQyxzQkFBc0IsRUFBRSxTQUFTO0VBQ2pDLDBCQUEwQixFQUFFLFNBQVM7RUFDckMsa0JBQWtCLEVBQUUsTUFBTTtFQUMxQixtQ0FBbUMsRUFBRSxPQUFPO0VBQzVDLHFDQUFxQyxFQUFFLE9BQU87RUFDOUMsZ0NBQWdDLEVBQUUsU0FBUztFQUMzQyx1QkFBdUIsRUFBRTtBQUMzQixDQUFDO0FBRUQsT0FBTyxJQUFNQyxnQ0FBb0UsR0FBRyxDQUNsRjtFQUFDQyxLQUFLLEVBQUUsQ0FBQztFQUFFQyxPQUFPLEVBQUU7QUFBeUIsQ0FBQyxFQUM5QztFQUFDRCxLQUFLLEVBQUUsS0FBTTtFQUFFQyxPQUFPLEVBQUU7QUFBeUIsQ0FBQyxFQUNuRDtFQUFDRCxLQUFLLEVBQUUsS0FBTTtFQUFFQyxPQUFPLEVBQUU7QUFBeUIsQ0FBQyxFQUNuRDtFQUFDRCxLQUFLLEVBQUUsS0FBTTtFQUFFQyxPQUFPLEVBQUU7QUFBd0IsQ0FBQyxFQUNsRDtFQUFDRCxLQUFLLEVBQUUsTUFBTztFQUFFQyxPQUFPLEVBQUU7QUFBd0IsQ0FBQyxFQUNuRDtFQUFDRCxLQUFLLEVBQUUsTUFBTztFQUFFQyxPQUFPLEVBQUU7QUFBeUIsQ0FBQyxDQUNyRDs7QUFFRDtBQUNBLE9BQU8sSUFBTUMsNEJBQTRCLEdBQUcsUUFBUTtBQUNwRDtBQUNBLE9BQU8sSUFBTUMsaUNBQWlDLEdBQUcsS0FBTTtBQUN2RCxPQUFPLElBQU1DLCtCQUErQixHQUFHLEdBQUc7QUFFbEQsT0FBTyxTQUFTQyw4QkFBOEJBLENBQUNDLEVBQVUsRUFBVztFQUNsRSxPQUFPUCxnQ0FBZ0MsQ0FBQ1EsSUFBSSxDQUFDLFVBQUFDLE1BQU07SUFBQSxPQUFJQSxNQUFNLENBQUNSLEtBQUssS0FBS00sRUFBRTtFQUFBLEVBQUM7QUFDN0U7O0FBZUE7O0FBZUEsT0FBTyxTQUFTRywyQkFBMkJBLENBQUNDLFFBQXdDLEVBQVU7RUFDNUYsSUFBTVYsS0FBSyxHQUFHVSxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRUMsaUJBQWlCO0VBQ3pDLE9BQU8sT0FBT1gsS0FBSyxLQUFLLFFBQVEsSUFBSVksTUFBTSxDQUFDQyxRQUFRLENBQUNiLEtBQUssQ0FBQyxJQUFJQSxLQUFLLEdBQUcsQ0FBQyxHQUFHQSxLQUFLLEdBQUcsQ0FBQztBQUNyRjs7QUFFQTtBQUNBLE9BQU8sU0FBU2MsNEJBQTRCQSxDQUFDQyxXQUFtQixFQUFpQjtFQUMvRSxJQUFNQyxPQUFPLEdBQUdKLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDRixXQUFXLENBQUM7RUFDOUMsSUFBSSxDQUFDSCxNQUFNLENBQUNDLFFBQVEsQ0FBQ0csT0FBTyxDQUFDLElBQUlBLE9BQU8sSUFBSSxDQUFDLEVBQUU7SUFDN0MsT0FBTyxJQUFJO0VBQ2I7RUFDQSxPQUFPRSxJQUFJLENBQUNDLEdBQUcsQ0FBQ2YsK0JBQStCLEVBQUVjLElBQUksQ0FBQ0UsS0FBSyxDQUFDSixPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUU7O0FBRUE7QUFDQSxPQUFPLFNBQVNLLDBCQUEwQkEsQ0FBQ2YsRUFBVSxFQUFVO0VBQzdELElBQU1VLE9BQU8sR0FBR0UsSUFBSSxDQUFDQyxHQUFHLENBQUNmLCtCQUErQixFQUFFRSxFQUFFLENBQUMsR0FBRyxJQUFJO0VBQ3BFLElBQUlNLE1BQU0sQ0FBQ1UsU0FBUyxDQUFDTixPQUFPLENBQUMsRUFBRTtJQUM3QixPQUFPTyxNQUFNLENBQUNQLE9BQU8sQ0FBQztFQUN4QjtFQUNBLE9BQU9PLE1BQU0sQ0FBQ1gsTUFBTSxDQUFDSSxPQUFPLENBQUNRLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDO0FBRUEsT0FBTyxTQUFTQyxxQkFBcUJBLENBQUNmLFFBR3JDLEVBQXNCO0VBQ3JCLElBQU1nQixTQUFTLEdBQ1osUUFBT2hCLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFaUIsWUFBWSxNQUFLLFFBQVEsSUFBSWpCLFFBQVEsQ0FBQ2lCLFlBQVksSUFDbkUsUUFBT2pCLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFa0IsTUFBTSxNQUFLLFFBQVEsSUFBSWxCLFFBQVEsQ0FBQ2tCLE1BQU8sSUFDekRDLFNBQVM7RUFDWCxJQUNFSCxTQUFTLElBQ1RBLFNBQVMsS0FBSyxNQUFNLElBQ3BCSSxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNwQyxzQkFBc0IsRUFBRTZCLFNBQVMsQ0FBQyxFQUN2RTtJQUNBLE9BQU9BLFNBQVM7RUFDbEI7RUFDQSxPQUFPRyxTQUFTO0FBQ2xCO0FBRUEsV0FBWUssZ0JBQWdCLDBCQUFoQkEsZ0JBQWdCO0VBQWhCQSxnQkFBZ0I7RUFBaEJBLGdCQUFnQjtFQUFoQkEsZ0JBQWdCO0VBQUEsT0FBaEJBLGdCQUFnQjtBQUFBO0FBTTVCLFdBQVlDLFdBQVcsMEJBQVhBLFdBQVc7RUFBWEEsV0FBVztFQUFYQSxXQUFXO0VBQUEsT0FBWEEsV0FBVztBQUFBO0FBS3ZCLE9BQU8sSUFBTUMsV0FBVyxHQUFHLFFBQVE7O0FBU25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFXQTtBQUNBO0FBQ0E7QUFDQTs7QUFLQSxXQUFZQyxjQUFjLDBCQUFkQSxjQUFjO0VBQWRBLGNBQWM7RUFBZEEsY0FBYztFQUFBLE9BQWRBLGNBQWM7QUFBQTs7QUFTMUI7QUFDQTtBQUNBOztBQTZCQSxPQUFPLElBQU1DLGdCQUFnRCxHQUFHO0VBQzlEQyxNQUFNLEVBQUU7SUFDTkMsSUFBSSxFQUFFLGlCQUFpQjtJQUN2QkMsTUFBTSxFQUFFLFFBQVE7SUFDaEJDLFdBQVcsRUFBRTtNQUNYQyxLQUFLLEVBQUUseUJBQXlCO01BQ2hDQyxHQUFHLEVBQUUsRUFBRTtNQUNQQyxPQUFPLEVBQ0wscUZBQXFGO01BQ3ZGQyxNQUFNLEVBQUUsRUFBRTtNQUNWQyxNQUFNLEVBQUU7SUFDVjtFQUNGLENBQUM7RUFDREMsTUFBTSxFQUFFO0lBQ05SLElBQUksRUFBRSxZQUFZO0lBQ2xCQyxNQUFNLEVBQUUsWUFBWTtJQUNwQkMsV0FBVyxFQUFFO01BQUNDLEtBQUssRUFBRSxTQUFTO01BQUVDLEdBQUcsRUFBRSxxQkFBcUI7TUFBRUUsTUFBTSxFQUFFLEVBQUU7TUFBRUMsTUFBTSxFQUFFO0lBQUM7RUFDbkYsQ0FBQztFQUNERSxNQUFNLEVBQUU7SUFDTlQsSUFBSSxFQUFFLFFBQVE7SUFDZEMsTUFBTSxFQUFFLFFBQVE7SUFDaEJDLFdBQVcsRUFBRTtNQUFDQyxLQUFLLEVBQUUsa0JBQWtCO01BQUVDLEdBQUcsRUFBRSxxQkFBcUI7TUFBRUUsTUFBTSxFQUFFO0lBQUU7RUFDakY7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
|