@undefineds.co/xpod 0.3.18 → 0.3.23
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/config/bun.json +57 -11
- package/config/cloud.json +14 -12
- package/config/local.json +16 -14
- package/config/xpod.json +47 -9
- package/dist/api/matrix/PodMatrixStore.d.ts +4 -7
- package/dist/api/matrix/PodMatrixStore.js +116 -148
- package/dist/api/matrix/PodMatrixStore.js.map +1 -1
- package/dist/api/matrix/types.d.ts +2 -0
- package/dist/api/matrix/types.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +1 -0
- package/dist/api/runs/PiAgentRuntimeDriver.js +4 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/components/components.jsonld +3 -0
- package/dist/components/context.jsonld +71 -32
- package/dist/http/SubgraphSparqlHttpHandler.d.ts +1 -0
- package/dist/http/SubgraphSparqlHttpHandler.js +27 -4
- package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
- package/dist/http/SubgraphSparqlHttpHandler.jsonld +4 -0
- package/dist/http/vector/VectorHttpHandler.d.ts +5 -1
- package/dist/http/vector/VectorHttpHandler.js +5 -5
- package/dist/http/vector/VectorHttpHandler.js.map +1 -1
- package/dist/http/vector/VectorHttpHandler.jsonld +40 -28
- package/dist/index.d.ts +5 -2
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/runtime/Proxy.d.ts +3 -0
- package/dist/runtime/Proxy.js +31 -7
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/solidfs/LocalSolidFS.js +31 -124
- package/dist/solidfs/LocalSolidFS.js.map +1 -1
- package/dist/solidfs/SolidFsPathUtils.d.ts +13 -0
- package/dist/solidfs/SolidFsPathUtils.js +114 -0
- package/dist/solidfs/SolidFsPathUtils.js.map +1 -0
- package/dist/solidfs/SolidFsSyncJournal.d.ts +117 -0
- package/dist/solidfs/SolidFsSyncJournal.js +553 -0
- package/dist/solidfs/SolidFsSyncJournal.js.map +1 -0
- package/dist/solidfs/index.d.ts +1 -0
- package/dist/solidfs/index.js +1 -0
- package/dist/solidfs/index.js.map +1 -1
- package/dist/solidfs/types.d.ts +1 -0
- package/dist/solidfs/types.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.js +94 -33
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.d.ts +22 -5
- package/dist/storage/accessors/MixDataAccessor.js +376 -61
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +73 -5
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +32 -10
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +28 -6
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +45 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.js +277 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +161 -0
- package/dist/storage/rdf/Rdf3xIndex.d.ts +122 -0
- package/dist/storage/rdf/Rdf3xIndex.js +2695 -0
- package/dist/storage/rdf/Rdf3xIndex.js.map +1 -0
- package/dist/storage/rdf/Rdf3xIndex.jsonld +528 -0
- package/dist/storage/rdf/Rdf3xSchema.d.ts +20 -0
- package/dist/storage/rdf/Rdf3xSchema.js +65 -0
- package/dist/storage/rdf/Rdf3xSchema.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +10 -4
- package/dist/storage/rdf/RdfLocalQueryEngine.js +607 -127
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -1
- package/dist/storage/rdf/RdfQuadIndex.d.ts +12 -1
- package/dist/storage/rdf/RdfQuadIndex.js +152 -22
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
- package/dist/storage/rdf/RdfQuadIndex.jsonld +36 -4
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +20 -2
- package/dist/storage/rdf/RdfSparqlAdapter.js +364 -40
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +60 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +8 -0
- package/dist/storage/rdf/RdfTermDictionary.js +141 -70
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
- package/dist/storage/rdf/RdfTermDictionary.jsonld +24 -0
- package/dist/storage/rdf/RdfTextIndex.js +10 -3
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.d.ts +15 -6
- package/dist/storage/rdf/SolidRdfEngine.js +218 -25
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.jsonld +70 -7
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +11 -7
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +60 -47
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +9 -5
- package/dist/storage/rdf/index.d.ts +2 -2
- package/dist/storage/rdf/index.js +3 -3
- package/dist/storage/rdf/index.js.map +1 -1
- package/dist/storage/rdf/models-benchmark.d.ts +12 -1
- package/dist/storage/rdf/models-benchmark.js +549 -32
- package/dist/storage/rdf/models-benchmark.js.map +1 -1
- package/dist/storage/rdf/types.d.ts +81 -7
- package/dist/storage/rdf/types.js.map +1 -1
- package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +36 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.js +96 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.jsonld +123 -0
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +35 -0
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +112 -0
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -0
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +1 -36
- package/dist/storage/sparql/SubgraphQueryEngine.js +2 -115
- package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.jsonld +1 -124
- package/dist/terminal/AclPermissionService.d.ts +2 -1
- package/dist/terminal/AclPermissionService.js +26 -3
- package/dist/terminal/AclPermissionService.js.map +1 -1
- package/dist/terminal/TerminalSessionManager.js +25 -3
- package/dist/terminal/TerminalSessionManager.js.map +1 -1
- package/package.json +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +0 -55
- package/dist/storage/rdf/Rdf3xTripleIndex.js +0 -1235
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RdfSparqlAdapter.js","sourceRoot":"","sources":["../../../src/storage/rdf/RdfSparqlAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataFactory, termToId } from 'n3';\nimport { Parser, Wildcard } from 'sparqljs';\nimport type {\n AggregateExpression,\n BindPattern,\n BgpPattern,\n ConstructQuery,\n DescribeQuery,\n Expression,\n FilterPattern,\n FunctionCallExpression,\n GraphPattern,\n GraphQuads,\n Grouping,\n IriTerm,\n LiteralTerm,\n MinusPattern,\n OperationExpression,\n Ordering,\n Pattern,\n PropertyPath,\n SelectQuery,\n SparqlQuery,\n Term as SparqlTerm,\n Triple,\n Update,\n ValuePatternRow,\n ValuesPattern,\n Variable,\n VariableExpression,\n VariableTerm,\n} from 'sparqljs';\nimport type { NamedNode, Quad, Term } from '@rdfjs/types';\nimport type {\n RdfBindExpression,\n RdfLocalQuery,\n RdfBindingRow,\n RdfConstructTemplate,\n RdfQueryFilter,\n RdfQueryFilterOperator,\n RdfQueryFilterValue,\n RdfQueryAggregate,\n RdfQueryBind,\n RdfQueryPattern,\n RdfQueryTermPattern,\n RdfUnionQueryGroup,\n RdfValuesBindingSource,\n RdfUnionQueryBranch,\n RdfMinusQueryGroup,\n RdfExistsQueryGroup,\n RdfOptionalQueryGroup,\n} from './types';\nimport { variable as rdfVar } from './RdfLocalQueryEngine';\n\nconst PATH_JOIN_VARIABLE_PREFIX = '__rdf_path';\nconst XPATH_FUNCTION_NS = 'http://www.w3.org/2005/xpath-functions#';\n\ninterface FixedPathSegment {\n predicates: IriTerm[];\n inverse: boolean;\n}\n\ninterface FixedAlternativePath {\n predicates: IriTerm[];\n inverse: boolean;\n}\n\ninterface RdfUpdateDatasetScope {\n hasUsing: boolean;\n defaultGraph?: RdfQueryTermPattern;\n namedGraph?: RdfQueryTermPattern;\n}\n\ninterface RdfQueryDatasetScope {\n defaultGraph?: RdfQueryTermPattern;\n namedGraph?: RdfQueryTermPattern;\n}\n\ninterface RdfQueryFromClause {\n default?: IriTerm[];\n named?: IriTerm[];\n}\n\ninterface OptionalFrame {\n patterns: RdfQueryPattern[];\n filters: RdfQueryFilter[];\n binds: RdfQueryBind[];\n unions: RdfUnionQueryGroup[];\n values: RdfValuesBindingSource[];\n optional: RdfOptionalQueryGroup[];\n minus: RdfMinusQueryGroup[];\n exists: RdfExistsQueryGroup[];\n}\n\nexport interface RdfSparqlCompileResult {\n query: RdfLocalQuery;\n variables: string[];\n queryType: 'SELECT' | 'ASK' | 'CONSTRUCT' | 'DESCRIBE';\n constructTemplate?: RdfConstructTemplate[];\n describeTargets?: RdfQueryTermPattern[];\n}\n\nexport interface RdfSparqlInsertOperation {\n type: 'insert';\n quads: Quad[];\n}\n\nexport interface RdfSparqlDeleteOperation {\n type: 'delete';\n quads: Quad[];\n}\n\nexport interface RdfSparqlDeleteWhereTemplate {\n graph: RdfQueryTermPattern;\n subject: RdfQueryTermPattern;\n predicate: RdfQueryTermPattern;\n object: RdfQueryTermPattern;\n}\n\nexport type RdfSparqlUpdateTemplate = RdfSparqlDeleteWhereTemplate;\n\nexport interface RdfSparqlDeleteWhereOperation {\n type: 'deleteWhere';\n query: RdfLocalQuery;\n template: RdfSparqlUpdateTemplate[];\n}\n\nexport interface RdfSparqlInsertDeleteWhereOperation {\n type: 'insertDeleteWhere';\n query: RdfLocalQuery;\n deletes: RdfSparqlUpdateTemplate[];\n inserts: RdfSparqlUpdateTemplate[];\n}\n\nexport interface RdfSparqlInsertWhereOperation {\n type: 'insertWhere';\n query: RdfLocalQuery;\n inserts: RdfSparqlUpdateTemplate[];\n}\n\nexport type RdfSparqlUpdateDeltaOperation =\n | RdfSparqlInsertOperation\n | RdfSparqlDeleteOperation\n | RdfSparqlDeleteWhereOperation\n | RdfSparqlInsertDeleteWhereOperation\n | RdfSparqlInsertWhereOperation;\n\nexport interface RdfSparqlUpdateDelta {\n operations: RdfSparqlUpdateDeltaOperation[];\n inserts: Quad[];\n deletes: Quad[];\n}\n\nexport class UnsupportedSparqlQueryError extends Error {\n public constructor(message: string) {\n super(message);\n this.name = 'UnsupportedSparqlQueryError';\n }\n}\n\nexport class DisabledSparqlFeatureError extends Error {\n public constructor(message: string) {\n super(message);\n this.name = 'DisabledSparqlFeatureError';\n }\n}\n\nexport class RdfSparqlAdapter {\n public compile(query: string | SparqlQuery, basePath: string): RdfSparqlCompileResult {\n const parsed = typeof query === 'string'\n ? new Parser({ baseIRI: basePath }).parse(query)\n : query;\n\n if (parsed.type === 'update') {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE is handled by the compatibility engine');\n }\n const datasetScope = this.compileQueryDatasetScope(this.queryFromClause(parsed), basePath);\n const state = new CompileState(basePath);\n this.compilePatterns(parsed.where ?? [], datasetScope.defaultGraph, state, false, datasetScope.namedGraph);\n this.compileValuesRows(parsed.values ?? [], state);\n this.compileGroupBy((parsed as SelectQuery).group ?? [], state);\n if (parsed.queryType === 'SELECT') {\n state.query.orderBy = this.compileOrder((parsed as SelectQuery).order ?? [], state);\n }\n const variables = parsed.queryType === 'SELECT'\n ? this.compileSelectVariables(parsed, state)\n : [];\n if (parsed.queryType === 'SELECT') {\n state.query.having = this.compileHaving((parsed as SelectQuery).having ?? [], state);\n }\n state.assertBindVariablesSafe();\n state.assertValuesVariablesBoundByRequiredPatterns();\n state.assertDependentGroupsShareRequiredVariables();\n\n const constructTemplate = parsed.queryType === 'CONSTRUCT'\n ? this.compileConstructTemplate(parsed)\n : undefined;\n const describeTargets = parsed.queryType === 'DESCRIBE'\n ? this.compileDescribeTargets(parsed, state.query)\n : undefined;\n\n if (parsed.queryType === 'ASK') {\n state.query.limit = 1;\n } else if (parsed.queryType === 'SELECT') {\n state.query.select = variables.length > 0 ? variables : undefined;\n state.query.distinct = Boolean((parsed as SelectQuery).distinct);\n state.query.limit = parsed.limit;\n state.query.offset = parsed.offset;\n }\n\n return {\n query: state.query,\n variables,\n queryType: parsed.queryType,\n constructTemplate,\n describeTargets,\n };\n }\n\n public compileUpdateDelta(query: string | SparqlQuery, basePath: string): RdfSparqlUpdateDelta {\n const parsed = typeof query === 'string'\n ? new Parser({ baseIRI: basePath }).parse(query)\n : query;\n\n if (parsed.type !== 'update') {\n throw new UnsupportedSparqlQueryError('Only SPARQL UPDATE can compile into update delta');\n }\n\n const operations: RdfSparqlUpdateDeltaOperation[] = [];\n for (const update of (parsed as Update).updates) {\n if (!('updateType' in update)) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE management operations fallback to compatibility engine');\n }\n\n switch (update.updateType) {\n case 'insert':\n if (update.graph) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE WITH/default graph scope fallback to compatibility engine');\n }\n operations.push({\n type: 'insert',\n quads: this.compileUpdateGraphQuads(update.insert, basePath),\n });\n break;\n case 'delete':\n if (update.graph) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE WITH/default graph scope fallback to compatibility engine');\n }\n operations.push({\n type: 'delete',\n quads: this.compileUpdateGraphQuads(update.delete, basePath),\n });\n break;\n case 'deletewhere':\n if (update.graph) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE WITH/default graph scope fallback to compatibility engine');\n }\n operations.push(this.compileDeleteWhere(update.delete, basePath));\n break;\n case 'insertdelete':\n operations.push(this.compileInsertDeleteWhere(update, basePath));\n break;\n default:\n throw new UnsupportedSparqlQueryError('Unsupported SPARQL UPDATE operation fallback to compatibility engine');\n }\n }\n\n const inserts = operations\n .filter((operation) => operation.type === 'insert')\n .flatMap((operation) => operation.quads);\n const deletes = operations\n .filter((operation) => operation.type === 'delete')\n .flatMap((operation) => operation.quads);\n const deleteWhereCount = operations\n .reduce((sum, operation) => {\n if (operation.type === 'deleteWhere') {\n return sum + operation.template.length;\n }\n if (operation.type === 'insertDeleteWhere') {\n return sum + operation.deletes.length + operation.inserts.length;\n }\n if (operation.type === 'insertWhere') {\n return sum + operation.inserts.length;\n }\n return sum;\n }, 0);\n if (inserts.length + deletes.length + deleteWhereCount === 0) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE without data quads fallback to compatibility engine');\n }\n\n return { operations, inserts, deletes };\n }\n\n private compileDeleteWhere(items: Array<GraphQuads | BgpPattern>, basePath: string): RdfSparqlDeleteWhereOperation {\n const template = this.compileGraphQuadsTemplate(items, basePath, 'DELETE WHERE');\n return {\n type: 'deleteWhere',\n query: this.queryFromUpdateTemplate(template, 'DELETE WHERE'),\n template,\n };\n }\n\n private compileInsertDeleteWhere(\n update: Extract<Update['updates'][number], { updateType: 'insertdelete' }>,\n basePath: string,\n ): RdfSparqlInsertDeleteWhereOperation | RdfSparqlInsertWhereOperation | RdfSparqlDeleteWhereOperation {\n const hasInsertTemplate = (update.insert?.length ?? 0) > 0;\n const hasDeleteTemplate = (update.delete?.length ?? 0) > 0;\n if (!hasInsertTemplate && !hasDeleteTemplate) {\n throw new UnsupportedSparqlQueryError('DELETE/INSERT WHERE without DELETE or INSERT template fallback to compatibility engine');\n }\n const label = hasInsertTemplate && hasDeleteTemplate\n ? 'DELETE/INSERT WHERE'\n : hasInsertTemplate\n ? 'INSERT WHERE'\n : 'DELETE WHERE';\n const withGraph = this.compileWithGraph(update.graph, basePath, label);\n const using = this.compileUsingDatasetScope(update.using, basePath, label);\n const queryDefaultGraph = using.hasUsing\n ? using.defaultGraph ?? this.impossibleGraph(basePath)\n : withGraph;\n const queryNamedGraph = using.hasUsing\n ? using.namedGraph ?? this.impossibleGraph(basePath)\n : undefined;\n const query = this.queryFromUpdateWhere(update.where ?? [], basePath, label, {\n defaultGraph: queryDefaultGraph,\n namedGraph: queryNamedGraph,\n });\n const inserts = hasInsertTemplate\n ? this.compileGraphQuadsTemplate(update.insert ?? [], basePath, 'INSERT template', withGraph)\n : [];\n if (hasInsertTemplate && inserts.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without INSERT template fallback to compatibility engine`);\n }\n const deletes = hasDeleteTemplate\n ? this.compileGraphQuadsTemplate(update.delete ?? [], basePath, 'DELETE template', withGraph)\n : [];\n if (hasDeleteTemplate && deletes.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without DELETE template fallback to compatibility engine`);\n }\n if (hasInsertTemplate && !hasDeleteTemplate) {\n return {\n type: 'insertWhere',\n query,\n inserts,\n };\n }\n if (!hasInsertTemplate) {\n return {\n type: 'deleteWhere',\n query,\n template: deletes,\n };\n }\n return {\n type: 'insertDeleteWhere',\n query,\n deletes,\n inserts,\n };\n }\n\n private compileUsingDatasetScope(\n using: Extract<Update['updates'][number], { updateType: 'insertdelete' }>['using'],\n basePath: string,\n label: string,\n ): RdfUpdateDatasetScope {\n if (!using) {\n return { hasUsing: false };\n }\n\n const defaultGraphs = using.default ?? [];\n const namedGraphs = using.named ?? [];\n return {\n hasUsing: true,\n defaultGraph: this.compileUsingGraphs(defaultGraphs, basePath, label, 'USING'),\n namedGraph: this.compileUsingGraphs(namedGraphs, basePath, label, 'USING NAMED'),\n };\n }\n\n private compileUsingGraphs(\n graphs: IriTerm[],\n basePath: string,\n label: string,\n clause: string,\n ): RdfQueryTermPattern | undefined {\n if (graphs.length === 0) {\n return undefined;\n }\n const compiledGraphs: Term[] = graphs.map((graph) => {\n const compiled = this.compileGraphTerm(graph, basePath);\n if (compiled === null || isCompiledVariable(compiled)) {\n throw new UnsupportedSparqlQueryError(`${label} ${clause} graph outside basePath fallback to compatibility engine`);\n }\n return compiled as Term;\n });\n if (compiledGraphs.length === 1) {\n return compiledGraphs[0];\n }\n return { $in: uniqueTerms(compiledGraphs) };\n }\n\n private compileQueryDatasetScope(\n from: RdfQueryFromClause | undefined,\n basePath: string,\n ): RdfQueryDatasetScope {\n if (!from) {\n return {};\n }\n\n const defaultGraphs = from.default ?? [];\n const namedGraphs = from.named ?? [];\n return {\n defaultGraph: defaultGraphs.length > 0\n ? this.compileQueryDatasetGraphs(defaultGraphs, basePath, 'FROM')\n : namedGraphs.length > 0\n ? this.impossibleGraph(basePath)\n : undefined,\n namedGraph: namedGraphs.length > 0\n ? this.compileQueryDatasetGraphs(namedGraphs, basePath, 'FROM NAMED')\n : undefined,\n };\n }\n\n private compileQueryDatasetGraphs(\n graphs: IriTerm[],\n basePath: string,\n clause: string,\n ): RdfQueryTermPattern {\n const compiledGraphs: Term[] = graphs.map((graph) => {\n const compiled = this.compileGraphTerm(graph, basePath);\n if (compiled === null || isCompiledVariable(compiled)) {\n throw new DisabledSparqlFeatureError(`SPARQL ${clause} outside the server-owned Pod is disabled`);\n }\n return compiled as Term;\n });\n if (compiledGraphs.length === 1) {\n return compiledGraphs[0];\n }\n return { $in: uniqueTerms(compiledGraphs) };\n }\n\n private queryFromClause(query: SparqlQuery): RdfQueryFromClause | undefined {\n if (!('from' in query)) {\n return undefined;\n }\n return query.from;\n }\n\n private compileWithGraph(\n graph: IriTerm | undefined,\n basePath: string,\n label: string,\n ): RdfQueryTermPattern | undefined {\n if (!graph) {\n return undefined;\n }\n const compiled = this.compileGraphTerm(graph, basePath);\n if (compiled === null || isCompiledVariable(compiled)) {\n throw new UnsupportedSparqlQueryError(`${label} WITH graph outside basePath fallback to compatibility engine`);\n }\n return compiled;\n }\n\n private impossibleGraph(basePath: string): Term {\n return DataFactory.namedNode(`${basePath}__outside_graph_scope__`) as unknown as Term;\n }\n\n private queryFromUpdateWhere(\n patterns: Pattern[] | Array<GraphQuads | BgpPattern>,\n basePath: string,\n label: string,\n dataset: { defaultGraph?: RdfQueryTermPattern; namedGraph?: RdfQueryTermPattern } = {},\n ): RdfLocalQuery {\n if (patterns.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without WHERE patterns fallback to compatibility engine`);\n }\n const state = new CompileState(basePath);\n this.assertScopedUpdateWherePatterns(patterns as Pattern[], basePath, label, Boolean(dataset.defaultGraph), dataset.namedGraph);\n this.compilePatterns(patterns as Pattern[], dataset.defaultGraph, state, false, dataset.namedGraph);\n state.assertBindVariablesSafe();\n state.assertValuesVariablesBoundByRequiredPatterns();\n state.assertDependentGroupsShareRequiredVariables();\n if (state.query.patterns.length === 0 && (state.query.unions?.length ?? 0) === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without required graph BGP patterns fallback to compatibility engine`);\n }\n return state.query;\n }\n\n private queryFromUpdateTemplate(template: RdfSparqlUpdateTemplate[], label: string): RdfLocalQuery {\n if (template.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without WHERE patterns fallback to compatibility engine`);\n }\n return {\n patterns: template.map((pattern) => ({\n graph: pattern.graph,\n subject: pattern.subject,\n predicate: pattern.predicate,\n object: pattern.object,\n })),\n optional: [],\n filters: [],\n };\n }\n\n private compileGraphQuadsTemplate(\n items: Array<GraphQuads | BgpPattern>,\n basePath: string,\n label: string,\n defaultGraph?: RdfQueryTermPattern,\n ): RdfSparqlUpdateTemplate[] {\n const template: RdfSparqlUpdateTemplate[] = [];\n for (const item of items) {\n let graph = defaultGraph;\n if (item.type === 'graph') {\n if (item.name.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError(`${label} GRAPH variables fallback to compatibility engine`);\n }\n graph = this.compileGraphTerm(item.name, basePath) ?? undefined;\n } else if (!graph) {\n throw new UnsupportedSparqlQueryError(`${label} default graph fallback to compatibility engine`);\n }\n if (!graph || graph === null || isCompiledVariable(graph)) {\n throw new UnsupportedSparqlQueryError(`${label} graph outside basePath fallback to compatibility engine`);\n }\n const state = new CompileState(basePath);\n for (const triple of item.triples) {\n if (!isSimpleTerm(triple.predicate)) {\n throw new UnsupportedSparqlQueryError(`${label} property path templates fallback to compatibility engine`);\n }\n const patterns = this.compileTriple(triple, graph, state);\n if (patterns.length !== 1) {\n throw new UnsupportedSparqlQueryError(`${label} property path templates fallback to compatibility engine`);\n }\n const pattern = patterns[0];\n this.assertSafeUpdateTemplatePattern(pattern, label);\n template.push({\n graph,\n subject: pattern.subject as RdfQueryTermPattern,\n predicate: pattern.predicate as RdfQueryTermPattern,\n object: pattern.object as RdfQueryTermPattern,\n });\n }\n }\n return template;\n }\n\n private assertSafeUpdateTemplatePattern(pattern: RdfQueryPattern, label: string): void {\n const terms = [ pattern.subject, pattern.predicate, pattern.object ];\n if (terms.some((term) => term && 'termType' in term && term.termType === 'BlankNode')) {\n throw new UnsupportedSparqlQueryError(`${label} blank node templates fallback to compatibility engine`);\n }\n }\n\n private assertScopedUpdateWherePatterns(\n patterns: Pattern[],\n basePath: string,\n label: string,\n inGraph: boolean,\n namedGraph?: RdfQueryTermPattern,\n ): void {\n if (patterns.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without WHERE patterns fallback to compatibility engine`);\n }\n for (const pattern of patterns) {\n switch (pattern.type) {\n case 'graph':\n if (pattern.name.termType === 'Variable') {\n if (!namedGraph) {\n throw new UnsupportedSparqlQueryError(`${label} GRAPH variables fallback to compatibility engine`);\n }\n } else if (pattern.name.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError(`${label} GRAPH variables fallback to compatibility engine`);\n } else if (!pattern.name.value.startsWith(basePath)) {\n throw new UnsupportedSparqlQueryError(`${label} graph outside basePath fallback to compatibility engine`);\n }\n this.assertScopedUpdateWherePatterns(pattern.patterns, basePath, label, true, namedGraph);\n break;\n case 'bgp':\n if (!inGraph) {\n throw new UnsupportedSparqlQueryError(`${label} default graph fallback to compatibility engine`);\n }\n break;\n case 'optional':\n case 'group':\n this.assertScopedUpdateWherePatterns(pattern.patterns, basePath, label, inGraph, namedGraph);\n break;\n case 'union':\n for (const branch of pattern.patterns) {\n this.assertScopedUpdateWherePatterns(this.unionBranchPatterns(branch), basePath, label, inGraph, namedGraph);\n }\n break;\n case 'filter':\n case 'values':\n break;\n default:\n if ('queryType' in pattern) {\n throw new UnsupportedSparqlQueryError(`${label} subqueries fallback to compatibility engine`);\n }\n break;\n }\n }\n }\n\n private compileUpdateGraphQuads(items: Array<GraphQuads | BgpPattern>, basePath: string): Quad[] {\n const quads: Quad[] = [];\n for (const item of items) {\n if (item.type !== 'graph') {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE default graph fallback to compatibility engine');\n }\n if (item.name.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE GRAPH variables fallback to compatibility engine');\n }\n if (!item.name.value.startsWith(basePath)) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE graph outside basePath fallback to compatibility engine');\n }\n for (const triple of item.triples) {\n quads.push(this.compileUpdateTriple(triple, item.name));\n }\n }\n return quads;\n }\n\n private compileUpdateTriple(triple: Triple, graph: NamedNode): Quad {\n const subject = this.compileUpdateNamedNode(triple.subject, 'subject');\n const predicate = this.compileUpdateNamedNode(triple.predicate, 'predicate');\n const object = this.compileUpdateObject(triple.object);\n return DataFactory.quad(subject as any, predicate as any, object as any, graph as any) as unknown as Quad;\n }\n\n private compileUpdateNamedNode(term: unknown, position: 'subject' | 'predicate'): NamedNode {\n if (isNamedNodeTerm(term)) {\n return term;\n }\n throw new UnsupportedSparqlQueryError(`SPARQL UPDATE ${position} must be a named node in embedded delta path`);\n }\n\n private compileUpdateObject(term: SparqlTerm): Term {\n if (isNamedNodeTerm(term) || isLiteralTerm(term as Expression)) {\n return term as unknown as Term;\n }\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE object must be a named node or literal in embedded delta path');\n }\n\n private compilePatterns(\n patterns: Pattern[],\n graph: RdfQueryTermPattern | undefined,\n state: CompileState,\n optional: boolean,\n namedGraphScope?: RdfQueryTermPattern,\n ): void {\n for (const pattern of patterns) {\n switch (pattern.type) {\n case 'bgp':\n this.compileBgp(pattern, graph, state, optional);\n break;\n case 'graph':\n this.compileGraphPattern(pattern, state, optional, namedGraphScope);\n break;\n case 'optional':\n state.startOptional();\n this.compilePatterns(pattern.patterns, graph, state, true, namedGraphScope);\n state.finishOptional();\n break;\n case 'filter': {\n const expression = (pattern as FilterPattern).expression;\n const notExistsPatterns = this.notExistsPatterns(expression);\n if (notExistsPatterns) {\n if (optional) {\n state.addOptionalMinus(this.compileAntiJoinGroup(\n notExistsPatterns,\n graph,\n state.basePath,\n 'FILTER NOT EXISTS',\n namedGraphScope,\n ));\n break;\n }\n state.addMinus(this.compileAntiJoinGroup(notExistsPatterns, graph, state.basePath, 'FILTER NOT EXISTS', namedGraphScope));\n break;\n }\n const existsPatterns = this.existsPatterns(expression);\n if (existsPatterns) {\n if (optional) {\n state.addOptionalExists(this.compileExistsGroup(\n existsPatterns,\n graph,\n state.basePath,\n 'FILTER EXISTS',\n namedGraphScope,\n ));\n break;\n }\n state.addExists(this.compileExistsGroup(existsPatterns, graph, state.basePath, 'FILTER EXISTS', namedGraphScope));\n break;\n }\n if (optional) {\n state.addOptionalFilters(this.compileFilter(expression));\n break;\n }\n state.query.filters?.push(...this.compileFilter(expression));\n break;\n }\n case 'group':\n this.compilePatterns(pattern.patterns, graph, state, optional, namedGraphScope);\n break;\n case 'union':\n if (optional) {\n state.addOptionalUnion(this.compileUnionBranches(pattern.patterns, graph, state.basePath, namedGraphScope));\n break;\n }\n state.addUnion(this.compileUnionBranches(pattern.patterns, graph, state.basePath, namedGraphScope));\n break;\n case 'service':\n throw new DisabledSparqlFeatureError('SPARQL SERVICE federation is disabled for server-owned Pod queries');\n case 'bind':\n state.addBind(this.compileBind(pattern as BindPattern, state.basePath), optional);\n break;\n case 'minus':\n if (optional) {\n state.addOptionalMinus(this.compileMinusGroup(pattern as MinusPattern, graph, state.basePath, namedGraphScope));\n break;\n }\n state.addMinus(this.compileMinusGroup(pattern as MinusPattern, graph, state.basePath, namedGraphScope));\n break;\n case 'values':\n this.compileValuesRows((pattern as ValuesPattern).values, state, optional);\n break;\n default:\n if ('queryType' in pattern) {\n throw new UnsupportedSparqlQueryError('Subqueries fallback to compatibility engine');\n }\n throw new UnsupportedSparqlQueryError(`Unsupported SPARQL pattern: ${(pattern as { type?: string }).type ?? 'unknown'}`);\n }\n }\n }\n\n private compileUnionBranches(\n branches: Pattern[],\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfUnionQueryBranch[] {\n if (branches.length < 2) {\n throw new UnsupportedSparqlQueryError('UNION requires at least two branches locally');\n }\n const compiledBranches: RdfUnionQueryBranch[] = [];\n for (const branch of branches) {\n compiledBranches.push(...this.compileUnionBranch(branch, graph, basePath, namedGraphScope));\n }\n return compiledBranches;\n }\n\n private compileUnionBranch(\n branch: Pattern,\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfUnionQueryBranch[] {\n if (branch.type === 'union') {\n return branch.patterns.flatMap((nestedBranch) => (\n this.compileUnionBranch(nestedBranch, graph, basePath, namedGraphScope)\n ));\n }\n const branchState = new CompileState(basePath);\n this.compilePatterns(this.unionBranchPatterns(branch), graph, branchState, false, namedGraphScope);\n branchState.assertBindVariablesSafe();\n branchState.assertValuesVariablesBoundByRequiredPatterns();\n if (branchState.query.unions?.length) {\n throw new UnsupportedSparqlQueryError('Nested UNION fallback to compatibility engine');\n }\n if (branchState.query.patterns.length === 0) {\n throw new UnsupportedSparqlQueryError('UNION branch without required BGP fallback to compatibility engine');\n }\n return [{\n patterns: branchState.query.patterns,\n ...(branchState.query.values?.length ? { values: branchState.query.values } : {}),\n ...(branchState.query.optional?.length ? { optional: branchState.query.optional } : {}),\n ...(branchState.query.binds?.length ? { binds: branchState.query.binds } : {}),\n ...(branchState.query.filters?.length ? { filters: branchState.query.filters } : {}),\n }];\n }\n\n private compileMinusGroup(\n pattern: MinusPattern,\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfMinusQueryGroup {\n return this.compileAntiJoinGroup(pattern.patterns, graph, basePath, 'MINUS', namedGraphScope);\n }\n\n private compileAntiJoinGroup(\n patterns: Pattern[],\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n label: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfMinusQueryGroup {\n const minusState = new CompileState(basePath, true);\n this.compilePatterns(patterns, graph, minusState, false, namedGraphScope);\n minusState.assertBindVariablesSafe();\n minusState.assertValuesVariablesBoundByRequiredPatterns();\n if (minusState.query.minus?.length || minusState.query.exists?.length) {\n throw new UnsupportedSparqlQueryError(`Nested ${label} fallback to compatibility engine`);\n }\n if (minusState.query.patterns.length === 0 && (minusState.query.unions?.length ?? 0) === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without required BGP fallback to compatibility engine`);\n }\n return {\n patterns: minusState.query.patterns,\n ...(minusState.query.values?.length ? { values: minusState.query.values } : {}),\n ...(minusState.query.unions?.length ? { unions: minusState.query.unions } : {}),\n ...(minusState.query.optional?.length ? { optional: minusState.query.optional } : {}),\n ...(minusState.query.binds?.length ? { binds: minusState.query.binds } : {}),\n ...(minusState.query.filters?.length ? { filters: minusState.query.filters } : {}),\n };\n }\n\n private compileExistsGroup(\n patterns: Pattern[],\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n label: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfExistsQueryGroup {\n const existsState = new CompileState(basePath, true);\n this.compilePatterns(patterns, graph, existsState, false, namedGraphScope);\n existsState.assertBindVariablesSafe();\n existsState.assertValuesVariablesBoundByRequiredPatterns();\n if (existsState.query.minus?.length || existsState.query.exists?.length) {\n throw new UnsupportedSparqlQueryError(`Nested ${label} fallback to compatibility engine`);\n }\n if (existsState.query.patterns.length === 0 && (existsState.query.unions?.length ?? 0) === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without required BGP fallback to compatibility engine`);\n }\n return {\n patterns: existsState.query.patterns,\n ...(existsState.query.values?.length ? { values: existsState.query.values } : {}),\n ...(existsState.query.unions?.length ? { unions: existsState.query.unions } : {}),\n ...(existsState.query.optional?.length ? { optional: existsState.query.optional } : {}),\n ...(existsState.query.binds?.length ? { binds: existsState.query.binds } : {}),\n ...(existsState.query.filters?.length ? { filters: existsState.query.filters } : {}),\n };\n }\n\n private notExistsPatterns(expression: Expression): Pattern[] | null {\n if (!isOperationExpression(expression) || expression.operator.toLowerCase() !== 'notexists') {\n return null;\n }\n const pattern = expression.args[0];\n if (!pattern || !isPattern(pattern)) {\n throw new UnsupportedSparqlQueryError('FILTER NOT EXISTS without graph pattern fallback to compatibility engine');\n }\n return pattern.type === 'group'\n ? pattern.patterns\n : [pattern];\n }\n\n private existsPatterns(expression: Expression): Pattern[] | null {\n if (!isOperationExpression(expression) || expression.operator.toLowerCase() !== 'exists') {\n return null;\n }\n const pattern = expression.args[0];\n if (!pattern || !isPattern(pattern)) {\n throw new UnsupportedSparqlQueryError('FILTER EXISTS without graph pattern fallback to compatibility engine');\n }\n return pattern.type === 'group'\n ? pattern.patterns\n : [pattern];\n }\n\n private unionBranchPatterns(branch: Pattern): Pattern[] {\n return branch.type === 'group'\n ? branch.patterns\n : [branch];\n }\n\n private compileBgp(\n pattern: BgpPattern | GraphQuads,\n graph: RdfQueryTermPattern | undefined,\n state: CompileState,\n optional: boolean,\n ): void {\n for (const triple of pattern.triples) {\n for (const queryPattern of this.compileTriple(triple, graph, state)) {\n state.addPattern(queryPattern, optional);\n }\n }\n }\n\n private compileGraphPattern(\n pattern: GraphPattern,\n state: CompileState,\n optional: boolean,\n namedGraphScope?: RdfQueryTermPattern,\n ): void {\n const graph = this.compileScopedGraphTerm(pattern.name, state.basePath, namedGraphScope);\n if (graph === null) {\n state.addImpossibleGraphPattern(optional);\n return;\n }\n if (pattern.name.termType === 'Variable') {\n if (optional) {\n throw new UnsupportedSparqlQueryError('OPTIONAL GRAPH variable scope fallback to compatibility engine');\n }\n if (namedGraphScope) {\n state.query.filters?.push({\n variable: pattern.name.value,\n operator: '$in',\n values: this.graphScopeFilterValues(namedGraphScope),\n });\n } else {\n state.query.filters?.push({\n variable: pattern.name.value,\n operator: '$startsWith',\n value: state.basePath,\n });\n }\n }\n this.compilePatterns(pattern.patterns, graph, state, optional, namedGraphScope);\n }\n\n private compileScopedGraphTerm(\n term: IriTerm | VariableTerm,\n basePath: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfQueryTermPattern | null {\n const graph = this.compileGraphTerm(term, basePath);\n if (!namedGraphScope) {\n return graph;\n }\n if (graph === null) {\n return null;\n }\n if (term.termType === 'Variable') {\n return graph;\n }\n return this.graphScopeContains(namedGraphScope, graph as Term) ? graph : null;\n }\n\n private graphScopeContains(scope: RdfQueryTermPattern, graph: Term): boolean {\n if (isCompiledVariable(scope)) {\n return false;\n }\n if (isRdfJsTerm(scope)) {\n return termToId(scope as any) === termToId(graph as any);\n }\n const values = (scope as { $in?: unknown }).$in;\n return Array.isArray(values) && values.some((value) => (\n value && typeof value === 'object' && 'termType' in value && termToId(value as any) === termToId(graph as any)\n ));\n }\n\n private graphScopeFilterValues(scope: RdfQueryTermPattern): Term[] {\n if (isCompiledVariable(scope)) {\n throw new UnsupportedSparqlQueryError('GRAPH variable dataset scope fallback to compatibility engine');\n }\n if (isRdfJsTerm(scope)) {\n return [scope as Term];\n }\n const values = (scope as { $in?: unknown }).$in;\n if (Array.isArray(values) && values.every((value) => value && typeof value === 'object' && 'termType' in value)) {\n return values as Term[];\n }\n throw new UnsupportedSparqlQueryError('GRAPH variable dataset scope fallback to compatibility engine');\n }\n\n private compileBind(pattern: BindPattern, basePath: string): { variable: string; expression: RdfBindExpression } {\n return {\n variable: pattern.variable.value,\n expression: this.compileBindExpression(pattern.expression, basePath),\n };\n }\n\n private compileBindExpression(expression: Expression, basePath: string): RdfBindExpression {\n return this.compileBindLikeExpression(expression, basePath, 'BIND');\n }\n\n private compileBindLikeExpression(expression: Expression, basePath: string, label: string): RdfBindExpression {\n const normalized = this.normalizeFunctionCallExpression(expression);\n if (isRdfTermExpression(normalized) && !isVariableTerm(normalized)) {\n return {\n type: 'term',\n term: normalized as unknown as Term,\n };\n }\n if (isVariableTerm(normalized)) {\n return {\n type: 'variable',\n variable: normalized.value,\n };\n }\n if (!isOperationExpression(normalized)) {\n throw new UnsupportedSparqlQueryError(`${label} expression fallback to compatibility engine`);\n }\n\n const operator = normalized.operator.toLowerCase();\n if (operator === 'str') {\n return {\n type: 'stringValue',\n variable: this.expressionVariable(this.expressionArg(normalized.args[0])),\n };\n }\n if (operator === 'strlen') {\n return {\n type: 'stringLength',\n variable: this.stringOperandVariable(this.expressionArg(normalized.args[0])).variable,\n };\n }\n if (operator === 'lcase' || operator === 'lower-case') {\n return {\n type: 'lowerCase',\n expression: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n };\n }\n if (operator === 'ucase' || operator === 'upper-case') {\n return {\n type: 'upperCase',\n expression: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n };\n }\n if (operator === 'substr' || operator === 'substring') {\n return {\n type: 'substring',\n expression: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n start: this.compileBindExpression(this.expressionArg(normalized.args[1]), basePath),\n ...(normalized.args[2] === undefined\n ? {}\n : { length: this.compileBindExpression(this.expressionArg(normalized.args[2]), basePath) }),\n };\n }\n if (operator === 'concat') {\n return {\n type: 'concat',\n expressions: normalized.args.map((arg: Expression | Pattern) => (\n this.compileBindExpression(this.expressionArg(arg), basePath)\n )),\n };\n }\n if (operator === 'iri' || operator === 'uri') {\n return {\n type: 'iri',\n expression: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n base: basePath,\n };\n }\n\n throw new UnsupportedSparqlQueryError(`${label} ${operator} fallback to compatibility engine`);\n }\n\n private compileTriple(triple: Triple, graph: RdfQueryTermPattern | undefined, state: CompileState): RdfQueryPattern[] {\n const subject = this.compileTerm(triple.subject);\n const object = this.compileTerm(triple.object);\n const pathPatterns = this.compilePropertyPath(triple.predicate, subject, object, graph, state);\n if (pathPatterns) {\n return pathPatterns;\n }\n if (!isSimpleTerm(triple.predicate)) {\n throw new UnsupportedSparqlQueryError('Property paths fallback to compatibility engine');\n }\n return [{\n graph,\n subject,\n predicate: this.compileTerm(triple.predicate),\n object,\n }];\n }\n\n private compilePropertyPath(\n predicate: Triple['predicate'],\n subject: RdfQueryTermPattern,\n object: RdfQueryTermPattern,\n graph: RdfQueryTermPattern | undefined,\n state: CompileState,\n ): RdfQueryPattern[] | null {\n if (isSimpleTerm(predicate)) {\n return null;\n }\n const alternative = this.flattenFixedAlternativePath(predicate);\n if (alternative) {\n const predicateMatch = { $in: alternative.predicates.map((entry) => entry as unknown as Term) };\n return [\n alternative.inverse\n ? {\n graph,\n subject: object,\n predicate: predicateMatch,\n object: subject,\n }\n : {\n graph,\n subject,\n predicate: predicateMatch,\n object,\n },\n ];\n }\n const segments = this.flattenFixedLengthPath(predicate);\n if (!segments) {\n throw new UnsupportedSparqlQueryError('Property paths fallback to compatibility engine');\n }\n if (segments.length === 0) {\n throw new UnsupportedSparqlQueryError('Empty property paths fallback to compatibility engine');\n }\n\n const patterns: RdfQueryPattern[] = [];\n let currentSubject = subject;\n for (const [index, segment] of segments.entries()) {\n const isLast = index === segments.length - 1;\n const currentObject = isLast ? object : state.nextPathJoinVariable();\n const predicate = this.compilePathSegmentPredicate(segment);\n patterns.push(segment.inverse\n ? {\n graph,\n subject: currentObject,\n predicate,\n object: currentSubject,\n }\n : {\n graph,\n subject: currentSubject,\n predicate,\n object: currentObject,\n });\n currentSubject = currentObject;\n }\n return patterns;\n }\n\n private compilePathSegmentPredicate(segment: FixedPathSegment): RdfQueryTermPattern {\n return segment.predicates.length === 1\n ? segment.predicates[0] as unknown as Term\n : { $in: segment.predicates.map((entry) => entry as unknown as Term) };\n }\n\n private flattenFixedLengthPath(path: PropertyPath): FixedPathSegment[] | null {\n return this.flattenFixedLengthPathItem(path, false);\n }\n\n private flattenFixedAlternativePath(path: PropertyPath): FixedAlternativePath | null {\n return this.flattenFixedAlternativePathItem(path, false);\n }\n\n private flattenFixedAlternativePathItem(item: IriTerm | PropertyPath, inverse: boolean): FixedAlternativePath | null {\n if (isNamedNodeTerm(item)) {\n return null;\n }\n if (item.pathType === '^' && item.items.length === 1) {\n return this.flattenFixedAlternativePathItem(item.items[0], !inverse);\n }\n if (item.pathType !== '|') {\n return null;\n }\n\n const predicates: IriTerm[] = [];\n for (const nestedItem of item.items) {\n if (!isNamedNodeTerm(nestedItem)) {\n return null;\n }\n predicates.push(nestedItem as IriTerm);\n }\n return predicates.length > 0\n ? { predicates, inverse }\n : null;\n }\n\n private flattenFixedLengthPathItem(item: IriTerm | PropertyPath, inverse: boolean): FixedPathSegment[] | null {\n if (isNamedNodeTerm(item)) {\n return [{ predicates: [item as IriTerm], inverse }];\n }\n if (item.pathType === '^' && item.items.length === 1) {\n return this.flattenFixedLengthPathItem(item.items[0], !inverse);\n }\n if (item.pathType === '|') {\n const predicates: IriTerm[] = [];\n for (const nestedItem of item.items) {\n if (!isNamedNodeTerm(nestedItem)) {\n return null;\n }\n predicates.push(nestedItem as IriTerm);\n }\n return predicates.length > 0\n ? [{ predicates, inverse }]\n : null;\n }\n if (item.pathType !== '/') {\n return null;\n }\n\n const items = inverse ? [...item.items].reverse() : item.items;\n const segments: FixedPathSegment[] = [];\n for (const nestedItem of items) {\n const nested = this.flattenFixedLengthPathItem(nestedItem, inverse);\n if (!nested) {\n return null;\n }\n segments.push(...nested);\n }\n return segments;\n }\n\n private compileGraphTerm(term: IriTerm | VariableTerm, basePath: string): RdfQueryTermPattern | null {\n if (term.termType === 'Variable') {\n return rdfVar(term.value);\n }\n if (!term.value.startsWith(basePath)) {\n return null;\n }\n return term as unknown as Term;\n }\n\n private compileTerm(term: SparqlTerm): RdfQueryTermPattern {\n if (term.termType === 'Variable') {\n return rdfVar(term.value);\n }\n if (term.termType === 'Quad') {\n throw new UnsupportedSparqlQueryError('RDF-star terms fallback to compatibility engine');\n }\n return term as unknown as Term;\n }\n\n public materializeConstruct(template: RdfConstructTemplate[], rows: RdfBindingRow[], graph?: Term): Quad[] {\n return this.materializeTemplate(\n template.map((triple) => ({\n ...triple,\n graph: graph ?? DataFactory.defaultGraph(),\n })),\n rows,\n );\n }\n\n public materializeDeleteWhere(template: RdfSparqlUpdateTemplate[], rows: RdfBindingRow[]): Quad[] {\n return this.materializeTemplate(template, rows);\n }\n\n private materializeTemplate(template: RdfSparqlUpdateTemplate[], rows: RdfBindingRow[]): Quad[] {\n const quads: Quad[] = [];\n const seen = new Set<string>();\n for (const row of rows) {\n for (const triple of template) {\n const graph = this.resolveTemplateTerm(triple.graph, row);\n const subject = this.resolveTemplateTerm(triple.subject, row);\n const predicate = this.resolveTemplateTerm(triple.predicate, row);\n const object = this.resolveTemplateTerm(triple.object, row);\n if (!graph || !subject || !predicate || !object) {\n continue;\n }\n if (graph.termType !== 'NamedNode' && graph.termType !== 'DefaultGraph') {\n continue;\n }\n if (subject.termType !== 'NamedNode' && subject.termType !== 'BlankNode') {\n continue;\n }\n if (predicate.termType !== 'NamedNode') {\n continue;\n }\n if (object.termType === 'DefaultGraph') {\n continue;\n }\n const quad = DataFactory.quad(subject as any, predicate as any, object as any, graph as any) as unknown as Quad;\n const key = [quad.subject, quad.predicate, quad.object, quad.graph].map((term) => termToId(term as any)).join('\\u001f');\n if (!seen.has(key)) {\n seen.add(key);\n quads.push(quad);\n }\n }\n }\n return quads;\n }\n\n private compileConstructTemplate(query: ConstructQuery): RdfConstructTemplate[] {\n if (!query.template || query.template.length === 0) {\n throw new UnsupportedSparqlQueryError('CONSTRUCT without template fallback to compatibility engine');\n }\n return query.template.map((triple) => {\n if (!isSimpleTerm(triple.predicate)) {\n throw new UnsupportedSparqlQueryError('CONSTRUCT property paths fallback to compatibility engine');\n }\n if (triple.predicate.termType !== 'NamedNode' && triple.predicate.termType !== 'Variable') {\n throw new UnsupportedSparqlQueryError('CONSTRUCT predicates must be IRIs or variables');\n }\n return {\n subject: this.compileTerm(triple.subject),\n predicate: this.compileTerm(triple.predicate),\n object: this.compileTerm(triple.object),\n };\n });\n }\n\n private compileDescribeTargets(query: DescribeQuery, localQuery: RdfLocalQuery): RdfQueryTermPattern[] {\n if (query.variables.length === 1 && query.variables[0] instanceof Wildcard) {\n const variables = visibleSelectVariables(query);\n if (variables.length === 0) {\n throw new UnsupportedSparqlQueryError('DESCRIBE wildcard without visible variables fallback to compatibility engine');\n }\n const unboundVariable = variables.find((variable) => !queryBindsVariableInRequiredShape(localQuery, variable));\n if (unboundVariable) {\n throw new UnsupportedSparqlQueryError('DESCRIBE wildcard variables must be bound by required embedded query patterns');\n }\n return variables.map((variable) => rdfVar(variable));\n }\n\n const targets = query.variables.map((target) => {\n if (target.termType === 'Variable') {\n if (!queryBindsVariableInRequiredShape(localQuery, target.value)) {\n throw new UnsupportedSparqlQueryError('DESCRIBE variables must be bound by required embedded query patterns');\n }\n return rdfVar(target.value);\n }\n if (target.termType === 'NamedNode') {\n return target as unknown as Term;\n }\n throw new UnsupportedSparqlQueryError('DESCRIBE targets must be IRIs or bound variables locally');\n });\n\n if (targets.length === 0) {\n throw new UnsupportedSparqlQueryError('DESCRIBE without targets fallback to compatibility engine');\n }\n return targets;\n }\n\n private resolveTemplateTerm(term: RdfQueryTermPattern, row: RdfBindingRow): Term | undefined {\n if (isCompiledVariable(term)) {\n return row[term.variable];\n }\n return term as Term;\n }\n\n private compileSelectVariables(query: SelectQuery, state: CompileState): string[] {\n const localQuery = state.query;\n if (query.variables.length === 1 && query.variables[0] instanceof Wildcard) {\n if ((localQuery.groupBy?.length ?? 0) > 0) {\n throw new UnsupportedSparqlQueryError('Wildcard grouped SELECT fallback to compatibility engine');\n }\n return visibleSelectVariables(query);\n }\n\n const variables: string[] = [];\n const visibleVariables = visibleSelectVariables(query);\n for (const variable of query.variables) {\n if (isSelectVariableTerm(variable)) {\n variables.push(variable.value);\n continue;\n }\n if (!isVariableExpression(variable)) {\n throw new UnsupportedSparqlQueryError('Wildcard mixed with explicit SELECT projections fallback to compatibility engine');\n }\n\n if (!isAggregateExpression(variable.expression)) {\n if ((localQuery.groupBy?.length ?? 0) > 0) {\n throw new UnsupportedSparqlQueryError('Grouped SELECT expression projection fallback to compatibility engine');\n }\n const alias = variable.variable.value;\n if (\n variables.includes(alias)\n || visibleVariables.includes(alias)\n || (localQuery.binds ?? []).some((bind) => bind.variable === alias)\n ) {\n throw new UnsupportedSparqlQueryError('SELECT expression alias is already bound locally');\n }\n state.addBind({\n variable: alias,\n expression: this.compileSelectProjectionExpression(variable.expression, state.basePath),\n }, false);\n variables.push(alias);\n continue;\n }\n\n const aggregate = variable.expression;\n const compiledAggregate = this.compileAggregateProjection(aggregate, variable.variable.value, state);\n localQuery.aggregates = [...(localQuery.aggregates ?? []), compiledAggregate];\n localQuery.aggregate ??= compiledAggregate;\n variables.push(variable.variable.value);\n }\n this.assertGroupProjection(query, localQuery, variables);\n return variables;\n }\n\n private compileAggregateProjection(\n aggregate: AggregateExpression,\n as: string,\n state: CompileState,\n ): RdfQueryAggregate {\n const type = this.aggregateType(aggregate.aggregation);\n const aggregateExpression = aggregate.expression;\n if (type !== 'count' && isWildcardTerm(aggregateExpression)) {\n throw new UnsupportedSparqlQueryError(`${type.toUpperCase()}(*) fallback to compatibility engine`);\n }\n const variable = isWildcardTerm(aggregateExpression)\n ? undefined\n : this.expressionVariable(aggregateExpression);\n if (type !== 'count') {\n this.assertNumericAggregateSafe(variable, state);\n }\n return {\n type,\n as,\n variable,\n distinct: aggregate.distinct,\n };\n }\n\n private aggregateType(aggregation: string): RdfQueryAggregate['type'] {\n switch (aggregation.toLowerCase()) {\n case 'count':\n case 'sum':\n case 'avg':\n case 'min':\n case 'max':\n return aggregation.toLowerCase() as RdfQueryAggregate['type'];\n default:\n throw new UnsupportedSparqlQueryError(`Aggregate ${aggregation} fallback to compatibility engine`);\n }\n }\n\n private assertNumericAggregateSafe(variable: string | undefined, state: CompileState): void {\n if (!variable) {\n throw new UnsupportedSparqlQueryError('Numeric aggregate requires a variable locally');\n }\n if (!queryBindsVariableInRequiredShape(state.query, variable)) {\n throw new UnsupportedSparqlQueryError('Numeric aggregate variable must be bound by required embedded query patterns');\n }\n if (!hasNumericGuard(state.query.filters ?? [], variable)) {\n throw new UnsupportedSparqlQueryError('Numeric aggregate requires FILTER(isNumeric(?var)) locally');\n }\n }\n\n private compileSelectProjectionExpression(expression: Expression, basePath: string): RdfBindExpression {\n return this.compileBindLikeExpression(expression, basePath, 'SELECT projection');\n }\n\n private compileGroupBy(group: Grouping[], state: CompileState): string[] | undefined {\n if (group.length === 0) {\n return undefined;\n }\n const groupBy: string[] = [];\n group.forEach((entry, index) => {\n if (isVariableTerm(entry.expression)) {\n const groupVariable = entry.variable?.value ?? entry.expression.value;\n groupBy.push(groupVariable);\n if (entry.variable && entry.variable.value !== entry.expression.value) {\n state.addBind({\n variable: entry.variable.value,\n expression: {\n type: 'variable',\n variable: entry.expression.value,\n },\n }, false);\n }\n return;\n }\n\n const groupVariable = entry.variable?.value ?? state.nextGroupVariable(index);\n state.addBind({\n variable: groupVariable,\n expression: this.compileGroupByExpression(entry.expression, state.basePath),\n }, false);\n groupBy.push(groupVariable);\n });\n state.query.groupBy = groupBy;\n return groupBy;\n }\n\n private compileGroupByExpression(expression: Expression, basePath: string): RdfBindExpression {\n return this.compileBindLikeExpression(expression, basePath, 'GROUP BY');\n }\n\n private compileHaving(having: Expression[], state: CompileState): RdfQueryFilter[] | undefined {\n if (having.length === 0) {\n return undefined;\n }\n const localQuery = state.query;\n if ((localQuery.aggregates?.length ?? 0) === 0 && !localQuery.aggregate) {\n throw new UnsupportedSparqlQueryError('HAVING without aggregate fallback to compatibility engine');\n }\n\n const filters = having.flatMap((expression) => this.compileHavingFilter(expression, state));\n return filters.length > 0 ? filters : undefined;\n }\n\n private compileHavingFilter(expression: Expression, state: CompileState): RdfQueryFilter[] {\n const normalized = this.normalizeFunctionCallExpression(expression);\n if (!isOperationExpression(normalized)) {\n throw new UnsupportedSparqlQueryError('Only simple HAVING operations are supported locally');\n }\n const operator = normalized.operator.toLowerCase();\n if (operator === '&&') {\n return normalized.args.flatMap((arg: Expression | Pattern) => this.compileHavingFilter(this.expressionArg(arg), state));\n }\n const binary = this.binaryFilter(operator);\n if (!binary) {\n throw new UnsupportedSparqlQueryError(`HAVING ${operator} fallback to compatibility engine`);\n }\n\n return [this.compileHavingBinaryFilter(binary, normalized.args[0], normalized.args[1], state)];\n }\n\n private compileHavingBinaryFilter(\n operator: RdfQueryFilterOperator,\n left: Expression | Pattern | undefined,\n right: Expression | Pattern | undefined,\n state: CompileState,\n ): RdfQueryFilter {\n const leftExpression = this.expressionArg(left);\n const rightExpression = this.expressionArg(right);\n const leftAggregate = this.havingAggregateVariableOrUndefined(leftExpression, state);\n if (leftAggregate) {\n return {\n variable: leftAggregate,\n operator,\n value: this.filterValue(rightExpression),\n };\n }\n const rightAggregate = this.havingAggregateVariableOrUndefined(rightExpression, state);\n if (rightAggregate) {\n return {\n variable: rightAggregate,\n operator: this.reverseBinaryFilter(operator),\n value: this.filterValue(leftExpression),\n };\n }\n throw new UnsupportedSparqlQueryError('HAVING must compare one aggregate with one RDF term locally');\n }\n\n private havingAggregateVariableOrUndefined(expression: Expression, state: CompileState): string | undefined {\n const localQuery = state.query;\n const aggregates = localQuery.aggregates ?? (localQuery.aggregate ? [localQuery.aggregate] : []);\n if (aggregates.length === 0) {\n return undefined;\n }\n if (isVariableExpressionTerm(expression)) {\n return aggregates.some((aggregate) => aggregate.as === expression.value) ? expression.value : undefined;\n }\n if (!isAggregateExpression(expression)) {\n return undefined;\n }\n const type = this.aggregateType(expression.aggregation);\n const aggregateExpression = expression.expression;\n const variable = isWildcardTerm(aggregateExpression)\n ? undefined\n : this.expressionVariable(aggregateExpression);\n const matchingAggregate = aggregates.find((aggregate) => (\n type === aggregate.type\n && variable === aggregate.variable\n && expression.distinct === Boolean(aggregate.distinct)\n ));\n if (matchingAggregate) {\n return matchingAggregate.as;\n }\n if (type !== 'count') {\n this.assertNumericAggregateSafe(variable, state);\n }\n const hiddenAggregate: RdfQueryAggregate = {\n type,\n as: state.nextHavingAggregateVariable(),\n variable,\n distinct: expression.distinct,\n };\n localQuery.aggregates = [...(localQuery.aggregates ?? []), hiddenAggregate];\n return hiddenAggregate.as;\n }\n\n private assertGroupProjection(query: SelectQuery, localQuery: RdfLocalQuery, variables: string[]): void {\n const groupBy = localQuery.groupBy ?? [];\n if (groupBy.length === 0) {\n return;\n }\n const aggregates = localQuery.aggregates ?? (localQuery.aggregate ? [localQuery.aggregate] : []);\n if (aggregates.length === 0) {\n throw new UnsupportedSparqlQueryError('GROUP BY without aggregate fallback to compatibility engine');\n }\n const groupableVariables = new Set([\n ...localQuery.patterns.flatMap((pattern) => variablesInPattern(pattern)),\n ...(localQuery.binds ?? []).map((bind) => bind.variable),\n ]);\n if (groupBy.some((variableName) => !groupableVariables.has(variableName))) {\n throw new UnsupportedSparqlQueryError('GROUP BY variables must come from required BGP patterns or local binds');\n }\n\n const groupVariables = new Set(groupBy);\n const aggregateVariables = new Set<string>();\n for (const variable of query.variables) {\n if (isSelectVariableTerm(variable)) {\n if (!groupVariables.has(variable.value)) {\n throw new UnsupportedSparqlQueryError('Grouped SELECT variables must be present in GROUP BY');\n }\n continue;\n }\n if (isVariableExpression(variable) && isAggregateExpression(variable.expression)) {\n aggregateVariables.add(variable.variable.value);\n }\n }\n const aggregateAliases = new Set(aggregates.map((aggregate) => aggregate.as));\n if (aggregateVariables.size !== aggregateAliases.size) {\n throw new UnsupportedSparqlQueryError('Grouped local queries require aggregate projections to be aggregate aliases');\n }\n if ([...aggregateVariables].some((variableName) => !aggregateAliases.has(variableName))) {\n throw new UnsupportedSparqlQueryError('Grouped local queries require aggregate projections to be aggregate aliases');\n }\n if (variables.some((variableName) => !groupVariables.has(variableName) && !aggregateAliases.has(variableName))) {\n throw new UnsupportedSparqlQueryError('Grouped SELECT projection fallback to compatibility engine');\n }\n }\n\n private compileOrder(order: Ordering[], state: CompileState): RdfLocalQuery['orderBy'] {\n if (order.length === 0) {\n return undefined;\n }\n return order.map((entry, index) => {\n if (isVariableTerm(entry.expression)) {\n return {\n variable: entry.expression.value,\n direction: entry.descending ? 'desc' : 'asc',\n };\n }\n const orderVariable = state.nextOrderVariable(index);\n state.addBind({\n variable: orderVariable,\n expression: this.compileOrderExpression(entry.expression, state.basePath),\n }, false);\n return {\n variable: orderVariable,\n direction: entry.descending ? 'desc' : 'asc',\n };\n });\n }\n\n private compileOrderExpression(expression: Expression, basePath: string): RdfBindExpression {\n return this.compileBindLikeExpression(expression, basePath, 'ORDER BY');\n }\n\n private compileFilter(expression: Expression): RdfQueryFilter[] {\n const normalizedExpression = this.normalizeFunctionCallExpression(expression);\n if (!isOperationExpression(expression)) {\n if (!normalizedExpression || !isOperationExpression(normalizedExpression)) {\n throw new UnsupportedSparqlQueryError('Only simple FILTER operations are supported locally');\n }\n expression = normalizedExpression;\n } else {\n expression = normalizedExpression as OperationExpression;\n }\n\n const operator = expression.operator.toLowerCase();\n if (operator === '&&') {\n return expression.args.flatMap((arg: Expression | Pattern) => this.compileFilter(this.expressionArg(arg)));\n }\n if (operator === '||') {\n return [this.compileOrFilter(expression)];\n }\n if (operator === 'bound') {\n return [{\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$bound',\n value: true,\n }];\n }\n const termTest = this.compileTermTestFilter(operator, expression);\n if (termTest) {\n return [termTest];\n }\n if (operator === '!' || operator === 'not') {\n return this.compileNegatedFilter(this.expressionArg(expression.args[0]));\n }\n if (operator === 'langmatches') {\n return [this.compileLangMatchesFilter(expression)];\n }\n\n const binary = this.binaryFilter(operator);\n if (binary) {\n return [this.compileBinaryFilter(binary, expression.args[0], expression.args[1])];\n }\n\n if (operator === 'in' || operator === 'notin') {\n const values = expression.args[1];\n if (!Array.isArray(values)) {\n throw new UnsupportedSparqlQueryError('FILTER IN tuple fallback to compatibility engine');\n }\n const operand = this.stringOperandVariable(this.expressionArg(expression.args[0]));\n return [{\n variable: operand.variable,\n operator: operator === 'in' ? '$in' : '$notIn',\n operand: operand.operand,\n values: values.map((value) => this.filterValue(value)),\n }];\n }\n\n const stringOperator = this.stringFilter(operator);\n if (stringOperator) {\n const [left, right, flags] = expression.args;\n const leftOperand = this.stringOperandVariable(this.expressionArg(left));\n return [{\n variable: leftOperand.variable,\n operator: stringOperator,\n operand: leftOperand.operand,\n value: this.literalString(this.expressionArg(right)),\n flags: operator === 'regex' && flags ? this.literalString(this.expressionArg(flags)) : undefined,\n }];\n }\n\n throw new UnsupportedSparqlQueryError(`FILTER ${operator} fallback to compatibility engine`);\n }\n\n private compileOrFilter(expression: OperationExpression): RdfQueryFilter {\n const branches = this.flattenOrExpressions(expression);\n let variable: string | undefined;\n let operand: RdfQueryFilter['operand'] = undefined;\n let operandInitialized = false;\n const values: RdfQueryFilterValue[] = [];\n const seen = new Set<string>();\n\n for (const branch of branches) {\n const filters = this.compileFilter(branch);\n if (filters.length !== 1) {\n throw new UnsupportedSparqlQueryError('FILTER OR only supports equality or IN branches on one variable locally');\n }\n\n const filter = filters[0];\n if (filter.operator !== '$eq' && filter.operator !== '$in') {\n throw new UnsupportedSparqlQueryError('FILTER OR only supports equality or IN branches on one variable locally');\n }\n if (variable && variable !== filter.variable) {\n throw new UnsupportedSparqlQueryError('FILTER OR branches must constrain the same variable locally');\n }\n if (operandInitialized && operand !== filter.operand) {\n throw new UnsupportedSparqlQueryError('FILTER OR branches must use the same operand locally');\n }\n variable = filter.variable;\n operand = filter.operand;\n operandInitialized = true;\n\n const branchValues = filter.operator === '$eq'\n ? filter.value === undefined ? [] : [filter.value]\n : filter.values ?? [];\n if (branchValues.length === 0) {\n throw new UnsupportedSparqlQueryError('FILTER OR branch without values fallback to compatibility engine');\n }\n for (const value of branchValues) {\n const key = this.filterValueKey(value);\n if (!seen.has(key)) {\n seen.add(key);\n values.push(value);\n }\n }\n }\n\n if (!variable || values.length === 0) {\n throw new UnsupportedSparqlQueryError('FILTER OR without equality branches fallback to compatibility engine');\n }\n return {\n variable,\n operator: '$in',\n operand,\n values,\n };\n }\n\n private flattenOrExpressions(expression: Expression): Expression[] {\n if (isOperationExpression(expression) && expression.operator.toLowerCase() === '||') {\n return expression.args.flatMap((arg: Expression | Pattern) => this.flattenOrExpressions(this.expressionArg(arg)));\n }\n return [expression];\n }\n\n private filterValueKey(value: RdfQueryFilterValue): string {\n if (value && typeof value === 'object' && 'termType' in value) {\n return `term:${termToId(value as any)}`;\n }\n return `${typeof value}:${String(value)}`;\n }\n\n private compileBinaryFilter(\n operator: RdfQueryFilterOperator,\n left: Expression | Pattern | undefined,\n right: Expression | Pattern | undefined,\n ): RdfQueryFilter {\n const leftExpression = this.expressionArg(left);\n const rightExpression = this.expressionArg(right);\n const leftStringLengthVariable = this.stringLengthVariableOrUndefined(leftExpression);\n const rightStringLengthVariable = this.stringLengthVariableOrUndefined(rightExpression);\n if (leftStringLengthVariable && rightStringLengthVariable) {\n return {\n variable: leftStringLengthVariable,\n operator,\n operand: 'stringLength',\n variable2: rightStringLengthVariable,\n };\n }\n if (leftStringLengthVariable) {\n return {\n variable: leftStringLengthVariable,\n operator,\n operand: 'stringLength',\n value: this.filterValue(rightExpression),\n };\n }\n if (rightStringLengthVariable) {\n return {\n variable: rightStringLengthVariable,\n operator: this.reverseBinaryFilter(operator),\n operand: 'stringLength',\n value: this.filterValue(leftExpression),\n };\n }\n const leftFunction = this.compileFunctionComparisonFilter(operator, leftExpression, rightExpression);\n if (leftFunction) {\n return leftFunction;\n }\n const rightFunction = this.compileFunctionComparisonFilter(this.reverseBinaryFilter(operator), rightExpression, leftExpression);\n if (rightFunction) {\n return rightFunction;\n }\n const leftStringOperand = this.stringOperandVariableOrUndefined(leftExpression);\n const rightStringOperand = this.stringOperandVariableOrUndefined(rightExpression);\n if (leftStringOperand && rightStringOperand) {\n if (leftStringOperand.operand !== rightStringOperand.operand) {\n throw new UnsupportedSparqlQueryError('FILTER string expression comparison must use matching operands locally');\n }\n return {\n variable: leftStringOperand.variable,\n operator,\n operand: leftStringOperand.operand,\n variable2: rightStringOperand.variable,\n };\n }\n if (leftStringOperand) {\n return {\n variable: leftStringOperand.variable,\n operator,\n operand: leftStringOperand.operand,\n value: this.literalString(rightExpression),\n };\n }\n if (rightStringOperand) {\n return {\n variable: rightStringOperand.variable,\n operator: this.reverseBinaryFilter(operator),\n operand: rightStringOperand.operand,\n value: this.literalString(leftExpression),\n };\n }\n const leftVariable = this.expressionVariableOrUndefined(leftExpression);\n const rightVariable = this.expressionVariableOrUndefined(rightExpression);\n\n if (leftVariable && !rightVariable) {\n return {\n variable: leftVariable,\n operator,\n value: this.filterValue(rightExpression),\n };\n }\n\n if (leftVariable && rightVariable) {\n return {\n variable: leftVariable,\n operator,\n variable2: rightVariable,\n };\n }\n\n if (rightVariable && !leftVariable) {\n return {\n variable: rightVariable,\n operator: this.reverseBinaryFilter(operator),\n value: this.filterValue(leftExpression),\n };\n }\n\n throw new UnsupportedSparqlQueryError('FILTER comparison must compare one variable with one RDF term locally');\n }\n\n private compileTermTestFilter(operator: string, expression: OperationExpression): RdfQueryFilter | null {\n switch (operator) {\n case 'isiri':\n case 'isuri':\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$termType',\n value: 'iri',\n };\n case 'isblank':\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$termType',\n value: 'blank',\n };\n case 'isliteral':\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$termType',\n value: 'literal',\n };\n case 'isnumeric':\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$termType',\n value: 'numeric',\n };\n case 'sameterm': {\n const leftExpression = this.expressionArg(expression.args[0]);\n const rightExpression = this.expressionArg(expression.args[1]);\n const leftVariable = this.expressionVariableOrUndefined(leftExpression);\n const rightVariable = this.expressionVariableOrUndefined(rightExpression);\n if (leftVariable && rightVariable) {\n return {\n variable: leftVariable,\n operator: '$sameTerm',\n variable2: rightVariable,\n };\n }\n if (leftVariable) {\n return {\n variable: leftVariable,\n operator: '$sameTerm',\n value: this.filterValue(rightExpression),\n };\n }\n if (rightVariable) {\n return {\n variable: rightVariable,\n operator: '$sameTerm',\n value: this.filterValue(leftExpression),\n };\n }\n throw new UnsupportedSparqlQueryError('sameTerm FILTER must compare at least one variable locally');\n }\n default:\n return null;\n }\n }\n\n private compileFunctionComparisonFilter(\n operator: RdfQueryFilterOperator,\n functionExpression: Expression,\n valueExpression: Expression,\n ): RdfQueryFilter | null {\n if (operator !== '$eq' && operator !== '$ne') {\n return null;\n }\n if (!isOperationExpression(functionExpression)) {\n return null;\n }\n const functionOperator = functionExpression.operator.toLowerCase();\n if (functionOperator === 'lang') {\n return {\n variable: this.expressionVariable(this.expressionArg(functionExpression.args[0])),\n operator: operator === '$eq' ? '$lang' : '$notLang',\n value: this.literalString(valueExpression),\n };\n }\n if (functionOperator === 'datatype') {\n const value = this.filterValue(valueExpression);\n if (!isNamedNodeTerm(value)) {\n throw new UnsupportedSparqlQueryError('DATATYPE FILTER value must be an IRI locally');\n }\n return {\n variable: this.expressionVariable(this.expressionArg(functionExpression.args[0])),\n operator: operator === '$eq' ? '$datatype' : '$notDatatype',\n value,\n };\n }\n return null;\n }\n\n private stringLengthVariableOrUndefined(expression: Expression): string | undefined {\n const normalized = this.normalizeFunctionCallExpression(expression);\n if (!isOperationExpression(normalized) || normalized.operator.toLowerCase() !== 'strlen') {\n return undefined;\n }\n return this.stringOperandVariable(this.expressionArg(normalized.args[0])).variable;\n }\n\n private stringValueVariableOrUndefined(expression: Expression): string | undefined {\n const operand = this.stringOperandVariableOrUndefined(expression);\n return operand?.operand === 'stringValue' ? operand.variable : undefined;\n }\n\n private stringOperandVariable(expression: Expression): { variable: string; operand?: RdfQueryFilter['operand'] } {\n const stringOperand = this.stringOperandVariableOrUndefined(expression);\n if (stringOperand) {\n return stringOperand;\n }\n return {\n variable: this.expressionVariable(expression),\n };\n }\n\n private stringOperandVariableOrUndefined(expression: Expression): { variable: string; operand: RdfQueryFilter['operand'] } | undefined {\n if (isStrOperation(expression)) {\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operand: 'stringValue',\n };\n }\n const normalized = this.normalizeFunctionCallExpression(expression);\n if (!isOperationExpression(normalized)) {\n return undefined;\n }\n const operator = normalized.operator.toLowerCase();\n if (operator !== 'lcase' && operator !== 'lower-case' && operator !== 'ucase' && operator !== 'upper-case') {\n return undefined;\n }\n const innerOperand = this.stringOperandVariableOrUndefined(this.expressionArg(normalized.args[0]));\n if (!innerOperand || innerOperand.operand !== 'stringValue') {\n return undefined;\n }\n return {\n variable: innerOperand.variable,\n operand: operator === 'lcase' || operator === 'lower-case' ? 'lowerStringValue' : 'upperStringValue',\n };\n }\n\n private compileLangMatchesFilter(expression: OperationExpression): RdfQueryFilter {\n const langExpression = this.expressionArg(expression.args[0]);\n if (!isOperationExpression(langExpression) || langExpression.operator.toLowerCase() !== 'lang') {\n throw new UnsupportedSparqlQueryError('LANGMATCHES first argument must be LANG(?var) locally');\n }\n return {\n variable: this.expressionVariable(this.expressionArg(langExpression.args[0])),\n operator: '$langMatches',\n value: this.literalString(this.expressionArg(expression.args[1])),\n };\n }\n\n private compileValuesRows(rows: ValuePatternRow[], state: CompileState, optional = false): void {\n if (rows.length === 0) {\n return;\n }\n\n const keys = unique(rows.flatMap((row) => Object.keys(row))).sort();\n\n if (keys.length === 0) {\n return;\n }\n const hasUnboundValues = rows.some((row) => keys.some((key) => !row[key]));\n\n if (!optional && keys.length === 1 && !hasUnboundValues) {\n const key = keys[0];\n state.query.filters?.push({\n variable: key.replace(/^\\?/, ''),\n operator: '$in',\n values: rows.map((row) => this.filterValue(row[key] as Expression)),\n source: 'values',\n });\n return;\n }\n\n const variables = keys.map((key) => key.replace(/^\\?/, ''));\n state.addValuesSource({\n variables,\n rows: rows.map((row) => {\n const binding: RdfBindingRow = {};\n keys.forEach((key, index) => {\n const expression = row[key];\n if (expression) {\n binding[variables[index]] = this.valuesTerm(expression as Expression);\n }\n });\n return binding;\n }),\n }, optional);\n }\n\n private valuesTerm(expression: Expression): Term {\n const value = this.filterValue(expression);\n if (!isRdfJsTerm(value)) {\n throw new UnsupportedSparqlQueryError('VALUES rows must contain RDF terms locally');\n }\n return value;\n }\n\n private compileNegatedFilter(expression: Expression): RdfQueryFilter[] {\n if (!isOperationExpression(expression)) {\n throw new UnsupportedSparqlQueryError('Only safely negated FILTER operations are supported locally');\n }\n\n const operator = expression.operator.toLowerCase();\n if (operator === 'bound') {\n return [{\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$bound',\n value: false,\n }];\n }\n if (operator === '||') {\n const filter = this.compileOrFilter(expression);\n return [{\n ...filter,\n operator: '$notIn',\n }];\n }\n\n const binary = this.negatedBinaryFilter(operator);\n if (binary) {\n return [this.compileBinaryFilter(binary, expression.args[0], expression.args[1])];\n }\n\n if (operator === 'in' || operator === 'notin') {\n const values = expression.args[1];\n if (!Array.isArray(values)) {\n throw new UnsupportedSparqlQueryError('FILTER negated IN tuple fallback to compatibility engine');\n }\n const operand = this.stringOperandVariable(this.expressionArg(expression.args[0]));\n return [{\n variable: operand.variable,\n operator: operator === 'in' ? '$notIn' : '$in',\n operand: operand.operand,\n values: values.map((value) => this.filterValue(value)),\n }];\n }\n\n throw new UnsupportedSparqlQueryError(`FILTER !${operator} fallback to compatibility engine`);\n }\n\n private expressionArg(value: Expression | Pattern | undefined): Expression {\n if (!value || (value as Pattern).type === 'bgp') {\n throw new UnsupportedSparqlQueryError('Unsupported FILTER argument');\n }\n return this.normalizeFunctionCallExpression(value as Expression);\n }\n\n private expressionVariable(expression: Expression): string {\n if (isVariableTerm(expression)) {\n return expression.value;\n }\n throw new UnsupportedSparqlQueryError('Only variable expressions are supported in this query position');\n }\n\n private expressionVariableOrUndefined(expression: Expression): string | undefined {\n return isVariableTerm(expression) ? expression.value : undefined;\n }\n\n private filterValue(expression: Expression): Term | string | number | boolean {\n if (isRdfTermExpression(expression)) {\n return expression as unknown as Term;\n }\n throw new UnsupportedSparqlQueryError('Only RDF term filter values are supported locally');\n }\n\n private literalString(expression: Expression): string {\n if (isLiteralTerm(expression)) {\n return expression.value;\n }\n throw new UnsupportedSparqlQueryError('String FILTER arguments must be literals');\n }\n\n private binaryFilter(operator: string): RdfQueryFilterOperator | null {\n switch (operator) {\n case '=':\n return '$eq';\n case '!=':\n return '$ne';\n case '>':\n return '$gt';\n case '>=':\n return '$gte';\n case '<':\n return '$lt';\n case '<=':\n return '$lte';\n default:\n return null;\n }\n }\n\n private reverseBinaryFilter(operator: RdfQueryFilterOperator): RdfQueryFilterOperator {\n switch (operator) {\n case '$eq':\n case '$ne':\n return operator;\n case '$gt':\n return '$lt';\n case '$gte':\n return '$lte';\n case '$lt':\n return '$gt';\n case '$lte':\n return '$gte';\n default:\n throw new UnsupportedSparqlQueryError(`FILTER ${operator} cannot be reversed locally`);\n }\n }\n\n private negatedBinaryFilter(operator: string): RdfQueryFilterOperator | null {\n switch (operator) {\n case '=':\n return '$ne';\n case '!=':\n return '$eq';\n case '>':\n return '$lte';\n case '>=':\n return '$lt';\n case '<':\n return '$gte';\n case '<=':\n return '$gt';\n default:\n return null;\n }\n }\n\n private stringFilter(operator: string): RdfQueryFilterOperator | null {\n switch (operator) {\n case 'strstarts':\n return '$startsWith';\n case 'contains':\n return '$contains';\n case 'strends':\n return '$endsWith';\n case 'regex':\n return '$regex';\n default:\n return null;\n }\n }\n\n private normalizeFunctionCallExpression(expression: Expression): Expression {\n if (!isFunctionCallExpression(expression)) {\n return expression;\n }\n if (expression.distinct) {\n throw new UnsupportedSparqlQueryError('DISTINCT function calls fallback to compatibility engine');\n }\n const functionIri = typeof expression.function === 'string'\n ? expression.function\n : expression.function.value;\n const operator = this.xpathFunctionOperator(functionIri);\n if (!operator) {\n throw new UnsupportedSparqlQueryError(`Unsupported SPARQL function ${functionIri} fallback to compatibility engine`);\n }\n return {\n type: 'operation',\n operator,\n args: expression.args.map((arg) => (\n Array.isArray(arg)\n ? arg.map((item) => this.normalizeFunctionCallExpression(this.expressionArg(item)))\n : this.normalizeFunctionCallExpression(this.expressionArg(arg))\n )),\n } as OperationExpression;\n }\n\n private xpathFunctionOperator(iri: string): string | null {\n if (!iri.startsWith(XPATH_FUNCTION_NS)) {\n return null;\n }\n switch (iri.slice(XPATH_FUNCTION_NS.length).toLowerCase()) {\n case 'concat':\n return 'concat';\n case 'contains':\n return 'contains';\n case 'starts-with':\n return 'strstarts';\n case 'ends-with':\n return 'strends';\n case 'matches':\n return 'regex';\n case 'string-length':\n return 'strlen';\n case 'lower-case':\n return 'lcase';\n case 'upper-case':\n return 'ucase';\n case 'substring':\n return 'substring';\n case 'langmatches':\n return 'langmatches';\n default:\n return null;\n }\n }\n}\n\nclass CompileState {\n public readonly query: RdfLocalQuery = {\n patterns: [],\n unions: [],\n optional: [],\n filters: [],\n };\n\n private readonly optionalStack: OptionalFrame[] = [];\n private pathJoinVariableIndex = 0;\n private groupVariableIndex = 0;\n private orderVariableIndex = 0;\n private havingAggregateVariableIndex = 0;\n\n public constructor(\n public readonly basePath: string,\n private readonly skipMinusSharedVariableCheck = false,\n ) {}\n\n public addPattern(pattern: RdfQueryPattern, optional: boolean): void {\n if (optional) {\n this.currentOptionalFrame().patterns.push(this.scopePattern(pattern));\n return;\n }\n this.query.patterns.push(this.scopePattern(pattern));\n }\n\n public addImpossibleGraphPattern(optional: boolean): void {\n const impossible = DataFactory.namedNode(`${this.basePath}__outside_graph_scope__`) as unknown as NamedNode;\n this.addPattern({ graph: impossible }, optional);\n }\n\n public startOptional(): void {\n this.optionalStack.push({\n patterns: [],\n filters: [],\n binds: [],\n unions: [],\n values: [],\n optional: [],\n minus: [],\n exists: [],\n });\n }\n\n public finishOptional(): void {\n const frame = this.optionalStack.pop();\n if (!frame) {\n throw new UnsupportedSparqlQueryError('OPTIONAL scope fallback to compatibility engine');\n }\n if (\n frame.patterns.length > 0\n || frame.filters.length > 0\n || frame.binds.length > 0\n || frame.unions.length > 0\n || frame.values.length > 0\n || frame.optional.length > 0\n || frame.minus.length > 0\n || frame.exists.length > 0\n ) {\n const optionalGroup: RdfOptionalQueryGroup = {\n patterns: frame.patterns,\n ...(frame.values.length ? { values: frame.values } : {}),\n ...(frame.unions.length ? { unions: frame.unions } : {}),\n ...(frame.optional.length ? { optional: frame.optional } : {}),\n ...(frame.minus.length ? { minus: frame.minus } : {}),\n ...(frame.exists.length ? { exists: frame.exists } : {}),\n ...(frame.binds.length ? { binds: frame.binds } : {}),\n ...(frame.filters.length > 0 ? { filters: frame.filters } : {}),\n };\n const parent = this.peekOptionalFrame();\n if (parent) {\n parent.optional.push(optionalGroup);\n } else {\n this.query.optional?.push(optionalGroup);\n }\n }\n }\n\n public addOptionalFilters(filters: RdfQueryFilter[]): void {\n this.currentOptionalFrame().filters.push(...filters);\n }\n\n public addBind(bind: RdfQueryBind, optional: boolean): void {\n if (optional) {\n this.currentOptionalFrame().binds.push(bind);\n return;\n }\n this.query.binds ??= [];\n this.query.binds.push(bind);\n }\n\n public addOptionalUnion(branches: RdfUnionQueryBranch[]): void {\n this.currentOptionalFrame().unions.push({ branches });\n }\n\n public addUnion(branches: RdfUnionQueryBranch[]): void {\n this.query.unions?.push({ branches });\n }\n\n public addOptionalMinus(group: RdfMinusQueryGroup): void {\n this.currentOptionalFrame().minus.push(group);\n }\n\n public addMinus(group: RdfMinusQueryGroup): void {\n this.query.minus ??= [];\n this.query.minus.push(group);\n }\n\n public addOptionalExists(group: RdfExistsQueryGroup): void {\n this.currentOptionalFrame().exists.push(group);\n }\n\n public addExists(group: RdfExistsQueryGroup): void {\n this.query.exists ??= [];\n this.query.exists.push(group);\n }\n\n public addValuesSource(source: RdfValuesBindingSource, optional: boolean): void {\n if (optional) {\n this.currentOptionalFrame().values.push(source);\n return;\n }\n this.query.values ??= [];\n this.query.values.push(source);\n }\n\n public nextPathJoinVariable(): RdfQueryTermPattern {\n this.pathJoinVariableIndex += 1;\n return rdfVar(`${PATH_JOIN_VARIABLE_PREFIX}_${this.pathJoinVariableIndex}`);\n }\n\n public nextGroupVariable(index: number): string {\n this.groupVariableIndex += 1;\n return `__rdf_group_${index}_${this.groupVariableIndex}`;\n }\n\n public nextOrderVariable(index: number): string {\n this.orderVariableIndex += 1;\n return `__rdf_order_${index}_${this.orderVariableIndex}`;\n }\n\n public nextHavingAggregateVariable(): string {\n this.havingAggregateVariableIndex += 1;\n return `__rdf_having_aggregate_${this.havingAggregateVariableIndex}`;\n }\n\n public assertValuesVariablesBoundByRequiredPatterns(): void {\n for (const source of this.query.values ?? []) {\n for (const variable of source.variables) {\n if (!this.isVariableBoundByRequiredShape(variable)) {\n throw new UnsupportedSparqlQueryError('VALUES must constrain a variable from every required embedded query branch');\n }\n }\n }\n for (const filter of this.query.filters ?? []) {\n if (filter.operator !== '$in' || filter.source !== 'values') {\n continue;\n }\n if (!this.isVariableBoundByRequiredShape(filter.variable)) {\n throw new UnsupportedSparqlQueryError('VALUES must constrain a variable from every required embedded query branch');\n }\n }\n }\n\n public assertBindVariablesSafe(): void {\n const bound = new Set<string>();\n for (const variableName of variablesInPatterns(this.query.patterns)) {\n bound.add(variableName);\n }\n for (const unionGroup of this.query.unions ?? []) {\n for (const branch of unionGroup.branches) {\n for (const variableName of variablesInPatterns(branch.patterns)) {\n bound.add(variableName);\n }\n for (const bind of branch.binds ?? []) {\n for (const dependency of variablesInBindExpression(bind.expression)) {\n if (!bound.has(dependency)) {\n throw new UnsupportedSparqlQueryError('BIND dependency must be bound before use locally');\n }\n }\n bound.add(bind.variable);\n }\n }\n }\n for (const bind of this.query.binds ?? []) {\n for (const dependency of variablesInBindExpression(bind.expression)) {\n if (!bound.has(dependency)) {\n throw new UnsupportedSparqlQueryError('BIND dependency must be bound before use locally');\n }\n }\n bound.add(bind.variable);\n }\n for (const rawOptionalGroup of this.query.optional ?? []) {\n assertOptionalBindVariablesSafe(rawOptionalGroup, bound);\n }\n }\n\n public assertDependentGroupsShareRequiredVariables(): void {\n if (this.skipMinusSharedVariableCheck) {\n return;\n }\n for (const minusGroup of this.query.minus ?? []) {\n const shared = variablesInDependentGroup(minusGroup)\n .some((variableName) => queryBindsVariableInRequiredShape(this.query, variableName));\n if (!shared) {\n throw new UnsupportedSparqlQueryError('MINUS must share a required query variable locally');\n }\n }\n for (const existsGroup of this.query.exists ?? []) {\n const shared = variablesInDependentGroup(existsGroup)\n .some((variableName) => queryBindsVariableInRequiredShape(this.query, variableName));\n if (!shared) {\n throw new UnsupportedSparqlQueryError('FILTER EXISTS must share a required query variable locally');\n }\n }\n const requiredBound = variablesBoundByRequiredShape(this.query);\n for (const optionalGroup of this.query.optional ?? []) {\n assertOptionalDependentGroupsShareVariables(normalizeOptionalGroupForAdapter(optionalGroup), requiredBound);\n }\n }\n\n private isVariableBoundByRequiredShape(variableName: string): boolean {\n return queryBindsVariableInRequiredShape(this.query, variableName);\n }\n\n private scopePattern(pattern: RdfQueryPattern): RdfQueryPattern {\n return pattern.graph ? pattern : { ...pattern, graph: { $startsWith: this.basePath } };\n }\n\n private currentOptionalFrame(): OptionalFrame {\n const frame = this.peekOptionalFrame();\n if (!frame) {\n throw new UnsupportedSparqlQueryError('OPTIONAL scope fallback to compatibility engine');\n }\n return frame;\n }\n\n private peekOptionalFrame(): OptionalFrame | undefined {\n return this.optionalStack[this.optionalStack.length - 1];\n }\n}\n\nfunction isVariableTerm(value: Variable | Expression): value is VariableTerm {\n return Boolean(value && 'termType' in value && value.termType === 'Variable');\n}\n\nfunction isSelectVariableTerm(value: Variable | Wildcard): value is VariableTerm {\n return Boolean(value && 'termType' in value && value.termType === 'Variable');\n}\n\nfunction isVariableExpression(value: Variable | Wildcard): value is VariableExpression {\n return Boolean(value && 'expression' in value && 'variable' in value);\n}\n\nfunction isVariableExpressionTerm(value: Expression): value is VariableTerm {\n return Boolean(value && 'termType' in value && value.termType === 'Variable');\n}\n\nfunction isOperationExpression(value: Expression): value is OperationExpression {\n return Boolean(value && 'type' in value && value.type === 'operation');\n}\n\nfunction isStrOperation(value: Expression): value is OperationExpression {\n return isOperationExpression(value) && value.operator.toLowerCase() === 'str';\n}\n\nfunction isFunctionCallExpression(value: Expression): value is FunctionCallExpression {\n return Boolean(value && 'type' in value && value.type === 'functionCall');\n}\n\nfunction isAggregateExpression(value: Expression): value is AggregateExpression {\n return Boolean(value && 'type' in value && value.type === 'aggregate');\n}\n\nfunction isLiteralTerm(value: Expression): value is LiteralTerm {\n return Boolean(value && 'termType' in value && value.termType === 'Literal');\n}\n\nfunction isWildcardTerm(value: Expression | Wildcard): value is Wildcard {\n return value instanceof Wildcard;\n}\n\nfunction isRdfTermExpression(value: Expression): value is LiteralTerm | IriTerm | VariableTerm {\n return Boolean(value && 'termType' in value && value.termType !== 'Quad');\n}\n\nfunction isNamedNodeTerm(value: unknown): value is NamedNode {\n return Boolean(value && typeof value === 'object' && 'termType' in value && value.termType === 'NamedNode');\n}\n\nfunction isRdfJsTerm(value: unknown): value is Term {\n return Boolean(value && typeof value === 'object' && 'termType' in value);\n}\n\nfunction isSimpleTerm(value: Triple['predicate']): value is IriTerm | VariableTerm {\n return Boolean(value && 'termType' in value);\n}\n\nfunction visibleSelectVariables(query: { where?: Pattern[]; values?: ValuePatternRow[] }): string[] {\n const variables = new Set<string>();\n for (const pattern of query.where ?? []) {\n collectPatternVariables(pattern, variables);\n }\n for (const row of query.values ?? []) {\n for (const key of Object.keys(row)) {\n variables.add(key.replace(/^\\?/, ''));\n }\n }\n return [...variables];\n}\n\nfunction collectPatternVariables(pattern: Pattern, variables: Set<string>): void {\n switch (pattern.type) {\n case 'bgp':\n for (const triple of pattern.triples) {\n collectTripleVariables(triple, variables);\n }\n break;\n case 'graph':\n if (pattern.name.termType === 'Variable') {\n variables.add(pattern.name.value);\n }\n for (const child of pattern.patterns) {\n collectPatternVariables(child, variables);\n }\n break;\n case 'optional':\n case 'group':\n case 'union':\n case 'minus':\n case 'service':\n for (const child of pattern.patterns) {\n collectPatternVariables(child, variables);\n }\n break;\n case 'filter':\n collectExpressionVariables(pattern.expression, variables);\n break;\n case 'bind':\n collectExpressionVariables(pattern.expression, variables);\n variables.add(pattern.variable.value);\n break;\n case 'values':\n for (const row of pattern.values) {\n for (const key of Object.keys(row)) {\n variables.add(key.replace(/^\\?/, ''));\n }\n }\n break;\n default:\n if ('queryType' in pattern) {\n for (const child of pattern.where ?? []) {\n collectPatternVariables(child, variables);\n }\n }\n break;\n }\n}\n\nfunction collectTripleVariables(triple: Triple, variables: Set<string>): void {\n collectTermVariables(triple.subject, variables);\n if (isSimpleTerm(triple.predicate)) {\n collectTermVariables(triple.predicate, variables);\n } else {\n collectPathVariables(triple.predicate, variables);\n }\n collectTermVariables(triple.object, variables);\n}\n\nfunction collectPathVariables(path: PropertyPath, variables: Set<string>): void {\n for (const item of path.items) {\n if (isSimpleTerm(item)) {\n collectTermVariables(item, variables);\n } else {\n collectPathVariables(item, variables);\n }\n }\n}\n\nfunction collectExpressionVariables(expression: Expression, variables: Set<string>): void {\n if (isVariableTerm(expression)) {\n variables.add(expression.value);\n return;\n }\n if (!expression || typeof expression !== 'object' || !('type' in expression)) {\n return;\n }\n if (isOperationExpression(expression) || isFunctionCallExpression(expression)) {\n for (const arg of expression.args) {\n if (Array.isArray(arg)) {\n for (const item of arg) {\n collectExpressionVariables(item, variables);\n }\n } else if (arg && !isPattern(arg)) {\n collectExpressionVariables(arg as Expression, variables);\n }\n }\n return;\n }\n if (isAggregateExpression(expression) && !isWildcardTerm(expression.expression)) {\n collectExpressionVariables(expression.expression, variables);\n }\n}\n\nfunction collectTermVariables(term: SparqlTerm, variables: Set<string>): void {\n if (term.termType === 'Variable') {\n variables.add(term.value);\n }\n}\n\nfunction isPattern(value: Expression | Pattern): value is Pattern {\n return Boolean(\n value\n && typeof value === 'object'\n && 'type' in value\n && [\n 'bgp',\n 'optional',\n 'union',\n 'group',\n 'graph',\n 'minus',\n 'service',\n 'filter',\n 'bind',\n 'values',\n 'query',\n ].includes(value.type),\n );\n}\n\nfunction isCompiledVariable(value: RdfQueryTermPattern): value is { variable: string } {\n return Boolean(value && typeof value === 'object' && 'variable' in value);\n}\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n\nfunction uniqueTerms<T extends Term>(values: T[]): T[] {\n const seen = new Set<string>();\n return values.filter((value) => {\n const key = termToId(value as any);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n}\n\nfunction variablesInPattern(pattern: RdfQueryPattern): string[] {\n const values = [pattern.graph, pattern.subject, pattern.predicate, pattern.object];\n return values\n .filter((value): value is { variable: string } => Boolean(value && typeof value === 'object' && 'variable' in value))\n .map((value) => value.variable);\n}\n\nfunction patternsBindVariable(patterns: RdfQueryPattern[], variableName: string): boolean {\n return patterns.some((pattern) => variablesInPattern(pattern).includes(variableName));\n}\n\nfunction variablesInPatterns(patterns: RdfQueryPattern[]): string[] {\n return unique(patterns.flatMap((pattern) => variablesInPattern(pattern)));\n}\n\nfunction variablesBoundByOptionalGroup(optionalGroup: RdfOptionalQueryGroup): string[] {\n return unique([\n ...variablesInPatterns(optionalGroup.patterns),\n ...variablesInValuesSources(optionalGroup.values ?? []),\n ...variablesInUnionGroups(optionalGroup.unions ?? []),\n ...((optionalGroup.binds ?? []).map((bind) => bind.variable)),\n ]);\n}\n\nfunction variablesInUnionGroups(unions: RdfUnionQueryGroup[]): string[] {\n return unique(unions.flatMap((unionGroup) => (\n unionGroup.branches.flatMap((branch) => [\n ...variablesInPatterns(branch.patterns),\n ...variablesInValuesSources(branch.values ?? []),\n ...((branch.binds ?? []).map((bind) => bind.variable)),\n ])\n )));\n}\n\nfunction variablesBoundByRequiredShape(query: RdfLocalQuery): Set<string> {\n return new Set([\n ...variablesInPatterns(query.patterns),\n ...variablesInValuesSources(query.values ?? []),\n ...variablesInUnionGroups(query.unions ?? []),\n ...((query.binds ?? []).map((bind) => bind.variable)),\n ]);\n}\n\nfunction hasNumericGuard(filters: RdfQueryFilter[], variableName: string): boolean {\n return filters.some((filter) => (\n filter.variable === variableName\n && filter.operator === '$termType'\n && filter.value === 'numeric'\n ));\n}\n\nfunction variablesInDependentGroup(group: RdfMinusQueryGroup | RdfExistsQueryGroup): string[] {\n return unique([\n ...variablesInPatterns(group.patterns),\n ...variablesInValuesSources(group.values ?? []),\n ...variablesInUnionGroups(group.unions ?? []),\n ...((group.binds ?? []).map((bind) => bind.variable)),\n ...variablesBoundByNestedOptionalGroups(group.optional ?? []),\n ]);\n}\n\nfunction variablesBoundByNestedOptionalGroups(groups: Array<RdfQueryPattern[] | RdfOptionalQueryGroup>): string[] {\n return unique(groups.flatMap((group) => variablesBoundByOptionalGroup(normalizeOptionalGroupForAdapter(group))));\n}\n\nfunction variablesInValuesSources(sources: RdfValuesBindingSource[]): string[] {\n return unique(sources.flatMap((source) => source.variables));\n}\n\nfunction variablesInBindExpression(expression: RdfBindExpression): string[] {\n switch (expression.type) {\n case 'term':\n return [];\n case 'variable':\n case 'stringValue':\n case 'stringLength':\n return [expression.variable];\n case 'lowerCase':\n case 'upperCase':\n return variablesInBindExpression(expression.expression);\n case 'substring':\n return unique([\n ...variablesInBindExpression(expression.expression),\n ...variablesInBindExpression(expression.start),\n ...(expression.length ? variablesInBindExpression(expression.length) : []),\n ]);\n case 'concat':\n return unique(expression.expressions.flatMap((item) => variablesInBindExpression(item)));\n case 'iri':\n return variablesInBindExpression(expression.expression);\n default: {\n const exhaustive: never = expression;\n return exhaustive;\n }\n }\n}\n\nfunction assertOptionalBindVariablesSafe(\n rawOptionalGroup: RdfQueryPattern[] | RdfOptionalQueryGroup,\n outerBound: Set<string>,\n): void {\n const optionalGroup = normalizeOptionalGroupForAdapter(rawOptionalGroup);\n const optionalBound = new Set(outerBound);\n for (const variableName of variablesInPatterns(optionalGroup.patterns)) {\n optionalBound.add(variableName);\n }\n for (const variableName of variablesInValuesSources(optionalGroup.values ?? [])) {\n optionalBound.add(variableName);\n }\n for (const unionGroup of optionalGroup.unions ?? []) {\n for (const branch of unionGroup.branches) {\n const branchBound = new Set(optionalBound);\n for (const variableName of variablesInPatterns(branch.patterns)) {\n branchBound.add(variableName);\n }\n for (const variableName of variablesInValuesSources(branch.values ?? [])) {\n branchBound.add(variableName);\n }\n for (const bind of branch.binds ?? []) {\n assertBindDependenciesBound(bind, branchBound);\n branchBound.add(bind.variable);\n }\n for (const variableName of branchBound) {\n optionalBound.add(variableName);\n }\n }\n }\n for (const bind of optionalGroup.binds ?? []) {\n assertBindDependenciesBound(bind, optionalBound);\n optionalBound.add(bind.variable);\n }\n for (const nestedOptionalGroup of optionalGroup.optional ?? []) {\n assertOptionalBindVariablesSafe(nestedOptionalGroup, optionalBound);\n }\n}\n\nfunction assertOptionalDependentGroupsShareVariables(\n optionalGroup: RdfOptionalQueryGroup,\n outerBound: Set<string> = new Set(),\n): void {\n const bound = new Set(outerBound);\n for (const variableName of variablesBoundByOptionalGroup(optionalGroup)) {\n bound.add(variableName);\n }\n\n for (const minusGroup of optionalGroup.minus ?? []) {\n const shared = variablesInDependentGroup(minusGroup).some((variableName) => bound.has(variableName));\n if (!shared) {\n throw new UnsupportedSparqlQueryError('OPTIONAL MINUS must share a locally bound optional variable');\n }\n }\n for (const existsGroup of optionalGroup.exists ?? []) {\n const shared = variablesInDependentGroup(existsGroup).some((variableName) => bound.has(variableName));\n if (!shared) {\n throw new UnsupportedSparqlQueryError('OPTIONAL FILTER EXISTS must share a locally bound optional variable');\n }\n }\n for (const nestedOptionalGroup of optionalGroup.optional ?? []) {\n assertOptionalDependentGroupsShareVariables(normalizeOptionalGroupForAdapter(nestedOptionalGroup), bound);\n }\n}\n\nfunction assertBindDependenciesBound(bind: RdfQueryBind, bound: Set<string>): void {\n for (const dependency of variablesInBindExpression(bind.expression)) {\n if (!bound.has(dependency)) {\n throw new UnsupportedSparqlQueryError('OPTIONAL BIND dependency must be bound before use locally');\n }\n }\n}\n\nfunction queryBindsVariableInRequiredShape(query: RdfLocalQuery, variableName: string): boolean {\n if (patternsBindVariable(query.patterns, variableName)) {\n return true;\n }\n if ((query.unions?.length ?? 0) === 0) {\n return false;\n }\n return (query.unions ?? []).every((group) => (\n group.branches.every((branch) => patternsBindVariable(branch.patterns, variableName))\n ));\n}\n\nfunction normalizeOptionalGroupForAdapter(group: RdfQueryPattern[] | RdfOptionalQueryGroup): RdfOptionalQueryGroup {\n return Array.isArray(group) ? { patterns: group } : group;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RdfSparqlAdapter.js","sourceRoot":"","sources":["../../../src/storage/rdf/RdfSparqlAdapter.ts"],"names":[],"mappings":";;;AAAA,2BAA2C;AAC3C,uCAA4C;AAmD5C,+DAA2D;AAE3D,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAC/C,MAAM,iBAAiB,GAAG,yCAAyC,CAAC;AAoHpE,MAAa,2BAA4B,SAAQ,KAAK;IACpD,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AALD,kEAKC;AAED,MAAa,0BAA2B,SAAQ,KAAK;IACnD,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AALD,gEAKC;AAED,MAAa,gBAAgB;IACpB,OAAO,CAAC,KAA2B,EAAE,QAAgB;QAC1D,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ;YACtC,CAAC,CAAC,IAAI,iBAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;YAChD,CAAC,CAAC,KAAK,CAAC;QAEV,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,2BAA2B,CAAC,sDAAsD,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC3F,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,YAAY,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QAC3G,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,CAAE,MAAsB,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAE,MAAsB,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,QAAQ;YAC7C,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC;YAC5C,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAE,MAAsB,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACvF,CAAC;QACD,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAChC,KAAK,CAAC,4CAA4C,EAAE,CAAC;QACrD,KAAK,CAAC,2CAA2C,EAAE,CAAC;QAEpD,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,KAAK,WAAW;YACxD,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,KAAK,UAAU;YACrD,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;YAClD,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC/B,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAClE,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAE,MAAsB,CAAC,QAAQ,CAAC,CAAC;YACjE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACjC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,iBAAiB;YACjB,eAAe;SAChB,CAAC;IACJ,CAAC;IAEM,kBAAkB,CACvB,KAA2B,EAC3B,QAAgB,EAChB,UAAyC,EAAE;QAE3C,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ;YACtC,CAAC,CAAC,IAAI,iBAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;YAChD,CAAC,CAAC,KAAK,CAAC;QAEV,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,2BAA2B,CAAC,kDAAkD,CAAC,CAAC;QAC5F,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACpF,MAAM,UAAU,GAAoC,EAAE,CAAC;QACvD,KAAK,MAAM,MAAM,IAAK,MAAiB,CAAC,OAAO,EAAE,CAAC;YAChD,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,2BAA2B,CAAC,sEAAsE,CAAC,CAAC;YAChH,CAAC;YAED,QAAQ,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC1B,KAAK,QAAQ;oBACX,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACjB,MAAM,IAAI,2BAA2B,CAAC,yEAAyE,CAAC,CAAC;oBACnH,CAAC;oBACD,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC;qBAC3E,CAAC,CAAC;oBACH,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACjB,MAAM,IAAI,2BAA2B,CAAC,yEAAyE,CAAC,CAAC;oBACnH,CAAC;oBACD,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC;qBAC3E,CAAC,CAAC;oBACH,MAAM;gBACR,KAAK,aAAa;oBAChB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACjB,MAAM,IAAI,2BAA2B,CAAC,yEAAyE,CAAC,CAAC;oBACnH,CAAC;oBACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;oBAChF,MAAM;gBACR,KAAK,cAAc;oBACjB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;oBAC/E,MAAM;gBACR;oBACE,MAAM,IAAI,2BAA2B,CAAC,sEAAsE,CAAC,CAAC;YAClH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,UAAU;aACvB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC;aAClD,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,UAAU;aACvB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC;aAClD,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GAAG,UAAU;aAChC,MAAM,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;YACzB,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACrC,OAAO,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzC,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBAC3C,OAAO,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;YACnE,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACrC,OAAO,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;YACxC,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,gBAAgB,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,2BAA2B,CAAC,mEAAmE,CAAC,CAAC;QAC7G,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC1C,CAAC;IAEO,kBAAkB,CACxB,KAAqC,EACrC,QAAgB,EAChB,YAAwB;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAC/F,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,cAAc,CAAC;YAC7D,QAAQ;SACT,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAC9B,MAA0E,EAC1E,QAAgB,EAChB,YAAwB;QAExB,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7C,MAAM,IAAI,2BAA2B,CAAC,wFAAwF,CAAC,CAAC;QAClI,CAAC;QACD,MAAM,KAAK,GAAG,iBAAiB,IAAI,iBAAiB;YAClD,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,iBAAiB;gBACnB,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,cAAc,CAAC;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,YAAY,CAAC;QACvF,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3E,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ;YACtC,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ;YACpC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACpD,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC3E,YAAY,EAAE,iBAAiB;YAC/B,UAAU,EAAE,eAAe;SAC5B,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,iBAAiB;YAC/B,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,CAAC;YACjH,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,iBAAiB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,2DAA2D,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB;YAC/B,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,CAAC;YACjH,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,iBAAiB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,2DAA2D,CAAC,CAAC;QAC7G,CAAC;QACD,IAAI,iBAAiB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5C,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,KAAK;gBACL,OAAO;aACR,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,KAAK;gBACL,QAAQ,EAAE,OAAO;aAClB,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,KAAK;YACL,OAAO;YACP,OAAO;SACR,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAC9B,KAAkF,EAClF,QAAgB,EAChB,KAAa;QAEb,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC;YAC9E,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC;SACjF,CAAC;IACJ,CAAC;IAEO,kBAAkB,CACxB,MAAiB,EACjB,QAAgB,EAChB,KAAa,EACb,MAAc;QAEd,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,cAAc,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACxD,IAAI,QAAQ,KAAK,IAAI,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,IAAI,MAAM,0DAA0D,CAAC,CAAC;YACtH,CAAC;YACD,OAAO,QAAgB,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;IAC9C,CAAC;IAEO,wBAAwB,CAC9B,IAAoC,EACpC,QAAgB;QAEhB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,YAAY,EAAE,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC;aAC9D,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO;YACL,YAAY,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;gBACpC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC;gBACjE,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;oBACxB,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;oBAChC,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC;YACnD,UAAU,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC;gBACrE,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAEO,gCAAgC,CAAC,QAAgB;QACvD,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAEO,yBAAyB,CAC/B,MAAiB,EACjB,QAAgB,EAChB,MAAc;QAEd,MAAM,cAAc,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACxD,IAAI,QAAQ,KAAK,IAAI,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,0BAA0B,CAAC,UAAU,MAAM,2CAA2C,CAAC,CAAC;YACpG,CAAC;YACD,OAAO,QAAgB,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;IAC9C,CAAC;IAEO,eAAe,CAAC,KAAkB;QACxC,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IAEO,gBAAgB,CACtB,KAA0B,EAC1B,QAAgB,EAChB,KAAa;QAEb,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,QAAQ,KAAK,IAAI,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,+DAA+D,CAAC,CAAC;QACjH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,eAAe,CAAC,QAAgB;QACtC,OAAO,gBAAW,CAAC,SAAS,CAAC,GAAG,QAAQ,yBAAyB,CAAoB,CAAC;IACxF,CAAC;IAEO,oBAAoB,CAC1B,QAAoD,EACpD,QAAgB,EAChB,KAAa,EACb,UAAoF,EAAE;QAEtF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,0DAA0D,CAAC,CAAC;QAC5G,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,+BAA+B,CAAC,QAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAChI,IAAI,CAAC,eAAe,CAAC,QAAqB,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACpG,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAChC,KAAK,CAAC,4CAA4C,EAAE,CAAC;QACrD,KAAK,CAAC,2CAA2C,EAAE,CAAC;QACpD,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACjF,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,uEAAuE,CAAC,CAAC;QACzH,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAEO,uBAAuB,CAAC,QAAmC,EAAE,KAAa;QAChF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,0DAA0D,CAAC,CAAC;QAC5G,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACnC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YACH,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAC/B,KAAqC,EACrC,QAAgB,EAChB,KAAa,EACb,YAAkC,EAClC,UAAoC,EAAE;QAEtC,MAAM,QAAQ,GAA8B,EAAE,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,KAAK,GAAG,YAAY,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;oBACtC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBAClD,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,mDAAmD,CAAC,CAAC;oBACrG,CAAC;oBACD,KAAK,GAAG,IAAA,8BAAM,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClC,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;oBAC9C,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,mDAAmD,CAAC,CAAC;gBACrG,CAAC;qBAAM,CAAC;oBACN,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC;gBAClE,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,iDAAiD,CAAC,CAAC;YACnG,CAAC;YACD,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC7B,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,0DAA0D,CAAC,CAAC;YAC5G,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;YACzC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,2DAA2D,CAAC,CAAC;gBAC7G,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,2DAA2D,CAAC,CAAC;gBAC7G,CAAC;gBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACrD,QAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK;oBACL,OAAO,EAAE,OAAO,CAAC,OAA8B;oBAC/C,SAAS,EAAE,OAAO,CAAC,SAAgC;oBACnD,MAAM,EAAE,OAAO,CAAC,MAA6B;iBAC9C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,gCAAgC,CAAC,KAAoB;QAC3D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACvD,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/C,IAAI,CAAC,iCAAiC,CAAC,KAAK,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;QACpF,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAEO,0BAA0B,CAChC,KAAyB,EACzB,cAA2B;QAE3B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvD,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/G,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACvC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEO,iCAAiC,CACvC,KAAyB,EACzB,cAA2B,EAC3B,oBAAiC;QAEjC,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CACzG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CACnC,CAAC,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrE,IACE,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC;mBACtF,MAAM,CAAC,MAAM,GAAG,CAAC;mBACjB,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,EAChE,CAAC;gBACD,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAC5I,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACvC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,iCAAiC,CAAC,MAAM,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,iCAAiC,CAAC,KAAK,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;QACtF,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,iCAAiC,CAAC,MAAM,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,KAAc;QAC3C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,IAAK,KAAc,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC;IACxH,CAAC;IAEO,qBAAqB,CAAC,IAA6B;QACzD,IAAI,SAAS,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QACD,MAAM,QAAQ,GAAI,IAA4C,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC9E,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAY,EAAE,CAC5C,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAEO,+BAA+B,CAAC,OAAwB,EAAE,KAAa;QAC7E,MAAM,KAAK,GAAG,CAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAE,CAAC;QACrE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,wDAAwD,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;IAEO,+BAA+B,CACrC,QAAmB,EACnB,QAAgB,EAChB,KAAa,EACb,OAAgB,EAChB,UAAgC;QAEhC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,0DAA0D,CAAC,CAAC;QAC5G,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,OAAO;oBACV,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAC3C,CAAC;yBAAM,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;wBACjD,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,mDAAmD,CAAC,CAAC;oBACrG,CAAC;yBAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACpD,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,0DAA0D,CAAC,CAAC;oBAC5G,CAAC;oBACD,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;oBAC1F,MAAM;gBACR,KAAK,KAAK;oBACR,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,iDAAiD,CAAC,CAAC;oBACnG,CAAC;oBACD,MAAM;gBACR,KAAK,UAAU,CAAC;gBAChB,KAAK,OAAO;oBACV,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBAC7F,MAAM;gBACR,KAAK,OAAO;oBACV,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;wBACtC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBAC/G,CAAC;oBACD,MAAM;gBACR,KAAK,QAAQ,CAAC;gBACd,KAAK,QAAQ;oBACX,MAAM;gBACR;oBACE,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;wBAC3B,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,8CAA8C,CAAC,CAAC;oBAChG,CAAC;oBACD,MAAM;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gCAAgC,CAAC,KAAyB,EAAE,QAAgB,EAAE,KAAa;QACjG,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC7C,IAAI,CAAC,oCAAoC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC1F,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,sFAAsF,CAAC,CAAC;QACxI,CAAC;IACH,CAAC;IAEO,oCAAoC,CAC1C,KAAyB,EACzB,QAAgB,EAChB,wBAA6C,EAC7C,kBAA+B;QAE/B,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC1D,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAC/F,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE,QAAQ,CAAC,CACrD,CAAC,CAAC;QACH,IAAI,CAAC,4CAA4C,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAElG,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,oCAAoC,CACvC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAC3D,QAAQ,EACR,eAAe,EACf,kBAAkB,CACnB,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACvC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,oCAAoC,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;QAClG,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAEO,4CAA4C,CAClD,OAAkC,EAClC,eAA4B,EAC5B,QAAgB;QAEhB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrE,IACE,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC;mBACtF,MAAM,CAAC,MAAM,GAAG,CAAC;mBACjB,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAClF,CAAC;gBACD,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,8BAA8B,CAAC,KAAc,EAAE,QAAgB;QACrE,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAK,KAAc,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1F,CAAC;IAEO,gCAAgC,CACtC,OAA0C,EAC1C,cAA+C,EAC/C,eAA4B,EAC5B,WAAwC;QAExC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,SAAS;YACX,CAAC;YACD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxC,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpD,SAAS;gBACX,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3D,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,uBAAuB,CAC7B,KAAqC,EACrC,QAAgB,EAChB,YAAwB;QAExB,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,2BAA2B,CAAC,8DAA8D,CAAC,CAAC;gBACxG,CAAC;gBACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;gBAC7D,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACvC,MAAM,IAAI,2BAA2B,CAAC,gEAAgE,CAAC,CAAC;YAC1G,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,2BAA2B,CAAC,uEAAuE,CAAC,CAAC;YACjH,CAAC;YACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,yBAAyB,CAAC,YAA4C,EAAE,QAAgB;QAC9F,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,YAAY,KAAK,QAAQ;YAC5C,CAAC,CAAC,gBAAW,CAAC,SAAS,CAAC,YAAY,CAAC;YACrC,CAAC,CAAC,YAAY,CAAC;QACjB,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,2BAA2B,CAAC,+EAA+E,CAAC,CAAC;QACzH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,mBAAmB,CAAC,MAAc,EAAE,KAAgB;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,gBAAW,CAAC,IAAI,CAAC,OAAc,EAAE,SAAgB,EAAE,MAAa,EAAE,KAAY,CAAoB,CAAC;IAC5G,CAAC;IAEO,sBAAsB,CAAC,IAAa,EAAE,QAAiC;QAC7E,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,iBAAiB,QAAQ,8CAA8C,CAAC,CAAC;IACjH,CAAC;IAEO,mBAAmB,CAAC,IAAgB;QAC1C,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAkB,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAuB,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,6EAA6E,CAAC,CAAC;IACvH,CAAC;IAEO,eAAe,CACrB,QAAmB,EACnB,KAAsC,EACtC,KAAmB,EACnB,QAAiB,EACjB,eAAqC;QAErC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,KAAK;oBACR,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;oBACjD,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;oBACpE,MAAM;gBACR,KAAK,UAAU;oBACb,KAAK,CAAC,aAAa,EAAE,CAAC;oBACtB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;oBAC5E,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;gBACR,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,UAAU,GAAI,OAAyB,CAAC,UAAU,CAAC;oBACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;oBAC7D,IAAI,iBAAiB,EAAE,CAAC;wBACtB,IAAI,QAAQ,EAAE,CAAC;4BACb,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAC9C,iBAAiB,EACjB,KAAK,EACL,KAAK,CAAC,QAAQ,EACd,mBAAmB,EACnB,eAAe,CAChB,CAAC,CAAC;4BACH,MAAM;wBACR,CAAC;wBACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAC;wBAC1H,MAAM;oBACR,CAAC;oBACD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBACvD,IAAI,cAAc,EAAE,CAAC;wBACnB,IAAI,QAAQ,EAAE,CAAC;4BACb,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAC7C,cAAc,EACd,KAAK,EACL,KAAK,CAAC,QAAQ,EACd,eAAe,EACf,eAAe,CAChB,CAAC,CAAC;4BACH,MAAM;wBACR,CAAC;wBACD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;wBAClH,MAAM;oBACR,CAAC;oBACD,IAAI,QAAQ,EAAE,CAAC;wBACb,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;wBACzD,MAAM;oBACR,CAAC;oBACD,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;oBAC7D,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO;oBACV,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;oBAChF,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,QAAQ,EAAE,CAAC;wBACb,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;wBAC5G,MAAM;oBACR,CAAC;oBACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;oBACpG,MAAM;gBACR,KAAK,SAAS;oBACZ,MAAM,IAAI,0BAA0B,CAAC,oEAAoE,CAAC,CAAC;gBAC7G,KAAK,MAAM;oBACT,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAsB,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAClF,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,QAAQ,EAAE,CAAC;wBACb,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAuB,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;wBAChH,MAAM;oBACR,CAAC;oBACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAuB,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;oBACxG,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,CAAC,iBAAiB,CAAE,OAAyB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAC3E,MAAM;gBACR;oBACE,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;wBAC3B,MAAM,IAAI,2BAA2B,CAAC,6CAA6C,CAAC,CAAC;oBACvF,CAAC;oBACD,MAAM,IAAI,2BAA2B,CAAC,+BAAgC,OAA6B,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;YAC7H,CAAC;QACH,CAAC;IACH,CAAC;IAEO,oBAAoB,CAC1B,QAAmB,EACnB,KAAsC,EACtC,QAAgB,EAChB,eAAqC;QAErC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,2BAA2B,CAAC,8CAA8C,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,gBAAgB,GAA0B,EAAE,CAAC;QACnD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,kBAAkB,CACxB,MAAe,EACf,KAAsC,EACtC,QAAgB,EAChB,eAAqC;QAErC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAC/C,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,CACxE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;QACnG,WAAW,CAAC,uBAAuB,EAAE,CAAC;QACtC,WAAW,CAAC,4CAA4C,EAAE,CAAC;QAC3D,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,2BAA2B,CAAC,oEAAoE,CAAC,CAAC;QAC9G,CAAC;QACD,OAAO,CAAC;gBACN,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ;gBACpC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9E,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrF,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CACvB,OAAqB,EACrB,KAAsC,EACtC,QAAgB,EAChB,eAAqC;QAErC,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IAChG,CAAC;IAEO,oBAAoB,CAC1B,QAAmB,EACnB,KAAsC,EACtC,QAAgB,EAChB,KAAa,EACb,eAAqC;QAErC,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;QAC1E,UAAU,CAAC,uBAAuB,EAAE,CAAC;QACrC,UAAU,CAAC,4CAA4C,EAAE,CAAC;QAC1D,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACtE,MAAM,IAAI,2BAA2B,CAAC,UAAU,KAAK,mCAAmC,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3F,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,wDAAwD,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ;YACnC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrF,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnF,CAAC;IACJ,CAAC;IAEO,kBAAkB,CACxB,QAAmB,EACnB,KAAsC,EACtC,QAAgB,EAChB,KAAa,EACb,eAAqC;QAErC,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;QAC3E,WAAW,CAAC,uBAAuB,EAAE,CAAC;QACtC,WAAW,CAAC,4CAA4C,EAAE,CAAC;QAC3D,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACxE,MAAM,IAAI,2BAA2B,CAAC,UAAU,KAAK,mCAAmC,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,wDAAwD,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ;YACpC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrF,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,UAAsB;QAC9C,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC;YAC5F,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,2BAA2B,CAAC,0EAA0E,CAAC,CAAC;QACpH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,KAAK,OAAO;YAC7B,CAAC,CAAC,OAAO,CAAC,QAAQ;YAClB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAChB,CAAC;IAEO,cAAc,CAAC,UAAsB;QAC3C,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,2BAA2B,CAAC,sEAAsE,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,KAAK,OAAO;YAC7B,CAAC,CAAC,OAAO,CAAC,QAAQ;YAClB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAC,MAAe;QACzC,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO;YAC5B,CAAC,CAAC,MAAM,CAAC,QAAQ;YACjB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IAEO,UAAU,CAChB,OAAgC,EAChC,KAAsC,EACtC,KAAmB,EACnB,QAAiB;QAEjB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;gBACpE,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,mBAAmB,CACzB,OAAqB,EACrB,KAAmB,EACnB,QAAiB,EACjB,eAAqC;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACzF,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,KAAK,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACzC,MAAM,gBAAgB,GAAmB,eAAe;gBACtD,CAAC,CAAC;oBACA,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;oBAC5B,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC;iBACrD;gBACD,CAAC,CAAC;oBACA,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;oBAC5B,QAAQ,EAAE,aAAa;oBACvB,KAAK,EAAE,KAAK,CAAC,QAAQ;iBACtB,CAAC;YACJ,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,CAAC,kBAAkB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAClF,CAAC;IAEO,sBAAsB,CAC5B,IAA4B,EAC5B,QAAgB,EAChB,eAAqC;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,KAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,CAAC;IAEO,kBAAkB,CAAC,KAA0B,EAAE,KAAW;QAChE,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAA,aAAQ,EAAC,KAAY,CAAC,KAAK,IAAA,aAAQ,EAAC,KAAY,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,MAAM,GAAI,KAA2B,CAAC,GAAG,CAAC;QAChD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrD,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,IAAI,IAAA,aAAQ,EAAC,KAAY,CAAC,KAAK,IAAA,aAAQ,EAAC,KAAY,CAAC,CAC/G,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,KAA0B;QACvD,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,2BAA2B,CAAC,+DAA+D,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAa,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,MAAM,GAAI,KAA2B,CAAC,GAAG,CAAC;QAChD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,CAAC,EAAE,CAAC;YAChH,OAAO,MAAgB,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,+DAA+D,CAAC,CAAC;IACzG,CAAC;IAEO,WAAW,CAAC,OAAoB,EAAE,QAAgB;QACxD,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;YAChC,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;SACrE,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAC,UAAsB,EAAE,QAAgB;QACpE,OAAO,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IAEO,yBAAyB,CAAC,UAAsB,EAAE,QAAgB,EAAE,KAAa;QACvF,MAAM,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YACnE,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAA6B;aACpC,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,UAAU,CAAC,KAAK;aAC3B,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,8CAA8C,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1E,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO;gBACL,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;aACtF,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YACtD,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;aACzF,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YACtD,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;aACzF,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAyB,EAAE,EAAE,CAAC,CAC9D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAC9D,CAAC;aACH,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;gBAClF,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;aACnF,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YACtD,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;gBACxF,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;gBACnF,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;oBAClC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;aAC9F,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAyB,EAAE,EAAE,CAAC,CAC9D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAC9D,CAAC;aACH,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC7C,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;gBACxF,IAAI,EAAE,QAAQ;aACf,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;gBACrF,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;aACvF,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;gBACrF,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;aACvF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,2BAA2B,CAAC,GAAG,KAAK,IAAI,QAAQ,mCAAmC,CAAC,CAAC;IACjG,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,KAAsC,EAAE,KAAmB;QAC/F,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/F,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,2BAA2B,CAAC,iDAAiD,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,CAAC;gBACN,KAAK;gBACL,OAAO;gBACP,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC7C,MAAM;aACP,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CACzB,SAA8B,EAC9B,OAA4B,EAC5B,MAA2B,EAC3B,KAAsC,EACtC,KAAmB;QAEnB,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAwB,CAAC,EAAE,CAAC;YAChG,OAAO;gBACL,WAAW,CAAC,OAAO;oBACjB,CAAC,CAAC;wBACE,KAAK;wBACL,OAAO,EAAE,MAAM;wBACf,SAAS,EAAE,cAAc;wBACzB,MAAM,EAAE,OAAO;qBAChB;oBACH,CAAC,CAAC;wBACE,KAAK;wBACL,OAAO;wBACP,SAAS,EAAE,cAAc;wBACzB,MAAM;qBACP;aACN,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,2BAA2B,CAAC,iDAAiD,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,2BAA2B,CAAC,uDAAuD,CAAC,CAAC;QACjG,CAAC;QAED,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,IAAI,cAAc,GAAG,OAAO,CAAC;QAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,KAAK,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;YAC5D,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC3B,CAAC,CAAC;oBACE,KAAK;oBACL,OAAO,EAAE,aAAa;oBACtB,SAAS;oBACT,MAAM,EAAE,cAAc;iBACvB;gBACH,CAAC,CAAC;oBACE,KAAK;oBACL,OAAO,EAAE,cAAc;oBACvB,SAAS;oBACT,MAAM,EAAE,aAAa;iBACtB,CAAC,CAAC;YACP,cAAc,GAAG,aAAa,CAAC;QACjC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,2BAA2B,CAAC,OAAyB;QAC3D,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YACpC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAoB;YAC1C,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAwB,CAAC,EAAE,CAAC;IAC3E,CAAC;IAEO,sBAAsB,CAAC,IAAkB;QAC/C,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAEO,2BAA2B,CAAC,IAAkB;QACpD,OAAO,IAAI,CAAC,+BAA+B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEO,+BAA+B,CAAC,IAA4B,EAAE,OAAgB;QACpF,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAc,EAAE,CAAC;QACjC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,UAAqB,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;YAC1B,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE;YACzB,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAEO,0BAA0B,CAAC,IAA4B,EAAE,OAAgB;QAC/E,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,IAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAc,EAAE,CAAC;YACjC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;oBACjC,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC,UAAqB,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC1B,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;gBAC3B,CAAC,CAAC,IAAI,CAAC;QACX,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/D,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,gBAAgB,CAAC,IAA4B,EAAE,QAAgB;QACrE,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,IAAA,8BAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAuB,CAAC;IACjC,CAAC;IAEO,WAAW,CAAC,IAAgB;QAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,IAAA,8BAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,2BAA2B,CAAC,iDAAiD,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,IAAuB,CAAC;IACjC,CAAC;IAEM,oBAAoB,CAAC,QAAgC,EAAE,IAAqB,EAAE,KAAY;QAC/F,OAAO,IAAI,CAAC,mBAAmB,CAC7B,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACxB,GAAG,MAAM;YACT,KAAK,EAAE,KAAK,IAAI,gBAAW,CAAC,YAAY,EAAE;SAC3C,CAAC,CAAC,EACH,IAAI,CACL,CAAC;IACJ,CAAC;IAEM,sBAAsB,CAAC,QAAmC,EAAE,IAAqB;QACtF,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAEO,mBAAmB,CAAC,QAAmC,EAAE,IAAqB;QACpF,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC5D,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChD,SAAS;gBACX,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,IAAI,KAAK,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;oBACxE,SAAS;gBACX,CAAC;gBACD,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;oBACzE,SAAS;gBACX,CAAC;gBACD,IAAI,SAAS,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;oBACvC,SAAS;gBACX,CAAC;gBACD,IAAI,MAAM,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;oBACvC,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,GAAG,gBAAW,CAAC,IAAI,CAAC,OAAc,EAAE,SAAgB,EAAE,MAAa,EAAE,KAAY,CAAoB,CAAC;gBAChH,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,aAAQ,EAAC,IAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,wBAAwB,CAAC,KAAqB;QACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,2BAA2B,CAAC,6DAA6D,CAAC,CAAC;QACvG,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,2BAA2B,CAAC,2DAA2D,CAAC,CAAC;YACrG,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC1F,MAAM,IAAI,2BAA2B,CAAC,gDAAgD,CAAC,CAAC;YAC1F,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;gBACzC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC7C,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;aACxC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,KAAoB,EAAE,UAAyB;QAC5E,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,mBAAQ,EAAE,CAAC;YAC3E,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,2BAA2B,CAAC,8EAA8E,CAAC,CAAC;YACxH,CAAC;YACD,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,iCAAiC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC/G,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,IAAI,2BAA2B,CAAC,+EAA+E,CAAC,CAAC;YACzH,CAAC;YACD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,8BAAM,EAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7C,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,IAAI,CAAC,iCAAiC,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjE,MAAM,IAAI,2BAA2B,CAAC,sEAAsE,CAAC,CAAC;gBAChH,CAAC;gBACD,OAAO,IAAA,8BAAM,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACpC,OAAO,MAAyB,CAAC;YACnC,CAAC;YACD,MAAM,IAAI,2BAA2B,CAAC,0DAA0D,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,2BAA2B,CAAC,2DAA2D,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,mBAAmB,CAAC,IAAyB,EAAE,GAAkB;QACvE,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,IAAY,CAAC;IACtB,CAAC;IAEO,sBAAsB,CAAC,KAAkB,EAAE,KAAmB;QACpE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,mBAAQ,EAAE,CAAC;YAC3E,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,2BAA2B,CAAC,0DAA0D,CAAC,CAAC;YACpG,CAAC;YACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvD,KAAK,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,CAAC;QACpD,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,2BAA2B,CAAC,kFAAkF,CAAC,CAAC;YAC5H,CAAC;YAED,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1C,MAAM,IAAI,2BAA2B,CAAC,uEAAuE,CAAC,CAAC;gBACjH,CAAC;gBACD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACtC,IACE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;uBACpB,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;uBAChC,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,EACrE,CAAC;oBACD,MAAM,IAAI,2BAA2B,CAAC,kDAAkD,CAAC,CAAC;gBAC5F,CAAC;gBACD,KAAK,CAAC,OAAO,CAAC;oBACZ,QAAQ,EAAE,KAAK;oBACf,UAAU,EAAE,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;iBACxF,EAAE,KAAK,CAAC,CAAC;gBACV,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC;YACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrG,UAAU,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAC9E,UAAU,CAAC,SAAS,KAAK,iBAAiB,CAAC;YAC3C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,0BAA0B,CAChC,SAA8B,EAC9B,EAAU,EACV,KAAmB;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,mBAAmB,GAAG,SAAS,CAAC,UAAU,CAAC;QACjD,IAAI,IAAI,KAAK,OAAO,IAAI,cAAc,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,2BAA2B,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;QACrG,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,CAAC,mBAAmB,CAAC;YAClD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,OAAO;YACL,IAAI;YACJ,EAAE;YACF,QAAQ;YACR,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,QAAQ,IAAI,CAAC,QAAQ;gBACrD,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,wBAAwB,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,WAAmB;QACvC,QAAQ,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;YAClC,KAAK,OAAO,CAAC;YACb,KAAK,KAAK,CAAC;YACX,KAAK,KAAK,CAAC;YACX,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACR,OAAO,WAAW,CAAC,WAAW,EAA+B,CAAC;YAChE;gBACE,MAAM,IAAI,2BAA2B,CAAC,aAAa,WAAW,mCAAmC,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IAEO,0BAA0B,CAAC,QAA4B,EAAE,KAAmB;QAClF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,2BAA2B,CAAC,+CAA+C,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,2BAA2B,CAAC,8EAA8E,CAAC,CAAC;QACxH,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,2BAA2B,CAAC,4DAA4D,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAEO,iCAAiC,CAAC,UAAsB,EAAE,QAAgB;QAChF,OAAO,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IACnF,CAAC;IAEO,cAAc,CAAC,KAAiB,EAAE,KAAmB;QAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7B,IAAI,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;oBACtE,KAAK,CAAC,OAAO,CAAC;wBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK;wBAC9B,UAAU,EAAE;4BACV,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK;yBACjC;qBACF,EAAE,KAAK,CAAC,CAAC;gBACZ,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9E,KAAK,CAAC,OAAO,CAAC;gBACZ,QAAQ,EAAE,aAAa;gBACvB,UAAU,EAAE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;aAC5E,EAAE,KAAK,CAAC,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,wBAAwB,CAAC,UAAsB,EAAE,QAAgB;QACvE,OAAO,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IAEO,aAAa,CAAC,MAAoB,EAAE,KAAmB;QAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YACxE,MAAM,IAAI,2BAA2B,CAAC,2DAA2D,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5F,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,CAAC;IAEO,mBAAmB,CAAC,UAAsB,EAAE,KAAmB;QACrE,MAAM,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,2BAA2B,CAAC,qDAAqD,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1H,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,2BAA2B,CAAC,UAAU,QAAQ,mCAAmC,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACjG,CAAC;IAEO,yBAAyB,CAC/B,QAAgC,EAChC,IAAsC,EACtC,KAAuC,EACvC,KAAmB;QAEnB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,kCAAkC,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrF,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO;gBACL,QAAQ,EAAE,aAAa;gBACvB,QAAQ;gBACR,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;aACzC,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,kCAAkC,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACvF,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO;gBACL,QAAQ,EAAE,cAAc;gBACxB,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAC5C,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;aACxC,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,6DAA6D,CAAC,CAAC;IACvG,CAAC;IAEO,kCAAkC,CAAC,UAAsB,EAAE,KAAmB;QACpF,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC;YACzC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,mBAAmB,GAAG,UAAU,CAAC,UAAU,CAAC;QAClD,MAAM,QAAQ,GAAG,cAAc,CAAC,mBAAmB,CAAC;YAClD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;QACjD,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CACvD,IAAI,KAAK,SAAS,CAAC,IAAI;eAClB,QAAQ,KAAK,SAAS,CAAC,QAAQ;eAC/B,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CACzD,CAAC,CAAC;QACH,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,iBAAiB,CAAC,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,eAAe,GAAsB;YACzC,IAAI;YACJ,EAAE,EAAE,KAAK,CAAC,2BAA2B,EAAE;YACvC,QAAQ;YACR,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAI,CAAC,QAAQ;gBACtD,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,wBAAwB,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,UAAU,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QAC5E,OAAO,eAAe,CAAC,EAAE,CAAC;IAC5B,CAAC;IAEO,qBAAqB,CAAC,KAAkB,EAAE,UAAyB,EAAE,SAAmB;QAC9F,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,2BAA2B,CAAC,6DAA6D,CAAC,CAAC;QACvG,CAAC;QACD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;YACjC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACxE,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;SACzD,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,2BAA2B,CAAC,wEAAwE,CAAC,CAAC;QAClH,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC7C,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxC,MAAM,IAAI,2BAA2B,CAAC,sDAAsD,CAAC,CAAC;gBAChG,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,oBAAoB,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjF,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,kBAAkB,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,EAAE,CAAC;YACtD,MAAM,IAAI,2BAA2B,CAAC,6EAA6E,CAAC,CAAC;QACvH,CAAC;QACD,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACxF,MAAM,IAAI,2BAA2B,CAAC,6EAA6E,CAAC,CAAC;QACvH,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC/G,MAAM,IAAI,2BAA2B,CAAC,4DAA4D,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,KAAiB,EAAE,KAAmB;QACzD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAChC,IAAI,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrC,OAAO;oBACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK;oBAChC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;iBAC7C,CAAC;YACJ,CAAC;YACD,MAAM,aAAa,GAAG,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACrD,KAAK,CAAC,OAAO,CAAC;gBACZ,QAAQ,EAAE,aAAa;gBACvB,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;aAC1E,EAAE,KAAK,CAAC,CAAC;YACV,OAAO;gBACL,QAAQ,EAAE,aAAa;gBACvB,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;aAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,UAAsB,EAAE,QAAgB;QACrE,OAAO,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IAEO,aAAa,CAAC,UAAsB;QAC1C,MAAM,oBAAoB,GAAG,IAAI,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,oBAAoB,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC1E,MAAM,IAAI,2BAA2B,CAAC,qDAAqD,CAAC,CAAC;YAC/F,CAAC;YACD,UAAU,GAAG,oBAAoB,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,oBAA2C,CAAC;QAC3D,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7G,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC;oBACN,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClE,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,2BAA2B,CAAC,kDAAkD,CAAC,CAAC;YAC5F,CAAC;YACD,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CACjD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EACtC,MAAM,EACN,QAAQ,KAAK,OAAO,CACrB,CAAC;YACF,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1B,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC;oBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;oBAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBACvD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC;oBACN,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,QAAQ,EAAE,cAAc;oBACxB,OAAO,EAAE,WAAW,CAAC,OAAO;oBAC5B,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBACpD,KAAK,EAAE,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;iBACjG,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,2BAA2B,CAAC,UAAU,QAAQ,mCAAmC,CAAC,CAAC;IAC/F,CAAC;IAEO,eAAe,CAAC,UAA+B;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,QAA4B,CAAC;QACjC,IAAI,OAAO,GAA8B,SAAS,CAAC;QACnD,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,MAAM,MAAM,GAA0B,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,2BAA2B,CAAC,yEAAyE,CAAC,CAAC;YACnH,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBAC3D,MAAM,IAAI,2BAA2B,CAAC,yEAAyE,CAAC,CAAC;YACnH,CAAC;YACD,IAAI,QAAQ,IAAI,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC7C,MAAM,IAAI,2BAA2B,CAAC,6DAA6D,CAAC,CAAC;YACvG,CAAC;YACD,IAAI,kBAAkB,IAAI,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrD,MAAM,IAAI,2BAA2B,CAAC,sDAAsD,CAAC,CAAC;YAChG,CAAC;YACD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC3B,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YACzB,kBAAkB,GAAG,IAAI,CAAC;YAE1B,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,KAAK,KAAK;gBAC5C,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAClD,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACxB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,2BAA2B,CAAC,kEAAkE,CAAC,CAAC;YAC5G,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;gBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,2BAA2B,CAAC,sEAAsE,CAAC,CAAC;QAChH,CAAC;QACD,OAAO;YACL,QAAQ;YACR,QAAQ,EAAE,KAAK;YACf,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,UAAsB;QACjD,IAAI,qBAAqB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;YACpF,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpH,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;IAEO,cAAc,CAAC,KAA0B;QAC/C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YAC9D,OAAO,QAAQ,IAAA,aAAQ,EAAC,KAAY,CAAC,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO,GAAG,OAAO,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5C,CAAC;IAEO,mBAAmB,CACzB,QAAgC,EAChC,IAAsC,EACtC,KAAuC;QAEvC,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,wBAAwB,GAAG,IAAI,CAAC,+BAA+B,CAAC,cAAc,CAAC,CAAC;QACtF,MAAM,yBAAyB,GAAG,IAAI,CAAC,+BAA+B,CAAC,eAAe,CAAC,CAAC;QACxF,IAAI,wBAAwB,IAAI,yBAAyB,EAAE,CAAC;YAC1D,OAAO;gBACL,QAAQ,EAAE,wBAAwB;gBAClC,QAAQ;gBACR,OAAO,EAAE,cAAc;gBACvB,SAAS,EAAE,yBAAyB;aACrC,CAAC;QACJ,CAAC;QACD,IAAI,wBAAwB,EAAE,CAAC;YAC7B,OAAO;gBACL,QAAQ,EAAE,wBAAwB;gBAClC,QAAQ;gBACR,OAAO,EAAE,cAAc;gBACvB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;aACzC,CAAC;QACJ,CAAC;QACD,IAAI,yBAAyB,EAAE,CAAC;YAC9B,OAAO;gBACL,QAAQ,EAAE,yBAAyB;gBACnC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAC5C,OAAO,EAAE,cAAc;gBACvB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;aACxC,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,+BAA+B,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;QACrG,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;QAChI,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,gCAAgC,CAAC,cAAc,CAAC,CAAC;QAChF,MAAM,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC,eAAe,CAAC,CAAC;QAClF,IAAI,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;YAC5C,IAAI,iBAAiB,CAAC,OAAO,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC7D,MAAM,IAAI,2BAA2B,CAAC,wEAAwE,CAAC,CAAC;YAClH,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;gBACpC,QAAQ;gBACR,OAAO,EAAE,iBAAiB,CAAC,OAAO;gBAClC,SAAS,EAAE,kBAAkB,CAAC,QAAQ;aACvC,CAAC;QACJ,CAAC;QACD,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO;gBACL,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;gBACpC,QAAQ;gBACR,OAAO,EAAE,iBAAiB,CAAC,OAAO;gBAClC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;aAC3C,CAAC;QACJ,CAAC;QACD,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO;gBACL,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;gBACrC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAC5C,OAAO,EAAE,kBAAkB,CAAC,OAAO;gBACnC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;aAC1C,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,CAAC;QAE1E,IAAI,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,OAAO;gBACL,QAAQ,EAAE,YAAY;gBACtB,QAAQ;gBACR,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;aACzC,CAAC;QACJ,CAAC;QAED,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;YAClC,OAAO;gBACL,QAAQ,EAAE,YAAY;gBACtB,QAAQ;gBACR,SAAS,EAAE,aAAa;aACzB,CAAC;QACJ,CAAC;QAED,IAAI,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,OAAO;gBACL,QAAQ,EAAE,aAAa;gBACvB,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAC5C,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;aACxC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,2BAA2B,CAAC,uEAAuE,CAAC,CAAC;IACjH,CAAC;IAEO,qBAAqB,CAAC,QAAgB,EAAE,UAA+B;QAC7E,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,OAAO,CAAC;YACb,KAAK,OAAO;gBACV,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK;iBACb,CAAC;YACJ,KAAK,SAAS;gBACZ,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,OAAO;iBACf,CAAC;YACJ,KAAK,WAAW;gBACd,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,SAAS;iBACjB,CAAC;YACJ,KAAK,WAAW;gBACd,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,SAAS;iBACjB,CAAC;YACJ,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC;gBACxE,MAAM,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,CAAC;gBAC1E,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;oBAClC,OAAO;wBACL,QAAQ,EAAE,YAAY;wBACtB,QAAQ,EAAE,WAAW;wBACrB,SAAS,EAAE,aAAa;qBACzB,CAAC;gBACJ,CAAC;gBACD,IAAI,YAAY,EAAE,CAAC;oBACjB,OAAO;wBACL,QAAQ,EAAE,YAAY;wBACtB,QAAQ,EAAE,WAAW;wBACrB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;qBACzC,CAAC;gBACJ,CAAC;gBACD,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO;wBACL,QAAQ,EAAE,aAAa;wBACvB,QAAQ,EAAE,WAAW;wBACrB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;qBACxC,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAI,2BAA2B,CAAC,4DAA4D,CAAC,CAAC;YACtG,CAAC;YACD;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,+BAA+B,CACrC,QAAgC,EAChC,kBAA8B,EAC9B,eAA2B;QAE3B,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnE,IAAI,gBAAgB,KAAK,MAAM,EAAE,CAAC;YAChC,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,QAAQ,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU;gBACnD,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;aAC3C,CAAC;QACJ,CAAC;QACD,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAChD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,2BAA2B,CAAC,8CAA8C,CAAC,CAAC;YACxF,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,QAAQ,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;gBAC3D,KAAK;aACN,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,uBAAuB,CAC7B,kBAA8B,EAC9B,MAAoB,EACpB,OAAgB;QAEhB,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnE,IAAI,gBAAgB,KAAK,MAAM,EAAE,CAAC;YAChC,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;gBAC5C,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aACzD,CAAC;QACJ,CAAC;QACD,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC5D,MAAM,IAAI,2BAA2B,CAAC,6CAA6C,CAAC,CAAC;YACvF,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa;gBACpD,MAAM,EAAE,cAAc;aACvB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,+BAA+B,CAAC,UAAsB;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrF,CAAC;IAEO,8BAA8B,CAAC,UAAsB;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC,CAAC;QAClE,OAAO,OAAO,EAAE,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAEO,qBAAqB,CAAC,UAAsB;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;SAC9C,CAAC;IACJ,CAAC;IAEO,gCAAgC,CAAC,UAAsB;QAC7D,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,OAAO,EAAE,aAAa;aACvB,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC3G,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;YAC5D,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,OAAO,EAAE,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB;SACrG,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAAC,UAA+B;QAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YAC/F,MAAM,IAAI,2BAA2B,CAAC,uDAAuD,CAAC,CAAC;QACjG,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,QAAQ,EAAE,cAAc;YACxB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAClE,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,IAAuB,EAAE,KAAmB,EAAE,QAAQ,GAAG,KAAK;QACtF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE3E,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;gBACxB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;gBAChC,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAe,CAAC,CAAC;gBACnE,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,eAAe,CAAC;YACpB,SAAS;YACT,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrB,MAAM,OAAO,GAAkB,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;oBAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC5B,IAAI,UAAU,EAAE,CAAC;wBACf,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,UAAwB,CAAC,CAAC;oBACxE,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC;SACH,EAAE,QAAQ,CAAC,CAAC;IACf,CAAC;IAEO,UAAU,CAAC,UAAsB;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,2BAA2B,CAAC,4CAA4C,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,oBAAoB,CAAC,UAAsB;QACjD,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,2BAA2B,CAAC,6DAA6D,CAAC,CAAC;QACvG,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC;oBACN,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClE,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;YACzD,OAAO,CAAC;oBACN,GAAG,MAAM;oBACT,QAAQ,EAAE,iBAAiB;iBAC5B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAChD,OAAO,CAAC;oBACN,GAAG,MAAM;oBACT,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,2BAA2B,CAAC,0DAA0D,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CACjD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EACtC,MAAM,EACN,QAAQ,KAAK,IAAI,CAClB,CAAC;YACF,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1B,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC;oBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;oBAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBACvD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC;oBACN,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;oBAClD,OAAO,EAAE,WAAW,CAAC,OAAO;oBAC5B,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBACpD,KAAK,EAAE,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;iBACjG,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,2BAA2B,CAAC,WAAW,QAAQ,mCAAmC,CAAC,CAAC;IAChG,CAAC;IAEO,aAAa,CAAC,KAAuC;QAC3D,IAAI,CAAC,KAAK,IAAK,KAAiB,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAChD,MAAM,IAAI,2BAA2B,CAAC,6BAA6B,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,+BAA+B,CAAC,KAAmB,CAAC,CAAC;IACnE,CAAC;IAEO,kBAAkB,CAAC,UAAsB;QAC/C,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,gEAAgE,CAAC,CAAC;IAC1G,CAAC;IAEO,6BAA6B,CAAC,UAAsB;QAC1D,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IAEO,WAAW,CAAC,UAAsB;QACxC,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,UAA6B,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,mDAAmD,CAAC,CAAC;IAC7F,CAAC;IAEO,aAAa,CAAC,UAAsB;QAC1C,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,0CAA0C,CAAC,CAAC;IACpF,CAAC;IAEO,YAAY,CAAC,QAAgB;QACnC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,GAAG;gBACN,OAAO,KAAK,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf,KAAK,GAAG;gBACN,OAAO,KAAK,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,MAAM,CAAC;YAChB,KAAK,GAAG;gBACN,OAAO,KAAK,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,MAAM,CAAC;YAChB;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,QAAgC;QAC1D,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACR,OAAO,QAAQ,CAAC;YAClB,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC;YAChB,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC;YAChB;gBACE,MAAM,IAAI,2BAA2B,CAAC,UAAU,QAAQ,6BAA6B,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,QAAgB;QAC1C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,GAAG;gBACN,OAAO,KAAK,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf,KAAK,GAAG;gBACN,OAAO,MAAM,CAAC;YAChB,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf,KAAK,GAAG;gBACN,OAAO,MAAM,CAAC;YAChB,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,QAAgB;QACnC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,WAAW;gBACd,OAAO,aAAa,CAAC;YACvB,KAAK,UAAU;gBACb,OAAO,WAAW,CAAC;YACrB,KAAK,SAAS;gBACZ,OAAO,WAAW,CAAC;YACrB,KAAK,OAAO;gBACV,OAAO,QAAQ,CAAC;YAClB;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,QAAgC;QAC1D,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,aAAa;gBAChB,OAAO,gBAAgB,CAAC;YAC1B,KAAK,WAAW;gBACd,OAAO,cAAc,CAAC;YACxB,KAAK,WAAW;gBACd,OAAO,cAAc,CAAC;YACxB,KAAK,QAAQ;gBACX,OAAO,WAAW,CAAC;YACrB;gBACE,MAAM,IAAI,2BAA2B,CAAC,WAAW,QAAQ,mCAAmC,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,MAAsB;QACjD,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,KAAK,WAAW;gBACd,OAAO;oBACL,GAAG,MAAM;oBACT,QAAQ,EAAE,cAAc;iBACzB,CAAC;YACJ,KAAK,WAAW;gBACd,OAAO;oBACL,GAAG,MAAM;oBACT,QAAQ,EAAE,cAAc;iBACzB,CAAC;YACJ;gBACE,MAAM,IAAI,2BAA2B,CAAC,WAAW,MAAM,CAAC,QAAQ,mCAAmC,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAEO,+BAA+B,CAAC,UAAsB;QAC5D,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,2BAA2B,CAAC,0DAA0D,CAAC,CAAC;QACpG,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ;YACzD,CAAC,CAAC,UAAU,CAAC,QAAQ;YACrB,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,2BAA2B,CAAC,+BAA+B,WAAW,mCAAmC,CAAC,CAAC;QACvH,CAAC;QACD,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,QAAQ;YACR,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAChB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnF,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAClE,CAAC;SACoB,CAAC;IAC3B,CAAC;IAEO,qBAAqB,CAAC,GAAW;QACvC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,QAAQ,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1D,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC;YAClB,KAAK,UAAU;gBACb,OAAO,UAAU,CAAC;YACpB,KAAK,aAAa;gBAChB,OAAO,WAAW,CAAC;YACrB,KAAK,WAAW;gBACd,OAAO,SAAS,CAAC;YACnB,KAAK,SAAS;gBACZ,OAAO,OAAO,CAAC;YACjB,KAAK,eAAe;gBAClB,OAAO,QAAQ,CAAC;YAClB,KAAK,YAAY;gBACf,OAAO,OAAO,CAAC;YACjB,KAAK,YAAY;gBACf,OAAO,OAAO,CAAC;YACjB,KAAK,WAAW;gBACd,OAAO,WAAW,CAAC;YACrB,KAAK,aAAa;gBAChB,OAAO,aAAa,CAAC;YACvB;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF;AA75ED,4CA65EC;AAED,MAAM,YAAY;IAehB,YACkB,QAAgB,EACf,+BAA+B,KAAK;QADrC,aAAQ,GAAR,QAAQ,CAAQ;QACf,iCAA4B,GAA5B,4BAA4B,CAAQ;QAhBvC,UAAK,GAAkB;YACrC,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,EAAE;SACZ,CAAC;QAEe,kBAAa,GAAoB,EAAE,CAAC;QAC7C,0BAAqB,GAAG,CAAC,CAAC;QAC1B,uBAAkB,GAAG,CAAC,CAAC;QACvB,uBAAkB,GAAG,CAAC,CAAC;QACvB,iCAA4B,GAAG,CAAC,CAAC;IAMtC,CAAC;IAEG,2BAA2B,CAAC,SAAmB;QACpD,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAC5C,CAAC;IAEM,UAAU,CAAC,OAAwB,EAAE,QAAiB;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAEM,yBAAyB,CAAC,QAAiB;QAChD,MAAM,UAAU,GAAG,gBAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,yBAAyB,CAAyB,CAAC;QAC5G,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAEM,aAAa;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACtB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;SACX,CAAC,CAAC;IACL,CAAC;IAEM,cAAc;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,2BAA2B,CAAC,iDAAiD,CAAC,CAAC;QAC3F,CAAC;QACD,IACE,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;eACpB,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;eACxB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;eACtB,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;eACvB,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;eACvB,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;eACzB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;eACtB,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAC5B,CAAC;YACD,MAAM,aAAa,GAA0B;gBAC3C,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAEM,kBAAkB,CAAC,OAAyB;QACjD,IAAI,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACvD,CAAC;IAEM,OAAO,CAAC,IAAkB,EAAE,QAAiB;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEM,gBAAgB,CAAC,QAA+B;QACrD,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IAEM,QAAQ,CAAC,QAA+B;QAC7C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxC,CAAC;IAEM,gBAAgB,CAAC,KAAyB;QAC/C,IAAI,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAEM,QAAQ,CAAC,KAAyB;QACvC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAEM,iBAAiB,CAAC,KAA0B;QACjD,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAEM,SAAS,CAAC,KAA0B;QACzC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEM,eAAe,CAAC,MAA8B,EAAE,QAAiB;QACtE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAEM,oBAAoB;QACzB,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC;QAChC,OAAO,IAAA,8BAAM,EAAC,GAAG,yBAAyB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC9E,CAAC;IAEM,iBAAiB,CAAC,KAAa;QACpC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAC7B,OAAO,eAAe,KAAK,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3D,CAAC;IAEM,iBAAiB,CAAC,KAAa;QACpC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAC7B,OAAO,eAAe,KAAK,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3D,CAAC;IAEM,2BAA2B;QAChC,IAAI,CAAC,4BAA4B,IAAI,CAAC,CAAC;QACvC,OAAO,0BAA0B,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACvE,CAAC;IAEM,4CAA4C;QACjD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC7C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnD,MAAM,IAAI,2BAA2B,CAAC,4EAA4E,CAAC,CAAC;gBACtH,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC9C,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC5D,SAAS;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,2BAA2B,CAAC,4EAA4E,CAAC,CAAC;YACtH,CAAC;QACH,CAAC;IACH,CAAC;IAEM,uBAAuB;QAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,YAAY,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACjD,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACzC,KAAK,MAAM,YAAY,IAAI,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAChE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,CAAC;gBACD,KAAK,MAAM,YAAY,IAAI,sBAAsB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;oBACvE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;oBACtC,KAAK,MAAM,UAAU,IAAI,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;wBACpE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;4BAC3B,MAAM,IAAI,2BAA2B,CAAC,kDAAkD,CAAC,CAAC;wBAC5F,CAAC;oBACH,CAAC;oBACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YAC1C,KAAK,MAAM,UAAU,IAAI,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,2BAA2B,CAAC,kDAAkD,CAAC,CAAC;gBAC5F,CAAC;YACH,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACzD,+BAA+B,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEM,2CAA2C;QAChD,IAAI,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,yBAAyB,CAAC,UAAU,CAAC;iBACjD,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,iCAAiC,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,2BAA2B,CAAC,oDAAoD,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;QACD,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,yBAAyB,CAAC,WAAW,CAAC;iBAClD,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,iCAAiC,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,2BAA2B,CAAC,4DAA4D,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;QACD,MAAM,aAAa,GAAG,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACtD,2CAA2C,CAAC,gCAAgC,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IAEO,8BAA8B,CAAC,YAAoB;QACzD,OAAO,iCAAiC,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC;IAEO,YAAY,CAAC,OAAwB;QAC3C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnG,CAAC;IAEO,oBAAoB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,2BAA2B,CAAC,iDAAiD,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,iBAAiB;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF;AAED,SAAS,yBAAyB,CAAC,QAAgB;IACjD,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC3B,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE;QAC3B,CAAC,CAAC,gBAAW,CAAC,SAAS,CAAC,QAAQ,CAAoB,CAAC;AACzD,CAAC;AAED,SAAS,cAAc,CAAC,KAA4B;IAClD,OAAO,OAAO,CAAC,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA0B;IACtD,OAAO,OAAO,CAAC,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA0B;IACtD,OAAO,OAAO,CAAC,KAAK,IAAI,YAAY,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAiB;IACjD,OAAO,OAAO,CAAC,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAiB;IAC9C,OAAO,OAAO,CAAC,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB;IACvC,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AAChF,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAiB;IACjD,OAAO,OAAO,CAAC,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAiB;IAC9C,OAAO,OAAO,CAAC,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,OAAO,OAAO,CAAC,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,cAAc,CAAC,KAA4B;IAClD,OAAO,KAAK,YAAY,mBAAQ,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAiB;IAC5C,OAAO,OAAO,CAAC,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC;AAC9G,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,YAAY,CAAC,KAA0B;IAC9C,OAAO,OAAO,CAAC,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAwD;IACtF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACxC,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAgB,EAAE,SAAsB;IACvE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,KAAK;YACR,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM;QACR,KAAK,OAAO;YACV,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACzC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrC,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM;QACR,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrC,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM;QACR,KAAK,QAAQ;YACX,0BAA0B,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC1D,MAAM;QACR,KAAK,MAAM;YACT,0BAA0B,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC1D,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM;QACR,KAAK,QAAQ;YACX,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YACD,MAAM;QACR;YACE,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;gBAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;oBACxC,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,MAAM;IACV,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc,EAAE,SAAsB;IACpE,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IACD,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAkB,EAAE,SAAsB;IACtE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,UAAsB,EAAE,SAAsB;IAChF,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IACD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE,CAAC;QAC7E,OAAO;IACT,CAAC;IACD,IAAI,qBAAqB,CAAC,UAAU,CAAC,IAAI,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9E,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;oBACvB,0BAA0B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,0BAA0B,CAAC,GAAiB,EAAE,SAAS,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChF,0BAA0B,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAgB,EAAE,SAAsB;IACpE,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACjC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAA2B;IAC5C,OAAO,OAAO,CACZ,KAAK;WACA,OAAO,KAAK,KAAK,QAAQ;WACzB,MAAM,IAAI,KAAK;WACf;YACD,KAAK;YACL,UAAU;YACV,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,SAAS;YACT,QAAQ;YACR,MAAM;YACN,QAAQ;YACR,OAAO;SACR,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CACzB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA0B;IACpD,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,MAAM,CAAI,MAAW;IAC5B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,WAAW,CAAiB,MAAW;IAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,IAAA,aAAQ,EAAC,KAAY,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAwB;IAClD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnF,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAiC,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC;SACpH,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA2B,EAAE,YAAoB;IAC7E,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,mBAAmB,CAAC,QAA2B;IACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,6BAA6B,CAAC,aAAoC;IACzE,OAAO,MAAM,CAAC;QACZ,GAAG,mBAAmB,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC9C,GAAG,wBAAwB,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;QACvD,GAAG,sBAAsB,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;QACrD,GAAG,CAAC,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,MAA4B;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAC3C,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvC,GAAG,wBAAwB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAChD,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9C,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACvD,CAAC,CACH,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAoB;IACzD,OAAO,IAAI,GAAG,CAAC;QACb,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACtC,GAAG,wBAAwB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAC/C,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACtD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,OAAyB,EAAE,YAAoB;IACtE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC9B,MAAM,CAAC,QAAQ,KAAK,YAAY;WAC3B,MAAM,CAAC,QAAQ,KAAK,WAAW;WAC/B,MAAM,CAAC,KAAK,KAAK,SAAS,CAChC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,KAA+C;IAChF,OAAO,MAAM,CAAC;QACZ,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACtC,GAAG,wBAAwB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAC/C,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,GAAG,oCAAoC,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oCAAoC,CAAC,MAAwD;IACpG,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,6BAA6B,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnH,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAiC;IACjE,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,yBAAyB,CAAC,UAA6B;IAC9D,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,EAAE,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,aAAa,CAAC;QACnB,KAAK,cAAc;YACjB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/B,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,yBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1D,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3F,KAAK,IAAI;YACP,OAAO,MAAM,CAAC;gBACZ,GAAG,kBAAkB,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC3C,GAAG,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC7C,GAAG,yBAAyB,CAAC,UAAU,CAAC,IAAI,CAAC;aAC9C,CAAC,CAAC;QACL,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;gBACZ,GAAG,yBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC;gBACnD,GAAG,yBAAyB,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC9C,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3E,CAAC,CAAC;QACL,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3F,KAAK,KAAK;YACR,OAAO,yBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1D,KAAK,OAAO;YACV,OAAO,MAAM,CAAC;gBACZ,GAAG,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAChD,GAAG,yBAAyB,CAAC,UAAU,CAAC,QAAQ,CAAC;aAClD,CAAC,CAAC;QACL,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;gBACZ,GAAG,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAChD,GAAG,yBAAyB,CAAC,UAAU,CAAC,QAAQ,CAAC;aAClD,CAAC,CAAC;QACL,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAU,UAAU,CAAC;YACrC,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAyB;IACnD,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,QAAQ;QACf,MAAM,CAAC,SAAS;KACjB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,+BAA+B,CACtC,gBAA2D,EAC3D,UAAuB;IAEvB,MAAM,aAAa,GAAG,gCAAgC,CAAC,gBAAgB,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1C,KAAK,MAAM,YAAY,IAAI,mBAAmB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvE,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,MAAM,YAAY,IAAI,wBAAwB,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QAChF,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,aAAa,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACpD,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3C,KAAK,MAAM,YAAY,IAAI,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,MAAM,YAAY,IAAI,wBAAwB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBACzE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,MAAM,YAAY,IAAI,sBAAsB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBACvE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACtC,2BAA2B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC/C,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;YACD,KAAK,MAAM,YAAY,IAAI,WAAW,EAAE,CAAC;gBACvC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QAC7C,2BAA2B,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACjD,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,KAAK,MAAM,mBAAmB,IAAI,aAAa,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC/D,+BAA+B,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,2CAA2C,CAClD,aAAoC,EACpC,aAA0B,IAAI,GAAG,EAAE;IAEnC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAClC,KAAK,MAAM,YAAY,IAAI,6BAA6B,CAAC,aAAa,CAAC,EAAE,CAAC;QACxE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,aAAa,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,2BAA2B,CAAC,6DAA6D,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IACD,KAAK,MAAM,WAAW,IAAI,aAAa,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,2BAA2B,CAAC,qEAAqE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IACD,KAAK,MAAM,mBAAmB,IAAI,aAAa,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC/D,2CAA2C,CAAC,gCAAgC,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5G,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAkB,EAAE,KAAkB;IACzE,KAAK,MAAM,UAAU,IAAI,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,2BAA2B,CAAC,2DAA2D,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iCAAiC,CAAC,KAAoB,EAAE,YAAoB;IACnF,IAAI,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3C,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CACjF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,MAA2B,EAAE,YAAoB;IACjF,IAAI,oBAAoB,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAClD,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,wBAAwB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAC7F,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gCAAgC,CAAC,KAAgD;IACxF,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,CAAC","sourcesContent":["import { DataFactory, termToId } from 'n3';\nimport { Parser, Wildcard } from 'sparqljs';\nimport type {\n AggregateExpression,\n BindPattern,\n BgpPattern,\n ConstructQuery,\n DescribeQuery,\n Expression,\n FilterPattern,\n FunctionCallExpression,\n GraphPattern,\n GraphQuads,\n Grouping,\n IriTerm,\n LiteralTerm,\n MinusPattern,\n OperationExpression,\n Ordering,\n Pattern,\n PropertyPath,\n SelectQuery,\n SparqlQuery,\n Term as SparqlTerm,\n Triple,\n Update,\n ValuePatternRow,\n ValuesPattern,\n Variable,\n VariableExpression,\n VariableTerm,\n} from 'sparqljs';\nimport type { NamedNode, Quad, Term } from '@rdfjs/types';\nimport type {\n RdfBindExpression,\n RdfLocalQuery,\n RdfBindingRow,\n RdfConstructTemplate,\n RdfQueryFilter,\n RdfQueryFilterOperator,\n RdfQueryFilterValue,\n RdfQueryAggregate,\n RdfQueryBind,\n RdfQueryPattern,\n RdfQueryTermPattern,\n RdfUnionQueryGroup,\n RdfValuesBindingSource,\n RdfUnionQueryBranch,\n RdfMinusQueryGroup,\n RdfExistsQueryGroup,\n RdfOptionalQueryGroup,\n} from './types';\nimport { variable as rdfVar } from './RdfLocalQueryEngine';\n\nconst PATH_JOIN_VARIABLE_PREFIX = '__rdf_path';\nconst XPATH_FUNCTION_NS = 'http://www.w3.org/2005/xpath-functions#';\n\ninterface FixedPathSegment {\n predicates: IriTerm[];\n inverse: boolean;\n}\n\ninterface FixedAlternativePath {\n predicates: IriTerm[];\n inverse: boolean;\n}\n\ninterface RdfUpdateDatasetScope {\n hasUsing: boolean;\n defaultGraph?: RdfQueryTermPattern;\n namedGraph?: RdfQueryTermPattern;\n}\n\ninterface RdfQueryDatasetScope {\n defaultGraph?: RdfQueryTermPattern;\n namedGraph?: RdfQueryTermPattern;\n}\n\ninterface RdfQueryFromClause {\n default?: IriTerm[];\n named?: IriTerm[];\n}\n\ninterface OptionalFrame {\n patterns: RdfQueryPattern[];\n filters: RdfQueryFilter[];\n binds: RdfQueryBind[];\n unions: RdfUnionQueryGroup[];\n values: RdfValuesBindingSource[];\n optional: RdfOptionalQueryGroup[];\n minus: RdfMinusQueryGroup[];\n exists: RdfExistsQueryGroup[];\n}\n\ninterface RdfUpdateTemplateOptions {\n graphVariables?: ReadonlySet<string>;\n}\n\ninterface RdfQueryGraphScope {\n patterns: RdfQueryPattern[];\n values?: RdfValuesBindingSource[];\n filters?: RdfQueryFilter[];\n optional?: RdfLocalQuery['optional'];\n unions?: RdfLocalQuery['unions'];\n minus?: RdfLocalQuery['minus'];\n exists?: RdfLocalQuery['exists'];\n}\n\nexport interface RdfSparqlCompileResult {\n query: RdfLocalQuery;\n variables: string[];\n queryType: 'SELECT' | 'ASK' | 'CONSTRUCT' | 'DESCRIBE';\n constructTemplate?: RdfConstructTemplate[];\n describeTargets?: RdfQueryTermPattern[];\n}\n\nexport interface RdfSparqlInsertOperation {\n type: 'insert';\n quads: Quad[];\n}\n\nexport interface RdfSparqlDeleteOperation {\n type: 'delete';\n quads: Quad[];\n}\n\nexport interface RdfSparqlDeleteWhereTemplate {\n graph: RdfQueryTermPattern;\n subject: RdfQueryTermPattern;\n predicate: RdfQueryTermPattern;\n object: RdfQueryTermPattern;\n}\n\nexport type RdfSparqlUpdateTemplate = RdfSparqlDeleteWhereTemplate;\n\nexport interface RdfSparqlDeleteWhereOperation {\n type: 'deleteWhere';\n query: RdfLocalQuery;\n template: RdfSparqlUpdateTemplate[];\n}\n\nexport interface RdfSparqlInsertDeleteWhereOperation {\n type: 'insertDeleteWhere';\n query: RdfLocalQuery;\n deletes: RdfSparqlUpdateTemplate[];\n inserts: RdfSparqlUpdateTemplate[];\n}\n\nexport interface RdfSparqlInsertWhereOperation {\n type: 'insertWhere';\n query: RdfLocalQuery;\n inserts: RdfSparqlUpdateTemplate[];\n}\n\nexport type RdfSparqlUpdateDeltaOperation =\n | RdfSparqlInsertOperation\n | RdfSparqlDeleteOperation\n | RdfSparqlDeleteWhereOperation\n | RdfSparqlInsertDeleteWhereOperation\n | RdfSparqlInsertWhereOperation;\n\nexport interface RdfSparqlUpdateDelta {\n operations: RdfSparqlUpdateDeltaOperation[];\n inserts: Quad[];\n deletes: Quad[];\n}\n\nexport interface RdfSparqlUpdateCompileOptions {\n defaultGraph?: string | NamedNode;\n}\n\nexport class UnsupportedSparqlQueryError extends Error {\n public constructor(message: string) {\n super(message);\n this.name = 'UnsupportedSparqlQueryError';\n }\n}\n\nexport class DisabledSparqlFeatureError extends Error {\n public constructor(message: string) {\n super(message);\n this.name = 'DisabledSparqlFeatureError';\n }\n}\n\nexport class RdfSparqlAdapter {\n public compile(query: string | SparqlQuery, basePath: string): RdfSparqlCompileResult {\n const parsed = typeof query === 'string'\n ? new Parser({ baseIRI: basePath }).parse(query)\n : query;\n\n if (parsed.type === 'update') {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE is handled by the compatibility engine');\n }\n const datasetScope = this.compileQueryDatasetScope(this.queryFromClause(parsed), basePath);\n const state = new CompileState(basePath);\n this.compilePatterns(parsed.where ?? [], datasetScope.defaultGraph, state, false, datasetScope.namedGraph);\n this.compileValuesRows(parsed.values ?? [], state);\n this.compileGroupBy((parsed as SelectQuery).group ?? [], state);\n if (parsed.queryType === 'SELECT') {\n state.query.orderBy = this.compileOrder((parsed as SelectQuery).order ?? [], state);\n }\n const variables = parsed.queryType === 'SELECT'\n ? this.compileSelectVariables(parsed, state)\n : [];\n if (parsed.queryType === 'SELECT') {\n state.query.having = this.compileHaving((parsed as SelectQuery).having ?? [], state);\n }\n state.assertBindVariablesSafe();\n state.assertValuesVariablesBoundByRequiredPatterns();\n state.assertDependentGroupsShareRequiredVariables();\n\n const constructTemplate = parsed.queryType === 'CONSTRUCT'\n ? this.compileConstructTemplate(parsed)\n : undefined;\n const describeTargets = parsed.queryType === 'DESCRIBE'\n ? this.compileDescribeTargets(parsed, state.query)\n : undefined;\n\n if (parsed.queryType === 'ASK') {\n state.query.limit = 1;\n } else if (parsed.queryType === 'SELECT') {\n state.query.select = variables.length > 0 ? variables : undefined;\n state.query.distinct = Boolean((parsed as SelectQuery).distinct);\n state.query.limit = parsed.limit;\n state.query.offset = parsed.offset;\n }\n\n return {\n query: state.query,\n variables,\n queryType: parsed.queryType,\n constructTemplate,\n describeTargets,\n };\n }\n\n public compileUpdateDelta(\n query: string | SparqlQuery,\n basePath: string,\n options: RdfSparqlUpdateCompileOptions = {},\n ): RdfSparqlUpdateDelta {\n const parsed = typeof query === 'string'\n ? new Parser({ baseIRI: basePath }).parse(query)\n : query;\n\n if (parsed.type !== 'update') {\n throw new UnsupportedSparqlQueryError('Only SPARQL UPDATE can compile into update delta');\n }\n\n const defaultGraph = this.compileUpdateDefaultGraph(options.defaultGraph, basePath);\n const operations: RdfSparqlUpdateDeltaOperation[] = [];\n for (const update of (parsed as Update).updates) {\n if (!('updateType' in update)) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE management operations fallback to compatibility engine');\n }\n\n switch (update.updateType) {\n case 'insert':\n if (update.graph) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE WITH/default graph scope fallback to compatibility engine');\n }\n operations.push({\n type: 'insert',\n quads: this.compileUpdateGraphQuads(update.insert, basePath, defaultGraph),\n });\n break;\n case 'delete':\n if (update.graph) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE WITH/default graph scope fallback to compatibility engine');\n }\n operations.push({\n type: 'delete',\n quads: this.compileUpdateGraphQuads(update.delete, basePath, defaultGraph),\n });\n break;\n case 'deletewhere':\n if (update.graph) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE WITH/default graph scope fallback to compatibility engine');\n }\n operations.push(this.compileDeleteWhere(update.delete, basePath, defaultGraph));\n break;\n case 'insertdelete':\n operations.push(this.compileInsertDeleteWhere(update, basePath, defaultGraph));\n break;\n default:\n throw new UnsupportedSparqlQueryError('Unsupported SPARQL UPDATE operation fallback to compatibility engine');\n }\n }\n\n const inserts = operations\n .filter((operation) => operation.type === 'insert')\n .flatMap((operation) => operation.quads);\n const deletes = operations\n .filter((operation) => operation.type === 'delete')\n .flatMap((operation) => operation.quads);\n const deleteWhereCount = operations\n .reduce((sum, operation) => {\n if (operation.type === 'deleteWhere') {\n return sum + operation.template.length;\n }\n if (operation.type === 'insertDeleteWhere') {\n return sum + operation.deletes.length + operation.inserts.length;\n }\n if (operation.type === 'insertWhere') {\n return sum + operation.inserts.length;\n }\n return sum;\n }, 0);\n if (inserts.length + deletes.length + deleteWhereCount === 0) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE without data quads fallback to compatibility engine');\n }\n\n return { operations, inserts, deletes };\n }\n\n private compileDeleteWhere(\n items: Array<GraphQuads | BgpPattern>,\n basePath: string,\n defaultGraph?: NamedNode,\n ): RdfSparqlDeleteWhereOperation {\n const template = this.compileGraphQuadsTemplate(items, basePath, 'DELETE WHERE', defaultGraph);\n return {\n type: 'deleteWhere',\n query: this.queryFromUpdateTemplate(template, 'DELETE WHERE'),\n template,\n };\n }\n\n private compileInsertDeleteWhere(\n update: Extract<Update['updates'][number], { updateType: 'insertdelete' }>,\n basePath: string,\n defaultGraph?: NamedNode,\n ): RdfSparqlInsertDeleteWhereOperation | RdfSparqlInsertWhereOperation | RdfSparqlDeleteWhereOperation {\n const hasInsertTemplate = (update.insert?.length ?? 0) > 0;\n const hasDeleteTemplate = (update.delete?.length ?? 0) > 0;\n if (!hasInsertTemplate && !hasDeleteTemplate) {\n throw new UnsupportedSparqlQueryError('DELETE/INSERT WHERE without DELETE or INSERT template fallback to compatibility engine');\n }\n const label = hasInsertTemplate && hasDeleteTemplate\n ? 'DELETE/INSERT WHERE'\n : hasInsertTemplate\n ? 'INSERT WHERE'\n : 'DELETE WHERE';\n const withGraph = this.compileWithGraph(update.graph, basePath, label) ?? defaultGraph;\n const using = this.compileUsingDatasetScope(update.using, basePath, label);\n const queryDefaultGraph = using.hasUsing\n ? using.defaultGraph ?? this.impossibleGraph(basePath)\n : withGraph;\n const queryNamedGraph = using.hasUsing\n ? using.namedGraph ?? this.impossibleGraph(basePath)\n : undefined;\n const query = this.queryFromUpdateWhere(update.where ?? [], basePath, label, {\n defaultGraph: queryDefaultGraph,\n namedGraph: queryNamedGraph,\n });\n const graphVariables = this.safeUpdateTemplateGraphVariables(query);\n const inserts = hasInsertTemplate\n ? this.compileGraphQuadsTemplate(update.insert ?? [], basePath, 'INSERT template', withGraph, { graphVariables })\n : [];\n if (hasInsertTemplate && inserts.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without INSERT template fallback to compatibility engine`);\n }\n const deletes = hasDeleteTemplate\n ? this.compileGraphQuadsTemplate(update.delete ?? [], basePath, 'DELETE template', withGraph, { graphVariables })\n : [];\n if (hasDeleteTemplate && deletes.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without DELETE template fallback to compatibility engine`);\n }\n if (hasInsertTemplate && !hasDeleteTemplate) {\n return {\n type: 'insertWhere',\n query,\n inserts,\n };\n }\n if (!hasInsertTemplate) {\n return {\n type: 'deleteWhere',\n query,\n template: deletes,\n };\n }\n return {\n type: 'insertDeleteWhere',\n query,\n deletes,\n inserts,\n };\n }\n\n private compileUsingDatasetScope(\n using: Extract<Update['updates'][number], { updateType: 'insertdelete' }>['using'],\n basePath: string,\n label: string,\n ): RdfUpdateDatasetScope {\n if (!using) {\n return { hasUsing: false };\n }\n\n const defaultGraphs = using.default ?? [];\n const namedGraphs = using.named ?? [];\n return {\n hasUsing: true,\n defaultGraph: this.compileUsingGraphs(defaultGraphs, basePath, label, 'USING'),\n namedGraph: this.compileUsingGraphs(namedGraphs, basePath, label, 'USING NAMED'),\n };\n }\n\n private compileUsingGraphs(\n graphs: IriTerm[],\n basePath: string,\n label: string,\n clause: string,\n ): RdfQueryTermPattern | undefined {\n if (graphs.length === 0) {\n return undefined;\n }\n const compiledGraphs: Term[] = graphs.map((graph) => {\n const compiled = this.compileGraphTerm(graph, basePath);\n if (compiled === null || isCompiledVariable(compiled)) {\n throw new UnsupportedSparqlQueryError(`${label} ${clause} graph outside basePath fallback to compatibility engine`);\n }\n return compiled as Term;\n });\n if (compiledGraphs.length === 1) {\n return compiledGraphs[0];\n }\n return { $in: uniqueTerms(compiledGraphs) };\n }\n\n private compileQueryDatasetScope(\n from: RdfQueryFromClause | undefined,\n basePath: string,\n ): RdfQueryDatasetScope {\n if (!from) {\n return {\n defaultGraph: this.compileImplicitQueryDefaultGraph(basePath),\n };\n }\n\n const defaultGraphs = from.default ?? [];\n const namedGraphs = from.named ?? [];\n return {\n defaultGraph: defaultGraphs.length > 0\n ? this.compileQueryDatasetGraphs(defaultGraphs, basePath, 'FROM')\n : namedGraphs.length > 0\n ? this.impossibleGraph(basePath)\n : this.compileImplicitQueryDefaultGraph(basePath),\n namedGraph: namedGraphs.length > 0\n ? this.compileQueryDatasetGraphs(namedGraphs, basePath, 'FROM NAMED')\n : undefined,\n };\n }\n\n private compileImplicitQueryDefaultGraph(basePath: string): RdfQueryTermPattern {\n return implicitQueryDefaultGraph(basePath);\n }\n\n private compileQueryDatasetGraphs(\n graphs: IriTerm[],\n basePath: string,\n clause: string,\n ): RdfQueryTermPattern {\n const compiledGraphs: Term[] = graphs.map((graph) => {\n const compiled = this.compileGraphTerm(graph, basePath);\n if (compiled === null || isCompiledVariable(compiled)) {\n throw new DisabledSparqlFeatureError(`SPARQL ${clause} outside the server-owned Pod is disabled`);\n }\n return compiled as Term;\n });\n if (compiledGraphs.length === 1) {\n return compiledGraphs[0];\n }\n return { $in: uniqueTerms(compiledGraphs) };\n }\n\n private queryFromClause(query: SparqlQuery): RdfQueryFromClause | undefined {\n if (!('from' in query)) {\n return undefined;\n }\n return query.from;\n }\n\n private compileWithGraph(\n graph: IriTerm | undefined,\n basePath: string,\n label: string,\n ): RdfQueryTermPattern | undefined {\n if (!graph) {\n return undefined;\n }\n const compiled = this.compileGraphTerm(graph, basePath);\n if (compiled === null || isCompiledVariable(compiled)) {\n throw new UnsupportedSparqlQueryError(`${label} WITH graph outside basePath fallback to compatibility engine`);\n }\n return compiled;\n }\n\n private impossibleGraph(basePath: string): Term {\n return DataFactory.namedNode(`${basePath}__outside_graph_scope__`) as unknown as Term;\n }\n\n private queryFromUpdateWhere(\n patterns: Pattern[] | Array<GraphQuads | BgpPattern>,\n basePath: string,\n label: string,\n dataset: { defaultGraph?: RdfQueryTermPattern; namedGraph?: RdfQueryTermPattern } = {},\n ): RdfLocalQuery {\n if (patterns.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without WHERE patterns fallback to compatibility engine`);\n }\n const state = new CompileState(basePath);\n this.assertScopedUpdateWherePatterns(patterns as Pattern[], basePath, label, Boolean(dataset.defaultGraph), dataset.namedGraph);\n this.compilePatterns(patterns as Pattern[], dataset.defaultGraph, state, false, dataset.namedGraph);\n state.assertBindVariablesSafe();\n state.assertValuesVariablesBoundByRequiredPatterns();\n state.assertDependentGroupsShareRequiredVariables();\n this.assertFiniteUpdateGraphVariables(state.query, basePath, label);\n if (state.query.patterns.length === 0 && (state.query.unions?.length ?? 0) === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without required graph BGP patterns fallback to compatibility engine`);\n }\n return state.query;\n }\n\n private queryFromUpdateTemplate(template: RdfSparqlUpdateTemplate[], label: string): RdfLocalQuery {\n if (template.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without WHERE patterns fallback to compatibility engine`);\n }\n return {\n patterns: template.map((pattern) => ({\n graph: pattern.graph,\n subject: pattern.subject,\n predicate: pattern.predicate,\n object: pattern.object,\n })),\n optional: [],\n filters: [],\n };\n }\n\n private compileGraphQuadsTemplate(\n items: Array<GraphQuads | BgpPattern>,\n basePath: string,\n label: string,\n defaultGraph?: RdfQueryTermPattern,\n options: RdfUpdateTemplateOptions = {},\n ): RdfSparqlUpdateTemplate[] {\n const template: RdfSparqlUpdateTemplate[] = [];\n for (const item of items) {\n let graph = defaultGraph;\n if (item.type === 'graph') {\n if (item.name.termType === 'Variable') {\n if (!options.graphVariables?.has(item.name.value)) {\n throw new UnsupportedSparqlQueryError(`${label} GRAPH variables fallback to compatibility engine`);\n }\n graph = rdfVar(item.name.value);\n } else if (item.name.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError(`${label} GRAPH variables fallback to compatibility engine`);\n } else {\n graph = this.compileGraphTerm(item.name, basePath) ?? undefined;\n }\n } else if (!graph) {\n throw new UnsupportedSparqlQueryError(`${label} default graph fallback to compatibility engine`);\n }\n if (!graph || graph === null) {\n throw new UnsupportedSparqlQueryError(`${label} graph outside basePath fallback to compatibility engine`);\n }\n const state = new CompileState(basePath);\n for (const triple of this.updateTemplateTriples(item)) {\n if (!isSimpleTerm(triple.predicate)) {\n throw new UnsupportedSparqlQueryError(`${label} property path templates fallback to compatibility engine`);\n }\n const patterns = this.compileTriple(triple, graph, state);\n if (patterns.length !== 1) {\n throw new UnsupportedSparqlQueryError(`${label} property path templates fallback to compatibility engine`);\n }\n const pattern = patterns[0];\n this.assertSafeUpdateTemplatePattern(pattern, label);\n template.push({\n graph,\n subject: pattern.subject as RdfQueryTermPattern,\n predicate: pattern.predicate as RdfQueryTermPattern,\n object: pattern.object as RdfQueryTermPattern,\n });\n }\n }\n return template;\n }\n\n private safeUpdateTemplateGraphVariables(query: RdfLocalQuery): ReadonlySet<string> {\n const graphVariables = new Set<string>();\n this.collectQueryGraphVariables(query, graphVariables);\n if (graphVariables.size === 0) {\n return graphVariables;\n }\n\n const constrainedVariables = new Set<string>();\n this.collectFiniteGraphFilterVariables(query, graphVariables, constrainedVariables);\n return constrainedVariables;\n }\n\n private collectQueryGraphVariables(\n query: RdfQueryGraphScope,\n graphVariables: Set<string>,\n ): void {\n for (const pattern of query.patterns) {\n if (pattern.graph && isCompiledVariable(pattern.graph)) {\n graphVariables.add(pattern.graph.variable);\n }\n }\n for (const optional of query.optional ?? []) {\n this.collectQueryGraphVariables(Array.isArray(optional) ? { patterns: optional } : optional, graphVariables);\n }\n for (const union of query.unions ?? []) {\n for (const branch of union.branches) {\n this.collectQueryGraphVariables(branch, graphVariables);\n }\n }\n for (const minus of query.minus ?? []) {\n this.collectQueryGraphVariables(minus, graphVariables);\n }\n for (const exists of query.exists ?? []) {\n this.collectQueryGraphVariables(exists, graphVariables);\n }\n }\n\n private collectFiniteGraphFilterVariables(\n query: RdfQueryGraphScope,\n graphVariables: Set<string>,\n constrainedVariables: Set<string>,\n ): void {\n this.collectFiniteGraphValueVariables(query.values ?? [], graphVariables, constrainedVariables, (value) => (\n this.isNamedNodeFilterValue(value)\n ));\n for (const filter of query.filters ?? []) {\n if (!graphVariables.has(filter.variable)) {\n continue;\n }\n const values = filter.values ?? (filter.value ? [filter.value] : []);\n if (\n (filter.operator === '$eq' || filter.operator === '$sameTerm' || filter.operator === '$in')\n && values.length > 0\n && values.every((value) => this.isNamedNodeFilterValue(value))\n ) {\n constrainedVariables.add(filter.variable);\n }\n }\n for (const optional of query.optional ?? []) {\n this.collectFiniteGraphFilterVariables(Array.isArray(optional) ? { patterns: optional } : optional, graphVariables, constrainedVariables);\n }\n for (const union of query.unions ?? []) {\n for (const branch of union.branches) {\n this.collectFiniteGraphFilterVariables(branch, graphVariables, constrainedVariables);\n }\n }\n for (const minus of query.minus ?? []) {\n this.collectFiniteGraphFilterVariables(minus, graphVariables, constrainedVariables);\n }\n for (const exists of query.exists ?? []) {\n this.collectFiniteGraphFilterVariables(exists, graphVariables, constrainedVariables);\n }\n }\n\n private isNamedNodeFilterValue(value: unknown): boolean {\n return Boolean(value && typeof value === 'object' && 'termType' in value && (value as Term).termType === 'NamedNode');\n }\n\n private updateTemplateTriples(item: GraphQuads | BgpPattern): Triple[] {\n if ('triples' in item && Array.isArray(item.triples)) {\n return item.triples;\n }\n const patterns = (item as unknown as { patterns?: Pattern[] }).patterns ?? [];\n return patterns.flatMap((pattern): Triple[] =>\n pattern.type === 'bgp' ? pattern.triples : []);\n }\n\n private assertSafeUpdateTemplatePattern(pattern: RdfQueryPattern, label: string): void {\n const terms = [ pattern.subject, pattern.predicate, pattern.object ];\n if (terms.some((term) => term && 'termType' in term && term.termType === 'BlankNode')) {\n throw new UnsupportedSparqlQueryError(`${label} blank node templates fallback to compatibility engine`);\n }\n }\n\n private assertScopedUpdateWherePatterns(\n patterns: Pattern[],\n basePath: string,\n label: string,\n inGraph: boolean,\n namedGraph?: RdfQueryTermPattern,\n ): void {\n if (patterns.length === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without WHERE patterns fallback to compatibility engine`);\n }\n for (const pattern of patterns) {\n switch (pattern.type) {\n case 'graph':\n if (pattern.name.termType === 'Variable') {\n } else if (pattern.name.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError(`${label} GRAPH variables fallback to compatibility engine`);\n } else if (!pattern.name.value.startsWith(basePath)) {\n throw new UnsupportedSparqlQueryError(`${label} graph outside basePath fallback to compatibility engine`);\n }\n this.assertScopedUpdateWherePatterns(pattern.patterns, basePath, label, true, namedGraph);\n break;\n case 'bgp':\n if (!inGraph) {\n throw new UnsupportedSparqlQueryError(`${label} default graph fallback to compatibility engine`);\n }\n break;\n case 'optional':\n case 'group':\n this.assertScopedUpdateWherePatterns(pattern.patterns, basePath, label, inGraph, namedGraph);\n break;\n case 'union':\n for (const branch of pattern.patterns) {\n this.assertScopedUpdateWherePatterns(this.unionBranchPatterns(branch), basePath, label, inGraph, namedGraph);\n }\n break;\n case 'filter':\n case 'values':\n break;\n default:\n if ('queryType' in pattern) {\n throw new UnsupportedSparqlQueryError(`${label} subqueries fallback to compatibility engine`);\n }\n break;\n }\n }\n }\n\n private assertFiniteUpdateGraphVariables(query: RdfQueryGraphScope, basePath: string, label: string): void {\n const unboundedVariables = new Set<string>();\n this.collectUnboundedUpdateGraphVariables(query, basePath, new Set(), unboundedVariables);\n if (unboundedVariables.size > 0) {\n throw new UnsupportedSparqlQueryError(`${label} GRAPH variables require finite named graph filters fallback to compatibility engine`);\n }\n }\n\n private collectUnboundedUpdateGraphVariables(\n query: RdfQueryGraphScope,\n basePath: string,\n inheritedFiniteVariables: ReadonlySet<string>,\n unboundedVariables: Set<string>,\n ): void {\n const finiteVariables = new Set(inheritedFiniteVariables);\n this.collectFiniteGraphValueVariables(query.values ?? [], undefined, finiteVariables, (value) => (\n this.isBasePathNamedNodeFilterValue(value, basePath)\n ));\n this.collectFiniteGraphFilterVariablesFromFilters(query.filters ?? [], finiteVariables, basePath);\n\n for (const pattern of query.patterns) {\n if (pattern.graph && isCompiledVariable(pattern.graph) && !finiteVariables.has(pattern.graph.variable)) {\n unboundedVariables.add(pattern.graph.variable);\n }\n }\n for (const optional of query.optional ?? []) {\n this.collectUnboundedUpdateGraphVariables(\n Array.isArray(optional) ? { patterns: optional } : optional,\n basePath,\n finiteVariables,\n unboundedVariables,\n );\n }\n for (const union of query.unions ?? []) {\n for (const branch of union.branches) {\n this.collectUnboundedUpdateGraphVariables(branch, basePath, finiteVariables, unboundedVariables);\n }\n }\n for (const minus of query.minus ?? []) {\n this.collectUnboundedUpdateGraphVariables(minus, basePath, finiteVariables, unboundedVariables);\n }\n for (const exists of query.exists ?? []) {\n this.collectUnboundedUpdateGraphVariables(exists, basePath, finiteVariables, unboundedVariables);\n }\n }\n\n private collectFiniteGraphFilterVariablesFromFilters(\n filters: readonly RdfQueryFilter[],\n finiteVariables: Set<string>,\n basePath: string,\n ): void {\n for (const filter of filters) {\n const values = filter.values ?? (filter.value ? [filter.value] : []);\n if (\n (filter.operator === '$eq' || filter.operator === '$sameTerm' || filter.operator === '$in')\n && values.length > 0\n && values.every((value) => this.isBasePathNamedNodeFilterValue(value, basePath))\n ) {\n finiteVariables.add(filter.variable);\n }\n }\n }\n\n private isBasePathNamedNodeFilterValue(value: unknown, basePath: string): boolean {\n return this.isNamedNodeFilterValue(value) && (value as Term).value.startsWith(basePath);\n }\n\n private collectFiniteGraphValueVariables(\n sources: readonly RdfValuesBindingSource[],\n graphVariables: ReadonlySet<string> | undefined,\n finiteVariables: Set<string>,\n isSafeValue: (value: unknown) => boolean,\n ): void {\n for (const source of sources) {\n if (source.rows.length === 0) {\n continue;\n }\n for (const variable of source.variables) {\n if (graphVariables && !graphVariables.has(variable)) {\n continue;\n }\n if (source.rows.every((row) => isSafeValue(row[variable]))) {\n finiteVariables.add(variable);\n }\n }\n }\n }\n\n private compileUpdateGraphQuads(\n items: Array<GraphQuads | BgpPattern>,\n basePath: string,\n defaultGraph?: NamedNode,\n ): Quad[] {\n const quads: Quad[] = [];\n for (const item of items) {\n if (item.type !== 'graph') {\n if (!defaultGraph) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE default graph fallback to compatibility engine');\n }\n for (const triple of item.triples) {\n quads.push(this.compileUpdateTriple(triple, defaultGraph));\n }\n continue;\n }\n if (item.name.termType !== 'NamedNode') {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE GRAPH variables fallback to compatibility engine');\n }\n if (!item.name.value.startsWith(basePath)) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE graph outside basePath fallback to compatibility engine');\n }\n for (const triple of this.updateTemplateTriples(item)) {\n quads.push(this.compileUpdateTriple(triple, item.name));\n }\n }\n return quads;\n }\n\n private compileUpdateDefaultGraph(defaultGraph: string | NamedNode | undefined, basePath: string): NamedNode | undefined {\n if (!defaultGraph) {\n return undefined;\n }\n const graph = typeof defaultGraph === 'string'\n ? DataFactory.namedNode(defaultGraph)\n : defaultGraph;\n if (basePath && !graph.value.startsWith(basePath)) {\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE default graph outside basePath fallback to compatibility engine');\n }\n return graph;\n }\n\n private compileUpdateTriple(triple: Triple, graph: NamedNode): Quad {\n const subject = this.compileUpdateNamedNode(triple.subject, 'subject');\n const predicate = this.compileUpdateNamedNode(triple.predicate, 'predicate');\n const object = this.compileUpdateObject(triple.object);\n return DataFactory.quad(subject as any, predicate as any, object as any, graph as any) as unknown as Quad;\n }\n\n private compileUpdateNamedNode(term: unknown, position: 'subject' | 'predicate'): NamedNode {\n if (isNamedNodeTerm(term)) {\n return term;\n }\n throw new UnsupportedSparqlQueryError(`SPARQL UPDATE ${position} must be a named node in embedded delta path`);\n }\n\n private compileUpdateObject(term: SparqlTerm): Term {\n if (isNamedNodeTerm(term) || isLiteralTerm(term as Expression)) {\n return term as unknown as Term;\n }\n throw new UnsupportedSparqlQueryError('SPARQL UPDATE object must be a named node or literal in embedded delta path');\n }\n\n private compilePatterns(\n patterns: Pattern[],\n graph: RdfQueryTermPattern | undefined,\n state: CompileState,\n optional: boolean,\n namedGraphScope?: RdfQueryTermPattern,\n ): void {\n for (const pattern of patterns) {\n switch (pattern.type) {\n case 'bgp':\n this.compileBgp(pattern, graph, state, optional);\n break;\n case 'graph':\n this.compileGraphPattern(pattern, state, optional, namedGraphScope);\n break;\n case 'optional':\n state.startOptional();\n this.compilePatterns(pattern.patterns, graph, state, true, namedGraphScope);\n state.finishOptional();\n break;\n case 'filter': {\n const expression = (pattern as FilterPattern).expression;\n const notExistsPatterns = this.notExistsPatterns(expression);\n if (notExistsPatterns) {\n if (optional) {\n state.addOptionalMinus(this.compileAntiJoinGroup(\n notExistsPatterns,\n graph,\n state.basePath,\n 'FILTER NOT EXISTS',\n namedGraphScope,\n ));\n break;\n }\n state.addMinus(this.compileAntiJoinGroup(notExistsPatterns, graph, state.basePath, 'FILTER NOT EXISTS', namedGraphScope));\n break;\n }\n const existsPatterns = this.existsPatterns(expression);\n if (existsPatterns) {\n if (optional) {\n state.addOptionalExists(this.compileExistsGroup(\n existsPatterns,\n graph,\n state.basePath,\n 'FILTER EXISTS',\n namedGraphScope,\n ));\n break;\n }\n state.addExists(this.compileExistsGroup(existsPatterns, graph, state.basePath, 'FILTER EXISTS', namedGraphScope));\n break;\n }\n if (optional) {\n state.addOptionalFilters(this.compileFilter(expression));\n break;\n }\n state.query.filters?.push(...this.compileFilter(expression));\n break;\n }\n case 'group':\n this.compilePatterns(pattern.patterns, graph, state, optional, namedGraphScope);\n break;\n case 'union':\n if (optional) {\n state.addOptionalUnion(this.compileUnionBranches(pattern.patterns, graph, state.basePath, namedGraphScope));\n break;\n }\n state.addUnion(this.compileUnionBranches(pattern.patterns, graph, state.basePath, namedGraphScope));\n break;\n case 'service':\n throw new DisabledSparqlFeatureError('SPARQL SERVICE federation is disabled for server-owned Pod queries');\n case 'bind':\n state.addBind(this.compileBind(pattern as BindPattern, state.basePath), optional);\n break;\n case 'minus':\n if (optional) {\n state.addOptionalMinus(this.compileMinusGroup(pattern as MinusPattern, graph, state.basePath, namedGraphScope));\n break;\n }\n state.addMinus(this.compileMinusGroup(pattern as MinusPattern, graph, state.basePath, namedGraphScope));\n break;\n case 'values':\n this.compileValuesRows((pattern as ValuesPattern).values, state, optional);\n break;\n default:\n if ('queryType' in pattern) {\n throw new UnsupportedSparqlQueryError('Subqueries fallback to compatibility engine');\n }\n throw new UnsupportedSparqlQueryError(`Unsupported SPARQL pattern: ${(pattern as { type?: string }).type ?? 'unknown'}`);\n }\n }\n }\n\n private compileUnionBranches(\n branches: Pattern[],\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfUnionQueryBranch[] {\n if (branches.length < 2) {\n throw new UnsupportedSparqlQueryError('UNION requires at least two branches locally');\n }\n const compiledBranches: RdfUnionQueryBranch[] = [];\n for (const branch of branches) {\n compiledBranches.push(...this.compileUnionBranch(branch, graph, basePath, namedGraphScope));\n }\n return compiledBranches;\n }\n\n private compileUnionBranch(\n branch: Pattern,\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfUnionQueryBranch[] {\n if (branch.type === 'union') {\n return branch.patterns.flatMap((nestedBranch) => (\n this.compileUnionBranch(nestedBranch, graph, basePath, namedGraphScope)\n ));\n }\n const branchState = new CompileState(basePath);\n this.compilePatterns(this.unionBranchPatterns(branch), graph, branchState, false, namedGraphScope);\n branchState.assertBindVariablesSafe();\n branchState.assertValuesVariablesBoundByRequiredPatterns();\n if (branchState.query.patterns.length === 0 && (branchState.query.unions?.length ?? 0) === 0) {\n throw new UnsupportedSparqlQueryError('UNION branch without required BGP fallback to compatibility engine');\n }\n return [{\n patterns: branchState.query.patterns,\n ...(branchState.query.values?.length ? { values: branchState.query.values } : {}),\n ...(branchState.query.unions?.length ? { unions: branchState.query.unions } : {}),\n ...(branchState.query.optional?.length ? { optional: branchState.query.optional } : {}),\n ...(branchState.query.binds?.length ? { binds: branchState.query.binds } : {}),\n ...(branchState.query.filters?.length ? { filters: branchState.query.filters } : {}),\n }];\n }\n\n private compileMinusGroup(\n pattern: MinusPattern,\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfMinusQueryGroup {\n return this.compileAntiJoinGroup(pattern.patterns, graph, basePath, 'MINUS', namedGraphScope);\n }\n\n private compileAntiJoinGroup(\n patterns: Pattern[],\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n label: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfMinusQueryGroup {\n const minusState = new CompileState(basePath, true);\n this.compilePatterns(patterns, graph, minusState, false, namedGraphScope);\n minusState.assertBindVariablesSafe();\n minusState.assertValuesVariablesBoundByRequiredPatterns();\n if (minusState.query.minus?.length || minusState.query.exists?.length) {\n throw new UnsupportedSparqlQueryError(`Nested ${label} fallback to compatibility engine`);\n }\n if (minusState.query.patterns.length === 0 && (minusState.query.unions?.length ?? 0) === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without required BGP fallback to compatibility engine`);\n }\n return {\n patterns: minusState.query.patterns,\n ...(minusState.query.values?.length ? { values: minusState.query.values } : {}),\n ...(minusState.query.unions?.length ? { unions: minusState.query.unions } : {}),\n ...(minusState.query.optional?.length ? { optional: minusState.query.optional } : {}),\n ...(minusState.query.binds?.length ? { binds: minusState.query.binds } : {}),\n ...(minusState.query.filters?.length ? { filters: minusState.query.filters } : {}),\n };\n }\n\n private compileExistsGroup(\n patterns: Pattern[],\n graph: RdfQueryTermPattern | undefined,\n basePath: string,\n label: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfExistsQueryGroup {\n const existsState = new CompileState(basePath, true);\n this.compilePatterns(patterns, graph, existsState, false, namedGraphScope);\n existsState.assertBindVariablesSafe();\n existsState.assertValuesVariablesBoundByRequiredPatterns();\n if (existsState.query.minus?.length || existsState.query.exists?.length) {\n throw new UnsupportedSparqlQueryError(`Nested ${label} fallback to compatibility engine`);\n }\n if (existsState.query.patterns.length === 0 && (existsState.query.unions?.length ?? 0) === 0) {\n throw new UnsupportedSparqlQueryError(`${label} without required BGP fallback to compatibility engine`);\n }\n return {\n patterns: existsState.query.patterns,\n ...(existsState.query.values?.length ? { values: existsState.query.values } : {}),\n ...(existsState.query.unions?.length ? { unions: existsState.query.unions } : {}),\n ...(existsState.query.optional?.length ? { optional: existsState.query.optional } : {}),\n ...(existsState.query.binds?.length ? { binds: existsState.query.binds } : {}),\n ...(existsState.query.filters?.length ? { filters: existsState.query.filters } : {}),\n };\n }\n\n private notExistsPatterns(expression: Expression): Pattern[] | null {\n if (!isOperationExpression(expression) || expression.operator.toLowerCase() !== 'notexists') {\n return null;\n }\n const pattern = expression.args[0];\n if (!pattern || !isPattern(pattern)) {\n throw new UnsupportedSparqlQueryError('FILTER NOT EXISTS without graph pattern fallback to compatibility engine');\n }\n return pattern.type === 'group'\n ? pattern.patterns\n : [pattern];\n }\n\n private existsPatterns(expression: Expression): Pattern[] | null {\n if (!isOperationExpression(expression) || expression.operator.toLowerCase() !== 'exists') {\n return null;\n }\n const pattern = expression.args[0];\n if (!pattern || !isPattern(pattern)) {\n throw new UnsupportedSparqlQueryError('FILTER EXISTS without graph pattern fallback to compatibility engine');\n }\n return pattern.type === 'group'\n ? pattern.patterns\n : [pattern];\n }\n\n private unionBranchPatterns(branch: Pattern): Pattern[] {\n return branch.type === 'group'\n ? branch.patterns\n : [branch];\n }\n\n private compileBgp(\n pattern: BgpPattern | GraphQuads,\n graph: RdfQueryTermPattern | undefined,\n state: CompileState,\n optional: boolean,\n ): void {\n for (const triple of pattern.triples) {\n for (const queryPattern of this.compileTriple(triple, graph, state)) {\n state.addPattern(queryPattern, optional);\n }\n }\n }\n\n private compileGraphPattern(\n pattern: GraphPattern,\n state: CompileState,\n optional: boolean,\n namedGraphScope?: RdfQueryTermPattern,\n ): void {\n const graph = this.compileScopedGraphTerm(pattern.name, state.basePath, namedGraphScope);\n if (graph === null) {\n state.addImpossibleGraphPattern(optional);\n return;\n }\n if (pattern.name.termType === 'Variable') {\n const graphScopeFilter: RdfQueryFilter = namedGraphScope\n ? {\n variable: pattern.name.value,\n operator: '$in',\n values: this.graphScopeFilterValues(namedGraphScope),\n }\n : {\n variable: pattern.name.value,\n operator: '$startsWith',\n value: state.basePath,\n };\n if (optional) {\n state.addOptionalFilters([graphScopeFilter]);\n } else {\n state.query.filters?.push(graphScopeFilter);\n }\n }\n this.compilePatterns(pattern.patterns, graph, state, optional, namedGraphScope);\n }\n\n private compileScopedGraphTerm(\n term: IriTerm | VariableTerm,\n basePath: string,\n namedGraphScope?: RdfQueryTermPattern,\n ): RdfQueryTermPattern | null {\n const graph = this.compileGraphTerm(term, basePath);\n if (!namedGraphScope) {\n return graph;\n }\n if (graph === null) {\n return null;\n }\n if (term.termType === 'Variable') {\n return graph;\n }\n return this.graphScopeContains(namedGraphScope, graph as Term) ? graph : null;\n }\n\n private graphScopeContains(scope: RdfQueryTermPattern, graph: Term): boolean {\n if (isCompiledVariable(scope)) {\n return false;\n }\n if (isRdfJsTerm(scope)) {\n return termToId(scope as any) === termToId(graph as any);\n }\n const values = (scope as { $in?: unknown }).$in;\n return Array.isArray(values) && values.some((value) => (\n value && typeof value === 'object' && 'termType' in value && termToId(value as any) === termToId(graph as any)\n ));\n }\n\n private graphScopeFilterValues(scope: RdfQueryTermPattern): Term[] {\n if (isCompiledVariable(scope)) {\n throw new UnsupportedSparqlQueryError('GRAPH variable dataset scope fallback to compatibility engine');\n }\n if (isRdfJsTerm(scope)) {\n return [scope as Term];\n }\n const values = (scope as { $in?: unknown }).$in;\n if (Array.isArray(values) && values.every((value) => value && typeof value === 'object' && 'termType' in value)) {\n return values as Term[];\n }\n throw new UnsupportedSparqlQueryError('GRAPH variable dataset scope fallback to compatibility engine');\n }\n\n private compileBind(pattern: BindPattern, basePath: string): { variable: string; expression: RdfBindExpression } {\n return {\n variable: pattern.variable.value,\n expression: this.compileBindExpression(pattern.expression, basePath),\n };\n }\n\n private compileBindExpression(expression: Expression, basePath: string): RdfBindExpression {\n return this.compileBindLikeExpression(expression, basePath, 'BIND');\n }\n\n private compileBindLikeExpression(expression: Expression, basePath: string, label: string): RdfBindExpression {\n const normalized = this.normalizeFunctionCallExpression(expression);\n if (isRdfTermExpression(normalized) && !isVariableTerm(normalized)) {\n return {\n type: 'term',\n term: normalized as unknown as Term,\n };\n }\n if (isVariableTerm(normalized)) {\n return {\n type: 'variable',\n variable: normalized.value,\n };\n }\n if (!isOperationExpression(normalized)) {\n throw new UnsupportedSparqlQueryError(`${label} expression fallback to compatibility engine`);\n }\n\n const operator = normalized.operator.toLowerCase();\n if (operator === 'str') {\n return {\n type: 'stringValue',\n variable: this.expressionVariable(this.expressionArg(normalized.args[0])),\n };\n }\n if (operator === 'strlen') {\n return {\n type: 'stringLength',\n variable: this.stringOperandVariable(this.expressionArg(normalized.args[0])).variable,\n };\n }\n if (operator === 'lcase' || operator === 'lower-case') {\n return {\n type: 'lowerCase',\n expression: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n };\n }\n if (operator === 'ucase' || operator === 'upper-case') {\n return {\n type: 'upperCase',\n expression: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n };\n }\n if (operator === 'coalesce') {\n return {\n type: 'coalesce',\n expressions: normalized.args.map((arg: Expression | Pattern) => (\n this.compileBindExpression(this.expressionArg(arg), basePath)\n )),\n };\n }\n if (operator === 'if') {\n return {\n type: 'if',\n condition: this.compileFilter(this.expressionArg(normalized.args[0])),\n then: this.compileBindExpression(this.expressionArg(normalized.args[1]), basePath),\n else: this.compileBindExpression(this.expressionArg(normalized.args[2]), basePath),\n };\n }\n if (operator === 'substr' || operator === 'substring') {\n return {\n type: 'substring',\n expression: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n start: this.compileBindExpression(this.expressionArg(normalized.args[1]), basePath),\n ...(normalized.args[2] === undefined\n ? {}\n : { length: this.compileBindExpression(this.expressionArg(normalized.args[2]), basePath) }),\n };\n }\n if (operator === 'concat') {\n return {\n type: 'concat',\n expressions: normalized.args.map((arg: Expression | Pattern) => (\n this.compileBindExpression(this.expressionArg(arg), basePath)\n )),\n };\n }\n if (operator === 'iri' || operator === 'uri') {\n return {\n type: 'iri',\n expression: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n base: basePath,\n };\n }\n if (operator === 'strdt') {\n return {\n type: 'strdt',\n lexical: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n datatype: this.compileBindExpression(this.expressionArg(normalized.args[1]), basePath),\n };\n }\n if (operator === 'strlang') {\n return {\n type: 'strlang',\n lexical: this.compileBindExpression(this.expressionArg(normalized.args[0]), basePath),\n language: this.compileBindExpression(this.expressionArg(normalized.args[1]), basePath),\n };\n }\n\n throw new UnsupportedSparqlQueryError(`${label} ${operator} fallback to compatibility engine`);\n }\n\n private compileTriple(triple: Triple, graph: RdfQueryTermPattern | undefined, state: CompileState): RdfQueryPattern[] {\n const subject = this.compileTerm(triple.subject);\n const object = this.compileTerm(triple.object);\n const pathPatterns = this.compilePropertyPath(triple.predicate, subject, object, graph, state);\n if (pathPatterns) {\n return pathPatterns;\n }\n if (!isSimpleTerm(triple.predicate)) {\n throw new UnsupportedSparqlQueryError('Property paths fallback to compatibility engine');\n }\n return [{\n graph,\n subject,\n predicate: this.compileTerm(triple.predicate),\n object,\n }];\n }\n\n private compilePropertyPath(\n predicate: Triple['predicate'],\n subject: RdfQueryTermPattern,\n object: RdfQueryTermPattern,\n graph: RdfQueryTermPattern | undefined,\n state: CompileState,\n ): RdfQueryPattern[] | null {\n if (isSimpleTerm(predicate)) {\n return null;\n }\n const alternative = this.flattenFixedAlternativePath(predicate);\n if (alternative) {\n const predicateMatch = { $in: alternative.predicates.map((entry) => entry as unknown as Term) };\n return [\n alternative.inverse\n ? {\n graph,\n subject: object,\n predicate: predicateMatch,\n object: subject,\n }\n : {\n graph,\n subject,\n predicate: predicateMatch,\n object,\n },\n ];\n }\n const segments = this.flattenFixedLengthPath(predicate);\n if (!segments) {\n throw new UnsupportedSparqlQueryError('Property paths fallback to compatibility engine');\n }\n if (segments.length === 0) {\n throw new UnsupportedSparqlQueryError('Empty property paths fallback to compatibility engine');\n }\n\n const patterns: RdfQueryPattern[] = [];\n let currentSubject = subject;\n for (const [index, segment] of segments.entries()) {\n const isLast = index === segments.length - 1;\n const currentObject = isLast ? object : state.nextPathJoinVariable();\n const predicate = this.compilePathSegmentPredicate(segment);\n patterns.push(segment.inverse\n ? {\n graph,\n subject: currentObject,\n predicate,\n object: currentSubject,\n }\n : {\n graph,\n subject: currentSubject,\n predicate,\n object: currentObject,\n });\n currentSubject = currentObject;\n }\n return patterns;\n }\n\n private compilePathSegmentPredicate(segment: FixedPathSegment): RdfQueryTermPattern {\n return segment.predicates.length === 1\n ? segment.predicates[0] as unknown as Term\n : { $in: segment.predicates.map((entry) => entry as unknown as Term) };\n }\n\n private flattenFixedLengthPath(path: PropertyPath): FixedPathSegment[] | null {\n return this.flattenFixedLengthPathItem(path, false);\n }\n\n private flattenFixedAlternativePath(path: PropertyPath): FixedAlternativePath | null {\n return this.flattenFixedAlternativePathItem(path, false);\n }\n\n private flattenFixedAlternativePathItem(item: IriTerm | PropertyPath, inverse: boolean): FixedAlternativePath | null {\n if (isNamedNodeTerm(item)) {\n return null;\n }\n if (item.pathType === '^' && item.items.length === 1) {\n return this.flattenFixedAlternativePathItem(item.items[0], !inverse);\n }\n if (item.pathType !== '|') {\n return null;\n }\n\n const predicates: IriTerm[] = [];\n for (const nestedItem of item.items) {\n if (!isNamedNodeTerm(nestedItem)) {\n return null;\n }\n predicates.push(nestedItem as IriTerm);\n }\n return predicates.length > 0\n ? { predicates, inverse }\n : null;\n }\n\n private flattenFixedLengthPathItem(item: IriTerm | PropertyPath, inverse: boolean): FixedPathSegment[] | null {\n if (isNamedNodeTerm(item)) {\n return [{ predicates: [item as IriTerm], inverse }];\n }\n if (item.pathType === '^' && item.items.length === 1) {\n return this.flattenFixedLengthPathItem(item.items[0], !inverse);\n }\n if (item.pathType === '|') {\n const predicates: IriTerm[] = [];\n for (const nestedItem of item.items) {\n if (!isNamedNodeTerm(nestedItem)) {\n return null;\n }\n predicates.push(nestedItem as IriTerm);\n }\n return predicates.length > 0\n ? [{ predicates, inverse }]\n : null;\n }\n if (item.pathType !== '/') {\n return null;\n }\n\n const items = inverse ? [...item.items].reverse() : item.items;\n const segments: FixedPathSegment[] = [];\n for (const nestedItem of items) {\n const nested = this.flattenFixedLengthPathItem(nestedItem, inverse);\n if (!nested) {\n return null;\n }\n segments.push(...nested);\n }\n return segments;\n }\n\n private compileGraphTerm(term: IriTerm | VariableTerm, basePath: string): RdfQueryTermPattern | null {\n if (term.termType === 'Variable') {\n return rdfVar(term.value);\n }\n if (!term.value.startsWith(basePath)) {\n return null;\n }\n return term as unknown as Term;\n }\n\n private compileTerm(term: SparqlTerm): RdfQueryTermPattern {\n if (term.termType === 'Variable') {\n return rdfVar(term.value);\n }\n if (term.termType === 'Quad') {\n throw new UnsupportedSparqlQueryError('RDF-star terms fallback to compatibility engine');\n }\n return term as unknown as Term;\n }\n\n public materializeConstruct(template: RdfConstructTemplate[], rows: RdfBindingRow[], graph?: Term): Quad[] {\n return this.materializeTemplate(\n template.map((triple) => ({\n ...triple,\n graph: graph ?? DataFactory.defaultGraph(),\n })),\n rows,\n );\n }\n\n public materializeDeleteWhere(template: RdfSparqlUpdateTemplate[], rows: RdfBindingRow[]): Quad[] {\n return this.materializeTemplate(template, rows);\n }\n\n private materializeTemplate(template: RdfSparqlUpdateTemplate[], rows: RdfBindingRow[]): Quad[] {\n const quads: Quad[] = [];\n const seen = new Set<string>();\n for (const row of rows) {\n for (const triple of template) {\n const graph = this.resolveTemplateTerm(triple.graph, row);\n const subject = this.resolveTemplateTerm(triple.subject, row);\n const predicate = this.resolveTemplateTerm(triple.predicate, row);\n const object = this.resolveTemplateTerm(triple.object, row);\n if (!graph || !subject || !predicate || !object) {\n continue;\n }\n if (graph.termType !== 'NamedNode' && graph.termType !== 'DefaultGraph') {\n continue;\n }\n if (subject.termType !== 'NamedNode' && subject.termType !== 'BlankNode') {\n continue;\n }\n if (predicate.termType !== 'NamedNode') {\n continue;\n }\n if (object.termType === 'DefaultGraph') {\n continue;\n }\n const quad = DataFactory.quad(subject as any, predicate as any, object as any, graph as any) as unknown as Quad;\n const key = [quad.subject, quad.predicate, quad.object, quad.graph].map((term) => termToId(term as any)).join('\\u001f');\n if (!seen.has(key)) {\n seen.add(key);\n quads.push(quad);\n }\n }\n }\n return quads;\n }\n\n private compileConstructTemplate(query: ConstructQuery): RdfConstructTemplate[] {\n if (!query.template || query.template.length === 0) {\n throw new UnsupportedSparqlQueryError('CONSTRUCT without template fallback to compatibility engine');\n }\n return query.template.map((triple) => {\n if (!isSimpleTerm(triple.predicate)) {\n throw new UnsupportedSparqlQueryError('CONSTRUCT property paths fallback to compatibility engine');\n }\n if (triple.predicate.termType !== 'NamedNode' && triple.predicate.termType !== 'Variable') {\n throw new UnsupportedSparqlQueryError('CONSTRUCT predicates must be IRIs or variables');\n }\n return {\n subject: this.compileTerm(triple.subject),\n predicate: this.compileTerm(triple.predicate),\n object: this.compileTerm(triple.object),\n };\n });\n }\n\n private compileDescribeTargets(query: DescribeQuery, localQuery: RdfLocalQuery): RdfQueryTermPattern[] {\n if (query.variables.length === 1 && query.variables[0] instanceof Wildcard) {\n const variables = visibleSelectVariables(query);\n if (variables.length === 0) {\n throw new UnsupportedSparqlQueryError('DESCRIBE wildcard without visible variables fallback to compatibility engine');\n }\n const unboundVariable = variables.find((variable) => !queryBindsVariableInRequiredShape(localQuery, variable));\n if (unboundVariable) {\n throw new UnsupportedSparqlQueryError('DESCRIBE wildcard variables must be bound by required embedded query patterns');\n }\n return variables.map((variable) => rdfVar(variable));\n }\n\n const targets = query.variables.map((target) => {\n if (target.termType === 'Variable') {\n if (!queryBindsVariableInRequiredShape(localQuery, target.value)) {\n throw new UnsupportedSparqlQueryError('DESCRIBE variables must be bound by required embedded query patterns');\n }\n return rdfVar(target.value);\n }\n if (target.termType === 'NamedNode') {\n return target as unknown as Term;\n }\n throw new UnsupportedSparqlQueryError('DESCRIBE targets must be IRIs or bound variables locally');\n });\n\n if (targets.length === 0) {\n throw new UnsupportedSparqlQueryError('DESCRIBE without targets fallback to compatibility engine');\n }\n return targets;\n }\n\n private resolveTemplateTerm(term: RdfQueryTermPattern, row: RdfBindingRow): Term | undefined {\n if (isCompiledVariable(term)) {\n return row[term.variable];\n }\n return term as Term;\n }\n\n private compileSelectVariables(query: SelectQuery, state: CompileState): string[] {\n const localQuery = state.query;\n if (query.variables.length === 1 && query.variables[0] instanceof Wildcard) {\n if ((localQuery.groupBy?.length ?? 0) > 0) {\n throw new UnsupportedSparqlQueryError('Wildcard grouped SELECT fallback to compatibility engine');\n }\n return visibleSelectVariables(query);\n }\n\n const variables: string[] = [];\n const visibleVariables = visibleSelectVariables(query);\n state.setVisibleSolutionVariables(visibleVariables);\n for (const variable of query.variables) {\n if (isSelectVariableTerm(variable)) {\n variables.push(variable.value);\n continue;\n }\n if (!isVariableExpression(variable)) {\n throw new UnsupportedSparqlQueryError('Wildcard mixed with explicit SELECT projections fallback to compatibility engine');\n }\n\n if (!isAggregateExpression(variable.expression)) {\n if ((localQuery.groupBy?.length ?? 0) > 0) {\n throw new UnsupportedSparqlQueryError('Grouped SELECT expression projection fallback to compatibility engine');\n }\n const alias = variable.variable.value;\n if (\n variables.includes(alias)\n || visibleVariables.includes(alias)\n || (localQuery.binds ?? []).some((bind) => bind.variable === alias)\n ) {\n throw new UnsupportedSparqlQueryError('SELECT expression alias is already bound locally');\n }\n state.addBind({\n variable: alias,\n expression: this.compileSelectProjectionExpression(variable.expression, state.basePath),\n }, false);\n variables.push(alias);\n continue;\n }\n\n const aggregate = variable.expression;\n const compiledAggregate = this.compileAggregateProjection(aggregate, variable.variable.value, state);\n localQuery.aggregates = [...(localQuery.aggregates ?? []), compiledAggregate];\n localQuery.aggregate ??= compiledAggregate;\n variables.push(variable.variable.value);\n }\n this.assertGroupProjection(query, localQuery, variables);\n return variables;\n }\n\n private compileAggregateProjection(\n aggregate: AggregateExpression,\n as: string,\n state: CompileState,\n ): RdfQueryAggregate {\n const type = this.aggregateType(aggregate.aggregation);\n const aggregateExpression = aggregate.expression;\n if (type !== 'count' && isWildcardTerm(aggregateExpression)) {\n throw new UnsupportedSparqlQueryError(`${type.toUpperCase()}(*) fallback to compatibility engine`);\n }\n const variable = isWildcardTerm(aggregateExpression)\n ? undefined\n : this.expressionVariable(aggregateExpression);\n if (type !== 'count') {\n this.assertNumericAggregateSafe(variable, state);\n }\n return {\n type,\n as,\n variable,\n distinct: aggregate.distinct,\n ...(type === 'count' && aggregate.distinct && !variable\n ? { distinctVariables: state.visibleSolutionVariables }\n : {}),\n };\n }\n\n private aggregateType(aggregation: string): RdfQueryAggregate['type'] {\n switch (aggregation.toLowerCase()) {\n case 'count':\n case 'sum':\n case 'avg':\n case 'min':\n case 'max':\n return aggregation.toLowerCase() as RdfQueryAggregate['type'];\n default:\n throw new UnsupportedSparqlQueryError(`Aggregate ${aggregation} fallback to compatibility engine`);\n }\n }\n\n private assertNumericAggregateSafe(variable: string | undefined, state: CompileState): void {\n if (!variable) {\n throw new UnsupportedSparqlQueryError('Numeric aggregate requires a variable locally');\n }\n if (!queryBindsVariableInRequiredShape(state.query, variable)) {\n throw new UnsupportedSparqlQueryError('Numeric aggregate variable must be bound by required embedded query patterns');\n }\n if (!hasNumericGuard(state.query.filters ?? [], variable)) {\n throw new UnsupportedSparqlQueryError('Numeric aggregate requires FILTER(isNumeric(?var)) locally');\n }\n }\n\n private compileSelectProjectionExpression(expression: Expression, basePath: string): RdfBindExpression {\n return this.compileBindLikeExpression(expression, basePath, 'SELECT projection');\n }\n\n private compileGroupBy(group: Grouping[], state: CompileState): string[] | undefined {\n if (group.length === 0) {\n return undefined;\n }\n const groupBy: string[] = [];\n group.forEach((entry, index) => {\n if (isVariableTerm(entry.expression)) {\n const groupVariable = entry.variable?.value ?? entry.expression.value;\n groupBy.push(groupVariable);\n if (entry.variable && entry.variable.value !== entry.expression.value) {\n state.addBind({\n variable: entry.variable.value,\n expression: {\n type: 'variable',\n variable: entry.expression.value,\n },\n }, false);\n }\n return;\n }\n\n const groupVariable = entry.variable?.value ?? state.nextGroupVariable(index);\n state.addBind({\n variable: groupVariable,\n expression: this.compileGroupByExpression(entry.expression, state.basePath),\n }, false);\n groupBy.push(groupVariable);\n });\n state.query.groupBy = groupBy;\n return groupBy;\n }\n\n private compileGroupByExpression(expression: Expression, basePath: string): RdfBindExpression {\n return this.compileBindLikeExpression(expression, basePath, 'GROUP BY');\n }\n\n private compileHaving(having: Expression[], state: CompileState): RdfQueryFilter[] | undefined {\n if (having.length === 0) {\n return undefined;\n }\n const localQuery = state.query;\n if ((localQuery.aggregates?.length ?? 0) === 0 && !localQuery.aggregate) {\n throw new UnsupportedSparqlQueryError('HAVING without aggregate fallback to compatibility engine');\n }\n\n const filters = having.flatMap((expression) => this.compileHavingFilter(expression, state));\n return filters.length > 0 ? filters : undefined;\n }\n\n private compileHavingFilter(expression: Expression, state: CompileState): RdfQueryFilter[] {\n const normalized = this.normalizeFunctionCallExpression(expression);\n if (!isOperationExpression(normalized)) {\n throw new UnsupportedSparqlQueryError('Only simple HAVING operations are supported locally');\n }\n const operator = normalized.operator.toLowerCase();\n if (operator === '&&') {\n return normalized.args.flatMap((arg: Expression | Pattern) => this.compileHavingFilter(this.expressionArg(arg), state));\n }\n const binary = this.binaryFilter(operator);\n if (!binary) {\n throw new UnsupportedSparqlQueryError(`HAVING ${operator} fallback to compatibility engine`);\n }\n\n return [this.compileHavingBinaryFilter(binary, normalized.args[0], normalized.args[1], state)];\n }\n\n private compileHavingBinaryFilter(\n operator: RdfQueryFilterOperator,\n left: Expression | Pattern | undefined,\n right: Expression | Pattern | undefined,\n state: CompileState,\n ): RdfQueryFilter {\n const leftExpression = this.expressionArg(left);\n const rightExpression = this.expressionArg(right);\n const leftAggregate = this.havingAggregateVariableOrUndefined(leftExpression, state);\n if (leftAggregate) {\n return {\n variable: leftAggregate,\n operator,\n value: this.filterValue(rightExpression),\n };\n }\n const rightAggregate = this.havingAggregateVariableOrUndefined(rightExpression, state);\n if (rightAggregate) {\n return {\n variable: rightAggregate,\n operator: this.reverseBinaryFilter(operator),\n value: this.filterValue(leftExpression),\n };\n }\n throw new UnsupportedSparqlQueryError('HAVING must compare one aggregate with one RDF term locally');\n }\n\n private havingAggregateVariableOrUndefined(expression: Expression, state: CompileState): string | undefined {\n const localQuery = state.query;\n const aggregates = localQuery.aggregates ?? (localQuery.aggregate ? [localQuery.aggregate] : []);\n if (aggregates.length === 0) {\n return undefined;\n }\n if (isVariableExpressionTerm(expression)) {\n return aggregates.some((aggregate) => aggregate.as === expression.value) ? expression.value : undefined;\n }\n if (!isAggregateExpression(expression)) {\n return undefined;\n }\n const type = this.aggregateType(expression.aggregation);\n const aggregateExpression = expression.expression;\n const variable = isWildcardTerm(aggregateExpression)\n ? undefined\n : this.expressionVariable(aggregateExpression);\n const matchingAggregate = aggregates.find((aggregate) => (\n type === aggregate.type\n && variable === aggregate.variable\n && expression.distinct === Boolean(aggregate.distinct)\n ));\n if (matchingAggregate) {\n return matchingAggregate.as;\n }\n if (type !== 'count') {\n this.assertNumericAggregateSafe(variable, state);\n }\n const hiddenAggregate: RdfQueryAggregate = {\n type,\n as: state.nextHavingAggregateVariable(),\n variable,\n distinct: expression.distinct,\n ...(type === 'count' && expression.distinct && !variable\n ? { distinctVariables: state.visibleSolutionVariables }\n : {}),\n };\n localQuery.aggregates = [...(localQuery.aggregates ?? []), hiddenAggregate];\n return hiddenAggregate.as;\n }\n\n private assertGroupProjection(query: SelectQuery, localQuery: RdfLocalQuery, variables: string[]): void {\n const groupBy = localQuery.groupBy ?? [];\n if (groupBy.length === 0) {\n return;\n }\n const aggregates = localQuery.aggregates ?? (localQuery.aggregate ? [localQuery.aggregate] : []);\n if (aggregates.length === 0) {\n throw new UnsupportedSparqlQueryError('GROUP BY without aggregate fallback to compatibility engine');\n }\n const groupableVariables = new Set([\n ...localQuery.patterns.flatMap((pattern) => variablesInPattern(pattern)),\n ...(localQuery.binds ?? []).map((bind) => bind.variable),\n ]);\n if (groupBy.some((variableName) => !groupableVariables.has(variableName))) {\n throw new UnsupportedSparqlQueryError('GROUP BY variables must come from required BGP patterns or local binds');\n }\n\n const groupVariables = new Set(groupBy);\n const aggregateVariables = new Set<string>();\n for (const variable of query.variables) {\n if (isSelectVariableTerm(variable)) {\n if (!groupVariables.has(variable.value)) {\n throw new UnsupportedSparqlQueryError('Grouped SELECT variables must be present in GROUP BY');\n }\n continue;\n }\n if (isVariableExpression(variable) && isAggregateExpression(variable.expression)) {\n aggregateVariables.add(variable.variable.value);\n }\n }\n const aggregateAliases = new Set(aggregates.map((aggregate) => aggregate.as));\n if (aggregateVariables.size !== aggregateAliases.size) {\n throw new UnsupportedSparqlQueryError('Grouped local queries require aggregate projections to be aggregate aliases');\n }\n if ([...aggregateVariables].some((variableName) => !aggregateAliases.has(variableName))) {\n throw new UnsupportedSparqlQueryError('Grouped local queries require aggregate projections to be aggregate aliases');\n }\n if (variables.some((variableName) => !groupVariables.has(variableName) && !aggregateAliases.has(variableName))) {\n throw new UnsupportedSparqlQueryError('Grouped SELECT projection fallback to compatibility engine');\n }\n }\n\n private compileOrder(order: Ordering[], state: CompileState): RdfLocalQuery['orderBy'] {\n if (order.length === 0) {\n return undefined;\n }\n return order.map((entry, index) => {\n if (isVariableTerm(entry.expression)) {\n return {\n variable: entry.expression.value,\n direction: entry.descending ? 'desc' : 'asc',\n };\n }\n const orderVariable = state.nextOrderVariable(index);\n state.addBind({\n variable: orderVariable,\n expression: this.compileOrderExpression(entry.expression, state.basePath),\n }, false);\n return {\n variable: orderVariable,\n direction: entry.descending ? 'desc' : 'asc',\n };\n });\n }\n\n private compileOrderExpression(expression: Expression, basePath: string): RdfBindExpression {\n return this.compileBindLikeExpression(expression, basePath, 'ORDER BY');\n }\n\n private compileFilter(expression: Expression): RdfQueryFilter[] {\n const normalizedExpression = this.normalizeFunctionCallExpression(expression);\n if (!isOperationExpression(expression)) {\n if (!normalizedExpression || !isOperationExpression(normalizedExpression)) {\n throw new UnsupportedSparqlQueryError('Only simple FILTER operations are supported locally');\n }\n expression = normalizedExpression;\n } else {\n expression = normalizedExpression as OperationExpression;\n }\n\n const operator = expression.operator.toLowerCase();\n if (operator === '&&') {\n return expression.args.flatMap((arg: Expression | Pattern) => this.compileFilter(this.expressionArg(arg)));\n }\n if (operator === '||') {\n return [this.compileOrFilter(expression)];\n }\n if (operator === 'bound') {\n return [{\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$bound',\n value: true,\n }];\n }\n const termTest = this.compileTermTestFilter(operator, expression);\n if (termTest) {\n return [termTest];\n }\n if (operator === '!' || operator === 'not') {\n return this.compileNegatedFilter(this.expressionArg(expression.args[0]));\n }\n if (operator === 'langmatches') {\n return [this.compileLangMatchesFilter(expression)];\n }\n\n const binary = this.binaryFilter(operator);\n if (binary) {\n return [this.compileBinaryFilter(binary, expression.args[0], expression.args[1])];\n }\n\n if (operator === 'in' || operator === 'notin') {\n const values = expression.args[1];\n if (!Array.isArray(values)) {\n throw new UnsupportedSparqlQueryError('FILTER IN tuple fallback to compatibility engine');\n }\n const functionFilter = this.compileFunctionInFilter(\n this.expressionArg(expression.args[0]),\n values,\n operator === 'notin',\n );\n if (functionFilter) {\n return [functionFilter];\n }\n const operand = this.stringOperandVariable(this.expressionArg(expression.args[0]));\n return [{\n variable: operand.variable,\n operator: operator === 'in' ? '$in' : '$notIn',\n operand: operand.operand,\n values: values.map((value) => this.filterValue(value)),\n }];\n }\n\n const stringOperator = this.stringFilter(operator);\n if (stringOperator) {\n const [left, right, flags] = expression.args;\n const leftOperand = this.stringOperandVariable(this.expressionArg(left));\n return [{\n variable: leftOperand.variable,\n operator: stringOperator,\n operand: leftOperand.operand,\n value: this.literalString(this.expressionArg(right)),\n flags: operator === 'regex' && flags ? this.literalString(this.expressionArg(flags)) : undefined,\n }];\n }\n\n throw new UnsupportedSparqlQueryError(`FILTER ${operator} fallback to compatibility engine`);\n }\n\n private compileOrFilter(expression: OperationExpression): RdfQueryFilter {\n const branches = this.flattenOrExpressions(expression);\n let variable: string | undefined;\n let operand: RdfQueryFilter['operand'] = undefined;\n let operandInitialized = false;\n const values: RdfQueryFilterValue[] = [];\n const seen = new Set<string>();\n\n for (const branch of branches) {\n const filters = this.compileFilter(branch);\n if (filters.length !== 1) {\n throw new UnsupportedSparqlQueryError('FILTER OR only supports equality or IN branches on one variable locally');\n }\n\n const filter = filters[0];\n if (filter.operator !== '$eq' && filter.operator !== '$in') {\n throw new UnsupportedSparqlQueryError('FILTER OR only supports equality or IN branches on one variable locally');\n }\n if (variable && variable !== filter.variable) {\n throw new UnsupportedSparqlQueryError('FILTER OR branches must constrain the same variable locally');\n }\n if (operandInitialized && operand !== filter.operand) {\n throw new UnsupportedSparqlQueryError('FILTER OR branches must use the same operand locally');\n }\n variable = filter.variable;\n operand = filter.operand;\n operandInitialized = true;\n\n const branchValues = filter.operator === '$eq'\n ? filter.value === undefined ? [] : [filter.value]\n : filter.values ?? [];\n if (branchValues.length === 0) {\n throw new UnsupportedSparqlQueryError('FILTER OR branch without values fallback to compatibility engine');\n }\n for (const value of branchValues) {\n const key = this.filterValueKey(value);\n if (!seen.has(key)) {\n seen.add(key);\n values.push(value);\n }\n }\n }\n\n if (!variable || values.length === 0) {\n throw new UnsupportedSparqlQueryError('FILTER OR without equality branches fallback to compatibility engine');\n }\n return {\n variable,\n operator: '$in',\n operand,\n values,\n };\n }\n\n private flattenOrExpressions(expression: Expression): Expression[] {\n if (isOperationExpression(expression) && expression.operator.toLowerCase() === '||') {\n return expression.args.flatMap((arg: Expression | Pattern) => this.flattenOrExpressions(this.expressionArg(arg)));\n }\n return [expression];\n }\n\n private filterValueKey(value: RdfQueryFilterValue): string {\n if (value && typeof value === 'object' && 'termType' in value) {\n return `term:${termToId(value as any)}`;\n }\n return `${typeof value}:${String(value)}`;\n }\n\n private compileBinaryFilter(\n operator: RdfQueryFilterOperator,\n left: Expression | Pattern | undefined,\n right: Expression | Pattern | undefined,\n ): RdfQueryFilter {\n const leftExpression = this.expressionArg(left);\n const rightExpression = this.expressionArg(right);\n const leftStringLengthVariable = this.stringLengthVariableOrUndefined(leftExpression);\n const rightStringLengthVariable = this.stringLengthVariableOrUndefined(rightExpression);\n if (leftStringLengthVariable && rightStringLengthVariable) {\n return {\n variable: leftStringLengthVariable,\n operator,\n operand: 'stringLength',\n variable2: rightStringLengthVariable,\n };\n }\n if (leftStringLengthVariable) {\n return {\n variable: leftStringLengthVariable,\n operator,\n operand: 'stringLength',\n value: this.filterValue(rightExpression),\n };\n }\n if (rightStringLengthVariable) {\n return {\n variable: rightStringLengthVariable,\n operator: this.reverseBinaryFilter(operator),\n operand: 'stringLength',\n value: this.filterValue(leftExpression),\n };\n }\n const leftFunction = this.compileFunctionComparisonFilter(operator, leftExpression, rightExpression);\n if (leftFunction) {\n return leftFunction;\n }\n const rightFunction = this.compileFunctionComparisonFilter(this.reverseBinaryFilter(operator), rightExpression, leftExpression);\n if (rightFunction) {\n return rightFunction;\n }\n const leftStringOperand = this.stringOperandVariableOrUndefined(leftExpression);\n const rightStringOperand = this.stringOperandVariableOrUndefined(rightExpression);\n if (leftStringOperand && rightStringOperand) {\n if (leftStringOperand.operand !== rightStringOperand.operand) {\n throw new UnsupportedSparqlQueryError('FILTER string expression comparison must use matching operands locally');\n }\n return {\n variable: leftStringOperand.variable,\n operator,\n operand: leftStringOperand.operand,\n variable2: rightStringOperand.variable,\n };\n }\n if (leftStringOperand) {\n return {\n variable: leftStringOperand.variable,\n operator,\n operand: leftStringOperand.operand,\n value: this.literalString(rightExpression),\n };\n }\n if (rightStringOperand) {\n return {\n variable: rightStringOperand.variable,\n operator: this.reverseBinaryFilter(operator),\n operand: rightStringOperand.operand,\n value: this.literalString(leftExpression),\n };\n }\n const leftVariable = this.expressionVariableOrUndefined(leftExpression);\n const rightVariable = this.expressionVariableOrUndefined(rightExpression);\n\n if (leftVariable && !rightVariable) {\n return {\n variable: leftVariable,\n operator,\n value: this.filterValue(rightExpression),\n };\n }\n\n if (leftVariable && rightVariable) {\n return {\n variable: leftVariable,\n operator,\n variable2: rightVariable,\n };\n }\n\n if (rightVariable && !leftVariable) {\n return {\n variable: rightVariable,\n operator: this.reverseBinaryFilter(operator),\n value: this.filterValue(leftExpression),\n };\n }\n\n throw new UnsupportedSparqlQueryError('FILTER comparison must compare one variable with one RDF term locally');\n }\n\n private compileTermTestFilter(operator: string, expression: OperationExpression): RdfQueryFilter | null {\n switch (operator) {\n case 'isiri':\n case 'isuri':\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$termType',\n value: 'iri',\n };\n case 'isblank':\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$termType',\n value: 'blank',\n };\n case 'isliteral':\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$termType',\n value: 'literal',\n };\n case 'isnumeric':\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$termType',\n value: 'numeric',\n };\n case 'sameterm': {\n const leftExpression = this.expressionArg(expression.args[0]);\n const rightExpression = this.expressionArg(expression.args[1]);\n const leftVariable = this.expressionVariableOrUndefined(leftExpression);\n const rightVariable = this.expressionVariableOrUndefined(rightExpression);\n if (leftVariable && rightVariable) {\n return {\n variable: leftVariable,\n operator: '$sameTerm',\n variable2: rightVariable,\n };\n }\n if (leftVariable) {\n return {\n variable: leftVariable,\n operator: '$sameTerm',\n value: this.filterValue(rightExpression),\n };\n }\n if (rightVariable) {\n return {\n variable: rightVariable,\n operator: '$sameTerm',\n value: this.filterValue(leftExpression),\n };\n }\n throw new UnsupportedSparqlQueryError('sameTerm FILTER must compare at least one variable locally');\n }\n default:\n return null;\n }\n }\n\n private compileFunctionComparisonFilter(\n operator: RdfQueryFilterOperator,\n functionExpression: Expression,\n valueExpression: Expression,\n ): RdfQueryFilter | null {\n if (operator !== '$eq' && operator !== '$ne') {\n return null;\n }\n if (!isOperationExpression(functionExpression)) {\n return null;\n }\n const functionOperator = functionExpression.operator.toLowerCase();\n if (functionOperator === 'lang') {\n return {\n variable: this.expressionVariable(this.expressionArg(functionExpression.args[0])),\n operator: operator === '$eq' ? '$lang' : '$notLang',\n value: this.literalString(valueExpression),\n };\n }\n if (functionOperator === 'datatype') {\n const value = this.filterValue(valueExpression);\n if (!isNamedNodeTerm(value)) {\n throw new UnsupportedSparqlQueryError('DATATYPE FILTER value must be an IRI locally');\n }\n return {\n variable: this.expressionVariable(this.expressionArg(functionExpression.args[0])),\n operator: operator === '$eq' ? '$datatype' : '$notDatatype',\n value,\n };\n }\n return null;\n }\n\n private compileFunctionInFilter(\n functionExpression: Expression,\n values: Expression[],\n negated: boolean,\n ): RdfQueryFilter | null {\n if (!isOperationExpression(functionExpression)) {\n return null;\n }\n const functionOperator = functionExpression.operator.toLowerCase();\n if (functionOperator === 'lang') {\n return {\n variable: this.expressionVariable(this.expressionArg(functionExpression.args[0])),\n operator: negated ? '$notLangIn' : '$langIn',\n values: values.map((value) => this.literalString(value)),\n };\n }\n if (functionOperator === 'datatype') {\n const datatypeValues = values.map((value) => this.filterValue(value));\n if (datatypeValues.some((value) => !isNamedNodeTerm(value))) {\n throw new UnsupportedSparqlQueryError('DATATYPE FILTER values must be IRIs locally');\n }\n return {\n variable: this.expressionVariable(this.expressionArg(functionExpression.args[0])),\n operator: negated ? '$notDatatypeIn' : '$datatypeIn',\n values: datatypeValues,\n };\n }\n return null;\n }\n\n private stringLengthVariableOrUndefined(expression: Expression): string | undefined {\n const normalized = this.normalizeFunctionCallExpression(expression);\n if (!isOperationExpression(normalized) || normalized.operator.toLowerCase() !== 'strlen') {\n return undefined;\n }\n return this.stringOperandVariable(this.expressionArg(normalized.args[0])).variable;\n }\n\n private stringValueVariableOrUndefined(expression: Expression): string | undefined {\n const operand = this.stringOperandVariableOrUndefined(expression);\n return operand?.operand === 'stringValue' ? operand.variable : undefined;\n }\n\n private stringOperandVariable(expression: Expression): { variable: string; operand?: RdfQueryFilter['operand'] } {\n const stringOperand = this.stringOperandVariableOrUndefined(expression);\n if (stringOperand) {\n return stringOperand;\n }\n return {\n variable: this.expressionVariable(expression),\n };\n }\n\n private stringOperandVariableOrUndefined(expression: Expression): { variable: string; operand: RdfQueryFilter['operand'] } | undefined {\n if (isStrOperation(expression)) {\n return {\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operand: 'stringValue',\n };\n }\n const normalized = this.normalizeFunctionCallExpression(expression);\n if (!isOperationExpression(normalized)) {\n return undefined;\n }\n const operator = normalized.operator.toLowerCase();\n if (operator !== 'lcase' && operator !== 'lower-case' && operator !== 'ucase' && operator !== 'upper-case') {\n return undefined;\n }\n const innerOperand = this.stringOperandVariableOrUndefined(this.expressionArg(normalized.args[0]));\n if (!innerOperand || innerOperand.operand !== 'stringValue') {\n return undefined;\n }\n return {\n variable: innerOperand.variable,\n operand: operator === 'lcase' || operator === 'lower-case' ? 'lowerStringValue' : 'upperStringValue',\n };\n }\n\n private compileLangMatchesFilter(expression: OperationExpression): RdfQueryFilter {\n const langExpression = this.expressionArg(expression.args[0]);\n if (!isOperationExpression(langExpression) || langExpression.operator.toLowerCase() !== 'lang') {\n throw new UnsupportedSparqlQueryError('LANGMATCHES first argument must be LANG(?var) locally');\n }\n return {\n variable: this.expressionVariable(this.expressionArg(langExpression.args[0])),\n operator: '$langMatches',\n value: this.literalString(this.expressionArg(expression.args[1])),\n };\n }\n\n private compileValuesRows(rows: ValuePatternRow[], state: CompileState, optional = false): void {\n if (rows.length === 0) {\n return;\n }\n\n const keys = unique(rows.flatMap((row) => Object.keys(row))).sort();\n\n if (keys.length === 0) {\n return;\n }\n const hasUnboundValues = rows.some((row) => keys.some((key) => !row[key]));\n\n if (!optional && keys.length === 1 && !hasUnboundValues) {\n const key = keys[0];\n state.query.filters?.push({\n variable: key.replace(/^\\?/, ''),\n operator: '$in',\n values: rows.map((row) => this.filterValue(row[key] as Expression)),\n source: 'values',\n });\n return;\n }\n\n const variables = keys.map((key) => key.replace(/^\\?/, ''));\n state.addValuesSource({\n variables,\n rows: rows.map((row) => {\n const binding: RdfBindingRow = {};\n keys.forEach((key, index) => {\n const expression = row[key];\n if (expression) {\n binding[variables[index]] = this.valuesTerm(expression as Expression);\n }\n });\n return binding;\n }),\n }, optional);\n }\n\n private valuesTerm(expression: Expression): Term {\n const value = this.filterValue(expression);\n if (!isRdfJsTerm(value)) {\n throw new UnsupportedSparqlQueryError('VALUES rows must contain RDF terms locally');\n }\n return value;\n }\n\n private compileNegatedFilter(expression: Expression): RdfQueryFilter[] {\n if (!isOperationExpression(expression)) {\n throw new UnsupportedSparqlQueryError('Only safely negated FILTER operations are supported locally');\n }\n\n const operator = expression.operator.toLowerCase();\n if (operator === 'bound') {\n return [{\n variable: this.expressionVariable(this.expressionArg(expression.args[0])),\n operator: '$bound',\n value: false,\n }];\n }\n const termTest = this.compileTermTestFilter(operator, expression);\n if (termTest) {\n return [this.negateTermTestFilter(termTest)];\n }\n if (operator === 'langmatches') {\n const filter = this.compileLangMatchesFilter(expression);\n return [{\n ...filter,\n operator: '$notLangMatches',\n }];\n }\n if (operator === '||') {\n const filter = this.compileOrFilter(expression);\n return [{\n ...filter,\n operator: '$notIn',\n }];\n }\n\n const binary = this.negatedBinaryFilter(operator);\n if (binary) {\n return [this.compileBinaryFilter(binary, expression.args[0], expression.args[1])];\n }\n\n if (operator === 'in' || operator === 'notin') {\n const values = expression.args[1];\n if (!Array.isArray(values)) {\n throw new UnsupportedSparqlQueryError('FILTER negated IN tuple fallback to compatibility engine');\n }\n const functionFilter = this.compileFunctionInFilter(\n this.expressionArg(expression.args[0]),\n values,\n operator === 'in',\n );\n if (functionFilter) {\n return [functionFilter];\n }\n const operand = this.stringOperandVariable(this.expressionArg(expression.args[0]));\n return [{\n variable: operand.variable,\n operator: operator === 'in' ? '$notIn' : '$in',\n operand: operand.operand,\n values: values.map((value) => this.filterValue(value)),\n }];\n }\n\n const stringOperator = this.stringFilter(operator);\n if (stringOperator) {\n const [left, right, flags] = expression.args;\n const leftOperand = this.stringOperandVariable(this.expressionArg(left));\n return [{\n variable: leftOperand.variable,\n operator: this.negatedStringFilter(stringOperator),\n operand: leftOperand.operand,\n value: this.literalString(this.expressionArg(right)),\n flags: operator === 'regex' && flags ? this.literalString(this.expressionArg(flags)) : undefined,\n }];\n }\n\n throw new UnsupportedSparqlQueryError(`FILTER !${operator} fallback to compatibility engine`);\n }\n\n private expressionArg(value: Expression | Pattern | undefined): Expression {\n if (!value || (value as Pattern).type === 'bgp') {\n throw new UnsupportedSparqlQueryError('Unsupported FILTER argument');\n }\n return this.normalizeFunctionCallExpression(value as Expression);\n }\n\n private expressionVariable(expression: Expression): string {\n if (isVariableTerm(expression)) {\n return expression.value;\n }\n throw new UnsupportedSparqlQueryError('Only variable expressions are supported in this query position');\n }\n\n private expressionVariableOrUndefined(expression: Expression): string | undefined {\n return isVariableTerm(expression) ? expression.value : undefined;\n }\n\n private filterValue(expression: Expression): Term | string | number | boolean {\n if (isRdfTermExpression(expression)) {\n return expression as unknown as Term;\n }\n throw new UnsupportedSparqlQueryError('Only RDF term filter values are supported locally');\n }\n\n private literalString(expression: Expression): string {\n if (isLiteralTerm(expression)) {\n return expression.value;\n }\n throw new UnsupportedSparqlQueryError('String FILTER arguments must be literals');\n }\n\n private binaryFilter(operator: string): RdfQueryFilterOperator | null {\n switch (operator) {\n case '=':\n return '$eq';\n case '!=':\n return '$ne';\n case '>':\n return '$gt';\n case '>=':\n return '$gte';\n case '<':\n return '$lt';\n case '<=':\n return '$lte';\n default:\n return null;\n }\n }\n\n private reverseBinaryFilter(operator: RdfQueryFilterOperator): RdfQueryFilterOperator {\n switch (operator) {\n case '$eq':\n case '$ne':\n return operator;\n case '$gt':\n return '$lt';\n case '$gte':\n return '$lte';\n case '$lt':\n return '$gt';\n case '$lte':\n return '$gte';\n default:\n throw new UnsupportedSparqlQueryError(`FILTER ${operator} cannot be reversed locally`);\n }\n }\n\n private negatedBinaryFilter(operator: string): RdfQueryFilterOperator | null {\n switch (operator) {\n case '=':\n return '$ne';\n case '!=':\n return '$eq';\n case '>':\n return '$lte';\n case '>=':\n return '$lt';\n case '<':\n return '$gte';\n case '<=':\n return '$gt';\n default:\n return null;\n }\n }\n\n private stringFilter(operator: string): RdfQueryFilterOperator | null {\n switch (operator) {\n case 'strstarts':\n return '$startsWith';\n case 'contains':\n return '$contains';\n case 'strends':\n return '$endsWith';\n case 'regex':\n return '$regex';\n default:\n return null;\n }\n }\n\n private negatedStringFilter(operator: RdfQueryFilterOperator): RdfQueryFilterOperator {\n switch (operator) {\n case '$startsWith':\n return '$notStartsWith';\n case '$contains':\n return '$notContains';\n case '$endsWith':\n return '$notEndsWith';\n case '$regex':\n return '$notRegex';\n default:\n throw new UnsupportedSparqlQueryError(`FILTER !${operator} fallback to compatibility engine`);\n }\n }\n\n private negateTermTestFilter(filter: RdfQueryFilter): RdfQueryFilter {\n switch (filter.operator) {\n case '$termType':\n return {\n ...filter,\n operator: '$notTermType',\n };\n case '$sameTerm':\n return {\n ...filter,\n operator: '$notSameTerm',\n };\n default:\n throw new UnsupportedSparqlQueryError(`FILTER !${filter.operator} fallback to compatibility engine`);\n }\n }\n\n private normalizeFunctionCallExpression(expression: Expression): Expression {\n if (!isFunctionCallExpression(expression)) {\n return expression;\n }\n if (expression.distinct) {\n throw new UnsupportedSparqlQueryError('DISTINCT function calls fallback to compatibility engine');\n }\n const functionIri = typeof expression.function === 'string'\n ? expression.function\n : expression.function.value;\n const operator = this.xpathFunctionOperator(functionIri);\n if (!operator) {\n throw new UnsupportedSparqlQueryError(`Unsupported SPARQL function ${functionIri} fallback to compatibility engine`);\n }\n return {\n type: 'operation',\n operator,\n args: expression.args.map((arg) => (\n Array.isArray(arg)\n ? arg.map((item) => this.normalizeFunctionCallExpression(this.expressionArg(item)))\n : this.normalizeFunctionCallExpression(this.expressionArg(arg))\n )),\n } as OperationExpression;\n }\n\n private xpathFunctionOperator(iri: string): string | null {\n if (!iri.startsWith(XPATH_FUNCTION_NS)) {\n return null;\n }\n switch (iri.slice(XPATH_FUNCTION_NS.length).toLowerCase()) {\n case 'concat':\n return 'concat';\n case 'contains':\n return 'contains';\n case 'starts-with':\n return 'strstarts';\n case 'ends-with':\n return 'strends';\n case 'matches':\n return 'regex';\n case 'string-length':\n return 'strlen';\n case 'lower-case':\n return 'lcase';\n case 'upper-case':\n return 'ucase';\n case 'substring':\n return 'substring';\n case 'langmatches':\n return 'langmatches';\n default:\n return null;\n }\n }\n}\n\nclass CompileState {\n public readonly query: RdfLocalQuery = {\n patterns: [],\n unions: [],\n optional: [],\n filters: [],\n };\n\n private readonly optionalStack: OptionalFrame[] = [];\n private pathJoinVariableIndex = 0;\n private groupVariableIndex = 0;\n private orderVariableIndex = 0;\n private havingAggregateVariableIndex = 0;\n public visibleSolutionVariables: string[] | undefined;\n\n public constructor(\n public readonly basePath: string,\n private readonly skipMinusSharedVariableCheck = false,\n ) {}\n\n public setVisibleSolutionVariables(variables: string[]): void {\n this.visibleSolutionVariables = variables;\n }\n\n public addPattern(pattern: RdfQueryPattern, optional: boolean): void {\n if (optional) {\n this.currentOptionalFrame().patterns.push(this.scopePattern(pattern));\n return;\n }\n this.query.patterns.push(this.scopePattern(pattern));\n }\n\n public addImpossibleGraphPattern(optional: boolean): void {\n const impossible = DataFactory.namedNode(`${this.basePath}__outside_graph_scope__`) as unknown as NamedNode;\n this.addPattern({ graph: impossible }, optional);\n }\n\n public startOptional(): void {\n this.optionalStack.push({\n patterns: [],\n filters: [],\n binds: [],\n unions: [],\n values: [],\n optional: [],\n minus: [],\n exists: [],\n });\n }\n\n public finishOptional(): void {\n const frame = this.optionalStack.pop();\n if (!frame) {\n throw new UnsupportedSparqlQueryError('OPTIONAL scope fallback to compatibility engine');\n }\n if (\n frame.patterns.length > 0\n || frame.filters.length > 0\n || frame.binds.length > 0\n || frame.unions.length > 0\n || frame.values.length > 0\n || frame.optional.length > 0\n || frame.minus.length > 0\n || frame.exists.length > 0\n ) {\n const optionalGroup: RdfOptionalQueryGroup = {\n patterns: frame.patterns,\n ...(frame.values.length ? { values: frame.values } : {}),\n ...(frame.unions.length ? { unions: frame.unions } : {}),\n ...(frame.optional.length ? { optional: frame.optional } : {}),\n ...(frame.minus.length ? { minus: frame.minus } : {}),\n ...(frame.exists.length ? { exists: frame.exists } : {}),\n ...(frame.binds.length ? { binds: frame.binds } : {}),\n ...(frame.filters.length > 0 ? { filters: frame.filters } : {}),\n };\n const parent = this.peekOptionalFrame();\n if (parent) {\n parent.optional.push(optionalGroup);\n } else {\n this.query.optional?.push(optionalGroup);\n }\n }\n }\n\n public addOptionalFilters(filters: RdfQueryFilter[]): void {\n this.currentOptionalFrame().filters.push(...filters);\n }\n\n public addBind(bind: RdfQueryBind, optional: boolean): void {\n if (optional) {\n this.currentOptionalFrame().binds.push(bind);\n return;\n }\n this.query.binds ??= [];\n this.query.binds.push(bind);\n }\n\n public addOptionalUnion(branches: RdfUnionQueryBranch[]): void {\n this.currentOptionalFrame().unions.push({ branches });\n }\n\n public addUnion(branches: RdfUnionQueryBranch[]): void {\n this.query.unions?.push({ branches });\n }\n\n public addOptionalMinus(group: RdfMinusQueryGroup): void {\n this.currentOptionalFrame().minus.push(group);\n }\n\n public addMinus(group: RdfMinusQueryGroup): void {\n this.query.minus ??= [];\n this.query.minus.push(group);\n }\n\n public addOptionalExists(group: RdfExistsQueryGroup): void {\n this.currentOptionalFrame().exists.push(group);\n }\n\n public addExists(group: RdfExistsQueryGroup): void {\n this.query.exists ??= [];\n this.query.exists.push(group);\n }\n\n public addValuesSource(source: RdfValuesBindingSource, optional: boolean): void {\n if (optional) {\n this.currentOptionalFrame().values.push(source);\n return;\n }\n this.query.values ??= [];\n this.query.values.push(source);\n }\n\n public nextPathJoinVariable(): RdfQueryTermPattern {\n this.pathJoinVariableIndex += 1;\n return rdfVar(`${PATH_JOIN_VARIABLE_PREFIX}_${this.pathJoinVariableIndex}`);\n }\n\n public nextGroupVariable(index: number): string {\n this.groupVariableIndex += 1;\n return `__rdf_group_${index}_${this.groupVariableIndex}`;\n }\n\n public nextOrderVariable(index: number): string {\n this.orderVariableIndex += 1;\n return `__rdf_order_${index}_${this.orderVariableIndex}`;\n }\n\n public nextHavingAggregateVariable(): string {\n this.havingAggregateVariableIndex += 1;\n return `__rdf_having_aggregate_${this.havingAggregateVariableIndex}`;\n }\n\n public assertValuesVariablesBoundByRequiredPatterns(): void {\n for (const source of this.query.values ?? []) {\n for (const variable of source.variables) {\n if (!this.isVariableBoundByRequiredShape(variable)) {\n throw new UnsupportedSparqlQueryError('VALUES must constrain a variable from every required embedded query branch');\n }\n }\n }\n for (const filter of this.query.filters ?? []) {\n if (filter.operator !== '$in' || filter.source !== 'values') {\n continue;\n }\n if (!this.isVariableBoundByRequiredShape(filter.variable)) {\n throw new UnsupportedSparqlQueryError('VALUES must constrain a variable from every required embedded query branch');\n }\n }\n }\n\n public assertBindVariablesSafe(): void {\n const bound = new Set<string>();\n for (const variableName of variablesInPatterns(this.query.patterns)) {\n bound.add(variableName);\n }\n for (const unionGroup of this.query.unions ?? []) {\n for (const branch of unionGroup.branches) {\n for (const variableName of variablesInPatterns(branch.patterns)) {\n bound.add(variableName);\n }\n for (const variableName of variablesInUnionGroups(branch.unions ?? [])) {\n bound.add(variableName);\n }\n for (const bind of branch.binds ?? []) {\n for (const dependency of variablesInBindExpression(bind.expression)) {\n if (!bound.has(dependency)) {\n throw new UnsupportedSparqlQueryError('BIND dependency must be bound before use locally');\n }\n }\n bound.add(bind.variable);\n }\n }\n }\n for (const bind of this.query.binds ?? []) {\n for (const dependency of variablesInBindExpression(bind.expression)) {\n if (!bound.has(dependency)) {\n throw new UnsupportedSparqlQueryError('BIND dependency must be bound before use locally');\n }\n }\n bound.add(bind.variable);\n }\n for (const rawOptionalGroup of this.query.optional ?? []) {\n assertOptionalBindVariablesSafe(rawOptionalGroup, bound);\n }\n }\n\n public assertDependentGroupsShareRequiredVariables(): void {\n if (this.skipMinusSharedVariableCheck) {\n return;\n }\n for (const minusGroup of this.query.minus ?? []) {\n const shared = variablesInDependentGroup(minusGroup)\n .some((variableName) => queryBindsVariableInRequiredShape(this.query, variableName));\n if (!shared) {\n throw new UnsupportedSparqlQueryError('MINUS must share a required query variable locally');\n }\n }\n for (const existsGroup of this.query.exists ?? []) {\n const shared = variablesInDependentGroup(existsGroup)\n .some((variableName) => queryBindsVariableInRequiredShape(this.query, variableName));\n if (!shared) {\n throw new UnsupportedSparqlQueryError('FILTER EXISTS must share a required query variable locally');\n }\n }\n const requiredBound = variablesBoundByRequiredShape(this.query);\n for (const optionalGroup of this.query.optional ?? []) {\n assertOptionalDependentGroupsShareVariables(normalizeOptionalGroupForAdapter(optionalGroup), requiredBound);\n }\n }\n\n private isVariableBoundByRequiredShape(variableName: string): boolean {\n return queryBindsVariableInRequiredShape(this.query, variableName);\n }\n\n private scopePattern(pattern: RdfQueryPattern): RdfQueryPattern {\n return pattern.graph ? pattern : { ...pattern, graph: implicitQueryDefaultGraph(this.basePath) };\n }\n\n private currentOptionalFrame(): OptionalFrame {\n const frame = this.peekOptionalFrame();\n if (!frame) {\n throw new UnsupportedSparqlQueryError('OPTIONAL scope fallback to compatibility engine');\n }\n return frame;\n }\n\n private peekOptionalFrame(): OptionalFrame | undefined {\n return this.optionalStack[this.optionalStack.length - 1];\n }\n}\n\nfunction implicitQueryDefaultGraph(basePath: string): RdfQueryTermPattern {\n return basePath.endsWith('/')\n ? { $startsWith: basePath }\n : DataFactory.namedNode(basePath) as unknown as Term;\n}\n\nfunction isVariableTerm(value: Variable | Expression): value is VariableTerm {\n return Boolean(value && 'termType' in value && value.termType === 'Variable');\n}\n\nfunction isSelectVariableTerm(value: Variable | Wildcard): value is VariableTerm {\n return Boolean(value && 'termType' in value && value.termType === 'Variable');\n}\n\nfunction isVariableExpression(value: Variable | Wildcard): value is VariableExpression {\n return Boolean(value && 'expression' in value && 'variable' in value);\n}\n\nfunction isVariableExpressionTerm(value: Expression): value is VariableTerm {\n return Boolean(value && 'termType' in value && value.termType === 'Variable');\n}\n\nfunction isOperationExpression(value: Expression): value is OperationExpression {\n return Boolean(value && 'type' in value && value.type === 'operation');\n}\n\nfunction isStrOperation(value: Expression): value is OperationExpression {\n return isOperationExpression(value) && value.operator.toLowerCase() === 'str';\n}\n\nfunction isFunctionCallExpression(value: Expression): value is FunctionCallExpression {\n return Boolean(value && 'type' in value && value.type === 'functionCall');\n}\n\nfunction isAggregateExpression(value: Expression): value is AggregateExpression {\n return Boolean(value && 'type' in value && value.type === 'aggregate');\n}\n\nfunction isLiteralTerm(value: Expression): value is LiteralTerm {\n return Boolean(value && 'termType' in value && value.termType === 'Literal');\n}\n\nfunction isWildcardTerm(value: Expression | Wildcard): value is Wildcard {\n return value instanceof Wildcard;\n}\n\nfunction isRdfTermExpression(value: Expression): value is LiteralTerm | IriTerm | VariableTerm {\n return Boolean(value && 'termType' in value && value.termType !== 'Quad');\n}\n\nfunction isNamedNodeTerm(value: unknown): value is NamedNode {\n return Boolean(value && typeof value === 'object' && 'termType' in value && value.termType === 'NamedNode');\n}\n\nfunction isRdfJsTerm(value: unknown): value is Term {\n return Boolean(value && typeof value === 'object' && 'termType' in value);\n}\n\nfunction isSimpleTerm(value: Triple['predicate']): value is IriTerm | VariableTerm {\n return Boolean(value && 'termType' in value);\n}\n\nfunction visibleSelectVariables(query: { where?: Pattern[]; values?: ValuePatternRow[] }): string[] {\n const variables = new Set<string>();\n for (const pattern of query.where ?? []) {\n collectPatternVariables(pattern, variables);\n }\n for (const row of query.values ?? []) {\n for (const key of Object.keys(row)) {\n variables.add(key.replace(/^\\?/, ''));\n }\n }\n return [...variables];\n}\n\nfunction collectPatternVariables(pattern: Pattern, variables: Set<string>): void {\n switch (pattern.type) {\n case 'bgp':\n for (const triple of pattern.triples) {\n collectTripleVariables(triple, variables);\n }\n break;\n case 'graph':\n if (pattern.name.termType === 'Variable') {\n variables.add(pattern.name.value);\n }\n for (const child of pattern.patterns) {\n collectPatternVariables(child, variables);\n }\n break;\n case 'optional':\n case 'group':\n case 'union':\n case 'minus':\n case 'service':\n for (const child of pattern.patterns) {\n collectPatternVariables(child, variables);\n }\n break;\n case 'filter':\n collectExpressionVariables(pattern.expression, variables);\n break;\n case 'bind':\n collectExpressionVariables(pattern.expression, variables);\n variables.add(pattern.variable.value);\n break;\n case 'values':\n for (const row of pattern.values) {\n for (const key of Object.keys(row)) {\n variables.add(key.replace(/^\\?/, ''));\n }\n }\n break;\n default:\n if ('queryType' in pattern) {\n for (const child of pattern.where ?? []) {\n collectPatternVariables(child, variables);\n }\n }\n break;\n }\n}\n\nfunction collectTripleVariables(triple: Triple, variables: Set<string>): void {\n collectTermVariables(triple.subject, variables);\n if (isSimpleTerm(triple.predicate)) {\n collectTermVariables(triple.predicate, variables);\n } else {\n collectPathVariables(triple.predicate, variables);\n }\n collectTermVariables(triple.object, variables);\n}\n\nfunction collectPathVariables(path: PropertyPath, variables: Set<string>): void {\n for (const item of path.items) {\n if (isSimpleTerm(item)) {\n collectTermVariables(item, variables);\n } else {\n collectPathVariables(item, variables);\n }\n }\n}\n\nfunction collectExpressionVariables(expression: Expression, variables: Set<string>): void {\n if (isVariableTerm(expression)) {\n variables.add(expression.value);\n return;\n }\n if (!expression || typeof expression !== 'object' || !('type' in expression)) {\n return;\n }\n if (isOperationExpression(expression) || isFunctionCallExpression(expression)) {\n for (const arg of expression.args) {\n if (Array.isArray(arg)) {\n for (const item of arg) {\n collectExpressionVariables(item, variables);\n }\n } else if (arg && !isPattern(arg)) {\n collectExpressionVariables(arg as Expression, variables);\n }\n }\n return;\n }\n if (isAggregateExpression(expression) && !isWildcardTerm(expression.expression)) {\n collectExpressionVariables(expression.expression, variables);\n }\n}\n\nfunction collectTermVariables(term: SparqlTerm, variables: Set<string>): void {\n if (term.termType === 'Variable') {\n variables.add(term.value);\n }\n}\n\nfunction isPattern(value: Expression | Pattern): value is Pattern {\n return Boolean(\n value\n && typeof value === 'object'\n && 'type' in value\n && [\n 'bgp',\n 'optional',\n 'union',\n 'group',\n 'graph',\n 'minus',\n 'service',\n 'filter',\n 'bind',\n 'values',\n 'query',\n ].includes(value.type),\n );\n}\n\nfunction isCompiledVariable(value: RdfQueryTermPattern): value is { variable: string } {\n return Boolean(value && typeof value === 'object' && 'variable' in value);\n}\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n\nfunction uniqueTerms<T extends Term>(values: T[]): T[] {\n const seen = new Set<string>();\n return values.filter((value) => {\n const key = termToId(value as any);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n}\n\nfunction variablesInPattern(pattern: RdfQueryPattern): string[] {\n const values = [pattern.graph, pattern.subject, pattern.predicate, pattern.object];\n return values\n .filter((value): value is { variable: string } => Boolean(value && typeof value === 'object' && 'variable' in value))\n .map((value) => value.variable);\n}\n\nfunction patternsBindVariable(patterns: RdfQueryPattern[], variableName: string): boolean {\n return patterns.some((pattern) => variablesInPattern(pattern).includes(variableName));\n}\n\nfunction variablesInPatterns(patterns: RdfQueryPattern[]): string[] {\n return unique(patterns.flatMap((pattern) => variablesInPattern(pattern)));\n}\n\nfunction variablesBoundByOptionalGroup(optionalGroup: RdfOptionalQueryGroup): string[] {\n return unique([\n ...variablesInPatterns(optionalGroup.patterns),\n ...variablesInValuesSources(optionalGroup.values ?? []),\n ...variablesInUnionGroups(optionalGroup.unions ?? []),\n ...((optionalGroup.binds ?? []).map((bind) => bind.variable)),\n ]);\n}\n\nfunction variablesInUnionGroups(unions: RdfUnionQueryGroup[]): string[] {\n return unique(unions.flatMap((unionGroup) => (\n unionGroup.branches.flatMap((branch) => [\n ...variablesInPatterns(branch.patterns),\n ...variablesInValuesSources(branch.values ?? []),\n ...variablesInUnionGroups(branch.unions ?? []),\n ...((branch.binds ?? []).map((bind) => bind.variable)),\n ])\n )));\n}\n\nfunction variablesBoundByRequiredShape(query: RdfLocalQuery): Set<string> {\n return new Set([\n ...variablesInPatterns(query.patterns),\n ...variablesInValuesSources(query.values ?? []),\n ...variablesInUnionGroups(query.unions ?? []),\n ...((query.binds ?? []).map((bind) => bind.variable)),\n ]);\n}\n\nfunction hasNumericGuard(filters: RdfQueryFilter[], variableName: string): boolean {\n return filters.some((filter) => (\n filter.variable === variableName\n && filter.operator === '$termType'\n && filter.value === 'numeric'\n ));\n}\n\nfunction variablesInDependentGroup(group: RdfMinusQueryGroup | RdfExistsQueryGroup): string[] {\n return unique([\n ...variablesInPatterns(group.patterns),\n ...variablesInValuesSources(group.values ?? []),\n ...variablesInUnionGroups(group.unions ?? []),\n ...((group.binds ?? []).map((bind) => bind.variable)),\n ...variablesBoundByNestedOptionalGroups(group.optional ?? []),\n ]);\n}\n\nfunction variablesBoundByNestedOptionalGroups(groups: Array<RdfQueryPattern[] | RdfOptionalQueryGroup>): string[] {\n return unique(groups.flatMap((group) => variablesBoundByOptionalGroup(normalizeOptionalGroupForAdapter(group))));\n}\n\nfunction variablesInValuesSources(sources: RdfValuesBindingSource[]): string[] {\n return unique(sources.flatMap((source) => source.variables));\n}\n\nfunction variablesInBindExpression(expression: RdfBindExpression): string[] {\n switch (expression.type) {\n case 'term':\n return [];\n case 'variable':\n case 'stringValue':\n case 'stringLength':\n return [expression.variable];\n case 'lowerCase':\n case 'upperCase':\n return variablesInBindExpression(expression.expression);\n case 'coalesce':\n return unique(expression.expressions.flatMap((item) => variablesInBindExpression(item)));\n case 'if':\n return unique([\n ...variablesInFilters(expression.condition),\n ...variablesInBindExpression(expression.then),\n ...variablesInBindExpression(expression.else),\n ]);\n case 'substring':\n return unique([\n ...variablesInBindExpression(expression.expression),\n ...variablesInBindExpression(expression.start),\n ...(expression.length ? variablesInBindExpression(expression.length) : []),\n ]);\n case 'concat':\n return unique(expression.expressions.flatMap((item) => variablesInBindExpression(item)));\n case 'iri':\n return variablesInBindExpression(expression.expression);\n case 'strdt':\n return unique([\n ...variablesInBindExpression(expression.lexical),\n ...variablesInBindExpression(expression.datatype),\n ]);\n case 'strlang':\n return unique([\n ...variablesInBindExpression(expression.lexical),\n ...variablesInBindExpression(expression.language),\n ]);\n default: {\n const exhaustive: never = expression;\n return exhaustive;\n }\n }\n}\n\nfunction variablesInFilters(filters: RdfQueryFilter[]): string[] {\n return unique(filters.flatMap((filter) => [\n filter.variable,\n filter.variable2,\n ].filter((value): value is string => Boolean(value))));\n}\n\nfunction assertOptionalBindVariablesSafe(\n rawOptionalGroup: RdfQueryPattern[] | RdfOptionalQueryGroup,\n outerBound: Set<string>,\n): void {\n const optionalGroup = normalizeOptionalGroupForAdapter(rawOptionalGroup);\n const optionalBound = new Set(outerBound);\n for (const variableName of variablesInPatterns(optionalGroup.patterns)) {\n optionalBound.add(variableName);\n }\n for (const variableName of variablesInValuesSources(optionalGroup.values ?? [])) {\n optionalBound.add(variableName);\n }\n for (const unionGroup of optionalGroup.unions ?? []) {\n for (const branch of unionGroup.branches) {\n const branchBound = new Set(optionalBound);\n for (const variableName of variablesInPatterns(branch.patterns)) {\n branchBound.add(variableName);\n }\n for (const variableName of variablesInValuesSources(branch.values ?? [])) {\n branchBound.add(variableName);\n }\n for (const variableName of variablesInUnionGroups(branch.unions ?? [])) {\n branchBound.add(variableName);\n }\n for (const bind of branch.binds ?? []) {\n assertBindDependenciesBound(bind, branchBound);\n branchBound.add(bind.variable);\n }\n for (const variableName of branchBound) {\n optionalBound.add(variableName);\n }\n }\n }\n for (const bind of optionalGroup.binds ?? []) {\n assertBindDependenciesBound(bind, optionalBound);\n optionalBound.add(bind.variable);\n }\n for (const nestedOptionalGroup of optionalGroup.optional ?? []) {\n assertOptionalBindVariablesSafe(nestedOptionalGroup, optionalBound);\n }\n}\n\nfunction assertOptionalDependentGroupsShareVariables(\n optionalGroup: RdfOptionalQueryGroup,\n outerBound: Set<string> = new Set(),\n): void {\n const bound = new Set(outerBound);\n for (const variableName of variablesBoundByOptionalGroup(optionalGroup)) {\n bound.add(variableName);\n }\n\n for (const minusGroup of optionalGroup.minus ?? []) {\n const shared = variablesInDependentGroup(minusGroup).some((variableName) => bound.has(variableName));\n if (!shared) {\n throw new UnsupportedSparqlQueryError('OPTIONAL MINUS must share a locally bound optional variable');\n }\n }\n for (const existsGroup of optionalGroup.exists ?? []) {\n const shared = variablesInDependentGroup(existsGroup).some((variableName) => bound.has(variableName));\n if (!shared) {\n throw new UnsupportedSparqlQueryError('OPTIONAL FILTER EXISTS must share a locally bound optional variable');\n }\n }\n for (const nestedOptionalGroup of optionalGroup.optional ?? []) {\n assertOptionalDependentGroupsShareVariables(normalizeOptionalGroupForAdapter(nestedOptionalGroup), bound);\n }\n}\n\nfunction assertBindDependenciesBound(bind: RdfQueryBind, bound: Set<string>): void {\n for (const dependency of variablesInBindExpression(bind.expression)) {\n if (!bound.has(dependency)) {\n throw new UnsupportedSparqlQueryError('OPTIONAL BIND dependency must be bound before use locally');\n }\n }\n}\n\nfunction queryBindsVariableInRequiredShape(query: RdfLocalQuery, variableName: string): boolean {\n if (patternsBindVariable(query.patterns, variableName)) {\n return true;\n }\n if ((query.unions?.length ?? 0) === 0) {\n return false;\n }\n return (query.unions ?? []).every((group) => (\n group.branches.every((branch) => unionBranchBindsVariable(branch, variableName))\n ));\n}\n\nfunction unionBranchBindsVariable(branch: RdfUnionQueryBranch, variableName: string): boolean {\n if (patternsBindVariable(branch.patterns, variableName)) {\n return true;\n }\n const unions = branch.unions ?? [];\n return unions.length > 0 && unions.every((group) => (\n group.branches.every((nestedBranch) => unionBranchBindsVariable(nestedBranch, variableName))\n ));\n}\n\nfunction normalizeOptionalGroupForAdapter(group: RdfQueryPattern[] | RdfOptionalQueryGroup): RdfOptionalQueryGroup {\n return Array.isArray(group) ? { patterns: group } : group;\n}\n"]}
|