{"version":3,"file":"SearchTags-BFqdLfAE.js","sources":["../../src/scripts/components/react-components/Pagination.tsx","../../src/scripts/modules/react-modules/Listings/types.ts","../../src/scripts/modules/react-modules/Listings/Facets/FacetDate.tsx","../../src/scripts/modules/react-modules/Listings/utils.ts","../../src/scripts/modules/react-modules/Listings/ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing.ts","../../src/scripts/modules/react-modules/Listings/Facets/useFacetChangeHandler.ts","../../src/scripts/modules/react-modules/Listings/Facets/useIsChecked.ts","../../src/scripts/modules/react-modules/Listings/Search.tsx","../../src/scripts/modules/react-modules/Listings/Facets/useClearAllFacets.ts","../../src/scripts/modules/react-modules/Listings/Facets/FacetsMobile.tsx","../../src/scripts/modules/react-modules/Listings/BlogAndNewsListing/BlogAndNewsCard.tsx","../../src/scripts/modules/react-modules/Listings/ECommerceCoursesAndProductsListing/EcommerceCoursesCard.tsx","../../src/scripts/modules/react-modules/Listings/ECommerceCoursesAndProductsListing/EcommerceProductsCard.tsx","../../src/scripts/modules/react-modules/Listings/EventListing/EventListingCard.tsx","../../src/scripts/modules/react-modules/Listings/OfficeAndServicesListing/OfficesAndServicesCard.tsx","../../src/scripts/modules/react-modules/Listings/PeopleDirectoryListing/PeopleDirectoryCard.tsx","../../src/scripts/components/react-components/ScrollIndicator/index.tsx","../../src/scripts/modules/react-modules/Listings/ProgramsAndCertificatesListing/ProgramAndCertificatesCard.tsx","../../src/scripts/modules/react-modules/Listings/ResourcesListing/ResourcesListingCard.tsx","../../src/scripts/modules/react-modules/Listings/SearchListing/SearchCard.tsx","../../src/scripts/modules/react-modules/Listings/Listing.tsx","../../src/scripts/modules/react-modules/Listings/SearchTags.tsx"],"sourcesContent":["import React from 'react';\r\n\r\nexport enum PaginationType {\r\n ShowMore = 'show-more',\r\n Pagination = 'pagination'\r\n}\r\nexport type PaginationProps = {\r\n pagination: {\r\n skip: number;\r\n limit: number;\r\n total: number;\r\n };\r\n onPageChange: (page: number | string) => void;\r\n type: PaginationType;\r\n showAllPaginationLabel?: string;\r\n};\r\n\r\nconst Pagination = ({\r\n onPageChange,\r\n type,\r\n showAllPaginationLabel,\r\n pagination\r\n}: PaginationProps) => {\r\n const currentPage = pagination.skip / pagination.limit + 1;\r\n const totalPages = Math.ceil(pagination.total / +pagination.limit);\r\n const showBtns = totalPages > 5;\r\n\r\n const generatePages = () => {\r\n let pages = [];\r\n if (totalPages <= 5) {\r\n for (let i = 1; i <= totalPages; i++) {\r\n pages.push(i);\r\n }\r\n } else {\r\n if (currentPage <= 3) {\r\n pages = [1, 2, 3, '...', totalPages];\r\n } else if (currentPage > 3 && currentPage < totalPages - 3) {\r\n pages = [1, '...', currentPage - 1, currentPage, currentPage + 1, '...', totalPages];\r\n } else {\r\n pages = [\r\n 1,\r\n '...',\r\n totalPages - 4,\r\n totalPages - 3,\r\n totalPages - 2,\r\n totalPages - 1,\r\n totalPages\r\n ];\r\n }\r\n }\r\n return pages;\r\n };\r\n\r\n const handlePageClick = (page: number | string) => {\r\n if (page !== '...') {\r\n onPageChange(page);\r\n }\r\n };\r\n\r\n if (pagination.total <= pagination.limit) {\r\n return null;\r\n }\r\n\r\n if (type === PaginationType.ShowMore) {\r\n if (currentPage * pagination.limit >= pagination.total) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n {showBtns && (\r\n handlePageClick(currentPage - 1)}\r\n disabled={currentPage === 1}\r\n className={`pagination__button--prev ${currentPage === 1 ? 'disabled' : ''}`}\r\n aria-label=\"Previous page\"\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n\r\n {showBtns && (\r\n handlePageClick(currentPage + 1)}\r\n disabled={currentPage === totalPages}\r\n className={`pagination__button--prev ${currentPage === totalPages ? 'disabled' : ''}`}\r\n aria-label=\"Next page\"\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default Pagination;\r\n","import {\n ArticleDetailPage,\n CourseProduct,\n EventDetailPage,\n OfficesAndServicesDetailPage,\n PeopleDetailPage,\n ProgramDetailPage,\n ResourceDetailPage\n} from '../../../../codegenGenerated/optigraphql/generated';\nimport { ProductsCardProps } from './ECommerceCoursesAndProductsListing/EcommerceProductsCard';\nimport { SearchCardProps } from './SearchListing/SearchCard';\n\nexport interface ListingCommonProps {\n noResultsLabel: string;\n clearAllLabel: string;\n tagsNoResultsLabel: string;\n searchPlaceholder: string;\n resultsNumberLabel: string;\n resultsNumber: string;\n sortByRelevanceLabel: string;\n sortByRecentLabel: string;\n sortByAlphabeticalLabel: string;\n mobileShowResultsLabel: string;\n mobileFilterNarrowLabel: string;\n mobileAppliedFiltersLabel: string;\n minDatePlaceholder: string;\n maxDatePlaceholder: string;\n showAllPaginationLabel: string;\n imgFallback?: string;\n}\n\nexport type FacetsCommonProps = {\n listingType?: string | ListingTypes;\n facets: FacetProps[];\n pagination: { skip: number; limit: number; total: number };\n setPagination: (pagination: { skip: number; limit: number; total: number }) => void;\n setFilters: (facets: FacetProps[]) => void;\n};\n\nexport type FacetProps = {\n id: string;\n type: string;\n title: string;\n items: FacetPropsItems[];\n value: string | string[] | null;\n};\n\nexport type FacetPropsItems = {\n id: string;\n value: string;\n count?: number;\n title?: string;\n disabled?: boolean;\n};\n\nexport type ListingParams = {\n orderBy?: string;\n searchTerm?: string;\n facets?: FacetProps[];\n pagination?: {\n total: number;\n limit: number;\n skip: number;\n };\n};\n\nexport enum SortOptions {\n ASC = 'ASC',\n DESC = 'DESC',\n RELEVANCE = 'RELEVANCE',\n AZ = 'A-Z'\n}\n\nexport enum ListingTypes {\n RESOURCES_LISTING = 'RESOURCES_LISTING',\n PROGRAMS_CERTS_LISTING = 'PROGRAMS_CERTS_LISTING',\n ECOMMERCE_COURSES_LISTING = 'ECOMMERCE_COURSES_LISTING',\n SEARCH_LISTING = 'SEARCH_LISTING',\n PEOPLE_LISTING = 'PEOPLE_LISTING',\n BLOG_AND_NEWS_LISTING = 'BLOG_AND_NEWS_LISTING',\n OFFICES_SERVICES_LISTING = 'OFFICES_SERVICES_LISTING',\n EVENT_LISTING = 'EVENT_LISTING'\n}\n\ntype RankingType = 'RELEVANCE' | 'SEMANTIC';\ntype OrderType = 'ASC' | 'DESC';\n\nexport type OrderByValue = { _ranking: RankingType } | { [key: string]: OrderType | RankingType };\n\nexport type ListingResultTypes =\n | EventDetailPage[]\n | ResourceDetailPage[]\n | ArticleDetailPage[]\n | SearchCardProps[]\n | OfficesAndServicesDetailPage[]\n | ProgramDetailPage[]\n | CourseProduct[]\n | ProductsCardProps[]\n | PeopleDetailPage[]\n | null;\n\nexport type commonListTypesMerged = ListingSlice_ProgramsAndCerts;\n\ninterface BaseListingSlice {\n orderBy: string;\n searchTerm: string;\n facets: FacetProps[];\n pagination: {\n total: number;\n limit: number;\n skip: number;\n };\n setOrderBy: (order: string) => void;\n setSearchTerm: (searchTerm: string) => void;\n setFilters: (filters: FacetProps[]) => void;\n setPagination: (pagination: { limit: number; skip: number; total: number }) => void;\n reset: () => void;\n}\n\ntype Suffixes =\n | 'Event'\n | 'Resource'\n | 'Search'\n | 'ProgramsAndCerts'\n | 'ECommerceCoursesAndProducts'\n | 'PeopleDirectory';\n\nexport type ListingSlice = {\n [K in keyof BaseListingSlice as `${string & K}_${T}`]: BaseListingSlice[K];\n} & {\n _from: string;\n} & {\n [key: string]: string | object | object[] | null;\n};\n\ntype ListingSlice_Event = ListingSlice<'Event'>;\ntype ListingSlice_Resource = ListingSlice<'Resource'>;\ntype ListingSlice_Search = ListingSlice<'Search'>;\ntype ListingSlice_ProgramsAndCerts = ListingSlice<'ProgramsAndCerts'>;\ntype ListingSlice_ECommerceCoursesAndProducts = ListingSlice<'ECommerceCoursesAndProducts'>;\ntype ListingSlice_PeopleDirectory = ListingSlice<'PeopleDirectory'>;\n\nexport type {\n ListingSlice_ECommerceCoursesAndProducts,\n ListingSlice_Event,\n ListingSlice_PeopleDirectory,\n ListingSlice_ProgramsAndCerts,\n ListingSlice_Resource,\n ListingSlice_Search\n};\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { iOS, isMobile, isTablet } from '../../../../helpers';\r\nimport { FacetProps, FacetPropsItems } from '../types';\r\n\r\ntype OwnProps = {\r\n id: string;\r\n title?: string;\r\n value: string | Date;\r\n onSelectionChange: (id: string, value: string) => void;\r\n selectedFilters: FacetProps[] | FacetPropsItems[];\r\n minDate?: string;\r\n maxDate?: string;\r\n};\r\n\r\nconst FacetDate = ({ id, title, value, onSelectionChange, minDate, maxDate }: OwnProps) => {\r\n // Temporary state to hold the raw input value\r\n const [tempValue, setTempValue] = useState('');\r\n const [isTabletMobileiOS, setIsTabletOrLess] = useState(false);\r\n const [inputType, setInputType] = useState(\r\n isTabletMobileiOS && tempValue !== '' ? 'date' : 'text'\r\n );\r\n const inputRef = useRef(null);\r\n\r\n // Effect to format the initial value or any external changes to it\r\n useEffect(() => {\r\n setInputType(value ? 'date' : 'text');\r\n\r\n if (id === 'maxDate' && minDate && maxDate) {\r\n // if maxDaate is lower than minDate, set maxDate to minDate\r\n if (new Date(maxDate) < new Date(minDate)) {\r\n setTempValue(setFormattedDate(maxDate, 'yyyy-mm-dd'));\r\n onSelectionChange('minDate', tempValue);\r\n }\r\n }\r\n\r\n setTempValue(setFormattedDate(value, 'yyyy-mm-dd'));\r\n }, [value]);\r\n\r\n const setFormattedDate = (value: Date | string, format: string) => {\r\n if (value) {\r\n const date = new Date(value);\r\n const day = date.getUTCDate();\r\n const month = date.getUTCMonth() + 1;\r\n const year = date.getUTCFullYear();\r\n\r\n if (format === 'yyyy-mm-dd') {\r\n return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;\r\n }\r\n\r\n return `${day < 10 ? '0' + day : day}/${month < 10 ? '0' + month : month}/${year}`;\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const handleChange = (e: { target: { value: string } }) => {\r\n const rawValue = e.target.value;\r\n setTempValue(rawValue); // Update the temporary state with the raw input value\r\n\r\n // Assuming formattedDate formats the date as needed and setValue updates your application state\r\n const formattedDate = setFormattedDate(rawValue, 'yyyy-mm-dd');\r\n\r\n // Execute search or any action immediately upon selection\r\n if (onSelectionChange) {\r\n onSelectionChange(id, formattedDate);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n setIsTabletOrLess((isTablet() || isMobile()) && iOS());\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (isTabletMobileiOS) {\r\n if (inputType === 'text' && inputRef.current) {\r\n setInputType('text');\r\n // inputRef.current.showPicker();\r\n } else {\r\n setInputType('date');\r\n }\r\n }\r\n }, [inputType, isTabletMobileiOS]);\r\n\r\n const handleFocus = (e: React.FocusEvent) => {\r\n e.target.type = 'date';\r\n try {\r\n e.target.showPicker();\r\n } catch (error) {\r\n console.warn('showPicker() is not supported or allowed in this context:', error);\r\n e.target.focus();\r\n }\r\n };\r\n\r\n if (isTabletMobileiOS) {\r\n return (\r\n
\r\n {title && (\r\n \r\n )}\r\n\r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n {title && (\r\n \r\n )}\r\n\r\n {\r\n if (isTabletMobileiOS) return;\r\n setInputType('text');\r\n }}\r\n />\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FacetDate;\r\n","// Transform the data to the format expected by the Facets component\nimport { FilterCategoryModelFacet } from '../../../../codegenGenerated/optigraphql/generated';\nimport { ECommerceCoursesAndProductsFacetTypes } from './ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing';\nimport { EventFacetTypes } from './EventListing/useGetEventsListing';\nimport { PeopleDirectoryFacetTypes } from './PeopleDirectoryListing/useGetPeopleDirectoryListing';\nimport { ProgramsAndCertificatesFacetTypes } from './ProgramsAndCertificatesListing/useGetProgramsAndCertsListing';\nimport { ResourceFacetTypes } from './ResourcesListing/useGetResourcesListing';\nimport { BlogFacetTypes } from './BlogAndNewsListing/useGetBlogAndNewsListing';\nimport {\n commonListTypesMerged,\n FacetProps,\n FacetPropsItems,\n ListingSlice_ECommerceCoursesAndProducts,\n ListingSlice_Event,\n ListingSlice_PeopleDirectory,\n ListingSlice_ProgramsAndCerts,\n ListingSlice_Resource,\n ListingSlice_Search\n} from './types';\n\nexport const transformToFacetPropsItems = (data: FilterCategoryModelFacet): FacetPropsItems[] => {\n const { Categories } = data ?? {};\n\n if (!Categories) return [];\n\n // Handle the case where we have IdTitle array\n if (Categories.IdTitle) {\n return Categories.IdTitle.map(item => {\n const [id, name] = item?.name?.split('|') ?? ['', ''];\n return { id, value: name, count: item?.count ?? 0 };\n }).sort((a, b) => a.value.localeCompare(b.value));\n }\n\n // Handle the case where we have separate Id and Title arrays\n if (Categories.Id && Categories.Title && Categories.Id.length === Categories.Title.length) {\n const items: FacetPropsItems[] = [];\n\n for (let i = 0; i < Categories.Id.length; i++) {\n const idItem = Categories.Id[i];\n const titleItem = Categories.Title[i];\n\n if (idItem?.name && titleItem?.name) {\n items.push({\n id: idItem.name,\n value: titleItem.name,\n count: idItem.count ?? 0\n });\n }\n }\n\n return items.sort((a, b) => a.value.localeCompare(b.value));\n }\n\n return [];\n};\n\n// Common function to find a facet by ID\nexport const findFacetById = (id: string, facets: FacetProps[] | FacetPropsItems[]) =>\n facets.find(facet => facet.id === id);\n\nexport const getFacetValueById = (\n facets: FacetProps[],\n id:\n | EventFacetTypes\n | ResourceFacetTypes\n | ProgramsAndCertificatesFacetTypes\n | ECommerceCoursesAndProductsFacetTypes\n | PeopleDirectoryFacetTypes\n | BlogFacetTypes\n): string[] | null => {\n const facet = facets.find(facet => facet.id === id);\n return facet?.value as string[] | null;\n};\n\nexport const getElementsWithSuffix = (obj: commonListTypesMerged, suffix: string) => {\n const result: { [key: string]: string | object | object[] | null } = {};\n const suffixLength = suffix.length;\n\n for (const key in obj) {\n if (key.endsWith(suffix)) {\n // Extract the base key (excluding the suffix)\n const baseKey = key.slice(0, -suffixLength);\n result[baseKey] = obj[key as keyof ListingSlice_Event];\n }\n }\n\n result['_from'] = suffix;\n\n return result;\n};\n\n/**\n * This function is used to get the initial state of the application from the URL search parameters.\n * If the URL search parameters contain a '_from' key, the function will parse its value and use it to update the initial state.\n * The function will iterate over the keys of the initial state and update their values if a corresponding key is found in the URL search parameters.\n * If a key in the URL search parameters corresponds to the 'facets' key in the initial state, the function will update the 'facets' array in the initial state with the values from the URL search parameters.\n * If the URL search parameters do not contain a '_from' key, or if the URL search parameters are empty, the function will return the initial state as is.\n *\n * @param {commonListTypesMerged} initialState - The initial state of the application.\n * @returns {commonListTypesMerged} The updated initial state.\n */\nexport const getInitialState = (\n initialState:\n | ListingSlice_Event\n | ListingSlice_Resource\n | ListingSlice_Search\n | ListingSlice_ECommerceCoursesAndProducts\n | ListingSlice_PeopleDirectory\n | ListingSlice_ProgramsAndCerts\n) => {\n if (window.location.search.slice(1)) {\n const searchParams = new URLSearchParams(window.location.search.slice(1));\n const listing = JSON.parse(searchParams.get('_from') as string);\n if (listing) {\n const suffixLength = listing.length;\n\n for (const key in initialState) {\n const baseKey = key.slice(0, -suffixLength);\n const queryParamValue = searchParams.get(baseKey);\n\n if (queryParamValue) {\n if (baseKey !== 'facets') {\n initialState[key] = JSON.parse(queryParamValue as string);\n } else {\n const array2Map = new Map(\n JSON.parse(queryParamValue as string).map((item: Partial) => [\n item.id,\n item.value\n ])\n );\n\n if (initialState?.[key] && Array.isArray(initialState[key])) {\n // Iterate over array1 and update the value if found in array2Map\n initialState[key] = (initialState[key] as FacetProps[])?.map((item: FacetProps) => {\n if (array2Map.has(item.id)) {\n item.value = array2Map.get(item.id) as FacetProps['value'];\n }\n return item;\n });\n }\n }\n }\n }\n\n return initialState;\n } else {\n return initialState;\n }\n } else {\n return initialState;\n }\n};\n","import { useQuery } from '@tanstack/react-query';\nimport { GraphQLClient } from 'graphql-request';\nimport { useEffect, useMemo, useCallback, useState } from 'react';\nimport {\n CourseListingDocument,\n CourseListingQuery,\n ProductListingDocument,\n ProductListingQuery,\n CourseProduct,\n StandardProduct,\n CourseProductOrderByInput,\n StandardProductOrderByInput,\n CourseProductFacet,\n StandardProductFacet,\n Ranking\n} from '../../../../../codegenGenerated/optigraphql/generated';\nimport { getEnvGQLUrl } from '../../../../helpers';\nimport { ListingParams } from '../types';\nimport { getFacetValueById } from '../utils';\n\nexport enum ECommerceCoursesAndProductsFacetTypes {\n Categories = 'Categories',\n AreaOfStudyFacet = 'AreaOfStudyFacet',\n ProductTypeFacet = 'ProductTypeFacet'\n}\n\ntype CourseQueryParams = {\n numberOfResults: number;\n skip: number;\n searchTerm: string | null;\n searchTermBoost: string | null;\n orderBy: CourseProductOrderByInput;\n areaOfStudyFacet: string[] | null;\n};\n\ntype ProductQueryParams = {\n numberOfResults: number;\n skip: number;\n searchTerm: string | null;\n searchTermBoost: string | null;\n orderBy: StandardProductOrderByInput;\n productTypeFacet: string[] | null;\n};\n\ntype CombinedFacets = {\n AreaOfStudyFacet?: CourseProductFacet['AreaOfStudyFacet'];\n ProductTypeFacet?: StandardProductFacet['ProductTypeFacet'];\n};\n\nexport const useGetEcommerceCoursesAndProductsListing = (params?: ListingParams) => {\n const graphQLClient = new GraphQLClient(getEnvGQLUrl());\n const [accumulatedResults, setAccumulatedResults] = useState<\n Array\n >([]);\n const [combinedFacets, setCombinedFacets] = useState({});\n\n const { orderBy, pagination, searchTerm, facets = [] } = params || {};\n\n // Add effect to handle resetting accumulated results\n useEffect(() => {\n // Reset accumulated results when any parameter except pagination.skip changes\n setAccumulatedResults([]);\n }, [orderBy, searchTerm, facets, pagination?.limit]);\n\n const selectedType = getFacetValueById(facets, ECommerceCoursesAndProductsFacetTypes.Categories);\n const isCourses = selectedType?.[0] === 'courses';\n const isFirstLoad = !selectedType || selectedType.length === 0;\n\n const orderByValue = useMemo(() => {\n if (!orderBy) return {};\n switch (orderBy) {\n case 'RELEVANCE':\n return { _ranking: 'SEMANTIC' as Ranking };\n case 'ASC':\n return { StartPublish: 'ASC' as const };\n case 'DESC':\n return { StartPublish: 'DESC' as const };\n case 'A-Z':\n return isCourses ? { CourseSubjectId: 'ASC' as const } : { DisplayName: 'ASC' as const };\n default:\n return { _ranking: 'SEMANTIC' as Ranking };\n }\n }, [orderBy, isCourses]);\n\n const getQueryParams = useCallback(\n (forCourses: boolean) => {\n if (!pagination) return null;\n\n const baseParams = {\n numberOfResults: pagination.limit,\n skip: pagination.skip,\n searchTerm: searchTerm === '' ? null : (searchTerm ?? null),\n searchTermBoost: searchTerm ? `%${searchTerm}%` : null,\n orderBy: orderByValue\n };\n\n if (forCourses) {\n return {\n ...baseParams,\n areaOfStudyFacet: facets\n ? getFacetValueById(facets, ECommerceCoursesAndProductsFacetTypes.AreaOfStudyFacet)\n : null\n } as CourseQueryParams;\n } else {\n return {\n ...baseParams,\n productTypeFacet: facets\n ? getFacetValueById(facets, ECommerceCoursesAndProductsFacetTypes.ProductTypeFacet)\n : null\n } as ProductQueryParams;\n }\n },\n [pagination, searchTerm, orderByValue, facets]\n );\n\n // Query for courses\n const coursesQuery = useQuery({\n queryKey: [\n 'ecommerceCourses',\n orderBy,\n pagination?.skip,\n pagination?.limit,\n searchTerm,\n JSON.stringify(facets)\n ],\n queryFn: async () => {\n const params = getQueryParams(true);\n if (!params) throw new Error('Invalid params');\n return graphQLClient.request(CourseListingDocument, params as CourseQueryParams);\n },\n refetchOnWindowFocus: false,\n enabled: isFirstLoad || isCourses\n });\n\n // Query for products\n const productsQuery = useQuery({\n queryKey: [\n 'ecommerceProducts',\n orderBy,\n pagination?.skip,\n pagination?.limit,\n searchTerm,\n JSON.stringify(facets)\n ],\n queryFn: async () => {\n const params = getQueryParams(false);\n if (!params) throw new Error('Invalid params');\n return graphQLClient.request(ProductListingDocument, params as ProductQueryParams);\n },\n refetchOnWindowFocus: false,\n enabled: isFirstLoad || !isCourses\n });\n\n useEffect(() => {\n if (isFirstLoad) {\n // Combine facets from both queries\n const coursesFacets = coursesQuery.data?.CourseProduct?.facets || {};\n const productsFacets = productsQuery.data?.StandardProduct?.facets || {};\n\n console.log('Initial Load Facets:', {\n coursesFacets,\n productsFacets\n });\n\n setCombinedFacets({\n ...coursesFacets,\n ...productsFacets\n });\n } else {\n // Use facets from the active query\n const currentData = isCourses\n ? coursesQuery.data?.CourseProduct?.facets\n : productsQuery.data?.StandardProduct?.facets;\n\n console.log('Active Query Facets:', {\n isCourses,\n currentData\n });\n\n setCombinedFacets(currentData || {});\n }\n }, [isFirstLoad, isCourses, coursesQuery.data, productsQuery.data]);\n\n useEffect(() => {\n const currentData = isCourses\n ? coursesQuery.data?.CourseProduct\n : productsQuery.data?.StandardProduct;\n\n if (currentData?.items && Array.isArray(currentData.items)) {\n const newItems = currentData.items.filter(\n (item: unknown): item is CourseProduct | StandardProduct => item !== null\n );\n if (!pagination?.skip || pagination.skip === 0) {\n // Reset results if we're starting from the first page\n setAccumulatedResults(newItems);\n } else {\n // Append new results to existing ones\n setAccumulatedResults(prev => [...prev, ...newItems]);\n }\n }\n }, [isCourses, coursesQuery.data, productsQuery.data, pagination?.skip]);\n\n const isLoading = isFirstLoad\n ? coursesQuery.isFetching || productsQuery.isFetching\n : isCourses\n ? coursesQuery.isFetching\n : productsQuery.isFetching;\n\n const error = isFirstLoad\n ? coursesQuery.error || productsQuery.error\n : isCourses\n ? coursesQuery.error\n : productsQuery.error;\n\n const currentData = isCourses\n ? coursesQuery.data?.CourseProduct\n : productsQuery.data?.StandardProduct;\n\n return {\n status: error ? 'error' : isLoading ? 'loading' : 'success',\n error: error as Error,\n results: accumulatedResults,\n total: currentData?.total || 0,\n facets: combinedFacets\n };\n};\n","import { useCallback } from 'react';\nimport { ECommerceCoursesAndProductsFacetTypes } from '../ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing';\nimport { FacetProps } from '../types';\n\ntype OwnProps = {\n facets: FacetProps[];\n isEcommerceListing: boolean;\n isProgramListing: boolean;\n pagination: {\n skip: number;\n limit: number;\n total: number;\n };\n setFilters: (filters: FacetProps[]) => void;\n setPagination: (pagination: { skip: number; limit: number; total: number }) => void;\n};\n\nconst useFacetChangeHandler = ({\n facets,\n isEcommerceListing,\n isProgramListing,\n pagination,\n setFilters,\n setPagination\n}: OwnProps) => {\n const onSelectionChangeHandler = useCallback(\n (selectedFacetID: string, value: string | null) => {\n if (\n isEcommerceListing &&\n selectedFacetID === ECommerceCoursesAndProductsFacetTypes.Categories\n ) {\n facets.forEach(facet => {\n if (facet.id !== ECommerceCoursesAndProductsFacetTypes.Categories) {\n facet.value = null;\n }\n });\n }\n\n let dateRangeType = '';\n setFilters(\n facets.map(facet => {\n if (selectedFacetID === 'minDate' || selectedFacetID === 'maxDate') {\n dateRangeType = selectedFacetID === 'minDate' ? 'minDate' : 'maxDate';\n selectedFacetID = 'date-range';\n }\n\n if (facet.id !== selectedFacetID) {\n return facet;\n }\n\n switch (facet.type) {\n case 'accordion': {\n let newValue = facet.value || [];\n newValue = Array.isArray(newValue) ? newValue : [newValue];\n\n if (newValue.includes(value as string)) {\n newValue = newValue.filter(item => item !== value);\n newValue = newValue.length > 0 ? newValue : [];\n } else {\n newValue = newValue.concat(value as string);\n }\n\n return { ...facet, value: newValue.length > 0 ? newValue : null };\n }\n case 'select':\n case 'custom-radio': {\n let newValue = facet.value && Array.isArray(facet.value) ? [...facet.value] : [];\n\n if (isEcommerceListing || isProgramListing) {\n newValue = [value as string];\n } else {\n if (newValue.includes(value as string) && value !== 'all') {\n newValue = newValue.filter(item => item !== value && item !== 'all');\n } else if (value === 'all') {\n newValue = ['all'];\n } else {\n newValue = newValue.filter(item => item !== 'all');\n newValue = [value as string];\n }\n }\n\n newValue = newValue.filter(item => item !== '');\n return { ...facet, value: newValue.length > 0 ? newValue : null };\n }\n\n case 'custom-select-search':\n case 'custom-select': {\n let newValue = facet.value && Array.isArray(facet.value) ? [...facet.value] : [];\n\n newValue = value?.split(',') || [];\n newValue = newValue.filter(item => item !== '');\n\n return { ...facet, value: newValue.length > 0 ? newValue : null };\n }\n\n case 'date': {\n const minDate = facet?.items?.find(f => f.id === 'minDate');\n const maxDate = facet?.items?.find(f => f.id === 'maxDate');\n if (dateRangeType === 'minDate' && minDate) {\n minDate.value = value!;\n } else {\n maxDate!.value = value!;\n }\n\n return {\n ...facet,\n items: [\n { id: 'minDate', value: minDate!.value, title: minDate!.title },\n { id: 'maxDate', value: maxDate!.value, title: maxDate!.title }\n ],\n value: null\n };\n }\n\n default:\n return { ...facet, value: value };\n }\n })\n );\n\n // Reset the pagination\n setPagination({ skip: 0, limit: pagination.limit, total: pagination.total });\n },\n [facets, isEcommerceListing, isProgramListing, pagination, setFilters, setPagination]\n );\n\n return onSelectionChangeHandler;\n};\n\nexport default useFacetChangeHandler;\n","import { useCallback } from 'react';\r\nimport { FacetProps, FacetPropsItems } from '../types';\r\ninterface OwnProps {\r\n facets: FacetProps[];\r\n isProgramListing: boolean;\r\n}\r\n\r\nconst useIsChecked = ({ facets, isProgramListing }: OwnProps) => {\r\n const isChecked = useCallback(\r\n (item: FacetPropsItems, id: string) => {\r\n let facetID = id;\r\n let facetItem = item.id;\r\n\r\n if (isProgramListing && item.id && item.id.includes('on-campus')) {\r\n facetID = 'CampusLocationFacet';\r\n facetItem = item.id.replace('on-campus-', '');\r\n\r\n if (facetItem === 'all') {\r\n const facet = facets.find(facet => facet.id === facetID);\r\n\r\n if (\r\n (facet?.value && facet?.value?.length > 0) ||\r\n facet?.value?.length === facet?.items.length\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n\r\n const facet = facets.find(facet => facet.id === facetID);\r\n return facet?.value ? (facet.value as string[]).includes(facetItem) : false;\r\n },\r\n [facets, isProgramListing]\r\n );\r\n\r\n return isChecked;\r\n};\r\n\r\nexport default useIsChecked;\r\n","import React, { useEffect, useState } from 'react';\nimport { ListingTypes, SortOptions } from './types';\n\ninterface OwnProps {\n searchPlaceholder: string;\n searchTerm: string;\n pagination: {\n skip: number;\n limit: number;\n total: number;\n };\n ariaLabel?: string;\n setStoreSearchTerm: (searchTerm: string) => void;\n setPagination: (pagination: { skip: number; limit: number; total: number }) => void;\n setSortBy?: (sort: string) => void;\n listingType?: ListingTypes;\n}\n\nconst Search = ({\n searchPlaceholder,\n searchTerm,\n pagination,\n listingType,\n setStoreSearchTerm,\n setPagination,\n setSortBy,\n ariaLabel\n}: OwnProps) => {\n const [searchText, setSearchText] = useState('');\n\n const setRelevanceSort = () => {\n if (\n listingType === ListingTypes.RESOURCES_LISTING ||\n listingType === ListingTypes.BLOG_AND_NEWS_LISTING ||\n listingType === ListingTypes.SEARCH_LISTING ||\n listingType === ListingTypes.ECOMMERCE_COURSES_LISTING\n ) {\n setSortBy && setSortBy(SortOptions.RELEVANCE);\n }\n };\n\n useEffect(() => {\n if (searchTerm) {\n setSearchText(searchTerm);\n setRelevanceSort();\n }\n }, [searchTerm]);\n\n const doSearch = () => {\n setRelevanceSort();\n setStoreSearchTerm(searchText);\n\n // Reset the pagination\n setPagination({ skip: 0, limit: pagination.limit, total: pagination.total });\n\n // raise event for search tracking\n document.dispatchEvent(\n new CustomEvent('uor_search_performed', {\n bubbles: true,\n detail: { text: searchText }\n })\n );\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n doSearch();\n } else {\n setSearchText(event.currentTarget.value);\n }\n };\n\n const handleXKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === ' ' && svgSearch !== '#search') {\n event.preventDefault();\n clearSearch();\n }\n };\n\n const clearSearch = () => {\n setSearchText('');\n setStoreSearchTerm('');\n if (setSortBy) {\n setSortBy('');\n\n if (listingType === ListingTypes.SEARCH_LISTING) {\n setSortBy(SortOptions.ASC);\n }\n\n if (\n listingType === ListingTypes.RESOURCES_LISTING ||\n listingType === ListingTypes.ECOMMERCE_COURSES_LISTING\n ) {\n setSortBy(SortOptions.AZ);\n }\n }\n };\n\n const svgSearch = searchText ? '#close' : '#search';\n\n return (\n
\n setSearchText(event.currentTarget.value)}\n onKeyDown={handleKeyDown}\n value={searchText}\n className=\"listing-input listing-input__search\"\n aria-label={ariaLabel ? ariaLabel : 'Enter Keyword'}\n />\n\n \n \n \n
\n );\n};\n\nexport default Search;\n","import { useCallback } from 'react';\nimport { FacetProps } from '../types';\n\ninterface OwnProps {\n facets: FacetProps[];\n isEcommerceListing: boolean;\n isPeopleListing: boolean;\n}\n\nconst useClearAllFacets = ({ facets, isEcommerceListing, isPeopleListing }: OwnProps) => {\n const filterFacets = useCallback(() => {\n return facets.map(facet => {\n // Always preserve ProgramTypeFacet value\n if (facet.id === 'ProgramTypeFacet') {\n return facet;\n }\n\n if (facet.value) {\n if (isEcommerceListing || isPeopleListing) {\n if (facet.type !== 'custom-radio') {\n return { ...facet, value: null };\n }\n } else {\n if (facet.id === 'date-range') {\n // Reset date range items\n const items = facet.items.map(item => {\n return { ...item, value: '' };\n });\n\n return {\n ...facet,\n items,\n value: null\n };\n }\n\n return { ...facet, value: null };\n }\n }\n\n return facet;\n });\n }, [facets, isEcommerceListing, isPeopleListing]);\n\n return filterFacets;\n};\n\nexport default useClearAllFacets;\n","import React, { useEffect, useState } from 'react';\nimport { Checkbox } from '../../../../components/react-components/Checkbox';\n\nimport {\n FacetProps,\n FacetPropsItems,\n FacetsCommonProps,\n ListingTypes,\n SortOptions\n} from '../types';\n// import SelectSort from './SelectSort';\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger\n} from '../../../../components/react-components/Accordion';\nimport KeySearcher from '../../../../components/react-components/KeySearch';\nimport { ECommerceCoursesAndProductsFacetTypes } from '../ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing';\nimport Search from '../Search';\nimport { findFacetById, getFacetValueById } from '../utils';\nimport FacetDate from './FacetDate';\nimport useClearAllFacets from './useClearAllFacets';\nimport useFacetChangeHandler from './useFacetChangeHandler';\nimport useIsChecked from './useIsChecked';\n// import FacetDate from './FacetDate';\n// import useFacetChangeHandler from './useFacetChangeHandler';\nimport { FacetData } from './FacetAccordion';\n\ntype OwnProps = {\n sortOptions?:\n | {\n label: string;\n value: string;\n }[]\n | null;\n mobileShowResultsLabel: string;\n clearAllLabel: string;\n mobileFilterNarrowLabel: string;\n mobileAppliedFiltersLabel: string;\n minDatePlaceholder?: string;\n maxDatePlaceholder?: string;\n orderBy?: string;\n defaultSortValue?: string;\n setOrderBy?: (orderBy: string) => void;\n dropdownSearchLabel?: string;\n searchPlaceholder?: string;\n setSearchTerm?: (searchTerm: string) => void;\n searchTerm?: string;\n unavailableLetters?: string[];\n facetsData?: FacetData;\n defaultFilter?: string;\n isFirstLoad?: boolean;\n} & FacetsCommonProps;\n\nconst FacetsMobile = ({\n sortOptions,\n mobileShowResultsLabel,\n clearAllLabel,\n mobileFilterNarrowLabel,\n mobileAppliedFiltersLabel,\n facets,\n orderBy,\n pagination,\n setPagination,\n setOrderBy,\n setFilters,\n listingType,\n searchPlaceholder,\n setSearchTerm,\n searchTerm,\n unavailableLetters,\n facetsData,\n defaultFilter,\n isFirstLoad = false\n}: OwnProps) => {\n const [displayMobileFilter, setDisplayMobileFilter] = useState(false);\n const [filtersApplied, setFiltersApplied] = useState(0);\n const isProgramListing = listingType === ListingTypes.PROGRAMS_CERTS_LISTING;\n const isEcommerceListing = listingType === ListingTypes.ECOMMERCE_COURSES_LISTING;\n const isPeopleDirectoryListing = listingType === ListingTypes.PEOPLE_LISTING;\n const isSearchListing = listingType === ListingTypes.SEARCH_LISTING;\n const isPeopleListing = listingType === ListingTypes.PEOPLE_LISTING;\n const [value, setValue] = useState('');\n const [updatedFacets, setUpdatedFacets] = useState(facets);\n\n const filterFacets = useClearAllFacets({ facets, isEcommerceListing, isPeopleListing });\n\n const toggleMobileFilter = () => {\n setDisplayMobileFilter(!displayMobileFilter);\n document.body.classList.toggle('no-scroll');\n };\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setDisplayMobileFilter(false);\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n setValue(sortOptions && sortOptions.length > 1 ? 'sort' : facets[0].id);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, []);\n\n useEffect(() => {\n if (facets.length) {\n calcSelectedFilters();\n }\n }, [facets]);\n\n useEffect(() => {\n if (facetsData) {\n const newUpdatedFacets = facets.map(facet => ({\n ...facet,\n items: facet.items.map(item => ({\n ...item,\n count:\n facetsData[facet.id]?.Categories.IdTitle?.find(f => f.name.split('|')[1] === item.value)\n ?.count || 0\n }))\n }));\n\n setUpdatedFacets(newUpdatedFacets);\n }\n }, [facetsData, facets]);\n\n const onSelectionChangeHandler = useFacetChangeHandler({\n facets,\n isEcommerceListing,\n isProgramListing,\n pagination,\n setFilters,\n setPagination\n });\n\n const isChecked = useIsChecked({ facets, isProgramListing });\n\n const showResults = () => {\n calcSelectedFilters();\n setDisplayMobileFilter(false);\n document.body.classList.remove('no-scroll');\n };\n\n const calcSelectedFilters = () => {\n let selectedFiltersLen = 0;\n // we need to get the item.value of each on the facets that are filled (value is not empty)\n const selectedFilters = facets.reduce((acc: string[], item: FacetProps) => {\n if (item.value && Array.isArray(item.value)) {\n (item.value as string[]).forEach((value: string) => {\n acc.push(value);\n });\n } else if (item.value) {\n acc.push(item.value as string);\n }\n return acc;\n }, []);\n\n selectedFiltersLen += selectedFilters.length;\n\n if (searchTerm && searchTerm.length > 0) {\n selectedFiltersLen += 1;\n }\n\n setFiltersApplied(selectedFiltersLen);\n };\n\n const clearResults = () => {\n const filtered = filterFacets().map(facet => {\n if (facet.id === 'ProgramTypeFacet' && defaultFilter && !isFirstLoad) {\n return { ...facet, value: [defaultFilter] };\n }\n return facet;\n });\n setFilters(filtered);\n document.body.classList.remove('no-scroll');\n setDisplayMobileFilter(false);\n };\n\n const programsListingOnValueChange = (itemID: string, facetID: string) => {\n const isOnCampusLocationFacet = itemID.includes('on-campus');\n const tempID = isOnCampusLocationFacet ? 'CampusLocationFacet' : facetID;\n const value = findFacetById(tempID, facets) as FacetPropsItems;\n let selectedValues = Array.isArray(value?.value) ? (value?.value as string[]) : [];\n\n if (isOnCampusLocationFacet && itemID.includes('all')) {\n const onCampusItems = facets.find(facet => facet.id === 'CampusLocationFacet')?.items;\n\n // if it includes on-campus-all, we select all the on-campus locations values from facet\n if (selectedValues.length === onCampusItems?.length) {\n selectedValues = [];\n } else {\n selectedValues = onCampusItems?.map(item => item.id) || [];\n }\n } else {\n const tempID = isOnCampusLocationFacet ? itemID.replace('on-campus-', '') : itemID;\n if (selectedValues.includes(tempID)) {\n selectedValues = selectedValues.filter(item => item !== tempID);\n } else {\n selectedValues.push(tempID);\n }\n }\n\n onSelectionChangeHandler(tempID, selectedValues.join(','));\n };\n\n const programsListingClassName = (itemID: string, type?: string) => {\n if (itemID.includes('on-campus')) {\n const facet = facets.find(facet => facet.id === 'CampusLocationFacet');\n if (type === 'checkbox') {\n if (itemID.includes('all')) {\n return facet?.value?.length === facet?.items.length\n ? 'check-item__all'\n : 'check-item__partial';\n }\n return '';\n }\n\n return itemID.includes('all')\n ? 'program-select__item program-select__item__all'\n : 'program-select__item program-select__item__on-campus';\n } else {\n return 'program-select__item';\n }\n };\n\n const handleCheckboxChange = (facetId: string, itemId: string, checked: boolean) => {\n const updatedFacet = updatedFacets.find(facet => facet.id === facetId);\n if (updatedFacet) {\n let newValue: string[] = Array.isArray(updatedFacet.value) ? [...updatedFacet.value] : [];\n\n if (checked) {\n newValue.push(itemId);\n } else {\n newValue = newValue.filter(id => id !== itemId);\n }\n\n onSelectionChangeHandler(facetId, newValue.join(','));\n }\n };\n\n const handleOrderByChange = (value: string) => {\n if (setOrderBy) {\n setOrderBy(value);\n }\n };\n\n return (\n \n
\n \n {filtersApplied > 0 && (\n \n {mobileAppliedFiltersLabel.replace('{0}', filtersApplied.toString())}\n \n )}\n
\n\n {(isProgramListing || isEcommerceListing) && (\n \n )}\n\n \n
\n \n {sortOptions && sortOptions.length > 1 && (\n \n Sort By\n \n {sortOptions.map(({ label, value }) => (\n
\n handleOrderByChange(e.target.value as SortOptions)}\n />\n \n \n {label}\n \n
\n ))}\n
\n
\n )}\n\n {updatedFacets.map((facet, index) => {\n const { id: facetID, title, items: facetItems, type } = facet;\n const isFacetItemsEmpty = !facetItems || facetItems.length === 0;\n\n if (type === 'date') {\n const minDate = facetItems?.find(item => item.id === 'minDate')?.value as string;\n const maxDate = facetItems?.find(item => item.id === 'maxDate')?.value as string;\n\n return (\n \n \n {'Event Date'}\n \n \n {facetItems &&\n facetItems.map(item => {\n return (\n \n );\n })}\n \n \n );\n }\n\n if (isPeopleDirectoryListing && facetID === 'LetterFacet') {\n return (\n \n {title}\n \n onSelectionChangeHandler(facetID, value)}\n disabledLetters={unavailableLetters}\n />\n \n \n );\n }\n\n if (isFacetItemsEmpty || facetID === 'CampusLocationFacet') {\n return null;\n }\n\n if (isEcommerceListing) {\n let visibleDropdownFacet;\n const selectedType = getFacetValueById(\n facets,\n ECommerceCoursesAndProductsFacetTypes.Categories\n );\n\n if (selectedType?.[0] === 'courses') {\n visibleDropdownFacet = ECommerceCoursesAndProductsFacetTypes.AreaOfStudyFacet;\n } else {\n visibleDropdownFacet = ECommerceCoursesAndProductsFacetTypes.ProductTypeFacet;\n }\n\n // we return null if one of the facet is not the equal the visibleDropdownFacet or 'Categories'\n\n if (\n facetID !== visibleDropdownFacet &&\n facetID !== ECommerceCoursesAndProductsFacetTypes.Categories\n ) {\n return null;\n }\n }\n\n return (\n \n {title}\n\n \n {facetItems &&\n facetItems.map((item, index) => {\n let selectProgramClass = '';\n if (isProgramListing) {\n selectProgramClass = programsListingClassName(item.id);\n }\n\n // If the ID is 'categories' or 'programtypefacet', render a radio button\n if (\n facetID.toLowerCase() === 'categories' ||\n facetID.toLowerCase() === 'programtypefacet'\n ) {\n return (\n \n onSelectionChangeHandler(facetID, item.id)}\n />\n \n \n {item.value}\n \n
\n );\n }\n\n return (\n
\n {\n if (isProgramListing) {\n programsListingOnValueChange(item.id, facetID);\n } else {\n handleCheckboxChange(facetID, item.id, checked as boolean);\n }\n }}\n aria-label={item.value}\n checked={isChecked(item, facetID)}\n />\n\n
\n \n {type !== 'search' &&\n !isEcommerceListing &&\n !isPeopleDirectoryListing &&\n !isProgramListing && (\n ({item.count})\n )}\n
\n
\n );\n })}\n \n \n );\n })}\n \n \n \n\n
\n clearResults()}\n >\n {clearAllLabel}\n \n showResults()}\n >\n {mobileShowResultsLabel.replace(\n '{0}',\n pagination.total ? pagination.total.toString() : ''\n )}\n \n
\n \n );\n};\n\nexport default FacetsMobile;\n","import React from 'react';\r\nimport { ArticleDetailPage } from '../../../../../codegenGenerated/optigraphql/generated';\r\nimport { getDateThreeLetterMonth } from '../../../../helpers/getDateLetter';\r\n\r\ninterface OwnProps {\r\n item: ArticleDetailPage;\r\n imgFallback?: string;\r\n}\r\n\r\nexport const BlogAndNewsCard = ({ item }: OwnProps) => {\r\n if (!item) return <>;\r\n\r\n const {\r\n Name: title,\r\n FeaturedDescription: description,\r\n Date: minDate,\r\n ReadTime: readTime,\r\n BlogAndNewsImage: image,\r\n Url: url\r\n } = item;\r\n\r\n return (\r\n \r\n \r\n
\r\n {image && image?.Url && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n

\r\n {title}\r\n
\r\n \r\n \r\n
\r\n

\r\n

{description}

\r\n
\r\n {minDate && (\r\n

\r\n {getDateThreeLetterMonth(minDate)} {minDate.split('-')[2].split('T')[0]},{' '}\r\n {minDate.split('-')[0]}\r\n

\r\n )}\r\n\r\n {readTime && (\r\n

\r\n {readTime}\r\n

\r\n )}\r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n};\r\n","import React from 'react';\nimport { CourseProduct } from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport const EcommerceCoursesCard = (item: CourseProduct) => {\n if (!item) return <>;\n\n const { Url, CourseSubjectId, CourseTitle, AreaOfStudyFacet } = item;\n\n let areasOfStudy: string[] = [];\n if (AreaOfStudyFacet?.AllCategoriesIds) {\n areasOfStudy =\n AreaOfStudyFacet?.Categories?.map(area => {\n return area?.Title || '';\n }) || [];\n }\n\n return (\n \n \n
\n
\n

\n \n {' '}\n {`${CourseSubjectId}: ${CourseTitle}`}\n \n
\n \n \n
\n

\n
\n

{areasOfStudy.join(', ')}

\n
\n
\n
\n \n
\n );\n};\n","import React from 'react';\nimport { StandardProduct } from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport type ProductsCardProps = {\n item: StandardProduct;\n imgFallback?: string;\n};\n\nexport const EcommerceProductsCard = ({ item, imgFallback }: ProductsCardProps) => {\n if (!item) return <>;\n\n const { Url, DefaultImageUrl, DefaultMarketPrice, DisplayName } = item;\n\n return (\n \n
\n
\n \n
\n
\n

\n {DisplayName}\n
\n \n \n
\n

\n
\n

{`$${DefaultMarketPrice?.toFixed(2)}`}

\n
\n
\n
\n
\n );\n};\n","import React from 'react';\r\nimport {\r\n EventDetailPage,\r\n FilterCategoryItemModel\r\n} from '../../../../../codegenGenerated/optigraphql/generated';\r\nimport { getDateThreeLetterMonth, getDateDayNumber } from '../../../../helpers/getDateLetter';\r\n\r\nexport const EventsListingCard = (event: EventDetailPage) => {\r\n if (!event) return <>;\r\n\r\n const {\r\n EventTitle: title,\r\n EventLocationFacet,\r\n EventAudienceFacet,\r\n EventTypeFacet,\r\n Url: url,\r\n InitialDateEvent,\r\n EndDateEvent\r\n } = event;\r\n\r\n // As per specs, only one/first location, audience and type will be displayed\r\n const [location, audience, type]: FilterCategoryItemModel[] = [\r\n EventLocationFacet!.Categories?.[0] as FilterCategoryItemModel,\r\n EventAudienceFacet?.Categories?.[0] as FilterCategoryItemModel,\r\n EventTypeFacet?.Categories?.[0] as FilterCategoryItemModel\r\n ];\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n
\r\n

\r\n {title}\r\n
\r\n \r\n \r\n
\r\n

\r\n
\r\n {location && location.Title && (\r\n

\r\n {location.Title}\r\n

\r\n )}\r\n\r\n {type && type.Title && (\r\n

\r\n {type.Title}\r\n

\r\n )}\r\n\r\n {audience && audience.Title && (\r\n

\r\n {audience.Title}\r\n

\r\n )}\r\n
\r\n
\r\n
\r\n {getDateThreeLetterMonth(InitialDateEvent) === getDateThreeLetterMonth(EndDateEvent) ||\r\n EndDateEvent === null ? (\r\n

\r\n {getDateThreeLetterMonth(InitialDateEvent)}\r\n

\r\n ) : (\r\n

\r\n {getDateThreeLetterMonth(InitialDateEvent)} -{' '}\r\n {getDateThreeLetterMonth(EndDateEvent)}\r\n

\r\n )}\r\n {EndDateEvent === null ||\r\n getDateDayNumber(InitialDateEvent) === getDateDayNumber(EndDateEvent) ? (\r\n

{getDateDayNumber(InitialDateEvent)}

\r\n ) : (\r\n

\r\n {getDateDayNumber(InitialDateEvent)} - {getDateDayNumber(EndDateEvent)}\r\n

\r\n )}\r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n","import React from 'react';\nimport {\n // FilterCategoryItemModel,\n OfficesAndServicesDetailPage\n} from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport const OfficesAndServicesCard = (item: OfficesAndServicesDetailPage) => {\n if (!item) return <>;\n\n const {\n OfficeAndServiceEmail: email,\n OfficeAndServiceLocation: location,\n OfficeAndServiceName: name,\n OfficeAndServicePhone: phone,\n Url: url,\n _id: id\n } = item;\n\n // InfoItem Component\n const InfoItem = ({ iconType, text }: { iconType: string; text: string }) => (\n
\n {iconType && iconType !== 'empty' && (\n \n \n \n )}\n {text}\n
\n );\n\n return (\n <>\n \n \n
\n
\n

\n {name}\n
\n \n \n
\n

\n
\n {email ? (\n \n ) : (\n \n )}\n {phone ? (\n \n ) : (\n \n )}\n {location ? (\n \n ) : (\n \n )}\n
\n
\n
\n \n
\n \n );\n};\n","import React, { memo, useMemo } from 'react';\nimport { PeopleDetailPage } from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport type PeopleDirectoryCardProps = {\n item: PeopleDetailPage;\n imgFallback?: string;\n};\n\n// Separate InfoItem into its own memoized component\nconst InfoItem = memo(({ iconType, text }: { iconType: string; text: string | string[] }) => (\n
\n {iconType && iconType !== 'empty' && (\n
\n \n \n \n
\n )}\n {Array.isArray(text) ? (\n
\n {text.map((item, index) => (\n {item}\n ))}\n
\n ) : (\n text\n )}\n
\n));\nInfoItem.displayName = 'InfoItem';\n\nexport const PeopleDirectoryCard = memo(({ item }: PeopleDirectoryCardProps) => {\n if (!item) return null;\n\n const {\n Url,\n FirstName,\n LastName,\n PersonTitle,\n DepartmentFacet,\n Email,\n CampusLocationFacet,\n PageImage\n } = item;\n\n // Memoize the processed arrays\n const { campusLocations, departments } = useMemo(() => {\n const campusLocs = CampusLocationFacet?.AllCategoriesIds\n ? CampusLocationFacet?.Categories?.map(area => area?.Title || '') || []\n : [];\n\n const depts = DepartmentFacet?.AllCategoriesIds\n ? DepartmentFacet?.Categories?.map(area => area?.Title || '') || []\n : [];\n\n return { campusLocations: campusLocs, departments: depts };\n }, [CampusLocationFacet, DepartmentFacet]);\n\n // Memoize the person info section\n const personInfo = useMemo(\n () => (\n
\n

\n {PersonTitle}\n {PersonTitle && departments.length > 0 && (\n \n )}\n {departments.length > 0 && departments.join(', ')}\n

\n
\n ),\n [PersonTitle, departments]\n );\n\n // Memoize the contact info section\n const contactInfo = useMemo(\n () => (\n
\n {Email ? (\n \n ) : (\n \n )}\n {campusLocations.length > 0 ? (\n \n ) : (\n \n )}\n
\n ),\n [Email, campusLocations]\n );\n\n // Memoize the image section\n const imageSection = useMemo(() => {\n if (!PageImage?.Url) return null;\n return (\n
\n \n
\n );\n }, [PageImage?.Url]);\n\n return (\n \n \n
\n
\n
\n

\n {`${FirstName} ${LastName}`}\n
\n \n \n
\n

\n {personInfo}\n
\n {contactInfo}\n {imageSection}\n
\n
\n \n
\n );\n});\n\nPeopleDirectoryCard.displayName = 'PeopleDirectoryCard';\n","import React, { useEffect } from 'react';\r\n\r\ntype OwnProps = {\r\n barRect: DOMRect;\r\n};\r\n\r\nconst ScrollIndicator = ({ barRect }: OwnProps) => {\r\n useEffect(() => {\r\n // we listen for scroll events\r\n window.addEventListener('scroll', () => {\r\n // we get the scroll position\r\n const scrollPosition = window.scrollY;\r\n // we get the scroll height\r\n const scrollHeight = document.body.scrollHeight - window.innerHeight;\r\n // we calculate the scroll percentage\r\n const scrollPercentage = (scrollPosition / scrollHeight) * 100;\r\n\r\n // we set the dot position\r\n const dot = document.querySelector('.scroll-indicator__dot') as HTMLElement;\r\n if (dot) {\r\n dot.style.top = scrollPercentage + '%';\r\n }\r\n });\r\n }, []);\r\n\r\n // we set the bar height to the bar rect.height\r\n const barHeight = barRect.height - 90 + 'px';\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default ScrollIndicator;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport {\r\n FilterCategoryItemModel,\r\n LinkItemNode,\r\n Maybe,\r\n ProgramDetailPage\r\n} from '../../../../../codegenGenerated/optigraphql/generated';\r\nimport {\r\n AccordionContent,\r\n AccordionItem,\r\n AccordionTrigger\r\n} from '../../../../components/react-components/Accordion';\r\nimport ScrollIndicator from '../../../../components/react-components/ScrollIndicator';\r\n\r\ninterface OwnProps {\r\n item: ProgramDetailPage;\r\n additionalProps?: { [key: string]: string };\r\n modeOfStudyLabel: string;\r\n programTypeLabel: string;\r\n degreesOfferLabel: string;\r\n departmentOfferLabel: string;\r\n schoolLabel: string;\r\n}\r\n\r\ntype CategoriesListProps = {\r\n title: string;\r\n isLink?: boolean;\r\n categories:\r\n | Maybe>>\r\n | Maybe>>\r\n | undefined;\r\n};\r\n\r\nexport const ProgramAndCertificatesCard = ({\r\n item,\r\n additionalProps,\r\n modeOfStudyLabel,\r\n programTypeLabel,\r\n degreesOfferLabel,\r\n departmentOfferLabel,\r\n schoolLabel\r\n}: OwnProps) => {\r\n if (!item) return <>;\r\n const elementRef = useRef(null);\r\n const [barRect, setBarRect] = React.useState({} as DOMRect);\r\n const nameEl = useRef(null);\r\n\r\n const {\r\n _id: id,\r\n Url: url,\r\n ProgramSortableName: name,\r\n ProgramTypeFacet: programType,\r\n LocationFacet: location,\r\n ApplyCTALink: applyCTALink,\r\n DegreesFacet: degrees,\r\n SchoolCtaLink: schoolCTALink,\r\n DepartmentCtaLink: departmentCTALink,\r\n DepartmentFacet: department,\r\n ProgramFinderDescription: description\r\n } = item;\r\n\r\n const isCertificate = additionalProps?.certificateId === programType?.Categories?.[0]?.Id;\r\n\r\n const applyLink = () => {\r\n if (isCertificate) {\r\n if (!applyCTALink || !applyCTALink.Href || !applyCTALink.Text) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {applyCTALink.Text}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {applyCTALink?.Text ? applyCTALink?.Text : additionalProps?.applyLabelFallback}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n useEffect(() => {\r\n const alertFunc = function () {\r\n //console.log('Button clicked', nameEl.current);\r\n };\r\n const nameRef = nameEl.current;\r\n\r\n if (!nameRef) return;\r\n\r\n nameRef.addEventListener('click', alertFunc, false);\r\n // Specify how to clean up after this effect:\r\n return function cleanup() {\r\n nameRef.removeEventListener('click', alertFunc, false);\r\n };\r\n });\r\n\r\n // INFO: use this sample description for testing purposes\r\n // const description =\r\n // '

What is a GIS Degree?

According to the US Department of Labor, geospatial technology is one of the high growth industries due to its diverse applications in

  • urban planning
  • environmental management
  • transportation
  • telecommunications
  • and many other fields

To respond to the rising demand in geospatial skills, the University of Redlands offers an internal GIS pathway program that allows the University undergraduates who want to pursue GIS as a future career path to earn a master’s degree in GIS within a year after they complete their undergraduate degree at Redlands.

';\r\n\r\n // Define a reusable component for rendering the categories list\r\n const CategoriesList = ({ title, categories, isLink }: CategoriesListProps) => {\r\n if (!categories || categories.length === 0) return null;\r\n\r\n // if categories is of type Maybe[]\r\n if (isLink) {\r\n return (\r\n
  • \r\n
    {title}
    \r\n
      \r\n {categories.map((category, index) => {\r\n if (!category) return null;\r\n\r\n const { Href, Target, Text } = category as LinkItemNode;\r\n\r\n return (\r\n
    • \r\n \r\n {Text}\r\n \r\n
    • \r\n );\r\n })}\r\n
    \r\n
  • \r\n );\r\n }\r\n\r\n return (\r\n
  • \r\n
    {title}
    \r\n
      \r\n {categories.map((category, index) => (\r\n
    • {category?.Title}
    • \r\n ))}\r\n
    \r\n
  • \r\n );\r\n };\r\n\r\n const handleOnClick = () => {\r\n if (!elementRef.current) return;\r\n\r\n // Use setTimeout to ensure updates are done after a delay of 500ms\r\n setTimeout(() => {\r\n try {\r\n const element = elementRef.current as unknown as HTMLElement;\r\n const barRect = element.getBoundingClientRect();\r\n setBarRect(barRect);\r\n } catch (error) {\r\n console.error('Failed to get bounding rectangle', error);\r\n }\r\n }, 400);\r\n };\r\n\r\n return (\r\n \r\n {\r\n e.stopPropagation();\r\n // if e.currentTarget is the program-accordion__name element, then we dont open the accordion\r\n // and we redirect to the program detail page url\r\n\r\n if (nameEl.current !== null && e.target === nameEl.current) {\r\n // redirect to the program detail page url\r\n e.preventDefault();\r\n window.location.href = url ?? '#';\r\n return;\r\n }\r\n\r\n handleOnClick();\r\n }}\r\n >\r\n
    \r\n

    \r\n {name}\r\n

    \r\n\r\n {/*

    \r\n {programShortName ? programShortName : programFullName}\r\n

    */}\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n {programType?.Categories?.map(category => {\r\n return category?.Title;\r\n }).join(', ')}\r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n {url && (\r\n \r\n {additionalProps?.learnMore ?? ''}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {applyLink()}\r\n
    \r\n
    \r\n\r\n \r\n\r\n
    \r\n
      \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\nimport {\n FilterCategoryItemModel,\n ResourceDetailPage\n} from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport const ResourceListingCard = (item: ResourceDetailPage) => {\n if (!item) return <>;\n\n const {\n ResourceName: title,\n ResourceOfficesAndServicesFacet,\n ResourceTypeFacet,\n ResourceAudienceFacet,\n ResourceDescription: description,\n Url: url\n } = item;\n\n // As per specs, only one/first location, audience and type will be displayed\n const [office, audience, type]: FilterCategoryItemModel[] = [\n ResourceOfficesAndServicesFacet!.Categories?.[0] as FilterCategoryItemModel,\n ResourceTypeFacet?.Categories?.[0] as FilterCategoryItemModel,\n ResourceAudienceFacet?.Categories?.[0] as FilterCategoryItemModel\n ];\n\n return (\n <>\n \n \n
    \n
    \n

    \n {title}\n {/*
    \n \n \n
    */}\n

    \n

    {description}

    \n
    \n {office && office.Title && (\n

    \n {office.Title}\n

    \n )}\n\n {type && type.Title && (\n

    \n {type.Title}\n

    \n )}\n\n {audience && audience.Title && (\n

    \n {audience.Title}\n

    \n )}\n
    \n
    \n
    \n \n
    \n \n );\n};\n","import React from 'react';\r\n\r\nexport type SearchCardItem = {\r\n _id: string;\r\n Name: string;\r\n ContentType: string;\r\n NavigationTitle: string;\r\n PageFeaturedDescription: string;\r\n PageImageUrl?: string;\r\n Url: string;\r\n};\r\n\r\nexport type SearchCardProps = {\r\n item: SearchCardItem;\r\n};\r\n\r\nexport const SearchCard = ({ item }: SearchCardProps) => {\r\n if (!item) return <>;\r\n\r\n const {\r\n Name: title,\r\n // ContentType: type,\r\n // NavigationTitle: navTitle,\r\n PageFeaturedDescription: description,\r\n PageImageUrl: image,\r\n Url: url\r\n } = item;\r\n\r\n // As per specs, only one/first location, audience and type will be displayed\r\n // const [office, audience, type]: FilterCategoryItemModel[] = [\r\n // ResourceOfficesAndServicesFacet!.Categories?.[0] as FilterCategoryItemModel,\r\n // ResourceTypeFacet?.Categories?.[0] as FilterCategoryItemModel,\r\n // ResourceAudienceFacet?.Categories?.[0] as FilterCategoryItemModel\r\n // ];\r\n\r\n return (\r\n \r\n \r\n
    \r\n {image && (\r\n
    \r\n \r\n
    \r\n )}\r\n\r\n
    \r\n

    {title}

    \r\n\r\n {description &&

    {description}

    }\r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n};\r\n","import React, { useEffect } from 'react';\nimport {\n ArticleDetailPage,\n CourseProduct,\n EventDetailPage,\n OfficesAndServicesDetailPage,\n PeopleDetailPage,\n ProgramDetailPage,\n ResourceDetailPage,\n StandardProduct\n} from '../../../../codegenGenerated/optigraphql/generated';\nimport { Accordion } from '../../../components/react-components/Accordion';\nimport Pagination, { PaginationType } from '../../../components/react-components/Pagination';\nimport Loader from '../Loader';\nimport { BlogAndNewsCard } from './BlogAndNewsListing/BlogAndNewsCard';\nimport { EcommerceCoursesCard } from './ECommerceCoursesAndProductsListing/EcommerceCoursesCard';\nimport { EcommerceProductsCard } from './ECommerceCoursesAndProductsListing/EcommerceProductsCard';\nimport { EventsListingCard } from './EventListing/EventListingCard';\nimport { OfficesAndServicesCard } from './OfficeAndServicesListing/OfficesAndServicesCard';\nimport { PeopleDirectoryCard } from './PeopleDirectoryListing/PeopleDirectoryCard';\nimport { ProgramAndCertificatesCard } from './ProgramsAndCertificatesListing/ProgramAndCertificatesCard';\nimport { ResourceListingCard } from './ResourcesListing/ResourcesListingCard';\nimport { SearchCard, SearchCardItem } from './SearchListing/SearchCard';\nimport { ListingResultTypes, ListingTypes } from './types';\n\ntype OwnProps = {\n id?: string;\n noResultsLabel: string;\n resultsNumber: string;\n status: string;\n results: ListingResultTypes;\n error: Error | null;\n searchTerm: string;\n pagination: {\n skip: number;\n limit: number;\n total: number;\n };\n paginationType: PaginationType;\n imgFallback?: string;\n showAllPaginationLabel?: string;\n setPagination?: (pagination: { skip: number; limit: number; total: number }) => void;\n additionalProps?: { [key: string]: string };\n modeOfStudyLabel?: string;\n programTypeLabel?: string;\n degreesOfferLabel?: string;\n departmentOfferLabel?: string;\n schoolLabel?: string;\n listingType?: string;\n};\n\nexport const Listing = ({\n id,\n noResultsLabel,\n resultsNumber,\n status,\n results,\n searchTerm,\n imgFallback,\n showAllPaginationLabel,\n pagination,\n paginationType,\n additionalProps,\n setPagination,\n modeOfStudyLabel,\n programTypeLabel,\n degreesOfferLabel,\n departmentOfferLabel,\n schoolLabel,\n listingType\n}: OwnProps) => {\n const hasNoResults = results?.length === 0 && status !== 'loading';\n const showMoreRef = React.createRef();\n const paginationTypeShowMore = paginationType === PaginationType.ShowMore;\n const isProgramListing = listingType === ListingTypes.PROGRAMS_CERTS_LISTING;\n const isLoading = status === 'loading';\n const [pageChanged, setPageChanged] = React.useState(false);\n\n useEffect(() => {\n if (!paginationTypeShowMore) {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n } else {\n // the user should stay where they where when they click on the pagination show more\n if (pageChanged) {\n setPageChanged(false);\n showMoreRef.current?.scrollIntoView({ behavior: 'smooth' });\n return;\n }\n }\n }, [results]);\n\n const onPageChange = (page: number | string) => {\n setPageChanged(true);\n setPagination!({\n ...pagination,\n skip: ((page as number) - 1) * +resultsNumber,\n limit: +resultsNumber\n });\n };\n\n const genericError = document.querySelector('body')?.dataset.listErrorMessage;\n\n const noResultsLabelReplaced =\n hasNoResults && searchTerm\n ? noResultsLabel.replace('{0}', searchTerm)\n : noResultsLabel.replace(' for {0}', '');\n\n if (isProgramListing) {\n return (\n \n {additionalProps && additionalProps['listingHeadingTitle'] && (\n

    \n {additionalProps['listingHeadingTitle']}\n

    \n )}\n {status === 'loading' && }\n {status === 'error' &&

    {genericError}

    }\n {hasNoResults && status !== 'error' && (\n
    \n )}\n\n
    \n \n {status === 'success' &&\n results!.length > 0 &&\n results!.map((result, index) => {\n if (!result) return null;\n return (\n \n );\n })}\n \n
    \n\n {!isLoading && results && results.length > 0 && (\n \n )}\n
    \n );\n }\n\n return (\n \n
      \n {isLoading && }\n {status === 'error' &&

      {genericError}

      }\n {hasNoResults && status !== 'error' && (\n
      \n )}\n\n {status === 'success' &&\n results &&\n results.length > 0 &&\n results.map(\n (\n result:\n | EventDetailPage\n | ResourceDetailPage\n | ArticleDetailPage\n | SearchCardItem\n | OfficesAndServicesDetailPage\n | ProgramDetailPage\n | CourseProduct\n | StandardProduct\n | PeopleDetailPage\n | null,\n index: number\n ) => {\n if (!result) return null;\n\n return (\n
    • \n {id === 'events-listing' && (\n \n )}\n {id === 'resources-listing' && (\n \n )}\n {id === 'blog-and-news-listing' && (\n \n )}\n {id === 'search-listing' && }\n {id === 'offices-services-listing' && (\n \n )}\n {id === 'ecommerce-courses-listing' && (\n \n )}\n {id === 'ecommerce-products-listing' && (\n \n )}\n {id === 'people-directory-listing' && (\n \n )}\n
    • \n );\n }\n )}\n
    \n {!isLoading && results && results.length > 0 && (\n \n )}\n
    \n
    \n );\n};\n","import React, { useEffect } from 'react';\nimport { ECommerceCoursesAndProductsFacetTypes } from './ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing';\nimport useClearAllFacets from './Facets/useClearAllFacets';\nimport { FacetProps, FacetPropsItems, ListingTypes } from './types';\nimport { getFacetValueById } from './utils';\n\ninterface OwnProps {\n resultsNumberLabel: string;\n clearAllLabel: string;\n resultsNumber: number;\n facets: FacetProps[];\n pagination: {\n skip: number;\n limit: number;\n total: number;\n };\n tagsNoResultsLabel: string;\n setFilters: (filters: FacetProps[]) => void;\n setPagination: (pagination: { skip: number; limit: number; total: number }) => void;\n className?: string;\n listingType?: string;\n defaultFilter?: string;\n isFirstLoad?: boolean;\n}\n\nconst SearchTags = ({\n resultsNumber,\n resultsNumberLabel,\n tagsNoResultsLabel,\n clearAllLabel,\n facets,\n pagination: { limit, skip, total },\n setFilters,\n setPagination,\n className,\n listingType,\n defaultFilter,\n isFirstLoad = false\n}: OwnProps) => {\n if (!resultsNumberLabel) return null;\n\n const [tagsSelected, setTagSelected] = React.useState([]);\n const isOfficeAndServicesListing = listingType === ListingTypes.OFFICES_SERVICES_LISTING;\n const isEcommerceListing = listingType === ListingTypes.ECOMMERCE_COURSES_LISTING;\n const isPeopleListing = listingType === ListingTypes.PEOPLE_LISTING;\n\n const filterFacets = useClearAllFacets({ facets, isEcommerceListing, isPeopleListing });\n\n const clearResults = () => {\n const filtered = filterFacets().map(facet => {\n if (facet.id === 'ProgramTypeFacet' && defaultFilter && !isFirstLoad) {\n return { ...facet, value: [defaultFilter] };\n }\n return facet;\n });\n setFilters(filtered);\n setTagSelected([]);\n setPagination({ skip: 0, limit: limit, total: total });\n };\n\n useEffect(() => {\n if (facets) {\n const selectedValues = facets\n .filter(facet => {\n if (facet.type === 'custom-radio' || facet.id === 'Categories') {\n return false;\n } else {\n if (facet.id === 'date-range') {\n const values: string[] = [];\n\n facet.items.forEach(item => {\n if (!values.includes(item.id) && item.value !== '') {\n values.push(item.id);\n }\n });\n\n facet.value = values.length > 0 ? values : null;\n }\n\n return facet.value;\n }\n })\n .map(facet => facet.value)\n .flat();\n\n if (selectedValues.includes('all')) {\n setTagSelected([]);\n return;\n }\n\n const selectedItemsValues = facets.flatMap(facet =>\n facet.items ? facet.items.filter(item => selectedValues.includes(item.id)) : []\n );\n\n setTagSelected(selectedItemsValues as FacetPropsItems[]);\n }\n }, [facets]);\n\n const initialItems = skip + 1;\n\n if (resultsNumber === 0) {\n return (\n
    \n
    {tagsNoResultsLabel}
    \n {!isFirstLoad && (\n
      \n
    • \n \n
    • \n
    \n )}\n
    \n );\n }\n\n const resultsNumberLabelWithTotal = () => {\n const terms = ['results', 'courses', 'products'];\n let label = resultsNumberLabel;\n\n if (\n className === 'listing__tags--ecommerce-courses-and-products' ||\n className === 'listing__tags--people-directory'\n ) {\n const selectedTypeValue = getFacetValueById(\n facets,\n ECommerceCoursesAndProductsFacetTypes.Categories\n );\n const facetInfo = facets.find(facet => facet.value === selectedTypeValue);\n const selectedTypeName = facetInfo?.items?.find(\n item => item.id === selectedTypeValue?.[0]\n )?.value;\n\n label = label\n .replace('{0}', total.toString())\n .replace('{1}', selectedTypeName?.toLowerCase() || '');\n } else if (isOfficeAndServicesListing) {\n label = label.replace('{0}', total.toString());\n } else {\n label =\n total <= initialItems\n ? label\n .replace('{0} -', '')\n .replace('{1}', total.toString())\n .replace('{2}', total.toString())\n : label\n .replace('{0}', initialItems.toString())\n .replace('{1}', total < limit + skip ? total.toString() : (limit + skip).toString())\n .replace('{2}', total.toString());\n }\n\n terms.forEach(term => {\n if (label.includes(term) && total === 1) {\n label = label.replace(term, term.slice(0, -1)); // Remove the last character to make it singular\n }\n });\n\n return label;\n };\n\n const handleRemoveTag = (tag: string) => {\n const newTags = tagsSelected.filter(t => t.id !== tag);\n\n setFilters(\n facets.map(facet => {\n if (facet.value) {\n // if array facet value already includes value, remove it\n if (Array.isArray(facet.value) && facet.value.includes(tag)) {\n if (facet.id === 'date-range') {\n // we need to remove the value from the items array, and then update the facet value\n const items = facet.items.map(item => {\n if (item.id === tag) {\n return { ...item, value: '' };\n }\n return item;\n });\n\n return {\n ...facet,\n items,\n value: items.filter(item => item.value !== '').map(item => item.id)\n };\n }\n\n return {\n ...facet,\n value:\n facet.value.length === 1 ? null : facet.value.filter((item: string) => item !== tag)\n };\n }\n }\n\n return facet;\n })\n );\n\n setTagSelected(newTags);\n };\n\n if (limit === 0) {\n return (\n
    \n
    {tagsNoResultsLabel}
    \n
    \n );\n }\n\n return (\n
    \n
    {resultsNumberLabelWithTotal()}
    \n {tagsSelected.length > 0 && (\n
      \n {tagsSelected &&\n tagsSelected.map(tag => (\n
    • \n handleRemoveTag(tag.id)}\n >\n {tag.id === 'minDate' || tag.id === 'maxDate' ? `${tag.title}: ` : ''}\n\n {tag.value}\n\n \n \n \n \n
    • \n ))}\n\n
    • \n \n
    • \n
    \n )}\n
    \n );\n};\n\nexport default SearchTags;\n"],"names":["PaginationType","Pagination","onPageChange","type","showAllPaginationLabel","pagination","currentPage","totalPages","showBtns","generatePages","pages","i","handlePageClick","page","React","index","SortOptions","ListingTypes","FacetDate","id","title","value","onSelectionChange","minDate","maxDate","tempValue","setTempValue","useState","isTabletMobileiOS","setIsTabletOrLess","inputType","setInputType","inputRef","useRef","useEffect","setFormattedDate","format","date","day","month","handleChange","e","rawValue","formattedDate","isTablet","isMobile","iOS","handleFocus","error","transformToFacetPropsItems","data","Categories","item","name","_a","a","b","items","idItem","titleItem","findFacetById","facets","facet","getFacetValueById","ECommerceCoursesAndProductsFacetTypes","useGetEcommerceCoursesAndProductsListing","params","graphQLClient","GraphQLClient","getEnvGQLUrl","accumulatedResults","setAccumulatedResults","combinedFacets","setCombinedFacets","orderBy","searchTerm","selectedType","isCourses","isFirstLoad","orderByValue","useMemo","getQueryParams","useCallback","forCourses","baseParams","coursesQuery","useQuery","CourseListingDocument","productsQuery","ProductListingDocument","coursesFacets","_b","productsFacets","_d","_c","currentData","_f","_e","_h","_g","newItems","prev","isLoading","useFacetChangeHandler","isEcommerceListing","isProgramListing","setFilters","setPagination","selectedFacetID","dateRangeType","newValue","f","useIsChecked","facetID","facetItem","Search","searchPlaceholder","listingType","setStoreSearchTerm","setSortBy","ariaLabel","searchText","setSearchText","setRelevanceSort","doSearch","handleKeyDown","event","handleXKeyDown","svgSearch","clearSearch","useClearAllFacets","isPeopleListing","FacetsMobile","sortOptions","mobileShowResultsLabel","clearAllLabel","mobileFilterNarrowLabel","mobileAppliedFiltersLabel","setOrderBy","setSearchTerm","unavailableLetters","facetsData","defaultFilter","displayMobileFilter","setDisplayMobileFilter","filtersApplied","setFiltersApplied","isPeopleDirectoryListing","isSearchListing","setValue","updatedFacets","setUpdatedFacets","filterFacets","toggleMobileFilter","calcSelectedFilters","newUpdatedFacets","onSelectionChangeHandler","isChecked","showResults","selectedFiltersLen","selectedFilters","acc","clearResults","filtered","programsListingOnValueChange","itemID","isOnCampusLocationFacet","tempID","selectedValues","onCampusItems","programsListingClassName","handleCheckboxChange","facetId","itemId","checked","updatedFacet","handleOrderByChange","Accordion","AccordionItem","AccordionTrigger","AccordionContent","label","facetItems","isFacetItemsEmpty","KeySearcher","visibleDropdownFacet","selectProgramClass","Checkbox","BlogAndNewsCard","description","readTime","image","url","getDateThreeLetterMonth","EcommerceCoursesCard","Url","CourseSubjectId","CourseTitle","AreaOfStudyFacet","areasOfStudy","area","EcommerceProductsCard","imgFallback","DefaultImageUrl","DefaultMarketPrice","DisplayName","EventsListingCard","EventLocationFacet","EventAudienceFacet","EventTypeFacet","InitialDateEvent","EndDateEvent","location","audience","getDateDayNumber","OfficesAndServicesCard","email","phone","InfoItem","iconType","text","memo","PeopleDirectoryCard","FirstName","LastName","PersonTitle","DepartmentFacet","Email","CampusLocationFacet","PageImage","campusLocations","departments","campusLocs","depts","personInfo","contactInfo","imageSection","ScrollIndicator","barRect","scrollPosition","scrollHeight","scrollPercentage","dot","barHeight","ProgramAndCertificatesCard","additionalProps","modeOfStudyLabel","programTypeLabel","degreesOfferLabel","departmentOfferLabel","schoolLabel","elementRef","setBarRect","nameEl","programType","applyCTALink","degrees","schoolCTALink","departmentCTALink","department","isCertificate","applyLink","alertFunc","nameRef","CategoriesList","categories","isLink","category","Href","Target","Text","handleOnClick","ResourceListingCard","ResourceOfficesAndServicesFacet","ResourceTypeFacet","ResourceAudienceFacet","office","SearchCard","Listing","noResultsLabel","resultsNumber","status","results","paginationType","hasNoResults","showMoreRef","paginationTypeShowMore","pageChanged","setPageChanged","genericError","noResultsLabelReplaced","Loader","result","SearchTags","resultsNumberLabel","tagsNoResultsLabel","limit","skip","total","className","tagsSelected","setTagSelected","isOfficeAndServicesListing","values","selectedItemsValues","initialItems","resultsNumberLabelWithTotal","terms","selectedTypeValue","facetInfo","selectedTypeName","term","handleRemoveTag","tag","newTags","t"],"mappings":"oWAEY,IAAAA,IAAAA,IACVA,EAAA,SAAW,YACXA,EAAA,WAAa,aAFHA,IAAAA,IAAA,CAAA,CAAA,EAeZ,MAAMC,GAAa,CAAC,CAClB,aAAAC,EACA,KAAAC,EACA,uBAAAC,EACA,WAAAC,CACF,IAAuB,CACrB,MAAMC,EAAcD,EAAW,KAAOA,EAAW,MAAQ,EACnDE,EAAa,KAAK,KAAKF,EAAW,MAAQ,CAACA,EAAW,KAAK,EAC3DG,EAAWD,EAAa,EAExBE,EAAgB,IAAM,CAC1B,IAAIC,EAAQ,CAAC,EACb,GAAIH,GAAc,EAChB,QAASI,EAAI,EAAGA,GAAKJ,EAAYI,IAC/BD,EAAM,KAAKC,CAAC,OAGVL,GAAe,EACjBI,EAAQ,CAAC,EAAG,EAAG,EAAG,MAAOH,CAAU,EAC1BD,EAAc,GAAKA,EAAcC,EAAa,EAC/CG,EAAA,CAAC,EAAG,MAAOJ,EAAc,EAAGA,EAAaA,EAAc,EAAG,MAAOC,CAAU,EAE3EG,EAAA,CACN,EACA,MACAH,EAAa,EACbA,EAAa,EACbA,EAAa,EACbA,EAAa,EACbA,CACF,EAGG,OAAAG,CACT,EAEME,EAAmBC,GAA0B,CAC7CA,IAAS,OACXX,EAAaW,CAAI,CAErB,EAEI,OAAAR,EAAW,OAASA,EAAW,MAC1B,KAGLF,IAAS,YACPG,EAAcD,EAAW,OAASA,EAAW,MACxC,KAINS,EAAA,cAAA,MAAA,CAAI,UAAU,YAAA,EACZA,EAAA,cAAA,SAAA,CAAO,UAAU,qBAAqB,QAAS,IAAMZ,EAAaI,EAAc,CAAC,CAC/E,EAAAF,EACAU,EAAA,cAAA,MAAA,CAAI,UAAU,eAAA,EACZA,EAAA,cAAA,OAAA,CAAK,UAAU,qBAAA,CAAsB,EACtCA,EAAA,cAAC,OAAK,CAAA,UAAU,qBAAsB,CAAA,CACxC,CACF,CACF,EAKDA,EAAA,cAAA,MAAA,CAAI,UAAU,YAAA,EACZN,GACCM,EAAA,cAAC,SAAA,CACC,QAAS,IAAMF,EAAgBN,EAAc,CAAC,EAC9C,SAAUA,IAAgB,EAC1B,UAAW,4BAA4BA,IAAgB,EAAI,WAAa,EAAE,GAC1E,aAAW,eAAA,EAEVQ,EAAA,cAAA,MAAA,CAAI,QAAQ,YAAY,UAAU,iBAAiB,KAAK,cAAA,EACtDA,EAAA,cAAA,MAAA,CAAI,UAAU,gBAAgB,CACjC,CACF,EAGDA,EAAA,cAAA,KAAA,CAAG,UAAU,kBAAA,EACXL,IAAgB,IAAI,CAACI,EAAME,IAC1BD,EAAA,cAAC,KAAA,CACC,IAAKC,EACL,UAAW,oBAAoBF,IAASP,EAAc,4BAA8B,EAAE,EAAA,EAEtFQ,EAAA,cAAC,IAAA,CACC,IAAKC,EACL,QAAS,IAAMH,EAAgBC,CAAI,EACnC,UAAW,gCAAA,EAEVA,CAAA,CACH,CAEH,CACH,EAECL,GACCM,EAAA,cAAC,SAAA,CACC,QAAS,IAAMF,EAAgBN,EAAc,CAAC,EAC9C,SAAUA,IAAgBC,EAC1B,UAAW,4BAA4BD,IAAgBC,EAAa,WAAa,EAAE,GACnF,aAAW,WAAA,EAEVO,EAAA,cAAA,MAAA,CAAI,QAAQ,YAAY,UAAU,iBAAiB,KAAK,cAAA,EACtDA,EAAA,cAAA,MAAA,CAAI,UAAU,iBAAiB,CAClC,CAAA,CAGN,CAEJ,EC7DY,IAAAE,IAAAA,IACVA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,UAAY,YACZA,EAAA,GAAK,MAJKA,IAAAA,IAAA,CAAA,CAAA,EAOAC,GAAAA,IACVA,EAAA,kBAAoB,oBACpBA,EAAA,uBAAyB,yBACzBA,EAAA,0BAA4B,4BAC5BA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,sBAAwB,wBACxBA,EAAA,yBAA2B,2BAC3BA,EAAA,cAAgB,gBARNA,IAAAA,GAAA,CAAA,CAAA,EC3DN,MAAAC,GAAY,CAAC,CAAE,GAAAC,EAAI,MAAAC,EAAO,MAAAC,EAAO,kBAAAC,EAAmB,QAAAC,EAAS,QAAAC,KAAwB,CAEzF,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAE,EACvC,CAACC,EAAmBC,CAAiB,EAAIF,EAAAA,SAAS,EAAK,EACvD,CAACG,EAAWC,CAAY,EAAIJ,EAAA,SAChCC,GAAqBH,IAAc,GAAK,OAAS,MACnD,EACMO,EAAWC,SAAyB,IAAI,EAG9CC,EAAAA,UAAU,IAAM,CACDH,EAAAV,EAAQ,OAAS,MAAM,EAEhCF,IAAO,WAAaI,GAAWC,GAE7B,IAAI,KAAKA,CAAO,EAAI,IAAI,KAAKD,CAAO,IACzBG,EAAAS,EAAiBX,CAAqB,CAAC,EACpDF,EAAkB,UAAWG,CAAS,GAI7BC,EAAAS,EAAiBd,CAAmB,CAAC,CAAA,EACjD,CAACA,CAAK,CAAC,EAEJ,MAAAc,EAAmB,CAACd,EAAsBe,IAAmB,CACjE,GAAIf,EAAO,CACH,MAAAgB,EAAO,IAAI,KAAKhB,CAAK,EACrBiB,EAAMD,EAAK,WAAW,EACtBE,EAAQF,EAAK,YAAA,EAAgB,EAIjC,MAAO,GAHIA,EAAK,eAAe,CAGjB,IAAIE,EAAQ,GAAK,IAAMA,EAAQA,CAAK,IAAID,EAAM,GAAK,IAAMA,EAAMA,CAAG,EAGF,CAG3E,MAAA,EACT,EAEME,EAAgBC,GAAqC,CACnD,MAAAC,EAAWD,EAAE,OAAO,MAC1Bf,EAAagB,CAAQ,EAGf,MAAAC,EAAgBR,EAAiBO,CAAsB,EAGzDpB,GACFA,EAAkBH,EAAIwB,CAAa,CAEvC,EAEAT,EAAAA,UAAU,IAAM,CACdL,GAAmBe,GAAS,GAAKC,GAAS,IAAMC,IAAK,CACvD,EAAG,EAAE,EAELZ,EAAAA,UAAU,IAAM,CACVN,IACEE,IAAc,QAAUE,EAAS,QACnCD,EAAa,MAAM,EAGnBA,EAAa,MAAM,EAEvB,EACC,CAACD,EAAWF,CAAiB,CAAC,EAE3B,MAAAmB,EAAeN,GAA0C,CAC7DA,EAAE,OAAO,KAAO,OACZ,GAAA,CACFA,EAAE,OAAO,WAAW,QACbO,EAAO,CACN,QAAA,KAAK,4DAA6DA,CAAK,EAC/EP,EAAE,OAAO,MAAM,CAAA,CAEnB,EAEA,OAAIb,EAECd,EAAA,cAAA,MAAA,CAAI,UAAU,2CAAA,EACZM,GACCN,EAAA,cAAC,QAAM,CAAA,QAASK,EAAI,UAAU,kCAC3B,EAAAC,CACH,EAGFN,EAAA,cAAC,QAAA,CACC,IAAKkB,EACL,GAAAb,EACA,KAAK,OACL,SAAUqB,EACV,MAAOf,EACP,UAAU,6DACV,YAAa,aACb,aAAYL,EACZ,MAAO,CAAE,UAAW,MAAO,CAAA,CAAA,EAI7BN,EAAA,cAAC,MAAI,CAAA,UAAU,yDAAyD,KAAK,cAC3E,EAAAA,EAAA,cAAC,MAAI,CAAA,UAAU,WAAY,CAAA,CAC7B,CACF,EAKDA,EAAA,cAAA,MAAA,CAAI,UAAU,6CACZM,GACEN,EAAA,cAAA,QAAA,CAAM,QAASK,EAAI,OAAM,GAAC,UAAU,iBAClCC,CACH,EAGFN,EAAA,cAAC,QAAA,CACC,IAAKkB,EACL,GAAAb,EACA,KAAMW,EACN,QAASiB,EACT,SAAUP,EACV,MAAOf,EACP,UAAU,oCACV,YAAaL,EACb,aAAYA,EACZ,IAAKD,IAAO,UAAYK,EAAU,OAClC,OAAQ,IAAM,CACRI,GACJG,EAAa,MAAM,CAAA,CACrB,CAAA,EAGFjB,EAAA,cAAC,MAAI,CAAA,UAAU,2BAA2B,KAAK,cAC7C,EAAAA,EAAA,cAAC,MAAI,CAAA,UAAU,WAAY,CAAA,CAC7B,CACF,CAEJ,ECpIamC,GAA8BC,GAAsD,CAC/F,KAAM,CAAE,WAAAC,GAAeD,GAAQ,CAAC,EAEhC,GAAI,CAACC,EAAY,MAAO,CAAC,EAGzB,GAAIA,EAAW,QACN,OAAAA,EAAW,QAAQ,IAAYC,GAAA,OAC9B,KAAA,CAACjC,EAAIkC,CAAI,IAAIC,EAAAF,GAAA,YAAAA,EAAM,OAAN,YAAAE,EAAY,MAAM,OAAQ,CAAC,GAAI,EAAE,EACpD,MAAO,CAAE,GAAAnC,EAAI,MAAOkC,EAAM,OAAOD,GAAA,YAAAA,EAAM,QAAS,CAAE,CAAA,CACnD,EAAE,KAAK,CAACG,EAAGC,IAAMD,EAAE,MAAM,cAAcC,EAAE,KAAK,CAAC,EAI9C,GAAAL,EAAW,IAAMA,EAAW,OAASA,EAAW,GAAG,SAAWA,EAAW,MAAM,OAAQ,CACzF,MAAMM,EAA2B,CAAC,EAElC,QAAS9C,EAAI,EAAGA,EAAIwC,EAAW,GAAG,OAAQxC,IAAK,CACvC,MAAA+C,EAASP,EAAW,GAAGxC,CAAC,EACxBgD,EAAYR,EAAW,MAAMxC,CAAC,EAEhC+C,GAAA,MAAAA,EAAQ,OAAQC,GAAA,MAAAA,EAAW,OAC7BF,EAAM,KAAK,CACT,GAAIC,EAAO,KACX,MAAOC,EAAU,KACjB,MAAOD,EAAO,OAAS,CAAA,CACxB,CACH,CAGK,OAAAD,EAAM,KAAK,CAACF,EAAGC,IAAMD,EAAE,MAAM,cAAcC,EAAE,KAAK,CAAC,CAAA,CAG5D,MAAO,CAAC,CACV,EAGaI,GAAgB,CAACzC,EAAY0C,IACxCA,EAAO,KAAKC,GAASA,EAAM,KAAO3C,CAAE,EAEzB4C,GAAoB,CAC/BF,EACA1C,IAOoB,CACpB,MAAM2C,EAAQD,EAAO,KAAKC,GAASA,EAAM,KAAO3C,CAAE,EAClD,OAAO2C,GAAA,YAAAA,EAAO,KAChB,ECpDY,IAAAE,GAAAA,IACVA,EAAA,WAAa,aACbA,EAAA,iBAAmB,mBACnBA,EAAA,iBAAmB,mBAHTA,IAAAA,GAAA,CAAA,CAAA,EA6BC,MAAAC,GAA4CC,GAA2B,SAClF,MAAMC,EAAgB,IAAIC,GAAcC,IAAc,EAChD,CAACC,EAAoBC,CAAqB,EAAI5C,EAAAA,SAElD,CAAA,CAAE,EACE,CAAC6C,EAAgBC,CAAiB,EAAI9C,EAAAA,SAAyB,CAAA,CAAE,EAEjE,CAAE,QAAA+C,EAAS,WAAArE,EAAY,WAAAsE,EAAY,OAAAd,EAAS,CAAC,CAAA,EAAMK,GAAU,CAAC,EAGpEhC,EAAAA,UAAU,IAAM,CAEdqC,EAAsB,CAAA,CAAE,CAAA,EACvB,CAACG,EAASC,EAAYd,EAAQxD,GAAA,YAAAA,EAAY,KAAK,CAAC,EAE7C,MAAAuE,EAAeb,GAAkBF,EAAQ,YAAgD,EACzFgB,GAAYD,GAAA,YAAAA,EAAe,MAAO,UAClCE,EAAc,CAACF,GAAgBA,EAAa,SAAW,EAEvDG,EAAeC,EAAAA,QAAQ,IAAM,CACjC,GAAI,CAACN,EAAS,MAAO,CAAC,EACtB,OAAQA,EAAS,CACf,IAAK,YACI,MAAA,CAAE,SAAU,UAAsB,EAC3C,IAAK,MACI,MAAA,CAAE,aAAc,KAAe,EACxC,IAAK,OACI,MAAA,CAAE,aAAc,MAAgB,EACzC,IAAK,MACH,OAAOG,EAAY,CAAE,gBAAiB,OAAmB,CAAE,YAAa,KAAe,EACzF,QACS,MAAA,CAAE,SAAU,UAAsB,CAAA,CAC7C,EACC,CAACH,EAASG,CAAS,CAAC,EAEjBI,EAAiBC,EAAA,YACpBC,GAAwB,CACvB,GAAI,CAAC9E,EAAmB,OAAA,KAExB,MAAM+E,EAAa,CACjB,gBAAiB/E,EAAW,MAC5B,KAAMA,EAAW,KACjB,WAAYsE,IAAe,GAAK,KAAQA,GAAc,KACtD,gBAAiBA,EAAa,IAAIA,CAAU,IAAM,KAClD,QAASI,CACX,EAEA,OAAII,EACK,CACL,GAAGC,EACH,iBAAkBvB,EACdE,GAAkBF,EAAQ,oBAC1B,IACN,EAEO,CACL,GAAGuB,EACH,iBAAkBvB,EACdE,GAAkBF,EAAQ,oBAC1B,IACN,CAEJ,EACA,CAACxD,EAAYsE,EAAYI,EAAclB,CAAM,CAC/C,EAGMwB,EAAeC,GAAoC,CACvD,SAAU,CACR,mBACAZ,EACArE,GAAA,YAAAA,EAAY,KACZA,GAAA,YAAAA,EAAY,MACZsE,EACA,KAAK,UAAUd,CAAM,CACvB,EACA,QAAS,SAAY,CACbK,MAAAA,EAASe,EAAe,EAAI,EAClC,GAAI,CAACf,EAAc,MAAA,IAAI,MAAM,gBAAgB,EACtC,OAAAC,EAAc,QAAQoB,GAAuBrB,CAA2B,CACjF,EACA,qBAAsB,GACtB,QAASY,GAAeD,CAAA,CACzB,EAGKW,EAAgBF,GAAqC,CACzD,SAAU,CACR,oBACAZ,EACArE,GAAA,YAAAA,EAAY,KACZA,GAAA,YAAAA,EAAY,MACZsE,EACA,KAAK,UAAUd,CAAM,CACvB,EACA,QAAS,SAAY,CACbK,MAAAA,EAASe,EAAe,EAAK,EACnC,GAAI,CAACf,EAAc,MAAA,IAAI,MAAM,gBAAgB,EACtC,OAAAC,EAAc,QAAQsB,GAAwBvB,CAA4B,CACnF,EACA,qBAAsB,GACtB,QAASY,GAAe,CAACD,CAAA,CAC1B,EAED3C,EAAAA,UAAU,IAAM,qBACd,GAAI4C,EAAa,CAEf,MAAMY,IAAgBC,GAAArC,EAAA+B,EAAa,OAAb,YAAA/B,EAAmB,gBAAnB,YAAAqC,EAAkC,SAAU,CAAC,EAC7DC,IAAiBC,GAAAC,EAAAN,EAAc,OAAd,YAAAM,EAAoB,kBAApB,YAAAD,EAAqC,SAAU,CAAC,EAEvE,QAAQ,IAAI,uBAAwB,CAClC,cAAAH,EACA,eAAAE,CAAA,CACD,EAEiBnB,EAAA,CAChB,GAAGiB,EACH,GAAGE,CAAA,CACJ,CAAA,KACI,CAECG,MAAAA,EAAclB,GAChBmB,GAAAC,EAAAZ,EAAa,OAAb,YAAAY,EAAmB,gBAAnB,YAAAD,EAAkC,QAClCE,GAAAC,EAAAX,EAAc,OAAd,YAAAW,EAAoB,kBAApB,YAAAD,EAAqC,OAEzC,QAAQ,IAAI,uBAAwB,CAClC,UAAArB,EACA,YAAAkB,CAAA,CACD,EAEiBA,EAAAA,GAAe,EAAE,CAAA,CACrC,EACC,CAACjB,EAAaD,EAAWQ,EAAa,KAAMG,EAAc,IAAI,CAAC,EAElEtD,EAAAA,UAAU,IAAM,SACd,MAAM6D,EAAclB,GAChBvB,EAAA+B,EAAa,OAAb,YAAA/B,EAAmB,eACnBqC,EAAAH,EAAc,OAAd,YAAAG,EAAoB,gBAExB,GAAII,GAAAA,MAAAA,EAAa,OAAS,MAAM,QAAQA,EAAY,KAAK,EAAG,CACpD,MAAAK,EAAWL,EAAY,MAAM,OAChC3C,GAA2DA,IAAS,IACvE,EACI,EAAC/C,GAAA,MAAAA,EAAY,OAAQA,EAAW,OAAS,EAE3CkE,EAAsB6B,CAAQ,EAG9B7B,KAA8B,CAAC,GAAG8B,EAAM,GAAGD,CAAQ,CAAC,CACtD,CACF,EACC,CAACvB,EAAWQ,EAAa,KAAMG,EAAc,KAAMnF,GAAA,YAAAA,EAAY,IAAI,CAAC,EAEjE,MAAAiG,EAAYxB,EACdO,EAAa,YAAcG,EAAc,WACzCX,EACEQ,EAAa,WACbG,EAAc,WAEdxC,EAAQ8B,EACVO,EAAa,OAASG,EAAc,MACpCX,EACEQ,EAAa,MACbG,EAAc,MAEdO,EAAclB,GAChBvB,EAAA+B,EAAa,OAAb,YAAA/B,EAAmB,eACnBqC,EAAAH,EAAc,OAAd,YAAAG,EAAoB,gBAEjB,MAAA,CACL,OAAQ3C,EAAQ,QAAUsD,EAAY,UAAY,UAClD,MAAAtD,EACA,QAASsB,EACT,OAAOyB,GAAA,YAAAA,EAAa,QAAS,EAC7B,OAAQvB,CACV,CACF,EChNM+B,GAAwB,CAAC,CAC7B,OAAA1C,EACA,mBAAA2C,EACA,iBAAAC,EACA,WAAApG,EACA,WAAAqG,EACA,cAAAC,CACF,IACmCzB,EAAA,YAC/B,CAAC0B,EAAyBvF,IAAyB,CAE/CmF,GACAI,IAAoB5C,EAAsC,YAE1DH,EAAO,QAAiBC,GAAA,CAClBA,EAAM,KAAOE,EAAsC,aACrDF,EAAM,MAAQ,KAChB,CACD,EAGH,IAAI+C,EAAgB,GACpBH,EACE7C,EAAO,IAAaC,GAAA,SAMd,IALA8C,IAAoB,WAAaA,IAAoB,aACvCC,EAAAD,IAAoB,UAAY,UAAY,UAC1CA,EAAA,cAGhB9C,EAAM,KAAO8C,EACR,OAAA9C,EAGT,OAAQA,EAAM,KAAM,CAClB,IAAK,YAAa,CACZ,IAAAgD,EAAWhD,EAAM,OAAS,CAAC,EAC/B,OAAAgD,EAAW,MAAM,QAAQA,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EAErDA,EAAS,SAASzF,CAAe,GACnCyF,EAAWA,EAAS,OAAe1D,GAAAA,IAAS/B,CAAK,EACjDyF,EAAWA,EAAS,OAAS,EAAIA,EAAW,CAAC,GAElCA,EAAAA,EAAS,OAAOzF,CAAe,EAGrC,CAAE,GAAGyC,EAAO,MAAOgD,EAAS,OAAS,EAAIA,EAAW,IAAK,CAAA,CAElE,IAAK,SACL,IAAK,eAAgB,CACnB,IAAIA,EAAWhD,EAAM,OAAS,MAAM,QAAQA,EAAM,KAAK,EAAI,CAAC,GAAGA,EAAM,KAAK,EAAI,CAAC,EAE/E,OAAI0C,GAAsBC,EACxBK,EAAW,CAACzF,CAAe,EAEvByF,EAAS,SAASzF,CAAe,GAAKA,IAAU,MAClDyF,EAAWA,EAAS,OAAO1D,GAAQA,IAAS/B,GAAS+B,IAAS,KAAK,EAC1D/B,IAAU,MACnByF,EAAW,CAAC,KAAK,GAEjBA,EAAWA,EAAS,OAAe1D,GAAAA,IAAS,KAAK,EACjD0D,EAAW,CAACzF,CAAe,GAI/ByF,EAAWA,EAAS,OAAe1D,GAAAA,IAAS,EAAE,EACvC,CAAE,GAAGU,EAAO,MAAOgD,EAAS,OAAS,EAAIA,EAAW,IAAK,CAAA,CAGlE,IAAK,uBACL,IAAK,gBAAiB,CACpB,IAAIA,EAAWhD,EAAM,OAAS,MAAM,QAAQA,EAAM,KAAK,EAAI,CAAC,GAAGA,EAAM,KAAK,EAAI,CAAC,EAE/E,OAAAgD,GAAWzF,GAAA,YAAAA,EAAO,MAAM,OAAQ,CAAC,EACjCyF,EAAWA,EAAS,OAAe1D,GAAAA,IAAS,EAAE,EAEvC,CAAE,GAAGU,EAAO,MAAOgD,EAAS,OAAS,EAAIA,EAAW,IAAK,CAAA,CAGlE,IAAK,OAAQ,CACX,MAAMvF,GAAU+B,EAAAQ,GAAA,YAAAA,EAAO,QAAP,YAAAR,EAAc,KAAUyD,GAAAA,EAAE,KAAO,WAC3CvF,GAAUmE,EAAA7B,GAAA,YAAAA,EAAO,QAAP,YAAA6B,EAAc,KAAUoB,GAAAA,EAAE,KAAO,WAC7C,OAAAF,IAAkB,WAAatF,EACjCA,EAAQ,MAAQF,EAEhBG,EAAS,MAAQH,EAGZ,CACL,GAAGyC,EACH,MAAO,CACL,CAAE,GAAI,UAAW,MAAOvC,EAAS,MAAO,MAAOA,EAAS,KAAM,EAC9D,CAAE,GAAI,UAAW,MAAOC,EAAS,MAAO,MAAOA,EAAS,KAAM,CAChE,EACA,MAAO,IACT,CAAA,CAGF,QACS,MAAA,CAAE,GAAGsC,EAAO,MAAAzC,CAAa,CAAA,CAErC,CAAA,CACH,EAGcsF,EAAA,CAAE,KAAM,EAAG,MAAOtG,EAAW,MAAO,MAAOA,EAAW,MAAO,CAC7E,EACA,CAACwD,EAAQ2C,EAAoBC,EAAkBpG,EAAYqG,EAAYC,CAAa,CACtF,ECrHIK,GAAe,CAAC,CAAE,OAAAnD,EAAQ,iBAAA4C,KACZvB,EAAA,YAChB,CAAC9B,EAAuBjC,IAAe,SACrC,IAAI8F,EAAU9F,EACV+F,EAAY9D,EAAK,GAErB,GAAIqD,GAAoBrD,EAAK,IAAMA,EAAK,GAAG,SAAS,WAAW,IACnD6D,EAAA,sBACVC,EAAY9D,EAAK,GAAG,QAAQ,aAAc,EAAE,EAExC8D,IAAc,OAAO,CACvB,MAAMpD,EAAQD,EAAO,KAAKC,GAASA,EAAM,KAAOmD,CAAO,EAGpDnD,MAAAA,GAAAA,GAAAA,MAAAA,EAAO,SAASA,EAAAA,GAAAA,YAAAA,EAAO,QAAPA,YAAAA,EAAc,QAAS,KACxCA,EAAAA,GAAAA,YAAAA,EAAO,QAAPA,YAAAA,EAAc,WAAWA,GAAAA,YAAAA,EAAO,MAAM,QAKjC,CAIX,MAAMA,EAAQD,EAAO,KAAKC,GAASA,EAAM,KAAOmD,CAAO,EACvD,OAAOnD,GAAA,MAAAA,EAAO,MAASA,EAAM,MAAmB,SAASoD,CAAS,EAAI,EACxE,EACA,CAACrD,EAAQ4C,CAAgB,CAC3B,ECjBIU,GAAS,CAAC,CACd,kBAAAC,EACA,WAAAzC,EACA,WAAAtE,EACA,YAAAgH,EACA,mBAAAC,EACA,cAAAX,EACA,UAAAY,EACA,UAAAC,CACF,IAAgB,CACd,KAAM,CAACC,EAAYC,CAAa,EAAI/F,EAAAA,SAAS,EAAE,EAEzCgG,EAAmB,IAAM,EAE3BN,IAAgBpG,EAAa,mBAC7BoG,IAAgBpG,EAAa,uBAC7BoG,IAAgBpG,EAAa,gBAC7BoG,IAAgBpG,EAAa,4BAEhBsG,GAAAA,EAAUvG,GAAY,SAAS,CAEhD,EAEAkB,EAAAA,UAAU,IAAM,CACVyC,IACF+C,EAAc/C,CAAU,EACPgD,EAAA,EACnB,EACC,CAAChD,CAAU,CAAC,EAEf,MAAMiD,EAAW,IAAM,CACJD,EAAA,EACjBL,EAAmBG,CAAU,EAGfd,EAAA,CAAE,KAAM,EAAG,MAAOtG,EAAW,MAAO,MAAOA,EAAW,MAAO,EAGlE,SAAA,cACP,IAAI,YAAY,uBAAwB,CACtC,QAAS,GACT,OAAQ,CAAE,KAAMoH,CAAW,CAC5B,CAAA,CACH,CACF,EAEMI,EAAiBC,GAAiD,CAClEA,EAAM,MAAQ,SAChBA,EAAM,eAAe,EACZF,EAAA,GAEKF,EAAAI,EAAM,cAAc,KAAK,CAE3C,EAEMC,EAAkBD,GAA2C,CAC7DA,EAAM,MAAQ,KAAOE,IAAc,YACrCF,EAAM,eAAe,EACTG,EAAA,EAEhB,EAEMA,EAAc,IAAM,CACxBP,EAAc,EAAE,EAChBJ,EAAmB,EAAE,EACjBC,IACFA,EAAU,EAAE,EAERF,IAAgBpG,EAAa,gBAC/BsG,EAAUvG,GAAY,GAAG,GAIzBqG,IAAgBpG,EAAa,mBAC7BoG,IAAgBpG,EAAa,4BAE7BsG,EAAUvG,GAAY,EAAE,EAG9B,EAEMgH,EAAYP,EAAa,SAAW,UAGxC,OAAA3G,EAAA,cAAC,MAAI,CAAA,UAAU,yBACb,EAAAA,EAAA,cAAC,QAAA,CACC,KAAK,OACL,YAAasG,EACb,SAAUU,GAASJ,EAAcI,EAAM,cAAc,KAAK,EAC1D,UAAWD,EACX,MAAOJ,EACP,UAAU,sCACV,aAAYD,GAAwB,eAAA,CAGtC,EAAA1G,EAAA,cAAC,MAAA,CACC,QAASkH,IAAc,UAAYJ,EAAWK,EAC9C,UAAWF,EACX,UAAU,6BACV,SAAU,EACV,KAAK,SACL,QAASC,IAAc,UAAY,YAAc,WAAA,EAEjDlH,EAAA,cAAC,MAAI,CAAA,UAAWkH,CAAW,CAAA,CAAA,CAE/B,CAEJ,ECpHME,GAAoB,CAAC,CAAE,OAAArE,EAAQ,mBAAA2C,EAAoB,gBAAA2B,KAClCjD,EAAAA,YAAY,IACxBrB,EAAO,IAAaC,GAAA,CAErB,GAAAA,EAAM,KAAO,mBACR,OAAAA,EAGT,GAAIA,EAAM,MACR,GAAI0C,GAAsB2B,GACpB,GAAArE,EAAM,OAAS,eACjB,MAAO,CAAE,GAAGA,EAAO,MAAO,IAAK,MAE5B,CACD,GAAAA,EAAM,KAAO,aAAc,CAE7B,MAAML,EAAQK,EAAM,MAAM,IAAYV,IAC7B,CAAE,GAAGA,EAAM,MAAO,EAAG,EAC7B,EAEM,MAAA,CACL,GAAGU,EACH,MAAAL,EACA,MAAO,IACT,CAAA,CAGF,MAAO,CAAE,GAAGK,EAAO,MAAO,IAAK,CAAA,CAI5B,OAAAA,CAAA,CACR,EACA,CAACD,EAAQ2C,EAAoB2B,CAAe,CAAC,ECa5CC,GAAe,CAAC,CACpB,YAAAC,EACA,uBAAAC,EACA,cAAAC,EACA,wBAAAC,EACA,0BAAAC,EACA,OAAA5E,EACA,QAAAa,EACA,WAAArE,EACA,cAAAsG,EACA,WAAA+B,EACA,WAAAhC,EACA,YAAAW,EACA,kBAAAD,EACA,cAAAuB,EACA,WAAAhE,EACA,mBAAAiE,EACA,WAAAC,EACA,cAAAC,EACA,YAAAhE,EAAc,EAChB,IAAgB,CACd,KAAM,CAACiE,EAAqBC,CAAsB,EAAIrH,EAAAA,SAAS,EAAK,EAC9D,CAACsH,EAAgBC,CAAiB,EAAIvH,EAAAA,SAAS,CAAC,EAChD8E,EAAmBY,IAAgBpG,EAAa,uBAChDuF,EAAqBa,IAAgBpG,EAAa,0BAClDkI,EAA2B9B,IAAgBpG,EAAa,eACxDmI,EAAkB/B,IAAgBpG,EAAa,eAC/CkH,EAAkBd,IAAgBpG,EAAa,eAC/C,CAACI,EAAOgI,CAAQ,EAAI1H,EAAAA,SAAS,EAAE,EAC/B,CAAC2H,EAAeC,CAAgB,EAAI5H,EAAAA,SAASkC,CAAM,EAEnD2F,EAAetB,GAAkB,CAAE,OAAArE,EAAQ,mBAAA2C,EAAoB,gBAAA2B,EAAiB,EAEhFsB,EAAqB,IAAM,CAC/BT,EAAuB,CAACD,CAAmB,EAClC,SAAA,KAAK,UAAU,OAAO,WAAW,CAC5C,EAEA7G,EAAAA,UAAU,IAAM,CACR,MAAA2F,EAAiBC,GAAyB,CAC1CA,EAAM,MAAQ,UAChBkB,EAAuB,EAAK,CAEhC,EAEO,cAAA,iBAAiB,UAAWnB,CAAa,EAEvCwB,EAAAhB,GAAeA,EAAY,OAAS,EAAI,OAASxE,EAAO,CAAC,EAAE,EAAE,EAE/D,IAAM,CACJ,OAAA,oBAAoB,UAAWgE,CAAa,CACrD,CACF,EAAG,EAAE,EAEL3F,EAAAA,UAAU,IAAM,CACV2B,EAAO,QACW6F,GAAA,CACtB,EACC,CAAC7F,CAAM,CAAC,EAEX3B,EAAAA,UAAU,IAAM,CACd,GAAI2G,EAAY,CACR,MAAAc,EAAmB9F,EAAO,IAAcC,IAAA,CAC5C,GAAGA,EACH,MAAOA,EAAM,MAAM,IAAaV,GAAA,WAAA,OAC9B,GAAGA,EACH,QACE0C,GAAAH,GAAArC,EAAAuF,EAAW/E,EAAM,EAAE,IAAnB,YAAAR,EAAsB,WAAW,UAAjC,YAAAqC,EAA0C,KAAKoB,GAAKA,EAAE,KAAK,MAAM,GAAG,EAAE,CAAC,IAAM3D,EAAK,SAAlF,YAAA0C,EACI,QAAS,CAAA,EACf,CAAA,EACF,EAEFyD,EAAiBI,CAAgB,CAAA,CACnC,EACC,CAACd,EAAYhF,CAAM,CAAC,EAEvB,MAAM+F,EAA2BrD,GAAsB,CACrD,OAAA1C,EACA,mBAAA2C,EACA,iBAAAC,EACA,WAAApG,EACA,WAAAqG,EACA,cAAAC,CAAA,CACD,EAEKkD,EAAY7C,GAAa,CAAE,OAAAnD,EAAQ,iBAAA4C,EAAkB,EAErDqD,GAAc,IAAM,CACJJ,GAAA,EACpBV,EAAuB,EAAK,EACnB,SAAA,KAAK,UAAU,OAAO,WAAW,CAC5C,EAEMU,GAAsB,IAAM,CAChC,IAAIK,EAAqB,EAEzB,MAAMC,EAAkBnG,EAAO,OAAO,CAACoG,EAAe7G,KAChDA,EAAK,OAAS,MAAM,QAAQA,EAAK,KAAK,EACvCA,EAAK,MAAmB,QAAS/B,GAAkB,CAClD4I,EAAI,KAAK5I,CAAK,CAAA,CACf,EACQ+B,EAAK,OACV6G,EAAA,KAAK7G,EAAK,KAAe,EAExB6G,GACN,EAAE,EAELF,GAAsBC,EAAgB,OAElCrF,GAAcA,EAAW,OAAS,IACdoF,GAAA,GAGxBb,EAAkBa,CAAkB,CACtC,EAEMG,GAAe,IAAM,CACzB,MAAMC,EAAWX,EAAA,EAAe,IAAa1F,GACvCA,EAAM,KAAO,oBAAsBgF,GAAiB,CAAChE,EAChD,CAAE,GAAGhB,EAAO,MAAO,CAACgF,CAAa,CAAE,EAErChF,CACR,EACD4C,EAAWyD,CAAQ,EACV,SAAA,KAAK,UAAU,OAAO,WAAW,EAC1CnB,EAAuB,EAAK,CAC9B,EAEMoB,GAA+B,CAACC,EAAgBpD,IAAoB,OAClE,MAAAqD,EAA0BD,EAAO,SAAS,WAAW,EACrDE,EAASD,EAA0B,sBAAwBrD,EAC3D5F,EAAQuC,GAAc2G,EAAQ1G,CAAM,EACtC,IAAA2G,EAAiB,MAAM,QAAQnJ,GAAAA,YAAAA,EAAO,KAAK,EAAKA,GAAAA,YAAAA,EAAO,MAAqB,CAAC,EAEjF,GAAIiJ,GAA2BD,EAAO,SAAS,KAAK,EAAG,CACrD,MAAMI,GAAgBnH,EAAAO,EAAO,QAAcC,EAAM,KAAO,qBAAqB,IAAvD,YAAAR,EAA0D,MAG5EkH,EAAe,UAAWC,GAAA,YAAAA,EAAe,QAC3CD,EAAiB,CAAC,EAElBA,GAAiBC,GAAA,YAAAA,EAAe,IAAIrH,GAAQA,EAAK,MAAO,CAAC,CAC3D,KACK,CACL,MAAMmH,EAASD,EAA0BD,EAAO,QAAQ,aAAc,EAAE,EAAIA,EACxEG,EAAe,SAASD,CAAM,EAChCC,EAAiBA,EAAe,OAAepH,GAAAA,IAASmH,CAAM,EAE9DC,EAAe,KAAKD,CAAM,CAC5B,CAGFX,EAAyBW,EAAQC,EAAe,KAAK,GAAG,CAAC,CAC3D,EAEME,GAA2B,CAACL,EAAgBlK,IAC5CkK,EAAO,SAAS,WAAW,GACfxG,EAAO,KAAKC,GAASA,EAAM,KAAO,qBAAqB,EAU9DuG,EAAO,SAAS,KAAK,EACxB,iDACA,wDAEG,uBAILM,GAAuB,CAACC,EAAiBC,EAAgBC,IAAqB,CAClF,MAAMC,EAAezB,EAAc,KAAcxF,GAAAA,EAAM,KAAO8G,CAAO,EACrE,GAAIG,EAAc,CACZ,IAAAjE,EAAqB,MAAM,QAAQiE,EAAa,KAAK,EAAI,CAAC,GAAGA,EAAa,KAAK,EAAI,CAAC,EAEpFD,EACFhE,EAAS,KAAK+D,CAAM,EAEpB/D,EAAWA,EAAS,OAAa3F,GAAAA,IAAO0J,CAAM,EAGhDjB,EAAyBgB,EAAS9D,EAAS,KAAK,GAAG,CAAC,CAAA,CAExD,EAEMkE,GAAuB3J,GAAkB,CACzCqH,GACFA,EAAWrH,CAAK,CAEpB,EAGE,OAAAP,EAAA,cAAC,MAAA,CACC,UAAW,mBAAmBuG,EAAc,oBAAoBA,CAAW,GAAK,EAAE,IAAI0B,EAAsB,OAAS,EAAE,EAAA,kBAEtH,MAAI,CAAA,UAAU,iCACZjI,EAAA,cAAA,SAAA,CAAO,UAAU,gCAAgC,QAAS,IAAM2I,GAAmB,kBACjF,MAAI,CAAA,UAAU,qCAAqC,KAAK,cAAA,kBACtD,MAAI,CAAA,UAAU,aAAa,CAC9B,EACC3I,EAAA,cAAA,OAAA,KAAM0H,CAAwB,CACjC,EACCS,EAAiB,GAChBnI,EAAA,cAAC,QAAK,UAAU,6BAAA,EACb2H,EAA0B,QAAQ,MAAOQ,EAAe,SAAS,CAAC,CACrE,CAEJ,GAEExC,GAAoBD,IACpB1F,EAAA,cAACqG,GAAA,CACC,kBAAAC,EACA,mBAAoBuB,EACpB,WAAAhE,EACA,WAAAtE,EACA,cAAAsG,CAAA,CACF,EAGF7F,EAAA,cAAC,MAAA,CACC,UAAW,2BAA2BsI,EAAkB,kCAAoC,EAAE,EAAA,EAE9FtI,EAAA,cAAC,OAAI,UAAU,oDAAA,kBACZmK,GAAU,CAAA,KAAK,SAAS,MAAA5J,EAAc,cAAegI,EAAU,YAAW,EAAA,EACxEhB,GAAeA,EAAY,OAAS,GAClCvH,EAAA,cAAAoK,GAAA,CAAc,IAAK,OAAQ,MAAO,QAChCpK,EAAA,cAAAqK,GAAA,CAAiB,UAAU,uBAAwB,EAAA,SAAO,EAC1DrK,EAAA,cAAAsK,GAAA,KACE/C,EAAY,IAAI,CAAC,CAAE,MAAAgD,EAAO,MAAAhK,KACzBP,EAAA,cAAC,OAAI,IAAKO,EAAO,UAAU,sCACzB,EAAAP,EAAA,cAAC,QAAA,CACC,KAAK,QACL,GAAIO,EACJ,KAAK,OACL,MAAOA,EACP,QAASqD,IAAYrD,EACrB,SAAUoB,GAAKuI,GAAoBvI,EAAE,OAAO,KAAoB,CAAA,CAAA,EAElE3B,EAAA,cAAC,OAAK,CAAA,UAAU,WAAY,CAAA,EAC5BA,EAAA,cAAC,QAAA,CACC,UAAW,GAAG4D,IAAYrD,EAAQ,iBAAmB,EAAE,GACvD,QAASA,CAAA,EAERgK,CAAA,CAEL,CACD,CACH,CACF,EAGD/B,EAAc,IAAI,CAACxF,EAAO/C,IAAU,YACnC,KAAM,CAAE,GAAIkG,EAAS,MAAA7F,EAAO,MAAOkK,EAAY,KAAAnL,GAAS2D,EAClDyH,EAAoB,CAACD,GAAcA,EAAW,SAAW,EAE/D,GAAInL,IAAS,OAAQ,CACnB,MAAMoB,GAAU+B,EAAAgI,GAAA,YAAAA,EAAY,QAAalI,EAAK,KAAO,aAArC,YAAAE,EAAiD,MAC3D9B,GAAUmE,EAAA2F,GAAA,YAAAA,EAAY,QAAalI,EAAK,KAAO,aAArC,YAAAuC,EAAiD,MAG/D,OAAA7E,EAAA,cAACoK,IAAc,IAAKnK,EAAQ,EAAG,MAAO+C,EAAM,IACzChD,EAAA,cAAAqK,GAAA,CAAiB,UAAW,uBAC1B,EAAA,YACH,EACCrK,EAAA,cAAAsK,GAAA,CAAiB,UAAW,wCAC1B,EAAAE,GACCA,EAAW,IAAYlI,GAEnBtC,EAAA,cAACI,GAAA,CACC,IAAKkC,EAAK,GACV,GAAIA,EAAK,GACT,MAAOA,EAAK,MACZ,MAAOA,EAAK,MACZ,kBAAmBwG,EACnB,gBAAiB/F,EACjB,QAAAtC,EACA,QAAAC,CAAA,CACF,CAEH,CACL,CACF,CAAA,CAIA,GAAA2H,GAA4BlC,IAAY,cAC1C,uBACGiE,GAAc,CAAA,IAAKnK,EAAQ,EAAG,MAAOkG,CACpC,EAAAnG,EAAA,cAACqK,GAAiB,CAAA,UAAW,yBAA0B/J,CAAM,EAC5DN,EAAA,cAAAsK,GAAA,CAAiB,UAAW,kCAC3B,EAAAtK,EAAA,cAAC0K,GAAA,CACC,eAAe1F,GAAAlC,GAAcqD,EAASpD,CAAM,IAA7B,YAAAiC,GAAgC,MAC/C,SAAWzE,GAAkBuI,EAAyB3C,EAAS5F,CAAK,EACpE,gBAAiBuH,CAAA,CAAA,CAErB,CACF,EAIA,GAAA2C,GAAqBtE,IAAY,sBAC5B,OAAA,KAGT,GAAIT,EAAoB,CAClB,IAAAiF,EACJ,MAAM7G,EAAeb,GACnBF,EACAG,EAAsC,UACxC,EAUA,IARIY,GAAA,YAAAA,EAAe,MAAO,UACxB6G,EAAuBzH,EAAsC,iBAE7DyH,EAAuBzH,EAAsC,iBAM7DiD,IAAYwE,GACZxE,IAAYjD,EAAsC,WAE3C,OAAA,IACT,CAIA,OAAAlD,EAAA,cAACoK,IAAc,IAAKnK,EAAQ,EAAG,MAAOkG,CAAA,EACnCnG,EAAA,cAAAqK,GAAA,CAAiB,UAAW,uBAAA,EAA0B/J,CAAM,EAE7DN,EAAA,cAACsK,IAAiB,UAAW,kCAAA,EAC1BE,GACCA,EAAW,IAAI,CAAClI,EAAMrC,IAAU,CAC9B,IAAI2K,EAAqB,GAMzB,OALIjF,IACmBiF,EAAAhB,GAAyBtH,EAAK,EAAE,GAKrD6D,EAAQ,gBAAkB,cAC1BA,EAAQ,gBAAkB,mBAGxBnG,EAAA,cAAC,MAAA,CACC,IAAKsC,EAAK,GACV,UAAW,wCAAwCsI,CAAkB,EAAA,EAErE5K,EAAA,cAAC,QAAA,CACC,KAAK,QACL,GAAIsC,EAAK,GACT,KAAK,aACL,MAAOA,EAAK,MACZ,QAASyG,EAAUzG,EAAM6D,CAAO,EAChC,SAAU,IAAM2C,EAAyB3C,EAAS7D,EAAK,EAAE,CAAA,CAC3D,EACAtC,EAAA,cAAC,OAAK,CAAA,UAAU,WAAY,CAAA,EAC5BA,EAAA,cAAC,QAAA,CACC,UAAW,GAAG+I,EAAUzG,EAAM6D,CAAO,EAAI,iBAAmB,EAAE,GAC9D,QAAS7D,EAAK,KAAA,EAEbA,EAAK,KAAA,CAEV,kBAKD,MAAI,CAAA,UAAW,uBAAuBsI,CAAkB,GAAI,IAAK3K,CAChE,EAAAD,EAAA,cAAC6K,GAAA,CACC,GAAIvI,EAAK,GACT,gBAA4B0H,IAAA,CACtBrE,EAC2B2D,GAAAhH,EAAK,GAAI6D,CAAO,EAExB0D,GAAA1D,EAAS7D,EAAK,GAAI0H,EAAkB,CAE7D,EACA,aAAY1H,EAAK,MACjB,QAASyG,EAAUzG,EAAM6D,CAAO,CAAA,CAAA,EAGlCnG,EAAA,cAAC,MAAI,CAAA,UAAU,2BACZA,EAAA,cAAA,QAAA,CAAM,QAASsC,EAAK,GAAI,UAAU,iBAChC,EAAAA,EAAK,KACR,EACCjD,IAAS,UACR,CAACqG,GACD,CAAC2C,GACD,CAAC1C,GACE3F,EAAA,cAAA,OAAA,CAAK,UAAU,0BAAyB,IAAEsC,EAAK,MAAM,GAAC,CAE7D,CACF,CAEH,CAAA,CACL,CACF,CAAA,CAEH,CACH,CACF,CACF,EAEAtC,EAAA,cAAC,MAAI,CAAA,UAAU,wBACb,EAAAA,EAAA,cAAC,SAAA,CACC,UAAU,mDACV,QAAS,IAAMoJ,GAAa,CAAA,EAE3B3B,CAEH,EAAAzH,EAAA,cAAC,SAAA,CACC,UAAU,iDACV,QAAS,IAAMgJ,GAAY,CAAA,EAE1BxB,EAAuB,QACtB,MACAjI,EAAW,MAAQA,EAAW,MAAM,WAAa,EAAA,CAGvD,CAAA,CACF,CAEJ,EC3dauL,GAAkB,CAAC,CAAE,KAAAxI,KAAqB,CACrD,GAAI,CAACA,EAAM,OAAStC,EAAA,cAAAA,EAAA,SAAA,IAAA,EAEd,KAAA,CACJ,KAAMM,EACN,oBAAqByK,EACrB,KAAMtK,EACN,SAAUuK,EACV,iBAAkBC,EAClB,IAAKC,CAAA,EACH5I,EAGF,OAAAtC,EAAA,cAAC,KAAE,KAAMkL,GAAY,GAAI,UAAU,yDACjC,EAAAlL,EAAA,cAAC,OAAK,CAAA,UAAU,6BAA8B,CAAA,EAC9CA,EAAA,cAAC,MAAI,CAAA,UAAU,uBACZ,EAAAiL,IAASA,GAAA,YAAAA,EAAO,MACfjL,EAAA,cAAC,MAAI,CAAA,UAAU,SACb,EAAAA,EAAA,cAAC,MAAA,CACC,UAAU,sBACV,IAAK,GAAGiL,GAAA,YAAAA,EAAO,GAAG,yBAClB,OAAQ,GAAGA,GAAA,YAAAA,EAAO,GAAG;AAAA,gBACnBA,GAAA,YAAAA,EAAO,GAAG;AAAA,gBACVA,GAAA,YAAAA,EAAO,GAAG;AAAA,gBACVA,GAAA,YAAAA,EAAO,GAAG,6BACZ,IAAK3K,GAAgB,GACrB,QAAQ,OACR,MAAM,MACN,OAAO,KAAA,CAEX,CAAA,EAEFN,EAAA,cAAC,OAAI,UAAU,oBAAA,kBACZ,KAAG,CAAA,UAAU,gCACX,EAAAM,kBACA,MAAI,CAAA,UAAU,kBACZN,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAuB,CAAA,EACtCA,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAuB,CAAA,CACzC,CACF,EACAA,EAAA,cAAC,KAAE,UAAU,+BAAA,EAAiC+K,CAAY,kBACzD,MAAI,CAAA,UAAU,sBACZtK,GACCT,EAAA,cAAC,KAAE,UAAU,2BAA2B,IAAKS,CAAA,EAC1C0K,EAAwB1K,CAAO,EAAE,IAAEA,EAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,IAAE,IACzEA,EAAQ,MAAM,GAAG,EAAE,CAAC,CACvB,EAGDuK,mBACE,IAAE,CAAA,UAAU,8BAA8B,IAAKA,GAC7CA,CACH,CAEJ,CACF,CACF,kBACC,OAAK,CAAA,UAAU,6BAA8B,CAAA,CAChD,CAEJ,EClEaI,GAAwB9I,GAAwB,OAC3D,GAAI,CAACA,EAAM,OAAStC,EAAA,cAAAA,EAAA,SAAA,IAAA,EAEpB,KAAM,CAAE,IAAAqL,EAAK,gBAAAC,EAAiB,YAAAC,EAAa,iBAAAC,CAAqB,EAAAlJ,EAEhE,IAAImJ,EAAyB,CAAC,EAC9B,OAAID,GAAA,MAAAA,EAAkB,mBAElBC,IAAAjJ,EAAAgJ,GAAA,YAAAA,EAAkB,aAAlB,YAAAhJ,EAA8B,IAAYkJ,IACjCA,GAAA,YAAAA,EAAM,QAAS,MAClB,CAAC,GAIR1L,EAAA,cAAA,IAAA,CAAE,KAAMqL,GAAY,GAAI,UAAU,mDACjC,EAAArL,EAAA,cAAC,QAAK,UAAU,6BAAA,CAA8B,EAC9CA,EAAA,cAAC,OAAI,UAAU,uBAAA,EACZA,EAAA,cAAA,MAAA,CAAI,UAAU,oBAAA,EACZA,EAAA,cAAA,KAAA,CAAG,UAAU,gCACZ,EAAAA,EAAA,cAAC,OAAK,CAAA,UAAU,kCACb,IACA,GAAGsL,CAAe,KAAKC,CAAW,EACrC,EACCvL,EAAA,cAAA,MAAA,CAAI,UAAU,kBACZA,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAuB,CAAA,EACtCA,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAuB,CAAA,CACzC,CACF,kBACC,MAAI,CAAA,UAAU,sBACbA,EAAA,cAAC,IAAE,CAAA,UAAU,4BAA4ByL,EAAa,KAAK,IAAI,CAAE,CACnE,CACF,CACF,EACAzL,EAAA,cAAC,OAAK,CAAA,UAAU,8BAA8B,CAChD,CAEJ,EC/Ba2L,GAAwB,CAAC,CAAE,KAAArJ,EAAM,YAAAsJ,KAAqC,CACjF,GAAI,CAACtJ,EAAM,OAAStC,EAAA,cAAAA,EAAA,SAAA,IAAA,EAEpB,KAAM,CAAE,IAAAqL,EAAK,gBAAAQ,EAAiB,mBAAAC,EAAoB,YAAAC,CAAgB,EAAAzJ,EAElE,OACGtC,EAAA,cAAA,IAAA,CAAE,KAAMqL,GAAY,GAAI,UAAU,oDACjC,EAAArL,EAAA,cAAC,OAAI,UAAU,uBAAA,EACZA,EAAA,cAAA,MAAA,CAAI,UAAU,SACb,EAAAA,EAAA,cAAC,MAAA,CACC,UAAU,sBACV,IAAK,GAAG6L,GAAmBA,IAAoB,GAAKA,EAAkBD,CAAW,wBACjF,OAAQ,GAAGC,GAAmBA,IAAoB,GAAKA,EAAkBD,CAAW,UAAUC,GAAmBA,IAAoB,GAAKA,EAAkBD,CAAW;AAAA,gBACnKC,GAAmBA,IAAoB,GAAKA,EAAkBD,CAAW;AAAA,gBACzEC,GAAmBA,IAAoB,GAAKA,EAAkBD,CAAW;AAAA,gBACzEC,GAAmBA,IAAoB,GAAKA,EAAkBD,CAAW,8BAC7E,IAAI,mBACJ,QAAQ,OACR,MAAM,MACN,OAAO,KAAA,CAEX,CAAA,EACC5L,EAAA,cAAA,MAAA,CAAI,UAAU,oBACb,EAAAA,EAAA,cAAC,KAAG,CAAA,UAAU,gCACZ,EAAAA,EAAA,cAAC,QAAK,UAAU,gCAAA,EAAiC,IAAE+L,CAAY,EAC/D/L,EAAA,cAAC,OAAI,UAAU,gBAAA,EACZA,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAA,CAAuB,EACtCA,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAuB,CAAA,CACzC,CACF,EACAA,EAAA,cAAC,MAAI,CAAA,UAAU,oBACb,EAAAA,EAAA,cAAC,KAAE,UAAU,6BAAA,EAA+B,IAAI8L,GAAA,YAAAA,EAAoB,QAAQ,EAAE,EAAG,CACnF,CACF,CACF,CACF,CAEJ,ECtCaE,GAAqBhF,GAA2B,WAC3D,GAAI,CAACA,EAAO,OAAShH,EAAA,cAAAA,EAAA,SAAA,IAAA,EAEf,KAAA,CACJ,WAAYM,EACZ,mBAAA2L,EACA,mBAAAC,EACA,eAAAC,EACA,IAAKjB,EACL,iBAAAkB,EACA,aAAAC,CAAA,EACErF,EAGE,CAACsF,EAAUC,EAAUlN,CAAI,EAA+B,EAC5DmD,EAAAyJ,EAAoB,aAApB,YAAAzJ,EAAiC,IACjCqC,EAAAqH,GAAA,YAAAA,EAAoB,aAApB,YAAArH,EAAiC,IACjCG,EAAAmH,GAAA,YAAAA,EAAgB,aAAhB,YAAAnH,EAA6B,EAC/B,EAEA,uCAEKhF,EAAA,cAAA,IAAA,CAAE,KAAMkL,GAAY,GAAI,UAAU,mBACjC,EAAAlL,EAAA,cAAC,QAAK,UAAU,6BAA8B,CAAA,EAC9CA,EAAA,cAAC,OAAI,UAAU,uBAAA,EACZA,EAAA,cAAA,MAAA,CAAI,UAAU,oBACb,EAAAA,EAAA,cAAC,KAAG,CAAA,UAAU,kCACXA,EAAA,cAAA,OAAA,CAAK,UAAU,gCAAA,EAAiC,IAAEM,CAAM,kBACxD,MAAI,CAAA,UAAU,kBACZN,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAuB,CAAA,EACtCA,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAA,CAAuB,CACzC,CACF,EACCA,EAAA,cAAA,MAAA,CAAI,UAAU,oBACZ,EAAAsM,GAAYA,EAAS,OACpBtM,EAAA,cAAC,KAAE,UAAU,2BAA2B,IAAKsM,EAAS,IACnDA,EAAS,KACZ,EAGDjN,GAAQA,EAAK,OACZW,EAAA,cAAC,IAAE,CAAA,UAAU,2BAA2B,IAAKX,EAAK,IAC/CA,EAAK,KACR,EAGDkN,GAAYA,EAAS,OACpBvM,EAAA,cAAC,KAAE,UAAU,2BAA2B,IAAKuM,EAAS,IACnDA,EAAS,KACZ,CAEJ,CACF,EACCvM,EAAA,cAAA,MAAA,CAAI,UAAU,oBAAA,EACZmL,EAAwBiB,CAAgB,IAAMjB,EAAwBkB,CAAY,GACnFA,IAAiB,KACdrM,EAAA,cAAA,IAAA,CAAE,UAAU,4BACVmL,EAAwBiB,CAAgB,CAC3C,EAECpM,EAAA,cAAA,IAAA,CAAE,UAAU,4BACVmL,EAAwBiB,CAAgB,EAAE,KAAG,IAC7CjB,EAAwBkB,CAAY,CACvC,EAEDA,IAAiB,MAClBG,EAAiBJ,CAAgB,IAAMI,EAAiBH,CAAY,EACjErM,EAAA,cAAA,IAAA,CAAE,UAAU,yBAA2B,EAAAwM,EAAiBJ,CAAgB,CAAE,EAE1EpM,EAAA,cAAA,IAAA,CAAE,UAAU,yBACV,EAAAwM,EAAiBJ,CAAgB,EAAE,MAAII,EAAiBH,CAAY,CACvE,CAEJ,CACF,EACArM,EAAA,cAAC,QAAK,UAAU,6BAAA,CAA8B,CAChD,CACF,CAEJ,EChFayM,GAA0BnK,GAAuC,CAC5E,GAAI,CAACA,EAAM,OAAStC,EAAA,cAAAA,EAAA,SAAA,IAAA,EAEd,KAAA,CACJ,sBAAuB0M,EACvB,yBAA0BJ,EAC1B,qBAAsB/J,EACtB,sBAAuBoK,EACvB,IAAKzB,EACL,IAAK7K,CAAA,EACHiC,EAGEsK,EAAW,CAAC,CAAE,SAAAC,EAAU,KAAAC,CAAK,IAChC9M,EAAA,cAAA,MAAA,CAAI,UAAW,sDAAsD6M,CAAQ,EAAA,EAC3EA,GAAYA,IAAa,SACxB7M,EAAA,cAAC,MAAI,CAAA,UAAW,6BAA8B,KAAK,cACjD,EAAAA,EAAA,cAAC,MAAI,CAAA,UAAW,IAAI6M,CAAQ,EAAI,CAAA,CAClC,EAEDC,CACH,EAIA,OAAA9M,EAAA,cAAAA,EAAA,SAAA,KACGA,EAAA,cAAA,IAAA,CAAE,KAAMkL,GAAY,GAAI,UAAU,2CAA2C,IAAK7K,CACjF,EAAAL,EAAA,cAAC,QAAK,UAAU,6BAA8B,CAAA,EAC9CA,EAAA,cAAC,MAAI,CAAA,UAAU,yBACZA,EAAA,cAAA,MAAA,CAAI,UAAU,oBAAA,EACZA,EAAA,cAAA,KAAA,CAAG,UAAU,kCACZA,EAAA,cAAC,OAAK,CAAA,UAAU,gCAAiC,EAAA,IAAEuC,CAAK,EACxDvC,EAAA,cAAC,MAAI,CAAA,UAAU,gBACb,EAAAA,EAAA,cAAC,QAAK,UAAU,sBAAA,CAAuB,EACvCA,EAAA,cAAC,OAAK,CAAA,UAAU,sBAAuB,CAAA,CACzC,CACF,EACAA,EAAA,cAAC,MAAI,CAAA,UAAU,sBACZ0M,EACC1M,EAAA,cAAC4M,EAAS,CAAA,SAAS,OAAO,KAAMF,EAAO,EAEvC1M,EAAA,cAAC4M,EAAS,CAAA,SAAS,QAAQ,KAAM,GAAI,EAEtCD,EACE3M,EAAA,cAAA4M,EAAA,CAAS,SAAS,QAAQ,KAAMD,EAAO,EAEvC3M,EAAA,cAAA4M,EAAA,CAAS,SAAS,QAAQ,KAAM,GAAI,EAEtCN,EACCtM,EAAA,cAAC4M,EAAS,CAAA,SAAS,WAAW,KAAMN,CAAU,CAAA,EAE9CtM,EAAA,cAAC4M,EAAS,CAAA,SAAS,QAAQ,KAAM,GAAI,CAEzC,CACF,CACF,kBACC,OAAK,CAAA,UAAU,6BAA8B,CAAA,CAChD,CACF,CAEJ,ECzDMA,GAAWG,EAAA,KAAK,CAAC,CAAE,SAAAF,EAAU,KAAAC,CAAA,IACjC9M,EAAA,cAAC,MAAI,CAAA,UAAW,sDAAsD6M,CAAQ,EAC3E,EAAAA,GAAYA,IAAa,SACvB7M,EAAA,cAAA,MAAA,CAAI,UAAW,8BAAA,EACbA,EAAA,cAAA,MAAA,CAAI,UAAW,qBAAsB,KAAK,cAAA,EACxCA,EAAA,cAAA,MAAA,CAAI,UAAW,IAAI6M,CAAQ,EAAA,CAAI,CAClC,CACF,EAED,MAAM,QAAQC,CAAI,EACjB9M,EAAA,cAAC,MAAI,CAAA,UAAW,8CACb,EAAA8M,EAAK,IAAI,CAACxK,EAAMrC,IACdD,EAAA,cAAA,OAAA,CAAK,IAAK,GAAGsC,CAAI,IAAIrC,CAAK,EAAA,EAAKqC,CAAK,CACtC,CACH,EAEAwK,CAEJ,CACD,EACDF,GAAS,YAAc,WAEhB,MAAMI,GAAsBD,EAAA,KAAK,CAAC,CAAE,KAAAzK,KAAqC,CAC9E,GAAI,CAACA,EAAa,OAAA,KAEZ,KAAA,CACJ,IAAA+I,EACA,UAAA4B,EACA,SAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,oBAAAC,EACA,UAAAC,CAAA,EACEjL,EAGE,CAAE,gBAAAkL,EAAiB,YAAAC,CAAY,EAAIvJ,UAAQ,IAAM,SACrD,MAAMwJ,EAAaJ,GAAA,MAAAA,EAAqB,mBACpC9K,EAAA8K,GAAA,YAAAA,EAAqB,aAArB,YAAA9K,EAAiC,IAAYkJ,IAAAA,GAAA,YAAAA,EAAM,QAAS,MAAO,GACnE,CAAC,EAECiC,EAAQP,GAAA,MAAAA,EAAiB,mBAC3BvI,EAAAuI,GAAA,YAAAA,EAAiB,aAAjB,YAAAvI,EAA6B,IAAY6G,IAAAA,GAAA,YAAAA,EAAM,QAAS,MAAO,GAC/D,CAAC,EAEL,MAAO,CAAE,gBAAiBgC,EAAY,YAAaC,CAAM,CAAA,EACxD,CAACL,EAAqBF,CAAe,CAAC,EAGnCQ,EAAa1J,EAAA,QACjB,IACGlE,EAAA,cAAA,MAAA,CAAI,UAAU,oDAAA,kBACZ,IACE,KAAAmN,EACAA,GAAeM,EAAY,OAAS,mBAClC,OAAK,CAAA,UAAW,yBAA2B,EAAA,GAAC,EAE9CA,EAAY,OAAS,GAAKA,EAAY,KAAK,IAAI,CAClD,CACF,EAEF,CAACN,EAAaM,CAAW,CAC3B,EAGMI,EAAc3J,EAAA,QAClB,IACGlE,EAAA,cAAA,MAAA,CAAI,UAAU,oBAAA,EACZqN,EACErN,EAAA,cAAA4M,GAAA,CAAS,SAAS,OAAO,KAAMS,EAAO,EAEtCrN,EAAA,cAAA4M,GAAA,CAAS,SAAS,QAAQ,KAAM,GAAI,EAEtCY,EAAgB,OAAS,EACvBxN,EAAA,cAAA4M,GAAA,CAAS,SAAS,WAAW,KAAMY,EAAiB,kBAEpDZ,GAAS,CAAA,SAAS,QAAQ,KAAM,GAAI,CAEzC,EAEF,CAACS,EAAOG,CAAe,CACzB,EAGMM,EAAe5J,EAAAA,QAAQ,IACtBqJ,GAAA,MAAAA,EAAW,IAEdvN,EAAA,cAAC,MAAI,CAAA,UAAU,SACb,EAAAA,EAAA,cAAC,MAAA,CACC,UAAU,sBACV,IAAK,GAAGuN,EAAU,GAAG,yBACrB,OAAQ,GAAGA,EAAU,GAAG;AAAA,cACpBA,EAAU,GAAG;AAAA,cACbA,EAAU,GAAG;AAAA,cACbA,EAAU,GAAG,6BACjB,IAAI,mBACJ,QAAQ,OACR,MAAM,MACN,OAAO,KAAA,CAAA,CAEX,EAf0B,KAiB3B,CAACA,GAAA,YAAAA,EAAW,GAAG,CAAC,EAEnB,OACGvN,EAAA,cAAA,IAAA,CAAE,KAAMqL,GAAO,GAAI,UAAU,kDAC5B,EAAArL,EAAA,cAAC,OAAK,CAAA,UAAU,4BAA6B,CAAA,kBAC5C,MAAI,CAAA,UAAU,yBACbA,EAAA,cAAC,MAAI,CAAA,UAAU,oBACb,EAAAA,EAAA,cAAC,MAAI,CAAA,UAAW,qCACd,EAAAA,EAAA,cAAC,KAAG,CAAA,UAAU,gCACZ,EAAAA,EAAA,cAAC,QAAK,UAAU,gCAAA,EAAkC,GAAGiN,CAAS,IAAIC,CAAQ,EAAG,EAC5ElN,EAAA,cAAA,MAAA,CAAI,UAAU,gBAAA,EACZA,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAA,CAAuB,EACtCA,EAAA,cAAA,OAAA,CAAK,UAAU,sBAAA,CAAuB,CACzC,CACF,EACC4N,CACH,EACCC,EACAC,CACH,CACF,EACA9N,EAAA,cAAC,OAAK,CAAA,UAAU,6BAA6B,CAC/C,CAEJ,CAAC,EAEDgN,GAAoB,YAAc,sBCpIlC,MAAMe,GAAkB,CAAC,CAAE,QAAAC,KAAwB,CACjD5M,EAAAA,UAAU,IAAM,CAEP,OAAA,iBAAiB,SAAU,IAAM,CAEtC,MAAM6M,EAAiB,OAAO,QAExBC,EAAe,SAAS,KAAK,aAAe,OAAO,YAEnDC,EAAoBF,EAAiBC,EAAgB,IAGrDE,EAAM,SAAS,cAAc,wBAAwB,EACvDA,IACEA,EAAA,MAAM,IAAMD,EAAmB,IACrC,CACD,CACH,EAAG,EAAE,EAGC,MAAAE,EAAYL,EAAQ,OAAS,GAAK,KAGtC,OAAAhO,EAAA,cAAC,MAAA,CACC,KAAK,eACL,UAAU,8CACV,cAAY,OACZ,GAAG,kBAAA,EAEHA,EAAA,cAAC,MAAA,CACC,UAAU,oDACV,MAAO,CAAE,UAAWqO,CAAU,CAAA,CAC/B,EACDrO,EAAA,cAAC,MAAI,CAAA,UAAU,mDAAoD,CAAA,CACrE,CAEJ,ECTasO,GAA6B,CAAC,CACzC,KAAAhM,EACA,gBAAAiM,EACA,iBAAAC,EACA,iBAAAC,EACA,kBAAAC,EACA,qBAAAC,EACA,YAAAC,CACF,IAAgB,WACd,GAAI,CAACtM,EAAM,OAAStC,EAAA,cAAAA,EAAA,SAAA,IAAA,EACd,MAAA6O,EAAa1N,SAAO,IAAI,EACxB,CAAC6M,EAASc,CAAU,EAAI9O,EAAM,SAAS,CAAA,CAAa,EACpD+O,EAAS5N,SAA2B,IAAI,EAExC,CACJ,IAAKd,EACL,IAAK6K,EACL,oBAAqB3I,EACrB,iBAAkByM,EAClB,cAAe1C,EACf,aAAc2C,EACd,aAAcC,EACd,cAAeC,EACf,kBAAmBC,EACnB,gBAAiBC,EACjB,yBAA0BtE,CAAA,EACxBzI,EAEEgN,GAAgBf,GAAA,YAAAA,EAAiB,mBAAkB1J,GAAArC,EAAAwM,GAAA,YAAAA,EAAa,aAAb,YAAAxM,EAA0B,KAA1B,YAAAqC,EAA8B,IAEjF0K,EAAY,IACZD,EACE,CAACL,GAAgB,CAACA,EAAa,MAAQ,CAACA,EAAa,KAChD,KAIPjP,EAAA,cAAC,IAAA,CACC,KAAMiP,EAAa,KACnB,OAAQA,EAAa,QAAU,SAC/B,UAAU,6BAAA,EAETA,EAAa,KACbjP,EAAA,cAAA,OAAA,CAAK,UAAU,iBACbA,EAAA,cAAA,OAAA,CAAK,UAAU,qBAAA,CAAsB,EACtCA,EAAA,cAAC,OAAK,CAAA,UAAU,sBAAsB,CACxC,CACF,EAKFA,EAAA,cAAC,IAAA,CACC,KAAMiP,GAAA,MAAAA,EAAc,KAAOA,EAAa,KAAOV,GAAA,YAAAA,EAAiB,kBAChE,QAAQU,GAAA,YAAAA,EAAc,SAAU,SAChC,UAAU,6BAAA,EAETA,GAAA,MAAAA,EAAc,KAAOA,GAAA,YAAAA,EAAc,KAAOV,GAAA,YAAAA,EAAiB,mBAC3DvO,EAAA,cAAA,OAAA,CAAK,UAAU,iBACbA,EAAA,cAAA,OAAA,CAAK,UAAU,qBAAA,CAAsB,EACtCA,EAAA,cAAC,OAAK,CAAA,UAAU,sBAAsB,CACxC,CACF,EAIJoB,EAAAA,UAAU,IAAM,CACd,MAAMoO,EAAY,UAAY,CAE9B,EACMC,EAAUV,EAAO,QAEvB,GAAKU,EAEG,OAAAA,EAAA,iBAAiB,QAASD,EAAW,EAAK,EAE3C,UAAmB,CAChBC,EAAA,oBAAoB,QAASD,EAAW,EAAK,CACvD,CAAA,CACD,EAOD,MAAME,EAAiB,CAAC,CAAE,MAAApP,EAAO,WAAAqP,EAAY,OAAAC,KACvC,CAACD,GAAcA,EAAW,SAAW,EAAU,KAG/CC,kBAEC,KAAG,CAAA,UAAU,mCACX5P,EAAA,cAAA,KAAA,CAAG,UAAU,oCAAsC,EAAAM,CAAM,EAC1DN,EAAA,cAAC,MAAG,UAAU,iCAAA,EACX2P,EAAW,IAAI,CAACE,EAAU5P,IAAU,CACnC,GAAI,CAAC4P,EAAiB,OAAA,KAEtB,KAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,KAAAC,EAAS,EAAAH,EAE/B,OACG7P,EAAA,cAAA,KAAA,CAAG,IAAKC,CAAA,EACND,EAAA,cAAA,IAAA,CAAE,KAAM8P,GAAQ,IAAK,OAAQC,GAAU,QAAA,EACrCC,EACH,CACF,CAEH,CAAA,CACH,CACF,EAKFhQ,EAAA,cAAC,KAAG,CAAA,UAAU,iCACZ,EAAAA,EAAA,cAAC,KAAG,CAAA,UAAU,oCAAsC,EAAAM,CAAM,EAC1DN,EAAA,cAAC,KAAG,CAAA,UAAU,iCACX,EAAA2P,EAAW,IAAI,CAACE,EAAU5P,IACxBD,EAAA,cAAA,KAAA,CAAG,IAAKC,CAAA,EAAQ4P,GAAA,YAAAA,EAAU,KAAM,CAClC,CACH,CACF,EAIEI,EAAgB,IAAM,CACrBpB,EAAW,SAGhB,WAAW,IAAM,CACX,GAAA,CAEIb,MAAAA,EADUa,EAAW,QACH,sBAAsB,EAC9CC,EAAWd,CAAO,QACX9L,EAAO,CACN,QAAA,MAAM,mCAAoCA,CAAK,CAAA,GAExD,GAAG,CACR,EAEA,OACGlC,EAAA,cAAAoK,GAAA,CAAc,MAAO/J,EAAK,UAAU,2BACnCL,EAAA,cAACqK,GAAA,CACC,UAAU,6BACV,QAAc1I,GAAA,CAKZ,GAJAA,EAAE,gBAAgB,EAIdoN,EAAO,UAAY,MAAQpN,EAAE,SAAWoN,EAAO,QAAS,CAE1DpN,EAAE,eAAe,EACV,OAAA,SAAS,KAAOuJ,GAAO,IAC9B,MAAA,CAGY+E,EAAA,CAAA,CAChB,EAEAjQ,EAAA,cAAC,MAAI,CAAA,UAAU,oCACb,EAAAA,EAAA,cAAC,KAAG,CAAA,UAAU,0BAA0B,IAAK+O,CAC1C,EAAAxM,CACH,EAKAvC,EAAA,cAAC,OAAI,UAAU,eAAA,EACZA,EAAA,cAAA,OAAA,CAAK,UAAU,qBAAA,CAAsB,EACtCA,EAAA,cAAC,OAAK,CAAA,UAAU,qBAAsB,CAAA,CACxC,CACF,kBACC,OAAK,CAAA,UAAU,8BACbgF,EAAAgK,GAAA,YAAAA,EAAa,aAAb,YAAAhK,EAAyB,IAAgB6K,GACjCA,GAAA,YAAAA,EAAU,OAChB,KAAK,KACV,CACF,kBACCvF,GAAiB,CAAA,UAAU,6BAA6B,IAAKuE,CAAA,kBAC3D,MAAI,CAAA,UAAU,yCACZ7O,EAAA,cAAA,MAAA,CAAI,UAAU,OAAO,wBAAyB,CAAE,OAAQ+K,CAAgB,CAAA,CAAA,EAExE/K,EAAA,cAAA,MAAA,CAAI,UAAU,mBACZkL,mBACE,IAAE,CAAA,UAAU,6BAA6B,KAAMA,CAAA,GAC7CqD,GAAA,YAAAA,EAAiB,YAAa,GAC/BvO,EAAA,cAAC,QAAK,UAAU,eAAA,kBACb,OAAK,CAAA,UAAU,qBAAsB,CAAA,EACtCA,EAAA,cAAC,OAAK,CAAA,UAAU,qBAAsB,CAAA,CACxC,CACF,EAEDuP,EACH,CAAA,CACF,kBAECxB,GAAgB,CAAA,QAAAC,CAAkB,CAAA,EAElChO,EAAA,cAAA,MAAA,CAAI,UAAU,4CACb,EAAAA,EAAA,cAAC,MAAG,UAAU,2BAAA,kBACX0P,EAAe,CAAA,MAAOjB,EAAkB,WAAYO,GAAA,YAAAA,EAAa,UAAY,CAAA,EAC7EhP,EAAA,cAAA0P,EAAA,CAAe,MAAOhB,EAAmB,WAAYQ,GAAA,YAAAA,EAAS,UAAY,CAAA,EAC1ElP,EAAA,cAAA0P,EAAA,CAAe,MAAOf,EAAsB,WAAYU,GAAA,YAAAA,EAAY,UAAY,CAAA,EAChFrP,EAAA,cAAA0P,EAAA,CAAe,MAAOlB,EAAkB,WAAYlC,GAAA,YAAAA,EAAU,UAAA,CAAY,EAC3EtM,EAAA,cAAC0P,EAAA,CACC,MAAOd,EACP,WAAY,CAACQ,EAAmBD,CAAa,EAC7C,OAAQ,EAAA,CAEZ,CAAA,CACF,CACF,CACF,CAEJ,ECjPae,GAAuB5N,GAA6B,WAC/D,GAAI,CAACA,EAAM,OAAStC,EAAA,cAAAA,EAAA,SAAA,IAAA,EAEd,KAAA,CACJ,aAAcM,EACd,gCAAA6P,EACA,kBAAAC,EACA,sBAAAC,EACA,oBAAqBtF,EACrB,IAAKG,CAAA,EACH5I,EAGE,CAACgO,EAAQ/D,EAAUlN,CAAI,EAA+B,EAC1DmD,EAAA2N,EAAiC,aAAjC,YAAA3N,EAA8C,IAC9CqC,EAAAuL,GAAA,YAAAA,EAAmB,aAAnB,YAAAvL,EAAgC,IAChCG,EAAAqL,GAAA,YAAAA,EAAuB,aAAvB,YAAArL,EAAoC,EACtC,EAEA,uCAEKhF,EAAA,cAAA,IAAA,CAAE,KAAMkL,GAAY,GAAI,UAAU,2CAAA,kBAChC,OAAK,CAAA,UAAU,8BAA8B,EAC9ClL,EAAA,cAAC,OAAI,UAAU,uBAAA,kBACZ,MAAI,CAAA,UAAU,sBACZA,EAAA,cAAA,KAAA,CAAG,UAAU,gCACZ,EAAAA,EAAA,cAAC,QAAK,UAAU,gCAAA,EAAiC,IAAEM,CAAM,CAK3D,EACCN,EAAA,cAAA,IAAA,CAAE,UAAU,+BAAiC,EAAA+K,CAAY,EACzD/K,EAAA,cAAA,MAAA,CAAI,UAAU,oBACZ,EAAAsQ,GAAUA,EAAO,OAChBtQ,EAAA,cAAC,KAAE,UAAU,2BAA2B,IAAKsQ,EAAO,EAAA,EACjDA,EAAO,KACV,EAGDjR,GAAQA,EAAK,uBACX,IAAE,CAAA,UAAU,2BAA2B,IAAKA,EAAK,IAC/CA,EAAK,KACR,EAGDkN,GAAYA,EAAS,OACnBvM,EAAA,cAAA,IAAA,CAAE,UAAU,2BAA2B,IAAKuM,EAAS,EACnD,EAAAA,EAAS,KACZ,CAEJ,CACF,CACF,EACAvM,EAAA,cAAC,QAAK,UAAU,6BAAA,CAA8B,CAChD,CACF,CAEJ,EChDauQ,GAAa,CAAC,CAAE,KAAAjO,KAA4B,CACvD,GAAI,CAACA,EAAM,OAAStC,EAAA,cAAAA,EAAA,SAAA,IAAA,EAEd,KAAA,CACJ,KAAMM,EAGN,wBAAyByK,EACzB,aAAcE,EACd,IAAKC,CAAA,EACH5I,EAUF,OAAAtC,EAAA,cAAC,KAAE,KAAMkL,GAAY,GAAI,UAAU,0CAChClL,EAAA,cAAA,OAAA,CAAK,UAAU,6BAA8B,CAAA,kBAC7C,MAAI,CAAA,UAAU,yBACZiL,GACCjL,EAAA,cAAC,MAAI,CAAA,UAAU,SACb,EAAAA,EAAA,cAAC,MAAA,CACC,UAAU,sBACV,IAAKiL,EACL,IAAI,mBACJ,QAAQ,OACR,MAAM,MACN,OAAO,KAAA,CAAA,CAEX,EAGFjL,EAAA,cAAC,MAAI,CAAA,UAAU,sBACZA,EAAA,cAAA,KAAA,CAAG,UAAU,gCAAA,EAAkCM,CAAM,EAErDyK,GAAgB/K,EAAA,cAAA,IAAA,CAAE,UAAU,+BAAA,EAAiC+K,CAAY,CAC5E,CACF,EACC/K,EAAA,cAAA,OAAA,CAAK,UAAU,6BAA8B,CAAA,CAChD,CAEJ,ECVawQ,GAAU,CAAC,CACtB,GAAAnQ,EACA,eAAAoQ,EACA,cAAAC,EACA,OAAAC,EACA,QAAAC,EACA,WAAA/M,EACA,YAAA+H,EACA,uBAAAtM,EACA,WAAAC,EACA,eAAAsR,EACA,gBAAAtC,EACA,cAAA1I,EACA,iBAAA2I,EACA,iBAAAC,EACA,kBAAAC,EACA,qBAAAC,EACA,YAAAC,EACA,YAAArI,CACF,IAAgB,OACd,MAAMuK,GAAeF,GAAA,YAAAA,EAAS,UAAW,GAAKD,IAAW,UACnDI,EAAc/Q,EAAM,UAA0B,EAC9CgR,EAAyBH,IAAmB3R,GAAe,SAC3DyG,EAAmBY,IAAgBpG,EAAa,uBAChDqF,EAAYmL,IAAW,UACvB,CAACM,EAAaC,CAAc,EAAIlR,EAAM,SAAS,EAAK,EAE1DoB,EAAAA,UAAU,IAAM,OACd,GAAI,CAAC4P,EACH,OAAO,SAAS,CAAE,IAAK,EAAG,SAAU,SAAU,UAG1CC,EAAa,CACfC,EAAe,EAAK,GACpB1O,EAAAuO,EAAY,UAAZ,MAAAvO,EAAqB,eAAe,CAAE,SAAU,WAChD,MAAA,CAEJ,EACC,CAACoO,CAAO,CAAC,EAEN,MAAAxR,EAAgBW,GAA0B,CAC9CmR,EAAe,EAAI,EACJrL,EAAA,CACb,GAAGtG,EACH,MAAQQ,EAAkB,GAAK,CAAC2Q,EAChC,MAAO,CAACA,CAAA,CACT,CACH,EAEMS,GAAe3O,EAAA,SAAS,cAAc,MAAM,IAA7B,YAAAA,EAAgC,QAAQ,iBAEvD4O,EACJN,GAAgBjN,EACZ4M,EAAe,QAAQ,MAAO5M,CAAU,EACxC4M,EAAe,QAAQ,WAAY,EAAE,EAE3C,OAAI9K,EAEA3F,EAAA,cAAC,MAAA,CACC,UAAW,oBAAoB8Q,GAAgBH,IAAW,QAAU,+BAAiC,EAAE,EAAA,EAEtGpC,GAAmBA,EAAgB,qBAClCvO,EAAA,cAAC,MAAG,UAAU,0DAAA,EACXuO,EAAgB,mBACnB,EAEDoC,IAAW,WAAa3Q,EAAA,cAACqR,GAAO,IAAA,EAChCV,IAAW,SAAW3Q,EAAA,cAAC,IAAE,CAAA,UAAU,kBAAkBmR,CAAa,EAClEL,GAAgBH,IAAW,SACzB3Q,EAAA,cAAA,MAAA,CAAI,UAAU,MAAM,wBAAyB,CAAE,OAAQoR,CAA0B,CAAA,CAAA,EAGpFpR,EAAA,cAAC,OAAI,UAAU,4BAAA,kBACZmK,GAAU,CAAA,UAAU,oBAAoB,KAAK,SAAS,YAAW,EAC/D,EAAAwG,IAAW,WACVC,EAAS,OAAS,GAClBA,EAAS,IAAI,CAACU,EAAQrR,IACfqR,EAEHtR,EAAA,cAACsO,GAAA,CACC,IAAKrO,EACL,KAAMqR,EACN,gBAAA/C,EACA,iBAAkBC,GAAsC,gBACxD,iBAAkBC,GAAsC,UACxD,kBAAmBC,GAAwC,kBAC3D,qBACEC,GAA8C,aAEhD,YAAaC,GAA4B,QAAA,CAC3C,EAbkB,IAerB,CACL,CACF,EAEC,CAACpJ,GAAaoL,GAAWA,EAAQ,OAAS,GACzC5Q,EAAA,cAACb,GAAA,CACC,KAAM0R,GAAkB3R,GAAe,WACvC,WAAAK,EACA,aAAAH,EACA,uBAAAE,CAAA,CAAA,CAGN,EAKFU,EAAA,cAAC,MAAA,CACC,UAAW,oBAAoB8Q,GAAgBH,IAAW,QAAU,+BAAiC,EAAE,sBAAsBtQ,CAAE,EAAA,kBAE9H,KAAG,CAAA,UAAW,gCAAgCA,CAAE,IAC9CmF,GAAaxF,EAAA,cAACqR,GAAO,IAAA,EACrBV,IAAW,SAAW3Q,EAAA,cAAC,IAAE,CAAA,UAAU,kBAAkBmR,CAAa,EAClEL,GAAgBH,IAAW,SACzB3Q,EAAA,cAAA,MAAA,CAAI,UAAU,MAAM,wBAAyB,CAAE,OAAQoR,CAAuB,CAAA,CAAG,EAGnFT,IAAW,WACVC,GACAA,EAAQ,OAAS,GACjBA,EAAQ,IACN,CACEU,EAWArR,IAEKqR,EAGHtR,EAAA,cAAC,MAAG,IAAKsR,EAAO,KAAOrR,EAAO,UAAU,yBACrC,EAAAI,IAAO,kBACNL,EAAA,cAACgM,IAAmB,GAAIsF,CAAA,CAA4B,EAErDjR,IAAO,qBACNL,EAAA,cAACkQ,IAAqB,GAAIoB,CAAA,CAA+B,EAE1DjR,IAAO,yBACNL,EAAA,cAAC8K,GAAA,CACC,KAAMwG,EACN,YAAA1F,CAAA,CACF,EAEDvL,IAAO,kBAAoBL,EAAA,cAACuQ,IAAW,KAAMe,CAAA,CAA0B,EACvEjR,IAAO,4BACNL,EAAA,cAACyM,IAAwB,GAAI6E,CAAyC,CAAA,EAEvEjR,IAAO,6BACNL,EAAA,cAACoL,IAAsB,GAAIkG,CAAA,CAA0B,EAEtDjR,IAAO,8BACNL,EAAA,cAAC2L,GAAA,CACC,KAAM,CAAE,GAAI2F,CAA2B,EACvC,YAAA1F,CAAA,CAAA,EAGHvL,IAAO,4BACNL,EAAA,cAACgN,GAAA,CACC,KAAM,CAAE,GAAIsE,CAA4B,EACxC,YAAA1F,CAAA,CAAA,CAGN,EAnCkB,IAqCtB,CAEN,EACC,CAACpG,GAAaoL,GAAWA,EAAQ,OAAS,GACzC5Q,EAAA,cAACb,GAAA,CACC,KAAM0R,GAAkB3R,GAAe,WACvC,WAAAK,EACA,aAAAH,EACA,uBAAAE,CAAA,CACF,EAEFU,EAAA,cAAC,MAAI,CAAA,IAAK+Q,CAAa,CAAA,CACzB,CAEJ,ECtNMQ,GAAa,CAAC,CAClB,cAAAb,EACA,mBAAAc,EACA,mBAAAC,EACA,cAAAhK,EACA,OAAA1E,EACA,WAAY,CAAE,MAAA2O,EAAO,KAAAC,EAAM,MAAAC,CAAM,EACjC,WAAAhM,EACA,cAAAC,EACA,UAAAgM,EACA,YAAAtL,EACA,cAAAyB,EACA,YAAAhE,EAAc,EAChB,IAAgB,CACd,GAAI,CAACwN,EAA2B,OAAA,KAEhC,KAAM,CAACM,EAAcC,CAAc,EAAI/R,EAAM,SAA4B,CAAA,CAAE,EACrEgS,EAA6BzL,IAAgBpG,EAAa,yBAC1DuF,EAAqBa,IAAgBpG,EAAa,0BAClDkH,EAAkBd,IAAgBpG,EAAa,eAE/CuI,EAAetB,GAAkB,CAAE,OAAArE,EAAQ,mBAAA2C,EAAoB,gBAAA2B,EAAiB,EAEhF+B,EAAe,IAAM,CACzB,MAAMC,EAAWX,EAAA,EAAe,IAAa1F,GACvCA,EAAM,KAAO,oBAAsBgF,GAAiB,CAAChE,EAChD,CAAE,GAAGhB,EAAO,MAAO,CAACgF,CAAa,CAAE,EAErChF,CACR,EACD4C,EAAWyD,CAAQ,EACnB0I,EAAe,CAAA,CAAE,EACjBlM,EAAc,CAAE,KAAM,EAAG,MAAA6L,EAAc,MAAAE,EAAc,CACvD,EAEAxQ,EAAAA,UAAU,IAAM,CACd,GAAI2B,EAAQ,CACJ,MAAA2G,EAAiB3G,EACpB,OAAgBC,GAAA,CACf,GAAIA,EAAM,OAAS,gBAAkBA,EAAM,KAAO,aACzC,MAAA,GAEH,GAAAA,EAAM,KAAO,aAAc,CAC7B,MAAMiP,EAAmB,CAAC,EAEpBjP,EAAA,MAAM,QAAgBV,GAAA,CACtB,CAAC2P,EAAO,SAAS3P,EAAK,EAAE,GAAKA,EAAK,QAAU,IACvC2P,EAAA,KAAK3P,EAAK,EAAE,CACrB,CACD,EAEDU,EAAM,MAAQiP,EAAO,OAAS,EAAIA,EAAS,IAAA,CAG7C,OAAOjP,EAAM,KACf,CACD,EACA,OAAaA,EAAM,KAAK,EACxB,KAAK,EAEJ,GAAA0G,EAAe,SAAS,KAAK,EAAG,CAClCqI,EAAe,CAAA,CAAE,EACjB,MAAA,CAGF,MAAMG,EAAsBnP,EAAO,QACjCC,GAAAA,EAAM,MAAQA,EAAM,MAAM,OAAeV,GAAAoH,EAAe,SAASpH,EAAK,EAAE,CAAC,EAAI,CAAA,CAC/E,EAEAyP,EAAeG,CAAwC,CAAA,CACzD,EACC,CAACnP,CAAM,CAAC,EAEX,MAAMoP,EAAeR,EAAO,EAE5B,GAAIjB,IAAkB,EACpB,OACG1Q,EAAA,cAAA,MAAA,CAAI,UAAW,iBAAiB6R,GAAwB,EAAE,EAAA,EACxD7R,EAAA,cAAA,MAAA,CAAI,UAAU,sBAAA,EAAwByR,CAAmB,EACzD,CAACzN,GACAhE,EAAA,cAAC,KAAG,CAAA,UAAU,oBACZ,EAAAA,EAAA,cAAC,UACEA,EAAA,cAAA,SAAA,CAAO,UAAU,4BAA4B,QAASoJ,CAAA,EACpD3B,CACH,CACF,CACF,CAEJ,EAIJ,MAAM2K,EAA8B,IAAM,SACxC,MAAMC,EAAQ,CAAC,UAAW,UAAW,UAAU,EAC/C,IAAI9H,EAAQiH,EAGV,GAAAK,IAAc,iDACdA,IAAc,kCACd,CACA,MAAMS,EAAoBrP,GACxBF,EACAG,EAAsC,UACxC,EACMqP,EAAYxP,EAAO,KAAcC,GAAAA,EAAM,QAAUsP,CAAiB,EAClEE,GAAmB3N,GAAArC,EAAA+P,GAAA,YAAAA,EAAW,QAAX,YAAA/P,EAAkB,KACjCF,GAAAA,EAAK,MAAOgQ,GAAA,YAAAA,EAAoB,OADjB,YAAAzN,EAEtB,MAEH0F,EAAQA,EACL,QAAQ,MAAOqH,EAAM,SAAS,CAAC,EAC/B,QAAQ,OAAOY,GAAA,YAAAA,EAAkB,gBAAiB,EAAE,OAC9CR,EACTzH,EAAQA,EAAM,QAAQ,MAAOqH,EAAM,UAAU,EAE7CrH,EACEqH,GAASO,EACL5H,EACG,QAAQ,QAAS,EAAE,EACnB,QAAQ,MAAOqH,EAAM,SAAS,CAAC,EAC/B,QAAQ,MAAOA,EAAM,SAAS,CAAC,EAClCrH,EACG,QAAQ,MAAO4H,EAAa,SAAU,CAAA,EACtC,QAAQ,MAAOP,EAAQF,EAAQC,EAAOC,EAAM,YAAcF,EAAQC,GAAM,SAAU,CAAA,EAClF,QAAQ,MAAOC,EAAM,UAAU,EAG1C,OAAAS,EAAM,QAAgBI,GAAA,CAChBlI,EAAM,SAASkI,CAAI,GAAKb,IAAU,IACpCrH,EAAQA,EAAM,QAAQkI,EAAMA,EAAK,MAAM,EAAG,EAAE,CAAC,EAC/C,CACD,EAEMlI,CACT,EAEMmI,EAAmBC,GAAgB,CACvC,MAAMC,EAAUd,EAAa,OAAYe,GAAAA,EAAE,KAAOF,CAAG,EAErD/M,EACE7C,EAAO,IAAaC,GAAA,CAClB,GAAIA,EAAM,OAEJ,MAAM,QAAQA,EAAM,KAAK,GAAKA,EAAM,MAAM,SAAS2P,CAAG,EAAG,CACvD,GAAA3P,EAAM,KAAO,aAAc,CAE7B,MAAML,EAAQK,EAAM,MAAM,IAAYV,GAChCA,EAAK,KAAOqQ,EACP,CAAE,GAAGrQ,EAAM,MAAO,EAAG,EAEvBA,CACR,EAEM,MAAA,CACL,GAAGU,EACH,MAAAL,EACA,MAAOA,EAAM,OAAeL,GAAAA,EAAK,QAAU,EAAE,EAAE,IAAYA,GAAAA,EAAK,EAAE,CACpE,CAAA,CAGK,MAAA,CACL,GAAGU,EACH,MACEA,EAAM,MAAM,SAAW,EAAI,KAAOA,EAAM,MAAM,OAAQV,GAAiBA,IAASqQ,CAAG,CACvF,CAAA,CAIG,OAAA3P,CACR,CAAA,CACH,EAEA+O,EAAea,CAAO,CACxB,EAEA,OAAIlB,IAAU,EAEV1R,EAAA,cAAC,OAAI,UAAU,eAAA,kBACZ,MAAI,CAAA,UAAU,sBAAwB,EAAAyR,CAAmB,CAC5D,EAKDzR,EAAA,cAAA,MAAA,CAAI,UAAW,iBAAiB6R,GAAwB,EAAE,EAAA,EACxD7R,EAAA,cAAA,MAAA,CAAI,UAAU,sBAAA,EAAwBoS,EAA8B,CAAA,EACpEN,EAAa,OAAS,GACrB9R,EAAA,cAAC,KAAG,CAAA,UAAU,oBACX,EAAA8R,GACCA,EAAa,IACXa,GAAA3S,EAAA,cAAC,KAAG,CAAA,IAAK2S,EAAI,IACX3S,EAAA,cAAC,SAAA,CACC,UAAU,2BACV,QAAS,IAAM0S,EAAgBC,EAAI,EAAE,CAAA,EAEpCA,EAAI,KAAO,WAAaA,EAAI,KAAO,UAAY,GAAGA,EAAI,KAAK,KAAO,GAElEA,EAAI,MAEL3S,EAAA,cAAC,MAAA,CAEC,QAAQ,YACR,KAAK,cAAA,EAELA,EAAA,cAAC,MAAI,CAAA,UAAU,QAAS,CAAA,CAAA,CAC1B,CAEJ,CACD,EAEHA,EAAA,cAAC,UACEA,EAAA,cAAA,SAAA,CAAO,UAAU,4BAA4B,QAASoJ,CAAA,EACpD3B,CACH,CACF,CACF,CAEJ,CAEJ"}