kepler.gl 3.2.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/src/ai-assistant/src/config/models.d.ts +8 -0
  2. package/dist/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -2
  3. package/dist/src/localization/src/translations/en.d.ts +1 -0
  4. package/package.json +2 -2
  5. package/src/actions/package.json +8 -8
  6. package/src/ai-assistant/dist/components/ai-assistant-config.js +40 -24
  7. package/src/ai-assistant/dist/config/models.d.ts +8 -0
  8. package/src/ai-assistant/dist/config/models.js +16 -8
  9. package/src/ai-assistant/dist/localization.js +7 -7
  10. package/src/ai-assistant/dist/reducers/index.js +3 -2
  11. package/src/ai-assistant/package.json +16 -16
  12. package/src/ai-assistant/src/components/ai-assistant-config.tsx +39 -28
  13. package/src/ai-assistant/src/config/models.ts +37 -25
  14. package/src/ai-assistant/src/localization.ts +6 -6
  15. package/src/ai-assistant/src/reducers/index.ts +2 -1
  16. package/src/cloud-providers/package.json +2 -2
  17. package/src/common-utils/package.json +3 -3
  18. package/src/components/dist/common/color-legend.js +8 -8
  19. package/src/components/dist/common/data-table/index.js +13 -9
  20. package/src/components/dist/map/map-legend-panel.js +10 -4
  21. package/src/components/dist/map/map-legend.js +2 -2
  22. package/src/components/dist/plot-container.js +4 -2
  23. package/src/components/dist/side-panel/interaction-panel/interaction-panel.js +2 -2
  24. package/src/components/dist/side-panel/layer-panel/color-breaks-panel.js +11 -2
  25. package/src/components/dist/side-panel/layer-panel/color-scale-selector.js +65 -12
  26. package/src/components/dist/side-panel/layer-panel/custom-palette.js +18 -7
  27. package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -2
  28. package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +18 -4
  29. package/src/components/package.json +15 -15
  30. package/src/components/src/common/color-legend.tsx +15 -2
  31. package/src/components/src/common/data-table/index.tsx +1 -1
  32. package/src/components/src/map/map-legend-panel.tsx +21 -2
  33. package/src/components/src/map/map-legend.tsx +1 -1
  34. package/src/components/src/plot-container.tsx +2 -1
  35. package/src/components/src/side-panel/interaction-panel/interaction-panel.tsx +1 -0
  36. package/src/components/src/side-panel/layer-panel/color-breaks-panel.tsx +14 -3
  37. package/src/components/src/side-panel/layer-panel/color-scale-selector.tsx +62 -8
  38. package/src/components/src/side-panel/layer-panel/custom-palette.tsx +11 -5
  39. package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +19 -2
  40. package/src/constants/dist/default-settings.js +1 -1
  41. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/b3/bd/e4f91c7af9e320b979e29ad3b9e3a4dfcd61e4a09d6e4579104c40dcace7651b443fdd6d7ff5d947ed6c9df2c0bbbcc76a2ea86d6398e4945257eeb80dd5 +1 -0
  42. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b4/c5/a43653dff3b380f7b0793080a57c980a9a136764933e79454de0fe43a5ca +2 -0
  43. package/src/constants/package.json +2 -2
  44. package/src/constants/umd/keplergl.min.js +1 -1
  45. package/src/deckgl-arrow-layers/package.json +2 -2
  46. package/src/deckgl-layers/package.json +4 -4
  47. package/src/duckdb/dist/table/duckdb-table-utils.js +3 -2
  48. package/src/duckdb/package.json +6 -6
  49. package/src/duckdb/src/table/duckdb-table-utils.ts +5 -1
  50. package/src/effects/package.json +5 -5
  51. package/src/layers/dist/icon-layer/icon-layer.js +12 -2
  52. package/src/layers/dist/vector-tile/common-tile/tile-dataset.d.ts +4 -0
  53. package/src/layers/dist/vector-tile/common-tile/tile-dataset.js +10 -1
  54. package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +11 -0
  55. package/src/layers/dist/vector-tile/vector-tile-layer.js +113 -7
  56. package/src/layers/package.json +9 -9
  57. package/src/layers/src/icon-layer/icon-layer.ts +49 -38
  58. package/src/layers/src/vector-tile/common-tile/tile-dataset.ts +7 -0
  59. package/src/layers/src/vector-tile/vector-tile-layer.ts +110 -6
  60. package/src/localization/dist/translations/en.d.ts +1 -0
  61. package/src/localization/dist/translations/en.js +2 -1
  62. package/src/localization/package.json +1 -1
  63. package/src/localization/src/translations/en.ts +1 -0
  64. package/src/processors/dist/data-processor.js +15 -5
  65. package/src/processors/package.json +7 -7
  66. package/src/processors/src/data-processor.ts +19 -4
  67. package/src/reducers/package.json +16 -16
  68. package/src/schemas/package.json +7 -7
  69. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/52/82/28cacf6fd462b779c22675964b655bf3a9f3ce9ec3c9b141a401a5bf90cb7d904ac65ab8e484570130b12771af0a0d5bab20e6976cfa773666763e046a6a +1 -0
  70. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/56/db/b5a812c56b0d1dcdcd33da37e464062a19c8752cb2296603dc72d2c54d31 +2 -0
  71. package/src/styles/package.json +2 -2
  72. package/src/styles/umd/keplergl.min.js +1 -1
  73. package/src/table/package.json +5 -5
  74. package/src/tasks/package.json +2 -2
  75. package/src/types/package.json +1 -1
  76. package/src/utils/package.json +4 -4
  77. package/umd/keplergl.min.js +1366 -1333
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/ai-assistant",
3
3
  "author": "Xun Li<lixun910@gmail.com>",
4
- "version": "3.2.0",
4
+ "version": "3.2.1",
5
5
  "description": "kepler.gl AI assistant",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -34,21 +34,21 @@
34
34
  "@ai-sdk/deepseek": "^0.2.14",
35
35
  "@ai-sdk/google": "^1.2.18",
36
36
  "@ai-sdk/xai": "^1.2.16",
37
- "@kepler.gl/components": "3.2.0",
38
- "@kepler.gl/constants": "3.2.0",
39
- "@kepler.gl/layers": "3.2.0",
40
- "@kepler.gl/table": "3.2.0",
41
- "@kepler.gl/types": "3.2.0",
42
- "@kepler.gl/utils": "3.2.0",
43
- "@openassistant/core": "^0.5.13",
44
- "@openassistant/duckdb": "^0.5.13",
45
- "@openassistant/echarts": "^0.5.13",
46
- "@openassistant/geoda": "^0.5.13",
47
- "@openassistant/osm": "^0.5.13",
48
- "@openassistant/plots": "^0.5.13",
49
- "@openassistant/tables": "^0.5.13",
50
- "@openassistant/ui": "^0.5.13",
51
- "@openassistant/utils": "^0.5.13",
37
+ "@kepler.gl/components": "3.2.1",
38
+ "@kepler.gl/constants": "3.2.1",
39
+ "@kepler.gl/layers": "3.2.1",
40
+ "@kepler.gl/table": "3.2.1",
41
+ "@kepler.gl/types": "3.2.1",
42
+ "@kepler.gl/utils": "3.2.1",
43
+ "@openassistant/core": "^0.5.17",
44
+ "@openassistant/duckdb": "^0.5.17",
45
+ "@openassistant/echarts": "^0.5.17",
46
+ "@openassistant/geoda": "^0.5.17",
47
+ "@openassistant/osm": "^0.5.17",
48
+ "@openassistant/plots": "^0.5.17",
49
+ "@openassistant/tables": "^0.5.17",
50
+ "@openassistant/ui": "^0.5.17",
51
+ "@openassistant/utils": "^0.5.17",
52
52
  "color-interpolate": "^1.0.5",
53
53
  "global": "^4.3.0",
54
54
  "ollama-ai-provider-v2": "^0.0.5",
@@ -16,7 +16,7 @@ import {
16
16
  } from '@kepler.gl/components';
17
17
  import {State} from '../index';
18
18
  import ApiKey from '../icons/api-key';
19
- import {PROVIDER_MODELS} from '../config/models';
19
+ import {PROVIDER_MODELS, PROVIDER_DEFAULT_BASE_URLS} from '../config/models';
20
20
  import {useLocalStorage} from 'usehooks-ts';
21
21
  import {GetAssistantModelByProvider} from '@openassistant/core';
22
22
  import {updateAiAssistantConfig} from '../actions';
@@ -152,7 +152,7 @@ export function AiAssistantConfig() {
152
152
  const [topP, setTopP] = useLocalStorage('ai-assistant-top-p', aiAssistantConfig.topP || 1.0);
153
153
  const [baseUrl, setBaseUrl] = useLocalStorage(
154
154
  'ai-assistant-base-url',
155
- aiAssistantConfig.baseUrl || 'http://localhost:11434/api'
155
+ aiAssistantConfig.baseUrl || PROVIDER_DEFAULT_BASE_URLS[provider]
156
156
  );
157
157
  const [mapboxToken, setMapboxToken] = useLocalStorage(
158
158
  'ai-assistant-mapbox-token',
@@ -168,6 +168,7 @@ export function AiAssistantConfig() {
168
168
  if (typeof value === 'string') {
169
169
  setProvider(value);
170
170
  setModel(PROVIDER_MODELS[value][0]);
171
+ setBaseUrl(PROVIDER_DEFAULT_BASE_URLS[value]);
171
172
  setConnectionError(false);
172
173
  setErrorMessage('');
173
174
  }
@@ -224,19 +225,32 @@ export function AiAssistantConfig() {
224
225
  setTimeout(() => reject(new Error('Connection timeout after 15 seconds')), 15000);
225
226
  });
226
227
 
227
- const AssistantModel = GetAssistantModelByProvider({
228
+ const AssistantModel = await GetAssistantModelByProvider({
228
229
  provider: provider
229
230
  });
230
231
 
232
+ if (!AssistantModel || !AssistantModel.configure || !AssistantModel.testConnection) {
233
+ throw new Error('Failed to initialize AI model');
234
+ }
235
+
236
+ // configure model
237
+ AssistantModel.configure({
238
+ model: model,
239
+ baseURL: baseUrl || PROVIDER_DEFAULT_BASE_URLS[provider],
240
+ apiKey: apiKey,
241
+ temperature: Number(temperature),
242
+ topP: Number(topP)
243
+ });
244
+
231
245
  const success = (await Promise.race([
232
- AssistantModel?.testConnection(apiKey, model),
246
+ AssistantModel.testConnection(apiKey, model),
233
247
  timeoutPromise
234
248
  ])) as boolean;
235
249
 
236
250
  const errorMessage = !success
237
251
  ? provider === 'ollama'
238
- ? 'Connection failed: maybe invalid Ollama Base URL'
239
- : 'Connection failed: maybe invalid API Key'
252
+ ? 'Connection failed: maybe invalid Base URL'
253
+ : 'Connection failed: maybe invalid API Key or Base URL'
240
254
  : '';
241
255
  setConnectionError(!success);
242
256
  setErrorMessage(errorMessage);
@@ -245,7 +259,7 @@ export function AiAssistantConfig() {
245
259
  provider: provider,
246
260
  model: model,
247
261
  apiKey: apiKey,
248
- baseUrl: baseUrl,
262
+ baseUrl: baseUrl || PROVIDER_DEFAULT_BASE_URLS[provider],
249
263
  isReady: success,
250
264
  temperature: temperature,
251
265
  topP: topP,
@@ -322,11 +336,11 @@ export function AiAssistantConfig() {
322
336
  />
323
337
  </OllamaModelInputWrapper>
324
338
  )}
325
- {provider !== 'ollama' ? (
339
+ {provider !== 'ollama' && (
326
340
  <>
327
341
  <PanelLabelWrapper>
328
342
  <SectionTitle>
329
- <FormattedMessage id="aiAssistantManager.apiKey.placeholder" />
343
+ <FormattedMessage id="aiAssistantManager.apiKey.title" />
330
344
  </SectionTitle>
331
345
  </PanelLabelWrapper>
332
346
  <div className="api-key-input">
@@ -341,26 +355,23 @@ export function AiAssistantConfig() {
341
355
  />
342
356
  </div>
343
357
  </>
344
- ) : (
345
- <>
346
- <PanelLabelWrapper>
347
- <SectionTitle>
348
- <FormattedMessage id="aiAssistantManager.baseUrl.placeholder" />
349
- </SectionTitle>
350
- </PanelLabelWrapper>
351
- <div className="api-key-input">
352
- <div className="api-key-input__icon">
353
- <ApiKey height="20px" />
354
- </div>
355
- <Input
356
- type="text"
357
- onChange={onBaseUrlChange}
358
- placeholder={intl.formatMessage({id: 'aiAssistantManager.baseUrl.placeholder'})}
359
- value={baseUrl}
360
- />
361
- </div>
362
- </>
363
358
  )}
359
+ <PanelLabelWrapper>
360
+ <SectionTitle>
361
+ <FormattedMessage id="aiAssistantManager.baseUrl.title" />
362
+ </SectionTitle>
363
+ </PanelLabelWrapper>
364
+ <div className="api-key-input">
365
+ <div className="api-key-input__icon">
366
+ <ApiKey height="20px" />
367
+ </div>
368
+ <Input
369
+ type="text"
370
+ onChange={onBaseUrlChange}
371
+ placeholder={PROVIDER_DEFAULT_BASE_URLS[provider]}
372
+ value={baseUrl}
373
+ />
374
+ </div>
364
375
  {connectionError && (
365
376
  <StyleErrorMessage className="error-message">{errorMessage}</StyleErrorMessage>
366
377
  )}
@@ -1,33 +1,45 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  // Copyright contributors to the kepler.gl project
3
3
 
4
+ export const PROVIDER_DEFAULT_BASE_URLS = {
5
+ "openai": "https://api.openai.com/v1",
6
+ "anthropic": "https://api.anthropic.com/v1",
7
+ "google": "https://generativelanguage.googleapis.com/v1beta",
8
+ "deepseek": "https://api.deepseek.com/v1",
9
+ "xai": "https://api.x.ai/v1",
10
+ "ollama": "http://localhost:11434/api"
11
+ };
12
+
4
13
  export const PROVIDER_MODELS = {
5
- "openai": [
6
- "gpt-4.1",
7
- "gpt-4o",
8
- "gpt-4o-mini",
9
- "gpt-4",
10
- "gpt-3.5-turbo",
11
- "o1",
12
- "o1-preview",
13
- "o1-mini"
14
+ openai: [
15
+ 'gpt-4.1',
16
+ 'gpt-4o',
17
+ 'gpt-4o-mini',
18
+ 'gpt-4',
19
+ 'gpt-3.5-turbo',
20
+ 'o1',
21
+ 'o1-preview',
22
+ 'o1-mini'
14
23
  ],
15
- "google": [
16
- "gemini-2.5-flash-preview-04-17",
17
- "gemini-2.5-pro-preview-05-06",
18
- "gemini-2.0-flash",
19
- "gemini-1.5-flash",
20
- "gemini-1.5-pro"
24
+ google: [
25
+ 'gemini-2.5-flash',
26
+ 'gemini-2.5-pro',
27
+ 'gemini-2.0-flash',
28
+ 'gemini-1.5-flash',
29
+ 'gemini-1.5-pro'
21
30
  ],
22
- "deepseek": ["deepseek-chat"],
23
- "anthropic": [
24
- "claude-3.7-sonnet",
25
- "claude-3.5-sonnet",
26
- "claude-3.5-haiku",
27
- "claude-3-opus",
28
- "claude-3-sonnet",
29
- "claude-3-haiku"
31
+ deepseek: ['deepseek-chat'],
32
+ anthropic: [
33
+ 'claude-opus-4-1',
34
+ 'claude-opus-4-0',
35
+ 'claude-sonnet-4-0',
36
+ 'claude-3.7-sonnet',
37
+ 'claude-3.5-sonnet',
38
+ 'claude-3.5-haiku',
39
+ 'claude-3-opus',
40
+ 'claude-3-sonnet',
41
+ 'claude-3-haiku'
30
42
  ],
31
- "xai": ["grok-3", "grok-3-fast", "grok-3-mini", "grok-3-mini-fast"],
32
- "ollama": ["deepseek-r1", "gemma3", "llama4", "llama3.3", "mistral", "phi4", "qwen3", "qwen2.5"]
43
+ xai: ['grok-3', 'grok-3-fast', 'grok-3-mini', 'grok-3-mini-fast'],
44
+ ollama: ['qwen3:32b', 'gpt-oss']
33
45
  };
@@ -21,8 +21,8 @@ export const messages = {
21
21
  placeholder: 'Enter your API Key'
22
22
  },
23
23
  baseUrl: {
24
- title: 'Ollama Base URL',
25
- placeholder: 'Enter OllamaBase URL'
24
+ title: 'Base URL',
25
+ placeholder: 'Enter Base URL'
26
26
  },
27
27
  temperature: {
28
28
  title: 'Temperature'
@@ -49,8 +49,8 @@ export const messages = {
49
49
  placeholder: 'Syötä API-avain'
50
50
  },
51
51
  baseUrl: {
52
- title: 'Ollama Base URL',
53
- placeholder: 'Syötä Ollama Base URL'
52
+ title: 'Base URL',
53
+ placeholder: 'Syötä Base URL'
54
54
  },
55
55
  temperature: {
56
56
  title: 'Lämpötila'
@@ -161,8 +161,8 @@ export const messages = {
161
161
  placeholder: 'API キーを入力'
162
162
  },
163
163
  baseUrl: {
164
- title: 'Ollama Base URL',
165
- placeholder: 'OllamaBase URL を入力'
164
+ title: 'Base URL',
165
+ placeholder: 'Base URL を入力'
166
166
  },
167
167
  temperature: {
168
168
  title: '温度'
@@ -10,6 +10,7 @@ import {
10
10
  SET_MAP_BOUNDARY
11
11
  } from '../actions';
12
12
  import {MessageModel} from '@openassistant/core';
13
+ import {PROVIDER_DEFAULT_BASE_URLS} from '../config/models';
13
14
 
14
15
  export type AiAssistantConfig = {
15
16
  isReady: boolean;
@@ -28,7 +29,7 @@ const initialConfig: AiAssistantConfig = {
28
29
  provider: 'openai',
29
30
  model: 'gpt-4o',
30
31
  apiKey: '',
31
- baseUrl: 'http://localhost:11434/api',
32
+ baseUrl: PROVIDER_DEFAULT_BASE_URLS['openai'],
32
33
  temperature: 0.0,
33
34
  topP: 1.0
34
35
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/cloud-providers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.0",
4
+ "version": "3.2.1",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,7 +30,7 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/types": "3.2.0",
33
+ "@kepler.gl/types": "3.2.1",
34
34
  "react": "^18.2.0"
35
35
  },
36
36
  "nyc": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/common-utils",
3
3
  "author": "Shan He <heshan0131@gmail.com>",
4
- "version": "3.2.0",
4
+ "version": "3.2.1",
5
5
  "description": "kepler.gl common utils",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,8 +30,8 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/constants": "3.2.0",
34
- "@kepler.gl/types": "3.2.0",
33
+ "@kepler.gl/constants": "3.2.1",
34
+ "@kepler.gl/types": "3.2.1",
35
35
  "d3-array": "^2.8.0",
36
36
  "global": "^4.3.0",
37
37
  "h3-js": "^3.1.0",
@@ -36,22 +36,22 @@ var stopClickPropagation = function stopClickPropagation(e) {
36
36
  return e.stopPropagation();
37
37
  };
38
38
  var inputCss = (0, _styledComponents.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n input {\n pointer-events: none;\n }\n"])));
39
- var StyledLegend = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n ", ";\n overflow: auto;\n margin-bottom: ", "px;\n display: grid;\n grid-row-gap: ", "px;\n padding: 2px 0;\n\n ", "\n"])), function (props) {
39
+ var StyledLegend = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n ", ";\n overflow-y: auto;\n overflow-x: hidden;\n margin-bottom: ", "px;\n display: grid;\n grid-row-gap: ", "px;\n padding: 2px 0;\n\n ", "\n"])), function (props) {
40
40
  return props.theme.sidePanelScrollBar;
41
41
  }, function (props) {
42
42
  return props.isExpanded ? '' : "max-height: 156px;";
43
43
  }, GAP, GAP, function (props) {
44
44
  return props.disableEdit ? inputCss : '';
45
45
  });
46
- var StyledLegendRow = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n height: 20px;\n"])));
46
+ var StyledLegendRow = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n height: 20px;\n min-width: 0;\n"])));
47
47
  function ResetColorLabelFactory() {
48
- return (0, _styledComponents["default"])(_icons.Reset)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n cursor: pointer;\n\n &:hover {\n color: ", ";\n }\n "])), function (props) {
48
+ return (0, _styledComponents["default"])(_icons.Reset)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n cursor: pointer;\n flex-shrink: 0;\n margin-left: ", "px;\n\n &:hover {\n color: ", ";\n }\n "])), function (props) {
49
49
  return props.theme.labelColorLT;
50
- }, function (props) {
50
+ }, GAP, function (props) {
51
51
  return props.theme.panelHeaderIconHover;
52
52
  });
53
53
  }
54
- var StyleInlineInput = (0, _styledComponents["default"])(_styledComponents2.InlineInput)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 9.5px;\n line-height: ", "px;\n height: ", "px;\n color: ", ";\n width: unset;\n padding: 2px;\n flex: 1;\n margin: 0 ", "px;\n :hover {\n height: ", "px;\n }\n"])), ROW_H, ROW_H, function (props) {
54
+ var StyleInlineInput = (0, _styledComponents["default"])(_styledComponents2.InlineInput)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 9.5px;\n line-height: ", "px;\n height: ", "px;\n color: ", ";\n width: unset;\n padding: 2px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0 ", "px;\n :hover {\n height: ", "px;\n }\n"])), ROW_H, ROW_H, function (props) {
55
55
  return props.theme.textColor;
56
56
  }, GAP, ROW_H);
57
57
  function LegendRowEditorFactory() {
@@ -97,7 +97,7 @@ function LegendColorDisplayFactory() {
97
97
  };
98
98
  return LegendColorDisplay;
99
99
  }
100
- var StyledLabel = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 10px;\n color: ", ";\n padding-left: 2px;\n"])), function (props) {
100
+ var StyledLabel = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 10px;\n color: ", ";\n padding-left: 2px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"])), function (props) {
101
101
  return props.theme.textColor;
102
102
  });
103
103
  LegendRowFactory.deps = [LegendColorDisplayFactory, LegendRowEditorFactory, ResetColorLabelFactory];
@@ -115,7 +115,7 @@ function LegendRowFactory(LegendColorDisplay, LegendRowEditor, ResetColorLabel)
115
115
  var onReset = (0, _react.useCallback)(function () {
116
116
  return onResetLabel && onResetLabel(color);
117
117
  }, [color, onResetLabel]);
118
- var value = displayLabel ? label.toString() : '';
118
+ var value = displayLabel ? String(label !== null && label !== void 0 ? label : '') : '';
119
119
  return /*#__PURE__*/_react["default"].createElement(StyledLegendRow, null, /*#__PURE__*/_react["default"].createElement(LegendColorDisplay, {
120
120
  color: color
121
121
  }), onUpdateLabel ? /*#__PURE__*/_react["default"].createElement(LegendRowEditor, {
@@ -270,4 +270,4 @@ function ColorLegendFactory(LegendRow) {
270
270
  return /*#__PURE__*/_react["default"].memo(ColorLegend);
271
271
  }
272
272
  var _default = exports["default"] = ColorLegendFactory;
273
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfdGVtcGxhdGVPYmplY3Q1IiwiX3RlbXBsYXRlT2JqZWN0NiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJST1dfSCIsIkdBUCIsIlJFQ1RfVyIsInN0b3BDbGlja1Byb3BhZ2F0aW9uIiwic3RvcFByb3BhZ2F0aW9uIiwiaW5wdXRDc3MiLCJjc3MiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIlN0eWxlZExlZ2VuZCIsInN0eWxlZCIsImRpdiIsInByb3BzIiwidGhlbWUiLCJzaWRlUGFuZWxTY3JvbGxCYXIiLCJpc0V4cGFuZGVkIiwiZGlzYWJsZUVkaXQiLCJTdHlsZWRMZWdlbmRSb3ciLCJSZXNldENvbG9yTGFiZWxGYWN0b3J5IiwiUmVzZXQiLCJsYWJlbENvbG9yTFQiLCJwYW5lbEhlYWRlckljb25Ib3ZlciIsIlN0eWxlSW5saW5lSW5wdXQiLCJJbmxpbmVJbnB1dCIsInRleHRDb2xvciIsIkxlZ2VuZFJvd0VkaXRvckZhY3RvcnkiLCJMZWdlbmRSb3dFZGl0b3IiLCJfcmVmIiwiY29sb3IiLCJsYWJlbCIsIm9uRWRpdCIsIl9yZWYkZGlzYWJsZWQiLCJkaXNhYmxlZCIsIm9uQ2hhbmdlIiwidXNlQ2FsbGJhY2siLCJldmVudCIsInRhcmdldCIsInZhbHVlIiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwiaWQiLCJjb25jYXQiLCJkaXNwbGF5TmFtZSIsIkxlZ2VuZFJvd1N0eWxlIiwid2lkdGgiLCJoZWlnaHQiLCJMZWdlbmRDb2xvckRpc3BsYXlGYWN0b3J5IiwiTGVnZW5kQ29sb3JEaXNwbGF5IiwiX3JlZjIiLCJzdHlsZSIsInVzZU1lbW8iLCJiYWNrZ3JvdW5kQ29sb3IiLCJtYXJnaW5SaWdodCIsIlN0eWxlZExhYmVsIiwiTGVnZW5kUm93RmFjdG9yeSIsImRlcHMiLCJSZXNldENvbG9yTGFiZWwiLCJMZWdlbmRSb3ciLCJfcmVmMyIsIl9yZWYzJGxhYmVsIiwiZGlzcGxheUxhYmVsIiwib25VcGRhdGVMYWJlbCIsIm9uUmVzZXRMYWJlbCIsIm5ld0xhYmVsIiwib25SZXNldCIsInRvU3RyaW5nIiwib3ZlcnJpZGVDb2xvckxlZ2VuZHMiLCJjb2xvckxlZ2VuZHMiLCJvdmVycmlkZXMiLCJkYXRhIiwibGFiZWxzIiwibmV3Q29sb3JMZWdlbmRzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImRhdHVtIiwiaW5kZXgiLCJjdXJyZW50SW5kZXgiLCJmaW5kSW5kZXgiLCJkIiwib3ZlcnJpZGUiLCJvdmVycmlkZUJ5Q3VzdG9tTGVnZW5kIiwiX3JlZjQiLCJjdXJyZW50TGVnZW5kcyIsImlzT2JqZWN0IiwidmFsdWVzIiwidXNlTGF5ZXJDb2xvckxlZ2VuZHMiLCJsYXllciIsInNjYWxlVHlwZSIsImRvbWFpbiIsInJhbmdlIiwiaXNGaXhlZCIsImZpZWxkVHlwZSIsImxhYmVsRm9ybWF0IiwibWFwU3RhdGUiLCJzY2FsZSIsImdldExheWVyQ29sb3JTY2FsZSIsInNjYWxlQnlab29tIiwiZ2V0VmlzdWFsQ2hhbm5lbFNjYWxlQnlab29tIiwiU0NBTEVfVFlQRVMiLCJjdXN0b21PcmRpbmFsIiwiY29sb3JNYXAiLCJjb2xvckJyZWFrcyIsImNvbG9yTWFwVG9DYXRlZ29yaWNhbENvbG9yQnJlYWtzIiwibWFwIiwiY2IiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRMZWdlbmRPZlNjYWxlIiwiTGVnZW5kc1dpdGhDdXN0b21MZWdlbmRzIiwiQ29sb3JMZWdlbmRGYWN0b3J5IiwiQ29sb3JMZWdlbmQiLCJfcmVmNSIsIm9uVXBkYXRlQ29sb3JMZWdlbmQiLCJfcmVmNSRkaXNwbGF5TGFiZWwiLCJfcmVmNSRkaXNhYmxlRWRpdCIsIl9yZWY2IiwibGVnZW5kcyIsIm5ld1ZhbHVlIiwiXyIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwibGVnZW5kIiwia2V5IiwidW5kZWZpbmVkIiwiUmVhY3QiLCJtZW1vIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi9jb2xvci1sZWdlbmQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VNZW1vfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7Y3NzfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7U0NBTEVfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Q29sb3JSYW5nZSwgSGV4Q29sb3IsIE1hcFN0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGdldExheWVyQ29sb3JTY2FsZSxcbiAgZ2V0TGVnZW5kT2ZTY2FsZSxcbiAgZ2V0VmlzdWFsQ2hhbm5lbFNjYWxlQnlab29tLFxuICBjb2xvck1hcFRvQ2F0ZWdvcmljYWxDb2xvckJyZWFrcyxcbiAgaXNPYmplY3Rcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7UmVzZXR9IGZyb20gJy4vaWNvbnMnO1xuaW1wb3J0IHtJbmxpbmVJbnB1dH0gZnJvbSAnLi9zdHlsZWQtY29tcG9uZW50cyc7XG5cbmNvbnN0IFJPV19IID0gMTU7XG5jb25zdCBHQVAgPSAyO1xuY29uc3QgUkVDVF9XID0gMjA7XG5cbmNvbnN0IHN0b3BDbGlja1Byb3BhZ2F0aW9uID0gZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG5jb25zdCBpbnB1dENzcyA9IGNzc2BcbiAgaW5wdXQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5gO1xuY29uc3QgU3R5bGVkTGVnZW5kID0gc3R5bGVkLmRpdjx7ZGlzYWJsZUVkaXQ6IGJvb2xlYW47IGlzRXhwYW5kZWQ/OiBib29sZWFufT5gXG4gICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsU2Nyb2xsQmFyfTtcbiAgJHtwcm9wcyA9PiAocHJvcHMuaXNFeHBhbmRlZCA/ICcnIDogYG1heC1oZWlnaHQ6IDE1NnB4O2ApfTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIG1hcmdpbi1ib3R0b206ICR7R0FQfXB4O1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXJvdy1nYXA6ICR7R0FQfXB4O1xuICBwYWRkaW5nOiAycHggMDtcblxuICAke3Byb3BzID0+IChwcm9wcy5kaXNhYmxlRWRpdCA/IGlucHV0Q3NzIDogJycpfVxuYDtcblxuY29uc3QgU3R5bGVkTGVnZW5kUm93ID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgaGVpZ2h0OiAyMHB4O1xuYDtcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc2V0Q29sb3JMYWJlbEZhY3RvcnkoKSB7XG4gIHJldHVybiBzdHlsZWQoUmVzZXQpYFxuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxhYmVsQ29sb3JMVH07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5wYW5lbEhlYWRlckljb25Ib3Zlcn07XG4gICAgfVxuICBgO1xufVxuXG5jb25zdCBTdHlsZUlubGluZUlucHV0ID0gc3R5bGVkKElubGluZUlucHV0KWBcbiAgZm9udC1zaXplOiA5LjVweDtcbiAgbGluZS1oZWlnaHQ6ICR7Uk9XX0h9cHg7XG4gIGhlaWdodDogJHtST1dfSH1weDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgd2lkdGg6IHVuc2V0O1xuICBwYWRkaW5nOiAycHg7XG4gIGZsZXg6IDE7XG4gIG1hcmdpbjogMCAke0dBUH1weDtcbiAgOmhvdmVyIHtcbiAgICBoZWlnaHQ6ICR7Uk9XX0h9cHg7XG4gIH1cbmA7XG5cbmV4cG9ydCB0eXBlIExlZ2VuZFJvd0VkaXRvclByb3BzID0ge1xuICBjb2xvcjogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBjdXN0b21MYWJlbD86IHN0cmluZztcbiAgb25FZGl0OiAobmV3VmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBMZWdlbmRSb3dFZGl0b3JGYWN0b3J5KCkge1xuICBjb25zdCBMZWdlbmRSb3dFZGl0b3I6IFJlYWN0LkZDPExlZ2VuZFJvd0VkaXRvclByb3BzPiA9ICh7XG4gICAgY29sb3IsXG4gICAgbGFiZWwsXG4gICAgb25FZGl0LFxuICAgIGRpc2FibGVkID0gZmFsc2VcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soZXZlbnQgPT4gb25FZGl0KGV2ZW50LnRhcmdldC52YWx1ZSksIFtvbkVkaXRdKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlSW5saW5lSW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzc05hbWU9XCJsZWdlbmRfX2xhYmVsX190aXRsZV9fZWRpdG9yXCJcbiAgICAgICAgdmFsdWU9e2xhYmVsfVxuICAgICAgICBvbkNsaWNrPXtzdG9wQ2xpY2tQcm9wYWdhdGlvbn1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGlkPXtgJHtjb2xvcn06aW5wdXQtbGVnZW5kLWxhYmVsYH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBMZWdlbmRSb3dFZGl0b3IuZGlzcGxheU5hbWUgPSAnTGVnZW5kUm93RWRpdG9yJztcbiAgcmV0dXJuIExlZ2VuZFJvd0VkaXRvcjtcbn1cblxuY29uc3QgTGVnZW5kUm93U3R5bGUgPSB7XG4gIHdpZHRoOiBgJHtSRUNUX1d9cHhgLFxuICBoZWlnaHQ6IGAke1JPV19IfXB4YFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExlZ2VuZENvbG9yRGlzcGxheUZhY3RvcnkoKSB7XG4gIGNvbnN0IExlZ2VuZENvbG9yRGlzcGxheSA9ICh7Y29sb3J9KSA9PiB7XG4gICAgY29uc3Qgc3R5bGUgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHsuLi5MZWdlbmRSb3dTdHlsZSwgYmFja2dyb3VuZENvbG9yOiBjb2xvciwgbWFyZ2luUmlnaHQ6IGAke0dBUH1weGB9KSxcbiAgICAgIFtjb2xvcl1cbiAgICApO1xuICAgIHJldHVybiA8ZGl2IHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPVwibGVnZW5kLXJvdy1jb2xvclwiIC8+O1xuICB9O1xuXG4gIHJldHVybiBMZWdlbmRDb2xvckRpc3BsYXk7XG59XG5cbmNvbnN0IFN0eWxlZExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZm9udC1zaXplOiAxMHB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICBwYWRkaW5nLWxlZnQ6IDJweDtcbmA7XG5cbmV4cG9ydCB0eXBlIExlZ2VuZFJvd1Byb3BzID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBjdXN0b21MYWJlbD86IHN0cmluZztcbiAgZGlzcGxheUxhYmVsPzogYm9vbGVhbjtcbiAgY29sb3I6IHN0cmluZztcbiAgb25VcGRhdGVMYWJlbD86IChzZWxlY3RlZENvbG9yOiBzdHJpbmcsIG5ld0xhYmVsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUmVzZXRMYWJlbD86IChjb2xvcjogc3RyaW5nKSA9PiB2b2lkO1xuICBkaXNhYmxlRWRpdD86IGJvb2xlYW47XG59O1xuXG5MZWdlbmRSb3dGYWN0b3J5LmRlcHMgPSBbTGVnZW5kQ29sb3JEaXNwbGF5RmFjdG9yeSwgTGVnZW5kUm93RWRpdG9yRmFjdG9yeSwgUmVzZXRDb2xvckxhYmVsRmFjdG9yeV07XG5leHBvcnQgZnVuY3Rpb24gTGVnZW5kUm93RmFjdG9yeShcbiAgTGVnZW5kQ29sb3JEaXNwbGF5OiBSZXR1cm5UeXBlPHR5cGVvZiBMZWdlbmRDb2xvckRpc3BsYXlGYWN0b3J5PixcbiAgTGVnZW5kUm93RWRpdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBMZWdlbmRSb3dFZGl0b3JGYWN0b3J5PixcbiAgUmVzZXRDb2xvckxhYmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBSZXNldENvbG9yTGFiZWxGYWN0b3J5PlxuKSB7XG4gIGNvbnN0IExlZ2VuZFJvdzogUmVhY3QuRkM8TGVnZW5kUm93UHJvcHM+ID0gKHtcbiAgICBsYWJlbCA9ICcnLFxuICAgIGRpc3BsYXlMYWJlbCxcbiAgICBjb2xvcixcbiAgICBvblVwZGF0ZUxhYmVsLFxuICAgIG9uUmVzZXRMYWJlbFxuICB9KSA9PiB7XG4gICAgY29uc3Qgb25FZGl0ID0gdXNlQ2FsbGJhY2soXG4gICAgICBuZXdMYWJlbCA9PiBvblVwZGF0ZUxhYmVsICYmIG9uVXBkYXRlTGFiZWwoY29sb3IsIG5ld0xhYmVsKSxcbiAgICAgIFtjb2xvciwgb25VcGRhdGVMYWJlbF1cbiAgICApO1xuICAgIGNvbnN0IG9uUmVzZXQgPSB1c2VDYWxsYmFjaygoKSA9PiBvblJlc2V0TGFiZWwgJiYgb25SZXNldExhYmVsKGNvbG9yKSwgW2NvbG9yLCBvblJlc2V0TGFiZWxdKTtcbiAgICBjb25zdCB2YWx1ZSA9IGRpc3BsYXlMYWJlbCA/IGxhYmVsLnRvU3RyaW5nKCkgOiAnJztcbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZExlZ2VuZFJvdz5cbiAgICAgICAgPExlZ2VuZENvbG9yRGlzcGxheSBjb2xvcj17Y29sb3J9IC8+XG4gICAgICAgIHtvblVwZGF0ZUxhYmVsID8gKFxuICAgICAgICAgIDxMZWdlbmRSb3dFZGl0b3IgZGlzYWJsZWQ9eyFvblVwZGF0ZUxhYmVsfSBsYWJlbD17dmFsdWV9IGNvbG9yPXtjb2xvcn0gb25FZGl0PXtvbkVkaXR9IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFN0eWxlZExhYmVsPnt2YWx1ZX08L1N0eWxlZExhYmVsPlxuICAgICAgICApfVxuICAgICAgICB7b25SZXNldExhYmVsID8gPFJlc2V0Q29sb3JMYWJlbCBvbkNsaWNrPXtvblJlc2V0fSBoZWlnaHQ9XCIxNnB4XCIgLz4gOiBudWxsfVxuICAgICAgPC9TdHlsZWRMZWdlbmRSb3c+XG4gICAgKTtcbiAgfTtcbiAgTGVnZW5kUm93LmRpc3BsYXlOYW1lID0gJ0xlZ2VuZFJvdyc7XG4gIHJldHVybiBMZWdlbmRSb3c7XG59XG5cbmNvbnN0IG92ZXJyaWRlQ29sb3JMZWdlbmRzID0gKGNvbG9yTGVnZW5kcywgb3ZlcnJpZGVzKSA9PiB7XG4gIGNvbnN0IHtkYXRhLCBsYWJlbHN9ID0gb3ZlcnJpZGVzO1xuXG4gIGNvbnN0IG5ld0NvbG9yTGVnZW5kcyA9IFsuLi5jb2xvckxlZ2VuZHNdO1xuXG4gIGRhdGEuZm9yRWFjaCgoZGF0dW0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gY29sb3JMZWdlbmRzLmZpbmRJbmRleChkID0+IGQuZGF0YSA9PT0gZGF0dW0pO1xuICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICBuZXdDb2xvckxlZ2VuZHNbY3VycmVudEluZGV4XSA9IHtcbiAgICAgICAgbGFiZWw6IGxhYmVsc1tpbmRleF0sXG4gICAgICAgIGRhdGE6IGRhdHVtLFxuICAgICAgICBvdmVycmlkZTogdHJ1ZVxuICAgICAgfTtcbiAgICAgIG5ld0NvbG9yTGVnZW5kc1tjdXJyZW50SW5kZXhdLmxhYmVsID0gbGFiZWxzW2luZGV4XTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3Q29sb3JMZWdlbmRzLnB1c2goe1xuICAgICAgICBkYXRhOiBkYXR1bSxcbiAgICAgICAgbGFiZWw6IGxhYmVsc1tpbmRleF0sXG4gICAgICAgIG92ZXJyaWRlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBuZXdDb2xvckxlZ2VuZHM7XG59O1xuXG50eXBlIE92ZXJyaWRlQnlDdXN0b21MZWdlbmRPcHRpb25zID0ge1xuICAvKipcbiAgICogTGVnZW5kIHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGVcbiAgICovXG4gIGNvbG9yTGVnZW5kcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBPcmlnaW5hbCBMZWdlbmRzXG4gICAqL1xuICBjdXJyZW50TGVnZW5kcz86IFJldHVyblR5cGU8dHlwZW9mIGdldExlZ2VuZE9mU2NhbGU+O1xufTtcblxuLyoqXG4gKiBPdmVycmlkZXMgbGVnZW5kIGxhYmVscyB3aXRoIGNvbG9yIGxlZ2VuZHMuXG4gKiBAcGFyYW0gcGFyYW0wIExlZ2VuZCBpbmZvIGFuZCBvdmVycmlkZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgT3JpZ2luYWwgb3Igb3ZlcnJpZGVuIGxlbmVuZHMuXG4gKi9cbmZ1bmN0aW9uIG92ZXJyaWRlQnlDdXN0b21MZWdlbmQoe2NvbG9yTGVnZW5kcywgY3VycmVudExlZ2VuZHN9OiBPdmVycmlkZUJ5Q3VzdG9tTGVnZW5kT3B0aW9ucykge1xuICBpZiAoY29sb3JMZWdlbmRzICYmIGlzT2JqZWN0KGNvbG9yTGVnZW5kcykpIHtcbiAgICAvLyBvdmVycmlkZSBsYWJlbHMgd2l0aCBjb2xvciBsZWdlbmRzXG4gICAgY29uc3QgZGF0YSA9IE9iamVjdC5rZXlzKGNvbG9yTGVnZW5kcyk7XG4gICAgY29uc3QgbGFiZWxzID0gT2JqZWN0LnZhbHVlcyhjb2xvckxlZ2VuZHMpO1xuXG4gICAgcmV0dXJuIG92ZXJyaWRlQ29sb3JMZWdlbmRzKGN1cnJlbnRMZWdlbmRzLCB7ZGF0YSwgbGFiZWxzfSk7XG4gIH1cblxuICByZXR1cm4gY3VycmVudExlZ2VuZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMYXllckNvbG9yTGVnZW5kcyhcbiAgbGF5ZXI6IENvbG9yTGVnZW5kUHJvcHNbJ2xheWVyJ10sXG4gIHNjYWxlVHlwZTogQ29sb3JMZWdlbmRQcm9wc1snc2NhbGVUeXBlJ10sXG4gIGRvbWFpbjogQ29sb3JMZWdlbmRQcm9wc1snZG9tYWluJ10sXG4gIHJhbmdlOiBDb2xvckxlZ2VuZFByb3BzWydyYW5nZSddLFxuICBpc0ZpeGVkOiBDb2xvckxlZ2VuZFByb3BzWydpc0ZpeGVkJ10sXG4gIGZpZWxkVHlwZTogQ29sb3JMZWdlbmRQcm9wc1snZmllbGRUeXBlJ10sXG4gIGxhYmVsRm9ybWF0OiBDb2xvckxlZ2VuZFByb3BzWydsYWJlbEZvcm1hdCddLFxuICBtYXBTdGF0ZTogQ29sb3JMZWdlbmRQcm9wc1snbWFwU3RhdGUnXVxuKTogTGVnZW5kW10ge1xuICBjb25zdCBzY2FsZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0TGF5ZXJDb2xvclNjYWxlKHtyYW5nZSwgZG9tYWluLCBzY2FsZVR5cGUsIGlzRml4ZWQsIGxheWVyfSksXG4gICAgW3JhbmdlLCBkb21haW4sIHNjYWxlVHlwZSwgaXNGaXhlZCwgbGF5ZXJdXG4gICk7XG5cbiAgY29uc3Qgc2NhbGVCeVpvb20gPSB1c2VNZW1vKFxuICAgICgpID0+IGdldFZpc3VhbENoYW5uZWxTY2FsZUJ5Wm9vbSh7c2NhbGUsIGxheWVyLCBtYXBTdGF0ZX0pLFxuICAgIFtzY2FsZSwgbGF5ZXIsIG1hcFN0YXRlXVxuICApO1xuXG4gIGNvbnN0IGN1cnJlbnRMZWdlbmRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHNjYWxlVHlwZSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJiByYW5nZT8uY29sb3JNYXApIHtcbiAgICAgIGNvbnN0IGNvbG9yQnJlYWtzID0gY29sb3JNYXBUb0NhdGVnb3JpY2FsQ29sb3JCcmVha3MocmFuZ2UuY29sb3JNYXApO1xuICAgICAgcmV0dXJuIGNvbG9yQnJlYWtzPy5tYXAoY2IgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IGNiLmRhdGEsXG4gICAgICAgICAgbGFiZWw6IEFycmF5LmlzQXJyYXkoY2IubGFiZWwpXG4gICAgICAgICAgICA/IGNiLmxhYmVsLmxlbmd0aCA+IDVcbiAgICAgICAgICAgICAgPyBgJHtjYi5sYWJlbC5sZW5ndGh9IHNlbGVjdGVkYFxuICAgICAgICAgICAgICA6IGNiLmxhYmVsXG4gICAgICAgICAgICA6IGNiLmxhYmVsIHx8ICcnXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldExlZ2VuZE9mU2NhbGUoe3NjYWxlOiBzY2FsZUJ5Wm9vbSwgc2NhbGVUeXBlLCBsYWJlbEZvcm1hdCwgZmllbGRUeXBlfSk7XG4gIH0sIFtyYW5nZSwgc2NhbGVCeVpvb20sIHNjYWxlVHlwZSwgbGFiZWxGb3JtYXQsIGZpZWxkVHlwZV0pO1xuXG4gIGNvbnN0IExlZ2VuZHNXaXRoQ3VzdG9tTGVnZW5kcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIG92ZXJyaWRlQnlDdXN0b21MZWdlbmQoe1xuICAgICAgICBjb2xvckxlZ2VuZHM6IHJhbmdlPy5jb2xvckxlZ2VuZHMsXG4gICAgICAgIGN1cnJlbnRMZWdlbmRzXG4gICAgICB9KSxcbiAgICBbcmFuZ2U/LmNvbG9yTGVnZW5kcywgY3VycmVudExlZ2VuZHNdXG4gICk7XG5cbiAgcmV0dXJuIExlZ2VuZHNXaXRoQ3VzdG9tTGVnZW5kcyB8fCBbXTtcbn1cblxuZXhwb3J0IHR5cGUgQ29sb3JMZWdlbmRQcm9wcyA9IHtcbiAgbGF5ZXI6IExheWVyO1xuICBzY2FsZVR5cGU6IHN0cmluZztcbiAgZG9tYWluOiBudW1iZXJbXSB8IHN0cmluZ1tdO1xuICBmaWVsZFR5cGU/OiBzdHJpbmcgfCBudWxsO1xuICByYW5nZT86IENvbG9yUmFuZ2UgfCBudWxsO1xuICBsYWJlbEZvcm1hdD86IChuOiBhbnkpID0+IHN0cmluZztcbiAgZGlzcGxheUxhYmVsPzogYm9vbGVhbjtcbiAgZGlzYWJsZUVkaXQ/OiBib29sZWFuO1xuICBtYXBTdGF0ZT86IE1hcFN0YXRlO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgaXNFeHBhbmRlZD86IGJvb2xlYW47XG4gIG9uVXBkYXRlQ29sb3JMZWdlbmQ/OiAoY29sb3JMZWdlbmRzOiB7W2tleTogSGV4Q29sb3JdOiBzdHJpbmd9KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTGVnZW5kID0ge1xuICBkYXRhOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG92ZXJyaWRlPzogYm9vbGVhbjtcbn07XG5cbkNvbG9yTGVnZW5kRmFjdG9yeS5kZXBzID0gW0xlZ2VuZFJvd0ZhY3RvcnldO1xuZnVuY3Rpb24gQ29sb3JMZWdlbmRGYWN0b3J5KExlZ2VuZFJvdzogUmV0dXJuVHlwZTx0eXBlb2YgTGVnZW5kUm93RmFjdG9yeT4pIHtcbiAgY29uc3QgQ29sb3JMZWdlbmQ6IFJlYWN0LkZDPENvbG9yTGVnZW5kUHJvcHM+ID0gKHtcbiAgICBsYXllcixcbiAgICBpc0ZpeGVkLFxuICAgIGlzRXhwYW5kZWQsXG4gICAgZG9tYWluLFxuICAgIHJhbmdlLFxuICAgIGxhYmVsRm9ybWF0LFxuICAgIHNjYWxlVHlwZSxcbiAgICBmaWVsZFR5cGUsXG4gICAgbWFwU3RhdGUsXG4gICAgb25VcGRhdGVDb2xvckxlZ2VuZCxcbiAgICBkaXNwbGF5TGFiZWwgPSB0cnVlLFxuICAgIGRpc2FibGVFZGl0ID0gZmFsc2VcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHtjb2xvckxlZ2VuZHN9ID0gcmFuZ2UgfHwge307XG5cbiAgICBjb25zdCBsZWdlbmRzID0gdXNlTGF5ZXJDb2xvckxlZ2VuZHMoXG4gICAgICBsYXllcixcbiAgICAgIHNjYWxlVHlwZSxcbiAgICAgIGRvbWFpbixcbiAgICAgIHJhbmdlLFxuICAgICAgaXNGaXhlZCxcbiAgICAgIGZpZWxkVHlwZSxcbiAgICAgIGxhYmVsRm9ybWF0LFxuICAgICAgbWFwU3RhdGVcbiAgICApO1xuXG4gICAgY29uc3Qgb25VcGRhdGVMYWJlbCA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGNvbG9yLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAob25VcGRhdGVDb2xvckxlZ2VuZCkge1xuICAgICAgICAgIG9uVXBkYXRlQ29sb3JMZWdlbmQoe1xuICAgICAgICAgICAgLi4uY29sb3JMZWdlbmRzLFxuICAgICAgICAgICAgW2NvbG9yXTogbmV3VmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtvblVwZGF0ZUNvbG9yTGVnZW5kLCBjb2xvckxlZ2VuZHNdXG4gICAgKTtcblxuICAgIGNvbnN0IG9uUmVzZXRMYWJlbCA9IHVzZUNhbGxiYWNrKFxuICAgICAgY29sb3IgPT4ge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IHtbY29sb3JdOiBfLCAuLi5yZXN0fSA9IGNvbG9yTGVnZW5kcztcbiAgICAgICAgaWYgKG9uVXBkYXRlQ29sb3JMZWdlbmQgJiYgcmVzdCkge1xuICAgICAgICAgIG9uVXBkYXRlQ29sb3JMZWdlbmQocmVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICAgICAgfSxcbiAgICAgIFtvblVwZGF0ZUNvbG9yTGVnZW5kLCBjb2xvckxlZ2VuZHNdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkTGVnZW5kXG4gICAgICAgIGNsYXNzTmFtZT1cInN0eWxlZC1jb2xvci1sZWdlbmRcIlxuICAgICAgICBkaXNhYmxlRWRpdD17ZGlzYWJsZUVkaXR9XG4gICAgICAgIGlzRXhwYW5kZWQ9e2lzRXhwYW5kZWR9XG4gICAgICA+XG4gICAgICAgIHtsZWdlbmRzLm1hcCgobGVnZW5kLCBpKSA9PiAoXG4gICAgICAgICAgPExlZ2VuZFJvd1xuICAgICAgICAgICAga2V5PXtgJHtsZWdlbmQuZGF0YX0tJHtpfWB9XG4gICAgICAgICAgICBsYWJlbD17bGVnZW5kLmxhYmVsfVxuICAgICAgICAgICAgZGlzcGxheUxhYmVsPXtkaXNwbGF5TGFiZWx9XG4gICAgICAgICAgICBjb2xvcj17bGVnZW5kLmRhdGF9XG4gICAgICAgICAgICBvblVwZGF0ZUxhYmVsPXshZGlzYWJsZUVkaXQgPyBvblVwZGF0ZUxhYmVsIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgb25SZXNldExhYmVsPXtsZWdlbmQub3ZlcnJpZGUgJiYgIWRpc2FibGVFZGl0ID8gb25SZXNldExhYmVsIDogdW5kZWZpbmVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9TdHlsZWRMZWdlbmQ+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gUmVhY3QubWVtbyhDb2xvckxlZ2VuZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yTGVnZW5kRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsVUFBQSxHQUFBRixPQUFBO0FBR0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBUUEsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQUwsT0FBQTtBQUFnRCxJQUFBTSxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBbEJoRDtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFkLHdCQUFBYyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQVcsZUFBQWhCLENBQUEsUUFBQWMsQ0FBQSxHQUFBRyxZQUFBLENBQUFqQixDQUFBLGdDQUFBRSxPQUFBLENBQUFZLENBQUEsSUFBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQUcsYUFBQWpCLENBQUEsRUFBQUQsQ0FBQSxvQkFBQUcsT0FBQSxDQUFBRixDQUFBLE1BQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBSCxDQUFBLEdBQUFHLENBQUEsQ0FBQWtCLE1BQUEsQ0FBQUMsV0FBQSxrQkFBQXRCLENBQUEsUUFBQWlCLENBQUEsR0FBQWpCLENBQUEsQ0FBQWdCLElBQUEsQ0FBQWIsQ0FBQSxFQUFBRCxDQUFBLGdDQUFBRyxPQUFBLENBQUFZLENBQUEsVUFBQUEsQ0FBQSxZQUFBTSxTQUFBLHlFQUFBckIsQ0FBQSxHQUFBc0IsTUFBQSxHQUFBQyxNQUFBLEVBQUF0QixDQUFBO0FBQUEsU0FBQXVCLFFBQUExQixDQUFBLEVBQUFFLENBQUEsUUFBQUMsQ0FBQSxHQUFBUSxNQUFBLENBQUFnQixJQUFBLENBQUEzQixDQUFBLE9BQUFXLE1BQUEsQ0FBQWlCLHFCQUFBLFFBQUFDLENBQUEsR0FBQWxCLE1BQUEsQ0FBQWlCLHFCQUFBLENBQUE1QixDQUFBLEdBQUFFLENBQUEsS0FBQTJCLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUE1QixDQUFBLFdBQUFTLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBRSxDQUFBLEVBQUE2QixVQUFBLE9BQUE1QixDQUFBLENBQUE2QixJQUFBLENBQUFDLEtBQUEsQ0FBQTlCLENBQUEsRUFBQTBCLENBQUEsWUFBQTFCLENBQUE7QUFBQSxTQUFBK0IsY0FBQWxDLENBQUEsYUFBQUUsQ0FBQSxNQUFBQSxDQUFBLEdBQUFpQyxTQUFBLENBQUFDLE1BQUEsRUFBQWxDLENBQUEsVUFBQUMsQ0FBQSxXQUFBZ0MsU0FBQSxDQUFBakMsQ0FBQSxJQUFBaUMsU0FBQSxDQUFBakMsQ0FBQSxRQUFBQSxDQUFBLE9BQUF3QixPQUFBLENBQUFmLE1BQUEsQ0FBQVIsQ0FBQSxPQUFBa0MsT0FBQSxXQUFBbkMsQ0FBQSxRQUFBb0MsZ0JBQUEsYUFBQXRDLENBQUEsRUFBQUUsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQVMsTUFBQSxDQUFBNEIseUJBQUEsR0FBQTVCLE1BQUEsQ0FBQTZCLGdCQUFBLENBQUF4QyxDQUFBLEVBQUFXLE1BQUEsQ0FBQTRCLHlCQUFBLENBQUFwQyxDQUFBLEtBQUF1QixPQUFBLENBQUFmLE1BQUEsQ0FBQVIsQ0FBQSxHQUFBa0MsT0FBQSxXQUFBbkMsQ0FBQSxJQUFBUyxNQUFBLENBQUFDLGNBQUEsQ0FBQVosQ0FBQSxFQUFBRSxDQUFBLEVBQUFTLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQVYsQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRixDQUFBO0FBbUJBLElBQU15QyxLQUFLLEdBQUcsRUFBRTtBQUNoQixJQUFNQyxHQUFHLEdBQUcsQ0FBQztBQUNiLElBQU1DLE1BQU0sR0FBRyxFQUFFO0FBRWpCLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUc1QyxDQUFDO0VBQUEsT0FBSUEsQ0FBQyxDQUFDNkMsZUFBZSxDQUFDLENBQUM7QUFBQTtBQUVyRCxJQUFNQyxRQUFRLE9BQUdDLHFCQUFHLEVBQUF0RCxlQUFBLEtBQUFBLGVBQUEsT0FBQXVELHVCQUFBLGlFQUluQjtBQUNELElBQU1DLFlBQVksR0FBR0MsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBekQsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXNELHVCQUFBLDhKQUMzQixVQUFBSSxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNDLGtCQUFrQjtBQUFBLEdBQ3ZDLFVBQUFGLEtBQUs7RUFBQSxPQUFLQSxLQUFLLENBQUNHLFVBQVUsR0FBRyxFQUFFLHVCQUF1QjtBQUFBLENBQUMsRUFFeENiLEdBQUcsRUFFSkEsR0FBRyxFQUdqQixVQUFBVSxLQUFLO0VBQUEsT0FBS0EsS0FBSyxDQUFDSSxXQUFXLEdBQUdWLFFBQVEsR0FBRyxFQUFFO0FBQUEsQ0FBQyxDQUMvQztBQUVELElBQU1XLGVBQWUsR0FBR1AsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBeEQsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXFELHVCQUFBLGlGQUlqQztBQUVNLFNBQVNVLHNCQUFzQkEsQ0FBQSxFQUFHO0VBQ3ZDLE9BQU8sSUFBQVIsNEJBQU0sRUFBQ1MsWUFBSyxDQUFDLENBQUEvRCxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBb0QsdUJBQUEsNkdBQ1QsVUFBQUksS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDTyxZQUFZO0VBQUEsR0FJL0IsVUFBQVIsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDUSxvQkFBb0I7RUFBQTtBQUd4RDtBQUVBLElBQU1DLGdCQUFnQixHQUFHLElBQUFaLDRCQUFNLEVBQUNhLDhCQUFXLENBQUMsQ0FBQWxFLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUFtRCx1QkFBQSxnTkFFM0JQLEtBQUssRUFDVkEsS0FBSyxFQUNOLFVBQUFXLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ1csU0FBUztBQUFBLEdBSTNCdEIsR0FBRyxFQUVIRCxLQUFLLENBRWxCO0FBU00sU0FBU3dCLHNCQUFzQkEsQ0FBQSxFQUFHO0VBQ3ZDLElBQU1DLGVBQStDLEdBQUcsU0FBbERBLGVBQStDQSxDQUFBQyxJQUFBLEVBSy9DO0lBQUEsSUFKSkMsS0FBSyxHQUFBRCxJQUFBLENBQUxDLEtBQUs7TUFDTEMsS0FBSyxHQUFBRixJQUFBLENBQUxFLEtBQUs7TUFDTEMsTUFBTSxHQUFBSCxJQUFBLENBQU5HLE1BQU07TUFBQUMsYUFBQSxHQUFBSixJQUFBLENBQ05LLFFBQVE7TUFBUkEsUUFBUSxHQUFBRCxhQUFBLGNBQUcsS0FBSyxHQUFBQSxhQUFBO0lBRWhCLElBQU1FLFFBQVEsR0FBRyxJQUFBQyxrQkFBVyxFQUFDLFVBQUFDLEtBQUs7TUFBQSxPQUFJTCxNQUFNLENBQUNLLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUM7SUFBQSxHQUFFLENBQUNQLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLG9CQUNFckYsTUFBQSxZQUFBNkYsYUFBQSxDQUFDaEIsZ0JBQWdCO01BQ2ZpQixJQUFJLEVBQUMsTUFBTTtNQUNYQyxTQUFTLEVBQUMsOEJBQThCO01BQ3hDSCxLQUFLLEVBQUVSLEtBQU07TUFDYlksT0FBTyxFQUFFckMsb0JBQXFCO01BQzlCNkIsUUFBUSxFQUFFQSxRQUFTO01BQ25CRCxRQUFRLEVBQUVBLFFBQVM7TUFDbkJVLEVBQUUsS0FBQUMsTUFBQSxDQUFLZixLQUFLO0lBQXNCLENBQ25DLENBQUM7RUFFTixDQUFDO0VBRURGLGVBQWUsQ0FBQ2tCLFdBQVcsR0FBRyxpQkFBaUI7RUFDL0MsT0FBT2xCLGVBQWU7QUFDeEI7QUFFQSxJQUFNbUIsY0FBYyxHQUFHO0VBQ3JCQyxLQUFLLEtBQUFILE1BQUEsQ0FBS3hDLE1BQU0sT0FBSTtFQUNwQjRDLE1BQU0sS0FBQUosTUFBQSxDQUFLMUMsS0FBSztBQUNsQixDQUFDO0FBRU0sU0FBUytDLHlCQUF5QkEsQ0FBQSxFQUFHO0VBQzFDLElBQU1DLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUFDLEtBQUEsRUFBZ0I7SUFBQSxJQUFYdEIsS0FBSyxHQUFBc0IsS0FBQSxDQUFMdEIsS0FBSztJQUNoQyxJQUFNdUIsS0FBSyxHQUFHLElBQUFDLGNBQU8sRUFDbkI7TUFBQSxPQUFBMUQsYUFBQSxDQUFBQSxhQUFBLEtBQVdtRCxjQUFjO1FBQUVRLGVBQWUsRUFBRXpCLEtBQUs7UUFBRTBCLFdBQVcsS0FBQVgsTUFBQSxDQUFLekMsR0FBRztNQUFJO0lBQUEsQ0FBRSxFQUM1RSxDQUFDMEIsS0FBSyxDQUNSLENBQUM7SUFDRCxvQkFBT25GLE1BQUEsWUFBQTZGLGFBQUE7TUFBS2EsS0FBSyxFQUFFQSxLQUFNO01BQUNYLFNBQVMsRUFBQztJQUFrQixDQUFFLENBQUM7RUFDM0QsQ0FBQztFQUVELE9BQU9TLGtCQUFrQjtBQUMzQjtBQUVBLElBQU1NLFdBQVcsR0FBRzdDLDRCQUFNLENBQUNDLEdBQUcsQ0FBQXJELGdCQUFBLEtBQUFBLGdCQUFBLE9BQUFrRCx1QkFBQSxpRkFFbkIsVUFBQUksS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDVyxTQUFTO0FBQUEsRUFFeEM7QUFZRGdDLGdCQUFnQixDQUFDQyxJQUFJLEdBQUcsQ0FBQ1QseUJBQXlCLEVBQUV2QixzQkFBc0IsRUFBRVAsc0JBQXNCLENBQUM7QUFDNUYsU0FBU3NDLGdCQUFnQkEsQ0FDOUJQLGtCQUFnRSxFQUNoRXZCLGVBQTBELEVBQzFEZ0MsZUFBMEQsRUFDMUQ7RUFDQSxJQUFNQyxTQUFtQyxHQUFHLFNBQXRDQSxTQUFtQ0EsQ0FBQUMsS0FBQSxFQU1uQztJQUFBLElBQUFDLFdBQUEsR0FBQUQsS0FBQSxDQUxKL0IsS0FBSztNQUFMQSxLQUFLLEdBQUFnQyxXQUFBLGNBQUcsRUFBRSxHQUFBQSxXQUFBO01BQ1ZDLFlBQVksR0FBQUYsS0FBQSxDQUFaRSxZQUFZO01BQ1psQyxLQUFLLEdBQUFnQyxLQUFBLENBQUxoQyxLQUFLO01BQ0xtQyxhQUFhLEdBQUFILEtBQUEsQ0FBYkcsYUFBYTtNQUNiQyxZQUFZLEdBQUFKLEtBQUEsQ0FBWkksWUFBWTtJQUVaLElBQU1sQyxNQUFNLEdBQUcsSUFBQUksa0JBQVcsRUFDeEIsVUFBQStCLFFBQVE7TUFBQSxPQUFJRixhQUFhLElBQUlBLGFBQWEsQ0FBQ25DLEtBQUssRUFBRXFDLFFBQVEsQ0FBQztJQUFBLEdBQzNELENBQUNyQyxLQUFLLEVBQUVtQyxhQUFhLENBQ3ZCLENBQUM7SUFDRCxJQUFNRyxPQUFPLEdBQUcsSUFBQWhDLGtCQUFXLEVBQUM7TUFBQSxPQUFNOEIsWUFBWSxJQUFJQSxZQUFZLENBQUNwQyxLQUFLLENBQUM7SUFBQSxHQUFFLENBQUNBLEtBQUssRUFBRW9DLFlBQVksQ0FBQyxDQUFDO0lBQzdGLElBQU0zQixLQUFLLEdBQUd5QixZQUFZLEdBQUdqQyxLQUFLLENBQUNzQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDbEQsb0JBQ0UxSCxNQUFBLFlBQUE2RixhQUFBLENBQUNyQixlQUFlLHFCQUNkeEUsTUFBQSxZQUFBNkYsYUFBQSxDQUFDVyxrQkFBa0I7TUFBQ3JCLEtBQUssRUFBRUE7SUFBTSxDQUFFLENBQUMsRUFDbkNtQyxhQUFhLGdCQUNadEgsTUFBQSxZQUFBNkYsYUFBQSxDQUFDWixlQUFlO01BQUNNLFFBQVEsRUFBRSxDQUFDK0IsYUFBYztNQUFDbEMsS0FBSyxFQUFFUSxLQUFNO01BQUNULEtBQUssRUFBRUEsS0FBTTtNQUFDRSxNQUFNLEVBQUVBO0lBQU8sQ0FBRSxDQUFDLGdCQUV6RnJGLE1BQUEsWUFBQTZGLGFBQUEsQ0FBQ2lCLFdBQVcsUUFBRWxCLEtBQW1CLENBQ2xDLEVBQ0EyQixZQUFZLGdCQUFHdkgsTUFBQSxZQUFBNkYsYUFBQSxDQUFDb0IsZUFBZTtNQUFDakIsT0FBTyxFQUFFeUIsT0FBUTtNQUFDbkIsTUFBTSxFQUFDO0lBQU0sQ0FBRSxDQUFDLEdBQUcsSUFDdkQsQ0FBQztFQUV0QixDQUFDO0VBQ0RZLFNBQVMsQ0FBQ2YsV0FBVyxHQUFHLFdBQVc7RUFDbkMsT0FBT2UsU0FBUztBQUNsQjtBQUVBLElBQU1TLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUlDLFlBQVksRUFBRUMsU0FBUyxFQUFLO0VBQ3hELElBQU9DLElBQUksR0FBWUQsU0FBUyxDQUF6QkMsSUFBSTtJQUFFQyxNQUFNLEdBQUlGLFNBQVMsQ0FBbkJFLE1BQU07RUFFbkIsSUFBTUMsZUFBZSxPQUFBQyxtQkFBQSxhQUFPTCxZQUFZLENBQUM7RUFFekNFLElBQUksQ0FBQzFFLE9BQU8sQ0FBQyxVQUFDOEUsS0FBSyxFQUFFQyxLQUFLLEVBQUs7SUFDN0IsSUFBTUMsWUFBWSxHQUFHUixZQUFZLENBQUNTLFNBQVMsQ0FBQyxVQUFBQyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDUixJQUFJLEtBQUtJLEtBQUs7SUFBQSxFQUFDO0lBQ2xFLElBQUlFLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtNQUN2QkosZUFBZSxDQUFDSSxZQUFZLENBQUMsR0FBRztRQUM5QmhELEtBQUssRUFBRTJDLE1BQU0sQ0FBQ0ksS0FBSyxDQUFDO1FBQ3BCTCxJQUFJLEVBQUVJLEtBQUs7UUFDWEssUUFBUSxFQUFFO01BQ1osQ0FBQztNQUNEUCxlQUFlLENBQUNJLFlBQVksQ0FBQyxDQUFDaEQsS0FBSyxHQUFHMkMsTUFBTSxDQUFDSSxLQUFLLENBQUM7SUFDckQsQ0FBQyxNQUFNO01BQ0xILGVBQWUsQ0FBQ2pGLElBQUksQ0FBQztRQUNuQitFLElBQUksRUFBRUksS0FBSztRQUNYOUMsS0FBSyxFQUFFMkMsTUFBTSxDQUFDSSxLQUFLLENBQUM7UUFDcEJJLFFBQVEsRUFBRTtNQUNaLENBQUMsQ0FBQztJQUNKO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsT0FBT1AsZUFBZTtBQUN4QixDQUFDO0FBYUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNRLHNCQUFzQkEsQ0FBQUMsS0FBQSxFQUFnRTtFQUFBLElBQTlEYixZQUFZLEdBQUFhLEtBQUEsQ0FBWmIsWUFBWTtJQUFFYyxjQUFjLEdBQUFELEtBQUEsQ0FBZEMsY0FBYztFQUMzRCxJQUFJZCxZQUFZLElBQUksSUFBQWUsZUFBUSxFQUFDZixZQUFZLENBQUMsRUFBRTtJQUMxQztJQUNBLElBQU1FLElBQUksR0FBR3BHLE1BQU0sQ0FBQ2dCLElBQUksQ0FBQ2tGLFlBQVksQ0FBQztJQUN0QyxJQUFNRyxNQUFNLEdBQUdyRyxNQUFNLENBQUNrSCxNQUFNLENBQUNoQixZQUFZLENBQUM7SUFFMUMsT0FBT0Qsb0JBQW9CLENBQUNlLGNBQWMsRUFBRTtNQUFDWixJQUFJLEVBQUpBLElBQUk7TUFBRUMsTUFBTSxFQUFOQTtJQUFNLENBQUMsQ0FBQztFQUM3RDtFQUVBLE9BQU9XLGNBQWM7QUFDdkI7QUFFTyxTQUFTRyxvQkFBb0JBLENBQ2xDQyxLQUFnQyxFQUNoQ0MsU0FBd0MsRUFDeENDLE1BQWtDLEVBQ2xDQyxLQUFnQyxFQUNoQ0MsT0FBb0MsRUFDcENDLFNBQXdDLEVBQ3hDQyxXQUE0QyxFQUM1Q0MsUUFBc0MsRUFDNUI7RUFDVixJQUFNQyxLQUFLLEdBQUcsSUFBQTNDLGNBQU8sRUFDbkI7SUFBQSxPQUFNLElBQUE0Qyx5QkFBa0IsRUFBQztNQUFDTixLQUFLLEVBQUxBLEtBQUs7TUFBRUQsTUFBTSxFQUFOQSxNQUFNO01BQUVELFNBQVMsRUFBVEEsU0FBUztNQUFFRyxPQUFPLEVBQVBBLE9BQU87TUFBRUosS0FBSyxFQUFMQTtJQUFLLENBQUMsQ0FBQztFQUFBLEdBQ3BFLENBQUNHLEtBQUssRUFBRUQsTUFBTSxFQUFFRCxTQUFTLEVBQUVHLE9BQU8sRUFBRUosS0FBSyxDQUMzQyxDQUFDO0VBRUQsSUFBTVUsV0FBVyxHQUFHLElBQUE3QyxjQUFPLEVBQ3pCO0lBQUEsT0FBTSxJQUFBOEMsa0NBQTJCLEVBQUM7TUFBQ0gsS0FBSyxFQUFMQSxLQUFLO01BQUVSLEtBQUssRUFBTEEsS0FBSztNQUFFTyxRQUFRLEVBQVJBO0lBQVEsQ0FBQyxDQUFDO0VBQUEsR0FDM0QsQ0FBQ0MsS0FBSyxFQUFFUixLQUFLLEVBQUVPLFFBQVEsQ0FDekIsQ0FBQztFQUVELElBQU1YLGNBQWMsR0FBRyxJQUFBL0IsY0FBTyxFQUFDLFlBQU07SUFDbkMsSUFBSW9DLFNBQVMsS0FBS1csc0JBQVcsQ0FBQ0MsYUFBYSxJQUFJVixLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFVyxRQUFRLEVBQUU7TUFDOUQsSUFBTUMsV0FBVyxHQUFHLElBQUFDLHVDQUFnQyxFQUFDYixLQUFLLENBQUNXLFFBQVEsQ0FBQztNQUNwRSxPQUFPQyxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUUsR0FBRyxDQUFDLFVBQUFDLEVBQUUsRUFBSTtRQUM1QixPQUFPO1VBQ0xsQyxJQUFJLEVBQUVrQyxFQUFFLENBQUNsQyxJQUFJO1VBQ2IxQyxLQUFLLEVBQUU2RSxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsRUFBRSxDQUFDNUUsS0FBSyxDQUFDLEdBQzFCNEUsRUFBRSxDQUFDNUUsS0FBSyxDQUFDakMsTUFBTSxHQUFHLENBQUMsTUFBQStDLE1BQUEsQ0FDZDhELEVBQUUsQ0FBQzVFLEtBQUssQ0FBQ2pDLE1BQU0saUJBQ2xCNkcsRUFBRSxDQUFDNUUsS0FBSyxHQUNWNEUsRUFBRSxDQUFDNUUsS0FBSyxJQUFJO1FBQ2xCLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSjtJQUNBLE9BQU8sSUFBQStFLHVCQUFnQixFQUFDO01BQUNiLEtBQUssRUFBRUUsV0FBVztNQUFFVCxTQUFTLEVBQVRBLFNBQVM7TUFBRUssV0FBVyxFQUFYQSxXQUFXO01BQUVELFNBQVMsRUFBVEE7SUFBUyxDQUFDLENBQUM7RUFDbEYsQ0FBQyxFQUFFLENBQUNGLEtBQUssRUFBRU8sV0FBVyxFQUFFVCxTQUFTLEVBQUVLLFdBQVcsRUFBRUQsU0FBUyxDQUFDLENBQUM7RUFFM0QsSUFBTWlCLHdCQUF3QixHQUFHLElBQUF6RCxjQUFPLEVBQ3RDO0lBQUEsT0FDRTZCLHNCQUFzQixDQUFDO01BQ3JCWixZQUFZLEVBQUVxQixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXJCLFlBQVk7TUFDakNjLGNBQWMsRUFBZEE7SUFDRixDQUFDLENBQUM7RUFBQSxHQUNKLENBQUNPLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFckIsWUFBWSxFQUFFYyxjQUFjLENBQ3RDLENBQUM7RUFFRCxPQUFPMEIsd0JBQXdCLElBQUksRUFBRTtBQUN2QztBQXVCQUMsa0JBQWtCLENBQUNyRCxJQUFJLEdBQUcsQ0FBQ0QsZ0JBQWdCLENBQUM7QUFDNUMsU0FBU3NELGtCQUFrQkEsQ0FBQ25ELFNBQThDLEVBQUU7RUFDMUUsSUFBTW9ELFdBQXVDLEdBQUcsU0FBMUNBLFdBQXVDQSxDQUFBQyxLQUFBLEVBYXZDO0lBQUEsSUFaSnpCLEtBQUssR0FBQXlCLEtBQUEsQ0FBTHpCLEtBQUs7TUFDTEksT0FBTyxHQUFBcUIsS0FBQSxDQUFQckIsT0FBTztNQUNQNUUsVUFBVSxHQUFBaUcsS0FBQSxDQUFWakcsVUFBVTtNQUNWMEUsTUFBTSxHQUFBdUIsS0FBQSxDQUFOdkIsTUFBTTtNQUNOQyxLQUFLLEdBQUFzQixLQUFBLENBQUx0QixLQUFLO01BQ0xHLFdBQVcsR0FBQW1CLEtBQUEsQ0FBWG5CLFdBQVc7TUFDWEwsU0FBUyxHQUFBd0IsS0FBQSxDQUFUeEIsU0FBUztNQUNUSSxTQUFTLEdBQUFvQixLQUFBLENBQVRwQixTQUFTO01BQ1RFLFFBQVEsR0FBQWtCLEtBQUEsQ0FBUmxCLFFBQVE7TUFDUm1CLG1CQUFtQixHQUFBRCxLQUFBLENBQW5CQyxtQkFBbUI7TUFBQUMsa0JBQUEsR0FBQUYsS0FBQSxDQUNuQmxELFlBQVk7TUFBWkEsWUFBWSxHQUFBb0Qsa0JBQUEsY0FBRyxJQUFJLEdBQUFBLGtCQUFBO01BQUFDLGlCQUFBLEdBQUFILEtBQUEsQ0FDbkJoRyxXQUFXO01BQVhBLFdBQVcsR0FBQW1HLGlCQUFBLGNBQUcsS0FBSyxHQUFBQSxpQkFBQTtJQUVuQixJQUFBQyxLQUFBLEdBQXVCMUIsS0FBSyxJQUFJLENBQUMsQ0FBQztNQUEzQnJCLFlBQVksR0FBQStDLEtBQUEsQ0FBWi9DLFlBQVk7SUFFbkIsSUFBTWdELE9BQU8sR0FBRy9CLG9CQUFvQixDQUNsQ0MsS0FBSyxFQUNMQyxTQUFTLEVBQ1RDLE1BQU0sRUFDTkMsS0FBSyxFQUNMQyxPQUFPLEVBQ1BDLFNBQVMsRUFDVEMsV0FBVyxFQUNYQyxRQUNGLENBQUM7SUFFRCxJQUFNL0IsYUFBYSxHQUFHLElBQUE3QixrQkFBVyxFQUMvQixVQUFDTixLQUFLLEVBQUUwRixRQUFRLEVBQUs7TUFDbkIsSUFBSUwsbUJBQW1CLEVBQUU7UUFDdkJBLG1CQUFtQixDQUFBdkgsYUFBQSxDQUFBQSxhQUFBLEtBQ2QyRSxZQUFZLFdBQUF2RSxnQkFBQSxpQkFDZDhCLEtBQUssRUFBRzBGLFFBQVEsRUFDbEIsQ0FBQztNQUNKO0lBQ0YsQ0FBQyxFQUNELENBQUNMLG1CQUFtQixFQUFFNUMsWUFBWSxDQUNwQyxDQUFDO0lBRUQsSUFBTUwsWUFBWSxHQUFHLElBQUE5QixrQkFBVyxFQUM5QixVQUFBTixLQUFLLEVBQUk7TUFDUDtNQUNBO01BQ0EsSUFBZ0IyRixDQUFDLEdBQWFsRCxZQUFZLENBQWxDekMsS0FBSztRQUFTNEYsSUFBSSxPQUFBQyx5QkFBQSxhQUFJcEQsWUFBWSxHQUFsQ3pDLEtBQUssRUFBQTRFLEdBQUEsQ0FBQTdILGNBQUE7TUFDYixJQUFJc0ksbUJBQW1CLElBQUlPLElBQUksRUFBRTtRQUMvQlAsbUJBQW1CLENBQUNPLElBQUksQ0FBQztNQUMzQjtNQUNBO0lBQ0YsQ0FBQyxFQUNELENBQUNQLG1CQUFtQixFQUFFNUMsWUFBWSxDQUNwQyxDQUFDO0lBRUQsb0JBQ0U1SCxNQUFBLFlBQUE2RixhQUFBLENBQUM3QixZQUFZO01BQ1grQixTQUFTLEVBQUMscUJBQXFCO01BQy9CeEIsV0FBVyxFQUFFQSxXQUFZO01BQ3pCRCxVQUFVLEVBQUVBO0lBQVcsR0FFdEJzRyxPQUFPLENBQUNiLEdBQUcsQ0FBQyxVQUFDa0IsTUFBTSxFQUFFakosQ0FBQztNQUFBLG9CQUNyQmhDLE1BQUEsWUFBQTZGLGFBQUEsQ0FBQ3FCLFNBQVM7UUFDUmdFLEdBQUcsS0FBQWhGLE1BQUEsQ0FBSytFLE1BQU0sQ0FBQ25ELElBQUksT0FBQTVCLE1BQUEsQ0FBSWxFLENBQUMsQ0FBRztRQUMzQm9ELEtBQUssRUFBRTZGLE1BQU0sQ0FBQzdGLEtBQU07UUFDcEJpQyxZQUFZLEVBQUVBLFlBQWE7UUFDM0JsQyxLQUFLLEVBQUU4RixNQUFNLENBQUNuRCxJQUFLO1FBQ25CUixhQUFhLEVBQUUsQ0FBQy9DLFdBQVcsR0FBRytDLGFBQWEsR0FBRzZELFNBQVU7UUFDeEQ1RCxZQUFZLEVBQUUwRCxNQUFNLENBQUMxQyxRQUFRLElBQUksQ0FBQ2hFLFdBQVcsR0FBR2dELFlBQVksR0FBRzREO01BQVUsQ0FDMUUsQ0FBQztJQUFBLENBQ0gsQ0FDVyxDQUFDO0VBRW5CLENBQUM7RUFFRCxvQkFBT0MsaUJBQUssQ0FBQ0MsSUFBSSxDQUFDZixXQUFXLENBQUM7QUFDaEM7QUFBQyxJQUFBZ0IsUUFBQSxHQUFBQyxPQUFBLGNBRWNsQixrQkFBa0IiLCJpZ25vcmVMaXN0IjpbXX0=
273
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfdGVtcGxhdGVPYmplY3Q1IiwiX3RlbXBsYXRlT2JqZWN0NiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJST1dfSCIsIkdBUCIsIlJFQ1RfVyIsInN0b3BDbGlja1Byb3BhZ2F0aW9uIiwic3RvcFByb3BhZ2F0aW9uIiwiaW5wdXRDc3MiLCJjc3MiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIlN0eWxlZExlZ2VuZCIsInN0eWxlZCIsImRpdiIsInByb3BzIiwidGhlbWUiLCJzaWRlUGFuZWxTY3JvbGxCYXIiLCJpc0V4cGFuZGVkIiwiZGlzYWJsZUVkaXQiLCJTdHlsZWRMZWdlbmRSb3ciLCJSZXNldENvbG9yTGFiZWxGYWN0b3J5IiwiUmVzZXQiLCJsYWJlbENvbG9yTFQiLCJwYW5lbEhlYWRlckljb25Ib3ZlciIsIlN0eWxlSW5saW5lSW5wdXQiLCJJbmxpbmVJbnB1dCIsInRleHRDb2xvciIsIkxlZ2VuZFJvd0VkaXRvckZhY3RvcnkiLCJMZWdlbmRSb3dFZGl0b3IiLCJfcmVmIiwiY29sb3IiLCJsYWJlbCIsIm9uRWRpdCIsIl9yZWYkZGlzYWJsZWQiLCJkaXNhYmxlZCIsIm9uQ2hhbmdlIiwidXNlQ2FsbGJhY2siLCJldmVudCIsInRhcmdldCIsInZhbHVlIiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwiaWQiLCJjb25jYXQiLCJkaXNwbGF5TmFtZSIsIkxlZ2VuZFJvd1N0eWxlIiwid2lkdGgiLCJoZWlnaHQiLCJMZWdlbmRDb2xvckRpc3BsYXlGYWN0b3J5IiwiTGVnZW5kQ29sb3JEaXNwbGF5IiwiX3JlZjIiLCJzdHlsZSIsInVzZU1lbW8iLCJiYWNrZ3JvdW5kQ29sb3IiLCJtYXJnaW5SaWdodCIsIlN0eWxlZExhYmVsIiwiTGVnZW5kUm93RmFjdG9yeSIsImRlcHMiLCJSZXNldENvbG9yTGFiZWwiLCJMZWdlbmRSb3ciLCJfcmVmMyIsIl9yZWYzJGxhYmVsIiwiZGlzcGxheUxhYmVsIiwib25VcGRhdGVMYWJlbCIsIm9uUmVzZXRMYWJlbCIsIm5ld0xhYmVsIiwib25SZXNldCIsIm92ZXJyaWRlQ29sb3JMZWdlbmRzIiwiY29sb3JMZWdlbmRzIiwib3ZlcnJpZGVzIiwiZGF0YSIsImxhYmVscyIsIm5ld0NvbG9yTGVnZW5kcyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJkYXR1bSIsImluZGV4IiwiY3VycmVudEluZGV4IiwiZmluZEluZGV4IiwiZCIsIm92ZXJyaWRlIiwib3ZlcnJpZGVCeUN1c3RvbUxlZ2VuZCIsIl9yZWY0IiwiY3VycmVudExlZ2VuZHMiLCJpc09iamVjdCIsInZhbHVlcyIsInVzZUxheWVyQ29sb3JMZWdlbmRzIiwibGF5ZXIiLCJzY2FsZVR5cGUiLCJkb21haW4iLCJyYW5nZSIsImlzRml4ZWQiLCJmaWVsZFR5cGUiLCJsYWJlbEZvcm1hdCIsIm1hcFN0YXRlIiwic2NhbGUiLCJnZXRMYXllckNvbG9yU2NhbGUiLCJzY2FsZUJ5Wm9vbSIsImdldFZpc3VhbENoYW5uZWxTY2FsZUJ5Wm9vbSIsIlNDQUxFX1RZUEVTIiwiY3VzdG9tT3JkaW5hbCIsImNvbG9yTWFwIiwiY29sb3JCcmVha3MiLCJjb2xvck1hcFRvQ2F0ZWdvcmljYWxDb2xvckJyZWFrcyIsIm1hcCIsImNiIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0TGVnZW5kT2ZTY2FsZSIsIkxlZ2VuZHNXaXRoQ3VzdG9tTGVnZW5kcyIsIkNvbG9yTGVnZW5kRmFjdG9yeSIsIkNvbG9yTGVnZW5kIiwiX3JlZjUiLCJvblVwZGF0ZUNvbG9yTGVnZW5kIiwiX3JlZjUkZGlzcGxheUxhYmVsIiwiX3JlZjUkZGlzYWJsZUVkaXQiLCJfcmVmNiIsImxlZ2VuZHMiLCJuZXdWYWx1ZSIsIl8iLCJyZXN0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsImxlZ2VuZCIsImtleSIsInVuZGVmaW5lZCIsIlJlYWN0IiwibWVtbyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vY29sb3ItbGVnZW5kLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge2Nzc30gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge1NDQUxFX1RZUEVTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge0NvbG9yUmFuZ2UsIEhleENvbG9yLCBNYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBnZXRMYXllckNvbG9yU2NhbGUsXG4gIGdldExlZ2VuZE9mU2NhbGUsXG4gIGdldFZpc3VhbENoYW5uZWxTY2FsZUJ5Wm9vbSxcbiAgY29sb3JNYXBUb0NhdGVnb3JpY2FsQ29sb3JCcmVha3MsXG4gIGlzT2JqZWN0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge1Jlc2V0fSBmcm9tICcuL2ljb25zJztcbmltcG9ydCB7SW5saW5lSW5wdXR9IGZyb20gJy4vc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5jb25zdCBST1dfSCA9IDE1O1xuY29uc3QgR0FQID0gMjtcbmNvbnN0IFJFQ1RfVyA9IDIwO1xuXG5jb25zdCBzdG9wQ2xpY2tQcm9wYWdhdGlvbiA9IGUgPT4gZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuY29uc3QgaW5wdXRDc3MgPSBjc3NgXG4gIGlucHV0IHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuYDtcbmNvbnN0IFN0eWxlZExlZ2VuZCA9IHN0eWxlZC5kaXY8e2Rpc2FibGVFZGl0OiBib29sZWFuOyBpc0V4cGFuZGVkPzogYm9vbGVhbn0+YFxuICAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNpZGVQYW5lbFNjcm9sbEJhcn07XG4gICR7cHJvcHMgPT4gKHByb3BzLmlzRXhwYW5kZWQgPyAnJyA6IGBtYXgtaGVpZ2h0OiAxNTZweDtgKX07XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgbWFyZ2luLWJvdHRvbTogJHtHQVB9cHg7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtcm93LWdhcDogJHtHQVB9cHg7XG4gIHBhZGRpbmc6IDJweCAwO1xuXG4gICR7cHJvcHMgPT4gKHByb3BzLmRpc2FibGVFZGl0ID8gaW5wdXRDc3MgOiAnJyl9XG5gO1xuXG5jb25zdCBTdHlsZWRMZWdlbmRSb3cgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDIwcHg7XG4gIG1pbi13aWR0aDogMDtcbmA7XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNldENvbG9yTGFiZWxGYWN0b3J5KCkge1xuICByZXR1cm4gc3R5bGVkKFJlc2V0KWBcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYWJlbENvbG9yTFR9O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBtYXJnaW4tbGVmdDogJHtHQVB9cHg7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnBhbmVsSGVhZGVySWNvbkhvdmVyfTtcbiAgICB9XG4gIGA7XG59XG5cbmNvbnN0IFN0eWxlSW5saW5lSW5wdXQgPSBzdHlsZWQoSW5saW5lSW5wdXQpYFxuICBmb250LXNpemU6IDkuNXB4O1xuICBsaW5lLWhlaWdodDogJHtST1dfSH1weDtcbiAgaGVpZ2h0OiAke1JPV19IfXB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICB3aWR0aDogdW5zZXQ7XG4gIHBhZGRpbmc6IDJweDtcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbWFyZ2luOiAwICR7R0FQfXB4O1xuICA6aG92ZXIge1xuICAgIGhlaWdodDogJHtST1dfSH1weDtcbiAgfVxuYDtcblxuZXhwb3J0IHR5cGUgTGVnZW5kUm93RWRpdG9yUHJvcHMgPSB7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGN1c3RvbUxhYmVsPzogc3RyaW5nO1xuICBvbkVkaXQ6IChuZXdWYWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59O1xuZXhwb3J0IGZ1bmN0aW9uIExlZ2VuZFJvd0VkaXRvckZhY3RvcnkoKSB7XG4gIGNvbnN0IExlZ2VuZFJvd0VkaXRvcjogUmVhY3QuRkM8TGVnZW5kUm93RWRpdG9yUHJvcHM+ID0gKHtcbiAgICBjb2xvcixcbiAgICBsYWJlbCxcbiAgICBvbkVkaXQsXG4gICAgZGlzYWJsZWQgPSBmYWxzZVxuICB9KSA9PiB7XG4gICAgY29uc3Qgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhldmVudCA9PiBvbkVkaXQoZXZlbnQudGFyZ2V0LnZhbHVlKSwgW29uRWRpdF0pO1xuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVJbmxpbmVJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzTmFtZT1cImxlZ2VuZF9fbGFiZWxfX3RpdGxlX19lZGl0b3JcIlxuICAgICAgICB2YWx1ZT17bGFiZWx9XG4gICAgICAgIG9uQ2xpY2s9e3N0b3BDbGlja1Byb3BhZ2F0aW9ufVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgaWQ9e2Ake2NvbG9yfTppbnB1dC1sZWdlbmQtbGFiZWxgfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIExlZ2VuZFJvd0VkaXRvci5kaXNwbGF5TmFtZSA9ICdMZWdlbmRSb3dFZGl0b3InO1xuICByZXR1cm4gTGVnZW5kUm93RWRpdG9yO1xufVxuXG5jb25zdCBMZWdlbmRSb3dTdHlsZSA9IHtcbiAgd2lkdGg6IGAke1JFQ1RfV31weGAsXG4gIGhlaWdodDogYCR7Uk9XX0h9cHhgXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gTGVnZW5kQ29sb3JEaXNwbGF5RmFjdG9yeSgpIHtcbiAgY29uc3QgTGVnZW5kQ29sb3JEaXNwbGF5ID0gKHtjb2xvcn0pID0+IHtcbiAgICBjb25zdCBzdHlsZSA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiAoey4uLkxlZ2VuZFJvd1N0eWxlLCBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLCBtYXJnaW5SaWdodDogYCR7R0FQfXB4YH0pLFxuICAgICAgW2NvbG9yXVxuICAgICk7XG4gICAgcmV0dXJuIDxkaXYgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9XCJsZWdlbmQtcm93LWNvbG9yXCIgLz47XG4gIH07XG5cbiAgcmV0dXJuIExlZ2VuZENvbG9yRGlzcGxheTtcbn1cblxuY29uc3QgU3R5bGVkTGFiZWwgPSBzdHlsZWQuZGl2YFxuICBmb250LXNpemU6IDEwcHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gIHBhZGRpbmctbGVmdDogMnB4O1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuYDtcblxuZXhwb3J0IHR5cGUgTGVnZW5kUm93UHJvcHMgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGN1c3RvbUxhYmVsPzogc3RyaW5nO1xuICBkaXNwbGF5TGFiZWw/OiBib29sZWFuO1xuICBjb2xvcjogc3RyaW5nO1xuICBvblVwZGF0ZUxhYmVsPzogKHNlbGVjdGVkQ29sb3I6IHN0cmluZywgbmV3TGFiZWw6IHN0cmluZykgPT4gdm9pZDtcbiAgb25SZXNldExhYmVsPzogKGNvbG9yOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGRpc2FibGVFZGl0PzogYm9vbGVhbjtcbn07XG5cbkxlZ2VuZFJvd0ZhY3RvcnkuZGVwcyA9IFtMZWdlbmRDb2xvckRpc3BsYXlGYWN0b3J5LCBMZWdlbmRSb3dFZGl0b3JGYWN0b3J5LCBSZXNldENvbG9yTGFiZWxGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBMZWdlbmRSb3dGYWN0b3J5KFxuICBMZWdlbmRDb2xvckRpc3BsYXk6IFJldHVyblR5cGU8dHlwZW9mIExlZ2VuZENvbG9yRGlzcGxheUZhY3Rvcnk+LFxuICBMZWdlbmRSb3dFZGl0b3I6IFJldHVyblR5cGU8dHlwZW9mIExlZ2VuZFJvd0VkaXRvckZhY3Rvcnk+LFxuICBSZXNldENvbG9yTGFiZWw6IFJldHVyblR5cGU8dHlwZW9mIFJlc2V0Q29sb3JMYWJlbEZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgTGVnZW5kUm93OiBSZWFjdC5GQzxMZWdlbmRSb3dQcm9wcz4gPSAoe1xuICAgIGxhYmVsID0gJycsXG4gICAgZGlzcGxheUxhYmVsLFxuICAgIGNvbG9yLFxuICAgIG9uVXBkYXRlTGFiZWwsXG4gICAgb25SZXNldExhYmVsXG4gIH0pID0+IHtcbiAgICBjb25zdCBvbkVkaXQgPSB1c2VDYWxsYmFjayhcbiAgICAgIG5ld0xhYmVsID0+IG9uVXBkYXRlTGFiZWwgJiYgb25VcGRhdGVMYWJlbChjb2xvciwgbmV3TGFiZWwpLFxuICAgICAgW2NvbG9yLCBvblVwZGF0ZUxhYmVsXVxuICAgICk7XG4gICAgY29uc3Qgb25SZXNldCA9IHVzZUNhbGxiYWNrKCgpID0+IG9uUmVzZXRMYWJlbCAmJiBvblJlc2V0TGFiZWwoY29sb3IpLCBbY29sb3IsIG9uUmVzZXRMYWJlbF0pO1xuICAgIGNvbnN0IHZhbHVlID0gZGlzcGxheUxhYmVsID8gU3RyaW5nKGxhYmVsID8/ICcnKSA6ICcnO1xuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkTGVnZW5kUm93PlxuICAgICAgICA8TGVnZW5kQ29sb3JEaXNwbGF5IGNvbG9yPXtjb2xvcn0gLz5cbiAgICAgICAge29uVXBkYXRlTGFiZWwgPyAoXG4gICAgICAgICAgPExlZ2VuZFJvd0VkaXRvciBkaXNhYmxlZD17IW9uVXBkYXRlTGFiZWx9IGxhYmVsPXt2YWx1ZX0gY29sb3I9e2NvbG9yfSBvbkVkaXQ9e29uRWRpdH0gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U3R5bGVkTGFiZWw+e3ZhbHVlfTwvU3R5bGVkTGFiZWw+XG4gICAgICAgICl9XG4gICAgICAgIHtvblJlc2V0TGFiZWwgPyA8UmVzZXRDb2xvckxhYmVsIG9uQ2xpY2s9e29uUmVzZXR9IGhlaWdodD1cIjE2cHhcIiAvPiA6IG51bGx9XG4gICAgICA8L1N0eWxlZExlZ2VuZFJvdz5cbiAgICApO1xuICB9O1xuICBMZWdlbmRSb3cuZGlzcGxheU5hbWUgPSAnTGVnZW5kUm93JztcbiAgcmV0dXJuIExlZ2VuZFJvdztcbn1cblxuY29uc3Qgb3ZlcnJpZGVDb2xvckxlZ2VuZHMgPSAoY29sb3JMZWdlbmRzLCBvdmVycmlkZXMpID0+IHtcbiAgY29uc3Qge2RhdGEsIGxhYmVsc30gPSBvdmVycmlkZXM7XG5cbiAgY29uc3QgbmV3Q29sb3JMZWdlbmRzID0gWy4uLmNvbG9yTGVnZW5kc107XG5cbiAgZGF0YS5mb3JFYWNoKChkYXR1bSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjb2xvckxlZ2VuZHMuZmluZEluZGV4KGQgPT4gZC5kYXRhID09PSBkYXR1bSk7XG4gICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEpIHtcbiAgICAgIG5ld0NvbG9yTGVnZW5kc1tjdXJyZW50SW5kZXhdID0ge1xuICAgICAgICBsYWJlbDogbGFiZWxzW2luZGV4XSxcbiAgICAgICAgZGF0YTogZGF0dW0sXG4gICAgICAgIG92ZXJyaWRlOiB0cnVlXG4gICAgICB9O1xuICAgICAgbmV3Q29sb3JMZWdlbmRzW2N1cnJlbnRJbmRleF0ubGFiZWwgPSBsYWJlbHNbaW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdDb2xvckxlZ2VuZHMucHVzaCh7XG4gICAgICAgIGRhdGE6IGRhdHVtLFxuICAgICAgICBsYWJlbDogbGFiZWxzW2luZGV4XSxcbiAgICAgICAgb3ZlcnJpZGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG5ld0NvbG9yTGVnZW5kcztcbn07XG5cbnR5cGUgT3ZlcnJpZGVCeUN1c3RvbUxlZ2VuZE9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBMZWdlbmQgcGFyYW1ldGVycyB0byBvdmVycmlkZVxuICAgKi9cbiAgY29sb3JMZWdlbmRzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIE9yaWdpbmFsIExlZ2VuZHNcbiAgICovXG4gIGN1cnJlbnRMZWdlbmRzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0TGVnZW5kT2ZTY2FsZT47XG59O1xuXG4vKipcbiAqIE92ZXJyaWRlcyBsZWdlbmQgbGFiZWxzIHdpdGggY29sb3IgbGVnZW5kcy5cbiAqIEBwYXJhbSBwYXJhbTAgTGVnZW5kIGluZm8gYW5kIG92ZXJyaWRlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBPcmlnaW5hbCBvciBvdmVycmlkZW4gbGVuZW5kcy5cbiAqL1xuZnVuY3Rpb24gb3ZlcnJpZGVCeUN1c3RvbUxlZ2VuZCh7Y29sb3JMZWdlbmRzLCBjdXJyZW50TGVnZW5kc306IE92ZXJyaWRlQnlDdXN0b21MZWdlbmRPcHRpb25zKSB7XG4gIGlmIChjb2xvckxlZ2VuZHMgJiYgaXNPYmplY3QoY29sb3JMZWdlbmRzKSkge1xuICAgIC8vIG92ZXJyaWRlIGxhYmVscyB3aXRoIGNvbG9yIGxlZ2VuZHNcbiAgICBjb25zdCBkYXRhID0gT2JqZWN0LmtleXMoY29sb3JMZWdlbmRzKTtcbiAgICBjb25zdCBsYWJlbHMgPSBPYmplY3QudmFsdWVzKGNvbG9yTGVnZW5kcyk7XG5cbiAgICByZXR1cm4gb3ZlcnJpZGVDb2xvckxlZ2VuZHMoY3VycmVudExlZ2VuZHMsIHtkYXRhLCBsYWJlbHN9KTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50TGVnZW5kcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUxheWVyQ29sb3JMZWdlbmRzKFxuICBsYXllcjogQ29sb3JMZWdlbmRQcm9wc1snbGF5ZXInXSxcbiAgc2NhbGVUeXBlOiBDb2xvckxlZ2VuZFByb3BzWydzY2FsZVR5cGUnXSxcbiAgZG9tYWluOiBDb2xvckxlZ2VuZFByb3BzWydkb21haW4nXSxcbiAgcmFuZ2U6IENvbG9yTGVnZW5kUHJvcHNbJ3JhbmdlJ10sXG4gIGlzRml4ZWQ6IENvbG9yTGVnZW5kUHJvcHNbJ2lzRml4ZWQnXSxcbiAgZmllbGRUeXBlOiBDb2xvckxlZ2VuZFByb3BzWydmaWVsZFR5cGUnXSxcbiAgbGFiZWxGb3JtYXQ6IENvbG9yTGVnZW5kUHJvcHNbJ2xhYmVsRm9ybWF0J10sXG4gIG1hcFN0YXRlOiBDb2xvckxlZ2VuZFByb3BzWydtYXBTdGF0ZSddXG4pOiBMZWdlbmRbXSB7XG4gIGNvbnN0IHNjYWxlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBnZXRMYXllckNvbG9yU2NhbGUoe3JhbmdlLCBkb21haW4sIHNjYWxlVHlwZSwgaXNGaXhlZCwgbGF5ZXJ9KSxcbiAgICBbcmFuZ2UsIGRvbWFpbiwgc2NhbGVUeXBlLCBpc0ZpeGVkLCBsYXllcl1cbiAgKTtcblxuICBjb25zdCBzY2FsZUJ5Wm9vbSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0VmlzdWFsQ2hhbm5lbFNjYWxlQnlab29tKHtzY2FsZSwgbGF5ZXIsIG1hcFN0YXRlfSksXG4gICAgW3NjYWxlLCBsYXllciwgbWFwU3RhdGVdXG4gICk7XG5cbiAgY29uc3QgY3VycmVudExlZ2VuZHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoc2NhbGVUeXBlID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmIHJhbmdlPy5jb2xvck1hcCkge1xuICAgICAgY29uc3QgY29sb3JCcmVha3MgPSBjb2xvck1hcFRvQ2F0ZWdvcmljYWxDb2xvckJyZWFrcyhyYW5nZS5jb2xvck1hcCk7XG4gICAgICByZXR1cm4gY29sb3JCcmVha3M/Lm1hcChjYiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogY2IuZGF0YSxcbiAgICAgICAgICBsYWJlbDogQXJyYXkuaXNBcnJheShjYi5sYWJlbClcbiAgICAgICAgICAgID8gY2IubGFiZWwubGVuZ3RoID4gNVxuICAgICAgICAgICAgICA/IGAke2NiLmxhYmVsLmxlbmd0aH0gc2VsZWN0ZWRgXG4gICAgICAgICAgICAgIDogY2IubGFiZWxcbiAgICAgICAgICAgIDogY2IubGFiZWwgfHwgJydcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0TGVnZW5kT2ZTY2FsZSh7c2NhbGU6IHNjYWxlQnlab29tLCBzY2FsZVR5cGUsIGxhYmVsRm9ybWF0LCBmaWVsZFR5cGV9KTtcbiAgfSwgW3JhbmdlLCBzY2FsZUJ5Wm9vbSwgc2NhbGVUeXBlLCBsYWJlbEZvcm1hdCwgZmllbGRUeXBlXSk7XG5cbiAgY29uc3QgTGVnZW5kc1dpdGhDdXN0b21MZWdlbmRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgb3ZlcnJpZGVCeUN1c3RvbUxlZ2VuZCh7XG4gICAgICAgIGNvbG9yTGVnZW5kczogcmFuZ2U/LmNvbG9yTGVnZW5kcyxcbiAgICAgICAgY3VycmVudExlZ2VuZHNcbiAgICAgIH0pLFxuICAgIFtyYW5nZT8uY29sb3JMZWdlbmRzLCBjdXJyZW50TGVnZW5kc11cbiAgKTtcblxuICByZXR1cm4gTGVnZW5kc1dpdGhDdXN0b21MZWdlbmRzIHx8IFtdO1xufVxuXG5leHBvcnQgdHlwZSBDb2xvckxlZ2VuZFByb3BzID0ge1xuICBsYXllcjogTGF5ZXI7XG4gIHNjYWxlVHlwZTogc3RyaW5nO1xuICBkb21haW46IG51bWJlcltdIHwgc3RyaW5nW107XG4gIGZpZWxkVHlwZT86IHN0cmluZyB8IG51bGw7XG4gIHJhbmdlPzogQ29sb3JSYW5nZSB8IG51bGw7XG4gIGxhYmVsRm9ybWF0PzogKG46IGFueSkgPT4gc3RyaW5nO1xuICBkaXNwbGF5TGFiZWw/OiBib29sZWFuO1xuICBkaXNhYmxlRWRpdD86IGJvb2xlYW47XG4gIG1hcFN0YXRlPzogTWFwU3RhdGU7XG4gIGlzRml4ZWQ/OiBib29sZWFuO1xuICBpc0V4cGFuZGVkPzogYm9vbGVhbjtcbiAgb25VcGRhdGVDb2xvckxlZ2VuZD86IChjb2xvckxlZ2VuZHM6IHtba2V5OiBIZXhDb2xvcl06IHN0cmluZ30pID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMZWdlbmQgPSB7XG4gIGRhdGE6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgb3ZlcnJpZGU/OiBib29sZWFuO1xufTtcblxuQ29sb3JMZWdlbmRGYWN0b3J5LmRlcHMgPSBbTGVnZW5kUm93RmFjdG9yeV07XG5mdW5jdGlvbiBDb2xvckxlZ2VuZEZhY3RvcnkoTGVnZW5kUm93OiBSZXR1cm5UeXBlPHR5cGVvZiBMZWdlbmRSb3dGYWN0b3J5Pikge1xuICBjb25zdCBDb2xvckxlZ2VuZDogUmVhY3QuRkM8Q29sb3JMZWdlbmRQcm9wcz4gPSAoe1xuICAgIGxheWVyLFxuICAgIGlzRml4ZWQsXG4gICAgaXNFeHBhbmRlZCxcbiAgICBkb21haW4sXG4gICAgcmFuZ2UsXG4gICAgbGFiZWxGb3JtYXQsXG4gICAgc2NhbGVUeXBlLFxuICAgIGZpZWxkVHlwZSxcbiAgICBtYXBTdGF0ZSxcbiAgICBvblVwZGF0ZUNvbG9yTGVnZW5kLFxuICAgIGRpc3BsYXlMYWJlbCA9IHRydWUsXG4gICAgZGlzYWJsZUVkaXQgPSBmYWxzZVxuICB9KSA9PiB7XG4gICAgY29uc3Qge2NvbG9yTGVnZW5kc30gPSByYW5nZSB8fCB7fTtcblxuICAgIGNvbnN0IGxlZ2VuZHMgPSB1c2VMYXllckNvbG9yTGVnZW5kcyhcbiAgICAgIGxheWVyLFxuICAgICAgc2NhbGVUeXBlLFxuICAgICAgZG9tYWluLFxuICAgICAgcmFuZ2UsXG4gICAgICBpc0ZpeGVkLFxuICAgICAgZmllbGRUeXBlLFxuICAgICAgbGFiZWxGb3JtYXQsXG4gICAgICBtYXBTdGF0ZVxuICAgICk7XG5cbiAgICBjb25zdCBvblVwZGF0ZUxhYmVsID0gdXNlQ2FsbGJhY2soXG4gICAgICAoY29sb3IsIG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChvblVwZGF0ZUNvbG9yTGVnZW5kKSB7XG4gICAgICAgICAgb25VcGRhdGVDb2xvckxlZ2VuZCh7XG4gICAgICAgICAgICAuLi5jb2xvckxlZ2VuZHMsXG4gICAgICAgICAgICBbY29sb3JdOiBuZXdWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW29uVXBkYXRlQ29sb3JMZWdlbmQsIGNvbG9yTGVnZW5kc11cbiAgICApO1xuXG4gICAgY29uc3Qgb25SZXNldExhYmVsID0gdXNlQ2FsbGJhY2soXG4gICAgICBjb2xvciA9PiB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3Qge1tjb2xvcl06IF8sIC4uLnJlc3R9ID0gY29sb3JMZWdlbmRzO1xuICAgICAgICBpZiAob25VcGRhdGVDb2xvckxlZ2VuZCAmJiByZXN0KSB7XG4gICAgICAgICAgb25VcGRhdGVDb2xvckxlZ2VuZChyZXN0KTtcbiAgICAgICAgfVxuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgICB9LFxuICAgICAgW29uVXBkYXRlQ29sb3JMZWdlbmQsIGNvbG9yTGVnZW5kc11cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRMZWdlbmRcbiAgICAgICAgY2xhc3NOYW1lPVwic3R5bGVkLWNvbG9yLWxlZ2VuZFwiXG4gICAgICAgIGRpc2FibGVFZGl0PXtkaXNhYmxlRWRpdH1cbiAgICAgICAgaXNFeHBhbmRlZD17aXNFeHBhbmRlZH1cbiAgICAgID5cbiAgICAgICAge2xlZ2VuZHMubWFwKChsZWdlbmQsIGkpID0+IChcbiAgICAgICAgICA8TGVnZW5kUm93XG4gICAgICAgICAgICBrZXk9e2Ake2xlZ2VuZC5kYXRhfS0ke2l9YH1cbiAgICAgICAgICAgIGxhYmVsPXtsZWdlbmQubGFiZWx9XG4gICAgICAgICAgICBkaXNwbGF5TGFiZWw9e2Rpc3BsYXlMYWJlbH1cbiAgICAgICAgICAgIGNvbG9yPXtsZWdlbmQuZGF0YX1cbiAgICAgICAgICAgIG9uVXBkYXRlTGFiZWw9eyFkaXNhYmxlRWRpdCA/IG9uVXBkYXRlTGFiZWwgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBvblJlc2V0TGFiZWw9e2xlZ2VuZC5vdmVycmlkZSAmJiAhZGlzYWJsZUVkaXQgPyBvblJlc2V0TGFiZWwgOiB1bmRlZmluZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L1N0eWxlZExlZ2VuZD5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBSZWFjdC5tZW1vKENvbG9yTGVnZW5kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JMZWdlbmRGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFGLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFHQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFRQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxrQkFBQSxHQUFBTCxPQUFBO0FBQWdELElBQUFNLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFsQmhEO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWQsd0JBQUFjLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JB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