react-iiif-vault 0.9.19 → 0.9.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/cjs/index.js +5 -5
- package/dist/bundle/cjs/index.js.map +1 -1
- package/dist/bundle/esm/index.mjs +8 -4
- package/dist/bundle/esm/index.mjs.map +1 -1
- package/dist/index.umd.js +17 -17
- package/dist/index.umd.js.map +1 -1
- package/dist/react17/cjs/index.js +5 -5
- package/dist/react17/cjs/index.js.map +1 -1
- package/dist/react17/esm/index.mjs +8 -4
- package/dist/react17/esm/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../node_modules/react-error-boundary/dist/react-error-boundary.esm.js","../../../src/context/ResourceContext.tsx","../../../src/context/VaultContext.tsx","../../../src/hooks/useVault.ts","../../../src/hooks/useExternalResource.ts","../../../src/hooks/useExternalManifest.ts","../../../src/context/ManifestContext.tsx","../../../src/context/CanvasContext.tsx","../../../src/hooks/useVaultSelector.ts","../../../src/context/VisibleCanvasContext.tsx","../../../src/hooks/useManifest.ts","../../../src/context/RangeContext.tsx","../../../src/future-helpers/ranges.ts","../../../src/future-helpers/sequences.ts","../../../src/hooks/useRange.ts","../../../src/viewers/SimpleViewerContext.hooks.ts","../../../src/viewers/SimpleViewerContext.tsx","../../../src/context/ContextBridge.tsx","../../../node_modules/@iiif/vault/dist/actions/esm/index.mjs","../../../src/hooks/useDispatch.ts","../../../src/hooks/useVirtualAnnotationPage.ts","../../../src/hooks/useVirtualAnnotationPageContext.tsx","../../../src/canvas-panel/render/DefaultCanvasFallback.tsx","../../../src/context/ViewerPresetContext.tsx","../../../src/context/PortalContext.tsx","../../../node_modules/react-dom/client.js","../../../src/canvas-panel/Viewer.tsx","../../../node_modules/@iiif/vault-helpers/dist/events/esm/events.mjs","../../../src/hooks/useResourceEvents.ts","../../../node_modules/@iiif/vault-helpers/dist/styles/esm/styles.mjs","../../../src/hooks/useStyles.ts","../../../node_modules/@iiif/vault-helpers/dist/annotation-targets/esm/annotation-targets.mjs","../../../src/hooks/useAnnotation.ts","../../../src/hooks/useCanvas.ts","../../../src/canvas-panel/render/Annotation.tsx","../../../src/canvas-panel/render/AnnotationPage.tsx","../../../src/canvas-panel/render/Image.tsx","../../../src/features/rendering-strategy/rendering-utils.ts","../../../src/hooks/useEnabledAnnotationPageIds.ts","../../../src/utility/flatten-annotation-page-ids.ts","../../../src/hooks/useAnnotationPageManager.ts","../../../src/hooks/useResources.ts","../../../src/context/ImageServiceLoaderContext.tsx","../../../src/hooks/useLoadImageService.ts","../../../src/hooks/usePaintingAnnotations.ts","../../../src/hooks/usePaintables.ts","../../../src/features/rendering-strategy/image-strategy.ts","../../../src/features/rendering-strategy/3d-strategy.ts","../../../src/features/rendering-strategy/audio-strategy.ts","../../../src/features/rendering-strategy/video-strategy.ts","../../../src/features/rendering-strategy/textual-content-strategy.ts","../../../src/hooks/useRenderingStrategy.ts","../../../src/hooks/useVaultEffect.ts","../../../node_modules/@iiif/vault-helpers/dist/thumbnail/esm/thumbnail.mjs","../../../src/hooks/useThumbnail.ts","../../../src/hooks/useSimpleMediaPlayer.ts","../../../src/context/MediaContext.tsx","../../../src/canvas-panel/render/Audio.tsx","../../../src/canvas-panel/render/Video.tsx","../../../src/canvas-panel/render/Model.tsx","../../../src/canvas-panel/render/CanvasBackground.tsx","../../../node_modules/@iiif/vault-helpers/dist/react-i18next/esm/react-i18next.mjs","../../../src/canvas-panel/render/Canvas.tsx","../../../src/canvas-panel/index.ts","../../../src/context/AnnotationContext.tsx","../../../src/context/AnnotationPageContext.tsx","../../../src/context/CollectionContext.tsx","../../../src/hooks/useAnnotationPage.ts","../../../src/hooks/useAnnotationsAtTime.ts","../../../src/hooks/useCanvasClock.ts","../../../src/hooks/useCanvasSubset.ts","../../../src/hooks/useCollection.ts","../../../src/hooks/useEventListener.ts","../../../src/hooks/useExistingVault.ts","../../../src/hooks/useExternalCollection.ts","../../../src/hooks/useImageService.ts","../../../src/hooks/useImageTile.ts","../../../src/hooks/useSearchService.ts","../../../src/hooks/useStyleHelper.ts"],"sourcesContent":["export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport * as React from 'react';\n\nvar changedArray = function changedArray(a, b) {\n if (a === void 0) {\n a = [];\n }\n\n if (b === void 0) {\n b = [];\n }\n\n return a.length !== b.length || a.some(function (item, index) {\n return !Object.is(item, b[index]);\n });\n};\n\nvar initialState = {\n error: null\n};\n\nvar ErrorBoundary = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ErrorBoundary, _React$Component);\n\n function ErrorBoundary() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n _this.state = initialState;\n\n _this.resetErrorBoundary = function () {\n var _this$props;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this.props.onReset == null ? void 0 : (_this$props = _this.props).onReset.apply(_this$props, args);\n\n _this.reset();\n };\n\n return _this;\n }\n\n ErrorBoundary.getDerivedStateFromError = function getDerivedStateFromError(error) {\n return {\n error: error\n };\n };\n\n var _proto = ErrorBoundary.prototype;\n\n _proto.reset = function reset() {\n this.setState(initialState);\n };\n\n _proto.componentDidCatch = function componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n\n (_this$props$onError = (_this$props2 = this.props).onError) == null ? void 0 : _this$props$onError.call(_this$props2, error, info);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n var error = this.state.error;\n var resetKeys = this.props.resetKeys; // There's an edge case where if the thing that triggered the error\n // happens to *also* be in the resetKeys array, we'd end up resetting\n // the error boundary immediately. This would likely trigger a second\n // error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call\n // of cDU after the error is set\n\n if (error !== null && prevState.error !== null && changedArray(prevProps.resetKeys, resetKeys)) {\n var _this$props$onResetKe, _this$props3;\n\n (_this$props$onResetKe = (_this$props3 = this.props).onResetKeysChange) == null ? void 0 : _this$props$onResetKe.call(_this$props3, prevProps.resetKeys, resetKeys);\n this.reset();\n }\n };\n\n _proto.render = function render() {\n var error = this.state.error;\n var _this$props4 = this.props,\n fallbackRender = _this$props4.fallbackRender,\n FallbackComponent = _this$props4.FallbackComponent,\n fallback = _this$props4.fallback;\n\n if (error !== null) {\n var _props = {\n error: error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n\n if ( /*#__PURE__*/React.isValidElement(fallback)) {\n return fallback;\n } else if (typeof fallbackRender === 'function') {\n return fallbackRender(_props);\n } else if (FallbackComponent) {\n return /*#__PURE__*/React.createElement(FallbackComponent, _props);\n } else {\n throw new Error('react-error-boundary requires either a fallback, fallbackRender, or FallbackComponent prop');\n }\n }\n\n return this.props.children;\n };\n\n return ErrorBoundary;\n}(React.Component);\n\nfunction withErrorBoundary(Component, errorBoundaryProps) {\n var Wrapped = function Wrapped(props) {\n return /*#__PURE__*/React.createElement(ErrorBoundary, errorBoundaryProps, /*#__PURE__*/React.createElement(Component, props));\n }; // Format for display in DevTools\n\n\n var name = Component.displayName || Component.name || 'Unknown';\n Wrapped.displayName = \"withErrorBoundary(\" + name + \")\";\n return Wrapped;\n}\n\nfunction useErrorHandler(givenError) {\n var _React$useState = React.useState(null),\n error = _React$useState[0],\n setError = _React$useState[1];\n\n if (givenError != null) throw givenError;\n if (error != null) throw error;\n return setError;\n}\n/*\neslint\n @typescript-eslint/sort-type-union-intersection-members: \"off\",\n @typescript-eslint/no-throw-literal: \"off\",\n @typescript-eslint/prefer-nullish-coalescing: \"off\"\n*/\n\nexport { ErrorBoundary, useErrorHandler, withErrorBoundary };\n","import React, { ReactNode, useContext, useMemo } from 'react';\n\nconst defaultResourceContext = {\n collection: undefined,\n manifest: undefined,\n range: undefined,\n canvas: undefined,\n annotation: undefined,\n annotationPage: undefined,\n};\n\nexport type ResourceContextType = {\n collection?: string;\n manifest?: string;\n range?: string;\n canvas?: string;\n annotation?: string;\n annotationPage?: string;\n};\n\nexport const ResourceReactContext = React.createContext<ResourceContextType>(defaultResourceContext);\n\nexport const useResourceContext = () => {\n return useContext(ResourceReactContext);\n};\n\nexport function ResourceProvider({ value, children }: { value: ResourceContextType; children: ReactNode }) {\n const parentContext = useResourceContext();\n const newContext = useMemo(() => {\n return {\n ...parentContext,\n ...value,\n };\n }, [value, parentContext]);\n\n return <ResourceReactContext.Provider value={newContext}>{children}</ResourceReactContext.Provider>;\n}\n","import React, { ReactElement, ReactNode, useState } from 'react';\nimport { Vault, VaultOptions, globalVault } from '@iiif/vault';\nimport { ResourceContextType, ResourceProvider } from './ResourceContext';\n\nexport const ReactVaultContext = React.createContext<{\n vault: Vault | null;\n setVaultInstance: (vault: Vault) => void;\n}>({\n vault: null,\n setVaultInstance: (vault: Vault) => {\n // Do nothing.\n },\n});\n\nexport function VaultProvider({\n vault,\n vaultOptions,\n useGlobal,\n resources,\n children,\n}: {\n vault?: Vault;\n useGlobal?: boolean;\n vaultOptions?: VaultOptions;\n resources?: ResourceContextType;\n children: ReactNode;\n}) {\n const [vaultInstance, setVaultInstance] = useState<Vault>(() => {\n if (vault) {\n return vault;\n }\n if (useGlobal) {\n return globalVault(vaultOptions);\n }\n if (vaultOptions) {\n return new Vault(vaultOptions);\n }\n return new Vault();\n });\n\n return (\n <ReactVaultContext.Provider value={{ vault: vaultInstance, setVaultInstance }}>\n <ResourceProvider value={resources || {}}>{children}</ResourceProvider>\n </ReactVaultContext.Provider>\n );\n}\n","import { ReactVaultContext } from '../context/VaultContext';\nimport { useContext } from 'react';\nimport { Vault } from '@iiif/vault';\n\nexport const useVault = (): Vault => {\n const { vault } = useContext(ReactVaultContext);\n\n if (vault === null) {\n throw new Error('Vault not found. Ensure you have your provider set up correctly.');\n }\n\n return vault as Vault;\n};\n","import { useVault } from './useVault';\nimport { useEffect, useMemo, useState } from 'react';\n\nexport type ResourceRequestOptions = {\n noCache?: boolean;\n};\n\nexport function useExternalResource<T extends { id: string }>(\n idOrRef: string | { id: string; type: string },\n { noCache = false }: ResourceRequestOptions = {}\n): {\n id: string;\n requestId: string;\n isLoaded: boolean;\n error: any;\n cached: boolean;\n resource?: T;\n} {\n const id = typeof idOrRef === 'string' ? idOrRef : idOrRef.id;\n const vault = useVault();\n const [realId, setRealId] = useState(id);\n const [error, setError] = useState<Error | undefined>(undefined);\n const initialData = useMemo(() => {\n return vault.get<T>(id, { skipSelfReturn: true }) || undefined;\n }, [id, vault]);\n const [resource, setResource] = useState<T | undefined>(initialData);\n\n useEffect(() => {\n (async () => {\n try {\n const fetchedResource = initialData && !noCache ? initialData : await vault.load<T>(id);\n const _realId = fetchedResource ? fetchedResource.id || (fetchedResource as any)['@id'] : null;\n if (fetchedResource && realId !== _realId) {\n setRealId(_realId);\n }\n\n setResource(fetchedResource);\n } catch (err) {\n setError(err as Error);\n }\n })();\n }, [id, noCache]);\n\n return {\n isLoaded: !!resource,\n id: realId,\n requestId: id,\n error,\n resource,\n cached: !!(resource && resource === initialData),\n };\n}\n","import { ManifestNormalized } from '@iiif/presentation-3';\nimport { ResourceRequestOptions, useExternalResource } from './useExternalResource';\n\nexport function useExternalManifest(\n idOrRef: string | { id: string; type: string },\n options?: ResourceRequestOptions\n): {\n id: string;\n requestId: string;\n isLoaded: boolean;\n cached?: boolean;\n error: any;\n manifest?: ManifestNormalized;\n} {\n const { id, isLoaded, error, resource, requestId, cached } = useExternalResource<ManifestNormalized>(\n idOrRef,\n options\n );\n\n return { id, isLoaded, error, manifest: resource, requestId, cached };\n}\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function ManifestContext({ manifest, children }: { manifest: string; children: ReactNode }) {\n return <ResourceProvider value={{ manifest }}>{children}</ResourceProvider>;\n}\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function CanvasContext({ canvas, children }: { canvas: string; children: ReactNode }) {\n return <ResourceProvider value={{ canvas }}>{children}</ResourceProvider>;\n}\n","import { useVault } from './useVault';\nimport { IIIFStore, Vault } from '@iiif/vault';\nimport { useEffect, useState } from 'react';\n\nexport function useVaultSelector<T>(selector: (state: IIIFStore, vault: Vault) => T, deps: any[] = []) {\n const vault = useVault();\n const [selectedState, setSelectedState] = useState<T>(() => selector(vault.getState(), vault));\n\n useEffect(() => {\n return vault.subscribe(\n (s) => selector(s, vault),\n (s) => {\n setSelectedState(s);\n },\n false\n );\n }, deps);\n\n return selectedState as T;\n}\n","import { useContext } from 'react';\nimport React from 'react';\nimport { CanvasNormalized } from '@iiif/presentation-3';\nimport { useVaultSelector } from '../hooks/useVaultSelector';\n\nexport const VisibleCanvasReactContext = React.createContext<string[]>([]);\n\nexport function useVisibleCanvases(): CanvasNormalized[] {\n const ids = useContext(VisibleCanvasReactContext);\n\n return useVaultSelector<CanvasNormalized[]>(\n (state) => {\n return ids.map((id) => state.iiif.entities.Canvas[id]).filter(Boolean);\n },\n [ids]\n );\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { ManifestNormalized } from '@iiif/presentation-3';\nimport { useVault } from './useVault';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useManifest(options?: { id: string }): ManifestNormalized | undefined;\nexport function useManifest<T>(\n options?: { id: string; selector: (manifest: ManifestNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useManifest<T = ManifestNormalized>(\n options: {\n id?: string;\n selector?: (manifest: ManifestNormalized) => T;\n } = {},\n deps: any[] = []\n): ManifestNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const vault = useVault();\n const manifestId = id ? id : ctx.manifest;\n\n const manifest = useVaultSelector(\n (s) => (manifestId ? s.iiif.entities.Manifest[manifestId] : undefined),\n [manifestId]\n );\n\n return useMemo(() => {\n if (!manifest) {\n return undefined;\n }\n if (selector) {\n return selector(manifest);\n }\n return manifest;\n }, [manifest, selector, ...deps]);\n}\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function RangeContext({ range, children }: { range: string; children: ReactNode }) {\n return <ResourceProvider value={{ range }}>{children}</ResourceProvider>;\n}\n","import { Vault } from '@iiif/vault';\nimport { ManifestNormalized, RangeNormalized, Reference } from '@iiif/presentation-3';\n\nexport function findFirstCanvasFromRange(vault: Vault, range: RangeNormalized): null | Reference<'Canvas'> {\n for (const inner of range.items) {\n if (inner.type === 'Canvas') {\n return inner as Reference<'Canvas'>;\n }\n if (inner.type === 'Range') {\n const found = findFirstCanvasFromRange(vault, vault.get(inner));\n if (found) {\n return found;\n }\n }\n }\n return null;\n}\n\nexport function findAllCanvasesInRange(vault: Vault, range: RangeNormalized): Array<Reference<'Canvas'>> {\n const found: Reference<'Canvas'>[] = [];\n for (const inner of range.items) {\n if (inner.type === 'Canvas') {\n if (inner.id.indexOf('#') !== -1) {\n found.push({ id: inner.id.split('#')[0], type: 'Canvas' });\n } else {\n found.push(inner as Reference<'Canvas'>);\n }\n }\n if (inner.type === 'Range') {\n found.push(...findAllCanvasesInRange(vault, vault.get(inner)));\n }\n if ((inner as any).type === 'SpecificResource') {\n const sourceId = typeof (inner as any).source === 'string' ? (inner as any).source : (inner as any).source.id;\n found.push({ id: sourceId, type: 'Canvas' });\n }\n }\n return found;\n}\n\nexport function findManifestSelectedRange(\n vault: Vault,\n manifest: ManifestNormalized,\n canvasId: string\n): null | RangeNormalized {\n for (const range of manifest.structures) {\n const found = findSelectedRange(vault, vault.get(range), canvasId);\n if (found) {\n return found;\n }\n }\n\n return null;\n}\n\nexport function findSelectedRange(vault: Vault, range: RangeNormalized, canvasId: string): null | RangeNormalized {\n for (const inner of range.items) {\n const parsedId = inner.id?.split('#')[0];\n if ((inner as any).type === 'SpecificResource' && (inner as any).source === canvasId) {\n return range;\n }\n if (inner.type === 'Canvas' && canvasId === parsedId) {\n return range;\n }\n if (inner.type === 'Range') {\n const found = findSelectedRange(vault, vault.get(inner), canvasId);\n if (found) {\n return found;\n }\n }\n }\n return null;\n}\n","import { CanvasNormalized, ManifestNormalized, RangeNormalized, Reference } from '@iiif/presentation-3';\nimport { Vault } from '@iiif/vault';\nimport { findAllCanvasesInRange } from './ranges';\n\n/**\n * Get visible canvases from canvas ID\n *\n * This function returns a list of canvas references that should all be displayed\n * when the passed canvasId is visible. This should work for individual items,\n * 2-up paged view and continuous (scrolls).\n *\n * The options are listed below (from IIIF docs)\n *\n * - `unordered` - Valid on Collections, Manifests and Ranges. The Canvases included in resources that have this behavior\n * have no inherent order, and user interfaces should avoid implying an order to the user. Disjoint with individuals,\n * continuous, and paged.\n *\n * - `individuals` - Valid on Collections, Manifests, and Ranges. For Collections that have this behavior, each of the\n * included Manifests are distinct objects in the given order. For Manifests and Ranges, the included Canvases are\n * distinct views, and should not be presented in a page-turning interface. This is the default layout behavior if\n * not specified. Disjoint with unordered, continuous, and paged.\n *\n * - `continuous` Valid on Collections, Manifests and Ranges, which include Canvases that have at least height and\n * width dimensions. Canvases included in resources that have this behavior are partial views and an appropriate\n * rendering might display all of the Canvases virtually stitched together, such as a long scroll split into\n * sections. This behavior has no implication for audio resources. The viewingDirection of the Manifest will\n * determine the appropriate arrangement of the Canvases. Disjoint with unordered, individuals and paged.\n *\n * - `paged` Valid on Collections, Manifests and Ranges, which include Canvases that have at least height and width\n * dimensions. Canvases included in resources that have this behavior represent views that should be presented in\n * a page-turning interface if one is available. The first canvas is a single view (the first recto) and thus the\n * second canvas likely represents the back of the object in the first canvas. If this is not the case, see the\n * behavior value non-paged. Disjoint with unordered, individuals, continuous, facing-pages and non-paged.\n *\n */\nexport function getVisibleCanvasesFromCanvasId(\n vault: Vault,\n manifestOrRange: ManifestNormalized | RangeNormalized,\n canvasId: string | null,\n preventPaged = false\n): Reference<'Canvas'>[] {\n const behavior = manifestOrRange.behavior;\n const fullCanvas = canvasId ? vault.get<CanvasNormalized>(canvasId) : null;\n if (!fullCanvas) {\n return [];\n }\n\n const canvasBehavior = fullCanvas.behavior;\n const isPaged = preventPaged ? false : behavior.includes('paged');\n const isContinuous = isPaged ? false : behavior.includes('continuous');\n const isIndividuals = isPaged || isContinuous ? false : behavior.includes('individuals');\n const isCanvasFacingPages = canvasBehavior.includes('facing-pages');\n const isCanvasNonPaged = canvasBehavior.includes('non-paged');\n\n // Individuals should just be the default.\n if (isCanvasFacingPages || isCanvasNonPaged || isIndividuals || preventPaged) {\n return [{ id: fullCanvas.id, type: 'Canvas' }];\n }\n\n const [manifestItems, ordering] = getManifestSequence(vault, manifestOrRange);\n\n // Continuous should just return all items together.\n if (isContinuous) {\n return manifestItems;\n }\n\n const canvasIndex = manifestItems.findIndex((r) => r.id === canvasId);\n if (canvasIndex === -1) {\n return [];\n }\n\n for (const indexes of ordering) {\n if (indexes.includes(canvasIndex)) {\n return indexes.map((index) => manifestItems[index]);\n }\n }\n\n return [{ id: fullCanvas.id, type: 'Canvas' }];\n}\n\nexport function getManifestSequence(\n vault: Vault,\n manifestOrRange: ManifestNormalized | RangeNormalized,\n { disablePaging }: { disablePaging?: boolean } = {}\n): [Reference<'Canvas'>[], number[][]] {\n const behavior = manifestOrRange.behavior;\n const isPaged = behavior.includes('paged');\n const isContinuous = isPaged ? false : behavior.includes('continuous');\n const isIndividuals = isPaged || isContinuous ? false : behavior.includes('individuals');\n const manifestItems =\n manifestOrRange.type === 'Manifest' ? manifestOrRange.items : findAllCanvasesInRange(vault, manifestOrRange);\n\n // Continuous should just return all items together.\n if (isContinuous) {\n return [manifestItems, [manifestItems.map((_, index) => index)]];\n }\n\n // Individuals should just be the default.\n if (isIndividuals || !isPaged || disablePaging) {\n return [manifestItems, manifestItems.map((_, index) => [index])];\n }\n\n // This is the tricky case.\n const ordering: number[][] = [];\n let currentOrdering: number[] = [];\n\n const flush = () => {\n if (currentOrdering.length) {\n ordering.push([...currentOrdering]);\n currentOrdering = [];\n }\n };\n for (let i = 0; i < manifestItems.length; i++) {\n const canvas = vault.get<CanvasNormalized>(manifestItems[i]);\n if (i === 0 || canvas.behavior.includes('facing-pages')) {\n // Flush and push a single.\n flush();\n ordering.push([i]);\n continue;\n }\n if (canvas.behavior.includes('non-paged')) {\n // Skip over these completely.\n continue;\n }\n\n currentOrdering.push(i);\n\n if (currentOrdering.length > 1) {\n flush();\n }\n }\n\n if (currentOrdering.length) {\n flush();\n }\n\n return [manifestItems, ordering];\n}\n","// This is valid under a range context.\nimport { useResourceContext } from '../context/ResourceContext';\nimport { RangeNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useRange(options?: { id: string }): RangeNormalized | undefined;\nexport function useRange<T>(\n options?: { id: string; selector: (range: RangeNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useRange<T = RangeNormalized>(\n options: {\n id?: string;\n selector?: (range: RangeNormalized) => T;\n } = {},\n deps: any[] = []\n): RangeNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const rangeId = id ? id : ctx.range;\n\n const range = useVaultSelector((s) => (rangeId ? s.iiif.entities.Range[rangeId] : undefined), [rangeId]);\n\n return useMemo(() => {\n if (!range) {\n return undefined;\n }\n if (selector) {\n return selector(range);\n }\n return range;\n }, [range, selector, ...deps]);\n}\n","import { getManifestSequence } from '../future-helpers/sequences';\nimport { useManifest } from '../hooks/useManifest';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useRange } from '../hooks/useRange';\nimport { useVault } from '../hooks/useVault';\n\nexport function useCanvasSequence({ startCanvas, disablePaging }: { startCanvas?: string; disablePaging?: boolean }) {\n const vault = useVault();\n const manifest = useManifest();\n const range = useRange();\n const [cursor, setCursor] = useState<number>(undefined as any);\n const rangeOrManifest = range ? range : manifest;\n\n if (!rangeOrManifest) {\n throw new Error('Nothing selected');\n }\n\n const [items, initialSequence] = useMemo(\n () => getManifestSequence(vault, rangeOrManifest, { disablePaging }),\n [vault, rangeOrManifest]\n );\n\n const setCanvasIndex = useCallback(\n (index: number) => {\n const foundSequence = initialSequence.findIndex((i) => i.includes(index));\n setCursor(foundSequence === -1 ? 0 : foundSequence);\n },\n [items, initialSequence]\n );\n\n const setCanvasId = useCallback(\n (id: string) => {\n const foundIndex = items.findIndex((i) => i.id === id);\n if (foundIndex !== -1) {\n setCanvasIndex(foundIndex);\n } else {\n setCursor(0);\n }\n },\n [items, initialSequence]\n );\n\n const next = useCallback(() => {\n setCursor((i) => {\n if (i >= initialSequence.length) {\n return i;\n }\n return i + 1;\n });\n }, [initialSequence]);\n\n const previous = useCallback(() => {\n setCursor((i) => {\n if (i <= 0) {\n return 0;\n }\n return i - 1;\n });\n }, [initialSequence]);\n\n // Need to set an initial cursor from the canvasId (if it's valid)\n if (typeof cursor === 'undefined') {\n if (startCanvas) {\n setCanvasId(startCanvas);\n } else {\n setCursor(0);\n }\n }\n\n return {\n visibleItems: initialSequence[cursor]?.map((idx) => items[idx].id) || [],\n cursor,\n items,\n sequence: initialSequence,\n setSequenceIndex: setCursor,\n setCanvasIndex,\n setCanvasId,\n next,\n previous,\n };\n}\n","import React, { ReactNode, useCallback, useContext, useEffect } from 'react';\n/**\n * Simple viewer context\n * *****************************************************************************\n *\n * This will be the context to use to get a basic IIIF viewer up and running.\n * It will not focus on having compatibility with the full range of IIIF\n * resources, instead offering a viewer for a Manifest, cycling through canvases\n * while ignoring the paged/facing-pages/continuous behaviors.\n *\n * There will not be support for canvas-on-canvas annotations. Annotations will\n * be filtered, giving details of the canvas space and images to be annotated\n * onto that space. The demo implementation of this viewer will use\n * OpenSeadragon to display.\n *\n * Navigation functions will include the basics:\n * - nextCanvas()\n * - previousCanvas()\n * - goToCanvas(id)\n * - goToCanvasIndex(idx)\n * - goToFirstCanvas()\n * - goToLastCanvas()\n *\n * It will take in only a Manifest ID and will load that Manifest when the\n * context loads.\n *\n * There will be no support for external or embedded annotation lists, although\n * you can set up a nested context to support this.\n *\n * There will be no support for ranges in this view.\n *\n * To use this component, first you will need the provider:\n * import { SimpleViewerProvider } from '...';\n *\n * <SimpleViewerProvider id=\"http://example.org/manifest.json\">\n * <CustomComponent />\n * </SimpleViewerProvider>\n *\n * This is in addition to the core Vault context further up the tree.\n *\n * In components that you want to use parts of the state you can grab the hooks\n * from this file.\n *\n * import { useSimpleViewer } from '...';\n *\n * And use them in your components to get the actions.\n *\n * function NextButton() {\n * const { nextCanvas } = useSimpleViewer();\n *\n * return <button onClick={nextCanvas}>Next</button>;\n * }\n *\n * Since this is a single-context, there is only ever one manifest, canvas and\n * annotation list. You can access the current resource using the normal hooks.\n *\n * function CanvasMetadata() {\n * const metadata = useCanvas(metadataSelector);\n *\n * return <div> ... </div>\n * }\n *\n * So long as this is inside the provider, it will have the correct context.\n */\nimport { createContext, FC, useMemo, useState } from 'react';\nimport { useExternalManifest } from '../hooks/useExternalManifest';\nimport { ManifestContext } from '../context/ManifestContext';\nimport { CanvasContext } from '../context/CanvasContext';\nimport { VisibleCanvasReactContext } from '../context/VisibleCanvasContext';\nimport { useManifest } from '../hooks/useManifest';\nimport { SimpleViewerContext, SimpleViewerProps } from './SimpleViewerContext.types';\nimport { RangeContext } from '../context/RangeContext';\nimport { useCanvasSequence } from './SimpleViewerContext.hooks';\n\nconst noop = () => {\n //\n};\n\nexport const SimpleViewerReactContext = createContext<SimpleViewerContext>({\n setCurrentCanvasId: noop,\n setCurrentCanvasIndex: noop,\n nextCanvas: noop,\n previousCanvas: noop,\n items: [],\n sequence: [],\n setSequenceIndex: noop,\n currentSequenceIndex: 0,\n});\n\nexport function InnerViewerProvider(props: SimpleViewerProps) {\n const manifest = useManifest();\n const { cursor, visibleItems, next, sequence, items, setCanvasIndex, setCanvasId, previous, setSequenceIndex } =\n useCanvasSequence({\n startCanvas: props.startCanvas,\n disablePaging: props.pagingEnabled === false,\n });\n\n const ctx = useMemo(\n () =>\n ({\n sequence,\n items,\n // Extra functions.\n setCurrentCanvasId: setCanvasId,\n nextCanvas: next,\n previousCanvas: previous,\n totalCanvases: items.length,\n setCurrentCanvasIndex: setCanvasIndex,\n setSequenceIndex: setSequenceIndex,\n currentSequenceIndex: cursor,\n } as SimpleViewerContext),\n [sequence, items, setCanvasId, next, previous, items, setCanvasIndex, setSequenceIndex, cursor]\n );\n\n if (!manifest) {\n console.warn('The manifest passed to the provider is not a valid IIIF manifest.');\n return <div>Sorry, something went wrong.</div>;\n }\n\n return (\n <SimpleViewerReactContext.Provider value={ctx}>\n <VisibleCanvasReactContext.Provider value={visibleItems}>\n <CanvasContext canvas={visibleItems[0]}>{props.children}</CanvasContext>\n </VisibleCanvasReactContext.Provider>\n </SimpleViewerReactContext.Provider>\n );\n}\n\nexport function SimpleViewerProvider(props: SimpleViewerProps) {\n const manifest = useExternalManifest(props.manifest);\n\n if (!manifest) {\n console.warn('The manifest passed to the provider is not a valid IIIF manifest.');\n return <div>Sorry, something went wrong.</div>;\n }\n\n if (!manifest.isLoaded) {\n return <div>Loading...</div>;\n }\n\n const inner = <InnerViewerProvider {...props}>{props.children}</InnerViewerProvider>;\n\n return (\n <ManifestContext manifest={manifest.id}>\n {props.rangeId ? <RangeContext range={props.rangeId}>{inner}</RangeContext> : inner}\n </ManifestContext>\n );\n}\n\nexport function useSimpleViewer() {\n return useContext(SimpleViewerReactContext);\n}\n","import React, { ReactNode, useContext } from 'react';\nimport { ResourceReactContext } from './ResourceContext';\nimport { ReactVaultContext, VaultProvider } from './VaultContext';\nimport { SimpleViewerReactContext } from '../viewers/SimpleViewerContext';\nimport { VisibleCanvasReactContext } from './VisibleCanvasContext';\n\nexport function useContextBridge() {\n return {\n VaultContext: useContext(ReactVaultContext),\n ResourceContext: useContext(ResourceReactContext),\n SimpleViewerReactContext: useContext(SimpleViewerReactContext),\n VisibleCanvasReactContext: useContext(VisibleCanvasReactContext),\n };\n}\n\nexport function ContextBridge(props: { bridge: ReturnType<typeof useContextBridge>; children: ReactNode }) {\n return (\n <VaultProvider vault={props.bridge.VaultContext.vault || undefined} resources={props.bridge.ResourceContext}>\n <VisibleCanvasReactContext.Provider value={props.bridge.VisibleCanvasReactContext}>\n <SimpleViewerReactContext.Provider value={props.bridge.SimpleViewerReactContext}>\n {props.children}\n </SimpleViewerReactContext.Provider>\n </VisibleCanvasReactContext.Provider>\n </VaultProvider>\n );\n}\n","import { createAction } from 'typesafe-actions';\n\nconst IMPORT_ENTITIES = \"@iiif/IMPORT_ENTITIES\";\nconst MODIFY_ENTITY_FIELD = \"@iiif/MODIFY_ENTITY_FIELD\";\nconst REORDER_ENTITY_FIELD = \"@iiif/REORDER_ENTITY_FIELD\";\nconst ADD_REFERENCE = \"@iiif/ADD_REFERENCE\";\nconst REMOVE_REFERENCE = \"@iiif/REMOVE_REFERENCE\";\nconst importEntities = createAction(IMPORT_ENTITIES)();\nconst modifyEntityField = createAction(MODIFY_ENTITY_FIELD)();\nconst reorderEntityField = createAction(REORDER_ENTITY_FIELD)();\nconst addReference = createAction(ADD_REFERENCE)();\nconst removeReference = createAction(REMOVE_REFERENCE)();\nconst entityActions = { importEntities, modifyEntityField, reorderEntityField, addReference, removeReference };\n\nconst ADD_MAPPING = \"@iiif/ADD_MAPPING\";\nconst ADD_MAPPINGS = \"@iiif/ADD_MAPPINGS\";\nconst addMapping = createAction(ADD_MAPPING)();\nconst addMappings = createAction(ADD_MAPPINGS)();\nconst mappingActions = { addMapping, addMappings };\n\nconst SET_META_VALUE = \"@iiif/SET_META_VALUE\";\nconst SET_META_VALUE_DYNAMIC = \"@iiif/SET_META_VALUE_DYNAMIC\";\nconst UNSET_META_VALUE = \"@iiif/UNSET_META_VALUE\";\nconst setMetaValue = createAction(SET_META_VALUE)();\nconst setMetaValueDynamic = createAction(SET_META_VALUE_DYNAMIC)();\nconst unsetMetaValue = createAction(UNSET_META_VALUE)();\nconst metaActions = {\n setMetaValue,\n setMetaValueDynamic,\n unsetMetaValue\n};\n\nconst RESOURCE_ERROR = \"RESOURCE_ERROR\";\nconst RESOURCE_LOADING = \"RESOURCE_LOADING\";\nconst RESOURCE_READY = \"RESOURCE_READY\";\nconst REQUEST_RESOURCE = \"@iiif/REQUEST_RESOURCE\";\nconst REQUEST_ERROR = \"@iiif/REQUEST_ERROR\";\nconst REQUEST_MISMATCH = \"@iiif/REQUEST_MISMATCH\";\nconst REQUEST_COMPLETE = \"@iiif/REQUEST_COMPLETE\";\nconst REQUEST_OFFLINE_RESOURCE = \"@iiif/REQUEST_OFFLINE_RESOURCE\";\nconst requestResource = createAction(REQUEST_RESOURCE)();\nconst requestError = createAction(REQUEST_ERROR)();\nconst requestMismatch = createAction(REQUEST_MISMATCH)();\nconst requestComplete = createAction(REQUEST_COMPLETE)();\nconst requestOfflineResource = createAction(REQUEST_OFFLINE_RESOURCE)();\nconst requestActions = {\n requestResource,\n requestError,\n requestMismatch,\n requestComplete,\n requestOfflineResource\n};\n\nconst BATCH_ACTIONS = \"@iiif/BATCH\";\nconst BATCH_IMPORT = \"@iiif/BATCH_IMPORT\";\nconst batchActions = createAction(BATCH_ACTIONS)();\nconst batchImport = createAction(BATCH_IMPORT)();\n\nexport { ADD_MAPPING, ADD_MAPPINGS, ADD_REFERENCE, BATCH_ACTIONS, BATCH_IMPORT, IMPORT_ENTITIES, MODIFY_ENTITY_FIELD, REMOVE_REFERENCE, REORDER_ENTITY_FIELD, REQUEST_COMPLETE, REQUEST_ERROR, REQUEST_MISMATCH, REQUEST_OFFLINE_RESOURCE, REQUEST_RESOURCE, RESOURCE_ERROR, RESOURCE_LOADING, RESOURCE_READY, SET_META_VALUE, SET_META_VALUE_DYNAMIC, UNSET_META_VALUE, addMapping, addMappings, addReference, batchActions, batchImport, entityActions, importEntities, mappingActions, metaActions, modifyEntityField, removeReference, reorderEntityField, requestActions, requestComplete, requestError, requestMismatch, requestOfflineResource, requestResource };\n","import { useVault } from './useVault';\nimport { useMemo } from 'react';\nimport { ReduxStore } from '@iiif/vault';\n\nexport function useDispatch(): ReduxStore['dispatch'] {\n const vault = useVault();\n const store = vault.getStore();\n\n return useMemo(() => {\n return (action: any) => store.dispatch(action);\n }, [store]);\n}\n","import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';\nimport { Annotation, AnnotationNormalized, AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { useVault } from './useVault';\nimport { useVaultSelector } from './useVaultSelector';\nimport { entityActions } from '@iiif/vault/actions';\nimport { useDispatch } from './useDispatch';\nimport { Vault } from '@iiif/vault';\n\nexport interface VaultActivatedAnnotation {\n __vault?: Vault;\n bindToVault(vault: Vault): void;\n source: string | { id: string };\n}\n\nfunction isVaultActivated(obj: any): obj is VaultActivatedAnnotation {\n return typeof obj !== 'string' && obj && obj.bindToVault;\n}\n\nexport function useVirtualAnnotationPage() {\n const vault = useVault();\n const sources = useRef<Record<any, any>>([]);\n const dispatch = useDispatch();\n const virtualId = useMemo(() => {\n return `vault://annotation-page/${new Date().getTime()}/${Math.round(Math.random() * 1000000000).toString(16)}`;\n }, []);\n\n useLayoutEffect(() => {\n const page: AnnotationPageNormalized = {\n id: virtualId,\n type: 'AnnotationPage',\n behavior: [],\n motivation: null,\n label: null,\n thumbnail: [],\n summary: null,\n requiredStatement: null,\n metadata: [],\n rights: null,\n provider: [],\n items: [],\n seeAlso: [],\n homepage: [],\n logo: [],\n rendering: [],\n service: [],\n };\n\n dispatch(\n entityActions.importEntities({\n entities: {\n AnnotationPage: {\n [page.id]: page,\n },\n },\n })\n );\n }, [virtualId]);\n\n const fullPage: AnnotationPageNormalized | null = useVaultSelector(\n (state) => (virtualId ? state.iiif.entities.AnnotationPage[virtualId] : null),\n [virtualId]\n );\n\n const addAnnotation = useCallback(\n (id: string | Annotation | VaultActivatedAnnotation | AnnotationNormalized, atIndex?: number) => {\n if (virtualId) {\n if (isVaultActivated(id)) {\n const display = id;\n if (!display.__vault) {\n // First bind to vault.\n display.bindToVault(vault);\n }\n id = typeof display.source === 'string' ? display.source : display.source.id;\n sources.current[id] = display;\n } else if (typeof id !== 'string') {\n id = id.id;\n }\n\n const full: AnnotationPageNormalized = vault.get({ id: virtualId, type: 'AnnotationPage' });\n const annotation: AnnotationNormalized = vault.get({ id, type: 'Annotation' });\n if (full && annotation) {\n if (!full.items.find((r: any) => r.id === annotation.id)) {\n dispatch(\n entityActions.addReference({\n id: virtualId,\n type: 'AnnotationPage',\n key: 'items',\n reference: {\n id,\n type: 'Annotation',\n },\n index: atIndex,\n })\n );\n }\n }\n }\n },\n [virtualId]\n );\n const removeAnnotation = useCallback(\n (id: string | Annotation | VaultActivatedAnnotation | AnnotationNormalized) => {\n if (virtualId) {\n if (isVaultActivated(id)) {\n id = typeof id.source === 'string' ? id.source : id.source.id;\n } else if (typeof id !== 'string') {\n id = id.id;\n }\n\n if (sources.current[id]) {\n sources.current[id].beforeRemove();\n }\n\n const full: AnnotationPageNormalized = vault.get({ id: virtualId, type: 'AnnotationPage' });\n if (full) {\n dispatch(\n entityActions.removeReference({\n id: virtualId,\n type: 'AnnotationPage',\n key: 'items',\n reference: {\n id,\n type: 'Annotation',\n },\n })\n );\n }\n }\n },\n [virtualId]\n );\n\n return [\n fullPage,\n {\n addAnnotation,\n removeAnnotation,\n },\n ] as const;\n}\n","import { Annotation, AnnotationNormalized, AnnotationPageNormalized } from '@iiif/presentation-3';\nimport React, { createContext, useContext, useMemo } from 'react';\nimport { useVirtualAnnotationPage, VaultActivatedAnnotation } from './useVirtualAnnotationPage';\n\nconst VirtualAnnotationPageContext = createContext<{\n fullPage: AnnotationPageNormalized | null;\n addAnnotation: (\n id: string | Annotation | VaultActivatedAnnotation | AnnotationNormalized,\n atIndex?: number | undefined\n ) => void;\n removeAnnotation: (id: string | Annotation | VaultActivatedAnnotation | AnnotationNormalized) => void;\n} | null>(null);\n\nexport function useVirtualAnnotationPageContext() {\n const ctx = useContext(VirtualAnnotationPageContext);\n\n return [\n ctx!.fullPage,\n {\n addAnnotation: ctx!.addAnnotation,\n removeAnnotation: ctx!.removeAnnotation,\n },\n ] as const;\n}\n\nexport function VirtualAnnotationProvider({ children }: { children: any }) {\n const [fullPage, { addAnnotation, removeAnnotation }] = useVirtualAnnotationPage();\n\n return (\n <VirtualAnnotationPageContext.Provider\n value={useMemo(() => ({ fullPage, addAnnotation, removeAnnotation }), [fullPage])}\n >\n {children}\n </VirtualAnnotationPageContext.Provider>\n );\n}\n","import React from 'react';\n\nexport function DefaultCanvasFallback({ width, style, height }: { width?: number; height?: number; style?: any }) {\n return <div style={{ width, height, minHeight: 500, ...(style || {}), background: '#f9f9f9' }}>Unknown error</div>;\n}\n","import { createContext, useContext } from 'react';\nimport { Preset } from '@atlas-viewer/atlas';\n\nexport const ViewerPresetContext = createContext<Preset | null | undefined>(null);\n\nexport function useViewerPreset() {\n return useContext(ViewerPresetContext);\n}\n","import React, { ReactNode, useContext, useLayoutEffect } from 'react';\nimport { Root } from 'react-dom/client';\nimport { useViewerPreset, ViewerPresetContext } from './ViewerPresetContext';\n\nexport const PortalContext = React.createContext<Root | null>(null);\nexport const OverlayPortalContext = React.createContext<Root | null>(null);\n\nexport function CanvasPortal({ children, overlay }: { children: ReactNode; overlay?: boolean }) {\n const htmlElement = useContext(overlay ? OverlayPortalContext : PortalContext);\n const preset = useViewerPreset();\n\n useLayoutEffect(() => {\n if (htmlElement) {\n try {\n htmlElement.render(<ViewerPresetContext.Provider value={preset}>{children}</ViewerPresetContext.Provider>);\n } catch (e) {\n // ignore..\n }\n }\n }, [children, preset]);\n\n return null;\n}\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","import React, { ReactNode, useLayoutEffect, useRef, useState } from 'react';\nimport { AtlasAuto, Preset, AtlasProps } from '@atlas-viewer/atlas';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { ContextBridge, useContextBridge } from '../context/ContextBridge';\nimport { VirtualAnnotationProvider } from '../hooks/useVirtualAnnotationPageContext';\nimport { DefaultCanvasFallback } from './render/DefaultCanvasFallback';\nimport { OverlayPortalContext, PortalContext } from '../context/PortalContext';\nimport { ViewerPresetContext } from '../context/ViewerPresetContext';\nimport { createRoot, Root } from 'react-dom/client';\n\nexport function Viewer({\n children,\n errorFallback,\n outerContainerProps = {},\n ...props\n}: AtlasProps & {\n height?: number | string;\n width?: number | string;\n resizeHash?: number;\n containerProps?: any;\n outerContainerProps?: any;\n aspectRatio?: number;\n errorFallback?: any;\n} & { children: ReactNode }) {\n const portal = useRef<HTMLDivElement>(null);\n const [portalElement, setPortalElement] = useState<Root | null>();\n const [viewerPreset, setViewerPreset] = useState<Preset | null>();\n const overlayPortal = useRef<HTMLDivElement>(null);\n const [overlayPortalElement, setOverlayPortalElement] = useState<Root | null>();\n const bridge = useContextBridge();\n const ErrorFallback: any = errorFallback || DefaultCanvasFallback;\n\n useLayoutEffect(() => {\n const roots: Record<string, Root> = {};\n if (portal.current) {\n const $el = document.createElement('div');\n portal.current.appendChild($el);\n roots.portal = createRoot($el);\n setPortalElement(roots.portal);\n }\n if (overlayPortal.current) {\n const $el = document.createElement('div');\n overlayPortal.current.appendChild($el);\n roots.overlayPortal = createRoot($el);\n setOverlayPortalElement(roots.overlayPortal);\n }\n\n return () => {\n setPortalElement(null);\n setOverlayPortalElement(null);\n\n setTimeout(() => {\n if (roots.portal) {\n roots.portal.unmount();\n }\n if (roots.overlayPortal) {\n roots.overlayPortal.unmount();\n }\n }, 0);\n };\n }, []);\n\n return (\n <ErrorBoundary fallbackRender={() => <ErrorFallback {...props} />}>\n <AtlasAuto\n {...props}\n containerProps={{ style: { position: 'relative' }, ...(props.containerProps || {}) }}\n htmlChildren={<div ref={overlayPortal} />}\n onCreated={(preset: any) => {\n setViewerPreset(preset);\n if (props.onCreated) {\n props.onCreated(preset);\n }\n }}\n >\n <ViewerPresetContext.Provider value={viewerPreset}>\n <PortalContext.Provider value={portalElement as any}>\n <OverlayPortalContext.Provider value={overlayPortalElement as any}>\n <ContextBridge bridge={bridge}>\n <VirtualAnnotationProvider>{children}</VirtualAnnotationProvider>\n </ContextBridge>\n </OverlayPortalContext.Provider>\n </PortalContext.Provider>\n </ViewerPresetContext.Provider>\n </AtlasAuto>\n <div ref={portal} />\n </ErrorBoundary>\n );\n}\n","function createEventsHelper(vault) {\n return {\n addEventListener(resource, event, listener, scope) {\n if (!resource) {\n return;\n }\n vault.setMetaValue([resource.id, \"eventManager\", event], (registeredCallbacks) => {\n const callbacks = registeredCallbacks || [];\n for (const registered of callbacks) {\n if (registered.callback === listener) {\n return callbacks;\n }\n }\n return [...callbacks, { callback: listener, scope }];\n });\n return listener;\n },\n removeEventListener(resource, event, listener) {\n if (!resource) {\n return;\n }\n vault.setMetaValue([resource.id, \"eventManager\", event], (registeredCallbacks) => {\n return (registeredCallbacks || []).filter((registeredCallback) => registeredCallback.callback !== listener);\n });\n },\n getListenersAsProps(resourceOrId, scope) {\n const resource = typeof resourceOrId === \"string\" ? { id: resourceOrId } : resourceOrId;\n if (!resource || !resource.id) {\n return {};\n }\n const hooks = vault.getResourceMeta(resource.id, \"eventManager\");\n const props = {};\n if (hooks && resource) {\n for (const hook of Object.keys(hooks)) {\n props[hook] = (e) => {\n const fullResource = vault.get(resource);\n for (const { callback, scope: _scope } of hooks[hook] || []) {\n if (!_scope || scope && _scope.indexOf(scope) !== -1) {\n callback(e, fullResource);\n }\n }\n };\n }\n }\n return props;\n }\n };\n}\nexport { createEventsHelper };\n//# sourceMappingURL=events.mjs.map\n","import { useVault } from './useVault';\nimport { useVaultSelector } from './useVaultSelector';\nimport { useMemo } from 'react';\nimport { NormalizedEntity } from '@iiif/vault';\nimport { Reference } from '@iiif/presentation-3';\nimport { createEventsHelper } from '@iiif/vault-helpers/events';\n\nexport function useResourceEvents<T extends NormalizedEntity>(resource?: Reference, scope?: string[]) {\n const vault = useVault();\n const helper = useMemo(() => createEventsHelper(vault), [vault]);\n\n const hooks = useVaultSelector(() => {\n if (resource && resource.id) {\n return vault.getResourceMeta(resource.id, 'eventManager');\n }\n return null;\n }, [resource]);\n\n return useMemo(() => {\n return resource ? helper.getListenersAsProps(resource, scope) : {};\n }, [hooks, resource, vault, scope]);\n}\n","function createStylesHelper(vault) {\n return {\n applyStyles(resource, scope, styles) {\n const id = typeof resource === \"string\" ? resource : resource.id;\n return vault.setMetaValue([id, \"styles\", scope], styles);\n },\n getAppliedStyles(resource) {\n const id = typeof resource === \"string\" ? resource : resource.id;\n return vault.getResourceMeta(id, \"styles\");\n }\n };\n}\nexport { createStylesHelper };\n//# sourceMappingURL=styles.mjs.map\n","import { useVault } from './useVault';\nimport { useMemo } from 'react';\nimport { Reference } from '@iiif/presentation-3';\nimport { createStylesHelper } from '@iiif/vault-helpers/styles';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useStyles<Style extends Record<string, Record<string, any>>>(\n resource: undefined | Reference<any>\n): Style;\nexport function useStyles<Style extends Record<string, any>>(\n resource: undefined | Reference<any>,\n scope: string\n): Style;\nexport function useStyles<Style>(resource?: Reference, scope?: string): Style {\n const vault = useVault();\n const helper = useMemo(() => createStylesHelper(vault), [vault]);\n\n return useVaultSelector(() => {\n if (!resource) {\n return null;\n }\n\n const styles = helper.getAppliedStyles(resource.id);\n return styles ? (scope ? styles[scope] : styles) : undefined;\n }, [resource, scope]) as Style;\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nconst BOX_SELECTOR = /&?(xywh=)?(pixel:|percent:|pct:)?([0-9]+(?:\\.[0-9]+)?),([0-9]+(?:\\.[0-9]+)?),([0-9]+(?:\\.[0-9]+)?),([0-9]+(?:\\.[0-9]+)?)/;\nconst TEMPORAL_SELECTOR = /&?(t=)(npt:)?([0-9]+(.[0-9]+)?)?(,([0-9]+(.[0-9]+)?))?/;\nfunction parseSelector(source) {\n if (Array.isArray(source)) {\n return source.reduce((data, nextSource) => {\n const { selector, selectors } = parseSelector(nextSource);\n if (selector) {\n if (!data.selector) {\n data.selector = selector;\n }\n data.selectors.push(...selectors);\n }\n return data;\n }, {\n selector: null,\n selectors: []\n });\n }\n if (!source) {\n return {\n selector: null,\n selectors: []\n };\n }\n if (typeof source === \"string\") {\n const [id, fragment] = source.split(\"#\");\n if (!fragment) {\n return {\n selector: null,\n selectors: []\n };\n }\n return parseSelector({ type: \"FragmentSelector\", value: fragment });\n }\n if (source.type === \"PointSelector\" && (source.t || source.t === 0)) {\n const selector = {\n type: \"TemporalSelector\",\n temporal: {\n startTime: source.t\n }\n };\n return {\n selector,\n selectors: [selector]\n };\n }\n if (source.type === \"FragmentSelector\") {\n const matchBoxSelector = BOX_SELECTOR.exec(source.value);\n if (matchBoxSelector) {\n const selector = {\n type: \"BoxSelector\",\n spatial: {\n unit: matchBoxSelector[2] === \"percent:\" || matchBoxSelector[2] === \"pct:\" ? \"percent\" : \"pixel\",\n x: parseFloat(matchBoxSelector[3]),\n y: parseFloat(matchBoxSelector[4]),\n width: parseFloat(matchBoxSelector[5]),\n height: parseFloat(matchBoxSelector[6])\n }\n };\n return {\n selector,\n selectors: [selector]\n };\n }\n const matchTimeSelector = source.value.match(TEMPORAL_SELECTOR);\n if (matchTimeSelector) {\n const selector = {\n type: \"TemporalSelector\",\n temporal: {\n startTime: matchTimeSelector[4] ? parseFloat(matchTimeSelector[4]) : 0,\n endTime: matchTimeSelector[7] ? parseFloat(matchTimeSelector[7]) : void 0\n }\n };\n return {\n selector,\n selectors: [selector]\n };\n }\n return {\n selector: null,\n selectors: []\n };\n }\n return {\n selector: null,\n selectors: []\n };\n}\nfunction expandTarget(target, options = {}) {\n if (Array.isArray(target)) {\n return expandTarget(target[0]);\n }\n if (typeof target === \"string\") {\n const [id, fragment] = target.split(\"#\");\n if (!fragment) {\n return {\n type: \"SpecificResource\",\n source: { id, type: options.typeMap && options.typeMap[id] || \"Unknown\" },\n selector: null,\n selectors: []\n };\n }\n return expandTarget({\n type: \"SpecificResource\",\n source: { id, type: \"Unknown\" },\n selector: {\n type: \"FragmentSelector\",\n value: fragment\n }\n });\n }\n if (target.type === \"Choice\" || target.type === \"List\" || target.type === \"Composite\" || target.type === \"Independents\") {\n return expandTarget(target.items[0]);\n }\n if (target.type === \"SpecificResource\") {\n if (target.source.type === \"Canvas\" && target.source.partOf && typeof target.source.partOf === \"string\") {\n target.source.partOf = [\n {\n id: target.source.partOf,\n type: \"Manifest\"\n }\n ];\n }\n const { selector, selectors } = target.selector ? parseSelector(target.selector) : { selector: null, selectors: [] };\n return {\n type: \"SpecificResource\",\n source: target.source,\n selector,\n selectors\n };\n }\n if (target.id) {\n if (target.type === \"Canvas\" && target.partOf && typeof target.partOf === \"string\") {\n target.partOf = [\n {\n id: target.partOf,\n type: \"Manifest\"\n }\n ];\n }\n const [id, fragment] = target.id.split(\"#\");\n if (!fragment) {\n return {\n type: \"SpecificResource\",\n source: __spreadProps(__spreadValues({}, target), {\n id\n }),\n selector: null,\n selectors: []\n };\n }\n return expandTarget({\n type: \"SpecificResource\",\n source: __spreadProps(__spreadValues({}, target), {\n id\n }),\n selector: {\n type: \"FragmentSelector\",\n value: fragment\n }\n });\n }\n return {\n type: \"SpecificResource\",\n source: target,\n selector: null,\n selectors: []\n };\n}\nexport { expandTarget, parseSelector };\n//# sourceMappingURL=annotation-targets.mjs.map\n","import { useResourceContext } from '../context/ResourceContext';\nimport { AnnotationNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\nimport { expandTarget } from '@iiif/vault-helpers/annotation-targets';\nimport { useVault } from './useVault';\n\nexport function useAnnotation(options?: { id: string }): AnnotationNormalized | undefined;\nexport function useAnnotation<T>(\n options?: { id: string; selector: (annotation: AnnotationNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useAnnotation<T = AnnotationNormalized>(\n options: {\n id?: string;\n selector?: (annotation: AnnotationNormalized) => T;\n } = {},\n deps: any[] = []\n): AnnotationNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const vault = useVault();\n const annotationId = id ? id : ctx.annotation;\n\n const annotation = useVaultSelector(\n (s) => (annotationId ? s.iiif.entities.Annotation[annotationId] : undefined),\n [annotationId]\n );\n\n const body = useVaultSelector(\n (s) =>\n annotation && annotation.body\n ? annotation.body\n .map((singleBody) => (singleBody ? s.iiif.entities[singleBody.type][singleBody.id] : null))\n .filter(Boolean)\n : [],\n [annotation]\n );\n\n return useMemo(() => {\n if (!annotation) {\n return undefined;\n }\n\n const newAnnotation: any = {\n ...annotation,\n body,\n target: expandTarget(annotation.target as any, { typeMap: vault.getState().iiif.mapping }),\n };\n\n if (selector) {\n return selector(newAnnotation);\n }\n return newAnnotation;\n }, [annotation, selector, body, ...deps]);\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { CanvasNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useCanvas(options?: { id: string }): CanvasNormalized | undefined;\nexport function useCanvas<T>(\n options?: { id: string; selector: (canvas: CanvasNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useCanvas<T = CanvasNormalized>(\n options: {\n id?: string;\n selector?: (canvas: CanvasNormalized) => T;\n } = {},\n deps: any[] = []\n): CanvasNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const canvasId = id ? id : ctx.canvas;\n\n const canvas = useVaultSelector((s) => (canvasId ? s.iiif.entities.Canvas[canvasId] : undefined), [canvasId]);\n\n return useMemo(() => {\n if (!canvas) {\n return undefined;\n }\n if (selector) {\n return selector(canvas);\n }\n return canvas;\n }, [canvas, selector, ...deps]);\n}\n","import { BoxStyle, mergeStyles, RegionHighlight } from '@atlas-viewer/atlas';\nimport { useResourceEvents } from '../../hooks/useResourceEvents';\nimport { useStyles } from '../../hooks/useStyles';\nimport React, { FC, useMemo } from 'react';\nimport { useAnnotation } from '../../hooks/useAnnotation';\nimport { useCanvas } from '../../hooks/useCanvas';\n\nexport const RenderAnnotation: FC<{ id: string; className?: string; style?: BoxStyle; interactive?: boolean }> = ({\n id,\n style: defaultStyle,\n className,\n interactive,\n}) => {\n const annotation = useAnnotation({ id });\n const style = useStyles<BoxStyle>(annotation, 'atlas');\n const html = useStyles<{ className?: string; href?: string; title?: string; target?: string }>(annotation, 'html');\n const events = useResourceEvents(annotation as any, ['atlas']);\n const canvas = useCanvas();\n\n const allStyles = useMemo(() => {\n return mergeStyles(defaultStyle, style);\n }, [defaultStyle, style]);\n\n const isValid =\n canvas &&\n annotation &&\n annotation.target &&\n (annotation.target as any).selector &&\n (annotation.target as any).selector.type === 'BoxSelector' &&\n (annotation.target as any).source &&\n (annotation.target as any).source.id === canvas.id;\n\n if (!isValid) {\n return null;\n }\n\n return (\n <RegionHighlight\n id={annotation.id}\n isEditing={true}\n region={(annotation.target as any).selector.spatial}\n style={allStyles}\n className={html?.className || className}\n interactive={!!(html?.href || interactive)}\n href={html?.href || null}\n title={html?.title || null}\n hrefTarget={html?.target || null}\n {...events}\n />\n );\n};\n","import { AnnotationPage, AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { RenderAnnotation } from './Annotation';\nimport { BoxStyle } from '@atlas-viewer/atlas';\nimport { useStyles } from '../../hooks/useStyles';\nimport { useVaultSelector } from '../../hooks/useVaultSelector';\nimport React, { FC, Fragment } from 'react';\n\nexport const RenderAnnotationPage: FC<{ page: AnnotationPage | AnnotationPageNormalized; className?: string }> = ({\n className,\n page,\n}) => {\n const style = useStyles<BoxStyle>(page, 'atlas');\n const html = useStyles<{ className?: string }>(page, 'html');\n\n useVaultSelector((state) => (page.id ? state.iiif.entities.AnnotationPage[page.id] : null), []);\n\n return (\n <Fragment>\n {page.items?.map((annotation) => {\n return (\n <RenderAnnotation\n key={annotation.id}\n id={annotation.id}\n style={style}\n className={html?.className || className}\n />\n );\n })}\n </Fragment>\n );\n};\n","import { ImageCandidate } from '@atlas-viewer/iiif-image-api';\nimport React, { Fragment, ReactNode } from 'react';\nimport { TileSet } from '@atlas-viewer/atlas';\nimport { ImageWithOptionalService } from '../../features/rendering-strategy/resource-types';\n\nexport function RenderImage({\n id,\n image,\n thumbnail,\n isStatic,\n x = 0,\n y = 0,\n children,\n onClick,\n}: {\n id: string;\n image: ImageWithOptionalService;\n thumbnail?: ImageCandidate;\n isStatic?: boolean;\n x?: number;\n y?: number;\n children?: ReactNode;\n onClick?: (e: any) => void;\n}) {\n return (\n <Fragment key={id}>\n {!image.service ? (\n <Fragment key=\"no-service\">\n <world-image\n onClick={onClick}\n // key={`${image.width}/${image.height}`}\n uri={image.id}\n target={image.target.spatial}\n display={\n image.width && image.height\n ? {\n width: image.width,\n height: image.height,\n }\n : undefined\n }\n />\n {children}\n </Fragment>\n ) : (\n <Fragment key=\"service\">\n <TileSet\n // key={`${image.target.spatial?.width}/${image.target.spatial?.height}`}\n tiles={{\n id: image.service.id || image.service['@id'] || 'unknown',\n height: image.height as number,\n width: image.width as number,\n imageService: image.service as any,\n thumbnail: thumbnail && thumbnail.type === 'fixed' ? thumbnail : undefined,\n }}\n x={image.target?.spatial.x + x}\n y={image.target?.spatial.y + y}\n width={image.target?.spatial.width}\n height={image.target?.spatial.height}\n onClick={onClick}\n />\n {children}\n </Fragment>\n )}\n </Fragment>\n );\n}\n","import {\n AnnotationNormalized,\n CanvasNormalized,\n ContentResource,\n IIIFExternalWebResource,\n PointSelector,\n SpecificResource,\n W3CAnnotationTarget,\n} from '@iiif/presentation-3';\nimport { Vault } from '@iiif/vault';\nimport { ChoiceDescription } from './choice-types';\nimport { UseRenderingStrategy } from '../../hooks/useRenderingStrategy';\nimport { BoxSelector, expandTarget, SupportedTarget, TemporalBoxSelector } from '@iiif/vault-helpers';\n\n/**\n * Parse specific resource.\n *\n * This could be expanded to support pulling out more from the specific resource.\n *\n * @param resource\n */\nexport function parseSpecificResource(resource: ContentResource) {\n if (resource.type === 'SpecificResource') {\n return [resource.source, { selector: resource.selector }];\n }\n\n return [resource, { selector: null }];\n}\n\nexport interface Paintables {\n choice: ChoiceDescription | null;\n types: string[];\n items: Array<{\n annotationId: string;\n type: string;\n resource: IIIFExternalWebResource | SpecificResource;\n target: any;\n selector: any;\n }>;\n}\n\nexport function getPaintables(\n vault: Vault,\n paintingAnnotations: AnnotationNormalized[],\n enabledChoices: string[]\n): Paintables {\n const types: string[] = [];\n let choice: Paintables['choice'] = null;\n const items: Paintables['items'] = [];\n\n for (const annotation of paintingAnnotations) {\n const bodies = vault.get<ContentResource>(annotation.body, { skipSelfReturn: false });\n for (const unknownBody of bodies) {\n if (!unknownBody) {\n continue;\n }\n const [body, { selector }] = parseSpecificResource(unknownBody);\n const type = (body.type || 'unknown').toLowerCase();\n\n // Choice\n if (type === 'choice') {\n const nestedBodies = vault.get<ContentResource>(body.items) as ContentResource[];\n\n // Which are active? By default the first, but we could push multiple here.\n const selected = enabledChoices.length\n ? enabledChoices.map((cid) => nestedBodies.find((b) => b.id === cid)).filter(Boolean)\n : [nestedBodies[0]];\n\n if (selected.length === 0) {\n selected.push(nestedBodies[0]);\n }\n\n // Store choice.\n choice = {\n type: 'single-choice',\n items: nestedBodies.map((b) => ({\n id: b.id,\n label: (b as any).label as any,\n selected: selected.indexOf(b) !== -1,\n })) as any[],\n label: (unknownBody as any).label,\n };\n\n // @todo insert in the right order.\n bodies.push(...(selected as any[]));\n\n continue;\n }\n\n if (types.indexOf(type) === -1) {\n types.push(type);\n }\n\n items.push({\n annotationId: annotation.id,\n type: type,\n resource: body as IIIFExternalWebResource,\n target: annotation.target,\n selector,\n });\n }\n }\n\n return {\n types,\n items,\n choice,\n };\n}\n\nexport function getParsedTargetSelector(\n canvas: CanvasNormalized,\n target: W3CAnnotationTarget | W3CAnnotationTarget[]\n): [TemporalBoxSelector | BoxSelector | PointSelector | null, SupportedTarget['source']] {\n const { selector: imageTarget, source } = expandTarget(target);\n\n if (source.id !== canvas.id) {\n // Skip invalid targets.\n return [null, source];\n }\n\n // Target is where it should be painted.\n const defaultTarget: BoxSelector = {\n type: 'BoxSelector',\n spatial: {\n x: 0,\n y: 0,\n width: canvas.width,\n height: canvas.height,\n },\n };\n\n return [\n imageTarget\n ? imageTarget.type === 'TemporalSelector'\n ? {\n type: 'TemporalBoxSelector',\n temporal: imageTarget.temporal,\n spatial: defaultTarget.spatial,\n }\n : imageTarget\n : null,\n source,\n ];\n}\n\nexport const emptyActions = {\n makeChoice: () => {\n // no-op\n },\n};\n\nexport const unknownResponse: UseRenderingStrategy[0] = { type: 'unknown' };\n\nexport const unsupportedStrategy = (reason: string): UseRenderingStrategy[0] => {\n return { type: 'unknown', reason, annotations: { pages: [] } };\n};\n\nexport const emptyStrategy = (width: number, height: number): UseRenderingStrategy[0] => {\n return { type: 'empty', width, height, annotations: { pages: [] }, image: null, images: [] };\n};\n","import { useVaultSelector } from './useVaultSelector';\nimport { IIIFStore } from '@iiif/vault';\n\nfunction getMeta(state: IIIFStore, resourceId: string) {\n const resourceMeta = state?.iiif?.meta[resourceId];\n if (!resourceMeta) {\n return null;\n }\n return resourceMeta.annotationPageManager as any;\n}\n\nexport function useEnabledAnnotationPageIds(resourceId?: string, availablePageIds?: string[]) {\n return useVaultSelector(\n (state) => {\n const pageIds: string[] = [];\n if (!resourceId) {\n return pageIds;\n }\n const allAnnotationListIds = Object.keys(state.iiif.entities.AnnotationPage);\n for (const annotationListId of allAnnotationListIds) {\n if (!availablePageIds || availablePageIds.indexOf(annotationListId) !== -1) {\n const annotationListMeta = getMeta(state, annotationListId);\n if (annotationListMeta && annotationListMeta.views && annotationListMeta.views[resourceId]) {\n pageIds.push(annotationListId);\n }\n }\n }\n\n return pageIds;\n },\n [resourceId, availablePageIds]\n );\n}\n","import { CanvasNormalized, ManifestNormalized } from '@iiif/presentation-3';\n\nexport function flattenAnnotationPageIds({\n canvas,\n manifest,\n all,\n canvases,\n}: {\n manifest?: ManifestNormalized;\n canvas?: CanvasNormalized;\n canvases?: CanvasNormalized[];\n all?: boolean;\n}) {\n const foundIds: string[] = [];\n\n if (manifest) {\n for (const page of manifest.annotations) {\n if (foundIds.indexOf(page.id) === -1) {\n foundIds.push(page.id);\n }\n }\n }\n\n if (all) {\n if (canvases && canvases.length) {\n for (const canvas_ of canvases) {\n for (const page of canvas_.annotations) {\n if (foundIds.indexOf(page.id) === -1) {\n foundIds.push(page.id);\n }\n }\n }\n }\n } else if (canvas) {\n for (const page of canvas.annotations) {\n if (foundIds.indexOf(page.id) === -1) {\n foundIds.push(page.id);\n }\n }\n }\n\n // Remove enabled page IDs for now.\n // for (const enabledPage of enabledPageIds) {\n // if (foundIds.indexOf(enabledPage) === -1) {\n // foundIds.push(enabledPage);\n // }\n // }\n\n return foundIds;\n}\n","import { useCallback, useMemo } from 'react';\nimport { useVault } from './useVault';\nimport { useManifest } from './useManifest';\nimport { useCanvas } from './useCanvas';\nimport { useVisibleCanvases } from '../context/VisibleCanvasContext';\nimport { useEnabledAnnotationPageIds } from './useEnabledAnnotationPageIds';\nimport { flattenAnnotationPageIds } from '../utility/flatten-annotation-page-ids';\nimport { IIIFStore } from '@iiif/vault';\n\ntype AnnotationPageResourceMap = {\n [id: string]: boolean;\n};\n\ntype AnnotationPageManager = {\n views: AnnotationPageResourceMap;\n};\n\nfunction getMeta(state: IIIFStore, resourceId: string) {\n const resourceMeta = state?.iiif?.meta[resourceId];\n if (!resourceMeta) {\n return null;\n }\n return resourceMeta.annotationPageManager as AnnotationPageManager;\n}\n\nexport function useAnnotationPageManager(resourceId?: string, options: { all?: boolean } = {}) {\n const vault = useVault();\n const manifest = useManifest();\n const canvas = useCanvas();\n const canvases = useVisibleCanvases();\n const availablePageIds = useMemo(() => {\n return flattenAnnotationPageIds({\n all: options.all,\n manifest,\n canvas,\n canvases,\n });\n }, [options.all, canvas, canvases, manifest]);\n const enabledPageIds = useEnabledAnnotationPageIds(resourceId, options.all ? undefined : availablePageIds);\n\n const setPageDisabled = useCallback(\n (deselectId: string) => {\n if (!resourceId) {\n return;\n }\n vault.setMetaValue<AnnotationPageResourceMap>(\n [deselectId, 'annotationPageManager', 'views'],\n (existingResources: AnnotationPageResourceMap | undefined) => {\n if (existingResources && !existingResources[resourceId]) {\n return existingResources;\n }\n\n return {\n ...(existingResources || {}),\n [resourceId]: false,\n };\n }\n );\n },\n [resourceId, vault]\n );\n\n const setPageEnabled = useCallback(\n (id: string, opt: { deselectOthers?: boolean } = {}) => {\n if (!resourceId) {\n return;\n }\n const state = vault.getState();\n const toDeselect = [];\n\n // Deselect these.\n if (opt?.deselectOthers) {\n const allAnnotationListIds = Object.keys(state.iiif.entities.AnnotationPage);\n for (const annotationPageId of allAnnotationListIds) {\n const annotationListMeta = getMeta(state, annotationPageId);\n if (annotationListMeta && annotationListMeta.views && annotationListMeta.views[resourceId]) {\n toDeselect.push(annotationPageId);\n }\n }\n }\n\n // Disable first.\n for (const deselectId of toDeselect) {\n setPageDisabled(deselectId);\n }\n\n // Then enable.\n vault.setMetaValue<AnnotationPageResourceMap>(\n [id, 'annotationPageManager', 'views'],\n (existingResources: AnnotationPageResourceMap | undefined) => {\n if (existingResources && existingResources[resourceId]) {\n return existingResources;\n }\n return {\n ...(existingResources || {}),\n [resourceId]: true,\n };\n }\n );\n },\n [resourceId, setPageDisabled, vault]\n );\n\n return {\n availablePageIds,\n enabledPageIds,\n setPageEnabled,\n setPageDisabled,\n };\n}\n","import { useVaultSelector } from './useVaultSelector';\n\nexport function useResources<Type>(ids: string[], type: string): Type[] {\n return useVaultSelector((state, vault) => vault.get<Type>(ids.map((id) => ({ id, type }))) as any, [ids, type]);\n}\n","import React, { useContext } from 'react';\nimport { ImageServiceLoader } from '@atlas-viewer/iiif-image-api';\n\nexport const ImageServiceLoaderContext = React.createContext<ImageServiceLoader>(new ImageServiceLoader());\n\nexport function useImageServiceLoader() {\n return useContext(ImageServiceLoaderContext);\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useImageServiceLoader } from '../context/ImageServiceLoaderContext';\n\nexport type ImageServiceLoaderType = (\n imageService: any | undefined,\n { height, width }: { height: number; width: number }\n) => ImageService | undefined;\n\nexport function useLoadImageService() {\n const loader = useImageServiceLoader();\n const [imageServiceStatus, setImageServiceStatus] = useState<Record<string, string>>({});\n const didUnmount = useRef(false);\n useEffect(() => {\n return () => {\n didUnmount.current = true;\n };\n }, []);\n const loadImageService = useCallback<ImageServiceLoaderType>(\n (imageService, { height, width }) => {\n if (imageService) {\n const imageServiceId = imageService.id || (imageService['@id'] as string);\n // We want to kick this off.\n const syncLoaded = loader.loadServiceSync({\n id: imageServiceId,\n width: imageService.width || width,\n height: imageService.height || height,\n source: imageService,\n });\n\n if (syncLoaded) {\n imageService = syncLoaded;\n } else if (!imageServiceStatus[imageServiceId]) {\n if (!didUnmount.current) {\n setImageServiceStatus((r) => {\n return {\n ...r,\n [imageServiceId]: 'loading',\n };\n });\n }\n loader\n .loadService({\n id: imageServiceId,\n width: imageService.width || width,\n height: imageService.height || height,\n })\n .then(() => {\n if (!didUnmount.current) {\n setImageServiceStatus((r) => {\n return {\n ...r,\n [imageServiceId]: 'done',\n };\n });\n }\n });\n }\n }\n return imageService;\n },\n [loader, imageServiceStatus]\n );\n\n return [loadImageService, imageServiceStatus] as const;\n}\n","// This is valid under a canvas context.\nimport { AnnotationNormalized, AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { useCanvas } from './useCanvas';\nimport { useVaultSelector } from './useVaultSelector';\nimport { useAnnotation } from './useAnnotation';\n\nexport function usePaintingAnnotations(\n options: { canvasId?: string; enableSingleAnnotation?: boolean } = {}\n): AnnotationNormalized[] {\n const annotation = useAnnotation();\n const canvas = useCanvas(options.canvasId ? { id: options.canvasId } : undefined);\n\n return useVaultSelector(\n (state, vault) => {\n if (!canvas) {\n return [];\n }\n if (annotation && options.enableSingleAnnotation) {\n return [annotation];\n }\n const annotationPages = vault.get<AnnotationPageNormalized>(canvas.items);\n const flatAnnotations: AnnotationNormalized[] = [];\n for (const page of annotationPages) {\n flatAnnotations.push(...vault.get<AnnotationNormalized>(page.items));\n }\n return flatAnnotations;\n },\n [canvas]\n );\n}\n","import { useCallback, useMemo, useState } from 'react';\nimport { getPaintables } from '../features/rendering-strategy/rendering-utils';\nimport { useVault } from './useVault';\nimport { usePaintingAnnotations } from './usePaintingAnnotations';\n\nexport function usePaintables(\n options?: { defaultChoices?: string[]; enableSingleAnnotation?: boolean },\n deps: any[] = []\n) {\n const vault = useVault();\n const paintingAnnotations = usePaintingAnnotations({ enableSingleAnnotation: options?.enableSingleAnnotation });\n const [enabledChoices, setEnabledChoices] = useState<string[]>(options?.defaultChoices || []);\n\n const paintables = useMemo(\n () => getPaintables(vault, paintingAnnotations, enabledChoices),\n [vault, paintingAnnotations, enabledChoices, ...deps]\n );\n\n const makeChoice = useCallback(\n (\n id: string,\n { deselectOthers = true, deselect = false }: { deselectOthers?: boolean; deselect?: boolean } = {}\n ) => {\n if (paintables.choice) {\n // Don't support multiple choice yet.\n if (paintables.choice.type !== 'single-choice') {\n throw new Error('Complex choice not supported yet');\n }\n\n setEnabledChoices((prevChoices) => {\n if (deselect) {\n const without = prevChoices.filter((e) => e !== id);\n\n if (without.length === 0) {\n const defaultId = paintables.items[0].resource.id;\n if (defaultId) {\n return [defaultId];\n } else {\n return [];\n }\n }\n\n return without;\n }\n\n if (deselectOthers) {\n return [id];\n }\n\n const newChoices = [...prevChoices];\n\n // Add the default ID.\n if (newChoices.length === 0 && paintables.items.length) {\n const defaultId = paintables.items[0].resource.id;\n if (defaultId) {\n newChoices.push(defaultId);\n }\n }\n\n if (prevChoices.indexOf(id) !== -1) {\n return prevChoices;\n }\n\n return [...prevChoices, id];\n });\n }\n },\n [paintables.choice]\n );\n\n const actions = { makeChoice };\n\n return [paintables, actions] as const;\n}\n","import { CanvasNormalized, IIIFExternalWebResource, PointSelector, W3CAnnotationTarget } from '@iiif/presentation-3';\nimport { ImageServiceLoaderType } from '../../hooks/useLoadImageService';\nimport { AnnotationPageDescription, ImageWithOptionalService } from './resource-types';\nimport { getImageServices } from '@atlas-viewer/iiif-image-api';\nimport { getParsedTargetSelector, Paintables, unsupportedStrategy } from './rendering-utils';\nimport { ChoiceDescription } from './choice-types';\nimport { expandTarget, SupportedSelectors } from '@iiif/vault-helpers/annotation-targets';\nimport { TemporalBoxSelector, BoxSelector } from '@iiif/vault-helpers';\n\nexport type SingleImageStrategy = {\n type: 'images';\n image: ImageWithOptionalService;\n images: Array<ImageWithOptionalService>;\n choice?: ChoiceDescription;\n annotations?: AnnotationPageDescription;\n};\n\nexport function getImageStrategy(\n canvas: CanvasNormalized,\n paintables: Paintables,\n loadImageService: ImageServiceLoaderType\n) {\n const imageTypes: ImageWithOptionalService[] = [];\n for (const singleImage of paintables.items) {\n // SingleImageStrategy\n const resource: IIIFExternalWebResource =\n singleImage.resource && singleImage.resource.type === 'SpecificResource'\n ? singleImage.resource.source\n : singleImage.resource;\n\n // Validation.\n if (!resource.id) {\n // @todo we could skip this?\n return unsupportedStrategy('No resource Identifier');\n }\n\n let imageService = undefined;\n if (resource.service) {\n const imageServices = getImageServices(resource as any) as any[];\n if (imageServices[0]) {\n imageService = loadImageService(imageServices[0], canvas);\n }\n }\n\n // Target is where it should be painted.\n const defaultTarget: BoxSelector = {\n type: 'BoxSelector',\n spatial: {\n x: 0,\n y: 0,\n width: canvas.width,\n height: canvas.height,\n },\n };\n\n const [target, source] = getParsedTargetSelector(canvas, singleImage.target);\n if (source.id !== canvas.id) {\n // Skip invalid targets.\n continue;\n }\n\n // Support for cropping before painting an annotation.\n const defaultImageSelector = {\n type: 'BoxSelector',\n spatial: {\n x: 0,\n y: 0,\n width: canvas.width,\n height: canvas.height,\n },\n } as BoxSelector;\n const imageSelector = singleImage.resource.type === 'SpecificResource' ? expandTarget(singleImage.resource) : null;\n const selector: BoxSelector =\n imageSelector &&\n imageSelector.selector &&\n (imageSelector.selector.type === 'BoxSelector' || imageSelector.selector.type === 'TemporalBoxSelector')\n ? {\n type: 'BoxSelector',\n spatial: {\n x: imageSelector.selector.spatial.x,\n y: imageSelector.selector.spatial.y,\n width: imageSelector.selector.spatial.width,\n height: imageSelector.selector.spatial.height,\n },\n }\n : defaultImageSelector;\n\n if (imageService && !imageService.id) {\n (imageService as any).id = imageService['@id'];\n }\n\n const imageType: ImageWithOptionalService = {\n id: resource.id,\n type: 'Image',\n annotationId: singleImage.annotationId,\n width: target ? resource.width : canvas.width,\n height: target ? resource.height : canvas.height,\n service: imageService,\n sizes:\n imageService && imageService.sizes\n ? imageService.sizes\n : resource.width && resource.height\n ? [{ width: resource.width, height: resource.height }]\n : [],\n target: target && target.type !== 'PointSelector' ? target : defaultTarget,\n selector,\n };\n\n imageTypes.push(imageType);\n }\n\n return {\n type: 'images',\n image: imageTypes[0],\n images: imageTypes,\n choice: paintables.choice,\n } as SingleImageStrategy;\n}\n","import { CanvasNormalized } from '@iiif/presentation-3';\nimport { Paintables, unsupportedStrategy } from './rendering-utils';\nimport { AnnotationPageDescription } from './resource-types';\nimport { ChoiceDescription } from './choice-types';\nimport { ExternalWebResource } from '@iiif/presentation-3';\nimport { RenderingStrategy } from './strategies';\n\nexport type Single3DModelStrategy = {\n type: '3d-model';\n model: ExternalWebResource;\n choice?: ChoiceDescription; // future\n annotations?: AnnotationPageDescription; // future\n};\n\nconst supportedFormats = ['model/gltf-binary'];\n\nexport function get3dStrategy(canvas: CanvasNormalized, paintables: Paintables): RenderingStrategy {\n const first = paintables.items[0];\n const resource = first.resource as ExternalWebResource;\n\n if (!resource.format) {\n return unsupportedStrategy('Unknown format');\n }\n\n if (supportedFormats.indexOf(resource.format) === -1) {\n return unsupportedStrategy(`3D format: ${resource.format} is unsupported`);\n }\n\n return {\n type: '3d-model',\n model: resource as any,\n } as Single3DModelStrategy;\n}\n","import { CanvasNormalized } from '@iiif/presentation-3';\nimport { Paintables, unsupportedStrategy } from './rendering-utils';\nimport { MediaStrategy } from './strategies';\n\nexport function getAudioStrategy(canvas: CanvasNormalized, paintables: Paintables) {\n if (!canvas.duration) {\n return unsupportedStrategy('No duration on canvas');\n }\n\n if (paintables.items.length > 1) {\n return unsupportedStrategy('Only one audio source supported');\n }\n\n const audioResource = paintables.items[0]?.resource as any; // @todo stronger type for what this might be.\n\n if (!audioResource) {\n return unsupportedStrategy('Unknown audio');\n }\n\n if (!audioResource.format) {\n return unsupportedStrategy('Audio does not have format');\n }\n\n return {\n type: 'media',\n media: {\n annotationId: paintables.items[0].annotationId,\n duration: canvas.duration,\n url: audioResource.id,\n type: 'Sound',\n target: {\n type: 'TemporalSelector',\n temporal: {\n startTime: 0,\n endTime: canvas.duration,\n },\n },\n format: audioResource.format,\n selector: {\n type: 'TemporalSelector',\n temporal: {\n startTime: 0,\n endTime: canvas.duration,\n },\n },\n },\n annotations: {\n pages: [],\n },\n } as MediaStrategy;\n}\n","import { CanvasNormalized } from '@iiif/presentation-3';\nimport { Paintables, unsupportedStrategy } from './rendering-utils';\nimport { MediaStrategy } from './strategies';\nimport { SingleVideo } from './resource-types';\n\nexport function getVideoStrategy(canvas: CanvasNormalized, paintables: Paintables) {\n const videoPaintables = paintables.items.filter((t) => t.type === 'video');\n\n if (!canvas.duration) {\n return unsupportedStrategy('No duration on canvas');\n }\n\n if (videoPaintables.length > 1) {\n return unsupportedStrategy('Only one video source supported');\n }\n\n const audioResource = videoPaintables[0]?.resource as any; // @todo stronger type for what this might be.\n\n if (!audioResource) {\n return unsupportedStrategy('Unknown video');\n }\n\n if (!audioResource.format) {\n return unsupportedStrategy('Video does not have format');\n }\n\n // @todo support VTT\n\n return {\n type: 'media',\n media: {\n annotationId: paintables.items[0].annotationId,\n duration: canvas.duration,\n url: audioResource.id,\n type: 'Video',\n items: [],\n target: {\n type: 'TemporalSelector',\n temporal: {\n startTime: 0,\n endTime: canvas.duration,\n },\n },\n format: audioResource.format,\n selector: {\n type: 'TemporalSelector',\n temporal: {\n startTime: 0,\n endTime: canvas.duration,\n },\n },\n },\n annotations: {\n pages: [],\n },\n } as MediaStrategy;\n}\n","import { CanvasNormalized, InternationalString } from '@iiif/presentation-3';\nimport { ChoiceDescription } from './choice-types';\nimport { AnnotationPageDescription } from './resource-types';\nimport { getParsedTargetSelector, Paintables } from './rendering-utils';\nimport { RenderingStrategy } from './strategies';\nimport { SupportedTarget } from '@iiif/vault-helpers';\n\nexport type TextualContentStrategy = {\n type: 'textual-content';\n items: { annotationId: string; text: InternationalString; target: SupportedTarget | null }[];\n choice?: ChoiceDescription; // future\n annotations?: AnnotationPageDescription; // future\n};\n\nfunction parseType(item: any, languageMap: InternationalString = {}, lang?: string) {\n const language = item.language || lang || 'none';\n switch (item.type) {\n case 'TextualBody': {\n if (typeof item.value !== 'undefined') {\n languageMap[language] = item.value;\n }\n break;\n }\n case 'List':\n case 'Composite':\n case 'Choice': {\n if (item.items) {\n item.items.forEach((inner: any) => parseType(inner, languageMap, language));\n }\n }\n }\n return languageMap;\n}\n\nexport function getTextualContentStrategy(canvas: CanvasNormalized, paintables: Paintables): RenderingStrategy {\n const items: TextualContentStrategy['items'] = [];\n\n paintables.items.forEach((item) => {\n if (item.resource) {\n const [target] = getParsedTargetSelector(canvas, item.target);\n items.push({ annotationId: item.annotationId, text: parseType(item.resource), target: target as any });\n }\n });\n\n return {\n type: 'textual-content',\n items,\n } as TextualContentStrategy;\n}\n","import { AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { useCanvas } from './useCanvas';\nimport { useMemo } from 'react';\nimport { useVault } from './useVault';\nimport { RenderingStrategy } from '../features/rendering-strategy/strategies';\nimport {\n emptyActions,\n emptyStrategy,\n unknownResponse,\n unsupportedStrategy,\n} from '../features/rendering-strategy/rendering-utils';\nimport { useAnnotationPageManager } from './useAnnotationPageManager';\nimport { useManifest } from './useManifest';\nimport { useResources } from './useResources';\nimport { useLoadImageService } from './useLoadImageService';\nimport { usePaintables } from './usePaintables';\nimport { getImageStrategy } from '../features/rendering-strategy/image-strategy';\nimport { get3dStrategy } from '../features/rendering-strategy/3d-strategy';\nimport { getAudioStrategy } from '../features/rendering-strategy/audio-strategy';\nimport { getVideoStrategy } from '../features/rendering-strategy/video-strategy';\nimport { getTextualContentStrategy } from '../features/rendering-strategy/textual-content-strategy';\nimport { useAnnotation } from './useAnnotation';\n\n// @todo we may not have any actions returned from the rendering strategy.\nexport type StrategyActions = {\n makeChoice: (id: string, options?: { deselectOthers?: boolean; deselect?: boolean }) => void;\n};\n\nexport type UseRenderingStrategy = [RenderingStrategy, StrategyActions];\n\nexport type UseRenderingStrategyOptions = {\n strategies?: Array<RenderingStrategy['type']>;\n annotationPageManagerId?: string;\n enableSingleAnnotation?: boolean;\n defaultChoices?: string[];\n};\n\nexport function useRenderingStrategy(options?: UseRenderingStrategyOptions): UseRenderingStrategy {\n const manifest = useManifest();\n const canvas = useCanvas();\n const vault = useVault();\n const [loadImageService, imageServiceStatus] = useLoadImageService();\n const { enabledPageIds } = useAnnotationPageManager(options?.annotationPageManagerId || manifest?.id || canvas?.id, {\n all: false,\n });\n const enabledPages = useResources<AnnotationPageNormalized>(enabledPageIds, 'AnnotationPage');\n\n const supports: RenderingStrategy['type'][] = options?.strategies || [\n 'empty',\n 'images',\n 'media',\n 'textual-content',\n 'complex-timeline',\n ];\n\n const [paintables, actions] = usePaintables(options, [imageServiceStatus]);\n\n const strategy = useMemo(() => {\n if (!canvas) {\n return unknownResponse;\n }\n\n if (paintables.types.length === 0) {\n if (supports.indexOf('empty') !== -1) {\n return emptyStrategy(canvas.width, canvas.height);\n }\n return unknownResponse;\n }\n\n if (paintables.types.length !== 1) {\n if (paintables.types.length === 2 && paintables.types.indexOf('text') !== -1) {\n paintables.types = paintables.types.filter((t) => t !== 'text');\n } else {\n if (supports.indexOf('complex-timeline') === -1) {\n return unsupportedStrategy('Complex timeline not supported');\n }\n return unsupportedStrategy('ComplexTimelineStrategy not yet supported');\n }\n }\n\n const mainType = paintables.types[0];\n\n // Image\n if (mainType === 'image') {\n if (supports.indexOf('images') === -1) {\n return unsupportedStrategy('Image not supported');\n }\n\n return getImageStrategy(canvas, paintables, loadImageService);\n }\n\n // 3D\n if (mainType === 'Model' || mainType === 'model') {\n if (supports.indexOf('3d-model') === -1) {\n return unsupportedStrategy('3D not supported');\n }\n\n return get3dStrategy(canvas, paintables);\n }\n\n if (mainType === 'textualbody') {\n if (supports.indexOf('textual-content') === -1) {\n return unsupportedStrategy('Textual content not supported');\n }\n\n return getTextualContentStrategy(canvas, paintables);\n }\n\n if (mainType === 'sound' || mainType === 'audio') {\n if (supports.indexOf('media') === -1) {\n return unsupportedStrategy('Media not supported');\n }\n\n // Media Strategy with audio or audio sequence.\n return getAudioStrategy(canvas, paintables);\n }\n\n if (mainType === 'video') {\n if (supports.indexOf('media') === -1) {\n return unsupportedStrategy('Media not supported');\n }\n\n // Media Strategy with video or video sequence.\n return getVideoStrategy(canvas, paintables);\n }\n\n // Unknown fallback.\n return unknownResponse;\n }, [canvas, paintables, vault, actions.makeChoice]);\n\n return useMemo(() => {\n if (strategy.type === 'unknown') {\n return [strategy, emptyActions];\n }\n\n return [\n {\n ...strategy,\n annotations: { pages: enabledPages },\n },\n actions,\n ];\n }, [strategy, enabledPages]);\n}\n","import { Vault } from '@iiif/vault';\nimport { useVault } from './useVault';\nimport { useEffect } from 'react';\n\nexport const useVaultEffect = (callback: (vault: Vault) => void, deps: any[] = []): void => {\n const vault = useVault();\n\n useEffect(() => {\n callback(vault);\n }, [vault, ...deps]);\n};\n","import { ImageServiceLoader, getFixedSizeFromImage } from \"@atlas-viewer/iiif-image-api\";\nfunction createThumbnailHelper(vault, dependencies = {}) {\n const imageServiceLoader = dependencies.imageServiceLoader || new ImageServiceLoader();\n async function getBestThumbnailAtSize(input, request, dereference, candidates = [], dimensions) {\n if (typeof input === \"string\") {\n return { best: getFixedSizeFromImage(input), fallback: [], log: [] };\n }\n const fullInput = vault.get(input);\n if (typeof fullInput === \"string\") {\n return { best: getFixedSizeFromImage(fullInput), fallback: [], log: [] };\n }\n switch (fullInput.type) {\n case \"Annotation\": {\n const contentResources = fullInput.body;\n const firstContentResources = vault.get(contentResources[0]);\n if (dimensions && !firstContentResources.width) {\n firstContentResources.width = dimensions.width;\n firstContentResources.height = dimensions.height;\n }\n return await imageServiceLoader.getThumbnailFromResource(firstContentResources, request, dereference, candidates);\n }\n case \"Canvas\": {\n const canvas = fullInput;\n if (canvas.thumbnail && canvas.thumbnail.length) {\n const thumbnail = vault.get(canvas.thumbnail[0]);\n const potentialThumbnails = await imageServiceLoader.getImageCandidates(thumbnail, dereference);\n if (potentialThumbnails && potentialThumbnails.length) {\n candidates.push(...potentialThumbnails);\n }\n }\n return getBestThumbnailAtSize(canvas.items[0], request, dereference, candidates, {\n width: canvas.width,\n height: canvas.height\n });\n }\n case \"AnnotationPage\": {\n const annotationPage = fullInput;\n return getBestThumbnailAtSize(annotationPage.items[0], request, dereference, candidates, dimensions);\n }\n case \"Choice\": {\n const choice = fullInput;\n return getBestThumbnailAtSize(choice.items[0], request, dereference, candidates, dimensions);\n }\n case \"Collection\": {\n const collection = fullInput;\n const firstManifest = collection.items[0];\n return getBestThumbnailAtSize(firstManifest, request, dereference, candidates, dimensions);\n }\n case \"Manifest\": {\n const manifest = fullInput;\n const firstCanvas = manifest.items[0];\n return getBestThumbnailAtSize(firstCanvas, request, dereference, candidates, dimensions);\n }\n case \"SpecificResource\":\n case \"Image\":\n case \"Dataset\":\n case \"Sound\":\n case \"Text\":\n case \"TextualBody\":\n case \"Video\":\n if (dimensions && !fullInput.width) {\n fullInput.width = dimensions.width;\n fullInput.height = dimensions.height;\n }\n return imageServiceLoader.getThumbnailFromResource(fullInput, request, dereference, candidates);\n case \"Service\":\n case \"Range\":\n case \"AnnotationCollection\":\n case \"CanvasReference\":\n case \"ContentResource\":\n return { best: void 0, fallback: [], log: [] };\n }\n return { best: void 0, fallback: [], log: [] };\n }\n return {\n getBestThumbnailAtSize\n };\n}\nexport { createThumbnailHelper };\n//# sourceMappingURL=thumbnail.mjs.map\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useManifest } from './useManifest';\nimport { useCanvas } from './useCanvas';\nimport { useVaultEffect } from './useVaultEffect';\nimport { ImageCandidate, ImageCandidateRequest } from '@atlas-viewer/iiif-image-api';\nimport { useImageServiceLoader } from '../context/ImageServiceLoaderContext';\nimport { createThumbnailHelper } from '@iiif/vault-helpers/thumbnail';\nimport { useVault } from './useVault';\n\nexport function useThumbnail(\n request: ImageCandidateRequest,\n dereference?: boolean,\n { canvasId, manifestId }: { canvasId?: string; manifestId?: string } = {}\n) {\n const vault = useVault();\n const loader = useImageServiceLoader();\n const helper = useMemo(() => createThumbnailHelper(vault, { imageServiceLoader: loader }), [vault, loader]);\n\n const [thumbnail, setThumbnail] = useState<ImageCandidate | undefined>();\n const manifest = useManifest(manifestId ? { id: manifestId } : undefined);\n const canvas = useCanvas(canvasId ? { id: canvasId } : undefined);\n const subject = canvas ? canvas : manifest;\n const didUnmount = useRef(false);\n\n useEffect(() => {\n didUnmount.current = false;\n return () => {\n didUnmount.current = true;\n };\n }, []);\n\n if (!subject) {\n throw new Error('Must be called under a manifest or canvas context.');\n }\n\n useVaultEffect(\n (v) => {\n helper.getBestThumbnailAtSize(subject, request, dereference).then((thumb) => {\n if (thumb.best && !didUnmount.current) {\n setThumbnail(thumb.best);\n }\n });\n },\n [subject]\n );\n\n return thumbnail;\n}\n","import { RefObject, useCallback, useEffect, useReducer, useRef } from 'react';\n\ntype MediaPlayerAction =\n | { type: 'PLAY_PAUSE' }\n | { type: 'TOGGLE_MUTE' }\n | { type: 'MUTE' }\n | { type: 'UNMUTE' }\n | { type: 'SET_VOLUME'; volume: number }\n | { type: 'PLAY' }\n | { type: 'PLAY_REQUESTED' }\n | { type: 'PAUSE' }\n | { type: 'FINISHED' };\n\nexport type MediaPlayerState = {\n isPlaying: boolean;\n isMuted: boolean;\n playRequested: boolean;\n volume: number;\n isFinished: boolean;\n duration: number;\n};\n\nexport type MediaPlayerActions = {\n play(): void;\n pause(): void;\n playPause(): void;\n mute(): void;\n unmute(): void;\n toggleMute(): void;\n setVolume(volume: number): void;\n setDurationPercent(percent: number): void;\n setTime(time: number): void;\n};\n\nfunction getDefaultState(duration: number): MediaPlayerState {\n return { isMuted: false, playRequested: false, isPlaying: false, isFinished: false, volume: 100, duration };\n}\n\nfunction reducer(state: MediaPlayerState, action: MediaPlayerAction) {\n switch (action.type) {\n case 'FINISHED':\n return { ...state, isFinished: true, isPlaying: false, playRequested: false };\n case 'PLAY_PAUSE':\n return { ...state, isFinished: false, isPlaying: !state.isPlaying };\n case 'PLAY_REQUESTED':\n return { ...state, isFinished: false, playRequested: true };\n case 'PAUSE':\n return { ...state, isPlaying: false };\n case 'PLAY':\n return { ...state, isFinished: false, playRequested: false, isPlaying: true };\n case 'MUTE':\n return { ...state, isMuted: true };\n case 'SET_VOLUME':\n return { ...state, volume: action.volume, isMuted: action.volume === 0 };\n case 'TOGGLE_MUTE':\n return { ...state, isMuted: !state.isMuted };\n case 'UNMUTE':\n return { ...state, isMuted: false };\n }\n return state;\n}\n\nexport function formatTime(time: number) {\n const seconds = Math.round(time);\n return `${Math.floor(seconds / 60)}:${`${seconds % 60}`.padStart(2, '0')}`;\n}\n\nexport function useSimpleMediaPlayer(props: { duration: number }): readonly [\n {\n element: RefObject<HTMLAudioElement | HTMLVideoElement>;\n currentTime: RefObject<HTMLDivElement>;\n progress: RefObject<HTMLDivElement>;\n },\n MediaPlayerState,\n MediaPlayerActions\n] {\n const [state, dispatch] = useReducer(reducer, getDefaultState(props.duration));\n\n const media = useRef<HTMLAudioElement | HTMLVideoElement>(null);\n const currentTime = useRef<HTMLDivElement>(null);\n const progress = useRef<HTMLDivElement>(null);\n const _isMuted = useRef(false);\n\n const _updateCurrentTime = useCallback(() => {\n if (currentTime.current && media.current) {\n currentTime.current.innerHTML = formatTime(media.current.currentTime);\n if (progress.current) {\n progress.current.style.width = `${(media.current.currentTime / props.duration) * 100}%`;\n }\n if (_isMuted.current !== media.current.muted) {\n _isMuted.current = media.current.muted;\n dispatch(media.current.muted ? { type: 'MUTE' } : { type: 'UNMUTE' });\n }\n }\n }, [props.duration]);\n\n const play = useCallback(() => {\n if (media.current) {\n dispatch({ type: 'PLAY_REQUESTED' });\n media.current.play().then(() => {\n dispatch({ type: 'PLAY' });\n });\n _updateCurrentTime();\n }\n }, [_updateCurrentTime]);\n\n const playPause = useCallback(() => {\n if (media.current) {\n if (media.current.duration > 0 && media.current.paused) {\n play();\n } else {\n pause();\n }\n }\n }, [_updateCurrentTime]);\n\n const pause = useCallback(() => {\n if (media.current) {\n media.current.pause();\n dispatch({ type: 'PAUSE' });\n _updateCurrentTime();\n }\n }, [_updateCurrentTime]);\n\n const toggleMute = useCallback(() => {\n if (media.current) {\n media.current.muted = !media.current.muted;\n dispatch(media.current.muted ? { type: 'MUTE' } : { type: 'UNMUTE' });\n }\n }, []);\n\n const mute = useCallback(() => {\n if (media.current) {\n media.current.muted = true;\n dispatch({ type: 'MUTE' });\n }\n }, []);\n\n const unmute = useCallback(() => {\n if (media.current) {\n media.current.muted = false;\n dispatch({ type: 'UNMUTE' });\n }\n }, []);\n\n const setVolume = useCallback((newVolume: number) => {\n if (media.current) {\n media.current.muted = false;\n media.current.volume = newVolume / 100;\n dispatch({ type: 'SET_VOLUME', volume: newVolume });\n }\n }, []);\n\n const setDurationPercent = useCallback((percent: number) => {\n if (media.current) {\n media.current.currentTime = Math.max(0, Math.min(percent * props.duration, props.duration));\n _updateCurrentTime();\n }\n }, []);\n\n const setTime = useCallback((time: number) => {\n if (media.current) {\n media.current.currentTime = Math.max(0, Math.min(time, props.duration));\n _updateCurrentTime();\n }\n }, []);\n\n useEffect(() => {\n const interval = setInterval(() => {\n _updateCurrentTime();\n }, 350);\n\n return () => clearInterval(interval);\n }, [_updateCurrentTime, props.duration]);\n\n useEffect(() => {\n const ended = () => {\n dispatch({ type: 'FINISHED' });\n };\n const _media = media.current;\n\n _media?.addEventListener('ended', ended);\n\n return () => _media?.removeEventListener('ended', ended);\n }, []);\n\n return [\n { element: media, currentTime, progress },\n state,\n {\n play,\n pause,\n playPause,\n mute,\n unmute,\n toggleMute,\n setVolume,\n setDurationPercent,\n setTime,\n },\n ];\n}\n","import { createContext, ReactNode, RefObject, useContext } from 'react';\nimport { MediaPlayerActions, MediaPlayerState } from '../hooks/useSimpleMediaPlayer';\n\nconst MediaReactContextState = createContext<MediaPlayerState | null>(null);\nconst MediaReactContextActions = createContext<MediaPlayerActions | null>(null);\nconst MediaReactContextElements = createContext<{\n element: RefObject<HTMLAudioElement | HTMLVideoElement>;\n currentTime: RefObject<HTMLDivElement>;\n progress: RefObject<HTMLDivElement>;\n} | null>(null);\n\nexport function useMediaState() {\n const ctx = useContext(MediaReactContextState);\n if (!ctx) {\n throw new Error('Ctx not found');\n }\n return ctx;\n}\n\nexport function useMediaActions() {\n const ctx = useContext(MediaReactContextActions);\n if (!ctx) {\n throw new Error('Ctx not found');\n }\n return ctx;\n}\n\nexport function useMediaElements() {\n const ctx = useContext(MediaReactContextElements);\n if (!ctx) {\n throw new Error('Ctx not found');\n }\n return ctx;\n}\n\nexport function MediaPlayerProvider({\n actions,\n state,\n children,\n currentTime,\n progress,\n element,\n}: {\n actions: MediaPlayerActions;\n state: MediaPlayerState;\n children: ReactNode;\n currentTime: RefObject<HTMLDivElement>;\n progress: RefObject<HTMLDivElement>;\n element: RefObject<HTMLAudioElement | HTMLVideoElement>;\n}) {\n return (\n <MediaReactContextElements.Provider value={{ currentTime, progress, element }}>\n <MediaReactContextActions.Provider value={actions}>\n <MediaReactContextState.Provider value={state}>{children}</MediaReactContextState.Provider>\n </MediaReactContextActions.Provider>\n </MediaReactContextElements.Provider>\n );\n}\n","import { ReactNode } from 'react';\nimport { useSimpleMediaPlayer } from '../../hooks/useSimpleMediaPlayer';\nimport { SingleAudio } from '../../features/rendering-strategy/resource-types';\nimport { MediaPlayerProvider } from '../../context/MediaContext';\nimport { CanvasPortal } from '../../context/PortalContext';\n\nexport function Audio({ media, children }: { media: SingleAudio; children: ReactNode }) {\n const [{ element, currentTime, progress }, state, actions] = useSimpleMediaPlayer({ duration: media.duration });\n\n return (\n <>\n <CanvasPortal>\n <MediaPlayerProvider\n state={state}\n actions={actions}\n currentTime={currentTime}\n progress={progress}\n element={element}\n >\n <audio ref={element} src={media.url} />\n {children}\n </MediaPlayerProvider>\n </CanvasPortal>\n </>\n );\n}\n","import { ReactNode } from 'react';\nimport { useSimpleMediaPlayer } from '../../hooks/useSimpleMediaPlayer';\nimport { SingleAudio, SingleVideo } from '../../features/rendering-strategy/resource-types';\nimport { MediaPlayerProvider } from '../../context/MediaContext';\nimport { CanvasPortal } from '../../context/PortalContext';\n\nexport function Video({ media, children }: { media: SingleVideo; children: ReactNode }) {\n const [{ element, currentTime, progress }, state, actions] = useSimpleMediaPlayer({ duration: media.duration });\n const Component = 'div' as any;\n\n return (\n <>\n <CanvasPortal overlay>\n <style>\n {`\n .video-container {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: #000;\n z-index: 13;\n display: flex;\n justify-content: center;\n pointer-events: visible;\n }\n `}\n </style>\n <Component className=\"video-container\" part=\"video-container\" onClick={() => actions.playPause()}>\n <video ref={element as any} src={media.url} style={{ width: '100%', objectFit: 'contain' }} />\n </Component>\n </CanvasPortal>\n <CanvasPortal>\n <MediaPlayerProvider\n state={state}\n actions={actions}\n currentTime={currentTime}\n progress={progress}\n element={element}\n >\n {children}\n </MediaPlayerProvider>\n </CanvasPortal>\n </>\n );\n}\n","// @ts-ignore\nimport ModelViewer from 'react-model-viewer';\nimport { CanvasPortal } from '../../context/PortalContext';\n\nexport function Model({ model }: { model: any }) {\n return (\n <CanvasPortal overlay>\n <style>\n {`\n .model-container {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: #000;\n z-index: 13;\n display: flex;\n justify-content: center;\n pointer-events: visible;\n }\n `}\n </style>\n <div className=\"model-container\">\n {/*@ts-ignore*/}\n <model-viewer\n interaction-prompt=\"none\"\n style={{ width: '100%', height: '100%' }}\n camera-controls=\"\"\n ar-status=\"not-presenting\"\n src={model.id}\n />\n </div>\n </CanvasPortal>\n );\n}\n","import { BoxStyle } from '@atlas-viewer/atlas';\nimport { useCanvas } from '../../hooks/useCanvas';\n\nexport function CanvasBackground({ style }: { style?: BoxStyle }) {\n const canvas = useCanvas();\n\n if (!canvas || !canvas.height || !canvas.width) {\n return null;\n }\n\n return <box interactive={false} target={{ x: 0, y: 0, width: canvas.width, height: canvas.height }} style={style} />;\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nimport React, { useContext, useState, useRef, useEffect, useMemo } from \"react\";\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps)\n _defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nvar defaultOptions = {\n bindI18n: \"languageChanged\",\n bindI18nStore: \"\",\n transEmptyNodeValue: \"\",\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: \"\",\n transKeepBasicHtmlNodesFor: [\"br\", \"strong\", \"i\", \"p\"],\n useSuspense: true\n};\nvar i18nInstance;\nvar I18nContext = React.createContext();\nfunction getDefaults() {\n return defaultOptions;\n}\nvar ReportNamespaces = function() {\n function ReportNamespaces2() {\n _classCallCheck(this, ReportNamespaces2);\n this.usedNamespaces = {};\n }\n _createClass(ReportNamespaces2, [{\n key: \"addUsedNamespaces\",\n value: function addUsedNamespaces(namespaces) {\n var _this = this;\n namespaces.forEach(function(ns) {\n if (!_this.usedNamespaces[ns])\n _this.usedNamespaces[ns] = true;\n });\n }\n }, {\n key: \"getUsedNamespaces\",\n value: function getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n }]);\n return ReportNamespaces2;\n}();\nfunction getI18n() {\n return i18nInstance;\n}\nfunction warn() {\n if (console && console.warn) {\n var _console;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (typeof args[0] === \"string\")\n args[0] = \"react-i18next:: \".concat(args[0]);\n (_console = console).warn.apply(_console, args);\n }\n}\nvar alreadyWarned = {};\nfunction warnOnce() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === \"string\" && alreadyWarned[args[0]])\n return;\n if (typeof args[0] === \"string\")\n alreadyWarned[args[0]] = new Date();\n warn.apply(void 0, args);\n}\nfunction loadNamespaces(i18n, ns, cb) {\n i18n.loadNamespaces(ns, function() {\n if (i18n.isInitialized) {\n cb();\n } else {\n var initialized = function initialized2() {\n setTimeout(function() {\n i18n.off(\"initialized\", initialized2);\n }, 0);\n cb();\n };\n i18n.on(\"initialized\", initialized);\n }\n });\n}\nfunction hasLoadedNamespace(ns, i18n) {\n var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(\"i18n.languages were undefined or empty\", i18n.languages);\n return true;\n }\n var lng = i18n.languages[0];\n var fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n var lastLng = i18n.languages[i18n.languages.length - 1];\n if (lng.toLowerCase() === \"cimode\")\n return true;\n var loadNotPending = function loadNotPending2(l, n) {\n var loadState = i18n.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n };\n if (options.bindI18n && options.bindI18n.indexOf(\"languageChanging\") > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns))\n return false;\n if (i18n.hasResourceBundle(lng, ns))\n return true;\n if (!i18n.services.backendConnector.backend)\n return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns)))\n return true;\n return false;\n}\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr))\n return arr;\n}\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null)\n return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i)\n break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null)\n _i[\"return\"]();\n } finally {\n if (_d)\n throw _e;\n }\n }\n return _arr;\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length)\n len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o)\n return;\n if (typeof o === \"string\")\n return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor)\n n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\")\n return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))\n return _arrayLikeToArray(o, minLen);\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction useTranslation(ns) {\n var props = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n var i18nFromProps = props.i18n;\n var _ref = useContext(I18nContext) || {}, i18nFromContext = _ref.i18n, defaultNSFromContext = _ref.defaultNS;\n var i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces)\n i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce(\"You will need to pass in an i18next instance by using initReactI18next\");\n var notReadyT = function notReadyT2(k) {\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n var retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n if (i18n.options.react && i18n.options.react.wait !== void 0)\n warnOnce(\"It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.\");\n var i18nOptions = _objectSpread(_objectSpread(_objectSpread({}, getDefaults()), i18n.options.react), props);\n var useSuspense = i18nOptions.useSuspense, keyPrefix = i18nOptions.keyPrefix;\n var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = typeof namespaces === \"string\" ? [namespaces] : namespaces || [\"translation\"];\n if (i18n.reportNamespaces.addUsedNamespaces)\n i18n.reportNamespaces.addUsedNamespaces(namespaces);\n var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function(n) {\n return hasLoadedNamespace(n, i18n, i18nOptions);\n });\n function getT() {\n return i18n.getFixedT(null, i18nOptions.nsMode === \"fallback\" ? namespaces : namespaces[0], keyPrefix);\n }\n var _useState = useState(getT), _useState2 = _slicedToArray(_useState, 2), t = _useState2[0], setT = _useState2[1];\n var isMounted = useRef(true);\n useEffect(function() {\n var bindI18n = i18nOptions.bindI18n, bindI18nStore = i18nOptions.bindI18nStore;\n isMounted.current = true;\n if (!ready && !useSuspense) {\n loadNamespaces(i18n, namespaces, function() {\n if (isMounted.current)\n setT(getT);\n });\n }\n function boundReset() {\n if (isMounted.current)\n setT(getT);\n }\n if (bindI18n && i18n)\n i18n.on(bindI18n, boundReset);\n if (bindI18nStore && i18n)\n i18n.store.on(bindI18nStore, boundReset);\n return function() {\n isMounted.current = false;\n if (bindI18n && i18n)\n bindI18n.split(\" \").forEach(function(e) {\n return i18n.off(e, boundReset);\n });\n if (bindI18nStore && i18n)\n bindI18nStore.split(\" \").forEach(function(e) {\n return i18n.store.off(e, boundReset);\n });\n };\n }, [i18n, namespaces.join()]);\n var isInitial = useRef(true);\n useEffect(function() {\n if (isMounted.current && !isInitial.current) {\n setT(getT);\n }\n isInitial.current = false;\n }, [i18n]);\n var ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready)\n return ret;\n if (!ready && !useSuspense)\n return ret;\n throw new Promise(function(resolve) {\n loadNamespaces(i18n, namespaces, function() {\n resolve();\n });\n });\n}\nfunction LanguageString(_a) {\n var _b = _a, {\n as: Component,\n language,\n children\n } = _b, props = __objRest(_b, [\n \"as\",\n \"language\",\n \"children\"\n ]);\n const { i18n } = useTranslation();\n const viewingDirection = useMemo(() => i18n.dir ? i18n.dir(language) : \"ltr\", [language]);\n const isSame = useMemo(() => {\n if (!i18n.services) {\n return false;\n }\n return i18n.services.languageUtils.getLanguagePartFromCode(i18n.language) === i18n.services.languageUtils.getLanguagePartFromCode(language);\n }, [i18n.language, language]);\n if (isSame) {\n if (Component) {\n return /* @__PURE__ */ React.createElement(Component, __spreadValues({}, props), children);\n }\n return /* @__PURE__ */ React.createElement(\"span\", __spreadValues({}, props), children);\n }\n if (Component) {\n return /* @__PURE__ */ React.createElement(Component, __spreadProps(__spreadValues({}, props), {\n lang: language,\n dir: viewingDirection\n }), children);\n }\n return /* @__PURE__ */ React.createElement(\"span\", __spreadProps(__spreadValues({}, props), {\n lang: language,\n dir: viewingDirection\n }), children);\n}\nfunction getClosestLanguage(i18nLanguage, languages, i18nLanguages = [], strictFallback = false) {\n if (!i18nLanguage || !languages || languages.length === 0) {\n return void 0;\n }\n if (languages.length === 1) {\n return languages[0];\n }\n if (languages.indexOf(i18nLanguage) !== -1) {\n return i18nLanguage;\n }\n const root = i18nLanguage.indexOf(\"-\") !== -1 ? i18nLanguage.slice(0, i18nLanguage.indexOf(\"-\")) : null;\n if (root && languages.indexOf(root) !== -1) {\n return root;\n }\n for (const lang of i18nLanguages) {\n if (languages.indexOf(lang) !== -1) {\n return lang;\n }\n }\n if (!strictFallback) {\n const inverseRoot = languages.map((l) => l.indexOf(\"-\") !== -1 ? l.slice(0, l.indexOf(\"-\")) : null);\n const inverseIdx = inverseRoot.indexOf(i18nLanguage);\n if (inverseIdx !== -1) {\n return languages[inverseIdx];\n }\n for (const lang of i18nLanguages) {\n const root2 = lang.indexOf(\"-\") !== -1 ? lang.slice(0, lang.indexOf(\"-\")) : null;\n const inverseIdx2 = root2 ? languages.indexOf(root2) : -1;\n if (inverseIdx2 !== -1) {\n return languages[inverseIdx2];\n }\n }\n }\n if (languages.indexOf(\"none\") !== -1) {\n return \"none\";\n }\n if (languages.indexOf(\"@none\") !== -1) {\n return \"@none\";\n }\n return languages[0];\n}\nfunction buildLocaleString(inputText, i18nLanguage, options = {}) {\n const { strictFallback = false, defaultText = \"\", separator = \"\\n\", fallbackLanguages = [], closest } = options;\n const languages = Object.keys(inputText || {});\n const language = closest ? i18nLanguage : getClosestLanguage(i18nLanguage, languages, fallbackLanguages, strictFallback);\n if (!inputText) {\n return defaultText;\n }\n if (typeof inputText === \"string\") {\n return inputText;\n }\n const candidateText = language ? inputText[language] : void 0;\n if (candidateText) {\n if (typeof candidateText === \"string\") {\n return candidateText;\n }\n return candidateText.join(separator);\n }\n return \"\";\n}\nfunction useClosestLanguage(getLanguages, deps = []) {\n const { i18n } = useTranslation();\n const i18nLanguages = i18n && i18n.languages ? i18n.languages : [];\n const i18nLanguage = i18n && i18n.language ? i18n.language : \"en\";\n return useMemo(() => {\n const languages = getLanguages();\n return getClosestLanguage(i18nLanguage, languages, i18nLanguages);\n }, [i18nLanguages, i18nLanguage, ...deps]);\n}\nfunction useLocaleString(inputText, defaultText) {\n const language = useClosestLanguage(() => Object.keys(inputText || {}), [inputText]);\n return [\n useMemo(() => {\n return buildLocaleString(inputText, language, {\n defaultText,\n closest: true\n });\n }, [language, defaultText, inputText]),\n language\n ];\n}\nconst LocaleString = (_c) => {\n var _d = _c, { as: Component, defaultText, enableDangerouslySetInnerHTML, children } = _d, props = __objRest(_d, [\"as\", \"defaultText\", \"enableDangerouslySetInnerHTML\", \"children\"]);\n const [text, language] = useLocaleString(children, defaultText);\n if (language) {\n return /* @__PURE__ */ React.createElement(LanguageString, __spreadProps(__spreadValues({}, props), {\n as: Component,\n language,\n title: enableDangerouslySetInnerHTML ? void 0 : text,\n dangerouslySetInnerHTML: enableDangerouslySetInnerHTML ? {\n __html: text\n } : void 0\n }), enableDangerouslySetInnerHTML ? void 0 : text);\n }\n if (Component) {\n return /* @__PURE__ */ React.createElement(Component, __spreadValues({}, props), text);\n }\n return /* @__PURE__ */ React.createElement(\"span\", __spreadProps(__spreadValues({}, props), {\n title: enableDangerouslySetInnerHTML ? void 0 : text,\n dangerouslySetInnerHTML: enableDangerouslySetInnerHTML ? {\n __html: text\n } : void 0\n }), enableDangerouslySetInnerHTML ? void 0 : text);\n};\nfunction useCreateLocaleString() {\n const { i18n } = useTranslation();\n const i18nLanguages = i18n && i18n.languages ? i18n.languages : [];\n const i18nLanguage = i18n && i18n.language ? i18n.language : \"en\";\n return function createLocaleString(inputText, defaultText) {\n return buildLocaleString(inputText, i18nLanguage, { fallbackLanguages: i18nLanguages, defaultText });\n };\n}\nexport { LanguageString, LocaleString, useClosestLanguage, useCreateLocaleString, useLocaleString };\n//# sourceMappingURL=react-i18next.mjs.map\n","import { createStylesHelper } from '@iiif/vault-helpers/styles';\nimport { RenderImage } from './Image';\nimport React, { Fragment, ReactNode, useEffect, useLayoutEffect, useMemo } from 'react';\nimport { BoxStyle, HTMLPortal } from '@atlas-viewer/atlas';\nimport { useVirtualAnnotationPageContext } from '../../hooks/useVirtualAnnotationPageContext';\nimport { ChoiceDescription } from '../../features/rendering-strategy/choice-types';\nimport { StrategyActions, useRenderingStrategy } from '../../hooks/useRenderingStrategy';\nimport { useVault } from '../../hooks/useVault';\nimport { useResourceEvents } from '../../hooks/useResourceEvents';\nimport { useThumbnail } from '../../hooks/useThumbnail';\nimport { useCanvas } from '../../hooks/useCanvas';\nimport { RenderAnnotationPage } from './AnnotationPage';\nimport { Audio } from './Audio';\nimport { EmptyStrategy, MediaStrategy, RenderingStrategy } from '../../features/rendering-strategy/strategies';\nimport { Video } from './Video';\nimport { Model } from './Model';\nimport { CanvasContext } from '../../context/CanvasContext';\nimport { SingleImageStrategy } from '../../features/rendering-strategy/image-strategy';\nimport { CanvasPortal } from '../../context/PortalContext';\nimport { CanvasBackground } from './CanvasBackground';\nimport { ImageWithOptionalService } from '../../features/rendering-strategy/resource-types';\nimport { LocaleString } from '@iiif/vault-helpers/react-i18next';\n\ntype CanvasProps = {\n x?: number;\n y?: number;\n onCreated?: any;\n onChoiceChange?: (choice?: ChoiceDescription) => void;\n registerActions?: (actions: StrategyActions) => void;\n defaultChoices?: Array<{ id: string; opacity?: number }>;\n isStatic?: boolean;\n children?: ReactNode;\n renderViewerControls?: (strategy: SingleImageStrategy | EmptyStrategy) => ReactNode;\n renderMediaControls?: (strategy: MediaStrategy) => ReactNode;\n strategies?: Array<RenderingStrategy['type']>;\n backgroundStyle?: BoxStyle;\n alwaysShowBackground?: boolean;\n onClickPaintingAnnotation?: (id: string, image: ImageWithOptionalService, e: any) => void;\n};\n\nexport function RenderCanvas({\n x,\n y,\n onChoiceChange,\n registerActions,\n defaultChoices,\n isStatic,\n renderViewerControls,\n renderMediaControls,\n strategies,\n backgroundStyle,\n alwaysShowBackground,\n onClickPaintingAnnotation,\n children,\n}: CanvasProps) {\n const canvas = useCanvas();\n const elementProps = useResourceEvents(canvas, ['deep-zoom']);\n const [virtualPage] = useVirtualAnnotationPageContext();\n const vault = useVault();\n const helper = useMemo(() => createStylesHelper(vault), [vault]);\n const [strategy, actions] = useRenderingStrategy({\n strategies: strategies || ['images'],\n defaultChoices: defaultChoices?.map(({ id }) => id),\n });\n const choice = strategy.type === 'images' ? strategy.choice : undefined;\n\n useEffect(() => {\n if (registerActions) {\n registerActions(actions);\n }\n }, [strategy.annotations]);\n\n useEffect(() => {\n if (defaultChoices) {\n for (const choice of defaultChoices) {\n if (typeof choice.opacity !== 'undefined') {\n helper.applyStyles({ id: choice.id }, 'atlas', {\n opacity: choice.opacity,\n });\n }\n }\n }\n }, [defaultChoices]);\n\n useLayoutEffect(() => {\n if (onChoiceChange) {\n onChoiceChange(choice);\n }\n }, [choice]);\n\n const thumbnail = useThumbnail({ maxWidth: 256, maxHeight: 256 });\n\n if (!canvas) {\n return null;\n }\n\n // accompanyingCanvas\n const accompanyingCanvas = canvas.accompanyingCanvas;\n\n const thumbnailFallbackImage =\n thumbnail && thumbnail.type === 'fixed' ? (\n <world-object height={canvas.height} width={canvas.width} x={x} y={y}>\n <world-image\n uri={thumbnail.id}\n target={{ x: 0, y: 0, width: canvas.width, height: canvas.height }}\n display={\n thumbnail.width && thumbnail.height\n ? {\n width: thumbnail.width,\n height: thumbnail.height,\n }\n : undefined\n }\n />\n </world-object>\n ) : null;\n\n if (strategy.type === 'unknown') {\n if (thumbnailFallbackImage) {\n return thumbnailFallbackImage;\n }\n\n throw new Error(strategy.reason || 'Unknown image strategy');\n }\n\n const annotations = (\n <Fragment>\n {virtualPage ? <RenderAnnotationPage page={virtualPage} /> : null}\n {strategy.annotations && strategy.annotations.pages\n ? strategy.annotations.pages.map((page) => {\n return <RenderAnnotationPage key={page.id} page={page} />;\n })\n : null}\n {children}\n </Fragment>\n );\n\n return (\n <>\n <world-object\n key={`${canvas.id}/${strategy.type}`}\n height={canvas.height}\n width={canvas.width}\n x={x}\n y={y}\n {...elementProps}\n >\n {strategy.type === 'empty' || alwaysShowBackground ? <CanvasBackground style={backgroundStyle} /> : null}\n {strategy.type === 'textual-content'\n ? strategy.items.map((item, n) => {\n return (\n <>\n <HTMLPortal\n key={n}\n // @ts-ignore\n onClick={\n onClickPaintingAnnotation\n ? (e: any) => {\n e.stopPropagation();\n onClickPaintingAnnotation(item.annotationId, item as any, e);\n }\n : undefined\n }\n target={(item.target as any).spatial || undefined}\n >\n <LocaleString>{item.text}</LocaleString>\n </HTMLPortal>\n {annotations}\n </>\n );\n })\n : null}\n {strategy.type === 'images' ? (\n <>\n {strategy.images.map((image, idx) => (\n <RenderImage\n isStatic={isStatic}\n key={image.id}\n image={image}\n id={image.id}\n thumbnail={idx === 0 ? thumbnail : undefined}\n onClick={\n onClickPaintingAnnotation\n ? (e) => {\n e.stopPropagation();\n onClickPaintingAnnotation(image.annotationId, image, e);\n }\n : undefined\n }\n />\n ))}\n {annotations}\n </>\n ) : null}\n {(strategy.type === 'images' || strategy.type === 'empty' || strategy.type === 'textual-content') &&\n renderViewerControls ? (\n <CanvasPortal overlay>{renderViewerControls(strategy as any)}</CanvasPortal>\n ) : null}\n {strategy.type === '3d-model' ? <Model model={strategy.model} /> : null}\n {strategy.type === 'media' ? (\n <>\n {strategy.media.type === 'Sound' ? (\n <Audio media={strategy.media}>\n {thumbnailFallbackImage}\n {renderMediaControls ? renderMediaControls(strategy) : null}\n </Audio>\n ) : strategy.media.type === 'Video' ? (\n <Video media={strategy.media}>\n {thumbnailFallbackImage}\n {renderMediaControls ? renderMediaControls(strategy) : null}\n </Video>\n ) : null}\n </>\n ) : null}\n {/* This is required to fix a race condition. */}\n </world-object>\n {strategy.type === 'media' && strategy.media.type === 'Sound' && accompanyingCanvas ? (\n <CanvasContext canvas={accompanyingCanvas.id}>\n <RenderCanvas renderViewerControls={renderViewerControls} />\n </CanvasContext>\n ) : null}\n </>\n );\n}\n","import { Viewer } from './Viewer';\nimport { RenderAnnotation } from './render/Annotation';\nimport { RenderAnnotationPage } from './render/AnnotationPage';\nimport { RenderCanvas } from './render/Canvas';\nimport { RenderImage } from './render/Image';\nimport { CanvasBackground } from './render/CanvasBackground';\n\nexport const CanvasPanel = {\n RenderImage,\n RenderCanvas,\n RenderAnnotationPage,\n RenderAnnotation,\n Viewer,\n CanvasBackground,\n};\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function AnnotationContext({ annotation, children }: { annotation: string; children: ReactNode }) {\n return <ResourceProvider value={{ annotation }}>{children}</ResourceProvider>;\n}\n","import React, { ReactNode } from 'react';\nimport { ResourceProvider } from './ResourceContext';\n\nexport function AnnotationPageContext({ annotationPage, children }: { annotationPage: string; children: ReactNode }) {\n return <ResourceProvider value={{ annotationPage }}>{children}</ResourceProvider>;\n}\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function CollectionContext({ collection, children }: { collection: string; children: ReactNode }) {\n return <ResourceProvider value={{ collection }}>{children}</ResourceProvider>;\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useAnnotationPage(options?: { id: string }): AnnotationPageNormalized | undefined;\nexport function useAnnotationPage<T>(\n options?: { id: string; selector: (annotation: AnnotationPageNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useAnnotationPage<T = AnnotationPageNormalized>(\n options: {\n id?: string;\n selector?: (annotation: AnnotationPageNormalized) => T;\n } = {},\n deps: any[] = []\n): AnnotationPageNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const annotationPageId = id ? id : ctx.annotationPage;\n\n const annotationPage = useVaultSelector(\n (s) => (annotationPageId ? s.iiif.entities.AnnotationPage[annotationPageId] : undefined),\n [annotationPageId]\n );\n\n return useMemo(() => {\n if (!annotationPage) {\n return undefined;\n }\n\n if (selector) {\n return selector(annotationPage);\n }\n return annotationPage;\n }, [annotationPage, ...deps]);\n}\n","// This works under a canvas context\n// The canvas must have a duration\n// When given a timestamp (ms) from the canvas clock will return a list of annotations\n// that need to be painted.\nimport { AnnotationNormalized } from '@iiif/presentation-3';\nimport { usePaintingAnnotations } from './usePaintingAnnotations';\n\nexport function useAnnotationsAtTime(time: number, options: { canvasId?: string } = {}): AnnotationNormalized[] {\n const allAnnotations = usePaintingAnnotations(options);\n\n // @todo filter.\n\n return allAnnotations;\n}\n","// This will be valid under a canvas.\n// It will be an interface for controlling a virtual clock.\n// It will take in some configuration, like frequency\n// and return some data, like current time\n// It will also provide some methods, like high performance syncing for media\n// And it will also have some basic hooks into the HTML audio/video elements to sync those.\n// Other methods for controlling the clock would be:\n// - set current time\n// - fast forward\n// - rewind\n// - set playback speed\n//\n// Other hooks might come out for priority updates. Like: useLowPriorityCanvasClock(), which will update at a preset\n// lower tick rate.\n\nexport function useCanvasClock(canvasId?: string, autoplay = false) {\n /*\n const canvas = useCanvas(canvasId ? { id: canvasId } : undefined);\n if (!canvas || typeof canvas.duration === 'undefined') {\n throw new Error('Unsupported or undefined canvas');\n }\n\n const update = useUpdate();\n const [lastCall, setLastCall] = useState(0);\n const [currentTime, setCurrentTime] = useState(0);\n\n const [loopStop, loopStart, isActive] = useRafLoop((time) => {\n const timeInSeconds = lastCall === 0 ? 0 : (time - lastCall) / 1000;\n if (currentTime + timeInSeconds < canvas.duration) {\n setCurrentTime((t) => t + timeInSeconds);\n } else {\n setCurrentTime(canvas.duration);\n loopStop();\n }\n setLastCall(time);\n }, autoplay);\n\n const play = useCallback(() => {\n if (currentTime === canvas.duration) {\n setCurrentTime(0);\n setLastCall(0);\n }\n loopStart();\n update();\n }, [currentTime, loopStart, update]);\n\n const pause = useCallback(() => {\n loopStop();\n update();\n }, [loopStop, update]);\n\n return {\n isPlaying: isActive(),\n currentTime,\n duration: canvas.duration,\n play,\n pause,\n seek: setCurrentTime,\n };\n\n */\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { Reference } from '@iiif/presentation-3';\nimport { useVaultSelector } from './useVaultSelector';\nimport { IIIFStore } from '@iiif/vault';\n\nexport function useCanvasSubset(idsOrRefs?: Array<string | Reference>) {\n const ctx = useResourceContext();\n const manifestId = ctx.manifest;\n const refs = idsOrRefs ? idsOrRefs.map((item) => (typeof item === 'string' ? item : item?.id)) : [];\n return useVaultSelector(\n (s: IIIFStore) => {\n const manifest = manifestId ? s.iiif.entities.Manifest[manifestId] : undefined;\n const items = manifest?.items || [];\n\n if (typeof idsOrRefs === 'undefined') {\n return items;\n }\n\n const newItems = [];\n for (const item of manifest?.items || []) {\n if (refs.indexOf(item.id) !== -1) {\n newItems.push(item);\n }\n }\n\n return newItems;\n },\n [refs.join('/')]\n );\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { CollectionNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useCollection(options: { id: string }): CollectionNormalized | undefined;\nexport function useCollection<T>(\n options: { id: string; selector: (collection: CollectionNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useCollection<T = CollectionNormalized>(\n options: {\n id?: string;\n selector?: (collection: CollectionNormalized) => T;\n },\n deps: any[] = []\n): CollectionNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const collectionId = id ? id : ctx.collection;\n\n const collection = useVaultSelector(\n (s) => (collectionId ? s.iiif.entities.Collection[collectionId] : undefined),\n [collectionId]\n );\n\n return useMemo(() => {\n if (!collection) {\n return undefined;\n }\n if (selector) {\n return selector(collection);\n }\n return collection;\n }, [collection, selector, ...deps]);\n}\n","import { Reference } from '@iiif/presentation-3';\nimport { useVault } from './useVault';\nimport { useEffect, useMemo } from 'react';\nimport { createEventsHelper } from '@iiif/vault-helpers/events';\n\ntype SupportedEvents = 'onClick';\n\nexport function useEventListener<T>(\n resource: Reference,\n name: SupportedEvents,\n listener: (e: any, resource: T) => void,\n scope?: string[],\n deps: any[] = []\n) {\n const vault = useVault();\n const helper = useMemo(() => createEventsHelper(vault), [vault]);\n\n useEffect(() => {\n const currentResource = resource;\n if (!currentResource) {\n return () => {\n //\n };\n }\n helper.addEventListener(currentResource, name, listener, scope);\n return () => {\n helper.removeEventListener(currentResource, name, listener);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [helper, resource, name, ...deps]);\n}\n","import { globalVault } from '@iiif/vault';\nimport { useContext } from 'react';\nimport { ReactVaultContext } from '../context/VaultContext';\n\nexport function useExistingVault() {\n const oldContext: any = useContext(ReactVaultContext);\n\n return oldContext && oldContext.vault ? (oldContext.vault as any) : globalVault();\n}\n","import { CollectionNormalized } from '@iiif/presentation-3';\nimport { ResourceRequestOptions, useExternalResource } from './useExternalResource';\n\nexport function useExternalCollection(\n idOrRef: string | { id: string; type: string },\n options?: ResourceRequestOptions\n): {\n id: string;\n requestId: string;\n isLoaded: boolean;\n cached?: boolean;\n error: any;\n manifest?: CollectionNormalized;\n} {\n const { id, isLoaded, error, resource, requestId, cached } = useExternalResource<CollectionNormalized>(\n idOrRef,\n options\n );\n\n return { id, isLoaded, error, manifest: resource, requestId, cached };\n}\n","import { usePaintingAnnotations } from './usePaintingAnnotations';\nimport { getImageServices } from '@atlas-viewer/iiif-image-api';\nimport { useCanvas } from './useCanvas';\nimport { useVault } from './useVault';\nimport { IIIFExternalWebResource, ImageService } from '@iiif/presentation-3';\nimport { useImageServiceLoader } from '../context/ImageServiceLoaderContext';\nimport { useEffect, useMemo, useState } from 'react';\n\nexport interface ImageServiceRequestOptions {\n cacheKey?: string;\n}\n\n/**\n * Returns the First image service on the current canvas.\n *\n * @note It is better to use the hook useRenderingStrategy for rendering.\n */\nexport function useImageService({ cacheKey }: ImageServiceRequestOptions = {}): {\n data: ImageService | undefined;\n isFetching: boolean;\n status: 'error' | 'success' | 'loading' | 'idle';\n} {\n const canvas = useCanvas();\n const annotations = usePaintingAnnotations();\n const vault = useVault();\n const imageService = useImageServiceLoader();\n const [_data, setData] = useState<ImageService | undefined>(undefined);\n const [isFetching, setIsFetching] = useState(false);\n const [status, setStatus] = useState<'error' | 'success' | 'loading' | 'idle'>('idle');\n const [error, setError] = useState<Error | undefined>(undefined);\n const key = canvas ? canvas.id : 'undefined';\n const initialData = useMemo(() => {\n try {\n if (canvas && annotations.length) {\n const annotation = annotations[0];\n const resource = vault.get<IIIFExternalWebResource>(annotation.body[0]);\n const imageServices = getImageServices(resource as any);\n const firstImageService = imageServices[0];\n\n if (!firstImageService) {\n return undefined;\n }\n\n return (\n imageService.loadServiceSync({\n id: firstImageService.id || (firstImageService['@id'] as string),\n width: firstImageService.width || canvas.width,\n height: firstImageService.height || canvas.height,\n }) || undefined\n );\n }\n } catch (e) {\n console.error(e);\n // silent error.\n }\n\n return undefined;\n\n // This is specifically not exhaustive. We only want to try to loadSync initially or when the canvas changes.\n }, [key, cacheKey, canvas]);\n\n const data = status === 'success' && _data ? _data : initialData;\n\n useEffect(() => {\n (async () => {\n try {\n if (canvas && annotations.length) {\n const annotation = annotations[0];\n const resource = vault.get<IIIFExternalWebResource>(annotation.body[0]);\n const imageServices = getImageServices(resource as any) as any[];\n const firstImageService = imageServices[0] as any;\n\n if (!firstImageService) {\n return;\n }\n\n setIsFetching(true);\n setStatus('loading');\n\n try {\n const loadedService =\n (await imageService.loadService({\n id: firstImageService.id || firstImageService['@id'],\n width: firstImageService.width || canvas.width,\n height: firstImageService.height || canvas.height,\n })) || undefined;\n\n setData(loadedService);\n setStatus('success');\n setIsFetching(false);\n } catch (err) {\n setStatus('error');\n setError(err as Error);\n }\n }\n } catch (err) {\n setStatus('error');\n setError(err as Error);\n }\n })();\n\n // It's important that this DOESN'T refresh every time there is a new canvas change.\n // In an editing situation, the cache key should be used.\n }, [key, cacheKey]);\n\n return useMemo(() => {\n return {\n data,\n isFetching,\n status,\n error,\n };\n }, [data, isFetching, status, error]);\n}\n","import { useImageService } from './useImageService';\nimport { ImageService } from '@iiif/presentation-3';\n\nexport function useImageTile() {\n const imageService = useImageService();\n\n return {\n isLoading: imageService.isFetching,\n tile: imageService.data\n ? {\n id: imageService.data.id || imageService.data['@id'],\n width: imageService.data.width,\n height: imageService.data.height,\n imageService: imageService.data as ImageService,\n thumbnail: undefined,\n }\n : null,\n };\n}\n","// This works inside of a manifest context\n// Final API to be decided, but this hook will be for driving search querying itself\n// Another hook/context will handle actually getting the search results for a particular canvas\nimport { useManifest } from './useManifest';\nimport { SearchService, ServiceNormalized } from '@iiif/presentation-3';\n\nexport function useSearchService(): SearchService | undefined {\n const manifest = useManifest();\n return manifest\n ? (manifest.service.find(\n (service: ServiceNormalized) =>\n service.profile === 'SearchService1' || service.profile === 'http://iiif.io/api/search/1/search'\n ) as any)\n : undefined;\n}\n","import { useVault } from './useVault';\nimport { createStylesHelper } from '@iiif/vault-helpers/styles';\nimport { useMemo } from 'react';\n\nexport function useStyleHelper() {\n const vault = useVault();\n return useMemo(() => createStylesHelper(vault), [vault]);\n}\n"],"names":["setPrototypeOf","defaultResourceContext","collection","undefined","manifest","range","canvas","annotation","annotationPage","ResourceReactContext","React","createContext","useResourceContext","useContext","value","children","parentContext","newContext","useMemo","_jsx","ReactVaultContext","vault","setVaultInstance","vaultOptions","useGlobal","resources","vaultInstance","useState","globalVault","Vault","VisibleCanvasReactContext","ids","useVaultSelector","state","map","id","iiif","entities","Canvas","filter","Boolean","noop","SimpleViewerReactContext","setCurrentCanvasId","setCurrentCanvasIndex","nextCanvas","previousCanvas","items","sequence","setSequenceIndex","currentSequenceIndex","props","useManifest","cursor","visibleItems","next","setCanvasIndex","setCanvasId","previous","useCanvasSequence","startCanvas","disablePaging","pagingEnabled","ctx","totalCanvases","length","console","warn","useExternalManifest","isLoaded","inner","rangeId","VaultContext","ResourceContext","bridge","VirtualAnnotationPageContext","fullPage","addAnnotation","removeAnnotation","useVirtualAnnotationPage","width","style","height","minHeight","background","ViewerPresetContext","PortalContext","OverlayPortalContext","overlay","htmlElement","preset","useViewerPreset","useLayoutEffect","render","e","errorFallback","outerContainerProps","portal","useRef","portalElement","setPortalElement","viewerPreset","setViewerPreset","overlayPortal","overlayPortalElement","setOverlayPortalElement","useContextBridge","ErrorFallback","DefaultCanvasFallback","roots","current","$el","document","createElement","appendChild","createRoot","setTimeout","unmount","position","containerProps","onCreated","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","RenderAnnotation","defaultStyle","className","interactive","useAnnotation","useStyles","html","events","useResourceEvents","useCanvas","allStyles","mergeStyles","isValid","target","selector","type","source","spatial","href","title","RenderAnnotationPage","page","AnnotationPage","image","thumbnail","isStatic","x","y","onClick","service","_jsxs","imageService","expandTarget","getMeta","ImageServiceLoaderContext","ImageServiceLoader","MediaReactContextState","MediaReactContextActions","MediaReactContextElements","Error","actions","currentTime","progress","element","media","useSimpleMediaPlayer","duration","_Fragment","url","Component","playPause","objectFit","model","Object","defineProperty","defineProperties","getOwnPropertyDescriptors","getOwnPropertySymbols","prototype","hasOwnProperty","propertyIsEnumerable","obj","key","enumerable","configurable","writable","a","b","prop","call","__objRest","exclude","indexOf","instance","Constructor","TypeError","i","descriptor","protoProps","staticProps","_defineProperties","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","i18nInstance","I18nContext","ReportNamespaces","_classCallCheck","ReportNamespaces2","usedNamespaces","_createClass","namespaces","_this","forEach","ns","keys","_console","_len","arguments","args","Array","_key","concat","apply","alreadyWarned","_len2","_key2","Date","i18n","cb","loadNamespaces","isInitialized","initialized","off","initialized2","on","options","languages","warnOnce","lng","fallbackLng","lastLng","toLowerCase","loadNotPending","l","n","loadState","services","backendConnector","backend","isLanguageChangingTo","hasResourceBundle","arr","isArray","_i","Symbol","iterator","_arr","_n","_d","_s","_e","done","push","err","len","arr2","o","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","object","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","ownKeys","_defineProperty","i18nFromProps","_ref","i18nFromContext","defaultNSFromContext","defaultNS","getI18n","reportNamespaces","notReadyT","k","retNotReady","t","ready","react","wait","i18nOptions","_objectSpread","getDefaults","keyPrefix","addUsedNamespaces","initializedStoreOnce","every","hasLoadedNamespace","getFixedT","nsMode","_useState","getT","_useState2","_slicedToArray","setT","isMounted","useEffect","boundReset","store","split","join","isInitial","ret","Promise","resolve","_a","_b","as","language","useTranslation","viewingDirection","dir","isSame","languageUtils","getLanguagePartFromCode","lang","i18nLanguage","i18nLanguages","strictFallback","root","inverseRoot","inverseIdx","root2","inverseIdx2","inputText","defaultText","separator","fallbackLanguages","closest","getClosestLanguage","candidateText","getLanguages","deps","useClosestLanguage","buildLocaleString","LocaleString","_c","enableDangerouslySetInnerHTML","text","useLocaleString","dangerouslySetInnerHTML","__html","onChoiceChange","registerActions","defaultChoices","renderViewerControls","renderMediaControls","strategies","backgroundStyle","alwaysShowBackground","onClickPaintingAnnotation","elementProps","virtualPage","useVirtualAnnotationPageContext","useVault","helper","createStylesHelper","strategy","useRenderingStrategy","choice","annotations","opacity","applyStyles","useThumbnail","maxWidth","maxHeight","accompanyingCanvas","thumbnailFallbackImage","reason","pages","item","stopPropagation","annotationId","images","idx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAe,yBAAyB,GAAG,GAAG;AAC5C,oBAAkB,OAAO,kBAAkB,0BAAyB,IAAG,IAAG;AACxE,OAAE,YAAY;AACd,WAAO;AAAA,EACX;AAEE,SAAO,gBAAgB,GAAG,CAAC;AAC7B;ACNe,wBAAwB,UAAU,YAAY;AAC3D,WAAS,YAAY,OAAO,OAAO,WAAW,SAAS;AACvD,WAAS,UAAU,cAAc;AACjCA,kBAAe,UAAU,UAAU;AACrC;ACFA,IAAI,eAAe,uBAAsB,GAAG,GAAG;AAC7C,MAAI,MAAM,QAAQ;AAChB,QAAI,CAAA;AAAA,EACL;AAED,MAAI,MAAM,QAAQ;AAChB,QAAI,CAAA;AAAA,EACL;AAED,SAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,SAAU,MAAM,OAAO;AAC5D,WAAO,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM;AAAA,EACpC,CAAG;AACH;AAEA,IAAI,eAAe;AAAA,EACjB,OAAO;AACT;AAEA,IAAI,gBAA6B,yBAAU,kBAAkB;AAC3D,iBAAe,gBAAe,gBAAgB;AAE9C,4BAAyB;AACvB,QAAI;AAEJ,aAAS,OAAO,UAAU,QAAQ,QAAQ,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACxF,YAAM,QAAQ,UAAU;AAAA,IACzB;AAED,YAAQ,iBAAiB,KAAK,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,KAAK;AAC/E,UAAM,QAAQ;AAEd,UAAM,qBAAqB,WAAY;AACrC,UAAI;AAEJ,eAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,aAAK,SAAS,UAAU;AAAA,MACzB;AAED,YAAM,MAAM,WAAW,OAAO,SAAU,eAAc,MAAM,OAAO,QAAQ,MAAM,aAAa,IAAI;AAElG,YAAM,MAAK;AAAA,IACjB;AAEI,WAAO;AAAA,EACR;AAED,iBAAc,2BAA2B,kCAAkC,OAAO;AAChF,WAAO;AAAA,MACL;AAAA,IACN;AAAA,EACA;AAEE,MAAI,SAAS,eAAc;AAE3B,SAAO,QAAQ,iBAAiB;AAC9B,SAAK,SAAS,YAAY;AAAA,EAC9B;AAEE,SAAO,oBAAoB,2BAA2B,OAAO,MAAM;AACjE,QAAI,qBAAqB;AAEzB,IAAC,uBAAuB,gBAAe,KAAK,OAAO,YAAY,OAAO,SAAS,oBAAoB,KAAK,cAAc,OAAO,IAAI;AAAA,EACrI;AAEE,SAAO,qBAAqB,4BAA4B,WAAW,WAAW;AAC5E,QAAI,QAAQ,KAAK,MAAM;AACvB,QAAI,YAAY,KAAK,MAAM;AAO3B,QAAI,UAAU,QAAQ,UAAU,UAAU,QAAQ,aAAa,UAAU,WAAW,SAAS,GAAG;AAC9F,UAAI,uBAAuB;AAE3B,MAAC,yBAAyB,gBAAe,KAAK,OAAO,sBAAsB,OAAO,SAAS,sBAAsB,KAAK,cAAc,UAAU,WAAW,SAAS;AAClK,WAAK,MAAK;AAAA,IACX;AAAA,EACL;AAEE,SAAO,SAAS,kBAAkB;AAChC,QAAI,QAAQ,KAAK,MAAM;AACvB,QAAI,eAAe,KAAK,OACpB,iBAAiB,aAAa,gBAC9B,oBAAoB,aAAa,mBACjC,WAAW,aAAa;AAE5B,QAAI,UAAU,MAAM;AAClB,UAAI,SAAS;AAAA,QACX;AAAA,QACA,oBAAoB,KAAK;AAAA,MACjC;AAEM,UAAkB,sBAAM,eAAe,QAAQ,GAAG;AAChD,eAAO;AAAA,MACf,WAAiB,OAAO,mBAAmB,YAAY;AAC/C,eAAO,eAAe,MAAM;AAAA,MAC7B,WAAU,mBAAmB;AAC5B,eAAoB,sBAAM,cAAc,mBAAmB,MAAM;AAAA,MACzE,OAAa;AACL,cAAM,IAAI,MAAM,4FAA4F;AAAA,MAC7G;AAAA,IACF;AAED,WAAO,KAAK,MAAM;AAAA,EACtB;AAEE,SAAO;AACT,EAAE,MAAM,SAAS;AC9GjB,MAAMC,yBAAyB;AAAA,EAC7BC,YAAYC;AAAAA,EACZC,UAAUD;AAAAA,EACVE,OAAOF;AAAAA,EACPG,QAAQH;AAAAA,EACRI,YAAYJ;AAAAA,EACZK,gBAAgBL;AANa;AAkBlBM,MAAAA,uBAAuBC,eAAMC,cAAmCV,sBAAzC;AAE7B,MAAMW,qBAAqB,MAAM;AACtC,SAAOC,WAAWJ,oBAAD;AAClB;AAEgC,0BAAA;AAAA,EAAEK;AAAAA,EAAOC;AAAAA,GAAiE;AACzG,QAAMC,gBAAgBJ;AAChBK,QAAAA,aAAaC,QAAQ,MAAM;AACxB,WAAA,kCACFF,gBACAF;AAAAA,EAFE,GAIN,CAACA,OAAOE,aAAR,CALuB;AAOnB,SAAAG,oBAAC,qBAAqB,UAAtB;AAAA,IAA+B,OAAOF;AAAAA,IAAtC;AAAA,EAAA,CAAP;AACD;AChCYG,MAAAA,oBAAoBV,eAAMC,cAGpC;AAAA,EACDU,OAAO;AAAA,EACPC,kBAAkB,CAACD,UAAiB;AAAA,EAEnC;AAJA,CAH8B;AAUH,uBAAA;AAAA,EAC5BA;AAAAA,EACAE;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAV;AAAAA,GAOC;AACD,QAAM,CAACW,eAAeJ,oBAAoBK,SAAgB,MAAM;AAC9D,QAAIN,OAAO;AACFA,aAAAA;AAAAA,IACR;AACD,QAAIG,WAAW;AACb,aAAOI,YAAYL,YAAD;AAAA,IACnB;AACD,QAAIA,cAAc;AACT,aAAA,IAAIM,MAAMN,YAAV;AAAA,IACR;AACD,WAAO,IAAIM,MAAX;AAAA,EAAA,CAVgD;AAchD,SAAAV,oBAAC,kBAAkB,UAAnB;AAAA,IAA4B,OAAO;AAAA,MAAEE,OAAOK;AAAAA,MAAeJ;AAAAA,IAAxB;AAAA,IAAnC,8BACG,kBAAD;AAAA,MAAkB,OAAOG,aAAa,CAAtC;AAAA,MAAA;AAAA,IAAA,CAAA;AAAA,EAAA,CAFJ;AAKD;ACzCM,MAAM,WAAW,MAAa;AAC7B,QAAA,EAAE,UAAU,WAAW,iBAAiB;AAE9C,MAAI,UAAU,MAAM;AACZ,UAAA,IAAI,MAAM,kEAAkE;AAAA,EACpF;AAEO,SAAA;AACT;ACLO,6BACL,SACA,EAAE,UAAU,UAAkC,CAAA,GAQ9C;AACA,QAAM,KAAK,OAAO,YAAY,WAAW,UAAU,QAAQ;AAC3D,QAAM,QAAQ;AACd,QAAM,CAAC,QAAQ,aAAa,SAAS,EAAE;AACvC,QAAM,CAAC,OAAO,YAAY,SAA4B,MAAS;AACzD,QAAA,cAAc,QAAQ,MAAM;AAChC,WAAO,MAAM,IAAO,IAAI,EAAE,gBAAgB,KAAM,CAAA,KAAK;AAAA,EAAA,GACpD,CAAC,IAAI,KAAK,CAAC;AACd,QAAM,CAAC,UAAU,eAAe,SAAwB,WAAW;AAEnE,YAAU,MAAM;AACb,IAAY,aAAA;AACP,UAAA;AACI,cAAA,kBAAkB,eAAe,CAAC,UAAU,cAAc,MAAM,MAAM,KAAQ,EAAE;AACtF,cAAM,UAAU,kBAAkB,gBAAgB,MAAO,gBAAwB,SAAS;AACtF,YAAA,mBAAmB,WAAW,SAAS;AACzC,oBAAU,OAAO;AAAA,QACnB;AAEA,oBAAY,eAAe;AAAA,eACpB;AACP,iBAAS,GAAY;AAAA,MACvB;AAAA,IAAA;EACC,GACF,CAAC,IAAI,OAAO,CAAC;AAET,SAAA;AAAA,IACL,UAAU,CAAC,CAAC;AAAA,IACZ,IAAI;AAAA,IACJ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,QAAQ,CAAC,CAAE,aAAY,aAAa;AAAA,EAAA;AAExC;AChDO,6BACL,SACA,SAQA;AACM,QAAA,EAAE,IAAI,UAAU,OAAO,UAAU,WAAW,WAAW,oBAC3D,SACA,OACF;AAEA,SAAO,EAAE,IAAI,UAAU,OAAO,UAAU,UAAU,WAAW;AAC/D;ACjBgC,yBAAA;AAAA,EAAErB;AAAAA,EAAUW;AAAAA,GAAuD;AACjG,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAEX;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACF6B,uBAAA;AAAA,EAAEE;AAAAA,EAAQS;AAAAA,GAAqD;AAC3F,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAET;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACDmC,0BAAA,UAAiD,OAAc,IAAI;AACrG,QAAM,QAAQ;AACR,QAAA,CAAC,eAAe,oBAAoB,SAAY,MAAM,SAAS,MAAM,SAAA,GAAY,KAAK,CAAC;AAE7F,YAAU,MAAM;AACP,WAAA,MAAM,UACX,CAAC,MAAM,SAAS,GAAG,KAAK,GACxB,CAAC,MAAM;AACL,uBAAiB,CAAC;AAAA,OAEpB,KACF;AAAA,KACC,IAAI;AAEA,SAAA;AACT;ACdO,MAAMwB,4BAA4BpB,eAAMC,cAAwB,EAA9B;AAEgB,8BAAA;AACjDoB,QAAAA,MAAMlB,WAAWiB,yBAAD;AAEtB,SAAOE,iBACJC,CAAU,UAAA;AACFF,WAAAA,IAAIG,IAAKC,CAAAA,OAAOF,MAAMG,KAAKC,SAASC,OAAOH,GAA3C,EAAgDI,OAAOC,OAAvD;AAAA,EAAA,GAET,CAACT,GAAD,CAJqB;AAMxB;ACLM,qBACL,UAGI,IACJ,OAAc,CAAA,GACsB;AAC9B,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACE,WAAS;AACjB,QAAA,aAAa,KAAK,KAAK,IAAI;AAEjC,QAAM,WAAW,iBACf,CAAC,MAAO,aAAa,EAAE,KAAK,SAAS,SAAS,cAAc,QAC5D,CAAC,UAAU,CACb;AAEA,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,UAAU;AACN,aAAA;AAAA,IACT;AACA,QAAI,UAAU;AACZ,aAAO,SAAS,QAAQ;AAAA,IAC1B;AACO,WAAA;AAAA,KACN,CAAC,UAAU,UAAU,GAAG,IAAI,CAAC;AAClC;AClC6B,sBAAA;AAAA,EAAE1B;AAAAA,EAAOU;AAAAA,GAAoD;AACxF,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAEV;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACFM,kCAAkC,OAAc,OAAoD;AAC9F,aAAA,SAAS,MAAM,OAAO;AAC3B,QAAA,MAAM,SAAS,UAAU;AACpB,aAAA;AAAA,IACT;AACI,QAAA,MAAM,SAAS,SAAS;AAC1B,YAAM,QAAQ,yBAAyB,OAAO,MAAM,IAAI,KAAK,CAAC;AAC9D,UAAI,OAAO;AACF,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACO,SAAA;AACT;AAEO,gCAAgC,OAAc,OAAoD;AACvG,QAAM,QAA+B,CAAA;AAC1B,aAAA,SAAS,MAAM,OAAO;AAC3B,QAAA,MAAM,SAAS,UAAU;AAC3B,UAAI,MAAM,GAAG,QAAQ,GAAG,MAAM,IAAI;AAC1B,cAAA,KAAK,EAAE,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE,IAAI,MAAM,SAAU,CAAA;AAAA,MAAA,OACpD;AACL,cAAM,KAAK,KAA4B;AAAA,MACzC;AAAA,IACF;AACI,QAAA,MAAM,SAAS,SAAS;AACpB,YAAA,KAAK,GAAG,uBAAuB,OAAO,MAAM,IAAI,KAAK,CAAC,CAAC;AAAA,IAC/D;AACK,QAAA,MAAc,SAAS,oBAAoB;AACxC,YAAA,WAAW,OAAQ,MAAc,WAAW,WAAY,MAAc,SAAU,MAAc,OAAO;AAC3G,YAAM,KAAK,EAAE,IAAI,UAAU,MAAM,UAAU;AAAA,IAC7C;AAAA,EACF;AACO,SAAA;AACT;AAGE,mCAAA,OACA,UACA,UACwB;AACb,aAAA,SAAS,SAAS,YAAY;AACvC,UAAM,QAAQ,kBAAkB,OAAO,MAAM,IAAI,KAAK,GAAG,QAAQ;AACjE,QAAI,OAAO;AACF,aAAA;AAAA,IACT;AAAA,EACF;AAEO,SAAA;AACT;AAEkC,2BAAA,OAAc,OAAwB,UAA0C;;AACrG,aAAA,SAAS,MAAM,OAAO;AAC/B,UAAM,WAAW,YAAM,OAAN,mBAAU,MAAM,KAAK;AACtC,QAAK,MAAc,SAAS,sBAAuB,MAAc,WAAW,UAAU;AAC7E,aAAA;AAAA,IACT;AACA,QAAI,MAAM,SAAS,YAAY,aAAa,UAAU;AAC7C,aAAA;AAAA,IACT;AACI,QAAA,MAAM,SAAS,SAAS;AAC1B,YAAM,QAAQ,kBAAkB,OAAO,MAAM,IAAI,KAAK,GAAG,QAAQ;AACjE,UAAI,OAAO;AACF,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACO,SAAA;AACT;ACpCO,wCACL,OACA,iBACA,UACA,eAAe,OACQ;AACvB,QAAM,WAAW,gBAAgB;AACjC,QAAM,aAAa,WAAW,MAAM,IAAsB,QAAQ,IAAI;AACtE,MAAI,CAAC,YAAY;AACf,WAAO;EACT;AAEA,QAAM,iBAAiB,WAAW;AAClC,QAAM,UAAU,eAAe,QAAQ,SAAS,SAAS,OAAO;AAChE,QAAM,eAAe,UAAU,QAAQ,SAAS,SAAS,YAAY;AACrE,QAAM,gBAAgB,WAAW,eAAe,QAAQ,SAAS,SAAS,aAAa;AACjF,QAAA,sBAAsB,eAAe,SAAS,cAAc;AAC5D,QAAA,mBAAmB,eAAe,SAAS,WAAW;AAGxD,MAAA,uBAAuB,oBAAoB,iBAAiB,cAAc;AAC5E,WAAO,CAAC,EAAE,IAAI,WAAW,IAAI,MAAM,UAAU;AAAA,EAC/C;AAEA,QAAM,CAAC,eAAe,YAAY,oBAAoB,OAAO,eAAe;AAG5E,MAAI,cAAc;AACT,WAAA;AAAA,EACT;AAEA,QAAM,cAAc,cAAc,UAAU,CAAC,MAAM,EAAE,OAAO,QAAQ;AACpE,MAAI,gBAAgB,IAAI;AACtB,WAAO;EACT;AAEA,aAAW,WAAW,UAAU;AAC1B,QAAA,QAAQ,SAAS,WAAW,GAAG;AACjC,aAAO,QAAQ,IAAI,CAAC,UAAU,cAAc,MAAM;AAAA,IACpD;AAAA,EACF;AAEA,SAAO,CAAC,EAAE,IAAI,WAAW,IAAI,MAAM,UAAU;AAC/C;AAEO,6BACL,OACA,iBACA,EAAE,kBAA+C,CAAA,GACZ;AACrC,QAAM,WAAW,gBAAgB;AAC3B,QAAA,UAAU,SAAS,SAAS,OAAO;AACzC,QAAM,eAAe,UAAU,QAAQ,SAAS,SAAS,YAAY;AACrE,QAAM,gBAAgB,WAAW,eAAe,QAAQ,SAAS,SAAS,aAAa;AACjF,QAAA,gBACJ,gBAAgB,SAAS,aAAa,gBAAgB,QAAQ,uBAAuB,OAAO,eAAe;AAG7G,MAAI,cAAc;AACT,WAAA,CAAC,eAAe,CAAC,cAAc,IAAI,CAAC,GAAG,UAAU,KAAK,CAAC,CAAC;AAAA,EACjE;AAGI,MAAA,iBAAiB,CAAC,WAAW,eAAe;AACvC,WAAA,CAAC,eAAe,cAAc,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAAA,EACjE;AAGA,QAAM,WAAuB,CAAA;AAC7B,MAAI,kBAA4B,CAAA;AAEhC,QAAM,QAAQ,MAAM;AAClB,QAAI,gBAAgB,QAAQ;AAC1B,eAAS,KAAK,CAAC,GAAG,eAAe,CAAC;AAClC,wBAAkB,CAAA;AAAA,IACpB;AAAA,EAAA;AAEF,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,UAAM,SAAS,MAAM,IAAsB,cAAc,EAAE;AAC3D,QAAI,MAAM,KAAK,OAAO,SAAS,SAAS,cAAc,GAAG;AAEjD;AACG,eAAA,KAAK,CAAC,CAAC,CAAC;AACjB;AAAA,IACF;AACA,QAAI,OAAO,SAAS,SAAS,WAAW,GAAG;AAEzC;AAAA,IACF;AAEA,oBAAgB,KAAK,CAAC;AAElB,QAAA,gBAAgB,SAAS,GAAG;AACxB;IACR;AAAA,EACF;AAEA,MAAI,gBAAgB,QAAQ;AACpB;EACR;AAEO,SAAA,CAAC,eAAe,QAAQ;AACjC;AC9HO,kBACL,UAGI,IACJ,OAAc,CAAA,GACmB;AAC3B,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACN,QAAA,UAAU,KAAK,KAAK,IAAI;AAE9B,QAAM,QAAQ,iBAAiB,CAAC,MAAO,UAAU,EAAE,KAAK,SAAS,MAAM,WAAW,QAAY,CAAC,OAAO,CAAC;AAEvG,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,OAAO;AACH,aAAA;AAAA,IACT;AACA,QAAI,UAAU;AACZ,aAAO,SAAS,KAAK;AAAA,IACvB;AACO,WAAA;AAAA,KACN,CAAC,OAAO,UAAU,GAAG,IAAI,CAAC;AAC/B;AC3BkC,2BAAA,EAAE,aAAa,iBAAoE;;AACnH,QAAM,QAAQ;AACd,QAAM,WAAW;AACjB,QAAM,QAAQ;AACd,QAAM,CAAC,QAAQ,aAAa,SAAiB,MAAgB;AACvD,QAAA,kBAAkB,QAAQ,QAAQ;AAExC,MAAI,CAAC,iBAAiB;AACd,UAAA,IAAI,MAAM,kBAAkB;AAAA,EACpC;AAEA,QAAM,CAAC,OAAO,mBAAmB,QAC/B,MAAM,oBAAoB,OAAO,iBAAiB,EAAE,eAAe,GACnE,CAAC,OAAO,eAAe,CACzB;AAEM,QAAA,iBAAiB,YACrB,CAAC,UAAkB;AACX,UAAA,gBAAgB,gBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC;AAC9D,cAAA,kBAAkB,KAAK,IAAI,aAAa;AAAA,EAAA,GAEpD,CAAC,OAAO,eAAe,CACzB;AAEM,QAAA,cAAc,YAClB,CAAC,OAAe;AACd,UAAM,aAAa,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AACrD,QAAI,eAAe,IAAI;AACrB,qBAAe,UAAU;AAAA,IAAA,OACpB;AACL,gBAAU,CAAC;AAAA,IACb;AAAA,EAAA,GAEF,CAAC,OAAO,eAAe,CACzB;AAEM,QAAA,OAAO,YAAY,MAAM;AAC7B,cAAU,CAAC,MAAM;AACX,UAAA,KAAK,gBAAgB,QAAQ;AACxB,eAAA;AAAA,MACT;AACA,aAAO,IAAI;AAAA,IAAA,CACZ;AAAA,EAAA,GACA,CAAC,eAAe,CAAC;AAEd,QAAA,WAAW,YAAY,MAAM;AACjC,cAAU,CAAC,MAAM;AACf,UAAI,KAAK,GAAG;AACH,eAAA;AAAA,MACT;AACA,aAAO,IAAI;AAAA,IAAA,CACZ;AAAA,EAAA,GACA,CAAC,eAAe,CAAC;AAGhB,MAAA,OAAO,WAAW,aAAa;AACjC,QAAI,aAAa;AACf,kBAAY,WAAW;AAAA,IAAA,OAClB;AACL,gBAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEO,SAAA;AAAA,IACL,cAAc,uBAAgB,YAAhB,mBAAyB,IAAI,CAAC,QAAQ,MAAM,KAAK,QAAO,CAAC;AAAA,IACvE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;ACNA,MAAMoC,OAAO,MAAM;AAElB;AAEM,MAAMC,2BAA2B/B,cAAmC;AAAA,EACzEgC,oBAAoBF;AAAAA,EACpBG,uBAAuBH;AAAAA,EACvBI,YAAYJ;AAAAA,EACZK,gBAAgBL;AAAAA,EAChBM,OAAO,CALkE;AAAA,EAMzEC,UAAU,CAN+D;AAAA,EAOzEC,kBAAkBR;AAAAA,EAClBS,sBAAsB;AARmD,CAAtB;AAW9C,6BAA6BC,OAA0B;AAC5D,QAAM/C,WAAWgD;AACX,QAAA;AAAA,IAAEC;AAAAA,IAAQC;AAAAA,IAAcC;AAAAA,IAAMP;AAAAA,IAAUD;AAAAA,IAAOS;AAAAA,IAAgBC;AAAAA,IAAaC;AAAAA,IAAUT;AAAAA,MAC1FU,kBAAkB;AAAA,IAChBC,aAAaT,MAAMS;AAAAA,IACnBC,eAAeV,MAAMW,kBAAkB;AAAA,EAAA,CAFxB;AAKbC,QAAAA,MAAM7C,QACV,MACG;AAAA,IACC8B;AAAAA,IACAD;AAAAA,IAEAJ,oBAAoBc;AAAAA,IACpBZ,YAAYU;AAAAA,IACZT,gBAAgBY;AAAAA,IAChBM,eAAejB,MAAMkB;AAAAA,IACrBrB,uBAAuBY;AAAAA,IACvBP;AAAAA,IACAC,sBAAsBG;AAAAA,EAVvB,IAYH,CAACL,UAAUD,OAAOU,aAAaF,MAAMG,UAAUX,OAAOS,gBAAgBP,kBAAkBI,MAAxF,CAdiB;AAiBnB,MAAI,CAACjD,UAAU;AACb8D,YAAQC,KAAK,mEAAb;AACA,+BAAO,OAAA;AAAA,MAAA,UAAA;AAAA,IAAA,CAAP;AAAA,EACD;AAGC,SAAAhD,oBAAC,yBAAyB,UAA1B;AAAA,IAAmC,OAAO4C;AAAAA,IAA1C,UACG5C,oBAAA,0BAA0B,UAA3B;AAAA,MAAoC,OAAOmC;AAAAA,MAA3C,8BACG,eAAD;AAAA,QAAe,QAAQA,aAAa;AAAA,QAApC,UAAyCH,MAAMpC;AAAAA,MAAAA,CAA/C;AAAA,IAAA,CADF;AAAA,EAAA,CAFJ;AAOD;AAEM,8BAA8BoC,OAA0B;AACvD/C,QAAAA,WAAWgE,oBAAoBjB,MAAM/C,QAAP;AAEpC,MAAI,CAACA,UAAU;AACb8D,YAAQC,KAAK,mEAAb;AACA,+BAAO,OAAA;AAAA,MAAA,UAAA;AAAA,IAAA,CAAP;AAAA,EACD;AAEG,MAAA,CAAC/D,SAASiE,UAAU;AACtB,+BAAO,OAAA;AAAA,MAAA,UAAA;AAAA,IAAA,CAAP;AAAA,EACD;AAEKC,QAAAA,4BAAS,sDAAwBnB;IAAzB,UAAiCA,MAAMpC;AAAAA,EAAAA,EAArD;AAEA,6BACG,iBAAD;AAAA,IAAiB,UAAUX,SAAS+B;AAAAA,IAApC,UACGgB,MAAMoB,UAAUpD,oBAAC,cAAD;AAAA,MAAc,OAAOgC,MAAMoB;AAAAA,MAA3B,UAAqCD;AAAAA,IAArC,CAAA,IAA6DA;AAAAA,EAAAA,CAFlF;AAKD;AAEiC,2BAAA;AAChC,SAAOzD,WAAW6B,wBAAD;AAClB;ACjJkC,4BAAA;AAC1B,SAAA;AAAA,IACL8B,cAAc3D,WAAWO,iBAAD;AAAA,IACxBqD,iBAAiB5D,WAAWJ,oBAAD;AAAA,IAC3BiC,0BAA0B7B,WAAW6B,wBAAD;AAAA,IACpCZ,2BAA2BjB,WAAWiB,yBAAD;AAAA,EAAA;AAExC;AAEM,uBAAuBqB,OAA6E;AACzG,6BACG,eAAD;AAAA,IAAe,OAAOA,MAAMuB,OAAOF,aAAanD,SAASlB;AAAAA,IAAW,WAAWgD,MAAMuB,OAAOD;AAAAA,IAA5F,UACGtD,oBAAA,0BAA0B,UAA3B;AAAA,MAAoC,OAAOgC,MAAMuB,OAAO5C;AAAAA,MAAxD,UACGX,oBAAA,yBAAyB,UAA1B;AAAA,QAAmC,OAAOgC,MAAMuB,OAAOhC;AAAAA,QAAvD,UACGS,MAAMpC;AAAAA,MAAAA,CADT;AAAA,IAAA,CADF;AAAA,EAAA,CAFJ;AASD;ACvBD,MAAM,kBAAkB;AACxB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAC7B,MAAM,gBAAgB;AACtB,MAAM,mBAAmB;AACzB,MAAM,iBAAiB,aAAa,eAAe;AACnD,MAAM,oBAAoB,aAAa,mBAAmB;AAC1D,MAAM,qBAAqB,aAAa,oBAAoB;AAC5D,MAAM,eAAe,aAAa,aAAa;AAC/C,MAAM,kBAAkB,aAAa,gBAAgB;AACrD,MAAM,gBAAgB,EAAE,gBAAgB,mBAAmB,oBAAoB,cAAc;AAE7F,MAAM,cAAc;AACpB,MAAM,eAAe;AACF,aAAa,WAAW,EAAI;AAC3B,aAAa,YAAY,EAAI;AAGjD,MAAM,iBAAiB;AACvB,MAAM,yBAAyB;AAC/B,MAAM,mBAAmB;AACJ,aAAa,cAAc,EAAI;AACxB,aAAa,sBAAsB,EAAI;AAC5C,aAAa,gBAAgB,EAAI;AAUxD,MAAM,mBAAmB;AACzB,MAAM,gBAAgB;AACtB,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AACzB,MAAM,2BAA2B;AACT,aAAa,gBAAgB,EAAI;AACpC,aAAa,aAAa,EAAI;AAC3B,aAAa,gBAAgB,EAAI;AACjC,aAAa,gBAAgB,EAAI;AAC1B,aAAa,wBAAwB,EAAI;AASxE,MAAM,gBAAgB;AACtB,MAAM,eAAe;AACA,aAAa,aAAa,EAAI;AAC/B,aAAa,YAAY,EAAC;ACpDQ,uBAAA;AACpD,QAAM,QAAQ;AACR,QAAA,QAAQ,MAAM;AAEpB,SAAO,QAAQ,MAAM;AACnB,WAAO,CAAC,WAAgB,MAAM,SAAS,MAAM;AAAA,EAAA,GAC5C,CAAC,KAAK,CAAC;AACZ;ACGA,0BAA0B,KAA2C;AACnE,SAAO,OAAO,QAAQ,YAAY,OAAO,IAAI;AAC/C;AAE2C,oCAAA;AACzC,QAAM,QAAQ;AACR,QAAA,UAAU,OAAyB,CAAA,CAAE;AAC3C,QAAM,WAAW;AACX,QAAA,YAAY,QAAQ,MAAM;AAC9B,WAAO,2BAA2B,IAAI,KAAK,EAAE,aAAa,KAAK,MAAM,KAAK,OAAO,IAAI,GAAU,EAAE,SAAS,EAAE;AAAA,EAC9G,GAAG,CAAE,CAAA;AAEL,kBAAgB,MAAM;AACpB,UAAM,OAAiC;AAAA,MACrC,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,MACX,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,WAAW,CAAC;AAAA,MACZ,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,UAAU,CAAC;AAAA,MACX,QAAQ;AAAA,MACR,UAAU,CAAC;AAAA,MACX,OAAO,CAAC;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,MACX,MAAM,CAAC;AAAA,MACP,WAAW,CAAC;AAAA,MACZ,SAAS,CAAC;AAAA,IAAA;AAGZ,aACE,cAAc,eAAe;AAAA,MAC3B,UAAU;AAAA,QACR,gBAAgB;AAAA,WACb,KAAK,KAAK;AAAA,QACb;AAAA,MACF;AAAA,IACD,CAAA,CACH;AAAA,EAAA,GACC,CAAC,SAAS,CAAC;AAEd,QAAM,WAA4C,iBAChD,CAAC,UAAW,YAAY,MAAM,KAAK,SAAS,eAAe,aAAa,MACxE,CAAC,SAAS,CACZ;AAEA,QAAM,gBAAgB,YACpB,CAAC,IAA2E,YAAqB;AAC/F,QAAI,WAAW;AACT,UAAA,iBAAiB,EAAE,GAAG;AACxB,cAAM,UAAU;AACZ,YAAA,CAAC,QAAQ,SAAS;AAEpB,kBAAQ,YAAY,KAAK;AAAA,QAC3B;AACA,aAAK,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS,QAAQ,OAAO;AAC1E,gBAAQ,QAAQ,MAAM;AAAA,MAAA,WACb,OAAO,OAAO,UAAU;AACjC,aAAK,GAAG;AAAA,MACV;AAEM,YAAA,OAAiC,MAAM,IAAI,EAAE,IAAI,WAAW,MAAM,kBAAkB;AAC1F,YAAM,aAAmC,MAAM,IAAI,EAAE,IAAI,MAAM,cAAc;AAC7E,UAAI,QAAQ,YAAY;AAClB,YAAA,CAAC,KAAK,MAAM,KAAK,CAAC,MAAW,EAAE,OAAO,WAAW,EAAE,GAAG;AACxD,mBACE,cAAc,aAAa;AAAA,YACzB,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,cACA,MAAM;AAAA,YACR;AAAA,YACA,OAAO;AAAA,UACR,CAAA,CACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EAAA,GAEF,CAAC,SAAS,CACZ;AACM,QAAA,mBAAmB,YACvB,CAAC,OAA8E;AAC7E,QAAI,WAAW;AACT,UAAA,iBAAiB,EAAE,GAAG;AACxB,aAAK,OAAO,GAAG,WAAW,WAAW,GAAG,SAAS,GAAG,OAAO;AAAA,MAAA,WAClD,OAAO,OAAO,UAAU;AACjC,aAAK,GAAG;AAAA,MACV;AAEI,UAAA,QAAQ,QAAQ,KAAK;AACf,gBAAA,QAAQ,IAAI,aAAa;AAAA,MACnC;AAEM,YAAA,OAAiC,MAAM,IAAI,EAAE,IAAI,WAAW,MAAM,kBAAkB;AAC1F,UAAI,MAAM;AACR,iBACE,cAAc,gBAAgB;AAAA,UAC5B,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,KAAK;AAAA,UACL,WAAW;AAAA,YACT;AAAA,YACA,MAAM;AAAA,UACR;AAAA,QACD,CAAA,CACH;AAAA,MACF;AAAA,IACF;AAAA,EAAA,GAEF,CAAC,SAAS,CACZ;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAEJ;ACvIA,MAAM4D,+BAA+BhE,cAO3B,IAPwC;AASA,2CAAA;AAC1CoD,QAAAA,MAAMlD,WAAW8D,4BAAD;AAEf,SAAA,CACLZ,IAAKa,UACL;AAAA,IACEC,eAAed,IAAKc;AAAAA,IACpBC,kBAAkBf,IAAKe;AAAAA,EAAAA,CAJpB;AAOR;AAEyC,mCAAA;AAAA,EAAE/D;AAAAA,GAA+B;AACzE,QAAM,CAAC6D,UAAU;AAAA,IAAEC;AAAAA,IAAeC;AAAAA,OAAsBC,yBAAxD;AAGE,SAAA5D,oBAAC,6BAA6B,UAA9B;AAAA,IACE,OAAOD,QAAQ,MAAO;AAAA,MAAE0D;AAAAA,MAAUC;AAAAA,MAAeC;AAAAA,IAAAA,IAAqB,CAACF,QAAD,CAAxD;AAAA,IADhB;AAAA,EAAA,CADF;AAOD;ACjCqC,+BAAA;AAAA,EAAEI;AAAAA,EAAOC;AAAAA,EAAOC;AAAAA,GAA4D;AAChH,6BAAO,OAAA;AAAA,IAAK,OAAO;AAAA,MAAEF;AAAAA,MAAOE;AAAAA,MAAQC,WAAW;AAAA,OAASF,SAAS,CAAA,IAA9C;AAAA,MAAmDG,YAAY;AAAA,IAA/D;AAAA,IAAZ,UAAA;AAAA,EAAA,CAAP;AACD;ACDYC,MAAAA,sBAAsB1E,cAAyC,IAA5B;AAEd,2BAAA;AAChC,SAAOE,WAAWwE,mBAAD;AAClB;ACHYC,MAAAA,gBAAgB5E,eAAMC,cAA2B,IAAjC;AAChB4E,MAAAA,uBAAuB7E,eAAMC,cAA2B,IAAjC;AAEP,sBAAA;AAAA,EAAEI;AAAAA,EAAUyE;AAAAA,GAAuD;AAC9F,QAAMC,cAAc5E,WAAW2E,UAAUD,uBAAuBD,aAAlC;AAC9B,QAAMI,SAASC;AAEfC,kBAAgB,MAAM;AACpB,QAAIH,aAAa;AACX,UAAA;AACUI,oBAAAA,OAAQ1E,oBAAA,oBAAoB,UAArB;AAAA,UAA8B,OAAOuE;AAAAA,UAArC;AAAA,QAAnB,CAAA,CAAA;AAAA,eACOI;MAER;AAAA,IACF;AAAA,EAAA,GACA,CAAC/E,UAAU2E,MAAX,CARY;AAUR,SAAA;AACR;;ACpBD,IAAI,IAAI;AACmC;AACzC,eAAqB,EAAE;AAEzB;ACIuB,gBAAA,IAaM;AAbN,eACrB3E;AAAAA;AAAAA,IACAgF;AAAAA,IACAC,sBAAsB,CAHD;AAAA,MAAA,IAIlB7C,kBAJkB,IAIlBA;AAAAA,IAHHpC;AAAAA,IACAgF;AAAAA,IACAC;AAAAA;AAWMC,QAAAA,SAASC,OAAuB,IAAjB;AACf,QAAA,CAACC,eAAeC,oBAAoBzE,SAA1C;AACM,QAAA,CAAC0E,cAAcC,mBAAmB3E,SAAxC;AACM4E,QAAAA,gBAAgBL,OAAuB,IAAjB;AACtB,QAAA,CAACM,sBAAsBC,2BAA2B9E,SAAxD;AACA,QAAM+C,SAASgC;AACf,QAAMC,gBAAqBZ,iBAAiBa;AAE5ChB,kBAAgB,MAAM;AACpB,UAAMiB,QAA8B,CAAA;AACpC,QAAIZ,OAAOa,SAAS;AACZC,YAAAA,MAAMC,SAASC,cAAc,KAAvB;AACLH,aAAAA,QAAQI,YAAYH,GAA3B;AACMd,YAAAA,SAASkB,WAAWJ,GAAD;AACzBX,uBAAiBS,MAAMZ,MAAP;AAAA,IACjB;AACD,QAAIM,cAAcO,SAAS;AACnBC,YAAAA,MAAMC,SAASC,cAAc,KAAvB;AACEH,oBAAAA,QAAQI,YAAYH,GAAlC;AACMR,YAAAA,gBAAgBY,WAAWJ,GAAD;AAChCN,8BAAwBI,MAAMN,aAAP;AAAA,IACxB;AAED,WAAO,MAAM;AACXH,uBAAiB,IAAD;AAChBK,8BAAwB,IAAD;AAEvBW,iBAAW,MAAM;AACf,YAAIP,MAAMZ,QAAQ;AAChBY,gBAAMZ,OAAOoB;QACd;AACD,YAAIR,MAAMN,eAAe;AACvBM,gBAAMN,cAAcc;QACrB;AAAA,SACA,CAPO;AAAA,IAAA;AAAA,EASb,GAAE,CA5BY,CAAA;AA8Bf,8BACG,eAAD;AAAA,IAAe,gBAAgB,MAAMlG,oBAAC,eAAkBgC,mBAAAA,MAAxD;AAAA,IAAA,UACE,CAAAhC,oBAAC,WAAD,iCACMgC,QADN;AAAA,MAEE,gBAAgB;AAAA,QAAE8B,OAAO;AAAA,UAAEqC,UAAU;AAAA,QAAZ;AAAA,SAA8BnE,MAAMoE,kBAAkB,CAA5B;AAAA,MACnD,kCAAc,OAAA;AAAA,QAAK,KAAKhB;AAAAA,MAAAA,CAH1B;AAAA,MAIE,WAAW,CAACb,WAAgB;AAC1BY,wBAAgBZ,MAAD;AACf,YAAIvC,MAAMqE,WAAW;AACnBrE,gBAAMqE,UAAU9B,MAAhB;AAAA,QACD;AAAA,MACF;AAAA,MATH,UAWGvE,oBAAA,oBAAoB,UAArB;AAAA,QAA8B,OAAOkF;AAAAA,QAArC,UACGlF,oBAAA,cAAc,UAAf;AAAA,UAAwB,OAAOgF;AAAAA,UAA/B,UACGhF,oBAAA,qBAAqB,UAAtB;AAAA,YAA+B,OAAOqF;AAAAA,YAAtC,8BACG,eAAD;AAAA,cAAe;AAAA,cAAf,8BACG,2BAAD;AAAA,gBAAA;AAAA,cAAA,CAAA;AAAA,YAAA,CADF;AAAA,UAAA,CADF;AAAA,QAAA,CADF;AAAA,MAAA,CADF;AAAA,IAAA,EAXF,GAqBArF,oBAAA,OAAA;AAAA,MAAK,KAAK8E;AAAAA,IAAAA,CAtBZ,CAAA;AAAA,EAAA,CADF;AA0BD;ACxFD,4BAA4B,OAAO;AACjC,SAAO;AAAA,IACL,iBAAiB,UAAU,OAAO,UAAU,OAAO;AACjD,UAAI,CAAC,UAAU;AACb;AAAA,MACD;AACD,YAAM,aAAa,CAAC,SAAS,IAAI,gBAAgB,KAAK,GAAG,CAAC,wBAAwB;AAChF,cAAM,YAAY,uBAAuB;AACzC,mBAAW,cAAc,WAAW;AAClC,cAAI,WAAW,aAAa,UAAU;AACpC,mBAAO;AAAA,UACR;AAAA,QACF;AACD,eAAO,CAAC,GAAG,WAAW,EAAE,UAAU,UAAU,MAAK,CAAE;AAAA,MAC3D,CAAO;AACD,aAAO;AAAA,IACR;AAAA,IACD,oBAAoB,UAAU,OAAO,UAAU;AAC7C,UAAI,CAAC,UAAU;AACb;AAAA,MACD;AACD,YAAM,aAAa,CAAC,SAAS,IAAI,gBAAgB,KAAK,GAAG,CAAC,wBAAwB;AAChF,eAAQ,wBAAuB,CAAA,GAAI,OAAO,CAAC,uBAAuB,mBAAmB,aAAa,QAAQ;AAAA,MAClH,CAAO;AAAA,IACF;AAAA,IACD,oBAAoB,cAAc,OAAO;AACvC,YAAM,WAAW,OAAO,iBAAiB,WAAW,EAAE,IAAI,aAAc,IAAG;AAC3E,UAAI,CAAC,YAAY,CAAC,SAAS,IAAI;AAC7B,eAAO;MACR;AACD,YAAM,QAAQ,MAAM,gBAAgB,SAAS,IAAI,cAAc;AAC/D,YAAM,QAAQ,CAAA;AACd,UAAI,SAAS,UAAU;AACrB,mBAAW,QAAQ,OAAO,KAAK,KAAK,GAAG;AACrC,gBAAM,QAAQ,CAAC,MAAM;AACnB,kBAAM,eAAe,MAAM,IAAI,QAAQ;AACvC,uBAAW,EAAE,UAAU,OAAO,YAAY,MAAM,SAAS,IAAI;AAC3D,kBAAI,CAAC,UAAU,SAAS,OAAO,QAAQ,KAAK,MAAM,IAAI;AACpD,yBAAS,GAAG,YAAY;AAAA,cACzB;AAAA,YACF;AAAA,UACb;AAAA,QACS;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,EACL;AACA;ACxCO,2BAAuD,UAAsB,OAAkB;AACpG,QAAM,QAAQ;AACR,QAAA,SAAS,QAAQ,MAAM,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AAEzD,QAAA,QAAQ,iBAAiB,MAAM;AAC/B,QAAA,YAAY,SAAS,IAAI;AAC3B,aAAO,MAAM,gBAAgB,SAAS,IAAI,cAAc;AAAA,IAC1D;AACO,WAAA;AAAA,EAAA,GACN,CAAC,QAAQ,CAAC;AAEb,SAAO,QAAQ,MAAM;AACnB,WAAO,WAAW,OAAO,oBAAoB,UAAU,KAAK,IAAI;KAC/D,CAAC,OAAO,UAAU,OAAO,KAAK,CAAC;AACpC;ACrBA,4BAA4B,OAAO;AACjC,SAAO;AAAA,IACL,YAAY,UAAU,OAAO,QAAQ;AACnC,YAAM,KAAK,OAAO,aAAa,WAAW,WAAW,SAAS;AAC9D,aAAO,MAAM,aAAa,CAAC,IAAI,UAAU,KAAK,GAAG,MAAM;AAAA,IACxD;AAAA,IACD,iBAAiB,UAAU;AACzB,YAAM,KAAK,OAAO,aAAa,WAAW,WAAW,SAAS;AAC9D,aAAO,MAAM,gBAAgB,IAAI,QAAQ;AAAA,IAC1C;AAAA,EACL;AACA;ACEO,mBAA0B,UAAsB,OAAuB;AAC5E,QAAM,QAAQ;AACR,QAAA,SAAS,QAAQ,MAAM,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AAE/D,SAAO,iBAAiB,MAAM;AAC5B,QAAI,CAAC,UAAU;AACN,aAAA;AAAA,IACT;AAEA,UAAM,SAAS,OAAO,iBAAiB,SAAS,EAAE;AAClD,WAAO,SAAU,QAAQ,OAAO,SAAS,SAAU;AAAA,EAAA,GAClD,CAAC,UAAU,KAAK,CAAC;AACtB;ACzBA,IAAIwB,cAAY,OAAO;AACvB,IAAIC,eAAa,OAAO;AACxB,IAAIC,sBAAoB,OAAO;AAC/B,IAAIC,wBAAsB,OAAO;AACjC,IAAIC,iBAAe,OAAO,UAAU;AACpC,IAAIC,iBAAe,OAAO,UAAU;AACpC,IAAIC,oBAAkB,CAAC,KAAK,KAAK,UAAU,OAAO,MAAMN,YAAU,KAAK,KAAK,EAAE,YAAY,MAAM,cAAc,MAAM,UAAU,MAAM,MAAO,CAAA,IAAI,IAAI,OAAO;AAC1J,IAAIO,mBAAiB,CAAC,GAAG,MAAM;AAC7B,WAAS,QAAQ,KAAM,KAAI,CAAA;AACzB,QAAIH,eAAa,KAAK,GAAG,IAAI;AAC3BE,wBAAgB,GAAG,MAAM,EAAE,KAAK;AACpC,MAAIH;AACF,aAAS,QAAQA,sBAAoB,CAAC,GAAG;AACvC,UAAIE,eAAa,KAAK,GAAG,IAAI;AAC3BC,0BAAgB,GAAG,MAAM,EAAE,KAAK;AAAA,IACnC;AACH,SAAO;AACT;AACA,IAAIE,kBAAgB,CAAC,GAAG,MAAMP,aAAW,GAAGC,oBAAkB,CAAC,CAAC;AAChE,MAAM,eAAe;AACrB,MAAM,oBAAoB;AAC1B,uBAAuB,QAAQ;AAC7B,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO,OAAO,OAAO,CAAC,MAAM,eAAe;AACzC,YAAM,EAAE,UAAU,cAAc,cAAc,UAAU;AACxD,UAAI,UAAU;AACZ,YAAI,CAAC,KAAK,UAAU;AAClB,eAAK,WAAW;AAAA,QACjB;AACD,aAAK,UAAU,KAAK,GAAG,SAAS;AAAA,MACjC;AACD,aAAO;AAAA,IACb,GAAO;AAAA,MACD,UAAU;AAAA,MACV,WAAW,CAAE;AAAA,IACnB,CAAK;AAAA,EACF;AACD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,MACL,UAAU;AAAA,MACV,WAAW,CAAE;AAAA,IACnB;AAAA,EACG;AACD,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,CAAC,IAAI,YAAY,OAAO,MAAM,GAAG;AACvC,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,UAAU;AAAA,QACV,WAAW,CAAE;AAAA,MACrB;AAAA,IACK;AACD,WAAO,cAAc,EAAE,MAAM,oBAAoB,OAAO,SAAQ,CAAE;AAAA,EACnE;AACD,MAAI,OAAO,SAAS,mBAAoB,QAAO,KAAK,OAAO,MAAM,IAAI;AACnE,UAAM,WAAW;AAAA,MACf,MAAM;AAAA,MACN,UAAU;AAAA,QACR,WAAW,OAAO;AAAA,MACnB;AAAA,IACP;AACI,WAAO;AAAA,MACL;AAAA,MACA,WAAW,CAAC,QAAQ;AAAA,IAC1B;AAAA,EACG;AACD,MAAI,OAAO,SAAS,oBAAoB;AACtC,UAAM,mBAAmB,aAAa,KAAK,OAAO,KAAK;AACvD,QAAI,kBAAkB;AACpB,YAAM,WAAW;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM,iBAAiB,OAAO,cAAc,iBAAiB,OAAO,SAAS,YAAY;AAAA,UACzF,GAAG,WAAW,iBAAiB,EAAE;AAAA,UACjC,GAAG,WAAW,iBAAiB,EAAE;AAAA,UACjC,OAAO,WAAW,iBAAiB,EAAE;AAAA,UACrC,QAAQ,WAAW,iBAAiB,EAAE;AAAA,QACvC;AAAA,MACT;AACM,aAAO;AAAA,QACL;AAAA,QACA,WAAW,CAAC,QAAQ;AAAA,MAC5B;AAAA,IACK;AACD,UAAM,oBAAoB,OAAO,MAAM,MAAM,iBAAiB;AAC9D,QAAI,mBAAmB;AACrB,YAAM,WAAW;AAAA,QACf,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW,kBAAkB,KAAK,WAAW,kBAAkB,EAAE,IAAI;AAAA,UACrE,SAAS,kBAAkB,KAAK,WAAW,kBAAkB,EAAE,IAAI;AAAA,QACpE;AAAA,MACT;AACM,aAAO;AAAA,QACL;AAAA,QACA,WAAW,CAAC,QAAQ;AAAA,MAC5B;AAAA,IACK;AACD,WAAO;AAAA,MACL,UAAU;AAAA,MACV,WAAW,CAAE;AAAA,IACnB;AAAA,EACG;AACD,SAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW,CAAE;AAAA,EACjB;AACA;AACA,sBAAsB,QAAQ,UAAU,IAAI;AAC1C,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO,aAAa,OAAO,EAAE;AAAA,EAC9B;AACD,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,CAAC,IAAI,YAAY,OAAO,MAAM,GAAG;AACvC,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,EAAE,IAAI,MAAM,QAAQ,WAAW,QAAQ,QAAQ,OAAO,UAAW;AAAA,QACzE,UAAU;AAAA,QACV,WAAW,CAAE;AAAA,MACrB;AAAA,IACK;AACD,WAAO,aAAa;AAAA,MAClB,MAAM;AAAA,MACN,QAAQ,EAAE,IAAI,MAAM,UAAW;AAAA,MAC/B,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,IACP,CAAK;AAAA,EACF;AACD,MAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU,OAAO,SAAS,eAAe,OAAO,SAAS,gBAAgB;AACvH,WAAO,aAAa,OAAO,MAAM,EAAE;AAAA,EACpC;AACD,MAAI,OAAO,SAAS,oBAAoB;AACtC,QAAI,OAAO,OAAO,SAAS,YAAY,OAAO,OAAO,UAAU,OAAO,OAAO,OAAO,WAAW,UAAU;AACvG,aAAO,OAAO,SAAS;AAAA,QACrB;AAAA,UACE,IAAI,OAAO,OAAO;AAAA,UAClB,MAAM;AAAA,QACP;AAAA,MACT;AAAA,IACK;AACD,UAAM,EAAE,UAAU,cAAc,OAAO,WAAW,cAAc,OAAO,QAAQ,IAAI,EAAE,UAAU,MAAM,WAAW,CAAE,EAAA;AAClH,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,OAAO;AAAA,MACf;AAAA,MACA;AAAA,IACN;AAAA,EACG;AACD,MAAI,OAAO,IAAI;AACb,QAAI,OAAO,SAAS,YAAY,OAAO,UAAU,OAAO,OAAO,WAAW,UAAU;AAClF,aAAO,SAAS;AAAA,QACd;AAAA,UACE,IAAI,OAAO;AAAA,UACX,MAAM;AAAA,QACP;AAAA,MACT;AAAA,IACK;AACD,UAAM,CAAC,IAAI,YAAY,OAAO,GAAG,MAAM,GAAG;AAC1C,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQM,gBAAcD,iBAAe,CAAE,GAAE,MAAM,GAAG;AAAA,UAChD;AAAA,QACV,CAAS;AAAA,QACD,UAAU;AAAA,QACV,WAAW,CAAE;AAAA,MACrB;AAAA,IACK;AACD,WAAO,aAAa;AAAA,MAClB,MAAM;AAAA,MACN,QAAQC,gBAAcD,iBAAe,CAAE,GAAE,MAAM,GAAG;AAAA,QAChD;AAAA,MACR,CAAO;AAAA,MACD,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,IACP,CAAK;AAAA,EACF;AACD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,WAAW,CAAE;AAAA,EACjB;AACA;AC/KO,uBACL,UAGI,IACJ,OAAc,CAAA,GACwB;AAChC,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACZ,QAAM,QAAQ;AACR,QAAA,eAAe,KAAK,KAAK,IAAI;AAEnC,QAAM,aAAa,iBACjB,CAAC,MAAO,eAAe,EAAE,KAAK,SAAS,WAAW,gBAAgB,QAClE,CAAC,YAAY,CACf;AAEA,QAAM,OAAO,iBACX,CAAC,MACC,cAAc,WAAW,OACrB,WAAW,KACR,IAAI,CAAC,eAAgB,aAAa,EAAE,KAAK,SAAS,WAAW,MAAM,WAAW,MAAM,IAAK,EACzF,OAAO,OAAO,IACjB,CACN,GAAA,CAAC,UAAU,CACb;AAEA,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IACT;AAEA,UAAM,gBAAqB,iCACtB,aADsB;AAAA,MAEzB;AAAA,MACA,QAAQ,aAAa,WAAW,QAAe,EAAE,SAAS,MAAM,SAAS,EAAE,KAAK,SAAS;AAAA,IAAA;AAG3F,QAAI,UAAU;AACZ,aAAO,SAAS,aAAa;AAAA,IAC/B;AACO,WAAA;AAAA,EAAA,GACN,CAAC,YAAY,UAAU,MAAM,GAAG,IAAI,CAAC;AAC1C;AC7CO,mBACL,UAGI,IACJ,OAAc,CAAA,GACoB;AAC5B,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACN,QAAA,WAAW,KAAK,KAAK,IAAI;AAE/B,QAAM,SAAS,iBAAiB,CAAC,MAAO,WAAW,EAAE,KAAK,SAAS,OAAO,YAAY,QAAY,CAAC,QAAQ,CAAC;AAE5G,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,QAAQ;AACJ,aAAA;AAAA,IACT;AACA,QAAI,UAAU;AACZ,aAAO,SAAS,MAAM;AAAA,IACxB;AACO,WAAA;AAAA,KACN,CAAC,QAAQ,UAAU,GAAG,IAAI,CAAC;AAChC;ACzBO,MAAME,mBAAoG,CAAC;AAAA,EAChH/F;AAAAA,EACA8C,OAAOkD;AAAAA,EACPC;AAAAA,EACAC;AAAAA,MACI;AACJ,QAAM9H,aAAa+H,cAAc;AAAA,IAAEnG;AAAAA,EAAAA,CAAH;AAC1B8C,QAAAA,QAAQsD,UAAoBhI,YAAY,OAAvB;AACjBiI,QAAAA,OAAOD,UAAkFhI,YAAY,MAArF;AACtB,QAAMkI,SAASC,kBAAkBnI,YAAmB,CAAC,OAAD,CAApB;AAChC,QAAMD,SAASqI;AAETC,QAAAA,YAAY1H,QAAQ,MAAM;AACvB2H,WAAAA,YAAYV,cAAclD,KAAf;AAAA,EAAA,GACjB,CAACkD,cAAclD,KAAf,CAFsB;AAInB6D,QAAAA,UACJxI,UACAC,cACAA,WAAWwI,UACVxI,WAAWwI,OAAeC,YAC1BzI,WAAWwI,OAAeC,SAASC,SAAS,iBAC5C1I,WAAWwI,OAAeG,UAC1B3I,WAAWwI,OAAeG,OAAO/G,OAAO7B,OAAO6B;AAElD,MAAI,CAAC2G,SAAS;AACL,WAAA;AAAA,EACR;AAED,6BACG,iBAAD;AAAA,IACE,IAAIvI,WAAW4B;AAAAA,IACf,WAAW;AAAA,IACX,QAAS5B,WAAWwI,OAAeC,SAASG;AAAAA,IAC5C,OAAOP;AAAAA,IACP,WAAWJ,8BAAMJ,cAAaA;AAAAA,IAC9B,aAAa,CAAC,CAAEI,+BAAMY,SAAQf;AAAAA,IAC9B,MAAMG,8BAAMY,SAAQ;AAAA,IACpB,OAAOZ,8BAAMa,UAAS;AAAA,IACtB,YAAYb,8BAAMO,WAAU;AAAA,KACxBN,OAXR;AAcD;AC3CM,MAAMa,uBAAoG,CAAC;AAAA,EAChHlB;AAAAA,EACAmB;AAAAA,MACI;;AACEtE,QAAAA,QAAQsD,UAAoBgB,MAAM,OAAjB;AACjBf,QAAAA,OAAOD,UAAkCgB,MAAM,MAA/B;AAEJtH,mBAAAA,CAAAA,UAAWsH,KAAKpH,KAAKF,MAAMG,KAAKC,SAASmH,eAAeD,KAAKpH,MAAM,MAAO,CAA5E,CAAA;AAEhB,6BACG,UAAD;AAAA,IAAA,UACGoH,WAAKxG,UAALwG,mBAAYrH,IAAK3B,CAAe,eAAA;AAC/B,iCACG,kBAAD;AAAA,QAEE,IAAIA,WAAW4B;AAAAA,QACf;AAAA,QACA,WAAWqG,8BAAMJ,cAAaA;AAAAA,MAAAA,GAHzB7H,WAAW4B,EADlB;AAAA,IAAA;AAAA,EAFH,CAFL;AAcD;ACzB2B,qBAAA;AAAA,EAC1BA;AAAAA,EACAsH;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,IAAI;AAAA,EACJC,IAAI;AAAA,EACJ9I;AAAAA,EACA+I;AAAAA,GAUC;;AACD,6BACG,UAAD;AAAA,IAAA,UACG,CAACL,MAAMM,+BACL,UAAD;AAAA,MAAA,UACE,CAAA5I,oBAAA,eAAA;AAAA,QACE;AAAA,QAEA,KAAKsI,MAAMtH;AAAAA,QACX,QAAQsH,MAAMV,OAAOI;AAAAA,QACrB,SACEM,MAAMzE,SAASyE,MAAMvE,SACjB;AAAA,UACEF,OAAOyE,MAAMzE;AAAAA,UACbE,QAAQuE,MAAMvE;AAAAA,QAEhB/E,IAAAA;AAAAA,MAXR,CAAA,GAcCY,QAfH;AAAA,IAAA,GAAc,YAAd,IAkBAiJ,qBAAC,UAAD;AAAA,MAAA,UACE,CAAA7I,oBAAC,SAAD;AAAA,QAEE,OAAO;AAAA,UACLgB,IAAIsH,MAAMM,QAAQ5H,MAAMsH,MAAMM,QAAQ,UAAU;AAAA,UAChD7E,QAAQuE,MAAMvE;AAAAA,UACdF,OAAOyE,MAAMzE;AAAAA,UACbiF,cAAcR,MAAMM;AAAAA,UACpBL,WAAWA,aAAaA,UAAUT,SAAS,UAAUS,YAAYvJ;AAAAA,QAL5D;AAAA,QAOP,GAAGsJ,aAAMV,WAANU,mBAAcN,QAAQS,KAAIA;AAAAA,QAC7B,GAAGH,aAAMV,WAANU,mBAAcN,QAAQU,KAAIA;AAAAA,QAC7B,OAAOJ,YAAMV,WAANU,mBAAcN,QAAQnE;AAAAA,QAC7B,QAAQyE,YAAMV,WAANU,mBAAcN,QAAQjE;AAAAA,QAC9B;AAAA,MAbF,CAAA,GAeCnE,QAhBH;AAAA,OAAc,SAAd;AAAA,KApBWoB,EAAf;AAyCH;AC7CM,+BAA+B,UAA2B;AAC3D,MAAA,SAAS,SAAS,oBAAoB;AACxC,WAAO,CAAC,SAAS,QAAQ,EAAE,UAAU,SAAS,UAAU;AAAA,EAC1D;AAEA,SAAO,CAAC,UAAU,EAAE,UAAU,KAAM,CAAA;AACtC;AAeE,uBAAA,OACA,qBACA,gBACY;AACZ,QAAM,QAAkB,CAAA;AACxB,MAAI,SAA+B;AACnC,QAAM,QAA6B,CAAA;AAEnC,aAAW,cAAc,qBAAqB;AACtC,UAAA,SAAS,MAAM,IAAqB,WAAW,MAAM,EAAE,gBAAgB,OAAO;AACpF,eAAW,eAAe,QAAQ;AAChC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AACA,YAAM,CAAC,MAAM,EAAE,cAAc,sBAAsB,WAAW;AAC9D,YAAM,OAAQ,MAAK,QAAQ,WAAW,YAAY;AAGlD,UAAI,SAAS,UAAU;AACrB,cAAM,eAAe,MAAM,IAAqB,KAAK,KAAK;AAGpD,cAAA,WAAW,eAAe,SAC5B,eAAe,IAAI,CAAC,QAAQ,aAAa,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,OAAO,IAClF,CAAC,aAAa,EAAE;AAEhB,YAAA,SAAS,WAAW,GAAG;AAChB,mBAAA,KAAK,aAAa,EAAE;AAAA,QAC/B;AAGS,iBAAA;AAAA,UACP,MAAM;AAAA,UACN,OAAO,aAAa,IAAI,CAAC,MAAO;AAAA,YAC9B,IAAI,EAAE;AAAA,YACN,OAAQ,EAAU;AAAA,YAClB,UAAU,SAAS,QAAQ,CAAC,MAAM;AAAA,UAAA,EAClC;AAAA,UACF,OAAQ,YAAoB;AAAA,QAAA;AAIvB,eAAA,KAAK,GAAI,QAAkB;AAElC;AAAA,MACF;AAEA,UAAI,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC9B,cAAM,KAAK,IAAI;AAAA,MACjB;AAEA,YAAM,KAAK;AAAA,QACT,cAAc,WAAW;AAAA,QACzB;AAAA,QACA,UAAU;AAAA,QACV,QAAQ,WAAW;AAAA,QACnB;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EACF;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEO,iCACL,QACA,QACuF;AACvF,QAAM,EAAE,UAAU,aAAa,WAAW+H,eAAa,MAAM;AAEzD,MAAA,OAAO,OAAO,OAAO,IAAI;AAEpB,WAAA,CAAC,MAAM,MAAM;AAAA,EACtB;AAGA,QAAM,gBAA6B;AAAA,IACjC,MAAM;AAAA,IACN,SAAS;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,IACjB;AAAA,EAAA;AAGK,SAAA;AAAA,IACL,cACI,YAAY,SAAS,qBACnB;AAAA,MACE,MAAM;AAAA,MACN,UAAU,YAAY;AAAA,MACtB,SAAS,cAAc;AAAA,QAEzB,cACF;AAAA,IACJ;AAAA,EAAA;AAEJ;AAEO,MAAM,eAAe;AAAA,EAC1B,YAAY,MAAM;AAAA,EAElB;AACF;AAEa,MAAA,kBAA2C,EAAE,MAAM,UAAU;AAE7D,MAAA,sBAAsB,CAAC,WAA4C;AACvE,SAAA,EAAE,MAAM,WAAW,QAAQ,aAAa,EAAE,OAAO,CAAC,EAAA;AAC3D;AAEa,MAAA,gBAAgB,CAAC,OAAe,WAA4C;AACvF,SAAO,EAAE,MAAM,SAAS,OAAO,QAAQ,aAAa,EAAE,OAAO,CAAA,EAAM,GAAA,OAAO,MAAM,QAAQ,CAAG,EAAA;AAC7F;AC7JA,mBAAiB,OAAkB,YAAoB;;AAC/C,QAAA,eAAe,qCAAO,SAAP,mBAAa,KAAK;AACvC,MAAI,CAAC,cAAc;AACV,WAAA;AAAA,EACT;AACA,SAAO,aAAa;AACtB;AAEO,qCAAqC,YAAqB,kBAA6B;AACrF,SAAA,iBACL,CAAC,UAAU;AACT,UAAM,UAAoB,CAAA;AAC1B,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IACT;AACA,UAAM,uBAAuB,OAAO,KAAK,MAAM,KAAK,SAAS,cAAc;AAC3E,eAAW,oBAAoB,sBAAsB;AACnD,UAAI,CAAC,oBAAoB,iBAAiB,QAAQ,gBAAgB,MAAM,IAAI;AACpE,cAAA,qBAAqBC,UAAQ,OAAO,gBAAgB;AAC1D,YAAI,sBAAsB,mBAAmB,SAAS,mBAAmB,MAAM,aAAa;AAC1F,kBAAQ,KAAK,gBAAgB;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEO,WAAA;AAAA,EAAA,GAET,CAAC,YAAY,gBAAgB,CAC/B;AACF;AC9ByC,kCAAA;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAMC;AACD,QAAM,WAAqB,CAAA;AAE3B,MAAI,UAAU;AACD,eAAA,QAAQ,SAAS,aAAa;AACvC,UAAI,SAAS,QAAQ,KAAK,EAAE,MAAM,IAAI;AAC3B,iBAAA,KAAK,KAAK,EAAE;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK;AACH,QAAA,YAAY,SAAS,QAAQ;AAC/B,iBAAW,WAAW,UAAU;AACnB,mBAAA,QAAQ,QAAQ,aAAa;AACtC,cAAI,SAAS,QAAQ,KAAK,EAAE,MAAM,IAAI;AAC3B,qBAAA,KAAK,KAAK,EAAE;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,aACS,QAAQ;AACN,eAAA,QAAQ,OAAO,aAAa;AACrC,UAAI,SAAS,QAAQ,KAAK,EAAE,MAAM,IAAI;AAC3B,iBAAA,KAAK,KAAK,EAAE;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AASO,SAAA;AACT;AChCA,iBAAiB,OAAkB,YAAoB;;AAC/C,QAAA,eAAe,qCAAO,SAAP,mBAAa,KAAK;AACvC,MAAI,CAAC,cAAc;AACV,WAAA;AAAA,EACT;AACA,SAAO,aAAa;AACtB;AAEyC,kCAAA,YAAqB,UAA6B,IAAI;AAC7F,QAAM,QAAQ;AACd,QAAM,WAAW;AACjB,QAAM,SAAS;AACf,QAAM,WAAW;AACX,QAAA,mBAAmB,QAAQ,MAAM;AACrC,WAAO,yBAAyB;AAAA,MAC9B,KAAK,QAAQ;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA,GACA,CAAC,QAAQ,KAAK,QAAQ,UAAU,QAAQ,CAAC;AAC5C,QAAM,iBAAiB,4BAA4B,YAAY,QAAQ,MAAM,SAAY,gBAAgB;AAEnG,QAAA,kBAAkB,YACtB,CAAC,eAAuB;AACtB,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,UAAM,aACJ,CAAC,YAAY,yBAAyB,OAAO,GAC7C,CAAC,sBAA6D;AACxD,UAAA,qBAAqB,CAAC,kBAAkB,aAAa;AAChD,eAAA;AAAA,MACT;AAEO,aAAA,iCACD,qBAAqB,CAAC,IADrB;AAAA,SAEJ,aAAa;AAAA,MAAA;AAAA,IAChB,CAEJ;AAAA,EAAA,GAEF,CAAC,YAAY,KAAK,CACpB;AAEA,QAAM,iBAAiB,YACrB,CAAC,IAAY,MAAoC,CAAA,MAAO;AACtD,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACM,UAAA,QAAQ,MAAM;AACpB,UAAM,aAAa,CAAA;AAGnB,QAAI,2BAAK,gBAAgB;AACvB,YAAM,uBAAuB,OAAO,KAAK,MAAM,KAAK,SAAS,cAAc;AAC3E,iBAAW,oBAAoB,sBAAsB;AAC7C,cAAA,qBAAqB,QAAQ,OAAO,gBAAgB;AAC1D,YAAI,sBAAsB,mBAAmB,SAAS,mBAAmB,MAAM,aAAa;AAC1F,qBAAW,KAAK,gBAAgB;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAGA,eAAW,cAAc,YAAY;AACnC,sBAAgB,UAAU;AAAA,IAC5B;AAGA,UAAM,aACJ,CAAC,IAAI,yBAAyB,OAAO,GACrC,CAAC,sBAA6D;AACxD,UAAA,qBAAqB,kBAAkB,aAAa;AAC/C,eAAA;AAAA,MACT;AACO,aAAA,iCACD,qBAAqB,CAAC,IADrB;AAAA,SAEJ,aAAa;AAAA,MAAA;AAAA,IAChB,CAEJ;AAAA,EAEF,GAAA,CAAC,YAAY,iBAAiB,KAAK,CACrC;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AC3GO,sBAA4B,KAAe,MAAsB;AACtE,SAAO,iBAAiB,CAAC,OAAO,UAAU,MAAM,IAAU,IAAI,IAAI,CAAC,OAAU,GAAA,IAAI,OAAO,CAAC,GAAU,CAAC,KAAK,IAAI,CAAC;AAChH;ACDO,MAAMC,4BAA4B1J,eAAMC,cAAkC,IAAI0J,oBAA5C;AAED,iCAAA;AACtC,SAAOxJ,WAAWuJ,yBAAD;AAClB;ACEqC,+BAAA;AACpC,QAAM,SAAS;AACf,QAAM,CAAC,oBAAoB,yBAAyB,SAAiC,CAAE,CAAA;AACjF,QAAA,aAAa,OAAO,KAAK;AAC/B,YAAU,MAAM;AACd,WAAO,MAAM;AACX,iBAAW,UAAU;AAAA,IAAA;AAAA,EAEzB,GAAG,CAAE,CAAA;AACL,QAAM,mBAAmB,YACvB,CAAC,cAAc,EAAE,QAAQ,YAAY;AACnC,QAAI,cAAc;AACV,YAAA,iBAAiB,aAAa,MAAO,aAAa;AAElD,YAAA,aAAa,OAAO,gBAAgB;AAAA,QACxC,IAAI;AAAA,QACJ,OAAO,aAAa,SAAS;AAAA,QAC7B,QAAQ,aAAa,UAAU;AAAA,QAC/B,QAAQ;AAAA,MAAA,CACT;AAED,UAAI,YAAY;AACC,uBAAA;AAAA,MAAA,WACN,CAAC,mBAAmB,iBAAiB;AAC1C,YAAA,CAAC,WAAW,SAAS;AACvB,gCAAsB,CAAC,MAAM;AACpB,mBAAA,iCACF,IADE;AAAA,eAEJ,iBAAiB;AAAA,YAAA;AAAA,UACpB,CACD;AAAA,QACH;AACA,eACG,YAAY;AAAA,UACX,IAAI;AAAA,UACJ,OAAO,aAAa,SAAS;AAAA,UAC7B,QAAQ,aAAa,UAAU;AAAA,QAAA,CAChC,EACA,KAAK,MAAM;AACN,cAAA,CAAC,WAAW,SAAS;AACvB,kCAAsB,CAAC,MAAM;AACpB,qBAAA,iCACF,IADE;AAAA,iBAEJ,iBAAiB;AAAA,cAAA;AAAA,YACpB,CACD;AAAA,UACH;AAAA,QAAA,CACD;AAAA,MACL;AAAA,IACF;AACO,WAAA;AAAA,EAAA,GAET,CAAC,QAAQ,kBAAkB,CAC7B;AAEO,SAAA,CAAC,kBAAkB,kBAAkB;AAC9C;AC1DE,gCAAA,UAAmE,IAC3C;AACxB,QAAM,aAAa;AACb,QAAA,SAAS,UAAU,QAAQ,WAAW,EAAE,IAAI,QAAQ,SAAS,IAAI,MAAS;AAEzE,SAAA,iBACL,CAAC,OAAO,UAAU;AAChB,QAAI,CAAC,QAAQ;AACX,aAAO;IACT;AACI,QAAA,cAAc,QAAQ,wBAAwB;AAChD,aAAO,CAAC,UAAU;AAAA,IACpB;AACA,UAAM,kBAAkB,MAAM,IAA8B,OAAO,KAAK;AACxE,UAAM,kBAA0C,CAAA;AAChD,eAAW,QAAQ,iBAAiB;AAClC,sBAAgB,KAAK,GAAG,MAAM,IAA0B,KAAK,KAAK,CAAC;AAAA,IACrE;AACO,WAAA;AAAA,EAAA,GAET,CAAC,MAAM,CACT;AACF;ACvBE,uBAAA,SACA,OAAc,IACd;AACA,QAAM,QAAQ;AACd,QAAM,sBAAsB,uBAAuB,EAAE,wBAAwB,mCAAS,wBAAwB;AAC9G,QAAM,CAAC,gBAAgB,qBAAqB,SAAmB,oCAAS,mBAAkB,CAAA,CAAE;AAE5F,QAAM,aAAa,QACjB,MAAM,cAAc,OAAO,qBAAqB,cAAc,GAC9D,CAAC,OAAO,qBAAqB,gBAAgB,GAAG,IAAI,CACtD;AAEM,QAAA,aAAa,YACjB,CACE,IACA,EAAE,iBAAiB,MAAM,WAAW,UAA4D,OAC7F;AACH,QAAI,WAAW,QAAQ;AAEjB,UAAA,WAAW,OAAO,SAAS,iBAAiB;AACxC,cAAA,IAAI,MAAM,kCAAkC;AAAA,MACpD;AAEA,wBAAkB,CAAC,gBAAgB;AACjC,YAAI,UAAU;AACZ,gBAAM,UAAU,YAAY,OAAO,CAAC,MAAM,MAAM,EAAE;AAE9C,cAAA,QAAQ,WAAW,GAAG;AACxB,kBAAM,YAAY,WAAW,MAAM,GAAG,SAAS;AAC/C,gBAAI,WAAW;AACb,qBAAO,CAAC,SAAS;AAAA,YAAA,OACZ;AACL,qBAAO;YACT;AAAA,UACF;AAEO,iBAAA;AAAA,QACT;AAEA,YAAI,gBAAgB;AAClB,iBAAO,CAAC,EAAE;AAAA,QACZ;AAEM,cAAA,aAAa,CAAC,GAAG,WAAW;AAGlC,YAAI,WAAW,WAAW,KAAK,WAAW,MAAM,QAAQ;AACtD,gBAAM,YAAY,WAAW,MAAM,GAAG,SAAS;AAC/C,cAAI,WAAW;AACb,uBAAW,KAAK,SAAS;AAAA,UAC3B;AAAA,QACF;AAEA,YAAI,YAAY,QAAQ,EAAE,MAAM,IAAI;AAC3B,iBAAA;AAAA,QACT;AAEO,eAAA,CAAC,GAAG,aAAa,EAAE;AAAA,MAAA,CAC3B;AAAA,IACH;AAAA,EAAA,GAEF,CAAC,WAAW,MAAM,CACpB;AAEM,QAAA,UAAU,EAAE;AAEX,SAAA,CAAC,YAAY,OAAO;AAC7B;ACvDE,0BAAA,QACA,YACA,kBACA;AACA,QAAM,aAAyC,CAAA;AACpC,aAAA,eAAe,WAAW,OAAO;AAEpC,UAAA,WACJ,YAAY,YAAY,YAAY,SAAS,SAAS,qBAClD,YAAY,SAAS,SACrB,YAAY;AAGd,QAAA,CAAC,SAAS,IAAI;AAEhB,aAAO,oBAAoB,wBAAwB;AAAA,IACrD;AAEA,QAAI,eAAe;AACnB,QAAI,SAAS,SAAS;AACd,YAAA,gBAAgB,iBAAiB,QAAe;AACtD,UAAI,cAAc,IAAI;AACL,uBAAA,iBAAiB,cAAc,IAAI,MAAM;AAAA,MAC1D;AAAA,IACF;AAGA,UAAM,gBAA6B;AAAA,MACjC,MAAM;AAAA,MACN,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,MACjB;AAAA,IAAA;AAGF,UAAM,CAAC,QAAQ,UAAU,wBAAwB,QAAQ,YAAY,MAAM;AACvE,QAAA,OAAO,OAAO,OAAO,IAAI;AAE3B;AAAA,IACF;AAGA,UAAM,uBAAuB;AAAA,MAC3B,MAAM;AAAA,MACN,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,MACjB;AAAA,IAAA;AAEI,UAAA,gBAAgB,YAAY,SAAS,SAAS,qBAAqB,aAAa,YAAY,QAAQ,IAAI;AACxG,UAAA,WACJ,iBACA,cAAc,YACb,eAAc,SAAS,SAAS,iBAAiB,cAAc,SAAS,SAAS,yBAC9E;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,GAAG,cAAc,SAAS,QAAQ;AAAA,QAClC,GAAG,cAAc,SAAS,QAAQ;AAAA,QAClC,OAAO,cAAc,SAAS,QAAQ;AAAA,QACtC,QAAQ,cAAc,SAAS,QAAQ;AAAA,MACzC;AAAA,IAEF,IAAA;AAEF,QAAA,gBAAgB,CAAC,aAAa,IAAI;AACnC,mBAAqB,KAAK,aAAa;AAAA,IAC1C;AAEA,UAAM,YAAsC;AAAA,MAC1C,IAAI,SAAS;AAAA,MACb,MAAM;AAAA,MACN,cAAc,YAAY;AAAA,MAC1B,OAAO,SAAS,SAAS,QAAQ,OAAO;AAAA,MACxC,QAAQ,SAAS,SAAS,SAAS,OAAO;AAAA,MAC1C,SAAS;AAAA,MACT,OACE,gBAAgB,aAAa,QACzB,aAAa,QACb,SAAS,SAAS,SAAS,SAC3B,CAAC,EAAE,OAAO,SAAS,OAAO,QAAQ,SAAS,OAAQ,CAAA,IACnD,CAAC;AAAA,MACP,QAAQ,UAAU,OAAO,SAAS,kBAAkB,SAAS;AAAA,MAC7D;AAAA,IAAA;AAGF,eAAW,KAAK,SAAS;AAAA,EAC3B;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO,WAAW;AAAA,IAClB,QAAQ;AAAA,IACR,QAAQ,WAAW;AAAA,EAAA;AAEvB;ACvGA,MAAM,mBAAmB,CAAC,mBAAmB;AAEtC,uBAAuB,QAA0B,YAA2C;AAC3F,QAAA,QAAQ,WAAW,MAAM;AAC/B,QAAM,WAAW,MAAM;AAEnB,MAAA,CAAC,SAAS,QAAQ;AACpB,WAAO,oBAAoB,gBAAgB;AAAA,EAC7C;AAEA,MAAI,iBAAiB,QAAQ,SAAS,MAAM,MAAM,IAAI;AAC7C,WAAA,oBAAoB,cAAc,SAAS,uBAAuB;AAAA,EAC3E;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX;AC5BO,0BAA0B,QAA0B,YAAwB;;AAC7E,MAAA,CAAC,OAAO,UAAU;AACpB,WAAO,oBAAoB,uBAAuB;AAAA,EACpD;AAEI,MAAA,WAAW,MAAM,SAAS,GAAG;AAC/B,WAAO,oBAAoB,iCAAiC;AAAA,EAC9D;AAEM,QAAA,gBAAgB,iBAAW,MAAM,OAAjB,mBAAqB;AAE3C,MAAI,CAAC,eAAe;AAClB,WAAO,oBAAoB,eAAe;AAAA,EAC5C;AAEI,MAAA,CAAC,cAAc,QAAQ;AACzB,WAAO,oBAAoB,4BAA4B;AAAA,EACzD;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,MACL,cAAc,WAAW,MAAM,GAAG;AAAA,MAClC,UAAU,OAAO;AAAA,MACjB,KAAK,cAAc;AAAA,MACnB,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW;AAAA,UACX,SAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,MACA,QAAQ,cAAc;AAAA,MACtB,UAAU;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW;AAAA,UACX,SAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,OAAO,CAAC;AAAA,IACV;AAAA,EAAA;AAEJ;AC7CO,0BAA0B,QAA0B,YAAwB;;AAC3E,QAAA,kBAAkB,WAAW,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO;AAErE,MAAA,CAAC,OAAO,UAAU;AACpB,WAAO,oBAAoB,uBAAuB;AAAA,EACpD;AAEI,MAAA,gBAAgB,SAAS,GAAG;AAC9B,WAAO,oBAAoB,iCAAiC;AAAA,EAC9D;AAEM,QAAA,gBAAgB,sBAAgB,OAAhB,mBAAoB;AAE1C,MAAI,CAAC,eAAe;AAClB,WAAO,oBAAoB,eAAe;AAAA,EAC5C;AAEI,MAAA,CAAC,cAAc,QAAQ;AACzB,WAAO,oBAAoB,4BAA4B;AAAA,EACzD;AAIO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,MACL,cAAc,WAAW,MAAM,GAAG;AAAA,MAClC,UAAU,OAAO;AAAA,MACjB,KAAK,cAAc;AAAA,MACnB,MAAM;AAAA,MACN,OAAO,CAAC;AAAA,MACR,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW;AAAA,UACX,SAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,MACA,QAAQ,cAAc;AAAA,MACtB,UAAU;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW;AAAA,UACX,SAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,OAAO,CAAC;AAAA,IACV;AAAA,EAAA;AAEJ;AC1CA,mBAAmB,MAAW,cAAmC,CAAA,GAAI,MAAe;AAC5E,QAAA,WAAW,KAAK,YAAY,QAAQ;AAC1C,UAAQ,KAAK;AAAA,SACN,eAAe;AACd,UAAA,OAAO,KAAK,UAAU,aAAa;AACrC,oBAAY,YAAY,KAAK;AAAA,MAC/B;AACA;AAAA,IACF;AAAA,SACK;AAAA,SACA;AAAA,SACA,UAAU;AACb,UAAI,KAAK,OAAO;AACT,aAAA,MAAM,QAAQ,CAAC,UAAe,UAAU,OAAO,aAAa,QAAQ,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA;AAEK,SAAA;AACT;AAEO,mCAAmC,QAA0B,YAA2C;AAC7G,QAAM,QAAyC,CAAA;AAEpC,aAAA,MAAM,QAAQ,CAAC,SAAS;AACjC,QAAI,KAAK,UAAU;AACjB,YAAM,CAAC,UAAU,wBAAwB,QAAQ,KAAK,MAAM;AACtD,YAAA,KAAK,EAAE,cAAc,KAAK,cAAc,MAAM,UAAU,KAAK,QAAQ,GAAG,OAAuB,CAAA;AAAA,IACvG;AAAA,EAAA,CACD;AAEM,SAAA;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EAAA;AAEJ;ACXO,8BAA8B,SAA6D;AAChG,QAAM,WAAW;AACjB,QAAM,SAAS;AACf,QAAM,QAAQ;AACR,QAAA,CAAC,kBAAkB,sBAAsB,oBAAoB;AAC7D,QAAA,EAAE,mBAAmB,yBAAyB,oCAAS,4BAA2B,sCAAU,OAAM,kCAAQ,KAAI;AAAA,IAClH,KAAK;AAAA,EAAA,CACN;AACK,QAAA,eAAe,aAAuC,gBAAgB,gBAAgB;AAEtF,QAAA,WAAwC,oCAAS,eAAc;AAAA,IACnE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,CAAC,YAAY,WAAW,cAAc,SAAS,CAAC,kBAAkB,CAAC;AAEnE,QAAA,WAAW,QAAQ,MAAM;AAC7B,QAAI,CAAC,QAAQ;AACJ,aAAA;AAAA,IACT;AAEI,QAAA,WAAW,MAAM,WAAW,GAAG;AACjC,UAAI,SAAS,QAAQ,OAAO,MAAM,IAAI;AACpC,eAAO,cAAc,OAAO,OAAO,OAAO,MAAM;AAAA,MAClD;AACO,aAAA;AAAA,IACT;AAEI,QAAA,WAAW,MAAM,WAAW,GAAG;AAC7B,UAAA,WAAW,MAAM,WAAW,KAAK,WAAW,MAAM,QAAQ,MAAM,MAAM,IAAI;AAC5E,mBAAW,QAAQ,WAAW,MAAM,OAAO,CAAC,MAAM,MAAM,MAAM;AAAA,MAAA,OACzD;AACL,YAAI,SAAS,QAAQ,kBAAkB,MAAM,IAAI;AAC/C,iBAAO,oBAAoB,gCAAgC;AAAA,QAC7D;AACA,eAAO,oBAAoB,2CAA2C;AAAA,MACxE;AAAA,IACF;AAEM,UAAA,WAAW,WAAW,MAAM;AAGlC,QAAI,aAAa,SAAS;AACxB,UAAI,SAAS,QAAQ,QAAQ,MAAM,IAAI;AACrC,eAAO,oBAAoB,qBAAqB;AAAA,MAClD;AAEO,aAAA,iBAAiB,QAAQ,YAAY,gBAAgB;AAAA,IAC9D;AAGI,QAAA,aAAa,WAAW,aAAa,SAAS;AAChD,UAAI,SAAS,QAAQ,UAAU,MAAM,IAAI;AACvC,eAAO,oBAAoB,kBAAkB;AAAA,MAC/C;AAEO,aAAA,cAAc,QAAQ,UAAU;AAAA,IACzC;AAEA,QAAI,aAAa,eAAe;AAC9B,UAAI,SAAS,QAAQ,iBAAiB,MAAM,IAAI;AAC9C,eAAO,oBAAoB,+BAA+B;AAAA,MAC5D;AAEO,aAAA,0BAA0B,QAAQ,UAAU;AAAA,IACrD;AAEI,QAAA,aAAa,WAAW,aAAa,SAAS;AAChD,UAAI,SAAS,QAAQ,OAAO,MAAM,IAAI;AACpC,eAAO,oBAAoB,qBAAqB;AAAA,MAClD;AAGO,aAAA,iBAAiB,QAAQ,UAAU;AAAA,IAC5C;AAEA,QAAI,aAAa,SAAS;AACxB,UAAI,SAAS,QAAQ,OAAO,MAAM,IAAI;AACpC,eAAO,oBAAoB,qBAAqB;AAAA,MAClD;AAGO,aAAA,iBAAiB,QAAQ,UAAU;AAAA,IAC5C;AAGO,WAAA;AAAA,EAAA,GACN,CAAC,QAAQ,YAAY,OAAO,QAAQ,UAAU,CAAC;AAElD,SAAO,QAAQ,MAAM;AACf,QAAA,SAAS,SAAS,WAAW;AACxB,aAAA,CAAC,UAAU,YAAY;AAAA,IAChC;AAEO,WAAA;AAAA,MACL,iCACK,WADL;AAAA,QAEE,aAAa,EAAE,OAAO,aAAa;AAAA,MACrC;AAAA,MACA;AAAA,IAAA;AAAA,EACF,GACC,CAAC,UAAU,YAAY,CAAC;AAC7B;AC3IO,MAAM,iBAAiB,CAAC,UAAkC,OAAc,OAAa;AAC1F,QAAM,QAAQ;AAEd,YAAU,MAAM;AACd,aAAS,KAAK;AAAA,EACb,GAAA,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB;ACTA,+BAA+B,OAAO,eAAe,IAAI;AACvD,QAAM,qBAAqB,aAAa,sBAAsB,IAAI,mBAAkB;AACpF,wCAAsC,OAAO,SAAS,aAAa,aAAa,CAAE,GAAE,YAAY;AAC9F,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,EAAE,MAAM,sBAAsB,KAAK,GAAG,UAAU,CAAE,GAAE,KAAK,CAAA;IACjE;AACD,UAAM,YAAY,MAAM,IAAI,KAAK;AACjC,QAAI,OAAO,cAAc,UAAU;AACjC,aAAO,EAAE,MAAM,sBAAsB,SAAS,GAAG,UAAU,CAAE,GAAE,KAAK,CAAA;IACrE;AACD,YAAQ,UAAU;AAAA,WACX,cAAc;AACjB,cAAM,mBAAmB,UAAU;AACnC,cAAM,wBAAwB,MAAM,IAAI,iBAAiB,EAAE;AAC3D,YAAI,cAAc,CAAC,sBAAsB,OAAO;AAC9C,gCAAsB,QAAQ,WAAW;AACzC,gCAAsB,SAAS,WAAW;AAAA,QAC3C;AACD,eAAO,MAAM,mBAAmB,yBAAyB,uBAAuB,SAAS,aAAa,UAAU;AAAA,MACjH;AAAA,WACI,UAAU;AACb,cAAM,SAAS;AACf,YAAI,OAAO,aAAa,OAAO,UAAU,QAAQ;AAC/C,gBAAM,YAAY,MAAM,IAAI,OAAO,UAAU,EAAE;AAC/C,gBAAM,sBAAsB,MAAM,mBAAmB,mBAAmB,WAAW,WAAW;AAC9F,cAAI,uBAAuB,oBAAoB,QAAQ;AACrD,uBAAW,KAAK,GAAG,mBAAmB;AAAA,UACvC;AAAA,QACF;AACD,eAAO,uBAAuB,OAAO,MAAM,IAAI,SAAS,aAAa,YAAY;AAAA,UAC/E,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,QACzB,CAAS;AAAA,MACF;AAAA,WACI,kBAAkB;AACrB,cAAM,iBAAiB;AACvB,eAAO,uBAAuB,eAAe,MAAM,IAAI,SAAS,aAAa,YAAY,UAAU;AAAA,MACpG;AAAA,WACI,UAAU;AACb,cAAM,SAAS;AACf,eAAO,uBAAuB,OAAO,MAAM,IAAI,SAAS,aAAa,YAAY,UAAU;AAAA,MAC5F;AAAA,WACI,cAAc;AACjB,cAAM,aAAa;AACnB,cAAM,gBAAgB,WAAW,MAAM;AACvC,eAAO,uBAAuB,eAAe,SAAS,aAAa,YAAY,UAAU;AAAA,MAC1F;AAAA,WACI,YAAY;AACf,cAAM,WAAW;AACjB,cAAM,cAAc,SAAS,MAAM;AACnC,eAAO,uBAAuB,aAAa,SAAS,aAAa,YAAY,UAAU;AAAA,MACxF;AAAA,WACI;AAAA,WACA;AAAA,WACA;AAAA,WACA;AAAA,WACA;AAAA,WACA;AAAA,WACA;AACH,YAAI,cAAc,CAAC,UAAU,OAAO;AAClC,oBAAU,QAAQ,WAAW;AAC7B,oBAAU,SAAS,WAAW;AAAA,QAC/B;AACD,eAAO,mBAAmB,yBAAyB,WAAW,SAAS,aAAa,UAAU;AAAA,WAC3F;AAAA,WACA;AAAA,WACA;AAAA,WACA;AAAA,WACA;AACH,eAAO,EAAE,MAAM,QAAQ,UAAU,IAAI,KAAK,CAAA;;AAE9C,WAAO,EAAE,MAAM,QAAQ,UAAU,IAAI,KAAK,CAAA;EAC3C;AACD,SAAO;AAAA,IACL;AAAA,EACJ;AACA;ACpEO,sBACL,SACA,aACA,EAAE,UAAU,eAA2D,IACvE;AACA,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,SAAS,QAAQ,MAAM,sBAAsB,OAAO,EAAE,oBAAoB,OAAQ,CAAA,GAAG,CAAC,OAAO,MAAM,CAAC;AAEpG,QAAA,CAAC,WAAW,gBAAgB,SAAqC;AACvE,QAAM,WAAW,YAAY,aAAa,EAAE,IAAI,eAAe,MAAS;AACxE,QAAM,SAAS,UAAU,WAAW,EAAE,IAAI,aAAa,MAAS;AAC1D,QAAA,UAAU,SAAS,SAAS;AAC5B,QAAA,aAAa,OAAO,KAAK;AAE/B,YAAU,MAAM;AACd,eAAW,UAAU;AACrB,WAAO,MAAM;AACX,iBAAW,UAAU;AAAA,IAAA;AAAA,EAEzB,GAAG,CAAE,CAAA;AAEL,MAAI,CAAC,SAAS;AACN,UAAA,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,iBACE,CAAC,MAAM;AACL,WAAO,uBAAuB,SAAS,SAAS,WAAW,EAAE,KAAK,CAAC,UAAU;AAC3E,UAAI,MAAM,QAAQ,CAAC,WAAW,SAAS;AACrC,qBAAa,MAAM,IAAI;AAAA,MACzB;AAAA,IAAA,CACD;AAAA,EAAA,GAEH,CAAC,OAAO,CACV;AAEO,SAAA;AACT;ACbA,yBAAyB,UAAoC;AACpD,SAAA,EAAE,SAAS,OAAO,eAAe,OAAO,WAAW,OAAO,YAAY,OAAO,QAAQ,KAAK,SAAS;AAC5G;AAEA,iBAAiB,OAAyB,QAA2B;AACnE,UAAQ,OAAO;AAAA,SACR;AACH,aAAO,iCAAK,QAAL,EAAY,YAAY,MAAM,WAAW,OAAO,eAAe;SACnE;AACH,aAAO,iCAAK,QAAL,EAAY,YAAY,OAAO,WAAW,CAAC,MAAM;SACrD;AACH,aAAO,iCAAK,QAAL,EAAY,YAAY,OAAO,eAAe;SAClD;AACI,aAAA,iCAAK,QAAL,EAAY,WAAW,MAAM;AAAA,SACjC;AACH,aAAO,iCAAK,QAAL,EAAY,YAAY,OAAO,eAAe,OAAO,WAAW;SACpE;AACI,aAAA,iCAAK,QAAL,EAAY,SAAS,KAAK;AAAA,SAC9B;AACI,aAAA,iCAAK,QAAL,EAAY,QAAQ,OAAO,QAAQ,SAAS,OAAO,WAAW;SAClE;AACH,aAAO,iCAAK,QAAL,EAAY,SAAS,CAAC,MAAM,QAAQ;AAAA,SACxC;AACI,aAAA,iCAAK,QAAL,EAAY,SAAS,MAAM;AAAA;AAE/B,SAAA;AACT;AAEO,oBAAoB,MAAc;AACjC,QAAA,UAAU,KAAK,MAAM,IAAI;AACxB,SAAA,GAAG,KAAK,MAAM,UAAU,EAAE,KAAK,GAAG,UAAU,KAAK,SAAS,GAAG,GAAG;AACzE;AAEO,8BAA8B,OAQnC;AACM,QAAA,CAAC,OAAO,YAAY,WAAW,SAAS,gBAAgB,MAAM,QAAQ,CAAC;AAEvE,QAAA,QAAQ,OAA4C,IAAI;AACxD,QAAA,cAAc,OAAuB,IAAI;AACzC,QAAA,WAAW,OAAuB,IAAI;AACtC,QAAA,WAAW,OAAO,KAAK;AAEvB,QAAA,qBAAqB,YAAY,MAAM;AACvC,QAAA,YAAY,WAAW,MAAM,SAAS;AACxC,kBAAY,QAAQ,YAAY,WAAW,MAAM,QAAQ,WAAW;AACpE,UAAI,SAAS,SAAS;AACX,iBAAA,QAAQ,MAAM,QAAQ,GAAI,MAAM,QAAQ,cAAc,MAAM,WAAY;AAAA,MACnF;AACA,UAAI,SAAS,YAAY,MAAM,QAAQ,OAAO;AACnC,iBAAA,UAAU,MAAM,QAAQ;AACxB,iBAAA,MAAM,QAAQ,QAAQ,EAAE,MAAM,WAAW,EAAE,MAAM,SAAA,CAAU;AAAA,MACtE;AAAA,IACF;AAAA,EAAA,GACC,CAAC,MAAM,QAAQ,CAAC;AAEb,QAAA,OAAO,YAAY,MAAM;AAC7B,QAAI,MAAM,SAAS;AACR,eAAA,EAAE,MAAM,iBAAA,CAAkB;AACnC,YAAM,QAAQ,KAAO,EAAA,KAAK,MAAM;AACrB,iBAAA,EAAE,MAAM,OAAA,CAAQ;AAAA,MAAA,CAC1B;AACkB;IACrB;AAAA,EAAA,GACC,CAAC,kBAAkB,CAAC;AAEjB,QAAA,YAAY,YAAY,MAAM;AAClC,QAAI,MAAM,SAAS;AACjB,UAAI,MAAM,QAAQ,WAAW,KAAK,MAAM,QAAQ,QAAQ;AACjD;MAAA,OACA;AACC;MACR;AAAA,IACF;AAAA,EAAA,GACC,CAAC,kBAAkB,CAAC;AAEjB,QAAA,QAAQ,YAAY,MAAM;AAC9B,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ;AACL,eAAA,EAAE,MAAM,QAAA,CAAS;AACP;IACrB;AAAA,EAAA,GACC,CAAC,kBAAkB,CAAC;AAEjB,QAAA,aAAa,YAAY,MAAM;AACnC,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ,CAAC,MAAM,QAAQ;AAC5B,eAAA,MAAM,QAAQ,QAAQ,EAAE,MAAM,WAAW,EAAE,MAAM,SAAA,CAAU;AAAA,IACtE;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,OAAO,YAAY,MAAM;AAC7B,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ;AACb,eAAA,EAAE,MAAM,OAAA,CAAQ;AAAA,IAC3B;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,SAAS,YAAY,MAAM;AAC/B,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ;AACb,eAAA,EAAE,MAAM,SAAA,CAAU;AAAA,IAC7B;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,YAAY,YAAY,CAAC,cAAsB;AACnD,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ;AAChB,YAAA,QAAQ,SAAS,YAAY;AACnC,eAAS,EAAE,MAAM,cAAc,QAAQ,UAAW,CAAA;AAAA,IACpD;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,qBAAqB,YAAY,CAAC,YAAoB;AAC1D,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,MAAM,UAAU,MAAM,QAAQ,CAAC;AACvE;IACrB;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,UAAU,YAAY,CAAC,SAAiB;AAC5C,QAAI,MAAM,SAAS;AACX,YAAA,QAAQ,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,MAAM,QAAQ,CAAC;AACnD;IACrB;AAAA,EACF,GAAG,CAAE,CAAA;AAEL,YAAU,MAAM;AACR,UAAA,WAAW,YAAY,MAAM;AACd;OAClB,GAAG;AAEC,WAAA,MAAM,cAAc,QAAQ;AAAA,EAClC,GAAA,CAAC,oBAAoB,MAAM,QAAQ,CAAC;AAEvC,YAAU,MAAM;AACd,UAAM,QAAQ,MAAM;AACT,eAAA,EAAE,MAAM,WAAA,CAAY;AAAA,IAAA;AAE/B,UAAM,SAAS,MAAM;AAEb,qCAAA,iBAAiB,SAAS;AAElC,WAAO,MAAM,iCAAQ,oBAAoB,SAAS;AAAA,EACpD,GAAG,CAAE,CAAA;AAEE,SAAA;AAAA,IACL,EAAE,SAAS,OAAO,aAAa,SAAS;AAAA,IACxC;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAEJ;ACtMA,MAAME,yBAAyB3J,cAAuC,IAA1B;AAC5C,MAAM4J,2BAA2B5J,cAAyC,IAA5B;AAC9C,MAAM6J,4BAA4B7J,cAIxB,IAJqC;AAMf,yBAAA;AACxBoD,QAAAA,MAAMlD,WAAWyJ,sBAAD;AACtB,MAAI,CAACvG,KAAK;AACF,UAAA,IAAI0G,MAAM,eAAV;AAAA,EACP;AACM1G,SAAAA;AACR;AAEiC,2BAAA;AAC1BA,QAAAA,MAAMlD,WAAW0J,wBAAD;AACtB,MAAI,CAACxG,KAAK;AACF,UAAA,IAAI0G,MAAM,eAAV;AAAA,EACP;AACM1G,SAAAA;AACR;AAEkC,4BAAA;AAC3BA,QAAAA,MAAMlD,WAAW2J,yBAAD;AACtB,MAAI,CAACzG,KAAK;AACF,UAAA,IAAI0G,MAAM,eAAV;AAAA,EACP;AACM1G,SAAAA;AACR;AAEmC,6BAAA;AAAA,EAClC2G;AAAAA,EACAzI;AAAAA,EACAlB;AAAAA,EACA4J;AAAAA,EACAC;AAAAA,EACAC;AAAAA,GAQC;AAEC,SAAA1J,oBAAC,0BAA0B,UAA3B;AAAA,IAAoC,OAAO;AAAA,MAAEwJ;AAAAA,MAAaC;AAAAA,MAAUC;AAAAA,IAAzB;AAAA,IAA3C,UACG1J,oBAAA,yBAAyB,UAA1B;AAAA,MAAmC,OAAOuJ;AAAAA,MAA1C,UACGvJ,oBAAA,uBAAuB,UAAxB;AAAA,QAAiC,OAAOc;AAAAA,QAAxC;AAAA,MAAA,CAAA;AAAA,IAAA,CADF;AAAA,EAAA,CAFJ;AAOD;ACnDqB,eAAA;AAAA,EAAE6I;AAAAA,EAAO/J;AAAAA,GAAyD;AACtF,QAAM,CAAC;AAAA,IAAE8J;AAAAA,IAASF;AAAAA,IAAaC;AAAAA,KAAY3I,OAAOyI,WAAWK,qBAAqB;AAAA,IAAEC,UAAUF,MAAME;AAAAA,EAAAA,CAAnB;AAEjF,6BACEC,YAAA;AAAA,IAAA,8BACG,cAAD;AAAA,MAAA,+BACG,qBAAD;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QALF,UAOE,CAAA9J,oBAAA,SAAA;AAAA,UAAO,KAAK0J;AAAAA,UAAS,KAAKC,MAAMI;AAAAA,QAAhC,CAAA,GACCnK,QARH;AAAA,MAAA,CAAA;AAAA,IAAA,CADF;AAAA,EAAA,CAFJ;AAgBD;ACnBqB,eAAA;AAAA,EAAE+J;AAAAA,EAAO/J;AAAAA,GAAyD;AACtF,QAAM,CAAC;AAAA,IAAE8J;AAAAA,IAASF;AAAAA,IAAaC;AAAAA,KAAY3I,OAAOyI,WAAWK,qBAAqB;AAAA,IAAEC,UAAUF,MAAME;AAAAA,EAAAA,CAAnB;AACjF,QAAMG,YAAY;AAElB,8BACEF,YAAA;AAAA,IAAA,UAAA,CACEjB,qBAAC,cAAD;AAAA,MAAc,SAAd;AAAA,MAAA,UACE,CAAA7I,oBAAA,SAAA;AAAA,QAAA,UACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAFN,GAiBEA,oBAAC,WAAD;AAAA,QAAW,WAAU;AAAA,QAAkB,MAAK;AAAA,QAAkB,SAAS,MAAMuJ,QAAQU,UAArF;AAAA,QAAA,8BACE,SAAA;AAAA,UAAO,KAAKP;AAAAA,UAAgB,KAAKC,MAAMI;AAAAA,UAAK,OAAO;AAAA,YAAElG,OAAO;AAAA,YAAQqG,WAAW;AAAA,UAA5B;AAAA,QAAA,CAAnD;AAAA,MAAA,CAlBJ,CAAA;AAAA,IAAA,CADF,GAsBElK,oBAAC,cAAD;AAAA,MAAA,8BACG,qBAAD;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QALF;AAAA,MAAA,CAAA;AAAA,IAAA,CAvBJ,CAAA;AAAA,EAAA,CADF;AAoCD;AC1CqB,eAAA;AAAA,EAAEmK;AAAAA,GAAyB;AAC/C,8BACG,cAAD;AAAA,IAAc,SAAd;AAAA,IAAA,UACE,CAAAnK,oBAAA,SAAA;AAAA,MAAA,UACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CADJ,GAgBAA,oBAAA,OAAA;AAAA,MAAK,WAAU;AAAA,MAAf,8BAEE,gBAAA;AAAA,QACE,sBAAmB;AAAA,QACnB,OAAO;AAAA,UAAE6D,OAAO;AAAA,UAAQE,QAAQ;AAAA,QAAzB;AAAA,QACP,mBAAgB;AAAA,QAChB,aAAU;AAAA,QACV,KAAKoG,MAAMnJ;AAAAA,MAAAA,CALb;AAAA,IAAA,CAnBJ,CAAA;AAAA,EAAA,CADF;AA8BD;AChCgC,0BAAA;AAAA,EAAE8C;AAAAA,GAA+B;AAChE,QAAM3E,SAASqI;AAEf,MAAI,CAACrI,UAAU,CAACA,OAAO4E,UAAU,CAAC5E,OAAO0E,OAAO;AACvC,WAAA;AAAA,EACR;AAED,6BAAO,OAAA;AAAA,IAAK,aAAa;AAAA,IAAO,QAAQ;AAAA,MAAE4E,GAAG;AAAA,MAAGC,GAAG;AAAA,MAAG7E,OAAO1E,OAAO0E;AAAAA,MAAOE,QAAQ5E,OAAO4E;AAAAA,IAAlD;AAAA,IAA4D;AAAA,EAAA,CAApG;AACD;ACXD,IAAIuC,aAAY8D,OAAOC;AACvB,IAAI9D,cAAa6D,OAAOE;AACxB,IAAI9D,qBAAoB4D,OAAOG;AAC/B,IAAI9D,uBAAsB2D,OAAOI;AACjC,IAAI9D,gBAAe0D,OAAOK,UAAUC;AACpC,IAAI/D,gBAAeyD,OAAOK,UAAUE;AACpC,IAAI/D,mBAAkB,CAACgE,KAAKC,KAAKlL,UAAUkL,OAAOD,MAAMtE,WAAUsE,KAAKC,KAAK;AAAA,EAAEC,YAAY;AAAA,EAAMC,cAAc;AAAA,EAAMC,UAAU;AAAA,EAAMrL;AAAxD,CAAX,IAA8EiL,IAAIC,OAAOlL;AAC1J,IAAIkH,kBAAiB,CAACoE,GAAGC,MAAM;AAC7B,WAASC,QAAQD,KAAMA,KAAI,CAAA;AACzB,QAAIxE,cAAa0E,KAAKF,GAAGC,IAArB;AACFvE,uBAAgBqE,GAAGE,MAAMD,EAAEC,KAAZ;AACnB,MAAI1E;AACF,aAAS0E,QAAQ1E,qBAAoByE,CAAD,GAAK;AACvC,UAAIvE,cAAayE,KAAKF,GAAGC,IAArB;AACFvE,yBAAgBqE,GAAGE,MAAMD,EAAEC,KAAZ;AAAA,IAClB;AACH,SAAOF;AACR;AACD,IAAInE,iBAAgB,CAACmE,GAAGC,MAAM3E,YAAW0E,GAAGzE,mBAAkB0E,CAAD,CAArB;AACxC,IAAIG,aAAY,CAACtD,QAAQuD,YAAY;AACnC,MAAI1D,SAAS,CAAA;AACb,WAASuD,QAAQpD;AACf,QAAIrB,cAAa0E,KAAKrD,QAAQoD,IAA1B,KAAmCG,QAAQC,QAAQJ,IAAhB,IAAwB;AAC7DvD,aAAOuD,QAAQpD,OAAOoD;AAC1B,MAAIpD,UAAU,QAAQtB;AACpB,aAAS0E,QAAQ1E,qBAAoBsB,MAAD,GAAU;AAC5C,UAAIuD,QAAQC,QAAQJ,IAAhB,IAAwB,KAAKxE,cAAayE,KAAKrD,QAAQoD,IAA1B;AAC/BvD,eAAOuD,QAAQpD,OAAOoD;AAAAA,IACzB;AACH,SAAOvD;AACR;AAED,yBAAyBgD,KAAKC,KAAKlL,OAAO;AACxC,MAAIkL,OAAOD,KAAK;AACdR,WAAOC,eAAeO,KAAKC,KAAK;AAAA,MAC9BlL;AAAAA,MACAmL,YAAY;AAAA,MACZC,cAAc;AAAA,MACdC,UAAU;AAAA,KAJZ;AAAA,EAMD,OAAM;AACLJ,QAAIC,OAAOlL;AAAAA,EACZ;AACD,SAAOiL;AACR;AACD,yBAAyBY,UAAUC,aAAa;AAC9C,MAAI,CAAED,qBAAoBC,cAAc;AACtC,UAAM,IAAIC,UAAU,mCAAd;AAAA,EACP;AACF;AACD,2BAA2B9D,QAAQ5F,OAAO;AACxC,WAAS2J,IAAI,GAAGA,IAAI3J,MAAMc,QAAQ6I,KAAK;AACrC,QAAIC,aAAa5J,MAAM2J;AACvBC,eAAWd,aAAac,WAAWd,cAAc;AACjDc,eAAWb,eAAe;AAC1B,QAAI,WAAWa;AACbA,iBAAWZ,WAAW;AACxBZ,WAAOC,eAAezC,QAAQgE,WAAWf,KAAKe,UAA9C;AAAA,EACD;AACF;AACD,sBAAsBH,aAAaI,YAAYC,aAAa;AAC1D,MAAID;AACFE,sBAAkBN,YAAYhB,WAAWoB,UAAxB;AACnB,MAAIC;AACFC,sBAAkBN,aAAaK,WAAd;AACnB1B,SAAOC,eAAeoB,aAAa,aAAa;AAAA,IAC9CT,UAAU;AAAA,GADZ;AAGA,SAAOS;AACR;AACD,IAAIO,iBAAiB;AAAA,EACnBC,UAAU;AAAA,EACVC,eAAe;AAAA,EACfC,qBAAqB;AAAA,EACrBC,4BAA4B;AAAA,EAC5BC,oBAAoB;AAAA,EACpBC,4BAA4B,CAAC,MAAM,UAAU,KAAK,GAAtB;AAAA,EAC5BC,aAAa;AAPM;AASrB,IAAIC;AACJ,IAAIC,cAAclN,eAAMC;AACxB,uBAAuB;AACrB,SAAOwM;AACR;AACD,IAAIU,mBAAmB,WAAW;AAChC,+BAA6B;AAC3BC,oBAAgB,MAAMC,iBAAP;AACf,SAAKC,iBAAiB;EACvB;AACDC,eAAaF,mBAAmB,CAAC;AAAA,IAC/B/B,KAAK;AAAA,IACLlL,OAAO,2BAA2BoN,YAAY;AAC5C,UAAIC,QAAQ;AACZD,iBAAWE,QAAQ,SAASC,IAAI;AAC9B,YAAI,CAACF,MAAMH,eAAeK;AACxBF,gBAAMH,eAAeK,MAAM;AAAA,OAF/B;AAAA,IAID;AAAA,EAR8B,GAS9B;AAAA,IACDrC,KAAK;AAAA,IACLlL,OAAO,6BAA6B;AAClC,aAAOyK,OAAO+C,KAAK,KAAKN,cAAjB;AAAA,IACR;AAAA,EAb6B,CAAA,CAApB;AAeZ,SAAOD;AACR;AACD,mBAAmB;AACjB,SAAOJ;AACR;AACD,gBAAgB;AACd,MAAIzJ,WAAWA,QAAQC,MAAM;AAC3B,QAAIoK;AACJ,aAASC,OAAOC,UAAUxK,QAAQyK,OAAO,IAAIC,MAAMH,IAAV,GAAiBI,OAAO,GAAGA,OAAOJ,MAAMI,QAAQ;AACvFF,WAAKE,QAAQH,UAAUG;AAAAA,IACxB;AACD,QAAI,OAAOF,KAAK,OAAO;AACrBA,WAAK,KAAK,mBAAmBG,OAAOH,KAAK,EAA/B;AACZ,IAACH,YAAWrK,SAASC,KAAK2K,MAAMP,UAAUG,IAA1C;AAAA,EACD;AACF;AACD,IAAIK,gBAAgB,CAAA;AACpB,oBAAoB;AAClB,WAASC,QAAQP,UAAUxK,QAAQyK,OAAO,IAAIC,MAAMK,KAAV,GAAkBC,QAAQ,GAAGA,QAAQD,OAAOC,SAAS;AAC7FP,SAAKO,SAASR,UAAUQ;AAAAA,EACzB;AACD,MAAI,OAAOP,KAAK,OAAO,YAAYK,cAAcL,KAAK;AACpD;AACF,MAAI,OAAOA,KAAK,OAAO;AACrBK,kBAAcL,KAAK,MAAM,IAAIQ;AAC/B/K,OAAK2K,MAAM,QAAQJ,IAAnB;AACD;AACD,wBAAwBS,MAAMd,IAAIe,IAAI;AACpCD,OAAKE,eAAehB,IAAI,WAAW;AACjC,QAAIc,KAAKG,eAAe;AACtBF;IACD,OAAM;AACL,UAAIG,cAAc,wBAAwB;AACxCnI,mBAAW,WAAW;AACpB+H,eAAKK,IAAI,eAAeC,YAAxB;AAAA,QADQ,GAEP,CAFO;AAGVL;;AAEFD,WAAKO,GAAG,eAAeH,WAAvB;AAAA,IACD;AAAA,GAXH;AAaD;AACD,4BAA4BlB,IAAIc,MAAM;AACpC,MAAIQ,UAAUlB,UAAUxK,SAAS,KAAKwK,UAAU,OAAO,SAASA,UAAU,KAAK,CAAA;AAC/E,MAAI,CAACU,KAAKS,aAAa,CAACT,KAAKS,UAAU3L,QAAQ;AAC7C4L,aAAS,0CAA0CV,KAAKS,SAAhD;AACR,WAAO;AAAA,EACR;AACD,MAAIE,MAAMX,KAAKS,UAAU;AACzB,MAAIG,cAAcZ,KAAKQ,UAAUR,KAAKQ,QAAQI,cAAc;AAC5D,MAAIC,UAAUb,KAAKS,UAAUT,KAAKS,UAAU3L,SAAS;AACrD,MAAI6L,IAAIG,YAAJ,MAAsB;AACxB,WAAO;AACT,MAAIC,iBAAiB,yBAAyBC,GAAGC,GAAG;AAClD,QAAIC,YAAYlB,KAAKmB,SAASC,iBAAiBtO,MAAM,GAAG4M,OAAOsB,GAAG,GAAb,EAAkBtB,OAAOuB,CAAzB;AACrD,WAAOC,cAAc,MAAMA,cAAc;AAAA;AAE3C,MAAIV,QAAQvC,YAAYuC,QAAQvC,SAASV,QAAQ,kBAAzB,IAA+C,MAAMyC,KAAKmB,SAASC,iBAAiBC,WAAWrB,KAAKsB,wBAAwB,CAACP,eAAef,KAAKsB,sBAAsBpC,EAA5B;AACjK,WAAO;AACT,MAAIc,KAAKuB,kBAAkBZ,KAAKzB,EAA5B;AACF,WAAO;AACT,MAAI,CAACc,KAAKmB,SAASC,iBAAiBC;AAClC,WAAO;AACT,MAAIN,eAAeJ,KAAKzB,EAAN,KAAc,EAAC0B,eAAeG,eAAeF,SAAS3B,EAAV;AAC5D,WAAO;AACT,SAAO;AACR;AACD,yBAAyBsC,KAAK;AAC5B,MAAIhC,MAAMiC,QAAQD,GAAd;AACF,WAAOA;AACV;AACD,+BAA+BA,KAAK7D,GAAG;AACrC,MAAI+D,KAAKF,OAAO,OAAO,OAAO,OAAOG,WAAW,eAAeH,IAAIG,OAAOC,aAAaJ,IAAI;AAC3F,MAAIE,MAAM;AACR;AACF,MAAIG,OAAO,CAAA;AACX,MAAIC,KAAK;AACT,MAAIC,KAAK;AACT,MAAIC,IAAIC;AACR,MAAI;AACF,SAAKP,KAAKA,GAAGtE,KAAKoE,GAAR,GAAc,CAAEM,MAAME,MAAKN,GAAGtN,KAAT,GAAiB8N,OAAOJ,KAAK,MAAM;AAChED,WAAKM,KAAKH,GAAGrQ,KAAb;AACA,UAAIgM,KAAKkE,KAAK/M,WAAW6I;AACvB;AAAA,IACH;AAAA,EALH,SAMSyE,KAAP;AACAL,SAAK;AACLE,SAAKG;AAAAA,EACN,UAAS;AACR,QAAI;AACF,UAAI,CAACN,MAAMJ,GAAG,aAAa;AACzBA,WAAG;IACN,UAAS;AACR,UAAIK;AACF,cAAME;AAAAA,IACT;AAAA,EACF;AACD,SAAOJ;AACR;AACD,2BAA2BL,KAAKa,KAAK;AACnC,MAAIA,OAAO,QAAQA,MAAMb,IAAI1M;AAC3BuN,UAAMb,IAAI1M;AACZ,WAAS6I,IAAI,GAAG2E,OAAO,IAAI9C,MAAM6C,GAAV,GAAgB1E,IAAI0E,KAAK1E,KAAK;AACnD2E,SAAK3E,KAAK6D,IAAI7D;AAAAA,EACf;AACD,SAAO2E;AACR;AACD,qCAAqCC,GAAGC,QAAQ;AAC9C,MAAI,CAACD;AACH;AACF,MAAI,OAAOA,MAAM;AACf,WAAOE,kBAAkBF,GAAGC,MAAJ;AAC1B,MAAIvB,IAAI7E,OAAOK,UAAUiG,SAAStF,KAAKmF,CAA/B,EAAkCI,MAAM,GAAG,EAA3C;AACR,MAAI1B,MAAM,YAAYsB,EAAEK;AACtB3B,QAAIsB,EAAEK,YAAYC;AACpB,MAAI5B,MAAM,SAASA,MAAM;AACvB,WAAOzB,MAAMsD,KAAKP,CAAX;AACT,MAAItB,MAAM,eAAe,2CAA2C8B,KAAK9B,CAAhD;AACvB,WAAOwB,kBAAkBF,GAAGC,MAAJ;AAC3B;AACD,4BAA4B;AAC1B,QAAM,IAAI9E,UAAU,2IAAd;AACP;AACD,wBAAwB8D,KAAK7D,GAAG;AAC9B,SAAOqF,gBAAgBxB,GAAD,KAASyB,sBAAsBzB,KAAK7D,CAAN,KAAYuF,4BAA4B1B,KAAK7D,CAAN,KAAYwF,iBAAgB;AACxH;AACD,iBAAiBC,QAAQC,gBAAgB;AACvC,MAAIlE,OAAO/C,OAAO+C,KAAKiE,MAAZ;AACX,MAAIhH,OAAOI,uBAAuB;AAChC,QAAI8G,UAAUlH,OAAOI,sBAAsB4G,MAA7B;AACd,QAAIC,gBAAgB;AAClBC,gBAAUA,QAAQlQ,OAAO,SAASmQ,KAAK;AACrC,eAAOnH,OAAOoH,yBAAyBJ,QAAQG,GAAxC,EAA6CzG;AAAAA,MACrD,CAFS;AAAA,IAGX;AACDqC,SAAKgD,KAAKxC,MAAMR,MAAMmE,OAAtB;AAAA,EACD;AACD,SAAOnE;AACR;AACD,uBAAuBvF,QAAQ;AAC7B,WAAS+D,IAAI,GAAGA,IAAI2B,UAAUxK,QAAQ6I,KAAK;AACzC,QAAI5D,SAASuF,UAAU3B,MAAM,OAAO2B,UAAU3B,KAAK;AACnD,QAAIA,IAAI,GAAG;AACT8F,cAAQrH,OAAOrC,MAAD,GAAU,IAAjB,EAAuBkF,QAAQ,SAASpC,KAAK;AAClD6G,wBAAgB9J,QAAQiD,KAAK9C,OAAO8C,IAArB;AAAA,OADjB;AAAA,IAGD,WAAUT,OAAOG,2BAA2B;AAC3CH,aAAOE,iBAAiB1C,QAAQwC,OAAOG,0BAA0BxC,MAAjC,CAAhC;AAAA,IACD,OAAM;AACL0J,cAAQrH,OAAOrC,MAAD,CAAP,EAAiBkF,QAAQ,SAASpC,KAAK;AAC5CT,eAAOC,eAAezC,QAAQiD,KAAKT,OAAOoH,yBAAyBzJ,QAAQ8C,GAAxC,CAAnC;AAAA,OADF;AAAA,IAGD;AAAA,EACF;AACD,SAAOjD;AACR;AACD,wBAAwBsF,IAAI;AAC1B,MAAIlL,QAAQsL,UAAUxK,SAAS,KAAKwK,UAAU,OAAO,SAASA,UAAU,KAAK,CAAA;AAC7E,MAAIqE,gBAAgB3P,MAAMgM;AAC1B,MAAI4D,OAAOlS,WAAW+M,WAAD,KAAiB,CAAtC,GAA0CoF,kBAAkBD,KAAK5D,MAAM8D,uBAAuBF,KAAKG;AACnG,MAAI/D,OAAO2D,iBAAiBE,mBAAmBG,QAAO;AACtD,MAAIhE,QAAQ,CAACA,KAAKiE;AAChBjE,SAAKiE,mBAAmB,IAAIvF;AAC9B,MAAI,CAACsB,MAAM;AACTU,aAAS,wEAAD;AACR,QAAIwD,YAAY,oBAAoBC,GAAG;AACrC,aAAO3E,MAAMiC,QAAQ0C,CAAd,IAAmBA,EAAEA,EAAErP,SAAS,KAAKqP;AAAAA;AAE9C,QAAIC,cAAc,CAACF,WAAW,CAAZ,GAAgB,KAAhB;AAClBE,gBAAYC,IAAIH;AAChBE,gBAAYpE,OAAO;AACnBoE,gBAAYE,QAAQ;AACpB,WAAOF;AAAAA,EACR;AACD,MAAIpE,KAAKQ,QAAQ+D,SAASvE,KAAKQ,QAAQ+D,MAAMC,SAAS;AACpD9D,aAAS,qGAAD;AACV,MAAI+D,cAAcC,cAAcA,cAAcA,cAAc,CAAA,GAAIC,aAAL,GAAqB3E,KAAKQ,QAAQ+D,KAAhD,GAAwDvQ,KAAtE;AAC/B,MAAIuK,cAAckG,YAAYlG,aAAaqG,YAAYH,YAAYG;AACnE,MAAI7F,aAAaG,MAAM4E,wBAAwB9D,KAAKQ,WAAWR,KAAKQ,QAAQuD;AAC5EhF,eAAa,OAAOA,eAAe,WAAW,CAACA,UAAD,IAAeA,cAAc,CAAC,aAAD;AAC3E,MAAIiB,KAAKiE,iBAAiBY;AACxB7E,SAAKiE,iBAAiBY,kBAAkB9F,UAAxC;AACF,MAAIuF,QAAStE,MAAKG,iBAAiBH,KAAK8E,yBAAyB/F,WAAWgG,MAAM,SAAS9D,GAAG;AAC5F,WAAO+D,mBAAmB/D,GAAGjB,MAAMyE,WAAV;AAAA,EAC1B,CAFgE;AAGjE,kBAAgB;AACd,WAAOzE,KAAKiF,UAAU,MAAMR,YAAYS,WAAW,aAAanG,aAAaA,WAAW,IAAI6F,SAArF;AAAA,EACR;AACD,MAAIO,YAAY3S,SAAS4S,IAAD,GAAQC,aAAaC,eAAeH,WAAW,CAAZ,GAAgBd,IAAIgB,WAAW,IAAIE,OAAOF,WAAW;AAChH,MAAIG,YAAYzO,OAAO,IAAD;AACtB0O,YAAU,WAAW;AACnB,QAAIxH,WAAWwG,YAAYxG,UAAUC,gBAAgBuG,YAAYvG;AACjEsH,cAAU7N,UAAU;AACpB,QAAI,CAAC2M,SAAS,CAAC/F,aAAa;AAC1B2B,qBAAeF,MAAMjB,YAAY,WAAW;AAC1C,YAAIyG,UAAU7N;AACZ4N,eAAKH,IAAD;AAAA,MACP,CAHa;AAAA,IAIf;AACD,0BAAsB;AACpB,UAAII,UAAU7N;AACZ4N,aAAKH,IAAD;AAAA,IACP;AACD,QAAInH,YAAY+B;AACdA,WAAKO,GAAGtC,UAAUyH,UAAlB;AACF,QAAIxH,iBAAiB8B;AACnBA,WAAK2F,MAAMpF,GAAGrC,eAAewH,UAA7B;AACF,WAAO,WAAW;AAChBF,gBAAU7N,UAAU;AACpB,UAAIsG,YAAY+B;AACd/B,iBAAS2H,MAAM,GAAf,EAAoB3G,QAAQ,SAAStI,GAAG;AACtC,iBAAOqJ,KAAKK,IAAI1J,GAAG+O,UAAZ;AAAA,SADT;AAGF,UAAIxH,iBAAiB8B;AACnB9B,sBAAc0H,MAAM,GAApB,EAAyB3G,QAAQ,SAAStI,GAAG;AAC3C,iBAAOqJ,KAAK2F,MAAMtF,IAAI1J,GAAG+O,UAAlB;AAAA,SADT;AAAA;EAxBG,GA4BN,CAAC1F,MAAMjB,WAAW8G,KAAX,CAAP,CA5BM;AA6BT,MAAIC,YAAY/O,OAAO,IAAD;AACtB0O,YAAU,WAAW;AACnB,QAAID,UAAU7N,WAAW,CAACmO,UAAUnO,SAAS;AAC3C4N,WAAKH,IAAD;AAAA,IACL;AACDU,cAAUnO,UAAU;AAAA,EACrB,GAAE,CAACqI,IAAD,CALM;AAMT,MAAI+F,MAAM,CAAC1B,GAAGrE,MAAMsE,KAAV;AACVyB,MAAI1B,IAAIA;AACR0B,MAAI/F,OAAOA;AACX+F,MAAIzB,QAAQA;AACZ,MAAIA;AACF,WAAOyB;AACT,MAAI,CAACzB,SAAS,CAAC/F;AACb,WAAOwH;AACT,QAAM,IAAIC,QAAQ,SAASC,SAAS;AAClC/F,mBAAeF,MAAMjB,YAAY,WAAW;AAC1CkH;IACD,CAFa;AAAA,EAGf,CAJK;AAKP;AACD,wBAAwBC,IAAI;AAC1B,MAAIC,KAAKD,IAAI;AAAA,IACXE,IAAIpK;AAAAA,IACJqK;AAAAA,IACAzU;AAAAA,MACEuU,IAAInS,QAAQqJ,WAAU8I,IAAI,CAC5B,MACA,YACA,UAH4B,CAAL;AAKzB,QAAM;AAAA,IAAEnG;AAAAA,MAASsG,eAAc;AAC/B,QAAMC,mBAAmBxU,QAAQ,MAAMiO,KAAKwG,MAAMxG,KAAKwG,IAAIH,QAAT,IAAqB,OAAO,CAACA,QAAD,CAA9C;AAChC,QAAMI,SAAS1U,QAAQ,MAAM;AAC3B,QAAI,CAACiO,KAAKmB,UAAU;AAClB,aAAO;AAAA,IACR;AACD,WAAOnB,KAAKmB,SAASuF,cAAcC,wBAAwB3G,KAAKqG,QAAzD,MAAuErG,KAAKmB,SAASuF,cAAcC,wBAAwBN,QAApD;AAAA,EAJ1D,GAKnB,CAACrG,KAAKqG,UAAUA,QAAhB,CALmB;AAMtB,MAAII,QAAQ;AACV,QAAIzK,WAAW;AACb,aAAAhK,oBAAA,WAAA,iCAAsD6G,gBAAe,CAAA,GAAI7E,KAAL,IAApE;AAAA,QAAA;AAAA,MAAA,EAAA;AAAA,IACD;AACD,WAAAhC,oBAAA,QAAA,iCAAmD6G,gBAAe,CAAA,GAAI7E,KAAL,IAAjE;AAAA,MAAA;AAAA,IAAA,EAAA;AAAA,EACD;AACD,MAAIgI,WAAW;AACb,WAAAhK,oBAAsD8G,WAAAA,iCAAAA,eAAcD,gBAAe,CAAA,GAAI7E,KAAL,GAAa;AAAA,MAC7F4S,MAAMP;AAAAA,MACNG,KAAKD;AAAAA,IAFwF,CAA5B,IAAbzN;AAAAA,MAAtD;AAAA,IAAA,EAAA;AAAA,EAID;AACD,SAAA9G,oBAAmD8G,QAAAA,iCAAAA,eAAcD,gBAAe,CAAA,GAAI7E,KAAL,GAAa;AAAA,IAC1F4S,MAAMP;AAAAA,IACNG,KAAKD;AAAAA,EAFqF,CAA5B,IAAbzN;AAAAA,IAAnD;AAAA,EAAA,EAAA;AAID;AACD,4BAA4B+N,cAAcpG,WAAWqG,gBAAgB,CAArE,GAAyEC,iBAAiB,OAAO;AAC/F,MAAI,CAACF,gBAAgB,CAACpG,aAAaA,UAAU3L,WAAW,GAAG;AACzD,WAAO;AAAA,EACR;AACD,MAAI2L,UAAU3L,WAAW,GAAG;AAC1B,WAAO2L,UAAU;AAAA,EAClB;AACD,MAAIA,UAAUlD,QAAQsJ,YAAlB,MAAoC,IAAI;AAC1C,WAAOA;AAAAA,EACR;AACD,QAAMG,OAAOH,aAAatJ,QAAQ,GAArB,MAA8B,KAAKsJ,aAAalE,MAAM,GAAGkE,aAAatJ,QAAQ,GAArB,CAAtB,IAAmD;AACnG,MAAIyJ,QAAQvG,UAAUlD,QAAQyJ,IAAlB,MAA4B,IAAI;AAC1C,WAAOA;AAAAA,EACR;AACD,aAAWJ,QAAQE,eAAe;AAChC,QAAIrG,UAAUlD,QAAQqJ,IAAlB,MAA4B,IAAI;AAClC,aAAOA;AAAAA,IACR;AAAA,EACF;AACD,MAAI,CAACG,gBAAgB;AACnB,UAAME,cAAcxG,UAAU1N,IAAKiO,OAAMA,EAAEzD,QAAQ,GAAV,MAAmB,KAAKyD,EAAE2B,MAAM,GAAG3B,EAAEzD,QAAQ,GAAV,CAAX,IAA6B,IAA1E;AACpB,UAAM2J,aAAaD,YAAY1J,QAAQsJ,YAApB;AACnB,QAAIK,eAAe,IAAI;AACrB,aAAOzG,UAAUyG;AAAAA,IAClB;AACD,eAAWN,QAAQE,eAAe;AAChC,YAAMK,QAAQP,KAAKrJ,QAAQ,GAAb,MAAsB,KAAKqJ,KAAKjE,MAAM,GAAGiE,KAAKrJ,QAAQ,GAAb,CAAd,IAAmC;AAC5E,YAAM6J,cAAcD,QAAQ1G,UAAUlD,QAAQ4J,KAAlB,IAA2B;AACvD,UAAIC,gBAAgB,IAAI;AACtB,eAAO3G,UAAU2G;AAAAA,MAClB;AAAA,IACF;AAAA,EACF;AACD,MAAI3G,UAAUlD,QAAQ,MAAlB,MAA8B,IAAI;AACpC,WAAO;AAAA,EACR;AACD,MAAIkD,UAAUlD,QAAQ,OAAlB,MAA+B,IAAI;AACrC,WAAO;AAAA,EACR;AACD,SAAOkD,UAAU;AAClB;AACD,2BAA2B4G,WAAWR,cAAcrG,UAAU,CAAA,GAAI;AAChE,QAAM;AAAA,IAAEuG,iBAAiB;AAAA,IAAOO,cAAc;AAAA,IAAIC,YAAY;AAAA,IAAMC,oBAAoB,CAAlF;AAAA,IAAsFC;AAAAA,MAAYjH;AACxG,QAAMC,YAAYrE,OAAO+C,KAAKkI,aAAa,CAAzB,CAAA;AAClB,QAAMhB,WAAWoB,UAAUZ,eAAea,mBAAmBb,cAAcpG,WAAW+G,mBAAmBT,cAA7C;AAC5D,MAAI,CAACM,WAAW;AACd,WAAOC;AAAAA,EACR;AACD,MAAI,OAAOD,cAAc,UAAU;AACjC,WAAOA;AAAAA,EACR;AACD,QAAMM,gBAAgBtB,WAAWgB,UAAUhB,YAAY;AACvD,MAAIsB,eAAe;AACjB,QAAI,OAAOA,kBAAkB,UAAU;AACrC,aAAOA;AAAAA,IACR;AACD,WAAOA,cAAc9B,KAAK0B,SAAnB;AAAA,EACR;AACD,SAAO;AACR;AACD,4BAA4BK,cAAcC,OAAO,IAAI;AACnD,QAAM;AAAA,IAAE7H;AAAAA,MAASsG,eAAc;AAC/B,QAAMQ,gBAAgB9G,QAAQA,KAAKS,YAAYT,KAAKS,YAAY;AAChE,QAAMoG,eAAe7G,QAAQA,KAAKqG,WAAWrG,KAAKqG,WAAW;AAC7D,SAAOtU,QAAQ,MAAM;AACnB,UAAM0O,YAAYmH;AAClB,WAAOF,mBAAmBb,cAAcpG,WAAWqG,aAA1B;AAAA,EAFb,GAGX,CAACA,eAAeD,cAAc,GAAGgB,IAAjC,CAHW;AAIf;AACD,yBAAyBR,WAAWC,aAAa;AAC/C,QAAMjB,WAAWyB,mBAAmB,MAAM1L,OAAO+C,KAAKkI,aAAa,EAAzB,GAA8B,CAACA,SAAD,CAArC;AACnC,SAAO,CACLtV,QAAQ,MAAM;AACZ,WAAOgW,kBAAkBV,WAAWhB,UAAU;AAAA,MAC5CiB;AAAAA,MACAG,SAAS;AAAA,IAFmC,CAAtB;AAAA,KAIvB,CAACpB,UAAUiB,aAAaD,SAAxB,CALI,GAMPhB,QAPK;AASR;AACD,MAAM2B,eAAgBC,QAAO;AAC3B,MAAIlG,KAAKkG,IAAI;AAAA,IAAE7B,IAAIpK;AAAAA,IAAWsL;AAAAA,IAAaY;AAAAA,IAA+BtW;AAAAA,MAAamQ,IAAI/N,QAAQqJ,WAAU0E,IAAI,CAAC,MAAM,eAAe,iCAAiC,UAAvD,CAAL;AAC5G,QAAM,CAACoG,MAAM9B,YAAY+B,gBAAgBxW,UAAU0V,WAAX;AACxC,MAAIjB,UAAU;AACZ,WAAArU,oBAA2D8G,gBAAAA,iCAAAA,eAAcD,gBAAe,CAAA,GAAI7E,KAAL,GAAa;AAAA,MAClGoS,IAAIpK;AAAAA,MACJqK;AAAAA,MACAnM,OAAOgO,gCAAgC,SAASC;AAAAA,MAChDE,yBAAyBH,gCAAgC;AAAA,QACvDI,QAAQH;AAAAA,MAD4C,IAElD;AAAA,IAN8F,CAA5B,IAAbrP;AAAAA,MAA3D,UAOIoP,gCAAgC,SAASC;AAAAA,IAP7C,EAAA;AAAA,EAQD;AACD,MAAInM,WAAW;AACb,WAAAhK,oBAAA,WAAA,iCAAsD6G,gBAAe,CAAA,GAAI7E,KAAL,IAApE;AAAA,MAAA,UAAiFmU;AAAAA,IAAjF,EAAA;AAAA,EACD;AACD,SAAAnW,oBAAmD8G,QAAAA,iCAAAA,eAAcD,gBAAe,CAAA,GAAI7E,KAAL,GAAa;AAAA,IAC1FkG,OAAOgO,gCAAgC,SAASC;AAAAA,IAChDE,yBAAyBH,gCAAgC;AAAA,MACvDI,QAAQH;AAAAA,IAD4C,IAElD;AAAA,EAJsF,CAA5B,IAAbrP;AAAAA,IAAnD,UAKIoP,gCAAgC,SAASC;AAAAA,EAL7C,EAAA;AAMD;AC1b4B,sBAAA;AAAA,EAC3B1N;AAAAA,EACAC;AAAAA,EACA6N;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAjO;AAAAA,EACAkO;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAnX;AAAAA,GACc;AACd,QAAMT,SAASqI;AACf,QAAMwP,eAAezP,kBAAkBpI,QAAQ,CAAC,WAAD,CAAT;AAChC,QAAA,CAAC8X,eAAeC;AACtB,QAAMhX,QAAQiX;AACRC,QAAAA,SAASrX,QAAQ,MAAMsX,mBAAmBnX,KAAD,GAAS,CAACA,KAAD,CAAlC;AAChB,QAAA,CAACoX,UAAU/N,WAAWgO,qBAAqB;AAAA,IAC/CX,YAAYA,cAAc,CAAC,QAAD;AAAA,IAC1BH,gBAAgBA,iDAAgB1V,IAAI,CAAC;AAAA,MAAEC;AAAAA,UAASA;AAAAA,EAAhC,CAF8B;AAIhD,QAAMwW,SAASF,SAASxP,SAAS,WAAWwP,SAASE,SAASxY;AAE9DyU,YAAU,MAAM;AACd,QAAI+C,iBAAiB;AACnBA,sBAAgBjN,OAAD;AAAA,IAChB;AAAA,EAAA,GACA,CAAC+N,SAASG,WAAV,CAJM;AAMThE,YAAU,MAAM;AACd,QAAIgD,gBAAgB;AAClB,iBAAWe,WAAUf,gBAAgB;AAC/B,YAAA,OAAOe,QAAOE,YAAY,aAAa;AACzCN,iBAAOO,YAAY;AAAA,YAAE3W,IAAIwW,QAAOxW;AAAAA,aAAM,SAAS;AAAA,YAC7C0W,SAASF,QAAOE;AAAAA,UAAAA,CADlB;AAAA,QAGD;AAAA,MACF;AAAA,IACF;AAAA,EAAA,GACA,CAACjB,cAAD,CAVM;AAYThS,kBAAgB,MAAM;AACpB,QAAI8R,gBAAgB;AAClBA,qBAAeiB,MAAD;AAAA,IACf;AAAA,EAAA,GACA,CAACA,MAAD,CAJY;AAMf,QAAMjP,YAAYqP,aAAa;AAAA,IAAEC,UAAU;AAAA,IAAKC,WAAW;AAAA,EAAA,CAA7B;AAE9B,MAAI,CAAC3Y,QAAQ;AACJ,WAAA;AAAA,EACR;AAGD,QAAM4Y,qBAAqB5Y,OAAO4Y;AAElC,QAAMC,yBACJzP,aAAaA,UAAUT,SAAS,8BAC9B,gBAAA;AAAA,IAAc,QAAQ3I,OAAO4E;AAAAA,IAAQ,OAAO5E,OAAO0E;AAAAA,IAAO;AAAA,IAAM;AAAA,IAAhE,8BACE,eAAA;AAAA,MACE,KAAK0E,UAAUvH;AAAAA,MACf,QAAQ;AAAA,QAAEyH,GAAG;AAAA,QAAGC,GAAG;AAAA,QAAG7E,OAAO1E,OAAO0E;AAAAA,QAAOE,QAAQ5E,OAAO4E;AAAAA,MAAlD;AAAA,MACR,SACEwE,UAAU1E,SAAS0E,UAAUxE,SACzB;AAAA,QACEF,OAAO0E,UAAU1E;AAAAA,QACjBE,QAAQwE,UAAUxE;AAAAA,MAEpB/E,IAAAA;AAAAA,IAAAA,CATR;AAAA,EADF,CAAA,IAcE;AAEFsY,MAAAA,SAASxP,SAAS,WAAW;AAC/B,QAAIkQ,wBAAwB;AACnBA,aAAAA;AAAAA,IACR;AAED,UAAM,IAAI1O,MAAMgO,SAASW,UAAU,wBAA7B;AAAA,EACP;AAEKR,QAAAA,mCACH,UAAD;AAAA,IAAA,UACGR,CAAAA,cAAcjX,oBAAC,sBAAD;AAAA,MAAsB,MAAMiX;AAAAA,IAA/B,CAAA,IAAiD,MAC5DK,SAASG,eAAeH,SAASG,YAAYS,QAC1CZ,SAASG,YAAYS,MAAMnX,IAAKqH,CAAS,SAAA;AACvC,iCAAQ,sBAAD;AAAA,QAAoC;AAAA,MAAA,GAATA,KAAKpH,EAAhC;AAAA,IAAA,CADT,IAGA,MACHpB,QAPH;AAAA,EAAA,CADF;AAYA,8BACEkK,YAAA;AAAA,IAAA,UACE,CAAAjB,qBAAA,gBAAA;AAAA,MAEE,QAAQ1J,OAAO4E;AAAAA,MACf,OAAO5E,OAAO0E;AAAAA,MACd;AAAA,MACA;AAAA,OACImT,eANN;AAAA,MAAA,UAQGM,CAAAA,SAASxP,SAAS,WAAWgP,2CAAwB,kBAAD;AAAA,QAAkB,OAAOD;AAAAA,MAAzB,CAAA,IAA+C,MACnGS,SAASxP,SAAS,oBACfwP,SAAS1V,MAAMb,IAAI,CAACoX,MAAMlJ,MAAM;AAC9B,oCACEnF,YAAA;AAAA,UAAA,UAAA,CACE9J,oBAAC,YAAD;AAAA,YAGE,SACE+W,4BACI,CAACpS,MAAW;AACVA,gBAAEyT,gBAAF;AAC0BD,wCAAAA,KAAKE,cAAcF,MAAaxT,CAAjC;AAAA,YAE3B3F,IAAAA;AAAAA,YAEN,QAASmZ,KAAKvQ,OAAeI,WAAWhJ;AAAAA,YAX1C,8BAaG,cAAD;AAAA,cAAA,UAAemZ,KAAKhC;AAAAA,YAAAA,CAApB;AAAA,UAAA,GAZKlH,CADP,GAeCwI,WAhBH;AAAA,QAAA,CADF;AAAA,MAAA,CADF,IAsBA,MACHH,SAASxP,SAAS,gCACjBgC,YAAA;AAAA,QAAA,UAAA,CACGwN,SAASgB,OAAOvX,IAAI,CAACuH,OAAOiQ,QAC3BvY,oBAAC,aAAD;AAAA,UACE;AAAA,UAEA;AAAA,UACA,IAAIsI,MAAMtH;AAAAA,UACV,WAAWuX,QAAQ,IAAIhQ,YAAYvJ;AAAAA,UACnC,SACE+X,4BACKpS,CAAM,MAAA;AACLA,cAAEyT,gBAAF;AAC0B9P,sCAAAA,MAAM+P,cAAc/P,OAAO3D,CAA5B;AAAA,UAE3B3F,IAAAA;AAAAA,QAVDsJ,GAAAA,MAAMtH,EAFb,CADD,GAiBAyW,WAlBH;AAAA,MAAA,CADD,IAqBG,MACFH,UAASxP,SAAS,YAAYwP,SAASxP,SAAS,WAAWwP,SAASxP,SAAS,sBAC/E4O,2CACG,cAAD;AAAA,QAAc,SAAd;AAAA,QAAA,UAAuBA,qBAAqBY,QAAD;AAAA,MAAA,CAF5C,IAGG,MACHA,SAASxP,SAAS,iCAAc,OAAD;AAAA,QAAO,OAAOwP,SAASnN;AAAAA,MAAAA,CAAtD,IAAkE,MAClEmN,SAASxP,SAAS,8BACjBgC,YAAA;AAAA,QAAA,UACGwN,SAAS3N,MAAM7B,SAAS,+BACtB,OAAD;AAAA,UAAO,OAAOwP,SAAS3N;AAAAA,UAAvB,UACGqO,CAAAA,wBACArB,sBAAsBA,oBAAoBW,QAAD,IAAa,IAFzD;AAAA,QAAA,CADD,IAKGA,SAAS3N,MAAM7B,SAAS,+BACzB,OAAD;AAAA,UAAO,OAAOwP,SAAS3N;AAAAA,UAAvB,UACGqO,CAAAA,wBACArB,sBAAsBA,oBAAoBW,QAAD,IAAa,IAFzD;AAAA,QAAA,CAAA,IAIE;AAAA,MAXN,CAAA,IAaE,IA1EN;AAAA,IAAA,IACQ,GAAEnY,OAAO6B,MAAMsW,SAASxP,MADhC,GA6ECwP,SAASxP,SAAS,WAAWwP,SAAS3N,MAAM7B,SAAS,WAAWiQ,yCAC9D,eAAD;AAAA,MAAe,QAAQA,mBAAmB/W;AAAAA,MAA1C,8BACG,cAAD;AAAA,QAAc;AAAA,MAAA,CAAd;AAAA,IADF,CAAA,IAGE,IAlFN;AAAA,EAAA,CADF;AAsFD;ACxNM,MAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;ACXkC,2BAAA;AAAA,EAAE5B;AAAAA,EAAYQ;AAAAA,GAAyD;AACvG,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAER;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACFqC,+BAAA;AAAA,EAAEC;AAAAA,EAAgBO;AAAAA,GAA6D;AACnH,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAEP;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACFiC,2BAAA;AAAA,EAAEN;AAAAA,EAAYa;AAAAA,GAAyD;AACvG,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAEb;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACKM,2BACL,UAGI,IACJ,OAAc,CAAA,GAC4B;AACpC,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACN,QAAA,mBAAmB,KAAK,KAAK,IAAI;AAEvC,QAAM,iBAAiB,iBACrB,CAAC,MAAO,mBAAmB,EAAE,KAAK,SAAS,eAAe,oBAAoB,QAC9E,CAAC,gBAAgB,CACnB;AAEA,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,gBAAgB;AACZ,aAAA;AAAA,IACT;AAEA,QAAI,UAAU;AACZ,aAAO,SAAS,cAAc;AAAA,IAChC;AACO,WAAA;AAAA,EACN,GAAA,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B;AC7BqC,8BAAA,MAAc,UAAiC,IAA4B;AACxG,QAAA,iBAAiB,uBAAuB,OAAO;AAI9C,SAAA;AACT;ACE+B,wBAAA,UAAmB,WAAW,OAAO;AA8CpE;ACxDO,yBAAyB,WAAuC;AACrE,QAAM,MAAM;AACZ,QAAM,aAAa,IAAI;AACvB,QAAM,OAAO,YAAY,UAAU,IAAI,CAAC,SAAU,OAAO,SAAS,WAAW,OAAO,6BAAM,EAAG,IAAI,CAAA;AAC1F,SAAA,iBACL,CAAC,MAAiB;AAChB,UAAM,WAAW,aAAa,EAAE,KAAK,SAAS,SAAS,cAAc;AAC/D,UAAA,QAAQ,sCAAU,UAAS;AAE7B,QAAA,OAAO,cAAc,aAAa;AAC7B,aAAA;AAAA,IACT;AAEA,UAAM,WAAW,CAAA;AACjB,eAAW,QAAQ,sCAAU,UAAS,CAAA,GAAI;AACxC,UAAI,KAAK,QAAQ,KAAK,EAAE,MAAM,IAAI;AAChC,iBAAS,KAAK,IAAI;AAAA,MACpB;AAAA,IACF;AAEO,WAAA;AAAA,KAET,CAAC,KAAK,KAAK,GAAG,CAAC,CACjB;AACF;AClBE,uBAAA,SAIA,OAAc,IACwB;AAChC,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACN,QAAA,eAAe,KAAK,KAAK,IAAI;AAEnC,QAAM,aAAa,iBACjB,CAAC,MAAO,eAAe,EAAE,KAAK,SAAS,WAAW,gBAAgB,QAClE,CAAC,YAAY,CACf;AAEA,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IACT;AACA,QAAI,UAAU;AACZ,aAAO,SAAS,UAAU;AAAA,IAC5B;AACO,WAAA;AAAA,KACN,CAAC,YAAY,UAAU,GAAG,IAAI,CAAC;AACpC;AC5BO,0BACL,UACA,MACA,UACA,OACA,OAAc,IACd;AACA,QAAM,QAAQ;AACR,QAAA,SAAS,QAAQ,MAAM,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AAE/D,YAAU,MAAM;AACd,UAAM,kBAAkB;AACxB,QAAI,CAAC,iBAAiB;AACpB,aAAO,MAAM;AAAA,MAAA;AAAA,IAGf;AACA,WAAO,iBAAiB,iBAAiB,MAAM,UAAU,KAAK;AAC9D,WAAO,MAAM;AACJ,aAAA,oBAAoB,iBAAiB,MAAM,QAAQ;AAAA,IAAA;AAAA,EAC5D,GAEC,CAAC,QAAQ,UAAU,MAAM,GAAG,IAAI,CAAC;AACtC;AC1BmC,4BAAA;AAC3B,QAAA,aAAkB,WAAW,iBAAiB;AAEpD,SAAO,cAAc,WAAW,QAAS,WAAW,QAAgB;AACtE;ACLO,+BACL,SACA,SAQA;AACM,QAAA,EAAE,IAAI,UAAU,OAAO,UAAU,WAAW,WAAW,oBAC3D,SACA,OACF;AAEA,SAAO,EAAE,IAAI,UAAU,OAAO,UAAU,UAAU,WAAW;AAC/D;ACHgC,yBAAA,EAAE,aAAyC,IAIzE;AACA,QAAM,SAAS;AACf,QAAM,cAAc;AACpB,QAAM,QAAQ;AACd,QAAM,eAAe;AACrB,QAAM,CAAC,OAAO,WAAW,SAAmC,MAAS;AACrE,QAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;AAClD,QAAM,CAAC,QAAQ,aAAa,SAAmD,MAAM;AACrF,QAAM,CAAC,OAAO,YAAY,SAA4B,MAAS;AACzD,QAAA,MAAM,SAAS,OAAO,KAAK;AAC3B,QAAA,cAAc,QAAQ,MAAM;AAC5B,QAAA;AACE,UAAA,UAAU,YAAY,QAAQ;AAChC,cAAM,aAAa,YAAY;AAC/B,cAAM,WAAW,MAAM,IAA6B,WAAW,KAAK,EAAE;AAChE,cAAA,gBAAgB,iBAAiB,QAAe;AACtD,cAAM,oBAAoB,cAAc;AAExC,YAAI,CAAC,mBAAmB;AACf,iBAAA;AAAA,QACT;AAEA,eACE,aAAa,gBAAgB;AAAA,UAC3B,IAAI,kBAAkB,MAAO,kBAAkB;AAAA,UAC/C,OAAO,kBAAkB,SAAS,OAAO;AAAA,UACzC,QAAQ,kBAAkB,UAAU,OAAO;AAAA,QAAA,CAC5C,KAAK;AAAA,MAEV;AAAA,aACO;AACP,cAAQ,MAAM,CAAC;AAAA,IAEjB;AAEO,WAAA;AAAA,EAGN,GAAA,CAAC,KAAK,UAAU,MAAM,CAAC;AAE1B,QAAM,OAAO,WAAW,aAAa,QAAQ,QAAQ;AAErD,YAAU,MAAM;AACb,IAAY,aAAA;AACP,UAAA;AACE,YAAA,UAAU,YAAY,QAAQ;AAChC,gBAAM,aAAa,YAAY;AAC/B,gBAAM,WAAW,MAAM,IAA6B,WAAW,KAAK,EAAE;AAChE,gBAAA,gBAAgB,iBAAiB,QAAe;AACtD,gBAAM,oBAAoB,cAAc;AAExC,cAAI,CAAC,mBAAmB;AACtB;AAAA,UACF;AAEA,wBAAc,IAAI;AAClB,oBAAU,SAAS;AAEf,cAAA;AACI,kBAAA,gBACH,MAAM,aAAa,YAAY;AAAA,cAC9B,IAAI,kBAAkB,MAAM,kBAAkB;AAAA,cAC9C,OAAO,kBAAkB,SAAS,OAAO;AAAA,cACzC,QAAQ,kBAAkB,UAAU,OAAO;AAAA,YAAA,CAC5C,KAAM;AAET,oBAAQ,aAAa;AACrB,sBAAU,SAAS;AACnB,0BAAc,KAAK;AAAA,mBACZ;AACP,sBAAU,OAAO;AACjB,qBAAS,GAAY;AAAA,UACvB;AAAA,QACF;AAAA,eACO;AACP,kBAAU,OAAO;AACjB,iBAAS,GAAY;AAAA,MACvB;AAAA,IAAA;EACC,GAIF,CAAC,KAAK,QAAQ,CAAC;AAElB,SAAO,QAAQ,MAAM;AACZ,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,KAED,CAAC,MAAM,YAAY,QAAQ,KAAK,CAAC;AACtC;AC9G+B,wBAAA;AAC7B,QAAM,eAAe;AAEd,SAAA;AAAA,IACL,WAAW,aAAa;AAAA,IACxB,MAAM,aAAa,OACf;AAAA,MACE,IAAI,aAAa,KAAK,MAAM,aAAa,KAAK;AAAA,MAC9C,OAAO,aAAa,KAAK;AAAA,MACzB,QAAQ,aAAa,KAAK;AAAA,MAC1B,cAAc,aAAa;AAAA,MAC3B,WAAW;AAAA,IAAA,IAEb;AAAA,EAAA;AAER;ACZ8D,4BAAA;AAC5D,QAAM,WAAW;AACjB,SAAO,WACF,SAAS,QAAQ,KAChB,CAAC,YACC,QAAQ,YAAY,oBAAoB,QAAQ,YAAY,oCAChE,IACA;AACN;ACViC,0BAAA;AAC/B,QAAM,QAAQ;AACd,SAAO,QAAQ,MAAM,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AACzD;;"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../node_modules/react-error-boundary/dist/react-error-boundary.esm.js","../../../src/context/ResourceContext.tsx","../../../src/context/VaultContext.tsx","../../../src/hooks/useVault.ts","../../../src/hooks/useExternalResource.ts","../../../src/hooks/useExternalManifest.ts","../../../src/context/ManifestContext.tsx","../../../src/context/CanvasContext.tsx","../../../src/hooks/useVaultSelector.ts","../../../src/context/VisibleCanvasContext.tsx","../../../src/hooks/useManifest.ts","../../../src/context/RangeContext.tsx","../../../src/future-helpers/ranges.ts","../../../src/future-helpers/sequences.ts","../../../src/hooks/useRange.ts","../../../src/viewers/SimpleViewerContext.hooks.ts","../../../src/viewers/SimpleViewerContext.tsx","../../../src/context/ContextBridge.tsx","../../../node_modules/@iiif/vault/dist/actions/esm/index.mjs","../../../src/hooks/useDispatch.ts","../../../src/hooks/useVirtualAnnotationPage.ts","../../../src/hooks/useVirtualAnnotationPageContext.tsx","../../../src/canvas-panel/render/DefaultCanvasFallback.tsx","../../../src/context/ViewerPresetContext.tsx","../../../src/context/PortalContext.tsx","../../../node_modules/react-dom/client.js","../../../src/canvas-panel/Viewer.tsx","../../../node_modules/@iiif/vault-helpers/dist/events/esm/events.mjs","../../../src/hooks/useResourceEvents.ts","../../../node_modules/@iiif/vault-helpers/dist/styles/esm/styles.mjs","../../../src/hooks/useStyles.ts","../../../node_modules/@iiif/vault-helpers/dist/annotation-targets/esm/annotation-targets.mjs","../../../src/hooks/useAnnotation.ts","../../../src/hooks/useCanvas.ts","../../../src/canvas-panel/render/Annotation.tsx","../../../src/canvas-panel/render/AnnotationPage.tsx","../../../src/canvas-panel/render/Image.tsx","../../../src/features/rendering-strategy/rendering-utils.ts","../../../src/hooks/useEnabledAnnotationPageIds.ts","../../../src/utility/flatten-annotation-page-ids.ts","../../../src/hooks/useAnnotationPageManager.ts","../../../src/hooks/useResources.ts","../../../src/context/ImageServiceLoaderContext.tsx","../../../src/hooks/useLoadImageService.ts","../../../src/hooks/usePaintingAnnotations.ts","../../../src/hooks/usePaintables.ts","../../../src/features/rendering-strategy/image-strategy.ts","../../../src/features/rendering-strategy/3d-strategy.ts","../../../src/features/rendering-strategy/audio-strategy.ts","../../../src/features/rendering-strategy/video-strategy.ts","../../../src/features/rendering-strategy/textual-content-strategy.ts","../../../src/hooks/useRenderingStrategy.ts","../../../src/hooks/useVaultEffect.ts","../../../node_modules/@iiif/vault-helpers/dist/thumbnail/esm/thumbnail.mjs","../../../src/hooks/useThumbnail.ts","../../../src/hooks/useSimpleMediaPlayer.ts","../../../src/context/MediaContext.tsx","../../../src/canvas-panel/render/Audio.tsx","../../../src/canvas-panel/render/Video.tsx","../../../src/canvas-panel/render/Model.tsx","../../../src/canvas-panel/render/CanvasBackground.tsx","../../../node_modules/@iiif/vault-helpers/dist/react-i18next/esm/react-i18next.mjs","../../../src/canvas-panel/render/Canvas.tsx","../../../src/canvas-panel/index.ts","../../../src/context/AnnotationContext.tsx","../../../src/context/AnnotationPageContext.tsx","../../../src/context/CollectionContext.tsx","../../../src/hooks/useAnnotationPage.ts","../../../src/hooks/useAnnotationsAtTime.ts","../../../src/hooks/useCanvasClock.ts","../../../src/hooks/useCanvasSubset.ts","../../../src/hooks/useCollection.ts","../../../src/hooks/useEventListener.ts","../../../src/hooks/useExistingVault.ts","../../../src/hooks/useExternalCollection.ts","../../../src/hooks/useImageService.ts","../../../src/hooks/useImageTile.ts","../../../src/hooks/useSearchService.ts","../../../src/hooks/useStyleHelper.ts"],"sourcesContent":["export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport * as React from 'react';\n\nvar changedArray = function changedArray(a, b) {\n if (a === void 0) {\n a = [];\n }\n\n if (b === void 0) {\n b = [];\n }\n\n return a.length !== b.length || a.some(function (item, index) {\n return !Object.is(item, b[index]);\n });\n};\n\nvar initialState = {\n error: null\n};\n\nvar ErrorBoundary = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ErrorBoundary, _React$Component);\n\n function ErrorBoundary() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n _this.state = initialState;\n\n _this.resetErrorBoundary = function () {\n var _this$props;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this.props.onReset == null ? void 0 : (_this$props = _this.props).onReset.apply(_this$props, args);\n\n _this.reset();\n };\n\n return _this;\n }\n\n ErrorBoundary.getDerivedStateFromError = function getDerivedStateFromError(error) {\n return {\n error: error\n };\n };\n\n var _proto = ErrorBoundary.prototype;\n\n _proto.reset = function reset() {\n this.setState(initialState);\n };\n\n _proto.componentDidCatch = function componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n\n (_this$props$onError = (_this$props2 = this.props).onError) == null ? void 0 : _this$props$onError.call(_this$props2, error, info);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n var error = this.state.error;\n var resetKeys = this.props.resetKeys; // There's an edge case where if the thing that triggered the error\n // happens to *also* be in the resetKeys array, we'd end up resetting\n // the error boundary immediately. This would likely trigger a second\n // error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call\n // of cDU after the error is set\n\n if (error !== null && prevState.error !== null && changedArray(prevProps.resetKeys, resetKeys)) {\n var _this$props$onResetKe, _this$props3;\n\n (_this$props$onResetKe = (_this$props3 = this.props).onResetKeysChange) == null ? void 0 : _this$props$onResetKe.call(_this$props3, prevProps.resetKeys, resetKeys);\n this.reset();\n }\n };\n\n _proto.render = function render() {\n var error = this.state.error;\n var _this$props4 = this.props,\n fallbackRender = _this$props4.fallbackRender,\n FallbackComponent = _this$props4.FallbackComponent,\n fallback = _this$props4.fallback;\n\n if (error !== null) {\n var _props = {\n error: error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n\n if ( /*#__PURE__*/React.isValidElement(fallback)) {\n return fallback;\n } else if (typeof fallbackRender === 'function') {\n return fallbackRender(_props);\n } else if (FallbackComponent) {\n return /*#__PURE__*/React.createElement(FallbackComponent, _props);\n } else {\n throw new Error('react-error-boundary requires either a fallback, fallbackRender, or FallbackComponent prop');\n }\n }\n\n return this.props.children;\n };\n\n return ErrorBoundary;\n}(React.Component);\n\nfunction withErrorBoundary(Component, errorBoundaryProps) {\n var Wrapped = function Wrapped(props) {\n return /*#__PURE__*/React.createElement(ErrorBoundary, errorBoundaryProps, /*#__PURE__*/React.createElement(Component, props));\n }; // Format for display in DevTools\n\n\n var name = Component.displayName || Component.name || 'Unknown';\n Wrapped.displayName = \"withErrorBoundary(\" + name + \")\";\n return Wrapped;\n}\n\nfunction useErrorHandler(givenError) {\n var _React$useState = React.useState(null),\n error = _React$useState[0],\n setError = _React$useState[1];\n\n if (givenError != null) throw givenError;\n if (error != null) throw error;\n return setError;\n}\n/*\neslint\n @typescript-eslint/sort-type-union-intersection-members: \"off\",\n @typescript-eslint/no-throw-literal: \"off\",\n @typescript-eslint/prefer-nullish-coalescing: \"off\"\n*/\n\nexport { ErrorBoundary, useErrorHandler, withErrorBoundary };\n","import React, { ReactNode, useContext, useMemo } from 'react';\n\nconst defaultResourceContext = {\n collection: undefined,\n manifest: undefined,\n range: undefined,\n canvas: undefined,\n annotation: undefined,\n annotationPage: undefined,\n};\n\nexport type ResourceContextType = {\n collection?: string;\n manifest?: string;\n range?: string;\n canvas?: string;\n annotation?: string;\n annotationPage?: string;\n};\n\nexport const ResourceReactContext = React.createContext<ResourceContextType>(defaultResourceContext);\n\nexport const useResourceContext = () => {\n return useContext(ResourceReactContext);\n};\n\nexport function ResourceProvider({ value, children }: { value: ResourceContextType; children: ReactNode }) {\n const parentContext = useResourceContext();\n const newContext = useMemo(() => {\n return {\n ...parentContext,\n ...value,\n };\n }, [value, parentContext]);\n\n return <ResourceReactContext.Provider value={newContext}>{children}</ResourceReactContext.Provider>;\n}\n","import React, { ReactElement, ReactNode, useState } from 'react';\nimport { Vault, VaultOptions, globalVault } from '@iiif/vault';\nimport { ResourceContextType, ResourceProvider } from './ResourceContext';\n\nexport const ReactVaultContext = React.createContext<{\n vault: Vault | null;\n setVaultInstance: (vault: Vault) => void;\n}>({\n vault: null,\n setVaultInstance: (vault: Vault) => {\n // Do nothing.\n },\n});\n\nexport function VaultProvider({\n vault,\n vaultOptions,\n useGlobal,\n resources,\n children,\n}: {\n vault?: Vault;\n useGlobal?: boolean;\n vaultOptions?: VaultOptions;\n resources?: ResourceContextType;\n children: ReactNode;\n}) {\n const [vaultInstance, setVaultInstance] = useState<Vault>(() => {\n if (vault) {\n return vault;\n }\n if (useGlobal) {\n return globalVault(vaultOptions);\n }\n if (vaultOptions) {\n return new Vault(vaultOptions);\n }\n return new Vault();\n });\n\n return (\n <ReactVaultContext.Provider value={{ vault: vaultInstance, setVaultInstance }}>\n <ResourceProvider value={resources || {}}>{children}</ResourceProvider>\n </ReactVaultContext.Provider>\n );\n}\n","import { ReactVaultContext } from '../context/VaultContext';\nimport { useContext } from 'react';\nimport { Vault } from '@iiif/vault';\n\nexport const useVault = (): Vault => {\n const { vault } = useContext(ReactVaultContext);\n\n if (vault === null) {\n throw new Error('Vault not found. Ensure you have your provider set up correctly.');\n }\n\n return vault as Vault;\n};\n","import { useVault } from './useVault';\nimport { useEffect, useMemo, useState } from 'react';\n\nexport type ResourceRequestOptions = {\n noCache?: boolean;\n};\n\nexport function useExternalResource<T extends { id: string }>(\n idOrRef: string | { id: string; type: string },\n { noCache = false }: ResourceRequestOptions = {}\n): {\n id: string;\n requestId: string;\n isLoaded: boolean;\n error: any;\n cached: boolean;\n resource?: T;\n} {\n const id = typeof idOrRef === 'string' ? idOrRef : idOrRef.id;\n const vault = useVault();\n const [realId, setRealId] = useState(id);\n const [error, setError] = useState<Error | undefined>(undefined);\n const initialData = useMemo(() => {\n return vault.get<T>(id, { skipSelfReturn: true }) || undefined;\n }, [id, vault]);\n const [resource, setResource] = useState<T | undefined>(initialData);\n\n useEffect(() => {\n (async () => {\n try {\n const fetchedResource = initialData && !noCache ? initialData : await vault.load<T>(id);\n const _realId = fetchedResource ? fetchedResource.id || (fetchedResource as any)['@id'] : null;\n if (fetchedResource && realId !== _realId) {\n setRealId(_realId);\n }\n\n setResource(fetchedResource);\n } catch (err) {\n setError(err as Error);\n }\n })();\n }, [id, noCache]);\n\n return {\n isLoaded: !!resource,\n id: realId,\n requestId: id,\n error,\n resource,\n cached: !!(resource && resource === initialData),\n };\n}\n","import { ManifestNormalized } from '@iiif/presentation-3';\nimport { ResourceRequestOptions, useExternalResource } from './useExternalResource';\n\nexport function useExternalManifest(\n idOrRef: string | { id: string; type: string },\n options?: ResourceRequestOptions\n): {\n id: string;\n requestId: string;\n isLoaded: boolean;\n cached?: boolean;\n error: any;\n manifest?: ManifestNormalized;\n} {\n const { id, isLoaded, error, resource, requestId, cached } = useExternalResource<ManifestNormalized>(\n idOrRef,\n options\n );\n\n return { id, isLoaded, error, manifest: resource, requestId, cached };\n}\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function ManifestContext({ manifest, children }: { manifest: string; children: ReactNode }) {\n return <ResourceProvider value={{ manifest }}>{children}</ResourceProvider>;\n}\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function CanvasContext({ canvas, children }: { canvas: string; children: ReactNode }) {\n return <ResourceProvider value={{ canvas }}>{children}</ResourceProvider>;\n}\n","import { useVault } from './useVault';\nimport { IIIFStore, Vault } from '@iiif/vault';\nimport { useEffect, useState } from 'react';\n\nexport function useVaultSelector<T>(selector: (state: IIIFStore, vault: Vault) => T, deps: any[] = []) {\n const vault = useVault();\n const [selectedState, setSelectedState] = useState<T>(() => selector(vault.getState(), vault));\n\n useEffect(() => {\n return vault.subscribe(\n (s) => selector(s, vault),\n (s) => {\n setSelectedState(s);\n },\n false\n );\n }, deps);\n\n return selectedState as T;\n}\n","import { useContext } from 'react';\nimport React from 'react';\nimport { CanvasNormalized } from '@iiif/presentation-3';\nimport { useVaultSelector } from '../hooks/useVaultSelector';\n\nexport const VisibleCanvasReactContext = React.createContext<string[]>([]);\n\nexport function useVisibleCanvases(): CanvasNormalized[] {\n const ids = useContext(VisibleCanvasReactContext);\n\n return useVaultSelector<CanvasNormalized[]>(\n (state) => {\n return ids.map((id) => state.iiif.entities.Canvas[id]).filter(Boolean);\n },\n [ids]\n );\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { ManifestNormalized } from '@iiif/presentation-3';\nimport { useVault } from './useVault';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useManifest(options?: { id: string }): ManifestNormalized | undefined;\nexport function useManifest<T>(\n options?: { id: string; selector: (manifest: ManifestNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useManifest<T = ManifestNormalized>(\n options: {\n id?: string;\n selector?: (manifest: ManifestNormalized) => T;\n } = {},\n deps: any[] = []\n): ManifestNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const vault = useVault();\n const manifestId = id ? id : ctx.manifest;\n\n const manifest = useVaultSelector(\n (s) => (manifestId ? s.iiif.entities.Manifest[manifestId] : undefined),\n [manifestId]\n );\n\n return useMemo(() => {\n if (!manifest) {\n return undefined;\n }\n if (selector) {\n return selector(manifest);\n }\n return manifest;\n }, [manifest, selector, ...deps]);\n}\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function RangeContext({ range, children }: { range: string; children: ReactNode }) {\n return <ResourceProvider value={{ range }}>{children}</ResourceProvider>;\n}\n","import { Vault } from '@iiif/vault';\nimport { ManifestNormalized, RangeNormalized, Reference } from '@iiif/presentation-3';\n\nexport function findFirstCanvasFromRange(vault: Vault, range: RangeNormalized): null | Reference<'Canvas'> {\n for (const inner of range.items) {\n if (inner.type === 'Canvas') {\n return inner as Reference<'Canvas'>;\n }\n if (inner.type === 'Range') {\n const found = findFirstCanvasFromRange(vault, vault.get(inner));\n if (found) {\n return found;\n }\n }\n }\n return null;\n}\n\nexport function findAllCanvasesInRange(vault: Vault, range: RangeNormalized): Array<Reference<'Canvas'>> {\n const found: Reference<'Canvas'>[] = [];\n for (const inner of range.items) {\n if (inner.type === 'Canvas') {\n if (inner.id.indexOf('#') !== -1) {\n found.push({ id: inner.id.split('#')[0], type: 'Canvas' });\n } else {\n found.push(inner as Reference<'Canvas'>);\n }\n }\n if (inner.type === 'Range') {\n found.push(...findAllCanvasesInRange(vault, vault.get(inner)));\n }\n if ((inner as any).type === 'SpecificResource') {\n const sourceId = typeof (inner as any).source === 'string' ? (inner as any).source : (inner as any).source.id;\n found.push({ id: sourceId, type: 'Canvas' });\n }\n }\n return found;\n}\n\nexport function findManifestSelectedRange(\n vault: Vault,\n manifest: ManifestNormalized,\n canvasId: string\n): null | RangeNormalized {\n for (const range of manifest.structures) {\n const found = findSelectedRange(vault, vault.get(range), canvasId);\n if (found) {\n return found;\n }\n }\n\n return null;\n}\n\nexport function findSelectedRange(vault: Vault, range: RangeNormalized, canvasId: string): null | RangeNormalized {\n for (const inner of range.items) {\n const parsedId = inner.id?.split('#')[0];\n if ((inner as any).type === 'SpecificResource' && (inner as any).source === canvasId) {\n return range;\n }\n if (inner.type === 'Canvas' && canvasId === parsedId) {\n return range;\n }\n if (inner.type === 'Range') {\n const found = findSelectedRange(vault, vault.get(inner), canvasId);\n if (found) {\n return found;\n }\n }\n }\n return null;\n}\n","import { CanvasNormalized, ManifestNormalized, RangeNormalized, Reference } from '@iiif/presentation-3';\nimport { Vault } from '@iiif/vault';\nimport { findAllCanvasesInRange } from './ranges';\n\n/**\n * Get visible canvases from canvas ID\n *\n * This function returns a list of canvas references that should all be displayed\n * when the passed canvasId is visible. This should work for individual items,\n * 2-up paged view and continuous (scrolls).\n *\n * The options are listed below (from IIIF docs)\n *\n * - `unordered` - Valid on Collections, Manifests and Ranges. The Canvases included in resources that have this behavior\n * have no inherent order, and user interfaces should avoid implying an order to the user. Disjoint with individuals,\n * continuous, and paged.\n *\n * - `individuals` - Valid on Collections, Manifests, and Ranges. For Collections that have this behavior, each of the\n * included Manifests are distinct objects in the given order. For Manifests and Ranges, the included Canvases are\n * distinct views, and should not be presented in a page-turning interface. This is the default layout behavior if\n * not specified. Disjoint with unordered, continuous, and paged.\n *\n * - `continuous` Valid on Collections, Manifests and Ranges, which include Canvases that have at least height and\n * width dimensions. Canvases included in resources that have this behavior are partial views and an appropriate\n * rendering might display all of the Canvases virtually stitched together, such as a long scroll split into\n * sections. This behavior has no implication for audio resources. The viewingDirection of the Manifest will\n * determine the appropriate arrangement of the Canvases. Disjoint with unordered, individuals and paged.\n *\n * - `paged` Valid on Collections, Manifests and Ranges, which include Canvases that have at least height and width\n * dimensions. Canvases included in resources that have this behavior represent views that should be presented in\n * a page-turning interface if one is available. The first canvas is a single view (the first recto) and thus the\n * second canvas likely represents the back of the object in the first canvas. If this is not the case, see the\n * behavior value non-paged. Disjoint with unordered, individuals, continuous, facing-pages and non-paged.\n *\n */\nexport function getVisibleCanvasesFromCanvasId(\n vault: Vault,\n manifestOrRange: ManifestNormalized | RangeNormalized,\n canvasId: string | null,\n preventPaged = false\n): Reference<'Canvas'>[] {\n const behavior = manifestOrRange.behavior;\n const fullCanvas = canvasId ? vault.get<CanvasNormalized>(canvasId) : null;\n if (!fullCanvas) {\n return [];\n }\n\n const canvasBehavior = fullCanvas.behavior;\n const isPaged = preventPaged ? false : behavior.includes('paged');\n const isContinuous = isPaged ? false : behavior.includes('continuous');\n const isIndividuals = isPaged || isContinuous ? false : behavior.includes('individuals');\n const isCanvasFacingPages = canvasBehavior.includes('facing-pages');\n const isCanvasNonPaged = canvasBehavior.includes('non-paged');\n\n // Individuals should just be the default.\n if (isCanvasFacingPages || isCanvasNonPaged || isIndividuals || preventPaged) {\n return [{ id: fullCanvas.id, type: 'Canvas' }];\n }\n\n const [manifestItems, ordering] = getManifestSequence(vault, manifestOrRange);\n\n // Continuous should just return all items together.\n if (isContinuous) {\n return manifestItems;\n }\n\n const canvasIndex = manifestItems.findIndex((r) => r.id === canvasId);\n if (canvasIndex === -1) {\n return [];\n }\n\n for (const indexes of ordering) {\n if (indexes.includes(canvasIndex)) {\n return indexes.map((index) => manifestItems[index]);\n }\n }\n\n return [{ id: fullCanvas.id, type: 'Canvas' }];\n}\n\nexport function getManifestSequence(\n vault: Vault,\n manifestOrRange: ManifestNormalized | RangeNormalized,\n { disablePaging }: { disablePaging?: boolean } = {}\n): [Reference<'Canvas'>[], number[][]] {\n const behavior = manifestOrRange.behavior;\n const isPaged = behavior.includes('paged');\n const isContinuous = isPaged ? false : behavior.includes('continuous');\n const isIndividuals = isPaged || isContinuous ? false : behavior.includes('individuals');\n const manifestItems =\n manifestOrRange.type === 'Manifest' ? manifestOrRange.items : findAllCanvasesInRange(vault, manifestOrRange);\n\n // Continuous should just return all items together.\n if (isContinuous) {\n return [manifestItems, [manifestItems.map((_, index) => index)]];\n }\n\n // Individuals should just be the default.\n if (isIndividuals || !isPaged || disablePaging) {\n return [manifestItems, manifestItems.map((_, index) => [index])];\n }\n\n // This is the tricky case.\n const ordering: number[][] = [];\n let currentOrdering: number[] = [];\n\n const flush = () => {\n if (currentOrdering.length) {\n ordering.push([...currentOrdering]);\n currentOrdering = [];\n }\n };\n\n let offset = 0;\n for (let i = 0; i < manifestItems.length; i++) {\n const canvas = vault.get<CanvasNormalized>(manifestItems[i]);\n if (canvas.behavior.includes('non-paged')) {\n if (i === offset) {\n offset++;\n }\n // Skip over these completely.\n continue;\n }\n\n if (i === offset || canvas.behavior.includes('facing-pages')) {\n // Flush and push a single.\n flush();\n ordering.push([i]);\n continue;\n }\n\n currentOrdering.push(i);\n\n if (currentOrdering.length > 1) {\n flush();\n }\n }\n\n if (currentOrdering.length) {\n flush();\n }\n\n return [manifestItems, ordering];\n}\n","// This is valid under a range context.\nimport { useResourceContext } from '../context/ResourceContext';\nimport { RangeNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useRange(options?: { id: string }): RangeNormalized | undefined;\nexport function useRange<T>(\n options?: { id: string; selector: (range: RangeNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useRange<T = RangeNormalized>(\n options: {\n id?: string;\n selector?: (range: RangeNormalized) => T;\n } = {},\n deps: any[] = []\n): RangeNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const rangeId = id ? id : ctx.range;\n\n const range = useVaultSelector((s) => (rangeId ? s.iiif.entities.Range[rangeId] : undefined), [rangeId]);\n\n return useMemo(() => {\n if (!range) {\n return undefined;\n }\n if (selector) {\n return selector(range);\n }\n return range;\n }, [range, selector, ...deps]);\n}\n","import { getManifestSequence } from '../future-helpers/sequences';\nimport { useManifest } from '../hooks/useManifest';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useRange } from '../hooks/useRange';\nimport { useVault } from '../hooks/useVault';\n\nexport function useCanvasSequence({ startCanvas, disablePaging }: { startCanvas?: string; disablePaging?: boolean }) {\n const vault = useVault();\n const manifest = useManifest();\n const range = useRange();\n const [cursor, setCursor] = useState<number>(undefined as any);\n const rangeOrManifest = range ? range : manifest;\n\n if (!rangeOrManifest) {\n throw new Error('Nothing selected');\n }\n\n const [items, initialSequence] = useMemo(\n () => getManifestSequence(vault, rangeOrManifest, { disablePaging }),\n [vault, rangeOrManifest]\n );\n\n const setCanvasIndex = useCallback(\n (index: number) => {\n const foundSequence = initialSequence.findIndex((i) => i.includes(index));\n setCursor(foundSequence === -1 ? 0 : foundSequence);\n },\n [items, initialSequence]\n );\n\n const setCanvasId = useCallback(\n (id: string) => {\n const foundIndex = items.findIndex((i) => i.id === id);\n if (foundIndex !== -1) {\n setCanvasIndex(foundIndex);\n } else {\n setCursor(0);\n }\n },\n [items, initialSequence]\n );\n\n const next = useCallback(() => {\n setCursor((i) => {\n if (i >= initialSequence.length) {\n return i;\n }\n return i + 1;\n });\n }, [initialSequence]);\n\n const previous = useCallback(() => {\n setCursor((i) => {\n if (i <= 0) {\n return 0;\n }\n return i - 1;\n });\n }, [initialSequence]);\n\n // Need to set an initial cursor from the canvasId (if it's valid)\n if (typeof cursor === 'undefined') {\n if (startCanvas) {\n setCanvasId(startCanvas);\n } else {\n setCursor(0);\n }\n }\n\n return {\n visibleItems: initialSequence[cursor]?.map((idx) => items[idx].id) || [],\n cursor,\n items,\n sequence: initialSequence,\n setSequenceIndex: setCursor,\n setCanvasIndex,\n setCanvasId,\n next,\n previous,\n };\n}\n","import React, { ReactNode, useCallback, useContext, useEffect } from 'react';\n/**\n * Simple viewer context\n * *****************************************************************************\n *\n * This will be the context to use to get a basic IIIF viewer up and running.\n * It will not focus on having compatibility with the full range of IIIF\n * resources, instead offering a viewer for a Manifest, cycling through canvases\n * while ignoring the paged/facing-pages/continuous behaviors.\n *\n * There will not be support for canvas-on-canvas annotations. Annotations will\n * be filtered, giving details of the canvas space and images to be annotated\n * onto that space. The demo implementation of this viewer will use\n * OpenSeadragon to display.\n *\n * Navigation functions will include the basics:\n * - nextCanvas()\n * - previousCanvas()\n * - goToCanvas(id)\n * - goToCanvasIndex(idx)\n * - goToFirstCanvas()\n * - goToLastCanvas()\n *\n * It will take in only a Manifest ID and will load that Manifest when the\n * context loads.\n *\n * There will be no support for external or embedded annotation lists, although\n * you can set up a nested context to support this.\n *\n * There will be no support for ranges in this view.\n *\n * To use this component, first you will need the provider:\n * import { SimpleViewerProvider } from '...';\n *\n * <SimpleViewerProvider id=\"http://example.org/manifest.json\">\n * <CustomComponent />\n * </SimpleViewerProvider>\n *\n * This is in addition to the core Vault context further up the tree.\n *\n * In components that you want to use parts of the state you can grab the hooks\n * from this file.\n *\n * import { useSimpleViewer } from '...';\n *\n * And use them in your components to get the actions.\n *\n * function NextButton() {\n * const { nextCanvas } = useSimpleViewer();\n *\n * return <button onClick={nextCanvas}>Next</button>;\n * }\n *\n * Since this is a single-context, there is only ever one manifest, canvas and\n * annotation list. You can access the current resource using the normal hooks.\n *\n * function CanvasMetadata() {\n * const metadata = useCanvas(metadataSelector);\n *\n * return <div> ... </div>\n * }\n *\n * So long as this is inside the provider, it will have the correct context.\n */\nimport { createContext, FC, useMemo, useState } from 'react';\nimport { useExternalManifest } from '../hooks/useExternalManifest';\nimport { ManifestContext } from '../context/ManifestContext';\nimport { CanvasContext } from '../context/CanvasContext';\nimport { VisibleCanvasReactContext } from '../context/VisibleCanvasContext';\nimport { useManifest } from '../hooks/useManifest';\nimport { SimpleViewerContext, SimpleViewerProps } from './SimpleViewerContext.types';\nimport { RangeContext } from '../context/RangeContext';\nimport { useCanvasSequence } from './SimpleViewerContext.hooks';\n\nconst noop = () => {\n //\n};\n\nexport const SimpleViewerReactContext = createContext<SimpleViewerContext>({\n setCurrentCanvasId: noop,\n setCurrentCanvasIndex: noop,\n nextCanvas: noop,\n previousCanvas: noop,\n items: [],\n sequence: [],\n setSequenceIndex: noop,\n currentSequenceIndex: 0,\n});\n\nexport function InnerViewerProvider(props: SimpleViewerProps) {\n const manifest = useManifest();\n const { cursor, visibleItems, next, sequence, items, setCanvasIndex, setCanvasId, previous, setSequenceIndex } =\n useCanvasSequence({\n startCanvas: props.startCanvas,\n disablePaging: props.pagingEnabled === false,\n });\n\n const ctx = useMemo(\n () =>\n ({\n sequence,\n items,\n // Extra functions.\n setCurrentCanvasId: setCanvasId,\n nextCanvas: next,\n previousCanvas: previous,\n totalCanvases: items.length,\n setCurrentCanvasIndex: setCanvasIndex,\n setSequenceIndex: setSequenceIndex,\n currentSequenceIndex: cursor,\n } as SimpleViewerContext),\n [sequence, items, setCanvasId, next, previous, items, setCanvasIndex, setSequenceIndex, cursor]\n );\n\n if (!manifest) {\n console.warn('The manifest passed to the provider is not a valid IIIF manifest.');\n return <div>Sorry, something went wrong.</div>;\n }\n\n return (\n <SimpleViewerReactContext.Provider value={ctx}>\n <VisibleCanvasReactContext.Provider value={visibleItems}>\n <CanvasContext canvas={visibleItems[0]}>{props.children}</CanvasContext>\n </VisibleCanvasReactContext.Provider>\n </SimpleViewerReactContext.Provider>\n );\n}\n\nexport function SimpleViewerProvider(props: SimpleViewerProps) {\n const manifest = useExternalManifest(props.manifest);\n\n if (!manifest) {\n console.warn('The manifest passed to the provider is not a valid IIIF manifest.');\n return <div>Sorry, something went wrong.</div>;\n }\n\n if (!manifest.isLoaded) {\n return <div>Loading...</div>;\n }\n\n const inner = <InnerViewerProvider {...props}>{props.children}</InnerViewerProvider>;\n\n return (\n <ManifestContext manifest={manifest.id}>\n {props.rangeId ? <RangeContext range={props.rangeId}>{inner}</RangeContext> : inner}\n </ManifestContext>\n );\n}\n\nexport function useSimpleViewer() {\n return useContext(SimpleViewerReactContext);\n}\n","import React, { ReactNode, useContext } from 'react';\nimport { ResourceReactContext } from './ResourceContext';\nimport { ReactVaultContext, VaultProvider } from './VaultContext';\nimport { SimpleViewerReactContext } from '../viewers/SimpleViewerContext';\nimport { VisibleCanvasReactContext } from './VisibleCanvasContext';\n\nexport function useContextBridge() {\n return {\n VaultContext: useContext(ReactVaultContext),\n ResourceContext: useContext(ResourceReactContext),\n SimpleViewerReactContext: useContext(SimpleViewerReactContext),\n VisibleCanvasReactContext: useContext(VisibleCanvasReactContext),\n };\n}\n\nexport function ContextBridge(props: { bridge: ReturnType<typeof useContextBridge>; children: ReactNode }) {\n return (\n <VaultProvider vault={props.bridge.VaultContext.vault || undefined} resources={props.bridge.ResourceContext}>\n <VisibleCanvasReactContext.Provider value={props.bridge.VisibleCanvasReactContext}>\n <SimpleViewerReactContext.Provider value={props.bridge.SimpleViewerReactContext}>\n {props.children}\n </SimpleViewerReactContext.Provider>\n </VisibleCanvasReactContext.Provider>\n </VaultProvider>\n );\n}\n","import { createAction } from 'typesafe-actions';\n\nconst IMPORT_ENTITIES = \"@iiif/IMPORT_ENTITIES\";\nconst MODIFY_ENTITY_FIELD = \"@iiif/MODIFY_ENTITY_FIELD\";\nconst REORDER_ENTITY_FIELD = \"@iiif/REORDER_ENTITY_FIELD\";\nconst ADD_REFERENCE = \"@iiif/ADD_REFERENCE\";\nconst REMOVE_REFERENCE = \"@iiif/REMOVE_REFERENCE\";\nconst importEntities = createAction(IMPORT_ENTITIES)();\nconst modifyEntityField = createAction(MODIFY_ENTITY_FIELD)();\nconst reorderEntityField = createAction(REORDER_ENTITY_FIELD)();\nconst addReference = createAction(ADD_REFERENCE)();\nconst removeReference = createAction(REMOVE_REFERENCE)();\nconst entityActions = { importEntities, modifyEntityField, reorderEntityField, addReference, removeReference };\n\nconst ADD_MAPPING = \"@iiif/ADD_MAPPING\";\nconst ADD_MAPPINGS = \"@iiif/ADD_MAPPINGS\";\nconst addMapping = createAction(ADD_MAPPING)();\nconst addMappings = createAction(ADD_MAPPINGS)();\nconst mappingActions = { addMapping, addMappings };\n\nconst SET_META_VALUE = \"@iiif/SET_META_VALUE\";\nconst SET_META_VALUE_DYNAMIC = \"@iiif/SET_META_VALUE_DYNAMIC\";\nconst UNSET_META_VALUE = \"@iiif/UNSET_META_VALUE\";\nconst setMetaValue = createAction(SET_META_VALUE)();\nconst setMetaValueDynamic = createAction(SET_META_VALUE_DYNAMIC)();\nconst unsetMetaValue = createAction(UNSET_META_VALUE)();\nconst metaActions = {\n setMetaValue,\n setMetaValueDynamic,\n unsetMetaValue\n};\n\nconst RESOURCE_ERROR = \"RESOURCE_ERROR\";\nconst RESOURCE_LOADING = \"RESOURCE_LOADING\";\nconst RESOURCE_READY = \"RESOURCE_READY\";\nconst REQUEST_RESOURCE = \"@iiif/REQUEST_RESOURCE\";\nconst REQUEST_ERROR = \"@iiif/REQUEST_ERROR\";\nconst REQUEST_MISMATCH = \"@iiif/REQUEST_MISMATCH\";\nconst REQUEST_COMPLETE = \"@iiif/REQUEST_COMPLETE\";\nconst REQUEST_OFFLINE_RESOURCE = \"@iiif/REQUEST_OFFLINE_RESOURCE\";\nconst requestResource = createAction(REQUEST_RESOURCE)();\nconst requestError = createAction(REQUEST_ERROR)();\nconst requestMismatch = createAction(REQUEST_MISMATCH)();\nconst requestComplete = createAction(REQUEST_COMPLETE)();\nconst requestOfflineResource = createAction(REQUEST_OFFLINE_RESOURCE)();\nconst requestActions = {\n requestResource,\n requestError,\n requestMismatch,\n requestComplete,\n requestOfflineResource\n};\n\nconst BATCH_ACTIONS = \"@iiif/BATCH\";\nconst BATCH_IMPORT = \"@iiif/BATCH_IMPORT\";\nconst batchActions = createAction(BATCH_ACTIONS)();\nconst batchImport = createAction(BATCH_IMPORT)();\n\nexport { ADD_MAPPING, ADD_MAPPINGS, ADD_REFERENCE, BATCH_ACTIONS, BATCH_IMPORT, IMPORT_ENTITIES, MODIFY_ENTITY_FIELD, REMOVE_REFERENCE, REORDER_ENTITY_FIELD, REQUEST_COMPLETE, REQUEST_ERROR, REQUEST_MISMATCH, REQUEST_OFFLINE_RESOURCE, REQUEST_RESOURCE, RESOURCE_ERROR, RESOURCE_LOADING, RESOURCE_READY, SET_META_VALUE, SET_META_VALUE_DYNAMIC, UNSET_META_VALUE, addMapping, addMappings, addReference, batchActions, batchImport, entityActions, importEntities, mappingActions, metaActions, modifyEntityField, removeReference, reorderEntityField, requestActions, requestComplete, requestError, requestMismatch, requestOfflineResource, requestResource };\n","import { useVault } from './useVault';\nimport { useMemo } from 'react';\nimport { ReduxStore } from '@iiif/vault';\n\nexport function useDispatch(): ReduxStore['dispatch'] {\n const vault = useVault();\n const store = vault.getStore();\n\n return useMemo(() => {\n return (action: any) => store.dispatch(action);\n }, [store]);\n}\n","import { useCallback, useLayoutEffect, useMemo, useRef } from 'react';\nimport { Annotation, AnnotationNormalized, AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { useVault } from './useVault';\nimport { useVaultSelector } from './useVaultSelector';\nimport { entityActions } from '@iiif/vault/actions';\nimport { useDispatch } from './useDispatch';\nimport { Vault } from '@iiif/vault';\n\nexport interface VaultActivatedAnnotation {\n __vault?: Vault;\n bindToVault(vault: Vault): void;\n source: string | { id: string };\n}\n\nfunction isVaultActivated(obj: any): obj is VaultActivatedAnnotation {\n return typeof obj !== 'string' && obj && obj.bindToVault;\n}\n\nexport function useVirtualAnnotationPage() {\n const vault = useVault();\n const sources = useRef<Record<any, any>>([]);\n const dispatch = useDispatch();\n const virtualId = useMemo(() => {\n return `vault://annotation-page/${new Date().getTime()}/${Math.round(Math.random() * 1000000000).toString(16)}`;\n }, []);\n\n useLayoutEffect(() => {\n const page: AnnotationPageNormalized = {\n id: virtualId,\n type: 'AnnotationPage',\n behavior: [],\n motivation: null,\n label: null,\n thumbnail: [],\n summary: null,\n requiredStatement: null,\n metadata: [],\n rights: null,\n provider: [],\n items: [],\n seeAlso: [],\n homepage: [],\n logo: [],\n rendering: [],\n service: [],\n };\n\n dispatch(\n entityActions.importEntities({\n entities: {\n AnnotationPage: {\n [page.id]: page,\n },\n },\n })\n );\n }, [virtualId]);\n\n const fullPage: AnnotationPageNormalized | null = useVaultSelector(\n (state) => (virtualId ? state.iiif.entities.AnnotationPage[virtualId] : null),\n [virtualId]\n );\n\n const addAnnotation = useCallback(\n (id: string | Annotation | VaultActivatedAnnotation | AnnotationNormalized, atIndex?: number) => {\n if (virtualId) {\n if (isVaultActivated(id)) {\n const display = id;\n if (!display.__vault) {\n // First bind to vault.\n display.bindToVault(vault);\n }\n id = typeof display.source === 'string' ? display.source : display.source.id;\n sources.current[id] = display;\n } else if (typeof id !== 'string') {\n id = id.id;\n }\n\n const full: AnnotationPageNormalized = vault.get({ id: virtualId, type: 'AnnotationPage' });\n const annotation: AnnotationNormalized = vault.get({ id, type: 'Annotation' });\n if (full && annotation) {\n if (!full.items.find((r: any) => r.id === annotation.id)) {\n dispatch(\n entityActions.addReference({\n id: virtualId,\n type: 'AnnotationPage',\n key: 'items',\n reference: {\n id,\n type: 'Annotation',\n },\n index: atIndex,\n })\n );\n }\n }\n }\n },\n [virtualId]\n );\n const removeAnnotation = useCallback(\n (id: string | Annotation | VaultActivatedAnnotation | AnnotationNormalized) => {\n if (virtualId) {\n if (isVaultActivated(id)) {\n id = typeof id.source === 'string' ? id.source : id.source.id;\n } else if (typeof id !== 'string') {\n id = id.id;\n }\n\n if (sources.current[id]) {\n sources.current[id].beforeRemove();\n }\n\n const full: AnnotationPageNormalized = vault.get({ id: virtualId, type: 'AnnotationPage' });\n if (full) {\n dispatch(\n entityActions.removeReference({\n id: virtualId,\n type: 'AnnotationPage',\n key: 'items',\n reference: {\n id,\n type: 'Annotation',\n },\n })\n );\n }\n }\n },\n [virtualId]\n );\n\n return [\n fullPage,\n {\n addAnnotation,\n removeAnnotation,\n },\n ] as const;\n}\n","import { Annotation, AnnotationNormalized, AnnotationPageNormalized } from '@iiif/presentation-3';\nimport React, { createContext, useContext, useMemo } from 'react';\nimport { useVirtualAnnotationPage, VaultActivatedAnnotation } from './useVirtualAnnotationPage';\n\nconst VirtualAnnotationPageContext = createContext<{\n fullPage: AnnotationPageNormalized | null;\n addAnnotation: (\n id: string | Annotation | VaultActivatedAnnotation | AnnotationNormalized,\n atIndex?: number | undefined\n ) => void;\n removeAnnotation: (id: string | Annotation | VaultActivatedAnnotation | AnnotationNormalized) => void;\n} | null>(null);\n\nexport function useVirtualAnnotationPageContext() {\n const ctx = useContext(VirtualAnnotationPageContext);\n\n return [\n ctx!.fullPage,\n {\n addAnnotation: ctx!.addAnnotation,\n removeAnnotation: ctx!.removeAnnotation,\n },\n ] as const;\n}\n\nexport function VirtualAnnotationProvider({ children }: { children: any }) {\n const [fullPage, { addAnnotation, removeAnnotation }] = useVirtualAnnotationPage();\n\n return (\n <VirtualAnnotationPageContext.Provider\n value={useMemo(() => ({ fullPage, addAnnotation, removeAnnotation }), [fullPage])}\n >\n {children}\n </VirtualAnnotationPageContext.Provider>\n );\n}\n","import React from 'react';\n\nexport function DefaultCanvasFallback({ width, style, height }: { width?: number; height?: number; style?: any }) {\n return <div style={{ width, height, minHeight: 500, ...(style || {}), background: '#f9f9f9' }}>Unknown error</div>;\n}\n","import { createContext, useContext } from 'react';\nimport { Preset } from '@atlas-viewer/atlas';\n\nexport const ViewerPresetContext = createContext<Preset | null | undefined>(null);\n\nexport function useViewerPreset() {\n return useContext(ViewerPresetContext);\n}\n","import React, { ReactNode, useContext, useLayoutEffect } from 'react';\nimport { Root } from 'react-dom/client';\nimport { useViewerPreset, ViewerPresetContext } from './ViewerPresetContext';\n\nexport const PortalContext = React.createContext<Root | null>(null);\nexport const OverlayPortalContext = React.createContext<Root | null>(null);\n\nexport function CanvasPortal({ children, overlay }: { children: ReactNode; overlay?: boolean }) {\n const htmlElement = useContext(overlay ? OverlayPortalContext : PortalContext);\n const preset = useViewerPreset();\n\n useLayoutEffect(() => {\n if (htmlElement) {\n try {\n htmlElement.render(<ViewerPresetContext.Provider value={preset}>{children}</ViewerPresetContext.Provider>);\n } catch (e) {\n // ignore..\n }\n }\n }, [children, preset]);\n\n return null;\n}\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","import React, { ReactNode, useLayoutEffect, useRef, useState } from 'react';\nimport { AtlasAuto, Preset, AtlasProps } from '@atlas-viewer/atlas';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { ContextBridge, useContextBridge } from '../context/ContextBridge';\nimport { VirtualAnnotationProvider } from '../hooks/useVirtualAnnotationPageContext';\nimport { DefaultCanvasFallback } from './render/DefaultCanvasFallback';\nimport { OverlayPortalContext, PortalContext } from '../context/PortalContext';\nimport { ViewerPresetContext } from '../context/ViewerPresetContext';\nimport { createRoot, Root } from 'react-dom/client';\n\nexport function Viewer({\n children,\n errorFallback,\n outerContainerProps = {},\n ...props\n}: AtlasProps & {\n height?: number | string;\n width?: number | string;\n resizeHash?: number;\n containerProps?: any;\n outerContainerProps?: any;\n aspectRatio?: number;\n errorFallback?: any;\n} & { children: ReactNode }) {\n const portal = useRef<HTMLDivElement>(null);\n const [portalElement, setPortalElement] = useState<Root | null>();\n const [viewerPreset, setViewerPreset] = useState<Preset | null>();\n const overlayPortal = useRef<HTMLDivElement>(null);\n const [overlayPortalElement, setOverlayPortalElement] = useState<Root | null>();\n const bridge = useContextBridge();\n const ErrorFallback: any = errorFallback || DefaultCanvasFallback;\n\n useLayoutEffect(() => {\n const roots: Record<string, Root> = {};\n if (portal.current) {\n const $el = document.createElement('div');\n portal.current.appendChild($el);\n roots.portal = createRoot($el);\n setPortalElement(roots.portal);\n }\n if (overlayPortal.current) {\n const $el = document.createElement('div');\n overlayPortal.current.appendChild($el);\n roots.overlayPortal = createRoot($el);\n setOverlayPortalElement(roots.overlayPortal);\n }\n\n return () => {\n setPortalElement(null);\n setOverlayPortalElement(null);\n\n setTimeout(() => {\n if (roots.portal) {\n roots.portal.unmount();\n }\n if (roots.overlayPortal) {\n roots.overlayPortal.unmount();\n }\n }, 0);\n };\n }, []);\n\n return (\n <ErrorBoundary fallbackRender={() => <ErrorFallback {...props} />}>\n <AtlasAuto\n {...props}\n containerProps={{ style: { position: 'relative' }, ...(props.containerProps || {}) }}\n htmlChildren={<div ref={overlayPortal} />}\n onCreated={(preset: any) => {\n setViewerPreset(preset);\n if (props.onCreated) {\n props.onCreated(preset);\n }\n }}\n >\n <ViewerPresetContext.Provider value={viewerPreset}>\n <PortalContext.Provider value={portalElement as any}>\n <OverlayPortalContext.Provider value={overlayPortalElement as any}>\n <ContextBridge bridge={bridge}>\n <VirtualAnnotationProvider>{children}</VirtualAnnotationProvider>\n </ContextBridge>\n </OverlayPortalContext.Provider>\n </PortalContext.Provider>\n </ViewerPresetContext.Provider>\n </AtlasAuto>\n <div ref={portal} />\n </ErrorBoundary>\n );\n}\n","function createEventsHelper(vault) {\n return {\n addEventListener(resource, event, listener, scope) {\n if (!resource) {\n return;\n }\n vault.setMetaValue([resource.id, \"eventManager\", event], (registeredCallbacks) => {\n const callbacks = registeredCallbacks || [];\n for (const registered of callbacks) {\n if (registered.callback === listener) {\n return callbacks;\n }\n }\n return [...callbacks, { callback: listener, scope }];\n });\n return listener;\n },\n removeEventListener(resource, event, listener) {\n if (!resource) {\n return;\n }\n vault.setMetaValue([resource.id, \"eventManager\", event], (registeredCallbacks) => {\n return (registeredCallbacks || []).filter((registeredCallback) => registeredCallback.callback !== listener);\n });\n },\n getListenersAsProps(resourceOrId, scope) {\n const resource = typeof resourceOrId === \"string\" ? { id: resourceOrId } : resourceOrId;\n if (!resource || !resource.id) {\n return {};\n }\n const hooks = vault.getResourceMeta(resource.id, \"eventManager\");\n const props = {};\n if (hooks && resource) {\n for (const hook of Object.keys(hooks)) {\n props[hook] = (e) => {\n const fullResource = vault.get(resource);\n for (const { callback, scope: _scope } of hooks[hook] || []) {\n if (!_scope || scope && _scope.indexOf(scope) !== -1) {\n callback(e, fullResource);\n }\n }\n };\n }\n }\n return props;\n }\n };\n}\nexport { createEventsHelper };\n//# sourceMappingURL=events.mjs.map\n","import { useVault } from './useVault';\nimport { useVaultSelector } from './useVaultSelector';\nimport { useMemo } from 'react';\nimport { NormalizedEntity } from '@iiif/vault';\nimport { Reference } from '@iiif/presentation-3';\nimport { createEventsHelper } from '@iiif/vault-helpers/events';\n\nexport function useResourceEvents<T extends NormalizedEntity>(resource?: Reference, scope?: string[]) {\n const vault = useVault();\n const helper = useMemo(() => createEventsHelper(vault), [vault]);\n\n const hooks = useVaultSelector(() => {\n if (resource && resource.id) {\n return vault.getResourceMeta(resource.id, 'eventManager');\n }\n return null;\n }, [resource]);\n\n return useMemo(() => {\n return resource ? helper.getListenersAsProps(resource, scope) : {};\n }, [hooks, resource, vault, scope]);\n}\n","function createStylesHelper(vault) {\n return {\n applyStyles(resource, scope, styles) {\n const id = typeof resource === \"string\" ? resource : resource.id;\n return vault.setMetaValue([id, \"styles\", scope], styles);\n },\n getAppliedStyles(resource) {\n const id = typeof resource === \"string\" ? resource : resource.id;\n return vault.getResourceMeta(id, \"styles\");\n }\n };\n}\nexport { createStylesHelper };\n//# sourceMappingURL=styles.mjs.map\n","import { useVault } from './useVault';\nimport { useMemo } from 'react';\nimport { Reference } from '@iiif/presentation-3';\nimport { createStylesHelper } from '@iiif/vault-helpers/styles';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useStyles<Style extends Record<string, Record<string, any>>>(\n resource: undefined | Reference<any>\n): Style;\nexport function useStyles<Style extends Record<string, any>>(\n resource: undefined | Reference<any>,\n scope: string\n): Style;\nexport function useStyles<Style>(resource?: Reference, scope?: string): Style {\n const vault = useVault();\n const helper = useMemo(() => createStylesHelper(vault), [vault]);\n\n return useVaultSelector(() => {\n if (!resource) {\n return null;\n }\n\n const styles = helper.getAppliedStyles(resource.id);\n return styles ? (scope ? styles[scope] : styles) : undefined;\n }, [resource, scope]) as Style;\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nconst BOX_SELECTOR = /&?(xywh=)?(pixel:|percent:|pct:)?([0-9]+(?:\\.[0-9]+)?),([0-9]+(?:\\.[0-9]+)?),([0-9]+(?:\\.[0-9]+)?),([0-9]+(?:\\.[0-9]+)?)/;\nconst TEMPORAL_SELECTOR = /&?(t=)(npt:)?([0-9]+(.[0-9]+)?)?(,([0-9]+(.[0-9]+)?))?/;\nfunction parseSelector(source) {\n if (Array.isArray(source)) {\n return source.reduce((data, nextSource) => {\n const { selector, selectors } = parseSelector(nextSource);\n if (selector) {\n if (!data.selector) {\n data.selector = selector;\n }\n data.selectors.push(...selectors);\n }\n return data;\n }, {\n selector: null,\n selectors: []\n });\n }\n if (!source) {\n return {\n selector: null,\n selectors: []\n };\n }\n if (typeof source === \"string\") {\n const [id, fragment] = source.split(\"#\");\n if (!fragment) {\n return {\n selector: null,\n selectors: []\n };\n }\n return parseSelector({ type: \"FragmentSelector\", value: fragment });\n }\n if (source.type === \"PointSelector\" && (source.t || source.t === 0)) {\n const selector = {\n type: \"TemporalSelector\",\n temporal: {\n startTime: source.t\n }\n };\n return {\n selector,\n selectors: [selector]\n };\n }\n if (source.type === \"FragmentSelector\") {\n const matchBoxSelector = BOX_SELECTOR.exec(source.value);\n if (matchBoxSelector) {\n const selector = {\n type: \"BoxSelector\",\n spatial: {\n unit: matchBoxSelector[2] === \"percent:\" || matchBoxSelector[2] === \"pct:\" ? \"percent\" : \"pixel\",\n x: parseFloat(matchBoxSelector[3]),\n y: parseFloat(matchBoxSelector[4]),\n width: parseFloat(matchBoxSelector[5]),\n height: parseFloat(matchBoxSelector[6])\n }\n };\n return {\n selector,\n selectors: [selector]\n };\n }\n const matchTimeSelector = source.value.match(TEMPORAL_SELECTOR);\n if (matchTimeSelector) {\n const selector = {\n type: \"TemporalSelector\",\n temporal: {\n startTime: matchTimeSelector[4] ? parseFloat(matchTimeSelector[4]) : 0,\n endTime: matchTimeSelector[7] ? parseFloat(matchTimeSelector[7]) : void 0\n }\n };\n return {\n selector,\n selectors: [selector]\n };\n }\n return {\n selector: null,\n selectors: []\n };\n }\n return {\n selector: null,\n selectors: []\n };\n}\nfunction expandTarget(target, options = {}) {\n if (Array.isArray(target)) {\n return expandTarget(target[0]);\n }\n if (typeof target === \"string\") {\n const [id, fragment] = target.split(\"#\");\n if (!fragment) {\n return {\n type: \"SpecificResource\",\n source: { id, type: options.typeMap && options.typeMap[id] || \"Unknown\" },\n selector: null,\n selectors: []\n };\n }\n return expandTarget({\n type: \"SpecificResource\",\n source: { id, type: \"Unknown\" },\n selector: {\n type: \"FragmentSelector\",\n value: fragment\n }\n });\n }\n if (target.type === \"Choice\" || target.type === \"List\" || target.type === \"Composite\" || target.type === \"Independents\") {\n return expandTarget(target.items[0]);\n }\n if (target.type === \"SpecificResource\") {\n if (target.source.type === \"Canvas\" && target.source.partOf && typeof target.source.partOf === \"string\") {\n target.source.partOf = [\n {\n id: target.source.partOf,\n type: \"Manifest\"\n }\n ];\n }\n const { selector, selectors } = target.selector ? parseSelector(target.selector) : { selector: null, selectors: [] };\n return {\n type: \"SpecificResource\",\n source: target.source,\n selector,\n selectors\n };\n }\n if (target.id) {\n if (target.type === \"Canvas\" && target.partOf && typeof target.partOf === \"string\") {\n target.partOf = [\n {\n id: target.partOf,\n type: \"Manifest\"\n }\n ];\n }\n const [id, fragment] = target.id.split(\"#\");\n if (!fragment) {\n return {\n type: \"SpecificResource\",\n source: __spreadProps(__spreadValues({}, target), {\n id\n }),\n selector: null,\n selectors: []\n };\n }\n return expandTarget({\n type: \"SpecificResource\",\n source: __spreadProps(__spreadValues({}, target), {\n id\n }),\n selector: {\n type: \"FragmentSelector\",\n value: fragment\n }\n });\n }\n return {\n type: \"SpecificResource\",\n source: target,\n selector: null,\n selectors: []\n };\n}\nexport { expandTarget, parseSelector };\n//# sourceMappingURL=annotation-targets.mjs.map\n","import { useResourceContext } from '../context/ResourceContext';\nimport { AnnotationNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\nimport { expandTarget } from '@iiif/vault-helpers/annotation-targets';\nimport { useVault } from './useVault';\n\nexport function useAnnotation(options?: { id: string }): AnnotationNormalized | undefined;\nexport function useAnnotation<T>(\n options?: { id: string; selector: (annotation: AnnotationNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useAnnotation<T = AnnotationNormalized>(\n options: {\n id?: string;\n selector?: (annotation: AnnotationNormalized) => T;\n } = {},\n deps: any[] = []\n): AnnotationNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const vault = useVault();\n const annotationId = id ? id : ctx.annotation;\n\n const annotation = useVaultSelector(\n (s) => (annotationId ? s.iiif.entities.Annotation[annotationId] : undefined),\n [annotationId]\n );\n\n const body = useVaultSelector(\n (s) =>\n annotation && annotation.body\n ? annotation.body\n .map((singleBody) => (singleBody ? s.iiif.entities[singleBody.type][singleBody.id] : null))\n .filter(Boolean)\n : [],\n [annotation]\n );\n\n return useMemo(() => {\n if (!annotation) {\n return undefined;\n }\n\n const newAnnotation: any = {\n ...annotation,\n body,\n target: expandTarget(annotation.target as any, { typeMap: vault.getState().iiif.mapping }),\n };\n\n if (selector) {\n return selector(newAnnotation);\n }\n return newAnnotation;\n }, [annotation, selector, body, ...deps]);\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { CanvasNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useCanvas(options?: { id: string }): CanvasNormalized | undefined;\nexport function useCanvas<T>(\n options?: { id: string; selector: (canvas: CanvasNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useCanvas<T = CanvasNormalized>(\n options: {\n id?: string;\n selector?: (canvas: CanvasNormalized) => T;\n } = {},\n deps: any[] = []\n): CanvasNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const canvasId = id ? id : ctx.canvas;\n\n const canvas = useVaultSelector((s) => (canvasId ? s.iiif.entities.Canvas[canvasId] : undefined), [canvasId]);\n\n return useMemo(() => {\n if (!canvas) {\n return undefined;\n }\n if (selector) {\n return selector(canvas);\n }\n return canvas;\n }, [canvas, selector, ...deps]);\n}\n","import { BoxStyle, mergeStyles, RegionHighlight } from '@atlas-viewer/atlas';\nimport { useResourceEvents } from '../../hooks/useResourceEvents';\nimport { useStyles } from '../../hooks/useStyles';\nimport React, { FC, useMemo } from 'react';\nimport { useAnnotation } from '../../hooks/useAnnotation';\nimport { useCanvas } from '../../hooks/useCanvas';\n\nexport const RenderAnnotation: FC<{ id: string; className?: string; style?: BoxStyle; interactive?: boolean }> = ({\n id,\n style: defaultStyle,\n className,\n interactive,\n}) => {\n const annotation = useAnnotation({ id });\n const style = useStyles<BoxStyle>(annotation, 'atlas');\n const html = useStyles<{ className?: string; href?: string; title?: string; target?: string }>(annotation, 'html');\n const events = useResourceEvents(annotation as any, ['atlas']);\n const canvas = useCanvas();\n\n const allStyles = useMemo(() => {\n return mergeStyles(defaultStyle, style);\n }, [defaultStyle, style]);\n\n const isValid =\n canvas &&\n annotation &&\n annotation.target &&\n (annotation.target as any).selector &&\n (annotation.target as any).selector.type === 'BoxSelector' &&\n (annotation.target as any).source &&\n (annotation.target as any).source.id === canvas.id;\n\n if (!isValid) {\n return null;\n }\n\n return (\n <RegionHighlight\n id={annotation.id}\n isEditing={true}\n region={(annotation.target as any).selector.spatial}\n style={allStyles}\n className={html?.className || className}\n interactive={!!(html?.href || interactive)}\n href={html?.href || null}\n title={html?.title || null}\n hrefTarget={html?.target || null}\n {...events}\n />\n );\n};\n","import { AnnotationPage, AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { RenderAnnotation } from './Annotation';\nimport { BoxStyle } from '@atlas-viewer/atlas';\nimport { useStyles } from '../../hooks/useStyles';\nimport { useVaultSelector } from '../../hooks/useVaultSelector';\nimport React, { FC, Fragment } from 'react';\n\nexport const RenderAnnotationPage: FC<{ page: AnnotationPage | AnnotationPageNormalized; className?: string }> = ({\n className,\n page,\n}) => {\n const style = useStyles<BoxStyle>(page, 'atlas');\n const html = useStyles<{ className?: string }>(page, 'html');\n\n useVaultSelector((state) => (page.id ? state.iiif.entities.AnnotationPage[page.id] : null), []);\n\n return (\n <Fragment>\n {page.items?.map((annotation) => {\n return (\n <RenderAnnotation\n key={annotation.id}\n id={annotation.id}\n style={style}\n className={html?.className || className}\n />\n );\n })}\n </Fragment>\n );\n};\n","import { ImageCandidate } from '@atlas-viewer/iiif-image-api';\nimport React, { Fragment, ReactNode } from 'react';\nimport { TileSet } from '@atlas-viewer/atlas';\nimport { ImageWithOptionalService } from '../../features/rendering-strategy/resource-types';\n\nexport function RenderImage({\n id,\n image,\n thumbnail,\n isStatic,\n x = 0,\n y = 0,\n children,\n onClick,\n}: {\n id: string;\n image: ImageWithOptionalService;\n thumbnail?: ImageCandidate;\n isStatic?: boolean;\n x?: number;\n y?: number;\n children?: ReactNode;\n onClick?: (e: any) => void;\n}) {\n return (\n <Fragment key={id}>\n {!image.service ? (\n <Fragment key=\"no-service\">\n <world-image\n onClick={onClick}\n // key={`${image.width}/${image.height}`}\n uri={image.id}\n target={image.target.spatial}\n display={\n image.width && image.height\n ? {\n width: image.width,\n height: image.height,\n }\n : undefined\n }\n />\n {children}\n </Fragment>\n ) : (\n <Fragment key=\"service\">\n <TileSet\n // key={`${image.target.spatial?.width}/${image.target.spatial?.height}`}\n tiles={{\n id: image.service.id || image.service['@id'] || 'unknown',\n height: image.height as number,\n width: image.width as number,\n imageService: image.service as any,\n thumbnail: thumbnail && thumbnail.type === 'fixed' ? thumbnail : undefined,\n }}\n x={image.target?.spatial.x + x}\n y={image.target?.spatial.y + y}\n width={image.target?.spatial.width}\n height={image.target?.spatial.height}\n onClick={onClick}\n />\n {children}\n </Fragment>\n )}\n </Fragment>\n );\n}\n","import {\n AnnotationNormalized,\n CanvasNormalized,\n ContentResource,\n IIIFExternalWebResource,\n PointSelector,\n SpecificResource,\n W3CAnnotationTarget,\n} from '@iiif/presentation-3';\nimport { Vault } from '@iiif/vault';\nimport { ChoiceDescription } from './choice-types';\nimport { UseRenderingStrategy } from '../../hooks/useRenderingStrategy';\nimport { BoxSelector, expandTarget, SupportedTarget, TemporalBoxSelector } from '@iiif/vault-helpers';\n\n/**\n * Parse specific resource.\n *\n * This could be expanded to support pulling out more from the specific resource.\n *\n * @param resource\n */\nexport function parseSpecificResource(resource: ContentResource) {\n if (resource.type === 'SpecificResource') {\n return [resource.source, { selector: resource.selector }];\n }\n\n return [resource, { selector: null }];\n}\n\nexport interface Paintables {\n choice: ChoiceDescription | null;\n types: string[];\n items: Array<{\n annotationId: string;\n type: string;\n resource: IIIFExternalWebResource | SpecificResource;\n target: any;\n selector: any;\n }>;\n}\n\nexport function getPaintables(\n vault: Vault,\n paintingAnnotations: AnnotationNormalized[],\n enabledChoices: string[]\n): Paintables {\n const types: string[] = [];\n let choice: Paintables['choice'] = null;\n const items: Paintables['items'] = [];\n\n for (const annotation of paintingAnnotations) {\n const bodies = vault.get<ContentResource>(annotation.body, { skipSelfReturn: false });\n for (const unknownBody of bodies) {\n if (!unknownBody) {\n continue;\n }\n const [body, { selector }] = parseSpecificResource(unknownBody);\n const type = (body.type || 'unknown').toLowerCase();\n\n // Choice\n if (type === 'choice') {\n const nestedBodies = vault.get<ContentResource>(body.items) as ContentResource[];\n\n // Which are active? By default the first, but we could push multiple here.\n const selected = enabledChoices.length\n ? enabledChoices.map((cid) => nestedBodies.find((b) => b.id === cid)).filter(Boolean)\n : [nestedBodies[0]];\n\n if (selected.length === 0) {\n selected.push(nestedBodies[0]);\n }\n\n // Store choice.\n choice = {\n type: 'single-choice',\n items: nestedBodies.map((b) => ({\n id: b.id,\n label: (b as any).label as any,\n selected: selected.indexOf(b) !== -1,\n })) as any[],\n label: (unknownBody as any).label,\n };\n\n // @todo insert in the right order.\n bodies.push(...(selected as any[]));\n\n continue;\n }\n\n if (types.indexOf(type) === -1) {\n types.push(type);\n }\n\n items.push({\n annotationId: annotation.id,\n type: type,\n resource: body as IIIFExternalWebResource,\n target: annotation.target,\n selector,\n });\n }\n }\n\n return {\n types,\n items,\n choice,\n };\n}\n\nexport function getParsedTargetSelector(\n canvas: CanvasNormalized,\n target: W3CAnnotationTarget | W3CAnnotationTarget[]\n): [TemporalBoxSelector | BoxSelector | PointSelector | null, SupportedTarget['source']] {\n const { selector: imageTarget, source } = expandTarget(target);\n\n if (source.id !== canvas.id) {\n // Skip invalid targets.\n return [null, source];\n }\n\n // Target is where it should be painted.\n const defaultTarget: BoxSelector = {\n type: 'BoxSelector',\n spatial: {\n x: 0,\n y: 0,\n width: canvas.width,\n height: canvas.height,\n },\n };\n\n return [\n imageTarget\n ? imageTarget.type === 'TemporalSelector'\n ? {\n type: 'TemporalBoxSelector',\n temporal: imageTarget.temporal,\n spatial: defaultTarget.spatial,\n }\n : imageTarget\n : null,\n source,\n ];\n}\n\nexport const emptyActions = {\n makeChoice: () => {\n // no-op\n },\n};\n\nexport const unknownResponse: UseRenderingStrategy[0] = { type: 'unknown' };\n\nexport const unsupportedStrategy = (reason: string): UseRenderingStrategy[0] => {\n return { type: 'unknown', reason, annotations: { pages: [] } };\n};\n\nexport const emptyStrategy = (width: number, height: number): UseRenderingStrategy[0] => {\n return { type: 'empty', width, height, annotations: { pages: [] }, image: null, images: [] };\n};\n","import { useVaultSelector } from './useVaultSelector';\nimport { IIIFStore } from '@iiif/vault';\n\nfunction getMeta(state: IIIFStore, resourceId: string) {\n const resourceMeta = state?.iiif?.meta[resourceId];\n if (!resourceMeta) {\n return null;\n }\n return resourceMeta.annotationPageManager as any;\n}\n\nexport function useEnabledAnnotationPageIds(resourceId?: string, availablePageIds?: string[]) {\n return useVaultSelector(\n (state) => {\n const pageIds: string[] = [];\n if (!resourceId) {\n return pageIds;\n }\n const allAnnotationListIds = Object.keys(state.iiif.entities.AnnotationPage);\n for (const annotationListId of allAnnotationListIds) {\n if (!availablePageIds || availablePageIds.indexOf(annotationListId) !== -1) {\n const annotationListMeta = getMeta(state, annotationListId);\n if (annotationListMeta && annotationListMeta.views && annotationListMeta.views[resourceId]) {\n pageIds.push(annotationListId);\n }\n }\n }\n\n return pageIds;\n },\n [resourceId, availablePageIds]\n );\n}\n","import { CanvasNormalized, ManifestNormalized } from '@iiif/presentation-3';\n\nexport function flattenAnnotationPageIds({\n canvas,\n manifest,\n all,\n canvases,\n}: {\n manifest?: ManifestNormalized;\n canvas?: CanvasNormalized;\n canvases?: CanvasNormalized[];\n all?: boolean;\n}) {\n const foundIds: string[] = [];\n\n if (manifest) {\n for (const page of manifest.annotations) {\n if (foundIds.indexOf(page.id) === -1) {\n foundIds.push(page.id);\n }\n }\n }\n\n if (all) {\n if (canvases && canvases.length) {\n for (const canvas_ of canvases) {\n for (const page of canvas_.annotations) {\n if (foundIds.indexOf(page.id) === -1) {\n foundIds.push(page.id);\n }\n }\n }\n }\n } else if (canvas) {\n for (const page of canvas.annotations) {\n if (foundIds.indexOf(page.id) === -1) {\n foundIds.push(page.id);\n }\n }\n }\n\n // Remove enabled page IDs for now.\n // for (const enabledPage of enabledPageIds) {\n // if (foundIds.indexOf(enabledPage) === -1) {\n // foundIds.push(enabledPage);\n // }\n // }\n\n return foundIds;\n}\n","import { useCallback, useMemo } from 'react';\nimport { useVault } from './useVault';\nimport { useManifest } from './useManifest';\nimport { useCanvas } from './useCanvas';\nimport { useVisibleCanvases } from '../context/VisibleCanvasContext';\nimport { useEnabledAnnotationPageIds } from './useEnabledAnnotationPageIds';\nimport { flattenAnnotationPageIds } from '../utility/flatten-annotation-page-ids';\nimport { IIIFStore } from '@iiif/vault';\n\ntype AnnotationPageResourceMap = {\n [id: string]: boolean;\n};\n\ntype AnnotationPageManager = {\n views: AnnotationPageResourceMap;\n};\n\nfunction getMeta(state: IIIFStore, resourceId: string) {\n const resourceMeta = state?.iiif?.meta[resourceId];\n if (!resourceMeta) {\n return null;\n }\n return resourceMeta.annotationPageManager as AnnotationPageManager;\n}\n\nexport function useAnnotationPageManager(resourceId?: string, options: { all?: boolean } = {}) {\n const vault = useVault();\n const manifest = useManifest();\n const canvas = useCanvas();\n const canvases = useVisibleCanvases();\n const availablePageIds = useMemo(() => {\n return flattenAnnotationPageIds({\n all: options.all,\n manifest,\n canvas,\n canvases,\n });\n }, [options.all, canvas, canvases, manifest]);\n const enabledPageIds = useEnabledAnnotationPageIds(resourceId, options.all ? undefined : availablePageIds);\n\n const setPageDisabled = useCallback(\n (deselectId: string) => {\n if (!resourceId) {\n return;\n }\n vault.setMetaValue<AnnotationPageResourceMap>(\n [deselectId, 'annotationPageManager', 'views'],\n (existingResources: AnnotationPageResourceMap | undefined) => {\n if (existingResources && !existingResources[resourceId]) {\n return existingResources;\n }\n\n return {\n ...(existingResources || {}),\n [resourceId]: false,\n };\n }\n );\n },\n [resourceId, vault]\n );\n\n const setPageEnabled = useCallback(\n (id: string, opt: { deselectOthers?: boolean } = {}) => {\n if (!resourceId) {\n return;\n }\n const state = vault.getState();\n const toDeselect = [];\n\n // Deselect these.\n if (opt?.deselectOthers) {\n const allAnnotationListIds = Object.keys(state.iiif.entities.AnnotationPage);\n for (const annotationPageId of allAnnotationListIds) {\n const annotationListMeta = getMeta(state, annotationPageId);\n if (annotationListMeta && annotationListMeta.views && annotationListMeta.views[resourceId]) {\n toDeselect.push(annotationPageId);\n }\n }\n }\n\n // Disable first.\n for (const deselectId of toDeselect) {\n setPageDisabled(deselectId);\n }\n\n // Then enable.\n vault.setMetaValue<AnnotationPageResourceMap>(\n [id, 'annotationPageManager', 'views'],\n (existingResources: AnnotationPageResourceMap | undefined) => {\n if (existingResources && existingResources[resourceId]) {\n return existingResources;\n }\n return {\n ...(existingResources || {}),\n [resourceId]: true,\n };\n }\n );\n },\n [resourceId, setPageDisabled, vault]\n );\n\n return {\n availablePageIds,\n enabledPageIds,\n setPageEnabled,\n setPageDisabled,\n };\n}\n","import { useVaultSelector } from './useVaultSelector';\n\nexport function useResources<Type>(ids: string[], type: string): Type[] {\n return useVaultSelector((state, vault) => vault.get<Type>(ids.map((id) => ({ id, type }))) as any, [ids, type]);\n}\n","import React, { useContext } from 'react';\nimport { ImageServiceLoader } from '@atlas-viewer/iiif-image-api';\n\nexport const ImageServiceLoaderContext = React.createContext<ImageServiceLoader>(new ImageServiceLoader());\n\nexport function useImageServiceLoader() {\n return useContext(ImageServiceLoaderContext);\n}\n","import { ImageService } from '@iiif/presentation-3';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useImageServiceLoader } from '../context/ImageServiceLoaderContext';\n\nexport type ImageServiceLoaderType = (\n imageService: any | undefined,\n { height, width }: { height: number; width: number }\n) => ImageService | undefined;\n\nexport function useLoadImageService() {\n const loader = useImageServiceLoader();\n const [imageServiceStatus, setImageServiceStatus] = useState<Record<string, string>>({});\n const didUnmount = useRef(false);\n useEffect(() => {\n return () => {\n didUnmount.current = true;\n };\n }, []);\n const loadImageService = useCallback<ImageServiceLoaderType>(\n (imageService, { height, width }) => {\n if (imageService) {\n const imageServiceId = imageService.id || (imageService['@id'] as string);\n // We want to kick this off.\n const syncLoaded = loader.loadServiceSync({\n id: imageServiceId,\n width: imageService.width || width,\n height: imageService.height || height,\n source: imageService,\n });\n\n if (syncLoaded) {\n imageService = syncLoaded;\n } else if (!imageServiceStatus[imageServiceId]) {\n if (!didUnmount.current) {\n setImageServiceStatus((r) => {\n return {\n ...r,\n [imageServiceId]: 'loading',\n };\n });\n }\n loader\n .loadService({\n id: imageServiceId,\n width: imageService.width || width,\n height: imageService.height || height,\n })\n .then(() => {\n if (!didUnmount.current) {\n setImageServiceStatus((r) => {\n return {\n ...r,\n [imageServiceId]: 'done',\n };\n });\n }\n });\n }\n }\n return imageService;\n },\n [loader, imageServiceStatus]\n );\n\n return [loadImageService, imageServiceStatus] as const;\n}\n","// This is valid under a canvas context.\nimport { AnnotationNormalized, AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { useCanvas } from './useCanvas';\nimport { useVaultSelector } from './useVaultSelector';\nimport { useAnnotation } from './useAnnotation';\n\nexport function usePaintingAnnotations(\n options: { canvasId?: string; enableSingleAnnotation?: boolean } = {}\n): AnnotationNormalized[] {\n const annotation = useAnnotation();\n const canvas = useCanvas(options.canvasId ? { id: options.canvasId } : undefined);\n\n return useVaultSelector(\n (state, vault) => {\n if (!canvas) {\n return [];\n }\n if (annotation && options.enableSingleAnnotation) {\n return [annotation];\n }\n const annotationPages = vault.get<AnnotationPageNormalized>(canvas.items);\n const flatAnnotations: AnnotationNormalized[] = [];\n for (const page of annotationPages) {\n flatAnnotations.push(...vault.get<AnnotationNormalized>(page.items));\n }\n return flatAnnotations;\n },\n [canvas]\n );\n}\n","import { useCallback, useMemo, useState } from 'react';\nimport { getPaintables } from '../features/rendering-strategy/rendering-utils';\nimport { useVault } from './useVault';\nimport { usePaintingAnnotations } from './usePaintingAnnotations';\n\nexport function usePaintables(\n options?: { defaultChoices?: string[]; enableSingleAnnotation?: boolean },\n deps: any[] = []\n) {\n const vault = useVault();\n const paintingAnnotations = usePaintingAnnotations({ enableSingleAnnotation: options?.enableSingleAnnotation });\n const [enabledChoices, setEnabledChoices] = useState<string[]>(options?.defaultChoices || []);\n\n const paintables = useMemo(\n () => getPaintables(vault, paintingAnnotations, enabledChoices),\n [vault, paintingAnnotations, enabledChoices, ...deps]\n );\n\n const makeChoice = useCallback(\n (\n id: string,\n { deselectOthers = true, deselect = false }: { deselectOthers?: boolean; deselect?: boolean } = {}\n ) => {\n if (paintables.choice) {\n // Don't support multiple choice yet.\n if (paintables.choice.type !== 'single-choice') {\n throw new Error('Complex choice not supported yet');\n }\n\n setEnabledChoices((prevChoices) => {\n if (deselect) {\n const without = prevChoices.filter((e) => e !== id);\n\n if (without.length === 0) {\n const defaultId = paintables.items[0].resource.id;\n if (defaultId) {\n return [defaultId];\n } else {\n return [];\n }\n }\n\n return without;\n }\n\n if (deselectOthers) {\n return [id];\n }\n\n const newChoices = [...prevChoices];\n\n // Add the default ID.\n if (newChoices.length === 0 && paintables.items.length) {\n const defaultId = paintables.items[0].resource.id;\n if (defaultId) {\n newChoices.push(defaultId);\n }\n }\n\n if (prevChoices.indexOf(id) !== -1) {\n return prevChoices;\n }\n\n return [...prevChoices, id];\n });\n }\n },\n [paintables.choice]\n );\n\n const actions = { makeChoice };\n\n return [paintables, actions] as const;\n}\n","import { CanvasNormalized, IIIFExternalWebResource, PointSelector, W3CAnnotationTarget } from '@iiif/presentation-3';\nimport { ImageServiceLoaderType } from '../../hooks/useLoadImageService';\nimport { AnnotationPageDescription, ImageWithOptionalService } from './resource-types';\nimport { getImageServices } from '@atlas-viewer/iiif-image-api';\nimport { getParsedTargetSelector, Paintables, unsupportedStrategy } from './rendering-utils';\nimport { ChoiceDescription } from './choice-types';\nimport { expandTarget, SupportedSelectors } from '@iiif/vault-helpers/annotation-targets';\nimport { TemporalBoxSelector, BoxSelector } from '@iiif/vault-helpers';\n\nexport type SingleImageStrategy = {\n type: 'images';\n image: ImageWithOptionalService;\n images: Array<ImageWithOptionalService>;\n choice?: ChoiceDescription;\n annotations?: AnnotationPageDescription;\n};\n\nexport function getImageStrategy(\n canvas: CanvasNormalized,\n paintables: Paintables,\n loadImageService: ImageServiceLoaderType\n) {\n const imageTypes: ImageWithOptionalService[] = [];\n for (const singleImage of paintables.items) {\n // SingleImageStrategy\n const resource: IIIFExternalWebResource =\n singleImage.resource && singleImage.resource.type === 'SpecificResource'\n ? singleImage.resource.source\n : singleImage.resource;\n\n // Validation.\n if (!resource.id) {\n // @todo we could skip this?\n return unsupportedStrategy('No resource Identifier');\n }\n\n let imageService = undefined;\n if (resource.service) {\n const imageServices = getImageServices(resource as any) as any[];\n if (imageServices[0]) {\n imageService = loadImageService(imageServices[0], canvas);\n }\n }\n\n // Target is where it should be painted.\n const defaultTarget: BoxSelector = {\n type: 'BoxSelector',\n spatial: {\n x: 0,\n y: 0,\n width: canvas.width,\n height: canvas.height,\n },\n };\n\n const [target, source] = getParsedTargetSelector(canvas, singleImage.target);\n if (source.id !== canvas.id) {\n // Skip invalid targets.\n continue;\n }\n\n // Support for cropping before painting an annotation.\n const defaultImageSelector = {\n type: 'BoxSelector',\n spatial: {\n x: 0,\n y: 0,\n width: canvas.width,\n height: canvas.height,\n },\n } as BoxSelector;\n const imageSelector = singleImage.resource.type === 'SpecificResource' ? expandTarget(singleImage.resource) : null;\n const selector: BoxSelector =\n imageSelector &&\n imageSelector.selector &&\n (imageSelector.selector.type === 'BoxSelector' || imageSelector.selector.type === 'TemporalBoxSelector')\n ? {\n type: 'BoxSelector',\n spatial: {\n x: imageSelector.selector.spatial.x,\n y: imageSelector.selector.spatial.y,\n width: imageSelector.selector.spatial.width,\n height: imageSelector.selector.spatial.height,\n },\n }\n : defaultImageSelector;\n\n if (imageService && !imageService.id) {\n (imageService as any).id = imageService['@id'];\n }\n\n const imageType: ImageWithOptionalService = {\n id: resource.id,\n type: 'Image',\n annotationId: singleImage.annotationId,\n width: target ? resource.width : canvas.width,\n height: target ? resource.height : canvas.height,\n service: imageService,\n sizes:\n imageService && imageService.sizes\n ? imageService.sizes\n : resource.width && resource.height\n ? [{ width: resource.width, height: resource.height }]\n : [],\n target: target && target.type !== 'PointSelector' ? target : defaultTarget,\n selector,\n };\n\n imageTypes.push(imageType);\n }\n\n return {\n type: 'images',\n image: imageTypes[0],\n images: imageTypes,\n choice: paintables.choice,\n } as SingleImageStrategy;\n}\n","import { CanvasNormalized } from '@iiif/presentation-3';\nimport { Paintables, unsupportedStrategy } from './rendering-utils';\nimport { AnnotationPageDescription } from './resource-types';\nimport { ChoiceDescription } from './choice-types';\nimport { ExternalWebResource } from '@iiif/presentation-3';\nimport { RenderingStrategy } from './strategies';\n\nexport type Single3DModelStrategy = {\n type: '3d-model';\n model: ExternalWebResource;\n choice?: ChoiceDescription; // future\n annotations?: AnnotationPageDescription; // future\n};\n\nconst supportedFormats = ['model/gltf-binary'];\n\nexport function get3dStrategy(canvas: CanvasNormalized, paintables: Paintables): RenderingStrategy {\n const first = paintables.items[0];\n const resource = first.resource as ExternalWebResource;\n\n if (!resource.format) {\n return unsupportedStrategy('Unknown format');\n }\n\n if (supportedFormats.indexOf(resource.format) === -1) {\n return unsupportedStrategy(`3D format: ${resource.format} is unsupported`);\n }\n\n return {\n type: '3d-model',\n model: resource as any,\n } as Single3DModelStrategy;\n}\n","import { CanvasNormalized } from '@iiif/presentation-3';\nimport { Paintables, unsupportedStrategy } from './rendering-utils';\nimport { MediaStrategy } from './strategies';\n\nexport function getAudioStrategy(canvas: CanvasNormalized, paintables: Paintables) {\n if (!canvas.duration) {\n return unsupportedStrategy('No duration on canvas');\n }\n\n if (paintables.items.length > 1) {\n return unsupportedStrategy('Only one audio source supported');\n }\n\n const audioResource = paintables.items[0]?.resource as any; // @todo stronger type for what this might be.\n\n if (!audioResource) {\n return unsupportedStrategy('Unknown audio');\n }\n\n if (!audioResource.format) {\n return unsupportedStrategy('Audio does not have format');\n }\n\n return {\n type: 'media',\n media: {\n annotationId: paintables.items[0].annotationId,\n duration: canvas.duration,\n url: audioResource.id,\n type: 'Sound',\n target: {\n type: 'TemporalSelector',\n temporal: {\n startTime: 0,\n endTime: canvas.duration,\n },\n },\n format: audioResource.format,\n selector: {\n type: 'TemporalSelector',\n temporal: {\n startTime: 0,\n endTime: canvas.duration,\n },\n },\n },\n annotations: {\n pages: [],\n },\n } as MediaStrategy;\n}\n","import { CanvasNormalized } from '@iiif/presentation-3';\nimport { Paintables, unsupportedStrategy } from './rendering-utils';\nimport { MediaStrategy } from './strategies';\nimport { SingleVideo } from './resource-types';\n\nexport function getVideoStrategy(canvas: CanvasNormalized, paintables: Paintables) {\n const videoPaintables = paintables.items.filter((t) => t.type === 'video');\n\n if (!canvas.duration) {\n return unsupportedStrategy('No duration on canvas');\n }\n\n if (videoPaintables.length > 1) {\n return unsupportedStrategy('Only one video source supported');\n }\n\n const audioResource = videoPaintables[0]?.resource as any; // @todo stronger type for what this might be.\n\n if (!audioResource) {\n return unsupportedStrategy('Unknown video');\n }\n\n if (!audioResource.format) {\n return unsupportedStrategy('Video does not have format');\n }\n\n // @todo support VTT\n\n return {\n type: 'media',\n media: {\n annotationId: paintables.items[0].annotationId,\n duration: canvas.duration,\n url: audioResource.id,\n type: 'Video',\n items: [],\n target: {\n type: 'TemporalSelector',\n temporal: {\n startTime: 0,\n endTime: canvas.duration,\n },\n },\n format: audioResource.format,\n selector: {\n type: 'TemporalSelector',\n temporal: {\n startTime: 0,\n endTime: canvas.duration,\n },\n },\n },\n annotations: {\n pages: [],\n },\n } as MediaStrategy;\n}\n","import { CanvasNormalized, InternationalString } from '@iiif/presentation-3';\nimport { ChoiceDescription } from './choice-types';\nimport { AnnotationPageDescription } from './resource-types';\nimport { getParsedTargetSelector, Paintables } from './rendering-utils';\nimport { RenderingStrategy } from './strategies';\nimport { SupportedTarget } from '@iiif/vault-helpers';\n\nexport type TextualContentStrategy = {\n type: 'textual-content';\n items: { annotationId: string; text: InternationalString; target: SupportedTarget | null }[];\n choice?: ChoiceDescription; // future\n annotations?: AnnotationPageDescription; // future\n};\n\nfunction parseType(item: any, languageMap: InternationalString = {}, lang?: string) {\n const language = item.language || lang || 'none';\n switch (item.type) {\n case 'TextualBody': {\n if (typeof item.value !== 'undefined') {\n languageMap[language] = item.value;\n }\n break;\n }\n case 'List':\n case 'Composite':\n case 'Choice': {\n if (item.items) {\n item.items.forEach((inner: any) => parseType(inner, languageMap, language));\n }\n }\n }\n return languageMap;\n}\n\nexport function getTextualContentStrategy(canvas: CanvasNormalized, paintables: Paintables): RenderingStrategy {\n const items: TextualContentStrategy['items'] = [];\n\n paintables.items.forEach((item) => {\n if (item.resource) {\n const [target] = getParsedTargetSelector(canvas, item.target);\n items.push({ annotationId: item.annotationId, text: parseType(item.resource), target: target as any });\n }\n });\n\n return {\n type: 'textual-content',\n items,\n } as TextualContentStrategy;\n}\n","import { AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { useCanvas } from './useCanvas';\nimport { useMemo } from 'react';\nimport { useVault } from './useVault';\nimport { RenderingStrategy } from '../features/rendering-strategy/strategies';\nimport {\n emptyActions,\n emptyStrategy,\n unknownResponse,\n unsupportedStrategy,\n} from '../features/rendering-strategy/rendering-utils';\nimport { useAnnotationPageManager } from './useAnnotationPageManager';\nimport { useManifest } from './useManifest';\nimport { useResources } from './useResources';\nimport { useLoadImageService } from './useLoadImageService';\nimport { usePaintables } from './usePaintables';\nimport { getImageStrategy } from '../features/rendering-strategy/image-strategy';\nimport { get3dStrategy } from '../features/rendering-strategy/3d-strategy';\nimport { getAudioStrategy } from '../features/rendering-strategy/audio-strategy';\nimport { getVideoStrategy } from '../features/rendering-strategy/video-strategy';\nimport { getTextualContentStrategy } from '../features/rendering-strategy/textual-content-strategy';\nimport { useAnnotation } from './useAnnotation';\n\n// @todo we may not have any actions returned from the rendering strategy.\nexport type StrategyActions = {\n makeChoice: (id: string, options?: { deselectOthers?: boolean; deselect?: boolean }) => void;\n};\n\nexport type UseRenderingStrategy = [RenderingStrategy, StrategyActions];\n\nexport type UseRenderingStrategyOptions = {\n strategies?: Array<RenderingStrategy['type']>;\n annotationPageManagerId?: string;\n enableSingleAnnotation?: boolean;\n defaultChoices?: string[];\n};\n\nexport function useRenderingStrategy(options?: UseRenderingStrategyOptions): UseRenderingStrategy {\n const manifest = useManifest();\n const canvas = useCanvas();\n const vault = useVault();\n const [loadImageService, imageServiceStatus] = useLoadImageService();\n const { enabledPageIds } = useAnnotationPageManager(options?.annotationPageManagerId || manifest?.id || canvas?.id, {\n all: false,\n });\n const enabledPages = useResources<AnnotationPageNormalized>(enabledPageIds, 'AnnotationPage');\n\n const supports: RenderingStrategy['type'][] = options?.strategies || [\n 'empty',\n 'images',\n 'media',\n 'textual-content',\n 'complex-timeline',\n ];\n\n const [paintables, actions] = usePaintables(options, [imageServiceStatus]);\n\n const strategy = useMemo(() => {\n if (!canvas) {\n return unknownResponse;\n }\n\n if (paintables.types.length === 0) {\n if (supports.indexOf('empty') !== -1) {\n return emptyStrategy(canvas.width, canvas.height);\n }\n return unknownResponse;\n }\n\n if (paintables.types.length !== 1) {\n if (paintables.types.length === 2 && paintables.types.indexOf('text') !== -1) {\n paintables.types = paintables.types.filter((t) => t !== 'text');\n } else {\n if (supports.indexOf('complex-timeline') === -1) {\n return unsupportedStrategy('Complex timeline not supported');\n }\n return unsupportedStrategy('ComplexTimelineStrategy not yet supported');\n }\n }\n\n const mainType = paintables.types[0];\n\n // Image\n if (mainType === 'image') {\n if (supports.indexOf('images') === -1) {\n return unsupportedStrategy('Image not supported');\n }\n\n return getImageStrategy(canvas, paintables, loadImageService);\n }\n\n // 3D\n if (mainType === 'Model' || mainType === 'model') {\n if (supports.indexOf('3d-model') === -1) {\n return unsupportedStrategy('3D not supported');\n }\n\n return get3dStrategy(canvas, paintables);\n }\n\n if (mainType === 'textualbody') {\n if (supports.indexOf('textual-content') === -1) {\n return unsupportedStrategy('Textual content not supported');\n }\n\n return getTextualContentStrategy(canvas, paintables);\n }\n\n if (mainType === 'sound' || mainType === 'audio') {\n if (supports.indexOf('media') === -1) {\n return unsupportedStrategy('Media not supported');\n }\n\n // Media Strategy with audio or audio sequence.\n return getAudioStrategy(canvas, paintables);\n }\n\n if (mainType === 'video') {\n if (supports.indexOf('media') === -1) {\n return unsupportedStrategy('Media not supported');\n }\n\n // Media Strategy with video or video sequence.\n return getVideoStrategy(canvas, paintables);\n }\n\n // Unknown fallback.\n return unknownResponse;\n }, [canvas, paintables, vault, actions.makeChoice]);\n\n return useMemo(() => {\n if (strategy.type === 'unknown') {\n return [strategy, emptyActions];\n }\n\n return [\n {\n ...strategy,\n annotations: { pages: enabledPages },\n },\n actions,\n ];\n }, [strategy, enabledPages]);\n}\n","import { Vault } from '@iiif/vault';\nimport { useVault } from './useVault';\nimport { useEffect } from 'react';\n\nexport const useVaultEffect = (callback: (vault: Vault) => void, deps: any[] = []): void => {\n const vault = useVault();\n\n useEffect(() => {\n callback(vault);\n }, [vault, ...deps]);\n};\n","import { ImageServiceLoader, getFixedSizeFromImage } from \"@atlas-viewer/iiif-image-api\";\nfunction createThumbnailHelper(vault, dependencies = {}) {\n const imageServiceLoader = dependencies.imageServiceLoader || new ImageServiceLoader();\n async function getBestThumbnailAtSize(input, request, dereference, candidates = [], dimensions) {\n if (typeof input === \"string\") {\n return { best: getFixedSizeFromImage(input), fallback: [], log: [] };\n }\n const fullInput = vault.get(input);\n if (typeof fullInput === \"string\") {\n return { best: getFixedSizeFromImage(fullInput), fallback: [], log: [] };\n }\n switch (fullInput.type) {\n case \"Annotation\": {\n const contentResources = fullInput.body;\n const firstContentResources = vault.get(contentResources[0]);\n if (dimensions && !firstContentResources.width) {\n firstContentResources.width = dimensions.width;\n firstContentResources.height = dimensions.height;\n }\n return await imageServiceLoader.getThumbnailFromResource(firstContentResources, request, dereference, candidates);\n }\n case \"Canvas\": {\n const canvas = fullInput;\n if (canvas.thumbnail && canvas.thumbnail.length) {\n const thumbnail = vault.get(canvas.thumbnail[0]);\n const potentialThumbnails = await imageServiceLoader.getImageCandidates(thumbnail, dereference);\n if (potentialThumbnails && potentialThumbnails.length) {\n candidates.push(...potentialThumbnails);\n }\n }\n return getBestThumbnailAtSize(canvas.items[0], request, dereference, candidates, {\n width: canvas.width,\n height: canvas.height\n });\n }\n case \"AnnotationPage\": {\n const annotationPage = fullInput;\n return getBestThumbnailAtSize(annotationPage.items[0], request, dereference, candidates, dimensions);\n }\n case \"Choice\": {\n const choice = fullInput;\n return getBestThumbnailAtSize(choice.items[0], request, dereference, candidates, dimensions);\n }\n case \"Collection\": {\n const collection = fullInput;\n const firstManifest = collection.items[0];\n return getBestThumbnailAtSize(firstManifest, request, dereference, candidates, dimensions);\n }\n case \"Manifest\": {\n const manifest = fullInput;\n const firstCanvas = manifest.items[0];\n return getBestThumbnailAtSize(firstCanvas, request, dereference, candidates, dimensions);\n }\n case \"SpecificResource\":\n case \"Image\":\n case \"Dataset\":\n case \"Sound\":\n case \"Text\":\n case \"TextualBody\":\n case \"Video\":\n if (dimensions && !fullInput.width) {\n fullInput.width = dimensions.width;\n fullInput.height = dimensions.height;\n }\n return imageServiceLoader.getThumbnailFromResource(fullInput, request, dereference, candidates);\n case \"Service\":\n case \"Range\":\n case \"AnnotationCollection\":\n case \"CanvasReference\":\n case \"ContentResource\":\n return { best: void 0, fallback: [], log: [] };\n }\n return { best: void 0, fallback: [], log: [] };\n }\n return {\n getBestThumbnailAtSize\n };\n}\nexport { createThumbnailHelper };\n//# sourceMappingURL=thumbnail.mjs.map\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useManifest } from './useManifest';\nimport { useCanvas } from './useCanvas';\nimport { useVaultEffect } from './useVaultEffect';\nimport { ImageCandidate, ImageCandidateRequest } from '@atlas-viewer/iiif-image-api';\nimport { useImageServiceLoader } from '../context/ImageServiceLoaderContext';\nimport { createThumbnailHelper } from '@iiif/vault-helpers/thumbnail';\nimport { useVault } from './useVault';\n\nexport function useThumbnail(\n request: ImageCandidateRequest,\n dereference?: boolean,\n { canvasId, manifestId }: { canvasId?: string; manifestId?: string } = {}\n) {\n const vault = useVault();\n const loader = useImageServiceLoader();\n const helper = useMemo(() => createThumbnailHelper(vault, { imageServiceLoader: loader }), [vault, loader]);\n\n const [thumbnail, setThumbnail] = useState<ImageCandidate | undefined>();\n const manifest = useManifest(manifestId ? { id: manifestId } : undefined);\n const canvas = useCanvas(canvasId ? { id: canvasId } : undefined);\n const subject = canvas ? canvas : manifest;\n const didUnmount = useRef(false);\n\n useEffect(() => {\n didUnmount.current = false;\n return () => {\n didUnmount.current = true;\n };\n }, []);\n\n if (!subject) {\n throw new Error('Must be called under a manifest or canvas context.');\n }\n\n useVaultEffect(\n (v) => {\n helper.getBestThumbnailAtSize(subject, request, dereference).then((thumb) => {\n if (thumb.best && !didUnmount.current) {\n setThumbnail(thumb.best);\n }\n });\n },\n [subject]\n );\n\n return thumbnail;\n}\n","import { RefObject, useCallback, useEffect, useReducer, useRef } from 'react';\n\ntype MediaPlayerAction =\n | { type: 'PLAY_PAUSE' }\n | { type: 'TOGGLE_MUTE' }\n | { type: 'MUTE' }\n | { type: 'UNMUTE' }\n | { type: 'SET_VOLUME'; volume: number }\n | { type: 'PLAY' }\n | { type: 'PLAY_REQUESTED' }\n | { type: 'PAUSE' }\n | { type: 'FINISHED' };\n\nexport type MediaPlayerState = {\n isPlaying: boolean;\n isMuted: boolean;\n playRequested: boolean;\n volume: number;\n isFinished: boolean;\n duration: number;\n};\n\nexport type MediaPlayerActions = {\n play(): void;\n pause(): void;\n playPause(): void;\n mute(): void;\n unmute(): void;\n toggleMute(): void;\n setVolume(volume: number): void;\n setDurationPercent(percent: number): void;\n setTime(time: number): void;\n};\n\nfunction getDefaultState(duration: number): MediaPlayerState {\n return { isMuted: false, playRequested: false, isPlaying: false, isFinished: false, volume: 100, duration };\n}\n\nfunction reducer(state: MediaPlayerState, action: MediaPlayerAction) {\n switch (action.type) {\n case 'FINISHED':\n return { ...state, isFinished: true, isPlaying: false, playRequested: false };\n case 'PLAY_PAUSE':\n return { ...state, isFinished: false, isPlaying: !state.isPlaying };\n case 'PLAY_REQUESTED':\n return { ...state, isFinished: false, playRequested: true };\n case 'PAUSE':\n return { ...state, isPlaying: false };\n case 'PLAY':\n return { ...state, isFinished: false, playRequested: false, isPlaying: true };\n case 'MUTE':\n return { ...state, isMuted: true };\n case 'SET_VOLUME':\n return { ...state, volume: action.volume, isMuted: action.volume === 0 };\n case 'TOGGLE_MUTE':\n return { ...state, isMuted: !state.isMuted };\n case 'UNMUTE':\n return { ...state, isMuted: false };\n }\n return state;\n}\n\nexport function formatTime(time: number) {\n const seconds = Math.round(time);\n return `${Math.floor(seconds / 60)}:${`${seconds % 60}`.padStart(2, '0')}`;\n}\n\nexport function useSimpleMediaPlayer(props: { duration: number }): readonly [\n {\n element: RefObject<HTMLAudioElement | HTMLVideoElement>;\n currentTime: RefObject<HTMLDivElement>;\n progress: RefObject<HTMLDivElement>;\n },\n MediaPlayerState,\n MediaPlayerActions\n] {\n const [state, dispatch] = useReducer(reducer, getDefaultState(props.duration));\n\n const media = useRef<HTMLAudioElement | HTMLVideoElement>(null);\n const currentTime = useRef<HTMLDivElement>(null);\n const progress = useRef<HTMLDivElement>(null);\n const _isMuted = useRef(false);\n\n const _updateCurrentTime = useCallback(() => {\n if (currentTime.current && media.current) {\n currentTime.current.innerHTML = formatTime(media.current.currentTime);\n if (progress.current) {\n progress.current.style.width = `${(media.current.currentTime / props.duration) * 100}%`;\n }\n if (_isMuted.current !== media.current.muted) {\n _isMuted.current = media.current.muted;\n dispatch(media.current.muted ? { type: 'MUTE' } : { type: 'UNMUTE' });\n }\n }\n }, [props.duration]);\n\n const play = useCallback(() => {\n if (media.current) {\n dispatch({ type: 'PLAY_REQUESTED' });\n media.current.play().then(() => {\n dispatch({ type: 'PLAY' });\n });\n _updateCurrentTime();\n }\n }, [_updateCurrentTime]);\n\n const playPause = useCallback(() => {\n if (media.current) {\n if (media.current.duration > 0 && media.current.paused) {\n play();\n } else {\n pause();\n }\n }\n }, [_updateCurrentTime]);\n\n const pause = useCallback(() => {\n if (media.current) {\n media.current.pause();\n dispatch({ type: 'PAUSE' });\n _updateCurrentTime();\n }\n }, [_updateCurrentTime]);\n\n const toggleMute = useCallback(() => {\n if (media.current) {\n media.current.muted = !media.current.muted;\n dispatch(media.current.muted ? { type: 'MUTE' } : { type: 'UNMUTE' });\n }\n }, []);\n\n const mute = useCallback(() => {\n if (media.current) {\n media.current.muted = true;\n dispatch({ type: 'MUTE' });\n }\n }, []);\n\n const unmute = useCallback(() => {\n if (media.current) {\n media.current.muted = false;\n dispatch({ type: 'UNMUTE' });\n }\n }, []);\n\n const setVolume = useCallback((newVolume: number) => {\n if (media.current) {\n media.current.muted = false;\n media.current.volume = newVolume / 100;\n dispatch({ type: 'SET_VOLUME', volume: newVolume });\n }\n }, []);\n\n const setDurationPercent = useCallback((percent: number) => {\n if (media.current) {\n media.current.currentTime = Math.max(0, Math.min(percent * props.duration, props.duration));\n _updateCurrentTime();\n }\n }, []);\n\n const setTime = useCallback((time: number) => {\n if (media.current) {\n media.current.currentTime = Math.max(0, Math.min(time, props.duration));\n _updateCurrentTime();\n }\n }, []);\n\n useEffect(() => {\n const interval = setInterval(() => {\n _updateCurrentTime();\n }, 350);\n\n return () => clearInterval(interval);\n }, [_updateCurrentTime, props.duration]);\n\n useEffect(() => {\n const ended = () => {\n dispatch({ type: 'FINISHED' });\n };\n const _media = media.current;\n\n _media?.addEventListener('ended', ended);\n\n return () => _media?.removeEventListener('ended', ended);\n }, []);\n\n return [\n { element: media, currentTime, progress },\n state,\n {\n play,\n pause,\n playPause,\n mute,\n unmute,\n toggleMute,\n setVolume,\n setDurationPercent,\n setTime,\n },\n ];\n}\n","import { createContext, ReactNode, RefObject, useContext } from 'react';\nimport { MediaPlayerActions, MediaPlayerState } from '../hooks/useSimpleMediaPlayer';\n\nconst MediaReactContextState = createContext<MediaPlayerState | null>(null);\nconst MediaReactContextActions = createContext<MediaPlayerActions | null>(null);\nconst MediaReactContextElements = createContext<{\n element: RefObject<HTMLAudioElement | HTMLVideoElement>;\n currentTime: RefObject<HTMLDivElement>;\n progress: RefObject<HTMLDivElement>;\n} | null>(null);\n\nexport function useMediaState() {\n const ctx = useContext(MediaReactContextState);\n if (!ctx) {\n throw new Error('Ctx not found');\n }\n return ctx;\n}\n\nexport function useMediaActions() {\n const ctx = useContext(MediaReactContextActions);\n if (!ctx) {\n throw new Error('Ctx not found');\n }\n return ctx;\n}\n\nexport function useMediaElements() {\n const ctx = useContext(MediaReactContextElements);\n if (!ctx) {\n throw new Error('Ctx not found');\n }\n return ctx;\n}\n\nexport function MediaPlayerProvider({\n actions,\n state,\n children,\n currentTime,\n progress,\n element,\n}: {\n actions: MediaPlayerActions;\n state: MediaPlayerState;\n children: ReactNode;\n currentTime: RefObject<HTMLDivElement>;\n progress: RefObject<HTMLDivElement>;\n element: RefObject<HTMLAudioElement | HTMLVideoElement>;\n}) {\n return (\n <MediaReactContextElements.Provider value={{ currentTime, progress, element }}>\n <MediaReactContextActions.Provider value={actions}>\n <MediaReactContextState.Provider value={state}>{children}</MediaReactContextState.Provider>\n </MediaReactContextActions.Provider>\n </MediaReactContextElements.Provider>\n );\n}\n","import { ReactNode } from 'react';\nimport { useSimpleMediaPlayer } from '../../hooks/useSimpleMediaPlayer';\nimport { SingleAudio } from '../../features/rendering-strategy/resource-types';\nimport { MediaPlayerProvider } from '../../context/MediaContext';\nimport { CanvasPortal } from '../../context/PortalContext';\n\nexport function Audio({ media, children }: { media: SingleAudio; children: ReactNode }) {\n const [{ element, currentTime, progress }, state, actions] = useSimpleMediaPlayer({ duration: media.duration });\n\n return (\n <>\n <CanvasPortal>\n <MediaPlayerProvider\n state={state}\n actions={actions}\n currentTime={currentTime}\n progress={progress}\n element={element}\n >\n <audio ref={element} src={media.url} />\n {children}\n </MediaPlayerProvider>\n </CanvasPortal>\n </>\n );\n}\n","import { ReactNode } from 'react';\nimport { useSimpleMediaPlayer } from '../../hooks/useSimpleMediaPlayer';\nimport { SingleAudio, SingleVideo } from '../../features/rendering-strategy/resource-types';\nimport { MediaPlayerProvider } from '../../context/MediaContext';\nimport { CanvasPortal } from '../../context/PortalContext';\n\nexport function Video({ media, children }: { media: SingleVideo; children: ReactNode }) {\n const [{ element, currentTime, progress }, state, actions] = useSimpleMediaPlayer({ duration: media.duration });\n const Component = 'div' as any;\n\n return (\n <>\n <CanvasPortal overlay>\n <style>\n {`\n .video-container {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: #000;\n z-index: 13;\n display: flex;\n justify-content: center;\n pointer-events: visible;\n }\n `}\n </style>\n <Component className=\"video-container\" part=\"video-container\" onClick={() => actions.playPause()}>\n <video ref={element as any} src={media.url} style={{ width: '100%', objectFit: 'contain' }} />\n </Component>\n </CanvasPortal>\n <CanvasPortal>\n <MediaPlayerProvider\n state={state}\n actions={actions}\n currentTime={currentTime}\n progress={progress}\n element={element}\n >\n {children}\n </MediaPlayerProvider>\n </CanvasPortal>\n </>\n );\n}\n","// @ts-ignore\nimport ModelViewer from 'react-model-viewer';\nimport { CanvasPortal } from '../../context/PortalContext';\n\nexport function Model({ model }: { model: any }) {\n return (\n <CanvasPortal overlay>\n <style>\n {`\n .model-container {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: #000;\n z-index: 13;\n display: flex;\n justify-content: center;\n pointer-events: visible;\n }\n `}\n </style>\n <div className=\"model-container\">\n {/*@ts-ignore*/}\n <model-viewer\n interaction-prompt=\"none\"\n style={{ width: '100%', height: '100%' }}\n camera-controls=\"\"\n ar-status=\"not-presenting\"\n src={model.id}\n />\n </div>\n </CanvasPortal>\n );\n}\n","import { BoxStyle } from '@atlas-viewer/atlas';\nimport { useCanvas } from '../../hooks/useCanvas';\n\nexport function CanvasBackground({ style }: { style?: BoxStyle }) {\n const canvas = useCanvas();\n\n if (!canvas || !canvas.height || !canvas.width) {\n return null;\n }\n\n return <box interactive={false} target={{ x: 0, y: 0, width: canvas.width, height: canvas.height }} style={style} />;\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nimport React, { useContext, useState, useRef, useEffect, useMemo } from \"react\";\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps)\n _defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nvar defaultOptions = {\n bindI18n: \"languageChanged\",\n bindI18nStore: \"\",\n transEmptyNodeValue: \"\",\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: \"\",\n transKeepBasicHtmlNodesFor: [\"br\", \"strong\", \"i\", \"p\"],\n useSuspense: true\n};\nvar i18nInstance;\nvar I18nContext = React.createContext();\nfunction getDefaults() {\n return defaultOptions;\n}\nvar ReportNamespaces = function() {\n function ReportNamespaces2() {\n _classCallCheck(this, ReportNamespaces2);\n this.usedNamespaces = {};\n }\n _createClass(ReportNamespaces2, [{\n key: \"addUsedNamespaces\",\n value: function addUsedNamespaces(namespaces) {\n var _this = this;\n namespaces.forEach(function(ns) {\n if (!_this.usedNamespaces[ns])\n _this.usedNamespaces[ns] = true;\n });\n }\n }, {\n key: \"getUsedNamespaces\",\n value: function getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n }]);\n return ReportNamespaces2;\n}();\nfunction getI18n() {\n return i18nInstance;\n}\nfunction warn() {\n if (console && console.warn) {\n var _console;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (typeof args[0] === \"string\")\n args[0] = \"react-i18next:: \".concat(args[0]);\n (_console = console).warn.apply(_console, args);\n }\n}\nvar alreadyWarned = {};\nfunction warnOnce() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === \"string\" && alreadyWarned[args[0]])\n return;\n if (typeof args[0] === \"string\")\n alreadyWarned[args[0]] = new Date();\n warn.apply(void 0, args);\n}\nfunction loadNamespaces(i18n, ns, cb) {\n i18n.loadNamespaces(ns, function() {\n if (i18n.isInitialized) {\n cb();\n } else {\n var initialized = function initialized2() {\n setTimeout(function() {\n i18n.off(\"initialized\", initialized2);\n }, 0);\n cb();\n };\n i18n.on(\"initialized\", initialized);\n }\n });\n}\nfunction hasLoadedNamespace(ns, i18n) {\n var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(\"i18n.languages were undefined or empty\", i18n.languages);\n return true;\n }\n var lng = i18n.languages[0];\n var fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n var lastLng = i18n.languages[i18n.languages.length - 1];\n if (lng.toLowerCase() === \"cimode\")\n return true;\n var loadNotPending = function loadNotPending2(l, n) {\n var loadState = i18n.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n };\n if (options.bindI18n && options.bindI18n.indexOf(\"languageChanging\") > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns))\n return false;\n if (i18n.hasResourceBundle(lng, ns))\n return true;\n if (!i18n.services.backendConnector.backend)\n return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns)))\n return true;\n return false;\n}\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr))\n return arr;\n}\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null)\n return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i)\n break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null)\n _i[\"return\"]();\n } finally {\n if (_d)\n throw _e;\n }\n }\n return _arr;\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length)\n len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o)\n return;\n if (typeof o === \"string\")\n return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor)\n n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\")\n return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))\n return _arrayLikeToArray(o, minLen);\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function(key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction useTranslation(ns) {\n var props = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n var i18nFromProps = props.i18n;\n var _ref = useContext(I18nContext) || {}, i18nFromContext = _ref.i18n, defaultNSFromContext = _ref.defaultNS;\n var i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces)\n i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce(\"You will need to pass in an i18next instance by using initReactI18next\");\n var notReadyT = function notReadyT2(k) {\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n var retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n if (i18n.options.react && i18n.options.react.wait !== void 0)\n warnOnce(\"It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.\");\n var i18nOptions = _objectSpread(_objectSpread(_objectSpread({}, getDefaults()), i18n.options.react), props);\n var useSuspense = i18nOptions.useSuspense, keyPrefix = i18nOptions.keyPrefix;\n var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = typeof namespaces === \"string\" ? [namespaces] : namespaces || [\"translation\"];\n if (i18n.reportNamespaces.addUsedNamespaces)\n i18n.reportNamespaces.addUsedNamespaces(namespaces);\n var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function(n) {\n return hasLoadedNamespace(n, i18n, i18nOptions);\n });\n function getT() {\n return i18n.getFixedT(null, i18nOptions.nsMode === \"fallback\" ? namespaces : namespaces[0], keyPrefix);\n }\n var _useState = useState(getT), _useState2 = _slicedToArray(_useState, 2), t = _useState2[0], setT = _useState2[1];\n var isMounted = useRef(true);\n useEffect(function() {\n var bindI18n = i18nOptions.bindI18n, bindI18nStore = i18nOptions.bindI18nStore;\n isMounted.current = true;\n if (!ready && !useSuspense) {\n loadNamespaces(i18n, namespaces, function() {\n if (isMounted.current)\n setT(getT);\n });\n }\n function boundReset() {\n if (isMounted.current)\n setT(getT);\n }\n if (bindI18n && i18n)\n i18n.on(bindI18n, boundReset);\n if (bindI18nStore && i18n)\n i18n.store.on(bindI18nStore, boundReset);\n return function() {\n isMounted.current = false;\n if (bindI18n && i18n)\n bindI18n.split(\" \").forEach(function(e) {\n return i18n.off(e, boundReset);\n });\n if (bindI18nStore && i18n)\n bindI18nStore.split(\" \").forEach(function(e) {\n return i18n.store.off(e, boundReset);\n });\n };\n }, [i18n, namespaces.join()]);\n var isInitial = useRef(true);\n useEffect(function() {\n if (isMounted.current && !isInitial.current) {\n setT(getT);\n }\n isInitial.current = false;\n }, [i18n]);\n var ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready)\n return ret;\n if (!ready && !useSuspense)\n return ret;\n throw new Promise(function(resolve) {\n loadNamespaces(i18n, namespaces, function() {\n resolve();\n });\n });\n}\nfunction LanguageString(_a) {\n var _b = _a, {\n as: Component,\n language,\n children\n } = _b, props = __objRest(_b, [\n \"as\",\n \"language\",\n \"children\"\n ]);\n const { i18n } = useTranslation();\n const viewingDirection = useMemo(() => i18n.dir ? i18n.dir(language) : \"ltr\", [language]);\n const isSame = useMemo(() => {\n if (!i18n.services) {\n return false;\n }\n return i18n.services.languageUtils.getLanguagePartFromCode(i18n.language) === i18n.services.languageUtils.getLanguagePartFromCode(language);\n }, [i18n.language, language]);\n if (isSame) {\n if (Component) {\n return /* @__PURE__ */ React.createElement(Component, __spreadValues({}, props), children);\n }\n return /* @__PURE__ */ React.createElement(\"span\", __spreadValues({}, props), children);\n }\n if (Component) {\n return /* @__PURE__ */ React.createElement(Component, __spreadProps(__spreadValues({}, props), {\n lang: language,\n dir: viewingDirection\n }), children);\n }\n return /* @__PURE__ */ React.createElement(\"span\", __spreadProps(__spreadValues({}, props), {\n lang: language,\n dir: viewingDirection\n }), children);\n}\nfunction getClosestLanguage(i18nLanguage, languages, i18nLanguages = [], strictFallback = false) {\n if (!i18nLanguage || !languages || languages.length === 0) {\n return void 0;\n }\n if (languages.length === 1) {\n return languages[0];\n }\n if (languages.indexOf(i18nLanguage) !== -1) {\n return i18nLanguage;\n }\n const root = i18nLanguage.indexOf(\"-\") !== -1 ? i18nLanguage.slice(0, i18nLanguage.indexOf(\"-\")) : null;\n if (root && languages.indexOf(root) !== -1) {\n return root;\n }\n for (const lang of i18nLanguages) {\n if (languages.indexOf(lang) !== -1) {\n return lang;\n }\n }\n if (!strictFallback) {\n const inverseRoot = languages.map((l) => l.indexOf(\"-\") !== -1 ? l.slice(0, l.indexOf(\"-\")) : null);\n const inverseIdx = inverseRoot.indexOf(i18nLanguage);\n if (inverseIdx !== -1) {\n return languages[inverseIdx];\n }\n for (const lang of i18nLanguages) {\n const root2 = lang.indexOf(\"-\") !== -1 ? lang.slice(0, lang.indexOf(\"-\")) : null;\n const inverseIdx2 = root2 ? languages.indexOf(root2) : -1;\n if (inverseIdx2 !== -1) {\n return languages[inverseIdx2];\n }\n }\n }\n if (languages.indexOf(\"none\") !== -1) {\n return \"none\";\n }\n if (languages.indexOf(\"@none\") !== -1) {\n return \"@none\";\n }\n return languages[0];\n}\nfunction buildLocaleString(inputText, i18nLanguage, options = {}) {\n const { strictFallback = false, defaultText = \"\", separator = \"\\n\", fallbackLanguages = [], closest } = options;\n const languages = Object.keys(inputText || {});\n const language = closest ? i18nLanguage : getClosestLanguage(i18nLanguage, languages, fallbackLanguages, strictFallback);\n if (!inputText) {\n return defaultText;\n }\n if (typeof inputText === \"string\") {\n return inputText;\n }\n const candidateText = language ? inputText[language] : void 0;\n if (candidateText) {\n if (typeof candidateText === \"string\") {\n return candidateText;\n }\n return candidateText.join(separator);\n }\n return \"\";\n}\nfunction useClosestLanguage(getLanguages, deps = []) {\n const { i18n } = useTranslation();\n const i18nLanguages = i18n && i18n.languages ? i18n.languages : [];\n const i18nLanguage = i18n && i18n.language ? i18n.language : \"en\";\n return useMemo(() => {\n const languages = getLanguages();\n return getClosestLanguage(i18nLanguage, languages, i18nLanguages);\n }, [i18nLanguages, i18nLanguage, ...deps]);\n}\nfunction useLocaleString(inputText, defaultText) {\n const language = useClosestLanguage(() => Object.keys(inputText || {}), [inputText]);\n return [\n useMemo(() => {\n return buildLocaleString(inputText, language, {\n defaultText,\n closest: true\n });\n }, [language, defaultText, inputText]),\n language\n ];\n}\nconst LocaleString = (_c) => {\n var _d = _c, { as: Component, defaultText, enableDangerouslySetInnerHTML, children } = _d, props = __objRest(_d, [\"as\", \"defaultText\", \"enableDangerouslySetInnerHTML\", \"children\"]);\n const [text, language] = useLocaleString(children, defaultText);\n if (language) {\n return /* @__PURE__ */ React.createElement(LanguageString, __spreadProps(__spreadValues({}, props), {\n as: Component,\n language,\n title: enableDangerouslySetInnerHTML ? void 0 : text,\n dangerouslySetInnerHTML: enableDangerouslySetInnerHTML ? {\n __html: text\n } : void 0\n }), enableDangerouslySetInnerHTML ? void 0 : text);\n }\n if (Component) {\n return /* @__PURE__ */ React.createElement(Component, __spreadValues({}, props), text);\n }\n return /* @__PURE__ */ React.createElement(\"span\", __spreadProps(__spreadValues({}, props), {\n title: enableDangerouslySetInnerHTML ? void 0 : text,\n dangerouslySetInnerHTML: enableDangerouslySetInnerHTML ? {\n __html: text\n } : void 0\n }), enableDangerouslySetInnerHTML ? void 0 : text);\n};\nfunction useCreateLocaleString() {\n const { i18n } = useTranslation();\n const i18nLanguages = i18n && i18n.languages ? i18n.languages : [];\n const i18nLanguage = i18n && i18n.language ? i18n.language : \"en\";\n return function createLocaleString(inputText, defaultText) {\n return buildLocaleString(inputText, i18nLanguage, { fallbackLanguages: i18nLanguages, defaultText });\n };\n}\nexport { LanguageString, LocaleString, useClosestLanguage, useCreateLocaleString, useLocaleString };\n//# sourceMappingURL=react-i18next.mjs.map\n","import { createStylesHelper } from '@iiif/vault-helpers/styles';\nimport { RenderImage } from './Image';\nimport React, { Fragment, ReactNode, useEffect, useLayoutEffect, useMemo } from 'react';\nimport { BoxStyle, HTMLPortal } from '@atlas-viewer/atlas';\nimport { useVirtualAnnotationPageContext } from '../../hooks/useVirtualAnnotationPageContext';\nimport { ChoiceDescription } from '../../features/rendering-strategy/choice-types';\nimport { StrategyActions, useRenderingStrategy } from '../../hooks/useRenderingStrategy';\nimport { useVault } from '../../hooks/useVault';\nimport { useResourceEvents } from '../../hooks/useResourceEvents';\nimport { useThumbnail } from '../../hooks/useThumbnail';\nimport { useCanvas } from '../../hooks/useCanvas';\nimport { RenderAnnotationPage } from './AnnotationPage';\nimport { Audio } from './Audio';\nimport { EmptyStrategy, MediaStrategy, RenderingStrategy } from '../../features/rendering-strategy/strategies';\nimport { Video } from './Video';\nimport { Model } from './Model';\nimport { CanvasContext } from '../../context/CanvasContext';\nimport { SingleImageStrategy } from '../../features/rendering-strategy/image-strategy';\nimport { CanvasPortal } from '../../context/PortalContext';\nimport { CanvasBackground } from './CanvasBackground';\nimport { ImageWithOptionalService } from '../../features/rendering-strategy/resource-types';\nimport { LocaleString } from '@iiif/vault-helpers/react-i18next';\n\ntype CanvasProps = {\n x?: number;\n y?: number;\n onCreated?: any;\n onChoiceChange?: (choice?: ChoiceDescription) => void;\n registerActions?: (actions: StrategyActions) => void;\n defaultChoices?: Array<{ id: string; opacity?: number }>;\n isStatic?: boolean;\n children?: ReactNode;\n renderViewerControls?: (strategy: SingleImageStrategy | EmptyStrategy) => ReactNode;\n renderMediaControls?: (strategy: MediaStrategy) => ReactNode;\n strategies?: Array<RenderingStrategy['type']>;\n backgroundStyle?: BoxStyle;\n alwaysShowBackground?: boolean;\n onClickPaintingAnnotation?: (id: string, image: ImageWithOptionalService, e: any) => void;\n};\n\nexport function RenderCanvas({\n x,\n y,\n onChoiceChange,\n registerActions,\n defaultChoices,\n isStatic,\n renderViewerControls,\n renderMediaControls,\n strategies,\n backgroundStyle,\n alwaysShowBackground,\n onClickPaintingAnnotation,\n children,\n}: CanvasProps) {\n const canvas = useCanvas();\n const elementProps = useResourceEvents(canvas, ['deep-zoom']);\n const [virtualPage] = useVirtualAnnotationPageContext();\n const vault = useVault();\n const helper = useMemo(() => createStylesHelper(vault), [vault]);\n const [strategy, actions] = useRenderingStrategy({\n strategies: strategies || ['images'],\n defaultChoices: defaultChoices?.map(({ id }) => id),\n });\n const choice = strategy.type === 'images' ? strategy.choice : undefined;\n\n useEffect(() => {\n if (registerActions) {\n registerActions(actions);\n }\n }, [strategy.annotations]);\n\n useEffect(() => {\n if (defaultChoices) {\n for (const choice of defaultChoices) {\n if (typeof choice.opacity !== 'undefined') {\n helper.applyStyles({ id: choice.id }, 'atlas', {\n opacity: choice.opacity,\n });\n }\n }\n }\n }, [defaultChoices]);\n\n useLayoutEffect(() => {\n if (onChoiceChange) {\n onChoiceChange(choice);\n }\n }, [choice]);\n\n const thumbnail = useThumbnail({ maxWidth: 256, maxHeight: 256 });\n\n if (!canvas) {\n return null;\n }\n\n // accompanyingCanvas\n const accompanyingCanvas = canvas.accompanyingCanvas;\n\n const thumbnailFallbackImage =\n thumbnail && thumbnail.type === 'fixed' ? (\n <world-object height={canvas.height} width={canvas.width} x={x} y={y}>\n <world-image\n uri={thumbnail.id}\n target={{ x: 0, y: 0, width: canvas.width, height: canvas.height }}\n display={\n thumbnail.width && thumbnail.height\n ? {\n width: thumbnail.width,\n height: thumbnail.height,\n }\n : undefined\n }\n />\n </world-object>\n ) : null;\n\n if (strategy.type === 'unknown') {\n if (thumbnailFallbackImage) {\n return thumbnailFallbackImage;\n }\n\n throw new Error(strategy.reason || 'Unknown image strategy');\n }\n\n const annotations = (\n <Fragment>\n {virtualPage ? <RenderAnnotationPage page={virtualPage} /> : null}\n {strategy.annotations && strategy.annotations.pages\n ? strategy.annotations.pages.map((page) => {\n return <RenderAnnotationPage key={page.id} page={page} />;\n })\n : null}\n {children}\n </Fragment>\n );\n\n return (\n <>\n <world-object\n key={`${canvas.id}/${strategy.type}`}\n height={canvas.height}\n width={canvas.width}\n x={x}\n y={y}\n {...elementProps}\n >\n {strategy.type === 'empty' || alwaysShowBackground ? <CanvasBackground style={backgroundStyle} /> : null}\n {strategy.type === 'textual-content'\n ? strategy.items.map((item, n) => {\n return (\n <>\n <HTMLPortal\n key={n}\n // @ts-ignore\n onClick={\n onClickPaintingAnnotation\n ? (e: any) => {\n e.stopPropagation();\n onClickPaintingAnnotation(item.annotationId, item as any, e);\n }\n : undefined\n }\n target={(item.target as any).spatial || undefined}\n >\n <LocaleString>{item.text}</LocaleString>\n </HTMLPortal>\n {annotations}\n </>\n );\n })\n : null}\n {strategy.type === 'images' ? (\n <>\n {strategy.images.map((image, idx) => (\n <RenderImage\n isStatic={isStatic}\n key={image.id}\n image={image}\n id={image.id}\n thumbnail={idx === 0 ? thumbnail : undefined}\n onClick={\n onClickPaintingAnnotation\n ? (e) => {\n e.stopPropagation();\n onClickPaintingAnnotation(image.annotationId, image, e);\n }\n : undefined\n }\n />\n ))}\n {annotations}\n </>\n ) : null}\n {(strategy.type === 'images' || strategy.type === 'empty' || strategy.type === 'textual-content') &&\n renderViewerControls ? (\n <CanvasPortal overlay>{renderViewerControls(strategy as any)}</CanvasPortal>\n ) : null}\n {strategy.type === '3d-model' ? <Model model={strategy.model} /> : null}\n {strategy.type === 'media' ? (\n <>\n {strategy.media.type === 'Sound' ? (\n <Audio media={strategy.media}>\n {thumbnailFallbackImage}\n {renderMediaControls ? renderMediaControls(strategy) : null}\n </Audio>\n ) : strategy.media.type === 'Video' ? (\n <Video media={strategy.media}>\n {thumbnailFallbackImage}\n {renderMediaControls ? renderMediaControls(strategy) : null}\n </Video>\n ) : null}\n </>\n ) : null}\n {/* This is required to fix a race condition. */}\n </world-object>\n {strategy.type === 'media' && strategy.media.type === 'Sound' && accompanyingCanvas ? (\n <CanvasContext canvas={accompanyingCanvas.id}>\n <RenderCanvas renderViewerControls={renderViewerControls} />\n </CanvasContext>\n ) : null}\n </>\n );\n}\n","import { Viewer } from './Viewer';\nimport { RenderAnnotation } from './render/Annotation';\nimport { RenderAnnotationPage } from './render/AnnotationPage';\nimport { RenderCanvas } from './render/Canvas';\nimport { RenderImage } from './render/Image';\nimport { CanvasBackground } from './render/CanvasBackground';\n\nexport const CanvasPanel = {\n RenderImage,\n RenderCanvas,\n RenderAnnotationPage,\n RenderAnnotation,\n Viewer,\n CanvasBackground,\n};\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function AnnotationContext({ annotation, children }: { annotation: string; children: ReactNode }) {\n return <ResourceProvider value={{ annotation }}>{children}</ResourceProvider>;\n}\n","import React, { ReactNode } from 'react';\nimport { ResourceProvider } from './ResourceContext';\n\nexport function AnnotationPageContext({ annotationPage, children }: { annotationPage: string; children: ReactNode }) {\n return <ResourceProvider value={{ annotationPage }}>{children}</ResourceProvider>;\n}\n","import { ResourceProvider } from './ResourceContext';\nimport React, { ReactNode } from 'react';\n\nexport function CollectionContext({ collection, children }: { collection: string; children: ReactNode }) {\n return <ResourceProvider value={{ collection }}>{children}</ResourceProvider>;\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { AnnotationPageNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useAnnotationPage(options?: { id: string }): AnnotationPageNormalized | undefined;\nexport function useAnnotationPage<T>(\n options?: { id: string; selector: (annotation: AnnotationPageNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useAnnotationPage<T = AnnotationPageNormalized>(\n options: {\n id?: string;\n selector?: (annotation: AnnotationPageNormalized) => T;\n } = {},\n deps: any[] = []\n): AnnotationPageNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const annotationPageId = id ? id : ctx.annotationPage;\n\n const annotationPage = useVaultSelector(\n (s) => (annotationPageId ? s.iiif.entities.AnnotationPage[annotationPageId] : undefined),\n [annotationPageId]\n );\n\n return useMemo(() => {\n if (!annotationPage) {\n return undefined;\n }\n\n if (selector) {\n return selector(annotationPage);\n }\n return annotationPage;\n }, [annotationPage, ...deps]);\n}\n","// This works under a canvas context\n// The canvas must have a duration\n// When given a timestamp (ms) from the canvas clock will return a list of annotations\n// that need to be painted.\nimport { AnnotationNormalized } from '@iiif/presentation-3';\nimport { usePaintingAnnotations } from './usePaintingAnnotations';\n\nexport function useAnnotationsAtTime(time: number, options: { canvasId?: string } = {}): AnnotationNormalized[] {\n const allAnnotations = usePaintingAnnotations(options);\n\n // @todo filter.\n\n return allAnnotations;\n}\n","// This will be valid under a canvas.\n// It will be an interface for controlling a virtual clock.\n// It will take in some configuration, like frequency\n// and return some data, like current time\n// It will also provide some methods, like high performance syncing for media\n// And it will also have some basic hooks into the HTML audio/video elements to sync those.\n// Other methods for controlling the clock would be:\n// - set current time\n// - fast forward\n// - rewind\n// - set playback speed\n//\n// Other hooks might come out for priority updates. Like: useLowPriorityCanvasClock(), which will update at a preset\n// lower tick rate.\n\nexport function useCanvasClock(canvasId?: string, autoplay = false) {\n /*\n const canvas = useCanvas(canvasId ? { id: canvasId } : undefined);\n if (!canvas || typeof canvas.duration === 'undefined') {\n throw new Error('Unsupported or undefined canvas');\n }\n\n const update = useUpdate();\n const [lastCall, setLastCall] = useState(0);\n const [currentTime, setCurrentTime] = useState(0);\n\n const [loopStop, loopStart, isActive] = useRafLoop((time) => {\n const timeInSeconds = lastCall === 0 ? 0 : (time - lastCall) / 1000;\n if (currentTime + timeInSeconds < canvas.duration) {\n setCurrentTime((t) => t + timeInSeconds);\n } else {\n setCurrentTime(canvas.duration);\n loopStop();\n }\n setLastCall(time);\n }, autoplay);\n\n const play = useCallback(() => {\n if (currentTime === canvas.duration) {\n setCurrentTime(0);\n setLastCall(0);\n }\n loopStart();\n update();\n }, [currentTime, loopStart, update]);\n\n const pause = useCallback(() => {\n loopStop();\n update();\n }, [loopStop, update]);\n\n return {\n isPlaying: isActive(),\n currentTime,\n duration: canvas.duration,\n play,\n pause,\n seek: setCurrentTime,\n };\n\n */\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { Reference } from '@iiif/presentation-3';\nimport { useVaultSelector } from './useVaultSelector';\nimport { IIIFStore } from '@iiif/vault';\n\nexport function useCanvasSubset(idsOrRefs?: Array<string | Reference>) {\n const ctx = useResourceContext();\n const manifestId = ctx.manifest;\n const refs = idsOrRefs ? idsOrRefs.map((item) => (typeof item === 'string' ? item : item?.id)) : [];\n return useVaultSelector(\n (s: IIIFStore) => {\n const manifest = manifestId ? s.iiif.entities.Manifest[manifestId] : undefined;\n const items = manifest?.items || [];\n\n if (typeof idsOrRefs === 'undefined') {\n return items;\n }\n\n const newItems = [];\n for (const item of manifest?.items || []) {\n if (refs.indexOf(item.id) !== -1) {\n newItems.push(item);\n }\n }\n\n return newItems;\n },\n [refs.join('/')]\n );\n}\n","import { useResourceContext } from '../context/ResourceContext';\nimport { CollectionNormalized } from '@iiif/presentation-3';\nimport { useMemo } from 'react';\nimport { useVaultSelector } from './useVaultSelector';\n\nexport function useCollection(options: { id: string }): CollectionNormalized | undefined;\nexport function useCollection<T>(\n options: { id: string; selector: (collection: CollectionNormalized) => T },\n deps?: any[]\n): T | undefined;\nexport function useCollection<T = CollectionNormalized>(\n options: {\n id?: string;\n selector?: (collection: CollectionNormalized) => T;\n },\n deps: any[] = []\n): CollectionNormalized | T | undefined {\n const { id, selector } = options;\n const ctx = useResourceContext();\n const collectionId = id ? id : ctx.collection;\n\n const collection = useVaultSelector(\n (s) => (collectionId ? s.iiif.entities.Collection[collectionId] : undefined),\n [collectionId]\n );\n\n return useMemo(() => {\n if (!collection) {\n return undefined;\n }\n if (selector) {\n return selector(collection);\n }\n return collection;\n }, [collection, selector, ...deps]);\n}\n","import { Reference } from '@iiif/presentation-3';\nimport { useVault } from './useVault';\nimport { useEffect, useMemo } from 'react';\nimport { createEventsHelper } from '@iiif/vault-helpers/events';\n\ntype SupportedEvents = 'onClick';\n\nexport function useEventListener<T>(\n resource: Reference,\n name: SupportedEvents,\n listener: (e: any, resource: T) => void,\n scope?: string[],\n deps: any[] = []\n) {\n const vault = useVault();\n const helper = useMemo(() => createEventsHelper(vault), [vault]);\n\n useEffect(() => {\n const currentResource = resource;\n if (!currentResource) {\n return () => {\n //\n };\n }\n helper.addEventListener(currentResource, name, listener, scope);\n return () => {\n helper.removeEventListener(currentResource, name, listener);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [helper, resource, name, ...deps]);\n}\n","import { globalVault } from '@iiif/vault';\nimport { useContext } from 'react';\nimport { ReactVaultContext } from '../context/VaultContext';\n\nexport function useExistingVault() {\n const oldContext: any = useContext(ReactVaultContext);\n\n return oldContext && oldContext.vault ? (oldContext.vault as any) : globalVault();\n}\n","import { CollectionNormalized } from '@iiif/presentation-3';\nimport { ResourceRequestOptions, useExternalResource } from './useExternalResource';\n\nexport function useExternalCollection(\n idOrRef: string | { id: string; type: string },\n options?: ResourceRequestOptions\n): {\n id: string;\n requestId: string;\n isLoaded: boolean;\n cached?: boolean;\n error: any;\n manifest?: CollectionNormalized;\n} {\n const { id, isLoaded, error, resource, requestId, cached } = useExternalResource<CollectionNormalized>(\n idOrRef,\n options\n );\n\n return { id, isLoaded, error, manifest: resource, requestId, cached };\n}\n","import { usePaintingAnnotations } from './usePaintingAnnotations';\nimport { getImageServices } from '@atlas-viewer/iiif-image-api';\nimport { useCanvas } from './useCanvas';\nimport { useVault } from './useVault';\nimport { IIIFExternalWebResource, ImageService } from '@iiif/presentation-3';\nimport { useImageServiceLoader } from '../context/ImageServiceLoaderContext';\nimport { useEffect, useMemo, useState } from 'react';\n\nexport interface ImageServiceRequestOptions {\n cacheKey?: string;\n}\n\n/**\n * Returns the First image service on the current canvas.\n *\n * @note It is better to use the hook useRenderingStrategy for rendering.\n */\nexport function useImageService({ cacheKey }: ImageServiceRequestOptions = {}): {\n data: ImageService | undefined;\n isFetching: boolean;\n status: 'error' | 'success' | 'loading' | 'idle';\n} {\n const canvas = useCanvas();\n const annotations = usePaintingAnnotations();\n const vault = useVault();\n const imageService = useImageServiceLoader();\n const [_data, setData] = useState<ImageService | undefined>(undefined);\n const [isFetching, setIsFetching] = useState(false);\n const [status, setStatus] = useState<'error' | 'success' | 'loading' | 'idle'>('idle');\n const [error, setError] = useState<Error | undefined>(undefined);\n const key = canvas ? canvas.id : 'undefined';\n const initialData = useMemo(() => {\n try {\n if (canvas && annotations.length) {\n const annotation = annotations[0];\n const resource = vault.get<IIIFExternalWebResource>(annotation.body[0]);\n const imageServices = getImageServices(resource as any);\n const firstImageService = imageServices[0];\n\n if (!firstImageService) {\n return undefined;\n }\n\n return (\n imageService.loadServiceSync({\n id: firstImageService.id || (firstImageService['@id'] as string),\n width: firstImageService.width || canvas.width,\n height: firstImageService.height || canvas.height,\n }) || undefined\n );\n }\n } catch (e) {\n console.error(e);\n // silent error.\n }\n\n return undefined;\n\n // This is specifically not exhaustive. We only want to try to loadSync initially or when the canvas changes.\n }, [key, cacheKey, canvas]);\n\n const data = status === 'success' && _data ? _data : initialData;\n\n useEffect(() => {\n (async () => {\n try {\n if (canvas && annotations.length) {\n const annotation = annotations[0];\n const resource = vault.get<IIIFExternalWebResource>(annotation.body[0]);\n const imageServices = getImageServices(resource as any) as any[];\n const firstImageService = imageServices[0] as any;\n\n if (!firstImageService) {\n return;\n }\n\n setIsFetching(true);\n setStatus('loading');\n\n try {\n const loadedService =\n (await imageService.loadService({\n id: firstImageService.id || firstImageService['@id'],\n width: firstImageService.width || canvas.width,\n height: firstImageService.height || canvas.height,\n })) || undefined;\n\n setData(loadedService);\n setStatus('success');\n setIsFetching(false);\n } catch (err) {\n setStatus('error');\n setError(err as Error);\n }\n }\n } catch (err) {\n setStatus('error');\n setError(err as Error);\n }\n })();\n\n // It's important that this DOESN'T refresh every time there is a new canvas change.\n // In an editing situation, the cache key should be used.\n }, [key, cacheKey]);\n\n return useMemo(() => {\n return {\n data,\n isFetching,\n status,\n error,\n };\n }, [data, isFetching, status, error]);\n}\n","import { useImageService } from './useImageService';\nimport { ImageService } from '@iiif/presentation-3';\n\nexport function useImageTile() {\n const imageService = useImageService();\n\n return {\n isLoading: imageService.isFetching,\n tile: imageService.data\n ? {\n id: imageService.data.id || imageService.data['@id'],\n width: imageService.data.width,\n height: imageService.data.height,\n imageService: imageService.data as ImageService,\n thumbnail: undefined,\n }\n : null,\n };\n}\n","// This works inside of a manifest context\n// Final API to be decided, but this hook will be for driving search querying itself\n// Another hook/context will handle actually getting the search results for a particular canvas\nimport { useManifest } from './useManifest';\nimport { SearchService, ServiceNormalized } from '@iiif/presentation-3';\n\nexport function useSearchService(): SearchService | undefined {\n const manifest = useManifest();\n return manifest\n ? (manifest.service.find(\n (service: ServiceNormalized) =>\n service.profile === 'SearchService1' || service.profile === 'http://iiif.io/api/search/1/search'\n ) as any)\n : undefined;\n}\n","import { useVault } from './useVault';\nimport { createStylesHelper } from '@iiif/vault-helpers/styles';\nimport { useMemo } from 'react';\n\nexport function useStyleHelper() {\n const vault = useVault();\n return useMemo(() => createStylesHelper(vault), [vault]);\n}\n"],"names":["setPrototypeOf","defaultResourceContext","collection","undefined","manifest","range","canvas","annotation","annotationPage","ResourceReactContext","React","createContext","useResourceContext","useContext","value","children","parentContext","newContext","useMemo","_jsx","ReactVaultContext","vault","setVaultInstance","vaultOptions","useGlobal","resources","vaultInstance","useState","globalVault","Vault","VisibleCanvasReactContext","ids","useVaultSelector","state","map","id","iiif","entities","Canvas","filter","Boolean","noop","SimpleViewerReactContext","setCurrentCanvasId","setCurrentCanvasIndex","nextCanvas","previousCanvas","items","sequence","setSequenceIndex","currentSequenceIndex","props","useManifest","cursor","visibleItems","next","setCanvasIndex","setCanvasId","previous","useCanvasSequence","startCanvas","disablePaging","pagingEnabled","ctx","totalCanvases","length","console","warn","useExternalManifest","isLoaded","inner","rangeId","VaultContext","ResourceContext","bridge","VirtualAnnotationPageContext","fullPage","addAnnotation","removeAnnotation","useVirtualAnnotationPage","width","style","height","minHeight","background","ViewerPresetContext","PortalContext","OverlayPortalContext","overlay","htmlElement","preset","useViewerPreset","useLayoutEffect","render","e","errorFallback","outerContainerProps","portal","useRef","portalElement","setPortalElement","viewerPreset","setViewerPreset","overlayPortal","overlayPortalElement","setOverlayPortalElement","useContextBridge","ErrorFallback","DefaultCanvasFallback","roots","current","$el","document","createElement","appendChild","createRoot","setTimeout","unmount","position","containerProps","onCreated","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","RenderAnnotation","defaultStyle","className","interactive","useAnnotation","useStyles","html","events","useResourceEvents","useCanvas","allStyles","mergeStyles","isValid","target","selector","type","source","spatial","href","title","RenderAnnotationPage","page","AnnotationPage","image","thumbnail","isStatic","x","y","onClick","service","_jsxs","imageService","expandTarget","getMeta","ImageServiceLoaderContext","ImageServiceLoader","MediaReactContextState","MediaReactContextActions","MediaReactContextElements","Error","actions","currentTime","progress","element","media","useSimpleMediaPlayer","duration","_Fragment","url","Component","playPause","objectFit","model","Object","defineProperty","defineProperties","getOwnPropertyDescriptors","getOwnPropertySymbols","prototype","hasOwnProperty","propertyIsEnumerable","obj","key","enumerable","configurable","writable","a","b","prop","call","__objRest","exclude","indexOf","instance","Constructor","TypeError","i","descriptor","protoProps","staticProps","_defineProperties","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","i18nInstance","I18nContext","ReportNamespaces","_classCallCheck","ReportNamespaces2","usedNamespaces","_createClass","namespaces","_this","forEach","ns","keys","_console","_len","arguments","args","Array","_key","concat","apply","alreadyWarned","_len2","_key2","Date","i18n","cb","loadNamespaces","isInitialized","initialized","off","initialized2","on","options","languages","warnOnce","lng","fallbackLng","lastLng","toLowerCase","loadNotPending","l","n","loadState","services","backendConnector","backend","isLanguageChangingTo","hasResourceBundle","arr","isArray","_i","Symbol","iterator","_arr","_n","_d","_s","_e","done","push","err","len","arr2","o","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","object","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","ownKeys","_defineProperty","i18nFromProps","_ref","i18nFromContext","defaultNSFromContext","defaultNS","getI18n","reportNamespaces","notReadyT","k","retNotReady","t","ready","react","wait","i18nOptions","_objectSpread","getDefaults","keyPrefix","addUsedNamespaces","initializedStoreOnce","every","hasLoadedNamespace","getFixedT","nsMode","_useState","getT","_useState2","_slicedToArray","setT","isMounted","useEffect","boundReset","store","split","join","isInitial","ret","Promise","resolve","_a","_b","as","language","useTranslation","viewingDirection","dir","isSame","languageUtils","getLanguagePartFromCode","lang","i18nLanguage","i18nLanguages","strictFallback","root","inverseRoot","inverseIdx","root2","inverseIdx2","inputText","defaultText","separator","fallbackLanguages","closest","getClosestLanguage","candidateText","getLanguages","deps","useClosestLanguage","buildLocaleString","LocaleString","_c","enableDangerouslySetInnerHTML","text","useLocaleString","dangerouslySetInnerHTML","__html","onChoiceChange","registerActions","defaultChoices","renderViewerControls","renderMediaControls","strategies","backgroundStyle","alwaysShowBackground","onClickPaintingAnnotation","elementProps","virtualPage","useVirtualAnnotationPageContext","useVault","helper","createStylesHelper","strategy","useRenderingStrategy","choice","annotations","opacity","applyStyles","useThumbnail","maxWidth","maxHeight","accompanyingCanvas","thumbnailFallbackImage","reason","pages","item","stopPropagation","annotationId","images","idx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAe,yBAAyB,GAAG,GAAG;AAC5C,oBAAkB,OAAO,kBAAkB,0BAAyB,IAAG,IAAG;AACxE,OAAE,YAAY;AACd,WAAO;AAAA,EACX;AAEE,SAAO,gBAAgB,GAAG,CAAC;AAC7B;ACNe,wBAAwB,UAAU,YAAY;AAC3D,WAAS,YAAY,OAAO,OAAO,WAAW,SAAS;AACvD,WAAS,UAAU,cAAc;AACjCA,kBAAe,UAAU,UAAU;AACrC;ACFA,IAAI,eAAe,uBAAsB,GAAG,GAAG;AAC7C,MAAI,MAAM,QAAQ;AAChB,QAAI,CAAA;AAAA,EACL;AAED,MAAI,MAAM,QAAQ;AAChB,QAAI,CAAA;AAAA,EACL;AAED,SAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,SAAU,MAAM,OAAO;AAC5D,WAAO,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM;AAAA,EACpC,CAAG;AACH;AAEA,IAAI,eAAe;AAAA,EACjB,OAAO;AACT;AAEA,IAAI,gBAA6B,yBAAU,kBAAkB;AAC3D,iBAAe,gBAAe,gBAAgB;AAE9C,4BAAyB;AACvB,QAAI;AAEJ,aAAS,OAAO,UAAU,QAAQ,QAAQ,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACxF,YAAM,QAAQ,UAAU;AAAA,IACzB;AAED,YAAQ,iBAAiB,KAAK,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,KAAK;AAC/E,UAAM,QAAQ;AAEd,UAAM,qBAAqB,WAAY;AACrC,UAAI;AAEJ,eAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,OAAO,SAAS;AAC7F,aAAK,SAAS,UAAU;AAAA,MACzB;AAED,YAAM,MAAM,WAAW,OAAO,SAAU,eAAc,MAAM,OAAO,QAAQ,MAAM,aAAa,IAAI;AAElG,YAAM,MAAK;AAAA,IACjB;AAEI,WAAO;AAAA,EACR;AAED,iBAAc,2BAA2B,kCAAkC,OAAO;AAChF,WAAO;AAAA,MACL;AAAA,IACN;AAAA,EACA;AAEE,MAAI,SAAS,eAAc;AAE3B,SAAO,QAAQ,iBAAiB;AAC9B,SAAK,SAAS,YAAY;AAAA,EAC9B;AAEE,SAAO,oBAAoB,2BAA2B,OAAO,MAAM;AACjE,QAAI,qBAAqB;AAEzB,IAAC,uBAAuB,gBAAe,KAAK,OAAO,YAAY,OAAO,SAAS,oBAAoB,KAAK,cAAc,OAAO,IAAI;AAAA,EACrI;AAEE,SAAO,qBAAqB,4BAA4B,WAAW,WAAW;AAC5E,QAAI,QAAQ,KAAK,MAAM;AACvB,QAAI,YAAY,KAAK,MAAM;AAO3B,QAAI,UAAU,QAAQ,UAAU,UAAU,QAAQ,aAAa,UAAU,WAAW,SAAS,GAAG;AAC9F,UAAI,uBAAuB;AAE3B,MAAC,yBAAyB,gBAAe,KAAK,OAAO,sBAAsB,OAAO,SAAS,sBAAsB,KAAK,cAAc,UAAU,WAAW,SAAS;AAClK,WAAK,MAAK;AAAA,IACX;AAAA,EACL;AAEE,SAAO,SAAS,kBAAkB;AAChC,QAAI,QAAQ,KAAK,MAAM;AACvB,QAAI,eAAe,KAAK,OACpB,iBAAiB,aAAa,gBAC9B,oBAAoB,aAAa,mBACjC,WAAW,aAAa;AAE5B,QAAI,UAAU,MAAM;AAClB,UAAI,SAAS;AAAA,QACX;AAAA,QACA,oBAAoB,KAAK;AAAA,MACjC;AAEM,UAAkB,sBAAM,eAAe,QAAQ,GAAG;AAChD,eAAO;AAAA,MACf,WAAiB,OAAO,mBAAmB,YAAY;AAC/C,eAAO,eAAe,MAAM;AAAA,MAC7B,WAAU,mBAAmB;AAC5B,eAAoB,sBAAM,cAAc,mBAAmB,MAAM;AAAA,MACzE,OAAa;AACL,cAAM,IAAI,MAAM,4FAA4F;AAAA,MAC7G;AAAA,IACF;AAED,WAAO,KAAK,MAAM;AAAA,EACtB;AAEE,SAAO;AACT,EAAE,MAAM,SAAS;AC9GjB,MAAMC,yBAAyB;AAAA,EAC7BC,YAAYC;AAAAA,EACZC,UAAUD;AAAAA,EACVE,OAAOF;AAAAA,EACPG,QAAQH;AAAAA,EACRI,YAAYJ;AAAAA,EACZK,gBAAgBL;AANa;AAkBlBM,MAAAA,uBAAuBC,eAAMC,cAAmCV,sBAAzC;AAE7B,MAAMW,qBAAqB,MAAM;AACtC,SAAOC,WAAWJ,oBAAD;AAClB;AAEgC,0BAAA;AAAA,EAAEK;AAAAA,EAAOC;AAAAA,GAAiE;AACzG,QAAMC,gBAAgBJ;AAChBK,QAAAA,aAAaC,QAAQ,MAAM;AACxB,WAAA,kCACFF,gBACAF;AAAAA,EAFE,GAIN,CAACA,OAAOE,aAAR,CALuB;AAOnB,SAAAG,oBAAC,qBAAqB,UAAtB;AAAA,IAA+B,OAAOF;AAAAA,IAAtC;AAAA,EAAA,CAAP;AACD;AChCYG,MAAAA,oBAAoBV,eAAMC,cAGpC;AAAA,EACDU,OAAO;AAAA,EACPC,kBAAkB,CAACD,UAAiB;AAAA,EAEnC;AAJA,CAH8B;AAUH,uBAAA;AAAA,EAC5BA;AAAAA,EACAE;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAV;AAAAA,GAOC;AACD,QAAM,CAACW,eAAeJ,oBAAoBK,SAAgB,MAAM;AAC9D,QAAIN,OAAO;AACFA,aAAAA;AAAAA,IACR;AACD,QAAIG,WAAW;AACb,aAAOI,YAAYL,YAAD;AAAA,IACnB;AACD,QAAIA,cAAc;AACT,aAAA,IAAIM,MAAMN,YAAV;AAAA,IACR;AACD,WAAO,IAAIM,MAAX;AAAA,EAAA,CAVgD;AAchD,SAAAV,oBAAC,kBAAkB,UAAnB;AAAA,IAA4B,OAAO;AAAA,MAAEE,OAAOK;AAAAA,MAAeJ;AAAAA,IAAxB;AAAA,IAAnC,8BACG,kBAAD;AAAA,MAAkB,OAAOG,aAAa,CAAtC;AAAA,MAAA;AAAA,IAAA,CAAA;AAAA,EAAA,CAFJ;AAKD;ACzCM,MAAM,WAAW,MAAa;AAC7B,QAAA,EAAE,UAAU,WAAW,iBAAiB;AAE9C,MAAI,UAAU,MAAM;AACZ,UAAA,IAAI,MAAM,kEAAkE;AAAA,EACpF;AAEO,SAAA;AACT;ACLO,6BACL,SACA,EAAE,UAAU,UAAkC,CAAA,GAQ9C;AACA,QAAM,KAAK,OAAO,YAAY,WAAW,UAAU,QAAQ;AAC3D,QAAM,QAAQ;AACd,QAAM,CAAC,QAAQ,aAAa,SAAS,EAAE;AACvC,QAAM,CAAC,OAAO,YAAY,SAA4B,MAAS;AACzD,QAAA,cAAc,QAAQ,MAAM;AAChC,WAAO,MAAM,IAAO,IAAI,EAAE,gBAAgB,KAAM,CAAA,KAAK;AAAA,EAAA,GACpD,CAAC,IAAI,KAAK,CAAC;AACd,QAAM,CAAC,UAAU,eAAe,SAAwB,WAAW;AAEnE,YAAU,MAAM;AACb,IAAY,aAAA;AACP,UAAA;AACI,cAAA,kBAAkB,eAAe,CAAC,UAAU,cAAc,MAAM,MAAM,KAAQ,EAAE;AACtF,cAAM,UAAU,kBAAkB,gBAAgB,MAAO,gBAAwB,SAAS;AACtF,YAAA,mBAAmB,WAAW,SAAS;AACzC,oBAAU,OAAO;AAAA,QACnB;AAEA,oBAAY,eAAe;AAAA,eACpB;AACP,iBAAS,GAAY;AAAA,MACvB;AAAA,IAAA;EACC,GACF,CAAC,IAAI,OAAO,CAAC;AAET,SAAA;AAAA,IACL,UAAU,CAAC,CAAC;AAAA,IACZ,IAAI;AAAA,IACJ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,QAAQ,CAAC,CAAE,aAAY,aAAa;AAAA,EAAA;AAExC;AChDO,6BACL,SACA,SAQA;AACM,QAAA,EAAE,IAAI,UAAU,OAAO,UAAU,WAAW,WAAW,oBAC3D,SACA,OACF;AAEA,SAAO,EAAE,IAAI,UAAU,OAAO,UAAU,UAAU,WAAW;AAC/D;ACjBgC,yBAAA;AAAA,EAAErB;AAAAA,EAAUW;AAAAA,GAAuD;AACjG,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAEX;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACF6B,uBAAA;AAAA,EAAEE;AAAAA,EAAQS;AAAAA,GAAqD;AAC3F,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAET;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACDmC,0BAAA,UAAiD,OAAc,IAAI;AACrG,QAAM,QAAQ;AACR,QAAA,CAAC,eAAe,oBAAoB,SAAY,MAAM,SAAS,MAAM,SAAA,GAAY,KAAK,CAAC;AAE7F,YAAU,MAAM;AACP,WAAA,MAAM,UACX,CAAC,MAAM,SAAS,GAAG,KAAK,GACxB,CAAC,MAAM;AACL,uBAAiB,CAAC;AAAA,OAEpB,KACF;AAAA,KACC,IAAI;AAEA,SAAA;AACT;ACdO,MAAMwB,4BAA4BpB,eAAMC,cAAwB,EAA9B;AAEgB,8BAAA;AACjDoB,QAAAA,MAAMlB,WAAWiB,yBAAD;AAEtB,SAAOE,iBACJC,CAAU,UAAA;AACFF,WAAAA,IAAIG,IAAKC,CAAAA,OAAOF,MAAMG,KAAKC,SAASC,OAAOH,GAA3C,EAAgDI,OAAOC,OAAvD;AAAA,EAAA,GAET,CAACT,GAAD,CAJqB;AAMxB;ACLM,qBACL,UAGI,IACJ,OAAc,CAAA,GACsB;AAC9B,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACE,WAAS;AACjB,QAAA,aAAa,KAAK,KAAK,IAAI;AAEjC,QAAM,WAAW,iBACf,CAAC,MAAO,aAAa,EAAE,KAAK,SAAS,SAAS,cAAc,QAC5D,CAAC,UAAU,CACb;AAEA,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,UAAU;AACN,aAAA;AAAA,IACT;AACA,QAAI,UAAU;AACZ,aAAO,SAAS,QAAQ;AAAA,IAC1B;AACO,WAAA;AAAA,KACN,CAAC,UAAU,UAAU,GAAG,IAAI,CAAC;AAClC;AClC6B,sBAAA;AAAA,EAAE1B;AAAAA,EAAOU;AAAAA,GAAoD;AACxF,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAEV;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACFM,kCAAkC,OAAc,OAAoD;AAC9F,aAAA,SAAS,MAAM,OAAO;AAC3B,QAAA,MAAM,SAAS,UAAU;AACpB,aAAA;AAAA,IACT;AACI,QAAA,MAAM,SAAS,SAAS;AAC1B,YAAM,QAAQ,yBAAyB,OAAO,MAAM,IAAI,KAAK,CAAC;AAC9D,UAAI,OAAO;AACF,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACO,SAAA;AACT;AAEO,gCAAgC,OAAc,OAAoD;AACvG,QAAM,QAA+B,CAAA;AAC1B,aAAA,SAAS,MAAM,OAAO;AAC3B,QAAA,MAAM,SAAS,UAAU;AAC3B,UAAI,MAAM,GAAG,QAAQ,GAAG,MAAM,IAAI;AAC1B,cAAA,KAAK,EAAE,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE,IAAI,MAAM,SAAU,CAAA;AAAA,MAAA,OACpD;AACL,cAAM,KAAK,KAA4B;AAAA,MACzC;AAAA,IACF;AACI,QAAA,MAAM,SAAS,SAAS;AACpB,YAAA,KAAK,GAAG,uBAAuB,OAAO,MAAM,IAAI,KAAK,CAAC,CAAC;AAAA,IAC/D;AACK,QAAA,MAAc,SAAS,oBAAoB;AACxC,YAAA,WAAW,OAAQ,MAAc,WAAW,WAAY,MAAc,SAAU,MAAc,OAAO;AAC3G,YAAM,KAAK,EAAE,IAAI,UAAU,MAAM,UAAU;AAAA,IAC7C;AAAA,EACF;AACO,SAAA;AACT;AAGE,mCAAA,OACA,UACA,UACwB;AACb,aAAA,SAAS,SAAS,YAAY;AACvC,UAAM,QAAQ,kBAAkB,OAAO,MAAM,IAAI,KAAK,GAAG,QAAQ;AACjE,QAAI,OAAO;AACF,aAAA;AAAA,IACT;AAAA,EACF;AAEO,SAAA;AACT;AAEkC,2BAAA,OAAc,OAAwB,UAA0C;;AACrG,aAAA,SAAS,MAAM,OAAO;AAC/B,UAAM,WAAW,YAAM,OAAN,mBAAU,MAAM,KAAK;AACtC,QAAK,MAAc,SAAS,sBAAuB,MAAc,WAAW,UAAU;AAC7E,aAAA;AAAA,IACT;AACA,QAAI,MAAM,SAAS,YAAY,aAAa,UAAU;AAC7C,aAAA;AAAA,IACT;AACI,QAAA,MAAM,SAAS,SAAS;AAC1B,YAAM,QAAQ,kBAAkB,OAAO,MAAM,IAAI,KAAK,GAAG,QAAQ;AACjE,UAAI,OAAO;AACF,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACO,SAAA;AACT;ACpCO,wCACL,OACA,iBACA,UACA,eAAe,OACQ;AACvB,QAAM,WAAW,gBAAgB;AACjC,QAAM,aAAa,WAAW,MAAM,IAAsB,QAAQ,IAAI;AACtE,MAAI,CAAC,YAAY;AACf,WAAO;EACT;AAEA,QAAM,iBAAiB,WAAW;AAClC,QAAM,UAAU,eAAe,QAAQ,SAAS,SAAS,OAAO;AAChE,QAAM,eAAe,UAAU,QAAQ,SAAS,SAAS,YAAY;AACrE,QAAM,gBAAgB,WAAW,eAAe,QAAQ,SAAS,SAAS,aAAa;AACjF,QAAA,sBAAsB,eAAe,SAAS,cAAc;AAC5D,QAAA,mBAAmB,eAAe,SAAS,WAAW;AAGxD,MAAA,uBAAuB,oBAAoB,iBAAiB,cAAc;AAC5E,WAAO,CAAC,EAAE,IAAI,WAAW,IAAI,MAAM,UAAU;AAAA,EAC/C;AAEA,QAAM,CAAC,eAAe,YAAY,oBAAoB,OAAO,eAAe;AAG5E,MAAI,cAAc;AACT,WAAA;AAAA,EACT;AAEA,QAAM,cAAc,cAAc,UAAU,CAAC,MAAM,EAAE,OAAO,QAAQ;AACpE,MAAI,gBAAgB,IAAI;AACtB,WAAO;EACT;AAEA,aAAW,WAAW,UAAU;AAC1B,QAAA,QAAQ,SAAS,WAAW,GAAG;AACjC,aAAO,QAAQ,IAAI,CAAC,UAAU,cAAc,MAAM;AAAA,IACpD;AAAA,EACF;AAEA,SAAO,CAAC,EAAE,IAAI,WAAW,IAAI,MAAM,UAAU;AAC/C;AAEO,6BACL,OACA,iBACA,EAAE,kBAA+C,CAAA,GACZ;AACrC,QAAM,WAAW,gBAAgB;AAC3B,QAAA,UAAU,SAAS,SAAS,OAAO;AACzC,QAAM,eAAe,UAAU,QAAQ,SAAS,SAAS,YAAY;AACrE,QAAM,gBAAgB,WAAW,eAAe,QAAQ,SAAS,SAAS,aAAa;AACjF,QAAA,gBACJ,gBAAgB,SAAS,aAAa,gBAAgB,QAAQ,uBAAuB,OAAO,eAAe;AAG7G,MAAI,cAAc;AACT,WAAA,CAAC,eAAe,CAAC,cAAc,IAAI,CAAC,GAAG,UAAU,KAAK,CAAC,CAAC;AAAA,EACjE;AAGI,MAAA,iBAAiB,CAAC,WAAW,eAAe;AACvC,WAAA,CAAC,eAAe,cAAc,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAAA,EACjE;AAGA,QAAM,WAAuB,CAAA;AAC7B,MAAI,kBAA4B,CAAA;AAEhC,QAAM,QAAQ,MAAM;AAClB,QAAI,gBAAgB,QAAQ;AAC1B,eAAS,KAAK,CAAC,GAAG,eAAe,CAAC;AAClC,wBAAkB,CAAA;AAAA,IACpB;AAAA,EAAA;AAGF,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,UAAM,SAAS,MAAM,IAAsB,cAAc,EAAE;AAC3D,QAAI,OAAO,SAAS,SAAS,WAAW,GAAG;AACzC,UAAI,MAAM,QAAQ;AAChB;AAAA,MACF;AAEA;AAAA,IACF;AAEA,QAAI,MAAM,UAAU,OAAO,SAAS,SAAS,cAAc,GAAG;AAEtD;AACG,eAAA,KAAK,CAAC,CAAC,CAAC;AACjB;AAAA,IACF;AAEA,oBAAgB,KAAK,CAAC;AAElB,QAAA,gBAAgB,SAAS,GAAG;AACxB;IACR;AAAA,EACF;AAEA,MAAI,gBAAgB,QAAQ;AACpB;EACR;AAEO,SAAA,CAAC,eAAe,QAAQ;AACjC;ACpIO,kBACL,UAGI,IACJ,OAAc,CAAA,GACmB;AAC3B,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACN,QAAA,UAAU,KAAK,KAAK,IAAI;AAE9B,QAAM,QAAQ,iBAAiB,CAAC,MAAO,UAAU,EAAE,KAAK,SAAS,MAAM,WAAW,QAAY,CAAC,OAAO,CAAC;AAEvG,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,OAAO;AACH,aAAA;AAAA,IACT;AACA,QAAI,UAAU;AACZ,aAAO,SAAS,KAAK;AAAA,IACvB;AACO,WAAA;AAAA,KACN,CAAC,OAAO,UAAU,GAAG,IAAI,CAAC;AAC/B;AC3BkC,2BAAA,EAAE,aAAa,iBAAoE;;AACnH,QAAM,QAAQ;AACd,QAAM,WAAW;AACjB,QAAM,QAAQ;AACd,QAAM,CAAC,QAAQ,aAAa,SAAiB,MAAgB;AACvD,QAAA,kBAAkB,QAAQ,QAAQ;AAExC,MAAI,CAAC,iBAAiB;AACd,UAAA,IAAI,MAAM,kBAAkB;AAAA,EACpC;AAEA,QAAM,CAAC,OAAO,mBAAmB,QAC/B,MAAM,oBAAoB,OAAO,iBAAiB,EAAE,eAAe,GACnE,CAAC,OAAO,eAAe,CACzB;AAEM,QAAA,iBAAiB,YACrB,CAAC,UAAkB;AACX,UAAA,gBAAgB,gBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC;AAC9D,cAAA,kBAAkB,KAAK,IAAI,aAAa;AAAA,EAAA,GAEpD,CAAC,OAAO,eAAe,CACzB;AAEM,QAAA,cAAc,YAClB,CAAC,OAAe;AACd,UAAM,aAAa,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AACrD,QAAI,eAAe,IAAI;AACrB,qBAAe,UAAU;AAAA,IAAA,OACpB;AACL,gBAAU,CAAC;AAAA,IACb;AAAA,EAAA,GAEF,CAAC,OAAO,eAAe,CACzB;AAEM,QAAA,OAAO,YAAY,MAAM;AAC7B,cAAU,CAAC,MAAM;AACX,UAAA,KAAK,gBAAgB,QAAQ;AACxB,eAAA;AAAA,MACT;AACA,aAAO,IAAI;AAAA,IAAA,CACZ;AAAA,EAAA,GACA,CAAC,eAAe,CAAC;AAEd,QAAA,WAAW,YAAY,MAAM;AACjC,cAAU,CAAC,MAAM;AACf,UAAI,KAAK,GAAG;AACH,eAAA;AAAA,MACT;AACA,aAAO,IAAI;AAAA,IAAA,CACZ;AAAA,EAAA,GACA,CAAC,eAAe,CAAC;AAGhB,MAAA,OAAO,WAAW,aAAa;AACjC,QAAI,aAAa;AACf,kBAAY,WAAW;AAAA,IAAA,OAClB;AACL,gBAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEO,SAAA;AAAA,IACL,cAAc,uBAAgB,YAAhB,mBAAyB,IAAI,CAAC,QAAQ,MAAM,KAAK,QAAO,CAAC;AAAA,IACvE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;ACNA,MAAMoC,OAAO,MAAM;AAElB;AAEM,MAAMC,2BAA2B/B,cAAmC;AAAA,EACzEgC,oBAAoBF;AAAAA,EACpBG,uBAAuBH;AAAAA,EACvBI,YAAYJ;AAAAA,EACZK,gBAAgBL;AAAAA,EAChBM,OAAO,CALkE;AAAA,EAMzEC,UAAU,CAN+D;AAAA,EAOzEC,kBAAkBR;AAAAA,EAClBS,sBAAsB;AARmD,CAAtB;AAW9C,6BAA6BC,OAA0B;AAC5D,QAAM/C,WAAWgD;AACX,QAAA;AAAA,IAAEC;AAAAA,IAAQC;AAAAA,IAAcC;AAAAA,IAAMP;AAAAA,IAAUD;AAAAA,IAAOS;AAAAA,IAAgBC;AAAAA,IAAaC;AAAAA,IAAUT;AAAAA,MAC1FU,kBAAkB;AAAA,IAChBC,aAAaT,MAAMS;AAAAA,IACnBC,eAAeV,MAAMW,kBAAkB;AAAA,EAAA,CAFxB;AAKbC,QAAAA,MAAM7C,QACV,MACG;AAAA,IACC8B;AAAAA,IACAD;AAAAA,IAEAJ,oBAAoBc;AAAAA,IACpBZ,YAAYU;AAAAA,IACZT,gBAAgBY;AAAAA,IAChBM,eAAejB,MAAMkB;AAAAA,IACrBrB,uBAAuBY;AAAAA,IACvBP;AAAAA,IACAC,sBAAsBG;AAAAA,EAVvB,IAYH,CAACL,UAAUD,OAAOU,aAAaF,MAAMG,UAAUX,OAAOS,gBAAgBP,kBAAkBI,MAAxF,CAdiB;AAiBnB,MAAI,CAACjD,UAAU;AACb8D,YAAQC,KAAK,mEAAb;AACA,+BAAO,OAAA;AAAA,MAAA,UAAA;AAAA,IAAA,CAAP;AAAA,EACD;AAGC,SAAAhD,oBAAC,yBAAyB,UAA1B;AAAA,IAAmC,OAAO4C;AAAAA,IAA1C,UACG5C,oBAAA,0BAA0B,UAA3B;AAAA,MAAoC,OAAOmC;AAAAA,MAA3C,8BACG,eAAD;AAAA,QAAe,QAAQA,aAAa;AAAA,QAApC,UAAyCH,MAAMpC;AAAAA,MAAAA,CAA/C;AAAA,IAAA,CADF;AAAA,EAAA,CAFJ;AAOD;AAEM,8BAA8BoC,OAA0B;AACvD/C,QAAAA,WAAWgE,oBAAoBjB,MAAM/C,QAAP;AAEpC,MAAI,CAACA,UAAU;AACb8D,YAAQC,KAAK,mEAAb;AACA,+BAAO,OAAA;AAAA,MAAA,UAAA;AAAA,IAAA,CAAP;AAAA,EACD;AAEG,MAAA,CAAC/D,SAASiE,UAAU;AACtB,+BAAO,OAAA;AAAA,MAAA,UAAA;AAAA,IAAA,CAAP;AAAA,EACD;AAEKC,QAAAA,4BAAS,sDAAwBnB;IAAzB,UAAiCA,MAAMpC;AAAAA,EAAAA,EAArD;AAEA,6BACG,iBAAD;AAAA,IAAiB,UAAUX,SAAS+B;AAAAA,IAApC,UACGgB,MAAMoB,UAAUpD,oBAAC,cAAD;AAAA,MAAc,OAAOgC,MAAMoB;AAAAA,MAA3B,UAAqCD;AAAAA,IAArC,CAAA,IAA6DA;AAAAA,EAAAA,CAFlF;AAKD;AAEiC,2BAAA;AAChC,SAAOzD,WAAW6B,wBAAD;AAClB;ACjJkC,4BAAA;AAC1B,SAAA;AAAA,IACL8B,cAAc3D,WAAWO,iBAAD;AAAA,IACxBqD,iBAAiB5D,WAAWJ,oBAAD;AAAA,IAC3BiC,0BAA0B7B,WAAW6B,wBAAD;AAAA,IACpCZ,2BAA2BjB,WAAWiB,yBAAD;AAAA,EAAA;AAExC;AAEM,uBAAuBqB,OAA6E;AACzG,6BACG,eAAD;AAAA,IAAe,OAAOA,MAAMuB,OAAOF,aAAanD,SAASlB;AAAAA,IAAW,WAAWgD,MAAMuB,OAAOD;AAAAA,IAA5F,UACGtD,oBAAA,0BAA0B,UAA3B;AAAA,MAAoC,OAAOgC,MAAMuB,OAAO5C;AAAAA,MAAxD,UACGX,oBAAA,yBAAyB,UAA1B;AAAA,QAAmC,OAAOgC,MAAMuB,OAAOhC;AAAAA,QAAvD,UACGS,MAAMpC;AAAAA,MAAAA,CADT;AAAA,IAAA,CADF;AAAA,EAAA,CAFJ;AASD;ACvBD,MAAM,kBAAkB;AACxB,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAC7B,MAAM,gBAAgB;AACtB,MAAM,mBAAmB;AACzB,MAAM,iBAAiB,aAAa,eAAe;AACnD,MAAM,oBAAoB,aAAa,mBAAmB;AAC1D,MAAM,qBAAqB,aAAa,oBAAoB;AAC5D,MAAM,eAAe,aAAa,aAAa;AAC/C,MAAM,kBAAkB,aAAa,gBAAgB;AACrD,MAAM,gBAAgB,EAAE,gBAAgB,mBAAmB,oBAAoB,cAAc;AAE7F,MAAM,cAAc;AACpB,MAAM,eAAe;AACF,aAAa,WAAW,EAAI;AAC3B,aAAa,YAAY,EAAI;AAGjD,MAAM,iBAAiB;AACvB,MAAM,yBAAyB;AAC/B,MAAM,mBAAmB;AACJ,aAAa,cAAc,EAAI;AACxB,aAAa,sBAAsB,EAAI;AAC5C,aAAa,gBAAgB,EAAI;AAUxD,MAAM,mBAAmB;AACzB,MAAM,gBAAgB;AACtB,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AACzB,MAAM,2BAA2B;AACT,aAAa,gBAAgB,EAAI;AACpC,aAAa,aAAa,EAAI;AAC3B,aAAa,gBAAgB,EAAI;AACjC,aAAa,gBAAgB,EAAI;AAC1B,aAAa,wBAAwB,EAAI;AASxE,MAAM,gBAAgB;AACtB,MAAM,eAAe;AACA,aAAa,aAAa,EAAI;AAC/B,aAAa,YAAY,EAAC;ACpDQ,uBAAA;AACpD,QAAM,QAAQ;AACR,QAAA,QAAQ,MAAM;AAEpB,SAAO,QAAQ,MAAM;AACnB,WAAO,CAAC,WAAgB,MAAM,SAAS,MAAM;AAAA,EAAA,GAC5C,CAAC,KAAK,CAAC;AACZ;ACGA,0BAA0B,KAA2C;AACnE,SAAO,OAAO,QAAQ,YAAY,OAAO,IAAI;AAC/C;AAE2C,oCAAA;AACzC,QAAM,QAAQ;AACR,QAAA,UAAU,OAAyB,CAAA,CAAE;AAC3C,QAAM,WAAW;AACX,QAAA,YAAY,QAAQ,MAAM;AAC9B,WAAO,2BAA2B,IAAI,KAAK,EAAE,aAAa,KAAK,MAAM,KAAK,OAAO,IAAI,GAAU,EAAE,SAAS,EAAE;AAAA,EAC9G,GAAG,CAAE,CAAA;AAEL,kBAAgB,MAAM;AACpB,UAAM,OAAiC;AAAA,MACrC,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,MACX,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,WAAW,CAAC;AAAA,MACZ,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,UAAU,CAAC;AAAA,MACX,QAAQ;AAAA,MACR,UAAU,CAAC;AAAA,MACX,OAAO,CAAC;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,MACX,MAAM,CAAC;AAAA,MACP,WAAW,CAAC;AAAA,MACZ,SAAS,CAAC;AAAA,IAAA;AAGZ,aACE,cAAc,eAAe;AAAA,MAC3B,UAAU;AAAA,QACR,gBAAgB;AAAA,WACb,KAAK,KAAK;AAAA,QACb;AAAA,MACF;AAAA,IACD,CAAA,CACH;AAAA,EAAA,GACC,CAAC,SAAS,CAAC;AAEd,QAAM,WAA4C,iBAChD,CAAC,UAAW,YAAY,MAAM,KAAK,SAAS,eAAe,aAAa,MACxE,CAAC,SAAS,CACZ;AAEA,QAAM,gBAAgB,YACpB,CAAC,IAA2E,YAAqB;AAC/F,QAAI,WAAW;AACT,UAAA,iBAAiB,EAAE,GAAG;AACxB,cAAM,UAAU;AACZ,YAAA,CAAC,QAAQ,SAAS;AAEpB,kBAAQ,YAAY,KAAK;AAAA,QAC3B;AACA,aAAK,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS,QAAQ,OAAO;AAC1E,gBAAQ,QAAQ,MAAM;AAAA,MAAA,WACb,OAAO,OAAO,UAAU;AACjC,aAAK,GAAG;AAAA,MACV;AAEM,YAAA,OAAiC,MAAM,IAAI,EAAE,IAAI,WAAW,MAAM,kBAAkB;AAC1F,YAAM,aAAmC,MAAM,IAAI,EAAE,IAAI,MAAM,cAAc;AAC7E,UAAI,QAAQ,YAAY;AAClB,YAAA,CAAC,KAAK,MAAM,KAAK,CAAC,MAAW,EAAE,OAAO,WAAW,EAAE,GAAG;AACxD,mBACE,cAAc,aAAa;AAAA,YACzB,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,cACA,MAAM;AAAA,YACR;AAAA,YACA,OAAO;AAAA,UACR,CAAA,CACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EAAA,GAEF,CAAC,SAAS,CACZ;AACM,QAAA,mBAAmB,YACvB,CAAC,OAA8E;AAC7E,QAAI,WAAW;AACT,UAAA,iBAAiB,EAAE,GAAG;AACxB,aAAK,OAAO,GAAG,WAAW,WAAW,GAAG,SAAS,GAAG,OAAO;AAAA,MAAA,WAClD,OAAO,OAAO,UAAU;AACjC,aAAK,GAAG;AAAA,MACV;AAEI,UAAA,QAAQ,QAAQ,KAAK;AACf,gBAAA,QAAQ,IAAI,aAAa;AAAA,MACnC;AAEM,YAAA,OAAiC,MAAM,IAAI,EAAE,IAAI,WAAW,MAAM,kBAAkB;AAC1F,UAAI,MAAM;AACR,iBACE,cAAc,gBAAgB;AAAA,UAC5B,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,KAAK;AAAA,UACL,WAAW;AAAA,YACT;AAAA,YACA,MAAM;AAAA,UACR;AAAA,QACD,CAAA,CACH;AAAA,MACF;AAAA,IACF;AAAA,EAAA,GAEF,CAAC,SAAS,CACZ;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAEJ;ACvIA,MAAM4D,+BAA+BhE,cAO3B,IAPwC;AASA,2CAAA;AAC1CoD,QAAAA,MAAMlD,WAAW8D,4BAAD;AAEf,SAAA,CACLZ,IAAKa,UACL;AAAA,IACEC,eAAed,IAAKc;AAAAA,IACpBC,kBAAkBf,IAAKe;AAAAA,EAAAA,CAJpB;AAOR;AAEyC,mCAAA;AAAA,EAAE/D;AAAAA,GAA+B;AACzE,QAAM,CAAC6D,UAAU;AAAA,IAAEC;AAAAA,IAAeC;AAAAA,OAAsBC,yBAAxD;AAGE,SAAA5D,oBAAC,6BAA6B,UAA9B;AAAA,IACE,OAAOD,QAAQ,MAAO;AAAA,MAAE0D;AAAAA,MAAUC;AAAAA,MAAeC;AAAAA,IAAAA,IAAqB,CAACF,QAAD,CAAxD;AAAA,IADhB;AAAA,EAAA,CADF;AAOD;ACjCqC,+BAAA;AAAA,EAAEI;AAAAA,EAAOC;AAAAA,EAAOC;AAAAA,GAA4D;AAChH,6BAAO,OAAA;AAAA,IAAK,OAAO;AAAA,MAAEF;AAAAA,MAAOE;AAAAA,MAAQC,WAAW;AAAA,OAASF,SAAS,CAAA,IAA9C;AAAA,MAAmDG,YAAY;AAAA,IAA/D;AAAA,IAAZ,UAAA;AAAA,EAAA,CAAP;AACD;ACDYC,MAAAA,sBAAsB1E,cAAyC,IAA5B;AAEd,2BAAA;AAChC,SAAOE,WAAWwE,mBAAD;AAClB;ACHYC,MAAAA,gBAAgB5E,eAAMC,cAA2B,IAAjC;AAChB4E,MAAAA,uBAAuB7E,eAAMC,cAA2B,IAAjC;AAEP,sBAAA;AAAA,EAAEI;AAAAA,EAAUyE;AAAAA,GAAuD;AAC9F,QAAMC,cAAc5E,WAAW2E,UAAUD,uBAAuBD,aAAlC;AAC9B,QAAMI,SAASC;AAEfC,kBAAgB,MAAM;AACpB,QAAIH,aAAa;AACX,UAAA;AACUI,oBAAAA,OAAQ1E,oBAAA,oBAAoB,UAArB;AAAA,UAA8B,OAAOuE;AAAAA,UAArC;AAAA,QAAnB,CAAA,CAAA;AAAA,eACOI;MAER;AAAA,IACF;AAAA,EAAA,GACA,CAAC/E,UAAU2E,MAAX,CARY;AAUR,SAAA;AACR;;ACpBD,IAAI,IAAI;AACmC;AACzC,eAAqB,EAAE;AAEzB;ACIuB,gBAAA,IAaM;AAbN,eACrB3E;AAAAA;AAAAA,IACAgF;AAAAA,IACAC,sBAAsB,CAHD;AAAA,MAAA,IAIlB7C,kBAJkB,IAIlBA;AAAAA,IAHHpC;AAAAA,IACAgF;AAAAA,IACAC;AAAAA;AAWMC,QAAAA,SAASC,OAAuB,IAAjB;AACf,QAAA,CAACC,eAAeC,oBAAoBzE,SAA1C;AACM,QAAA,CAAC0E,cAAcC,mBAAmB3E,SAAxC;AACM4E,QAAAA,gBAAgBL,OAAuB,IAAjB;AACtB,QAAA,CAACM,sBAAsBC,2BAA2B9E,SAAxD;AACA,QAAM+C,SAASgC;AACf,QAAMC,gBAAqBZ,iBAAiBa;AAE5ChB,kBAAgB,MAAM;AACpB,UAAMiB,QAA8B,CAAA;AACpC,QAAIZ,OAAOa,SAAS;AACZC,YAAAA,MAAMC,SAASC,cAAc,KAAvB;AACLH,aAAAA,QAAQI,YAAYH,GAA3B;AACMd,YAAAA,SAASkB,WAAWJ,GAAD;AACzBX,uBAAiBS,MAAMZ,MAAP;AAAA,IACjB;AACD,QAAIM,cAAcO,SAAS;AACnBC,YAAAA,MAAMC,SAASC,cAAc,KAAvB;AACEH,oBAAAA,QAAQI,YAAYH,GAAlC;AACMR,YAAAA,gBAAgBY,WAAWJ,GAAD;AAChCN,8BAAwBI,MAAMN,aAAP;AAAA,IACxB;AAED,WAAO,MAAM;AACXH,uBAAiB,IAAD;AAChBK,8BAAwB,IAAD;AAEvBW,iBAAW,MAAM;AACf,YAAIP,MAAMZ,QAAQ;AAChBY,gBAAMZ,OAAOoB;QACd;AACD,YAAIR,MAAMN,eAAe;AACvBM,gBAAMN,cAAcc;QACrB;AAAA,SACA,CAPO;AAAA,IAAA;AAAA,EASb,GAAE,CA5BY,CAAA;AA8Bf,8BACG,eAAD;AAAA,IAAe,gBAAgB,MAAMlG,oBAAC,eAAkBgC,mBAAAA,MAAxD;AAAA,IAAA,UACE,CAAAhC,oBAAC,WAAD,iCACMgC,QADN;AAAA,MAEE,gBAAgB;AAAA,QAAE8B,OAAO;AAAA,UAAEqC,UAAU;AAAA,QAAZ;AAAA,SAA8BnE,MAAMoE,kBAAkB,CAA5B;AAAA,MACnD,kCAAc,OAAA;AAAA,QAAK,KAAKhB;AAAAA,MAAAA,CAH1B;AAAA,MAIE,WAAW,CAACb,WAAgB;AAC1BY,wBAAgBZ,MAAD;AACf,YAAIvC,MAAMqE,WAAW;AACnBrE,gBAAMqE,UAAU9B,MAAhB;AAAA,QACD;AAAA,MACF;AAAA,MATH,UAWGvE,oBAAA,oBAAoB,UAArB;AAAA,QAA8B,OAAOkF;AAAAA,QAArC,UACGlF,oBAAA,cAAc,UAAf;AAAA,UAAwB,OAAOgF;AAAAA,UAA/B,UACGhF,oBAAA,qBAAqB,UAAtB;AAAA,YAA+B,OAAOqF;AAAAA,YAAtC,8BACG,eAAD;AAAA,cAAe;AAAA,cAAf,8BACG,2BAAD;AAAA,gBAAA;AAAA,cAAA,CAAA;AAAA,YAAA,CADF;AAAA,UAAA,CADF;AAAA,QAAA,CADF;AAAA,MAAA,CADF;AAAA,IAAA,EAXF,GAqBArF,oBAAA,OAAA;AAAA,MAAK,KAAK8E;AAAAA,IAAAA,CAtBZ,CAAA;AAAA,EAAA,CADF;AA0BD;ACxFD,4BAA4B,OAAO;AACjC,SAAO;AAAA,IACL,iBAAiB,UAAU,OAAO,UAAU,OAAO;AACjD,UAAI,CAAC,UAAU;AACb;AAAA,MACD;AACD,YAAM,aAAa,CAAC,SAAS,IAAI,gBAAgB,KAAK,GAAG,CAAC,wBAAwB;AAChF,cAAM,YAAY,uBAAuB;AACzC,mBAAW,cAAc,WAAW;AAClC,cAAI,WAAW,aAAa,UAAU;AACpC,mBAAO;AAAA,UACR;AAAA,QACF;AACD,eAAO,CAAC,GAAG,WAAW,EAAE,UAAU,UAAU,MAAK,CAAE;AAAA,MAC3D,CAAO;AACD,aAAO;AAAA,IACR;AAAA,IACD,oBAAoB,UAAU,OAAO,UAAU;AAC7C,UAAI,CAAC,UAAU;AACb;AAAA,MACD;AACD,YAAM,aAAa,CAAC,SAAS,IAAI,gBAAgB,KAAK,GAAG,CAAC,wBAAwB;AAChF,eAAQ,wBAAuB,CAAA,GAAI,OAAO,CAAC,uBAAuB,mBAAmB,aAAa,QAAQ;AAAA,MAClH,CAAO;AAAA,IACF;AAAA,IACD,oBAAoB,cAAc,OAAO;AACvC,YAAM,WAAW,OAAO,iBAAiB,WAAW,EAAE,IAAI,aAAc,IAAG;AAC3E,UAAI,CAAC,YAAY,CAAC,SAAS,IAAI;AAC7B,eAAO;MACR;AACD,YAAM,QAAQ,MAAM,gBAAgB,SAAS,IAAI,cAAc;AAC/D,YAAM,QAAQ,CAAA;AACd,UAAI,SAAS,UAAU;AACrB,mBAAW,QAAQ,OAAO,KAAK,KAAK,GAAG;AACrC,gBAAM,QAAQ,CAAC,MAAM;AACnB,kBAAM,eAAe,MAAM,IAAI,QAAQ;AACvC,uBAAW,EAAE,UAAU,OAAO,YAAY,MAAM,SAAS,IAAI;AAC3D,kBAAI,CAAC,UAAU,SAAS,OAAO,QAAQ,KAAK,MAAM,IAAI;AACpD,yBAAS,GAAG,YAAY;AAAA,cACzB;AAAA,YACF;AAAA,UACb;AAAA,QACS;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,EACL;AACA;ACxCO,2BAAuD,UAAsB,OAAkB;AACpG,QAAM,QAAQ;AACR,QAAA,SAAS,QAAQ,MAAM,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AAEzD,QAAA,QAAQ,iBAAiB,MAAM;AAC/B,QAAA,YAAY,SAAS,IAAI;AAC3B,aAAO,MAAM,gBAAgB,SAAS,IAAI,cAAc;AAAA,IAC1D;AACO,WAAA;AAAA,EAAA,GACN,CAAC,QAAQ,CAAC;AAEb,SAAO,QAAQ,MAAM;AACnB,WAAO,WAAW,OAAO,oBAAoB,UAAU,KAAK,IAAI;KAC/D,CAAC,OAAO,UAAU,OAAO,KAAK,CAAC;AACpC;ACrBA,4BAA4B,OAAO;AACjC,SAAO;AAAA,IACL,YAAY,UAAU,OAAO,QAAQ;AACnC,YAAM,KAAK,OAAO,aAAa,WAAW,WAAW,SAAS;AAC9D,aAAO,MAAM,aAAa,CAAC,IAAI,UAAU,KAAK,GAAG,MAAM;AAAA,IACxD;AAAA,IACD,iBAAiB,UAAU;AACzB,YAAM,KAAK,OAAO,aAAa,WAAW,WAAW,SAAS;AAC9D,aAAO,MAAM,gBAAgB,IAAI,QAAQ;AAAA,IAC1C;AAAA,EACL;AACA;ACEO,mBAA0B,UAAsB,OAAuB;AAC5E,QAAM,QAAQ;AACR,QAAA,SAAS,QAAQ,MAAM,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AAE/D,SAAO,iBAAiB,MAAM;AAC5B,QAAI,CAAC,UAAU;AACN,aAAA;AAAA,IACT;AAEA,UAAM,SAAS,OAAO,iBAAiB,SAAS,EAAE;AAClD,WAAO,SAAU,QAAQ,OAAO,SAAS,SAAU;AAAA,EAAA,GAClD,CAAC,UAAU,KAAK,CAAC;AACtB;ACzBA,IAAIwB,cAAY,OAAO;AACvB,IAAIC,eAAa,OAAO;AACxB,IAAIC,sBAAoB,OAAO;AAC/B,IAAIC,wBAAsB,OAAO;AACjC,IAAIC,iBAAe,OAAO,UAAU;AACpC,IAAIC,iBAAe,OAAO,UAAU;AACpC,IAAIC,oBAAkB,CAAC,KAAK,KAAK,UAAU,OAAO,MAAMN,YAAU,KAAK,KAAK,EAAE,YAAY,MAAM,cAAc,MAAM,UAAU,MAAM,MAAO,CAAA,IAAI,IAAI,OAAO;AAC1J,IAAIO,mBAAiB,CAAC,GAAG,MAAM;AAC7B,WAAS,QAAQ,KAAM,KAAI,CAAA;AACzB,QAAIH,eAAa,KAAK,GAAG,IAAI;AAC3BE,wBAAgB,GAAG,MAAM,EAAE,KAAK;AACpC,MAAIH;AACF,aAAS,QAAQA,sBAAoB,CAAC,GAAG;AACvC,UAAIE,eAAa,KAAK,GAAG,IAAI;AAC3BC,0BAAgB,GAAG,MAAM,EAAE,KAAK;AAAA,IACnC;AACH,SAAO;AACT;AACA,IAAIE,kBAAgB,CAAC,GAAG,MAAMP,aAAW,GAAGC,oBAAkB,CAAC,CAAC;AAChE,MAAM,eAAe;AACrB,MAAM,oBAAoB;AAC1B,uBAAuB,QAAQ;AAC7B,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO,OAAO,OAAO,CAAC,MAAM,eAAe;AACzC,YAAM,EAAE,UAAU,cAAc,cAAc,UAAU;AACxD,UAAI,UAAU;AACZ,YAAI,CAAC,KAAK,UAAU;AAClB,eAAK,WAAW;AAAA,QACjB;AACD,aAAK,UAAU,KAAK,GAAG,SAAS;AAAA,MACjC;AACD,aAAO;AAAA,IACb,GAAO;AAAA,MACD,UAAU;AAAA,MACV,WAAW,CAAE;AAAA,IACnB,CAAK;AAAA,EACF;AACD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,MACL,UAAU;AAAA,MACV,WAAW,CAAE;AAAA,IACnB;AAAA,EACG;AACD,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,CAAC,IAAI,YAAY,OAAO,MAAM,GAAG;AACvC,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,UAAU;AAAA,QACV,WAAW,CAAE;AAAA,MACrB;AAAA,IACK;AACD,WAAO,cAAc,EAAE,MAAM,oBAAoB,OAAO,SAAQ,CAAE;AAAA,EACnE;AACD,MAAI,OAAO,SAAS,mBAAoB,QAAO,KAAK,OAAO,MAAM,IAAI;AACnE,UAAM,WAAW;AAAA,MACf,MAAM;AAAA,MACN,UAAU;AAAA,QACR,WAAW,OAAO;AAAA,MACnB;AAAA,IACP;AACI,WAAO;AAAA,MACL;AAAA,MACA,WAAW,CAAC,QAAQ;AAAA,IAC1B;AAAA,EACG;AACD,MAAI,OAAO,SAAS,oBAAoB;AACtC,UAAM,mBAAmB,aAAa,KAAK,OAAO,KAAK;AACvD,QAAI,kBAAkB;AACpB,YAAM,WAAW;AAAA,QACf,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM,iBAAiB,OAAO,cAAc,iBAAiB,OAAO,SAAS,YAAY;AAAA,UACzF,GAAG,WAAW,iBAAiB,EAAE;AAAA,UACjC,GAAG,WAAW,iBAAiB,EAAE;AAAA,UACjC,OAAO,WAAW,iBAAiB,EAAE;AAAA,UACrC,QAAQ,WAAW,iBAAiB,EAAE;AAAA,QACvC;AAAA,MACT;AACM,aAAO;AAAA,QACL;AAAA,QACA,WAAW,CAAC,QAAQ;AAAA,MAC5B;AAAA,IACK;AACD,UAAM,oBAAoB,OAAO,MAAM,MAAM,iBAAiB;AAC9D,QAAI,mBAAmB;AACrB,YAAM,WAAW;AAAA,QACf,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW,kBAAkB,KAAK,WAAW,kBAAkB,EAAE,IAAI;AAAA,UACrE,SAAS,kBAAkB,KAAK,WAAW,kBAAkB,EAAE,IAAI;AAAA,QACpE;AAAA,MACT;AACM,aAAO;AAAA,QACL;AAAA,QACA,WAAW,CAAC,QAAQ;AAAA,MAC5B;AAAA,IACK;AACD,WAAO;AAAA,MACL,UAAU;AAAA,MACV,WAAW,CAAE;AAAA,IACnB;AAAA,EACG;AACD,SAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW,CAAE;AAAA,EACjB;AACA;AACA,sBAAsB,QAAQ,UAAU,IAAI;AAC1C,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO,aAAa,OAAO,EAAE;AAAA,EAC9B;AACD,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,CAAC,IAAI,YAAY,OAAO,MAAM,GAAG;AACvC,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,EAAE,IAAI,MAAM,QAAQ,WAAW,QAAQ,QAAQ,OAAO,UAAW;AAAA,QACzE,UAAU;AAAA,QACV,WAAW,CAAE;AAAA,MACrB;AAAA,IACK;AACD,WAAO,aAAa;AAAA,MAClB,MAAM;AAAA,MACN,QAAQ,EAAE,IAAI,MAAM,UAAW;AAAA,MAC/B,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,IACP,CAAK;AAAA,EACF;AACD,MAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU,OAAO,SAAS,eAAe,OAAO,SAAS,gBAAgB;AACvH,WAAO,aAAa,OAAO,MAAM,EAAE;AAAA,EACpC;AACD,MAAI,OAAO,SAAS,oBAAoB;AACtC,QAAI,OAAO,OAAO,SAAS,YAAY,OAAO,OAAO,UAAU,OAAO,OAAO,OAAO,WAAW,UAAU;AACvG,aAAO,OAAO,SAAS;AAAA,QACrB;AAAA,UACE,IAAI,OAAO,OAAO;AAAA,UAClB,MAAM;AAAA,QACP;AAAA,MACT;AAAA,IACK;AACD,UAAM,EAAE,UAAU,cAAc,OAAO,WAAW,cAAc,OAAO,QAAQ,IAAI,EAAE,UAAU,MAAM,WAAW,CAAE,EAAA;AAClH,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,OAAO;AAAA,MACf;AAAA,MACA;AAAA,IACN;AAAA,EACG;AACD,MAAI,OAAO,IAAI;AACb,QAAI,OAAO,SAAS,YAAY,OAAO,UAAU,OAAO,OAAO,WAAW,UAAU;AAClF,aAAO,SAAS;AAAA,QACd;AAAA,UACE,IAAI,OAAO;AAAA,UACX,MAAM;AAAA,QACP;AAAA,MACT;AAAA,IACK;AACD,UAAM,CAAC,IAAI,YAAY,OAAO,GAAG,MAAM,GAAG;AAC1C,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQM,gBAAcD,iBAAe,CAAE,GAAE,MAAM,GAAG;AAAA,UAChD;AAAA,QACV,CAAS;AAAA,QACD,UAAU;AAAA,QACV,WAAW,CAAE;AAAA,MACrB;AAAA,IACK;AACD,WAAO,aAAa;AAAA,MAClB,MAAM;AAAA,MACN,QAAQC,gBAAcD,iBAAe,CAAE,GAAE,MAAM,GAAG;AAAA,QAChD;AAAA,MACR,CAAO;AAAA,MACD,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,IACP,CAAK;AAAA,EACF;AACD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,WAAW,CAAE;AAAA,EACjB;AACA;AC/KO,uBACL,UAGI,IACJ,OAAc,CAAA,GACwB;AAChC,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACZ,QAAM,QAAQ;AACR,QAAA,eAAe,KAAK,KAAK,IAAI;AAEnC,QAAM,aAAa,iBACjB,CAAC,MAAO,eAAe,EAAE,KAAK,SAAS,WAAW,gBAAgB,QAClE,CAAC,YAAY,CACf;AAEA,QAAM,OAAO,iBACX,CAAC,MACC,cAAc,WAAW,OACrB,WAAW,KACR,IAAI,CAAC,eAAgB,aAAa,EAAE,KAAK,SAAS,WAAW,MAAM,WAAW,MAAM,IAAK,EACzF,OAAO,OAAO,IACjB,CACN,GAAA,CAAC,UAAU,CACb;AAEA,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IACT;AAEA,UAAM,gBAAqB,iCACtB,aADsB;AAAA,MAEzB;AAAA,MACA,QAAQ,aAAa,WAAW,QAAe,EAAE,SAAS,MAAM,SAAS,EAAE,KAAK,SAAS;AAAA,IAAA;AAG3F,QAAI,UAAU;AACZ,aAAO,SAAS,aAAa;AAAA,IAC/B;AACO,WAAA;AAAA,EAAA,GACN,CAAC,YAAY,UAAU,MAAM,GAAG,IAAI,CAAC;AAC1C;AC7CO,mBACL,UAGI,IACJ,OAAc,CAAA,GACoB;AAC5B,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACN,QAAA,WAAW,KAAK,KAAK,IAAI;AAE/B,QAAM,SAAS,iBAAiB,CAAC,MAAO,WAAW,EAAE,KAAK,SAAS,OAAO,YAAY,QAAY,CAAC,QAAQ,CAAC;AAE5G,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,QAAQ;AACJ,aAAA;AAAA,IACT;AACA,QAAI,UAAU;AACZ,aAAO,SAAS,MAAM;AAAA,IACxB;AACO,WAAA;AAAA,KACN,CAAC,QAAQ,UAAU,GAAG,IAAI,CAAC;AAChC;ACzBO,MAAME,mBAAoG,CAAC;AAAA,EAChH/F;AAAAA,EACA8C,OAAOkD;AAAAA,EACPC;AAAAA,EACAC;AAAAA,MACI;AACJ,QAAM9H,aAAa+H,cAAc;AAAA,IAAEnG;AAAAA,EAAAA,CAAH;AAC1B8C,QAAAA,QAAQsD,UAAoBhI,YAAY,OAAvB;AACjBiI,QAAAA,OAAOD,UAAkFhI,YAAY,MAArF;AACtB,QAAMkI,SAASC,kBAAkBnI,YAAmB,CAAC,OAAD,CAApB;AAChC,QAAMD,SAASqI;AAETC,QAAAA,YAAY1H,QAAQ,MAAM;AACvB2H,WAAAA,YAAYV,cAAclD,KAAf;AAAA,EAAA,GACjB,CAACkD,cAAclD,KAAf,CAFsB;AAInB6D,QAAAA,UACJxI,UACAC,cACAA,WAAWwI,UACVxI,WAAWwI,OAAeC,YAC1BzI,WAAWwI,OAAeC,SAASC,SAAS,iBAC5C1I,WAAWwI,OAAeG,UAC1B3I,WAAWwI,OAAeG,OAAO/G,OAAO7B,OAAO6B;AAElD,MAAI,CAAC2G,SAAS;AACL,WAAA;AAAA,EACR;AAED,6BACG,iBAAD;AAAA,IACE,IAAIvI,WAAW4B;AAAAA,IACf,WAAW;AAAA,IACX,QAAS5B,WAAWwI,OAAeC,SAASG;AAAAA,IAC5C,OAAOP;AAAAA,IACP,WAAWJ,8BAAMJ,cAAaA;AAAAA,IAC9B,aAAa,CAAC,CAAEI,+BAAMY,SAAQf;AAAAA,IAC9B,MAAMG,8BAAMY,SAAQ;AAAA,IACpB,OAAOZ,8BAAMa,UAAS;AAAA,IACtB,YAAYb,8BAAMO,WAAU;AAAA,KACxBN,OAXR;AAcD;AC3CM,MAAMa,uBAAoG,CAAC;AAAA,EAChHlB;AAAAA,EACAmB;AAAAA,MACI;;AACEtE,QAAAA,QAAQsD,UAAoBgB,MAAM,OAAjB;AACjBf,QAAAA,OAAOD,UAAkCgB,MAAM,MAA/B;AAEJtH,mBAAAA,CAAAA,UAAWsH,KAAKpH,KAAKF,MAAMG,KAAKC,SAASmH,eAAeD,KAAKpH,MAAM,MAAO,CAA5E,CAAA;AAEhB,6BACG,UAAD;AAAA,IAAA,UACGoH,WAAKxG,UAALwG,mBAAYrH,IAAK3B,CAAe,eAAA;AAC/B,iCACG,kBAAD;AAAA,QAEE,IAAIA,WAAW4B;AAAAA,QACf;AAAA,QACA,WAAWqG,8BAAMJ,cAAaA;AAAAA,MAAAA,GAHzB7H,WAAW4B,EADlB;AAAA,IAAA;AAAA,EAFH,CAFL;AAcD;ACzB2B,qBAAA;AAAA,EAC1BA;AAAAA,EACAsH;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,IAAI;AAAA,EACJC,IAAI;AAAA,EACJ9I;AAAAA,EACA+I;AAAAA,GAUC;;AACD,6BACG,UAAD;AAAA,IAAA,UACG,CAACL,MAAMM,+BACL,UAAD;AAAA,MAAA,UACE,CAAA5I,oBAAA,eAAA;AAAA,QACE;AAAA,QAEA,KAAKsI,MAAMtH;AAAAA,QACX,QAAQsH,MAAMV,OAAOI;AAAAA,QACrB,SACEM,MAAMzE,SAASyE,MAAMvE,SACjB;AAAA,UACEF,OAAOyE,MAAMzE;AAAAA,UACbE,QAAQuE,MAAMvE;AAAAA,QAEhB/E,IAAAA;AAAAA,MAXR,CAAA,GAcCY,QAfH;AAAA,IAAA,GAAc,YAAd,IAkBAiJ,qBAAC,UAAD;AAAA,MAAA,UACE,CAAA7I,oBAAC,SAAD;AAAA,QAEE,OAAO;AAAA,UACLgB,IAAIsH,MAAMM,QAAQ5H,MAAMsH,MAAMM,QAAQ,UAAU;AAAA,UAChD7E,QAAQuE,MAAMvE;AAAAA,UACdF,OAAOyE,MAAMzE;AAAAA,UACbiF,cAAcR,MAAMM;AAAAA,UACpBL,WAAWA,aAAaA,UAAUT,SAAS,UAAUS,YAAYvJ;AAAAA,QAL5D;AAAA,QAOP,GAAGsJ,aAAMV,WAANU,mBAAcN,QAAQS,KAAIA;AAAAA,QAC7B,GAAGH,aAAMV,WAANU,mBAAcN,QAAQU,KAAIA;AAAAA,QAC7B,OAAOJ,YAAMV,WAANU,mBAAcN,QAAQnE;AAAAA,QAC7B,QAAQyE,YAAMV,WAANU,mBAAcN,QAAQjE;AAAAA,QAC9B;AAAA,MAbF,CAAA,GAeCnE,QAhBH;AAAA,OAAc,SAAd;AAAA,KApBWoB,EAAf;AAyCH;AC7CM,+BAA+B,UAA2B;AAC3D,MAAA,SAAS,SAAS,oBAAoB;AACxC,WAAO,CAAC,SAAS,QAAQ,EAAE,UAAU,SAAS,UAAU;AAAA,EAC1D;AAEA,SAAO,CAAC,UAAU,EAAE,UAAU,KAAM,CAAA;AACtC;AAeE,uBAAA,OACA,qBACA,gBACY;AACZ,QAAM,QAAkB,CAAA;AACxB,MAAI,SAA+B;AACnC,QAAM,QAA6B,CAAA;AAEnC,aAAW,cAAc,qBAAqB;AACtC,UAAA,SAAS,MAAM,IAAqB,WAAW,MAAM,EAAE,gBAAgB,OAAO;AACpF,eAAW,eAAe,QAAQ;AAChC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AACA,YAAM,CAAC,MAAM,EAAE,cAAc,sBAAsB,WAAW;AAC9D,YAAM,OAAQ,MAAK,QAAQ,WAAW,YAAY;AAGlD,UAAI,SAAS,UAAU;AACrB,cAAM,eAAe,MAAM,IAAqB,KAAK,KAAK;AAGpD,cAAA,WAAW,eAAe,SAC5B,eAAe,IAAI,CAAC,QAAQ,aAAa,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,OAAO,IAClF,CAAC,aAAa,EAAE;AAEhB,YAAA,SAAS,WAAW,GAAG;AAChB,mBAAA,KAAK,aAAa,EAAE;AAAA,QAC/B;AAGS,iBAAA;AAAA,UACP,MAAM;AAAA,UACN,OAAO,aAAa,IAAI,CAAC,MAAO;AAAA,YAC9B,IAAI,EAAE;AAAA,YACN,OAAQ,EAAU;AAAA,YAClB,UAAU,SAAS,QAAQ,CAAC,MAAM;AAAA,UAAA,EAClC;AAAA,UACF,OAAQ,YAAoB;AAAA,QAAA;AAIvB,eAAA,KAAK,GAAI,QAAkB;AAElC;AAAA,MACF;AAEA,UAAI,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC9B,cAAM,KAAK,IAAI;AAAA,MACjB;AAEA,YAAM,KAAK;AAAA,QACT,cAAc,WAAW;AAAA,QACzB;AAAA,QACA,UAAU;AAAA,QACV,QAAQ,WAAW;AAAA,QACnB;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EACF;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEO,iCACL,QACA,QACuF;AACvF,QAAM,EAAE,UAAU,aAAa,WAAW+H,eAAa,MAAM;AAEzD,MAAA,OAAO,OAAO,OAAO,IAAI;AAEpB,WAAA,CAAC,MAAM,MAAM;AAAA,EACtB;AAGA,QAAM,gBAA6B;AAAA,IACjC,MAAM;AAAA,IACN,SAAS;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,IACjB;AAAA,EAAA;AAGK,SAAA;AAAA,IACL,cACI,YAAY,SAAS,qBACnB;AAAA,MACE,MAAM;AAAA,MACN,UAAU,YAAY;AAAA,MACtB,SAAS,cAAc;AAAA,QAEzB,cACF;AAAA,IACJ;AAAA,EAAA;AAEJ;AAEO,MAAM,eAAe;AAAA,EAC1B,YAAY,MAAM;AAAA,EAElB;AACF;AAEa,MAAA,kBAA2C,EAAE,MAAM,UAAU;AAE7D,MAAA,sBAAsB,CAAC,WAA4C;AACvE,SAAA,EAAE,MAAM,WAAW,QAAQ,aAAa,EAAE,OAAO,CAAC,EAAA;AAC3D;AAEa,MAAA,gBAAgB,CAAC,OAAe,WAA4C;AACvF,SAAO,EAAE,MAAM,SAAS,OAAO,QAAQ,aAAa,EAAE,OAAO,CAAA,EAAM,GAAA,OAAO,MAAM,QAAQ,CAAG,EAAA;AAC7F;AC7JA,mBAAiB,OAAkB,YAAoB;;AAC/C,QAAA,eAAe,qCAAO,SAAP,mBAAa,KAAK;AACvC,MAAI,CAAC,cAAc;AACV,WAAA;AAAA,EACT;AACA,SAAO,aAAa;AACtB;AAEO,qCAAqC,YAAqB,kBAA6B;AACrF,SAAA,iBACL,CAAC,UAAU;AACT,UAAM,UAAoB,CAAA;AAC1B,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IACT;AACA,UAAM,uBAAuB,OAAO,KAAK,MAAM,KAAK,SAAS,cAAc;AAC3E,eAAW,oBAAoB,sBAAsB;AACnD,UAAI,CAAC,oBAAoB,iBAAiB,QAAQ,gBAAgB,MAAM,IAAI;AACpE,cAAA,qBAAqBC,UAAQ,OAAO,gBAAgB;AAC1D,YAAI,sBAAsB,mBAAmB,SAAS,mBAAmB,MAAM,aAAa;AAC1F,kBAAQ,KAAK,gBAAgB;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEO,WAAA;AAAA,EAAA,GAET,CAAC,YAAY,gBAAgB,CAC/B;AACF;AC9ByC,kCAAA;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAMC;AACD,QAAM,WAAqB,CAAA;AAE3B,MAAI,UAAU;AACD,eAAA,QAAQ,SAAS,aAAa;AACvC,UAAI,SAAS,QAAQ,KAAK,EAAE,MAAM,IAAI;AAC3B,iBAAA,KAAK,KAAK,EAAE;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK;AACH,QAAA,YAAY,SAAS,QAAQ;AAC/B,iBAAW,WAAW,UAAU;AACnB,mBAAA,QAAQ,QAAQ,aAAa;AACtC,cAAI,SAAS,QAAQ,KAAK,EAAE,MAAM,IAAI;AAC3B,qBAAA,KAAK,KAAK,EAAE;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,aACS,QAAQ;AACN,eAAA,QAAQ,OAAO,aAAa;AACrC,UAAI,SAAS,QAAQ,KAAK,EAAE,MAAM,IAAI;AAC3B,iBAAA,KAAK,KAAK,EAAE;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AASO,SAAA;AACT;AChCA,iBAAiB,OAAkB,YAAoB;;AAC/C,QAAA,eAAe,qCAAO,SAAP,mBAAa,KAAK;AACvC,MAAI,CAAC,cAAc;AACV,WAAA;AAAA,EACT;AACA,SAAO,aAAa;AACtB;AAEyC,kCAAA,YAAqB,UAA6B,IAAI;AAC7F,QAAM,QAAQ;AACd,QAAM,WAAW;AACjB,QAAM,SAAS;AACf,QAAM,WAAW;AACX,QAAA,mBAAmB,QAAQ,MAAM;AACrC,WAAO,yBAAyB;AAAA,MAC9B,KAAK,QAAQ;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA,GACA,CAAC,QAAQ,KAAK,QAAQ,UAAU,QAAQ,CAAC;AAC5C,QAAM,iBAAiB,4BAA4B,YAAY,QAAQ,MAAM,SAAY,gBAAgB;AAEnG,QAAA,kBAAkB,YACtB,CAAC,eAAuB;AACtB,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,UAAM,aACJ,CAAC,YAAY,yBAAyB,OAAO,GAC7C,CAAC,sBAA6D;AACxD,UAAA,qBAAqB,CAAC,kBAAkB,aAAa;AAChD,eAAA;AAAA,MACT;AAEO,aAAA,iCACD,qBAAqB,CAAC,IADrB;AAAA,SAEJ,aAAa;AAAA,MAAA;AAAA,IAChB,CAEJ;AAAA,EAAA,GAEF,CAAC,YAAY,KAAK,CACpB;AAEA,QAAM,iBAAiB,YACrB,CAAC,IAAY,MAAoC,CAAA,MAAO;AACtD,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACM,UAAA,QAAQ,MAAM;AACpB,UAAM,aAAa,CAAA;AAGnB,QAAI,2BAAK,gBAAgB;AACvB,YAAM,uBAAuB,OAAO,KAAK,MAAM,KAAK,SAAS,cAAc;AAC3E,iBAAW,oBAAoB,sBAAsB;AAC7C,cAAA,qBAAqB,QAAQ,OAAO,gBAAgB;AAC1D,YAAI,sBAAsB,mBAAmB,SAAS,mBAAmB,MAAM,aAAa;AAC1F,qBAAW,KAAK,gBAAgB;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAGA,eAAW,cAAc,YAAY;AACnC,sBAAgB,UAAU;AAAA,IAC5B;AAGA,UAAM,aACJ,CAAC,IAAI,yBAAyB,OAAO,GACrC,CAAC,sBAA6D;AACxD,UAAA,qBAAqB,kBAAkB,aAAa;AAC/C,eAAA;AAAA,MACT;AACO,aAAA,iCACD,qBAAqB,CAAC,IADrB;AAAA,SAEJ,aAAa;AAAA,MAAA;AAAA,IAChB,CAEJ;AAAA,EAEF,GAAA,CAAC,YAAY,iBAAiB,KAAK,CACrC;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AC3GO,sBAA4B,KAAe,MAAsB;AACtE,SAAO,iBAAiB,CAAC,OAAO,UAAU,MAAM,IAAU,IAAI,IAAI,CAAC,OAAU,GAAA,IAAI,OAAO,CAAC,GAAU,CAAC,KAAK,IAAI,CAAC;AAChH;ACDO,MAAMC,4BAA4B1J,eAAMC,cAAkC,IAAI0J,oBAA5C;AAED,iCAAA;AACtC,SAAOxJ,WAAWuJ,yBAAD;AAClB;ACEqC,+BAAA;AACpC,QAAM,SAAS;AACf,QAAM,CAAC,oBAAoB,yBAAyB,SAAiC,CAAE,CAAA;AACjF,QAAA,aAAa,OAAO,KAAK;AAC/B,YAAU,MAAM;AACd,WAAO,MAAM;AACX,iBAAW,UAAU;AAAA,IAAA;AAAA,EAEzB,GAAG,CAAE,CAAA;AACL,QAAM,mBAAmB,YACvB,CAAC,cAAc,EAAE,QAAQ,YAAY;AACnC,QAAI,cAAc;AACV,YAAA,iBAAiB,aAAa,MAAO,aAAa;AAElD,YAAA,aAAa,OAAO,gBAAgB;AAAA,QACxC,IAAI;AAAA,QACJ,OAAO,aAAa,SAAS;AAAA,QAC7B,QAAQ,aAAa,UAAU;AAAA,QAC/B,QAAQ;AAAA,MAAA,CACT;AAED,UAAI,YAAY;AACC,uBAAA;AAAA,MAAA,WACN,CAAC,mBAAmB,iBAAiB;AAC1C,YAAA,CAAC,WAAW,SAAS;AACvB,gCAAsB,CAAC,MAAM;AACpB,mBAAA,iCACF,IADE;AAAA,eAEJ,iBAAiB;AAAA,YAAA;AAAA,UACpB,CACD;AAAA,QACH;AACA,eACG,YAAY;AAAA,UACX,IAAI;AAAA,UACJ,OAAO,aAAa,SAAS;AAAA,UAC7B,QAAQ,aAAa,UAAU;AAAA,QAAA,CAChC,EACA,KAAK,MAAM;AACN,cAAA,CAAC,WAAW,SAAS;AACvB,kCAAsB,CAAC,MAAM;AACpB,qBAAA,iCACF,IADE;AAAA,iBAEJ,iBAAiB;AAAA,cAAA;AAAA,YACpB,CACD;AAAA,UACH;AAAA,QAAA,CACD;AAAA,MACL;AAAA,IACF;AACO,WAAA;AAAA,EAAA,GAET,CAAC,QAAQ,kBAAkB,CAC7B;AAEO,SAAA,CAAC,kBAAkB,kBAAkB;AAC9C;AC1DE,gCAAA,UAAmE,IAC3C;AACxB,QAAM,aAAa;AACb,QAAA,SAAS,UAAU,QAAQ,WAAW,EAAE,IAAI,QAAQ,SAAS,IAAI,MAAS;AAEzE,SAAA,iBACL,CAAC,OAAO,UAAU;AAChB,QAAI,CAAC,QAAQ;AACX,aAAO;IACT;AACI,QAAA,cAAc,QAAQ,wBAAwB;AAChD,aAAO,CAAC,UAAU;AAAA,IACpB;AACA,UAAM,kBAAkB,MAAM,IAA8B,OAAO,KAAK;AACxE,UAAM,kBAA0C,CAAA;AAChD,eAAW,QAAQ,iBAAiB;AAClC,sBAAgB,KAAK,GAAG,MAAM,IAA0B,KAAK,KAAK,CAAC;AAAA,IACrE;AACO,WAAA;AAAA,EAAA,GAET,CAAC,MAAM,CACT;AACF;ACvBE,uBAAA,SACA,OAAc,IACd;AACA,QAAM,QAAQ;AACd,QAAM,sBAAsB,uBAAuB,EAAE,wBAAwB,mCAAS,wBAAwB;AAC9G,QAAM,CAAC,gBAAgB,qBAAqB,SAAmB,oCAAS,mBAAkB,CAAA,CAAE;AAE5F,QAAM,aAAa,QACjB,MAAM,cAAc,OAAO,qBAAqB,cAAc,GAC9D,CAAC,OAAO,qBAAqB,gBAAgB,GAAG,IAAI,CACtD;AAEM,QAAA,aAAa,YACjB,CACE,IACA,EAAE,iBAAiB,MAAM,WAAW,UAA4D,OAC7F;AACH,QAAI,WAAW,QAAQ;AAEjB,UAAA,WAAW,OAAO,SAAS,iBAAiB;AACxC,cAAA,IAAI,MAAM,kCAAkC;AAAA,MACpD;AAEA,wBAAkB,CAAC,gBAAgB;AACjC,YAAI,UAAU;AACZ,gBAAM,UAAU,YAAY,OAAO,CAAC,MAAM,MAAM,EAAE;AAE9C,cAAA,QAAQ,WAAW,GAAG;AACxB,kBAAM,YAAY,WAAW,MAAM,GAAG,SAAS;AAC/C,gBAAI,WAAW;AACb,qBAAO,CAAC,SAAS;AAAA,YAAA,OACZ;AACL,qBAAO;YACT;AAAA,UACF;AAEO,iBAAA;AAAA,QACT;AAEA,YAAI,gBAAgB;AAClB,iBAAO,CAAC,EAAE;AAAA,QACZ;AAEM,cAAA,aAAa,CAAC,GAAG,WAAW;AAGlC,YAAI,WAAW,WAAW,KAAK,WAAW,MAAM,QAAQ;AACtD,gBAAM,YAAY,WAAW,MAAM,GAAG,SAAS;AAC/C,cAAI,WAAW;AACb,uBAAW,KAAK,SAAS;AAAA,UAC3B;AAAA,QACF;AAEA,YAAI,YAAY,QAAQ,EAAE,MAAM,IAAI;AAC3B,iBAAA;AAAA,QACT;AAEO,eAAA,CAAC,GAAG,aAAa,EAAE;AAAA,MAAA,CAC3B;AAAA,IACH;AAAA,EAAA,GAEF,CAAC,WAAW,MAAM,CACpB;AAEM,QAAA,UAAU,EAAE;AAEX,SAAA,CAAC,YAAY,OAAO;AAC7B;ACvDE,0BAAA,QACA,YACA,kBACA;AACA,QAAM,aAAyC,CAAA;AACpC,aAAA,eAAe,WAAW,OAAO;AAEpC,UAAA,WACJ,YAAY,YAAY,YAAY,SAAS,SAAS,qBAClD,YAAY,SAAS,SACrB,YAAY;AAGd,QAAA,CAAC,SAAS,IAAI;AAEhB,aAAO,oBAAoB,wBAAwB;AAAA,IACrD;AAEA,QAAI,eAAe;AACnB,QAAI,SAAS,SAAS;AACd,YAAA,gBAAgB,iBAAiB,QAAe;AACtD,UAAI,cAAc,IAAI;AACL,uBAAA,iBAAiB,cAAc,IAAI,MAAM;AAAA,MAC1D;AAAA,IACF;AAGA,UAAM,gBAA6B;AAAA,MACjC,MAAM;AAAA,MACN,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,MACjB;AAAA,IAAA;AAGF,UAAM,CAAC,QAAQ,UAAU,wBAAwB,QAAQ,YAAY,MAAM;AACvE,QAAA,OAAO,OAAO,OAAO,IAAI;AAE3B;AAAA,IACF;AAGA,UAAM,uBAAuB;AAAA,MAC3B,MAAM;AAAA,MACN,SAAS;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,MACjB;AAAA,IAAA;AAEI,UAAA,gBAAgB,YAAY,SAAS,SAAS,qBAAqB,aAAa,YAAY,QAAQ,IAAI;AACxG,UAAA,WACJ,iBACA,cAAc,YACb,eAAc,SAAS,SAAS,iBAAiB,cAAc,SAAS,SAAS,yBAC9E;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,GAAG,cAAc,SAAS,QAAQ;AAAA,QAClC,GAAG,cAAc,SAAS,QAAQ;AAAA,QAClC,OAAO,cAAc,SAAS,QAAQ;AAAA,QACtC,QAAQ,cAAc,SAAS,QAAQ;AAAA,MACzC;AAAA,IAEF,IAAA;AAEF,QAAA,gBAAgB,CAAC,aAAa,IAAI;AACnC,mBAAqB,KAAK,aAAa;AAAA,IAC1C;AAEA,UAAM,YAAsC;AAAA,MAC1C,IAAI,SAAS;AAAA,MACb,MAAM;AAAA,MACN,cAAc,YAAY;AAAA,MAC1B,OAAO,SAAS,SAAS,QAAQ,OAAO;AAAA,MACxC,QAAQ,SAAS,SAAS,SAAS,OAAO;AAAA,MAC1C,SAAS;AAAA,MACT,OACE,gBAAgB,aAAa,QACzB,aAAa,QACb,SAAS,SAAS,SAAS,SAC3B,CAAC,EAAE,OAAO,SAAS,OAAO,QAAQ,SAAS,OAAQ,CAAA,IACnD,CAAC;AAAA,MACP,QAAQ,UAAU,OAAO,SAAS,kBAAkB,SAAS;AAAA,MAC7D;AAAA,IAAA;AAGF,eAAW,KAAK,SAAS;AAAA,EAC3B;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO,WAAW;AAAA,IAClB,QAAQ;AAAA,IACR,QAAQ,WAAW;AAAA,EAAA;AAEvB;ACvGA,MAAM,mBAAmB,CAAC,mBAAmB;AAEtC,uBAAuB,QAA0B,YAA2C;AAC3F,QAAA,QAAQ,WAAW,MAAM;AAC/B,QAAM,WAAW,MAAM;AAEnB,MAAA,CAAC,SAAS,QAAQ;AACpB,WAAO,oBAAoB,gBAAgB;AAAA,EAC7C;AAEA,MAAI,iBAAiB,QAAQ,SAAS,MAAM,MAAM,IAAI;AAC7C,WAAA,oBAAoB,cAAc,SAAS,uBAAuB;AAAA,EAC3E;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX;AC5BO,0BAA0B,QAA0B,YAAwB;;AAC7E,MAAA,CAAC,OAAO,UAAU;AACpB,WAAO,oBAAoB,uBAAuB;AAAA,EACpD;AAEI,MAAA,WAAW,MAAM,SAAS,GAAG;AAC/B,WAAO,oBAAoB,iCAAiC;AAAA,EAC9D;AAEM,QAAA,gBAAgB,iBAAW,MAAM,OAAjB,mBAAqB;AAE3C,MAAI,CAAC,eAAe;AAClB,WAAO,oBAAoB,eAAe;AAAA,EAC5C;AAEI,MAAA,CAAC,cAAc,QAAQ;AACzB,WAAO,oBAAoB,4BAA4B;AAAA,EACzD;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,MACL,cAAc,WAAW,MAAM,GAAG;AAAA,MAClC,UAAU,OAAO;AAAA,MACjB,KAAK,cAAc;AAAA,MACnB,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW;AAAA,UACX,SAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,MACA,QAAQ,cAAc;AAAA,MACtB,UAAU;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW;AAAA,UACX,SAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,OAAO,CAAC;AAAA,IACV;AAAA,EAAA;AAEJ;AC7CO,0BAA0B,QAA0B,YAAwB;;AAC3E,QAAA,kBAAkB,WAAW,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO;AAErE,MAAA,CAAC,OAAO,UAAU;AACpB,WAAO,oBAAoB,uBAAuB;AAAA,EACpD;AAEI,MAAA,gBAAgB,SAAS,GAAG;AAC9B,WAAO,oBAAoB,iCAAiC;AAAA,EAC9D;AAEM,QAAA,gBAAgB,sBAAgB,OAAhB,mBAAoB;AAE1C,MAAI,CAAC,eAAe;AAClB,WAAO,oBAAoB,eAAe;AAAA,EAC5C;AAEI,MAAA,CAAC,cAAc,QAAQ;AACzB,WAAO,oBAAoB,4BAA4B;AAAA,EACzD;AAIO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,MACL,cAAc,WAAW,MAAM,GAAG;AAAA,MAClC,UAAU,OAAO;AAAA,MACjB,KAAK,cAAc;AAAA,MACnB,MAAM;AAAA,MACN,OAAO,CAAC;AAAA,MACR,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW;AAAA,UACX,SAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,MACA,QAAQ,cAAc;AAAA,MACtB,UAAU;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,UACR,WAAW;AAAA,UACX,SAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,OAAO,CAAC;AAAA,IACV;AAAA,EAAA;AAEJ;AC1CA,mBAAmB,MAAW,cAAmC,CAAA,GAAI,MAAe;AAC5E,QAAA,WAAW,KAAK,YAAY,QAAQ;AAC1C,UAAQ,KAAK;AAAA,SACN,eAAe;AACd,UAAA,OAAO,KAAK,UAAU,aAAa;AACrC,oBAAY,YAAY,KAAK;AAAA,MAC/B;AACA;AAAA,IACF;AAAA,SACK;AAAA,SACA;AAAA,SACA,UAAU;AACb,UAAI,KAAK,OAAO;AACT,aAAA,MAAM,QAAQ,CAAC,UAAe,UAAU,OAAO,aAAa,QAAQ,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA;AAEK,SAAA;AACT;AAEO,mCAAmC,QAA0B,YAA2C;AAC7G,QAAM,QAAyC,CAAA;AAEpC,aAAA,MAAM,QAAQ,CAAC,SAAS;AACjC,QAAI,KAAK,UAAU;AACjB,YAAM,CAAC,UAAU,wBAAwB,QAAQ,KAAK,MAAM;AACtD,YAAA,KAAK,EAAE,cAAc,KAAK,cAAc,MAAM,UAAU,KAAK,QAAQ,GAAG,OAAuB,CAAA;AAAA,IACvG;AAAA,EAAA,CACD;AAEM,SAAA;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EAAA;AAEJ;ACXO,8BAA8B,SAA6D;AAChG,QAAM,WAAW;AACjB,QAAM,SAAS;AACf,QAAM,QAAQ;AACR,QAAA,CAAC,kBAAkB,sBAAsB,oBAAoB;AAC7D,QAAA,EAAE,mBAAmB,yBAAyB,oCAAS,4BAA2B,sCAAU,OAAM,kCAAQ,KAAI;AAAA,IAClH,KAAK;AAAA,EAAA,CACN;AACK,QAAA,eAAe,aAAuC,gBAAgB,gBAAgB;AAEtF,QAAA,WAAwC,oCAAS,eAAc;AAAA,IACnE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,CAAC,YAAY,WAAW,cAAc,SAAS,CAAC,kBAAkB,CAAC;AAEnE,QAAA,WAAW,QAAQ,MAAM;AAC7B,QAAI,CAAC,QAAQ;AACJ,aAAA;AAAA,IACT;AAEI,QAAA,WAAW,MAAM,WAAW,GAAG;AACjC,UAAI,SAAS,QAAQ,OAAO,MAAM,IAAI;AACpC,eAAO,cAAc,OAAO,OAAO,OAAO,MAAM;AAAA,MAClD;AACO,aAAA;AAAA,IACT;AAEI,QAAA,WAAW,MAAM,WAAW,GAAG;AAC7B,UAAA,WAAW,MAAM,WAAW,KAAK,WAAW,MAAM,QAAQ,MAAM,MAAM,IAAI;AAC5E,mBAAW,QAAQ,WAAW,MAAM,OAAO,CAAC,MAAM,MAAM,MAAM;AAAA,MAAA,OACzD;AACL,YAAI,SAAS,QAAQ,kBAAkB,MAAM,IAAI;AAC/C,iBAAO,oBAAoB,gCAAgC;AAAA,QAC7D;AACA,eAAO,oBAAoB,2CAA2C;AAAA,MACxE;AAAA,IACF;AAEM,UAAA,WAAW,WAAW,MAAM;AAGlC,QAAI,aAAa,SAAS;AACxB,UAAI,SAAS,QAAQ,QAAQ,MAAM,IAAI;AACrC,eAAO,oBAAoB,qBAAqB;AAAA,MAClD;AAEO,aAAA,iBAAiB,QAAQ,YAAY,gBAAgB;AAAA,IAC9D;AAGI,QAAA,aAAa,WAAW,aAAa,SAAS;AAChD,UAAI,SAAS,QAAQ,UAAU,MAAM,IAAI;AACvC,eAAO,oBAAoB,kBAAkB;AAAA,MAC/C;AAEO,aAAA,cAAc,QAAQ,UAAU;AAAA,IACzC;AAEA,QAAI,aAAa,eAAe;AAC9B,UAAI,SAAS,QAAQ,iBAAiB,MAAM,IAAI;AAC9C,eAAO,oBAAoB,+BAA+B;AAAA,MAC5D;AAEO,aAAA,0BAA0B,QAAQ,UAAU;AAAA,IACrD;AAEI,QAAA,aAAa,WAAW,aAAa,SAAS;AAChD,UAAI,SAAS,QAAQ,OAAO,MAAM,IAAI;AACpC,eAAO,oBAAoB,qBAAqB;AAAA,MAClD;AAGO,aAAA,iBAAiB,QAAQ,UAAU;AAAA,IAC5C;AAEA,QAAI,aAAa,SAAS;AACxB,UAAI,SAAS,QAAQ,OAAO,MAAM,IAAI;AACpC,eAAO,oBAAoB,qBAAqB;AAAA,MAClD;AAGO,aAAA,iBAAiB,QAAQ,UAAU;AAAA,IAC5C;AAGO,WAAA;AAAA,EAAA,GACN,CAAC,QAAQ,YAAY,OAAO,QAAQ,UAAU,CAAC;AAElD,SAAO,QAAQ,MAAM;AACf,QAAA,SAAS,SAAS,WAAW;AACxB,aAAA,CAAC,UAAU,YAAY;AAAA,IAChC;AAEO,WAAA;AAAA,MACL,iCACK,WADL;AAAA,QAEE,aAAa,EAAE,OAAO,aAAa;AAAA,MACrC;AAAA,MACA;AAAA,IAAA;AAAA,EACF,GACC,CAAC,UAAU,YAAY,CAAC;AAC7B;AC3IO,MAAM,iBAAiB,CAAC,UAAkC,OAAc,OAAa;AAC1F,QAAM,QAAQ;AAEd,YAAU,MAAM;AACd,aAAS,KAAK;AAAA,EACb,GAAA,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB;ACTA,+BAA+B,OAAO,eAAe,IAAI;AACvD,QAAM,qBAAqB,aAAa,sBAAsB,IAAI,mBAAkB;AACpF,wCAAsC,OAAO,SAAS,aAAa,aAAa,CAAE,GAAE,YAAY;AAC9F,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,EAAE,MAAM,sBAAsB,KAAK,GAAG,UAAU,CAAE,GAAE,KAAK,CAAA;IACjE;AACD,UAAM,YAAY,MAAM,IAAI,KAAK;AACjC,QAAI,OAAO,cAAc,UAAU;AACjC,aAAO,EAAE,MAAM,sBAAsB,SAAS,GAAG,UAAU,CAAE,GAAE,KAAK,CAAA;IACrE;AACD,YAAQ,UAAU;AAAA,WACX,cAAc;AACjB,cAAM,mBAAmB,UAAU;AACnC,cAAM,wBAAwB,MAAM,IAAI,iBAAiB,EAAE;AAC3D,YAAI,cAAc,CAAC,sBAAsB,OAAO;AAC9C,gCAAsB,QAAQ,WAAW;AACzC,gCAAsB,SAAS,WAAW;AAAA,QAC3C;AACD,eAAO,MAAM,mBAAmB,yBAAyB,uBAAuB,SAAS,aAAa,UAAU;AAAA,MACjH;AAAA,WACI,UAAU;AACb,cAAM,SAAS;AACf,YAAI,OAAO,aAAa,OAAO,UAAU,QAAQ;AAC/C,gBAAM,YAAY,MAAM,IAAI,OAAO,UAAU,EAAE;AAC/C,gBAAM,sBAAsB,MAAM,mBAAmB,mBAAmB,WAAW,WAAW;AAC9F,cAAI,uBAAuB,oBAAoB,QAAQ;AACrD,uBAAW,KAAK,GAAG,mBAAmB;AAAA,UACvC;AAAA,QACF;AACD,eAAO,uBAAuB,OAAO,MAAM,IAAI,SAAS,aAAa,YAAY;AAAA,UAC/E,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,QACzB,CAAS;AAAA,MACF;AAAA,WACI,kBAAkB;AACrB,cAAM,iBAAiB;AACvB,eAAO,uBAAuB,eAAe,MAAM,IAAI,SAAS,aAAa,YAAY,UAAU;AAAA,MACpG;AAAA,WACI,UAAU;AACb,cAAM,SAAS;AACf,eAAO,uBAAuB,OAAO,MAAM,IAAI,SAAS,aAAa,YAAY,UAAU;AAAA,MAC5F;AAAA,WACI,cAAc;AACjB,cAAM,aAAa;AACnB,cAAM,gBAAgB,WAAW,MAAM;AACvC,eAAO,uBAAuB,eAAe,SAAS,aAAa,YAAY,UAAU;AAAA,MAC1F;AAAA,WACI,YAAY;AACf,cAAM,WAAW;AACjB,cAAM,cAAc,SAAS,MAAM;AACnC,eAAO,uBAAuB,aAAa,SAAS,aAAa,YAAY,UAAU;AAAA,MACxF;AAAA,WACI;AAAA,WACA;AAAA,WACA;AAAA,WACA;AAAA,WACA;AAAA,WACA;AAAA,WACA;AACH,YAAI,cAAc,CAAC,UAAU,OAAO;AAClC,oBAAU,QAAQ,WAAW;AAC7B,oBAAU,SAAS,WAAW;AAAA,QAC/B;AACD,eAAO,mBAAmB,yBAAyB,WAAW,SAAS,aAAa,UAAU;AAAA,WAC3F;AAAA,WACA;AAAA,WACA;AAAA,WACA;AAAA,WACA;AACH,eAAO,EAAE,MAAM,QAAQ,UAAU,IAAI,KAAK,CAAA;;AAE9C,WAAO,EAAE,MAAM,QAAQ,UAAU,IAAI,KAAK,CAAA;EAC3C;AACD,SAAO;AAAA,IACL;AAAA,EACJ;AACA;ACpEO,sBACL,SACA,aACA,EAAE,UAAU,eAA2D,IACvE;AACA,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,SAAS,QAAQ,MAAM,sBAAsB,OAAO,EAAE,oBAAoB,OAAQ,CAAA,GAAG,CAAC,OAAO,MAAM,CAAC;AAEpG,QAAA,CAAC,WAAW,gBAAgB,SAAqC;AACvE,QAAM,WAAW,YAAY,aAAa,EAAE,IAAI,eAAe,MAAS;AACxE,QAAM,SAAS,UAAU,WAAW,EAAE,IAAI,aAAa,MAAS;AAC1D,QAAA,UAAU,SAAS,SAAS;AAC5B,QAAA,aAAa,OAAO,KAAK;AAE/B,YAAU,MAAM;AACd,eAAW,UAAU;AACrB,WAAO,MAAM;AACX,iBAAW,UAAU;AAAA,IAAA;AAAA,EAEzB,GAAG,CAAE,CAAA;AAEL,MAAI,CAAC,SAAS;AACN,UAAA,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,iBACE,CAAC,MAAM;AACL,WAAO,uBAAuB,SAAS,SAAS,WAAW,EAAE,KAAK,CAAC,UAAU;AAC3E,UAAI,MAAM,QAAQ,CAAC,WAAW,SAAS;AACrC,qBAAa,MAAM,IAAI;AAAA,MACzB;AAAA,IAAA,CACD;AAAA,EAAA,GAEH,CAAC,OAAO,CACV;AAEO,SAAA;AACT;ACbA,yBAAyB,UAAoC;AACpD,SAAA,EAAE,SAAS,OAAO,eAAe,OAAO,WAAW,OAAO,YAAY,OAAO,QAAQ,KAAK,SAAS;AAC5G;AAEA,iBAAiB,OAAyB,QAA2B;AACnE,UAAQ,OAAO;AAAA,SACR;AACH,aAAO,iCAAK,QAAL,EAAY,YAAY,MAAM,WAAW,OAAO,eAAe;SACnE;AACH,aAAO,iCAAK,QAAL,EAAY,YAAY,OAAO,WAAW,CAAC,MAAM;SACrD;AACH,aAAO,iCAAK,QAAL,EAAY,YAAY,OAAO,eAAe;SAClD;AACI,aAAA,iCAAK,QAAL,EAAY,WAAW,MAAM;AAAA,SACjC;AACH,aAAO,iCAAK,QAAL,EAAY,YAAY,OAAO,eAAe,OAAO,WAAW;SACpE;AACI,aAAA,iCAAK,QAAL,EAAY,SAAS,KAAK;AAAA,SAC9B;AACI,aAAA,iCAAK,QAAL,EAAY,QAAQ,OAAO,QAAQ,SAAS,OAAO,WAAW;SAClE;AACH,aAAO,iCAAK,QAAL,EAAY,SAAS,CAAC,MAAM,QAAQ;AAAA,SACxC;AACI,aAAA,iCAAK,QAAL,EAAY,SAAS,MAAM;AAAA;AAE/B,SAAA;AACT;AAEO,oBAAoB,MAAc;AACjC,QAAA,UAAU,KAAK,MAAM,IAAI;AACxB,SAAA,GAAG,KAAK,MAAM,UAAU,EAAE,KAAK,GAAG,UAAU,KAAK,SAAS,GAAG,GAAG;AACzE;AAEO,8BAA8B,OAQnC;AACM,QAAA,CAAC,OAAO,YAAY,WAAW,SAAS,gBAAgB,MAAM,QAAQ,CAAC;AAEvE,QAAA,QAAQ,OAA4C,IAAI;AACxD,QAAA,cAAc,OAAuB,IAAI;AACzC,QAAA,WAAW,OAAuB,IAAI;AACtC,QAAA,WAAW,OAAO,KAAK;AAEvB,QAAA,qBAAqB,YAAY,MAAM;AACvC,QAAA,YAAY,WAAW,MAAM,SAAS;AACxC,kBAAY,QAAQ,YAAY,WAAW,MAAM,QAAQ,WAAW;AACpE,UAAI,SAAS,SAAS;AACX,iBAAA,QAAQ,MAAM,QAAQ,GAAI,MAAM,QAAQ,cAAc,MAAM,WAAY;AAAA,MACnF;AACA,UAAI,SAAS,YAAY,MAAM,QAAQ,OAAO;AACnC,iBAAA,UAAU,MAAM,QAAQ;AACxB,iBAAA,MAAM,QAAQ,QAAQ,EAAE,MAAM,WAAW,EAAE,MAAM,SAAA,CAAU;AAAA,MACtE;AAAA,IACF;AAAA,EAAA,GACC,CAAC,MAAM,QAAQ,CAAC;AAEb,QAAA,OAAO,YAAY,MAAM;AAC7B,QAAI,MAAM,SAAS;AACR,eAAA,EAAE,MAAM,iBAAA,CAAkB;AACnC,YAAM,QAAQ,KAAO,EAAA,KAAK,MAAM;AACrB,iBAAA,EAAE,MAAM,OAAA,CAAQ;AAAA,MAAA,CAC1B;AACkB;IACrB;AAAA,EAAA,GACC,CAAC,kBAAkB,CAAC;AAEjB,QAAA,YAAY,YAAY,MAAM;AAClC,QAAI,MAAM,SAAS;AACjB,UAAI,MAAM,QAAQ,WAAW,KAAK,MAAM,QAAQ,QAAQ;AACjD;MAAA,OACA;AACC;MACR;AAAA,IACF;AAAA,EAAA,GACC,CAAC,kBAAkB,CAAC;AAEjB,QAAA,QAAQ,YAAY,MAAM;AAC9B,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ;AACL,eAAA,EAAE,MAAM,QAAA,CAAS;AACP;IACrB;AAAA,EAAA,GACC,CAAC,kBAAkB,CAAC;AAEjB,QAAA,aAAa,YAAY,MAAM;AACnC,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ,CAAC,MAAM,QAAQ;AAC5B,eAAA,MAAM,QAAQ,QAAQ,EAAE,MAAM,WAAW,EAAE,MAAM,SAAA,CAAU;AAAA,IACtE;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,OAAO,YAAY,MAAM;AAC7B,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ;AACb,eAAA,EAAE,MAAM,OAAA,CAAQ;AAAA,IAC3B;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,SAAS,YAAY,MAAM;AAC/B,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ;AACb,eAAA,EAAE,MAAM,SAAA,CAAU;AAAA,IAC7B;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,YAAY,YAAY,CAAC,cAAsB;AACnD,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ;AAChB,YAAA,QAAQ,SAAS,YAAY;AACnC,eAAS,EAAE,MAAM,cAAc,QAAQ,UAAW,CAAA;AAAA,IACpD;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,qBAAqB,YAAY,CAAC,YAAoB;AAC1D,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,MAAM,UAAU,MAAM,QAAQ,CAAC;AACvE;IACrB;AAAA,EACF,GAAG,CAAE,CAAA;AAEC,QAAA,UAAU,YAAY,CAAC,SAAiB;AAC5C,QAAI,MAAM,SAAS;AACX,YAAA,QAAQ,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,MAAM,QAAQ,CAAC;AACnD;IACrB;AAAA,EACF,GAAG,CAAE,CAAA;AAEL,YAAU,MAAM;AACR,UAAA,WAAW,YAAY,MAAM;AACd;OAClB,GAAG;AAEC,WAAA,MAAM,cAAc,QAAQ;AAAA,EAClC,GAAA,CAAC,oBAAoB,MAAM,QAAQ,CAAC;AAEvC,YAAU,MAAM;AACd,UAAM,QAAQ,MAAM;AACT,eAAA,EAAE,MAAM,WAAA,CAAY;AAAA,IAAA;AAE/B,UAAM,SAAS,MAAM;AAEb,qCAAA,iBAAiB,SAAS;AAElC,WAAO,MAAM,iCAAQ,oBAAoB,SAAS;AAAA,EACpD,GAAG,CAAE,CAAA;AAEE,SAAA;AAAA,IACL,EAAE,SAAS,OAAO,aAAa,SAAS;AAAA,IACxC;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAEJ;ACtMA,MAAME,yBAAyB3J,cAAuC,IAA1B;AAC5C,MAAM4J,2BAA2B5J,cAAyC,IAA5B;AAC9C,MAAM6J,4BAA4B7J,cAIxB,IAJqC;AAMf,yBAAA;AACxBoD,QAAAA,MAAMlD,WAAWyJ,sBAAD;AACtB,MAAI,CAACvG,KAAK;AACF,UAAA,IAAI0G,MAAM,eAAV;AAAA,EACP;AACM1G,SAAAA;AACR;AAEiC,2BAAA;AAC1BA,QAAAA,MAAMlD,WAAW0J,wBAAD;AACtB,MAAI,CAACxG,KAAK;AACF,UAAA,IAAI0G,MAAM,eAAV;AAAA,EACP;AACM1G,SAAAA;AACR;AAEkC,4BAAA;AAC3BA,QAAAA,MAAMlD,WAAW2J,yBAAD;AACtB,MAAI,CAACzG,KAAK;AACF,UAAA,IAAI0G,MAAM,eAAV;AAAA,EACP;AACM1G,SAAAA;AACR;AAEmC,6BAAA;AAAA,EAClC2G;AAAAA,EACAzI;AAAAA,EACAlB;AAAAA,EACA4J;AAAAA,EACAC;AAAAA,EACAC;AAAAA,GAQC;AAEC,SAAA1J,oBAAC,0BAA0B,UAA3B;AAAA,IAAoC,OAAO;AAAA,MAAEwJ;AAAAA,MAAaC;AAAAA,MAAUC;AAAAA,IAAzB;AAAA,IAA3C,UACG1J,oBAAA,yBAAyB,UAA1B;AAAA,MAAmC,OAAOuJ;AAAAA,MAA1C,UACGvJ,oBAAA,uBAAuB,UAAxB;AAAA,QAAiC,OAAOc;AAAAA,QAAxC;AAAA,MAAA,CAAA;AAAA,IAAA,CADF;AAAA,EAAA,CAFJ;AAOD;ACnDqB,eAAA;AAAA,EAAE6I;AAAAA,EAAO/J;AAAAA,GAAyD;AACtF,QAAM,CAAC;AAAA,IAAE8J;AAAAA,IAASF;AAAAA,IAAaC;AAAAA,KAAY3I,OAAOyI,WAAWK,qBAAqB;AAAA,IAAEC,UAAUF,MAAME;AAAAA,EAAAA,CAAnB;AAEjF,6BACEC,YAAA;AAAA,IAAA,8BACG,cAAD;AAAA,MAAA,+BACG,qBAAD;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QALF,UAOE,CAAA9J,oBAAA,SAAA;AAAA,UAAO,KAAK0J;AAAAA,UAAS,KAAKC,MAAMI;AAAAA,QAAhC,CAAA,GACCnK,QARH;AAAA,MAAA,CAAA;AAAA,IAAA,CADF;AAAA,EAAA,CAFJ;AAgBD;ACnBqB,eAAA;AAAA,EAAE+J;AAAAA,EAAO/J;AAAAA,GAAyD;AACtF,QAAM,CAAC;AAAA,IAAE8J;AAAAA,IAASF;AAAAA,IAAaC;AAAAA,KAAY3I,OAAOyI,WAAWK,qBAAqB;AAAA,IAAEC,UAAUF,MAAME;AAAAA,EAAAA,CAAnB;AACjF,QAAMG,YAAY;AAElB,8BACEF,YAAA;AAAA,IAAA,UAAA,CACEjB,qBAAC,cAAD;AAAA,MAAc,SAAd;AAAA,MAAA,UACE,CAAA7I,oBAAA,SAAA;AAAA,QAAA,UACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAFN,GAiBEA,oBAAC,WAAD;AAAA,QAAW,WAAU;AAAA,QAAkB,MAAK;AAAA,QAAkB,SAAS,MAAMuJ,QAAQU,UAArF;AAAA,QAAA,8BACE,SAAA;AAAA,UAAO,KAAKP;AAAAA,UAAgB,KAAKC,MAAMI;AAAAA,UAAK,OAAO;AAAA,YAAElG,OAAO;AAAA,YAAQqG,WAAW;AAAA,UAA5B;AAAA,QAAA,CAAnD;AAAA,MAAA,CAlBJ,CAAA;AAAA,IAAA,CADF,GAsBElK,oBAAC,cAAD;AAAA,MAAA,8BACG,qBAAD;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QALF;AAAA,MAAA,CAAA;AAAA,IAAA,CAvBJ,CAAA;AAAA,EAAA,CADF;AAoCD;AC1CqB,eAAA;AAAA,EAAEmK;AAAAA,GAAyB;AAC/C,8BACG,cAAD;AAAA,IAAc,SAAd;AAAA,IAAA,UACE,CAAAnK,oBAAA,SAAA;AAAA,MAAA,UACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CADJ,GAgBAA,oBAAA,OAAA;AAAA,MAAK,WAAU;AAAA,MAAf,8BAEE,gBAAA;AAAA,QACE,sBAAmB;AAAA,QACnB,OAAO;AAAA,UAAE6D,OAAO;AAAA,UAAQE,QAAQ;AAAA,QAAzB;AAAA,QACP,mBAAgB;AAAA,QAChB,aAAU;AAAA,QACV,KAAKoG,MAAMnJ;AAAAA,MAAAA,CALb;AAAA,IAAA,CAnBJ,CAAA;AAAA,EAAA,CADF;AA8BD;AChCgC,0BAAA;AAAA,EAAE8C;AAAAA,GAA+B;AAChE,QAAM3E,SAASqI;AAEf,MAAI,CAACrI,UAAU,CAACA,OAAO4E,UAAU,CAAC5E,OAAO0E,OAAO;AACvC,WAAA;AAAA,EACR;AAED,6BAAO,OAAA;AAAA,IAAK,aAAa;AAAA,IAAO,QAAQ;AAAA,MAAE4E,GAAG;AAAA,MAAGC,GAAG;AAAA,MAAG7E,OAAO1E,OAAO0E;AAAAA,MAAOE,QAAQ5E,OAAO4E;AAAAA,IAAlD;AAAA,IAA4D;AAAA,EAAA,CAApG;AACD;ACXD,IAAIuC,aAAY8D,OAAOC;AACvB,IAAI9D,cAAa6D,OAAOE;AACxB,IAAI9D,qBAAoB4D,OAAOG;AAC/B,IAAI9D,uBAAsB2D,OAAOI;AACjC,IAAI9D,gBAAe0D,OAAOK,UAAUC;AACpC,IAAI/D,gBAAeyD,OAAOK,UAAUE;AACpC,IAAI/D,mBAAkB,CAACgE,KAAKC,KAAKlL,UAAUkL,OAAOD,MAAMtE,WAAUsE,KAAKC,KAAK;AAAA,EAAEC,YAAY;AAAA,EAAMC,cAAc;AAAA,EAAMC,UAAU;AAAA,EAAMrL;AAAxD,CAAX,IAA8EiL,IAAIC,OAAOlL;AAC1J,IAAIkH,kBAAiB,CAACoE,GAAGC,MAAM;AAC7B,WAASC,QAAQD,KAAMA,KAAI,CAAA;AACzB,QAAIxE,cAAa0E,KAAKF,GAAGC,IAArB;AACFvE,uBAAgBqE,GAAGE,MAAMD,EAAEC,KAAZ;AACnB,MAAI1E;AACF,aAAS0E,QAAQ1E,qBAAoByE,CAAD,GAAK;AACvC,UAAIvE,cAAayE,KAAKF,GAAGC,IAArB;AACFvE,yBAAgBqE,GAAGE,MAAMD,EAAEC,KAAZ;AAAA,IAClB;AACH,SAAOF;AACR;AACD,IAAInE,iBAAgB,CAACmE,GAAGC,MAAM3E,YAAW0E,GAAGzE,mBAAkB0E,CAAD,CAArB;AACxC,IAAIG,aAAY,CAACtD,QAAQuD,YAAY;AACnC,MAAI1D,SAAS,CAAA;AACb,WAASuD,QAAQpD;AACf,QAAIrB,cAAa0E,KAAKrD,QAAQoD,IAA1B,KAAmCG,QAAQC,QAAQJ,IAAhB,IAAwB;AAC7DvD,aAAOuD,QAAQpD,OAAOoD;AAC1B,MAAIpD,UAAU,QAAQtB;AACpB,aAAS0E,QAAQ1E,qBAAoBsB,MAAD,GAAU;AAC5C,UAAIuD,QAAQC,QAAQJ,IAAhB,IAAwB,KAAKxE,cAAayE,KAAKrD,QAAQoD,IAA1B;AAC/BvD,eAAOuD,QAAQpD,OAAOoD;AAAAA,IACzB;AACH,SAAOvD;AACR;AAED,yBAAyBgD,KAAKC,KAAKlL,OAAO;AACxC,MAAIkL,OAAOD,KAAK;AACdR,WAAOC,eAAeO,KAAKC,KAAK;AAAA,MAC9BlL;AAAAA,MACAmL,YAAY;AAAA,MACZC,cAAc;AAAA,MACdC,UAAU;AAAA,KAJZ;AAAA,EAMD,OAAM;AACLJ,QAAIC,OAAOlL;AAAAA,EACZ;AACD,SAAOiL;AACR;AACD,yBAAyBY,UAAUC,aAAa;AAC9C,MAAI,CAAED,qBAAoBC,cAAc;AACtC,UAAM,IAAIC,UAAU,mCAAd;AAAA,EACP;AACF;AACD,2BAA2B9D,QAAQ5F,OAAO;AACxC,WAAS2J,IAAI,GAAGA,IAAI3J,MAAMc,QAAQ6I,KAAK;AACrC,QAAIC,aAAa5J,MAAM2J;AACvBC,eAAWd,aAAac,WAAWd,cAAc;AACjDc,eAAWb,eAAe;AAC1B,QAAI,WAAWa;AACbA,iBAAWZ,WAAW;AACxBZ,WAAOC,eAAezC,QAAQgE,WAAWf,KAAKe,UAA9C;AAAA,EACD;AACF;AACD,sBAAsBH,aAAaI,YAAYC,aAAa;AAC1D,MAAID;AACFE,sBAAkBN,YAAYhB,WAAWoB,UAAxB;AACnB,MAAIC;AACFC,sBAAkBN,aAAaK,WAAd;AACnB1B,SAAOC,eAAeoB,aAAa,aAAa;AAAA,IAC9CT,UAAU;AAAA,GADZ;AAGA,SAAOS;AACR;AACD,IAAIO,iBAAiB;AAAA,EACnBC,UAAU;AAAA,EACVC,eAAe;AAAA,EACfC,qBAAqB;AAAA,EACrBC,4BAA4B;AAAA,EAC5BC,oBAAoB;AAAA,EACpBC,4BAA4B,CAAC,MAAM,UAAU,KAAK,GAAtB;AAAA,EAC5BC,aAAa;AAPM;AASrB,IAAIC;AACJ,IAAIC,cAAclN,eAAMC;AACxB,uBAAuB;AACrB,SAAOwM;AACR;AACD,IAAIU,mBAAmB,WAAW;AAChC,+BAA6B;AAC3BC,oBAAgB,MAAMC,iBAAP;AACf,SAAKC,iBAAiB;EACvB;AACDC,eAAaF,mBAAmB,CAAC;AAAA,IAC/B/B,KAAK;AAAA,IACLlL,OAAO,2BAA2BoN,YAAY;AAC5C,UAAIC,QAAQ;AACZD,iBAAWE,QAAQ,SAASC,IAAI;AAC9B,YAAI,CAACF,MAAMH,eAAeK;AACxBF,gBAAMH,eAAeK,MAAM;AAAA,OAF/B;AAAA,IAID;AAAA,EAR8B,GAS9B;AAAA,IACDrC,KAAK;AAAA,IACLlL,OAAO,6BAA6B;AAClC,aAAOyK,OAAO+C,KAAK,KAAKN,cAAjB;AAAA,IACR;AAAA,EAb6B,CAAA,CAApB;AAeZ,SAAOD;AACR;AACD,mBAAmB;AACjB,SAAOJ;AACR;AACD,gBAAgB;AACd,MAAIzJ,WAAWA,QAAQC,MAAM;AAC3B,QAAIoK;AACJ,aAASC,OAAOC,UAAUxK,QAAQyK,OAAO,IAAIC,MAAMH,IAAV,GAAiBI,OAAO,GAAGA,OAAOJ,MAAMI,QAAQ;AACvFF,WAAKE,QAAQH,UAAUG;AAAAA,IACxB;AACD,QAAI,OAAOF,KAAK,OAAO;AACrBA,WAAK,KAAK,mBAAmBG,OAAOH,KAAK,EAA/B;AACZ,IAACH,YAAWrK,SAASC,KAAK2K,MAAMP,UAAUG,IAA1C;AAAA,EACD;AACF;AACD,IAAIK,gBAAgB,CAAA;AACpB,oBAAoB;AAClB,WAASC,QAAQP,UAAUxK,QAAQyK,OAAO,IAAIC,MAAMK,KAAV,GAAkBC,QAAQ,GAAGA,QAAQD,OAAOC,SAAS;AAC7FP,SAAKO,SAASR,UAAUQ;AAAAA,EACzB;AACD,MAAI,OAAOP,KAAK,OAAO,YAAYK,cAAcL,KAAK;AACpD;AACF,MAAI,OAAOA,KAAK,OAAO;AACrBK,kBAAcL,KAAK,MAAM,IAAIQ;AAC/B/K,OAAK2K,MAAM,QAAQJ,IAAnB;AACD;AACD,wBAAwBS,MAAMd,IAAIe,IAAI;AACpCD,OAAKE,eAAehB,IAAI,WAAW;AACjC,QAAIc,KAAKG,eAAe;AACtBF;IACD,OAAM;AACL,UAAIG,cAAc,wBAAwB;AACxCnI,mBAAW,WAAW;AACpB+H,eAAKK,IAAI,eAAeC,YAAxB;AAAA,QADQ,GAEP,CAFO;AAGVL;;AAEFD,WAAKO,GAAG,eAAeH,WAAvB;AAAA,IACD;AAAA,GAXH;AAaD;AACD,4BAA4BlB,IAAIc,MAAM;AACpC,MAAIQ,UAAUlB,UAAUxK,SAAS,KAAKwK,UAAU,OAAO,SAASA,UAAU,KAAK,CAAA;AAC/E,MAAI,CAACU,KAAKS,aAAa,CAACT,KAAKS,UAAU3L,QAAQ;AAC7C4L,aAAS,0CAA0CV,KAAKS,SAAhD;AACR,WAAO;AAAA,EACR;AACD,MAAIE,MAAMX,KAAKS,UAAU;AACzB,MAAIG,cAAcZ,KAAKQ,UAAUR,KAAKQ,QAAQI,cAAc;AAC5D,MAAIC,UAAUb,KAAKS,UAAUT,KAAKS,UAAU3L,SAAS;AACrD,MAAI6L,IAAIG,YAAJ,MAAsB;AACxB,WAAO;AACT,MAAIC,iBAAiB,yBAAyBC,GAAGC,GAAG;AAClD,QAAIC,YAAYlB,KAAKmB,SAASC,iBAAiBtO,MAAM,GAAG4M,OAAOsB,GAAG,GAAb,EAAkBtB,OAAOuB,CAAzB;AACrD,WAAOC,cAAc,MAAMA,cAAc;AAAA;AAE3C,MAAIV,QAAQvC,YAAYuC,QAAQvC,SAASV,QAAQ,kBAAzB,IAA+C,MAAMyC,KAAKmB,SAASC,iBAAiBC,WAAWrB,KAAKsB,wBAAwB,CAACP,eAAef,KAAKsB,sBAAsBpC,EAA5B;AACjK,WAAO;AACT,MAAIc,KAAKuB,kBAAkBZ,KAAKzB,EAA5B;AACF,WAAO;AACT,MAAI,CAACc,KAAKmB,SAASC,iBAAiBC;AAClC,WAAO;AACT,MAAIN,eAAeJ,KAAKzB,EAAN,KAAc,EAAC0B,eAAeG,eAAeF,SAAS3B,EAAV;AAC5D,WAAO;AACT,SAAO;AACR;AACD,yBAAyBsC,KAAK;AAC5B,MAAIhC,MAAMiC,QAAQD,GAAd;AACF,WAAOA;AACV;AACD,+BAA+BA,KAAK7D,GAAG;AACrC,MAAI+D,KAAKF,OAAO,OAAO,OAAO,OAAOG,WAAW,eAAeH,IAAIG,OAAOC,aAAaJ,IAAI;AAC3F,MAAIE,MAAM;AACR;AACF,MAAIG,OAAO,CAAA;AACX,MAAIC,KAAK;AACT,MAAIC,KAAK;AACT,MAAIC,IAAIC;AACR,MAAI;AACF,SAAKP,KAAKA,GAAGtE,KAAKoE,GAAR,GAAc,CAAEM,MAAME,MAAKN,GAAGtN,KAAT,GAAiB8N,OAAOJ,KAAK,MAAM;AAChED,WAAKM,KAAKH,GAAGrQ,KAAb;AACA,UAAIgM,KAAKkE,KAAK/M,WAAW6I;AACvB;AAAA,IACH;AAAA,EALH,SAMSyE,KAAP;AACAL,SAAK;AACLE,SAAKG;AAAAA,EACN,UAAS;AACR,QAAI;AACF,UAAI,CAACN,MAAMJ,GAAG,aAAa;AACzBA,WAAG;IACN,UAAS;AACR,UAAIK;AACF,cAAME;AAAAA,IACT;AAAA,EACF;AACD,SAAOJ;AACR;AACD,2BAA2BL,KAAKa,KAAK;AACnC,MAAIA,OAAO,QAAQA,MAAMb,IAAI1M;AAC3BuN,UAAMb,IAAI1M;AACZ,WAAS6I,IAAI,GAAG2E,OAAO,IAAI9C,MAAM6C,GAAV,GAAgB1E,IAAI0E,KAAK1E,KAAK;AACnD2E,SAAK3E,KAAK6D,IAAI7D;AAAAA,EACf;AACD,SAAO2E;AACR;AACD,qCAAqCC,GAAGC,QAAQ;AAC9C,MAAI,CAACD;AACH;AACF,MAAI,OAAOA,MAAM;AACf,WAAOE,kBAAkBF,GAAGC,MAAJ;AAC1B,MAAIvB,IAAI7E,OAAOK,UAAUiG,SAAStF,KAAKmF,CAA/B,EAAkCI,MAAM,GAAG,EAA3C;AACR,MAAI1B,MAAM,YAAYsB,EAAEK;AACtB3B,QAAIsB,EAAEK,YAAYC;AACpB,MAAI5B,MAAM,SAASA,MAAM;AACvB,WAAOzB,MAAMsD,KAAKP,CAAX;AACT,MAAItB,MAAM,eAAe,2CAA2C8B,KAAK9B,CAAhD;AACvB,WAAOwB,kBAAkBF,GAAGC,MAAJ;AAC3B;AACD,4BAA4B;AAC1B,QAAM,IAAI9E,UAAU,2IAAd;AACP;AACD,wBAAwB8D,KAAK7D,GAAG;AAC9B,SAAOqF,gBAAgBxB,GAAD,KAASyB,sBAAsBzB,KAAK7D,CAAN,KAAYuF,4BAA4B1B,KAAK7D,CAAN,KAAYwF,iBAAgB;AACxH;AACD,iBAAiBC,QAAQC,gBAAgB;AACvC,MAAIlE,OAAO/C,OAAO+C,KAAKiE,MAAZ;AACX,MAAIhH,OAAOI,uBAAuB;AAChC,QAAI8G,UAAUlH,OAAOI,sBAAsB4G,MAA7B;AACd,QAAIC,gBAAgB;AAClBC,gBAAUA,QAAQlQ,OAAO,SAASmQ,KAAK;AACrC,eAAOnH,OAAOoH,yBAAyBJ,QAAQG,GAAxC,EAA6CzG;AAAAA,MACrD,CAFS;AAAA,IAGX;AACDqC,SAAKgD,KAAKxC,MAAMR,MAAMmE,OAAtB;AAAA,EACD;AACD,SAAOnE;AACR;AACD,uBAAuBvF,QAAQ;AAC7B,WAAS+D,IAAI,GAAGA,IAAI2B,UAAUxK,QAAQ6I,KAAK;AACzC,QAAI5D,SAASuF,UAAU3B,MAAM,OAAO2B,UAAU3B,KAAK;AACnD,QAAIA,IAAI,GAAG;AACT8F,cAAQrH,OAAOrC,MAAD,GAAU,IAAjB,EAAuBkF,QAAQ,SAASpC,KAAK;AAClD6G,wBAAgB9J,QAAQiD,KAAK9C,OAAO8C,IAArB;AAAA,OADjB;AAAA,IAGD,WAAUT,OAAOG,2BAA2B;AAC3CH,aAAOE,iBAAiB1C,QAAQwC,OAAOG,0BAA0BxC,MAAjC,CAAhC;AAAA,IACD,OAAM;AACL0J,cAAQrH,OAAOrC,MAAD,CAAP,EAAiBkF,QAAQ,SAASpC,KAAK;AAC5CT,eAAOC,eAAezC,QAAQiD,KAAKT,OAAOoH,yBAAyBzJ,QAAQ8C,GAAxC,CAAnC;AAAA,OADF;AAAA,IAGD;AAAA,EACF;AACD,SAAOjD;AACR;AACD,wBAAwBsF,IAAI;AAC1B,MAAIlL,QAAQsL,UAAUxK,SAAS,KAAKwK,UAAU,OAAO,SAASA,UAAU,KAAK,CAAA;AAC7E,MAAIqE,gBAAgB3P,MAAMgM;AAC1B,MAAI4D,OAAOlS,WAAW+M,WAAD,KAAiB,CAAtC,GAA0CoF,kBAAkBD,KAAK5D,MAAM8D,uBAAuBF,KAAKG;AACnG,MAAI/D,OAAO2D,iBAAiBE,mBAAmBG,QAAO;AACtD,MAAIhE,QAAQ,CAACA,KAAKiE;AAChBjE,SAAKiE,mBAAmB,IAAIvF;AAC9B,MAAI,CAACsB,MAAM;AACTU,aAAS,wEAAD;AACR,QAAIwD,YAAY,oBAAoBC,GAAG;AACrC,aAAO3E,MAAMiC,QAAQ0C,CAAd,IAAmBA,EAAEA,EAAErP,SAAS,KAAKqP;AAAAA;AAE9C,QAAIC,cAAc,CAACF,WAAW,CAAZ,GAAgB,KAAhB;AAClBE,gBAAYC,IAAIH;AAChBE,gBAAYpE,OAAO;AACnBoE,gBAAYE,QAAQ;AACpB,WAAOF;AAAAA,EACR;AACD,MAAIpE,KAAKQ,QAAQ+D,SAASvE,KAAKQ,QAAQ+D,MAAMC,SAAS;AACpD9D,aAAS,qGAAD;AACV,MAAI+D,cAAcC,cAAcA,cAAcA,cAAc,CAAA,GAAIC,aAAL,GAAqB3E,KAAKQ,QAAQ+D,KAAhD,GAAwDvQ,KAAtE;AAC/B,MAAIuK,cAAckG,YAAYlG,aAAaqG,YAAYH,YAAYG;AACnE,MAAI7F,aAAaG,MAAM4E,wBAAwB9D,KAAKQ,WAAWR,KAAKQ,QAAQuD;AAC5EhF,eAAa,OAAOA,eAAe,WAAW,CAACA,UAAD,IAAeA,cAAc,CAAC,aAAD;AAC3E,MAAIiB,KAAKiE,iBAAiBY;AACxB7E,SAAKiE,iBAAiBY,kBAAkB9F,UAAxC;AACF,MAAIuF,QAAStE,MAAKG,iBAAiBH,KAAK8E,yBAAyB/F,WAAWgG,MAAM,SAAS9D,GAAG;AAC5F,WAAO+D,mBAAmB/D,GAAGjB,MAAMyE,WAAV;AAAA,EAC1B,CAFgE;AAGjE,kBAAgB;AACd,WAAOzE,KAAKiF,UAAU,MAAMR,YAAYS,WAAW,aAAanG,aAAaA,WAAW,IAAI6F,SAArF;AAAA,EACR;AACD,MAAIO,YAAY3S,SAAS4S,IAAD,GAAQC,aAAaC,eAAeH,WAAW,CAAZ,GAAgBd,IAAIgB,WAAW,IAAIE,OAAOF,WAAW;AAChH,MAAIG,YAAYzO,OAAO,IAAD;AACtB0O,YAAU,WAAW;AACnB,QAAIxH,WAAWwG,YAAYxG,UAAUC,gBAAgBuG,YAAYvG;AACjEsH,cAAU7N,UAAU;AACpB,QAAI,CAAC2M,SAAS,CAAC/F,aAAa;AAC1B2B,qBAAeF,MAAMjB,YAAY,WAAW;AAC1C,YAAIyG,UAAU7N;AACZ4N,eAAKH,IAAD;AAAA,MACP,CAHa;AAAA,IAIf;AACD,0BAAsB;AACpB,UAAII,UAAU7N;AACZ4N,aAAKH,IAAD;AAAA,IACP;AACD,QAAInH,YAAY+B;AACdA,WAAKO,GAAGtC,UAAUyH,UAAlB;AACF,QAAIxH,iBAAiB8B;AACnBA,WAAK2F,MAAMpF,GAAGrC,eAAewH,UAA7B;AACF,WAAO,WAAW;AAChBF,gBAAU7N,UAAU;AACpB,UAAIsG,YAAY+B;AACd/B,iBAAS2H,MAAM,GAAf,EAAoB3G,QAAQ,SAAStI,GAAG;AACtC,iBAAOqJ,KAAKK,IAAI1J,GAAG+O,UAAZ;AAAA,SADT;AAGF,UAAIxH,iBAAiB8B;AACnB9B,sBAAc0H,MAAM,GAApB,EAAyB3G,QAAQ,SAAStI,GAAG;AAC3C,iBAAOqJ,KAAK2F,MAAMtF,IAAI1J,GAAG+O,UAAlB;AAAA,SADT;AAAA;EAxBG,GA4BN,CAAC1F,MAAMjB,WAAW8G,KAAX,CAAP,CA5BM;AA6BT,MAAIC,YAAY/O,OAAO,IAAD;AACtB0O,YAAU,WAAW;AACnB,QAAID,UAAU7N,WAAW,CAACmO,UAAUnO,SAAS;AAC3C4N,WAAKH,IAAD;AAAA,IACL;AACDU,cAAUnO,UAAU;AAAA,EACrB,GAAE,CAACqI,IAAD,CALM;AAMT,MAAI+F,MAAM,CAAC1B,GAAGrE,MAAMsE,KAAV;AACVyB,MAAI1B,IAAIA;AACR0B,MAAI/F,OAAOA;AACX+F,MAAIzB,QAAQA;AACZ,MAAIA;AACF,WAAOyB;AACT,MAAI,CAACzB,SAAS,CAAC/F;AACb,WAAOwH;AACT,QAAM,IAAIC,QAAQ,SAASC,SAAS;AAClC/F,mBAAeF,MAAMjB,YAAY,WAAW;AAC1CkH;IACD,CAFa;AAAA,EAGf,CAJK;AAKP;AACD,wBAAwBC,IAAI;AAC1B,MAAIC,KAAKD,IAAI;AAAA,IACXE,IAAIpK;AAAAA,IACJqK;AAAAA,IACAzU;AAAAA,MACEuU,IAAInS,QAAQqJ,WAAU8I,IAAI,CAC5B,MACA,YACA,UAH4B,CAAL;AAKzB,QAAM;AAAA,IAAEnG;AAAAA,MAASsG,eAAc;AAC/B,QAAMC,mBAAmBxU,QAAQ,MAAMiO,KAAKwG,MAAMxG,KAAKwG,IAAIH,QAAT,IAAqB,OAAO,CAACA,QAAD,CAA9C;AAChC,QAAMI,SAAS1U,QAAQ,MAAM;AAC3B,QAAI,CAACiO,KAAKmB,UAAU;AAClB,aAAO;AAAA,IACR;AACD,WAAOnB,KAAKmB,SAASuF,cAAcC,wBAAwB3G,KAAKqG,QAAzD,MAAuErG,KAAKmB,SAASuF,cAAcC,wBAAwBN,QAApD;AAAA,EAJ1D,GAKnB,CAACrG,KAAKqG,UAAUA,QAAhB,CALmB;AAMtB,MAAII,QAAQ;AACV,QAAIzK,WAAW;AACb,aAAAhK,oBAAA,WAAA,iCAAsD6G,gBAAe,CAAA,GAAI7E,KAAL,IAApE;AAAA,QAAA;AAAA,MAAA,EAAA;AAAA,IACD;AACD,WAAAhC,oBAAA,QAAA,iCAAmD6G,gBAAe,CAAA,GAAI7E,KAAL,IAAjE;AAAA,MAAA;AAAA,IAAA,EAAA;AAAA,EACD;AACD,MAAIgI,WAAW;AACb,WAAAhK,oBAAsD8G,WAAAA,iCAAAA,eAAcD,gBAAe,CAAA,GAAI7E,KAAL,GAAa;AAAA,MAC7F4S,MAAMP;AAAAA,MACNG,KAAKD;AAAAA,IAFwF,CAA5B,IAAbzN;AAAAA,MAAtD;AAAA,IAAA,EAAA;AAAA,EAID;AACD,SAAA9G,oBAAmD8G,QAAAA,iCAAAA,eAAcD,gBAAe,CAAA,GAAI7E,KAAL,GAAa;AAAA,IAC1F4S,MAAMP;AAAAA,IACNG,KAAKD;AAAAA,EAFqF,CAA5B,IAAbzN;AAAAA,IAAnD;AAAA,EAAA,EAAA;AAID;AACD,4BAA4B+N,cAAcpG,WAAWqG,gBAAgB,CAArE,GAAyEC,iBAAiB,OAAO;AAC/F,MAAI,CAACF,gBAAgB,CAACpG,aAAaA,UAAU3L,WAAW,GAAG;AACzD,WAAO;AAAA,EACR;AACD,MAAI2L,UAAU3L,WAAW,GAAG;AAC1B,WAAO2L,UAAU;AAAA,EAClB;AACD,MAAIA,UAAUlD,QAAQsJ,YAAlB,MAAoC,IAAI;AAC1C,WAAOA;AAAAA,EACR;AACD,QAAMG,OAAOH,aAAatJ,QAAQ,GAArB,MAA8B,KAAKsJ,aAAalE,MAAM,GAAGkE,aAAatJ,QAAQ,GAArB,CAAtB,IAAmD;AACnG,MAAIyJ,QAAQvG,UAAUlD,QAAQyJ,IAAlB,MAA4B,IAAI;AAC1C,WAAOA;AAAAA,EACR;AACD,aAAWJ,QAAQE,eAAe;AAChC,QAAIrG,UAAUlD,QAAQqJ,IAAlB,MAA4B,IAAI;AAClC,aAAOA;AAAAA,IACR;AAAA,EACF;AACD,MAAI,CAACG,gBAAgB;AACnB,UAAME,cAAcxG,UAAU1N,IAAKiO,OAAMA,EAAEzD,QAAQ,GAAV,MAAmB,KAAKyD,EAAE2B,MAAM,GAAG3B,EAAEzD,QAAQ,GAAV,CAAX,IAA6B,IAA1E;AACpB,UAAM2J,aAAaD,YAAY1J,QAAQsJ,YAApB;AACnB,QAAIK,eAAe,IAAI;AACrB,aAAOzG,UAAUyG;AAAAA,IAClB;AACD,eAAWN,QAAQE,eAAe;AAChC,YAAMK,QAAQP,KAAKrJ,QAAQ,GAAb,MAAsB,KAAKqJ,KAAKjE,MAAM,GAAGiE,KAAKrJ,QAAQ,GAAb,CAAd,IAAmC;AAC5E,YAAM6J,cAAcD,QAAQ1G,UAAUlD,QAAQ4J,KAAlB,IAA2B;AACvD,UAAIC,gBAAgB,IAAI;AACtB,eAAO3G,UAAU2G;AAAAA,MAClB;AAAA,IACF;AAAA,EACF;AACD,MAAI3G,UAAUlD,QAAQ,MAAlB,MAA8B,IAAI;AACpC,WAAO;AAAA,EACR;AACD,MAAIkD,UAAUlD,QAAQ,OAAlB,MAA+B,IAAI;AACrC,WAAO;AAAA,EACR;AACD,SAAOkD,UAAU;AAClB;AACD,2BAA2B4G,WAAWR,cAAcrG,UAAU,CAAA,GAAI;AAChE,QAAM;AAAA,IAAEuG,iBAAiB;AAAA,IAAOO,cAAc;AAAA,IAAIC,YAAY;AAAA,IAAMC,oBAAoB,CAAlF;AAAA,IAAsFC;AAAAA,MAAYjH;AACxG,QAAMC,YAAYrE,OAAO+C,KAAKkI,aAAa,CAAzB,CAAA;AAClB,QAAMhB,WAAWoB,UAAUZ,eAAea,mBAAmBb,cAAcpG,WAAW+G,mBAAmBT,cAA7C;AAC5D,MAAI,CAACM,WAAW;AACd,WAAOC;AAAAA,EACR;AACD,MAAI,OAAOD,cAAc,UAAU;AACjC,WAAOA;AAAAA,EACR;AACD,QAAMM,gBAAgBtB,WAAWgB,UAAUhB,YAAY;AACvD,MAAIsB,eAAe;AACjB,QAAI,OAAOA,kBAAkB,UAAU;AACrC,aAAOA;AAAAA,IACR;AACD,WAAOA,cAAc9B,KAAK0B,SAAnB;AAAA,EACR;AACD,SAAO;AACR;AACD,4BAA4BK,cAAcC,OAAO,IAAI;AACnD,QAAM;AAAA,IAAE7H;AAAAA,MAASsG,eAAc;AAC/B,QAAMQ,gBAAgB9G,QAAQA,KAAKS,YAAYT,KAAKS,YAAY;AAChE,QAAMoG,eAAe7G,QAAQA,KAAKqG,WAAWrG,KAAKqG,WAAW;AAC7D,SAAOtU,QAAQ,MAAM;AACnB,UAAM0O,YAAYmH;AAClB,WAAOF,mBAAmBb,cAAcpG,WAAWqG,aAA1B;AAAA,EAFb,GAGX,CAACA,eAAeD,cAAc,GAAGgB,IAAjC,CAHW;AAIf;AACD,yBAAyBR,WAAWC,aAAa;AAC/C,QAAMjB,WAAWyB,mBAAmB,MAAM1L,OAAO+C,KAAKkI,aAAa,EAAzB,GAA8B,CAACA,SAAD,CAArC;AACnC,SAAO,CACLtV,QAAQ,MAAM;AACZ,WAAOgW,kBAAkBV,WAAWhB,UAAU;AAAA,MAC5CiB;AAAAA,MACAG,SAAS;AAAA,IAFmC,CAAtB;AAAA,KAIvB,CAACpB,UAAUiB,aAAaD,SAAxB,CALI,GAMPhB,QAPK;AASR;AACD,MAAM2B,eAAgBC,QAAO;AAC3B,MAAIlG,KAAKkG,IAAI;AAAA,IAAE7B,IAAIpK;AAAAA,IAAWsL;AAAAA,IAAaY;AAAAA,IAA+BtW;AAAAA,MAAamQ,IAAI/N,QAAQqJ,WAAU0E,IAAI,CAAC,MAAM,eAAe,iCAAiC,UAAvD,CAAL;AAC5G,QAAM,CAACoG,MAAM9B,YAAY+B,gBAAgBxW,UAAU0V,WAAX;AACxC,MAAIjB,UAAU;AACZ,WAAArU,oBAA2D8G,gBAAAA,iCAAAA,eAAcD,gBAAe,CAAA,GAAI7E,KAAL,GAAa;AAAA,MAClGoS,IAAIpK;AAAAA,MACJqK;AAAAA,MACAnM,OAAOgO,gCAAgC,SAASC;AAAAA,MAChDE,yBAAyBH,gCAAgC;AAAA,QACvDI,QAAQH;AAAAA,MAD4C,IAElD;AAAA,IAN8F,CAA5B,IAAbrP;AAAAA,MAA3D,UAOIoP,gCAAgC,SAASC;AAAAA,IAP7C,EAAA;AAAA,EAQD;AACD,MAAInM,WAAW;AACb,WAAAhK,oBAAA,WAAA,iCAAsD6G,gBAAe,CAAA,GAAI7E,KAAL,IAApE;AAAA,MAAA,UAAiFmU;AAAAA,IAAjF,EAAA;AAAA,EACD;AACD,SAAAnW,oBAAmD8G,QAAAA,iCAAAA,eAAcD,gBAAe,CAAA,GAAI7E,KAAL,GAAa;AAAA,IAC1FkG,OAAOgO,gCAAgC,SAASC;AAAAA,IAChDE,yBAAyBH,gCAAgC;AAAA,MACvDI,QAAQH;AAAAA,IAD4C,IAElD;AAAA,EAJsF,CAA5B,IAAbrP;AAAAA,IAAnD,UAKIoP,gCAAgC,SAASC;AAAAA,EAL7C,EAAA;AAMD;AC1b4B,sBAAA;AAAA,EAC3B1N;AAAAA,EACAC;AAAAA,EACA6N;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAjO;AAAAA,EACAkO;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAnX;AAAAA,GACc;AACd,QAAMT,SAASqI;AACf,QAAMwP,eAAezP,kBAAkBpI,QAAQ,CAAC,WAAD,CAAT;AAChC,QAAA,CAAC8X,eAAeC;AACtB,QAAMhX,QAAQiX;AACRC,QAAAA,SAASrX,QAAQ,MAAMsX,mBAAmBnX,KAAD,GAAS,CAACA,KAAD,CAAlC;AAChB,QAAA,CAACoX,UAAU/N,WAAWgO,qBAAqB;AAAA,IAC/CX,YAAYA,cAAc,CAAC,QAAD;AAAA,IAC1BH,gBAAgBA,iDAAgB1V,IAAI,CAAC;AAAA,MAAEC;AAAAA,UAASA;AAAAA,EAAhC,CAF8B;AAIhD,QAAMwW,SAASF,SAASxP,SAAS,WAAWwP,SAASE,SAASxY;AAE9DyU,YAAU,MAAM;AACd,QAAI+C,iBAAiB;AACnBA,sBAAgBjN,OAAD;AAAA,IAChB;AAAA,EAAA,GACA,CAAC+N,SAASG,WAAV,CAJM;AAMThE,YAAU,MAAM;AACd,QAAIgD,gBAAgB;AAClB,iBAAWe,WAAUf,gBAAgB;AAC/B,YAAA,OAAOe,QAAOE,YAAY,aAAa;AACzCN,iBAAOO,YAAY;AAAA,YAAE3W,IAAIwW,QAAOxW;AAAAA,aAAM,SAAS;AAAA,YAC7C0W,SAASF,QAAOE;AAAAA,UAAAA,CADlB;AAAA,QAGD;AAAA,MACF;AAAA,IACF;AAAA,EAAA,GACA,CAACjB,cAAD,CAVM;AAYThS,kBAAgB,MAAM;AACpB,QAAI8R,gBAAgB;AAClBA,qBAAeiB,MAAD;AAAA,IACf;AAAA,EAAA,GACA,CAACA,MAAD,CAJY;AAMf,QAAMjP,YAAYqP,aAAa;AAAA,IAAEC,UAAU;AAAA,IAAKC,WAAW;AAAA,EAAA,CAA7B;AAE9B,MAAI,CAAC3Y,QAAQ;AACJ,WAAA;AAAA,EACR;AAGD,QAAM4Y,qBAAqB5Y,OAAO4Y;AAElC,QAAMC,yBACJzP,aAAaA,UAAUT,SAAS,8BAC9B,gBAAA;AAAA,IAAc,QAAQ3I,OAAO4E;AAAAA,IAAQ,OAAO5E,OAAO0E;AAAAA,IAAO;AAAA,IAAM;AAAA,IAAhE,8BACE,eAAA;AAAA,MACE,KAAK0E,UAAUvH;AAAAA,MACf,QAAQ;AAAA,QAAEyH,GAAG;AAAA,QAAGC,GAAG;AAAA,QAAG7E,OAAO1E,OAAO0E;AAAAA,QAAOE,QAAQ5E,OAAO4E;AAAAA,MAAlD;AAAA,MACR,SACEwE,UAAU1E,SAAS0E,UAAUxE,SACzB;AAAA,QACEF,OAAO0E,UAAU1E;AAAAA,QACjBE,QAAQwE,UAAUxE;AAAAA,MAEpB/E,IAAAA;AAAAA,IAAAA,CATR;AAAA,EADF,CAAA,IAcE;AAEFsY,MAAAA,SAASxP,SAAS,WAAW;AAC/B,QAAIkQ,wBAAwB;AACnBA,aAAAA;AAAAA,IACR;AAED,UAAM,IAAI1O,MAAMgO,SAASW,UAAU,wBAA7B;AAAA,EACP;AAEKR,QAAAA,mCACH,UAAD;AAAA,IAAA,UACGR,CAAAA,cAAcjX,oBAAC,sBAAD;AAAA,MAAsB,MAAMiX;AAAAA,IAA/B,CAAA,IAAiD,MAC5DK,SAASG,eAAeH,SAASG,YAAYS,QAC1CZ,SAASG,YAAYS,MAAMnX,IAAKqH,CAAS,SAAA;AACvC,iCAAQ,sBAAD;AAAA,QAAoC;AAAA,MAAA,GAATA,KAAKpH,EAAhC;AAAA,IAAA,CADT,IAGA,MACHpB,QAPH;AAAA,EAAA,CADF;AAYA,8BACEkK,YAAA;AAAA,IAAA,UACE,CAAAjB,qBAAA,gBAAA;AAAA,MAEE,QAAQ1J,OAAO4E;AAAAA,MACf,OAAO5E,OAAO0E;AAAAA,MACd;AAAA,MACA;AAAA,OACImT,eANN;AAAA,MAAA,UAQGM,CAAAA,SAASxP,SAAS,WAAWgP,2CAAwB,kBAAD;AAAA,QAAkB,OAAOD;AAAAA,MAAzB,CAAA,IAA+C,MACnGS,SAASxP,SAAS,oBACfwP,SAAS1V,MAAMb,IAAI,CAACoX,MAAMlJ,MAAM;AAC9B,oCACEnF,YAAA;AAAA,UAAA,UAAA,CACE9J,oBAAC,YAAD;AAAA,YAGE,SACE+W,4BACI,CAACpS,MAAW;AACVA,gBAAEyT,gBAAF;AAC0BD,wCAAAA,KAAKE,cAAcF,MAAaxT,CAAjC;AAAA,YAE3B3F,IAAAA;AAAAA,YAEN,QAASmZ,KAAKvQ,OAAeI,WAAWhJ;AAAAA,YAX1C,8BAaG,cAAD;AAAA,cAAA,UAAemZ,KAAKhC;AAAAA,YAAAA,CAApB;AAAA,UAAA,GAZKlH,CADP,GAeCwI,WAhBH;AAAA,QAAA,CADF;AAAA,MAAA,CADF,IAsBA,MACHH,SAASxP,SAAS,gCACjBgC,YAAA;AAAA,QAAA,UAAA,CACGwN,SAASgB,OAAOvX,IAAI,CAACuH,OAAOiQ,QAC3BvY,oBAAC,aAAD;AAAA,UACE;AAAA,UAEA;AAAA,UACA,IAAIsI,MAAMtH;AAAAA,UACV,WAAWuX,QAAQ,IAAIhQ,YAAYvJ;AAAAA,UACnC,SACE+X,4BACKpS,CAAM,MAAA;AACLA,cAAEyT,gBAAF;AAC0B9P,sCAAAA,MAAM+P,cAAc/P,OAAO3D,CAA5B;AAAA,UAE3B3F,IAAAA;AAAAA,QAVDsJ,GAAAA,MAAMtH,EAFb,CADD,GAiBAyW,WAlBH;AAAA,MAAA,CADD,IAqBG,MACFH,UAASxP,SAAS,YAAYwP,SAASxP,SAAS,WAAWwP,SAASxP,SAAS,sBAC/E4O,2CACG,cAAD;AAAA,QAAc,SAAd;AAAA,QAAA,UAAuBA,qBAAqBY,QAAD;AAAA,MAAA,CAF5C,IAGG,MACHA,SAASxP,SAAS,iCAAc,OAAD;AAAA,QAAO,OAAOwP,SAASnN;AAAAA,MAAAA,CAAtD,IAAkE,MAClEmN,SAASxP,SAAS,8BACjBgC,YAAA;AAAA,QAAA,UACGwN,SAAS3N,MAAM7B,SAAS,+BACtB,OAAD;AAAA,UAAO,OAAOwP,SAAS3N;AAAAA,UAAvB,UACGqO,CAAAA,wBACArB,sBAAsBA,oBAAoBW,QAAD,IAAa,IAFzD;AAAA,QAAA,CADD,IAKGA,SAAS3N,MAAM7B,SAAS,+BACzB,OAAD;AAAA,UAAO,OAAOwP,SAAS3N;AAAAA,UAAvB,UACGqO,CAAAA,wBACArB,sBAAsBA,oBAAoBW,QAAD,IAAa,IAFzD;AAAA,QAAA,CAAA,IAIE;AAAA,MAXN,CAAA,IAaE,IA1EN;AAAA,IAAA,IACQ,GAAEnY,OAAO6B,MAAMsW,SAASxP,MADhC,GA6ECwP,SAASxP,SAAS,WAAWwP,SAAS3N,MAAM7B,SAAS,WAAWiQ,yCAC9D,eAAD;AAAA,MAAe,QAAQA,mBAAmB/W;AAAAA,MAA1C,8BACG,cAAD;AAAA,QAAc;AAAA,MAAA,CAAd;AAAA,IADF,CAAA,IAGE,IAlFN;AAAA,EAAA,CADF;AAsFD;ACxNM,MAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;ACXkC,2BAAA;AAAA,EAAE5B;AAAAA,EAAYQ;AAAAA,GAAyD;AACvG,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAER;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACFqC,+BAAA;AAAA,EAAEC;AAAAA,EAAgBO;AAAAA,GAA6D;AACnH,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAEP;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACFiC,2BAAA;AAAA,EAAEN;AAAAA,EAAYa;AAAAA,GAAyD;AACvG,6BAAQ,kBAAD;AAAA,IAAkB,OAAO;AAAA,MAAEb;AAAAA,IAAF;AAAA,IAAzB;AAAA,EAAA,CAAP;AACD;ACKM,2BACL,UAGI,IACJ,OAAc,CAAA,GAC4B;AACpC,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACN,QAAA,mBAAmB,KAAK,KAAK,IAAI;AAEvC,QAAM,iBAAiB,iBACrB,CAAC,MAAO,mBAAmB,EAAE,KAAK,SAAS,eAAe,oBAAoB,QAC9E,CAAC,gBAAgB,CACnB;AAEA,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,gBAAgB;AACZ,aAAA;AAAA,IACT;AAEA,QAAI,UAAU;AACZ,aAAO,SAAS,cAAc;AAAA,IAChC;AACO,WAAA;AAAA,EACN,GAAA,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B;AC7BqC,8BAAA,MAAc,UAAiC,IAA4B;AACxG,QAAA,iBAAiB,uBAAuB,OAAO;AAI9C,SAAA;AACT;ACE+B,wBAAA,UAAmB,WAAW,OAAO;AA8CpE;ACxDO,yBAAyB,WAAuC;AACrE,QAAM,MAAM;AACZ,QAAM,aAAa,IAAI;AACvB,QAAM,OAAO,YAAY,UAAU,IAAI,CAAC,SAAU,OAAO,SAAS,WAAW,OAAO,6BAAM,EAAG,IAAI,CAAA;AAC1F,SAAA,iBACL,CAAC,MAAiB;AAChB,UAAM,WAAW,aAAa,EAAE,KAAK,SAAS,SAAS,cAAc;AAC/D,UAAA,QAAQ,sCAAU,UAAS;AAE7B,QAAA,OAAO,cAAc,aAAa;AAC7B,aAAA;AAAA,IACT;AAEA,UAAM,WAAW,CAAA;AACjB,eAAW,QAAQ,sCAAU,UAAS,CAAA,GAAI;AACxC,UAAI,KAAK,QAAQ,KAAK,EAAE,MAAM,IAAI;AAChC,iBAAS,KAAK,IAAI;AAAA,MACpB;AAAA,IACF;AAEO,WAAA;AAAA,KAET,CAAC,KAAK,KAAK,GAAG,CAAC,CACjB;AACF;AClBE,uBAAA,SAIA,OAAc,IACwB;AAChC,QAAA,EAAE,IAAI,aAAa;AACzB,QAAM,MAAM;AACN,QAAA,eAAe,KAAK,KAAK,IAAI;AAEnC,QAAM,aAAa,iBACjB,CAAC,MAAO,eAAe,EAAE,KAAK,SAAS,WAAW,gBAAgB,QAClE,CAAC,YAAY,CACf;AAEA,SAAO,QAAQ,MAAM;AACnB,QAAI,CAAC,YAAY;AACR,aAAA;AAAA,IACT;AACA,QAAI,UAAU;AACZ,aAAO,SAAS,UAAU;AAAA,IAC5B;AACO,WAAA;AAAA,KACN,CAAC,YAAY,UAAU,GAAG,IAAI,CAAC;AACpC;AC5BO,0BACL,UACA,MACA,UACA,OACA,OAAc,IACd;AACA,QAAM,QAAQ;AACR,QAAA,SAAS,QAAQ,MAAM,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AAE/D,YAAU,MAAM;AACd,UAAM,kBAAkB;AACxB,QAAI,CAAC,iBAAiB;AACpB,aAAO,MAAM;AAAA,MAAA;AAAA,IAGf;AACA,WAAO,iBAAiB,iBAAiB,MAAM,UAAU,KAAK;AAC9D,WAAO,MAAM;AACJ,aAAA,oBAAoB,iBAAiB,MAAM,QAAQ;AAAA,IAAA;AAAA,EAC5D,GAEC,CAAC,QAAQ,UAAU,MAAM,GAAG,IAAI,CAAC;AACtC;AC1BmC,4BAAA;AAC3B,QAAA,aAAkB,WAAW,iBAAiB;AAEpD,SAAO,cAAc,WAAW,QAAS,WAAW,QAAgB;AACtE;ACLO,+BACL,SACA,SAQA;AACM,QAAA,EAAE,IAAI,UAAU,OAAO,UAAU,WAAW,WAAW,oBAC3D,SACA,OACF;AAEA,SAAO,EAAE,IAAI,UAAU,OAAO,UAAU,UAAU,WAAW;AAC/D;ACHgC,yBAAA,EAAE,aAAyC,IAIzE;AACA,QAAM,SAAS;AACf,QAAM,cAAc;AACpB,QAAM,QAAQ;AACd,QAAM,eAAe;AACrB,QAAM,CAAC,OAAO,WAAW,SAAmC,MAAS;AACrE,QAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;AAClD,QAAM,CAAC,QAAQ,aAAa,SAAmD,MAAM;AACrF,QAAM,CAAC,OAAO,YAAY,SAA4B,MAAS;AACzD,QAAA,MAAM,SAAS,OAAO,KAAK;AAC3B,QAAA,cAAc,QAAQ,MAAM;AAC5B,QAAA;AACE,UAAA,UAAU,YAAY,QAAQ;AAChC,cAAM,aAAa,YAAY;AAC/B,cAAM,WAAW,MAAM,IAA6B,WAAW,KAAK,EAAE;AAChE,cAAA,gBAAgB,iBAAiB,QAAe;AACtD,cAAM,oBAAoB,cAAc;AAExC,YAAI,CAAC,mBAAmB;AACf,iBAAA;AAAA,QACT;AAEA,eACE,aAAa,gBAAgB;AAAA,UAC3B,IAAI,kBAAkB,MAAO,kBAAkB;AAAA,UAC/C,OAAO,kBAAkB,SAAS,OAAO;AAAA,UACzC,QAAQ,kBAAkB,UAAU,OAAO;AAAA,QAAA,CAC5C,KAAK;AAAA,MAEV;AAAA,aACO;AACP,cAAQ,MAAM,CAAC;AAAA,IAEjB;AAEO,WAAA;AAAA,EAGN,GAAA,CAAC,KAAK,UAAU,MAAM,CAAC;AAE1B,QAAM,OAAO,WAAW,aAAa,QAAQ,QAAQ;AAErD,YAAU,MAAM;AACb,IAAY,aAAA;AACP,UAAA;AACE,YAAA,UAAU,YAAY,QAAQ;AAChC,gBAAM,aAAa,YAAY;AAC/B,gBAAM,WAAW,MAAM,IAA6B,WAAW,KAAK,EAAE;AAChE,gBAAA,gBAAgB,iBAAiB,QAAe;AACtD,gBAAM,oBAAoB,cAAc;AAExC,cAAI,CAAC,mBAAmB;AACtB;AAAA,UACF;AAEA,wBAAc,IAAI;AAClB,oBAAU,SAAS;AAEf,cAAA;AACI,kBAAA,gBACH,MAAM,aAAa,YAAY;AAAA,cAC9B,IAAI,kBAAkB,MAAM,kBAAkB;AAAA,cAC9C,OAAO,kBAAkB,SAAS,OAAO;AAAA,cACzC,QAAQ,kBAAkB,UAAU,OAAO;AAAA,YAAA,CAC5C,KAAM;AAET,oBAAQ,aAAa;AACrB,sBAAU,SAAS;AACnB,0BAAc,KAAK;AAAA,mBACZ;AACP,sBAAU,OAAO;AACjB,qBAAS,GAAY;AAAA,UACvB;AAAA,QACF;AAAA,eACO;AACP,kBAAU,OAAO;AACjB,iBAAS,GAAY;AAAA,MACvB;AAAA,IAAA;EACC,GAIF,CAAC,KAAK,QAAQ,CAAC;AAElB,SAAO,QAAQ,MAAM;AACZ,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,KAED,CAAC,MAAM,YAAY,QAAQ,KAAK,CAAC;AACtC;AC9G+B,wBAAA;AAC7B,QAAM,eAAe;AAEd,SAAA;AAAA,IACL,WAAW,aAAa;AAAA,IACxB,MAAM,aAAa,OACf;AAAA,MACE,IAAI,aAAa,KAAK,MAAM,aAAa,KAAK;AAAA,MAC9C,OAAO,aAAa,KAAK;AAAA,MACzB,QAAQ,aAAa,KAAK;AAAA,MAC1B,cAAc,aAAa;AAAA,MAC3B,WAAW;AAAA,IAAA,IAEb;AAAA,EAAA;AAER;ACZ8D,4BAAA;AAC5D,QAAM,WAAW;AACjB,SAAO,WACF,SAAS,QAAQ,KAChB,CAAC,YACC,QAAQ,YAAY,oBAAoB,QAAQ,YAAY,oCAChE,IACA;AACN;ACViC,0BAAA;AAC/B,QAAM,QAAQ;AACd,SAAO,QAAQ,MAAM,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AACzD;;"}
|