@kepler.gl/constants 3.3.0-alpha.4 → 3.3.0-alpha.6

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.
Files changed (44) hide show
  1. package/dist/cjs/annotation.js +45 -0
  2. package/dist/cjs/color-palettes.js +461 -0
  3. package/dist/cjs/colors-by-theme.js +519 -0
  4. package/dist/cjs/dataset.js +82 -0
  5. package/dist/cjs/default-settings.js +1729 -0
  6. package/dist/cjs/gpu-parameters.js +125 -0
  7. package/dist/cjs/index.js +149 -0
  8. package/dist/cjs/keyevent.js +26 -0
  9. package/dist/cjs/layers.js +605 -0
  10. package/dist/{plot.js → cjs/plot.js} +1 -1
  11. package/dist/cjs/time.js +194 -0
  12. package/dist/cjs/tooltip.js +221 -0
  13. package/dist/cjs/user-feedbacks.js +15 -0
  14. package/dist/cjs/user-guides.js +19 -0
  15. package/dist/esm/annotation.js +38 -0
  16. package/dist/esm/color-palettes.js +453 -0
  17. package/dist/esm/colors-by-theme.js +513 -0
  18. package/dist/esm/dataset.js +80 -0
  19. package/dist/esm/default-settings.js +1723 -0
  20. package/dist/esm/gpu-parameters.js +119 -0
  21. package/dist/esm/index.js +18 -0
  22. package/dist/esm/keyevent.js +19 -0
  23. package/dist/esm/layers.js +598 -0
  24. package/dist/esm/plot.js +9 -0
  25. package/dist/esm/time.js +190 -0
  26. package/dist/esm/tooltip.js +215 -0
  27. package/dist/esm/user-feedbacks.js +9 -0
  28. package/dist/esm/user-guides.js +13 -0
  29. package/package.json +17 -10
  30. package/dist/annotation.js +0 -45
  31. package/dist/color-palettes.js +0 -461
  32. package/dist/colors-by-theme.js +0 -519
  33. package/dist/dataset.js +0 -82
  34. package/dist/default-settings.js +0 -1729
  35. package/dist/gpu-parameters.js +0 -125
  36. package/dist/index.js +0 -149
  37. package/dist/keyevent.js +0 -26
  38. package/dist/layers.js +0 -605
  39. package/dist/time.js +0 -194
  40. package/dist/tooltip.js +0 -221
  41. package/dist/user-feedbacks.js +0 -15
  42. package/dist/user-guides.js +0 -19
  43. package/umd/keplergl.min.js +0 -2
  44. package/umd/keplergl.min.js.LICENSE.txt +0 -56
@@ -0,0 +1,1723 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
+ var _FIELD_TYPE_DISPLAY, _FIELD_OPTS;
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
+ // SPDX-License-Identifier: MIT
8
+ // Copyright contributors to the kepler.gl project
9
+
10
+ import keyMirror from 'keymirror';
11
+ import { scaleLinear, scaleLog, scaleOrdinal, scalePoint, scaleQuantile, scaleQuantize, scaleSqrt, scaleThreshold } from 'd3-scale';
12
+ import { TOOLTIP_FORMAT_TYPES } from './tooltip';
13
+ export var ACTION_PREFIX = '@@kepler.gl/';
14
+ export var KEPLER_UNFOLDED_BUCKET = 'https://studio-public-data.foursquare.com/statics/keplergl';
15
+ export var BASEMAP_ICON_PREFIX = "geodude";
16
+ export var DEFAULT_MAPBOX_API_URL = 'https://api.mapbox.com';
17
+ export var TRANSITION_DURATION = 0;
18
+
19
+ // Modal Ids
20
+ /**
21
+ * Modal id: data table
22
+ * @constant
23
+ * @type {string}
24
+ * @public
25
+ */
26
+ export var DATA_TABLE_ID = 'dataTable';
27
+ /**
28
+ * Modal id: delete dataset confirm dialog
29
+ * @constant
30
+ * @type {string}
31
+ * @public
32
+ */
33
+ export var DELETE_DATA_ID = 'deleteData';
34
+ /**
35
+ * Modal id: add data modal
36
+ * @constant
37
+ * @type {string}
38
+ * @public
39
+ */
40
+ export var ADD_DATA_ID = 'addData';
41
+ /**
42
+ * Modal id: export image modal
43
+ * @constant
44
+ * @type {string}
45
+ * @public
46
+ */
47
+ export var EXPORT_IMAGE_ID = 'exportImage';
48
+ /**
49
+ * Modal id: export data modal
50
+ * @constant
51
+ * @type {string}
52
+ * @public
53
+ */
54
+ export var EXPORT_DATA_ID = 'exportData';
55
+ /**
56
+ * Modal id: add custom map style modal
57
+ * @constant
58
+ * @type {string}
59
+ * @public
60
+ */
61
+ export var ADD_MAP_STYLE_ID = 'addMapStyle';
62
+ /**
63
+ * Modal id: export map modal
64
+ * @constant
65
+ * @type {string}
66
+ * @public
67
+ */
68
+ export var EXPORT_MAP_ID = 'exportMap';
69
+ /**
70
+ * Modal id: export video modal
71
+ * @constant
72
+ * @type {string}
73
+ * @public
74
+ */
75
+ export var EXPORT_VIDEO_ID = 'exportVideo';
76
+ /**
77
+ * Modal id: save map modal
78
+ * @constant
79
+ * @type {string}
80
+ * @public
81
+ */
82
+ export var SAVE_MAP_ID = 'saveMap';
83
+ /**
84
+ * Modal id: confirm to overwrite saved map
85
+ * @constant
86
+ * @type {string}
87
+ * @public
88
+ */
89
+ export var OVERWRITE_MAP_ID = 'overwriteMap';
90
+ /**
91
+ * Modal id: share map url modal
92
+ * @constant
93
+ * @type {string}
94
+ * @public
95
+ */
96
+ export var SHARE_MAP_ID = 'shareMap';
97
+ export var KEPLER_GL_NAME = 'kepler.gl';
98
+
99
+ // __PACKAGE_VERSION__ is automatically injected by Babel/Esbuild during the build process
100
+ // Since we are injecting this during the build process with babel
101
+ // while developing VERSION is not defined, we capture the exception and return
102
+ // an empty string which will allow us to retrieve the latest umd version
103
+ export var KEPLER_GL_VERSION = "3.3.0-alpha.6";
104
+ export var KEPLER_GL_WEBSITE = 'http://kepler.gl/';
105
+ export var DIMENSIONS = {
106
+ sidePanel: {
107
+ width: 300,
108
+ margin: {
109
+ top: 12,
110
+ left: 12,
111
+ bottom: 12,
112
+ right: 20
113
+ },
114
+ headerHeight: 96
115
+ },
116
+ mapControl: {
117
+ width: 184,
118
+ padding: 12,
119
+ mapLegend: {
120
+ pinned: {
121
+ bottom: 22,
122
+ right: 12
123
+ }
124
+ }
125
+ }
126
+ };
127
+
128
+ /**
129
+ * Theme name that can be passed to `KeplerGl` `prop.theme`.
130
+ * Available themes are `THEME.light` and `THEME.dark`. Default theme is `THEME.dark`
131
+ * @constant
132
+ * @type {object}
133
+ * @public
134
+ * @example
135
+ * ```js
136
+ * const Map = () => <KeplerGl theme={THEME.light} id="map"/>
137
+ * ```
138
+ */
139
+ export var THEME = keyMirror({
140
+ light: null,
141
+ dark: null,
142
+ base: null
143
+ });
144
+ export var SIDEBAR_PANELS = [{
145
+ id: 'layer',
146
+ label: 'sidebar.panels.layer',
147
+ onClick: null
148
+ }, {
149
+ id: 'filter',
150
+ label: 'sidebar.panels.filter',
151
+ onClick: null
152
+ }, {
153
+ id: 'interaction',
154
+ label: 'sidebar.panels.interaction',
155
+ onClick: null
156
+ }, {
157
+ id: 'map',
158
+ label: 'sidebar.panels.basemap',
159
+ onClick: null
160
+ }];
161
+ export var PANEL_VIEW_TOGGLES = keyMirror({
162
+ list: null,
163
+ byDataset: null
164
+ });
165
+
166
+ // backward compatibility
167
+ export var PANELS = SIDEBAR_PANELS;
168
+
169
+ // MAP STYLES
170
+
171
+ export var DEFAULT_BLDG_COLOR = '#D1CEC7';
172
+ export var DEFAULT_BACKGROUND_COLOR = '#000000';
173
+
174
+ // assists in identifying basemap background layers when auto-determining the backgroundColor
175
+ export var BASE_MAP_BACKGROUND_LAYER_IDS = ['background', 'bg', 'land', 'water'];
176
+ export var BACKGROUND_LAYER_GROUP_SLUG = 'Background';
177
+ export var THREE_D_BUILDING_LAYER_GROUP_SLUG = '3d building';
178
+ export var BACKGROUND_LAYER_GROUP = {
179
+ slug: BACKGROUND_LAYER_GROUP_SLUG,
180
+ filter: function filter() {
181
+ return false;
182
+ },
183
+ defaultVisibility: false,
184
+ isVisibilityToggleAvailable: false,
185
+ isMoveToTopAvailable: false,
186
+ isColorPickerAvailable: true
187
+ };
188
+ export var DEFAULT_LAYER_GROUPS = [{
189
+ slug: 'label',
190
+ filter: function filter(_ref) {
191
+ var id = _ref.id,
192
+ type = _ref.type;
193
+ return id.match(/(?=(label|place-|poi-))/) || (type === null || type === void 0 ? void 0 : type.match(/(?=(symbol))/));
194
+ },
195
+ defaultVisibility: true,
196
+ isVisibilityToggleAvailable: true,
197
+ isMoveToTopAvailable: true,
198
+ isColorPickerAvailable: false
199
+ }, {
200
+ slug: 'road',
201
+ filter: function filter(_ref2) {
202
+ var id = _ref2.id;
203
+ return id.match(/(?=(road|railway|tunnel|street|bridge))(?!.*label)/);
204
+ },
205
+ defaultVisibility: true,
206
+ isVisibilityToggleAvailable: true,
207
+ isMoveToTopAvailable: true,
208
+ isColorPickerAvailable: false
209
+ }, {
210
+ slug: 'border',
211
+ filter: function filter(_ref3) {
212
+ var id = _ref3.id;
213
+ return id.match(/border|boundaries|boundary/);
214
+ },
215
+ defaultVisibility: false,
216
+ isVisibilityToggleAvailable: true,
217
+ isMoveToTopAvailable: true,
218
+ isColorPickerAvailable: false
219
+ }, {
220
+ slug: 'building',
221
+ filter: function filter(_ref4) {
222
+ var id = _ref4.id;
223
+ return id.match(/building/);
224
+ },
225
+ defaultVisibility: true,
226
+ isVisibilityToggleAvailable: true,
227
+ isMoveToTopAvailable: true,
228
+ isColorPickerAvailable: false
229
+ }, {
230
+ slug: 'water',
231
+ filter: function filter(_ref5) {
232
+ var id = _ref5.id;
233
+ return id.match(/(?=(water|stream|ferry))/);
234
+ },
235
+ defaultVisibility: true,
236
+ isVisibilityToggleAvailable: true,
237
+ isMoveToTopAvailable: true,
238
+ isColorPickerAvailable: false
239
+ }, {
240
+ slug: 'land',
241
+ filter: function filter(_ref6) {
242
+ var id = _ref6.id;
243
+ return id.match(/(?=(parks|landcover|industrial|sand|hillshade))/);
244
+ },
245
+ defaultVisibility: true,
246
+ isVisibilityToggleAvailable: true,
247
+ isMoveToTopAvailable: true,
248
+ isColorPickerAvailable: false
249
+ }, {
250
+ slug: THREE_D_BUILDING_LAYER_GROUP_SLUG,
251
+ filter: function filter() {
252
+ return false;
253
+ },
254
+ defaultVisibility: false,
255
+ isVisibilityToggleAvailable: true,
256
+ isMoveToTopAvailable: true,
257
+ isColorPickerAvailable: true
258
+ }];
259
+ export var BASE_MAP_COLOR_MODES = keyMirror({
260
+ NONE: null,
261
+ DARK: null,
262
+ LIGHT: null
263
+ });
264
+ export var NO_MAP_ID = 'no_map';
265
+
266
+ // Fallback style to use when styles are being fetched, or when
267
+ // a style fails to fetch
268
+ export var EMPTY_MAPBOX_STYLE = {
269
+ version: 8,
270
+ sources: {},
271
+ layers: []
272
+ };
273
+ export var MAP_LIB_OPTIONS = {
274
+ MAPBOX: 'mapbox',
275
+ MAPLIBRE: 'maplibre'
276
+ };
277
+
278
+ /** Mapbox GL JS does not support pitch above 60 degrees */
279
+ export var MAPBOX_MAX_PITCH = 60;
280
+ export var NO_BASEMAP_ICON = "".concat(BASEMAP_ICON_PREFIX, "/NO_BASEMAP.png");
281
+ export var DEFAULT_BASE_MAP_STYLE = 'dark-matter';
282
+ export var DEFAULT_NO_BASEMAP_STYLE = {
283
+ id: NO_MAP_ID,
284
+ label: 'No Basemap',
285
+ url: '',
286
+ icon: NO_BASEMAP_ICON,
287
+ layerGroups: [BACKGROUND_LAYER_GROUP],
288
+ colorMode: BASE_MAP_COLOR_MODES.NONE,
289
+ style: EMPTY_MAPBOX_STYLE
290
+ };
291
+ export var DEFAULT_MAPBOX_STYLES = [{
292
+ id: 'dark',
293
+ label: 'Dark',
294
+ url: 'mapbox://styles/uberdata/cjoqbbf6l9k302sl96tyvka09',
295
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_DARK_V2.png"),
296
+ layerGroups: DEFAULT_LAYER_GROUPS,
297
+ colorMode: BASE_MAP_COLOR_MODES.DARK,
298
+ complimentaryStyleId: 'light'
299
+ }, {
300
+ id: 'light',
301
+ label: 'Light',
302
+ url: 'mapbox://styles/uberdata/cjoqb9j339k1f2sl9t5ic5bn4',
303
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_LIGHT_V2.png"),
304
+ layerGroups: DEFAULT_LAYER_GROUPS,
305
+ colorMode: BASE_MAP_COLOR_MODES.LIGHT,
306
+ complimentaryStyleId: 'dark'
307
+ }, {
308
+ id: 'muted',
309
+ label: 'Muted Light',
310
+ url: 'mapbox://styles/uberdata/cjfyl03kp1tul2smf5v2tbdd4',
311
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_MUTED_LIGHT.png"),
312
+ layerGroups: DEFAULT_LAYER_GROUPS,
313
+ colorMode: BASE_MAP_COLOR_MODES.LIGHT,
314
+ complimentaryStyleId: 'muted_night'
315
+ }, {
316
+ id: 'muted_night',
317
+ label: 'Muted Night',
318
+ url: 'mapbox://styles/uberdata/cjfxhlikmaj1b2soyzevnywgs',
319
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_MUTED_NIGHT.png"),
320
+ layerGroups: DEFAULT_LAYER_GROUPS,
321
+ colorMode: BASE_MAP_COLOR_MODES.DARK,
322
+ complimentaryStyleId: 'muted'
323
+ }];
324
+ export var DEFAULT_MAPBOX_SATELITE_STYLES = [{
325
+ id: 'satellite',
326
+ label: 'Satellite with streets',
327
+ url: "mapbox://styles/mapbox/satellite-streets-v11",
328
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_SATELLITE.png"),
329
+ layerGroups: DEFAULT_LAYER_GROUPS,
330
+ colorMode: BASE_MAP_COLOR_MODES.NONE
331
+ }];
332
+ export var DEFAULT_MAPLIBRE_STYLES = [{
333
+ id: 'dark-matter',
334
+ label: 'DarkMatter',
335
+ url: 'https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json',
336
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/DARKMATTER.png"),
337
+ layerGroups: DEFAULT_LAYER_GROUPS,
338
+ colorMode: BASE_MAP_COLOR_MODES.DARK,
339
+ complimentaryStyleId: 'positron'
340
+ }, {
341
+ id: 'positron',
342
+ label: 'Positron',
343
+ url: 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json',
344
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/POSITRON.png"),
345
+ layerGroups: DEFAULT_LAYER_GROUPS,
346
+ colorMode: BASE_MAP_COLOR_MODES.LIGHT,
347
+ complimentaryStyleId: 'dark-matter'
348
+ }, {
349
+ id: 'voyager',
350
+ label: 'Voyager',
351
+ url: 'https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json',
352
+ icon: "".concat(BASEMAP_ICON_PREFIX, "/VOYAGER.png"),
353
+ layerGroups: DEFAULT_LAYER_GROUPS,
354
+ colorMode: BASE_MAP_COLOR_MODES.LIGHT,
355
+ complimentaryStyleId: 'dark-matter'
356
+ }];
357
+ export var DEFAULT_MAP_STYLES = [DEFAULT_NO_BASEMAP_STYLE].concat(DEFAULT_MAPLIBRE_STYLES, DEFAULT_MAPBOX_SATELITE_STYLES, DEFAULT_MAPBOX_STYLES);
358
+ export var GEOJSON_FIELDS = {
359
+ geojson: ['_geojson', 'all_points', 'geojson']
360
+ };
361
+ export var ICON_FIELDS = {
362
+ icon: ['icon']
363
+ };
364
+ export var TRIP_POINT_FIELDS = [['lat', 'lng'], ['lat', 'lon'], ['lat', 'long'], ['latitude', 'longitude']];
365
+ export var ALTITUDE_FIELDS = ['alt', 'altitude'];
366
+ export var TRIP_ARC_FIELDS = {
367
+ lat0: 'begintrip',
368
+ lng0: 'begintrip',
369
+ lat1: 'dropoff',
370
+ lng1: 'dropoff'
371
+ };
372
+ export var FILTER_TYPES = keyMirror({
373
+ range: null,
374
+ select: null,
375
+ input: null,
376
+ timeRange: null,
377
+ multiSelect: null,
378
+ polygon: null
379
+ });
380
+ export var FILTER_VIEW_TYPES = keyMirror({
381
+ side: null,
382
+ enlarged: null,
383
+ minified: null
384
+ });
385
+ export var DEFAULT_FILTER_VIEW_TYPE = FILTER_VIEW_TYPES.side;
386
+ export var SCALE_TYPES = keyMirror({
387
+ ordinal: null,
388
+ quantile: null,
389
+ quantize: null,
390
+ linear: null,
391
+ sqrt: null,
392
+ log: null,
393
+ threshold: null,
394
+ custom: null,
395
+ customOrdinal: null,
396
+ // ordinal domain to linear range
397
+ point: null
398
+ });
399
+ export var SCALE_TYPE_NAMES = {
400
+ ordinal: 'Ordinal',
401
+ quantile: 'Quantile',
402
+ quantize: 'Quantize',
403
+ linear: 'Linear',
404
+ sqrt: 'Sqrt',
405
+ log: 'Log',
406
+ threshold: 'Threshold',
407
+ custom: 'Custom Breaks',
408
+ customOrdinal: 'Custom Ordinal',
409
+ point: 'Point'
410
+ };
411
+ export var SCALE_FUNC = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, SCALE_TYPES.linear, scaleLinear), SCALE_TYPES.quantize, scaleQuantize), SCALE_TYPES.quantile, scaleQuantile), SCALE_TYPES.ordinal, scaleOrdinal), SCALE_TYPES.sqrt, scaleSqrt), SCALE_TYPES.log, scaleLog), SCALE_TYPES.point, scalePoint), SCALE_TYPES.threshold, scaleThreshold), SCALE_TYPES.custom, scaleThreshold), SCALE_TYPES.customOrdinal, scaleOrdinal);
412
+ export var ALL_FIELD_TYPES = keyMirror({
413
+ "boolean": null,
414
+ date: null,
415
+ geojson: null,
416
+ integer: null,
417
+ real: null,
418
+ string: null,
419
+ timestamp: null,
420
+ point: null,
421
+ array: null,
422
+ object: null,
423
+ geoarrow: null,
424
+ h3: null
425
+ });
426
+
427
+ // Data Table
428
+ export var SORT_ORDER = keyMirror({
429
+ ASCENDING: null,
430
+ DESCENDING: null,
431
+ UNSORT: null
432
+ });
433
+ export var TABLE_OPTION = keyMirror({
434
+ SORT_ASC: null,
435
+ SORT_DES: null,
436
+ UNSORT: null,
437
+ PIN: null,
438
+ UNPIN: null,
439
+ COPY: null,
440
+ FORMAT_COLUMN: null
441
+ });
442
+ export var TABLE_OPTION_LIST = [{
443
+ value: TABLE_OPTION.SORT_ASC,
444
+ display: 'Sort Ascending',
445
+ icon: 'ArrowUp',
446
+ condition: function condition(props) {
447
+ return props.sortTableColumn && props.sortMode !== SORT_ORDER.ASCENDING;
448
+ }
449
+ }, {
450
+ value: TABLE_OPTION.SORT_DES,
451
+ display: 'Sort Descending',
452
+ icon: 'ArrowDown',
453
+ condition: function condition(props) {
454
+ return props.sortTableColumn && props.sortMode !== SORT_ORDER.DESCENDING;
455
+ }
456
+ }, {
457
+ value: TABLE_OPTION.UNSORT,
458
+ display: 'Unsort Column',
459
+ icon: 'Cancel',
460
+ condition: function condition(props) {
461
+ return props.isSorted;
462
+ }
463
+ }, {
464
+ value: TABLE_OPTION.PIN,
465
+ display: 'Pin Column',
466
+ icon: 'Pin',
467
+ condition: function condition(props) {
468
+ return !props.isPinned;
469
+ }
470
+ }, {
471
+ value: TABLE_OPTION.UNPIN,
472
+ display: 'Unpin Column',
473
+ icon: 'Cancel',
474
+ condition: function condition(props) {
475
+ return props.isPinned;
476
+ }
477
+ }, {
478
+ value: TABLE_OPTION.COPY,
479
+ display: 'Copy Column',
480
+ icon: 'Clipboard'
481
+ }, {
482
+ value: TABLE_OPTION.FORMAT_COLUMN,
483
+ display: 'Format Column',
484
+ icon: 'Hash',
485
+ condition: function condition(props) {
486
+ return props.setDisplayFormat;
487
+ }
488
+ }];
489
+ var YELLOW = '248, 194, 28';
490
+ var PINK = '242, 152, 163';
491
+ var PURPLE = '160, 106, 206';
492
+ var BLUE = '140, 210, 205';
493
+ var BLUE2 = '106, 160, 206';
494
+ var BLUE3 = '0, 172, 237';
495
+ var GREEN = '106, 160, 56';
496
+ var GREEN2 = '74, 165, 150';
497
+ var RED = '237, 88, 106';
498
+ var ORANGE = '231, 110, 58';
499
+ export var FIELD_TYPE_DISPLAY = (_FIELD_TYPE_DISPLAY = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_FIELD_TYPE_DISPLAY, ALL_FIELD_TYPES["boolean"], {
500
+ label: 'bool',
501
+ color: PINK
502
+ }), ALL_FIELD_TYPES.date, {
503
+ label: 'date',
504
+ color: PURPLE
505
+ }), ALL_FIELD_TYPES.geojson, {
506
+ label: 'geo',
507
+ color: BLUE2
508
+ }), ALL_FIELD_TYPES.geoarrow, {
509
+ label: 'geo',
510
+ color: BLUE2
511
+ }), ALL_FIELD_TYPES.integer, {
512
+ label: 'int',
513
+ color: YELLOW
514
+ }), ALL_FIELD_TYPES.real, {
515
+ label: 'float',
516
+ color: YELLOW
517
+ }), ALL_FIELD_TYPES.string, {
518
+ label: 'string',
519
+ color: BLUE
520
+ }), ALL_FIELD_TYPES.timestamp, {
521
+ label: 'time',
522
+ color: GREEN
523
+ }), ALL_FIELD_TYPES.point, {
524
+ label: 'point',
525
+ color: BLUE3
526
+ }), ALL_FIELD_TYPES.array, {
527
+ label: 'array',
528
+ color: ORANGE
529
+ }), _defineProperty(_defineProperty(_FIELD_TYPE_DISPLAY, ALL_FIELD_TYPES.object, {
530
+ label: 'object',
531
+ color: GREEN2
532
+ }), ALL_FIELD_TYPES.h3, {
533
+ label: 'h3',
534
+ color: BLUE
535
+ }));
536
+ export var FIELD_COLORS = {
537
+ "default": RED
538
+ };
539
+ export var HIGHLIGH_COLOR_3D = [255, 255, 255, 60];
540
+ export var CHANNEL_SCALES = keyMirror({
541
+ color: null,
542
+ radius: null,
543
+ size: null,
544
+ colorAggr: null,
545
+ sizeAggr: null,
546
+ angle: null
547
+ });
548
+ export var AGGREGATION_TYPES = {
549
+ // default
550
+ count: 'count',
551
+ // linear
552
+ average: 'average',
553
+ maximum: 'maximum',
554
+ minimum: 'minimum',
555
+ median: 'median',
556
+ stdev: 'stdev',
557
+ sum: 'sum',
558
+ variance: 'variance',
559
+ // ordinal
560
+ mode: 'mode',
561
+ countUnique: 'countUnique'
562
+ };
563
+ export var AGGREGATION_TYPE_OPTIONS = Object.entries(AGGREGATION_TYPES).map(function (_ref7) {
564
+ var _ref8 = _slicedToArray(_ref7, 2),
565
+ key = _ref8[0],
566
+ value = _ref8[1];
567
+ return {
568
+ id: key,
569
+ label: key === 'stdev' ? 'Std Deviation' : key === 'countUnique' ? 'Count Unique' : typeof value === 'string' ? value.charAt(0).toUpperCase() + value.slice(1) : value
570
+ };
571
+ });
572
+ export var linearFieldScaleFunctions = _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, CHANNEL_SCALES.color, [SCALE_TYPES.quantize, SCALE_TYPES.quantile, SCALE_TYPES.custom]), CHANNEL_SCALES.radius, [SCALE_TYPES.sqrt]), CHANNEL_SCALES.size, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), CHANNEL_SCALES.angle, [SCALE_TYPES.linear]);
573
+ var DEFAULT_AGGREGATION_COLOR_SCALES = [SCALE_TYPES.quantize, SCALE_TYPES.quantile, SCALE_TYPES.custom];
574
+ export var linearFieldAggrScaleFunctions = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, [AGGREGATION_TYPES.average, AGGREGATION_TYPES.maximum, AGGREGATION_TYPES.minimum, AGGREGATION_TYPES.median, AGGREGATION_TYPES.stdev, AGGREGATION_TYPES.sum, AGGREGATION_TYPES.variance, AGGREGATION_TYPES.count].reduce(function (prev, cur) {
575
+ prev[cur] = DEFAULT_AGGREGATION_COLOR_SCALES;
576
+ return prev;
577
+ }, {})), CHANNEL_SCALES.sizeAggr, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, AGGREGATION_TYPES.average, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.maximum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.minimum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.median, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.stdev, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.sum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.variance, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]));
578
+ export var ordinalFieldScaleFunctions = _defineProperty(_defineProperty(_defineProperty({}, CHANNEL_SCALES.color, [SCALE_TYPES.ordinal, SCALE_TYPES.customOrdinal]), CHANNEL_SCALES.radius, [SCALE_TYPES.point]), CHANNEL_SCALES.size, [SCALE_TYPES.point]);
579
+ export var ordinalFieldAggrScaleFunctions = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, _defineProperty(_defineProperty({}, AGGREGATION_TYPES.mode, [SCALE_TYPES.ordinal]), AGGREGATION_TYPES.countUnique, [SCALE_TYPES.quantize, SCALE_TYPES.quantile])), CHANNEL_SCALES.sizeAggr, {});
580
+ export var notSupportedScaleOpts = _defineProperty(_defineProperty(_defineProperty({}, CHANNEL_SCALES.color, []), CHANNEL_SCALES.radius, []), CHANNEL_SCALES.size, []);
581
+ export var notSupportAggrOpts = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, {}), CHANNEL_SCALES.sizeAggr, {});
582
+
583
+ /**
584
+ * Default aggregation are based on ocunt
585
+ */
586
+ export var DEFAULT_AGGREGATION = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, _defineProperty({}, AGGREGATION_TYPES.count, DEFAULT_AGGREGATION_COLOR_SCALES)), CHANNEL_SCALES.sizeAggr, _defineProperty({}, AGGREGATION_TYPES.count, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]));
587
+
588
+ /**
589
+ * Define what type of scale operation is allowed on each type of fields
590
+ */
591
+ export var FIELD_OPTS = (_FIELD_OPTS = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_FIELD_OPTS, ALL_FIELD_TYPES.string, {
592
+ type: 'categorical',
593
+ scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
594
+ format: {
595
+ legend: function legend(d) {
596
+ return d;
597
+ },
598
+ tooltip: []
599
+ }
600
+ }), ALL_FIELD_TYPES.real, {
601
+ type: 'numerical',
602
+ scale: _objectSpread(_objectSpread({}, linearFieldScaleFunctions), linearFieldAggrScaleFunctions),
603
+ format: {
604
+ legend: function legend(d) {
605
+ return d;
606
+ },
607
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DECIMAL, TOOLTIP_FORMAT_TYPES.PERCENTAGE]
608
+ }
609
+ }), ALL_FIELD_TYPES.timestamp, {
610
+ type: 'time',
611
+ scale: _objectSpread(_objectSpread({}, linearFieldScaleFunctions), notSupportAggrOpts),
612
+ format: {
613
+ legend: function legend(d) {
614
+ return d;
615
+ },
616
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DATE, TOOLTIP_FORMAT_TYPES.DATE_TIME]
617
+ }
618
+ }), ALL_FIELD_TYPES.integer, {
619
+ type: 'numerical',
620
+ scale: _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, linearFieldScaleFunctions), {}, _defineProperty({}, CHANNEL_SCALES.color, [].concat(_toConsumableArray(linearFieldScaleFunctions[CHANNEL_SCALES.color]), [SCALE_TYPES.customOrdinal])))), linearFieldAggrScaleFunctions),
621
+ format: {
622
+ legend: function legend(d) {
623
+ return d;
624
+ },
625
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DECIMAL, TOOLTIP_FORMAT_TYPES.PERCENTAGE]
626
+ }
627
+ }), ALL_FIELD_TYPES["boolean"], {
628
+ type: 'boolean',
629
+ scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
630
+ format: {
631
+ legend: function legend(d) {
632
+ return d;
633
+ },
634
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.BOOLEAN]
635
+ }
636
+ }), ALL_FIELD_TYPES.date, {
637
+ type: 'time',
638
+ scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
639
+ format: {
640
+ legend: function legend(d) {
641
+ return d;
642
+ },
643
+ tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DATE]
644
+ }
645
+ }), ALL_FIELD_TYPES.geojson, {
646
+ type: 'geometry',
647
+ scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
648
+ format: {
649
+ legend: function legend() {
650
+ return '...';
651
+ },
652
+ tooltip: []
653
+ }
654
+ }), ALL_FIELD_TYPES.geoarrow, {
655
+ type: 'geometry',
656
+ scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
657
+ format: {
658
+ legend: function legend() {
659
+ return '...';
660
+ },
661
+ tooltip: []
662
+ }
663
+ }), ALL_FIELD_TYPES.object, {
664
+ type: 'numerical',
665
+ scale: {},
666
+ format: {
667
+ legend: function legend() {
668
+ return '...';
669
+ },
670
+ tooltip: []
671
+ }
672
+ }), ALL_FIELD_TYPES.array, {
673
+ type: 'numerical',
674
+ scale: {},
675
+ format: {
676
+ legend: function legend() {
677
+ return '...';
678
+ },
679
+ tooltip: []
680
+ }
681
+ }), _defineProperty(_FIELD_OPTS, ALL_FIELD_TYPES.h3, {
682
+ type: 'h3',
683
+ scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
684
+ format: {
685
+ legend: function legend() {
686
+ return '...';
687
+ },
688
+ tooltip: []
689
+ }
690
+ }));
691
+ export var CHANNEL_SCALE_SUPPORTED_FIELDS = Object.keys(CHANNEL_SCALES).reduce(function (accu, key) {
692
+ return _objectSpread(_objectSpread({}, accu), {}, _defineProperty({}, key, Object.keys(FIELD_OPTS).filter(function (ft) {
693
+ return FIELD_OPTS[ft].scale[key] && Object.keys(FIELD_OPTS[ft].scale[key]).length;
694
+ })));
695
+ }, {});
696
+ export var DEFAULT_LAYER_COLOR = {
697
+ tripArc: '#9226C6',
698
+ begintrip_lat: '#1E96BE',
699
+ dropoff_lat: '#FF991F',
700
+ request_lat: '#52A353'
701
+ };
702
+ export var DEFAULT_LAYER_COLOR_PALETTE = 'Global Warming';
703
+ export var DEFAULT_LAYER_COLOR_PALETTE_STEPS = 6;
704
+
705
+ // let user pass in default tooltip fields
706
+ export var DEFAULT_TOOLTIP_FIELDS = [];
707
+ export var NO_VALUE_COLOR = [0, 0, 0, 0];
708
+ export var DEFAULT_PICKING_RADIUS = 3;
709
+ export var OVERLAY_BLENDINGS = {
710
+ normal: {
711
+ label: 'overlayBlending.normal',
712
+ value: 'normal'
713
+ },
714
+ screen: {
715
+ label: 'overlayBlending.screen',
716
+ value: 'screen'
717
+ },
718
+ darken: {
719
+ label: 'overlayBlending.darken',
720
+ value: 'darken'
721
+ }
722
+ };
723
+ export var LAYER_BLENDINGS = {
724
+ additive: {
725
+ label: 'layerBlending.additive',
726
+ blendFunc: ['SRC_ALPHA', 'DST_ALPHA'],
727
+ blendEquation: 'FUNC_ADD'
728
+ },
729
+ normal: {
730
+ // reference to
731
+ // https://limnu.com/webgl-blending-youre-probably-wrong/
732
+ label: 'layerBlending.normal',
733
+ blendFunc: ['SRC_ALPHA', 'ONE_MINUS_SRC_ALPHA', 'ONE', 'ONE_MINUS_SRC_ALPHA'],
734
+ blendEquation: ['FUNC_ADD', 'FUNC_ADD']
735
+ },
736
+ subtractive: {
737
+ label: 'layerBlending.subtractive',
738
+ blendFunc: ['ONE', 'ONE_MINUS_DST_COLOR', 'SRC_ALPHA', 'DST_ALPHA'],
739
+ blendEquation: ['FUNC_SUBTRACT', 'FUNC_ADD']
740
+ }
741
+ };
742
+ export var MAX_DEFAULT_TOOLTIPS = 5;
743
+ export var RESOLUTIONS = keyMirror({
744
+ ONE_X: null,
745
+ TWO_X: null
746
+ });
747
+ export var EXPORT_IMG_RATIOS = keyMirror({
748
+ SCREEN: null,
749
+ FOUR_BY_THREE: null,
750
+ SIXTEEN_BY_NINE: null,
751
+ CUSTOM: null
752
+ });
753
+ export var ScreenRatioOption = {
754
+ id: EXPORT_IMG_RATIOS.SCREEN,
755
+ label: 'modal.exportImage.ratioOriginalScreen',
756
+ getSize: function getSize(screenW, screenH) {
757
+ return {
758
+ width: screenW,
759
+ height: screenH
760
+ };
761
+ }
762
+ };
763
+ export var CustomRatioOption = {
764
+ id: EXPORT_IMG_RATIOS.CUSTOM,
765
+ hidden: true,
766
+ label: 'modal.exportImage.ratioCustom',
767
+ getSize: function getSize(mapW, mapH) {
768
+ return {
769
+ width: mapW,
770
+ height: mapH
771
+ };
772
+ }
773
+ };
774
+ export var FourByThreeRatioOption = {
775
+ id: EXPORT_IMG_RATIOS.FOUR_BY_THREE,
776
+ label: 'modal.exportImage.ratio4_3',
777
+ getSize: function getSize(screenW) {
778
+ return {
779
+ width: screenW,
780
+ height: Math.round(screenW * 0.75)
781
+ };
782
+ }
783
+ };
784
+ export var SixteenByNineRatioOption = {
785
+ id: EXPORT_IMG_RATIOS.SIXTEEN_BY_NINE,
786
+ label: 'modal.exportImage.ratio16_9',
787
+ getSize: function getSize(screenW) {
788
+ return {
789
+ width: screenW,
790
+ height: Math.round(screenW * 0.5625)
791
+ };
792
+ }
793
+ };
794
+ export var EXPORT_IMG_RATIO_OPTIONS = [ScreenRatioOption, FourByThreeRatioOption, SixteenByNineRatioOption, CustomRatioOption];
795
+ export var OneXResolutionOption = {
796
+ id: RESOLUTIONS.ONE_X,
797
+ label: '1x',
798
+ available: true,
799
+ scale: 1,
800
+ getSize: function getSize(screenW, screenH) {
801
+ return {
802
+ width: screenW,
803
+ height: screenH
804
+ };
805
+ }
806
+ };
807
+ export var TwoXResolutionOption = {
808
+ id: RESOLUTIONS.TWO_X,
809
+ label: '2x',
810
+ available: true,
811
+ scale: 2,
812
+ getSize: function getSize(screenW, screenH) {
813
+ return {
814
+ width: screenW * 2,
815
+ height: screenH * 2
816
+ };
817
+ }
818
+ };
819
+
820
+ // Fixed dimension options
821
+ export var Resolution1920x1080Option = {
822
+ id: '1920x1080',
823
+ label: '1920 × 1080 (16:9)',
824
+ available: true,
825
+ getSize: function getSize() {
826
+ return {
827
+ width: 1920,
828
+ height: 1080
829
+ };
830
+ }
831
+ };
832
+ export var Resolution1280x720Option = {
833
+ id: '1280x720',
834
+ label: '1280 × 720 (16:9)',
835
+ available: true,
836
+ getSize: function getSize() {
837
+ return {
838
+ width: 1280,
839
+ height: 720
840
+ };
841
+ }
842
+ };
843
+ export var Resolution2560x1440Option = {
844
+ id: '2560x1440',
845
+ label: '2560 × 1440 (16:9)',
846
+ available: true,
847
+ getSize: function getSize() {
848
+ return {
849
+ width: 2560,
850
+ height: 1440
851
+ };
852
+ }
853
+ };
854
+ export var Resolution1600x900Option = {
855
+ id: '1600x900',
856
+ label: '1600 × 900 (16:9)',
857
+ available: true,
858
+ getSize: function getSize() {
859
+ return {
860
+ width: 1600,
861
+ height: 900
862
+ };
863
+ }
864
+ };
865
+ export var Resolution1024x768Option = {
866
+ id: '1024x768',
867
+ label: '1024 × 768 (4:3)',
868
+ available: true,
869
+ getSize: function getSize() {
870
+ return {
871
+ width: 1024,
872
+ height: 768
873
+ };
874
+ }
875
+ };
876
+ export var Resolution1280x960Option = {
877
+ id: '1280x960',
878
+ label: '1280 × 960 (4:3)',
879
+ available: true,
880
+ getSize: function getSize() {
881
+ return {
882
+ width: 1280,
883
+ height: 960
884
+ };
885
+ }
886
+ };
887
+ export var Resolution1600x1200Option = {
888
+ id: '1600x1200',
889
+ label: '1600 × 1200 (4:3)',
890
+ available: true,
891
+ getSize: function getSize() {
892
+ return {
893
+ width: 1600,
894
+ height: 1200
895
+ };
896
+ }
897
+ };
898
+ export var Resolution1920x1440Option = {
899
+ id: '1920x1440',
900
+ label: '1920 × 1440 (4:3)',
901
+ available: true,
902
+ getSize: function getSize() {
903
+ return {
904
+ width: 1920,
905
+ height: 1440
906
+ };
907
+ }
908
+ };
909
+ export var EXPORT_IMG_RESOLUTION_OPTIONS = [OneXResolutionOption, TwoXResolutionOption, Resolution1280x720Option, Resolution1920x1080Option, Resolution2560x1440Option, Resolution1600x900Option, Resolution1024x768Option, Resolution1280x960Option, Resolution1600x1200Option, Resolution1920x1440Option];
910
+ export var EXPORT_DATA_TYPE = keyMirror({
911
+ CSV: null
912
+ // SHAPEFILE: null,
913
+ // JSON: null,
914
+ // GEOJSON: null,
915
+ // TOPOJSON: null
916
+ });
917
+ export var EXPORT_DATA_TYPE_OPTIONS = [{
918
+ id: EXPORT_DATA_TYPE.CSV,
919
+ label: EXPORT_DATA_TYPE.CSV.toLowerCase(),
920
+ available: true
921
+ }
922
+ // {
923
+ // id: EXPORT_DATA_TYPE.SHAPEFILE,
924
+ // label: 'shapefile',
925
+ // available: false
926
+ // },
927
+ // {
928
+ // id: EXPORT_DATA_TYPE.JSON,
929
+ // label: 'json',
930
+ // available: false
931
+ // },
932
+ // {
933
+ // id: EXPORT_DATA_TYPE.GEOJSON,
934
+ // label: 'geojson',
935
+ // available: false
936
+ // },
937
+ // {
938
+ // id: EXPORT_DATA_TYPE.TOPOJSON,
939
+ // label: 'topojson',
940
+ // available: false
941
+ // }
942
+ ];
943
+
944
+ // Export map types
945
+ export var EXPORT_MAP_FORMATS = keyMirror({
946
+ HTML: null,
947
+ JSON: null
948
+ });
949
+ export var EXPORT_HTML_MAP_MODES = keyMirror({
950
+ READ: null,
951
+ EDIT: null
952
+ });
953
+
954
+ // Export map options
955
+ export var EXPORT_MAP_FORMAT_OPTIONS = Object.entries(EXPORT_MAP_FORMATS).map(function (entry) {
956
+ return {
957
+ id: entry[0],
958
+ label: entry[1].toLowerCase(),
959
+ available: true
960
+ };
961
+ });
962
+ export function getHTMLMapModeTileUrl(mode) {
963
+ return "https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/map-".concat(mode.toLowerCase(), "-mode.png");
964
+ }
965
+ export var EXPORT_HTML_MAP_MODE_OPTIONS = Object.entries(EXPORT_HTML_MAP_MODES).map(function (entry) {
966
+ return {
967
+ id: entry[0],
968
+ label: "modal.exportMap.html.".concat(entry[1].toLowerCase()),
969
+ available: true,
970
+ url: getHTMLMapModeTileUrl(entry[1])
971
+ };
972
+ });
973
+ export var DEFAULT_UUID_COUNT = 6;
974
+ export var DEFAULT_NOTIFICATION_MESSAGE = 'MESSAGE_NOT_PROVIDED';
975
+ export var DEFAULT_NOTIFICATION_TYPES = keyMirror({
976
+ info: null,
977
+ error: null,
978
+ warning: null,
979
+ success: null
980
+ });
981
+ export var DEFAULT_NOTIFICATION_TOPICS = keyMirror({
982
+ global: null,
983
+ file: null
984
+ });
985
+
986
+ // Minimum time between identical notifications about deck.gl errors
987
+ export var THROTTLE_NOTIFICATION_TIME = 330;
988
+
989
+ // Animation
990
+ export var BASE_SPEED = 600;
991
+ export var FPS = 60;
992
+
993
+ /**
994
+ * 4 Animation Window Types
995
+ * 1. free
996
+ * |-> |->
997
+ * Current time is a fixed range, animation controller calls next animation frames continuously to animation a moving window
998
+ * The increment id based on domain / BASE_SPEED * SPEED
999
+ *
1000
+ * 2. incremental
1001
+ * | |->
1002
+ * Same as free, current time is a growing range, only the max value of range increment during animation.
1003
+ * The increment is also based on domain / BASE_SPEED * SPEED
1004
+ *
1005
+ * 3. point
1006
+ * o -> o
1007
+ * Current time is a point, animation controller calls next animation frame continuously to animation a moving point
1008
+ * The increment is based on domain / BASE_SPEED * SPEED
1009
+ *
1010
+ * 4. interval
1011
+ * o ~> o
1012
+ * Current time is a point. An array of sorted time steps need to be provided.
1013
+ * animation controller calls next animation at a interval when the point jumps to the next step
1014
+ */
1015
+ export var ANIMATION_WINDOW = keyMirror({
1016
+ free: null,
1017
+ incremental: null,
1018
+ point: null,
1019
+ interval: null
1020
+ });
1021
+ export var DEFAULT_TIME_FORMAT = 'MM/DD/YY HH:mm:ssa';
1022
+ export var SPEED_CONTROL_RANGE = [0, 10];
1023
+ export var SPEED_CONTROL_STEP = 0.001;
1024
+
1025
+ // Geocoder
1026
+ export var GEOCODER_DATASET_NAME = 'geocoder_dataset';
1027
+ export var GEOCODER_LAYER_ID = 'geocoder_layer';
1028
+ export var GEOCODER_GEO_OFFSET = 0.05;
1029
+ export var GEOCODER_ICON_COLOR = [255, 0, 0];
1030
+ // Base icon size before anchor normalization. The geocoder pin icon is bottom-anchored
1031
+ // and scaled to fit the ScatterplotLayer unit circle (~0.5x), so the rendered size is
1032
+ // compensated here (80 * 2 = 160).
1033
+ export var GEOCODER_ICON_SIZE = 160;
1034
+
1035
+ // Editor
1036
+ export var EDITOR_LAYER_ID = 'kepler_editor_layer';
1037
+ export var EDITOR_LAYER_PICKING_RADIUS = 6;
1038
+ export var EDITOR_MODES = {
1039
+ DRAW_POLYGON: 'DRAW_POLYGON',
1040
+ DRAW_RECTANGLE: 'DRAW_RECTANGLE',
1041
+ EDIT: 'EDIT_VERTEX'
1042
+ };
1043
+ export var PLOT_TYPES = keyMirror({
1044
+ histogram: null,
1045
+ lineChart: null
1046
+ });
1047
+
1048
+ // Filter
1049
+ export var INIT_FILTER_ITEMS_IN_DROPDOWN = 100;
1050
+
1051
+ // GPU Filtering
1052
+ /**
1053
+ * Max number of filter value buffers that deck.gl provides
1054
+ */
1055
+ export var MAX_GPU_FILTERS = 4;
1056
+ export var MAP_THUMBNAIL_DIMENSION = {
1057
+ width: 300,
1058
+ height: 200
1059
+ };
1060
+ export var MAP_INFO_CHARACTER = {
1061
+ title: 100,
1062
+ description: 100
1063
+ };
1064
+
1065
+ // Load data
1066
+ export var LOADING_METHODS = keyMirror({
1067
+ upload: null,
1068
+ storage: null,
1069
+ tileset: null
1070
+ });
1071
+ export var DEFAULT_FEATURE_FLAGS = {};
1072
+ export var DATASET_FORMATS = keyMirror({
1073
+ row: null,
1074
+ geojson: null,
1075
+ csv: null,
1076
+ keplergl: null,
1077
+ arrow: null,
1078
+ duckdb: null
1079
+ });
1080
+ export var MAP_CONTROLS = keyMirror({
1081
+ visibleLayers: null,
1082
+ mapLegend: null,
1083
+ toggle3d: null,
1084
+ splitMap: null,
1085
+ mapDraw: null,
1086
+ mapLocale: null,
1087
+ effect: null,
1088
+ annotation: null,
1089
+ aiAssistant: null
1090
+ });
1091
+ export var MapViewMode = /*#__PURE__*/function (MapViewMode) {
1092
+ MapViewMode["MODE_2D"] = "MODE_2D";
1093
+ MapViewMode["MODE_3D"] = "MODE_3D";
1094
+ MapViewMode["MODE_GLOBE"] = "MODE_GLOBE";
1095
+ return MapViewMode;
1096
+ }({});
1097
+
1098
+ /**
1099
+ * Minimum zoom level allowed in globe mode. Negative values let the user zoom
1100
+ * out further than the web-mercator default of 0, so the whole globe can be
1101
+ * pulled back to appear smaller on screen.
1102
+ */
1103
+ export var GLOBE_MIN_ZOOM = 2;
1104
+
1105
+ /**
1106
+ * Maximum zoom in globe mode.
1107
+ *
1108
+ * The previous "empty rectangles" at high zoom were caused by the vector basemap
1109
+ * layer declaring `maxZoom: 23` while the raw tile endpoints only have data to
1110
+ * z16 (mapbox-streets-v8) / z14 (CARTO) — deck then requested non-existent tiles
1111
+ * that 404. That is fixed in `getGlobeBaseLayers` by setting `maxZoom` to each
1112
+ * source's true data max so deck overzooms instead.
1113
+ *
1114
+ * The remaining practical ceiling is float32 precision: deck's globe places
1115
+ * geometry in common space on a sphere of radius 256 with no fp64/relative-to-
1116
+ * center trick, so beyond ~visual-zoom 16 (roughly this mapState zoom minus
1117
+ * `zoomAdjust(lat)` ≈ 1.65 at the equator) geometry starts to jitter/drift.
1118
+ */
1119
+ export var GLOBE_MAX_ZOOM = 16;
1120
+
1121
+ /**
1122
+ * Maximum absolute center latitude allowed in globe mode. Constrains the camera
1123
+ * target to a band around the equator so the view can't be centered on the
1124
+ * poles (deck.gl's default clamps to ~85°, which lets the camera stare straight
1125
+ * down at a pole). Applies symmetrically to the northern and southern hemisphere.
1126
+ */
1127
+ export var GLOBE_MAX_LATITUDE = 75;
1128
+ export var DEFAULT_GLOBE_CONFIG = {
1129
+ atmosphere: true,
1130
+ azimuth: false,
1131
+ azimuthAngle: 45,
1132
+ terminator: true,
1133
+ terminatorOpacity: 0.35,
1134
+ basemap: true,
1135
+ labels: false,
1136
+ labelsColor: [114.75, 114.75, 114.75],
1137
+ adminLines: true,
1138
+ adminLinesColor: [40, 63, 93],
1139
+ water: true,
1140
+ waterColor: [17, 35, 48],
1141
+ surface: true,
1142
+ surfaceColor: [9, 16, 29],
1143
+ // Color of the empty space rendered around the globe (deck.gl clear color).
1144
+ // Matches the previous hardcoded clear color [0.015, 0.035, 0.065] in 0-1 space.
1145
+ backgroundColor: [4, 9, 17],
1146
+ stars: false
1147
+ };
1148
+ export var GLOBE_SUPPORTED_LAYERS = {
1149
+ point: true,
1150
+ arc: true,
1151
+ grid: true,
1152
+ hexagon: true,
1153
+ geojson: true,
1154
+ cluster: true,
1155
+ icon: true,
1156
+ hexagonId: true,
1157
+ '3D': true,
1158
+ vectorTile: true,
1159
+ hexTile: true,
1160
+ line: true,
1161
+ trip: true,
1162
+ rasterTile: true,
1163
+ heatmap: true,
1164
+ s2: false,
1165
+ tile3d: false,
1166
+ // Flow arrows are flat quads in common space (equatorial plane) and collapse when
1167
+ // viewed edge-on on the globe, so the flow layer is not supported in Globe mode.
1168
+ flow: false
1169
+ };
1170
+ export var MapSplitMode = /*#__PURE__*/function (MapSplitMode) {
1171
+ MapSplitMode["SINGLE_MAP"] = "SINGLE_MAP";
1172
+ MapSplitMode["DUAL_MAP"] = "DUAL_MAP";
1173
+ MapSplitMode["SWIPE_COMPARE"] = "SWIPE_COMPARE";
1174
+ return MapSplitMode;
1175
+ }({});
1176
+
1177
+ /**
1178
+ * A multiplier for screen-space width/scale for Arc, Line, Icon and Text layers.
1179
+ * Required in order to maintain the same appearance after upgrading to deck.gl v8.5.
1180
+ * https://github.com/visgl/deck.gl/blob/master/docs/upgrade-guide.md
1181
+ */
1182
+ export var PROJECTED_PIXEL_SIZE_MULTIPLIER = 2 / 3;
1183
+
1184
+ /**
1185
+ * Maximum value for text outline width
1186
+ */
1187
+ export var TEXT_OUTLINE_MULTIPLIER = 5;
1188
+ export var dataTestIds = {
1189
+ infoIcon: 'info-icon',
1190
+ warningIcon: 'warning-icon',
1191
+ errorIcon: 'error-icon',
1192
+ successIcon: 'success-icon',
1193
+ checkmarkIcon: 'checkmark-icon',
1194
+ sortableLayerItem: 'sortable-layer-item',
1195
+ staticLayerItem: 'static-layer-item',
1196
+ layerTitleEditor: 'layer__title__editor',
1197
+ removeLayerAction: 'remove-layer-action',
1198
+ layerPanel: 'layer-panel',
1199
+ sortableEffectItem: 'sortable-effect-item',
1200
+ staticEffectItem: 'static-effect-item',
1201
+ providerLoading: 'provider-loading',
1202
+ providerMapInfoPanel: 'provider-map-info-panel',
1203
+ providerSelect: 'provider-select',
1204
+ cloudHeader: 'cloud-header',
1205
+ providerShareMap: 'provider-share-map'
1206
+ };
1207
+
1208
+ // Effects
1209
+ export var DEFAULT_TIMEZONE = 'UTC';
1210
+ export var DEFAULT_POST_PROCESSING_EFFECT_TYPE = 'ink';
1211
+ export var DEFAULT_LIGHT_COLOR = [255, 255, 255];
1212
+ export var DEFAULT_LIGHT_INTENSITY = 1;
1213
+ export var DEFAULT_SHADOW_INTENSITY = 0.5;
1214
+ export var DEFAULT_SHADOW_COLOR = [0, 0, 0];
1215
+ export var LIGHT_AND_SHADOW_EFFECT_TIME_MODES = {
1216
+ pick: 'pick',
1217
+ current: 'current',
1218
+ animation: 'animation'
1219
+ };
1220
+ export var DEFAULT_LIGHT_AND_SHADOW_PROPS = {
1221
+ timestamp: Date.now(),
1222
+ timeMode: LIGHT_AND_SHADOW_EFFECT_TIME_MODES.pick,
1223
+ shadowIntensity: DEFAULT_SHADOW_INTENSITY,
1224
+ shadowColor: [].concat(DEFAULT_SHADOW_COLOR),
1225
+ sunLightColor: [].concat(DEFAULT_LIGHT_COLOR),
1226
+ sunLightIntensity: DEFAULT_LIGHT_INTENSITY,
1227
+ ambientLightColor: [].concat(DEFAULT_LIGHT_COLOR),
1228
+ ambientLightIntensity: DEFAULT_LIGHT_INTENSITY
1229
+ };
1230
+ export var LIGHT_AND_SHADOW_EFFECT = {
1231
+ type: 'lightAndShadow',
1232
+ name: 'Light & Shadow',
1233
+ description: 'effectDescription.lightAndShadow',
1234
+ parameters: [{
1235
+ name: 'timestamp',
1236
+ min: 0,
1237
+ max: Number.MAX_SAFE_INTEGER
1238
+ }, {
1239
+ name: 'shadowIntensity',
1240
+ min: 0,
1241
+ max: 1,
1242
+ defaultValue: DEFAULT_SHADOW_INTENSITY
1243
+ }, {
1244
+ name: 'sunLightIntensity',
1245
+ min: 0,
1246
+ max: 5,
1247
+ defaultValue: DEFAULT_LIGHT_INTENSITY
1248
+ }, {
1249
+ name: 'ambientLightIntensity',
1250
+ min: 0,
1251
+ max: 5,
1252
+ defaultValue: DEFAULT_LIGHT_INTENSITY
1253
+ }, {
1254
+ name: 'shadowColor',
1255
+ type: 'color',
1256
+ min: 0,
1257
+ max: 255,
1258
+ defaultValue: DEFAULT_SHADOW_COLOR
1259
+ }, {
1260
+ name: 'sunLightColor',
1261
+ type: 'color',
1262
+ min: 0,
1263
+ max: 255,
1264
+ defaultValue: DEFAULT_LIGHT_COLOR
1265
+ }, {
1266
+ name: 'ambientLightColor',
1267
+ type: 'color',
1268
+ min: 0,
1269
+ max: 255,
1270
+ defaultValue: DEFAULT_LIGHT_COLOR
1271
+ }]
1272
+ };
1273
+ export var DISTANCE_FOG_TYPE = 'distanceFog';
1274
+ export var SURFACE_FOG_TYPE = 'surfaceFog';
1275
+ export var POSTPROCESSING_EFFECTS = {
1276
+ ink: {
1277
+ type: 'ink',
1278
+ name: 'Ink',
1279
+ description: 'effectDescription.ink',
1280
+ parameters: [{
1281
+ name: 'strength',
1282
+ min: 0,
1283
+ max: 1
1284
+ }]
1285
+ },
1286
+ brightnessContrast: {
1287
+ type: 'brightnessContrast',
1288
+ name: 'Brightness & Contrast',
1289
+ description: 'effectDescription.brightnessContrast',
1290
+ parameters: [{
1291
+ name: 'brightness',
1292
+ min: -1,
1293
+ max: 1
1294
+ }, {
1295
+ name: 'contrast',
1296
+ min: -1,
1297
+ max: 1
1298
+ }]
1299
+ },
1300
+ hueSaturation: {
1301
+ type: 'hueSaturation',
1302
+ name: 'Hue & Saturation',
1303
+ description: 'effectDescription.hueSaturation',
1304
+ parameters: [{
1305
+ name: 'hue',
1306
+ min: -1,
1307
+ max: 1
1308
+ }, {
1309
+ name: 'saturation',
1310
+ defaultValue: 0.25,
1311
+ min: -1,
1312
+ max: 1
1313
+ }]
1314
+ },
1315
+ vibrance: {
1316
+ type: 'vibrance',
1317
+ name: 'Vibrance',
1318
+ description: 'effectDescription.vibrance',
1319
+ parameters: [{
1320
+ name: 'amount',
1321
+ defaultValue: 0.5,
1322
+ min: -1,
1323
+ max: 1
1324
+ }]
1325
+ },
1326
+ sepia: {
1327
+ type: 'sepia',
1328
+ name: 'Sepia',
1329
+ description: 'effectDescription.sepia',
1330
+ parameters: [{
1331
+ name: 'amount',
1332
+ min: 0,
1333
+ max: 1
1334
+ }]
1335
+ },
1336
+ dotScreen: {
1337
+ type: 'dotScreen',
1338
+ name: 'Dot Screen',
1339
+ description: 'effectDescription.dotScreen',
1340
+ parameters: [{
1341
+ name: 'angle',
1342
+ min: 0,
1343
+ max: Math.PI / 2
1344
+ }, {
1345
+ name: 'size',
1346
+ min: 1,
1347
+ max: 20
1348
+ }, {
1349
+ name: 'center',
1350
+ type: 'array',
1351
+ label: ['Center X', 'Center Y'],
1352
+ defaultValue: [0.5, 0.5],
1353
+ min: 0,
1354
+ max: 1
1355
+ }]
1356
+ },
1357
+ colorHalftone: {
1358
+ type: 'colorHalftone',
1359
+ name: 'Color Halftone',
1360
+ description: 'effectDescription.colorHalftone',
1361
+ parameters: [{
1362
+ name: 'angle',
1363
+ min: 0,
1364
+ max: Math.PI / 2
1365
+ }, {
1366
+ name: 'size',
1367
+ min: 1,
1368
+ max: 20
1369
+ }, {
1370
+ name: 'center',
1371
+ type: 'array',
1372
+ label: ['Center X', 'Center Y'],
1373
+ defaultValue: [0.5, 0.5],
1374
+ min: 0,
1375
+ max: 1
1376
+ }]
1377
+ },
1378
+ noise: {
1379
+ type: 'noise',
1380
+ name: 'Noise',
1381
+ description: 'effectDescription.noise',
1382
+ parameters: [{
1383
+ name: 'amount',
1384
+ min: 0,
1385
+ max: 1
1386
+ }]
1387
+ },
1388
+ triangleBlur: {
1389
+ type: 'triangleBlur',
1390
+ name: 'Blur (Triangle)',
1391
+ description: 'effectDescription.triangleBlur',
1392
+ parameters: [{
1393
+ name: 'radius',
1394
+ min: 0,
1395
+ max: 100
1396
+ }]
1397
+ },
1398
+ zoomBlur: {
1399
+ type: 'zoomBlur',
1400
+ name: 'Blur (Zoom)',
1401
+ description: 'effectDescription.zoomBlur',
1402
+ parameters: [{
1403
+ name: 'strength',
1404
+ defaultValue: 0.05,
1405
+ min: 0,
1406
+ max: 1
1407
+ }, {
1408
+ name: 'center',
1409
+ type: 'array',
1410
+ label: ['Center X', 'Center Y'],
1411
+ defaultValue: [0.5, 0.5],
1412
+ min: 0,
1413
+ max: 1
1414
+ }]
1415
+ },
1416
+ tiltShift: {
1417
+ type: 'tiltShift',
1418
+ name: 'Blur (Tilt Shift)',
1419
+ description: 'effectDescription.tiltShift',
1420
+ parameters: [{
1421
+ name: 'blurRadius',
1422
+ label: 'Blur',
1423
+ min: 0,
1424
+ max: 50
1425
+ }, {
1426
+ name: 'gradientRadius',
1427
+ label: 'Gradient',
1428
+ min: 0,
1429
+ max: 400
1430
+ }, {
1431
+ name: 'start',
1432
+ type: 'array',
1433
+ label: ['Start', false],
1434
+ defaultValue: [0.0, 0.0],
1435
+ min: 0,
1436
+ max: 1
1437
+ }, {
1438
+ name: 'end',
1439
+ type: 'array',
1440
+ label: ['End', false],
1441
+ defaultValue: [1, 1],
1442
+ min: 0,
1443
+ max: 1
1444
+ }]
1445
+ },
1446
+ edgeWork: {
1447
+ type: 'edgeWork',
1448
+ name: 'Edge work',
1449
+ description: 'effectDescription.edgeWork',
1450
+ parameters: [{
1451
+ name: 'radius',
1452
+ min: 1,
1453
+ max: 50
1454
+ }]
1455
+ },
1456
+ vignette: {
1457
+ type: 'vignette',
1458
+ name: 'Vignette',
1459
+ description: 'effectDescription.vignette',
1460
+ parameters: [{
1461
+ name: 'amount',
1462
+ min: 0,
1463
+ max: 1
1464
+ }, {
1465
+ name: 'radius',
1466
+ min: 0,
1467
+ max: 1
1468
+ }]
1469
+ },
1470
+ magnify: {
1471
+ type: 'magnify',
1472
+ name: 'Magnify',
1473
+ description: 'effectDescription.magnify',
1474
+ parameters: [{
1475
+ name: 'screenXY',
1476
+ type: 'array',
1477
+ label: ['Position X', 'Position Y'],
1478
+ defaultValue: [0.5, 0.5],
1479
+ min: 0,
1480
+ max: 1
1481
+ }, {
1482
+ name: 'radiusPixels',
1483
+ label: 'Size',
1484
+ min: 10,
1485
+ max: 500
1486
+ }, {
1487
+ name: 'zoom',
1488
+ min: 0.5,
1489
+ max: 50
1490
+ }, {
1491
+ name: 'borderWidthPixels',
1492
+ label: 'Border Width',
1493
+ defaultValue: 3,
1494
+ min: 0,
1495
+ max: 50
1496
+ }]
1497
+ },
1498
+ hexagonalPixelate: {
1499
+ type: 'hexagonalPixelate',
1500
+ name: 'Hexagonal Pixelate',
1501
+ description: 'effectDescription.hexagonalPixelate',
1502
+ parameters: [{
1503
+ name: 'scale',
1504
+ defaultValue: 20,
1505
+ min: 1,
1506
+ max: 50
1507
+ }]
1508
+ },
1509
+ distanceFog: {
1510
+ type: DISTANCE_FOG_TYPE,
1511
+ name: 'Distance Fog',
1512
+ description: 'effectDescription.distanceFog',
1513
+ parameters: [{
1514
+ name: 'density',
1515
+ defaultValue: 0.5,
1516
+ min: 0,
1517
+ max: 1
1518
+ }, {
1519
+ name: 'fogStart',
1520
+ label: 'Start',
1521
+ defaultValue: 0.3,
1522
+ min: 0,
1523
+ max: 1
1524
+ }, {
1525
+ name: 'fogRange',
1526
+ label: 'Range',
1527
+ defaultValue: 0.5,
1528
+ min: 0.01,
1529
+ max: 1
1530
+ }, {
1531
+ name: 'fogColor',
1532
+ type: 'color',
1533
+ min: 0,
1534
+ max: 255,
1535
+ defaultValue: [217, 222, 230]
1536
+ }]
1537
+ },
1538
+ surfaceFog: {
1539
+ type: SURFACE_FOG_TYPE,
1540
+ name: 'Surface Fog',
1541
+ description: 'effectDescription.surfaceFog',
1542
+ parameters: [{
1543
+ name: 'density',
1544
+ defaultValue: 0.6,
1545
+ min: 0,
1546
+ max: 1
1547
+ }, {
1548
+ name: 'height',
1549
+ label: 'Elevation (m)',
1550
+ defaultValue: 50,
1551
+ min: -200,
1552
+ max: 6000
1553
+ }, {
1554
+ name: 'animateHeight',
1555
+ type: 'checkbox',
1556
+ label: 'Animate Elevation',
1557
+ tooltip: 'Animates elevation from start to end value during video export preview and recording.',
1558
+ defaultValue: false,
1559
+ min: 0,
1560
+ max: 1
1561
+ }, {
1562
+ name: 'heightEnd',
1563
+ label: 'End Elevation (m)',
1564
+ defaultValue: 100,
1565
+ min: -200,
1566
+ max: 6000
1567
+ }, {
1568
+ name: 'linearEasing',
1569
+ type: 'checkbox',
1570
+ label: 'Linear Easing',
1571
+ tooltip: 'Uses constant speed instead of smooth ease-in / ease-out during elevation animation.',
1572
+ defaultValue: false,
1573
+ min: 0,
1574
+ max: 1
1575
+ }, {
1576
+ name: 'thickness',
1577
+ label: 'Transition (m)',
1578
+ defaultValue: 50,
1579
+ min: 0,
1580
+ max: 1000
1581
+ }, {
1582
+ name: 'fogColor',
1583
+ type: 'color',
1584
+ label: 'Fog Color',
1585
+ min: 0,
1586
+ max: 255,
1587
+ defaultValue: [230, 235, 242]
1588
+ }, {
1589
+ name: 'pattern',
1590
+ type: 'checkbox',
1591
+ label: 'Pattern',
1592
+ tooltip: 'Adds a noise pattern to the fog for a more natural, volumetric look.',
1593
+ defaultValue: false,
1594
+ min: 0,
1595
+ max: 1
1596
+ }]
1597
+ }
1598
+ };
1599
+ export var EFFECT_DESCRIPTIONS = [LIGHT_AND_SHADOW_EFFECT].concat(_toConsumableArray(Object.keys(POSTPROCESSING_EFFECTS).map(function (keyName) {
1600
+ return POSTPROCESSING_EFFECTS[keyName];
1601
+ })));
1602
+ export var SYNC_TIMELINE_MODES = {
1603
+ start: 0,
1604
+ end: 1
1605
+ };
1606
+ export var GEOARROW_METADATA_KEY = 'ARROW:extension:name';
1607
+
1608
+ /**
1609
+ * Enum holding GeoArrow extension type names
1610
+ */
1611
+ export var GEOARROW_EXTENSIONS = /*#__PURE__*/function (GEOARROW_EXTENSIONS) {
1612
+ GEOARROW_EXTENSIONS["POINT"] = "geoarrow.point";
1613
+ GEOARROW_EXTENSIONS["LINESTRING"] = "geoarrow.linestring";
1614
+ GEOARROW_EXTENSIONS["POLYGON"] = "geoarrow.polygon";
1615
+ GEOARROW_EXTENSIONS["MULTIPOINT"] = "geoarrow.multipoint";
1616
+ GEOARROW_EXTENSIONS["MULTILINESTRING"] = "geoarrow.multilinestring";
1617
+ GEOARROW_EXTENSIONS["MULTIPOLYGON"] = "geoarrow.multipolygon";
1618
+ GEOARROW_EXTENSIONS["WKB"] = "geoarrow.wkb";
1619
+ return GEOARROW_EXTENSIONS;
1620
+ }({});
1621
+ export var LOADERS_CDN_VERSION = '4.3.2';
1622
+ export var LOADERS_CDN_URL = 'https://unpkg.com/@loaders.gl';
1623
+ export var getLoaderOptions = function getLoaderOptions() {
1624
+ return {
1625
+ mvt: {
1626
+ workerUrl: "".concat(LOADERS_CDN_URL, "/mvt@").concat(LOADERS_CDN_VERSION, "/dist/mvt-worker.js")
1627
+ },
1628
+ 'quantized-mesh': {
1629
+ workerUrl: "".concat(LOADERS_CDN_URL, "/terrain@").concat(LOADERS_CDN_VERSION, "/dist/quantized-mesh-worker.js")
1630
+ },
1631
+ npy: {
1632
+ workerUrl: "".concat(LOADERS_CDN_URL, "/textures@").concat(LOADERS_CDN_VERSION, "/dist/npy-worker.js")
1633
+ }
1634
+ };
1635
+ };
1636
+ export var CUSTOM_SCENEGRAPH_MODEL_ID = 'custom';
1637
+ var MODELS_BASE_URL = 'https://studio-public-data.foursquare.com/statics/keplergl/3d-models.2022-06-13';
1638
+ export var TRIP_LAYER_SCENEGRAPH_MODELS = [{
1639
+ id: 'airplane',
1640
+ label: 'Airplane',
1641
+ icon: null,
1642
+ url: "".concat(MODELS_BASE_URL, "/Plane.glb"),
1643
+ angles: [0, 0, 0],
1644
+ scale: 1.0
1645
+ }, {
1646
+ id: 'boeing777',
1647
+ label: 'Airliner',
1648
+ icon: null,
1649
+ url: "".concat(MODELS_BASE_URL, "/Airliner.glb"),
1650
+ angles: [0, 0, 0],
1651
+ scale: 1.0
1652
+ }, {
1653
+ id: 'uber-evtol',
1654
+ label: 'VTOL',
1655
+ icon: null,
1656
+ url: "".concat(MODELS_BASE_URL, "/evtol.glb"),
1657
+ angles: [0, 0, 0],
1658
+ scale: 1.0
1659
+ }, {
1660
+ id: 'hang-glider',
1661
+ label: 'Glider',
1662
+ icon: null,
1663
+ url: "".concat(MODELS_BASE_URL, "/Hangglider.glb"),
1664
+ angles: [0, 0, 0],
1665
+ scale: 1.0
1666
+ }, {
1667
+ id: 'helicopter',
1668
+ label: 'Helicopter',
1669
+ icon: null,
1670
+ url: "".concat(MODELS_BASE_URL, "/Helicopter.glb"),
1671
+ angles: [0, 0, 0],
1672
+ scale: 1.0
1673
+ }, {
1674
+ id: 'bicycle',
1675
+ label: 'Bicycle',
1676
+ icon: null,
1677
+ url: "".concat(MODELS_BASE_URL, "/Bicycle.glb"),
1678
+ angles: [0, 0, 0],
1679
+ scale: 1.0
1680
+ }, {
1681
+ id: 'scooter',
1682
+ label: 'Scooter',
1683
+ icon: null,
1684
+ url: "".concat(MODELS_BASE_URL, "/Scooter.glb"),
1685
+ angles: [0, 0, 0],
1686
+ scale: 1.0
1687
+ }, {
1688
+ id: 'car',
1689
+ label: 'Car',
1690
+ icon: null,
1691
+ url: "".concat(MODELS_BASE_URL, "/Car.glb"),
1692
+ angles: [0, 0, 0],
1693
+ scale: 1.0
1694
+ }, {
1695
+ id: 'truck',
1696
+ label: 'Truck',
1697
+ icon: null,
1698
+ url: "".concat(MODELS_BASE_URL, "/Truck.glb"),
1699
+ angles: [0, 0, 0],
1700
+ scale: 1.0
1701
+ }, {
1702
+ id: 'semitruck',
1703
+ label: 'Semitruck',
1704
+ icon: null,
1705
+ url: "".concat(MODELS_BASE_URL, "/Semitruck.glb"),
1706
+ angles: [0, 0, 0],
1707
+ scale: 1.0
1708
+ }, {
1709
+ id: 'cargoship',
1710
+ label: 'Cargoship',
1711
+ icon: null,
1712
+ url: "".concat(MODELS_BASE_URL, "/Cargoship.glb"),
1713
+ angles: [0, 0, 0],
1714
+ scale: 1.0
1715
+ }, {
1716
+ id: CUSTOM_SCENEGRAPH_MODEL_ID,
1717
+ label: 'Custom',
1718
+ icon: null,
1719
+ url: null,
1720
+ angles: [0, 0, 0],
1721
+ scale: 1.0
1722
+ }];
1723
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXlNaXJyb3IiLCJzY2FsZUxpbmVhciIsInNjYWxlTG9nIiwic2NhbGVPcmRpbmFsIiwic2NhbGVQb2ludCIsInNjYWxlUXVhbnRpbGUiLCJzY2FsZVF1YW50aXplIiwic2NhbGVTcXJ0Iiwic2NhbGVUaHJlc2hvbGQiLCJUT09MVElQX0ZPUk1BVF9UWVBFUyIsIkFDVElPTl9QUkVGSVgiLCJLRVBMRVJfVU5GT0xERURfQlVDS0VUIiwiQkFTRU1BUF9JQ09OX1BSRUZJWCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJUUkFOU0lUSU9OX0RVUkFUSU9OIiwiREFUQV9UQUJMRV9JRCIsIkRFTEVURV9EQVRBX0lEIiwiQUREX0RBVEFfSUQiLCJFWFBPUlRfSU1BR0VfSUQiLCJFWFBPUlRfREFUQV9JRCIsIkFERF9NQVBfU1RZTEVfSUQiLCJFWFBPUlRfTUFQX0lEIiwiRVhQT1JUX1ZJREVPX0lEIiwiU0FWRV9NQVBfSUQiLCJPVkVSV1JJVEVfTUFQX0lEIiwiU0hBUkVfTUFQX0lEIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIktFUExFUl9HTF9XRUJTSVRFIiwiRElNRU5TSU9OUyIsInNpZGVQYW5lbCIsIndpZHRoIiwibWFyZ2luIiwidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0IiwiaGVhZGVySGVpZ2h0IiwibWFwQ29udHJvbCIsInBhZGRpbmciLCJtYXBMZWdlbmQiLCJwaW5uZWQiLCJUSEVNRSIsImxpZ2h0IiwiZGFyayIsImJhc2UiLCJTSURFQkFSX1BBTkVMUyIsImlkIiwibGFiZWwiLCJvbkNsaWNrIiwiUEFORUxfVklFV19UT0dHTEVTIiwibGlzdCIsImJ5RGF0YXNldCIsIlBBTkVMUyIsIkRFRkFVTFRfQkxER19DT0xPUiIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUiIsIkJBU0VfTUFQX0JBQ0tHUk9VTkRfTEFZRVJfSURTIiwiQkFDS0dST1VORF9MQVlFUl9HUk9VUF9TTFVHIiwiVEhSRUVfRF9CVUlMRElOR19MQVlFUl9HUk9VUF9TTFVHIiwiQkFDS0dST1VORF9MQVlFUl9HUk9VUCIsInNsdWciLCJmaWx0ZXIiLCJkZWZhdWx0VmlzaWJpbGl0eSIsImlzVmlzaWJpbGl0eVRvZ2dsZUF2YWlsYWJsZSIsImlzTW92ZVRvVG9wQXZhaWxhYmxlIiwiaXNDb2xvclBpY2tlckF2YWlsYWJsZSIsIkRFRkFVTFRfTEFZRVJfR1JPVVBTIiwiX3JlZiIsInR5cGUiLCJtYXRjaCIsIl9yZWYyIiwiX3JlZjMiLCJfcmVmNCIsIl9yZWY1IiwiX3JlZjYiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIk5PTkUiLCJEQVJLIiwiTElHSFQiLCJOT19NQVBfSUQiLCJFTVBUWV9NQVBCT1hfU1RZTEUiLCJ2ZXJzaW9uIiwic291cmNlcyIsImxheWVycyIsIk1BUF9MSUJfT1BUSU9OUyIsIk1BUEJPWCIsIk1BUExJQlJFIiwiTUFQQk9YX01BWF9QSVRDSCIsIk5PX0JBU0VNQVBfSUNPTiIsImNvbmNhdCIsIkRFRkFVTFRfQkFTRV9NQVBfU1RZTEUiLCJERUZBVUxUX05PX0JBU0VNQVBfU1RZTEUiLCJ1cmwiLCJpY29uIiwibGF5ZXJHcm91cHMiLCJjb2xvck1vZGUiLCJzdHlsZSIsIkRFRkFVTFRfTUFQQk9YX1NUWUxFUyIsImNvbXBsaW1lbnRhcnlTdHlsZUlkIiwiREVGQVVMVF9NQVBCT1hfU0FURUxJVEVfU1RZTEVTIiwiREVGQVVMVF9NQVBMSUJSRV9TVFlMRVMiLCJERUZBVUxUX01BUF9TVFlMRVMiLCJHRU9KU09OX0ZJRUxEUyIsImdlb2pzb24iLCJJQ09OX0ZJRUxEUyIsIlRSSVBfUE9JTlRfRklFTERTIiwiQUxUSVRVREVfRklFTERTIiwiVFJJUF9BUkNfRklFTERTIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsIkZJTFRFUl9UWVBFUyIsInJhbmdlIiwic2VsZWN0IiwiaW5wdXQiLCJ0aW1lUmFuZ2UiLCJtdWx0aVNlbGVjdCIsInBvbHlnb24iLCJGSUxURVJfVklFV19UWVBFUyIsInNpZGUiLCJlbmxhcmdlZCIsIm1pbmlmaWVkIiwiREVGQVVMVF9GSUxURVJfVklFV19UWVBFIiwiU0NBTEVfVFlQRVMiLCJvcmRpbmFsIiwicXVhbnRpbGUiLCJxdWFudGl6ZSIsImxpbmVhciIsInNxcnQiLCJsb2ciLCJ0aHJlc2hvbGQiLCJjdXN0b20iLCJjdXN0b21PcmRpbmFsIiwicG9pbnQiLCJTQ0FMRV9UWVBFX05BTUVTIiwiU0NBTEVfRlVOQyIsIl9kZWZpbmVQcm9wZXJ0eSIsIkFMTF9GSUVMRF9UWVBFUyIsImRhdGUiLCJpbnRlZ2VyIiwicmVhbCIsInN0cmluZyIsInRpbWVzdGFtcCIsImFycmF5Iiwib2JqZWN0IiwiZ2VvYXJyb3ciLCJoMyIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJERVNDRU5ESU5HIiwiVU5TT1JUIiwiVEFCTEVfT1BUSU9OIiwiU09SVF9BU0MiLCJTT1JUX0RFUyIsIlBJTiIsIlVOUElOIiwiQ09QWSIsIkZPUk1BVF9DT0xVTU4iLCJUQUJMRV9PUFRJT05fTElTVCIsInZhbHVlIiwiZGlzcGxheSIsImNvbmRpdGlvbiIsInByb3BzIiwic29ydFRhYmxlQ29sdW1uIiwic29ydE1vZGUiLCJpc1NvcnRlZCIsImlzUGlubmVkIiwic2V0RGlzcGxheUZvcm1hdCIsIllFTExPVyIsIlBJTksiLCJQVVJQTEUiLCJCTFVFIiwiQkxVRTIiLCJCTFVFMyIsIkdSRUVOIiwiR1JFRU4yIiwiUkVEIiwiT1JBTkdFIiwiRklFTERfVFlQRV9ESVNQTEFZIiwiX0ZJRUxEX1RZUEVfRElTUExBWSIsImNvbG9yIiwiRklFTERfQ09MT1JTIiwiSElHSExJR0hfQ09MT1JfM0QiLCJDSEFOTkVMX1NDQUxFUyIsInJhZGl1cyIsInNpemUiLCJjb2xvckFnZ3IiLCJzaXplQWdnciIsImFuZ2xlIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJjb3VudCIsImF2ZXJhZ2UiLCJtYXhpbXVtIiwibWluaW11bSIsIm1lZGlhbiIsInN0ZGV2Iiwic3VtIiwidmFyaWFuY2UiLCJtb2RlIiwiY291bnRVbmlxdWUiLCJBR0dSRUdBVElPTl9UWVBFX09QVElPTlMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiX3JlZjciLCJfcmVmOCIsIl9zbGljZWRUb0FycmF5Iiwia2V5IiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnMiLCJERUZBVUxUX0FHR1JFR0FUSU9OX0NPTE9SX1NDQUxFUyIsImxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwicmVkdWNlIiwicHJldiIsImN1ciIsIm9yZGluYWxGaWVsZFNjYWxlRnVuY3Rpb25zIiwib3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwibm90U3VwcG9ydGVkU2NhbGVPcHRzIiwibm90U3VwcG9ydEFnZ3JPcHRzIiwiREVGQVVMVF9BR0dSRUdBVElPTiIsIkZJRUxEX09QVFMiLCJfRklFTERfT1BUUyIsInNjYWxlIiwiX29iamVjdFNwcmVhZCIsImZvcm1hdCIsImxlZ2VuZCIsImQiLCJ0b29sdGlwIiwiREVDSU1BTCIsIlBFUkNFTlRBR0UiLCJEQVRFIiwiREFURV9USU1FIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiQk9PTEVBTiIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsImtleXMiLCJhY2N1IiwiZnQiLCJsZW5ndGgiLCJERUZBVUxUX0xBWUVSX0NPTE9SIiwidHJpcEFyYyIsImJlZ2ludHJpcF9sYXQiLCJkcm9wb2ZmX2xhdCIsInJlcXVlc3RfbGF0IiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFIiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTIiwiREVGQVVMVF9UT09MVElQX0ZJRUxEUyIsIk5PX1ZBTFVFX0NPTE9SIiwiREVGQVVMVF9QSUNLSU5HX1JBRElVUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwibm9ybWFsIiwic2NyZWVuIiwiZGFya2VuIiwiTEFZRVJfQkxFTkRJTkdTIiwiYWRkaXRpdmUiLCJibGVuZEZ1bmMiLCJibGVuZEVxdWF0aW9uIiwic3VidHJhY3RpdmUiLCJNQVhfREVGQVVMVF9UT09MVElQUyIsIlJFU09MVVRJT05TIiwiT05FX1giLCJUV09fWCIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiU0NSRUVOIiwiRk9VUl9CWV9USFJFRSIsIlNJWFRFRU5fQllfTklORSIsIkNVU1RPTSIsIlNjcmVlblJhdGlvT3B0aW9uIiwiZ2V0U2l6ZSIsInNjcmVlblciLCJzY3JlZW5IIiwiaGVpZ2h0IiwiQ3VzdG9tUmF0aW9PcHRpb24iLCJoaWRkZW4iLCJtYXBXIiwibWFwSCIsIkZvdXJCeVRocmVlUmF0aW9PcHRpb24iLCJNYXRoIiwicm91bmQiLCJTaXh0ZWVuQnlOaW5lUmF0aW9PcHRpb24iLCJFWFBPUlRfSU1HX1JBVElPX09QVElPTlMiLCJPbmVYUmVzb2x1dGlvbk9wdGlvbiIsImF2YWlsYWJsZSIsIlR3b1hSZXNvbHV0aW9uT3B0aW9uIiwiUmVzb2x1dGlvbjE5MjB4MTA4ME9wdGlvbiIsIlJlc29sdXRpb24xMjgweDcyME9wdGlvbiIsIlJlc29sdXRpb24yNTYweDE0NDBPcHRpb24iLCJSZXNvbHV0aW9uMTYwMHg5MDBPcHRpb24iLCJSZXNvbHV0aW9uMTAyNHg3NjhPcHRpb24iLCJSZXNvbHV0aW9uMTI4MHg5NjBPcHRpb24iLCJSZXNvbHV0aW9uMTYwMHgxMjAwT3B0aW9uIiwiUmVzb2x1dGlvbjE5MjB4MTQ0ME9wdGlvbiIsIkVYUE9SVF9JTUdfUkVTT0xVVElPTl9PUFRJT05TIiwiRVhQT1JUX0RBVEFfVFlQRSIsIkNTViIsIkVYUE9SVF9EQVRBX1RZUEVfT1BUSU9OUyIsInRvTG93ZXJDYXNlIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJFWFBPUlRfSFRNTF9NQVBfTU9ERVMiLCJSRUFEIiwiRURJVCIsIkVYUE9SVF9NQVBfRk9STUFUX09QVElPTlMiLCJlbnRyeSIsImdldEhUTUxNYXBNb2RlVGlsZVVybCIsIkVYUE9SVF9IVE1MX01BUF9NT0RFX09QVElPTlMiLCJERUZBVUxUX1VVSURfQ09VTlQiLCJERUZBVUxUX05PVElGSUNBVElPTl9NRVNTQUdFIiwiREVGQVVMVF9OT1RJRklDQVRJT05fVFlQRVMiLCJpbmZvIiwiZXJyb3IiLCJ3YXJuaW5nIiwic3VjY2VzcyIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyIsImdsb2JhbCIsImZpbGUiLCJUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSIsIkJBU0VfU1BFRUQiLCJGUFMiLCJBTklNQVRJT05fV0lORE9XIiwiZnJlZSIsImluY3JlbWVudGFsIiwiaW50ZXJ2YWwiLCJERUZBVUxUX1RJTUVfRk9STUFUIiwiU1BFRURfQ09OVFJPTF9SQU5HRSIsIlNQRUVEX0NPTlRST0xfU1RFUCIsIkdFT0NPREVSX0RBVEFTRVRfTkFNRSIsIkdFT0NPREVSX0xBWUVSX0lEIiwiR0VPQ09ERVJfR0VPX09GRlNFVCIsIkdFT0NPREVSX0lDT05fQ09MT1IiLCJHRU9DT0RFUl9JQ09OX1NJWkUiLCJFRElUT1JfTEFZRVJfSUQiLCJFRElUT1JfTEFZRVJfUElDS0lOR19SQURJVVMiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJEUkFXX1JFQ1RBTkdMRSIsIlBMT1RfVFlQRVMiLCJoaXN0b2dyYW0iLCJsaW5lQ2hhcnQiLCJJTklUX0ZJTFRFUl9JVEVNU19JTl9EUk9QRE9XTiIsIk1BWF9HUFVfRklMVEVSUyIsIk1BUF9USFVNQk5BSUxfRElNRU5TSU9OIiwiTUFQX0lORk9fQ0hBUkFDVEVSIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIkxPQURJTkdfTUVUSE9EUyIsInVwbG9hZCIsInN0b3JhZ2UiLCJ0aWxlc2V0IiwiREVGQVVMVF9GRUFUVVJFX0ZMQUdTIiwiREFUQVNFVF9GT1JNQVRTIiwicm93IiwiY3N2Iiwia2VwbGVyZ2wiLCJhcnJvdyIsImR1Y2tkYiIsIk1BUF9DT05UUk9MUyIsInZpc2libGVMYXllcnMiLCJ0b2dnbGUzZCIsInNwbGl0TWFwIiwibWFwRHJhdyIsIm1hcExvY2FsZSIsImVmZmVjdCIsImFubm90YXRpb24iLCJhaUFzc2lzdGFudCIsIk1hcFZpZXdNb2RlIiwiR0xPQkVfTUlOX1pPT00iLCJHTE9CRV9NQVhfWk9PTSIsIkdMT0JFX01BWF9MQVRJVFVERSIsIkRFRkFVTFRfR0xPQkVfQ09ORklHIiwiYXRtb3NwaGVyZSIsImF6aW11dGgiLCJhemltdXRoQW5nbGUiLCJ0ZXJtaW5hdG9yIiwidGVybWluYXRvck9wYWNpdHkiLCJiYXNlbWFwIiwibGFiZWxzIiwibGFiZWxzQ29sb3IiLCJhZG1pbkxpbmVzIiwiYWRtaW5MaW5lc0NvbG9yIiwid2F0ZXIiLCJ3YXRlckNvbG9yIiwic3VyZmFjZSIsInN1cmZhY2VDb2xvciIsImJhY2tncm91bmRDb2xvciIsInN0YXJzIiwiR0xPQkVfU1VQUE9SVEVEX0xBWUVSUyIsImFyYyIsImdyaWQiLCJoZXhhZ29uIiwiY2x1c3RlciIsImhleGFnb25JZCIsInZlY3RvclRpbGUiLCJoZXhUaWxlIiwibGluZSIsInRyaXAiLCJyYXN0ZXJUaWxlIiwiaGVhdG1hcCIsInMyIiwidGlsZTNkIiwiZmxvdyIsIk1hcFNwbGl0TW9kZSIsIlBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIiLCJURVhUX09VVExJTkVfTVVMVElQTElFUiIsImRhdGFUZXN0SWRzIiwiaW5mb0ljb24iLCJ3YXJuaW5nSWNvbiIsImVycm9ySWNvbiIsInN1Y2Nlc3NJY29uIiwiY2hlY2ttYXJrSWNvbiIsInNvcnRhYmxlTGF5ZXJJdGVtIiwic3RhdGljTGF5ZXJJdGVtIiwibGF5ZXJUaXRsZUVkaXRvciIsInJlbW92ZUxheWVyQWN0aW9uIiwibGF5ZXJQYW5lbCIsInNvcnRhYmxlRWZmZWN0SXRlbSIsInN0YXRpY0VmZmVjdEl0ZW0iLCJwcm92aWRlckxvYWRpbmciLCJwcm92aWRlck1hcEluZm9QYW5lbCIsInByb3ZpZGVyU2VsZWN0IiwiY2xvdWRIZWFkZXIiLCJwcm92aWRlclNoYXJlTWFwIiwiREVGQVVMVF9USU1FWk9ORSIsIkRFRkFVTFRfUE9TVF9QUk9DRVNTSU5HX0VGRkVDVF9UWVBFIiwiREVGQVVMVF9MSUdIVF9DT0xPUiIsIkRFRkFVTFRfTElHSFRfSU5URU5TSVRZIiwiREVGQVVMVF9TSEFET1dfSU5URU5TSVRZIiwiREVGQVVMVF9TSEFET1dfQ09MT1IiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTIiwicGljayIsImN1cnJlbnQiLCJhbmltYXRpb24iLCJERUZBVUxUX0xJR0hUX0FORF9TSEFET1dfUFJPUFMiLCJEYXRlIiwibm93IiwidGltZU1vZGUiLCJzaGFkb3dJbnRlbnNpdHkiLCJzaGFkb3dDb2xvciIsInN1bkxpZ2h0Q29sb3IiLCJzdW5MaWdodEludGVuc2l0eSIsImFtYmllbnRMaWdodENvbG9yIiwiYW1iaWVudExpZ2h0SW50ZW5zaXR5IiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJuYW1lIiwicGFyYW1ldGVycyIsIm1pbiIsIm1heCIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJkZWZhdWx0VmFsdWUiLCJESVNUQU5DRV9GT0dfVFlQRSIsIlNVUkZBQ0VfRk9HX1RZUEUiLCJQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTIiwiaW5rIiwiYnJpZ2h0bmVzc0NvbnRyYXN0IiwiaHVlU2F0dXJhdGlvbiIsInZpYnJhbmNlIiwic2VwaWEiLCJkb3RTY3JlZW4iLCJQSSIsImNvbG9ySGFsZnRvbmUiLCJub2lzZSIsInRyaWFuZ2xlQmx1ciIsInpvb21CbHVyIiwidGlsdFNoaWZ0IiwiZWRnZVdvcmsiLCJ2aWduZXR0ZSIsIm1hZ25pZnkiLCJoZXhhZ29uYWxQaXhlbGF0ZSIsImRpc3RhbmNlRm9nIiwic3VyZmFjZUZvZyIsIkVGRkVDVF9ERVNDUklQVElPTlMiLCJrZXlOYW1lIiwiU1lOQ19USU1FTElORV9NT0RFUyIsInN0YXJ0IiwiZW5kIiwiR0VPQVJST1dfTUVUQURBVEFfS0VZIiwiR0VPQVJST1dfRVhURU5TSU9OUyIsIkxPQURFUlNfQ0ROX1ZFUlNJT04iLCJMT0FERVJTX0NETl9VUkwiLCJnZXRMb2FkZXJPcHRpb25zIiwibXZ0Iiwid29ya2VyVXJsIiwibnB5IiwiQ1VTVE9NX1NDRU5FR1JBUEhfTU9ERUxfSUQiLCJNT0RFTFNfQkFTRV9VUkwiLCJUUklQX0xBWUVSX1NDRU5FR1JBUEhfTU9ERUxTIiwiYW5nbGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlZmF1bHQtc2V0dGluZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGtleU1pcnJvciBmcm9tICdrZXltaXJyb3InO1xuXG5pbXBvcnQge1xuICBCYXNlTWFwU3R5bGUsXG4gIEVmZmVjdERlc2NyaXB0aW9uLFxuICBSR0JBQ29sb3IsXG4gIFN5bmNUaW1lbGluZU1vZGUsXG4gIEJhc2VNYXBDb2xvck1vZGVzLFxuICBNZXJnZVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIHNjYWxlTGluZWFyLFxuICBzY2FsZUxvZyxcbiAgc2NhbGVPcmRpbmFsLFxuICBzY2FsZVBvaW50LFxuICBzY2FsZVF1YW50aWxlLFxuICBzY2FsZVF1YW50aXplLFxuICBzY2FsZVNxcnQsXG4gIHNjYWxlVGhyZXNob2xkXG59IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7VE9PTFRJUF9GT1JNQVRfVFlQRVN9IGZyb20gJy4vdG9vbHRpcCc7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fUFJFRklYID0gJ0BAa2VwbGVyLmdsLyc7XG5leHBvcnQgY29uc3QgS0VQTEVSX1VORk9MREVEX0JVQ0tFVCA9ICdodHRwczovL3N0dWRpby1wdWJsaWMtZGF0YS5mb3Vyc3F1YXJlLmNvbS9zdGF0aWNzL2tlcGxlcmdsJztcbmV4cG9ydCBjb25zdCBCQVNFTUFQX0lDT05fUFJFRklYID0gYGdlb2R1ZGVgO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwgPSAnaHR0cHM6Ly9hcGkubWFwYm94LmNvbSc7XG5leHBvcnQgY29uc3QgVFJBTlNJVElPTl9EVVJBVElPTiA9IDA7XG5cbi8vIE1vZGFsIElkc1xuLyoqXG4gKiBNb2RhbCBpZDogZGF0YSB0YWJsZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREFUQV9UQUJMRV9JRCA9ICdkYXRhVGFibGUnO1xuLyoqXG4gKiBNb2RhbCBpZDogZGVsZXRlIGRhdGFzZXQgY29uZmlybSBkaWFsb2dcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFTEVURV9EQVRBX0lEID0gJ2RlbGV0ZURhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogYWRkIGRhdGEgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEFERF9EQVRBX0lEID0gJ2FkZERhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IGltYWdlIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRfSU1BR0VfSUQgPSAnZXhwb3J0SW1hZ2UnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IGRhdGEgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX0lEID0gJ2V4cG9ydERhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogYWRkIGN1c3RvbSBtYXAgc3R5bGUgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEFERF9NQVBfU1RZTEVfSUQgPSAnYWRkTWFwU3R5bGUnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IG1hcCBtb2RhbFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRVhQT1JUX01BUF9JRCA9ICdleHBvcnRNYXAnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IHZpZGVvIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRfVklERU9fSUQgPSAnZXhwb3J0VmlkZW8nO1xuLyoqXG4gKiBNb2RhbCBpZDogc2F2ZSBtYXAgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IFNBVkVfTUFQX0lEID0gJ3NhdmVNYXAnO1xuLyoqXG4gKiBNb2RhbCBpZDogY29uZmlybSB0byBvdmVyd3JpdGUgc2F2ZWQgbWFwXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBPVkVSV1JJVEVfTUFQX0lEID0gJ292ZXJ3cml0ZU1hcCc7XG4vKipcbiAqIE1vZGFsIGlkOiBzaGFyZSBtYXAgdXJsIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBTSEFSRV9NQVBfSUQgPSAnc2hhcmVNYXAnO1xuXG5leHBvcnQgY29uc3QgS0VQTEVSX0dMX05BTUUgPSAna2VwbGVyLmdsJztcblxuLy8gX19QQUNLQUdFX1ZFUlNJT05fXyBpcyBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGJ5IEJhYmVsL0VzYnVpbGQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzXG4vLyBTaW5jZSB3ZSBhcmUgaW5qZWN0aW5nIHRoaXMgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpdGggYmFiZWxcbi8vIHdoaWxlIGRldmVsb3BpbmcgVkVSU0lPTiBpcyBub3QgZGVmaW5lZCwgd2UgY2FwdHVyZSB0aGUgZXhjZXB0aW9uIGFuZCByZXR1cm5cbi8vIGFuIGVtcHR5IHN0cmluZyB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHJldHJpZXZlIHRoZSBsYXRlc3QgdW1kIHZlcnNpb25cbmV4cG9ydCBjb25zdCBLRVBMRVJfR0xfVkVSU0lPTiA9ICdfX1BBQ0tBR0VfVkVSU0lPTl9fJztcbmV4cG9ydCBjb25zdCBLRVBMRVJfR0xfV0VCU0lURSA9ICdodHRwOi8va2VwbGVyLmdsLyc7XG5cbmV4cG9ydCBjb25zdCBESU1FTlNJT05TID0ge1xuICBzaWRlUGFuZWw6IHtcbiAgICB3aWR0aDogMzAwLFxuICAgIG1hcmdpbjoge3RvcDogMTIsIGxlZnQ6IDEyLCBib3R0b206IDEyLCByaWdodDogMjB9LFxuICAgIGhlYWRlckhlaWdodDogOTZcbiAgfSxcbiAgbWFwQ29udHJvbDoge1xuICAgIHdpZHRoOiAxODQsXG4gICAgcGFkZGluZzogMTIsXG4gICAgbWFwTGVnZW5kOiB7XG4gICAgICBwaW5uZWQ6IHtcbiAgICAgICAgYm90dG9tOiAyMixcbiAgICAgICAgcmlnaHQ6IDEyXG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFRoZW1lIG5hbWUgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGBLZXBsZXJHbGAgYHByb3AudGhlbWVgLlxuICogQXZhaWxhYmxlIHRoZW1lcyBhcmUgYFRIRU1FLmxpZ2h0YCBhbmQgYFRIRU1FLmRhcmtgLiBEZWZhdWx0IHRoZW1lIGlzIGBUSEVNRS5kYXJrYFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7b2JqZWN0fVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBjb25zdCBNYXAgPSAoKSA9PiA8S2VwbGVyR2wgdGhlbWU9e1RIRU1FLmxpZ2h0fSBpZD1cIm1hcFwiLz5cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgVEhFTUUgPSBrZXlNaXJyb3Ioe1xuICBsaWdodDogbnVsbCxcbiAgZGFyazogbnVsbCxcbiAgYmFzZTogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBTSURFQkFSX1BBTkVMUyA9IFtcbiAge1xuICAgIGlkOiAnbGF5ZXInLFxuICAgIGxhYmVsOiAnc2lkZWJhci5wYW5lbHMubGF5ZXInLFxuICAgIG9uQ2xpY2s6IG51bGxcbiAgfSxcbiAge1xuICAgIGlkOiAnZmlsdGVyJyxcbiAgICBsYWJlbDogJ3NpZGViYXIucGFuZWxzLmZpbHRlcicsXG4gICAgb25DbGljazogbnVsbFxuICB9LFxuICB7XG4gICAgaWQ6ICdpbnRlcmFjdGlvbicsXG4gICAgbGFiZWw6ICdzaWRlYmFyLnBhbmVscy5pbnRlcmFjdGlvbicsXG4gICAgb25DbGljazogbnVsbFxuICB9LFxuICB7XG4gICAgaWQ6ICdtYXAnLFxuICAgIGxhYmVsOiAnc2lkZWJhci5wYW5lbHMuYmFzZW1hcCcsXG4gICAgb25DbGljazogbnVsbFxuICB9XG5dO1xuXG5leHBvcnQgY29uc3QgUEFORUxfVklFV19UT0dHTEVTID0ga2V5TWlycm9yKHtcbiAgbGlzdDogbnVsbCxcbiAgYnlEYXRhc2V0OiBudWxsXG59KTtcblxuLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IGNvbnN0IFBBTkVMUyA9IFNJREVCQVJfUEFORUxTO1xuXG4vLyBNQVAgU1RZTEVTXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JMREdfQ09MT1IgPSAnI0QxQ0VDNyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSAnIzAwMDAwMCc7XG5cbi8vIGFzc2lzdHMgaW4gaWRlbnRpZnlpbmcgYmFzZW1hcCBiYWNrZ3JvdW5kIGxheWVycyB3aGVuIGF1dG8tZGV0ZXJtaW5pbmcgdGhlIGJhY2tncm91bmRDb2xvclxuZXhwb3J0IGNvbnN0IEJBU0VfTUFQX0JBQ0tHUk9VTkRfTEFZRVJfSURTID0gWydiYWNrZ3JvdW5kJywgJ2JnJywgJ2xhbmQnLCAnd2F0ZXInXTtcblxuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVBfU0xVRyA9ICdCYWNrZ3JvdW5kJztcblxuZXhwb3J0IGNvbnN0IFRIUkVFX0RfQlVJTERJTkdfTEFZRVJfR1JPVVBfU0xVRyA9ICczZCBidWlsZGluZyc7XG5cbmV4cG9ydCB0eXBlIERFRkFVTFRfTEFZRVJfR1JPVVAgPSB7XG4gIHNsdWc6IHN0cmluZztcbiAgZmlsdGVyOiAodmFsdWUpID0+IGJvb2xlYW47XG4gIGRlZmF1bHRWaXNpYmlsaXR5OiBib29sZWFuO1xuICBpc1Zpc2liaWxpdHlUb2dnbGVBdmFpbGFibGU/OiBib29sZWFuO1xuICBpc01vdmVUb1RvcEF2YWlsYWJsZT86IGJvb2xlYW47XG4gIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVA6IERFRkFVTFRfTEFZRVJfR1JPVVAgPSB7XG4gIHNsdWc6IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVBfU0xVRyxcbiAgZmlsdGVyOiAoKSA9PiBmYWxzZSxcbiAgZGVmYXVsdFZpc2liaWxpdHk6IGZhbHNlLFxuICBpc1Zpc2liaWxpdHlUb2dnbGVBdmFpbGFibGU6IGZhbHNlLFxuICBpc01vdmVUb1RvcEF2YWlsYWJsZTogZmFsc2UsXG4gIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0dST1VQUzogREVGQVVMVF9MQVlFUl9HUk9VUFtdID0gW1xuICB7XG4gICAgc2x1ZzogJ2xhYmVsJyxcbiAgICBmaWx0ZXI6ICh7aWQsIHR5cGV9KSA9PiBpZC5tYXRjaCgvKD89KGxhYmVsfHBsYWNlLXxwb2ktKSkvKSB8fCB0eXBlPy5tYXRjaCgvKD89KHN5bWJvbCkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAncm9hZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PShyb2FkfHJhaWx3YXl8dHVubmVsfHN0cmVldHxicmlkZ2UpKSg/IS4qbGFiZWwpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYm9yZGVyJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvYm9yZGVyfGJvdW5kYXJpZXN8Ym91bmRhcnkvKSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogZmFsc2UsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYnVpbGRpbmcnLFxuICAgIGZpbHRlcjogKHtpZH0pID0+IGlkLm1hdGNoKC9idWlsZGluZy8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlLFxuICAgIGlzVmlzaWJpbGl0eVRvZ2dsZUF2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc01vdmVUb1RvcEF2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc0NvbG9yUGlja2VyQXZhaWxhYmxlOiBmYWxzZVxuICB9LFxuICB7XG4gICAgc2x1ZzogJ3dhdGVyJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvKD89KHdhdGVyfHN0cmVhbXxmZXJyeSkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnbGFuZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PShwYXJrc3xsYW5kY292ZXJ8aW5kdXN0cmlhbHxzYW5kfGhpbGxzaGFkZSkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiBUSFJFRV9EX0JVSUxESU5HX0xBWUVSX0dST1VQX1NMVUcsXG4gICAgZmlsdGVyOiAoKSA9PiBmYWxzZSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogZmFsc2UsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IHRydWVcbiAgfVxuXTtcblxuZXhwb3J0IGNvbnN0IEJBU0VfTUFQX0NPTE9SX01PREVTID0ga2V5TWlycm9yKHtcbiAgTk9ORTogbnVsbCxcbiAgREFSSzogbnVsbCxcbiAgTElHSFQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgTk9fTUFQX0lEID0gJ25vX21hcCc7XG5cbi8vIEZhbGxiYWNrIHN0eWxlIHRvIHVzZSB3aGVuIHN0eWxlcyBhcmUgYmVpbmcgZmV0Y2hlZCwgb3Igd2hlblxuLy8gYSBzdHlsZSBmYWlscyB0byBmZXRjaFxuZXhwb3J0IGNvbnN0IEVNUFRZX01BUEJPWF9TVFlMRSA9IHtcbiAgdmVyc2lvbjogOCxcbiAgc291cmNlczoge30sXG4gIGxheWVyczogW11cbn07XG5cbmV4cG9ydCBjb25zdCBNQVBfTElCX09QVElPTlMgPSB7XG4gIE1BUEJPWDogJ21hcGJveCcgYXMgY29uc3QsXG4gIE1BUExJQlJFOiAnbWFwbGlicmUnIGFzIGNvbnN0XG59O1xuXG4vKiogTWFwYm94IEdMIEpTIGRvZXMgbm90IHN1cHBvcnQgcGl0Y2ggYWJvdmUgNjAgZGVncmVlcyAqL1xuZXhwb3J0IGNvbnN0IE1BUEJPWF9NQVhfUElUQ0ggPSA2MDtcblxuZXhwb3J0IHR5cGUgQmFzZU1hcExpYnJhcnlUeXBlID0gJ21hcGJveCcgfCAnbWFwbGlicmUnO1xuXG5leHBvcnQgY29uc3QgTk9fQkFTRU1BUF9JQ09OID0gYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vTk9fQkFTRU1BUC5wbmdgO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9CQVNFX01BUF9TVFlMRSA9ICdkYXJrLW1hdHRlcic7XG5cbnR5cGUgRGVmYXVsdEJhc2VNYXBTdHlsZSA9IE1lcmdlPFxuICBCYXNlTWFwU3R5bGUsXG4gIHtcbiAgICBjb2xvck1vZGU6IEJhc2VNYXBDb2xvck1vZGVzO1xuICB9XG4+O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT19CQVNFTUFQX1NUWUxFOiBEZWZhdWx0QmFzZU1hcFN0eWxlID0ge1xuICBpZDogTk9fTUFQX0lELFxuICBsYWJlbDogJ05vIEJhc2VtYXAnLFxuICB1cmw6ICcnLFxuICBpY29uOiBOT19CQVNFTUFQX0lDT04sXG4gIGxheWVyR3JvdXBzOiBbQkFDS0dST1VORF9MQVlFUl9HUk9VUF0sXG4gIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuTk9ORSxcbiAgc3R5bGU6IEVNUFRZX01BUEJPWF9TVFlMRVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQQk9YX1NUWUxFUzogRGVmYXVsdEJhc2VNYXBTdHlsZVtdID0gW1xuICB7XG4gICAgaWQ6ICdkYXJrJyxcbiAgICBsYWJlbDogJ0RhcmsnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jam9xYmJmNmw5azMwMnNsOTZ0eXZrYTA5JyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX0RBUktfVjIucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLLFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnbGlnaHQnXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xpZ2h0JyxcbiAgICBsYWJlbDogJ0xpZ2h0JyxcbiAgICB1cmw6ICdtYXBib3g6Ly9zdHlsZXMvdWJlcmRhdGEvY2pvcWI5ajMzOWsxZjJzbDl0NWljNWJuNCcsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVUJFUl9MSUdIVF9WMi5wbmdgLFxuICAgIGxheWVyR3JvdXBzOiBERUZBVUxUX0xBWUVSX0dST1VQUyxcbiAgICBjb2xvck1vZGU6IEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hULFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnZGFyaydcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTGlnaHQnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jamZ5bDAza3AxdHVsMnNtZjV2MnRiZGQ0JyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX01VVEVEX0xJR0hULnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQsXG4gICAgY29tcGxpbWVudGFyeVN0eWxlSWQ6ICdtdXRlZF9uaWdodCdcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWRfbmlnaHQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTmlnaHQnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jamZ4aGxpa21hajFiMnNveXpldm55d2dzJyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX01VVEVEX05JR0hULnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSyxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ211dGVkJ1xuICB9XG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBCT1hfU0FURUxJVEVfU1RZTEVTOiBEZWZhdWx0QmFzZU1hcFN0eWxlW10gPSBbXG4gIHtcbiAgICBpZDogJ3NhdGVsbGl0ZScsXG4gICAgbGFiZWw6ICdTYXRlbGxpdGUgd2l0aCBzdHJlZXRzJyxcbiAgICB1cmw6IGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS1zdHJlZXRzLXYxMWAsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVUJFUl9TQVRFTExJVEUucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5OT05FXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUExJQlJFX1NUWUxFUzogRGVmYXVsdEJhc2VNYXBTdHlsZVtdID0gW1xuICB7XG4gICAgaWQ6ICdkYXJrLW1hdHRlcicsXG4gICAgbGFiZWw6ICdEYXJrTWF0dGVyJyxcbiAgICB1cmw6ICdodHRwczovL2Jhc2VtYXBzLmNhcnRvY2RuLmNvbS9nbC9kYXJrLW1hdHRlci1nbC1zdHlsZS9zdHlsZS5qc29uJyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9EQVJLTUFUVEVSLnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSyxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ3Bvc2l0cm9uJ1xuICB9LFxuICB7XG4gICAgaWQ6ICdwb3NpdHJvbicsXG4gICAgbGFiZWw6ICdQb3NpdHJvbicsXG4gICAgdXJsOiAnaHR0cHM6Ly9iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vZ2wvcG9zaXRyb24tZ2wtc3R5bGUvc3R5bGUuanNvbicsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vUE9TSVRST04ucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVCxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ2RhcmstbWF0dGVyJ1xuICB9LFxuICB7XG4gICAgaWQ6ICd2b3lhZ2VyJyxcbiAgICBsYWJlbDogJ1ZveWFnZXInLFxuICAgIHVybDogJ2h0dHBzOi8vYmFzZW1hcHMuY2FydG9jZG4uY29tL2dsL3ZveWFnZXItZ2wtc3R5bGUvc3R5bGUuanNvbicsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVk9ZQUdFUi5wbmdgLFxuICAgIGxheWVyR3JvdXBzOiBERUZBVUxUX0xBWUVSX0dST1VQUyxcbiAgICBjb2xvck1vZGU6IEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hULFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnZGFyay1tYXR0ZXInXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUF9TVFlMRVMgPSBbXG4gIERFRkFVTFRfTk9fQkFTRU1BUF9TVFlMRSxcbiAgLi4uREVGQVVMVF9NQVBMSUJSRV9TVFlMRVMsXG4gIC4uLkRFRkFVTFRfTUFQQk9YX1NBVEVMSVRFX1NUWUxFUyxcbiAgLi4uREVGQVVMVF9NQVBCT1hfU1RZTEVTXG5dO1xuXG5leHBvcnQgY29uc3QgR0VPSlNPTl9GSUVMRFMgPSB7XG4gIGdlb2pzb246IFsnX2dlb2pzb24nLCAnYWxsX3BvaW50cycsICdnZW9qc29uJ11cbn07XG5cbmV4cG9ydCBjb25zdCBJQ09OX0ZJRUxEUyA9IHtcbiAgaWNvbjogWydpY29uJ11cbn07XG5cbmV4cG9ydCBjb25zdCBUUklQX1BPSU5UX0ZJRUxEUzogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICBbJ2xhdCcsICdsbmcnXSxcbiAgWydsYXQnLCAnbG9uJ10sXG4gIFsnbGF0JywgJ2xvbmcnXSxcbiAgWydsYXRpdHVkZScsICdsb25naXR1ZGUnXVxuXTtcblxuZXhwb3J0IGNvbnN0IEFMVElUVURFX0ZJRUxEUyA9IFsnYWx0JywgJ2FsdGl0dWRlJ107XG5leHBvcnQgY29uc3QgVFJJUF9BUkNfRklFTERTID0ge1xuICBsYXQwOiAnYmVnaW50cmlwJyxcbiAgbG5nMDogJ2JlZ2ludHJpcCcsXG4gIGxhdDE6ICdkcm9wb2ZmJyxcbiAgbG5nMTogJ2Ryb3BvZmYnXG59O1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgcmFuZ2U6IG51bGwsXG4gIHNlbGVjdDogbnVsbCxcbiAgaW5wdXQ6IG51bGwsXG4gIHRpbWVSYW5nZTogbnVsbCxcbiAgbXVsdGlTZWxlY3Q6IG51bGwsXG4gIHBvbHlnb246IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1ZJRVdfVFlQRVMgPSBrZXlNaXJyb3Ioe1xuICBzaWRlOiBudWxsLFxuICBlbmxhcmdlZDogbnVsbCxcbiAgbWluaWZpZWQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxURVJfVklFV19UWVBFID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcblxuZXhwb3J0IHR5cGUgU0NBTEVfVFlQRVNfREVGID0ge1xuICBvcmRpbmFsOiAnb3JkaW5hbCc7XG4gIHF1YW50aWxlOiAncXVhbnRpbGUnO1xuICBxdWFudGl6ZTogJ3F1YW50aXplJztcbiAgbGluZWFyOiAnbGluZWFyJztcbiAgc3FydDogJ3NxcnQnO1xuICBsb2c6ICdsb2cnO1xuICBwb2ludDogJ3BvaW50JztcbiAgdGhyZXNob2xkOiAndGhyZXNob2xkJztcbiAgY3VzdG9tOiAnY3VzdG9tJztcbiAgY3VzdG9tT3JkaW5hbDogJ2N1c3RvbU9yZGluYWwnO1xufTtcblxuZXhwb3J0IGNvbnN0IFNDQUxFX1RZUEVTOiBTQ0FMRV9UWVBFU19ERUYgPSBrZXlNaXJyb3Ioe1xuICBvcmRpbmFsOiBudWxsLFxuICBxdWFudGlsZTogbnVsbCxcbiAgcXVhbnRpemU6IG51bGwsXG4gIGxpbmVhcjogbnVsbCxcbiAgc3FydDogbnVsbCxcbiAgbG9nOiBudWxsLFxuICB0aHJlc2hvbGQ6IG51bGwsXG4gIGN1c3RvbTogbnVsbCxcbiAgY3VzdG9tT3JkaW5hbDogbnVsbCxcbiAgLy8gb3JkaW5hbCBkb21haW4gdG8gbGluZWFyIHJhbmdlXG4gIHBvaW50OiBudWxsXG59KTtcbmV4cG9ydCBjb25zdCBTQ0FMRV9UWVBFX05BTUVTOiB7W2tleSBpbiBrZXlvZiBTQ0FMRV9UWVBFU19ERUZdOiBzdHJpbmd9ID0ge1xuICBvcmRpbmFsOiAnT3JkaW5hbCcsXG4gIHF1YW50aWxlOiAnUXVhbnRpbGUnLFxuICBxdWFudGl6ZTogJ1F1YW50aXplJyxcbiAgbGluZWFyOiAnTGluZWFyJyxcbiAgc3FydDogJ1NxcnQnLFxuICBsb2c6ICdMb2cnLFxuICB0aHJlc2hvbGQ6ICdUaHJlc2hvbGQnLFxuICBjdXN0b206ICdDdXN0b20gQnJlYWtzJyxcbiAgY3VzdG9tT3JkaW5hbDogJ0N1c3RvbSBPcmRpbmFsJyxcbiAgcG9pbnQ6ICdQb2ludCdcbn07XG5cbmV4cG9ydCB0eXBlIFNDQUxFX0ZVTkNfVFlQRSA9IHtcbiAgW2tleSBpbiBrZXlvZiBTQ0FMRV9UWVBFU19ERUZdOiAoKSA9PiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgU0NBTEVfRlVOQyA9IHtcbiAgW1NDQUxFX1RZUEVTLmxpbmVhcl06IHNjYWxlTGluZWFyLFxuICBbU0NBTEVfVFlQRVMucXVhbnRpemVdOiBzY2FsZVF1YW50aXplLFxuICBbU0NBTEVfVFlQRVMucXVhbnRpbGVdOiBzY2FsZVF1YW50aWxlLFxuICBbU0NBTEVfVFlQRVMub3JkaW5hbF06IHNjYWxlT3JkaW5hbCxcbiAgW1NDQUxFX1RZUEVTLnNxcnRdOiBzY2FsZVNxcnQsXG4gIFtTQ0FMRV9UWVBFUy5sb2ddOiBzY2FsZUxvZyxcbiAgW1NDQUxFX1RZUEVTLnBvaW50XTogc2NhbGVQb2ludCxcbiAgW1NDQUxFX1RZUEVTLnRocmVzaG9sZF06IHNjYWxlVGhyZXNob2xkLFxuICBbU0NBTEVfVFlQRVMuY3VzdG9tXTogc2NhbGVUaHJlc2hvbGQsXG4gIFtTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsXTogc2NhbGVPcmRpbmFsXG59O1xuXG5leHBvcnQgY29uc3QgQUxMX0ZJRUxEX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgYm9vbGVhbjogbnVsbCxcbiAgZGF0ZTogbnVsbCxcbiAgZ2VvanNvbjogbnVsbCxcbiAgaW50ZWdlcjogbnVsbCxcbiAgcmVhbDogbnVsbCxcbiAgc3RyaW5nOiBudWxsLFxuICB0aW1lc3RhbXA6IG51bGwsXG4gIHBvaW50OiBudWxsLFxuICBhcnJheTogbnVsbCxcbiAgb2JqZWN0OiBudWxsLFxuICBnZW9hcnJvdzogbnVsbCxcbiAgaDM6IG51bGxcbn0pO1xuXG4vLyBEYXRhIFRhYmxlXG5leHBvcnQgY29uc3QgU09SVF9PUkRFUiA9IGtleU1pcnJvcih7XG4gIEFTQ0VORElORzogbnVsbCxcbiAgREVTQ0VORElORzogbnVsbCxcbiAgVU5TT1JUOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IFRBQkxFX09QVElPTiA9IGtleU1pcnJvcih7XG4gIFNPUlRfQVNDOiBudWxsLFxuICBTT1JUX0RFUzogbnVsbCxcbiAgVU5TT1JUOiBudWxsLFxuICBQSU46IG51bGwsXG4gIFVOUElOOiBudWxsLFxuICBDT1BZOiBudWxsLFxuICBGT1JNQVRfQ09MVU1OOiBudWxsXG59KTtcblxuZXhwb3J0IHR5cGUgVGFibGVPcHRpb24gPSB7XG4gIHZhbHVlOiAnU09SVF9BU0MnIHwgJ1NPUlRfREVTJyB8ICdVTlNPUlQnIHwgJ1BJTicgfCAnVU5QSU4nIHwgJ0NPUFknIHwgJ0ZPUk1BVF9DT0xVTU4nO1xuICBkaXNwbGF5OiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgY29uZGl0aW9uPzogKHByb3BzOiBhbnkpID0+IGJvb2xlYW47XG59O1xuZXhwb3J0IGNvbnN0IFRBQkxFX09QVElPTl9MSVNUOiBUYWJsZU9wdGlvbltdID0gW1xuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5TT1JUX0FTQyxcbiAgICBkaXNwbGF5OiAnU29ydCBBc2NlbmRpbmcnLFxuICAgIGljb246ICdBcnJvd1VwJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+IHByb3BzLnNvcnRUYWJsZUNvbHVtbiAmJiBwcm9wcy5zb3J0TW9kZSAhPT0gU09SVF9PUkRFUi5BU0NFTkRJTkdcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uU09SVF9ERVMsXG4gICAgZGlzcGxheTogJ1NvcnQgRGVzY2VuZGluZycsXG4gICAgaWNvbjogJ0Fycm93RG93bicsXG4gICAgY29uZGl0aW9uOiBwcm9wcyA9PiBwcm9wcy5zb3J0VGFibGVDb2x1bW4gJiYgcHJvcHMuc29ydE1vZGUgIT09IFNPUlRfT1JERVIuREVTQ0VORElOR1xuICB9LFxuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5VTlNPUlQsXG4gICAgZGlzcGxheTogJ1Vuc29ydCBDb2x1bW4nLFxuICAgIGljb246ICdDYW5jZWwnLFxuICAgIGNvbmRpdGlvbjogcHJvcHMgPT4gcHJvcHMuaXNTb3J0ZWRcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uUElOLFxuICAgIGRpc3BsYXk6ICdQaW4gQ29sdW1uJyxcbiAgICBpY29uOiAnUGluJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+ICFwcm9wcy5pc1Bpbm5lZFxuICB9LFxuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5VTlBJTixcbiAgICBkaXNwbGF5OiAnVW5waW4gQ29sdW1uJyxcbiAgICBpY29uOiAnQ2FuY2VsJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+IHByb3BzLmlzUGlubmVkXG4gIH0sXG4gIHt2YWx1ZTogVEFCTEVfT1BUSU9OLkNPUFksIGRpc3BsYXk6ICdDb3B5IENvbHVtbicsIGljb246ICdDbGlwYm9hcmQnfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uRk9STUFUX0NPTFVNTixcbiAgICBkaXNwbGF5OiAnRm9ybWF0IENvbHVtbicsXG4gICAgaWNvbjogJ0hhc2gnLFxuICAgIGNvbmRpdGlvbjogcHJvcHMgPT4gcHJvcHMuc2V0RGlzcGxheUZvcm1hdFxuICB9XG5dO1xuXG5jb25zdCBZRUxMT1cgPSAnMjQ4LCAxOTQsIDI4JztcbmNvbnN0IFBJTksgPSAnMjQyLCAxNTIsIDE2Myc7XG5jb25zdCBQVVJQTEUgPSAnMTYwLCAxMDYsIDIwNic7XG5jb25zdCBCTFVFID0gJzE0MCwgMjEwLCAyMDUnO1xuY29uc3QgQkxVRTIgPSAnMTA2LCAxNjAsIDIwNic7XG5jb25zdCBCTFVFMyA9ICcwLCAxNzIsIDIzNyc7XG5jb25zdCBHUkVFTiA9ICcxMDYsIDE2MCwgNTYnO1xuY29uc3QgR1JFRU4yID0gJzc0LCAxNjUsIDE1MCc7XG5jb25zdCBSRUQgPSAnMjM3LCA4OCwgMTA2JztcbmNvbnN0IE9SQU5HRSA9ICcyMzEsIDExMCwgNTgnO1xuXG5leHBvcnQgY29uc3QgRklFTERfVFlQRV9ESVNQTEFZID0ge1xuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiB7XG4gICAgbGFiZWw6ICdib29sJyxcbiAgICBjb2xvcjogUElOS1xuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmRhdGVdOiB7XG4gICAgbGFiZWw6ICdkYXRlJyxcbiAgICBjb2xvcjogUFVSUExFXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IHtcbiAgICBsYWJlbDogJ2dlbycsXG4gICAgY29sb3I6IEJMVUUyXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvYXJyb3ddOiB7XG4gICAgbGFiZWw6ICdnZW8nLFxuICAgIGNvbG9yOiBCTFVFMlxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiB7XG4gICAgbGFiZWw6ICdpbnQnLFxuICAgIGNvbG9yOiBZRUxMT1dcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIGxhYmVsOiAnZmxvYXQnLFxuICAgIGNvbG9yOiBZRUxMT1dcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiB7XG4gICAgbGFiZWw6ICdzdHJpbmcnLFxuICAgIGNvbG9yOiBCTFVFXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXToge1xuICAgIGxhYmVsOiAndGltZScsXG4gICAgY29sb3I6IEdSRUVOXG4gIH0sXG4gIC8vIGZpZWxkIHBhaXJzXG4gIFtBTExfRklFTERfVFlQRVMucG9pbnRdOiB7XG4gICAgbGFiZWw6ICdwb2ludCcsXG4gICAgY29sb3I6IEJMVUUzXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuYXJyYXldOiB7XG4gICAgbGFiZWw6ICdhcnJheScsXG4gICAgY29sb3I6IE9SQU5HRVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLm9iamVjdF06IHtcbiAgICBsYWJlbDogJ29iamVjdCcsXG4gICAgY29sb3I6IEdSRUVOMlxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmgzXToge1xuICAgIGxhYmVsOiAnaDMnLFxuICAgIGNvbG9yOiBCTFVFXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9DT0xPUlMgPSB7XG4gIGRlZmF1bHQ6IFJFRFxufTtcbmV4cG9ydCBjb25zdCBISUdITElHSF9DT0xPUl8zRDogUkdCQUNvbG9yID0gWzI1NSwgMjU1LCAyNTUsIDYwXTtcbmV4cG9ydCBjb25zdCBDSEFOTkVMX1NDQUxFUyA9IGtleU1pcnJvcih7XG4gIGNvbG9yOiBudWxsLFxuICByYWRpdXM6IG51bGwsXG4gIHNpemU6IG51bGwsXG4gIGNvbG9yQWdncjogbnVsbCxcbiAgc2l6ZUFnZ3I6IG51bGwsXG4gIGFuZ2xlOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEFHR1JFR0FUSU9OX1RZUEVTOiB7XG4gIC8vIGRlZmF1bHRcbiAgY291bnQ6ICdjb3VudCc7XG4gIC8vIGxpbmVhclxuICBhdmVyYWdlOiAnYXZlcmFnZSc7XG4gIG1heGltdW06ICdtYXhpbXVtJztcbiAgbWluaW11bTogJ21pbmltdW0nO1xuICBtZWRpYW46ICdtZWRpYW4nO1xuICBzdGRldjogJ3N0ZGV2JztcbiAgc3VtOiAnc3VtJztcbiAgdmFyaWFuY2U6ICd2YXJpYW5jZSc7XG4gIC8vIG9yZGluYWxcbiAgbW9kZTogJ21vZGUnO1xuICBjb3VudFVuaXF1ZTogJ2NvdW50VW5pcXVlJztcbn0gPSB7XG4gIC8vIGRlZmF1bHRcbiAgY291bnQ6ICdjb3VudCcsXG4gIC8vIGxpbmVhclxuICBhdmVyYWdlOiAnYXZlcmFnZScsXG4gIG1heGltdW06ICdtYXhpbXVtJyxcbiAgbWluaW11bTogJ21pbmltdW0nLFxuICBtZWRpYW46ICdtZWRpYW4nLFxuICBzdGRldjogJ3N0ZGV2JyxcbiAgc3VtOiAnc3VtJyxcbiAgdmFyaWFuY2U6ICd2YXJpYW5jZScsXG4gIC8vIG9yZGluYWxcbiAgbW9kZTogJ21vZGUnLFxuICBjb3VudFVuaXF1ZTogJ2NvdW50VW5pcXVlJ1xufTtcblxuZXhwb3J0IGNvbnN0IEFHR1JFR0FUSU9OX1RZUEVfT1BUSU9OUzoge2lkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmd9W10gPSBPYmplY3QuZW50cmllcyhcbiAgQUdHUkVHQVRJT05fVFlQRVNcbikubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gIGlkOiBrZXksXG4gIGxhYmVsOlxuICAgIGtleSA9PT0gJ3N0ZGV2J1xuICAgICAgPyAnU3RkIERldmlhdGlvbidcbiAgICAgIDoga2V5ID09PSAnY291bnRVbmlxdWUnXG4gICAgICA/ICdDb3VudCBVbmlxdWUnXG4gICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgID8gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKVxuICAgICAgOiB2YWx1ZVxufSkpO1xuXG5leHBvcnQgY29uc3QgbGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZSwgU0NBTEVfVFlQRVMuY3VzdG9tXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnJhZGl1c106IFtTQ0FMRV9UWVBFUy5zcXJ0XSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddLFxuICBbQ0hBTk5FTF9TQ0FMRVMuYW5nbGVdOiBbU0NBTEVfVFlQRVMubGluZWFyXVxufTtcblxuY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTl9DT0xPUl9TQ0FMRVMgPSBbXG4gIFNDQUxFX1RZUEVTLnF1YW50aXplLFxuICBTQ0FMRV9UWVBFUy5xdWFudGlsZSxcbiAgU0NBTEVfVFlQRVMuY3VzdG9tXG5dO1xuXG5leHBvcnQgY29uc3QgbGluZWFyRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnMgPSB7XG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvckFnZ3JdOiBbXG4gICAgQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sXG4gICAgQUdHUkVHQVRJT05fVFlQRVMubWVkaWFuLFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2LFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLnN1bSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy52YXJpYW5jZSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy5jb3VudFxuICBdLnJlZHVjZSgocHJldiwgY3VyKSA9PiB7XG4gICAgcHJldltjdXJdID0gREVGQVVMVF9BR0dSRUdBVElPTl9DT0xPUl9TQ0FMRVM7XG4gICAgcmV0dXJuIHByZXY7XG4gIH0sIHt9KSxcblxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2VdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddLFxuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtXTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMubWluaW11bV06IFtTQ0FMRV9UWVBFUy5saW5lYXIsIFNDQUxFX1RZUEVTLnNxcnQsIFNDQUxFX1RZUEVTLmxvZ10sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1lZGlhbl06IFtTQ0FMRV9UWVBFUy5saW5lYXIsIFNDQUxFX1RZUEVTLnNxcnQsIFNDQUxFX1RZUEVTLmxvZ10sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2XTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuc3VtXTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMudmFyaWFuY2VdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBvcmRpbmFsRmllbGRTY2FsZUZ1bmN0aW9ucyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1NDQUxFX1RZUEVTLm9yZGluYWwsIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWxdLFxuICBbQ0hBTk5FTF9TQ0FMRVMucmFkaXVzXTogW1NDQUxFX1RZUEVTLnBvaW50XSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbU0NBTEVfVFlQRVMucG9pbnRdXG59O1xuXG5leHBvcnQgY29uc3Qgb3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zID0ge1xuICAvLyBbQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyXTogW1NDQUxFX1RZUEVTLm9yZGluYWwsIFNDQUxFX1RZUEVTLmxpbmVhcl0sXG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvckFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1vZGVdOiBbU0NBTEVfVFlQRVMub3JkaW5hbF0sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmNvdW50VW5pcXVlXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZV1cbiAgfSxcblxuICAvLyBDdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IHlldFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7fVxufTtcblxuZXhwb3J0IGNvbnN0IG5vdFN1cHBvcnRlZFNjYWxlT3B0cyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW10sXG4gIFtDSEFOTkVMX1NDQUxFUy5yYWRpdXNdOiBbXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG5vdFN1cHBvcnRBZ2dyT3B0cyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yQWdncl06IHt9LFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7fVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGFnZ3JlZ2F0aW9uIGFyZSBiYXNlZCBvbiBvY3VudFxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTiA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yQWdncl06IHtcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuY291bnRdOiBERUZBVUxUX0FHR1JFR0FUSU9OX0NPTE9SX1NDQUxFU1xuICB9LFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmNvdW50XTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXVxuICB9XG59O1xuXG4vKipcbiAqIERlZmluZSB3aGF0IHR5cGUgb2Ygc2NhbGUgb3BlcmF0aW9uIGlzIGFsbG93ZWQgb24gZWFjaCB0eXBlIG9mIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgRklFTERfT1BUUyA9IHtcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiB7XG4gICAgdHlwZTogJ2NhdGVnb3JpY2FsJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ub3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5vcmRpbmFsRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIHR5cGU6ICdudW1lcmljYWwnLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5saW5lYXJGaWVsZFNjYWxlRnVuY3Rpb25zLFxuICAgICAgLi4ubGluZWFyRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLk5PTkUsXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRFQ0lNQUwsXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLlBFUkNFTlRBR0VcbiAgICAgIF1cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXToge1xuICAgIHR5cGU6ICd0aW1lJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLm5vdFN1cHBvcnRBZ2dyT3B0c1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6IGQgPT4gZCxcbiAgICAgIHRvb2x0aXA6IFtcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuTk9ORSxcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURSxcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV9USU1FXG4gICAgICBdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiB7XG4gICAgdHlwZTogJ251bWVyaWNhbCcsXG4gICAgc2NhbGU6IHtcbiAgICAgIC4uLntcbiAgICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgICAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1xuICAgICAgICAgIC4uLmxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnNbQ0hBTk5FTF9TQ0FMRVMuY29sb3JdLFxuICAgICAgICAgIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC4uLmxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogZCA9PiBkLFxuICAgICAgdG9vbHRpcDogW1xuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5OT05FLFxuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMLFxuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5QRVJDRU5UQUdFXG4gICAgICBdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5vcmRpbmFsRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLm9yZGluYWxGaWVsZEFnZ3JTY2FsZUZ1bmN0aW9uc1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6IGQgPT4gZCxcbiAgICAgIHRvb2x0aXA6IFtUT09MVElQX0ZPUk1BVF9UWVBFUy5OT05FLCBUT09MVElQX0ZPUk1BVF9UWVBFUy5CT09MRUFOXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXToge1xuICAgIHR5cGU6ICd0aW1lJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ub3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5vcmRpbmFsRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbVE9PTFRJUF9GT1JNQVRfVFlQRVMuTk9ORSwgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV1cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IHtcbiAgICB0eXBlOiAnZ2VvbWV0cnknLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5ub3RTdXBwb3J0ZWRTY2FsZU9wdHMsXG4gICAgICAuLi5ub3RTdXBwb3J0QWdnck9wdHNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiAoKSA9PiAnLi4uJyxcbiAgICAgIHRvb2x0aXA6IFtdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93XToge1xuICAgIHR5cGU6ICdnZW9tZXRyeScsXG4gICAgc2NhbGU6IHtcbiAgICAgIC4uLm5vdFN1cHBvcnRlZFNjYWxlT3B0cyxcbiAgICAgIC4uLm5vdFN1cHBvcnRBZ2dyT3B0c1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6ICgpID0+ICcuLi4nLFxuICAgICAgdG9vbHRpcDogW11cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMub2JqZWN0XToge1xuICAgIHR5cGU6ICdudW1lcmljYWwnLFxuICAgIHNjYWxlOiB7fSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogKCkgPT4gJy4uLicsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5hcnJheV06IHtcbiAgICB0eXBlOiAnbnVtZXJpY2FsJyxcbiAgICBzY2FsZToge30sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6ICgpID0+ICcuLi4nLFxuICAgICAgdG9vbHRpcDogW11cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuaDNdOiB7XG4gICAgdHlwZTogJ2gzJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubm90U3VwcG9ydGVkU2NhbGVPcHRzLFxuICAgICAgLi4ubm90U3VwcG9ydEFnZ3JPcHRzXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogKCkgPT4gJy4uLicsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyA9IE9iamVjdC5rZXlzKENIQU5ORUxfU0NBTEVTKS5yZWR1Y2UoXG4gIChhY2N1LCBrZXkpID0+ICh7XG4gICAgLi4uYWNjdSxcbiAgICBba2V5XTogT2JqZWN0LmtleXMoRklFTERfT1BUUykuZmlsdGVyKFxuICAgICAgZnQgPT4gRklFTERfT1BUU1tmdF0uc2NhbGVba2V5XSAmJiBPYmplY3Qua2V5cyhGSUVMRF9PUFRTW2Z0XS5zY2FsZVtrZXldKS5sZW5ndGhcbiAgICApXG4gIH0pLFxuICB7fSBhcyB7W2lkOiBzdHJpbmddOiBzdHJpbmdbXX1cbik7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0NPTE9SID0ge1xuICB0cmlwQXJjOiAnIzkyMjZDNicsXG4gIGJlZ2ludHJpcF9sYXQ6ICcjMUU5NkJFJyxcbiAgZHJvcG9mZl9sYXQ6ICcjRkY5OTFGJyxcbiAgcmVxdWVzdF9sYXQ6ICcjNTJBMzUzJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfQ09MT1JfUEFMRVRURSA9ICdHbG9iYWwgV2FybWluZyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTID0gNjtcblxuLy8gbGV0IHVzZXIgcGFzcyBpbiBkZWZhdWx0IHRvb2x0aXAgZmllbGRzXG5leHBvcnQgY29uc3QgREVGQVVMVF9UT09MVElQX0ZJRUxEUzogYW55W10gPSBbXTtcblxuZXhwb3J0IGNvbnN0IE5PX1ZBTFVFX0NPTE9SOiBSR0JBQ29sb3IgPSBbMCwgMCwgMCwgMF07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BJQ0tJTkdfUkFESVVTID0gMztcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfQkxFTkRJTkdTID0ge1xuICBub3JtYWw6IHtcbiAgICBsYWJlbDogJ292ZXJsYXlCbGVuZGluZy5ub3JtYWwnLFxuICAgIHZhbHVlOiAnbm9ybWFsJ1xuICB9LFxuICBzY3JlZW46IHtcbiAgICBsYWJlbDogJ292ZXJsYXlCbGVuZGluZy5zY3JlZW4nLFxuICAgIHZhbHVlOiAnc2NyZWVuJ1xuICB9LFxuICBkYXJrZW46IHtcbiAgICBsYWJlbDogJ292ZXJsYXlCbGVuZGluZy5kYXJrZW4nLFxuICAgIHZhbHVlOiAnZGFya2VuJ1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgTEFZRVJfQkxFTkRJTkdTID0ge1xuICBhZGRpdGl2ZToge1xuICAgIGxhYmVsOiAnbGF5ZXJCbGVuZGluZy5hZGRpdGl2ZScsXG4gICAgYmxlbmRGdW5jOiBbJ1NSQ19BTFBIQScsICdEU1RfQUxQSEEnXSxcbiAgICBibGVuZEVxdWF0aW9uOiAnRlVOQ19BREQnXG4gIH0sXG4gIG5vcm1hbDoge1xuICAgIC8vIHJlZmVyZW5jZSB0b1xuICAgIC8vIGh0dHBzOi8vbGltbnUuY29tL3dlYmdsLWJsZW5kaW5nLXlvdXJlLXByb2JhYmx5LXdyb25nL1xuICAgIGxhYmVsOiAnbGF5ZXJCbGVuZGluZy5ub3JtYWwnLFxuICAgIGJsZW5kRnVuYzogWydTUkNfQUxQSEEnLCAnT05FX01JTlVTX1NSQ19BTFBIQScsICdPTkUnLCAnT05FX01JTlVTX1NSQ19BTFBIQSddLFxuICAgIGJsZW5kRXF1YXRpb246IFsnRlVOQ19BREQnLCAnRlVOQ19BREQnXVxuICB9LFxuICBzdWJ0cmFjdGl2ZToge1xuICAgIGxhYmVsOiAnbGF5ZXJCbGVuZGluZy5zdWJ0cmFjdGl2ZScsXG4gICAgYmxlbmRGdW5jOiBbJ09ORScsICdPTkVfTUlOVVNfRFNUX0NPTE9SJywgJ1NSQ19BTFBIQScsICdEU1RfQUxQSEEnXSxcbiAgICBibGVuZEVxdWF0aW9uOiBbJ0ZVTkNfU1VCVFJBQ1QnLCAnRlVOQ19BREQnXVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgTUFYX0RFRkFVTFRfVE9PTFRJUFMgPSA1O1xuXG5leHBvcnQgY29uc3QgUkVTT0xVVElPTlMgPSBrZXlNaXJyb3Ioe1xuICBPTkVfWDogbnVsbCxcbiAgVFdPX1g6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX0lNR19SQVRJT1MgPSBrZXlNaXJyb3Ioe1xuICBTQ1JFRU46IG51bGwsXG4gIEZPVVJfQllfVEhSRUU6IG51bGwsXG4gIFNJWFRFRU5fQllfTklORTogbnVsbCxcbiAgQ1VTVE9NOiBudWxsXG59KTtcblxuZXhwb3J0IHR5cGUgSW1hZ2VSYXRpb09wdGlvbiA9IHtcbiAgaWQ6IGtleW9mIHR5cGVvZiBFWFBPUlRfSU1HX1JBVElPUztcbiAgbGFiZWw6IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZ2V0U2l6ZTogKHNjcmVlblc6IG51bWJlciwgc2NyZWVuSDogbnVtYmVyKSA9PiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9O1xufTtcblxuZXhwb3J0IGNvbnN0IFNjcmVlblJhdGlvT3B0aW9uOiBJbWFnZVJhdGlvT3B0aW9uID0ge1xuICBpZDogRVhQT1JUX0lNR19SQVRJT1MuU0NSRUVOLFxuICBsYWJlbDogJ21vZGFsLmV4cG9ydEltYWdlLnJhdGlvT3JpZ2luYWxTY3JlZW4nLFxuICBnZXRTaXplOiAoc2NyZWVuVywgc2NyZWVuSCkgPT4gKHt3aWR0aDogc2NyZWVuVywgaGVpZ2h0OiBzY3JlZW5IfSlcbn07XG5leHBvcnQgY29uc3QgQ3VzdG9tUmF0aW9PcHRpb246IEltYWdlUmF0aW9PcHRpb24gPSB7XG4gIGlkOiBFWFBPUlRfSU1HX1JBVElPUy5DVVNUT00sXG4gIGhpZGRlbjogdHJ1ZSxcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpb0N1c3RvbScsXG4gIGdldFNpemU6IChtYXBXLCBtYXBIKSA9PiAoe3dpZHRoOiBtYXBXLCBoZWlnaHQ6IG1hcEh9KVxufTtcbmV4cG9ydCBjb25zdCBGb3VyQnlUaHJlZVJhdGlvT3B0aW9uOiBJbWFnZVJhdGlvT3B0aW9uID0ge1xuICBpZDogRVhQT1JUX0lNR19SQVRJT1MuRk9VUl9CWV9USFJFRSxcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpbzRfMycsXG4gIGdldFNpemU6IHNjcmVlblcgPT4gKHtcbiAgICB3aWR0aDogc2NyZWVuVyxcbiAgICBoZWlnaHQ6IE1hdGgucm91bmQoc2NyZWVuVyAqIDAuNzUpXG4gIH0pXG59O1xuZXhwb3J0IGNvbnN0IFNpeHRlZW5CeU5pbmVSYXRpb09wdGlvbjogSW1hZ2VSYXRpb09wdGlvbiA9IHtcbiAgaWQ6IEVYUE9SVF9JTUdfUkFUSU9TLlNJWFRFRU5fQllfTklORSxcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpbzE2XzknLFxuICBnZXRTaXplOiBzY3JlZW5XID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcsXG4gICAgaGVpZ2h0OiBNYXRoLnJvdW5kKHNjcmVlblcgKiAwLjU2MjUpXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX0lNR19SQVRJT19PUFRJT05TOiBSZWFkb25seUFycmF5PEltYWdlUmF0aW9PcHRpb24+ID0gW1xuICBTY3JlZW5SYXRpb09wdGlvbixcbiAgRm91ckJ5VGhyZWVSYXRpb09wdGlvbixcbiAgU2l4dGVlbkJ5TmluZVJhdGlvT3B0aW9uLFxuICBDdXN0b21SYXRpb09wdGlvblxuXTtcblxuZXhwb3J0IHR5cGUgRXhwb3J0UmVzb2x1dGlvbk9wdGlvbiA9XG4gIHwga2V5b2YgdHlwZW9mIFJFU09MVVRJT05TXG4gIHwgJzEyODB4NzIwJ1xuICB8ICcxOTIweDEwODAnXG4gIHwgJzI1NjB4MTQ0MCdcbiAgfCAnMTYwMHg5MDAnXG4gIHwgJzEwMjR4NzY4J1xuICB8ICcxMjgweDk2MCdcbiAgfCAnMTYwMHgxMjAwJ1xuICB8ICcxOTIweDE0NDAnO1xuXG5leHBvcnQgdHlwZSBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiBFeHBvcnRSZXNvbHV0aW9uT3B0aW9uO1xuICBsYWJlbDogc3RyaW5nO1xuICBhdmFpbGFibGU6IGJvb2xlYW47XG4gIHNjYWxlPzogbnVtYmVyO1xuICBnZXRTaXplOiAoc2NyZWVuVzogbnVtYmVyLCBzY3JlZW5IOiBudW1iZXIpID0+IHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn07XG59O1xuXG5leHBvcnQgY29uc3QgT25lWFJlc29sdXRpb25PcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6IFJFU09MVVRJT05TLk9ORV9YLFxuICBsYWJlbDogJzF4JyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBzY2FsZTogMSxcbiAgZ2V0U2l6ZTogKHNjcmVlblcsIHNjcmVlbkgpID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcsXG4gICAgaGVpZ2h0OiBzY3JlZW5IXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgVHdvWFJlc29sdXRpb25PcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6IFJFU09MVVRJT05TLlRXT19YLFxuICBsYWJlbDogJzJ4JyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBzY2FsZTogMixcbiAgZ2V0U2l6ZTogKHNjcmVlblcsIHNjcmVlbkgpID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcgKiAyLFxuICAgIGhlaWdodDogc2NyZWVuSCAqIDJcbiAgfSlcbn07XG5cbi8vIEZpeGVkIGRpbWVuc2lvbiBvcHRpb25zXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjE5MjB4MTA4ME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzE5MjB4MTA4MCcsXG4gIGxhYmVsOiAnMTkyMCDDlyAxMDgwICgxNjo5KScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTkyMCwgaGVpZ2h0OiAxMDgwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBSZXNvbHV0aW9uMTI4MHg3MjBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxMjgweDcyMCcsXG4gIGxhYmVsOiAnMTI4MCDDlyA3MjAgKDE2OjkpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxMjgwLCBoZWlnaHQ6IDcyMH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjI1NjB4MTQ0ME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzI1NjB4MTQ0MCcsXG4gIGxhYmVsOiAnMjU2MCDDlyAxNDQwICgxNjo5KScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMjU2MCwgaGVpZ2h0OiAxNDQwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBSZXNvbHV0aW9uMTYwMHg5MDBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxNjAweDkwMCcsXG4gIGxhYmVsOiAnMTYwMCDDlyA5MDAgKDE2OjkpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxNjAwLCBoZWlnaHQ6IDkwMH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjEwMjR4NzY4T3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiAnMTAyNHg3NjgnLFxuICBsYWJlbDogJzEwMjQgw5cgNzY4ICg0OjMpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxMDI0LCBoZWlnaHQ6IDc2OH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjEyODB4OTYwT3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiAnMTI4MHg5NjAnLFxuICBsYWJlbDogJzEyODAgw5cgOTYwICg0OjMpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxMjgwLCBoZWlnaHQ6IDk2MH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjE2MDB4MTIwME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzE2MDB4MTIwMCcsXG4gIGxhYmVsOiAnMTYwMCDDlyAxMjAwICg0OjMpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxNjAwLCBoZWlnaHQ6IDEyMDB9KVxufTtcblxuZXhwb3J0IGNvbnN0IFJlc29sdXRpb24xOTIweDE0NDBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxOTIweDE0NDAnLFxuICBsYWJlbDogJzE5MjAgw5cgMTQ0MCAoNDozKScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTkyMCwgaGVpZ2h0OiAxNDQwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfSU1HX1JFU09MVVRJT05fT1BUSU9OUzogUmVhZG9ubHlBcnJheTxJbWFnZVJlc29sdXRpb25PcHRpb24+ID0gW1xuICBPbmVYUmVzb2x1dGlvbk9wdGlvbixcbiAgVHdvWFJlc29sdXRpb25PcHRpb24sXG4gIFJlc29sdXRpb24xMjgweDcyME9wdGlvbixcbiAgUmVzb2x1dGlvbjE5MjB4MTA4ME9wdGlvbixcbiAgUmVzb2x1dGlvbjI1NjB4MTQ0ME9wdGlvbixcbiAgUmVzb2x1dGlvbjE2MDB4OTAwT3B0aW9uLFxuICBSZXNvbHV0aW9uMTAyNHg3NjhPcHRpb24sXG4gIFJlc29sdXRpb24xMjgweDk2ME9wdGlvbixcbiAgUmVzb2x1dGlvbjE2MDB4MTIwME9wdGlvbixcbiAgUmVzb2x1dGlvbjE5MjB4MTQ0ME9wdGlvblxuXTtcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX1RZUEUgPSBrZXlNaXJyb3Ioe1xuICBDU1Y6IG51bGxcbiAgLy8gU0hBUEVGSUxFOiBudWxsLFxuICAvLyBKU09OOiBudWxsLFxuICAvLyBHRU9KU09OOiBudWxsLFxuICAvLyBUT1BPSlNPTjogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfREFUQV9UWVBFX09QVElPTlMgPSBbXG4gIHtcbiAgICBpZDogRVhQT1JUX0RBVEFfVFlQRS5DU1YsXG4gICAgbGFiZWw6IEVYUE9SVF9EQVRBX1RZUEUuQ1NWLnRvTG93ZXJDYXNlKCksXG4gICAgYXZhaWxhYmxlOiB0cnVlXG4gIH1cbiAgLy8ge1xuICAvLyAgIGlkOiBFWFBPUlRfREFUQV9UWVBFLlNIQVBFRklMRSxcbiAgLy8gICBsYWJlbDogJ3NoYXBlZmlsZScsXG4gIC8vICAgYXZhaWxhYmxlOiBmYWxzZVxuICAvLyB9LFxuICAvLyB7XG4gIC8vICAgaWQ6IEVYUE9SVF9EQVRBX1RZUEUuSlNPTixcbiAgLy8gICBsYWJlbDogJ2pzb24nLFxuICAvLyAgIGF2YWlsYWJsZTogZmFsc2VcbiAgLy8gfSxcbiAgLy8ge1xuICAvLyAgIGlkOiBFWFBPUlRfREFUQV9UWVBFLkdFT0pTT04sXG4gIC8vICAgbGFiZWw6ICdnZW9qc29uJyxcbiAgLy8gICBhdmFpbGFibGU6IGZhbHNlXG4gIC8vIH0sXG4gIC8vIHtcbiAgLy8gICBpZDogRVhQT1JUX0RBVEFfVFlQRS5UT1BPSlNPTixcbiAgLy8gICBsYWJlbDogJ3RvcG9qc29uJyxcbiAgLy8gICBhdmFpbGFibGU6IGZhbHNlXG4gIC8vIH1cbl07XG5cbi8vIEV4cG9ydCBtYXAgdHlwZXNcbmV4cG9ydCBjb25zdCBFWFBPUlRfTUFQX0ZPUk1BVFMgPSBrZXlNaXJyb3Ioe1xuICBIVE1MOiBudWxsLFxuICBKU09OOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9IVE1MX01BUF9NT0RFUyA9IGtleU1pcnJvcih7XG4gIFJFQUQ6IG51bGwsXG4gIEVESVQ6IG51bGxcbn0pO1xuXG4vLyBFeHBvcnQgbWFwIG9wdGlvbnNcbmV4cG9ydCBjb25zdCBFWFBPUlRfTUFQX0ZPUk1BVF9PUFRJT05TID0gT2JqZWN0LmVudHJpZXMoRVhQT1JUX01BUF9GT1JNQVRTKS5tYXAoXG4gIChlbnRyeTogW3N0cmluZywgYW55XSkgPT4gKHtcbiAgICBpZDogZW50cnlbMF0sXG4gICAgbGFiZWw6IGVudHJ5WzFdLnRvTG93ZXJDYXNlKCksXG4gICAgYXZhaWxhYmxlOiB0cnVlXG4gIH0pXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SFRNTE1hcE1vZGVUaWxlVXJsKG1vZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgaHR0cHM6Ly9kMWEzZjRzcGF6enJwNC5jbG91ZGZyb250Lm5ldC9rZXBsZXIuZ2wvZG9jdW1lbnRhdGlvbi9tYXAtJHttb2RlLnRvTG93ZXJDYXNlKCl9LW1vZGUucG5nYDtcbn1cblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9IVE1MX01BUF9NT0RFX09QVElPTlMgPSBPYmplY3QuZW50cmllcyhFWFBPUlRfSFRNTF9NQVBfTU9ERVMpLm1hcChcbiAgKGVudHJ5OiBbc3RyaW5nLCBhbnldKSA9PiAoe1xuICAgIGlkOiBlbnRyeVswXSxcbiAgICBsYWJlbDogYG1vZGFsLmV4cG9ydE1hcC5odG1sLiR7ZW50cnlbMV0udG9Mb3dlckNhc2UoKX1gLFxuICAgIGF2YWlsYWJsZTogdHJ1ZSxcbiAgICB1cmw6IGdldEhUTUxNYXBNb2RlVGlsZVVybChlbnRyeVsxXSlcbiAgfSlcbik7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1VVSURfQ09VTlQgPSA2O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT1RJRklDQVRJT05fTUVTU0FHRSA9ICdNRVNTQUdFX05PVF9QUk9WSURFRCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PVElGSUNBVElPTl9UWVBFUyA9IGtleU1pcnJvcih7XG4gIGluZm86IG51bGwsXG4gIGVycm9yOiBudWxsLFxuICB3YXJuaW5nOiBudWxsLFxuICBzdWNjZXNzOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyA9IGtleU1pcnJvcih7XG4gIGdsb2JhbDogbnVsbCxcbiAgZmlsZTogbnVsbFxufSk7XG5cbi8vIE1pbmltdW0gdGltZSBiZXR3ZWVuIGlkZW50aWNhbCBub3RpZmljYXRpb25zIGFib3V0IGRlY2suZ2wgZXJyb3JzXG5leHBvcnQgY29uc3QgVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUgPSAzMzA7XG5cbi8vIEFuaW1hdGlvblxuZXhwb3J0IGNvbnN0IEJBU0VfU1BFRUQgPSA2MDA7XG5leHBvcnQgY29uc3QgRlBTID0gNjA7XG5cbi8qKlxuICogNCBBbmltYXRpb24gV2luZG93IFR5cGVzXG4gKiAxLiBmcmVlXG4gKiAgfC0+ICB8LT5cbiAqIEN1cnJlbnQgdGltZSBpcyBhIGZpeGVkIHJhbmdlLCBhbmltYXRpb24gY29udHJvbGxlciBjYWxscyBuZXh0IGFuaW1hdGlvbiBmcmFtZXMgY29udGludW91c2x5IHRvIGFuaW1hdGlvbiBhIG1vdmluZyB3aW5kb3dcbiAqIFRoZSBpbmNyZW1lbnQgaWQgYmFzZWQgb24gZG9tYWluIC8gQkFTRV9TUEVFRCAqIFNQRUVEXG4gKlxuICogMi4gaW5jcmVtZW50YWxcbiAqIHwgICAgfC0+XG4gKiBTYW1lIGFzIGZyZWUsIGN1cnJlbnQgdGltZSBpcyBhIGdyb3dpbmcgcmFuZ2UsIG9ubHkgdGhlIG1heCB2YWx1ZSBvZiByYW5nZSBpbmNyZW1lbnQgZHVyaW5nIGFuaW1hdGlvbi5cbiAqIFRoZSBpbmNyZW1lbnQgaXMgYWxzbyBiYXNlZCBvbiBkb21haW4gLyBCQVNFX1NQRUVEICogU1BFRURcbiAqXG4gKiAzLiBwb2ludFxuICogbyAtPiBvXG4gKiBDdXJyZW50IHRpbWUgaXMgYSBwb2ludCwgYW5pbWF0aW9uIGNvbnRyb2xsZXIgY2FsbHMgbmV4dCBhbmltYXRpb24gZnJhbWUgY29udGludW91c2x5IHRvIGFuaW1hdGlvbiBhIG1vdmluZyBwb2ludFxuICogVGhlIGluY3JlbWVudCBpcyBiYXNlZCBvbiBkb21haW4gLyBCQVNFX1NQRUVEICogU1BFRURcbiAqXG4gKiA0LiBpbnRlcnZhbFxuICogbyB+PiBvXG4gKiBDdXJyZW50IHRpbWUgaXMgYSBwb2ludC4gQW4gYXJyYXkgb2Ygc29ydGVkIHRpbWUgc3RlcHMgbmVlZCB0byBiZSBwcm92aWRlZC5cbiAqIGFuaW1hdGlvbiBjb250cm9sbGVyIGNhbGxzIG5leHQgYW5pbWF0aW9uIGF0IGEgaW50ZXJ2YWwgd2hlbiB0aGUgcG9pbnQganVtcHMgdG8gdGhlIG5leHQgc3RlcFxuICovXG5leHBvcnQgY29uc3QgQU5JTUFUSU9OX1dJTkRPVyA9IGtleU1pcnJvcih7XG4gIGZyZWU6IG51bGwsXG4gIGluY3JlbWVudGFsOiBudWxsLFxuICBwb2ludDogbnVsbCxcbiAgaW50ZXJ2YWw6IG51bGxcbn0pO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElNRV9GT1JNQVQgPSAnTU0vREQvWVkgSEg6bW06c3NhJztcbmV4cG9ydCBjb25zdCBTUEVFRF9DT05UUk9MX1JBTkdFOiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDEwXTtcbmV4cG9ydCBjb25zdCBTUEVFRF9DT05UUk9MX1NURVAgPSAwLjAwMTtcblxuLy8gR2VvY29kZXJcbmV4cG9ydCBjb25zdCBHRU9DT0RFUl9EQVRBU0VUX05BTUUgPSAnZ2VvY29kZXJfZGF0YXNldCc7XG5leHBvcnQgY29uc3QgR0VPQ09ERVJfTEFZRVJfSUQgPSAnZ2VvY29kZXJfbGF5ZXInO1xuZXhwb3J0IGNvbnN0IEdFT0NPREVSX0dFT19PRkZTRVQgPSAwLjA1O1xuZXhwb3J0IGNvbnN0IEdFT0NPREVSX0lDT05fQ09MT1I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFsyNTUsIDAsIDBdO1xuLy8gQmFzZSBpY29uIHNpemUgYmVmb3JlIGFuY2hvciBub3JtYWxpemF0aW9uLiBUaGUgZ2VvY29kZXIgcGluIGljb24gaXMgYm90dG9tLWFuY2hvcmVkXG4vLyBhbmQgc2NhbGVkIHRvIGZpdCB0aGUgU2NhdHRlcnBsb3RMYXllciB1bml0IGNpcmNsZSAofjAuNXgpLCBzbyB0aGUgcmVuZGVyZWQgc2l6ZSBpc1xuLy8gY29tcGVuc2F0ZWQgaGVyZSAoODAgKiAyID0gMTYwKS5cbmV4cG9ydCBjb25zdCBHRU9DT0RFUl9JQ09OX1NJWkUgPSAxNjA7XG5cbi8vIEVkaXRvclxuZXhwb3J0IGNvbnN0IEVESVRPUl9MQVlFUl9JRCA9ICdrZXBsZXJfZWRpdG9yX2xheWVyJztcbmV4cG9ydCBjb25zdCBFRElUT1JfTEFZRVJfUElDS0lOR19SQURJVVMgPSA2O1xuZXhwb3J0IGNvbnN0IEVESVRPUl9NT0RFUyA9IHtcbiAgRFJBV19QT0xZR09OOiAnRFJBV19QT0xZR09OJyxcbiAgRFJBV19SRUNUQU5HTEU6ICdEUkFXX1JFQ1RBTkdMRScsXG4gIEVESVQ6ICdFRElUX1ZFUlRFWCdcbn07XG5cbmV4cG9ydCBjb25zdCBQTE9UX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgaGlzdG9ncmFtOiBudWxsLFxuICBsaW5lQ2hhcnQ6IG51bGxcbn0pO1xuXG4vLyBGaWx0ZXJcbmV4cG9ydCBjb25zdCBJTklUX0ZJTFRFUl9JVEVNU19JTl9EUk9QRE9XTiA9IDEwMDtcblxuLy8gR1BVIEZpbHRlcmluZ1xuLyoqXG4gKiBNYXggbnVtYmVyIG9mIGZpbHRlciB2YWx1ZSBidWZmZXJzIHRoYXQgZGVjay5nbCBwcm92aWRlc1xuICovXG5leHBvcnQgY29uc3QgTUFYX0dQVV9GSUxURVJTID0gNDtcbmV4cG9ydCBjb25zdCBNQVBfVEhVTUJOQUlMX0RJTUVOU0lPTiA9IHtcbiAgd2lkdGg6IDMwMCxcbiAgaGVpZ2h0OiAyMDBcbn07XG5cbmV4cG9ydCBjb25zdCBNQVBfSU5GT19DSEFSQUNURVIgPSB7XG4gIHRpdGxlOiAxMDAsXG4gIGRlc2NyaXB0aW9uOiAxMDBcbn07XG5cbi8vIExvYWQgZGF0YVxuZXhwb3J0IGNvbnN0IExPQURJTkdfTUVUSE9EUyA9IGtleU1pcnJvcih7XG4gIHVwbG9hZDogbnVsbCxcbiAgc3RvcmFnZTogbnVsbCxcbiAgdGlsZXNldDogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFQVRVUkVfRkxBR1MgPSB7fTtcblxuZXhwb3J0IGNvbnN0IERBVEFTRVRfRk9STUFUUyA9IGtleU1pcnJvcih7XG4gIHJvdzogbnVsbCxcbiAgZ2VvanNvbjogbnVsbCxcbiAgY3N2OiBudWxsLFxuICBrZXBsZXJnbDogbnVsbCxcbiAgYXJyb3c6IG51bGwsXG4gIGR1Y2tkYjogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBNQVBfQ09OVFJPTFMgPSBrZXlNaXJyb3Ioe1xuICB2aXNpYmxlTGF5ZXJzOiBudWxsLFxuICBtYXBMZWdlbmQ6IG51bGwsXG4gIHRvZ2dsZTNkOiBudWxsLFxuICBzcGxpdE1hcDogbnVsbCxcbiAgbWFwRHJhdzogbnVsbCxcbiAgbWFwTG9jYWxlOiBudWxsLFxuICBlZmZlY3Q6IG51bGwsXG4gIGFubm90YXRpb246IG51bGwsXG4gIGFpQXNzaXN0YW50OiBudWxsXG59KTtcblxuZXhwb3J0IGVudW0gTWFwVmlld01vZGUge1xuICBNT0RFXzJEID0gJ01PREVfMkQnLFxuICBNT0RFXzNEID0gJ01PREVfM0QnLFxuICBNT0RFX0dMT0JFID0gJ01PREVfR0xPQkUnXG59XG5cbi8qKlxuICogTWluaW11bSB6b29tIGxldmVsIGFsbG93ZWQgaW4gZ2xvYmUgbW9kZS4gTmVnYXRpdmUgdmFsdWVzIGxldCB0aGUgdXNlciB6b29tXG4gKiBvdXQgZnVydGhlciB0aGFuIHRoZSB3ZWItbWVyY2F0b3IgZGVmYXVsdCBvZiAwLCBzbyB0aGUgd2hvbGUgZ2xvYmUgY2FuIGJlXG4gKiBwdWxsZWQgYmFjayB0byBhcHBlYXIgc21hbGxlciBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CRV9NSU5fWk9PTSA9IDI7XG5cbi8qKlxuICogTWF4aW11bSB6b29tIGluIGdsb2JlIG1vZGUuXG4gKlxuICogVGhlIHByZXZpb3VzIFwiZW1wdHkgcmVjdGFuZ2xlc1wiIGF0IGhpZ2ggem9vbSB3ZXJlIGNhdXNlZCBieSB0aGUgdmVjdG9yIGJhc2VtYXBcbiAqIGxheWVyIGRlY2xhcmluZyBgbWF4Wm9vbTogMjNgIHdoaWxlIHRoZSByYXcgdGlsZSBlbmRwb2ludHMgb25seSBoYXZlIGRhdGEgdG9cbiAqIHoxNiAobWFwYm94LXN0cmVldHMtdjgpIC8gejE0IChDQVJUTykg4oCUIGRlY2sgdGhlbiByZXF1ZXN0ZWQgbm9uLWV4aXN0ZW50IHRpbGVzXG4gKiB0aGF0IDQwNC4gVGhhdCBpcyBmaXhlZCBpbiBgZ2V0R2xvYmVCYXNlTGF5ZXJzYCBieSBzZXR0aW5nIGBtYXhab29tYCB0byBlYWNoXG4gKiBzb3VyY2UncyB0cnVlIGRhdGEgbWF4IHNvIGRlY2sgb3Zlcnpvb21zIGluc3RlYWQuXG4gKlxuICogVGhlIHJlbWFpbmluZyBwcmFjdGljYWwgY2VpbGluZyBpcyBmbG9hdDMyIHByZWNpc2lvbjogZGVjaydzIGdsb2JlIHBsYWNlc1xuICogZ2VvbWV0cnkgaW4gY29tbW9uIHNwYWNlIG9uIGEgc3BoZXJlIG9mIHJhZGl1cyAyNTYgd2l0aCBubyBmcDY0L3JlbGF0aXZlLXRvLVxuICogY2VudGVyIHRyaWNrLCBzbyBiZXlvbmQgfnZpc3VhbC16b29tIDE2IChyb3VnaGx5IHRoaXMgbWFwU3RhdGUgem9vbSBtaW51c1xuICogYHpvb21BZGp1c3QobGF0KWAg4omIIDEuNjUgYXQgdGhlIGVxdWF0b3IpIGdlb21ldHJ5IHN0YXJ0cyB0byBqaXR0ZXIvZHJpZnQuXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CRV9NQVhfWk9PTSA9IDE2O1xuXG4vKipcbiAqIE1heGltdW0gYWJzb2x1dGUgY2VudGVyIGxhdGl0dWRlIGFsbG93ZWQgaW4gZ2xvYmUgbW9kZS4gQ29uc3RyYWlucyB0aGUgY2FtZXJhXG4gKiB0YXJnZXQgdG8gYSBiYW5kIGFyb3VuZCB0aGUgZXF1YXRvciBzbyB0aGUgdmlldyBjYW4ndCBiZSBjZW50ZXJlZCBvbiB0aGVcbiAqIHBvbGVzIChkZWNrLmdsJ3MgZGVmYXVsdCBjbGFtcHMgdG8gfjg1wrAsIHdoaWNoIGxldHMgdGhlIGNhbWVyYSBzdGFyZSBzdHJhaWdodFxuICogZG93biBhdCBhIHBvbGUpLiBBcHBsaWVzIHN5bW1ldHJpY2FsbHkgdG8gdGhlIG5vcnRoZXJuIGFuZCBzb3V0aGVybiBoZW1pc3BoZXJlLlxuICovXG5leHBvcnQgY29uc3QgR0xPQkVfTUFYX0xBVElUVURFID0gNzU7XG5cbmV4cG9ydCB0eXBlIEdsb2JlQ29uZmlnID0ge1xuICBhdG1vc3BoZXJlOiBib29sZWFuO1xuICBhemltdXRoOiBib29sZWFuO1xuICBhemltdXRoQW5nbGU6IG51bWJlcjtcbiAgdGVybWluYXRvcjogYm9vbGVhbjtcbiAgdGVybWluYXRvck9wYWNpdHk6IG51bWJlcjtcbiAgYmFzZW1hcDogYm9vbGVhbjtcbiAgbGFiZWxzOiBib29sZWFuO1xuICBsYWJlbHNDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBhZG1pbkxpbmVzOiBib29sZWFuO1xuICBhZG1pbkxpbmVzQ29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgd2F0ZXI6IGJvb2xlYW47XG4gIHdhdGVyQ29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc3VyZmFjZUNvbG9yOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHN1cmZhY2U6IGJvb2xlYW47XG4gIGJhY2tncm91bmRDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBzdGFyczogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEdsb2JlID0ge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBjb25maWc6IEdsb2JlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfR0xPQkVfQ09ORklHOiBHbG9iZUNvbmZpZyA9IHtcbiAgYXRtb3NwaGVyZTogdHJ1ZSxcbiAgYXppbXV0aDogZmFsc2UsXG4gIGF6aW11dGhBbmdsZTogNDUsXG4gIHRlcm1pbmF0b3I6IHRydWUsXG4gIHRlcm1pbmF0b3JPcGFjaXR5OiAwLjM1LFxuICBiYXNlbWFwOiB0cnVlLFxuICBsYWJlbHM6IGZhbHNlLFxuICBsYWJlbHNDb2xvcjogWzExNC43NSwgMTE0Ljc1LCAxMTQuNzVdLFxuICBhZG1pbkxpbmVzOiB0cnVlLFxuICBhZG1pbkxpbmVzQ29sb3I6IFs0MCwgNjMsIDkzXSxcbiAgd2F0ZXI6IHRydWUsXG4gIHdhdGVyQ29sb3I6IFsxNywgMzUsIDQ4XSxcbiAgc3VyZmFjZTogdHJ1ZSxcbiAgc3VyZmFjZUNvbG9yOiBbOSwgMTYsIDI5XSxcbiAgLy8gQ29sb3Igb2YgdGhlIGVtcHR5IHNwYWNlIHJlbmRlcmVkIGFyb3VuZCB0aGUgZ2xvYmUgKGRlY2suZ2wgY2xlYXIgY29sb3IpLlxuICAvLyBNYXRjaGVzIHRoZSBwcmV2aW91cyBoYXJkY29kZWQgY2xlYXIgY29sb3IgWzAuMDE1LCAwLjAzNSwgMC4wNjVdIGluIDAtMSBzcGFjZS5cbiAgYmFja2dyb3VuZENvbG9yOiBbNCwgOSwgMTddLFxuICBzdGFyczogZmFsc2Vcbn07XG5cbmV4cG9ydCBjb25zdCBHTE9CRV9TVVBQT1JURURfTEFZRVJTOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHtcbiAgcG9pbnQ6IHRydWUsXG4gIGFyYzogdHJ1ZSxcbiAgZ3JpZDogdHJ1ZSxcbiAgaGV4YWdvbjogdHJ1ZSxcbiAgZ2VvanNvbjogdHJ1ZSxcbiAgY2x1c3RlcjogdHJ1ZSxcbiAgaWNvbjogdHJ1ZSxcbiAgaGV4YWdvbklkOiB0cnVlLFxuICAnM0QnOiB0cnVlLFxuICB2ZWN0b3JUaWxlOiB0cnVlLFxuICBoZXhUaWxlOiB0cnVlLFxuICBsaW5lOiB0cnVlLFxuICB0cmlwOiB0cnVlLFxuICByYXN0ZXJUaWxlOiB0cnVlLFxuICBoZWF0bWFwOiB0cnVlLFxuICBzMjogZmFsc2UsXG4gIHRpbGUzZDogZmFsc2UsXG4gIC8vIEZsb3cgYXJyb3dzIGFyZSBmbGF0IHF1YWRzIGluIGNvbW1vbiBzcGFjZSAoZXF1YXRvcmlhbCBwbGFuZSkgYW5kIGNvbGxhcHNlIHdoZW5cbiAgLy8gdmlld2VkIGVkZ2Utb24gb24gdGhlIGdsb2JlLCBzbyB0aGUgZmxvdyBsYXllciBpcyBub3Qgc3VwcG9ydGVkIGluIEdsb2JlIG1vZGUuXG4gIGZsb3c6IGZhbHNlXG59O1xuXG5leHBvcnQgZW51bSBNYXBTcGxpdE1vZGUge1xuICBTSU5HTEVfTUFQID0gJ1NJTkdMRV9NQVAnLFxuICBEVUFMX01BUCA9ICdEVUFMX01BUCcsXG4gIFNXSVBFX0NPTVBBUkUgPSAnU1dJUEVfQ09NUEFSRSdcbn1cblxuLyoqXG4gKiBBIG11bHRpcGxpZXIgZm9yIHNjcmVlbi1zcGFjZSB3aWR0aC9zY2FsZSBmb3IgQXJjLCBMaW5lLCBJY29uIGFuZCBUZXh0IGxheWVycy5cbiAqIFJlcXVpcmVkIGluIG9yZGVyIHRvIG1haW50YWluIHRoZSBzYW1lIGFwcGVhcmFuY2UgYWZ0ZXIgdXBncmFkaW5nIHRvIGRlY2suZ2wgdjguNS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNnbC9kZWNrLmdsL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZS1ndWlkZS5tZFxuICovXG5leHBvcnQgY29uc3QgUFJPSkVDVEVEX1BJWEVMX1NJWkVfTVVMVElQTElFUiA9IDIgLyAzO1xuXG4vKipcbiAqIE1heGltdW0gdmFsdWUgZm9yIHRleHQgb3V0bGluZSB3aWR0aFxuICovXG5leHBvcnQgY29uc3QgVEVYVF9PVVRMSU5FX01VTFRJUExJRVIgPSA1O1xuXG5leHBvcnQgY29uc3QgZGF0YVRlc3RJZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGluZm9JY29uOiAnaW5mby1pY29uJyxcbiAgd2FybmluZ0ljb246ICd3YXJuaW5nLWljb24nLFxuICBlcnJvckljb246ICdlcnJvci1pY29uJyxcbiAgc3VjY2Vzc0ljb246ICdzdWNjZXNzLWljb24nLFxuICBjaGVja21hcmtJY29uOiAnY2hlY2ttYXJrLWljb24nLFxuICBzb3J0YWJsZUxheWVySXRlbTogJ3NvcnRhYmxlLWxheWVyLWl0ZW0nLFxuICBzdGF0aWNMYXllckl0ZW06ICdzdGF0aWMtbGF5ZXItaXRlbScsXG4gIGxheWVyVGl0bGVFZGl0b3I6ICdsYXllcl9fdGl0bGVfX2VkaXRvcicsXG4gIHJlbW92ZUxheWVyQWN0aW9uOiAncmVtb3ZlLWxheWVyLWFjdGlvbicsXG4gIGxheWVyUGFuZWw6ICdsYXllci1wYW5lbCcsXG4gIHNvcnRhYmxlRWZmZWN0SXRlbTogJ3NvcnRhYmxlLWVmZmVjdC1pdGVtJyxcbiAgc3RhdGljRWZmZWN0SXRlbTogJ3N0YXRpYy1lZmZlY3QtaXRlbScsXG4gIHByb3ZpZGVyTG9hZGluZzogJ3Byb3ZpZGVyLWxvYWRpbmcnLFxuICBwcm92aWRlck1hcEluZm9QYW5lbDogJ3Byb3ZpZGVyLW1hcC1pbmZvLXBhbmVsJyxcbiAgcHJvdmlkZXJTZWxlY3Q6ICdwcm92aWRlci1zZWxlY3QnLFxuICBjbG91ZEhlYWRlcjogJ2Nsb3VkLWhlYWRlcicsXG4gIHByb3ZpZGVyU2hhcmVNYXA6ICdwcm92aWRlci1zaGFyZS1tYXAnXG59O1xuXG4vLyBFZmZlY3RzXG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FWk9ORSA9ICdVVEMnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUE9TVF9QUk9DRVNTSU5HX0VGRkVDVF9UWVBFID0gJ2luayc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJR0hUX0NPTE9SOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbMjU1LCAyNTUsIDI1NV07XG5leHBvcnQgY29uc3QgREVGQVVMVF9MSUdIVF9JTlRFTlNJVFkgPSAxO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0hBRE9XX0lOVEVOU0lUWSA9IDAuNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NIQURPV19DT0xPUjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzAsIDAsIDBdO1xuXG5leHBvcnQgY29uc3QgTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUyA9IHtcbiAgcGljazogJ3BpY2snIGFzIGNvbnN0LFxuICBjdXJyZW50OiAnY3VycmVudCcgYXMgY29uc3QsXG4gIGFuaW1hdGlvbjogJ2FuaW1hdGlvbicgYXMgY29uc3Rcbn07XG5leHBvcnQgdHlwZSBMaWdodEFuZFNoYWRvd0VmZmVjdFRpbWVNb2RlID0gJ3BpY2snIHwgJ2N1cnJlbnQnIHwgJ2FuaW1hdGlvbic7XG5leHBvcnQgY29uc3QgREVGQVVMVF9MSUdIVF9BTkRfU0hBRE9XX1BST1BTOiB7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICB0aW1lTW9kZTogTGlnaHRBbmRTaGFkb3dFZmZlY3RUaW1lTW9kZTtcbiAgc2hhZG93SW50ZW5zaXR5OiBudW1iZXI7XG4gIHNoYWRvd0NvbG9yOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHN1bkxpZ2h0Q29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc3VuTGlnaHRJbnRlbnNpdHk6IG51bWJlcjtcbiAgYW1iaWVudExpZ2h0Q29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgYW1iaWVudExpZ2h0SW50ZW5zaXR5OiBudW1iZXI7XG59ID0ge1xuICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gIHRpbWVNb2RlOiBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLnBpY2sgYXMgTGlnaHRBbmRTaGFkb3dFZmZlY3RUaW1lTW9kZSxcbiAgc2hhZG93SW50ZW5zaXR5OiBERUZBVUxUX1NIQURPV19JTlRFTlNJVFksXG4gIHNoYWRvd0NvbG9yOiBbLi4uREVGQVVMVF9TSEFET1dfQ09MT1JdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgc3VuTGlnaHRDb2xvcjogWy4uLkRFRkFVTFRfTElHSFRfQ09MT1JdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgc3VuTGlnaHRJbnRlbnNpdHk6IERFRkFVTFRfTElHSFRfSU5URU5TSVRZLFxuICBhbWJpZW50TGlnaHRDb2xvcjogWy4uLkRFRkFVTFRfTElHSFRfQ09MT1JdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgYW1iaWVudExpZ2h0SW50ZW5zaXR5OiBERUZBVUxUX0xJR0hUX0lOVEVOU0lUWVxufTtcblxuZXhwb3J0IGNvbnN0IExJR0hUX0FORF9TSEFET1dfRUZGRUNUOiBFZmZlY3REZXNjcmlwdGlvbiA9IHtcbiAgdHlwZTogJ2xpZ2h0QW5kU2hhZG93JyxcbiAgbmFtZTogJ0xpZ2h0ICYgU2hhZG93JyxcbiAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5saWdodEFuZFNoYWRvdycsXG4gIHBhcmFtZXRlcnM6IFtcbiAgICB7bmFtZTogJ3RpbWVzdGFtcCcsIG1pbjogMCwgbWF4OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn0sXG4gICAge25hbWU6ICdzaGFkb3dJbnRlbnNpdHknLCBtaW46IDAsIG1heDogMSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1NIQURPV19JTlRFTlNJVFl9LFxuICAgIHtuYW1lOiAnc3VuTGlnaHRJbnRlbnNpdHknLCBtaW46IDAsIG1heDogNSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xJR0hUX0lOVEVOU0lUWX0sXG4gICAge25hbWU6ICdhbWJpZW50TGlnaHRJbnRlbnNpdHknLCBtaW46IDAsIG1heDogNSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xJR0hUX0lOVEVOU0lUWX0sXG4gICAge25hbWU6ICdzaGFkb3dDb2xvcicsIHR5cGU6ICdjb2xvcicsIG1pbjogMCwgbWF4OiAyNTUsIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9TSEFET1dfQ09MT1J9LFxuICAgIHtuYW1lOiAnc3VuTGlnaHRDb2xvcicsIHR5cGU6ICdjb2xvcicsIG1pbjogMCwgbWF4OiAyNTUsIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9MSUdIVF9DT0xPUn0sXG4gICAge25hbWU6ICdhbWJpZW50TGlnaHRDb2xvcicsIHR5cGU6ICdjb2xvcicsIG1pbjogMCwgbWF4OiAyNTUsIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9MSUdIVF9DT0xPUn1cbiAgXVxufTtcblxuZXhwb3J0IGNvbnN0IERJU1RBTkNFX0ZPR19UWVBFID0gJ2Rpc3RhbmNlRm9nJztcbmV4cG9ydCBjb25zdCBTVVJGQUNFX0ZPR19UWVBFID0gJ3N1cmZhY2VGb2cnO1xuXG5leHBvcnQgY29uc3QgUE9TVFBST0NFU1NJTkdfRUZGRUNUUzoge1trZXk6IHN0cmluZ106IEVmZmVjdERlc2NyaXB0aW9ufSA9IHtcbiAgaW5rOiB7XG4gICAgdHlwZTogJ2luaycsXG4gICAgbmFtZTogJ0luaycsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5pbmsnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ3N0cmVuZ3RoJywgbWluOiAwLCBtYXg6IDF9XVxuICB9LFxuICBicmlnaHRuZXNzQ29udHJhc3Q6IHtcbiAgICB0eXBlOiAnYnJpZ2h0bmVzc0NvbnRyYXN0JyxcbiAgICBuYW1lOiAnQnJpZ2h0bmVzcyAmIENvbnRyYXN0JyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmJyaWdodG5lc3NDb250cmFzdCcsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge25hbWU6ICdicmlnaHRuZXNzJywgbWluOiAtMSwgbWF4OiAxfSxcbiAgICAgIHtuYW1lOiAnY29udHJhc3QnLCBtaW46IC0xLCBtYXg6IDF9XG4gICAgXVxuICB9LFxuICBodWVTYXR1cmF0aW9uOiB7XG4gICAgdHlwZTogJ2h1ZVNhdHVyYXRpb24nLFxuICAgIG5hbWU6ICdIdWUgJiBTYXR1cmF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmh1ZVNhdHVyYXRpb24nLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtuYW1lOiAnaHVlJywgbWluOiAtMSwgbWF4OiAxfSxcbiAgICAgIHtuYW1lOiAnc2F0dXJhdGlvbicsIGRlZmF1bHRWYWx1ZTogMC4yNSwgbWluOiAtMSwgbWF4OiAxfVxuICAgIF1cbiAgfSxcbiAgdmlicmFuY2U6IHtcbiAgICB0eXBlOiAndmlicmFuY2UnLFxuICAgIG5hbWU6ICdWaWJyYW5jZScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi52aWJyYW5jZScsXG4gICAgcGFyYW1ldGVyczogW3tuYW1lOiAnYW1vdW50JywgZGVmYXVsdFZhbHVlOiAwLjUsIG1pbjogLTEsIG1heDogMX1dXG4gIH0sXG4gIHNlcGlhOiB7XG4gICAgdHlwZTogJ3NlcGlhJyxcbiAgICBuYW1lOiAnU2VwaWEnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uc2VwaWEnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ2Ftb3VudCcsIG1pbjogMCwgbWF4OiAxfV1cbiAgfSxcbiAgZG90U2NyZWVuOiB7XG4gICAgdHlwZTogJ2RvdFNjcmVlbicsXG4gICAgbmFtZTogJ0RvdCBTY3JlZW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uZG90U2NyZWVuJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdhbmdsZScsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiBNYXRoLlBJIC8gMlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NpemUnLFxuICAgICAgICBtaW46IDEsXG4gICAgICAgIG1heDogMjBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjZW50ZXInLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydDZW50ZXIgWCcsICdDZW50ZXIgWSddLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLjUsIDAuNV0sXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBjb2xvckhhbGZ0b25lOiB7XG4gICAgdHlwZTogJ2NvbG9ySGFsZnRvbmUnLFxuICAgIG5hbWU6ICdDb2xvciBIYWxmdG9uZScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5jb2xvckhhbGZ0b25lJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdhbmdsZScsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiBNYXRoLlBJIC8gMlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NpemUnLFxuICAgICAgICBtaW46IDEsXG4gICAgICAgIG1heDogMjBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjZW50ZXInLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydDZW50ZXIgWCcsICdDZW50ZXIgWSddLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLjUsIDAuNV0sXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBub2lzZToge1xuICAgIHR5cGU6ICdub2lzZScsXG4gICAgbmFtZTogJ05vaXNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLm5vaXNlJyxcbiAgICBwYXJhbWV0ZXJzOiBbe25hbWU6ICdhbW91bnQnLCBtaW46IDAsIG1heDogMX1dXG4gIH0sXG4gIHRyaWFuZ2xlQmx1cjoge1xuICAgIHR5cGU6ICd0cmlhbmdsZUJsdXInLFxuICAgIG5hbWU6ICdCbHVyIChUcmlhbmdsZSknLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24udHJpYW5nbGVCbHVyJyxcbiAgICBwYXJhbWV0ZXJzOiBbe25hbWU6ICdyYWRpdXMnLCBtaW46IDAsIG1heDogMTAwfV1cbiAgfSxcbiAgem9vbUJsdXI6IHtcbiAgICB0eXBlOiAnem9vbUJsdXInLFxuICAgIG5hbWU6ICdCbHVyIChab29tKScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi56b29tQmx1cicsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnc3RyZW5ndGgnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDAuMDUsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY2VudGVyJyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgbGFiZWw6IFsnQ2VudGVyIFgnLCAnQ2VudGVyIFknXSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBbMC41LCAwLjVdLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1heDogMVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAgdGlsdFNoaWZ0OiB7XG4gICAgdHlwZTogJ3RpbHRTaGlmdCcsXG4gICAgbmFtZTogJ0JsdXIgKFRpbHQgU2hpZnQpJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnRpbHRTaGlmdCcsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnYmx1clJhZGl1cycsXG4gICAgICAgIGxhYmVsOiAnQmx1cicsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiA1MFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2dyYWRpZW50UmFkaXVzJyxcbiAgICAgICAgbGFiZWw6ICdHcmFkaWVudCcsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiA0MDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdGFydCcsXG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIGxhYmVsOiBbJ1N0YXJ0JywgZmFsc2VdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLjAsIDAuMF0sXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZW5kJyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgbGFiZWw6IFsnRW5kJywgZmFsc2VdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFsxLCAxXSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIGVkZ2VXb3JrOiB7XG4gICAgdHlwZTogJ2VkZ2VXb3JrJyxcbiAgICBuYW1lOiAnRWRnZSB3b3JrJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmVkZ2VXb3JrJyxcbiAgICBwYXJhbWV0ZXJzOiBbe25hbWU6ICdyYWRpdXMnLCBtaW46IDEsIG1heDogNTB9XVxuICB9LFxuICB2aWduZXR0ZToge1xuICAgIHR5cGU6ICd2aWduZXR0ZScsXG4gICAgbmFtZTogJ1ZpZ25ldHRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnZpZ25ldHRlJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7bmFtZTogJ2Ftb3VudCcsIG1pbjogMCwgbWF4OiAxfSxcbiAgICAgIHtuYW1lOiAncmFkaXVzJywgbWluOiAwLCBtYXg6IDF9XG4gICAgXVxuICB9LFxuICBtYWduaWZ5OiB7XG4gICAgdHlwZTogJ21hZ25pZnknLFxuICAgIG5hbWU6ICdNYWduaWZ5JyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLm1hZ25pZnknLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NjcmVlblhZJyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgbGFiZWw6IFsnUG9zaXRpb24gWCcsICdQb3NpdGlvbiBZJ10sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzAuNSwgMC41XSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyYWRpdXNQaXhlbHMnLFxuICAgICAgICBsYWJlbDogJ1NpemUnLFxuICAgICAgICBtaW46IDEwLFxuICAgICAgICBtYXg6IDUwMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3pvb20nLFxuICAgICAgICBtaW46IDAuNSxcbiAgICAgICAgbWF4OiA1MFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2JvcmRlcldpZHRoUGl4ZWxzJyxcbiAgICAgICAgbGFiZWw6ICdCb3JkZXIgV2lkdGgnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDMsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiA1MFxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAgaGV4YWdvbmFsUGl4ZWxhdGU6IHtcbiAgICB0eXBlOiAnaGV4YWdvbmFsUGl4ZWxhdGUnLFxuICAgIG5hbWU6ICdIZXhhZ29uYWwgUGl4ZWxhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uaGV4YWdvbmFsUGl4ZWxhdGUnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ3NjYWxlJywgZGVmYXVsdFZhbHVlOiAyMCwgbWluOiAxLCBtYXg6IDUwfV1cbiAgfSxcbiAgZGlzdGFuY2VGb2c6IHtcbiAgICB0eXBlOiBESVNUQU5DRV9GT0dfVFlQRSxcbiAgICBuYW1lOiAnRGlzdGFuY2UgRm9nJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmRpc3RhbmNlRm9nJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7bmFtZTogJ2RlbnNpdHknLCBkZWZhdWx0VmFsdWU6IDAuNSwgbWluOiAwLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdmb2dTdGFydCcsIGxhYmVsOiAnU3RhcnQnLCBkZWZhdWx0VmFsdWU6IDAuMywgbWluOiAwLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdmb2dSYW5nZScsIGxhYmVsOiAnUmFuZ2UnLCBkZWZhdWx0VmFsdWU6IDAuNSwgbWluOiAwLjAxLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdmb2dDb2xvcicsIHR5cGU6ICdjb2xvcicsIG1pbjogMCwgbWF4OiAyNTUsIGRlZmF1bHRWYWx1ZTogWzIxNywgMjIyLCAyMzBdfVxuICAgIF1cbiAgfSxcbiAgc3VyZmFjZUZvZzoge1xuICAgIHR5cGU6IFNVUkZBQ0VfRk9HX1RZUEUsXG4gICAgbmFtZTogJ1N1cmZhY2UgRm9nJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnN1cmZhY2VGb2cnLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtuYW1lOiAnZGVuc2l0eScsIGRlZmF1bHRWYWx1ZTogMC42LCBtaW46IDAsIG1heDogMX0sXG4gICAgICB7bmFtZTogJ2hlaWdodCcsIGxhYmVsOiAnRWxldmF0aW9uIChtKScsIGRlZmF1bHRWYWx1ZTogNTAsIG1pbjogLTIwMCwgbWF4OiA2MDAwfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2FuaW1hdGVIZWlnaHQnLFxuICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICBsYWJlbDogJ0FuaW1hdGUgRWxldmF0aW9uJyxcbiAgICAgICAgdG9vbHRpcDpcbiAgICAgICAgICAnQW5pbWF0ZXMgZWxldmF0aW9uIGZyb20gc3RhcnQgdG8gZW5kIHZhbHVlIGR1cmluZyB2aWRlbyBleHBvcnQgcHJldmlldyBhbmQgcmVjb3JkaW5nLicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9LFxuICAgICAge25hbWU6ICdoZWlnaHRFbmQnLCBsYWJlbDogJ0VuZCBFbGV2YXRpb24gKG0pJywgZGVmYXVsdFZhbHVlOiAxMDAsIG1pbjogLTIwMCwgbWF4OiA2MDAwfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2xpbmVhckVhc2luZycsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIGxhYmVsOiAnTGluZWFyIEVhc2luZycsXG4gICAgICAgIHRvb2x0aXA6XG4gICAgICAgICAgJ1VzZXMgY29uc3RhbnQgc3BlZWQgaW5zdGVhZCBvZiBzbW9vdGggZWFzZS1pbiAvIGVhc2Utb3V0IGR1cmluZyBlbGV2YXRpb24gYW5pbWF0aW9uLicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9LFxuICAgICAge25hbWU6ICd0aGlja25lc3MnLCBsYWJlbDogJ1RyYW5zaXRpb24gKG0pJywgZGVmYXVsdFZhbHVlOiA1MCwgbWluOiAwLCBtYXg6IDEwMDB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZm9nQ29sb3InLFxuICAgICAgICB0eXBlOiAnY29sb3InLFxuICAgICAgICBsYWJlbDogJ0ZvZyBDb2xvcicsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAyNTUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzIzMCwgMjM1LCAyNDJdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncGF0dGVybicsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIGxhYmVsOiAnUGF0dGVybicsXG4gICAgICAgIHRvb2x0aXA6ICdBZGRzIGEgbm9pc2UgcGF0dGVybiB0byB0aGUgZm9nIGZvciBhIG1vcmUgbmF0dXJhbCwgdm9sdW1ldHJpYyBsb29rLicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9XG4gICAgXVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgRUZGRUNUX0RFU0NSSVBUSU9OUzogRWZmZWN0RGVzY3JpcHRpb25bXSA9IFtcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIC4uLk9iamVjdC5rZXlzKFBPU1RQUk9DRVNTSU5HX0VGRkVDVFMpLm1hcChrZXlOYW1lID0+IFBPU1RQUk9DRVNTSU5HX0VGRkVDVFNba2V5TmFtZV0pXG5dO1xuXG5leHBvcnQgdHlwZSBFZmZlY3RUeXBlID1cbiAgfCAnaW5rJ1xuICB8ICdicmlnaHRuZXNzQ29udHJhc3QnXG4gIHwgJ2h1ZVNhdHVyYXRpb24nXG4gIHwgJ3ZpYnJhbmNlJ1xuICB8ICdzZXBpYSdcbiAgfCAnZG90U2NyZWVuJ1xuICB8ICdjb2xvckhhbGZ0b25lJ1xuICB8ICdub2lzZSdcbiAgfCAndHJpYW5nbGVCbHVyJ1xuICB8ICd6b29tQmx1cidcbiAgfCAndGlsdFNoaWZ0J1xuICB8ICdlZGdlV29yaydcbiAgfCAndmlnbmV0dGUnXG4gIHwgJ21hZ25pZnknXG4gIHwgJ2hleGFnb25hbFBpeGVsYXRlJ1xuICB8ICdkaXN0YW5jZUZvZydcbiAgfCAnc3VyZmFjZUZvZydcbiAgfCAnbGlnaHRBbmRTaGFkb3cnO1xuXG5leHBvcnQgY29uc3QgU1lOQ19USU1FTElORV9NT0RFUzogUmVjb3JkPHN0cmluZywgU3luY1RpbWVsaW5lTW9kZT4gPSB7XG4gIHN0YXJ0OiAwLFxuICBlbmQ6IDFcbn07XG5cbmV4cG9ydCBjb25zdCBHRU9BUlJPV19NRVRBREFUQV9LRVkgPSAnQVJST1c6ZXh0ZW5zaW9uOm5hbWUnO1xuXG4vKipcbiAqIEVudW0gaG9sZGluZyBHZW9BcnJvdyBleHRlbnNpb24gdHlwZSBuYW1lc1xuICovXG5leHBvcnQgZW51bSBHRU9BUlJPV19FWFRFTlNJT05TIHtcbiAgUE9JTlQgPSAnZ2VvYXJyb3cucG9pbnQnLFxuICBMSU5FU1RSSU5HID0gJ2dlb2Fycm93LmxpbmVzdHJpbmcnLFxuICBQT0xZR09OID0gJ2dlb2Fycm93LnBvbHlnb24nLFxuICBNVUxUSVBPSU5UID0gJ2dlb2Fycm93Lm11bHRpcG9pbnQnLFxuICBNVUxUSUxJTkVTVFJJTkcgPSAnZ2VvYXJyb3cubXVsdGlsaW5lc3RyaW5nJyxcbiAgTVVMVElQT0xZR09OID0gJ2dlb2Fycm93Lm11bHRpcG9seWdvbicsXG4gIFdLQiA9ICdnZW9hcnJvdy53a2InXG59XG5cbmV4cG9ydCBjb25zdCBMT0FERVJTX0NETl9WRVJTSU9OID0gJzQuMy4yJztcbmV4cG9ydCBjb25zdCBMT0FERVJTX0NETl9VUkwgPSAnaHR0cHM6Ly91bnBrZy5jb20vQGxvYWRlcnMuZ2wnO1xuXG5leHBvcnQgY29uc3QgZ2V0TG9hZGVyT3B0aW9ucyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBtdnQ6IHtcbiAgICAgIHdvcmtlclVybDogYCR7TE9BREVSU19DRE5fVVJMfS9tdnRAJHtMT0FERVJTX0NETl9WRVJTSU9OfS9kaXN0L212dC13b3JrZXIuanNgXG4gICAgfSxcbiAgICAncXVhbnRpemVkLW1lc2gnOiB7XG4gICAgICB3b3JrZXJVcmw6IGAke0xPQURFUlNfQ0ROX1VSTH0vdGVycmFpbkAke0xPQURFUlNfQ0ROX1ZFUlNJT059L2Rpc3QvcXVhbnRpemVkLW1lc2gtd29ya2VyLmpzYFxuICAgIH0sXG4gICAgbnB5OiB7XG4gICAgICB3b3JrZXJVcmw6IGAke0xPQURFUlNfQ0ROX1VSTH0vdGV4dHVyZXNAJHtMT0FERVJTX0NETl9WRVJTSU9OfS9kaXN0L25weS13b3JrZXIuanNgXG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IENVU1RPTV9TQ0VORUdSQVBIX01PREVMX0lEID0gJ2N1c3RvbSc7XG5jb25zdCBNT0RFTFNfQkFTRV9VUkwgPVxuICAnaHR0cHM6Ly9zdHVkaW8tcHVibGljLWRhdGEuZm91cnNxdWFyZS5jb20vc3RhdGljcy9rZXBsZXJnbC8zZC1tb2RlbHMuMjAyMi0wNi0xMyc7XG5cbmV4cG9ydCBjb25zdCBUUklQX0xBWUVSX1NDRU5FR1JBUEhfTU9ERUxTOiB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGljb246IGFueTtcbiAgdXJsOiBzdHJpbmcgfCBudWxsO1xuICBhbmdsZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc2NhbGU6IG51bWJlcjtcbn1bXSA9IFtcbiAge1xuICAgIGlkOiAnYWlycGxhbmUnLFxuICAgIGxhYmVsOiAnQWlycGxhbmUnLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L1BsYW5lLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdib2Vpbmc3NzcnLFxuICAgIGxhYmVsOiAnQWlybGluZXInLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0FpcmxpbmVyLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICd1YmVyLWV2dG9sJyxcbiAgICBsYWJlbDogJ1ZUT0wnLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L2V2dG9sLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdoYW5nLWdsaWRlcicsXG4gICAgbGFiZWw6ICdHbGlkZXInLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0hhbmdnbGlkZXIuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2hlbGljb3B0ZXInLFxuICAgIGxhYmVsOiAnSGVsaWNvcHRlcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vSGVsaWNvcHRlci5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAnYmljeWNsZScsXG4gICAgbGFiZWw6ICdCaWN5Y2xlJyxcbiAgICBpY29uOiBudWxsLFxuICAgIHVybDogYCR7TU9ERUxTX0JBU0VfVVJMfS9CaWN5Y2xlLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdzY29vdGVyJyxcbiAgICBsYWJlbDogJ1Njb290ZXInLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L1Njb290ZXIuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2NhcicsXG4gICAgbGFiZWw6ICdDYXInLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0Nhci5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAndHJ1Y2snLFxuICAgIGxhYmVsOiAnVHJ1Y2snLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L1RydWNrLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdzZW1pdHJ1Y2snLFxuICAgIGxhYmVsOiAnU2VtaXRydWNrJyxcbiAgICBpY29uOiBudWxsLFxuICAgIHVybDogYCR7TU9ERUxTX0JBU0VfVVJMfS9TZW1pdHJ1Y2suZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2Nhcmdvc2hpcCcsXG4gICAgbGFiZWw6ICdDYXJnb3NoaXAnLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0Nhcmdvc2hpcC5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiBDVVNUT01fU0NFTkVHUkFQSF9NT0RFTF9JRCxcbiAgICBsYWJlbDogJ0N1c3RvbScsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IG51bGwsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUVBLE9BQU9BLFNBQVMsTUFB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