{"version":3,"file":"useSpaceRegistry-D81wTvhM.js","sources":["../../src/contracts/SpacesRegistry.ts","../../src/components/Discover/GalleryCard.tsx","../../src/components/Studio/CreationsCard.tsx","../../src/components/Studio/Templates/utils.ts","../../src/hooks/useSpaceRegistry.tsx"],"sourcesContent":["const abi = [\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '_price',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n ],\n name: 'NameTooLong',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n ],\n name: 'NameTooShort',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n ],\n name: 'UrlTooLong',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n ],\n name: 'UrlTooShort',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'achievementIdx',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'AchievementUnlocked',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'Paused',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'active',\n type: 'bool',\n },\n ],\n name: 'SpaceActiveChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'string',\n name: 'metadata',\n type: 'string',\n },\n ],\n name: 'SpaceMetadataChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'SpaceOwnerChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n {\n indexed: false,\n internalType: 'string',\n name: 'url',\n type: 'string',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'active',\n type: 'bool',\n },\n ],\n name: 'SpaceRegistered',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'TrophyWon',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'Unpaused',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'minter',\n type: 'address',\n },\n ],\n name: 'addMinter',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'idx',\n type: 'uint256',\n },\n ],\n name: 'getAchievement',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'points',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'duration',\n type: 'uint256',\n },\n {\n internalType: 'contract ISpaceItem',\n name: 'item',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'itemId',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct Achievement',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n ],\n name: 'getNumAchievements',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n ],\n name: 'getSpaceInfo',\n outputs: [\n {\n components: [\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'url',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'metadata',\n type: 'string',\n },\n {\n internalType: 'bool',\n name: 'active',\n type: 'bool',\n },\n ],\n internalType: 'struct SpaceInfo',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n ],\n name: 'getSpaceOwner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n ],\n name: 'getTrophy',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'achievementIdx',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'mintAchievement',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'mintTrophy',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'minters',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'pause',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'paused',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'price',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'url',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'metadata',\n type: 'string',\n },\n {\n internalType: 'bool',\n name: 'active',\n type: 'bool',\n },\n ],\n internalType: 'struct SpaceInfo',\n name: 'info',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'points',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'duration',\n type: 'uint256',\n },\n {\n internalType: 'contract ISpaceItem',\n name: 'item',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'itemId',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct Achievement[]',\n name: 'achievements',\n type: 'tuple[]',\n },\n {\n internalType: 'contract ISpaceItem',\n name: 'trophy',\n type: 'address',\n },\n ],\n name: 'registerSpace',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'minter',\n type: 'address',\n },\n ],\n name: 'removeMinter',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'active',\n type: 'bool',\n },\n ],\n name: 'setActive',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n {\n internalType: 'string',\n name: 'metadata',\n type: 'string',\n },\n ],\n name: 'setMetadata',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'spaceId',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'setOwner',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '_price',\n type: 'uint256',\n },\n ],\n name: 'setPrice',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSpaces',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'unpause',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'dest',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n\nexport default abi\n","import { Stack, Text, Title, useMantineTheme } from '@mantine/core'\nimport { useMediaQuery } from '@mantine/hooks'\nimport sha256 from 'crypto-js/sha256'\nimport React, { useMemo } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { RichText } from '@/plugins/contentful/api'\n\nimport Loading from '../Loading'\nimport ImageWrapper from '../MediaWrappers/ImageWrapper'\n\nexport const truncate = (str: string, size: number = 85) =>\n str.length > size ? `${str.substring(0, size)}...` : str\n\nexport interface GalleryElement {\n id: string\n title: string\n paragraph: string\n description: RichText | string\n image: string | undefined\n downloadLink?: string\n techRequirements?: {\n [key: string]: string\n }\n buttonLink: string\n buttonText?: string\n isSpaces?: boolean\n leaderboard?: boolean\n signedOut?: boolean\n signedIn?: boolean\n}\n\ninterface GalleryCardProps {\n elem: GalleryElement\n}\n\nconst GalleryCard: React.FC = ({ elem }) => {\n const theme = useMantineTheme()\n const isMobile = useMediaQuery(`(max-width: ${theme.breakpoints.sm})`)\n const hash = useMemo(() => sha256(JSON.stringify(elem)).toString().substring(0, 8), [elem])\n\n return (\n <>\n {elem && (\n \n \n {typeof elem.image === 'string' ? (\n \n ) : (\n \n )}\n \n {elem.title}\n \n {truncate(elem.paragraph)}\n \n \n )}\n \n )\n}\n\nexport default GalleryCard\n","import { Box, Stack, Text, Title, useMantineTheme } from '@mantine/core'\nimport { useRef } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport defaultImage from '../../assets/webp_converted/imageOnload.webp'\nimport { globalConstants } from '../../constants/content'\nimport { Draft, formattedDateTime } from '../../utils/utils'\nimport { truncate } from '../Discover/GalleryCard'\nimport { ImageCrop } from '../MediaWrappers/ImageCrop'\nimport ImageWrapper from '../MediaWrappers/ImageWrapper'\n\nconst CARD_SIZE = 300\n\ninterface CreationsCardProps {\n title: string\n description?: string\n image?: string\n templateId?: string\n draftData?: Draft\n timestamp?: string | number\n filesize?: string\n}\n\nconst CreationsCard: React.FC = ({\n title,\n description = '',\n image = defaultImage,\n templateId = '',\n draftData = {\n name: '',\n description: '',\n asset: '',\n cropInfo: {\n x: 0,\n y: 0,\n width: globalConstants.CROP_IMAGE_SIZE.width,\n height: globalConstants.CROP_IMAGE_SIZE.height,\n rotate: 0,\n scaleX: 1,\n scaleY: 1,\n },\n tags: [],\n royalties: 0,\n creatorSplit: 100,\n nCreatorsSplit: [],\n storage: '',\n },\n timestamp = '',\n filesize = '',\n}) => {\n const theme = useMantineTheme()\n const parentRef = useRef(null)\n return (\n \n \n \n {!draftData.asset ? (\n \n ) : (\n \n )}\n \n \n \n {title && (\n \n {title}\n \n )}\n {description && (\n \n {truncate(description, 90)}\n \n )}\n \n {timestamp && (\n \n {formattedDateTime(timestamp)}\n \n )}\n {filesize && {filesize}}\n \n \n \n )\n}\n\nexport default CreationsCard\n","export type SpaceInfo = {\n name: string\n url: string\n metadata: string\n metadataInfo: SpaceMetadata | undefined\n active: boolean\n}\n\nexport type SpaceMetadata = {\n creator: ItemCreator\n title: string\n description: string\n icon: string\n thumbnail: string\n image: string\n logo: string\n name: string\n downloadLink: string\n techRequirements: {\n [key: string]: string\n }\n rules: any\n settings: {\n leaderboard: {\n enabled: boolean\n }\n login: {\n enabled: boolean\n method: 'redirect' | 'code'\n }\n }\n templates: { [key: string]: Template }\n feedSettings: {\n emailRequired: boolean\n }\n}\n\n/* -------------------------------------------------------------------------- */\n/* JSON Template Schema Reader */\n/* -------------------------------------------------------------------------- */\nexport type Preset = {\n [key: string]: number\n}\nexport type Attribute = {\n [key: string]: SchemaProperty\n}\n\nexport type SchemaProperty = {\n title: string\n description: string\n type: 'number' | 'list' | 'range' | 'enum' | 'boolean'\n values?: string[]\n required: boolean\n rules?: {\n min: number\n max: number\n keyName?: string\n unit?: string\n precision?: number\n tagSize?: {\n min: number\n max: number\n }\n lower?: {\n min: number\n max: number\n keyName?: number\n }\n upper?: {\n min: number\n max: number\n keyName?: number\n }\n questions: [\n {\n id: number\n question: string\n answers: [\n {\n response: string\n value: number\n nextQuestionId: string\n icon: string\n },\n ]\n },\n ]\n attributes?: { [key: string]: Attribute }\n presets?: { [key: string]: Preset }\n }\n}\n\nexport interface SpaceLasersItem {\n creator: SchemaProperty\n name: SchemaProperty\n description: SchemaProperty\n asset: SchemaProperty\n tags: SchemaProperty[]\n properties: SchemaProperty[]\n rights: SchemaProperty\n royalties: SchemaProperty\n completedStepper: SchemaProperty\n}\n\nexport interface ArtItem {\n creator: SchemaProperty\n name: SchemaProperty\n description: SchemaProperty\n asset: SchemaProperty\n rights: SchemaProperty\n royalties: SchemaProperty\n completedStepper: SchemaProperty\n}\n\nexport interface ItemCreator {\n name: string\n link: string\n logo?: string\n credits?: string[]\n}\nexport interface Template {\n address: string\n name: string\n shortDescription: string\n description: string\n image: string\n creator: ItemCreator\n techSpec: {\n [key: string]: string\n }\n displayProperties: { key: string; value: string }[]\n tags: string[]\n item: SpaceLasersItem | ArtItem\n}\n// TODO: Implement check for SchemaProperty structure (only after we have a proper schema for the templates finished and approved)\nconst isSchemaProperty = (property: any): property is SchemaProperty => true\n\n// const isItemCreator = (creator: any): creator is ItemCreator =>\n// creator &&\n// typeof creator.name === 'string' &&\n// typeof creator.link === 'string' &&\n// (!creator.credits || Array.isArray(creator.credits))\n\nconst isSpaceLasersItem = (item: any): item is SpaceLasersItem =>\n item &&\n isSchemaProperty(item.creator) &&\n isSchemaProperty(item.name) &&\n isSchemaProperty(item.description) &&\n isSchemaProperty(item.asset) &&\n Array.isArray(item.tags) &&\n item.tags.every(isSchemaProperty) &&\n Array.isArray(item.properties) &&\n item.properties.every(isSchemaProperty)\n\nconst isArtItem = (item: any): item is ArtItem =>\n item &&\n isSchemaProperty(item.creator) &&\n isSchemaProperty(item.name) &&\n isSchemaProperty(item.description) &&\n isSchemaProperty(item.asset)\n\nexport const verifyTemplateSchema = (template: any): template is Template =>\n template &&\n typeof template.address === 'string' &&\n typeof template.name === 'string' &&\n typeof template.description === 'string' &&\n typeof template.image === 'string' &&\n // isItemCreator(template.creator) &&\n (isSpaceLasersItem(template.item) || isArtItem(template.item))\n","import { useCallback, useEffect, useState } from 'react'\n\nimport { CONTRACT_SPACES_REGISTRY_ADDRESS } from '@/constants/blockchain'\nimport L1SpacesRegistry from '@/contracts/SpacesRegistry'\nimport { l1NativeWagmiConfig } from '@/plugins/auth/config'\n\nimport CreationsCard from '../components/Studio/CreationsCard'\nimport { SpaceInfo, Template, verifyTemplateSchema } from '../components/Studio/Templates/utils'\nimport { ErrorMessageDisplay, fetchIpfsMetadata } from '../utils/utils'\nimport { useChainFunctions } from './useChain'\nimport useSessionStorage from './useSessionStorage'\n\nconst useSpaceRegistry = () => {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState()\n const [spacesMetadata, setSpacesMetadata] = useSessionStorage<{ [id: string]: SpaceInfo }>(\n 'spacesMetadata',\n {}\n )\n\n const { readContract } = useChainFunctions(l1NativeWagmiConfig)\n\n const getTemplatesBySpaces = useCallback(\n (spacesId: string, spaces: SpaceInfo) =>\n spaces?.metadataInfo?.templates\n ? Object.entries(spaces?.metadataInfo?.templates).map(([key, value]) => {\n // Verify template schema\n if (!verifyTemplateSchema(value as Template)) return <>\n // Show template on Carousel\n const { name, shortDescription, image } = value as Template\n return (\n \n )\n })\n : null,\n []\n )\n\n const getSpacesMetadata = useCallback(async (id: number) => {\n let info: SpaceInfo\n try {\n const data = await readContract({\n address: CONTRACT_SPACES_REGISTRY_ADDRESS as `0x${string}`,\n abi: L1SpacesRegistry,\n functionName: 'getSpaceInfo',\n args: [BigInt(id)],\n })\n info = data as SpaceInfo\n } catch (err: any) {\n setError({\n message: 'Error fetching spaces id from contract',\n details: `Space with id ${id} not found. ${err?.message}`,\n })\n return\n }\n\n let metadata: any\n try {\n metadata = await fetchIpfsMetadata(info.metadata)\n } catch (err: any) {\n setError({\n message: 'Error fetching spaces metadata from IPFS',\n details: `${err.message}`,\n })\n return\n }\n const newSpace: SpaceInfo = {\n name: info.name,\n url: info.url,\n metadata: info.metadata,\n metadataInfo: metadata,\n active: info.active,\n }\n setSpacesMetadata(prevState => ({\n ...prevState,\n [`${id}`]: newSpace,\n }))\n }, [])\n\n useEffect(() => {\n async function getTemplates() {\n let total: number\n try {\n const data = await readContract({\n address: CONTRACT_SPACES_REGISTRY_ADDRESS as `0x${string}`,\n abi: L1SpacesRegistry,\n functionName: 'totalSpaces',\n })\n total = Number(data)\n } catch (e: any) {\n setError({\n message: 'Error fetching total number of spaces',\n details: `${e.message}`,\n })\n return\n }\n // Useful to avoid fetching all spaces metadata on every render if there's not a new one but cannot be used if we need to fetch metadata specific updates\n if (Object.keys(spacesMetadata).length === total) {\n setLoading(false)\n return\n }\n setLoading(true)\n const promises = Array.from({ length: total }, (_, i) => getSpacesMetadata(i + 1))\n await Promise.all(promises)\n setLoading(false)\n }\n // Fetching on every render is not ideal, but we need to fetch metadata updates\n try {\n getTemplates()\n } catch (e: any) {\n console.error(e)\n setError(e.message)\n }\n }, [spacesMetadata])\n\n // Return the necessary state and functions\n return {\n loading,\n error,\n spacesMetadata,\n getSpacesMetadata,\n getTemplatesBySpaces,\n }\n}\n\nexport default useSpaceRegistry\n"],"names":["abi","truncate","str","size","CARD_SIZE","CreationsCard","title","description","image","defaultImage","templateId","draftData","globalConstants","timestamp","filesize","theme","useMantineTheme","parentRef","useRef","jsxs","Stack","jsx","Link","Box","ImageCrop","ImageWrapper","Title","Text","formattedDateTime","isSchemaProperty","property","isSpaceLasersItem","item","isArtItem","verifyTemplateSchema","template","useSpaceRegistry","loading","setLoading","useState","error","setError","spacesMetadata","setSpacesMetadata","useSessionStorage","readContract","useChainFunctions","l1NativeWagmiConfig","getTemplatesBySpaces","useCallback","spacesId","spaces","_a","_b","key","value","Fragment","name","shortDescription","getSpacesMetadata","id","info","CONTRACT_SPACES_REGISTRY_ADDRESS","L1SpacesRegistry","err","metadata","fetchIpfsMetadata","newSpace","prevState","useEffect","getTemplates","total","data","e","promises","_","i"],"mappings":"wkBAAA,MAAMA,EAAM,CACV,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,CACF,EACA,gBAAiB,aACjB,KAAM,aACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,OACN,KAAM,QACR,CACF,EACA,KAAM,cACN,KAAM,OACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,OACN,KAAM,QACR,CACF,EACA,KAAM,eACN,KAAM,OACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,OACN,KAAM,QACR,CACF,EACA,KAAM,aACN,KAAM,OACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,OACN,KAAM,QACR,CACF,EACA,KAAM,cACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,iBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,sBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,SACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,OACd,KAAM,SACN,KAAM,MACR,CACF,EACA,KAAM,qBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,SACd,KAAM,WACN,KAAM,QACR,CACF,EACA,KAAM,uBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,oBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,SACd,KAAM,OACN,KAAM,QACR,EACA,CACE,QAAS,GACT,aAAc,SACd,KAAM,MACN,KAAM,QACR,EACA,CACE,QAAS,GACT,aAAc,OACd,KAAM,SACN,KAAM,MACR,CACF,EACA,KAAM,kBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,YACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,WACN,KAAM,OACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,MACN,KAAM,SACR,CACF,EACA,KAAM,iBACN,QAAS,CACP,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,WACN,KAAM,SACR,EACA,CACE,aAAc,sBACd,KAAM,OACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,CACF,EACA,aAAc,qBACd,KAAM,GACN,KAAM,OACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,qBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,eACN,QAAS,CACP,CACE,WAAY,CACV,CACE,aAAc,SACd,KAAM,OACN,KAAM,QACR,EACA,CACE,aAAc,SACd,KAAM,MACN,KAAM,QACR,EACA,CACE,aAAc,SACd,KAAM,WACN,KAAM,QACR,EACA,CACE,aAAc,OACd,KAAM,SACN,KAAM,MACR,CACF,EACA,aAAc,mBACd,KAAM,GACN,KAAM,OACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,gBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,iBACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,kBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,aACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,KAAM,UACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,MACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,WAAY,CACV,CACE,aAAc,SACd,KAAM,OACN,KAAM,QACR,EACA,CACE,aAAc,SACd,KAAM,MACN,KAAM,QACR,EACA,CACE,aAAc,SACd,KAAM,WACN,KAAM,QACR,EACA,CACE,aAAc,OACd,KAAM,SACN,KAAM,MACR,CACF,EACA,aAAc,mBACd,KAAM,OACN,KAAM,OACR,EACA,CACE,WAAY,CACV,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,WACN,KAAM,SACR,EACA,CACE,aAAc,sBACd,KAAM,OACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,CACF,EACA,aAAc,uBACd,KAAM,eACN,KAAM,SACR,EACA,CACE,aAAc,sBACd,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,gBACN,QAAS,CAAC,EACV,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,eACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,OACd,KAAM,SACN,KAAM,MACR,CACF,EACA,KAAM,YACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,SACd,KAAM,WACN,KAAM,QACR,CACF,EACA,KAAM,cACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,WACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,WACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,cACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,UACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,OACN,KAAM,SACR,CACF,EACA,KAAM,WACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,CACF,ECvrBaC,EAAW,CAACC,EAAaC,EAAe,KACnDD,EAAI,OAASC,EAAO,GAAGD,EAAI,UAAU,EAAGC,CAAI,CAAC,MAAQD,ECDjDE,EAAY,IAYZC,EAA8C,CAAC,CACnD,MAAAC,EACA,YAAAC,EAAc,GACd,MAAAC,EAAQC,EACR,WAAAC,EAAa,GACb,UAAAC,EAAY,CACV,KAAM,GACN,YAAa,GACb,MAAO,GACP,SAAU,CACR,EAAG,EACH,EAAG,EACH,MAAOC,EAAgB,gBAAgB,MACvC,OAAQA,EAAgB,gBAAgB,OACxC,OAAQ,EACR,OAAQ,EACR,OAAQ,CACV,EACA,KAAM,CAAC,EACP,UAAW,EACX,aAAc,IACd,eAAgB,CAAC,EACjB,QAAS,EACX,EACA,UAAAC,EAAY,GACZ,SAAAC,EAAW,EACb,IAAM,CACJ,MAAMC,EAAQC,IACRC,EAAYC,SAAuB,IAAI,EAE3C,OAAAC,EAAA,KAACC,GAAM,MAAO,CAAE,SAAU,YAAc,IAAKH,EAC3C,SAAA,CAAAI,EAAA,IAACC,EAAA,CACC,GAAKX,EAAU,MAAsC,eAA9B,eAAeD,CAAU,GAChD,MAAO,CAAE,UAAAC,CAAU,EACnB,MAAO,CAAE,eAAgB,MAAO,EAEhC,SAAAU,EAAA,IAACE,EAAA,CACC,MAAO,CACL,gBAAiBR,EAAM,OAAO,YAAY,CAAC,EAC3C,aAAc,MACd,UAAW,SACX,OAAQ,SACV,EAEC,SAACJ,EAAU,YAgBTa,EAAU,CAAA,SAAUhB,EAAO,KAAMG,GAAA,YAAAA,EAAW,SAAU,UAAAM,EAAsB,EAf7EI,EAAA,IAACI,EAAA,CACC,IAAKjB,EACL,IAAI,UACJ,MAAO,CACL,gBAAiBO,EAAM,OAAO,YAAY,CAAC,EAC3C,aAAc,MACd,UAAW,GAAGX,CAAS,KACvB,SAAU,GAAGA,CAAS,KACtB,OAAQ,GAAGA,CAAS,KACpB,MAAO,GAAGA,CAAS,KACnB,UAAW,SACX,OAAQ,SACV,CAAA,CAAA,CAG2E,CAEjF,CAAA,CACF,SACCgB,EAAM,CAAA,MAAO,CAAE,IAAK,EAClB,EAAA,SAAA,CACCd,GAAAe,EAAA,IAACK,GAAM,MAAO,EAAG,MAAO,CAAE,SAAU,YAAa,EAC9C,SACHpB,CAAA,CAAA,EAEDC,GACCc,EAAA,IAACM,EAAK,CAAA,MAAO,CAAE,SAAU,OAAQ,SAAU,YAAa,EACrD,SAAS1B,EAAAM,EAAa,EAAE,CAC3B,CAAA,SAEDa,EAAM,CAAA,MAAO,CAAE,IAAK,KAClB,EAAA,SAAA,CACCP,GAAAQ,EAAAA,IAACM,EAAK,CAAA,MAAO,CAAE,SAAU,OAAQ,SAAU,YAAa,EACrD,SAAkBC,EAAAf,CAAS,CAC9B,CAAA,EAEDC,GAAaO,EAAA,IAAAM,EAAA,CAAK,MAAO,CAAE,SAAU,OAAQ,SAAU,YAAa,EAAI,SAASb,CAAA,CAAA,CAAA,EACpF,CAAA,EACF,CACF,CAAA,CAAA,CAEJ,EC0BMe,EAAoBC,GAA8C,GAQlEC,EAAqBC,GACzBA,GACAH,EAAiBG,EAAK,OAAO,GAC7BH,EAAiBG,EAAK,IAAI,GAC1BH,EAAiBG,EAAK,WAAW,GACjCH,EAAiBG,EAAK,KAAK,GAC3B,MAAM,QAAQA,EAAK,IAAI,GACvBA,EAAK,KAAK,MAAMH,CAAgB,GAChC,MAAM,QAAQG,EAAK,UAAU,GAC7BA,EAAK,WAAW,MAAMH,CAAgB,EAElCI,EAAaD,GACjBA,GACAH,EAAiBG,EAAK,OAAO,GAC7BH,EAAiBG,EAAK,IAAI,GAC1BH,EAAiBG,EAAK,WAAW,GACjCH,EAAiBG,EAAK,KAAK,EAEhBE,EAAwBC,GACnCA,GACA,OAAOA,EAAS,SAAY,UAC5B,OAAOA,EAAS,MAAS,UACzB,OAAOA,EAAS,aAAgB,UAChC,OAAOA,EAAS,OAAU,WAEzBJ,EAAkBI,EAAS,IAAI,GAAKF,EAAUE,EAAS,IAAI,GC5JxDC,EAAmB,IAAM,CAC7B,KAAM,CAACC,EAASC,CAAU,EAAIC,WAAS,EAAI,EACrC,CAACC,EAAOC,CAAQ,EAAIF,EAA8B,SAAA,EAClD,CAACG,EAAgBC,CAAiB,EAAIC,EAC1C,iBACA,CAAC,CAAA,EAGG,CAAE,aAAAC,CAAA,EAAiBC,EAAkBC,CAAmB,EAExDC,EAAuBC,EAAA,YAC3B,CAACC,EAAkBC,IACjB,SAAA,OAAAC,EAAAD,GAAA,YAAAA,EAAQ,eAAR,MAAAC,EAAsB,UAClB,OAAO,SAAQC,EAAAF,GAAA,YAAAA,EAAQ,eAAR,YAAAE,EAAsB,SAAS,EAAE,IAAI,CAAC,CAACC,EAAKC,CAAK,IAAM,CAEpE,GAAI,CAACrB,EAAqBqB,CAAiB,SAAYlC,EAAAA,IAAAmC,EAAAA,SAAA,CAAA,CAAA,EAEvD,KAAM,CAAE,KAAAC,EAAM,iBAAAC,EAAkB,MAAAlD,CAAA,EAAU+C,EAExC,OAAAlC,EAAA,IAAChB,EAAA,CAEC,WAAY,GAAG6C,CAAQ,IAAII,CAAG,GAC9B,MAAOG,EACP,YAAaC,EACb,MAAAlD,CAAA,EAJK8C,CAAA,CAOV,CAAA,EACD,MACN,CAAC,CAAA,EAGGK,EAAoBV,cAAY,MAAOW,GAAe,CACtD,IAAAC,EACA,GAAA,CAOKA,EANM,MAAMhB,EAAa,CAC9B,QAASiB,EACT,IAAKC,EACL,aAAc,eACd,KAAM,CAAC,OAAOH,CAAE,CAAC,CAAA,CAClB,QAEMI,EAAU,CACRvB,EAAA,CACP,QAAS,yCACT,QAAS,iBAAiBmB,CAAE,eAAeI,GAAA,YAAAA,EAAK,OAAO,EAAA,CACxD,EACD,MACF,CAEI,IAAAC,EACA,GAAA,CACSA,EAAA,MAAMC,EAAkBL,EAAK,QAAQ,QACzCG,EAAU,CACRvB,EAAA,CACP,QAAS,2CACT,QAAS,GAAGuB,EAAI,OAAO,EAAA,CACxB,EACD,MACF,CACA,MAAMG,EAAsB,CAC1B,KAAMN,EAAK,KACX,IAAKA,EAAK,IACV,SAAUA,EAAK,SACf,aAAcI,EACd,OAAQJ,EAAK,MAAA,EAEflB,EAAgCyB,IAAA,CAC9B,GAAGA,EACH,CAAC,GAAGR,CAAE,EAAE,EAAGO,CACX,EAAA,CACJ,EAAG,CAAE,CAAA,EAELE,OAAAA,EAAAA,UAAU,IAAM,CACd,eAAeC,GAAe,CACxB,IAAAC,EACA,GAAA,CACI,MAAAC,EAAO,MAAM3B,EAAa,CAC9B,QAASiB,EACT,IAAKC,EACL,aAAc,aAAA,CACf,EACDQ,EAAQ,OAAOC,CAAI,QACZC,EAAQ,CACNhC,EAAA,CACP,QAAS,wCACT,QAAS,GAAGgC,EAAE,OAAO,EAAA,CACtB,EACD,MACF,CAEA,GAAI,OAAO,KAAK/B,CAAc,EAAE,SAAW6B,EAAO,CAChDjC,EAAW,EAAK,EAChB,MACF,CACAA,EAAW,EAAI,EACf,MAAMoC,EAAW,MAAM,KAAK,CAAE,OAAQH,CAAA,EAAS,CAACI,EAAGC,IAAMjB,EAAkBiB,EAAI,CAAC,CAAC,EAC3E,MAAA,QAAQ,IAAIF,CAAQ,EAC1BpC,EAAW,EAAK,CAClB,CAEI,GAAA,CACWgC,UACNG,EAAQ,CACf,QAAQ,MAAMA,CAAC,EACfhC,EAASgC,EAAE,OAAO,CACpB,CAAA,EACC,CAAC/B,CAAc,CAAC,EAGZ,CACL,QAAAL,EACA,MAAAG,EACA,eAAAE,EACA,kBAAAiB,EACA,qBAAAX,CAAA,CAEJ"}