@kepler.gl/reducers 3.3.0-alpha.0 → 3.3.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/combined-updaters.js +491 -0
- package/dist/cjs/composer-helpers.js +101 -0
- package/dist/cjs/composers.js +22 -0
- package/dist/cjs/core.js +105 -0
- package/dist/cjs/data-utils.js +53 -0
- package/dist/cjs/export-utils.js +91 -0
- package/dist/{index.js → cjs/index.js} +2 -3
- package/dist/cjs/interaction-utils.js +115 -0
- package/dist/cjs/layer-utils.js +635 -0
- package/dist/cjs/map-state-updaters.js +658 -0
- package/dist/cjs/map-state.js +35 -0
- package/dist/cjs/map-style-updaters.js +660 -0
- package/dist/cjs/map-style.js +33 -0
- package/dist/cjs/merger-handler.js +105 -0
- package/dist/cjs/middleware.js +27 -0
- package/dist/cjs/provider-state-updaters.js +465 -0
- package/dist/cjs/provider-state.js +34 -0
- package/dist/cjs/root.js +207 -0
- package/dist/cjs/ui-state-updaters.js +922 -0
- package/dist/cjs/ui-state.js +36 -0
- package/dist/cjs/vis-state-merger.js +1193 -0
- package/dist/cjs/vis-state-selectors.js +30 -0
- package/dist/cjs/vis-state-updaters.js +5100 -0
- package/dist/cjs/vis-state.js +35 -0
- package/dist/combined-updaters.d.ts +19 -2
- package/dist/composers.d.ts +2 -0
- package/dist/esm/combined-updaters.js +484 -0
- package/dist/esm/composer-helpers.js +85 -0
- package/dist/esm/composers.js +14 -0
- package/dist/esm/core.js +101 -0
- package/dist/esm/data-utils.js +47 -0
- package/dist/esm/export-utils.js +86 -0
- package/dist/esm/index.js +62 -0
- package/dist/esm/interaction-utils.js +106 -0
- package/dist/esm/layer-utils.js +602 -0
- package/dist/esm/map-state-updaters.js +650 -0
- package/dist/esm/map-state.js +29 -0
- package/dist/esm/map-style-updaters.js +652 -0
- package/dist/esm/map-style.js +27 -0
- package/dist/esm/merger-handler.js +96 -0
- package/dist/esm/middleware.js +19 -0
- package/dist/esm/provider-state-updaters.js +458 -0
- package/dist/esm/provider-state.js +28 -0
- package/dist/esm/root.js +201 -0
- package/dist/esm/ui-state-updaters.js +917 -0
- package/dist/esm/ui-state.js +30 -0
- package/dist/esm/vis-state-merger.js +1161 -0
- package/dist/esm/vis-state-selectors.js +24 -0
- package/dist/esm/vis-state-updaters.js +5006 -0
- package/dist/esm/vis-state.js +29 -0
- package/dist/interaction-utils.d.ts +1 -1
- package/dist/layer-utils.d.ts +30 -5
- package/dist/map-state-updaters.d.ts +27 -20
- package/dist/map-state.d.ts +2 -74
- package/dist/map-style-updaters.d.ts +1 -3
- package/dist/ui-state-updaters.d.ts +53 -3
- package/dist/vis-state-merger.d.ts +11 -0
- package/dist/vis-state-selectors.d.ts +42 -6
- package/dist/vis-state-updaters.d.ts +163 -2
- package/dist/vis-state.d.ts +24 -4
- package/package.json +43 -35
- package/dist/combined-updaters.js +0 -366
- package/dist/composer-helpers.js +0 -101
- package/dist/composers.js +0 -23
- package/dist/core.js +0 -105
- package/dist/data-utils.js +0 -53
- package/dist/export-utils.js +0 -91
- package/dist/interaction-utils.js +0 -105
- package/dist/layer-utils.js +0 -335
- package/dist/map-state-updaters.js +0 -436
- package/dist/map-state.js +0 -35
- package/dist/map-style-updaters.js +0 -661
- package/dist/map-style.js +0 -34
- package/dist/merger-handler.js +0 -105
- package/dist/middleware.js +0 -27
- package/dist/provider-state-updaters.js +0 -466
- package/dist/provider-state.js +0 -35
- package/dist/root.js +0 -207
- package/dist/ui-state-updaters.js +0 -803
- package/dist/ui-state.js +0 -37
- package/dist/vis-state-merger.js +0 -990
- package/dist/vis-state-selectors.js +0 -30
- package/dist/vis-state-updaters.js +0 -3611
- package/dist/vis-state.js +0 -36
|
@@ -1,803 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.toggleSplitMapUpdater = exports.toggleSidePanelUpdater = exports.toggleSidePanelCloseButtonUpdater = exports.togglePanelListViewUpdater = exports.toggleModalUpdater = exports.toggleMapControlUpdater = exports.startExportingImageUpdater = exports.showExportDropdownUpdater = exports.showDatasetTableUpdater = exports.setUserMapboxAccessTokenUpdater = exports.setMapControlVisibilityUpdater = exports.setMapControlSettingsUpdater = exports.setLocaleUpdater = exports.setExportSelectedDatasetUpdater = exports.setExportMapHTMLModeUpdater = exports.setExportMapFormatUpdater = exports.setExportImageSettingUpdater = exports.setExportImageErrorUpdater = exports.setExportImageDataUriUpdater = exports.setExportFilteredUpdater = exports.setExportDataUpdater = exports.setExportDataTypeUpdater = exports.removeNotificationUpdater = exports.openDeleteModalUpdater = exports.loadFilesUpdater = exports.loadFilesSuccessUpdater = exports.loadFilesErrUpdater = exports.initUiStateUpdater = exports.hideExportDropdownUpdater = exports.cleanupExportImageUpdater = exports.addNotificationUpdater = exports.INITIAL_UI_STATE = exports.DEFAULT_NOTIFICATIONS = exports.DEFAULT_MODAL = exports.DEFAULT_MAP_CONTROLS = exports.DEFAULT_LOAD_FILES = exports.DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_DATA = exports.DEFAULT_ACTIVE_SIDE_PANEL = void 0;
|
|
8
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
-
var _constants = require("@kepler.gl/constants");
|
|
11
|
-
var _localization = require("@kepler.gl/localization");
|
|
12
|
-
var _utils = require("@kepler.gl/utils");
|
|
13
|
-
var _composerHelpers = require("./composer-helpers");
|
|
14
|
-
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; }
|
|
15
|
-
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) { (0, _defineProperty2["default"])(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; } // SPDX-License-Identifier: MIT
|
|
16
|
-
// Copyright contributors to the kepler.gl project
|
|
17
|
-
var DEFAULT_ACTIVE_SIDE_PANEL = exports.DEFAULT_ACTIVE_SIDE_PANEL = 'layer';
|
|
18
|
-
var DEFAULT_MODAL = exports.DEFAULT_MODAL = _constants.ADD_DATA_ID;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Updaters for `uiState` reducer. Can be used in your root reducer to directly modify kepler.gl's state.
|
|
22
|
-
* Read more about [Using updaters](../advanced-usage/using-updaters.md)
|
|
23
|
-
*
|
|
24
|
-
* @public
|
|
25
|
-
* @example
|
|
26
|
-
*
|
|
27
|
-
* import keplerGlReducer, {uiStateUpdaters} from '@kepler.gl/reducers';
|
|
28
|
-
* // Root Reducer
|
|
29
|
-
* const reducers = combineReducers({
|
|
30
|
-
* keplerGl: keplerGlReducer,
|
|
31
|
-
* app: appReducer
|
|
32
|
-
* });
|
|
33
|
-
*
|
|
34
|
-
* const composedReducer = (state, action) => {
|
|
35
|
-
* switch (action.type) {
|
|
36
|
-
* // click button to close side panel
|
|
37
|
-
* case 'CLICK_BUTTON':
|
|
38
|
-
* return {
|
|
39
|
-
* ...state,
|
|
40
|
-
* keplerGl: {
|
|
41
|
-
* ...state.keplerGl,
|
|
42
|
-
* foo: {
|
|
43
|
-
* ...state.keplerGl.foo,
|
|
44
|
-
* uiState: uiStateUpdaters.toggleSidePanelUpdater(
|
|
45
|
-
* uiState, {payload: null}
|
|
46
|
-
* )
|
|
47
|
-
* }
|
|
48
|
-
* }
|
|
49
|
-
* };
|
|
50
|
-
* }
|
|
51
|
-
* return reducers(state, action);
|
|
52
|
-
* };
|
|
53
|
-
*
|
|
54
|
-
* export default composedReducer;
|
|
55
|
-
*/
|
|
56
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
57
|
-
// @ts-ignore
|
|
58
|
-
var uiStateUpdaters = null;
|
|
59
|
-
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
60
|
-
|
|
61
|
-
var DEFAULT_MAP_CONTROLS_FEATURES = {
|
|
62
|
-
show: true,
|
|
63
|
-
active: false,
|
|
64
|
-
disableClose: false,
|
|
65
|
-
// defines which map index users are interacting with (through map controls)
|
|
66
|
-
activeMapIndex: 0
|
|
67
|
-
};
|
|
68
|
-
var DEFAULT_MAP_LEGEND_CONTROL = _objectSpread(_objectSpread({}, DEFAULT_MAP_CONTROLS_FEATURES), {}, {
|
|
69
|
-
disableEdit: false
|
|
70
|
-
});
|
|
71
|
-
/**
|
|
72
|
-
* A list of map control visibility and whether is it active.
|
|
73
|
-
* @memberof uiStateUpdaters
|
|
74
|
-
* @constant
|
|
75
|
-
* @property visibleLayers Default: `{show: true, active: false}`
|
|
76
|
-
* @property mapLegend Default: `{show: true, active: false}`
|
|
77
|
-
* @property toggle3d Default: `{show: true}`
|
|
78
|
-
* @property splitMap Default: `{show: true}`
|
|
79
|
-
* @property mapDraw Default: `{show: true, active: false}`
|
|
80
|
-
* @property mapLocale Default: `{show: false, active: false}`
|
|
81
|
-
* @public
|
|
82
|
-
*/
|
|
83
|
-
var DEFAULT_MAP_CONTROLS = exports.DEFAULT_MAP_CONTROLS = Object.keys(_constants.MAP_CONTROLS).reduce(function (_final, current) {
|
|
84
|
-
return _objectSpread(_objectSpread({}, _final), {}, (0, _defineProperty2["default"])({}, current, current === _constants.MAP_CONTROLS.mapLegend ? DEFAULT_MAP_LEGEND_CONTROL : DEFAULT_MAP_CONTROLS_FEATURES));
|
|
85
|
-
}, {});
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Default image export config
|
|
89
|
-
* @memberof uiStateUpdaters
|
|
90
|
-
* @constant
|
|
91
|
-
* @property ratio Default: `'SCREEN'`,
|
|
92
|
-
* @property resolution Default: `'ONE_X'`,
|
|
93
|
-
* @property legend Default: `false`,
|
|
94
|
-
* @property mapH Default: 0,
|
|
95
|
-
* @property mapW Default: 0,
|
|
96
|
-
* @property imageSize Default: {zoomOffset: 0, scale: 1, imageW: 0, imageH: 0},
|
|
97
|
-
* @property imageDataUri Default: `''`,
|
|
98
|
-
* @property exporting Default: `false`
|
|
99
|
-
* @property error Default: `false`
|
|
100
|
-
* @property escapeXhtmlForWebpack Default: from application config (auto-detected: `true` for webpack)
|
|
101
|
-
* @public
|
|
102
|
-
*/
|
|
103
|
-
var DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_IMAGE = {
|
|
104
|
-
// user options
|
|
105
|
-
ratio: _constants.EXPORT_IMG_RATIOS.SCREEN,
|
|
106
|
-
resolution: _constants.RESOLUTIONS.ONE_X,
|
|
107
|
-
legend: false,
|
|
108
|
-
mapH: 0,
|
|
109
|
-
mapW: 0,
|
|
110
|
-
imageSize: {
|
|
111
|
-
zoomOffset: 0,
|
|
112
|
-
scale: 1,
|
|
113
|
-
imageW: 0,
|
|
114
|
-
imageH: 0
|
|
115
|
-
},
|
|
116
|
-
// when this is set to true, the mock map viewport will move to the center of data
|
|
117
|
-
center: false,
|
|
118
|
-
// exporting state
|
|
119
|
-
imageDataUri: '',
|
|
120
|
-
// exporting: used to attach plot-container to dom
|
|
121
|
-
exporting: false,
|
|
122
|
-
// processing: used as loading indicator when export image is being produced
|
|
123
|
-
processing: false,
|
|
124
|
-
error: false,
|
|
125
|
-
// whether to apply fix for uglify error in dom-to-image (from application config, auto-detects build tool)
|
|
126
|
-
escapeXhtmlForWebpack: (0, _utils.getApplicationConfig)().escapeXhtmlForWebpack
|
|
127
|
-
};
|
|
128
|
-
var DEFAULT_LOAD_FILES = exports.DEFAULT_LOAD_FILES = {
|
|
129
|
-
fileLoading: false
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Default initial `exportData` settings
|
|
134
|
-
* @memberof uiStateUpdaters
|
|
135
|
-
* @constant
|
|
136
|
-
* @property selectedDataset Default: `''`,
|
|
137
|
-
* @property dataType Default: `'csv'`,
|
|
138
|
-
* @property filtered Default: `true`,
|
|
139
|
-
* @public
|
|
140
|
-
*/
|
|
141
|
-
var DEFAULT_EXPORT_DATA = exports.DEFAULT_EXPORT_DATA = {
|
|
142
|
-
selectedDataset: '',
|
|
143
|
-
dataType: _constants.EXPORT_DATA_TYPE.CSV,
|
|
144
|
-
filtered: true
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* @constant
|
|
149
|
-
*/
|
|
150
|
-
var DEFAULT_NOTIFICATIONS = exports.DEFAULT_NOTIFICATIONS = [];
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* @constant
|
|
154
|
-
* @property exportMapboxAccessToken - Default: null, this is used when we provide a default mapbox token for users to take advantage of
|
|
155
|
-
* @property userMapboxToken - Default: '', mapbox token provided by user through input field
|
|
156
|
-
* @property mode - Default: 'READ', read only or editable
|
|
157
|
-
* @public
|
|
158
|
-
*/
|
|
159
|
-
var DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_HTML = {
|
|
160
|
-
exportMapboxAccessToken: null,
|
|
161
|
-
userMapboxToken: '',
|
|
162
|
-
mode: _constants.EXPORT_HTML_MAP_MODES.READ
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* @constant
|
|
167
|
-
* @property hasData - Default: 'true',
|
|
168
|
-
* @public
|
|
169
|
-
*/
|
|
170
|
-
var DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_JSON = {
|
|
171
|
-
hasData: true
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Export Map Config
|
|
176
|
-
* @constant
|
|
177
|
-
* @property HTML - Default: 'DEFAULT_EXPORT_HTML',
|
|
178
|
-
* @property JSON - Default: 'DEFAULT_EXPORT_JSON',
|
|
179
|
-
* @property format - Default: 'HTML',
|
|
180
|
-
* @public
|
|
181
|
-
*/
|
|
182
|
-
var DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_MAP = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, DEFAULT_EXPORT_HTML), _constants.EXPORT_MAP_FORMATS.JSON, DEFAULT_EXPORT_JSON), "format", _constants.EXPORT_MAP_FORMATS.HTML);
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Default initial `uiState`
|
|
186
|
-
* @memberof uiStateUpdaters
|
|
187
|
-
* @constant
|
|
188
|
-
* @property readOnly Default: `false`
|
|
189
|
-
* @property activeSidePanel Default: `'layer'`
|
|
190
|
-
* @property currentModal Default: `'addData'`
|
|
191
|
-
* @property datasetKeyToRemove Default: `null`
|
|
192
|
-
* @property visibleDropdown Default: `null`
|
|
193
|
-
* @property exportImage Default: [`DEFAULT_EXPORT_IMAGE`](#default_export_image)
|
|
194
|
-
* @property exportData Default: [`DEFAULT_EXPORT_DATA`](#default_export_data)
|
|
195
|
-
* @property exportMap Default: [`DEFAULT_EXPORT_MAP`](#default_export_map)
|
|
196
|
-
* @property mapControls Default: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
197
|
-
* @property notifications Default: `[]`
|
|
198
|
-
* @property notifications Default: `[]`
|
|
199
|
-
* @property loadFiles
|
|
200
|
-
* @property isSidePanelCloseButtonVisible Default: `true`
|
|
201
|
-
* @public
|
|
202
|
-
*/
|
|
203
|
-
var INITIAL_UI_STATE = exports.INITIAL_UI_STATE = {
|
|
204
|
-
readOnly: false,
|
|
205
|
-
activeSidePanel: DEFAULT_ACTIVE_SIDE_PANEL,
|
|
206
|
-
currentModal: DEFAULT_MODAL,
|
|
207
|
-
datasetKeyToRemove: null,
|
|
208
|
-
visibleDropdown: null,
|
|
209
|
-
// export image modal ui
|
|
210
|
-
exportImage: DEFAULT_EXPORT_IMAGE,
|
|
211
|
-
// export data modal ui
|
|
212
|
-
exportData: DEFAULT_EXPORT_DATA,
|
|
213
|
-
// html export
|
|
214
|
-
exportMap: DEFAULT_EXPORT_MAP,
|
|
215
|
-
// map control panels
|
|
216
|
-
mapControls: DEFAULT_MAP_CONTROLS,
|
|
217
|
-
// ui notifications
|
|
218
|
-
notifications: DEFAULT_NOTIFICATIONS,
|
|
219
|
-
// load files
|
|
220
|
-
loadFiles: DEFAULT_LOAD_FILES,
|
|
221
|
-
// Locale of the UI
|
|
222
|
-
locale: _localization.LOCALE_CODES.en,
|
|
223
|
-
layerPanelListView: 'list',
|
|
224
|
-
filterPanelListView: 'list',
|
|
225
|
-
isSidePanelCloseButtonVisible: true
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
/* Updaters */
|
|
229
|
-
/**
|
|
230
|
-
* @memberof uiStateUpdaters
|
|
231
|
-
*/
|
|
232
|
-
var initUiStateUpdater = exports.initUiStateUpdater = function initUiStateUpdater(state, action) {
|
|
233
|
-
return _objectSpread(_objectSpread({}, state), (action.payload || {}).initialUiState);
|
|
234
|
-
};
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Toggle active side panel
|
|
238
|
-
* @memberof uiStateUpdaters
|
|
239
|
-
* @param state `uiState`
|
|
240
|
-
* @param action
|
|
241
|
-
* @param action.payload id of side panel to be shown, one of `layer`, `filter`, `interaction`, `map`. close side panel if `null`
|
|
242
|
-
* @returns nextState
|
|
243
|
-
* @public
|
|
244
|
-
*/
|
|
245
|
-
var toggleSidePanelUpdater = exports.toggleSidePanelUpdater = function toggleSidePanelUpdater(state, _ref) {
|
|
246
|
-
var id = _ref.payload;
|
|
247
|
-
return id === state.activeSidePanel ? state : _objectSpread(_objectSpread({}, state), {}, {
|
|
248
|
-
activeSidePanel: id
|
|
249
|
-
});
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* Show and hide modal dialog
|
|
254
|
-
* @memberof uiStateUpdaters
|
|
255
|
-
* @param state `uiState`
|
|
256
|
-
* @param action
|
|
257
|
-
* @paramaction.payload id of modal to be shown, null to hide modals. One of:
|
|
258
|
-
* - [`DATA_TABLE_ID`](../constants/default-settings.md#data_table_id)
|
|
259
|
-
* - [`DELETE_DATA_ID`](../constants/default-settings.md#delete_data_id)
|
|
260
|
-
* - [`ADD_DATA_ID`](../constants/default-settings.md#add_data_id)
|
|
261
|
-
* - [`EXPORT_IMAGE_ID`](../constants/default-settings.md#export_image_id)
|
|
262
|
-
* - [`EXPORT_DATA_ID`](../constants/default-settings.md#export_data_id)
|
|
263
|
-
* - [`ADD_MAP_STYLE_ID`](../constants/default-settings.md#add_map_style_id)
|
|
264
|
-
* @returns nextState
|
|
265
|
-
* @public
|
|
266
|
-
*/
|
|
267
|
-
var toggleModalUpdater = exports.toggleModalUpdater = function toggleModalUpdater(state, _ref2) {
|
|
268
|
-
var id = _ref2.payload;
|
|
269
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
270
|
-
currentModal: id
|
|
271
|
-
});
|
|
272
|
-
};
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Hide and show side panel header dropdown, activated by clicking the share link on top of the side panel
|
|
276
|
-
* @memberof uiStateUpdaters
|
|
277
|
-
* @public
|
|
278
|
-
*/
|
|
279
|
-
var showExportDropdownUpdater = exports.showExportDropdownUpdater = function showExportDropdownUpdater(state, _ref3) {
|
|
280
|
-
var id = _ref3.payload;
|
|
281
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
282
|
-
visibleDropdown: id
|
|
283
|
-
});
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Hide side panel header dropdown, activated by clicking the share link on top of the side panel
|
|
288
|
-
* @memberof uiStateUpdaters
|
|
289
|
-
* @public
|
|
290
|
-
*/
|
|
291
|
-
var hideExportDropdownUpdater = exports.hideExportDropdownUpdater = function hideExportDropdownUpdater(state) {
|
|
292
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
293
|
-
visibleDropdown: null
|
|
294
|
-
});
|
|
295
|
-
};
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Toggle side panel close button on top left of the side panel
|
|
299
|
-
* @memberof uiStateUpdaters
|
|
300
|
-
* @public
|
|
301
|
-
*/
|
|
302
|
-
var toggleSidePanelCloseButtonUpdater = exports.toggleSidePanelCloseButtonUpdater = function toggleSidePanelCloseButtonUpdater(state, _ref4) {
|
|
303
|
-
var show = _ref4.payload.show;
|
|
304
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
305
|
-
isSidePanelCloseButtonVisible: show
|
|
306
|
-
});
|
|
307
|
-
};
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Toggle active map control panel
|
|
311
|
-
* @memberof uiStateUpdaters
|
|
312
|
-
* @param state `uiState`
|
|
313
|
-
* @param action action
|
|
314
|
-
* @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
315
|
-
* @returns nextState
|
|
316
|
-
* @public
|
|
317
|
-
*/
|
|
318
|
-
var toggleMapControlUpdater = exports.toggleMapControlUpdater = function toggleMapControlUpdater(state, _ref5) {
|
|
319
|
-
var _state$mapControls$pa, _state$mapControls$dr;
|
|
320
|
-
var _ref5$payload = _ref5.payload,
|
|
321
|
-
panelId = _ref5$payload.panelId,
|
|
322
|
-
_ref5$payload$index = _ref5$payload.index,
|
|
323
|
-
index = _ref5$payload$index === void 0 ? 0 : _ref5$payload$index;
|
|
324
|
-
var updatedState = state;
|
|
325
|
-
// The effect panel and ai assistant panel can not be active at the same time
|
|
326
|
-
// so we need to deactivate the other panel when one is activated
|
|
327
|
-
var panelToDeactivate = panelId === _constants.MAP_CONTROLS.effect ? _constants.MAP_CONTROLS.aiAssistant : panelId === _constants.MAP_CONTROLS.aiAssistant ? _constants.MAP_CONTROLS.effect : null;
|
|
328
|
-
|
|
329
|
-
// To to toggle the mapDraw and mapLocal dropdowns
|
|
330
|
-
// We have to deactivate the other active dropdown
|
|
331
|
-
var dropdownToDeactivate = panelId === _constants.MAP_CONTROLS.mapDraw ? _constants.MAP_CONTROLS.mapLocale : panelId === _constants.MAP_CONTROLS.mapLocale ? _constants.MAP_CONTROLS.mapDraw : null;
|
|
332
|
-
|
|
333
|
-
// If we need to deactivate a competing panel and it's currently active
|
|
334
|
-
if (panelToDeactivate && (_state$mapControls$pa = state.mapControls[panelToDeactivate]) !== null && _state$mapControls$pa !== void 0 && _state$mapControls$pa.active) {
|
|
335
|
-
updatedState = _objectSpread(_objectSpread({}, state), {}, {
|
|
336
|
-
mapControls: _objectSpread(_objectSpread({}, updatedState.mapControls), {}, (0, _defineProperty2["default"])({}, panelToDeactivate, _objectSpread(_objectSpread({}, updatedState.mapControls[panelToDeactivate]), {}, {
|
|
337
|
-
active: false
|
|
338
|
-
})))
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// If we need to deactivate a competing dropdown and it's currently active
|
|
343
|
-
if (dropdownToDeactivate && (_state$mapControls$dr = state.mapControls[dropdownToDeactivate]) !== null && _state$mapControls$dr !== void 0 && _state$mapControls$dr.active) {
|
|
344
|
-
updatedState = _objectSpread(_objectSpread({}, state), {}, {
|
|
345
|
-
mapControls: _objectSpread(_objectSpread({}, updatedState.mapControls), {}, (0, _defineProperty2["default"])({}, dropdownToDeactivate, _objectSpread(_objectSpread({}, updatedState.mapControls[dropdownToDeactivate]), {}, {
|
|
346
|
-
active: false
|
|
347
|
-
})))
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
return _objectSpread(_objectSpread({}, updatedState), {}, {
|
|
351
|
-
mapControls: _objectSpread(_objectSpread({}, updatedState.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, updatedState.mapControls[panelId]), {}, {
|
|
352
|
-
active: !updatedState.mapControls[panelId].active,
|
|
353
|
-
activeMapIndex: index
|
|
354
|
-
})))
|
|
355
|
-
});
|
|
356
|
-
};
|
|
357
|
-
|
|
358
|
-
/**
|
|
359
|
-
* Toggle map control visibility
|
|
360
|
-
* @memberof uiStateUpdaters
|
|
361
|
-
* @param state `uiState`
|
|
362
|
-
* @param action action
|
|
363
|
-
* @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
364
|
-
* @returns nextState
|
|
365
|
-
* @public
|
|
366
|
-
*/
|
|
367
|
-
var setMapControlVisibilityUpdater = exports.setMapControlVisibilityUpdater = function setMapControlVisibilityUpdater(state, _ref6) {
|
|
368
|
-
var _state$mapControls;
|
|
369
|
-
var _ref6$payload = _ref6.payload,
|
|
370
|
-
panelId = _ref6$payload.panelId,
|
|
371
|
-
show = _ref6$payload.show;
|
|
372
|
-
if (!((_state$mapControls = state.mapControls) !== null && _state$mapControls !== void 0 && _state$mapControls[panelId])) {
|
|
373
|
-
return state;
|
|
374
|
-
}
|
|
375
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
376
|
-
mapControls: _objectSpread(_objectSpread({}, state.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, state.mapControls[panelId]), {}, {
|
|
377
|
-
show: Boolean(show)
|
|
378
|
-
})))
|
|
379
|
-
});
|
|
380
|
-
};
|
|
381
|
-
|
|
382
|
-
/**
|
|
383
|
-
* Toggle map control settings
|
|
384
|
-
* @memberof uiStateUpdaters
|
|
385
|
-
* @param state `uiState`
|
|
386
|
-
* @param action action
|
|
387
|
-
* @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
388
|
-
* @returns nextState
|
|
389
|
-
* @public
|
|
390
|
-
*/
|
|
391
|
-
var setMapControlSettingsUpdater = exports.setMapControlSettingsUpdater = function setMapControlSettingsUpdater(state, _ref7) {
|
|
392
|
-
var _state$mapControls2;
|
|
393
|
-
var _ref7$payload = _ref7.payload,
|
|
394
|
-
panelId = _ref7$payload.panelId,
|
|
395
|
-
settings = _ref7$payload.settings;
|
|
396
|
-
var mapControl = (_state$mapControls2 = state.mapControls) === null || _state$mapControls2 === void 0 ? void 0 : _state$mapControls2[panelId];
|
|
397
|
-
if (!mapControl) {
|
|
398
|
-
return state;
|
|
399
|
-
}
|
|
400
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
401
|
-
mapControls: _objectSpread(_objectSpread({}, state.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, mapControl), {}, {
|
|
402
|
-
settings: _objectSpread(_objectSpread({}, mapControl.settings), settings)
|
|
403
|
-
})))
|
|
404
|
-
});
|
|
405
|
-
};
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Toggle active map control panel
|
|
409
|
-
* @memberof uiStateUpdaters
|
|
410
|
-
* @param state `uiState`
|
|
411
|
-
* @param action
|
|
412
|
-
* @param action.payload dataset id
|
|
413
|
-
* @returns nextState
|
|
414
|
-
* @public
|
|
415
|
-
*/
|
|
416
|
-
var openDeleteModalUpdater = exports.openDeleteModalUpdater = function openDeleteModalUpdater(state, _ref8) {
|
|
417
|
-
var datasetKeyToRemove = _ref8.payload;
|
|
418
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
419
|
-
currentModal: _constants.DELETE_DATA_ID,
|
|
420
|
-
datasetKeyToRemove: datasetKeyToRemove
|
|
421
|
-
});
|
|
422
|
-
};
|
|
423
|
-
|
|
424
|
-
/**
|
|
425
|
-
* Set `exportImage.legend` to `true` or `false`
|
|
426
|
-
* @memberof uiStateUpdaters
|
|
427
|
-
* @param state `uiState`
|
|
428
|
-
* @returns nextState
|
|
429
|
-
* @public
|
|
430
|
-
*/
|
|
431
|
-
var setExportImageSettingUpdater = exports.setExportImageSettingUpdater = function setExportImageSettingUpdater(state, _ref9) {
|
|
432
|
-
var newSetting = _ref9.payload;
|
|
433
|
-
var updated = _objectSpread(_objectSpread({}, state.exportImage), newSetting);
|
|
434
|
-
var imageSize = (0, _utils.calculateExportImageSize)(updated) || state.exportImage.imageSize;
|
|
435
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
436
|
-
exportImage: _objectSpread(_objectSpread({}, updated), {}, {
|
|
437
|
-
// @ts-expect-error
|
|
438
|
-
// TODO: calculateExportImageSize does not return imageSize.zoomOffset,
|
|
439
|
-
// do we need take this value from current state, or return defaul value = 0
|
|
440
|
-
imageSize: imageSize
|
|
441
|
-
})
|
|
442
|
-
});
|
|
443
|
-
};
|
|
444
|
-
|
|
445
|
-
/**
|
|
446
|
-
* Set `exportImage.setExportImageDataUri` to a image dataUri
|
|
447
|
-
* @memberof uiStateUpdaters
|
|
448
|
-
* @param state `uiState`
|
|
449
|
-
* @param action
|
|
450
|
-
* @param action.payload export image data uri
|
|
451
|
-
* @returns nextState
|
|
452
|
-
* @public
|
|
453
|
-
*/
|
|
454
|
-
var setExportImageDataUriUpdater = exports.setExportImageDataUriUpdater = function setExportImageDataUriUpdater(state, _ref10) {
|
|
455
|
-
var dataUri = _ref10.payload;
|
|
456
|
-
if (dataUri === state.exportImage.imageDataUri) {
|
|
457
|
-
return state;
|
|
458
|
-
}
|
|
459
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
460
|
-
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
461
|
-
processing: false,
|
|
462
|
-
imageDataUri: dataUri
|
|
463
|
-
})
|
|
464
|
-
});
|
|
465
|
-
};
|
|
466
|
-
|
|
467
|
-
/**
|
|
468
|
-
* @memberof uiStateUpdaters
|
|
469
|
-
* @public
|
|
470
|
-
*/
|
|
471
|
-
var setExportImageErrorUpdater = exports.setExportImageErrorUpdater = function setExportImageErrorUpdater(state, _ref11) {
|
|
472
|
-
var error = _ref11.payload;
|
|
473
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
474
|
-
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
475
|
-
processing: false,
|
|
476
|
-
error: error
|
|
477
|
-
})
|
|
478
|
-
});
|
|
479
|
-
};
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* Delete cached export image
|
|
483
|
-
* @memberof uiStateUpdaters
|
|
484
|
-
* @public
|
|
485
|
-
*/
|
|
486
|
-
var cleanupExportImageUpdater = exports.cleanupExportImageUpdater = function cleanupExportImageUpdater(state) {
|
|
487
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
488
|
-
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
489
|
-
exporting: false,
|
|
490
|
-
imageDataUri: '',
|
|
491
|
-
error: false,
|
|
492
|
-
processing: false,
|
|
493
|
-
center: false
|
|
494
|
-
})
|
|
495
|
-
});
|
|
496
|
-
};
|
|
497
|
-
|
|
498
|
-
/**
|
|
499
|
-
* Start image exporting flow
|
|
500
|
-
* @memberof uiStateUpdaters
|
|
501
|
-
* @param state
|
|
502
|
-
* @param options
|
|
503
|
-
* @returns {UiState}
|
|
504
|
-
* @public
|
|
505
|
-
*/
|
|
506
|
-
var startExportingImageUpdater = exports.startExportingImageUpdater = function startExportingImageUpdater(state, _ref12) {
|
|
507
|
-
var _ref12$payload = _ref12.payload,
|
|
508
|
-
options = _ref12$payload === void 0 ? {} : _ref12$payload;
|
|
509
|
-
var imageSettings = _objectSpread(_objectSpread({}, options), {}, {
|
|
510
|
-
exporting: true
|
|
511
|
-
});
|
|
512
|
-
return (0, _composerHelpers.compose_)([cleanupExportImageUpdater, (0, _composerHelpers.apply_)(setExportImageSettingUpdater, (0, _composerHelpers.payload_)(imageSettings))])(state);
|
|
513
|
-
};
|
|
514
|
-
|
|
515
|
-
/**
|
|
516
|
-
* Set selected dataset for export
|
|
517
|
-
* @memberof uiStateUpdaters
|
|
518
|
-
* @param state `uiState`
|
|
519
|
-
* @param action
|
|
520
|
-
* @param action.payload dataset id
|
|
521
|
-
* @returns nextState
|
|
522
|
-
* @public
|
|
523
|
-
*/
|
|
524
|
-
var setExportSelectedDatasetUpdater = exports.setExportSelectedDatasetUpdater = function setExportSelectedDatasetUpdater(state, _ref13) {
|
|
525
|
-
var dataset = _ref13.payload;
|
|
526
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
527
|
-
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
528
|
-
selectedDataset: dataset
|
|
529
|
-
})
|
|
530
|
-
});
|
|
531
|
-
};
|
|
532
|
-
|
|
533
|
-
/**
|
|
534
|
-
* Set data format for exporting data
|
|
535
|
-
* @memberof uiStateUpdaters
|
|
536
|
-
* @param state `uiState`
|
|
537
|
-
* @param action
|
|
538
|
-
* @param action.payload one of `'text/csv'`
|
|
539
|
-
* @returns nextState
|
|
540
|
-
* @public
|
|
541
|
-
*/
|
|
542
|
-
var setExportDataTypeUpdater = exports.setExportDataTypeUpdater = function setExportDataTypeUpdater(state, _ref14) {
|
|
543
|
-
var dataType = _ref14.payload;
|
|
544
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
545
|
-
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
546
|
-
dataType: dataType
|
|
547
|
-
})
|
|
548
|
-
});
|
|
549
|
-
};
|
|
550
|
-
|
|
551
|
-
/**
|
|
552
|
-
* Whether to export filtered data, `true` or `false`
|
|
553
|
-
* @memberof uiStateUpdaters
|
|
554
|
-
* @param state `uiState`
|
|
555
|
-
* @param action
|
|
556
|
-
* @param action.payload
|
|
557
|
-
* @returns nextState
|
|
558
|
-
* @public
|
|
559
|
-
*/
|
|
560
|
-
var setExportFilteredUpdater = exports.setExportFilteredUpdater = function setExportFilteredUpdater(state, _ref15) {
|
|
561
|
-
var filtered = _ref15.payload;
|
|
562
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
563
|
-
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
564
|
-
filtered: filtered
|
|
565
|
-
})
|
|
566
|
-
});
|
|
567
|
-
};
|
|
568
|
-
|
|
569
|
-
/**
|
|
570
|
-
* Whether to including data in map config, toggle between `true` or `false`
|
|
571
|
-
* @memberof uiStateUpdaters
|
|
572
|
-
* @param state `uiState`
|
|
573
|
-
* @returns nextState
|
|
574
|
-
* @public
|
|
575
|
-
*/
|
|
576
|
-
var setExportDataUpdater = exports.setExportDataUpdater = function setExportDataUpdater(state) {
|
|
577
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
578
|
-
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.JSON, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.JSON]), {}, {
|
|
579
|
-
hasData: !state.exportMap[_constants.EXPORT_MAP_FORMATS.JSON].hasData
|
|
580
|
-
})))
|
|
581
|
-
});
|
|
582
|
-
};
|
|
583
|
-
|
|
584
|
-
/**
|
|
585
|
-
* whether to export a mapbox access to HTML single page
|
|
586
|
-
* @param state - `uiState`
|
|
587
|
-
* @param action
|
|
588
|
-
* @param action.payload
|
|
589
|
-
* @returns nextState
|
|
590
|
-
* @public
|
|
591
|
-
*/
|
|
592
|
-
var setUserMapboxAccessTokenUpdater = exports.setUserMapboxAccessTokenUpdater = function setUserMapboxAccessTokenUpdater(state, _ref16) {
|
|
593
|
-
var userMapboxToken = _ref16.payload;
|
|
594
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
595
|
-
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.HTML]), {}, {
|
|
596
|
-
userMapboxToken: userMapboxToken
|
|
597
|
-
})))
|
|
598
|
-
});
|
|
599
|
-
};
|
|
600
|
-
|
|
601
|
-
/**
|
|
602
|
-
* Sets the export map format
|
|
603
|
-
* @param state - `uiState`
|
|
604
|
-
* @param action
|
|
605
|
-
* @param action.payload format to use to export the map into
|
|
606
|
-
* @return nextState
|
|
607
|
-
*/
|
|
608
|
-
var setExportMapFormatUpdater = exports.setExportMapFormatUpdater = function setExportMapFormatUpdater(state, _ref17) {
|
|
609
|
-
var format = _ref17.payload;
|
|
610
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
611
|
-
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, {
|
|
612
|
-
// @ts-expect-error
|
|
613
|
-
format: format
|
|
614
|
-
})
|
|
615
|
-
});
|
|
616
|
-
};
|
|
617
|
-
|
|
618
|
-
/**
|
|
619
|
-
* Set the export html map mode
|
|
620
|
-
* @param state - `uiState`
|
|
621
|
-
* @param action
|
|
622
|
-
* @param action.payload to be set (available modes: EXPORT_HTML_MAP_MODES)
|
|
623
|
-
* @return nextState
|
|
624
|
-
*/
|
|
625
|
-
var setExportMapHTMLModeUpdater = exports.setExportMapHTMLModeUpdater = function setExportMapHTMLModeUpdater(state, _ref18) {
|
|
626
|
-
var mode = _ref18.payload;
|
|
627
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
628
|
-
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.HTML]), {}, {
|
|
629
|
-
mode: mode
|
|
630
|
-
})))
|
|
631
|
-
});
|
|
632
|
-
};
|
|
633
|
-
|
|
634
|
-
/**
|
|
635
|
-
* Adds a new notification.
|
|
636
|
-
* Updates a notification in case of matching ids.
|
|
637
|
-
* @memberof uiStateUpdaters
|
|
638
|
-
* @param state `uiState`
|
|
639
|
-
* @param action
|
|
640
|
-
* @param action.payload Params of a notification
|
|
641
|
-
* @returns nextState
|
|
642
|
-
* @public
|
|
643
|
-
*/
|
|
644
|
-
var addNotificationUpdater = exports.addNotificationUpdater = function addNotificationUpdater(state, _ref19) {
|
|
645
|
-
var payload = _ref19.payload;
|
|
646
|
-
var oldNotifications = state.notifications || [];
|
|
647
|
-
// @ts-expect-error
|
|
648
|
-
var payloadId = payload === null || payload === void 0 ? void 0 : payload.id;
|
|
649
|
-
var notificationToUpdate = payloadId ? oldNotifications.find(function (n) {
|
|
650
|
-
return n.id === payloadId;
|
|
651
|
-
}) : null;
|
|
652
|
-
var notifications;
|
|
653
|
-
if (notificationToUpdate) {
|
|
654
|
-
notifications = oldNotifications.map(function (n) {
|
|
655
|
-
return n.id === payloadId ? (0, _utils.createNotification)(_objectSpread(_objectSpread({}, payload), {}, {
|
|
656
|
-
count: n.count + 1
|
|
657
|
-
})) : n;
|
|
658
|
-
});
|
|
659
|
-
} else {
|
|
660
|
-
notifications = [].concat((0, _toConsumableArray2["default"])(oldNotifications), [(0, _utils.createNotification)(payload)]);
|
|
661
|
-
}
|
|
662
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
663
|
-
notifications: notifications
|
|
664
|
-
});
|
|
665
|
-
};
|
|
666
|
-
|
|
667
|
-
/**
|
|
668
|
-
* Remove a notification
|
|
669
|
-
* @memberof uiStateUpdaters
|
|
670
|
-
* @param state `uiState`
|
|
671
|
-
* @param action
|
|
672
|
-
* @param action.payload id of the notification to be removed
|
|
673
|
-
* @returns nextState
|
|
674
|
-
* @public
|
|
675
|
-
*/
|
|
676
|
-
var removeNotificationUpdater = exports.removeNotificationUpdater = function removeNotificationUpdater(state, _ref20) {
|
|
677
|
-
var id = _ref20.payload;
|
|
678
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
679
|
-
notifications: state.notifications.filter(function (n) {
|
|
680
|
-
return n.id !== id;
|
|
681
|
-
})
|
|
682
|
-
});
|
|
683
|
-
};
|
|
684
|
-
|
|
685
|
-
/**
|
|
686
|
-
* Fired when file loading begin
|
|
687
|
-
* @memberof uiStateUpdaters
|
|
688
|
-
* @param state `uiState`
|
|
689
|
-
* @returns nextState
|
|
690
|
-
* @public
|
|
691
|
-
*/
|
|
692
|
-
var loadFilesUpdater = exports.loadFilesUpdater = function loadFilesUpdater(state) {
|
|
693
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
694
|
-
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
695
|
-
fileLoading: true
|
|
696
|
-
})
|
|
697
|
-
});
|
|
698
|
-
};
|
|
699
|
-
|
|
700
|
-
/**
|
|
701
|
-
* Handles loading file success and set fileLoading property to false
|
|
702
|
-
* @memberof uiStateUpdaters
|
|
703
|
-
* @param state `uiState`
|
|
704
|
-
* @returns nextState
|
|
705
|
-
*/
|
|
706
|
-
var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFilesSuccessUpdater(state) {
|
|
707
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
708
|
-
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
709
|
-
fileLoading: false
|
|
710
|
-
})
|
|
711
|
-
});
|
|
712
|
-
};
|
|
713
|
-
|
|
714
|
-
/**
|
|
715
|
-
* Handles load file error and set fileLoading property to false
|
|
716
|
-
* @memberof uiStateUpdaters
|
|
717
|
-
* @param state
|
|
718
|
-
* @param action
|
|
719
|
-
* @param action.error
|
|
720
|
-
* @returns nextState
|
|
721
|
-
* @public
|
|
722
|
-
*/
|
|
723
|
-
var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref21) {
|
|
724
|
-
var error = _ref21.error;
|
|
725
|
-
return addNotificationUpdater(_objectSpread(_objectSpread({}, state), {}, {
|
|
726
|
-
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
727
|
-
fileLoading: false
|
|
728
|
-
})
|
|
729
|
-
}), {
|
|
730
|
-
payload: (0, _utils.errorNotification)({
|
|
731
|
-
message: (error || {}).message || 'Failed to upload files',
|
|
732
|
-
topic: _constants.DEFAULT_NOTIFICATION_TOPICS.global
|
|
733
|
-
})
|
|
734
|
-
});
|
|
735
|
-
};
|
|
736
|
-
|
|
737
|
-
/**
|
|
738
|
-
* Handles toggle map split and reset all map control index to 0
|
|
739
|
-
* @memberof uiStateUpdaters
|
|
740
|
-
* @param state
|
|
741
|
-
* @returns nextState
|
|
742
|
-
* @public
|
|
743
|
-
*/
|
|
744
|
-
var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplitMapUpdater(state) {
|
|
745
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
746
|
-
mapControls: Object.entries(state.mapControls).reduce(function (acc, entry) {
|
|
747
|
-
return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, entry[0], _objectSpread(_objectSpread({}, entry[1]), {}, {
|
|
748
|
-
activeMapIndex: 0
|
|
749
|
-
})));
|
|
750
|
-
}, {})
|
|
751
|
-
});
|
|
752
|
-
};
|
|
753
|
-
|
|
754
|
-
/**
|
|
755
|
-
* Toggle modal data
|
|
756
|
-
* @memberof uiStateUpdaters
|
|
757
|
-
* @param state
|
|
758
|
-
* @returns nextState
|
|
759
|
-
* @public
|
|
760
|
-
*/
|
|
761
|
-
var showDatasetTableUpdater = exports.showDatasetTableUpdater = function showDatasetTableUpdater(state) {
|
|
762
|
-
return toggleModalUpdater(state, {
|
|
763
|
-
payload: _constants.DATA_TABLE_ID
|
|
764
|
-
});
|
|
765
|
-
};
|
|
766
|
-
|
|
767
|
-
/**
|
|
768
|
-
* Set the locale of the UI
|
|
769
|
-
* @memberof uiStateUpdaters
|
|
770
|
-
* @param state `uiState`
|
|
771
|
-
* @param action
|
|
772
|
-
* @param action.payload
|
|
773
|
-
* @param action.payload.locale locale
|
|
774
|
-
* @returns nextState
|
|
775
|
-
* @public
|
|
776
|
-
*/
|
|
777
|
-
var setLocaleUpdater = exports.setLocaleUpdater = function setLocaleUpdater(state, _ref22) {
|
|
778
|
-
var locale = _ref22.payload.locale;
|
|
779
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
780
|
-
locale: locale
|
|
781
|
-
});
|
|
782
|
-
};
|
|
783
|
-
|
|
784
|
-
/**
|
|
785
|
-
* Toggle layer panel list view
|
|
786
|
-
* @memberof uiStateUpdaters
|
|
787
|
-
* @param state `uiState`
|
|
788
|
-
* @param action
|
|
789
|
-
* @param action.payload layer panel listView value. Can be 'list' or 'sortByDataset'
|
|
790
|
-
* @returns nextState
|
|
791
|
-
* @public
|
|
792
|
-
*/
|
|
793
|
-
var togglePanelListViewUpdater = exports.togglePanelListViewUpdater = function togglePanelListViewUpdater(state, _ref23) {
|
|
794
|
-
var _ref23$payload = _ref23.payload,
|
|
795
|
-
panelId = _ref23$payload.panelId,
|
|
796
|
-
listView = _ref23$payload.listView;
|
|
797
|
-
var stateProp = panelId === 'layer' ? 'layerPanelListView' : panelId === 'filter' ? 'filterPanelListView' : null;
|
|
798
|
-
if (!stateProp || state[stateProp] === listView) {
|
|
799
|
-
return state;
|
|
800
|
-
}
|
|
801
|
-
return _objectSpread(_objectSpread({}, state), {}, (0, _defineProperty2["default"])({}, stateProp, listView));
|
|
802
|
-
};
|
|
803
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9sb2NhbGl6YXRpb24iLCJfdXRpbHMiLCJfY29tcG9zZXJIZWxwZXJzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMIiwiZXhwb3J0cyIsIkRFRkFVTFRfTU9EQUwiLCJBRERfREFUQV9JRCIsInVpU3RhdGVVcGRhdGVycyIsIkRFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTIiwic2hvdyIsImFjdGl2ZSIsImRpc2FibGVDbG9zZSIsImFjdGl2ZU1hcEluZGV4IiwiREVGQVVMVF9NQVBfTEVHRU5EX0NPTlRST0wiLCJkaXNhYmxlRWRpdCIsIkRFRkFVTFRfTUFQX0NPTlRST0xTIiwiTUFQX0NPTlRST0xTIiwicmVkdWNlIiwiZmluYWwiLCJjdXJyZW50IiwibWFwTGVnZW5kIiwiREVGQVVMVF9FWFBPUlRfSU1BR0UiLCJyYXRpbyIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiU0NSRUVOIiwicmVzb2x1dGlvbiIsIlJFU09MVVRJT05TIiwiT05FX1giLCJsZWdlbmQiLCJtYXBIIiwibWFwVyIsImltYWdlU2l6ZSIsInpvb21PZmZzZXQiLCJzY2FsZSIsImltYWdlVyIsImltYWdlSCIsImNlbnRlciIsImltYWdlRGF0YVVyaSIsImV4cG9ydGluZyIsInByb2Nlc3NpbmciLCJlcnJvciIsImVzY2FwZVhodG1sRm9yV2VicGFjayIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiREVGQVVMVF9MT0FEX0ZJTEVTIiwiZmlsZUxvYWRpbmciLCJERUZBVUxUX0VYUE9SVF9EQVRBIiwic2VsZWN0ZWREYXRhc2V0IiwiZGF0YVR5cGUiLCJFWFBPUlRfREFUQV9UWVBFIiwiQ1NWIiwiZmlsdGVyZWQiLCJERUZBVUxUX05PVElGSUNBVElPTlMiLCJERUZBVUxUX0VYUE9SVF9IVE1MIiwiZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4iLCJ1c2VyTWFwYm94VG9rZW4iLCJtb2RlIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkRFRkFVTFRfRVhQT1JUX0pTT04iLCJoYXNEYXRhIiwiREVGQVVMVF9FWFBPUlRfTUFQIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJJTklUSUFMX1VJX1NUQVRFIiwicmVhZE9ubHkiLCJhY3RpdmVTaWRlUGFuZWwiLCJjdXJyZW50TW9kYWwiLCJkYXRhc2V0S2V5VG9SZW1vdmUiLCJ2aXNpYmxlRHJvcGRvd24iLCJleHBvcnRJbWFnZSIsImV4cG9ydERhdGEiLCJleHBvcnRNYXAiLCJtYXBDb250cm9scyIsIm5vdGlmaWNhdGlvbnMiLCJsb2FkRmlsZXMiLCJsb2NhbGUiLCJMT0NBTEVfQ09ERVMiLCJlbiIsImxheWVyUGFuZWxMaXN0VmlldyIsImZpbHRlclBhbmVsTGlzdFZpZXciLCJpc1NpZGVQYW5lbENsb3NlQnV0dG9uVmlzaWJsZSIsImluaXRVaVN0YXRlVXBkYXRlciIsInN0YXRlIiwiYWN0aW9uIiwicGF5bG9hZCIsImluaXRpYWxVaVN0YXRlIiwidG9nZ2xlU2lkZVBhbmVsVXBkYXRlciIsIl9yZWYiLCJpZCIsInRvZ2dsZU1vZGFsVXBkYXRlciIsIl9yZWYyIiwic2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlciIsIl9yZWYzIiwiaGlkZUV4cG9ydERyb3Bkb3duVXBkYXRlciIsInRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlciIsIl9yZWY0IiwidG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIiLCJfcmVmNSIsIl9zdGF0ZSRtYXBDb250cm9scyRwYSIsIl9zdGF0ZSRtYXBDb250cm9scyRkciIsIl9yZWY1JHBheWxvYWQiLCJwYW5lbElkIiwiX3JlZjUkcGF5bG9hZCRpbmRleCIsImluZGV4IiwidXBkYXRlZFN0YXRlIiwicGFuZWxUb0RlYWN0aXZhdGUiLCJlZmZlY3QiLCJhaUFzc2lzdGFudCIsImRyb3Bkb3duVG9EZWFjdGl2YXRlIiwibWFwRHJhdyIsIm1hcExvY2FsZSIsInNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlciIsIl9yZWY2IiwiX3N0YXRlJG1hcENvbnRyb2xzIiwiX3JlZjYkcGF5bG9hZCIsIkJvb2xlYW4iLCJzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyIiwiX3JlZjciLCJfc3RhdGUkbWFwQ29udHJvbHMyIiwiX3JlZjckcGF5bG9hZCIsInNldHRpbmdzIiwibWFwQ29udHJvbCIsIm9wZW5EZWxldGVNb2RhbFVwZGF0ZXIiLCJfcmVmOCIsIkRFTEVURV9EQVRBX0lEIiwic2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlciIsIl9yZWY5IiwibmV3U2V0dGluZyIsInVwZGF0ZWQiLCJjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUiLCJzZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyIiwiX3JlZjEwIiwiZGF0YVVyaSIsInNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyIiwiX3JlZjExIiwiY2xlYW51cEV4cG9ydEltYWdlVXBkYXRlciIsInN0YXJ0RXhwb3J0aW5nSW1hZ2VVcGRhdGVyIiwiX3JlZjEyIiwiX3JlZjEyJHBheWxvYWQiLCJvcHRpb25zIiwiaW1hZ2VTZXR0aW5ncyIsImNvbXBvc2VfIiwiYXBwbHlfIiwicGF5bG9hZF8iLCJzZXRFeHBvcnRTZWxlY3RlZERhdGFzZXRVcGRhdGVyIiwiX3JlZjEzIiwiZGF0YXNldCIsInNldEV4cG9ydERhdGFUeXBlVXBkYXRlciIsIl9yZWYxNCIsInNldEV4cG9ydEZpbHRlcmVkVXBkYXRlciIsIl9yZWYxNSIsInNldEV4cG9ydERhdGFVcGRhdGVyIiwic2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlciIsIl9yZWYxNiIsInNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXIiLCJfcmVmMTciLCJmb3JtYXQiLCJzZXRFeHBvcnRNYXBIVE1MTW9kZVVwZGF0ZXIiLCJfcmVmMTgiLCJhZGROb3RpZmljYXRpb25VcGRhdGVyIiwiX3JlZjE5Iiwib2xkTm90aWZpY2F0aW9ucyIsInBheWxvYWRJZCIsIm5vdGlmaWNhdGlvblRvVXBkYXRlIiwiZmluZCIsIm4iLCJtYXAiLCJjcmVhdGVOb3RpZmljYXRpb24iLCJjb3VudCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJyZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyIiwiX3JlZjIwIiwibG9hZEZpbGVzVXBkYXRlciIsImxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWYyMSIsImVycm9yTm90aWZpY2F0aW9uIiwibWVzc2FnZSIsInRvcGljIiwiREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTIiwiZ2xvYmFsIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZW50cmllcyIsImFjYyIsImVudHJ5Iiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJEQVRBX1RBQkxFX0lEIiwic2V0TG9jYWxlVXBkYXRlciIsIl9yZWYyMiIsInRvZ2dsZVBhbmVsTGlzdFZpZXdVcGRhdGVyIiwiX3JlZjIzIiwiX3JlZjIzJHBheWxvYWQiLCJsaXN0VmlldyIsInN0YXRlUHJvcCJdLCJzb3VyY2VzIjpbIi4uL3NyYy91aS1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICBBRERfREFUQV9JRCxcbiAgREFUQV9UQUJMRV9JRCxcbiAgREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTLFxuICBERUxFVEVfREFUQV9JRCxcbiAgRVhQT1JUX0RBVEFfVFlQRSxcbiAgRVhQT1JUX0hUTUxfTUFQX01PREVTLFxuICBFWFBPUlRfSU1HX1JBVElPUyxcbiAgRVhQT1JUX01BUF9GT1JNQVRTLFxuICBSRVNPTFVUSU9OUyxcbiAgTUFQX0NPTlRST0xTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1xuICBjcmVhdGVOb3RpZmljYXRpb24sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtwYXlsb2FkXywgYXBwbHlfLCBjb21wb3NlX30gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcblxuaW1wb3J0IHtcbiAgQWN0aW9uVHlwZXMsXG4gIEtlcGxlckdsSW5pdFBheWxvYWQsXG4gIExvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb24sXG4gIFVJU3RhdGVBY3Rpb25zXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge1xuICBFeHBvcnREYXRhLFxuICBFeHBvcnRIdG1sLFxuICBFeHBvcnRKc29uLFxuICBFeHBvcnRNYXAsXG4gIEV4cG9ydEltYWdlLFxuICBNYXBDb250cm9sSXRlbSxcbiAgTWFwQ29udHJvbHMsXG4gIFVpU3RhdGVcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMID0gJ2xheWVyJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREFMID0gQUREX0RBVEFfSUQ7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB1aVN0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt1aVN0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgLy8gY2xpY2sgYnV0dG9uIHRvIGNsb3NlIHNpZGUgcGFuZWxcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB1aVN0YXRlOiB1aVN0YXRlVXBkYXRlcnMudG9nZ2xlU2lkZVBhbmVsVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgdWlTdGF0ZSwge3BheWxvYWQ6IG51bGx9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB1aVN0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuY29uc3QgREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVM6IE1hcENvbnRyb2xJdGVtID0ge1xuICBzaG93OiB0cnVlLFxuICBhY3RpdmU6IGZhbHNlLFxuICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAvLyBkZWZpbmVzIHdoaWNoIG1hcCBpbmRleCB1c2VycyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCAodGhyb3VnaCBtYXAgY29udHJvbHMpXG4gIGFjdGl2ZU1hcEluZGV4OiAwXG59O1xuXG5jb25zdCBERUZBVUxUX01BUF9MRUdFTkRfQ09OVFJPTCA9IHtcbiAgLi4uREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVMsXG4gIGRpc2FibGVFZGl0OiBmYWxzZVxufTtcbi8qKlxuICogQSBsaXN0IG9mIG1hcCBjb250cm9sIHZpc2liaWxpdHkgYW5kIHdoZXRoZXIgaXMgaXQgYWN0aXZlLlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgdmlzaWJsZUxheWVycyBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IG1hcExlZ2VuZCBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IHRvZ2dsZTNkIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZX1gXG4gKiBAcHJvcGVydHkgc3BsaXRNYXAgRGVmYXVsdDogYHtzaG93OiB0cnVlfWBcbiAqIEBwcm9wZXJ0eSBtYXBEcmF3IERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgbWFwTG9jYWxlIERlZmF1bHQ6IGB7c2hvdzogZmFsc2UsIGFjdGl2ZTogZmFsc2V9YFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBfQ09OVFJPTFM6IE1hcENvbnRyb2xzID0gKFxuICBPYmplY3Qua2V5cyhNQVBfQ09OVFJPTFMpIGFzIEFycmF5PGtleW9mIHR5cGVvZiBNQVBfQ09OVFJPTFM+XG4pLnJlZHVjZShcbiAgKGZpbmFsLCBjdXJyZW50KSA9PiAoe1xuICAgIC4uLmZpbmFsLFxuICAgIFtjdXJyZW50XTpcbiAgICAgIGN1cnJlbnQgPT09IE1BUF9DT05UUk9MUy5tYXBMZWdlbmRcbiAgICAgICAgPyBERUZBVUxUX01BUF9MRUdFTkRfQ09OVFJPTFxuICAgICAgICA6IERFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTXG4gIH0pLFxuICB7fSBhcyBNYXBDb250cm9sc1xuKTtcblxuLyoqXG4gKiBEZWZhdWx0IGltYWdlIGV4cG9ydCBjb25maWdcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHJhdGlvIERlZmF1bHQ6IGAnU0NSRUVOJ2AsXG4gKiBAcHJvcGVydHkgcmVzb2x1dGlvbiBEZWZhdWx0OiBgJ09ORV9YJ2AsXG4gKiBAcHJvcGVydHkgbGVnZW5kIERlZmF1bHQ6IGBmYWxzZWAsXG4gKiBAcHJvcGVydHkgbWFwSCBEZWZhdWx0OiAwLFxuICogQHByb3BlcnR5IG1hcFcgRGVmYXVsdDogMCxcbiAqIEBwcm9wZXJ0eSBpbWFnZVNpemUgRGVmYXVsdDoge3pvb21PZmZzZXQ6IDAsIHNjYWxlOiAxLCBpbWFnZVc6IDAsIGltYWdlSDogMH0sXG4gKiBAcHJvcGVydHkgaW1hZ2VEYXRhVXJpIERlZmF1bHQ6IGAnJ2AsXG4gKiBAcHJvcGVydHkgZXhwb3J0aW5nIERlZmF1bHQ6IGBmYWxzZWBcbiAqIEBwcm9wZXJ0eSBlcnJvciBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgZXNjYXBlWGh0bWxGb3JXZWJwYWNrIERlZmF1bHQ6IGZyb20gYXBwbGljYXRpb24gY29uZmlnIChhdXRvLWRldGVjdGVkOiBgdHJ1ZWAgZm9yIHdlYnBhY2spXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9JTUFHRTogRXhwb3J0SW1hZ2UgPSB7XG4gIC8vIHVzZXIgb3B0aW9uc1xuICByYXRpbzogRVhQT1JUX0lNR19SQVRJT1MuU0NSRUVOLFxuICByZXNvbHV0aW9uOiBSRVNPTFVUSU9OUy5PTkVfWCxcbiAgbGVnZW5kOiBmYWxzZSxcbiAgbWFwSDogMCxcbiAgbWFwVzogMCxcbiAgaW1hZ2VTaXplOiB7XG4gICAgem9vbU9mZnNldDogMCxcbiAgICBzY2FsZTogMSxcbiAgICBpbWFnZVc6IDAsXG4gICAgaW1hZ2VIOiAwXG4gIH0sXG4gIC8vIHdoZW4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIG1vY2sgbWFwIHZpZXdwb3J0IHdpbGwgbW92ZSB0byB0aGUgY2VudGVyIG9mIGRhdGFcbiAgY2VudGVyOiBmYWxzZSxcbiAgLy8gZXhwb3J0aW5nIHN0YXRlXG4gIGltYWdlRGF0YVVyaTogJycsXG4gIC8vIGV4cG9ydGluZzogdXNlZCB0byBhdHRhY2ggcGxvdC1jb250YWluZXIgdG8gZG9tXG4gIGV4cG9ydGluZzogZmFsc2UsXG4gIC8vIHByb2Nlc3Npbmc6IHVzZWQgYXMgbG9hZGluZyBpbmRpY2F0b3Igd2hlbiBleHBvcnQgaW1hZ2UgaXMgYmVpbmcgcHJvZHVjZWRcbiAgcHJvY2Vzc2luZzogZmFsc2UsXG4gIGVycm9yOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byBhcHBseSBmaXggZm9yIHVnbGlmeSBlcnJvciBpbiBkb20tdG8taW1hZ2UgKGZyb20gYXBwbGljYXRpb24gY29uZmlnLCBhdXRvLWRldGVjdHMgYnVpbGQgdG9vbClcbiAgZXNjYXBlWGh0bWxGb3JXZWJwYWNrOiBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVzY2FwZVhodG1sRm9yV2VicGFja1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9BRF9GSUxFUyA9IHtcbiAgZmlsZUxvYWRpbmc6IGZhbHNlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgZXhwb3J0RGF0YWAgc2V0dGluZ3NcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHNlbGVjdGVkRGF0YXNldCBEZWZhdWx0OiBgJydgLFxuICogQHByb3BlcnR5IGRhdGFUeXBlIERlZmF1bHQ6IGAnY3N2J2AsXG4gKiBAcHJvcGVydHkgZmlsdGVyZWQgRGVmYXVsdDogYHRydWVgLFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfREFUQTogRXhwb3J0RGF0YSA9IHtcbiAgc2VsZWN0ZWREYXRhc2V0OiAnJyxcbiAgZGF0YVR5cGU6IEVYUE9SVF9EQVRBX1RZUEUuQ1NWLFxuICBmaWx0ZXJlZDogdHJ1ZVxufTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9USUZJQ0FUSU9OUyA9IFtdO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IGV4cG9ydE1hcGJveEFjY2Vzc1Rva2VuIC0gRGVmYXVsdDogbnVsbCwgdGhpcyBpcyB1c2VkIHdoZW4gd2UgcHJvdmlkZSBhIGRlZmF1bHQgbWFwYm94IHRva2VuIGZvciB1c2VycyB0byB0YWtlIGFkdmFudGFnZSBvZlxuICogQHByb3BlcnR5IHVzZXJNYXBib3hUb2tlbiAtIERlZmF1bHQ6ICcnLCBtYXBib3ggdG9rZW4gcHJvdmlkZWQgYnkgdXNlciB0aHJvdWdoIGlucHV0IGZpZWxkXG4gKiBAcHJvcGVydHkgbW9kZSAtIERlZmF1bHQ6ICdSRUFEJywgcmVhZCBvbmx5IG9yIGVkaXRhYmxlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9IVE1MOiBFeHBvcnRIdG1sID0ge1xuICBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbjogbnVsbCxcbiAgdXNlck1hcGJveFRva2VuOiAnJyxcbiAgbW9kZTogRVhQT1JUX0hUTUxfTUFQX01PREVTLlJFQURcbn07XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgaGFzRGF0YSAtIERlZmF1bHQ6ICd0cnVlJyxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0pTT046IEV4cG9ydEpzb24gPSB7XG4gIGhhc0RhdGE6IHRydWVcbn07XG5cbi8qKlxuICogRXhwb3J0IE1hcCBDb25maWdcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IEhUTUwgLSBEZWZhdWx0OiAnREVGQVVMVF9FWFBPUlRfSFRNTCcsXG4gKiBAcHJvcGVydHkgSlNPTiAtIERlZmF1bHQ6ICdERUZBVUxUX0VYUE9SVF9KU09OJyxcbiAqIEBwcm9wZXJ0eSBmb3JtYXQgLSBEZWZhdWx0OiAnSFRNTCcsXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9NQVA6IEV4cG9ydE1hcCA9IHtcbiAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXTogREVGQVVMVF9FWFBPUlRfSFRNTCxcbiAgW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXTogREVGQVVMVF9FWFBPUlRfSlNPTixcbiAgZm9ybWF0OiBFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHVpU3RhdGVgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSByZWFkT25seSBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgYWN0aXZlU2lkZVBhbmVsIERlZmF1bHQ6IGAnbGF5ZXInYFxuICogQHByb3BlcnR5IGN1cnJlbnRNb2RhbCBEZWZhdWx0OiBgJ2FkZERhdGEnYFxuICogQHByb3BlcnR5IGRhdGFzZXRLZXlUb1JlbW92ZSBEZWZhdWx0OiBgbnVsbGBcbiAqIEBwcm9wZXJ0eSB2aXNpYmxlRHJvcGRvd24gRGVmYXVsdDogYG51bGxgXG4gKiBAcHJvcGVydHkgZXhwb3J0SW1hZ2UgRGVmYXVsdDogW2BERUZBVUxUX0VYUE9SVF9JTUFHRWBdKCNkZWZhdWx0X2V4cG9ydF9pbWFnZSlcbiAqIEBwcm9wZXJ0eSBleHBvcnREYXRhIERlZmF1bHQ6IFtgREVGQVVMVF9FWFBPUlRfREFUQWBdKCNkZWZhdWx0X2V4cG9ydF9kYXRhKVxuICogQHByb3BlcnR5IGV4cG9ydE1hcCBEZWZhdWx0OiBbYERFRkFVTFRfRVhQT1JUX01BUGBdKCNkZWZhdWx0X2V4cG9ydF9tYXApXG4gKiBAcHJvcGVydHkgbWFwQ29udHJvbHMgRGVmYXVsdDogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEBwcm9wZXJ0eSBub3RpZmljYXRpb25zIERlZmF1bHQ6IGBbXWBcbiAqIEBwcm9wZXJ0eSBub3RpZmljYXRpb25zIERlZmF1bHQ6IGBbXWBcbiAqIEBwcm9wZXJ0eSBsb2FkRmlsZXNcbiAqIEBwcm9wZXJ0eSBpc1NpZGVQYW5lbENsb3NlQnV0dG9uVmlzaWJsZSBEZWZhdWx0OiBgdHJ1ZWBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVUlfU1RBVEU6IFVpU3RhdGUgPSB7XG4gIHJlYWRPbmx5OiBmYWxzZSxcbiAgYWN0aXZlU2lkZVBhbmVsOiBERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMLFxuICBjdXJyZW50TW9kYWw6IERFRkFVTFRfTU9EQUwsXG4gIGRhdGFzZXRLZXlUb1JlbW92ZTogbnVsbCxcbiAgdmlzaWJsZURyb3Bkb3duOiBudWxsLFxuICAvLyBleHBvcnQgaW1hZ2UgbW9kYWwgdWlcbiAgZXhwb3J0SW1hZ2U6IERFRkFVTFRfRVhQT1JUX0lNQUdFLFxuICAvLyBleHBvcnQgZGF0YSBtb2RhbCB1aVxuICBleHBvcnREYXRhOiBERUZBVUxUX0VYUE9SVF9EQVRBLFxuICAvLyBodG1sIGV4cG9ydFxuICBleHBvcnRNYXA6IERFRkFVTFRfRVhQT1JUX01BUCxcbiAgLy8gbWFwIGNvbnRyb2wgcGFuZWxzXG4gIG1hcENvbnRyb2xzOiBERUZBVUxUX01BUF9DT05UUk9MUyxcbiAgLy8gdWkgbm90aWZpY2F0aW9uc1xuICBub3RpZmljYXRpb25zOiBERUZBVUxUX05PVElGSUNBVElPTlMsXG4gIC8vIGxvYWQgZmlsZXNcbiAgbG9hZEZpbGVzOiBERUZBVUxUX0xPQURfRklMRVMsXG4gIC8vIExvY2FsZSBvZiB0aGUgVUlcbiAgbG9jYWxlOiBMT0NBTEVfQ09ERVMuZW4sXG4gIGxheWVyUGFuZWxMaXN0VmlldzogJ2xpc3QnLFxuICBmaWx0ZXJQYW5lbExpc3RWaWV3OiAnbGlzdCcsXG4gIGlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlOiB0cnVlXG59O1xuXG4vKiBVcGRhdGVycyAqL1xuLyoqXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0VWlTdGF0ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICBhY3Rpb246IHtcbiAgICB0eXBlPzogKHR5cGVvZiBBY3Rpb25UeXBlcylbJ0lOSVQnXTtcbiAgICBwYXlsb2FkOiBLZXBsZXJHbEluaXRQYXlsb2FkO1xuICB9XG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICAuLi4oYWN0aW9uLnBheWxvYWQgfHwge30pLmluaXRpYWxVaVN0YXRlXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBpZCBvZiBzaWRlIHBhbmVsIHRvIGJlIHNob3duLCBvbmUgb2YgYGxheWVyYCwgYGZpbHRlcmAsIGBpbnRlcmFjdGlvbmAsIGBtYXBgLiBjbG9zZSBzaWRlIHBhbmVsIGlmIGBudWxsYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTaWRlUGFuZWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlU2lkZVBhbmVsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIHJldHVybiBpZCA9PT0gc3RhdGUuYWN0aXZlU2lkZVBhbmVsXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYWN0aXZlU2lkZVBhbmVsOiBpZFxuICAgICAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBhbmQgaGlkZSBtb2RhbCBkaWFsb2dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbWFjdGlvbi5wYXlsb2FkIGlkIG9mIG1vZGFsIHRvIGJlIHNob3duLCBudWxsIHRvIGhpZGUgbW9kYWxzLiBPbmUgb2Y6XG4gKiAgLSBbYERBVEFfVEFCTEVfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNkYXRhX3RhYmxlX2lkKVxuICogIC0gW2BERUxFVEVfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2RlbGV0ZV9kYXRhX2lkKVxuICogIC0gW2BBRERfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2FkZF9kYXRhX2lkKVxuICogIC0gW2BFWFBPUlRfSU1BR0VfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNleHBvcnRfaW1hZ2VfaWQpXG4gKiAgLSBbYEVYUE9SVF9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZXhwb3J0X2RhdGFfaWQpXG4gKiAgLSBbYEFERF9NQVBfU1RZTEVfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNhZGRfbWFwX3N0eWxlX2lkKVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVNb2RhbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVNb2RhbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGN1cnJlbnRNb2RhbDogaWRcbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgc2lkZSBwYW5lbCBoZWFkZXIgZHJvcGRvd24sIGFjdGl2YXRlZCBieSBjbGlja2luZyB0aGUgc2hhcmUgbGluayBvbiB0b3Agb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dFeHBvcnREcm9wZG93blVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5TaG93RXhwb3J0RHJvcGRvd25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICB2aXNpYmxlRHJvcGRvd246IGlkXG59KTtcblxuLyoqXG4gKiBIaWRlIHNpZGUgcGFuZWwgaGVhZGVyIGRyb3Bkb3duLCBhY3RpdmF0ZWQgYnkgY2xpY2tpbmcgdGhlIHNoYXJlIGxpbmsgb24gdG9wIG9mIHRoZSBzaWRlIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBoaWRlRXhwb3J0RHJvcGRvd25VcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgdmlzaWJsZURyb3Bkb3duOiBudWxsXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgc2lkZSBwYW5lbCBjbG9zZSBidXR0b24gb24gdG9wIGxlZnQgb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7c2hvd319OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVTaWRlUGFuZWxDbG9zZUJ1dHRvblVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlOiBzaG93XG59KTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG1hcCBjb250cm9sIHBhbmVsIGlkLCBvbmUgb2YgdGhlIGtleXMgb2Y6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBpbmRleCA9IDB9fTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBsZXQgdXBkYXRlZFN0YXRlID0gc3RhdGU7XG4gIC8vIFRoZSBlZmZlY3QgcGFuZWwgYW5kIGFpIGFzc2lzdGFudCBwYW5lbCBjYW4gbm90IGJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIHNvIHdlIG5lZWQgdG8gZGVhY3RpdmF0ZSB0aGUgb3RoZXIgcGFuZWwgd2hlbiBvbmUgaXMgYWN0aXZhdGVkXG4gIGNvbnN0IHBhbmVsVG9EZWFjdGl2YXRlID1cbiAgICBwYW5lbElkID09PSBNQVBfQ09OVFJPTFMuZWZmZWN0XG4gICAgICA/IE1BUF9DT05UUk9MUy5haUFzc2lzdGFudFxuICAgICAgOiBwYW5lbElkID09PSBNQVBfQ09OVFJPTFMuYWlBc3Npc3RhbnRcbiAgICAgID8gTUFQX0NPTlRST0xTLmVmZmVjdFxuICAgICAgOiBudWxsO1xuXG4gIC8vIFRvIHRvIHRvZ2dsZSB0aGUgbWFwRHJhdyBhbmQgbWFwTG9jYWwgZHJvcGRvd25zXG4gIC8vIFdlIGhhdmUgdG8gZGVhY3RpdmF0ZSB0aGUgb3RoZXIgYWN0aXZlIGRyb3Bkb3duXG4gIGNvbnN0IGRyb3Bkb3duVG9EZWFjdGl2YXRlID1cbiAgICBwYW5lbElkID09PSBNQVBfQ09OVFJPTFMubWFwRHJhd1xuICAgICAgPyBNQVBfQ09OVFJPTFMubWFwTG9jYWxlXG4gICAgICA6IHBhbmVsSWQgPT09IE1BUF9DT05UUk9MUy5tYXBMb2NhbGVcbiAgICAgID8gTUFQX0NPTlRST0xTLm1hcERyYXdcbiAgICAgIDogbnVsbDtcblxuICAvLyBJZiB3ZSBuZWVkIHRvIGRlYWN0aXZhdGUgYSBjb21wZXRpbmcgcGFuZWwgYW5kIGl0J3MgY3VycmVudGx5IGFjdGl2ZVxuICBpZiAocGFuZWxUb0RlYWN0aXZhdGUgJiYgc3RhdGUubWFwQ29udHJvbHNbcGFuZWxUb0RlYWN0aXZhdGVdPy5hY3RpdmUpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1hcENvbnRyb2xzOiB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9scyxcbiAgICAgICAgW3BhbmVsVG9EZWFjdGl2YXRlXToge1xuICAgICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9sc1twYW5lbFRvRGVhY3RpdmF0ZV0sXG4gICAgICAgICAgYWN0aXZlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIElmIHdlIG5lZWQgdG8gZGVhY3RpdmF0ZSBhIGNvbXBldGluZyBkcm9wZG93biBhbmQgaXQncyBjdXJyZW50bHkgYWN0aXZlXG4gIGlmIChkcm9wZG93blRvRGVhY3RpdmF0ZSAmJiBzdGF0ZS5tYXBDb250cm9sc1tkcm9wZG93blRvRGVhY3RpdmF0ZV0/LmFjdGl2ZSkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbWFwQ29udHJvbHM6IHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgICBbZHJvcGRvd25Ub0RlYWN0aXZhdGVdOiB7XG4gICAgICAgICAgLi4udXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW2Ryb3Bkb3duVG9EZWFjdGl2YXRlXSxcbiAgICAgICAgICBhY3RpdmU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9scyxcbiAgICAgIFtwYW5lbElkXToge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUubWFwQ29udHJvbHNbcGFuZWxJZF0sXG4gICAgICAgIGFjdGl2ZTogIXVwZGF0ZWRTdGF0ZS5tYXBDb250cm9sc1twYW5lbElkXS5hY3RpdmUsXG4gICAgICAgIGFjdGl2ZU1hcEluZGV4OiBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIG1hcCBjb250cm9sIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBzaG93fX06IFVJU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUubWFwQ29udHJvbHM/LltwYW5lbElkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7XG4gICAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLFxuICAgICAgICBzaG93OiBCb29sZWFuKHNob3cpXG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgbWFwIGNvbnRyb2wgc2V0dGluZ3NcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7cGFuZWxJZCwgc2V0dGluZ3N9fTogVUlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IG1hcENvbnRyb2wgPSBzdGF0ZS5tYXBDb250cm9scz8uW3BhbmVsSWRdO1xuICBpZiAoIW1hcENvbnRyb2wpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcENvbnRyb2xzOiB7XG4gICAgICAuLi5zdGF0ZS5tYXBDb250cm9scyxcbiAgICAgIFtwYW5lbElkXTogey4uLm1hcENvbnRyb2wsIHNldHRpbmdzOiB7Li4ubWFwQ29udHJvbC5zZXR0aW5ncywgLi4uc2V0dGluZ3N9fVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBtYXAgY29udHJvbCBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGRhdGFzZXQgaWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgb3BlbkRlbGV0ZU1vZGFsVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBkYXRhc2V0S2V5VG9SZW1vdmV9OiBVSVN0YXRlQWN0aW9ucy5PcGVuRGVsZXRlTW9kYWxVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBjdXJyZW50TW9kYWw6IERFTEVURV9EQVRBX0lELFxuICBkYXRhc2V0S2V5VG9SZW1vdmVcbn0pO1xuXG4vKipcbiAqIFNldCBgZXhwb3J0SW1hZ2UubGVnZW5kYCB0byBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG5ld1NldHRpbmd9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3QgdXBkYXRlZCA9IHsuLi5zdGF0ZS5leHBvcnRJbWFnZSwgLi4ubmV3U2V0dGluZ307XG4gIGNvbnN0IGltYWdlU2l6ZSA9IGNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSh1cGRhdGVkKSB8fCBzdGF0ZS5leHBvcnRJbWFnZS5pbWFnZVNpemU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBleHBvcnRJbWFnZToge1xuICAgICAgLi4udXBkYXRlZCxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIC8vIFRPRE86IGNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSBkb2VzIG5vdCByZXR1cm4gaW1hZ2VTaXplLnpvb21PZmZzZXQsXG4gICAgICAvLyBkbyB3ZSBuZWVkIHRha2UgdGhpcyB2YWx1ZSBmcm9tIGN1cnJlbnQgc3RhdGUsIG9yIHJldHVybiBkZWZhdWwgdmFsdWUgPSAwXG4gICAgICBpbWFnZVNpemVcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBgZXhwb3J0SW1hZ2Uuc2V0RXhwb3J0SW1hZ2VEYXRhVXJpYCB0byBhIGltYWdlIGRhdGFVcmlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBleHBvcnQgaW1hZ2UgZGF0YSB1cmlcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBkYXRhVXJpfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGlmIChkYXRhVXJpID09PSBzdGF0ZS5leHBvcnRJbWFnZS5pbWFnZURhdGFVcmkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBleHBvcnRJbWFnZToge1xuICAgICAgLi4uc3RhdGUuZXhwb3J0SW1hZ2UsXG4gICAgICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgICAgIGltYWdlRGF0YVVyaTogZGF0YVVyaVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZXJyb3J9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0SW1hZ2U6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRJbWFnZSxcbiAgICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgICBlcnJvclxuICB9XG59KTtcblxuLyoqXG4gKiBEZWxldGUgY2FjaGVkIGV4cG9ydCBpbWFnZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY2xlYW51cEV4cG9ydEltYWdlVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydEltYWdlOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0SW1hZ2UsXG4gICAgZXhwb3J0aW5nOiBmYWxzZSxcbiAgICBpbWFnZURhdGFVcmk6ICcnLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgICBjZW50ZXI6IGZhbHNlXG4gIH1cbn0pO1xuXG4vKipcbiAqIFN0YXJ0IGltYWdlIGV4cG9ydGluZyBmbG93XG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyB7VWlTdGF0ZX1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXJ0RXhwb3J0aW5nSW1hZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG9wdGlvbnMgPSB7fX06IHtwYXlsb2FkOiBQYXJ0aWFsPEV4cG9ydEltYWdlPn1cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCBpbWFnZVNldHRpbmdzID0ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZXhwb3J0aW5nOiB0cnVlXG4gIH07XG5cbiAgcmV0dXJuIGNvbXBvc2VfKFtcbiAgICBjbGVhbnVwRXhwb3J0SW1hZ2VVcGRhdGVyLFxuICAgIGFwcGx5XyhzZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyLCBwYXlsb2FkXyhpbWFnZVNldHRpbmdzKSlcbiAgXSkoc3RhdGUpO1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgZGF0YXNldCBmb3IgZXhwb3J0XG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZGF0YXNldCBpZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRTZWxlY3RlZERhdGFzZXRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFzZXR9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRTZWxlY3RlZERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBzZWxlY3RlZERhdGFzZXQ6IGRhdGFzZXRcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IGRhdGEgZm9ybWF0IGZvciBleHBvcnRpbmcgZGF0YVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG9uZSBvZiBgJ3RleHQvY3N2J2BcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFUeXBlfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBkYXRhVHlwZVxuICB9XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGV4cG9ydCBmaWx0ZXJlZCBkYXRhLCBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEZpbHRlcmVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBmaWx0ZXJlZH06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEZpbHRlcmVkVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0RGF0YToge1xuICAgIC4uLnN0YXRlLmV4cG9ydERhdGEsXG4gICAgZmlsdGVyZWRcbiAgfVxufSk7XG5cbi8qKlxuICogV2hldGhlciB0byBpbmNsdWRpbmcgZGF0YSBpbiBtYXAgY29uZmlnLCB0b2dnbGUgYmV0d2VlbiBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICBbRVhQT1JUX01BUF9GT1JNQVRTLkpTT05dOiB7XG4gICAgICAuLi5zdGF0ZS5leHBvcnRNYXBbRVhQT1JUX01BUF9GT1JNQVRTLkpTT05dLFxuICAgICAgaGFzRGF0YTogIXN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl0uaGFzRGF0YVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogd2hldGhlciB0byBleHBvcnQgYSBtYXBib3ggYWNjZXNzIHRvIEhUTUwgc2luZ2xlIHBhZ2VcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogdXNlck1hcGJveFRva2VufTogVUlTdGF0ZUFjdGlvbnMuU2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF0sXG4gICAgICB1c2VyTWFwYm94VG9rZW5cbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIFNldHMgdGhlIGV4cG9ydCBtYXAgZm9ybWF0XG4gKiBAcGFyYW0gc3RhdGUgLSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBmb3JtYXQgdG8gdXNlIHRvIGV4cG9ydCB0aGUgbWFwIGludG9cbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZvcm1hdH06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgZm9ybWF0XG4gIH1cbn0pO1xuXG4vKipcbiAqIFNldCB0aGUgZXhwb3J0IGh0bWwgbWFwIG1vZGVcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIHRvIGJlIHNldCAoYXZhaWxhYmxlIG1vZGVzOiBFWFBPUlRfSFRNTF9NQVBfTU9ERVMpXG4gKiBAcmV0dXJuIG5leHRTdGF0ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0TWFwSFRNTE1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG1vZGV9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRIVE1MTWFwTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdOiB7XG4gICAgICAuLi5zdGF0ZS5leHBvcnRNYXBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdLFxuICAgICAgbW9kZVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogQWRkcyBhIG5ldyBub3RpZmljYXRpb24uXG4gKiBVcGRhdGVzIGEgbm90aWZpY2F0aW9uIGluIGNhc2Ugb2YgbWF0Y2hpbmcgaWRzLlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIFBhcmFtcyBvZiBhIG5vdGlmaWNhdGlvblxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGROb3RpZmljYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWR9OiBVSVN0YXRlQWN0aW9ucy5BZGROb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3Qgb2xkTm90aWZpY2F0aW9ucyA9IHN0YXRlLm5vdGlmaWNhdGlvbnMgfHwgW107XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgY29uc3QgcGF5bG9hZElkID0gcGF5bG9hZD8uaWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRvVXBkYXRlID0gcGF5bG9hZElkID8gb2xkTm90aWZpY2F0aW9ucy5maW5kKG4gPT4gbi5pZCA9PT0gcGF5bG9hZElkKSA6IG51bGw7XG5cbiAgbGV0IG5vdGlmaWNhdGlvbnM7XG4gIGlmIChub3RpZmljYXRpb25Ub1VwZGF0ZSkge1xuICAgIG5vdGlmaWNhdGlvbnMgPSBvbGROb3RpZmljYXRpb25zLm1hcChuID0+XG4gICAgICBuLmlkID09PSBwYXlsb2FkSWQgPyBjcmVhdGVOb3RpZmljYXRpb24oey4uLnBheWxvYWQsIGNvdW50OiBuLmNvdW50ICsgMX0pIDogblxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbm90aWZpY2F0aW9ucyA9IFsuLi5vbGROb3RpZmljYXRpb25zLCBjcmVhdGVOb3RpZmljYXRpb24ocGF5bG9hZCldO1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgbm90aWZpY2F0aW9uc307XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIG5vdGlmaWNhdGlvblxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGlkIG9mIHRoZSBub3RpZmljYXRpb24gdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVUlTdGF0ZUFjdGlvbnMuUmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbm90aWZpY2F0aW9uczogc3RhdGUubm90aWZpY2F0aW9ucy5maWx0ZXIobiA9PiBuLmlkICE9PSBpZClcbn0pO1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gZmlsZSBsb2FkaW5nIGJlZ2luXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2FkRmlsZXM6IHtcbiAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgZmlsZUxvYWRpbmc6IHRydWVcbiAgfVxufSk7XG5cbi8qKlxuICogSGFuZGxlcyBsb2FkaW5nIGZpbGUgc3VjY2VzcyBhbmQgc2V0IGZpbGVMb2FkaW5nIHByb3BlcnR5IHRvIGZhbHNlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbG9hZEZpbGVzOiB7XG4gICAgLi4uc3RhdGUubG9hZEZpbGVzLFxuICAgIGZpbGVMb2FkaW5nOiBmYWxzZVxuICB9XG59KTtcblxuLyoqXG4gKiBIYW5kbGVzIGxvYWQgZmlsZSBlcnJvciBhbmQgc2V0IGZpbGVMb2FkaW5nIHByb3BlcnR5IHRvIGZhbHNlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24uZXJyb3JcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSwge2Vycm9yfTogTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbik6IFVpU3RhdGUgPT5cbiAgYWRkTm90aWZpY2F0aW9uVXBkYXRlcihcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWRGaWxlczoge1xuICAgICAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgcGF5bG9hZDogZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICBtZXNzYWdlOiAoZXJyb3IgfHwge30pLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byB1cGxvYWQgZmlsZXMnLFxuICAgICAgICB0b3BpYzogREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTLmdsb2JhbFxuICAgICAgfSlcbiAgICB9XG4gICk7XG5cbi8qKlxuICogSGFuZGxlcyB0b2dnbGUgbWFwIHNwbGl0IGFuZCByZXNldCBhbGwgbWFwIGNvbnRyb2wgaW5kZXggdG8gMFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1hcENvbnRyb2xzOiBPYmplY3QuZW50cmllcyhzdGF0ZS5tYXBDb250cm9scykucmVkdWNlKFxuICAgIChhY2MsIGVudHJ5KSA9PiAoe1xuICAgICAgLi4uYWNjLFxuICAgICAgW2VudHJ5WzBdXToge1xuICAgICAgICAuLi5lbnRyeVsxXSxcbiAgICAgICAgYWN0aXZlTWFwSW5kZXg6IDBcbiAgICAgIH1cbiAgICB9KSxcbiAgICB7fSBhcyBNYXBDb250cm9sc1xuICApXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgbW9kYWwgZGF0YVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PlxuICB0b2dnbGVNb2RhbFVwZGF0ZXIoc3RhdGUsIHtwYXlsb2FkOiBEQVRBX1RBQkxFX0lEfSk7XG5cbi8qKlxuICogU2V0IHRoZSBsb2NhbGUgb2YgdGhlIFVJXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZC5sb2NhbGUgbG9jYWxlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvY2FsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge2xvY2FsZX19OiBVSVN0YXRlQWN0aW9ucy5TZXRMb2NhbGVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2NhbGVcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBsYXllciBwYW5lbCBsaXN0IHZpZXdcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBsYXllciBwYW5lbCBsaXN0VmlldyB2YWx1ZS4gQ2FuIGJlICdsaXN0JyBvciAnc29ydEJ5RGF0YXNldCdcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlUGFuZWxMaXN0Vmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3BhbmVsSWQsIGxpc3RWaWV3fX06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZVBhbmVsTGlzdFZpZXdBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVByb3AgPVxuICAgIHBhbmVsSWQgPT09ICdsYXllcidcbiAgICAgID8gJ2xheWVyUGFuZWxMaXN0VmlldydcbiAgICAgIDogcGFuZWxJZCA9PT0gJ2ZpbHRlcidcbiAgICAgID8gJ2ZpbHRlclBhbmVsTGlzdFZpZXcnXG4gICAgICA6IG51bGw7XG4gIGlmICghc3RhdGVQcm9wIHx8IHN0YXRlW3N0YXRlUHJvcF0gPT09IGxpc3RWaWV3KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgW3N0YXRlUHJvcF06IGxpc3RWaWV3XG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFZQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFNQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQThELFNBQUFJLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBbkIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBLElBdEI5RDtBQUNBO0FBd0NPLElBQU1vQix5QkFBeUIsR0FBQUMsT0FBQSxDQUFBRCx5QkFBQSxHQUFHLE9BQU87QUFDekMsSUFBTUUsYUFBYSxHQUFBRCxPQUFBLENBQUFDLGFBQUEsR0FBR0Msc0JBQVc7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxlQUFlLEdBQUcsSUFBSTtBQUM1Qjs7QUFFQSxJQUFNQyw2QkFBNkMsR0FBRztFQUNwREMsSUFBSSxFQUFFLElBQUk7RUFDVkMsTUFBTSxFQUFFLEtBQUs7RUFDYkMsWUFBWSxFQUFFLEtBQUs7RUFDbkI7RUFDQUMsY0FBYyxFQUFFO0FBQ2xCLENBQUM7QUFFRCxJQUFNQywwQkFBMEIsR0FBQWxCLGFBQUEsQ0FBQUEsYUFBQSxLQUMzQmEsNkJBQTZCO0VBQ2hDTSxXQUFXLEVBQUU7QUFBSyxFQUNuQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLG9CQUFpQyxHQUFBWCxPQUFBLENBQUFXLG9CQUFBLEdBQzVDN0IsTUFBTSxDQUFDQyxJQUFJLENBQUM2Qix1QkFBWSxDQUFDLENBQ3pCQyxNQUFNLENBQ04sVUFBQ0MsTUFBSyxFQUFFQyxPQUFPO0VBQUEsT0FBQXhCLGFBQUEsQ0FBQUEsYUFBQSxLQUNWdUIsTUFBSyxXQUFBbkIsZ0JBQUEsaUJBQ1BvQixPQUFPLEVBQ05BLE9BQU8sS0FBS0gsdUJBQVksQ0FBQ0ksU0FBUyxHQUM5QlAsMEJBQTBCLEdBQzFCTCw2QkFBNkI7QUFBQSxDQUNuQyxFQUNGLENBQUMsQ0FDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWEsb0JBQWlDLEdBQUFqQixPQUFBLENBQUFpQixvQkFBQSxHQUFHO0VBQy9DO0VBQ0FDLEtBQUssRUFBRUMsNEJBQWlCLENBQUNDLE1BQU07RUFDL0JDLFVBQVUsRUFBRUMsc0JBQVcsQ0FBQ0MsS0FBSztFQUM3QkMsTUFBTSxFQUFFLEtBQUs7RUFDYkMsSUFBSSxFQUFFLENBQUM7RUFDUEMsSUFBSSxFQUFFLENBQUM7RUFDUEMsU0FBUyxFQUFFO0lBQ1RDLFVBQVUsRUFBRSxDQUFDO0lBQ2JDLEtBQUssRUFBRSxDQUFDO0lBQ1JDLE1BQU0sRUFBRSxDQUFDO0lBQ1RDLE1BQU0sRUFBRTtFQUNWLENBQUM7RUFDRDtFQUNBQyxNQUFNLEVBQUUsS0FBSztFQUNiO0VBQ0FDLFlBQVksRUFBRSxFQUFFO0VBQ2hCO0VBQ0FDLFNBQVMsRUFBRSxLQUFLO0VBQ2hCO0VBQ0FDLFVBQVUsRUFBRSxLQUFLO0VBQ2pCQyxLQUFLLEVBQUUsS0FBSztFQUNaO0VBQ0FDLHFCQUFxQixFQUFFLElBQUFDLDJCQUFvQixFQUFDLENBQUMsQ0FBQ0Q7QUFDaEQsQ0FBQztBQUVNLElBQU1FLGtCQUFrQixHQUFBdkMsT0FBQSxDQUFBdUMsa0JBQUEsR0FBRztFQUNoQ0MsV0FBVyxFQUFFO0FBQ2YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxtQkFBK0IsR0FBQXpDLE9BQUEsQ0FBQXlDLG1CQUFBLEdBQUc7RUFDN0NDLGVBQWUsRUFBRSxFQUFFO0VBQ25CQyxRQUFRLEVBQUVDLDJCQUFnQixDQUFDQyxHQUFHO0VBQzlCQyxRQUFRLEVBQUU7QUFDWixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHFCQUFxQixHQUFBL0MsT0FBQSxDQUFBK0MscUJBQUEsR0FBRyxFQUFFOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLG1CQUErQixHQUFBaEQsT0FBQSxDQUFBZ0QsbUJBQUEsR0FBRztFQUM3Q0MsdUJBQXVCLEVBQUUsSUFBSTtFQUM3QkMsZUFBZSxFQUFFLEVBQUU7RUFDbkJDLElBQUksRUFBRUMsZ0NBQXFCLENBQUNDO0FBQzlCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLG1CQUErQixHQUFBdEQsT0FBQSxDQUFBc0QsbUJBQUEsR0FBRztFQUM3Q0MsT0FBTyxFQUFFO0FBQ1gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsa0JBQTZCLEdBQUF4RCxPQUFBLENBQUF3RCxrQkFBQSxPQUFBN0QsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFDdkM4RCw2QkFBa0IsQ0FBQ0MsSUFBSSxFQUFHVixtQkFBbUIsR0FDN0NTLDZCQUFrQixDQUFDRSxJQUFJLEVBQUdMLG1CQUFtQixhQUN0Q0csNkJBQWtCLENBQUNDLElBQUksQ0FDaEM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNRSxnQkFBeUIsR0FBQTVELE9BQUEsQ0FBQTRELGdCQUFBLEdBQUc7RUFDdkNDLFFBQVEsRUFBRSxLQUFLO0VBQ2ZDLGVBQWUsRUFBRS9ELHlCQUF5QjtFQUMxQ2dFLFlBQVksRUFBRTlELGFBQWE7RUFDM0IrRCxrQkFBa0IsRUFBRSxJQUFJO0VBQ3hCQyxlQUFlLEVBQUUsSUFBSTtFQUNyQjtFQUNBQyxXQUFXLEVBQUVqRCxvQkFBb0I7RUFDakM7RUFDQWtELFVBQVUsRUFBRTFCLG1CQUFtQjtFQUMvQjtFQUNBMkIsU0FBUyxFQUFFWixrQkFBa0I7RUFDN0I7RUFDQWEsV0FBVyxFQUFFMUQsb0JBQW9CO0VBQ2pDO0VBQ0EyRCxhQUFhLEVBQUV2QixxQkFBcUI7RUFDcEM7RUFDQXdCLFNBQVMsRUFBRWhDLGtCQUFrQjtFQUM3QjtFQUNBaUMsTUFBTSxFQUFFQywwQkFBWSxDQUFDQyxFQUFFO0VBQ3ZCQyxrQkFBa0IsRUFBRSxNQUFNO0VBQzFCQyxtQkFBbUIsRUFBRSxNQUFNO0VBQzNCQyw2QkFBNkIsRUFBRTtBQUNqQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsa0JBQWtCLEdBQUE5RSxPQUFBLENBQUE4RSxrQkFBQSxHQUFHLFNBQXJCQSxrQkFBa0JBLENBQzdCQyxLQUFjLEVBQ2RDLE1BR0M7RUFBQSxPQUFBekYsYUFBQSxDQUFBQSxhQUFBLEtBRUV3RixLQUFLLEdBQ0wsQ0FBQ0MsTUFBTSxDQUFDQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUVDLGNBQWM7QUFBQSxDQUN4Qzs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxzQkFBc0IsR0FBQW5GLE9BQUEsQ0FBQW1GLHNCQUFBLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FDakNKLEtBQWMsRUFBQUssSUFBQSxFQUVGO0VBQUEsSUFERkMsRUFBRSxHQUFBRCxJQUFBLENBQVhILE9BQU87RUFFUixPQUFPSSxFQUFFLEtBQUtOLEtBQUssQ0FBQ2pCLGVBQWUsR0FDL0JpQixLQUFLLEdBQUF4RixhQUFBLENBQUFBLGFBQUEsS0FFQXdGLEtBQUs7SUFDUmpCLGVBQWUsRUFBRXVCO0VBQUUsRUFDcEI7QUFDUCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGtCQUFrQixHQUFBdEYsT0FBQSxDQUFBc0Ysa0JBQUEsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUM3QlAsS0FBYyxFQUFBUSxLQUFBO0VBQUEsSUFDSkYsRUFBRSxHQUFBRSxLQUFBLENBQVhOLE9BQU87RUFBQSxPQUFBMUYsYUFBQSxDQUFBQSxhQUFBLEtBRUx3RixLQUFLO0lBQ1JoQixZQUFZLEVBQUVzQjtFQUFFO0FBQUEsQ0FDaEI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1HLHlCQUF5QixHQUFBeEYsT0FBQSxDQUFBd0YseUJBQUEsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUNwQ1QsS0FBYyxFQUFBVSxLQUFBO0VBQUEsSUFDSkosRUFBRSxHQUFBSSxLQUFBLENBQVhSLE9BQU87RUFBQSxPQUFBMUYsYUFBQSxDQUFBQSxhQUFBLEtBRUx3RixLQUFLO0lBQ1JkLGVBQWUsRUFBRW9CO0VBQUU7QUFBQSxDQUNuQjs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUsseUJBQXlCLEdBQUExRixPQUFBLENBQUEwRix5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQUlYLEtBQWM7RUFBQSxPQUFBeEYsYUFBQSxDQUFBQSxhQUFBLEtBQ25Ed0YsS0FBSztJQUNSZCxlQUFlLEVBQUU7RUFBSTtBQUFBLENBQ3JCOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNMEIsaUNBQWlDLEdBQUEzRixPQUFBLENBQUEyRixpQ0FBQSxHQUFHLFNBQXBDQSxpQ0FBaUNBLENBQzVDWixLQUFjLEVBQUFhLEtBQUE7RUFBQSxJQUNIdkYsSUFBSSxHQUFBdUYsS0FBQSxDQUFkWCxPQUFPLENBQUc1RSxJQUFJO0VBQUEsT0FBQWQsYUFBQSxDQUFBQSxhQUFBLEtBRVp3RixLQUFLO0lBQ1JGLDZCQUE2QixFQUFFeEU7RUFBSTtBQUFBLENBQ25DOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU13Rix1QkFBdUIsR0FBQTdGLE9BQUEsQ0FBQTZGLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENkLEtBQWMsRUFBQWUsS0FBQSxFQUVGO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMscUJBQUE7RUFBQSxJQUFBQyxhQUFBLEdBQUFILEtBQUEsQ0FEWGIsT0FBTztJQUFHaUIsT0FBTyxHQUFBRCxhQUFBLENBQVBDLE9BQU87SUFBQUMsbUJBQUEsR0FBQUYsYUFBQSxDQUFFRyxLQUFLO0lBQUxBLEtBQUssR0FBQUQsbUJBQUEsY0FBRyxDQUFDLEdBQUFBLG1CQUFBO0VBRTdCLElBQUlFLFlBQVksR0FBR3RCLEtBQUs7RUFDeEI7RUFDQTtFQUNBLElBQU11QixpQkFBaUIsR0FDckJKLE9BQU8sS0FBS3RGLHVCQUFZLENBQUMyRixNQUFNLEdBQzNCM0YsdUJBQVksQ0FBQzRGLFdBQVcsR0FDeEJOLE9BQU8sS0FBS3RGLHVCQUFZLENBQUM0RixXQUFXLEdBQ3BDNUYsdUJBQVksQ0FBQzJGLE1BQU0sR0FDbkIsSUFBSTs7RUFFVjtFQUNBO0VBQ0EsSUFBTUUsb0JBQW9CLEdBQ3hCUCxPQUFPLEtBQUt0Rix1QkFBWSxDQUFDOEYsT0FBTyxHQUM1QjlGLHVCQUFZLENBQUMrRixTQUFTLEdBQ3RCVCxPQUFPLEtBQUt0Rix1QkFBWSxDQUFDK0YsU0FBUyxHQUNsQy9GLHVCQUFZLENBQUM4RixPQUFPLEdBQ3BCLElBQUk7O0VBRVY7RUFDQSxJQUFJSixpQkFBaUIsS0FBQVAscUJBQUEsR0FBSWhCLEtBQUssQ0FBQ1YsV0FBVyxDQUFDaUMsaUJBQWlCLENBQUMsY0FBQVAscUJBQUEsZUFBcENBLHFCQUFBLENBQXNDekYsTUFBTSxFQUFFO0lBQ3JFK0YsWUFBWSxHQUFBOUcsYUFBQSxDQUFBQSxhQUFBLEtBQ1B3RixLQUFLO01BQ1JWLFdBQVcsRUFBQTlFLGFBQUEsQ0FBQUEsYUFBQSxLQUNOOEcsWUFBWSxDQUFDaEMsV0FBVyxXQUFBMUUsZ0JBQUEsaUJBQzFCMkcsaUJBQWlCLEVBQUEvRyxhQUFBLENBQUFBLGFBQUEsS0FDYjhHLFlBQVksQ0FBQ2hDLFdBQVcsQ0FBQ2lDLGlCQUFpQixDQUFDO1FBQzlDaEcsTUFBTSxFQUFFO01BQUs7SUFFaEIsRUFDRjtFQUNIOztFQUVBO0VBQ0EsSUFBSW1HLG9CQUFvQixLQUFBVCxxQkFBQSxHQUFJakIsS0FBSyxDQUFDVixXQUFXLENBQUNvQyxvQkFBb0IsQ0FBQyxjQUFBVCxxQkFBQSxlQUF2Q0EscUJBQUEsQ0FBeUMxRixNQUFNLEVBQUU7SUFDM0UrRixZQUFZLEdBQUE5RyxhQUFBLENBQUFBLGFBQUEsS0FDUHdGLEtBQUs7TUFDUlYsV0FBVyxFQUFBOUUsYUFBQSxDQUFBQSxhQUFBLEtBQ044RyxZQUFZLENBQUNoQyxXQUFXLFdBQUExRSxnQkFBQSxpQkFDMUI4RyxvQkFBb0IsRUFBQWxILGFBQUEsQ0FBQUEsYUFBQSxLQUNoQjhHLFlBQVksQ0FBQ2hDLFdBQVcsQ0FBQ29DLG9CQUFvQixDQUFDO1FBQ2pEbkcsTUFBTSxFQUFFO01BQUs7SUFFaEIsRUFDRjtFQUNIO0VBRUEsT0FBQWYsYUFBQSxDQUFBQSxhQUFBLEtBQ0s4RyxZQUFZO0lBQ2ZoQyxXQUFXLEVBQUE5RSxhQUFBLENBQUFBLGFBQUEsS0FDTjhHLFlBQVksQ0FBQ2hDLFdBQVcsV0FBQTFFLGdCQUFBLGlCQUMxQnVHLE9BQU8sRUFBQTNHLGFBQUEsQ0FBQUEsYUFBQSxLQUNIOEcsWUFBWSxDQUFDaEMsV0FBVyxDQUFDNkIsT0FBTyxDQUFDO01BQ3BDNUYsTUFBTSxFQUFFLENBQUMrRixZQUFZLENBQUNoQyxXQUFXLENBQUM2QixPQUFPLENBQUMsQ0FBQzVGLE1BQU07TUFDakRFLGNBQWMsRUFBRTRGO0lBQUs7RUFFeEI7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1RLDhCQUE4QixHQUFBNUcsT0FBQSxDQUFBNEcsOEJBQUEsR0FBRyxTQUFqQ0EsOEJBQThCQSxDQUN6QzdCLEtBQWMsRUFBQThCLEtBQUEsRUFFRjtFQUFBLElBQUFDLGtCQUFBO0VBQUEsSUFBQUMsYUFBQSxHQUFBRixLQUFBLENBRFg1QixPQUFPO0lBQUdpQixPQUFPLEdBQUFhLGFBQUEsQ0FBUGIsT0FBTztJQUFFN0YsSUFBSSxHQUFBMEcsYUFBQSxDQUFKMUcsSUFBSTtFQUV4QixJQUFJLEdBQUF5RyxrQkFBQSxHQUFDL0IsS0FBSyxDQUFDVixXQUFXLGNBQUF5QyxrQkFBQSxlQUFqQkEsa0JBQUEsQ0FBb0JaLE9BQU8sQ0FBQyxHQUFFO0lBQ2pDLE9BQU9uQixLQUFLO0VBQ2Q7RUFFQSxPQUFBeEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0t3RixLQUFLO0lBQ1JWLFdBQVcsRUFBQTlFLGFBQUEsQ0FBQUEsYUFBQSxLQUNOd0YsS0FBSyxDQUFDVixXQUFXLFdBQUExRSxnQkFBQSxpQkFDbkJ1RyxPQUFPLEVBQUEzRyxhQUFBLENBQUFBLGFBQUEsS0FDSHdGLEtBQUssQ0FBQ1YsV0FBVyxDQUFDNkIsT0FBTyxDQUFDO01BQzdCN0YsSUFBSSxFQUFFMkcsT0FBTyxDQUFDM0csSUFBSTtJQUFDO0VBRXRCO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNNEcsNEJBQTRCLEdBQUFqSCxPQUFBLENBQUFpSCw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDbEMsS0FBYyxFQUFBbUMsS0FBQSxFQUVGO0VBQUEsSUFBQUMsbUJBQUE7RUFBQSxJQUFBQyxhQUFBLEdBQUFGLEtBQUEsQ0FEWGpDLE9BQU87SUFBR2lCLE9BQU8sR0FBQWtCLGFBQUEsQ0FBUGxCLE9BQU87SUFBRW1CLFFBQVEsR0FBQUQsYUFBQSxDQUFSQyxRQUFRO0VBRTVCLElBQU1DLFVBQVUsSUFBQUgsbUJBQUEsR0FBR3BDLEtBQUssQ0FBQ1YsV0FBVyxjQUFBOEMsbUJBQUEsdUJBQWpCQSxtQkFBQSxDQUFvQmpCLE9BQU8sQ0FBQztFQUMvQyxJQUFJLENBQUNvQixVQUFVLEVBQUU7SUFDZixPQUFPdkMsS0FBSztFQUNkO0VBRUEsT0FBQXhGLGFBQUEsQ0FBQUEsYUFBQSxLQUNLd0YsS0FBSztJQUNSVixXQUFXLEVBQUE5RSxhQUFBLENBQUFBLGFBQUEsS0FDTndGLEtBQUssQ0FBQ1YsV0FBVyxXQUFBMUUsZ0JBQUEsaUJBQ25CdUcsT0FBTyxFQUFBM0csYUFBQSxDQUFBQSxhQUFBLEtBQU8rSCxVQUFVO01BQUVELFFBQVEsRUFBQTlILGFBQUEsQ0FBQUEsYUFBQSxLQUFNK0gsVUFBVSxDQUFDRCxRQUFRLEdBQUtBLFFBQVE7SUFBQztFQUMzRTtBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUUsc0JBQXNCLEdBQUF2SCxPQUFBLENBQUF1SCxzQkFBQSxHQUFHLFNBQXpCQSxzQkFBc0JBLENBQ2pDeEMsS0FBYyxFQUFBeUMsS0FBQTtFQUFBLElBQ0p4RCxrQkFBa0IsR0FBQXdELEtBQUEsQ0FBM0J2QyxPQUFPO0VBQUEsT0FBQTFGLGFBQUEsQ0FBQUEsYUFBQSxLQUVMd0YsS0FBSztJQUNSaEIsWUFBWSxFQUFFMEQseUJBQWM7SUFDNUJ6RCxrQkFBa0IsRUFBbEJBO0VBQWtCO0FBQUEsQ0FDbEI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNMEQsNEJBQTRCLEdBQUExSCxPQUFBLENBQUEwSCw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDM0MsS0FBYyxFQUFBNEMsS0FBQSxFQUVGO0VBQUEsSUFERkMsVUFBVSxHQUFBRCxLQUFBLENBQW5CMUMsT0FBTztFQUVSLElBQU00QyxPQUFPLEdBQUF0SSxhQUFBLENBQUFBLGFBQUEsS0FBT3dGLEtBQUssQ0FBQ2IsV0FBVyxHQUFLMEQsVUFBVSxDQUFDO0VBQ3JELElBQU1qRyxTQUFTLEdBQUcsSUFBQW1HLCtCQUF3QixFQUFDRCxPQUFPLENBQUMsSUFBSTlDLEtBQUssQ0FBQ2IsV0FBVyxDQUFDdkMsU0FBUztFQUVsRixPQUFBcEMsYUFBQSxDQUFBQSxhQUFBLEtBQ0t3RixLQUFLO0lBQ1JiLFdBQVcsRUFBQTNFLGFBQUEsQ0FBQUEsYUFBQSxLQUNOc0ksT0FBTztNQUNWO01BQ0E7TUFDQTtNQUNBbEcsU0FBUyxFQUFUQTtJQUFTO0VBQ1Y7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1vRyw0QkFBNEIsR0FBQS9ILE9BQUEsQ0FBQStILDRCQUFBLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkNoRCxLQUFjLEVBQUFpRCxNQUFBLEVBRUY7RUFBQSxJQURGQyxPQUFPLEdBQUFELE1BQUEsQ0FBaEIvQyxPQUFPO0VBRVIsSUFBSWdELE9BQU8sS0FBS2xELEtBQUssQ0FBQ2IsV0FBVyxDQUFDakMsWUFBWSxFQUFFO0lBQzlDLE9BQU84QyxLQUFLO0VBQ2Q7RUFDQSxPQUFBeEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0t3RixLQUFLO0lBQ1JiLFdBQVcsRUFBQTNFLGFBQUEsQ0FBQUEsYUFBQSxLQUNOd0YsS0FBSyxDQUFDYixXQUFXO01BQ3BCL0IsVUFBVSxFQUFFLEtBQUs7TUFDakJGLFlBQVksRUFBRWdHO0lBQU87RUFDdEI7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsMEJBQTBCLEdBQUFsSSxPQUFBLENBQUFrSSwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDbkQsS0FBYyxFQUFBb0QsTUFBQTtFQUFBLElBQ0ovRixLQUFLLEdBQUErRixNQUFBLENBQWRsRCxPQUFPO0VBQUEsT0FBQTFGLGFBQUEsQ0FBQUEsYUFBQSxLQUVMd0YsS0FBSztJQUNSYixXQUFXLEVBQUEzRSxhQUFBLENBQUFBLGFBQUEsS0FDTndGLEtBQUssQ0FBQ2IsV0FBVztNQUNwQi9CLFVBQVUsRUFBRSxLQUFLO01BQ2pCQyxLQUFLLEVBQUxBO0lBQUs7RUFDTjtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1nRyx5QkFBeUIsR0FBQXBJLE9BQUEsQ0FBQW9JLHlCQUFBLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSXJELEtBQWM7RUFBQSxPQUFBeEYsYUFBQSxDQUFBQSxhQUFBLEtBQ25Ed0YsS0FBSztJQUNSYixXQUFXLEVBQUEzRSxhQUFBLENBQUFBLGFBQUEsS0FDTndGLEtBQUssQ0FBQ2IsV0FBVztNQUNwQmhDLFNBQVMsRUFBRSxLQUFLO01BQ2hCRCxZQUFZLEVBQUUsRUFBRTtNQUNoQkcsS0FBSyxFQUFFLEtBQUs7TUFDWkQsVUFBVSxFQUFFLEtBQUs7TUFDakJILE1BQU0sRUFBRTtJQUFLO0VBQ2Q7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNcUcsMEJBQTBCLEdBQUFySSxPQUFBLENBQUFxSSwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDdEQsS0FBYyxFQUFBdUQsTUFBQSxFQUVGO0VBQUEsSUFBQUMsY0FBQSxHQUFBRCxNQUFBLENBRFhyRCxPQUFPO0lBQUV1RCxPQUFPLEdBQUFELGNBQUEsY0FBRyxDQUFDLENBQUMsR0FBQUEsY0FBQTtFQUV0QixJQUFNRSxhQUFhLEdBQUFsSixhQUFBLENBQUFBLGFBQUEsS0FDZGlKLE9BQU87SUFDVnRHLFNBQVMsRUFBRTtFQUFJLEVBQ2hCO0VBRUQsT0FBTyxJQUFBd0cseUJBQVEsRUFBQyxDQUNkTix5QkFBeUIsRUFDekIsSUFBQU8sdUJBQU0sRUFBQ2pCLDRCQUE0QixFQUFFLElBQUFrQix5QkFBUSxFQUFDSCxhQUFhLENBQUMsQ0FBQyxDQUM5RCxDQUFDLENBQUMxRCxLQUFLLENBQUM7QUFDWCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU04RCwrQkFBK0IsR0FBQTdJLE9BQUEsQ0FBQTZJLCtCQUFBLEdBQUcsU0FBbENBLCtCQUErQkEsQ0FDMUM5RCxLQUFjLEVBQUErRCxNQUFBO0VBQUEsSUFDSkMsT0FBTyxHQUFBRCxNQUFBLENBQWhCN0QsT0FBTztFQUFBLE9BQUExRixhQUFBLENBQUFBLGFBQUEsS0FFTHdGLEtBQUs7SUFDUlosVUFBVSxFQUFBNUUsYUFBQSxDQUFBQSxhQUFBLEtBQ0x3RixLQUFLLENBQUNaLFVBQVU7TUFDbkJ6QixlQUFlLEVBQUVxRztJQUFPO0VBQ3pCO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyx3QkFBd0IsR0FBQWhKLE9BQUEsQ0FBQWdKLHdCQUFBLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FDbkNqRSxLQUFjLEVBQUFrRSxNQUFBO0VBQUEsSUFDSnRHLFFBQVEsR0FBQXNHLE1BQUEsQ0FBakJoRSxPQUFPO0VBQUEsT0FBQTFGLGFBQUEsQ0FBQUEsYUFBQSxLQUVMd0YsS0FBSztJQUNSWixVQUFVLEVBQUE1RSxhQUFBLENBQUFBLGFBQUEsS0FDTHdGLEtBQUssQ0FBQ1osVUFBVTtNQUNuQnhCLFFBQVEsRUFBUkE7SUFBUTtFQUNUO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNdUcsd0JBQXdCLEdBQUFsSixPQUFBLENBQUFrSix3QkFBQSxHQUFHLFNBQTNCQSx3QkFBd0JBLENBQ25DbkUsS0FBYyxFQUFBb0UsTUFBQTtFQUFBLElBQ0pyRyxRQUFRLEdBQUFxRyxNQUFBLENBQWpCbEUsT0FBTztFQUFBLE9BQUExRixhQUFBLENBQUFBLGFBQUEsS0FFTHdGLEtBQUs7SUFDUlosVUFBVSxFQUFBNUUsYUFBQSxDQUFBQSxhQUFBLEtBQ0x3RixLQUFLLENBQUNaLFVBQVU7TUFDbkJyQixRQUFRLEVBQVJBO0lBQVE7RUFDVDtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNc0csb0JBQW9CLEdBQUFwSixPQUFBLENBQUFvSixvQkFBQSxHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUlyRSxLQUFjO0VBQUEsT0FBQXhGLGFBQUEsQ0FBQUEsYUFBQSxLQUM5Q3dGLEtBQUs7SUFDUlgsU0FBUyxFQUFBN0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0p3RixLQUFLLENBQUNYLFNBQVMsV0FBQXpFLGdCQUFBLGlCQUNqQjhELDZCQUFrQixDQUFDRSxJQUFJLEVBQUFwRSxhQUFBLENBQUFBLGFBQUEsS0FDbkJ3RixLQUFLLENBQUNYLFNBQVMsQ0FBQ1gsNkJBQWtCLENBQUNFLElBQUksQ0FBQztNQUMzQ0osT0FBTyxFQUFFLENBQUN3QixLQUFLLENBQUNYLFNBQVMsQ0FBQ1gsNkJBQWtCLENBQUNFLElBQUksQ0FBQyxDQUFDSjtJQUFPO0VBRTdEO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTThGLCtCQUErQixHQUFBckosT0FBQSxDQUFBcUosK0JBQUEsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUMxQ3RFLEtBQWMsRUFBQXVFLE1BQUE7RUFBQSxJQUNKcEcsZUFBZSxHQUFBb0csTUFBQSxDQUF4QnJFLE9BQU87RUFBQSxPQUFBMUYsYUFBQSxDQUFBQSxhQUFBLEtBRUx3RixLQUFLO0lBQ1JYLFNBQVMsRUFBQTdFLGFBQUEsQ0FBQUEsYUFBQSxLQUNKd0YsS0FBSyxDQUFDWCxTQUFTLFdBQUF6RSxnQkFBQSxpQkFDakI4RCw2QkFBa0IsQ0FBQ0MsSUFBSSxFQUFBbkUsYUFBQSxDQUFBQSxhQUFBLEtBQ25Cd0YsS0FBSyxDQUFDWCxTQUFTLENBQUNYLDZCQUFrQixDQUFDQyxJQUFJLENBQUM7TUFDM0NSLGVBQWUsRUFBZkE7SUFBZTtFQUVsQjtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNcUcseUJBQXlCLEdBQUF2SixPQUFBLENBQUF1Six5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDeEUsS0FBYyxFQUFBeUUsTUFBQTtFQUFBLElBQ0pDLE1BQU0sR0FBQUQsTUFBQSxDQUFmdkUsT0FBTztFQUFBLE9BQUExRixhQUFBLENBQUFBLGFBQUEsS0FFTHdGLEtBQUs7SUFDUlgsU0FBUyxFQUFBN0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0p3RixLQUFLLENBQUNYLFNBQVM7TUFDbEI7TUFDQXFGLE1BQU0sRUFBTkE7SUFBTTtFQUNQO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLDJCQUEyQixHQUFBMUosT0FBQSxDQUFBMEosMkJBQUEsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUN0QzNFLEtBQWMsRUFBQTRFLE1BQUE7RUFBQSxJQUNKeEcsSUFBSSxHQUFBd0csTUFBQSxDQUFiMUUsT0FBTztFQUFBLE9BQUExRixhQUFBLENBQUFBLGFBQUEsS0FFTHdGLEtBQUs7SUFDUlgsU0FBUyxFQUFBN0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0p3RixLQUFLLENBQUNYLFNBQVMsV0FBQXpFLGdCQUFBLGlCQUNqQjhELDZCQUFrQixDQUFDQyxJQUFJLEVBQUFuRSxhQUFBLENBQUFBLGFBQUEsS0FDbkJ3RixLQUFLLENBQUNYLFNBQVMsQ0FBQ1gsNkJBQWtCLENBQUNDLElBQUksQ0FBQztNQUMzQ1AsSUFBSSxFQUFKQTtJQUFJO0VBRVA7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXlHLHNCQUFzQixHQUFBNUosT0FBQSxDQUFBNEosc0JBQUEsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUNqQzdFLEtBQWMsRUFBQThFLE1BQUEsRUFFRjtFQUFBLElBRFg1RSxPQUFPLEdBQUE0RSxNQUFBLENBQVA1RSxPQUFPO0VBRVIsSUFBTTZFLGdCQUFnQixHQUFHL0UsS0FBSyxDQUFDVCxhQUFhLElBQUksRUFBRTtFQUNsRDtFQUNBLElBQU15RixTQUFTLEdBQUc5RSxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRUksRUFBRTtFQUM3QixJQUFNMkUsb0JBQW9CLEdBQUdELFNBQVMsR0FBR0QsZ0JBQWdCLENBQUNHLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDN0UsRUFBRSxLQUFLMEUsU0FBUztFQUFBLEVBQUMsR0FBRyxJQUFJO0VBRTlGLElBQUl6RixhQUFhO0VBQ2pCLElBQUkwRixvQkFBb0IsRUFBRTtJQUN4QjFGLGFBQWEsR0FBR3dGLGdCQUFnQixDQUFDSyxHQUFHLENBQUMsVUFBQUQsQ0FBQztNQUFBLE9BQ3BDQSxDQUFDLENBQUM3RSxFQUFFLEtBQUswRSxTQUFTLEdBQUcsSUFBQUsseUJBQWtCLEVBQUE3SyxhQUFBLENBQUFBLGFBQUEsS0FBSzBGLE9BQU87UUFBRW9GLEtBQUssRUFBRUgsQ0FBQyxDQUFDRyxLQUFLLEdBQUc7TUFBQyxFQUFDLENBQUMsR0FBR0gsQ0FBQztJQUFBLENBQy9FLENBQUM7RUFDSCxDQUFDLE1BQU07SUFDTDVGLGFBQWEsTUFBQWdHLE1BQUEsS0FBQUMsbUJBQUEsYUFBT1QsZ0JBQWdCLElBQUUsSUFBQU0seUJBQWtCLEVBQUNuRixPQUFPLENBQUMsRUFBQztFQUNwRTtFQUVBLE9BQUExRixhQUFBLENBQUFBLGFBQUEsS0FBV3dGLEtBQUs7SUFBRVQsYUFBYSxFQUFiQTtFQUFhO0FBQ2pDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWtHLHlCQUF5QixHQUFBeEssT0FBQSxDQUFBd0sseUJBQUEsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUNwQ3pGLEtBQWMsRUFBQTBGLE1BQUE7RUFBQSxJQUNKcEYsRUFBRSxHQUFBb0YsTUFBQSxDQUFYeEYsT0FBTztFQUFBLE9BQUExRixhQUFBLENBQUFBLGFBQUEsS0FFTHdGLEtBQUs7SUFDUlQsYUFBYSxFQUFFUyxLQUFLLENBQUNULGFBQWEsQ0FBQ3BGLE1BQU0sQ0FBQyxVQUFBZ0wsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzdFLEVBQUUsS0FBS0EsRUFBRTtJQUFBO0VBQUM7QUFBQSxDQUMzRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1xRixnQkFBZ0IsR0FBQTFLLE9BQUEsQ0FBQTBLLGdCQUFBLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSTNGLEtBQWM7RUFBQSxPQUFBeEYsYUFBQSxDQUFBQSxhQUFBLEtBQzFDd0YsS0FBSztJQUNSUixTQUFTLEVBQUFoRixhQUFBLENBQUFBLGFBQUEsS0FDSndGLEtBQUssQ0FBQ1IsU0FBUztNQUNsQi9CLFdBQVcsRUFBRTtJQUFJO0VBQ2xCO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNbUksdUJBQXVCLEdBQUEzSyxPQUFBLENBQUEySyx1QkFBQSxHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUk1RixLQUFjO0VBQUEsT0FBQXhGLGFBQUEsQ0FBQUEsYUFBQSxLQUNqRHdGLEtBQUs7SUFDUlIsU0FBUyxFQUFBaEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0p3RixLQUFLLENBQUNSLFNBQVM7TUFDbEIvQixXQUFXLEVBQUU7SUFBSztFQUNuQjtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW9JLG1CQUFtQixHQUFBNUssT0FBQSxDQUFBNEssbUJBQUEsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJN0YsS0FBYyxFQUFBOEYsTUFBQTtFQUFBLElBQUd6SSxLQUFLLEdBQUF5SSxNQUFBLENBQUx6SSxLQUFLO0VBQUEsT0FDeER3SCxzQkFBc0IsQ0FBQXJLLGFBQUEsQ0FBQUEsYUFBQSxLQUVmd0YsS0FBSztJQUNSUixTQUFTLEVBQUFoRixhQUFBLENBQUFBLGFBQUEsS0FDSndGLEtBQUssQ0FBQ1IsU0FBUztNQUNsQi9CLFdBQVcsRUFBRTtJQUFLO0VBQ25CLElBRUg7SUFDRXlDLE9BQU8sRUFBRSxJQUFBNkYsd0JBQWlCLEVBQUM7TUFDekJDLE9BQU8sRUFBRSxDQUFDM0ksS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFMkksT0FBTyxJQUFJLHdCQUF3QjtNQUMxREMsS0FBSyxFQUFFQyxzQ0FBMkIsQ0FBQ0M7SUFDckMsQ0FBQztFQUNILENBQ0YsQ0FBQztBQUFBOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMscUJBQXFCLEdBQUFuTCxPQUFBLENBQUFtTCxxQkFBQSxHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlwRyxLQUFjO0VBQUEsT0FBQXhGLGFBQUEsQ0FBQUEsYUFBQSxLQUMvQ3dGLEtBQUs7SUFDUlYsV0FBVyxFQUFFdkYsTUFBTSxDQUFDc00sT0FBTyxDQUFDckcsS0FBSyxDQUFDVixXQUFXLENBQUMsQ0FBQ3hELE1BQU0sQ0FDbkQsVUFBQ3dLLEdBQUcsRUFBRUMsS0FBSztNQUFBLE9BQUEvTCxhQUFBLENBQUFBLGFBQUEsS0FDTjhMLEdBQUcsV0FBQTFMLGdCQUFBLGlCQUNMMkwsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFBL0wsYUFBQSxDQUFBQSxhQUFBLEtBQ0orTCxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ1g5SyxjQUFjLEVBQUU7TUFBQztJQUFBLENBRW5CLEVBQ0YsQ0FBQyxDQUNIO0VBQUM7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTStLLHVCQUF1QixHQUFBdkwsT0FBQSxDQUFBdUwsdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJeEcsS0FBYztFQUFBLE9BQ3BETyxrQkFBa0IsQ0FBQ1AsS0FBSyxFQUFFO0lBQUNFLE9BQU8sRUFBRXVHO0VBQWEsQ0FBQyxDQUFDO0FBQUE7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsZ0JBQWdCLEdBQUF6TCxPQUFBLENBQUF5TCxnQkFBQSxHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQzNCMUcsS0FBYyxFQUFBMkcsTUFBQTtFQUFBLElBQ0hsSCxNQUFNLEdBQUFrSCxNQUFBLENBQWhCekcsT0FBTyxDQUFHVCxNQUFNO0VBQUEsT0FBQWpGLGFBQUEsQ0FBQUEsYUFBQSxLQUVkd0YsS0FBSztJQUNSUCxNQUFNLEVBQU5BO0VBQU07QUFBQSxDQUNOOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1tSCwwQkFBMEIsR0FBQTNMLE9BQUEsQ0FBQTJMLDBCQUFBLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FDckM1RyxLQUFjLEVBQUE2RyxNQUFBLEVBRUY7RUFBQSxJQUFBQyxjQUFBLEdBQUFELE1BQUEsQ0FEWDNHLE9BQU87SUFBR2lCLE9BQU8sR0FBQTJGLGNBQUEsQ0FBUDNGLE9BQU87SUFBRTRGLFFBQVEsR0FBQUQsY0FBQSxDQUFSQyxRQUFRO0VBRTVCLElBQU1DLFNBQVMsR0FDYjdGLE9BQU8sS0FBSyxPQUFPLEdBQ2Ysb0JBQW9CLEdBQ3BCQSxPQUFPLEtBQUssUUFBUSxHQUNwQixxQkFBcUIsR0FDckIsSUFBSTtFQUNWLElBQUksQ0FBQzZGLFNBQVMsSUFBSWhILEtBQUssQ0FBQ2dILFNBQVMsQ0FBQyxLQUFLRCxRQUFRLEVBQUU7SUFDL0MsT0FBTy9HLEtBQUs7RUFDZDtFQUNBLE9BQUF4RixhQUFBLENBQUFBLGFBQUEsS0FDS3dGLEtBQUssV0FBQXBGLGdCQUFBLGlCQUNQb00sU0FBUyxFQUFHRCxRQUFRO0FBRXpCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|