@theseam/ui-common 0.4.18 → 0.4.19

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.
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-google-maps.mjs","sources":["../../../projects/ui-common/google-maps/map-controls-service.ts","../../../projects/ui-common/google-maps/google-maps-feature-helpers.ts","../../../projects/ui-common/google-maps/google-maps-contextmenu.ts","../../../projects/ui-common/google-maps/map-value-manager.service.ts","../../../projects/ui-common/google-maps/google-maps.service.ts","../../../projects/ui-common/google-maps/google-maps-controls.service.ts","../../../projects/ui-common/google-maps/google-maps-recenter-button-control/google-maps-recenter-button-control.component.ts","../../../projects/ui-common/google-maps/google-maps-recenter-button-control/google-maps-recenter-button-control.component.html","../../../projects/ui-common/google-maps/google-maps-upload-button-control/google-maps-upload-button-control.component.ts","../../../projects/ui-common/google-maps/google-maps-upload-button-control/google-maps-upload-button-control.component.html","../../../projects/ui-common/google-maps/google-maps-api-loader/google-maps-api-loader.ts","../../../projects/ui-common/google-maps/map-file-drop/map-file-drop.component.ts","../../../projects/ui-common/google-maps/map-file-drop/map-file-drop.component.html","../../../projects/ui-common/google-maps/map-control.component.ts","../../../projects/ui-common/google-maps/google-maps/google-maps.component.ts","../../../projects/ui-common/google-maps/google-maps/google-maps.component.html","../../../projects/ui-common/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.directive.ts","../../../projects/ui-common/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.ts","../../../projects/ui-common/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.html","../../../projects/ui-common/google-maps/google-maps.module.ts","../../../projects/ui-common/google-maps/google-maps-api-loader/lazy-google-maps-api-loader.ts","../../../projects/ui-common/google-maps/google-maps-api-loader/noop-google-maps-api-loader.ts","../../../projects/ui-common/google-maps/theseam-ui-common-google-maps.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nimport { ComponentType } from '@theseam/ui-common/models'\n\nexport interface MapControl<TData = any> {\n component: ComponentType<any>\n data?: TData\n position?: google.maps.ControlPosition\n}\n\nexport interface MapControlsService {\n add(control: MapControl): void\n}\n\nexport const MAP_CONTROLS_SERVICE = new InjectionToken<MapControlsService>('MAP_CONTROLS_SERVICE')\n\nexport const MAP_CONTROL_DATA = new InjectionToken<any>('MAP_CONTROL_DATA')\n","import { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { NgZone } from '@angular/core'\nimport { Observable } from 'rxjs'\n\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\nimport booleanContains from '@turf/boolean-contains'\nimport {\n multiPolygon as turfjsMultiPolygon,\n polygon as turfjsPolygon,\n} from '@turf/helpers'\n\nexport enum AppFeaturePropertyName {\n IsSelected = `__app__isSelected`,\n}\n\nexport function isAppFeatureProperty(propertyName: string): propertyName is AppFeaturePropertyName {\n return Object.values(AppFeaturePropertyName)\n .findIndex(value => value === propertyName) !== -1\n}\n\nexport function isFeatureSelected(feature: google.maps.Data.Feature): boolean {\n const isSelected = feature.getProperty(AppFeaturePropertyName.IsSelected)\n return coerceBooleanProperty(isSelected)\n}\n\nexport function setFeatureSelected(feature: google.maps.Data.Feature, isSelected: boolean): void {\n feature.setProperty(AppFeaturePropertyName.IsSelected, isSelected)\n}\n\nconst EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_PROPERTY_NAME = 'styleOptions'\nconst EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_HOVERED_PROPERTY_NAME = 'styleOptionsHovered'\nconst EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_SELECTED_PROPERTY_NAME = 'styleOptionsSelected'\n\nexport function getStyleOptionsDefinedByFeature(feature: google.maps.Data.Feature): google.maps.Data.StyleOptions | undefined {\n return feature.getProperty(EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_PROPERTY_NAME) as google.maps.Data.StyleOptions || undefined\n}\n\nexport function getHoveredStyleOptionsDefinedByFeature(feature: google.maps.Data.Feature): google.maps.Data.StyleOptions | undefined {\n return feature.getProperty(EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_HOVERED_PROPERTY_NAME) as google.maps.Data.StyleOptions || undefined\n}\n\nexport function getSelectedStyleOptionsDefinedByFeature(feature: google.maps.Data.Feature): google.maps.Data.StyleOptions | undefined {\n return feature.getProperty(EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_SELECTED_PROPERTY_NAME) as google.maps.Data.StyleOptions || undefined\n}\n\n// TODO: Check performance of cloning a google.maps.Data instance, so the\n// properties can be removed with the google maps api, instead of on the\n// resulting json.\nexport function stripAppFeaturePropertiesFromJson(json: any) {\n if (notNullOrUndefined(json) && Array.isArray(json?.features)) {\n for (const feature of json.features) {\n if (notNullOrUndefined(feature?.properties)) {\n for (const k of Object.keys(feature.properties)) {\n if (isAppFeatureProperty(k)) {\n feature.properties[k] = undefined\n delete feature.properties[k]\n }\n }\n }\n }\n }\n}\n\n/**\n * Searches for a Feature in Data that contains the provided Feature and can use\n * it as a cutout area.\n */\nexport function getPossibleExteriorFeature(\n data: google.maps.Data,\n feature: google.maps.Data.Feature\n): google.maps.Data.Feature | undefined {\n let exteriorPolygonFeature: google.maps.Data.Feature | undefined\n data.forEach(f => {\n if (f === feature) {\n return\n }\n\n const geometry = f.getGeometry()\n if (geometry === null) {\n throw Error(`Geometry not found.`)\n }\n if (geometry.getType() === 'Polygon' && featureContains(f, feature)) {\n exteriorPolygonFeature = f\n }\n })\n return exteriorPolygonFeature\n}\n\nexport function addInnerFeatureCutoutToExteriorFeature(\n exteriorFeature: google.maps.Data.Feature,\n innerFeature: google.maps.Data.Feature\n): void {\n const exteriorGeometry = exteriorFeature.getGeometry()\n if (exteriorGeometry === null) {\n throw Error(`Geometry not found.`)\n }\n const innerGeometry = innerFeature.getGeometry()\n if (innerGeometry === null) {\n throw Error(`Geometry not found.`)\n }\n // NOTE: Other geometries may support cutouts, but our map shapes editor only\n // supports polygons currently, so we will need to handle other geometry types\n // here if we start allowing users to draw shapes other than polygon.\n if (exteriorGeometry.getType() !== 'Polygon' || innerGeometry.getType() !== 'Polygon') {\n throw Error(`Inner cutout is only supported by Polygon gemoetry.`)\n }\n\n const featurePolygon = innerGeometry as google.maps.Data.Polygon\n const exteriorPolygon = exteriorGeometry as google.maps.Data.Polygon\n exteriorFeature.setGeometry(new google.maps.Data.Polygon([\n ...exteriorPolygon.getArray(),\n featurePolygon.getAt(0).getArray().reverse()\n ]))\n}\n\n/**\n * Google maps paths don't always start and stop at the exact same position, so\n * this will fix that for turfjs.\n */\nexport function fixPathDifferentStartingAndEndingPoint(coordinates: number[][]): void {\n if (coordinates.length <= 1) {\n return\n }\n\n const start = coordinates[0]\n const end = coordinates[coordinates.length - 1]\n if (start[0] === end[0] && start[1] === end[1]) {\n return\n }\n\n coordinates.push(coordinates[0])\n}\n\nexport function polygonHasValidPathsLengths(polygon: google.maps.Polygon, minPointsInValidPath: number = 3): boolean {\n const paths = polygon.getPaths().getArray()\n for (const path of paths) {\n if (path.getLength() < minPointsInValidPath) {\n return false\n }\n }\n return true\n}\n\nexport function polygonCoordinates(polygon: google.maps.Data.Polygon): number[][][] {\n return polygon.getArray().map(linRing => {\n const coords = linRing.getArray().map(x => [ x.lng(), x.lat() ])\n fixPathDifferentStartingAndEndingPoint(coords)\n return coords\n })\n}\n\nexport function multiPolygonCoordinates(multiPolygon: google.maps.Data.MultiPolygon): number[][][][] {\n return multiPolygon.getArray().map(x => polygonCoordinates(x))\n}\n\nexport function toTurfJsPolygon(polygon: google.maps.Data.Polygon) {\n return turfjsPolygon(polygonCoordinates(polygon))\n}\n\nexport function toTurfJsMultiPolygon(multiPolygon: google.maps.Data.MultiPolygon) {\n return turfjsMultiPolygon(multiPolygonCoordinates(multiPolygon))\n}\n\nexport function toTurfJsFeature(googleFeature: google.maps.Data.Feature) {\n const geometry = googleFeature.getGeometry()\n if (geometry === null) {\n throw Error(`Geometry not found.`)\n }\n if (geometry.getType() === 'Polygon') {\n return toTurfJsPolygon(geometry as google.maps.Data.Polygon)\n } else if (geometry.getType() === 'MultiPolygon') {\n return toTurfJsMultiPolygon(geometry as google.maps.Data.MultiPolygon)\n }\n\n throw Error(`Unexpected geometry.`)\n}\n\nexport function featureContains(featureA: google.maps.Data.Feature, featureB: google.maps.Data.Feature): boolean {\n const polygonA = toTurfJsFeature(featureA)\n const polygonB = toTurfJsFeature(featureB)\n return booleanContains(polygonA, polygonB)\n}\n\nexport function createDataFeatureFromPolygon(polygon: google.maps.Polygon): google.maps.Data.Feature {\n const arr = polygon.getPaths().getArray().map(x => x.getArray())\n return new google.maps.Data.Feature({\n geometry: new google.maps.Data.Polygon(arr)\n })\n}\n\nexport function getBoundsWithAllFeatures(data: google.maps.Data): google.maps.LatLngBounds {\n const bounds = new google.maps.LatLngBounds()\n\n data.forEach(feature => {\n const geometry = feature.getGeometry()\n if (geometry === null) {\n throw Error(`Geometry not found.`)\n }\n geometry.forEachLatLng(latLng => {\n bounds.extend(latLng)\n })\n })\n\n return bounds\n}\n\nexport function getFeatureBounds(feature: google.maps.Data.Feature): google.maps.LatLngBounds {\n const bounds = new google.maps.LatLngBounds()\n\n const geometry = feature.getGeometry()\n if (geometry === null) {\n throw Error(`Geometry not found.`)\n }\n geometry.forEachLatLng(latLng => {\n bounds.extend(latLng)\n })\n\n return bounds\n}\n\nexport function getFeatureCenter(feature: google.maps.Data.Feature): google.maps.LatLng {\n return getFeatureBounds(feature).getCenter()\n}\n\nexport function removeAllFeatures(data: google.maps.Data): void {\n data.forEach(f => data.remove(f))\n}\n\nexport function getFeaturesCount(data: google.maps.Data): number {\n let count = 0\n data.forEach(() => count++)\n return count\n}\n\n/**\n * NOTE: Original events are not emitted, because filtering may omit events.\n */\nexport function createFeatureChangeObservable(data: google.maps.Data, ngZone: NgZone): Observable<void> {\n return new Observable<void>(subscriber => {\n const listeners: google.maps.MapsEventListener[] = []\n\n ngZone.runOutsideAngular(() => {\n listeners.push(data.addListener('setgeometry', (event: google.maps.Data.SetGeometryEvent) => {\n ngZone.run(() => { subscriber.next(undefined) })\n }))\n\n listeners.push(data.addListener('addfeature', (event: google.maps.Data.AddFeatureEvent) => {\n ngZone.run(() => { subscriber.next(undefined) })\n }))\n\n listeners.push(data.addListener('removefeature', (event: google.maps.Data.RemoveFeatureEvent) => {\n ngZone.run(() => { subscriber.next(undefined) })\n }))\n\n listeners.push(data.addListener('setproperty', (event: google.maps.Data.SetPropertyEvent) => {\n if (!isAppFeatureProperty(event.name)) {\n ngZone.run(() => { subscriber.next(undefined) })\n }\n }))\n\n listeners.push(data.addListener('removeproperty', (event: google.maps.Data.RemovePropertyEvent) => {\n if (!isAppFeatureProperty(event.name)) {\n ngZone.run(() => { subscriber.next(undefined) })\n }\n }))\n })\n\n return () => {\n listeners.forEach(google.maps.event.removeListener)\n }\n })\n}\n","import { ESCAPE } from '@angular/cdk/keycodes'\nimport { NgZone, ViewContainerRef } from '@angular/core'\nimport { fromEvent, Subject } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\nimport { MenuComponent } from '@theseam/ui-common/menu'\n\nimport { isFeatureSelected } from './google-maps-feature-helpers'\n\n// TODO: Close on map losing focus.\n\nexport class GoogleMapsContextMenu {\n\n private readonly _overlayView: google.maps.OverlayView\n private readonly _cleanupFn: () => void\n\n constructor(\n private readonly _map: google.maps.Map,\n private readonly _menu: MenuComponent,\n _position: google.maps.LatLng,\n private readonly _vcr: ViewContainerRef,\n private readonly _ngZone: NgZone,\n private readonly _data: google.maps.Data,\n private readonly _feature: google.maps.Data.Feature,\n ) {\n const tplRef = this._menu.templateRef\n if (tplRef === undefined || tplRef === null) {\n throw Error(`Menu template is not defined.`)\n }\n\n const ref = this._vcr.createEmbeddedView(tplRef)\n ref.detectChanges()\n\n const listeners: google.maps.MapsEventListener[] = []\n const ngUnsubscribe = new Subject<void>()\n\n // TODO: Fix the initial focus. setTimeout avoids the wrong contextmenu\n // getting triggered, but the first item flashes and looks off this way.\n setTimeout(() => {\n this._menu.focusFirstItem('program')\n })\n this._menu.closed.pipe(\n takeUntil(ngUnsubscribe)\n ).subscribe(v => {\n this.close()\n })\n\n fromEvent(document, 'keydown').pipe(\n takeUntil(ngUnsubscribe)\n ).subscribe((event: any) => {\n if (event.keyCode === ESCAPE) {\n this.close()\n }\n })\n\n const __cleanup = () => this._cleanupFn()\n class GoogleMapsContextMenuOverlayView extends google.maps.OverlayView {\n public containerDiv: HTMLDivElement\n\n constructor(\n public position: google.maps.LatLng,\n content: HTMLElement\n ) {\n super()\n this.position = position\n\n this.containerDiv = document.createElement('div')\n this.containerDiv.style.cursor = 'auto'\n this.containerDiv.style.height = '0'\n this.containerDiv.style.position = 'absolute'\n this.containerDiv.appendChild(content)\n\n // Optionally stop clicks, etc., from bubbling up to the map.\n GoogleMapsContextMenuOverlayView.preventMapHitsAndGesturesFrom(this.containerDiv)\n }\n\n /** Called when the view is added to the map. */\n onAdd() {\n this.getPanes()?.floatPane.appendChild(this.containerDiv)\n }\n\n /** Called when the view is removed from the map. */\n onRemove() {\n if (this.containerDiv.parentElement) {\n this.containerDiv.parentElement.removeChild(this.containerDiv)\n }\n __cleanup()\n }\n\n /** Called each frame when the view needs to draw itself. */\n draw() {\n const divPosition = this.getProjection().fromLatLngToDivPixel(this.position)\n if (!divPosition) {\n return\n }\n\n // Hide the popup when it is far out of view.\n const display =\n Math.abs(divPosition.x) < 4000 && Math.abs(divPosition.y) < 4000\n ? 'block'\n : 'none'\n\n if (display === 'block') {\n this.containerDiv.style.left = `${divPosition.x}px`\n this.containerDiv.style.top = `${divPosition.y}px`\n }\n\n if (this.containerDiv.style.display !== display) {\n this.containerDiv.style.display = display\n }\n }\n }\n\n this._overlayView = new GoogleMapsContextMenuOverlayView(_position, ref.rootNodes[0])\n this._overlayView.setMap(this._map)\n\n this._ngZone.runOutsideAngular(() => {\n listeners.push(this._data.addListener('removefeature', (event: google.maps.Data.RemoveFeatureEvent) => {\n if (event.feature === this._feature) {\n this._ngZone.run(() => { this.close() })\n }\n }))\n\n listeners.push(this._data.addListener('setproperty', (event: google.maps.Data.SetPropertyEvent) => {\n if (event.feature === this._feature && !isFeatureSelected(this._feature)) {\n this._ngZone.run(() => { this.close() })\n }\n }))\n\n listeners.push(this._data.addListener('removeproperty', (event: google.maps.Data.RemovePropertyEvent) => {\n if (event.feature === this._feature && !isFeatureSelected(this._feature)) {\n this._ngZone.run(() => { this.close() })\n }\n }))\n\n listeners.push(this._map.addListener('click', (event: google.maps.MapMouseEvent | google.maps.IconMouseEvent) => {\n this._ngZone.run(() => { this.close() })\n }))\n\n listeners.push(this._data.addListener('click', (event: google.maps.Data.MouseEvent) => {\n this._ngZone.run(() => { this.close() })\n }))\n })\n\n this._cleanupFn = () => {\n ngUnsubscribe.next()\n ngUnsubscribe.complete()\n listeners.forEach(google.maps.event.removeListener)\n }\n }\n\n public close(): void {\n this._overlayView.setMap(null)\n }\n\n}\n","import { Injectable } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\n\nexport enum MapValueSource {\n Input = 'input',\n FeatureChange = 'featurechange'\n}\n\nexport type MapValue = object | undefined | null\n\nexport interface MapValueChange {\n value: MapValue\n source: MapValueSource\n}\n\n@Injectable()\nexport class MapValueManagerService {\n\n private readonly _valueChangedSubject = new Subject<MapValueChange>()\n\n private _value: MapValue\n\n public readonly valueChanged: Observable<MapValueChange>\n\n constructor() {\n this.valueChanged = this._valueChangedSubject.asObservable()\n }\n\n public setValue(value: MapValue, source: MapValueSource): boolean {\n if (value === this._value) {\n return false\n }\n\n if (value === null || value === undefined) {\n this._value = value\n const _change: MapValueChange = {\n source,\n value: this._value,\n }\n this._valueChangedSubject.next(_change)\n return true\n }\n\n if (JSON.stringify(value) === JSON.stringify(this._value)) {\n return true\n }\n\n // TODO: Validate object is valid geojson.\n this._value = value\n const change: MapValueChange = {\n source,\n value: this._value,\n }\n this._valueChangedSubject.next(change)\n return true\n }\n\n public get value(): MapValue {\n return this._value\n }\n\n}\n","import { Injectable, NgZone, OnDestroy, ViewContainerRef } from '@angular/core'\nimport { BehaviorSubject, from, Observable, Subject } from 'rxjs'\nimport { switchMap, takeUntil, tap } from 'rxjs/operators'\n\nimport { MenuComponent } from '@theseam/ui-common/menu'\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport { GoogleMapsContextMenu } from './google-maps-contextmenu'\nimport {\n addInnerFeatureCutoutToExteriorFeature,\n createDataFeatureFromPolygon,\n createFeatureChangeObservable,\n getBoundsWithAllFeatures,\n getFeatureCenter,\n getFeaturesCount,\n getHoveredStyleOptionsDefinedByFeature,\n getPossibleExteriorFeature,\n getStyleOptionsDefinedByFeature,\n isFeatureSelected,\n polygonHasValidPathsLengths,\n removeAllFeatures,\n setFeatureSelected,\n stripAppFeaturePropertiesFromJson,\n} from './google-maps-feature-helpers'\nimport { MapValueManagerService, MapValueSource } from './map-value-manager.service'\n\ndeclare const ngDevMode: boolean | undefined\n\nconst DEFAULT_POLYGON_OPTIONS = (editingEnabled: boolean): google.maps.PolygonOptions => ({\n clickable: editingEnabled,\n draggable: editingEnabled,\n editable: editingEnabled,\n})\n\nconst DEFAULT_DRAWING_MANAGER_OPTIONS = (editingEnabled: boolean): google.maps.drawing.DrawingManagerOptions => ({\n drawingControl: editingEnabled,\n drawingControlOptions: {\n drawingModes: [\n google.maps.drawing.OverlayType.POLYGON,\n ],\n },\n polygonOptions: DEFAULT_POLYGON_OPTIONS(editingEnabled),\n drawingMode: null,\n})\n\nconst FEATURE_STYLE_OPTIONS_DEFAULT = (editingEnabled: boolean): google.maps.Data.StyleOptions => ({\n clickable: true,\n // clickable: editingEnabled,\n visible: true,\n // zIndex?: number;\n\n // cursor?: string;\n draggable: false,\n editable: false,\n fillColor: 'teal',\n fillOpacity: 0.3,\n strokeColor: 'blue',\n strokeOpacity: 1,\n strokeWeight: 2,\n})\n\nconst FEATURE_STYLE_OPTIONS_SELECTED = (editingEnabled: boolean): google.maps.Data.StyleOptions => ({\n ...FEATURE_STYLE_OPTIONS_DEFAULT(editingEnabled),\n draggable: editingEnabled,\n editable: editingEnabled,\n fillColor: 'green',\n fillOpacity: 0.7,\n strokeColor: 'limegreen',\n strokeOpacity: 1,\n strokeWeight: 2,\n})\n\nconst FEATURE_STYLE_OVERRIDE_OPTIONS_HOVERED = (editingEnabled: boolean): google.maps.Data.StyleOptions => ({\n strokeColor: 'black',\n strokeOpacity: 1,\n strokeWeight: 4,\n})\n\nconst SUPPORTED_PROPERTY_STYLE_OPTIONS: (keyof google.maps.Data.StyleOptions)[] = [\n 'fillColor',\n 'fillOpacity',\n 'strokeColor',\n 'strokeOpacity',\n 'strokeWeight',\n 'label',\n 'opacity',\n 'icon',\n 'clickable',\n 'visible',\n]\n\ntype WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] }\n\n@Injectable()\nexport class GoogleMapsService implements OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private readonly _mapReadySubject = new BehaviorSubject<boolean>(false)\n private readonly _editingEnabledSubject = new BehaviorSubject<boolean>(true)\n\n private _drawingManager?: google.maps.drawing.DrawingManager\n private _featureContextMenu: MenuComponent | null = null\n private _activeContextMenu: GoogleMapsContextMenu | null = null\n private _baseLatLng?: google.maps.LatLngLiteral\n private _padding?: number | google.maps.Padding\n\n private _allowDrawingHoleInPolygon = false\n\n // TODO: Move to a better place than the map wrapper service.\n private _fileInputHandler: ((file: File) => void) | undefined | null\n\n public googleMap?: google.maps.Map\n\n public readonly mapReady$: Observable<boolean>\n\n public get mapReady(): boolean { return this._mapReadySubject.value }\n\n public readonly editingEnabled$: Observable<boolean>\n\n constructor(\n private readonly _mapValueManager: MapValueManagerService,\n private readonly _ngZone: NgZone,\n private readonly _vcr: ViewContainerRef,\n ) {\n this.editingEnabled$ = this._editingEnabledSubject.asObservable()\n this.mapReady$ = this._mapReadySubject.asObservable()\n }\n\n ngOnDestroy(): void {\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n public setMap(map: google.maps.Map): void {\n this.googleMap = map\n this._mapReadySubject.next(true)\n this._initDrawingManager()\n this._initFeatureStyling()\n this._initFeatureChangeListeners()\n }\n\n public setBaseLatLng(lat: number, lng: number): void {\n this._baseLatLng = { lat, lng }\n }\n\n public setPadding(padding: number | google.maps.Padding | undefined): void {\n this._padding = padding\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public setFeatureContextMenu(menu: MenuComponent | null): void {\n this.closeContextMenu()\n this._featureContextMenu = menu\n }\n\n public setEditingEnabled(enabled: boolean): void {\n this._editingEnabledSubject.next(enabled)\n\n if (this.mapReady) {\n this._assertInitialized()\n this.googleMap.data.revertStyle()\n if (!enabled) {\n this.stopDrawing()\n const options = DEFAULT_DRAWING_MANAGER_OPTIONS(this.isEditingEnabled())\n this._drawingManager?.setOptions(options)\n this._drawingManager?.setMap(null)\n this.googleMap.data.forEach(f => {\n if (isFeatureSelected(f)) {\n setFeatureSelected(f, false)\n }\n })\n } else {\n const options = DEFAULT_DRAWING_MANAGER_OPTIONS(this.isEditingEnabled())\n this._drawingManager?.setOptions(options)\n this._drawingManager?.setMap(this.googleMap)\n }\n }\n }\n\n public isEditingEnabled(): boolean {\n return this._editingEnabledSubject.value\n }\n\n public getDiv(): HTMLDivElement {\n this._assertInitialized()\n return this.googleMap.getDiv() as HTMLDivElement\n }\n\n public fitBounds(bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral, padding?: number | google.maps.Padding): void {\n this._assertInitialized()\n this.googleMap.fitBounds(bounds, padding)\n }\n\n /**\n * Iterates the map's features and removes any that are selected.\n */\n public deleteSelection(): void {\n this._assertInitialized()\n const mapData = this.googleMap.data\n mapData.forEach(f => {\n if (isFeatureSelected(f)) {\n mapData.remove(f)\n }\n })\n }\n\n /**\n * Stops the current drawing.\n */\n public stopDrawing(): void {\n this._ngZone.runOutsideAngular(() => {\n if (isNullOrUndefined(this._drawingManager) || this._drawingManager.getDrawingMode() === null) {\n return\n }\n\n // Listening for the completion event of the overlay currently being drawn\n // and removing it. I haven't found a way to cancel the current drawing,\n // without this hack that assumes our listeners will not run into a race\n // condition.\n const listener = google.maps.event.addListener(\n this._drawingManager,\n 'overlaycomplete',\n (event: google.maps.drawing.OverlayCompleteEvent) => {\n event.overlay?.setMap(null)\n listener.remove()\n },\n )\n\n // To fake canceling the current drawing, without disabling the drawing\n // mode, the drawing mode is being unset then immediately set back. When\n // the mode is unset the 'overlaycomplete' event will fire, which will\n // give a reference to the current overlay to remove, then it is set back\n // to the mode the user was using. To the user is should just seem like\n // the current drawing was canceled and they can start drawing again.\n const mode = this._drawingManager.getDrawingMode()\n this._drawingManager.setDrawingMode(null)\n this._drawingManager.setDrawingMode(mode)\n\n // 'overlaycomplete' should fire immediately, unless an overlay hadn't\n // started drawing. This timeout will make sure the listener gets removed.\n setTimeout(() => {\n listener.remove()\n })\n })\n }\n\n private _initDrawingManager(): void {\n if (notNullOrUndefined(this._drawingManager)) {\n throw Error(`DrawingManager is already initialized.`)\n }\n\n this._assertInitialized()\n\n const options = DEFAULT_DRAWING_MANAGER_OPTIONS(this.isEditingEnabled())\n\n const drawingManager = new google.maps.drawing.DrawingManager(options)\n drawingManager.setMap(this.googleMap)\n\n this._drawingManager = drawingManager\n\n this._drawingManager.addListener('drawingmode_changed', (event: any) => {\n if (this._drawingManager?.getDrawingMode() !== null) {\n this._assertInitialized()\n this.googleMap.data.forEach(f => {\n if (isFeatureSelected(f)) {\n setFeatureSelected(f, false)\n }\n })\n }\n })\n }\n\n public addControl(element: HTMLElement, position: google.maps.ControlPosition): void {\n this._assertInitialized()\n this.googleMap.controls[position].push(element)\n }\n\n public async setData(data: any): Promise<void> {\n this._assertInitialized()\n removeAllFeatures(this.googleMap.data)\n this.googleMap.data.addGeoJson(data)\n this.googleMap.fitBounds(getBoundsWithAllFeatures(this.googleMap.data), this._padding)\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public reCenterOnFeatures(): void {\n this._assertInitialized()\n if (getFeaturesCount(this.googleMap.data) === 0) {\n if (!this._baseLatLng) {\n return\n }\n\n this.googleMap.panTo(this._baseLatLng)\n return\n }\n this.googleMap.fitBounds(getBoundsWithAllFeatures(this.googleMap.data), this._padding)\n\n // TODO: Fix to pan to center. Currently fitBounds results in the expected\n // result, but pantToBounds animates.\n // this.googleMap.panToBounds(getBoundsWithAllFeatures(this.googleMap.data))\n }\n\n public allowDrawingHoleInPolygon(allow: boolean): void {\n this._allowDrawingHoleInPolygon = allow\n }\n\n public setFileInputHandler(handler: ((file: File) => void) | undefined | null): void {\n this._fileInputHandler = handler\n }\n\n public getFileInputHandler(): ((file: File) => void) | undefined | null {\n return this._fileInputHandler\n }\n\n private _initFeatureStyling(): void {\n this._assertInitialized()\n\n // Disable any selection when clicking the map.\n //\n // TODO: There may be a better way to do this that would be more accurate or\n // additional events that should be listened to, such as the disabling\n // selection when the map looses focus.\n this.googleMap.addListener('click', (even: google.maps.MapMouseEvent | google.maps.IconMouseEvent) => {\n this._assertInitialized()\n this.googleMap.data.forEach(f => setFeatureSelected(f, false))\n })\n\n // Determine what the style of the features are.\n this.googleMap.data.setStyle(feature => {\n let opts = FEATURE_STYLE_OPTIONS_DEFAULT(this.isEditingEnabled())\n\n const options = getStyleOptionsDefinedByFeature(feature)\n this._mergeStyleOptions(opts, options ?? {})\n\n if (isFeatureSelected(feature)) {\n const hoverOptions = getHoveredStyleOptionsDefinedByFeature(feature)\n opts = FEATURE_STYLE_OPTIONS_SELECTED(this.isEditingEnabled())\n this._mergeStyleOptions(opts, hoverOptions ?? {})\n }\n\n return opts\n })\n\n // Select a feature when clicked.\n this.googleMap.data.addListener('click', (event: google.maps.Data.MouseEvent) => {\n this._assertInitialized()\n\n setFeatureSelected(event.feature, true)\n this.googleMap.data.forEach(f => {\n if (f !== event.feature && isFeatureSelected(f)) {\n setFeatureSelected(f, false)\n }\n })\n })\n\n // Set a style on hovered features that can be selected.\n this.googleMap.data.addListener('mouseover', (event: google.maps.Data.MouseEvent) => {\n this._assertInitialized()\n this.googleMap.data.revertStyle()\n\n if (!this.isDrawing() && !isFeatureSelected(event.feature)) {\n this.setFeatureHoveredStyleOverride(event.feature)\n }\n })\n\n // Remove any hover styles when mouse moves away.\n this.googleMap.data.addListener('mouseout', (event: google.maps.Data.MouseEvent) => {\n this._assertInitialized()\n this.googleMap.data.revertStyle()\n })\n }\n\n public setFeatureHoveredStyleOverride(feature: google.maps.Data.Feature) {\n this._assertInitialized()\n const overrideOpts = FEATURE_STYLE_OVERRIDE_OPTIONS_HOVERED(this.isEditingEnabled())\n const hoverOptions = getHoveredStyleOptionsDefinedByFeature(feature)\n this._mergeStyleOptions(overrideOpts, hoverOptions ?? {})\n this.googleMap.data.overrideStyle(feature, overrideOpts)\n }\n\n private _mergeStyleOptions(options: google.maps.Data.StyleOptions, propertiesStyleOptions: google.maps.Data.StyleOptions): void {\n if (Object.keys(propertiesStyleOptions).length === 0) {\n return\n }\n\n for (const opt of SUPPORTED_PROPERTY_STYLE_OPTIONS) {\n if (Object.prototype.hasOwnProperty.call(propertiesStyleOptions, opt)) {\n options[opt] = propertiesStyleOptions[opt] as any\n }\n }\n }\n\n private _initFeatureChangeListeners(): void {\n this._assertInitialized()\n\n createFeatureChangeObservable(this.googleMap.data, this._ngZone).pipe(\n switchMap(() => from(this.getGeoJson()).pipe(\n tap(geoJson => this._mapValueManager.setValue(geoJson, MapValueSource.FeatureChange)),\n )),\n takeUntil(this._ngUnsubscribe),\n ).subscribe()\n\n this.googleMap.data.addListener('contextmenu', (event: google.maps.Data.MouseEvent) => {\n if (!isFeatureSelected(event.feature)) {\n return\n }\n\n this._openContextMenuForFeature(event.feature, event.latLng ?? undefined)\n })\n\n if (notNullOrUndefined(this._drawingManager)) {\n google.maps.event.addListener(this._drawingManager, 'polygoncomplete', (polygon: google.maps.Polygon) => {\n // The DrawingManager doesn't seem to have a way to access the overlays,\n // so if the map is not set then it shouldn'y be considered a successful\n // completion. I am canceling the active drawing by disabling drawing\n // mode and setting the map null in the 'overlaycomplete' event, which\n // fires before the 'polygoncomplete' event.\n if (isNullOrUndefined(polygon.getMap())) {\n return\n }\n\n this._assertInitialized()\n\n // TODO: See if there is a way to prevent the polygon from completing\n // without enough points. This is very low priority, because starting\n // over after adding a single point isn't a major inconvenience.\n if (!polygonHasValidPathsLengths(polygon)) {\n // Remove the drawn polygon.\n polygon.setMap(null)\n // Stop drawing.\n this._drawingManager?.setDrawingMode(null)\n return\n }\n\n // Create a map feature of the drawn polygon.\n const feature = createDataFeatureFromPolygon(polygon)\n // Remove the drawn polygon.\n polygon.setMap(null)\n\n // Stop drawing.\n this._drawingManager?.setDrawingMode(null)\n\n // Check if the feature should be used as a cutout to an existing\n // feature or added as it's own feature.\n const exteriorPolygonFeature = this._allowDrawingHoleInPolygon\n ? getPossibleExteriorFeature(this.googleMap.data, feature)\n : undefined\n if (exteriorPolygonFeature) {\n addInnerFeatureCutoutToExteriorFeature(exteriorPolygonFeature, feature)\n setFeatureSelected(exteriorPolygonFeature, true)\n } else {\n this.googleMap.data.add(feature)\n setFeatureSelected(feature, true)\n }\n })\n }\n }\n\n public isDrawing(): boolean {\n if (isNullOrUndefined(this._drawingManager)) {\n return true\n }\n\n return this._drawingManager.getDrawingMode() !== null\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public hasSelectedFeature(): boolean {\n this._assertInitialized()\n let isSelected = false\n this.googleMap.data.forEach(f => {\n if (isFeatureSelected(f)) {\n isSelected = true\n }\n })\n return isSelected\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public getSelectedFeature(): google.maps.Data.Feature | null {\n this._assertInitialized()\n let feature: google.maps.Data.Feature | null = null\n this.googleMap.data.forEach(f => {\n if (isFeatureSelected(f)) {\n feature = f\n }\n })\n return feature\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public openContextMenu(): void {\n const feature = this.getSelectedFeature()\n if (feature) {\n this._openContextMenuForFeature(feature)\n }\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public closeContextMenu(): void {\n if (this._activeContextMenu) {\n this._activeContextMenu.close()\n this._activeContextMenu = null\n }\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n private _openContextMenuForFeature(feature: google.maps.Data.Feature, position?: google.maps.LatLng) {\n this.closeContextMenu()\n\n this._assertInitialized()\n\n let _position = position\n if (!_position) {\n _position = getFeatureCenter(feature)\n }\n if (this._featureContextMenu) {\n this._activeContextMenu = new GoogleMapsContextMenu(\n this.googleMap,\n this._featureContextMenu,\n _position,\n this._vcr,\n this._ngZone,\n this.googleMap.data,\n feature,\n )\n }\n }\n\n public getGeoJson(removeAppProperties: boolean = true): Promise<object> {\n return new Promise((resolve, reject) => {\n this._assertInitialized()\n this.googleMap.data.toGeoJson(f => {\n if (removeAppProperties) {\n stripAppFeaturePropertiesFromJson(f)\n }\n resolve(f)\n })\n })\n }\n\n /** Asserts that the map has been initialized. */\n private _assertInitialized(): asserts this is WithRequired<GoogleMapsService, 'googleMap'> {\n if (!this.googleMap && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(\n 'Cannot access Google Map information before the API has been initialized. ' +\n 'Please wait for the API to load before trying to interact with it.',\n )\n }\n }\n\n}\n","import { ComponentFactoryResolver, ComponentRef, Injectable, Injector, StaticProvider } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\n\nimport { GoogleMapsService } from './google-maps.service'\nimport { MapControl, MapControlsService, MAP_CONTROL_DATA } from './map-controls-service'\n\nexport class MapControlRef {\n\n private readonly _destroyedSubject = new Subject<void>()\n\n private _componentRef: ComponentRef<any>\n private _addedAtPosition: google.maps.ControlPosition\n\n public destroyed: Observable<void>\n\n constructor(\n private readonly _googleMaps: GoogleMapsService,\n private readonly _componentFactoryResolver: ComponentFactoryResolver,\n private readonly _injector: Injector,\n private readonly _controlDef: MapControl\n ) {\n this.destroyed = this._destroyedSubject.asObservable()\n\n const component: any = this._controlDef.component\n const factory = this._componentFactoryResolver.resolveComponentFactory(component)\n\n const providers: StaticProvider[] = []\n if (this._controlDef.data) {\n providers.push({\n provide: MAP_CONTROL_DATA,\n useValue: this._controlDef.data\n })\n }\n const injector = Injector.create({\n providers,\n parent: this._injector,\n })\n\n this._componentRef = factory.create(injector)\n this._componentRef.changeDetectorRef.detectChanges()\n\n const position = this._controlDef.position ?? google.maps.ControlPosition.LEFT_BOTTOM\n\n this._googleMaps.addControl(\n this._componentRef.location.nativeElement,\n position\n )\n\n this._addedAtPosition = position\n }\n\n public destroy() {\n const googleMaps = this._googleMaps.googleMap\n if (googleMaps !== undefined) {\n let idx = -1\n googleMaps.controls[this._addedAtPosition].forEach((elem, index) => {\n if (elem === this._componentRef.location.nativeElement) {\n idx = index\n }\n })\n if (idx === -1) {\n throw Error(`Unable to destroy control. Control not found.`)\n }\n googleMaps.controls[this._addedAtPosition].removeAt(idx)\n }\n this._componentRef.destroy()\n\n this._destroyedSubject.next()\n this._destroyedSubject.complete()\n }\n\n}\n\n@Injectable()\nexport class GoogleMapsControlsService implements MapControlsService {\n\n constructor(\n private readonly _googleMaps: GoogleMapsService,\n private readonly _componentFactoryResolver: ComponentFactoryResolver,\n private readonly _injector: Injector,\n ) { }\n\n public add(control: MapControl): MapControlRef {\n return new MapControlRef(this._googleMaps, this._componentFactoryResolver, this._injector, control)\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n Optional,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\n\nimport { SeamIcon } from '@theseam/ui-common/icon'\n\nimport { GoogleMapsService } from '../google-maps.service'\nimport { MAP_CONTROL_DATA } from '../map-controls-service'\n\nexport interface GoogleMapsRecenterButtonControlData {\n label?: string | undefined | null\n icon?: SeamIcon | undefined | null\n}\n\n/**\n *\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seam-google-maps-recenter-button-control]',\n templateUrl: './google-maps-recenter-button-control.component.html',\n styleUrls: ['./google-maps-recenter-button-control.component.scss'],\n host: {\n '[attr.draggable]': 'false',\n '[attr.aria-label]': 'label',\n '[attr.title]': 'label',\n 'type': 'button',\n 'class': 'gmnoprint gm-control-active'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheSeamGoogleMapsRecenterButtonControlComponent implements OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private _listeners: (() => void)[] = []\n\n @Input() label: string | undefined | null\n\n @Input() icon: SeamIcon | undefined | null\n\n @HostListener('click', [ 'event' ])\n _onClick(event: MouseEvent) {\n this._googleMaps.reCenterOnFeatures()\n }\n\n constructor(\n private readonly _googleMaps: GoogleMapsService,\n @Optional() @Inject(MAP_CONTROL_DATA) _data?: GoogleMapsRecenterButtonControlData\n ) {\n if (_data) {\n if (Object.prototype.hasOwnProperty.call(_data, 'label')) {\n this.label = _data.label\n }\n if (Object.prototype.hasOwnProperty.call(_data, 'icon')) {\n this.icon = _data.icon\n }\n }\n }\n\n /** @ignore */\n ngOnDestroy() {\n this._listeners.forEach(l => l())\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n}\n","<seam-icon [icon]=\"icon\" iconType=\"image-fill\"></seam-icon>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\n\nimport { SeamIcon } from '@theseam/ui-common/icon'\nimport { readGeoFile } from '@theseam/ui-common/utils'\n\nimport { GoogleMapsService } from '../google-maps.service'\nimport { MAP_CONTROL_DATA } from '../map-controls-service'\nimport { MapValueManagerService, MapValueSource } from '../map-value-manager.service'\n\nexport interface GoogleMapsUploadButtonControlData {\n label?: string | undefined | null\n icon?: SeamIcon | undefined | null\n}\n\n/**\n *\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seam-google-maps-upload-button-control]',\n templateUrl: './google-maps-upload-button-control.component.html',\n styleUrls: ['./google-maps-upload-button-control.component.scss'],\n host: {\n '[attr.draggable]': 'false',\n '[attr.aria-label]': 'label',\n '[attr.title]': 'label',\n 'type': 'button',\n 'class': 'gmnoprint gm-control-active'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheSeamGoogleMapsUploadButtonControlComponent implements OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private readonly _fileInputElement: HTMLInputElement\n\n private _listeners: (() => void)[] = []\n\n @Input() label: string | undefined | null\n\n @Input() icon: SeamIcon | undefined | null\n\n @HostListener('click', [ 'event' ])\n _onClick(event: MouseEvent) {\n this._fileInputElement.click()\n }\n\n constructor(\n private readonly _elementRef: ElementRef,\n private readonly _mapValueManager: MapValueManagerService,\n private readonly _renderer: Renderer2,\n private readonly _googleMaps: GoogleMapsService,\n @Optional() @Inject(MAP_CONTROL_DATA) _data?: GoogleMapsUploadButtonControlData\n ) {\n if (_data) {\n if (Object.prototype.hasOwnProperty.call(_data, 'label')) {\n this.label = _data.label\n }\n if (Object.prototype.hasOwnProperty.call(_data, 'icon')) {\n this.icon = _data.icon\n }\n }\n\n this._fileInputElement = this._createHiddenInput()\n this._renderer.appendChild(this._elementRef.nativeElement, this._fileInputElement)\n }\n\n /** @ignore */\n ngOnDestroy() {\n this._listeners.forEach(l => l())\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _getFile(throwIfInvalidFiles: boolean = true): File | null {\n const files = this._fileInputElement.files\n if (files === null || files.length === 0) {\n return null\n }\n\n if (throwIfInvalidFiles) {\n if (files.length > 1) {\n throw Error(`Only one file can be imported at a time.`)\n }\n }\n\n return files[0]\n }\n\n private async _importFile(file: File): Promise<void> {\n const json = await readGeoFile(file)\n this._mapValueManager.setValue(json, MapValueSource.Input)\n this._resetInput()\n }\n\n private _createHiddenInput(): HTMLInputElement {\n const fileInputElement = this._renderer.createElement('input')\n this._renderer.setAttribute(fileInputElement, 'type', 'file')\n this._renderer.setAttribute(fileInputElement, 'hidden', '')\n this._renderer.setAttribute(fileInputElement, 'accept', '.json,.geojson,.shp,.zip')\n\n this._listeners.push(this._renderer.listen(fileInputElement, 'change', (event: Event) => {\n const file = this._getFile()\n if (file === null) { return }\n const fileImportHandler = this._googleMaps.getFileInputHandler()\n if (fileImportHandler) {\n fileImportHandler(file)\n } else {\n this._importFile(file)\n }\n }))\n\n return fileInputElement\n }\n\n private _createTemporaryFormElement(): HTMLFormElement {\n return this._renderer.createElement('form')\n }\n\n /**\n * Reset input element, so that the same file can be added again.\n */\n private _resetInput(): void {\n const formElement = this._createTemporaryFormElement()\n this._renderer.appendChild(formElement, this._fileInputElement)\n formElement.reset()\n this._renderer.appendChild(this._elementRef.nativeElement, this._fileInputElement)\n }\n}\n","<seam-icon [icon]=\"icon\" iconType=\"image-fill\"></seam-icon>\n","import { Observable } from 'rxjs'\n\nexport abstract class TheSeamGoogleMapsApiLoader {\n\n abstract load(): Observable<void>\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { takeUntil, tap } from 'rxjs/operators'\n\nimport { readGeoFile } from '@theseam/ui-common/utils'\n\nimport { GoogleMapsService } from '../google-maps.service'\nimport { MapValueManagerService, MapValueSource } from '../map-value-manager.service'\n\n/**\n *\n */\n@Component({\n selector: 'seam-map-file-drop',\n templateUrl: './map-file-drop.component.html',\n styleUrls: ['./map-file-drop.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheSeamMapFileDropComponent implements OnInit, OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n /**\n * Map element drag events added to.\n */\n private _mapDiv: HTMLDivElement | undefined\n\n private _listeners: (() => void)[] = []\n\n private _globalDragInProgress = false\n\n constructor(\n private readonly _elementRef: ElementRef,\n private readonly _ngZone: NgZone,\n private readonly _googleMaps: GoogleMapsService,\n private readonly _mapValueManager: MapValueManagerService,\n private readonly _renderer: Renderer2\n ) { }\n\n /** @ignore */\n ngOnInit() {\n this._googleMaps.mapReady$.pipe(\n tap(ready => {\n if (ready) {\n this._enableFileDrop()\n } else {\n this._disableFileDrop()\n }\n }),\n takeUntil(this._ngUnsubscribe)\n ).subscribe()\n }\n\n /** @ignore */\n ngOnDestroy() {\n this._disableFileDrop()\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _enableFileDrop(): void {\n const divElement = this._googleMaps.getDiv()\n if (this._mapDiv === divElement) {\n return\n }\n\n if (this._mapDiv !== undefined) {\n // Disable file drop on previous map div.\n this._disableFileDrop()\n }\n\n this._mapDiv = divElement\n this._ngZone.runOutsideAngular(() => {\n this._listeners.push(this._renderer.listen('document', 'dragstart', (event: Event) => {\n this._globalDragInProgress = true\n }))\n\n this._listeners.push(this._renderer.listen('document', 'dragend', (event: Event) => {\n this._globalDragInProgress = false\n }))\n\n this._listeners.push(this._renderer.listen(divElement, 'dragover', this._handleDragOverEvent))\n this._listeners.push(this._renderer.listen(this._elementRef.nativeElement, 'dragover', this._handleDragOverEvent))\n this._listeners.push(this._renderer.listen(this._elementRef.nativeElement, 'drop', this._handleDropEvent))\n this._listeners.push(this._renderer.listen(divElement, 'dragenter', this._handleDragEnterEvent))\n this._listeners.push(this._renderer.listen(this._elementRef.nativeElement, 'dragleave', this._handleDragLeaveEvent))\n })\n }\n\n private _disableFileDrop(): void {\n if (this._listeners.length > 0) {\n this._listeners.forEach(l => l())\n this._listeners = []\n }\n }\n\n private readonly _handleDragOverEvent = (event: any) => {\n if (!this._dropAllowed()) {\n return\n }\n\n if (!this._isSupportedDataTransferTypes(event.dataTransfer)) {\n return\n }\n\n event.preventDefault()\n event.dataTransfer.dropEffect = 'copy'\n }\n\n private readonly _handleDropEvent = (event: any) => {\n if (!this._dropAllowed()) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n this._renderer.setStyle(this._elementRef.nativeElement, 'display', 'none')\n\n // TODO: Show error if multiple files?\n if (!this._isSupportedDataTransfer(event.dataTransfer)) {\n return\n }\n\n const item = event.dataTransfer.items[0]\n const file = item.getAsFile()\n readGeoFile(file).then(json => {\n this._mapValueManager.setValue(json, MapValueSource.Input)\n })\n }\n\n private readonly _handleDragEnterEvent = (event: any) => {\n if (!this._dropAllowed()) {\n return\n }\n\n if (!this._isSupportedDataTransferTypes(event.dataTransfer)) {\n return\n }\n\n this._renderer.setStyle(this._elementRef.nativeElement, 'display', 'block')\n }\n\n private readonly _handleDragLeaveEvent = (event: any) => {\n if (!this._dropAllowed()) {\n return\n }\n\n this._renderer.setStyle(this._elementRef.nativeElement, 'display', 'none')\n }\n\n private _dropAllowed(): boolean {\n return !this._globalDragInProgress\n }\n\n private _isSupportedDataTransfer(dataTransfer: DataTransfer): boolean {\n return dataTransfer.files.length === 1 && dataTransfer.types[0] === 'Files'\n }\n\n private _isSupportedDataTransferTypes(dataTransfer: DataTransfer): boolean {\n return dataTransfer.types[0] === 'Files'\n }\n\n}\n","","import { OnInit } from '@angular/core'\nimport {\n ChangeDetectionStrategy,\n Component,\n Inject,\n Input,\n OnDestroy,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { takeUntil, tap } from 'rxjs/operators'\n\nimport { GoogleMapsControlsService, MapControlRef } from './google-maps-controls.service'\nimport { GoogleMapsService } from './google-maps.service'\nimport { MapControl, MAP_CONTROLS_SERVICE } from './map-controls-service'\n\n@Component({\n selector: 'seam-map-control',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheSeamMapsControlComponent implements OnInit, OnDestroy {\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private _controlRef?: MapControlRef\n\n @Input()\n set def(value: MapControl | null | undefined) {\n if (value !== this._def) {\n this._remove()\n this._def = value\n }\n }\n _def: MapControl | null | undefined\n\n constructor(\n private readonly _googleMaps: GoogleMapsService,\n @Inject(MAP_CONTROLS_SERVICE) private readonly _googleMapsControls: GoogleMapsControlsService,\n ) { }\n\n /** @ignore */\n ngOnInit(): void {\n this._googleMaps.mapReady$.pipe(\n tap(ready => {\n if (ready) {\n this._add()\n } else {\n this._remove()\n }\n }),\n takeUntil(this._ngUnsubscribe)\n ).subscribe()\n }\n\n /** @ignore */\n ngOnDestroy(): void {\n this._remove()\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _add(): void {\n if (this._controlRef) {\n return\n }\n\n if (this._def === null || this._def === undefined) {\n return\n }\n\n this._controlRef = this._googleMapsControls.add(this._def)\n }\n\n private _remove(): void {\n this._controlRef?.destroy()\n this._controlRef = undefined\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y'\nimport { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { fromEvent, Observable, of, Subject } from 'rxjs'\nimport { catchError, map, takeUntil, tap } from 'rxjs/operators'\n\nimport { faCrosshairs, faFileImport } from '@fortawesome/free-solid-svg-icons'\nimport { CanDisable, CanDisableCtor, InputBoolean, InputNumber, mixinDisabled } from '@theseam/ui-common/core'\nimport { MenuComponent } from '@theseam/ui-common/menu'\n\nimport { TheSeamGoogleMapsApiLoader } from '../google-maps-api-loader/google-maps-api-loader'\nimport { GoogleMapsControlsService } from '../google-maps-controls.service'\nimport {\n TheSeamGoogleMapsRecenterButtonControlComponent,\n} from '../google-maps-recenter-button-control/google-maps-recenter-button-control.component'\nimport {\n TheSeamGoogleMapsUploadButtonControlComponent,\n} from '../google-maps-upload-button-control/google-maps-upload-button-control.component'\nimport { GoogleMapsService } from '../google-maps.service'\nimport { MapControl, MAP_CONTROLS_SERVICE } from '../map-controls-service'\nimport { MapValue, MapValueManagerService, MapValueSource } from '../map-value-manager.service'\n\ninterface TheSeamMapContextMenuItem {\n label: string\n action: (item: TheSeamMapContextMenuItem) => void\n}\n\nclass TheSeamGoogleMapsComponentBase {\n\n constructor(public _elementRef: ElementRef) {}\n\n}\n\nconst _TheSeamGoogleMapsMixinBase: CanDisableCtor &\n typeof TheSeamGoogleMapsComponentBase =\n mixinDisabled(TheSeamGoogleMapsComponentBase)\n\n/**\n * A wrapper for googlemap.\n */\n@Component({\n selector: 'seam-google-maps',\n templateUrl: './google-maps.component.html',\n styleUrls: ['./google-maps.component.scss'],\n inputs: [\n 'disabled',\n ],\n providers: [\n MapValueManagerService,\n GoogleMapsService,\n { provide: MAP_CONTROLS_SERVICE, useClass: GoogleMapsControlsService },\n {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line no-use-before-define\n useExisting: forwardRef(() => TheSeamGoogleMapsComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'seamGoogleMaps',\n})\nexport class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase\n implements OnInit, OnDestroy, OnChanges, CanDisable, ControlValueAccessor {\n\n static ngAcceptInputType_disabled: BooleanInput\n static ngAcceptInputType_zoom: NumberInput\n static ngAcceptInputType_longitude: NumberInput\n static ngAcceptInputType_latitude: NumberInput\n static ngAcceptInputType_fileDropEnabled: BooleanInput\n static ngAcceptInputType_fileUploadControlEnabled: BooleanInput\n static ngAcceptInputType_fullscreenControlEnabled: BooleanInput\n static ngAcceptInputType_reCenterControlEnabled: BooleanInput\n static ngAcceptInputType_mapTypeControlEnabled: BooleanInput\n static ngAcceptInputType_streetViewControlEnabled: BooleanInput\n static ngAcceptInputType_allowDrawingHoleInPolygon: BooleanInput\n static ngAcceptInputType_editingEnabled: BooleanInput\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n readonly _gmApiLoaded: Observable<boolean>\n\n readonly _fileUploadControlDef: MapControl = {\n component: TheSeamGoogleMapsUploadButtonControlComponent,\n data: { label: 'Import Geo File', icon: faFileImport },\n position: 6 /* google.maps.ControlPosition.LEFT_BOTTOM */,\n }\n\n readonly _reCenterControlDef: MapControl = {\n component: TheSeamGoogleMapsRecenterButtonControlComponent,\n data: { label: 'Center on Field', icon: faCrosshairs },\n position: 9 /* google.maps.ControlPosition.RIGHT_BOTTOM */,\n }\n\n private _focusOrigin: FocusOrigin = null\n\n @Input()\n set value(value: MapValue) {\n this._mapValueManager.setValue(value, MapValueSource.Input)\n }\n get value(): MapValue {\n return this._mapValueManager.value\n }\n\n @Input()\n set tabIndex(value: number) { this._tabIndex = coerceNumberProperty(value) }\n get tabIndex(): number { return this._tabIndex }\n /**\n * Set the tab index to `-1` to allow the root element of the\n * component to receive `focus` event from javascript, but not get focused by\n * keyboard navigation.\n */\n private _tabIndex = -1\n\n @Input() @InputBoolean() fileDropEnabled = true\n\n @Input() @InputBoolean() fileUploadControlEnabled = false\n @Input() @InputBoolean() fullscreenControlEnabled = true\n @Input() @InputBoolean() reCenterControlEnabled = true\n @Input() @InputBoolean() mapTypeControlEnabled = true\n @Input() @InputBoolean() streetViewControlEnabled = false\n\n @Input() @InputBoolean() allowDrawingHoleInPolygon = false\n\n @Input() @InputBoolean() editingEnabled = true\n\n @Input()\n set fileImportHandler(value: ((file: File) => void) | undefined | null) {\n this._googleMaps.setFileInputHandler(value)\n }\n\n @HostBinding('attr.disabled')\n get _attrDisabled() { return this.disabled || null }\n\n @HostBinding('attr.tabindex')\n get _attrTabIndex() { return this.disabled ? -1 : (this.tabIndex || 0) }\n\n onChange: any\n onTouched: any\n\n @Input() @InputNumber() zoom = 14\n @Input() @InputNumber() longitude = -98.570209\n @Input() @InputNumber() latitude = 37.633814\n\n @Input() padding: number | google.maps.Padding | undefined = 0\n\n @Output() mapReady = new EventEmitter<google.maps.Map | undefined>()\n\n @ViewChild('featureContextMenu', { static: true, read: MenuComponent }) public featureContextMenu!: MenuComponent\n\n _options = {\n mapTypeControl: true,\n mapTypeId: 'hybrid',\n streetViewControl: false,\n fullscreenControl: this.fullscreenControlEnabled,\n }\n\n readonly _contextMenuItems$: Observable<TheSeamMapContextMenuItem[]>\n\n private idleListener: google.maps.MapsEventListener | undefined\n\n constructor(\n readonly elementRef: ElementRef,\n private readonly _focusMonitor: FocusMonitor,\n private readonly _googleMaps: GoogleMapsService,\n private readonly _mapValueManager: MapValueManagerService,\n private readonly _googleMapsApiLoader: TheSeamGoogleMapsApiLoader,\n ) {\n super(elementRef)\n\n this._focusMonitor.monitor(this._elementRef, true).pipe(\n tap(origin => { this._focusOrigin = origin }),\n takeUntil(this._ngUnsubscribe),\n ).subscribe()\n\n this._mapValueManager.valueChanged.pipe(\n tap(change => {\n if (this.onChange) { this.onChange(change.value) }\n if (this.onTouched) { this.onTouched() }\n }),\n tap(changed => {\n if (this._googleMaps.mapReady && changed.source !== MapValueSource.FeatureChange) {\n this._googleMaps.setData(changed.value)\n }\n }),\n takeUntil(this._ngUnsubscribe),\n ).subscribe()\n\n this._contextMenuItems$ = this._googleMaps.editingEnabled$.pipe(\n map(enabled => {\n const items: TheSeamMapContextMenuItem[] = []\n if (enabled) {\n items.push({ label: 'Delete', action: () => this._onClickDeleteFeature() })\n }\n return items\n }),\n tap(items => {\n if (items.length === 0) {\n this._googleMaps.setFeatureContextMenu(null)\n } else {\n this._googleMaps.setFeatureContextMenu(this.featureContextMenu)\n }\n })\n )\n\n this._googleMaps.setBaseLatLng(this.latitude, this.longitude)\n\n this._googleMaps.setPadding(this.padding)\n\n this._gmApiLoaded = this._googleMapsApiLoader.load().pipe(\n map(() => true),\n catchError(() => of(false)),\n )\n }\n\n ngOnInit() {\n fromEvent<KeyboardEvent>(window, 'keydown').pipe(\n tap((event: KeyboardEvent) => {\n switch (event.code) {\n case 'Delete':\n if (this._googleMaps.isEditingEnabled()) {\n this._googleMaps.deleteSelection()\n event.preventDefault()\n event.stopPropagation()\n }\n break\n case 'Escape': this._googleMaps.stopDrawing(); event.preventDefault(); event.stopPropagation(); break\n case 'ContextMenu': this._googleMaps.openContextMenu(); event.preventDefault(); event.stopPropagation(); break\n }\n }),\n takeUntil(this._ngUnsubscribe),\n ).subscribe()\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef)\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateBase = false\n if (Object.prototype.hasOwnProperty.call(changes, 'latitude')) {\n this.latitude = changes.latitude.currentValue\n updateBase = true\n }\n if (Object.prototype.hasOwnProperty.call(changes, 'longitude')) {\n this.longitude = changes.longitude.currentValue\n updateBase = true\n }\n if (updateBase) {\n this._googleMaps.setBaseLatLng(this.latitude, this.longitude)\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'allowDrawingHoleInPolygon')) {\n this._googleMaps.allowDrawingHoleInPolygon(this.allowDrawingHoleInPolygon)\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'fullscreenControlEnabled')) {\n const fullscreenControl = coerceBooleanProperty(changes.fullscreenControlEnabled.currentValue)\n if (fullscreenControl !== this._options.fullscreenControl) {\n this._options = {\n ...this._options,\n fullscreenControl,\n }\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'editingEnabled')) {\n this._googleMaps.setEditingEnabled(this.editingEnabled)\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'padding')) {\n this._googleMaps.setPadding(this.padding)\n }\n }\n\n writeValue(value: MapValue): void {\n this.value = value\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled\n }\n\n public fitBounds(bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral, padding?: number | google.maps.Padding): void {\n this._googleMaps.fitBounds(bounds, padding)\n }\n\n public getGeoJson(): Promise<object> {\n return this._googleMaps.getGeoJson()\n }\n\n public hasFocus(): boolean {\n return this._focusOrigin !== null && this._focusOrigin !== undefined\n }\n\n /** Focuses the button. */\n public focus(): void {\n this._getHostElement().focus()\n }\n\n private _getHostElement() {\n return this._elementRef.nativeElement\n }\n\n _onMapReady(theMap: google.maps.Map) {\n this._googleMaps.setMap(theMap)\n this._googleMaps.setData(this._mapValueManager.value)\n\n // NOTE: The input zoom level was getting reset after this function ran,\n // so putting in this idle listener to wait until the map is fully rendered\n // to set the zoom.\n // Calling reCenterOnFeatures() after setZoom() ensures that maps with pre-drawn shapes\n // will display correctly\n this.idleListener = this._googleMaps.googleMap?.addListener('idle', () => {\n this._googleMaps.googleMap?.setZoom(this.zoom)\n this._googleMaps.reCenterOnFeatures()\n this.mapReady.emit(this._googleMaps.googleMap)\n\n this.idleListener?.remove()\n })\n\n }\n\n _onClickDeleteFeature() {\n this._googleMaps.deleteSelection()\n }\n\n}\n","<ng-container *ngIf=\"_gmApiLoaded | async\">\n <google-map\n height=\"100%\"\n width=\"100%\"\n [center]=\"{ lat: latitude, lng: longitude }\"\n [zoom]=\"zoom\"\n [options]=\"_options\"\n (mapInitialized)=\"_onMapReady($any($event))\"\n >\n </google-map>\n</ng-container>\n<seam-menu #featureContextMenu>\n <button seamMenuItem *ngFor=\"let item of _contextMenuItems$ | async\" (click)=\"item.action(item)\">{{ item.label }}</button>\n</seam-menu>\n<seam-map-file-drop *ngIf=\"fileDropEnabled\"></seam-map-file-drop>\n\n<seam-map-control *ngIf=\"fileUploadControlEnabled\" [def]=\"_fileUploadControlDef\"></seam-map-control>\n<seam-map-control *ngIf=\"reCenterControlEnabled\" [def]=\"_reCenterControlDef\"></seam-map-control>\n","import { Directive, ElementRef, HostBinding, Input, NgZone, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core'\nimport { interval, Observable, Subject, Subscriber } from 'rxjs'\nimport { filter, mapTo, startWith, switchMap, take, takeUntil } from 'rxjs/operators'\n\ndeclare const ngDevMode: boolean | undefined\ntype WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] }\n\nexport const SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS: google.maps.places.AutocompleteOptions = {\n componentRestrictions: { country: 'US' }\n}\n\n@Directive({\n selector: 'input[seamGoogleMapsPlacesAutocomplete]',\n exportAs: 'seamGoogleMapsPlacesAutocomplete'\n})\nexport class TheSeamGoogleMapsPlacesAutocompleteDirective implements OnInit, OnDestroy, OnChanges {\n private readonly _autoCompleteReadySubject = new Subject<void>()\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private _placeChangedPending: { observable: Observable<any>, subscriber: Subscriber<any> }[] = []\n private _listeners: google.maps.MapsEventListener[] = []\n\n public autoComplete?: google.maps.places.Autocomplete\n\n @Input()\n set options(value: google.maps.places.AutocompleteOptions | undefined | null) {\n this._options = value || SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS\n }\n private _options: google.maps.places.AutocompleteOptions = SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS\n\n /**\n * This event is fired when a PlaceResult is made available for a Place the\n * user has selected. If the user enters the name of a Place that was not\n * suggested by the control and presses the Enter key, or if a Place Details\n * request fails, the PlaceResult contains the user input in the name\n * property, with no other properties defined.\n *\n * See: https://developers.google.com/maps/documentation/javascript/reference/places-widget#Autocomplete.place_changed\n */\n @Output() readonly placeChanged: Observable<any>\n\n @HostBinding('attr.type') _attrType = 'text'\n\n constructor(\n private readonly _elementRef: ElementRef<HTMLInputElement>,\n private readonly _ngZone: NgZone,\n ) {\n this.placeChanged = this._autoCompleteReadySubject.pipe(\n startWith(undefined),\n switchMap(() => this._createPlaceChangedObservable<any>())\n )\n }\n\n ngOnInit(): void {\n this._ngZone.runOutsideAngular(() => {\n this._untilGoogleMapsApiLoaded().pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\n this.autoComplete = new google.maps.places.Autocomplete(this.getHostElement(), this._options)\n\n this._placeChangedPending.forEach(pending => pending.observable.subscribe(pending.subscriber))\n\n this._autoCompleteReadySubject.next(undefined)\n })\n })\n }\n\n ngOnDestroy(): void {\n this._listeners.forEach(l => l.remove())\n this._listeners = []\n\n this._ngUnsubscribe.next(undefined)\n this._ngUnsubscribe.complete()\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.autoComplete && changes['options']) {\n this.autoComplete.setOptions(this._options)\n }\n }\n\n private _untilGoogleMapsApiLoaded(): Observable<void> {\n return interval(500).pipe(\n filter(() => !!(window.google && window.google.maps && window.google.maps.version)),\n take(1),\n mapTo(undefined),\n )\n }\n\n /**\n * Returns the bounds to which predictions are biased.\n */\n public getBounds(): google.maps.LatLngBounds | undefined {\n this._assertInitialized()\n return this.autoComplete.getBounds()\n }\n\n /**\n * Returns the fields to be included for the Place in the details response\n * when the details are successfully retrieved. For a list of fields see\n * [PlaceResult](https://developers.google.com/maps/documentation/javascript/reference/places-service#PlaceResult).\n */\n public getFields(): string[] | undefined {\n this._assertInitialized()\n return (this.autoComplete as any).getFields()\n }\n\n /**\n * Returns the details of the Place selected by user if the details were\n * successfully retrieved. Otherwise returns a stub Place object, with the\n * name property set to the current value of the input field.\n */\n public getPlace(): google.maps.places.PlaceResult {\n this._assertInitialized()\n return this.autoComplete.getPlace()\n }\n\n /**\n * Sets the preferred area within which to return Place results. Results are\n * biased towards, but not restricted to, this area.\n */\n public setBounds(bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setBounds(bounds!)\n }\n\n /**\n * Sets the component restrictions. Component restrictions are used to\n * restrict predictions to only those within the parent component. For\n * example, the country.\n */\n public setComponentRestrictions(restrictions?: google.maps.places.ComponentRestrictions): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setComponentRestrictions(restrictions!)\n }\n\n /**\n * Sets the fields to be included for the Place in the details response when\n * the details are successfully retrieved. For a list of fields see\n * [PlaceResult](https://developers.google.com/maps/documentation/javascript/reference/places-service#PlaceResult).\n */\n public setFields(fields?: string[]): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setFields(fields!)\n }\n\n /** */\n public setOptions(options?: google.maps.places.AutocompleteOptions): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setOptions(options!)\n }\n\n /**\n * Sets the types of predictions to be returned. For supported types, see the\n * [developer's guide](https://developers.google.com/maps/documentation/javascript/places-autocomplete#constrain-place-types).\n * If no types are specified, all types will be returned.\n */\n public setTypes(types?: string[]): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setTypes(types!)\n }\n\n /** Focuses the input. */\n public focus(): void {\n this._elementRef.nativeElement.focus()\n }\n\n /** Unfocuses the input. */\n public blur(): void {\n this._elementRef.nativeElement.blur()\n }\n\n public getHostElement(): HTMLInputElement {\n return this._elementRef.nativeElement\n }\n\n private _createPlaceChangedObservable<T>(): Observable<T> {\n const observable = new Observable<T>(subscriber => {\n if (!this.autoComplete) {\n this._placeChangedPending.push({ observable, subscriber })\n return undefined\n }\n const listener = this.autoComplete.addListener('place_changed', (event: T) => {\n this._ngZone.run(() => subscriber.next(event))\n })\n this._listeners.push(listener)\n\n return () => listener.remove()\n })\n return observable\n }\n\n /** Asserts that the map has been initialized. */\n private _assertInitialized(): asserts this is WithRequired<TheSeamGoogleMapsPlacesAutocompleteDirective, 'autoComplete'> {\n if (!this.autoComplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(\n 'Cannot access Google Map Places information before the API has been initialized. ' +\n 'Please wait for the API to load before trying to interact with it.',\n )\n }\n }\n}\n","import { BooleanInput, coerceNumberProperty } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core'\nimport { interval, Observable, of, Subject, Subscriber } from 'rxjs'\nimport { filter, mapTo, startWith, switchMap, take, takeUntil } from 'rxjs/operators'\n\nimport { faSearchLocation } from '@fortawesome/free-solid-svg-icons'\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { InputDirective } from '@theseam/ui-common/form-field'\nimport { SeamIcon } from '@theseam/ui-common/icon'\n\nimport { SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS, TheSeamGoogleMapsPlacesAutocompleteDirective } from './google-maps-places-autocomplete.directive'\n\ndeclare const ngDevMode: boolean | undefined\ntype WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] }\n\n/**\n *\n */\n@Component({\n selector: 'seam-google-maps-places-autocomplete',\n templateUrl: './google-maps-places-autocomplete.component.html',\n styleUrls: ['./google-maps-places-autocomplete.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'seamGoogleMapsPlacesAutoComplete'\n})\nexport class TheSeamGoogleMapsPlacesAutoCompleteComponent implements OnDestroy {\n static ngAcceptInputType_disabled: BooleanInput\n\n private readonly _ngUnsubscribe = new Subject<void>()\n private readonly _autoCompleteReadySubject = new Subject()\n\n private _placeChangedPending: { observable: Observable<any>, subscriber: Subscriber<any> }[] = []\n\n public autoComplete?: google.maps.places.Autocomplete\n\n @Input() label: string | undefined | null = 'Search by address, place or name'\n\n @Input() icon: SeamIcon | undefined | null = faSearchLocation\n\n @Input() @InputBoolean() disabled: BooleanInput = false\n\n @Input() placeholder: string | undefined | null = 'Enter address, place or name'\n\n @Input() autocorrect: 'off' | 'on' | undefined | null = 'off'\n\n @Input() autocapitalize: 'off' | 'on' | undefined | null = 'off'\n\n /**\n * Set the tab index to `-1` to allow the root element of the\n * component to receive `focus` event from javascript, but not get focused by\n * keyboard navigation.\n */\n @Input()\n set tabIndex(value: number) { this._tabIndex = coerceNumberProperty(value) }\n get tabIndex(): number { return this._tabIndex }\n private _tabIndex = -1\n\n @Input()\n set options(value: google.maps.places.AutocompleteOptions | undefined | null) {\n this._options = value || SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS\n }\n _options: google.maps.places.AutocompleteOptions = SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS\n\n /**\n * This event is fired when a PlaceResult is made available for a Place the\n * user has selected. If the user enters the name of a Place that was not\n * suggested by the control and presses the Enter key, or if a Place Details\n * request fails, the PlaceResult contains the user input in the name\n * property, with no other properties defined.\n *\n * See: https://developers.google.com/maps/documentation/javascript/reference/places-widget#Autocomplete.place_changed\n */\n @Output() readonly placeChanged: Observable<void>\n\n @ViewChild('inp', { read: InputDirective, static: true }) _inputDirective!: InputDirective\n\n @ViewChild(TheSeamGoogleMapsPlacesAutocompleteDirective, { static: true })\n set __autocompleteDirective(value: TheSeamGoogleMapsPlacesAutocompleteDirective) {\n this._autoCompleteDirective = value\n this._untilAutoCompleteReady().pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\n this.autoComplete = this._autoCompleteDirective.autoComplete\n this._placeChangedPending.forEach(pending => pending.observable.subscribe(pending.subscriber))\n this._placeChangedPending = []\n })\n }\n _autoCompleteDirective!: TheSeamGoogleMapsPlacesAutocompleteDirective\n\n @HostBinding('attr.tabindex')\n get _attrTabIndex() { return this.disabled ? -1 : (this.tabIndex || 0) }\n\n @HostListener('click', [ 'event' ])\n _onClick(event: MouseEvent) {\n this._inputDirective.focus()\n }\n\n @HostListener('focus', [ '$event' ])\n _onFocus() {\n this._inputDirective?.focus()\n }\n\n constructor(\n private readonly _elementRef: ElementRef,\n ) {\n this.placeChanged = this._autoCompleteReadySubject.pipe(\n startWith(undefined),\n switchMap(() => this._createPlaceChangedObservable<any>())\n )\n }\n\n /** @ignore */\n ngOnDestroy() {\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _untilAutoCompleteReady(): Observable<void> {\n return interval(500).pipe(\n filter(() => !!this._autoCompleteDirective.autoComplete),\n take(1),\n mapTo(undefined),\n )\n }\n\n /**\n * Returns the bounds to which predictions are biased.\n */\n public getBounds(): google.maps.LatLngBounds | undefined {\n this._assertInitialized()\n return this.autoComplete.getBounds()\n }\n\n /**\n * Returns the fields to be included for the Place in the details response\n * when the details are successfully retrieved. For a list of fields see\n * [PlaceResult](https://developers.google.com/maps/documentation/javascript/reference/places-service#PlaceResult).\n */\n public getFields(): string[] | undefined {\n this._assertInitialized()\n return (this.autoComplete as any).getFields()\n }\n\n /**\n * Returns the details of the Place selected by user if the details were\n * successfully retrieved. Otherwise returns a stub Place object, with the\n * name property set to the current value of the input field.\n */\n public getPlace(): google.maps.places.PlaceResult {\n this._assertInitialized()\n return this.autoComplete.getPlace()\n }\n\n /**\n * Sets the preferred area within which to return Place results. Results are\n * biased towards, but not restricted to, this area.\n */\n public setBounds(bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setBounds(bounds!)\n }\n\n /**\n * Sets the component restrictions. Component restrictions are used to\n * restrict predictions to only those within the parent component. For\n * example, the country.\n */\n public setComponentRestrictions(restrictions?: google.maps.places.ComponentRestrictions): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setComponentRestrictions(restrictions!)\n }\n\n /**\n * Sets the fields to be included for the Place in the details response when\n * the details are successfully retrieved. For a list of fields see\n * [PlaceResult](https://developers.google.com/maps/documentation/javascript/reference/places-service#PlaceResult).\n */\n public setFields(fields?: string[]): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setFields(fields!)\n }\n\n /** */\n public setOptions(options?: google.maps.places.AutocompleteOptions): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setOptions(options!)\n }\n\n /**\n * Sets the types of predictions to be returned. For supported types, see the\n * [developer's guide](https://developers.google.com/maps/documentation/javascript/places-autocomplete#constrain-place-types).\n * If no types are specified, all types will be returned.\n */\n public setTypes(types?: string[]): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setTypes(types!)\n }\n\n /** Focuses the input. */\n public focus(): void {\n this._elementRef.nativeElement.focus()\n }\n\n /** Unfocuses the input. */\n public blur(): void {\n this._elementRef.nativeElement.blur()\n }\n\n public getHostElement(): HTMLInputElement {\n return this._elementRef.nativeElement\n }\n\n private _createPlaceChangedObservable<T>(): Observable<T> {\n const observable = new Observable<T>(subscriber => {\n if (!this.autoComplete) {\n this._placeChangedPending.push({ observable, subscriber })\n return undefined\n }\n\n const sub = this._autoCompleteDirective.placeChanged.subscribe(subscriber)\n\n return () => sub.unsubscribe()\n })\n return observable\n }\n\n /** Asserts that the map has been initialized. */\n private _assertInitialized(): asserts this is WithRequired<TheSeamGoogleMapsPlacesAutoCompleteComponent, 'autoComplete'> {\n if (!this.autoComplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(\n 'Cannot access Google Map Places information before the API has been initialized. ' +\n 'Please wait for the API to load before trying to interact with it.',\n )\n }\n }\n\n}\n","<div *ngIf=\"icon\" class=\"search-container--icon-wrapper\">\n <seam-icon [icon]=\"icon\" class=\"text-muted\" size=\"lg\"></seam-icon>\n</div>\n<label *ngIf=\"label || placeholder\" [attr.for]=\"inp.id\" class=\"sr-only\">{{ label || placeholder }}</label>\n<input #inp=\"seamInput\"\n seamInput\n seamGoogleMapsPlacesAutocomplete\n [disabled]=\"disabled\"\n [attr.placeholder]=\"placeholder\"\n [attr.autocorrect]=\"autocorrect\"\n [attr.autocapitalize]=\"autocapitalize\"\n [options]=\"_options\"\n/>\n","import { ObserversModule } from '@angular/cdk/observers'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { GoogleMapsModule } from '@angular/google-maps'\nimport { TheSeamFormFieldModule } from '@theseam/ui-common/form-field'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamMenuModule } from '@theseam/ui-common/menu'\nimport { TheSeamSharedModule } from '@theseam/ui-common/shared'\n\nimport { TheSeamGoogleMapsPlacesAutoCompleteComponent } from './google-maps-places-autocomplete/google-maps-places-autocomplete.component'\nimport { TheSeamGoogleMapsPlacesAutocompleteDirective } from './google-maps-places-autocomplete/google-maps-places-autocomplete.directive'\nimport { TheSeamGoogleMapsRecenterButtonControlComponent } from './google-maps-recenter-button-control/google-maps-recenter-button-control.component'\nimport { TheSeamGoogleMapsUploadButtonControlComponent } from './google-maps-upload-button-control/google-maps-upload-button-control.component'\nimport { TheSeamGoogleMapsComponent } from './google-maps/google-maps.component'\nimport { TheSeamMapsControlComponent } from './map-control.component'\nimport { TheSeamMapFileDropComponent } from './map-file-drop/map-file-drop.component'\n\n@NgModule({\n declarations: [\n TheSeamGoogleMapsComponent,\n TheSeamMapFileDropComponent,\n TheSeamGoogleMapsUploadButtonControlComponent,\n TheSeamGoogleMapsRecenterButtonControlComponent,\n TheSeamMapsControlComponent,\n TheSeamGoogleMapsPlacesAutocompleteDirective,\n TheSeamGoogleMapsPlacesAutoCompleteComponent,\n ],\n imports: [\n CommonModule,\n ObserversModule,\n TheSeamSharedModule,\n TheSeamMenuModule,\n TheSeamIconModule,\n TheSeamFormFieldModule,\n GoogleMapsModule,\n ],\n exports: [\n TheSeamGoogleMapsComponent,\n TheSeamGoogleMapsPlacesAutocompleteDirective,\n TheSeamGoogleMapsPlacesAutoCompleteComponent,\n TheSeamMapsControlComponent,\n ]\n})\nexport class TheSeamGoogleMapsModule { }\n","import { Inject, Injectable, InjectionToken, LOCALE_ID, Optional } from '@angular/core'\nimport { from, Observable, of } from 'rxjs'\n\nimport { TheSeamGoogleMapsApiLoader } from './google-maps-api-loader'\n\ninterface GoogleMapsWindow extends Window {\n gm_authFailure?: () => void\n google?: typeof google\n}\n\ndeclare const window: GoogleMapsWindow\n\n/**\n * Token for the config of the LazyMapsAPILoader. Please provide an object of\n * type {@link TheSeamLazyMapsApiLoader}.\n */\nexport const THESEAM_LAZY_MAPS_API_CONFIG = new InjectionToken<TheSeamLazyMapsApiLoaderConfig>('THESEAM_LAZY_MAPS_API_CONFIG')\n\n/**\n * Configuration for the {@link TheSeamLazyMapsApiLoader}.\n */\nexport interface TheSeamLazyMapsApiLoaderConfig {\n /**\n * The Google Maps API Key (see:\n * https://developers.google.com/maps/documentation/javascript/get-api-key)\n */\n apiKey?: string\n\n /**\n * The Google Maps client ID (for premium plans). When you have a Google Maps\n * APIs Premium Plan license, you must authenticate your application with\n * either an API key or a client ID. The Google Maps API will fail to load if\n * both a client ID and an API key are included.\n */\n clientId?: string\n\n /**\n * The Google Maps channel name (for premium plans). A channel parameter is an\n * optional parameter that allows you to track usage under your client ID by\n * assigning a distinct channel to each of your applications.\n */\n channel?: string\n\n /**\n * Google Maps API version.\n */\n apiVersion?: string\n\n /**\n * Url used for the `<script>` tag.\n */\n url?: string\n\n /**\n * Defines which Google Maps libraries should get loaded.\n */\n libraries?: string[]\n\n /**\n * The default bias for the map behavior is US. If you wish to alter your\n * application to serve different map tiles or bias the application, you can\n * overwrite the default behavior (US) by defining a `region`. See\n * https://developers.google.com/maps/documentation/javascript/basics#Region\n */\n region?: string\n\n /**\n * The Google Maps API uses the browser's preferred language when displaying\n * textual information. If you wish to overwrite this behavior and force the\n * API to use a given language, you can use this setting. See\n * https://developers.google.com/maps/documentation/javascript/basics#Language\n */\n language?: string\n\n loading?: string\n}\n\n@Injectable()\nexport class TheSeamLazyMapsApiLoader extends TheSeamGoogleMapsApiLoader {\n protected _scriptLoadingPromise?: Promise<void>\n protected readonly _config: TheSeamLazyMapsApiLoaderConfig\n protected readonly _SCRIPT_ID: string = 'seamGoogleMapsApiScript'\n protected readonly callbackName: string = `__seamLazyGoogleMapsApiLoader`\n\n constructor(\n @Inject(LOCALE_ID) private readonly _localeId: string,\n @Optional() @Inject(THESEAM_LAZY_MAPS_API_CONFIG) readonly config?: TheSeamLazyMapsApiLoaderConfig,\n ) {\n super()\n this._config = config || {}\n }\n\n public load(): Observable<void> {\n if (window.google && window.google.maps) {\n // Google maps already loaded on the page.\n return of(undefined)\n }\n\n if (this._scriptLoadingPromise) {\n return from(this._scriptLoadingPromise)\n }\n\n // This can happen in HMR situations or Stackblitz.io editors.\n const scriptOnPage = document.getElementById(this._SCRIPT_ID)\n if (scriptOnPage) {\n this._assignScriptLoadingPromise(scriptOnPage)\n return from(this._getScriptLoadingPromise())\n }\n\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.async = true\n script.defer = true\n script.id = this._SCRIPT_ID\n script.src = this._getScriptSrc(this.callbackName)\n this._assignScriptLoadingPromise(script)\n document.body.appendChild(script)\n return from(this._getScriptLoadingPromise())\n }\n\n private _assignScriptLoadingPromise(scriptElem: HTMLElement) {\n this._scriptLoadingPromise = new Promise((resolve, reject) => {\n const win = window as any\n win[this.callbackName] = () => { resolve() }\n\n scriptElem.onerror = (error: Event | string) => {\n reject(error)\n }\n })\n }\n\n private _getScriptLoadingPromise(): Promise<void> {\n if (!this._scriptLoadingPromise) {\n throw Error(`_scriptLoadingPromise has not been assigned.`)\n }\n return this._scriptLoadingPromise\n }\n\n protected _getScriptSrc(callbackName: string): string {\n const hostAndPath: string = this._config.url || 'https://maps.googleapis.com/maps/api/js'\n const queryParams: { [key: string]: string | string[] | undefined | null } = {\n v: this._config.apiVersion || 'quarterly',\n callback: callbackName,\n key: this._config.apiKey,\n client: this._config.clientId,\n channel: this._config.channel,\n libraries: this._config.libraries,\n region: this._config.region,\n language: this._config.language || (this._localeId !== 'en-US' ? this._localeId : null),\n loading: this._config.loading || 'async'\n }\n\n const params: string = Object.keys(queryParams)\n // Remove undefined or null params.\n .filter((k: string) => queryParams[k] !== undefined && queryParams[k] !== null)\n // Remove empty arrays.\n .filter((k: string) => {\n const param = queryParams[k]\n return !Array.isArray(param) || param.length > 0\n })\n // Join arrays as comma seperated strings.\n .map((k: string) => {\n const param = queryParams[k]\n return { key: k, value: Array.isArray(param) ? param.join(',') : param } as { key: string, value: string }\n })\n .map((entry: { key: string, value: string }) => {\n return `${entry.key}=${entry.value}`\n })\n .join('&')\n\n return `${hostAndPath}?${params}`\n }\n}\n","import { Injectable } from '@angular/core'\nimport { defer, Observable, of, throwError } from 'rxjs'\n\nimport { TheSeamGoogleMapsApiLoader } from './google-maps-api-loader'\n\n/**\n * When using the TheSeamNoopGoogleMapsAPILoader, the Google Maps API must be\n * added to the page some other way before the map component is initialixed. One\n * way would be via a `<script>` Tag.\n */\n@Injectable()\nexport class TheSeamNoopGoogleMapsAPILoader extends TheSeamGoogleMapsApiLoader {\n load(): Observable<void> {\n return defer(() => {\n if (!(window as any).google || !(window as any).google.maps) {\n return throwError(new Error(\n 'Google Maps API not loaded on page. Make sure window.google.maps is available.'\n ))\n }\n return of(undefined)\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["polygon","turfjsPolygon","multiPolygon","turfjsMultiPolygon","i1.MapValueManagerService","i1.GoogleMapsService","i3","i2.MapValueManagerService","i2.GoogleMapsService","i3.MapValueManagerService","i4.TheSeamGoogleMapsApiLoader","i8.TheSeamMapFileDropComponent","i9.TheSeamMapsControlComponent","i1","i4.TheSeamGoogleMapsPlacesAutocompleteDirective"],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-google-maps.mjs","sources":["../../../projects/ui-common/google-maps/map-controls-service.ts","../../../projects/ui-common/google-maps/google-maps-feature-helpers.ts","../../../projects/ui-common/google-maps/google-maps-contextmenu.ts","../../../projects/ui-common/google-maps/map-value-manager.service.ts","../../../projects/ui-common/google-maps/google-maps.service.ts","../../../projects/ui-common/google-maps/google-maps-controls.service.ts","../../../projects/ui-common/google-maps/google-maps-recenter-button-control/google-maps-recenter-button-control.component.ts","../../../projects/ui-common/google-maps/google-maps-recenter-button-control/google-maps-recenter-button-control.component.html","../../../projects/ui-common/google-maps/google-maps-upload-button-control/google-maps-upload-button-control.component.ts","../../../projects/ui-common/google-maps/google-maps-upload-button-control/google-maps-upload-button-control.component.html","../../../projects/ui-common/google-maps/google-maps-api-loader/google-maps-api-loader.ts","../../../projects/ui-common/google-maps/map-file-drop/map-file-drop.component.ts","../../../projects/ui-common/google-maps/map-file-drop/map-file-drop.component.html","../../../projects/ui-common/google-maps/map-control.component.ts","../../../projects/ui-common/google-maps/google-maps/google-maps.component.ts","../../../projects/ui-common/google-maps/google-maps/google-maps.component.html","../../../projects/ui-common/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.directive.ts","../../../projects/ui-common/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.ts","../../../projects/ui-common/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.html","../../../projects/ui-common/google-maps/google-maps.module.ts","../../../projects/ui-common/google-maps/google-maps-api-loader/lazy-google-maps-api-loader.ts","../../../projects/ui-common/google-maps/google-maps-api-loader/noop-google-maps-api-loader.ts","../../../projects/ui-common/google-maps/theseam-ui-common-google-maps.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nimport { ComponentType } from '@theseam/ui-common/models'\n\nexport interface MapControl<TData = any> {\n component: ComponentType<any>\n data?: TData\n position?: google.maps.ControlPosition\n}\n\nexport interface MapControlsService {\n add(control: MapControl): void\n}\n\nexport const MAP_CONTROLS_SERVICE = new InjectionToken<MapControlsService>('MAP_CONTROLS_SERVICE')\n\nexport const MAP_CONTROL_DATA = new InjectionToken<any>('MAP_CONTROL_DATA')\n","import { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { NgZone } from '@angular/core'\nimport { Observable } from 'rxjs'\n\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\nimport booleanContains from '@turf/boolean-contains'\nimport {\n multiPolygon as turfjsMultiPolygon,\n polygon as turfjsPolygon,\n} from '@turf/helpers'\n\nexport enum AppFeaturePropertyName {\n IsSelected = `__app__isSelected`,\n}\n\nexport function isAppFeatureProperty(propertyName: string): propertyName is AppFeaturePropertyName {\n return Object.values(AppFeaturePropertyName)\n .findIndex(value => value === propertyName) !== -1\n}\n\nexport function isFeatureSelected(feature: google.maps.Data.Feature): boolean {\n const isSelected = feature.getProperty(AppFeaturePropertyName.IsSelected)\n return coerceBooleanProperty(isSelected)\n}\n\nexport function setFeatureSelected(feature: google.maps.Data.Feature, isSelected: boolean): void {\n feature.setProperty(AppFeaturePropertyName.IsSelected, isSelected)\n}\n\nconst EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_PROPERTY_NAME = 'styleOptions'\nconst EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_HOVERED_PROPERTY_NAME = 'styleOptionsHovered'\nconst EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_SELECTED_PROPERTY_NAME = 'styleOptionsSelected'\n\nexport function getStyleOptionsDefinedByFeature(feature: google.maps.Data.Feature): google.maps.Data.StyleOptions | undefined {\n return feature.getProperty(EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_PROPERTY_NAME) as google.maps.Data.StyleOptions || undefined\n}\n\nexport function getHoveredStyleOptionsDefinedByFeature(feature: google.maps.Data.Feature): google.maps.Data.StyleOptions | undefined {\n return feature.getProperty(EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_HOVERED_PROPERTY_NAME) as google.maps.Data.StyleOptions || undefined\n}\n\nexport function getSelectedStyleOptionsDefinedByFeature(feature: google.maps.Data.Feature): google.maps.Data.StyleOptions | undefined {\n return feature.getProperty(EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_SELECTED_PROPERTY_NAME) as google.maps.Data.StyleOptions || undefined\n}\n\n// TODO: Check performance of cloning a google.maps.Data instance, so the\n// properties can be removed with the google maps api, instead of on the\n// resulting json.\nexport function stripAppFeaturePropertiesFromJson(json: any) {\n if (notNullOrUndefined(json) && Array.isArray(json?.features)) {\n for (const feature of json.features) {\n if (notNullOrUndefined(feature?.properties)) {\n for (const k of Object.keys(feature.properties)) {\n if (isAppFeatureProperty(k)) {\n feature.properties[k] = undefined\n delete feature.properties[k]\n }\n }\n }\n }\n }\n}\n\n/**\n * Searches for a Feature in Data that contains the provided Feature and can use\n * it as a cutout area.\n */\nexport function getPossibleExteriorFeature(\n data: google.maps.Data,\n feature: google.maps.Data.Feature\n): google.maps.Data.Feature | undefined {\n let exteriorPolygonFeature: google.maps.Data.Feature | undefined\n data.forEach(f => {\n if (f === feature) {\n return\n }\n\n const geometry = f.getGeometry()\n if (geometry === null) {\n throw Error(`Geometry not found.`)\n }\n if (geometry.getType() === 'Polygon' && featureContains(f, feature)) {\n exteriorPolygonFeature = f\n }\n })\n return exteriorPolygonFeature\n}\n\nexport function addInnerFeatureCutoutToExteriorFeature(\n exteriorFeature: google.maps.Data.Feature,\n innerFeature: google.maps.Data.Feature\n): void {\n const exteriorGeometry = exteriorFeature.getGeometry()\n if (exteriorGeometry === null) {\n throw Error(`Geometry not found.`)\n }\n const innerGeometry = innerFeature.getGeometry()\n if (innerGeometry === null) {\n throw Error(`Geometry not found.`)\n }\n // NOTE: Other geometries may support cutouts, but our map shapes editor only\n // supports polygons currently, so we will need to handle other geometry types\n // here if we start allowing users to draw shapes other than polygon.\n if (exteriorGeometry.getType() !== 'Polygon' || innerGeometry.getType() !== 'Polygon') {\n throw Error(`Inner cutout is only supported by Polygon gemoetry.`)\n }\n\n const featurePolygon = innerGeometry as google.maps.Data.Polygon\n const exteriorPolygon = exteriorGeometry as google.maps.Data.Polygon\n exteriorFeature.setGeometry(new google.maps.Data.Polygon([\n ...exteriorPolygon.getArray(),\n featurePolygon.getAt(0).getArray().reverse()\n ]))\n}\n\n/**\n * Google maps paths don't always start and stop at the exact same position, so\n * this will fix that for turfjs.\n */\nexport function fixPathDifferentStartingAndEndingPoint(coordinates: number[][]): void {\n if (coordinates.length <= 1) {\n return\n }\n\n const start = coordinates[0]\n const end = coordinates[coordinates.length - 1]\n if (start[0] === end[0] && start[1] === end[1]) {\n return\n }\n\n coordinates.push(coordinates[0])\n}\n\nexport function polygonHasValidPathsLengths(polygon: google.maps.Polygon, minPointsInValidPath: number = 3): boolean {\n const paths = polygon.getPaths().getArray()\n for (const path of paths) {\n if (path.getLength() < minPointsInValidPath) {\n return false\n }\n }\n return true\n}\n\nexport function polygonCoordinates(polygon: google.maps.Data.Polygon): number[][][] {\n return polygon.getArray().map(linRing => {\n const coords = linRing.getArray().map(x => [ x.lng(), x.lat() ])\n fixPathDifferentStartingAndEndingPoint(coords)\n return coords\n })\n}\n\nexport function multiPolygonCoordinates(multiPolygon: google.maps.Data.MultiPolygon): number[][][][] {\n return multiPolygon.getArray().map(x => polygonCoordinates(x))\n}\n\nexport function toTurfJsPolygon(polygon: google.maps.Data.Polygon) {\n return turfjsPolygon(polygonCoordinates(polygon))\n}\n\nexport function toTurfJsMultiPolygon(multiPolygon: google.maps.Data.MultiPolygon) {\n return turfjsMultiPolygon(multiPolygonCoordinates(multiPolygon))\n}\n\nexport function toTurfJsFeature(googleFeature: google.maps.Data.Feature) {\n const geometry = googleFeature.getGeometry()\n if (geometry === null) {\n throw Error(`Geometry not found.`)\n }\n if (geometry.getType() === 'Polygon') {\n return toTurfJsPolygon(geometry as google.maps.Data.Polygon)\n } else if (geometry.getType() === 'MultiPolygon') {\n return toTurfJsMultiPolygon(geometry as google.maps.Data.MultiPolygon)\n }\n\n throw Error(`Unexpected geometry.`)\n}\n\nexport function featureContains(featureA: google.maps.Data.Feature, featureB: google.maps.Data.Feature): boolean {\n const polygonA = toTurfJsFeature(featureA)\n const polygonB = toTurfJsFeature(featureB)\n return booleanContains(polygonA, polygonB)\n}\n\nexport function createDataFeatureFromPolygon(polygon: google.maps.Polygon): google.maps.Data.Feature {\n const arr = polygon.getPaths().getArray().map(x => x.getArray())\n return new google.maps.Data.Feature({\n geometry: new google.maps.Data.Polygon(arr)\n })\n}\n\nexport function getBoundsWithAllFeatures(data: google.maps.Data): google.maps.LatLngBounds {\n const bounds = new google.maps.LatLngBounds()\n\n data.forEach(feature => {\n const geometry = feature.getGeometry()\n if (geometry === null) {\n throw Error(`Geometry not found.`)\n }\n geometry.forEachLatLng(latLng => {\n bounds.extend(latLng)\n })\n })\n\n return bounds\n}\n\nexport function getFeatureBounds(feature: google.maps.Data.Feature): google.maps.LatLngBounds {\n const bounds = new google.maps.LatLngBounds()\n\n const geometry = feature.getGeometry()\n if (geometry === null) {\n throw Error(`Geometry not found.`)\n }\n geometry.forEachLatLng(latLng => {\n bounds.extend(latLng)\n })\n\n return bounds\n}\n\nexport function getFeatureCenter(feature: google.maps.Data.Feature): google.maps.LatLng {\n return getFeatureBounds(feature).getCenter()\n}\n\nexport function removeAllFeatures(data: google.maps.Data): void {\n data.forEach(f => data.remove(f))\n}\n\nexport function getFeaturesCount(data: google.maps.Data): number {\n let count = 0\n data.forEach(() => count++)\n return count\n}\n\n/**\n * NOTE: Original events are not emitted, because filtering may omit events.\n */\nexport function createFeatureChangeObservable(data: google.maps.Data, ngZone: NgZone): Observable<void> {\n return new Observable<void>(subscriber => {\n const listeners: google.maps.MapsEventListener[] = []\n\n ngZone.runOutsideAngular(() => {\n listeners.push(data.addListener('setgeometry', (event: google.maps.Data.SetGeometryEvent) => {\n ngZone.run(() => { subscriber.next(undefined) })\n }))\n\n listeners.push(data.addListener('addfeature', (event: google.maps.Data.AddFeatureEvent) => {\n ngZone.run(() => { subscriber.next(undefined) })\n }))\n\n listeners.push(data.addListener('removefeature', (event: google.maps.Data.RemoveFeatureEvent) => {\n ngZone.run(() => { subscriber.next(undefined) })\n }))\n\n listeners.push(data.addListener('setproperty', (event: google.maps.Data.SetPropertyEvent) => {\n if (!isAppFeatureProperty(event.name)) {\n ngZone.run(() => { subscriber.next(undefined) })\n }\n }))\n\n listeners.push(data.addListener('removeproperty', (event: google.maps.Data.RemovePropertyEvent) => {\n if (!isAppFeatureProperty(event.name)) {\n ngZone.run(() => { subscriber.next(undefined) })\n }\n }))\n })\n\n return () => {\n listeners.forEach(google.maps.event.removeListener)\n }\n })\n}\n","import { ESCAPE } from '@angular/cdk/keycodes'\nimport { NgZone, ViewContainerRef } from '@angular/core'\nimport { fromEvent, Subject } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\nimport { MenuComponent } from '@theseam/ui-common/menu'\n\nimport { isFeatureSelected } from './google-maps-feature-helpers'\n\n// TODO: Close on map losing focus.\n\nexport class GoogleMapsContextMenu {\n\n private readonly _overlayView: google.maps.OverlayView\n private readonly _cleanupFn: () => void\n\n constructor(\n private readonly _map: google.maps.Map,\n private readonly _menu: MenuComponent,\n _position: google.maps.LatLng,\n private readonly _vcr: ViewContainerRef,\n private readonly _ngZone: NgZone,\n private readonly _data: google.maps.Data,\n private readonly _feature: google.maps.Data.Feature,\n ) {\n const tplRef = this._menu.templateRef\n if (tplRef === undefined || tplRef === null) {\n throw Error(`Menu template is not defined.`)\n }\n\n const ref = this._vcr.createEmbeddedView(tplRef)\n ref.detectChanges()\n\n const listeners: google.maps.MapsEventListener[] = []\n const ngUnsubscribe = new Subject<void>()\n\n // TODO: Fix the initial focus. setTimeout avoids the wrong contextmenu\n // getting triggered, but the first item flashes and looks off this way.\n setTimeout(() => {\n this._menu.focusFirstItem('program')\n })\n this._menu.closed.pipe(\n takeUntil(ngUnsubscribe)\n ).subscribe(v => {\n this.close()\n })\n\n fromEvent(document, 'keydown').pipe(\n takeUntil(ngUnsubscribe)\n ).subscribe((event: any) => {\n if (event.keyCode === ESCAPE) {\n this.close()\n }\n })\n\n const __cleanup = () => this._cleanupFn()\n class GoogleMapsContextMenuOverlayView extends google.maps.OverlayView {\n public containerDiv: HTMLDivElement\n\n constructor(\n public position: google.maps.LatLng,\n content: HTMLElement\n ) {\n super()\n this.position = position\n\n this.containerDiv = document.createElement('div')\n this.containerDiv.style.cursor = 'auto'\n this.containerDiv.style.height = '0'\n this.containerDiv.style.position = 'absolute'\n this.containerDiv.appendChild(content)\n\n // Optionally stop clicks, etc., from bubbling up to the map.\n GoogleMapsContextMenuOverlayView.preventMapHitsAndGesturesFrom(this.containerDiv)\n }\n\n /** Called when the view is added to the map. */\n onAdd() {\n this.getPanes()?.floatPane.appendChild(this.containerDiv)\n }\n\n /** Called when the view is removed from the map. */\n onRemove() {\n if (this.containerDiv.parentElement) {\n this.containerDiv.parentElement.removeChild(this.containerDiv)\n }\n __cleanup()\n }\n\n /** Called each frame when the view needs to draw itself. */\n draw() {\n const divPosition = this.getProjection().fromLatLngToDivPixel(this.position)\n if (!divPosition) {\n return\n }\n\n // Hide the popup when it is far out of view.\n const display =\n Math.abs(divPosition.x) < 4000 && Math.abs(divPosition.y) < 4000\n ? 'block'\n : 'none'\n\n if (display === 'block') {\n this.containerDiv.style.left = `${divPosition.x}px`\n this.containerDiv.style.top = `${divPosition.y}px`\n }\n\n if (this.containerDiv.style.display !== display) {\n this.containerDiv.style.display = display\n }\n }\n }\n\n this._overlayView = new GoogleMapsContextMenuOverlayView(_position, ref.rootNodes[0])\n this._overlayView.setMap(this._map)\n\n this._ngZone.runOutsideAngular(() => {\n listeners.push(this._data.addListener('removefeature', (event: google.maps.Data.RemoveFeatureEvent) => {\n if (event.feature === this._feature) {\n this._ngZone.run(() => { this.close() })\n }\n }))\n\n listeners.push(this._data.addListener('setproperty', (event: google.maps.Data.SetPropertyEvent) => {\n if (event.feature === this._feature && !isFeatureSelected(this._feature)) {\n this._ngZone.run(() => { this.close() })\n }\n }))\n\n listeners.push(this._data.addListener('removeproperty', (event: google.maps.Data.RemovePropertyEvent) => {\n if (event.feature === this._feature && !isFeatureSelected(this._feature)) {\n this._ngZone.run(() => { this.close() })\n }\n }))\n\n listeners.push(this._map.addListener('click', (event: google.maps.MapMouseEvent | google.maps.IconMouseEvent) => {\n this._ngZone.run(() => { this.close() })\n }))\n\n listeners.push(this._data.addListener('click', (event: google.maps.Data.MouseEvent) => {\n this._ngZone.run(() => { this.close() })\n }))\n })\n\n this._cleanupFn = () => {\n ngUnsubscribe.next()\n ngUnsubscribe.complete()\n listeners.forEach(google.maps.event.removeListener)\n }\n }\n\n public close(): void {\n this._overlayView.setMap(null)\n }\n\n}\n","import { Injectable } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\n\nexport enum MapValueSource {\n Input = 'input',\n FeatureChange = 'featurechange'\n}\n\nexport type MapValue = object | undefined | null\n\nexport interface MapValueChange {\n value: MapValue\n source: MapValueSource\n}\n\n@Injectable()\nexport class MapValueManagerService {\n\n private readonly _valueChangedSubject = new Subject<MapValueChange>()\n\n private _value: MapValue\n\n public readonly valueChanged: Observable<MapValueChange>\n\n constructor() {\n this.valueChanged = this._valueChangedSubject.asObservable()\n }\n\n public setValue(value: MapValue, source: MapValueSource): boolean {\n if (value === this._value) {\n return false\n }\n\n if (value === null || value === undefined) {\n this._value = value\n const _change: MapValueChange = {\n source,\n value: this._value,\n }\n this._valueChangedSubject.next(_change)\n return true\n }\n\n if (JSON.stringify(value) === JSON.stringify(this._value)) {\n return true\n }\n\n // TODO: Validate object is valid geojson.\n this._value = value\n const change: MapValueChange = {\n source,\n value: this._value,\n }\n this._valueChangedSubject.next(change)\n return true\n }\n\n public get value(): MapValue {\n return this._value\n }\n\n}\n","import { Injectable, NgZone, OnDestroy, ViewContainerRef } from '@angular/core'\nimport { BehaviorSubject, from, Observable, Subject } from 'rxjs'\nimport { switchMap, takeUntil, tap } from 'rxjs/operators'\n\nimport { MenuComponent } from '@theseam/ui-common/menu'\nimport { isNullOrUndefined, notNullOrUndefined } from '@theseam/ui-common/utils'\n\nimport { GoogleMapsContextMenu } from './google-maps-contextmenu'\nimport {\n addInnerFeatureCutoutToExteriorFeature,\n createDataFeatureFromPolygon,\n createFeatureChangeObservable,\n getBoundsWithAllFeatures,\n getFeatureCenter,\n getFeaturesCount,\n getHoveredStyleOptionsDefinedByFeature,\n getPossibleExteriorFeature,\n getStyleOptionsDefinedByFeature,\n isFeatureSelected,\n polygonHasValidPathsLengths,\n removeAllFeatures,\n setFeatureSelected,\n stripAppFeaturePropertiesFromJson,\n} from './google-maps-feature-helpers'\nimport { MapValueManagerService, MapValueSource } from './map-value-manager.service'\n\ndeclare const ngDevMode: boolean | undefined\n\nconst DEFAULT_POLYGON_OPTIONS = (editingEnabled: boolean): google.maps.PolygonOptions => ({\n clickable: editingEnabled,\n draggable: editingEnabled,\n editable: editingEnabled,\n})\n\nconst DEFAULT_DRAWING_MANAGER_OPTIONS = (editingEnabled: boolean): google.maps.drawing.DrawingManagerOptions => ({\n drawingControl: editingEnabled,\n drawingControlOptions: {\n drawingModes: [\n google.maps.drawing.OverlayType.POLYGON,\n ],\n },\n polygonOptions: DEFAULT_POLYGON_OPTIONS(editingEnabled),\n drawingMode: null,\n})\n\nconst FEATURE_STYLE_OPTIONS_DEFAULT = (editingEnabled: boolean): google.maps.Data.StyleOptions => ({\n clickable: true,\n // clickable: editingEnabled,\n visible: true,\n // zIndex?: number;\n\n // cursor?: string;\n draggable: false,\n editable: false,\n fillColor: 'teal',\n fillOpacity: 0.3,\n strokeColor: 'blue',\n strokeOpacity: 1,\n strokeWeight: 2,\n})\n\nconst FEATURE_STYLE_OPTIONS_SELECTED = (editingEnabled: boolean): google.maps.Data.StyleOptions => ({\n ...FEATURE_STYLE_OPTIONS_DEFAULT(editingEnabled),\n draggable: editingEnabled,\n editable: editingEnabled,\n fillColor: 'green',\n fillOpacity: 0.7,\n strokeColor: 'limegreen',\n strokeOpacity: 1,\n strokeWeight: 2,\n})\n\nconst FEATURE_STYLE_OVERRIDE_OPTIONS_HOVERED = (editingEnabled: boolean): google.maps.Data.StyleOptions => ({\n strokeColor: 'black',\n strokeOpacity: 1,\n strokeWeight: 4,\n})\n\nconst SUPPORTED_PROPERTY_STYLE_OPTIONS: (keyof google.maps.Data.StyleOptions)[] = [\n 'fillColor',\n 'fillOpacity',\n 'strokeColor',\n 'strokeOpacity',\n 'strokeWeight',\n 'label',\n 'opacity',\n 'icon',\n 'clickable',\n 'visible',\n]\n\ntype WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] }\n\n@Injectable()\nexport class GoogleMapsService implements OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private readonly _mapReadySubject = new BehaviorSubject<boolean>(false)\n private readonly _editingEnabledSubject = new BehaviorSubject<boolean>(true)\n\n private _drawingManager?: google.maps.drawing.DrawingManager\n private _featureContextMenu: MenuComponent | null = null\n private _activeContextMenu: GoogleMapsContextMenu | null = null\n private _baseLatLng?: google.maps.LatLngLiteral\n private _padding?: number | google.maps.Padding\n\n private _allowDrawingHoleInPolygon = false\n\n // TODO: Move to a better place than the map wrapper service.\n private _fileInputHandler: ((file: File) => void) | undefined | null\n\n public googleMap?: google.maps.Map\n\n public readonly mapReady$: Observable<boolean>\n\n public get mapReady(): boolean { return this._mapReadySubject.value }\n\n public readonly editingEnabled$: Observable<boolean>\n\n constructor(\n private readonly _mapValueManager: MapValueManagerService,\n private readonly _ngZone: NgZone,\n private readonly _vcr: ViewContainerRef,\n ) {\n this.editingEnabled$ = this._editingEnabledSubject.asObservable()\n this.mapReady$ = this._mapReadySubject.asObservable()\n }\n\n ngOnDestroy(): void {\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n public setMap(map: google.maps.Map): void {\n this.googleMap = map\n this._mapReadySubject.next(true)\n this._initDrawingManager()\n this._initFeatureStyling()\n this._initFeatureChangeListeners()\n }\n\n public setBaseLatLng(lat: number, lng: number): void {\n this._baseLatLng = { lat, lng }\n }\n\n public setPadding(padding: number | google.maps.Padding | undefined): void {\n this._padding = padding\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public setFeatureContextMenu(menu: MenuComponent | null): void {\n this.closeContextMenu()\n this._featureContextMenu = menu\n }\n\n public setEditingEnabled(enabled: boolean): void {\n this._editingEnabledSubject.next(enabled)\n\n if (this.mapReady) {\n this._assertInitialized()\n this.googleMap.data.revertStyle()\n if (!enabled) {\n this.stopDrawing()\n const options = DEFAULT_DRAWING_MANAGER_OPTIONS(this.isEditingEnabled())\n this._drawingManager?.setOptions(options)\n this._drawingManager?.setMap(null)\n this.googleMap.data.forEach(f => {\n if (isFeatureSelected(f)) {\n setFeatureSelected(f, false)\n }\n })\n } else {\n const options = DEFAULT_DRAWING_MANAGER_OPTIONS(this.isEditingEnabled())\n this._drawingManager?.setOptions(options)\n this._drawingManager?.setMap(this.googleMap)\n }\n }\n }\n\n public isEditingEnabled(): boolean {\n return this._editingEnabledSubject.value\n }\n\n public getDiv(): HTMLDivElement {\n this._assertInitialized()\n return this.googleMap.getDiv() as HTMLDivElement\n }\n\n public fitBounds(bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral, padding?: number | google.maps.Padding): void {\n this._assertInitialized()\n this.googleMap.fitBounds(bounds, padding)\n }\n\n /**\n * Iterates the map's features and removes any that are selected.\n */\n public deleteSelection(): void {\n this._assertInitialized()\n const mapData = this.googleMap.data\n mapData.forEach(f => {\n if (isFeatureSelected(f)) {\n mapData.remove(f)\n }\n })\n }\n\n /**\n * Stops the current drawing.\n */\n public stopDrawing(): void {\n this._ngZone.runOutsideAngular(() => {\n if (isNullOrUndefined(this._drawingManager) || this._drawingManager.getDrawingMode() === null) {\n return\n }\n\n // Listening for the completion event of the overlay currently being drawn\n // and removing it. I haven't found a way to cancel the current drawing,\n // without this hack that assumes our listeners will not run into a race\n // condition.\n const listener = google.maps.event.addListener(\n this._drawingManager,\n 'overlaycomplete',\n (event: google.maps.drawing.OverlayCompleteEvent) => {\n event.overlay?.setMap(null)\n listener.remove()\n },\n )\n\n // To fake canceling the current drawing, without disabling the drawing\n // mode, the drawing mode is being unset then immediately set back. When\n // the mode is unset the 'overlaycomplete' event will fire, which will\n // give a reference to the current overlay to remove, then it is set back\n // to the mode the user was using. To the user is should just seem like\n // the current drawing was canceled and they can start drawing again.\n const mode = this._drawingManager.getDrawingMode()\n this._drawingManager.setDrawingMode(null)\n this._drawingManager.setDrawingMode(mode)\n\n // 'overlaycomplete' should fire immediately, unless an overlay hadn't\n // started drawing. This timeout will make sure the listener gets removed.\n setTimeout(() => {\n listener.remove()\n })\n })\n }\n\n private _initDrawingManager(): void {\n if (notNullOrUndefined(this._drawingManager)) {\n throw Error(`DrawingManager is already initialized.`)\n }\n\n this._assertInitialized()\n\n const options = DEFAULT_DRAWING_MANAGER_OPTIONS(this.isEditingEnabled())\n\n const drawingManager = new google.maps.drawing.DrawingManager(options)\n drawingManager.setMap(this.googleMap)\n\n this._drawingManager = drawingManager\n\n this._drawingManager.addListener('drawingmode_changed', (event: any) => {\n if (this._drawingManager?.getDrawingMode() !== null) {\n this._assertInitialized()\n this.googleMap.data.forEach(f => {\n if (isFeatureSelected(f)) {\n setFeatureSelected(f, false)\n }\n })\n }\n })\n }\n\n public addControl(element: HTMLElement, position: google.maps.ControlPosition): void {\n this._assertInitialized()\n this.googleMap.controls[position].push(element)\n }\n\n public async setData(data: any): Promise<void> {\n this._assertInitialized()\n removeAllFeatures(this.googleMap.data)\n this.googleMap.data.addGeoJson(data)\n this.googleMap.fitBounds(getBoundsWithAllFeatures(this.googleMap.data), this._padding)\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public reCenterOnFeatures(): void {\n this._assertInitialized()\n if (getFeaturesCount(this.googleMap.data) === 0) {\n if (!this._baseLatLng) {\n return\n }\n\n this.googleMap.panTo(this._baseLatLng)\n return\n }\n this.googleMap.fitBounds(getBoundsWithAllFeatures(this.googleMap.data), this._padding)\n\n // TODO: Fix to pan to center. Currently fitBounds results in the expected\n // result, but pantToBounds animates.\n // this.googleMap.panToBounds(getBoundsWithAllFeatures(this.googleMap.data))\n }\n\n public allowDrawingHoleInPolygon(allow: boolean): void {\n this._allowDrawingHoleInPolygon = allow\n }\n\n public setFileInputHandler(handler: ((file: File) => void) | undefined | null): void {\n this._fileInputHandler = handler\n }\n\n public getFileInputHandler(): ((file: File) => void) | undefined | null {\n return this._fileInputHandler\n }\n\n private _initFeatureStyling(): void {\n this._assertInitialized()\n\n // Disable any selection when clicking the map.\n //\n // TODO: There may be a better way to do this that would be more accurate or\n // additional events that should be listened to, such as the disabling\n // selection when the map looses focus.\n this.googleMap.addListener('click', (even: google.maps.MapMouseEvent | google.maps.IconMouseEvent) => {\n this._assertInitialized()\n this.googleMap.data.forEach(f => setFeatureSelected(f, false))\n })\n\n // Determine what the style of the features are.\n this.googleMap.data.setStyle(feature => {\n let opts = FEATURE_STYLE_OPTIONS_DEFAULT(this.isEditingEnabled())\n\n const options = getStyleOptionsDefinedByFeature(feature)\n this._mergeStyleOptions(opts, options ?? {})\n\n if (isFeatureSelected(feature)) {\n const hoverOptions = getHoveredStyleOptionsDefinedByFeature(feature)\n opts = FEATURE_STYLE_OPTIONS_SELECTED(this.isEditingEnabled())\n this._mergeStyleOptions(opts, hoverOptions ?? {})\n }\n\n return opts\n })\n\n // Select a feature when clicked.\n this.googleMap.data.addListener('click', (event: google.maps.Data.MouseEvent) => {\n this._assertInitialized()\n\n setFeatureSelected(event.feature, true)\n this.googleMap.data.forEach(f => {\n if (f !== event.feature && isFeatureSelected(f)) {\n setFeatureSelected(f, false)\n }\n })\n })\n\n // Set a style on hovered features that can be selected.\n this.googleMap.data.addListener('mouseover', (event: google.maps.Data.MouseEvent) => {\n this._assertInitialized()\n this.googleMap.data.revertStyle()\n\n if (!this.isDrawing() && !isFeatureSelected(event.feature)) {\n this.setFeatureHoveredStyleOverride(event.feature)\n }\n })\n\n // Remove any hover styles when mouse moves away.\n this.googleMap.data.addListener('mouseout', (event: google.maps.Data.MouseEvent) => {\n this._assertInitialized()\n this.googleMap.data.revertStyle()\n })\n }\n\n public setFeatureHoveredStyleOverride(feature: google.maps.Data.Feature) {\n this._assertInitialized()\n const overrideOpts = FEATURE_STYLE_OVERRIDE_OPTIONS_HOVERED(this.isEditingEnabled())\n const hoverOptions = getHoveredStyleOptionsDefinedByFeature(feature)\n this._mergeStyleOptions(overrideOpts, hoverOptions ?? {})\n this.googleMap.data.overrideStyle(feature, overrideOpts)\n }\n\n private _mergeStyleOptions(options: google.maps.Data.StyleOptions, propertiesStyleOptions: google.maps.Data.StyleOptions): void {\n if (Object.keys(propertiesStyleOptions).length === 0) {\n return\n }\n\n for (const opt of SUPPORTED_PROPERTY_STYLE_OPTIONS) {\n if (Object.prototype.hasOwnProperty.call(propertiesStyleOptions, opt)) {\n options[opt] = propertiesStyleOptions[opt] as any\n }\n }\n }\n\n private _initFeatureChangeListeners(): void {\n this._assertInitialized()\n\n createFeatureChangeObservable(this.googleMap.data, this._ngZone).pipe(\n switchMap(() => from(this.getGeoJson()).pipe(\n tap(geoJson => this._mapValueManager.setValue(geoJson, MapValueSource.FeatureChange)),\n )),\n takeUntil(this._ngUnsubscribe),\n ).subscribe()\n\n this.googleMap.data.addListener('contextmenu', (event: google.maps.Data.MouseEvent) => {\n if (!isFeatureSelected(event.feature)) {\n return\n }\n\n this._openContextMenuForFeature(event.feature, event.latLng ?? undefined)\n })\n\n if (notNullOrUndefined(this._drawingManager)) {\n google.maps.event.addListener(this._drawingManager, 'polygoncomplete', (polygon: google.maps.Polygon) => {\n // The DrawingManager doesn't seem to have a way to access the overlays,\n // so if the map is not set then it shouldn'y be considered a successful\n // completion. I am canceling the active drawing by disabling drawing\n // mode and setting the map null in the 'overlaycomplete' event, which\n // fires before the 'polygoncomplete' event.\n if (isNullOrUndefined(polygon.getMap())) {\n return\n }\n\n this._assertInitialized()\n\n // TODO: See if there is a way to prevent the polygon from completing\n // without enough points. This is very low priority, because starting\n // over after adding a single point isn't a major inconvenience.\n if (!polygonHasValidPathsLengths(polygon)) {\n // Remove the drawn polygon.\n polygon.setMap(null)\n // Stop drawing.\n this._drawingManager?.setDrawingMode(null)\n return\n }\n\n // Create a map feature of the drawn polygon.\n const feature = createDataFeatureFromPolygon(polygon)\n // Remove the drawn polygon.\n polygon.setMap(null)\n\n // Stop drawing.\n this._drawingManager?.setDrawingMode(null)\n\n // Check if the feature should be used as a cutout to an existing\n // feature or added as it's own feature.\n const exteriorPolygonFeature = this._allowDrawingHoleInPolygon\n ? getPossibleExteriorFeature(this.googleMap.data, feature)\n : undefined\n if (exteriorPolygonFeature) {\n addInnerFeatureCutoutToExteriorFeature(exteriorPolygonFeature, feature)\n setFeatureSelected(exteriorPolygonFeature, true)\n } else {\n this.googleMap.data.add(feature)\n setFeatureSelected(feature, true)\n }\n })\n }\n }\n\n public isDrawing(): boolean {\n if (isNullOrUndefined(this._drawingManager)) {\n return true\n }\n\n return this._drawingManager.getDrawingMode() !== null\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public hasSelectedFeature(): boolean {\n this._assertInitialized()\n let isSelected = false\n this.googleMap.data.forEach(f => {\n if (isFeatureSelected(f)) {\n isSelected = true\n }\n })\n return isSelected\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public getSelectedFeature(): google.maps.Data.Feature | null {\n this._assertInitialized()\n let feature: google.maps.Data.Feature | null = null\n this.googleMap.data.forEach(f => {\n if (isFeatureSelected(f)) {\n feature = f\n }\n })\n return feature\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public openContextMenu(): void {\n const feature = this.getSelectedFeature()\n if (feature) {\n this._openContextMenuForFeature(feature)\n }\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n public closeContextMenu(): void {\n if (this._activeContextMenu) {\n this._activeContextMenu.close()\n this._activeContextMenu = null\n }\n }\n\n // TODO: Refactor out of the service meant to just wrap the google maps api.\n private _openContextMenuForFeature(feature: google.maps.Data.Feature, position?: google.maps.LatLng) {\n this.closeContextMenu()\n\n this._assertInitialized()\n\n let _position = position\n if (!_position) {\n _position = getFeatureCenter(feature)\n }\n if (this._featureContextMenu) {\n this._activeContextMenu = new GoogleMapsContextMenu(\n this.googleMap,\n this._featureContextMenu,\n _position,\n this._vcr,\n this._ngZone,\n this.googleMap.data,\n feature,\n )\n }\n }\n\n public getGeoJson(removeAppProperties: boolean = true): Promise<object> {\n return new Promise((resolve, reject) => {\n this._assertInitialized()\n this.googleMap.data.toGeoJson(f => {\n if (removeAppProperties) {\n stripAppFeaturePropertiesFromJson(f)\n }\n resolve(f)\n })\n })\n }\n\n /** Asserts that the map has been initialized. */\n private _assertInitialized(): asserts this is WithRequired<GoogleMapsService, 'googleMap'> {\n if (!this.googleMap && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(\n 'Cannot access Google Map information before the API has been initialized. ' +\n 'Please wait for the API to load before trying to interact with it.',\n )\n }\n }\n\n}\n","import { ComponentFactoryResolver, ComponentRef, Injectable, Injector, StaticProvider } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\n\nimport { GoogleMapsService } from './google-maps.service'\nimport { MapControl, MapControlsService, MAP_CONTROL_DATA } from './map-controls-service'\n\nexport class MapControlRef {\n\n private readonly _destroyedSubject = new Subject<void>()\n\n private _componentRef: ComponentRef<any>\n private _addedAtPosition: google.maps.ControlPosition\n\n public destroyed: Observable<void>\n\n constructor(\n private readonly _googleMaps: GoogleMapsService,\n private readonly _componentFactoryResolver: ComponentFactoryResolver,\n private readonly _injector: Injector,\n private readonly _controlDef: MapControl\n ) {\n this.destroyed = this._destroyedSubject.asObservable()\n\n const component: any = this._controlDef.component\n const factory = this._componentFactoryResolver.resolveComponentFactory(component)\n\n const providers: StaticProvider[] = []\n if (this._controlDef.data) {\n providers.push({\n provide: MAP_CONTROL_DATA,\n useValue: this._controlDef.data\n })\n }\n const injector = Injector.create({\n providers,\n parent: this._injector,\n })\n\n this._componentRef = factory.create(injector)\n this._componentRef.changeDetectorRef.detectChanges()\n\n const position = this._controlDef.position ?? google.maps.ControlPosition.LEFT_BOTTOM\n\n this._googleMaps.addControl(\n this._componentRef.location.nativeElement,\n position\n )\n\n this._addedAtPosition = position\n }\n\n public destroy() {\n const googleMaps = this._googleMaps.googleMap\n if (googleMaps !== undefined) {\n let idx = -1\n googleMaps.controls[this._addedAtPosition].forEach((elem, index) => {\n if (elem === this._componentRef.location.nativeElement) {\n idx = index\n }\n })\n if (idx === -1) {\n throw Error(`Unable to destroy control. Control not found.`)\n }\n googleMaps.controls[this._addedAtPosition].removeAt(idx)\n }\n this._componentRef.destroy()\n\n this._destroyedSubject.next()\n this._destroyedSubject.complete()\n }\n\n}\n\n@Injectable()\nexport class GoogleMapsControlsService implements MapControlsService {\n\n constructor(\n private readonly _googleMaps: GoogleMapsService,\n private readonly _componentFactoryResolver: ComponentFactoryResolver,\n private readonly _injector: Injector,\n ) { }\n\n public add(control: MapControl): MapControlRef {\n return new MapControlRef(this._googleMaps, this._componentFactoryResolver, this._injector, control)\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n Optional,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\n\nimport { SeamIcon } from '@theseam/ui-common/icon'\n\nimport { GoogleMapsService } from '../google-maps.service'\nimport { MAP_CONTROL_DATA } from '../map-controls-service'\n\nexport interface GoogleMapsRecenterButtonControlData {\n label?: string | undefined | null\n icon?: SeamIcon | undefined | null\n}\n\n/**\n *\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seam-google-maps-recenter-button-control]',\n templateUrl: './google-maps-recenter-button-control.component.html',\n styleUrls: ['./google-maps-recenter-button-control.component.scss'],\n host: {\n '[attr.draggable]': 'false',\n '[attr.aria-label]': 'label',\n '[attr.title]': 'label',\n 'type': 'button',\n 'class': 'gmnoprint gm-control-active'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheSeamGoogleMapsRecenterButtonControlComponent implements OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private _listeners: (() => void)[] = []\n\n @Input() label: string | undefined | null\n\n @Input() icon: SeamIcon | undefined | null\n\n @HostListener('click', [ 'event' ])\n _onClick(event: MouseEvent) {\n this._googleMaps.reCenterOnFeatures()\n }\n\n constructor(\n private readonly _googleMaps: GoogleMapsService,\n @Optional() @Inject(MAP_CONTROL_DATA) _data?: GoogleMapsRecenterButtonControlData\n ) {\n if (_data) {\n if (Object.prototype.hasOwnProperty.call(_data, 'label')) {\n this.label = _data.label\n }\n if (Object.prototype.hasOwnProperty.call(_data, 'icon')) {\n this.icon = _data.icon\n }\n }\n }\n\n /** @ignore */\n ngOnDestroy() {\n this._listeners.forEach(l => l())\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n}\n","<seam-icon [icon]=\"icon\" iconType=\"image-fill\"></seam-icon>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\n\nimport { SeamIcon } from '@theseam/ui-common/icon'\nimport { readGeoFile } from '@theseam/ui-common/utils'\n\nimport { GoogleMapsService } from '../google-maps.service'\nimport { MAP_CONTROL_DATA } from '../map-controls-service'\nimport { MapValueManagerService, MapValueSource } from '../map-value-manager.service'\n\nexport interface GoogleMapsUploadButtonControlData {\n label?: string | undefined | null\n icon?: SeamIcon | undefined | null\n}\n\n/**\n *\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[seam-google-maps-upload-button-control]',\n templateUrl: './google-maps-upload-button-control.component.html',\n styleUrls: ['./google-maps-upload-button-control.component.scss'],\n host: {\n '[attr.draggable]': 'false',\n '[attr.aria-label]': 'label',\n '[attr.title]': 'label',\n 'type': 'button',\n 'class': 'gmnoprint gm-control-active'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheSeamGoogleMapsUploadButtonControlComponent implements OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private readonly _fileInputElement: HTMLInputElement\n\n private _listeners: (() => void)[] = []\n\n @Input() label: string | undefined | null\n\n @Input() icon: SeamIcon | undefined | null\n\n @HostListener('click', [ 'event' ])\n _onClick(event: MouseEvent) {\n this._fileInputElement.click()\n }\n\n constructor(\n private readonly _elementRef: ElementRef,\n private readonly _mapValueManager: MapValueManagerService,\n private readonly _renderer: Renderer2,\n private readonly _googleMaps: GoogleMapsService,\n @Optional() @Inject(MAP_CONTROL_DATA) _data?: GoogleMapsUploadButtonControlData\n ) {\n if (_data) {\n if (Object.prototype.hasOwnProperty.call(_data, 'label')) {\n this.label = _data.label\n }\n if (Object.prototype.hasOwnProperty.call(_data, 'icon')) {\n this.icon = _data.icon\n }\n }\n\n this._fileInputElement = this._createHiddenInput()\n this._renderer.appendChild(this._elementRef.nativeElement, this._fileInputElement)\n }\n\n /** @ignore */\n ngOnDestroy() {\n this._listeners.forEach(l => l())\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _getFile(throwIfInvalidFiles: boolean = true): File | null {\n const files = this._fileInputElement.files\n if (files === null || files.length === 0) {\n return null\n }\n\n if (throwIfInvalidFiles) {\n if (files.length > 1) {\n throw Error(`Only one file can be imported at a time.`)\n }\n }\n\n return files[0]\n }\n\n private async _importFile(file: File): Promise<void> {\n const json = await readGeoFile(file)\n this._mapValueManager.setValue(json, MapValueSource.Input)\n this._resetInput()\n }\n\n private _createHiddenInput(): HTMLInputElement {\n const fileInputElement = this._renderer.createElement('input')\n this._renderer.setAttribute(fileInputElement, 'type', 'file')\n this._renderer.setAttribute(fileInputElement, 'hidden', '')\n this._renderer.setAttribute(fileInputElement, 'accept', '.json,.geojson,.shp,.zip')\n\n this._listeners.push(this._renderer.listen(fileInputElement, 'change', (event: Event) => {\n const file = this._getFile()\n if (file === null) { return }\n const fileImportHandler = this._googleMaps.getFileInputHandler()\n if (fileImportHandler) {\n fileImportHandler(file)\n } else {\n this._importFile(file)\n }\n }))\n\n return fileInputElement\n }\n\n private _createTemporaryFormElement(): HTMLFormElement {\n return this._renderer.createElement('form')\n }\n\n /**\n * Reset input element, so that the same file can be added again.\n */\n private _resetInput(): void {\n const formElement = this._createTemporaryFormElement()\n this._renderer.appendChild(formElement, this._fileInputElement)\n formElement.reset()\n this._renderer.appendChild(this._elementRef.nativeElement, this._fileInputElement)\n }\n}\n","<seam-icon [icon]=\"icon\" iconType=\"image-fill\"></seam-icon>\n","import { Observable } from 'rxjs'\n\nexport abstract class TheSeamGoogleMapsApiLoader {\n\n abstract load(): Observable<void>\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { takeUntil, tap } from 'rxjs/operators'\n\nimport { readGeoFile } from '@theseam/ui-common/utils'\n\nimport { GoogleMapsService } from '../google-maps.service'\nimport { MapValueManagerService, MapValueSource } from '../map-value-manager.service'\n\n/**\n *\n */\n@Component({\n selector: 'seam-map-file-drop',\n templateUrl: './map-file-drop.component.html',\n styleUrls: ['./map-file-drop.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheSeamMapFileDropComponent implements OnInit, OnDestroy {\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n /**\n * Map element drag events added to.\n */\n private _mapDiv: HTMLDivElement | undefined\n\n private _listeners: (() => void)[] = []\n\n private _globalDragInProgress = false\n\n constructor(\n private readonly _elementRef: ElementRef,\n private readonly _ngZone: NgZone,\n private readonly _googleMaps: GoogleMapsService,\n private readonly _mapValueManager: MapValueManagerService,\n private readonly _renderer: Renderer2\n ) { }\n\n /** @ignore */\n ngOnInit() {\n this._googleMaps.mapReady$.pipe(\n tap(ready => {\n if (ready) {\n this._enableFileDrop()\n } else {\n this._disableFileDrop()\n }\n }),\n takeUntil(this._ngUnsubscribe)\n ).subscribe()\n }\n\n /** @ignore */\n ngOnDestroy() {\n this._disableFileDrop()\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _enableFileDrop(): void {\n const divElement = this._googleMaps.getDiv()\n if (this._mapDiv === divElement) {\n return\n }\n\n if (this._mapDiv !== undefined) {\n // Disable file drop on previous map div.\n this._disableFileDrop()\n }\n\n this._mapDiv = divElement\n this._ngZone.runOutsideAngular(() => {\n this._listeners.push(this._renderer.listen('document', 'dragstart', (event: Event) => {\n this._globalDragInProgress = true\n }))\n\n this._listeners.push(this._renderer.listen('document', 'dragend', (event: Event) => {\n this._globalDragInProgress = false\n }))\n\n this._listeners.push(this._renderer.listen(divElement, 'dragover', this._handleDragOverEvent))\n this._listeners.push(this._renderer.listen(this._elementRef.nativeElement, 'dragover', this._handleDragOverEvent))\n this._listeners.push(this._renderer.listen(this._elementRef.nativeElement, 'drop', this._handleDropEvent))\n this._listeners.push(this._renderer.listen(divElement, 'dragenter', this._handleDragEnterEvent))\n this._listeners.push(this._renderer.listen(this._elementRef.nativeElement, 'dragleave', this._handleDragLeaveEvent))\n })\n }\n\n private _disableFileDrop(): void {\n if (this._listeners.length > 0) {\n this._listeners.forEach(l => l())\n this._listeners = []\n }\n }\n\n private readonly _handleDragOverEvent = (event: any) => {\n if (!this._dropAllowed()) {\n return\n }\n\n if (!this._isSupportedDataTransferTypes(event.dataTransfer)) {\n return\n }\n\n event.preventDefault()\n event.dataTransfer.dropEffect = 'copy'\n }\n\n private readonly _handleDropEvent = (event: any) => {\n if (!this._dropAllowed()) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n this._renderer.setStyle(this._elementRef.nativeElement, 'display', 'none')\n\n // TODO: Show error if multiple files?\n if (!this._isSupportedDataTransfer(event.dataTransfer)) {\n return\n }\n\n const item = event.dataTransfer.items[0]\n const file = item.getAsFile()\n readGeoFile(file).then(json => {\n this._mapValueManager.setValue(json, MapValueSource.Input)\n })\n }\n\n private readonly _handleDragEnterEvent = (event: any) => {\n if (!this._dropAllowed()) {\n return\n }\n\n if (!this._isSupportedDataTransferTypes(event.dataTransfer)) {\n return\n }\n\n this._renderer.setStyle(this._elementRef.nativeElement, 'display', 'block')\n }\n\n private readonly _handleDragLeaveEvent = (event: any) => {\n if (!this._dropAllowed()) {\n return\n }\n\n this._renderer.setStyle(this._elementRef.nativeElement, 'display', 'none')\n }\n\n private _dropAllowed(): boolean {\n return !this._globalDragInProgress\n }\n\n private _isSupportedDataTransfer(dataTransfer: DataTransfer): boolean {\n return dataTransfer.files.length === 1 && dataTransfer.types[0] === 'Files'\n }\n\n private _isSupportedDataTransferTypes(dataTransfer: DataTransfer): boolean {\n return dataTransfer.types[0] === 'Files'\n }\n\n}\n","","import { OnInit } from '@angular/core'\nimport {\n ChangeDetectionStrategy,\n Component,\n Inject,\n Input,\n OnDestroy,\n} from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { takeUntil, tap } from 'rxjs/operators'\n\nimport { GoogleMapsControlsService, MapControlRef } from './google-maps-controls.service'\nimport { GoogleMapsService } from './google-maps.service'\nimport { MapControl, MAP_CONTROLS_SERVICE } from './map-controls-service'\n\n@Component({\n selector: 'seam-map-control',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheSeamMapsControlComponent implements OnInit, OnDestroy {\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private _controlRef?: MapControlRef\n\n @Input()\n set def(value: MapControl | null | undefined) {\n if (value !== this._def) {\n this._remove()\n this._def = value\n }\n }\n _def: MapControl | null | undefined\n\n constructor(\n private readonly _googleMaps: GoogleMapsService,\n @Inject(MAP_CONTROLS_SERVICE) private readonly _googleMapsControls: GoogleMapsControlsService,\n ) { }\n\n /** @ignore */\n ngOnInit(): void {\n this._googleMaps.mapReady$.pipe(\n tap(ready => {\n if (ready) {\n this._add()\n } else {\n this._remove()\n }\n }),\n takeUntil(this._ngUnsubscribe)\n ).subscribe()\n }\n\n /** @ignore */\n ngOnDestroy(): void {\n this._remove()\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _add(): void {\n if (this._controlRef) {\n return\n }\n\n if (this._def === null || this._def === undefined) {\n return\n }\n\n this._controlRef = this._googleMapsControls.add(this._def)\n }\n\n private _remove(): void {\n this._controlRef?.destroy()\n this._controlRef = undefined\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y'\nimport { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { fromEvent, Observable, of, Subject } from 'rxjs'\nimport { catchError, map, takeUntil, tap } from 'rxjs/operators'\n\nimport { faCrosshairs, faFileImport } from '@fortawesome/free-solid-svg-icons'\nimport { CanDisable, CanDisableCtor, InputBoolean, InputNumber, mixinDisabled } from '@theseam/ui-common/core'\nimport { MenuComponent } from '@theseam/ui-common/menu'\n\nimport { TheSeamGoogleMapsApiLoader } from '../google-maps-api-loader/google-maps-api-loader'\nimport { GoogleMapsControlsService } from '../google-maps-controls.service'\nimport {\n TheSeamGoogleMapsRecenterButtonControlComponent,\n} from '../google-maps-recenter-button-control/google-maps-recenter-button-control.component'\nimport {\n TheSeamGoogleMapsUploadButtonControlComponent,\n} from '../google-maps-upload-button-control/google-maps-upload-button-control.component'\nimport { GoogleMapsService } from '../google-maps.service'\nimport { MapControl, MAP_CONTROLS_SERVICE } from '../map-controls-service'\nimport { MapValue, MapValueManagerService, MapValueSource } from '../map-value-manager.service'\n\ninterface TheSeamMapContextMenuItem {\n label: string\n action: (item: TheSeamMapContextMenuItem) => void\n}\n\nclass TheSeamGoogleMapsComponentBase {\n\n constructor(public _elementRef: ElementRef) {}\n\n}\n\nconst _TheSeamGoogleMapsMixinBase: CanDisableCtor &\n typeof TheSeamGoogleMapsComponentBase =\n mixinDisabled(TheSeamGoogleMapsComponentBase)\n\n/**\n * A wrapper for googlemap.\n */\n@Component({\n selector: 'seam-google-maps',\n templateUrl: './google-maps.component.html',\n styleUrls: ['./google-maps.component.scss'],\n inputs: [\n 'disabled',\n ],\n providers: [\n MapValueManagerService,\n GoogleMapsService,\n { provide: MAP_CONTROLS_SERVICE, useClass: GoogleMapsControlsService },\n {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line no-use-before-define\n useExisting: forwardRef(() => TheSeamGoogleMapsComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'seamGoogleMaps',\n})\nexport class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase\n implements OnInit, OnDestroy, OnChanges, CanDisable, ControlValueAccessor {\n\n static ngAcceptInputType_disabled: BooleanInput\n static ngAcceptInputType_zoom: NumberInput\n static ngAcceptInputType_longitude: NumberInput\n static ngAcceptInputType_latitude: NumberInput\n static ngAcceptInputType_fileDropEnabled: BooleanInput\n static ngAcceptInputType_fileUploadControlEnabled: BooleanInput\n static ngAcceptInputType_fullscreenControlEnabled: BooleanInput\n static ngAcceptInputType_reCenterControlEnabled: BooleanInput\n static ngAcceptInputType_mapTypeControlEnabled: BooleanInput\n static ngAcceptInputType_streetViewControlEnabled: BooleanInput\n static ngAcceptInputType_allowDrawingHoleInPolygon: BooleanInput\n static ngAcceptInputType_editingEnabled: BooleanInput\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n readonly _gmApiLoaded: Observable<boolean>\n\n readonly _fileUploadControlDef: MapControl = {\n component: TheSeamGoogleMapsUploadButtonControlComponent,\n data: { label: 'Import Geo File', icon: faFileImport },\n position: 6 /* google.maps.ControlPosition.LEFT_BOTTOM */,\n }\n\n readonly _reCenterControlDef: MapControl = {\n component: TheSeamGoogleMapsRecenterButtonControlComponent,\n data: { label: 'Center on Field', icon: faCrosshairs },\n position: 9 /* google.maps.ControlPosition.RIGHT_BOTTOM */,\n }\n\n private _focusOrigin: FocusOrigin = null\n\n @Input()\n set value(value: MapValue) {\n this._mapValueManager.setValue(value, MapValueSource.Input)\n }\n get value(): MapValue {\n return this._mapValueManager.value\n }\n\n @Input()\n set tabIndex(value: number) { this._tabIndex = coerceNumberProperty(value) }\n get tabIndex(): number { return this._tabIndex }\n /**\n * Set the tab index to `-1` to allow the root element of the\n * component to receive `focus` event from javascript, but not get focused by\n * keyboard navigation.\n */\n private _tabIndex = -1\n\n @Input() @InputBoolean() fileDropEnabled = true\n\n @Input() @InputBoolean() fileUploadControlEnabled = false\n @Input() @InputBoolean() fullscreenControlEnabled = true\n @Input() @InputBoolean() reCenterControlEnabled = true\n @Input() @InputBoolean() mapTypeControlEnabled = true\n @Input() @InputBoolean() streetViewControlEnabled = false\n\n @Input() @InputBoolean() allowDrawingHoleInPolygon = false\n\n @Input() @InputBoolean() editingEnabled = true\n\n @Input()\n set fileImportHandler(value: ((file: File) => void) | undefined | null) {\n this._googleMaps.setFileInputHandler(value)\n }\n\n @HostBinding('attr.disabled')\n get _attrDisabled() { return this.disabled || null }\n\n @HostBinding('attr.tabindex')\n get _attrTabIndex() { return this.disabled ? -1 : (this.tabIndex || 0) }\n\n onChange: any\n onTouched: any\n\n @Input() @InputNumber() zoom = 14\n @Input() @InputNumber() longitude = -98.570209\n @Input() @InputNumber() latitude = 37.633814\n\n @Input() padding: number | google.maps.Padding | undefined = 0\n\n @Output() mapReady = new EventEmitter<google.maps.Map | undefined>()\n\n @ViewChild('featureContextMenu', { static: true, read: MenuComponent }) public featureContextMenu!: MenuComponent\n\n _options = {\n mapTypeControl: true,\n mapTypeId: 'hybrid',\n streetViewControl: false,\n fullscreenControl: this.fullscreenControlEnabled,\n }\n\n readonly _contextMenuItems$: Observable<TheSeamMapContextMenuItem[]>\n\n private idleListener: google.maps.MapsEventListener | undefined\n\n constructor(\n readonly elementRef: ElementRef,\n private readonly _focusMonitor: FocusMonitor,\n private readonly _googleMaps: GoogleMapsService,\n private readonly _mapValueManager: MapValueManagerService,\n private readonly _googleMapsApiLoader: TheSeamGoogleMapsApiLoader,\n ) {\n super(elementRef)\n\n this._focusMonitor.monitor(this._elementRef, true).pipe(\n tap(origin => { this._focusOrigin = origin }),\n takeUntil(this._ngUnsubscribe),\n ).subscribe()\n\n this._mapValueManager.valueChanged.pipe(\n tap(change => {\n if (this.onChange) { this.onChange(change.value) }\n if (this.onTouched) { this.onTouched() }\n }),\n tap(changed => {\n if (this._googleMaps.mapReady && changed.source !== MapValueSource.FeatureChange) {\n this._googleMaps.setData(changed.value)\n }\n }),\n takeUntil(this._ngUnsubscribe),\n ).subscribe()\n\n this._contextMenuItems$ = this._googleMaps.editingEnabled$.pipe(\n map(enabled => {\n const items: TheSeamMapContextMenuItem[] = []\n if (enabled) {\n items.push({ label: 'Delete', action: () => this._onClickDeleteFeature() })\n }\n return items\n }),\n tap(items => {\n if (items.length === 0) {\n this._googleMaps.setFeatureContextMenu(null)\n } else {\n this._googleMaps.setFeatureContextMenu(this.featureContextMenu)\n }\n })\n )\n\n this._googleMaps.setBaseLatLng(this.latitude, this.longitude)\n\n this._googleMaps.setPadding(this.padding)\n\n this._gmApiLoaded = this._googleMapsApiLoader.load().pipe(\n map(() => true),\n catchError(() => of(false)),\n )\n }\n\n ngOnInit() {\n fromEvent<KeyboardEvent>(window, 'keydown').pipe(\n tap((event: KeyboardEvent) => {\n switch (event.code) {\n case 'Delete':\n if (this._googleMaps.isEditingEnabled()) {\n this._googleMaps.deleteSelection()\n event.preventDefault()\n event.stopPropagation()\n }\n break\n case 'Escape': this._googleMaps.stopDrawing(); event.preventDefault(); event.stopPropagation(); break\n case 'ContextMenu': this._googleMaps.openContextMenu(); event.preventDefault(); event.stopPropagation(); break\n }\n }),\n takeUntil(this._ngUnsubscribe),\n ).subscribe()\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef)\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n let updateBase = false\n if (Object.prototype.hasOwnProperty.call(changes, 'latitude')) {\n this.latitude = changes.latitude.currentValue\n updateBase = true\n }\n if (Object.prototype.hasOwnProperty.call(changes, 'longitude')) {\n this.longitude = changes.longitude.currentValue\n updateBase = true\n }\n if (updateBase) {\n this._googleMaps.setBaseLatLng(this.latitude, this.longitude)\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'allowDrawingHoleInPolygon')) {\n this._googleMaps.allowDrawingHoleInPolygon(this.allowDrawingHoleInPolygon)\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'fullscreenControlEnabled')) {\n const fullscreenControl = coerceBooleanProperty(changes.fullscreenControlEnabled.currentValue)\n if (fullscreenControl !== this._options.fullscreenControl) {\n this._options = {\n ...this._options,\n fullscreenControl,\n }\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'editingEnabled')) {\n this._googleMaps.setEditingEnabled(this.editingEnabled)\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'padding')) {\n this._googleMaps.setPadding(this.padding)\n }\n }\n\n writeValue(value: MapValue): void {\n this.value = value\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled\n }\n\n public fitBounds(bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral, padding?: number | google.maps.Padding): void {\n this._googleMaps.fitBounds(bounds, padding)\n }\n\n public getGeoJson(): Promise<object> {\n return this._googleMaps.getGeoJson()\n }\n\n public hasFocus(): boolean {\n return this._focusOrigin !== null && this._focusOrigin !== undefined\n }\n\n /** Focuses the button. */\n public focus(): void {\n this._getHostElement().focus()\n }\n\n private _getHostElement() {\n return this._elementRef.nativeElement\n }\n\n _onMapReady(theMap: google.maps.Map) {\n this._googleMaps.setMap(theMap)\n this._googleMaps.setData(this._mapValueManager.value)\n\n // NOTE: The input zoom level was getting reset after this function ran,\n // so putting in this idle listener to wait until the map is fully rendered\n // to set the zoom.\n // Calling reCenterOnFeatures() after setZoom() ensures that maps with pre-drawn shapes\n // will display correctly\n this.idleListener = this._googleMaps.googleMap?.addListener('idle', () => {\n this._googleMaps.googleMap?.setZoom(this.zoom)\n this._googleMaps.reCenterOnFeatures()\n this.mapReady.emit(this._googleMaps.googleMap)\n\n this.idleListener?.remove()\n })\n\n }\n\n _onClickDeleteFeature() {\n this._googleMaps.deleteSelection()\n }\n\n}\n","<ng-container *ngIf=\"_gmApiLoaded | async\">\n <google-map\n height=\"100%\"\n width=\"100%\"\n [center]=\"{ lat: latitude, lng: longitude }\"\n [zoom]=\"zoom\"\n [options]=\"_options\"\n (mapInitialized)=\"_onMapReady($any($event))\"\n >\n </google-map>\n</ng-container>\n<seam-menu #featureContextMenu>\n <button seamMenuItem *ngFor=\"let item of _contextMenuItems$ | async\" (click)=\"item.action(item)\">{{ item.label }}</button>\n</seam-menu>\n<seam-map-file-drop *ngIf=\"fileDropEnabled\"></seam-map-file-drop>\n\n<seam-map-control *ngIf=\"fileUploadControlEnabled\" [def]=\"_fileUploadControlDef\"></seam-map-control>\n<seam-map-control *ngIf=\"reCenterControlEnabled\" [def]=\"_reCenterControlDef\"></seam-map-control>\n","import { Directive, ElementRef, HostBinding, Input, NgZone, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core'\nimport { interval, Observable, Subject, Subscriber } from 'rxjs'\nimport { filter, mapTo, startWith, switchMap, take, takeUntil } from 'rxjs/operators'\n\ndeclare const ngDevMode: boolean | undefined\ntype WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] }\n\nexport const SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS: google.maps.places.AutocompleteOptions = {\n componentRestrictions: { country: 'US' }\n}\n\n@Directive({\n selector: 'input[seamGoogleMapsPlacesAutocomplete]',\n exportAs: 'seamGoogleMapsPlacesAutocomplete'\n})\nexport class TheSeamGoogleMapsPlacesAutocompleteDirective implements OnInit, OnDestroy, OnChanges {\n private readonly _autoCompleteReadySubject = new Subject<void>()\n private readonly _ngUnsubscribe = new Subject<void>()\n\n private _placeChangedPending: { observable: Observable<any>, subscriber: Subscriber<any> }[] = []\n private _listeners: google.maps.MapsEventListener[] = []\n\n public autoComplete?: google.maps.places.Autocomplete\n\n @Input()\n set options(value: google.maps.places.AutocompleteOptions | undefined | null) {\n this._options = value || SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS\n }\n private _options: google.maps.places.AutocompleteOptions = SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS\n\n /**\n * This event is fired when a PlaceResult is made available for a Place the\n * user has selected. If the user enters the name of a Place that was not\n * suggested by the control and presses the Enter key, or if a Place Details\n * request fails, the PlaceResult contains the user input in the name\n * property, with no other properties defined.\n *\n * See: https://developers.google.com/maps/documentation/javascript/reference/places-widget#Autocomplete.place_changed\n */\n @Output() readonly placeChanged: Observable<any>\n\n @HostBinding('attr.type') _attrType = 'text'\n\n constructor(\n private readonly _elementRef: ElementRef<HTMLInputElement>,\n private readonly _ngZone: NgZone,\n ) {\n this.placeChanged = this._autoCompleteReadySubject.pipe(\n startWith(undefined),\n switchMap(() => this._createPlaceChangedObservable<any>())\n )\n }\n\n ngOnInit(): void {\n this._ngZone.runOutsideAngular(() => {\n this._untilGoogleMapsApiLoaded().pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\n this.autoComplete = new google.maps.places.Autocomplete(this.getHostElement(), this._options)\n\n this._placeChangedPending.forEach(pending => pending.observable.subscribe(pending.subscriber))\n\n this._autoCompleteReadySubject.next(undefined)\n })\n })\n }\n\n ngOnDestroy(): void {\n this._listeners.forEach(l => l.remove())\n this._listeners = []\n\n this._ngUnsubscribe.next(undefined)\n this._ngUnsubscribe.complete()\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.autoComplete && changes['options']) {\n this.autoComplete.setOptions(this._options)\n }\n }\n\n private _untilGoogleMapsApiLoaded(): Observable<void> {\n return interval(500).pipe(\n filter(() => !!(window.google && window.google.maps && window.google.maps.version)),\n take(1),\n mapTo(undefined),\n )\n }\n\n /**\n * Returns the bounds to which predictions are biased.\n */\n public getBounds(): google.maps.LatLngBounds | undefined {\n this._assertInitialized()\n return this.autoComplete.getBounds()\n }\n\n /**\n * Returns the fields to be included for the Place in the details response\n * when the details are successfully retrieved. For a list of fields see\n * [PlaceResult](https://developers.google.com/maps/documentation/javascript/reference/places-service#PlaceResult).\n */\n public getFields(): string[] | undefined {\n this._assertInitialized()\n return (this.autoComplete as any).getFields()\n }\n\n /**\n * Returns the details of the Place selected by user if the details were\n * successfully retrieved. Otherwise returns a stub Place object, with the\n * name property set to the current value of the input field.\n */\n public getPlace(): google.maps.places.PlaceResult {\n this._assertInitialized()\n return this.autoComplete.getPlace()\n }\n\n /**\n * Sets the preferred area within which to return Place results. Results are\n * biased towards, but not restricted to, this area.\n */\n public setBounds(bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setBounds(bounds!)\n }\n\n /**\n * Sets the component restrictions. Component restrictions are used to\n * restrict predictions to only those within the parent component. For\n * example, the country.\n */\n public setComponentRestrictions(restrictions?: google.maps.places.ComponentRestrictions): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setComponentRestrictions(restrictions!)\n }\n\n /**\n * Sets the fields to be included for the Place in the details response when\n * the details are successfully retrieved. For a list of fields see\n * [PlaceResult](https://developers.google.com/maps/documentation/javascript/reference/places-service#PlaceResult).\n */\n public setFields(fields?: string[]): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setFields(fields!)\n }\n\n /** */\n public setOptions(options?: google.maps.places.AutocompleteOptions): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setOptions(options!)\n }\n\n /**\n * Sets the types of predictions to be returned. For supported types, see the\n * [developer's guide](https://developers.google.com/maps/documentation/javascript/places-autocomplete#constrain-place-types).\n * If no types are specified, all types will be returned.\n */\n public setTypes(types?: string[]): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setTypes(types!)\n }\n\n /** Focuses the input. */\n public focus(): void {\n this._elementRef.nativeElement.focus()\n }\n\n /** Unfocuses the input. */\n public blur(): void {\n this._elementRef.nativeElement.blur()\n }\n\n public getHostElement(): HTMLInputElement {\n return this._elementRef.nativeElement\n }\n\n private _createPlaceChangedObservable<T>(): Observable<T> {\n const observable = new Observable<T>(subscriber => {\n if (!this.autoComplete) {\n this._placeChangedPending.push({ observable, subscriber })\n return undefined\n }\n const listener = this.autoComplete.addListener('place_changed', (event: T) => {\n this._ngZone.run(() => subscriber.next(event))\n })\n this._listeners.push(listener)\n\n return () => listener.remove()\n })\n return observable\n }\n\n /** Asserts that the map has been initialized. */\n private _assertInitialized(): asserts this is WithRequired<TheSeamGoogleMapsPlacesAutocompleteDirective, 'autoComplete'> {\n if (!this.autoComplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(\n 'Cannot access Google Map Places information before the API has been initialized. ' +\n 'Please wait for the API to load before trying to interact with it.',\n )\n }\n }\n}\n","import { BooleanInput, coerceNumberProperty } from '@angular/cdk/coercion'\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core'\nimport { interval, Observable, of, Subject, Subscriber } from 'rxjs'\nimport { filter, mapTo, startWith, switchMap, take, takeUntil } from 'rxjs/operators'\n\nimport { faSearchLocation } from '@fortawesome/free-solid-svg-icons'\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { InputDirective } from '@theseam/ui-common/form-field'\nimport { SeamIcon } from '@theseam/ui-common/icon'\n\nimport { SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS, TheSeamGoogleMapsPlacesAutocompleteDirective } from './google-maps-places-autocomplete.directive'\n\ndeclare const ngDevMode: boolean | undefined\ntype WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] }\n\n/**\n *\n */\n@Component({\n selector: 'seam-google-maps-places-autocomplete',\n templateUrl: './google-maps-places-autocomplete.component.html',\n styleUrls: ['./google-maps-places-autocomplete.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'seamGoogleMapsPlacesAutoComplete'\n})\nexport class TheSeamGoogleMapsPlacesAutoCompleteComponent implements OnDestroy {\n static ngAcceptInputType_disabled: BooleanInput\n\n private readonly _ngUnsubscribe = new Subject<void>()\n private readonly _autoCompleteReadySubject = new Subject()\n\n private _placeChangedPending: { observable: Observable<any>, subscriber: Subscriber<any> }[] = []\n\n public autoComplete?: google.maps.places.Autocomplete\n\n @Input() label: string | undefined | null = 'Search by address, place or name'\n\n @Input() icon: SeamIcon | undefined | null = faSearchLocation\n\n @Input() @InputBoolean() disabled: BooleanInput = false\n\n @Input() placeholder: string | undefined | null = 'Enter address, place or name'\n\n @Input() autocorrect: 'off' | 'on' | undefined | null = 'off'\n\n @Input() autocapitalize: 'off' | 'on' | undefined | null = 'off'\n\n /**\n * Set the tab index to `-1` to allow the root element of the\n * component to receive `focus` event from javascript, but not get focused by\n * keyboard navigation.\n */\n @Input()\n set tabIndex(value: number) { this._tabIndex = coerceNumberProperty(value) }\n get tabIndex(): number { return this._tabIndex }\n private _tabIndex = -1\n\n @Input()\n set options(value: google.maps.places.AutocompleteOptions | undefined | null) {\n this._options = value || SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS\n }\n _options: google.maps.places.AutocompleteOptions = SEAM_GOOGLE_PLACES_AUTOCOMPLETE_DEFAULT_OPTIONS\n\n /**\n * This event is fired when a PlaceResult is made available for a Place the\n * user has selected. If the user enters the name of a Place that was not\n * suggested by the control and presses the Enter key, or if a Place Details\n * request fails, the PlaceResult contains the user input in the name\n * property, with no other properties defined.\n *\n * See: https://developers.google.com/maps/documentation/javascript/reference/places-widget#Autocomplete.place_changed\n */\n @Output() readonly placeChanged: Observable<void>\n\n @ViewChild('inp', { read: InputDirective, static: true }) _inputDirective!: InputDirective\n\n @ViewChild(TheSeamGoogleMapsPlacesAutocompleteDirective, { static: true })\n set __autocompleteDirective(value: TheSeamGoogleMapsPlacesAutocompleteDirective) {\n this._autoCompleteDirective = value\n this._untilAutoCompleteReady().pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\n this.autoComplete = this._autoCompleteDirective.autoComplete\n this._placeChangedPending.forEach(pending => pending.observable.subscribe(pending.subscriber))\n this._placeChangedPending = []\n })\n }\n _autoCompleteDirective!: TheSeamGoogleMapsPlacesAutocompleteDirective\n\n @HostBinding('attr.tabindex')\n get _attrTabIndex() { return this.disabled ? -1 : (this.tabIndex || 0) }\n\n @HostListener('click', [ 'event' ])\n _onClick(event: MouseEvent) {\n this._inputDirective.focus()\n }\n\n @HostListener('focus', [ '$event' ])\n _onFocus() {\n this._inputDirective?.focus()\n }\n\n constructor(\n private readonly _elementRef: ElementRef,\n ) {\n this.placeChanged = this._autoCompleteReadySubject.pipe(\n startWith(undefined),\n switchMap(() => this._createPlaceChangedObservable<any>())\n )\n }\n\n /** @ignore */\n ngOnDestroy() {\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n private _untilAutoCompleteReady(): Observable<void> {\n return interval(500).pipe(\n filter(() => !!this._autoCompleteDirective.autoComplete),\n take(1),\n mapTo(undefined),\n )\n }\n\n /**\n * Returns the bounds to which predictions are biased.\n */\n public getBounds(): google.maps.LatLngBounds | undefined {\n this._assertInitialized()\n return this.autoComplete.getBounds()\n }\n\n /**\n * Returns the fields to be included for the Place in the details response\n * when the details are successfully retrieved. For a list of fields see\n * [PlaceResult](https://developers.google.com/maps/documentation/javascript/reference/places-service#PlaceResult).\n */\n public getFields(): string[] | undefined {\n this._assertInitialized()\n return (this.autoComplete as any).getFields()\n }\n\n /**\n * Returns the details of the Place selected by user if the details were\n * successfully retrieved. Otherwise returns a stub Place object, with the\n * name property set to the current value of the input field.\n */\n public getPlace(): google.maps.places.PlaceResult {\n this._assertInitialized()\n return this.autoComplete.getPlace()\n }\n\n /**\n * Sets the preferred area within which to return Place results. Results are\n * biased towards, but not restricted to, this area.\n */\n public setBounds(bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setBounds(bounds!)\n }\n\n /**\n * Sets the component restrictions. Component restrictions are used to\n * restrict predictions to only those within the parent component. For\n * example, the country.\n */\n public setComponentRestrictions(restrictions?: google.maps.places.ComponentRestrictions): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setComponentRestrictions(restrictions!)\n }\n\n /**\n * Sets the fields to be included for the Place in the details response when\n * the details are successfully retrieved. For a list of fields see\n * [PlaceResult](https://developers.google.com/maps/documentation/javascript/reference/places-service#PlaceResult).\n */\n public setFields(fields?: string[]): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setFields(fields!)\n }\n\n /** */\n public setOptions(options?: google.maps.places.AutocompleteOptions): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setOptions(options!)\n }\n\n /**\n * Sets the types of predictions to be returned. For supported types, see the\n * [developer's guide](https://developers.google.com/maps/documentation/javascript/places-autocomplete#constrain-place-types).\n * If no types are specified, all types will be returned.\n */\n public setTypes(types?: string[]): void {\n this._assertInitialized()\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.autoComplete.setTypes(types!)\n }\n\n /** Focuses the input. */\n public focus(): void {\n this._elementRef.nativeElement.focus()\n }\n\n /** Unfocuses the input. */\n public blur(): void {\n this._elementRef.nativeElement.blur()\n }\n\n public getHostElement(): HTMLInputElement {\n return this._elementRef.nativeElement\n }\n\n private _createPlaceChangedObservable<T>(): Observable<T> {\n const observable = new Observable<T>(subscriber => {\n if (!this.autoComplete) {\n this._placeChangedPending.push({ observable, subscriber })\n return undefined\n }\n\n const sub = this._autoCompleteDirective.placeChanged.subscribe(subscriber)\n\n return () => sub.unsubscribe()\n })\n return observable\n }\n\n /** Asserts that the map has been initialized. */\n private _assertInitialized(): asserts this is WithRequired<TheSeamGoogleMapsPlacesAutoCompleteComponent, 'autoComplete'> {\n if (!this.autoComplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(\n 'Cannot access Google Map Places information before the API has been initialized. ' +\n 'Please wait for the API to load before trying to interact with it.',\n )\n }\n }\n\n}\n","<div *ngIf=\"icon\" class=\"search-container--icon-wrapper\">\r\n <seam-icon [icon]=\"icon\" class=\"text-muted\" size=\"lg\"></seam-icon>\r\n</div>\r\n<label *ngIf=\"label || placeholder\" [attr.for]=\"inp.id\" class=\"sr-only\">{{ label || placeholder }}</label>\r\n<input #inp=\"seamInput\"\r\n seamInput\r\n seamGoogleMapsPlacesAutocomplete\r\n [disabled]=\"disabled\"\r\n [attr.placeholder]=\"placeholder\"\r\n [attr.autocorrect]=\"autocorrect\"\r\n [attr.autocapitalize]=\"autocapitalize\"\r\n [options]=\"_options\"\r\n/>\r\n","import { ObserversModule } from '@angular/cdk/observers'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { GoogleMapsModule } from '@angular/google-maps'\nimport { TheSeamFormFieldModule } from '@theseam/ui-common/form-field'\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamMenuModule } from '@theseam/ui-common/menu'\nimport { TheSeamSharedModule } from '@theseam/ui-common/shared'\n\nimport { TheSeamGoogleMapsPlacesAutoCompleteComponent } from './google-maps-places-autocomplete/google-maps-places-autocomplete.component'\nimport { TheSeamGoogleMapsPlacesAutocompleteDirective } from './google-maps-places-autocomplete/google-maps-places-autocomplete.directive'\nimport { TheSeamGoogleMapsRecenterButtonControlComponent } from './google-maps-recenter-button-control/google-maps-recenter-button-control.component'\nimport { TheSeamGoogleMapsUploadButtonControlComponent } from './google-maps-upload-button-control/google-maps-upload-button-control.component'\nimport { TheSeamGoogleMapsComponent } from './google-maps/google-maps.component'\nimport { TheSeamMapsControlComponent } from './map-control.component'\nimport { TheSeamMapFileDropComponent } from './map-file-drop/map-file-drop.component'\n\n@NgModule({\n declarations: [\n TheSeamGoogleMapsComponent,\n TheSeamMapFileDropComponent,\n TheSeamGoogleMapsUploadButtonControlComponent,\n TheSeamGoogleMapsRecenterButtonControlComponent,\n TheSeamMapsControlComponent,\n TheSeamGoogleMapsPlacesAutocompleteDirective,\n TheSeamGoogleMapsPlacesAutoCompleteComponent,\n ],\n imports: [\n CommonModule,\n ObserversModule,\n TheSeamSharedModule,\n TheSeamMenuModule,\n TheSeamIconModule,\n TheSeamFormFieldModule,\n GoogleMapsModule,\n ],\n exports: [\n TheSeamGoogleMapsComponent,\n TheSeamGoogleMapsPlacesAutocompleteDirective,\n TheSeamGoogleMapsPlacesAutoCompleteComponent,\n TheSeamMapsControlComponent,\n ]\n})\nexport class TheSeamGoogleMapsModule { }\n","import { Inject, Injectable, InjectionToken, LOCALE_ID, Optional } from '@angular/core'\nimport { from, Observable, of } from 'rxjs'\n\nimport { TheSeamGoogleMapsApiLoader } from './google-maps-api-loader'\n\ninterface GoogleMapsWindow extends Window {\n gm_authFailure?: () => void\n google?: typeof google\n}\n\ndeclare const window: GoogleMapsWindow\n\n/**\n * Token for the config of the LazyMapsAPILoader. Please provide an object of\n * type {@link TheSeamLazyMapsApiLoader}.\n */\nexport const THESEAM_LAZY_MAPS_API_CONFIG = new InjectionToken<TheSeamLazyMapsApiLoaderConfig>('THESEAM_LAZY_MAPS_API_CONFIG')\n\n/**\n * Configuration for the {@link TheSeamLazyMapsApiLoader}.\n */\nexport interface TheSeamLazyMapsApiLoaderConfig {\n /**\n * The Google Maps API Key (see:\n * https://developers.google.com/maps/documentation/javascript/get-api-key)\n */\n apiKey?: string\n\n /**\n * The Google Maps client ID (for premium plans). When you have a Google Maps\n * APIs Premium Plan license, you must authenticate your application with\n * either an API key or a client ID. The Google Maps API will fail to load if\n * both a client ID and an API key are included.\n */\n clientId?: string\n\n /**\n * The Google Maps channel name (for premium plans). A channel parameter is an\n * optional parameter that allows you to track usage under your client ID by\n * assigning a distinct channel to each of your applications.\n */\n channel?: string\n\n /**\n * Google Maps API version.\n */\n apiVersion?: string\n\n /**\n * Url used for the `<script>` tag.\n */\n url?: string\n\n /**\n * Defines which Google Maps libraries should get loaded.\n */\n libraries?: string[]\n\n /**\n * The default bias for the map behavior is US. If you wish to alter your\n * application to serve different map tiles or bias the application, you can\n * overwrite the default behavior (US) by defining a `region`. See\n * https://developers.google.com/maps/documentation/javascript/basics#Region\n */\n region?: string\n\n /**\n * The Google Maps API uses the browser's preferred language when displaying\n * textual information. If you wish to overwrite this behavior and force the\n * API to use a given language, you can use this setting. See\n * https://developers.google.com/maps/documentation/javascript/basics#Language\n */\n language?: string\n\n loading?: string\n}\n\n@Injectable()\nexport class TheSeamLazyMapsApiLoader extends TheSeamGoogleMapsApiLoader {\n protected _scriptLoadingPromise?: Promise<void>\n protected readonly _config: TheSeamLazyMapsApiLoaderConfig\n protected readonly _SCRIPT_ID: string = 'seamGoogleMapsApiScript'\n protected readonly callbackName: string = `__seamLazyGoogleMapsApiLoader`\n\n constructor(\n @Inject(LOCALE_ID) private readonly _localeId: string,\n @Optional() @Inject(THESEAM_LAZY_MAPS_API_CONFIG) readonly config?: TheSeamLazyMapsApiLoaderConfig,\n ) {\n super()\n this._config = config || {}\n }\n\n public load(): Observable<void> {\n if (window.google && window.google.maps) {\n // Google maps already loaded on the page.\n return of(undefined)\n }\n\n if (this._scriptLoadingPromise) {\n return from(this._scriptLoadingPromise)\n }\n\n // This can happen in HMR situations or Stackblitz.io editors.\n const scriptOnPage = document.getElementById(this._SCRIPT_ID)\n if (scriptOnPage) {\n this._assignScriptLoadingPromise(scriptOnPage)\n return from(this._getScriptLoadingPromise())\n }\n\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.async = true\n script.defer = true\n script.id = this._SCRIPT_ID\n script.src = this._getScriptSrc(this.callbackName)\n this._assignScriptLoadingPromise(script)\n document.body.appendChild(script)\n return from(this._getScriptLoadingPromise())\n }\n\n private _assignScriptLoadingPromise(scriptElem: HTMLElement) {\n this._scriptLoadingPromise = new Promise((resolve, reject) => {\n const win = window as any\n win[this.callbackName] = () => { resolve() }\n\n scriptElem.onerror = (error: Event | string) => {\n reject(error)\n }\n })\n }\n\n private _getScriptLoadingPromise(): Promise<void> {\n if (!this._scriptLoadingPromise) {\n throw Error(`_scriptLoadingPromise has not been assigned.`)\n }\n return this._scriptLoadingPromise\n }\n\n protected _getScriptSrc(callbackName: string): string {\n const hostAndPath: string = this._config.url || 'https://maps.googleapis.com/maps/api/js'\n const queryParams: { [key: string]: string | string[] | undefined | null } = {\n v: this._config.apiVersion || 'quarterly',\n callback: callbackName,\n key: this._config.apiKey,\n client: this._config.clientId,\n channel: this._config.channel,\n libraries: this._config.libraries,\n region: this._config.region,\n language: this._config.language || (this._localeId !== 'en-US' ? this._localeId : null),\n loading: this._config.loading || 'async'\n }\n\n const params: string = Object.keys(queryParams)\n // Remove undefined or null params.\n .filter((k: string) => queryParams[k] !== undefined && queryParams[k] !== null)\n // Remove empty arrays.\n .filter((k: string) => {\n const param = queryParams[k]\n return !Array.isArray(param) || param.length > 0\n })\n // Join arrays as comma seperated strings.\n .map((k: string) => {\n const param = queryParams[k]\n return { key: k, value: Array.isArray(param) ? param.join(',') : param } as { key: string, value: string }\n })\n .map((entry: { key: string, value: string }) => {\n return `${entry.key}=${entry.value}`\n })\n .join('&')\n\n return `${hostAndPath}?${params}`\n }\n}\n","import { Injectable } from '@angular/core'\nimport { defer, Observable, of, throwError } from 'rxjs'\n\nimport { TheSeamGoogleMapsApiLoader } from './google-maps-api-loader'\n\n/**\n * When using the TheSeamNoopGoogleMapsAPILoader, the Google Maps API must be\n * added to the page some other way before the map component is initialixed. One\n * way would be via a `<script>` Tag.\n */\n@Injectable()\nexport class TheSeamNoopGoogleMapsAPILoader extends TheSeamGoogleMapsApiLoader {\n load(): Observable<void> {\n return defer(() => {\n if (!(window as any).google || !(window as any).google.maps) {\n return throwError(new Error(\n 'Google Maps API not loaded on page. Make sure window.google.maps is available.'\n ))\n }\n return of(undefined)\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["polygon","turfjsPolygon","multiPolygon","turfjsMultiPolygon","i1.MapValueManagerService","i1.GoogleMapsService","i3","i2.MapValueManagerService","i2.GoogleMapsService","i3.MapValueManagerService","i4.TheSeamGoogleMapsApiLoader","i8.TheSeamMapFileDropComponent","i9.TheSeamMapsControlComponent","i1","i4.TheSeamGoogleMapsPlacesAutocompleteDirective"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAca,oBAAoB,GAAG,IAAI,cAAc,CAAqB,sBAAsB,EAAC;MAErF,gBAAgB,GAAG,IAAI,cAAc,CAAM,kBAAkB;;ACL9D,IAAA,uBAEX;AAFD,CAAA,UAAY,sBAAsB,EAAA;AAChC,IAAA,sBAAA,CAAA,YAAA,CAAA,GAAA,mBAAgC,CAAA;AAClC,CAAC,EAFW,sBAAsB,KAAtB,sBAAsB,GAEjC,EAAA,CAAA,CAAA,CAAA;AAEK,SAAU,oBAAoB,CAAC,YAAoB,EAAA;AACvD,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC;AACzC,SAAA,SAAS,CAAC,KAAK,IAAI,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;AACtD,CAAC;AAEK,SAAU,iBAAiB,CAAC,OAAiC,EAAA;IACjE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA;AACzE,IAAA,OAAO,qBAAqB,CAAC,UAAU,CAAC,CAAA;AAC1C,CAAC;AAEe,SAAA,kBAAkB,CAAC,OAAiC,EAAE,UAAmB,EAAA;IACvF,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;AACpE,CAAC;AAED,MAAM,oDAAoD,GAAG,cAAc,CAAA;AAC3E,MAAM,4DAA4D,GAAG,qBAAqB,CAAA;AAC1F,MAAM,6DAA6D,GAAG,sBAAsB,CAAA;AAEtF,SAAU,+BAA+B,CAAC,OAAiC,EAAA;IAC/E,OAAO,OAAO,CAAC,WAAW,CAAC,oDAAoD,CAAkC,IAAI,SAAS,CAAA;AAChI,CAAC;AAEK,SAAU,sCAAsC,CAAC,OAAiC,EAAA;IACtF,OAAO,OAAO,CAAC,WAAW,CAAC,4DAA4D,CAAkC,IAAI,SAAS,CAAA;AACxI,CAAC;AAEK,SAAU,uCAAuC,CAAC,OAAiC,EAAA;IACvF,OAAO,OAAO,CAAC,WAAW,CAAC,6DAA6D,CAAkC,IAAI,SAAS,CAAA;AACzI,CAAC;AAED;AACA;AACA;AACM,SAAU,iCAAiC,CAAC,IAAS,EAAA;AACzD,IAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,QAAQ,CAAC,EAAE;AAC7D,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,IAAI,kBAAkB,CAAC,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC,EAAE;gBAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC/C,oBAAA,IAAI,oBAAoB,CAAC,CAAC,CAAC,EAAE;AAC3B,wBAAA,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;AACjC,wBAAA,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAC7B,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA;AACH,CAAC;AAED;;;AAGG;AACa,SAAA,0BAA0B,CACxC,IAAsB,EACtB,OAAiC,EAAA;AAEjC,IAAA,IAAI,sBAA4D,CAAA;AAChE,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;QACf,IAAI,CAAC,KAAK,OAAO,EAAE;YACjB,OAAM;AACP,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;QAChC,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,MAAM,KAAK,CAAC,CAAqB,mBAAA,CAAA,CAAC,CAAA;AACnC,SAAA;AACD,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,SAAS,IAAI,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;YACnE,sBAAsB,GAAG,CAAC,CAAA;AAC3B,SAAA;AACH,KAAC,CAAC,CAAA;AACF,IAAA,OAAO,sBAAsB,CAAA;AAC/B,CAAC;AAEe,SAAA,sCAAsC,CACpD,eAAyC,EACzC,YAAsC,EAAA;AAEtC,IAAA,MAAM,gBAAgB,GAAG,eAAe,CAAC,WAAW,EAAE,CAAA;IACtD,IAAI,gBAAgB,KAAK,IAAI,EAAE;AAC7B,QAAA,MAAM,KAAK,CAAC,CAAqB,mBAAA,CAAA,CAAC,CAAA;AACnC,KAAA;AACD,IAAA,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,EAAE,CAAA;IAChD,IAAI,aAAa,KAAK,IAAI,EAAE;AAC1B,QAAA,MAAM,KAAK,CAAC,CAAqB,mBAAA,CAAA,CAAC,CAAA;AACnC,KAAA;;;;AAID,IAAA,IAAI,gBAAgB,CAAC,OAAO,EAAE,KAAK,SAAS,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,SAAS,EAAE;AACrF,QAAA,MAAM,KAAK,CAAC,CAAqD,mDAAA,CAAA,CAAC,CAAA;AACnE,KAAA;IAED,MAAM,cAAc,GAAG,aAAyC,CAAA;IAChE,MAAM,eAAe,GAAG,gBAA4C,CAAA;IACpE,eAAe,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACvD,GAAG,eAAe,CAAC,QAAQ,EAAE;QAC7B,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;AAC7C,KAAA,CAAC,CAAC,CAAA;AACL,CAAC;AAED;;;AAGG;AACG,SAAU,sCAAsC,CAAC,WAAuB,EAAA;AAC5E,IAAA,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;QAC3B,OAAM;AACP,KAAA;AAED,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC/C,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;QAC9C,OAAM;AACP,KAAA;IAED,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAClC,CAAC;SAEe,2BAA2B,CAAC,OAA4B,EAAE,uBAA+B,CAAC,EAAA;IACxG,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAA;AAC3C,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,oBAAoB,EAAE;AAC3C,YAAA,OAAO,KAAK,CAAA;AACb,SAAA;AACF,KAAA;AACD,IAAA,OAAO,IAAI,CAAA;AACb,CAAC;AAEK,SAAU,kBAAkB,CAAC,OAAiC,EAAA;IAClE,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,IAAG;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAE,CAAC,CAAA;QAChE,sCAAsC,CAAC,MAAM,CAAC,CAAA;AAC9C,QAAA,OAAO,MAAM,CAAA;AACf,KAAC,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,uBAAuB,CAAC,YAA2C,EAAA;AACjF,IAAA,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC;AAEK,SAAU,eAAe,CAACA,SAAiC,EAAA;AAC/D,IAAA,OAAOC,OAAa,CAAC,kBAAkB,CAACD,SAAO,CAAC,CAAC,CAAA;AACnD,CAAC;AAEK,SAAU,oBAAoB,CAACE,cAA2C,EAAA;AAC9E,IAAA,OAAOC,YAAkB,CAAC,uBAAuB,CAACD,cAAY,CAAC,CAAC,CAAA;AAClE,CAAC;AAEK,SAAU,eAAe,CAAC,aAAuC,EAAA;AACrE,IAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;IAC5C,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,QAAA,MAAM,KAAK,CAAC,CAAqB,mBAAA,CAAA,CAAC,CAAA;AACnC,KAAA;AACD,IAAA,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,SAAS,EAAE;AACpC,QAAA,OAAO,eAAe,CAAC,QAAoC,CAAC,CAAA;AAC7D,KAAA;AAAM,SAAA,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,cAAc,EAAE;AAChD,QAAA,OAAO,oBAAoB,CAAC,QAAyC,CAAC,CAAA;AACvE,KAAA;AAED,IAAA,MAAM,KAAK,CAAC,CAAsB,oBAAA,CAAA,CAAC,CAAA;AACrC,CAAC;AAEe,SAAA,eAAe,CAAC,QAAkC,EAAE,QAAkC,EAAA;AACpG,IAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;AAC1C,IAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;AAC1C,IAAA,OAAO,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAC5C,CAAC;AAEK,SAAU,4BAA4B,CAAC,OAA4B,EAAA;IACvE,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,QAAQ,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5C,KAAA,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,wBAAwB,CAAC,IAAsB,EAAA;IAC7D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA;AAE7C,IAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAG;AACrB,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QACtC,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,MAAM,KAAK,CAAC,CAAqB,mBAAA,CAAA,CAAC,CAAA;AACnC,SAAA;AACD,QAAA,QAAQ,CAAC,aAAa,CAAC,MAAM,IAAG;AAC9B,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACvB,SAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO,MAAM,CAAA;AACf,CAAC;AAEK,SAAU,gBAAgB,CAAC,OAAiC,EAAA;IAChE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA;AAE7C,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACtC,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,QAAA,MAAM,KAAK,CAAC,CAAqB,mBAAA,CAAA,CAAC,CAAA;AACnC,KAAA;AACD,IAAA,QAAQ,CAAC,aAAa,CAAC,MAAM,IAAG;AAC9B,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACvB,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO,MAAM,CAAA;AACf,CAAC;AAEK,SAAU,gBAAgB,CAAC,OAAiC,EAAA;AAChE,IAAA,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAA;AAC9C,CAAC;AAEK,SAAU,iBAAiB,CAAC,IAAsB,EAAA;AACtD,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAEK,SAAU,gBAAgB,CAAC,IAAsB,EAAA;IACrD,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE,CAAC,CAAA;AAC3B,IAAA,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;AAEG;AACa,SAAA,6BAA6B,CAAC,IAAsB,EAAE,MAAc,EAAA;AAClF,IAAA,OAAO,IAAI,UAAU,CAAO,UAAU,IAAG;QACvC,MAAM,SAAS,GAAoC,EAAE,CAAA;AAErD,QAAA,MAAM,CAAC,iBAAiB,CAAC,MAAK;AAC5B,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,KAAwC,KAAI;AAC1F,gBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,EAAE,CAAC,CAAA;aACjD,CAAC,CAAC,CAAA;AAEH,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,KAAuC,KAAI;AACxF,gBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,EAAE,CAAC,CAAA;aACjD,CAAC,CAAC,CAAA;AAEH,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,KAA0C,KAAI;AAC9F,gBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,EAAE,CAAC,CAAA;aACjD,CAAC,CAAC,CAAA;AAEH,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,KAAwC,KAAI;AAC1F,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrC,oBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,EAAE,CAAC,CAAA;AACjD,iBAAA;aACF,CAAC,CAAC,CAAA;AAEH,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,KAA2C,KAAI;AAChG,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrC,oBAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,EAAE,CAAC,CAAA;AACjD,iBAAA;aACF,CAAC,CAAC,CAAA;AACL,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,MAAK;YACV,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;AACrD,SAAC,CAAA;AACH,KAAC,CAAC,CAAA;AACJ;;ACtQA;MAEa,qBAAqB,CAAA;AAKhC,IAAA,WAAA,CACmB,IAAqB,EACrB,KAAoB,EACrC,SAA6B,EACZ,IAAsB,EACtB,OAAe,EACf,KAAuB,EACvB,QAAkC,EAAA;AANlC,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiB;AACrB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAe;AAEpB,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAkB;AACtB,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;AACf,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAkB;AACvB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAA0B;AAEnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAA;AACrC,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE;AAC3C,YAAA,MAAM,KAAK,CAAC,CAA+B,6BAAA,CAAA,CAAC,CAAA;AAC7C,SAAA;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAChD,GAAG,CAAC,aAAa,EAAE,CAAA;QAEnB,MAAM,SAAS,GAAoC,EAAE,CAAA;AACrD,QAAA,MAAM,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAA;;;QAIzC,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;AACtC,SAAC,CAAC,CAAA;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CACpB,SAAS,CAAC,aAAa,CAAC,CACzB,CAAC,SAAS,CAAC,CAAC,IAAG;YACd,IAAI,CAAC,KAAK,EAAE,CAAA;AACd,SAAC,CAAC,CAAA;AAEF,QAAA,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,CACjC,SAAS,CAAC,aAAa,CAAC,CACzB,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AACzB,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE;gBAC5B,IAAI,CAAC,KAAK,EAAE,CAAA;AACb,aAAA;AACH,SAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;AACzC,QAAA,MAAM,gCAAyC,SAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAA;YAGpE,WACS,CAAA,QAA4B,EACnC,OAAoB,EAAA;AAEpB,gBAAA,KAAK,EAAE,CAAA;AAHA,gBAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAoB;AAInC,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;gBAExB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;gBACjD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;gBACvC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA;gBACpC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAA;AAC7C,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;;AAGtC,gBAAA,gCAAgC,CAAC,6BAA6B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;aAClF;;YAGD,KAAK,GAAA;;AACH,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,EAAE,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;aAC1D;;YAGD,QAAQ,GAAA;AACN,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;oBACnC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAC/D,iBAAA;AACD,gBAAA,SAAS,EAAE,CAAA;aACZ;;YAGD,IAAI,GAAA;AACF,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAC5E,IAAI,CAAC,WAAW,EAAE;oBAChB,OAAM;AACP,iBAAA;;gBAGD,MAAM,OAAO,GACX,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;AAC9D,sBAAE,OAAO;sBACP,MAAM,CAAA;gBAEZ,IAAI,OAAO,KAAK,OAAO,EAAE;AACvB,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,WAAW,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AACnD,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,WAAW,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AACnD,iBAAA;gBAED,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;oBAC/C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;AAC1C,iBAAA;aACF;AACF,SAAA;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,gCAAgC,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QACrF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEnC,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,KAA0C,KAAI;AACpG,gBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,KAAK,EAAE,CAAA,EAAE,CAAC,CAAA;AACzC,iBAAA;aACF,CAAC,CAAC,CAAA;AAEH,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,KAAwC,KAAI;AAChG,gBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACxE,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,KAAK,EAAE,CAAA,EAAE,CAAC,CAAA;AACzC,iBAAA;aACF,CAAC,CAAC,CAAA;AAEH,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,KAA2C,KAAI;AACtG,gBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACxE,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,KAAK,EAAE,CAAA,EAAE,CAAC,CAAA;AACzC,iBAAA;aACF,CAAC,CAAC,CAAA;AAEH,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAA6D,KAAI;AAC9G,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,KAAK,EAAE,CAAA,EAAE,CAAC,CAAA;aACzC,CAAC,CAAC,CAAA;AAEH,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAkC,KAAI;AACpF,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,KAAK,EAAE,CAAA,EAAE,CAAC,CAAA;aACzC,CAAC,CAAC,CAAA;AACL,SAAC,CAAC,CAAA;AAEF,QAAA,IAAI,CAAC,UAAU,GAAG,MAAK;YACrB,aAAa,CAAC,IAAI,EAAE,CAAA;YACpB,aAAa,CAAC,QAAQ,EAAE,CAAA;YACxB,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;AACrD,SAAC,CAAA;KACF;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAC/B;AAEF;;ACxJW,IAAA,eAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,cAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AACjC,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA,CAAA;MAUY,sBAAsB,CAAA;AAQjC,IAAA,WAAA,GAAA;AANiB,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAkB,CAAA;QAOnE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAA;KAC7D;IAEM,QAAQ,CAAC,KAAe,EAAE,MAAsB,EAAA;AACrD,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,OAAO,KAAK,CAAA;AACb,SAAA;AAED,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;AACnB,YAAA,MAAM,OAAO,GAAmB;gBAC9B,MAAM;gBACN,KAAK,EAAE,IAAI,CAAC,MAAM;aACnB,CAAA;AACD,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACvC,YAAA,OAAO,IAAI,CAAA;AACZ,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACzD,YAAA,OAAO,IAAI,CAAA;AACZ,SAAA;;AAGD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;AACnB,QAAA,MAAM,MAAM,GAAmB;YAC7B,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,CAAA;AACD,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACtC,QAAA,OAAO,IAAI,CAAA;KACZ;AAED,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;;mHA3CU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;uHAAtB,sBAAsB,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;;;ACaX,MAAM,uBAAuB,GAAG,CAAC,cAAuB,MAAkC;AACxF,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,QAAQ,EAAE,cAAc;AACzB,CAAA,CAAC,CAAA;AAEF,MAAM,+BAA+B,GAAG,CAAC,cAAuB,MAAiD;AAC/G,IAAA,cAAc,EAAE,cAAc;AAC9B,IAAA,qBAAqB,EAAE;AACrB,QAAA,YAAY,EAAE;AACZ,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO;AACxC,SAAA;AACF,KAAA;AACD,IAAA,cAAc,EAAE,uBAAuB,CAAC,cAAc,CAAC;AACvD,IAAA,WAAW,EAAE,IAAI;AAClB,CAAA,CAAC,CAAA;AAEF,MAAM,6BAA6B,GAAG,CAAC,cAAuB,MAAqC;AACjG,IAAA,SAAS,EAAE,IAAI;;AAEf,IAAA,OAAO,EAAE,IAAI;;;AAIb,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,YAAY,EAAE,CAAC;AAChB,CAAA,CAAC,CAAA;AAEF,MAAM,8BAA8B,GAAG,CAAC,cAAuB,MAC1D,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,6BAA6B,CAAC,cAAc,CAAC,CAChD,EAAA,EAAA,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,GAAG,EAChB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,CAAC,EAChB,YAAY,EAAE,CAAC,IACf,CAAA;AAEF,MAAM,sCAAsC,GAAG,CAAC,cAAuB,MAAqC;AAC1G,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,YAAY,EAAE,CAAC;AAChB,CAAA,CAAC,CAAA;AAEF,MAAM,gCAAgC,GAA4C;IAChF,WAAW;IACX,aAAa;IACb,aAAa;IACb,eAAe;IACf,cAAc;IACd,OAAO;IACP,SAAS;IACT,MAAM;IACN,WAAW;IACX,SAAS;CACV,CAAA;MAKY,iBAAiB,CAAA;IAsB5B,IAAW,QAAQ,GAAc,EAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAA,EAAE;AAIrE,IAAA,WAAA,CACmB,gBAAwC,EACxC,OAAe,EACf,IAAsB,EAAA;AAFtB,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAwB;AACxC,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;AACf,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAkB;AA3BxB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAA;QAEpC,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAA;QACtD,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAA;AAGpE,QAAA,IAAmB,CAAA,mBAAA,GAAyB,IAAI,CAAA;AAChD,QAAA,IAAkB,CAAA,kBAAA,GAAiC,IAAI,CAAA;AAIvD,QAAA,IAA0B,CAAA,0BAAA,GAAG,KAAK,CAAA;QAkBxC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAA;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAA;KACtD;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;KAC/B;AAEM,IAAA,MAAM,CAAC,GAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC1B,IAAI,CAAC,2BAA2B,EAAE,CAAA;KACnC;IAEM,aAAa,CAAC,GAAW,EAAE,GAAW,EAAA;QAC3C,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;KAChC;AAEM,IAAA,UAAU,CAAC,OAAiD,EAAA;AACjE,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;KACxB;;AAGM,IAAA,qBAAqB,CAAC,IAA0B,EAAA;QACrD,IAAI,CAAC,gBAAgB,EAAE,CAAA;AACvB,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAA;KAChC;AAEM,IAAA,iBAAiB,CAAC,OAAgB,EAAA;;AACvC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEzC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;YACjC,IAAI,CAAC,OAAO,EAAE;gBACZ,IAAI,CAAC,WAAW,EAAE,CAAA;gBAClB,MAAM,OAAO,GAAG,+BAA+B,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;gBACxE,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,UAAU,CAAC,OAAO,CAAC,CAAA;gBACzC,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,IAAI,CAAC,CAAA;gBAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;AAC9B,oBAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;AACxB,wBAAA,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC7B,qBAAA;AACH,iBAAC,CAAC,CAAA;AACH,aAAA;AAAM,iBAAA;gBACL,MAAM,OAAO,GAAG,+BAA+B,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;gBACxE,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,UAAU,CAAC,OAAO,CAAC,CAAA;gBACzC,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAC7C,aAAA;AACF,SAAA;KACF;IAEM,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAA;KACzC;IAEM,MAAM,GAAA;QACX,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAoB,CAAA;KACjD;IAEM,SAAS,CAAC,MAAkE,EAAE,OAAsC,EAAA;QACzH,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC1C;AAED;;AAEG;IACI,eAAe,GAAA;QACpB,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAA;AACnC,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;AAClB,YAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;AACxB,gBAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAClB,aAAA;AACH,SAAC,CAAC,CAAA;KACH;AAED;;AAEG;IACI,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,YAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;gBAC7F,OAAM;AACP,aAAA;;;;;AAMD,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAC5C,IAAI,CAAC,eAAe,EACpB,iBAAiB,EACjB,CAAC,KAA+C,KAAI;;gBAClD,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC3B,QAAQ,CAAC,MAAM,EAAE,CAAA;AACnB,aAAC,CACF,CAAA;;;;;;;YAQD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAA;AAClD,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AACzC,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;;;YAIzC,UAAU,CAAC,MAAK;gBACd,QAAQ,CAAC,MAAM,EAAE,CAAA;AACnB,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;KACH;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC5C,YAAA,MAAM,KAAK,CAAC,CAAwC,sCAAA,CAAA,CAAC,CAAA;AACtD,SAAA;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAEzB,MAAM,OAAO,GAAG,+BAA+B,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;AAExE,QAAA,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;AACtE,QAAA,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAErC,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc,CAAA;QAErC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,KAAU,KAAI;;YACrE,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,0CAAE,cAAc,EAAE,MAAK,IAAI,EAAE;gBACnD,IAAI,CAAC,kBAAkB,EAAE,CAAA;gBACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;AAC9B,oBAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;AACxB,wBAAA,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC7B,qBAAA;AACH,iBAAC,CAAC,CAAA;AACH,aAAA;AACH,SAAC,CAAC,CAAA;KACH;IAEM,UAAU,CAAC,OAAoB,EAAE,QAAqC,EAAA;QAC3E,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KAChD;AAEY,IAAA,OAAO,CAAC,IAAS,EAAA;;YAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,YAAA,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;SACvF,CAAA,CAAA;AAAA,KAAA;;IAGM,kBAAkB,GAAA;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,OAAM;AACP,aAAA;YAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACtC,OAAM;AACP,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;;;;KAKvF;AAEM,IAAA,yBAAyB,CAAC,KAAc,EAAA;AAC7C,QAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAA;KACxC;AAEM,IAAA,mBAAmB,CAAC,OAAkD,EAAA;AAC3E,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAA;KACjC;IAEM,mBAAmB,GAAA;QACxB,OAAO,IAAI,CAAC,iBAAiB,CAAA;KAC9B;IAEO,mBAAmB,GAAA;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAA;;;;;;QAOzB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,IAA4D,KAAI;YACnG,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AAChE,SAAC,CAAC,CAAA;;QAGF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAG;YACrC,IAAI,IAAI,GAAG,6BAA6B,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;AAEjE,YAAA,MAAM,OAAO,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAA;AACxD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,OAAO,GAAI,EAAE,CAAC,CAAA;AAE5C,YAAA,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;AAC9B,gBAAA,MAAM,YAAY,GAAG,sCAAsC,CAAC,OAAO,CAAC,CAAA;gBACpE,IAAI,GAAG,8BAA8B,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;AAC9D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,YAAY,KAAZ,IAAA,IAAA,YAAY,KAAZ,KAAA,CAAA,GAAA,YAAY,GAAI,EAAE,CAAC,CAAA;AAClD,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAC,CAAA;;AAGF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAkC,KAAI;YAC9E,IAAI,CAAC,kBAAkB,EAAE,CAAA;AAEzB,YAAA,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;gBAC9B,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;AAC/C,oBAAA,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC7B,iBAAA;AACH,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;;AAGF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAkC,KAAI;YAClF,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;AAEjC,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AAC1D,gBAAA,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AACnD,aAAA;AACH,SAAC,CAAC,CAAA;;AAGF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAkC,KAAI;YACjF,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;AACnC,SAAC,CAAC,CAAA;KACH;AAEM,IAAA,8BAA8B,CAAC,OAAiC,EAAA;QACrE,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,MAAM,YAAY,GAAG,sCAAsC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;AACpF,QAAA,MAAM,YAAY,GAAG,sCAAsC,CAAC,OAAO,CAAC,CAAA;AACpE,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,YAAY,KAAZ,IAAA,IAAA,YAAY,KAAZ,KAAA,CAAA,GAAA,YAAY,GAAI,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;KACzD;IAEO,kBAAkB,CAAC,OAAsC,EAAE,sBAAqD,EAAA;QACtH,IAAI,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACpD,OAAM;AACP,SAAA;AAED,QAAA,KAAK,MAAM,GAAG,IAAI,gCAAgC,EAAE;AAClD,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,EAAE;gBACrE,OAAO,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAQ,CAAA;AAClD,aAAA;AACF,SAAA;KACF;IAEO,2BAA2B,GAAA;QACjC,IAAI,CAAC,kBAAkB,EAAE,CAAA;AAEzB,QAAA,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACnE,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAC1C,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CACtF,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC,SAAS,EAAE,CAAA;AAEb,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,KAAkC,KAAI;;AACpF,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;gBACrC,OAAM;AACP,aAAA;AAED,YAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,SAAS,CAAC,CAAA;AAC3E,SAAC,CAAC,CAAA;AAEF,QAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC5C,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC,OAA4B,KAAI;;;;;;;AAMtG,gBAAA,IAAI,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;oBACvC,OAAM;AACP,iBAAA;gBAED,IAAI,CAAC,kBAAkB,EAAE,CAAA;;;;AAKzB,gBAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE;;AAEzC,oBAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;;oBAEpB,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,cAAc,CAAC,IAAI,CAAC,CAAA;oBAC1C,OAAM;AACP,iBAAA;;AAGD,gBAAA,MAAM,OAAO,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAA;;AAErD,gBAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;;gBAGpB,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,cAAc,CAAC,IAAI,CAAC,CAAA;;;AAI1C,gBAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,0BAA0B;sBAC1D,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;sBACxD,SAAS,CAAA;AACb,gBAAA,IAAI,sBAAsB,EAAE;AAC1B,oBAAA,sCAAsC,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAA;AACvE,oBAAA,kBAAkB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;AACjD,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAChC,oBAAA,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAClC,iBAAA;AACH,aAAC,CAAC,CAAA;AACH,SAAA;KACF;IAEM,SAAS,GAAA;AACd,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAA;AACZ,SAAA;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,IAAI,CAAA;KACtD;;IAGM,kBAAkB,GAAA;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,IAAI,UAAU,GAAG,KAAK,CAAA;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;AAC9B,YAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;gBACxB,UAAU,GAAG,IAAI,CAAA;AAClB,aAAA;AACH,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,UAAU,CAAA;KAClB;;IAGM,kBAAkB,GAAA;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,IAAI,OAAO,GAAoC,IAAI,CAAA;QACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAG;AAC9B,YAAA,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE;gBACxB,OAAO,GAAG,CAAC,CAAA;AACZ,aAAA;AACH,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,OAAO,CAAA;KACf;;IAGM,eAAe,GAAA;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzC,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAA;AACzC,SAAA;KACF;;IAGM,gBAAgB,GAAA;QACrB,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;AAC/B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAA;AAC/B,SAAA;KACF;;IAGO,0BAA0B,CAAC,OAAiC,EAAE,QAA6B,EAAA;QACjG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAEvB,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAEzB,IAAI,SAAS,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;AACtC,SAAA;QACD,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,qBAAqB,CACjD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,mBAAmB,EACxB,SAAS,EACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EACnB,OAAO,CACR,CAAA;AACF,SAAA;KACF;IAEM,UAAU,CAAC,sBAA+B,IAAI,EAAA;QACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,IAAI,CAAC,kBAAkB,EAAE,CAAA;YACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAG;AAChC,gBAAA,IAAI,mBAAmB,EAAE;oBACvB,iCAAiC,CAAC,CAAC,CAAC,CAAA;AACrC,iBAAA;gBACD,OAAO,CAAC,CAAC,CAAC,CAAA;AACZ,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;KACH;;IAGO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;YACtE,MAAM,KAAK,CACT,4EAA4E;AAC1E,gBAAA,oEAAoE,CACvE,CAAA;AACF,SAAA;KACF;;8GAxcU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;;;MCvFE,aAAa,CAAA;AASxB,IAAA,WAAA,CACmB,WAA8B,EAC9B,yBAAmD,EACnD,SAAmB,EACnB,WAAuB,EAAA;;AAHvB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;AAC9B,QAAA,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA0B;AACnD,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;AACnB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAXzB,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAQ,CAAA;QAatD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAA;AAEtD,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,WAAW,CAAC,SAAS,CAAA;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAA;QAEjF,MAAM,SAAS,GAAqB,EAAE,CAAA;AACtC,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YACzB,SAAS,CAAC,IAAI,CAAC;AACb,gBAAA,OAAO,EAAE,gBAAgB;AACzB,gBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AAChC,aAAA,CAAC,CAAA;AACH,SAAA;AACD,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,SAAS;YACT,MAAM,EAAE,IAAI,CAAC,SAAS;AACvB,SAAA,CAAC,CAAA;QAEF,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC7C,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAA;AAEpD,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAA;AAErF,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CACzB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EACzC,QAAQ,CACT,CAAA;AAED,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAA;KACjC;IAEM,OAAO,GAAA;AACZ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAA;QAC7C,IAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,CAAA;AACZ,YAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;gBACjE,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE;oBACtD,GAAG,GAAG,KAAK,CAAA;AACZ,iBAAA;AACH,aAAC,CAAC,CAAA;AACF,YAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AACd,gBAAA,MAAM,KAAK,CAAC,CAA+C,6CAAA,CAAA,CAAC,CAAA;AAC7D,aAAA;AACD,YAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AACzD,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;AAE5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAA;KAClC;AAEF,CAAA;MAGY,yBAAyB,CAAA;AAEpC,IAAA,WAAA,CACmB,WAA8B,EAC9B,yBAAmD,EACnD,SAAmB,EAAA;AAFnB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;AAC9B,QAAA,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAA0B;AACnD,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;KACjC;AAEE,IAAA,GAAG,CAAC,OAAmB,EAAA;AAC5B,QAAA,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;KACpG;;sHAVU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;0HAAzB,yBAAyB,EAAA,CAAA,CAAA;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;;;ACpDX;;AAEG;MAeU,+CAA+C,CAAA;AAW1D,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAA;KACtC;IAED,WACmB,CAAA,WAA8B,EACT,KAA2C,EAAA;AADhE,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;AAdhC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAA;AAE7C,QAAA,IAAU,CAAA,UAAA,GAAmB,EAAE,CAAA;AAerC,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AACxD,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;AACzB,aAAA;AACD,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AACvD,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;AACvB,aAAA;AACF,SAAA;KACF;;IAGD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAEjC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;KAC/B;;AAnCU,+CAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+CAA+C,gDAiBpC,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAjB3B,+CAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+CAA+C,sWCtC5D,mEACA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDqCa,+CAA+C,EAAA,UAAA,EAAA,CAAA;kBAd3D,SAAS;YAEE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kDAAkD,EAGtD,IAAA,EAAA;AACJ,wBAAA,kBAAkB,EAAE,OAAO;AAC3B,wBAAA,mBAAmB,EAAE,OAAO;AAC5B,wBAAA,cAAc,EAAE,OAAO;AACvB,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,OAAO,EAAE,6BAA6B;AACvC,qBAAA,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mEAAA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,CAAA;;;8BAmB5C,QAAQ;;8BAAI,MAAM;+BAAC,gBAAgB,CAAA;;yBAX7B,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,OAAO,EAAE,CAAE,OAAO,CAAE,CAAA;;;AEvBpC;;AAEG;MAeU,6CAA6C,CAAA;AAaxD,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;KAC/B;IAED,WACmB,CAAA,WAAuB,EACvB,gBAAwC,EACxC,SAAoB,EACpB,WAA8B,EACT,KAAyC,EAAA;AAJ9D,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AACvB,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAwB;AACxC,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AACpB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;AAnBhC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAA;AAI7C,QAAA,IAAU,CAAA,UAAA,GAAmB,EAAE,CAAA;AAkBrC,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AACxD,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;AACzB,aAAA;AACD,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AACvD,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;AACvB,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;AAClD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;KACnF;;IAGD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAEjC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;KAC/B;IAEO,QAAQ,CAAC,sBAA+B,IAAI,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAA;QAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI,CAAA;AACZ,SAAA;AAED,QAAA,IAAI,mBAAmB,EAAE;AACvB,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,gBAAA,MAAM,KAAK,CAAC,CAA0C,wCAAA,CAAA,CAAC,CAAA;AACxD,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;KAChB;AAEa,IAAA,WAAW,CAAC,IAAU,EAAA;;AAClC,YAAA,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;YACpC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;YAC1D,IAAI,CAAC,WAAW,EAAE,CAAA;SACnB,CAAA,CAAA;AAAA,KAAA;IAEO,kBAAkB,GAAA;QACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC9D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAC7D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;QAC3D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAA;AAEnF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,CAAC,KAAY,KAAI;AACtF,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YAC5B,IAAI,IAAI,KAAK,IAAI,EAAE;gBAAE,OAAM;AAAE,aAAA;YAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAA;AAChE,YAAA,IAAI,iBAAiB,EAAE;gBACrB,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACxB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AACvB,aAAA;SACF,CAAC,CAAC,CAAA;AAEH,QAAA,OAAO,gBAAgB,CAAA;KACxB;IAEO,2BAA2B,GAAA;QACjC,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;KAC5C;AAED;;AAEG;IACM,WAAW,GAAA;AAClB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAA;QACtD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC/D,WAAW,CAAC,KAAK,EAAE,CAAA;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;KACnF;;AAlGU,6CAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6CAA6C,sIAsBlC,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAtB3B,6CAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6CAA6C,oWC1C1D,mEACA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDyCa,6CAA6C,EAAA,UAAA,EAAA,CAAA;kBAdzD,SAAS;YAEE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gDAAgD,EAGpD,IAAA,EAAA;AACJ,wBAAA,kBAAkB,EAAE,OAAO;AAC3B,wBAAA,mBAAmB,EAAE,OAAO;AAC5B,wBAAA,cAAc,EAAE,OAAO;AACvB,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,OAAO,EAAE,6BAA6B;AACvC,qBAAA,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mEAAA,EAAA,MAAA,EAAA,CAAA,8VAAA,CAAA,EAAA,CAAA;;;8BAwB5C,QAAQ;;8BAAI,MAAM;+BAAC,gBAAgB,CAAA;;yBAd7B,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,OAAO,EAAE,CAAE,OAAO,CAAE,CAAA;;;MEpDd,0BAA0B,CAAA;AAI/C;;ACWD;;AAEG;MAOU,2BAA2B,CAAA;IAatC,WACmB,CAAA,WAAuB,EACvB,OAAe,EACf,WAA8B,EAC9B,gBAAwC,EACxC,SAAoB,EAAA;AAJpB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AACvB,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;AACf,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;AAC9B,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAwB;AACxC,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAhBtB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAA;AAO7C,QAAA,IAAU,CAAA,UAAA,GAAmB,EAAE,CAAA;AAE/B,QAAA,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAA;AAoEpB,QAAA,IAAA,CAAA,oBAAoB,GAAG,CAAC,KAAU,KAAI;AACrD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;gBACxB,OAAM;AACP,aAAA;YAED,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;gBAC3D,OAAM;AACP,aAAA;YAED,KAAK,CAAC,cAAc,EAAE,CAAA;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAA;AACxC,SAAC,CAAA;AAEgB,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,KAAU,KAAI;AACjD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;gBACxB,OAAM;AACP,aAAA;YAED,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,KAAK,CAAC,eAAe,EAAE,CAAA;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;;YAG1E,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;gBACtD,OAAM;AACP,aAAA;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC7B,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;gBAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;AAC5D,aAAC,CAAC,CAAA;AACJ,SAAC,CAAA;AAEgB,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,KAAU,KAAI;AACtD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;gBACxB,OAAM;AACP,aAAA;YAED,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;gBAC3D,OAAM;AACP,aAAA;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;AAC7E,SAAC,CAAA;AAEgB,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,KAAU,KAAI;AACtD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;gBACxB,OAAM;AACP,aAAA;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AAC5E,SAAC,CAAA;KAhHI;;IAGL,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAC7B,GAAG,CAAC,KAAK,IAAG;AACV,YAAA,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,eAAe,EAAE,CAAA;AACvB,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,gBAAgB,EAAE,CAAA;AACxB,aAAA;AACH,SAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC,SAAS,EAAE,CAAA;KACd;;IAGD,WAAW,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE,CAAA;AAEvB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;KAC/B;IAEO,eAAe,GAAA;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;YAC/B,OAAM;AACP,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;;YAE9B,IAAI,CAAC,gBAAgB,EAAE,CAAA;AACxB,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU,CAAA;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,KAAY,KAAI;AACnF,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAA;aAClC,CAAC,CAAC,CAAA;AAEH,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,KAAY,KAAI;AACjF,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAA;aACnC,CAAC,CAAC,CAAA;YAEH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;YAC9F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;YAClH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;YAC1G,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAA;YAChG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAA;AACtH,SAAC,CAAC,CAAA;KACH;IAEO,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACjC,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;AACrB,SAAA;KACF;IAwDO,YAAY,GAAA;AAClB,QAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAA;KACnC;AAEO,IAAA,wBAAwB,CAAC,YAA0B,EAAA;AACzD,QAAA,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAA;KAC5E;AAEO,IAAA,6BAA6B,CAAC,YAA0B,EAAA;QAC9D,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAA;KACzC;;wHA/IU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,0DC1BxC,EAAA,EAAA,MAAA,EAAA,CAAA,+HAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FD0Ba,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;+BACE,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,EAAA,EAAA,MAAA,EAAA,CAAA,+HAAA,CAAA,EAAA,CAAA;;;MEJpC,2BAA2B,CAAA;IAKtC,IACI,GAAG,CAAC,KAAoC,EAAA;AAC1C,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;YACvB,IAAI,CAAC,OAAO,EAAE,CAAA;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;AAClB,SAAA;KACF;IAGD,WACmB,CAAA,WAA8B,EACA,mBAA8C,EAAA;AAD5E,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;AACA,QAAA,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAA2B;AAf9E,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAA;KAgBhD;;IAGL,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAC7B,GAAG,CAAC,KAAK,IAAG;AACV,YAAA,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,IAAI,EAAE,CAAA;AACZ,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,OAAO,EAAE,CAAA;AACf,aAAA;AACH,SAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC,SAAS,EAAE,CAAA;KACd;;IAGD,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,EAAE,CAAA;AAEd,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;KAC/B;IAEO,IAAI,GAAA;QACV,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAM;AACP,SAAA;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YACjD,OAAM;AACP,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAC3D;IAEO,OAAO,GAAA;;AACb,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;KAC7B;;AAxDU,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,gDAgB5B,oBAAoB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAhBnB,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,gFAH5B,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAGD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD,CAAA;;;8BAiBI,MAAM;+BAAC,oBAAoB,CAAA;;yBAV1B,GAAG,EAAA,CAAA;sBADN,KAAK;;;ACiBR,MAAM,8BAA8B,CAAA;AAElC,IAAA,WAAA,CAAmB,WAAuB,EAAA;AAAvB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;KAAI;AAE/C,CAAA;AAED,MAAM,2BAA2B,GAE7B,aAAa,CAAC,8BAA8B,CAAC,CAAA;AAEjD;;AAEG;AAsBG,MAAO,0BAA2B,SAAQ,2BAA2B,CAAA;IAkCzE,IACI,KAAK,CAAC,KAAe,EAAA;QACvB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;KAC5D;AACD,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAA;KACnC;AAED,IAAA,IACI,QAAQ,CAAC,KAAa,EAAA,EAAI,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA,EAAE;IAC5E,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,CAAA,EAAE;IAoBhD,IACI,iBAAiB,CAAC,KAAgD,EAAA;AACpE,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;KAC5C;IAED,IACI,aAAa,GAAK,EAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAA,EAAE;IAEpD,IACI,aAAa,KAAK,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA,EAAE;IA0BxE,WACW,CAAA,UAAsB,EACd,aAA2B,EAC3B,WAA8B,EAC9B,gBAAwC,EACxC,oBAAgD,EAAA;QAEjE,KAAK,CAAC,UAAU,CAAC,CAAA;AANR,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AACd,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAc;AAC3B,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;AAC9B,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAwB;AACxC,QAAA,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAA4B;AAxFlD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAA;QAI5C,IAAA,CAAA,qBAAqB,GAAe;AAC3C,YAAA,SAAS,EAAE,6CAA6C;YACxD,IAAI,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE;YACtD,QAAQ,EAAE,CAAC;SACZ,CAAA;QAEQ,IAAA,CAAA,mBAAmB,GAAe;AACzC,YAAA,SAAS,EAAE,+CAA+C;YAC1D,IAAI,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE;YACtD,QAAQ,EAAE,CAAC;SACZ,CAAA;AAEO,QAAA,IAAY,CAAA,YAAA,GAAgB,IAAI,CAAA;AAaxC;;;;AAIG;AACK,QAAA,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC,CAAA;AAEG,QAAA,IAAe,CAAA,eAAA,GAAG,IAAI,CAAA;AAEtB,QAAA,IAAwB,CAAA,wBAAA,GAAG,KAAK,CAAA;AAChC,QAAA,IAAwB,CAAA,wBAAA,GAAG,IAAI,CAAA;AAC/B,QAAA,IAAsB,CAAA,sBAAA,GAAG,IAAI,CAAA;AAC7B,QAAA,IAAqB,CAAA,qBAAA,GAAG,IAAI,CAAA;AAC5B,QAAA,IAAwB,CAAA,wBAAA,GAAG,KAAK,CAAA;AAEhC,QAAA,IAAyB,CAAA,yBAAA,GAAG,KAAK,CAAA;AAEjC,QAAA,IAAc,CAAA,cAAA,GAAG,IAAI,CAAA;AAgBtB,QAAA,IAAI,CAAA,IAAA,GAAG,EAAE,CAAA;AACT,QAAA,IAAS,CAAA,SAAA,GAAG,CAAC,SAAS,CAAA;AACtB,QAAA,IAAQ,CAAA,QAAA,GAAG,SAAS,CAAA;AAEnC,QAAA,IAAO,CAAA,OAAA,GAA6C,CAAC,CAAA;AAEpD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAA+B,CAAA;QAIpE,IAAA,CAAA,QAAQ,GAAG;AACT,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,iBAAiB,EAAE,KAAK;YACxB,iBAAiB,EAAE,IAAI,CAAC,wBAAwB;SACjD,CAAA;AAeC,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,MAAM,IAAG,EAAG,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA,EAAE,CAAC,EAC7C,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC,SAAS,EAAE,CAAA;QAEb,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CACrC,GAAG,CAAC,MAAM,IAAG;YACX,IAAI,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAAE,aAAA;YAClD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAAE,IAAI,CAAC,SAAS,EAAE,CAAA;AAAE,aAAA;AAC1C,SAAC,CAAC,EACF,GAAG,CAAC,OAAO,IAAG;AACZ,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,aAAa,EAAE;gBAChF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACxC,aAAA;AACH,SAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC,SAAS,EAAE,CAAA;AAEb,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAC7D,GAAG,CAAC,OAAO,IAAG;YACZ,MAAM,KAAK,GAAgC,EAAE,CAAA;AAC7C,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAA;AAC5E,aAAA;AACD,YAAA,OAAO,KAAK,CAAA;AACd,SAAC,CAAC,EACF,GAAG,CAAC,KAAK,IAAG;AACV,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;AAC7C,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAChE,aAAA;SACF,CAAC,CACH,CAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAE7D,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAEzC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,IAAI,CACvD,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAC5B,CAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,SAAS,CAAgB,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAC9C,GAAG,CAAC,CAAC,KAAoB,KAAI;YAC3B,QAAQ,KAAK,CAAC,IAAI;AAChB,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE;AACvC,wBAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAA;wBAClC,KAAK,CAAC,cAAc,EAAE,CAAA;wBACtB,KAAK,CAAC,eAAe,EAAE,CAAA;AACxB,qBAAA;oBACD,MAAK;AACP,gBAAA,KAAK,QAAQ;AAAE,oBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;oBAAC,KAAK,CAAC,cAAc,EAAE,CAAC;oBAAC,KAAK,CAAC,eAAe,EAAE,CAAC;oBAAC,MAAK;AACrG,gBAAA,KAAK,aAAa;AAAE,oBAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;oBAAC,KAAK,CAAC,cAAc,EAAE,CAAC;oBAAC,KAAK,CAAC,eAAe,EAAE,CAAC;oBAAC,MAAK;AAC/G,aAAA;AACH,SAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAC/B,CAAC,SAAS,EAAE,CAAA;KACd;IAED,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AAEnD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;KAC/B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,UAAU,GAAG,KAAK,CAAA;AACtB,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;YAC7D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAA;YAC7C,UAAU,GAAG,IAAI,CAAA;AAClB,SAAA;AACD,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;YAC9D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,CAAA;YAC/C,UAAU,GAAG,IAAI,CAAA;AAClB,SAAA;AACD,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;AAC9D,SAAA;AAED,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,EAAE;YAC9E,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;AAC3E,SAAA;AAED,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,EAAE;YAC7E,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAA;AAC9F,YAAA,IAAI,iBAAiB,KAAK,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;gBACzD,IAAI,CAAC,QAAQ,GACR,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,QAAQ,CAAA,EAAA,EAChB,iBAAiB,EAAA,CAClB,CAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE;YACnE,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;AACxD,SAAA;AAED,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE;YAC5D,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC1C,SAAA;KACF;AAED,IAAA,UAAU,CAAC,KAAe,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACnB;AAED,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;KACnB;AAED,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;KACpB;AAED,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAA;KAC3B;IAEM,SAAS,CAAC,MAAkE,EAAE,OAAsC,EAAA;QACzH,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC5C;IAEM,UAAU,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;KACrC;IAEM,QAAQ,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,CAAA;KACrE;;IAGM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,CAAA;KAC/B;IAEO,eAAe,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAA;KACtC;AAED,IAAA,WAAW,CAAC,MAAuB,EAAA;;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC/B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;;;;;;AAOrD,QAAA,IAAI,CAAC,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,SAAS,0CAAE,WAAW,CAAC,MAAM,EAAE,MAAK;;AACvE,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAA;YACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;AAE9C,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,EAAE,CAAA;AAC7B,SAAC,CAAC,CAAA;KAEH;IAED,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAA;KACnC;;uHAlRU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAd1B,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;QACT,sBAAsB;QACtB,iBAAiB;AACjB,QAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AACtE,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;;AAE1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,0BAA0B,CAAC;AACzD,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACF,KAAA,EA0FsD,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAa,qHClKtE,mvBAkBA,EAAA,MAAA,EAAA,CAAA,+LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,UAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;AD8G2B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAAuB,EAAA,0BAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEtB,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAAiC,EAAA,0BAAA,CAAA,SAAA,EAAA,0BAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAChC,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAAgC,EAAA,0BAAA,CAAA,SAAA,EAAA,0BAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC/B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA8B,EAAA,0BAAA,CAAA,SAAA,EAAA,wBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC7B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA6B,EAAA,0BAAA,CAAA,SAAA,EAAA,uBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC5B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAAiC,EAAA,0BAAA,CAAA,SAAA,EAAA,0BAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEhC,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAAkC,EAAA,0BAAA,CAAA,SAAA,EAAA,2BAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEjC,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAAsB,EAAA,0BAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAgBtB,UAAA,CAAA;AAAd,IAAA,WAAW,EAAE;CAAU,EAAA,0BAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACT,UAAA,CAAA;AAAd,IAAA,WAAW,EAAE;CAAuB,EAAA,0BAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;AAAd,IAAA,WAAW,EAAE;CAAqB,EAAA,0BAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;2FAhFjC,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBArBtC,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAGpB,MAAA,EAAA;wBACN,UAAU;AACX,qBAAA,EACU,SAAA,EAAA;wBACT,sBAAsB;wBACtB,iBAAiB;AACjB,wBAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AACtE,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;;AAE1B,4BAAA,WAAW,EAAE,UAAU,CAAC,gCAAgC,CAAC;AACzD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,gBAAgB,EAAA,QAAA,EAAA,mvBAAA,EAAA,MAAA,EAAA,CAAA,+LAAA,CAAA,EAAA,CAAA;iOAqCtB,KAAK,EAAA,CAAA;sBADR,KAAK;gBASF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAUmB,eAAe,EAAA,CAAA;sBAAvC,KAAK;gBAEmB,wBAAwB,EAAA,CAAA;sBAAhD,KAAK;gBACmB,wBAAwB,EAAA,CAAA;sBAAhD,KAAK;gBACmB,sBAAsB,EAAA,CAAA;sBAA9C,KAAK;gBACmB,qBAAqB,EAAA,CAAA;sBAA7C,KAAK;gBACmB,wBAAwB,EAAA,CAAA;sBAAhD,KAAK;gBAEmB,yBAAyB,EAAA,CAAA;sBAAjD,KAAK;gBAEmB,cAAc,EAAA,CAAA;sBAAtC,KAAK;gBAGF,iBAAiB,EAAA,CAAA;sBADpB,KAAK;gBAMF,aAAa,EAAA,CAAA;sBADhB,WAAW;uBAAC,eAAe,CAAA;gBAIxB,aAAa,EAAA,CAAA;sBADhB,WAAW;uBAAC,eAAe,CAAA;gBAMJ,IAAI,EAAA,CAAA;sBAA3B,KAAK;gBACkB,SAAS,EAAA,CAAA;sBAAhC,KAAK;gBACkB,QAAQ,EAAA,CAAA;sBAA/B,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAEwE,kBAAkB,EAAA,CAAA;sBAAhG,SAAS;uBAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;;;AE3J3D,MAAA,+CAA+C,GAA2C;AACrG,IAAA,qBAAqB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;EACzC;MAMY,4CAA4C,CAAA;IASvD,IACI,OAAO,CAAC,KAAgE,EAAA;AAC1E,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,+CAA+C,CAAA;KACzE;IAgBD,WACmB,CAAA,WAAyC,EACzC,OAAe,EAAA;AADf,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAA8B;AACzC,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;AA7BjB,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,OAAO,EAAQ,CAAA;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAA;AAE7C,QAAA,IAAoB,CAAA,oBAAA,GAAmE,EAAE,CAAA;AACzF,QAAA,IAAU,CAAA,UAAA,GAAoC,EAAE,CAAA;AAQhD,QAAA,IAAQ,CAAA,QAAA,GAA2C,+CAA+C,CAAA;AAahF,QAAA,IAAS,CAAA,SAAA,GAAG,MAAM,CAAA;QAM1C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACrD,SAAS,CAAC,SAAS,CAAC,EACpB,SAAS,CAAC,MAAM,IAAI,CAAC,6BAA6B,EAAO,CAAC,CAC3D,CAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;gBACnF,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAE7F,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;AAE9F,gBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAChD,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;KACH;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;AACxC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;AAEpB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;KAC/B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC5C,SAAA;KACF;IAEO,yBAAyB,GAAA;QAC/B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CACvB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EACnF,IAAI,CAAC,CAAC,CAAC,EACP,KAAK,CAAC,SAAS,CAAC,CACjB,CAAA;KACF;AAED;;AAEG;IACI,SAAS,GAAA;QACd,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAA;KACrC;AAED;;;;AAIG;IACI,SAAS,GAAA;QACd,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,QAAA,OAAQ,IAAI,CAAC,YAAoB,CAAC,SAAS,EAAE,CAAA;KAC9C;AAED;;;;AAIG;IACI,QAAQ,GAAA;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAA;KACpC;AAED;;;AAGG;AACI,IAAA,SAAS,CAAC,MAAmE,EAAA;QAClF,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAO,CAAC,CAAA;KAC5C;AAED;;;;AAIG;AACI,IAAA,wBAAwB,CAAC,YAAuD,EAAA;QACrF,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,YAAa,CAAC,CAAA;KACjE;AAED;;;;AAIG;AACI,IAAA,SAAS,CAAC,MAAiB,EAAA;QAChC,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAO,CAAC,CAAA;KAC5C;;AAGM,IAAA,UAAU,CAAC,OAAgD,EAAA;QAChE,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAQ,CAAC,CAAA;KAC9C;AAED;;;;AAIG;AACI,IAAA,QAAQ,CAAC,KAAgB,EAAA;QAC9B,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAM,CAAC,CAAA;KAC1C;;IAGM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;KACvC;;IAGM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;KACtC;IAEM,cAAc,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAA;KACtC;IAEO,6BAA6B,GAAA;AACnC,QAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAI,UAAU,IAAG;AAChD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAA;AAC1D,gBAAA,OAAO,SAAS,CAAA;AACjB,aAAA;AACD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,KAAQ,KAAI;AAC3E,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;AAChD,aAAC,CAAC,CAAA;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAE9B,YAAA,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;AAChC,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,UAAU,CAAA;KAClB;;IAGO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;YACzE,MAAM,KAAK,CACT,mFAAmF;AACjF,gBAAA,oEAAoE,CACvE,CAAA;AACF,SAAA;KACF;;yIA5LU,4CAA4C,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;6HAA5C,4CAA4C,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,kCAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA5C,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBAJxD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yCAAyC;AACnD,oBAAA,QAAQ,EAAE,kCAAkC;iBAC7C,CAAA;sHAWK,OAAO,EAAA,CAAA;sBADV,KAAK;gBAea,YAAY,EAAA,CAAA;sBAA9B,MAAM;gBAEmB,SAAS,EAAA,CAAA;sBAAlC,WAAW;uBAAC,WAAW,CAAA;;;AChB1B;;AAEG;MAQU,4CAA4C,CAAA;AAsBvD;;;;AAIG;AACF,IAAA,IACI,QAAQ,CAAC,KAAa,EAAA,EAAI,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA,EAAE;IAC5E,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,CAAA,EAAE;IAGjD,IACI,OAAO,CAAC,KAAgE,EAAA;AAC1E,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,+CAA+C,CAAA;KACzE;IAgBD,IACI,uBAAuB,CAAC,KAAmD,EAAA;AAC7E,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAA;AACnC,QAAA,IAAI,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACjF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAA;YAC5D,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;AAC9F,YAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAA;AAChC,SAAC,CAAC,CAAA;KACH;IAGD,IACI,aAAa,KAAK,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA,EAAE;AAGxE,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;KAC7B;IAGD,QAAQ,GAAA;;AACN,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,EAAE,CAAA;KAC9B;AAED,IAAA,WAAA,CACmB,WAAuB,EAAA;AAAvB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAzEzB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAA;AACpC,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,OAAO,EAAE,CAAA;AAElD,QAAA,IAAoB,CAAA,oBAAA,GAAmE,EAAE,CAAA;AAIxF,QAAA,IAAK,CAAA,KAAA,GAA8B,kCAAkC,CAAA;AAErE,QAAA,IAAI,CAAA,IAAA,GAAgC,gBAAgB,CAAA;AAEpC,QAAA,IAAQ,CAAA,QAAA,GAAiB,KAAK,CAAA;AAE9C,QAAA,IAAW,CAAA,WAAA,GAA8B,8BAA8B,CAAA;AAEvE,QAAA,IAAW,CAAA,WAAA,GAAoC,KAAK,CAAA;AAEpD,QAAA,IAAc,CAAA,cAAA,GAAoC,KAAK,CAAA;AAUvD,QAAA,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC,CAAA;AAMvB,QAAA,IAAQ,CAAA,QAAA,GAA2C,+CAA+C,CAAA;QA0ChG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACrD,SAAS,CAAC,SAAS,CAAC,EACpB,SAAS,CAAC,MAAM,IAAI,CAAC,6BAA6B,EAAO,CAAC,CAC3D,CAAA;KACF;;IAGD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;KAC/B;IAEO,uBAAuB,GAAA;AAC7B,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CACvB,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,EACxD,IAAI,CAAC,CAAC,CAAC,EACP,KAAK,CAAC,SAAS,CAAC,CACjB,CAAA;KACF;AAED;;AAEG;IACK,SAAS,GAAA;QACf,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAA;KACrC;AAED;;;;AAIG;IACI,SAAS,GAAA;QACd,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,QAAA,OAAQ,IAAI,CAAC,YAAoB,CAAC,SAAS,EAAE,CAAA;KAC9C;AAED;;;;AAIG;IACK,QAAQ,GAAA;QACd,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACzB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAA;KACpC;AAED;;;AAGG;AACI,IAAA,SAAS,CAAC,MAAmE,EAAA;QAClF,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAO,CAAC,CAAA;KAC5C;AAED;;;;AAIG;AACI,IAAA,wBAAwB,CAAC,YAAuD,EAAA;QACrF,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,YAAa,CAAC,CAAA;KACjE;AAED;;;;AAIG;AACI,IAAA,SAAS,CAAC,MAAiB,EAAA;QAChC,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAO,CAAC,CAAA;KAC5C;;AAGM,IAAA,UAAU,CAAC,OAAgD,EAAA;QAChE,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAQ,CAAC,CAAA;KAC9C;AAED;;;;AAIG;AACI,IAAA,QAAQ,CAAC,KAAgB,EAAA;QAC9B,IAAI,CAAC,kBAAkB,EAAE,CAAA;;QAEzB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAM,CAAC,CAAA;KAC1C;;IAGM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;KACvC;;IAGM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;KACtC;IAEM,cAAc,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAA;KACtC;IAEO,6BAA6B,GAAA;AACnC,QAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAI,UAAU,IAAG;AAChD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAA;AAC1D,gBAAA,OAAO,SAAS,CAAA;AACjB,aAAA;AAED,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;AAE1E,YAAA,OAAO,MAAM,GAAG,CAAC,WAAW,EAAE,CAAA;AAChC,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,UAAU,CAAA;KAClB;;IAGO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;YACzE,MAAM,KAAK,CACT,mFAAmF;AACjF,gBAAA,oEAAoE,CACvE,CAAA;AACF,SAAA;KACF;;yIApNU,4CAA4C,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5C,4CAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4CAA4C,EAiD7B,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAc,EAE7B,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,4CAA4C,8GCtFzD,8hBAaA,EAAA,MAAA,EAAA,CAAA,8OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,wLAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,4CAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kCAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;ADoC2B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;CAA+B,EAAA,4CAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;2FAd5C,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBAPxD,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAsC,EAG/B,eAAA,EAAA,uBAAuB,CAAC,MAAM,YACrC,kCAAkC,EAAA,QAAA,EAAA,8hBAAA,EAAA,MAAA,EAAA,CAAA,8OAAA,CAAA,EAAA,CAAA;iGAYnC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEmB,QAAQ,EAAA,CAAA;sBAAhC,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAQD,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAMH,OAAO,EAAA,CAAA;sBADV,KAAK;gBAea,YAAY,EAAA,CAAA;sBAA9B,MAAM;gBAEmD,eAAe,EAAA,CAAA;sBAAxE,SAAS;uBAAC,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGpD,uBAAuB,EAAA,CAAA;sBAD1B,SAAS;gBAAC,IAAA,EAAA,CAAA,4CAA4C,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAYrE,aAAa,EAAA,CAAA;sBADhB,WAAW;uBAAC,eAAe,CAAA;gBAI5B,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,OAAO,EAAE,CAAE,OAAO,CAAE,CAAA;gBAMlC,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,OAAO,EAAE,CAAE,QAAQ,CAAE,CAAA;;;ME7DxB,uBAAuB,CAAA;;oHAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,iBAxBhC,0BAA0B;QAC1B,2BAA2B;QAC3B,6CAA6C;QAC7C,+CAA+C;QAC/C,2BAA2B;QAC3B,4CAA4C;AAC5C,QAAA,4CAA4C,aAG5C,YAAY;QACZ,eAAe;QACf,mBAAmB;QACnB,iBAAiB;QACjB,iBAAiB;QACjB,sBAAsB;AACtB,QAAA,gBAAgB,aAGhB,0BAA0B;QAC1B,4CAA4C;QAC5C,4CAA4C;QAC5C,2BAA2B,CAAA,EAAA,CAAA,CAAA;AAGlB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAfhC,YAAY;QACZ,eAAe;QACf,mBAAmB;QACnB,iBAAiB;QACjB,iBAAiB;QACjB,sBAAsB;QACtB,gBAAgB,CAAA,EAAA,CAAA,CAAA;2FASP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA1BnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,0BAA0B;wBAC1B,2BAA2B;wBAC3B,6CAA6C;wBAC7C,+CAA+C;wBAC/C,2BAA2B;wBAC3B,4CAA4C;wBAC5C,4CAA4C;AAC7C,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,eAAe;wBACf,mBAAmB;wBACnB,iBAAiB;wBACjB,iBAAiB;wBACjB,sBAAsB;wBACtB,gBAAgB;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,0BAA0B;wBAC1B,4CAA4C;wBAC5C,4CAA4C;wBAC5C,2BAA2B;AAC5B,qBAAA;iBACF,CAAA;;;AC/BD;;;AAGG;MACU,4BAA4B,GAAG,IAAI,cAAc,CAAiC,8BAA8B,EAAC;AA8DxH,MAAO,wBAAyB,SAAQ,0BAA0B,CAAA;IAMtE,WACsC,CAAA,SAAiB,EACM,MAAuC,EAAA;AAElG,QAAA,KAAK,EAAE,CAAA;AAH6B,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAQ;AACM,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAiC;AALjF,QAAA,IAAU,CAAA,UAAA,GAAW,yBAAyB,CAAA;AAC9C,QAAA,IAAY,CAAA,YAAA,GAAW,CAAA,6BAAA,CAA+B,CAAA;AAOvE,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,EAAE,CAAA;KAC5B;IAEM,IAAI,GAAA;QACT,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;;AAEvC,YAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;AACrB,SAAA;QAED,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;AACxC,SAAA;;QAGD,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAC7D,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAA;AAC9C,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAA;AAC7C,SAAA;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC/C,QAAA,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAA;AAC/B,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;AACnB,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;AACnB,QAAA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAA;QAC3B,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAClD,QAAA,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAA;AACxC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAA;KAC7C;AAEO,IAAA,2BAA2B,CAAC,UAAuB,EAAA;QACzD,IAAI,CAAC,qBAAqB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YAC3D,MAAM,GAAG,GAAG,MAAa,CAAA;AACzB,YAAA,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,MAAK,EAAG,OAAO,EAAE,CAAA,EAAE,CAAA;AAE5C,YAAA,UAAU,CAAC,OAAO,GAAG,CAAC,KAAqB,KAAI;gBAC7C,MAAM,CAAC,KAAK,CAAC,CAAA;AACf,aAAC,CAAA;AACH,SAAC,CAAC,CAAA;KACH;IAEO,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,YAAA,MAAM,KAAK,CAAC,CAA8C,4CAAA,CAAA,CAAC,CAAA;AAC5D,SAAA;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAA;KAClC;AAES,IAAA,aAAa,CAAC,YAAoB,EAAA;QAC1C,MAAM,WAAW,GAAW,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,yCAAyC,CAAA;AACzF,QAAA,MAAM,WAAW,GAA4D;AAC3E,YAAA,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,WAAW;AACzC,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;AAC7B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;AACjC,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,KAAK,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvF,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO;SACzC,CAAA;AAED,QAAA,MAAM,MAAM,GAAW,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;;AAE5C,aAAA,MAAM,CAAC,CAAC,CAAS,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;;AAE9E,aAAA,MAAM,CAAC,CAAC,CAAS,KAAI;AACpB,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAC5B,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;AAClD,SAAC,CAAC;;AAED,aAAA,GAAG,CAAC,CAAC,CAAS,KAAI;AACjB,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;YAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,EAAoC,CAAA;AAC5G,SAAC,CAAC;AACD,aAAA,GAAG,CAAC,CAAC,KAAqC,KAAI;YAC7C,OAAO,CAAA,EAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAA,CAAE,CAAA;AACtC,SAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAA;AAEZ,QAAA,OAAO,CAAG,EAAA,WAAW,CAAI,CAAA,EAAA,MAAM,EAAE,CAAA;KAClC;;qHA7FU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAOzB,SAAS,EAAA,EAAA,EAAA,KAAA,EACG,4BAA4B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;yHARvC,wBAAwB,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;;8BAQN,MAAM;+BAAC,SAAS,CAAA;;8BAChB,QAAQ;;8BAAI,MAAM;+BAAC,4BAA4B,CAAA;;;;ACjFpD;;;;AAIG;AAEG,MAAO,8BAA+B,SAAQ,0BAA0B,CAAA;IAC5E,IAAI,GAAA;QACF,OAAO,KAAK,CAAC,MAAK;YAChB,IAAI,CAAE,MAAc,CAAC,MAAM,IAAI,CAAE,MAAc,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC3D,OAAO,UAAU,CAAC,IAAI,KAAK,CACzB,gFAAgF,CACjF,CAAC,CAAA;AACH,aAAA;AACD,YAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;AACtB,SAAC,CAAC,CAAA;KACH;;2HAVU,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+HAA9B,8BAA8B,EAAA,CAAA,CAAA;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C,UAAU;;;ACVX;;AAEG;;;;"}