aur-openlayers 1.0.1 → 1.0.2
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.
|
@@ -337,7 +337,8 @@ class InteractionManager {
|
|
|
337
337
|
continue;
|
|
338
338
|
}
|
|
339
339
|
const modify = interactions?.modify;
|
|
340
|
-
|
|
340
|
+
const hasNativeModify = this.nativeModifies.has(entry.descriptor.id);
|
|
341
|
+
if (!hasNativeModify && modify && this.isEnabled(modify.enabled)) {
|
|
341
342
|
const { items: candidates } = this.hitTest({
|
|
342
343
|
layerId: entry.descriptor.id,
|
|
343
344
|
layer: entry.layer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aur-openlayers.mjs","sources":["../../../projects/lib/src/lib/lib.service.ts","../../../projects/lib/src/lib/lib.component.ts","../../../projects/lib/src/lib/map-framework/public/types.ts","../../../projects/lib/src/lib/map-framework/runtime/scheduler.ts","../../../projects/lib/src/lib/map-framework/runtime/map-context.ts","../../../projects/lib/src/lib/map-framework/runtime/cluster-utils.ts","../../../projects/lib/src/lib/map-framework/runtime/fit-layer.utils.ts","../../../projects/lib/src/lib/map-framework/runtime/style/feature-states.ts","../../../projects/lib/src/lib/map-framework/runtime/interaction-manager.ts","../../../projects/lib/src/lib/map-framework/runtime/style/style-cache.ts","../../../projects/lib/src/lib/map-framework/runtime/style/style-pipeline.ts","../../../projects/lib/src/lib/map-framework/runtime/feature-registry.ts","../../../projects/lib/src/lib/map-framework/runtime/vector-layer-base.ts","../../../projects/lib/src/lib/map-framework/runtime/clustered-layer.ts","../../../projects/lib/src/lib/map-framework/runtime/plain-layer.ts","../../../projects/lib/src/lib/map-framework/runtime/popup-host.ts","../../../projects/lib/src/lib/map-framework/runtime/layer-manager.ts","../../../projects/lib/src/public-api.ts","../../../projects/lib/src/aur-openlayers.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-lib',\r\n imports: [],\r\n template: `\r\n <p>\r\n lib works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class LibComponent {\r\n\r\n}\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type MapBrowserEvent from 'ol/MapBrowserEvent';\r\nimport type {ModifyEvent} from 'ol/interaction/Modify';\r\nimport type OlMap from 'ol/Map';\r\nimport type Style from 'ol/style/Style';\r\nimport type {TranslateEvent} from 'ol/interaction/Translate';\r\n\r\n/**\r\n * Идентификатор состояния стиля, применяемого к фичам.\r\n *\r\n * Используйте строковые константы уровня проекта (например, `\"HOVER\"`).\r\n *\r\n * @example\r\n * const state: FeatureStyleState = 'SELECTED';\r\n */\r\nexport type FeatureStyleState = string;\r\n\r\n/**\r\n * Идентификатор доменной модели.\r\n *\r\n * @example\r\n * const id: Id = 'point-1';\r\n */\r\nexport type Id = string | number;\r\n\r\n/**\r\n * Значение или функция, которая его вычисляет.\r\n *\r\n * Полезно для ленивых вычислений и адаптации к контексту.\r\n *\r\n * @example\r\n * const width: MaybeFn<number, [zoom: number]> = (zoom) => zoom > 10 ? 3 : 1;\r\n */\r\nexport type MaybeFn<T, A extends any[] = []> = T | ((...args: A) => T);\r\n\r\n/**\r\n * Патч: либо частичный объект, либо функция, вычисляющая патч.\r\n *\r\n * Используется для частичных переопределений стиля.\r\n *\r\n * @example\r\n * const patch: Patch<{ color: string }> = { color: 'red' };\r\n */\r\nexport type Patch<T> = Partial<T> | ((prev: T) => Partial<T>);\r\n\r\n/**\r\n * Признак включённости: статическое значение или вычисляемая функция.\r\n *\r\n * @example\r\n * const enabled: Enabled = () => isEditMode;\r\n */\r\nexport type Enabled = boolean | (() => boolean);\r\n\r\n/**\r\n * Политика сброса (flush) для батчинга обновлений.\r\n *\r\n * @example\r\n * const policy: FlushPolicy = 'raf';\r\n */\r\nexport type FlushPolicy = 'microtask' | 'raf';\r\n\r\n/**\r\n * Опции батчинга для `MapContext.batch`.\r\n *\r\n * @example\r\n * ctx.batch(doWork, { policy: 'raf' });\r\n */\r\nexport type BatchOptions = {\r\n /** Политика сброса для конкретного батча. */\r\n policy?: FlushPolicy;\r\n};\r\n\r\n/**\r\n * Параметры текущего вида карты для LOD-стилей.\r\n *\r\n * @example\r\n * const view: StyleView = { resolution: 12.5, zoom: 8 };\r\n */\r\nexport type StyleView = {\r\n /** Текущее разрешение OpenLayers (`map.getView().getResolution()`). */\r\n resolution: number;\r\n /** Опциональный зум, если он вычисляется в реализации. */\r\n zoom?: number;\r\n};\r\n\r\n/**\r\n * Состояние фичи: одиночное или составное.\r\n *\r\n * @example\r\n * const state: FeatureState = ['HOVER', 'SELECTED'];\r\n */\r\nexport type FeatureState = FeatureStyleState | FeatureStyleState[];\r\n\r\n/**\r\n * Результат hit-test для текущего слоя: модель + соответствующая фича.\r\n *\r\n * @example\r\n * const item: HitItem<Model, Geometry> = { model, feature };\r\n */\r\nexport type HitItem<M, G extends Geometry> = {\r\n /** Доменных объект, связанный с фичей. */\r\n model: M;\r\n /** Фича OpenLayers. */\r\n feature: Feature<G>;\r\n};\r\n\r\n/**\r\n * Общие настройки для interactions (hover, click, translate и т.д.).\r\n *\r\n * @example\r\n * const base: InteractionBase = { enabled: true, propagation: 'stop' };\r\n */\r\nexport type InteractionBase = {\r\n /**\r\n * Включённость интеракции. Если не задано — считается включённой.\r\n */\r\n enabled?: Enabled;\r\n /**\r\n * UX: курсор для interaction на DOM-элементе карты.\r\n */\r\n cursor?: string;\r\n /**\r\n * Состояния, которые должны применяться при активности интеракции.\r\n * Если не задано — управление состояниями полностью на стороне пользователя.\r\n */\r\n state?: FeatureState;\r\n /**\r\n * Пропагация события на нижележащие слои, если текущий слой обработал событие.\r\n */\r\n propagation?: 'stop' | 'continue' | 'auto';\r\n};\r\n\r\n/**\r\n * Результат обработчика интеракции: `true` — событие обработано.\r\n *\r\n * @example\r\n * const handled: InteractionHandlerResult = true;\r\n */\r\nexport type InteractionHandlerResult = boolean | void;\r\n\r\n/**\r\n * Причина изменения модели, инициированного картой.\r\n *\r\n * @example\r\n * const reason: ModelChangeReason = 'translate';\r\n */\r\nexport type ModelChangeReason = 'mutate' | 'translate' | 'modify';\r\n\r\n/**\r\n * Изменение модели, инициированное картой.\r\n *\r\n * @example\r\n * onModelsChanged?.((changes) => console.log(changes.length));\r\n */\r\nexport type ModelChange<M> = {\r\n /** Предыдущая версия модели. */\r\n prev: M;\r\n /** Новая версия модели (immutable). */\r\n next: M;\r\n /** Причина изменения. */\r\n reason: ModelChangeReason;\r\n};\r\n\r\n/**\r\n * Причина внешнего изменения коллекции моделей слоя.\r\n *\r\n * @example\r\n * const reason: ModelsSetReason = 'add';\r\n */\r\nexport type ModelsSetReason = 'set' | 'add' | 'remove' | 'clear';\r\n\r\n/**\r\n * Ошибка, выбрасываемая при нарушении уникальности id моделей слоя.\r\n *\r\n * Возникает при попытке:\r\n * - добавить модель с уже существующим id;\r\n * - передать в setModels массив с дублирующимися id.\r\n */\r\nexport class DuplicateModelIdError extends Error {\r\n public override readonly name = 'DuplicateModelIdError';\r\n\r\n constructor(\r\n /** Дублирующийся id. */\r\n public readonly id: Id,\r\n /** Идентификатор слоя. */\r\n public readonly layerId: string,\r\n message?: string,\r\n ) {\r\n super(message ?? `Model with id \"${String(id)}\" already exists on layer (${layerId}).`);\r\n }\r\n}\r\n\r\n/**\r\n * Событие внешнего изменения коллекции моделей слоя.\r\n */\r\nexport type ModelsCollectionEvent<M> = {\r\n /** Снимок коллекции до изменения. */\r\n prev: readonly M[];\r\n /** Снимок коллекции после изменения. */\r\n next: readonly M[];\r\n /** Причина изменения. */\r\n reason: ModelsSetReason;\r\n /**\r\n * Опциональный diff.\r\n *\r\n * Гарантируется для reason = 'add' | 'remove' | 'clear'.\r\n * Может отсутствовать для reason = 'set'.\r\n */\r\n added?: readonly M[];\r\n removed?: readonly M[];\r\n};\r\n\r\n/**\r\n * API управления коллекцией моделей слоя.\r\n */\r\nexport interface VectorLayerCollectionApi<M> {\r\n /** Текущий иммутабельный снимок моделей слоя. */\r\n getAllModels: () => readonly M[];\r\n\r\n /**\r\n * Полная замена набора моделей.\r\n *\r\n * Требования:\r\n * - Все id в массиве должны быть уникальны.\r\n * - При обнаружении дубликата выбрасывается DuplicateModelIdError.\r\n */\r\n setModels: (models: readonly M[]) => void;\r\n\r\n /**\r\n * Подписка на внешние изменения коллекции моделей\r\n * (set / add / remove / clear).\r\n */\r\n onModelsCollectionChanged: (cb: (e: ModelsCollectionEvent<M>) => void) => Unsubscribe;\r\n\r\n /**\r\n * Добавляет модель в конец коллекции.\r\n *\r\n * @throws DuplicateModelIdError если модель с таким id уже существует.\r\n */\r\n addModel: (model: M) => void;\r\n\r\n /**\r\n * Добавляет несколько моделей в конец коллекции\r\n * (в порядке входного массива).\r\n *\r\n * @throws DuplicateModelIdError\r\n */\r\n addModels: (models: readonly M[]) => void;\r\n\r\n /**\r\n * Удаляет модели по id.\r\n *\r\n * @returns Количество реально удалённых моделей.\r\n */\r\n removeModelsById: (ids: readonly Id[]) => number;\r\n\r\n /**\r\n * Полностью очищает слой.\r\n */\r\n clear: () => void;\r\n}\r\n\r\nexport type MutateOptions = {\r\n /** Причина изменения (по умолчанию 'mutate'). */\r\n reason?: ModelChangeReason;\r\n /** Без оповещения подписчиков (по умолчанию false). */\r\n silent?: boolean;\r\n};\r\n\r\n/**\r\n * Паддинги для операций fit/center.\r\n *\r\n * @example\r\n * const padding: ViewFitPadding = { top: 16, right: 16, bottom: 16, left: 16 };\r\n */\r\nexport type ViewFitPadding =\r\n | { all: number }\r\n | { vertical: number; horizontal: number }\r\n | { top: number; right: number; bottom: number; left: number };\r\n\r\n/**\r\n * Опции fit/center операций.\r\n *\r\n * @example\r\n * layer.centerOnModel(1, { duration: 300, maxZoom: 18 });\r\n */\r\nexport type ViewFitOptions = {\r\n /** Паддинги вокруг области. */\r\n padding?: ViewFitPadding;\r\n /** Длительность анимации (мс). */\r\n duration?: number;\r\n /** Верхний предел увеличения. */\r\n maxZoom?: number;\r\n};\r\n\r\n/**\r\n * Функция отписки от событий.\r\n *\r\n * @example\r\n * const unsubscribe: Unsubscribe = onModelsChanged(() => {});\r\n */\r\nexport type Unsubscribe = () => void;\r\n\r\n/**\r\n * Публичный API слоя для бизнес-логики и других дескрипторов.\r\n *\r\n * @example\r\n * ctx.layers.points.mutate(id, (prev) => ({ ...prev, active: true }));\r\n */\r\nexport type VectorLayerApi<M, G extends Geometry> = VectorLayerCollectionApi<M> & {\r\n /** Запросить пересчёт слоя/стилей. */\r\n invalidate: () => void;\r\n /** Найти модель по фиче слоя. */\r\n getModelByFeature: (feature: Feature<G>) => M | undefined;\r\n /**\r\n * Иммутабельное обновление модели по id.\r\n * `update` обязан вернуть новый объект (или тот же для no-op).\r\n */\r\n mutate: (\r\n id: Id,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ) => void;\r\n\r\n /** Массовая мутация (опционально). */\r\n mutateMany?: (\r\n ids: Array<Id>,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ) => void;\r\n\r\n /**\r\n * Переключение кластеризации (если слой её поддерживает).\r\n */\r\n setClusteringEnabled?: (enabled: boolean) => void;\r\n /** Текущее состояние кластеризации. */\r\n isClusteringEnabled?: () => boolean;\r\n /**\r\n * Уведомления об изменениях моделей, инициированных картой.\r\n */\r\n onModelsChanged?: (cb: (changes: ModelChange<M>[]) => void) => Unsubscribe;\r\n\r\n /**\r\n * Центрирует карту на всех фичах слоя.\r\n */\r\n centerOnAllModels: (opts?: ViewFitOptions) => void;\r\n\r\n /**\r\n * Центрирует карту на одной фиче по id.\r\n */\r\n centerOnModel: (id: Id, opts?: ViewFitOptions) => void;\r\n\r\n /**\r\n * Центрирует карту на наборе фичей по списку id.\r\n */\r\n centerOnModels: (ids: ReadonlyArray<Id>, opts?: ViewFitOptions) => void;\r\n\r\n /**\r\n * Управление видимостью слоя.\r\n */\r\n setVisible: (visible: boolean) => void;\r\n\r\n /**\r\n * Текущее состояние видимости слоя.\r\n */\r\n isVisible: () => boolean;\r\n\r\n /**\r\n * Установить прозрачность слоя.\r\n */\r\n setOpacity: (opacity: number) => void;\r\n\r\n /**\r\n * Получить прозрачность слоя.\r\n */\r\n getOpacity: () => number;\r\n\r\n /**\r\n * Установить z-index слоя.\r\n */\r\n setZIndex: (z: number) => void;\r\n\r\n /**\r\n * Получить z-index слоя.\r\n */\r\n getZIndex: () => number | undefined;\r\n\r\n /**\r\n * Получить модель по id.\r\n */\r\n getModelById: (id: Id) => M | undefined;\r\n\r\n /**\r\n * Проверить наличие модели по id.\r\n */\r\n hasModel: (id: Id) => boolean;\r\n\r\n /**\r\n * Получить текущий снимок id моделей.\r\n */\r\n getAllModelIds: () => Array<Id>;\r\n\r\n /**\r\n * Применить состояния стиля к фичам по id.\r\n */\r\n setFeatureStates: (\r\n ids: Id | ReadonlyArray<Id>,\r\n states?: FeatureState,\r\n ) => void;\r\n\r\n /**\r\n * Сбросить состояния стиля у фич к состоянию по умолчанию.\r\n */\r\n clearFeatureStates: (ids: Id | ReadonlyArray<Id>) => void;\r\n};\r\n\r\n/**\r\n * Источник появления popup-элемента.\r\n *\r\n * @example\r\n * const source: PopupItemSource = 'feature';\r\n */\r\nexport type PopupItemSource = 'feature' | 'cluster' | 'interaction';\r\n\r\n/**\r\n * Элемент popup, отображаемый глобальным хостом.\r\n *\r\n * @example\r\n * const item: PopupItem<Model> = { model, content: 'Hello' };\r\n */\r\nexport type PopupItem<M> = {\r\n /** Модель, связанная с элементом popup. */\r\n model: M;\r\n /** Контент popup. */\r\n content: string | HTMLElement;\r\n /** CSS-класс для стилизации. */\r\n className?: string;\r\n /** Смещение popup относительно координаты. */\r\n offset?: number[];\r\n /** Ключ дедупликации элементов. */\r\n dedupKey?: Id;\r\n /** Приоритет сортировки (чем больше, тем выше). */\r\n priority?: number;\r\n /** Источник элемента. */\r\n source?: PopupItemSource;\r\n};\r\n\r\n/**\r\n * Контракт хоста попапов, агрегирующего элементы со всех слоёв.\r\n *\r\n * @example\r\n * ctx.popupHost?.set([item]);\r\n */\r\nexport interface PopupHostApi {\r\n /** Добавить элементы в текущий список. */\r\n push: (items: PopupItem<any>[]) => void;\r\n /** Заменить список элементов. */\r\n set: (items: PopupItem<any>[]) => void;\r\n /** Очистить список. */\r\n clear: () => void;\r\n /** Удалить элемент по ключу. */\r\n remove: (key: Id) => void;\r\n /** Получить текущие элементы. */\r\n getItems: () => PopupItem<any>[];\r\n /** Примонтировать popup-хост к DOM-узлу. */\r\n mount: (target: HTMLElement | (() => HTMLElement)) => void;\r\n /** Освободить ресурсы и отписки. */\r\n dispose: () => void;\r\n}\r\n\r\n/**\r\n * Минимальный контекст, доступный обработчикам взаимодействий.\r\n *\r\n * @example\r\n * controller.bind({ map, layers, batch });\r\n */\r\nexport type MapContext = {\r\n /** Экземпляр карты OpenLayers. */\r\n map: OlMap;\r\n /** Доступ к слоям по id (типизируется реализацией). */\r\n layers: Record<string, VectorLayerApi<any, any>>;\r\n /** Глобальный хост попапов, если включён. */\r\n popupHost?: PopupHostApi;\r\n /**\r\n * Батчинг для группировки mutate/invalidate.\r\n */\r\n batch: (fn: () => void, options?: BatchOptions) => void;\r\n};\r\n\r\n/**\r\n * Контроллер, который связывается с контекстом карты.\r\n *\r\n * @example\r\n * controller.bind(ctx);\r\n */\r\nexport type MapController = {\r\n /** Связать контроллер с контекстом. */\r\n bind: (ctx: MapContext) => void;\r\n /** Освободить ресурсы при отвязке (опционально). */\r\n unbind?: () => void;\r\n};\r\n\r\n/**\r\n * Описание фичи: геометрия, стиль, взаимодействия и popup.\r\n *\r\n * @example\r\n * const feature: FeatureDescriptor<Model, Geometry, StyleOpts> = { ... };\r\n */\r\nexport interface FeatureDescriptor<M, G extends Geometry, OPTS extends object> {\r\n /** Получение идентификатора модели. */\r\n id: (model: M) => Id;\r\n /** Синхронизация модели и геометрии. */\r\n geometry: {\r\n /** Преобразование модели в геометрию. */\r\n fromModel: (model: M) => G;\r\n /** Применение геометрии к модели (immutable). */\r\n applyGeometryToModel: (prev: M, geometry: G) => M;\r\n /** Хук после создания фичи. */\r\n onCreate?: (args: { feature: Feature<G>; model: M; ctx: MapContext }) => void;\r\n };\r\n /** Настройка стилей. */\r\n style: {\r\n /** Базовые параметры стиля с учётом LOD. */\r\n base: MaybeFn<OPTS, [model: M, view: StyleView]>;\r\n /** Патчи по состояниям (объединяются с base). */\r\n states?: Partial<\r\n Record<FeatureStyleState, MaybeFn<Patch<OPTS>, [model: M, view: StyleView]>>\r\n >;\r\n /** Рендер стиля по параметрам. */\r\n render: (opts: OPTS, view: StyleView) => Style | Style[];\r\n /** Опциональный ключ кеша. */\r\n cacheKey?: (opts: OPTS, view: StyleView) => string;\r\n /** Приоритет слияния состояний. */\r\n statePriority?: FeatureStyleState[];\r\n };\r\n /**\r\n * Интеракции слоя.\r\n * Поведение описано в `contract.md`.\r\n */\r\n interactions?: {\r\n /**\r\n * Обработка клика по карте в контексте слоя.\r\n * Коллбек вызывается даже при отсутствии фич под курсором\r\n * (в этом случае `items` будет пустым массивом).\r\n */\r\n click?: InteractionBase & {\r\n /** Переопределение hitTolerance для клика. */\r\n hitTolerance?: number;\r\n /** Коллбек клика по текущему слою. */\r\n onClick: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /**\r\n * Обработка двойного клика по карте в контексте слоя.\r\n * Коллбек вызывается даже при отсутствии фич под курсором\r\n * (в этом случае `items` будет пустым массивом).\r\n */\r\n doubleClick?: InteractionBase & {\r\n /** Переопределение hitTolerance для doubleClick. */\r\n hitTolerance?: number;\r\n /** Коллбек двойного клика по текущему слою. */\r\n onDoubleClick: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /**\r\n * Hover-взаимодействие: вход и выход указателя.\r\n */\r\n hover?: InteractionBase & {\r\n /** Переопределение hitTolerance для hover. */\r\n hitTolerance?: number;\r\n /** Указатель вошёл в фичи текущего слоя. */\r\n onEnter?: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n /** Указатель вышел из фич текущего слоя. */\r\n onLeave?: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /**\r\n * Select-взаимодействие: выбор фич и очистка выбора.\r\n */\r\n select?: InteractionBase & {\r\n /** Переопределение hitTolerance для select. */\r\n hitTolerance?: number;\r\n /**\r\n * Фильтрация/выбор целевых элементов select из кандидатов hit-test.\r\n *\r\n * Возврат `null/undefined` или пустого массива означает игнорирование select\r\n * для текущего клика (без `onSelect`, `onClear` и без изменения `state`).\r\n */\r\n pickTargets?: (args: {\r\n candidates: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => Array<HitItem<M, G>> | null | undefined;\r\n /** Выбраны фичи текущего слоя. */\r\n onSelect?: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n /** Очистка выбора текущего слоя. */\r\n onClear?: (args: {\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /** Перетаскивание фичи целиком. */\r\n translate?: InteractionBase & {\r\n /** Переопределение hitTolerance для translate. */\r\n hitTolerance?: number;\r\n /** Ограничение частоты обновлений при перемещении (мс). */\r\n moveThrottleMs?: number;\r\n /**\r\n * Выбор цели из списка кандидатов на старте.\r\n */\r\n pickTarget?: (args: {\r\n candidates: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: TranslateEvent;\r\n }) => HitItem<M, G> | null | undefined;\r\n /** Старт перемещения. */\r\n onStart?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: TranslateEvent;\r\n }) => InteractionHandlerResult;\r\n /** Перемещение в процессе. */\r\n onChange?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: TranslateEvent;\r\n }) => InteractionHandlerResult;\r\n /** Завершение перемещения. */\r\n onEnd?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: TranslateEvent;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /** Редактирование геометрии (вершины/сегменты). */\r\n modify?: InteractionBase & {\r\n /** Переопределение hitTolerance для modify. */\r\n hitTolerance?: number;\r\n /** Ограничение частоты обновлений при редактировании (мс). */\r\n moveThrottleMs?: number;\r\n /** Стиль хэндлов вершин нативного Modify. */\r\n vertexStyle?: Style | Style[];\r\n /**\r\n * Выбор цели из списка кандидатов на старте.\r\n */\r\n pickTarget?: (args: {\r\n candidates: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: ModifyEvent;\r\n }) => HitItem<M, G> | null | undefined;\r\n /** Старт редактирования. */\r\n onStart?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: ModifyEvent;\r\n }) => InteractionHandlerResult;\r\n /** Обновления в процессе. */\r\n onChange?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: ModifyEvent;\r\n }) => InteractionHandlerResult;\r\n /** Завершение редактирования. */\r\n onEnd?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: ModifyEvent;\r\n }) => InteractionHandlerResult;\r\n };\r\n };\r\n /**\r\n * Формирование элемента popup для фичи.\r\n */\r\n popup?: {\r\n /** Включённость popup на фичах. */\r\n enabled?: Enabled;\r\n /** Создание popup-элемента. */\r\n item: (args: {\r\n model: M;\r\n feature: Feature<G>;\r\n ctx: MapContext;\r\n event?: MapBrowserEvent<UIEvent>;\r\n }) => PopupItem<M>;\r\n };\r\n}\r\n\r\n/**\r\n * Конфигурация кластеризации слоя.\r\n *\r\n * @example\r\n * clustering: { enabledByDefault: true, clusterStyle: { render } }\r\n */\r\nexport type LayerClustering<M> = {\r\n /** Кластеризация включена по умолчанию. */\r\n enabledByDefault?: boolean;\r\n /** Параметры OL Cluster (px). */\r\n distance?: number;\r\n minDistance?: number;\r\n /** Стиль для cluster-feature. */\r\n clusterStyle: {\r\n /** Рендер стиля кластера. */\r\n render: (args: { models: M[]; size: number; view: StyleView }) => Style | Style[];\r\n /** Опциональный ключ кеша. */\r\n cacheKey?: (args: { models: M[]; size: number; view: StyleView }) => string;\r\n };\r\n /** Popup для кластера. */\r\n popup?: {\r\n /** Включённость popup на кластерах. */\r\n enabled?: Enabled;\r\n /** Создание popup-элемента для кластера. */\r\n item: (args: {\r\n models: M[];\r\n size: number;\r\n ctx: MapContext;\r\n event?: MapBrowserEvent<UIEvent>;\r\n }) => PopupItem<M>;\r\n /** Лимит элементов для кластера (переопределяет popupHost.maxItems). */\r\n maxItems?: number;\r\n };\r\n /**\r\n * Раскрытие кластера при клике.\r\n */\r\n expandOnClick?: {\r\n /** Режим раскрытия. */\r\n mode?: 'zoomToExtent' | 'zoomIn';\r\n /** Паддинги для fit(extent). */\r\n padding?: ViewFitPadding;\r\n /** Максимальный зум при fit/zoomIn. */\r\n maxZoom?: number;\r\n /** Шаг увеличения для zoomIn. */\r\n zoomDelta?: number;\r\n /** Длительность анимации (мс). */\r\n durationMs?: number;\r\n /** Хук после раскрытия кластера. */\r\n onExpanded?: (args: { models: M[]; ctx: MapContext }) => void;\r\n };\r\n};\r\n\r\n/**\r\n * Дескриптор слоя (тип модели + стиль + интеракции).\r\n *\r\n * @example\r\n * const layer: VectorLayerDescriptor<Model, Geometry, StyleOpts> = { id: 'points', feature };\r\n */\r\nexport interface VectorLayerDescriptor<\r\n M,\r\n G extends Geometry,\r\n OPTS extends object,\r\n ID extends string = string\r\n> {\r\n /** Идентификатор слоя. */\r\n id: ID;\r\n /** Человекочитаемое имя слоя. */\r\n title?: string;\r\n /** z-index слоя. */\r\n zIndex?: number;\r\n /** Видимость слоя по умолчанию. */\r\n visibleByDefault?: boolean;\r\n /** Описание фич и поведения слоя. */\r\n feature: FeatureDescriptor<M, G, OPTS>;\r\n /** Кластеризация слоя (опционально). */\r\n clustering?: LayerClustering<M>;\r\n}\r\n\r\n/**\r\n * Схема карты: слои + общие настройки.\r\n *\r\n * @example\r\n * const schema: MapSchema<typeof layers> = { layers };\r\n */\r\nexport interface MapSchema<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> {\r\n /** Список слоёв. */\r\n layers: Layers;\r\n /** Глобальные опции карты. */\r\n options?: {\r\n /** Глобальное значение hitTolerance по умолчанию. */\r\n hitTolerance?: number;\r\n /** Параметры планировщика invalidate/changed. */\r\n scheduler?: {\r\n /** Политика flush по умолчанию. */\r\n policy?: FlushPolicy;\r\n /** Политика flush для translate/modify. */\r\n interactionPolicy?: FlushPolicy;\r\n };\r\n /**\r\n * Глобальный popup-хост.\r\n */\r\n popupHost?: {\r\n /** Включённость popup-хоста. */\r\n enabled?: Enabled;\r\n /** Автоматический режим показа. */\r\n autoMode?: 'off' | 'click' | 'hover';\r\n /** Максимум элементов в списке. */\r\n maxItems?: number;\r\n /** Сортировка popup-элементов. */\r\n sort?: (a: PopupItem<any>, b: PopupItem<any>) => number;\r\n /** Куда монтировать popup-хост. */\r\n mount?: HTMLElement | (() => HTMLElement);\r\n /** Стек поверх других popup-хостов. */\r\n stack?: 'stop' | 'continue';\r\n };\r\n };\r\n}\r\n","import type { BatchOptions, FlushPolicy } from '../public/types';\r\n\r\ntype TaskKey = unknown;\r\n\r\nexport class FlushScheduler {\r\n private readonly queue = new Map<TaskKey, () => void>();\r\n private pendingPolicy: FlushPolicy | null = null;\r\n private scheduledToken = 0;\r\n private rafId: number | null = null;\r\n private batchDepth = 0;\r\n private readonly policyStack: FlushPolicy[] = [];\r\n\r\n constructor(private readonly defaultPolicy: FlushPolicy = 'microtask') {}\r\n\r\n batch(fn: () => void, options?: BatchOptions): void {\r\n if (options?.policy) {\r\n this.policyStack.push(options.policy);\r\n }\r\n this.batchDepth += 1;\r\n try {\r\n fn();\r\n } finally {\r\n this.batchDepth = Math.max(0, this.batchDepth - 1);\r\n if (options?.policy) {\r\n this.policyStack.pop();\r\n }\r\n if (this.batchDepth === 0 && (this.pendingPolicy !== null || this.queue.size > 0)) {\r\n const policy = this.pendingPolicy ?? this.currentPolicy();\r\n this.pendingPolicy = policy;\r\n this.scheduleFlush(policy);\r\n }\r\n }\r\n }\r\n\r\n schedule(key: TaskKey, task: () => void, policy?: FlushPolicy): void {\r\n this.queue.set(key, task);\r\n this.requestFlush(policy);\r\n }\r\n\r\n private requestFlush(policy?: FlushPolicy): void {\r\n const desired = policy ?? this.currentPolicy();\r\n if (this.batchDepth > 0) {\r\n this.pendingPolicy = this.combinePolicies(this.pendingPolicy, desired);\r\n return;\r\n }\r\n\r\n if (this.pendingPolicy) {\r\n if (this.shouldUpgradePolicy(this.pendingPolicy, desired)) {\r\n this.pendingPolicy = desired;\r\n this.scheduleFlush(desired);\r\n }\r\n return;\r\n }\r\n\r\n this.pendingPolicy = desired;\r\n this.scheduleFlush(desired);\r\n }\r\n\r\n private scheduleFlush(policy: FlushPolicy): void {\r\n const token = ++this.scheduledToken;\r\n if (policy === 'raf') {\r\n if (this.rafId !== null) {\r\n cancelAnimationFrame(this.rafId);\r\n }\r\n this.rafId = requestAnimationFrame(() => this.flush('raf', token));\r\n return;\r\n }\r\n\r\n queueMicrotask(() => this.flush('microtask', token));\r\n }\r\n\r\n private flush(policy: FlushPolicy, token: number): void {\r\n if (token !== this.scheduledToken || this.pendingPolicy !== policy) {\r\n return;\r\n }\r\n this.pendingPolicy = null;\r\n if (policy === 'raf') {\r\n this.rafId = null;\r\n }\r\n const tasks = Array.from(this.queue.values());\r\n this.queue.clear();\r\n tasks.forEach((task) => task());\r\n }\r\n\r\n private currentPolicy(): FlushPolicy {\r\n if (this.policyStack.length > 0) {\r\n return this.policyStack[this.policyStack.length - 1];\r\n }\r\n return this.defaultPolicy;\r\n }\r\n\r\n private combinePolicies(\r\n current: FlushPolicy | null,\r\n next: FlushPolicy,\r\n ): FlushPolicy | null {\r\n if (!current) {\r\n return next;\r\n }\r\n return current === 'raf' || next === 'raf' ? 'raf' : 'microtask';\r\n }\r\n\r\n private shouldUpgradePolicy(current: FlushPolicy, next: FlushPolicy): boolean {\r\n return current === 'microtask' && next === 'raf';\r\n }\r\n}\r\n","import type OlMap from 'ol/Map';\r\n\r\nimport type { BatchOptions, MapContext, PopupHostApi, VectorLayerApi } from '../public/types';\r\nimport { FlushScheduler } from './scheduler';\r\n\r\nexport const createMapContext = (\r\n map: OlMap,\r\n layers: Record<string, VectorLayerApi<any, any>>,\r\n popupHost?: PopupHostApi,\r\n scheduler: FlushScheduler = new FlushScheduler(),\r\n): MapContext => {\r\n return {\r\n map,\r\n layers,\r\n popupHost,\r\n batch: (fn: () => void, options?: BatchOptions) => scheduler.batch(fn, options),\r\n };\r\n};\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nconst CLUSTER_FEATURES_KEY = 'features';\r\n\r\nexport const getClusterFeatures = (\r\n feature: Feature<Geometry>,\r\n): Array<Feature<Geometry>> | null => {\r\n const features = feature.get(CLUSTER_FEATURES_KEY);\r\n if (!Array.isArray(features)) {\r\n return null;\r\n }\r\n const items = features.filter((item): item is Feature<Geometry> => {\r\n if (!item || typeof item !== 'object') {\r\n return false;\r\n }\r\n const candidate = item as { get?: unknown; getGeometry?: unknown };\r\n return typeof candidate.get === 'function' && typeof candidate.getGeometry === 'function';\r\n });\r\n if (items.length === 0) {\r\n return null;\r\n }\r\n return items;\r\n};\r\n","import type {ViewFitOptions, ViewFitPadding} from '../public/types';\r\n\r\n/**\r\n * Default padding for View#fit in pixels.\r\n * Order: [top, right, bottom, left]\r\n */\r\nconst DEFAULT_OL_PADDING: [number, number, number, number] = [64, 64, 64, 64];\r\nconst DEFAULT_FIT_DURATION = 500;\r\n\r\nexport function toOlPadding(\r\n p?: ViewFitPadding,\r\n fallback: [number, number, number, number] | undefined = DEFAULT_OL_PADDING,\r\n): [number, number, number, number] | undefined {\r\n if (!p) {\r\n return fallback;\r\n }\r\n\r\n if ('all' in p) {\r\n const a = p.all;\r\n return [a, a, a, a];\r\n }\r\n\r\n if ('vertical' in p && 'horizontal' in p) {\r\n return [p.vertical, p.horizontal, p.vertical, p.horizontal];\r\n }\r\n\r\n return [p.top, p.right, p.bottom, p.left];\r\n}\r\n\r\nexport function toOlFitOptions(opts?: ViewFitOptions) {\r\n const padding = toOlPadding(opts?.padding) ?? DEFAULT_OL_PADDING;\r\n const duration = opts?.duration ?? DEFAULT_FIT_DURATION;\r\n\r\n // OL View#fit options are a plain object; keep it minimal & typed-friendly\r\n const fitOpts: any = {padding, duration};\r\n if (opts?.maxZoom != null) {\r\n fitOpts.maxZoom = opts.maxZoom;\r\n }\r\n return fitOpts;\r\n}\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nconst STATES_KEY = '__mff_states__';\r\n\r\nexport const getFeatureStates = (feature: Feature<Geometry>): string[] => {\r\n const states = feature.get(STATES_KEY);\r\n if (Array.isArray(states)) {\r\n return states;\r\n }\r\n if (typeof states === 'string') {\r\n return [states];\r\n }\r\n return [];\r\n};\r\n\r\nexport const setFeatureStates = (feature: Feature<Geometry>, states: string[]): void => {\r\n feature.set(STATES_KEY, states);\r\n};\r\n\r\nexport const clearFeatureStates = (feature: Feature<Geometry>): void => {\r\n feature.set(STATES_KEY, []);\r\n};\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type MapBrowserEvent from 'ol/MapBrowserEvent';\r\nimport type OlMap from 'ol/Map';\r\nimport type VectorLayer from 'ol/layer/Vector';\r\nimport Collection from 'ol/Collection';\r\nimport DragPan from 'ol/interaction/DragPan';\r\nimport Modify from 'ol/interaction/Modify';\r\nimport type { ModifyEvent } from 'ol/interaction/Modify';\r\nimport type { TranslateEvent } from 'ol/interaction/Translate';\r\nimport ClusterSource from 'ol/source/Cluster';\r\nimport type VectorSource from 'ol/source/Vector';\r\nimport type { EventsKey } from 'ol/events';\r\nimport * as Observable from 'ol/Observable';\r\nimport { createEmpty, extend, isEmpty } from 'ol/extent';\r\n\r\nimport type {\r\n FeatureState,\r\n HitItem,\r\n InteractionBase,\r\n InteractionHandlerResult,\r\n MapContext,\r\n MapSchema,\r\n PopupItem,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n} from '../public/types';\r\nimport { getClusterFeatures } from './cluster-utils';\r\nimport { toOlPadding } from './fit-layer.utils';\r\nimport { getFeatureStates, setFeatureStates } from './style/feature-states';\r\n\r\ntype LayerEntry = {\r\n descriptor: VectorLayerDescriptor<any, any, any, any>;\r\n layer: VectorLayer;\r\n api: VectorLayerApi<any, any>;\r\n index: number;\r\n};\r\n\r\ntype InteractionEnabledState = {\r\n click: boolean;\r\n doubleClick: boolean;\r\n hover: boolean;\r\n select: boolean;\r\n translate: boolean;\r\n modify: boolean;\r\n};\r\n\r\ntype ListenerName =\r\n | 'pointermove'\r\n | 'singleclick'\r\n | 'dblclick'\r\n | 'pointerdown'\r\n | 'pointerdrag'\r\n | 'pointerup';\r\n\r\ntype ActiveTranslate = {\r\n targetKey: string | number;\r\n startCoordinate: [number, number];\r\n lastCoordinate: [number, number];\r\n lastItem?: HitItem<any, any>;\r\n moveThrottleMs: number;\r\n translate: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['translate']\r\n >;\r\n pendingEvent?: MapBrowserEvent<UIEvent>;\r\n throttleTimer?: ReturnType<typeof setTimeout>;\r\n lastHandled?: boolean;\r\n};\r\n\r\ntype ActiveModify = {\r\n targetKey: string | number;\r\n lastItem?: HitItem<any, any>;\r\n moveThrottleMs: number;\r\n modify: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['modify']\r\n >;\r\n pendingEvent?: MapBrowserEvent<UIEvent>;\r\n throttleTimer?: ReturnType<typeof setTimeout>;\r\n lastHandled?: boolean;\r\n};\r\n\r\ntype NativeModifyEntry = {\r\n interaction: Modify;\r\n keys: EventsKey[];\r\n};\r\n\r\ntype ModifyInteraction = NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['modify']\r\n>;\r\n\r\nexport type HitTestArgs = {\r\n layerId: string;\r\n layer: VectorLayer;\r\n api: VectorLayerApi<any, any>;\r\n descriptor: VectorLayerDescriptor<any, any, any, any>;\r\n event: MapBrowserEvent<UIEvent>;\r\n hitTolerance: number;\r\n};\r\n\r\nexport type ClusterHit = {\r\n feature: Feature<Geometry>;\r\n features: Array<Feature<Geometry>>;\r\n size: number;\r\n};\r\n\r\nexport type HitTestResult = {\r\n items: Array<HitItem<any, any>>;\r\n cluster?: ClusterHit;\r\n};\r\n\r\nexport type HitTestFn = (args: HitTestArgs) => HitTestResult;\r\n\r\nexport type InteractionManagerOptions<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> = {\r\n ctx: MapContext;\r\n map: OlMap;\r\n schema: MapSchema<Layers>;\r\n layers: Record<string, VectorLayer>;\r\n apis: Record<string, VectorLayerApi<any, any>>;\r\n hitTest?: HitTestFn;\r\n};\r\n\r\nexport class InteractionManager<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> {\r\n private readonly ctx: MapContext;\r\n private readonly map: OlMap;\r\n private readonly schema: MapSchema<Layers>;\r\n private readonly layers: Record<string, VectorLayer>;\r\n private readonly apis: Record<string, VectorLayerApi<any, any>>;\r\n private readonly hitTest: HitTestFn;\r\n private readonly hoverItems = new Map<string, Map<string | number, HitItem<any, any>>>();\r\n private readonly selectedItems = new Map<string, Map<string | number, HitItem<any, any>>>();\r\n private readonly activeTranslates = new Map<string, ActiveTranslate>();\r\n private readonly activeModifies = new Map<string, ActiveModify>();\r\n private readonly nativeModifies = new Map<string, NativeModifyEntry>();\r\n private readonly popupStack: 'stop' | 'continue';\r\n private readonly listenerKeys = new Map<ListenerName, EventsKey>();\r\n private readonly enabledState = new Map<string, InteractionEnabledState>();\r\n private dragPanLocks = 0;\r\n private dragPanStates?: Map<DragPan, boolean>;\r\n private currentCursor?: string;\r\n\r\n constructor(options: InteractionManagerOptions<Layers>) {\r\n this.ctx = options.ctx;\r\n this.map = options.map;\r\n this.schema = options.schema;\r\n this.layers = options.layers;\r\n this.apis = options.apis;\r\n this.hitTest = options.hitTest ?? this.createDefaultHitTest();\r\n this.popupStack = this.schema.options?.popupHost?.stack ?? 'stop';\r\n this.refreshEnabled();\r\n }\r\n\r\n refreshEnabled(): void {\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n if (!popupEnabled) {\r\n this.ctx.popupHost?.clear();\r\n }\r\n\r\n const nextState = new Map<string, InteractionEnabledState>();\r\n this.schema.layers.forEach((descriptor) => {\r\n const interactions = descriptor.feature.interactions;\r\n nextState.set(descriptor.id, {\r\n click: !!interactions?.click && this.isEnabled(interactions.click.enabled),\r\n doubleClick:\r\n !!interactions?.doubleClick && this.isEnabled(interactions.doubleClick.enabled),\r\n hover: !!interactions?.hover && this.isEnabled(interactions.hover.enabled),\r\n select: !!interactions?.select && this.isEnabled(interactions.select.enabled),\r\n translate: !!interactions?.translate && this.isEnabled(interactions.translate.enabled),\r\n modify: !!interactions?.modify && this.isEnabled(interactions.modify.enabled),\r\n });\r\n });\r\n\r\n this.syncNativeModify(nextState);\r\n this.applyDisabledCleanup(nextState);\r\n this.enabledState.clear();\r\n nextState.forEach((value, key) => this.enabledState.set(key, value));\r\n this.syncListeners(popupEnabled);\r\n }\r\n\r\n handlePointerDown(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerdown')) {\r\n return;\r\n }\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const interactions = entry.descriptor.feature.interactions;\r\n\r\n const translate = interactions?.translate;\r\n if (translate && this.isEnabled(translate.enabled)) {\r\n const { items: candidates } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(translate.hitTolerance),\r\n });\r\n if (candidates.length > 0) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n event.coordinate as [number, number],\r\n 'translatestart',\r\n candidates,\r\n );\r\n\r\n let target: HitItem<any, any> | null | undefined;\r\n if (translate.pickTarget) {\r\n target = translate.pickTarget({ candidates, ctx: this.ctx, event: translateEvent });\r\n } else {\r\n target = candidates[0];\r\n }\r\n\r\n if (target) {\r\n const targetKey = entry.descriptor.feature.id(target.model);\r\n const resolved = this.resolveTarget(entry, targetKey);\r\n if (resolved) {\r\n const active: ActiveTranslate = {\r\n targetKey,\r\n startCoordinate: event.coordinate as [number, number],\r\n lastCoordinate: event.coordinate as [number, number],\r\n lastItem: resolved,\r\n moveThrottleMs: translate.moveThrottleMs ?? 0,\r\n translate,\r\n };\r\n this.activeTranslates.set(entry.descriptor.id, active);\r\n this.lockDragPan();\r\n\r\n if (translate.state) {\r\n this.applyState([resolved], translate.state, true);\r\n }\r\n\r\n const handled = translate.onStart\r\n ? this.isHandled(\r\n translate.onStart({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n )\r\n : false;\r\n active.lastHandled = handled;\r\n\r\n if (handled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.activeTranslates.has(entry.descriptor.id)) {\r\n continue;\r\n }\r\n\r\n const modify = interactions?.modify;\r\n if (modify && this.isEnabled(modify.enabled)) {\r\n const { items: candidates } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(modify.hitTolerance),\r\n });\r\n\r\n if (candidates.length > 0) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifystart', candidates);\r\n\r\n let target: HitItem<any, any> | null | undefined;\r\n if (modify.pickTarget) {\r\n target = modify.pickTarget({ candidates, ctx: this.ctx, event: modifyEvent });\r\n } else {\r\n target = candidates[0];\r\n }\r\n\r\n if (target) {\r\n const targetKey = entry.descriptor.feature.id(target.model);\r\n const resolved = this.resolveTarget(entry, targetKey);\r\n if (resolved) {\r\n const active: ActiveModify = {\r\n targetKey,\r\n lastItem: resolved,\r\n moveThrottleMs: modify.moveThrottleMs ?? 0,\r\n modify,\r\n };\r\n this.activeModifies.set(entry.descriptor.id, active);\r\n this.lockDragPan();\r\n\r\n if (modify.state) {\r\n this.applyState([resolved], modify.state, true);\r\n }\r\n\r\n const handled = modify.onStart\r\n ? this.isHandled(\r\n modify.onStart({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n )\r\n : false;\r\n active.lastHandled = handled;\r\n\r\n if (handled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.activeModifies.has(entry.descriptor.id)) {\r\n continue;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerDrag(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerdrag')) {\r\n return;\r\n }\r\n if (this.activeTranslates.size === 0 && this.activeModifies.size === 0) {\r\n return;\r\n }\r\n for (const entry of this.getOrderedLayers()) {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (!active) {\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (!activeModify) {\r\n continue;\r\n }\r\n const modify = activeModify.modify;\r\n const execute = () => this.applyModifyChange(entry, activeModify, event);\r\n\r\n if (activeModify.moveThrottleMs > 0) {\r\n if (!activeModify.throttleTimer) {\r\n execute();\r\n activeModify.throttleTimer = setTimeout(() => {\r\n activeModify.throttleTimer = undefined;\r\n if (activeModify.pendingEvent) {\r\n const pending = activeModify.pendingEvent;\r\n activeModify.pendingEvent = undefined;\r\n this.applyModifyChange(entry, activeModify, pending);\r\n }\r\n }, activeModify.moveThrottleMs);\r\n } else {\r\n activeModify.pendingEvent = event;\r\n }\r\n } else {\r\n execute();\r\n }\r\n\r\n if (activeModify.lastHandled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n continue;\r\n }\r\n const translate = active.translate;\r\n const execute = () => this.applyTranslateMove(entry, active, event);\r\n\r\n if (active.moveThrottleMs > 0) {\r\n if (!active.throttleTimer) {\r\n execute();\r\n active.throttleTimer = setTimeout(() => {\r\n active.throttleTimer = undefined;\r\n if (active.pendingEvent) {\r\n const pending = active.pendingEvent;\r\n active.pendingEvent = undefined;\r\n this.applyTranslateMove(entry, active, pending);\r\n }\r\n }, active.moveThrottleMs);\r\n } else {\r\n active.pendingEvent = event;\r\n }\r\n } else {\r\n execute();\r\n }\r\n\r\n if (active.lastHandled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerUp(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerup')) {\r\n return;\r\n }\r\n if (this.activeTranslates.size === 0 && this.activeModifies.size === 0) {\r\n return;\r\n }\r\n for (const entry of this.getOrderedLayers()) {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (active) {\r\n const translate = active.translate;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n }\r\n if (active.pendingEvent) {\r\n const pending = active.pendingEvent;\r\n active.pendingEvent = undefined;\r\n this.applyTranslateMove(entry, active, pending);\r\n }\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (resolved && translate.onEnd) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n active.startCoordinate,\r\n 'translateend',\r\n [resolved],\r\n );\r\n active.lastHandled = this.isHandled(\r\n translate.onEnd({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n\r\n this.finishTranslate(entry, active, resolved);\r\n\r\n if (active.lastHandled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n continue;\r\n }\r\n\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (!activeModify) {\r\n continue;\r\n }\r\n const modify = activeModify.modify;\r\n if (activeModify.throttleTimer) {\r\n clearTimeout(activeModify.throttleTimer);\r\n activeModify.throttleTimer = undefined;\r\n }\r\n if (activeModify.pendingEvent) {\r\n const pending = activeModify.pendingEvent;\r\n activeModify.pendingEvent = undefined;\r\n this.applyModifyChange(entry, activeModify, pending);\r\n }\r\n const resolved = this.resolveTarget(entry, activeModify.targetKey);\r\n if (resolved && modify.onEnd) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifyend', [resolved]);\r\n activeModify.lastHandled = this.isHandled(\r\n modify.onEnd({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n );\r\n } else {\r\n activeModify.lastHandled = false;\r\n }\r\n\r\n this.finishModify(entry, activeModify, resolved);\r\n\r\n if (activeModify.lastHandled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerMove(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointermove')) {\r\n return;\r\n }\r\n const popupHost = this.ctx.popupHost;\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const autoHover = autoMode === 'hover';\r\n const popupItems: Array<PopupItem<any>> = [];\r\n let popupStopped = false;\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const hover = entry.descriptor.feature.interactions?.hover;\r\n const hoverEnabled = !!hover && this.isEnabled(hover.enabled);\r\n if (!hoverEnabled && !autoHover) {\r\n continue;\r\n }\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(hoverEnabled ? hover!.hitTolerance : undefined),\r\n });\r\n\r\n if (hoverEnabled) {\r\n const handled = this.processHover(entry, hover!, hitResult.items, event);\r\n if (handled && this.shouldStopPropagation(hover!)) {\r\n break;\r\n }\r\n }\r\n\r\n if (autoHover && popupHost && !popupStopped) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n }\r\n if (autoHover && popupHost) {\r\n popupHost.set(popupItems);\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handleSingleClick(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('singleclick')) {\r\n return;\r\n }\r\n const popupHost = this.ctx.popupHost;\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const autoClick = autoMode === 'click';\r\n const popupItems: Array<PopupItem<any>> = [];\r\n let popupStopped = false;\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const select = entry.descriptor.feature.interactions?.select;\r\n const click = entry.descriptor.feature.interactions?.click;\r\n const selectEnabled = select && this.isEnabled(select.enabled);\r\n const clickEnabled = click && this.isEnabled(click.enabled);\r\n const clusteringEnabled = !!entry.descriptor.clustering && !!entry.api.isClusteringEnabled?.();\r\n if (!selectEnabled && !clickEnabled && !clusteringEnabled && !autoClick) {\r\n continue;\r\n }\r\n\r\n const tolerances = [\r\n selectEnabled ? select?.hitTolerance : undefined,\r\n clickEnabled ? click?.hitTolerance : undefined,\r\n ].filter((value): value is number => value !== undefined);\r\n const hitTolerance =\r\n tolerances.length > 0 ? Math.max(...tolerances) : this.getHitTolerance(undefined);\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance,\r\n });\r\n\r\n if (clusteringEnabled && hitResult.cluster) {\r\n if (autoClick && popupHost && !popupStopped) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n const handled = this.handleClusterClick(entry, hitResult.cluster, event, !autoClick);\r\n if (handled) {\r\n if (this.shouldStopClusterPropagation()) {\r\n break;\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n if (selectEnabled || clickEnabled) {\r\n const selectItems = selectEnabled ? hitResult.items : [];\r\n const clickItems = clickEnabled ? hitResult.items : [];\r\n\r\n const selectHandled = selectEnabled\r\n ? this.processSelect(entry, select!, selectItems, event)\r\n : false;\r\n const selectStops = selectHandled && this.shouldStopPropagation(select!);\r\n const allowClick =\r\n !selectHandled || (selectEnabled && this.shouldContinuePropagation(select!));\r\n\r\n if (clickEnabled && allowClick) {\r\n const clickHandled = this.processClick(entry, click!, clickItems, event);\r\n if (clickHandled && this.shouldStopPropagation(click!)) {\r\n break;\r\n }\r\n }\r\n\r\n if (selectStops) {\r\n break;\r\n }\r\n }\r\n\r\n if (autoClick && popupHost && !popupStopped && !(clusteringEnabled && hitResult.cluster)) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n }\r\n if (autoClick && popupHost) {\r\n popupHost.set(popupItems);\r\n }\r\n }\r\n\r\n handleDoubleClick(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('dblclick')) {\r\n return;\r\n }\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const doubleClick = entry.descriptor.feature.interactions?.doubleClick;\r\n if (!doubleClick || !this.isEnabled(doubleClick.enabled)) {\r\n continue;\r\n }\r\n\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(doubleClick.hitTolerance),\r\n });\r\n\r\n if (entry.descriptor.clustering && entry.api.isClusteringEnabled?.() && hitResult.cluster) {\r\n continue;\r\n }\r\n const { items } = hitResult;\r\n\r\n const handled = this.processDoubleClick(entry, doubleClick, items, event);\r\n if (handled && this.shouldStopPropagation(doubleClick)) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private runInteractionMutation(fn: () => void): void {\r\n const policy = this.schema.options?.scheduler?.interactionPolicy;\r\n if (policy) {\r\n this.ctx.batch(fn, { policy });\r\n return;\r\n }\r\n fn();\r\n }\r\n\r\n private syncListeners(popupEnabled: boolean): void {\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const needsHover = autoMode === 'hover';\r\n const needsClick = autoMode === 'click';\r\n\r\n let needsPointerMove = needsHover;\r\n let needsSingleClick = needsClick;\r\n let needsDoubleClick = false;\r\n let needsPointerDown = false;\r\n let needsPointerDrag = false;\r\n let needsPointerUp = false;\r\n\r\n this.schema.layers.forEach((descriptor) => {\r\n const state = this.enabledState.get(descriptor.id);\r\n const interactions = descriptor.feature.interactions;\r\n const maybeHover = this.isMaybeEnabled(interactions?.hover?.enabled);\r\n const maybeClick = this.isMaybeEnabled(interactions?.click?.enabled);\r\n const maybeSelect = this.isMaybeEnabled(interactions?.select?.enabled);\r\n const maybeDoubleClick = this.isMaybeEnabled(interactions?.doubleClick?.enabled);\r\n const maybeTranslate = this.isMaybeEnabled(interactions?.translate?.enabled);\r\n const maybeModify = this.isMaybeEnabled(interactions?.modify?.enabled);\r\n\r\n if (state?.hover || maybeHover) {\r\n needsPointerMove = true;\r\n }\r\n if (state?.click || state?.select || maybeClick || maybeSelect) {\r\n needsSingleClick = true;\r\n }\r\n if (state?.doubleClick || maybeDoubleClick) {\r\n needsDoubleClick = true;\r\n }\r\n if (state?.translate || state?.modify || maybeTranslate || maybeModify) {\r\n needsPointerDown = true;\r\n needsPointerDrag = true;\r\n needsPointerUp = true;\r\n }\r\n if (interactions && this.hasCursorInteraction(interactions)) {\r\n needsPointerMove = true;\r\n }\r\n if (\r\n descriptor.clustering &&\r\n (descriptor.clustering.expandOnClick || descriptor.clustering.popup)\r\n ) {\r\n needsSingleClick = true;\r\n }\r\n });\r\n\r\n this.toggleListener('pointermove', needsPointerMove, (event) => this.handlePointerMove(event));\r\n this.toggleListener('singleclick', needsSingleClick, (event) =>\r\n this.handleSingleClick(event),\r\n );\r\n this.toggleListener('dblclick', needsDoubleClick, (event) => this.handleDoubleClick(event));\r\n this.toggleListener('pointerdown', needsPointerDown, (event) => this.handlePointerDown(event));\r\n this.toggleListener('pointerdrag', needsPointerDrag, (event) => this.handlePointerDrag(event));\r\n this.toggleListener('pointerup', needsPointerUp, (event) => this.handlePointerUp(event));\r\n }\r\n\r\n private syncNativeModify(nextState: Map<string, InteractionEnabledState>): void {\r\n const handled = new Set<string>();\r\n\r\n this.schema.layers.forEach((descriptor) => {\r\n const interactions = descriptor.feature.interactions;\r\n const modify = interactions?.modify;\r\n const enabled = nextState.get(descriptor.id)?.modify ?? false;\r\n const shouldEnable = !!modify && enabled;\r\n if (!shouldEnable) {\r\n return;\r\n }\r\n const entry = this.getLayerEntry(descriptor.id);\r\n if (!entry) {\r\n return;\r\n }\r\n handled.add(descriptor.id);\r\n if (this.nativeModifies.has(descriptor.id)) {\r\n this.nativeModifies.get(descriptor.id)!.interaction.setActive(true);\r\n return;\r\n }\r\n const source = entry.layer.getSource() as VectorSource<Geometry> | null;\r\n if (!source) {\r\n return;\r\n }\r\n const interaction = new Modify({\r\n source,\r\n pixelTolerance: this.getHitTolerance(modify.hitTolerance),\r\n style: modify.vertexStyle,\r\n });\r\n const keys = [\r\n interaction.on('modifystart', (event) =>\r\n this.handleNativeModifyStart(entry, modify, event),\r\n ),\r\n interaction.on('modifyend', (event) =>\r\n this.handleNativeModifyEnd(entry, modify, event),\r\n ),\r\n ];\r\n this.map.addInteraction(interaction);\r\n this.nativeModifies.set(descriptor.id, { interaction, keys });\r\n });\r\n\r\n Array.from(this.nativeModifies.keys()).forEach((layerId) => {\r\n if (!handled.has(layerId)) {\r\n this.teardownNativeModify(layerId);\r\n }\r\n });\r\n }\r\n\r\n private teardownNativeModify(layerId: string): void {\r\n const entry = this.nativeModifies.get(layerId);\r\n if (!entry) {\r\n return;\r\n }\r\n entry.keys.forEach((key) => Observable.unByKey(key));\r\n this.map.removeInteraction(entry.interaction);\r\n this.nativeModifies.delete(layerId);\r\n }\r\n\r\n private handleNativeModifyStart(\r\n entry: LayerEntry,\r\n modify: ModifyInteraction,\r\n event: ModifyEvent,\r\n ): void {\r\n const items = this.resolveHitItemsFromFeatures(entry, event.features);\r\n if (items.length === 0) {\r\n return;\r\n }\r\n if (modify.state) {\r\n this.applyState(items, modify.state, true);\r\n }\r\n if (modify.onStart) {\r\n this.isHandled(modify.onStart({ item: items[0], ctx: this.ctx, event }));\r\n }\r\n }\r\n\r\n private handleNativeModifyEnd(\r\n entry: LayerEntry,\r\n modify: ModifyInteraction,\r\n event: ModifyEvent,\r\n ): void {\r\n const items = this.resolveHitItemsFromFeatures(entry, event.features);\r\n if (items.length === 0) {\r\n return;\r\n }\r\n this.runInteractionMutation(() => {\r\n items.forEach((item) => {\r\n const geometry = item.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n const id = entry.descriptor.feature.id(item.model);\r\n entry.api.mutate(\r\n id,\r\n (prev) =>\r\n entry.descriptor.feature.geometry.applyGeometryToModel(prev, geometry as any),\r\n {reason: 'modify'},\r\n );\r\n });\r\n });\r\n if (modify.onEnd) {\r\n this.isHandled(modify.onEnd({ item: items[0], ctx: this.ctx, event }));\r\n }\r\n if (modify.state) {\r\n this.applyState(items, modify.state, false);\r\n }\r\n }\r\n\r\n private resolveHitItemsFromFeatures(\r\n entry: LayerEntry,\r\n features: Collection<Feature<Geometry>>,\r\n ): Array<HitItem<any, any>> {\r\n return features\r\n .getArray()\r\n .map((feature) => {\r\n const model = entry.api.getModelByFeature(feature as Feature<any>);\r\n if (!model) {\r\n return null;\r\n }\r\n return { model, feature } as HitItem<any, any>;\r\n })\r\n .filter((item): item is HitItem<any, any> => item !== null);\r\n }\r\n\r\n private hasCursorInteraction(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): boolean {\r\n const candidates = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ];\r\n return candidates.some(\r\n (interaction) => interaction?.cursor && this.isMaybeEnabled(interaction.enabled),\r\n );\r\n }\r\n\r\n private toggleListener(\r\n type: ListenerName,\r\n enabled: boolean,\r\n handler: (event: MapBrowserEvent<UIEvent>) => void,\r\n ): void {\r\n if (enabled) {\r\n if (!this.listenerKeys.has(type)) {\r\n const key = (\r\n this.map.on as unknown as (\r\n eventType: string,\r\n listener: (event: MapBrowserEvent<UIEvent>) => void,\r\n ) => EventsKey\r\n )(type, handler);\r\n this.listenerKeys.set(type, key);\r\n }\r\n return;\r\n }\r\n this.removeListener(type);\r\n }\r\n\r\n private removeListener(type: ListenerName): void {\r\n const key = this.listenerKeys.get(type);\r\n if (key) {\r\n Observable.unByKey(key);\r\n this.listenerKeys.delete(type);\r\n }\r\n }\r\n\r\n private isListening(type: ListenerName): boolean {\r\n return this.listenerKeys.has(type);\r\n }\r\n\r\n private applyDisabledCleanup(nextState: Map<string, InteractionEnabledState>): void {\r\n this.enabledState.forEach((prev, layerId) => {\r\n const next = nextState.get(layerId) ?? {\r\n click: false,\r\n doubleClick: false,\r\n hover: false,\r\n select: false,\r\n translate: false,\r\n modify: false,\r\n };\r\n const entry = this.getLayerEntry(layerId);\r\n if (!entry) {\r\n return;\r\n }\r\n\r\n if (prev.hover && !next.hover) {\r\n this.clearHoverState(entry);\r\n }\r\n if (prev.select && !next.select) {\r\n this.clearSelectState(entry);\r\n }\r\n if (prev.translate && !next.translate) {\r\n this.cancelTranslate(entry);\r\n }\r\n if (prev.modify && !next.modify) {\r\n this.cancelModify(entry);\r\n }\r\n });\r\n\r\n this.setCursor(undefined);\r\n }\r\n\r\n private clearHoverState(entry: LayerEntry): void {\r\n const prev = this.hoverItems.get(entry.descriptor.id);\r\n if (!prev) {\r\n return;\r\n }\r\n const hover = entry.descriptor.feature.interactions?.hover;\r\n if (hover?.state) {\r\n this.applyState(Array.from(prev.values()), hover.state, false);\r\n }\r\n this.hoverItems.delete(entry.descriptor.id);\r\n }\r\n\r\n private clearSelectState(entry: LayerEntry): void {\r\n const prev = this.selectedItems.get(entry.descriptor.id);\r\n if (!prev) {\r\n return;\r\n }\r\n const select = entry.descriptor.feature.interactions?.select;\r\n if (select?.state) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n this.selectedItems.delete(entry.descriptor.id);\r\n }\r\n\r\n private cancelTranslate(entry: LayerEntry): void {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (active) {\r\n this.finishTranslate(entry, active, active.lastItem);\r\n }\r\n }\r\n\r\n private cancelModify(entry: LayerEntry): void {\r\n const active = this.activeModifies.get(entry.descriptor.id);\r\n if (active) {\r\n this.finishModify(entry, active, active.lastItem);\r\n }\r\n }\r\n\r\n private updateCursor(event?: MapBrowserEvent<UIEvent>): void {\r\n const activeCursor = this.getActiveSessionCursor();\r\n if (activeCursor !== undefined) {\r\n this.setCursor(activeCursor ?? undefined);\r\n return;\r\n }\r\n if (!event) {\r\n this.setCursor(undefined);\r\n return;\r\n }\r\n\r\n for (const entry of this.getOrderedLayers()) {\r\n const interactions = entry.descriptor.feature.interactions;\r\n if (!interactions) {\r\n continue;\r\n }\r\n const cursor = this.getLayerCursor(interactions);\r\n if (!cursor) {\r\n continue;\r\n }\r\n const hitTolerance = this.getCursorHitTolerance(interactions);\r\n const { items } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance,\r\n });\r\n if (items.length > 0) {\r\n this.setCursor(cursor);\r\n return;\r\n }\r\n }\r\n\r\n this.setCursor(undefined);\r\n }\r\n\r\n private getActiveSessionCursor(): string | null | undefined {\r\n for (const entry of this.getOrderedLayers()) {\r\n const activeTranslate = this.activeTranslates.get(entry.descriptor.id);\r\n if (activeTranslate) {\r\n return activeTranslate.translate.cursor ?? null;\r\n }\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (activeModify) {\r\n return activeModify.modify.cursor ?? null;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private getLayerCursor(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): string | undefined {\r\n const candidates: Array<NonNullable<InteractionBase> | undefined> = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ];\r\n for (const interaction of candidates) {\r\n if (!interaction || !interaction.cursor) {\r\n continue;\r\n }\r\n if (!this.isEnabled(interaction.enabled)) {\r\n continue;\r\n }\r\n return interaction.cursor;\r\n }\r\n return undefined;\r\n }\r\n\r\n private getCursorHitTolerance(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): number {\r\n const candidates = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ].filter((interaction) => interaction && interaction.cursor && this.isEnabled(interaction.enabled));\r\n if (candidates.length === 0) {\r\n return this.getHitTolerance(undefined);\r\n }\r\n const tolerances = candidates\r\n .map((interaction) => interaction?.hitTolerance)\r\n .filter((value): value is number => value !== undefined);\r\n if (tolerances.length === 0) {\r\n return this.getHitTolerance(undefined);\r\n }\r\n return Math.max(...tolerances);\r\n }\r\n\r\n private setCursor(cursor?: string): void {\r\n if (this.currentCursor === cursor) {\r\n return;\r\n }\r\n const target = this.getTargetElement();\r\n if (!target) {\r\n return;\r\n }\r\n target.style.cursor = cursor ?? '';\r\n this.currentCursor = cursor;\r\n }\r\n\r\n private getTargetElement(): HTMLElement | null {\r\n const targetElement = this.map.getTargetElement?.();\r\n if (targetElement) {\r\n return targetElement;\r\n }\r\n const target = this.map.getTarget?.();\r\n if (!target) {\r\n return null;\r\n }\r\n if (typeof target === 'string') {\r\n if (typeof document === 'undefined') {\r\n return null;\r\n }\r\n return document.getElementById(target);\r\n }\r\n return target as HTMLElement;\r\n }\r\n\r\n private getLayerEntry(layerId: string): LayerEntry | null {\r\n const index = this.schema.layers.findIndex((layer) => layer.id === layerId);\r\n if (index < 0) {\r\n return null;\r\n }\r\n const descriptor = this.schema.layers[index];\r\n const layer = this.layers[layerId];\r\n const api = this.apis[layerId];\r\n if (!layer || !api) {\r\n return null;\r\n }\r\n return { descriptor, layer, api, index };\r\n }\r\n\r\n private applyTranslateMove(\r\n entry: LayerEntry,\r\n active: ActiveTranslate,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): void {\r\n const translate = active.translate;\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (!resolved) {\r\n this.finishTranslate(entry, active, active.lastItem);\r\n return;\r\n }\r\n\r\n const nextCoordinate = event.coordinate as [number, number];\r\n const delta = [\r\n nextCoordinate[0] - active.lastCoordinate[0],\r\n nextCoordinate[1] - active.lastCoordinate[1],\r\n ];\r\n active.lastCoordinate = nextCoordinate;\r\n active.lastItem = resolved;\r\n\r\n const geometry = resolved.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n const translated = geometry.clone();\r\n translated.translate(delta[0], delta[1]);\r\n\r\n this.runInteractionMutation(() =>\r\n entry.api.mutate(\r\n active.targetKey,\r\n (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, translated),\r\n {reason: 'translate'},\r\n ),\r\n );\r\n\r\n if (translate.onChange) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n active.startCoordinate,\r\n 'translating',\r\n [resolved],\r\n );\r\n active.lastHandled = this.isHandled(\r\n translate.onChange({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n }\r\n\r\n private applyModifyChange(\r\n entry: LayerEntry,\r\n active: ActiveModify,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): void {\r\n const modify = active.modify;\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (!resolved) {\r\n this.finishModify(entry, active, active.lastItem);\r\n return;\r\n }\r\n\r\n active.lastItem = resolved;\r\n\r\n const geometry = resolved.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n\r\n const nextGeometry = geometry.clone();\r\n this.runInteractionMutation(() =>\r\n entry.api.mutate(\r\n active.targetKey,\r\n (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, nextGeometry),\r\n {reason: 'modify'},\r\n ),\r\n );\r\n\r\n if (modify.onChange) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifying', [resolved]);\r\n active.lastHandled = this.isHandled(\r\n modify.onChange({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n }\r\n\r\n private finishTranslate(\r\n entry: LayerEntry,\r\n active: ActiveTranslate,\r\n item?: HitItem<any, any> | null,\r\n ): void {\r\n const finalItem = item ?? active.lastItem;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n active.pendingEvent = undefined;\r\n }\r\n\r\n if (active.translate.state && finalItem) {\r\n this.applyState([finalItem], active.translate.state, false);\r\n }\r\n\r\n this.activeTranslates.delete(entry.descriptor.id);\r\n this.unlockDragPan();\r\n }\r\n\r\n private finishModify(\r\n entry: LayerEntry,\r\n active: ActiveModify,\r\n item?: HitItem<any, any> | null,\r\n ): void {\r\n const finalItem = item ?? active.lastItem;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n active.pendingEvent = undefined;\r\n }\r\n\r\n if (active.modify.state && finalItem) {\r\n this.applyState([finalItem], active.modify.state, false);\r\n }\r\n\r\n this.activeModifies.delete(entry.descriptor.id);\r\n this.unlockDragPan();\r\n }\r\n\r\n private resolveTarget(entry: LayerEntry, targetKey: string | number): HitItem<any, any> | null {\r\n const source = entry.layer.getSource();\r\n if (!source) {\r\n return null;\r\n }\r\n const resolvedSource = source instanceof ClusterSource ? source.getSource() : source;\r\n if (!resolvedSource) {\r\n return null;\r\n }\r\n const feature = resolvedSource.getFeatureById(targetKey);\r\n if (!(feature instanceof Feature)) {\r\n return null;\r\n }\r\n const model = entry.api.getModelByFeature(feature as Feature<Geometry>);\r\n if (!model) {\r\n return null;\r\n }\r\n return { model, feature };\r\n }\r\n\r\n private lockDragPan(): void {\r\n this.dragPanLocks += 1;\r\n if (this.dragPanLocks !== 1) {\r\n return;\r\n }\r\n const interactions = this.map.getInteractions?.();\r\n if (!interactions) {\r\n return;\r\n }\r\n const dragPans = interactions\r\n .getArray()\r\n .filter((interaction): interaction is DragPan => interaction instanceof DragPan);\r\n if (dragPans.length === 0) {\r\n return;\r\n }\r\n if (!this.dragPanStates) {\r\n this.dragPanStates = new Map();\r\n }\r\n dragPans.forEach((interaction) => {\r\n if (!this.dragPanStates?.has(interaction)) {\r\n this.dragPanStates?.set(interaction, interaction.getActive());\r\n }\r\n interaction.setActive(false);\r\n });\r\n }\r\n\r\n private unlockDragPan(): void {\r\n if (this.dragPanLocks === 0) {\r\n return;\r\n }\r\n this.dragPanLocks -= 1;\r\n if (this.dragPanLocks !== 0) {\r\n return;\r\n }\r\n if (!this.dragPanStates) {\r\n return;\r\n }\r\n this.dragPanStates.forEach((wasActive, interaction) => {\r\n interaction.setActive(wasActive);\r\n });\r\n this.dragPanStates = undefined;\r\n }\r\n\r\n private createTranslateEvent(\r\n event: MapBrowserEvent<UIEvent>,\r\n startCoordinate: [number, number],\r\n type: 'translatestart' | 'translating' | 'translateend',\r\n items: Array<HitItem<any, any>>,\r\n ): TranslateEvent {\r\n const features = new Collection(items.map((item) => item.feature));\r\n return {\r\n type,\r\n features,\r\n coordinate: event.coordinate as [number, number],\r\n startCoordinate,\r\n mapBrowserEvent: event,\r\n } as unknown as TranslateEvent;\r\n }\r\n\r\n private createModifyEvent(\r\n event: MapBrowserEvent<UIEvent>,\r\n type: 'modifystart' | 'modifying' | 'modifyend',\r\n items: Array<HitItem<any, any>>,\r\n ): ModifyEvent {\r\n const features = new Collection(items.map((item) => item.feature));\r\n return {\r\n type,\r\n features,\r\n mapBrowserEvent: event,\r\n } as unknown as ModifyEvent;\r\n }\r\n\r\n private createDefaultHitTest(): HitTestFn {\r\n return ({ layer, api, event, hitTolerance }) => {\r\n const items: Array<HitItem<any, any>> = [];\r\n let clusterHit: ClusterHit | undefined;\r\n this.map.forEachFeatureAtPixel(\r\n event.pixel,\r\n (feature) => {\r\n if (!(feature instanceof Feature)) {\r\n return;\r\n }\r\n const clusterFeatures = getClusterFeatures(feature as Feature<Geometry>);\r\n if (clusterFeatures) {\r\n if (clusterFeatures.length > 1) {\r\n if (!clusterHit) {\r\n clusterHit = {\r\n feature: feature as Feature<Geometry>,\r\n features: clusterFeatures,\r\n size: clusterFeatures.length,\r\n };\r\n }\r\n return;\r\n }\r\n const singleFeature = clusterFeatures[0];\r\n const singleModel = api.getModelByFeature(singleFeature as Feature<Geometry>);\r\n if (!singleModel) {\r\n return;\r\n }\r\n items.push({ model: singleModel, feature: singleFeature });\r\n return;\r\n }\r\n const model = api.getModelByFeature(feature as Feature<Geometry>);\r\n if (!model) {\r\n return;\r\n }\r\n items.push({ model, feature });\r\n },\r\n {\r\n layerFilter: (candidateLayer) => candidateLayer === layer,\r\n hitTolerance,\r\n },\r\n );\r\n return { items, cluster: clusterHit };\r\n };\r\n }\r\n\r\n private collectFeaturePopupItems(\r\n entry: LayerEntry,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): Array<PopupItem<any>> {\r\n const popup = entry.descriptor.feature.popup;\r\n if (!popup || !this.isEnabled(popup.enabled)) {\r\n return [];\r\n }\r\n return items.map((item) => {\r\n const popupItem = popup.item({\r\n model: item.model,\r\n feature: item.feature,\r\n ctx: this.ctx,\r\n event,\r\n });\r\n return {\r\n ...popupItem,\r\n source: popupItem.source ?? 'feature',\r\n dedupKey: popupItem.dedupKey ?? entry.descriptor.feature.id(item.model),\r\n };\r\n });\r\n }\r\n\r\n private collectPopupItems(\r\n entry: LayerEntry,\r\n hitResult: HitTestResult,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): Array<PopupItem<any>> {\r\n if (entry.descriptor.clustering && entry.api.isClusteringEnabled?.() && hitResult.cluster) {\r\n const clustering = entry.descriptor.clustering;\r\n if (clustering?.popup && this.isEnabled(clustering.popup.enabled)) {\r\n const models = hitResult.cluster.features\r\n .map((clusterFeature) =>\r\n entry.api.getModelByFeature(clusterFeature as Feature<Geometry>),\r\n )\r\n .filter((model): model is any => model !== undefined);\r\n const popupItem = clustering.popup.item({\r\n models,\r\n size: hitResult.cluster.size,\r\n ctx: this.ctx,\r\n event,\r\n });\r\n return [\r\n {\r\n ...popupItem,\r\n source: popupItem.source ?? 'cluster',\r\n dedupKey: popupItem.dedupKey ?? this.getClusterDedupKey(entry, models),\r\n },\r\n ];\r\n }\r\n return [];\r\n }\r\n return this.collectFeaturePopupItems(entry, hitResult.items, event);\r\n }\r\n\r\n private getClusterDedupKey(entry: LayerEntry, models: any[]): string {\r\n const ids = models\r\n .map((model) => String(entry.descriptor.feature.id(model)))\r\n .sort((a, b) => a.localeCompare(b))\r\n .join('|');\r\n return `cluster:${entry.descriptor.id}:${ids}`;\r\n }\r\n\r\n private getOrderedLayers(): LayerEntry[] {\r\n return this.schema.layers\r\n .map((descriptor, index) => ({\r\n descriptor,\r\n index,\r\n layer: this.layers[descriptor.id],\r\n api: this.apis[descriptor.id],\r\n }))\r\n .filter((entry) => entry.layer && entry.api)\r\n .sort((a, b) => {\r\n const aZ = a.layer.getZIndex() ?? 0;\r\n const bZ = b.layer.getZIndex() ?? 0;\r\n if (aZ !== bZ) {\r\n return bZ - aZ;\r\n }\r\n return a.index - b.index;\r\n });\r\n }\r\n\r\n private getHitTolerance(hitTolerance?: number): number {\r\n if (hitTolerance !== undefined) {\r\n return hitTolerance;\r\n }\r\n if (this.schema.options?.hitTolerance !== undefined) {\r\n return this.schema.options.hitTolerance;\r\n }\r\n return 0;\r\n }\r\n\r\n private isEnabled(enabled?: boolean | (() => boolean)): boolean {\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n if (typeof enabled === 'function') {\r\n return enabled();\r\n }\r\n return enabled;\r\n }\r\n\r\n private isMaybeEnabled(enabled?: boolean | (() => boolean)): boolean {\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n if (typeof enabled === 'function') {\r\n return true;\r\n }\r\n return enabled;\r\n }\r\n\r\n private processHover(\r\n entry: LayerEntry,\r\n hover: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['hover']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n const prev = this.hoverItems.get(entry.descriptor.id) ?? new Map();\r\n const next = this.itemsToMap(entry, items);\r\n const entered = Array.from(next.entries())\r\n .filter(([id]) => !prev.has(id))\r\n .map(([, item]) => item);\r\n const left = Array.from(prev.entries())\r\n .filter(([id]) => !next.has(id))\r\n .map(([, item]) => item);\r\n\r\n let handled = false;\r\n if (left.length > 0 && hover.onLeave) {\r\n handled = this.isHandled(hover.onLeave({ items: left, ctx: this.ctx, event }));\r\n }\r\n if (entered.length > 0 && hover.onEnter) {\r\n handled = this.isHandled(hover.onEnter({ items: entered, ctx: this.ctx, event })) || handled;\r\n }\r\n\r\n if (hover.state) {\r\n this.applyState(left, hover.state, false);\r\n this.applyState(entered, hover.state, true);\r\n }\r\n\r\n this.hoverItems.set(entry.descriptor.id, next);\r\n return handled;\r\n }\r\n\r\n private processSelect(\r\n entry: LayerEntry,\r\n select: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['select']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n const selectedItems = select.pickTargets\r\n ? select.pickTargets({ candidates: items, ctx: this.ctx, event })\r\n : items;\r\n\r\n if (!selectedItems || selectedItems.length === 0) {\r\n if (select.pickTargets) {\r\n return false;\r\n }\r\n const prev = this.selectedItems.get(entry.descriptor.id);\r\n this.selectedItems.set(entry.descriptor.id, new Map());\r\n if (select.onClear) {\r\n const handled = this.isHandled(select.onClear({ ctx: this.ctx, event }));\r\n if (select.state && prev) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n return handled;\r\n }\r\n if (select.state && prev) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n return false;\r\n }\r\n\r\n const prev = this.selectedItems.get(entry.descriptor.id) ?? new Map();\r\n const next = this.itemsToMap(entry, selectedItems);\r\n const handled = select.onSelect\r\n ? this.isHandled(select.onSelect({ items: selectedItems, ctx: this.ctx, event }))\r\n : false;\r\n if (select.state) {\r\n const added = Array.from(next.entries())\r\n .filter(([id]) => !prev.has(id))\r\n .map(([, item]) => item);\r\n const removed = Array.from(prev.entries())\r\n .filter(([id]) => !next.has(id))\r\n .map(([, item]) => item);\r\n this.applyState(removed, select.state, false);\r\n this.applyState(added, select.state, true);\r\n }\r\n this.selectedItems.set(entry.descriptor.id, next);\r\n return handled;\r\n }\r\n\r\n private processClick(\r\n entry: LayerEntry,\r\n click: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['click']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n return this.isHandled(click.onClick({ items, ctx: this.ctx, event }));\r\n }\r\n\r\n private processDoubleClick(\r\n entry: LayerEntry,\r\n doubleClick: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['doubleClick']\r\n >,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n return this.isHandled(doubleClick.onDoubleClick({ items, ctx: this.ctx, event }));\r\n }\r\n\r\n private itemsToMap(\r\n entry: LayerEntry,\r\n items: Array<HitItem<any, any>>,\r\n ): Map<string | number, HitItem<any, any>> {\r\n const next = new Map<string | number, HitItem<any, any>>();\r\n items.forEach((item) => {\r\n const id = entry.descriptor.feature.id(item.model);\r\n next.set(id, item);\r\n });\r\n return next;\r\n }\r\n\r\n private applyState(items: Array<HitItem<any, any>>, state: FeatureState, enabled: boolean): void {\r\n const states = Array.isArray(state) ? state : [state];\r\n items.forEach((item) => {\r\n const current = new Set(getFeatureStates(item.feature));\r\n states.forEach((entry) => {\r\n if (enabled) {\r\n current.add(entry);\r\n } else {\r\n current.delete(entry);\r\n }\r\n });\r\n setFeatureStates(item.feature, Array.from(current));\r\n });\r\n }\r\n\r\n private isHandled(result: InteractionHandlerResult): boolean {\r\n return result === true;\r\n }\r\n\r\n private shouldStopPropagation(base: InteractionBase): boolean {\r\n return base.propagation !== 'continue';\r\n }\r\n\r\n private shouldContinuePropagation(base: InteractionBase): boolean {\r\n return base.propagation === 'continue';\r\n }\r\n\r\n private handleClusterClick(\r\n entry: LayerEntry,\r\n clusterHit: ClusterHit,\r\n event: MapBrowserEvent<UIEvent>,\r\n manualPopupPush: boolean,\r\n ): boolean {\r\n const clustering = entry.descriptor.clustering;\r\n if (!clustering) {\r\n return false;\r\n }\r\n\r\n const models = clusterHit.features\r\n .map((clusterFeature) =>\r\n entry.api.getModelByFeature(clusterFeature as Feature<Geometry>),\r\n )\r\n .filter((model): model is any => model !== undefined);\r\n let handled = false;\r\n\r\n if (clustering.expandOnClick) {\r\n this.expandCluster(clusterHit, clustering.expandOnClick);\r\n clustering.expandOnClick.onExpanded?.({ models, ctx: this.ctx });\r\n handled = true;\r\n }\r\n\r\n if (clustering.popup && this.isEnabled(clustering.popup.enabled)) {\r\n if (manualPopupPush || !this.ctx.popupHost) {\r\n const item = clustering.popup.item({ models, size: clusterHit.size, ctx: this.ctx, event });\r\n if (manualPopupPush && this.ctx.popupHost) {\r\n this.ctx.popupHost.push([\r\n {\r\n ...item,\r\n source: item.source ?? 'cluster',\r\n dedupKey: item.dedupKey ?? this.getClusterDedupKey(entry, models),\r\n },\r\n ]);\r\n }\r\n }\r\n handled = true;\r\n }\r\n\r\n return handled;\r\n }\r\n\r\n private expandCluster(\r\n clusterHit: ClusterHit,\r\n expand: NonNullable<NonNullable<LayerEntry['descriptor']['clustering']>['expandOnClick']>,\r\n ): void {\r\n const view = this.map.getView();\r\n const duration = expand.durationMs;\r\n if (expand.mode === 'zoomIn') {\r\n const currentZoom = view.getZoom() ?? 0;\r\n const delta = expand.zoomDelta ?? 1;\r\n const targetZoom = currentZoom + delta;\r\n const nextZoom =\r\n expand.maxZoom !== undefined ? Math.min(expand.maxZoom, targetZoom) : targetZoom;\r\n view.animate({ zoom: nextZoom, duration });\r\n return;\r\n }\r\n\r\n const extent = createEmpty();\r\n clusterHit.features.forEach((feature) => {\r\n const geometry = feature.getGeometry();\r\n if (geometry) {\r\n extend(extent, geometry.getExtent());\r\n }\r\n });\r\n if (isEmpty(extent)) {\r\n return;\r\n }\r\n const padding = toOlPadding(expand.padding, undefined);\r\n view.fit(extent, {\r\n padding,\r\n duration,\r\n maxZoom: expand.maxZoom,\r\n });\r\n }\r\n\r\n private shouldStopClusterPropagation(): boolean {\r\n return true;\r\n }\r\n}\r\n","import type Style from 'ol/style/Style';\r\n\r\nexport type StyleCacheKey = string;\r\n\r\nexport class StyleCache {\r\n private readonly stringCache = new Map<string, Style | Style[]>();\r\n\r\n get(key: StyleCacheKey): Style | Style[] | undefined {\r\n return this.stringCache.get(key);\r\n }\r\n\r\n set(key: StyleCacheKey, value: Style | Style[]): void {\r\n this.stringCache.set(key, value);\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type OlMap from 'ol/Map';\r\nimport type { StyleFunction } from 'ol/style/Style';\r\n\r\nimport type {\r\n FeatureDescriptor,\r\n FeatureStyleState,\r\n LayerClustering,\r\n MapContext,\r\n MaybeFn,\r\n Patch,\r\n StyleView,\r\n} from '../../public/types';\r\nimport { getClusterFeatures } from '../cluster-utils';\r\nimport { getFeatureStates } from './feature-states';\r\nimport { StyleCache } from './style-cache';\r\n\r\nexport type StylePipelineOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: FeatureDescriptor<M, G, OPTS>;\r\n ctx: MapContext;\r\n registryGetModel: (feature: Feature<Geometry>) => M | undefined;\r\n map?: OlMap;\r\n};\r\n\r\nconst resolveMaybeFn = <T, A extends any[]>(value: MaybeFn<T, A>, args: A): T => {\r\n if (typeof value === 'function') {\r\n return (value as (...fnArgs: A) => T)(...args);\r\n }\r\n return value;\r\n};\r\n\r\nconst applyPatch = <T extends object>(opts: T, patch: Patch<T>): T => {\r\n const patchValue = typeof patch === 'function' ? patch(opts) : patch;\r\n return { ...opts, ...patchValue };\r\n};\r\n\r\nconst orderStates = (\r\n states: FeatureStyleState[],\r\n priority?: FeatureStyleState[],\r\n): FeatureStyleState[] => {\r\n if (!priority || priority.length === 0) {\r\n return states;\r\n }\r\n const prioritySet = new Set(priority);\r\n const ordered = priority.filter((state) => states.includes(state));\r\n const rest = states.filter((state) => !prioritySet.has(state));\r\n return [...ordered, ...rest];\r\n};\r\n\r\nexport const createStyleFunction = <M, G extends Geometry, OPTS extends object>(\r\n options: StylePipelineOptions<M, G, OPTS>,\r\n): StyleFunction => {\r\n const { descriptor, registryGetModel, map } = options;\r\n const { style } = descriptor;\r\n const cache = new StyleCache();\r\n\r\n return (feature, resolution) => {\r\n if (!(feature instanceof Feature)) {\r\n return [];\r\n }\r\n const model = registryGetModel(feature);\r\n if (!model) {\r\n return [];\r\n }\r\n const view: StyleView = {\r\n resolution,\r\n zoom: map?.getView().getZoom(),\r\n };\r\n let opts = resolveMaybeFn(style.base, [model, view]);\r\n\r\n if (style.states) {\r\n const featureStates = orderStates(getFeatureStates(feature), style.statePriority);\r\n featureStates.forEach((state) => {\r\n const patchFactory = style.states?.[state];\r\n if (!patchFactory) {\r\n return;\r\n }\r\n const patch = resolveMaybeFn(patchFactory, [model, view]);\r\n opts = applyPatch(opts, patch);\r\n });\r\n }\r\n\r\n if (style.cacheKey) {\r\n const key = style.cacheKey(opts, view);\r\n if (key) {\r\n const cached = cache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const rendered = style.render(opts, view);\r\n cache.set(key, rendered);\r\n return rendered;\r\n }\r\n }\r\n\r\n return style.render(opts, view);\r\n };\r\n};\r\n\r\nexport type ClusterStylePipelineOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: FeatureDescriptor<M, G, OPTS>;\r\n clustering: LayerClustering<M>;\r\n ctx: MapContext;\r\n registryGetModel: (feature: Feature<Geometry>) => M | undefined;\r\n map?: OlMap;\r\n};\r\n\r\nexport const createClusterStyleFunction = <M, G extends Geometry, OPTS extends object>(\r\n options: ClusterStylePipelineOptions<M, G, OPTS>,\r\n): StyleFunction => {\r\n const { clustering, registryGetModel, map } = options;\r\n const baseStyle = createStyleFunction(options);\r\n const cache = new StyleCache();\r\n\r\n return (feature, resolution) => {\r\n if (!(feature instanceof Feature)) {\r\n return [];\r\n }\r\n const clusterFeatures = getClusterFeatures(feature);\r\n if (!clusterFeatures) {\r\n return baseStyle(feature, resolution);\r\n }\r\n\r\n const size = clusterFeatures.length;\r\n if (size === 1) {\r\n return baseStyle(clusterFeatures[0], resolution);\r\n }\r\n\r\n const models = clusterFeatures\r\n .map((clusterFeature) => registryGetModel(clusterFeature))\r\n .filter((model): model is M => model !== undefined);\r\n const view: StyleView = {\r\n resolution,\r\n zoom: map?.getView().getZoom(),\r\n };\r\n\r\n if (clustering.clusterStyle.cacheKey) {\r\n const key = clustering.clusterStyle.cacheKey({ models, size, view });\r\n if (key) {\r\n const cached = cache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const rendered = clustering.clusterStyle.render({ models, size, view });\r\n cache.set(key, rendered);\r\n return rendered;\r\n }\r\n }\r\n\r\n return clustering.clusterStyle.render({ models, size, view });\r\n };\r\n};\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nexport class FeatureRegistry<M, G extends Geometry> {\r\n private readonly idToModel = new Map<string | number, M>();\r\n private readonly idToFeature = new Map<string | number, Feature<G>>();\r\n private readonly featureToId = new WeakMap<Feature<G>, string | number>();\r\n\r\n set(id: string | number, model: M, feature: Feature<G>): void {\r\n this.idToModel.set(id, model);\r\n this.idToFeature.set(id, feature);\r\n this.featureToId.set(feature, id);\r\n }\r\n\r\n updateModel(id: string | number, model: M): void {\r\n if (!this.idToModel.has(id)) {\r\n return;\r\n }\r\n this.idToModel.set(id, model);\r\n }\r\n\r\n getModel(id: string | number): M | undefined {\r\n return this.idToModel.get(id);\r\n }\r\n\r\n getFeature(id: string | number): Feature<G> | undefined {\r\n return this.idToFeature.get(id);\r\n }\r\n\r\n getIdByFeature(feature: Feature<G>): string | number | undefined {\r\n return this.featureToId.get(feature);\r\n }\r\n\r\n getModelByFeature(feature: Feature<G>): M | undefined {\r\n const id = this.featureToId.get(feature);\r\n if (id === undefined) {\r\n return undefined;\r\n }\r\n return this.idToModel.get(id);\r\n }\r\n\r\n has(id: string | number): boolean {\r\n return this.idToModel.has(id);\r\n }\r\n\r\n remove(id: string | number): Feature<G> | undefined {\r\n const feature = this.idToFeature.get(id);\r\n if (!feature) {\r\n return undefined;\r\n }\r\n this.idToModel.delete(id);\r\n this.idToFeature.delete(id);\r\n this.featureToId.delete(feature);\r\n return feature;\r\n }\r\n\r\n forEachId(fn: (id: string | number) => void): void {\r\n this.idToModel.forEach((_model, id) => fn(id));\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createEmpty, extend, isEmpty} from 'ol/extent';\r\nimport type VectorLayer from 'ol/layer/Vector';\r\nimport type VectorSource from 'ol/source/Vector';\r\n\r\nimport {\r\n DuplicateModelIdError,\r\n type FeatureDescriptor,\r\n type Id,\r\n type MapContext,\r\n type ModelChange,\r\n type ModelsCollectionEvent,\r\n type ModelsSetReason,\r\n type MutateOptions,\r\n type VectorLayerApi,\r\n type VectorLayerDescriptor,\r\n type ViewFitOptions,\r\n} from '../public/types';\r\nimport {FeatureRegistry} from './feature-registry';\r\nimport {setFeatureStates} from './style/feature-states';\r\nimport {toOlFitOptions} from './fit-layer.utils';\r\n\r\nexport type VectorLayerBaseOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: VectorLayerDescriptor<M, G, OPTS>;\r\n layer: VectorLayer;\r\n source: VectorSource<G>;\r\n ctx: MapContext;\r\n scheduleInvalidate: () => void;\r\n};\r\n\r\nexport abstract class VectorLayerBase<M, G extends Geometry, OPTS extends object>\r\n implements VectorLayerApi<M, G>\r\n{\r\n protected readonly descriptor: FeatureDescriptor<M, G, OPTS>;\r\n protected readonly layer: VectorLayer;\r\n protected readonly source: VectorSource<G>;\r\n protected readonly registry = new FeatureRegistry<M, G>();\r\n protected readonly scheduleInvalidate: () => void;\r\n protected readonly ctx: MapContext;\r\n protected readonly layerId: string;\r\n private readonly changeHandlers = new Set<(changes: ModelChange<M>[]) => void>();\r\n private readonly collectionHandlers = new Set<(event: ModelsCollectionEvent<M>) => void>();\r\n private models: M[] = [];\r\n\r\n constructor(options: VectorLayerBaseOptions<M, G, OPTS>) {\r\n this.descriptor = options.descriptor.feature;\r\n this.layer = options.layer;\r\n this.source = options.source;\r\n this.ctx = options.ctx;\r\n this.scheduleInvalidate = options.scheduleInvalidate;\r\n this.layerId = options.descriptor.id;\r\n }\r\n\r\n setModels(models: readonly M[]): void {\r\n this.assertUniqueIds(models);\r\n this.applyModelsUpdate({\r\n nextModels: models,\r\n reason: 'set',\r\n });\r\n }\r\n\r\n invalidate(): void {\r\n this.scheduleInvalidate();\r\n }\r\n\r\n protected syncFeatureFromModel(model: M): void {\r\n const id = this.descriptor.id(model);\r\n const feature = this.registry.getFeature(id);\r\n if (!feature) {\r\n return;\r\n }\r\n feature.setGeometry(this.descriptor.geometry.fromModel(model));\r\n }\r\n\r\n getModelByFeature(feature: Feature<G>): M | undefined {\r\n return this.registry.getModelByFeature(feature);\r\n }\r\n\r\n mutate(\r\n id: Id,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ): void {\r\n const prev = this.registry.getModel(id);\r\n if (!prev) {\r\n return;\r\n }\r\n const next = update(prev);\r\n if (next === prev) {\r\n return;\r\n }\r\n const reason = opts?.reason ?? 'mutate';\r\n this.registry.updateModel(id, next);\r\n this.replaceModelSnapshot(id, next);\r\n this.syncFeatureFromModel(next);\r\n this.scheduleInvalidate();\r\n if (!opts?.silent) {\r\n this.emitModelChanges([{prev, next, reason}]);\r\n }\r\n }\r\n\r\n mutateMany(\r\n ids: Array<Id>,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ): void {\r\n const changes: ModelChange<M>[] = [];\r\n const reason = opts?.reason ?? 'mutate';\r\n\r\n ids.forEach((id) => {\r\n const prev = this.registry.getModel(id);\r\n if (!prev) {\r\n return;\r\n }\r\n const next = update(prev);\r\n if (next === prev) {\r\n return;\r\n }\r\n this.registry.updateModel(id, next);\r\n this.replaceModelSnapshot(id, next);\r\n this.syncFeatureFromModel(next);\r\n changes.push({prev, next, reason});\r\n });\r\n\r\n if (changes.length === 0) {\r\n return;\r\n }\r\n\r\n this.scheduleInvalidate();\r\n if (!opts?.silent) {\r\n this.emitModelChanges(changes);\r\n }\r\n }\r\n\r\n onModelsChanged(cb: (changes: ModelChange<M>[]) => void): () => void {\r\n this.changeHandlers.add(cb);\r\n return () => this.changeHandlers.delete(cb);\r\n }\r\n\r\n onModelsCollectionChanged(cb: (event: ModelsCollectionEvent<M>) => void): () => void {\r\n this.collectionHandlers.add(cb);\r\n return () => this.collectionHandlers.delete(cb);\r\n }\r\n\r\n addModel(model: M): void {\r\n this.addModels([model]);\r\n }\r\n\r\n addModels(models: readonly M[]): void {\r\n if (models.length === 0) {\r\n return;\r\n }\r\n const existingIds = new Set<Id>(this.models.map((item) => this.descriptor.id(item)));\r\n const batchIds = new Set<Id>();\r\n for (const model of models) {\r\n const id = this.descriptor.id(model);\r\n if (existingIds.has(id) || batchIds.has(id)) {\r\n this.throwDuplicateId(id);\r\n }\r\n batchIds.add(id);\r\n }\r\n this.applyModelsUpdate({\r\n nextModels: [...this.models, ...models],\r\n reason: 'add',\r\n added: models,\r\n });\r\n }\r\n\r\n removeModelsById(ids: readonly Id[]): number {\r\n if (ids.length === 0 || this.models.length === 0) {\r\n return 0;\r\n }\r\n const idSet = new Set<Id>(ids);\r\n const removed: M[] = [];\r\n const nextModels = this.models.filter((model) => {\r\n const id = this.descriptor.id(model);\r\n if (idSet.has(id)) {\r\n removed.push(model);\r\n return false;\r\n }\r\n return true;\r\n });\r\n if (removed.length === 0) {\r\n return 0;\r\n }\r\n this.applyModelsUpdate({\r\n nextModels,\r\n reason: 'remove',\r\n removed,\r\n });\r\n return removed.length;\r\n }\r\n\r\n clear(): void {\r\n if (this.models.length === 0) {\r\n return;\r\n }\r\n this.applyModelsUpdate({\r\n nextModels: [],\r\n reason: 'clear',\r\n removed: [...this.models],\r\n });\r\n }\r\n\r\n /** Fit view to all features on the layer. No-op if extent is empty. */\r\n centerOnAllModels(opts?: ViewFitOptions): void {\r\n const current = this.getCenterOnAllModelsSource();\r\n const extent = current?.getExtent?.();\r\n if (!extent || isEmpty(extent)) {\r\n return;\r\n }\r\n this.ctx.map.getView().fit(extent, toOlFitOptions(opts));\r\n }\r\n\r\n /** Fit view to a single feature by id. No-op if feature/geometry is missing. */\r\n centerOnModel(id: string | number, opts?: ViewFitOptions): void {\r\n const feature = this.registry.getFeature(id);\r\n const geom = feature?.getGeometry();\r\n if (!geom) {\r\n return;\r\n }\r\n this.ctx.map.getView().fit(geom.getExtent(), toOlFitOptions(opts));\r\n }\r\n\r\n /**\r\n * Fit view to a subset of features by ids (combined extent).\r\n * Missing ids are ignored. No-op if none found.\r\n */\r\n centerOnModels(ids: ReadonlyArray<string | number>, opts?: ViewFitOptions): void {\r\n const extent = createEmpty();\r\n\r\n let found = false;\r\n for (const id of ids) {\r\n const feature = this.registry.getFeature(id);\r\n const geom = feature?.getGeometry();\r\n if (!geom) continue;\r\n extend(extent, geom.getExtent());\r\n found = true;\r\n }\r\n\r\n if (!found || isEmpty(extent)) {\r\n return;\r\n }\r\n\r\n this.ctx.map.getView().fit(extent, toOlFitOptions(opts));\r\n }\r\n\r\n setVisible(visible: boolean): void {\r\n this.layer.setVisible(visible);\r\n }\r\n\r\n isVisible(): boolean {\r\n return this.layer.getVisible();\r\n }\r\n\r\n setOpacity(opacity: number): void {\r\n this.layer.setOpacity(opacity);\r\n }\r\n\r\n getOpacity(): number {\r\n return this.layer.getOpacity();\r\n }\r\n\r\n getZIndex(): number | undefined {\r\n return this.layer.getZIndex();\r\n }\r\n\r\n setZIndex(z: number): void {\r\n this.layer.setZIndex(z);\r\n }\r\n\r\n getModelById(id: Id): M | undefined {\r\n return this.registry.getModel(id);\r\n }\r\n\r\n hasModel(id: Id): boolean {\r\n return this.registry.getFeature(id) != null;\r\n }\r\n\r\n getAllModels(): readonly M[] {\r\n return [...this.models];\r\n }\r\n\r\n getAllModelIds(): Array<Id> {\r\n return this.models.map((model) => this.descriptor.id(model));\r\n }\r\n\r\n setFeatureStates(\r\n ids: Id | ReadonlyArray<Id>,\r\n states?: string | string[],\r\n ): void {\r\n const targetIds = Array.isArray(ids) ? ids : [ids];\r\n const nextStates = states ? (Array.isArray(states) ? states : [states]) : [];\r\n\r\n targetIds.forEach((id) => {\r\n const feature = this.registry.getFeature(id);\r\n if (feature) {\r\n setFeatureStates(feature, nextStates);\r\n }\r\n });\r\n\r\n this.scheduleInvalidate();\r\n }\r\n\r\n clearFeatureStates(ids: Id | ReadonlyArray<Id>): void {\r\n this.setFeatureStates(ids, []);\r\n }\r\n\r\n protected setModelsInternal(models: readonly M[]): void {\r\n const nextIds = new Set<string | number>();\r\n models.forEach((model) => {\r\n const id = this.descriptor.id(model);\r\n nextIds.add(id);\r\n const existingFeature = this.registry.getFeature(id);\r\n if (existingFeature) {\r\n const prevModel = this.registry.getModel(id);\r\n if (prevModel !== model) {\r\n this.registry.updateModel(id, model);\r\n existingFeature.setGeometry(this.descriptor.geometry.fromModel(model));\r\n }\r\n return;\r\n }\r\n\r\n const feature = new Feature<G>({\r\n geometry: this.descriptor.geometry.fromModel(model),\r\n });\r\n feature.setId(id);\r\n this.registry.set(id, model, feature);\r\n this.source.addFeature(feature);\r\n this.descriptor.geometry.onCreate?.({feature, model, ctx: this.ctx});\r\n });\r\n\r\n const toRemove: Array<string | number> = [];\r\n this.registry.forEachId((id) => {\r\n if (!nextIds.has(id)) {\r\n toRemove.push(id);\r\n }\r\n });\r\n toRemove.forEach((id) => {\r\n const feature = this.registry.remove(id);\r\n if (feature) {\r\n this.source.removeFeature(feature);\r\n }\r\n });\r\n }\r\n\r\n protected getCenterOnAllModelsSource(): VectorSource<G> | null {\r\n return this.source;\r\n }\r\n\r\n private emitModelChanges(changes: ModelChange<M>[]): void {\r\n if (changes.length === 0) {\r\n return;\r\n }\r\n this.changeHandlers.forEach((handler) => handler(changes));\r\n }\r\n\r\n private emitCollectionChange(event: ModelsCollectionEvent<M>): void {\r\n this.collectionHandlers.forEach((handler) => handler(event));\r\n }\r\n\r\n private assertUniqueIds(models: readonly M[]): void {\r\n const ids = new Set<Id>();\r\n for (const model of models) {\r\n const id = this.descriptor.id(model);\r\n if (ids.has(id)) {\r\n this.throwDuplicateId(id);\r\n }\r\n ids.add(id);\r\n }\r\n }\r\n\r\n private throwDuplicateId(id: Id): never {\r\n throw new DuplicateModelIdError(id, this.layerId);\r\n }\r\n\r\n private applyModelsUpdate(args: {\r\n nextModels: readonly M[];\r\n reason: ModelsSetReason;\r\n added?: readonly M[];\r\n removed?: readonly M[];\r\n }): void {\r\n const prevSnapshot = [...this.models];\r\n const internalNext = [...args.nextModels];\r\n this.models = internalNext;\r\n this.setModelsInternal(this.models);\r\n const nextSnapshot = [...internalNext];\r\n this.emitCollectionChange({\r\n prev: prevSnapshot,\r\n next: nextSnapshot,\r\n reason: args.reason,\r\n added: args.added ? [...args.added] : undefined,\r\n removed: args.removed ? [...args.removed] : undefined,\r\n });\r\n }\r\n\r\n private replaceModelSnapshot(id: Id, model: M): void {\r\n const index = this.models.findIndex((item) => this.descriptor.id(item) === id);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.models[index] = model;\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createEmpty} from 'ol/extent';\r\nimport type ClusterSource from 'ol/source/Cluster';\r\nimport type VectorSource from 'ol/source/Vector';\r\n\r\nimport { clearFeatureStates } from './style/feature-states';\r\nimport { createClusterStyleFunction } from './style/style-pipeline';\r\nimport {VectorLayerBase, VectorLayerBaseOptions} from './vector-layer-base';\r\n\r\nexport type ClusteredLayerOptions<M, G extends Geometry, OPTS extends object> =\r\n VectorLayerBaseOptions<M, G, OPTS> & {\r\n clusterSource: ClusterSource;\r\n };\r\n\r\nexport class ClusteredVectorLayer<M, G extends Geometry, OPTS extends object>\r\n extends VectorLayerBase<M, G, OPTS>\r\n{\r\n private readonly clusterSource: ClusterSource;\r\n private clusteringEnabled: boolean;\r\n\r\n constructor(options: ClusteredLayerOptions<M, G, OPTS>) {\r\n super(options);\r\n this.clusterSource = options.clusterSource;\r\n this.clusteringEnabled = options.descriptor.clustering?.enabledByDefault ?? false;\r\n\r\n this.layer.setStyle(\r\n createClusterStyleFunction({\r\n descriptor: this.descriptor,\r\n clustering: options.descriptor.clustering!,\r\n ctx: this.ctx,\r\n registryGetModel: (feature) => this.registry.getModelByFeature(feature as Feature<G>),\r\n map: this.ctx.map,\r\n }),\r\n );\r\n\r\n this.layer.setSource(\r\n this.clusteringEnabled ? (this.clusterSource as unknown as VectorSource<G>) : this.source,\r\n );\r\n }\r\n\r\n override setModels(models: readonly M[]): void {\r\n this.setModelsInternal(models);\r\n this.scheduleInvalidate();\r\n }\r\n\r\n setClusteringEnabled(enabled: boolean): void {\r\n if (this.clusteringEnabled === enabled) {\r\n return;\r\n }\r\n this.clusteringEnabled = enabled;\r\n this.clearInteractionStates();\r\n this.layer.setSource(\r\n enabled ? (this.clusterSource as unknown as VectorSource<G>) : this.source,\r\n );\r\n if (enabled) {\r\n const view = this.ctx.map.getView();\r\n const resolution = view.getResolution() ?? 1;\r\n this.clusterSource.loadFeatures(createEmpty(), resolution, view.getProjection());\r\n this.clusterSource.refresh();\r\n }\r\n this.scheduleInvalidate();\r\n }\r\n\r\n isClusteringEnabled(): boolean {\r\n return this.clusteringEnabled;\r\n }\r\n\r\n private clearInteractionStates(): void {\r\n this.registry.forEachId((id) => {\r\n const feature = this.registry.getFeature(id);\r\n if (feature) {\r\n clearFeatureStates(feature);\r\n }\r\n });\r\n }\r\n\r\n protected override getCenterOnAllModelsSource(): VectorSource<G> | null {\r\n return this.layer.getSource() as unknown as VectorSource<G> | null;\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createStyleFunction} from './style/style-pipeline';\r\nimport {VectorLayerBase, VectorLayerBaseOptions} from './vector-layer-base';\r\n\r\nexport type PlainLayerOptions<M, G extends Geometry, OPTS extends object> =\r\n VectorLayerBaseOptions<M, G, OPTS>;\r\n\r\nexport class PlainVectorLayer<M, G extends Geometry, OPTS extends object> extends VectorLayerBase<\r\n M,\r\n G,\r\n OPTS\r\n> {\r\n constructor(options: PlainLayerOptions<M, G, OPTS>) {\r\n super(options);\r\n\r\n this.layer.setStyle(\r\n createStyleFunction({\r\n descriptor: this.descriptor,\r\n ctx: this.ctx,\r\n registryGetModel: (feature) => this.registry.getModelByFeature(feature as Feature<G>),\r\n map: this.ctx.map,\r\n }),\r\n );\r\n }\r\n}\r\n","import type { Enabled, PopupHostApi, PopupItem } from '../public/types';\r\n\r\nexport type PopupHostOptions = {\r\n enabled?: Enabled;\r\n maxItems?: number;\r\n sort?: (a: PopupItem<any>, b: PopupItem<any>) => number;\r\n mount?: HTMLElement | (() => HTMLElement);\r\n};\r\n\r\ntype ItemWithIndex = { item: PopupItem<any>; index: number };\r\n\r\nexport class PopupHost implements PopupHostApi {\r\n private items: PopupItem<any>[] = [];\r\n private container: HTMLElement | null = null;\r\n private target: HTMLElement | null = null;\r\n\r\n constructor(private readonly options: PopupHostOptions = {}) {\r\n if (options.mount) {\r\n this.mount(options.mount);\r\n }\r\n }\r\n\r\n push(items: PopupItem<any>[]): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.prepareItems([...this.items, ...items]);\r\n this.render();\r\n }\r\n\r\n set(items: PopupItem<any>[]): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.prepareItems(items);\r\n this.render();\r\n }\r\n\r\n clear(): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = [];\r\n this.render();\r\n }\r\n\r\n remove(key: string | number): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.items.filter((item) => this.getDedupKey(item) !== key);\r\n this.render();\r\n }\r\n\r\n getItems(): PopupItem<any>[] {\r\n if (!this.isEnabled()) {\r\n return [];\r\n }\r\n return [...this.items];\r\n }\r\n\r\n mount(target: HTMLElement | (() => HTMLElement)): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n const element = typeof target === 'function' ? target() : target;\r\n if (!element) {\r\n return;\r\n }\r\n if (this.target !== element) {\r\n this.unmount();\r\n }\r\n this.target = element;\r\n this.render();\r\n }\r\n\r\n dispose(): void {\r\n this.unmount();\r\n this.items = [];\r\n }\r\n\r\n private ensureEnabled(): boolean {\r\n if (this.isEnabled()) {\r\n return true;\r\n }\r\n this.items = [];\r\n this.unmount();\r\n return false;\r\n }\r\n\r\n private isEnabled(): boolean {\r\n const enabled = this.options.enabled;\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n return typeof enabled === 'function' ? enabled() : enabled;\r\n }\r\n\r\n private unmount(): void {\r\n if (this.container && this.container.parentElement) {\r\n this.container.parentElement.removeChild(this.container);\r\n }\r\n this.container = null;\r\n this.target = null;\r\n }\r\n\r\n private prepareItems(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const deduped = this.dedup(items);\r\n const sorted = this.applySort(deduped);\r\n return this.applyLimit(sorted);\r\n }\r\n\r\n private dedup(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const result: PopupItem<any>[] = [];\r\n const indices = new Map<string | number, number>();\r\n items.forEach((item) => {\r\n const key = this.getDedupKey(item);\r\n if (key === undefined) {\r\n result.push(item);\r\n return;\r\n }\r\n const existingIndex = indices.get(key);\r\n if (existingIndex !== undefined) {\r\n result[existingIndex] = item;\r\n return;\r\n }\r\n indices.set(key, result.length);\r\n result.push(item);\r\n });\r\n return result;\r\n }\r\n\r\n private applySort(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const comparator = this.options.sort ?? this.defaultSort;\r\n const withIndex: ItemWithIndex[] = items.map((item, index) => ({ item, index }));\r\n withIndex.sort((a, b) => {\r\n const result = comparator(a.item, b.item);\r\n if (result !== 0) {\r\n return result;\r\n }\r\n return a.index - b.index;\r\n });\r\n return withIndex.map((entry) => entry.item);\r\n }\r\n\r\n private applyLimit(items: PopupItem<any>[]): PopupItem<any>[] {\r\n if (this.options.maxItems === undefined) {\r\n return items;\r\n }\r\n return items.slice(0, this.options.maxItems);\r\n }\r\n\r\n private getDedupKey(item: PopupItem<any>): string | number | undefined {\r\n if (item.dedupKey !== undefined) {\r\n return item.dedupKey;\r\n }\r\n const model = item.model as { id?: string | number };\r\n if (model && (typeof model.id === 'string' || typeof model.id === 'number')) {\r\n return model.id;\r\n }\r\n return undefined;\r\n }\r\n\r\n private defaultSort(a: PopupItem<any>, b: PopupItem<any>): number {\r\n const aPriority = a.priority ?? 0;\r\n const bPriority = b.priority ?? 0;\r\n return bPriority - aPriority;\r\n }\r\n\r\n private render(): void {\r\n if (!this.target) {\r\n return;\r\n }\r\n if (!this.container) {\r\n this.container = document.createElement('div');\r\n this.container.className = 'mf-popup-host';\r\n this.target.appendChild(this.container);\r\n }\r\n this.container.innerHTML = '';\r\n this.items.forEach((item) => {\r\n const card = document.createElement('div');\r\n card.className = 'mf-popup-item';\r\n if (item.className) {\r\n card.classList.add(item.className);\r\n }\r\n if (typeof item.content === 'string') {\r\n card.textContent = item.content;\r\n } else {\r\n card.appendChild(item.content);\r\n }\r\n const key = this.getDedupKey(item);\r\n if (key !== undefined) {\r\n const close = document.createElement('button');\r\n close.type = 'button';\r\n close.dataset['popupClose'] = String(key);\r\n close.textContent = '×';\r\n close.addEventListener('click', () => this.remove(key));\r\n card.appendChild(close);\r\n }\r\n this.container!.appendChild(card);\r\n });\r\n }\r\n}\r\n","import VectorLayer from 'ol/layer/Vector';\r\nimport ClusterSource from 'ol/source/Cluster';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport type OlMap from 'ol/Map';\r\n\r\nimport type {\r\n MapContext,\r\n MapSchema,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n} from '../public/types';\r\nimport { createMapContext } from './map-context';\r\nimport { InteractionManager } from './interaction-manager';\r\nimport { ClusteredVectorLayer } from './clustered-layer';\r\nimport { PlainVectorLayer } from './plain-layer';\r\nimport { PopupHost } from './popup-host';\r\nimport { FlushScheduler } from './scheduler';\r\n\r\nexport class LayerManager<Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]> {\r\n private readonly layers: Record<string, VectorLayer> = {};\r\n private readonly apis: Record<string, VectorLayerApi<any, any>> = {};\r\n private readonly interactions: InteractionManager<Layers>;\r\n private readonly ctx: MapContext;\r\n\r\n private constructor(private readonly map: OlMap, schema: MapSchema<Layers>) {\r\n const popupHost = schema.options?.popupHost ? new PopupHost(schema.options.popupHost) : undefined;\r\n const scheduler = new FlushScheduler(schema.options?.scheduler?.policy ?? 'microtask');\r\n const ctx = createMapContext(this.map, this.apis, popupHost, scheduler);\r\n this.ctx = ctx;\r\n\r\n schema.layers.forEach((descriptor) => {\r\n const source = new VectorSource<any>();\r\n const clusterSource = descriptor.clustering\r\n ? new ClusterSource({\r\n source,\r\n distance: descriptor.clustering.distance,\r\n })\r\n : null;\r\n const layer = new VectorLayer({ source });\r\n if (descriptor.zIndex !== undefined) {\r\n layer.setZIndex(descriptor.zIndex);\r\n }\r\n if (descriptor.visibleByDefault !== undefined) {\r\n layer.setVisible(descriptor.visibleByDefault);\r\n }\r\n if (descriptor.title) {\r\n layer.set('title', descriptor.title);\r\n }\r\n layer.set('id', descriptor.id);\r\n\r\n const scheduleInvalidate = () => scheduler.schedule(layer, () => layer.changed());\r\n const api = descriptor.clustering\r\n ? new ClusteredVectorLayer({\r\n descriptor,\r\n layer,\r\n source,\r\n clusterSource: clusterSource!,\r\n ctx,\r\n scheduleInvalidate,\r\n })\r\n : new PlainVectorLayer({\r\n descriptor,\r\n layer,\r\n source,\r\n ctx,\r\n scheduleInvalidate,\r\n });\r\n\r\n this.layers[descriptor.id] = layer;\r\n this.apis[descriptor.id] = api;\r\n this.map.addLayer(layer);\r\n });\r\n\r\n this.interactions = new InteractionManager({\r\n ctx,\r\n map: this.map,\r\n schema,\r\n layers: this.layers,\r\n apis: this.apis,\r\n });\r\n }\r\n\r\n static create<Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]>(\r\n map: OlMap,\r\n schema: MapSchema<Layers>,\r\n ): LayerManager<Layers> {\r\n return new LayerManager(map, schema);\r\n }\r\n\r\n getLayer(id: string): VectorLayer | undefined {\r\n return this.layers[id];\r\n }\r\n\r\n getApi(id: string): VectorLayerApi<any, any> | undefined {\r\n return this.apis[id];\r\n }\r\n\r\n getApis(): Record<string, VectorLayerApi<any, any>> {\r\n return { ...this.apis };\r\n }\r\n\r\n getContext(): MapContext {\r\n return this.ctx;\r\n }\r\n\r\n refreshEnabled(): void {\r\n this.interactions.refreshEnabled();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of lib\r\n */\r\n\r\nexport * from './lib/lib.service';\r\nexport * from './lib/lib.component';\r\nexport * from './lib/map-framework';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aur-openlayers.mjs","sources":["../../../projects/lib/src/lib/lib.service.ts","../../../projects/lib/src/lib/lib.component.ts","../../../projects/lib/src/lib/map-framework/public/types.ts","../../../projects/lib/src/lib/map-framework/runtime/scheduler.ts","../../../projects/lib/src/lib/map-framework/runtime/map-context.ts","../../../projects/lib/src/lib/map-framework/runtime/cluster-utils.ts","../../../projects/lib/src/lib/map-framework/runtime/fit-layer.utils.ts","../../../projects/lib/src/lib/map-framework/runtime/style/feature-states.ts","../../../projects/lib/src/lib/map-framework/runtime/interaction-manager.ts","../../../projects/lib/src/lib/map-framework/runtime/style/style-cache.ts","../../../projects/lib/src/lib/map-framework/runtime/style/style-pipeline.ts","../../../projects/lib/src/lib/map-framework/runtime/feature-registry.ts","../../../projects/lib/src/lib/map-framework/runtime/vector-layer-base.ts","../../../projects/lib/src/lib/map-framework/runtime/clustered-layer.ts","../../../projects/lib/src/lib/map-framework/runtime/plain-layer.ts","../../../projects/lib/src/lib/map-framework/runtime/popup-host.ts","../../../projects/lib/src/lib/map-framework/runtime/layer-manager.ts","../../../projects/lib/src/public-api.ts","../../../projects/lib/src/aur-openlayers.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-lib',\r\n imports: [],\r\n template: `\r\n <p>\r\n lib works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class LibComponent {\r\n\r\n}\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type MapBrowserEvent from 'ol/MapBrowserEvent';\r\nimport type {ModifyEvent} from 'ol/interaction/Modify';\r\nimport type OlMap from 'ol/Map';\r\nimport type Style from 'ol/style/Style';\r\nimport type {TranslateEvent} from 'ol/interaction/Translate';\r\n\r\n/**\r\n * Идентификатор состояния стиля, применяемого к фичам.\r\n *\r\n * Используйте строковые константы уровня проекта (например, `\"HOVER\"`).\r\n *\r\n * @example\r\n * const state: FeatureStyleState = 'SELECTED';\r\n */\r\nexport type FeatureStyleState = string;\r\n\r\n/**\r\n * Идентификатор доменной модели.\r\n *\r\n * @example\r\n * const id: Id = 'point-1';\r\n */\r\nexport type Id = string | number;\r\n\r\n/**\r\n * Значение или функция, которая его вычисляет.\r\n *\r\n * Полезно для ленивых вычислений и адаптации к контексту.\r\n *\r\n * @example\r\n * const width: MaybeFn<number, [zoom: number]> = (zoom) => zoom > 10 ? 3 : 1;\r\n */\r\nexport type MaybeFn<T, A extends any[] = []> = T | ((...args: A) => T);\r\n\r\n/**\r\n * Патч: либо частичный объект, либо функция, вычисляющая патч.\r\n *\r\n * Используется для частичных переопределений стиля.\r\n *\r\n * @example\r\n * const patch: Patch<{ color: string }> = { color: 'red' };\r\n */\r\nexport type Patch<T> = Partial<T> | ((prev: T) => Partial<T>);\r\n\r\n/**\r\n * Признак включённости: статическое значение или вычисляемая функция.\r\n *\r\n * @example\r\n * const enabled: Enabled = () => isEditMode;\r\n */\r\nexport type Enabled = boolean | (() => boolean);\r\n\r\n/**\r\n * Политика сброса (flush) для батчинга обновлений.\r\n *\r\n * @example\r\n * const policy: FlushPolicy = 'raf';\r\n */\r\nexport type FlushPolicy = 'microtask' | 'raf';\r\n\r\n/**\r\n * Опции батчинга для `MapContext.batch`.\r\n *\r\n * @example\r\n * ctx.batch(doWork, { policy: 'raf' });\r\n */\r\nexport type BatchOptions = {\r\n /** Политика сброса для конкретного батча. */\r\n policy?: FlushPolicy;\r\n};\r\n\r\n/**\r\n * Параметры текущего вида карты для LOD-стилей.\r\n *\r\n * @example\r\n * const view: StyleView = { resolution: 12.5, zoom: 8 };\r\n */\r\nexport type StyleView = {\r\n /** Текущее разрешение OpenLayers (`map.getView().getResolution()`). */\r\n resolution: number;\r\n /** Опциональный зум, если он вычисляется в реализации. */\r\n zoom?: number;\r\n};\r\n\r\n/**\r\n * Состояние фичи: одиночное или составное.\r\n *\r\n * @example\r\n * const state: FeatureState = ['HOVER', 'SELECTED'];\r\n */\r\nexport type FeatureState = FeatureStyleState | FeatureStyleState[];\r\n\r\n/**\r\n * Результат hit-test для текущего слоя: модель + соответствующая фича.\r\n *\r\n * @example\r\n * const item: HitItem<Model, Geometry> = { model, feature };\r\n */\r\nexport type HitItem<M, G extends Geometry> = {\r\n /** Доменных объект, связанный с фичей. */\r\n model: M;\r\n /** Фича OpenLayers. */\r\n feature: Feature<G>;\r\n};\r\n\r\n/**\r\n * Общие настройки для interactions (hover, click, translate и т.д.).\r\n *\r\n * @example\r\n * const base: InteractionBase = { enabled: true, propagation: 'stop' };\r\n */\r\nexport type InteractionBase = {\r\n /**\r\n * Включённость интеракции. Если не задано — считается включённой.\r\n */\r\n enabled?: Enabled;\r\n /**\r\n * UX: курсор для interaction на DOM-элементе карты.\r\n */\r\n cursor?: string;\r\n /**\r\n * Состояния, которые должны применяться при активности интеракции.\r\n * Если не задано — управление состояниями полностью на стороне пользователя.\r\n */\r\n state?: FeatureState;\r\n /**\r\n * Пропагация события на нижележащие слои, если текущий слой обработал событие.\r\n */\r\n propagation?: 'stop' | 'continue' | 'auto';\r\n};\r\n\r\n/**\r\n * Результат обработчика интеракции: `true` — событие обработано.\r\n *\r\n * @example\r\n * const handled: InteractionHandlerResult = true;\r\n */\r\nexport type InteractionHandlerResult = boolean | void;\r\n\r\n/**\r\n * Причина изменения модели, инициированного картой.\r\n *\r\n * @example\r\n * const reason: ModelChangeReason = 'translate';\r\n */\r\nexport type ModelChangeReason = 'mutate' | 'translate' | 'modify';\r\n\r\n/**\r\n * Изменение модели, инициированное картой.\r\n *\r\n * @example\r\n * onModelsChanged?.((changes) => console.log(changes.length));\r\n */\r\nexport type ModelChange<M> = {\r\n /** Предыдущая версия модели. */\r\n prev: M;\r\n /** Новая версия модели (immutable). */\r\n next: M;\r\n /** Причина изменения. */\r\n reason: ModelChangeReason;\r\n};\r\n\r\n/**\r\n * Причина внешнего изменения коллекции моделей слоя.\r\n *\r\n * @example\r\n * const reason: ModelsSetReason = 'add';\r\n */\r\nexport type ModelsSetReason = 'set' | 'add' | 'remove' | 'clear';\r\n\r\n/**\r\n * Ошибка, выбрасываемая при нарушении уникальности id моделей слоя.\r\n *\r\n * Возникает при попытке:\r\n * - добавить модель с уже существующим id;\r\n * - передать в setModels массив с дублирующимися id.\r\n */\r\nexport class DuplicateModelIdError extends Error {\r\n public override readonly name = 'DuplicateModelIdError';\r\n\r\n constructor(\r\n /** Дублирующийся id. */\r\n public readonly id: Id,\r\n /** Идентификатор слоя. */\r\n public readonly layerId: string,\r\n message?: string,\r\n ) {\r\n super(message ?? `Model with id \"${String(id)}\" already exists on layer (${layerId}).`);\r\n }\r\n}\r\n\r\n/**\r\n * Событие внешнего изменения коллекции моделей слоя.\r\n */\r\nexport type ModelsCollectionEvent<M> = {\r\n /** Снимок коллекции до изменения. */\r\n prev: readonly M[];\r\n /** Снимок коллекции после изменения. */\r\n next: readonly M[];\r\n /** Причина изменения. */\r\n reason: ModelsSetReason;\r\n /**\r\n * Опциональный diff.\r\n *\r\n * Гарантируется для reason = 'add' | 'remove' | 'clear'.\r\n * Может отсутствовать для reason = 'set'.\r\n */\r\n added?: readonly M[];\r\n removed?: readonly M[];\r\n};\r\n\r\n/**\r\n * API управления коллекцией моделей слоя.\r\n */\r\nexport interface VectorLayerCollectionApi<M> {\r\n /** Текущий иммутабельный снимок моделей слоя. */\r\n getAllModels: () => readonly M[];\r\n\r\n /**\r\n * Полная замена набора моделей.\r\n *\r\n * Требования:\r\n * - Все id в массиве должны быть уникальны.\r\n * - При обнаружении дубликата выбрасывается DuplicateModelIdError.\r\n */\r\n setModels: (models: readonly M[]) => void;\r\n\r\n /**\r\n * Подписка на внешние изменения коллекции моделей\r\n * (set / add / remove / clear).\r\n */\r\n onModelsCollectionChanged: (cb: (e: ModelsCollectionEvent<M>) => void) => Unsubscribe;\r\n\r\n /**\r\n * Добавляет модель в конец коллекции.\r\n *\r\n * @throws DuplicateModelIdError если модель с таким id уже существует.\r\n */\r\n addModel: (model: M) => void;\r\n\r\n /**\r\n * Добавляет несколько моделей в конец коллекции\r\n * (в порядке входного массива).\r\n *\r\n * @throws DuplicateModelIdError\r\n */\r\n addModels: (models: readonly M[]) => void;\r\n\r\n /**\r\n * Удаляет модели по id.\r\n *\r\n * @returns Количество реально удалённых моделей.\r\n */\r\n removeModelsById: (ids: readonly Id[]) => number;\r\n\r\n /**\r\n * Полностью очищает слой.\r\n */\r\n clear: () => void;\r\n}\r\n\r\nexport type MutateOptions = {\r\n /** Причина изменения (по умолчанию 'mutate'). */\r\n reason?: ModelChangeReason;\r\n /** Без оповещения подписчиков (по умолчанию false). */\r\n silent?: boolean;\r\n};\r\n\r\n/**\r\n * Паддинги для операций fit/center.\r\n *\r\n * @example\r\n * const padding: ViewFitPadding = { top: 16, right: 16, bottom: 16, left: 16 };\r\n */\r\nexport type ViewFitPadding =\r\n | { all: number }\r\n | { vertical: number; horizontal: number }\r\n | { top: number; right: number; bottom: number; left: number };\r\n\r\n/**\r\n * Опции fit/center операций.\r\n *\r\n * @example\r\n * layer.centerOnModel(1, { duration: 300, maxZoom: 18 });\r\n */\r\nexport type ViewFitOptions = {\r\n /** Паддинги вокруг области. */\r\n padding?: ViewFitPadding;\r\n /** Длительность анимации (мс). */\r\n duration?: number;\r\n /** Верхний предел увеличения. */\r\n maxZoom?: number;\r\n};\r\n\r\n/**\r\n * Функция отписки от событий.\r\n *\r\n * @example\r\n * const unsubscribe: Unsubscribe = onModelsChanged(() => {});\r\n */\r\nexport type Unsubscribe = () => void;\r\n\r\n/**\r\n * Публичный API слоя для бизнес-логики и других дескрипторов.\r\n *\r\n * @example\r\n * ctx.layers.points.mutate(id, (prev) => ({ ...prev, active: true }));\r\n */\r\nexport type VectorLayerApi<M, G extends Geometry> = VectorLayerCollectionApi<M> & {\r\n /** Запросить пересчёт слоя/стилей. */\r\n invalidate: () => void;\r\n /** Найти модель по фиче слоя. */\r\n getModelByFeature: (feature: Feature<G>) => M | undefined;\r\n /**\r\n * Иммутабельное обновление модели по id.\r\n * `update` обязан вернуть новый объект (или тот же для no-op).\r\n */\r\n mutate: (\r\n id: Id,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ) => void;\r\n\r\n /** Массовая мутация (опционально). */\r\n mutateMany?: (\r\n ids: Array<Id>,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ) => void;\r\n\r\n /**\r\n * Переключение кластеризации (если слой её поддерживает).\r\n */\r\n setClusteringEnabled?: (enabled: boolean) => void;\r\n /** Текущее состояние кластеризации. */\r\n isClusteringEnabled?: () => boolean;\r\n /**\r\n * Уведомления об изменениях моделей, инициированных картой.\r\n */\r\n onModelsChanged?: (cb: (changes: ModelChange<M>[]) => void) => Unsubscribe;\r\n\r\n /**\r\n * Центрирует карту на всех фичах слоя.\r\n */\r\n centerOnAllModels: (opts?: ViewFitOptions) => void;\r\n\r\n /**\r\n * Центрирует карту на одной фиче по id.\r\n */\r\n centerOnModel: (id: Id, opts?: ViewFitOptions) => void;\r\n\r\n /**\r\n * Центрирует карту на наборе фичей по списку id.\r\n */\r\n centerOnModels: (ids: ReadonlyArray<Id>, opts?: ViewFitOptions) => void;\r\n\r\n /**\r\n * Управление видимостью слоя.\r\n */\r\n setVisible: (visible: boolean) => void;\r\n\r\n /**\r\n * Текущее состояние видимости слоя.\r\n */\r\n isVisible: () => boolean;\r\n\r\n /**\r\n * Установить прозрачность слоя.\r\n */\r\n setOpacity: (opacity: number) => void;\r\n\r\n /**\r\n * Получить прозрачность слоя.\r\n */\r\n getOpacity: () => number;\r\n\r\n /**\r\n * Установить z-index слоя.\r\n */\r\n setZIndex: (z: number) => void;\r\n\r\n /**\r\n * Получить z-index слоя.\r\n */\r\n getZIndex: () => number | undefined;\r\n\r\n /**\r\n * Получить модель по id.\r\n */\r\n getModelById: (id: Id) => M | undefined;\r\n\r\n /**\r\n * Проверить наличие модели по id.\r\n */\r\n hasModel: (id: Id) => boolean;\r\n\r\n /**\r\n * Получить текущий снимок id моделей.\r\n */\r\n getAllModelIds: () => Array<Id>;\r\n\r\n /**\r\n * Применить состояния стиля к фичам по id.\r\n */\r\n setFeatureStates: (\r\n ids: Id | ReadonlyArray<Id>,\r\n states?: FeatureState,\r\n ) => void;\r\n\r\n /**\r\n * Сбросить состояния стиля у фич к состоянию по умолчанию.\r\n */\r\n clearFeatureStates: (ids: Id | ReadonlyArray<Id>) => void;\r\n};\r\n\r\n/**\r\n * Источник появления popup-элемента.\r\n *\r\n * @example\r\n * const source: PopupItemSource = 'feature';\r\n */\r\nexport type PopupItemSource = 'feature' | 'cluster' | 'interaction';\r\n\r\n/**\r\n * Элемент popup, отображаемый глобальным хостом.\r\n *\r\n * @example\r\n * const item: PopupItem<Model> = { model, content: 'Hello' };\r\n */\r\nexport type PopupItem<M> = {\r\n /** Модель, связанная с элементом popup. */\r\n model: M;\r\n /** Контент popup. */\r\n content: string | HTMLElement;\r\n /** CSS-класс для стилизации. */\r\n className?: string;\r\n /** Смещение popup относительно координаты. */\r\n offset?: number[];\r\n /** Ключ дедупликации элементов. */\r\n dedupKey?: Id;\r\n /** Приоритет сортировки (чем больше, тем выше). */\r\n priority?: number;\r\n /** Источник элемента. */\r\n source?: PopupItemSource;\r\n};\r\n\r\n/**\r\n * Контракт хоста попапов, агрегирующего элементы со всех слоёв.\r\n *\r\n * @example\r\n * ctx.popupHost?.set([item]);\r\n */\r\nexport interface PopupHostApi {\r\n /** Добавить элементы в текущий список. */\r\n push: (items: PopupItem<any>[]) => void;\r\n /** Заменить список элементов. */\r\n set: (items: PopupItem<any>[]) => void;\r\n /** Очистить список. */\r\n clear: () => void;\r\n /** Удалить элемент по ключу. */\r\n remove: (key: Id) => void;\r\n /** Получить текущие элементы. */\r\n getItems: () => PopupItem<any>[];\r\n /** Примонтировать popup-хост к DOM-узлу. */\r\n mount: (target: HTMLElement | (() => HTMLElement)) => void;\r\n /** Освободить ресурсы и отписки. */\r\n dispose: () => void;\r\n}\r\n\r\n/**\r\n * Минимальный контекст, доступный обработчикам взаимодействий.\r\n *\r\n * @example\r\n * controller.bind({ map, layers, batch });\r\n */\r\nexport type MapContext = {\r\n /** Экземпляр карты OpenLayers. */\r\n map: OlMap;\r\n /** Доступ к слоям по id (типизируется реализацией). */\r\n layers: Record<string, VectorLayerApi<any, any>>;\r\n /** Глобальный хост попапов, если включён. */\r\n popupHost?: PopupHostApi;\r\n /**\r\n * Батчинг для группировки mutate/invalidate.\r\n */\r\n batch: (fn: () => void, options?: BatchOptions) => void;\r\n};\r\n\r\n/**\r\n * Контроллер, который связывается с контекстом карты.\r\n *\r\n * @example\r\n * controller.bind(ctx);\r\n */\r\nexport type MapController = {\r\n /** Связать контроллер с контекстом. */\r\n bind: (ctx: MapContext) => void;\r\n /** Освободить ресурсы при отвязке (опционально). */\r\n unbind?: () => void;\r\n};\r\n\r\n/**\r\n * Описание фичи: геометрия, стиль, взаимодействия и popup.\r\n *\r\n * @example\r\n * const feature: FeatureDescriptor<Model, Geometry, StyleOpts> = { ... };\r\n */\r\nexport interface FeatureDescriptor<M, G extends Geometry, OPTS extends object> {\r\n /** Получение идентификатора модели. */\r\n id: (model: M) => Id;\r\n /** Синхронизация модели и геометрии. */\r\n geometry: {\r\n /** Преобразование модели в геометрию. */\r\n fromModel: (model: M) => G;\r\n /** Применение геометрии к модели (immutable). */\r\n applyGeometryToModel: (prev: M, geometry: G) => M;\r\n /** Хук после создания фичи. */\r\n onCreate?: (args: { feature: Feature<G>; model: M; ctx: MapContext }) => void;\r\n };\r\n /** Настройка стилей. */\r\n style: {\r\n /** Базовые параметры стиля с учётом LOD. */\r\n base: MaybeFn<OPTS, [model: M, view: StyleView]>;\r\n /** Патчи по состояниям (объединяются с base). */\r\n states?: Partial<\r\n Record<FeatureStyleState, MaybeFn<Patch<OPTS>, [model: M, view: StyleView]>>\r\n >;\r\n /** Рендер стиля по параметрам. */\r\n render: (opts: OPTS, view: StyleView) => Style | Style[];\r\n /** Опциональный ключ кеша. */\r\n cacheKey?: (opts: OPTS, view: StyleView) => string;\r\n /** Приоритет слияния состояний. */\r\n statePriority?: FeatureStyleState[];\r\n };\r\n /**\r\n * Интеракции слоя.\r\n * Поведение описано в `contract.md`.\r\n */\r\n interactions?: {\r\n /**\r\n * Обработка клика по карте в контексте слоя.\r\n * Коллбек вызывается даже при отсутствии фич под курсором\r\n * (в этом случае `items` будет пустым массивом).\r\n */\r\n click?: InteractionBase & {\r\n /** Переопределение hitTolerance для клика. */\r\n hitTolerance?: number;\r\n /** Коллбек клика по текущему слою. */\r\n onClick: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /**\r\n * Обработка двойного клика по карте в контексте слоя.\r\n * Коллбек вызывается даже при отсутствии фич под курсором\r\n * (в этом случае `items` будет пустым массивом).\r\n */\r\n doubleClick?: InteractionBase & {\r\n /** Переопределение hitTolerance для doubleClick. */\r\n hitTolerance?: number;\r\n /** Коллбек двойного клика по текущему слою. */\r\n onDoubleClick: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /**\r\n * Hover-взаимодействие: вход и выход указателя.\r\n */\r\n hover?: InteractionBase & {\r\n /** Переопределение hitTolerance для hover. */\r\n hitTolerance?: number;\r\n /** Указатель вошёл в фичи текущего слоя. */\r\n onEnter?: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n /** Указатель вышел из фич текущего слоя. */\r\n onLeave?: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /**\r\n * Select-взаимодействие: выбор фич и очистка выбора.\r\n */\r\n select?: InteractionBase & {\r\n /** Переопределение hitTolerance для select. */\r\n hitTolerance?: number;\r\n /**\r\n * Фильтрация/выбор целевых элементов select из кандидатов hit-test.\r\n *\r\n * Возврат `null/undefined` или пустого массива означает игнорирование select\r\n * для текущего клика (без `onSelect`, `onClear` и без изменения `state`).\r\n */\r\n pickTargets?: (args: {\r\n candidates: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => Array<HitItem<M, G>> | null | undefined;\r\n /** Выбраны фичи текущего слоя. */\r\n onSelect?: (args: {\r\n items: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n /** Очистка выбора текущего слоя. */\r\n onClear?: (args: {\r\n ctx: MapContext;\r\n event: MapBrowserEvent<UIEvent>;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /** Перетаскивание фичи целиком. */\r\n translate?: InteractionBase & {\r\n /** Переопределение hitTolerance для translate. */\r\n hitTolerance?: number;\r\n /** Ограничение частоты обновлений при перемещении (мс). */\r\n moveThrottleMs?: number;\r\n /**\r\n * Выбор цели из списка кандидатов на старте.\r\n */\r\n pickTarget?: (args: {\r\n candidates: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: TranslateEvent;\r\n }) => HitItem<M, G> | null | undefined;\r\n /** Старт перемещения. */\r\n onStart?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: TranslateEvent;\r\n }) => InteractionHandlerResult;\r\n /** Перемещение в процессе. */\r\n onChange?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: TranslateEvent;\r\n }) => InteractionHandlerResult;\r\n /** Завершение перемещения. */\r\n onEnd?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: TranslateEvent;\r\n }) => InteractionHandlerResult;\r\n };\r\n\r\n /** Редактирование геометрии (вершины/сегменты). */\r\n modify?: InteractionBase & {\r\n /** Переопределение hitTolerance для modify. */\r\n hitTolerance?: number;\r\n /** Ограничение частоты обновлений при редактировании (мс). */\r\n moveThrottleMs?: number;\r\n /** Стиль хэндлов вершин нативного Modify. */\r\n vertexStyle?: Style | Style[];\r\n /**\r\n * Выбор цели из списка кандидатов на старте.\r\n */\r\n pickTarget?: (args: {\r\n candidates: Array<HitItem<M, G>>;\r\n ctx: MapContext;\r\n event: ModifyEvent;\r\n }) => HitItem<M, G> | null | undefined;\r\n /** Старт редактирования. */\r\n onStart?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: ModifyEvent;\r\n }) => InteractionHandlerResult;\r\n /** Обновления в процессе. */\r\n onChange?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: ModifyEvent;\r\n }) => InteractionHandlerResult;\r\n /** Завершение редактирования. */\r\n onEnd?: (args: {\r\n item: HitItem<M, G>;\r\n ctx: MapContext;\r\n event: ModifyEvent;\r\n }) => InteractionHandlerResult;\r\n };\r\n };\r\n /**\r\n * Формирование элемента popup для фичи.\r\n */\r\n popup?: {\r\n /** Включённость popup на фичах. */\r\n enabled?: Enabled;\r\n /** Создание popup-элемента. */\r\n item: (args: {\r\n model: M;\r\n feature: Feature<G>;\r\n ctx: MapContext;\r\n event?: MapBrowserEvent<UIEvent>;\r\n }) => PopupItem<M>;\r\n };\r\n}\r\n\r\n/**\r\n * Конфигурация кластеризации слоя.\r\n *\r\n * @example\r\n * clustering: { enabledByDefault: true, clusterStyle: { render } }\r\n */\r\nexport type LayerClustering<M> = {\r\n /** Кластеризация включена по умолчанию. */\r\n enabledByDefault?: boolean;\r\n /** Параметры OL Cluster (px). */\r\n distance?: number;\r\n minDistance?: number;\r\n /** Стиль для cluster-feature. */\r\n clusterStyle: {\r\n /** Рендер стиля кластера. */\r\n render: (args: { models: M[]; size: number; view: StyleView }) => Style | Style[];\r\n /** Опциональный ключ кеша. */\r\n cacheKey?: (args: { models: M[]; size: number; view: StyleView }) => string;\r\n };\r\n /** Popup для кластера. */\r\n popup?: {\r\n /** Включённость popup на кластерах. */\r\n enabled?: Enabled;\r\n /** Создание popup-элемента для кластера. */\r\n item: (args: {\r\n models: M[];\r\n size: number;\r\n ctx: MapContext;\r\n event?: MapBrowserEvent<UIEvent>;\r\n }) => PopupItem<M>;\r\n /** Лимит элементов для кластера (переопределяет popupHost.maxItems). */\r\n maxItems?: number;\r\n };\r\n /**\r\n * Раскрытие кластера при клике.\r\n */\r\n expandOnClick?: {\r\n /** Режим раскрытия. */\r\n mode?: 'zoomToExtent' | 'zoomIn';\r\n /** Паддинги для fit(extent). */\r\n padding?: ViewFitPadding;\r\n /** Максимальный зум при fit/zoomIn. */\r\n maxZoom?: number;\r\n /** Шаг увеличения для zoomIn. */\r\n zoomDelta?: number;\r\n /** Длительность анимации (мс). */\r\n durationMs?: number;\r\n /** Хук после раскрытия кластера. */\r\n onExpanded?: (args: { models: M[]; ctx: MapContext }) => void;\r\n };\r\n};\r\n\r\n/**\r\n * Дескриптор слоя (тип модели + стиль + интеракции).\r\n *\r\n * @example\r\n * const layer: VectorLayerDescriptor<Model, Geometry, StyleOpts> = { id: 'points', feature };\r\n */\r\nexport interface VectorLayerDescriptor<\r\n M,\r\n G extends Geometry,\r\n OPTS extends object,\r\n ID extends string = string\r\n> {\r\n /** Идентификатор слоя. */\r\n id: ID;\r\n /** Человекочитаемое имя слоя. */\r\n title?: string;\r\n /** z-index слоя. */\r\n zIndex?: number;\r\n /** Видимость слоя по умолчанию. */\r\n visibleByDefault?: boolean;\r\n /** Описание фич и поведения слоя. */\r\n feature: FeatureDescriptor<M, G, OPTS>;\r\n /** Кластеризация слоя (опционально). */\r\n clustering?: LayerClustering<M>;\r\n}\r\n\r\n/**\r\n * Схема карты: слои + общие настройки.\r\n *\r\n * @example\r\n * const schema: MapSchema<typeof layers> = { layers };\r\n */\r\nexport interface MapSchema<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> {\r\n /** Список слоёв. */\r\n layers: Layers;\r\n /** Глобальные опции карты. */\r\n options?: {\r\n /** Глобальное значение hitTolerance по умолчанию. */\r\n hitTolerance?: number;\r\n /** Параметры планировщика invalidate/changed. */\r\n scheduler?: {\r\n /** Политика flush по умолчанию. */\r\n policy?: FlushPolicy;\r\n /** Политика flush для translate/modify. */\r\n interactionPolicy?: FlushPolicy;\r\n };\r\n /**\r\n * Глобальный popup-хост.\r\n */\r\n popupHost?: {\r\n /** Включённость popup-хоста. */\r\n enabled?: Enabled;\r\n /** Автоматический режим показа. */\r\n autoMode?: 'off' | 'click' | 'hover';\r\n /** Максимум элементов в списке. */\r\n maxItems?: number;\r\n /** Сортировка popup-элементов. */\r\n sort?: (a: PopupItem<any>, b: PopupItem<any>) => number;\r\n /** Куда монтировать popup-хост. */\r\n mount?: HTMLElement | (() => HTMLElement);\r\n /** Стек поверх других popup-хостов. */\r\n stack?: 'stop' | 'continue';\r\n };\r\n };\r\n}\r\n","import type { BatchOptions, FlushPolicy } from '../public/types';\r\n\r\ntype TaskKey = unknown;\r\n\r\nexport class FlushScheduler {\r\n private readonly queue = new Map<TaskKey, () => void>();\r\n private pendingPolicy: FlushPolicy | null = null;\r\n private scheduledToken = 0;\r\n private rafId: number | null = null;\r\n private batchDepth = 0;\r\n private readonly policyStack: FlushPolicy[] = [];\r\n\r\n constructor(private readonly defaultPolicy: FlushPolicy = 'microtask') {}\r\n\r\n batch(fn: () => void, options?: BatchOptions): void {\r\n if (options?.policy) {\r\n this.policyStack.push(options.policy);\r\n }\r\n this.batchDepth += 1;\r\n try {\r\n fn();\r\n } finally {\r\n this.batchDepth = Math.max(0, this.batchDepth - 1);\r\n if (options?.policy) {\r\n this.policyStack.pop();\r\n }\r\n if (this.batchDepth === 0 && (this.pendingPolicy !== null || this.queue.size > 0)) {\r\n const policy = this.pendingPolicy ?? this.currentPolicy();\r\n this.pendingPolicy = policy;\r\n this.scheduleFlush(policy);\r\n }\r\n }\r\n }\r\n\r\n schedule(key: TaskKey, task: () => void, policy?: FlushPolicy): void {\r\n this.queue.set(key, task);\r\n this.requestFlush(policy);\r\n }\r\n\r\n private requestFlush(policy?: FlushPolicy): void {\r\n const desired = policy ?? this.currentPolicy();\r\n if (this.batchDepth > 0) {\r\n this.pendingPolicy = this.combinePolicies(this.pendingPolicy, desired);\r\n return;\r\n }\r\n\r\n if (this.pendingPolicy) {\r\n if (this.shouldUpgradePolicy(this.pendingPolicy, desired)) {\r\n this.pendingPolicy = desired;\r\n this.scheduleFlush(desired);\r\n }\r\n return;\r\n }\r\n\r\n this.pendingPolicy = desired;\r\n this.scheduleFlush(desired);\r\n }\r\n\r\n private scheduleFlush(policy: FlushPolicy): void {\r\n const token = ++this.scheduledToken;\r\n if (policy === 'raf') {\r\n if (this.rafId !== null) {\r\n cancelAnimationFrame(this.rafId);\r\n }\r\n this.rafId = requestAnimationFrame(() => this.flush('raf', token));\r\n return;\r\n }\r\n\r\n queueMicrotask(() => this.flush('microtask', token));\r\n }\r\n\r\n private flush(policy: FlushPolicy, token: number): void {\r\n if (token !== this.scheduledToken || this.pendingPolicy !== policy) {\r\n return;\r\n }\r\n this.pendingPolicy = null;\r\n if (policy === 'raf') {\r\n this.rafId = null;\r\n }\r\n const tasks = Array.from(this.queue.values());\r\n this.queue.clear();\r\n tasks.forEach((task) => task());\r\n }\r\n\r\n private currentPolicy(): FlushPolicy {\r\n if (this.policyStack.length > 0) {\r\n return this.policyStack[this.policyStack.length - 1];\r\n }\r\n return this.defaultPolicy;\r\n }\r\n\r\n private combinePolicies(\r\n current: FlushPolicy | null,\r\n next: FlushPolicy,\r\n ): FlushPolicy | null {\r\n if (!current) {\r\n return next;\r\n }\r\n return current === 'raf' || next === 'raf' ? 'raf' : 'microtask';\r\n }\r\n\r\n private shouldUpgradePolicy(current: FlushPolicy, next: FlushPolicy): boolean {\r\n return current === 'microtask' && next === 'raf';\r\n }\r\n}\r\n","import type OlMap from 'ol/Map';\r\n\r\nimport type { BatchOptions, MapContext, PopupHostApi, VectorLayerApi } from '../public/types';\r\nimport { FlushScheduler } from './scheduler';\r\n\r\nexport const createMapContext = (\r\n map: OlMap,\r\n layers: Record<string, VectorLayerApi<any, any>>,\r\n popupHost?: PopupHostApi,\r\n scheduler: FlushScheduler = new FlushScheduler(),\r\n): MapContext => {\r\n return {\r\n map,\r\n layers,\r\n popupHost,\r\n batch: (fn: () => void, options?: BatchOptions) => scheduler.batch(fn, options),\r\n };\r\n};\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nconst CLUSTER_FEATURES_KEY = 'features';\r\n\r\nexport const getClusterFeatures = (\r\n feature: Feature<Geometry>,\r\n): Array<Feature<Geometry>> | null => {\r\n const features = feature.get(CLUSTER_FEATURES_KEY);\r\n if (!Array.isArray(features)) {\r\n return null;\r\n }\r\n const items = features.filter((item): item is Feature<Geometry> => {\r\n if (!item || typeof item !== 'object') {\r\n return false;\r\n }\r\n const candidate = item as { get?: unknown; getGeometry?: unknown };\r\n return typeof candidate.get === 'function' && typeof candidate.getGeometry === 'function';\r\n });\r\n if (items.length === 0) {\r\n return null;\r\n }\r\n return items;\r\n};\r\n","import type {ViewFitOptions, ViewFitPadding} from '../public/types';\r\n\r\n/**\r\n * Default padding for View#fit in pixels.\r\n * Order: [top, right, bottom, left]\r\n */\r\nconst DEFAULT_OL_PADDING: [number, number, number, number] = [64, 64, 64, 64];\r\nconst DEFAULT_FIT_DURATION = 500;\r\n\r\nexport function toOlPadding(\r\n p?: ViewFitPadding,\r\n fallback: [number, number, number, number] | undefined = DEFAULT_OL_PADDING,\r\n): [number, number, number, number] | undefined {\r\n if (!p) {\r\n return fallback;\r\n }\r\n\r\n if ('all' in p) {\r\n const a = p.all;\r\n return [a, a, a, a];\r\n }\r\n\r\n if ('vertical' in p && 'horizontal' in p) {\r\n return [p.vertical, p.horizontal, p.vertical, p.horizontal];\r\n }\r\n\r\n return [p.top, p.right, p.bottom, p.left];\r\n}\r\n\r\nexport function toOlFitOptions(opts?: ViewFitOptions) {\r\n const padding = toOlPadding(opts?.padding) ?? DEFAULT_OL_PADDING;\r\n const duration = opts?.duration ?? DEFAULT_FIT_DURATION;\r\n\r\n // OL View#fit options are a plain object; keep it minimal & typed-friendly\r\n const fitOpts: any = {padding, duration};\r\n if (opts?.maxZoom != null) {\r\n fitOpts.maxZoom = opts.maxZoom;\r\n }\r\n return fitOpts;\r\n}\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nconst STATES_KEY = '__mff_states__';\r\n\r\nexport const getFeatureStates = (feature: Feature<Geometry>): string[] => {\r\n const states = feature.get(STATES_KEY);\r\n if (Array.isArray(states)) {\r\n return states;\r\n }\r\n if (typeof states === 'string') {\r\n return [states];\r\n }\r\n return [];\r\n};\r\n\r\nexport const setFeatureStates = (feature: Feature<Geometry>, states: string[]): void => {\r\n feature.set(STATES_KEY, states);\r\n};\r\n\r\nexport const clearFeatureStates = (feature: Feature<Geometry>): void => {\r\n feature.set(STATES_KEY, []);\r\n};\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type MapBrowserEvent from 'ol/MapBrowserEvent';\r\nimport type OlMap from 'ol/Map';\r\nimport type VectorLayer from 'ol/layer/Vector';\r\nimport Collection from 'ol/Collection';\r\nimport DragPan from 'ol/interaction/DragPan';\r\nimport Modify from 'ol/interaction/Modify';\r\nimport type { ModifyEvent } from 'ol/interaction/Modify';\r\nimport type { TranslateEvent } from 'ol/interaction/Translate';\r\nimport ClusterSource from 'ol/source/Cluster';\r\nimport type VectorSource from 'ol/source/Vector';\r\nimport type { EventsKey } from 'ol/events';\r\nimport * as Observable from 'ol/Observable';\r\nimport { createEmpty, extend, isEmpty } from 'ol/extent';\r\n\r\nimport type {\r\n FeatureState,\r\n HitItem,\r\n InteractionBase,\r\n InteractionHandlerResult,\r\n MapContext,\r\n MapSchema,\r\n PopupItem,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n} from '../public/types';\r\nimport { getClusterFeatures } from './cluster-utils';\r\nimport { toOlPadding } from './fit-layer.utils';\r\nimport { getFeatureStates, setFeatureStates } from './style/feature-states';\r\n\r\ntype LayerEntry = {\r\n descriptor: VectorLayerDescriptor<any, any, any, any>;\r\n layer: VectorLayer;\r\n api: VectorLayerApi<any, any>;\r\n index: number;\r\n};\r\n\r\ntype InteractionEnabledState = {\r\n click: boolean;\r\n doubleClick: boolean;\r\n hover: boolean;\r\n select: boolean;\r\n translate: boolean;\r\n modify: boolean;\r\n};\r\n\r\ntype ListenerName =\r\n | 'pointermove'\r\n | 'singleclick'\r\n | 'dblclick'\r\n | 'pointerdown'\r\n | 'pointerdrag'\r\n | 'pointerup';\r\n\r\ntype ActiveTranslate = {\r\n targetKey: string | number;\r\n startCoordinate: [number, number];\r\n lastCoordinate: [number, number];\r\n lastItem?: HitItem<any, any>;\r\n moveThrottleMs: number;\r\n translate: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['translate']\r\n >;\r\n pendingEvent?: MapBrowserEvent<UIEvent>;\r\n throttleTimer?: ReturnType<typeof setTimeout>;\r\n lastHandled?: boolean;\r\n};\r\n\r\ntype ActiveModify = {\r\n targetKey: string | number;\r\n lastItem?: HitItem<any, any>;\r\n moveThrottleMs: number;\r\n modify: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['modify']\r\n >;\r\n pendingEvent?: MapBrowserEvent<UIEvent>;\r\n throttleTimer?: ReturnType<typeof setTimeout>;\r\n lastHandled?: boolean;\r\n};\r\n\r\ntype NativeModifyEntry = {\r\n interaction: Modify;\r\n keys: EventsKey[];\r\n};\r\n\r\ntype ModifyInteraction = NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['modify']\r\n>;\r\n\r\nexport type HitTestArgs = {\r\n layerId: string;\r\n layer: VectorLayer;\r\n api: VectorLayerApi<any, any>;\r\n descriptor: VectorLayerDescriptor<any, any, any, any>;\r\n event: MapBrowserEvent<UIEvent>;\r\n hitTolerance: number;\r\n};\r\n\r\nexport type ClusterHit = {\r\n feature: Feature<Geometry>;\r\n features: Array<Feature<Geometry>>;\r\n size: number;\r\n};\r\n\r\nexport type HitTestResult = {\r\n items: Array<HitItem<any, any>>;\r\n cluster?: ClusterHit;\r\n};\r\n\r\nexport type HitTestFn = (args: HitTestArgs) => HitTestResult;\r\n\r\nexport type InteractionManagerOptions<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> = {\r\n ctx: MapContext;\r\n map: OlMap;\r\n schema: MapSchema<Layers>;\r\n layers: Record<string, VectorLayer>;\r\n apis: Record<string, VectorLayerApi<any, any>>;\r\n hitTest?: HitTestFn;\r\n};\r\n\r\nexport class InteractionManager<\r\n Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]\r\n> {\r\n private readonly ctx: MapContext;\r\n private readonly map: OlMap;\r\n private readonly schema: MapSchema<Layers>;\r\n private readonly layers: Record<string, VectorLayer>;\r\n private readonly apis: Record<string, VectorLayerApi<any, any>>;\r\n private readonly hitTest: HitTestFn;\r\n private readonly hoverItems = new Map<string, Map<string | number, HitItem<any, any>>>();\r\n private readonly selectedItems = new Map<string, Map<string | number, HitItem<any, any>>>();\r\n private readonly activeTranslates = new Map<string, ActiveTranslate>();\r\n private readonly activeModifies = new Map<string, ActiveModify>();\r\n private readonly nativeModifies = new Map<string, NativeModifyEntry>();\r\n private readonly popupStack: 'stop' | 'continue';\r\n private readonly listenerKeys = new Map<ListenerName, EventsKey>();\r\n private readonly enabledState = new Map<string, InteractionEnabledState>();\r\n private dragPanLocks = 0;\r\n private dragPanStates?: Map<DragPan, boolean>;\r\n private currentCursor?: string;\r\n\r\n constructor(options: InteractionManagerOptions<Layers>) {\r\n this.ctx = options.ctx;\r\n this.map = options.map;\r\n this.schema = options.schema;\r\n this.layers = options.layers;\r\n this.apis = options.apis;\r\n this.hitTest = options.hitTest ?? this.createDefaultHitTest();\r\n this.popupStack = this.schema.options?.popupHost?.stack ?? 'stop';\r\n this.refreshEnabled();\r\n }\r\n\r\n refreshEnabled(): void {\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n if (!popupEnabled) {\r\n this.ctx.popupHost?.clear();\r\n }\r\n\r\n const nextState = new Map<string, InteractionEnabledState>();\r\n this.schema.layers.forEach((descriptor) => {\r\n const interactions = descriptor.feature.interactions;\r\n nextState.set(descriptor.id, {\r\n click: !!interactions?.click && this.isEnabled(interactions.click.enabled),\r\n doubleClick:\r\n !!interactions?.doubleClick && this.isEnabled(interactions.doubleClick.enabled),\r\n hover: !!interactions?.hover && this.isEnabled(interactions.hover.enabled),\r\n select: !!interactions?.select && this.isEnabled(interactions.select.enabled),\r\n translate: !!interactions?.translate && this.isEnabled(interactions.translate.enabled),\r\n modify: !!interactions?.modify && this.isEnabled(interactions.modify.enabled),\r\n });\r\n });\r\n\r\n this.syncNativeModify(nextState);\r\n this.applyDisabledCleanup(nextState);\r\n this.enabledState.clear();\r\n nextState.forEach((value, key) => this.enabledState.set(key, value));\r\n this.syncListeners(popupEnabled);\r\n }\r\n\r\n handlePointerDown(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerdown')) {\r\n return;\r\n }\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const interactions = entry.descriptor.feature.interactions;\r\n\r\n const translate = interactions?.translate;\r\n if (translate && this.isEnabled(translate.enabled)) {\r\n const { items: candidates } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(translate.hitTolerance),\r\n });\r\n if (candidates.length > 0) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n event.coordinate as [number, number],\r\n 'translatestart',\r\n candidates,\r\n );\r\n\r\n let target: HitItem<any, any> | null | undefined;\r\n if (translate.pickTarget) {\r\n target = translate.pickTarget({ candidates, ctx: this.ctx, event: translateEvent });\r\n } else {\r\n target = candidates[0];\r\n }\r\n\r\n if (target) {\r\n const targetKey = entry.descriptor.feature.id(target.model);\r\n const resolved = this.resolveTarget(entry, targetKey);\r\n if (resolved) {\r\n const active: ActiveTranslate = {\r\n targetKey,\r\n startCoordinate: event.coordinate as [number, number],\r\n lastCoordinate: event.coordinate as [number, number],\r\n lastItem: resolved,\r\n moveThrottleMs: translate.moveThrottleMs ?? 0,\r\n translate,\r\n };\r\n this.activeTranslates.set(entry.descriptor.id, active);\r\n this.lockDragPan();\r\n\r\n if (translate.state) {\r\n this.applyState([resolved], translate.state, true);\r\n }\r\n\r\n const handled = translate.onStart\r\n ? this.isHandled(\r\n translate.onStart({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n )\r\n : false;\r\n active.lastHandled = handled;\r\n\r\n if (handled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.activeTranslates.has(entry.descriptor.id)) {\r\n continue;\r\n }\r\n\r\n const modify = interactions?.modify;\r\n const hasNativeModify = this.nativeModifies.has(entry.descriptor.id);\r\n if (!hasNativeModify && modify && this.isEnabled(modify.enabled)) {\r\n const { items: candidates } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(modify.hitTolerance),\r\n });\r\n\r\n if (candidates.length > 0) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifystart', candidates);\r\n\r\n let target: HitItem<any, any> | null | undefined;\r\n if (modify.pickTarget) {\r\n target = modify.pickTarget({ candidates, ctx: this.ctx, event: modifyEvent });\r\n } else {\r\n target = candidates[0];\r\n }\r\n\r\n if (target) {\r\n const targetKey = entry.descriptor.feature.id(target.model);\r\n const resolved = this.resolveTarget(entry, targetKey);\r\n if (resolved) {\r\n const active: ActiveModify = {\r\n targetKey,\r\n lastItem: resolved,\r\n moveThrottleMs: modify.moveThrottleMs ?? 0,\r\n modify,\r\n };\r\n this.activeModifies.set(entry.descriptor.id, active);\r\n this.lockDragPan();\r\n\r\n if (modify.state) {\r\n this.applyState([resolved], modify.state, true);\r\n }\r\n\r\n const handled = modify.onStart\r\n ? this.isHandled(\r\n modify.onStart({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n )\r\n : false;\r\n active.lastHandled = handled;\r\n\r\n if (handled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.activeModifies.has(entry.descriptor.id)) {\r\n continue;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerDrag(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerdrag')) {\r\n return;\r\n }\r\n if (this.activeTranslates.size === 0 && this.activeModifies.size === 0) {\r\n return;\r\n }\r\n for (const entry of this.getOrderedLayers()) {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (!active) {\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (!activeModify) {\r\n continue;\r\n }\r\n const modify = activeModify.modify;\r\n const execute = () => this.applyModifyChange(entry, activeModify, event);\r\n\r\n if (activeModify.moveThrottleMs > 0) {\r\n if (!activeModify.throttleTimer) {\r\n execute();\r\n activeModify.throttleTimer = setTimeout(() => {\r\n activeModify.throttleTimer = undefined;\r\n if (activeModify.pendingEvent) {\r\n const pending = activeModify.pendingEvent;\r\n activeModify.pendingEvent = undefined;\r\n this.applyModifyChange(entry, activeModify, pending);\r\n }\r\n }, activeModify.moveThrottleMs);\r\n } else {\r\n activeModify.pendingEvent = event;\r\n }\r\n } else {\r\n execute();\r\n }\r\n\r\n if (activeModify.lastHandled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n continue;\r\n }\r\n const translate = active.translate;\r\n const execute = () => this.applyTranslateMove(entry, active, event);\r\n\r\n if (active.moveThrottleMs > 0) {\r\n if (!active.throttleTimer) {\r\n execute();\r\n active.throttleTimer = setTimeout(() => {\r\n active.throttleTimer = undefined;\r\n if (active.pendingEvent) {\r\n const pending = active.pendingEvent;\r\n active.pendingEvent = undefined;\r\n this.applyTranslateMove(entry, active, pending);\r\n }\r\n }, active.moveThrottleMs);\r\n } else {\r\n active.pendingEvent = event;\r\n }\r\n } else {\r\n execute();\r\n }\r\n\r\n if (active.lastHandled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerUp(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointerup')) {\r\n return;\r\n }\r\n if (this.activeTranslates.size === 0 && this.activeModifies.size === 0) {\r\n return;\r\n }\r\n for (const entry of this.getOrderedLayers()) {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (active) {\r\n const translate = active.translate;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n }\r\n if (active.pendingEvent) {\r\n const pending = active.pendingEvent;\r\n active.pendingEvent = undefined;\r\n this.applyTranslateMove(entry, active, pending);\r\n }\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (resolved && translate.onEnd) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n active.startCoordinate,\r\n 'translateend',\r\n [resolved],\r\n );\r\n active.lastHandled = this.isHandled(\r\n translate.onEnd({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n\r\n this.finishTranslate(entry, active, resolved);\r\n\r\n if (active.lastHandled && this.shouldStopPropagation(translate)) {\r\n break;\r\n }\r\n continue;\r\n }\r\n\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (!activeModify) {\r\n continue;\r\n }\r\n const modify = activeModify.modify;\r\n if (activeModify.throttleTimer) {\r\n clearTimeout(activeModify.throttleTimer);\r\n activeModify.throttleTimer = undefined;\r\n }\r\n if (activeModify.pendingEvent) {\r\n const pending = activeModify.pendingEvent;\r\n activeModify.pendingEvent = undefined;\r\n this.applyModifyChange(entry, activeModify, pending);\r\n }\r\n const resolved = this.resolveTarget(entry, activeModify.targetKey);\r\n if (resolved && modify.onEnd) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifyend', [resolved]);\r\n activeModify.lastHandled = this.isHandled(\r\n modify.onEnd({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n );\r\n } else {\r\n activeModify.lastHandled = false;\r\n }\r\n\r\n this.finishModify(entry, activeModify, resolved);\r\n\r\n if (activeModify.lastHandled && this.shouldStopPropagation(modify)) {\r\n break;\r\n }\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handlePointerMove(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('pointermove')) {\r\n return;\r\n }\r\n const popupHost = this.ctx.popupHost;\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const autoHover = autoMode === 'hover';\r\n const popupItems: Array<PopupItem<any>> = [];\r\n let popupStopped = false;\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const hover = entry.descriptor.feature.interactions?.hover;\r\n const hoverEnabled = !!hover && this.isEnabled(hover.enabled);\r\n if (!hoverEnabled && !autoHover) {\r\n continue;\r\n }\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(hoverEnabled ? hover!.hitTolerance : undefined),\r\n });\r\n\r\n if (hoverEnabled) {\r\n const handled = this.processHover(entry, hover!, hitResult.items, event);\r\n if (handled && this.shouldStopPropagation(hover!)) {\r\n break;\r\n }\r\n }\r\n\r\n if (autoHover && popupHost && !popupStopped) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n }\r\n if (autoHover && popupHost) {\r\n popupHost.set(popupItems);\r\n }\r\n\r\n this.updateCursor(event);\r\n }\r\n\r\n handleSingleClick(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('singleclick')) {\r\n return;\r\n }\r\n const popupHost = this.ctx.popupHost;\r\n const popupEnabled = this.isEnabled(this.schema.options?.popupHost?.enabled);\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const autoClick = autoMode === 'click';\r\n const popupItems: Array<PopupItem<any>> = [];\r\n let popupStopped = false;\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const select = entry.descriptor.feature.interactions?.select;\r\n const click = entry.descriptor.feature.interactions?.click;\r\n const selectEnabled = select && this.isEnabled(select.enabled);\r\n const clickEnabled = click && this.isEnabled(click.enabled);\r\n const clusteringEnabled = !!entry.descriptor.clustering && !!entry.api.isClusteringEnabled?.();\r\n if (!selectEnabled && !clickEnabled && !clusteringEnabled && !autoClick) {\r\n continue;\r\n }\r\n\r\n const tolerances = [\r\n selectEnabled ? select?.hitTolerance : undefined,\r\n clickEnabled ? click?.hitTolerance : undefined,\r\n ].filter((value): value is number => value !== undefined);\r\n const hitTolerance =\r\n tolerances.length > 0 ? Math.max(...tolerances) : this.getHitTolerance(undefined);\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance,\r\n });\r\n\r\n if (clusteringEnabled && hitResult.cluster) {\r\n if (autoClick && popupHost && !popupStopped) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n const handled = this.handleClusterClick(entry, hitResult.cluster, event, !autoClick);\r\n if (handled) {\r\n if (this.shouldStopClusterPropagation()) {\r\n break;\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n if (selectEnabled || clickEnabled) {\r\n const selectItems = selectEnabled ? hitResult.items : [];\r\n const clickItems = clickEnabled ? hitResult.items : [];\r\n\r\n const selectHandled = selectEnabled\r\n ? this.processSelect(entry, select!, selectItems, event)\r\n : false;\r\n const selectStops = selectHandled && this.shouldStopPropagation(select!);\r\n const allowClick =\r\n !selectHandled || (selectEnabled && this.shouldContinuePropagation(select!));\r\n\r\n if (clickEnabled && allowClick) {\r\n const clickHandled = this.processClick(entry, click!, clickItems, event);\r\n if (clickHandled && this.shouldStopPropagation(click!)) {\r\n break;\r\n }\r\n }\r\n\r\n if (selectStops) {\r\n break;\r\n }\r\n }\r\n\r\n if (autoClick && popupHost && !popupStopped && !(clusteringEnabled && hitResult.cluster)) {\r\n const collected = this.collectPopupItems(entry, hitResult, event);\r\n if (collected.length > 0) {\r\n popupItems.push(...collected);\r\n if (this.popupStack === 'stop') {\r\n popupStopped = true;\r\n }\r\n }\r\n }\r\n }\r\n if (autoClick && popupHost) {\r\n popupHost.set(popupItems);\r\n }\r\n }\r\n\r\n handleDoubleClick(event: MapBrowserEvent<UIEvent>): void {\r\n if (!this.isListening('dblclick')) {\r\n return;\r\n }\r\n const layers = this.getOrderedLayers();\r\n for (const entry of layers) {\r\n const doubleClick = entry.descriptor.feature.interactions?.doubleClick;\r\n if (!doubleClick || !this.isEnabled(doubleClick.enabled)) {\r\n continue;\r\n }\r\n\r\n const hitResult = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance: this.getHitTolerance(doubleClick.hitTolerance),\r\n });\r\n\r\n if (entry.descriptor.clustering && entry.api.isClusteringEnabled?.() && hitResult.cluster) {\r\n continue;\r\n }\r\n const { items } = hitResult;\r\n\r\n const handled = this.processDoubleClick(entry, doubleClick, items, event);\r\n if (handled && this.shouldStopPropagation(doubleClick)) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private runInteractionMutation(fn: () => void): void {\r\n const policy = this.schema.options?.scheduler?.interactionPolicy;\r\n if (policy) {\r\n this.ctx.batch(fn, { policy });\r\n return;\r\n }\r\n fn();\r\n }\r\n\r\n private syncListeners(popupEnabled: boolean): void {\r\n const autoMode = popupEnabled ? this.schema.options?.popupHost?.autoMode ?? 'off' : 'off';\r\n const needsHover = autoMode === 'hover';\r\n const needsClick = autoMode === 'click';\r\n\r\n let needsPointerMove = needsHover;\r\n let needsSingleClick = needsClick;\r\n let needsDoubleClick = false;\r\n let needsPointerDown = false;\r\n let needsPointerDrag = false;\r\n let needsPointerUp = false;\r\n\r\n this.schema.layers.forEach((descriptor) => {\r\n const state = this.enabledState.get(descriptor.id);\r\n const interactions = descriptor.feature.interactions;\r\n const maybeHover = this.isMaybeEnabled(interactions?.hover?.enabled);\r\n const maybeClick = this.isMaybeEnabled(interactions?.click?.enabled);\r\n const maybeSelect = this.isMaybeEnabled(interactions?.select?.enabled);\r\n const maybeDoubleClick = this.isMaybeEnabled(interactions?.doubleClick?.enabled);\r\n const maybeTranslate = this.isMaybeEnabled(interactions?.translate?.enabled);\r\n const maybeModify = this.isMaybeEnabled(interactions?.modify?.enabled);\r\n\r\n if (state?.hover || maybeHover) {\r\n needsPointerMove = true;\r\n }\r\n if (state?.click || state?.select || maybeClick || maybeSelect) {\r\n needsSingleClick = true;\r\n }\r\n if (state?.doubleClick || maybeDoubleClick) {\r\n needsDoubleClick = true;\r\n }\r\n if (state?.translate || state?.modify || maybeTranslate || maybeModify) {\r\n needsPointerDown = true;\r\n needsPointerDrag = true;\r\n needsPointerUp = true;\r\n }\r\n if (interactions && this.hasCursorInteraction(interactions)) {\r\n needsPointerMove = true;\r\n }\r\n if (\r\n descriptor.clustering &&\r\n (descriptor.clustering.expandOnClick || descriptor.clustering.popup)\r\n ) {\r\n needsSingleClick = true;\r\n }\r\n });\r\n\r\n this.toggleListener('pointermove', needsPointerMove, (event) => this.handlePointerMove(event));\r\n this.toggleListener('singleclick', needsSingleClick, (event) =>\r\n this.handleSingleClick(event),\r\n );\r\n this.toggleListener('dblclick', needsDoubleClick, (event) => this.handleDoubleClick(event));\r\n this.toggleListener('pointerdown', needsPointerDown, (event) => this.handlePointerDown(event));\r\n this.toggleListener('pointerdrag', needsPointerDrag, (event) => this.handlePointerDrag(event));\r\n this.toggleListener('pointerup', needsPointerUp, (event) => this.handlePointerUp(event));\r\n }\r\n\r\n private syncNativeModify(nextState: Map<string, InteractionEnabledState>): void {\r\n const handled = new Set<string>();\r\n\r\n this.schema.layers.forEach((descriptor) => {\r\n const interactions = descriptor.feature.interactions;\r\n const modify = interactions?.modify;\r\n const enabled = nextState.get(descriptor.id)?.modify ?? false;\r\n const shouldEnable = !!modify && enabled;\r\n if (!shouldEnable) {\r\n return;\r\n }\r\n const entry = this.getLayerEntry(descriptor.id);\r\n if (!entry) {\r\n return;\r\n }\r\n handled.add(descriptor.id);\r\n if (this.nativeModifies.has(descriptor.id)) {\r\n this.nativeModifies.get(descriptor.id)!.interaction.setActive(true);\r\n return;\r\n }\r\n const source = entry.layer.getSource() as VectorSource<Geometry> | null;\r\n if (!source) {\r\n return;\r\n }\r\n const interaction = new Modify({\r\n source,\r\n pixelTolerance: this.getHitTolerance(modify.hitTolerance),\r\n style: modify.vertexStyle,\r\n });\r\n const keys = [\r\n interaction.on('modifystart', (event) =>\r\n this.handleNativeModifyStart(entry, modify, event),\r\n ),\r\n interaction.on('modifyend', (event) =>\r\n this.handleNativeModifyEnd(entry, modify, event),\r\n ),\r\n ];\r\n this.map.addInteraction(interaction);\r\n this.nativeModifies.set(descriptor.id, { interaction, keys });\r\n });\r\n\r\n Array.from(this.nativeModifies.keys()).forEach((layerId) => {\r\n if (!handled.has(layerId)) {\r\n this.teardownNativeModify(layerId);\r\n }\r\n });\r\n }\r\n\r\n private teardownNativeModify(layerId: string): void {\r\n const entry = this.nativeModifies.get(layerId);\r\n if (!entry) {\r\n return;\r\n }\r\n entry.keys.forEach((key) => Observable.unByKey(key));\r\n this.map.removeInteraction(entry.interaction);\r\n this.nativeModifies.delete(layerId);\r\n }\r\n\r\n private handleNativeModifyStart(\r\n entry: LayerEntry,\r\n modify: ModifyInteraction,\r\n event: ModifyEvent,\r\n ): void {\r\n const items = this.resolveHitItemsFromFeatures(entry, event.features);\r\n if (items.length === 0) {\r\n return;\r\n }\r\n if (modify.state) {\r\n this.applyState(items, modify.state, true);\r\n }\r\n if (modify.onStart) {\r\n this.isHandled(modify.onStart({ item: items[0], ctx: this.ctx, event }));\r\n }\r\n }\r\n\r\n private handleNativeModifyEnd(\r\n entry: LayerEntry,\r\n modify: ModifyInteraction,\r\n event: ModifyEvent,\r\n ): void {\r\n const items = this.resolveHitItemsFromFeatures(entry, event.features);\r\n if (items.length === 0) {\r\n return;\r\n }\r\n this.runInteractionMutation(() => {\r\n items.forEach((item) => {\r\n const geometry = item.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n const id = entry.descriptor.feature.id(item.model);\r\n entry.api.mutate(\r\n id,\r\n (prev) =>\r\n entry.descriptor.feature.geometry.applyGeometryToModel(prev, geometry as any),\r\n {reason: 'modify'},\r\n );\r\n });\r\n });\r\n if (modify.onEnd) {\r\n this.isHandled(modify.onEnd({ item: items[0], ctx: this.ctx, event }));\r\n }\r\n if (modify.state) {\r\n this.applyState(items, modify.state, false);\r\n }\r\n }\r\n\r\n private resolveHitItemsFromFeatures(\r\n entry: LayerEntry,\r\n features: Collection<Feature<Geometry>>,\r\n ): Array<HitItem<any, any>> {\r\n return features\r\n .getArray()\r\n .map((feature) => {\r\n const model = entry.api.getModelByFeature(feature as Feature<any>);\r\n if (!model) {\r\n return null;\r\n }\r\n return { model, feature } as HitItem<any, any>;\r\n })\r\n .filter((item): item is HitItem<any, any> => item !== null);\r\n }\r\n\r\n private hasCursorInteraction(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): boolean {\r\n const candidates = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ];\r\n return candidates.some(\r\n (interaction) => interaction?.cursor && this.isMaybeEnabled(interaction.enabled),\r\n );\r\n }\r\n\r\n private toggleListener(\r\n type: ListenerName,\r\n enabled: boolean,\r\n handler: (event: MapBrowserEvent<UIEvent>) => void,\r\n ): void {\r\n if (enabled) {\r\n if (!this.listenerKeys.has(type)) {\r\n const key = (\r\n this.map.on as unknown as (\r\n eventType: string,\r\n listener: (event: MapBrowserEvent<UIEvent>) => void,\r\n ) => EventsKey\r\n )(type, handler);\r\n this.listenerKeys.set(type, key);\r\n }\r\n return;\r\n }\r\n this.removeListener(type);\r\n }\r\n\r\n private removeListener(type: ListenerName): void {\r\n const key = this.listenerKeys.get(type);\r\n if (key) {\r\n Observable.unByKey(key);\r\n this.listenerKeys.delete(type);\r\n }\r\n }\r\n\r\n private isListening(type: ListenerName): boolean {\r\n return this.listenerKeys.has(type);\r\n }\r\n\r\n private applyDisabledCleanup(nextState: Map<string, InteractionEnabledState>): void {\r\n this.enabledState.forEach((prev, layerId) => {\r\n const next = nextState.get(layerId) ?? {\r\n click: false,\r\n doubleClick: false,\r\n hover: false,\r\n select: false,\r\n translate: false,\r\n modify: false,\r\n };\r\n const entry = this.getLayerEntry(layerId);\r\n if (!entry) {\r\n return;\r\n }\r\n\r\n if (prev.hover && !next.hover) {\r\n this.clearHoverState(entry);\r\n }\r\n if (prev.select && !next.select) {\r\n this.clearSelectState(entry);\r\n }\r\n if (prev.translate && !next.translate) {\r\n this.cancelTranslate(entry);\r\n }\r\n if (prev.modify && !next.modify) {\r\n this.cancelModify(entry);\r\n }\r\n });\r\n\r\n this.setCursor(undefined);\r\n }\r\n\r\n private clearHoverState(entry: LayerEntry): void {\r\n const prev = this.hoverItems.get(entry.descriptor.id);\r\n if (!prev) {\r\n return;\r\n }\r\n const hover = entry.descriptor.feature.interactions?.hover;\r\n if (hover?.state) {\r\n this.applyState(Array.from(prev.values()), hover.state, false);\r\n }\r\n this.hoverItems.delete(entry.descriptor.id);\r\n }\r\n\r\n private clearSelectState(entry: LayerEntry): void {\r\n const prev = this.selectedItems.get(entry.descriptor.id);\r\n if (!prev) {\r\n return;\r\n }\r\n const select = entry.descriptor.feature.interactions?.select;\r\n if (select?.state) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n this.selectedItems.delete(entry.descriptor.id);\r\n }\r\n\r\n private cancelTranslate(entry: LayerEntry): void {\r\n const active = this.activeTranslates.get(entry.descriptor.id);\r\n if (active) {\r\n this.finishTranslate(entry, active, active.lastItem);\r\n }\r\n }\r\n\r\n private cancelModify(entry: LayerEntry): void {\r\n const active = this.activeModifies.get(entry.descriptor.id);\r\n if (active) {\r\n this.finishModify(entry, active, active.lastItem);\r\n }\r\n }\r\n\r\n private updateCursor(event?: MapBrowserEvent<UIEvent>): void {\r\n const activeCursor = this.getActiveSessionCursor();\r\n if (activeCursor !== undefined) {\r\n this.setCursor(activeCursor ?? undefined);\r\n return;\r\n }\r\n if (!event) {\r\n this.setCursor(undefined);\r\n return;\r\n }\r\n\r\n for (const entry of this.getOrderedLayers()) {\r\n const interactions = entry.descriptor.feature.interactions;\r\n if (!interactions) {\r\n continue;\r\n }\r\n const cursor = this.getLayerCursor(interactions);\r\n if (!cursor) {\r\n continue;\r\n }\r\n const hitTolerance = this.getCursorHitTolerance(interactions);\r\n const { items } = this.hitTest({\r\n layerId: entry.descriptor.id,\r\n layer: entry.layer,\r\n api: entry.api,\r\n descriptor: entry.descriptor,\r\n event,\r\n hitTolerance,\r\n });\r\n if (items.length > 0) {\r\n this.setCursor(cursor);\r\n return;\r\n }\r\n }\r\n\r\n this.setCursor(undefined);\r\n }\r\n\r\n private getActiveSessionCursor(): string | null | undefined {\r\n for (const entry of this.getOrderedLayers()) {\r\n const activeTranslate = this.activeTranslates.get(entry.descriptor.id);\r\n if (activeTranslate) {\r\n return activeTranslate.translate.cursor ?? null;\r\n }\r\n const activeModify = this.activeModifies.get(entry.descriptor.id);\r\n if (activeModify) {\r\n return activeModify.modify.cursor ?? null;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private getLayerCursor(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): string | undefined {\r\n const candidates: Array<NonNullable<InteractionBase> | undefined> = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ];\r\n for (const interaction of candidates) {\r\n if (!interaction || !interaction.cursor) {\r\n continue;\r\n }\r\n if (!this.isEnabled(interaction.enabled)) {\r\n continue;\r\n }\r\n return interaction.cursor;\r\n }\r\n return undefined;\r\n }\r\n\r\n private getCursorHitTolerance(\r\n interactions: NonNullable<LayerEntry['descriptor']['feature']['interactions']>,\r\n ): number {\r\n const candidates = [\r\n interactions.hover,\r\n interactions.select,\r\n interactions.click,\r\n interactions.doubleClick,\r\n interactions.translate,\r\n interactions.modify,\r\n ].filter((interaction) => interaction && interaction.cursor && this.isEnabled(interaction.enabled));\r\n if (candidates.length === 0) {\r\n return this.getHitTolerance(undefined);\r\n }\r\n const tolerances = candidates\r\n .map((interaction) => interaction?.hitTolerance)\r\n .filter((value): value is number => value !== undefined);\r\n if (tolerances.length === 0) {\r\n return this.getHitTolerance(undefined);\r\n }\r\n return Math.max(...tolerances);\r\n }\r\n\r\n private setCursor(cursor?: string): void {\r\n if (this.currentCursor === cursor) {\r\n return;\r\n }\r\n const target = this.getTargetElement();\r\n if (!target) {\r\n return;\r\n }\r\n target.style.cursor = cursor ?? '';\r\n this.currentCursor = cursor;\r\n }\r\n\r\n private getTargetElement(): HTMLElement | null {\r\n const targetElement = this.map.getTargetElement?.();\r\n if (targetElement) {\r\n return targetElement;\r\n }\r\n const target = this.map.getTarget?.();\r\n if (!target) {\r\n return null;\r\n }\r\n if (typeof target === 'string') {\r\n if (typeof document === 'undefined') {\r\n return null;\r\n }\r\n return document.getElementById(target);\r\n }\r\n return target as HTMLElement;\r\n }\r\n\r\n private getLayerEntry(layerId: string): LayerEntry | null {\r\n const index = this.schema.layers.findIndex((layer) => layer.id === layerId);\r\n if (index < 0) {\r\n return null;\r\n }\r\n const descriptor = this.schema.layers[index];\r\n const layer = this.layers[layerId];\r\n const api = this.apis[layerId];\r\n if (!layer || !api) {\r\n return null;\r\n }\r\n return { descriptor, layer, api, index };\r\n }\r\n\r\n private applyTranslateMove(\r\n entry: LayerEntry,\r\n active: ActiveTranslate,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): void {\r\n const translate = active.translate;\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (!resolved) {\r\n this.finishTranslate(entry, active, active.lastItem);\r\n return;\r\n }\r\n\r\n const nextCoordinate = event.coordinate as [number, number];\r\n const delta = [\r\n nextCoordinate[0] - active.lastCoordinate[0],\r\n nextCoordinate[1] - active.lastCoordinate[1],\r\n ];\r\n active.lastCoordinate = nextCoordinate;\r\n active.lastItem = resolved;\r\n\r\n const geometry = resolved.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n const translated = geometry.clone();\r\n translated.translate(delta[0], delta[1]);\r\n\r\n this.runInteractionMutation(() =>\r\n entry.api.mutate(\r\n active.targetKey,\r\n (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, translated),\r\n {reason: 'translate'},\r\n ),\r\n );\r\n\r\n if (translate.onChange) {\r\n const translateEvent = this.createTranslateEvent(\r\n event,\r\n active.startCoordinate,\r\n 'translating',\r\n [resolved],\r\n );\r\n active.lastHandled = this.isHandled(\r\n translate.onChange({ item: resolved, ctx: this.ctx, event: translateEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n }\r\n\r\n private applyModifyChange(\r\n entry: LayerEntry,\r\n active: ActiveModify,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): void {\r\n const modify = active.modify;\r\n const resolved = this.resolveTarget(entry, active.targetKey);\r\n if (!resolved) {\r\n this.finishModify(entry, active, active.lastItem);\r\n return;\r\n }\r\n\r\n active.lastItem = resolved;\r\n\r\n const geometry = resolved.feature.getGeometry();\r\n if (!geometry) {\r\n return;\r\n }\r\n\r\n const nextGeometry = geometry.clone();\r\n this.runInteractionMutation(() =>\r\n entry.api.mutate(\r\n active.targetKey,\r\n (prev) => entry.descriptor.feature.geometry.applyGeometryToModel(prev, nextGeometry),\r\n {reason: 'modify'},\r\n ),\r\n );\r\n\r\n if (modify.onChange) {\r\n const modifyEvent = this.createModifyEvent(event, 'modifying', [resolved]);\r\n active.lastHandled = this.isHandled(\r\n modify.onChange({ item: resolved, ctx: this.ctx, event: modifyEvent }),\r\n );\r\n } else {\r\n active.lastHandled = false;\r\n }\r\n }\r\n\r\n private finishTranslate(\r\n entry: LayerEntry,\r\n active: ActiveTranslate,\r\n item?: HitItem<any, any> | null,\r\n ): void {\r\n const finalItem = item ?? active.lastItem;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n active.pendingEvent = undefined;\r\n }\r\n\r\n if (active.translate.state && finalItem) {\r\n this.applyState([finalItem], active.translate.state, false);\r\n }\r\n\r\n this.activeTranslates.delete(entry.descriptor.id);\r\n this.unlockDragPan();\r\n }\r\n\r\n private finishModify(\r\n entry: LayerEntry,\r\n active: ActiveModify,\r\n item?: HitItem<any, any> | null,\r\n ): void {\r\n const finalItem = item ?? active.lastItem;\r\n if (active.throttleTimer) {\r\n clearTimeout(active.throttleTimer);\r\n active.throttleTimer = undefined;\r\n active.pendingEvent = undefined;\r\n }\r\n\r\n if (active.modify.state && finalItem) {\r\n this.applyState([finalItem], active.modify.state, false);\r\n }\r\n\r\n this.activeModifies.delete(entry.descriptor.id);\r\n this.unlockDragPan();\r\n }\r\n\r\n private resolveTarget(entry: LayerEntry, targetKey: string | number): HitItem<any, any> | null {\r\n const source = entry.layer.getSource();\r\n if (!source) {\r\n return null;\r\n }\r\n const resolvedSource = source instanceof ClusterSource ? source.getSource() : source;\r\n if (!resolvedSource) {\r\n return null;\r\n }\r\n const feature = resolvedSource.getFeatureById(targetKey);\r\n if (!(feature instanceof Feature)) {\r\n return null;\r\n }\r\n const model = entry.api.getModelByFeature(feature as Feature<Geometry>);\r\n if (!model) {\r\n return null;\r\n }\r\n return { model, feature };\r\n }\r\n\r\n private lockDragPan(): void {\r\n this.dragPanLocks += 1;\r\n if (this.dragPanLocks !== 1) {\r\n return;\r\n }\r\n const interactions = this.map.getInteractions?.();\r\n if (!interactions) {\r\n return;\r\n }\r\n const dragPans = interactions\r\n .getArray()\r\n .filter((interaction): interaction is DragPan => interaction instanceof DragPan);\r\n if (dragPans.length === 0) {\r\n return;\r\n }\r\n if (!this.dragPanStates) {\r\n this.dragPanStates = new Map();\r\n }\r\n dragPans.forEach((interaction) => {\r\n if (!this.dragPanStates?.has(interaction)) {\r\n this.dragPanStates?.set(interaction, interaction.getActive());\r\n }\r\n interaction.setActive(false);\r\n });\r\n }\r\n\r\n private unlockDragPan(): void {\r\n if (this.dragPanLocks === 0) {\r\n return;\r\n }\r\n this.dragPanLocks -= 1;\r\n if (this.dragPanLocks !== 0) {\r\n return;\r\n }\r\n if (!this.dragPanStates) {\r\n return;\r\n }\r\n this.dragPanStates.forEach((wasActive, interaction) => {\r\n interaction.setActive(wasActive);\r\n });\r\n this.dragPanStates = undefined;\r\n }\r\n\r\n private createTranslateEvent(\r\n event: MapBrowserEvent<UIEvent>,\r\n startCoordinate: [number, number],\r\n type: 'translatestart' | 'translating' | 'translateend',\r\n items: Array<HitItem<any, any>>,\r\n ): TranslateEvent {\r\n const features = new Collection(items.map((item) => item.feature));\r\n return {\r\n type,\r\n features,\r\n coordinate: event.coordinate as [number, number],\r\n startCoordinate,\r\n mapBrowserEvent: event,\r\n } as unknown as TranslateEvent;\r\n }\r\n\r\n private createModifyEvent(\r\n event: MapBrowserEvent<UIEvent>,\r\n type: 'modifystart' | 'modifying' | 'modifyend',\r\n items: Array<HitItem<any, any>>,\r\n ): ModifyEvent {\r\n const features = new Collection(items.map((item) => item.feature));\r\n return {\r\n type,\r\n features,\r\n mapBrowserEvent: event,\r\n } as unknown as ModifyEvent;\r\n }\r\n\r\n private createDefaultHitTest(): HitTestFn {\r\n return ({ layer, api, event, hitTolerance }) => {\r\n const items: Array<HitItem<any, any>> = [];\r\n let clusterHit: ClusterHit | undefined;\r\n this.map.forEachFeatureAtPixel(\r\n event.pixel,\r\n (feature) => {\r\n if (!(feature instanceof Feature)) {\r\n return;\r\n }\r\n const clusterFeatures = getClusterFeatures(feature as Feature<Geometry>);\r\n if (clusterFeatures) {\r\n if (clusterFeatures.length > 1) {\r\n if (!clusterHit) {\r\n clusterHit = {\r\n feature: feature as Feature<Geometry>,\r\n features: clusterFeatures,\r\n size: clusterFeatures.length,\r\n };\r\n }\r\n return;\r\n }\r\n const singleFeature = clusterFeatures[0];\r\n const singleModel = api.getModelByFeature(singleFeature as Feature<Geometry>);\r\n if (!singleModel) {\r\n return;\r\n }\r\n items.push({ model: singleModel, feature: singleFeature });\r\n return;\r\n }\r\n const model = api.getModelByFeature(feature as Feature<Geometry>);\r\n if (!model) {\r\n return;\r\n }\r\n items.push({ model, feature });\r\n },\r\n {\r\n layerFilter: (candidateLayer) => candidateLayer === layer,\r\n hitTolerance,\r\n },\r\n );\r\n return { items, cluster: clusterHit };\r\n };\r\n }\r\n\r\n private collectFeaturePopupItems(\r\n entry: LayerEntry,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): Array<PopupItem<any>> {\r\n const popup = entry.descriptor.feature.popup;\r\n if (!popup || !this.isEnabled(popup.enabled)) {\r\n return [];\r\n }\r\n return items.map((item) => {\r\n const popupItem = popup.item({\r\n model: item.model,\r\n feature: item.feature,\r\n ctx: this.ctx,\r\n event,\r\n });\r\n return {\r\n ...popupItem,\r\n source: popupItem.source ?? 'feature',\r\n dedupKey: popupItem.dedupKey ?? entry.descriptor.feature.id(item.model),\r\n };\r\n });\r\n }\r\n\r\n private collectPopupItems(\r\n entry: LayerEntry,\r\n hitResult: HitTestResult,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): Array<PopupItem<any>> {\r\n if (entry.descriptor.clustering && entry.api.isClusteringEnabled?.() && hitResult.cluster) {\r\n const clustering = entry.descriptor.clustering;\r\n if (clustering?.popup && this.isEnabled(clustering.popup.enabled)) {\r\n const models = hitResult.cluster.features\r\n .map((clusterFeature) =>\r\n entry.api.getModelByFeature(clusterFeature as Feature<Geometry>),\r\n )\r\n .filter((model): model is any => model !== undefined);\r\n const popupItem = clustering.popup.item({\r\n models,\r\n size: hitResult.cluster.size,\r\n ctx: this.ctx,\r\n event,\r\n });\r\n return [\r\n {\r\n ...popupItem,\r\n source: popupItem.source ?? 'cluster',\r\n dedupKey: popupItem.dedupKey ?? this.getClusterDedupKey(entry, models),\r\n },\r\n ];\r\n }\r\n return [];\r\n }\r\n return this.collectFeaturePopupItems(entry, hitResult.items, event);\r\n }\r\n\r\n private getClusterDedupKey(entry: LayerEntry, models: any[]): string {\r\n const ids = models\r\n .map((model) => String(entry.descriptor.feature.id(model)))\r\n .sort((a, b) => a.localeCompare(b))\r\n .join('|');\r\n return `cluster:${entry.descriptor.id}:${ids}`;\r\n }\r\n\r\n private getOrderedLayers(): LayerEntry[] {\r\n return this.schema.layers\r\n .map((descriptor, index) => ({\r\n descriptor,\r\n index,\r\n layer: this.layers[descriptor.id],\r\n api: this.apis[descriptor.id],\r\n }))\r\n .filter((entry) => entry.layer && entry.api)\r\n .sort((a, b) => {\r\n const aZ = a.layer.getZIndex() ?? 0;\r\n const bZ = b.layer.getZIndex() ?? 0;\r\n if (aZ !== bZ) {\r\n return bZ - aZ;\r\n }\r\n return a.index - b.index;\r\n });\r\n }\r\n\r\n private getHitTolerance(hitTolerance?: number): number {\r\n if (hitTolerance !== undefined) {\r\n return hitTolerance;\r\n }\r\n if (this.schema.options?.hitTolerance !== undefined) {\r\n return this.schema.options.hitTolerance;\r\n }\r\n return 0;\r\n }\r\n\r\n private isEnabled(enabled?: boolean | (() => boolean)): boolean {\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n if (typeof enabled === 'function') {\r\n return enabled();\r\n }\r\n return enabled;\r\n }\r\n\r\n private isMaybeEnabled(enabled?: boolean | (() => boolean)): boolean {\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n if (typeof enabled === 'function') {\r\n return true;\r\n }\r\n return enabled;\r\n }\r\n\r\n private processHover(\r\n entry: LayerEntry,\r\n hover: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['hover']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n const prev = this.hoverItems.get(entry.descriptor.id) ?? new Map();\r\n const next = this.itemsToMap(entry, items);\r\n const entered = Array.from(next.entries())\r\n .filter(([id]) => !prev.has(id))\r\n .map(([, item]) => item);\r\n const left = Array.from(prev.entries())\r\n .filter(([id]) => !next.has(id))\r\n .map(([, item]) => item);\r\n\r\n let handled = false;\r\n if (left.length > 0 && hover.onLeave) {\r\n handled = this.isHandled(hover.onLeave({ items: left, ctx: this.ctx, event }));\r\n }\r\n if (entered.length > 0 && hover.onEnter) {\r\n handled = this.isHandled(hover.onEnter({ items: entered, ctx: this.ctx, event })) || handled;\r\n }\r\n\r\n if (hover.state) {\r\n this.applyState(left, hover.state, false);\r\n this.applyState(entered, hover.state, true);\r\n }\r\n\r\n this.hoverItems.set(entry.descriptor.id, next);\r\n return handled;\r\n }\r\n\r\n private processSelect(\r\n entry: LayerEntry,\r\n select: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['select']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n const selectedItems = select.pickTargets\r\n ? select.pickTargets({ candidates: items, ctx: this.ctx, event })\r\n : items;\r\n\r\n if (!selectedItems || selectedItems.length === 0) {\r\n if (select.pickTargets) {\r\n return false;\r\n }\r\n const prev = this.selectedItems.get(entry.descriptor.id);\r\n this.selectedItems.set(entry.descriptor.id, new Map());\r\n if (select.onClear) {\r\n const handled = this.isHandled(select.onClear({ ctx: this.ctx, event }));\r\n if (select.state && prev) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n return handled;\r\n }\r\n if (select.state && prev) {\r\n this.applyState(Array.from(prev.values()), select.state, false);\r\n }\r\n return false;\r\n }\r\n\r\n const prev = this.selectedItems.get(entry.descriptor.id) ?? new Map();\r\n const next = this.itemsToMap(entry, selectedItems);\r\n const handled = select.onSelect\r\n ? this.isHandled(select.onSelect({ items: selectedItems, ctx: this.ctx, event }))\r\n : false;\r\n if (select.state) {\r\n const added = Array.from(next.entries())\r\n .filter(([id]) => !prev.has(id))\r\n .map(([, item]) => item);\r\n const removed = Array.from(prev.entries())\r\n .filter(([id]) => !next.has(id))\r\n .map(([, item]) => item);\r\n this.applyState(removed, select.state, false);\r\n this.applyState(added, select.state, true);\r\n }\r\n this.selectedItems.set(entry.descriptor.id, next);\r\n return handled;\r\n }\r\n\r\n private processClick(\r\n entry: LayerEntry,\r\n click: NonNullable<NonNullable<LayerEntry['descriptor']['feature']['interactions']>['click']>,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n return this.isHandled(click.onClick({ items, ctx: this.ctx, event }));\r\n }\r\n\r\n private processDoubleClick(\r\n entry: LayerEntry,\r\n doubleClick: NonNullable<\r\n NonNullable<LayerEntry['descriptor']['feature']['interactions']>['doubleClick']\r\n >,\r\n items: Array<HitItem<any, any>>,\r\n event: MapBrowserEvent<UIEvent>,\r\n ): boolean {\r\n return this.isHandled(doubleClick.onDoubleClick({ items, ctx: this.ctx, event }));\r\n }\r\n\r\n private itemsToMap(\r\n entry: LayerEntry,\r\n items: Array<HitItem<any, any>>,\r\n ): Map<string | number, HitItem<any, any>> {\r\n const next = new Map<string | number, HitItem<any, any>>();\r\n items.forEach((item) => {\r\n const id = entry.descriptor.feature.id(item.model);\r\n next.set(id, item);\r\n });\r\n return next;\r\n }\r\n\r\n private applyState(items: Array<HitItem<any, any>>, state: FeatureState, enabled: boolean): void {\r\n const states = Array.isArray(state) ? state : [state];\r\n items.forEach((item) => {\r\n const current = new Set(getFeatureStates(item.feature));\r\n states.forEach((entry) => {\r\n if (enabled) {\r\n current.add(entry);\r\n } else {\r\n current.delete(entry);\r\n }\r\n });\r\n setFeatureStates(item.feature, Array.from(current));\r\n });\r\n }\r\n\r\n private isHandled(result: InteractionHandlerResult): boolean {\r\n return result === true;\r\n }\r\n\r\n private shouldStopPropagation(base: InteractionBase): boolean {\r\n return base.propagation !== 'continue';\r\n }\r\n\r\n private shouldContinuePropagation(base: InteractionBase): boolean {\r\n return base.propagation === 'continue';\r\n }\r\n\r\n private handleClusterClick(\r\n entry: LayerEntry,\r\n clusterHit: ClusterHit,\r\n event: MapBrowserEvent<UIEvent>,\r\n manualPopupPush: boolean,\r\n ): boolean {\r\n const clustering = entry.descriptor.clustering;\r\n if (!clustering) {\r\n return false;\r\n }\r\n\r\n const models = clusterHit.features\r\n .map((clusterFeature) =>\r\n entry.api.getModelByFeature(clusterFeature as Feature<Geometry>),\r\n )\r\n .filter((model): model is any => model !== undefined);\r\n let handled = false;\r\n\r\n if (clustering.expandOnClick) {\r\n this.expandCluster(clusterHit, clustering.expandOnClick);\r\n clustering.expandOnClick.onExpanded?.({ models, ctx: this.ctx });\r\n handled = true;\r\n }\r\n\r\n if (clustering.popup && this.isEnabled(clustering.popup.enabled)) {\r\n if (manualPopupPush || !this.ctx.popupHost) {\r\n const item = clustering.popup.item({ models, size: clusterHit.size, ctx: this.ctx, event });\r\n if (manualPopupPush && this.ctx.popupHost) {\r\n this.ctx.popupHost.push([\r\n {\r\n ...item,\r\n source: item.source ?? 'cluster',\r\n dedupKey: item.dedupKey ?? this.getClusterDedupKey(entry, models),\r\n },\r\n ]);\r\n }\r\n }\r\n handled = true;\r\n }\r\n\r\n return handled;\r\n }\r\n\r\n private expandCluster(\r\n clusterHit: ClusterHit,\r\n expand: NonNullable<NonNullable<LayerEntry['descriptor']['clustering']>['expandOnClick']>,\r\n ): void {\r\n const view = this.map.getView();\r\n const duration = expand.durationMs;\r\n if (expand.mode === 'zoomIn') {\r\n const currentZoom = view.getZoom() ?? 0;\r\n const delta = expand.zoomDelta ?? 1;\r\n const targetZoom = currentZoom + delta;\r\n const nextZoom =\r\n expand.maxZoom !== undefined ? Math.min(expand.maxZoom, targetZoom) : targetZoom;\r\n view.animate({ zoom: nextZoom, duration });\r\n return;\r\n }\r\n\r\n const extent = createEmpty();\r\n clusterHit.features.forEach((feature) => {\r\n const geometry = feature.getGeometry();\r\n if (geometry) {\r\n extend(extent, geometry.getExtent());\r\n }\r\n });\r\n if (isEmpty(extent)) {\r\n return;\r\n }\r\n const padding = toOlPadding(expand.padding, undefined);\r\n view.fit(extent, {\r\n padding,\r\n duration,\r\n maxZoom: expand.maxZoom,\r\n });\r\n }\r\n\r\n private shouldStopClusterPropagation(): boolean {\r\n return true;\r\n }\r\n}\r\n","import type Style from 'ol/style/Style';\r\n\r\nexport type StyleCacheKey = string;\r\n\r\nexport class StyleCache {\r\n private readonly stringCache = new Map<string, Style | Style[]>();\r\n\r\n get(key: StyleCacheKey): Style | Style[] | undefined {\r\n return this.stringCache.get(key);\r\n }\r\n\r\n set(key: StyleCacheKey, value: Style | Style[]): void {\r\n this.stringCache.set(key, value);\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport type OlMap from 'ol/Map';\r\nimport type { StyleFunction } from 'ol/style/Style';\r\n\r\nimport type {\r\n FeatureDescriptor,\r\n FeatureStyleState,\r\n LayerClustering,\r\n MapContext,\r\n MaybeFn,\r\n Patch,\r\n StyleView,\r\n} from '../../public/types';\r\nimport { getClusterFeatures } from '../cluster-utils';\r\nimport { getFeatureStates } from './feature-states';\r\nimport { StyleCache } from './style-cache';\r\n\r\nexport type StylePipelineOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: FeatureDescriptor<M, G, OPTS>;\r\n ctx: MapContext;\r\n registryGetModel: (feature: Feature<Geometry>) => M | undefined;\r\n map?: OlMap;\r\n};\r\n\r\nconst resolveMaybeFn = <T, A extends any[]>(value: MaybeFn<T, A>, args: A): T => {\r\n if (typeof value === 'function') {\r\n return (value as (...fnArgs: A) => T)(...args);\r\n }\r\n return value;\r\n};\r\n\r\nconst applyPatch = <T extends object>(opts: T, patch: Patch<T>): T => {\r\n const patchValue = typeof patch === 'function' ? patch(opts) : patch;\r\n return { ...opts, ...patchValue };\r\n};\r\n\r\nconst orderStates = (\r\n states: FeatureStyleState[],\r\n priority?: FeatureStyleState[],\r\n): FeatureStyleState[] => {\r\n if (!priority || priority.length === 0) {\r\n return states;\r\n }\r\n const prioritySet = new Set(priority);\r\n const ordered = priority.filter((state) => states.includes(state));\r\n const rest = states.filter((state) => !prioritySet.has(state));\r\n return [...ordered, ...rest];\r\n};\r\n\r\nexport const createStyleFunction = <M, G extends Geometry, OPTS extends object>(\r\n options: StylePipelineOptions<M, G, OPTS>,\r\n): StyleFunction => {\r\n const { descriptor, registryGetModel, map } = options;\r\n const { style } = descriptor;\r\n const cache = new StyleCache();\r\n\r\n return (feature, resolution) => {\r\n if (!(feature instanceof Feature)) {\r\n return [];\r\n }\r\n const model = registryGetModel(feature);\r\n if (!model) {\r\n return [];\r\n }\r\n const view: StyleView = {\r\n resolution,\r\n zoom: map?.getView().getZoom(),\r\n };\r\n let opts = resolveMaybeFn(style.base, [model, view]);\r\n\r\n if (style.states) {\r\n const featureStates = orderStates(getFeatureStates(feature), style.statePriority);\r\n featureStates.forEach((state) => {\r\n const patchFactory = style.states?.[state];\r\n if (!patchFactory) {\r\n return;\r\n }\r\n const patch = resolveMaybeFn(patchFactory, [model, view]);\r\n opts = applyPatch(opts, patch);\r\n });\r\n }\r\n\r\n if (style.cacheKey) {\r\n const key = style.cacheKey(opts, view);\r\n if (key) {\r\n const cached = cache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const rendered = style.render(opts, view);\r\n cache.set(key, rendered);\r\n return rendered;\r\n }\r\n }\r\n\r\n return style.render(opts, view);\r\n };\r\n};\r\n\r\nexport type ClusterStylePipelineOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: FeatureDescriptor<M, G, OPTS>;\r\n clustering: LayerClustering<M>;\r\n ctx: MapContext;\r\n registryGetModel: (feature: Feature<Geometry>) => M | undefined;\r\n map?: OlMap;\r\n};\r\n\r\nexport const createClusterStyleFunction = <M, G extends Geometry, OPTS extends object>(\r\n options: ClusterStylePipelineOptions<M, G, OPTS>,\r\n): StyleFunction => {\r\n const { clustering, registryGetModel, map } = options;\r\n const baseStyle = createStyleFunction(options);\r\n const cache = new StyleCache();\r\n\r\n return (feature, resolution) => {\r\n if (!(feature instanceof Feature)) {\r\n return [];\r\n }\r\n const clusterFeatures = getClusterFeatures(feature);\r\n if (!clusterFeatures) {\r\n return baseStyle(feature, resolution);\r\n }\r\n\r\n const size = clusterFeatures.length;\r\n if (size === 1) {\r\n return baseStyle(clusterFeatures[0], resolution);\r\n }\r\n\r\n const models = clusterFeatures\r\n .map((clusterFeature) => registryGetModel(clusterFeature))\r\n .filter((model): model is M => model !== undefined);\r\n const view: StyleView = {\r\n resolution,\r\n zoom: map?.getView().getZoom(),\r\n };\r\n\r\n if (clustering.clusterStyle.cacheKey) {\r\n const key = clustering.clusterStyle.cacheKey({ models, size, view });\r\n if (key) {\r\n const cached = cache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const rendered = clustering.clusterStyle.render({ models, size, view });\r\n cache.set(key, rendered);\r\n return rendered;\r\n }\r\n }\r\n\r\n return clustering.clusterStyle.render({ models, size, view });\r\n };\r\n};\r\n","import type Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\n\r\nexport class FeatureRegistry<M, G extends Geometry> {\r\n private readonly idToModel = new Map<string | number, M>();\r\n private readonly idToFeature = new Map<string | number, Feature<G>>();\r\n private readonly featureToId = new WeakMap<Feature<G>, string | number>();\r\n\r\n set(id: string | number, model: M, feature: Feature<G>): void {\r\n this.idToModel.set(id, model);\r\n this.idToFeature.set(id, feature);\r\n this.featureToId.set(feature, id);\r\n }\r\n\r\n updateModel(id: string | number, model: M): void {\r\n if (!this.idToModel.has(id)) {\r\n return;\r\n }\r\n this.idToModel.set(id, model);\r\n }\r\n\r\n getModel(id: string | number): M | undefined {\r\n return this.idToModel.get(id);\r\n }\r\n\r\n getFeature(id: string | number): Feature<G> | undefined {\r\n return this.idToFeature.get(id);\r\n }\r\n\r\n getIdByFeature(feature: Feature<G>): string | number | undefined {\r\n return this.featureToId.get(feature);\r\n }\r\n\r\n getModelByFeature(feature: Feature<G>): M | undefined {\r\n const id = this.featureToId.get(feature);\r\n if (id === undefined) {\r\n return undefined;\r\n }\r\n return this.idToModel.get(id);\r\n }\r\n\r\n has(id: string | number): boolean {\r\n return this.idToModel.has(id);\r\n }\r\n\r\n remove(id: string | number): Feature<G> | undefined {\r\n const feature = this.idToFeature.get(id);\r\n if (!feature) {\r\n return undefined;\r\n }\r\n this.idToModel.delete(id);\r\n this.idToFeature.delete(id);\r\n this.featureToId.delete(feature);\r\n return feature;\r\n }\r\n\r\n forEachId(fn: (id: string | number) => void): void {\r\n this.idToModel.forEach((_model, id) => fn(id));\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createEmpty, extend, isEmpty} from 'ol/extent';\r\nimport type VectorLayer from 'ol/layer/Vector';\r\nimport type VectorSource from 'ol/source/Vector';\r\n\r\nimport {\r\n DuplicateModelIdError,\r\n type FeatureDescriptor,\r\n type Id,\r\n type MapContext,\r\n type ModelChange,\r\n type ModelsCollectionEvent,\r\n type ModelsSetReason,\r\n type MutateOptions,\r\n type VectorLayerApi,\r\n type VectorLayerDescriptor,\r\n type ViewFitOptions,\r\n} from '../public/types';\r\nimport {FeatureRegistry} from './feature-registry';\r\nimport {setFeatureStates} from './style/feature-states';\r\nimport {toOlFitOptions} from './fit-layer.utils';\r\n\r\nexport type VectorLayerBaseOptions<M, G extends Geometry, OPTS extends object> = {\r\n descriptor: VectorLayerDescriptor<M, G, OPTS>;\r\n layer: VectorLayer;\r\n source: VectorSource<G>;\r\n ctx: MapContext;\r\n scheduleInvalidate: () => void;\r\n};\r\n\r\nexport abstract class VectorLayerBase<M, G extends Geometry, OPTS extends object>\r\n implements VectorLayerApi<M, G>\r\n{\r\n protected readonly descriptor: FeatureDescriptor<M, G, OPTS>;\r\n protected readonly layer: VectorLayer;\r\n protected readonly source: VectorSource<G>;\r\n protected readonly registry = new FeatureRegistry<M, G>();\r\n protected readonly scheduleInvalidate: () => void;\r\n protected readonly ctx: MapContext;\r\n protected readonly layerId: string;\r\n private readonly changeHandlers = new Set<(changes: ModelChange<M>[]) => void>();\r\n private readonly collectionHandlers = new Set<(event: ModelsCollectionEvent<M>) => void>();\r\n private models: M[] = [];\r\n\r\n constructor(options: VectorLayerBaseOptions<M, G, OPTS>) {\r\n this.descriptor = options.descriptor.feature;\r\n this.layer = options.layer;\r\n this.source = options.source;\r\n this.ctx = options.ctx;\r\n this.scheduleInvalidate = options.scheduleInvalidate;\r\n this.layerId = options.descriptor.id;\r\n }\r\n\r\n setModels(models: readonly M[]): void {\r\n this.assertUniqueIds(models);\r\n this.applyModelsUpdate({\r\n nextModels: models,\r\n reason: 'set',\r\n });\r\n }\r\n\r\n invalidate(): void {\r\n this.scheduleInvalidate();\r\n }\r\n\r\n protected syncFeatureFromModel(model: M): void {\r\n const id = this.descriptor.id(model);\r\n const feature = this.registry.getFeature(id);\r\n if (!feature) {\r\n return;\r\n }\r\n feature.setGeometry(this.descriptor.geometry.fromModel(model));\r\n }\r\n\r\n getModelByFeature(feature: Feature<G>): M | undefined {\r\n return this.registry.getModelByFeature(feature);\r\n }\r\n\r\n mutate(\r\n id: Id,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ): void {\r\n const prev = this.registry.getModel(id);\r\n if (!prev) {\r\n return;\r\n }\r\n const next = update(prev);\r\n if (next === prev) {\r\n return;\r\n }\r\n const reason = opts?.reason ?? 'mutate';\r\n this.registry.updateModel(id, next);\r\n this.replaceModelSnapshot(id, next);\r\n this.syncFeatureFromModel(next);\r\n this.scheduleInvalidate();\r\n if (!opts?.silent) {\r\n this.emitModelChanges([{prev, next, reason}]);\r\n }\r\n }\r\n\r\n mutateMany(\r\n ids: Array<Id>,\r\n update: (prev: M) => M,\r\n opts?: MutateOptions,\r\n ): void {\r\n const changes: ModelChange<M>[] = [];\r\n const reason = opts?.reason ?? 'mutate';\r\n\r\n ids.forEach((id) => {\r\n const prev = this.registry.getModel(id);\r\n if (!prev) {\r\n return;\r\n }\r\n const next = update(prev);\r\n if (next === prev) {\r\n return;\r\n }\r\n this.registry.updateModel(id, next);\r\n this.replaceModelSnapshot(id, next);\r\n this.syncFeatureFromModel(next);\r\n changes.push({prev, next, reason});\r\n });\r\n\r\n if (changes.length === 0) {\r\n return;\r\n }\r\n\r\n this.scheduleInvalidate();\r\n if (!opts?.silent) {\r\n this.emitModelChanges(changes);\r\n }\r\n }\r\n\r\n onModelsChanged(cb: (changes: ModelChange<M>[]) => void): () => void {\r\n this.changeHandlers.add(cb);\r\n return () => this.changeHandlers.delete(cb);\r\n }\r\n\r\n onModelsCollectionChanged(cb: (event: ModelsCollectionEvent<M>) => void): () => void {\r\n this.collectionHandlers.add(cb);\r\n return () => this.collectionHandlers.delete(cb);\r\n }\r\n\r\n addModel(model: M): void {\r\n this.addModels([model]);\r\n }\r\n\r\n addModels(models: readonly M[]): void {\r\n if (models.length === 0) {\r\n return;\r\n }\r\n const existingIds = new Set<Id>(this.models.map((item) => this.descriptor.id(item)));\r\n const batchIds = new Set<Id>();\r\n for (const model of models) {\r\n const id = this.descriptor.id(model);\r\n if (existingIds.has(id) || batchIds.has(id)) {\r\n this.throwDuplicateId(id);\r\n }\r\n batchIds.add(id);\r\n }\r\n this.applyModelsUpdate({\r\n nextModels: [...this.models, ...models],\r\n reason: 'add',\r\n added: models,\r\n });\r\n }\r\n\r\n removeModelsById(ids: readonly Id[]): number {\r\n if (ids.length === 0 || this.models.length === 0) {\r\n return 0;\r\n }\r\n const idSet = new Set<Id>(ids);\r\n const removed: M[] = [];\r\n const nextModels = this.models.filter((model) => {\r\n const id = this.descriptor.id(model);\r\n if (idSet.has(id)) {\r\n removed.push(model);\r\n return false;\r\n }\r\n return true;\r\n });\r\n if (removed.length === 0) {\r\n return 0;\r\n }\r\n this.applyModelsUpdate({\r\n nextModels,\r\n reason: 'remove',\r\n removed,\r\n });\r\n return removed.length;\r\n }\r\n\r\n clear(): void {\r\n if (this.models.length === 0) {\r\n return;\r\n }\r\n this.applyModelsUpdate({\r\n nextModels: [],\r\n reason: 'clear',\r\n removed: [...this.models],\r\n });\r\n }\r\n\r\n /** Fit view to all features on the layer. No-op if extent is empty. */\r\n centerOnAllModels(opts?: ViewFitOptions): void {\r\n const current = this.getCenterOnAllModelsSource();\r\n const extent = current?.getExtent?.();\r\n if (!extent || isEmpty(extent)) {\r\n return;\r\n }\r\n this.ctx.map.getView().fit(extent, toOlFitOptions(opts));\r\n }\r\n\r\n /** Fit view to a single feature by id. No-op if feature/geometry is missing. */\r\n centerOnModel(id: string | number, opts?: ViewFitOptions): void {\r\n const feature = this.registry.getFeature(id);\r\n const geom = feature?.getGeometry();\r\n if (!geom) {\r\n return;\r\n }\r\n this.ctx.map.getView().fit(geom.getExtent(), toOlFitOptions(opts));\r\n }\r\n\r\n /**\r\n * Fit view to a subset of features by ids (combined extent).\r\n * Missing ids are ignored. No-op if none found.\r\n */\r\n centerOnModels(ids: ReadonlyArray<string | number>, opts?: ViewFitOptions): void {\r\n const extent = createEmpty();\r\n\r\n let found = false;\r\n for (const id of ids) {\r\n const feature = this.registry.getFeature(id);\r\n const geom = feature?.getGeometry();\r\n if (!geom) continue;\r\n extend(extent, geom.getExtent());\r\n found = true;\r\n }\r\n\r\n if (!found || isEmpty(extent)) {\r\n return;\r\n }\r\n\r\n this.ctx.map.getView().fit(extent, toOlFitOptions(opts));\r\n }\r\n\r\n setVisible(visible: boolean): void {\r\n this.layer.setVisible(visible);\r\n }\r\n\r\n isVisible(): boolean {\r\n return this.layer.getVisible();\r\n }\r\n\r\n setOpacity(opacity: number): void {\r\n this.layer.setOpacity(opacity);\r\n }\r\n\r\n getOpacity(): number {\r\n return this.layer.getOpacity();\r\n }\r\n\r\n getZIndex(): number | undefined {\r\n return this.layer.getZIndex();\r\n }\r\n\r\n setZIndex(z: number): void {\r\n this.layer.setZIndex(z);\r\n }\r\n\r\n getModelById(id: Id): M | undefined {\r\n return this.registry.getModel(id);\r\n }\r\n\r\n hasModel(id: Id): boolean {\r\n return this.registry.getFeature(id) != null;\r\n }\r\n\r\n getAllModels(): readonly M[] {\r\n return [...this.models];\r\n }\r\n\r\n getAllModelIds(): Array<Id> {\r\n return this.models.map((model) => this.descriptor.id(model));\r\n }\r\n\r\n setFeatureStates(\r\n ids: Id | ReadonlyArray<Id>,\r\n states?: string | string[],\r\n ): void {\r\n const targetIds = Array.isArray(ids) ? ids : [ids];\r\n const nextStates = states ? (Array.isArray(states) ? states : [states]) : [];\r\n\r\n targetIds.forEach((id) => {\r\n const feature = this.registry.getFeature(id);\r\n if (feature) {\r\n setFeatureStates(feature, nextStates);\r\n }\r\n });\r\n\r\n this.scheduleInvalidate();\r\n }\r\n\r\n clearFeatureStates(ids: Id | ReadonlyArray<Id>): void {\r\n this.setFeatureStates(ids, []);\r\n }\r\n\r\n protected setModelsInternal(models: readonly M[]): void {\r\n const nextIds = new Set<string | number>();\r\n models.forEach((model) => {\r\n const id = this.descriptor.id(model);\r\n nextIds.add(id);\r\n const existingFeature = this.registry.getFeature(id);\r\n if (existingFeature) {\r\n const prevModel = this.registry.getModel(id);\r\n if (prevModel !== model) {\r\n this.registry.updateModel(id, model);\r\n existingFeature.setGeometry(this.descriptor.geometry.fromModel(model));\r\n }\r\n return;\r\n }\r\n\r\n const feature = new Feature<G>({\r\n geometry: this.descriptor.geometry.fromModel(model),\r\n });\r\n feature.setId(id);\r\n this.registry.set(id, model, feature);\r\n this.source.addFeature(feature);\r\n this.descriptor.geometry.onCreate?.({feature, model, ctx: this.ctx});\r\n });\r\n\r\n const toRemove: Array<string | number> = [];\r\n this.registry.forEachId((id) => {\r\n if (!nextIds.has(id)) {\r\n toRemove.push(id);\r\n }\r\n });\r\n toRemove.forEach((id) => {\r\n const feature = this.registry.remove(id);\r\n if (feature) {\r\n this.source.removeFeature(feature);\r\n }\r\n });\r\n }\r\n\r\n protected getCenterOnAllModelsSource(): VectorSource<G> | null {\r\n return this.source;\r\n }\r\n\r\n private emitModelChanges(changes: ModelChange<M>[]): void {\r\n if (changes.length === 0) {\r\n return;\r\n }\r\n this.changeHandlers.forEach((handler) => handler(changes));\r\n }\r\n\r\n private emitCollectionChange(event: ModelsCollectionEvent<M>): void {\r\n this.collectionHandlers.forEach((handler) => handler(event));\r\n }\r\n\r\n private assertUniqueIds(models: readonly M[]): void {\r\n const ids = new Set<Id>();\r\n for (const model of models) {\r\n const id = this.descriptor.id(model);\r\n if (ids.has(id)) {\r\n this.throwDuplicateId(id);\r\n }\r\n ids.add(id);\r\n }\r\n }\r\n\r\n private throwDuplicateId(id: Id): never {\r\n throw new DuplicateModelIdError(id, this.layerId);\r\n }\r\n\r\n private applyModelsUpdate(args: {\r\n nextModels: readonly M[];\r\n reason: ModelsSetReason;\r\n added?: readonly M[];\r\n removed?: readonly M[];\r\n }): void {\r\n const prevSnapshot = [...this.models];\r\n const internalNext = [...args.nextModels];\r\n this.models = internalNext;\r\n this.setModelsInternal(this.models);\r\n const nextSnapshot = [...internalNext];\r\n this.emitCollectionChange({\r\n prev: prevSnapshot,\r\n next: nextSnapshot,\r\n reason: args.reason,\r\n added: args.added ? [...args.added] : undefined,\r\n removed: args.removed ? [...args.removed] : undefined,\r\n });\r\n }\r\n\r\n private replaceModelSnapshot(id: Id, model: M): void {\r\n const index = this.models.findIndex((item) => this.descriptor.id(item) === id);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.models[index] = model;\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createEmpty} from 'ol/extent';\r\nimport type ClusterSource from 'ol/source/Cluster';\r\nimport type VectorSource from 'ol/source/Vector';\r\n\r\nimport { clearFeatureStates } from './style/feature-states';\r\nimport { createClusterStyleFunction } from './style/style-pipeline';\r\nimport {VectorLayerBase, VectorLayerBaseOptions} from './vector-layer-base';\r\n\r\nexport type ClusteredLayerOptions<M, G extends Geometry, OPTS extends object> =\r\n VectorLayerBaseOptions<M, G, OPTS> & {\r\n clusterSource: ClusterSource;\r\n };\r\n\r\nexport class ClusteredVectorLayer<M, G extends Geometry, OPTS extends object>\r\n extends VectorLayerBase<M, G, OPTS>\r\n{\r\n private readonly clusterSource: ClusterSource;\r\n private clusteringEnabled: boolean;\r\n\r\n constructor(options: ClusteredLayerOptions<M, G, OPTS>) {\r\n super(options);\r\n this.clusterSource = options.clusterSource;\r\n this.clusteringEnabled = options.descriptor.clustering?.enabledByDefault ?? false;\r\n\r\n this.layer.setStyle(\r\n createClusterStyleFunction({\r\n descriptor: this.descriptor,\r\n clustering: options.descriptor.clustering!,\r\n ctx: this.ctx,\r\n registryGetModel: (feature) => this.registry.getModelByFeature(feature as Feature<G>),\r\n map: this.ctx.map,\r\n }),\r\n );\r\n\r\n this.layer.setSource(\r\n this.clusteringEnabled ? (this.clusterSource as unknown as VectorSource<G>) : this.source,\r\n );\r\n }\r\n\r\n override setModels(models: readonly M[]): void {\r\n this.setModelsInternal(models);\r\n this.scheduleInvalidate();\r\n }\r\n\r\n setClusteringEnabled(enabled: boolean): void {\r\n if (this.clusteringEnabled === enabled) {\r\n return;\r\n }\r\n this.clusteringEnabled = enabled;\r\n this.clearInteractionStates();\r\n this.layer.setSource(\r\n enabled ? (this.clusterSource as unknown as VectorSource<G>) : this.source,\r\n );\r\n if (enabled) {\r\n const view = this.ctx.map.getView();\r\n const resolution = view.getResolution() ?? 1;\r\n this.clusterSource.loadFeatures(createEmpty(), resolution, view.getProjection());\r\n this.clusterSource.refresh();\r\n }\r\n this.scheduleInvalidate();\r\n }\r\n\r\n isClusteringEnabled(): boolean {\r\n return this.clusteringEnabled;\r\n }\r\n\r\n private clearInteractionStates(): void {\r\n this.registry.forEachId((id) => {\r\n const feature = this.registry.getFeature(id);\r\n if (feature) {\r\n clearFeatureStates(feature);\r\n }\r\n });\r\n }\r\n\r\n protected override getCenterOnAllModelsSource(): VectorSource<G> | null {\r\n return this.layer.getSource() as unknown as VectorSource<G> | null;\r\n }\r\n}\r\n","import Feature from 'ol/Feature';\r\nimport type Geometry from 'ol/geom/Geometry';\r\nimport {createStyleFunction} from './style/style-pipeline';\r\nimport {VectorLayerBase, VectorLayerBaseOptions} from './vector-layer-base';\r\n\r\nexport type PlainLayerOptions<M, G extends Geometry, OPTS extends object> =\r\n VectorLayerBaseOptions<M, G, OPTS>;\r\n\r\nexport class PlainVectorLayer<M, G extends Geometry, OPTS extends object> extends VectorLayerBase<\r\n M,\r\n G,\r\n OPTS\r\n> {\r\n constructor(options: PlainLayerOptions<M, G, OPTS>) {\r\n super(options);\r\n\r\n this.layer.setStyle(\r\n createStyleFunction({\r\n descriptor: this.descriptor,\r\n ctx: this.ctx,\r\n registryGetModel: (feature) => this.registry.getModelByFeature(feature as Feature<G>),\r\n map: this.ctx.map,\r\n }),\r\n );\r\n }\r\n}\r\n","import type { Enabled, PopupHostApi, PopupItem } from '../public/types';\r\n\r\nexport type PopupHostOptions = {\r\n enabled?: Enabled;\r\n maxItems?: number;\r\n sort?: (a: PopupItem<any>, b: PopupItem<any>) => number;\r\n mount?: HTMLElement | (() => HTMLElement);\r\n};\r\n\r\ntype ItemWithIndex = { item: PopupItem<any>; index: number };\r\n\r\nexport class PopupHost implements PopupHostApi {\r\n private items: PopupItem<any>[] = [];\r\n private container: HTMLElement | null = null;\r\n private target: HTMLElement | null = null;\r\n\r\n constructor(private readonly options: PopupHostOptions = {}) {\r\n if (options.mount) {\r\n this.mount(options.mount);\r\n }\r\n }\r\n\r\n push(items: PopupItem<any>[]): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.prepareItems([...this.items, ...items]);\r\n this.render();\r\n }\r\n\r\n set(items: PopupItem<any>[]): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.prepareItems(items);\r\n this.render();\r\n }\r\n\r\n clear(): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = [];\r\n this.render();\r\n }\r\n\r\n remove(key: string | number): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n this.items = this.items.filter((item) => this.getDedupKey(item) !== key);\r\n this.render();\r\n }\r\n\r\n getItems(): PopupItem<any>[] {\r\n if (!this.isEnabled()) {\r\n return [];\r\n }\r\n return [...this.items];\r\n }\r\n\r\n mount(target: HTMLElement | (() => HTMLElement)): void {\r\n if (!this.ensureEnabled()) {\r\n return;\r\n }\r\n const element = typeof target === 'function' ? target() : target;\r\n if (!element) {\r\n return;\r\n }\r\n if (this.target !== element) {\r\n this.unmount();\r\n }\r\n this.target = element;\r\n this.render();\r\n }\r\n\r\n dispose(): void {\r\n this.unmount();\r\n this.items = [];\r\n }\r\n\r\n private ensureEnabled(): boolean {\r\n if (this.isEnabled()) {\r\n return true;\r\n }\r\n this.items = [];\r\n this.unmount();\r\n return false;\r\n }\r\n\r\n private isEnabled(): boolean {\r\n const enabled = this.options.enabled;\r\n if (enabled === undefined) {\r\n return true;\r\n }\r\n return typeof enabled === 'function' ? enabled() : enabled;\r\n }\r\n\r\n private unmount(): void {\r\n if (this.container && this.container.parentElement) {\r\n this.container.parentElement.removeChild(this.container);\r\n }\r\n this.container = null;\r\n this.target = null;\r\n }\r\n\r\n private prepareItems(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const deduped = this.dedup(items);\r\n const sorted = this.applySort(deduped);\r\n return this.applyLimit(sorted);\r\n }\r\n\r\n private dedup(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const result: PopupItem<any>[] = [];\r\n const indices = new Map<string | number, number>();\r\n items.forEach((item) => {\r\n const key = this.getDedupKey(item);\r\n if (key === undefined) {\r\n result.push(item);\r\n return;\r\n }\r\n const existingIndex = indices.get(key);\r\n if (existingIndex !== undefined) {\r\n result[existingIndex] = item;\r\n return;\r\n }\r\n indices.set(key, result.length);\r\n result.push(item);\r\n });\r\n return result;\r\n }\r\n\r\n private applySort(items: PopupItem<any>[]): PopupItem<any>[] {\r\n const comparator = this.options.sort ?? this.defaultSort;\r\n const withIndex: ItemWithIndex[] = items.map((item, index) => ({ item, index }));\r\n withIndex.sort((a, b) => {\r\n const result = comparator(a.item, b.item);\r\n if (result !== 0) {\r\n return result;\r\n }\r\n return a.index - b.index;\r\n });\r\n return withIndex.map((entry) => entry.item);\r\n }\r\n\r\n private applyLimit(items: PopupItem<any>[]): PopupItem<any>[] {\r\n if (this.options.maxItems === undefined) {\r\n return items;\r\n }\r\n return items.slice(0, this.options.maxItems);\r\n }\r\n\r\n private getDedupKey(item: PopupItem<any>): string | number | undefined {\r\n if (item.dedupKey !== undefined) {\r\n return item.dedupKey;\r\n }\r\n const model = item.model as { id?: string | number };\r\n if (model && (typeof model.id === 'string' || typeof model.id === 'number')) {\r\n return model.id;\r\n }\r\n return undefined;\r\n }\r\n\r\n private defaultSort(a: PopupItem<any>, b: PopupItem<any>): number {\r\n const aPriority = a.priority ?? 0;\r\n const bPriority = b.priority ?? 0;\r\n return bPriority - aPriority;\r\n }\r\n\r\n private render(): void {\r\n if (!this.target) {\r\n return;\r\n }\r\n if (!this.container) {\r\n this.container = document.createElement('div');\r\n this.container.className = 'mf-popup-host';\r\n this.target.appendChild(this.container);\r\n }\r\n this.container.innerHTML = '';\r\n this.items.forEach((item) => {\r\n const card = document.createElement('div');\r\n card.className = 'mf-popup-item';\r\n if (item.className) {\r\n card.classList.add(item.className);\r\n }\r\n if (typeof item.content === 'string') {\r\n card.textContent = item.content;\r\n } else {\r\n card.appendChild(item.content);\r\n }\r\n const key = this.getDedupKey(item);\r\n if (key !== undefined) {\r\n const close = document.createElement('button');\r\n close.type = 'button';\r\n close.dataset['popupClose'] = String(key);\r\n close.textContent = '×';\r\n close.addEventListener('click', () => this.remove(key));\r\n card.appendChild(close);\r\n }\r\n this.container!.appendChild(card);\r\n });\r\n }\r\n}\r\n","import VectorLayer from 'ol/layer/Vector';\r\nimport ClusterSource from 'ol/source/Cluster';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport type OlMap from 'ol/Map';\r\n\r\nimport type {\r\n MapContext,\r\n MapSchema,\r\n VectorLayerApi,\r\n VectorLayerDescriptor,\r\n} from '../public/types';\r\nimport { createMapContext } from './map-context';\r\nimport { InteractionManager } from './interaction-manager';\r\nimport { ClusteredVectorLayer } from './clustered-layer';\r\nimport { PlainVectorLayer } from './plain-layer';\r\nimport { PopupHost } from './popup-host';\r\nimport { FlushScheduler } from './scheduler';\r\n\r\nexport class LayerManager<Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]> {\r\n private readonly layers: Record<string, VectorLayer> = {};\r\n private readonly apis: Record<string, VectorLayerApi<any, any>> = {};\r\n private readonly interactions: InteractionManager<Layers>;\r\n private readonly ctx: MapContext;\r\n\r\n private constructor(private readonly map: OlMap, schema: MapSchema<Layers>) {\r\n const popupHost = schema.options?.popupHost ? new PopupHost(schema.options.popupHost) : undefined;\r\n const scheduler = new FlushScheduler(schema.options?.scheduler?.policy ?? 'microtask');\r\n const ctx = createMapContext(this.map, this.apis, popupHost, scheduler);\r\n this.ctx = ctx;\r\n\r\n schema.layers.forEach((descriptor) => {\r\n const source = new VectorSource<any>();\r\n const clusterSource = descriptor.clustering\r\n ? new ClusterSource({\r\n source,\r\n distance: descriptor.clustering.distance,\r\n })\r\n : null;\r\n const layer = new VectorLayer({ source });\r\n if (descriptor.zIndex !== undefined) {\r\n layer.setZIndex(descriptor.zIndex);\r\n }\r\n if (descriptor.visibleByDefault !== undefined) {\r\n layer.setVisible(descriptor.visibleByDefault);\r\n }\r\n if (descriptor.title) {\r\n layer.set('title', descriptor.title);\r\n }\r\n layer.set('id', descriptor.id);\r\n\r\n const scheduleInvalidate = () => scheduler.schedule(layer, () => layer.changed());\r\n const api = descriptor.clustering\r\n ? new ClusteredVectorLayer({\r\n descriptor,\r\n layer,\r\n source,\r\n clusterSource: clusterSource!,\r\n ctx,\r\n scheduleInvalidate,\r\n })\r\n : new PlainVectorLayer({\r\n descriptor,\r\n layer,\r\n source,\r\n ctx,\r\n scheduleInvalidate,\r\n });\r\n\r\n this.layers[descriptor.id] = layer;\r\n this.apis[descriptor.id] = api;\r\n this.map.addLayer(layer);\r\n });\r\n\r\n this.interactions = new InteractionManager({\r\n ctx,\r\n map: this.map,\r\n schema,\r\n layers: this.layers,\r\n apis: this.apis,\r\n });\r\n }\r\n\r\n static create<Layers extends readonly VectorLayerDescriptor<any, any, any, any>[]>(\r\n map: OlMap,\r\n schema: MapSchema<Layers>,\r\n ): LayerManager<Layers> {\r\n return new LayerManager(map, schema);\r\n }\r\n\r\n getLayer(id: string): VectorLayer | undefined {\r\n return this.layers[id];\r\n }\r\n\r\n getApi(id: string): VectorLayerApi<any, any> | undefined {\r\n return this.apis[id];\r\n }\r\n\r\n getApis(): Record<string, VectorLayerApi<any, any>> {\r\n return { ...this.apis };\r\n }\r\n\r\n getContext(): MapContext {\r\n return this.ctx;\r\n }\r\n\r\n refreshEnabled(): void {\r\n this.interactions.refreshEnabled();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of lib\r\n */\r\n\r\nexport * from './lib/lib.service';\r\nexport * from './lib/lib.component';\r\nexport * from './lib/map-framework';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;MAKa,UAAU,CAAA;AAErB,IAAA,WAAA,GAAA;wGAFW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA;;4FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCQY,YAAY,CAAA;wGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,YAAY,EAPb,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAGU,YAAY,EAAA,UAAA,EAAA,CAAA;kBAVxB,SAAS;+BACE,SAAS,EAAA,OAAA,EACV,EAAE,EACD,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA;;;ACmKH;;;;;;AAMG;AACG,MAAO,qBAAsB,SAAQ,KAAK,CAAA;AAK5B,IAAA,EAAA;AAEA,IAAA,OAAA;IANO,IAAI,GAAG,uBAAuB;AAEvD,IAAA,WAAA;;IAEkB,EAAM;;AAEN,IAAA,OAAe,EAC/B,OAAgB,EAAA;AAEhB,QAAA,KAAK,CAAC,OAAO,IAAI,CAAA,eAAA,EAAkB,MAAM,CAAC,EAAE,CAAC,CAA8B,2BAAA,EAAA,OAAO,CAAI,EAAA,CAAA,CAAC;QALvE,IAAE,CAAA,EAAA,GAAF,EAAE;QAEF,IAAO,CAAA,OAAA,GAAP,OAAO;;AAK1B;;MC3LY,cAAc,CAAA;AAQI,IAAA,aAAA;AAPZ,IAAA,KAAK,GAAG,IAAI,GAAG,EAAuB;IAC/C,aAAa,GAAuB,IAAI;IACxC,cAAc,GAAG,CAAC;IAClB,KAAK,GAAkB,IAAI;IAC3B,UAAU,GAAG,CAAC;IACL,WAAW,GAAkB,EAAE;AAEhD,IAAA,WAAA,CAA6B,gBAA6B,WAAW,EAAA;QAAxC,IAAa,CAAA,aAAA,GAAb,aAAa;;IAE1C,KAAK,CAAC,EAAc,EAAE,OAAsB,EAAA;AAC1C,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;AAEvC,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC;AACpB,QAAA,IAAI;AACF,YAAA,EAAE,EAAE;;gBACI;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAClD,YAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;;YAExB,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,KAAK,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;gBACjF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE;AACzD,gBAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;;;;AAKhC,IAAA,QAAQ,CAAC,GAAY,EAAE,IAAgB,EAAE,MAAoB,EAAA;QAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;AAGnB,IAAA,YAAY,CAAC,MAAoB,EAAA;QACvC,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;AAC9C,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;YACtE;;AAGF,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;AACzD,gBAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;YAE7B;;AAGF,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;AAGrB,IAAA,aAAa,CAAC,MAAmB,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,cAAc;AACnC,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;AACvB,gBAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAElC,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAClE;;AAGF,QAAA,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;;IAG9C,KAAK,CAAC,MAAmB,EAAE,KAAa,EAAA;AAC9C,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;YAClE;;AAEF,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;AAEnB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QAClB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;;IAGzB,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;;QAEtD,OAAO,IAAI,CAAC,aAAa;;IAGnB,eAAe,CACrB,OAA2B,EAC3B,IAAiB,EAAA;QAEjB,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG,WAAW;;IAG1D,mBAAmB,CAAC,OAAoB,EAAE,IAAiB,EAAA;AACjE,QAAA,OAAO,OAAO,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK;;AAEnD;;ACnGM,MAAM,gBAAgB,GAAG,CAC9B,GAAU,EACV,MAAgD,EAChD,SAAwB,EACxB,SAA4B,GAAA,IAAI,cAAc,EAAE,KAClC;IACd,OAAO;QACL,GAAG;QACH,MAAM;QACN,SAAS;AACT,QAAA,KAAK,EAAE,CAAC,EAAc,EAAE,OAAsB,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC;KAChF;AACH,CAAC;;ACdD,MAAM,oBAAoB,GAAG,UAAU;AAEhC,MAAM,kBAAkB,GAAG,CAChC,OAA0B,KACS;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC5B,QAAA,OAAO,IAAI;;IAEb,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAA+B;QAChE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,OAAO,KAAK;;QAEd,MAAM,SAAS,GAAG,IAAgD;AAClE,QAAA,OAAO,OAAO,SAAS,CAAC,GAAG,KAAK,UAAU,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,UAAU;AAC3F,KAAC,CAAC;AACF,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI;;AAEb,IAAA,OAAO,KAAK;AACd,CAAC;;ACrBD;;;AAGG;AACH,MAAM,kBAAkB,GAAqC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC7E,MAAM,oBAAoB,GAAG,GAAG;SAEhB,WAAW,CACzB,CAAkB,EAClB,WAAyD,kBAAkB,EAAA;IAE3E,IAAI,CAAC,CAAC,EAAE;AACN,QAAA,OAAO,QAAQ;;AAGjB,IAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG;QACf,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;IAGrB,IAAI,UAAU,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE;AACxC,QAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC;;AAG7D,IAAA,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;AAC3C;AAEM,SAAU,cAAc,CAAC,IAAqB,EAAA;IAClD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,kBAAkB;AAChE,IAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,oBAAoB;;AAGvD,IAAA,MAAM,OAAO,GAAQ,EAAC,OAAO,EAAE,QAAQ,EAAC;AACxC,IAAA,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE;AACzB,QAAA,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;;AAEhC,IAAA,OAAO,OAAO;AAChB;;ACpCA,MAAM,UAAU,GAAG,gBAAgB;AAE5B,MAAM,gBAAgB,GAAG,CAAC,OAA0B,KAAc;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACtC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,QAAA,OAAO,MAAM;;AAEf,IAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,CAAC,MAAM,CAAC;;AAEjB,IAAA,OAAO,EAAE;AACX,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,OAA0B,EAAE,MAAgB,KAAU;AACrF,IAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC;AACjC,CAAC;AAEM,MAAM,kBAAkB,GAAG,CAAC,OAA0B,KAAU;AACrE,IAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;AAC7B,CAAC;;MCqGY,kBAAkB,CAAA;AAGZ,IAAA,GAAG;AACH,IAAA,GAAG;AACH,IAAA,MAAM;AACN,IAAA,MAAM;AACN,IAAA,IAAI;AACJ,IAAA,OAAO;AACP,IAAA,UAAU,GAAG,IAAI,GAAG,EAAmD;AACvE,IAAA,aAAa,GAAG,IAAI,GAAG,EAAmD;AAC1E,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAA2B;AACrD,IAAA,cAAc,GAAG,IAAI,GAAG,EAAwB;AAChD,IAAA,cAAc,GAAG,IAAI,GAAG,EAA6B;AACrD,IAAA,UAAU;AACV,IAAA,YAAY,GAAG,IAAI,GAAG,EAA2B;AACjD,IAAA,YAAY,GAAG,IAAI,GAAG,EAAmC;IAClE,YAAY,GAAG,CAAC;AAChB,IAAA,aAAa;AACb,IAAA,aAAa;AAErB,IAAA,WAAA,CAAY,OAA0C,EAAA;AACpD,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;AACtB,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,MAAM;QACjE,IAAI,CAAC,cAAc,EAAE;;IAGvB,cAAc,GAAA;AACZ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC5E,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE;;AAG7B,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmC;QAC5D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACxC,YAAA,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY;AACpD,YAAA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE;AAC3B,gBAAA,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1E,gBAAA,WAAW,EACT,CAAC,CAAC,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;AACjF,gBAAA,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1E,gBAAA,MAAM,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7E,gBAAA,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;AACtF,gBAAA,MAAM,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9E,aAAA,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QACzB,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;;AAGlC,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YACpC;;AAEF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY;AAE1D,YAAA,MAAM,SAAS,GAAG,YAAY,EAAE,SAAS;YACzC,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;gBAClD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACzC,oBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;oBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,KAAK;oBACL,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,YAAY,CAAC;AAC3D,iBAAA,CAAC;AACF,gBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAC9C,KAAK,EACL,KAAK,CAAC,UAA8B,EACpC,gBAAgB,EAChB,UAAU,CACX;AAED,oBAAA,IAAI,MAA4C;AAChD,oBAAA,IAAI,SAAS,CAAC,UAAU,EAAE;AACxB,wBAAA,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;;yBAC9E;AACL,wBAAA,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;;oBAGxB,IAAI,MAAM,EAAE;AACV,wBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;wBAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC;wBACrD,IAAI,QAAQ,EAAE;AACZ,4BAAA,MAAM,MAAM,GAAoB;gCAC9B,SAAS;gCACT,eAAe,EAAE,KAAK,CAAC,UAA8B;gCACrD,cAAc,EAAE,KAAK,CAAC,UAA8B;AACpD,gCAAA,QAAQ,EAAE,QAAQ;AAClB,gCAAA,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,CAAC;gCAC7C,SAAS;6BACV;AACD,4BAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC;4BACtD,IAAI,CAAC,WAAW,EAAE;AAElB,4BAAA,IAAI,SAAS,CAAC,KAAK,EAAE;AACnB,gCAAA,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;;AAGpD,4BAAA,MAAM,OAAO,GAAG,SAAS,CAAC;kCACtB,IAAI,CAAC,SAAS,CACZ,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;kCAE7E,KAAK;AACT,4BAAA,MAAM,CAAC,WAAW,GAAG,OAAO;4BAE5B,IAAI,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE;gCACpD;;;;;;AAOV,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;gBAClD;;AAGF,YAAA,MAAM,MAAM,GAAG,YAAY,EAAE,MAAM;AACnC,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;AACpE,YAAA,IAAI,CAAC,eAAe,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;gBAChE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACzC,oBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;oBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,KAAK;oBACL,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC;AACxD,iBAAA,CAAC;AAEF,gBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC;AAE5E,oBAAA,IAAI,MAA4C;AAChD,oBAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,wBAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;;yBACxE;AACL,wBAAA,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;;oBAGxB,IAAI,MAAM,EAAE;AACV,wBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;wBAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC;wBACrD,IAAI,QAAQ,EAAE;AACZ,4BAAA,MAAM,MAAM,GAAiB;gCAC3B,SAAS;AACT,gCAAA,QAAQ,EAAE,QAAQ;AAClB,gCAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,CAAC;gCAC1C,MAAM;6BACP;AACD,4BAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC;4BACpD,IAAI,CAAC,WAAW,EAAE;AAElB,4BAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,gCAAA,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;;AAGjD,4BAAA,MAAM,OAAO,GAAG,MAAM,CAAC;kCACnB,IAAI,CAAC,SAAS,CACZ,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;kCAEvE,KAAK;AACT,4BAAA,MAAM,CAAC,WAAW,GAAG,OAAO;4BAE5B,IAAI,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;gCACjD;;;;;;AAOV,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;gBAChD;;;AAIJ,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1B,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YACpC;;AAEF,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE;YACtE;;QAEF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC,YAAY,EAAE;oBACjB;;AAEF,gBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM;AAClC,gBAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC;AAExE,gBAAA,IAAI,YAAY,CAAC,cAAc,GAAG,CAAC,EAAE;AACnC,oBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AAC/B,wBAAA,OAAO,EAAE;AACT,wBAAA,YAAY,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AAC3C,4BAAA,YAAY,CAAC,aAAa,GAAG,SAAS;AACtC,4BAAA,IAAI,YAAY,CAAC,YAAY,EAAE;AAC7B,gCAAA,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY;AACzC,gCAAA,YAAY,CAAC,YAAY,GAAG,SAAS;gCACrC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC;;AAExD,yBAAC,EAAE,YAAY,CAAC,cAAc,CAAC;;yBAC1B;AACL,wBAAA,YAAY,CAAC,YAAY,GAAG,KAAK;;;qBAE9B;AACL,oBAAA,OAAO,EAAE;;gBAGX,IAAI,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;oBAClE;;gBAEF;;AAEF,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;AAEnE,YAAA,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACzB,oBAAA,OAAO,EAAE;AACT,oBAAA,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACrC,wBAAA,MAAM,CAAC,aAAa,GAAG,SAAS;AAChC,wBAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,4BAAA,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY;AACnC,4BAAA,MAAM,CAAC,YAAY,GAAG,SAAS;4BAC/B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;;AAEnD,qBAAC,EAAE,MAAM,CAAC,cAAc,CAAC;;qBACpB;AACL,oBAAA,MAAM,CAAC,YAAY,GAAG,KAAK;;;iBAExB;AACL,gBAAA,OAAO,EAAE;;YAGX,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE;gBAC/D;;;AAIJ,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1B,IAAA,eAAe,CAAC,KAA+B,EAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;YAClC;;AAEF,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE;YACtE;;QAEF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,gBAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,oBAAA,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC;AAClC,oBAAA,MAAM,CAAC,aAAa,GAAG,SAAS;;AAElC,gBAAA,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY;AACnC,oBAAA,MAAM,CAAC,YAAY,GAAG,SAAS;oBAC/B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;;AAEjD,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;AAC5D,gBAAA,IAAI,QAAQ,IAAI,SAAS,CAAC,KAAK,EAAE;AAC/B,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAC9C,KAAK,EACL,MAAM,CAAC,eAAe,EACtB,cAAc,EACd,CAAC,QAAQ,CAAC,CACX;AACD,oBAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CACjC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAC1E;;qBACI;AACL,oBAAA,MAAM,CAAC,WAAW,GAAG,KAAK;;gBAG5B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;gBAE7C,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE;oBAC/D;;gBAEF;;AAGF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,YAAY,EAAE;gBACjB;;AAEF,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM;AAClC,YAAA,IAAI,YAAY,CAAC,aAAa,EAAE;AAC9B,gBAAA,YAAY,CAAC,YAAY,CAAC,aAAa,CAAC;AACxC,gBAAA,YAAY,CAAC,aAAa,GAAG,SAAS;;AAExC,YAAA,IAAI,YAAY,CAAC,YAAY,EAAE;AAC7B,gBAAA,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY;AACzC,gBAAA,YAAY,CAAC,YAAY,GAAG,SAAS;gBACrC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC;;AAEtD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC;AAClE,YAAA,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1E,gBAAA,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CACvC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CACpE;;iBACI;AACL,gBAAA,YAAY,CAAC,WAAW,GAAG,KAAK;;YAGlC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC;YAEhD,IAAI,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;gBAClE;;;AAIJ,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1B,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YACpC;;AAEF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC5E,MAAM,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,KAAK,GAAG,KAAK;AACzF,QAAA,MAAM,SAAS,GAAG,QAAQ,KAAK,OAAO;QACtC,MAAM,UAAU,GAA0B,EAAE;QAC5C,IAAI,YAAY,GAAG,KAAK;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK;AAC1D,YAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;AAC7D,YAAA,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE;gBAC/B;;AAEF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,gBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK;AACL,gBAAA,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,KAAM,CAAC,YAAY,GAAG,SAAS,CAAC;AACnF,aAAA,CAAC;YAEF,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAM,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;gBACxE,IAAI,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAM,CAAC,EAAE;oBACjD;;;AAIJ,YAAA,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,YAAY,EAAE;AAC3C,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;AACjE,gBAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,oBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAC7B,oBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;wBAC9B,YAAY,GAAG,IAAI;;;;;AAK3B,QAAA,IAAI,SAAS,IAAI,SAAS,EAAE;AAC1B,YAAA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;;AAG3B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1B,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YACpC;;AAEF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC5E,MAAM,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,KAAK,GAAG,KAAK;AACzF,QAAA,MAAM,SAAS,GAAG,QAAQ,KAAK,OAAO;QACtC,MAAM,UAAU,GAA0B,EAAE;QAC5C,IAAI,YAAY,GAAG,KAAK;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM;YAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK;AAC1D,YAAA,MAAM,aAAa,GAAG,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9D,YAAA,MAAM,YAAY,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3D,YAAA,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI;AAC9F,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,EAAE;gBACvE;;AAGF,YAAA,MAAM,UAAU,GAAG;gBACjB,aAAa,GAAG,MAAM,EAAE,YAAY,GAAG,SAAS;gBAChD,YAAY,GAAG,KAAK,EAAE,YAAY,GAAG,SAAS;aAC/C,CAAC,MAAM,CAAC,CAAC,KAAK,KAAsB,KAAK,KAAK,SAAS,CAAC;YACzD,MAAM,YAAY,GAChB,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACnF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,gBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK;gBACL,YAAY;AACb,aAAA,CAAC;AAEF,YAAA,IAAI,iBAAiB,IAAI,SAAS,CAAC,OAAO,EAAE;AAC1C,gBAAA,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,YAAY,EAAE;AAC3C,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;AACjE,oBAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,wBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAC7B,wBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;4BAC9B,YAAY,GAAG,IAAI;;;;AAIzB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC;gBACpF,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;wBACvC;;oBAEF;;;AAIJ,YAAA,IAAI,aAAa,IAAI,YAAY,EAAE;AACjC,gBAAA,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC,KAAK,GAAG,EAAE;AACxD,gBAAA,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC,KAAK,GAAG,EAAE;gBAEtD,MAAM,aAAa,GAAG;AACpB,sBAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAO,EAAE,WAAW,EAAE,KAAK;sBACrD,KAAK;gBACT,MAAM,WAAW,GAAG,aAAa,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAO,CAAC;AACxE,gBAAA,MAAM,UAAU,GACd,CAAC,aAAa,KAAK,aAAa,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAO,CAAC,CAAC;AAE9E,gBAAA,IAAI,YAAY,IAAI,UAAU,EAAE;AAC9B,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAM,EAAE,UAAU,EAAE,KAAK,CAAC;oBACxE,IAAI,YAAY,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAM,CAAC,EAAE;wBACtD;;;gBAIJ,IAAI,WAAW,EAAE;oBACf;;;AAIJ,YAAA,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,YAAY,IAAI,EAAE,iBAAiB,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;AACxF,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;AACjE,gBAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,oBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAC7B,oBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;wBAC9B,YAAY,GAAG,IAAI;;;;;AAK3B,QAAA,IAAI,SAAS,IAAI,SAAS,EAAE;AAC1B,YAAA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;;;AAI7B,IAAA,iBAAiB,CAAC,KAA+B,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;YACjC;;AAEF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW;AACtE,YAAA,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;gBACxD;;AAGF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,gBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK;gBACL,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC;AAC7D,aAAA,CAAC;AAEF,YAAA,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE;gBACzF;;AAEF,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS;AAE3B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;YACzE,IAAI,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE;gBACtD;;;;AAKE,IAAA,sBAAsB,CAAC,EAAc,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB;QAChE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;YAC9B;;AAEF,QAAA,EAAE,EAAE;;AAGE,IAAA,aAAa,CAAC,YAAqB,EAAA;QACzC,MAAM,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,KAAK,GAAG,KAAK;AACzF,QAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO;AACvC,QAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO;QAEvC,IAAI,gBAAgB,GAAG,UAAU;QACjC,IAAI,gBAAgB,GAAG,UAAU;QACjC,IAAI,gBAAgB,GAAG,KAAK;QAC5B,IAAI,gBAAgB,GAAG,KAAK;QAC5B,IAAI,gBAAgB,GAAG,KAAK;QAC5B,IAAI,cAAc,GAAG,KAAK;QAE1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACxC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;AAClD,YAAA,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY;AACpD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC;AACpE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC;AACpE,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AACtE,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC;AAChF,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC;AAC5E,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAEtE,YAAA,IAAI,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE;gBAC9B,gBAAgB,GAAG,IAAI;;AAEzB,YAAA,IAAI,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,UAAU,IAAI,WAAW,EAAE;gBAC9D,gBAAgB,GAAG,IAAI;;AAEzB,YAAA,IAAI,KAAK,EAAE,WAAW,IAAI,gBAAgB,EAAE;gBAC1C,gBAAgB,GAAG,IAAI;;AAEzB,YAAA,IAAI,KAAK,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,IAAI,cAAc,IAAI,WAAW,EAAE;gBACtE,gBAAgB,GAAG,IAAI;gBACvB,gBAAgB,GAAG,IAAI;gBACvB,cAAc,GAAG,IAAI;;YAEvB,IAAI,YAAY,IAAI,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE;gBAC3D,gBAAgB,GAAG,IAAI;;YAEzB,IACE,UAAU,CAAC,UAAU;AACrB,iBAAC,UAAU,CAAC,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EACpE;gBACA,gBAAgB,GAAG,IAAI;;AAE3B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,KAAK,KACzD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAC9B;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;;AAGlF,IAAA,gBAAgB,CAAC,SAA+C,EAAA;AACtE,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;QAEjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACxC,YAAA,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY;AACpD,YAAA,MAAM,MAAM,GAAG,YAAY,EAAE,MAAM;AACnC,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,KAAK;AAC7D,YAAA,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,IAAI,OAAO;YACxC,IAAI,CAAC,YAAY,EAAE;gBACjB;;YAEF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,EAAE;gBACV;;AAEF,YAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAE,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;gBACnE;;YAEF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAmC;YACvE,IAAI,CAAC,MAAM,EAAE;gBACX;;AAEF,YAAA,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC;gBAC7B,MAAM;gBACN,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC;gBACzD,KAAK,EAAE,MAAM,CAAC,WAAW;AAC1B,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,GAAG;gBACX,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,KAClC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CACnD;gBACD,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,KAChC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CACjD;aACF;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC;AACpC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/D,SAAC,CAAC;AAEF,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;;AAEtC,SAAC,CAAC;;AAGI,IAAA,oBAAoB,CAAC,OAAe,EAAA;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE;YACV;;AAEF,QAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC;AAC7C,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;;AAG7B,IAAA,uBAAuB,CAC7B,KAAiB,EACjB,MAAyB,EACzB,KAAkB,EAAA;AAElB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;AACrE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB;;AAEF,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;;AAE5C,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;;AAIpE,IAAA,qBAAqB,CAC3B,KAAiB,EACjB,MAAyB,EACzB,KAAkB,EAAA;AAElB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;AACrE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB;;AAEF,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAK;AAC/B,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBAC3C,IAAI,CAAC,QAAQ,EAAE;oBACb;;AAEF,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AAClD,gBAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CACd,EAAE,EACF,CAAC,IAAI,KACH,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAe,CAAC,EAC/E,EAAC,MAAM,EAAE,QAAQ,EAAC,CACnB;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;AACF,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;AAExE,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;;IAIvC,2BAA2B,CACjC,KAAiB,EACjB,QAAuC,EAAA;AAEvC,QAAA,OAAO;AACJ,aAAA,QAAQ;AACR,aAAA,GAAG,CAAC,CAAC,OAAO,KAAI;YACf,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAAuB,CAAC;YAClE,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,IAAI;;AAEb,YAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAuB;AAChD,SAAC;aACA,MAAM,CAAC,CAAC,IAAI,KAAgC,IAAI,KAAK,IAAI,CAAC;;AAGvD,IAAA,oBAAoB,CAC1B,YAA8E,EAAA;AAE9E,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,MAAM;AACnB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,WAAW;AACxB,YAAA,YAAY,CAAC,SAAS;AACtB,YAAA,YAAY,CAAC,MAAM;SACpB;QACD,OAAO,UAAU,CAAC,IAAI,CACpB,CAAC,WAAW,KAAK,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CACjF;;AAGK,IAAA,cAAc,CACpB,IAAkB,EAClB,OAAgB,EAChB,OAAkD,EAAA;QAElD,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAChC,gBAAA,MAAM,GAAG,GACP,IAAI,CAAC,GAAG,CAAC,EAIV,CAAC,IAAI,EAAE,OAAO,CAAC;gBAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;;YAElC;;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;AAGnB,IAAA,cAAc,CAAC,IAAkB,EAAA;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QACvC,IAAI,GAAG,EAAE;AACP,YAAA,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;;AAI1B,IAAA,WAAW,CAAC,IAAkB,EAAA;QACpC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG5B,IAAA,oBAAoB,CAAC,SAA+C,EAAA;QAC1E,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,KAAI;YAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI;AACrC,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,MAAM,EAAE,KAAK;aACd;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACzC,IAAI,CAAC,KAAK,EAAE;gBACV;;YAGF,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAC7B,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;;YAE7B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC/B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;YAE9B,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACrC,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;;YAE7B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAE5B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;AAGnB,IAAA,eAAe,CAAC,KAAiB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE;YACT;;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK;AAC1D,QAAA,IAAI,KAAK,EAAE,KAAK,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;;QAEhE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;;AAGrC,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE;YACT;;QAEF,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM;AAC5D,QAAA,IAAI,MAAM,EAAE,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;QAEjE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;;AAGxC,IAAA,eAAe,CAAC,KAAiB,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;;;AAIhD,IAAA,YAAY,CAAC,KAAiB,EAAA;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;;;AAI7C,IAAA,YAAY,CAAC,KAAgC,EAAA;AACnD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAClD,QAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC;YACzC;;QAEF,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YACzB;;QAGF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY;YAC1D,IAAI,CAAC,YAAY,EAAE;gBACjB;;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;YAChD,IAAI,CAAC,MAAM,EAAE;gBACX;;YAEF,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC;AAC7D,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,gBAAA,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK;gBACL,YAAY;AACb,aAAA,CAAC;AACF,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACtB;;;AAIJ,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;IAGnB,sBAAsB,GAAA;QAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3C,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACtE,IAAI,eAAe,EAAE;AACnB,gBAAA,OAAO,eAAe,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI;;AAEjD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACjE,IAAI,YAAY,EAAE;AAChB,gBAAA,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI;;;AAG7C,QAAA,OAAO,SAAS;;AAGV,IAAA,cAAc,CACpB,YAA8E,EAAA;AAE9E,QAAA,MAAM,UAAU,GAAoD;AAClE,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,MAAM;AACnB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,WAAW;AACxB,YAAA,YAAY,CAAC,SAAS;AACtB,YAAA,YAAY,CAAC,MAAM;SACpB;AACD,QAAA,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE;YACpC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBACvC;;YAEF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;gBACxC;;YAEF,OAAO,WAAW,CAAC,MAAM;;AAE3B,QAAA,OAAO,SAAS;;AAGV,IAAA,qBAAqB,CAC3B,YAA8E,EAAA;AAE9E,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,MAAM;AACnB,YAAA,YAAY,CAAC,KAAK;AAClB,YAAA,YAAY,CAAC,WAAW;AACxB,YAAA,YAAY,CAAC,SAAS;AACtB,YAAA,YAAY,CAAC,MAAM;SACpB,CAAC,MAAM,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACnG,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;;QAExC,MAAM,UAAU,GAAG;aAChB,GAAG,CAAC,CAAC,WAAW,KAAK,WAAW,EAAE,YAAY;aAC9C,MAAM,CAAC,CAAC,KAAK,KAAsB,KAAK,KAAK,SAAS,CAAC;AAC1D,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;;AAExC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;;AAGxB,IAAA,SAAS,CAAC,MAAe,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;YACjC;;AAEF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE;YACX;;QAEF,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;;IAGrB,gBAAgB,GAAA;QACtB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI;QACnD,IAAI,aAAa,EAAE;AACjB,YAAA,OAAO,aAAa;;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI;QACrC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,YAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,gBAAA,OAAO,IAAI;;AAEb,YAAA,OAAO,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;;AAExC,QAAA,OAAO,MAAqB;;AAGtB,IAAA,aAAa,CAAC,OAAe,EAAA;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;AAC3E,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,OAAO,IAAI;;QAEb,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AAClB,YAAA,OAAO,IAAI;;QAEb,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;;AAGlC,IAAA,kBAAkB,CACxB,KAAiB,EACjB,MAAuB,EACvB,KAA+B,EAAA;AAE/B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;QAC5D,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;YACpD;;AAGF,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,UAA8B;AAC3D,QAAA,MAAM,KAAK,GAAG;YACZ,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5C,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;SAC7C;AACD,QAAA,MAAM,CAAC,cAAc,GAAG,cAAc;AACtC,QAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ;QAE1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;QAC/C,IAAI,CAAC,QAAQ,EAAE;YACb;;AAEF,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE;AACnC,QAAA,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAExC,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAC1B,KAAK,CAAC,GAAG,CAAC,MAAM,CACd,MAAM,CAAC,SAAS,EAChB,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,EAClF,EAAC,MAAM,EAAE,WAAW,EAAC,CACtB,CACF;AAED,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAC9C,KAAK,EACL,MAAM,CAAC,eAAe,EACtB,aAAa,EACb,CAAC,QAAQ,CAAC,CACX;AACD,YAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CACjC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAC7E;;aACI;AACL,YAAA,MAAM,CAAC,WAAW,GAAG,KAAK;;;AAItB,IAAA,iBAAiB,CACvB,KAAiB,EACjB,MAAoB,EACpB,KAA+B,EAAA;AAE/B,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;QAC5D,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;YACjD;;AAGF,QAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ;QAE1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;QAC/C,IAAI,CAAC,QAAQ,EAAE;YACb;;AAGF,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,EAAE;AACrC,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAC1B,KAAK,CAAC,GAAG,CAAC,MAAM,CACd,MAAM,CAAC,SAAS,EAChB,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,EACpF,EAAC,MAAM,EAAE,QAAQ,EAAC,CACnB,CACF;AAED,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1E,YAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CACjC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CACvE;;aACI;AACL,YAAA,MAAM,CAAC,WAAW,GAAG,KAAK;;;AAItB,IAAA,eAAe,CACrB,KAAiB,EACjB,MAAuB,EACvB,IAA+B,EAAA;AAE/B,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,MAAM,CAAC,QAAQ;AACzC,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC;AAClC,YAAA,MAAM,CAAC,aAAa,GAAG,SAAS;AAChC,YAAA,MAAM,CAAC,YAAY,GAAG,SAAS;;QAGjC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;;QAG7D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,aAAa,EAAE;;AAGd,IAAA,YAAY,CAClB,KAAiB,EACjB,MAAoB,EACpB,IAA+B,EAAA;AAE/B,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,MAAM,CAAC,QAAQ;AACzC,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC;AAClC,YAAA,MAAM,CAAC,aAAa,GAAG,SAAS;AAChC,YAAA,MAAM,CAAC,YAAY,GAAG,SAAS;;QAGjC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;QAG1D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,aAAa,EAAE;;IAGd,aAAa,CAAC,KAAiB,EAAE,SAA0B,EAAA;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI;;AAEb,QAAA,MAAM,cAAc,GAAG,MAAM,YAAY,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,MAAM;QACpF,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,IAAI;;QAEb,MAAM,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC;AACxD,QAAA,IAAI,EAAE,OAAO,YAAY,OAAO,CAAC,EAAE;AACjC,YAAA,OAAO,IAAI;;QAEb,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,OAA4B,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;;IAGnB,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;YAC3B;;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI;QACjD,IAAI,CAAC,YAAY,EAAE;YACjB;;QAEF,MAAM,QAAQ,GAAG;AACd,aAAA,QAAQ;aACR,MAAM,CAAC,CAAC,WAAW,KAA6B,WAAW,YAAY,OAAO,CAAC;AAClF,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE;;AAEhC,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;YAC/B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC;;AAE/D,YAAA,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;AAC9B,SAAC,CAAC;;IAGI,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;YAC3B;;AAEF,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;YAC3B;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB;;QAEF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,WAAW,KAAI;AACpD,YAAA,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC;AAClC,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;;AAGxB,IAAA,oBAAoB,CAC1B,KAA+B,EAC/B,eAAiC,EACjC,IAAuD,EACvD,KAA+B,EAAA;AAE/B,QAAA,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO;YACL,IAAI;YACJ,QAAQ;YACR,UAAU,EAAE,KAAK,CAAC,UAA8B;YAChD,eAAe;AACf,YAAA,eAAe,EAAE,KAAK;SACM;;AAGxB,IAAA,iBAAiB,CACvB,KAA+B,EAC/B,IAA+C,EAC/C,KAA+B,EAAA;AAE/B,QAAA,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO;YACL,IAAI;YACJ,QAAQ;AACR,YAAA,eAAe,EAAE,KAAK;SACG;;IAGrB,oBAAoB,GAAA;QAC1B,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,KAAI;YAC7C,MAAM,KAAK,GAA6B,EAAE;AAC1C,YAAA,IAAI,UAAkC;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAC5B,KAAK,CAAC,KAAK,EACX,CAAC,OAAO,KAAI;AACV,gBAAA,IAAI,EAAE,OAAO,YAAY,OAAO,CAAC,EAAE;oBACjC;;AAEF,gBAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAA4B,CAAC;gBACxE,IAAI,eAAe,EAAE;AACnB,oBAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC9B,IAAI,CAAC,UAAU,EAAE;AACf,4BAAA,UAAU,GAAG;AACX,gCAAA,OAAO,EAAE,OAA4B;AACrC,gCAAA,QAAQ,EAAE,eAAe;gCACzB,IAAI,EAAE,eAAe,CAAC,MAAM;6BAC7B;;wBAEH;;AAEF,oBAAA,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC;oBACxC,MAAM,WAAW,GAAG,GAAG,CAAC,iBAAiB,CAAC,aAAkC,CAAC;oBAC7E,IAAI,CAAC,WAAW,EAAE;wBAChB;;AAEF,oBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;oBAC1D;;gBAEF,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,OAA4B,CAAC;gBACjE,IAAI,CAAC,KAAK,EAAE;oBACV;;gBAEF,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAChC,aAAC,EACD;gBACE,WAAW,EAAE,CAAC,cAAc,KAAK,cAAc,KAAK,KAAK;gBACzD,YAAY;AACb,aAAA,CACF;AACD,YAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE;AACvC,SAAC;;AAGK,IAAA,wBAAwB,CAC9B,KAAiB,EACjB,KAA+B,EAC/B,KAA+B,EAAA;QAE/B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;AAC5C,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AAC5C,YAAA,OAAO,EAAE;;AAEX,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACxB,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;gBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK;AACN,aAAA,CAAC;YACF,OAAO;AACL,gBAAA,GAAG,SAAS;AACZ,gBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS;AACrC,gBAAA,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;aACxE;AACH,SAAC,CAAC;;AAGI,IAAA,iBAAiB,CACvB,KAAiB,EACjB,SAAwB,EACxB,KAA+B,EAAA;AAE/B,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE;AACzF,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU;AAC9C,YAAA,IAAI,UAAU,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AACjE,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;AAC9B,qBAAA,GAAG,CAAC,CAAC,cAAc,KAClB,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAmC,CAAC;qBAEjE,MAAM,CAAC,CAAC,KAAK,KAAmB,KAAK,KAAK,SAAS,CAAC;AACvD,gBAAA,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;oBACtC,MAAM;AACN,oBAAA,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI;oBAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK;AACN,iBAAA,CAAC;gBACF,OAAO;AACL,oBAAA;AACE,wBAAA,GAAG,SAAS;AACZ,wBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS;AACrC,wBAAA,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;AACvE,qBAAA;iBACF;;AAEH,YAAA,OAAO,EAAE;;AAEX,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;;IAG7D,kBAAkB,CAAC,KAAiB,EAAE,MAAa,EAAA;QACzD,MAAM,GAAG,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACzD,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;aACjC,IAAI,CAAC,GAAG,CAAC;QACZ,OAAO,CAAA,QAAA,EAAW,KAAK,CAAC,UAAU,CAAC,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;;IAGxC,gBAAgB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC;aAChB,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,MAAM;YAC3B,UAAU;YACV,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AAC9B,SAAA,CAAC;AACD,aAAA,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG;AAC1C,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACb,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;AACnC,YAAA,IAAI,EAAE,KAAK,EAAE,EAAE;gBACb,OAAO,EAAE,GAAG,EAAE;;AAEhB,YAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC1B,SAAC,CAAC;;AAGE,IAAA,eAAe,CAAC,YAAqB,EAAA;AAC3C,QAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC9B,YAAA,OAAO,YAAY;;QAErB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,KAAK,SAAS,EAAE;AACnD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY;;AAEzC,QAAA,OAAO,CAAC;;AAGF,IAAA,SAAS,CAAC,OAAmC,EAAA;AACnD,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YACjC,OAAO,OAAO,EAAE;;AAElB,QAAA,OAAO,OAAO;;AAGR,IAAA,cAAc,CAAC,OAAmC,EAAA;AACxD,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,OAAO;;AAGR,IAAA,YAAY,CAClB,KAAiB,EACjB,KAA6F,EAC7F,KAA+B,EAC/B,KAA+B,EAAA;AAE/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACtC,aAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnC,aAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;QAE1B,IAAI,OAAO,GAAG,KAAK;QACnB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;YACpC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;QAEhF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;YACvC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,OAAO;;AAG9F,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;;AAG7C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC;AAC9C,QAAA,OAAO,OAAO;;AAGR,IAAA,aAAa,CACnB,KAAiB,EACjB,MAA+F,EAC/F,KAA+B,EAC/B,KAA+B,EAAA;AAE/B,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC;AAC3B,cAAE,MAAM,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE;cAC9D,KAAK;QAET,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,gBAAA,OAAO,KAAK;;AAEd,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;AACxD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC;AACtD,YAAA,IAAI,MAAM,CAAC,OAAO,EAAE;gBAClB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACxE,gBAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;AACxB,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;AAEjE,gBAAA,OAAO,OAAO;;AAEhB,YAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;AAEjE,YAAA,OAAO,KAAK;;AAGd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC;AAClD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC;cACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;cAC9E,KAAK;AACT,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpC,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;iBAC9B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;YAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACtC,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;iBAC9B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;;AAE5C,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC;AACjD,QAAA,OAAO,OAAO;;AAGR,IAAA,YAAY,CAClB,KAAiB,EACjB,KAA6F,EAC7F,KAA+B,EAC/B,KAA+B,EAAA;QAE/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;AAG/D,IAAA,kBAAkB,CACxB,KAAiB,EACjB,WAEC,EACD,KAA+B,EAC/B,KAA+B,EAAA;QAE/B,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;;IAG3E,UAAU,CAChB,KAAiB,EACjB,KAA+B,EAAA;AAE/B,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsC;AAC1D,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AAClD,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;AACpB,SAAC,CAAC;AACF,QAAA,OAAO,IAAI;;AAGL,IAAA,UAAU,CAAC,KAA+B,EAAE,KAAmB,EAAE,OAAgB,EAAA;AACvF,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;AACrD,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvD,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACvB,IAAI,OAAO,EAAE;AACX,oBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;qBACb;AACL,oBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;AAEzB,aAAC,CAAC;AACF,YAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,SAAC,CAAC;;AAGI,IAAA,SAAS,CAAC,MAAgC,EAAA;QAChD,OAAO,MAAM,KAAK,IAAI;;AAGhB,IAAA,qBAAqB,CAAC,IAAqB,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;;AAGhC,IAAA,yBAAyB,CAAC,IAAqB,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;;AAGhC,IAAA,kBAAkB,CACxB,KAAiB,EACjB,UAAsB,EACtB,KAA+B,EAC/B,eAAwB,EAAA;AAExB,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU;QAC9C,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,KAAK;;AAGd,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC;AACvB,aAAA,GAAG,CAAC,CAAC,cAAc,KAClB,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAmC,CAAC;aAEjE,MAAM,CAAC,CAAC,KAAK,KAAmB,KAAK,KAAK,SAAS,CAAC;QACvD,IAAI,OAAO,GAAG,KAAK;AAEnB,QAAA,IAAI,UAAU,CAAC,aAAa,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC;AACxD,YAAA,UAAU,CAAC,aAAa,CAAC,UAAU,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAChE,OAAO,GAAG,IAAI;;AAGhB,QAAA,IAAI,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YAChE,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;gBAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;gBAC3F,IAAI,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACzC,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;AACtB,wBAAA;AACE,4BAAA,GAAG,IAAI;AACP,4BAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;AAChC,4BAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;AAClE,yBAAA;AACF,qBAAA,CAAC;;;YAGN,OAAO,GAAG,IAAI;;AAGhB,QAAA,OAAO,OAAO;;IAGR,aAAa,CACnB,UAAsB,EACtB,MAAyF,EAAA;QAEzF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AAC/B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU;AAClC,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AACvC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC;AACnC,YAAA,MAAM,UAAU,GAAG,WAAW,GAAG,KAAK;YACtC,MAAM,QAAQ,GACZ,MAAM,CAAC,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,UAAU;YAClF,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;YAC1C;;AAGF,QAAA,MAAM,MAAM,GAAG,WAAW,EAAE;QAC5B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACtC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE;YACtC,IAAI,QAAQ,EAAE;gBACZ,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;;AAExC,SAAC,CAAC;AACF,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YACnB;;QAEF,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;AACtD,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,OAAO;YACP,QAAQ;YACR,OAAO,EAAE,MAAM,CAAC,OAAO;AACxB,SAAA,CAAC;;IAGI,4BAA4B,GAAA;AAClC,QAAA,OAAO,IAAI;;AAEd;;MC9oDY,UAAU,CAAA;AACJ,IAAA,WAAW,GAAG,IAAI,GAAG,EAA2B;AAEjE,IAAA,GAAG,CAAC,GAAkB,EAAA;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;;IAGlC,GAAG,CAAC,GAAkB,EAAE,KAAsB,EAAA;QAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;;AAEnC;;ACWD,MAAM,cAAc,GAAG,CAAqB,KAAoB,EAAE,IAAO,KAAO;AAC9E,IAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,QAAA,OAAQ,KAA6B,CAAC,GAAG,IAAI,CAAC;;AAEhD,IAAA,OAAO,KAAK;AACd,CAAC;AAED,MAAM,UAAU,GAAG,CAAmB,IAAO,EAAE,KAAe,KAAO;AACnE,IAAA,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;AACpE,IAAA,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE;AACnC,CAAC;AAED,MAAM,WAAW,GAAG,CAClB,MAA2B,EAC3B,QAA8B,KACP;IACvB,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,QAAA,OAAO,MAAM;;AAEf,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;AACrC,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9D,IAAA,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;AAC9B,CAAC;AAEM,MAAM,mBAAmB,GAAG,CACjC,OAAyC,KACxB;IACjB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,OAAO;AACrD,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU;AAC5B,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE;AAE9B,IAAA,OAAO,CAAC,OAAO,EAAE,UAAU,KAAI;AAC7B,QAAA,IAAI,EAAE,OAAO,YAAY,OAAO,CAAC,EAAE;AACjC,YAAA,OAAO,EAAE;;AAEX,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;;AAEX,QAAA,MAAM,IAAI,GAAc;YACtB,UAAU;AACV,YAAA,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE;SAC/B;AACD,QAAA,IAAI,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAEpD,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;AACjF,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBAC9B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC1C,IAAI,CAAC,YAAY,EAAE;oBACjB;;AAEF,gBAAA,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzD,gBAAA,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;AAChC,aAAC,CAAC;;AAGJ,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;YACtC,IAAI,GAAG,EAAE;gBACP,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC7B,IAAI,MAAM,EAAE;AACV,oBAAA,OAAO,MAAM;;gBAEf,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACzC,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACxB,gBAAA,OAAO,QAAQ;;;QAInB,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC,KAAC;AACH,CAAC;AAUM,MAAM,0BAA0B,GAAG,CACxC,OAAgD,KAC/B;IACjB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,OAAO;AACrD,IAAA,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC;AAC9C,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE;AAE9B,IAAA,OAAO,CAAC,OAAO,EAAE,UAAU,KAAI;AAC7B,QAAA,IAAI,EAAE,OAAO,YAAY,OAAO,CAAC,EAAE;AACjC,YAAA,OAAO,EAAE;;AAEX,QAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC;QACnD,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC;;AAGvC,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM;AACnC,QAAA,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,OAAO,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;;QAGlD,MAAM,MAAM,GAAG;aACZ,GAAG,CAAC,CAAC,cAAc,KAAK,gBAAgB,CAAC,cAAc,CAAC;aACxD,MAAM,CAAC,CAAC,KAAK,KAAiB,KAAK,KAAK,SAAS,CAAC;AACrD,QAAA,MAAM,IAAI,GAAc;YACtB,UAAU;AACV,YAAA,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE;SAC/B;AAED,QAAA,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE;AACpC,YAAA,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACpE,IAAI,GAAG,EAAE;gBACP,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC7B,IAAI,MAAM,EAAE;AACV,oBAAA,OAAO,MAAM;;AAEf,gBAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvE,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACxB,gBAAA,OAAO,QAAQ;;;AAInB,QAAA,OAAO,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC/D,KAAC;AACH,CAAC;;MCrJY,eAAe,CAAA;AACT,IAAA,SAAS,GAAG,IAAI,GAAG,EAAsB;AACzC,IAAA,WAAW,GAAG,IAAI,GAAG,EAA+B;AACpD,IAAA,WAAW,GAAG,IAAI,OAAO,EAA+B;AAEzE,IAAA,GAAG,CAAC,EAAmB,EAAE,KAAQ,EAAE,OAAmB,EAAA;QACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;;IAGnC,WAAW,CAAC,EAAmB,EAAE,KAAQ,EAAA;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC3B;;QAEF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC;;AAG/B,IAAA,QAAQ,CAAC,EAAmB,EAAA;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;;AAG/B,IAAA,UAAU,CAAC,EAAmB,EAAA;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;AAGjC,IAAA,cAAc,CAAC,OAAmB,EAAA;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;;AAGtC,IAAA,iBAAiB,CAAC,OAAmB,EAAA;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AACxC,QAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AACpB,YAAA,OAAO,SAAS;;QAElB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;;AAG/B,IAAA,GAAG,CAAC,EAAmB,EAAA;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;;AAG/B,IAAA,MAAM,CAAC,EAAmB,EAAA;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,SAAS;;AAElB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;AAChC,QAAA,OAAO,OAAO;;AAGhB,IAAA,SAAS,CAAC,EAAiC,EAAA;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;;AAEjD;;MC5BqB,eAAe,CAAA;AAGhB,IAAA,UAAU;AACV,IAAA,KAAK;AACL,IAAA,MAAM;AACN,IAAA,QAAQ,GAAG,IAAI,eAAe,EAAQ;AACtC,IAAA,kBAAkB;AAClB,IAAA,GAAG;AACH,IAAA,OAAO;AACT,IAAA,cAAc,GAAG,IAAI,GAAG,EAAuC;AAC/D,IAAA,kBAAkB,GAAG,IAAI,GAAG,EAA6C;IAClF,MAAM,GAAQ,EAAE;AAExB,IAAA,WAAA,CAAY,OAA2C,EAAA;QACrD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO;AAC5C,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB;QACpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE;;AAGtC,IAAA,SAAS,CAAC,MAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC;AACrB,YAAA,UAAU,EAAE,MAAM;AAClB,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC;;IAGJ,UAAU,GAAA;QACR,IAAI,CAAC,kBAAkB,EAAE;;AAGjB,IAAA,oBAAoB,CAAC,KAAQ,EAAA;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE;YACZ;;AAEF,QAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;AAGhE,IAAA,iBAAiB,CAAC,OAAmB,EAAA;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC;;AAGjD,IAAA,MAAM,CACJ,EAAM,EACN,MAAsB,EACtB,IAAoB,EAAA;QAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE;YACT;;AAEF,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB;;AAEF,QAAA,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,QAAQ;QACvC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC;;;AAIjD,IAAA,UAAU,CACR,GAAc,EACd,MAAsB,EACtB,IAAoB,EAAA;QAEpB,MAAM,OAAO,GAAqB,EAAE;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,QAAQ;AAEvC,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,EAAE;gBACT;;AAEF,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB;;YAEF,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC;AACnC,YAAA,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC;AACnC,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC;AACpC,SAAC,CAAC;AAEF,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB;;QAGF,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;;;AAIlC,IAAA,eAAe,CAAC,EAAuC,EAAA;AACrD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;;AAG7C,IAAA,yBAAyB,CAAC,EAA6C,EAAA;AACrE,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;;AAGjD,IAAA,QAAQ,CAAC,KAAQ,EAAA;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;;AAGzB,IAAA,SAAS,CAAC,MAAoB,EAAA;AAC5B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB;;QAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACpF,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAM;AAC9B,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;;AAE3B,YAAA,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;;QAElB,IAAI,CAAC,iBAAiB,CAAC;YACrB,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;AACvC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,MAAM;AACd,SAAA,CAAC;;AAGJ,IAAA,gBAAgB,CAAC,GAAkB,EAAA;AACjC,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,OAAO,CAAC;;AAEV,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,CAAK,GAAG,CAAC;QAC9B,MAAM,OAAO,GAAQ,EAAE;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACjB,gBAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACnB,gBAAA,OAAO,KAAK;;AAEd,YAAA,OAAO,IAAI;AACb,SAAC,CAAC;AACF,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,CAAC;;QAEV,IAAI,CAAC,iBAAiB,CAAC;YACrB,UAAU;AACV,YAAA,MAAM,EAAE,QAAQ;YAChB,OAAO;AACR,SAAA,CAAC;QACF,OAAO,OAAO,CAAC,MAAM;;IAGvB,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B;;QAEF,IAAI,CAAC,iBAAiB,CAAC;AACrB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1B,SAAA,CAAC;;;AAIJ,IAAA,iBAAiB,CAAC,IAAqB,EAAA;AACrC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,EAAE;AACjD,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,SAAS,IAAI;QACrC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YAC9B;;AAEF,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;;;IAI1D,aAAa,CAAC,EAAmB,EAAE,IAAqB,EAAA;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;AAC5C,QAAA,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,EAAE;QACnC,IAAI,CAAC,IAAI,EAAE;YACT;;QAEF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;;AAGpE;;;AAGG;IACH,cAAc,CAAC,GAAmC,EAAE,IAAqB,EAAA;AACvE,QAAA,MAAM,MAAM,GAAG,WAAW,EAAE;QAE5B,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;AAC5C,YAAA,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,EAAE;AACnC,YAAA,IAAI,CAAC,IAAI;gBAAE;YACX,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,KAAK,GAAG,IAAI;;QAGd,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B;;AAGF,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;;AAG1D,IAAA,UAAU,CAAC,OAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;;IAGhC,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;;AAGhC,IAAA,UAAU,CAAC,OAAe,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;;IAGhC,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;;IAGhC,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;;AAG/B,IAAA,SAAS,CAAC,CAAS,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;;AAGzB,IAAA,YAAY,CAAC,EAAM,EAAA;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAGnC,IAAA,QAAQ,CAAC,EAAM,EAAA;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI;;IAG7C,YAAY,GAAA;AACV,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;;IAGzB,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;;IAG9D,gBAAgB,CACd,GAA2B,EAC3B,MAA0B,EAAA;AAE1B,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAClD,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;AAE5E,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,IAAI,OAAO,EAAE;AACX,gBAAA,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;;AAEzC,SAAC,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE;;AAG3B,IAAA,kBAAkB,CAAC,GAA2B,EAAA;AAC5C,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC;;AAGtB,IAAA,iBAAiB,CAAC,MAAoB,EAAA;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB;AAC1C,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;AACpC,YAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACpD,IAAI,eAAe,EAAE;gBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5C,gBAAA,IAAI,SAAS,KAAK,KAAK,EAAE;oBACvB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC;AACpC,oBAAA,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;gBAExE;;AAGF,YAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI;gBAC7B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;AACpD,aAAA,CAAC;AACF,YAAA,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAC,CAAC;AACtE,SAAC,CAAC;QAEF,MAAM,QAAQ,GAA2B,EAAE;QAC3C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI;YAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACpB,gBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;;AAErB,SAAC,CAAC;AACF,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;;AAEtC,SAAC,CAAC;;IAGM,0BAA0B,GAAA;QAClC,OAAO,IAAI,CAAC,MAAM;;AAGZ,IAAA,gBAAgB,CAAC,OAAyB,EAAA;AAChD,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB;;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;;AAGpD,IAAA,oBAAoB,CAAC,KAA+B,EAAA;AAC1D,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;;AAGtD,IAAA,eAAe,CAAC,MAAoB,EAAA;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAM;AACzB,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACf,gBAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;;AAE3B,YAAA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;;;AAIP,IAAA,gBAAgB,CAAC,EAAM,EAAA;QAC7B,MAAM,IAAI,qBAAqB,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC;;AAG3C,IAAA,iBAAiB,CAAC,IAKzB,EAAA;QACC,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACrC,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,QAAA,MAAM,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC;QACtC,IAAI,CAAC,oBAAoB,CAAC;AACxB,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS;AAC/C,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS;AACtD,SAAA,CAAC;;IAGI,oBAAoB,CAAC,EAAM,EAAE,KAAQ,EAAA;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC9E,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB;;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;;AAE7B;;ACrYK,MAAO,oBACX,SAAQ,eAA2B,CAAA;AAElB,IAAA,aAAa;AACtB,IAAA,iBAAiB;AAEzB,IAAA,WAAA,CAAY,OAA0C,EAAA;QACpD,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa;AAC1C,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,gBAAgB,IAAI,KAAK;AAEjF,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,0BAA0B,CAAC;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,UAAW;YAC1C,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,gBAAgB,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAqB,CAAC;AACrF,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;AAClB,SAAA,CAAC,CACH;QAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAClB,IAAI,CAAC,iBAAiB,GAAI,IAAI,CAAC,aAA4C,GAAG,IAAI,CAAC,MAAM,CAC1F;;AAGM,IAAA,SAAS,CAAC,MAAoB,EAAA;AACrC,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,kBAAkB,EAAE;;AAG3B,IAAA,oBAAoB,CAAC,OAAgB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,OAAO,EAAE;YACtC;;AAEF,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;QAChC,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAClB,OAAO,GAAI,IAAI,CAAC,aAA4C,GAAG,IAAI,CAAC,MAAM,CAC3E;QACD,IAAI,OAAO,EAAE;YACX,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;AAC5C,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AAChF,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;;QAE9B,IAAI,CAAC,kBAAkB,EAAE;;IAG3B,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,iBAAiB;;IAGvB,sBAAsB,GAAA;QAC5B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,IAAI,OAAO,EAAE;gBACX,kBAAkB,CAAC,OAAO,CAAC;;AAE/B,SAAC,CAAC;;IAGe,0BAA0B,GAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAuC;;AAErE;;ACxEK,MAAO,gBAA6D,SAAQ,eAIjF,CAAA;AACC,IAAA,WAAA,CAAY,OAAsC,EAAA;QAChD,KAAK,CAAC,OAAO,CAAC;AAEd,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CACjB,mBAAmB,CAAC;YAClB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,gBAAgB,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAqB,CAAC;AACrF,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;AAClB,SAAA,CAAC,CACH;;AAEJ;;MCdY,SAAS,CAAA;AAKS,IAAA,OAAA;IAJrB,KAAK,GAAqB,EAAE;IAC5B,SAAS,GAAuB,IAAI;IACpC,MAAM,GAAuB,IAAI;AAEzC,IAAA,WAAA,CAA6B,UAA4B,EAAE,EAAA;QAA9B,IAAO,CAAA,OAAA,GAAP,OAAO;AAClC,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;;;AAI7B,IAAA,IAAI,CAAC,KAAuB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;AAEF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE;;AAGf,IAAA,GAAG,CAAC,KAAuB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE;;IAGf,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;AAEF,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,MAAM,EAAE;;AAGf,IAAA,MAAM,CAAC,GAAoB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;QACxE,IAAI,CAAC,MAAM,EAAE;;IAGf,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,OAAO,EAAE;;AAEX,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;;AAGxB,IAAA,KAAK,CAAC,MAAyC,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB;;AAEF,QAAA,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,EAAE,GAAG,MAAM;QAChE,IAAI,CAAC,OAAO,EAAE;YACZ;;AAEF,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;YAC3B,IAAI,CAAC,OAAO,EAAE;;AAEhB,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO;QACrB,IAAI,CAAC,MAAM,EAAE;;IAGf,OAAO,GAAA;QACL,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;IAGT,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,OAAO,KAAK;;IAGN,SAAS,GAAA;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;AACpC,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,EAAE,GAAG,OAAO;;IAGpD,OAAO,GAAA;QACb,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;YAClD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE1D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;AAGZ,IAAA,YAAY,CAAC,KAAuB,EAAA;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;;AAGxB,IAAA,KAAK,CAAC,KAAuB,EAAA;QACnC,MAAM,MAAM,GAAqB,EAAE;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B;AAClD,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjB;;YAEF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,gBAAA,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI;gBAC5B;;YAEF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;AAC/B,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnB,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;;AAGP,IAAA,SAAS,CAAC,KAAuB,EAAA;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;QACxD,MAAM,SAAS,GAAoB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACtB,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AACzC,YAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AAChB,gBAAA,OAAO,MAAM;;AAEf,YAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC1B,SAAC,CAAC;AACF,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC;;AAGrC,IAAA,UAAU,CAAC,KAAuB,EAAA;QACxC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,KAAK;;AAEd,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAGtC,IAAA,WAAW,CAAC,IAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC/B,OAAO,IAAI,CAAC,QAAQ;;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAiC;AACpD,QAAA,IAAI,KAAK,KAAK,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE;YAC3E,OAAO,KAAK,CAAC,EAAE;;AAEjB,QAAA,OAAO,SAAS;;IAGV,WAAW,CAAC,CAAiB,EAAE,CAAiB,EAAA;AACtD,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC;AACjC,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC;QACjC,OAAO,SAAS,GAAG,SAAS;;IAGtB,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,eAAe;YAC1C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEzC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,SAAS,GAAG,eAAe;AAChC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEpC,YAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACpC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;;iBAC1B;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;;YAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;gBACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC9C,gBAAA,KAAK,CAAC,IAAI,GAAG,QAAQ;gBACrB,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AACzC,gBAAA,KAAK,CAAC,WAAW,GAAG,GAAG;AACvB,gBAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;AAEzB,YAAA,IAAI,CAAC,SAAU,CAAC,WAAW,CAAC,IAAI,CAAC;AACnC,SAAC,CAAC;;AAEL;;MCxLY,YAAY,CAAA;AAMc,IAAA,GAAA;IALpB,MAAM,GAAgC,EAAE;IACxC,IAAI,GAA6C,EAAE;AACnD,IAAA,YAAY;AACZ,IAAA,GAAG;IAEpB,WAAqC,CAAA,GAAU,EAAE,MAAyB,EAAA;QAArC,IAAG,CAAA,GAAA,GAAH,GAAG;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS;AACjG,QAAA,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,WAAW,CAAC;AACtF,QAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;AACvE,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;QAEd,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACnC,YAAA,MAAM,MAAM,GAAG,IAAI,YAAY,EAAO;AACtC,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC;kBAC7B,IAAI,aAAa,CAAC;oBAChB,MAAM;AACN,oBAAA,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ;iBACzC;kBACD,IAAI;YACR,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;AACzC,YAAA,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE;AACnC,gBAAA,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;;AAEpC,YAAA,IAAI,UAAU,CAAC,gBAAgB,KAAK,SAAS,EAAE;AAC7C,gBAAA,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC;;AAE/C,YAAA,IAAI,UAAU,CAAC,KAAK,EAAE;gBACpB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;;YAEtC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;AAE9B,YAAA,MAAM,kBAAkB,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;AACjF,YAAA,MAAM,GAAG,GAAG,UAAU,CAAC;kBACnB,IAAI,oBAAoB,CAAC;oBACvB,UAAU;oBACV,KAAK;oBACL,MAAM;AACN,oBAAA,aAAa,EAAE,aAAc;oBAC7B,GAAG;oBACH,kBAAkB;iBACnB;kBACD,IAAI,gBAAgB,CAAC;oBACnB,UAAU;oBACV,KAAK;oBACL,MAAM;oBACN,GAAG;oBACH,kBAAkB;AACnB,iBAAA,CAAC;YAEN,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,KAAK;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAC;YACzC,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,SAAA,CAAC;;AAGJ,IAAA,OAAO,MAAM,CACX,GAAU,EACV,MAAyB,EAAA;AAEzB,QAAA,OAAO,IAAI,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;;AAGtC,IAAA,QAAQ,CAAC,EAAU,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;;AAGxB,IAAA,MAAM,CAAC,EAAU,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGtB,OAAO,GAAA;AACL,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;;IAGzB,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,GAAG;;IAGjB,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;;AAErC;;AC5GD;;AAEG;;ACFH;;AAEG;;;;"}
|