@cyanheads/eurostat-mcp-server 0.6.5 → 0.8.0

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 (85) hide show
  1. package/AGENTS.md +1 -1
  2. package/CLAUDE.md +1 -1
  3. package/README.md +85 -85
  4. package/changelog/0.7.x/0.7.0.md +33 -0
  5. package/changelog/0.8.x/0.8.0.md +30 -0
  6. package/dist/config/server-config.d.ts +2 -0
  7. package/dist/config/server-config.d.ts.map +1 -1
  8. package/dist/config/server-config.js +13 -0
  9. package/dist/config/server-config.js.map +1 -1
  10. package/dist/index.js +2 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/mcp-server/resources/definitions/eurostat-dataset.resource.d.ts.map +1 -1
  13. package/dist/mcp-server/resources/definitions/eurostat-dataset.resource.js +4 -2
  14. package/dist/mcp-server/resources/definitions/eurostat-dataset.resource.js.map +1 -1
  15. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js +1 -1
  16. package/dist/mcp-server/tools/definitions/eurostat-browse-themes.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.d.ts +1 -1
  18. package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.js +4 -4
  19. package/dist/mcp-server/tools/definitions/eurostat-dataframe-describe.tool.js.map +1 -1
  20. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.d.ts +2 -2
  21. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js +4 -4
  22. package/dist/mcp-server/tools/definitions/eurostat-dataframe-query.tool.js.map +1 -1
  23. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.d.ts +16 -23
  24. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.d.ts.map +1 -1
  25. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.js +156 -65
  26. package/dist/mcp-server/tools/definitions/eurostat-download-dataset.tool.js.map +1 -1
  27. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.d.ts +3 -4
  28. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.d.ts.map +1 -1
  29. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.js +8 -9
  30. package/dist/mcp-server/tools/definitions/eurostat-get-dataset-info.tool.js.map +1 -1
  31. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.d.ts +21 -7
  32. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.d.ts.map +1 -1
  33. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.js +115 -19
  34. package/dist/mcp-server/tools/definitions/eurostat-get-dimension-values.tool.js.map +1 -1
  35. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts +10 -3
  36. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.d.ts.map +1 -1
  37. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js +156 -24
  38. package/dist/mcp-server/tools/definitions/eurostat-query-dataset.tool.js.map +1 -1
  39. package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.d.ts +2 -2
  40. package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.d.ts.map +1 -1
  41. package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.js +19 -6
  42. package/dist/mcp-server/tools/definitions/eurostat-search-datasets.tool.js.map +1 -1
  43. package/dist/mcp-server/tools/narrowing-advice.d.ts +22 -0
  44. package/dist/mcp-server/tools/narrowing-advice.d.ts.map +1 -0
  45. package/dist/mcp-server/tools/narrowing-advice.js +44 -0
  46. package/dist/mcp-server/tools/narrowing-advice.js.map +1 -0
  47. package/dist/services/eurostat-bulk/eurostat-bulk-service.d.ts +12 -1
  48. package/dist/services/eurostat-bulk/eurostat-bulk-service.d.ts.map +1 -1
  49. package/dist/services/eurostat-bulk/eurostat-bulk-service.js +66 -12
  50. package/dist/services/eurostat-bulk/eurostat-bulk-service.js.map +1 -1
  51. package/dist/services/eurostat-bulk/types.d.ts +5 -0
  52. package/dist/services/eurostat-bulk/types.d.ts.map +1 -1
  53. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts +47 -1
  54. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.d.ts.map +1 -1
  55. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js +188 -13
  56. package/dist/services/eurostat-catalogue/eurostat-catalogue-service.js.map +1 -1
  57. package/dist/services/eurostat-codelists.d.ts +20 -0
  58. package/dist/services/eurostat-codelists.d.ts.map +1 -1
  59. package/dist/services/eurostat-codelists.js +25 -0
  60. package/dist/services/eurostat-codelists.js.map +1 -1
  61. package/dist/services/eurostat-data/eurostat-data-service.d.ts +78 -9
  62. package/dist/services/eurostat-data/eurostat-data-service.d.ts.map +1 -1
  63. package/dist/services/eurostat-data/eurostat-data-service.js +306 -51
  64. package/dist/services/eurostat-data/eurostat-data-service.js.map +1 -1
  65. package/dist/services/eurostat-data/sdmx-metadata.d.ts +26 -0
  66. package/dist/services/eurostat-data/sdmx-metadata.d.ts.map +1 -1
  67. package/dist/services/eurostat-data/sdmx-metadata.js +38 -1
  68. package/dist/services/eurostat-data/sdmx-metadata.js.map +1 -1
  69. package/dist/services/eurostat-data/types.d.ts +38 -2
  70. package/dist/services/eurostat-data/types.d.ts.map +1 -1
  71. package/dist/services/eurostat-data/types.js.map +1 -1
  72. package/dist/services/eurostat-hosts.d.ts +17 -0
  73. package/dist/services/eurostat-hosts.d.ts.map +1 -0
  74. package/dist/services/eurostat-hosts.js +23 -0
  75. package/dist/services/eurostat-hosts.js.map +1 -0
  76. package/dist/services/eurostat-periods.d.ts +68 -0
  77. package/dist/services/eurostat-periods.d.ts.map +1 -0
  78. package/dist/services/eurostat-periods.js +204 -0
  79. package/dist/services/eurostat-periods.js.map +1 -0
  80. package/dist/services/shared-load.d.ts +16 -0
  81. package/dist/services/shared-load.d.ts.map +1 -0
  82. package/dist/services/shared-load.js +27 -0
  83. package/dist/services/shared-load.js.map +1 -0
  84. package/package.json +2 -2
  85. package/server.json +31 -3
@@ -5,11 +5,107 @@
5
5
  import { McpError, notFound, serviceUnavailable, validationError, } from '@cyanheads/mcp-ts-core/errors';
6
6
  import { fetchWithTimeout, withRetry } from '@cyanheads/mcp-ts-core/utils';
7
7
  import { getServerConfig } from '../../config/server-config.js';
8
- import { CONF_STATUS_COLUMN, CONF_STATUS_LABEL_COLUMN, CONF_STATUS_LABELS, OBS_FLAG_COLUMN, OBS_FLAG_LABEL_COLUMN, OBS_FLAG_LABELS, OBS_VALUE_COLUMN, } from '../eurostat-codelists.js';
9
- import { parseSdmxDatasetMetadata } from './sdmx-metadata.js';
8
+ import { CONF_STATUS_COLUMN, CONF_STATUS_LABEL_COLUMN, CONF_STATUS_LABELS, decodeTextValue, OBS_FLAG_COLUMN, OBS_FLAG_LABEL_COLUMN, OBS_FLAG_LABELS, OBS_VALUE_COLUMN, OBS_VALUE_TEXT_COLUMN, } from '../eurostat-codelists.js';
9
+ import { dataHostFor, isComextDataset } from '../eurostat-hosts.js';
10
+ import { awaitShared } from '../shared-load.js';
11
+ import { parseSdmxDatasetMetadata, parseSdmxDimensionOrder, } from './sdmx-metadata.js';
10
12
  import { OBS_CAP, } from './types.js';
11
13
  /** Separator between the observation flag and the confidentiality status inside a JSON-stat status. */
12
14
  const CONF_SEPARATOR = '|';
15
+ /** A Statistics API error label that names one of the two period parameters. */
16
+ const PERIOD_PARAM_LABEL = /'(since|until)TimePeriod'/;
17
+ /**
18
+ * How long parsed dataset metadata is reused. Eurostat publishes data at 11:00 and
19
+ * 23:00 Brussels time, so an hour bounds how stale a constraint's period list or
20
+ * `lastUpdated` can get while sparing repeat calls the structure download — 23 MB
21
+ * for `DS-045409`.
22
+ */
23
+ const METADATA_CACHE_TTL_MS = 60 * 60 * 1000;
24
+ /**
25
+ * Estimated bytes of parsed metadata held at once, least recently used evicted first.
26
+ * The bound is on size because entries differ by three orders of magnitude: a
27
+ * main-host dataset holds a few KB, `DS-045409`'s 37,069 labelled product codes
28
+ * about 13.5 MB (measured retained heap; {@link estimateMetadataBytes} puts it at
29
+ * 13.8 MB). A dataset estimated past the whole budget is answered but not kept.
30
+ */
31
+ const METADATA_CACHE_MAX_BYTES = 64 * 1024 * 1024;
32
+ /**
33
+ * Upper-end estimate of one entry's retained heap: two bytes per character of every
34
+ * code and label (a label outside Latin-1 is stored at two bytes a character), plus
35
+ * a fixed cost per value and per entry for the objects that hold them.
36
+ */
37
+ function estimateMetadataBytes({ valuesByDimension }) {
38
+ let bytes = 4_096;
39
+ for (const values of Object.values(valuesByDimension)) {
40
+ for (const { code, label } of values)
41
+ bytes += 2 * (code.length + label.length) + 100;
42
+ }
43
+ return bytes;
44
+ }
45
+ /** Freeze a parsed structure all the way down, so no caller can edit a cached entry. */
46
+ function deepFreeze(value) {
47
+ if (value && typeof value === 'object' && !Object.isFrozen(value)) {
48
+ Object.freeze(value);
49
+ for (const child of Object.values(value))
50
+ deepFreeze(child);
51
+ }
52
+ return value;
53
+ }
54
+ /**
55
+ * Filter values the reply matched to nothing, compared case-insensitively
56
+ * against each filtered dimension's `category.index`.
57
+ *
58
+ * Eurostat drops an unmatched value from the index rather than failing, and a
59
+ * dimension keeps `size` ≥ 1 as long as one value beside it matched — so `size`
60
+ * alone misses `geo=DE,XX`. It also matches codes in any case (`geo=de` comes
61
+ * back as `DE`), which the comparison mirrors — for the dimension key too, since
62
+ * `GEO=DE` is answered under `geo`. Values are reported under the key and in the
63
+ * spelling sent, each once. A filtered dimension the reply does not describe at all
64
+ * is skipped: there is nothing to compare against, and guessing would invent a
65
+ * mismatch.
66
+ */
67
+ export function findUnmatchedValues(sent, data) {
68
+ const unmatched = {};
69
+ for (const [key, values] of Object.entries(sent)) {
70
+ const dim = data.id?.find((id) => id.toLowerCase() === key.toLowerCase());
71
+ const index = dim === undefined ? undefined : data.dimension?.[dim]?.category?.index;
72
+ if (!index)
73
+ continue;
74
+ const known = new Set(Object.keys(index).map((code) => code.toLowerCase()));
75
+ const missing = [...new Set(values)].filter((v) => !known.has(v.toLowerCase()));
76
+ if (missing.length > 0)
77
+ unmatched[key] = missing;
78
+ }
79
+ return Object.keys(unmatched).length > 0 ? unmatched : undefined;
80
+ }
81
+ /**
82
+ * Read an empty match's envelope for why it is empty, without another request.
83
+ *
84
+ * Three signals, which can co-occur: filter values absent from their dimension's
85
+ * index; a `time` dimension of size 0, meaning the requested range selected no
86
+ * period of the dataset; and, when every dimension matched at least one value,
87
+ * the periods the reply selected — none of which carries a value for the slice.
88
+ */
89
+ function diagnoseEmptyMatch(data, sent, annotation) {
90
+ const unmatchedValues = findUnmatchedValues(sent, data);
91
+ const dims = data.id ?? [];
92
+ const sizes = data.size ?? [];
93
+ const timeDim = dims.indexOf('time');
94
+ const diagnosis = { ...(unmatchedValues && { unmatchedValues }) };
95
+ if (timeDim < 0)
96
+ return diagnosis;
97
+ if (sizes[timeDim] === 0) {
98
+ const oldest = annotation('OBS_PERIOD_OVERALL_OLDEST');
99
+ const latest = annotation('OBS_PERIOD_OVERALL_LATEST');
100
+ diagnosis.outsideCoverage = { ...(oldest && { oldest }), ...(latest && { latest }) };
101
+ }
102
+ else if (sizes.length === dims.length && sizes.every((size) => size >= 1)) {
103
+ diagnosis.matchedPeriods = Object.entries(data.dimension?.time?.category?.index ?? {})
104
+ .sort(([, a], [, b]) => a - b)
105
+ .map(([code]) => code);
106
+ }
107
+ return diagnosis;
108
+ }
13
109
  /**
14
110
  * Split a JSON-stat status into its observation flag and its confidentiality status.
15
111
  *
@@ -48,14 +144,31 @@ export function splitStatus(code, labels) {
48
144
  }),
49
145
  };
50
146
  }
147
+ /** Run an SDMX parse, reporting a body it cannot read as a non-retryable upstream fault. */
148
+ function parseSdmx(datasetCode, parse) {
149
+ try {
150
+ return parse();
151
+ }
152
+ catch (error) {
153
+ throw serviceUnavailable(`Eurostat returned malformed SDMX metadata for dataset "${datasetCode}": ${error instanceof Error ? error.message : String(error)}`, { reason: 'upstream_fault', datasetCode, retryable: false });
154
+ }
155
+ }
51
156
  export class EurostatDataService {
157
+ /**
158
+ * Parsed metadata per dataset, keyed by host and lowercased code — Eurostat matches
159
+ * codes in any case, so `ds-045409` and `DS-045409` share one entry. The value is the
160
+ * in-flight or settled parse, so concurrent first calls share one download. Entries
161
+ * are deep-frozen, expire after {@link METADATA_CACHE_TTL_MS}, are bounded in total
162
+ * by {@link METADATA_CACHE_MAX_BYTES}, and a failed load is dropped rather than
163
+ * cached. Map order is recency order: a hit is re-inserted.
164
+ */
165
+ metadataCache = new Map();
52
166
  // config and storage accepted to match the standard service init pattern;
53
167
  // this service uses only the Eurostat public API and per-request config.
54
168
  // biome-ignore lint/complexity/noUselessConstructor: standard init pattern
55
169
  constructor(_config, _storage) { }
56
170
  buildUrl(datasetCode, params) {
57
- const { baseUrl } = getServerConfig();
58
- const url = new URL(`${baseUrl}/statistics/1.0/data/${encodeURIComponent(datasetCode)}`);
171
+ const url = new URL(`${dataHostFor(datasetCode)}/statistics/1.0/data/${encodeURIComponent(datasetCode)}`);
59
172
  url.searchParams.set('format', 'JSON');
60
173
  for (const [key, value] of Object.entries(params)) {
61
174
  if (Array.isArray(value)) {
@@ -68,21 +181,32 @@ export class EurostatDataService {
68
181
  }
69
182
  return url;
70
183
  }
184
+ /**
185
+ * One dataset-scoped SDMX 2.1 structure URL — every structure read goes through
186
+ * here, on the host {@link dataHostFor} picks for the code.
187
+ *
188
+ * The structure definition is requested unversioned, which Eurostat answers with
189
+ * the current one. Its version moves with the dataset (`earn_ses_annual`'s is
190
+ * 22.0), and a pinned `/1.0` returns the dataset's first structure instead.
191
+ */
71
192
  buildSdmxUrl(resource, datasetCode) {
72
- const { baseUrl } = getServerConfig();
73
- const url = new URL(`${baseUrl}/sdmx/2.1/${resource}/ESTAT/${encodeURIComponent(datasetCode)}/1.0`);
193
+ const version = resource === 'datastructure' ? '' : '/1.0';
194
+ const url = new URL(`${dataHostFor(datasetCode)}/sdmx/2.1/${resource}/ESTAT/${encodeURIComponent(datasetCode)}${version}`);
74
195
  if (resource === 'dataflow') {
75
196
  url.searchParams.set('references', 'descendants');
76
197
  url.searchParams.set('detail', 'referencepartial');
77
198
  }
78
199
  return url;
79
200
  }
80
- fetchSdmxXml(url, datasetCode, ctx) {
81
- const { requestTimeoutMs } = getServerConfig();
201
+ /**
202
+ * `signal` cancels the request. It is the caller's own for a read one caller owns,
203
+ * and undefined for the shared metadata load, which no single caller may cancel.
204
+ */
205
+ fetchSdmxXml(url, datasetCode, ctx, signal, timeoutMs = getServerConfig().requestTimeoutMs) {
82
206
  return withRetry(async () => {
83
207
  try {
84
- const response = await fetchWithTimeout(url.toString(), requestTimeoutMs, ctx, {
85
- signal: ctx.signal,
208
+ const response = await fetchWithTimeout(url.toString(), timeoutMs, ctx, {
209
+ ...(signal && { signal }),
86
210
  expectedStatuses: [404],
87
211
  });
88
212
  return await response.text();
@@ -94,19 +218,89 @@ export class EurostatDataService {
94
218
  }
95
219
  throw error;
96
220
  }
97
- }, { operation: 'fetchSdmxMetadata', context: ctx, baseDelayMs: 1000, signal: ctx.signal });
221
+ }, {
222
+ operation: 'fetchSdmxMetadata',
223
+ context: ctx,
224
+ baseDelayMs: 1000,
225
+ ...(signal && { signal }),
226
+ });
98
227
  }
99
- async getSdmxMetadata(datasetCode, ctx) {
228
+ /**
229
+ * The dataset's parsed metadata, from {@link metadataCache} when a live entry holds it.
230
+ *
231
+ * The load is shared by every caller of the dataset, so it runs without a caller's
232
+ * signal and is bounded by its timeouts alone: a caller that cancels stops waiting
233
+ * without failing the others or the entry.
234
+ */
235
+ getSdmxMetadata(datasetCode, ctx) {
236
+ return awaitShared(ctx.signal, () => {
237
+ const key = `${dataHostFor(datasetCode)} ${datasetCode.toLowerCase()}`;
238
+ const now = Date.now();
239
+ const hit = this.metadataCache.get(key);
240
+ this.metadataCache.delete(key);
241
+ if (hit && hit.expiresAt > now) {
242
+ this.metadataCache.set(key, hit);
243
+ return hit.metadata;
244
+ }
245
+ const entry = {
246
+ expiresAt: now + METADATA_CACHE_TTL_MS,
247
+ metadata: this.loadSdmxMetadata(datasetCode, ctx).then(deepFreeze),
248
+ };
249
+ this.metadataCache.set(key, entry);
250
+ entry.metadata.then((metadata) => {
251
+ entry.bytes = estimateMetadataBytes(metadata);
252
+ if (entry.bytes > METADATA_CACHE_MAX_BYTES) {
253
+ if (this.metadataCache.get(key) === entry)
254
+ this.metadataCache.delete(key);
255
+ }
256
+ else {
257
+ this.evictToBudget();
258
+ }
259
+ }, () => {
260
+ if (this.metadataCache.get(key) === entry)
261
+ this.metadataCache.delete(key);
262
+ });
263
+ return entry.metadata;
264
+ });
265
+ }
266
+ /**
267
+ * Drop settled entries, least recently used first, until the estimated total fits
268
+ * {@link METADATA_CACHE_MAX_BYTES}. A load still in flight has no size yet and is
269
+ * kept, so concurrent callers of it still share one download.
270
+ */
271
+ evictToBudget() {
272
+ let total = 0;
273
+ for (const { bytes } of this.metadataCache.values())
274
+ total += bytes ?? 0;
275
+ for (const [key, { bytes }] of this.metadataCache) {
276
+ if (total <= METADATA_CACHE_MAX_BYTES)
277
+ break;
278
+ if (bytes === undefined)
279
+ continue;
280
+ this.metadataCache.delete(key);
281
+ total -= bytes;
282
+ }
283
+ }
284
+ /**
285
+ * Download and parse one dataset's dataflow structure and content constraint.
286
+ *
287
+ * The dataflow carries a label for every code the dataset uses, so it is the one
288
+ * structure read that scales with the dataset — 23 MB, uncompressed, for the CN8
289
+ * collection — and it alone gets `EUROSTAT_METADATA_TIMEOUT_MS`.
290
+ */
291
+ async loadSdmxMetadata(datasetCode, ctx) {
292
+ const { metadataTimeoutMs } = getServerConfig();
100
293
  const [dataflowXml, constraintXml] = await Promise.all([
101
- this.fetchSdmxXml(this.buildSdmxUrl('dataflow', datasetCode), datasetCode, ctx),
102
- this.fetchSdmxXml(this.buildSdmxUrl('contentconstraint', datasetCode), datasetCode, ctx),
294
+ this.fetchSdmxXml(this.buildSdmxUrl('dataflow', datasetCode), datasetCode, ctx, undefined, metadataTimeoutMs),
295
+ this.fetchSdmxXml(this.buildSdmxUrl('contentconstraint', datasetCode), datasetCode, ctx, undefined),
103
296
  ]);
104
- try {
105
- return parseSdmxDatasetMetadata(dataflowXml, constraintXml, datasetCode);
106
- }
107
- catch (error) {
108
- throw serviceUnavailable(`Eurostat returned malformed SDMX metadata for dataset "${datasetCode}": ${error instanceof Error ? error.message : String(error)}`, { reason: 'upstream_fault', datasetCode, retryable: false });
109
- }
297
+ /**
298
+ * The parse's strings are slices of the response bodies, and a slice keeps its
299
+ * whole source string alive: kept as parsed, a `DS-045409` entry pins the 23 MB
300
+ * dataflow body and retains 52 MB instead of 13.5 MB. Cloning copies every string
301
+ * out, so the bodies are freed once the load ends.
302
+ */
303
+ return parseSdmx(datasetCode, () => structuredClone(parseSdmxDatasetMetadata(dataflowXml, constraintXml, datasetCode)));
110
304
  }
111
305
  fetchJson(url, ctx) {
112
306
  const { requestTimeoutMs } = getServerConfig();
@@ -115,10 +309,11 @@ export class EurostatDataService {
115
309
  try {
116
310
  response = await fetchWithTimeout(url.toString(), requestTimeoutMs, ctx, {
117
311
  signal: ctx.signal,
118
- // 400 (invalid dimension / conflicting params) and 404 (unknown dataset) are
119
- // modeled outcomes reclassified below into the declared error contract, not
120
- // service failures — log them at debug. The thrown McpError is unchanged.
121
- expectedStatuses: [400, 404],
312
+ // 400 (invalid dimension / conflicting params), 404 (unknown dataset) and 413
313
+ // (extraction too large) are modeled outcomes reclassified below into the
314
+ // declared error contract, not service failures — log them at debug. The
315
+ // thrown McpError is unchanged.
316
+ expectedStatuses: [400, 404, 413],
122
317
  });
123
318
  }
124
319
  catch (err) {
@@ -163,13 +358,20 @@ export class EurostatDataService {
163
358
  }
164
359
  checkResponseErrors(data, url) {
165
360
  const firstError = Array.isArray(data.error) ? data.error[0] : undefined;
166
- // Async response: query too large. Eurostat emits both a warning object on HTTP 200 and
167
- // an error-array item on HTTP 413; classify both before withRetry sees the error.
168
- if (data.warning?.status === 413 || firstError?.status === 413) {
169
- // Non-retryable: the same query re-run immediately just re-triggers the async response.
170
- // Fail fast so callers narrow the query instead of hammering the endpoint (matches the
171
- // async_response contract's retryable: false).
172
- throw serviceUnavailable('Eurostat returned an asynchronous response — the query matched too many observations. Add dimension filters (geo, unit, na_item, etc.) to reduce the result size and retry.', { reason: 'async_response', url, retryable: false });
361
+ /**
362
+ * Query too large to serve. Eurostat answers with a warning object on HTTP 200
363
+ * (the asynchronous response) or an error-array item on HTTP 413 — its label
364
+ * `EXTRACTION_TOO_BIG` with the estimated row count, or `ASYNCHRONOUS_RESPONSE`.
365
+ * Both are classified before withRetry sees them and are non-retryable: the same
366
+ * query re-run just re-triggers the refusal, so the caller has to narrow it. The
367
+ * dimensions to narrow by are the dataset's own, which the tool names; this
368
+ * message cannot, since a refusal carries no dimension list.
369
+ */
370
+ if (data.warning?.status === 413) {
371
+ throw serviceUnavailable('Eurostat returned an asynchronous response — the query matched too many observations. Add dimension filters or a narrower period range to reduce the result size, then retry.', { reason: 'async_response', url, retryable: false });
372
+ }
373
+ if (firstError?.status === 413) {
374
+ throw serviceUnavailable(`Eurostat refused the query as too large to serve (${firstError.label}). Add dimension filters or a narrower period range to reduce the result size, then retry.`, { reason: 'async_response', url, retryable: false });
173
375
  }
174
376
  // Error responses
175
377
  if (firstError) {
@@ -184,6 +386,14 @@ export class EurostatDataService {
184
386
  if (err.id === 150) {
185
387
  throw validationError(`Invalid dimension code. Eurostat error: ${err.label}. Use eurostat_get_dataset_info to see valid dimensions for this dataset.`, { reason: 'invalid_dimension', eurostatError: err });
186
388
  }
389
+ // Eurostat's own refusal of a period literal: error id 140 for one it cannot parse
390
+ // as a time filter, or a generic 400 whose label names the period parameter.
391
+ if (err.id === 140 || PERIOD_PARAM_LABEL.test(err.label)) {
392
+ throw validationError(`Eurostat rejected the period range. Eurostat error: ${err.label}.`, {
393
+ reason: 'invalid_period',
394
+ eurostatError: err,
395
+ });
396
+ }
187
397
  throw validationError(`Bad request. Eurostat error: ${err.label}.`, {
188
398
  reason: 'conflicting_params',
189
399
  eurostatError: err,
@@ -238,8 +448,9 @@ export class EurostatDataService {
238
448
  if (timeSize > 0)
239
449
  timeSeen[Math.floor(idx / timeStride) % timeSize] = 1;
240
450
  };
451
+ // A text value (PRODCOM's `:C`, `KG`) carries no number, so it counts as missing.
241
452
  for (const key in value)
242
- count(key, value[key] == null);
453
+ count(key, typeof value[key] !== 'number');
243
454
  // A cell flagged in `status` but absent from `value` decodes to a null value.
244
455
  for (const key in status) {
245
456
  if (!(key in value))
@@ -314,7 +525,10 @@ export class EurostatDataService {
314
525
  }
315
526
  const rawValue = value[keyStr] ?? null;
316
527
  const statusCode = status[keyStr];
317
- const obs = { dimensions, value: rawValue };
528
+ const obs = {
529
+ dimensions,
530
+ value: typeof rawValue === 'number' ? rawValue : null,
531
+ };
318
532
  if (statusCode) {
319
533
  const { flag, confStatus } = splitStatus(statusCode, statusLabels);
320
534
  if (flag)
@@ -322,6 +536,17 @@ export class EurostatDataService {
322
536
  if (confStatus)
323
537
  obs.confStatus = confStatus;
324
538
  }
539
+ if (typeof rawValue === 'string') {
540
+ const { confStatus, text } = decodeTextValue(rawValue);
541
+ if (confStatus && !obs.confStatus) {
542
+ obs.confStatus = {
543
+ code: confStatus,
544
+ label: CONF_STATUS_LABELS[confStatus] ?? confStatus,
545
+ };
546
+ }
547
+ if (text)
548
+ obs.valueText = text;
549
+ }
325
550
  yield obs;
326
551
  }
327
552
  }
@@ -344,23 +569,31 @@ export class EurostatDataService {
344
569
  extractAnnotation(data, type, field) {
345
570
  return data.extension?.annotation?.find((a) => a.type === type)?.[field];
346
571
  }
347
- /** Fetch complete dataset metadata from its scoped SDMX structure and content constraint. */
572
+ /**
573
+ * Fetch complete dataset metadata from its scoped SDMX structure and content constraint.
574
+ *
575
+ * Returns a copy of the cached entry carrying `code` as this caller spelled it: the
576
+ * cache is shared across spellings, and a caller that edits the result edits its own.
577
+ */
348
578
  async getDatasetInfo(datasetCode, ctx) {
349
579
  ctx.log.info('Fetching dataset info', { datasetCode });
350
- return (await this.getSdmxMetadata(datasetCode, ctx)).meta;
580
+ const { meta } = await this.getSdmxMetadata(datasetCode, ctx);
581
+ return { ...structuredClone(meta), code: datasetCode };
351
582
  }
352
583
  /**
353
584
  * The dataset's dimensions in key order, `time` excluded.
354
585
  *
355
- * This is the order the SDMX positional key is built from, and it is read from
356
- * the JSON-stat `id` array of a one-period slice — the cheapest response that
357
- * carries the full dimension list. Verified against live SDMX TSV headers on
358
- * 4-, 6- and 7-dimension datasets: the TSV header's comma-joined key field is
359
- * exactly this array.
586
+ * This is the order the SDMX positional key is built from, read from the
587
+ * dataset's structure definition. That response is a few KB however large the
588
+ * dataset is, where an observation request — even a one-period slice — is
589
+ * refused with HTTP 413 once the latest period alone exceeds Eurostat's
590
+ * extraction limit (`earn_ses_annual`). Verified against live SDMX TSV headers
591
+ * and JSON-stat `id` arrays: the header's comma-joined key field is exactly this
592
+ * order.
360
593
  */
361
594
  async getDimensionOrder(datasetCode, ctx) {
362
- const data = await this.fetchJson(this.buildUrl(datasetCode, { lastTimePeriod: '1' }), ctx);
363
- const order = (data.id ?? []).filter((dim) => dim !== 'time');
595
+ const xml = await this.fetchSdmxXml(this.buildSdmxUrl('datastructure', datasetCode), datasetCode, ctx, ctx.signal);
596
+ const order = parseSdmx(datasetCode, () => parseSdmxDimensionOrder(xml));
364
597
  if (order.length === 0) {
365
598
  throw serviceUnavailable(`Eurostat reported no dimensions for dataset "${datasetCode}", so a positional filter key cannot be built. Retry without filters to download the whole dataset.`, { reason: 'upstream_fault', datasetCode });
366
599
  }
@@ -384,10 +617,11 @@ export class EurostatDataService {
384
617
  if (!dimDef || !values) {
385
618
  throw notFound(`Dimension "${dimension}" not found in dataset "${datasetCode}". Use eurostat_get_dataset_info to see valid dimensions.`, { reason: 'not_found', datasetCode, dimension });
386
619
  }
620
+ // A fresh array either way: the cached list is frozen and shared across calls.
387
621
  const effectiveGeoLevel = dimension === 'geo' ? (geoLevel ?? 'country') : undefined;
388
622
  const filteredValues = effectiveGeoLevel
389
623
  ? values.filter(({ code }) => metadata.geoLevelsByCode[code] === effectiveGeoLevel)
390
- : values;
624
+ : [...values];
391
625
  if (effectiveGeoLevel && filteredValues.length === 0) {
392
626
  throw notFound(`Dataset "${datasetCode}" has no "geo" values at the "${effectiveGeoLevel}" level. Choose a different geo_level or omit geo_level only when country values are wanted.`, {
393
627
  reason: 'no_results',
@@ -425,8 +659,8 @@ export class EurostatDataService {
425
659
  untilP,
426
660
  lastN,
427
661
  });
428
- // Validate mutually exclusive params
429
- if (appliedFilters.geo && geoLevel) {
662
+ // Validate mutually exclusive params. Eurostat reads filter keys in any case, so `GEO` is geo.
663
+ if (geoLevel && Object.keys(appliedFilters).some((key) => key.toLowerCase() === 'geo')) {
430
664
  throw validationError(`"geo" filter and "geo_level" cannot be used together. Use one or the other: "geo" for specific country/region codes, "geo_level" for filtering by NUTS hierarchy level.`, { reason: 'conflicting_params' });
431
665
  }
432
666
  if (lastN && (sinceP || untilP)) {
@@ -456,9 +690,18 @@ export class EurostatDataService {
456
690
  // entry, so the whole slice arrives as `"value": {}` while still being data the decoder
457
691
  // yields. Deriving both the guard and the reported total from one count is what keeps a
458
692
  // rejected query and a returned one from disagreeing about what an observation is.
693
+ //
694
+ // The empty reply still says which filter values matched nothing and which periods it
695
+ // selected, so that diagnosis rides the error for the tool to explain.
459
696
  if (obsCount === 0) {
460
- throw notFound(`Query returned no observations for dataset "${datasetCode}". The dimension filter combination may not exist in the data, or the period range may fall outside the dataset's coverage. Verify dimension values with eurostat_get_dimension_values first.`, { reason: 'no_results', datasetCode, filters: appliedFilters });
697
+ throw notFound(`Query returned no observations for dataset "${datasetCode}". The dimension filter combination may not exist in the data, or the period range may fall outside the dataset's coverage. Verify dimension values with eurostat_get_dimension_values first.`, {
698
+ reason: 'no_results',
699
+ datasetCode,
700
+ filters: appliedFilters,
701
+ ...diagnoseEmptyMatch(data, appliedFilters, (type) => this.extractAnnotation(data, type, 'title')),
702
+ });
461
703
  }
704
+ const unmatchedValues = findUnmatchedValues(appliedFilters, data);
462
705
  const observations = this.decodeObservations(data, Math.min(previewLimit, OBS_CAP));
463
706
  // Compute timeRange from the actual time dimension values in the response.
464
707
  // Fall back to dataset-wide annotations only when no time dimension is present, and omit
@@ -476,13 +719,14 @@ export class EurostatDataService {
476
719
  timeRange,
477
720
  missingObsCount,
478
721
  appliedFilters,
479
- rows: () => this.iterateRows(data, dimensionsUsed),
722
+ ...(unmatchedValues && { unmatchedValues }),
723
+ rows: () => this.iterateRows(data, dimensionsUsed, isComextDataset(datasetCode)),
480
724
  };
481
725
  }
482
726
  /** {@link iterateObservations}, flattened to dataframe rows one at a time. */
483
- *iterateRows(data, dimensionsUsed) {
727
+ *iterateRows(data, dimensionsUsed, valueText) {
484
728
  for (const obs of this.iterateObservations(data)) {
485
- yield toObservationRow(obs, dimensionsUsed);
729
+ yield toObservationRow(obs, dimensionsUsed, valueText);
486
730
  }
487
731
  }
488
732
  }
@@ -495,8 +739,11 @@ export class EurostatDataService {
495
739
  * `conf_status` / `conf_status_label`. Anything the observation does not carry —
496
740
  * a dimension, either flag — yields `null` in its columns rather than an absent
497
741
  * key, so every row has the same column set the table is declared with.
742
+ *
743
+ * `valueText` adds the `obs_value_text` column, which a `DS-*` table declares (see
744
+ * {@link observationRowSchema}).
498
745
  */
499
- export function toObservationRow(obs, dimensionsUsed) {
746
+ export function toObservationRow(obs, dimensionsUsed, valueText = false) {
500
747
  const row = {};
501
748
  for (const dim of dimensionsUsed) {
502
749
  const cell = obs.dimensions[dim];
@@ -504,6 +751,8 @@ export function toObservationRow(obs, dimensionsUsed) {
504
751
  row[`${dim}_label`] = cell?.label ?? null;
505
752
  }
506
753
  row[OBS_VALUE_COLUMN] = obs.value;
754
+ if (valueText)
755
+ row[OBS_VALUE_TEXT_COLUMN] = obs.valueText ?? null;
507
756
  row[OBS_FLAG_COLUMN] = obs.status?.code ?? null;
508
757
  row[OBS_FLAG_LABEL_COLUMN] = obs.status?.label ?? null;
509
758
  row[CONF_STATUS_COLUMN] = obs.confStatus?.code ?? null;
@@ -522,14 +771,20 @@ export function toObservationRow(obs, dimensionsUsed) {
522
771
  * Names and order mirror {@link toObservationRow}. Nothing in the type system
523
772
  * ties a row's keys to a schema's names, so the service tests assert the two
524
773
  * against each other instead.
774
+ *
775
+ * `valueText` declares `obs_value_text` after `obs_value`. The query tool sets it for a
776
+ * `DS-*` dataset, whose PRODCOM indicators publish units and flags as text.
525
777
  */
526
- export function observationRowSchema(dimensionsUsed) {
778
+ export function observationRowSchema(dimensionsUsed, valueText = false) {
527
779
  return [
528
780
  ...dimensionsUsed.flatMap((dim) => [
529
781
  { name: dim, type: 'VARCHAR', nullable: true },
530
782
  { name: `${dim}_label`, type: 'VARCHAR', nullable: true },
531
783
  ]),
532
784
  { name: OBS_VALUE_COLUMN, type: 'DOUBLE', nullable: true },
785
+ ...(valueText
786
+ ? [{ name: OBS_VALUE_TEXT_COLUMN, type: 'VARCHAR', nullable: true }]
787
+ : []),
533
788
  { name: OBS_FLAG_COLUMN, type: 'VARCHAR', nullable: true },
534
789
  { name: OBS_FLAG_LABEL_COLUMN, type: 'VARCHAR', nullable: true },
535
790
  { name: CONF_STATUS_COLUMN, type: 'VARCHAR', nullable: true },
@@ -1 +1 @@
1
- {"version":3,"file":"eurostat-data-service.js","sourceRoot":"","sources":["../../../src/services/eurostat-data/eurostat-data-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eurostat-data-service.js","sourceRoot":"","sources":["../../../src/services/eurostat-data/eurostat-data-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GAExB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAML,OAAO,GAKR,MAAM,YAAY,CAAC;AAEpB,uGAAuG;AACvG,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,gFAAgF;AAChF,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,EAAE,iBAAiB,EAAuB;IACvE,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtD,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IACxF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AASD,wFAAwF;AACxF,SAAS,UAAU,CAAI,KAAQ;IAC7B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAA8B,EAC9B,IAAsB;IAEtB,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC;QACrF,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,kBAAkB,CACzB,IAAsB,EACtB,IAA8B,EAC9B,UAAgD;IAEhD,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,SAAS,GAAuB,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;IACtF,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAElC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC;QACvD,SAAS,CAAC,eAAe,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvF,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5E,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;aACnF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,MAA8B;IAE9B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAEtE,OAAO;QACL,GAAG,CAAC,QAAQ,IAAI;YACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE;SACpF,CAAC;QACF,GAAG,CAAC,QAAQ,IAAI;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,SAAS,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,QAAQ;aAC7D;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,SAAS,SAAS,CAAI,WAAmB,EAAE,KAAc;IACvD,IAAI,CAAC;QACH,OAAO,KAAK,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,kBAAkB,CACtB,0DAA0D,WAAW,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACnI,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAC5D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,OAAO,mBAAmB;IAC9B;;;;;;;OAOG;IACc,aAAa,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEvE,0EAA0E;IAC1E,yEAAyE;IACzE,2EAA2E;IAC3E,YAAY,OAAkB,EAAE,QAAwB,IAAG,CAAC;IAEpD,QAAQ,CAAC,WAAmB,EAAE,MAAyC;QAC7E,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAG,WAAW,CAAC,WAAW,CAAC,wBAAwB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CACrF,CAAC;QACF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,IAAI,KAAK;oBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;OAOG;IACK,YAAY,CAClB,QAA4D,EAC5D,WAAmB;QAEnB,MAAM,OAAO,GAAG,QAAQ,KAAK,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAG,WAAW,CAAC,WAAW,CAAC,aAAa,QAAQ,UAAU,kBAAkB,CAAC,WAAW,CAAC,GAAG,OAAO,EAAE,CACtG,CAAC;QACF,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YAClD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;OAGG;IACK,YAAY,CAClB,GAAQ,EACR,WAAmB,EACnB,GAAY,EACZ,MAA+B,EAC/B,SAAS,GAAG,eAAe,EAAE,CAAC,gBAAgB;QAE9C,OAAO,SAAS,CACd,KAAK,IAAI,EAAE;YACT,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE;oBACtE,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;oBACzB,gBAAgB,EAAE,CAAC,GAAG,CAAC;iBACxB,CAAC,CAAC;gBACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1E,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACnB,MAAM,QAAQ,CACZ,YAAY,WAAW,wHAAwH,EAC/I,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CACrC,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,EACD;YACE,SAAS,EAAE,mBAAmB;YAC9B,OAAO,EAAE,GAAG;YACZ,WAAW,EAAE,IAAI;YACjB,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;SAC1B,CACF,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACK,eAAe,CAAC,WAAmB,EAAE,GAAY;QACvD,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE;YAClC,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;YACvE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACjC,OAAO,GAAG,CAAC,QAAQ,CAAC;YACtB,CAAC;YAED,MAAM,KAAK,GAAuB;gBAChC,SAAS,EAAE,GAAG,GAAG,qBAAqB;gBACtC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;aACnE,CAAC;YACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnC,KAAK,CAAC,QAAQ,CAAC,IAAI,CACjB,CAAC,QAAQ,EAAE,EAAE;gBACX,KAAK,CAAC,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,KAAK,CAAC,KAAK,GAAG,wBAAwB,EAAE,CAAC;oBAC3C,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK;wBAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC,EACD,GAAG,EAAE;gBACH,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK;oBAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5E,CAAC,CACF,CAAC;YACF,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,aAAa;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAAE,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;QACzE,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAClD,IAAI,KAAK,IAAI,wBAAwB;gBAAE,MAAM;YAC7C,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,KAAK,IAAI,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,gBAAgB,CAAC,WAAmB,EAAE,GAAY;QAC9D,MAAM,EAAE,iBAAiB,EAAE,GAAG,eAAe,EAAE,CAAC;QAChD,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,EAC1C,WAAW,EACX,GAAG,EACH,SAAS,EACT,iBAAiB,CAClB;YACD,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,WAAW,CAAC,EACnD,WAAW,EACX,GAAG,EACH,SAAS,CACV;SACF,CAAC,CAAC;QACH;;;;;WAKG;QACH,OAAO,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,CACjC,eAAe,CAAC,wBAAwB,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CACnF,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,GAAQ,EAAE,GAAY;QACtC,MAAM,EAAE,gBAAgB,EAAE,GAAG,eAAe,EAAE,CAAC;QAC/C,OAAO,SAAS,CACd,KAAK,IAAI,EAAE;YACT,IAAI,QAAsD,CAAC;YAC3D,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE;oBACvE,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,8EAA8E;oBAC9E,0EAA0E;oBAC1E,yEAAyE;oBACzE,gCAAgC;oBAChC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;iBAClC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,+EAA+E;gBAC/E,oFAAoF;gBACpF,qFAAqF;gBACrF,mFAAmF;gBACnF,iFAAiF;gBACjF,wEAAwE;gBACxE,2EAA2E;gBAC3E,MAAM,OAAO,GACX,GAAG,YAAY,QAAQ;oBACrB,CAAC,CAAE,GAAG,CAAC,IAA4D;oBACnE,CAAC,CAAC,SAAS,CAAC;gBAChB,IAAI,OAAO,EAAE,WAAW,KAAK,gBAAgB,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAClF,IAAI,MAAoC,CAAC;oBACzC,IAAI,CAAC;wBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAqB,CAAC;oBACxD,CAAC;oBAAC,MAAM,CAAC;wBACP,wEAAwE;wBACxE,uEAAuE;oBACzE,CAAC;oBACD,IAAI,MAAM;wBAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,kBAAkB,CACtB,yGAAyG,CAC1G,CAAC;YACJ,CAAC;YACD,IAAI,MAAwB,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqB,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,kBAAkB,CACtB,4EAA4E,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACjG,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC,EACD,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CACpF,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,IAAsB,EAAE,GAAW;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEzE;;;;;;;;WAQG;QACH,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YACjC,MAAM,kBAAkB,CACtB,+KAA+K,EAC/K,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CACpD,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YAC/B,MAAM,kBAAkB,CACtB,qDAAqD,UAAU,CAAC,KAAK,4FAA4F,EACjK,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CACpD,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,UAAU,CAAC;YACvB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;gBACzC,MAAM,QAAQ,CACZ,4KAA4K,EAC5K,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,EAAE,CAC7C,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,QAAQ,CACZ,sCAAsC,GAAG,CAAC,KAAK,oFAAoF,EACnI,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,EAAE,CAC5C,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;oBACnB,MAAM,eAAe,CACnB,2CAA2C,GAAG,CAAC,KAAK,2EAA2E,EAC/H,EAAE,MAAM,EAAE,mBAAmB,EAAE,aAAa,EAAE,GAAG,EAAE,CACpD,CAAC;gBACJ,CAAC;gBACD,mFAAmF;gBACnF,6EAA6E;gBAC7E,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzD,MAAM,eAAe,CACnB,uDAAuD,GAAG,CAAC,KAAK,GAAG,EACnE;wBACE,MAAM,EAAE,gBAAgB;wBACxB,aAAa,EAAE,GAAG;qBACnB,CACF,CAAC;gBACJ,CAAC;gBACD,MAAM,eAAe,CAAC,gCAAgC,GAAG,CAAC,KAAK,GAAG,EAAE;oBAClE,MAAM,EAAE,oBAAoB;oBAC5B,aAAa,EAAE,GAAG;iBACnB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,kBAAkB,CAAC,sBAAsB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE;gBAC1E,aAAa,EAAE,GAAG;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,oFAAoF;IAC5E,cAAc,CAAC,KAAe;QACpC,MAAM,OAAO,GAAa,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAa,CAAC;QACtE,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,2EAA2E;YAC3E,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,SAAS,CAAC,IAAsB;QAKtC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE1C,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,OAAgB,EAAQ,EAAE;YACpD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,UAAU;gBAAE,OAAO;YACnE,QAAQ,EAAE,CAAC;YACX,IAAI,OAAO;gBAAE,eAAe,EAAE,CAAC;YAC/B,IAAI,QAAQ,GAAG,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,kFAAkF;QAClF,KAAK,MAAM,GAAG,IAAI,KAAK;YAAE,KAAK,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC;QACpE,8EAA8E;QAC9E,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;gBAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAa,IAAI,KAAK,CAAC,QAAQ,CAAa,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,QAAQ;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACzD,CAAC;QACD,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC;YACxC,IAAI,QAAQ,CAAC,GAAG,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;IACpE,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACK,CAAC,mBAAmB,CAAC,IAAsB;QACjD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAEtD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;QAEzD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3C,+DAA+D;QAC/D,MAAM,SAAS,GAAkD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAChF,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;YAC5C,IAAI,CAAC,GAAG,EAAE,KAAK;gBAAE,OAAO,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;iBAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChB,IAAI;gBACJ,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI;aACjC,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEpD,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC;gBAAE,SAAS;YAExD,MAAM,UAAU,GAAoD,EAAE,CAAC;YACvE,IAAI,SAAS,GAAG,SAAS,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;gBAC3C,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;gBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,OAAO,EAAE,CAAC;oBACZ,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5E,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;YACvC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAElC,MAAM,GAAG,GAAgB;gBACvB,UAAU;gBACV,KAAK,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;aACtD,CAAC;YACF,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBACnE,IAAI,IAAI;oBAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC5B,IAAI,UAAU;oBAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;YAC9C,CAAC;YACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;gBACvD,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;oBAClC,GAAG,CAAC,UAAU,GAAG;wBACf,IAAI,EAAE,UAAU;wBAChB,KAAK,EAAE,kBAAkB,CAAC,UAAU,CAAC,IAAI,UAAU;qBACpD,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI;oBAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;YACjC,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,kBAAkB,CAAC,IAAsB,EAAE,KAAa;QAC9D,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,YAAY,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;QAC1C,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,iBAAiB,CACvB,IAAsB,EACtB,IAAY,EACZ,KAAgC;QAEhC,OAAO,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,GAAY;QACpD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC9D,OAAO,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACzD,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EAAE,GAAY;QACvD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CACjC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC,EAC/C,WAAW,EACX,GAAG,EACH,GAAG,CAAC,MAAM,CACX,CAAC;QACF,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,kBAAkB,CACtB,gDAAgD,WAAW,qGAAqG,EAChK,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAC1C,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,kBAAkB,CACtB,WAAmB,EACnB,SAAiB,EACjB,QAA8B,EAC9B,GAAY;QAEZ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEhF,IAAI,QAAQ,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACpC,MAAM,eAAe,CACnB,uFAAuF,SAAS,+CAA+C,EAC/I,EAAE,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,QAAQ,EAAE,CACtD,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,QAAQ,CACZ,cAAc,SAAS,2BAA2B,WAAW,2DAA2D,EACxH,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAChD,CAAC;QACJ,CAAC;QAED,+EAA+E;QAC/E,MAAM,iBAAiB,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,MAAM,cAAc,GAAG,iBAAiB;YACtC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC;YACnF,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAChB,IAAI,iBAAiB,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,MAAM,QAAQ,CACZ,YAAY,WAAW,iCAAiC,iBAAiB,8FAA8F,EACvK;gBACE,MAAM,EAAE,YAAY;gBACpB,WAAW;gBACX,SAAS;gBACT,QAAQ,EAAE,iBAAiB;aAC5B,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,aAAa,EAAE,SAAS;YACxB,cAAc,EAAE,MAAM,CAAC,KAAK;YAC5B,GAAG,CAAC,iBAAiB,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;YACzD,MAAM,EAAE,cAAc;YACtB,UAAU,EAAE,cAAc,CAAC,MAAM;SAClC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,YAAY,CAChB,WAAmB,EACnB,OAAiC,EACjC,QAA8B,EAC9B,MAA0B,EAC1B,MAA0B,EAC1B,KAAyB,EACzB,IAAY,EACZ,YAAoB,EACpB,GAAY;QAEZ,4FAA4F;QAC5F,0FAA0F;QAC1F,yDAAyD;QACzD,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CACvC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAClE,CAAC;QAEF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC/B,WAAW;YACX,OAAO,EAAE,cAAc;YACvB,QAAQ;YACR,MAAM;YACN,MAAM;YACN,KAAK;SACN,CAAC,CAAC;QAEH,+FAA+F;QAC/F,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;YACvF,MAAM,eAAe,CACnB,yKAAyK,EACzK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CACjC,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,eAAe,CACnB,mGAAmG,EACnG,EAAE,MAAM,EAAE,oBAAoB,EAAE,CACjC,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAsC,EAAE,IAAI,EAAE,CAAC;QAE3D,0BAA0B;QAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACvB,CAAC;QACD,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,IAAI,MAAM,IAAI,CAAC,KAAK;YAAE,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC;QACtD,IAAI,MAAM,IAAI,CAAC,KAAK;YAAE,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC;QACtD,IAAI,KAAK;YAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE5C,wFAAwF;QACxF,uCAAuC;QACvC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtE,yFAAyF;QACzF,yFAAyF;QACzF,wFAAwF;QACxF,wFAAwF;QACxF,wFAAwF;QACxF,mFAAmF;QACnF,EAAE;QACF,sFAAsF;QACtF,uEAAuE;QACvE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,QAAQ,CACZ,+CAA+C,WAAW,+LAA+L,EACzP;gBACE,MAAM,EAAE,YAAY;gBACpB,WAAW;gBACX,OAAO,EAAE,cAAc;gBACvB,GAAG,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CACnD,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAC5C;aACF,CACF,CAAC;QACJ,CAAC;QACD,MAAM,eAAe,GAAG,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAElE,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAEpF,2EAA2E;QAC3E,yFAAyF;QACzF,0EAA0E;QAC1E,MAAM,KAAK,GACT,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,2BAA2B,EAAE,OAAO,CAAC,CAAC;QACrF,MAAM,GAAG,GACP,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,2BAA2B,EAAE,OAAO,CAAC,CAAC;QACzF,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAEnE,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAErC,OAAO;YACL,WAAW;YACX,YAAY,EAAE,IAAI,CAAC,KAAK,IAAI,WAAW;YACvC,cAAc;YACd,YAAY;YACZ,QAAQ;YACR,SAAS;YACT,eAAe;YACf,cAAc;YACd,GAAG,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,CAAC;YAC3C,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;SACjF,CAAC;IACJ,CAAC;IAED,8EAA8E;IACtE,CAAC,WAAW,CAClB,IAAsB,EACtB,cAAwB,EACxB,SAAkB;QAElB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAgB,EAChB,cAAwB,EACxB,SAAS,GAAG,KAAK;IAEjB,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;QAC9B,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;IAC5C,CAAC;IACD,GAAG,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;IAClC,IAAI,SAAS;QAAE,GAAG,CAAC,qBAAqB,CAAC,GAAG,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC;IAClE,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC;IAChD,GAAG,CAAC,qBAAqB,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC;IACvD,GAAG,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC;IACvD,GAAG,CAAC,wBAAwB,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI,CAAC;IAC9D,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,oBAAoB,CAAC,cAAwB,EAAE,SAAS,GAAG,KAAK;IAC9E,OAAO;QACL,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,EAAkB,EAAE,CAAC;YACjD,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9C,EAAE,IAAI,EAAE,GAAG,GAAG,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC1D,CAAC;QACF,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1D,GAAG,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAyB,CAAC;YAC3F,CAAC,CAAC,EAAE,CAAC;QACP,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1D,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC7D,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;KACpE,CAAC;AACJ,CAAC;AAED,gCAAgC;AAEhC,IAAI,QAAyC,CAAC;AAE9C,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,OAAuB;IAChF,QAAQ,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}