@kepler.gl/constants 3.3.0-alpha.1 → 3.3.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) 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 +176 -0
  5. package/dist/cjs/default-settings.js +1740 -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 +609 -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/dataset.d.ts +52 -0
  16. package/dist/default-settings.d.ts +81 -1
  17. package/dist/esm/annotation.js +38 -0
  18. package/dist/esm/color-palettes.js +453 -0
  19. package/dist/esm/colors-by-theme.js +513 -0
  20. package/dist/esm/dataset.js +169 -0
  21. package/dist/esm/default-settings.js +1734 -0
  22. package/dist/esm/gpu-parameters.js +119 -0
  23. package/dist/esm/index.js +18 -0
  24. package/dist/esm/keyevent.js +19 -0
  25. package/dist/esm/layers.js +602 -0
  26. package/dist/esm/plot.js +9 -0
  27. package/dist/esm/time.js +190 -0
  28. package/dist/esm/tooltip.js +215 -0
  29. package/dist/esm/user-feedbacks.js +9 -0
  30. package/dist/esm/user-guides.js +13 -0
  31. package/dist/layers.d.ts +4 -0
  32. package/package.json +20 -13
  33. package/dist/annotation.js +0 -45
  34. package/dist/color-palettes.js +0 -462
  35. package/dist/colors-by-theme.js +0 -519
  36. package/dist/dataset.js +0 -82
  37. package/dist/default-settings.js +0 -1646
  38. package/dist/gpu-parameters.js +0 -125
  39. package/dist/index.js +0 -149
  40. package/dist/keyevent.js +0 -26
  41. package/dist/layers.js +0 -605
  42. package/dist/time.js +0 -194
  43. package/dist/tooltip.js +0 -221
  44. package/dist/user-feedbacks.js +0 -15
  45. package/dist/user-guides.js +0 -19
  46. package/umd/keplergl.min.js +0 -58
@@ -0,0 +1,1734 @@
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.10";
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
+ /** Visible gray used when a color field has no value and missing features should stay on the map. */
709
+ export var MISSING_VALUE_COLOR = [128, 128, 128, 255];
710
+ export var DEFAULT_PICKING_RADIUS = 3;
711
+ export var OVERLAY_BLENDINGS = {
712
+ normal: {
713
+ label: 'overlayBlending.normal',
714
+ value: 'normal'
715
+ },
716
+ screen: {
717
+ label: 'overlayBlending.screen',
718
+ value: 'screen'
719
+ },
720
+ darken: {
721
+ label: 'overlayBlending.darken',
722
+ value: 'darken'
723
+ }
724
+ };
725
+ export var LAYER_BLENDINGS = {
726
+ additive: {
727
+ label: 'layerBlending.additive',
728
+ blendFunc: ['SRC_ALPHA', 'DST_ALPHA'],
729
+ blendEquation: 'FUNC_ADD'
730
+ },
731
+ normal: {
732
+ // reference to
733
+ // https://limnu.com/webgl-blending-youre-probably-wrong/
734
+ label: 'layerBlending.normal',
735
+ blendFunc: ['SRC_ALPHA', 'ONE_MINUS_SRC_ALPHA', 'ONE', 'ONE_MINUS_SRC_ALPHA'],
736
+ blendEquation: ['FUNC_ADD', 'FUNC_ADD']
737
+ },
738
+ subtractive: {
739
+ label: 'layerBlending.subtractive',
740
+ blendFunc: ['ONE', 'ONE_MINUS_DST_COLOR', 'SRC_ALPHA', 'DST_ALPHA'],
741
+ blendEquation: ['FUNC_SUBTRACT', 'FUNC_ADD']
742
+ }
743
+ };
744
+ export var MAX_DEFAULT_TOOLTIPS = 5;
745
+ export var RESOLUTIONS = keyMirror({
746
+ ONE_X: null,
747
+ TWO_X: null
748
+ });
749
+ export var EXPORT_IMG_RATIOS = keyMirror({
750
+ SCREEN: null,
751
+ FOUR_BY_THREE: null,
752
+ SIXTEEN_BY_NINE: null,
753
+ CUSTOM: null
754
+ });
755
+ export var ScreenRatioOption = {
756
+ id: EXPORT_IMG_RATIOS.SCREEN,
757
+ label: 'modal.exportImage.ratioOriginalScreen',
758
+ getSize: function getSize(screenW, screenH) {
759
+ return {
760
+ width: screenW,
761
+ height: screenH
762
+ };
763
+ }
764
+ };
765
+ export var CustomRatioOption = {
766
+ id: EXPORT_IMG_RATIOS.CUSTOM,
767
+ hidden: true,
768
+ label: 'modal.exportImage.ratioCustom',
769
+ getSize: function getSize(mapW, mapH) {
770
+ return {
771
+ width: mapW,
772
+ height: mapH
773
+ };
774
+ }
775
+ };
776
+ export var FourByThreeRatioOption = {
777
+ id: EXPORT_IMG_RATIOS.FOUR_BY_THREE,
778
+ label: 'modal.exportImage.ratio4_3',
779
+ getSize: function getSize(screenW) {
780
+ return {
781
+ width: screenW,
782
+ height: Math.round(screenW * 0.75)
783
+ };
784
+ }
785
+ };
786
+ export var SixteenByNineRatioOption = {
787
+ id: EXPORT_IMG_RATIOS.SIXTEEN_BY_NINE,
788
+ label: 'modal.exportImage.ratio16_9',
789
+ getSize: function getSize(screenW) {
790
+ return {
791
+ width: screenW,
792
+ height: Math.round(screenW * 0.5625)
793
+ };
794
+ }
795
+ };
796
+ export var EXPORT_IMG_RATIO_OPTIONS = [ScreenRatioOption, FourByThreeRatioOption, SixteenByNineRatioOption, CustomRatioOption];
797
+ export var OneXResolutionOption = {
798
+ id: RESOLUTIONS.ONE_X,
799
+ label: '1x',
800
+ available: true,
801
+ scale: 1,
802
+ getSize: function getSize(screenW, screenH) {
803
+ return {
804
+ width: screenW,
805
+ height: screenH
806
+ };
807
+ }
808
+ };
809
+ export var TwoXResolutionOption = {
810
+ id: RESOLUTIONS.TWO_X,
811
+ label: '2x',
812
+ available: true,
813
+ scale: 2,
814
+ getSize: function getSize(screenW, screenH) {
815
+ return {
816
+ width: screenW * 2,
817
+ height: screenH * 2
818
+ };
819
+ }
820
+ };
821
+
822
+ // Fixed dimension options
823
+ export var Resolution1920x1080Option = {
824
+ id: '1920x1080',
825
+ label: '1920 × 1080 (16:9)',
826
+ available: true,
827
+ getSize: function getSize() {
828
+ return {
829
+ width: 1920,
830
+ height: 1080
831
+ };
832
+ }
833
+ };
834
+ export var Resolution1280x720Option = {
835
+ id: '1280x720',
836
+ label: '1280 × 720 (16:9)',
837
+ available: true,
838
+ getSize: function getSize() {
839
+ return {
840
+ width: 1280,
841
+ height: 720
842
+ };
843
+ }
844
+ };
845
+ export var Resolution2560x1440Option = {
846
+ id: '2560x1440',
847
+ label: '2560 × 1440 (16:9)',
848
+ available: true,
849
+ getSize: function getSize() {
850
+ return {
851
+ width: 2560,
852
+ height: 1440
853
+ };
854
+ }
855
+ };
856
+ export var Resolution1600x900Option = {
857
+ id: '1600x900',
858
+ label: '1600 × 900 (16:9)',
859
+ available: true,
860
+ getSize: function getSize() {
861
+ return {
862
+ width: 1600,
863
+ height: 900
864
+ };
865
+ }
866
+ };
867
+ export var Resolution1024x768Option = {
868
+ id: '1024x768',
869
+ label: '1024 × 768 (4:3)',
870
+ available: true,
871
+ getSize: function getSize() {
872
+ return {
873
+ width: 1024,
874
+ height: 768
875
+ };
876
+ }
877
+ };
878
+ export var Resolution1280x960Option = {
879
+ id: '1280x960',
880
+ label: '1280 × 960 (4:3)',
881
+ available: true,
882
+ getSize: function getSize() {
883
+ return {
884
+ width: 1280,
885
+ height: 960
886
+ };
887
+ }
888
+ };
889
+ export var Resolution1600x1200Option = {
890
+ id: '1600x1200',
891
+ label: '1600 × 1200 (4:3)',
892
+ available: true,
893
+ getSize: function getSize() {
894
+ return {
895
+ width: 1600,
896
+ height: 1200
897
+ };
898
+ }
899
+ };
900
+ export var Resolution1920x1440Option = {
901
+ id: '1920x1440',
902
+ label: '1920 × 1440 (4:3)',
903
+ available: true,
904
+ getSize: function getSize() {
905
+ return {
906
+ width: 1920,
907
+ height: 1440
908
+ };
909
+ }
910
+ };
911
+ export var EXPORT_IMG_RESOLUTION_OPTIONS = [OneXResolutionOption, TwoXResolutionOption, Resolution1280x720Option, Resolution1920x1080Option, Resolution2560x1440Option, Resolution1600x900Option, Resolution1024x768Option, Resolution1280x960Option, Resolution1600x1200Option, Resolution1920x1440Option];
912
+ export var EXPORT_DATA_TYPE = keyMirror({
913
+ CSV: null
914
+ // SHAPEFILE: null,
915
+ // JSON: null,
916
+ // GEOJSON: null,
917
+ // TOPOJSON: null
918
+ });
919
+ export var EXPORT_DATA_TYPE_OPTIONS = [{
920
+ id: EXPORT_DATA_TYPE.CSV,
921
+ label: EXPORT_DATA_TYPE.CSV.toLowerCase(),
922
+ available: true
923
+ }
924
+ // {
925
+ // id: EXPORT_DATA_TYPE.SHAPEFILE,
926
+ // label: 'shapefile',
927
+ // available: false
928
+ // },
929
+ // {
930
+ // id: EXPORT_DATA_TYPE.JSON,
931
+ // label: 'json',
932
+ // available: false
933
+ // },
934
+ // {
935
+ // id: EXPORT_DATA_TYPE.GEOJSON,
936
+ // label: 'geojson',
937
+ // available: false
938
+ // },
939
+ // {
940
+ // id: EXPORT_DATA_TYPE.TOPOJSON,
941
+ // label: 'topojson',
942
+ // available: false
943
+ // }
944
+ ];
945
+
946
+ // Export map types
947
+ export var EXPORT_MAP_FORMATS = keyMirror({
948
+ HTML: null,
949
+ JSON: null
950
+ });
951
+ export var EXPORT_HTML_MAP_MODES = keyMirror({
952
+ READ: null,
953
+ EDIT: null
954
+ });
955
+
956
+ // Export map options
957
+ export var EXPORT_MAP_FORMAT_OPTIONS = Object.entries(EXPORT_MAP_FORMATS).map(function (entry) {
958
+ return {
959
+ id: entry[0],
960
+ label: entry[1].toLowerCase(),
961
+ available: true
962
+ };
963
+ });
964
+ export function getHTMLMapModeTileUrl(mode) {
965
+ return "https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/map-".concat(mode.toLowerCase(), "-mode.png");
966
+ }
967
+ export var EXPORT_HTML_MAP_MODE_OPTIONS = Object.entries(EXPORT_HTML_MAP_MODES).map(function (entry) {
968
+ return {
969
+ id: entry[0],
970
+ label: "modal.exportMap.html.".concat(entry[1].toLowerCase()),
971
+ available: true,
972
+ url: getHTMLMapModeTileUrl(entry[1])
973
+ };
974
+ });
975
+ export var DEFAULT_UUID_COUNT = 6;
976
+ export var DEFAULT_NOTIFICATION_MESSAGE = 'MESSAGE_NOT_PROVIDED';
977
+ export var DEFAULT_NOTIFICATION_TYPES = keyMirror({
978
+ info: null,
979
+ error: null,
980
+ warning: null,
981
+ success: null
982
+ });
983
+ export var DEFAULT_NOTIFICATION_TOPICS = keyMirror({
984
+ global: null,
985
+ file: null
986
+ });
987
+
988
+ // Minimum time between identical notifications about deck.gl errors
989
+ export var THROTTLE_NOTIFICATION_TIME = 330;
990
+
991
+ // Animation
992
+ export var BASE_SPEED = 600;
993
+ export var FPS = 60;
994
+
995
+ /**
996
+ * 4 Animation Window Types
997
+ * 1. free
998
+ * |-> |->
999
+ * Current time is a fixed range, animation controller calls next animation frames continuously to animation a moving window
1000
+ * The increment id based on domain / BASE_SPEED * SPEED
1001
+ *
1002
+ * 2. incremental
1003
+ * | |->
1004
+ * Same as free, current time is a growing range, only the max value of range increment during animation.
1005
+ * The increment is also based on domain / BASE_SPEED * SPEED
1006
+ *
1007
+ * 3. point
1008
+ * o -> o
1009
+ * Current time is a point, animation controller calls next animation frame continuously to animation a moving point
1010
+ * The increment is based on domain / BASE_SPEED * SPEED
1011
+ *
1012
+ * 4. interval
1013
+ * o ~> o
1014
+ * Current time is a point. An array of sorted time steps need to be provided.
1015
+ * animation controller calls next animation at a interval when the point jumps to the next step
1016
+ */
1017
+ export var ANIMATION_WINDOW = keyMirror({
1018
+ free: null,
1019
+ incremental: null,
1020
+ point: null,
1021
+ interval: null
1022
+ });
1023
+ export var DEFAULT_TIME_FORMAT = 'MM/DD/YY HH:mm:ssa';
1024
+ export var SPEED_CONTROL_RANGE = [0, 10];
1025
+ export var SPEED_CONTROL_STEP = 0.001;
1026
+
1027
+ // Geocoder
1028
+ export var GEOCODER_DATASET_NAME = 'geocoder_dataset';
1029
+ export var GEOCODER_LAYER_ID = 'geocoder_layer';
1030
+ export var GEOCODER_GEO_OFFSET = 0.05;
1031
+ export var GEOCODER_ICON_COLOR = [255, 0, 0];
1032
+ // Base icon size before anchor normalization. The geocoder pin icon is bottom-anchored
1033
+ // and scaled to fit the ScatterplotLayer unit circle (~0.5x), so the rendered size is
1034
+ // compensated here (80 * 2 = 160).
1035
+ export var GEOCODER_ICON_SIZE = 160;
1036
+
1037
+ // Editor
1038
+ export var EDITOR_LAYER_ID = 'kepler_editor_layer';
1039
+ export var EDITOR_LAYER_PICKING_RADIUS = 6;
1040
+ export var EDITOR_MODES = {
1041
+ DRAW_POLYGON: 'DRAW_POLYGON',
1042
+ DRAW_RECTANGLE: 'DRAW_RECTANGLE',
1043
+ DRAW_CIRCLE: 'DRAW_CIRCLE',
1044
+ DRAW_LINESTRING: 'DRAW_LINESTRING',
1045
+ DRAW_POINT: 'DRAW_POINT',
1046
+ EDIT: 'EDIT_VERTEX'
1047
+ };
1048
+ export var EDITOR_DRAW_MODES = [EDITOR_MODES.DRAW_POLYGON, EDITOR_MODES.DRAW_RECTANGLE, EDITOR_MODES.DRAW_CIRCLE, EDITOR_MODES.DRAW_LINESTRING, EDITOR_MODES.DRAW_POINT];
1049
+ export var PLOT_TYPES = keyMirror({
1050
+ histogram: null,
1051
+ lineChart: null
1052
+ });
1053
+
1054
+ // Filter
1055
+ export var INIT_FILTER_ITEMS_IN_DROPDOWN = 100;
1056
+
1057
+ // GPU Filtering
1058
+ /**
1059
+ * Max number of filter value buffers that deck.gl provides
1060
+ */
1061
+ export var MAX_GPU_FILTERS = 4;
1062
+ export var MAP_THUMBNAIL_DIMENSION = {
1063
+ width: 300,
1064
+ height: 200
1065
+ };
1066
+ export var MAP_INFO_CHARACTER = {
1067
+ title: 100,
1068
+ description: 100
1069
+ };
1070
+
1071
+ // Load data
1072
+ export var LOADING_METHODS = keyMirror({
1073
+ upload: null,
1074
+ storage: null,
1075
+ tileset: null
1076
+ });
1077
+ export var DEFAULT_FEATURE_FLAGS = {};
1078
+ export var DATASET_FORMATS = keyMirror({
1079
+ row: null,
1080
+ geojson: null,
1081
+ csv: null,
1082
+ keplergl: null,
1083
+ arrow: null,
1084
+ duckdb: null
1085
+ });
1086
+ export var MAP_CONTROLS = keyMirror({
1087
+ visibleLayers: null,
1088
+ mapLegend: null,
1089
+ toggle3d: null,
1090
+ splitMap: null,
1091
+ mapDraw: null,
1092
+ mapLocale: null,
1093
+ mapTheme: null,
1094
+ effect: null,
1095
+ annotation: null
1096
+ });
1097
+ export var MapViewMode = /*#__PURE__*/function (MapViewMode) {
1098
+ MapViewMode["MODE_2D"] = "MODE_2D";
1099
+ MapViewMode["MODE_3D"] = "MODE_3D";
1100
+ MapViewMode["MODE_GLOBE"] = "MODE_GLOBE";
1101
+ return MapViewMode;
1102
+ }({});
1103
+
1104
+ /**
1105
+ * Minimum zoom level allowed in globe mode. Negative values let the user zoom
1106
+ * out further than the web-mercator default of 0, so the whole globe can be
1107
+ * pulled back to appear smaller on screen.
1108
+ */
1109
+ export var GLOBE_MIN_ZOOM = 2;
1110
+
1111
+ /**
1112
+ * Maximum zoom in globe mode.
1113
+ *
1114
+ * The previous "empty rectangles" at high zoom were caused by the vector basemap
1115
+ * layer declaring `maxZoom: 23` while the raw tile endpoints only have data to
1116
+ * z16 (mapbox-streets-v8) / z14 (CARTO) — deck then requested non-existent tiles
1117
+ * that 404. That is fixed in `getGlobeBaseLayers` by setting `maxZoom` to each
1118
+ * source's true data max so deck overzooms instead.
1119
+ *
1120
+ * The remaining practical ceiling is float32 precision: deck's globe places
1121
+ * geometry in common space on a sphere of radius 256 with no fp64/relative-to-
1122
+ * center trick, so beyond ~visual-zoom 16 (roughly this mapState zoom minus
1123
+ * `zoomAdjust(lat)` ≈ 1.65 at the equator) geometry starts to jitter/drift.
1124
+ */
1125
+ export var GLOBE_MAX_ZOOM = 16;
1126
+
1127
+ /**
1128
+ * Maximum absolute center latitude allowed in globe mode. Constrains the camera
1129
+ * target to a band around the equator so the view can't be centered on the
1130
+ * poles (deck.gl's default clamps to ~85°, which lets the camera stare straight
1131
+ * down at a pole). Applies symmetrically to the northern and southern hemisphere.
1132
+ */
1133
+ export var GLOBE_MAX_LATITUDE = 75;
1134
+ export var DEFAULT_GLOBE_CONFIG = {
1135
+ atmosphere: true,
1136
+ hugeHalo: true,
1137
+ hugeHaloRadius: 3.5,
1138
+ hugeHaloOpacity: 0.2,
1139
+ azimuth: false,
1140
+ azimuthAngle: 45,
1141
+ terminator: true,
1142
+ terminatorOpacity: 0.35,
1143
+ basemap: true,
1144
+ labels: false,
1145
+ labelsColor: [114.75, 114.75, 114.75],
1146
+ adminLines: true,
1147
+ adminLinesColor: [40, 63, 93],
1148
+ water: true,
1149
+ waterColor: [17, 35, 48],
1150
+ surface: true,
1151
+ surfaceColor: [9, 16, 29],
1152
+ // Color of the empty space rendered around the globe (deck.gl clear color).
1153
+ // Matches the previous hardcoded clear color [0.015, 0.035, 0.065] in 0-1 space.
1154
+ backgroundColor: [4, 9, 17],
1155
+ // Starfield behind the globe is on by default in globe view.
1156
+ stars: true
1157
+ };
1158
+ export var GLOBE_SUPPORTED_LAYERS = {
1159
+ point: true,
1160
+ arc: true,
1161
+ grid: true,
1162
+ hexagon: true,
1163
+ geojson: true,
1164
+ cluster: true,
1165
+ icon: true,
1166
+ hexagonId: true,
1167
+ '3D': true,
1168
+ vectorTile: true,
1169
+ hexTile: true,
1170
+ line: true,
1171
+ trip: true,
1172
+ rasterTile: true,
1173
+ heatmap: true,
1174
+ s2: false,
1175
+ tile3d: false,
1176
+ // Flow arrows are flat quads in common space (equatorial plane) and collapse when
1177
+ // viewed edge-on on the globe, so the flow layer is not supported in Globe mode.
1178
+ flow: false
1179
+ };
1180
+ export var MapSplitMode = /*#__PURE__*/function (MapSplitMode) {
1181
+ MapSplitMode["SINGLE_MAP"] = "SINGLE_MAP";
1182
+ MapSplitMode["DUAL_MAP"] = "DUAL_MAP";
1183
+ MapSplitMode["SWIPE_COMPARE"] = "SWIPE_COMPARE";
1184
+ return MapSplitMode;
1185
+ }({});
1186
+
1187
+ /**
1188
+ * A multiplier for screen-space width/scale for Arc, Line, Icon and Text layers.
1189
+ * Required in order to maintain the same appearance after upgrading to deck.gl v8.5.
1190
+ * https://github.com/visgl/deck.gl/blob/master/docs/upgrade-guide.md
1191
+ */
1192
+ export var PROJECTED_PIXEL_SIZE_MULTIPLIER = 2 / 3;
1193
+
1194
+ /**
1195
+ * Maximum value for text outline width
1196
+ */
1197
+ export var TEXT_OUTLINE_MULTIPLIER = 5;
1198
+ export var dataTestIds = {
1199
+ infoIcon: 'info-icon',
1200
+ warningIcon: 'warning-icon',
1201
+ errorIcon: 'error-icon',
1202
+ successIcon: 'success-icon',
1203
+ checkmarkIcon: 'checkmark-icon',
1204
+ copyNotificationIcon: 'copy-notification-icon',
1205
+ sortableLayerItem: 'sortable-layer-item',
1206
+ staticLayerItem: 'static-layer-item',
1207
+ layerTitleEditor: 'layer__title__editor',
1208
+ removeLayerAction: 'remove-layer-action',
1209
+ layerPanel: 'layer-panel',
1210
+ sortableEffectItem: 'sortable-effect-item',
1211
+ staticEffectItem: 'static-effect-item',
1212
+ providerLoading: 'provider-loading',
1213
+ providerMapInfoPanel: 'provider-map-info-panel',
1214
+ providerSelect: 'provider-select',
1215
+ cloudHeader: 'cloud-header',
1216
+ providerShareMap: 'provider-share-map'
1217
+ };
1218
+
1219
+ // Effects
1220
+ export var DEFAULT_TIMEZONE = 'UTC';
1221
+ export var DEFAULT_POST_PROCESSING_EFFECT_TYPE = 'ink';
1222
+ export var DEFAULT_LIGHT_COLOR = [255, 255, 255];
1223
+ export var DEFAULT_LIGHT_INTENSITY = 1;
1224
+ export var DEFAULT_SHADOW_INTENSITY = 0.5;
1225
+ export var DEFAULT_SHADOW_COLOR = [0, 0, 0];
1226
+ export var LIGHT_AND_SHADOW_EFFECT_TIME_MODES = {
1227
+ pick: 'pick',
1228
+ current: 'current',
1229
+ animation: 'animation'
1230
+ };
1231
+ export var DEFAULT_LIGHT_AND_SHADOW_PROPS = {
1232
+ timestamp: Date.now(),
1233
+ timeMode: LIGHT_AND_SHADOW_EFFECT_TIME_MODES.pick,
1234
+ shadowIntensity: DEFAULT_SHADOW_INTENSITY,
1235
+ shadowColor: [].concat(DEFAULT_SHADOW_COLOR),
1236
+ sunLightColor: [].concat(DEFAULT_LIGHT_COLOR),
1237
+ sunLightIntensity: DEFAULT_LIGHT_INTENSITY,
1238
+ ambientLightColor: [].concat(DEFAULT_LIGHT_COLOR),
1239
+ ambientLightIntensity: DEFAULT_LIGHT_INTENSITY
1240
+ };
1241
+ export var LIGHT_AND_SHADOW_EFFECT = {
1242
+ type: 'lightAndShadow',
1243
+ name: 'Light & Shadow',
1244
+ description: 'effectDescription.lightAndShadow',
1245
+ parameters: [{
1246
+ name: 'timestamp',
1247
+ min: 0,
1248
+ max: Number.MAX_SAFE_INTEGER
1249
+ }, {
1250
+ name: 'shadowIntensity',
1251
+ min: 0,
1252
+ max: 1,
1253
+ defaultValue: DEFAULT_SHADOW_INTENSITY
1254
+ }, {
1255
+ name: 'sunLightIntensity',
1256
+ min: 0,
1257
+ max: 5,
1258
+ defaultValue: DEFAULT_LIGHT_INTENSITY
1259
+ }, {
1260
+ name: 'ambientLightIntensity',
1261
+ min: 0,
1262
+ max: 5,
1263
+ defaultValue: DEFAULT_LIGHT_INTENSITY
1264
+ }, {
1265
+ name: 'shadowColor',
1266
+ type: 'color',
1267
+ min: 0,
1268
+ max: 255,
1269
+ defaultValue: DEFAULT_SHADOW_COLOR
1270
+ }, {
1271
+ name: 'sunLightColor',
1272
+ type: 'color',
1273
+ min: 0,
1274
+ max: 255,
1275
+ defaultValue: DEFAULT_LIGHT_COLOR
1276
+ }, {
1277
+ name: 'ambientLightColor',
1278
+ type: 'color',
1279
+ min: 0,
1280
+ max: 255,
1281
+ defaultValue: DEFAULT_LIGHT_COLOR
1282
+ }]
1283
+ };
1284
+ export var DISTANCE_FOG_TYPE = 'distanceFog';
1285
+ export var SURFACE_FOG_TYPE = 'surfaceFog';
1286
+ export var POSTPROCESSING_EFFECTS = {
1287
+ ink: {
1288
+ type: 'ink',
1289
+ name: 'Ink',
1290
+ description: 'effectDescription.ink',
1291
+ parameters: [{
1292
+ name: 'strength',
1293
+ min: 0,
1294
+ max: 1
1295
+ }]
1296
+ },
1297
+ brightnessContrast: {
1298
+ type: 'brightnessContrast',
1299
+ name: 'Brightness & Contrast',
1300
+ description: 'effectDescription.brightnessContrast',
1301
+ parameters: [{
1302
+ name: 'brightness',
1303
+ min: -1,
1304
+ max: 1
1305
+ }, {
1306
+ name: 'contrast',
1307
+ min: -1,
1308
+ max: 1
1309
+ }]
1310
+ },
1311
+ hueSaturation: {
1312
+ type: 'hueSaturation',
1313
+ name: 'Hue & Saturation',
1314
+ description: 'effectDescription.hueSaturation',
1315
+ parameters: [{
1316
+ name: 'hue',
1317
+ min: -1,
1318
+ max: 1
1319
+ }, {
1320
+ name: 'saturation',
1321
+ defaultValue: 0.25,
1322
+ min: -1,
1323
+ max: 1
1324
+ }]
1325
+ },
1326
+ vibrance: {
1327
+ type: 'vibrance',
1328
+ name: 'Vibrance',
1329
+ description: 'effectDescription.vibrance',
1330
+ parameters: [{
1331
+ name: 'amount',
1332
+ defaultValue: 0.5,
1333
+ min: -1,
1334
+ max: 1
1335
+ }]
1336
+ },
1337
+ sepia: {
1338
+ type: 'sepia',
1339
+ name: 'Sepia',
1340
+ description: 'effectDescription.sepia',
1341
+ parameters: [{
1342
+ name: 'amount',
1343
+ min: 0,
1344
+ max: 1
1345
+ }]
1346
+ },
1347
+ dotScreen: {
1348
+ type: 'dotScreen',
1349
+ name: 'Dot Screen',
1350
+ description: 'effectDescription.dotScreen',
1351
+ parameters: [{
1352
+ name: 'angle',
1353
+ min: 0,
1354
+ max: Math.PI / 2
1355
+ }, {
1356
+ name: 'size',
1357
+ min: 1,
1358
+ max: 20
1359
+ }, {
1360
+ name: 'center',
1361
+ type: 'array',
1362
+ label: ['Center X', 'Center Y'],
1363
+ defaultValue: [0.5, 0.5],
1364
+ min: 0,
1365
+ max: 1
1366
+ }]
1367
+ },
1368
+ colorHalftone: {
1369
+ type: 'colorHalftone',
1370
+ name: 'Color Halftone',
1371
+ description: 'effectDescription.colorHalftone',
1372
+ parameters: [{
1373
+ name: 'angle',
1374
+ min: 0,
1375
+ max: Math.PI / 2
1376
+ }, {
1377
+ name: 'size',
1378
+ min: 1,
1379
+ max: 20
1380
+ }, {
1381
+ name: 'center',
1382
+ type: 'array',
1383
+ label: ['Center X', 'Center Y'],
1384
+ defaultValue: [0.5, 0.5],
1385
+ min: 0,
1386
+ max: 1
1387
+ }]
1388
+ },
1389
+ noise: {
1390
+ type: 'noise',
1391
+ name: 'Noise',
1392
+ description: 'effectDescription.noise',
1393
+ parameters: [{
1394
+ name: 'amount',
1395
+ min: 0,
1396
+ max: 1
1397
+ }]
1398
+ },
1399
+ triangleBlur: {
1400
+ type: 'triangleBlur',
1401
+ name: 'Blur (Triangle)',
1402
+ description: 'effectDescription.triangleBlur',
1403
+ parameters: [{
1404
+ name: 'radius',
1405
+ min: 0,
1406
+ max: 100
1407
+ }]
1408
+ },
1409
+ zoomBlur: {
1410
+ type: 'zoomBlur',
1411
+ name: 'Blur (Zoom)',
1412
+ description: 'effectDescription.zoomBlur',
1413
+ parameters: [{
1414
+ name: 'strength',
1415
+ defaultValue: 0.05,
1416
+ min: 0,
1417
+ max: 1
1418
+ }, {
1419
+ name: 'center',
1420
+ type: 'array',
1421
+ label: ['Center X', 'Center Y'],
1422
+ defaultValue: [0.5, 0.5],
1423
+ min: 0,
1424
+ max: 1
1425
+ }]
1426
+ },
1427
+ tiltShift: {
1428
+ type: 'tiltShift',
1429
+ name: 'Blur (Tilt Shift)',
1430
+ description: 'effectDescription.tiltShift',
1431
+ parameters: [{
1432
+ name: 'blurRadius',
1433
+ label: 'Blur',
1434
+ min: 0,
1435
+ max: 50
1436
+ }, {
1437
+ name: 'gradientRadius',
1438
+ label: 'Gradient',
1439
+ min: 0,
1440
+ max: 400
1441
+ }, {
1442
+ name: 'start',
1443
+ type: 'array',
1444
+ label: ['Start', false],
1445
+ defaultValue: [0.0, 0.0],
1446
+ min: 0,
1447
+ max: 1
1448
+ }, {
1449
+ name: 'end',
1450
+ type: 'array',
1451
+ label: ['End', false],
1452
+ defaultValue: [1, 1],
1453
+ min: 0,
1454
+ max: 1
1455
+ }]
1456
+ },
1457
+ edgeWork: {
1458
+ type: 'edgeWork',
1459
+ name: 'Edge work',
1460
+ description: 'effectDescription.edgeWork',
1461
+ parameters: [{
1462
+ name: 'radius',
1463
+ min: 1,
1464
+ max: 50
1465
+ }]
1466
+ },
1467
+ vignette: {
1468
+ type: 'vignette',
1469
+ name: 'Vignette',
1470
+ description: 'effectDescription.vignette',
1471
+ parameters: [{
1472
+ name: 'amount',
1473
+ min: 0,
1474
+ max: 1
1475
+ }, {
1476
+ name: 'radius',
1477
+ min: 0,
1478
+ max: 1
1479
+ }]
1480
+ },
1481
+ magnify: {
1482
+ type: 'magnify',
1483
+ name: 'Magnify',
1484
+ description: 'effectDescription.magnify',
1485
+ parameters: [{
1486
+ name: 'screenXY',
1487
+ type: 'array',
1488
+ label: ['Position X', 'Position Y'],
1489
+ defaultValue: [0.5, 0.5],
1490
+ min: 0,
1491
+ max: 1
1492
+ }, {
1493
+ name: 'radiusPixels',
1494
+ label: 'Size',
1495
+ min: 10,
1496
+ max: 500
1497
+ }, {
1498
+ name: 'zoom',
1499
+ min: 0.5,
1500
+ max: 50
1501
+ }, {
1502
+ name: 'borderWidthPixels',
1503
+ label: 'Border Width',
1504
+ defaultValue: 3,
1505
+ min: 0,
1506
+ max: 50
1507
+ }]
1508
+ },
1509
+ hexagonalPixelate: {
1510
+ type: 'hexagonalPixelate',
1511
+ name: 'Hexagonal Pixelate',
1512
+ description: 'effectDescription.hexagonalPixelate',
1513
+ parameters: [{
1514
+ name: 'scale',
1515
+ defaultValue: 20,
1516
+ min: 1,
1517
+ max: 50
1518
+ }]
1519
+ },
1520
+ distanceFog: {
1521
+ type: DISTANCE_FOG_TYPE,
1522
+ name: 'Distance Fog',
1523
+ description: 'effectDescription.distanceFog',
1524
+ parameters: [{
1525
+ name: 'density',
1526
+ defaultValue: 0.5,
1527
+ min: 0,
1528
+ max: 1
1529
+ }, {
1530
+ name: 'fogStart',
1531
+ label: 'Start',
1532
+ defaultValue: 0.3,
1533
+ min: 0,
1534
+ max: 1
1535
+ }, {
1536
+ name: 'fogRange',
1537
+ label: 'Range',
1538
+ defaultValue: 0.5,
1539
+ min: 0.01,
1540
+ max: 1
1541
+ }, {
1542
+ name: 'fogColor',
1543
+ type: 'color',
1544
+ min: 0,
1545
+ max: 255,
1546
+ defaultValue: [217, 222, 230]
1547
+ }]
1548
+ },
1549
+ surfaceFog: {
1550
+ type: SURFACE_FOG_TYPE,
1551
+ name: 'Surface Fog',
1552
+ description: 'effectDescription.surfaceFog',
1553
+ parameters: [{
1554
+ name: 'density',
1555
+ defaultValue: 0.6,
1556
+ min: 0,
1557
+ max: 1
1558
+ }, {
1559
+ name: 'height',
1560
+ label: 'Elevation (m)',
1561
+ defaultValue: 50,
1562
+ min: -200,
1563
+ max: 6000
1564
+ }, {
1565
+ name: 'animateHeight',
1566
+ type: 'checkbox',
1567
+ label: 'Animate Elevation',
1568
+ tooltip: 'Animates elevation from start to end value during video export preview and recording.',
1569
+ defaultValue: false,
1570
+ min: 0,
1571
+ max: 1
1572
+ }, {
1573
+ name: 'heightEnd',
1574
+ label: 'End Elevation (m)',
1575
+ defaultValue: 100,
1576
+ min: -200,
1577
+ max: 6000
1578
+ }, {
1579
+ name: 'linearEasing',
1580
+ type: 'checkbox',
1581
+ label: 'Linear Easing',
1582
+ tooltip: 'Uses constant speed instead of smooth ease-in / ease-out during elevation animation.',
1583
+ defaultValue: false,
1584
+ min: 0,
1585
+ max: 1
1586
+ }, {
1587
+ name: 'thickness',
1588
+ label: 'Transition (m)',
1589
+ defaultValue: 50,
1590
+ min: 0,
1591
+ max: 1000
1592
+ }, {
1593
+ name: 'fogColor',
1594
+ type: 'color',
1595
+ label: 'Fog Color',
1596
+ min: 0,
1597
+ max: 255,
1598
+ defaultValue: [230, 235, 242]
1599
+ }, {
1600
+ name: 'pattern',
1601
+ type: 'checkbox',
1602
+ label: 'Pattern',
1603
+ tooltip: 'Adds a noise pattern to the fog for a more natural, volumetric look.',
1604
+ defaultValue: false,
1605
+ min: 0,
1606
+ max: 1
1607
+ }]
1608
+ }
1609
+ };
1610
+ export var EFFECT_DESCRIPTIONS = [LIGHT_AND_SHADOW_EFFECT].concat(_toConsumableArray(Object.keys(POSTPROCESSING_EFFECTS).map(function (keyName) {
1611
+ return POSTPROCESSING_EFFECTS[keyName];
1612
+ })));
1613
+ export var SYNC_TIMELINE_MODES = {
1614
+ start: 0,
1615
+ end: 1
1616
+ };
1617
+ export var GEOARROW_METADATA_KEY = 'ARROW:extension:name';
1618
+
1619
+ /**
1620
+ * Enum holding GeoArrow extension type names
1621
+ */
1622
+ export var GEOARROW_EXTENSIONS = /*#__PURE__*/function (GEOARROW_EXTENSIONS) {
1623
+ GEOARROW_EXTENSIONS["POINT"] = "geoarrow.point";
1624
+ GEOARROW_EXTENSIONS["LINESTRING"] = "geoarrow.linestring";
1625
+ GEOARROW_EXTENSIONS["POLYGON"] = "geoarrow.polygon";
1626
+ GEOARROW_EXTENSIONS["MULTIPOINT"] = "geoarrow.multipoint";
1627
+ GEOARROW_EXTENSIONS["MULTILINESTRING"] = "geoarrow.multilinestring";
1628
+ GEOARROW_EXTENSIONS["MULTIPOLYGON"] = "geoarrow.multipolygon";
1629
+ GEOARROW_EXTENSIONS["WKB"] = "geoarrow.wkb";
1630
+ return GEOARROW_EXTENSIONS;
1631
+ }({});
1632
+ export var LOADERS_CDN_VERSION = '4.3.2';
1633
+ export var LOADERS_CDN_URL = 'https://unpkg.com/@loaders.gl';
1634
+ export var getLoaderOptions = function getLoaderOptions() {
1635
+ return {
1636
+ mvt: {
1637
+ workerUrl: "".concat(LOADERS_CDN_URL, "/mvt@").concat(LOADERS_CDN_VERSION, "/dist/mvt-worker.js")
1638
+ },
1639
+ 'quantized-mesh': {
1640
+ workerUrl: "".concat(LOADERS_CDN_URL, "/terrain@").concat(LOADERS_CDN_VERSION, "/dist/quantized-mesh-worker.js")
1641
+ },
1642
+ npy: {
1643
+ workerUrl: "".concat(LOADERS_CDN_URL, "/textures@").concat(LOADERS_CDN_VERSION, "/dist/npy-worker.js")
1644
+ }
1645
+ };
1646
+ };
1647
+ export var CUSTOM_SCENEGRAPH_MODEL_ID = 'custom';
1648
+ var MODELS_BASE_URL = 'https://studio-public-data.foursquare.com/statics/keplergl/3d-models.2022-06-13';
1649
+ export var TRIP_LAYER_SCENEGRAPH_MODELS = [{
1650
+ id: 'airplane',
1651
+ label: 'Airplane',
1652
+ icon: null,
1653
+ url: "".concat(MODELS_BASE_URL, "/Plane.glb"),
1654
+ angles: [0, 0, 0],
1655
+ scale: 1.0
1656
+ }, {
1657
+ id: 'boeing777',
1658
+ label: 'Airliner',
1659
+ icon: null,
1660
+ url: "".concat(MODELS_BASE_URL, "/Airliner.glb"),
1661
+ angles: [0, 0, 0],
1662
+ scale: 1.0
1663
+ }, {
1664
+ id: 'uber-evtol',
1665
+ label: 'VTOL',
1666
+ icon: null,
1667
+ url: "".concat(MODELS_BASE_URL, "/evtol.glb"),
1668
+ angles: [0, 0, 0],
1669
+ scale: 1.0
1670
+ }, {
1671
+ id: 'hang-glider',
1672
+ label: 'Glider',
1673
+ icon: null,
1674
+ url: "".concat(MODELS_BASE_URL, "/Hangglider.glb"),
1675
+ angles: [0, 0, 0],
1676
+ scale: 1.0
1677
+ }, {
1678
+ id: 'helicopter',
1679
+ label: 'Helicopter',
1680
+ icon: null,
1681
+ url: "".concat(MODELS_BASE_URL, "/Helicopter.glb"),
1682
+ angles: [0, 0, 0],
1683
+ scale: 1.0
1684
+ }, {
1685
+ id: 'bicycle',
1686
+ label: 'Bicycle',
1687
+ icon: null,
1688
+ url: "".concat(MODELS_BASE_URL, "/Bicycle.glb"),
1689
+ angles: [0, 0, 0],
1690
+ scale: 1.0
1691
+ }, {
1692
+ id: 'scooter',
1693
+ label: 'Scooter',
1694
+ icon: null,
1695
+ url: "".concat(MODELS_BASE_URL, "/Scooter.glb"),
1696
+ angles: [0, 0, 0],
1697
+ scale: 1.0
1698
+ }, {
1699
+ id: 'car',
1700
+ label: 'Car',
1701
+ icon: null,
1702
+ url: "".concat(MODELS_BASE_URL, "/Car.glb"),
1703
+ angles: [0, 0, 0],
1704
+ scale: 1.0
1705
+ }, {
1706
+ id: 'truck',
1707
+ label: 'Truck',
1708
+ icon: null,
1709
+ url: "".concat(MODELS_BASE_URL, "/Truck.glb"),
1710
+ angles: [0, 0, 0],
1711
+ scale: 1.0
1712
+ }, {
1713
+ id: 'semitruck',
1714
+ label: 'Semitruck',
1715
+ icon: null,
1716
+ url: "".concat(MODELS_BASE_URL, "/Semitruck.glb"),
1717
+ angles: [0, 0, 0],
1718
+ scale: 1.0
1719
+ }, {
1720
+ id: 'cargoship',
1721
+ label: 'Cargoship',
1722
+ icon: null,
1723
+ url: "".concat(MODELS_BASE_URL, "/Cargoship.glb"),
1724
+ angles: [0, 0, 0],
1725
+ scale: 1.0
1726
+ }, {
1727
+ id: CUSTOM_SCENEGRAPH_MODEL_ID,
1728
+ label: 'Custom',
1729
+ icon: null,
1730
+ url: null,
1731
+ angles: [0, 0, 0],
1732
+ scale: 1.0
1733
+ }];
1734
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXlNaXJyb3IiLCJzY2FsZUxpbmVhciIsInNjYWxlTG9nIiwic2NhbGVPcmRpbmFsIiwic2NhbGVQb2ludCIsInNjYWxlUXVhbnRpbGUiLCJzY2FsZVF1YW50aXplIiwic2NhbGVTcXJ0Iiwic2NhbGVUaHJlc2hvbGQiLCJUT09MVElQX0ZPUk1BVF9UWVBFUyIsIkFDVElPTl9QUkVGSVgiLCJLRVBMRVJfVU5GT0xERURfQlVDS0VUIiwiQkFTRU1BUF9JQ09OX1BSRUZJWCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJUUkFOU0lUSU9OX0RVUkFUSU9OIiwiREFUQV9UQUJMRV9JRCIsIkRFTEVURV9EQVRBX0lEIiwiQUREX0RBVEFfSUQiLCJFWFBPUlRfSU1BR0VfSUQiLCJFWFBPUlRfREFUQV9JRCIsIkFERF9NQVBfU1RZTEVfSUQiLCJFWFBPUlRfTUFQX0lEIiwiRVhQT1JUX1ZJREVPX0lEIiwiU0FWRV9NQVBfSUQiLCJPVkVSV1JJVEVfTUFQX0lEIiwiU0hBUkVfTUFQX0lEIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIktFUExFUl9HTF9XRUJTSVRFIiwiRElNRU5TSU9OUyIsInNpZGVQYW5lbCIsIndpZHRoIiwibWFyZ2luIiwidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0IiwiaGVhZGVySGVpZ2h0IiwibWFwQ29udHJvbCIsInBhZGRpbmciLCJtYXBMZWdlbmQiLCJwaW5uZWQiLCJUSEVNRSIsImxpZ2h0IiwiZGFyayIsImJhc2UiLCJTSURFQkFSX1BBTkVMUyIsImlkIiwibGFiZWwiLCJvbkNsaWNrIiwiUEFORUxfVklFV19UT0dHTEVTIiwibGlzdCIsImJ5RGF0YXNldCIsIlBBTkVMUyIsIkRFRkFVTFRfQkxER19DT0xPUiIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUiIsIkJBU0VfTUFQX0JBQ0tHUk9VTkRfTEFZRVJfSURTIiwiQkFDS0dST1VORF9MQVlFUl9HUk9VUF9TTFVHIiwiVEhSRUVfRF9CVUlMRElOR19MQVlFUl9HUk9VUF9TTFVHIiwiQkFDS0dST1VORF9MQVlFUl9HUk9VUCIsInNsdWciLCJmaWx0ZXIiLCJkZWZhdWx0VmlzaWJpbGl0eSIsImlzVmlzaWJpbGl0eVRvZ2dsZUF2YWlsYWJsZSIsImlzTW92ZVRvVG9wQXZhaWxhYmxlIiwiaXNDb2xvclBpY2tlckF2YWlsYWJsZSIsIkRFRkFVTFRfTEFZRVJfR1JPVVBTIiwiX3JlZiIsInR5cGUiLCJtYXRjaCIsIl9yZWYyIiwiX3JlZjMiLCJfcmVmNCIsIl9yZWY1IiwiX3JlZjYiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIk5PTkUiLCJEQVJLIiwiTElHSFQiLCJOT19NQVBfSUQiLCJFTVBUWV9NQVBCT1hfU1RZTEUiLCJ2ZXJzaW9uIiwic291cmNlcyIsImxheWVycyIsIk1BUF9MSUJfT1BUSU9OUyIsIk1BUEJPWCIsIk1BUExJQlJFIiwiTUFQQk9YX01BWF9QSVRDSCIsIk5PX0JBU0VNQVBfSUNPTiIsImNvbmNhdCIsIkRFRkFVTFRfQkFTRV9NQVBfU1RZTEUiLCJERUZBVUxUX05PX0JBU0VNQVBfU1RZTEUiLCJ1cmwiLCJpY29uIiwibGF5ZXJHcm91cHMiLCJjb2xvck1vZGUiLCJzdHlsZSIsIkRFRkFVTFRfTUFQQk9YX1NUWUxFUyIsImNvbXBsaW1lbnRhcnlTdHlsZUlkIiwiREVGQVVMVF9NQVBCT1hfU0FURUxJVEVfU1RZTEVTIiwiREVGQVVMVF9NQVBMSUJSRV9TVFlMRVMiLCJERUZBVUxUX01BUF9TVFlMRVMiLCJHRU9KU09OX0ZJRUxEUyIsImdlb2pzb24iLCJJQ09OX0ZJRUxEUyIsIlRSSVBfUE9JTlRfRklFTERTIiwiQUxUSVRVREVfRklFTERTIiwiVFJJUF9BUkNfRklFTERTIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsIkZJTFRFUl9UWVBFUyIsInJhbmdlIiwic2VsZWN0IiwiaW5wdXQiLCJ0aW1lUmFuZ2UiLCJtdWx0aVNlbGVjdCIsInBvbHlnb24iLCJGSUxURVJfVklFV19UWVBFUyIsInNpZGUiLCJlbmxhcmdlZCIsIm1pbmlmaWVkIiwiREVGQVVMVF9GSUxURVJfVklFV19UWVBFIiwiU0NBTEVfVFlQRVMiLCJvcmRpbmFsIiwicXVhbnRpbGUiLCJxdWFudGl6ZSIsImxpbmVhciIsInNxcnQiLCJsb2ciLCJ0aHJlc2hvbGQiLCJjdXN0b20iLCJjdXN0b21PcmRpbmFsIiwicG9pbnQiLCJTQ0FMRV9UWVBFX05BTUVTIiwiU0NBTEVfRlVOQyIsIl9kZWZpbmVQcm9wZXJ0eSIsIkFMTF9GSUVMRF9UWVBFUyIsImRhdGUiLCJpbnRlZ2VyIiwicmVhbCIsInN0cmluZyIsInRpbWVzdGFtcCIsImFycmF5Iiwib2JqZWN0IiwiZ2VvYXJyb3ciLCJoMyIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJERVNDRU5ESU5HIiwiVU5TT1JUIiwiVEFCTEVfT1BUSU9OIiwiU09SVF9BU0MiLCJTT1JUX0RFUyIsIlBJTiIsIlVOUElOIiwiQ09QWSIsIkZPUk1BVF9DT0xVTU4iLCJUQUJMRV9PUFRJT05fTElTVCIsInZhbHVlIiwiZGlzcGxheSIsImNvbmRpdGlvbiIsInByb3BzIiwic29ydFRhYmxlQ29sdW1uIiwic29ydE1vZGUiLCJpc1NvcnRlZCIsImlzUGlubmVkIiwic2V0RGlzcGxheUZvcm1hdCIsIllFTExPVyIsIlBJTksiLCJQVVJQTEUiLCJCTFVFIiwiQkxVRTIiLCJCTFVFMyIsIkdSRUVOIiwiR1JFRU4yIiwiUkVEIiwiT1JBTkdFIiwiRklFTERfVFlQRV9ESVNQTEFZIiwiX0ZJRUxEX1RZUEVfRElTUExBWSIsImNvbG9yIiwiRklFTERfQ09MT1JTIiwiSElHSExJR0hfQ09MT1JfM0QiLCJDSEFOTkVMX1NDQUxFUyIsInJhZGl1cyIsInNpemUiLCJjb2xvckFnZ3IiLCJzaXplQWdnciIsImFuZ2xlIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJjb3VudCIsImF2ZXJhZ2UiLCJtYXhpbXVtIiwibWluaW11bSIsIm1lZGlhbiIsInN0ZGV2Iiwic3VtIiwidmFyaWFuY2UiLCJtb2RlIiwiY291bnRVbmlxdWUiLCJBR0dSRUdBVElPTl9UWVBFX09QVElPTlMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiX3JlZjciLCJfcmVmOCIsIl9zbGljZWRUb0FycmF5Iiwia2V5IiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnMiLCJERUZBVUxUX0FHR1JFR0FUSU9OX0NPTE9SX1NDQUxFUyIsImxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwicmVkdWNlIiwicHJldiIsImN1ciIsIm9yZGluYWxGaWVsZFNjYWxlRnVuY3Rpb25zIiwib3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwibm90U3VwcG9ydGVkU2NhbGVPcHRzIiwibm90U3VwcG9ydEFnZ3JPcHRzIiwiREVGQVVMVF9BR0dSRUdBVElPTiIsIkZJRUxEX09QVFMiLCJfRklFTERfT1BUUyIsInNjYWxlIiwiX29iamVjdFNwcmVhZCIsImZvcm1hdCIsImxlZ2VuZCIsImQiLCJ0b29sdGlwIiwiREVDSU1BTCIsIlBFUkNFTlRBR0UiLCJEQVRFIiwiREFURV9USU1FIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiQk9PTEVBTiIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsImtleXMiLCJhY2N1IiwiZnQiLCJsZW5ndGgiLCJERUZBVUxUX0xBWUVSX0NPTE9SIiwidHJpcEFyYyIsImJlZ2ludHJpcF9sYXQiLCJkcm9wb2ZmX2xhdCIsInJlcXVlc3RfbGF0IiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFIiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTIiwiREVGQVVMVF9UT09MVElQX0ZJRUxEUyIsIk5PX1ZBTFVFX0NPTE9SIiwiTUlTU0lOR19WQUxVRV9DT0xPUiIsIkRFRkFVTFRfUElDS0lOR19SQURJVVMiLCJPVkVSTEFZX0JMRU5ESU5HUyIsIm5vcm1hbCIsInNjcmVlbiIsImRhcmtlbiIsIkxBWUVSX0JMRU5ESU5HUyIsImFkZGl0aXZlIiwiYmxlbmRGdW5jIiwiYmxlbmRFcXVhdGlvbiIsInN1YnRyYWN0aXZlIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJSRVNPTFVUSU9OUyIsIk9ORV9YIiwiVFdPX1giLCJFWFBPUlRfSU1HX1JBVElPUyIsIlNDUkVFTiIsIkZPVVJfQllfVEhSRUUiLCJTSVhURUVOX0JZX05JTkUiLCJDVVNUT00iLCJTY3JlZW5SYXRpb09wdGlvbiIsImdldFNpemUiLCJzY3JlZW5XIiwic2NyZWVuSCIsImhlaWdodCIsIkN1c3RvbVJhdGlvT3B0aW9uIiwiaGlkZGVuIiwibWFwVyIsIm1hcEgiLCJGb3VyQnlUaHJlZVJhdGlvT3B0aW9uIiwiTWF0aCIsInJvdW5kIiwiU2l4dGVlbkJ5TmluZVJhdGlvT3B0aW9uIiwiRVhQT1JUX0lNR19SQVRJT19PUFRJT05TIiwiT25lWFJlc29sdXRpb25PcHRpb24iLCJhdmFpbGFibGUiLCJUd29YUmVzb2x1dGlvbk9wdGlvbiIsIlJlc29sdXRpb24xOTIweDEwODBPcHRpb24iLCJSZXNvbHV0aW9uMTI4MHg3MjBPcHRpb24iLCJSZXNvbHV0aW9uMjU2MHgxNDQwT3B0aW9uIiwiUmVzb2x1dGlvbjE2MDB4OTAwT3B0aW9uIiwiUmVzb2x1dGlvbjEwMjR4NzY4T3B0aW9uIiwiUmVzb2x1dGlvbjEyODB4OTYwT3B0aW9uIiwiUmVzb2x1dGlvbjE2MDB4MTIwME9wdGlvbiIsIlJlc29sdXRpb24xOTIweDE0NDBPcHRpb24iLCJFWFBPUlRfSU1HX1JFU09MVVRJT05fT1BUSU9OUyIsIkVYUE9SVF9EQVRBX1RZUEUiLCJDU1YiLCJFWFBPUlRfREFUQV9UWVBFX09QVElPTlMiLCJ0b0xvd2VyQ2FzZSIsIkVYUE9SVF9NQVBfRk9STUFUUyIsIkhUTUwiLCJKU09OIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkVESVQiLCJFWFBPUlRfTUFQX0ZPUk1BVF9PUFRJT05TIiwiZW50cnkiLCJnZXRIVE1MTWFwTW9kZVRpbGVVcmwiLCJFWFBPUlRfSFRNTF9NQVBfTU9ERV9PUFRJT05TIiwiREVGQVVMVF9VVUlEX0NPVU5UIiwiREVGQVVMVF9OT1RJRklDQVRJT05fTUVTU0FHRSIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RZUEVTIiwiaW5mbyIsImVycm9yIiwid2FybmluZyIsInN1Y2Nlc3MiLCJERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MiLCJnbG9iYWwiLCJmaWxlIiwiVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUiLCJCQVNFX1NQRUVEIiwiRlBTIiwiQU5JTUFUSU9OX1dJTkRPVyIsImZyZWUiLCJpbmNyZW1lbnRhbCIsImludGVydmFsIiwiREVGQVVMVF9USU1FX0ZPUk1BVCIsIlNQRUVEX0NPTlRST0xfUkFOR0UiLCJTUEVFRF9DT05UUk9MX1NURVAiLCJHRU9DT0RFUl9EQVRBU0VUX05BTUUiLCJHRU9DT0RFUl9MQVlFUl9JRCIsIkdFT0NPREVSX0dFT19PRkZTRVQiLCJHRU9DT0RFUl9JQ09OX0NPTE9SIiwiR0VPQ09ERVJfSUNPTl9TSVpFIiwiRURJVE9SX0xBWUVSX0lEIiwiRURJVE9SX0xBWUVSX1BJQ0tJTkdfUkFESVVTIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiRFJBV19SRUNUQU5HTEUiLCJEUkFXX0NJUkNMRSIsIkRSQVdfTElORVNUUklORyIsIkRSQVdfUE9JTlQiLCJFRElUT1JfRFJBV19NT0RFUyIsIlBMT1RfVFlQRVMiLCJoaXN0b2dyYW0iLCJsaW5lQ2hhcnQiLCJJTklUX0ZJTFRFUl9JVEVNU19JTl9EUk9QRE9XTiIsIk1BWF9HUFVfRklMVEVSUyIsIk1BUF9USFVNQk5BSUxfRElNRU5TSU9OIiwiTUFQX0lORk9fQ0hBUkFDVEVSIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIkxPQURJTkdfTUVUSE9EUyIsInVwbG9hZCIsInN0b3JhZ2UiLCJ0aWxlc2V0IiwiREVGQVVMVF9GRUFUVVJFX0ZMQUdTIiwiREFUQVNFVF9GT1JNQVRTIiwicm93IiwiY3N2Iiwia2VwbGVyZ2wiLCJhcnJvdyIsImR1Y2tkYiIsIk1BUF9DT05UUk9MUyIsInZpc2libGVMYXllcnMiLCJ0b2dnbGUzZCIsInNwbGl0TWFwIiwibWFwRHJhdyIsIm1hcExvY2FsZSIsIm1hcFRoZW1lIiwiZWZmZWN0IiwiYW5ub3RhdGlvbiIsIk1hcFZpZXdNb2RlIiwiR0xPQkVfTUlOX1pPT00iLCJHTE9CRV9NQVhfWk9PTSIsIkdMT0JFX01BWF9MQVRJVFVERSIsIkRFRkFVTFRfR0xPQkVfQ09ORklHIiwiYXRtb3NwaGVyZSIsImh1Z2VIYWxvIiwiaHVnZUhhbG9SYWRpdXMiLCJodWdlSGFsb09wYWNpdHkiLCJhemltdXRoIiwiYXppbXV0aEFuZ2xlIiwidGVybWluYXRvciIsInRlcm1pbmF0b3JPcGFjaXR5IiwiYmFzZW1hcCIsImxhYmVscyIsImxhYmVsc0NvbG9yIiwiYWRtaW5MaW5lcyIsImFkbWluTGluZXNDb2xvciIsIndhdGVyIiwid2F0ZXJDb2xvciIsInN1cmZhY2UiLCJzdXJmYWNlQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJzdGFycyIsIkdMT0JFX1NVUFBPUlRFRF9MQVlFUlMiLCJhcmMiLCJncmlkIiwiaGV4YWdvbiIsImNsdXN0ZXIiLCJoZXhhZ29uSWQiLCJ2ZWN0b3JUaWxlIiwiaGV4VGlsZSIsImxpbmUiLCJ0cmlwIiwicmFzdGVyVGlsZSIsImhlYXRtYXAiLCJzMiIsInRpbGUzZCIsImZsb3ciLCJNYXBTcGxpdE1vZGUiLCJQUk9KRUNURURfUElYRUxfU0laRV9NVUxUSVBMSUVSIiwiVEVYVF9PVVRMSU5FX01VTFRJUExJRVIiLCJkYXRhVGVzdElkcyIsImluZm9JY29uIiwid2FybmluZ0ljb24iLCJlcnJvckljb24iLCJzdWNjZXNzSWNvbiIsImNoZWNrbWFya0ljb24iLCJjb3B5Tm90aWZpY2F0aW9uSWNvbiIsInNvcnRhYmxlTGF5ZXJJdGVtIiwic3RhdGljTGF5ZXJJdGVtIiwibGF5ZXJUaXRsZUVkaXRvciIsInJlbW92ZUxheWVyQWN0aW9uIiwibGF5ZXJQYW5lbCIsInNvcnRhYmxlRWZmZWN0SXRlbSIsInN0YXRpY0VmZmVjdEl0ZW0iLCJwcm92aWRlckxvYWRpbmciLCJwcm92aWRlck1hcEluZm9QYW5lbCIsInByb3ZpZGVyU2VsZWN0IiwiY2xvdWRIZWFkZXIiLCJwcm92aWRlclNoYXJlTWFwIiwiREVGQVVMVF9USU1FWk9ORSIsIkRFRkFVTFRfUE9TVF9QUk9DRVNTSU5HX0VGRkVDVF9UWVBFIiwiREVGQVVMVF9MSUdIVF9DT0xPUiIsIkRFRkFVTFRfTElHSFRfSU5URU5TSVRZIiwiREVGQVVMVF9TSEFET1dfSU5URU5TSVRZIiwiREVGQVVMVF9TSEFET1dfQ09MT1IiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTIiwicGljayIsImN1cnJlbnQiLCJhbmltYXRpb24iLCJERUZBVUxUX0xJR0hUX0FORF9TSEFET1dfUFJPUFMiLCJEYXRlIiwibm93IiwidGltZU1vZGUiLCJzaGFkb3dJbnRlbnNpdHkiLCJzaGFkb3dDb2xvciIsInN1bkxpZ2h0Q29sb3IiLCJzdW5MaWdodEludGVuc2l0eSIsImFtYmllbnRMaWdodENvbG9yIiwiYW1iaWVudExpZ2h0SW50ZW5zaXR5IiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJuYW1lIiwicGFyYW1ldGVycyIsIm1pbiIsIm1heCIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJkZWZhdWx0VmFsdWUiLCJESVNUQU5DRV9GT0dfVFlQRSIsIlNVUkZBQ0VfRk9HX1RZUEUiLCJQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTIiwiaW5rIiwiYnJpZ2h0bmVzc0NvbnRyYXN0IiwiaHVlU2F0dXJhdGlvbiIsInZpYnJhbmNlIiwic2VwaWEiLCJkb3RTY3JlZW4iLCJQSSIsImNvbG9ySGFsZnRvbmUiLCJub2lzZSIsInRyaWFuZ2xlQmx1ciIsInpvb21CbHVyIiwidGlsdFNoaWZ0IiwiZWRnZVdvcmsiLCJ2aWduZXR0ZSIsIm1hZ25pZnkiLCJoZXhhZ29uYWxQaXhlbGF0ZSIsImRpc3RhbmNlRm9nIiwic3VyZmFjZUZvZyIsIkVGRkVDVF9ERVNDUklQVElPTlMiLCJrZXlOYW1lIiwiU1lOQ19USU1FTElORV9NT0RFUyIsInN0YXJ0IiwiZW5kIiwiR0VPQVJST1dfTUVUQURBVEFfS0VZIiwiR0VPQVJST1dfRVhURU5TSU9OUyIsIkxPQURFUlNfQ0ROX1ZFUlNJT04iLCJMT0FERVJTX0NETl9VUkwiLCJnZXRMb2FkZXJPcHRpb25zIiwibXZ0Iiwid29ya2VyVXJsIiwibnB5IiwiQ1VTVE9NX1NDRU5FR1JBUEhfTU9ERUxfSUQiLCJNT0RFTFNfQkFTRV9VUkwiLCJUUklQX0xBWUVSX1NDRU5FR1JBUEhfTU9ERUxTIiwiYW5nbGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlZmF1bHQtc2V0dGluZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGtleU1pcnJvciBmcm9tICdrZXltaXJyb3InO1xuXG5pbXBvcnQge1xuICBCYXNlTWFwU3R5bGUsXG4gIEVmZmVjdERlc2NyaXB0aW9uLFxuICBSR0JBQ29sb3IsXG4gIFN5bmNUaW1lbGluZU1vZGUsXG4gIEJhc2VNYXBDb2xvck1vZGVzLFxuICBNZXJnZVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIHNjYWxlTGluZWFyLFxuICBzY2FsZUxvZyxcbiAgc2NhbGVPcmRpbmFsLFxuICBzY2FsZVBvaW50LFxuICBzY2FsZVF1YW50aWxlLFxuICBzY2FsZVF1YW50aXplLFxuICBzY2FsZVNxcnQsXG4gIHNjYWxlVGhyZXNob2xkXG59IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7VE9PTFRJUF9GT1JNQVRfVFlQRVN9IGZyb20gJy4vdG9vbHRpcCc7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fUFJFRklYID0gJ0BAa2VwbGVyLmdsLyc7XG5leHBvcnQgY29uc3QgS0VQTEVSX1VORk9MREVEX0JVQ0tFVCA9ICdodHRwczovL3N0dWRpby1wdWJsaWMtZGF0YS5mb3Vyc3F1YXJlLmNvbS9zdGF0aWNzL2tlcGxlcmdsJztcbmV4cG9ydCBjb25zdCBCQVNFTUFQX0lDT05fUFJFRklYID0gYGdlb2R1ZGVgO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwgPSAnaHR0cHM6Ly9hcGkubWFwYm94LmNvbSc7XG5leHBvcnQgY29uc3QgVFJBTlNJVElPTl9EVVJBVElPTiA9IDA7XG5cbi8vIE1vZGFsIElkc1xuLyoqXG4gKiBNb2RhbCBpZDogZGF0YSB0YWJsZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREFUQV9UQUJMRV9JRCA9ICdkYXRhVGFibGUnO1xuLyoqXG4gKiBNb2RhbCBpZDogZGVsZXRlIGRhdGFzZXQgY29uZmlybSBkaWFsb2dcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFTEVURV9EQVRBX0lEID0gJ2RlbGV0ZURhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogYWRkIGRhdGEgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEFERF9EQVRBX0lEID0gJ2FkZERhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IGltYWdlIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRfSU1BR0VfSUQgPSAnZXhwb3J0SW1hZ2UnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IGRhdGEgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX0lEID0gJ2V4cG9ydERhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogYWRkIGN1c3RvbSBtYXAgc3R5bGUgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEFERF9NQVBfU1RZTEVfSUQgPSAnYWRkTWFwU3R5bGUnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IG1hcCBtb2RhbFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRVhQT1JUX01BUF9JRCA9ICdleHBvcnRNYXAnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IHZpZGVvIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRfVklERU9fSUQgPSAnZXhwb3J0VmlkZW8nO1xuLyoqXG4gKiBNb2RhbCBpZDogc2F2ZSBtYXAgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IFNBVkVfTUFQX0lEID0gJ3NhdmVNYXAnO1xuLyoqXG4gKiBNb2RhbCBpZDogY29uZmlybSB0byBvdmVyd3JpdGUgc2F2ZWQgbWFwXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBPVkVSV1JJVEVfTUFQX0lEID0gJ292ZXJ3cml0ZU1hcCc7XG4vKipcbiAqIE1vZGFsIGlkOiBzaGFyZSBtYXAgdXJsIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBTSEFSRV9NQVBfSUQgPSAnc2hhcmVNYXAnO1xuXG5leHBvcnQgY29uc3QgS0VQTEVSX0dMX05BTUUgPSAna2VwbGVyLmdsJztcblxuLy8gX19QQUNLQUdFX1ZFUlNJT05fXyBpcyBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGJ5IEJhYmVsL0VzYnVpbGQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzXG4vLyBTaW5jZSB3ZSBhcmUgaW5qZWN0aW5nIHRoaXMgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpdGggYmFiZWxcbi8vIHdoaWxlIGRldmVsb3BpbmcgVkVSU0lPTiBpcyBub3QgZGVmaW5lZCwgd2UgY2FwdHVyZSB0aGUgZXhjZXB0aW9uIGFuZCByZXR1cm5cbi8vIGFuIGVtcHR5IHN0cmluZyB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHJldHJpZXZlIHRoZSBsYXRlc3QgdW1kIHZlcnNpb25cbmV4cG9ydCBjb25zdCBLRVBMRVJfR0xfVkVSU0lPTiA9ICdfX1BBQ0tBR0VfVkVSU0lPTl9fJztcbmV4cG9ydCBjb25zdCBLRVBMRVJfR0xfV0VCU0lURSA9ICdodHRwOi8va2VwbGVyLmdsLyc7XG5cbmV4cG9ydCBjb25zdCBESU1FTlNJT05TID0ge1xuICBzaWRlUGFuZWw6IHtcbiAgICB3aWR0aDogMzAwLFxuICAgIG1hcmdpbjoge3RvcDogMTIsIGxlZnQ6IDEyLCBib3R0b206IDEyLCByaWdodDogMjB9LFxuICAgIGhlYWRlckhlaWdodDogOTZcbiAgfSxcbiAgbWFwQ29udHJvbDoge1xuICAgIHdpZHRoOiAxODQsXG4gICAgcGFkZGluZzogMTIsXG4gICAgbWFwTGVnZW5kOiB7XG4gICAgICBwaW5uZWQ6IHtcbiAgICAgICAgYm90dG9tOiAyMixcbiAgICAgICAgcmlnaHQ6IDEyXG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFRoZW1lIG5hbWUgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGBLZXBsZXJHbGAgYHByb3AudGhlbWVgLlxuICogQXZhaWxhYmxlIHRoZW1lcyBhcmUgYFRIRU1FLmxpZ2h0YCBhbmQgYFRIRU1FLmRhcmtgLiBEZWZhdWx0IHRoZW1lIGlzIGBUSEVNRS5kYXJrYFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7b2JqZWN0fVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBjb25zdCBNYXAgPSAoKSA9PiA8S2VwbGVyR2wgdGhlbWU9e1RIRU1FLmxpZ2h0fSBpZD1cIm1hcFwiLz5cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgVEhFTUUgPSBrZXlNaXJyb3Ioe1xuICBsaWdodDogbnVsbCxcbiAgZGFyazogbnVsbCxcbiAgYmFzZTogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBTSURFQkFSX1BBTkVMUyA9IFtcbiAge1xuICAgIGlkOiAnbGF5ZXInLFxuICAgIGxhYmVsOiAnc2lkZWJhci5wYW5lbHMubGF5ZXInLFxuICAgIG9uQ2xpY2s6IG51bGxcbiAgfSxcbiAge1xuICAgIGlkOiAnZmlsdGVyJyxcbiAgICBsYWJlbDogJ3NpZGViYXIucGFuZWxzLmZpbHRlcicsXG4gICAgb25DbGljazogbnVsbFxuICB9LFxuICB7XG4gICAgaWQ6ICdpbnRlcmFjdGlvbicsXG4gICAgbGFiZWw6ICdzaWRlYmFyLnBhbmVscy5pbnRlcmFjdGlvbicsXG4gICAgb25DbGljazogbnVsbFxuICB9LFxuICB7XG4gICAgaWQ6ICdtYXAnLFxuICAgIGxhYmVsOiAnc2lkZWJhci5wYW5lbHMuYmFzZW1hcCcsXG4gICAgb25DbGljazogbnVsbFxuICB9XG5dO1xuXG5leHBvcnQgY29uc3QgUEFORUxfVklFV19UT0dHTEVTID0ga2V5TWlycm9yKHtcbiAgbGlzdDogbnVsbCxcbiAgYnlEYXRhc2V0OiBudWxsXG59KTtcblxuLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IGNvbnN0IFBBTkVMUyA9IFNJREVCQVJfUEFORUxTO1xuXG4vLyBNQVAgU1RZTEVTXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JMREdfQ09MT1IgPSAnI0QxQ0VDNyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSAnIzAwMDAwMCc7XG5cbi8vIGFzc2lzdHMgaW4gaWRlbnRpZnlpbmcgYmFzZW1hcCBiYWNrZ3JvdW5kIGxheWVycyB3aGVuIGF1dG8tZGV0ZXJtaW5pbmcgdGhlIGJhY2tncm91bmRDb2xvclxuZXhwb3J0IGNvbnN0IEJBU0VfTUFQX0JBQ0tHUk9VTkRfTEFZRVJfSURTID0gWydiYWNrZ3JvdW5kJywgJ2JnJywgJ2xhbmQnLCAnd2F0ZXInXTtcblxuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVBfU0xVRyA9ICdCYWNrZ3JvdW5kJztcblxuZXhwb3J0IGNvbnN0IFRIUkVFX0RfQlVJTERJTkdfTEFZRVJfR1JPVVBfU0xVRyA9ICczZCBidWlsZGluZyc7XG5cbmV4cG9ydCB0eXBlIERFRkFVTFRfTEFZRVJfR1JPVVAgPSB7XG4gIHNsdWc6IHN0cmluZztcbiAgZmlsdGVyOiAodmFsdWUpID0+IGJvb2xlYW47XG4gIGRlZmF1bHRWaXNpYmlsaXR5OiBib29sZWFuO1xuICBpc1Zpc2liaWxpdHlUb2dnbGVBdmFpbGFibGU/OiBib29sZWFuO1xuICBpc01vdmVUb1RvcEF2YWlsYWJsZT86IGJvb2xlYW47XG4gIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVA6IERFRkFVTFRfTEFZRVJfR1JPVVAgPSB7XG4gIHNsdWc6IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVBfU0xVRyxcbiAgZmlsdGVyOiAoKSA9PiBmYWxzZSxcbiAgZGVmYXVsdFZpc2liaWxpdHk6IGZhbHNlLFxuICBpc1Zpc2liaWxpdHlUb2dnbGVBdmFpbGFibGU6IGZhbHNlLFxuICBpc01vdmVUb1RvcEF2YWlsYWJsZTogZmFsc2UsXG4gIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0dST1VQUzogREVGQVVMVF9MQVlFUl9HUk9VUFtdID0gW1xuICB7XG4gICAgc2x1ZzogJ2xhYmVsJyxcbiAgICBmaWx0ZXI6ICh7aWQsIHR5cGV9KSA9PiBpZC5tYXRjaCgvKD89KGxhYmVsfHBsYWNlLXxwb2ktKSkvKSB8fCB0eXBlPy5tYXRjaCgvKD89KHN5bWJvbCkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAncm9hZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PShyb2FkfHJhaWx3YXl8dHVubmVsfHN0cmVldHxicmlkZ2UpKSg/IS4qbGFiZWwpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYm9yZGVyJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvYm9yZGVyfGJvdW5kYXJpZXN8Ym91bmRhcnkvKSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogZmFsc2UsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYnVpbGRpbmcnLFxuICAgIGZpbHRlcjogKHtpZH0pID0+IGlkLm1hdGNoKC9idWlsZGluZy8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlLFxuICAgIGlzVmlzaWJpbGl0eVRvZ2dsZUF2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc01vdmVUb1RvcEF2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc0NvbG9yUGlja2VyQXZhaWxhYmxlOiBmYWxzZVxuICB9LFxuICB7XG4gICAgc2x1ZzogJ3dhdGVyJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvKD89KHdhdGVyfHN0cmVhbXxmZXJyeSkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnbGFuZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PShwYXJrc3xsYW5kY292ZXJ8aW5kdXN0cmlhbHxzYW5kfGhpbGxzaGFkZSkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiBUSFJFRV9EX0JVSUxESU5HX0xBWUVSX0dST1VQX1NMVUcsXG4gICAgZmlsdGVyOiAoKSA9PiBmYWxzZSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogZmFsc2UsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IHRydWVcbiAgfVxuXTtcblxuZXhwb3J0IGNvbnN0IEJBU0VfTUFQX0NPTE9SX01PREVTID0ga2V5TWlycm9yKHtcbiAgTk9ORTogbnVsbCxcbiAgREFSSzogbnVsbCxcbiAgTElHSFQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgTk9fTUFQX0lEID0gJ25vX21hcCc7XG5cbi8vIEZhbGxiYWNrIHN0eWxlIHRvIHVzZSB3aGVuIHN0eWxlcyBhcmUgYmVpbmcgZmV0Y2hlZCwgb3Igd2hlblxuLy8gYSBzdHlsZSBmYWlscyB0byBmZXRjaFxuZXhwb3J0IGNvbnN0IEVNUFRZX01BUEJPWF9TVFlMRSA9IHtcbiAgdmVyc2lvbjogOCxcbiAgc291cmNlczoge30sXG4gIGxheWVyczogW11cbn07XG5cbmV4cG9ydCBjb25zdCBNQVBfTElCX09QVElPTlMgPSB7XG4gIE1BUEJPWDogJ21hcGJveCcgYXMgY29uc3QsXG4gIE1BUExJQlJFOiAnbWFwbGlicmUnIGFzIGNvbnN0XG59O1xuXG4vKiogTWFwYm94IEdMIEpTIGRvZXMgbm90IHN1cHBvcnQgcGl0Y2ggYWJvdmUgNjAgZGVncmVlcyAqL1xuZXhwb3J0IGNvbnN0IE1BUEJPWF9NQVhfUElUQ0ggPSA2MDtcblxuZXhwb3J0IHR5cGUgQmFzZU1hcExpYnJhcnlUeXBlID0gJ21hcGJveCcgfCAnbWFwbGlicmUnO1xuXG5leHBvcnQgY29uc3QgTk9fQkFTRU1BUF9JQ09OID0gYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vTk9fQkFTRU1BUC5wbmdgO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9CQVNFX01BUF9TVFlMRSA9ICdkYXJrLW1hdHRlcic7XG5cbnR5cGUgRGVmYXVsdEJhc2VNYXBTdHlsZSA9IE1lcmdlPFxuICBCYXNlTWFwU3R5bGUsXG4gIHtcbiAgICBjb2xvck1vZGU6IEJhc2VNYXBDb2xvck1vZGVzO1xuICB9XG4+O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT19CQVNFTUFQX1NUWUxFOiBEZWZhdWx0QmFzZU1hcFN0eWxlID0ge1xuICBpZDogTk9fTUFQX0lELFxuICBsYWJlbDogJ05vIEJhc2VtYXAnLFxuICB1cmw6ICcnLFxuICBpY29uOiBOT19CQVNFTUFQX0lDT04sXG4gIGxheWVyR3JvdXBzOiBbQkFDS0dST1VORF9MQVlFUl9HUk9VUF0sXG4gIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuTk9ORSxcbiAgc3R5bGU6IEVNUFRZX01BUEJPWF9TVFlMRVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQQk9YX1NUWUxFUzogRGVmYXVsdEJhc2VNYXBTdHlsZVtdID0gW1xuICB7XG4gICAgaWQ6ICdkYXJrJyxcbiAgICBsYWJlbDogJ0RhcmsnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jam9xYmJmNmw5azMwMnNsOTZ0eXZrYTA5JyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX0RBUktfVjIucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLLFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnbGlnaHQnXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xpZ2h0JyxcbiAgICBsYWJlbDogJ0xpZ2h0JyxcbiAgICB1cmw6ICdtYXBib3g6Ly9zdHlsZXMvdWJlcmRhdGEvY2pvcWI5ajMzOWsxZjJzbDl0NWljNWJuNCcsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVUJFUl9MSUdIVF9WMi5wbmdgLFxuICAgIGxheWVyR3JvdXBzOiBERUZBVUxUX0xBWUVSX0dST1VQUyxcbiAgICBjb2xvck1vZGU6IEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hULFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnZGFyaydcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTGlnaHQnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jamZ5bDAza3AxdHVsMnNtZjV2MnRiZGQ0JyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX01VVEVEX0xJR0hULnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQsXG4gICAgY29tcGxpbWVudGFyeVN0eWxlSWQ6ICdtdXRlZF9uaWdodCdcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWRfbmlnaHQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTmlnaHQnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jamZ4aGxpa21hajFiMnNveXpldm55d2dzJyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX01VVEVEX05JR0hULnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSyxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ211dGVkJ1xuICB9XG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBCT1hfU0FURUxJVEVfU1RZTEVTOiBEZWZhdWx0QmFzZU1hcFN0eWxlW10gPSBbXG4gIHtcbiAgICBpZDogJ3NhdGVsbGl0ZScsXG4gICAgbGFiZWw6ICdTYXRlbGxpdGUgd2l0aCBzdHJlZXRzJyxcbiAgICB1cmw6IGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS1zdHJlZXRzLXYxMWAsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVUJFUl9TQVRFTExJVEUucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5OT05FXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUExJQlJFX1NUWUxFUzogRGVmYXVsdEJhc2VNYXBTdHlsZVtdID0gW1xuICB7XG4gICAgaWQ6ICdkYXJrLW1hdHRlcicsXG4gICAgbGFiZWw6ICdEYXJrTWF0dGVyJyxcbiAgICB1cmw6ICdodHRwczovL2Jhc2VtYXBzLmNhcnRvY2RuLmNvbS9nbC9kYXJrLW1hdHRlci1nbC1zdHlsZS9zdHlsZS5qc29uJyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9EQVJLTUFUVEVSLnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSyxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ3Bvc2l0cm9uJ1xuICB9LFxuICB7XG4gICAgaWQ6ICdwb3NpdHJvbicsXG4gICAgbGFiZWw6ICdQb3NpdHJvbicsXG4gICAgdXJsOiAnaHR0cHM6Ly9iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vZ2wvcG9zaXRyb24tZ2wtc3R5bGUvc3R5bGUuanNvbicsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vUE9TSVRST04ucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVCxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ2RhcmstbWF0dGVyJ1xuICB9LFxuICB7XG4gICAgaWQ6ICd2b3lhZ2VyJyxcbiAgICBsYWJlbDogJ1ZveWFnZXInLFxuICAgIHVybDogJ2h0dHBzOi8vYmFzZW1hcHMuY2FydG9jZG4uY29tL2dsL3ZveWFnZXItZ2wtc3R5bGUvc3R5bGUuanNvbicsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVk9ZQUdFUi5wbmdgLFxuICAgIGxheWVyR3JvdXBzOiBERUZBVUxUX0xBWUVSX0dST1VQUyxcbiAgICBjb2xvck1vZGU6IEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hULFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnZGFyay1tYXR0ZXInXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUF9TVFlMRVMgPSBbXG4gIERFRkFVTFRfTk9fQkFTRU1BUF9TVFlMRSxcbiAgLi4uREVGQVVMVF9NQVBMSUJSRV9TVFlMRVMsXG4gIC4uLkRFRkFVTFRfTUFQQk9YX1NBVEVMSVRFX1NUWUxFUyxcbiAgLi4uREVGQVVMVF9NQVBCT1hfU1RZTEVTXG5dO1xuXG5leHBvcnQgY29uc3QgR0VPSlNPTl9GSUVMRFMgPSB7XG4gIGdlb2pzb246IFsnX2dlb2pzb24nLCAnYWxsX3BvaW50cycsICdnZW9qc29uJ11cbn07XG5cbmV4cG9ydCBjb25zdCBJQ09OX0ZJRUxEUyA9IHtcbiAgaWNvbjogWydpY29uJ11cbn07XG5cbmV4cG9ydCBjb25zdCBUUklQX1BPSU5UX0ZJRUxEUzogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICBbJ2xhdCcsICdsbmcnXSxcbiAgWydsYXQnLCAnbG9uJ10sXG4gIFsnbGF0JywgJ2xvbmcnXSxcbiAgWydsYXRpdHVkZScsICdsb25naXR1ZGUnXVxuXTtcblxuZXhwb3J0IGNvbnN0IEFMVElUVURFX0ZJRUxEUyA9IFsnYWx0JywgJ2FsdGl0dWRlJ107XG5leHBvcnQgY29uc3QgVFJJUF9BUkNfRklFTERTID0ge1xuICBsYXQwOiAnYmVnaW50cmlwJyxcbiAgbG5nMDogJ2JlZ2ludHJpcCcsXG4gIGxhdDE6ICdkcm9wb2ZmJyxcbiAgbG5nMTogJ2Ryb3BvZmYnXG59O1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgcmFuZ2U6IG51bGwsXG4gIHNlbGVjdDogbnVsbCxcbiAgaW5wdXQ6IG51bGwsXG4gIHRpbWVSYW5nZTogbnVsbCxcbiAgbXVsdGlTZWxlY3Q6IG51bGwsXG4gIHBvbHlnb246IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1ZJRVdfVFlQRVMgPSBrZXlNaXJyb3Ioe1xuICBzaWRlOiBudWxsLFxuICBlbmxhcmdlZDogbnVsbCxcbiAgbWluaWZpZWQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxURVJfVklFV19UWVBFID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcblxuZXhwb3J0IHR5cGUgU0NBTEVfVFlQRVNfREVGID0ge1xuICBvcmRpbmFsOiAnb3JkaW5hbCc7XG4gIHF1YW50aWxlOiAncXVhbnRpbGUnO1xuICBxdWFudGl6ZTogJ3F1YW50aXplJztcbiAgbGluZWFyOiAnbGluZWFyJztcbiAgc3FydDogJ3NxcnQnO1xuICBsb2c6ICdsb2cnO1xuICBwb2ludDogJ3BvaW50JztcbiAgdGhyZXNob2xkOiAndGhyZXNob2xkJztcbiAgY3VzdG9tOiAnY3VzdG9tJztcbiAgY3VzdG9tT3JkaW5hbDogJ2N1c3RvbU9yZGluYWwnO1xufTtcblxuZXhwb3J0IGNvbnN0IFNDQUxFX1RZUEVTOiBTQ0FMRV9UWVBFU19ERUYgPSBrZXlNaXJyb3Ioe1xuICBvcmRpbmFsOiBudWxsLFxuICBxdWFudGlsZTogbnVsbCxcbiAgcXVhbnRpemU6IG51bGwsXG4gIGxpbmVhcjogbnVsbCxcbiAgc3FydDogbnVsbCxcbiAgbG9nOiBudWxsLFxuICB0aHJlc2hvbGQ6IG51bGwsXG4gIGN1c3RvbTogbnVsbCxcbiAgY3VzdG9tT3JkaW5hbDogbnVsbCxcbiAgLy8gb3JkaW5hbCBkb21haW4gdG8gbGluZWFyIHJhbmdlXG4gIHBvaW50OiBudWxsXG59KTtcbmV4cG9ydCBjb25zdCBTQ0FMRV9UWVBFX05BTUVTOiB7W2tleSBpbiBrZXlvZiBTQ0FMRV9UWVBFU19ERUZdOiBzdHJpbmd9ID0ge1xuICBvcmRpbmFsOiAnT3JkaW5hbCcsXG4gIHF1YW50aWxlOiAnUXVhbnRpbGUnLFxuICBxdWFudGl6ZTogJ1F1YW50aXplJyxcbiAgbGluZWFyOiAnTGluZWFyJyxcbiAgc3FydDogJ1NxcnQnLFxuICBsb2c6ICdMb2cnLFxuICB0aHJlc2hvbGQ6ICdUaHJlc2hvbGQnLFxuICBjdXN0b206ICdDdXN0b20gQnJlYWtzJyxcbiAgY3VzdG9tT3JkaW5hbDogJ0N1c3RvbSBPcmRpbmFsJyxcbiAgcG9pbnQ6ICdQb2ludCdcbn07XG5cbmV4cG9ydCB0eXBlIFNDQUxFX0ZVTkNfVFlQRSA9IHtcbiAgW2tleSBpbiBrZXlvZiBTQ0FMRV9UWVBFU19ERUZdOiAoKSA9PiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgU0NBTEVfRlVOQyA9IHtcbiAgW1NDQUxFX1RZUEVTLmxpbmVhcl06IHNjYWxlTGluZWFyLFxuICBbU0NBTEVfVFlQRVMucXVhbnRpemVdOiBzY2FsZVF1YW50aXplLFxuICBbU0NBTEVfVFlQRVMucXVhbnRpbGVdOiBzY2FsZVF1YW50aWxlLFxuICBbU0NBTEVfVFlQRVMub3JkaW5hbF06IHNjYWxlT3JkaW5hbCxcbiAgW1NDQUxFX1RZUEVTLnNxcnRdOiBzY2FsZVNxcnQsXG4gIFtTQ0FMRV9UWVBFUy5sb2ddOiBzY2FsZUxvZyxcbiAgW1NDQUxFX1RZUEVTLnBvaW50XTogc2NhbGVQb2ludCxcbiAgW1NDQUxFX1RZUEVTLnRocmVzaG9sZF06IHNjYWxlVGhyZXNob2xkLFxuICBbU0NBTEVfVFlQRVMuY3VzdG9tXTogc2NhbGVUaHJlc2hvbGQsXG4gIFtTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsXTogc2NhbGVPcmRpbmFsXG59O1xuXG5leHBvcnQgY29uc3QgQUxMX0ZJRUxEX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgYm9vbGVhbjogbnVsbCxcbiAgZGF0ZTogbnVsbCxcbiAgZ2VvanNvbjogbnVsbCxcbiAgaW50ZWdlcjogbnVsbCxcbiAgcmVhbDogbnVsbCxcbiAgc3RyaW5nOiBudWxsLFxuICB0aW1lc3RhbXA6IG51bGwsXG4gIHBvaW50OiBudWxsLFxuICBhcnJheTogbnVsbCxcbiAgb2JqZWN0OiBudWxsLFxuICBnZW9hcnJvdzogbnVsbCxcbiAgaDM6IG51bGxcbn0pO1xuXG4vLyBEYXRhIFRhYmxlXG5leHBvcnQgY29uc3QgU09SVF9PUkRFUiA9IGtleU1pcnJvcih7XG4gIEFTQ0VORElORzogbnVsbCxcbiAgREVTQ0VORElORzogbnVsbCxcbiAgVU5TT1JUOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IFRBQkxFX09QVElPTiA9IGtleU1pcnJvcih7XG4gIFNPUlRfQVNDOiBudWxsLFxuICBTT1JUX0RFUzogbnVsbCxcbiAgVU5TT1JUOiBudWxsLFxuICBQSU46IG51bGwsXG4gIFVOUElOOiBudWxsLFxuICBDT1BZOiBudWxsLFxuICBGT1JNQVRfQ09MVU1OOiBudWxsXG59KTtcblxuZXhwb3J0IHR5cGUgVGFibGVPcHRpb24gPSB7XG4gIHZhbHVlOiAnU09SVF9BU0MnIHwgJ1NPUlRfREVTJyB8ICdVTlNPUlQnIHwgJ1BJTicgfCAnVU5QSU4nIHwgJ0NPUFknIHwgJ0ZPUk1BVF9DT0xVTU4nO1xuICBkaXNwbGF5OiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgY29uZGl0aW9uPzogKHByb3BzOiBhbnkpID0+IGJvb2xlYW47XG59O1xuZXhwb3J0IGNvbnN0IFRBQkxFX09QVElPTl9MSVNUOiBUYWJsZU9wdGlvbltdID0gW1xuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5TT1JUX0FTQyxcbiAgICBkaXNwbGF5OiAnU29ydCBBc2NlbmRpbmcnLFxuICAgIGljb246ICdBcnJvd1VwJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+IHByb3BzLnNvcnRUYWJsZUNvbHVtbiAmJiBwcm9wcy5zb3J0TW9kZSAhPT0gU09SVF9PUkRFUi5BU0NFTkRJTkdcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uU09SVF9ERVMsXG4gICAgZGlzcGxheTogJ1NvcnQgRGVzY2VuZGluZycsXG4gICAgaWNvbjogJ0Fycm93RG93bicsXG4gICAgY29uZGl0aW9uOiBwcm9wcyA9PiBwcm9wcy5zb3J0VGFibGVDb2x1bW4gJiYgcHJvcHMuc29ydE1vZGUgIT09IFNPUlRfT1JERVIuREVTQ0VORElOR1xuICB9LFxuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5VTlNPUlQsXG4gICAgZGlzcGxheTogJ1Vuc29ydCBDb2x1bW4nLFxuICAgIGljb246ICdDYW5jZWwnLFxuICAgIGNvbmRpdGlvbjogcHJvcHMgPT4gcHJvcHMuaXNTb3J0ZWRcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uUElOLFxuICAgIGRpc3BsYXk6ICdQaW4gQ29sdW1uJyxcbiAgICBpY29uOiAnUGluJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+ICFwcm9wcy5pc1Bpbm5lZFxuICB9LFxuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5VTlBJTixcbiAgICBkaXNwbGF5OiAnVW5waW4gQ29sdW1uJyxcbiAgICBpY29uOiAnQ2FuY2VsJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+IHByb3BzLmlzUGlubmVkXG4gIH0sXG4gIHt2YWx1ZTogVEFCTEVfT1BUSU9OLkNPUFksIGRpc3BsYXk6ICdDb3B5IENvbHVtbicsIGljb246ICdDbGlwYm9hcmQnfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uRk9STUFUX0NPTFVNTixcbiAgICBkaXNwbGF5OiAnRm9ybWF0IENvbHVtbicsXG4gICAgaWNvbjogJ0hhc2gnLFxuICAgIGNvbmRpdGlvbjogcHJvcHMgPT4gcHJvcHMuc2V0RGlzcGxheUZvcm1hdFxuICB9XG5dO1xuXG5jb25zdCBZRUxMT1cgPSAnMjQ4LCAxOTQsIDI4JztcbmNvbnN0IFBJTksgPSAnMjQyLCAxNTIsIDE2Myc7XG5jb25zdCBQVVJQTEUgPSAnMTYwLCAxMDYsIDIwNic7XG5jb25zdCBCTFVFID0gJzE0MCwgMjEwLCAyMDUnO1xuY29uc3QgQkxVRTIgPSAnMTA2LCAxNjAsIDIwNic7XG5jb25zdCBCTFVFMyA9ICcwLCAxNzIsIDIzNyc7XG5jb25zdCBHUkVFTiA9ICcxMDYsIDE2MCwgNTYnO1xuY29uc3QgR1JFRU4yID0gJzc0LCAxNjUsIDE1MCc7XG5jb25zdCBSRUQgPSAnMjM3LCA4OCwgMTA2JztcbmNvbnN0IE9SQU5HRSA9ICcyMzEsIDExMCwgNTgnO1xuXG5leHBvcnQgY29uc3QgRklFTERfVFlQRV9ESVNQTEFZID0ge1xuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiB7XG4gICAgbGFiZWw6ICdib29sJyxcbiAgICBjb2xvcjogUElOS1xuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmRhdGVdOiB7XG4gICAgbGFiZWw6ICdkYXRlJyxcbiAgICBjb2xvcjogUFVSUExFXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IHtcbiAgICBsYWJlbDogJ2dlbycsXG4gICAgY29sb3I6IEJMVUUyXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvYXJyb3ddOiB7XG4gICAgbGFiZWw6ICdnZW8nLFxuICAgIGNvbG9yOiBCTFVFMlxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiB7XG4gICAgbGFiZWw6ICdpbnQnLFxuICAgIGNvbG9yOiBZRUxMT1dcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIGxhYmVsOiAnZmxvYXQnLFxuICAgIGNvbG9yOiBZRUxMT1dcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiB7XG4gICAgbGFiZWw6ICdzdHJpbmcnLFxuICAgIGNvbG9yOiBCTFVFXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXToge1xuICAgIGxhYmVsOiAndGltZScsXG4gICAgY29sb3I6IEdSRUVOXG4gIH0sXG4gIC8vIGZpZWxkIHBhaXJzXG4gIFtBTExfRklFTERfVFlQRVMucG9pbnRdOiB7XG4gICAgbGFiZWw6ICdwb2ludCcsXG4gICAgY29sb3I6IEJMVUUzXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuYXJyYXldOiB7XG4gICAgbGFiZWw6ICdhcnJheScsXG4gICAgY29sb3I6IE9SQU5HRVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLm9iamVjdF06IHtcbiAgICBsYWJlbDogJ29iamVjdCcsXG4gICAgY29sb3I6IEdSRUVOMlxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmgzXToge1xuICAgIGxhYmVsOiAnaDMnLFxuICAgIGNvbG9yOiBCTFVFXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9DT0xPUlMgPSB7XG4gIGRlZmF1bHQ6IFJFRFxufTtcbmV4cG9ydCBjb25zdCBISUdITElHSF9DT0xPUl8zRDogUkdCQUNvbG9yID0gWzI1NSwgMjU1LCAyNTUsIDYwXTtcbmV4cG9ydCBjb25zdCBDSEFOTkVMX1NDQUxFUyA9IGtleU1pcnJvcih7XG4gIGNvbG9yOiBudWxsLFxuICByYWRpdXM6IG51bGwsXG4gIHNpemU6IG51bGwsXG4gIGNvbG9yQWdncjogbnVsbCxcbiAgc2l6ZUFnZ3I6IG51bGwsXG4gIGFuZ2xlOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEFHR1JFR0FUSU9OX1RZUEVTOiB7XG4gIC8vIGRlZmF1bHRcbiAgY291bnQ6ICdjb3VudCc7XG4gIC8vIGxpbmVhclxuICBhdmVyYWdlOiAnYXZlcmFnZSc7XG4gIG1heGltdW06ICdtYXhpbXVtJztcbiAgbWluaW11bTogJ21pbmltdW0nO1xuICBtZWRpYW46ICdtZWRpYW4nO1xuICBzdGRldjogJ3N0ZGV2JztcbiAgc3VtOiAnc3VtJztcbiAgdmFyaWFuY2U6ICd2YXJpYW5jZSc7XG4gIC8vIG9yZGluYWxcbiAgbW9kZTogJ21vZGUnO1xuICBjb3VudFVuaXF1ZTogJ2NvdW50VW5pcXVlJztcbn0gPSB7XG4gIC8vIGRlZmF1bHRcbiAgY291bnQ6ICdjb3VudCcsXG4gIC8vIGxpbmVhclxuICBhdmVyYWdlOiAnYXZlcmFnZScsXG4gIG1heGltdW06ICdtYXhpbXVtJyxcbiAgbWluaW11bTogJ21pbmltdW0nLFxuICBtZWRpYW46ICdtZWRpYW4nLFxuICBzdGRldjogJ3N0ZGV2JyxcbiAgc3VtOiAnc3VtJyxcbiAgdmFyaWFuY2U6ICd2YXJpYW5jZScsXG4gIC8vIG9yZGluYWxcbiAgbW9kZTogJ21vZGUnLFxuICBjb3VudFVuaXF1ZTogJ2NvdW50VW5pcXVlJ1xufTtcblxuZXhwb3J0IGNvbnN0IEFHR1JFR0FUSU9OX1RZUEVfT1BUSU9OUzoge2lkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmd9W10gPSBPYmplY3QuZW50cmllcyhcbiAgQUdHUkVHQVRJT05fVFlQRVNcbikubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gIGlkOiBrZXksXG4gIGxhYmVsOlxuICAgIGtleSA9PT0gJ3N0ZGV2J1xuICAgICAgPyAnU3RkIERldmlhdGlvbidcbiAgICAgIDoga2V5ID09PSAnY291bnRVbmlxdWUnXG4gICAgICA/ICdDb3VudCBVbmlxdWUnXG4gICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgID8gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKVxuICAgICAgOiB2YWx1ZVxufSkpO1xuXG5leHBvcnQgY29uc3QgbGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZSwgU0NBTEVfVFlQRVMuY3VzdG9tXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnJhZGl1c106IFtTQ0FMRV9UWVBFUy5zcXJ0XSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddLFxuICBbQ0hBTk5FTF9TQ0FMRVMuYW5nbGVdOiBbU0NBTEVfVFlQRVMubGluZWFyXVxufTtcblxuY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTl9DT0xPUl9TQ0FMRVMgPSBbXG4gIFNDQUxFX1RZUEVTLnF1YW50aXplLFxuICBTQ0FMRV9UWVBFUy5xdWFudGlsZSxcbiAgU0NBTEVfVFlQRVMuY3VzdG9tXG5dO1xuXG5leHBvcnQgY29uc3QgbGluZWFyRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnMgPSB7XG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvckFnZ3JdOiBbXG4gICAgQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sXG4gICAgQUdHUkVHQVRJT05fVFlQRVMubWVkaWFuLFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2LFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLnN1bSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy52YXJpYW5jZSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy5jb3VudFxuICBdLnJlZHVjZSgocHJldiwgY3VyKSA9PiB7XG4gICAgcHJldltjdXJdID0gREVGQVVMVF9BR0dSRUdBVElPTl9DT0xPUl9TQ0FMRVM7XG4gICAgcmV0dXJuIHByZXY7XG4gIH0sIHt9KSxcblxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2VdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddLFxuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtXTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMubWluaW11bV06IFtTQ0FMRV9UWVBFUy5saW5lYXIsIFNDQUxFX1RZUEVTLnNxcnQsIFNDQUxFX1RZUEVTLmxvZ10sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1lZGlhbl06IFtTQ0FMRV9UWVBFUy5saW5lYXIsIFNDQUxFX1RZUEVTLnNxcnQsIFNDQUxFX1RZUEVTLmxvZ10sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2XTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuc3VtXTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMudmFyaWFuY2VdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBvcmRpbmFsRmllbGRTY2FsZUZ1bmN0aW9ucyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1NDQUxFX1RZUEVTLm9yZGluYWwsIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWxdLFxuICBbQ0hBTk5FTF9TQ0FMRVMucmFkaXVzXTogW1NDQUxFX1RZUEVTLnBvaW50XSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbU0NBTEVfVFlQRVMucG9pbnRdXG59O1xuXG5leHBvcnQgY29uc3Qgb3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zID0ge1xuICAvLyBbQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyXTogW1NDQUxFX1RZUEVTLm9yZGluYWwsIFNDQUxFX1RZUEVTLmxpbmVhcl0sXG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvckFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1vZGVdOiBbU0NBTEVfVFlQRVMub3JkaW5hbF0sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmNvdW50VW5pcXVlXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZV1cbiAgfSxcblxuICAvLyBDdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IHlldFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7fVxufTtcblxuZXhwb3J0IGNvbnN0IG5vdFN1cHBvcnRlZFNjYWxlT3B0cyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW10sXG4gIFtDSEFOTkVMX1NDQUxFUy5yYWRpdXNdOiBbXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG5vdFN1cHBvcnRBZ2dyT3B0cyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yQWdncl06IHt9LFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7fVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGFnZ3JlZ2F0aW9uIGFyZSBiYXNlZCBvbiBvY3VudFxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTiA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yQWdncl06IHtcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuY291bnRdOiBERUZBVUxUX0FHR1JFR0FUSU9OX0NPTE9SX1NDQUxFU1xuICB9LFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmNvdW50XTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXVxuICB9XG59O1xuXG4vKipcbiAqIERlZmluZSB3aGF0IHR5cGUgb2Ygc2NhbGUgb3BlcmF0aW9uIGlzIGFsbG93ZWQgb24gZWFjaCB0eXBlIG9mIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgRklFTERfT1BUUyA9IHtcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiB7XG4gICAgdHlwZTogJ2NhdGVnb3JpY2FsJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ub3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5vcmRpbmFsRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIHR5cGU6ICdudW1lcmljYWwnLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5saW5lYXJGaWVsZFNjYWxlRnVuY3Rpb25zLFxuICAgICAgLi4ubGluZWFyRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLk5PTkUsXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRFQ0lNQUwsXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLlBFUkNFTlRBR0VcbiAgICAgIF1cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXToge1xuICAgIHR5cGU6ICd0aW1lJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLm5vdFN1cHBvcnRBZ2dyT3B0c1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6IGQgPT4gZCxcbiAgICAgIHRvb2x0aXA6IFtcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuTk9ORSxcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURSxcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV9USU1FXG4gICAgICBdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiB7XG4gICAgdHlwZTogJ251bWVyaWNhbCcsXG4gICAgc2NhbGU6IHtcbiAgICAgIC4uLntcbiAgICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgICAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1xuICAgICAgICAgIC4uLmxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnNbQ0hBTk5FTF9TQ0FMRVMuY29sb3JdLFxuICAgICAgICAgIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC4uLmxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogZCA9PiBkLFxuICAgICAgdG9vbHRpcDogW1xuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5OT05FLFxuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMLFxuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5QRVJDRU5UQUdFXG4gICAgICBdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5vcmRpbmFsRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLm9yZGluYWxGaWVsZEFnZ3JTY2FsZUZ1bmN0aW9uc1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6IGQgPT4gZCxcbiAgICAgIHRvb2x0aXA6IFtUT09MVElQX0ZPUk1BVF9UWVBFUy5OT05FLCBUT09MVElQX0ZPUk1BVF9UWVBFUy5CT09MRUFOXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXToge1xuICAgIHR5cGU6ICd0aW1lJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ub3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5vcmRpbmFsRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbVE9PTFRJUF9GT1JNQVRfVFlQRVMuTk9ORSwgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV1cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IHtcbiAgICB0eXBlOiAnZ2VvbWV0cnknLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5ub3RTdXBwb3J0ZWRTY2FsZU9wdHMsXG4gICAgICAuLi5ub3RTdXBwb3J0QWdnck9wdHNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiAoKSA9PiAnLi4uJyxcbiAgICAgIHRvb2x0aXA6IFtdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93XToge1xuICAgIHR5cGU6ICdnZW9tZXRyeScsXG4gICAgc2NhbGU6IHtcbiAgICAgIC4uLm5vdFN1cHBvcnRlZFNjYWxlT3B0cyxcbiAgICAgIC4uLm5vdFN1cHBvcnRBZ2dyT3B0c1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6ICgpID0+ICcuLi4nLFxuICAgICAgdG9vbHRpcDogW11cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMub2JqZWN0XToge1xuICAgIHR5cGU6ICdudW1lcmljYWwnLFxuICAgIHNjYWxlOiB7fSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogKCkgPT4gJy4uLicsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5hcnJheV06IHtcbiAgICB0eXBlOiAnbnVtZXJpY2FsJyxcbiAgICBzY2FsZToge30sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6ICgpID0+ICcuLi4nLFxuICAgICAgdG9vbHRpcDogW11cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuaDNdOiB7XG4gICAgdHlwZTogJ2gzJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubm90U3VwcG9ydGVkU2NhbGVPcHRzLFxuICAgICAgLi4ubm90U3VwcG9ydEFnZ3JPcHRzXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogKCkgPT4gJy4uLicsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyA9IE9iamVjdC5rZXlzKENIQU5ORUxfU0NBTEVTKS5yZWR1Y2UoXG4gIChhY2N1LCBrZXkpID0+ICh7XG4gICAgLi4uYWNjdSxcbiAgICBba2V5XTogT2JqZWN0LmtleXMoRklFTERfT1BUUykuZmlsdGVyKFxuICAgICAgZnQgPT4gRklFTERfT1BUU1tmdF0uc2NhbGVba2V5XSAmJiBPYmplY3Qua2V5cyhGSUVMRF9PUFRTW2Z0XS5zY2FsZVtrZXldKS5sZW5ndGhcbiAgICApXG4gIH0pLFxuICB7fSBhcyB7W2lkOiBzdHJpbmddOiBzdHJpbmdbXX1cbik7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0NPTE9SID0ge1xuICB0cmlwQXJjOiAnIzkyMjZDNicsXG4gIGJlZ2ludHJpcF9sYXQ6ICcjMUU5NkJFJyxcbiAgZHJvcG9mZl9sYXQ6ICcjRkY5OTFGJyxcbiAgcmVxdWVzdF9sYXQ6ICcjNTJBMzUzJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfQ09MT1JfUEFMRVRURSA9ICdHbG9iYWwgV2FybWluZyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTID0gNjtcblxuLy8gbGV0IHVzZXIgcGFzcyBpbiBkZWZhdWx0IHRvb2x0aXAgZmllbGRzXG5leHBvcnQgY29uc3QgREVGQVVMVF9UT09MVElQX0ZJRUxEUzogYW55W10gPSBbXTtcblxuZXhwb3J0IGNvbnN0IE5PX1ZBTFVFX0NPTE9SOiBSR0JBQ29sb3IgPSBbMCwgMCwgMCwgMF07XG4vKiogVmlzaWJsZSBncmF5IHVzZWQgd2hlbiBhIGNvbG9yIGZpZWxkIGhhcyBubyB2YWx1ZSBhbmQgbWlzc2luZyBmZWF0dXJlcyBzaG91bGQgc3RheSBvbiB0aGUgbWFwLiAqL1xuZXhwb3J0IGNvbnN0IE1JU1NJTkdfVkFMVUVfQ09MT1I6IFJHQkFDb2xvciA9IFsxMjgsIDEyOCwgMTI4LCAyNTVdO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9QSUNLSU5HX1JBRElVUyA9IDM7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX0JMRU5ESU5HUyA9IHtcbiAgbm9ybWFsOiB7XG4gICAgbGFiZWw6ICdvdmVybGF5QmxlbmRpbmcubm9ybWFsJyxcbiAgICB2YWx1ZTogJ25vcm1hbCdcbiAgfSxcbiAgc2NyZWVuOiB7XG4gICAgbGFiZWw6ICdvdmVybGF5QmxlbmRpbmcuc2NyZWVuJyxcbiAgICB2YWx1ZTogJ3NjcmVlbidcbiAgfSxcbiAgZGFya2VuOiB7XG4gICAgbGFiZWw6ICdvdmVybGF5QmxlbmRpbmcuZGFya2VuJyxcbiAgICB2YWx1ZTogJ2RhcmtlbidcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX0JMRU5ESU5HUyA9IHtcbiAgYWRkaXRpdmU6IHtcbiAgICBsYWJlbDogJ2xheWVyQmxlbmRpbmcuYWRkaXRpdmUnLFxuICAgIGJsZW5kRnVuYzogWydTUkNfQUxQSEEnLCAnRFNUX0FMUEhBJ10sXG4gICAgYmxlbmRFcXVhdGlvbjogJ0ZVTkNfQUREJ1xuICB9LFxuICBub3JtYWw6IHtcbiAgICAvLyByZWZlcmVuY2UgdG9cbiAgICAvLyBodHRwczovL2xpbW51LmNvbS93ZWJnbC1ibGVuZGluZy15b3VyZS1wcm9iYWJseS13cm9uZy9cbiAgICBsYWJlbDogJ2xheWVyQmxlbmRpbmcubm9ybWFsJyxcbiAgICBibGVuZEZ1bmM6IFsnU1JDX0FMUEhBJywgJ09ORV9NSU5VU19TUkNfQUxQSEEnLCAnT05FJywgJ09ORV9NSU5VU19TUkNfQUxQSEEnXSxcbiAgICBibGVuZEVxdWF0aW9uOiBbJ0ZVTkNfQUREJywgJ0ZVTkNfQUREJ11cbiAgfSxcbiAgc3VidHJhY3RpdmU6IHtcbiAgICBsYWJlbDogJ2xheWVyQmxlbmRpbmcuc3VidHJhY3RpdmUnLFxuICAgIGJsZW5kRnVuYzogWydPTkUnLCAnT05FX01JTlVTX0RTVF9DT0xPUicsICdTUkNfQUxQSEEnLCAnRFNUX0FMUEhBJ10sXG4gICAgYmxlbmRFcXVhdGlvbjogWydGVU5DX1NVQlRSQUNUJywgJ0ZVTkNfQUREJ11cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IE1BWF9ERUZBVUxUX1RPT0xUSVBTID0gNTtcblxuZXhwb3J0IGNvbnN0IFJFU09MVVRJT05TID0ga2V5TWlycm9yKHtcbiAgT05FX1g6IG51bGwsXG4gIFRXT19YOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9JTUdfUkFUSU9TID0ga2V5TWlycm9yKHtcbiAgU0NSRUVOOiBudWxsLFxuICBGT1VSX0JZX1RIUkVFOiBudWxsLFxuICBTSVhURUVOX0JZX05JTkU6IG51bGwsXG4gIENVU1RPTTogbnVsbFxufSk7XG5cbmV4cG9ydCB0eXBlIEltYWdlUmF0aW9PcHRpb24gPSB7XG4gIGlkOiBrZXlvZiB0eXBlb2YgRVhQT1JUX0lNR19SQVRJT1M7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGdldFNpemU6IChzY3JlZW5XOiBudW1iZXIsIHNjcmVlbkg6IG51bWJlcikgPT4ge3dpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfTtcbn07XG5cbmV4cG9ydCBjb25zdCBTY3JlZW5SYXRpb09wdGlvbjogSW1hZ2VSYXRpb09wdGlvbiA9IHtcbiAgaWQ6IEVYUE9SVF9JTUdfUkFUSU9TLlNDUkVFTixcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpb09yaWdpbmFsU2NyZWVuJyxcbiAgZ2V0U2l6ZTogKHNjcmVlblcsIHNjcmVlbkgpID0+ICh7d2lkdGg6IHNjcmVlblcsIGhlaWdodDogc2NyZWVuSH0pXG59O1xuZXhwb3J0IGNvbnN0IEN1c3RvbVJhdGlvT3B0aW9uOiBJbWFnZVJhdGlvT3B0aW9uID0ge1xuICBpZDogRVhQT1JUX0lNR19SQVRJT1MuQ1VTVE9NLFxuICBoaWRkZW46IHRydWUsXG4gIGxhYmVsOiAnbW9kYWwuZXhwb3J0SW1hZ2UucmF0aW9DdXN0b20nLFxuICBnZXRTaXplOiAobWFwVywgbWFwSCkgPT4gKHt3aWR0aDogbWFwVywgaGVpZ2h0OiBtYXBIfSlcbn07XG5leHBvcnQgY29uc3QgRm91ckJ5VGhyZWVSYXRpb09wdGlvbjogSW1hZ2VSYXRpb09wdGlvbiA9IHtcbiAgaWQ6IEVYUE9SVF9JTUdfUkFUSU9TLkZPVVJfQllfVEhSRUUsXG4gIGxhYmVsOiAnbW9kYWwuZXhwb3J0SW1hZ2UucmF0aW80XzMnLFxuICBnZXRTaXplOiBzY3JlZW5XID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcsXG4gICAgaGVpZ2h0OiBNYXRoLnJvdW5kKHNjcmVlblcgKiAwLjc1KVxuICB9KVxufTtcbmV4cG9ydCBjb25zdCBTaXh0ZWVuQnlOaW5lUmF0aW9PcHRpb246IEltYWdlUmF0aW9PcHRpb24gPSB7XG4gIGlkOiBFWFBPUlRfSU1HX1JBVElPUy5TSVhURUVOX0JZX05JTkUsXG4gIGxhYmVsOiAnbW9kYWwuZXhwb3J0SW1hZ2UucmF0aW8xNl85JyxcbiAgZ2V0U2l6ZTogc2NyZWVuVyA9PiAoe1xuICAgIHdpZHRoOiBzY3JlZW5XLFxuICAgIGhlaWdodDogTWF0aC5yb3VuZChzY3JlZW5XICogMC41NjI1KVxuICB9KVxufTtcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9JTUdfUkFUSU9fT1BUSU9OUzogUmVhZG9ubHlBcnJheTxJbWFnZVJhdGlvT3B0aW9uPiA9IFtcbiAgU2NyZWVuUmF0aW9PcHRpb24sXG4gIEZvdXJCeVRocmVlUmF0aW9PcHRpb24sXG4gIFNpeHRlZW5CeU5pbmVSYXRpb09wdGlvbixcbiAgQ3VzdG9tUmF0aW9PcHRpb25cbl07XG5cbmV4cG9ydCB0eXBlIEV4cG9ydFJlc29sdXRpb25PcHRpb24gPVxuICB8IGtleW9mIHR5cGVvZiBSRVNPTFVUSU9OU1xuICB8ICcxMjgweDcyMCdcbiAgfCAnMTkyMHgxMDgwJ1xuICB8ICcyNTYweDE0NDAnXG4gIHwgJzE2MDB4OTAwJ1xuICB8ICcxMDI0eDc2OCdcbiAgfCAnMTI4MHg5NjAnXG4gIHwgJzE2MDB4MTIwMCdcbiAgfCAnMTkyMHgxNDQwJztcblxuZXhwb3J0IHR5cGUgSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogRXhwb3J0UmVzb2x1dGlvbk9wdGlvbjtcbiAgbGFiZWw6IHN0cmluZztcbiAgYXZhaWxhYmxlOiBib29sZWFuO1xuICBzY2FsZT86IG51bWJlcjtcbiAgZ2V0U2l6ZTogKHNjcmVlblc6IG51bWJlciwgc2NyZWVuSDogbnVtYmVyKSA9PiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9O1xufTtcblxuZXhwb3J0IGNvbnN0IE9uZVhSZXNvbHV0aW9uT3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiBSRVNPTFVUSU9OUy5PTkVfWCxcbiAgbGFiZWw6ICcxeCcsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgc2NhbGU6IDEsXG4gIGdldFNpemU6IChzY3JlZW5XLCBzY3JlZW5IKSA9PiAoe1xuICAgIHdpZHRoOiBzY3JlZW5XLFxuICAgIGhlaWdodDogc2NyZWVuSFxuICB9KVxufTtcblxuZXhwb3J0IGNvbnN0IFR3b1hSZXNvbHV0aW9uT3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiBSRVNPTFVUSU9OUy5UV09fWCxcbiAgbGFiZWw6ICcyeCcsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgc2NhbGU6IDIsXG4gIGdldFNpemU6IChzY3JlZW5XLCBzY3JlZW5IKSA9PiAoe1xuICAgIHdpZHRoOiBzY3JlZW5XICogMixcbiAgICBoZWlnaHQ6IHNjcmVlbkggKiAyXG4gIH0pXG59O1xuXG4vLyBGaXhlZCBkaW1lbnNpb24gb3B0aW9uc1xuZXhwb3J0IGNvbnN0IFJlc29sdXRpb24xOTIweDEwODBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxOTIweDEwODAnLFxuICBsYWJlbDogJzE5MjAgw5cgMTA4MCAoMTY6OSknLFxuICBhdmFpbGFibGU6IHRydWUsXG4gIGdldFNpemU6ICgpID0+ICh7d2lkdGg6IDE5MjAsIGhlaWdodDogMTA4MH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjEyODB4NzIwT3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiAnMTI4MHg3MjAnLFxuICBsYWJlbDogJzEyODAgw5cgNzIwICgxNjo5KScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTI4MCwgaGVpZ2h0OiA3MjB9KVxufTtcblxuZXhwb3J0IGNvbnN0IFJlc29sdXRpb24yNTYweDE0NDBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcyNTYweDE0NDAnLFxuICBsYWJlbDogJzI1NjAgw5cgMTQ0MCAoMTY6OSknLFxuICBhdmFpbGFibGU6IHRydWUsXG4gIGdldFNpemU6ICgpID0+ICh7d2lkdGg6IDI1NjAsIGhlaWdodDogMTQ0MH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjE2MDB4OTAwT3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiAnMTYwMHg5MDAnLFxuICBsYWJlbDogJzE2MDAgw5cgOTAwICgxNjo5KScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTYwMCwgaGVpZ2h0OiA5MDB9KVxufTtcblxuZXhwb3J0IGNvbnN0IFJlc29sdXRpb24xMDI0eDc2OE9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzEwMjR4NzY4JyxcbiAgbGFiZWw6ICcxMDI0IMOXIDc2OCAoNDozKScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTAyNCwgaGVpZ2h0OiA3Njh9KVxufTtcblxuZXhwb3J0IGNvbnN0IFJlc29sdXRpb24xMjgweDk2ME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzEyODB4OTYwJyxcbiAgbGFiZWw6ICcxMjgwIMOXIDk2MCAoNDozKScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTI4MCwgaGVpZ2h0OiA5NjB9KVxufTtcblxuZXhwb3J0IGNvbnN0IFJlc29sdXRpb24xNjAweDEyMDBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxNjAweDEyMDAnLFxuICBsYWJlbDogJzE2MDAgw5cgMTIwMCAoNDozKScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTYwMCwgaGVpZ2h0OiAxMjAwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBSZXNvbHV0aW9uMTkyMHgxNDQwT3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiAnMTkyMHgxNDQwJyxcbiAgbGFiZWw6ICcxOTIwIMOXIDE0NDAgKDQ6MyknLFxuICBhdmFpbGFibGU6IHRydWUsXG4gIGdldFNpemU6ICgpID0+ICh7d2lkdGg6IDE5MjAsIGhlaWdodDogMTQ0MH0pXG59O1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX0lNR19SRVNPTFVUSU9OX09QVElPTlM6IFJlYWRvbmx5QXJyYXk8SW1hZ2VSZXNvbHV0aW9uT3B0aW9uPiA9IFtcbiAgT25lWFJlc29sdXRpb25PcHRpb24sXG4gIFR3b1hSZXNvbHV0aW9uT3B0aW9uLFxuICBSZXNvbHV0aW9uMTI4MHg3MjBPcHRpb24sXG4gIFJlc29sdXRpb24xOTIweDEwODBPcHRpb24sXG4gIFJlc29sdXRpb24yNTYweDE0NDBPcHRpb24sXG4gIFJlc29sdXRpb24xNjAweDkwME9wdGlvbixcbiAgUmVzb2x1dGlvbjEwMjR4NzY4T3B0aW9uLFxuICBSZXNvbHV0aW9uMTI4MHg5NjBPcHRpb24sXG4gIFJlc29sdXRpb24xNjAweDEyMDBPcHRpb24sXG4gIFJlc29sdXRpb24xOTIweDE0NDBPcHRpb25cbl07XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfREFUQV9UWVBFID0ga2V5TWlycm9yKHtcbiAgQ1NWOiBudWxsXG4gIC8vIFNIQVBFRklMRTogbnVsbCxcbiAgLy8gSlNPTjogbnVsbCxcbiAgLy8gR0VPSlNPTjogbnVsbCxcbiAgLy8gVE9QT0pTT046IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX0RBVEFfVFlQRV9PUFRJT05TID0gW1xuICB7XG4gICAgaWQ6IEVYUE9SVF9EQVRBX1RZUEUuQ1NWLFxuICAgIGxhYmVsOiBFWFBPUlRfREFUQV9UWVBFLkNTVi50b0xvd2VyQ2FzZSgpLFxuICAgIGF2YWlsYWJsZTogdHJ1ZVxuICB9XG4gIC8vIHtcbiAgLy8gICBpZDogRVhQT1JUX0RBVEFfVFlQRS5TSEFQRUZJTEUsXG4gIC8vICAgbGFiZWw6ICdzaGFwZWZpbGUnLFxuICAvLyAgIGF2YWlsYWJsZTogZmFsc2VcbiAgLy8gfSxcbiAgLy8ge1xuICAvLyAgIGlkOiBFWFBPUlRfREFUQV9UWVBFLkpTT04sXG4gIC8vICAgbGFiZWw6ICdqc29uJyxcbiAgLy8gICBhdmFpbGFibGU6IGZhbHNlXG4gIC8vIH0sXG4gIC8vIHtcbiAgLy8gICBpZDogRVhQT1JUX0RBVEFfVFlQRS5HRU9KU09OLFxuICAvLyAgIGxhYmVsOiAnZ2VvanNvbicsXG4gIC8vICAgYXZhaWxhYmxlOiBmYWxzZVxuICAvLyB9LFxuICAvLyB7XG4gIC8vICAgaWQ6IEVYUE9SVF9EQVRBX1RZUEUuVE9QT0pTT04sXG4gIC8vICAgbGFiZWw6ICd0b3BvanNvbicsXG4gIC8vICAgYXZhaWxhYmxlOiBmYWxzZVxuICAvLyB9XG5dO1xuXG4vLyBFeHBvcnQgbWFwIHR5cGVzXG5leHBvcnQgY29uc3QgRVhQT1JUX01BUF9GT1JNQVRTID0ga2V5TWlycm9yKHtcbiAgSFRNTDogbnVsbCxcbiAgSlNPTjogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfSFRNTF9NQVBfTU9ERVMgPSBrZXlNaXJyb3Ioe1xuICBSRUFEOiBudWxsLFxuICBFRElUOiBudWxsXG59KTtcblxuLy8gRXhwb3J0IG1hcCBvcHRpb25zXG5leHBvcnQgY29uc3QgRVhQT1JUX01BUF9GT1JNQVRfT1BUSU9OUyA9IE9iamVjdC5lbnRyaWVzKEVYUE9SVF9NQVBfRk9STUFUUykubWFwKFxuICAoZW50cnk6IFtzdHJpbmcsIGFueV0pID0+ICh7XG4gICAgaWQ6IGVudHJ5WzBdLFxuICAgIGxhYmVsOiBlbnRyeVsxXS50b0xvd2VyQ2FzZSgpLFxuICAgIGF2YWlsYWJsZTogdHJ1ZVxuICB9KVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhUTUxNYXBNb2RlVGlsZVVybChtb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYGh0dHBzOi8vZDFhM2Y0c3BhenpycDQuY2xvdWRmcm9udC5uZXQva2VwbGVyLmdsL2RvY3VtZW50YXRpb24vbWFwLSR7bW9kZS50b0xvd2VyQ2FzZSgpfS1tb2RlLnBuZ2A7XG59XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfSFRNTF9NQVBfTU9ERV9PUFRJT05TID0gT2JqZWN0LmVudHJpZXMoRVhQT1JUX0hUTUxfTUFQX01PREVTKS5tYXAoXG4gIChlbnRyeTogW3N0cmluZywgYW55XSkgPT4gKHtcbiAgICBpZDogZW50cnlbMF0sXG4gICAgbGFiZWw6IGBtb2RhbC5leHBvcnRNYXAuaHRtbC4ke2VudHJ5WzFdLnRvTG93ZXJDYXNlKCl9YCxcbiAgICBhdmFpbGFibGU6IHRydWUsXG4gICAgdXJsOiBnZXRIVE1MTWFwTW9kZVRpbGVVcmwoZW50cnlbMV0pXG4gIH0pXG4pO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9VVUlEX0NPVU5UID0gNjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9USUZJQ0FUSU9OX01FU1NBR0UgPSAnTUVTU0FHRV9OT1RfUFJPVklERUQnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT1RJRklDQVRJT05fVFlQRVMgPSBrZXlNaXJyb3Ioe1xuICBpbmZvOiBudWxsLFxuICBlcnJvcjogbnVsbCxcbiAgd2FybmluZzogbnVsbCxcbiAgc3VjY2VzczogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MgPSBrZXlNaXJyb3Ioe1xuICBnbG9iYWw6IG51bGwsXG4gIGZpbGU6IG51bGxcbn0pO1xuXG4vLyBNaW5pbXVtIHRpbWUgYmV0d2VlbiBpZGVudGljYWwgbm90aWZpY2F0aW9ucyBhYm91dCBkZWNrLmdsIGVycm9yc1xuZXhwb3J0IGNvbnN0IFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FID0gMzMwO1xuXG4vLyBBbmltYXRpb25cbmV4cG9ydCBjb25zdCBCQVNFX1NQRUVEID0gNjAwO1xuZXhwb3J0IGNvbnN0IEZQUyA9IDYwO1xuXG4vKipcbiAqIDQgQW5pbWF0aW9uIFdpbmRvdyBUeXBlc1xuICogMS4gZnJlZVxuICogIHwtPiAgfC0+XG4gKiBDdXJyZW50IHRpbWUgaXMgYSBmaXhlZCByYW5nZSwgYW5pbWF0aW9uIGNvbnRyb2xsZXIgY2FsbHMgbmV4dCBhbmltYXRpb24gZnJhbWVzIGNvbnRpbnVvdXNseSB0byBhbmltYXRpb24gYSBtb3Zpbmcgd2luZG93XG4gKiBUaGUgaW5jcmVtZW50IGlkIGJhc2VkIG9uIGRvbWFpbiAvIEJBU0VfU1BFRUQgKiBTUEVFRFxuICpcbiAqIDIuIGluY3JlbWVudGFsXG4gKiB8ICAgIHwtPlxuICogU2FtZSBhcyBmcmVlLCBjdXJyZW50IHRpbWUgaXMgYSBncm93aW5nIHJhbmdlLCBvbmx5IHRoZSBtYXggdmFsdWUgb2YgcmFuZ2UgaW5jcmVtZW50IGR1cmluZyBhbmltYXRpb24uXG4gKiBUaGUgaW5jcmVtZW50IGlzIGFsc28gYmFzZWQgb24gZG9tYWluIC8gQkFTRV9TUEVFRCAqIFNQRUVEXG4gKlxuICogMy4gcG9pbnRcbiAqIG8gLT4gb1xuICogQ3VycmVudCB0aW1lIGlzIGEgcG9pbnQsIGFuaW1hdGlvbiBjb250cm9sbGVyIGNhbGxzIG5leHQgYW5pbWF0aW9uIGZyYW1lIGNvbnRpbnVvdXNseSB0byBhbmltYXRpb24gYSBtb3ZpbmcgcG9pbnRcbiAqIFRoZSBpbmNyZW1lbnQgaXMgYmFzZWQgb24gZG9tYWluIC8gQkFTRV9TUEVFRCAqIFNQRUVEXG4gKlxuICogNC4gaW50ZXJ2YWxcbiAqIG8gfj4gb1xuICogQ3VycmVudCB0aW1lIGlzIGEgcG9pbnQuIEFuIGFycmF5IG9mIHNvcnRlZCB0aW1lIHN0ZXBzIG5lZWQgdG8gYmUgcHJvdmlkZWQuXG4gKiBhbmltYXRpb24gY29udHJvbGxlciBjYWxscyBuZXh0IGFuaW1hdGlvbiBhdCBhIGludGVydmFsIHdoZW4gdGhlIHBvaW50IGp1bXBzIHRvIHRoZSBuZXh0IHN0ZXBcbiAqL1xuZXhwb3J0IGNvbnN0IEFOSU1BVElPTl9XSU5ET1cgPSBrZXlNaXJyb3Ioe1xuICBmcmVlOiBudWxsLFxuICBpbmNyZW1lbnRhbDogbnVsbCxcbiAgcG9pbnQ6IG51bGwsXG4gIGludGVydmFsOiBudWxsXG59KTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVfRk9STUFUID0gJ01NL0REL1lZIEhIOm1tOnNzYSc7XG5leHBvcnQgY29uc3QgU1BFRURfQ09OVFJPTF9SQU5HRTogW251bWJlciwgbnVtYmVyXSA9IFswLCAxMF07XG5leHBvcnQgY29uc3QgU1BFRURfQ09OVFJPTF9TVEVQID0gMC4wMDE7XG5cbi8vIEdlb2NvZGVyXG5leHBvcnQgY29uc3QgR0VPQ09ERVJfREFUQVNFVF9OQU1FID0gJ2dlb2NvZGVyX2RhdGFzZXQnO1xuZXhwb3J0IGNvbnN0IEdFT0NPREVSX0xBWUVSX0lEID0gJ2dlb2NvZGVyX2xheWVyJztcbmV4cG9ydCBjb25zdCBHRU9DT0RFUl9HRU9fT0ZGU0VUID0gMC4wNTtcbmV4cG9ydCBjb25zdCBHRU9DT0RFUl9JQ09OX0NPTE9SOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbMjU1LCAwLCAwXTtcbi8vIEJhc2UgaWNvbiBzaXplIGJlZm9yZSBhbmNob3Igbm9ybWFsaXphdGlvbi4gVGhlIGdlb2NvZGVyIHBpbiBpY29uIGlzIGJvdHRvbS1hbmNob3JlZFxuLy8gYW5kIHNjYWxlZCB0byBmaXQgdGhlIFNjYXR0ZXJwbG90TGF5ZXIgdW5pdCBjaXJjbGUgKH4wLjV4KSwgc28gdGhlIHJlbmRlcmVkIHNpemUgaXNcbi8vIGNvbXBlbnNhdGVkIGhlcmUgKDgwICogMiA9IDE2MCkuXG5leHBvcnQgY29uc3QgR0VPQ09ERVJfSUNPTl9TSVpFID0gMTYwO1xuXG4vLyBFZGl0b3JcbmV4cG9ydCBjb25zdCBFRElUT1JfTEFZRVJfSUQgPSAna2VwbGVyX2VkaXRvcl9sYXllcic7XG5leHBvcnQgY29uc3QgRURJVE9SX0xBWUVSX1BJQ0tJTkdfUkFESVVTID0gNjtcbmV4cG9ydCBjb25zdCBFRElUT1JfTU9ERVMgPSB7XG4gIERSQVdfUE9MWUdPTjogJ0RSQVdfUE9MWUdPTicsXG4gIERSQVdfUkVDVEFOR0xFOiAnRFJBV19SRUNUQU5HTEUnLFxuICBEUkFXX0NJUkNMRTogJ0RSQVdfQ0lSQ0xFJyxcbiAgRFJBV19MSU5FU1RSSU5HOiAnRFJBV19MSU5FU1RSSU5HJyxcbiAgRFJBV19QT0lOVDogJ0RSQVdfUE9JTlQnLFxuICBFRElUOiAnRURJVF9WRVJURVgnXG59O1xuXG5leHBvcnQgY29uc3QgRURJVE9SX0RSQVdfTU9ERVM6IHN0cmluZ1tdID0gW1xuICBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBFRElUT1JfTU9ERVMuRFJBV19SRUNUQU5HTEUsXG4gIEVESVRPUl9NT0RFUy5EUkFXX0NJUkNMRSxcbiAgRURJVE9SX01PREVTLkRSQVdfTElORVNUUklORyxcbiAgRURJVE9SX01PREVTLkRSQVdfUE9JTlRcbl07XG5cbmV4cG9ydCBjb25zdCBQTE9UX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgaGlzdG9ncmFtOiBudWxsLFxuICBsaW5lQ2hhcnQ6IG51bGxcbn0pO1xuXG4vLyBGaWx0ZXJcbmV4cG9ydCBjb25zdCBJTklUX0ZJTFRFUl9JVEVNU19JTl9EUk9QRE9XTiA9IDEwMDtcblxuLy8gR1BVIEZpbHRlcmluZ1xuLyoqXG4gKiBNYXggbnVtYmVyIG9mIGZpbHRlciB2YWx1ZSBidWZmZXJzIHRoYXQgZGVjay5nbCBwcm92aWRlc1xuICovXG5leHBvcnQgY29uc3QgTUFYX0dQVV9GSUxURVJTID0gNDtcbmV4cG9ydCBjb25zdCBNQVBfVEhVTUJOQUlMX0RJTUVOU0lPTiA9IHtcbiAgd2lkdGg6IDMwMCxcbiAgaGVpZ2h0OiAyMDBcbn07XG5cbmV4cG9ydCBjb25zdCBNQVBfSU5GT19DSEFSQUNURVIgPSB7XG4gIHRpdGxlOiAxMDAsXG4gIGRlc2NyaXB0aW9uOiAxMDBcbn07XG5cbi8vIExvYWQgZGF0YVxuZXhwb3J0IGNvbnN0IExPQURJTkdfTUVUSE9EUyA9IGtleU1pcnJvcih7XG4gIHVwbG9hZDogbnVsbCxcbiAgc3RvcmFnZTogbnVsbCxcbiAgdGlsZXNldDogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFQVRVUkVfRkxBR1MgPSB7fTtcblxuZXhwb3J0IGNvbnN0IERBVEFTRVRfRk9STUFUUyA9IGtleU1pcnJvcih7XG4gIHJvdzogbnVsbCxcbiAgZ2VvanNvbjogbnVsbCxcbiAgY3N2OiBudWxsLFxuICBrZXBsZXJnbDogbnVsbCxcbiAgYXJyb3c6IG51bGwsXG4gIGR1Y2tkYjogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBNQVBfQ09OVFJPTFMgPSBrZXlNaXJyb3Ioe1xuICB2aXNpYmxlTGF5ZXJzOiBudWxsLFxuICBtYXBMZWdlbmQ6IG51bGwsXG4gIHRvZ2dsZTNkOiBudWxsLFxuICBzcGxpdE1hcDogbnVsbCxcbiAgbWFwRHJhdzogbnVsbCxcbiAgbWFwTG9jYWxlOiBudWxsLFxuICBtYXBUaGVtZTogbnVsbCxcbiAgZWZmZWN0OiBudWxsLFxuICBhbm5vdGF0aW9uOiBudWxsXG59KTtcblxuZXhwb3J0IGVudW0gTWFwVmlld01vZGUge1xuICBNT0RFXzJEID0gJ01PREVfMkQnLFxuICBNT0RFXzNEID0gJ01PREVfM0QnLFxuICBNT0RFX0dMT0JFID0gJ01PREVfR0xPQkUnXG59XG5cbi8qKlxuICogTWluaW11bSB6b29tIGxldmVsIGFsbG93ZWQgaW4gZ2xvYmUgbW9kZS4gTmVnYXRpdmUgdmFsdWVzIGxldCB0aGUgdXNlciB6b29tXG4gKiBvdXQgZnVydGhlciB0aGFuIHRoZSB3ZWItbWVyY2F0b3IgZGVmYXVsdCBvZiAwLCBzbyB0aGUgd2hvbGUgZ2xvYmUgY2FuIGJlXG4gKiBwdWxsZWQgYmFjayB0byBhcHBlYXIgc21hbGxlciBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CRV9NSU5fWk9PTSA9IDI7XG5cbi8qKlxuICogTWF4aW11bSB6b29tIGluIGdsb2JlIG1vZGUuXG4gKlxuICogVGhlIHByZXZpb3VzIFwiZW1wdHkgcmVjdGFuZ2xlc1wiIGF0IGhpZ2ggem9vbSB3ZXJlIGNhdXNlZCBieSB0aGUgdmVjdG9yIGJhc2VtYXBcbiAqIGxheWVyIGRlY2xhcmluZyBgbWF4Wm9vbTogMjNgIHdoaWxlIHRoZSByYXcgdGlsZSBlbmRwb2ludHMgb25seSBoYXZlIGRhdGEgdG9cbiAqIHoxNiAobWFwYm94LXN0cmVldHMtdjgpIC8gejE0IChDQVJUTykg4oCUIGRlY2sgdGhlbiByZXF1ZXN0ZWQgbm9uLWV4aXN0ZW50IHRpbGVzXG4gKiB0aGF0IDQwNC4gVGhhdCBpcyBmaXhlZCBpbiBgZ2V0R2xvYmVCYXNlTGF5ZXJzYCBieSBzZXR0aW5nIGBtYXhab29tYCB0byBlYWNoXG4gKiBzb3VyY2UncyB0cnVlIGRhdGEgbWF4IHNvIGRlY2sgb3Zlcnpvb21zIGluc3RlYWQuXG4gKlxuICogVGhlIHJlbWFpbmluZyBwcmFjdGljYWwgY2VpbGluZyBpcyBmbG9hdDMyIHByZWNpc2lvbjogZGVjaydzIGdsb2JlIHBsYWNlc1xuICogZ2VvbWV0cnkgaW4gY29tbW9uIHNwYWNlIG9uIGEgc3BoZXJlIG9mIHJhZGl1cyAyNTYgd2l0aCBubyBmcDY0L3JlbGF0aXZlLXRvLVxuICogY2VudGVyIHRyaWNrLCBzbyBiZXlvbmQgfnZpc3VhbC16b29tIDE2IChyb3VnaGx5IHRoaXMgbWFwU3RhdGUgem9vbSBtaW51c1xuICogYHpvb21BZGp1c3QobGF0KWAg4omIIDEuNjUgYXQgdGhlIGVxdWF0b3IpIGdlb21ldHJ5IHN0YXJ0cyB0byBqaXR0ZXIvZHJpZnQuXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CRV9NQVhfWk9PTSA9IDE2O1xuXG4vKipcbiAqIE1heGltdW0gYWJzb2x1dGUgY2VudGVyIGxhdGl0dWRlIGFsbG93ZWQgaW4gZ2xvYmUgbW9kZS4gQ29uc3RyYWlucyB0aGUgY2FtZXJhXG4gKiB0YXJnZXQgdG8gYSBiYW5kIGFyb3VuZCB0aGUgZXF1YXRvciBzbyB0aGUgdmlldyBjYW4ndCBiZSBjZW50ZXJlZCBvbiB0aGVcbiAqIHBvbGVzIChkZWNrLmdsJ3MgZGVmYXVsdCBjbGFtcHMgdG8gfjg1wrAsIHdoaWNoIGxldHMgdGhlIGNhbWVyYSBzdGFyZSBzdHJhaWdodFxuICogZG93biBhdCBhIHBvbGUpLiBBcHBsaWVzIHN5bW1ldHJpY2FsbHkgdG8gdGhlIG5vcnRoZXJuIGFuZCBzb3V0aGVybiBoZW1pc3BoZXJlLlxuICovXG5leHBvcnQgY29uc3QgR0xPQkVfTUFYX0xBVElUVURFID0gNzU7XG5cbmV4cG9ydCB0eXBlIEdsb2JlQ29uZmlnID0ge1xuICBhdG1vc3BoZXJlOiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBkcmF3IGEgbGFyZ2Ugc3VuLWluZGVwZW5kZW50IHVuaWZvcm0gZ2xvdyBpbiBhZGRpdGlvbiB0byB0aGVcbiAgICogcmVhbGlzdGljIHNjYXR0ZXJpbmcgc2t5IGhhbG8uXG4gICAqL1xuICBodWdlSGFsbzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE11bHRpcGxpZXIgZm9yIGh1Z2UtaGFsbyBzaGVsbCB0aGlja25lc3MuIGAxYCBpcyB0aGUgYmFzZWxpbmUgKH4xNCUgYmV5b25kXG4gICAqIHRoZSBnbG9iZSk7IHRoZSBjb25maWd1cmVkIGRlZmF1bHQgaXMgMy41LlxuICAgKi9cbiAgaHVnZUhhbG9SYWRpdXM6IG51bWJlcjtcbiAgLyoqIE9wYWNpdHkgb2YgdGhlIGh1Z2UtaGFsbyBnbG93ICgw4oCTMSkuIERlZmF1bHQ6IDAuMi4gKi9cbiAgaHVnZUhhbG9PcGFjaXR5OiBudW1iZXI7XG4gIGF6aW11dGg6IGJvb2xlYW47XG4gIGF6aW11dGhBbmdsZTogbnVtYmVyO1xuICB0ZXJtaW5hdG9yOiBib29sZWFuO1xuICB0ZXJtaW5hdG9yT3BhY2l0eTogbnVtYmVyO1xuICBiYXNlbWFwOiBib29sZWFuO1xuICBsYWJlbHM6IGJvb2xlYW47XG4gIGxhYmVsc0NvbG9yOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIGFkbWluTGluZXM6IGJvb2xlYW47XG4gIGFkbWluTGluZXNDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICB3YXRlcjogYm9vbGVhbjtcbiAgd2F0ZXJDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBzdXJmYWNlQ29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc3VyZmFjZTogYm9vbGVhbjtcbiAgYmFja2dyb3VuZENvbG9yOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHN0YXJzOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgR2xvYmUgPSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGNvbmZpZzogR2xvYmVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9HTE9CRV9DT05GSUc6IEdsb2JlQ29uZmlnID0ge1xuICBhdG1vc3BoZXJlOiB0cnVlLFxuICBodWdlSGFsbzogdHJ1ZSxcbiAgaHVnZUhhbG9SYWRpdXM6IDMuNSxcbiAgaHVnZUhhbG9PcGFjaXR5OiAwLjIsXG4gIGF6aW11dGg6IGZhbHNlLFxuICBhemltdXRoQW5nbGU6IDQ1LFxuICB0ZXJtaW5hdG9yOiB0cnVlLFxuICB0ZXJtaW5hdG9yT3BhY2l0eTogMC4zNSxcbiAgYmFzZW1hcDogdHJ1ZSxcbiAgbGFiZWxzOiBmYWxzZSxcbiAgbGFiZWxzQ29sb3I6IFsxMTQuNzUsIDExNC43NSwgMTE0Ljc1XSxcbiAgYWRtaW5MaW5lczogdHJ1ZSxcbiAgYWRtaW5MaW5lc0NvbG9yOiBbNDAsIDYzLCA5M10sXG4gIHdhdGVyOiB0cnVlLFxuICB3YXRlckNvbG9yOiBbMTcsIDM1LCA0OF0sXG4gIHN1cmZhY2U6IHRydWUsXG4gIHN1cmZhY2VDb2xvcjogWzksIDE2LCAyOV0sXG4gIC8vIENvbG9yIG9mIHRoZSBlbXB0eSBzcGFjZSByZW5kZXJlZCBhcm91bmQgdGhlIGdsb2JlIChkZWNrLmdsIGNsZWFyIGNvbG9yKS5cbiAgLy8gTWF0Y2hlcyB0aGUgcHJldmlvdXMgaGFyZGNvZGVkIGNsZWFyIGNvbG9yIFswLjAxNSwgMC4wMzUsIDAuMDY1XSBpbiAwLTEgc3BhY2UuXG4gIGJhY2tncm91bmRDb2xvcjogWzQsIDksIDE3XSxcbiAgLy8gU3RhcmZpZWxkIGJlaGluZCB0aGUgZ2xvYmUgaXMgb24gYnkgZGVmYXVsdCBpbiBnbG9iZSB2aWV3LlxuICBzdGFyczogdHJ1ZVxufTtcblxuZXhwb3J0IGNvbnN0IEdMT0JFX1NVUFBPUlRFRF9MQVlFUlM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge1xuICBwb2ludDogdHJ1ZSxcbiAgYXJjOiB0cnVlLFxuICBncmlkOiB0cnVlLFxuICBoZXhhZ29uOiB0cnVlLFxuICBnZW9qc29uOiB0cnVlLFxuICBjbHVzdGVyOiB0cnVlLFxuICBpY29uOiB0cnVlLFxuICBoZXhhZ29uSWQ6IHRydWUsXG4gICczRCc6IHRydWUsXG4gIHZlY3RvclRpbGU6IHRydWUsXG4gIGhleFRpbGU6IHRydWUsXG4gIGxpbmU6IHRydWUsXG4gIHRyaXA6IHRydWUsXG4gIHJhc3RlclRpbGU6IHRydWUsXG4gIGhlYXRtYXA6IHRydWUsXG4gIHMyOiBmYWxzZSxcbiAgdGlsZTNkOiBmYWxzZSxcbiAgLy8gRmxvdyBhcnJvd3MgYXJlIGZsYXQgcXVhZHMgaW4gY29tbW9uIHNwYWNlIChlcXVhdG9yaWFsIHBsYW5lKSBhbmQgY29sbGFwc2Ugd2hlblxuICAvLyB2aWV3ZWQgZWRnZS1vbiBvbiB0aGUgZ2xvYmUsIHNvIHRoZSBmbG93IGxheWVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gR2xvYmUgbW9kZS5cbiAgZmxvdzogZmFsc2Vcbn07XG5cbmV4cG9ydCBlbnVtIE1hcFNwbGl0TW9kZSB7XG4gIFNJTkdMRV9NQVAgPSAnU0lOR0xFX01BUCcsXG4gIERVQUxfTUFQID0gJ0RVQUxfTUFQJyxcbiAgU1dJUEVfQ09NUEFSRSA9ICdTV0lQRV9DT01QQVJFJ1xufVxuXG4vKipcbiAqIEEgbXVsdGlwbGllciBmb3Igc2NyZWVuLXNwYWNlIHdpZHRoL3NjYWxlIGZvciBBcmMsIExpbmUsIEljb24gYW5kIFRleHQgbGF5ZXJzLlxuICogUmVxdWlyZWQgaW4gb3JkZXIgdG8gbWFpbnRhaW4gdGhlIHNhbWUgYXBwZWFyYW5jZSBhZnRlciB1cGdyYWRpbmcgdG8gZGVjay5nbCB2OC41LlxuICogaHR0cHM6Ly9naXRodWIuY29tL3Zpc2dsL2RlY2suZ2wvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlLWd1aWRlLm1kXG4gKi9cbmV4cG9ydCBjb25zdCBQUk9KRUNURURfUElYRUxfU0laRV9NVUxUSVBMSUVSID0gMiAvIDM7XG5cbi8qKlxuICogTWF4aW11bSB2YWx1ZSBmb3IgdGV4dCBvdXRsaW5lIHdpZHRoXG4gKi9cbmV4cG9ydCBjb25zdCBURVhUX09VVExJTkVfTVVMVElQTElFUiA9IDU7XG5cbmV4cG9ydCBjb25zdCBkYXRhVGVzdElkczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgaW5mb0ljb246ICdpbmZvLWljb24nLFxuICB3YXJuaW5nSWNvbjogJ3dhcm5pbmctaWNvbicsXG4gIGVycm9ySWNvbjogJ2Vycm9yLWljb24nLFxuICBzdWNjZXNzSWNvbjogJ3N1Y2Nlc3MtaWNvbicsXG4gIGNoZWNrbWFya0ljb246ICdjaGVja21hcmstaWNvbicsXG4gIGNvcHlOb3RpZmljYXRpb25JY29uOiAnY29weS1ub3RpZmljYXRpb24taWNvbicsXG4gIHNvcnRhYmxlTGF5ZXJJdGVtOiAnc29ydGFibGUtbGF5ZXItaXRlbScsXG4gIHN0YXRpY0xheWVySXRlbTogJ3N0YXRpYy1sYXllci1pdGVtJyxcbiAgbGF5ZXJUaXRsZUVkaXRvcjogJ2xheWVyX190aXRsZV9fZWRpdG9yJyxcbiAgcmVtb3ZlTGF5ZXJBY3Rpb246ICdyZW1vdmUtbGF5ZXItYWN0aW9uJyxcbiAgbGF5ZXJQYW5lbDogJ2xheWVyLXBhbmVsJyxcbiAgc29ydGFibGVFZmZlY3RJdGVtOiAnc29ydGFibGUtZWZmZWN0LWl0ZW0nLFxuICBzdGF0aWNFZmZlY3RJdGVtOiAnc3RhdGljLWVmZmVjdC1pdGVtJyxcbiAgcHJvdmlkZXJMb2FkaW5nOiAncHJvdmlkZXItbG9hZGluZycsXG4gIHByb3ZpZGVyTWFwSW5mb1BhbmVsOiAncHJvdmlkZXItbWFwLWluZm8tcGFuZWwnLFxuICBwcm92aWRlclNlbGVjdDogJ3Byb3ZpZGVyLXNlbGVjdCcsXG4gIGNsb3VkSGVhZGVyOiAnY2xvdWQtaGVhZGVyJyxcbiAgcHJvdmlkZXJTaGFyZU1hcDogJ3Byb3ZpZGVyLXNoYXJlLW1hcCdcbn07XG5cbi8vIEVmZmVjdHNcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVaT05FID0gJ1VUQyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NUX1BST0NFU1NJTkdfRUZGRUNUX1RZUEUgPSAnaW5rJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElHSFRfQ09MT1I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFsyNTUsIDI1NSwgMjU1XTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJR0hUX0lOVEVOU0lUWSA9IDE7XG5leHBvcnQgY29uc3QgREVGQVVMVF9TSEFET1dfSU5URU5TSVRZID0gMC41O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0hBRE9XX0NPTE9SOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbMCwgMCwgMF07XG5cbmV4cG9ydCBjb25zdCBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTID0ge1xuICBwaWNrOiAncGljaycgYXMgY29uc3QsXG4gIGN1cnJlbnQ6ICdjdXJyZW50JyBhcyBjb25zdCxcbiAgYW5pbWF0aW9uOiAnYW5pbWF0aW9uJyBhcyBjb25zdFxufTtcbmV4cG9ydCB0eXBlIExpZ2h0QW5kU2hhZG93RWZmZWN0VGltZU1vZGUgPSAncGljaycgfCAnY3VycmVudCcgfCAnYW5pbWF0aW9uJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJR0hUX0FORF9TSEFET1dfUFJPUFM6IHtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHRpbWVNb2RlOiBMaWdodEFuZFNoYWRvd0VmZmVjdFRpbWVNb2RlO1xuICBzaGFkb3dJbnRlbnNpdHk6IG51bWJlcjtcbiAgc2hhZG93Q29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc3VuTGlnaHRDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBzdW5MaWdodEludGVuc2l0eTogbnVtYmVyO1xuICBhbWJpZW50TGlnaHRDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBhbWJpZW50TGlnaHRJbnRlbnNpdHk6IG51bWJlcjtcbn0gPSB7XG4gIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgdGltZU1vZGU6IExJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMucGljayBhcyBMaWdodEFuZFNoYWRvd0VmZmVjdFRpbWVNb2RlLFxuICBzaGFkb3dJbnRlbnNpdHk6IERFRkFVTFRfU0hBRE9XX0lOVEVOU0lUWSxcbiAgc2hhZG93Q29sb3I6IFsuLi5ERUZBVUxUX1NIQURPV19DT0xPUl0gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBzdW5MaWdodENvbG9yOiBbLi4uREVGQVVMVF9MSUdIVF9DT0xPUl0gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBzdW5MaWdodEludGVuc2l0eTogREVGQVVMVF9MSUdIVF9JTlRFTlNJVFksXG4gIGFtYmllbnRMaWdodENvbG9yOiBbLi4uREVGQVVMVF9MSUdIVF9DT0xPUl0gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBhbWJpZW50TGlnaHRJbnRlbnNpdHk6IERFRkFVTFRfTElHSFRfSU5URU5TSVRZXG59O1xuXG5leHBvcnQgY29uc3QgTElHSFRfQU5EX1NIQURPV19FRkZFQ1Q6IEVmZmVjdERlc2NyaXB0aW9uID0ge1xuICB0eXBlOiAnbGlnaHRBbmRTaGFkb3cnLFxuICBuYW1lOiAnTGlnaHQgJiBTaGFkb3cnLFxuICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmxpZ2h0QW5kU2hhZG93JyxcbiAgcGFyYW1ldGVyczogW1xuICAgIHtuYW1lOiAndGltZXN0YW1wJywgbWluOiAwLCBtYXg6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSfSxcbiAgICB7bmFtZTogJ3NoYWRvd0ludGVuc2l0eScsIG1pbjogMCwgbWF4OiAxLCBkZWZhdWx0VmFsdWU6IERFRkFVTFRfU0hBRE9XX0lOVEVOU0lUWX0sXG4gICAge25hbWU6ICdzdW5MaWdodEludGVuc2l0eScsIG1pbjogMCwgbWF4OiA1LCBkZWZhdWx0VmFsdWU6IERFRkFVTFRfTElHSFRfSU5URU5TSVRZfSxcbiAgICB7bmFtZTogJ2FtYmllbnRMaWdodEludGVuc2l0eScsIG1pbjogMCwgbWF4OiA1LCBkZWZhdWx0VmFsdWU6IERFRkFVTFRfTElHSFRfSU5URU5TSVRZfSxcbiAgICB7bmFtZTogJ3NoYWRvd0NvbG9yJywgdHlwZTogJ2NvbG9yJywgbWluOiAwLCBtYXg6IDI1NSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1NIQURPV19DT0xPUn0sXG4gICAge25hbWU6ICdzdW5MaWdodENvbG9yJywgdHlwZTogJ2NvbG9yJywgbWluOiAwLCBtYXg6IDI1NSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xJR0hUX0NPTE9SfSxcbiAgICB7bmFtZTogJ2FtYmllbnRMaWdodENvbG9yJywgdHlwZTogJ2NvbG9yJywgbWluOiAwLCBtYXg6IDI1NSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xJR0hUX0NPTE9SfVxuICBdXG59O1xuXG5leHBvcnQgY29uc3QgRElTVEFOQ0VfRk9HX1RZUEUgPSAnZGlzdGFuY2VGb2cnO1xuZXhwb3J0IGNvbnN0IFNVUkZBQ0VfRk9HX1RZUEUgPSAnc3VyZmFjZUZvZyc7XG5cbmV4cG9ydCBjb25zdCBQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTOiB7W2tleTogc3RyaW5nXTogRWZmZWN0RGVzY3JpcHRpb259ID0ge1xuICBpbms6IHtcbiAgICB0eXBlOiAnaW5rJyxcbiAgICBuYW1lOiAnSW5rJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmluaycsXG4gICAgcGFyYW1ldGVyczogW3tuYW1lOiAnc3RyZW5ndGgnLCBtaW46IDAsIG1heDogMX1dXG4gIH0sXG4gIGJyaWdodG5lc3NDb250cmFzdDoge1xuICAgIHR5cGU6ICdicmlnaHRuZXNzQ29udHJhc3QnLFxuICAgIG5hbWU6ICdCcmlnaHRuZXNzICYgQ29udHJhc3QnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uYnJpZ2h0bmVzc0NvbnRyYXN0JyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7bmFtZTogJ2JyaWdodG5lc3MnLCBtaW46IC0xLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdjb250cmFzdCcsIG1pbjogLTEsIG1heDogMX1cbiAgICBdXG4gIH0sXG4gIGh1ZVNhdHVyYXRpb246IHtcbiAgICB0eXBlOiAnaHVlU2F0dXJhdGlvbicsXG4gICAgbmFtZTogJ0h1ZSAmIFNhdHVyYXRpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uaHVlU2F0dXJhdGlvbicsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge25hbWU6ICdodWUnLCBtaW46IC0xLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdzYXR1cmF0aW9uJywgZGVmYXVsdFZhbHVlOiAwLjI1LCBtaW46IC0xLCBtYXg6IDF9XG4gICAgXVxuICB9LFxuICB2aWJyYW5jZToge1xuICAgIHR5cGU6ICd2aWJyYW5jZScsXG4gICAgbmFtZTogJ1ZpYnJhbmNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnZpYnJhbmNlJyxcbiAgICBwYXJhbWV0ZXJzOiBbe25hbWU6ICdhbW91bnQnLCBkZWZhdWx0VmFsdWU6IDAuNSwgbWluOiAtMSwgbWF4OiAxfV1cbiAgfSxcbiAgc2VwaWE6IHtcbiAgICB0eXBlOiAnc2VwaWEnLFxuICAgIG5hbWU6ICdTZXBpYScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5zZXBpYScsXG4gICAgcGFyYW1ldGVyczogW3tuYW1lOiAnYW1vdW50JywgbWluOiAwLCBtYXg6IDF9XVxuICB9LFxuICBkb3RTY3JlZW46IHtcbiAgICB0eXBlOiAnZG90U2NyZWVuJyxcbiAgICBuYW1lOiAnRG90IFNjcmVlbicsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5kb3RTY3JlZW4nLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2FuZ2xlJyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IE1hdGguUEkgLyAyXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2l6ZScsXG4gICAgICAgIG1pbjogMSxcbiAgICAgICAgbWF4OiAyMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NlbnRlcicsXG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIGxhYmVsOiBbJ0NlbnRlciBYJywgJ0NlbnRlciBZJ10sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzAuNSwgMC41XSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIGNvbG9ySGFsZnRvbmU6IHtcbiAgICB0eXBlOiAnY29sb3JIYWxmdG9uZScsXG4gICAgbmFtZTogJ0NvbG9yIEhhbGZ0b25lJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmNvbG9ySGFsZnRvbmUnLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2FuZ2xlJyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IE1hdGguUEkgLyAyXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2l6ZScsXG4gICAgICAgIG1pbjogMSxcbiAgICAgICAgbWF4OiAyMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NlbnRlcicsXG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIGxhYmVsOiBbJ0NlbnRlciBYJywgJ0NlbnRlciBZJ10sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzAuNSwgMC41XSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIG5vaXNlOiB7XG4gICAgdHlwZTogJ25vaXNlJyxcbiAgICBuYW1lOiAnTm9pc2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24ubm9pc2UnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ2Ftb3VudCcsIG1pbjogMCwgbWF4OiAxfV1cbiAgfSxcbiAgdHJpYW5nbGVCbHVyOiB7XG4gICAgdHlwZTogJ3RyaWFuZ2xlQmx1cicsXG4gICAgbmFtZTogJ0JsdXIgKFRyaWFuZ2xlKScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi50cmlhbmdsZUJsdXInLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ3JhZGl1cycsIG1pbjogMCwgbWF4OiAxMDB9XVxuICB9LFxuICB6b29tQmx1cjoge1xuICAgIHR5cGU6ICd6b29tQmx1cicsXG4gICAgbmFtZTogJ0JsdXIgKFpvb20pJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnpvb21CbHVyJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdHJlbmd0aCcsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMC4wNSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjZW50ZXInLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydDZW50ZXIgWCcsICdDZW50ZXIgWSddLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLjUsIDAuNV0sXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB0aWx0U2hpZnQ6IHtcbiAgICB0eXBlOiAndGlsdFNoaWZ0JyxcbiAgICBuYW1lOiAnQmx1ciAoVGlsdCBTaGlmdCknLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24udGlsdFNoaWZ0JyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdibHVyUmFkaXVzJyxcbiAgICAgICAgbGFiZWw6ICdCbHVyJyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDUwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZ3JhZGllbnRSYWRpdXMnLFxuICAgICAgICBsYWJlbDogJ0dyYWRpZW50JyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDQwMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3N0YXJ0JyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgbGFiZWw6IFsnU3RhcnQnLCBmYWxzZV0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzAuMCwgMC4wXSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdlbmQnLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydFbmQnLCBmYWxzZV0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzEsIDFdLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1heDogMVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAgZWRnZVdvcms6IHtcbiAgICB0eXBlOiAnZWRnZVdvcmsnLFxuICAgIG5hbWU6ICdFZGdlIHdvcmsnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uZWRnZVdvcmsnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ3JhZGl1cycsIG1pbjogMSwgbWF4OiA1MH1dXG4gIH0sXG4gIHZpZ25ldHRlOiB7XG4gICAgdHlwZTogJ3ZpZ25ldHRlJyxcbiAgICBuYW1lOiAnVmlnbmV0dGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24udmlnbmV0dGUnLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtuYW1lOiAnYW1vdW50JywgbWluOiAwLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdyYWRpdXMnLCBtaW46IDAsIG1heDogMX1cbiAgICBdXG4gIH0sXG4gIG1hZ25pZnk6IHtcbiAgICB0eXBlOiAnbWFnbmlmeScsXG4gICAgbmFtZTogJ01hZ25pZnknLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24ubWFnbmlmeScsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnc2NyZWVuWFknLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydQb3NpdGlvbiBYJywgJ1Bvc2l0aW9uIFknXSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBbMC41LCAwLjVdLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1heDogMVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3JhZGl1c1BpeGVscycsXG4gICAgICAgIGxhYmVsOiAnU2l6ZScsXG4gICAgICAgIG1pbjogMTAsXG4gICAgICAgIG1heDogNTAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnem9vbScsXG4gICAgICAgIG1pbjogMC41LFxuICAgICAgICBtYXg6IDUwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYm9yZGVyV2lkdGhQaXhlbHMnLFxuICAgICAgICBsYWJlbDogJ0JvcmRlciBXaWR0aCcsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDUwXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBoZXhhZ29uYWxQaXhlbGF0ZToge1xuICAgIHR5cGU6ICdoZXhhZ29uYWxQaXhlbGF0ZScsXG4gICAgbmFtZTogJ0hleGFnb25hbCBQaXhlbGF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5oZXhhZ29uYWxQaXhlbGF0ZScsXG4gICAgcGFyYW1ldGVyczogW3tuYW1lOiAnc2NhbGUnLCBkZWZhdWx0VmFsdWU6IDIwLCBtaW46IDEsIG1heDogNTB9XVxuICB9LFxuICBkaXN0YW5jZUZvZzoge1xuICAgIHR5cGU6IERJU1RBTkNFX0ZPR19UWVBFLFxuICAgIG5hbWU6ICdEaXN0YW5jZSBGb2cnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uZGlzdGFuY2VGb2cnLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtuYW1lOiAnZGVuc2l0eScsIGRlZmF1bHRWYWx1ZTogMC41LCBtaW46IDAsIG1heDogMX0sXG4gICAgICB7bmFtZTogJ2ZvZ1N0YXJ0JywgbGFiZWw6ICdTdGFydCcsIGRlZmF1bHRWYWx1ZTogMC4zLCBtaW46IDAsIG1heDogMX0sXG4gICAgICB7bmFtZTogJ2ZvZ1JhbmdlJywgbGFiZWw6ICdSYW5nZScsIGRlZmF1bHRWYWx1ZTogMC41LCBtaW46IDAuMDEsIG1heDogMX0sXG4gICAgICB7bmFtZTogJ2ZvZ0NvbG9yJywgdHlwZTogJ2NvbG9yJywgbWluOiAwLCBtYXg6IDI1NSwgZGVmYXVsdFZhbHVlOiBbMjE3LCAyMjIsIDIzMF19XG4gICAgXVxuICB9LFxuICBzdXJmYWNlRm9nOiB7XG4gICAgdHlwZTogU1VSRkFDRV9GT0dfVFlQRSxcbiAgICBuYW1lOiAnU3VyZmFjZSBGb2cnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uc3VyZmFjZUZvZycsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge25hbWU6ICdkZW5zaXR5JywgZGVmYXVsdFZhbHVlOiAwLjYsIG1pbjogMCwgbWF4OiAxfSxcbiAgICAgIHtuYW1lOiAnaGVpZ2h0JywgbGFiZWw6ICdFbGV2YXRpb24gKG0pJywgZGVmYXVsdFZhbHVlOiA1MCwgbWluOiAtMjAwLCBtYXg6IDYwMDB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYW5pbWF0ZUhlaWdodCcsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIGxhYmVsOiAnQW5pbWF0ZSBFbGV2YXRpb24nLFxuICAgICAgICB0b29sdGlwOlxuICAgICAgICAgICdBbmltYXRlcyBlbGV2YXRpb24gZnJvbSBzdGFydCB0byBlbmQgdmFsdWUgZHVyaW5nIHZpZGVvIGV4cG9ydCBwcmV2aWV3IGFuZCByZWNvcmRpbmcuJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7bmFtZTogJ2hlaWdodEVuZCcsIGxhYmVsOiAnRW5kIEVsZXZhdGlvbiAobSknLCBkZWZhdWx0VmFsdWU6IDEwMCwgbWluOiAtMjAwLCBtYXg6IDYwMDB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnbGluZWFyRWFzaW5nJyxcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgbGFiZWw6ICdMaW5lYXIgRWFzaW5nJyxcbiAgICAgICAgdG9vbHRpcDpcbiAgICAgICAgICAnVXNlcyBjb25zdGFudCBzcGVlZCBpbnN0ZWFkIG9mIHNtb290aCBlYXNlLWluIC8gZWFzZS1vdXQgZHVyaW5nIGVsZXZhdGlvbiBhbmltYXRpb24uJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7bmFtZTogJ3RoaWNrbmVzcycsIGxhYmVsOiAnVHJhbnNpdGlvbiAobSknLCBkZWZhdWx0VmFsdWU6IDUwLCBtaW46IDAsIG1heDogMTAwMH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdmb2dDb2xvcicsXG4gICAgICAgIHR5cGU6ICdjb2xvcicsXG4gICAgICAgIGxhYmVsOiAnRm9nIENvbG9yJyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDI1NSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBbMjMwLCAyMzUsIDI0Ml1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwYXR0ZXJuJyxcbiAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgbGFiZWw6ICdQYXR0ZXJuJyxcbiAgICAgICAgdG9vbHRpcDogJ0FkZHMgYSBub2lzZSBwYXR0ZXJuIHRvIHRoZSBmb2cgZm9yIGEgbW9yZSBuYXR1cmFsLCB2b2x1bWV0cmljIGxvb2suJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH1cbiAgICBdXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBFRkZFQ1RfREVTQ1JJUFRJT05TOiBFZmZlY3REZXNjcmlwdGlvbltdID0gW1xuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgLi4uT2JqZWN0LmtleXMoUE9TVFBST0NFU1NJTkdfRUZGRUNUUykubWFwKGtleU5hbWUgPT4gUE9TVFBST0NFU1NJTkdfRUZGRUNUU1trZXlOYW1lXSlcbl07XG5cbmV4cG9ydCB0eXBlIEVmZmVjdFR5cGUgPVxuICB8ICdpbmsnXG4gIHwgJ2JyaWdodG5lc3NDb250cmFzdCdcbiAgfCAnaHVlU2F0dXJhdGlvbidcbiAgfCAndmlicmFuY2UnXG4gIHwgJ3NlcGlhJ1xuICB8ICdkb3RTY3JlZW4nXG4gIHwgJ2NvbG9ySGFsZnRvbmUnXG4gIHwgJ25vaXNlJ1xuICB8ICd0cmlhbmdsZUJsdXInXG4gIHwgJ3pvb21CbHVyJ1xuICB8ICd0aWx0U2hpZnQnXG4gIHwgJ2VkZ2VXb3JrJ1xuICB8ICd2aWduZXR0ZSdcbiAgfCAnbWFnbmlmeSdcbiAgfCAnaGV4YWdvbmFsUGl4ZWxhdGUnXG4gIHwgJ2Rpc3RhbmNlRm9nJ1xuICB8ICdzdXJmYWNlRm9nJ1xuICB8ICdsaWdodEFuZFNoYWRvdyc7XG5cbmV4cG9ydCBjb25zdCBTWU5DX1RJTUVMSU5FX01PREVTOiBSZWNvcmQ8c3RyaW5nLCBTeW5jVGltZWxpbmVNb2RlPiA9IHtcbiAgc3RhcnQ6IDAsXG4gIGVuZDogMVxufTtcblxuZXhwb3J0IGNvbnN0IEdFT0FSUk9XX01FVEFEQVRBX0tFWSA9ICdBUlJPVzpleHRlbnNpb246bmFtZSc7XG5cbi8qKlxuICogRW51bSBob2xkaW5nIEdlb0Fycm93IGV4dGVuc2lvbiB0eXBlIG5hbWVzXG4gKi9cbmV4cG9ydCBlbnVtIEdFT0FSUk9XX0VYVEVOU0lPTlMge1xuICBQT0lOVCA9ICdnZW9hcnJvdy5wb2ludCcsXG4gIExJTkVTVFJJTkcgPSAnZ2VvYXJyb3cubGluZXN0cmluZycsXG4gIFBPTFlHT04gPSAnZ2VvYXJyb3cucG9seWdvbicsXG4gIE1VTFRJUE9JTlQgPSAnZ2VvYXJyb3cubXVsdGlwb2ludCcsXG4gIE1VTFRJTElORVNUUklORyA9ICdnZW9hcnJvdy5tdWx0aWxpbmVzdHJpbmcnLFxuICBNVUxUSVBPTFlHT04gPSAnZ2VvYXJyb3cubXVsdGlwb2x5Z29uJyxcbiAgV0tCID0gJ2dlb2Fycm93LndrYidcbn1cblxuZXhwb3J0IGNvbnN0IExPQURFUlNfQ0ROX1ZFUlNJT04gPSAnNC4zLjInO1xuZXhwb3J0IGNvbnN0IExPQURFUlNfQ0ROX1VSTCA9ICdodHRwczovL3VucGtnLmNvbS9AbG9hZGVycy5nbCc7XG5cbmV4cG9ydCBjb25zdCBnZXRMb2FkZXJPcHRpb25zID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG12dDoge1xuICAgICAgd29ya2VyVXJsOiBgJHtMT0FERVJTX0NETl9VUkx9L212dEAke0xPQURFUlNfQ0ROX1ZFUlNJT059L2Rpc3QvbXZ0LXdvcmtlci5qc2BcbiAgICB9LFxuICAgICdxdWFudGl6ZWQtbWVzaCc6IHtcbiAgICAgIHdvcmtlclVybDogYCR7TE9BREVSU19DRE5fVVJMfS90ZXJyYWluQCR7TE9BREVSU19DRE5fVkVSU0lPTn0vZGlzdC9xdWFudGl6ZWQtbWVzaC13b3JrZXIuanNgXG4gICAgfSxcbiAgICBucHk6IHtcbiAgICAgIHdvcmtlclVybDogYCR7TE9BREVSU19DRE5fVVJMfS90ZXh0dXJlc0Ake0xPQURFUlNfQ0ROX1ZFUlNJT059L2Rpc3QvbnB5LXdvcmtlci5qc2BcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgQ1VTVE9NX1NDRU5FR1JBUEhfTU9ERUxfSUQgPSAnY3VzdG9tJztcbmNvbnN0IE1PREVMU19CQVNFX1VSTCA9XG4gICdodHRwczovL3N0dWRpby1wdWJsaWMtZGF0YS5mb3Vyc3F1YXJlLmNvbS9zdGF0aWNzL2tlcGxlcmdsLzNkLW1vZGVscy4yMDIyLTA2LTEzJztcblxuZXhwb3J0IGNvbnN0IFRSSVBfTEFZRVJfU0NFTkVHUkFQSF9NT0RFTFM6IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbjogYW55O1xuICB1cmw6IHN0cmluZyB8IG51bGw7XG4gIGFuZ2xlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBzY2FsZTogbnVtYmVyO1xufVtdID0gW1xuICB7XG4gICAgaWQ6ICdhaXJwbGFuZScsXG4gICAgbGFiZWw6ICdBaXJwbGFuZScsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vUGxhbmUuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2JvZWluZzc3NycsXG4gICAgbGFiZWw6ICdBaXJsaW5lcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vQWlybGluZXIuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ3ViZXItZXZ0b2wnLFxuICAgIGxhYmVsOiAnVlRPTCcsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vZXZ0b2wuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2hhbmctZ2xpZGVyJyxcbiAgICBsYWJlbDogJ0dsaWRlcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vSGFuZ2dsaWRlci5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAnaGVsaWNvcHRlcicsXG4gICAgbGFiZWw6ICdIZWxpY29wdGVyJyxcbiAgICBpY29uOiBudWxsLFxuICAgIHVybDogYCR7TU9ERUxTX0JBU0VfVVJMfS9IZWxpY29wdGVyLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdiaWN5Y2xlJyxcbiAgICBsYWJlbDogJ0JpY3ljbGUnLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0JpY3ljbGUuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ3Njb290ZXInLFxuICAgIGxhYmVsOiAnU2Nvb3RlcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vU2Nvb3Rlci5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAnY2FyJyxcbiAgICBsYWJlbDogJ0NhcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vQ2FyLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICd0cnVjaycsXG4gICAgbGFiZWw6ICdUcnVjaycsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vVHJ1Y2suZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NlbWl0cnVjaycsXG4gICAgbGFiZWw6ICdTZW1pdHJ1Y2snLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L1NlbWl0cnVjay5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAnY2FyZ29zaGlwJyxcbiAgICBsYWJlbDogJ0Nhcmdvc2hpcCcsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vQ2FyZ29zaGlwLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6IENVU1RPTV9TQ0VORUdSQVBIX01PREVMX0lELFxuICAgIGxhYmVsOiAnQ3VzdG9tJyxcbiAgICBpY29uOiBudWxsLFxuICAgIHVybDogbnVsbCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH1cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsU0FBUyxNQUFNLFdBQVc7QUFVakMsU0FDRUMsV0FBVyxFQUNYQyxRQUFRLEVBQ1JDLFlBQVksRUFDWkMsVUFBVSxFQUNWQyxhQUFhLEVBQ2JDLGFBQWEsRUFDYkMsU0FBUyxFQUNUQyxjQUFjLFFBQ1QsVUFBVTtBQUNqQixTQUFRQyxvQkFBb0IsUUFBTyxXQUFXO0FBRTlDLE9BQU8sSUFBTUMsYUFBYSxHQUFHLGNBQWM7QUFDM0MsT0FBTyxJQUFNQyxzQkFBc0IsR0FBRyw0REFBNEQ7QUFDbEcsT0FBTyxJQUFNQyxtQkFBbUIsWUFBWTtBQUM1QyxPQUFPLElBQU1DLHNCQUFzQixHQUFHLHdCQUF3QjtBQUM5RCxPQUFPLElBQU1DLG1CQUFtQixHQUFHLENBQUM7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxhQUFhLEdBQUcsV0FBVztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGNBQWMsR0FBRyxZQUFZO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsV0FBVyxHQUFHLFNBQVM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxlQUFlLEdBQUcsYUFBYTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGNBQWMsR0FBRyxZQUFZO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsZ0JBQWdCLEdBQUcsYUFBYTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGFBQWEsR0FBRyxXQUFXO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsZUFBZSxHQUFHLGFBQWE7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxXQUFXLEdBQUcsU0FBUztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGdCQUFnQixHQUFHLGNBQWM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxZQUFZLEdBQUcsVUFBVTtBQUV0QyxPQUFPLElBQU1DLGNBQWMsR0FBRyxXQUFXOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsaUJBQWlCLEdBQUcsZ0JBQXFCO0FBQ3RELE9BQU8sSUFBTUMsaUJBQWlCLEdBQUcsbUJBQW1CO0FBRXBELE9BQU8sSUFBTUMsVUFBVSxHQUFHO0VBQ3hCQyxTQUFTLEVBQUU7SUFDVEMsS0FBSyxFQUFFLEdBQUc7SUFDVkMsTUFBTSxFQUFFO01BQUNDLEdBQUcsRUFBRSxFQUFFO01BQUVDLElBQUksRUFBRSxFQUFFO01BQUVDLE1BQU0sRUFBRSxFQUFFO01BQUVDLEtBQUssRUFBRTtJQUFFLENBQUM7SUFDbERDLFlBQVksRUFBRTtFQUNoQixDQUFDO0VBQ0RDLFVBQVUsRUFBRTtJQUNWUCxLQUFLLEVBQUUsR0FBRztJQUNWUSxPQUFPLEVBQUUsRUFBRTtJQUNYQyxTQUFTLEVBQUU7TUFDVEMsTUFBTSxFQUFFO1FBQ05OLE1BQU0sRUFBRSxFQUFFO1FBQ1ZDLEtBQUssRUFBRTtNQUNUO0lBQ0Y7RUFDRjtBQUNGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTU0sS0FBSyxHQUFHMUMsU0FBUyxDQUFDO0VBQzdCMkMsS0FBSyxFQUFFLElBQUk7RUFDWEMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFO0FBQ1IsQ0FBQyxDQUFDO0FBRUYsT0FBTyxJQUFNQyxjQUFjLEdBQUcsQ0FDNUI7RUFDRUMsRUFBRSxFQUFFLE9BQU87RUFDWEMsS0FBSyxFQUFFLHNCQUFzQjtFQUM3QkMsT0FBTyxFQUFFO0FBQ1gsQ0FBQyxFQUNEO0VBQ0VGLEVBQUUsRUFBRSxRQUFRO0VBQ1pDLEtBQUssRUFBRSx1QkFBdUI7RUFDOUJDLE9BQU8sRUFBRTtBQUNYLENBQUMsRUFDRDtFQUNFRixFQUFFLEVBQUUsYUFBYTtFQUNqQkMsS0FBSyxFQUFFLDRCQUE0QjtFQUNuQ0MsT0FBTyxFQUFFO0FBQ1gsQ0FBQyxFQUNEO0VBQ0VGLEVBQUUsRUFBRSxLQUFLO0VBQ1RDLEtBQUssRUFBRSx3QkFBd0I7RUFDL0JDLE9BQU8sRUFBRTtBQUNYLENBQUMsQ0FDRjtBQUVELE9BQU8sSUFBTUMsa0JBQWtCLEdBQUdsRCxTQUFTLENBQUM7RUFDMUNtRCxJQUFJLEVBQUUsSUFBSTtFQUNWQyxTQUFTLEVBQUU7QUFDYixDQUFDLENBQUM7O0FBRUY7QUFDQSxPQUFPLElBQU1DLE1BQU0sR0FBR1AsY0FBYzs7QUFFcEM7O0FBRUEsT0FBTyxJQUFNUSxrQkFBa0IsR0FBRyxTQUFTO0FBRTNDLE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsU0FBUzs7QUFFakQ7QUFDQSxPQUFPLElBQU1DLDZCQUE2QixHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO0FBRWxGLE9BQU8sSUFBTUMsMkJBQTJCLEdBQUcsWUFBWTtBQUV2RCxPQUFPLElBQU1DLGlDQUFpQyxHQUFHLGFBQWE7QUFXOUQsT0FBTyxJQUFNQyxzQkFBMkMsR0FBRztFQUN6REMsSUFBSSxFQUFFSCwyQkFBMkI7RUFDakNJLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBO0lBQUEsT0FBUSxLQUFLO0VBQUE7RUFDbkJDLGlCQUFpQixFQUFFLEtBQUs7RUFDeEJDLDJCQUEyQixFQUFFLEtBQUs7RUFDbENDLG9CQUFvQixFQUFFLEtBQUs7RUFDM0JDLHNCQUFzQixFQUFFO0FBQzFCLENBQUM7QUFFRCxPQUFPLElBQU1DLG9CQUEyQyxHQUFHLENBQ3pEO0VBQ0VOLElBQUksRUFBRSxPQUFPO0VBQ2JDLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBTSxJQUFBO0lBQUEsSUFBSXBCLEVBQUUsR0FBQW9CLElBQUEsQ0FBRnBCLEVBQUU7TUFBRXFCLElBQUksR0FBQUQsSUFBQSxDQUFKQyxJQUFJO0lBQUEsT0FBTXJCLEVBQUUsQ0FBQ3NCLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxLQUFJRCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztFQUFBO0VBQzFGUCxpQkFBaUIsRUFBRSxJQUFJO0VBQ3ZCQywyQkFBMkIsRUFBRSxJQUFJO0VBQ2pDQyxvQkFBb0IsRUFBRSxJQUFJO0VBQzFCQyxzQkFBc0IsRUFBRTtBQUMxQixDQUFDLEVBQ0Q7RUFDRUwsSUFBSSxFQUFFLE1BQU07RUFDWkMsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUFTLEtBQUE7SUFBQSxJQUFJdkIsRUFBRSxHQUFBdUIsS0FBQSxDQUFGdkIsRUFBRTtJQUFBLE9BQU1BLEVBQUUsQ0FBQ3NCLEtBQUssQ0FBQyxvREFBb0QsQ0FBQztFQUFBO0VBQ2hGUCxpQkFBaUIsRUFBRSxJQUFJO0VBQ3ZCQywyQkFBMkIsRUFBRSxJQUFJO0VBQ2pDQyxvQkFBb0IsRUFBRSxJQUFJO0VBQzFCQyxzQkFBc0IsRUFBRTtBQUMxQixDQUFDLEVBQ0Q7RUFDRUwsSUFBSSxFQUFFLFFBQVE7RUFDZEMsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUFVLEtBQUE7SUFBQSxJQUFJeEIsRUFBRSxHQUFBd0IsS0FBQSxDQUFGeEIsRUFBRTtJQUFBLE9BQU1BLEVBQUUsQ0FBQ3NCLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQztFQUFBO0VBQ3hEUCxpQkFBaUIsRUFBRSxLQUFLO0VBQ3hCQywyQkFBMkIsRUFBRSxJQUFJO0VBQ2pDQyxvQkFBb0IsRUFBRSxJQUFJO0VBQzFCQyxzQkFBc0IsRUFBRTtBQUMxQixDQUFDLEVBQ0Q7RUFDRUwsSUFBSSxFQUFFLFVBQVU7RUFDaEJDLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBVyxLQUFBO0lBQUEsSUFBSXpCLEVBQUUsR0FBQXlCLEtBQUEsQ0FBRnpCLEVBQUU7SUFBQSxPQUFNQSxFQUFFLENBQUNzQixLQUFLLENBQUMsVUFBVSxDQUFDO0VBQUE7RUFDdENQLGlCQUFpQixFQUFFLElBQUk7RUFDdkJDLDJCQUEyQixFQUFFLElBQUk7RUFDakNDLG9CQUFvQixFQUFFLElBQUk7RUFDMUJDLHNCQUFzQixFQUFFO0FBQzFCLENBQUMsRUFDRDtFQUNFTCxJQUFJLEVBQUUsT0FBTztFQUNiQyxNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBQVksS0FBQTtJQUFBLElBQUkxQixFQUFFLEdBQUEwQixLQUFBLENBQUYxQixFQUFFO0lBQUEsT0FBTUEsRUFBRSxDQUFDc0IsS0FBSyxDQUFDLDBCQUEwQixDQUFDO0VBQUE7RUFDdERQLGlCQUFpQixFQUFFLElBQUk7RUFDdkJDLDJCQUEyQixFQUFFLElBQUk7RUFDakNDLG9CQUFvQixFQUFFLElBQUk7RUFDMUJDLHNCQUFzQixFQUFFO0FBQzFCLENBQUMsRUFDRDtFQUNFTCxJQUFJLEVBQUUsTUFBTTtFQUNaQyxNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBQWEsS0FBQTtJQUFBLElBQUkzQixFQUFFLEdBQUEyQixLQUFBLENBQUYzQixFQUFFO0lBQUEsT0FBTUEsRUFBRSxDQUFDc0IsS0FBSyxDQUFDLGlEQUFpRCxDQUFDO0VBQUE7RUFDN0VQLGlCQUFpQixFQUFFLElBQUk7RUFDdkJDLDJCQUEyQixFQUFFLElBQUk7RUFDakNDLG9CQUFvQixFQUFFLElBQUk7RUFDMUJDLHNCQUFzQixFQUFFO0FBQzFCLENBQUMsRUFDRDtFQUNFTCxJQUFJLEVBQUVGLGlDQUFpQztFQUN2Q0csTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUE7SUFBQSxPQUFRLEtBQUs7RUFBQTtFQUNuQkMsaUJBQWlCLEVBQUUsS0FBSztFQUN4QkMsMkJBQTJCLEVBQUUsSUFBSTtFQUNqQ0Msb0JBQW9CLEVBQUUsSUFBSTtFQUMxQkMsc0JBQXNCLEVBQUU7QUFDMUIsQ0FBQyxDQUNGO0FBRUQsT0FBTyxJQUFNVSxvQkFBb0IsR0FBRzNFLFNBQVMsQ0FBQztFQUM1QzRFLElBQUksRUFBRSxJQUFJO0VBQ1ZDLElBQUksRUFBRSxJQUFJO0VBQ1ZDLEtBQUssRUFBRTtBQUNULENBQUMsQ0FBQztBQUVGLE9BQU8sSUFBTUMsU0FBUyxHQUFHLFFBQVE7O0FBRWpDO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGtCQUFrQixHQUFHO0VBQ2hDQyxPQUFPLEVBQUUsQ0FBQztFQUNWQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0VBQ1hDLE1BQU0sRUFBRTtBQUNWLENBQUM7QUFFRCxPQUFPLElBQU1DLGVBQWUsR0FBRztFQUM3QkMsTUFBTSxFQUFFLFFBQWlCO0VBQ3pCQyxRQUFRLEVBQUU7QUFDWixDQUFDOztBQUVEO0FBQ0EsT0FBTyxJQUFNQyxnQkFBZ0IsR0FBRyxFQUFFO0FBSWxDLE9BQU8sSUFBTUMsZUFBZSxNQUFBQyxNQUFBLENBQU03RSxtQkFBbUIsb0JBQWlCO0FBRXRFLE9BQU8sSUFBTThFLHNCQUFzQixHQUFHLGFBQWE7QUFTbkQsT0FBTyxJQUFNQyx3QkFBNkMsR0FBRztFQUMzRDVDLEVBQUUsRUFBRWdDLFNBQVM7RUFDYi9CLEtBQUssRUFBRSxZQUFZO0VBQ25CNEMsR0FBRyxFQUFFLEVBQUU7RUFDUEMsSUFBSSxFQUFFTCxlQUFlO0VBQ3JCTSxXQUFXLEVBQUUsQ0FBQ25DLHNCQUFzQixDQUFDO0VBQ3JDb0MsU0FBUyxFQUFFcEIsb0JBQW9CLENBQUNDLElBQUk7RUFDcENvQixLQUFLLEVBQUVoQjtBQUNULENBQUM7QUFFRCxPQUFPLElBQU1pQixxQkFBNEMsR0FBRyxDQUMxRDtFQUNFbEQsRUFBRSxFQUFFLE1BQU07RUFDVkMsS0FBSyxFQUFFLE1BQU07RUFDYjRDLEdBQUcsRUFBRSxvREFBb0Q7RUFDekRDLElBQUksS0FBQUosTUFBQSxDQUFLN0UsbUJBQW1CLHNCQUFtQjtFQUMvQ2tGLFdBQVcsRUFBRTVCLG9CQUFvQjtFQUNqQzZCLFNBQVMsRUFBRXBCLG9CQUFvQixDQUFDRSxJQUFJO0VBQ3BDcUIsb0JBQW9CLEVBQUU7QUFDeEIsQ0FBQyxFQUNEO0VBQ0VuRCxFQUFFLEVBQUUsT0FBTztFQUNYQyxLQUFLLEVBQUUsT0FBTztFQUNkNEMsR0FBRyxFQUFFLG9EQUFvRDtFQUN6REMsSUFBSSxLQUFBSixNQUFBLENBQUs3RSxtQkFBbUIsdUJBQW9CO0VBQ2hEa0YsV0FBVyxFQUFFNUIsb0JBQW9CO0VBQ2pDNkIsU0FBUyxFQUFFcEIsb0JBQW9CLENBQUNHLEtBQUs7RUFDckNvQixvQkFBb0IsRUFBRTtBQUN4QixDQUFDLEVBQ0Q7RUFDRW5ELEVBQUUsRUFBRSxPQUFPO0VBQ1hDLEtBQUssRUFBRSxhQUFhO0VBQ3BCNEMsR0FBRyxFQUFFLG9EQUFvRDtFQUN6REMsSUFBSSxLQUFBSixNQUFBLENBQUs3RSxtQkFBbUIsMEJBQXVCO0VBQ25Ea0YsV0FBVyxFQUFFNUIsb0JBQW9CO0VBQ2pDNkIsU0FBUyxFQUFFcEIsb0JBQW9CLENBQUNHLEtBQUs7RUFDckNvQixvQkFBb0IsRUFBRTtBQUN4QixDQUFDLEVBQ0Q7RUFDRW5ELEVBQUUsRUFBRSxhQUFhO0VBQ2pCQyxLQUFLLEVBQUUsYUFBYTtFQUNwQjRDLEdBQUcsRUFBRSxvREFBb0Q7RUFDekRDLElBQUksS0FBQUosTUFBQSxDQUFLN0UsbUJBQW1CLDBCQUF1QjtFQUNuRGtGLFdBQVcsRUFBRTVCLG9CQUFvQjtFQUNqQzZCLFNBQVMsRUFBRXBCLG9CQUFvQixDQUFDRSxJQUFJO0VBQ3BDcUIsb0JBQW9CLEVBQUU7QUFDeEIsQ0FBQyxDQUNGO0FBRUQsT0FBTyxJQUFNQyw4QkFBcUQsR0FBRyxDQUNuRTtFQUNFcEQsRUFBRSxFQUFFLFdBQVc7RUFDZkMsS0FBSyxFQUFFLHdCQUF3QjtFQUMvQjRDLEdBQUcsZ0RBQWdEO0VBQ25EQyxJQUFJLEtBQUFKLE1BQUEsQ0FBSzdFLG1CQUFtQix3QkFBcUI7RUFDakRrRixXQUFXLEVBQUU1QixvQkFBb0I7RUFDakM2QixTQUFTLEVBQUVwQixvQkFBb0IsQ0FBQ0M7QUFDbEMsQ0FBQyxDQUNGO0FBRUQsT0FBTyxJQUFNd0IsdUJBQThDLEdBQUcsQ0FDNUQ7RUFDRXJELEVBQUUsRUFBRSxhQUFhO0VBQ2pCQyxLQUFLLEVBQUUsWUFBWTtFQUNuQjRDLEdBQUcsRUFBRSxrRUFBa0U7RUFDdkVDLElBQUksS0FBQUosTUFBQSxDQUFLN0UsbUJBQW1CLG9CQUFpQjtFQUM3Q2tGLFdBQVcsRUFBRTVCLG9CQUFvQjtFQUNqQzZCLFNBQVMsRUFBRXBCLG9CQUFvQixDQUFDRSxJQUFJO0VBQ3BDcUIsb0JBQW9CLEVBQUU7QUFDeEIsQ0FBQyxFQUNEO0VBQ0VuRCxFQUFFLEVBQUUsVUFBVTtFQUNkQyxLQUFLLEVBQUUsVUFBVTtFQUNqQjRDLEdBQUcsRUFBRSwrREFBK0Q7RUFDcEVDLElBQUksS0FBQUosTUFBQSxDQUFLN0UsbUJBQW1CLGtCQUFlO0VBQzNDa0YsV0FBVyxFQUFFNUIsb0JBQW9CO0VBQ2pDNkIsU0FBUyxFQUFFcEIsb0JBQW9CLENBQUNHLEtBQUs7RUFDckNvQixvQkFBb0IsRUFBRTtBQUN4QixDQUFDLEVBQ0Q7RUFDRW5ELEVBQUUsRUFBRSxTQUFTO0VBQ2JDLEtBQUssRUFBRSxTQUFTO0VBQ2hCNEMsR0FBRyxFQUFFLDhEQUE4RDtFQUNuRUMsSUFBSSxLQUFBSixNQUFBLENBQUs3RSxtQkFBbUIsaUJBQWM7RUFDMUNrRixXQUFXLEVBQUU1QixvQkFBb0I7RUFDakM2QixTQUFTLEVBQUVwQixvQkFBb0IsQ0FBQ0csS0FBSztFQUNyQ29CLG9CQUFvQixFQUFFO0FBQ3hCLENBQUMsQ0FDRjtBQUVELE9BQU8sSUFBTUcsa0JBQWtCLElBQzdCVix3QkFBd0IsRUFBQUYsTUFBQSxDQUNyQlcsdUJBQXVCLEVBQ3ZCRCw4QkFBOEIsRUFDOUJGLHFCQUFxQixDQUN6QjtBQUVELE9BQU8sSUFBTUssY0FBYyxHQUFHO0VBQzVCQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVM7QUFDL0MsQ0FBQztBQUVELE9BQU8sSUFBTUMsV0FBVyxHQUFHO0VBQ3pCWCxJQUFJLEVBQUUsQ0FBQyxNQUFNO0FBQ2YsQ0FBQztBQUVELE9BQU8sSUFBTVksaUJBQXFDLEdBQUcsQ0FDbkQsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQ2QsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQ2QsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQ2YsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQzFCO0FBRUQsT0FBTyxJQUFNQyxlQUFlLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO0FBQ2xELE9BQU8sSUFBTUMsZUFBZSxHQUFHO0VBQzdCQyxJQUFJLEVBQUUsV0FBVztFQUNqQkMsSUFBSSxFQUFFLFdBQVc7RUFDakJDLElBQUksRUFBRSxTQUFTO0VBQ2ZDLElBQUksRUFBRTtBQUNSLENBQUM7QUFFRCxPQUFPLElBQU1DLFlBQVksR0FBR2hILFNBQVMsQ0FBQztFQUNwQ2lILEtBQUssRUFBRSxJQUFJO0VBQ1hDLE1BQU0sRUFBRSxJQUFJO0VBQ1pDLEtBQUssRUFBRSxJQUFJO0VBQ1hDLFNBQVMsRUFBRSxJQUFJO0VBQ2ZDLFdBQVcsRUFBRSxJQUFJO0VBQ2pCQyxPQUFPLEVBQUU7QUFDWCxDQUFDLENBQUM7QUFFRixPQUFPLElBQU1DLGlCQUFpQixHQUFHdkgsU0FBUyxDQUFDO0VBQ3pDd0gsSUFBSSxFQUFFLElBQUk7RUFDVkMsUUFBUSxFQUFFLElBQUk7RUFDZEMsUUFBUSxFQUFFO0FBQ1osQ0FBQyxDQUFDO0FBRUYsT0FBTyxJQUFNQyx3QkFBd0IsR0FBR0osaUJBQWlCLENBQUNDLElBQUk7QUFlOUQsT0FBTyxJQUFNSSxXQUE0QixHQUFHNUgsU0FBUyxDQUFDO0VBQ3BENkgsT0FBTyxFQUFFLElBQUk7RUFDYkMsUUFBUSxFQUFFLElBQUk7RUFDZEMsUUFBUSxFQUFFLElBQUk7RUFDZEMsTUFBTSxFQUFFLElBQUk7RUFDWkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsR0FBRyxFQUFFLElBQUk7RUFDVEMsU0FBUyxFQUFFLElBQUk7RUFDZkMsTUFBTSxFQUFFLElBQUk7RUFDWkMsYUFBYSxFQUFFLElBQUk7RUFDbkI7RUFDQUMsS0FBSyxFQUFFO0FBQ1QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxJQUFNQyxnQkFBMEQsR0FBRztFQUN4RVYsT0FBTyxFQUFFLFNBQVM7RUFDbEJDLFFBQVEsRUFBRSxVQUFVO0VBQ3BCQyxRQUFRLEVBQUUsVUFBVTtFQUNwQkMsTUFBTSxFQUFFLFFBQVE7RUFDaEJDLElBQUksRUFBRSxNQUFNO0VBQ1pDLEdBQUcsRUFBRSxLQUFLO0VBQ1ZDLFNBQVMsRUFBRSxXQUFXO0VBQ3RCQyxNQUFNLEVBQUUsZUFBZTtFQUN2QkMsYUFBYSxFQUFFLGdCQUFnQjtFQUMvQkMsS0FBSyxFQUFFO0FBQ1QsQ0FBQztBQU1ELE9BQU8sSUFBTUUsVUFBVSxHQUFBQyxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLEtBQ3BCYixXQUFXLENBQUNJLE1BQU0sRUFBRy9ILFdBQVcsR0FDaEMySCxXQUFXLENBQUNHLFFBQVEsRUFBR3pILGFBQWEsR0FDcENzSCxXQUFXLENBQUNFLFFBQVEsRUFBR3pILGFBQWEsR0FDcEN1SCxXQUFXLENBQUNDLE9BQU8sRUFBRzFILFlBQVksR0FDbEN5SCxXQUFXLENBQUNLLElBQUksRUFBRzFILFNBQVMsR0FDNUJxSCxXQUFXLENBQUNNLEdBQUcsRUFBR2hJLFFBQVEsR0FDMUIwSCxXQUFXLENBQUNVLEtBQUssRUFBR2xJLFVBQVUsR0FDOUJ3SCxXQUFXLENBQUNPLFNBQVMsRUFBRzNILGNBQWMsR0FDdENvSCxXQUFXLENBQUNRLE1BQU0sRUFBRzVILGNBQWMsR0FDbkNvSCxXQUFXLENBQUNTLGFBQWEsRUFBR2xJLFlBQVksQ0FDMUM7QUFFRCxPQUFPLElBQU11SSxlQUFlLEdBQUcxSSxTQUFTLENBQUM7RUFDdkMsV0FBUyxJQUFJO0VBQ2IySSxJQUFJLEVBQUUsSUFBSTtFQUNWcEMsT0FBTyxFQUFFLElBQUk7RUFDYnFDLE9BQU8sRUFBRSxJQUFJO0VBQ2JDLElBQUksRUFBRSxJQUFJO0VBQ1ZDLE1BQU0sRUFBRSxJQUFJO0VBQ1pDLFNBQVMsRUFBRSxJQUFJO0VBQ2ZULEtBQUssRUFBRSxJQUFJO0VBQ1hVLEtBQUssRUFBRSxJQUFJO0VBQ1hDLE1BQU0sRUFBRSxJQUFJO0VBQ1pDLFFBQVEsRUFBRSxJQUFJO0VBQ2RDLEVBQUUsRUFBRTtBQUNOLENBQUMsQ0FBQzs7QUFFRjtBQUNBLE9BQU8sSUFBTUMsVUFBVSxHQUFHcEosU0FBUyxDQUFDO0VBQ2xDcUosU0FBUyxFQUFFLElBQUk7RUFDZkMsVUFBVSxFQUFFLElBQUk7RUFDaEJDLE1BQU0sRUFBRTtBQUNWLENBQUMsQ0FBQztBQUVGLE9BQU8sSUFBTUMsWUFBWSxHQUFHeEosU0FBUyxDQUFDO0VBQ3BDeUosUUFBUSxFQUFFLElBQUk7RUFDZEMsUUFBUSxFQUFFLElBQUk7RUFDZEgsTUFBTSxFQUFFLElBQUk7RUFDWkksR0FBRyxFQUFFLElBQUk7RUFDVEMsS0FBSyxFQUFFLElBQUk7RUFDWEMsSUFBSSxFQUFFLElBQUk7RUFDVkMsYUFBYSxFQUFFO0FBQ2pCLENBQUMsQ0FBQztBQVFGLE9BQU8sSUFBTUMsaUJBQWdDLEdBQUcsQ0FDOUM7RUFDRUMsS0FBSyxFQUFFUixZQUFZLENBQUNDLFFBQVE7RUFDNUJRLE9BQU8sRUFBRSxnQkFBZ0I7RUFDekJwRSxJQUFJLEVBQUUsU0FBUztFQUNmcUUsU0FBUyxFQUFFLFNBQVhBLFNBQVNBLENBQUVDLEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNDLGVBQWUsSUFBSUQsS0FBSyxDQUFDRSxRQUFRLEtBQUtqQixVQUFVLENBQUNDLFNBQVM7RUFBQTtBQUN0RixDQUFDLEVBQ0Q7RUFDRVcsS0FBSyxFQUFFUixZQUFZLENBQUNFLFFBQVE7RUFDNUJPLE9BQU8sRUFBRSxpQkFBaUI7RUFDMUJwRSxJQUFJLEVBQUUsV0FBVztFQUNqQnFFLFNBQVMsRUFBRSxTQUFYQSxTQUFTQSxDQUFFQyxLQUFLO0lBQUEsT0FBSUEsS0FBSyxDQUFDQyxlQUFlLElBQUlELEtBQUssQ0FBQ0UsUUFBUSxLQUFLakIsVUFBVSxDQUFDRSxVQUFVO0VBQUE7QUFDdkYsQ0FBQyxFQUNEO0VBQ0VVLEtBQUssRUFBRVIsWUFBWSxDQUFDRCxNQUFNO0VBQzFCVSxPQUFPLEVBQUUsZUFBZTtFQUN4QnBFLElBQUksRUFBRSxRQUFRO0VBQ2RxRSxTQUFTLEVBQUUsU0FBWEEsU0FBU0EsQ0FBRUMsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0csUUFBUTtFQUFBO0FBQ3BDLENBQUMsRUFDRDtFQUNFTixLQUFLLEVBQUVSLFlBQVksQ0FBQ0csR0FBRztFQUN2Qk0sT0FBTyxFQUFFLFlBQVk7RUFDckJwRSxJQUFJLEVBQUUsS0FBSztFQUNYcUUsU0FBUyxFQUFFLFNBQVhBLFNBQVNBLENBQUVDLEtBQUs7SUFBQSxPQUFJLENBQUNBLEtBQUssQ0FBQ0ksUUFBUTtFQUFBO0FBQ3JDLENBQUMsRUFDRDtFQUNFUCxLQUFLLEVBQUVSLFlBQVksQ0FBQ0ksS0FBSztFQUN6QkssT0FBTyxFQUFFLGNBQWM7RUFDdkJwRSxJQUFJLEVBQUUsUUFBUTtFQUNkcUUsU0FBUyxFQUFFLFNBQVhBLFNBQVNBLENBQUVDLEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNJLFFBQVE7RUFBQTtBQUNwQyxDQUFDLEVBQ0Q7RUFBQ1AsS0FBSyxFQUFFUixZQUFZLENBQUNLLElBQUk7RUFBRUksT0FBTyxFQUFFLGFBQWE7RUFBRXBFLElBQUksRUFBRTtBQUFXLENBQUMsRUFDckU7RUFDRW1FLEtBQUssRUFBRVIsWUFBWSxDQUFDTSxhQUFhO0VBQ2pDRyxPQUFPLEVBQUUsZUFBZTtFQUN4QnBFLElBQUksRUFBRSxNQUFNO0VBQ1pxRSxTQUFTLEVBQUUsU0FBWEEsU0FBU0EsQ0FBRUMsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0ssZ0JBQWdCO0VBQUE7QUFDNUMsQ0FBQyxDQUNGO0FBRUQsSUFBTUMsTUFBTSxHQUFHLGNBQWM7QUFDN0IsSUFBTUMsSUFBSSxHQUFHLGVBQWU7QUFDNUIsSUFBTUMsTUFBTSxHQUFHLGVBQWU7QUFDOUIsSUFBTUMsSUFBSSxHQUFHLGVBQWU7QUFDNUIsSUFBTUMsS0FBSyxHQUFHLGVBQWU7QUFDN0IsSUFBTUMsS0FBSyxHQUFHLGFBQWE7QUFDM0IsSUFBTUMsS0FBSyxHQUFHLGNBQWM7QUFDNUIsSUFBTUMsTUFBTSxHQUFHLGNBQWM7QUFDN0IsSUFBTUMsR0FBRyxHQUFHLGNBQWM7QUFDMUIsSUFBTUMsTUFBTSxHQUFHLGNBQWM7QUFFN0IsT0FBTyxJQUFNQyxrQkFBa0IsSUFBQUMsbUJBQUEsT0FBQTNDLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQTJDLG1CQUFBLEVBQzVCMUMsZUFBZSxXQUFRLEVBQUc7RUFDekIxRixLQUFLLEVBQUUsTUFBTTtFQUNicUksS0FBSyxFQUFFWDtBQUNULENBQUMsR0FDQWhDLGVBQWUsQ0FBQ0MsSUFBSSxFQUFHO0VBQ3RCM0YsS0FBSyxFQUFFLE1BQU07RUFDYnFJLEtBQUssRUFBRVY7QUFDVCxDQUFDLEdBQ0FqQyxlQUFlLENBQUNuQyxPQUFPLEVBQUc7RUFDekJ2RCxLQUFLLEVBQUUsS0FBSztFQUNacUksS0FBSyxFQUFFUjtBQUNULENBQUMsR0FDQW5DLGVBQWUsQ0FBQ1EsUUFBUSxFQUFHO0VBQzFCbEcsS0FBSyxFQUFFLEtBQUs7RUFDWnFJLEtBQUssRUFBRVI7QUFDVCxDQUFDLEdBQ0FuQyxlQUFlLENBQUNFLE9BQU8sRUFBRztFQUN6QjVGLEtBQUssRUFBRSxLQUFLO0VBQ1pxSSxLQUFLLEVBQUVaO0FBQ1QsQ0FBQyxHQUNBL0IsZUFBZSxDQUFDRyxJQUFJLEVBQUc7RUFDdEI3RixLQUFLLEVBQUUsT0FBTztFQUNkcUksS0FBSyxFQUFFWjtBQUNULENBQUMsR0FDQS9CLGVBQWUsQ0FBQ0ksTUFBTSxFQUFHO0VBQ3hCOUYsS0FBSyxFQUFFLFFBQVE7RUFDZnFJLEtBQUssRUFBRVQ7QUFDVCxDQUFDLEdBQ0FsQyxlQUFlLENBQUNLLFNBQVMsRUFBRztFQUMzQi9GLEtBQUssRUFBRSxNQUFNO0VBQ2JxSSxLQUFLLEVBQUVOO0FBQ1QsQ0FBQyxHQUVBckMsZUFBZSxDQUFDSixLQUFLLEVBQUc7RUFDdkJ0RixLQUFLLEVBQUUsT0FBTztFQUNkcUksS0FBSyxFQUFFUDtBQUNULENBQUMsR0FDQXBDLGVBQWUsQ0FBQ00sS0FBSyxFQUFHO0VBQ3ZCaEcsS0FBSyxFQUFFLE9BQU87RUFDZHFJLEtBQUssRUFBRUg7QUFDVCxDQUFDLEdBQUF6QyxlQUFBLENBQUFBLGVBQUEsQ0FBQTJDLG1CQUFBLEVBQ0ExQyxlQUFlLENBQUNPLE1BQU0sRUFBRztFQUN4QmpHLEtBQUssRUFBRSxRQUFRO0VBQ2ZxSSxLQUFLLEVBQUVMO0FBQ1QsQ0FBQyxHQUNBdEMsZUFBZSxDQUFDUyxFQUFFLEVBQUc7RUFDcEJuRyxLQUFLLEVBQUUsSUFBSTtFQUNYcUksS0FBSyxFQUFFVDtBQUNULENBQUMsRUFDRjtBQUVELE9BQU8sSUFBTVUsWUFBWSxHQUFHO0VBQzFCLFdBQVNMO0FBQ1gsQ0FBQztBQUNELE9BQU8sSUFBTU0saUJBQTRCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDL0QsT0FBTyxJQUFNQyxjQUFjLEdBQUd4TCxTQUFTLENBQUM7RUFDdENxTCxLQUFLLEVBQUUsSUFBSTtFQUNYSSxNQUFNLEVBQUUsSUFBSTtFQUNaQyxJQUFJLEVBQUUsSUFBSTtFQUNWQyxTQUFTLEVBQUUsSUFBSTtFQUNmQyxRQUFRLEVBQUUsSUFBSTtFQUNkQyxLQUFLLEVBQUU7QUFDVCxDQUFDLENBQUM7QUFFRixPQUFPLElBQU1DLGlCQWNaLEdBQUc7RUFDRjtFQUNBQyxLQUFLLEVBQUUsT0FBTztFQUNkO0VBQ0FDLE9BQU8sRUFBRSxTQUFTO0VBQ2xCQyxPQUFPLEVBQUUsU0FBUztFQUNsQkMsT0FBTyxFQUFFLFNBQVM7RUFDbEJDLE1BQU0sRUFBRSxRQUFRO0VBQ2hCQyxLQUFLLEVBQUUsT0FBTztFQUNkQyxHQUFHLEVBQUUsS0FBSztFQUNWQyxRQUFRLEVBQUUsVUFBVTtFQUNwQjtFQUNBQyxJQUFJLEVBQUUsTUFBTTtFQUNaQyxXQUFXLEVBQUU7QUFDZixDQUFDO0FBRUQsT0FBTyxJQUFNQyx3QkFBdUQsR0FBR0MsTUFBTSxDQUFDQyxPQUFPLENBQ25GYixpQkFDRixDQUFDLENBQUNjLEdBQUcsQ0FBQyxVQUFBQyxLQUFBO0VBQUEsSUFBQUMsS0FBQSxHQUFBQyxjQUFBLENBQUFGLEtBQUE7SUFBRUcsR0FBRyxHQUFBRixLQUFBO0lBQUU5QyxLQUFLLEdBQUE4QyxLQUFBO0VBQUEsT0FBTztJQUN2Qi9KLEVBQUUsRUFBRWlLLEdBQUc7SUFDUGhLLEtBQUssRUFDSGdLLEdBQUcsS0FBSyxPQUFPLEdBQ1gsZUFBZSxHQUNmQSxHQUFHLEtBQUssYUFBYSxHQUNyQixjQUFjLEdBQ2QsT0FBT2hELEtBQUssS0FBSyxRQUFRLEdBQ3pCQSxLQUFLLENBQUNpRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEdBQUdsRCxLQUFLLENBQUNtRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQzlDbkQ7RUFDUixDQUFDO0FBQUEsQ0FBQyxDQUFDO0FBRUgsT0FBTyxJQUFNb0QseUJBQXlCLEdBQUEzRSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLEtBQ25DK0MsY0FBYyxDQUFDSCxLQUFLLEVBQUcsQ0FBQ3pELFdBQVcsQ0FBQ0csUUFBUSxFQUFFSCxXQUFXLENBQUNFLFFBQVEsRUFBRUYsV0FBVyxDQUFDUSxNQUFNLENBQUMsR0FDdkZvRCxjQUFjLENBQUNDLE1BQU0sRUFBRyxDQUFDN0QsV0FBVyxDQUFDSyxJQUFJLENBQUMsR0FDMUN1RCxjQUFjLENBQUNFLElBQUksRUFBRyxDQUFDOUQsV0FBVyxDQUFDSSxNQUFNLEVBQUVKLFdBQVcsQ0FBQ0ssSUFBSSxFQUFFTCxXQUFXLENBQUNNLEdBQUcsQ0FBQyxHQUM3RXNELGNBQWMsQ0FBQ0ssS0FBSyxFQUFHLENBQUNqRSxXQUFXLENBQUNJLE1BQU0sQ0FBQyxDQUM3QztBQUVELElBQU1xRixnQ0FBZ0MsR0FBRyxDQUN2Q3pGLFdBQVcsQ0FBQ0csUUFBUSxFQUNwQkgsV0FBVyxDQUFDRSxRQUFRLEVBQ3BCRixXQUFXLENBQUNRLE1BQU0sQ0FDbkI7QUFFRCxPQUFPLElBQU1rRiw2QkFBNkIsR0FBQTdFLGVBQUEsQ0FBQUEsZUFBQSxLQUN2QytDLGNBQWMsQ0FBQ0csU0FBUyxFQUFHLENBQzFCRyxpQkFBaUIsQ0FBQ0UsT0FBTyxFQUN6QkYsaUJBQWlCLENBQUNHLE9BQU8sRUFDekJILGlCQUFpQixDQUFDSSxPQUFPLEVBQ3pCSixpQkFBaUIsQ0FBQ0ssTUFBTSxFQUN4QkwsaUJBQWlCLENBQUNNLEtBQUssRUFDdkJOLGlCQUFpQixDQUFDTyxHQUFHLEVBQ3JCUCxpQkFBaUIsQ0FBQ1EsUUFBUSxFQUMxQlIsaUJBQWlCLENBQUNDLEtBQUssQ0FDeEIsQ0FBQ3dCLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUVDLEdBQUcsRUFBSztFQUN0QkQsSUFBSSxDQUFDQyxHQUFHLENBQUMsR0FBR0osZ0NBQWdDO0VBQzVDLE9BQU9HLElBQUk7QUFDYixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FFTGhDLGNBQWMsQ0FBQ0ksUUFBUSxFQUFBbkQsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxLQUNyQnFELGlCQUFpQixDQUFDRSxPQUFPLEVBQUcsQ0FBQ3BFLFdBQVcsQ0FBQ0ksTUFBTSxFQUFFSixXQUFXLENBQUNLLElBQUksRUFBRUwsV0FBVyxDQUFDTSxHQUFHLENBQUMsR0FDbkY0RCxpQkFBaUIsQ0FBQ0csT0FBTyxFQUFHLENBQUNyRSxXQUFXLENBQUNJLE1BQU0sRUFBRUosV0FBVyxDQUFDSyxJQUFJLEVBQUVMLFdBQVcsQ0FBQ00sR0FBRyxDQUFDLEdBQ25GNEQsaUJBQWlCLENBQUNJLE9BQU8sRUFBRyxDQUFDdEUsV0FBVyxDQUFDSSxNQUFNLEVBQUVKLFdBQVcsQ0FBQ0ssSUFBSSxFQUFFTCxXQUFXLENBQUNNLEdBQUcsQ0FBQyxHQUNuRjRELGlCQUFpQixDQUFDSyxNQUFNLEVBQUcsQ0FBQ3ZFLFdBQVcsQ0FBQ0ksTUFBTSxFQUFFSixXQUFXLENBQUNLLElBQUksRUFBRUwsV0FBVyxDQUFDTSxHQUFHLENBQUMsR0FDbEY0RCxpQkFBaUIsQ0FBQ00sS0FBSyxFQUFHLENBQUN4RSxXQUFXLENBQUNJLE1BQU0sRUFBRUosV0FBVyxDQUFDSyxJQUFJLEVBQUVMLFdBQVcsQ0FBQ00sR0FBRyxDQUFDLEdBQ2pGNEQsaUJBQWlCLENBQUNPLEdBQUcsRUFBRyxDQUFDekUsV0FBVyxDQUFDSSxNQUFNLEVBQUVKLFdBQVcsQ0FBQ0ssSUFBSSxFQUFFTCxXQUFXLENBQUNNLEdBQUcsQ0FBQyxHQUMvRTRELGlCQUFpQixDQUFDUSxRQUFRLEVBQUcsQ0FBQzFFLFdBQVcsQ0FBQ0ksTUFBTSxFQUFFSixXQUFXLENBQUNLLElBQUksRUFBRUwsV0FBVyxDQUFDTSxHQUFHLENBQUMsRUFFeEY7QUFFRCxPQUFPLElBQU13RiwwQkFBMEIsR0FBQWpGLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLEtBQ3BDK0MsY0FBYyxDQUFDSCxLQUFLLEVBQUcsQ0FBQ3pELFdBQVcsQ0FBQ0MsT0FBTyxFQUFFRCxXQUFXLENBQUNTLGFBQWEsQ0FBQyxHQUN2RW1ELGNBQWMsQ0FBQ0MsTUFBTSxFQUFHLENBQUM3RCxXQUFXLENBQUNVLEtBQUssQ0FBQyxHQUMzQ2tELGNBQWMsQ0FBQ0UsSUFBSSxFQUFHLENBQUM5RCxXQUFXLENBQUNVLEtBQUssQ0FBQyxDQUMzQztBQUVELE9BQU8sSUFBTXFGLDhCQUE4QixHQUFBbEYsZUFBQSxDQUFBQSxlQUFBLEtBRXhDK0MsY0FBYyxDQUFDRyxTQUFTLEVBQUFsRCxlQUFBLENBQUFBLGVBQUEsS0FDdEJxRCxpQkFBaUIsQ0FBQ1MsSUFBSSxFQUFHLENBQUMzRSxXQUFXLENBQUNDLE9BQU8sQ0FBQyxHQUM5Q2lFLGlCQUFpQixDQUFDVSxXQUFXLEVBQUcsQ0FBQzVFLFdBQVcsQ0FBQ0csUUFBUSxFQUFFSCxXQUFXLENBQUNFLFFBQVEsQ0FBQyxJQUk5RTBELGNBQWMsQ0FBQ0ksUUFBUSxFQUFHLENBQUMsQ0FBQyxDQUM5QjtBQUVELE9BQU8sSUFBTWdDLHFCQUFxQixHQUFBbkYsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsS0FDL0IrQyxjQUFjLENBQUNILEtBQUssRUFBRyxFQUFFLEdBQ3pCRyxjQUFjLENBQUNDLE1BQU0sRUFBRyxFQUFFLEdBQzFCRCxjQUFjLENBQUNFLElBQUksRUFBRyxFQUFFLENBQzFCO0FBRUQsT0FBTyxJQUFNbUMsa0JBQWtCLEdBQUFwRixlQUFBLENBQUFBLGVBQUEsS0FDNUIrQyxjQUFjLENBQUNHLFNBQVMsRUFBRyxDQUFDLENBQUMsR0FDN0JILGNBQWMsQ0FBQ0ksUUFBUSxFQUFHLENBQUMsQ0FBQyxDQUM5Qjs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1rQyxtQkFBbUIsR0FBQXJGLGVBQUEsQ0FBQUEsZUFBQSxLQUM3QitDLGNBQWMsQ0FBQ0csU0FBUyxFQUFBbEQsZUFBQSxLQUN0QnFELGlCQUFpQixDQUFDQyxLQUFLLEVBQUdzQixnQ0FBZ0MsSUFFNUQ3QixjQUFjLENBQUNJLFFBQVEsRUFBQW5ELGVBQUEsS0FDckJxRCxpQkFBaUIsQ0FBQ0MsS0FBSyxFQUFHLENBQUNuRSxXQUFXLENBQUNJLE1BQU0sRUFBRUosV0FBVyxDQUFDSyxJQUFJLEVBQUVMLFdBQVcsQ0FBQ00sR0FBRyxDQUFDLEVBRXJGOztBQUVEO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTTZGLFVBQVUsSUFBQUMsV0FBQSxPQUFBdkYsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxDQUFBdUYsV0FBQSxFQUNwQnRGLGVBQWUsQ0FBQ0ksTUFBTSxFQUFHO0VBQ3hCMUUsSUFBSSxFQUFFLGFBQWE7RUFDbkI2SixLQUFLLEVBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNBUiwwQkFBMEIsR0FDMUJDLDhCQUE4QixDQUNsQztFQUNEUSxNQUFNLEVBQUU7SUFDTkMsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUVDLENBQUM7TUFBQSxPQUFJQSxDQUFDO0lBQUE7SUFDZEMsT0FBTyxFQUFFO0VBQ1g7QUFDRixDQUFDLEdBQ0E1RixlQUFlLENBQUNHLElBQUksRUFBRztFQUN0QnpFLElBQUksRUFBRSxXQUFXO0VBQ2pCNkosS0FBSyxFQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDQWQseUJBQXlCLEdBQ3pCRSw2QkFBNkIsQ0FDakM7RUFDRGEsTUFBTSxFQUFFO0lBQ05DLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFFQyxDQUFDO01BQUEsT0FBSUEsQ0FBQztJQUFBO0lBQ2RDLE9BQU8sRUFBRSxDQUNQN04sb0JBQW9CLENBQUNtRSxJQUFJLEVBQ3pCbkUsb0JBQW9CLENBQUM4TixPQUFPLEVBQzVCOU4sb0JBQW9CLENBQUMrTixVQUFVO0VBRW5DO0FBQ0YsQ0FBQyxHQUNBOUYsZUFBZSxDQUFDSyxTQUFTLEVBQUc7RUFDM0IzRSxJQUFJLEVBQUUsTUFBTTtFQUNaNkosS0FBSyxFQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDQWQseUJBQXlCLEdBQ3pCUyxrQkFBa0IsQ0FDdEI7RUFDRE0sTUFBTSxFQUFFO0lBQ05DLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFFQyxDQUFDO01BQUEsT0FBSUEsQ0FBQztJQUFBO0lBQ2RDLE9BQU8sRUFBRSxDQUNQN04sb0JBQW9CLENBQUNtRSxJQUFJLEVBQ3pCbkUsb0JBQW9CLENBQUNnTyxJQUFJLEVBQ3pCaE8sb0JBQW9CLENBQUNpTyxTQUFTO0VBRWxDO0FBQ0YsQ0FBQyxHQUNBaEcsZUFBZSxDQUFDRSxPQUFPLEVBQUc7RUFDekJ4RSxJQUFJLEVBQUUsV0FBVztFQUNqQjZKLEtBQUssRUFBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUVFZCx5QkFBeUIsT0FBQTNFLGVBQUEsS0FDM0IrQyxjQUFjLENBQUNILEtBQUssS0FBQTVGLE1BQUEsQ0FBQWtKLGtCQUFBLENBQ2hCdkIseUJBQXlCLENBQUM1QixjQUFjLENBQUNILEtBQUssQ0FBQyxJQUNsRHpELFdBQVcsQ0FBQ1MsYUFBYSxPQUcxQmlGLDZCQUE2QixDQUNqQztFQUNEYSxNQUFNLEVBQUU7SUFDTkMsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUVDLENBQUM7TUFBQSxPQUFJQSxDQUFDO0lBQUE7SUFDZEMsT0FBTyxFQUFFLENBQ1A3TixvQkFBb0IsQ0FBQ21FLElBQUksRUFDekJuRSxvQkFBb0IsQ0FBQzhOLE9BQU8sRUFDNUI5TixvQkFBb0IsQ0FBQytOLFVBQVU7RUFFbkM7QUFDRixDQUFDLEdBQ0E5RixlQUFlLFdBQVEsRUFBRztFQUN6QnRFLElBQUksRUFBRSxTQUFTO0VBQ2Y2SixLQUFLLEVBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNBUiwwQkFBMEIsR0FDMUJDLDhCQUE4QixDQUNsQztFQUNEUSxNQUFNLEVBQUU7SUFDTkMsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUVDLENBQUM7TUFBQSxPQUFJQSxDQUFDO0lBQUE7SUFDZEMsT0FBTyxFQUFFLENBQUM3TixvQkFBb0IsQ0FBQ21FLElBQUksRUFBRW5FLG9CQUFvQixDQUFDbU8sT0FBTztFQUNuRTtBQUNGLENBQUMsR0FDQWxHLGVBQWUsQ0FBQ0MsSUFBSSxFQUFHO0VBQ3RCdkUsSUFBSSxFQUFFLE1BQU07RUFDWjZKLEtBQUssRUFBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ0FSLDBCQUEwQixHQUMxQkMsOEJBQThCLENBQ2xDO0VBQ0RRLE1BQU0sRUFBRTtJQUNOQyxNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBRUMsQ0FBQztNQUFBLE9BQUlBLENBQUM7SUFBQTtJQUNkQyxPQUFPLEVBQUUsQ0FBQzdOLG9CQUFvQixDQUFDbUUsSUFBSSxFQUFFbkUsb0JBQW9CLENBQUNnTyxJQUFJO0VBQ2hFO0FBQ0YsQ0FBQyxHQUNBL0YsZUFBZSxDQUFDbkMsT0FBTyxFQUFHO0VBQ3pCbkMsSUFBSSxFQUFFLFVBQVU7RUFDaEI2SixLQUFLLEVBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNBTixxQkFBcUIsR0FDckJDLGtCQUFrQixDQUN0QjtFQUNETSxNQUFNLEVBQUU7SUFDTkMsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUE7TUFBQSxPQUFRLEtBQUs7SUFBQTtJQUNuQkUsT0FBTyxFQUFFO0VBQ1g7QUFDRixDQUFDLEdBQ0E1RixlQUFlLENBQUNRLFFBQVEsRUFBRztFQUMxQjlFLElBQUksRUFBRSxVQUFVO0VBQ2hCNkosS0FBSyxFQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDQU4scUJBQXFCLEdBQ3JCQyxrQkFBa0IsQ0FDdEI7RUFDRE0sTUFBTSxFQUFFO0lBQ05DLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBO01BQUEsT0FBUSxLQUFLO0lBQUE7SUFDbkJFLE9BQU8sRUFBRTtFQUNYO0FBQ0YsQ0FBQyxHQUNBNUYsZUFBZSxDQUFDTyxNQUFNLEVBQUc7RUFDeEI3RSxJQUFJLEVBQUUsV0FBVztFQUNqQjZKLEtBQUssRUFBRSxDQUFDLENBQUM7RUFDVEUsTUFBTSxFQUFFO0lBQ05DLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBO01BQUEsT0FBUSxLQUFLO0lBQUE7SUFDbkJFLE9BQU8sRUFBRTtFQUNYO0FBQ0YsQ0FBQyxHQUNBNUYsZUFBZSxDQUFDTSxLQUFLLEVBQUc7RUFDdkI1RSxJQUFJLEVBQUUsV0FBVztFQUNqQjZKLEtBQUssRUFBRSxDQUFDLENBQUM7RUFDVEUsTUFBTSxFQUFFO0lBQ05DLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBO01BQUEsT0FBUSxLQUFLO0lBQUE7SUFDbkJFLE9BQU8sRUFBRTtFQUNYO0FBQ0YsQ0FBQyxHQUFBN0YsZUFBQSxDQUFBdUYsV0FBQSxFQUNBdEYsZUFBZSxDQUFDUyxFQUFFLEVBQUc7RUFDcEIvRSxJQUFJLEVBQUUsSUFBSTtFQUNWNkosS0FBSyxFQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDQU4scUJBQXFCLEdBQ3JCQyxrQkFBa0IsQ0FDdEI7RUFDRE0sTUFBTSxFQUFFO0lBQ05DLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFBO01BQUEsT0FBUSxLQUFLO0lBQUE7SUFDbkJFLE9BQU8sRUFBRTtFQUNYO0FBQ0YsQ0FBQyxFQUNGO0FBRUQsT0FBTyxJQUFNTyw4QkFBOEIsR0FBR25DLE1BQU0sQ0FBQ29DLElBQUksQ0FBQ3RELGNBQWMsQ0FBQyxDQUFDK0IsTUFBTSxDQUM5RSxVQUFDd0IsSUFBSSxFQUFFL0IsR0FBRztFQUFBLE9BQUFrQixhQUFBLENBQUFBLGFBQUEsS0FDTGEsSUFBSSxPQUFBdEcsZUFBQSxLQUNOdUUsR0FBRyxFQUFHTixNQUFNLENBQUNvQyxJQUFJLENBQUNmLFVBQVUsQ0FBQyxDQUFDbEssTUFBTSxDQUNuQyxVQUFBbUwsRUFBRTtJQUFBLE9BQUlqQixVQUFVLENBQUNpQixFQUFFLENBQUMsQ0FBQ2YsS0FBSyxDQUFDakIsR0FBRyxDQUFDLElBQUlOLE1BQU0sQ0FBQ29DLElBQUksQ0FBQ2YsVUFBVSxDQUFDaUIsRUFBRSxDQUFDLENBQUNmLEtBQUssQ0FBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUNpQyxNQUFNO0VBQUEsQ0FDbEYsQ0FBQztBQUFBLENBQ0QsRUFDRixDQUFDLENBQ0gsQ0FBQztBQUVELE9BQU8sSUFBTUMsbUJBQW1CLEdBQUc7RUFDakNDLE9BQU8sRUFBRSxTQUFTO0VBQ2xCQyxhQUFhLEVBQUUsU0FBUztFQUN4QkMsV0FBVyxFQUFFLFNBQVM7RUFDdEJDLFdBQVcsRUFBRTtBQUNmLENBQUM7QUFFRCxPQUFPLElBQU1DLDJCQUEyQixHQUFHLGdCQUFnQjtBQUMzRCxPQUFPLElBQU1DLGlDQUFpQyxHQUFHLENBQUM7O0FBRWxEO0FBQ0EsT0FBTyxJQUFNQyxzQkFBNkIsR0FBRyxFQUFFO0FBRS9DLE9BQU8sSUFBTUMsY0FBeUIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRDtBQUNBLE9BQU8sSUFBTUMsbUJBQThCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFFbEUsT0FBTyxJQUFNQyxzQkFBc0IsR0FBRyxDQUFDO0FBRXZDLE9BQU8sSUFBTUMsaUJBQWlCLEdBQUc7RUFDL0JDLE1BQU0sRUFBRTtJQUNOOU0sS0FBSyxFQUFFLHdCQUF3QjtJQUMvQmdILEtBQUssRUFBRTtFQUNULENBQUM7RUFDRCtGLE1BQU0sRUFBRTtJQUNOL00sS0FBSyxFQUFFLHdCQUF3QjtJQUMvQmdILEtBQUssRUFBRTtFQUNULENBQUM7RUFDRGdHLE1BQU0sRUFBRTtJQUNOaE4sS0FBSyxFQUFFLHdCQUF3QjtJQUMvQmdILEtBQUssRUFBRTtFQUNUO0FBQ0YsQ0FBQztBQUVELE9BQU8sSUFBTWlHLGVBQWUsR0FBRztFQUM3QkMsUUFBUSxFQUFFO0lBQ1JsTixLQUFLLEVBQUUsd0JBQXdCO0lBQy9CbU4sU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUNyQ0MsYUFBYSxFQUFFO0VBQ2pCLENBQUM7RUFDRE4sTUFBTSxFQUFFO0lBQ047SUFDQTtJQUNBOU0sS0FBSyxFQUFFLHNCQUFzQjtJQUM3Qm1OLFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUscUJBQXFCLENBQUM7SUFDN0VDLGFBQWEsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVO0VBQ3hDLENBQUM7RUFDREMsV0FBVyxFQUFFO0lBQ1hyTixLQUFLLEVBQUUsMkJBQTJCO0lBQ2xDbU4sU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7SUFDbkVDLGFBQWEsRUFBRSxDQUFDLGVBQWUsRUFBRSxVQUFVO0VBQzdDO0FBQ0YsQ0FBQztBQUVELE9BQU8sSUFBTUUsb0JBQW9CLEdBQUcsQ0FBQztBQUVyQyxPQUFPLElBQU1DLFdBQVcsR0FBR3ZRLFNBQVMsQ0FBQztFQUNuQ3dRLEtBQUssRUFBRSxJQUFJO0VBQ1hDLEtBQUssRUFBRTtBQUNULENBQUMsQ0FBQztBQUVGLE9BQU8sSUFBTUMsaUJBQWlCLEdBQUcxUSxTQUFTLENBQUM7RUFDekMyUSxNQUFNLEVBQUUsSUFBSTtFQUNaQyxhQUFhLEVBQUUsSUFBSTtFQUNuQkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLE1BQU0sRUFBRTtBQUNWLENBQUMsQ0FBQztBQVNGLE9BQU8sSUFBTUMsaUJBQW1DLEdBQUc7RUFDakRoTyxFQUFFLEVBQUUyTixpQkFBaUIsQ0FBQ0MsTUFBTTtFQUM1QjNOLEtBQUssRUFBRSx1Q0FBdUM7RUFDOUNnTyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBR0MsT0FBTyxFQUFFQyxPQUFPO0lBQUEsT0FBTTtNQUFDblAsS0FBSyxFQUFFa1AsT0FBTztNQUFFRSxNQUFNLEVBQUVEO0lBQU8sQ0FBQztFQUFBO0FBQ25FLENBQUM7QUFDRCxPQUFPLElBQU1FLGlCQUFtQyxHQUFHO0VBQ2pEck8sRUFBRSxFQUFFMk4saUJBQWlCLENBQUNJLE1BQU07RUFDNUJPLE1BQU0sRUFBRSxJQUFJO0VBQ1pyTyxLQUFLLEVBQUUsK0JBQStCO0VBQ3RDZ08sT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUdNLElBQUksRUFBRUMsSUFBSTtJQUFBLE9BQU07TUFBQ3hQLEtBQUssRUFBRXVQLElBQUk7TUFBRUgsTUFBTSxFQUFFSTtJQUFJLENBQUM7RUFBQTtBQUN2RCxDQUFDO0FBQ0QsT0FBTyxJQUFNQyxzQkFBd0MsR0FBRztFQUN0RHpPLEVBQUUsRUFBRTJOLGlCQUFpQixDQUFDRSxhQUFhO0VBQ25DNU4sS0FBSyxFQUFFLDRCQUE0QjtFQUNuQ2dPLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFFQyxPQUFPO0lBQUEsT0FBSztNQUNuQmxQLEtBQUssRUFBRWtQLE9BQU87TUFDZEUsTUFBTSxFQUFFTSxJQUFJLENBQUNDLEtBQUssQ0FBQ1QsT0FBTyxHQUFHLElBQUk7SUFDbkMsQ0FBQztFQUFBO0FBQ0gsQ0FBQztBQUNELE9BQU8sSUFBTVUsd0JBQTBDLEdBQUc7RUFDeEQ1TyxFQUFFLEVBQUUyTixpQkFBaUIsQ0FBQ0csZUFBZTtFQUNyQzdOLEtBQUssRUFBRSw2QkFBNkI7RUFDcENnTyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRUMsT0FBTztJQUFBLE9BQUs7TUFDbkJsUCxLQUFLLEVBQUVrUCxPQUFPO01BQ2RFLE1BQU0sRUFBRU0sSUFBSSxDQUFDQyxLQUFLLENBQUNULE9BQU8sR0FBRyxNQUFNO0lBQ3JDLENBQUM7RUFBQTtBQUNILENBQUM7QUFFRCxPQUFPLElBQU1XLHdCQUF5RCxHQUFHLENBQ3ZFYixpQkFBaUIsRUFDakJTLHNCQUFzQixFQUN0Qkcsd0JBQXdCLEVBQ3hCUCxpQkFBaUIsQ0FDbEI7QUFxQkQsT0FBTyxJQUFNUyxvQkFBMkMsR0FBRztFQUN6RDlPLEVBQUUsRUFBRXdOLFdBQVcsQ0FBQ0MsS0FBSztFQUNyQnhOLEtBQUssRUFBRSxJQUFJO0VBQ1g4TyxTQUFTLEVBQUUsSUFBSTtFQUNmN0QsS0FBSyxFQUFFLENBQUM7RUFDUitDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFHQyxPQUFPLEVBQUVDLE9BQU87SUFBQSxPQUFNO01BQzlCblAsS0FBSyxFQUFFa1AsT0FBTztNQUNkRSxNQUFNLEVBQUVEO0lBQ1YsQ0FBQztFQUFBO0FBQ0gsQ0FBQztBQUVELE9BQU8sSUFBTWEsb0JBQTJDLEdBQUc7RUFDekRoUCxFQUFFLEVBQUV3TixXQUFXLENBQUNFLEtBQUs7RUFDckJ6TixLQUFLLEVBQUUsSUFBSTtFQUNYOE8sU0FBUyxFQUFFLElBQUk7RUFDZjdELEtBQUssRUFBRSxDQUFDO0VBQ1IrQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBR0MsT0FBTyxFQUFFQyxPQUFPO0lBQUEsT0FBTTtNQUM5Qm5QLEtBQUssRUFBRWtQLE9BQU8sR0FBRyxDQUFDO01BQ2xCRSxNQUFNLEVBQUVELE9BQU8sR0FBRztJQUNwQixDQUFDO0VBQUE7QUFDSCxDQUFDOztBQUVEO0FBQ0EsT0FBTyxJQUFNYyx5QkFBZ0QsR0FBRztFQUM5RGpQLEVBQUUsRUFBRSxXQUFXO0VBQ2ZDLEtBQUssRUFBRSxvQkFBb0I7RUFDM0I4TyxTQUFTLEVBQUUsSUFBSTtFQUNmZCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtJQUFBLE9BQVM7TUFBQ2pQLEtBQUssRUFBRSxJQUFJO01BQUVvUCxNQUFNLEVBQUU7SUFBSSxDQUFDO0VBQUE7QUFDN0MsQ0FBQztBQUVELE9BQU8sSUFBTWMsd0JBQStDLEdBQUc7RUFDN0RsUCxFQUFFLEVBQUUsVUFBVTtFQUNkQyxLQUFLLEVBQUUsbUJBQW1CO0VBQzFCOE8sU0FBUyxFQUFFLElBQUk7RUFDZmQsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7SUFBQSxPQUFTO01BQUNqUCxLQUFLLEVBQUUsSUFBSTtNQUFFb1AsTUFBTSxFQUFFO0lBQUcsQ0FBQztFQUFBO0FBQzVDLENBQUM7QUFFRCxPQUFPLElBQU1lLHlCQUFnRCxHQUFHO0VBQzlEblAsRUFBRSxFQUFFLFdBQVc7RUFDZkMsS0FBSyxFQUFFLG9CQUFvQjtFQUMzQjhPLFNBQVMsRUFBRSxJQUFJO0VBQ2ZkLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO0lBQUEsT0FBUztNQUFDalAsS0FBSyxFQUFFLElBQUk7TUFBRW9QLE1BQU0sRUFBRTtJQUFJLENBQUM7RUFBQTtBQUM3QyxDQUFDO0FBRUQsT0FBTyxJQUFNZ0Isd0JBQStDLEdBQUc7RUFDN0RwUCxFQUFFLEVBQUUsVUFBVTtFQUNkQyxLQUFLLEVBQUUsbUJBQW1CO0VBQzFCOE8sU0FBUyxFQUFFLElBQUk7RUFDZmQsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7SUFBQSxPQUFTO01BQUNqUCxLQUFLLEVBQUUsSUFBSTtNQUFFb1AsTUFBTSxFQUFFO0lBQUcsQ0FBQztFQUFBO0FBQzVDLENBQUM7QUFFRCxPQUFPLElBQU1pQix3QkFBK0MsR0FBRztFQUM3RHJQLEVBQUUsRUFBRSxVQUFVO0VBQ2RDLEtBQUssRUFBRSxrQkFBa0I7RUFDekI4TyxTQUFTLEVBQUUsSUFBSTtFQUNmZCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtJQUFBLE9BQVM7TUFBQ2pQLEtBQUssRUFBRSxJQUFJO01BQUVvUCxNQUFNLEVBQUU7SUFBRyxDQUFDO0VBQUE7QUFDNUMsQ0FBQztBQUVELE9BQU8sSUFBTWtCLHdCQUErQyxHQUFHO0VBQzdEdFAsRUFBRSxFQUFFLFVBQVU7RUFDZEMsS0FBSyxFQUFFLGtCQUFrQjtFQUN6QjhPLFNBQVMsRUFBRSxJQUFJO0VBQ2ZkLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO0lBQUEsT0FBUztNQUFDalAsS0FBSyxFQUFFLElBQUk7TUFBRW9QLE1BQU0sRUFBRTtJQUFHLENBQUM7RUFBQTtBQUM1QyxDQUFDO0FBRUQsT0FBTyxJQUFNbUIseUJBQWdELEdBQUc7RUFDOUR2UCxFQUFFLEVBQUUsV0FBVztFQUNmQyxLQUFLLEVBQUUsbUJBQW1CO0VBQzFCOE8sU0FBUyxFQUFFLElBQUk7RUFDZmQsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7SUFBQSxPQUFTO01BQUNqUCxLQUFLLEVBQUUsSUFBSTtNQUFFb1AsTUFBTSxFQUFFO0lBQUksQ0FBQztFQUFBO0FBQzdDLENBQUM7QUFFRCxPQUFPLElBQU1vQix5QkFBZ0QsR0FBRztFQUM5RHhQLEVBQUUsRUFBRSxXQUFXO0VBQ2ZDLEtBQUssRUFBRSxtQkFBbUI7RUFDMUI4TyxTQUFTLEVBQUUsSUFBSTtFQUNmZCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtJQUFBLE9BQVM7TUFBQ2pQLEtBQUssRUFBRSxJQUFJO01BQUVvUCxNQUFNLEVBQUU7SUFBSSxDQUFDO0VBQUE7QUFDN0MsQ0FBQztBQUVELE9BQU8sSUFBTXFCLDZCQUFtRSxHQUFHLENBQ2pGWCxvQkFBb0IsRUFDcEJFLG9CQUFvQixFQUNwQkUsd0JBQXdCLEVBQ3hCRCx5QkFBeUIsRUFDekJFLHlCQUF5QixFQUN6QkMsd0JBQXdCLEVBQ3hCQyx3QkFBd0IsRUFDeEJDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyx5QkFBeUIsQ0FDMUI7QUFFRCxPQUFPLElBQU1FLGdCQUFnQixHQUFHelMsU0FBUyxDQUFDO0VBQ3hDMFMsR0FBRyxFQUFFO0VBQ0w7RUFDQTtFQUNBO0VBQ0E7QUFDRixDQUFDLENBQUM7QUFFRixPQUFPLElBQU1DLHdCQUF3QixHQUFHLENBQ3RDO0VBQ0U1UCxFQUFFLEVBQUUwUCxnQkFBZ0IsQ0FBQ0MsR0FBRztFQUN4QjFQLEtBQUssRUFBRXlQLGdCQUFnQixDQUFDQyxHQUFHLENBQUNFLFdBQVcsQ0FBQyxDQUFDO0VBQ3pDZCxTQUFTLEVBQUU7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQSxDQUNEOztBQUVEO0FBQ0EsT0FBTyxJQUFNZSxrQkFBa0IsR0FBRzdTLFNBQVMsQ0FBQztFQUMxQzhTLElBQUksRUFBRSxJQUFJO0VBQ1ZDLElBQUksRUFBRTtBQUNSLENBQUMsQ0FBQztBQUVGLE9BQU8sSUFBTUMscUJBQXFCLEdBQUdoVCxTQUFTLENBQUM7RUFDN0NpVCxJQUFJLEVBQUUsSUFBSTtFQUNWQyxJQUFJLEVBQUU7QUFDUixDQUFDLENBQUM7O0FBRUY7QUFDQSxPQUFPLElBQU1DLHlCQUF5QixHQUFHekcsTUFBTSxDQUFDQyxPQUFPLENBQUNrRyxrQkFBa0IsQ0FBQyxDQUFDakcsR0FBRyxDQUM3RSxVQUFDd0csS0FBb0I7RUFBQSxPQUFNO0lBQ3pCclEsRUFBRSxFQUFFcVEsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNacFEsS0FBSyxFQUFFb1EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDUixXQUFXLENBQUMsQ0FBQztJQUM3QmQsU0FBUyxFQUFFO0VBQ2IsQ0FBQztBQUFBLENBQ0gsQ0FBQztBQUVELE9BQU8sU0FBU3VCLHFCQUFxQkEsQ0FBQzlHLElBQVksRUFBVTtFQUMxRCw0RUFBQTlHLE1BQUEsQ0FBNEU4RyxJQUFJLENBQUNxRyxXQUFXLENBQUMsQ0FBQztBQUNoRztBQUVBLE9BQU8sSUFBTVUsNEJBQTRCLEdBQUc1RyxNQUFNLENBQUNDLE9BQU8sQ0FBQ3FHLHFCQUFxQixDQUFDLENBQUNwRyxHQUFHLENBQ25GLFVBQUN3RyxLQUFvQjtFQUFBLE9BQU07SUFDekJyUSxFQUFFLEVBQUVxUSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ1pwUSxLQUFLLDBCQUFBeUMsTUFBQSxDQUEwQjJOLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ1IsV0FBVyxDQUFDLENBQUMsQ0FBRTtJQUN2RGQsU0FBUyxFQUFFLElBQUk7SUFDZmxNLEdBQUcsRUFBRXlOLHFCQUFxQixDQUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ3JDLENBQUM7QUFBQSxDQUNILENBQUM7QUFFRCxPQUFPLElBQU1HLGtCQUFrQixHQUFHLENBQUM7QUFFbkMsT0FBTyxJQUFNQyw0QkFBNEIsR0FBRyxzQkFBc0I7QUFFbEUsT0FBTyxJQUFNQywwQkFBMEIsR0FBR3pULFNBQVMsQ0FBQztFQUNsRDBULElBQUksRUFBRSxJQUFJO0VBQ1ZDLEtBQUssRUFBRSxJQUFJO0VBQ1hDLE9BQU8sRUFBRSxJQUFJO0VBQ2JDLE9BQU8sRUFBRTtBQUNYLENBQUMsQ0FBQztBQUVGLE9BQU8sSUFBTUMsMkJBQTJCLEdBQUc5VCxTQUFTLENBQUM7RUFDbkQrVCxNQUFNLEVBQUUsSUFBSTtFQUNaQyxJQUFJLEVBQUU7QUFDUixDQUFDLENBQUM7O0FBRUY7QUFDQSxPQUFPLElBQU1DLDBCQUEwQixHQUFHLEdBQUc7O0FBRTdDO0FBQ0EsT0FBTyxJQUFNQyxVQUFVLEdBQUcsR0FBRztBQUM3QixPQUFPLElBQU1DLEdBQUcsR0FBRyxFQUFFOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsZ0JBQWdCLEdBQUdwVSxTQUFTLENBQUM7RUFDeENxVSxJQUFJLEVBQUUsSUFBSTtFQUNWQyxXQUFXLEVBQUUsSUFBSTtFQUNqQmhNLEtBQUssRUFBRSxJQUFJO0VBQ1hpTSxRQUFRLEVBQUU7QUFDWixDQUFDLENBQUM7QUFDRixPQUFPLElBQU1DLG1CQUFtQixHQUFHLG9CQUFvQjtBQUN2RCxPQUFPLElBQU1DLG1CQUFxQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM1RCxPQUFPLElBQU1DLGtCQUFrQixHQUFHLEtBQUs7O0FBRXZDO0FBQ0EsT0FBTyxJQUFNQyxxQkFBcUIsR0FBRyxrQkFBa0I7QUFDdkQsT0FBTyxJQUFNQyxpQkFBaUIsR0FBRyxnQkFBZ0I7QUFDakQsT0FBTyxJQUFNQyxtQkFBbUIsR0FBRyxJQUFJO0FBQ3ZDLE9BQU8sSUFBTUMsbUJBQTZDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGtCQUFrQixHQUFHLEdBQUc7O0FBRXJDO0FBQ0EsT0FBTyxJQUFNQyxlQUFlLEdBQUcscUJBQXFCO0FBQ3BELE9BQU8sSUFBTUMsMkJBQTJCLEdBQUcsQ0FBQztBQUM1QyxPQUFPLElBQU1DLFlBQVksR0FBRztFQUMxQkMsWUFBWSxFQUFFLGNBQWM7RUFDNUJDLGNBQWMsRUFBRSxnQkFBZ0I7RUFDaENDLFdBQVcsRUFBRSxhQUFhO0VBQzFCQyxlQUFlLEVBQUUsaUJBQWlCO0VBQ2xDQyxVQUFVLEVBQUUsWUFBWTtFQUN4QnJDLElBQUksRUFBRTtBQUNSLENBQUM7QUFFRCxPQUFPLElBQU1zQyxpQkFBMkIsR0FBRyxDQUN6Q04sWUFBWSxDQUFDQyxZQUFZLEVBQ3pCRCxZQUFZLENBQUNFLGNBQWMsRUFDM0JGLFlBQVksQ0FBQ0csV0FBVyxFQUN4QkgsWUFBWSxDQUFDSSxlQUFlLEVBQzVCSixZQUFZLENBQUNLLFVBQVUsQ0FDeEI7QUFFRCxPQUFPLElBQU1FLFVBQVUsR0FBR3pWLFNBQVMsQ0FBQztFQUNsQzBWLFNBQVMsRUFBRSxJQUFJO0VBQ2ZDLFNBQVMsRUFBRTtBQUNiLENBQUMsQ0FBQzs7QUFFRjtBQUNBLE9BQU8sSUFBTUMsNkJBQTZCLEdBQUcsR0FBRzs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGVBQWUsR0FBRyxDQUFDO0FBQ2hDLE9BQU8sSUFBTUMsdUJBQXVCLEdBQUc7RUFDckMvVCxLQUFLLEVBQUUsR0FBRztFQUNWb1AsTUFBTSxFQUFFO0FBQ1YsQ0FBQztBQUVELE9BQU8sSUFBTTRFLGtCQUFrQixHQUFHO0VBQ2hDQyxLQUFLLEVBQUUsR0FBRztFQUNWQyxXQUFXLEVBQUU7QUFDZixDQUFDOztBQUVEO0FBQ0EsT0FBTyxJQUFNQyxlQUFlLEdBQUdsVyxTQUFTLENBQUM7RUFDdkNtVyxNQUFNLEVBQUUsSUFBSTtFQUNaQyxPQUFPLEVBQUUsSUFBSTtFQUNiQyxPQUFPLEVBQUU7QUFDWCxDQUFDLENBQUM7QUFFRixPQUFPLElBQU1DLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUV2QyxPQUFPLElBQU1DLGVBQWUsR0FBR3ZXLFNBQVMsQ0FBQztFQUN2Q3dXLEdBQUcsRUFBRSxJQUFJO0VBQ1RqUSxPQUFPLEVBQUUsSUFBSTtFQUNia1EsR0FBRyxFQUFFLElBQUk7RUFDVEMsUUFBUSxFQUFFLElBQUk7RUFDZEMsS0FBSyxFQUFFLElBQUk7RUFDWEMsTUFBTSxFQUFFO0FBQ1YsQ0FBQyxDQUFDO0FBRUYsT0FBTyxJQUFNQyxZQUFZLEdBQUc3VyxTQUFTLENBQUM7RUFDcEM4VyxhQUFhLEVBQUUsSUFBSTtFQUNuQnRVLFNBQVMsRUFBRSxJQUFJO0VBQ2Z1VSxRQUFRLEVBQUUsSUFBSTtFQUNkQyxRQUFRLEVBQUUsSUFBSTtFQUNkQyxPQUFPLEVBQUUsSUFBSTtFQUNiQyxTQUFTLEVBQUUsSUFBSTtFQUNmQyxRQUFRLEVBQUUsSUFBSTtFQUNkQyxNQUFNLEVBQUUsSUFBSTtFQUNaQyxVQUFVLEVBQUU7QUFDZCxDQUFDLENBQUM7QUFFRixXQUFZQyxXQUFXLDBCQUFYQSxXQUFXO0VBQVhBLFdBQVc7RUFBWEEsV0FBVztFQUFYQSxXQUFXO0VBQUEsT0FBWEEsV0FBVztBQUFBOztBQU12QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxjQUFjLEdBQUcsQ0FBQzs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsY0FBYyxHQUFHLEVBQUU7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsa0JBQWtCLEdBQUcsRUFBRTtBQXNDcEMsT0FBTyxJQUFNQyxvQkFBaUMsR0FBRztFQUMvQ0MsVUFBVSxFQUFFLElBQUk7RUFDaEJDLFFBQVEsRUFBRSxJQUFJO0VBQ2RDLGNBQWMsRUFBRSxHQUFHO0VBQ25CQyxlQUFlLEVBQUUsR0FBRztFQUNwQkMsT0FBTyxFQUFFLEtBQUs7RUFDZEMsWUFBWSxFQUFFLEVBQUU7RUFDaEJDLFVBQVUsRUFBRSxJQUFJO0VBQ2hCQyxpQkFBaUIsRUFBRSxJQUFJO0VBQ3ZCQyxPQUFPLEVBQUUsSUFBSTtFQUNiQyxNQUFNLEVBQUUsS0FBSztFQUNiQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztFQUNyQ0MsVUFBVSxFQUFFLElBQUk7RUFDaEJDLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQzdCQyxLQUFLLEVBQUUsSUFBSTtFQUNYQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUN4QkMsT0FBTyxFQUFFLElBQUk7RUFDYkMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDekI7RUFDQTtFQUNBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUMzQjtFQUNBQyxLQUFLLEVBQUU7QUFDVCxDQUFDO0FBRUQsT0FBTyxJQUFNQyxzQkFBK0MsR0FBRztFQUM3RHhRLEtBQUssRUFBRSxJQUFJO0VBQ1h5USxHQUFHLEVBQUUsSUFBSTtFQUNUQyxJQUFJLEVBQUUsSUFBSTtFQUNWQyxPQUFPLEVBQUUsSUFBSTtFQUNiMVMsT0FBTyxFQUFFLElBQUk7RUFDYjJTLE9BQU8sRUFBRSxJQUFJO0VBQ2JyVCxJQUFJLEVBQUUsSUFBSTtFQUNWc1QsU0FBUyxFQUFFLElBQUk7RUFDZixJQUFJLEVBQUUsSUFBSTtFQUNWQyxVQUFVLEVBQUUsSUFBSTtFQUNoQkMsT0FBTyxFQUFFLElBQUk7RUFDYkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsVUFBVSxFQUFFLElBQUk7RUFDaEJDLE9BQU8sRUFBRSxJQUFJO0VBQ2JDLEVBQUUsRUFBRSxLQUFLO0VBQ1RDLE1BQU0sRUFBRSxLQUFLO0VBQ2I7RUFDQTtFQUNBQyxJQUFJLEVBQUU7QUFDUixDQUFDO0FBRUQsV0FBWUMsWUFBWSwwQkFBWkEsWUFBWTtFQUFaQSxZQUFZO0VBQVpBLFlBQVk7RUFBWkEsWUFBWTtFQUFBLE9BQVpBLFlBQVk7QUFBQTs7QUFNeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsK0JBQStCLEdBQUcsQ0FBQyxHQUFHLENBQUM7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsdUJBQXVCLEdBQUcsQ0FBQztBQUV4QyxPQUFPLElBQU1DLFdBQW1DLEdBQUc7RUFDakRDLFFBQVEsRUFBRSxXQUFXO0VBQ3JCQyxXQUFXLEVBQUUsY0FBYztFQUMzQkMsU0FBUyxFQUFFLFlBQVk7RUFDdkJDLFdBQVcsRUFBRSxjQUFjO0VBQzNCQyxhQUFhLEVBQUUsZ0JBQWdCO0VBQy9CQyxvQkFBb0IsRUFBRSx3QkFBd0I7RUFDOUNDLGlCQUFpQixFQUFFLHFCQUFxQjtFQUN4Q0MsZUFBZSxFQUFFLG1CQUFtQjtFQUNwQ0MsZ0JBQWdCLEVBQUUsc0JBQXNCO0VBQ3hDQyxpQkFBaUIsRUFBRSxxQkFBcUI7RUFDeENDLFVBQVUsRUFBRSxhQUFhO0VBQ3pCQyxrQkFBa0IsRUFBRSxzQkFBc0I7RUFDMUNDLGdCQUFnQixFQUFFLG9CQUFvQjtFQUN0Q0MsZUFBZSxFQUFFLGtCQUFrQjtFQUNuQ0Msb0JBQW9CLEVBQUUseUJBQXlCO0VBQy9DQyxjQUFjLEVBQUUsaUJBQWlCO0VBQ2pDQyxXQUFXLEVBQUUsY0FBYztFQUMzQkMsZ0JBQWdCLEVBQUU7QUFDcEIsQ0FBQzs7QUFFRDtBQUNBLE9BQU8sSUFBTUMsZ0JBQWdCLEdBQUcsS0FBSztBQUNyQyxPQUFPLElBQU1DLG1DQUFtQyxHQUFHLEtBQUs7QUFFeEQsT0FBTyxJQUFNQyxtQkFBNkMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQzVFLE9BQU8sSUFBTUMsdUJBQXVCLEdBQUcsQ0FBQztBQUN4QyxPQUFPLElBQU1DLHdCQUF3QixHQUFHLEdBQUc7QUFDM0MsT0FBTyxJQUFNQyxvQkFBOEMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXZFLE9BQU8sSUFBTUMsa0NBQWtDLEdBQUc7RUFDaERDLElBQUksRUFBRSxNQUFlO0VBQ3JCQyxPQUFPLEVBQUUsU0FBa0I7RUFDM0JDLFNBQVMsRUFBRTtBQUNiLENBQUM7QUFFRCxPQUFPLElBQU1DLDhCQVNaLEdBQUc7RUFDRjlTLFNBQVMsRUFBRStTLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7RUFDckJDLFFBQVEsRUFBRVAsa0NBQWtDLENBQUNDLElBQW9DO0VBQ2pGTyxlQUFlLEVBQUVWLHdCQUF3QjtFQUN6Q1csV0FBVyxLQUFBelcsTUFBQSxDQUFNK1Ysb0JBQW9CLENBQTZCO0VBQ2xFVyxhQUFhLEtBQUExVyxNQUFBLENBQU00VixtQkFBbUIsQ0FBNkI7RUFDbkVlLGlCQUFpQixFQUFFZCx1QkFBdUI7RUFDMUNlLGlCQUFpQixLQUFBNVcsTUFBQSxDQUFNNFYsbUJBQW1CLENBQTZCO0VBQ3ZFaUIscUJBQXFCLEVBQUVoQjtBQUN6QixDQUFDO0FBRUQsT0FBTyxJQUFNaUIsdUJBQTBDLEdBQUc7RUFDeERuWSxJQUFJLEVBQUUsZ0JBQWdCO0VBQ3RCb1ksSUFBSSxFQUFFLGdCQUFnQjtFQUN0QnZHLFdBQVcsRUFBRSxrQ0FBa0M7RUFDL0N3RyxVQUFVLEVBQUUsQ0FDVjtJQUFDRCxJQUFJLEVBQUUsV0FBVztJQUFFRSxHQUFHLEVBQUUsQ0FBQztJQUFFQyxHQUFHLEVBQUVDLE1BQU0sQ0FBQ0M7RUFBZ0IsQ0FBQyxFQUN6RDtJQUFDTCxJQUFJLEVBQUUsaUJBQWlCO0lBQUVFLEdBQUcsRUFBRSxDQUFDO0lBQUVDLEdBQUcsRUFBRSxDQUFDO0lBQUVHLFlBQVksRUFBRXZCO0VBQXdCLENBQUMsRUFDakY7SUFBQ2lCLElBQUksRUFBRSxtQkFBbUI7SUFBRUUsR0FBRyxFQUFFLENBQUM7SUFBRUMsR0FBRyxFQUFFLENBQUM7SUFBRUcsWUFBWSxFQUFFeEI7RUFBdUIsQ0FBQyxFQUNsRjtJQUFDa0IsSUFBSSxFQUFFLHVCQUF1QjtJQUFFRSxHQUFHLEVBQUUsQ0FBQztJQUFFQyxHQUFHLEVBQUUsQ0FBQztJQUFFRyxZQUFZLEVBQUV4QjtFQUF1QixDQUFDLEVBQ3RGO0lBQUNrQixJQUFJLEVBQUUsYUFBYTtJQUFFcFksSUFBSSxFQUFFLE9BQU87SUFBRXNZLEdBQUcsRUFBRSxDQUFDO0lBQUVDLEdBQUcsRUFBRSxHQUFHO0lBQUVHLFlBQVksRUFBRXRCO0VBQW9CLENBQUMsRUFDMUY7SUFBQ2dCLElBQUksRUFBRSxlQUFlO0lBQUVwWSxJQUFJLEVBQUUsT0FBTztJQUFFc1ksR0FBRyxFQUFFLENBQUM7SUFBRUMsR0FBRyxFQUFFLEdBQUc7SUFBRUcsWUFBWSxFQUFFekI7RUFBbUIsQ0FBQyxFQUMzRjtJQUFDbUIsSUFBSSxFQUFFLG1CQUFtQjtJQUFFcFksSUFBSSxFQUFFLE9BQU87SUFBRXNZLEdBQUcsRUFBRSxDQUFDO0lBQUVDLEdBQUcsRUFBRSxHQUFHO0lBQUVHLFlBQVksRUFBRXpCO0VBQW1CLENBQUM7QUFFbkcsQ0FBQztBQUVELE9BQU8sSUFBTTBCLGlCQUFpQixHQUFHLGFBQWE7QUFDOUMsT0FBTyxJQUFNQyxnQkFBZ0IsR0FBRyxZQUFZO0FBRTVDLE9BQU8sSUFBTUMsc0JBQTBELEdBQUc7RUFDeEVDLEdBQUcsRUFBRTtJQUNIOVksSUFBSSxFQUFFLEtBQUs7SUFDWG9ZLElBQUksRUFBRSxLQUFLO0lBQ1h2RyxXQUFXLEVBQUUsdUJBQXVCO0lBQ3BDd0csVUFBVSxFQUFFLENBQUM7TUFBQ0QsSUFBSSxFQUFFLFVBQVU7TUFBRUUsR0FBRyxFQUFFLENBQUM7TUFBRUMsR0FBRyxFQUFFO0lBQUMsQ0FBQztFQUNqRCxDQUFDO0VBQ0RRLGtCQUFrQixFQUFFO0lBQ2xCL1ksSUFBSSxFQUFFLG9CQUFvQjtJQUMxQm9ZLElBQUksRUFBRSx1QkFBdUI7SUFDN0J2RyxXQUFXLEVBQUUsc0NBQXNDO0lBQ25Ed0csVUFBVSxFQUFFLENBQ1Y7TUFBQ0QsSUFBSSxFQUFFLFlBQVk7TUFBRUUsR0FBRyxFQUFFLENBQUMsQ0FBQztNQUFFQyxHQUFHLEVBQUU7SUFBQyxDQUFDLEVBQ3JDO01BQUNILElBQUksRUFBRSxVQUFVO01BQUVFLEdBQUcsRUFBRSxDQUFDLENBQUM7TUFBRUMsR0FBRyxFQUFFO0lBQUMsQ0FBQztFQUV2QyxDQUFDO0VBQ0RTLGFBQWEsRUFBRTtJQUNiaFosSUFBSSxFQUFFLGVBQWU7SUFDckJvWSxJQUFJLEVBQUUsa0JBQWtCO0lBQ3hCdkcsV0FBVyxFQUFFLGlDQUFpQztJQUM5Q3dHLFVBQVUsRUFBRSxDQUNWO01BQUNELElBQUksRUFBRSxLQUFLO01BQUVFLEdBQUcsRUFBRSxDQUFDLENBQUM7TUFBRUMsR0FBRyxFQUFFO0lBQUMsQ0FBQyxFQUM5QjtNQUFDSCxJQUFJLEVBQUUsWUFBWTtNQUFFTSxZQUFZLEVBQUUsSUFBSTtNQUFFSixHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQUVDLEdBQUcsRUFBRTtJQUFDLENBQUM7RUFFN0QsQ0FBQztFQUNEVSxRQUFRLEVBQUU7SUFDUmpaLElBQUksRUFBRSxVQUFVO0lBQ2hCb1ksSUFBSSxFQUFFLFVBQVU7SUFDaEJ2RyxXQUFXLEVBQUUsNEJBQTRCO0lBQ3pDd0csVUFBVSxFQUFFLENBQUM7TUFBQ0QsSUFBSSxFQUFFLFFBQVE7TUFBRU0sWUFBWSxFQUFFLEdBQUc7TUFBRUosR0FBRyxFQUFFLENBQUMsQ0FBQztNQUFFQyxHQUFHLEVBQUU7SUFBQyxDQUFDO0VBQ25FLENBQUM7RUFDRFcsS0FBSyxFQUFFO0lBQ0xsWixJQUFJLEVBQUUsT0FBTztJQUNib1ksSUFBSSxFQUFFLE9BQU87SUFDYnZHLFdBQVcsRUFBRSx5QkFBeUI7SUFDdEN3RyxVQUFVLEVBQUUsQ0FBQztNQUFDRCxJQUFJLEVBQUUsUUFBUTtNQUFFRSxHQUFHLEVBQUUsQ0FBQztNQUFFQyxHQUFHLEVBQUU7SUFBQyxDQUFDO0VBQy9DLENBQUM7RUFDRFksU0FBUyxFQUFFO0lBQ1RuWixJQUFJLEVBQUUsV0FBVztJQUNqQm9ZLElBQUksRUFBRSxZQUFZO0lBQ2xCdkcsV0FBVyxFQUFFLDZCQUE2QjtJQUMxQ3dHLFVBQVUsRUFBRSxDQUNWO01BQ0VELElBQUksRUFBRSxPQUFPO01BQ2JFLEdBQUcsRUFBRSxDQUFDO01BQ05DLEdBQUcsRUFBRWxMLElBQUksQ0FBQytMLEVBQUUsR0FBRztJQUNqQixDQUFDLEVBQ0Q7TUFDRWhCLElBQUksRUFBRSxNQUFNO01BQ1pFLEdBQUcsRUFBRSxDQUFDO01BQ05DLEdBQUcsRUFBRTtJQUNQLENBQUMsRUFDRDtNQUNFSCxJQUFJLEVBQUUsUUFBUTtNQUNkcFksSUFBSSxFQUFFLE9BQU87TUFDYnBCLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7TUFDL0I4WixZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO01BQ3hCSixHQUFHLEVBQUUsQ0FBQztNQUNOQyxHQUFHLEVBQUU7SUFDUCxDQUFDO0VBRUwsQ0FBQztFQUNEYyxhQUFhLEVBQUU7SUFDYnJaLElBQUksRUFBRSxlQUFlO0lBQ3JCb1ksSUFBSSxFQUFFLGdCQUFnQjtJQUN0QnZHLFdBQVcsRUFBRSxpQ0FBaUM7SUFDOUN3RyxVQUFVLEVBQUUsQ0FDVjtNQUNFRCxJQUFJLEVBQUUsT0FBTztNQUNiRSxHQUFHLEVBQUUsQ0FBQztNQUNOQyxHQUFHLEVBQUVsTCxJQUFJLENBQUMrTCxFQUFFLEdBQUc7SUFDakIsQ0FBQyxFQUNEO01BQ0VoQixJQUFJLEVBQUUsTUFBTTtNQUNaRSxHQUFHLEVBQUUsQ0FBQztNQUNOQyxHQUFHLEVBQUU7SUFDUCxDQUFDLEVBQ0Q7TUFDRUgsSUFBSSxFQUFFLFFBQVE7TUFDZHBZLElBQUksRUFBRSxPQUFPO01BQ2JwQixLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO01BQy9COFosWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztNQUN4QkosR0FBRyxFQUFFLENBQUM7TUFDTkMsR0FBRyxFQUFFO0lBQ1AsQ0FBQztFQUVMLENBQUM7RUFDRGUsS0FBSyxFQUFFO0lBQ0x0WixJQUFJLEVBQUUsT0FBTztJQUNib1ksSUFBSSxFQUFFLE9BQU87SUFDYnZHLFdBQVcsRUFBRSx5QkFBeUI7SUFDdEN3RyxVQUFVLEVBQUUsQ0FBQztNQUFDRCxJQUFJLEVBQUUsUUFBUTtNQUFFRSxHQUFHLEVBQUUsQ0FBQztNQUFFQyxHQUFHLEVBQUU7SUFBQyxDQUFDO0VBQy9DLENBQUM7RUFDRGdCLFlBQVksRUFBRTtJQUNadlosSUFBSSxFQUFFLGNBQWM7SUFDcEJvWSxJQUFJLEVBQUUsaUJBQWlCO0lBQ3ZCdkcsV0FBVyxFQUFFLGdDQUFnQztJQUM3Q3dHLFVBQVUsRUFBRSxDQUFDO01BQUNELElBQUksRUFBRSxRQUFRO01BQUVFLEdBQUcsRUFBRSxDQUFDO01BQUVDLEdBQUcsRUFBRTtJQUFHLENBQUM7RUFDakQsQ0FBQztFQUNEaUIsUUFBUSxFQUFFO0lBQ1J4WixJQUFJLEVBQUUsVUFBVTtJQUNoQm9ZLElBQUksRUFBRSxhQUFhO0lBQ25CdkcsV0FBVyxFQUFFLDRCQUE0QjtJQUN6Q3dHLFVBQVUsRUFBRSxDQUNWO01BQ0VELElBQUksRUFBRSxVQUFVO01BQ2hCTSxZQUFZLEVBQUUsSUFBSTtNQUNsQkosR0FBRyxFQUFFLENBQUM7TUFDTkMsR0FBRyxFQUFFO0lBQ1AsQ0FBQyxFQUNEO01BQ0VILElBQUksRUFBRSxRQUFRO01BQ2RwWSxJQUFJLEVBQUUsT0FBTztNQUNicEIsS0FBSyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQztNQUMvQjhaLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7TUFDeEJKLEdBQUcsRUFBRSxDQUFDO01BQ05DLEdBQUcsRUFBRTtJQUNQLENBQUM7RUFFTCxDQUFDO0VBQ0RrQixTQUFTLEVBQUU7SUFDVHpaLElBQUksRUFBRSxXQUFXO0lBQ2pCb1ksSUFBSSxFQUFFLG1CQUFtQjtJQUN6QnZHLFdBQVcsRUFBRSw2QkFBNkI7SUFDMUN3RyxVQUFVLEVBQUUsQ0FDVjtNQUNFRCxJQUFJLEVBQUUsWUFBWTtNQUNsQnhaLEtBQUssRUFBRSxNQUFNO01BQ2IwWixHQUFHLEVBQUUsQ0FBQztNQUNOQyxHQUFHLEVBQUU7SUFDUCxDQUFDLEVBQ0Q7TUFDRUgsSUFBSSxFQUFFLGdCQUFnQjtNQUN0QnhaLEtBQUssRUFBRSxVQUFVO01BQ2pCMFosR0FBRyxFQUFFLENBQUM7TUFDTkMsR0FBRyxFQUFFO0lBQ1AsQ0FBQyxFQUNEO01BQ0VILElBQUksRUFBRSxPQUFPO01BQ2JwWSxJQUFJLEVBQUUsT0FBTztNQUNicEIsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztNQUN2QjhaLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7TUFDeEJKLEdBQUcsRUFBRSxDQUFDO01BQ05DLEdBQUcsRUFBRTtJQUNQLENBQUMsRUFDRDtNQUNFSCxJQUFJLEVBQUUsS0FBSztNQUNYcFksSUFBSSxFQUFFLE9BQU87TUFDYnBCLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7TUFDckI4WixZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQ3BCSixHQUFHLEVBQUUsQ0FBQztNQUNOQyxHQUFHLEVBQUU7SUFDUCxDQUFDO0VBRUwsQ0FBQztFQUNEbUIsUUFBUSxFQUFFO0lBQ1IxWixJQUFJLEVBQUUsVUFBVTtJQUNoQm9ZLElBQUksRUFBRSxXQUFXO0lBQ2pCdkcsV0FBVyxFQUFFLDRCQUE0QjtJQUN6Q3dHLFVBQVUsRUFBRSxDQUFDO01BQUNELElBQUksRUFBRSxRQUFRO01BQUVFLEdBQUcsRUFBRSxDQUFDO01BQUVDLEdBQUcsRUFBRTtJQUFFLENBQUM7RUFDaEQsQ0FBQztFQUNEb0IsUUFBUSxFQUFFO0lBQ1IzWixJQUFJLEVBQUUsVUFBVTtJQUNoQm9ZLElBQUksRUFBRSxVQUFVO0lBQ2hCdkcsV0FBVyxFQUFFLDRCQUE0QjtJQUN6Q3dHLFVBQVUsRUFBRSxDQUNWO01BQUNELElBQUksRUFBRSxRQUFRO01BQUVFLEdBQUcsRUFBRSxDQUFDO01BQUVDLEdBQUcsRUFBRTtJQUFDLENBQUMsRUFDaEM7TUFBQ0gsSUFBSSxFQUFFLFFBQVE7TUFBRUUsR0FBRyxFQUFFLENBQUM7TUFBRUMsR0FBRyxFQUFFO0lBQUMsQ0FBQztFQUVwQyxDQUFDO0VBQ0RxQixPQUFPLEVBQUU7SUFDUDVaLElBQUksRUFBRSxTQUFTO0lBQ2ZvWSxJQUFJLEVBQUUsU0FBUztJQUNmdkcsV0FBVyxFQUFFLDJCQUEyQjtJQUN4Q3dHLFVBQVUsRUFBRSxDQUNWO01BQ0VELElBQUksRUFBRSxVQUFVO01BQ2hCcFksSUFBSSxFQUFFLE9BQU87TUFDYnBCLEtBQUssRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7TUFDbkM4WixZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO01BQ3hCSixHQUFHLEVBQUUsQ0FBQztNQUNOQyxHQUFHLEVBQUU7SUFDUCxDQUFDLEVBQ0Q7TUFDRUgsSUFBSSxFQUFFLGNBQWM7TUFDcEJ4WixLQUFLLEVBQUUsTUFBTTtNQUNiMFosR0FBRyxFQUFFLEVBQUU7TUFDUEMsR0FBRyxFQUFFO0lBQ1AsQ0FBQyxFQUNEO01BQ0VILElBQUksRUFBRSxNQUFNO01BQ1pFLEdBQUcsRUFBRSxHQUFHO01BQ1JDLEdBQUcsRUFBRTtJQUNQLENBQUMsRUFDRDtNQUNFSCxJQUFJLEVBQUUsbUJBQW1CO01BQ3pCeFosS0FBSyxFQUFFLGNBQWM7TUFDckI4WixZQUFZLEVBQUUsQ0FBQztNQUNmSixHQUFHLEVBQUUsQ0FBQztNQUNOQyxHQUFHLEVBQUU7SUFDUCxDQUFDO0VBRUwsQ0FBQztFQUNEc0IsaUJBQWlCLEVBQUU7SUFDakI3WixJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCb1ksSUFBSSxFQUFFLG9CQUFvQjtJQUMxQnZHLFdBQVcsRUFBRSxxQ0FBcUM7SUFDbER3RyxVQUFVLEVBQUUsQ0FBQztNQUFDRCxJQUFJLEVBQUUsT0FBTztNQUFFTSxZQUFZLEVBQUUsRUFBRTtNQUFFSixHQUFHLEVBQUUsQ0FBQztNQUFFQyxHQUFHLEVBQUU7SUFBRSxDQUFDO0VBQ2pFLENBQUM7RUFDRHVCLFdBQVcsRUFBRTtJQUNYOVosSUFBSSxFQUFFMlksaUJBQWlCO0lBQ3ZCUCxJQUFJLEVBQUUsY0FBYztJQUNwQnZHLFdBQVcsRUFBRSwrQkFBK0I7SUFDNUN3RyxVQUFVLEVBQUUsQ0FDVjtNQUFDRCxJQUFJLEVBQUUsU0FBUztNQUFFTSxZQUFZLEVBQUUsR0FBRztNQUFFSixHQUFHLEVBQUUsQ0FBQztNQUFFQyxHQUFHLEVBQUU7SUFBQyxDQUFDLEVBQ3BEO01BQUNILElBQUksRUFBRSxVQUFVO01BQUV4WixLQUFLLEVBQUUsT0FBTztNQUFFOFosWUFBWSxFQUFFLEdBQUc7TUFBRUosR0FBRyxFQUFFLENBQUM7TUFBRUMsR0FBRyxFQUFFO0lBQUMsQ0FBQyxFQUNyRTtNQUFDSCxJQUFJLEVBQUUsVUFBVTtNQUFFeFosS0FBSyxFQUFFLE9BQU87TUFBRThaLFlBQVksRUFBRSxHQUFHO01BQUVKLEdBQUcsRUFBRSxJQUFJO01BQUVDLEdBQUcsRUFBRTtJQUFDLENBQUMsRUFDeEU7TUFBQ0gsSUFBSSxFQUFFLFVBQVU7TUFBRXBZLElBQUksRUFBRSxPQUFPO01BQUVzWSxHQUFHLEVBQUUsQ0FBQztNQUFFQyxHQUFHLEVBQUUsR0FBRztNQUFFRyxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFBQyxDQUFDO0VBRXRGLENBQUM7RUFDRHFCLFVBQVUsRUFBRTtJQUNWL1osSUFBSSxFQUFFNFksZ0JBQWdCO0lBQ3RCUixJQUFJLEVBQUUsYUFBYTtJQUNuQnZHLFdBQVcsRUFBRSw4QkFBOEI7SUFDM0N3RyxVQUFVLEVBQUUsQ0FDVjtNQUFDRCxJQUFJLEVBQUUsU0FBUztNQUFFTSxZQUFZLEVBQUUsR0FBRztNQUFFSixHQUFHLEVBQUUsQ0FBQztNQUFFQyxHQUFHLEVBQUU7SUFBQyxDQUFDLEVBQ3BEO01BQUNILElBQUksRUFBRSxRQUFRO01BQUV4WixLQUFLLEVBQUUsZUFBZTtNQUFFOFosWUFBWSxFQUFFLEVBQUU7TUFBRUosR0FBRyxFQUFFLENBQUMsR0FBRztNQUFFQyxHQUFHLEVBQUU7SUFBSSxDQUFDLEVBQ2hGO01BQ0VILElBQUksRUFBRSxlQUFlO01BQ3JCcFksSUFBSSxFQUFFLFVBQVU7TUFDaEJwQixLQUFLLEVBQUUsbUJBQW1CO01BQzFCc0wsT0FBTyxFQUNMLHVGQUF1RjtNQUN6RndPLFlBQVksRUFBRSxLQUFLO01BQ25CSixHQUFHLEVBQUUsQ0FBQztNQUNOQyxHQUFHLEVBQUU7SUFDUCxDQUFDLEVBQ0Q7TUFBQ0gsSUFBSSxFQUFFLFdBQVc7TUFBRXhaLEtBQUssRUFBRSxtQkFBbUI7TUFBRThaLFlBQVksRUFBRSxHQUFHO01BQUVKLEdBQUcsRUFBRSxDQUFDLEdBQUc7TUFBRUMsR0FBRyxFQUFFO0lBQUksQ0FBQyxFQUN4RjtNQUNFSCxJQUFJLEVBQUUsY0FBYztNQUNwQnBZLElBQUksRUFBRSxVQUFVO01BQ2hCcEIsS0FBSyxFQUFFLGVBQWU7TUFDdEJzTCxPQUFPLEVBQ0wsc0ZBQXNGO01BQ3hGd08sWUFBWSxFQUFFLEtBQUs7TUFDbkJKLEdBQUcsRUFBRSxDQUFDO01BQ05DLEdBQUcsRUFBRTtJQUNQLENBQUMsRUFDRDtNQUFDSCxJQUFJLEVBQUUsV0FBVztNQUFFeFosS0FBSyxFQUFFLGdCQUFnQjtNQUFFOFosWUFBWSxFQUFFLEVBQUU7TUFBRUosR0FBRyxFQUFFLENBQUM7TUFBRUMsR0FBRyxFQUFFO0lBQUksQ0FBQyxFQUNqRjtNQUNFSCxJQUFJLEVBQUUsVUFBVTtNQUNoQnBZLElBQUksRUFBRSxPQUFPO01BQ2JwQixLQUFLLEVBQUUsV0FBVztNQUNsQjBaLEdBQUcsRUFBRSxDQUFDO01BQ05DLEdBQUcsRUFBRSxHQUFHO01BQ1JHLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUM5QixDQUFDLEVBQ0Q7TUFDRU4sSUFBSSxFQUFFLFNBQVM7TUFDZnBZLElBQUksRUFBRSxVQUFVO01BQ2hCcEIsS0FBSyxFQUFFLFNBQVM7TUFDaEJzTCxPQUFPLEVBQUUsc0VBQXNFO01BQy9Fd08sWUFBWSxFQUFFLEtBQUs7TUFDbkJKLEdBQUcsRUFBRSxDQUFDO01BQ05DLEdBQUcsRUFBRTtJQUNQLENBQUM7RUFFTDtBQUNGLENBQUM7QUFFRCxPQUFPLElBQU15QixtQkFBd0MsSUFDbkQ3Qix1QkFBdUIsRUFBQTlXLE1BQUEsQ0FBQWtKLGtCQUFBLENBQ3BCakMsTUFBTSxDQUFDb0MsSUFBSSxDQUFDbU8sc0JBQXNCLENBQUMsQ0FBQ3JRLEdBQUcsQ0FBQyxVQUFBeVIsT0FBTztFQUFBLE9BQUlwQixzQkFBc0IsQ0FBQ29CLE9BQU8sQ0FBQztBQUFBLEVBQUMsRUFDdkY7QUFzQkQsT0FBTyxJQUFNQyxtQkFBcUQsR0FBRztFQUNuRUMsS0FBSyxFQUFFLENBQUM7RUFDUkMsR0FBRyxFQUFFO0FBQ1AsQ0FBQztBQUVELE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsc0JBQXNCOztBQUUzRDtBQUNBO0FBQ0E7QUFDQSxXQUFZQyxtQkFBbUIsMEJBQW5CQSxtQkFBbUI7RUFBbkJBLG1CQUFtQjtFQUFuQkEsbUJBQW1CO0VBQW5CQSxtQkFBbUI7RUFBbkJBLG1CQUFtQjtFQUFuQkEsbUJBQW1CO0VBQW5CQSxtQkFBbUI7RUFBbkJBLG1CQUFtQjtFQUFBLE9BQW5CQSxtQkFBbUI7QUFBQTtBQVUvQixPQUFPLElBQU1DLG1CQUFtQixHQUFHLE9BQU87QUFDMUMsT0FBTyxJQUFNQyxlQUFlLEdBQUcsK0JBQStCO0FBRTlELE9BQU8sSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBQSxFQUFTO0VBQ3BDLE9BQU87SUFDTEMsR0FBRyxFQUFFO01BQ0hDLFNBQVMsS0FBQXRaLE1BQUEsQ0FBS21aLGVBQWUsV0FBQW5aLE1BQUEsQ0FBUWtaLG1CQUFtQjtJQUMxRCxDQUFDO0lBQ0QsZ0JBQWdCLEVBQUU7TUFDaEJJLFNBQVMsS0FBQXRaLE1BQUEsQ0FBS21aLGVBQWUsZUFBQW5aLE1BQUEsQ0FBWWtaLG1CQUFtQjtJQUM5RCxDQUFDO0lBQ0RLLEdBQUcsRUFBRTtNQUNIRCxTQUFTLEtBQUF0WixNQUFBLENBQUttWixlQUFlLGdCQUFBblosTUFBQSxDQUFha1osbUJBQW1CO0lBQy9EO0VBQ0YsQ0FBQztBQUNILENBQUM7QUFFRCxPQUFPLElBQU1NLDBCQUEwQixHQUFHLFFBQVE7QUFDbEQsSUFBTUMsZUFBZSxHQUNuQixpRkFBaUY7QUFFbkYsT0FBTyxJQUFNQyw0QkFPVixHQUFHLENBQ0o7RUFDRXBjLEVBQUUsRUFBRSxVQUFVO0VBQ2RDLEtBQUssRUFBRSxVQUFVO0VBQ2pCNkMsSUFBSSxFQUFFLElBQUk7RUFDVkQsR0FBRyxLQUFBSCxNQUFBLENBQUt5WixlQUFlLGVBQVk7RUFDbkNFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2pCblIsS0FBSyxFQUFFO0FBQ1QsQ0FBQyxFQUNEO0VBQ0VsTCxFQUFFLEVBQUUsV0FBVztFQUNmQyxLQUFLLEVBQUUsVUFBVTtFQUNqQjZDLElBQUksRUFBRSxJQUFJO0VBQ1ZELEdBQUcsS0FBQUgsTUFBQSxDQUFLeVosZUFBZSxrQkFBZTtFQUN0Q0UsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDakJuUixLQUFLLEVBQUU7QUFDVCxDQUFDLEVBQ0Q7RUFDRWxMLEVBQUUsRUFBRSxZQUFZO0VBQ2hCQyxLQUFLLEVBQUUsTUFBTTtFQUNiNkMsSUFBSSxFQUFFLElBQUk7RUFDVkQsR0FBRyxLQUFBSCxNQUFBLENBQUt5WixlQUFlLGVBQVk7RUFDbkNFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2pCblIsS0FBSyxFQUFFO0FBQ1QsQ0FBQyxFQUNEO0VBQ0VsTCxFQUFFLEVBQUUsYUFBYTtFQUNqQkMsS0FBSyxFQUFFLFFBQVE7RUFDZjZDLElBQUksRUFBRSxJQUFJO0VBQ1ZELEdBQUcsS0FBQUgsTUFBQSxDQUFLeVosZUFBZSxvQkFBaUI7RUFDeENFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2pCblIsS0FBSyxFQUFFO0FBQ1QsQ0FBQyxFQUNEO0VBQ0VsTCxFQUFFLEVBQUUsWUFBWTtFQUNoQkMsS0FBSyxFQUFFLFlBQVk7RUFDbkI2QyxJQUFJLEVBQUUsSUFBSTtFQUNWRCxHQUFHLEtBQUFILE1BQUEsQ0FBS3laLGVBQWUsb0JBQWlCO0VBQ3hDRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNqQm5SLEtBQUssRUFBRTtBQUNULENBQUMsRUFDRDtFQUNFbEwsRUFBRSxFQUFFLFNBQVM7RUFDYkMsS0FBSyxFQUFFLFNBQVM7RUFDaEI2QyxJQUFJLEVBQUUsSUFBSTtFQUNWRCxHQUFHLEtBQUFILE1BQUEsQ0FBS3laLGVBQWUsaUJBQWM7RUFDckNFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2pCblIsS0FBSyxFQUFFO0FBQ1QsQ0FBQyxFQUNEO0VBQ0VsTCxFQUFFLEVBQUUsU0FBUztFQUNiQyxLQUFLLEVBQUUsU0FBUztFQUNoQjZDLElBQUksRUFBRSxJQUFJO0VBQ1ZELEdBQUcsS0FBQUgsTUFBQSxDQUFLeVosZUFBZSxpQkFBYztFQUNyQ0UsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDakJuUixLQUFLLEVBQUU7QUFDVCxDQUFDLEVBQ0Q7RUFDRWxMLEVBQUUsRUFBRSxLQUFLO0VBQ1RDLEtBQUssRUFBRSxLQUFLO0VBQ1o2QyxJQUFJLEVBQUUsSUFBSTtFQUNWRCxHQUFHLEtBQUFILE1BQUEsQ0FBS3laLGVBQWUsYUFBVTtFQUNqQ0UsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDakJuUixLQUFLLEVBQUU7QUFDVCxDQUFDLEVBQ0Q7RUFDRWxMLEVBQUUsRUFBRSxPQUFPO0VBQ1hDLEtBQUssRUFBRSxPQUFPO0VBQ2Q2QyxJQUFJLEVBQUUsSUFBSTtFQUNWRCxHQUFHLEtBQUFILE1BQUEsQ0FBS3laLGVBQWUsZUFBWTtFQUNuQ0UsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDakJuUixLQUFLLEVBQUU7QUFDVCxDQUFDLEVBQ0Q7RUFDRWxMLEVBQUUsRUFBRSxXQUFXO0VBQ2ZDLEtBQUssRUFBRSxXQUFXO0VBQ2xCNkMsSUFBSSxFQUFFLElBQUk7RUFDVkQsR0FBRyxLQUFBSCxNQUFBLENBQUt5WixlQUFlLG1CQUFnQjtFQUN2Q0UsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDakJuUixLQUFLLEVBQUU7QUFDVCxDQUFDLEVBQ0Q7RUFDRWxMLEVBQUUsRUFBRSxXQUFXO0VBQ2ZDLEtBQUssRUFBRSxXQUFXO0VBQ2xCNkMsSUFBSSxFQUFFLElBQUk7RUFDVkQsR0FBRyxLQUFBSCxNQUFBLENBQUt5WixlQUFlLG1CQUFnQjtFQUN2Q0UsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDakJuUixLQUFLLEVBQUU7QUFDVCxDQUFDLEVBQ0Q7RUFDRWxMLEVBQUUsRUFBRWtjLDBCQUEwQjtFQUM5QmpjLEtBQUssRUFBRSxRQUFRO0VBQ2Y2QyxJQUFJLEVBQUUsSUFBSTtFQUNWRCxHQUFHLEVBQUUsSUFBSTtFQUNUd1osTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDakJuUixLQUFLLEVBQUU7QUFDVCxDQUFDLENBQ0YiLCJpZ25vcmVMaXN0IjpbXX0=