@cyanheads/epa-mcp-server 0.4.0 → 0.4.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.
- package/AGENTS.md +5 -5
- package/CLAUDE.md +5 -5
- package/Dockerfile +3 -3
- package/README.md +24 -19
- package/changelog/0.4.x/0.4.1.md +34 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/resources/definitions/facility.resource.d.ts +8 -1
- package/dist/mcp-server/resources/definitions/facility.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/facility.resource.js +13 -7
- package/dist/mcp-server/resources/definitions/facility.resource.js.map +1 -1
- package/dist/mcp-server/resources/definitions/index.d.ts +7 -1
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts +30 -2
- package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-facility.tool.js +208 -43
- package/dist/mcp-server/tools/definitions/get-facility.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts +4 -2
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js +12 -5
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +116 -16
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-facilities.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-facilities.tool.js +34 -16
- package/dist/mcp-server/tools/definitions/search-facilities.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts +3 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.js +11 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts +7 -0
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js +21 -9
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts +20 -3
- package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-violations.tool.js +84 -15
- package/dist/mcp-server/tools/definitions/search-violations.tool.js.map +1 -1
- package/dist/services/airnow/airnow-service.d.ts.map +1 -1
- package/dist/services/airnow/airnow-service.js +9 -3
- package/dist/services/airnow/airnow-service.js.map +1 -1
- package/dist/services/call-budget.d.ts +22 -0
- package/dist/services/call-budget.d.ts.map +1 -0
- package/dist/services/call-budget.js +28 -0
- package/dist/services/call-budget.js.map +1 -0
- package/dist/services/dmap/dmap-service.d.ts +43 -13
- package/dist/services/dmap/dmap-service.d.ts.map +1 -1
- package/dist/services/dmap/dmap-service.js +270 -68
- package/dist/services/dmap/dmap-service.js.map +1 -1
- package/dist/services/echo/echo-service.d.ts +38 -11
- package/dist/services/echo/echo-service.d.ts.map +1 -1
- package/dist/services/echo/echo-service.js +417 -223
- package/dist/services/echo/echo-service.js.map +1 -1
- package/dist/services/echo/types.d.ts +167 -80
- package/dist/services/echo/types.d.ts.map +1 -1
- package/dist/services/ejscreen/ejscreen-service.d.ts.map +1 -1
- package/dist/services/ejscreen/ejscreen-service.js +9 -3
- package/dist/services/ejscreen/ejscreen-service.js.map +1 -1
- package/package.json +6 -6
- package/server.json +3 -3
|
@@ -3,9 +3,124 @@
|
|
|
3
3
|
* Wraps data.epa.gov/dmapservice REST endpoints.
|
|
4
4
|
* @module services/dmap/dmap-service
|
|
5
5
|
*/
|
|
6
|
-
import { serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
|
|
6
|
+
import { JsonRpcErrorCode, serviceUnavailable, validationError, } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { httpErrorFromResponse, withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
8
8
|
import { getServerConfig } from '../../config/server-config.js';
|
|
9
|
+
import { callBudget } from '../call-budget.js';
|
|
10
|
+
/**
|
|
11
|
+
* Characters DMAP reads literally in a `contains` value. Live (2026-10-16), its path parser
|
|
12
|
+
* answers any other punctuation and every non-ASCII letter with HTTP 500 "The query could not be
|
|
13
|
+
* parsed" (apostrophes, brackets, parentheses, periods, slashes, Greek letters), `%` draws an nginx
|
|
14
|
+
* HTTP 403, a comma ends the value (`contains/1,3-Butadiene` matches every name containing "1"),
|
|
15
|
+
* and `_` and `?` match any one character.
|
|
16
|
+
*/
|
|
17
|
+
const CONTAINS_LITERAL = /^[A-Za-z0-9 -]$/;
|
|
18
|
+
/** Characters DMAP reads literally in an `equals` or `in` value, where `_` and `?` are not wildcards. */
|
|
19
|
+
const EXACT_LITERAL = /^[A-Za-z0-9 _?@-]$/;
|
|
20
|
+
/**
|
|
21
|
+
* `value` without slashes at either end, unless it is nothing but slashes. DMAP decodes its path
|
|
22
|
+
* before splitting it and drops empty segments, so an end slash never reached a filter: live
|
|
23
|
+
* (2026-10-16), `equals/98108THBNG7500E%2F`, `equals/%2F98108THBNG7500E`, and
|
|
24
|
+
* `contains/Seattle%2F` answer exactly as the bare values do. A slash inside a value shifts the
|
|
25
|
+
* path apart and is still rejected.
|
|
26
|
+
*/
|
|
27
|
+
function trimSlashes(value) {
|
|
28
|
+
let start = 0;
|
|
29
|
+
let end = value.length;
|
|
30
|
+
while (start < end && value[start] === '/')
|
|
31
|
+
start++;
|
|
32
|
+
while (end > start && value[end - 1] === '/')
|
|
33
|
+
end--;
|
|
34
|
+
return start === end ? value : value.slice(start, end);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A `contains` filter DMAP can carry. Each character it cannot read literally becomes `_`, its
|
|
38
|
+
* one-character wildcard, and `literal` keeps the text as given so fetchMatchingRows keeps only
|
|
39
|
+
* the rows that contain it; a `_` the caller wrote is a wildcard too, so it gets the same pass.
|
|
40
|
+
* Across all 860 TRI chemical names and every TRI county name, the wildcard form of a name
|
|
41
|
+
* matches no other name; Superfund city names carry spelling variants (COEUR D ALENE beside
|
|
42
|
+
* COEUR D'ALENE) that the exact pass drops.
|
|
43
|
+
*/
|
|
44
|
+
function containsFilter(column, text) {
|
|
45
|
+
const value = trimSlashes(text);
|
|
46
|
+
const characters = Array.from(value);
|
|
47
|
+
if (characters.every((c) => CONTAINS_LITERAL.test(c))) {
|
|
48
|
+
return { column, operator: 'contains', value };
|
|
49
|
+
}
|
|
50
|
+
const pattern = characters.map((c) => (CONTAINS_LITERAL.test(c) ? c : '_')).join('');
|
|
51
|
+
if (!/[A-Za-z0-9]/.test(pattern)) {
|
|
52
|
+
throw validationError(`"${value}" has no letter or digit to search on. EPA's DMAP service matches text by its letters, digits, spaces, and hyphens.`, { value });
|
|
53
|
+
}
|
|
54
|
+
return { column, operator: 'contains', value: pattern, literal: value };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* An `equals` or `in` filter as DMAP reads it: end slashes dropped (trimSlashes), and a value
|
|
58
|
+
* carrying a character DMAP cannot match rejected before any request.
|
|
59
|
+
*/
|
|
60
|
+
function exactFilter(filter) {
|
|
61
|
+
if (filter.operator === 'contains')
|
|
62
|
+
return filter;
|
|
63
|
+
const exact = { ...filter, value: trimSlashes(filter.value) };
|
|
64
|
+
const values = exact.operator === 'in' ? exact.value.split(',') : [exact.value];
|
|
65
|
+
for (const value of values) {
|
|
66
|
+
for (const character of value) {
|
|
67
|
+
if (!EXACT_LITERAL.test(character)) {
|
|
68
|
+
const recovery = character === ',' ? 'Pass one value per call.' : 'Remove it and retry.';
|
|
69
|
+
throw validationError(`"${value}" contains "${character}", a character EPA's DMAP service cannot match in an exact-value filter. ${recovery}`, { value, character });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return exact;
|
|
74
|
+
}
|
|
75
|
+
/** Rows read per page while a wildcard filter's exact matches are collected. */
|
|
76
|
+
const EXACT_TEXT_PAGE_ROWS = 100;
|
|
77
|
+
/**
|
|
78
|
+
* Pages read for a wildcard filter before returning what matched. Reaching it takes hundreds of
|
|
79
|
+
* near-variant rows ahead of the exact ones in DMAP's order.
|
|
80
|
+
*/
|
|
81
|
+
const EXACT_TEXT_MAX_PAGES = 3;
|
|
82
|
+
/** DMAP's front end refuses a longer request line with HTTP 400 "Request Line is too large". */
|
|
83
|
+
const DMAP_REQUEST_LINE_LIMIT = 4094;
|
|
84
|
+
/**
|
|
85
|
+
* Bytes of the client's request line DMAP leaves out of that count: live (2026-10-16), a
|
|
86
|
+
* 4,105-byte line is answered and a 4,106-byte one is refused as "(4095 > 4094)".
|
|
87
|
+
*/
|
|
88
|
+
const DMAP_UNCOUNTED_BYTES = 11;
|
|
89
|
+
/**
|
|
90
|
+
* Newest reporting year first, then submission number, so a row range pages deterministically.
|
|
91
|
+
* Keys must be table-qualified: DMAP resolves a bare column against the first table of a join
|
|
92
|
+
* (`reporting_year` there is HTTP 500). Without the doc_ctrl_num tiebreak, AK rows `1:50` and
|
|
93
|
+
* `51:100` shared 36 records.
|
|
94
|
+
*/
|
|
95
|
+
const NEWEST_FIRST = [
|
|
96
|
+
{ column: 'tri.tri_reporting_form.reporting_year', direction: 'desc' },
|
|
97
|
+
{ column: 'tri.tri_reporting_form.doc_ctrl_num', direction: 'asc' },
|
|
98
|
+
];
|
|
99
|
+
/**
|
|
100
|
+
* Request-line budget for a batched `in` list, under DMAP_REQUEST_LINE_LIMIT. DMAP counts 11 bytes
|
|
101
|
+
* fewer than the client sends, and the budget leaves a further ~300 bytes of margin.
|
|
102
|
+
*/
|
|
103
|
+
const IN_LIST_REQUEST_LINE_BUDGET = 3800;
|
|
104
|
+
/**
|
|
105
|
+
* Breakdown chunks in flight at once. An uncached tri.tri_release_qty request takes ~18 s however
|
|
106
|
+
* many submissions it names, so chunks run side by side: getTriReleases' 500 forms make at most
|
|
107
|
+
* three chunks, one wave.
|
|
108
|
+
*/
|
|
109
|
+
const BREAKDOWN_CONCURRENCY = 3;
|
|
110
|
+
/**
|
|
111
|
+
* One budget for every DMAP request a service call chains — a TRI search and its breakdown chunks,
|
|
112
|
+
* a ZIP's system read and its violation checks, every retry and backoff — so the call settles
|
|
113
|
+
* under the 60 s request timeout of MCP SDK clients. An expiry names how to narrow the call.
|
|
114
|
+
*/
|
|
115
|
+
const CALL_DEADLINE_MS = 50_000;
|
|
116
|
+
const dmapBudget = (task, narrow) => callBudget('DMAP', task, CALL_DEADLINE_MS, narrow);
|
|
117
|
+
/** Max tri.tri_release_qty rows read per submission (live submissions carry about 10). */
|
|
118
|
+
const RELEASE_QTY_ROWS_PER_SUBMISSION = 30;
|
|
119
|
+
/** The HTTP/1.1 request line a GET of `url` sends: method, path and query, protocol. */
|
|
120
|
+
function requestLineBytes(url) {
|
|
121
|
+
const { pathname, search } = new URL(url);
|
|
122
|
+
return Buffer.byteLength(`GET ${pathname}${search} HTTP/1.1`);
|
|
123
|
+
}
|
|
9
124
|
/** Parse a numeric field, returning undefined if absent/NaN. */
|
|
10
125
|
function parseNum(val) {
|
|
11
126
|
if (val === undefined || val === null || val === '')
|
|
@@ -46,8 +161,8 @@ function normalizeTriRelease(raw) {
|
|
|
46
161
|
...(inGrams && { reportedUnit: 'grams' }),
|
|
47
162
|
};
|
|
48
163
|
// one_time_release_qty is the only release qty in tri_reporting_form; the per-medium routine
|
|
49
|
-
// breakdown lives in tri.tri_release_qty and is merged in by the callers
|
|
50
|
-
// fetchReleaseBreakdown
|
|
164
|
+
// breakdown lives in tri.tri_release_qty and is merged in by the callers through
|
|
165
|
+
// fetchReleaseBreakdown (always for getTriReleases, opt-in for searchTriReleases).
|
|
51
166
|
const oneTime = parseNum(raw.one_time_release_qty);
|
|
52
167
|
if (oneTime !== undefined)
|
|
53
168
|
result.totalReleasesInLbs = inGrams ? gramsToPounds(oneTime) : oneTime;
|
|
@@ -168,8 +283,8 @@ export class DmapService {
|
|
|
168
283
|
this.baseUrl = getServerConfig().dmapBaseUrl;
|
|
169
284
|
}
|
|
170
285
|
/**
|
|
171
|
-
* Build a DMAP REST URL for a multi-filter query.
|
|
172
|
-
* Format: {base}/{schema}.{table}/{col1}/{op1}/{val1}/and/{col2}/{op2}/{val2}/{first}:{last}
|
|
286
|
+
* Build a DMAP REST JSON URL for a multi-filter query.
|
|
287
|
+
* Format: {base}/{schema}.{table}/{col1}/{op1}/{val1}/and/{col2}/{op2}/{val2}/{first}:{last}/json
|
|
173
288
|
* Rows are 1-based and inclusive: `1:50` is 50 rows. DMAP reads a `first` of 0 as row 1, so
|
|
174
289
|
* `0:49` would return only 49.
|
|
175
290
|
*
|
|
@@ -177,25 +292,49 @@ export class DmapService {
|
|
|
177
292
|
* `/join/{schema}.{table}/{leftColumn}/equals/{rightColumn}/and/{filter}…`. Filters before the
|
|
178
293
|
* join bind to the first table only (DMAP rejects a column the first table lacks); filters
|
|
179
294
|
* after the join comparison bind to the joined table. The range then counts joined rows.
|
|
295
|
+
*
|
|
296
|
+
* With `sort`, `/sort/{column}:{asc|desc},…` follows the filters and join, before the range.
|
|
297
|
+
*
|
|
298
|
+
* An `equals` or `in` value goes through exactFilter, so one carrying a character DMAP cannot
|
|
299
|
+
* match throws a ValidationError naming it; `contains` values arrive already rewritten by
|
|
300
|
+
* containsFilter.
|
|
180
301
|
*/
|
|
181
|
-
buildTableUrl(schema, table, filters, pagination,
|
|
302
|
+
buildTableUrl(schema, table, filters, pagination, options = {}) {
|
|
303
|
+
const { join, sort } = options;
|
|
182
304
|
const toPath = (list) => list
|
|
305
|
+
.map(exactFilter)
|
|
183
306
|
.map((f) => `${encodeURIComponent(f.column)}/${f.operator}/${encodeURIComponent(f.value)}`)
|
|
184
307
|
.join('/and/');
|
|
185
308
|
const joinPath = join
|
|
186
309
|
? `/join/${join.table}/${join.on.left}/equals/${join.on.right}${join.filters.length > 0 ? `/and/${toPath(join.filters)}` : ''}`
|
|
187
310
|
: '';
|
|
311
|
+
const sortPath = sort ? `/sort/${sort.map((k) => `${k.column}:${k.direction}`).join(',')}` : '';
|
|
188
312
|
const pagePath = `${pagination.first}:${pagination.last}`;
|
|
189
|
-
return `${this.baseUrl}/${schema}.${table}/${toPath(filters)}${joinPath}/${pagePath}`;
|
|
313
|
+
return `${this.baseUrl}/${schema}.${table}/${toPath(filters)}${joinPath}${sortPath}/${pagePath}/json`;
|
|
190
314
|
}
|
|
191
|
-
/**
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
315
|
+
/**
|
|
316
|
+
* Fetch a DMAP table result as JSON array. Every attempt and backoff ends within `budget`
|
|
317
|
+
* (shared by every request of one service call); expiry rejects with the budget's Timeout.
|
|
318
|
+
*
|
|
319
|
+
* A request line DMAP would count past DMAP_REQUEST_LINE_LIMIT is never sent: batched `in`
|
|
320
|
+
* lists are chunked to fit, so only caller-supplied filter text can push one over, and it fails
|
|
321
|
+
* as a ValidationError. DMAP answers HTTP 400 only from its front end, for a request it cannot
|
|
322
|
+
* parse, never for a filter value — those are HTTP 500. A 400 that still arrives is a request
|
|
323
|
+
* this server built wrong, not the caller's input, and maps to InternalError rather than the
|
|
324
|
+
* default InvalidParams.
|
|
325
|
+
*/
|
|
326
|
+
fetchTable(url, ctx, budget) {
|
|
327
|
+
const countedBytes = requestLineBytes(url) - DMAP_UNCOUNTED_BYTES;
|
|
328
|
+
if (countedBytes > DMAP_REQUEST_LINE_LIMIT) {
|
|
329
|
+
return Promise.reject(validationError(`The search filters are too long for EPA's DMAP service: the request would be ${countedBytes} bytes, over its ${DMAP_REQUEST_LINE_LIMIT}-byte limit. Shorten the text filters.`, { requestLineBytes: countedBytes }));
|
|
330
|
+
}
|
|
331
|
+
return withRetry(async ({ signal }) => {
|
|
332
|
+
const response = await fetch(url, { signal });
|
|
197
333
|
if (!response.ok) {
|
|
198
|
-
throw await httpErrorFromResponse(response, {
|
|
334
|
+
throw await httpErrorFromResponse(response, {
|
|
335
|
+
service: 'DMAP',
|
|
336
|
+
codeOverride: (status) => (status === 400 ? JsonRpcErrorCode.InternalError : undefined),
|
|
337
|
+
});
|
|
199
338
|
}
|
|
200
339
|
const text = await response.text();
|
|
201
340
|
if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
|
|
@@ -212,7 +351,41 @@ export class DmapService {
|
|
|
212
351
|
operation: 'DmapService.fetchTable',
|
|
213
352
|
baseDelayMs: 1000,
|
|
214
353
|
signal: ctx.signal,
|
|
215
|
-
|
|
354
|
+
deadlineMs: budget.remainingMs(),
|
|
355
|
+
}).catch(budget.rethrow);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Fetch up to `wanted` rows. Without a wildcarded filter (containsFilter) that is one request
|
|
359
|
+
* ranged `1:wanted`. With one, DMAP's rows can include near-variants that match only through the
|
|
360
|
+
* wildcard, so pages of at least EXACT_TEXT_PAGE_ROWS are read and narrowed to rows containing
|
|
361
|
+
* the text as given, until `wanted` are found, DMAP runs out, or EXACT_TEXT_MAX_PAGES are read.
|
|
362
|
+
* A walk the page limit ends short of `wanted` carries a notice that more matches may exist.
|
|
363
|
+
*/
|
|
364
|
+
async fetchMatchingRows(urlForRange, filters, wanted, ctx, budget) {
|
|
365
|
+
const wildcarded = filters.filter((f) => f.literal !== undefined);
|
|
366
|
+
if (wildcarded.length === 0) {
|
|
367
|
+
return this.fetchTable(urlForRange({ first: 1, last: wanted }), ctx, budget);
|
|
368
|
+
}
|
|
369
|
+
const pageRows = Math.max(wanted, EXACT_TEXT_PAGE_ROWS);
|
|
370
|
+
const matches = [];
|
|
371
|
+
let exhausted = false;
|
|
372
|
+
for (let page = 0; page < EXACT_TEXT_MAX_PAGES && matches.length < wanted; page++) {
|
|
373
|
+
const first = page * pageRows + 1;
|
|
374
|
+
const rows = await this.fetchTable(urlForRange({ first, last: first + pageRows - 1 }), ctx, budget);
|
|
375
|
+
matches.push(...rows.filter((row) => wildcarded.every((f) => String(row[f.column] ?? '')
|
|
376
|
+
.toLowerCase()
|
|
377
|
+
.includes(f.literal.toLowerCase()))));
|
|
378
|
+
if (rows.length < pageRows) {
|
|
379
|
+
exhausted = true;
|
|
380
|
+
break;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
if (!exhausted && matches.length < wanted) {
|
|
384
|
+
const texts = wildcarded.map((f) => `"${f.literal}"`).join(' and ');
|
|
385
|
+
const kept = `${matches.length} ${matches.length === 1 ? 'match' : 'matches'}`;
|
|
386
|
+
ctx.enrich.notice(`${texts} ${wildcarded.length === 1 ? 'was' : 'were'} searched with a one-character wildcard in place of punctuation, and the first ${(EXACT_TEXT_MAX_PAGES * pageRows).toLocaleString('en-US')} rows matching the wildcard held ${kept} spelled as given, so more may exist past them. Narrow the search with other filters or more of the text.`);
|
|
387
|
+
}
|
|
388
|
+
return matches.slice(0, wanted);
|
|
216
389
|
}
|
|
217
390
|
/** Get TRI releases for a specific facility. */
|
|
218
391
|
async getTriReleases(params, ctx) {
|
|
@@ -224,22 +397,18 @@ export class DmapService {
|
|
|
224
397
|
}
|
|
225
398
|
if (params.chemicalName) {
|
|
226
399
|
// actual field is cas_chem_name, not chemical_name_text
|
|
227
|
-
filters.push(
|
|
228
|
-
column: 'cas_chem_name',
|
|
229
|
-
operator: 'contains',
|
|
230
|
-
value: params.chemicalName,
|
|
231
|
-
});
|
|
400
|
+
filters.push(containsFilter('cas_chem_name', params.chemicalName));
|
|
232
401
|
}
|
|
233
|
-
const
|
|
402
|
+
const budget = dmapBudget('TRI release lookup', 'Narrow it with year or chemical_name, or call again later.');
|
|
234
403
|
ctx.log.debug('DMAP TRI releases query', { facilityId: params.facilityId, year: params.year });
|
|
235
|
-
const rows = await this.
|
|
236
|
-
return this.withReleaseBreakdown(rows, rows.map(normalizeTriRelease), ctx);
|
|
404
|
+
const rows = await this.fetchMatchingRows((range) => this.buildTableUrl('tri', 'tri_reporting_form', filters, range), filters, 500, ctx, budget);
|
|
405
|
+
return this.withReleaseBreakdown(rows, rows.map(normalizeTriRelease), ctx, budget);
|
|
237
406
|
}
|
|
238
407
|
/**
|
|
239
|
-
* Add each release's per-medium routine breakdown (tri.tri_release_qty, joined on doc_ctrl_num)
|
|
240
|
-
*
|
|
408
|
+
* Add each release's per-medium routine breakdown (tri.tri_release_qty, joined on doc_ctrl_num).
|
|
409
|
+
* `releases[i]` is the normalized form of `rows[i]`.
|
|
241
410
|
*/
|
|
242
|
-
async withReleaseBreakdown(rows, releases, ctx) {
|
|
411
|
+
async withReleaseBreakdown(rows, releases, ctx, budget) {
|
|
243
412
|
const docCtrlNums = [
|
|
244
413
|
...new Set(rows
|
|
245
414
|
.map((r) => r.doc_ctrl_num)
|
|
@@ -247,27 +416,61 @@ export class DmapService {
|
|
|
247
416
|
];
|
|
248
417
|
if (docCtrlNums.length === 0)
|
|
249
418
|
return releases;
|
|
250
|
-
const breakdownByDoc = await this.fetchReleaseBreakdown(docCtrlNums, ctx);
|
|
419
|
+
const breakdownByDoc = await this.fetchReleaseBreakdown(docCtrlNums, ctx, budget);
|
|
251
420
|
return releases.map((release, i) => {
|
|
252
421
|
const doc = rows[i]?.doc_ctrl_num;
|
|
253
422
|
return withBreakdown(release, typeof doc === 'string' ? breakdownByDoc.get(doc) : undefined);
|
|
254
423
|
});
|
|
255
424
|
}
|
|
256
425
|
/**
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
426
|
+
* Fetch the per-medium routine releases (tri.tri_release_qty) for a set of TRI submissions and
|
|
427
|
+
* roll them up into air/water/land/underground-injection sums keyed by doc_ctrl_num.
|
|
428
|
+
* getTriReleases does this on every call; searchTriReleases only when includeReleaseBreakdown
|
|
429
|
+
* is set — an uncached tri_release_qty request takes ~18 s upstream.
|
|
430
|
+
*
|
|
431
|
+
* The submissions travel as one `doc_ctrl_num in` list per request, split so each request line
|
|
432
|
+
* stays within IN_LIST_REQUEST_LINE_BUDGET (about 230 thirteen-digit numbers per request). The
|
|
433
|
+
* chunks run BREAKDOWN_CONCURRENCY at a time against the call's deadline, and their rows merge
|
|
434
|
+
* into one rollup; the lists are disjoint, so no row is counted twice.
|
|
262
435
|
*
|
|
263
436
|
* Sparsity is preserved: a row flagged release_na="1" (medium not applicable) or carrying only
|
|
264
437
|
* a release_range_code (no hard total_release) contributes nothing — a null quantity is never
|
|
265
438
|
* coerced to 0.
|
|
266
439
|
*/
|
|
267
|
-
async fetchReleaseBreakdown(docCtrlNums, ctx) {
|
|
268
|
-
const
|
|
269
|
-
|
|
270
|
-
|
|
440
|
+
async fetchReleaseBreakdown(docCtrlNums, ctx, budget) {
|
|
441
|
+
const urlFor = (docs) => this.buildTableUrl('tri', 'tri_release_qty', [{ column: 'doc_ctrl_num', operator: 'in', value: docs.join(',') }], { first: 1, last: docs.length * RELEASE_QTY_ROWS_PER_SUBMISSION });
|
|
442
|
+
const urls = [];
|
|
443
|
+
let chunk = [];
|
|
444
|
+
for (const doc of docCtrlNums) {
|
|
445
|
+
if (chunk.length > 0 &&
|
|
446
|
+
requestLineBytes(urlFor([...chunk, doc])) > IN_LIST_REQUEST_LINE_BUDGET) {
|
|
447
|
+
urls.push(urlFor(chunk));
|
|
448
|
+
chunk = [];
|
|
449
|
+
}
|
|
450
|
+
chunk.push(doc);
|
|
451
|
+
}
|
|
452
|
+
urls.push(urlFor(chunk));
|
|
453
|
+
ctx.log.debug('DMAP TRI release-qty breakdown query', {
|
|
454
|
+
submissions: docCtrlNums.length,
|
|
455
|
+
requests: urls.length,
|
|
456
|
+
});
|
|
457
|
+
const rows = [];
|
|
458
|
+
let next = 0;
|
|
459
|
+
let failed = false;
|
|
460
|
+
const worker = async () => {
|
|
461
|
+
while (!failed && next < urls.length) {
|
|
462
|
+
const url = urls[next++];
|
|
463
|
+
try {
|
|
464
|
+
rows.push(...(await this.fetchTable(url, ctx, budget)));
|
|
465
|
+
}
|
|
466
|
+
catch (error) {
|
|
467
|
+
// The call has already failed; start no further chunks.
|
|
468
|
+
failed = true;
|
|
469
|
+
throw error;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
await Promise.all(Array.from({ length: Math.min(BREAKDOWN_CONCURRENCY, urls.length) }, worker));
|
|
271
474
|
const byDoc = new Map();
|
|
272
475
|
for (const row of rows) {
|
|
273
476
|
const doc = row.doc_ctrl_num;
|
|
@@ -294,9 +497,11 @@ export class DmapService {
|
|
|
294
497
|
* Search TRI releases by state, optionally filtered by county, year, or chemical.
|
|
295
498
|
* tri.tri_reporting_form carries no state, so one request joins it to tri.tri_facility: the
|
|
296
499
|
* state and county filters bind to the facility table, the year and chemical filters to the
|
|
297
|
-
* forms, and the row range caps the joined rows at `limit`.
|
|
298
|
-
*
|
|
299
|
-
*
|
|
500
|
+
* forms, and the row range caps the joined rows at `limit`. Without `year` the joined rows are
|
|
501
|
+
* sorted newest reporting year first, so `limit` keeps the most recent filings; with `year` the
|
|
502
|
+
* request is unsorted (table order already pages deterministically). However sparse the
|
|
503
|
+
* filters, the search is one request; with includeReleaseBreakdown, fetchReleaseBreakdown adds
|
|
504
|
+
* the per-medium routine releases to every kept record (one request at the 200-record cap).
|
|
300
505
|
*/
|
|
301
506
|
async searchTriReleases(params, ctx) {
|
|
302
507
|
const limit = params.limit ?? 50;
|
|
@@ -307,7 +512,7 @@ export class DmapService {
|
|
|
307
512
|
// DMAP matches county_name case-insensitively; `contains` catches states that store both a
|
|
308
513
|
// bare and a suffixed form of one county (CALCASIEU / CALCASIEU PARISH), at the cost of
|
|
309
514
|
// also matching a longer name that contains this one (LAKE / LAKE OF THE WOODS).
|
|
310
|
-
facilityFilters.push(
|
|
515
|
+
facilityFilters.push(containsFilter('county_name', params.county));
|
|
311
516
|
}
|
|
312
517
|
const formFilters = [];
|
|
313
518
|
if (params.year !== undefined) {
|
|
@@ -319,23 +524,23 @@ export class DmapService {
|
|
|
319
524
|
}
|
|
320
525
|
if (params.chemicalName) {
|
|
321
526
|
// actual field is cas_chem_name, not chemical_name_text
|
|
322
|
-
formFilters.push(
|
|
323
|
-
column: 'cas_chem_name',
|
|
324
|
-
operator: 'contains',
|
|
325
|
-
value: params.chemicalName,
|
|
326
|
-
});
|
|
527
|
+
formFilters.push(containsFilter('cas_chem_name', params.chemicalName));
|
|
327
528
|
}
|
|
328
|
-
const
|
|
329
|
-
table: 'tri.tri_reporting_form',
|
|
330
|
-
on: { left: 'tri_facility_id', right: 'tri_facility_id' },
|
|
331
|
-
filters: formFilters,
|
|
332
|
-
});
|
|
529
|
+
const budget = dmapBudget('TRI release search', 'Narrow it with year, county, or chemical_name, leave include_release_breakdown off, or call again later.');
|
|
333
530
|
ctx.log.debug('DMAP TRI facility-form join query', {
|
|
334
531
|
state: params.state,
|
|
335
532
|
county: params.county,
|
|
336
533
|
year: params.year,
|
|
337
534
|
});
|
|
338
|
-
|
|
535
|
+
// Joined rows carry both tables' columns, so the exact pass reads county and chemical alike.
|
|
536
|
+
const rows = await this.fetchMatchingRows((range) => this.buildTableUrl('tri', 'tri_facility', facilityFilters, range, {
|
|
537
|
+
join: {
|
|
538
|
+
table: 'tri.tri_reporting_form',
|
|
539
|
+
on: { left: 'tri_facility_id', right: 'tri_facility_id' },
|
|
540
|
+
filters: formFilters,
|
|
541
|
+
},
|
|
542
|
+
...(params.year === undefined && { sort: NEWEST_FIRST }),
|
|
543
|
+
}), [...facilityFilters, ...formFilters], limit, ctx, budget);
|
|
339
544
|
const kept = rows.slice(0, limit);
|
|
340
545
|
const releases = kept.map((row) => ({
|
|
341
546
|
...normalizeTriRelease(row),
|
|
@@ -343,7 +548,7 @@ export class DmapService {
|
|
|
343
548
|
...(row.county_name && { countyName: row.county_name }),
|
|
344
549
|
}));
|
|
345
550
|
return params.includeReleaseBreakdown
|
|
346
|
-
? this.withReleaseBreakdown(kept, releases, ctx)
|
|
551
|
+
? this.withReleaseBreakdown(kept, releases, ctx, budget)
|
|
347
552
|
: releases;
|
|
348
553
|
}
|
|
349
554
|
/** Search Superfund sites by state or coordinates + radius. */
|
|
@@ -354,7 +559,7 @@ export class DmapService {
|
|
|
354
559
|
filters.push({ column: 'fk_ref_state_code', operator: 'equals', value: params.state });
|
|
355
560
|
}
|
|
356
561
|
if (params.city) {
|
|
357
|
-
filters.push(
|
|
562
|
+
filters.push(containsFilter('city_name', params.city));
|
|
358
563
|
}
|
|
359
564
|
if (params.zipCode) {
|
|
360
565
|
filters.push({ column: 'zip_code', operator: 'equals', value: params.zipCode });
|
|
@@ -374,12 +579,8 @@ export class DmapService {
|
|
|
374
579
|
const pageSize = params.latitude !== undefined && params.longitude !== undefined
|
|
375
580
|
? Math.min(500, limit * 10)
|
|
376
581
|
: limit;
|
|
377
|
-
const url = this.buildTableUrl('sems', 'envirofacts_site', filters, {
|
|
378
|
-
first: 1,
|
|
379
|
-
last: pageSize,
|
|
380
|
-
});
|
|
381
582
|
ctx.log.debug('DMAP Superfund query', { state: params.state, lat: params.latitude });
|
|
382
|
-
const rows = await this.
|
|
583
|
+
const rows = await this.fetchMatchingRows((range) => this.buildTableUrl('sems', 'envirofacts_site', filters, range), filters, pageSize, ctx, dmapBudget('Superfund site search', 'Narrow it with zip_code, city, or npl_status, or call again later.'));
|
|
383
584
|
let sites = rows.map(normalizeSemsSite);
|
|
384
585
|
if (params.latitude !== undefined && params.longitude !== undefined && params.radiusMiles) {
|
|
385
586
|
const originLat = params.latitude;
|
|
@@ -397,7 +598,7 @@ export class DmapService {
|
|
|
397
598
|
async searchSuperfundById(siteId, ctx) {
|
|
398
599
|
const url = this.buildTableUrl('sems', 'envirofacts_site', [{ column: 'site_id', operator: 'equals', value: siteId }], { first: 1, last: 1 });
|
|
399
600
|
ctx.log.debug('DMAP Superfund by ID', { siteId });
|
|
400
|
-
const rows = await this.fetchTable(url, ctx);
|
|
601
|
+
const rows = await this.fetchTable(url, ctx, dmapBudget('Superfund site lookup', 'Call again later.'));
|
|
401
602
|
return rows.map(normalizeSemsSite);
|
|
402
603
|
}
|
|
403
604
|
/** Search drinking water systems by state or ZIP code. */
|
|
@@ -421,16 +622,17 @@ export class DmapService {
|
|
|
421
622
|
}
|
|
422
623
|
if (filters.length === 0)
|
|
423
624
|
return [];
|
|
625
|
+
const budget = dmapBudget('water system search', 'Narrow it with zip_code or pws_type, or call again later.');
|
|
424
626
|
// sdwis.violation has no zip column: a ZIP's systems are checked by PWSID, a state is scanned.
|
|
425
627
|
if (params.hasViolation && params.zipCode) {
|
|
426
|
-
return this.searchViolatingWaterSystemsInZip(params.zipCode, filters, limit, ctx);
|
|
628
|
+
return this.searchViolatingWaterSystemsInZip(params.zipCode, filters, limit, ctx, budget);
|
|
427
629
|
}
|
|
428
630
|
if (params.hasViolation && params.state) {
|
|
429
|
-
return this.searchViolatingWaterSystems(params.state, filters, limit, ctx);
|
|
631
|
+
return this.searchViolatingWaterSystems(params.state, filters, limit, ctx, budget);
|
|
430
632
|
}
|
|
431
633
|
const url = this.buildTableUrl('sdwis', 'water_system', filters, { first: 1, last: limit });
|
|
432
634
|
ctx.log.debug('DMAP water systems query', { state: params.state });
|
|
433
|
-
const rows = await this.fetchTable(url, ctx);
|
|
635
|
+
const rows = await this.fetchTable(url, ctx, budget);
|
|
434
636
|
return rows.slice(0, limit).map((r) => normalizeSdwisWaterSystem(r));
|
|
435
637
|
}
|
|
436
638
|
/**
|
|
@@ -440,10 +642,10 @@ export class DmapService {
|
|
|
440
642
|
* at most 1 + VIOLATION_SCAN_ROWS / PWSID_CHUNK_SIZE requests. A state with more open violation
|
|
441
643
|
* rows than the scan reads can have violators it never sees; the result then carries a notice.
|
|
442
644
|
*/
|
|
443
|
-
async searchViolatingWaterSystems(state, filters, limit, ctx) {
|
|
645
|
+
async searchViolatingWaterSystems(state, filters, limit, ctx, budget) {
|
|
444
646
|
const violUrl = this.buildTableUrl('sdwis', 'violation', [{ column: 'primacy_agency_code', operator: 'equals', value: state }, OPEN_VIOLATION_FILTER], { first: 1, last: VIOLATION_SCAN_ROWS });
|
|
445
647
|
ctx.log.debug('DMAP SDWIS violation query', { state });
|
|
446
|
-
const violRows = await this.fetchTable(violUrl, ctx);
|
|
648
|
+
const violRows = await this.fetchTable(violUrl, ctx, budget);
|
|
447
649
|
const violatingPwsids = pwsidSet(violRows);
|
|
448
650
|
if (violRows.length >= VIOLATION_SCAN_ROWS) {
|
|
449
651
|
ctx.enrich.notice(`The violation check stopped at the first ${VIOLATION_SCAN_ROWS.toLocaleString('en-US')} of ${state}'s open SDWIS violation records, which name ${violatingPwsids.size} distinct systems. Records past that point were not read, so these results may not include every system with an open violation in the state.`);
|
|
@@ -454,7 +656,7 @@ export class DmapService {
|
|
|
454
656
|
const chunk = ids.slice(i, i + PWSID_CHUNK_SIZE);
|
|
455
657
|
const url = this.buildTableUrl('sdwis', 'water_system', [...filters, { column: 'pwsid', operator: 'in', value: chunk.join(',') }], { first: 1, last: limit - systems.length });
|
|
456
658
|
ctx.log.debug('DMAP water systems query', { state, chunkStart: i, chunkSize: chunk.length });
|
|
457
|
-
const rows = await this.fetchTable(url, ctx);
|
|
659
|
+
const rows = await this.fetchTable(url, ctx, budget);
|
|
458
660
|
for (const row of rows.slice(0, limit - systems.length)) {
|
|
459
661
|
systems.push(normalizeSdwisWaterSystem(row, violatingPwsids));
|
|
460
662
|
}
|
|
@@ -468,13 +670,13 @@ export class DmapService {
|
|
|
468
670
|
* past the system read, or a chunk whose violation rows fill VIOLATION_SCAN_ROWS, can hide
|
|
469
671
|
* violators; the result then carries a notice.
|
|
470
672
|
*/
|
|
471
|
-
async searchViolatingWaterSystemsInZip(zipCode, filters, limit, ctx) {
|
|
673
|
+
async searchViolatingWaterSystemsInZip(zipCode, filters, limit, ctx, budget) {
|
|
472
674
|
const url = this.buildTableUrl('sdwis', 'water_system', filters, {
|
|
473
675
|
first: 1,
|
|
474
676
|
last: ZIP_SYSTEM_SCAN_ROWS,
|
|
475
677
|
});
|
|
476
678
|
ctx.log.debug('DMAP water systems query', { zipCode });
|
|
477
|
-
const zipRows = await this.fetchTable(url, ctx);
|
|
679
|
+
const zipRows = await this.fetchTable(url, ctx, budget);
|
|
478
680
|
const notices = [];
|
|
479
681
|
if (zipRows.length >= ZIP_SYSTEM_SCAN_ROWS) {
|
|
480
682
|
notices.push(`The violation check read only the first ${ZIP_SYSTEM_SCAN_ROWS.toLocaleString('en-US')} water systems in ZIP ${zipCode}; systems past that point were not checked.`);
|
|
@@ -493,7 +695,7 @@ export class DmapService {
|
|
|
493
695
|
chunkStart: i,
|
|
494
696
|
chunkSize: chunk.length,
|
|
495
697
|
});
|
|
496
|
-
const violRows = await this.fetchTable(violUrl, ctx);
|
|
698
|
+
const violRows = await this.fetchTable(violUrl, ctx, budget);
|
|
497
699
|
if (violRows.length >= VIOLATION_SCAN_ROWS)
|
|
498
700
|
truncatedChunk = true;
|
|
499
701
|
const violatingPwsids = pwsidSet(violRows);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dmap-service.js","sourceRoot":"","sources":["../../../src/services/dmap/dmap-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dmap-service.js","sourceRoot":"","sources":["../../../src/services/dmap/dmap-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAmB,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAmBxE;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,yGAAyG;AACzG,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAE3C;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,OAAO,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,CAAC;IACpD,OAAO,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,GAAG,EAAE,CAAC;IACpD,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,MAAc,EAAE,IAAY;IAClD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACjD,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,eAAe,CACnB,IAAI,KAAK,qHAAqH,EAC9H,EAAE,KAAK,EAAE,CACV,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,MAAkB;IACrC,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IAClD,MAAM,KAAK,GAAG,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,sBAAsB,CAAC;gBACzF,MAAM,eAAe,CACnB,IAAI,KAAK,eAAe,SAAS,4EAA4E,QAAQ,EAAE,EACvH,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAChF,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC;;;GAGG;AACH,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B,gGAAgG;AAChG,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC;;;GAGG;AACH,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAKhC;;;;;GAKG;AACH,MAAM,YAAY,GAAkB;IAClC,EAAE,MAAM,EAAE,uCAAuC,EAAE,SAAS,EAAE,MAAM,EAAE;IACtE,EAAE,MAAM,EAAE,qCAAqC,EAAE,SAAS,EAAE,KAAK,EAAE;CACpE,CAAC;AAEF;;;GAGG;AACH,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEzC;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CAClD,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAErD,0FAA0F;AAC1F,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAE3C,wFAAwF;AACxF,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,QAAQ,GAAG,MAAM,WAAW,CAAC,CAAC;AAChE,CAAC;AAED,gEAAgE;AAChE,SAAS,QAAQ,CAAC,GAAgC;IAChD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,wDAAwD;AACxD,MAAM,eAAe,GAAG,SAAS,CAAC;AAElC,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,aAAa,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;AAChD,CAAC;AAED,kGAAkG;AAClG,SAAS,mBAAmB,CAAC,GAAwB;IACnD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,KAAK,qBAAqB,CAAC;IAC1D,MAAM,MAAM,GAAe;QACzB,UAAU,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE;QACrC,gEAAgE;QAChE,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;QACrC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC;QAC9C,GAAG,CAAC,OAAO,IAAI,EAAE,YAAY,EAAE,OAAgB,EAAE,CAAC;KACnD,CAAC;IACF,6FAA6F;IAC7F,iFAAiF;IACjF,mFAAmF;IACnF,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAClG,OAAO,MAAM,CAAC;AAChB,CAAC;AAWD,wGAAwG;AACxG,SAAS,aAAa,CACpB,OAAU,EACV,SAAsC;IAEtC,IAAI,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC;IAC/B,IAAI,OAAO,CAAC,YAAY,KAAK,OAAO;QAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IAC1E,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAEpD,EAAE,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,uBAAuB,GAA0C;IACrE,SAAS,EAAE,oBAAoB;IAC/B,WAAW,EAAE,oBAAoB;IACjC,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE,qBAAqB;IAC/B,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;IAClC,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,qBAAqB;IACjC,SAAS,EAAE,qBAAqB;IAChC,SAAS,EAAE,qCAAqC;IAChD,WAAW,EAAE,qCAAqC;IAClD,SAAS,EAAE,qCAAqC;CACjD,CAAC;AAEF,2EAA2E;AAC3E,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,qBAAqB,GAAe;IACxC,MAAM,EAAE,wBAAwB;IAChC,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,8DAA8D;AAC9D,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC,kEAAkE;AAClE,SAAS,QAAQ,CAAC,UAA+B;IAC/C,OAAO,IAAI,GAAG,CACZ,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CACpF,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,SAAS,iBAAiB,CAAC,GAAgB;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IACxD,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;QACzB,sEAAsE;QACtE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;QACpB,4DAA4D;QAC5D,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,eAAyB,EAAE,CAAC;QACrE,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,SAAmB,EAAE,CAAC;QACvD,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,iBAA2B,EAAE,CAAC;QACxE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,QAAkB,EAAE,CAAC;QACpD,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,WAAqB,EAAE,CAAC;QAC7D,sDAAsD;QACtD,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAmB,EAAE,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,eAAyB,EAAE,CAAC;QACxE,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,cAAwB,EAAE,CAAC;QAC1E,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC3C,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,SAAS,yBAAyB,CAChC,GAAwB,EACxB,eAA6B;IAE7B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC9B,OAAO;QACL,KAAK;QACL,IAAI,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE;QACxB,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,mBAA6B,EAAE,CAAC;QAC5E,6CAA6C;QAC7C,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,SAAmB,EAAE,CAAC;QACvD,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,QAAkB,EAAE,CAAC;QACpD,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,aAAuB,EAAE,CAAC;QAC/D,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,iBAAiB,EAAE,GAAG,CAAC,mBAA6B,EAAE,CAAC;QACxF,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC;QACnD,GAAG,CAAC,eAAe,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAClF,mEAAmE;QACnE,GAAG,CAAC,GAAG,CAAC,iBAAiB,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,iBAAiB,KAAK,GAAG,EAAE,CAAC;KACxF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY;IACpF,MAAM,CAAC,GAAG,MAAM,CAAC;IACjB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAC7C,MAAM,CAAC,GACL,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,OAAO,WAAW;IACL,OAAO,CAAS;IAEjC,YAAY,OAAkB,EAAE,QAAwB;QACtD,IAAI,CAAC,OAAO,GAAG,eAAe,EAAE,CAAC,WAAW,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACK,aAAa,CACnB,MAAc,EACd,KAAa,EACb,OAAqB,EACrB,UAA2C,EAC3C,OAAO,GAOH,EAAE;QAEN,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAC/B,MAAM,MAAM,GAAG,CAAC,IAAkB,EAAE,EAAE,CACpC,IAAI;aACD,GAAG,CAAC,WAAW,CAAC;aAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;aAC1F,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI;YACnB,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/H,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,MAAM,QAAQ,GAAG,GAAG,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QAC1D,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,GAAG,QAAQ,IAAI,QAAQ,OAAO,CAAC;IACxG,CAAC;IAED;;;;;;;;;;OAUG;IACK,UAAU,CAAI,GAAW,EAAE,GAAY,EAAE,MAAkB;QACjE,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC;QAClE,IAAI,YAAY,GAAG,uBAAuB,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,MAAM,CACnB,eAAe,CACb,gFAAgF,YAAY,oBAAoB,uBAAuB,wCAAwC,EAC/K,EAAE,gBAAgB,EAAE,YAAY,EAAE,CACnC,CACF,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CACd,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,MAAM,qBAAqB,CAAC,QAAQ,EAAE;oBAC1C,OAAO,EAAE,MAAM;oBACf,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;iBACxF,CAAC,CAAC;YACL,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,8EAA8E,CAC/E,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAa,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAgB,CAAC,CAAC;YACjD,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,EAAS,CAAC;YAC7C,OAAO,CAAE,MAAoC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAQ,CAAC;QACxE,CAAC,EACD;YACE,SAAS,EAAE,wBAAwB;YACnC,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE;SACjC,CACF,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,iBAAiB,CAC7B,WAA+D,EAC/D,OAAqB,EACrB,MAAc,EACd,GAAY,EACZ,MAAkB;QAElB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAyC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CACtE,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,UAAU,CAAI,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACxD,MAAM,OAAO,GAAQ,EAAE,CAAC;QACxB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;YAClF,MAAM,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAChC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,EAClD,GAAG,EACH,MAAM,CACP,CAAC;YACF,OAAO,CAAC,IAAI,CACV,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;iBACxB,WAAW,EAAE;iBACb,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACrC,CACF,CACF,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC3B,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC/E,GAAG,CAAC,MAAM,CAAC,MAAM,CACf,GAAG,KAAK,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,kFAAkF,CAAC,oBAAoB,GAAG,QAAQ,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,oCAAoC,IAAI,2GAA2G,CACnV,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,cAAc,CAClB,MAIC,EACD,GAAY;QAEZ,MAAM,OAAO,GAAiB;YAC5B,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE;SAC5E,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,wDAAwD;YACxD,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CACvB,oBAAoB,EACpB,4DAA4D,CAC7D,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,KAAK,CAAC,EAC1E,OAAO,EACP,GAAG,EACH,GAAG,EACH,MAAM,CACP,CAAC;QACF,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACrF,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,oBAAoB,CAChC,IAA2B,EAC3B,QAAa,EACb,GAAY,EACZ,MAAkB;QAElB,MAAM,WAAW,GAAG;YAClB,GAAG,IAAI,GAAG,CACR,IAAI;iBACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;iBAC1B,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CACrE;SACF,CAAC;QACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC9C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAClF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC;YAClC,OAAO,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACK,KAAK,CAAC,qBAAqB,CACjC,WAAqB,EACrB,GAAY,EACZ,MAAkB;QAElB,MAAM,MAAM,GAAG,CAAC,IAAc,EAAE,EAAE,CAChC,IAAI,CAAC,aAAa,CAChB,KAAK,EACL,iBAAiB,EACjB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EACnE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,+BAA+B,EAAE,CAClE,CAAC;QACJ,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IACE,KAAK,CAAC,MAAM,GAAG,CAAC;gBAChB,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,2BAA2B,EACvE,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzB,KAAK,GAAG,EAAE,CAAC;YACb,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE;YACpD,WAAW,EAAE,WAAW,CAAC,MAAM;YAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAuB,EAAE,CAAC;QACpC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAW,CAAC;gBACnC,IAAI,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAmB,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5E,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,wDAAwD;oBACxD,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAEhG,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC;YAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAC1D,yFAAyF;YACzF,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG;gBAAE,SAAS;YACrC,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,oFAAoF;YACpF,yCAAyC;YACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;YACxD,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACnC,KAAK,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YAC3D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,iBAAiB,CACrB,MAOC,EACD,GAAY;QAEZ,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAEjC,MAAM,eAAe,GAAiB;YACpC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;SAClE,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,2FAA2F;YAC3F,wFAAwF;YACxF,iFAAiF;YACjF,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,WAAW,GAAiB,EAAE,CAAC;QACrC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,WAAW,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,gBAAgB;gBACxB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,wDAAwD;YACxD,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CACvB,oBAAoB,EACpB,0GAA0G,CAC3G,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE;YACjD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAC;QAEH,6FAA6F;QAC7F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACvC,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,KAAK,EAAE;YAChE,IAAI,EAAE;gBACJ,KAAK,EAAE,wBAAwB;gBAC/B,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE;gBACzD,OAAO,EAAE,WAAW;aACrB;YACD,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;SACzD,CAAC,EACJ,CAAC,GAAG,eAAe,EAAE,GAAG,WAAW,CAAC,EACpC,KAAK,EACL,GAAG,EACH,MAAM,CACP,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClC,GAAG,mBAAmB,CAAC,GAAG,CAAC;YAC3B,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;YACrC,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;SACxD,CAAC,CAAC,CAAC;QAEJ,OAAO,MAAM,CAAC,uBAAuB;YACnC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC;YACxD,CAAC,CAAC,QAAQ,CAAC;IACf,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,eAAe,CACnB,MASC,EACD,GAAY;QAEZ,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YACnD,MAAM,MAAM,GAA2B,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YAC3F,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GACZ,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAC7D,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,EAAE,CAAC;YAC3B,CAAC,CAAC,KAAK,CAAC;QACZ,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAErF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,CAAC,EACzE,OAAO,EACP,QAAQ,EACR,GAAG,EACH,UAAU,CACR,uBAAuB,EACvB,oEAAoE,CACrE,CACF,CAAC;QACF,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAExC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YACnC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5B,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC;gBAC9E,MAAM,IAAI,GAAG,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzF,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,mBAAmB,CAAC,MAAc,EAAE,GAAY;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAC5B,MAAM,EACN,kBAAkB,EAClB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAC1D,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CACtB,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAChC,GAAG,EACH,GAAG,EACH,UAAU,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,CACzD,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,kBAAkB,CACtB,MAMC,EACD,GAAY;QAEZ,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,OAAO,GAA2B;gBACtC,SAAS,EAAE,KAAK;gBAChB,eAAe,EAAE,QAAQ;gBACzB,SAAS,EAAE,OAAO;aACnB,CAAC;YACF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,MAAM,MAAM,GAAG,UAAU,CACvB,qBAAqB,EACrB,2DAA2D,CAC5D,CAAC;QACF,+FAA+F;QAC/F,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,gCAAgC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5F,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAEnE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAsB,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,2BAA2B,CACvC,KAAa,EACb,OAAqB,EACrB,KAAa,EACb,GAAY,EACZ,MAAkB;QAElB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAChC,OAAO,EACP,WAAW,EACX,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,qBAAqB,CAAC,EAC5F,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CACxC,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAoB,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAChF,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE3C,IAAI,QAAQ,CAAC,MAAM,IAAI,mBAAmB,EAAE,CAAC;YAC3C,GAAG,CAAC,MAAM,CAAC,MAAM,CACf,4CAA4C,mBAAmB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,KAAK,+CAA+C,eAAe,CAAC,IAAI,8IAA8I,CACrT,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;QACjC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,IAAI,gBAAgB,EAAE,CAAC;YAChF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAC5B,OAAO,EACP,cAAc,EACd,CAAC,GAAG,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EACzE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAC3C,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAsB,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,gCAAgC,CAC5C,OAAe,EACf,OAAqB,EACrB,KAAa,EACb,GAAY,EACZ,MAAkB;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE;YAC/D,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,oBAAoB;SAC3B,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAsB,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAE7E,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CACV,2CAA2C,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,yBAAyB,OAAO,6CAA6C,CACrK,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAgD,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CACjF,CAAC;QACF,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACvF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAChC,OAAO,EACP,WAAW,EACX;gBACE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC/E,qBAAqB;aACtB,EACD,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CACxC,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE;gBAC1C,OAAO;gBACP,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE,KAAK,CAAC,MAAM;aACxB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAoB,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAChF,IAAI,QAAQ,CAAC,MAAM,IAAI,mBAAmB;gBAAE,cAAc,GAAG,IAAI,CAAC;YAClE,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;oBAAE,MAAM;gBACnC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CACV,mDAAmD,gBAAgB,mBAAmB,OAAO,eAAe,mBAAmB,CAAC,cAAc,CAAC,OAAO,CAAC,oIAAoI,CAC5R,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,gCAAgC;AAEhC,IAAI,QAAiC,CAAC;AAEtC,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,OAAuB;IACxE,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|