@cyanheads/ris-austria-mcp-server 0.1.5
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 +401 -0
- package/CLAUDE.md +401 -0
- package/Dockerfile +125 -0
- package/LICENSE +201 -0
- package/README.md +309 -0
- package/changelog/0.1.x/0.1.0.md +25 -0
- package/changelog/0.1.x/0.1.1.md +24 -0
- package/changelog/0.1.x/0.1.2.md +16 -0
- package/changelog/0.1.x/0.1.3.md +11 -0
- package/changelog/0.1.x/0.1.4.md +11 -0
- package/changelog/0.1.x/0.1.5.md +18 -0
- package/changelog/template.md +129 -0
- package/dist/config/server-config.d.ts +19 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +35 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.d.ts +30 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.js +75 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.js.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared.d.ts +8 -0
- package/dist/mcp-server/tools/definitions/_shared.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared.js +10 -0
- package/dist/mcp-server/tools/definitions/_shared.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.d.ts +189 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.js +504 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.d.ts +42 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.js +316 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.d.ts +80 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.js +529 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.d.ts +118 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.js +389 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.d.ts +178 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.js +495 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.d.ts +80 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.js +264 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.d.ts +147 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.js +509 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.d.ts +145 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.js +466 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.d.ts +73 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.js +265 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.js.map +1 -0
- package/dist/services/ris/normalizer.d.ts +40 -0
- package/dist/services/ris/normalizer.d.ts.map +1 -0
- package/dist/services/ris/normalizer.js +480 -0
- package/dist/services/ris/normalizer.js.map +1 -0
- package/dist/services/ris/reference/applications.d.ts +529 -0
- package/dist/services/ris/reference/applications.d.ts.map +1 -0
- package/dist/services/ris/reference/applications.js +520 -0
- package/dist/services/ris/reference/applications.js.map +1 -0
- package/dist/services/ris/reference/changed-since-intervals.d.ts +42 -0
- package/dist/services/ris/reference/changed-since-intervals.d.ts.map +1 -0
- package/dist/services/ris/reference/changed-since-intervals.js +16 -0
- package/dist/services/ris/reference/changed-since-intervals.js.map +1 -0
- package/dist/services/ris/reference/citation-formats.d.ts +39 -0
- package/dist/services/ris/reference/citation-formats.d.ts.map +1 -0
- package/dist/services/ris/reference/citation-formats.js +39 -0
- package/dist/services/ris/reference/citation-formats.js.map +1 -0
- package/dist/services/ris/reference/collections.d.ts +82 -0
- package/dist/services/ris/reference/collections.d.ts.map +1 -0
- package/dist/services/ris/reference/collections.js +102 -0
- package/dist/services/ris/reference/collections.js.map +1 -0
- package/dist/services/ris/reference/courts.d.ts +201 -0
- package/dist/services/ris/reference/courts.d.ts.map +1 -0
- package/dist/services/ris/reference/courts.js +198 -0
- package/dist/services/ris/reference/courts.js.map +1 -0
- package/dist/services/ris/reference/decision-kinds.d.ts +78 -0
- package/dist/services/ris/reference/decision-kinds.d.ts.map +1 -0
- package/dist/services/ris/reference/decision-kinds.js +117 -0
- package/dist/services/ris/reference/decision-kinds.js.map +1 -0
- package/dist/services/ris/reference/decision-types.d.ts +36 -0
- package/dist/services/ris/reference/decision-types.d.ts.map +1 -0
- package/dist/services/ris/reference/decision-types.js +29 -0
- package/dist/services/ris/reference/decision-types.js.map +1 -0
- package/dist/services/ris/reference/district-authorities.d.ts +314 -0
- package/dist/services/ris/reference/district-authorities.d.ts.map +1 -0
- package/dist/services/ris/reference/district-authorities.js +212 -0
- package/dist/services/ris/reference/district-authorities.js.map +1 -0
- package/dist/services/ris/reference/gazette-parts.d.ts +73 -0
- package/dist/services/ris/reference/gazette-parts.d.ts.map +1 -0
- package/dist/services/ris/reference/gazette-parts.js +58 -0
- package/dist/services/ris/reference/gazette-parts.js.map +1 -0
- package/dist/services/ris/reference/index.d.ts +23 -0
- package/dist/services/ris/reference/index.d.ts.map +1 -0
- package/dist/services/ris/reference/index.js +23 -0
- package/dist/services/ris/reference/index.js.map +1 -0
- package/dist/services/ris/reference/issuing-bodies.d.ts +642 -0
- package/dist/services/ris/reference/issuing-bodies.d.ts.map +1 -0
- package/dist/services/ris/reference/issuing-bodies.js +616 -0
- package/dist/services/ris/reference/issuing-bodies.js.map +1 -0
- package/dist/services/ris/reference/justiz-subject-areas.d.ts +133 -0
- package/dist/services/ris/reference/justiz-subject-areas.d.ts.map +1 -0
- package/dist/services/ris/reference/justiz-subject-areas.js +67 -0
- package/dist/services/ris/reference/justiz-subject-areas.js.map +1 -0
- package/dist/services/ris/reference/law-types.d.ts +46 -0
- package/dist/services/ris/reference/law-types.d.ts.map +1 -0
- package/dist/services/ris/reference/law-types.js +41 -0
- package/dist/services/ris/reference/law-types.js.map +1 -0
- package/dist/services/ris/reference/ministries.d.ts +360 -0
- package/dist/services/ris/reference/ministries.d.ts.map +1 -0
- package/dist/services/ris/reference/ministries.js +408 -0
- package/dist/services/ris/reference/ministries.js.map +1 -0
- package/dist/services/ris/reference/search-syntax.d.ts +66 -0
- package/dist/services/ris/reference/search-syntax.d.ts.map +1 -0
- package/dist/services/ris/reference/search-syntax.js +65 -0
- package/dist/services/ris/reference/search-syntax.js.map +1 -0
- package/dist/services/ris/reference/section-types.d.ts +33 -0
- package/dist/services/ris/reference/section-types.d.ts.map +1 -0
- package/dist/services/ris/reference/section-types.js +29 -0
- package/dist/services/ris/reference/section-types.js.map +1 -0
- package/dist/services/ris/reference/stages.d.ts +41 -0
- package/dist/services/ris/reference/stages.d.ts.map +1 -0
- package/dist/services/ris/reference/stages.js +27 -0
- package/dist/services/ris/reference/stages.js.map +1 -0
- package/dist/services/ris/reference/states.d.ts +90 -0
- package/dist/services/ris/reference/states.d.ts.map +1 -0
- package/dist/services/ris/reference/states.js +85 -0
- package/dist/services/ris/reference/states.js.map +1 -0
- package/dist/services/ris/request-builder.d.ts +195 -0
- package/dist/services/ris/request-builder.d.ts.map +1 -0
- package/dist/services/ris/request-builder.js +673 -0
- package/dist/services/ris/request-builder.js.map +1 -0
- package/dist/services/ris/ris-service.d.ts +65 -0
- package/dist/services/ris/ris-service.d.ts.map +1 -0
- package/dist/services/ris/ris-service.js +200 -0
- package/dist/services/ris/ris-service.js.map +1 -0
- package/dist/services/ris/types.d.ts +651 -0
- package/dist/services/ris/types.d.ts.map +1 -0
- package/dist/services/ris/types.js +11 -0
- package/dist/services/ris/types.js.map +1 -0
- package/package.json +108 -0
- package/server.json +111 -0
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview ris_search_gazette — browse Austria's promulgation record at every level of
|
|
3
|
+
* government. `scope` selects the jurisdiction; the three federal era tiers (BgblAuth 2004+,
|
|
4
|
+
* BgblPdf 1945–2003, BgblAlt 1848–1940) are auto-routed by the year in the number or date
|
|
5
|
+
* range, and the resolved application is echoed in enrichment. State scopes pick a `series`
|
|
6
|
+
* (law vs ordinance gazette) and an `include_non_authentic` toggle; conditional filters are
|
|
7
|
+
* guarded locally before any upstream call. Ordinance gazettes (Vbl) currently cover Tirol
|
|
8
|
+
* only — a non-Tirol request short-circuits to a zero-hit notice rather than a server error.
|
|
9
|
+
* @module mcp-server/tools/definitions/ris-search-gazette
|
|
10
|
+
*/
|
|
11
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
12
|
+
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
13
|
+
import { RIS_STATES } from '../../../services/ris/reference/index.js';
|
|
14
|
+
import { getRisService } from '../../../services/ris/ris-service.js';
|
|
15
|
+
import { isoDateString } from './_shared.js';
|
|
16
|
+
const STATE_CODES = RIS_STATES.map((s) => s.code);
|
|
17
|
+
const GAZETTE_SCOPE_VALUES = ['federal', ...STATE_CODES, 'district', 'municipal'];
|
|
18
|
+
const STATE_CODE_SET = new Set(STATE_CODES);
|
|
19
|
+
/** Binding label per gazette application (canonical seven-label list, Design Decisions). */
|
|
20
|
+
const GAZETTE_BINDING = {
|
|
21
|
+
BgblAlt: 'historical_record',
|
|
22
|
+
BgblAuth: 'authentic',
|
|
23
|
+
BgblPdf: 'historical_record',
|
|
24
|
+
Bvb: 'authentic',
|
|
25
|
+
GrA: 'authentic',
|
|
26
|
+
Lgbl: 'historical_record',
|
|
27
|
+
LgblAuth: 'authentic',
|
|
28
|
+
LgblNO: 'consolidated_informational',
|
|
29
|
+
Vbl: 'authentic',
|
|
30
|
+
};
|
|
31
|
+
/** Roman-numeral part the federal `part` filter names — for the number/part consistency notice. */
|
|
32
|
+
const PART_ROMAN = {
|
|
33
|
+
part1: 'I',
|
|
34
|
+
part2: 'II',
|
|
35
|
+
part3: 'III',
|
|
36
|
+
};
|
|
37
|
+
/** States the Verordnungsblätter (Vbl) backend actually resolves — currently Tirol only. */
|
|
38
|
+
const VBL_COVERED = new Set(['tirol']);
|
|
39
|
+
/** True when a `scope` value is one of the nine Bundesländer. */
|
|
40
|
+
function isStateScope(scope) {
|
|
41
|
+
return STATE_CODE_SET.has(scope);
|
|
42
|
+
}
|
|
43
|
+
/** Year at the trailing edge of a gazette number ("171/2026", "189/1902"); bare numbers → undefined. */
|
|
44
|
+
function yearFromNumber(number) {
|
|
45
|
+
const match = number === undefined ? null : /(\d{4})\s*$/.exec(number.trim());
|
|
46
|
+
return match ? Number.parseInt(match[1], 10) : undefined;
|
|
47
|
+
}
|
|
48
|
+
/** Leading four-digit year of an ISO date ("1961-03-01" → 1961). */
|
|
49
|
+
function yearFromDate(date) {
|
|
50
|
+
const match = date === undefined ? null : /^(\d{4})/.exec(date.trim());
|
|
51
|
+
return match ? Number.parseInt(match[1], 10) : undefined;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Route a federal (Bundesgesetzblatt) query to its era tier by the year signal: the number's
|
|
55
|
+
* trailing year, else the date range. `part: pre_1997` forces the post-war PDF tier.
|
|
56
|
+
*/
|
|
57
|
+
function resolveFederalTier(number, publishedFrom, publishedTo, part) {
|
|
58
|
+
if (part === 'pre_1997')
|
|
59
|
+
return { application: 'BgblPdf', era: 'postwar' };
|
|
60
|
+
const year = yearFromNumber(number) ?? yearFromDate(publishedFrom) ?? yearFromDate(publishedTo);
|
|
61
|
+
if (year === undefined || year >= 2004)
|
|
62
|
+
return { application: 'BgblAuth', era: 'current' };
|
|
63
|
+
if (year >= 1945)
|
|
64
|
+
return { application: 'BgblPdf', era: 'postwar' };
|
|
65
|
+
return { application: 'BgblAlt', era: 'imperial' };
|
|
66
|
+
}
|
|
67
|
+
/** Map an empty string from a form-based client to `undefined`. */
|
|
68
|
+
function meaningful(value) {
|
|
69
|
+
return value !== undefined && value !== '' ? value : undefined;
|
|
70
|
+
}
|
|
71
|
+
const ContentUrlsSchema = z
|
|
72
|
+
.object({
|
|
73
|
+
xml: z.string().optional().describe('XML rendition URL (RIS Nutzdaten schema).'),
|
|
74
|
+
html: z.string().optional().describe('HTML rendition URL.'),
|
|
75
|
+
pdf: z.string().optional().describe('PDF rendition URL.'),
|
|
76
|
+
rtf: z.string().optional().describe('RTF rendition URL.'),
|
|
77
|
+
})
|
|
78
|
+
.describe('Rendition URLs of the main document. BgblAlt carries none (metadata-only, ÖNB scans); district/municipal gazettes publish the authentic PDF only (see authentic_pdf_url).');
|
|
79
|
+
export const GazetteRecordSchema = z
|
|
80
|
+
.object({
|
|
81
|
+
document_number: z
|
|
82
|
+
.string()
|
|
83
|
+
.describe('Technical RIS document number (e.g. BGBLA_2026_II_171, 1961_194_0, rgb1902_…, LGBLA_SA_…, VBL_TI_…, BVB_ST_…, GEMREA_OB_…) — pass together with the served application to ris_get_document.'),
|
|
84
|
+
gazette_number: z
|
|
85
|
+
.string()
|
|
86
|
+
.optional()
|
|
87
|
+
.describe('Gazette number (Bgblnummer / Lgblnummer / Kundmachungsnummer / BgblAlt Fundstelle), where assigned.'),
|
|
88
|
+
part: z
|
|
89
|
+
.string()
|
|
90
|
+
.optional()
|
|
91
|
+
.describe('Federal gazette part (Teil — I / II / III), where the tier carries a part split.'),
|
|
92
|
+
type: z
|
|
93
|
+
.string()
|
|
94
|
+
.optional()
|
|
95
|
+
.describe('Norm/document type (Typ — Gesetz, Verordnung, …) — glossary: ris_list_reference topic law_types.'),
|
|
96
|
+
published: z
|
|
97
|
+
.string()
|
|
98
|
+
.optional()
|
|
99
|
+
.describe('Promulgation / publication date (Kundmachungsdatum / Ausgabedatum).'),
|
|
100
|
+
issuer: z
|
|
101
|
+
.string()
|
|
102
|
+
.optional()
|
|
103
|
+
.describe('Issuing body (Einbringer / Organ), where the record carries one.'),
|
|
104
|
+
district_authority: z
|
|
105
|
+
.string()
|
|
106
|
+
.optional()
|
|
107
|
+
.describe('District administrative authority (Bezirksverwaltungsbehörde) — district gazettes only.'),
|
|
108
|
+
municipality: z
|
|
109
|
+
.string()
|
|
110
|
+
.optional()
|
|
111
|
+
.describe('Municipality the promulgation belongs to (Gemeinde) — municipal gazettes only.'),
|
|
112
|
+
title: z.string().optional().describe('Full document title, HTML markup stripped.'),
|
|
113
|
+
short_title: z.string().optional().describe('Short title (Kurztitel), where assigned.'),
|
|
114
|
+
eli: z
|
|
115
|
+
.string()
|
|
116
|
+
.optional()
|
|
117
|
+
.describe('European Legislation Identifier, where assigned (federal coverage is best).'),
|
|
118
|
+
binding: z
|
|
119
|
+
.enum(['authentic', 'consolidated_informational', 'historical_record'])
|
|
120
|
+
.describe('Legal binding status: authentic (amtssigniert, legally binding — BgblAuth/LgblAuth/Vbl/Bvb/GrA), historical_record (superseded/pre-e-Recht promulgation — BgblPdf/BgblAlt/Lgbl), or consolidated_informational (NÖ systematic collection — LgblNO).'),
|
|
121
|
+
authentic_pdf_url: z
|
|
122
|
+
.string()
|
|
123
|
+
.optional()
|
|
124
|
+
.describe('The amtssigniert authentic PDF (.pdfsig, Authentisch DataType) — the legally binding artifact — where the gazette publishes one.'),
|
|
125
|
+
alex_url: z
|
|
126
|
+
.string()
|
|
127
|
+
.optional()
|
|
128
|
+
.describe('ÖNB ALEX scan of the gazette issue (AlexUrl) — the fetchable document for the metadata-only imperial/interwar tier (BgblAlt, 1848–1940), which carries no content_urls.'),
|
|
129
|
+
document_url: z
|
|
130
|
+
.string()
|
|
131
|
+
.optional()
|
|
132
|
+
.describe('RIS web view of the gazette document (DokumentUrl) — for humans.'),
|
|
133
|
+
content_urls: ContentUrlsSchema,
|
|
134
|
+
})
|
|
135
|
+
.describe('One gazette entry from the resolved application.');
|
|
136
|
+
/** Pick the four core rendition URLs off a normalized hit. */
|
|
137
|
+
function pickContentUrls(hit) {
|
|
138
|
+
const { html, pdf, rtf, xml } = hit.contentUrls;
|
|
139
|
+
return {
|
|
140
|
+
...(xml !== undefined && { xml }),
|
|
141
|
+
...(html !== undefined && { html }),
|
|
142
|
+
...(pdf !== undefined && { pdf }),
|
|
143
|
+
...(rtf !== undefined && { rtf }),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/** Map a normalized RIS hit to the tool's record shape (application drives the binding label). */
|
|
147
|
+
export function toRecord(hit, application) {
|
|
148
|
+
const base = {
|
|
149
|
+
binding: GAZETTE_BINDING[application],
|
|
150
|
+
content_urls: pickContentUrls(hit),
|
|
151
|
+
document_number: hit.documentNumber,
|
|
152
|
+
...(hit.contentUrls.authentic !== undefined && {
|
|
153
|
+
authentic_pdf_url: hit.contentUrls.authentic,
|
|
154
|
+
}),
|
|
155
|
+
...(hit.documentUrl !== undefined && { document_url: hit.documentUrl }),
|
|
156
|
+
};
|
|
157
|
+
const issuer = hit.submitter ?? hit.organ;
|
|
158
|
+
const md = hit.metadata;
|
|
159
|
+
if (md.controller === 'Bundesrecht') {
|
|
160
|
+
return {
|
|
161
|
+
...base,
|
|
162
|
+
...(md.alexUrl !== undefined && { alex_url: md.alexUrl }),
|
|
163
|
+
...(md.eli !== undefined && { eli: md.eli }),
|
|
164
|
+
...(md.gazetteNumber !== undefined && { gazette_number: md.gazetteNumber }),
|
|
165
|
+
...(issuer !== undefined && { issuer }),
|
|
166
|
+
...(md.part !== undefined && { part: md.part }),
|
|
167
|
+
...(md.publishedDate !== undefined && { published: md.publishedDate }),
|
|
168
|
+
...(md.shortTitle !== undefined && { short_title: md.shortTitle }),
|
|
169
|
+
...(md.title !== undefined && { title: md.title }),
|
|
170
|
+
...(md.normType !== undefined && { type: md.normType }),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if (md.controller === 'Landesrecht') {
|
|
174
|
+
return {
|
|
175
|
+
...base,
|
|
176
|
+
...(md.eli !== undefined && { eli: md.eli }),
|
|
177
|
+
...(md.gazetteNumber !== undefined && { gazette_number: md.gazetteNumber }),
|
|
178
|
+
...(issuer !== undefined && { issuer }),
|
|
179
|
+
...(md.publishedDate !== undefined && { published: md.publishedDate }),
|
|
180
|
+
...(md.shortTitle !== undefined && { short_title: md.shortTitle }),
|
|
181
|
+
...(md.title !== undefined && { title: md.title }),
|
|
182
|
+
...(md.normType !== undefined && { type: md.normType }),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
if (md.controller === 'Bezirke') {
|
|
186
|
+
return {
|
|
187
|
+
...base,
|
|
188
|
+
...(md.districtAuthority !== undefined && { district_authority: md.districtAuthority }),
|
|
189
|
+
...(md.gazetteNumber !== undefined && { gazette_number: md.gazetteNumber }),
|
|
190
|
+
...(issuer !== undefined && { issuer }),
|
|
191
|
+
...(md.publishedDate !== undefined && { published: md.publishedDate }),
|
|
192
|
+
...(md.shortTitle !== undefined && { short_title: md.shortTitle }),
|
|
193
|
+
...(md.title !== undefined && { title: md.title }),
|
|
194
|
+
...(md.normType !== undefined && { type: md.normType }),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
if (md.controller === 'Gemeinden') {
|
|
198
|
+
return {
|
|
199
|
+
...base,
|
|
200
|
+
...(md.gazetteNumber !== undefined && { gazette_number: md.gazetteNumber }),
|
|
201
|
+
...(issuer !== undefined && { issuer }),
|
|
202
|
+
...(md.municipality !== undefined && { municipality: md.municipality }),
|
|
203
|
+
...(md.publishedDate !== undefined && { published: md.publishedDate }),
|
|
204
|
+
...(md.shortTitle !== undefined && { short_title: md.shortTitle }),
|
|
205
|
+
...(md.title !== undefined && { title: md.title }),
|
|
206
|
+
...(md.normType !== undefined && { type: md.normType }),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
return base;
|
|
210
|
+
}
|
|
211
|
+
export const risSearchGazette = tool('ris_search_gazette', {
|
|
212
|
+
title: 'Search Austrian Gazettes',
|
|
213
|
+
description: 'Browse Austria’s promulgation record — the authentic, legally binding gazettes — at every level of government. scope picks the jurisdiction: federal (default; the Bundesgesetzblatt across three era tiers auto-routed by year — BgblAuth 2004+ authentic, BgblPdf 1945–2003, BgblAlt 1848–1940 metadata-only ÖNB scans), one Bundesland (its Landesgesetzblatt), district (Bezirke promulgations), or municipal (Gemeinde promulgations). For a state scope, series selects law gazettes (law_gazette, the default → LGBl) vs ordinance gazettes (ordinance_gazette → Verordnungsblätter, currently Tirol only), and include_non_authentic adds the historical non-authentic state gazette (Niederösterreich’s systematic LgblNO, or the older Lgbl elsewhere). Filter by query (full text), title, number ("171/2026" — a pre-2004 number auto-routes to the right era tier), part (federal I/II/III or pre_1997), type (laws/regulations/announcements/other), published_from/to, issuer (federal or ordinance gazettes only), district_authority (district only), or municipality (municipal only). Every result carries a binding label (authentic vs historical_record vs consolidated_informational) and the amtssigniert authentic PDF wherever it exists — the binding artifact, never a paraphrase. For one known gazette number, ris_lookup_citation resolves it directly. Coverage windows, era tiers, and part semantics: ris_list_reference topic applications or gazette_parts.',
|
|
214
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
215
|
+
input: z.object({
|
|
216
|
+
scope: z
|
|
217
|
+
.enum(GAZETTE_SCOPE_VALUES)
|
|
218
|
+
.default('federal')
|
|
219
|
+
.describe('Jurisdiction level: federal (default — the Bundesgesetzblatt, era tier auto-routed), a Bundesland (burgenland … wien, its Landesgesetzblatt), district (Bezirke promulgations), or municipal (Gemeinde promulgations).'),
|
|
220
|
+
series: z
|
|
221
|
+
.enum(['law_gazette', 'ordinance_gazette'])
|
|
222
|
+
.optional()
|
|
223
|
+
.describe('State scopes only. law_gazette (default when omitted) searches the authentic Landesgesetzblatt; ordinance_gazette searches the Verordnungsblätter (Vbl — currently Tirol only, 2022+).'),
|
|
224
|
+
include_non_authentic: z
|
|
225
|
+
.boolean()
|
|
226
|
+
.optional()
|
|
227
|
+
.describe('State scopes only. Adds the historical non-authentic state gazette — Niederösterreich’s systematic LgblNO, or the older Lgbl for the other Bundesländer (Wien is not carried).'),
|
|
228
|
+
query: z
|
|
229
|
+
.string()
|
|
230
|
+
.optional()
|
|
231
|
+
.describe('Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Syntax: ris_list_reference topic search_syntax.'),
|
|
232
|
+
title: z
|
|
233
|
+
.string()
|
|
234
|
+
.optional()
|
|
235
|
+
.describe('Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it.'),
|
|
236
|
+
number: z
|
|
237
|
+
.string()
|
|
238
|
+
.optional()
|
|
239
|
+
.describe('Gazette number, e.g. "171/2026" or "BGBl. II Nr. 171/2026" (federal), "61/2026" (state), a Kundmachungsnummer (district/municipal). A trailing year routes a federal query to the right era tier; a bare number searches the current tier.'),
|
|
240
|
+
part: z
|
|
241
|
+
.enum(['part1', 'part2', 'part3', 'pre_1997'])
|
|
242
|
+
.optional()
|
|
243
|
+
.describe('Federal only. part1 (Gesetze) | part2 (Verordnungen) | part3 (Staatsverträge) — parts exist from 1997; pre_1997 searches the older partless BGBl (routes to the 1945–2003 tier). Semantics: ris_list_reference topic gazette_parts.'),
|
|
244
|
+
type: z
|
|
245
|
+
.enum(['laws', 'regulations', 'announcements', 'other'])
|
|
246
|
+
.optional()
|
|
247
|
+
.describe('Document-type filter (Typ) for federal and state law gazettes: laws (Gesetze) | regulations (Verordnungen) | announcements (Kundmachungen) | other (Sonstiges).'),
|
|
248
|
+
published_from: isoDateString
|
|
249
|
+
.optional()
|
|
250
|
+
.describe('Earliest promulgation date (YYYY-MM-DD). A pre-2004 range routes a federal query to an earlier era tier.'),
|
|
251
|
+
published_to: isoDateString.optional().describe('Latest promulgation date (YYYY-MM-DD).'),
|
|
252
|
+
issuer: z
|
|
253
|
+
.string()
|
|
254
|
+
.optional()
|
|
255
|
+
.describe('Issuing body — federal (EinbringendeStelle, e.g. "BMF") or ordinance gazettes (Vbl Einbringer: Landeshauptmann/frau, Landesregierung, Amt der Landesregierung, Sonstige Landesbehörden) only. Phrase field.'),
|
|
256
|
+
district_authority: z
|
|
257
|
+
.string()
|
|
258
|
+
.optional()
|
|
259
|
+
.describe('District only. Bezirksverwaltungsbehörde name, e.g. "Bezirkshauptmannschaft Liezen" — full list: ris_list_reference topic district_authorities.'),
|
|
260
|
+
municipality: z
|
|
261
|
+
.string()
|
|
262
|
+
.optional()
|
|
263
|
+
.describe('Municipal only. Exact municipality name (Gemeinde), RIS’s spelling.'),
|
|
264
|
+
sort_by: z
|
|
265
|
+
.enum(['published', 'number'])
|
|
266
|
+
.optional()
|
|
267
|
+
.describe('Sort column: published (Kundmachungsdatum) or number. Availability varies by tier; default: upstream order.'),
|
|
268
|
+
sort_direction: z
|
|
269
|
+
.enum(['ascending', 'descending'])
|
|
270
|
+
.optional()
|
|
271
|
+
.describe('Sort direction; applies with sort_by.'),
|
|
272
|
+
page: z.number().int().min(1).optional().describe('1-based result page. Default 1.'),
|
|
273
|
+
page_size: z
|
|
274
|
+
.union([z.literal(10), z.literal(20), z.literal(50), z.literal(100)])
|
|
275
|
+
.optional()
|
|
276
|
+
.describe('Documents per page — RIS accepts 10, 20, 50, or 100. Default 20.'),
|
|
277
|
+
}),
|
|
278
|
+
output: z.object({
|
|
279
|
+
results: z
|
|
280
|
+
.array(GazetteRecordSchema)
|
|
281
|
+
.describe('Matching gazette entries for the requested page. Totals, paging, and the served application in enrichment.'),
|
|
282
|
+
}),
|
|
283
|
+
enrichment: {
|
|
284
|
+
totalCount: z.number().describe('Total matching entries across all pages.'),
|
|
285
|
+
page: z.number().describe('1-based page number RIS served.'),
|
|
286
|
+
pageSize: z.number().describe('Page size RIS applied.'),
|
|
287
|
+
truncated: z
|
|
288
|
+
.boolean()
|
|
289
|
+
.optional()
|
|
290
|
+
.describe('Present and true when more pages exist beyond this one — raise page to continue.'),
|
|
291
|
+
servedApplication: z
|
|
292
|
+
.string()
|
|
293
|
+
.describe('The RIS application that served the query — for federal, the era tier auto-routed by year (BgblAuth 2004+, BgblPdf 1945–2003, BgblAlt 1848–1940); otherwise the resolved state/district/municipal application.'),
|
|
294
|
+
notice: z
|
|
295
|
+
.string()
|
|
296
|
+
.optional()
|
|
297
|
+
.describe('Zero-hit guidance — names the likely cause and the concrete next call.'),
|
|
298
|
+
},
|
|
299
|
+
errors: [
|
|
300
|
+
{
|
|
301
|
+
reason: 'scope_filter_mismatch',
|
|
302
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
303
|
+
when: 'A filter was combined with a scope that does not support it (part off federal; series/include_non_authentic off a state scope; district_authority off district; municipality off municipal; issuer outside federal/ordinance gazettes) — rejected locally before any upstream call; the message names the offending pair.',
|
|
304
|
+
recovery: 'Drop the named filter or adjust scope: part applies only to scope: federal; series and include_non_authentic only to a state scope; district_authority only to scope: district; municipality only to scope: municipal; issuer only to federal or ordinance gazettes. Semantics: ris_list_reference topic gazette_parts or applications.',
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
reason: 'invalid_query',
|
|
308
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
309
|
+
when: 'RIS rejected a parameter value — the in-band Client error message is passed through verbatim; it names the invalid element and its valid values.',
|
|
310
|
+
recovery: 'Correct the parameter RIS names in the message. Part and type semantics: ris_list_reference topic gazette_parts or law_types.',
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
reason: 'upstream_error',
|
|
314
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
315
|
+
when: 'RIS is unreachable, returned a server error, or served an HTML error page.',
|
|
316
|
+
retryable: true,
|
|
317
|
+
recovery: 'RIS is temporarily unavailable — retry after a short delay. If it persists, reduce page_size or narrow the query.',
|
|
318
|
+
},
|
|
319
|
+
],
|
|
320
|
+
async handler(input, ctx) {
|
|
321
|
+
const { scope } = input;
|
|
322
|
+
const query = meaningful(input.query);
|
|
323
|
+
const title = meaningful(input.title);
|
|
324
|
+
const number = meaningful(input.number);
|
|
325
|
+
const publishedFrom = meaningful(input.published_from);
|
|
326
|
+
const publishedTo = meaningful(input.published_to);
|
|
327
|
+
const issuer = meaningful(input.issuer);
|
|
328
|
+
const districtAuthority = meaningful(input.district_authority);
|
|
329
|
+
const municipality = meaningful(input.municipality);
|
|
330
|
+
const { series } = input;
|
|
331
|
+
const includeNonAuthentic = input.include_non_authentic === true;
|
|
332
|
+
const isState = isStateScope(scope);
|
|
333
|
+
const fail = (message) => ctx.fail('scope_filter_mismatch', message, { ...ctx.recoveryFor('scope_filter_mismatch') });
|
|
334
|
+
if (input.part !== undefined && scope !== 'federal') {
|
|
335
|
+
throw fail(`part applies only to scope: federal — got scope: '${scope}'.`);
|
|
336
|
+
}
|
|
337
|
+
if (series !== undefined && !isState) {
|
|
338
|
+
throw fail(`series applies only to a state scope (a Bundesland) — got scope: '${scope}'.`);
|
|
339
|
+
}
|
|
340
|
+
if (includeNonAuthentic && !isState) {
|
|
341
|
+
throw fail(`include_non_authentic applies only to a state scope (a Bundesland) — got scope: '${scope}'.`);
|
|
342
|
+
}
|
|
343
|
+
if (districtAuthority !== undefined && scope !== 'district') {
|
|
344
|
+
throw fail(`district_authority applies only to scope: district — got scope: '${scope}'.`);
|
|
345
|
+
}
|
|
346
|
+
if (municipality !== undefined && scope !== 'municipal') {
|
|
347
|
+
throw fail(`municipality applies only to scope: municipal — got scope: '${scope}'.`);
|
|
348
|
+
}
|
|
349
|
+
if (issuer !== undefined &&
|
|
350
|
+
!(scope === 'federal' || (isState && series === 'ordinance_gazette'))) {
|
|
351
|
+
throw fail(`issuer applies only to federal or ordinance gazettes — got scope: '${scope}'${isState ? ' with law_gazette' : ''}.`);
|
|
352
|
+
}
|
|
353
|
+
let application;
|
|
354
|
+
let era;
|
|
355
|
+
if (scope === 'federal') {
|
|
356
|
+
const tier = resolveFederalTier(number, publishedFrom, publishedTo, input.part);
|
|
357
|
+
application = tier.application;
|
|
358
|
+
era = tier.era;
|
|
359
|
+
}
|
|
360
|
+
else if (scope === 'district') {
|
|
361
|
+
application = 'Bvb';
|
|
362
|
+
}
|
|
363
|
+
else if (scope === 'municipal') {
|
|
364
|
+
application = 'GrA';
|
|
365
|
+
}
|
|
366
|
+
else if (series === 'ordinance_gazette') {
|
|
367
|
+
application = 'Vbl';
|
|
368
|
+
}
|
|
369
|
+
else if (includeNonAuthentic) {
|
|
370
|
+
application = scope === 'niederoesterreich' ? 'LgblNO' : 'Lgbl';
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
application = 'LgblAuth';
|
|
374
|
+
}
|
|
375
|
+
// Vbl (Verordnungsblätter) resolves Tirol only upstream; a non-Tirol request would 500.
|
|
376
|
+
// Short-circuit to a zero-hit notice instead of a retryable upstream_error.
|
|
377
|
+
if (application === 'Vbl' && !VBL_COVERED.has(scope)) {
|
|
378
|
+
ctx.enrich.total(0);
|
|
379
|
+
ctx.enrich({
|
|
380
|
+
page: input.page ?? 1,
|
|
381
|
+
pageSize: input.page_size ?? 20,
|
|
382
|
+
servedApplication: application,
|
|
383
|
+
});
|
|
384
|
+
ctx.enrich.notice("0 gazette entries matched. Verordnungsblätter in RIS currently cover Tirol (2022+) — other states' ordinance gazettes are not yet published here.");
|
|
385
|
+
return { results: [] };
|
|
386
|
+
}
|
|
387
|
+
const stateForBuilder = isStateScope(scope) && application !== 'LgblNO' ? scope : undefined;
|
|
388
|
+
const params = {
|
|
389
|
+
application,
|
|
390
|
+
...(query !== undefined && { query }),
|
|
391
|
+
...(title !== undefined && { title }),
|
|
392
|
+
...(number !== undefined && { number }),
|
|
393
|
+
...(input.part !== undefined && { part: input.part }),
|
|
394
|
+
...(input.type !== undefined && { type: input.type }),
|
|
395
|
+
...(publishedFrom !== undefined && { publishedFrom }),
|
|
396
|
+
...(publishedTo !== undefined && { publishedTo }),
|
|
397
|
+
...(issuer !== undefined && { issuer }),
|
|
398
|
+
...(stateForBuilder !== undefined && { state: stateForBuilder }),
|
|
399
|
+
...(districtAuthority !== undefined && { districtAuthority }),
|
|
400
|
+
...(municipality !== undefined && { municipality }),
|
|
401
|
+
...(input.sort_by !== undefined && { sortBy: input.sort_by }),
|
|
402
|
+
...(input.sort_direction !== undefined && { sortDirection: input.sort_direction }),
|
|
403
|
+
...(input.page !== undefined && { page: input.page }),
|
|
404
|
+
...(input.page_size !== undefined && { pageSize: input.page_size }),
|
|
405
|
+
};
|
|
406
|
+
// Map in-band RIS errors onto this tool's declared contract so reason +
|
|
407
|
+
// recovery reach the wire (service-level throws carry neither).
|
|
408
|
+
const result = await getRisService()
|
|
409
|
+
.searchGazette(params, ctx)
|
|
410
|
+
.catch((err) => {
|
|
411
|
+
if (err instanceof McpError && err.code === JsonRpcErrorCode.InvalidParams) {
|
|
412
|
+
throw ctx.fail('invalid_query', err.message, { ...ctx.recoveryFor('invalid_query') });
|
|
413
|
+
}
|
|
414
|
+
if (err instanceof McpError && err.code === JsonRpcErrorCode.ServiceUnavailable) {
|
|
415
|
+
throw ctx.fail('upstream_error', err.message, { ...ctx.recoveryFor('upstream_error') });
|
|
416
|
+
}
|
|
417
|
+
throw err;
|
|
418
|
+
});
|
|
419
|
+
ctx.log.info('Gazette search completed', {
|
|
420
|
+
application,
|
|
421
|
+
hits: result.hits.length,
|
|
422
|
+
total: result.total,
|
|
423
|
+
});
|
|
424
|
+
ctx.enrich.total(result.total);
|
|
425
|
+
ctx.enrich({ page: result.page, pageSize: result.pageSize, servedApplication: application });
|
|
426
|
+
if (result.total > (result.page - 1) * result.pageSize + result.hits.length) {
|
|
427
|
+
ctx.enrich({ truncated: true });
|
|
428
|
+
}
|
|
429
|
+
if (result.total === 0) {
|
|
430
|
+
const fragments = ['0 gazette entries matched.'];
|
|
431
|
+
if (number !== undefined) {
|
|
432
|
+
fragments.push("Verify part and year — a 'BGBl. II' number returns nothing when filtered to part1. For a single known number, ris_lookup_citation resolves it directly (and routes pre-2004 numbers to the right era tier).");
|
|
433
|
+
}
|
|
434
|
+
if (number !== undefined && input.part !== undefined) {
|
|
435
|
+
const romanInNumber = /\bI{1,3}\b/.exec(number)?.[0];
|
|
436
|
+
const partRoman = PART_ROMAN[input.part];
|
|
437
|
+
if (romanInNumber !== undefined && partRoman !== undefined && romanInNumber !== partRoman) {
|
|
438
|
+
fragments.push(`number names part ${romanInNumber} but the part filter is ${partRoman} — drop one.`);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
if (issuer !== undefined) {
|
|
442
|
+
fragments.push("issuer is a phrase field — try the ministry abbreviation with a trailing * ('BMK*').");
|
|
443
|
+
}
|
|
444
|
+
if (scope === 'federal' && (era === 'postwar' || era === 'imperial')) {
|
|
445
|
+
const tier = era === 'postwar' ? 'BgblPdf 1945–2003' : 'BgblAlt 1848–1940';
|
|
446
|
+
fragments.push(`Range served by ${tier}; pre-1848 gazettes are not in RIS. BgblAlt is metadata-only — scans are ÖNB-hosted.`);
|
|
447
|
+
}
|
|
448
|
+
if (scope === 'district') {
|
|
449
|
+
fragments.push('District promulgations cover NÖ (2021+), OÖ/Tirol (2022+), Vorarlberg (2022-07+), Burgenland (2023+), Steiermark (2013+); Salzburg districts publish in the Salzburg LGBl. Windows: ris_list_reference topic applications.');
|
|
450
|
+
}
|
|
451
|
+
if (isState && series === 'ordinance_gazette') {
|
|
452
|
+
fragments.push("Verordnungsblätter in RIS currently cover Tirol (2022+) — other states' ordinance gazettes are not yet published here.");
|
|
453
|
+
}
|
|
454
|
+
ctx.enrich.notice(fragments.join(' '));
|
|
455
|
+
}
|
|
456
|
+
return { results: result.hits.map((hit) => toRecord(hit, application)) };
|
|
457
|
+
},
|
|
458
|
+
// format() populates content[] — the markdown twin of structuredContent. Every output
|
|
459
|
+
// field renders here; totals, paging, and the served application ride the enrichment trailer.
|
|
460
|
+
format: (result) => {
|
|
461
|
+
if (result.results.length === 0) {
|
|
462
|
+
return [{ type: 'text', text: '_No gazette entries on this page._' }];
|
|
463
|
+
}
|
|
464
|
+
const blocks = result.results.map((r) => {
|
|
465
|
+
const lines = [`## ${r.title ?? r.short_title ?? r.gazette_number ?? r.document_number}`];
|
|
466
|
+
lines.push(`**Document:** ${r.document_number}`);
|
|
467
|
+
const facts = [];
|
|
468
|
+
if (r.gazette_number !== undefined)
|
|
469
|
+
facts.push(`**Number:** ${r.gazette_number}`);
|
|
470
|
+
if (r.part !== undefined)
|
|
471
|
+
facts.push(`**Part:** ${r.part}`);
|
|
472
|
+
if (r.type !== undefined)
|
|
473
|
+
facts.push(`**Type:** ${r.type}`);
|
|
474
|
+
if (r.published !== undefined)
|
|
475
|
+
facts.push(`**Published:** ${r.published}`);
|
|
476
|
+
if (facts.length > 0)
|
|
477
|
+
lines.push(facts.join(' | '));
|
|
478
|
+
const origin = [];
|
|
479
|
+
if (r.issuer !== undefined)
|
|
480
|
+
origin.push(`**Issuer:** ${r.issuer}`);
|
|
481
|
+
if (r.district_authority !== undefined) {
|
|
482
|
+
origin.push(`**District authority:** ${r.district_authority}`);
|
|
483
|
+
}
|
|
484
|
+
if (r.municipality !== undefined)
|
|
485
|
+
origin.push(`**Municipality:** ${r.municipality}`);
|
|
486
|
+
if (origin.length > 0)
|
|
487
|
+
lines.push(origin.join(' | '));
|
|
488
|
+
if (r.short_title !== undefined)
|
|
489
|
+
lines.push(`**Short title:** ${r.short_title}`);
|
|
490
|
+
lines.push(`**Binding:** ${r.binding}`);
|
|
491
|
+
if (r.eli !== undefined)
|
|
492
|
+
lines.push(`**ELI:** ${r.eli}`);
|
|
493
|
+
if (r.authentic_pdf_url !== undefined)
|
|
494
|
+
lines.push(`**Authentic PDF:** ${r.authentic_pdf_url}`);
|
|
495
|
+
if (r.alex_url !== undefined)
|
|
496
|
+
lines.push(`**ÖNB scan:** ${r.alex_url}`);
|
|
497
|
+
const urls = ['html', 'pdf', 'rtf', 'xml']
|
|
498
|
+
.filter((key) => r.content_urls[key] !== undefined)
|
|
499
|
+
.map((key) => `[${key.toUpperCase()}](${r.content_urls[key]})`);
|
|
500
|
+
if (urls.length > 0)
|
|
501
|
+
lines.push(`**Text:** ${urls.join(' · ')}`);
|
|
502
|
+
if (r.document_url !== undefined)
|
|
503
|
+
lines.push(`**RIS view:** ${r.document_url}`);
|
|
504
|
+
return lines.join('\n');
|
|
505
|
+
});
|
|
506
|
+
return [{ type: 'text', text: blocks.join('\n\n') }];
|
|
507
|
+
},
|
|
508
|
+
});
|
|
509
|
+
//# sourceMappingURL=ris-search-gazette.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ris-search-gazette.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/ris-search-gazette.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAM/D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAsC,CAAC;AACvF,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,GAAG,WAAW,EAAE,UAAU,EAAE,WAAW,CAK/E,CAAC;AACF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,WAAW,CAAC,CAAC;AAEpD,4FAA4F;AAC5F,MAAM,eAAe,GAGjB;IACF,OAAO,EAAE,mBAAmB;IAC5B,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,mBAAmB;IAC5B,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,4BAA4B;IACpC,GAAG,EAAE,WAAW;CACjB,CAAC;AAEF,mGAAmG;AACnG,MAAM,UAAU,GAAsE;IACpF,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,4FAA4F;AAC5F,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAI/C,iEAAiE;AACjE,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,wGAAwG;AACxG,SAAS,cAAc,CAAC,MAA0B;IAChD,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED,oEAAoE;AACpE,SAAS,YAAY,CAAC,IAAwB;IAC5C,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACzB,MAA0B,EAC1B,aAAiC,EACjC,WAA+B,EAC/B,IAAiC;IAEjC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IAChG,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAC3F,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IACpE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;AACrD,CAAC;AAED,mEAAmE;AACnE,SAAS,UAAU,CAAC,KAAyB;IAC3C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAChF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC3D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACzD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CAC1D,CAAC;KACD,QAAQ,CACP,2KAA2K,CAC5K,CAAC;AAEJ,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CACP,6LAA6L,CAC9L;IACH,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qGAAqG,CACtG;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kFAAkF,CAAC;IAC/F,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,kGAAkG,CACnG;IACH,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qEAAqE,CAAC;IAClF,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,yFAAyF,CAC1F;IACH,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gFAAgF,CAAC;IAC7F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACnF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACvF,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;IAC1F,OAAO,EAAE,CAAC;SACP,IAAI,CAAC,CAAC,WAAW,EAAE,4BAA4B,EAAE,mBAAmB,CAAC,CAAC;SACtE,QAAQ,CACP,qPAAqP,CACtP;IACH,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,kIAAkI,CACnI;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,yKAAyK,CAC1K;IACH,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,YAAY,EAAE,iBAAiB;CAChC,CAAC;KACD,QAAQ,CAAC,kDAAkD,CAAC,CAAC;AAIhE,8DAA8D;AAC9D,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC;IAChD,OAAO;QACL,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC;QACjC,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,WAA+B;IACnE,MAAM,IAAI,GAAkB;QAC1B,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC;QACrC,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC;QAClC,eAAe,EAAE,GAAG,CAAC,cAAc;QACnC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS,IAAI;YAC7C,iBAAiB,EAAE,GAAG,CAAC,WAAW,CAAC,SAAS;SAC7C,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;KACxE,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC;IAC1C,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC;IACxB,IAAI,EAAE,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;QACpC,OAAO;YACL,GAAG,IAAI;YACP,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;YACzD,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;YAC5C,GAAG,CAAC,EAAE,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC;YAC3E,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;YAC/C,GAAG,CAAC,EAAE,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC;YACtE,GAAG,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;YAClE,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;YAClD,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;QACpC,OAAO;YACL,GAAG,IAAI;YACP,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;YAC5C,GAAG,CAAC,EAAE,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC;YAC3E,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,GAAG,CAAC,EAAE,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC;YACtE,GAAG,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;YAClE,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;YAClD,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO;YACL,GAAG,IAAI;YACP,GAAG,CAAC,EAAE,CAAC,iBAAiB,KAAK,SAAS,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAAC;YACvF,GAAG,CAAC,EAAE,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC;YAC3E,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,GAAG,CAAC,EAAE,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC;YACtE,GAAG,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;YAClE,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;YAClD,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO;YACL,GAAG,IAAI;YACP,GAAG,CAAC,EAAE,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC;YAC3E,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,GAAG,CAAC,EAAE,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC;YACvE,GAAG,CAAC,EAAE,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC;YACtE,GAAG,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;YAClE,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;YAClD,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE;IACzD,KAAK,EAAE,0BAA0B;IACjC,WAAW,EACT,i6CAAi6C;IACn6C,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,oBAAoB,CAAC;aAC1B,OAAO,CAAC,SAAS,CAAC;aAClB,QAAQ,CACP,wNAAwN,CACzN;QACH,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;aAC1C,QAAQ,EAAE;aACV,QAAQ,CACP,wLAAwL,CACzL;QACH,qBAAqB,EAAE,CAAC;aACrB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,gLAAgL,CACjL;QACH,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,yLAAyL,CAC1L;QACH,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,kGAAkG,CACnG;QACH,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,4OAA4O,CAC7O;QACH,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;aAC7C,QAAQ,EAAE;aACV,QAAQ,CACP,qOAAqO,CACtO;QACH,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;aACvD,QAAQ,EAAE;aACV,QAAQ,CACP,iKAAiK,CAClK;QACH,cAAc,EAAE,aAAa;aAC1B,QAAQ,EAAE;aACV,QAAQ,CACP,0GAA0G,CAC3G;QACH,YAAY,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QACzF,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,6MAA6M,CAC9M;QACH,kBAAkB,EAAE,CAAC;aAClB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,iJAAiJ,CAClJ;QACH,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,qEAAqE,CAAC;QAClF,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;aAC7B,QAAQ,EAAE;aACV,QAAQ,CACP,6GAA6G,CAC9G;QACH,cAAc,EAAE,CAAC;aACd,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;aACjC,QAAQ,EAAE;aACV,QAAQ,CAAC,uCAAuC,CAAC;QACpD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACpF,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;aACpE,QAAQ,EAAE;aACV,QAAQ,CAAC,kEAAkE,CAAC;KAChF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC;aACP,KAAK,CAAC,mBAAmB,CAAC;aAC1B,QAAQ,CACP,4GAA4G,CAC7G;KACJ,CAAC;IACF,UAAU,EAAE;QACV,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QAC3E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACvD,SAAS,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,kFAAkF,CAAC;QAC/F,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,QAAQ,CACP,gNAAgN,CACjN;QACH,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,wEAAwE,CAAC;KACtF;IACD,MAAM,EAAE;QACN;YACE,MAAM,EAAE,uBAAuB;YAC/B,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,2TAA2T;YACjU,QAAQ,EACN,yUAAyU;SAC5U;QACD;YACE,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,kJAAkJ;YACxJ,QAAQ,EACN,+HAA+H;SAClI;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,4EAA4E;YAClF,SAAS,EAAE,IAAI;YACf,QAAQ,EACN,mHAAmH;SACtH;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACzB,MAAM,mBAAmB,GAAG,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC;QACjE,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAEpC,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,EAAE,CAC/B,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAE9F,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,qDAAqD,KAAK,IAAI,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,qEAAqE,KAAK,IAAI,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,IAAI,CACR,oFAAoF,KAAK,IAAI,CAC9F,CAAC;QACJ,CAAC;QACD,IAAI,iBAAiB,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YAC5D,MAAM,IAAI,CAAC,oEAAoE,KAAK,IAAI,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,YAAY,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YACxD,MAAM,IAAI,CAAC,+DAA+D,KAAK,IAAI,CAAC,CAAC;QACvF,CAAC;QACD,IACE,MAAM,KAAK,SAAS;YACpB,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,mBAAmB,CAAC,CAAC,EACrE,CAAC;YACD,MAAM,IAAI,CACR,sEAAsE,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,CACrH,CAAC;QACJ,CAAC;QAED,IAAI,WAA+B,CAAC;QACpC,IAAI,GAA2B,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAChF,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACjB,CAAC;aAAM,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YACjC,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;YAC1C,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IAAI,mBAAmB,EAAE,CAAC;YAC/B,WAAW,GAAG,KAAK,KAAK,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,UAAU,CAAC;QAC3B,CAAC;QAED,wFAAwF;QACxF,4EAA4E;QAC5E,IAAI,WAAW,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC;gBACT,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC;gBACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;gBAC/B,iBAAiB,EAAE,WAAW;aAC/B,CAAC,CAAC;YACH,GAAG,CAAC,MAAM,CAAC,MAAM,CACf,mJAAmJ,CACpJ,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,eAAe,GACnB,YAAY,CAAC,KAAK,CAAC,IAAI,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtE,MAAM,MAAM,GAAwB;YAClC,WAAW;YACX,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC;YACrC,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACrD,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACrD,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,CAAC;YACrD,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC;YACjD,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,GAAG,CAAC,eAAe,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;YAChE,GAAG,CAAC,iBAAiB,KAAK,SAAS,IAAI,EAAE,iBAAiB,EAAE,CAAC;YAC7D,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,CAAC;YACnD,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAC7D,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YAClF,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACrD,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;SACpE,CAAC;QAEF,wEAAwE;QACxE,gEAAgE;QAChE,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE;aACjC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC;aAC1B,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,aAAa,EAAE,CAAC;gBAC3E,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;gBAChF,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QACL,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE;YACvC,WAAW;YACX,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YACxB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7F,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5E,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,CAAC,4BAA4B,CAAC,CAAC;YACjD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,SAAS,CAAC,IAAI,CACZ,6MAA6M,CAC9M,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACrD,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,aAAa,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;oBAC1F,SAAS,CAAC,IAAI,CACZ,qBAAqB,aAAa,2BAA2B,SAAS,cAAc,CACrF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,SAAS,CAAC,IAAI,CACZ,sFAAsF,CACvF,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,UAAU,CAAC,EAAE,CAAC;gBACrE,MAAM,IAAI,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;gBAC3E,SAAS,CAAC,IAAI,CACZ,mBAAmB,IAAI,sFAAsF,CAC9G,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;gBACzB,SAAS,CAAC,IAAI,CACZ,4NAA4N,CAC7N,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBAC9C,SAAS,CAAC,IAAI,CACZ,wHAAwH,CACzH,CAAC;YACJ,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED,sFAAsF;IACtF,8FAA8F;IAC9F,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YAC1F,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YACjD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACpD,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;YACrF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACjF,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,CAAC,iBAAiB,KAAK,SAAS;gBACnC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxE,MAAM,IAAI,GAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAW;iBAClD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;iBAClD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;YAChF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;CACF,CAAC,CAAC"}
|