@wayke-se/components-react 3.9.0-beta.2 → 3.9.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/layouts/search/index.tsx", "../src/components/Container/index.tsx", "../src/components/Container/wrapper.tsx", "../src/layout/theme.ts", "../src/layout/helpers.tsx", "../src/components/Page/index.tsx", "../src/components/Result/index.tsx", "../src/components/Result/wrapper.tsx", "../src/components/ProgressBar/index.tsx", "../src/components/ProgressBar/wrapper.tsx", "../src/components/Button/index.tsx", "../src/components/Utility/index.tsx", "../src/components/Loader/index.tsx", "../src/components/Loader/wrapper.tsx", "../src/layout/keyframes.tsx", "../src/components/SrOnly/index.tsx", "../src/utils/formats.ts", "../src/utils/constants.ts", "../src/State/Search/useSearch.ts", "../src/State/Search/SearchContext.ts", "../src/components/SortSelect/index.tsx", "../src/components/SortSelect/wrapper.tsx", "../src/components/Icon/index.tsx", "../src/utils/sortOptions.ts", "../src/components/Filter/index.tsx", "../src/components/Filter/wrapper.tsx", "../src/components/FilterPanel/index.tsx", "../src/components/Panel/index.tsx", "../src/components/Panel/wrapper.tsx", "../src/components/Heading/index.tsx", "../src/components/Portal/portal-namespace.ts", "../src/components/Portal/portal-element.tsx", "../src/components/Portal/portal.tsx", "../src/components/Accordion/index.tsx", "../src/components/Accordion/wrapper.tsx", "../src/components/Repeat/index.tsx", "../src/components/FilterPanel/faceSelector.tsx", "../src/components/FilterPanel/checkListFacet.tsx", "../src/components/Checklist/index.tsx", "../src/components/Checklist/wrapper.tsx", "../src/components/OverflowBox/index.tsx", "../src/components/OverflowBox/wrapper.tsx", "../src/components/FilterPanel/colorFacet.tsx", "../src/components/ColorSelect/index.tsx", "../src/components/ColorSelect/wrapper.tsx", "../src/utils/converters.ts", "../src/components/FilterPanel/rangeFacet.tsx", "../src/components/RangeSlider/index.tsx", "../src/components/RangeSlider/wrapper.tsx", "../src/components/RangeSlider/handle.tsx", "../src/components/RangeSlider/track.tsx", "../src/components/Grid/index.tsx", "../src/components/Grid/wrapper.tsx", "../src/components/ProductCard/index.tsx", "../src/components/ProductCard/wrapper.tsx", "../src/components/UspList/index.tsx", "../src/components/UspList/wrapper.tsx", "../src/State/Path/usePath.ts", "../src/State/Path/PathContext.ts", "../src/hooks/useIsInViewport.ts", "../src/components/SearchTerm/index.tsx", "../src/components/SearchTerm/wrapper.tsx", "../src/components/SearchFilter/index.tsx", "../src/components/SearchBar/index.tsx", "../src/components/InputSearch/index.tsx", "../src/components/InputSearch/wrapper.tsx", "../src/hooks/useOutsideClick.ts", "../src/components/Snackbar/index.tsx", "../src/components/Snackbar/wrapper.tsx", "../src/utils/pubsub/pubsub.ts", "../src/hooks/useInitializeTranslation.ts", "../src/utils/I18n.ts", "../src/layouts/searchItem/index.tsx", "../src/components/PriceTable/index.tsx", "../src/components/PriceTable/wrapper.tsx", "../src/components/Price/index.tsx", "../src/components/LogoBox/index.tsx", "../src/components/LogoBox/wrapper.tsx", "../src/components/Content/index.tsx", "../src/components/Content/wrapper.tsx", "../src/components/Blockquote/index.tsx", "../src/components/Blockquote/wrapper.tsx", "../src/components/Avatar/index.tsx", "../src/components/Avatar/wrapper.tsx", "../src/components/ExtendContent/index.tsx", "../src/components/ExtendContent/wrapper.tsx", "../src/components/Gallery/index.tsx", "../src/components/Gallery/wrapper.tsx", "../src/components/NavButton/index.tsx", "../src/components/Lightbox/index.tsx", "../src/components/Lightbox/wrapper.tsx", "../src/components/Video/EmbeddedVideoLightbox.tsx", "../src/components/Video/YoutubePlayer.tsx", "../src/components/Video/utils.ts", "../src/components/Video/wrapper.tsx", "../src/components/Video/VimeoPlayer.tsx", "../src/components/Video/CustomPlayer.tsx", "../src/components/Video/Video.tsx", "../src/components/Sphere/SphereLightbox.tsx", "../src/components/Sphere/SphereViewer.tsx", "../src/components/Sphere/wrapper.tsx", "../src/components/ThreeSixty/ThreeSixtLightbox.tsx", "../src/components/Gallery/MediaButton.tsx", "../src/components/ThreeSixty/Rotation.tsx", "../src/components/Video/EmbededVideo.tsx", "../src/components/Video/useThumbnail.ts", "../src/hooks/useVimeoThumbnail.ts", "../src/hooks/useFetch.ts", "../src/components/Modal/index.tsx", "../src/components/Modal/wrapper.tsx", "../src/components/Video/QuickNavEmbeded.tsx", "../src/components/Sphere/Sphere.tsx", "../src/components/ThreeSixty/ThreeSixty.tsx", "../src/components/ProductPage/index.tsx", "../src/hooks/useSearchItem.ts", "../src/queries/SEARCH_ITEM_QUERY.ts", "../src/components/FinancialOptions/index.tsx", "../src/components/FinancialOptions/leasing.tsx", "../src/components/OptionBox/index.tsx", "../src/components/OptionBox/wrapper.tsx", "../src/components/DataList/index.tsx", "../src/components/DataList/wrapper.tsx", "../src/components/FinancialOptions/loan.tsx", "../src/hooks/useLoan.ts", "../src/queries/LOAN_CALCULATION.ts", "../src/components/FinancialOptions/LoanModal.tsx", "../src/components/ContentLogo/index.tsx", "../src/components/RangeSlider/SliderWithLabel.tsx", "../src/components/RangeSliderLabel/index.tsx", "../src/components/RangeSliderLabel/wrapper.tsx", "../src/components/RangeSlider/RangeSliderSimple.tsx", "../src/components/InsuranceOptions/index.tsx", "../src/components/InsuranceOptions/Insurance.tsx", "../src/components/InsuranceOptions/InsuranceModal.tsx", "../src/components/DetailBox/index.tsx", "../src/components/DetailBox/wrapper.tsx", "../src/components/ExtendInfo/index.tsx", "../src/components/ExtendInfo/wrapper.tsx", "../src/components/InputLabel/index.tsx", "../src/components/InputLabel/wrapper.tsx", "../src/components/InputText/index.tsx", "../src/components/InputText/wrapper.tsx", "../src/components/InputCheckbox/index.tsx", "../src/components/InputCheckbox/wrapper.tsx", "../src/components/InputSelect/index.tsx", "../src/components/InputSelect/wrapper.tsx", "../src/components/InputGroup/index.tsx", "../src/components/ColumnRow/index.tsx", "../src/hooks/useInsurance.ts", "../src/queries/INSURANCE_CALCULATION.ts", "../src/utils/ssn.ts", "../src/components/InsuranceOptions/InsuranceFree.tsx", "../src/components/InsuranceOptions/InsuranceFreeModal.tsx", "../src/layouts/searchItem/ManufacturerPackagesOption.tsx", "../src/layouts/searchItem/CheckList.tsx", "../src/components/ActionList/index.tsx", "../src/components/ActionList/toggle-item.tsx", "../src/utils/phonenumbers.ts", "../src/utils/metadata.min.ts", "../src/components/Columns/index.tsx", "../src/components/StateIndicator/index.tsx", "../src/components/CheckMarkList/index.tsx", "../src/components/CheckMarkList/wrapper.tsx", "../src/components/SwitchBar/index.tsx", "../src/components/SwitchBar/wrapper.tsx", "../src/layouts/searchItem/BranchModal.tsx", "../src/State/CentralStorage/CentralStorageContext.ts", "../src/layouts/searchItem/PackageOptionModal.tsx", "../src/layouts/searchItem/Related.tsx", "../src/components/SectionHeader/index.tsx", "../src/components/SectionHeader/wrapper.tsx", "../src/components/OverflowGrid/index.tsx", "../src/components/OverflowGrid/wrapper.tsx", "../src/State/RelatedSearch/useRelatedSearch.ts", "../src/State/RelatedSearch/RelatedSearchContext.ts", "../src/utils/regex.ts", "../src/layouts/searchItem/PackageOptions.tsx", "../src/layouts/searchItem/Branch.tsx", "../src/components/TableColumn/index.tsx", "../src/components/OpeningHours/index.tsx", "../src/components/Badge/index.tsx", "../src/components/Badge/wrapper.tsx", "../src/components/PhoneNumber/index.tsx", "../src/components/Map/index.tsx", "../src/State/Settings/useSettings.ts", "../src/State/Settings/SettingsContext.ts", "../src/components/Map/wrapper.tsx", "../src/State/CentralStorage/useCentralStorage.ts", "../src/hooks/useSearchItemBranch.ts", "../src/queries/SEARCH_ITEM_BRANCH_QUERY.ts", "../src/layouts/searchItem/Page404.tsx", "../src/layouts/searchItem/PageLoading.tsx", "../src/layouts/searchItem/Property.tsx", "../src/utils/vehicle-properties/property-tree-creator.ts", "../src/utils/vehicle-properties/compare-categories.ts", "../src/utils/vehicle-properties/compare-properties.ts", "../src/utils/vehicle-properties/compare-basic-properties.ts", "../src/utils/vehicle-properties/property-tree-sorter.ts", "../src/utils/vehicle-properties/custom-property-adder.ts", "../src/utils/deep-copy.ts", "../src/utils/vehicle-properties/property-remover.ts", "../src/layouts/searchItem/MetadataItem.tsx", "../src/components/TableList/index.tsx", "../src/components/Tabs/index.tsx", "../src/components/Tabs/wrapper.tsx", "../src/layouts/searchItem/DemoCarModal.tsx", "../src/layouts/searchItem/Documents.tsx", "../src/components/DocumentList/index.tsx", "../src/components/DocumentList/wrapper.tsx", "../src/layouts/searchItem/Accessories/index.tsx", "../src/components/AccessoryCard/index.tsx", "../src/components/AccessoryCard/wrapper.tsx", "../src/layouts/searchItem/Accessories/AccessoryModal.tsx", "../src/components/Image/index.tsx", "../src/components/Link/index.tsx", "../src/components/PriceBox/index.tsx", "../src/components/PriceBox/wrapper.tsx", "../src/providers/WaykeProvider.tsx", "../src/providers/graphqlProvider.tsx", "../src/providers/themeProvider.tsx", "../src/State/Search/SearchProvider.tsx", "../src/utils/url.ts", "../src/components/Root/index.tsx", "../src/State/Settings/SettingsProvider.tsx", "../src/State/RelatedSearch/RelatedSearchProvider.tsx", "../src/State/CentralStorage/CentralStorageProvider.tsx", "../src/hooks/useSessionStorage.ts", "../src/State/Path/PathProvider.tsx", "../src/hooks/usePrevious.ts", "../src/State/Path/reducer.ts", "../src/layouts/WaykeCompositeWithProvider.tsx", "../src/layouts/WaykeComposite.tsx", "../src/hooks/useHashGuid.ts", "../src/providers/WaykeItemProvidet.tsx", "../src/index.ts"],
4
- "sourcesContent": ["import React, { useEffect, useCallback, useMemo } from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport Result from '../../components/Result/index';\nimport Filter from '../../components/Filter/index';\nimport Grid from '../../components/Grid/index';\nimport SearchTerm from '../../components/SearchTerm/index';\nimport { PortalElement, PortalNamespace } from '../../components/Portal/index';\nimport SearchFilter from '../../components/SearchFilter/index';\nimport Snackbar from '../../components/Snackbar/index';\nimport useSearch from '../../State/Search/useSearch';\nimport { SearchFilterTypes } from '../../@types/filter';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { MarketCode } from '../../@types/market';\nimport useInitializeTranslation from '../../hooks/useInitializeTranslation';\nimport i18next from 'i18next';\n\nexport interface WaykeSearchProps {\n marketCode?: MarketCode;\n filterList?: SearchFilterTypes[];\n initialQueryParams?: URLSearchParams | string;\n removeSearchBar?: boolean;\n removeFilterOptions?: boolean;\n placeholderImage?: string;\n hashRoute?: boolean;\n pathRoute?: string;\n modifyDocumentTitleSearch?: string;\n displayBranchName?: boolean;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst WaykeSearch = ({\n marketCode,\n filterList,\n initialQueryParams,\n hashRoute,\n pathRoute,\n removeSearchBar,\n placeholderImage,\n removeFilterOptions,\n modifyDocumentTitleSearch,\n displayBranchName,\n onClickSearchItem,\n}: WaykeSearchProps) => {\n const { error, documents, queryFilter, onFilterUpdate, onInitialize } = useSearch();\n const initialized = useInitializeTranslation(marketCode);\n\n useEffect(() => {\n if (modifyDocumentTitleSearch) {\n document.title = modifyDocumentTitleSearch;\n }\n onInitialize(\n typeof initialQueryParams === 'string'\n ? new URLSearchParams(initialQueryParams)\n : initialQueryParams\n );\n }, []);\n\n const onItemClicked = useCallback((id: string) => {\n PubSub.publish('ItemClicked', id);\n if (onClickSearchItem) {\n onClickSearchItem(id);\n }\n }, []);\n\n const onClearQuery = useCallback(() => {\n const nextQuery = new URLSearchParams(queryFilter.searchParams);\n nextQuery.delete('query');\n onFilterUpdate(nextQuery.toString());\n }, [queryFilter.searchParams]);\n\n const searchQuery = useMemo(() => queryFilter.searchParams.get('query'), [documents]);\n\n if (!initialized) return null;\n\n return (\n <>\n <Page>\n {!removeSearchBar && (\n <PageSection>\n <Container>\n <SearchFilter />\n </Container>\n </PageSection>\n )}\n {searchQuery && (\n <PageSection>\n <Container>\n <SearchTerm onClear={onClearQuery}>{searchQuery}</SearchTerm>\n </Container>\n </PageSection>\n )}\n {!removeFilterOptions && (\n <PageSection>\n <Container>\n <Filter filterList={filterList} marketCode={marketCode} />\n </Container>\n </PageSection>\n )}\n <PageSection accent fillSpace className=\"wayke__theme wayke__color--accent-bg\">\n <Container>\n <Result>\n <>\n {error && (\n <Snackbar severity=\"error\" icon heading=\"Ett fel har intr\u00E4ffat\">\n V\u00E4nligen f\u00F6rs\u00F6k igen.\n </Snackbar>\n )}\n {!error && documents && documents.length > 0 && (\n <Grid\n hashRoute={hashRoute}\n pathRoute={pathRoute}\n onClickItem={onItemClicked}\n documents={documents}\n placeholderImage={placeholderImage}\n displayBranchName={displayBranchName}\n />\n )}\n {!error && documents && documents.length === 0 && (\n <Snackbar\n severity=\"warning\"\n icon\n heading={i18next.t('search.snackbarNoSearchResults.heading') || undefined}\n >\n {i18next.t('search.snackbarNoSearchResults.body')}\n </Snackbar>\n )}\n </>\n </Result>\n </Container>\n </PageSection>\n </Page>\n <PortalElement id={PortalNamespace.DefaultPortal} />\n </>\n );\n};\n\nexport default WaykeSearch;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst Container = ({ children }: Props) => <Wrapper>{children}</Wrapper>;\n\nexport default Container;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n width: 100%;\n max-width: ${(props) => props.theme.distances.containerMaxWidth};\n margin: 0 auto;\n padding: 0 ${size(3)};\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: 0 ${size(2)};\n }\n`;\n", "const _colors = {\n black: '#000',\n white: '#fff',\n gray: '#ddd',\n grayLight: '#f8f8f8',\n grayLightTransparent: 'rgba(248, 248, 248, 0)',\n grayLightDarker: '#ebebeb',\n grayDark: '#717171',\n blue: '#1d61ca',\n ui: {\n greenLight: '#cdf5c8',\n green: '#2b8747',\n redLight: '#ffd0d0',\n red: '#c71f1f',\n yellowLight: '#fff4c7',\n yellow: '#ffc700',\n blueLight: '#daf7fc',\n },\n};\n\nconst theme = {\n color: {\n bg: _colors.white,\n link: _colors.blue,\n accent: _colors.grayLight,\n accentTransparent: _colors.grayLightTransparent,\n accentDark: _colors.grayLightDarker,\n border: _colors.gray,\n textDark: _colors.black,\n textDarkLighten: _colors.grayDark,\n textLight: _colors.white,\n hoverOverlay: 'rgba(0, 0, 0, 0.04)',\n disabledBg: _colors.gray,\n disabledText: _colors.grayDark,\n placeholder: _colors.grayDark,\n ui: {\n positiveLight: _colors.ui.greenLight,\n positive: _colors.ui.green,\n neutralLight: _colors.ui.yellowLight,\n neutral: _colors.ui.yellow,\n negativeLight: _colors.ui.redLight,\n negative: _colors.ui.red,\n infoLight: _colors.ui.blueLight,\n },\n },\n breakpoint: {\n Sm: '@media (min-width: 600px)',\n LtSm: '@media (max-width: 599px)',\n Md: '@media (min-width: 900px)',\n LtMd: '@media (max-width: 899px)',\n Lg: '@media (min-width: 1200px)',\n LtLg: '@media (max-width: 1199px)',\n },\n mask: {\n gradient: {\n toTop: 'linear-gradient(to top, #000, transparent)',\n toBottom: 'linear-gradient(to bottom, #000, transparent)',\n toLeft: 'linear-gradient(to left, #000, transparent)',\n toRight: 'linear-gradient(to right, #000, transparent)',\n },\n },\n distances: {\n baseUnit: '8px',\n inputHeight: '48px',\n containerMaxWidth: '1312px',\n },\n};\n\nexport type Theme = typeof theme;\nexport default theme;\n", "import theme from './theme';\n\nexport const size = (multiplier = 1) => {\n const baseUnit = parseFloat(theme.distances.baseUnit);\n return `${multiplier * baseUnit}px`;\n};\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Page = styled.div``;\n\ntype PageSectionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n accent?: boolean;\n large?: boolean;\n fillSpace?: boolean;\n};\n\nexport const PageSection = styled.section<PageSectionProps>`\n margin-bottom: ${size(4)};\n\n ${({ accent }: { accent?: boolean }) =>\n accent &&\n css`\n padding: ${size(4)} 0;\n background-color: ${(props) => props.theme.color.accent};\n margin-bottom: 0;\n `}\n\n ${({ large }: { large?: boolean }) =>\n large &&\n css`\n margin-bottom: ${size(8)};\n `}\n\n ${({ accent, large }) =>\n accent &&\n large &&\n css`\n padding: ${size(8)} 0;\n margin-bottom: 0;\n `}\n\n ${({ fillSpace }: { fillSpace?: boolean }) =>\n fillSpace &&\n css`\n flex: 1 1 auto;\n `}\n`;\n", "import React, { useCallback } from 'react';\n\nimport {\n Wrapper,\n Header,\n HeaderCount,\n HeaderSort,\n Body,\n Footer,\n FooterProgress,\n FooterAction,\n ResultCount,\n} from './wrapper';\nimport ProgressBar from '../ProgressBar/index';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport Loader from '../Loader/index';\nimport { numberSeparator } from '../../utils/formats';\nimport useSearch from '../../State/Search/useSearch';\nimport SortSelect, { OptionProps } from '../SortSelect/index';\nimport { getTranslatedSortOptionDisplayName } from '../../utils/sortOptions';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst Result = ({ children }: Props) => {\n const { loading, response, documents, queryFilter, onLoadMore, onFilterUpdate } = useSearch();\n\n const onSortOptionChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => onFilterUpdate(e.currentTarget.value),\n []\n );\n\n const numberOfDocuments = documents?.length || 0;\n const numberOfHits = response?.documentList.numberOfHits || 0;\n const useSkeletons = !!queryFilter?.concatResult;\n\n const selectedSortOption = response?.documentList.sortOptions.find((x) => x.selected)?.query;\n const sortOptions = response?.documentList.sortOptions\n .filter((x) => x.displayName !== 'relevance')\n .map(\n (so): OptionProps => ({\n value: so.query,\n displayName: getTranslatedSortOptionDisplayName(so.displayName),\n })\n );\n\n if (loading && !useSkeletons) {\n return <Loader />;\n }\n return (\n <Wrapper>\n <Header>\n <HeaderCount>\n <ResultCount>{`${numberSeparator(numberOfHits)} ${\n numberOfHits === 1 ? 'bil' : 'bilar'\n }`}</ResultCount>\n </HeaderCount>\n {sortOptions && selectedSortOption && (\n <HeaderSort>\n <SortSelect\n value={selectedSortOption}\n options={sortOptions}\n onChange={onSortOptionChange}\n />\n </HeaderSort>\n )}\n </Header>\n <Body>{children}</Body>\n <Footer>\n <FooterProgress>\n <ProgressBar valueCurrent={numberOfDocuments} valueMax={numberOfHits} />\n </FooterProgress>\n {numberOfDocuments !== numberOfHits && (\n <FooterAction>\n <ButtonSecondary\n disabled={loading}\n onClick={onLoadMore}\n title=\"Visa fler\"\n aria-label=\"Visa fler\"\n >\n <ButtonContent>Visa fler</ButtonContent>\n </ButtonSecondary>\n </FooterAction>\n )}\n </Footer>\n </Wrapper>\n );\n};\n\nexport default Result;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\nexport const Header = styled.header`\n display: flex;\n margin-bottom: ${size(4)};\n`;\n\nexport const HeaderCount = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const HeaderSort = styled.div`\n flex-shrink: 0;\n`;\n\nexport const Body = styled.div``;\n\nexport const Footer = styled.footer`\n margin-top: ${size(8)};\n text-align: center;\n`;\n\nexport const FooterProgress = styled.div`\n max-width: 175px;\n margin: 0 auto;\n`;\n\nexport const FooterAction = styled.div`\n margin-top: ${size(3)};\n`;\n\nexport const ResultCount = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { Wrapper, Description, Bar, BarActive } from './wrapper';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n valueCurrent: number;\n valueMax: number;\n}\n\nconst ProgressBar = ({ valueCurrent, valueMax }: Props) => {\n const { t } = useTranslation();\n const barWidth = (valueCurrent / valueMax) * 100;\n\n return (\n <Wrapper>\n <Description>\n {t('other.showingNumberOfResults', { current: valueCurrent, count: valueMax })}\n </Description>\n <Bar>\n <BarActive\n style={{ width: `${barWidth}%` }}\n aria-valuenow={valueCurrent}\n aria-valuemin={0}\n aria-valuemax={valueMax}\n />\n </Bar>\n </Wrapper>\n );\n};\n\nexport default ProgressBar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n text-align: center;\n`;\n\nexport const Description = styled.div`\n margin-bottom: ${size(1.5)};\n font-size: 0.875rem;\n`;\n\nexport const Bar = styled.div`\n position: relative;\n width: 100%;\n height: 2px;\n background-color: ${(props) => props.theme.color.accentDark};\n`;\n\nexport const BarActive = styled.div.attrs(() => ({\n role: 'progressbar',\n}))`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n background-color: ${(props) => props.theme.color.textDark};\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { UtilityTextRight } from '../Utility/index';\n\nexport const ButtonReset = styled.button.attrs(() => ({\n type: 'button',\n}))`\n display: inline-block;\n vertical-align: middle;\n padding: 0;\n margin: 0;\n background-color: transparent;\n border: 0;\n border-radius: 0;\n font-family: sans-serif;\n font-weight: 400;\n font-size: 1em;\n color: currentColor;\n line-height: 1.2;\n text-align: center;\n text-decoration: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0.1);\n cursor: pointer;\n\n :focus {\n outline: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\ntype ButtonResetProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n fullWidth?: boolean;\n inputHeight?: boolean;\n};\n\nconst ButtonBase = styled(ButtonReset)<ButtonResetProps>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${size(1.75)} ${size(6)};\n border-radius: 3px;\n font-size: 1rem;\n line-height: 1.2;\n text-decoration: none;\n transform-origin: 50% 50%;\n transition: 200ms ease, transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.97);\n }\n\n &[disabled] {\n background-color: ${(props) => props.theme.color.disabledBg};\n border-color: ${(props) => props.theme.color.disabledBg};\n color: ${(props) => props.theme.color.disabledText};\n }\n\n ${({ fullWidth }) =>\n fullWidth &&\n css`\n display: flex;\n width: 100%;\n `}\n\n ${({ inputHeight }) =>\n inputHeight &&\n css`\n height: ${(props) => props.theme.distances.inputHeight};\n `}\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: ${size(1.75)} ${size(2.5)};\n font-size: 0.875rem;\n }\n`;\n\nexport const ButtonPrimary = styled(ButtonBase).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg wayke__font--bold',\n}))``;\n\nexport const ButtonSecondary = styled(ButtonBase).attrs(() => ({\n className: 'wayke__theme wayke__color--secondary-bg wayke__font--bold',\n}))`\n background-color: ${(props) => props.theme.color.accentDark};\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const ButtonContent = styled.div`\n position: relative;\n z-index: 1;\n\n & + & {\n margin-left: ${size(0.5)};\n }\n`;\n\nexport const ButtonClear = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n position: relative;\n font-size: 0.875rem;\n padding: ${size(1.5)};\n margin: ${size(-1.5)};\n text-align: left;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n ${UtilityTextRight} & {\n text-align: right;\n }\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\ntype ButtonInlineProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n inline?: boolean;\n as?: string;\n};\n\nexport const ButtonInline = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))<ButtonInlineProps>`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n text-decoration: underline;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDark};\n }\n\n ${({ inline }) =>\n inline &&\n css`\n display: inline;\n `}\n`;\n\nexport const ButtonInlineBold = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n\n :hover {\n text-decoration: underline;\n }\n`;\n\nexport const ButtonInlineLight = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n text-decoration: none;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDarkLighten};\n }\n`;\n\nexport const ButtonInlinePrimary = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))<ButtonInlineProps>`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n\n :hover {\n text-decoration: underline;\n }\n`;\n", "import styled from 'styled-components';\n\nexport const UtilityTextRight = styled.div`\n text-align: right;\n`;\n\nexport const UtilityFontSizeSmall = styled.span`\n font-size: 0.875rem;\n`;\n\nexport const UtilityTextPrimary = styled.span.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))``;\n\nexport const UtilityTextBold = styled.span.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n", "import * as React from 'react';\n\nimport { Spinner, Wrapper } from './wrapper';\nimport { SrOnly } from '../SrOnly/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n inline?: boolean;\n center?: boolean;\n}\n\nconst Loader = ({ inline, center }: Props) => {\n const { t } = useTranslation();\n return (\n <Wrapper inline={inline} center={center}>\n <Spinner aria-hidden=\"true\" />\n <SrOnly>{t('other.loading')}</SrOnly>\n </Wrapper>\n );\n};\n\nexport default Loader;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { rotate } from '../../layout/keyframes';\n\nexport const Spinner = styled.div`\n display: block;\n margin: 0 auto;\n width: ${size(4)};\n height: ${size(4)};\n border-radius: 50%;\n border: 2px solid currentColor;\n border-top-color: transparent;\n animation: ${rotate} 600ms linear infinite;\n`;\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n inline?: boolean;\n center?: boolean;\n};\n\nexport const Wrapper = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n role: 'status',\n}))<WrapperProps>`\n ${({ inline }) =>\n inline &&\n css`\n display: inline-block;\n vertical-align: middle;\n color: currentColor !important;\n\n ${Spinner} {\n width: 1em;\n height: 1em;\n }\n `}\n\n ${({ center }) =>\n center &&\n css`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n `}\n`;\n", "import { keyframes } from 'styled-components';\n\nexport const noTransform = keyframes`\n to {\n transform: none;\n }\n`;\n\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n`;\n\nexport const rotate = keyframes`\n to {\n transform: rotate(360deg);\n }\n`;\n", "import styled from 'styled-components';\n\n// Adds element only visible to screen readers\nexport const SrOnly = styled.div`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n", "import { format as formatFns } from 'date-fns';\nimport { sv } from 'date-fns/locale';\n\n// Filter function to remove any null/undefined values.\nexport const notEmpty = <TValue>(value: TValue | null | undefined): value is TValue =>\n value !== null && value !== undefined;\n\nexport const numberSeparator = (value: number, n = 0, x = 3, s = ' ', c = '.') => {\n if (value === null || value === undefined) {\n return null;\n }\n\n const re = `\\\\d(?=(\\\\d{${x || 3}})+${n > 0 ? '\\\\D' : '$'})`;\n const num = value.toFixed(Math.max(0, ~~n));\n\n return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), `$&${s || ','}`);\n};\n\nimport {\n MANUFACTURER,\n MODEL_SERIES,\n FUEL_TYPE,\n GEARBOX_TYPE,\n ENVIRONMENT_CLASS,\n SEGMENT,\n DRIVING_WHEEL,\n COLOR,\n PRICE,\n BRANCH,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n BUSINESS_LEASING_PRICE,\n} from './constants';\n\nexport const FacetIdToTitle = (f: string) => {\n switch (f) {\n case MANUFACTURER:\n return 'Tillverkare';\n case MODEL_SERIES:\n return 'Modell';\n case FUEL_TYPE:\n return 'Drivmedel';\n case GEARBOX_TYPE:\n return 'V\u00E4xell\u00E5da';\n case SEGMENT:\n return 'Segment';\n case DRIVING_WHEEL:\n return 'Drivhjul';\n case ENVIRONMENT_CLASS:\n return 'Milj\u00F6klass';\n case COLOR:\n return 'F\u00E4rg';\n case PRICE:\n return 'Pris';\n case BRANCH:\n return 'Anl\u00E4ggning';\n case MILEAGE:\n return 'Miltal';\n case MODEL_YEAR:\n return 'Modell\u00E5r';\n case LEASING_PRICE:\n return 'Privatleasing';\n case BUSINESS_LEASING_PRICE:\n return 'F\u00F6retagsleasing';\n default:\n return f;\n }\n};\n\nexport const dateTimeFormat = {\n YearMonth: 1,\n DayMonth: 2,\n\n format: (value: string | Date, format: number) => {\n const date = new Date(value);\n switch (format) {\n case dateTimeFormat.YearMonth:\n return formatFns(date, 'MMMM yyyy', { locale: sv });\n case dateTimeFormat.DayMonth:\n return formatFns(date, 'd MMMM yyyy', { locale: sv });\n default:\n return formatFns(date, 'yyyy-MM-dd HH:mm', { locale: sv });\n }\n },\n};\n", "export const MANUFACTURER = 'manufacturer';\nexport const MODEL_SERIES = 'modelSeries';\nexport const FUEL_TYPE = 'fuelType';\nexport const GEARBOX_TYPE = 'gearboxType';\nexport const BRANCH = 'branch';\nexport const COLOR = 'color';\nexport const ENVIRONMENT_CLASS = 'environmentClass';\nexport const SEGMENT = 'properties.segment';\nexport const DRIVING_WHEEL = 'drivingWheel';\nexport const PRICE = 'price';\nexport const MILEAGE = 'mileage';\nexport const MODEL_YEAR = 'modelYear';\nexport const LEASING_PRICE = 'leasingPrice';\nexport const BUSINESS_LEASING_PRICE = 'businessLeasingPrice';\nexport const ODOMETER_VALUE_AS_KM = 'odometerValueAsKm';\n\nexport const COLOR_WHITE = { displayName: 'Vit', hex: '#ffffff' };\nexport const COLOR_BLACK = { displayName: 'Svart', hex: '#000000' };\nexport const COLOR_GRAY = { displayName: 'Gr\u00E5', hex: '#808080' };\nexport const COLOR_SILVER = { displayName: 'Silver', hex: '#c0c0c0' };\nexport const COLOR_BLUE = { displayName: 'Bl\u00E5', hex: '#0000ff' };\nexport const COLOR_RED = { displayName: 'R\u00F6d', hex: '#ff0000' };\nexport const COLOR_BROWN = { displayName: 'Brun', hex: '#a52a2a' };\nexport const COLOR_GREEN = { displayName: 'Gr\u00F6n', hex: '#008000' };\nexport const COLOR_ORANGE = { displayName: 'Orange', hex: '#ffa500' };\nexport const COLOR_YELLOW = { displayName: 'Gul', hex: '#ffff00' };\nexport const COLOR_PURPLE = { displayName: 'Lila', hex: '#800080' };\nexport const COLOR_BEIGE = { displayName: 'Beige', hex: '#f5f5dc' };\n\n/*\nexport const DEFAULT_PLACEHOLDER_IMAGE =\n 'https://cdn.wayke.se/wui/images/placeholders/placeholder_product_card.jpg';\n*/\n\nexport const DEFAULT_PLACEHOLDER_IMAGE =\n 'data:image/jpeg;base64,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';\n", "import { useContext } from 'react';\nimport { SearchContext } from './SearchContext';\n\nconst useSearch = () => useContext(SearchContext);\n\nexport default useSearch;\n", "import { createContext } from 'react';\nimport { Facet, Document, Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\n\nexport interface SearchContextProps {\n loading: boolean;\n response?: Search;\n error: boolean;\n documents?: Document[];\n initialFacets?: Facet[];\n queryFilter: QueryFilter;\n onFilterUpdate: (nextQuery: string) => void;\n onLoadMore: () => void;\n onInitialize: (initialQueryParams?: URLSearchParams) => void;\n}\n\nexport const SearchContext = createContext<SearchContextProps>({\n loading: false,\n error: false,\n response: undefined,\n documents: undefined,\n initialFacets: undefined,\n queryFilter: { searchParams: new URLSearchParams() },\n onFilterUpdate: (_) => {},\n onLoadMore: () => {},\n onInitialize: (_) => {},\n});\n", "import React from 'react';\n\nimport { Wrapper, Select, Option, Icon } from './wrapper';\nimport { IconChevronDown } from '../Icon/index';\nimport { DrivingDistance } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\nexport interface OptionProps {\n value: number | string | DrivingDistance;\n displayName?: number | string;\n}\n\ninterface SortSelectProps {\n value: string | number;\n options: OptionProps[];\n unit?: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\nconst SortSelect = ({ value, options, onChange, unit }: SortSelectProps) => {\n const { t } = useTranslation();\n return (\n <Wrapper>\n <Select\n value={value}\n onChange={onChange}\n title={t('search.sortButton.text')}\n aria-label={t('search.sortButton.text')}\n >\n {options.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.displayName || option.value}\n {unit ? ` ${unit}` : ''}\n </Option>\n ))}\n </Select>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Wrapper>\n );\n};\n\nexport default SortSelect;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst iconSize = '0.875rem';\n\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const Select = styled.select.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n position: relative;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n text-indent: 0.01px;\n border: 0;\n padding: 0;\n padding-right: calc(${iconSize} + ${size(1)});\n background-color: transparent;\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n font-size: 16px;\n cursor: pointer;\n z-index: 1;\n\n :focus {\n outline: none;\n text-decoration: underline;\n }\n\n ::-ms-expand {\n display: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\nexport const Option = styled.option`\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const Icon = styled.div`\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n font-size: ${iconSize};\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\ntype SharedIconProps = {\n block?: boolean;\n};\n\ntype IconProps = React.SVGProps<SVGSVGElement> & SharedIconProps;\n\nconst Icon = styled.svg.attrs(() => ({\n xmlns: 'http://www.w3.org/2000/svg',\n}))<IconProps>`\n display: inline-block;\n vertical-align: middle;\n width: 1em;\n height: 1em;\n fill: currentColor;\n\n ${({ block }) =>\n block &&\n css`\n display: block;\n `}\n`;\n\ntype IconInfoProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> &\n SharedIconProps;\n\nexport const IconInfo = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 24 24\" block={block}>\n <path d=\"M12 0C5.371 0 0 5.371 0 12s5.371 12 12 12 12-5.371 12-12S18.629 0 12 0zm0 2c5.5234 0 10 4.4766 10 10s-4.4766 10-10 10S2 17.5234 2 12 6.4766 2 12 2zm0 3.8125c-.1836 0-.336-.004-.5.0313-.164.0351-.3164.125-.4375.2187-.121.0938-.211.2227-.2813.375s-.0937.332-.0937.5625c0 .2266.0234.4063.0938.5625.0703.1563.1601.2813.2812.375.121.0938.2734.1484.4375.1875.164.039.3164.0625.5.0625.1797 0 .371-.0234.5313-.0625.1601-.039.2851-.0938.4062-.1875.121-.0938.211-.2188.2813-.375.0703-.1523.125-.336.125-.5625 0-.2305-.0547-.4102-.125-.5625-.0704-.1523-.1602-.2813-.2813-.375-.121-.0938-.246-.1836-.4063-.2188-.1601-.0351-.3515-.0312-.5312-.0312zm-1.2188 3.3438v8.9687h2.4375V9.1562z\" />\n </Icon>\n);\n\nexport const IconCancel = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.7 14.3c.4.4.4 1 0 1.4-.2.2-.5.3-.7.3s-.5-.1-.7-.3L8 9.4l-6.3 6.3c-.2.2-.4.3-.7.3s-.5-.1-.7-.3c-.4-.4-.4-1 0-1.4L6.6 8 .3 1.7C-.1 1.3-.1.7.3.3c.4-.4 1-.4 1.4 0L8 6.6 14.3.3c.4-.4 1-.4 1.4 0 .4.4.4 1 0 1.4L9.4 8l6.3 6.3z\" />\n </Icon>\n);\n\nexport const IconChevronDown = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M17.7 5L9 13.7.3 5l.7-.7 8 8 8-8 .7.7z\" />\n </Icon>\n);\n\nexport const IconChevronLeft = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M13 17.7L4.3 9 13 .3l.7.7-8 8 8 8-.7.7z\" />\n </Icon>\n);\n\nexport const IconChevronRight = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M5 .3L13.7 9 5 17.7l-.7-.7 8-8-8-8L5 .3z\" />\n </Icon>\n);\n\nexport const IconCheck = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.6 4.3l-9.3 9.4c-.5.5-1.4.5-1.9 0l-4-4c-.5-.5-.5-1.4 0-1.9s1.3-.5 1.9 0l3.1 3.1 8.4-8.5c.5-.5 1.4-.5 1.9 0s.4 1.3-.1 1.9z\" />\n </Icon>\n);\n\nexport const IconRadio = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M13 8c0 2.8-2.2 5-5 5s-5-2.2-5-5 2.2-5 5-5 5 2.2 5 5zm3 0c0 4.4-3.6 8-8 8s-8-3.6-8-8 3.6-8 8-8 8 3.6 8 8zm-1 0c0-3.9-3.1-7-7-7S1 4.1 1 8s3.1 7 7 7 7-3.1 7-7z\" />\n </Icon>\n);\n\nexport const IconSearch = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.5 15.3L11 10.8c1.2-1.1 2-2.7 2-4.5C13 2.9 10.2.1 6.8.1S.5 2.8.5 6.2s2.8 6.2 6.2 6.2c1.3 0 2.5-.4 3.5-1.1l4.6 4.6.7-.6zM1.4 6.2C1.4 3.3 3.8 1 6.7 1S12 3.3 12 6.2c0 1.5-.7 2.9-1.7 3.9l-.7.5c-.8.5-1.8.8-2.8.8-3 .1-5.4-2.3-5.4-5.2z\" />\n </Icon>\n);\n\nexport const IconExclamationCircle = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 32 32\" block={block}>\n <path d=\"M14.482 21.893c0-0.857 0.694-1.551 1.551-1.551s1.551 0.694 1.551 1.551c0 0.857-0.694 1.551-1.551 1.551s-1.551-0.694-1.551-1.551zM16.033 2.838c-7.271 0-13.187 5.916-13.187 13.187s5.916 13.187 13.187 13.187 13.187-5.916 13.187-13.187c0-7.271-5.916-13.187-13.187-13.187zM16.033 27.203c-6.163 0-11.178-5.015-11.178-11.178s5.015-11.178 11.178-11.178c6.164 0 11.178 5.015 11.178 11.178s-5.014 11.178-11.178 11.178zM16.033 8.308c-0.555 0-1.004 0.45-1.004 1.004v8.227c0 0.555 0.45 1.004 1.004 1.004s1.004-0.45 1.004-1.004v-8.227c0-0.555-0.45-1.004-1.004-1.004z\" />\n </Icon>\n);\n\nexport const IconExclamationTriangle = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 32 32\" block={block}>\n <path d=\"M15.951 19.663c-0.457 0-0.828-0.37-0.828-0.828v-4.357c0-0.457 0.37-0.828 0.828-0.828s0.828 0.37 0.828 0.828v4.357c0 0.457-0.371 0.828-0.828 0.828zM15.952 22.906c-0.305 0-0.606-0.126-0.821-0.341s-0.338-0.514-0.338-0.818 0.122-0.606 0.338-0.821c0.431-0.43 1.209-0.43 1.639 0 0.215 0.215 0.341 0.516 0.341 0.821s-0.126 0.603-0.341 0.818c-0.215 0.215-0.513 0.341-0.818 0.341zM27.049 27.070h-22.196c-0.352 0-0.677-0.186-0.855-0.489s-0.184-0.677-0.014-0.985l11.098-20.105c0.175-0.317 0.508-0.513 0.87-0.513s0.695 0.197 0.87 0.513l11.098 20.105c0.17 0.308 0.165 0.683-0.014 0.985s-0.504 0.489-0.856 0.489zM6.536 25.083h18.83l-9.415-17.056-9.415 17.056z\" />\n </Icon>\n);\n\nexport const IconImage = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path\n d=\"M14.4 1.6H1.6C.7 1.6 0 2.3 0 3.2v9.6c0 .9.7 1.6 1.6 1.6h12.8c.9 0 1.6-.7 1.6-1.6V3.2c0-.9-.7-1.6-1.6-1.6zm0 11.2H1.6V3.2h12.8v9.6zM3.2 6c0-.7.5-1.2 1.2-1.2s1.2.5 1.2 1.2-.5 1.2-1.2 1.2S3.2 6.7 3.2 6zm.2 4.5l6.2-4.4c.4-.3.9-.2 1.1.2v.1l2.4 4.2c.1.2 0 .4-.1.5-.1 0-.1.1-.2.1H3.7c-.2 0-.4-.2-.4-.4 0-.1 0-.3.1-.3z\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </Icon>\n);\n", "import i18next from 'i18next';\n\nconst SortOptionDisplayName = {\n PublishedAsc: 'published-asc',\n PublishedDesc: 'published-desc',\n PriceAsc: 'price-asc',\n Pricedesc: 'price-desc',\n ModelAsc: 'model-asc',\n Modeldesc: 'model-desc',\n MileageAsc: 'mileage-asc',\n Mileagedesc: 'mileage-desc',\n};\n\ntype SortOptionDisplayName =\n | 'relevance'\n | 'published-asc'\n | 'published-desc'\n | 'price-asc'\n | 'price-desc'\n | 'model-asc'\n | 'model-desc'\n | 'mileage-asc'\n | 'mileage-desc';\n\nexport const getTranslatedSortOptionDisplayName = (str: string | SortOptionDisplayName): string => {\n switch (str) {\n case SortOptionDisplayName.PublishedAsc:\n return i18next.t('search.sortOptions.publishedAsc');\n case SortOptionDisplayName.PublishedDesc:\n return i18next.t('search.sortOptions.publishedDesc');\n case SortOptionDisplayName.PriceAsc:\n return i18next.t('search.sortOptions.priceAsc');\n case SortOptionDisplayName.Pricedesc:\n return i18next.t('search.sortOptions.priceDesc');\n case SortOptionDisplayName.ModelAsc:\n return i18next.t('search.sortOptions.modelAsc');\n case SortOptionDisplayName.Modeldesc:\n return i18next.t('search.sortOptions.modelDesc');\n case SortOptionDisplayName.MileageAsc:\n return i18next.t('search.sortOptions.mileageAsc');\n case SortOptionDisplayName.Mileagedesc:\n return i18next.t('search.sortOptions.mileageDesc');\n default:\n return str;\n }\n};\n", "import React, { useState, useCallback } from 'react';\n\nimport { List, Item, Action, Label, Indicator, IndicatorValue } from './wrapper';\nimport { Facet } from '../../@types/search';\nimport {\n PRICE,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n BUSINESS_LEASING_PRICE,\n} from '../../utils/constants';\nimport useSearch from '../../State/Search/useSearch';\nimport { SearchFilterTypes, SearchFilterNameTypes } from '../../@types/filter';\nimport FilterPanel from '../FilterPanel/index';\nimport { useTranslation } from 'react-i18next';\nimport { MarketCode } from '../../@types/market';\n\nconst isSelected = (f: Facet, searchParams: URLSearchParams) => {\n switch (f.id) {\n case PRICE:\n case MILEAGE:\n case LEASING_PRICE:\n case BUSINESS_LEASING_PRICE:\n case MODEL_YEAR:\n return searchParams.has(`${f.id}.min`) || searchParams.has(`${f.id}.max`) ? 1 : 0;\n default:\n return f.filters.filter((filter) => filter.selected).length;\n }\n};\n\nconst filterOdometer = (\n id: string,\n marketCode: MarketCode = 'SE',\n filterList?: SearchFilterNameTypes[]\n) => {\n if (filterList) return true;\n\n if (id === 'mileage') {\n return marketCode === 'SE' ? true : false;\n }\n\n if (id === 'odometerValueAsKm') {\n return marketCode === 'NO' ? true : false;\n }\n return true;\n};\n\ninterface FilterProps {\n marketCode?: MarketCode;\n filterList?: SearchFilterTypes[];\n}\n\nconst Filter = ({ marketCode, filterList }: FilterProps) => {\n const { t } = useTranslation();\n const { queryFilter, initialFacets, loading, response, onFilterUpdate } = useSearch();\n\n const facets = response?.facets;\n\n const [facet, setFacet] = useState<Facet>();\n const onSelectFacet = useCallback((nextFacet: Facet) => setFacet(nextFacet), []);\n const onClose = useCallback(() => setFacet(undefined), []);\n\n if (!facets) {\n return null;\n }\n const filterNames = filterList ? filterList.map((x) => x.filterName) : undefined;\n\n const filteredFacets = facets\n ?.filter((x) => x.id !== 'segment' && filterOdometer(x.id, marketCode, filterNames))\n ?.filter((f) => (filterNames ? filterNames.includes(f.id as SearchFilterNameTypes) : true))\n .sort((a, b) =>\n filterNames\n ? filterNames.indexOf(a.id as SearchFilterNameTypes) -\n filterNames.indexOf(b.id as SearchFilterNameTypes)\n : 0\n )\n .map((x) => {\n const match = filterList?.find((y) => y.filterName === x.id);\n if (match?.displayName) {\n return {\n ...x,\n displayName: match.displayName,\n };\n }\n return {\n ...x,\n displayName: t(`filter.${x.id}`),\n };\n });\n\n return (\n <>\n {initialFacets && facet && (\n <FilterPanel\n filterList={filterList}\n facet={facet}\n loading={loading}\n filteredFacets={filteredFacets}\n numberOfHits={response?.documentList.numberOfHits || 0}\n onFilterUpdate={onFilterUpdate}\n onClose={onClose}\n />\n )}\n <List>\n {filteredFacets\n .filter((x) => x.filters.length)\n .map((f) => {\n const selected = isSelected(f, queryFilter.searchParams);\n return (\n <Item key={f.id}>\n <Action\n onClick={() => onSelectFacet(f)}\n title={f.displayName}\n aria-label={f.displayName}\n className={\n selected > 0\n ? 'wayke__theme wayke__color--primary-bg wayke__font--bold'\n : 'wayke__theme wayke__font--regular'\n }\n >\n <Label>{f.displayName}</Label>\n {selected > 0 && (\n <Indicator>\n <IndicatorValue>{selected}</IndicatorValue>\n </Indicator>\n )}\n </Action>\n </Item>\n );\n })}\n </List>\n </>\n );\n};\n\nexport default Filter;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-0.5)};\n`;\n\nexport const Item = styled.li`\n padding: ${size(0.5)};\n`;\n\nexport const Action = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n padding: ${size(1.5)} ${size(3)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n font-size: 0.875rem;\n line-height: 1;\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Label = styled.div`\n z-index: 1;\n`;\n\nexport const Indicator = styled.div`\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${size(0.375)};\n margin-left: ${size(0.5)};\n background-color: currentColor;\n min-width: 1em;\n height: 1em;\n border-radius: 999px;\n z-index: 1;\n`;\n\nexport const IndicatorValue = styled.div`\n font-family: sans-serif; // Default font to guarantee visibility\n font-size: 0.75rem;\n font-weight: bold;\n color: white;\n mix-blend-mode: difference;\n`;\n", "import React, { useCallback } from 'react';\n\nimport { Facet } from '../../@types/search';\nimport Panel from '../Panel/index';\nimport { FooterAction, FooterActionItem } from '../Panel/wrapper';\nimport { ButtonSecondary, ButtonContent, ButtonPrimary } from '../Button/index';\nimport Accordion, { AccordionItem } from '../Accordion/index';\nimport { Repeat } from '../Repeat/index';\nimport FacetSelector from './faceSelector';\nimport { SearchFilterTypes } from '../../@types/filter';\nimport { useTranslation } from 'react-i18next';\n\nexport interface FilterProps {\n label: string;\n activeFilters?: number;\n}\n\nexport interface Props {\n facet?: Facet;\n loading: boolean;\n filteredFacets: Facet[];\n filterList?: SearchFilterTypes[];\n numberOfHits: number;\n onClose: () => void;\n onFilterUpdate: (nextQuery: string) => void;\n}\n\nconst FilterPanel = ({\n facet,\n filteredFacets,\n numberOfHits,\n loading,\n onFilterUpdate,\n onClose,\n}: Props) => {\n const { t } = useTranslation();\n const onClearFilters = useCallback(() => onFilterUpdate(''), []);\n\n return (\n <Panel\n title={t('search.filter')}\n onClose={onClose}\n footer={\n <>\n <FooterAction>\n <FooterActionItem>\n <ButtonSecondary fullWidth disabled={loading} onClick={onClearFilters}>\n <ButtonContent>{t('search.clearAllFilters.text')}</ButtonContent>\n </ButtonSecondary>\n </FooterActionItem>\n <FooterActionItem>\n <ButtonPrimary fullWidth disabled={loading} onClick={onClose}>\n <ButtonContent>\n {t('search.showNumberOfCustomUnit', {\n count: numberOfHits || 0,\n unit: t(`search.result.${(numberOfHits || 0) === 1 ? 'singular' : 'plural'}`),\n })}\n </ButtonContent>\n </ButtonPrimary>\n </FooterActionItem>\n </FooterAction>\n </>\n }\n >\n <Accordion>\n {filteredFacets\n .filter((x) => x.filters.length)\n .map((f) => (\n <AccordionItem\n key={f.displayName}\n heading={f.displayName}\n isActive={f.id === facet?.id}\n >\n <Repeat>\n <FacetSelector facet={f} />\n </Repeat>\n </AccordionItem>\n ))}\n </Accordion>\n </Panel>\n );\n};\n\nexport default FilterPanel;\n", "import * as React from 'react';\n\nimport {\n PanelWrapper,\n Close,\n CloseBtn,\n Header,\n Heading,\n Body,\n Footer,\n UiBlock,\n Wrapper,\n} from './wrapper';\nimport { Portal, PortalNamespace } from '../Portal/index';\nimport { H1 } from '../Heading/index';\nimport { IconCancel } from '../Icon/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface IPanelPortal {\n id?: string | null;\n title: string | null;\n onClose: () => void;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nconst Panel = ({ id, title, footer, onClose, children }: IPanelPortal) => {\n const { t } = useTranslation();\n return (\n <Portal id={id || PortalNamespace.DefaultPortal}>\n <Wrapper>\n <UiBlock title={t('other.closePanel') || ''} onClick={onClose} />\n <PanelWrapper>\n <Header>\n <Heading>\n <H1 noMargin>{title}</H1>\n </Heading>\n <Close>\n <CloseBtn title={t('other.closePanel') || ''} onClick={onClose}>\n <IconCancel block />\n </CloseBtn>\n </Close>\n </Header>\n <Body>{children}</Body>\n {footer && <Footer>{footer}</Footer>}\n </PanelWrapper>\n </Wrapper>\n </Portal>\n );\n};\n\nexport default Panel;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { fadeIn, noTransform } from '../../layout/keyframes';\nimport { ButtonReset } from '../Button/index';\nimport { H1 } from '../Heading/index';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'dialog',\n}))`\n position: relative;\n z-index: 80;\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n 'aria-hidden': 'true',\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.35);\n animation: ${fadeIn} 200ms ease;\n`;\n\nexport const PanelWrapper = styled.article.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n display: flex;\n flex-direction: column;\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n width: 100%;\n background-color: ${(props) => props.theme.color.accent};\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);\n z-index: 1;\n animation: ${noTransform} 200ms ease forwards;\n\n ${(props) => props.theme.breakpoint.Sm} {\n max-width: 450px;\n transform: translateX(100%);\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n top: auto;\n max-height: 100%;\n transform: translateY(100%);\n }\n`;\n\nexport const Header = styled.header`\n position: relative;\n display: flex;\n flex-shrink: 0;\n align-items: center;\n min-height: 45px;\n padding: ${size(3)};\n padding-bottom: 0;\n\n :after {\n content: '';\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n height: ${size(3)};\n background-image: linear-gradient(\n ${(props) => props.theme.color.accent},\n ${(props) => props.theme.color.accentTransparent}\n );\n z-index: 1;\n }\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n\n ${H1} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Close = styled.div`\n flex-shrink: 0;\n margin: ${size(-2)};\n padding-left: ${size(3)};\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n position: relative;\n display: block;\n padding: ${size(2)};\n transform-origin: 50% 50%;\n transition: transform 200ms ease;\n z-index: 2;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accent};\n opacity: 0;\n transition: opacity 200ms ease;\n z-index: -1;\n }\n\n :active {\n transform: scale(0.9);\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Body = styled.div`\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: ${size(3)};\n`;\n\nexport const Footer = styled.footer`\n position: relative;\n flex-shrink: 0;\n padding: ${size(3)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n`;\n\nexport const FooterAction = styled.div.attrs(() => ({\n role: 'group',\n}))`\n display: flex;\n align-items: center;\n margin: ${size(-0.5)};\n`;\n\nexport const FooterActionItem = styled.div`\n flex: 1 1 50%;\n padding: ${size(0.5)};\n\n ${ButtonReset} {\n padding: ${size(1.75)} ${size(2)};\n }\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype HeadingBaseProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n noMargin?: boolean;\n};\n\nconst HeadingBase = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))<HeadingBaseProps>`\n margin-top: 0;\n margin-bottom: ${size(2)};\n font-weight: normal;\n line-height: 1.2;\n\n ${({ noMargin }) =>\n noMargin &&\n css`\n margin-bottom: 0;\n `}\n`;\n\nexport const H1 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h1',\n}))`\n font-size: 1.875rem;\n`;\n\nexport const H2 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h2',\n}))`\n font-size: 1.5rem;\n`;\n\nexport const H3 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h3',\n}))`\n font-size: 1.125rem;\n`;\n\nexport const H4 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h4',\n}))`\n font-size: 1rem;\n`;\n\nexport const H5 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h5',\n}))`\n font-size: 0.875rem;\n`;\n\n/*\nexport const H6 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h6',\n}))`\n font-size: 0.67rem;\n`;\n*/\n\nexport const VisualHeading = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1em;\n`;\n", "export const DefaultPortal = 'DEFAULT_PORTAL';\n", "import * as React from 'react';\n\nexport interface IPortalElement {\n id: string;\n}\n\nconst PortalElement = ({ id }: IPortalElement) => <div id={id} />;\n\nexport default PortalElement;\n", "import React from 'react';\nimport ReactDOM from 'react-dom';\n\nexport interface IPortal {\n id: string;\n children: React.ReactNode;\n}\n\nconst Portal = ({ id, children }: IPortal) => {\n const el = React.useRef(document.getElementById(id) || document.createElement('div'));\n if (!el.current) {\n return null;\n }\n\n const { current } = el;\n\n const [dynamic] = React.useState(!current.parentElement);\n\n React.useEffect(() => {\n if (dynamic) {\n current.id = id;\n if (document.body) {\n document.body.appendChild(current);\n }\n }\n return () => {\n if (dynamic && current.parentElement) {\n current.parentElement.removeChild(current);\n }\n };\n }, [id]);\n\n return ReactDOM.createPortal(children, current);\n};\n\nexport default React.memo<IPortal>(Portal);\n", "import React, { useState, useCallback } from 'react';\n\nimport {\n List,\n Item,\n Header,\n Label,\n Heading,\n Indicator,\n IndicatorValue,\n Icon,\n Body,\n} from './wrapper';\nimport { IconChevronDown } from '../Icon/index';\nimport { useTranslation } from 'react-i18next';\n\nexport interface IAccordionItem {\n heading: string;\n activeCount?: number;\n children: React.ReactNode;\n isActive?: boolean;\n}\n\nexport interface IAccordion {\n children?: React.ReactNode;\n}\n\nexport const AccordionItem = ({ heading, children, activeCount, isActive }: IAccordionItem) => {\n const { t } = useTranslation();\n const [extend, setExtend] = useState(isActive || false);\n const onToggleExtend = useCallback(() => setExtend(!extend), [extend]);\n\n return (\n <Item isOpen={extend}>\n <Header onClick={onToggleExtend} title={t('common.showMore') || ''}>\n <Label>\n <Heading\n className={activeCount && activeCount > 0 ? 'wayke__theme wayke__font--bold' : ''}\n >\n {heading}\n </Heading>\n {activeCount && activeCount > 0 && (\n <Indicator>\n <IndicatorValue>{activeCount}</IndicatorValue>\n </Indicator>\n )}\n </Label>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Header>\n <Body>{children}</Body>\n </Item>\n );\n};\n\nconst Accordion = ({ children }: IAccordion) => <List>{children}</List>;\n\nexport default Accordion;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: ${size(-1)} 0;\n font-size: 1rem;\n`;\n\nexport const Header = styled(ButtonReset)`\n display: flex;\n align-items: center;\n width: 100%;\n padding: ${size(3)} 0;\n text-align: left;\n font: inherit;\n`;\n\nexport const Label = styled.div`\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n`;\n\nexport const Heading = styled.div`\n line-height: 1;\n`;\n\nexport const Indicator = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${size(0.375)};\n margin-left: ${size(0.5)};\n min-width: 1em;\n height: 1em;\n border-radius: 999px;\n z-index: 1;\n`;\n\nexport const IndicatorValue = styled.div`\n font-family: sans-serif; // Default font to guarantee visibility\n font-size: 0.75rem;\n font-weight: bold;\n`;\n\nexport const Icon = styled.div`\n position: relative;\n flex-shrink: 0;\n padding-left: ${size(1)};\n transition: color 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-1)};\n bottom: ${size(-1)};\n left: 0;\n right: ${size(-1)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accent};\n z-index: -1;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n ${Header}:hover & {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Body = styled.div`\n display: none;\n padding-bottom: ${size(3)};\n`;\n\ntype ItemProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLLIElement>, HTMLLIElement> & {\n isOpen?: boolean;\n};\n\nexport const Item = styled.li<ItemProps>`\n & + & {\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n\n ${({ isOpen }) =>\n isOpen &&\n css`\n ${Body} {\n display: block;\n }\n\n ${Icon} {\n svg {\n transform: rotate(180deg);\n }\n }\n `}\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Repeat = styled.div`\n & + & {\n margin-top: ${size(3)};\n }\n`;\n\nexport const RepeatTiny = styled.div`\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const RepeatSmall = styled.div`\n & + & {\n margin-top: ${size(2)};\n }\n`;\n", "import React from 'react';\n\nimport { Facet } from '../../@types/search';\nimport CheckListFacet from './checkListFacet';\nimport ColorSelectFacet from './colorFacet';\nimport RangeFacet from './rangeFacet';\nimport {\n MANUFACTURER,\n MODEL_SERIES,\n FUEL_TYPE,\n GEARBOX_TYPE,\n ENVIRONMENT_CLASS,\n SEGMENT,\n DRIVING_WHEEL,\n COLOR,\n PRICE,\n BRANCH,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n BUSINESS_LEASING_PRICE,\n ODOMETER_VALUE_AS_KM,\n} from '../../utils/constants';\nimport { useTranslation } from 'react-i18next';\n\ninterface FacetSelectorProps {\n facet: Facet;\n}\n\nconst FacetSelector = ({ facet }: FacetSelectorProps) => {\n const { t } = useTranslation();\n switch (facet.id) {\n case MANUFACTURER:\n case MODEL_SERIES:\n case FUEL_TYPE:\n case GEARBOX_TYPE:\n case BRANCH:\n case ENVIRONMENT_CLASS:\n case SEGMENT:\n case DRIVING_WHEEL:\n return <CheckListFacet facet={facet} />;\n case COLOR:\n return <ColorSelectFacet facet={facet} />;\n case PRICE:\n return <RangeFacet facet={facet} unit={t('currency.default')} formatValues />;\n case BUSINESS_LEASING_PRICE:\n case LEASING_PRICE:\n return <RangeFacet facet={facet} unit={t('currency.monthly')} formatValues />;\n case ODOMETER_VALUE_AS_KM:\n return <RangeFacet facet={facet} unit={t('odometer.Kilometer')} formatValues />;\n case MILEAGE:\n return <RangeFacet facet={facet} unit={t('odometer.ScandinavianMile')} formatValues />;\n case MODEL_YEAR:\n return <RangeFacet facet={facet} unit=\"\u00E5r\" />;\n default:\n return null;\n }\n};\n\nexport default FacetSelector;\n", "import React, { useState, useEffect, useCallback } from 'react';\nimport Checklist from '../Checklist/index';\nimport OverflowBox from '../OverflowBox/index';\nimport { Facet, FacetFilter } from '../../@types/search';\nimport useSearch from '../../State/Search/useSearch';\n\ninterface ChecklistFacetProps {\n facet: Facet;\n}\n\nconst ChecklistFacet = ({ facet }: ChecklistFacetProps) => {\n const { loading, error, onFilterUpdate } = useSearch();\n const [selected, setSelected] = useState<{ [key: string]: boolean }>();\n useEffect(() => {\n setSelected(undefined);\n }, [facet, error]);\n\n const onClick = useCallback(\n (f: FacetFilter) => {\n if (!loading) {\n setSelected({\n ...selected,\n [f.displayName]: !f.selected,\n });\n onFilterUpdate(f.query);\n }\n },\n [loading]\n );\n\n return (\n <OverflowBox>\n <Checklist\n items={facet.filters\n .sort((a, b) => a.displayName.localeCompare(b.displayName))\n .map((f) => ({\n label: f.displayName,\n onClick: () => onClick(f),\n active: selected?.[f.displayName] !== undefined ? selected[f.displayName] : f.selected,\n }))}\n />\n </OverflowBox>\n );\n};\n\nexport default ChecklistFacet;\n", "import React from 'react';\n\nimport { List, Item, Action, ActionIcon, ActionLabel } from './wrapper';\nimport { IconCheck, IconRadio } from '../Icon/index';\n\nexport interface IChecklistItem {\n label: string;\n onClick: () => void;\n active?: boolean;\n radio?: boolean;\n}\n\nexport interface IChecklist {\n items: IChecklistItem[];\n radio?: boolean;\n}\n\nconst ChecklistItem = ({ label, onClick, active, radio }: IChecklistItem) => (\n <Item>\n <Action onClick={onClick}>\n {active && <ActionIcon>{radio ? <IconRadio block /> : <IconCheck block />}</ActionIcon>}\n <ActionLabel\n className={active ? 'wayke__theme wayke__font--bold wayke__color--primary-text' : ''}\n >\n {label}\n </ActionLabel>\n </Action>\n </Item>\n);\n\nconst Checklist = ({ items, radio }: IChecklist) => {\n if (!items?.length) {\n return null;\n }\n\n return (\n <List>\n {items.map((item) => (\n <ChecklistItem\n key={item.label}\n label={item.label}\n onClick={item.onClick}\n active={item.active}\n radio={radio}\n />\n ))}\n </List>\n );\n};\n\nexport default Checklist;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n list-style: none;\n padding: 0;\n margin: ${size(-1)} 0;\n font-size: 0.875rem;\n overflow: hidden;\n`;\n\nexport const Item = styled.li`\n ${List} {\n padding-left: ${size(5)};\n margin: 0;\n }\n`;\n\nexport const Action = styled(ButtonReset)`\n position: relative;\n display: block;\n width: 100%;\n text-align: left;\n font: inherit;\n padding: ${size(1)} 0;\n\n :before {\n content: '';\n position: absolute;\n left: 0;\n width: ${size(2)};\n height: ${size(2)};\n border-radius: 3px;\n background-color: ${(props) => props.theme.color.accentDark};\n margin-top: 2px; // Magic number\n }\n`;\n\nexport const ActionIcon = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: absolute;\n top: ${size(1)};\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(2)};\n height: ${size(2)};\n margin-top: 2px; // Magic number\n font-size: ${size(1.5)};\n`;\n\nexport const ActionLabel = styled.div`\n padding-left: ${size(3)};\n transition: transform 150ms ease;\n\n ${Action}:hover & {\n transform: translateX(${size(0.5)});\n }\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface IProps {\n children?: React.ReactNode;\n}\n\nconst OverflowBox = ({ children }: IProps) => <Wrapper>{children}</Wrapper>;\n\nexport default OverflowBox;\n", "import styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n max-height: 400px;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n", "import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Facet, FacetFilter } from '../../@types/search';\nimport ColorSelect from '../ColorSelect/index';\nimport useSearch from '../../State/Search/useSearch';\nimport { getHexColorFromDisplayName } from '../../utils/converters';\n\ninterface ColorSelectFacetProps {\n facet: Facet;\n}\n\nconst ColorSelectFacet = ({ facet }: ColorSelectFacetProps) => {\n const { loading, error, onFilterUpdate } = useSearch();\n const [selected, setSelected] = useState<{ [key: string]: boolean }>();\n\n useEffect(() => {\n setSelected(undefined);\n }, [facet, error]);\n\n const onClick = useCallback(\n (f: FacetFilter) => {\n if (!loading) {\n setSelected({\n ...selected,\n [f.displayName]: !f.selected,\n });\n onFilterUpdate(f.query);\n }\n },\n [loading]\n );\n\n return (\n <ColorSelect\n items={facet.filters\n .sort((a, b) => a.displayName.localeCompare(b.displayName))\n .map((f) => ({\n label: f.displayName,\n onClick: () => onClick(f),\n active: selected?.[f.displayName] !== undefined ? selected[f.displayName] : f.selected,\n hex: [getHexColorFromDisplayName(f.displayName)],\n }))}\n />\n );\n};\n\nexport default ColorSelectFacet;\n", "import React from 'react';\n\nimport { List, Item, Action, Color, Label } from './wrapper';\n\nexport interface ItemProps {\n label: string;\n hex: string[];\n onClick?: () => void;\n active?: boolean;\n disabled?: boolean;\n boxShadow?: boolean;\n}\n\nexport interface Props {\n items?: ItemProps[];\n}\n\nconst ColorSelectItem = ({ label, hex, onClick, active, disabled, boxShadow }: ItemProps) => {\n return (\n <Item>\n <Action onClick={onClick} disabled={disabled} title={label} aria-label={label}>\n <Color\n style={{\n backgroundColor: hex.length === 1 ? hex[0] : '',\n backgroundImage: hex.length > 1 ? `linear-gradient(${hex.join()})` : '',\n }}\n active={active}\n boxShadow={boxShadow}\n className={active ? 'wayke__theme wayke__color--primary-text' : ''}\n />\n <Label\n className={active ? 'wayke__theme wayke__color--primary-text wayke__font--bold' : ''}\n >\n {label}\n </Label>\n </Action>\n </Item>\n );\n};\n\nconst ColorSelect = ({ items }: Props) => {\n if (!items) {\n return null;\n }\n\n return (\n <List>\n {items.map((item) => (\n <ColorSelectItem\n key={item.label}\n label={item.label}\n hex={item.hex}\n onClick={item.onClick}\n active={item.active}\n disabled={item.disabled}\n boxShadow={item.boxShadow}\n />\n ))}\n </List>\n );\n};\n\nexport default ColorSelect;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-1.5)};\n`;\n\nexport const Item = styled.li`\n flex: 1 1 auto;\n width: 33.333%;\n max-width: 33.333%;\n padding: ${size(1.5)};\n`;\n\nexport const Action = styled(ButtonReset)`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n font: inherit;\n\n &[disabled] {\n opacity: 0.4;\n cursor: default;\n }\n`;\n\ntype ColorProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n active?: boolean;\n boxShadow?: boolean;\n};\n\nexport const Color = styled.div<ColorProps>`\n position: relative;\n width: ${size(3.75)};\n height: ${size(3.75)};\n border-radius: 50%;\n color: ${(props) => props.theme.color.border};\n\n :before {\n content: '';\n position: absolute;\n top: -5px;\n bottom: -5px;\n left: -5px;\n right: -5px;\n border: 2px solid;\n border-radius: 50%;\n display: none;\n }\n\n ${Action}:not([disabled]):hover & {\n :before {\n display: block;\n }\n }\n\n ${({ active }) =>\n active &&\n css`\n :before {\n display: block;\n }\n `}\n\n ${({ boxShadow }) =>\n boxShadow &&\n css`\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);\n `}\n`;\n\nexport const Label = styled.div`\n margin-top: ${size(1.25)};\n font-size: 0.875rem;\n`;\n", "import {\n COLOR_WHITE,\n COLOR_BLACK,\n COLOR_GRAY,\n COLOR_SILVER,\n COLOR_BLUE,\n COLOR_RED,\n COLOR_BROWN,\n COLOR_GREEN,\n COLOR_ORANGE,\n COLOR_YELLOW,\n COLOR_PURPLE,\n COLOR_BEIGE,\n} from './constants';\n\nexport const getHexColorFromDisplayName = (displayName: string) => {\n switch (displayName) {\n case COLOR_WHITE.displayName:\n return COLOR_WHITE.hex;\n case COLOR_BLACK.displayName:\n return COLOR_BLACK.hex;\n case COLOR_GRAY.displayName:\n return COLOR_GRAY.hex;\n case COLOR_SILVER.displayName:\n return COLOR_SILVER.hex;\n case COLOR_BLUE.displayName:\n return COLOR_BLUE.hex;\n case COLOR_RED.displayName:\n return COLOR_RED.hex;\n case COLOR_BROWN.displayName:\n return COLOR_BROWN.hex;\n case COLOR_GREEN.displayName:\n return COLOR_GREEN.hex;\n case COLOR_ORANGE.displayName:\n return COLOR_ORANGE.hex;\n case COLOR_YELLOW.displayName:\n return COLOR_YELLOW.hex;\n case COLOR_PURPLE.displayName:\n return COLOR_PURPLE.hex;\n case COLOR_BEIGE.displayName:\n return COLOR_BEIGE.hex;\n default:\n return '#fff';\n }\n};\n", "import React, { useCallback, useState, useEffect } from 'react';\nimport { Facet } from '../../@types/search';\nimport RangeSlider from '../RangeSlider/index';\nimport useSearch from '../../State/Search/useSearch';\n\ninterface RangeFacetProps {\n facet: Facet;\n unit?: string;\n formatValues?: boolean;\n}\n\nconst getInitialValues = (domain: number[], facet: Facet, searchParams: URLSearchParams) => {\n const facetMin = domain[0]; //parseInt(facet.filters[0].displayName, 10);\n const _queryMin = searchParams?.get(`${facet.id}.min`) || null;\n const facetMax = domain[domain.length - 1]; //parseInt(facet.filters[facet.filters.length - 1].displayName, 10);\n const _queryMax = searchParams?.get(`${facet.id}.max`) || null;\n\n const queryMin = parseInt(_queryMin === null ? `${facetMin}` : _queryMin, 10);\n const min = facetMin > queryMin ? facetMin : queryMin;\n const queryMax = parseInt(_queryMax === null ? `${facetMax}` : _queryMax, 10);\n const max = queryMax > facetMax ? facetMin : queryMax;\n\n return min || max ? [min ? min : domain[0], max ? max : domain[1]] : domain;\n};\n\nconst averageDelta = ([x, ...xs]: number[]) => {\n if (x === undefined) return NaN;\n\n return xs.reduce(([acc, last], x) => [acc + (x - last), x], [0, x])[0] / xs.length;\n};\n\nconst getSteps = (initialAllValues: number[]) => {\n const delta = averageDelta(initialAllValues);\n const max = Math.floor(initialAllValues[initialAllValues.length - 1] * 1000) / 1000;\n if (delta > 1000) return new Array(max / 1000 + 1).fill('').map((x, i) => i * 1000);\n if (delta <= 1000 && delta >= 500)\n return new Array(max / 500 + 1).fill('').map((x, i) => i * 500);\n return initialAllValues;\n};\n\nconst RangeFacet = ({ facet, unit, formatValues }: RangeFacetProps) => {\n const { loading, queryFilter, initialFacets, onFilterUpdate } = useSearch();\n const initialFacet = initialFacets?.find((x) => x.id === facet.id);\n const maxPrefix =\n initialFacet?.filters[initialFacet?.filters.length - 1]?.displayName?.includes('+');\n const [state, setValues] = useState<\n { id: string | undefined; steps: number[]; domain: number[]; values: number[] } | undefined\n >(undefined);\n\n useEffect(() => {\n const _initialAllValues = initialFacet?.filters.map((f) =>\n parseInt(f.displayName.replace(/[\\<\\>+-]+/g, ''), 10)\n ) || [1, 2];\n\n const _steps = getSteps(_initialAllValues);\n const domain = [_steps[0], _steps[_steps.length - 1]];\n\n setValues({\n id: initialFacet?.id,\n steps: _steps,\n domain: [_steps[0], _steps[_steps.length - 1]],\n values: initialFacet?.filters.length\n ? getInitialValues(domain, initialFacet, queryFilter.searchParams)\n : [0, 0],\n });\n }, [initialFacet?.id]);\n\n useEffect(() => {\n if (state?.id) {\n const init = initialFacet?.filters.length\n ? getInitialValues(state.domain, initialFacet, queryFilter.searchParams)\n : [0, 0];\n const minStr = queryFilter.searchParams?.get(`${facet.id}.min`);\n const maxStr = queryFilter.searchParams?.get(`${facet.id}.max`);\n\n const min = minStr ? parseFloat(minStr) : init[0];\n const max = maxStr ? parseFloat(maxStr) : init[1];\n if (min !== state.values[0] || max !== state.values[1]) {\n onChange([min, max]);\n }\n }\n }, [queryFilter.searchParams?.toString()]);\n\n const onChange = useCallback(\n (nextValues: readonly number[]) => {\n if (state?.id) {\n if (state.values[0] !== nextValues[0] || state.values[1] !== nextValues[1]) {\n setValues({ ...state, values: nextValues.slice() });\n const query = new URLSearchParams(queryFilter.searchParams);\n query.set('hits', '30');\n query.delete(`${facet.id}.min`);\n query.delete(`${facet.id}.max`);\n\n if (nextValues[0] !== state.domain[0]) {\n query.set(`${facet.id}.min`, `${nextValues[0]}`);\n }\n\n if (nextValues[1] !== state.domain[1]) {\n query.set(`${facet.id}.max`, `${nextValues[1]}`);\n }\n\n query.sort();\n onFilterUpdate(query.toString());\n }\n }\n },\n [queryFilter.searchParams, state]\n );\n\n return (\n <>\n {state && (\n <RangeSlider\n loading={loading}\n domain={state.domain}\n values={state.values}\n maxPrefix={maxPrefix ? '+' : undefined}\n steps={state.steps}\n unit={unit}\n onChange={onChange}\n formatValues={formatValues}\n />\n )}\n </>\n );\n};\n\nexport default RangeFacet;\n", "import React, { useState, useCallback, useEffect } from 'react';\nimport { Slider, Rail, Handles, Tracks } from 'react-compound-slider';\n\nimport {\n Bar,\n RangeSpan,\n RangeSpanItem,\n Slider as OwnSlider,\n Track as OwnTrack,\n Handle as OwnHandle,\n} from './wrapper';\nimport { Handle } from './handle';\nimport { Track } from './track';\nimport { numberSeparator } from '../../utils/formats';\n\nconst getSteps = (steps: number[]) => {\n let current = Number.MAX_SAFE_INTEGER;\n steps.forEach((step, index) => {\n if (index !== 0) {\n const c = step - steps[index - 1];\n if (c < current) {\n current = c;\n }\n }\n });\n return current;\n};\n\ninterface RangeSliderProps {\n loading: boolean;\n domain: number[];\n values: number[];\n steps: number[];\n unit?: string;\n formatValues?: boolean;\n maxPrefix?: string;\n onChange: (values: readonly number[]) => void;\n}\n\nconst RangeSlider = ({\n loading,\n values,\n domain,\n steps,\n unit,\n formatValues,\n maxPrefix,\n onChange,\n}: RangeSliderProps) => {\n const [current, setCurrent] = useState<number[]>(values);\n const onUpdate = useCallback(\n (nextValues: readonly number[]) => {\n if (!isNaN(nextValues[0]) && !isNaN(nextValues[1])) {\n setCurrent(nextValues.slice());\n }\n },\n [values]\n );\n\n const step = getSteps(steps);\n\n const currentMin = formatValues ? numberSeparator(current[0]) : current[0];\n const currentMax = formatValues ? numberSeparator(current[1]) : current[1];\n const equal = domain[0] === domain[1];\n const _maxPrefix = maxPrefix && domain[1] === current[1] ? maxPrefix : undefined;\n\n useEffect(() => {\n if (values[0] !== current[0] || values[1] !== current[1]) {\n setCurrent(values);\n }\n }, [values]);\n\n return (\n <>\n {equal ? (\n <OwnSlider>\n <Bar>\n <OwnTrack style={{ left: '0', width: '100%' }} />\n <OwnHandle role=\"slider\" aria-disabled style={{ left: '0' }} />\n <OwnHandle role=\"slider\" aria-disabled style={{ left: '100%' }} />\n </Bar>\n </OwnSlider>\n ) : (\n <OwnSlider>\n <Slider\n disabled={loading}\n mode={1}\n step={step}\n domain={domain}\n onChange={onChange}\n onUpdate={onUpdate}\n values={values}\n rootStyle={{ position: 'relative' }}\n >\n <Rail>{({ getRailProps }) => <Bar {...getRailProps()} />}</Rail>\n <Handles>\n {({ handles, getHandleProps }) => (\n <div className=\"slider-handles\">\n {handles.map((handle) => (\n <Handle\n key={handle.id}\n handle={handle}\n domain={domain}\n getHandleProps={getHandleProps}\n />\n ))}\n </div>\n )}\n </Handles>\n <Tracks left={false} right={false}>\n {({ tracks, getTrackProps }) => (\n <div className=\"slider-tracks\">\n {tracks.map(({ id, source, target }) => (\n <Track key={id} source={source} target={target} getTrackProps={getTrackProps} />\n ))}\n </div>\n )}\n </Tracks>\n </Slider>\n </OwnSlider>\n )}\n <RangeSpan>\n <RangeSpanItem>{`${currentMin}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n <RangeSpanItem>{`${currentMax}${_maxPrefix ? _maxPrefix : ''}${\n unit ? ` ${unit}` : ''\n }`}</RangeSpanItem>\n </RangeSpan>\n </>\n );\n};\n\nexport default RangeSlider;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const RangeSpan = styled.div`\n display: flex;\n align-items: center;\n margin-top: ${size(1)};\n user-select: none;\n`;\n\nexport const RangeSpanItem = styled.div`\n font-size: 0.875rem;\n color: ${(props) => props.theme.color.textDarkLighten};\n\n :first-child {\n flex: 1 1 auto;\n }\n\n :last-child {\n flex-shrink: 0;\n }\n`;\n\nexport const Slider = styled.div`\n padding: 10px 12px;\n`;\n\nexport const Bar = styled.div`\n position: relative;\n height: 4px;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -12px;\n right: -12px;\n background-color: ${(props) => props.theme.color.accentDark};\n }\n`;\n\nexport const Track = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n position: absolute;\n top: 0;\n height: 4px;\n margin-left: -12px;\n margin-right: -12px;\n`;\n\nexport const Handle = styled.div.attrs(() => ({\n role: 'slider',\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n position: absolute;\n top: 50%;\n transform-origin: 50% 50%;\n display: block;\n width: 24px;\n height: 24px;\n margin-top: -12px;\n margin-left: -12px;\n border-radius: 50%;\n cursor: move;\n cursor: ew-resize;\n cursor: -webkit-grab;\n cursor: grab;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 50%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :active {\n transform: scale(1.3);\n\n :before {\n opacity: 1;\n }\n }\n`;\n", "import React from 'react';\nimport { Handle as OwnHandle } from './wrapper';\nimport { SliderItem, GetHandleProps } from 'react-compound-slider';\n\ninterface IHandleProps {\n domain: number[];\n handle: SliderItem;\n getHandleProps: GetHandleProps;\n}\n\nexport const Handle = ({\n domain: [min, max],\n handle: { id, value, percent },\n getHandleProps,\n}: IHandleProps) => (\n <OwnHandle\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n style={{\n left: `${percent}%`,\n }}\n {...getHandleProps(id)}\n />\n);\n", "import React from 'react';\nimport { Track as OwnTrack } from './wrapper';\nimport { SliderItem, GetTrackProps } from 'react-compound-slider';\n\ninterface ITrackProps {\n source: SliderItem;\n target: SliderItem;\n getTrackProps: GetTrackProps;\n}\n\nexport const Track = ({ source, target, getTrackProps }: ITrackProps) => (\n <OwnTrack\n style={{\n left: `${source.percent}%`,\n width: `${target.percent - source.percent}%`,\n }}\n {...getTrackProps()}\n />\n);\n", "import React from 'react';\n\nimport { Wrapper, List, Item } from './wrapper';\nimport ProductCard from '../ProductCard/index';\nimport { Document } from '../../@types/search';\nimport { numberSeparator } from '../../utils/formats';\nimport i18next from 'i18next';\n\nconst resolveImage = (document: Document) => {\n const img = document.featuredImage?.files?.[0]?.url;\n if (img) {\n return `${img}?w=567&q=72`;\n }\n return undefined;\n};\n\ninterface GridProps {\n documents?: Document[];\n hashRoute?: boolean;\n pathRoute?: string;\n placeholderImage?: string;\n displayBranchName?: boolean;\n onClickItem?: (id: string) => void;\n}\n\nconst Grid = ({\n documents,\n placeholderImage,\n hashRoute,\n pathRoute,\n displayBranchName,\n onClickItem,\n}: GridProps) => {\n if (!documents) {\n return null;\n }\n\n return (\n <Wrapper>\n <List>\n {documents.map((document) => {\n /*\n const _path = pathRoute?.replace(/^\\/|\\/$/g, '');\n\n const prefix = _path ? `/${_path}/` : '/';\n\n const pathRouteUrl =\n window.location.pathname === '/'\n ? `${prefix}${document._id}`\n : `${window.location.pathname}${prefix}${document._id}`;\n */\n\n /*\n const _pathRoute = pathRoute\n ? pathRoute.startsWith('/')\n ? `${location.pathname}${pathRoute}/${document._id}`\n : `${pathRoute}/${document._id}`\n : undefined;\n\n console.log(_pathRoute);\n */\n\n const _pathRoute = pathRoute ? `${pathRoute}/${document._id}` : undefined;\n\n return (\n <Item key={document._id}>\n <ProductCard\n id={document._id}\n onClick={onClickItem}\n title={document.title}\n pathRoute={pathRoute}\n href={_pathRoute ? _pathRoute : hashRoute ? `#${document._id}` : undefined}\n image={resolveImage(document)}\n placeholderImage={placeholderImage}\n description={document.shortDescription}\n branchName={displayBranchName ? document.branches?.[0]?.name : undefined}\n uspList={[\n {\n title: document.modelYear,\n },\n {\n title: `${numberSeparator(\n document.odometerReading?.value || document.mileage\n )} ${i18next.t(\n `odometer.${document.odometerReading?.unit || 'ScandinavianMile'}`\n )}`,\n },\n {\n title: document.gearboxType,\n },\n {\n title: document.fuelType,\n },\n ]}\n price={`${numberSeparator(document.price)} ${i18next.t('currency.default')}`}\n oldPrice={\n document.oldPrice !== undefined && document.price < document.oldPrice\n ? `${numberSeparator(document.oldPrice)} ${i18next.t('currency.default')}`\n : undefined\n }\n leasingPrice={\n document.leasingPrice !== undefined\n ? `${numberSeparator(document.leasingPrice)} ${i18next.t('currency.monthly')}`\n : undefined\n }\n businessLeasingPrice={\n document.businessLeasingPrice !== undefined\n ? `${numberSeparator(document.businessLeasingPrice)} ${i18next.t(\n 'currency.monthly'\n )}`\n : undefined\n }\n />\n </Item>\n );\n })}\n </List>\n </Wrapper>\n );\n};\n\nexport default Grid;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\nexport const List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-2)} ${size(-1)};\n`;\n\nexport const Item = styled.li`\n flex: 1 1 auto;\n width: 100%;\n max-width: 100%;\n padding: ${size(2)} ${size(1)};\n\n ${(props) => props.theme.breakpoint.Sm} {\n width: 50%;\n max-width: 50%;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n width: 33.333%;\n max-width: 33.333%;\n }\n`;\n", "import React, { useCallback, useMemo } from 'react';\n\nimport {\n Wrapper,\n Image,\n Picture,\n Source,\n Img,\n Content,\n ContentBody,\n ContentFooter,\n Heading,\n Link,\n Description,\n Usp,\n Price,\n CurrentPrice,\n OldPrice,\n PriceCell,\n Label,\n PreHeading,\n} from './wrapper';\nimport UspList, { ItemProps } from '../UspList/index';\nimport { DEFAULT_PLACEHOLDER_IMAGE } from '../../utils/constants';\nimport usePath from '../../State/Path/usePath';\nimport { useTranslation } from 'react-i18next';\nimport useIsInViewport from '../../hooks/useIsInViewport';\n\ninterface Props {\n id: string;\n title: string;\n href?: string;\n image?: string;\n pathRoute?: string;\n placeholderImage?: string;\n description?: string;\n uspList?: ItemProps[];\n price: string;\n leasingPrice?: string;\n oldPrice?: string;\n branchName?: string;\n businessLeasingPrice?: string;\n onClick?: (id: string) => void;\n}\n\nconst ProductCard = ({\n id,\n title,\n href,\n image,\n pathRoute,\n placeholderImage,\n branchName,\n description,\n uspList,\n price,\n oldPrice,\n leasingPrice,\n businessLeasingPrice,\n onClick,\n}: Props) => {\n const { t } = useTranslation();\n\n const [containerRef, isVisible] = useIsInViewport<HTMLDivElement>({\n persistVisibility: true,\n });\n\n const { pushState } = usePath();\n const _onClick = useMemo(() => (onClick ? () => onClick(id) : undefined), [id]);\n\n const onHrefClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n if (pathRoute && href) {\n const reg = new RegExp('^((http|https)://)|//');\n if (!pathRoute.match(reg) && !pathRoute.startsWith(location.origin)) {\n e.preventDefault();\n pushState(href);\n }\n }\n },\n [id, pathRoute, href]\n );\n\n return (\n <Wrapper onClick={_onClick}>\n <Image ref={containerRef}>\n {isVisible && image ? (\n <>\n <Picture>\n <Source\n type=\"image/webp\"\n srcSet={`${image}?spec=822x548&format=webp 822w, ${image}?spec=750x500&format=webp 750w, ${image}?spec=411x274&format=webp 411w`}\n sizes=\"(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)\"\n />\n <Img\n srcSet={`${image}?spec=822x548 822w, ${image}?spec=750x500 750w, ${image}?spec=411x274 411w`}\n sizes=\"(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)\"\n src={`${image}?spec=411x274`}\n alt={title}\n />\n </Picture>\n </>\n ) : (\n <Picture>\n <Img src={placeholderImage || DEFAULT_PLACEHOLDER_IMAGE} />\n </Picture>\n )}\n </Image>\n <Content>\n <ContentBody>\n {branchName && <PreHeading>{branchName}</PreHeading>}\n <Heading>\n {href ? (\n <Link onClick={onHrefClick} href={href} title={title} aria-label={title}>\n {title}\n </Link>\n ) : (\n title\n )}\n </Heading>\n {description && <Description>{description}</Description>}\n {uspList && (\n <Usp>\n <UspList small items={uspList} />\n </Usp>\n )}\n </ContentBody>\n <ContentFooter>\n <Price>\n <PriceCell>\n {oldPrice ? <OldPrice>{oldPrice}</OldPrice> : <Label>{t('productCard.price')}</Label>}\n <CurrentPrice>{price}</CurrentPrice>\n </PriceCell>\n {leasingPrice && (\n <PriceCell>\n <Label>{t('productCard.privateLeasing')}</Label>\n <CurrentPrice>{leasingPrice}</CurrentPrice>\n </PriceCell>\n )}\n {businessLeasingPrice && (\n <PriceCell>\n <Label>{t('productCard.businessLeasing')}</Label>\n <CurrentPrice>{businessLeasingPrice}</CurrentPrice>\n </PriceCell>\n )}\n </Price>\n </ContentFooter>\n </Content>\n </Wrapper>\n );\n};\n\nexport default ProductCard;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.article`\n position: relative;\n height: 100%;\n display: flex;\n flex-direction: column;\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :active {\n transform: scale(0.98);\n }\n`;\n\nexport const Image = styled.div`\n flex-shrink: 0;\n position: relative;\n height: 0;\n padding-bottom: 66.666%;\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n ${Wrapper}:hover & {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Picture = styled.picture``;\n\nexport const Source = styled.source``;\n\nexport const Img = styled.img`\n position: absolute;\n width: 100%;\n height: 100%;\n object-fit: cover;\n top: auto;\n left: auto;\n border-radius: 3px;\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n margin-top: ${size(2)};\n`;\n\nexport const ContentBody = styled.div``;\n\nexport const ContentFooter = styled.div`\n margin-top: auto;\n padding-top: ${size(1)};\n`;\n\nexport const PreHeading = styled.div`\n margin-bottom: ${size(0.25)};\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.75rem;\n`;\n\nexport const Heading = styled.h1.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n font-weight: 400;\n margin: 0;\n font-size: 1rem;\n`;\n\nexport const Link = styled.a`\n display: block;\n color: inherit;\n text-decoration: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n :focus {\n text-decoration: underline;\n }\n`;\n\nexport const Description = styled.div`\n font-size: 0.875rem;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin-top: ${size(0.25)};\n`;\n\nexport const Usp = styled.div`\n margin-top: ${size(1)};\n`;\n\nexport const Price = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n width: 100%;\n`;\n\nexport const CurrentPrice = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n font-size: 1rem;\n margin-right: ${size(1)};\n`;\n\nexport const PriceCell = styled.div`\n flex: 1 1 auto;\n padding-right: ${size(1)};\n`;\n\nexport const OldPrice = styled.div`\n text-decoration: line-through;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n`;\n\nexport const Label = styled.label`\n color: ${(props) => props.theme.color.disabledText};\n font-size: 0.75rem;\n`;\n", "import React from 'react';\n\nimport { List, Item, Box, ItemSection, Action } from './wrapper';\nimport { IconInfo } from '../Icon/index';\n\nexport interface ItemProps {\n title: string | number | null;\n onClick?: () => void;\n}\n\nexport interface Props {\n items?: ItemProps[];\n small?: boolean;\n}\n\nconst UspItem = ({ title, onClick }: ItemProps) => {\n return (\n <Item>\n <Box>\n <ItemSection>{title}</ItemSection>\n {onClick && (\n <ItemSection>\n <Action onClick={onClick}>\n <IconInfo block />\n </Action>\n </ItemSection>\n )}\n </Box>\n </Item>\n );\n};\n\nconst UspList = ({ items, small }: Props) => {\n if (!items) {\n return null;\n }\n\n return (\n <List isSmall={small}>\n {items.map((item, index) => (\n <UspItem key={`${item.title}-${index}`} title={item.title} onClick={item.onClick} />\n ))}\n </List>\n );\n};\n\nexport default UspList;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Item = styled.li`\n padding: ${size(0.5)};\n`;\n\nexport const Box = styled.div`\n display: flex;\n align-items: center;\n background-color: ${(props) => props.theme.color.accentDark};\n padding: ${size(1)} ${size(1.5)};\n border-radius: 3px;\n font-size: 0.875rem;\n overflow-wrap: break-word;\n hyphens: auto;\n`;\n\nexport const ItemSection = styled.div`\n & + & {\n margin-left: ${size(1)};\n }\n`;\n\nexport const Action = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const List = styled.ul`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-0.5)};\n\n ${({ isSmall }: { isSmall?: boolean }) =>\n isSmall &&\n css`\n margin: ${size(-0.25)};\n\n ${Item} {\n padding: ${size(0.25)};\n }\n\n ${Box} {\n padding: ${size(0.5)} ${size(1)};\n font-size: 0.75rem;\n }\n\n ${ItemSection} {\n & + & {\n margin-left: ${size(0.5)};\n }\n }\n `}\n`;\n", "import { useContext } from 'react';\nimport { PathContext, PathContextProps } from './PathContext';\n\nconst usePath = (): PathContextProps => {\n const context = useContext(PathContext);\n\n if (!context) {\n throw new Error('usePath must be used within a PathProvider');\n }\n\n return context;\n};\nexport default usePath;\n", "import { createContext } from 'react';\n\nexport interface PathContextProps {\n path: string;\n previousPath?: string;\n id?: string;\n pushState: (id: string) => void;\n replaceState: (id: string) => void;\n}\n\nexport const PathContext = createContext<PathContextProps | undefined>(undefined);\n", "import { useEffect, useRef, useState } from 'react';\n\ninterface Options extends IntersectionObserverInit {\n persistVisibility?: boolean;\n}\n\nconst useIsInViewport = <T>(\n options?: Options\n): [React.MutableRefObject<T | null>, boolean, number] => {\n const containerRef = useRef<T | null>(null);\n\n const [isVisible, setIsVisible] = useState(false);\n const [intersectionRatio, setIntersectionRatio] = useState(0);\n\n const callbackFunction = (\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver\n ) => {\n const [entry] = entries;\n setIsVisible(entry.isIntersecting);\n setIntersectionRatio(entry.intersectionRatio);\n\n if (entry.isIntersecting && options?.persistVisibility && containerRef.current) {\n observer.unobserve(containerRef.current as unknown as HTMLElement);\n containerRef.current = null;\n }\n };\n\n useEffect(() => {\n const observer = new IntersectionObserver(callbackFunction, options);\n if (containerRef.current) observer.observe(containerRef.current as unknown as HTMLElement);\n\n return () => {\n if (containerRef.current) observer.unobserve(containerRef.current as unknown as HTMLElement);\n };\n }, [containerRef, options]);\n\n return [containerRef, isVisible, intersectionRatio];\n};\n\nexport default useIsInViewport;\n", "import React from 'react';\n\nimport { Wrapper, Query, Clear } from './wrapper';\nimport { IconCancel } from '../Icon/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n children: string;\n onClear?: () => void;\n clearTitle?: string;\n}\n\nconst SearchTerm = ({ children, onClear, clearTitle }: Props) => {\n const { t } = useTranslation();\n return (\n <Wrapper>\n <Query>{children}</Query>\n {onClear && (\n <Clear onClick={onClear} title={clearTitle ? clearTitle : t('search.freeText')}>\n <IconCancel block />\n </Clear>\n )}\n </Wrapper>\n );\n};\n\nexport default SearchTerm;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Query = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 2.25rem;\n min-width: 0;\n overflow-wrap: break-word;\n hyphens: auto;\n\n :before,\n :after {\n content: '\"';\n }\n`;\n\nexport const Clear = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(2)};\n height: ${size(2)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accentDark};\n margin-left: ${size(1)};\n font-size: ${size(1)};\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-1)};\n bottom: ${size(-1)};\n left: ${size(-1)};\n right: ${size(-1)};\n border-radius: 50%;\n }\n\n :after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :after {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n", "import React, { useCallback, useState } from 'react';\nimport useSearch from '../../State/Search/useSearch';\nimport SearchBar from '../SearchBar/index';\n\nconst SearchFilter = () => {\n const [value, setValue] = useState('');\n const { queryFilter, onFilterUpdate } = useSearch();\n\n const onSearch = useCallback(\n (value: string) => {\n const nextQuery = new URLSearchParams(queryFilter.searchParams);\n if (value === nextQuery.get('query')) {\n return;\n }\n\n if (value) {\n nextQuery.set('query', value);\n } else {\n nextQuery.delete('qquery');\n }\n\n onFilterUpdate(nextQuery.toString());\n setValue('');\n },\n [queryFilter]\n );\n\n return <SearchBar value={value} setValue={setValue} onSearch={onSearch} />;\n};\n\nexport default SearchFilter;\n", "import React, { useCallback, useRef } from 'react';\nimport InputSearch from '../InputSearch/index';\nimport useOutsideClick from '../../hooks/useOutsideClick';\nimport { useTranslation } from 'react-i18next';\n\ninterface SearchBarProps {\n value: string;\n setValue: (value: string) => void;\n onSearch: (value: string) => void;\n}\n\nconst SearchBar = ({ value, setValue, onSearch }: SearchBarProps) => {\n const { t } = useTranslation();\n const ref = useRef<HTMLDivElement>(null);\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setValue(e.currentTarget.value),\n []\n );\n\n useOutsideClick(ref, () => setValue(''));\n\n const _onSearch = useCallback(() => {\n onSearch(value);\n }, [value]);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.keyCode === 13) {\n _onSearch();\n }\n },\n [value, _onSearch]\n );\n\n return (\n <InputSearch\n ref={ref}\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onSearch={_onSearch}\n placeholder={t('searchBar.placeholder')}\n label={t('searchBar.placeholder')}\n id=\"main-search\"\n />\n );\n};\n\nexport default SearchBar;\n", "import React from 'react';\n\nimport { Wrapper, Search, Action, ActionBtn, Input, Label } from './wrapper';\nimport { IconSearch } from '../Icon/index';\n\ntype InputProps = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>;\n\ntype Props = InputProps & {\n placeholder: string;\n label: string;\n value?: string;\n id: string;\n onSearch: () => void;\n};\n\nconst InputSearch = React.forwardRef(\n (\n { placeholder, label, value, id, onSearch, onChange, onKeyDown }: Props,\n ref:\n | ((instance: HTMLDivElement | null) => void)\n | React.RefObject<HTMLDivElement>\n | null\n | undefined\n ) => (\n <Wrapper ref={ref}>\n <Label htmlFor={id}>{label}</Label>\n <Search>\n <Input\n placeholder={placeholder}\n name=\"search\"\n value={value}\n id={id}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </Search>\n <Action>\n <ActionBtn onClick={onSearch} title={`Genomf\u00F6r ${label}`} aria-label={`Genomf\u00F6r ${label}`}>\n <IconSearch block />\n </ActionBtn>\n </Action>\n </Wrapper>\n )\n);\n\nInputSearch.displayName = 'InputSearch';\n\nexport default InputSearch;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'search',\n}))`\n display: flex;\n align-items: stretch;\n border-radius: 3px;\n`;\n\nexport const Label = styled.label`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n\nexport const Search = styled.div`\n flex: 1 1 auto;\n position: relative;\n display: flex;\n align-items: stretch;\n background-color: ${(props) => props.theme.color.accentDark};\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n`;\n\nexport const ActionBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${(props) => props.theme.distances.inputHeight};\n height: ${(props) => props.theme.distances.inputHeight};\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n font-size: 1rem;\n`;\n\nexport const Input = styled.input.attrs(() => ({\n type: 'search',\n className: 'wayke__theme wayke__font--regular',\n}))`\n flex: 1 1 auto;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n padding: 0 ${size(2)};\n background-color: transparent;\n font-size: 16px;\n border: none;\n border-radius: 0;\n box-shadow: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n\n :focus {\n outline: none;\n }\n\n &::-webkit-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &::-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-ms-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n`;\n", "import { useEffect } from 'react';\n\nconst useOutsideClick = (ref: React.RefObject<HTMLElement>, callback: () => void) => {\n const handleClick = (e: MouseEvent) => {\n if (ref.current && e.target && !ref.current.contains(e.target as Node)) {\n callback();\n }\n };\n\n useEffect(() => {\n document.addEventListener('click', handleClick);\n\n return () => {\n document.removeEventListener('click', handleClick);\n };\n });\n};\n\nexport default useOutsideClick;\n", "import React from 'react';\n\nimport { Wrapper, Icon, Content, Heading, Message } from './wrapper';\n\nimport { IconCheck, IconInfo, IconExclamationCircle, IconExclamationTriangle } from '../Icon/index';\n\ninterface Props {\n severity?: string;\n icon?: boolean;\n heading?: string;\n children?: React.ReactNode;\n}\n\nconst Snackbar = ({ severity, icon, heading, children }: Props) => {\n let iconSelector = <IconInfo block />;\n if (severity === 'error') {\n iconSelector = <IconExclamationCircle block />;\n } else if (severity === 'warning') {\n iconSelector = <IconExclamationTriangle block />;\n } else if (severity === 'success') {\n iconSelector = <IconCheck block />;\n }\n\n return (\n <Wrapper severity={severity}>\n {icon && <Icon>{iconSelector}</Icon>}\n <Content>\n {heading && <Heading>{heading}</Heading>}\n <Message>{children}</Message>\n </Content>\n </Wrapper>\n );\n};\n\nexport default Snackbar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport theme from '../../layout/theme';\n\nconst getSnackbarBg = (severity: string | undefined): string => {\n let bg = theme.color.accent;\n\n if (severity === 'error') {\n bg = theme.color.ui.negativeLight;\n } else if (severity === 'warning') {\n bg = theme.color.ui.neutralLight;\n } else if (severity === 'info') {\n bg = theme.color.ui.infoLight;\n } else if (severity === 'success') {\n bg = theme.color.ui.positiveLight;\n }\n\n return bg;\n};\n\ninterface Wrapper {\n severity?: string;\n}\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'alert',\n}))<Wrapper>`\n display: flex;\n align-items: center;\n padding: ${size(1.5)} ${size(2)};\n background-color: ${(props): string => getSnackbarBg(props.severity)};\n color: ${(props): string => props.theme.color.textDark};\n border-radius: 3px;\n`;\n\nexport const Icon = styled.div`\n flex-shrink: 0;\n padding-right: ${size(2)};\n font-size: ${size(3)};\n\n > svg {\n display: block;\n }\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n font-size: 1rem;\n`;\n\nexport const Heading = styled.div`\n font-weight: 700;\n`;\n\nexport const Message = styled.div`\n > * {\n &:first-child {\n margin-top: 0;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n`;\n", "import {\n ActionAll,\n ActionNames,\n ActionOnFilterUpdate,\n ActionTypes,\n CallbackOnFilterUpdate,\n} from './Actions';\nimport {\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnInit,\n EventEcomOnUser,\n EventEcomOnExit,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n} from './Events';\n\nexport type EventSubscriptions = {\n HashRouteChange: EventHashRouteChange[];\n ItemClicked: EventItemClicked[];\n EcomOnInit: EventEcomOnInit[];\n EcomOnUserEvent: EventEcomOnUser[];\n EcomOnExit: EventEcomOnExit[];\n ImagesClick: EventImagesClick[];\n OptionsClick: EventOptionsClick[];\n PhonenumberVisible: EventPhonenumberVisible[];\n PhonenumberCall: EventPhonenumberCall[];\n MailVisible: EventMailVisible[];\n InsuranceInterest: EventInsuranceInterest[];\n FinanceInterest: EventFinanceInterest[];\n All: EventAll[];\n};\n\nexport type ActionSubscriptions = {\n onFilterUpdate: ActionOnFilterUpdate[];\n All: ActionAll[];\n};\n\nclass PubSub {\n private static events: EventSubscriptions = {\n HashRouteChange: [],\n ItemClicked: [],\n EcomOnInit: [],\n EcomOnUserEvent: [],\n EcomOnExit: [],\n ImagesClick: [],\n OptionsClick: [],\n PhonenumberVisible: [],\n PhonenumberCall: [],\n MailVisible: [],\n InsuranceInterest: [],\n FinanceInterest: [],\n All: [],\n };\n\n private static actions: ActionSubscriptions = {\n onFilterUpdate: [],\n All: [],\n };\n\n public static subscribeAction = (event: ActionTypes) =>\n PubSub.actions[event.actionName].push(event as any);\n\n public static unsubscribeAction = (event: ActionTypes) => {\n if (PubSub.actions[event.actionName]) {\n for (let i = 0; i < PubSub.actions[event.actionName].length; i++) {\n if (PubSub.actions[event.actionName][i] === event) {\n PubSub.actions[event.actionName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n public static publishAction = (eventName: ActionNames, ...args: any) => {\n if (PubSub.actions.All) {\n PubSub.events.All.forEach((event) => event.callback(eventName, args));\n }\n if (PubSub.actions[eventName]) {\n PubSub.actions[eventName].forEach((event: ActionTypes) => {\n switch (eventName) {\n case 'onFilterUpdate':\n (event.callback as CallbackOnFilterUpdate)(args[0]);\n break;\n default:\n break;\n }\n });\n }\n };\n\n public static subscribe = (event: EventType) => PubSub.events[event.eventName].push(event as any);\n\n public static unsubscribe = (event: EventType) => {\n if (PubSub.events[event.eventName]) {\n for (let i = 0; i < PubSub.events[event.eventName].length; i++) {\n if (PubSub.events[event.eventName][i] === event) {\n PubSub.events[event.eventName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n public static publish = (eventName: EventNames, ...args: any) => {\n if (PubSub.events.All) {\n PubSub.events.All.forEach((event) => event.callback(eventName, args));\n }\n if (PubSub.events[eventName]) {\n PubSub.events[eventName].forEach((event: EventType) => {\n switch (eventName) {\n case 'HashRouteChange':\n (event.callback as CallbackHashRouteChange)(args[0]);\n break;\n case 'ItemClicked':\n (event.callback as CallbackEventItemClicked)(args[0]);\n break;\n case 'EcomOnUserEvent':\n (event.callback as CallbackEcomOnUserEvent)(args[0], args[1]);\n break;\n case 'EcomOnInit':\n case 'EcomOnExit':\n case 'ImagesClick':\n case 'OptionsClick':\n case 'PhonenumberVisible':\n case 'PhonenumberCall':\n case 'MailVisible':\n case 'InsuranceInterest':\n case 'FinanceInterest':\n (event.callback as CallbackEmpty)();\n break;\n default:\n break;\n }\n });\n }\n };\n}\nexport default PubSub;\n", "import i18n from 'i18next';\nimport { useCallback, useEffect, useState } from 'react';\nimport { MarketCode } from '../@types/market';\nimport { initializeI18n } from '../utils/I18n';\n\nconst useInitializeTranslation = (marketCode?: MarketCode) => {\n const [initialized, setInitialized] = useState(() => !!i18n.isInitialized);\n\n const initialize = useCallback(async (m?: MarketCode) => {\n await initializeI18n(m);\n setInitialized(true);\n }, []);\n\n useEffect(() => {\n if (!i18n.isInitialized) {\n initialize(marketCode);\n }\n }, []);\n\n return initialized;\n};\n\nexport default useInitializeTranslation;\n", "import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport { MarketCode } from '../@types/market';\n\nconst getLanguage = (marketCode?: MarketCode) => {\n switch (marketCode) {\n case 'NO':\n return 'nb-NO';\n case 'SE':\n return 'sv-SE';\n default:\n return 'en-US';\n }\n};\n\nexport const initializeI18n = (marketCode: MarketCode = 'SE') => {\n return new Promise((resolve) => {\n if (i18n.isInitialized) {\n resolve(true);\n return;\n }\n i18n.use(initReactI18next).init(\n {\n lng: getLanguage(marketCode),\n fallbackLng: 'en-US',\n interpolation: {\n escapeValue: false,\n },\n debug: true,\n resources: {\n 'sv-SE': {\n translation: {\n navigation: {\n backToSearch: 'Tillbaka till bils\u00F6k',\n },\n filter: {\n manufacturer: 'Tillverkare',\n modelSeries: 'Modell',\n fuelType: 'Drivmedel',\n gearboxType: 'V\u00E4xell\u00E5da',\n branch: 'Anl\u00E4ggning',\n color: 'F\u00E4rg',\n environmentClass: 'Milj\u00F6klass',\n 'properties.segment': 'Segment',\n drivingWheel: 'Drivhjul',\n price: 'Pris',\n mileage: 'Miltal',\n modelYear: 'Modell\u00E5r',\n odometerValueAsKm: 'M\u00E4tarst\u00E4llning',\n leasingPrice: 'Privatleasing',\n businessLeasingPrice: 'F\u00F6retagsleasa',\n },\n currency: {\n default: 'kr',\n monthly: 'kr/m\u00E5n',\n },\n category: {\n basic: 'Basuppgifter',\n engineAndPerformance: 'Motor & Prestanda',\n },\n subCategory: {\n engine: 'Motor',\n },\n customProperty: {\n manufacturer: {\n displayName: 'Varum\u00E4rke',\n hint: '',\n },\n modelSeries: {\n displayName: 'Modell',\n hint: '',\n },\n modelName: {\n displayName: 'Version',\n hint: 'Vilket utf\u00F6rande av bilmodellen det \u00E4r.',\n },\n modelYear: {\n displayName: 'Modell\u00E5r',\n hint: 'Modell\u00E5r s\u00E4tts av tillverkaren. Handlaren \u00E4ndrar ibland modell\u00E5ret f\u00F6r att matcha transportstyrelsens definition f\u00F6r <i>\u00E5rsmodell</i>. Definitionen f\u00F6r \u00E5rsmodell inneb\u00E4r att bilar tillverkade andra halvan av \u00E5ret f\u00E5r n\u00E4sta \u00E5rs modell\u00E5r.',\n },\n manufactureYear: {\n displayName: 'Tillverknings\u00E5r',\n hint: '\u00C5ret bilen tillverkades.',\n },\n odometer: { displayName: 'M\u00E4tarst\u00E4llning', hint: '' },\n gearboxType: { displayName: 'V\u00E4xell\u00E5da', hint: '' },\n registrationNumber: { displayName: 'Registreringsnummer', hint: '' },\n fuelType: {\n displayName: 'Br\u00E4nslegrupp',\n hint: 'Vad bilen ska tankas med och drivs av.',\n },\n enginePower: { displayName: 'Effekt', unit: 'hk' },\n },\n odometer: {\n Kilometer: 'km',\n ScandinavianMile: 'mil',\n },\n common: {\n yes: 'Ja',\n no: 'Nej',\n logotype: 'Logotyp',\n close: 'St\u00E4ng',\n showMore: 'Visa mer',\n readMore: 'L\u00E4s mer',\n showMoreInformation: 'Visa mer information',\n showLessInformation: 'Visa mindre information',\n choose: 'V\u00E4lj',\n address: 'Adress',\n mondayShort: 'M\u00E5n',\n tuesdayShort: 'Tis',\n wednesdayShort: 'Ons',\n thursdayShort: 'Tor',\n fridayShort: 'Fre',\n saturdayShort: 'L\u00F6r',\n sundayShort: 'S\u00F6n',\n moreInformation: 'Mer information',\n lessInformation: 'Mindre information',\n anErrorHasOccured: 'Ett fel har intr\u00E4ffat',\n opensInNewTab: '\u00D6ppnas i ny flik',\n open: '\u00D6ppna',\n imageIndex: 'Bild {{index}}',\n },\n item: {\n relatedVehicles: 'Relaterade fordon',\n latestVehicles: 'Senast inkomna',\n readMoreInNewTab: 'L\u00E4s mer (\u00F6ppnas i ny flik)',\n moreInfoAboutSubject: 'Mer information om {{subject}}',\n dataNotAvailable: 'Uppgift saknas',\n showOnGoogleMaps: 'Visa p\u00E5 Google Maps',\n googleMapsMapAlt: 'Karta',\n googleMapsPlaceholderInit: 'Visa karta',\n demoCar: 'Demobil',\n demoCarDescription:\n 'En demobil \u00E4r en bil som st\u00E5tt i utst\u00E4llning eller som p\u00E5 annat s\u00E4tt anv\u00E4nts f\u00F6r att visa upp en viss modell. Bilarna \u00E4r ofta v\u00E4lutrustade och har blivit v\u00E4l omh\u00E4ndertagna. Dessutom har de vanligtvis g\u00E5tt f\u00E5 mil och har fortfarande nybilsgarantierna kvar.',\n carData: 'Biluppgifter',\n carDataDescription: 'Information direkt fr\u00E5n Transportstyrelsen och tillverkaren.',\n equipment: 'Utrustning',\n equipmentDescription: 'Kompletterande uppgifter om bilen.',\n documents: 'Dokument',\n documentTypes: {\n tireEnergyDeclaration: 'Energideklaration f\u00F6r d\u00E4ck',\n goodsDeclaration: 'Varudeklaration',\n other: '\u00D6vriga dokument',\n },\n carIsReserved: 'Bilen \u00E4r reserverad',\n carIsReservedDescription: 'Denna bil \u00E4r reserverad av en annan k\u00F6pare.',\n carIsReservedModalBody: 'Denna bil \u00E4r reserverad av en annan k\u00F6pare.',\n centralWarehouseCar: 'Centrallagerbil',\n centralWarehouseCarDescription:\n 'Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar. Byt anl\u00E4ggning f\u00F6r att visa kontaktuppgifter till just den anl\u00E4ggningen.',\n centralWarehouseCarDescriptionShort:\n 'Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar.',\n clickHereToShowContactToAnotherBranch:\n ' Klicka h\u00E4r f\u00F6r att visa kontaktuppgifter till en annan anl\u00E4ggning',\n switchBranch: 'Byt anl\u00E4ggning',\n switchBranchDescription: 'V\u00E4lj den anl\u00E4ggning du vill visa kontaktuppgifter f\u00F6r.',\n chooseBranch: 'V\u00E4lj anl\u00E4ggning',\n chooseSelectedBranch: 'V\u00E4lj vald anl\u00E4ggning',\n availableFromDate: 'Tillg\u00E4nglig fr\u00E5n {{date}}',\n includingShort: 'Inkl.',\n usedWarrany: 'Begagnatgaranti',\n homeDelivery: 'Hemleverans',\n thisCarsIsLocatedAt: 'Den h\u00E4r bilen finns p\u00E5',\n thisCarIsAvailableAtOurBranch:\n 'Den h\u00E4r bilen finns p\u00E5 v\u00E5r anl\u00E4ggning i {{location}}',\n contact: 'Kontakt',\n start360Exterior: 'Starta 360\u00B0 exteri\u00F6rt',\n start360Interior: 'Starta 360\u00B0 interi\u00F6rt',\n openingHoursToday: '\u00D6ppetider idag',\n closedToday: 'St\u00E4ngt idag',\n open: '\u00D6ppet',\n closed: 'St\u00E4ngt',\n addInsurance: 'V\u00E4lj till f\u00F6rs\u00E4kring',\n getInsuranceQuote: 'F\u00E5 prisf\u00F6rslag',\n insurance: 'F\u00F6rs\u00E4kring',\n readMoreAboutInsuranceInNewTab: 'L\u00E4s mer om f\u00F6rs\u00E4kringen (\u00F6ppnas i ny flik)',\n personalNumber: 'Personnummer',\n estimatedAnualMileage: 'Uppskattad k\u00F6rstr\u00E4cka per \u00E5r',\n showInsurances: 'Visa f\u00F6rs\u00E4kringar',\n savePersonalNumberOnThisDevice: 'Spara personnummer p\u00E5 denna enhet',\n savePersonalNumberOnThisDeviceHelp:\n 'Spara personnummer p\u00E5 denna dator f\u00F6r att direkt visa f\u00F6rs\u00E4kringskostnaderna i Wayke. Personnumret lagras inte hos Wayke utan finns bara sparad i din webbl\u00E4sare.',\n couldNotfetchInsurances: 'Kunde inte h\u00E4mta f\u00F6rs\u00E4kringar. V\u00E4nligen f\u00F6rs\u00F6k igen.',\n openPrePurchaseInformationInNewTab:\n 'F\u00F6rk\u00F6psinformation och villkor (\u00F6ppnas i ny flik)',\n insuranceIncludes: 'F\u00F6rs\u00E4kringen inneh\u00E5ller',\n addInsuranceHeading: 'L\u00E4gg till',\n financialOptions: {\n otherFinancialOptions: 'Andra finansieringsalternativ',\n privateLease: 'Privatleasa',\n businessLease: 'F\u00F6retagsleasa',\n monthlyCost: 'M\u00E5nadskostnad',\n bindingTime: 'Bindningstid',\n annualMileage: '\u00C5rlig k\u00F6rstr\u00E4cka',\n payInInstallments: 'Delbetala',\n payInInstallmentsDetailed: 'Delbetala {{amount}} i {{duration}} m\u00E5n',\n disclaimer: 'Ber\u00E4knat p\u00E5 {{interest}} r\u00E4nta.',\n loanOptions: 'L\u00E5nealternativ',\n downPayment: 'Kontantinsats',\n duration: 'Avbetalning',\n residual: 'Restskuld',\n interest: 'R\u00E4nta',\n effectiveinterest: 'Effektiv r\u00E4nta',\n setupFee: 'Uppl\u00E4ggningskostnad',\n administrationFee: 'Administrativa avgifter',\n totalCreditCost: 'Total kreditkostnad',\n milagePerYear: 'mil/\u00E5r',\n months: 'm\u00E5n',\n loanOptionsDisclaimer:\n 'Ber\u00E4knat p\u00E5 {{interest}} % r\u00E4nta (effektivt {{effectiveInterest}} %).',\n loanOptionsDisclaimerMileage:\n 'Ber\u00E4knat p\u00E5 {{interest}} % r\u00E4nta (effektivt {{effectiveInterest}} %) och en \u00E5rlig k\u00F6rstr\u00E4cka om {{mileage}} mil.',\n },\n actions: {\n emailSubject: '{{hostName}} \u2013 Jag \u00E4r intresserad av {{vehicle}}',\n openform: '\u00D6ppna formul\u00E4r',\n buyOnline: 'K\u00F6p bilen online',\n showEmail: 'Visa mailadress',\n showPhoneNumber: 'Visa telefonnummer',\n callNumber: 'Ring',\n sendEmailTo: 'Skicka ett mail till',\n },\n accessories: {\n accessories: 'Tillbeh\u00F6r',\n accessoriesDescription: 'Tillbeh\u00F6r som passar till detta fordon.',\n price: 'Kontantpris',\n oldPrice: 'Tidigare pris',\n installationCost: 'Monteringskostnad',\n articleNumberShort: 'Art. nr.',\n moreInformationAboutAccessory: 'Mer information om {{accessory}}',\n },\n },\n productCard: {\n price: 'Pris',\n privateLeasing: 'Privatleasing',\n },\n search: {\n filter: 'Filter',\n sort: 'Sortera',\n showMore: {\n text: 'Visa fler',\n title: 'Visa fler resultat',\n },\n filterButton: {\n text: 'Filtrera',\n title: 'Visa filter',\n },\n sortButton: {\n text: 'Sortera',\n title: 'V\u00E4lj sorteringsordning',\n },\n searchResult: 'S\u00F6kresultat',\n snackbarNoSearchResults: {\n heading: 'Inga resultat',\n body: 'S\u00F6kningen gav inga resultat',\n },\n snackBarClearFreeText: {\n heading: 'Inga resultat',\n body: 'Rensa fritexten f\u00F6r att se alla filter',\n },\n sortOptions: {\n relevance: 'Relevans',\n publishedAsc: 'Publicerad (\u00E4ldst)',\n publishedDesc: 'Publicerad (senast)',\n priceAsc: 'Pris (l\u00E4gst)',\n priceDesc: 'Pris (h\u00F6gst)',\n modelAsc: '\u00C5rsmodell (\u00E4ldst)',\n modelDesc: '\u00C5rsmodell (nyast)',\n mileageAsc: 'Miltal (l\u00E4gst)',\n mileageDesc: 'Miltal (h\u00F6gst)',\n },\n clearAllFilters: {\n text: 'Rensa alla filter',\n title: 'Rensa alla filter',\n },\n showNumberOfCustomUnit: 'Visa {{count}} {{unit}}',\n result: {\n singular: 'Bil',\n plural: 'Bilar',\n },\n freeText: 'Fritext',\n from: 'Fr\u00E5n',\n to: 'Till',\n min: 'Min',\n max: 'Max',\n },\n searchBar: {\n title: 'S\u00F6k',\n placeholder: 'S\u00F6k din bil',\n button: {\n text: 'S\u00F6k',\n title: 'S\u00F6k',\n },\n searchResults: 'S\u00F6ktr\u00E4ffar',\n showAllRsults: 'Visa alla bilar',\n },\n other: {\n loading: 'Laddar...',\n error404: '404',\n showingNumberOfResults_one: 'Visar {{current}} av {{count}} resultat',\n showingNumberOfResults_other: 'Visar {{current}} av {{count}} resultat',\n closeModal: 'St\u00E4ng modal',\n closePanel: 'St\u00E4ng panel',\n goToHeading: 'G\u00E5 till {{heading}}',\n openDoumentt: '\u00D6ppna {{document}}',\n previousImage: 'F\u00F6reg\u00E5ende bild',\n nextImage: 'N\u00E4sta bild',\n goToImageIndex: 'G\u00E5 till bild {{index}}',\n phoneNumber: 'Telefonnummer',\n showPhoneNumber: 'Visa telefonnummer',\n callPhoneNumber: 'Ring {{phoneNumber}}',\n price: 'Pris',\n privateLeasingPrice: 'Privatleasing',\n video: 'Video',\n playVideo: 'Spela video',\n searchResults: 'S\u00F6ktr\u00E4ffar',\n showAllCars: 'Visa alla bilar',\n },\n },\n },\n 'nb-NO': {\n translation: {\n navigation: {\n backToSearch: 'Tilbake til bils\u00F8k',\n },\n filter: {\n manufacturer: 'Produsent',\n modelSeries: 'Modell',\n fuelType: 'Drivstofftype',\n gearboxType: 'Girkassetype',\n branch: 'Anlegget',\n color: 'Farge',\n environmentClass: 'Milj\u00F8klasse',\n 'properties.segment': 'Segment',\n drivingWheel: 'Drivhjul',\n price: 'Pris',\n mileage: 'Kilometerstand',\n modelYear: 'Modell\u00E5r',\n odometerValueAsKm: 'Kilometerstand',\n leasingPrice: 'Privatleasing',\n businessLease: 'Bedriftsleasing',\n },\n currency: {\n default: 'kr',\n monthly: 'kr/mnd',\n },\n category: {\n basic: 'Grunnopplysninger',\n engineAndPerformance: 'Motor og ytelse',\n },\n subCategory: {\n engine: 'Motor',\n },\n customProperty: {\n manufacturer: {\n displayName: 'Produsent',\n hint: '',\n },\n modelSeries: {\n displayName: 'Modell',\n hint: '',\n },\n modelName: {\n displayName: 'Versjon',\n hint: 'Hvilken versjon av bilmodellen det er.',\n },\n modelYear: {\n displayName: '\u00C5rsmodell',\n hint: 'Modell\u00E5ret settes av produsenten. Forhandlere endrer av og til modell\u00E5ret for \u00E5 matche transportmyndighetens definisjon av modell\u00E5ret. Definisjonen av modell\u00E5ret inneb\u00E6rer at biler produsert i den siste halvdelen av \u00E5ret f\u00E5r neste \u00E5rs modell\u00E5r.',\n },\n manufactureYear: {\n displayName: 'Produksjons\u00E5r',\n hint: '\u00C5ret bilen ble produsert.',\n },\n odometer: { displayName: 'Kilometerstand', hint: '' },\n gearboxType: { displayName: 'Girkasse', hint: '' },\n registrationNumber: { displayName: 'Registreringsnummer', hint: '' },\n fuelType: {\n displayName: 'Drivstofftype',\n hint: 'Hva bilen skal tankes med og drives av.',\n },\n enginePower: { displayName: 'Effekt', unit: 'hk' },\n },\n odometer: {\n Kilometer: 'km',\n ScandinavianMile: 'mil',\n },\n common: {\n yes: 'Ja',\n no: 'nei',\n logotype: 'Logotype',\n close: 'Close',\n showMore: 'Vis mer',\n readMore: 'Les mer',\n showMoreInformation: 'Vis mer informasjon',\n showLessInformation: 'Vis mindre informasjon',\n choose: 'Velg',\n address: 'Adresse',\n mondayShort: 'man',\n tuesdayShort: 'tirs',\n wednesdayShort: 'Wednesday',\n thursdayShort: 'Thursday',\n FridayShort: 'fre',\n saturdayShort: 'l\u00F8rdag',\n sundayShort: 'S\u00F8n',\n moreInformation: 'Mer informasjon',\n lessInformation: 'Mindre informasjon',\n anErrorHasOccured: 'Det har oppst\u00E5tt en feil',\n opensInNewTab: '\u00C5pnes i ny fane',\n open: '\u00C5pne',\n imageIndex: 'Bilde {{indeks}}',\n },\n item: {\n relatedVehicles: 'Relaterte kj\u00F8ret\u00F8y',\n latestVehicles: 'Sist mottatt',\n readMoreInNewTab: 'Les mer (\u00E5pnes i ny fane)',\n moreInfoAboutSubject: 'Mer informasjon om {{subject}}',\n dataNotAvailable: 'Data ikke tilgjengelig',\n showOnGoogleMaps: 'Vis p\u00E5 Google Maps',\n googleMapsMapAlt: 'Kart',\n googleMapsPlaceholderInit: 'Vis kart',\n demoCar: 'Demo Car',\n demoCarDescription:\n 'En demobil er en bil som har v\u00E6rt utstilt eller som har blitt brukt p\u00E5 annen m\u00E5te for \u00E5 vise frem en bestemt modell. Bilene er ofte godt utstyrt og har blitt tatt godt vare p\u00E5. Dessuten har de vanligvis bare noen f\u00E5 kilometer p\u00E5 seg og har fortsatt garantien p\u00E5 nybilen.',\n carData: 'Bildata',\n carDataDescription: 'Informasjon direkte fra Transportstyrelsen og produsenten.',\n equipment: 'Utstyr',\n equipmentDescription: 'Ytterligere informasjon om bilen.',\n documents: 'Dokumenter',\n documentTypes: {\n tireEnergyDeclaration: 'Energideklarasjon for dekk',\n goodsDeclaration: 'Varedeklarasjon',\n other: 'Andre dokumenter',\n },\n carIsReserved: 'Bilen er reservert',\n carIsReservedDescription: 'Denne bilen er reservert av en annen kj\u00F8per.',\n carIsReservedModalBody: 'Denne bilen er reservert av en annen kj\u00F8per.',\n centralWarehouseCar: 'Sentrallagerbil',\n centralWarehouseCarDescription:\n 'Denne bilen tilh\u00F8rer et sentrallager og kan kj\u00F8pes gjennom flere fasiliteter. Endre anlegget for \u00E5 vise kontaktinformasjon for det bestemte anlegget.',\n centralWarehouseCarDescriptionShort:\n 'Denne bilen tilh\u00F8rer et sentrallager og kan kj\u00F8pes gjennom flere fasiliteter.',\n clickHereToShowContactToAnotherBranch:\n 'Klikk her for \u00E5 se kontaktdetaljer for et annet anlegg',\n switchBranch: 'Switch Branch',\n switchBranchDescription: 'Velg filialen du vil vise kontaktdetaljer for.',\n selectBranch: 'Choose Branch',\n chooseSelectedBranch: 'Velg valgt gren',\n availableFromDate: 'Tilgjengelig fra {{date}}',\n includingShort: 'Inkl.',\n usedWarrany: 'Bruktgaranti',\n homeDelivery: 'Hjemlevering',\n thisCarsIsLocatedAt: 'Denne bilen er p\u00E5',\n thisCarIsAvailableAtOurBranch:\n 'Denne bilen er tilgjengelig i v\u00E5r filial i {{location}}',\n contact: 'Kontakt',\n start360Exterior: 'Start 360\u00B0 eksteri\u00F8r',\n start360Interior: 'Start 360\u00B0 interi\u00F8r',\n openingHoursToday: '\u00C5pningstider i dag',\n closedToday: 'Stengt i dag',\n open: '\u00C5pne',\n closed: 'Stengt',\n addInsurance: 'Velg til forsikring',\n getInsuranceQuote: 'F\u00E5 tilbud',\n insurance: 'Forsikring',\n readMoreAboutInsuranceInNewTab: 'Les mer om forsikring (\u00E5pnes i ny fane)',\n personalNumber: 'Personnummer',\n estimatedAnualMileage: 'Estimert kj\u00F8relengde per \u00E5r',\n showInsurances: 'Vis forsikringer',\n savePersonalNumberOnThisDevice: 'Lagre personlig nummer p\u00E5 denne enheten',\n savePersonalNumberOnThisDeviceHelp:\n 'Lagre personnummeret p\u00E5 denne datamaskinen for \u00E5 direkte se forsikringskostnadene i Wayke. Personnummeret lagres ikke hos Wayke, men lagres kun i nettleseren din.',\n couldNotfetchInsurances:\n 'Kunne ikke hente forsikringer. V\u00E6r s\u00E5 snill, pr\u00F8v p\u00E5 nytt.',\n openPrePurchaseInformationInNewTab:\n 'Informasjon og vilk\u00E5r f\u00F8r kj\u00F8p (\u00E5pnes i ny fane)',\n insuranceIncludes: 'Forsikringen inkluderer',\n addInsuranceHeading: 'Add',\n financialOptions: {\n otherFinancialOptions: 'Andre finansieringsalternativer',\n privateLease: 'PrivateLease',\n businessLease: 'Etagslease',\n monthlyCost: 'M\u00E5nedlig kostnad',\n bindingTime: 'Bindingstid',\n annualMileage: 'Annual Mileage',\n payInInstallments: 'Betal i avdrag',\n payInInstallmentsDetailed: 'Betal delvis {{amount}} i {{duration}} m\u00E5neder',\n disclaimer: 'Beregnet til {{interest}} rente.',\n loanOptions: 'L\u00E5nealternativer',\n downPayment: 'Kontantinnskudd',\n duration: 'Avbetaling',\n residual: 'Restgjeld',\n interesse: 'Interesse',\n effectiveinterest: 'Effektiv interesse',\n setupFee: 'Oppsettskostnad',\n administrationFee: 'Administrative gebyrer',\n totalCreditCost: 'Total kredittkostnad',\n milagePerYear: 'skandinaviske mil/\u00E5r',\n months: 'mnd',\n loanOptionsDisclaimer:\n 'Beregnet til {{interest}} % rente (effektiv {{effectiveInterest}} %).',\n loanOptionsDisclaimerMileage:\n 'Beregnet p\u00E5 {{interest}} % rente (effektiv {{effectiveInterest}} %) og en \u00E5rlig kj\u00F8relengde p\u00E5 {{mileage}} miles.',\n },\n actions: {\n emailSubject: '{{hostName}} - Jeg er interessert i {{vehicle}}',\n openform: '\u00C5pent skjema',\n buyOnline: 'Kj\u00F8p bilen p\u00E5 nett',\n showEmail: 'Vis e-postadresse',\n showPhoneNumber: 'Vis telefonnummer',\n callNumber: 'Ring',\n sendEmailTo: 'Send en e-post til',\n },\n accessories: {\n accessories: 'Tilbeh\u00F8r',\n accessoriesDescription: 'Tilbeh\u00F8r som passer for dette kj\u00F8ret\u00F8yet.',\n price: 'Kontantpris',\n oldPrice: 'Forrige pris',\n installationCost: 'Installasjonskostnad',\n articleNumberShort: 'Art. Nei.',\n moreInformationAboutAccessory: 'Mer informasjon om {{accessory}}',\n },\n },\n productCard: {\n price: 'Pris',\n privateLeasing: 'Privatleasing',\n },\n search: {\n filter: 'Filter',\n sort: 'Sorter',\n showMore: {\n text: 'Vis mer',\n title: 'Vis flere resultater',\n },\n filterButton: {\n text: 'Filter',\n title: 'Vis filter',\n },\n sortButton: {\n text: 'Sorter',\n title: 'Velg sorteringsrekkef\u00F8lge',\n },\n searchResult: 'S\u00F8keresultat',\n snackbarNoSearchResults: {\n heading: 'Ingen resultater',\n body: 'S\u00F8ket ga ingen resultater',\n },\n snackBarClearFreeText: {\n heading: 'Ingen resultater',\n body: 'T\u00F8m friteksten for \u00E5 se alle filtre',\n },\n sortOptions: {\n relevance: 'Relevans',\n publishedAsc: 'Publisert (eldste)',\n publishedDesc: 'Publisert (siste)',\n priceAsc: 'Pris (laveste)',\n priceDesc: 'Pris (maksimum)',\n modelAsc: '\u00C5rsmodell (eldste)',\n modelDesc: '\u00C5rsmodell (nyeste)',\n mileageAsc: 'Kilometerstand (lavest)',\n mileageDesc: 'Kilometerstand (maksimum)',\n },\n clearAllFilters: {\n text: 'T\u00F8m alle filtre',\n title: 'T\u00F8m alle filtre',\n },\n showNumberOfCustomUnit: 'Vis {{count}} {{unit}}',\n result: {\n singular: 'Bil',\n plural: 'Biler',\n },\n freeText: 'Gratis tekst',\n from: 'Fra',\n to: 'Til',\n min: 'Min',\n max: 'Max',\n },\n searchBar: {\n title: 'S\u00F8k',\n placeholder: 'S\u00F8k i bilen din',\n button: {\n text: 'S\u00F8k',\n title: 'S\u00F8k',\n },\n searchResults: 'S\u00F8keresultater',\n showAllRsults: 'Vis alle biler',\n },\n other: {\n loading: 'Laster...',\n error404: '404',\n showingNumberOfResults_one: 'Viser {{current}} av {{count}} resultater',\n showingNumberOfResults_other: 'Viser {{current}} av {{count}} resultater',\n closeModal: 'Close Modal',\n closePanel: 'Lukk panel',\n goToHeading: 'G\u00E5 til {{heading}}',\n openDoumentt: '\u00C5pne {{dokument}}',\n previousImage: 'Forrige bilde',\n nextImage: 'Neste bilde',\n goToImageIndex: 'G\u00E5 til bilde {{indeks}}',\n phoneNumber: 'Phone Number',\n showPhoneNumber: 'Vis telefonnummer',\n callPhoneNumber: 'Ring {{phoneNumber}}',\n price: 'Pris',\n privateLeasingPrice: 'Privatleasing',\n video: 'Video',\n playVideo: 'Spill av video',\n searchResults: 'S\u00F8keresultater',\n showAllCars: 'Vis alle biler',\n },\n },\n },\n 'en-US': {\n translation: {\n navigation: {\n backToSearch: 'Back to car search',\n },\n filter: {\n manufacturer: 'Manufacturer',\n modelSeries: 'Model',\n fuelType: 'Fuel Type',\n gearboxType: 'Gearbox Type',\n branch: 'Branch',\n color: 'Color',\n environmentClass: 'Environmental Class',\n 'properties.segment': 'Segment',\n drivingWheel: 'Driving Wheel',\n price: 'Price',\n mileage: 'Mileage',\n modelYear: 'Model Year',\n odometerValueAsKm: 'Meter setting',\n leasingPrice: 'Private leasing',\n businessLeasingPrice: 'Business leasing',\n },\n currency: {\n default: 'kr',\n monthly: 'kr/month',\n },\n category: {\n basic: 'Basic Information',\n engineAndPerformance: 'Engine & Performance',\n },\n subCategory: {\n engine: 'Engine',\n },\n customProperty: {\n manufacturer: {\n displayName: 'Brand',\n hint: '',\n },\n modelSeries: {\n displayName: 'Model',\n hint: '',\n },\n modelName: {\n displayName: 'Version',\n hint: 'Which version of the car model it is.',\n },\n modelYear: {\n displayName: 'Model year',\n hint: 'The model year is set by the manufacturer. Dealers sometimes change the model year to match the transport authority`s definition of the model year. The definition of the model year means that cars manufactured in the latter half of the year are given the next year`s model year.',\n },\n manufactureYear: {\n displayName: 'Manufacture year',\n hint: 'The year the car was manufactured.',\n },\n odometer: { displayName: 'Odometer reading', hint: '' },\n gearboxType: { displayName: 'Gearbox', hint: '' },\n registrationNumber: { displayName: 'Registration number', hint: '' },\n fuelType: {\n displayName: 'Fuel type',\n hint: 'What the car should be fueled with and powered by.',\n },\n enginePower: { displayName: 'Power', unit: 'hp' },\n },\n odometer: {\n Kilometer: 'km',\n ScandinavianMile: 'mil',\n },\n common: {\n yes: 'Yes',\n no: 'No',\n logotype: 'Logotype',\n close: 'Close',\n showMore: 'Show more',\n readMore: 'Read more',\n showMoreInformation: 'Show more information',\n showLessInformation: 'Show less information',\n choose: 'Choose',\n address: 'Address',\n mondayShort: 'Mon',\n tuesdayShort: 'Tues',\n wednesdayShort: 'Wednesday',\n thursdayShort: 'Thursday',\n fridayShort: 'Fri',\n saturdayShort: 'Sat',\n sundayShort: 'Sun',\n moreInformation: 'More information',\n lessInformation: 'Less information',\n anErrorHasOccured: 'An error has occurred',\n opensInNewTab: 'Opens in new tab',\n open: 'Open',\n imageIndex: 'Image {{index}}',\n },\n item: {\n relatedVehicles: 'Related Vehicles',\n latestVehicles: 'Latest received',\n readMoreInNewTab: 'Read more (opens in new tab)',\n moreInfoAboutSubject: 'More information about {{subject}}',\n dataNotAvailable: 'Data not available',\n showOnGoogleMaps: 'Show on Google Maps',\n googleMapsMapAlt: 'Map',\n googleMapsPlaceholderInit: 'Show Map',\n demoCar: 'Demo Car',\n demoCarDescription:\n 'A demo car is a car that has been on display or that has been used in some other way to show off a certain model. The cars are often well equipped and have been well looked after. Also, they usually have only a few miles on them and still have their new car warranties.',\n carData: 'Car Data',\n carDataDescription:\n 'Information directly from the Swedish Transport Agency and the manufacturer.',\n equipment: 'Equipment',\n equipmentDescription: 'Additional information about the car.',\n documents: 'Documents',\n documentTypes: {\n tireEnergyDeclaration: 'Energy declaration for tyres',\n goodsDeclaration: 'Goods declaration',\n other: 'Other documents',\n },\n carIsReserved: 'The car is reserved',\n carIsReservedDescription: 'This car is reserved by another buyer.',\n carIsReservedModalBody: 'This car is reserved by another buyer.',\n centralWarehouseCar: 'Central warehouse car',\n centralWarehouseCarDescription:\n 'This car belongs to a central warehouse and can be purchased through several facilities. Change facility to display contact information for that particular facility.',\n centralWarehouseCarDescriptionShort:\n 'This car belongs to a central warehouse and can be purchased through several facilities.',\n clickHereToShowContactToAnotherBranch:\n 'Click here to view contact details for another facility',\n switchBranch: 'Switch Branch',\n switchBranchDescription:\n 'Select the branch you want to display contact details for.',\n chooseBranch: 'Choose branch',\n chooseSelectedBranch: 'Choose selected branch',\n availableFromDate: 'Available from {{date}}',\n includingShort: 'Incl.',\n usedWarrany: 'Used Warranty',\n homeDelivery: 'Home delivery',\n thisCarsIsLocatedAt: 'This car is on',\n thisCarIsAvailableAtOurBranch:\n 'This car is available at our branch in {{location}}',\n contact: 'Contact',\n start360Exterior: 'Start 360\u00B0 exterior',\n start360Interior: 'Start 360\u00B0 interior',\n openingHoursToday: 'Opening hours today',\n closedToday: 'Closed today',\n open: 'Open',\n closed: 'Closed',\n addInsurance: 'Select insurance',\n getInsuranceQuote: 'Get Quote',\n insurance: 'Insurance',\n readMoreAboutInsuranceInNewTab: 'Read more about insurance (opens in new tab)',\n personalNumber: 'Personal number',\n estimatedAnnualMileage: 'Estimated mileage per year',\n showInsurances: 'Show insurances',\n savePersonalNumberOnThisDevice: 'Save personal number on this device',\n savePersonalNumberOnThisDeviceHelp:\n 'Save social security number on this computer to directly view the insurance costs in Wayke. The social security number is not stored at Wayke, but is only saved in your browser.',\n couldNotfetchInsurances: 'Could not fetch insurances. Please try again.',\n openPrePurchaseInformationInNewTab:\n 'Pre-Purchase Information and Terms (opens in new tab)',\n insuranceIncludes: 'The insurance includes',\n addInsuranceHeading: 'Add',\n financialOptions: {\n otherFinancialOptions: 'Other financing options',\n privateLease: 'PrivateLease',\n businessLease: 'Etagslease',\n monthlyCost: 'Monthly cost',\n bindingTime: 'Binding Time',\n annualMileage: 'Annual Mileage',\n payInInstallments: 'Pay In Installments',\n payInInstallmentsDetailed: 'Partially pay {{amount}} in {{duration}} months',\n disclaimer: 'Calculated at {{interest}} interest.',\n loanOptions: 'Loan Options',\n downPayment: 'Cash Deposit',\n duration: 'Instalment',\n residual: 'Residual debt',\n interest: 'Interest',\n effectiveinterest: 'Effective interest',\n setupFee: 'Setup cost',\n administrationFee: 'Administrative fees',\n totalCreditCost: 'Total Credit Cost',\n milagePerYear: 'mil/\u00E5r',\n months: 'mnd',\n loanOptionsDisclaimer:\n 'Calculated at {{interest}} % interest (effective {{effectiveInterest}} %).',\n loanOptionsDisclaimerMileage:\n 'Calculated on {{interest}} % interest (effective {{effectiveInterest}} %) and an annual mileage of {{mileage}} miles.',\n },\n actions: {\n emailSubject: \"{{hostName}} - I'm interested in {{vehicle}}\",\n openform: 'Open form',\n buyOnline: 'Buy the car online',\n showEmail: 'Show email address',\n showPhoneNumber: 'Show phone number',\n callNumber: 'Call',\n sendEmailTo: 'Send an email to',\n },\n accessories: {\n accessories: 'Accessories',\n accessoriesDescription: 'Accessories suitable for this vehicle.',\n price: 'Cash price',\n oldPrice: 'Previous Price',\n installationCost: 'Installation cost',\n articleNumberShort: 'Art. no.',\n moreInformationAboutAccessory: 'More information about {{accessory}}',\n },\n },\n productCard: {\n price: 'Price',\n privateLeasing: 'Privatleasing',\n },\n search: {\n filter: 'Filter',\n sort: 'Sort',\n showMore: {\n text: 'Show more',\n title: 'Show more results',\n },\n filterButton: {\n text: 'Filter',\n title: 'Show filter',\n },\n sortButton: {\n text: 'Sort',\n title: 'Select sort order',\n },\n searchResult: 'Search Result',\n snackbarNoSearchResults: {\n heading: 'No results',\n body: 'The search returned no results',\n },\n snackBarClearFreeText: {\n heading: 'No results',\n body: 'Clear the free text to see all filters',\n },\n sortOptions: {\n relevance: 'Relevance',\n publishedAsc: 'Published (oldest)',\n publishedDesc: 'Published (latest)',\n priceAsc: 'Price (Lowest)',\n priceDesc: 'Price (Maximum)',\n modelAsc: 'Year model (oldest)',\n modelDesc: 'Year Model (Newest)',\n mileageAsc: 'Mileage (lowest)',\n mileageDesc: 'Mileage (maximum)',\n },\n clearAllFilters: {\n text: 'Clear all filters',\n title: 'Clear all filters',\n },\n showNumberOfCustomUnit: 'Show {{count}} {{unit}}',\n result: {\n singular: 'Car',\n plural: 'Cars',\n },\n freeText: 'Free text',\n from: 'From',\n to: 'To',\n min: 'Min',\n max: 'Max',\n },\n searchBar: {\n title: 'Search',\n placeholder: 'Search your car',\n button: {\n text: 'Search',\n title: 'Search',\n },\n searchResults: 'Search Results',\n showAllRsults: 'Show all cars',\n },\n other: {\n loading: 'Loading...',\n error404: '404',\n showingNumberOfResults_one: 'Showing {{current}} of {{count}} results',\n showingNumberOfResults_other: 'Showing {{current}} of {{count}} results',\n closeModal: 'Close Modal',\n closePanel: 'Close panel',\n goToHeading: 'Go to {{heading}}',\n openDoumentt: 'Open {{document}}',\n previousImage: 'Previous Image',\n nextImage: 'Next Image',\n goToImageIndex: 'Go to image {{index}}',\n phoneNumber: 'Phone Number',\n showPhoneNumber: 'Show phone number',\n callPhoneNumber: 'Call {{phoneNumber}}',\n price: 'Price',\n privateLeasingPrice: 'Private Leasing',\n video: 'Video',\n playVideo: 'Play video',\n searchResults: 'Search Results',\n showAllCars: 'Show all cars',\n },\n },\n },\n },\n },\n () => {\n resolve(true);\n }\n );\n });\n};\n", "import React, { useMemo, useRef, useCallback, useState, useEffect } from 'react';\nimport WaykeEcomWeb from '@wayke-se/ecom-web';\n\nimport Container from '../../components/Container/index';\nimport UspList, { ItemProps } from '../../components/UspList/index';\nimport { Repeat, RepeatSmall } from '../../components/Repeat/index';\nimport PriceTable from '../../components/PriceTable/index';\nimport LogoBox from '../../components/LogoBox/index';\nimport Content from '../../components/Content/index';\nimport Blockquote from '../../components/Blockquote/index';\nimport ExtendContent from '../../components/ExtendContent/index';\nimport Gallery from '../../components/Gallery/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport {\n ProductPage,\n ProductPageMainSection,\n ProductPageAside,\n ProductPageMain,\n ProductPageAsideSection,\n} from '../../components/ProductPage/index';\nimport { H1, H2 } from '../../components/Heading/index';\nimport { ButtonPrimary, ButtonContent, ButtonInlineLight } from '../../components/Button/index';\nimport { UtilityFontSizeSmall } from '../../components/Utility/index';\nimport { IconChevronLeft } from '../../components/Icon/index';\nimport useSearchItem from '../../hooks/useSearchItem';\nimport { notEmpty, numberSeparator, dateTimeFormat } from '../../utils/formats';\nimport { PortalNamespace, PortalElement } from '../../components/Portal/index';\nimport FinancialOptions from '../../components/FinancialOptions/index';\nimport InsuranceOptions from '../../components/InsuranceOptions/index';\nimport ManufacturerPackageOption from './ManufacturerPackagesOption';\nimport CheckList from './CheckList';\nimport Related from './Related';\nimport PackageOptions from './PackageOptions';\nimport Branch from './Branch';\nimport useCentralStorage from '../../State/CentralStorage/useCentralStorage';\nimport Page404 from './Page404';\nimport PageLoading from './PageLoading';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport Property from './Property';\nimport DemoCarModal from './DemoCarModal';\nimport useSettings from '../../State/Settings/useSettings';\nimport Documents from './Documents';\nimport AccessoriesSection from './Accessories/index';\nimport { MarketCode } from '../../@types/market';\nimport useInitializeTranslation from '../../hooks/useInitializeTranslation';\nimport i18next from 'i18next';\n\nexport interface WaykeSearchItemProps {\n marketCode?: MarketCode;\n id: string;\n hashRoute?: boolean;\n pathRoute?: string;\n disableResetScrollOnInit?: boolean;\n placeholderImage?: string;\n modifyDocumentTitleItem?: boolean;\n displayBranchName?: boolean;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst WaykeSearchItem = ({\n marketCode,\n id,\n hashRoute,\n pathRoute,\n disableResetScrollOnInit,\n placeholderImage,\n modifyDocumentTitleItem,\n displayBranchName,\n onClickSearchItem,\n}: WaykeSearchItemProps) => {\n const initialized = useInitializeTranslation(marketCode);\n const { ecomSettings } = useSettings();\n const ecomContext = useRef<WaykeEcomWeb | undefined>();\n const { loading, data: result } = useSearchItem(id);\n const { vehicle: centralStorageVehicle, loading: loadingCentralStorageVehicle } =\n useCentralStorage(result?.vehicle);\n\n const [demoCarModal, setDemoCarModal] = useState(false);\n const onToggleDemoCarModal = useCallback(() => setDemoCarModal(!demoCarModal), [demoCarModal]);\n\n useEffect(() => {\n if (ecomSettings) {\n ecomContext.current = new WaykeEcomWeb({\n id,\n ecomSdkConfig: {\n api: {\n address: ecomSettings.url,\n },\n bankIdThumbprint: ecomSettings?.bankIdThumbprint,\n },\n logo: ecomSettings.serviceLogotypeUrl,\n logoX2: ecomSettings.serviceLogotypeUrl,\n onEvent(view, event, currentStep?, data?) {\n PubSub.publish('EcomOnUserEvent', view, event, currentStep, data);\n },\n });\n }\n return () => {\n if (ecomContext.current) {\n ecomContext.current.destroy();\n }\n };\n }, []);\n\n useEffect(() => {\n if (!disableResetScrollOnInit) {\n window.scrollTo(0, 0);\n }\n }, []);\n\n useEffect(() => {\n if (result?.vehicle?.data && modifyDocumentTitleItem) {\n const { vehicle } = result;\n const { registrationNumber } = vehicle.data;\n document.title = `${registrationNumber} | ${vehicle.title} | ${vehicle.shortDescription}`;\n }\n }, [result]);\n\n const options = useMemo(\n () => result?.vehicle?.data?.options?.filter(notEmpty).map((opt) => ({ title: opt })),\n [result?.vehicle?.data?.options]\n );\n\n const onShowMoreOptionsClick = useCallback(() => PubSub.publish('OptionsClick'), []);\n\n if (!initialized) return null;\n\n if (loading) {\n return <PageLoading />;\n }\n\n if (!result?.vehicle?.data) {\n return <Page404 />;\n }\n\n const { vehicle } = result;\n const contact = centralStorageVehicle?.contact;\n const branch = centralStorageVehicle?.branch;\n const {\n title,\n accessories,\n shortDescription,\n media,\n description,\n price,\n discount,\n financialOptions,\n manufacturer,\n ecommerce,\n packageOptions,\n publishedAt,\n documents,\n availableFrom,\n flags,\n } = vehicle;\n const insuranceOptions = centralStorageVehicle?.insuranceOptions\n ? centralStorageVehicle.insuranceOptions\n : vehicle.insuranceOptions;\n const { fuelType, mileage, odometerReading, gearbox, modelYear, propertySet } = vehicle.data;\n\n const uspList: ItemProps[] = [\n {\n title: modelYear,\n },\n ];\n\n if (flags?.demoVersion) {\n uspList.push({\n title: i18next.t('item.demoCar'),\n onClick: onToggleDemoCarModal,\n });\n }\n\n uspList.push({\n title: `${numberSeparator(odometerReading?.value || mileage)} ${i18next.t(\n `odometer.${odometerReading?.unit || 'ScandinavianMile'}`\n )}`,\n });\n\n if (gearbox) {\n uspList.push({ title: gearbox });\n }\n\n if (fuelType) {\n uspList.push({ title: fuelType });\n }\n\n return (\n <>\n <Page>\n <PageSection large>\n <Container>\n <ProductPage>\n <ProductPageAside>\n <ProductPageAsideSection mobileOrder={1}>\n {!pathRoute && hashRoute ? (\n <Repeat>\n <UtilityFontSizeSmall>\n <ButtonInlineLight\n as=\"a\"\n href=\"#\"\n title={i18next.t('navigation.backToSearch')}\n >\n <ButtonContent>\n <IconChevronLeft block />\n </ButtonContent>\n <ButtonContent>{i18next.t('navigation.backToSearch')}</ButtonContent>\n </ButtonInlineLight>\n </UtilityFontSizeSmall>\n </Repeat>\n ) : null}\n {manufacturer?.logotype && (\n <Repeat>\n <LogoBox logo={manufacturer.logotype} alt={manufacturer.name} />\n </Repeat>\n )}\n <Repeat>\n <RepeatSmall>\n <H1 noMargin>{title}</H1>\n </RepeatSmall>\n {shortDescription && (\n <RepeatSmall>\n <div>{shortDescription}</div>\n </RepeatSmall>\n )}\n <RepeatSmall>\n <UspList small items={uspList} />\n </RepeatSmall>\n </Repeat>\n </ProductPageAsideSection>\n\n <ProductPageAsideSection mobileOrder={2}>\n <PriceTable price={price} discount={discount || undefined} />\n </ProductPageAsideSection>\n\n {(financialOptions.length > 0 || insuranceOptions.length > 0) && (\n <ProductPageAsideSection mobileOrder={4}>\n {financialOptions.length > 0 && (\n <FinancialOptions id={id} financialOptions={financialOptions} />\n )}\n {insuranceOptions.length > 0 && (\n <InsuranceOptions\n id={id}\n branch={centralStorageVehicle?.branch}\n insuranceOptions={insuranceOptions}\n />\n )}\n </ProductPageAsideSection>\n )}\n\n <ProductPageAsideSection mobileOrder={5}>\n <CheckList\n manufacturer={manufacturer}\n packageOptions={packageOptions}\n ecommerce={ecommerce}\n branch={branch}\n contact={centralStorageVehicle?.contact}\n loadingCentralStorageVehicle={loadingCentralStorageVehicle}\n availableFrom={availableFrom}\n toggleEcomModal={() => ecomContext.current?.start()}\n />\n </ProductPageAsideSection>\n </ProductPageAside>\n <ProductPageMain>\n <ProductPageAsideSection mobileOrder={3}>\n <Gallery media={media} placeholderImage={placeholderImage} />\n </ProductPageAsideSection>\n\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{i18next.t('item.carData')}</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>{i18next.t('item.carDataDescription')}</p>\n </Content>\n </Repeat>\n <Repeat>\n <Property propertySet={propertySet} vehicleData={vehicle.data} />\n </Repeat>\n </ProductPageMainSection>\n\n {description && (\n <ProductPageMainSection>\n <Blockquote\n author={contact && contact.name ? contact.name : null}\n date={\n publishedAt\n ? dateTimeFormat.format(publishedAt, dateTimeFormat.DayMonth)\n : undefined\n }\n avatar={contact?.avatar || undefined}\n >\n {!!description && <p>{description}</p>}\n </Blockquote>\n </ProductPageMainSection>\n )}\n\n {(options?.length || 0) > 0 && (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{i18next.t('item.equipment')}</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>{i18next.t('item.equipmentDescription')}</p>\n </Content>\n </Repeat>\n <Repeat>\n <ExtendContent\n actionTitle={i18next.t('common.showMore')}\n onClick={onShowMoreOptionsClick}\n >\n <UspList items={options} />\n </ExtendContent>\n </Repeat>\n </ProductPageMainSection>\n )}\n\n <Documents documents={documents} />\n\n <AccessoriesSection accessories={accessories} />\n\n <ProductPageMainSection>\n <Branch\n branch={branch}\n displayBranchName={displayBranchName}\n loading={loadingCentralStorageVehicle}\n />\n {ecommerce && ecommerce.enabled && (\n <Repeat>\n <ButtonPrimary\n disabled={!!ecommerce.reserved}\n title=\"K\u00F6p bilen online\"\n onClick={() => ecomContext.current?.start()}\n >\n K\u00F6p bilen online\n </ButtonPrimary>\n </Repeat>\n )}\n </ProductPageMainSection>\n\n <PackageOptions packageOptions={packageOptions} />\n <ManufacturerPackageOption packageOption={manufacturer?.packageOption} />\n </ProductPageMain>\n </ProductPage>\n </Container>\n </PageSection>\n <Related\n id={id}\n hashRoute={hashRoute}\n pathRoute={pathRoute}\n authorizedReseller={!!branch?.flags?.authorizedReseller}\n displayBranchName={displayBranchName}\n onClickSearchItem={onClickSearchItem}\n />\n </Page>\n <PortalElement id={PortalNamespace.DefaultPortal} />\n {demoCarModal && <DemoCarModal onClose={onToggleDemoCarModal} />}\n </>\n );\n};\n\nexport default WaykeSearchItem;\n", "import React from 'react';\n\nimport { List, Item, Value, Label } from './wrapper';\nimport { VisualHeading } from '../Heading/index';\nimport { Price, OldPrice } from '../Price/index';\nimport { numberSeparator } from '../../utils/formats';\nimport { useTranslation } from 'react-i18next';\n\ninterface PriceTableProps {\n price: number;\n discount?: number;\n}\n\nconst PriceTable = ({ price, discount }: PriceTableProps) => {\n const { t } = useTranslation();\n return (\n <List>\n <Item>\n <Label>\n <VisualHeading>{t('other.price')}</VisualHeading>\n </Label>\n <Value>\n <Price>\n {numberSeparator(price)} {t('currency.default')}\n </Price>\n </Value>\n </Item>\n {discount !== undefined && (\n <Item>\n <Label />\n <Value>\n <OldPrice>\n {numberSeparator(price + discount)} {t('currency.default')}\n </OldPrice>\n </Value>\n </Item>\n )}\n </List>\n );\n};\n\nexport default PriceTable;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n display: flex;\n align-items: flex-end;\n line-height: 1;\n\n & + & {\n margin-top: ${size(0.5)};\n }\n`;\n\nexport const Label = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Value = styled.div`\n flex-shrink: 0;\n`;\n", "import styled from 'styled-components';\n\nexport const Price = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n font-size: 1.375rem;\n`;\n\nexport const OldPrice = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n text-decoration: line-through;\n`;\n", "import * as React from 'react';\n\nimport { Logo } from './wrapper';\n\ninterface ILogoBox {\n logo: string;\n logo2x?: string | null;\n alt?: string;\n wide?: boolean;\n}\n\nconst LogoBox = ({ logo, logo2x, alt, wide }: ILogoBox) => {\n let logoRetina = logo;\n\n if (logo2x) {\n logoRetina = `${logo2x} 2x`;\n }\n\n return <Logo src={logo} srcSet={logoRetina} alt={alt} wide={wide} />;\n};\n\nexport default LogoBox;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype LogoProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n wide?: boolean;\n};\n\nexport const Logo = styled.img<LogoProps>`\n display: block;\n max-width: ${size(9.5)};\n max-height: ${size(6)};\n\n ${({ wide }) =>\n wide &&\n css`\n max-width: ${size(20)};\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n small?: boolean;\n};\n\nconst Content = ({ children, small, dangerouslySetInnerHTML }: Props) => (\n <Wrapper small={small} dangerouslySetInnerHTML={dangerouslySetInnerHTML}>\n {children}\n </Wrapper>\n);\n\nexport default Content;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n small?: boolean;\n};\n\nexport const Wrapper = styled.div<WrapperProps>`\n font-size: 1rem;\n line-height: 1.5;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: ${size(4)};\n margin-bottom: ${size(1)};\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n\n & + p,\n & + table {\n margin-top: ${size(1)};\n }\n }\n\n p {\n margin: ${size(2)} 0;\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n }\n\n img {\n display: block;\n width: 100%;\n }\n\n ${({ small }) =>\n small &&\n css`\n font-size: 0.875rem;\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper, Quote, Author, AvatarWrapper, Info, Name, Date } from './wrapper';\nimport Avatar from '../Avatar/index';\n\ninterface Props {\n children: React.ReactNode;\n author?: string | null;\n avatar?: string;\n date?: string;\n}\n\nconst Blockquote = ({ children, author, avatar, date }: Props) => (\n <Wrapper>\n <Quote>{children}</Quote>\n {author && (\n <Author>\n {avatar && (\n <AvatarWrapper>\n <Avatar image={avatar} alt={`${author} avatar`} />\n </AvatarWrapper>\n )}\n <Info>\n <Name>{author}</Name>\n {date && <Date>{date}</Date>}\n </Info>\n </Author>\n )}\n </Wrapper>\n);\n\nexport default Blockquote;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.blockquote`\n display: flex;\n flex-direction: column;\n max-width: 600px;\n margin: 0 auto;\n\n ${(props) => props.theme.breakpoint.Sm} {\n align-items: center;\n }\n`;\n\nexport const Quote = styled.div`\n > * {\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n }\n`;\n\nexport const Author = styled.footer`\n display: inline-flex;\n align-items: center;\n margin-top: ${size(3)};\n\n ${(props) => props.theme.breakpoint.Md} {\n margin-top: ${size(4)};\n }\n`;\n\nexport const AvatarWrapper = styled.div`\n flex-shrink: 0;\n padding-right: ${size(1.5)};\n`;\n\nexport const Info = styled.div`\n flex: 1 1 auto;\n font-size: 0.875rem;\n`;\n\nexport const Name = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n\nexport const Date = styled.div``;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n image: string;\n alt?: string;\n}\n\nconst Avatar = ({ image, alt }: Props) => <Wrapper image={image} aria-label={alt} />;\n\nexport default Avatar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface Wrapper {\n image: string;\n}\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'image',\n}))<Wrapper>`\n display: block;\n width: ${size(5)};\n height: ${size(5)};\n border-radius: 50%;\n background-image: ${(props): string => `url(${props.image})`};\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n background-color: ${(props) => props.theme.color.accent};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Extend, Action } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button/index';\n\ninterface Props {\n children: React.ReactNode;\n actionTitle: string;\n onClick?: () => void;\n}\n\nconst ExtendContent = ({ children, actionTitle, onClick }: Props) => {\n const [extend, setExtend] = useState(false);\n const onExtend = useCallback(() => {\n setExtend(true);\n if (onClick) {\n onClick();\n }\n }, []);\n\n const onRef = (ref: HTMLDivElement | null) => {\n const refHeight = ref?.clientHeight || 0;\n\n if (refHeight < 207) {\n setExtend(true);\n }\n };\n\n return (\n <Wrapper ref={onRef}>\n <Extend extended={extend}>{children}</Extend>\n {!extend && (\n <Action>\n <ButtonClear onClick={onExtend} title={actionTitle}>\n <ButtonContent>{actionTitle}</ButtonContent>\n </ButtonClear>\n </Action>\n )}\n </Wrapper>\n );\n};\n\nexport default ExtendContent;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\ntype ExtendProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n extended?: boolean;\n};\n\nexport const Extend = styled.div<ExtendProps>`\n position: relative;\n max-height: 175px;\n overflow: hidden;\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: ${size(6)};\n background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));\n }\n\n ${({ extended }) =>\n extended &&\n css`\n max-height: none;\n\n :after {\n content: none;\n }\n `}\n`;\n\nexport const Action = styled.div`\n display: flex;\n justify-content: flex-end;\n margin-top: ${size(2)};\n`;\n", "import React, { useState, useCallback, useRef, useMemo } from 'react';\nimport Slider from 'react-slick';\nimport scrollIntoView from 'scroll-into-view-if-needed';\n\nimport {\n Wrapper,\n SliderWrapper,\n Item,\n Image,\n ArrowLeft,\n ArrowRight,\n Main,\n Alt,\n QuickNav,\n QuickNavItem,\n QuickNavBtn,\n QuickNavImg,\n EnableNavigationButton,\n} from './wrapper';\nimport { IconChevronLeft, IconChevronRight } from '../Icon/index';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport { NavButton } from '../NavButton/index';\nimport Lightbox from '../Lightbox/index';\nimport EmbededVideo from '../Video/EmbededVideo';\nimport QuickNavEmbeded from '../Video/QuickNavEmbeded';\nimport Sphere from '../Sphere/Sphere';\nimport { notEmpty } from '../../utils/formats';\nimport ThreeSixty from '../ThreeSixty/ThreeSixty';\nimport { Media } from '../../@types/codegen/types';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { DEFAULT_PLACEHOLDER_IMAGE } from '../../utils/constants';\nimport { useTranslation } from 'react-i18next';\n\ninterface GalleryProps {\n media?: Media[];\n placeholderImage?: string;\n}\n\nconst sliderSettings = {\n dots: false,\n arrows: false,\n infinite: true,\n speed: 300,\n slidesToShow: 1,\n slidesToScroll: 1,\n};\n\nconst Gallery = ({ media, placeholderImage }: GalleryProps) => {\n const { t } = useTranslation();\n const slider = useRef<Slider>(null);\n const quickNavRef = useRef<HTMLUListElement>(null);\n const isDragging = useRef(false);\n const [index, setIndex] = useState(0);\n const [lightbox, setLightbox] = useState(false);\n const [navigationDisabled, setNavigationDisabled] = useState(false);\n\n const beforeChange = useCallback((_: number, newIndex: number) => {\n const element = quickNavRef.current?.querySelectorAll('li')?.[newIndex];\n if (element) {\n scrollIntoView(element, { scrollMode: 'if-needed', block: 'nearest', inline: 'nearest' });\n }\n setIndex(newIndex);\n }, []);\n\n const onMouseDown = useCallback(() => {\n if (isDragging.current) {\n isDragging.current = false;\n }\n }, []);\n const onMouseMove = useCallback(() => {\n if (!isDragging.current) {\n isDragging.current = true;\n }\n }, []);\n\n const onClick = useCallback(() => {\n PubSub.publish('ImagesClick');\n if (!isDragging.current && !lightbox && !!media?.length) {\n setLightbox(true);\n }\n }, [lightbox, media]);\n\n const nextImage = useCallback((): void => {\n if (!slider || !slider.current) {\n return;\n }\n slider.current.slickNext();\n }, [slider]);\n\n const prevImage = useCallback((): void => {\n if (!slider || !slider.current) {\n return;\n }\n slider.current.slickPrev();\n }, [slider]);\n\n const goTo = (target: number) => {\n if (!slider || !slider.current) {\n return;\n }\n if (slider.current) {\n setIndex(target);\n slider.current.slickGoTo(target);\n }\n };\n\n const onDisableNavigation = () => {\n if (!isDragging.current) setNavigationDisabled(true);\n };\n const onEnableNavigation = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.stopPropagation();\n isDragging.current = false;\n setNavigationDisabled(false);\n };\n\n const onToggleLightbox = useCallback(() => setLightbox(!lightbox), [lightbox]);\n\n const mediaLength = media?.length || 0;\n const placeholder = useMemo(\n () => placeholderImage || DEFAULT_PLACEHOLDER_IMAGE,\n [placeholderImage]\n );\n\n return (\n <>\n <Wrapper>\n <Main>\n <SliderWrapper onMouseDown={onMouseDown} onMouseMove={onMouseMove} onClick={onClick}>\n <Slider\n {...sliderSettings}\n swipe={!navigationDisabled}\n touchMove={!navigationDisabled}\n swipeToSlide={!navigationDisabled}\n ref={slider}\n beforeChange={beforeChange}\n >\n {!!media?.length ? (\n media.map((m, i) => (\n <Item key={m.files[0].url || i}>\n {m.type === 'image' && (\n <Image\n src={\n m.files[0].formats.filter(notEmpty).find((x) => x.format === '1170x')?.url\n }\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n {m.type === 'threesixty' && (\n <ThreeSixty\n urls={m.files.map((x) => x.url)}\n visible={i === index}\n onDisableNavigation={onDisableNavigation}\n navigationDisabled={navigationDisabled}\n />\n )}\n {m.type === 'embedded' && <EmbededVideo src={m.files[0].url} index={i + 1} />}\n {m.type === 'sphere' && (\n <Sphere\n visible={i === index}\n url={m.files[0].url}\n preview={m.files[0].url}\n onDisableNavigation={onDisableNavigation}\n navigationDisabled={navigationDisabled}\n />\n )}\n </Item>\n ))\n ) : (\n <Item key={placeholder}>\n <Image src={placeholder} alt={t('common.imageIndex', { index: 1 }) || ''} />\n </Item>\n )}\n </Slider>\n {navigationDisabled && mediaLength > 1 && (\n <EnableNavigationButton>\n <ButtonSecondary onClick={onEnableNavigation} title={t('common.close') || ''}>\n <ButtonContent>{t('common.close')}</ButtonContent>\n </ButtonSecondary>\n </EnableNavigationButton>\n )}\n </SliderWrapper>\n {!navigationDisabled && mediaLength > 1 && (\n <>\n <ArrowLeft>\n <NavButton onClick={prevImage} title={t('other.previousImage') || ''}>\n <IconChevronLeft block />\n </NavButton>\n </ArrowLeft>\n <ArrowRight>\n <NavButton onClick={nextImage} title={t('other.nextImage') || ''}>\n <IconChevronRight block />\n </NavButton>\n </ArrowRight>\n </>\n )}\n </Main>\n <Alt>\n <QuickNav ref={quickNavRef}>\n {!!media?.length ? (\n media.map((m, i) => {\n const src =\n m.files[0].formats.filter(notEmpty).find((x) => x.format === '225x150')?.url ||\n m.files[0].url;\n return (\n <QuickNavItem key={src || i} active={index === i}>\n <QuickNavBtn\n onClick={() => goTo(i)}\n title={t('other.goToImageIndex', { index: i + 1 }) || ''}\n >\n {m.type === 'image' && (\n <QuickNavImg\n src={src}\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n {m.type === 'threesixty' && (\n <QuickNavImg\n src={src}\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n {m.type === 'embedded' && <QuickNavEmbeded src={src} index={i} />}\n {m.type === 'sphere' && (\n <QuickNavImg\n src={m.files[0].url}\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n </QuickNavBtn>\n </QuickNavItem>\n );\n })\n ) : (\n <QuickNavItem key={placeholder} active>\n <QuickNavBtn\n onClick={() => goTo(0)}\n title={t('other.goToImageIndex', { index: 1 }) || ''}\n >\n <QuickNavImg src={placeholder} alt={t('common.imageIndex', { index: 1 }) || ''} />\n </QuickNavBtn>\n </QuickNavItem>\n )}\n </QuickNav>\n </Alt>\n </Wrapper>\n {lightbox && !!media?.length && (\n <Lightbox media={media} index={index} onClose={onToggleLightbox} />\n )}\n </>\n );\n};\n\nexport default Gallery;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\nimport { Wrapper as Container } from '../Container/wrapper';\n\nconst quickNavWidth = 83; // 75px + 8px\n\nexport const Wrapper = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n ${Container} & {\n margin-left: ${size(-3)};\n margin-right: ${size(-3)};\n }\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n ${Container} & {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n position: relative;\n padding-right: ${quickNavWidth}px;\n }\n`;\n\nexport const Main = styled.div`\n position: relative;\n height: 0;\n padding-bottom: 66.66666667%;\n\n ${(props) => props.theme.breakpoint.Md} {\n //background-color: ${(props) => props.theme.color.accent};\n }\n\n .slick-slider,\n .slick-list,\n .slick-track,\n .slick-slide,\n .slick-slide > * {\n height: 100%;\n }\n\n .slick-slide > * {\n font-size: 0;\n\n > * {\n font-size: 1rem;\n }\n }\n`;\n\nexport const Alt = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n width: ${quickNavWidth}px;\n padding-left: ${size(1)};\n\n ${(props) => props.theme.breakpoint.LtMd} {\n display: none;\n }\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: ${size(2.5)};\n background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));\n pointer-events: none;\n }\n`;\n\nexport const Item = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n\n :focus {\n outline: none;\n }\n\n ${(props) => props.theme.breakpoint.LtMd} {\n //background-color: ${(props) => props.theme.color.textDark};\n transition: border-radius 150ms ease;\n }\n`;\n\nexport const SliderWrapper = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n\n .slick-slider {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n\n ${(props) => props.theme.breakpoint.LtMd} {\n overflow: hidden;\n\n .slick-list {\n overflow: visible;\n width: 95%;\n }\n\n .slick-slide {\n border-right: ${size(1)} solid ${(props) => props.theme.color.bg};\n //transform: scale(0.95);\n transform-origin: 0 50%;\n transition: transform 150ms ease;\n }\n\n .slick-slide.slick-active {\n transform: none;\n\n ${Item} {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n }\n`;\n\nexport const Image = styled.img`\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n object-fit: cover;\n cursor: pointer;\n`;\n\nexport const ImageFull = styled.img`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\n// Arrow Nav\n\nconst Arrow = styled.div`\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n\n ${(props) => props.theme.breakpoint.LtSm} {\n display: none;\n }\n`;\n\nexport const ArrowLeft = styled(Arrow)`\n left: ${size(2)};\n`;\n\nexport const ArrowRight = styled(Arrow)`\n right: ${size(2)};\n`;\n\n// Quick Nav\n\nexport const QuickNav = styled.ul`\n position: relative;\n max-height: 100%;\n list-style: none;\n padding: 0;\n margin: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n\ntype QuickNavItemProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLLIElement>,\n HTMLLIElement\n> & {\n active?: boolean;\n};\n\nexport const QuickNavItem = styled.li.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))<QuickNavItemProps>`\n position: relative;\n\n & + & {\n margin-top: ${size(1)};\n }\n\n ${({ active }) =>\n active &&\n css`\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 3px solid currentColor;\n z-index: 2;\n }\n `}\n`;\n\nexport const QuickNavBtn = styled(ButtonReset)`\n position: relative;\n display: block;\n width: 100%;\n height: 0;\n padding-bottom: 66.66666667%; // 3:2\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.15);\n opacity: 0;\n z-index: 1;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const QuickNavImg = styled.img`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\n// Media Button\n\nexport const MediaButtonWrapper = styled.div`\n position: absolute;\n bottom: ${size(2)};\n left: 50%;\n transform: translateX(-50%);\n z-index: 1;\n`;\n\n// Sphere Close Button\n\nexport const EnableNavigationButton = styled.div`\n position: absolute;\n bottom: ${size(2)};\n left: 50%;\n transform: translateX(-50%);\n z-index: 1;\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const NavButton = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(4)};\n height: ${size(4)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.bg};\n color: ${(props) => props.theme.color.textDark};\n font-size: 0.75rem;\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);\n transition: transform 200ms ease;\n\n &::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 50%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n &:enabled {\n &:hover {\n &::before {\n opacity: 1;\n }\n }\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n", "import React from 'react';\n\nimport { Wrapper, UiBlock, Item, Img, CloseBtn } from './wrapper';\nimport { IconCancel } from '../Icon/index';\nimport EmbeddedVideoLightbox from '../Video/EmbeddedVideoLightbox';\nimport SphereLightbox from '../Sphere/SphereLightbox';\nimport ThreeSixtyLightbox from '../ThreeSixty/ThreeSixtLightbox';\nimport { Media } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface LightboxProps {\n index: number;\n media: Media[];\n onClose: () => void;\n}\n\nconst Lightbox = ({ index, media, onClose }: LightboxProps) => {\n const { t } = useTranslation();\n const onRef = (ref: HTMLDivElement | null) => {\n if (ref) {\n setTimeout(() => {\n ref.scrollIntoView();\n }, 300);\n }\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.keyCode === 27) {\n onClose();\n }\n };\n\n return (\n <Wrapper ref={(ref) => ref?.focus()} onKeyDown={onKeyDown} tabIndex={0}>\n <UiBlock onClick={onClose} aria-hidden />\n {media.map((m, i) => (\n <Item key={i} ref={index === i ? onRef : undefined}>\n {m.type === 'image' && (\n <Img\n id={`lightbox-image-${i}`}\n src={m.files[0].url}\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n {m.type === 'threesixty' && <ThreeSixtyLightbox urls={m.files.map((x) => x.url)} />}\n {m.type === 'sphere' && <SphereLightbox url={m.files[0].url} />}\n {m.type === 'embedded' && <EmbeddedVideoLightbox url={m.files[0].url} />}\n </Item>\n ))}\n <CloseBtn onClick={onClose} title={t('common.close') || ''}>\n <IconCancel block />\n </CloseBtn>\n </Wrapper>\n );\n};\n\nexport default Lightbox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n padding: ${size(3)};\n z-index: 90;\n overflow: auto;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: ${size(2)};\n }\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.3);\n z-index: -1;\n`;\n\nexport const Item = styled.div`\n position: relative;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Img = styled.img`\n position: relative;\n display: block;\n max-width: 100%;\n max-height: calc(100vh - ${size(6)});\n margin: 0 auto;\n z-index: 1;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n max-height: calc(100vh - ${size(4)});\n }\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n top: ${size(2)};\n right: ${size(2)};\n width: ${size(5)};\n height: ${size(5)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.bg};\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transform-origin: 50% 50%;\n transition: 200ms ease, transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n z-index: 1;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.97);\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n top: ${size(1)};\n right: ${size(1)};\n }\n`;\n", "import React from 'react';\n\nimport YouTubePlayer from './YoutubePlayer';\nimport VimeoPlayer from './VimeoPlayer';\nimport CustomPlayer from '../Video/CustomPlayer';\n\nconst ytNames = ['youtube.com', 'youtu.be'];\nconst isYouTubeVideo = (url: string): boolean =>\n ytNames.some((host: string): boolean => url.indexOf(host) >= 0);\n\nconst vNames = ['vimeo.com'];\nconst isVimeoVideo = (url: string): boolean =>\n vNames.some((host: string): boolean => url.indexOf(host) >= 0);\n\ntype PropsType = {\n url: string;\n autoplay?: boolean;\n controls?: boolean;\n};\n\nconst VideoPlayer = ({ url, autoplay = false, controls = true }: PropsType) => {\n if (!url) return null;\n\n if (isYouTubeVideo(url)) return <YouTubePlayer url={url} autoplay={autoplay} />;\n\n if (isVimeoVideo(url)) return <VimeoPlayer url={url} autoplay={autoplay} />;\n\n return <CustomPlayer ratio=\"56.25%\" controls={controls} url={url} />;\n};\n\nexport default VideoPlayer;\n", "import React from 'react';\nimport { getYouTubeId } from './utils';\n\nimport { Wrapper, Iframe } from './wrapper';\n\ntype PropsType = {\n url: string;\n autoplay: boolean;\n};\n\nconst YouTubePlayer = ({ url, autoplay }: PropsType) => (\n <Wrapper>\n <Iframe\n src={`https://www.youtube.com/embed/${getYouTubeId(url)}?&enablejsapi=1&?rel=0${\n autoplay ? '&autoplay=1' : ''\n }`}\n />\n </Wrapper>\n);\n\nexport default YouTubePlayer;\n", "export const getVimeoId = (url: string): string => {\n const regExp = /\\/(\\d+)/;\n const match = url.match(regExp);\n return match && match[1].length > 3 ? match[1] : '';\n};\n\nexport const getYouTubeId = (url: string): string => {\n const regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*/;\n const match = url.match(regExp);\n return match && match[7].length === 11 ? match[7] : '';\n};\n\nconst youtubeBase = 'https://img.youtube.com/vi/';\nexport const getYoutubeThumbnail = (url: string) => {\n const id = getYouTubeId(url);\n if (!id) {\n return undefined;\n }\n return {\n maxresdefault: `${youtubeBase}${id}/maxresdefault.jpg`,\n hqdefault: `${youtubeBase}${id}/hqdefault.jpg`,\n mqdefault: `${youtubeBase}${id}/mqdefault.jpg`,\n };\n};\n\nexport const onImageLoad = (\n e: React.SyntheticEvent<HTMLImageElement, Event>,\n thumbnail?: string[]\n) => {\n if (\n thumbnail?.length === 2 &&\n e.currentTarget.src === thumbnail[0] &&\n e.currentTarget.naturalWidth === 120 &&\n e.currentTarget.naturalHeight === 90\n ) {\n e.currentTarget.src = thumbnail[1];\n }\n};\n\nexport const onImageError = (\n e: React.SyntheticEvent<HTMLImageElement, Event>,\n thumbnail?: string[]\n) => {\n if (thumbnail?.length === 2) {\n e.currentTarget.src = thumbnail[1];\n }\n};\n", "import styled from 'styled-components';\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n ratio?: string;\n isPreview?: boolean;\n};\n\nexport const Wrapper = styled.div<WrapperProps>`\n position: relative;\n width: 100%;\n height: ${(props) => (props.isPreview ? '100%' : 0)};\n padding-bottom: ${(props): string => (props.ratio ? props.ratio : '56.25%')};\n`;\n\nexport const Iframe = styled.iframe.attrs(() => ({\n width: '100%',\n height: '100%',\n allowFullScreen: true,\n frameBorder: '0',\n}))`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n`;\n", "import React from 'react';\nimport { getVimeoId } from './utils';\n\nimport { Wrapper, Iframe } from './wrapper';\n\ntype PropsType = {\n url: string;\n autoplay: boolean;\n};\n\nconst VimeoPlayer = ({ url, autoplay }: PropsType) => (\n <Wrapper>\n <Iframe\n src={`https://player.vimeo.com/video/${getVimeoId(url)}?${\n autoplay ? '&autoplay=1' : ''\n }&loop=0&autopause=0`}\n />\n </Wrapper>\n);\n\nexport default VimeoPlayer;\n", "import React from 'react';\nimport { Wrapper } from './wrapper';\nimport Video from './Video';\n\ntype PropsType = {\n url?: string;\n modal?: boolean;\n controls?: boolean;\n ratio?: string;\n isPreview?: boolean;\n};\n\nconst CustomPlayer = ({ url, controls, modal, ratio = '56.25%', isPreview }: PropsType) => {\n return (\n <Wrapper ratio={ratio} isPreview={isPreview}>\n <Video\n key={url}\n modal={modal}\n preload=\"metadata\"\n controls={controls}\n width=\"100%\"\n height=\"100%\"\n src={url}\n />\n </Wrapper>\n );\n};\nexport default CustomPlayer;\n", "import React from 'react';\nimport styled from 'styled-components';\n\ntype VideoProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLVideoElement>,\n HTMLVideoElement\n> & {\n modal?: boolean;\n};\n\nconst Video = styled.video<VideoProps>`\n position: absolute;\n top: 0;\n left: 0;\n object-fit: ${({ modal }) => (modal ? 'contain' : 'cover')};\n`;\n\nexport default Video;\n", "import React from 'react';\nimport SphereViewer from './SphereViewer';\n\ntype PropsType = {\n url: string;\n};\n\nconst SphereLightbox = ({ url }: PropsType) => <SphereViewer id={url} src={url} preview={url} />;\n\nexport default SphereLightbox;\n", "import React, { lazy, useState, useEffect, Suspense } from 'react';\n\nimport { Wrapper } from '../Sphere/wrapper';\nimport Loader from '../Loader/index';\n\n// Skip loading pannellum with video\nconst Pannellum = lazy(() => import('@wayke-se/pannellum-react'));\n\ntype PropsType = {\n id: string;\n src: string;\n preview: string;\n autoLoad?: boolean;\n onStart?: () => void;\n};\n\nconst SphereViewer = ({ id, src, preview, autoLoad, onStart }: PropsType) => {\n const [number] = useState(Math.floor(100000000 + Math.random() * 900000000));\n useEffect(() => {\n setTimeout(() => {\n if (onStart) {\n const startBtn = document.querySelector('.pnlm-load-button');\n if (startBtn) startBtn.addEventListener('click', onStart);\n }\n }, 100);\n }, []);\n\n return (\n <Wrapper>\n <Suspense fallback={<Loader />}>\n <Pannellum\n id={`a-${id}-${number}`}\n panorama={src}\n hfov={120}\n autoLoad={autoLoad}\n compass\n width={'100%'}\n preview={preview}\n />\n </Suspense>\n </Wrapper>\n );\n};\n\nexport default SphereViewer;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst compassSize = size(4);\nconst controlBtnSize = size(4);\n\nexport const Wrapper = styled.div`\n width: 100%;\n height: 0 !important;\n padding-bottom: 66.666% !important; // 3:2\n\n .pnlm-container {\n background-image: none;\n background-color: ${(props) => props.theme.color.accentDark};\n }\n\n // Compass\n\n .pnlm-compass {\n width: ${compassSize};\n height: ${compassSize};\n border-radius: 50%;\n bottom: ${size(2)};\n left: ${size(2)};\n right: auto;\n margin-top: 0;\n border: 5px solid transparent;\n border-top-color: ${(props) => props.theme.color.textLight};\n background-color: rgba(255, 255, 255, 0.4);\n background-image: none;\n backdrop-filter: blur(5px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n box-sizing: border-box;\n\n &:hover {\n background-color: red;\n }\n }\n\n // Controls (zoom & fullscreen button)\n\n .pnlm-grab,\n .pnlm-grabbing {\n .pnlm-controls-container {\n display: block;\n }\n }\n\n .pnlm-controls-container {\n display: none;\n top: ${size(2)};\n left: ${size(2)};\n }\n\n .pnlm-controls {\n margin-top: 0;\n\n & + .pnlm-controls {\n margin-top: ${size(1)};\n }\n }\n\n // Fullscreen button\n\n .pnlm-fullscreen-toggle-button {\n display: none;\n position: relative;\n width: ${controlBtnSize};\n height: ${controlBtnSize};\n background-image: none;\n background-color: rgba(255, 255, 255, 0.4);\n backdrop-filter: blur(5px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n color: ${(props) => props.theme.color.textDark};\n border: 0;\n border-radius: 50%;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.6);\n }\n\n &:before {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.875rem;\n }\n }\n\n .pnlm-fullscreen-toggle-button-inactive {\n &:before {\n content: '\u2922';\n }\n\n &.pnlm-fullscreen-toggle-button-active {\n &:before {\n content: '\u2922';\n }\n }\n }\n\n // Gyroscope (Orientation)\n\n .pnlm-orientation-button {\n background-image: none;\n width: ${controlBtnSize};\n height: ${controlBtnSize};\n background-color: ${(props) => props.theme.color.accentDark};\n color: ${(props) => props.theme.color.textDark};\n border: 0;\n border-radius: 999px;\n\n &:hover {\n background-color: red;\n }\n\n &:before {\n content: 'A';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.875rem;\n }\n\n &.pnlm-orientation-button-active {\n background-color: green;\n\n &:hover {\n background-color: pink;\n }\n }\n }\n\n // Zoom controls\n\n .pnlm-zoom-controls {\n display: none;\n height: auto;\n width: auto;\n background-color: transparent;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n border: 0;\n border-radius: 999px;\n\n > * {\n &:first-child {\n border-top-left-radius: 999px;\n border-top-right-radius: 999px;\n }\n\n &:last-child {\n border-bottom-left-radius: 999px;\n border-bottom-right-radius: 999px;\n }\n }\n }\n\n .pnlm-zoom-in,\n .pnlm-zoom-out {\n position: relative;\n display: block;\n width: ${controlBtnSize};\n height: ${controlBtnSize};\n background-image: none;\n background-color: rgba(255, 255, 255, 0.4);\n backdrop-filter: blur(5px);\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n\n &:before {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.6);\n }\n }\n\n .pnlm-zoom-in {\n top: auto;\n\n &:before {\n content: '+';\n }\n }\n\n .pnlm-zoom-out {\n bottom: auto;\n border-top: 1px solid ${(props) => props.theme.color.textDark};\n\n &:before {\n content: '-';\n }\n }\n\n // Load Button\n\n .pnlm-load-button {\n top: auto;\n bottom: ${size(2)};\n transform: translateX(-50%);\n width: auto;\n height: auto;\n padding: ${size(1.75)} ${size(2)};\n border-radius: 3px;\n margin: 0;\n background-color: ${(props) => props.theme.color.accentDark};\n color: ${(props) => props.theme.color.textDark};\n line-height: 1.1;\n user-select: none;\n\n &:hover {\n background-color: ${(props) => props.theme.color.accentDark};\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n\n // Load box\n\n .pnlm-load-box {\n background-color: transparent;\n height: auto;\n margin: 0;\n width: 150px;\n transform: translate(-50%, -50%);\n\n > p {\n display: none;\n }\n }\n\n // Load bar\n\n .pnlm-lbar {\n width: 100%;\n background-color: rgba(255, 255, 255, 0.4);\n border: 0;\n }\n\n .pnlm-lbar-fill {\n background-color: ${(props) => props.theme.color.textLight};\n }\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Item, Img } from '../Lightbox/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport Rotation from './Rotation';\nimport { useTranslation } from 'react-i18next';\n\ntype PropsType = {\n urls: string[];\n};\n\nconst ThreeSixtyLightbox = ({ urls }: PropsType) => {\n const { t } = useTranslation();\n const [started, setStarted] = useState(false);\n\n const onStart = useCallback(() => setStarted(true), []);\n\n if (!started) {\n return (\n <Item>\n <Img src={urls[0]} alt=\"alt\" />\n <MediaButton text={t('item.start360Exterior')} onClick={onStart} />\n </Item>\n );\n }\n\n return (\n <Rotation>\n {urls.map((image, i) => (\n <Img key={image} src={image} alt={t('common.imageIndex', { index: i + 1 }) || ''} />\n ))}\n </Rotation>\n );\n};\n\nexport default ThreeSixtyLightbox;\n", "import React from 'react';\n\nimport { MediaButtonWrapper } from './wrapper';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\n\ninterface MediaButtonProps {\n text: string;\n onClick: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n}\n\nconst MediaButton = ({ text, onClick }: MediaButtonProps) => (\n <MediaButtonWrapper>\n <ButtonSecondary onClick={onClick} title={text}>\n <ButtonContent>{text}</ButtonContent>\n </ButtonSecondary>\n </MediaButtonWrapper>\n);\n\nexport default MediaButton;\n", "import React, { useState, useEffect, useRef, cloneElement, Children } from 'react';\n\nconst calculateCurrentFrame = (startFrame: number, delta: number, length: number): number => {\n const frame = (startFrame + delta) % length;\n if (frame < 0) {\n return frame + length;\n }\n\n return frame;\n};\n\ntype PropsType = {\n children: React.ReactNode;\n};\n\ntype RotationEvent = any;\n\nconst Rotation = ({ children }: PropsType) => {\n const startFrame = useRef(0);\n const pointerPosition = useRef<number>();\n const max = useRef(0);\n\n const [state, setState] = useState({\n current: 0,\n outsideMouseMove: false,\n });\n\n useEffect(() => {\n document.addEventListener('mouseup', touchEnd);\n\n return () => {\n window.document.removeEventListener('mouseup', touchEnd);\n window.document.body.removeEventListener('mousemove', mouseMove);\n window.document.body.removeEventListener('mouseup', mouseUp);\n };\n }, []);\n\n const touchMove = (event: RotationEvent) => {\n const notTouched = typeof pointerPosition.current !== 'number';\n event.preventDefault();\n if (notTouched) {\n return;\n }\n\n const childCount = Children.count(children);\n\n const { offsetWidth } = event.currentTarget;\n const pointer = calculatePointerPosition(event);\n const max = offsetWidth;\n const offset = pointer - (pointerPosition.current || 0);\n const delta = Math.floor((offset / max) * childCount);\n setCurrentFrame(calculateCurrentFrame(startFrame.current, delta, childCount));\n };\n\n const mouseMove = (event: RotationEvent) => {\n const notTouched = typeof pointerPosition.current !== 'number';\n event.preventDefault();\n if (notTouched || !state.outsideMouseMove) return;\n\n const childCount = Children.count(children);\n\n const pointer = calculatePointerPosition(event);\n const offset = pointer - (pointerPosition.current || 0);\n const delta = Math.floor((offset / max.current) * childCount);\n setCurrentFrame(calculateCurrentFrame(startFrame.current, delta, childCount));\n };\n\n const mouseUp = () => {\n window.document.body.removeEventListener('mousemove', mouseMove);\n window.document.body.removeEventListener('mouseup', mouseUp);\n\n pointerPosition.current = undefined;\n startFrame.current = 0;\n };\n\n const touchStart = (event: RotationEvent) => {\n event.preventDefault();\n pointerPosition.current = calculatePointerPosition(event);\n startFrame.current = state.current;\n\n const { offsetWidth } = event.currentTarget;\n max.current = offsetWidth;\n\n window.document.body.addEventListener('mousemove', mouseMove);\n window.document.body.addEventListener('mouseup', mouseUp);\n };\n\n const touchEnd = (event: RotationEvent) => {\n event.preventDefault();\n pointerPosition.current = undefined;\n startFrame.current = 0;\n };\n\n const onMouseEnter = () => {\n if (state.outsideMouseMove) setState({ ...state, outsideMouseMove: false });\n };\n\n const onMouseLeave = () => {\n if (!state.outsideMouseMove) setState({ ...state, outsideMouseMove: true });\n };\n\n const setCurrentFrame = (current: number) => {\n if (current !== state.current) {\n setState({ ...state, current });\n }\n };\n\n const calculatePointerPosition = (event: RotationEvent): number => {\n const { clientX } = event.type.indexOf('touch') === 0 ? event.changedTouches[0] : event;\n const { offsetLeft } = event.currentTarget;\n return clientX - offsetLeft;\n };\n\n return (\n <div\n onTouchStart={touchStart}\n onTouchMove={touchMove}\n onTouchEnd={touchEnd}\n onMouseDown={touchStart}\n onMouseMove={touchMove}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {Children.map(children, (child, i) =>\n cloneElement(child as React.ReactElement, {\n style: {\n width: '100%',\n display: state.current === i ? 'block' : 'none',\n },\n })\n )}\n </div>\n );\n};\n\nexport default Rotation;\n", "import React, { useState, useCallback } from 'react';\n\nimport useThumbnail from './useThumbnail';\nimport { ImageFull } from '../Gallery/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport Modal from '../Modal/index';\nimport VideoPlayer from './EmbeddedVideoLightbox';\nimport { onImageLoad, onImageError } from './utils';\nimport CustomPlayer from '../Video/CustomPlayer';\nimport { useTranslation } from 'react-i18next';\n\ninterface GalleryEmbed {\n src: string;\n index: number;\n controls?: boolean;\n}\n\nconst GalleryEmbed = ({ src, index }: GalleryEmbed) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState<string>();\n const thumbnail = useThumbnail(src);\n\n const onClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.stopPropagation();\n setModal(src);\n };\n\n const onCloseModal = (e: React.MouseEvent<HTMLButtonElement | HTMLDivElement, MouseEvent>) => {\n e.stopPropagation();\n setModal(undefined);\n };\n\n const onError = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageError(e, thumbnail),\n [thumbnail]\n );\n\n const onLoad = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageLoad(e, thumbnail),\n [thumbnail]\n );\n\n const customVideo = src.toLowerCase().endsWith('.mp4');\n\n if (thumbnail?.length && !customVideo) {\n return (\n <>\n <ImageFull\n onLoad={onLoad}\n src={thumbnail[0]}\n onError={onError}\n alt={t('common.imageIndex', { index: index + 1 }) || ''}\n />\n <MediaButton text={t('other.playVideo')} onClick={onClick} />\n {modal && (\n <Modal title={t('other.video')} onClose={onCloseModal}>\n <VideoPlayer url={modal} />\n </Modal>\n )}\n </>\n );\n }\n\n if (customVideo)\n return (\n <>\n <CustomPlayer ratio=\"66.66%\" isPreview controls={false} url={src} />\n <MediaButton text={t('other.playVideo')} onClick={onClick} />\n {modal && (\n <Modal title={t('other.video')} onClose={onCloseModal}>\n <VideoPlayer url={modal} />\n </Modal>\n )}\n </>\n );\n return null;\n};\n\nexport default GalleryEmbed;\n", "import { useEffect, useState } from 'react';\nimport { getVimeoId, getYoutubeThumbnail } from './utils';\nimport useVimeoThumbnail from '../../hooks/useVimeoThumbnail';\n\nconst useThumbnail = (url?: string | null, small?: boolean) => {\n if (url?.toLowerCase().endsWith('.mp4')) return;\n\n const [thumbnail, setThumbnail] = useState<string[]>();\n const vimeoId = url ? getVimeoId(url) : undefined;\n const vimeoThumbnail = useVimeoThumbnail(vimeoId, small);\n\n useEffect(() => {\n if (url) {\n const youtubeThumbnail = getYoutubeThumbnail(url);\n if (youtubeThumbnail) {\n if (small) {\n setThumbnail([youtubeThumbnail.mqdefault]);\n } else {\n setThumbnail([youtubeThumbnail.maxresdefault, youtubeThumbnail.hqdefault]);\n }\n }\n }\n }, [url]);\n\n return vimeoThumbnail ? [vimeoThumbnail] : thumbnail;\n};\n\nexport default useThumbnail;\n", "import { useEffect, useState } from 'react';\nimport useFetch from './useFetch';\n\ninterface VimeoItem {\n thumbnail_large: string;\n thumbnail_small: string;\n}\n\nconst useVimeoThumbnail = (id?: string, small?: boolean) => {\n const [thumbnail, setThumbnail] = useState<string>();\n const { data } = useFetch<VimeoItem[]>(\n `http://vimeo.com/api/v2/video/${id}.json`,\n {},\n !id || !!thumbnail,\n true\n );\n\n useEffect(() => {\n if (data?.[0]) {\n if (small && data[0].thumbnail_small) {\n setThumbnail(data[0].thumbnail_small);\n } else if (data[0].thumbnail_large) {\n setThumbnail(data[0].thumbnail_large);\n }\n }\n }, [data]);\n\n return thumbnail;\n};\n\nexport default useVimeoThumbnail;\n", "import { useEffect, useState, useCallback } from 'react';\n\nconst cache: { [key: string]: unknown | undefined } = {};\n\nconst getCachedResult = <T>(key: string) => (cache?.[key] as T) || undefined;\nconst setCachedResult = <T>(key: string, value: T) => {\n cache[key] = value;\n};\n\n/**\n * Reusing already fired request by attaching to same promise.\n * Usefull if multiple request is fetching from same endpoint, while\n * the first request has not been finished (so no cache exist yet).\n */\n\nlet pendingPromise: { [key: string]: Promise<globalThis.Response> } = {};\nconst isPendingPromise = (url: string) => !!pendingPromise[url];\nconst setPendingPromise = (url: string, promise: Promise<globalThis.Response>) => {\n pendingPromise = {\n ...pendingPromise,\n [url]: promise,\n };\n};\nconst clearPendingPromise = (url: string) => {\n delete pendingPromise[url];\n};\n\ninterface Response<T> {\n loading: boolean;\n data?: T;\n error: boolean;\n}\n\nconst useFetch = <T>(\n path: RequestInfo,\n options?: RequestInit,\n skip?: boolean,\n promiseCache?: boolean\n): Response<T> => {\n const [data, setData] = useState<T | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n\n const doFetch = useCallback(async () => {\n const key = path.toString();\n const cached = getCachedResult<T>(key);\n setError(false);\n if (cached) {\n setData(cached);\n return;\n }\n setLoading(true);\n try {\n const reusePromise = promiseCache && isPendingPromise(key);\n const request = reusePromise ? pendingPromise[key] : fetch(path, options);\n if (promiseCache) {\n setPendingPromise(key, request);\n }\n\n const result = await request;\n if (result.ok) {\n const json = await result.clone().json();\n setCachedResult(key, json);\n setData(json);\n }\n } catch (e) {\n setError(true);\n } finally {\n setLoading(false);\n clearPendingPromise(key);\n }\n return;\n }, [path, options]);\n\n useEffect(() => {\n if (!skip) {\n doFetch();\n }\n }, [path, skip]);\n\n return {\n loading,\n data,\n error,\n };\n};\n\nexport default useFetch;\n", "import * as React from 'react';\n\nimport { Portal, PortalNamespace } from '../Portal/index';\n\nimport { H1 } from '../Heading/index';\nimport { IconCancel } from '../Icon/index';\nimport {\n Body,\n Content,\n Dialog,\n Header,\n Heading,\n UiBlock,\n Wrapper,\n Close,\n CloseBtn,\n} from './wrapper';\nimport { useTranslation } from 'react-i18next';\n\ninterface ModalProps {\n id?: string | null;\n title: string | null;\n children: React.ReactNode;\n onClose: (e: React.MouseEvent<HTMLDivElement | HTMLButtonElement, MouseEvent>) => void;\n}\n\nconst Modal = ({ id, title, onClose, children }: ModalProps) => {\n const { t } = useTranslation();\n return (\n <Portal id={id || PortalNamespace.DefaultPortal}>\n <Wrapper onClick={(e) => e.stopPropagation()}>\n <UiBlock onClick={onClose} title={t('other.closeModal') || ''} />\n <Dialog>\n <Content>\n <Header>\n <Heading>\n <H1 noMargin>{title}</H1>\n </Heading>\n <Close>\n <CloseBtn onClick={onClose} title={t('other.closeModal') || ''}>\n <IconCancel block />\n </CloseBtn>\n </Close>\n </Header>\n <Body>{children}</Body>\n </Content>\n </Dialog>\n </Wrapper>\n </Portal>\n );\n};\n\nexport default Modal;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { fadeIn, noTransform } from '../../layout/keyframes';\n\nimport { ButtonReset } from '../Button/index';\nimport { H1 } from '../Heading/index';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'dialog',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n white-space: normal;\n text-align: left;\n z-index: 90;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${(props) => props.theme.breakpoint.Sm} {\n padding: ${size(2)};\n }\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n 'aria-hidden': 'true',\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.35);\n z-index: -1;\n\n ${(props) => props.theme.breakpoint.LtMd} {\n animation: ${fadeIn} 300ms ease forwards;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n animation: ${fadeIn} 400ms ease forwards;\n }\n`;\n\nexport const Dialog = styled.article.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n display: flex;\n flex-direction: column;\n background-color: ${(props) => props.theme.color.bg};\n z-index: 1;\n width: 100%;\n max-width: 680px;\n max-height: 100%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n align-self: flex-end;\n transform: translateY(100%);\n animation: ${noTransform} 300ms ease forwards;\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n transform: translateY(${size(2)});\n animation: ${fadeIn} 400ms ease, ${noTransform} 400ms ease forwards;\n }\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n\nexport const Header = styled.header`\n display: flex;\n align-items: center;\n min-height: 60px;\n padding: ${size(3)};\n padding-bottom: 0;\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n\n ${H1} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Close = styled.div`\n flex-shrink: 0;\n margin: ${size(-2)};\n padding-left: ${size(3)};\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n display: block;\n padding: ${size(2)};\n`;\n\nexport const Body = styled.div`\n padding: ${size(3)};\n`;\n\nexport const Image = styled.img`\n display: block;\n width: calc(100% + ${size(6)});\n margin-left: ${size(-3)};\n margin-bottom: ${size(3)};\n`;\n\nexport const ModalFoldout = styled.div`\n background-color: ${(props) => props.theme.color.accent};\n margin: ${size(-3)};\n margin-top: ${size(3)};\n padding: ${size(3)};\n`;\n\nexport const ModalFoldoutBody = styled.div``;\n", "import React, { useCallback } from 'react';\n\nimport useThumbnail from './useThumbnail';\nimport { QuickNavImg } from '../Gallery/wrapper';\nimport { onImageLoad, onImageError } from './utils';\nimport CustomPlayer from '../Video/CustomPlayer';\nimport { useTranslation } from 'react-i18next';\n\ninterface QuickNavEmbededProps {\n src?: string;\n index: number;\n}\n\nconst QuickNavEmbeded = ({ src, index }: QuickNavEmbededProps) => {\n const { t } = useTranslation();\n const thumbnail = useThumbnail(src);\n const onError = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageError(e, thumbnail),\n [thumbnail]\n );\n\n const onLoad = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageLoad(e, thumbnail),\n [thumbnail]\n );\n\n const customVideo = src?.toLowerCase().endsWith('.mp4');\n\n if (thumbnail?.length && !customVideo)\n return (\n <QuickNavImg\n onLoad={onLoad}\n src={thumbnail[0]}\n onError={onError}\n alt={t('common.imageIndex', { index: index + 1 }) || ''}\n />\n );\n if (customVideo) return <CustomPlayer key={index} url={src} ratio=\"66.66%\" />;\n return null;\n};\n\nexport default QuickNavEmbeded;\n", "import React from 'react';\nimport SphereViewer from './SphereViewer';\n\nimport { ImageFull } from '../Gallery/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport { useTranslation } from 'react-i18next';\n\nconst onMediaClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>, func: () => void) => {\n e.stopPropagation();\n e.preventDefault();\n func();\n};\n\ntype PropsType = {\n url: string;\n preview: string;\n navigationDisabled: boolean;\n visible: boolean;\n onDisableNavigation: () => void;\n};\n\nconst Sphere = ({ url, preview, visible, onDisableNavigation, navigationDisabled }: PropsType) => {\n const { t } = useTranslation();\n if (!visible || (!navigationDisabled && visible)) {\n return (\n <>\n <ImageFull src={preview} alt=\"alt\" />\n <MediaButton\n text={t('item.start360Interior')}\n onClick={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void =>\n onMediaClick(e, onDisableNavigation)\n }\n />\n </>\n );\n }\n if (navigationDisabled && visible) {\n return (\n <SphereViewer\n id={url}\n preview={url}\n src={url}\n autoLoad={true}\n onStart={onDisableNavigation}\n />\n );\n }\n return null;\n};\n\nexport default Sphere;\n", "import React from 'react';\n\nimport { Image } from '../Gallery/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport Rotation from './Rotation';\nimport { useTranslation } from 'react-i18next';\n\nconst onMediaClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>, func: () => void) => {\n e.stopPropagation();\n e.preventDefault();\n func();\n};\n\ntype PropsType = {\n urls: string[];\n navigationDisabled: boolean;\n visible: boolean;\n onDisableNavigation: () => void;\n};\n\nconst ThreeSixty = ({ urls, visible, onDisableNavigation, navigationDisabled }: PropsType) => {\n const { t } = useTranslation();\n if (!visible || (!navigationDisabled && visible)) {\n return (\n <>\n <Image src={urls[0]} alt=\"alt\" />\n <MediaButton\n text={t('item.start360Exterior')}\n onClick={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void =>\n onMediaClick(e, onDisableNavigation)\n }\n />\n </>\n );\n }\n if (navigationDisabled && visible) {\n return (\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <Rotation>\n {urls.map((image, i) => (\n <Image key={image} src={image} alt={t('common.imageIndex', { index: i + 1 }) || ''} />\n ))}\n </Rotation>\n </div>\n );\n }\n return null;\n};\n\nexport default ThreeSixty;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { Wrapper as Container } from '../Container/wrapper';\n\nexport const ProductPage = styled.div`\n display: flex;\n flex-direction: column;\n\n ${(props) => props.theme.breakpoint.Md} {\n flex-direction: row;\n }\n`;\n\nexport const ProductPageAside = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: contents;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n flex-shrink: 0;\n width: calc(375px + ${size(2)});\n padding-right: ${size(2)};\n }\n`;\n\nexport const ProductPageMain = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: contents;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n flex: 1 1 100%;\n min-width: 0;\n padding-left: ${size(2)};\n }\n`;\n\ntype ProductPageAsideSectionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n mobileOrder?: number;\n};\n\nexport const ProductPageAsideSection = styled.div<ProductPageAsideSectionProps>`\n ${(props) => props.theme.breakpoint.LtMd} {\n order: ${(props) => props.mobileOrder};\n\n & + & {\n margin-top: ${size(2)};\n }\n\n :last-child {\n margin-bottom: ${size(4)};\n }\n\n ${ProductPageMain} & {\n margin-top: ${size(2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n & + & {\n margin-top: ${size(4)};\n }\n\n ${ProductPageMain} & {\n margin-bottom: ${size(8)};\n }\n }\n`;\n\nexport const ProductPageMainSection = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n order: 99;\n padding: ${size(4)} 0;\n border-top: ${size(1)} solid ${(props) => props.theme.color.accent};\n\n ${Container} & {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n padding-left: ${size(2)};\n padding-right: ${size(2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n & + & {\n margin-top: ${size(8)};\n padding-top: ${size(8)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n }\n`;\n\nexport const ProductPageContentLimit = styled.div`\n max-width: 420px;\n`;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport SEARCH_ITEM_QUERY from '../queries/SEARCH_ITEM_QUERY';\nimport { QueryVehicleArgs, Query } from '../@types/codegen/types';\n\nconst useSearchItem = (id?: string): QueryResult<Query, QueryVehicleArgs> =>\n useQuery<Query, QueryVehicleArgs>(SEARCH_ITEM_QUERY, {\n variables: { id: id as string },\n skip: !id,\n });\n\nexport default useSearchItem;\n", "import { gql } from '@apollo/client';\n\nconst FinancialOptionDetail = gql`\n fragment FinancialOptionDetail on FinancialOptionDetail {\n current\n default\n max\n min\n step\n }\n`;\n\nconst HoursOpen = gql`\n fragment HoursOpen on HoursOpen {\n from\n until\n }\n`;\n\nconst SEARCH_ITEM_QUERY = gql`\n query SearchItem($id: ID!) {\n vehicle(id: $id) {\n id\n documents\n contact {\n name\n email\n phonenumber\n avatar\n }\n accessories {\n articleNumber\n description\n excerpt\n id\n images\n logotype\n manufacturer\n model\n name\n price\n assemblyPrice\n productPage {\n title\n url\n }\n salePrice\n }\n manufacturer {\n description\n logotype\n name\n packageOption {\n description\n image\n link {\n title\n url\n }\n title\n }\n }\n packageOptions {\n description\n image\n link {\n title\n url\n }\n title\n }\n publishedAt\n branch {\n connections {\n id\n name\n location {\n city\n county\n streetAddress\n postalCode\n position {\n latitude\n longitude\n }\n }\n }\n contact {\n name\n email\n phonenumber\n avatar\n }\n id\n description\n name\n homepage\n flags {\n mrf\n centralStorage\n ecommerce\n }\n logotype\n openingHours {\n monday {\n ...HoursOpen\n }\n tuesday {\n ...HoursOpen\n }\n wednesday {\n ...HoursOpen\n }\n thursday {\n ...HoursOpen\n }\n friday {\n ...HoursOpen\n }\n saturday {\n ...HoursOpen\n }\n sunday {\n ...HoursOpen\n }\n }\n organization {\n branches {\n id\n }\n parent {\n id\n }\n }\n location {\n position {\n latitude\n longitude\n }\n city\n county\n streetAddress\n postalCode\n }\n promos {\n description\n image\n title\n }\n services {\n markdown\n title\n }\n }\n data {\n enginePower\n equipmentLevel\n fuelType\n gearbox\n gearboxType\n manufactureYear\n manufacturer\n mileage\n odometerReading {\n value\n unit\n }\n modelName\n modelSeries\n modelYear\n properties\n propertySet\n options\n registrationNumber\n salesName\n vin\n }\n description\n ecommerce {\n enabled\n reserved\n withTradeIn\n withHomeDelivery\n }\n insuranceOptions {\n insuranceHeader\n institute\n identifier\n logotype\n name\n description\n longDescription\n url\n insuranceText\n requiresPersonalNumber\n requiresDistance\n terms\n }\n financialOptions {\n description\n administrationFee\n downPayment {\n ...FinancialOptionDetail\n }\n duration {\n ...FinancialOptionDetail\n }\n effectiveInterest\n image\n includes\n includes\n interest\n link {\n title\n url\n }\n loanAmount\n logotype\n mileage {\n ...FinancialOptionDetail\n }\n monthlyCost\n name\n residual {\n ...FinancialOptionDetail\n }\n setupFee\n terms\n totalCreditCost\n totalResidualValue\n type\n url\n }\n media {\n type\n files {\n formats {\n format\n url\n }\n url\n }\n }\n location {\n city\n county\n streetAddress\n postalCode\n }\n price\n discount\n shortDescription\n title\n availableFrom\n flags {\n demoVersion\n }\n }\n }\n ${HoursOpen}\n ${FinancialOptionDetail}\n`;\n\nexport default SEARCH_ITEM_QUERY;\n", "import React, { Fragment } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat/index';\nimport { VisualHeading } from '../Heading/index';\nimport Leasing from './leasing';\nimport Loan from './loan';\nimport { FinancialOption } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface FinancialOptionsProps {\n id: string;\n financialOptions: FinancialOption[];\n}\n\nconst FinancialOptions = ({ id, financialOptions }: FinancialOptionsProps) => {\n const { t } = useTranslation();\n return (\n <Repeat>\n <RepeatTiny>\n <VisualHeading>{t('item.financialOptions.otherFinancialOptions')}</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n {financialOptions.map((financialOption, index) => (\n <Fragment key={index}>\n {(financialOption.type === 'leasing' ||\n financialOption.type === 'business-leasing') && (\n <Leasing financialOption={financialOption} />\n )}\n {financialOption.type === 'loan' && <Loan id={id} financialOption={financialOption} />}\n </Fragment>\n ))}\n </RepeatTiny>\n </Repeat>\n );\n};\n\nexport default FinancialOptions;\n", "import React, { useState, useCallback } from 'react';\n\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { UtilityTextPrimary } from '../Utility/index';\nimport { ButtonInline } from '../Button/index';\nimport { numberSeparator } from '../../utils/formats';\nimport Modal from '../Modal/index';\nimport { Image, ModalFoldout, ModalFoldoutBody } from '../Modal/wrapper';\nimport Content from '../Content/index';\nimport DataList from '../DataList/index';\nimport { FinancialOption } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface LeasingProps {\n financialOption: FinancialOption;\n}\n\nconst Leasing = ({ financialOption }: LeasingProps) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n\n const { image, description, monthlyCost, duration, mileage, type, name } = financialOption;\n\n const title =\n type === 'leasing'\n ? t('item.financialOptions.privateLease')\n : type === 'business-leasing'\n ? t('item.financialOptions.businessLease')\n : type;\n\n return (\n <>\n {modal && (\n <Modal title={title} onClose={toggleModal}>\n {image && <Image src={image} alt={title} />}\n {description && <Content dangerouslySetInnerHTML={{ __html: description }} />}\n <ModalFoldout>\n <ModalFoldoutBody>\n <DataList\n items={[\n {\n label: t('item.financialOptions.monthlyCost'),\n value: `${numberSeparator(monthlyCost || 0)} ${t('currency.monthly')}`,\n },\n {\n label: t('item.financialOptions.bindingTime'),\n value: `${duration?.current} m\u00E5nader`,\n },\n {\n label: t('item.financialOptions.annualMileage'),\n value: `${numberSeparator(mileage?.current || 0)} ${t(\n 'item.financialOptions.mileagePeryear'\n )}`,\n },\n ]}\n />\n </ModalFoldoutBody>\n </ModalFoldout>\n </Modal>\n )}\n <OptionBox>\n <>\n {monthlyCost !== null && monthlyCost !== undefined && (\n <OptionBoxHeading>{`ca ${numberSeparator(monthlyCost)} ${t(\n 'currency.monthly'\n )}`}</OptionBoxHeading>\n )}\n </>\n <OptionBoxContent>\n <p>\n {title}{' '}\n {mileage?.current && duration?.current && (\n <>\n <UtilityTextPrimary>\n {numberSeparator(mileage?.current)} {t('item.financialOptions.mileagePeryear')}\n </UtilityTextPrimary>{' '}\n i{' '}\n <UtilityTextPrimary>\n {duration?.current} {t('item.financialOptions.months')}\n </UtilityTextPrimary>\n .{' '}\n </>\n )}\n </p>\n {name && (\n <p>\n <ButtonInline onClick={toggleModal}>{t('common.readMore')}</ButtonInline>\n </p>\n )}\n </OptionBoxContent>\n </OptionBox>\n </>\n );\n};\n\nexport default Leasing;\n", "import * as React from 'react';\n\nimport { Logo, LogoImg, Content, Wrapper } from './wrapper';\n\ninterface IOptionBox {\n logo?: string;\n logo2x?: string;\n logoAlt?: string;\n children: React.ReactNode;\n}\n\nconst OptionBox = ({ logo, logo2x, logoAlt, children }: IOptionBox) => (\n <Wrapper>\n {logo && (\n <Logo>\n <LogoImg src={logo} srcSet={logo2x} alt={logoAlt} />\n </Logo>\n )}\n <Content>{children}</Content>\n </Wrapper>\n);\n\nexport default OptionBox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n padding: ${size(1)};\n border: 1px solid ${(props) => props.theme.color.border};\n border-radius: 3px;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Logo = styled.div`\n position: relative;\n flex-shrink: 0;\n margin-right: ${size(1)};\n width: ${size(9.5)};\n height: ${size(6)};\n`;\n\nexport const LogoImg = styled.img`\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n right: auto;\n bottom: 0;\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n text-align: right;\n line-height: 1.4;\n`;\n\nexport const OptionBoxHeading = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1rem;\n`;\n\nexport const OptionBoxContent = styled.div`\n margin-top: ${size(0.5)};\n font-size: 0.875rem;\n\n p {\n margin: 0;\n }\n`;\n", "import React from 'react';\n\nimport { List, Item, Label, Value } from './wrapper';\n\ninterface ItemProps {\n label: string;\n value: string;\n}\n\ninterface Props {\n items: ItemProps[];\n}\n\nconst DataList = ({ items }: Props) => (\n <List>\n {items.map((item) => (\n <Item key={item.label}>\n <Label>{item.label}</Label>\n <Value>{item.value}</Value>\n </Item>\n ))}\n </List>\n);\n\nexport default DataList;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n display: flex;\n align-items: flex-start;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Label = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Value = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n flex-shrink: 0;\n padding-left: ${size(2)};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { ButtonInline } from '../Button/index';\nimport { numberSeparator } from '../../utils/formats';\nimport useLoanCalculation from '../../hooks/useLoan';\nimport { FinancialOption } from '../../@types/codegen/types';\nimport LoanModal from './LoanModal';\nimport { useTranslation } from 'react-i18next';\n\ninterface LoanProps {\n id: string;\n financialOption: FinancialOption;\n}\n\nconst Loan = ({ id, financialOption }: LoanProps) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n\n const { data } = useLoanCalculation(\n id,\n financialOption.duration?.current,\n financialOption.downPayment?.current,\n financialOption.residual?.current\n );\n\n const interest = data?.loan?.interest;\n const duration = data?.loan?.duration?.current;\n const monthlyCost = data?.loan?.monthlyCost;\n\n const logo = financialOption?.logotype || 'https://placehold.it/67x10';\n\n // Skeleton?\n if (\n financialOption.loanAmount === undefined ||\n financialOption.loanAmount === null ||\n interest === undefined ||\n duration === undefined ||\n monthlyCost === undefined ||\n interest === null ||\n duration === null ||\n monthlyCost === null\n ) {\n return (\n <OptionBox logo={logo} logoAlt={t('common.logotype')}>\n <OptionBoxHeading>{t('other.loading')}</OptionBoxHeading>\n\n <OptionBoxContent>\n <p>{t('other.loading')}</p>\n </OptionBoxContent>\n </OptionBox>\n );\n }\n\n return (\n <>\n {modal && <LoanModal id={id} financialOption={financialOption} onClose={toggleModal} />}\n <OptionBox logo={logo} logoAlt={t('common.logotype')}>\n <>\n <OptionBoxHeading>{`${numberSeparator(monthlyCost)} ${t(\n 'currency.monthly'\n )}*`}</OptionBoxHeading>\n\n <OptionBoxContent>\n <p>\n {financialOption.loanAmount && duration\n ? t('item.financialOptions.payInInstallmentsDetailed', {\n amount: `${numberSeparator(financialOption.loanAmount)} kr`,\n duration,\n })\n : t('item.financialOptions.payInInstallments')}\n </p>\n\n <p>\n *\n {t('item.financialOptions.disclaimer', {\n interest: `${(interest * 100).toFixed(2)}%`,\n })}{' '}\n <ButtonInline onClick={toggleModal}>{t('common.readMore')}</ButtonInline>\n </p>\n </OptionBoxContent>\n </>\n </OptionBox>\n </>\n );\n};\n\nexport default Loan;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport LOAN_CALCULATION from '../queries/LOAN_CALCULATION';\nimport { QueryLoanArgs, Query } from '../@types/codegen/types';\n\nconst useLoanCalculation = (\n id: string,\n duration?: number,\n downPayment?: number,\n residual?: number\n): QueryResult<Query, QueryLoanArgs> =>\n useQuery<Query, QueryLoanArgs>(LOAN_CALCULATION, {\n variables: {\n id,\n duration: duration as number,\n downPayment: downPayment as number,\n residual: (residual as number) || 0,\n },\n skip: duration === undefined || downPayment === undefined,\n });\n\nexport default useLoanCalculation;\n", "import { gql } from '@apollo/client';\n\nconst FinancialOptionDetail = gql`\n fragment FinancialOptionDetail on FinancialOptionDetail {\n current\n default\n max\n min\n step\n }\n`;\n\nconst LOAN_CALCULATION = gql`\n query LoanCalculation($id: ID!, $duration: Int!, $downPayment: Int!, $residual: Float!) {\n loan(id: $id, duration: $duration, downPayment: $downPayment, residual: $residual) {\n downPayment {\n ...FinancialOptionDetail\n }\n effectiveInterest\n duration {\n ...FinancialOptionDetail\n }\n residual {\n ...FinancialOptionDetail\n }\n mileage {\n ...FinancialOptionDetail\n }\n interest\n loanAmount\n totalCreditCost\n totalResidualValue\n monthlyCost\n }\n }\n ${FinancialOptionDetail}\n`;\n\nexport default LOAN_CALCULATION;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport useLoanCalculation from '../../hooks/useLoan';\nimport Modal from '../Modal/index';\nimport { ModalFoldout, ModalFoldoutBody } from '../Modal/wrapper';\nimport Content from '../Content/index';\nimport LogoBox from '../LogoBox/index';\nimport { Repeat, RepeatSmall, RepeatTiny } from '../Repeat/index';\nimport { numberSeparator } from '../../utils/formats';\nimport { ButtonClear, ButtonContent } from '../Button/index';\nimport { ContentLogo, ContentLogoText, ContentLogoMedia } from '../ContentLogo/index';\nimport DataList from '../DataList/index';\nimport { FinancialOption, Query } from '../../@types/codegen/types';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport SliderWithLabel from '../RangeSlider/SliderWithLabel';\nimport { useTranslation } from 'react-i18next';\n\nconst stepGenerator = (\n step: number,\n max: number,\n steps: number[] = [],\n current?: number\n): number[] => {\n if (step === 0 && current === undefined) return steps;\n\n if (current !== undefined && current >= max && step !== 0) {\n return steps;\n }\n\n const nextCurrent = current ? step + current : step;\n steps.push(nextCurrent);\n return stepGenerator(step, max, steps, nextCurrent);\n};\n\ninterface LoanModalProps {\n id: string;\n financialOption: FinancialOption;\n onClose: () => void;\n}\n\nconst LoanModal = ({ id, financialOption, onClose }: LoanModalProps) => {\n const { t } = useTranslation();\n const [tmp, setTmp] = useState<Query>();\n const [extend, setExtend] = React.useState(false);\n const onToggleExtend = React.useCallback(() => {\n if (!extend) {\n PubSub.publish('FinanceInterest');\n }\n setExtend(!extend);\n }, [extend]);\n\n const [variables, setVariables] = useState({\n duration: financialOption.duration?.current,\n downPayment: financialOption.downPayment?.current,\n residual: financialOption.residual?.current,\n });\n\n const { duration, downPayment, residual } = variables;\n const { loading, data } = useLoanCalculation(id, duration, downPayment, residual);\n useEffect(() => {\n if (data) {\n setTmp(data);\n setVariables({\n duration: data?.loan?.duration?.current || 0,\n downPayment: data?.loan?.downPayment?.current || 0,\n residual: data?.loan?.residual?.current || 0,\n });\n }\n }, [data]);\n\n const loan = data?.loan || tmp?.loan;\n\n const downPaymentCurrent = loan?.downPayment?.current || 0;\n const downPaymentMin = loan?.downPayment?.min || 0;\n const downPaymentMax = loan?.downPayment?.max || 0;\n const downPaymentStep = loan?.downPayment?.step || 0;\n const downPaymentSteps = stepGenerator(downPaymentStep, downPaymentMax);\n const onDownPaymentChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, downPayment: values[0] });\n },\n [variables]\n );\n\n const durationCurrent = loan?.duration?.current || 0;\n const durationMin = loan?.duration?.min || 0;\n const durationMax = loan?.duration?.max || 0;\n const durationStep = loan?.duration?.step || 0;\n const durationSteps = stepGenerator(durationStep, durationMax);\n const onDurationChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, duration: values[0] });\n },\n [variables]\n );\n\n const residualCurrent = (loan?.residual?.current || 0) * 100 || 0;\n const residualMin = (loan?.residual?.min || 0) * 100 || 0;\n const residualMax = (loan?.residual?.max || 0) * 100 || 0;\n const residualStep = (loan?.residual?.step || 0) * 100 || 0;\n const residualSteps = stepGenerator(residualStep, residualMax);\n const onResidualChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, residual: values[0] / 100 });\n },\n [variables]\n );\n\n const interestText = ((loan?.interest || 0) * 100).toFixed(2);\n const effectiveInterestText = ((loan?.effectiveInterest || 0) * 100).toFixed(2);\n const monthlyCost = loan?.monthlyCost;\n\n return (\n <Modal title={t('item.financialOptions.loanOptions')} onClose={onClose}>\n <Repeat>\n <ContentLogo>\n {financialOption?.description && (\n <ContentLogoText>\n <Content>\n <p>{financialOption.description}</p>\n </Content>\n </ContentLogoText>\n )}\n {financialOption?.image && (\n <ContentLogoMedia>\n <LogoBox\n logo={financialOption.image}\n alt={financialOption.name || t('common.logotype')}\n wide\n />\n </ContentLogoMedia>\n )}\n </ContentLogo>\n </Repeat>\n <Repeat>\n <RepeatSmall>\n <SliderWithLabel\n label={t('item.financialOptions.downPayment')}\n values={[downPaymentCurrent]}\n domain={[downPaymentMin, downPaymentMax]}\n steps={downPaymentSteps}\n unit={t('currency.default')}\n formatValues\n loading={loading}\n onChange={onDownPaymentChange}\n />\n </RepeatSmall>\n <RepeatSmall>\n <SliderWithLabel\n label={t('item.financialOptions.duration')}\n values={[durationCurrent]}\n domain={[durationMin, durationMax]}\n steps={durationSteps}\n unit={t('item.financialOptions.months')}\n loading={loading}\n onChange={onDurationChange}\n />\n </RepeatSmall>\n {residual !== undefined && residualMax !== 0 && (\n <RepeatSmall>\n <SliderWithLabel\n label={t('item.financialOptions.residual')}\n values={[residualCurrent]}\n domain={[residualMin, residualMax]}\n steps={residualSteps}\n unit=\"%\"\n loading={loading}\n onChange={onResidualChange}\n />\n </RepeatSmall>\n )}\n <RepeatSmall>\n <RepeatTiny>\n {monthlyCost !== null && monthlyCost !== undefined && (\n <Content>{`${numberSeparator(monthlyCost)} ${t('currency.monthly')}*`}</Content>\n )}\n <Content small>\n <p>\n *\n {loan?.mileage !== null\n ? t('item.financialOptions.loanOptionsDisclaimerMileage', {\n interest: interestText,\n effectiveInterest: effectiveInterestText,\n mileage: loan?.mileage,\n })\n : t('item.financialOptions.loanOptionsDisclaimer', {\n interest: interestText,\n effectiveInterest: effectiveInterestText,\n })}\n </p>\n </Content>\n </RepeatTiny>\n </RepeatSmall>\n\n <RepeatSmall>\n <ButtonClear\n onClick={onToggleExtend}\n title={\n extend ? t('common.showLessInformation') || '' : t('common.showMoreInformation') || ''\n }\n >\n <ButtonContent>\n {extend ? t('common.lessInformation') : t('common.showMoreInformation')}\n </ButtonContent>\n </ButtonClear>\n </RepeatSmall>\n <>\n {extend && (\n <ModalFoldout>\n <ModalFoldoutBody>\n <DataList\n items={[\n {\n label: t('item.financialOptions.interest'),\n value: `${interestText} %`,\n },\n {\n label: t('item.financialOptions.effectiveinterest'),\n value: `${effectiveInterestText} %`,\n },\n {\n label: t('item.financialOptions.setupFee'),\n value: `${numberSeparator(financialOption?.setupFee || 0)} ${t(\n 'currency.default'\n )}`,\n },\n {\n label: t('item.financialOptions.administrationFee'),\n value: `${numberSeparator(financialOption?.administrationFee || 0)} ${t(\n 'currency.monthly'\n )}`,\n },\n {\n label: t('item.financialOptions.totalCreditCost'),\n value: `${numberSeparator(loan?.totalCreditCost || 0)} ${t(\n 'currency.default'\n )}`,\n },\n ]}\n />\n </ModalFoldoutBody>\n </ModalFoldout>\n )}\n </>\n </Repeat>\n </Modal>\n );\n};\n\nexport default LoanModal;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const ContentLogo = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n display: flex;\n align-items: flex-start;\n }\n`;\n\nexport const ContentLogoText = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n flex: 1 1 auto;\n }\n`;\n\nexport const ContentLogoMedia = styled.div`\n ${(props) => props.theme.breakpoint.LtSm} {\n margin-top: ${size(2)};\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n flex-shrink: 0;\n padding-left: ${size(4)};\n }\n`;\n", "import React, { useCallback, useEffect, useState } from 'react';\nimport { numberSeparator } from '../../utils/formats';\nimport RangeSliderLabel from '../RangeSliderLabel/index';\nimport { RepeatTiny } from '../Repeat/index';\nimport RangeSliderSimple from './RangeSliderSimple';\n\ninterface SliderWithLabelProps {\n label: string;\n values: number[];\n domain: number[];\n steps: number[];\n loading: boolean;\n unit: string;\n formatValues?: boolean;\n onChange: (values: readonly number[]) => void;\n}\n\nconst SliderWithLabel = ({\n label,\n values,\n domain,\n steps,\n loading,\n unit,\n formatValues,\n onChange,\n}: SliderWithLabelProps) => {\n const [local, setLocal] = useState<number[] | undefined>(steps);\n\n const onUpdate = useCallback((nextValues: readonly number[]) => {\n setLocal([...nextValues]);\n }, []);\n\n useEffect(() => {\n if (!loading) setLocal(undefined);\n }, [loading]);\n\n return (\n <>\n <RepeatTiny>\n <RangeSliderLabel\n label={label}\n value={`${numberSeparator(local?.[0] || values[0])}${unit ? ` ${unit}` : ''}`}\n />\n </RepeatTiny>\n <RepeatTiny>\n <RangeSliderSimple\n loading={loading}\n values={values}\n domain={domain}\n steps={steps}\n onChange={onChange}\n onUpdate={onUpdate}\n unit={unit}\n formatValues={formatValues}\n />\n </RepeatTiny>\n </>\n );\n};\n\nexport default SliderWithLabel;\n", "import React from 'react';\n\nimport { Wrapper, Label, Value } from './wrapper';\n\ninterface Props {\n label: string;\n value?: React.ReactNode;\n highlight?: boolean;\n}\n\nconst RangeSliderLabel = ({ label, value, highlight }: Props) => (\n <Wrapper>\n <Label>{label}</Label>\n {value && <Value isHighlighted={highlight}>{value}</Value>}\n </Wrapper>\n);\n\nexport default RangeSliderLabel;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: flex-end;\n`;\n\nexport const Label = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n flex: 1 1 auto;\n`;\n\ntype ValueProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n isHighlighted?: boolean;\n};\n\nexport const Value = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold wayke__color--primary-text',\n}))<ValueProps>`\n flex-shrink: 0;\n padding-left: ${size(2)};\n font-size: 1.125rem;\n\n ${({ isHighlighted }) =>\n isHighlighted &&\n css`\n font-size: 1.375rem;\n color: ${(props) => props.theme.color.textDark} !important;\n `}\n`;\n", "import React from 'react';\nimport { Slider, Rail, Handles, Tracks } from 'react-compound-slider';\n\nimport { Bar, RangeSpan, RangeSpanItem, Slider as OwnSlider } from './wrapper';\nimport { Handle } from './handle';\nimport { Track } from './track';\nimport { numberSeparator } from '../../utils/formats';\n\ninterface RangeSliderProps {\n loading: boolean;\n domain: number[];\n values: number[];\n steps: number[];\n unit?: string;\n formatValues?: boolean;\n onChange: (values: readonly number[]) => void;\n onUpdate?: (values: readonly number[]) => void;\n}\n\nconst RangeSliderSimple = ({\n loading,\n values,\n domain,\n steps,\n unit,\n formatValues,\n onChange,\n onUpdate,\n}: RangeSliderProps) => {\n const first = steps[0];\n const second = steps[1];\n const step = second - first;\n\n const currentMin = formatValues ? numberSeparator(domain[0]) : domain[0];\n const currentMax = formatValues ? numberSeparator(domain[1]) : domain[1];\n\n if (steps.length < 2) {\n return null;\n }\n\n return (\n <>\n <OwnSlider>\n <Slider\n disabled={loading}\n mode={1}\n step={step}\n domain={domain}\n onChange={onChange}\n onUpdate={onUpdate}\n values={values}\n rootStyle={{ position: 'relative' }}\n >\n <Rail>{({ getRailProps }) => <Bar {...getRailProps()} />}</Rail>\n <Handles>\n {({ handles, getHandleProps }) => (\n <div className=\"slider-handles\">\n {handles.map((handle) => (\n <Handle\n key={handle.id}\n handle={handle}\n domain={domain}\n getHandleProps={getHandleProps}\n />\n ))}\n </div>\n )}\n </Handles>\n <Tracks right={false}>\n {({ tracks, getTrackProps }) => (\n <div className=\"slider-tracks\">\n {tracks.map(({ id, source, target }) => (\n <Track key={id} source={source} target={target} getTrackProps={getTrackProps} />\n ))}\n </div>\n )}\n </Tracks>\n </Slider>\n </OwnSlider>\n {false && (\n <RangeSpan>\n <RangeSpanItem>{`${currentMin}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n <RangeSpanItem>{`${currentMax}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n </RangeSpan>\n )}\n </>\n );\n};\n\nexport default RangeSliderSimple;\n", "import React from 'react';\nimport { InsuranceOption, Branch } from '../../@types/codegen/types';\nimport Insurance from './Insurance';\nimport InsuranceFree from './InsuranceFree';\n\ninterface InsuranceOptions {\n id: string;\n branch?: Branch | null;\n insuranceOptions: InsuranceOption[];\n}\n\nconst InsuranceOptions = ({ id, branch, insuranceOptions }: InsuranceOptions) => {\n if (!insuranceOptions.length) {\n return null;\n }\n\n if (insuranceOptions.length > 0) {\n if (insuranceOptions[0].requiresDistance && insuranceOptions[0].requiresPersonalNumber)\n return <Insurance id={id} branch={branch} insuranceOptions={insuranceOptions} />;\n\n return <InsuranceFree insuranceOptions={insuranceOptions} />;\n }\n\n return null;\n};\n\nexport default InsuranceOptions;\n", "import React, { useState, useCallback } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat/index';\nimport { VisualHeading } from '../Heading/index';\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { ButtonInline } from '../Button/index';\nimport { InsuranceOption, Branch } from '../../@types/codegen/types';\nimport InsuranceModal from './InsuranceModal';\nimport { useTranslation } from 'react-i18next';\n\ninterface InsuranceOptions {\n id: string;\n branch?: Branch | null;\n insuranceOptions: InsuranceOption[];\n}\n\nconst Insurance = ({ id, branch, insuranceOptions }: InsuranceOptions) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n if (!insuranceOptions.length) {\n return null;\n }\n\n return (\n <>\n {modal && (\n <InsuranceModal\n id={id}\n branch={branch}\n onClose={toggleModal}\n insuranceOptions={insuranceOptions[0]}\n />\n )}\n <Repeat>\n <RepeatTiny>\n <VisualHeading>{t('item.addInsurance')}</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n <>\n {insuranceOptions.map((insuranceOption, index) => (\n <OptionBox\n key={`${insuranceOption.url}-${index}`}\n logo={insuranceOption.logotype || undefined}\n logoAlt={insuranceOption.name || t('common.logotype')}\n >\n <OptionBoxHeading>{t('item.getInsuranceQuote')}</OptionBoxHeading>\n <OptionBoxContent>\n <p>\n <ButtonInline onClick={toggleModal}>{t('common.moreInformation')}</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n ))}\n </>\n </RepeatTiny>\n </Repeat>\n </>\n );\n};\n\nexport default Insurance;\n", "import React, { useState, useCallback } from 'react';\n\nimport Modal from '../Modal/index';\nimport Content from '../Content/index';\nimport { Repeat, RepeatTiny, RepeatSmall } from '../Repeat/index';\nimport LogoBox from '../LogoBox/index';\nimport DetailBox from '../DetailBox/index';\nimport ExtendInfo from '../ExtendInfo/index';\nimport Snackbar from '../Snackbar/index';\nimport { UtilityTextBold } from '../Utility/index';\nimport InputLabel from '../InputLabel/index';\nimport InputText from '../InputText/index';\nimport InputCheckbox from '../InputCheckbox/index';\nimport InputSelect, { OptionProps } from '../InputSelect/index';\nimport { H4 } from '../Heading/index';\nimport { InputGroup, InputGroupColumn } from '../InputGroup/index';\nimport { ButtonPrimary, ButtonContent, ButtonInline } from '../Button/index';\nimport { ContentLogo, ContentLogoText, ContentLogoMedia } from '../ContentLogo/index';\nimport { ColumnRow, ColumnRowItem } from '../ColumnRow/index';\nimport useInsuranceCalculation from '../../hooks/useInsurance';\nimport { ssnIsValid } from '../../utils/ssn';\nimport Loader from '../Loader/index';\nimport { numberSeparator } from '../../utils/formats';\nimport { DrivingDistance, InsuranceOption, Branch } from '../../@types/codegen/types';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { useTranslation } from 'react-i18next';\n\ninterface FormData {\n ssn: string;\n drivingDistance: DrivingDistance;\n}\n\ninterface InsuranceModal {\n id: string;\n branch?: Branch | null;\n onClose: () => void;\n insuranceOptions: InsuranceOption;\n}\n\nconst InsuranceModal = ({ id, branch, onClose, insuranceOptions }: InsuranceModal) => {\n const { t } = useTranslation();\n const [form, setForm] = useState<FormData>({\n ssn: '',\n drivingDistance: DrivingDistance.Between0And1000,\n });\n const [payload, setPayload] = useState<FormData>();\n const { loading, data, error } = useInsuranceCalculation(\n id,\n branch?.id ? branch?.id : undefined,\n ssnIsValid(payload?.ssn) ? payload?.ssn : undefined,\n payload?.drivingDistance\n );\n\n const onChangeSsn = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setForm({ ...form, ssn: e.currentTarget.value }),\n [form]\n );\n\n const onChangeDrivingDistance = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) =>\n setForm({ ...form, drivingDistance: e.currentTarget.value as DrivingDistance }),\n [form]\n );\n\n const onShowInsurances = useCallback(() => {\n PubSub.publish('InsuranceInterest');\n setPayload(form);\n }, [form]);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.keyCode === 13 && ssnIsValid(form.ssn) && !loading) {\n onShowInsurances();\n }\n },\n [form]\n );\n\n const options: OptionProps[] = [\n { value: DrivingDistance.Between0And1000, displayName: '0 - 1000' },\n { value: DrivingDistance.Between1000And1500, displayName: '1000 - 1500' },\n { value: DrivingDistance.Between1500And2000, displayName: '1500 - 2000' },\n { value: DrivingDistance.Between2000And2500, displayName: '2000 - 2500' },\n { value: DrivingDistance.Over2500, displayName: '2500+' },\n ];\n\n return (\n <Modal title={t('item.insurance')} onClose={onClose}>\n {(insuranceOptions?.description || insuranceOptions?.logotype) && (\n <Repeat>\n <ContentLogo>\n {insuranceOptions.description && (\n <ContentLogoText>\n <Content>\n <p>{insuranceOptions.description}</p>\n </Content>\n </ContentLogoText>\n )}\n {insuranceOptions.logotype && (\n <ContentLogoMedia>\n <LogoBox\n logo={insuranceOptions.logotype}\n alt={insuranceOptions.name || t('common.logotype')}\n wide\n />\n </ContentLogoMedia>\n )}\n </ContentLogo>\n </Repeat>\n )}\n\n <Repeat>\n <RepeatSmall>\n <RepeatTiny>\n <InputGroup>\n <InputGroupColumn>\n <InputLabel htmlFor=\"input-insurance-personalnumber\">\n {t('item.personalNumber')}\n </InputLabel>\n <InputText\n placeholder=\"\u00C5\u00C5\u00C5\u00C5MMDD-XXXX\"\n label={t('item.personalNumber')}\n value={form.ssn}\n onChange={onChangeSsn}\n onKeyDown={onKeyDown}\n id=\"input-insurance-personalnumber\"\n />\n </InputGroupColumn>\n <InputGroupColumn>\n <InputLabel htmlFor=\"input-insurance-mileage\">\n {t('item.estimatedAnualMileage')}\n </InputLabel>\n <InputSelect\n value={form.drivingDistance}\n onChange={onChangeDrivingDistance}\n options={options}\n unit=\"mil\"\n title={t('item.estimatedAnualMileage')}\n />\n </InputGroupColumn>\n </InputGroup>\n </RepeatTiny>\n <RepeatTiny>\n <ButtonPrimary\n fullWidth\n disabled={!ssnIsValid(form.ssn) || loading}\n onClick={onShowInsurances}\n >\n <ButtonContent>{t('item.showInsurances')}</ButtonContent>\n </ButtonPrimary>\n </RepeatTiny>\n </RepeatSmall>\n {false && (\n <RepeatSmall>\n <InputCheckbox id=\"input-insurance-save-personalnumber\">\n {t('item.savePersonalNumberOnThisDevice')}\n </InputCheckbox>\n </RepeatSmall>\n )}\n <RepeatSmall>\n <Content small>\n <p>{t('item.savePersonalNumberOnThisDeviceHelp')}</p>\n </Content>\n </RepeatSmall>\n </Repeat>\n\n {loading && (\n <Repeat>\n <Loader />\n </Repeat>\n )}\n\n {error && (\n <Repeat>\n <Snackbar severity=\"error\" icon heading={t('common.anErrorHasOccured') || undefined}>\n {t('item.couldNotfetchInsurances')}\n </Snackbar>\n </Repeat>\n )}\n\n <>\n {data?.insurances && (\n <Repeat>\n {data?.insurances.map((insurance) => (\n <Repeat key={insurance.name}>\n <DetailBox\n heading={`${numberSeparator(insurance.price)} ${insurance.unit}`}\n description={insurance.name}\n >\n <Repeat>\n <>\n {insurance.description && (\n <RepeatTiny>\n <Content>\n <p>{insurance.description}</p>\n </Content>\n </RepeatTiny>\n )}\n </>\n <>\n {insurance.url && (\n <RepeatTiny>\n <ButtonInline\n as=\"a\"\n href={insurance.url || ''}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n title={t('item.openPrePurchaseInformationInNewTab') || ''}\n >\n {t('item.openPrePurchaseInformationInNewTab')}\n </ButtonInline>\n </RepeatTiny>\n )}\n </>\n </Repeat>\n {insurance.items && insurance.items.length > 0 && (\n <Repeat>\n <H4>{t('item.insuranceIncludes')}</H4>\n {insurance.items.map((item) => (\n <RepeatSmall key={item.name || ''}>\n <ExtendInfo title={item.name || ''}>{item.description}</ExtendInfo>\n </RepeatSmall>\n ))}\n </Repeat>\n )}\n {insurance.addons && insurance.addons.length > 0 && (\n <Repeat>\n <H4>{t('item.addInsuranceHeading')}</H4>\n {insurance.addons.map((addon) => (\n <RepeatSmall key={addon.title || ''}>\n <ColumnRow>\n <ColumnRowItem>\n <ExtendInfo title={addon.title || ''}>{addon.description}</ExtendInfo>\n </ColumnRowItem>\n <ColumnRowItem>\n <UtilityTextBold>\n +{addon.price} {addon.unit}\n </UtilityTextBold>\n </ColumnRowItem>\n </ColumnRow>\n </RepeatSmall>\n ))}\n </Repeat>\n )}\n </DetailBox>\n </Repeat>\n ))}\n </Repeat>\n )}\n </>\n </Modal>\n );\n};\n\nexport default InsuranceModal;\n", "import React from 'react';\n\nimport { Wrapper, Main, Heading, Description, Footer, Foldout } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n heading: string;\n description?: string;\n children: React.ReactNode;\n}\n\nconst DetailBox = ({ heading, description, children }: Props) => {\n const { t } = useTranslation();\n const [extend, setExtend] = React.useState(false);\n const onToggleExtend = React.useCallback(() => setExtend(!extend), [extend]);\n\n const extendBtnText = extend ? t('common.lessInformation') : t('common.moreInformation');\n\n return (\n <Wrapper>\n <Main>\n <Heading>{heading}</Heading>\n {description && <Description>{description}</Description>}\n <Footer>\n <ButtonClear onClick={onToggleExtend}>\n <ButtonContent>{extendBtnText}</ButtonContent>\n </ButtonClear>\n </Footer>\n </Main>\n {extend && <Foldout>{children}</Foldout>}\n </Wrapper>\n );\n};\n\nexport default DetailBox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { H2 } from '../Heading/index';\n\nexport const Wrapper = styled.article`\n box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n overflow: hidden;\n`;\n\nexport const Main = styled.div`\n padding: ${size(2.5)};\n`;\n\nexport const Heading = styled(H2).attrs(() => ({\n as: 'h1',\n}))`\n margin-bottom: 0;\n`;\n\nexport const Description = styled.div`\n margin-top: ${size(1)};\n`;\n\nexport const Footer = styled.div`\n margin-top: ${size(1)};\n color: red;\n`;\n\nexport const Foldout = styled.div`\n background-color: ${(props) => props.theme.color.accent};\n padding: ${size(2.5)};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Header, Title, Info, InfoBtn, Extend } from './wrapper';\nimport { IconInfo } from '../Icon/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n title: string;\n children?: React.ReactNode;\n}\n\nconst ExtendInfo = ({ title, children }: Props) => {\n const { t } = useTranslation();\n const [extend, setExtend] = useState(false);\n const onToggleExtend = useCallback(() => setExtend(!extend), [extend]);\n\n return (\n <Wrapper>\n <Header>\n <Title>{title}</Title>\n {children && (\n <Info>\n <InfoBtn onClick={onToggleExtend} title={t('common.moreInformation') || ''}>\n <IconInfo block />\n </InfoBtn>\n </Info>\n )}\n </Header>\n {extend && <Extend>{children}</Extend>}\n </Wrapper>\n );\n};\n\nexport default ExtendInfo;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div``;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Title = styled.div``;\n\nexport const Info = styled.div`\n margin-left: ${size(1)};\n`;\n\nexport const InfoBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n font: inherit;\n font-size: 1em;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Extend = styled.div`\n padding-top: ${size(1)};\n margin-top: ${size(1)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n font-size: 0.875em;\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n children: string;\n htmlFor?: string;\n}\n\nconst InputLabel = ({ children, htmlFor }: Props) => (\n <Wrapper htmlFor={htmlFor}>{children}</Wrapper>\n);\n\nexport default InputLabel;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.label.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n margin-bottom: ${size(0.5)};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { Wrapper, Input } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n> & {\n value: string;\n placeholder: string;\n label: string;\n};\n\nconst InputText = ({ placeholder, label, value, id, onChange, onKeyDown }: Props) => (\n <Wrapper>\n <Input\n placeholder={placeholder}\n value={value}\n id={id}\n aria-label={label}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </Wrapper>\n);\n\nexport default InputText;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: stretch;\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 3px;\n`;\n\nexport const Input = styled.input.attrs(() => ({\n type: 'text',\n className: 'wayke__theme wayke__font--regular',\n}))`\n flex: 1 1 auto;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n padding: 0 ${size(2)};\n background-color: transparent;\n font-size: 16px;\n border: none;\n border-radius: 0;\n box-shadow: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n\n :focus {\n outline: none;\n }\n\n &::-webkit-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &::-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-ms-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n`;\n", "import * as React from 'react';\n\nimport { Input, Label, LabelText, Wrapper } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n> & {\n id: string;\n children: React.ReactNode;\n};\n\nconst InputCheckbox = ({ children, ...props }: Props) => {\n const { id } = props;\n return (\n <Wrapper aria-labelledby={id ? `${id}-label` : undefined}>\n <Input\n {...(props as React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n >)}\n />\n <Label id={`${id}-label`} htmlFor={id}>\n <LabelText>{children}</LabelText>\n </Label>\n </Wrapper>\n );\n};\n\nexport default InputCheckbox;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Label = styled.label.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: flex;\n align-items: flex-start;\n font-size: 1rem;\n line-height: 1.2;\n cursor: pointer;\n\n :before {\n content: '';\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: ${size(2.5)};\n height: ${size(2.5)};\n margin-right: ${size(1)};\n background-color: ${(props) => props.theme.color.accent};\n color: currentColor;\n border: none;\n box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.07);\n text-align: center;\n font-size: 15px;\n cursor: pointer;\n border-radius: 3px;\n margin-top: -2px;\n }\n`;\n\nexport const Wrapper = styled((props) => <div {...props} />).attrs(({ type, checked }) => ({\n role: type || 'checkbox',\n 'aria-checked': checked,\n}))`\n ${({ error }) =>\n error &&\n css`\n ${Label} {\n color: ${(props) => props.theme.color.ui.negative};\n\n :before {\n background-color: ${(props) => props.theme.color.ui.negativeLight};\n }\n }\n `}\n`;\n\nexport const Input = styled((props) => (\n <input {...props} className={`${props.checked ? 'checked' : undefined} ${props.className}`} />\n)).attrs(({ type, checked }) => ({\n checked,\n type: type || 'checkbox',\n}))`\n position: fixed;\n left: -9999px;\n opacity: 0;\n\n &[disabled] {\n & + ${Label} {\n color: ${(props) => props.theme.color.disabledText};\n\n &:before {\n background-color: ${(props) => props.theme.color.disabledBg};\n cursor: not-allowed;\n }\n }\n }\n\n &:checked,\n &.checked {\n & + ${Label} {\n :before {\n content: '\u2713';\n }\n }\n }\n`;\n\nexport const LabelText = styled.div`\n color: ${(props) => props.theme.color.textDark};\n`;\n", "import React from 'react';\n\nimport { Wrapper, Select, Option, Icon } from './wrapper';\nimport { IconChevronDown } from '../Icon/index';\n\nexport interface OptionProps {\n value: number | string;\n displayName?: number | string | null;\n}\n\ninterface Props {\n value?: string | number;\n options?: OptionProps[];\n unit?: string;\n title: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\nconst InputSelect = ({ value, options, onChange, unit, title }: Props) => (\n <Wrapper>\n <Select value={value} onChange={onChange} title={title} aria-label={title}>\n {options?.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.displayName || option.value}\n {unit ? ` ${unit}` : ''}\n </Option>\n ))}\n </Select>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Wrapper>\n);\n\nexport default InputSelect;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst iconSize = '0.875rem';\nconst selectPadding = size(2);\n\nexport const Wrapper = styled.div`\n position: relative;\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 3px;\n`;\n\nexport const Select = styled.select.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n position: relative;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n text-indent: 0.01px;\n border: 0;\n padding: 0 ${selectPadding};\n padding-right: calc(${iconSize} + ${selectPadding});\n background-color: transparent;\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n font-size: 16px;\n cursor: pointer;\n z-index: 1;\n\n :focus {\n outline: none;\n }\n\n ::-ms-expand {\n display: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\nexport const Option = styled.option`\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const Icon = styled.div`\n position: absolute;\n top: 50%;\n right: ${selectPadding};\n transform: translateY(-50%);\n font-size: ${iconSize};\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const InputGroup = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n display: flex;\n align-items: flex-start;\n margin: ${size(-0.5)};\n }\n`;\n\nexport const InputGroupColumn = styled.div`\n ${(props) => props.theme.breakpoint.LtSm} {\n & + & {\n margin-top: ${size(1)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n flex: 1 1 50%;\n padding: ${size(0.5)};\n }\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const ColumnRow = styled.div`\n display: flex;\n align-items: flex-start;\n`;\n\nexport const ColumnRowItem = styled.div`\n flex: 1 1 auto;\n\n :last-child:not(:only-child) {\n flex: 0 0 auto;\n }\n\n & + & {\n padding-left: ${size(2)};\n }\n`;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport INSURANCE_CALCULATION from '../queries/INSURANCE_CALCULATION';\n\nimport { DrivingDistance, QueryInsurancesArgs, Query } from '../@types/codegen/types';\n\nconst useInsuranceCalculation = (\n id: string,\n branchId?: string,\n personalNumber?: string,\n drivingDistance?: DrivingDistance\n): QueryResult<Query, QueryInsurancesArgs> =>\n useQuery<Query, QueryInsurancesArgs>(INSURANCE_CALCULATION, {\n variables: {\n id,\n branch: branchId as string,\n personalNumber: personalNumber as string,\n drivingDistance: drivingDistance as DrivingDistance,\n },\n skip: personalNumber === undefined || drivingDistance === undefined || branchId === undefined,\n });\n\nexport default useInsuranceCalculation;\n", "import { gql } from '@apollo/client';\n\nconst INSURANCE_CALCULATION = gql`\n query InsuranceCalculation(\n $id: ID!\n $branch: ID\n $personalNumber: PersonalNumber!\n $drivingDistance: DrivingDistance!\n ) {\n insurances(\n id: $id\n branch: $branch\n personalNumber: $personalNumber\n drivingDistance: $drivingDistance\n ) {\n name\n price\n unit\n description\n logotype\n addons {\n id\n title\n description\n price\n unit\n exclusions\n }\n items {\n name\n description\n }\n legality {\n description\n url\n }\n terms\n url\n }\n }\n`;\n\nexport default INSURANCE_CALCULATION;\n", "export const ssnIsValid = (s?: string) => (s ? /^\\d{2,4}\\d{2}\\d{2}\\-?\\d{4}$/.test(s) : false);\n", "import React, { useState, useCallback } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat/index';\nimport { VisualHeading } from '../Heading/index';\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxContent } from '../OptionBox/wrapper';\nimport Content from '../Content/index';\nimport { marked } from 'marked';\nimport { ButtonInline } from '../Button/index';\nimport { InsuranceOption } from '../../@types/codegen/types';\nimport InsuranceFreeModal from './InsuranceFreeModal';\nimport { useTranslation } from 'react-i18next';\n\ninterface InsuranceOptions {\n insuranceOptions: InsuranceOption[];\n}\n\nconst Insurance = ({ insuranceOptions }: InsuranceOptions) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n if (!insuranceOptions.length) {\n return null;\n }\n\n return (\n <>\n {modal && <InsuranceFreeModal onClose={toggleModal} insuranceOptions={insuranceOptions[0]} />}\n <Repeat>\n <RepeatTiny>\n <VisualHeading>\n {insuranceOptions[0]?.insuranceHeader ?? t('item.insurance')}\n </VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n <>\n {insuranceOptions.map((insuranceOption, index) => (\n <OptionBox\n key={`${insuranceOption.url}-${index}`}\n logo={insuranceOption.logotype || undefined}\n logoAlt={insuranceOption.name || t('common.logotype')}\n >\n {insuranceOption.description && (\n <Content\n dangerouslySetInnerHTML={{\n __html: marked(insuranceOption.description),\n }}\n />\n )}\n <OptionBoxContent>\n <p>\n <ButtonInline onClick={toggleModal}>{t('common.moreInformation')}</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n ))}\n </>\n </RepeatTiny>\n </Repeat>\n </>\n );\n};\n\nexport default Insurance;\n", "import React from 'react';\n\nimport Modal from '../Modal/index';\nimport Content from '../Content/index';\nimport { Repeat } from '../Repeat/index';\nimport { ButtonInline } from '../Button/index';\nimport LogoBox from '../LogoBox/index';\nimport { InsuranceOption } from '../../@types/codegen/types';\nimport { marked } from 'marked';\nimport { useTranslation } from 'react-i18next';\n\ninterface InsuranceFreeModal {\n onClose: () => void;\n insuranceOptions: InsuranceOption;\n}\n\nconst InsuranceFreeModal = ({ onClose, insuranceOptions }: InsuranceFreeModal) => {\n const { t } = useTranslation();\n return (\n <Modal title={insuranceOptions?.insuranceHeader ?? t('item.insurance')} onClose={onClose}>\n {insuranceOptions?.longDescription && (\n <Repeat>\n <Content\n dangerouslySetInnerHTML={{\n __html: marked(insuranceOptions.longDescription),\n }}\n ></Content>\n </Repeat>\n )}\n {insuranceOptions?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={insuranceOptions.url}\n title={t('item.readMoreAboutInsuranceInNewTab') || ''}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {t('item.readMoreAboutInsuranceInNewTab')}\n </ButtonInline>\n </Repeat>\n )}\n {insuranceOptions?.logotype && (\n <Repeat>\n <LogoBox\n logo={insuranceOptions.logotype}\n alt={insuranceOptions.name || t('common.logotype')}\n wide\n />\n </Repeat>\n )}\n </Modal>\n );\n};\n\nexport default InsuranceFreeModal;\n", "import React from 'react';\nimport { marked } from 'marked';\nimport { useTranslation } from 'react-i18next';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport { ProductPageMainSection } from '../../components/ProductPage/index';\nimport Content from '../../components/Content/index';\nimport { H2 } from '../../components/Heading/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport LogoBox from '../../components/LogoBox/index';\nimport { Maybe, PackageOption } from '../../@types/codegen/types';\n\ninterface ManufacturerPackageOption {\n packageOption?: Maybe<PackageOption>;\n}\n\nconst ManufacturerPackageOption = ({ packageOption }: ManufacturerPackageOption) => {\n const { t } = useTranslation();\n if (!packageOption) {\n return null;\n }\n\n return (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{packageOption.title}</H2>\n </Repeat>\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {packageOption.link.title ? packageOption.link.title : t('item.readMoreInNewTab')}\n </ButtonInline>\n </Repeat>\n )}\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt={t('common.logotype') || ''} wide />\n </Repeat>\n )}\n </ProductPageMainSection>\n );\n};\n\nexport default ManufacturerPackageOption;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport { Repeat, RepeatTiny } from '../../components/Repeat/index';\nimport ActionList from '../../components/ActionList/index';\nimport { ButtonPrimary, ButtonContent, ButtonInline } from '../../components/Button/index';\nimport { Columns, Column } from '../../components/Columns/index';\nimport { UtilityFontSizeSmall } from '../../components/Utility/index';\nimport { StateIndicator } from '../../components/StateIndicator/index';\nimport CheckMarkList, { CheckMarkListItem } from '../../components/CheckMarkList/index';\nimport Content from '../../components/Content/index';\nimport SwitchBar from '../../components/SwitchBar/index';\nimport {\n Manufacturer,\n PackageOption,\n Ecommerce,\n ContactOptions,\n Branch,\n} from '../../@types/codegen/types';\nimport BranchModal from './BranchModal';\nimport PackageOptionModal, { PackageOptionModalData } from './PackageOptionModal';\nimport { format } from 'date-fns/esm';\nimport sv from 'date-fns/locale/sv';\nimport { useTranslation } from 'react-i18next';\n\ninterface CheckList {\n manufacturer?: Manufacturer | null;\n packageOptions: PackageOption[];\n ecommerce?: Ecommerce | null;\n branch?: Branch | null;\n contact?: ContactOptions | null;\n loadingCentralStorageVehicle: boolean;\n availableFrom?: Date | null;\n toggleEcomModal: () => void;\n}\n\nconst CheckList = ({\n manufacturer,\n packageOptions,\n ecommerce,\n branch,\n contact,\n availableFrom,\n toggleEcomModal,\n loadingCentralStorageVehicle,\n}: CheckList) => {\n const { t } = useTranslation();\n const [modalBranch, setModalBranch] = useState(false);\n const openModalBranch = useCallback(() => setModalBranch(true), []);\n const closeModalBranch = useCallback(() => setModalBranch(false), []);\n\n const [modal, setModal] = useState<PackageOptionModalData>();\n const onOpen = useCallback((nextModal: PackageOptionModalData) => setModal(nextModal), []);\n const onClose = useCallback(() => setModal(undefined), []);\n\n useEffect(() => {\n if ((branch || contact) && modalBranch) {\n setModalBranch(false);\n }\n }, [branch, contact]);\n\n const packageOption = manufacturer?.packageOption;\n\n return (\n <>\n {modalBranch && (\n <BranchModal\n loading={loadingCentralStorageVehicle}\n connections={branch?.connections}\n onClose={closeModalBranch}\n />\n )}\n {modal && <PackageOptionModal packageOption={modal} onClose={onClose} />}\n <Repeat>\n {ecommerce && ecommerce.enabled && (\n <RepeatTiny>\n <ButtonPrimary disabled={!!ecommerce.reserved} fullWidth onClick={toggleEcomModal}>\n <ButtonContent>{t('item.actions.buyOnline')}</ButtonContent>\n </ButtonPrimary>\n </RepeatTiny>\n )}\n {ecommerce?.reserved && (\n <RepeatTiny>\n <SwitchBar\n title={t('item.carIsReserved')}\n body={t('item.carIsReservedDescription') || undefined}\n >\n <Content>\n <p>{t('item.carIsReservedModalBody')}</p>\n </Content>\n </SwitchBar>\n </RepeatTiny>\n )}\n <ActionList branch={branch} contact={contact} />\n </Repeat>\n <Repeat>\n {availableFrom && new Date(availableFrom).valueOf() > new Date().valueOf() && (\n <RepeatTiny>\n <Columns $spacing={1} valign=\"center\">\n <Column noShrink>\n <StateIndicator $tone=\"pending\" />\n </Column>\n <Column>\n <UtilityFontSizeSmall>\n {t('item.availableFromDate', {\n date: format(new Date(availableFrom), 'dd MMMM yyyy', { locale: sv }),\n })}\n </UtilityFontSizeSmall>\n </Column>\n </Columns>\n </RepeatTiny>\n )}\n <RepeatTiny>\n <CheckMarkList>\n {packageOption?.title && (\n <CheckMarkListItem>\n <>\n {t('item.includingShort')}{' '}\n <ButtonInline\n onClick={() =>\n onOpen({\n title: packageOption?.title,\n image: packageOption?.image,\n description: packageOption?.description,\n link: packageOption?.link,\n })\n }\n >\n {packageOption.title}\n </ButtonInline>{' '}\n {t('item.usedWarrany').toLowerCase()}\n </>\n </CheckMarkListItem>\n )}\n {packageOptions?.map((packageOption, index) => (\n <CheckMarkListItem key={packageOption.title || index}>\n <>\n {t('item.includingShort')}{' '}\n <ButtonInline\n onClick={() =>\n onOpen({\n title: packageOption?.title,\n image: packageOption?.image,\n description: packageOption?.description,\n link: packageOption?.link,\n })\n }\n >\n {packageOption.title}\n </ButtonInline>\n </>\n </CheckMarkListItem>\n ))}\n {ecommerce?.withHomeDelivery && (\n <CheckMarkListItem>{t('item.homeDelivery')}</CheckMarkListItem>\n )}\n </CheckMarkList>\n </RepeatTiny>\n </Repeat>\n {(branch?.connections.length || 0) > 1 && (\n <Repeat>\n <SwitchBar\n title={t('item.centralWarehouseCar')}\n actionTitle={t('item.switchBranch') || ''}\n onClick={openModalBranch}\n >\n <Content>\n <p>{t('item.centralWarehouseCarDescription')}</p>\n </Content>\n </SwitchBar>\n </Repeat>\n )}\n </>\n );\n};\n\nexport default CheckList;\n", "import React, { useCallback } from 'react';\n\nimport ToggleItem from './toggle-item';\nimport { Maybe, ContactOptions, Branch } from '../../@types/codegen/types';\nimport { formatPhonenumber } from '../../utils/phonenumbers';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { useTranslation } from 'react-i18next';\n\ninterface ActionListProps {\n branch?: Maybe<Branch>;\n contact?: Maybe<ContactOptions>;\n}\n\nconst ActionList = ({ contact, branch }: ActionListProps) => {\n const { t } = useTranslation();\n const email = contact?.email || branch?.contact?.email;\n const phonenumber = contact?.phonenumber || branch?.contact?.phonenumber;\n\n const onClickMailVisible = useCallback(() => PubSub.publish('MailVisible'), []);\n const onClickPhoneVisible = useCallback(() => PubSub.publish('PhonenumberVisible'), []);\n const onClickPhoneValue = useCallback(() => PubSub.publish('PhonenumberCall'), []);\n\n if (!email && !phonenumber) {\n return null;\n }\n\n return (\n <>\n {email && (\n <ToggleItem\n onClickVisible={onClickMailVisible}\n title={t('item.actions.showEmail')}\n value={email}\n type=\"mailto\"\n />\n )}\n {phonenumber && (\n <ToggleItem\n title={t('item.actions.showPhoneNumber')}\n value={formatPhonenumber(phonenumber)}\n type=\"tel\"\n onClickVisible={onClickPhoneVisible}\n onClickValue={onClickPhoneValue}\n />\n )}\n </>\n );\n};\n\nexport default ActionList;\n", "import React, { useState, useCallback } from 'react';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport { RepeatTiny } from '../Repeat/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface ToggleItemProps {\n title: string;\n value: string;\n type: 'tel' | 'mailto';\n onClickVisible?: () => void;\n onClickValue?: () => void;\n}\n\nconst ToggleItem = ({ title, value, type, onClickVisible, onClickValue }: ToggleItemProps) => {\n const { t } = useTranslation();\n const [visible, setVisible] = useState(false);\n\n const _onClickValue = useCallback(() => {\n if (onClickValue) {\n onClickValue();\n }\n }, []);\n\n const onClick = useCallback(() => {\n if (!visible) {\n setVisible(true);\n if (onClickVisible) {\n onClickVisible();\n }\n }\n }, [visible]);\n\n const visibleTitle =\n type === 'tel'\n ? t('item.actions.callNumber')\n : type === 'mailto'\n ? t('item.actions.sendEmailTo')\n : '';\n\n return (\n <RepeatTiny>\n {visible ? (\n <ButtonSecondary\n onClick={_onClickValue}\n as=\"a\"\n href={`${type}:${value}`}\n title={`${visibleTitle} ${value}`}\n fullWidth\n >\n <ButtonContent>{value}</ButtonContent>\n </ButtonSecondary>\n ) : (\n <ButtonSecondary onClick={onClick} title={title} fullWidth>\n <ButtonContent>{title}</ButtonContent>\n </ButtonSecondary>\n )}\n </RepeatTiny>\n );\n};\n\nexport default ToggleItem;\n", "import { MetadataJson, parsePhoneNumberFromString } from 'libphonenumber-js/core';\n\nimport metadata from './metadata.min';\n\nconst typedMetadata = metadata as unknown as MetadataJson;\n\nexport const formatPhonenumber = (text: string) => {\n try {\n const parsed = parsePhoneNumberFromString(\n text.replace('-', '').replace(/ /g, ''),\n typedMetadata\n );\n return parsed?.formatNational() || text;\n } catch (e) {\n return text;\n }\n};\n", "const Metadata = {\n version: '1.7.53',\n country_calling_codes: { '46': ['SE'] },\n countries: {\n SE: [\n '46',\n '00',\n '(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}',\n [6, 7, 8, 9, 10],\n [\n ['(\\\\d{2})(\\\\d{2,3})(\\\\d{2})', '$1-$2 $3', ['20'], '0$1', 0, '$1 $2 $3'],\n ['(\\\\d{3})(\\\\d{4})', '$1-$2', ['9(?:00|39|44)'], '0$1', 0, '$1 $2'],\n [\n '(\\\\d{2})(\\\\d{3})(\\\\d{2})',\n '$1-$2 $3',\n ['[12][136]|3[356]|4[0246]|6[03]|90[1-9]'],\n '0$1',\n 0,\n '$1 $2 $3',\n ],\n ['(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})', '$1-$2 $3 $4', ['8'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2,3})(\\\\d{2})',\n '$1-$2 $3',\n [\n '1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])',\n ],\n '0$1',\n 0,\n '$1 $2 $3',\n ],\n ['(\\\\d{3})(\\\\d{2,3})(\\\\d{3})', '$1-$2 $3', ['9(?:00|39|44)'], '0$1', 0, '$1 $2 $3'],\n [\n '(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4',\n ['1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]'],\n '0$1',\n 0,\n '$1 $2 $3 $4',\n ],\n ['(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})', '$1-$2 $3 $4', ['10|7'], '0$1', 0, '$1 $2 $3 $4'],\n ['(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})', '$1-$2 $3 $4', ['8'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4',\n ['[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])'],\n '0$1',\n 0,\n '$1 $2 $3 $4',\n ],\n ['(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})', '$1-$2 $3 $4', ['9'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4 $5',\n ['[26]'],\n '0$1',\n 0,\n '$1 $2 $3 $4 $5',\n ],\n ],\n '0',\n 0,\n 0,\n 0,\n 0,\n 0,\n [\n [\n '(?:(?:[12][136]|3[356]|4[0246]|6[03]|8\\\\d)\\\\d|90[1-9])\\\\d{4,6}|(?:1(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\\\d)|2(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])|3(?:0[0-4]|1\\\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])|4(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\\\d|6[03-5]|7[013]|8[0-79]|9[01])|6(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])|9(?:1[0-68]|2\\\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8]))\\\\d{5,6}',\n [7, 8, 9],\n ],\n ['7[02369]\\\\d{7}', [9]],\n ['20\\\\d{4,7}', [6, 7, 8, 9]],\n ['649\\\\d{6}|9(?:00|39|44)[1-8]\\\\d{3,6}', [7, 8, 9, 10]],\n ['75[1-8]\\\\d{6}', [9]],\n 0,\n ['10[1-8]\\\\d{6}', [9]],\n ['74[02-9]\\\\d{6}', [9]],\n 0,\n ['77[0-7]\\\\d{6}', [9]],\n ],\n ],\n },\n nonGeographic: {},\n};\n\nexport default Metadata;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface IColumn {\n grow?: boolean;\n noShrink?: boolean;\n}\n\nexport const Column = styled.div<IColumn>`\n flex: 0 1 auto;\n\n ${({ grow }) =>\n grow &&\n css`\n flex-grow: 1;\n `}\n\n ${({ noShrink }) =>\n noShrink &&\n css`\n flex-shrink: 0;\n `}\n`;\n\ninterface IColumns {\n $spacing?: number;\n flexWrap?: boolean;\n flexInline?: boolean;\n valign?: 'start' | 'center' | 'end';\n align?: 'start' | 'center' | 'end';\n clearLtSm?: boolean;\n clearLtMd?: boolean;\n}\n\nexport const Columns = styled.div<IColumns>`\n display: flex;\n align-items: flex-start;\n\n ${({ valign }) =>\n valign === 'end'\n ? css`\n align-items: flex-end;\n `\n : valign === 'center'\n ? css`\n align-items: center;\n `\n : css`\n align-items: flex-start;\n `}\n\n ${({ align }) =>\n align === 'end'\n ? css`\n justify-content: flex-end;\n `\n : align === 'center'\n ? css`\n justify-content: center;\n `\n : css`\n justify-content: flex-start;\n `}\n\n ${({ $spacing }) =>\n $spacing &&\n css`\n margin: ${size($spacing / -2)};\n\n & > ${Column} {\n padding: ${size($spacing / 2)};\n }\n `}\n\n ${({ flexWrap }) =>\n flexWrap &&\n css`\n flex-wrap: wrap;\n `}\n\n ${({ flexInline }) =>\n flexInline &&\n css`\n display: inline-flex;\n `}\n\n ${({ clearLtSm }) =>\n clearLtSm &&\n css`\n ${(props) => props.theme.breakpoint.LtSm} {\n display: block;\n }\n `}\n\n ${({ clearLtMd }) =>\n clearLtMd &&\n css`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: block;\n }\n `}\n`;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface StateIndicatorProps {\n $tone?: 'success' | 'pending' | 'error';\n}\n\nexport const StateIndicator = styled.div<StateIndicatorProps>`\n width: ${size(1)};\n height: ${size(1)};\n border-radius: 50%;\n\n ${({ $tone }) =>\n $tone === 'success'\n ? css`\n background-color: ${(props) => props.theme.color.ui.positive};\n `\n : $tone === 'pending'\n ? css`\n background-color: ${(props) => props.theme.color.ui.neutral};\n `\n : $tone === 'error'\n ? css`\n background-color: ${(props) => props.theme.color.ui.negative};\n `\n : css`\n background-color: ${(props) => props.theme.color.textDarkLighten};\n `}\n`;\n", "import React from 'react';\n\nimport { List, Item, Icon, Label } from './wrapper';\nimport { IconCheck } from '../Icon/index';\n\nexport interface ICheckMarkList {\n children: React.ReactNode;\n}\n\nexport const CheckMarkListItem = ({ children }: ICheckMarkList) => (\n <Item>\n <Icon>\n <IconCheck block />\n </Icon>\n <Label>{children}</Label>\n </Item>\n);\n\nconst CheckMarkList = ({ children }: ICheckMarkList) => <List>{children}</List>;\n\nexport default CheckMarkList;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n position: relative;\n font-size: 0.875rem;\n\n & + & {\n margin-top: ${size(0.5)};\n }\n`;\n\nexport const Icon = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: absolute;\n left: 0;\n top: 4px; // Magic number\n font-size: 0.875em;\n`;\n\nexport const Label = styled.div`\n padding-left: calc(1em + ${size(1)});\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Header, Body, Info, Action, InfoContent, InfoBtn, Title } from './wrapper';\nimport Modal from '../Modal/index';\nimport { ButtonInline } from '../Button/index';\nimport { IconInfo } from '../Icon/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n title: string;\n body?: string;\n actionTitle?: string;\n children: React.ReactNode;\n onClick?: () => void;\n}\n\nconst SwitchBar = ({ title, body, actionTitle, children, onClick }: Props) => {\n const { t } = useTranslation();\n const [info, setInfo] = useState(false);\n const onToggleInfo = useCallback(() => setInfo(!info), [info]);\n\n return (\n <>\n <Wrapper>\n <Header>\n <Info>\n <InfoContent>\n <Title>{title}</Title>\n </InfoContent>\n {children && (\n <InfoContent>\n <InfoBtn onClick={onToggleInfo} title={t('common.moreInformation') || ''}>\n <IconInfo block />\n </InfoBtn>\n </InfoContent>\n )}\n </Info>\n {actionTitle && (\n <Action>\n <ButtonInline onClick={onClick} title={actionTitle}>\n {actionTitle}\n </ButtonInline>\n </Action>\n )}\n </Header>\n {body && <Body>{body}</Body>}\n </Wrapper>\n {info && (\n <Modal title={title} onClose={onToggleInfo}>\n {children}\n </Modal>\n )}\n </>\n );\n};\n\nexport default SwitchBar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div`\n padding: ${size(1.5)} ${size(2)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n font-size: 0.875rem;\n`;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Body = styled.div`\n font-size: 0.875rem;\n margin-top: ${size(1)};\n`;\n\nexport const Info = styled.div`\n flex: 1 1 auto;\n display: flex;\n align-items: center;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n padding-left: ${size(1.5)};\n font-size: 0.875rem;\n`;\n\nexport const InfoContent = styled.div`\n & + & {\n margin-left: ${size(0.75)};\n }\n`;\n\nexport const InfoBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Title = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1rem;\n`;\n", "import React, { useState, useCallback, useContext } from 'react';\n\nimport { Repeat, RepeatTiny } from '../../components/Repeat/index';\nimport InputSelect from '../../components/InputSelect/index';\nimport { ButtonPrimary, ButtonContent } from '../../components/Button/index';\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\nimport InputLabel from '../../components/InputLabel/index';\nimport { BranchConnection } from '../../@types/codegen/types';\nimport { CentralStorageContext } from '../../State/CentralStorage/CentralStorageContext';\nimport { useTranslation } from 'react-i18next';\n\ninterface BranchModalProps {\n loading: boolean;\n connections?: BranchConnection[];\n onClose: () => void;\n}\n\nconst BranchModal = ({ loading, connections, onClose }: BranchModalProps) => {\n const { t } = useTranslation();\n const { centralStorageId, setCentralStorageId } = useContext(CentralStorageContext);\n const [localValue, setLocalValue] = useState(centralStorageId);\n\n const onConfirm = useCallback((id: string) => {\n if (id) {\n setCentralStorageId(id);\n }\n }, []);\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => setLocalValue(e.currentTarget.value),\n []\n );\n\n if (!localValue) {\n return null;\n }\n\n return (\n <Modal title={t('item.switchBranch')} onClose={onClose}>\n <Repeat>\n <RepeatTiny>\n <Content>\n <p>{t('item.switchBranchDescription')}</p>\n </Content>\n </RepeatTiny>\n <RepeatTiny>\n <InputLabel>{t('item.chooseBranch')}</InputLabel>\n <InputSelect\n value={localValue}\n onChange={onChange}\n options={connections?.map((x) => ({\n value: x.id,\n displayName: x.name,\n }))}\n title={t('item.chooseBranch')}\n />\n </RepeatTiny>\n </Repeat>\n <Repeat>\n <ButtonPrimary\n disabled={loading}\n fullWidth\n onClick={() => onConfirm(localValue)}\n title={t('item.chooseSelectedBranch') || ''}\n >\n <ButtonContent>{t('common.choose')}</ButtonContent>\n </ButtonPrimary>\n </Repeat>\n </Modal>\n );\n};\n\nexport default BranchModal;\n", "import { createContext } from 'react';\n\nexport interface CentralStorageContextProps {\n centralStorageId?: string | null;\n setCentralStorageId: (id?: string) => void;\n}\n\nexport const CentralStorageContext = createContext<CentralStorageContextProps>({\n setCentralStorageId: (_) => {},\n});\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\nimport LogoBox from '../../components/LogoBox/index';\n\ninterface ModelLink {\n href?: string | null;\n title?: string | null;\n}\n\nexport interface PackageOptionModalData {\n title?: string | null;\n image?: string | null;\n description?: string | null;\n link?: ModelLink | null;\n}\n\ninterface PackageOptionsModalProps {\n packageOption: PackageOptionModalData;\n onClose: () => void;\n}\n\nconst PackageOptionModal = ({ packageOption, onClose }: PackageOptionsModalProps) => (\n <Modal title={packageOption.title || ''} onClose={onClose}>\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt={packageOption.title || undefined} wide />\n </Repeat>\n )}\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.href && packageOption.link.title && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n {packageOption.link.title}\n </ButtonInline>\n </Repeat>\n )}\n </Modal>\n);\n\nexport default PackageOptionModal;\n", "import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Container from '../../components/Container/index';\nimport { Repeat } from '../../components/Repeat/index';\n\nimport { PageSection } from '../../components/Page/index';\nimport SectionHeader from '../../components/SectionHeader/index';\nimport OverflowGrid from '../../components/OverflowGrid/index';\nimport ProductCard from '../../components/ProductCard/index';\nimport { H2 } from '../../components/Heading/index';\nimport useRelatedSearch from '../../State/RelatedSearch/useRelatedSearch';\nimport Loader from '../../components/Loader/index';\nimport { numberSeparator } from '../../utils/formats';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { regexPathGuid } from '../../utils/regex';\n\ninterface RelatedProps {\n id: string;\n hashRoute?: boolean;\n pathRoute?: string;\n authorizedReseller?: boolean;\n displayBranchName?: boolean;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst Related = ({\n id,\n hashRoute,\n pathRoute,\n authorizedReseller,\n displayBranchName,\n onClickSearchItem,\n}: RelatedProps) => {\n const { t } = useTranslation();\n const { loading, response, moreLikeThisUrl } = useRelatedSearch(id, !!authorizedReseller);\n\n const onItemClicked = useCallback((id: string) => {\n PubSub.publish('ItemClicked', id);\n if (onClickSearchItem) {\n onClickSearchItem(id);\n }\n }, []);\n\n if (!response?.documentList.documents.length || response?.documentList.documents.length === 0) {\n return null;\n }\n\n if (loading) {\n return <Loader />;\n }\n\n return (\n <PageSection accent large className=\"wayke__theme wayke__color--accent-bg\">\n <Container>\n {moreLikeThisUrl ? (\n <Repeat>\n <SectionHeader onClick={() => {}}>\n <H2 noMargin>{t('item.relatedVehicles')}</H2>\n </SectionHeader>\n </Repeat>\n ) : (\n <Repeat>\n <SectionHeader onClick={() => {}} actionTitle=\"Visa alla\">\n <H2 noMargin>{t('item.latestVehicles')}</H2>\n </SectionHeader>\n </Repeat>\n )}\n\n <Repeat>\n <OverflowGrid\n accentBg\n columns={1.05}\n columnsSm={2.1}\n columnsMd={3}\n spacing={2}\n items={response?.documentList.documents.map((document) => {\n const prefix = pathRoute ? `/${pathRoute}` : '/';\n\n const r = regexPathGuid();\n\n const pathRouteUrl =\n window.location.pathname === '/'\n ? `${prefix}${document._id}`\n : r.test(`${pathRoute}${id}`)\n ? window.location.pathname.replace(r, document._id)\n : `${window.location.pathname}${prefix}${document._id}`;\n\n return (\n <ProductCard\n key={document._id}\n id={document._id}\n onClick={onItemClicked}\n title={document.title}\n href={pathRoute ? pathRouteUrl : hashRoute ? `#${document._id}` : undefined}\n image={document.featuredImage?.files?.[0]?.url}\n description={document.shortDescription}\n branchName={displayBranchName ? document.branches?.[0]?.name : undefined}\n uspList={[\n {\n title: document.modelYear,\n },\n {\n title: `${numberSeparator(\n document.odometerReading?.value || document.mileage\n )} ${t(`odometer.${document.odometerReading?.unit || 'ScandinavianMile'}`)}`,\n },\n {\n title: document.gearboxType,\n },\n {\n title: document.fuelType,\n },\n ]}\n price={`${numberSeparator(document.price)} ${t('currency.default')}`}\n oldPrice={\n document.oldPrice !== undefined && document.price < document.oldPrice\n ? `${numberSeparator(document.oldPrice)} ${t('currency.default')}`\n : undefined\n }\n leasingPrice={\n document.leasingPrice !== undefined\n ? `${numberSeparator(document.leasingPrice)} ${t('currency.monthly')}`\n : undefined\n }\n businessLeasingPrice={\n document.businessLeasingPrice !== undefined\n ? `${numberSeparator(document.businessLeasingPrice)} ${t('currency.monthly')}`\n : undefined\n }\n pathRoute={pathRoute}\n />\n );\n })}\n />\n </Repeat>\n </Container>\n </PageSection>\n );\n};\n\nexport default Related;\n", "import React from 'react';\n\nimport { Wrapper, Heading, Action } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button/index';\n\ninterface Props {\n children: React.ReactNode;\n onClick?: () => void;\n actionTitle?: string;\n}\n\nconst SectionHeader = ({ children, onClick, actionTitle }: Props) => (\n <Wrapper>\n <Heading>{children}</Heading>\n {onClick && actionTitle && (\n <Action>\n <ButtonClear as=\"a\" href=\"#\" onClick={onClick}>\n <ButtonContent>{actionTitle}</ButtonContent>\n </ButtonClear>\n </Action>\n )}\n </Wrapper>\n);\n\nexport default SectionHeader;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n padding-left: ${size(2)};\n`;\n", "import React, { useRef, useCallback, useState, useEffect } from 'react';\n\nimport { Wrapper, ListWrapper, List, Item, PrevBtn, NextBtn } from './wrapper';\nimport { IconChevronLeft, IconChevronRight } from '../Icon/index';\nimport { NavButton } from '../NavButton/index';\n\nexport interface IOverflowGrid {\n items: React.ReactNode[];\n itemKeyBase?: string;\n spacing?: number;\n columns?: number;\n columnsSm?: number;\n columnsMd?: number;\n accentBg?: boolean;\n}\n\nconst OverflowGrid = ({\n items,\n itemKeyBase,\n spacing,\n columns,\n columnsSm,\n columnsMd,\n accentBg,\n}: IOverflowGrid) => {\n const overflowElement = useRef<HTMLUListElement | null>(null);\n\n const onPrev = useCallback(() => {\n const itemWidth = overflowElement.current?.children[0].clientWidth || 0;\n const scrollLeft = overflowElement.current?.scrollLeft || 0;\n\n if (scrollLeft > 0) {\n overflowElement.current?.scroll({\n left: scrollLeft - itemWidth,\n behavior: 'smooth',\n });\n }\n }, []);\n\n const onNext = useCallback(() => {\n const itemWidth = overflowElement.current?.children[0].clientWidth || 0;\n const scrollWidth = overflowElement.current?.scrollWidth || 0;\n const scrollLeft = overflowElement.current?.scrollLeft || 0;\n const overflowElementWidth = overflowElement.current?.offsetWidth || 0;\n const overflowElementScrollWidth = scrollWidth - overflowElementWidth;\n\n if (overflowElementScrollWidth !== scrollLeft) {\n overflowElement.current?.scroll({\n left: scrollLeft + itemWidth,\n behavior: 'smooth',\n });\n }\n }, []);\n\n // Hide navigation buttons depending on scroll position\n const [hidePrevNav, setHidePrevNav] = useState(true);\n const [hideNextNav, setHideNextNav] = useState(true);\n\n const onScroll = () => {\n const scrollLeft = overflowElement.current?.scrollLeft || 0;\n const scrollWidth = overflowElement.current?.scrollWidth || 0;\n const overflowElementWidth = overflowElement.current?.offsetWidth || 0;\n const overflowElementScrollWidth = scrollWidth - overflowElementWidth;\n\n setHidePrevNav(scrollLeft == 0 ? true : false);\n setHideNextNav(overflowElementScrollWidth == scrollLeft ? true : false);\n };\n\n useEffect(() => {\n onScroll();\n overflowElement.current?.addEventListener('scroll', onScroll);\n return () => overflowElement.current?.removeEventListener('scroll', onScroll);\n }, []);\n\n return (\n <Wrapper $accentBg={accentBg}>\n <ListWrapper $spacing={spacing}>\n <List\n ref={overflowElement}\n $columns={columns}\n $columnsSm={columnsSm}\n $columnsMd={columnsMd}\n >\n {items.map((item, i) => (\n <Item key={itemKeyBase ? `${itemKeyBase}-${i}` : `overflow-grid-item-${i}`}>\n {item}\n </Item>\n ))}\n </List>\n </ListWrapper>\n {!hidePrevNav && (\n <PrevBtn>\n <NavButton onClick={onPrev} title=\"Previous\">\n <IconChevronLeft />\n </NavButton>\n </PrevBtn>\n )}\n {!hideNextNav && (\n <NextBtn>\n <NavButton onClick={onNext} title=\"Next\">\n <IconChevronRight />\n </NavButton>\n </NextBtn>\n )}\n </Wrapper>\n );\n};\n\nexport default OverflowGrid;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface WrapperProps {\n $accentBg?: boolean;\n}\n\nexport const Wrapper = styled.div<WrapperProps>`\n --container-gutter: ${size(2)};\n --bg: ${(props) => props.theme.color.bg};\n\n ${(props) => props.theme.breakpoint.Sm} {\n --container-gutter: ${size(3)};\n }\n\n position: relative;\n\n ${({ $accentBg }) =>\n $accentBg &&\n css`\n --bg: ${(props) => props.theme.color.accent};\n `}\n`;\n\nexport const Item = styled.li`\n flex: 1 0 auto;\n width: 100%;\n max-width: 100%;\n scroll-snap-align: start;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n &:is(:only-child, #important) {\n width: 100%;\n max-width: 100%;\n }\n }\n`;\n\ninterface ListProps {\n $columns?: number;\n $columnsSm?: number;\n $columnsMd?: number;\n}\n\nexport const List = styled.ul<ListProps>`\n display: flex;\n align-items: stretch;\n list-style: none;\n padding: 0 var(--container-gutter);\n margin: 0;\n overflow: auto;\n scroll-snap-type: x mandatory;\n scroll-padding-left: var(--container-gutter);\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n ${({ $columns }) =>\n $columns &&\n css`\n ${Item} {\n width: ${100 / $columns}%;\n max-width: ${100 / $columns}%;\n }\n `}\n\n ${({ $columnsSm }) =>\n $columnsSm &&\n css`\n ${(props) => props.theme.breakpoint.Sm} {\n ${Item} {\n width: ${100 / $columnsSm}%;\n max-width: ${100 / $columnsSm}%;\n }\n }\n `}\n\n ${({ $columnsMd }) =>\n $columnsMd &&\n css`\n ${(props) => props.theme.breakpoint.Md} {\n ${Item} {\n width: ${100 / $columnsMd}%;\n max-width: ${100 / $columnsMd}%;\n }\n }\n `}\n`;\n\ninterface ListWrapperProps {\n $spacing?: number;\n}\n\nexport const ListWrapper = styled.div<ListWrapperProps>`\n position: relative;\n overflow: hidden;\n margin: 0 calc(var(--container-gutter) * -1);\n\n ${(props) => props.theme.breakpoint.Md} {\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n width: var(--container-gutter);\n background-color: var(--bg);\n z-index: 1;\n }\n\n &::before {\n left: 0;\n\n ${({ $spacing }) =>\n $spacing\n ? css`\n mask-image: linear-gradient(to right, #000 ${size($spacing)}, transparent);\n `\n : css`\n mask-image: ${(props) => props.theme.mask.gradient.toRight};\n `}\n }\n\n &::after {\n right: 0;\n\n ${({ $spacing }) =>\n $spacing\n ? css`\n mask-image: linear-gradient(to left, #000 ${size($spacing)}, transparent);\n `\n : css`\n mask-image: ${(props) => props.theme.mask.gradient.toLeft};\n `}\n }\n }\n\n ${({ $spacing }) =>\n $spacing &&\n css`\n ${List} {\n margin: 0 -${size($spacing / 2)};\n }\n\n ${Item} {\n padding: 0 ${size($spacing / 2)};\n }\n `}\n`;\n\nconst NavBtn = styled.div`\n position: absolute;\n top: 50%;\n z-index: 2;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n display: none;\n }\n`;\n\nexport const PrevBtn = styled(NavBtn)`\n left: 0;\n transform: translate(-50%, -50%);\n`;\n\nexport const NextBtn = styled(NavBtn)`\n right: 0;\n transform: translate(50%, -50%);\n`;\n", "import { useContext, useEffect } from 'react';\n\nimport { RelatedSearchContext } from './RelatedSearchContext';\n\nconst useRelatedSearch = (id: string, authorizedReseller?: boolean) => {\n const data = useContext(RelatedSearchContext);\n\n useEffect(() => {\n const searchParams = new URLSearchParams();\n searchParams.set('hits', '3');\n if (data.moreLikeThisUrl && id) {\n searchParams.set('id', id);\n }\n if (authorizedReseller) {\n searchParams.set('isAuthorizedResellerForManufacturer', 'true');\n }\n data.fetchRelated(searchParams);\n }, [id]);\n\n return data;\n};\n\nexport default useRelatedSearch;\n", "import { createContext } from 'react';\nimport { Search } from '../../@types/search';\n\nexport interface RelatedSearchContextProps {\n moreLikeThisUrl: boolean;\n loading: boolean;\n response?: Search;\n error: boolean;\n fetchRelated: (searchParmas: URLSearchParams) => void;\n}\n\nexport const RelatedSearchContext = createContext<RelatedSearchContextProps>({\n moreLikeThisUrl: false,\n loading: false,\n error: false,\n response: undefined,\n fetchRelated: (_) => {},\n});\n", "export const regexGuid =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst regexEndGuid = /[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n\nexport const escapeRegExpString = (s: string) => s.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n\nexport const regexPathGuid = (path?: string) => {\n if (!path || path) {\n return regexEndGuid;\n }\n const r = new RegExp(`${escapeRegExpString(path)}${regexEndGuid.source}`, 'gi');\n return r;\n};\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport { ProductPageMainSection } from '../../components/ProductPage/index';\nimport Content from '../../components/Content/index';\nimport { H2 } from '../../components/Heading/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport LogoBox from '../../components/LogoBox/index';\nimport { PackageOption } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface PackageOptionsProps {\n packageOptions?: PackageOption[] | null;\n}\n\nconst PackageOptions = ({ packageOptions }: PackageOptionsProps) => {\n const { t } = useTranslation();\n if (!packageOptions) {\n return null;\n }\n\n return (\n <>\n {packageOptions.map((packageOption, index) => (\n <ProductPageMainSection key={packageOption.title || index}>\n <Repeat>\n <H2 noMargin>{packageOption.title}</H2>\n </Repeat>\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {packageOption.link.title ? packageOption.link.title : t('item.readMoreInNewTab')}\n </ButtonInline>\n </Repeat>\n )}\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt={t('common.logotype') || ''} wide />\n </Repeat>\n )}\n </ProductPageMainSection>\n ))}\n </>\n );\n};\n\nexport default PackageOptions;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport Content from '../../components/Content/index';\nimport { ProductPageContentLimit } from '../../components/ProductPage/index';\nimport { H2 } from '../../components/Heading/index';\nimport { ButtonContent, ButtonInline, ButtonInlineBold } from '../../components/Button/index';\nimport { TableColumn, TableColumnRow, TableColumnCell } from '../../components/TableColumn/index';\n\nimport OpeningHours from '../../components/OpeningHours/index';\nimport PhoneNumber from '../../components/PhoneNumber/index';\nimport Map from '../../components/Map/index';\n\nimport { Branch, Maybe } from '../../@types/codegen/types';\nimport BranchModal from './BranchModal';\nimport { formatPhonenumber } from '../../utils/phonenumbers';\nimport { useTranslation } from 'react-i18next';\n\ninterface BranchProps {\n branch?: Maybe<Branch>;\n loading: boolean;\n displayBranchName?: boolean;\n}\n\nconst Branch = ({ branch, loading, displayBranchName }: BranchProps) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n\n const openModal = useCallback(() => setModal(true), []);\n const closeModal = useCallback(() => setModal(false), []);\n\n useEffect(() => {\n if (branch && modal) {\n setModal(false);\n }\n }, [branch]);\n\n if (!branch) {\n return null;\n }\n\n return (\n <>\n {modal && (\n <BranchModal loading={loading} connections={branch?.connections} onClose={closeModal} />\n )}\n <Repeat>\n <H2 noMargin>\n {displayBranchName\n ? `${t('item.thisCarsIsLocatedAt')} ${branch.name}`\n : branch?.location?.city\n ? t('item.thisCarIsAvailableAtOurBranch', { location: branch?.location?.city })\n : t('item.contact')}\n </H2>\n </Repeat>\n <Repeat>\n <Map position={branch?.location?.position} />\n </Repeat>\n {(branch?.connections?.length || 0) > 1 && (\n <Repeat>\n <Content>\n <p>\n {t('item.centralWarehouseCarDescriptionShort')}{' '}\n <ButtonInline\n as=\"span\"\n role=\"button\"\n onClick={openModal}\n inline\n title={t('item.clickHereToShowContactToAnotherBranch') || ''}\n >\n {t('item.clickHereToShowContactToAnotherBranch')}\n </ButtonInline>\n .\n </p>\n </Content>\n </Repeat>\n )}\n <Repeat>\n <ProductPageContentLimit>\n <Repeat>\n <TableColumn>\n {branch?.location?.streetAddress && branch?.location?.city && (\n <TableColumnRow>\n <TableColumnCell>{t('common.address')}</TableColumnCell>\n <TableColumnCell>\n <ButtonInlineBold>\n <ButtonContent>{`${branch?.location?.streetAddress}, ${branch?.location?.city}`}</ButtonContent>\n </ButtonInlineBold>\n </TableColumnCell>\n </TableColumnRow>\n )}\n {branch?.contact?.phonenumber && (\n <PhoneNumber phoneNumber={formatPhonenumber(branch.contact.phonenumber)} />\n )}\n </TableColumn>\n </Repeat>\n {branch?.openingHours && (\n <Repeat>\n <OpeningHours openingHours={branch.openingHours} />\n </Repeat>\n )}\n </ProductPageContentLimit>\n </Repeat>\n </>\n );\n};\n\nexport default Branch;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const TableColumn = styled.div`\n line-height: 1.2;\n`;\n\nexport const TableColumnRow = styled.div`\n display: flex;\n align-items: flex-start;\n margin: ${size(-1)};\n`;\n\nexport const TableColumnCell = styled.div`\n flex: 1 0 50%;\n padding: ${size(1)};\n`;\n", "import React, { useMemo } from 'react';\nimport { RepeatSmall } from '../Repeat/index';\nimport Badge from '../Badge/index';\nimport { TableColumn, TableColumnRow, TableColumnCell } from '../TableColumn/index';\nimport { UtilityTextBold } from '../Utility/index';\n\nimport { OpeningHours, Maybe } from '../../@types/codegen/types';\nimport i18next from 'i18next';\nimport { useTranslation } from 'react-i18next';\n\ntype Days = Omit<OpeningHours, '__typename'>;\ntype KeyType = keyof Days;\nconst KeyOrder: KeyType[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n 'sunday',\n];\n\nconst TranslateWeekDays = (d: KeyType) => {\n switch (d) {\n case 'monday':\n return i18next.t('common.mondayShort');\n case 'tuesday':\n return i18next.t('common.tuesdayShort');\n case 'wednesday':\n return i18next.t('common.wednesdayShort');\n case 'thursday':\n return i18next.t('common.thursdayShort');\n case 'friday':\n return i18next.t('common.fridayShort');\n case 'saturday':\n return i18next.t('common.saturdayShort');\n case 'sunday':\n return i18next.t('common.sundayShort');\n }\n};\n\ninterface OpeningHoursSample {\n titleFrom: string;\n titleTo?: string;\n from?: string | null;\n until?: string | null;\n}\n\nconst arr: OpeningHoursSample[] = [];\n\nconst GetOpeningHours = (o: OpeningHours) =>\n KeyOrder.reduce((prev, current) => {\n const title = TranslateWeekDays(current);\n const item = o[current];\n const previous = prev?.[prev.length - 1];\n if (previous && previous.from == item?.from && previous.until === item?.until) {\n prev[prev.length - 1].titleTo = title;\n } else {\n prev.push({\n titleFrom: title,\n from: item?.from,\n until: item?.until,\n });\n }\n\n return prev;\n }, arr.slice());\n\nconst GetOpeningHoursToday = (o: OpeningHours) => {\n const dayNumber = new Date().getDay();\n const day = KeyOrder[dayNumber === 0 ? 6 : dayNumber - 1] as KeyType;\n const current = o[day];\n return {\n title: current ? i18next.t('item.openingHoursToday') : i18next.t('item.closedToday'),\n from: current?.from,\n until: current?.until,\n };\n};\n\nconst valuOfDateString = (s: string) => {\n const splitted = s.split(':').map((x) => parseInt(x, 10));\n return new Date().setHours(splitted[0], splitted[1]).valueOf();\n};\n\ninterface OpeningHoursProps {\n openingHours?: Maybe<OpeningHours>;\n}\n\nconst OpeningHours = ({ openingHours }: OpeningHoursProps) => {\n const { t } = useTranslation();\n const today = useMemo(\n () => (openingHours ? GetOpeningHoursToday(openingHours) : null),\n [openingHours]\n );\n\n const currentlyOpen = useMemo(() => {\n try {\n if (today?.from && today?.until) {\n const currentDate = new Date().valueOf();\n const from = valuOfDateString(today.from);\n const until = valuOfDateString(today.until);\n return currentDate >= from && currentDate <= until;\n }\n } catch (e) {\n return false;\n }\n }, [today]);\n\n const oh = useMemo(() => (openingHours ? GetOpeningHours(openingHours) : null), [openingHours]);\n if (!oh) {\n return null;\n }\n\n return (\n <>\n <RepeatSmall>\n <Badge\n label={currentlyOpen ? t('item.open') : t('item.closed')}\n severity={currentlyOpen ? 'positive' : 'negative'}\n />\n </RepeatSmall>\n <RepeatSmall>\n <TableColumn>\n <TableColumnRow>\n <TableColumnCell>\n <UtilityTextBold>{today?.title}</UtilityTextBold>\n </TableColumnCell>\n <TableColumnCell>\n <UtilityTextBold>\n {today?.from ? `${today.from}-${today.until}` : t('item.closed')}\n </UtilityTextBold>\n </TableColumnCell>\n </TableColumnRow>\n {oh.map((o) => (\n <TableColumnRow key={o.titleFrom}>\n <TableColumnCell>\n {o.titleTo ? `${o.titleFrom}-${o.titleTo}` : o.titleFrom}\n </TableColumnCell>\n <TableColumnCell>\n {o.from ? `${o.from}-${o.until}` : t('item.closed')}\n </TableColumnCell>\n </TableColumnRow>\n ))}\n </TableColumn>\n </RepeatSmall>\n </>\n );\n};\n\nexport default OpeningHours;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n label: string;\n severity?: 'positive' | 'negative';\n}\n\nconst Badge = ({ label, severity }: Props) => <Wrapper severity={severity}>{label}</Wrapper>;\n\nexport default Badge;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport theme from '../../layout/theme';\n\nconst getBg = (severity: string | undefined): string => {\n let bg = theme.color.textDark;\n\n if (severity === 'positive') {\n bg = theme.color.ui.positive;\n } else if (severity === 'negative') {\n bg = theme.color.ui.negative;\n }\n\n return bg;\n};\n\ninterface Wrapper {\n severity?: string;\n}\n\nexport const Wrapper = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))<Wrapper>`\n display: inline-block;\n background-color: ${(props): string => getBg(props.severity)};\n padding: ${size(0.75)} ${size(1.5)};\n color: ${(props) => props.theme.color.textLight};\n border-radius: 3px;\n font-size: 0.75rem;\n line-height: 1.2;\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { TableColumnRow, TableColumnCell } from '../TableColumn/index';\nimport { ButtonContent, ButtonInlineBold } from '../Button/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface PhoneNumberProps {\n phoneNumber: string;\n}\n\nconst PhoneNumber = ({ phoneNumber }: PhoneNumberProps) => {\n const { t } = useTranslation();\n const [visible, setVisible] = useState(false);\n\n const onClick = useCallback(() => !visible && setVisible(true), [visible]);\n\n return (\n <TableColumnRow>\n <TableColumnCell>{t('other.phoneNumber')}</TableColumnCell>\n <TableColumnCell>\n {visible ? (\n <ButtonInlineBold\n as=\"a\"\n href={`tel:${phoneNumber}`}\n title={t('other.callPhoneNumber', { phoneNumber }) || ''}\n >\n <ButtonContent>{phoneNumber}</ButtonContent>\n </ButtonInlineBold>\n ) : (\n <ButtonInlineBold onClick={onClick} title={t('other.showPhoneNumber') || ''}>\n <ButtonContent>{t('other.showPhoneNumber')}</ButtonContent>\n </ButtonInlineBold>\n )}\n </TableColumnCell>\n </TableColumnRow>\n );\n};\n\nexport default PhoneNumber;\n", "import React, { useState, useCallback } from 'react';\nimport useSettings from '../../State/Settings/useSettings';\n\nimport { Wrapper, Image, Placeholder, PlaceholderAction } from './wrapper';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport { Position, Maybe } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface StaticMapProps {\n position?: Maybe<Position>;\n}\n\nconst StaticMap = ({ position }: StaticMapProps) => {\n const { t } = useTranslation();\n const { googleMapsApiKey, googleMapsMarker } = useSettings();\n const [visible, setVisible] = useState(false);\n\n const onShowMap = useCallback((e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n if (googleMapsApiKey) {\n e.preventDefault();\n setVisible(true);\n }\n }, []);\n\n if (!position) {\n return null;\n }\n\n const { latitude, longitude } = position;\n\n if (visible && googleMapsApiKey) {\n return (\n <Wrapper\n href={`http://maps.google.com/maps?q=${latitude},${longitude}`}\n title={t('item.showOnGoogleMaps')}\n target=\"_blank\"\n rel=\"nofollow noopener noreferrer\"\n >\n <Image\n src={`https://maps.googleapis.com/maps/api/staticmap?center=${latitude},${longitude}&zoom=10&size=640x280&maptype=roadmap&markers=${\n googleMapsMarker ? `icon:${encodeURIComponent(googleMapsMarker)}` : ''\n }%7C${latitude},${longitude}&key=${googleMapsApiKey}`}\n alt={t('item.googleMapsMapAlt')}\n />\n </Wrapper>\n );\n }\n return (\n <Placeholder\n href={`http://maps.google.com/maps?q=${latitude},${longitude}`}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n onClick={onShowMap}\n >\n <PlaceholderAction>\n <ButtonSecondary as=\"div\">\n <ButtonContent>{t('item.googleMapsPlaceholderInit')}</ButtonContent>\n </ButtonSecondary>\n </PlaceholderAction>\n </Placeholder>\n );\n};\n\nexport default StaticMap;\n", "import { useContext } from 'react';\n\nimport { SettingsContext } from './SettingsContext';\n\nconst useSettings = () => useContext(SettingsContext);\n\nexport default useSettings;\n", "import { createContext } from 'react';\n\nexport interface SettingsContextProps {\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n ecomSettings?: {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n };\n}\n\nexport const SettingsContext = createContext<SettingsContextProps>({});\n", "import styled from 'styled-components';\n\nexport const Wrapper = styled.a`\n display: block;\n`;\n\nexport const Image = styled.img`\n display: block;\n width: 100%;\n border-radius: 3px;\n`;\n\nexport const Placeholder = styled.a`\n display: block;\n position: relative;\n width: 100%;\n height: 0;\n padding-bottom: 43.75%; // Proportions of Google Static Map (640x280)\n background-image: linear-gradient(-15deg, #dfe4ce, #c1d6ea, #dfe4ce);\n border-radius: 3px;\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const PlaceholderAction = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n", "import { useContext, useEffect } from 'react';\nimport { CentralStorageContext } from './CentralStorageContext';\nimport { Vehicle } from '../../@types/codegen/types';\nimport useSearchItemBranch from '../../hooks/useSearchItemBranch';\n\nconst useCentralStorage = (vehicle?: Vehicle | null) => {\n const { centralStorageId, setCentralStorageId } = useContext(CentralStorageContext);\n\n const connections = vehicle?.branch?.connections;\n const branchId = centralStorageId\n ? connections?.find((x) => x.id === centralStorageId)?.id\n : undefined;\n\n const { data, loading } = useSearchItemBranch(vehicle?.id, branchId);\n\n useEffect(() => {\n if ((connections?.length || 0) > 0) {\n const match = centralStorageId\n ? connections?.find((x) => x.id === centralStorageId)\n : undefined;\n\n if (!match) {\n const first = connections?.[0];\n if (first) {\n setCentralStorageId(first.id);\n }\n }\n }\n }, [connections]);\n\n return {\n vehicle: (connections?.length || 0) > 0 ? data?.vehicle : vehicle,\n loading,\n };\n};\n\nexport default useCentralStorage;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport SEARCH_ITEM_BRANCH_QUERY from '../queries/SEARCH_ITEM_BRANCH_QUERY';\nimport { QueryVehicleArgs, Query } from '../@types/codegen/types';\n\nconst useSearchItemBranch = (\n id?: string | null,\n branch?: string | null\n): QueryResult<Query, QueryVehicleArgs> =>\n useQuery<Query, QueryVehicleArgs>(SEARCH_ITEM_BRANCH_QUERY, {\n variables: { id: id as string, branch: branch as string },\n skip: !id || !branch,\n });\n\nexport default useSearchItemBranch;\n", "import { gql } from '@apollo/client';\n\nconst HoursOpen = gql`\n fragment HoursOpen on HoursOpen {\n from\n until\n }\n`;\n\nconst SEARCH_ITEM_BRANCH_QUERY = gql`\n query SearchItemBranch($id: ID!, $branch: ID) {\n vehicle(id: $id, branch: $branch) {\n contact {\n name\n email\n phonenumber\n avatar\n }\n accessories {\n articleNumber\n description\n excerpt\n id\n images\n logotype\n manufacturer\n model\n name\n price\n assemblyPrice\n productPage {\n title\n url\n }\n salePrice\n }\n branch {\n connections {\n id\n name\n location {\n city\n county\n streetAddress\n postalCode\n position {\n latitude\n longitude\n }\n }\n }\n contact {\n name\n email\n phonenumber\n avatar\n }\n id\n description\n name\n homepage\n flags {\n mrf\n centralStorage\n ecommerce\n authorizedReseller\n }\n logotype\n openingHours {\n monday {\n ...HoursOpen\n }\n tuesday {\n ...HoursOpen\n }\n wednesday {\n ...HoursOpen\n }\n thursday {\n ...HoursOpen\n }\n friday {\n ...HoursOpen\n }\n saturday {\n ...HoursOpen\n }\n sunday {\n ...HoursOpen\n }\n }\n organization {\n branches {\n id\n }\n parent {\n id\n }\n }\n location {\n position {\n latitude\n longitude\n }\n city\n county\n streetAddress\n postalCode\n }\n promos {\n description\n image\n title\n }\n services {\n markdown\n title\n }\n }\n insuranceOptions {\n insuranceHeader\n institute\n identifier\n logotype\n name\n description\n longDescription\n url\n insuranceText\n requiresPersonalNumber\n requiresDistance\n terms\n }\n }\n }\n ${HoursOpen}\n`;\n\nexport default SEARCH_ITEM_BRANCH_QUERY;\n", "import React from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport { H1 } from '../../components/Heading/index';\nimport { useTranslation } from 'react-i18next';\n\nconst Page404 = () => {\n const { t } = useTranslation();\n return (\n <Page>\n <PageSection large>\n <Container>\n <H1 noMargin>{t('other.error404')}</H1>\n </Container>\n </PageSection>\n </Page>\n );\n};\n\nexport default Page404;\n", "import React from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport Loader from '../../components/Loader/index';\n\nconst PageLoading = () => (\n <Page>\n <PageSection large>\n <Container>\n <Loader />\n </Container>\n </PageSection>\n </Page>\n);\n\nexport default PageLoading;\n", "import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Category, Property } from '../../@types/vehicle-properties';\nimport PropertyTreeCreator from '../../utils/vehicle-properties/property-tree-creator';\nimport sortTree from '../../utils/vehicle-properties/property-tree-sorter';\nimport addCustomProperties from '../../utils/vehicle-properties/custom-property-adder';\nimport removeProperties from '../../utils/vehicle-properties/property-remover';\nimport MetadataItem from './MetadataItem';\n\nimport { H5 } from '../../components/Heading/index';\nimport { Repeat } from '../../components/Repeat/index';\nimport { TableList } from '../../components/TableList/index';\nimport Tabs from '../../components/Tabs/index';\nimport { VehicleData } from '../../@types/codegen/types';\n\ninterface MetadataSubCategoryProps {\n name: string;\n properties: Property[];\n}\n\nconst MetadataSubCategory = ({ name, properties }: MetadataSubCategoryProps) => (\n <Repeat>\n <H5 as=\"h3\">{name}</H5>\n <TableList>\n {!!properties.length &&\n properties.map((property, index) => (\n <MetadataItem\n name={property.name}\n hint={property.hint}\n value={property.value}\n unit={property.unit}\n key={`${property.name}-${index}`}\n />\n ))}\n </TableList>\n </Repeat>\n);\n\ninterface MetadataCaregoryProps {\n properties: Property[];\n subCategories: Category[];\n}\n\nconst MetadataCategory = ({ properties, subCategories }: MetadataCaregoryProps) => (\n <div className=\"tab-section\">\n {!!properties.length && (\n <Repeat>\n <TableList>\n {properties.map((property, index) => (\n <MetadataItem\n name={property.name}\n hint={property.hint}\n value={property.value}\n unit={property.unit}\n key={`${property.name}-${index}`}\n />\n ))}\n </TableList>\n </Repeat>\n )}\n {!!subCategories.length &&\n subCategories.map((subCategory, index) => (\n <MetadataSubCategory\n name={subCategory.name}\n properties={subCategory.properties}\n key={`${subCategory.name}-${index}`}\n />\n ))}\n </div>\n);\n\ninterface PropertySetProps {\n propertySet: any;\n vehicleData: VehicleData;\n}\n\nconst PropertySet = ({ propertySet, vehicleData }: PropertySetProps) => {\n const [activeCategoryId, setActiveCategoryId] = useState(-1);\n const mappedProperties = useMemo(() => {\n if (!propertySet) {\n return undefined;\n }\n\n const newProperties = removeProperties(propertySet);\n const enrichedProperties = addCustomProperties(vehicleData, newProperties);\n\n const tree = new PropertyTreeCreator(enrichedProperties).create();\n sortTree(tree);\n return tree;\n }, [propertySet]);\n\n useEffect(() => {\n const categories =\n mappedProperties?.categories?.length !== undefined ? mappedProperties?.categories : undefined;\n\n if (activeCategoryId < 0 && categories !== undefined && categories.length > 0) {\n setActiveCategoryId(categories[0].id);\n }\n }, [mappedProperties]);\n\n const onTab = useCallback((id: string) => setActiveCategoryId(parseInt(id, 10)), []);\n\n const activeCategory = mappedProperties?.categories?.find(\n (category) => category.id === activeCategoryId\n );\n\n return (\n <>\n <Repeat>\n <Tabs\n tabs={\n mappedProperties?.categories?.map((category) => ({\n name: `${category.id}`,\n displayName: category.name,\n })) || []\n }\n active={`${activeCategoryId}`}\n onClick={onTab}\n />\n </Repeat>\n {activeCategory && (\n <Repeat>\n <MetadataCategory\n properties={activeCategory.properties}\n subCategories={activeCategory.subCategories}\n />\n </Repeat>\n )}\n </>\n );\n};\n\nexport default PropertySet;\n", "import { EnhancedProperty, Tree, Category, ItemCategory } from '../../@types/vehicle-properties';\n\nclass PropertyTreeCreator {\n private properties: { [key: string]: EnhancedProperty };\n\n constructor(properties: { [key: string]: EnhancedProperty }) {\n this.properties = properties;\n }\n\n create(): Tree {\n const categories = this.createTreeCategories();\n const rootProperties = this.getRootProperties();\n if (rootProperties.length) {\n categories.push({\n name: PropertyTreeCreator.DEFAULT_CATEGORY_NAME,\n id: PropertyTreeCreator.DEFAULT_CATEGORY_ID,\n subCategories: [],\n properties: rootProperties,\n });\n }\n\n const tree = {\n categories,\n };\n\n return tree;\n }\n\n private getRootProperties() {\n const rootProperties = Object.keys(this.properties)\n .filter(this.propertiesWithoutCategory)\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n return rootProperties;\n }\n\n private propertiesWithCategory = (propertyKey: string) =>\n !!this.properties[propertyKey].category?.id;\n\n private propertiesWithoutCategory = (propertyKey: string) =>\n !this.propertiesWithCategory(propertyKey);\n\n private isList = (property: EnhancedProperty) =>\n property.type === PropertyTreeCreator.TEXT_LIST_TYPE;\n\n private isNonList = (property: EnhancedProperty) => !this.isList(property);\n\n private createTreeCategories() {\n const categories = this.getCategories();\n const treeCategories = this.convertToTreeCategories(categories);\n return treeCategories;\n }\n\n private getCategories() {\n const categories = Object.keys(this.properties)\n .filter(this.propertiesWithCategory)\n .map((key) => this.properties[key].category as unknown as ItemCategory)\n .filter(PropertyTreeCreator.distinctCategories);\n return categories;\n }\n\n private convertToTreeCategories(categories: ItemCategory[]) {\n return categories.map((category) => {\n const properties = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, category.id))\n .filter(this.propertiesWithoutSubCategory)\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n const subCategories = this.createTreeSubCategories(category.id);\n\n return {\n id: category.id,\n name: category.name,\n properties,\n subCategories,\n };\n });\n }\n\n private hasCategoryWithId = (propertyKey: string, categoryId: number) =>\n this.properties[propertyKey].category?.id === categoryId;\n\n private propertiesWithSubCategory = (propertyKey: string) =>\n !!this.properties[propertyKey].category?.subCategory?.id;\n\n private propertiesWithoutSubCategory = (propertyKey: string) =>\n !this.propertiesWithSubCategory(propertyKey);\n\n private createTreeSubCategories(categoryId: number) {\n const subCategories = this.getSubCategoriesOfCategory(categoryId);\n const convertedSubCategories = subCategories\n .map((subCategory) => this.convertSubCategory(subCategory))\n .filter((category) => category.properties.length > 0);\n const createdSubCategories = this.createListSubCategories(categoryId);\n const treeCategories = convertedSubCategories.concat(createdSubCategories);\n\n return treeCategories;\n }\n\n private getSubCategoriesOfCategory(id: number) {\n const categories = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, id))\n .filter(this.propertiesWithSubCategory)\n .map((key) => this.properties[key].category?.subCategory as ItemCategory)\n .filter(PropertyTreeCreator.distinctCategories);\n\n return categories;\n }\n\n private convertSubCategory(subCategory: ItemCategory): Category {\n const properties = Object.keys(this.properties)\n .filter((key) => this.hasSubCategoryWithId(key, subCategory.id))\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n\n return {\n id: subCategory.id,\n name: subCategory.name,\n properties,\n subCategories: [],\n };\n }\n\n private hasSubCategoryWithId = (propertyKey: string, categoryId: number) =>\n this.properties[propertyKey].category?.subCategory?.id === categoryId;\n\n private static distinctCategories = (\n category: ItemCategory,\n index: number,\n self: ItemCategory[]\n ) => {\n const firstOccuranceOfId = self.find((value) => value.id === category.id);\n return !!firstOccuranceOfId && self.indexOf(firstOccuranceOfId) === index;\n };\n\n private createListSubCategories(categoryId: number): Category[] {\n const listProperties = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, categoryId))\n .map((key) => this.properties[key])\n .filter(this.isList)\n .filter((prop) => (prop.value as string[]).length > 0);\n\n const createdSubCategories = listProperties.map((property, index) => ({\n id: PropertyTreeCreator.LIST_CATEGORY_START_ID + index,\n name: property.name,\n properties: this.asBoolProperties(property),\n subCategories: [],\n }));\n\n return createdSubCategories;\n }\n\n private asBoolProperties(listProperty: EnhancedProperty) {\n const values = listProperty.value as string[];\n const boolProperties = values.map((prop) => ({\n name: prop,\n value: true,\n type: 'bool',\n unit: listProperty.unit,\n hint: listProperty.hint,\n }));\n return boolProperties;\n }\n\n static DEFAULT_CATEGORY_NAME = 'Okategoriserat';\n static DEFAULT_CATEGORY_ID = 0;\n static TEXT_LIST_TYPE = 'text-list';\n static LIST_CATEGORY_START_ID = 100000;\n}\n\nexport default PropertyTreeCreator;\n", "import { Category } from '../../@types/vehicle-properties';\n\ninterface ID_ORDER_TYPE {\n '1000': 1;\n '71': 2;\n '2': 3;\n '1': 4;\n '8': 5;\n '6': 6;\n '119': 7;\n}\n\nconst ID_ORDER: ID_ORDER_TYPE = Object.freeze({\n '1000': 1,\n '71': 2,\n '2': 3,\n '1': 4,\n '8': 5,\n '6': 6,\n '119': 7,\n});\n\ntype ID_ORDER_KEY = keyof ID_ORDER_TYPE;\n\nconst compareById = (firstId: string, secondId: string) => {\n const firstOrder = ID_ORDER[firstId as ID_ORDER_KEY] || Number.MAX_SAFE_INTEGER;\n const secondOrder = ID_ORDER[secondId as ID_ORDER_KEY] || Number.MAX_SAFE_INTEGER;\n\n if (firstOrder < secondOrder) {\n return -1;\n } else if (secondOrder < firstOrder) {\n return 1;\n }\n return 0;\n};\n\nexport default (first: Category, second: Category) => {\n const result = compareById(`${first.id}`, `${second.id}`);\n\n if (result !== 0) {\n return result;\n }\n\n return first.name.localeCompare(second.name);\n};\n", "import { Property } from '../../@types/vehicle-properties';\n\nexport default (first: Property, second: Property) => {\n return first.name.localeCompare(second.name);\n};\n", "import { Property } from '../../@types/vehicle-properties';\n\nimport compareProperties from './compare-properties';\n\ninterface Order {\n Varum\u00E4rke: 1;\n Modell: 2;\n Version: 3;\n Modell\u00E5r: 4;\n Tillverknings\u00E5r: 5;\n M\u00E4tarst\u00E4llning: 6;\n V\u00E4xell\u00E5da: 7;\n F\u00E4rg: 8;\n Registreringsnummer: 9;\n Br\u00E4nslegrupp: 10;\n Kaross: 11;\n Segment: 12;\n Skatt: 13;\n Malus: 14;\n Bonus: 15;\n}\n\nconst ORDER: Order = Object.freeze({\n Varum\u00E4rke: 1,\n Modell: 2,\n Version: 3,\n Modell\u00E5r: 4,\n Tillverknings\u00E5r: 5,\n M\u00E4tarst\u00E4llning: 6,\n V\u00E4xell\u00E5da: 7,\n F\u00E4rg: 8,\n Registreringsnummer: 9,\n Br\u00E4nslegrupp: 10,\n Kaross: 11,\n Segment: 12,\n Skatt: 13,\n Malus: 14,\n Bonus: 15,\n});\n\ntype OrderKey = keyof Order;\n\nconst compareByPredefinedOrder = (firstId: string, secondId: string) => {\n const firstOrder = ORDER[firstId as OrderKey] || Number.MAX_SAFE_INTEGER;\n const secondOrder = ORDER[secondId as OrderKey] || Number.MAX_SAFE_INTEGER;\n\n if (firstOrder < secondOrder) {\n return -1;\n } else if (secondOrder < firstOrder) {\n return 1;\n }\n return 0;\n};\n\nexport default (first: Property, second: Property) => {\n const result = compareByPredefinedOrder(`${first.name}`, `${second.name}`);\n\n if (result !== 0) {\n return result;\n }\n\n return compareProperties(first, second);\n};\n", "import { Tree } from '../../@types/vehicle-properties';\nimport compareCategories from './compare-categories';\nimport compareBasicProperties from './compare-basic-properties';\nimport compareProperties from './compare-properties';\n\nconst sort = (tree: Tree) => {\n tree.categories.sort(compareCategories);\n tree.categories.forEach((category) => {\n if (category.id === 1000) {\n category.properties.sort(compareBasicProperties);\n } else {\n category.properties.sort(compareProperties);\n category.subCategories.forEach((subCategory) => {\n subCategory.properties.sort(compareProperties);\n });\n }\n });\n};\n\nexport default sort;\n", "import i18next from 'i18next';\nimport { VehicleData } from '../../@types/codegen/types';\nimport { EnhancedProperty, ItemCategory } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nexport const TEXT_TYPE = 'text';\nexport const NUMBER_TYPE = 'number';\nexport const BASIC_CATEGORY: ItemCategory = Object.freeze({\n id: 1000,\n name: i18next.t('category.basic'),\n subCategory: null,\n});\nexport const ENGINE_SUBCATEGORY: ItemCategory = Object.freeze({\n id: 6,\n name: i18next.t('category.engineAndPerformance'),\n subCategory: {\n id: 54,\n name: i18next.t('subCategory.engine'),\n subCategory: null,\n },\n});\n\nclass PropertyBuilder {\n name: string = '';\n value: string | number = '';\n type: string = 'unknown';\n unit: string | null = null;\n hint: string | null = null;\n category: ItemCategory | null = null;\n\n withName(name: string) {\n this.name = name;\n return this;\n }\n\n withHint(hint: string) {\n if (hint) {\n this.hint = hint;\n }\n return this;\n }\n\n withValue(value: string | number) {\n this.value = value;\n return this;\n }\n\n withType(type: string) {\n this.type = type;\n return this;\n }\n\n withCategory(category: ItemCategory) {\n this.category = category;\n return this;\n }\n\n withUnit(unit: string) {\n this.unit = unit;\n return this;\n }\n\n build(): EnhancedProperty {\n return {\n name: this.name,\n value: this.value,\n type: this.type,\n unit: this.unit,\n hint: this.hint,\n category: this.category,\n };\n }\n}\n\nexport default (item: VehicleData, properties: { [key: string]: EnhancedProperty }) => {\n const newProperties = deepCopy(properties);\n\n if (!!item.manufacturer) {\n newProperties.manufacturer = new PropertyBuilder()\n .withName(i18next.t('customProperty.manufacturer.displayName'))\n .withValue(item.manufacturer)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelSeries) {\n newProperties.modelSeries = new PropertyBuilder()\n .withName(i18next.t('customProperty.modelSeries.displayName'))\n .withValue(item.modelSeries)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelName) {\n newProperties.modelName = new PropertyBuilder()\n .withName(i18next.t('customProperty.modelName.displayName'))\n .withValue(item.modelName)\n .withHint(i18next.t('customProperty.modelName.hint'))\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelYear) {\n newProperties.modelYear = new PropertyBuilder()\n .withName(i18next.t('customProperty.modelYear.displayName'))\n .withValue(item.modelYear)\n .withHint(i18next.t('customProperty.modelYear.hint'))\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.manufactureYear) {\n newProperties.manufactureYear = new PropertyBuilder()\n .withName(i18next.t('customProperty.manufactureYear.displayName'))\n .withValue(item.manufactureYear)\n .withHint(i18next.t('customProperty.manufactureYear.hint'))\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (item.odometerReading) {\n newProperties.mileage = new PropertyBuilder()\n .withName(i18next.t('customProperty.odometer.displayName'))\n .withValue(item.odometerReading.value)\n .withHint(i18next.t('customProperty.odometer.hint'))\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .withUnit(i18next.t(`odometer.${item.odometerReading.unit}`))\n .build();\n } else if (!!item.mileage) {\n newProperties.mileage = new PropertyBuilder()\n .withName(i18next.t('customProperty.odometer.displayName'))\n .withValue(item.mileage)\n .withHint(i18next.t('customProperty.odometer.hint'))\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .withUnit(i18next.t('odometer.ScandinavianMile'))\n .build();\n }\n\n if (!!item.gearboxType) {\n newProperties.gearboxType = new PropertyBuilder()\n .withName(i18next.t('customProperty.gearboxType.displayName'))\n .withValue(item.gearboxType)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.registrationNumber) {\n newProperties.registrationNumber = new PropertyBuilder()\n .withName(i18next.t('customProperty.registrationNumber.displayName'))\n .withValue(item.registrationNumber)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.fuelType) {\n newProperties.fuelType = new PropertyBuilder()\n .withName(i18next.t('customProperty.fuelType.displayName'))\n .withValue(item.fuelType)\n .withHint(i18next.t('customProperty.fuelType.hint'))\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (item.enginePower) {\n newProperties.enginePower = new PropertyBuilder()\n .withName(i18next.t('customProperty.enginePower.displayName'))\n .withValue(item.enginePower)\n .withUnit(i18next.t('customProperty.enginePower.unit'))\n .withType(NUMBER_TYPE)\n .withCategory(ENGINE_SUBCATEGORY)\n .build();\n }\n\n return newProperties;\n};\n", "/**\n * Does not copy complex objects such as Date, functions etc.\n */\nconst deepCopy = <T extends Object>(object: T) => JSON.parse(JSON.stringify(object)) as T;\n\nexport default deepCopy;\n", "import { EnhancedProperty } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nconst PROPERTY_BLACK_LIST = Object.freeze([\n 'towHitchFoldable',\n 'trailerTotalWeightB',\n 'gps',\n 'androidAuto',\n 'appleCarPlay',\n 'tintedWindows',\n]);\n\nconst isForbiddenProperty = (key: string) => PROPERTY_BLACK_LIST.includes(key);\n\nconst CATEGORY_WHITE_LIST = Object.freeze([1, 2, 6, 8, 71, 119, 1000]);\n\nconst hasForbiddenCategory = (property: EnhancedProperty) =>\n !property.category ||\n !property.category.id ||\n !CATEGORY_WHITE_LIST.includes(property.category.id);\n\nexport default (properties: { [key: string]: EnhancedProperty }) => {\n const newProperties = deepCopy(properties);\n\n Object.keys(properties).forEach((key) => {\n const property = properties[key];\n if (hasForbiddenCategory(property)) {\n delete newProperties[key];\n } else if (isForbiddenProperty(key)) {\n delete newProperties[key];\n }\n });\n\n return newProperties;\n};\n", "import React, { useState, useCallback } from 'react';\nimport { Property } from '../../@types/vehicle-properties';\n\nimport {\n TableListItem,\n TableListKey,\n TableListValue,\n TableListBooleanPos,\n TableListBooleanNeg,\n} from '../../components/TableList/index';\nimport { IconCheck, IconCancel } from '../../components/Icon/index';\nimport { SrOnly } from '../../components/SrOnly/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\nimport i18next from 'i18next';\nimport { useTranslation } from 'react-i18next';\n\nconst formatValue = (value: Property['value'], unit: Property['unit']) => {\n if (typeof value === 'boolean') {\n return value ? (\n <TableListBooleanPos title={i18next.t('common.yes') || ''}>\n <SrOnly>{i18next.t('common.yes')}</SrOnly>\n <IconCheck block />\n </TableListBooleanPos>\n ) : (\n <TableListBooleanNeg title={i18next.t('common.no') || ''}>\n <SrOnly>{i18next.t('common.no')}</SrOnly>\n <IconCancel block />\n </TableListBooleanNeg>\n );\n }\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n if (!!value && !!unit) {\n return `${value} ${unit}`;\n }\n return value;\n};\n\ninterface MetadataItemProps {\n name: string;\n hint?: string | null | undefined;\n value: Property['value'];\n unit: Property['unit'];\n}\n\nconst MetadataItem = ({ name, hint, value, unit }: MetadataItemProps) => {\n const { t } = useTranslation();\n const [foldout, setFoldout] = useState(false);\n const onToggleFoldout = useCallback(() => setFoldout(!foldout), [foldout]);\n\n const presentedValue = formatValue(value, unit);\n\n return (\n <TableListItem>\n <TableListKey>\n {hint ? (\n <ButtonInline\n onClick={onToggleFoldout}\n title={t('item.moreInfoAboutSubject', { subject: name }) || ''}\n >\n {name}\n </ButtonInline>\n ) : (\n name\n )}\n </TableListKey>\n <TableListValue>\n {value !== undefined ? presentedValue : t('item.dataNotAvailable')}\n </TableListValue>\n {hint && foldout && (\n <Modal title={name} onClose={onToggleFoldout}>\n <Content dangerouslySetInnerHTML={{ __html: hint }} />\n </Modal>\n )}\n </TableListItem>\n );\n};\n\nexport default MetadataItem;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const TableList = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n border-top: 1px solid ${(props) => props.theme.color.border};\n border-bottom: 1px solid ${(props) => props.theme.color.border};\n font-size: 0.875rem;\n`;\n\nexport const TableListItem = styled.li`\n display: flex;\n align-items: center;\n padding: ${size(1)} 0;\n\n & + & {\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n`;\n\nexport const TableListKey = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const TableListValue = styled.div`\n flex-shrink: 0;\n padding-left: ${size(1)};\n`;\n\nexport const TableListBooleanPos = styled.div`\n color: ${(props) => props.theme.color.ui.positive};\n`;\n\nexport const TableListBooleanNeg = styled.div`\n color: ${(props) => props.theme.color.ui.negative};\n`;\n", "import * as React from 'react';\n\nimport { Action, Item, List, Wrapper } from './wrapper';\n\nexport interface ITabItem {\n name: string;\n displayName: string;\n}\n\nexport interface ITabInterface<T> {\n tabs: ITabItem[];\n active: string;\n onClick?: (name: T) => void;\n}\n\nconst Tabs = <T extends {}>({ tabs, active, onClick }: ITabInterface<T>) => (\n <Wrapper>\n <List>\n {tabs.map((tab) => (\n <Item key={tab.name}>\n <Action\n title={tab.displayName}\n onClick={onClick ? () => onClick(tab.name as unknown as T) : undefined}\n active={tab.name === active ? 'true' : undefined}\n >\n {tab.displayName}\n </Action>\n </Item>\n ))}\n </List>\n </Wrapper>\n);\n\nexport default Tabs;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { ButtonReset } from '../Button/index';\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n overflow: hidden;\n margin-top: ${size(-1)};\n margin-left: ${size(-1)};\n margin-right: ${size(-1)};\n\n ${(props) => props.theme.breakpoint.LtSm} {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n }\n`;\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n white-space: nowrap;\n font-size: 0;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding-left: ${size(1)};\n padding-right: ${size(1)};\n }\n`;\n\nexport const Item = styled.li`\n display: inline-block;\n vertical-align: bottom;\n font-size: 1rem;\n`;\n\ntype ActionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n active?: boolean | string;\n};\n\nexport const Action = styled(ButtonReset).attrs(() => ({\n role: 'tab',\n className: 'wayke__theme wayke__font--bold',\n}))<ActionProps>`\n position: relative;\n display: block;\n padding: ${size(1)};\n color: ${(props) => props.theme.color.textDarkLighten};\n\n :hover {\n color: ${(props) => props.theme.color.textDark};\n }\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: ${size(1)};\n right: ${size(1)};\n height: 2px;\n background-color: ${(props) => props.theme.color.textDark};\n transform: scaleY(0);\n transition: transform 200ms ease;\n z-index: 1;\n }\n\n ${(props) =>\n props.active &&\n css`\n color: ${(props) => props.theme.color.textDark};\n\n :after {\n transform: scaleY(1);\n }\n `}\n`;\n", "import React from 'react';\n\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface DemoCarModalProps {\n onClose: () => void;\n}\n\nconst DemoCarModal = ({ onClose }: DemoCarModalProps) => {\n const { t } = useTranslation();\n return (\n <Modal title={t('item.demoCar')} onClose={onClose}>\n <Content>\n <p>{t('item.demoCarDescription')}</p>\n </Content>\n </Modal>\n );\n};\n\nexport default DemoCarModal;\n", "import React from 'react';\n\nimport { H2, H3 } from '../../components/Heading/index';\nimport { ProductPageMainSection } from '../../components/ProductPage/index';\nimport { Scalars } from '../../@types/codegen/types';\nimport DocumentList from '../../components/DocumentList/index';\nimport { Repeat } from '../../components/Repeat/index';\nimport { useTranslation } from 'react-i18next';\nimport ExtendContent from '../../components/ExtendContent/index';\nimport i18next from 'i18next';\n\nconst Translation = {\n 'tyre-label': i18next.t('item.documentTypes.tireEnergyDeclaration'),\n 'content declaration': i18next.t('item.documentTypes.goodsDeclaration'),\n other: i18next.t('item.documentTypes.other'),\n};\n\nconst SortOrder = {\n 'tyre-label': 2,\n 'content declaration': 1,\n other: 3,\n};\n\ntype CategoryType = keyof typeof Translation;\n\ninterface DocumentCategory {\n category: string;\n sortOrder: number;\n documents: Scalars['FileDocument'][];\n}\n\ninterface DocumentsProps {\n documents: Scalars['FileDocument'][];\n}\n\nconst Documents = ({ documents }: DocumentsProps) => {\n const { t } = useTranslation();\n const categorised = documents\n .reduce((prev, curr) => {\n const index = prev.findIndex((x) => x.category === (curr.category || 'others'));\n if (index > -1) {\n prev[index].documents.push(curr);\n } else {\n const category = curr.category || 'others';\n prev.push({\n category,\n documents: [curr],\n sortOrder: SortOrder?.[category as CategoryType] ?? 99,\n });\n }\n\n return prev;\n }, [] as DocumentCategory[])\n .sort((a, b) => a.sortOrder - b.sortOrder);\n\n if (!documents.length) return null;\n\n const manyCategories = categorised.length > 1;\n\n return (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{t('item.documents')}</H2>\n </Repeat>\n <Repeat>\n <ExtendContent actionTitle={t('common.showMore')}>\n {categorised.map((group) => (\n <Repeat key={group.category}>\n {manyCategories && (\n <H3>{Translation?.[group.category as CategoryType] || Translation.other}</H3>\n )}\n <DocumentList documents={group.documents} />\n </Repeat>\n ))}\n </ExtendContent>\n </Repeat>\n </ProductPageMainSection>\n );\n};\n\nexport default Documents;\n", "import React, { useMemo } from 'react';\n\nimport { Scalars } from '../../@types/codegen/types';\nimport {\n PdfListItem,\n PdfSubtitle,\n PdfTitle,\n List,\n PdfListInner,\n PdfLink,\n PdfColumn,\n} from './wrapper';\nimport { useTranslation } from 'react-i18next';\n\ninterface PdfDownloadItemProps {\n document: Scalars['FileDocument'];\n}\n\nconst translateContentType = (document: Scalars['FileDocument']) => {\n switch (document.contentType) {\n case 'application/pdf':\n return 'PDF';\n default:\n const formattedContentType =\n document.url && document.url.includes('.') ? document.url.split('.').pop() : '';\n return formattedContentType;\n }\n};\n\nexport const PdfDownloadItem = ({ document }: PdfDownloadItemProps) => {\n const { t } = useTranslation();\n const contentType = useMemo(() => translateContentType(document), [document]);\n return (\n <PdfListItem>\n <PdfListInner>\n <PdfColumn>\n <PdfTitle>{document.name}</PdfTitle>\n <PdfSubtitle>{contentType}</PdfSubtitle>\n </PdfColumn>\n <PdfColumn>\n <PdfLink\n href={document.url}\n rel=\"noopener noreferrer nofollow\"\n target=\"_blank\"\n title={t('other.openDocument', { document: document.name })}\n >\n {t('common.open')}\n </PdfLink>\n </PdfColumn>\n </PdfListInner>\n </PdfListItem>\n );\n};\n\ninterface IDocumentList {\n documents: Scalars['FileDocument'][];\n}\n\nexport const DocumentList = ({ documents }: IDocumentList) => (\n <List>\n {documents.map((document, i) => (\n <PdfDownloadItem key={`${document.url}-${i}`} document={document} />\n ))}\n </List>\n);\n\nexport default DocumentList;\n", "import styled from 'styled-components';\nimport { size } from '../../layout/helpers';\n\nexport const PdfListItem = styled.li.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n flex: 0 0 50%;\n padding: ${size(1)};\n\n ${({ theme }) => theme.breakpoint.LtSm} {\n flex: 0 0 100%;\n }\n`;\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n display: flex;\n flex-wrap: wrap;\n margin: ${size(-1)};\n`;\n\nexport const PdfLink = styled.a.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n text-decoration: none;\n font-size: 0.875rem;\n &:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const PdfTitle = styled.div`\n color: ${(props) => props.theme.color.textDark};\n`;\nexport const PdfSubtitle = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n`;\n\nexport const PdfColumn = styled.div`\n flex: 0 0 auto;\n &:first-child {\n flex: 1 1 auto;\n }\n`;\n\nexport const PdfListInner = styled.div`\n position: relative;\n border: 1px solid ${(props) => props.theme.color.border};\n padding: ${size(1.5)};\n display: flex;\n align-items: center;\n :hover {\n background-color: ${(props) => props.theme.color.hoverOverlay};\n }\n`;\n", "import React, { useState } from 'react';\nimport { Accessory } from '../../../@types/codegen/types';\nimport { numberSeparator } from '../../../utils/formats';\nimport { ProductPageMainSection } from '../../../components/ProductPage/index';\nimport { Repeat } from '../../../components/Repeat/index';\nimport { H2 } from '../../../components/Heading/index';\nimport Content from '../../../components/Content/index';\nimport AccessoryCard from '../../../components/AccessoryCard/index';\nimport OverflowGrid from '../../../components/OverflowGrid/index';\nimport AccesoryModal from './AccessoryModal';\nimport { useTranslation } from 'react-i18next';\n\ninterface AccessoriesSectionProps {\n accessories?: Accessory[];\n}\n\nconst AccessoriesSection = ({ accessories }: AccessoriesSectionProps) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState<Accessory | undefined>();\n\n const onOpenModal = (accessory: Accessory) => setModal(accessory);\n const onCloseModal = () => setModal(undefined);\n\n if (!accessories?.length) return null;\n\n return (\n <>\n {modal && <AccesoryModal accessory={modal} onClose={onCloseModal} />}\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{t('item.accessories.accessories')}</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>{t('item.accessories.accessoriesDescription')}</p>\n </Content>\n </Repeat>\n <Repeat>\n <OverflowGrid\n columns={1.05}\n columnsSm={2.1}\n columnsMd={2}\n spacing={2}\n items={accessories.map((accessory) => (\n <AccessoryCard\n key={accessory.id}\n title={accessory.name}\n image={\n accessory.images?.[0]\n ? {\n src: `${accessory.images?.[0]}?w=539&h=303`,\n alt: accessory.name,\n }\n : undefined\n }\n price={`${numberSeparator(accessory.price)} ${t('currency.default')}`}\n preamble={accessory.excerpt}\n readMoreCta={() => onOpenModal(accessory)}\n />\n ))}\n />\n </Repeat>\n </ProductPageMainSection>\n </>\n );\n};\n\nexport default AccessoriesSection;\n", "import React from 'react';\n\nimport {\n Wrapper,\n Image,\n ImageaPlaceholder,\n Body,\n Heading,\n Title,\n Branding,\n Price,\n Preamble,\n ReadMoreBtn,\n} from './wrapper';\nimport { IconImage } from '../Icon/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface AccessoryCardImageProps {\n src: string;\n srcSet?: string;\n alt: string;\n}\n\ninterface AccessoryCardProps {\n title: string;\n image?: AccessoryCardImageProps;\n branding?: AccessoryCardImageProps;\n price?: string;\n preamble?: string;\n readMoreCta?: () => void;\n}\n\nconst AccessoryCard = ({\n title,\n image,\n branding,\n price,\n preamble,\n readMoreCta,\n}: AccessoryCardProps) => {\n const { t } = useTranslation();\n return (\n <Wrapper>\n {image ? (\n <Image src={image.src} srcSet={image.srcSet} alt={image.alt} />\n ) : (\n <ImageaPlaceholder>\n <IconImage />\n </ImageaPlaceholder>\n )}\n <Body>\n <Heading>\n <Title>{title}</Title>\n {branding && <Branding src={branding.src} srcSet={branding.srcSet} alt={branding.alt} />}\n </Heading>\n {price && <Price>{price}</Price>}\n {preamble && <Preamble>{preamble}</Preamble>}\n {readMoreCta && (\n <ReadMoreBtn onClick={readMoreCta} title={t('common.readMore') || ''}>\n {t('common.readMore')}\n </ReadMoreBtn>\n )}\n </Body>\n </Wrapper>\n );\n};\n\nexport default AccessoryCard;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${size(2)};\n height: 100%;\n`;\n\nconst imageBaseStyling = css`\n flex-shrink: 0;\n aspect-ratio: 16 / 9;\n border-radius: 3px;\n`;\n\nexport const Image = styled.img`\n ${imageBaseStyling};\n display: block;\n width: 100%;\n object-fit: cover;\n`;\n\nexport const ImageaPlaceholder = styled.div`\n ${imageBaseStyling};\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 2rem;\n background-color: ${(props) => props.theme.color.accent};\n`;\n\nexport const Body = styled.div`\n flex: 1 1 auto;\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n gap: ${size(1)};\n`;\n\nexport const Heading = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${size(2)};\n`;\n\nexport const Title = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1.125rem;\n`;\n\nexport const Branding = styled.img`\n display: block;\n`;\n\nexport const Price = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n\nexport const Preamble = styled.div`\n --preamble-max-height: ${size(6)};\n --preamble-gradient-height: calc(var(--preamble-max-height) / 2);\n\n position: relative;\n max-height: var(--preamble-max-height);\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n white-space: pre-wrap;\n\n &::before {\n content: '';\n position: absolute;\n top: var(--preamble-max-height);\n left: 0;\n width: 100%;\n height: var(--preamble-gradient-height);\n transform: translateY(-100%); // Only visible if Preamble reaches max height\n color: ${(props) => props.theme.color.bg};\n mask-image: ${(props) => props.theme.mask.gradient.toTop};\n pointer-events: none;\n }\n`;\n\nexport const ReadMoreBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__font--bold wayke__color--primary-text',\n}))`\n margin-top: auto;\n display: block;\n color: ${(props) => props.theme.color.link};\n font-size: 0.875rem;\n\n &:hover {\n text-decoration: underline;\n }\n`;\n", "import React from 'react';\nimport { marked } from 'marked';\nimport { Accessory } from '../../../@types/codegen/types';\nimport { numberSeparator } from '../../../utils/formats';\nimport { Repeat } from '../../../components/Repeat/index';\nimport { Image } from '../../../components/Image/index';\nimport { Link } from '../../../components/Link/index';\nimport { UtilityTextBold } from '../../../components/Utility/index';\nimport Modal from '../../../components/Modal/index';\nimport PriceBox from '../../../components/PriceBox/index';\nimport LogoBox from '../../../components/LogoBox/index';\nimport Content from '../../../components/Content/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface AccesoryModalProps {\n accessory: Accessory;\n onClose: () => void;\n}\n\nconst AccesoryModal = ({ accessory, onClose }: AccesoryModalProps) => {\n const { t } = useTranslation();\n const priceList = [\n {\n label: t('item.accessories.price'),\n price: `${numberSeparator(accessory.price)} ${t('currency.default')}`,\n oldPrice: false,\n },\n ];\n\n if (accessory.salePrice) {\n priceList.push({\n label: t('item.accessories.oldPrice'),\n price: `${numberSeparator(accessory.salePrice)} ${t('currency.default')}`,\n oldPrice: true,\n });\n }\n\n if (accessory.assemblyPrice) {\n priceList.push({\n label: t('item.accessories.installationCost'),\n price: `${numberSeparator(accessory.assemblyPrice)} ${t('currency.default')}`,\n oldPrice: false,\n });\n }\n\n return (\n <Modal title={accessory.name} onClose={onClose}>\n {accessory.images?.[0] && (\n <Repeat>\n <Image src={`${accessory.images[0]}?w=632`} alt={`${accessory.name}`} />\n </Repeat>\n )}\n {accessory.logotype && (\n <Repeat>\n <LogoBox\n logo={`${accessory.logotype}?w=160`}\n logo2x={`${accessory.logotype}?w=320`}\n alt={accessory.manufacturer || t('common.logotype') || ''}\n wide\n />\n </Repeat>\n )}\n <Repeat>\n <PriceBox prices={priceList} />\n </Repeat>\n\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(accessory.description) }} />\n </Repeat>\n {accessory.articleNumber && (\n <Repeat>\n <UtilityTextBold as=\"div\">{t('item.accessories.articleNumberShort')}</UtilityTextBold>\n <div>{accessory.articleNumber}</div>\n </Repeat>\n )}\n {accessory.productPage && accessory.productPage.url && (\n <Repeat>\n <Link\n href={accessory.productPage.url}\n title={\n t('item.accessories.moreInformationAboutAccessory', {\n accessory: accessory.name,\n }) || ''\n }\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n {accessory.productPage.title || t('common.readMore')} ({t('common.opensInNewTab')})\n </Link>\n </Repeat>\n )}\n </Modal>\n );\n};\n\nexport default AccesoryModal;\n", "import styled from 'styled-components';\n\nexport const Image = styled.img`\n display: block;\n width: 100%;\n`;\n", "import styled, { css } from 'styled-components';\n\ninterface LinkProps {\n $hoverGhost?: boolean;\n}\n\nexport const Link = styled.a.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))<LinkProps>`\n text-decoration: none;\n cursor: pointer;\n text-decoration: underline;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDark};\n }\n\n &:hover {\n text-decoration: underline;\n }\n\n ${({ $hoverGhost }) =>\n $hoverGhost &&\n css`\n &:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper, Row, Label, Price } from './wrapper';\n\ninterface PriceBoxItemProps {\n label: string;\n price: string;\n oldPrice?: boolean;\n}\n\ninterface PriceBoxProps {\n prices: PriceBoxItemProps[];\n}\n\nconst PriceBox = ({ prices }: PriceBoxProps) => (\n <Wrapper>\n {prices?.map((item, i) => (\n <Row key={`${item.label}-${i}`} $oldPrice={item.oldPrice}>\n <Label>{item.label}</Label>\n <Price>{item.price}</Price>\n </Row>\n ))}\n </Wrapper>\n);\n\nexport default PriceBox;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.ul`\n --price-box-gutter: ${size(2)};\n\n list-style: none;\n padding: var(--price-box-gutter);\n margin: 0;\n border: 1px solid ${(props) => props.theme.color.border};\n`;\n\ninterface RowProps {\n $oldPrice?: boolean;\n}\n\nexport const Row = styled.li<RowProps>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--price-box-gutter);\n\n & + & {\n margin-top: calc(var(--price-box-gutter) / 4);\n }\n\n ${({ $oldPrice }) =>\n $oldPrice &&\n css`\n --price-text-decoration: line-through;\n\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n `}\n`;\n\nexport const Label = styled.div``;\n\nexport const Price = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n text-decoration: var(--price-text-decoration);\n`;\n", "import React from 'react';\n\nimport GraphqlProvider from './graphqlProvider';\nimport Theme from './themeProvider';\nimport SearchProvider from '../State/Search/SearchProvider';\nimport Root from '../components/Root/index';\n\nimport SettingsProvider from '../State/Settings/SettingsProvider';\nimport RelatedSearchProvider from '../State/RelatedSearch/RelatedSearchProvider';\nimport CentralStorageProvider from '../State/CentralStorage/CentralStorageProvider';\nimport PathProvider from '../State/Path/PathProvider';\n\nexport interface EcomSettings {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n}\n\nexport interface WaykeProviderSettings {\n url: string;\n urlMlt?: string;\n apiKey?: string;\n graphQlUrl: string;\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n useQueryParamsFromUrl?: boolean;\n pathRoute?: string;\n}\n\nexport type WaykeProviderProps = WaykeProviderSettings & {\n children?: React.ReactNode;\n};\n\nconst WaykeProvider = ({\n url,\n urlMlt,\n apiKey,\n ecomSettings,\n graphQlUrl,\n googleMapsApiKey,\n googleMapsMarker,\n useQueryParamsFromUrl,\n pathRoute,\n children,\n}: WaykeProviderProps) => (\n <PathProvider>\n <SettingsProvider\n googleMapsApiKey={googleMapsApiKey}\n googleMapsMarker={googleMapsMarker}\n ecomSettings={ecomSettings}\n >\n <CentralStorageProvider>\n <GraphqlProvider uri={graphQlUrl}>\n <SearchProvider\n url={url}\n apiKey={apiKey}\n useQueryParamsFromUrl={useQueryParamsFromUrl}\n pathRoute={pathRoute}\n >\n <RelatedSearchProvider url={url} urlMlt={urlMlt} apiKey={apiKey}>\n <Theme>\n <Root>{children}</Root>\n </Theme>\n </RelatedSearchProvider>\n </SearchProvider>\n </GraphqlProvider>\n </CentralStorageProvider>\n </SettingsProvider>\n </PathProvider>\n);\n\nexport default WaykeProvider;\n", "import React from 'react';\nimport { ApolloProvider as ApolloProviderBase, ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst GraphqlProvider = ({ uri, children }: { uri: string; children: React.ReactNode }) => {\n const client = new ApolloClient({ uri, cache: new InMemoryCache() });\n return <ApolloProviderBase client={client}>{children}</ApolloProviderBase>;\n};\n\nexport default GraphqlProvider;\n", "import React from 'react';\n\nimport { ThemeProvider as ThemeProviderBase } from 'styled-components';\n\nimport theme from '../layout/theme';\n\ninterface ThemeProps {\n children: React.ReactNode;\n}\n\nconst ThemeProvider = ({ children }: ThemeProps) => (\n <ThemeProviderBase theme={theme}>{children}</ThemeProviderBase>\n);\n\nexport default ThemeProvider;\n", "import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Facet, Document, Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\nimport useFetch from '../../hooks/useFetch';\nimport { SearchContext } from './SearchContext';\nimport { getUrlSearchParamsFromUrl } from '../../utils/url';\nimport { WaykePubSub } from '../../index';\nimport { ActionOnFilterUpdate } from '../../utils/pubsub/Actions';\nimport usePath from '../Path/usePath';\n\ninterface SearchProviderProps {\n url: string;\n apiKey?: string;\n useQueryParamsFromUrl?: boolean;\n pathRoute?: string;\n children: React.ReactNode;\n}\n\nconst initialSearchParams = new URLSearchParams();\ninitialSearchParams.set('hits', '30');\ninitialSearchParams.set('sort', 'published-desc');\n\nconst SearchProvider = ({\n url,\n apiKey,\n useQueryParamsFromUrl,\n pathRoute,\n children,\n}: SearchProviderProps) => {\n const { replaceState, pushState } = usePath();\n const [queryFilter, setQueryFilter] = useState<QueryFilter>({\n searchParams: initialSearchParams,\n });\n\n const [initialFacets, setInitialFacets] = useState<Facet[]>();\n const [documents, setDocuments] = useState<Document[]>();\n const [initialize, setInitialize] = useState(false);\n\n const { data: initialDataRepsonse } = useFetch<Search>(\n `${url}?hits=0`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !!initialFacets\n );\n\n const query = queryFilter.searchParams.toString();\n const {\n loading,\n data: response,\n error,\n } = useFetch<Search>(\n `${url}${query ? `?${query}` : ''}`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !initialize || !!queryFilter?.block\n );\n\n const popStateEvent = (event: PopStateEvent) => {\n const { currentTarget } = event;\n if (currentTarget) {\n const nextSearchParams = new URLSearchParams((currentTarget as Window).location.search);\n\n if (!nextSearchParams.has('sort')) {\n nextSearchParams.set('sort', 'published-desc');\n }\n\n setQueryFilter({\n searchParams: nextSearchParams,\n });\n }\n };\n\n useEffect(() => {\n if (useQueryParamsFromUrl) {\n window.addEventListener('popstate', popStateEvent);\n }\n\n const onFilterUpdateEvent: ActionOnFilterUpdate = {\n actionName: 'onFilterUpdate',\n callback: onFilterUpdate,\n };\n\n WaykePubSub.subscribeAction(onFilterUpdateEvent);\n return () => {\n window.removeEventListener('popstate', popStateEvent);\n WaykePubSub.unsubscribeAction(onFilterUpdateEvent);\n };\n }, []);\n\n useEffect(() => {\n if (initialDataRepsonse) {\n setInitialFacets(initialDataRepsonse.facets);\n }\n }, [initialDataRepsonse]);\n\n useEffect(() => {\n if (useQueryParamsFromUrl) {\n const nextSearchParams = new URLSearchParams(queryFilter.searchParams);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n if (nextSearchParams.get('sort') === 'published-desc') {\n nextSearchParams.delete('sort');\n }\n\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n if (initialize) {\n if (window.location.search.localeCompare(nextSearch) !== 0) {\n const _path = pathRoute?.replace(/^\\/|\\/$/g, '');\n const prefix = _path ? `/${_path}/` : '/';\n\n const index = _path ? window.location.pathname.indexOf(prefix) : -1;\n let pathname = window.location.pathname;\n if (index > -1) {\n pathname = pathname.substr(0, index);\n }\n\n pushState(`${pathname}${nextSearch}`);\n }\n }\n }\n }, [queryFilter, initialize, useQueryParamsFromUrl]);\n\n useEffect(() => {\n if (response) {\n if (!initialFacets && !useQueryParamsFromUrl) {\n setInitialFacets(response.facets);\n }\n\n if (useQueryParamsFromUrl && response.query?.parameters) {\n const nextSearchParams = new URLSearchParams(response.query.parameters);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n if (window.location.search.localeCompare(nextSearch) !== 0) {\n replaceState(`${window.location.pathname}${nextSearch}`);\n setQueryFilter({\n searchParams: new URLSearchParams(nextSearch),\n block: true,\n });\n }\n }\n\n if (queryFilter?.concatResult) {\n setDocuments([...(documents || []), ...(response.documentList.documents || [])]);\n } else {\n setDocuments(response.documentList.documents || []);\n }\n }\n }, [response, useQueryParamsFromUrl]);\n\n const onFilterUpdate = useCallback(\n (nextQuery: string) => {\n {\n if (!initialize) {\n setInitialize(true);\n }\n\n setQueryFilter({\n searchParams: new URLSearchParams(nextQuery),\n });\n }\n },\n [initialize]\n );\n\n const onLoadMore = useCallback(() => {\n if (response) {\n setQueryFilter({\n searchParams: new URLSearchParams(response?.documentList.pagination.nextPage?.query),\n concatResult: true,\n });\n }\n }, [response]);\n\n const onInitialize = useCallback(\n (_initialQueryParams?: URLSearchParams) => {\n if (!initialize) {\n const searchParamsFromUrl = getUrlSearchParamsFromUrl();\n\n const initialQueryParams = useQueryParamsFromUrl\n ? searchParamsFromUrl\n : _initialQueryParams;\n\n if (useQueryParamsFromUrl && _initialQueryParams) {\n _initialQueryParams.forEach((value, key) => {\n if (!initialQueryParams?.getAll(key)?.some((v) => v === value)) {\n initialQueryParams?.append(key, value);\n }\n });\n }\n\n if (initialQueryParams) {\n const nextSearchParams = new URLSearchParams(initialQueryParams);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n\n if (!initialQueryParams.has('hits')) {\n initialQueryParams.set('hits', '30');\n }\n if (!initialQueryParams.has('sort')) {\n initialQueryParams.set('sort', 'published-desc');\n }\n\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n\n setQueryFilter({\n searchParams: initialQueryParams,\n });\n if (useQueryParamsFromUrl) {\n replaceState(`${window.location.pathname}${nextSearch}`);\n }\n }\n setInitialize(true);\n }\n },\n [initialize]\n );\n\n const value = {\n loading,\n error,\n response,\n documents,\n initialFacets,\n queryFilter,\n onFilterUpdate,\n onLoadMore,\n onInitialize,\n };\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;\n};\n\nexport default SearchProvider;\n", "export const getUrlSearchParamsFromUrl = () => new URLSearchParams(window.location.search);\n", "import styled from 'styled-components';\n\nconst Root = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n background-color: ${(props) => props.theme.color.bg};\n color: ${(props) => props.theme.color.textDark};\n font-size: 1rem;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n *,\n *:before,\n *:after {\n box-sizing: border-box;\n }\n\n a img {\n border: 0;\n }\n`;\n\nexport default Root;\n", "import React from 'react';\nimport { SettingsContext } from './SettingsContext';\nimport { EcomSettings } from '../../providers/WaykeProvider';\n\ninterface SettingsProps {\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n children: React.ReactNode;\n}\n\nconst SettingsProvider = ({\n googleMapsApiKey,\n googleMapsMarker,\n ecomSettings,\n children,\n}: SettingsProps) => (\n <SettingsContext.Provider value={{ ecomSettings, googleMapsApiKey, googleMapsMarker }}>\n {children}\n </SettingsContext.Provider>\n);\n\nexport default SettingsProvider;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\nimport useFetch from '../../hooks/useFetch';\nimport { RelatedSearchContext } from './RelatedSearchContext';\n\ninterface RelatedSearchProviderProps {\n url: string;\n urlMlt?: string;\n apiKey?: string;\n children: React.ReactNode;\n}\n\nconst RelatedSearchProvider = ({ url, urlMlt, apiKey, children }: RelatedSearchProviderProps) => {\n const [queryFilter, setQueryFilter] = useState<QueryFilter>();\n\n const query = queryFilter?.searchParams.toString();\n const {\n loading,\n data: response,\n error,\n } = useFetch<Search>(\n `${urlMlt || url}${query ? `?${query}` : ''}`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !queryFilter\n );\n\n const fetchRelated = useCallback(\n (searchParams: URLSearchParams) =>\n setQueryFilter({\n searchParams,\n }),\n []\n );\n\n const value = {\n moreLikeThisUrl: !!urlMlt,\n loading,\n error,\n response,\n queryFilter,\n fetchRelated,\n };\n\n return <RelatedSearchContext.Provider value={value}>{children}</RelatedSearchContext.Provider>;\n};\n\nexport default RelatedSearchProvider;\n", "import React, { useCallback } from 'react';\nimport { CentralStorageContext } from './CentralStorageContext';\nimport useSessionStorage from '../../hooks/useSessionStorage';\n\ninterface CentralStorageProviderProps {\n children: React.ReactNode;\n}\n\nconst CentralStorageProvider = ({ children }: CentralStorageProviderProps) => {\n const { value, set, remove } = useSessionStorage('centralStorage');\n\n const setCentralStorageId = useCallback((id?: string) => (id ? set(id) : remove()), []);\n\n return (\n <CentralStorageContext.Provider value={{ centralStorageId: value, setCentralStorageId }}>\n {children}\n </CentralStorageContext.Provider>\n );\n};\n\nexport default CentralStorageProvider;\n", "import { useState, useCallback } from 'react';\n\nconst useSessionStorage = (key: string) => {\n const [value, setValue] = useState(sessionStorage.getItem(key));\n\n const set = useCallback(\n (v: string) => {\n sessionStorage.setItem(key, v);\n setValue(v);\n },\n [key]\n );\n\n const remove = useCallback(() => {\n sessionStorage.removeItem(key);\n setValue(null);\n }, [key]);\n\n const clear = useCallback(() => {\n sessionStorage.clear();\n setValue(null);\n }, [key]);\n\n return {\n value,\n set,\n remove,\n clear,\n };\n};\n\nexport default useSessionStorage;\n", "import React, { useCallback, useEffect, useMemo, useReducer } from 'react';\nimport usePrevious from '../../hooks/usePrevious';\n\nimport { PathContext, PathContextProps } from './PathContext';\nimport reducer, { initialState, SET_PATH } from './reducer';\n\nconst regexGuidAnyWhere =\n /(\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1}/g;\nconst POP_STATE = 'popstate';\n\ninterface PathProviderProps {\n children: React.ReactNode;\n}\n\nconst PathProvider = ({ children }: PathProviderProps) => {\n const [state, dispatch] = useReducer(reducer, initialState);\n const previousPath = usePrevious(state.path);\n\n useEffect(() => {\n const onPopState = () => {\n dispatch({ type: SET_PATH, path: window.location.pathname });\n };\n\n window.addEventListener(POP_STATE, onPopState);\n return () => {\n window.removeEventListener(POP_STATE, onPopState);\n };\n }, []);\n\n const pushState = useCallback((path: string) => {\n const h1 = window.location.hash;\n history.pushState(null, '', `${path}`);\n const h2 = window.location.hash;\n if (h1.localeCompare(h2) !== 0) {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n }\n dispatch({ type: SET_PATH, path });\n }, []);\n\n const replaceState = useCallback((path: string) => {\n const h1 = window.location.hash;\n history.replaceState(null, '', path);\n const h2 = window.location.hash;\n if (h1.localeCompare(h2) !== 0) {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n }\n dispatch({ type: SET_PATH, path });\n }, []);\n\n const id = useMemo(() => state.path.match(regexGuidAnyWhere)?.pop(), [state.path]);\n\n const value: PathContextProps = useMemo(\n () => ({\n ...state,\n previousPath,\n id,\n pushState,\n replaceState,\n }),\n [state]\n );\n\n return <PathContext.Provider value={value}>{children}</PathContext.Provider>;\n};\n\nexport default PathProvider;\n", "import { useRef, useEffect } from 'react';\n\nconst usePrevious = <T>(value: T) => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport default usePrevious;\n", "import { BaseAction } from '../../@types/action';\n\nexport const SET_PATH = 'SET_PATH';\ntype SET_PATH_TYPE = BaseAction<typeof SET_PATH> & {\n path: string;\n};\n\ntype PathAction = SET_PATH_TYPE;\n\ninterface PathState {\n path: string;\n}\n\nexport const initialState: PathState = {\n path: window.location.pathname,\n};\n\nconst pathReducer = (state: PathState, action: PathAction) => {\n const next = { ...state };\n switch (action.type) {\n case SET_PATH:\n next.path = action.path;\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default pathReducer;\n", "import React from 'react';\n\nimport WaykeProvider, { WaykeProviderProps } from '../providers/WaykeProvider';\nimport WaykeComposite, { WaykeCompositeProps } from './WaykeComposite';\n\nexport interface WaykeCompositeWithProviderProps {\n provider: WaykeProviderProps;\n composite?: WaykeCompositeProps;\n}\n\nconst WaykeCompositeWithProvider = ({ provider, composite }: WaykeCompositeWithProviderProps) => (\n <WaykeProvider {...provider}>\n <WaykeComposite {...composite} />\n </WaykeProvider>\n);\n\nexport default WaykeCompositeWithProvider;\n", "import React, { useEffect } from 'react';\nimport useHashGuid from '../hooks/useHashGuid';\nimport PubSub from '../utils/pubsub/pubsub';\n\nimport WaykeSearch, { WaykeSearchProps } from './search/index';\nimport WaykeSearchItem, { WaykeSearchItemProps } from './searchItem/index';\nimport usePath from '../State/Path/usePath';\nimport useInitializeTranslation from '../hooks/useInitializeTranslation';\n\nexport type WaykeCompositeProps = Omit<WaykeSearchProps & WaykeSearchItemProps, 'id'>;\n\nconst WaykeComposite = ({\n marketCode,\n filterList,\n initialQueryParams,\n removeSearchBar,\n removeFilterOptions,\n disableResetScrollOnInit,\n placeholderImage,\n pathRoute,\n modifyDocumentTitleItem,\n modifyDocumentTitleSearch,\n displayBranchName,\n}: WaykeCompositeProps) => {\n const hashId = useHashGuid();\n const { id: pathId } = usePath();\n const initialized = useInitializeTranslation(marketCode);\n\n useEffect(() => {\n if (!pathRoute) {\n if (hashId) {\n PubSub.publish('HashRouteChange', hashId);\n } else {\n PubSub.publish('HashRouteChange');\n }\n }\n }, [hashId]);\n\n const id = pathId || hashId;\n\n if (!initialized) return null;\n\n return (\n <>\n {id ? (\n <WaykeSearchItem\n id={id}\n hashRoute={!pathRoute}\n disableResetScrollOnInit={disableResetScrollOnInit}\n placeholderImage={placeholderImage}\n pathRoute={pathRoute}\n modifyDocumentTitleItem={modifyDocumentTitleItem}\n displayBranchName={displayBranchName}\n />\n ) : (\n <WaykeSearch\n marketCode={marketCode}\n filterList={filterList}\n initialQueryParams={initialQueryParams}\n removeSearchBar={removeSearchBar}\n hashRoute={!pathRoute}\n placeholderImage={placeholderImage}\n pathRoute={pathRoute}\n removeFilterOptions={removeFilterOptions}\n modifyDocumentTitleSearch={modifyDocumentTitleSearch}\n displayBranchName={displayBranchName}\n />\n )}\n </>\n );\n};\n\nexport default WaykeComposite;\n", "import { useState, useEffect } from 'react';\n\nconst regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst HASH_CHANGE = 'hashchange';\n\nconst getGuid = () => {\n const guid = window.location.hash.substr(1, window.location.hash.length);\n return regexGuid.test(guid) || !guid ? guid : undefined;\n};\n\nconst useHashGuid = () => {\n const [id, setId] = useState<string | undefined>(() => getGuid());\n const onHashChange = () => {\n const guid = window.location.hash.substr(1, window.location.hash.length);\n if (regexGuid.test(guid) || !guid) {\n setId(window.location.hash.substr(1, window.location.hash.length));\n } else {\n throw 'Invalid Guid';\n }\n };\n\n useEffect(() => {\n onHashChange();\n window.addEventListener(HASH_CHANGE, onHashChange);\n return () => {\n window.removeEventListener(HASH_CHANGE, onHashChange);\n };\n }, []);\n\n return id;\n};\n\nexport default useHashGuid;\n", "import React from 'react';\n\nimport GraphqlProvider from './graphqlProvider';\nimport Theme from './themeProvider';\nimport Root from '../components/Root/index';\n\nimport SettingsProvider from '../State/Settings/SettingsProvider';\nimport RelatedSearchProvider from '../State/RelatedSearch/RelatedSearchProvider';\nimport CentralStorageProvider from '../State/CentralStorage/CentralStorageProvider';\nimport PathProvider from '../State/Path/PathProvider';\n\nexport interface EcomSettings {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n}\n\nexport interface WaykeItemProviderSettings {\n url: string;\n urlMlt?: string;\n graphQlUrl: string;\n apiKey?: string;\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n}\n\nexport type WaykeItemProviderProps = WaykeItemProviderSettings & {\n children?: React.ReactNode;\n};\n\nconst WaykeItemProvider = ({\n url,\n urlMlt,\n apiKey,\n ecomSettings,\n graphQlUrl,\n googleMapsApiKey,\n googleMapsMarker,\n children,\n}: WaykeItemProviderProps) => (\n <PathProvider>\n <SettingsProvider\n googleMapsApiKey={googleMapsApiKey}\n googleMapsMarker={googleMapsMarker}\n ecomSettings={ecomSettings}\n >\n <CentralStorageProvider>\n <GraphqlProvider uri={graphQlUrl}>\n <RelatedSearchProvider url={url} urlMlt={urlMlt} apiKey={apiKey}>\n <Theme>\n <Root>{children}</Root>\n </Theme>\n </RelatedSearchProvider>\n </GraphqlProvider>\n </CentralStorageProvider>\n </SettingsProvider>\n </PathProvider>\n);\n\nexport default WaykeItemProvider;\n", "import WaykeSearch from './layouts/search/index';\nimport type { WaykeSearchProps } from './layouts/search/index';\nimport WaykeSearchItem from './layouts/searchItem/index';\nimport type { WaykeSearchItemProps } from './layouts/searchItem/index';\nimport WaykeProvider from './providers/WaykeProvider';\nimport type { WaykeProviderSettings } from './providers/WaykeProvider';\nimport WaykeComposite from './layouts/WaykeCompositeWithProvider';\nimport type { WaykeCompositeWithProviderProps } from './layouts/WaykeCompositeWithProvider';\nimport SearchBar from './components/SearchBar/index';\nimport WaykeThemeProvider from './providers/themeProvider';\nimport WaykeItemProvider from './providers/WaykeItemProvidet';\nimport type { WaykeItemProviderSettings } from './providers/WaykeItemProvidet';\nimport WaykePubSub from './utils/pubsub/pubsub';\nimport type { EventSubscriptions } from './utils/pubsub/pubsub';\nimport type { SearchFilterTypes, SearchFilterNameTypes } from './@types/filter';\n\nimport type {\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnInit,\n EventEcomOnUser,\n EventEcomOnExit,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n} from './utils/pubsub/Events';\n\nexport {\n WaykeProvider,\n WaykeItemProvider,\n WaykeSearch,\n WaykeSearchItem,\n SearchBar,\n WaykeThemeProvider,\n WaykeItemProviderSettings,\n WaykePubSub,\n WaykeCompositeWithProviderProps,\n WaykeProviderSettings,\n WaykeSearchProps,\n WaykeSearchItemProps,\n SearchFilterTypes,\n SearchFilterNameTypes,\n EventSubscriptions,\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnInit,\n EventEcomOnUser,\n EventEcomOnExit,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n};\n\nexport default WaykeComposite;\n"],
5
- "mappings": "kyBAAA,IAAAA,EAAuD,gBCAvD,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BCAnB,IAAMC,EAAU,CACd,MAAO,OACP,MAAO,OACP,KAAM,OACN,UAAW,UACX,qBAAsB,yBACtB,gBAAiB,UACjB,SAAU,UACV,KAAM,UACN,GAAI,CACF,WAAY,UACZ,MAAO,UACP,SAAU,UACV,IAAK,UACL,YAAa,UACb,OAAQ,UACR,UAAW,SACb,CACF,EAEMC,GAAQ,CACZ,MAAO,CACL,GAAID,EAAQ,MACZ,KAAMA,EAAQ,KACd,OAAQA,EAAQ,UAChB,kBAAmBA,EAAQ,qBAC3B,WAAYA,EAAQ,gBACpB,OAAQA,EAAQ,KAChB,SAAUA,EAAQ,MAClB,gBAAiBA,EAAQ,SACzB,UAAWA,EAAQ,MACnB,aAAc,sBACd,WAAYA,EAAQ,KACpB,aAAcA,EAAQ,SACtB,YAAaA,EAAQ,SACrB,GAAI,CACF,cAAeA,EAAQ,GAAG,WAC1B,SAAUA,EAAQ,GAAG,MACrB,aAAcA,EAAQ,GAAG,YACzB,QAASA,EAAQ,GAAG,OACpB,cAAeA,EAAQ,GAAG,SAC1B,SAAUA,EAAQ,GAAG,IACrB,UAAWA,EAAQ,GAAG,SACxB,CACF,EACA,WAAY,CACV,GAAI,4BACJ,KAAM,4BACN,GAAI,4BACJ,KAAM,4BACN,GAAI,6BACJ,KAAM,4BACR,EACA,KAAM,CACJ,SAAU,CACR,MAAO,6CACP,SAAU,gDACV,OAAQ,8CACR,QAAS,8CACX,CACF,EACA,UAAW,CACT,SAAU,MACV,YAAa,OACb,kBAAmB,QACrB,CACF,EAGOE,GAAQD,GCnER,IAAME,EAAO,CAACC,EAAa,IAAM,CACtC,IAAMC,EAAW,WAAWC,GAAM,UAAU,QAAQ,EACpD,MAAO,GAAGF,EAAaC,CAAQ,IACjC,EFDO,IAAME,GAAU,GAAAC,QAAO;AAAA;AAAA,eAEdC,GAAUA,EAAM,MAAM,UAAU,iBAAiB;AAAA;AAAA,eAElDC,EAAK,CAAC,CAAC;AAAA;AAAA,IAEjBD,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,iBACzBC,EAAK,CAAC,CAAC;AAAA;EDHxB,IAAMC,GAAY,CAAC,CAAE,SAAAC,CAAS,IAAa,GAAAC,QAAA,cAACC,GAAA,KAASF,CAAS,EAEvDG,GAAQJ,GIVf,IAAAK,GAA4B,4BAIrB,IAAMC,GAAO,GAAAC,QAAO,MAWdC,GAAc,GAAAD,QAAO;AAAA,mBACfE,EAAK,CAAC,CAAC;AAAA;AAAA,IAEtB,CAAC,CAAE,OAAAC,CAAO,IACVA,GACA;AAAA,iBACaD,EAAK,CAAC,CAAC;AAAA,0BACGE,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,KAExD;AAAA;AAAA,IAED,CAAC,CAAE,MAAAC,CAAM,IACTA,GACA;AAAA,uBACmBH,EAAK,CAAC,CAAC;AAAA,KACzB;AAAA;AAAA,IAED,CAAC,CAAE,OAAAC,EAAQ,MAAAE,CAAM,IACjBF,GACAE,GACA;AAAA,iBACaH,EAAK,CAAC,CAAC;AAAA;AAAA,KAEnB;AAAA;AAAA,IAED,CAAC,CAAE,UAAAI,CAAU,IACbA,GACA;AAAA;AAAA,KAEC;EC5CL,IAAAC,GAAmC,gBCAnC,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO,MAEjBC,GAAS,GAAAD,QAAO;AAAA;AAAA,mBAEVE,EAAK,CAAC,CAAC;AAAA,EAGbC,GAAc,GAAAH,QAAO;AAAA;AAAA,EAIrBI,GAAa,GAAAJ,QAAO;AAAA;AAAA,EAIpBK,GAAO,GAAAL,QAAO,MAEdM,GAAS,GAAAN,QAAO;AAAA,gBACbE,EAAK,CAAC,CAAC;AAAA;AAAA,EAIVK,GAAiB,GAAAP,QAAO;AAAA;AAAA;AAAA,EAKxBQ,GAAe,GAAAR,QAAO;AAAA,gBACnBE,EAAK,CAAC,CAAC;AAAA,EAGVO,GAAc,GAAAT,QAAO;AAAA,WACtBU,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;ECpCvD,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA,EAIjBC,GAAc,GAAAD,QAAO;AAAA,mBACfE,EAAK,GAAG,CAAC;AAAA;AAAA,EAIfC,GAAM,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA,sBAIHI,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,EAGhDC,GAAY,GAAAL,QAAO,IAAI,MAAM,KAAO,CAC/C,KAAM,aACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKqBI,GAAUA,EAAM,MAAM,MAAM,QAAQ;EDxB3D,IAAAE,GAA+B,mBAOzBC,GAAc,CAAC,CAAE,aAAAC,EAAc,SAAAC,CAAS,IAAa,CACzD,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAAYH,EAAeC,EAAY,IAE7C,OACE,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACEJ,EAAE,+BAAgC,CAAE,QAASF,EAAc,MAAOC,CAAS,CAAC,CAC/E,EACA,GAAAG,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CACC,MAAO,CAAE,MAAO,GAAGL,CAAQ,GAAI,EAC/B,gBAAeH,EACf,gBAAe,EACf,gBAAeC,EACjB,CACF,CACF,CAEJ,EAEOQ,GAAQV,GE9Bf,IAAAW,GAA4B,4BCD5B,IAAAC,GAAmB,4BAENC,GAAmB,GAAAC,QAAO;AAAA;AAAA,EAI1BC,GAAuB,GAAAD,QAAO;AAAA;AAAA,EAI9BE,GAAqB,GAAAF,QAAO,KAAK,MAAM,KAAO,CACzD,UAAW,yCACb,EAAE,IAEWG,GAAkB,GAAAH,QAAO,KAAK,MAAM,KAAO,CACtD,UAAW,gCACb,EAAE,IDVK,IAAMI,EAAc,GAAAC,QAAO,OAAO,MAAM,KAAO,CACpD,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCIC,MAAa,GAAAD,SAAOD,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA,aAKxBG,EAAK,IAAI,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAeTC,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAiBxCA,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,oBAC1CA,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,aAC7CA,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA,IAGlD,CAAC,CAAE,UAAAC,CAAU,IACbA,GACA;AAAA;AAAA;AAAA,KAGC;AAAA;AAAA,IAED,CAAC,CAAE,YAAAC,CAAY,IACfA,GACA;AAAA,gBACaF,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA,KACvD;AAAA;AAAA,IAEAA,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,eAC3BD,EAAK,IAAI,CAAC,IAAIA,EAAK,GAAG,CAAC;AAAA;AAAA;AAAA,EAKzBI,MAAgB,GAAAN,SAAOC,EAAU,EAAE,MAAM,KAAO,CAC3D,UAAW,yDACb,EAAE,IAEWM,MAAkB,GAAAP,SAAOC,EAAU,EAAE,MAAM,KAAO,CAC7D,UAAW,2DACb,EAAE;AAAA,sBACqBE,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,WACjDA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAGnCK,EAAgB,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKjBE,EAAK,EAAG,CAAC;AAAA;AAAA,EAIfO,MAAc,GAAAT,SAAOD,CAAW,EAAE,MAAM,KAAO,CAC1D,UAAW,2DACb,EAAE;AAAA;AAAA;AAAA,aAGWG,EAAK,GAAG,CAAC;AAAA,YACVA,EAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlBQ,EAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAWKP,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBlDQ,KAAe,GAAAX,SAAOD,CAAW,EAAE,MAAM,KAAO,CAC3D,UAAW,8DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAOYI,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,IAG9C,CAAC,CAAE,OAAAS,CAAO,IACVA,GACA;AAAA;AAAA,KAEC;AAAA,EAGQC,MAAmB,GAAAb,SAAOD,CAAW,EAAE,MAAM,KAAO,CAC/D,UAAW,2DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUWe,MAAoB,GAAAd,SAAOD,CAAW,EAAE,MAAM,KAAO,CAChE,UAAW,8DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAOYI,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,EAI5CY,MAAsB,GAAAf,SAAOD,CAAW,EAAE,MAAM,KAAO,CAClE,UAAW,8DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EEzNF,IAAAiB,GAAuB,gBCAvB,IAAAC,GAA4B,4BCA5B,IAAAC,GAA0B,uBAEbC,GAAc;AAAA;AAAA;AAAA;AAAA,EAMdC,GAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUTC,GAAS;AAAA;AAAA;AAAA;EDbf,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,WAGnBC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,eAIJC,EAAM;AAAA,EAWRC,GAAU,GAAAH,QAAO,IAAI,MAAM,KAAO,CAC7C,UAAW,0CACX,KAAM,QACR,EAAE;AAAA,IACE,CAAC,CAAE,OAAAI,CAAO,IACVA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKIL,EAAO;AAAA;AAAA;AAAA;AAAA,KAIV;AAAA;AAAA,IAED,CAAC,CAAE,OAAAM,CAAO,IACVA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA,KAKC;EEhDL,IAAAC,GAAmB,4BAGNC,GAAS,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EHC7B,IAAAC,GAA+B,mBAOzBC,GAAS,CAAC,CAAE,OAAAC,EAAQ,OAAAC,CAAO,IAAa,CAC5C,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,iBAACC,GAAA,CAAQ,OAAQH,EAAQ,OAAQC,GAC/B,iBAACG,GAAA,CAAQ,cAAY,OAAO,EAC5B,iBAACC,GAAA,KAAQH,EAAE,eAAe,CAAE,CAC9B,CAEJ,EAEOI,GAAQP,GIrBf,IAAAQ,GAAoC,cACpCC,GAAmB,qBCDZ,IAAMC,GAAe,eACfC,GAAe,cACfC,GAAY,WACZC,GAAe,cACfC,GAAS,SACTC,GAAQ,QACRC,GAAoB,mBACpBC,GAAU,qBACVC,GAAgB,eAChBC,GAAQ,QACRC,GAAU,UACVC,GAAa,YACbC,GAAgB,eAChBC,GAAyB,uBACzBC,GAAuB,oBAEvBC,GAAc,CAAE,YAAa,MAAO,IAAK,SAAU,EACnDC,GAAc,CAAE,YAAa,QAAS,IAAK,SAAU,EACrDC,GAAa,CAAE,YAAa,SAAO,IAAK,SAAU,EAClDC,GAAe,CAAE,YAAa,SAAU,IAAK,SAAU,EACvDC,GAAa,CAAE,YAAa,SAAO,IAAK,SAAU,EAClDC,GAAY,CAAE,YAAa,SAAO,IAAK,SAAU,EACjDC,GAAc,CAAE,YAAa,OAAQ,IAAK,SAAU,EACpDC,GAAc,CAAE,YAAa,UAAQ,IAAK,SAAU,EACpDC,GAAe,CAAE,YAAa,SAAU,IAAK,SAAU,EACvDC,GAAe,CAAE,YAAa,MAAO,IAAK,SAAU,EACpDC,GAAe,CAAE,YAAa,OAAQ,IAAK,SAAU,EACrDC,GAAc,CAAE,YAAa,QAAS,IAAK,SAAU,EAOrDC,GACX,877ED/BK,IAAMC,GAAoBC,GAC/BA,GAAU,KAECC,EAAkB,CAACD,EAAeE,EAAI,EAAGC,EAAI,EAAGC,EAAI,IAAKC,EAAI,MAAQ,CAChF,GAAIL,GAAU,KACZ,OAAO,KAGT,IAAMM,EAAK,cAAcH,GAAK,CAAC,MAAMD,EAAI,EAAI,MAAQ,GAAG,IAClDK,EAAMP,EAAM,QAAQ,KAAK,IAAI,EAAG,CAAC,CAACE,CAAC,CAAC,EAE1C,OAAQG,EAAIE,EAAI,QAAQ,IAAKF,CAAC,EAAIE,GAAK,QAAQ,IAAI,OAAOD,EAAI,GAAG,EAAG,KAAKF,GAAK,GAAG,EAAE,CACrF,EAsDO,IAAMI,GAAiB,CAC5B,UAAW,EACX,SAAU,EAEV,OAAQ,CAACC,EAAsBC,IAAmB,CAChD,IAAMC,EAAO,IAAI,KAAKF,CAAK,EAC3B,OAAQC,EAAQ,CACd,KAAKF,GAAe,UAClB,SAAO,GAAAI,QAAUD,EAAM,YAAa,CAAE,OAAQ,KAAG,CAAC,EACpD,KAAKH,GAAe,SAClB,SAAO,GAAAI,QAAUD,EAAM,cAAe,CAAE,OAAQ,KAAG,CAAC,EACtD,QACE,SAAO,GAAAC,QAAUD,EAAM,mBAAoB,CAAE,OAAQ,KAAG,CAAC,CAC7D,CACF,CACF,EErFA,IAAAE,GAA2B,WCA3B,IAAAC,GAA8B,WAgBjBC,MAAgB,kBAAkC,CAC7D,QAAS,GACT,MAAO,GACP,SAAU,OACV,UAAW,OACX,cAAe,OACf,YAAa,CAAE,aAAc,IAAI,eAAkB,EACnD,eAAiBC,GAAM,CAAC,EACxB,WAAY,IAAM,CAAC,EACnB,aAAeA,GAAM,CAAC,CACxB,CAAC,EDvBD,IAAMC,GAAY,OAAM,eAAWC,EAAa,EAEzCC,GAAQF,GELf,IAAAG,GAAkB,gBCAlB,IAAAC,GAAmB,4BAInB,IAAMC,GAAW,WAEJC,GAAU,GAAAC,QAAO;AAAA;AAAA,EAIjBC,GAAS,GAAAD,QAAO,OAAO,MAAM,KAAO,CAC/C,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBASsBF,EAAQ,MAAMI,EAAK,CAAC,CAAC;AAAA;AAAA,WAEjCC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBnCC,GAAS,GAAAJ,QAAO;AAAA,WACjBG,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAGnCE,GAAO,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKZF,EAAQ;ECpDvB,IAAAQ,EAAuB,gBACvBC,GAA4B,4BAQtBC,GAAO,GAAAC,QAAO,IAAI,MAAM,KAAO,CACnC,MAAO,4BACT,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOE,CAAC,CAAE,MAAAC,CAAM,IACTA,GACA;AAAA;AAAA,KAEC;AAAA,EAMQC,GAAW,CAAC,CAAE,MAAAD,CAAM,IAC/B,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,mqBAAmqB,CAC7qB,EAGWE,GAAa,CAAC,CAAE,MAAAF,CAAM,IACjC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,iOAAiO,CAC3O,EAGWG,GAAkB,CAAC,CAAE,MAAAH,CAAM,IACtC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,yCAAyC,CACnD,EAGWI,GAAkB,CAAC,CAAE,MAAAJ,CAAM,IACtC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,0CAA0C,CACpD,EAGWK,GAAmB,CAAC,CAAE,MAAAL,CAAM,IACvC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,2CAA2C,CACrD,EAGWM,GAAY,CAAC,CAAE,MAAAN,CAAM,IAChC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,+HAA+H,CACzI,EAGWO,GAAY,CAAC,CAAE,MAAAP,CAAM,IAChC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,gKAAgK,CAC1K,EAGWQ,GAAa,CAAC,CAAE,MAAAR,CAAM,IACjC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,0OAA0O,CACpP,EAGWS,GAAwB,CAAC,CAAE,MAAAT,CAAM,IAC5C,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,2iBAA2iB,CACrjB,EAGWU,GAA0B,CAAC,CAAE,MAAAV,CAAM,IAC9C,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,woBAAwoB,CAClpB,EAGWW,GAAY,CAAC,CAAE,MAAAX,CAAM,IAChC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QACC,EAAE,yTACF,SAAS,UACT,SAAS,UACX,CACF,EF1FF,IAAAY,GAA+B,mBAczBC,GAAa,CAAC,CAAE,MAAAC,EAAO,QAAAC,EAAS,SAAAC,EAAU,KAAAC,CAAK,IAAuB,CAC1E,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,MAAOP,EACP,SAAUE,EACV,MAAOE,EAAE,wBAAwB,EACjC,aAAYA,EAAE,wBAAwB,GAErCH,EAAQ,IAAKO,GACZ,GAAAH,QAAA,cAACI,GAAA,CAAO,IAAKD,EAAO,MAAO,MAAOA,EAAO,OACtCA,EAAO,aAAeA,EAAO,MAC7BL,EAAO,IAAIA,CAAI,GAAK,EACvB,CACD,CACH,EACA,GAAAE,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,CAAgB,MAAK,GAAC,CACzB,CACF,CAEJ,EAEOC,GAAQb,GG3Cf,IAAAc,GAAoB,kBAEdC,GAAwB,CAC5B,aAAc,gBACd,cAAe,iBACf,SAAU,YACV,UAAW,aACX,SAAU,YACV,UAAW,aACX,WAAY,cACZ,YAAa,cACf,EAaaC,GAAsCC,GAAgD,CACjG,OAAQA,EAAK,CACX,KAAKF,GAAsB,aACzB,OAAO,GAAAG,QAAQ,EAAE,iCAAiC,EACpD,KAAKH,GAAsB,cACzB,OAAO,GAAAG,QAAQ,EAAE,kCAAkC,EACrD,KAAKH,GAAsB,SACzB,OAAO,GAAAG,QAAQ,EAAE,6BAA6B,EAChD,KAAKH,GAAsB,UACzB,OAAO,GAAAG,QAAQ,EAAE,8BAA8B,EACjD,KAAKH,GAAsB,SACzB,OAAO,GAAAG,QAAQ,EAAE,6BAA6B,EAChD,KAAKH,GAAsB,UACzB,OAAO,GAAAG,QAAQ,EAAE,8BAA8B,EACjD,KAAKH,GAAsB,WACzB,OAAO,GAAAG,QAAQ,EAAE,+BAA+B,EAClD,KAAKH,GAAsB,YACzB,OAAO,GAAAG,QAAQ,EAAE,gCAAgC,EACnD,QACE,OAAOD,CACX,CACF,EjBpBA,IAAME,GAAS,CAAC,CAAE,SAAAC,CAAS,IAAa,CACtC,GAAM,CAAE,QAAAC,EAAS,SAAAC,EAAU,UAAAC,EAAW,YAAAC,EAAa,WAAAC,EAAY,eAAAC,CAAe,EAAIC,GAAU,EAEtFC,KAAqB,gBACxBC,GAA4CH,EAAeG,EAAE,cAAc,KAAK,EACjF,CAAC,CACH,EAEMC,EAAoBP,GAAW,QAAU,EACzCQ,EAAeT,GAAU,aAAa,cAAgB,EACtDU,EAAe,CAAC,CAACR,GAAa,aAE9BS,EAAqBX,GAAU,aAAa,YAAY,KAAMY,GAAMA,EAAE,QAAQ,GAAG,MACjFC,EAAcb,GAAU,aAAa,YACxC,OAAQY,GAAMA,EAAE,cAAgB,WAAW,EAC3C,IACEE,IAAqB,CACpB,MAAOA,EAAG,MACV,YAAaC,GAAmCD,EAAG,WAAW,CAChE,EACF,EAEF,OAAIf,GAAW,CAACW,EACP,GAAAM,QAAA,cAACC,GAAA,IAAO,EAGf,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,KAAa,GAAGC,EAAgBb,CAAY,CAAC,IAC5CA,IAAiB,EAAI,MAAQ,OAC/B,EAAG,CACL,EACCI,GAAeF,GACd,GAAAK,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,CACC,MAAOb,EACP,QAASE,EACT,SAAUP,EACZ,CACF,CAEJ,EACA,GAAAU,QAAA,cAACS,GAAA,KAAM3B,CAAS,EAChB,GAAAkB,QAAA,cAACU,GAAA,KACC,GAAAV,QAAA,cAACW,GAAA,KACC,GAAAX,QAAA,cAACY,GAAA,CAAY,aAAcpB,EAAmB,SAAUC,EAAc,CACxE,EACCD,IAAsBC,GACrB,GAAAO,QAAA,cAACa,GAAA,KACC,GAAAb,QAAA,cAACc,GAAA,CACC,SAAU/B,EACV,QAASI,EACT,MAAM,YACN,aAAW,aAEX,GAAAa,QAAA,cAACe,EAAA,KAAc,WAAS,CAC1B,CACF,CAEJ,CACF,CAEJ,EAEOC,GAAQnC,GkB1Ff,IAAAoC,GAA6C,gBCA7C,IAAAC,GAAmB,4BAKZ,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMfC,EAAK,GAAI,CAAC;AAAA,EAGTC,GAAO,GAAAF,QAAO;AAAA,aACdC,EAAK,EAAG,CAAC;AAAA,EAGTE,MAAS,GAAAH,SAAOI,CAAW;AAAA;AAAA;AAAA;AAAA,aAI3BH,EAAK,GAAG,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA,sBACVI,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAcpCA,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBpDC,GAAQ,GAAAN,QAAO;AAAA;AAAA,EAIfO,GAAY,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKjBC,EAAK,IAAK,CAAC;AAAA,iBACTA,EAAK,EAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQbO,GAAiB,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;ECxErC,IAAAS,GAAmC,gBCAnC,IAAAC,GAAuB,gBCAvB,IAAAC,GAAmB,4BCCnB,IAAAC,GAA4B,4BAW5B,IAAMC,GAAc,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC1C,UAAW,gCACb,EAAE;AAAA;AAAA,mBAEiBC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAItB,CAAC,CAAE,SAAAC,CAAS,IACZA,GACA;AAAA;AAAA,KAEC;AAAA,EAGQC,MAAK,GAAAH,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAIWC,MAAK,GAAAL,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAIWE,MAAK,GAAAN,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAIWG,MAAK,GAAAP,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAIWI,MAAK,GAAAR,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAYWK,GAAgB,GAAAT,QAAO,IAAI,MAAM,KAAO,CACnD,UAAW,gCACb,EAAE;AAAA;ED5DK,IAAMU,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,QACR,EAAE;AAAA;AAAA;AAAA,EAKWC,GAAU,GAAAD,QAAO,IAAI,MAAM,KAAO,CAC7C,cAAe,OACf,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOaE,EAAM;AAAA,EAGRC,GAAe,GAAAH,QAAO,QAAQ,MAAM,KAAO,CACtD,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAQqBI,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA,eAG1CC,EAAW;AAAA;AAAA,IAErBD,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnCA,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7BE,GAAS,GAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMhBO,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cASNA,EAAK,CAAC,CAAC;AAAA;AAAA,QAEZH,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,QAClCA,GAAUA,EAAM,MAAM,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAMzCI,GAAU,GAAAR,QAAO;AAAA;AAAA;AAAA,IAG1BS,EAAE;AAAA;AAAA;AAAA,EAKOC,GAAQ,GAAAV,QAAO;AAAA;AAAA,YAEhBO,EAAK,EAAE,CAAC;AAAA,kBACFA,EAAK,CAAC,CAAC;AAAA,EAGZI,MAAW,GAAAX,SAAOY,CAAW;AAAA;AAAA;AAAA,aAG7BL,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAaKH,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiB9CS,GAAO,GAAAb,QAAO;AAAA;AAAA;AAAA;AAAA,aAIdO,EAAK,CAAC,CAAC;AAAA,EAGPO,GAAS,GAAAd,QAAO;AAAA;AAAA;AAAA,aAGhBO,EAAK,CAAC,CAAC;AAAA,0BACOH,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,EAGhDW,GAAe,GAAAf,QAAO,IAAI,MAAM,KAAO,CAClD,KAAM,OACR,EAAE;AAAA;AAAA;AAAA,YAGUO,EAAK,GAAI,CAAC;AAAA,EAGTS,GAAmB,GAAAhB,QAAO;AAAA;AAAA,aAE1BO,EAAK,EAAG,CAAC;AAAA;AAAA,IAElBK,CAAW;AAAA,eACAL,EAAK,IAAI,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;EExJpC,IAAAU,GAAA,GAAAC,GAAAD,GAAA,mBAAAE,KAAO,IAAMA,GAAgB,iBCA7B,IAAAC,GAAuB,gBAMjBC,GAAgB,CAAC,CAAE,GAAAC,CAAG,IAAsB,iBAAC,OAAI,GAAIA,EAAI,EAExDC,GAAQF,GCRf,IAAAG,GAAkB,gBAClBC,GAAqB,oBAOfC,GAAS,CAAC,CAAE,GAAAC,EAAI,SAAAC,CAAS,IAAe,CAC5C,IAAMC,EAAK,GAAAC,QAAM,OAAO,SAAS,eAAeH,CAAE,GAAK,SAAS,cAAc,KAAK,CAAC,EACpF,GAAI,CAACE,EAAG,QACN,OAAO,KAGT,GAAM,CAAE,QAAAE,CAAQ,EAAIF,EAEd,CAACG,CAAO,EAAI,GAAAF,QAAM,SAAS,CAACC,EAAQ,aAAa,EAEvD,UAAAD,QAAM,UAAU,KACVE,IACFD,EAAQ,GAAKJ,EACT,SAAS,MACX,SAAS,KAAK,YAAYI,CAAO,GAG9B,IAAM,CACPC,GAAWD,EAAQ,eACrBA,EAAQ,cAAc,YAAYA,CAAO,CAE7C,GACC,CAACJ,CAAE,CAAC,EAEA,GAAAM,QAAS,aAAaL,EAAUG,CAAO,CAChD,EAEOG,GAAQ,GAAAJ,QAAM,KAAcJ,EAAM,ELnBzC,IAAAS,GAA+B,mBAUzBC,GAAQ,CAAC,CAAE,GAAAC,EAAI,MAAAC,EAAO,OAAAC,EAAQ,QAAAC,EAAS,SAAAC,CAAS,IAAoB,CACxE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,iBAACC,GAAA,CAAO,GAAIN,GAAMO,GAAgB,eAChC,iBAACC,GAAA,KACC,iBAACC,GAAA,CAAQ,MAAOJ,EAAE,kBAAkB,GAAK,GAAI,QAASF,EAAS,EAC/D,iBAACO,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,CAAG,SAAQ,IAAEZ,CAAM,CACtB,EACA,iBAACa,GAAA,KACC,iBAACC,GAAA,CAAS,MAAOV,EAAE,kBAAkB,GAAK,GAAI,QAASF,GACrD,iBAACa,GAAA,CAAW,MAAK,GAAC,CACpB,CACF,CACF,EACA,iBAACC,GAAA,KAAMb,CAAS,EACfF,GAAU,iBAACgB,GAAA,KAAQhB,CAAO,CAC7B,CACF,CACF,CAEJ,EAEOiB,GAAQpB,GMnDf,IAAAqB,GAA6C,gBCA7C,IAAAC,GAA4B,4BAKrB,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA,YAGfC,EAAK,EAAE,CAAC;AAAA;AAAA,EAIPC,MAAS,GAAAF,SAAOG,CAAW;AAAA;AAAA;AAAA;AAAA,aAI3BF,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,EAKPG,GAAQ,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA,EAMfK,GAAU,GAAAL,QAAO;AAAA;AAAA,EAIjBM,GAAY,GAAAN,QAAO,IAAI,MAAM,KAAO,CAC/C,UAAW,uCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,eAKaC,EAAK,IAAK,CAAC;AAAA,iBACTA,EAAK,EAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAObM,GAAiB,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA,EAMxBQ,GAAO,GAAAR,QAAO;AAAA;AAAA;AAAA,kBAGTC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMdA,EAAK,EAAE,CAAC;AAAA,cACLA,EAAK,EAAE,CAAC;AAAA;AAAA,aAETA,EAAK,EAAE,CAAC;AAAA;AAAA,wBAEIQ,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMvDP,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAOGQ,GAAO,GAAAV,QAAO;AAAA;AAAA,oBAEPC,EAAK,CAAC,CAAC;AAAA,EAOdU,GAAO,GAAAX,QAAO;AAAA;AAAA,4BAEES,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA,IAG3D,CAAC,CAAE,OAAAG,CAAO,IACVA,GACA;AAAA,QACIF,EAAI;AAAA;AAAA;AAAA;AAAA,QAIJF,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA,KAKP;ED3FL,IAAAK,GAA+B,mBAalBC,GAAgB,CAAC,CAAE,QAAAC,EAAS,SAAAC,EAAU,YAAAC,EAAa,SAAAC,CAAS,IAAsB,CAC7F,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAQC,CAAS,KAAI,aAASH,GAAY,EAAK,EAChDI,KAAiB,gBAAY,IAAMD,EAAU,CAACD,CAAM,EAAG,CAACA,CAAM,CAAC,EAErE,OACE,GAAAG,QAAA,cAACC,GAAA,CAAK,OAAQJ,GACZ,GAAAG,QAAA,cAACE,GAAA,CAAO,QAASH,EAAgB,MAAOH,EAAE,iBAAiB,GAAK,IAC9D,GAAAI,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CACC,UAAWV,GAAeA,EAAc,EAAI,iCAAmC,IAE9EF,CACH,EACCE,GAAeA,EAAc,GAC5B,GAAAM,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KAAgBZ,CAAY,CAC/B,CAEJ,EACA,GAAAM,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,CAAgB,MAAK,GAAC,CACzB,CACF,EACA,GAAAR,QAAA,cAACS,GAAA,KAAMhB,CAAS,CAClB,CAEJ,EAEMiB,GAAY,CAAC,CAAE,SAAAjB,CAAS,IAAkB,GAAAO,QAAA,cAACW,GAAA,KAAMlB,CAAS,EAEzDmB,GAAQF,GE1Df,IAAAG,GAAmB,4BAIZ,IAAMC,EAAS,GAAAC,QAAO;AAAA;AAAA,kBAEXC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZC,EAAa,GAAAF,QAAO;AAAA;AAAA,kBAEfC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZE,GAAc,GAAAH,QAAO;AAAA;AAAA,kBAEhBC,EAAK,CAAC,CAAC;AAAA;EClBzB,IAAAG,GAAkB,gBCAlB,IAAAC,GAAwD,gBCAxD,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAO,GAAAC,QAAO,GAAG,MAAM,KAAO,CACzC,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA,YAGUC,EAAK,EAAE,CAAC;AAAA;AAAA;AAAA,EAKPC,GAAO,GAAAF,QAAO;AAAA,IACvBD,EAAI;AAAA,oBACYE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,EAKdE,MAAS,GAAAH,SAAOI,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3BH,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMPA,EAAK,CAAC,CAAC;AAAA,cACNA,EAAK,CAAC,CAAC;AAAA;AAAA,wBAEII,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA,EAKlDC,GAAa,GAAAN,QAAO,IAAI,MAAM,KAAO,CAChD,UAAW,yCACb,EAAE;AAAA;AAAA,SAEOC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,WAKLA,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,eAEJA,EAAK,GAAG,CAAC;AAAA,EAGXM,GAAc,GAAAP,QAAO;AAAA,kBAChBC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGrBE,EAAM;AAAA,4BACkBF,EAAK,EAAG,CAAC;AAAA;ED7CrC,IAAMO,GAAgB,CAAC,CAAE,MAAAC,EAAO,QAAAC,EAAS,OAAAC,EAAQ,MAAAC,CAAM,IACrD,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAO,QAASL,GACdC,GAAU,GAAAE,QAAA,cAACG,GAAA,KAAYJ,EAAQ,GAAAC,QAAA,cAACI,GAAA,CAAU,MAAK,GAAC,EAAK,GAAAJ,QAAA,cAACK,GAAA,CAAU,MAAK,GAAC,CAAG,EAC1E,GAAAL,QAAA,cAACM,GAAA,CACC,UAAWR,EAAS,4DAA8D,IAEjFF,CACH,CACF,CACF,EAGIW,GAAY,CAAC,CAAE,MAAAC,EAAO,MAAAT,CAAM,IAC3BS,GAAO,OAKV,GAAAR,QAAA,cAACS,GAAA,KACED,EAAM,IAAKE,GACV,GAAAV,QAAA,cAACL,GAAA,CACC,IAAKe,EAAK,MACV,MAAOA,EAAK,MACZ,QAASA,EAAK,QACd,OAAQA,EAAK,OACb,MAAOX,EACT,CACD,CACH,EAdO,KAkBJY,GAAQJ,GElDf,IAAAK,GAAkB,gBCAlB,IAAAC,GAAmB,4BAENC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;EDM9B,IAAMC,GAAc,CAAC,CAAE,SAAAC,CAAS,IAAc,GAAAC,QAAA,cAACC,GAAA,KAASF,CAAS,EAE1DG,GAAQJ,GHAf,IAAMK,GAAiB,CAAC,CAAE,MAAAC,CAAM,IAA2B,CACzD,GAAM,CAAE,QAAAC,EAAS,MAAAC,EAAO,eAAAC,CAAe,EAAIC,GAAU,EAC/C,CAACC,EAAUC,CAAW,KAAI,aAAqC,KACrE,cAAU,IAAM,CACdA,EAAY,MAAS,CACvB,EAAG,CAACN,EAAOE,CAAK,CAAC,EAEjB,IAAMK,KAAU,gBACbC,GAAmB,CACbP,IACHK,EAAY,CACV,GAAGD,EACH,CAACG,EAAE,WAAW,EAAG,CAACA,EAAE,QACtB,CAAC,EACDL,EAAeK,EAAE,KAAK,EAE1B,EACA,CAACP,CAAO,CACV,EAEA,OACE,GAAAQ,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,MAAOX,EAAM,QACV,KAAK,CAACY,EAAGC,IAAMD,EAAE,YAAY,cAAcC,EAAE,WAAW,CAAC,EACzD,IAAKL,IAAO,CACX,MAAOA,EAAE,YACT,QAAS,IAAMD,EAAQC,CAAC,EACxB,OAAQH,IAAWG,EAAE,WAAW,IAAM,OAAYH,EAASG,EAAE,WAAW,EAAIA,EAAE,QAChF,EAAE,EACN,CACF,CAEJ,EAEOM,GAAQf,GK7Cf,IAAAgB,GAAwD,gBCAxD,IAAAC,GAAkB,gBCAlB,IAAAC,GAA4B,4BAKrB,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAKfC,EAAK,IAAI,CAAC;AAAA,EAGTC,GAAO,GAAAF,QAAO;AAAA;AAAA;AAAA;AAAA,aAIdC,EAAK,GAAG,CAAC;AAAA,EAGTE,MAAS,GAAAH,SAAOI,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkB3BC,GAAQ,GAAAL,QAAO;AAAA;AAAA,WAEjBC,EAAK,IAAI,CAAC;AAAA,YACTA,EAAK,IAAI,CAAC;AAAA;AAAA,WAEVK,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAc1CH,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,CAAC,CAAE,OAAAI,CAAO,IACVA,GACA;AAAA;AAAA;AAAA;AAAA,KAIC;AAAA;AAAA,IAED,CAAC,CAAE,UAAAC,CAAU,IACbA,GACA;AAAA;AAAA,KAEC;AAAA,EAGQC,GAAQ,GAAAT,QAAO;AAAA,gBACZC,EAAK,IAAI,CAAC;AAAA;ED9D1B,IAAMS,GAAkB,CAAC,CAAE,MAAAC,EAAO,IAAAC,EAAK,QAAAC,EAAS,OAAAC,EAAQ,SAAAC,EAAU,UAAAC,CAAU,IAExE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAO,QAASN,EAAS,SAAUE,EAAU,MAAOJ,EAAO,aAAYA,GACtE,GAAAM,QAAA,cAACG,GAAA,CACC,MAAO,CACL,gBAAiBR,EAAI,SAAW,EAAIA,EAAI,CAAC,EAAI,GAC7C,gBAAiBA,EAAI,OAAS,EAAI,mBAAmBA,EAAI,KAAK,CAAC,IAAM,EACvE,EACA,OAAQE,EACR,UAAWE,EACX,UAAWF,EAAS,0CAA4C,GAClE,EACA,GAAAG,QAAA,cAACI,GAAA,CACC,UAAWP,EAAS,4DAA8D,IAEjFH,CACH,CACF,CACF,EAIEW,GAAc,CAAC,CAAE,MAAAC,CAAM,IACtBA,EAKH,GAAAN,QAAA,cAACO,GAAA,KACED,EAAM,IAAKE,GACV,GAAAR,QAAA,cAACP,GAAA,CACC,IAAKe,EAAK,MACV,MAAOA,EAAK,MACZ,IAAKA,EAAK,IACV,QAASA,EAAK,QACd,OAAQA,EAAK,OACb,SAAUA,EAAK,SACf,UAAWA,EAAK,UAClB,CACD,CACH,EAhBO,KAoBJC,GAAQJ,GE/CR,IAAMK,GAA8BC,GAAwB,CACjE,OAAQA,EAAa,CACnB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,KAAKC,GAAW,YACd,OAAOA,GAAW,IACpB,KAAKC,GAAa,YAChB,OAAOA,GAAa,IACtB,KAAKC,GAAW,YACd,OAAOA,GAAW,IACpB,KAAKC,GAAU,YACb,OAAOA,GAAU,IACnB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,KAAKC,GAAa,YAChB,OAAOA,GAAa,IACtB,KAAKC,GAAa,YAChB,OAAOA,GAAa,IACtB,KAAKC,GAAa,YAChB,OAAOA,GAAa,IACtB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,QACE,MAAO,MACX,CACF,EHjCA,IAAMC,GAAmB,CAAC,CAAE,MAAAC,CAAM,IAA6B,CAC7D,GAAM,CAAE,QAAAC,EAAS,MAAAC,EAAO,eAAAC,CAAe,EAAIC,GAAU,EAC/C,CAACC,EAAUC,CAAW,KAAI,aAAqC,KAErE,cAAU,IAAM,CACdA,EAAY,MAAS,CACvB,EAAG,CAACN,EAAOE,CAAK,CAAC,EAEjB,IAAMK,KAAU,gBACbC,GAAmB,CACbP,IACHK,EAAY,CACV,GAAGD,EACH,CAACG,EAAE,WAAW,EAAG,CAACA,EAAE,QACtB,CAAC,EACDL,EAAeK,EAAE,KAAK,EAE1B,EACA,CAACP,CAAO,CACV,EAEA,OACE,GAAAQ,QAAA,cAACC,GAAA,CACC,MAAOV,EAAM,QACV,KAAK,CAACW,EAAGC,IAAMD,EAAE,YAAY,cAAcC,EAAE,WAAW,CAAC,EACzD,IAAKJ,IAAO,CACX,MAAOA,EAAE,YACT,QAAS,IAAMD,EAAQC,CAAC,EACxB,OAAQH,IAAWG,EAAE,WAAW,IAAM,OAAYH,EAASG,EAAE,WAAW,EAAIA,EAAE,SAC9E,IAAK,CAACK,GAA2BL,EAAE,WAAW,CAAC,CACjD,EAAE,EACN,CAEJ,EAEOM,GAAQf,GI9Cf,IAAAgB,GAAwD,gBCAxD,IAAAC,EAAwD,gBACxDC,GAA8C,2BCD9C,IAAAC,GAAmB,4BAIZ,IAAMC,GAAY,GAAAC,QAAO;AAAA;AAAA;AAAA,gBAGhBC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIVC,GAAgB,GAAAF,QAAO;AAAA;AAAA,WAExBG,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW1CC,GAAS,GAAAJ,QAAO;AAAA;AAAA,EAIhBK,GAAM,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAWDG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA,EAIlDG,GAAQ,GAAAN,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,uCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQWO,GAAS,GAAAP,QAAO,IAAI,MAAM,KAAO,CAC5C,KAAM,SACN,UAAW,uCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECxDF,IAAAQ,GAAkB,gBAUX,IAAMC,GAAS,CAAC,CACrB,OAAQ,CAACC,EAAKC,CAAG,EACjB,OAAQ,CAAE,GAAAC,EAAI,MAAAC,EAAO,QAAAC,CAAQ,EAC7B,eAAAC,CACF,IACE,GAAAC,QAAA,cAACP,GAAA,CACC,KAAK,SACL,gBAAeC,EACf,gBAAeC,EACf,gBAAeE,EACf,MAAO,CACL,KAAM,GAAGC,CAAO,GAClB,EACC,GAAGC,EAAeH,CAAE,EACvB,ECxBF,IAAAK,GAAkB,gBAUX,IAAMC,GAAQ,CAAC,CAAE,OAAAC,EAAQ,OAAAC,EAAQ,cAAAC,CAAc,IACpD,GAAAC,QAAA,cAACJ,GAAA,CACC,MAAO,CACL,KAAM,GAAGC,EAAO,OAAO,IACvB,MAAO,GAAGC,EAAO,QAAUD,EAAO,OAAO,GAC3C,EACC,GAAGE,EAAc,EACpB,EHFF,IAAME,GAAYC,GAAoB,CACpC,IAAIC,EAAU,OAAO,iBACrB,OAAAD,EAAM,QAAQ,CAACE,EAAMC,IAAU,CAC7B,GAAIA,IAAU,EAAG,CACf,IAAMC,EAAIF,EAAOF,EAAMG,EAAQ,CAAC,EAC5BC,EAAIH,IACNA,EAAUG,EAEd,CACF,CAAC,EACMH,CACT,EAaMI,GAAc,CAAC,CACnB,QAAAC,EACA,OAAAC,EACA,OAAAC,EACA,MAAAR,EACA,KAAAS,EACA,aAAAC,EACA,UAAAC,EACA,SAAAC,CACF,IAAwB,CACtB,GAAM,CAACX,EAASY,CAAU,KAAI,YAAmBN,CAAM,EACjDO,KAAW,eACdC,GAAkC,CAC7B,CAAC,MAAMA,EAAW,CAAC,CAAC,GAAK,CAAC,MAAMA,EAAW,CAAC,CAAC,GAC/CF,EAAWE,EAAW,MAAM,CAAC,CAEjC,EACA,CAACR,CAAM,CACT,EAEML,EAAOH,GAASC,CAAK,EAErBgB,EAAaN,EAAeO,EAAgBhB,EAAQ,CAAC,CAAC,EAAIA,EAAQ,CAAC,EACnEiB,EAAaR,EAAeO,EAAgBhB,EAAQ,CAAC,CAAC,EAAIA,EAAQ,CAAC,EACnEkB,EAAQX,EAAO,CAAC,IAAMA,EAAO,CAAC,EAC9BY,EAAaT,GAAaH,EAAO,CAAC,IAAMP,EAAQ,CAAC,EAAIU,EAAY,OAEvE,sBAAU,IAAM,EACVJ,EAAO,CAAC,IAAMN,EAAQ,CAAC,GAAKM,EAAO,CAAC,IAAMN,EAAQ,CAAC,IACrDY,EAAWN,CAAM,CAErB,EAAG,CAACA,CAAM,CAAC,EAGT,EAAAc,QAAA,gBAAAA,QAAA,cACGF,EACC,EAAAE,QAAA,cAACC,GAAA,KACC,EAAAD,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,CAAS,MAAO,CAAE,KAAM,IAAK,MAAO,MAAO,EAAG,EAC/C,EAAAH,QAAA,cAACI,GAAA,CAAU,KAAK,SAAS,gBAAa,GAAC,MAAO,CAAE,KAAM,GAAI,EAAG,EAC7D,EAAAJ,QAAA,cAACI,GAAA,CAAU,KAAK,SAAS,gBAAa,GAAC,MAAO,CAAE,KAAM,MAAO,EAAG,CAClE,CACF,EAEA,EAAAJ,QAAA,cAACC,GAAA,KACC,EAAAD,QAAA,cAAC,WACC,SAAUf,EACV,KAAM,EACN,KAAMJ,EACN,OAAQM,EACR,SAAUI,EACV,SAAUE,EACV,OAAQP,EACR,UAAW,CAAE,SAAU,UAAW,GAElC,EAAAc,QAAA,cAAC,aAAM,CAAC,CAAE,aAAAK,CAAa,IAAM,EAAAL,QAAA,cAACE,GAAA,CAAK,GAAGG,EAAa,EAAG,CAAG,EACzD,EAAAL,QAAA,cAAC,gBACE,CAAC,CAAE,QAAAM,EAAS,eAAAC,CAAe,IAC1B,EAAAP,QAAA,cAAC,OAAI,UAAU,kBACZM,EAAQ,IAAKE,GACZ,EAAAR,QAAA,cAACI,GAAA,CACC,IAAKI,EAAO,GACZ,OAAQA,EACR,OAAQrB,EACR,eAAgBoB,EAClB,CACD,CACH,CAEJ,EACA,EAAAP,QAAA,cAAC,WAAO,KAAM,GAAO,MAAO,IACzB,CAAC,CAAE,OAAAS,EAAQ,cAAAC,CAAc,IACxB,EAAAV,QAAA,cAAC,OAAI,UAAU,iBACZS,EAAO,IAAI,CAAC,CAAE,GAAAE,EAAI,OAAAC,EAAQ,OAAAC,CAAO,IAChC,EAAAb,QAAA,cAACG,GAAA,CAAM,IAAKQ,EAAI,OAAQC,EAAQ,OAAQC,EAAQ,cAAeH,EAAe,CAC/E,CACH,CAEJ,CACF,CACF,EAEF,EAAAV,QAAA,cAACc,GAAA,KACC,EAAAd,QAAA,cAACe,GAAA,KAAe,GAAGpB,CAAU,GAAGP,EAAO,IAAIA,CAAI,GAAK,EAAE,EAAG,EACzD,EAAAY,QAAA,cAACe,GAAA,KAAe,GAAGlB,CAAU,GAAGE,GAA0B,EAAE,GAC1DX,EAAO,IAAIA,CAAI,GAAK,EACtB,EAAG,CACL,CACF,CAEJ,EAEO4B,GAAQhC,GDxHf,IAAMiC,GAAmB,CAACC,EAAkBC,EAAcC,IAAkC,CAC1F,IAAMC,EAAWH,EAAO,CAAC,EACnBI,EAAYF,GAAc,IAAI,GAAGD,EAAM,EAAE,MAAM,GAAK,KACpDI,EAAWL,EAAOA,EAAO,OAAS,CAAC,EACnCM,EAAYJ,GAAc,IAAI,GAAGD,EAAM,EAAE,MAAM,GAAK,KAEpDM,EAAW,SAASH,IAAc,KAAO,GAAGD,CAAQ,GAAKC,EAAW,EAAE,EACtEI,EAAML,EAAWI,EAAWJ,EAAWI,EACvCE,EAAW,SAASH,IAAc,KAAO,GAAGD,CAAQ,GAAKC,EAAW,EAAE,EACtEI,EAAMD,EAAWJ,EAAWF,EAAWM,EAE7C,OAAOD,GAAOE,EAAM,CAACF,GAAYR,EAAO,CAAC,EAAGU,GAAYV,EAAO,CAAC,CAAC,EAAIA,CACvE,EAEMW,GAAe,CAAC,CAACC,EAAM,GAAAC,CAAE,IACzBD,IAAM,OAAkB,IAErBC,EAAG,OAAO,CAAC,CAACC,EAAKC,CAAI,EAAGH,IAAM,CAACE,GAAOF,EAAIG,GAAOH,CAAC,EAAG,CAAC,EAAGA,CAAC,CAAC,EAAE,CAAC,EAAIC,EAAG,OAGxEG,GAAYC,GAA+B,CAC/C,IAAMC,EAAQP,GAAaM,CAAgB,EACrCP,EAAM,KAAK,MAAMO,EAAiBA,EAAiB,OAAS,CAAC,EAAI,GAAI,EAAI,IAC/E,OAAIC,EAAQ,IAAa,IAAI,MAAMR,EAAM,IAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAACE,EAAGO,IAAMA,EAAI,GAAI,EAC9ED,GAAS,KAAQA,GAAS,IACrB,IAAI,MAAMR,EAAM,IAAM,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAACE,EAAGO,IAAMA,EAAI,GAAG,EACzDF,CACT,EAEMG,GAAa,CAAC,CAAE,MAAAnB,EAAO,KAAAoB,EAAM,aAAAC,CAAa,IAAuB,CACrE,GAAM,CAAE,QAAAC,EAAS,YAAAC,EAAa,cAAAC,EAAe,eAAAC,CAAe,EAAIC,GAAU,EACpEC,EAAeH,GAAe,KAAMb,GAAMA,EAAE,KAAOX,EAAM,EAAE,EAC3D4B,EACJD,GAAc,QAAQA,GAAc,QAAQ,OAAS,CAAC,GAAG,aAAa,SAAS,GAAG,EAC9E,CAACE,EAAOC,CAAS,KAAI,aAEzB,MAAS,KAEX,cAAU,IAAM,CACd,IAAMC,EAAoBJ,GAAc,QAAQ,IAAKK,GACnD,SAASA,EAAE,YAAY,QAAQ,aAAc,EAAE,EAAG,EAAE,CACtD,GAAK,CAAC,EAAG,CAAC,EAEJC,EAASlB,GAASgB,CAAiB,EACnChC,EAAS,CAACkC,EAAO,CAAC,EAAGA,EAAOA,EAAO,OAAS,CAAC,CAAC,EAEpDH,EAAU,CACR,GAAIH,GAAc,GAClB,MAAOM,EACP,OAAQ,CAACA,EAAO,CAAC,EAAGA,EAAOA,EAAO,OAAS,CAAC,CAAC,EAC7C,OAAQN,GAAc,QAAQ,OAC1B7B,GAAiBC,EAAQ4B,EAAcJ,EAAY,YAAY,EAC/D,CAAC,EAAG,CAAC,CACX,CAAC,CACH,EAAG,CAACI,GAAc,EAAE,CAAC,KAErB,cAAU,IAAM,CACd,GAAIE,GAAO,GAAI,CACb,IAAMK,EAAOP,GAAc,QAAQ,OAC/B7B,GAAiB+B,EAAM,OAAQF,EAAcJ,EAAY,YAAY,EACrE,CAAC,EAAG,CAAC,EACHY,EAASZ,EAAY,cAAc,IAAI,GAAGvB,EAAM,EAAE,MAAM,EACxDoC,EAASb,EAAY,cAAc,IAAI,GAAGvB,EAAM,EAAE,MAAM,EAExDO,EAAM4B,EAAS,WAAWA,CAAM,EAAID,EAAK,CAAC,EAC1CzB,EAAM2B,EAAS,WAAWA,CAAM,EAAIF,EAAK,CAAC,GAC5C3B,IAAQsB,EAAM,OAAO,CAAC,GAAKpB,IAAQoB,EAAM,OAAO,CAAC,IACnDQ,EAAS,CAAC9B,EAAKE,CAAG,CAAC,CAEvB,CACF,EAAG,CAACc,EAAY,cAAc,SAAS,CAAC,CAAC,EAEzC,IAAMc,KAAW,gBACdC,GAAkC,CACjC,GAAIT,GAAO,KACLA,EAAM,OAAO,CAAC,IAAMS,EAAW,CAAC,GAAKT,EAAM,OAAO,CAAC,IAAMS,EAAW,CAAC,GAAG,CAC1ER,EAAU,CAAE,GAAGD,EAAO,OAAQS,EAAW,MAAM,CAAE,CAAC,EAClD,IAAMC,EAAQ,IAAI,gBAAgBhB,EAAY,YAAY,EAC1DgB,EAAM,IAAI,OAAQ,IAAI,EACtBA,EAAM,OAAO,GAAGvC,EAAM,EAAE,MAAM,EAC9BuC,EAAM,OAAO,GAAGvC,EAAM,EAAE,MAAM,EAE1BsC,EAAW,CAAC,IAAMT,EAAM,OAAO,CAAC,GAClCU,EAAM,IAAI,GAAGvC,EAAM,EAAE,OAAQ,GAAGsC,EAAW,CAAC,CAAC,EAAE,EAG7CA,EAAW,CAAC,IAAMT,EAAM,OAAO,CAAC,GAClCU,EAAM,IAAI,GAAGvC,EAAM,EAAE,OAAQ,GAAGsC,EAAW,CAAC,CAAC,EAAE,EAGjDC,EAAM,KAAK,EACXd,EAAec,EAAM,SAAS,CAAC,CACjC,CAEJ,EACA,CAAChB,EAAY,aAAcM,CAAK,CAClC,EAEA,OACE,GAAAW,QAAA,iBAAAA,QAAA,cACGX,GACC,GAAAW,QAAA,cAACC,GAAA,CACC,QAASnB,EACT,OAAQO,EAAM,OACd,OAAQA,EAAM,OACd,UAAWD,EAAY,IAAM,OAC7B,MAAOC,EAAM,MACb,KAAMT,EACN,SAAUiB,EACV,aAAchB,EAChB,CAEJ,CAEJ,EAEOqB,GAAQvB,GVxGf,IAAAwB,GAA+B,mBAMzBC,GAAgB,CAAC,CAAE,MAAAC,CAAM,IAA0B,CACvD,GAAM,CAAE,CAAE,KAAI,mBAAe,EAC7B,OAAQA,EAAM,GAAI,CAChB,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACH,OAAO,GAAAC,QAAA,cAACC,GAAA,CAAe,MAAOV,EAAO,EACvC,KAAKW,GACH,OAAO,GAAAF,QAAA,cAACG,GAAA,CAAiB,MAAOZ,EAAO,EACzC,KAAKa,GACH,OAAO,GAAAJ,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAM,EAAE,kBAAkB,EAAG,aAAY,GAAC,EAC7E,KAAKe,GACL,KAAKC,GACH,OAAO,GAAAP,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAM,EAAE,kBAAkB,EAAG,aAAY,GAAC,EAC7E,KAAKiB,GACH,OAAO,GAAAR,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAM,EAAE,oBAAoB,EAAG,aAAY,GAAC,EAC/E,KAAKkB,GACH,OAAO,GAAAT,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAM,EAAE,2BAA2B,EAAG,aAAY,GAAC,EACtF,KAAKmB,GACH,OAAO,GAAAV,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAK,QAAK,EAC7C,QACE,OAAO,IACX,CACF,EAEOoB,GAAQrB,GVjDf,IAAAsB,GAA+B,mBAiBzBC,GAAc,CAAC,CACnB,MAAAC,EACA,eAAAC,EACA,aAAAC,EACA,QAAAC,EACA,eAAAC,EACA,QAAAC,CACF,IAAa,CACX,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,KAAiB,gBAAY,IAAMH,EAAe,EAAE,EAAG,CAAC,CAAC,EAE/D,OACE,GAAAI,QAAA,cAACC,GAAA,CACC,MAAOH,EAAE,eAAe,EACxB,QAASD,EACT,OACE,GAAAG,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAgB,UAAS,GAAC,SAAUT,EAAS,QAASI,GACrD,GAAAC,QAAA,cAACK,EAAA,KAAeP,EAAE,6BAA6B,CAAE,CACnD,CACF,EACA,GAAAE,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACM,GAAA,CAAc,UAAS,GAAC,SAAUX,EAAS,QAASE,GACnD,GAAAG,QAAA,cAACK,EAAA,KACEP,EAAE,gCAAiC,CAClC,MAAOJ,GAAgB,EACvB,KAAMI,EAAE,kBAAkBJ,GAAgB,KAAO,EAAI,WAAa,QAAQ,EAAE,CAC9E,CAAC,CACH,CACF,CACF,CACF,CACF,GAGF,GAAAM,QAAA,cAACO,GAAA,KACEd,EACE,OAAQe,GAAMA,EAAE,QAAQ,MAAM,EAC9B,IAAKC,GACJ,GAAAT,QAAA,cAACU,GAAA,CACC,IAAKD,EAAE,YACP,QAASA,EAAE,YACX,SAAUA,EAAE,KAAOjB,GAAO,IAE1B,GAAAQ,QAAA,cAACW,EAAA,KACC,GAAAX,QAAA,cAACY,GAAA,CAAc,MAAOH,EAAG,CAC3B,CACF,CACD,CACL,CACF,CAEJ,EAEOI,GAAQtB,GFrEf,IAAAuB,GAA+B,mBAGzBC,GAAa,CAACC,EAAUC,IAAkC,CAC9D,OAAQD,EAAE,GAAI,CACZ,KAAKE,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACH,OAAOL,EAAa,IAAI,GAAGD,EAAE,EAAE,MAAM,GAAKC,EAAa,IAAI,GAAGD,EAAE,EAAE,MAAM,EAAI,EAAI,EAClF,QACE,OAAOA,EAAE,QAAQ,OAAQO,GAAWA,EAAO,QAAQ,EAAE,MACzD,CACF,EAEMC,GAAiB,CACrBC,EACAC,EAAyB,KACzBC,IAEIA,EAAmB,GAEnBF,IAAO,UACFC,IAAe,KAGpBD,IAAO,oBACFC,IAAe,KAEjB,GAQHE,GAAS,CAAC,CAAE,WAAAF,EAAY,WAAAC,CAAW,IAAmB,CAC1D,GAAM,CAAE,EAAAE,CAAE,KAAI,mBAAe,EACvB,CAAE,YAAAC,EAAa,cAAAC,EAAe,QAAAC,EAAS,SAAAC,EAAU,eAAAC,CAAe,EAAIC,GAAU,EAE9EC,EAASH,GAAU,OAEnB,CAACI,EAAOC,CAAQ,KAAI,aAAgB,EACpCC,KAAgB,gBAAaC,GAAqBF,EAASE,CAAS,EAAG,CAAC,CAAC,EACzEC,KAAU,gBAAY,IAAMH,EAAS,MAAS,EAAG,CAAC,CAAC,EAEzD,GAAI,CAACF,EACH,OAAO,KAET,IAAMM,EAAcf,EAAaA,EAAW,IAAKgB,GAAMA,EAAE,UAAU,EAAI,OAEjEC,EAAiBR,GACnB,OAAQO,GAAMA,EAAE,KAAO,WAAanB,GAAemB,EAAE,GAAIjB,EAAYgB,CAAW,CAAC,GACjF,OAAQ1B,GAAO0B,EAAcA,EAAY,SAAS1B,EAAE,EAA2B,EAAI,EAAK,EACzF,KAAK,CAAC6B,EAAGC,IACRJ,EACIA,EAAY,QAAQG,EAAE,EAA2B,EACjDH,EAAY,QAAQI,EAAE,EAA2B,EACjD,CACN,EACC,IAAKH,GAAM,CACV,IAAMI,EAAQpB,GAAY,KAAMqB,GAAMA,EAAE,aAAeL,EAAE,EAAE,EAC3D,OAAII,GAAO,YACF,CACL,GAAGJ,EACH,YAAaI,EAAM,WACrB,EAEK,CACL,GAAGJ,EACH,YAAad,EAAE,UAAUc,EAAE,EAAE,EAAE,CACjC,CACF,CAAC,EAEH,OACE,GAAAM,QAAA,iBAAAA,QAAA,cACGlB,GAAiBM,GAChB,GAAAY,QAAA,cAACC,GAAA,CACC,WAAYvB,EACZ,MAAOU,EACP,QAASL,EACT,eAAgBY,EAChB,aAAcX,GAAU,aAAa,cAAgB,EACrD,eAAgBC,EAChB,QAASO,EACX,EAEF,GAAAQ,QAAA,cAACE,GAAA,KACEP,EACE,OAAQD,GAAMA,EAAE,QAAQ,MAAM,EAC9B,IAAK3B,GAAM,CACV,IAAMoC,EAAWrC,GAAWC,EAAGc,EAAY,YAAY,EACvD,OACE,GAAAmB,QAAA,cAACI,GAAA,CAAK,IAAKrC,EAAE,IACX,GAAAiC,QAAA,cAACK,GAAA,CACC,QAAS,IAAMf,EAAcvB,CAAC,EAC9B,MAAOA,EAAE,YACT,aAAYA,EAAE,YACd,UACEoC,EAAW,EACP,0DACA,qCAGN,GAAAH,QAAA,cAACM,GAAA,KAAOvC,EAAE,WAAY,EACrBoC,EAAW,GACV,GAAAH,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,KAAgBL,CAAS,CAC5B,CAEJ,CACF,CAEJ,CAAC,CACL,CACF,CAEJ,EAEOM,GAAQ9B,G2BvIf,IAAA+B,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO,MAEjBC,GAAO,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAKfE,EAAK,EAAE,CAAC,IAAIA,EAAK,EAAE,CAAC;AAAA,EAGnBC,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA,aAIdE,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;AAAA,IAE1BE,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnCA,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;ECzBxC,IAAAC,EAA4C,gBCA5C,IAAAC,EAAmB,4BAIZ,IAAMC,GAAU,EAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAajBC,GAAQ,EAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKLE,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBzDH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOEI,GAAU,EAAAH,QAAO,UAEjBI,GAAS,EAAAJ,QAAO,SAEhBK,GAAM,EAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUbM,GAAU,EAAAN,QAAO;AAAA;AAAA;AAAA;AAAA,gBAIdO,EAAK,CAAC,CAAC;AAAA,EAGVC,GAAc,EAAAR,QAAO,MAErBS,GAAgB,EAAAT,QAAO;AAAA;AAAA,iBAEnBO,EAAK,CAAC,CAAC;AAAA,EAGXG,GAAa,EAAAV,QAAO;AAAA,mBACdO,EAAK,GAAI,CAAC;AAAA,WACjBL,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,EAI1CS,GAAU,EAAAX,QAAO,GAAG,MAAM,KAAO,CAC5C,UAAW,gCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUWY,GAAO,EAAAZ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBda,GAAc,EAAAb,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMlBO,EAAK,GAAI,CAAC;AAAA,EAGbO,GAAM,EAAAd,QAAO;AAAA,gBACVO,EAAK,CAAC,CAAC;AAAA,EAGVQ,GAAQ,EAAAf,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOfgB,GAAe,EAAAhB,QAAO,IAAI,MAAM,KAAO,CAClD,UAAW,2DACb,EAAE;AAAA;AAAA,kBAEgBO,EAAK,CAAC,CAAC;AAAA,EAGZU,GAAY,EAAAjB,QAAO;AAAA;AAAA,mBAEbO,EAAK,CAAC,CAAC;AAAA,EAGbW,GAAW,EAAAlB,QAAO;AAAA;AAAA,WAEnBE,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,EAI1CiB,GAAQ,EAAAnB,QAAO;AAAA,WAChBE,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;ECtJpD,IAAAkB,GAAkB,gBCAlB,IAAAC,GAA4B,4BAKrB,IAAMC,GAAO,GAAAC,QAAO;AAAA,aACdC,EAAK,EAAG,CAAC;AAAA,EAGTC,GAAM,GAAAF,QAAO;AAAA;AAAA;AAAA,sBAGHG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,aAChDF,EAAK,CAAC,CAAC,IAAIA,EAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpBG,GAAc,GAAAJ,QAAO;AAAA;AAAA,mBAEfC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIbI,MAAS,GAAAL,SAAOM,CAAW,EAAE,MAAM,KAAO,CACrD,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WASSL,EAAK,GAAI,CAAC;AAAA,cACPA,EAAK,GAAI,CAAC;AAAA,YACZA,EAAK,GAAI,CAAC;AAAA,aACTA,EAAK,GAAI,CAAC;AAAA,wBACEE,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsB9CI,GAAO,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMfC,EAAK,GAAI,CAAC;AAAA;AAAA,IAElB,CAAC,CAAE,QAAAO,CAAQ,IACXA,GACA;AAAA,gBACYP,EAAK,IAAK,CAAC;AAAA;AAAA,QAEnBF,EAAI;AAAA,mBACOE,EAAK,GAAI,CAAC;AAAA;AAAA;AAAA,QAGrBC,EAAG;AAAA,mBACQD,EAAK,EAAG,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,QAI/BG,EAAW;AAAA;AAAA,yBAEMH,EAAK,EAAG,CAAC;AAAA;AAAA;AAAA,KAG7B;ED3EL,IAAMQ,GAAU,CAAC,CAAE,MAAAC,EAAO,QAAAC,CAAQ,IAE9B,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KAAaL,CAAM,EACnBC,GACC,GAAAC,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAO,QAASL,GACf,GAAAC,QAAA,cAACK,GAAA,CAAS,MAAK,GAAC,CAClB,CACF,CAEJ,CACF,EAIEC,GAAU,CAAC,CAAE,MAAAC,EAAO,MAAAC,CAAM,IACzBD,EAKH,GAAAP,QAAA,cAACS,GAAA,CAAK,QAASD,GACZD,EAAM,IAAI,CAACG,EAAMC,IAChB,GAAAX,QAAA,cAACH,GAAA,CAAQ,IAAK,GAAGa,EAAK,KAAK,IAAIC,CAAK,GAAI,MAAOD,EAAK,MAAO,QAASA,EAAK,QAAS,CACnF,CACH,EARO,KAYJE,GAAQN,GE9Cf,IAAAO,GAA2B,WCA3B,IAAAC,GAA8B,WAUjBC,MAAc,kBAA4C,MAAS,EDPhF,IAAMC,GAAU,IAAwB,CACtC,IAAMC,KAAU,eAAWC,EAAW,EAEtC,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,4CAA4C,EAG9D,OAAOA,CACT,EACOE,GAAQH,GJaf,IAAAI,GAA+B,mBMzB/B,IAAAC,GAA4C,WAMtCC,GACJC,GACwD,CACxD,IAAMC,KAAe,WAAiB,IAAI,EAEpC,CAACC,EAAWC,CAAY,KAAI,aAAS,EAAK,EAC1C,CAACC,EAAmBC,CAAoB,KAAI,aAAS,CAAC,EAEtDC,EAAmB,CACvBC,EACAC,IACG,CACH,GAAM,CAACC,CAAK,EAAIF,EAChBJ,EAAaM,EAAM,cAAc,EACjCJ,EAAqBI,EAAM,iBAAiB,EAExCA,EAAM,gBAAkBT,GAAS,mBAAqBC,EAAa,UACrEO,EAAS,UAAUP,EAAa,OAAiC,EACjEA,EAAa,QAAU,KAE3B,EAEA,uBAAU,IAAM,CACd,IAAMO,EAAW,IAAI,qBAAqBF,EAAkBN,CAAO,EACnE,OAAIC,EAAa,SAASO,EAAS,QAAQP,EAAa,OAAiC,EAElF,IAAM,CACPA,EAAa,SAASO,EAAS,UAAUP,EAAa,OAAiC,CAC7F,CACF,EAAG,CAACA,EAAcD,CAAO,CAAC,EAEnB,CAACC,EAAcC,EAAWE,CAAiB,CACpD,EAEOM,GAAQX,GNKf,IAAMY,GAAc,CAAC,CACnB,GAAAC,EACA,MAAAC,EACA,KAAAC,EACA,MAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,YAAAC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,aAAAC,EACA,qBAAAC,EACA,QAAAC,CACF,IAAa,CACX,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAEvB,CAACC,EAAcC,CAAS,EAAIC,GAAgC,CAChE,kBAAmB,EACrB,CAAC,EAEK,CAAE,UAAAC,CAAU,EAAIC,GAAQ,EACxBC,KAAW,WAAQ,IAAOP,EAAU,IAAMA,EAAQb,CAAE,EAAI,OAAY,CAACA,CAAE,CAAC,EAExEqB,KAAc,eACjBC,GAAuD,CACtD,GAAIlB,GAAaF,EAAM,CACrB,IAAMqB,GAAM,IAAI,OAAO,uBAAuB,EAC1C,CAACnB,EAAU,MAAMmB,EAAG,GAAK,CAACnB,EAAU,WAAW,SAAS,MAAM,IAChEkB,EAAE,eAAe,EACjBJ,EAAUhB,CAAI,EAElB,CACF,EACA,CAACF,EAAII,EAAWF,CAAI,CACtB,EAEA,OACE,EAAAsB,QAAA,cAACC,GAAA,CAAQ,QAASL,GAChB,EAAAI,QAAA,cAACE,GAAA,CAAM,IAAKX,GACTC,GAAab,EACZ,EAAAqB,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACI,GAAA,CACC,KAAK,aACL,OAAQ,GAAGzB,CAAK,mCAAmCA,CAAK,mCAAmCA,CAAK,iCAChG,MAAM,+JACR,EACA,EAAAqB,QAAA,cAACK,GAAA,CACC,OAAQ,GAAG1B,CAAK,uBAAuBA,CAAK,uBAAuBA,CAAK,qBACxE,MAAM,+JACN,IAAK,GAAGA,CAAK,gBACb,IAAKF,EACP,CACF,CACF,EAEA,EAAAuB,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACK,GAAA,CAAI,IAAKxB,GAAoByB,GAA2B,CAC3D,CAEJ,EACA,EAAAN,QAAA,cAACO,GAAA,KACC,EAAAP,QAAA,cAACQ,GAAA,KACE1B,GAAc,EAAAkB,QAAA,cAACS,GAAA,KAAY3B,CAAW,EACvC,EAAAkB,QAAA,cAACU,GAAA,KACEhC,EACC,EAAAsB,QAAA,cAACW,GAAA,CAAK,QAASd,EAAa,KAAMnB,EAAM,MAAOD,EAAO,aAAYA,GAC/DA,CACH,EAEAA,CAEJ,EACCM,GAAe,EAAAiB,QAAA,cAACY,GAAA,KAAa7B,CAAY,EACzCC,GACC,EAAAgB,QAAA,cAACa,GAAA,KACC,EAAAb,QAAA,cAACc,GAAA,CAAQ,MAAK,GAAC,MAAO9B,EAAS,CACjC,CAEJ,EACA,EAAAgB,QAAA,cAACe,GAAA,KACC,EAAAf,QAAA,cAACgB,GAAA,KACC,EAAAhB,QAAA,cAACiB,GAAA,KACE/B,EAAW,EAAAc,QAAA,cAACkB,GAAA,KAAUhC,CAAS,EAAc,EAAAc,QAAA,cAACmB,GAAA,KAAO7B,EAAE,mBAAmB,CAAE,EAC7E,EAAAU,QAAA,cAACoB,GAAA,KAAcnC,CAAM,CACvB,EACCE,GACC,EAAAa,QAAA,cAACiB,GAAA,KACC,EAAAjB,QAAA,cAACmB,GAAA,KAAO7B,EAAE,4BAA4B,CAAE,EACxC,EAAAU,QAAA,cAACoB,GAAA,KAAcjC,CAAa,CAC9B,EAEDC,GACC,EAAAY,QAAA,cAACiB,GAAA,KACC,EAAAjB,QAAA,cAACmB,GAAA,KAAO7B,EAAE,6BAA6B,CAAE,EACzC,EAAAU,QAAA,cAACoB,GAAA,KAAchC,CAAqB,CACtC,CAEJ,CACF,CACF,CACF,CAEJ,EAEOiC,GAAQ9C,GFlJf,IAAA+C,GAAoB,kBAEdC,GAAgBC,GAAuB,CAC3C,IAAMC,EAAMD,EAAS,eAAe,QAAQ,CAAC,GAAG,IAChD,GAAIC,EACF,MAAO,GAAGA,CAAG,aAGjB,EAWMC,GAAO,CAAC,CACZ,UAAAC,EACA,iBAAAC,EACA,UAAAC,EACA,UAAAC,EACA,kBAAAC,EACA,YAAAC,CACF,IACOL,EAKH,GAAAM,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACER,EAAU,IAAKH,GAAa,CAsB3B,IAAMY,EAAaN,EAAY,GAAGA,CAAS,IAAIN,EAAS,GAAG,GAAK,OAEhE,OACE,GAAAS,QAAA,cAACI,GAAA,CAAK,IAAKb,EAAS,KAClB,GAAAS,QAAA,cAACK,GAAA,CACC,GAAId,EAAS,IACb,QAASQ,EACT,MAAOR,EAAS,MAChB,UAAWM,EACX,KAAMM,IAA0BP,EAAY,IAAIL,EAAS,GAAG,GAAK,QACjE,MAAOD,GAAaC,CAAQ,EAC5B,iBAAkBI,EAClB,YAAaJ,EAAS,iBACtB,WAAYO,EAAoBP,EAAS,WAAW,CAAC,GAAG,KAAO,OAC/D,QAAS,CACP,CACE,MAAOA,EAAS,SAClB,EACA,CACE,MAAO,GAAGe,EACRf,EAAS,iBAAiB,OAASA,EAAS,OAC9C,CAAC,IAAI,GAAAgB,QAAQ,EACX,YAAYhB,EAAS,iBAAiB,MAAQ,kBAAkB,EAClE,CAAC,EACH,EACA,CACE,MAAOA,EAAS,WAClB,EACA,CACE,MAAOA,EAAS,QAClB,CACF,EACA,MAAO,GAAGe,EAAgBf,EAAS,KAAK,CAAC,IAAI,GAAAgB,QAAQ,EAAE,kBAAkB,CAAC,GAC1E,SACEhB,EAAS,WAAa,QAAaA,EAAS,MAAQA,EAAS,SACzD,GAAGe,EAAgBf,EAAS,QAAQ,CAAC,IAAI,GAAAgB,QAAQ,EAAE,kBAAkB,CAAC,GACtE,OAEN,aACEhB,EAAS,eAAiB,OACtB,GAAGe,EAAgBf,EAAS,YAAY,CAAC,IAAI,GAAAgB,QAAQ,EAAE,kBAAkB,CAAC,GAC1E,OAEN,qBACEhB,EAAS,uBAAyB,OAC9B,GAAGe,EAAgBf,EAAS,oBAAoB,CAAC,IAAI,GAAAgB,QAAQ,EAC3D,kBACF,CAAC,GACD,OAER,CACF,CAEJ,CAAC,CACH,CACF,EAnFO,KAuFJC,GAAQf,GSzHf,IAAAgB,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,EAKjBC,GAAQ,GAAAD,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYWE,MAAQ,GAAAF,SAAOG,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA,WAK5BC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,sBAEIC,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,iBAC5CD,EAAK,CAAC,CAAC;AAAA,eACTA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOXA,EAAK,EAAE,CAAC;AAAA,cACLA,EAAK,EAAE,CAAC;AAAA,YACVA,EAAK,EAAE,CAAC;AAAA,aACPA,EAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAWIC,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EDnDjE,IAAAC,GAA+B,mBAQzBC,GAAa,CAAC,CAAE,SAAAC,EAAU,QAAAC,EAAS,WAAAC,CAAW,IAAa,CAC/D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAAON,CAAS,EAChBC,GACC,GAAAG,QAAA,cAACG,GAAA,CAAM,QAASN,EAAS,MAAOC,GAA0BC,EAAE,iBAAiB,GAC3E,GAAAC,QAAA,cAACI,GAAA,CAAW,MAAK,GAAC,CACpB,CAEJ,CAEJ,EAEOC,GAAQV,GE1Bf,IAAAW,GAA6C,gBCA7C,IAAAC,GAA2C,gBCA3C,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA,EAMWC,GAAQ,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYfE,GAAS,GAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKNG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA,EAKhDC,GAAS,GAAAJ,QAAO;AAAA;AAAA,EAIhBK,MAAY,GAAAL,SAAOM,CAAW,EAAE,MAAM,KAAO,CACxD,UAAW,uCACb,EAAE;AAAA;AAAA;AAAA;AAAA,WAIUH,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA,YAC1CA,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA;AAAA;AAAA;AAAA,EAM3CI,GAAQ,GAAAP,QAAO,MAAM,MAAM,KAAO,CAC7C,KAAM,SACN,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA,YAIWG,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA,eACzCK,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAeRL,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;ED3EzD,IAAMM,GAAc,GAAAC,QAAM,WACxB,CACE,CAAE,YAAAC,EAAa,MAAAC,EAAO,MAAAC,EAAO,GAAAC,EAAI,SAAAC,EAAU,SAAAC,EAAU,UAAAC,CAAU,EAC/DC,IAMA,GAAAR,QAAA,cAACS,GAAA,CAAQ,IAAKD,GACZ,GAAAR,QAAA,cAACU,GAAA,CAAM,QAASN,GAAKF,CAAM,EAC3B,GAAAF,QAAA,cAACW,GAAA,KACC,GAAAX,QAAA,cAACY,GAAA,CACC,YAAaX,EACb,KAAK,SACL,MAAOE,EACP,GAAIC,EACJ,SAAUE,EACV,UAAWC,EACb,CACF,EACA,GAAAP,QAAA,cAACa,GAAA,KACC,GAAAb,QAAA,cAACc,GAAA,CAAU,QAAST,EAAU,MAAO,eAAYH,CAAK,GAAI,aAAY,eAAYA,CAAK,IACrF,GAAAF,QAAA,cAACe,GAAA,CAAW,MAAK,GAAC,CACpB,CACF,CACF,CAEJ,EAEAhB,GAAY,YAAc,cAE1B,IAAOiB,GAAQjB,GElDf,IAAAkB,GAA0B,WAEpBC,GAAkB,CAACC,EAAmCC,IAAyB,CACnF,IAAMC,EAAeC,GAAkB,CACjCH,EAAI,SAAWG,EAAE,QAAU,CAACH,EAAI,QAAQ,SAASG,EAAE,MAAc,GACnEF,EAAS,CAEb,KAEA,cAAU,KACR,SAAS,iBAAiB,QAASC,CAAW,EAEvC,IAAM,CACX,SAAS,oBAAoB,QAASA,CAAW,CACnD,EACD,CACH,EAEOE,GAAQL,GHff,IAAAM,GAA+B,mBAQzBC,GAAY,CAAC,CAAE,MAAAC,EAAO,SAAAC,EAAU,SAAAC,CAAS,IAAsB,CACnE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,KAAM,WAAuB,IAAI,EAEjCC,KAAW,gBACdC,GAA2CL,EAASK,EAAE,cAAc,KAAK,EAC1E,CAAC,CACH,EAEAC,GAAgBH,EAAK,IAAMH,EAAS,EAAE,CAAC,EAEvC,IAAMO,KAAY,gBAAY,IAAM,CAClCN,EAASF,CAAK,CAChB,EAAG,CAACA,CAAK,CAAC,EAEJS,KAAY,gBACfH,GAA6C,CACxCA,EAAE,UAAY,IAChBE,EAAU,CAEd,EACA,CAACR,EAAOQ,CAAS,CACnB,EAEA,OACE,GAAAE,QAAA,cAACC,GAAA,CACC,IAAKP,EACL,MAAOJ,EACP,SAAUK,EACV,UAAWI,EACX,SAAUD,EACV,YAAaL,EAAE,uBAAuB,EACtC,MAAOA,EAAE,uBAAuB,EAChC,GAAG,cACL,CAEJ,EAEOS,GAAQb,GD7Cf,IAAMc,GAAe,IAAM,CACzB,GAAM,CAACC,EAAOC,CAAQ,KAAI,aAAS,EAAE,EAC/B,CAAE,YAAAC,EAAa,eAAAC,CAAe,EAAIC,GAAU,EAE5CC,KAAW,gBACdL,GAAkB,CACjB,IAAMM,EAAY,IAAI,gBAAgBJ,EAAY,YAAY,EAC1DF,IAAUM,EAAU,IAAI,OAAO,IAI/BN,EACFM,EAAU,IAAI,QAASN,CAAK,EAE5BM,EAAU,OAAO,QAAQ,EAG3BH,EAAeG,EAAU,SAAS,CAAC,EACnCL,EAAS,EAAE,EACb,EACA,CAACC,CAAW,CACd,EAEA,OAAO,GAAAK,QAAA,cAACC,GAAA,CAAU,MAAOR,EAAO,SAAUC,EAAU,SAAUI,EAAU,CAC1E,EAEOI,GAAQV,GK9Bf,IAAAW,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKnB,IAAMC,GAAiBC,GAAyC,CAC9D,IAAIC,EAAKC,GAAM,MAAM,OAErB,OAAIF,IAAa,QACfC,EAAKC,GAAM,MAAM,GAAG,cACXF,IAAa,UACtBC,EAAKC,GAAM,MAAM,GAAG,aACXF,IAAa,OACtBC,EAAKC,GAAM,MAAM,GAAG,UACXF,IAAa,YACtBC,EAAKC,GAAM,MAAM,GAAG,eAGfD,CACT,EAKaE,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,OACR,EAAE;AAAA;AAAA;AAAA,aAGWC,EAAK,GAAG,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA,sBACVC,GAAkBP,GAAcO,EAAM,QAAQ,CAAC;AAAA,WAC1DA,GAAkBA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAI3CC,GAAO,GAAAH,QAAO;AAAA;AAAA,mBAERC,EAAK,CAAC,CAAC;AAAA,eACXA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAOTG,GAAU,GAAAJ,QAAO;AAAA;AAAA;AAAA,EAKjBK,GAAU,GAAAL,QAAO;AAAA;AAAA,EAIjBM,GAAU,GAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EDzC9B,IAAMO,GAAW,CAAC,CAAE,SAAAC,EAAU,KAAAC,EAAM,QAAAC,EAAS,SAAAC,CAAS,IAAa,CACjE,IAAIC,EAAe,GAAAC,QAAA,cAACC,GAAA,CAAS,MAAK,GAAC,EACnC,OAAIN,IAAa,QACfI,EAAe,GAAAC,QAAA,cAACE,GAAA,CAAsB,MAAK,GAAC,EACnCP,IAAa,UACtBI,EAAe,GAAAC,QAAA,cAACG,GAAA,CAAwB,MAAK,GAAC,EACrCR,IAAa,YACtBI,EAAe,GAAAC,QAAA,cAACI,GAAA,CAAU,MAAK,GAAC,GAIhC,GAAAJ,QAAA,cAACK,GAAA,CAAQ,SAAUV,GAChBC,GAAQ,GAAAI,QAAA,cAACM,GAAA,KAAMP,CAAa,EAC7B,GAAAC,QAAA,cAACO,GAAA,KACEV,GAAW,GAAAG,QAAA,cAACQ,GAAA,KAASX,CAAQ,EAC9B,GAAAG,QAAA,cAACS,GAAA,KAASX,CAAS,CACrB,CACF,CAEJ,EAEOY,GAAQhB,GEgBf,IAAMiB,GAAN,MAAMC,CAAO,CACX,YAAe,OAA6B,CAC1C,gBAAiB,CAAC,EAClB,YAAa,CAAC,EACd,WAAY,CAAC,EACb,gBAAiB,CAAC,EAClB,WAAY,CAAC,EACb,YAAa,CAAC,EACd,aAAc,CAAC,EACf,mBAAoB,CAAC,EACrB,gBAAiB,CAAC,EAClB,YAAa,CAAC,EACd,kBAAmB,CAAC,EACpB,gBAAiB,CAAC,EAClB,IAAK,CAAC,CACR,EAEA,YAAe,QAA+B,CAC5C,eAAgB,CAAC,EACjB,IAAK,CAAC,CACR,EAEA,YAAc,gBAAmBC,GAC/BD,EAAO,QAAQC,EAAM,UAAU,EAAE,KAAKA,CAAY,EAEpD,YAAc,kBAAqBA,GAAuB,CACxD,GAAID,EAAO,QAAQC,EAAM,UAAU,GACjC,QAASC,EAAI,EAAGA,EAAIF,EAAO,QAAQC,EAAM,UAAU,EAAE,OAAQC,IAC3D,GAAIF,EAAO,QAAQC,EAAM,UAAU,EAAEC,CAAC,IAAMD,EAAO,CACjDD,EAAO,QAAQC,EAAM,UAAU,EAAE,OAAOC,EAAG,CAAC,EAC5C,KACF,EAGN,EAEA,YAAc,cAAgB,CAACC,KAA2BC,IAAc,CAClEJ,EAAO,QAAQ,KACjBA,EAAO,OAAO,IAAI,QAASC,GAAUA,EAAM,SAASE,EAAWC,CAAI,CAAC,EAElEJ,EAAO,QAAQG,CAAS,GAC1BH,EAAO,QAAQG,CAAS,EAAE,QAASF,GAAuB,CACxD,OAAQE,EAAW,CACjB,IAAK,iBACFF,EAAM,SAAoCG,EAAK,CAAC,CAAC,EAClD,MACF,QACE,KACJ,CACF,CAAC,CAEL,EAEA,YAAc,UAAaH,GAAqBD,EAAO,OAAOC,EAAM,SAAS,EAAE,KAAKA,CAAY,EAEhG,YAAc,YAAeA,GAAqB,CAChD,GAAID,EAAO,OAAOC,EAAM,SAAS,GAC/B,QAASC,EAAI,EAAGA,EAAIF,EAAO,OAAOC,EAAM,SAAS,EAAE,OAAQC,IACzD,GAAIF,EAAO,OAAOC,EAAM,SAAS,EAAEC,CAAC,IAAMD,EAAO,CAC/CD,EAAO,OAAOC,EAAM,SAAS,EAAE,OAAOC,EAAG,CAAC,EAC1C,KACF,EAGN,EAEA,YAAc,QAAU,CAACC,KAA0BC,IAAc,CAC3DJ,EAAO,OAAO,KAChBA,EAAO,OAAO,IAAI,QAASC,GAAUA,EAAM,SAASE,EAAWC,CAAI,CAAC,EAElEJ,EAAO,OAAOG,CAAS,GACzBH,EAAO,OAAOG,CAAS,EAAE,QAASF,GAAqB,CACrD,OAAQE,EAAW,CACjB,IAAK,kBACFF,EAAM,SAAqCG,EAAK,CAAC,CAAC,EACnD,MACF,IAAK,cACFH,EAAM,SAAsCG,EAAK,CAAC,CAAC,EACpD,MACF,IAAK,kBACFH,EAAM,SAAqCG,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EAC5D,MACF,IAAK,aACL,IAAK,aACL,IAAK,cACL,IAAK,eACL,IAAK,qBACL,IAAK,kBACL,IAAK,cACL,IAAK,oBACL,IAAK,kBACFH,EAAM,SAA2B,EAClC,MACF,QACE,KACJ,CACF,CAAC,CAEL,EACF,EACOI,EAAQN,GCtJf,IAAAO,GAAiB,kBACjBC,GAAiD,WCDjD,IAAAC,GAAiB,kBACjBC,GAAiC,mBAG3BC,GAAeC,GAA4B,CAC/C,OAAQA,EAAY,CAClB,IAAK,KACH,MAAO,QACT,IAAK,KACH,MAAO,QACT,QACE,MAAO,OACX,CACF,EAEaC,GAAiB,CAACD,EAAyB,OAC/C,IAAI,QAASE,GAAY,CAC9B,GAAI,GAAAC,QAAK,cAAe,CACtBD,EAAQ,EAAI,EACZ,MACF,CACA,GAAAC,QAAK,IAAI,mBAAgB,EAAE,KACzB,CACE,IAAKJ,GAAYC,CAAU,EAC3B,YAAa,QACb,cAAe,CACb,YAAa,EACf,EACA,MAAO,GACP,UAAW,CACT,QAAS,CACP,YAAa,CACX,WAAY,CACV,aAAc,yBAChB,EACA,OAAQ,CACN,aAAc,cACd,YAAa,SACb,SAAU,YACV,YAAa,kBACb,OAAQ,gBACR,MAAO,UACP,iBAAkB,gBAClB,qBAAsB,UACtB,aAAc,WACd,MAAO,OACP,QAAS,SACT,UAAW,cACX,kBAAmB,uBACnB,aAAc,gBACd,qBAAsB,kBACxB,EACA,SAAU,CACR,QAAS,KACT,QAAS,WACX,EACA,SAAU,CACR,MAAO,eACP,qBAAsB,mBACxB,EACA,YAAa,CACX,OAAQ,OACV,EACA,eAAgB,CACd,aAAc,CACZ,YAAa,eACb,KAAM,EACR,EACA,YAAa,CACX,YAAa,SACb,KAAM,EACR,EACA,UAAW,CACT,YAAa,UACb,KAAM,+CACR,EACA,UAAW,CACT,YAAa,cACb,KAAM,2RACR,EACA,gBAAiB,CACf,YAAa,qBACb,KAAM,6BACR,EACA,SAAU,CAAE,YAAa,uBAAkB,KAAM,EAAG,EACpD,YAAa,CAAE,YAAa,kBAAa,KAAM,EAAG,EAClD,mBAAoB,CAAE,YAAa,sBAAuB,KAAM,EAAG,EACnE,SAAU,CACR,YAAa,kBACb,KAAM,wCACR,EACA,YAAa,CAAE,YAAa,SAAU,KAAM,IAAK,CACnD,EACA,SAAU,CACR,UAAW,KACX,iBAAkB,KACpB,EACA,OAAQ,CACN,IAAK,KACL,GAAI,MACJ,SAAU,UACV,MAAO,WACP,SAAU,WACV,SAAU,aACV,oBAAqB,uBACrB,oBAAqB,0BACrB,OAAQ,UACR,QAAS,SACT,YAAa,SACb,aAAc,MACd,eAAgB,MAChB,cAAe,MACf,YAAa,MACb,cAAe,SACf,YAAa,SACb,gBAAiB,kBACjB,gBAAiB,qBACjB,kBAAmB,2BACnB,cAAe,sBACf,KAAM,WACN,WAAY,gBACd,EACA,KAAM,CACJ,gBAAiB,oBACjB,eAAgB,iBAChB,iBAAkB,mCAClB,qBAAsB,iCACtB,iBAAkB,iBAClB,iBAAkB,yBAClB,iBAAkB,QAClB,0BAA2B,aAC3B,QAAS,UACT,mBACE,ySACF,QAAS,eACT,mBAAoB,kEACpB,UAAW,aACX,qBAAsB,qCACtB,UAAW,WACX,cAAe,CACb,sBAAuB,mCACvB,iBAAkB,kBAClB,MAAO,oBACT,EACA,cAAe,yBACf,yBAA0B,oDAC1B,uBAAwB,oDACxB,oBAAqB,kBACrB,+BACE,8KACF,oCACE,4FACF,sCACE,8EACF,aAAc,oBACd,wBAAyB,kEACzB,aAAc,wBACd,qBAAsB,6BACtB,kBAAmB,kCACnB,eAAgB,QAChB,YAAa,kBACb,aAAc,cACd,oBAAqB,+BACrB,8BACE,mEACF,QAAS,UACT,iBAAkB,8BAClB,iBAAkB,8BAClB,kBAAmB,oBACnB,YAAa,iBACb,KAAM,WACN,OAAQ,YACR,aAAc,gCACd,kBAAmB,uBACnB,UAAW,mBACX,+BAAgC,yDAChC,eAAgB,eAChB,sBAAuB,wCACvB,eAAgB,0BAChB,+BAAgC,uCAChC,mCACE,mLACF,wBAAyB,yEACzB,mCACE,6DACF,kBAAmB,mCACnB,oBAAqB,eACrB,iBAAkB,CAChB,sBAAuB,gCACvB,aAAc,cACd,cAAe,mBACf,YAAa,mBACb,YAAa,eACb,cAAe,4BACf,kBAAmB,YACnB,0BAA2B,6CAC3B,WAAY,2CACZ,YAAa,oBACb,YAAa,gBACb,SAAU,cACV,SAAU,YACV,SAAU,WACV,kBAAmB,oBACnB,SAAU,yBACV,kBAAmB,0BACnB,gBAAiB,sBACjB,cAAe,YACf,OAAQ,SACR,sBACE,iFACF,6BACE,oIACJ,EACA,QAAS,CACP,aAAc,2DACd,SAAU,uBACV,UAAW,sBACX,UAAW,kBACX,gBAAiB,qBACjB,WAAY,OACZ,YAAa,sBACf,EACA,YAAa,CACX,YAAa,eACb,uBAAwB,6CACxB,MAAO,cACP,SAAU,gBACV,iBAAkB,oBAClB,mBAAoB,WACpB,8BAA+B,kCACjC,CACF,EACA,YAAa,CACX,MAAO,OACP,eAAgB,eAClB,EACA,OAAQ,CACN,OAAQ,SACR,KAAM,UACN,SAAU,CACR,KAAM,YACN,MAAO,oBACT,EACA,aAAc,CACZ,KAAM,WACN,MAAO,aACT,EACA,WAAY,CACV,KAAM,UACN,MAAO,2BACT,EACA,aAAc,iBACd,wBAAyB,CACvB,QAAS,gBACT,KAAM,gCACR,EACA,sBAAuB,CACrB,QAAS,gBACT,KAAM,2CACR,EACA,YAAa,CACX,UAAW,WACX,aAAc,wBACd,cAAe,sBACf,SAAU,kBACV,UAAW,kBACX,SAAU,0BACV,UAAW,uBACX,WAAY,oBACZ,YAAa,mBACf,EACA,gBAAiB,CACf,KAAM,oBACN,MAAO,mBACT,EACA,uBAAwB,0BACxB,OAAQ,CACN,SAAU,MACV,OAAQ,OACV,EACA,SAAU,UACV,KAAM,UACN,GAAI,OACJ,IAAK,MACL,IAAK,KACP,EACA,UAAW,CACT,MAAO,SACP,YAAa,iBACb,OAAQ,CACN,KAAM,SACN,MAAO,QACT,EACA,cAAe,mBACf,cAAe,iBACjB,EACA,MAAO,CACL,QAAS,YACT,SAAU,MACV,2BAA4B,0CAC5B,6BAA8B,0CAC9B,WAAY,iBACZ,WAAY,iBACZ,YAAa,yBACb,aAAc,wBACd,cAAe,wBACf,UAAW,gBACX,eAAgB,4BAChB,YAAa,gBACb,gBAAiB,qBACjB,gBAAiB,uBACjB,MAAO,OACP,oBAAqB,gBACrB,MAAO,QACP,UAAW,cACX,cAAe,mBACf,YAAa,iBACf,CACF,CACF,EACA,QAAS,CACP,YAAa,CACX,WAAY,CACV,aAAc,uBAChB,EACA,OAAQ,CACN,aAAc,YACd,YAAa,SACb,SAAU,gBACV,YAAa,eACb,OAAQ,WACR,MAAO,QACP,iBAAkB,iBAClB,qBAAsB,UACtB,aAAc,WACd,MAAO,OACP,QAAS,iBACT,UAAW,cACX,kBAAmB,iBACnB,aAAc,gBACd,cAAe,iBACjB,EACA,SAAU,CACR,QAAS,KACT,QAAS,QACX,EACA,SAAU,CACR,MAAO,oBACP,qBAAsB,iBACxB,EACA,YAAa,CACX,OAAQ,OACV,EACA,eAAgB,CACd,aAAc,CACZ,YAAa,YACb,KAAM,EACR,EACA,YAAa,CACX,YAAa,SACb,KAAM,EACR,EACA,UAAW,CACT,YAAa,UACb,KAAM,wCACR,EACA,UAAW,CACT,YAAa,eACb,KAAM,oRACR,EACA,gBAAiB,CACf,YAAa,mBACb,KAAM,8BACR,EACA,SAAU,CAAE,YAAa,iBAAkB,KAAM,EAAG,EACpD,YAAa,CAAE,YAAa,WAAY,KAAM,EAAG,EACjD,mBAAoB,CAAE,YAAa,sBAAuB,KAAM,EAAG,EACnE,SAAU,CACR,YAAa,gBACb,KAAM,yCACR,EACA,YAAa,CAAE,YAAa,SAAU,KAAM,IAAK,CACnD,EACA,SAAU,CACR,UAAW,KACX,iBAAkB,KACpB,EACA,OAAQ,CACN,IAAK,KACL,GAAI,MACJ,SAAU,WACV,MAAO,QACP,SAAU,UACV,SAAU,UACV,oBAAqB,sBACrB,oBAAqB,yBACrB,OAAQ,OACR,QAAS,UACT,YAAa,MACb,aAAc,OACd,eAAgB,YAChB,cAAe,WACf,YAAa,MACb,cAAe,YACf,YAAa,SACb,gBAAiB,kBACjB,gBAAiB,qBACjB,kBAAmB,8BACnB,cAAe,qBACf,KAAM,UACN,WAAY,kBACd,EACA,KAAM,CACJ,gBAAiB,2BACjB,eAAgB,eAChB,iBAAkB,+BAClB,qBAAsB,iCACtB,iBAAkB,yBAClB,iBAAkB,wBAClB,iBAAkB,OAClB,0BAA2B,WAC3B,QAAS,WACT,mBACE,ySACF,QAAS,UACT,mBAAoB,6DACpB,UAAW,SACX,qBAAsB,oCACtB,UAAW,aACX,cAAe,CACb,sBAAuB,6BACvB,iBAAkB,kBAClB,MAAO,kBACT,EACA,cAAe,qBACf,yBAA0B,kDAC1B,uBAAwB,kDACxB,oBAAqB,kBACrB,+BACE,iKACF,oCACE,sFACF,sCACE,4DACF,aAAc,gBACd,wBAAyB,iDACzB,aAAc,gBACd,qBAAsB,kBACtB,kBAAmB,4BACnB,eAAgB,QAChB,YAAa,eACb,aAAc,eACd,oBAAqB,uBACrB,8BACE,6DACF,QAAS,UACT,iBAAkB,6BAClB,iBAAkB,4BAClB,kBAAmB,wBACnB,YAAa,eACb,KAAM,UACN,OAAQ,SACR,aAAc,sBACd,kBAAmB,eACnB,UAAW,aACX,+BAAgC,6CAChC,eAAgB,eAChB,sBAAuB,oCACvB,eAAgB,mBAChB,+BAAgC,6CAChC,mCACE,2KACF,wBACE,yEACF,mCACE,+DACF,kBAAmB,0BACnB,oBAAqB,MACrB,iBAAkB,CAChB,sBAAuB,kCACvB,aAAc,eACd,cAAe,aACf,YAAa,sBACb,YAAa,cACb,cAAe,iBACf,kBAAmB,iBACnB,0BAA2B,oDAC3B,WAAY,mCACZ,YAAa,sBACb,YAAa,kBACb,SAAU,aACV,SAAU,YACV,UAAW,YACX,kBAAmB,qBACnB,SAAU,kBACV,kBAAmB,yBACnB,gBAAiB,uBACjB,cAAe,0BACf,OAAQ,MACR,sBACE,wEACF,6BACE,+HACJ,EACA,QAAS,CACP,aAAc,kDACd,SAAU,kBACV,UAAW,2BACX,UAAW,oBACX,gBAAiB,oBACjB,WAAY,OACZ,YAAa,oBACf,EACA,YAAa,CACX,YAAa,cACb,uBAAwB,qDACxB,MAAO,cACP,SAAU,eACV,iBAAkB,uBAClB,mBAAoB,YACpB,8BAA+B,kCACjC,CACF,EACA,YAAa,CACX,MAAO,OACP,eAAgB,eAClB,EACA,OAAQ,CACN,OAAQ,SACR,KAAM,SACN,SAAU,CACR,KAAM,UACN,MAAO,sBACT,EACA,aAAc,CACZ,KAAM,SACN,MAAO,YACT,EACA,WAAY,CACV,KAAM,SACN,MAAO,8BACT,EACA,aAAc,kBACd,wBAAyB,CACvB,QAAS,mBACT,KAAM,8BACR,EACA,sBAAuB,CACrB,QAAS,mBACT,KAAM,2CACR,EACA,YAAa,CACX,UAAW,WACX,aAAc,qBACd,cAAe,oBACf,SAAU,iBACV,UAAW,kBACX,SAAU,wBACV,UAAW,wBACX,WAAY,0BACZ,YAAa,2BACf,EACA,gBAAiB,CACf,KAAM,qBACN,MAAO,oBACT,EACA,uBAAwB,yBACxB,OAAQ,CACN,SAAU,MACV,OAAQ,OACV,EACA,SAAU,eACV,KAAM,MACN,GAAI,MACJ,IAAK,MACL,IAAK,KACP,EACA,UAAW,CACT,MAAO,SACP,YAAa,qBACb,OAAQ,CACN,KAAM,SACN,MAAO,QACT,EACA,cAAe,oBACf,cAAe,gBACjB,EACA,MAAO,CACL,QAAS,YACT,SAAU,MACV,2BAA4B,4CAC5B,6BAA8B,4CAC9B,WAAY,cACZ,WAAY,aACZ,YAAa,wBACb,aAAc,uBACd,cAAe,gBACf,UAAW,cACX,eAAgB,6BAChB,YAAa,eACb,gBAAiB,oBACjB,gBAAiB,uBACjB,MAAO,OACP,oBAAqB,gBACrB,MAAO,QACP,UAAW,iBACX,cAAe,oBACf,YAAa,gBACf,CACF,CACF,EACA,QAAS,CACP,YAAa,CACX,WAAY,CACV,aAAc,oBAChB,EACA,OAAQ,CACN,aAAc,eACd,YAAa,QACb,SAAU,YACV,YAAa,eACb,OAAQ,SACR,MAAO,QACP,iBAAkB,sBAClB,qBAAsB,UACtB,aAAc,gBACd,MAAO,QACP,QAAS,UACT,UAAW,aACX,kBAAmB,gBACnB,aAAc,kBACd,qBAAsB,kBACxB,EACA,SAAU,CACR,QAAS,KACT,QAAS,UACX,EACA,SAAU,CACR,MAAO,oBACP,qBAAsB,sBACxB,EACA,YAAa,CACX,OAAQ,QACV,EACA,eAAgB,CACd,aAAc,CACZ,YAAa,QACb,KAAM,EACR,EACA,YAAa,CACX,YAAa,QACb,KAAM,EACR,EACA,UAAW,CACT,YAAa,UACb,KAAM,uCACR,EACA,UAAW,CACT,YAAa,aACb,KAAM,wRACR,EACA,gBAAiB,CACf,YAAa,mBACb,KAAM,oCACR,EACA,SAAU,CAAE,YAAa,mBAAoB,KAAM,EAAG,EACtD,YAAa,CAAE,YAAa,UAAW,KAAM,EAAG,EAChD,mBAAoB,CAAE,YAAa,sBAAuB,KAAM,EAAG,EACnE,SAAU,CACR,YAAa,YACb,KAAM,oDACR,EACA,YAAa,CAAE,YAAa,QAAS,KAAM,IAAK,CAClD,EACA,SAAU,CACR,UAAW,KACX,iBAAkB,KACpB,EACA,OAAQ,CACN,IAAK,MACL,GAAI,KACJ,SAAU,WACV,MAAO,QACP,SAAU,YACV,SAAU,YACV,oBAAqB,wBACrB,oBAAqB,wBACrB,OAAQ,SACR,QAAS,UACT,YAAa,MACb,aAAc,OACd,eAAgB,YAChB,cAAe,WACf,YAAa,MACb,cAAe,MACf,YAAa,MACb,gBAAiB,mBACjB,gBAAiB,mBACjB,kBAAmB,wBACnB,cAAe,mBACf,KAAM,OACN,WAAY,iBACd,EACA,KAAM,CACJ,gBAAiB,mBACjB,eAAgB,kBAChB,iBAAkB,+BAClB,qBAAsB,qCACtB,iBAAkB,qBAClB,iBAAkB,sBAClB,iBAAkB,MAClB,0BAA2B,WAC3B,QAAS,WACT,mBACE,gRACF,QAAS,WACT,mBACE,+EACF,UAAW,YACX,qBAAsB,wCACtB,UAAW,YACX,cAAe,CACb,sBAAuB,+BACvB,iBAAkB,oBAClB,MAAO,iBACT,EACA,cAAe,sBACf,yBAA0B,yCAC1B,uBAAwB,yCACxB,oBAAqB,wBACrB,+BACE,wKACF,oCACE,2FACF,sCACE,0DACF,aAAc,gBACd,wBACE,6DACF,aAAc,gBACd,qBAAsB,yBACtB,kBAAmB,0BACnB,eAAgB,QAChB,YAAa,gBACb,aAAc,gBACd,oBAAqB,iBACrB,8BACE,sDACF,QAAS,UACT,iBAAkB,yBAClB,iBAAkB,yBAClB,kBAAmB,sBACnB,YAAa,eACb,KAAM,OACN,OAAQ,SACR,aAAc,mBACd,kBAAmB,YACnB,UAAW,YACX,+BAAgC,+CAChC,eAAgB,kBAChB,uBAAwB,6BACxB,eAAgB,kBAChB,+BAAgC,sCAChC,mCACE,oLACF,wBAAyB,gDACzB,mCACE,wDACF,kBAAmB,yBACnB,oBAAqB,MACrB,iBAAkB,CAChB,sBAAuB,0BACvB,aAAc,eACd,cAAe,aACf,YAAa,eACb,YAAa,eACb,cAAe,iBACf,kBAAmB,sBACnB,0BAA2B,kDAC3B,WAAY,uCACZ,YAAa,eACb,YAAa,eACb,SAAU,aACV,SAAU,gBACV,SAAU,WACV,kBAAmB,qBACnB,SAAU,aACV,kBAAmB,sBACnB,gBAAiB,oBACjB,cAAe,YACf,OAAQ,MACR,sBACE,6EACF,6BACE,uHACJ,EACA,QAAS,CACP,aAAc,+CACd,SAAU,YACV,UAAW,qBACX,UAAW,qBACX,gBAAiB,oBACjB,WAAY,OACZ,YAAa,kBACf,EACA,YAAa,CACX,YAAa,cACb,uBAAwB,yCACxB,MAAO,aACP,SAAU,iBACV,iBAAkB,oBAClB,mBAAoB,WACpB,8BAA+B,sCACjC,CACF,EACA,YAAa,CACX,MAAO,QACP,eAAgB,eAClB,EACA,OAAQ,CACN,OAAQ,SACR,KAAM,OACN,SAAU,CACR,KAAM,YACN,MAAO,mBACT,EACA,aAAc,CACZ,KAAM,SACN,MAAO,aACT,EACA,WAAY,CACV,KAAM,OACN,MAAO,mBACT,EACA,aAAc,gBACd,wBAAyB,CACvB,QAAS,aACT,KAAM,gCACR,EACA,sBAAuB,CACrB,QAAS,aACT,KAAM,wCACR,EACA,YAAa,CACX,UAAW,YACX,aAAc,qBACd,cAAe,qBACf,SAAU,iBACV,UAAW,kBACX,SAAU,sBACV,UAAW,sBACX,WAAY,mBACZ,YAAa,mBACf,EACA,gBAAiB,CACf,KAAM,oBACN,MAAO,mBACT,EACA,uBAAwB,0BACxB,OAAQ,CACN,SAAU,MACV,OAAQ,MACV,EACA,SAAU,YACV,KAAM,OACN,GAAI,KACJ,IAAK,MACL,IAAK,KACP,EACA,UAAW,CACT,MAAO,SACP,YAAa,kBACb,OAAQ,CACN,KAAM,SACN,MAAO,QACT,EACA,cAAe,iBACf,cAAe,eACjB,EACA,MAAO,CACL,QAAS,aACT,SAAU,MACV,2BAA4B,2CAC5B,6BAA8B,2CAC9B,WAAY,cACZ,WAAY,cACZ,YAAa,oBACb,aAAc,oBACd,cAAe,iBACf,UAAW,aACX,eAAgB,wBAChB,YAAa,eACb,gBAAiB,oBACjB,gBAAiB,uBACjB,MAAO,QACP,oBAAqB,kBACrB,MAAO,QACP,UAAW,aACX,cAAe,iBACf,YAAa,eACf,CACF,CACF,CACF,CACF,EACA,IAAM,CACJE,EAAQ,EAAI,CACd,CACF,CACF,CAAC,EDx4BH,IAAME,GAA4BC,GAA4B,CAC5D,GAAM,CAACC,EAAaC,CAAc,KAAI,aAAS,IAAM,CAAC,CAAC,GAAAC,QAAK,aAAa,EAEnEC,KAAa,gBAAY,MAAOC,GAAmB,CACvD,MAAMC,GAAeD,CAAC,EACtBH,EAAe,EAAI,CACrB,EAAG,CAAC,CAAC,EAEL,uBAAU,IAAM,CACT,GAAAC,QAAK,eACRC,EAAWJ,CAAU,CAEzB,EAAG,CAAC,CAAC,EAEEC,CACT,EAEOM,GAAQR,GtENf,IAAAS,GAAoB,kBAgBdC,GAAc,CAAC,CACnB,WAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,oBAAAC,EACA,0BAAAC,EACA,kBAAAC,EACA,kBAAAC,CACF,IAAwB,CACtB,GAAM,CAAE,MAAAC,EAAO,UAAAC,EAAW,YAAAC,EAAa,eAAAC,EAAgB,aAAAC,CAAa,EAAIC,GAAU,EAC5EC,EAAcC,GAAyBlB,CAAU,KAEvD,aAAU,IAAM,CACVQ,IACF,SAAS,MAAQA,GAEnBO,EACE,OAAOb,GAAuB,SAC1B,IAAI,gBAAgBA,CAAkB,EACtCA,CACN,CACF,EAAG,CAAC,CAAC,EAEL,IAAMiB,KAAgB,eAAaC,GAAe,CAChDC,EAAO,QAAQ,cAAeD,CAAE,EAC5BV,GACFA,EAAkBU,CAAE,CAExB,EAAG,CAAC,CAAC,EAECE,KAAe,eAAY,IAAM,CACrC,IAAMC,EAAY,IAAI,gBAAgBV,EAAY,YAAY,EAC9DU,EAAU,OAAO,OAAO,EACxBT,EAAeS,EAAU,SAAS,CAAC,CACrC,EAAG,CAACV,EAAY,YAAY,CAAC,EAEvBW,KAAc,WAAQ,IAAMX,EAAY,aAAa,IAAI,OAAO,EAAG,CAACD,CAAS,CAAC,EAEpF,OAAKK,EAGH,EAAAQ,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACC,GAAA,KACE,CAACrB,GACA,EAAAoB,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACI,GAAA,IAAa,CAChB,CACF,EAEDL,GACC,EAAAC,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACK,GAAA,CAAW,QAASR,GAAeE,CAAY,CAClD,CACF,EAED,CAACjB,GACA,EAAAkB,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACM,GAAA,CAAO,WAAY9B,EAAY,WAAYD,EAAY,CAC1D,CACF,EAEF,EAAAyB,QAAA,cAACE,GAAA,CAAY,OAAM,GAAC,UAAS,GAAC,UAAU,wCACtC,EAAAF,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACO,GAAA,KACC,EAAAP,QAAA,gBAAAA,QAAA,cACGd,GACC,EAAAc,QAAA,cAACQ,GAAA,CAAS,SAAS,QAAQ,KAAI,GAAC,QAAQ,4BAAwB,gCAEhE,EAED,CAACtB,GAASC,GAAaA,EAAU,OAAS,GACzC,EAAAa,QAAA,cAACS,GAAA,CACC,UAAW/B,EACX,UAAWC,EACX,YAAae,EACb,UAAWP,EACX,iBAAkBN,EAClB,kBAAmBG,EACrB,EAED,CAACE,GAASC,GAAaA,EAAU,SAAW,GAC3C,EAAAa,QAAA,cAACQ,GAAA,CACC,SAAS,UACT,KAAI,GACJ,QAAS,GAAAE,QAAQ,EAAE,wCAAwC,GAAK,QAE/D,GAAAA,QAAQ,EAAE,qCAAqC,CAClD,CAEJ,CACF,CACF,CACF,CACF,EACA,EAAAV,QAAA,cAACW,GAAA,CAAc,GAAIC,GAAgB,cAAe,CACpD,EA5DuB,IA8D3B,EAEOC,GAAQvC,GwE1If,IAAAwC,EAAyE,gBACzEC,GAAyB,6BCDzB,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,EAMdC,GAAO,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAMTE,EAAK,EAAG,CAAC;AAAA;AAAA,EAIdC,GAAQ,GAAAH,QAAO;AAAA;AAAA,EAIfI,GAAQ,GAAAJ,QAAO;AAAA;ECxB5B,IAAAK,GAAmB,4BAENC,GAAQ,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,2DACb,EAAE;AAAA;AAAA,EAIWC,GAAW,GAAAD,QAAO;AAAA,WACnBE,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;EFHvD,IAAAC,GAA+B,mBAOzBC,GAAa,CAAC,CAAE,MAAAC,EAAO,SAAAC,CAAS,IAAuB,CAC3D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KAAeL,EAAE,aAAa,CAAE,CACnC,EACA,GAAAC,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KACEC,EAAgBV,CAAK,EAAE,IAAEE,EAAE,kBAAkB,CAChD,CACF,CACF,EACCD,IAAa,QACZ,GAAAE,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,IAAM,EACP,GAAAH,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACQ,GAAA,KACED,EAAgBV,EAAQC,CAAQ,EAAE,IAAEC,EAAE,kBAAkB,CAC3D,CACF,CACF,CAEJ,CAEJ,EAEOU,GAAQb,GGzCf,IAAAc,GAAuB,gBCAvB,IAAAC,GAA4B,4BAQrB,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA,eAEZC,EAAK,GAAG,CAAC;AAAA,gBACRA,EAAK,CAAC,CAAC;AAAA;AAAA,IAEnB,CAAC,CAAE,KAAAC,CAAK,IACRA,GACA;AAAA,mBACeD,EAAK,EAAE,CAAC;AAAA,KACtB;EDNL,IAAME,GAAU,CAAC,CAAE,KAAAC,EAAM,OAAAC,EAAQ,IAAAC,EAAK,KAAAC,CAAK,IAAgB,CACzD,IAAIC,EAAaJ,EAEjB,OAAIC,IACFG,EAAa,GAAGH,CAAM,OAGjB,iBAACI,GAAA,CAAK,IAAKL,EAAM,OAAQI,EAAY,IAAKF,EAAK,KAAMC,EAAM,CACpE,EAEOG,GAAQP,GErBf,IAAAQ,GAAkB,gBCAlB,IAAAC,GAA4B,4BAWrB,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAUZC,EAAK,CAAC,CAAC;AAAA,qBACJA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAYRA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,cAKbA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBjB,CAAC,CAAE,MAAAC,CAAM,IACTA,GACA;AAAA;AAAA,KAEC;EDnDL,IAAMC,GAAU,CAAC,CAAE,SAAAC,EAAU,MAAAC,EAAO,wBAAAC,CAAwB,IAC1D,GAAAC,QAAA,cAACC,GAAA,CAAQ,MAAOH,EAAO,wBAAyBC,GAC7CF,CACH,EAGKK,EAAQN,GEdf,IAAAO,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMzBC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,EAK3BC,GAAQ,GAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYfG,GAAS,GAAAH,QAAO;AAAA;AAAA;AAAA,gBAGbI,EAAK,CAAC,CAAC;AAAA;AAAA,IAElBH,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,kBACtBG,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZC,GAAgB,GAAAL,QAAO;AAAA;AAAA,mBAEjBI,EAAK,GAAG,CAAC;AAAA,EAGfE,GAAO,GAAAN,QAAO;AAAA;AAAA;AAAA,EAKdO,GAAO,GAAAP,QAAO,IAAI,MAAM,KAAO,CAC1C,UAAW,gCACb,EAAE,IAEWQ,GAAO,GAAAR,QAAO,MCnD3B,IAAAS,GAAkB,gBCAlB,IAAAC,GAAmB,4BAQZ,IAAMC,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,OACR,EAAE;AAAA;AAAA,WAESC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,sBAEIC,GAAkB,OAAOA,EAAM,KAAK,GAAG;AAAA;AAAA;AAAA;AAAA,sBAIvCA,GAAUA,EAAM,MAAM,MAAM,MAAM;EDVzD,IAAMC,GAAS,CAAC,CAAE,MAAAC,EAAO,IAAAC,CAAI,IAAa,GAAAC,QAAA,cAACC,GAAA,CAAQ,MAAOH,EAAO,aAAYC,EAAK,EAE3EG,GAAQL,GFCf,IAAMM,GAAa,CAAC,CAAE,SAAAC,EAAU,OAAAC,EAAQ,OAAAC,EAAQ,KAAAC,CAAK,IACnD,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAAON,CAAS,EAChBC,GACC,GAAAG,QAAA,cAACG,GAAA,KACEL,GACC,GAAAE,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAO,MAAOP,EAAQ,IAAK,GAAGD,CAAM,UAAW,CAClD,EAEF,GAAAG,QAAA,cAACM,GAAA,KACC,GAAAN,QAAA,cAACO,GAAA,KAAMV,CAAO,EACbE,GAAQ,GAAAC,QAAA,cAACQ,GAAA,KAAMT,CAAK,CACvB,CACF,CAEJ,EAGKU,GAAQd,GI/Bf,IAAAe,GAA6C,gBCA7C,IAAAC,GAA4B,4BAIrB,IAAMC,GAAU,GAAAC,QAAO,MAMjBC,GAAS,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAWfE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAIjB,CAAC,CAAE,SAAAC,CAAS,IACZA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMC;AAAA,EAGQC,GAAS,GAAAJ,QAAO;AAAA;AAAA;AAAA,gBAGbE,EAAK,CAAC,CAAC;ED5BvB,IAAMG,GAAgB,CAAC,CAAE,SAAAC,EAAU,YAAAC,EAAa,QAAAC,CAAQ,IAAa,CACnE,GAAM,CAACC,EAAQC,CAAS,KAAI,aAAS,EAAK,EACpCC,KAAW,gBAAY,IAAM,CACjCD,EAAU,EAAI,EACVF,GACFA,EAAQ,CAEZ,EAAG,CAAC,CAAC,EAUL,OACE,GAAAI,QAAA,cAACC,GAAA,CAAQ,IATIC,GAA+B,EAC1BA,GAAK,cAAgB,GAEvB,KACdJ,EAAU,EAAI,CAElB,GAII,GAAAE,QAAA,cAACG,GAAA,CAAO,SAAUN,GAASH,CAAS,EACnC,CAACG,GACA,GAAAG,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAY,QAASN,EAAU,MAAOJ,GACrC,GAAAK,QAAA,cAACM,EAAA,KAAeX,CAAY,CAC9B,CACF,CAEJ,CAEJ,EAEOY,GAAQd,GE1Cf,IAAAe,EAA8D,gBAC9DC,GAAmB,sBACnBC,GAA2B,qCCF3B,IAAAC,GAA4B,4BAM5B,IAAMC,GAAgB,GAETC,GAAU,GAAAC,QAAO;AAAA,IACzBC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,MACpCF,EAAS;AAAA,qBACMG,EAAK,EAAE,CAAC;AAAA,sBACPA,EAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA,IAIzBD,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,MACpCF,EAAS;AAAA,qBACMG,EAAK,EAAE,CAAC;AAAA,sBACPA,EAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA,IAIzBD,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,qBAEnBH,EAAa;AAAA;AAAA,EAIrBK,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKtBC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,0BACbA,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBhDG,GAAM,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,WAKfF,EAAa;AAAA,kBACNI,EAAK,CAAC,CAAC;AAAA;AAAA,IAEpBD,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAU5BC,EAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,EAMVG,GAAO,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUtBC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,0BACfA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAKlDK,GAAgB,GAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAe/BC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBASpBC,EAAK,CAAC,CAAC,UAAWD,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAS9DI,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQCE,GAAQ,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcfQ,GAAY,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY1BS,GAAQ,GAAAT,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKhBC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,EAK7BS,MAAY,GAAAV,SAAOS,EAAK;AAAA,UAC3BP,EAAK,CAAC,CAAC;AAAA,EAGJS,MAAa,GAAAX,SAAOS,EAAK;AAAA,WAC3BP,EAAK,CAAC,CAAC;AAAA,EAKLU,GAAW,GAAAZ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBlBa,GAAe,GAAAb,QAAO,GAAG,MAAM,KAAO,CACjD,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA,kBAIgBE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGrB,CAAC,CAAE,OAAAY,CAAO,IACVA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAWC;AAAA,EAGQC,MAAc,GAAAf,SAAOgB,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiChCC,GAAc,GAAAjB,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYrBkB,GAAqB,GAAAlB,QAAO;AAAA;AAAA,YAE7BE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,EAQNiB,GAAyB,GAAAnB,QAAO;AAAA;AAAA,YAEjCE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;ECzRnB,IAAAkB,GAAmB,4BAKZ,IAAMC,MAAY,GAAAC,SAAOC,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA,WAKhCC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,sBAEIC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA,WACzCA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECdhD,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMjBC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAIfC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,eAC3BD,EAAK,CAAC,CAAC;AAAA;AAAA,EAITE,GAAU,GAAAH,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUWI,GAAO,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA,kBAITC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZI,GAAM,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA,6BAIGC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAI/BC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,+BACXD,EAAK,CAAC,CAAC;AAAA;AAAA,EAIzBK,MAAW,GAAAN,SAAOO,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA,SAKjCN,EAAK,CAAC,CAAC;AAAA,WACLA,EAAK,CAAC,CAAC;AAAA,WACPA,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,sBAEIC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAa5BA,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgB5DA,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,WAC/BD,EAAK,CAAC,CAAC;AAAA,aACLA,EAAK,CAAC,CAAC;AAAA;EC9FpB,IAAAO,GAAkB,gBCAlB,IAAAC,GAAkB,gBCAX,IAAMC,GAAcC,GAAwB,CACjD,IAAMC,EAAS,UACTC,EAAQF,EAAI,MAAMC,CAAM,EAC9B,OAAOC,GAASA,EAAM,CAAC,EAAE,OAAS,EAAIA,EAAM,CAAC,EAAI,EACnD,EAEaC,GAAgBH,GAAwB,CACnD,IAAMC,EAAS,8EACTC,EAAQF,EAAI,MAAMC,CAAM,EAC9B,OAAOC,GAASA,EAAM,CAAC,EAAE,SAAW,GAAKA,EAAM,CAAC,EAAI,EACtD,EAEME,GAAc,8BACPC,GAAuBL,GAAgB,CAClD,IAAMM,EAAKH,GAAaH,CAAG,EAC3B,GAAKM,EAGL,MAAO,CACL,cAAe,GAAGF,EAAW,GAAGE,CAAE,qBAClC,UAAW,GAAGF,EAAW,GAAGE,CAAE,iBAC9B,UAAW,GAAGF,EAAW,GAAGE,CAAE,gBAChC,CACF,EAEaC,GAAc,CACzB,EACAC,IACG,CAEDA,GAAW,SAAW,GACtB,EAAE,cAAc,MAAQA,EAAU,CAAC,GACnC,EAAE,cAAc,eAAiB,KACjC,EAAE,cAAc,gBAAkB,KAElC,EAAE,cAAc,IAAMA,EAAU,CAAC,EAErC,EAEaC,GAAe,CAC1B,EACAD,IACG,CACCA,GAAW,SAAW,IACxB,EAAE,cAAc,IAAMA,EAAU,CAAC,EAErC,EC9CA,IAAAE,GAAmB,4BAUNC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,YAGjBC,GAAWA,EAAM,UAAY,OAAS,CAAE;AAAA,oBAChCA,GAAmBA,EAAM,MAAQA,EAAM,MAAQ,QAAS;AAAA,EAGhEC,GAAS,GAAAF,QAAO,OAAO,MAAM,KAAO,CAC/C,MAAO,OACP,OAAQ,OACR,gBAAiB,GACjB,YAAa,GACf,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;EFZF,IAAMG,GAAgB,CAAC,CAAE,IAAAC,EAAK,SAAAC,CAAS,IACrC,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,IAAK,iCAAiCC,GAAaL,CAAG,CAAC,yBACrDC,EAAW,cAAgB,EAC7B,GACF,CACF,EAGKK,GAAQP,GGpBf,IAAAQ,GAAkB,gBAUlB,IAAMC,GAAc,CAAC,CAAE,IAAAC,EAAK,SAAAC,CAAS,IACnC,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,IAAK,kCAAkCC,GAAWL,CAAG,CAAC,IACpDC,EAAW,cAAgB,EAC7B,sBACF,CACF,EAGKK,GAAQP,GCpBf,IAAAQ,GAAkB,gBCClB,IAAAC,GAAmB,4BASbC,GAAQ,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,gBAIL,CAAC,CAAE,MAAAC,CAAM,IAAOA,EAAQ,UAAY,OAAQ;AAAA,EAGrDC,GAAQH,GDLf,IAAMI,GAAe,CAAC,CAAE,IAAAC,EAAK,SAAAC,EAAU,MAAAC,EAAO,MAAAC,EAAQ,SAAU,UAAAC,CAAU,IAEtE,GAAAC,QAAA,cAACC,GAAA,CAAQ,MAAOH,EAAO,UAAWC,GAChC,GAAAC,QAAA,cAACE,GAAA,CACC,IAAKP,EACL,MAAOE,EACP,QAAQ,WACR,SAAUD,EACV,MAAM,OACN,OAAO,OACP,IAAKD,EACP,CACF,EAGGQ,GAAQT,GLrBf,IAAMU,GAAU,CAAC,cAAe,UAAU,EACpCC,GAAkBC,GACtBF,GAAQ,KAAMG,GAA0BD,EAAI,QAAQC,CAAI,GAAK,CAAC,EAE1DC,GAAS,CAAC,WAAW,EACrBC,GAAgBH,GACpBE,GAAO,KAAMD,GAA0BD,EAAI,QAAQC,CAAI,GAAK,CAAC,EAQzDG,GAAc,CAAC,CAAE,IAAAJ,EAAK,SAAAK,EAAW,GAAO,SAAAC,EAAW,EAAK,IACvDN,EAEDD,GAAeC,CAAG,EAAU,GAAAO,QAAA,cAACC,GAAA,CAAc,IAAKR,EAAK,SAAUK,EAAU,EAEzEF,GAAaH,CAAG,EAAU,GAAAO,QAAA,cAACE,GAAA,CAAY,IAAKT,EAAK,SAAUK,EAAU,EAElE,GAAAE,QAAA,cAACG,GAAA,CAAa,MAAM,SAAS,SAAUJ,EAAU,IAAKN,EAAK,EANjD,KASZW,GAAQP,GO9Bf,IAAAQ,GAAkB,gBCAlB,IAAAC,GAA2D,gBCA3D,IAAAC,GAAmB,4BAInB,IAAMC,GAAcC,EAAK,CAAC,EACpBC,GAAiBD,EAAK,CAAC,EAEhBE,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOLC,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMlDL,EAAW;AAAA,cACVA,EAAW;AAAA;AAAA,cAEXC,EAAK,CAAC,CAAC;AAAA,YACTA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,wBAIMI,GAAUA,EAAM,MAAM,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAuBnDJ,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAOCA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aASdC,EAAc;AAAA,cACbA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA,aAKdG,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAiCrCH,EAAc;AAAA,cACbA,EAAc;AAAA,wBACHG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,aACjDA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAsDrCH,EAAc;AAAA,cACbA,EAAc;AAAA;AAAA;AAAA;AAAA,aAIdG,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAyBrBA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAWnDJ,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,eAINA,EAAK,IAAI,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,wBAGXI,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,aACjDA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKvBA,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAgCxCA,GAAUA,EAAM,MAAM,MAAM,SAAS;AAAA;EDpP9D,IAAMC,MAAY,SAAK,IAAM,OAAO,2BAA2B,CAAC,EAU1DC,GAAe,CAAC,CAAE,GAAAC,EAAI,IAAAC,EAAK,QAAAC,EAAS,SAAAC,EAAU,QAAAC,CAAQ,IAAiB,CAC3E,GAAM,CAACC,CAAM,KAAI,aAAS,KAAK,MAAM,IAAY,KAAK,OAAO,EAAI,GAAS,CAAC,EAC3E,uBAAU,IAAM,CACd,WAAW,IAAM,CACf,GAAID,EAAS,CACX,IAAME,EAAW,SAAS,cAAc,mBAAmB,EACvDA,GAAUA,EAAS,iBAAiB,QAASF,CAAO,CAC1D,CACF,EAAG,GAAG,CACR,EAAG,CAAC,CAAC,EAGH,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAAC,aAAS,SAAU,GAAAA,QAAA,cAACE,GAAA,IAAO,GAC1B,GAAAF,QAAA,cAACT,GAAA,CACC,GAAI,KAAKE,CAAE,IAAIK,CAAM,GACrB,SAAUJ,EACV,KAAM,IACN,SAAUE,EACV,QAAO,GACP,MAAO,OACP,QAASD,EACX,CACF,CACF,CAEJ,EAEOQ,GAAQX,GDrCf,IAAMY,GAAiB,CAAC,CAAE,IAAAC,CAAI,IAAiB,GAAAC,QAAA,cAACC,GAAA,CAAa,GAAIF,EAAK,IAAKA,EAAK,QAASA,EAAK,EAEvFG,GAAQJ,GGTf,IAAAK,GAA6C,gBCA7C,IAAAC,GAAkB,gBAUlB,IAAMC,GAAc,CAAC,CAAE,KAAAC,EAAM,QAAAC,CAAQ,IACnC,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAgB,QAASH,EAAS,MAAOD,GACxC,GAAAE,QAAA,cAACG,EAAA,KAAeL,CAAK,CACvB,CACF,EAGKM,GAAQP,GClBf,IAAAQ,GAA2E,gBAErEC,GAAwB,CAACC,EAAoBC,EAAeC,IAA2B,CAC3F,IAAMC,GAASH,EAAaC,GAASC,EACrC,OAAIC,EAAQ,EACHA,EAAQD,EAGVC,CACT,EAQMC,GAAW,CAAC,CAAE,SAAAC,CAAS,IAAiB,CAC5C,IAAML,KAAa,WAAO,CAAC,EACrBM,KAAkB,WAAe,EACjCC,KAAM,WAAO,CAAC,EAEd,CAACC,EAAOC,CAAQ,KAAI,aAAS,CACjC,QAAS,EACT,iBAAkB,EACpB,CAAC,KAED,cAAU,KACR,SAAS,iBAAiB,UAAWC,CAAQ,EAEtC,IAAM,CACX,OAAO,SAAS,oBAAoB,UAAWA,CAAQ,EACvD,OAAO,SAAS,KAAK,oBAAoB,YAAaC,CAAS,EAC/D,OAAO,SAAS,KAAK,oBAAoB,UAAWC,CAAO,CAC7D,GACC,CAAC,CAAC,EAEL,IAAMC,EAAaC,GAAyB,CAC1C,IAAMC,EAAa,OAAOT,EAAgB,SAAY,SAEtD,GADAQ,EAAM,eAAe,EACjBC,EACF,OAGF,IAAMC,EAAa,YAAS,MAAMX,CAAQ,EAEpC,CAAE,YAAAY,CAAY,EAAIH,EAAM,cACxBI,EAAUC,EAAyBL,CAAK,EACxCP,EAAMU,EACNG,GAASF,GAAWZ,EAAgB,SAAW,GAC/CL,GAAQ,KAAK,MAAOmB,GAASb,EAAOS,CAAU,EACpDK,EAAgBtB,GAAsBC,EAAW,QAASC,GAAOe,CAAU,CAAC,CAC9E,EAEML,EAAaG,GAAyB,CAC1C,IAAMC,EAAa,OAAOT,EAAgB,SAAY,SAEtD,GADAQ,EAAM,eAAe,EACjBC,GAAc,CAACP,EAAM,iBAAkB,OAE3C,IAAMQ,EAAa,YAAS,MAAMX,CAAQ,EAGpCe,EADUD,EAAyBL,CAAK,GACpBR,EAAgB,SAAW,GAC/CL,EAAQ,KAAK,MAAOmB,EAASb,EAAI,QAAWS,CAAU,EAC5DK,EAAgBtB,GAAsBC,EAAW,QAASC,EAAOe,CAAU,CAAC,CAC9E,EAEMJ,EAAU,IAAM,CACpB,OAAO,SAAS,KAAK,oBAAoB,YAAaD,CAAS,EAC/D,OAAO,SAAS,KAAK,oBAAoB,UAAWC,CAAO,EAE3DN,EAAgB,QAAU,OAC1BN,EAAW,QAAU,CACvB,EAEMsB,EAAcR,GAAyB,CAC3CA,EAAM,eAAe,EACrBR,EAAgB,QAAUa,EAAyBL,CAAK,EACxDd,EAAW,QAAUQ,EAAM,QAE3B,GAAM,CAAE,YAAAS,CAAY,EAAIH,EAAM,cAC9BP,EAAI,QAAUU,EAEd,OAAO,SAAS,KAAK,iBAAiB,YAAaN,CAAS,EAC5D,OAAO,SAAS,KAAK,iBAAiB,UAAWC,CAAO,CAC1D,EAEMF,EAAYI,GAAyB,CACzCA,EAAM,eAAe,EACrBR,EAAgB,QAAU,OAC1BN,EAAW,QAAU,CACvB,EAEMuB,EAAe,IAAM,CACrBf,EAAM,kBAAkBC,EAAS,CAAE,GAAGD,EAAO,iBAAkB,EAAM,CAAC,CAC5E,EAEMgB,EAAe,IAAM,CACpBhB,EAAM,kBAAkBC,EAAS,CAAE,GAAGD,EAAO,iBAAkB,EAAK,CAAC,CAC5E,EAEMa,EAAmBI,GAAoB,CACvCA,IAAYjB,EAAM,SACpBC,EAAS,CAAE,GAAGD,EAAO,QAAAiB,CAAQ,CAAC,CAElC,EAEMN,EAA4BL,GAAiC,CACjE,GAAM,CAAE,QAAAY,CAAQ,EAAIZ,EAAM,KAAK,QAAQ,OAAO,IAAM,EAAIA,EAAM,eAAe,CAAC,EAAIA,EAC5E,CAAE,WAAAa,CAAW,EAAIb,EAAM,cAC7B,OAAOY,EAAUC,CACnB,EAEA,OACE,GAAAC,QAAA,cAAC,OACC,aAAcN,EACd,YAAaT,EACb,WAAYH,EACZ,YAAaY,EACb,YAAaT,EACb,aAAcU,EACd,aAAcC,GAEb,YAAS,IAAInB,EAAU,CAACwB,EAAOC,OAC9B,iBAAaD,EAA6B,CACxC,MAAO,CACL,MAAO,OACP,QAASrB,EAAM,UAAYsB,EAAI,QAAU,MAC3C,CACF,CAAC,CACH,CACF,CAEJ,EAEOC,GAAQ3B,GFlIf,IAAA4B,GAA+B,mBAMzBC,GAAqB,CAAC,CAAE,KAAAC,CAAK,IAAiB,CAClD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EAEtCC,KAAU,gBAAY,IAAMD,EAAW,EAAI,EAAG,CAAC,CAAC,EAEtD,OAAKD,EAUH,GAAAG,QAAA,cAACC,GAAA,KACEL,EAAK,IAAI,CAACM,EAAOC,IAChB,GAAAH,QAAA,cAACI,GAAA,CAAI,IAAKF,EAAO,IAAKA,EAAO,IAAK,EAAE,oBAAqB,CAAE,MAAOC,EAAI,CAAE,CAAC,GAAK,GAAI,CACnF,CACH,EAZE,GAAAH,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACI,GAAA,CAAI,IAAKR,EAAK,CAAC,EAAG,IAAI,MAAM,EAC7B,GAAAI,QAAA,cAACM,GAAA,CAAY,KAAM,EAAE,uBAAuB,EAAG,QAASP,EAAS,CACnE,CAWN,EAEOQ,GAAQZ,GZ3Bf,IAAAa,GAA+B,mBAQzBC,GAAW,CAAC,CAAE,MAAAC,EAAO,MAAAC,EAAO,QAAAC,CAAQ,IAAqB,CAC7D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAASC,GAA+B,CACxCA,GACF,WAAW,IAAM,CACfA,EAAI,eAAe,CACrB,EAAG,GAAG,CAEV,EAQA,OACE,GAAAC,QAAA,cAACC,GAAA,CAAQ,IAAMF,GAAQA,GAAK,MAAM,EAAG,UAPpBG,GAA2C,CACxDA,EAAE,UAAY,IAChBN,EAAQ,CAEZ,EAG6D,SAAU,GACnE,GAAAI,QAAA,cAACG,GAAA,CAAQ,QAASP,EAAS,cAAW,GAAC,EACtCD,EAAM,IAAI,CAACS,EAAGC,IACb,GAAAL,QAAA,cAACM,GAAA,CAAK,IAAKD,EAAG,IAAKX,IAAUW,EAAIP,EAAQ,QACtCM,EAAE,OAAS,SACV,GAAAJ,QAAA,cAACO,GAAA,CACC,GAAI,kBAAkBF,CAAC,GACvB,IAAKD,EAAE,MAAM,CAAC,EAAE,IAChB,IAAKP,EAAE,oBAAqB,CAAE,MAAOQ,EAAI,CAAE,CAAC,GAAK,GACnD,EAEDD,EAAE,OAAS,cAAgB,GAAAJ,QAAA,cAACQ,GAAA,CAAmB,KAAMJ,EAAE,MAAM,IAAKK,GAAMA,EAAE,GAAG,EAAG,EAChFL,EAAE,OAAS,UAAY,GAAAJ,QAAA,cAACU,GAAA,CAAe,IAAKN,EAAE,MAAM,CAAC,EAAE,IAAK,EAC5DA,EAAE,OAAS,YAAc,GAAAJ,QAAA,cAACW,GAAA,CAAsB,IAAKP,EAAE,MAAM,CAAC,EAAE,IAAK,CACxE,CACD,EACD,GAAAJ,QAAA,cAACY,GAAA,CAAS,QAAShB,EAAS,MAAOC,EAAE,cAAc,GAAK,IACtD,GAAAG,QAAA,cAACa,GAAA,CAAW,MAAK,GAAC,CACpB,CACF,CAEJ,EAEOC,GAAQrB,GexDf,IAAAsB,GAA6C,gBCA7C,IAAAC,GAAoC,WCApC,IAAAC,GAAoC,WCApC,IAAAC,GAAiD,WAE3CC,GAAgD,CAAC,EAEjDC,GAAsBC,GAAiBF,KAAQE,CAAG,GAAW,OAC7DC,GAAkB,CAAID,EAAaE,IAAa,CACpDJ,GAAME,CAAG,EAAIE,CACf,EAQIC,GAAkE,CAAC,EACjEC,GAAoBC,GAAgB,CAAC,CAACF,GAAeE,CAAG,EACxDC,GAAoB,CAACD,EAAaE,IAA0C,CAChFJ,GAAiB,CACf,GAAGA,GACH,CAACE,CAAG,EAAGE,CACT,CACF,EACMC,GAAuBH,GAAgB,CAC3C,OAAOF,GAAeE,CAAG,CAC3B,EAQMI,GAAW,CACfC,EACAC,EACAC,EACAC,IACgB,CAChB,GAAM,CAACC,EAAMC,CAAO,KAAI,aAAwB,EAC1C,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EACtC,CAACC,EAAOC,CAAQ,KAAI,aAAS,EAAK,EAElCC,KAAU,gBAAY,SAAY,CACtC,IAAMpB,EAAMU,EAAK,SAAS,EACpBW,EAAStB,GAAmBC,CAAG,EAErC,GADAmB,EAAS,EAAK,EACVE,EAAQ,CACVN,EAAQM,CAAM,EACd,MACF,CACAJ,EAAW,EAAI,EACf,GAAI,CAEF,IAAMK,EADeT,GAAgBT,GAAiBJ,CAAG,EAC1BG,GAAeH,CAAG,EAAI,MAAMU,EAAMC,CAAO,EACpEE,GACFP,GAAkBN,EAAKsB,CAAO,EAGhC,IAAMC,EAAS,MAAMD,EACrB,GAAIC,EAAO,GAAI,CACb,IAAMC,EAAO,MAAMD,EAAO,MAAM,EAAE,KAAK,EACvCtB,GAAgBD,EAAKwB,CAAI,EACzBT,EAAQS,CAAI,CACd,CACF,MAAY,CACVL,EAAS,EAAI,CACf,QAAE,CACAF,EAAW,EAAK,EAChBT,GAAoBR,CAAG,CACzB,CAEF,EAAG,CAACU,EAAMC,CAAO,CAAC,EAElB,uBAAU,IAAM,CACTC,GACHQ,EAAQ,CAEZ,EAAG,CAACV,EAAME,CAAI,CAAC,EAER,CACL,QAAAI,EACA,KAAAF,EACA,MAAAI,CACF,CACF,EAEOO,GAAQhB,GD/Ef,IAAMiB,GAAoB,CAACC,EAAaC,IAAoB,CAC1D,GAAM,CAACC,EAAWC,CAAY,KAAI,aAAiB,EAC7C,CAAE,KAAAC,CAAK,EAAIC,GACf,iCAAiCL,CAAE,QACnC,CAAC,EACD,CAACA,GAAM,CAAC,CAACE,EACT,EACF,EAEA,uBAAU,IAAM,CACVE,IAAO,CAAC,IACNH,GAASG,EAAK,CAAC,EAAE,gBACnBD,EAAaC,EAAK,CAAC,EAAE,eAAe,EAC3BA,EAAK,CAAC,EAAE,iBACjBD,EAAaC,EAAK,CAAC,EAAE,eAAe,EAG1C,EAAG,CAACA,CAAI,CAAC,EAEFF,CACT,EAEOI,GAAQP,GD1Bf,IAAMQ,GAAe,CAACC,EAAqBC,IAAoB,CAC7D,GAAID,GAAK,YAAY,EAAE,SAAS,MAAM,EAAG,OAEzC,GAAM,CAACE,EAAWC,CAAY,KAAI,aAAmB,EAC/CC,EAAUJ,EAAMK,GAAWL,CAAG,EAAI,OAClCM,EAAiBC,GAAkBH,EAASH,CAAK,EAEvD,uBAAU,IAAM,CACd,GAAID,EAAK,CACP,IAAMQ,EAAmBC,GAAoBT,CAAG,EAC5CQ,GAEAL,EADEF,EACW,CAACO,EAAiB,SAAS,EAE3B,CAACA,EAAiB,cAAeA,EAAiB,SAAS,CAF/B,CAK/C,CACF,EAAG,CAACR,CAAG,CAAC,EAEDM,EAAiB,CAACA,CAAc,EAAIJ,CAC7C,EAEOQ,GAAQX,GG3Bf,IAAAY,GAAuB,gBCAvB,IAAAC,GAAmB,4BAQZ,IAAMC,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcGC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,eACzBC,EAAK,CAAC,CAAC;AAAA;AAAA,EAITC,GAAU,GAAAH,QAAO,IAAI,MAAM,KAAO,CAC7C,cAAe,OACf,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASGC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,iBACzBG,EAAM;AAAA;AAAA;AAAA,IAGlBH,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,iBACvBG,EAAM;AAAA;AAAA,EAIVC,GAAS,GAAAL,QAAO,QAAQ,MAAM,KAAO,CAChD,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA,sBAGqBC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQhDA,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,iBAGzBK,EAAW;AAAA;AAAA;AAAA,IAGvBL,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,4BACZC,EAAK,CAAC,CAAC;AAAA,iBAClBE,EAAM,gBAAgBE,EAAW;AAAA;AAAA,EAIrCC,GAAU,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA,EAMjBQ,GAAS,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA,aAIhBE,EAAK,CAAC,CAAC;AAAA;AAAA,EAIPO,GAAU,GAAAT,QAAO;AAAA;AAAA;AAAA,IAG1BU,EAAE;AAAA;AAAA;AAAA,EAKOC,GAAQ,GAAAX,QAAO;AAAA;AAAA,YAEhBE,EAAK,EAAE,CAAC;AAAA,kBACFA,EAAK,CAAC,CAAC;AAAA,EAGZU,MAAW,GAAAZ,SAAOa,CAAW;AAAA;AAAA,aAE7BX,EAAK,CAAC,CAAC;AAAA,EAGPY,GAAO,GAAAd,QAAO;AAAA,aACdE,EAAK,CAAC,CAAC;AAAA,EAGPa,GAAQ,GAAAf,QAAO;AAAA;AAAA,uBAELE,EAAK,CAAC,CAAC;AAAA,iBACbA,EAAK,EAAE,CAAC;AAAA,mBACNA,EAAK,CAAC,CAAC;AAAA,EAGbc,GAAe,GAAAhB,QAAO;AAAA,sBACZC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,YAC7CC,EAAK,EAAE,CAAC;AAAA,gBACJA,EAAK,CAAC,CAAC;AAAA,aACVA,EAAK,CAAC,CAAC;AAAA,EAGPe,GAAmB,GAAAjB,QAAO,MD7GvC,IAAAkB,GAA+B,mBASzBC,GAAQ,CAAC,CAAE,GAAAC,EAAI,MAAAC,EAAO,QAAAC,EAAS,SAAAC,CAAS,IAAkB,CAC9D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,iBAACC,GAAA,CAAO,GAAIL,GAAMM,GAAgB,eAChC,iBAACC,GAAA,CAAQ,QAAUC,GAAMA,EAAE,gBAAgB,GACzC,iBAACC,GAAA,CAAQ,QAASP,EAAS,MAAOE,EAAE,kBAAkB,GAAK,GAAI,EAC/D,iBAACM,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,CAAG,SAAQ,IAAEb,CAAM,CACtB,EACA,iBAACc,GAAA,KACC,iBAACC,GAAA,CAAS,QAASd,EAAS,MAAOE,EAAE,kBAAkB,GAAK,IAC1D,iBAACa,GAAA,CAAW,MAAK,GAAC,CACpB,CACF,CACF,EACA,iBAACC,GAAA,KAAMf,CAAS,CAClB,CACF,CACF,CACF,CAEJ,EAEOgB,EAAQpB,GJ3Cf,IAAAqB,GAA+B,mBAQzBC,GAAe,CAAC,CAAE,IAAAC,EAAK,MAAAC,CAAM,IAAoB,CACrD,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,aAAiB,EACrCC,EAAYC,GAAaN,CAAG,EAE5BO,EAAWC,GAAuD,CACtEA,EAAE,gBAAgB,EAClBJ,EAASJ,CAAG,CACd,EAEMS,EAAgBD,GAAwE,CAC5FA,EAAE,gBAAgB,EAClBJ,EAAS,MAAS,CACpB,EAEMM,KAAU,gBACbF,GAAqDG,GAAaH,EAAGH,CAAS,EAC/E,CAACA,CAAS,CACZ,EAEMO,KAAS,gBACZJ,GAAqDK,GAAYL,EAAGH,CAAS,EAC9E,CAACA,CAAS,CACZ,EAEMS,EAAcd,EAAI,YAAY,EAAE,SAAS,MAAM,EAErD,OAAIK,GAAW,QAAU,CAACS,EAEtB,GAAAC,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,CACC,OAAQJ,EACR,IAAKP,EAAU,CAAC,EAChB,QAASK,EACT,IAAKR,EAAE,oBAAqB,CAAE,MAAOD,EAAQ,CAAE,CAAC,GAAK,GACvD,EACA,GAAAc,QAAA,cAACE,GAAA,CAAY,KAAMf,EAAE,iBAAiB,EAAG,QAASK,EAAS,EAC1DJ,GACC,GAAAY,QAAA,cAACG,EAAA,CAAM,MAAOhB,EAAE,aAAa,EAAG,QAASO,GACvC,GAAAM,QAAA,cAACI,GAAA,CAAY,IAAKhB,EAAO,CAC3B,CAEJ,EAIAW,EAEA,GAAAC,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACK,GAAA,CAAa,MAAM,SAAS,UAAS,GAAC,SAAU,GAAO,IAAKpB,EAAK,EAClE,GAAAe,QAAA,cAACE,GAAA,CAAY,KAAMf,EAAE,iBAAiB,EAAG,QAASK,EAAS,EAC1DJ,GACC,GAAAY,QAAA,cAACG,EAAA,CAAM,MAAOhB,EAAE,aAAa,EAAG,QAASO,GACvC,GAAAM,QAAA,cAACI,GAAA,CAAY,IAAKhB,EAAO,CAC3B,CAEJ,EAEG,IACT,EAEOkB,GAAQtB,GM9Ef,IAAAuB,GAAmC,gBAMnC,IAAAC,GAA+B,mBAOzBC,GAAkB,CAAC,CAAE,IAAAC,EAAK,MAAAC,CAAM,IAA4B,CAChE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAAYC,GAAaJ,CAAG,EAC5BK,KAAU,gBACbC,GAAqDC,GAAaD,EAAGH,CAAS,EAC/E,CAACA,CAAS,CACZ,EAEMK,KAAS,gBACZF,GAAqDG,GAAYH,EAAGH,CAAS,EAC9E,CAACA,CAAS,CACZ,EAEMO,EAAcV,GAAK,YAAY,EAAE,SAAS,MAAM,EAEtD,OAAIG,GAAW,QAAU,CAACO,EAEtB,GAAAC,QAAA,cAACC,GAAA,CACC,OAAQJ,EACR,IAAKL,EAAU,CAAC,EAChB,QAASE,EACT,IAAKH,EAAE,oBAAqB,CAAE,MAAOD,EAAQ,CAAE,CAAC,GAAK,GACvD,EAEAS,EAAoB,GAAAC,QAAA,cAACE,GAAA,CAAa,IAAKZ,EAAO,IAAKD,EAAK,MAAM,SAAS,EACpE,IACT,EAEOc,GAAQf,GCzCf,IAAAgB,GAAkB,gBAKlB,IAAAC,GAA+B,mBAEzBC,GAAe,CAAC,EAAoDC,IAAqB,CAC7F,EAAE,gBAAgB,EAClB,EAAE,eAAe,EACjBA,EAAK,CACP,EAUMC,GAAS,CAAC,CAAE,IAAAC,EAAK,QAAAC,EAAS,QAAAC,EAAS,oBAAAC,EAAqB,mBAAAC,CAAmB,IAAiB,CAChG,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,MAAI,CAACH,GAAY,CAACE,GAAsBF,EAEpC,GAAAI,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,CAAU,IAAKN,EAAS,IAAI,MAAM,EACnC,GAAAK,QAAA,cAACE,GAAA,CACC,KAAMH,EAAE,uBAAuB,EAC/B,QAAUI,GACRZ,GAAaY,EAAGN,CAAmB,EAEvC,CACF,EAGAC,GAAsBF,EAEtB,GAAAI,QAAA,cAACI,GAAA,CACC,GAAIV,EACJ,QAASA,EACT,IAAKA,EACL,SAAU,GACV,QAASG,EACX,EAGG,IACT,EAEOQ,GAAQZ,GClDf,IAAAa,GAAkB,gBAKlB,IAAAC,GAA+B,mBAEzBC,GAAe,CAAC,EAAoDC,IAAqB,CAC7F,EAAE,gBAAgB,EAClB,EAAE,eAAe,EACjBA,EAAK,CACP,EASMC,GAAa,CAAC,CAAE,KAAAC,EAAM,QAAAC,EAAS,oBAAAC,EAAqB,mBAAAC,CAAmB,IAAiB,CAC5F,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,MAAI,CAACH,GAAY,CAACE,GAAsBF,EAEpC,GAAAI,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,CAAM,IAAKN,EAAK,CAAC,EAAG,IAAI,MAAM,EAC/B,GAAAK,QAAA,cAACE,GAAA,CACC,KAAMH,EAAE,uBAAuB,EAC/B,QAAUI,GACRX,GAAaW,EAAGN,CAAmB,EAEvC,CACF,EAGAC,GAAsBF,EAEtB,GAAAI,QAAA,cAAC,OACC,QAAUG,GAAM,CACdA,EAAE,gBAAgB,EAClBA,EAAE,eAAe,CACnB,GAEA,GAAAH,QAAA,cAACI,GAAA,KACET,EAAK,IAAI,CAACU,EAAOC,IAChB,GAAAN,QAAA,cAACC,GAAA,CAAM,IAAKI,EAAO,IAAKA,EAAO,IAAKN,EAAE,oBAAqB,CAAE,MAAOO,EAAI,CAAE,CAAC,GAAK,GAAI,CACrF,CACH,CACF,EAGG,IACT,EAEOC,GAAQb,G1BvBf,IAAAc,GAA+B,mBAOzBC,GAAiB,CACrB,KAAM,GACN,OAAQ,GACR,SAAU,GACV,MAAO,IACP,aAAc,EACd,eAAgB,CAClB,EAEMC,GAAU,CAAC,CAAE,MAAAC,EAAO,iBAAAC,CAAiB,IAAoB,CAC7D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,KAAS,UAAe,IAAI,EAC5BC,KAAc,UAAyB,IAAI,EAC3CC,KAAa,UAAO,EAAK,EACzB,CAACC,EAAOC,CAAQ,KAAI,YAAS,CAAC,EAC9B,CAACC,EAAUC,CAAW,KAAI,YAAS,EAAK,EACxC,CAACC,EAAoBC,CAAqB,KAAI,YAAS,EAAK,EAE5DC,KAAe,eAAY,CAACC,EAAWC,IAAqB,CAChE,IAAMC,EAAUX,EAAY,SAAS,iBAAiB,IAAI,IAAIU,CAAQ,EAClEC,MACF,GAAAC,SAAeD,EAAS,CAAE,WAAY,YAAa,MAAO,UAAW,OAAQ,SAAU,CAAC,EAE1FR,EAASO,CAAQ,CACnB,EAAG,CAAC,CAAC,EAECG,KAAc,eAAY,IAAM,CAChCZ,EAAW,UACbA,EAAW,QAAU,GAEzB,EAAG,CAAC,CAAC,EACCa,KAAc,eAAY,IAAM,CAC/Bb,EAAW,UACdA,EAAW,QAAU,GAEzB,EAAG,CAAC,CAAC,EAECc,KAAU,eAAY,IAAM,CAChCC,EAAO,QAAQ,aAAa,EACxB,CAACf,EAAW,SAAW,CAACG,GAAcR,GAAO,QAC/CS,EAAY,EAAI,CAEpB,EAAG,CAACD,EAAUR,CAAK,CAAC,EAEdqB,KAAY,eAAY,IAAY,CACpC,CAAClB,GAAU,CAACA,EAAO,SAGvBA,EAAO,QAAQ,UAAU,CAC3B,EAAG,CAACA,CAAM,CAAC,EAELmB,KAAY,eAAY,IAAY,CACpC,CAACnB,GAAU,CAACA,EAAO,SAGvBA,EAAO,QAAQ,UAAU,CAC3B,EAAG,CAACA,CAAM,CAAC,EAELoB,EAAQC,GAAmB,CAC3B,CAACrB,GAAU,CAACA,EAAO,SAGnBA,EAAO,UACTI,EAASiB,CAAM,EACfrB,EAAO,QAAQ,UAAUqB,CAAM,EAEnC,EAEMC,EAAsB,IAAM,CAC3BpB,EAAW,SAASM,EAAsB,EAAI,CACrD,EACMe,EAAsBC,GAAuD,CACjFA,EAAE,gBAAgB,EAClBtB,EAAW,QAAU,GACrBM,EAAsB,EAAK,CAC7B,EAEMiB,MAAmB,eAAY,IAAMnB,EAAY,CAACD,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAEvEqB,GAAc7B,GAAO,QAAU,EAC/B8B,MAAc,WAClB,IAAM7B,GAAoB8B,GAC1B,CAAC9B,CAAgB,CACnB,EAEA,OACE,EAAA+B,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACC,GAAA,KACC,EAAAD,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,CAAc,YAAalB,EAAa,YAAaC,EAAa,QAASC,GAC1E,EAAAa,QAAA,cAAC,GAAAI,QAAA,CACE,GAAGtC,GACJ,MAAO,CAACY,EACR,UAAW,CAACA,EACZ,aAAc,CAACA,EACf,IAAKP,EACL,aAAcS,GAEXZ,GAAO,OACRA,EAAM,IAAI,CAACqC,EAAGC,IACZ,EAAAN,QAAA,cAACO,GAAA,CAAK,IAAKF,EAAE,MAAM,CAAC,EAAE,KAAOC,GAC1BD,EAAE,OAAS,SACV,EAAAL,QAAA,cAACQ,GAAA,CACC,IACEH,EAAE,MAAM,CAAC,EAAE,QAAQ,OAAOI,EAAQ,EAAE,KAAMC,GAAMA,EAAE,SAAW,OAAO,GAAG,IAEzE,IAAKxC,EAAE,oBAAqB,CAAE,MAAOoC,EAAI,CAAE,CAAC,GAAK,GACnD,EAEDD,EAAE,OAAS,cACV,EAAAL,QAAA,cAACW,GAAA,CACC,KAAMN,EAAE,MAAM,IAAKK,GAAMA,EAAE,GAAG,EAC9B,QAASJ,IAAMhC,EACf,oBAAqBmB,EACrB,mBAAoBf,EACtB,EAED2B,EAAE,OAAS,YAAc,EAAAL,QAAA,cAACY,GAAA,CAAa,IAAKP,EAAE,MAAM,CAAC,EAAE,IAAK,MAAOC,EAAI,EAAG,EAC1ED,EAAE,OAAS,UACV,EAAAL,QAAA,cAACa,GAAA,CACC,QAASP,IAAMhC,EACf,IAAK+B,EAAE,MAAM,CAAC,EAAE,IAChB,QAASA,EAAE,MAAM,CAAC,EAAE,IACpB,oBAAqBZ,EACrB,mBAAoBf,EACtB,CAEJ,CACD,EAED,EAAAsB,QAAA,cAACO,GAAA,CAAK,IAAKT,IACT,EAAAE,QAAA,cAACQ,GAAA,CAAM,IAAKV,GAAa,IAAK5B,EAAE,oBAAqB,CAAE,MAAO,CAAE,CAAC,GAAK,GAAI,CAC5E,CAEJ,EACCQ,GAAsBmB,GAAc,GACnC,EAAAG,QAAA,cAACc,GAAA,KACC,EAAAd,QAAA,cAACe,GAAA,CAAgB,QAASrB,EAAoB,MAAOxB,EAAE,cAAc,GAAK,IACxE,EAAA8B,QAAA,cAACgB,EAAA,KAAe9C,EAAE,cAAc,CAAE,CACpC,CACF,CAEJ,EACC,CAACQ,GAAsBmB,GAAc,GACpC,EAAAG,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACiB,GAAA,KACC,EAAAjB,QAAA,cAACkB,GAAA,CAAU,QAAS5B,EAAW,MAAOpB,EAAE,qBAAqB,GAAK,IAChE,EAAA8B,QAAA,cAACmB,GAAA,CAAgB,MAAK,GAAC,CACzB,CACF,EACA,EAAAnB,QAAA,cAACoB,GAAA,KACC,EAAApB,QAAA,cAACkB,GAAA,CAAU,QAAS7B,EAAW,MAAOnB,EAAE,iBAAiB,GAAK,IAC5D,EAAA8B,QAAA,cAACqB,GAAA,CAAiB,MAAK,GAAC,CAC1B,CACF,CACF,CAEJ,EACA,EAAArB,QAAA,cAACsB,GAAA,KACC,EAAAtB,QAAA,cAACuB,GAAA,CAAS,IAAKnD,GACVJ,GAAO,OACRA,EAAM,IAAI,CAACqC,EAAGC,IAAM,CAClB,IAAMkB,EACJnB,EAAE,MAAM,CAAC,EAAE,QAAQ,OAAOI,EAAQ,EAAE,KAAMC,GAAMA,EAAE,SAAW,SAAS,GAAG,KACzEL,EAAE,MAAM,CAAC,EAAE,IACb,OACE,EAAAL,QAAA,cAACyB,GAAA,CAAa,IAAKD,GAAOlB,EAAG,OAAQhC,IAAUgC,GAC7C,EAAAN,QAAA,cAAC0B,GAAA,CACC,QAAS,IAAMnC,EAAKe,CAAC,EACrB,MAAOpC,EAAE,uBAAwB,CAAE,MAAOoC,EAAI,CAAE,CAAC,GAAK,IAErDD,EAAE,OAAS,SACV,EAAAL,QAAA,cAAC2B,GAAA,CACC,IAAKH,EACL,IAAKtD,EAAE,oBAAqB,CAAE,MAAOoC,EAAI,CAAE,CAAC,GAAK,GACnD,EAEDD,EAAE,OAAS,cACV,EAAAL,QAAA,cAAC2B,GAAA,CACC,IAAKH,EACL,IAAKtD,EAAE,oBAAqB,CAAE,MAAOoC,EAAI,CAAE,CAAC,GAAK,GACnD,EAEDD,EAAE,OAAS,YAAc,EAAAL,QAAA,cAAC4B,GAAA,CAAgB,IAAKJ,EAAK,MAAOlB,EAAG,EAC9DD,EAAE,OAAS,UACV,EAAAL,QAAA,cAAC2B,GAAA,CACC,IAAKtB,EAAE,MAAM,CAAC,EAAE,IAChB,IAAKnC,EAAE,oBAAqB,CAAE,MAAOoC,EAAI,CAAE,CAAC,GAAK,GACnD,CAEJ,CACF,CAEJ,CAAC,EAED,EAAAN,QAAA,cAACyB,GAAA,CAAa,IAAK3B,GAAa,OAAM,IACpC,EAAAE,QAAA,cAAC0B,GAAA,CACC,QAAS,IAAMnC,EAAK,CAAC,EACrB,MAAOrB,EAAE,uBAAwB,CAAE,MAAO,CAAE,CAAC,GAAK,IAElD,EAAA8B,QAAA,cAAC2B,GAAA,CAAY,IAAK7B,GAAa,IAAK5B,EAAE,oBAAqB,CAAE,MAAO,CAAE,CAAC,GAAK,GAAI,CAClF,CACF,CAEJ,CACF,CACF,EACCM,GAAY,CAAC,CAACR,GAAO,QACpB,EAAAgC,QAAA,cAAC6B,GAAA,CAAS,MAAO7D,EAAO,MAAOM,EAAO,QAASsB,GAAkB,CAErE,CAEJ,EAEOkC,GAAQ/D,G2B5Pf,IAAAgE,GAAmB,4BAKZ,IAAMC,GAAc,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,IAI7BC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,EAK3BC,GAAmB,GAAAF,QAAO;AAAA,IAClCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA,IAIrCA,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,0BAEdE,EAAK,CAAC,CAAC;AAAA,qBACZA,EAAK,CAAC,CAAC;AAAA;AAAA,EAIfC,GAAkB,GAAAJ,QAAO;AAAA,IACjCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA,IAIrCA,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,oBAGpBE,EAAK,CAAC,CAAC;AAAA;AAAA,EAWdE,GAA0B,GAAAL,QAAO;AAAA,IACzCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,aAC5BA,GAAUA,EAAM,WAAW;AAAA;AAAA;AAAA,oBAGrBE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIJA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,MAGxBC,EAAe;AAAA,oBACDD,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAItBF,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,oBAEpBE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,MAGrBC,EAAe;AAAA,uBACED,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,EAKjBG,GAAyB,GAAAN,QAAO;AAAA,IACxCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA,eAE3BE,EAAK,CAAC,CAAC;AAAA,kBACJA,EAAK,CAAC,CAAC,UAAWF,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,MAEhEM,EAAS;AAAA,qBACMJ,EAAK,EAAE,CAAC;AAAA,sBACPA,EAAK,EAAE,CAAC;AAAA,sBACRA,EAAK,CAAC,CAAC;AAAA,uBACNA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAIzBF,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,oBAEpBE,EAAK,CAAC,CAAC;AAAA,qBACNA,EAAK,CAAC,CAAC;AAAA,8BACGF,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA,EAKpDO,GAA0B,GAAAR,QAAO;AAAA;EChG9C,IAAAS,GAAsC,oBCAtC,IAAAC,GAAoB,oBAEdC,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUxBC,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZC,GAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgPtBD,EAAS;AAAA,IACTD,EAAqB;AAAA,EAGlBG,GAAQD,GDnQf,IAAME,GAAiBC,MACrB,aAAkCC,GAAmB,CACnD,UAAW,CAAE,GAAID,CAAa,EAC9B,KAAM,CAACA,CACT,CAAC,EAEIE,GAAQH,GEVf,IAAAI,GAAgC,gBCAhC,IAAAC,EAA6C,gBCA7C,IAAAC,GAAuB,gBCAvB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,aAGjBC,EAAK,CAAC,CAAC;AAAA,sBACGC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA,kBAIvCD,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZE,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA,kBAGTC,EAAK,CAAC,CAAC;AAAA,WACdA,EAAK,GAAG,CAAC;AAAA,YACRA,EAAK,CAAC,CAAC;AAAA,EAGNG,GAAU,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYjBK,GAAU,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA,EAMjBM,GAAmB,GAAAN,QAAO,IAAI,MAAM,KAAO,CACtD,UAAW,gCACb,EAAE;AAAA;AAAA,EAIWO,GAAmB,GAAAP,QAAO;AAAA,gBACvBC,EAAK,EAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;EDtCzB,IAAMO,GAAY,CAAC,CAAE,KAAAC,EAAM,OAAAC,EAAQ,QAAAC,EAAS,SAAAC,CAAS,IACnD,iBAACC,GAAA,KACEJ,GACC,iBAACK,GAAA,KACC,iBAACC,GAAA,CAAQ,IAAKN,EAAM,OAAQC,EAAQ,IAAKC,EAAS,CACpD,EAEF,iBAACK,GAAA,KAASJ,CAAS,CACrB,EAGKK,GAAQT,GEtBf,IAAAU,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,EAMdC,GAAO,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKTE,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZC,GAAQ,GAAAH,QAAO;AAAA;AAAA,EAIfI,GAAQ,GAAAJ,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;AAAA,kBAEgBE,EAAK,CAAC,CAAC;EDdzB,IAAMG,GAAW,CAAC,CAAE,MAAAC,CAAM,IACxB,GAAAC,QAAA,cAACC,GAAA,KACEF,EAAM,IAAKG,GACV,GAAAF,QAAA,cAACG,GAAA,CAAK,IAAKD,EAAK,OACd,GAAAF,QAAA,cAACI,GAAA,KAAOF,EAAK,KAAM,EACnB,GAAAF,QAAA,cAACK,GAAA,KAAOH,EAAK,KAAM,CACrB,CACD,CACH,EAGKI,GAAQR,GHZf,IAAAS,GAA+B,mBAMzBC,GAAU,CAAC,CAAE,gBAAAC,CAAgB,IAAoB,CACrD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,YAAS,EAAK,EAClCC,KAAc,eAAY,IAAMD,EAAS,CAACD,CAAK,EAAG,CAACA,CAAK,CAAC,EAEzD,CAAE,MAAAG,EAAO,YAAAC,EAAa,YAAAC,EAAa,SAAAC,EAAU,QAAAC,EAAS,KAAAC,EAAM,KAAAC,CAAK,EAAIV,EAErEW,EACJF,IAAS,UACL,EAAE,oCAAoC,EACtCA,IAAS,mBACT,EAAE,qCAAqC,EACvCA,EAEN,OACE,EAAAG,QAAA,gBAAAA,QAAA,cACGX,GACC,EAAAW,QAAA,cAACC,EAAA,CAAM,MAAOF,EAAO,QAASR,GAC3BC,GAAS,EAAAQ,QAAA,cAACE,GAAA,CAAM,IAAKV,EAAO,IAAKO,EAAO,EACxCN,GAAe,EAAAO,QAAA,cAACG,EAAA,CAAQ,wBAAyB,CAAE,OAAQV,CAAY,EAAG,EAC3E,EAAAO,QAAA,cAACI,GAAA,KACC,EAAAJ,QAAA,cAACK,GAAA,KACC,EAAAL,QAAA,cAACM,GAAA,CACC,MAAO,CACL,CACE,MAAO,EAAE,mCAAmC,EAC5C,MAAO,GAAGC,EAAgBb,GAAe,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACtE,EACA,CACE,MAAO,EAAE,mCAAmC,EAC5C,MAAO,GAAGC,GAAU,OAAO,aAC7B,EACA,CACE,MAAO,EAAE,qCAAqC,EAC9C,MAAO,GAAGY,EAAgBX,GAAS,SAAW,CAAC,CAAC,IAAI,EAClD,sCACF,CAAC,EACH,CACF,EACF,CACF,CACF,CACF,EAEF,EAAAI,QAAA,cAACQ,GAAA,KACC,EAAAR,QAAA,gBAAAA,QAAA,cACGN,GAAgB,MACf,EAAAM,QAAA,cAACS,GAAA,KAAkB,MAAMF,EAAgBb,CAAW,CAAC,IAAI,EACvD,kBACF,CAAC,EAAG,CAER,EACA,EAAAM,QAAA,cAACU,GAAA,KACC,EAAAV,QAAA,cAAC,SACED,EAAO,IACPH,GAAS,SAAWD,GAAU,SAC7B,EAAAK,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACW,GAAA,KACEJ,EAAgBX,GAAS,OAAO,EAAE,IAAE,EAAE,sCAAsC,CAC/E,EAAsB,IAAI,IACxB,IACF,EAAAI,QAAA,cAACW,GAAA,KACEhB,GAAU,QAAQ,IAAE,EAAE,8BAA8B,CACvD,EAAqB,IACnB,GACJ,CAEJ,EACCG,GACC,EAAAE,QAAA,cAAC,SACC,EAAAA,QAAA,cAACY,EAAA,CAAa,QAASrB,GAAc,EAAE,iBAAiB,CAAE,CAC5D,CAEJ,CACF,CACF,CAEJ,EAEOsB,GAAQ1B,GKjGf,IAAA2B,EAA6C,gBCA7C,IAAAC,GAAsC,oBCAtC,IAAAC,GAAoB,oBAEdC,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUxBC,GAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAuBrBD,EAAqB;AAAA,EAGlBE,GAAQD,GDlCf,IAAME,GAAqB,CACzBC,EACAC,EACAC,EACAC,OAEA,aAA+BC,GAAkB,CAC/C,UAAW,CACT,GAAAJ,EACA,SAAUC,EACV,YAAaC,EACb,SAAWC,GAAuB,CACpC,EACA,KAAMF,IAAa,QAAaC,IAAgB,MAClD,CAAC,EAEIG,GAAQN,GEpBf,IAAAO,EAAwD,gBCAxD,IAAAC,GAAmB,4BAIZ,IAAMC,GAAc,GAAAC,QAAO;AAAA,IAC7BC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA,EAM3BC,GAAkB,GAAAF,QAAO;AAAA,IACjCC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,EAK3BE,GAAmB,GAAAH,QAAO;AAAA,IAClCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,kBACxBG,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGpBH,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,oBAEpBG,EAAK,CAAC,CAAC;AAAA;ECxB3B,IAAAC,GAAwD,gBCAxD,IAAAC,GAAkB,gBCAlB,IAAAC,GAA4B,4BAIrB,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,EAKjBC,GAAQ,GAAAD,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;AAAA,EAQWE,GAAQ,GAAAF,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,2DACb,EAAE;AAAA;AAAA,kBAEgBG,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGrB,CAAC,CAAE,cAAAC,CAAc,IACjBA,GACA;AAAA;AAAA,eAEYC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,KAC/C;EDrBL,IAAMC,GAAmB,CAAC,CAAE,MAAAC,EAAO,MAAAC,EAAO,UAAAC,CAAU,IAClD,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAAOL,CAAM,EACbC,GAAS,GAAAE,QAAA,cAACG,GAAA,CAAM,cAAeJ,GAAYD,CAAM,CACpD,EAGKM,GAAQR,GEjBf,IAAAS,GAAkB,gBAClBC,GAA8C,2BAkB9C,IAAMC,GAAoB,CAAC,CACzB,QAAAC,EACA,OAAAC,EACA,OAAAC,EACA,MAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,SAAAC,CACF,IAAwB,CACtB,IAAMC,EAAQL,EAAM,CAAC,EAEfM,EADSN,EAAM,CAAC,EACAK,EAEhBE,EAAaL,EAAeM,EAAgBT,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EACjEU,EAAaP,EAAeM,EAAgBT,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAEvE,OAAIC,EAAM,OAAS,EACV,KAIP,GAAAU,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAAC,WACC,SAAUb,EACV,KAAM,EACN,KAAMS,EACN,OAAQP,EACR,SAAUI,EACV,SAAUC,EACV,OAAQN,EACR,UAAW,CAAE,SAAU,UAAW,GAElC,GAAAY,QAAA,cAAC,aAAM,CAAC,CAAE,aAAAE,CAAa,IAAM,GAAAF,QAAA,cAACG,GAAA,CAAK,GAAGD,EAAa,EAAG,CAAG,EACzD,GAAAF,QAAA,cAAC,gBACE,CAAC,CAAE,QAAAI,EAAS,eAAAC,CAAe,IAC1B,GAAAL,QAAA,cAAC,OAAI,UAAU,kBACZI,EAAQ,IAAKE,GACZ,GAAAN,QAAA,cAACO,GAAA,CACC,IAAKD,EAAO,GACZ,OAAQA,EACR,OAAQjB,EACR,eAAgBgB,EAClB,CACD,CACH,CAEJ,EACA,GAAAL,QAAA,cAAC,WAAO,MAAO,IACZ,CAAC,CAAE,OAAAQ,EAAQ,cAAAC,CAAc,IACxB,GAAAT,QAAA,cAAC,OAAI,UAAU,iBACZQ,EAAO,IAAI,CAAC,CAAE,GAAAE,EAAI,OAAAC,EAAQ,OAAAC,CAAO,IAChC,GAAAZ,QAAA,cAACa,GAAA,CAAM,IAAKH,EAAI,OAAQC,EAAQ,OAAQC,EAAQ,cAAeH,EAAe,CAC/E,CACH,CAEJ,CACF,CACF,EACC,EAMH,CAEJ,EAEOK,GAAQ5B,GHxEf,IAAM6B,GAAkB,CAAC,CACvB,MAAAC,EACA,OAAAC,EACA,OAAAC,EACA,MAAAC,EACA,QAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,CACF,IAA4B,CAC1B,GAAM,CAACC,EAAOC,CAAQ,KAAI,aAA+BN,CAAK,EAExDO,KAAW,gBAAaC,GAAkC,CAC9DF,EAAS,CAAC,GAAGE,CAAU,CAAC,CAC1B,EAAG,CAAC,CAAC,EAEL,uBAAU,IAAM,CACTP,GAASK,EAAS,MAAS,CAClC,EAAG,CAACL,CAAO,CAAC,EAGV,GAAAQ,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,EAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,MAAOd,EACP,MAAO,GAAGe,EAAgBP,IAAQ,CAAC,GAAKP,EAAO,CAAC,CAAC,CAAC,GAAGI,EAAO,IAAIA,CAAI,GAAK,EAAE,GAC7E,CACF,EACA,GAAAO,QAAA,cAACC,EAAA,KACC,GAAAD,QAAA,cAACI,GAAA,CACC,QAASZ,EACT,OAAQH,EACR,OAAQC,EACR,MAAOC,EACP,SAAUI,EACV,SAAUG,EACV,KAAML,EACN,aAAcC,EAChB,CACF,CACF,CAEJ,EAEOW,GAAQlB,GF9Cf,IAAAmB,GAA+B,mBAEzBC,GAAgB,CACpBC,EACAC,EACAC,EAAkB,CAAC,EACnBC,IACa,CAGb,GAFIH,IAAS,GAAKG,IAAY,QAE1BA,IAAY,QAAaA,GAAWF,GAAOD,IAAS,EACtD,OAAOE,EAGT,IAAME,EAAcD,EAAUH,EAAOG,EAAUH,EAC/C,OAAAE,EAAM,KAAKE,CAAW,EACfL,GAAcC,EAAMC,EAAKC,EAAOE,CAAW,CACpD,EAQMC,GAAY,CAAC,CAAE,GAAAC,EAAI,gBAAAC,EAAiB,QAAAC,CAAQ,IAAsB,CACtE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAKC,CAAM,KAAI,YAAgB,EAChC,CAACC,EAAQC,CAAS,EAAI,EAAAC,QAAM,SAAS,EAAK,EAC1CC,EAAiB,EAAAD,QAAM,YAAY,IAAM,CACxCF,GACHI,EAAO,QAAQ,iBAAiB,EAElCH,EAAU,CAACD,CAAM,CACnB,EAAG,CAACA,CAAM,CAAC,EAEL,CAACK,EAAWC,CAAY,KAAI,YAAS,CACzC,SAAUX,EAAgB,UAAU,QACpC,YAAaA,EAAgB,aAAa,QAC1C,SAAUA,EAAgB,UAAU,OACtC,CAAC,EAEK,CAAE,SAAAY,EAAU,YAAAC,EAAa,SAAAC,CAAS,EAAIJ,EACtC,CAAE,QAAAK,EAAS,KAAAC,CAAK,EAAIC,GAAmBlB,EAAIa,EAAUC,EAAaC,CAAQ,KAChF,aAAU,IAAM,CACVE,IACFZ,EAAOY,CAAI,EACXL,EAAa,CACX,SAAUK,GAAM,MAAM,UAAU,SAAW,EAC3C,YAAaA,GAAM,MAAM,aAAa,SAAW,EACjD,SAAUA,GAAM,MAAM,UAAU,SAAW,CAC7C,CAAC,EAEL,EAAG,CAACA,CAAI,CAAC,EAET,IAAME,EAAOF,GAAM,MAAQb,GAAK,KAE1BgB,EAAqBD,GAAM,aAAa,SAAW,EACnDE,EAAiBF,GAAM,aAAa,KAAO,EAC3CG,EAAiBH,GAAM,aAAa,KAAO,EAC3CI,EAAkBJ,GAAM,aAAa,MAAQ,EAC7CK,GAAmB/B,GAAc8B,EAAiBD,CAAc,EAChEG,MAAsB,eACzBC,IAA8B,CAC7BhB,EAAO,QAAQ,iBAAiB,EAChCE,EAAa,CAAE,GAAGD,EAAW,YAAae,GAAO,CAAC,CAAE,CAAC,CACvD,EACA,CAACf,CAAS,CACZ,EAEMgB,GAAkBR,GAAM,UAAU,SAAW,EAC7CS,EAAcT,GAAM,UAAU,KAAO,EACrCU,EAAcV,GAAM,UAAU,KAAO,EACrCW,EAAeX,GAAM,UAAU,MAAQ,EACvCY,EAAgBtC,GAAcqC,EAAcD,CAAW,EACvDG,MAAmB,eACtBN,IAA8B,CAC7BhB,EAAO,QAAQ,iBAAiB,EAChCE,EAAa,CAAE,GAAGD,EAAW,SAAUe,GAAO,CAAC,CAAE,CAAC,CACpD,EACA,CAACf,CAAS,CACZ,EAEMsB,IAAmBd,GAAM,UAAU,SAAW,GAAK,KAAO,EAC1De,IAAef,GAAM,UAAU,KAAO,GAAK,KAAO,EAClDgB,IAAehB,GAAM,UAAU,KAAO,GAAK,KAAO,EAClDiB,IAAgBjB,GAAM,UAAU,MAAQ,GAAK,KAAO,EACpDkB,GAAgB5C,GAAc2C,GAAcD,EAAW,EACvDG,MAAmB,eACtBZ,IAA8B,CAC7BhB,EAAO,QAAQ,iBAAiB,EAChCE,EAAa,CAAE,GAAGD,EAAW,SAAUe,GAAO,CAAC,EAAI,GAAI,CAAC,CAC1D,EACA,CAACf,CAAS,CACZ,EAEM4B,KAAiBpB,GAAM,UAAY,GAAK,KAAK,QAAQ,CAAC,EACtDqB,KAA0BrB,GAAM,mBAAqB,GAAK,KAAK,QAAQ,CAAC,EACxEsB,GAActB,GAAM,YAE1B,OACE,EAAAX,QAAA,cAACkC,EAAA,CAAM,MAAOvC,EAAE,mCAAmC,EAAG,QAASD,GAC7D,EAAAM,QAAA,cAACmC,EAAA,KACC,EAAAnC,QAAA,cAACoC,GAAA,KACE3C,GAAiB,aAChB,EAAAO,QAAA,cAACqC,GAAA,KACC,EAAArC,QAAA,cAACsC,EAAA,KACC,EAAAtC,QAAA,cAAC,SAAGP,EAAgB,WAAY,CAClC,CACF,EAEDA,GAAiB,OAChB,EAAAO,QAAA,cAACuC,GAAA,KACC,EAAAvC,QAAA,cAACwC,GAAA,CACC,KAAM/C,EAAgB,MACtB,IAAKA,EAAgB,MAAQE,EAAE,iBAAiB,EAChD,KAAI,GACN,CACF,CAEJ,CACF,EACA,EAAAK,QAAA,cAACmC,EAAA,KACC,EAAAnC,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC0C,GAAA,CACC,MAAO/C,EAAE,mCAAmC,EAC5C,OAAQ,CAACiB,CAAkB,EAC3B,OAAQ,CAACC,EAAgBC,CAAc,EACvC,MAAOE,GACP,KAAMrB,EAAE,kBAAkB,EAC1B,aAAY,GACZ,QAASa,EACT,SAAUS,GACZ,CACF,EACA,EAAAjB,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC0C,GAAA,CACC,MAAO/C,EAAE,gCAAgC,EACzC,OAAQ,CAACwB,EAAe,EACxB,OAAQ,CAACC,EAAaC,CAAW,EACjC,MAAOE,EACP,KAAM5B,EAAE,8BAA8B,EACtC,QAASa,EACT,SAAUgB,GACZ,CACF,EACCjB,IAAa,QAAaoB,KAAgB,GACzC,EAAA3B,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC0C,GAAA,CACC,MAAO/C,EAAE,gCAAgC,EACzC,OAAQ,CAAC8B,EAAe,EACxB,OAAQ,CAACC,GAAaC,EAAW,EACjC,MAAOE,GACP,KAAK,IACL,QAASrB,EACT,SAAUsB,GACZ,CACF,EAEF,EAAA9B,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC2C,EAAA,KACEV,IAAgB,MACf,EAAAjC,QAAA,cAACsC,EAAA,KAAS,GAAGM,EAAgBX,EAAW,CAAC,IAAItC,EAAE,kBAAkB,CAAC,GAAI,EAExE,EAAAK,QAAA,cAACsC,EAAA,CAAQ,MAAK,IACZ,EAAAtC,QAAA,cAAC,SAAE,IAEAW,GAAM,UAAY,KACfhB,EAAE,qDAAsD,CACtD,SAAUoC,GACV,kBAAmBC,GACnB,QAASrB,GAAM,OACjB,CAAC,EACDhB,EAAE,8CAA+C,CAC/C,SAAUoC,GACV,kBAAmBC,EACrB,CAAC,CACP,CACF,CACF,CACF,EAEA,EAAAhC,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC6C,GAAA,CACC,QAAS5C,EACT,MACEH,EAASH,EAAE,4BAA4B,GAAK,GAAKA,EAAE,4BAA4B,GAAK,IAGtF,EAAAK,QAAA,cAAC8C,EAAA,KACWnD,EAATG,EAAW,yBAA8B,4BAAN,CACtC,CACF,CACF,EACA,EAAAE,QAAA,gBAAAA,QAAA,cACGF,GACC,EAAAE,QAAA,cAAC+C,GAAA,KACC,EAAA/C,QAAA,cAACgD,GAAA,KACC,EAAAhD,QAAA,cAACiD,GAAA,CACC,MAAO,CACL,CACE,MAAOtD,EAAE,gCAAgC,EACzC,MAAO,GAAGoC,EAAY,IACxB,EACA,CACE,MAAOpC,EAAE,yCAAyC,EAClD,MAAO,GAAGqC,EAAqB,IACjC,EACA,CACE,MAAOrC,EAAE,gCAAgC,EACzC,MAAO,GAAGiD,EAAgBnD,GAAiB,UAAY,CAAC,CAAC,IAAIE,EAC3D,kBACF,CAAC,EACH,EACA,CACE,MAAOA,EAAE,yCAAyC,EAClD,MAAO,GAAGiD,EAAgBnD,GAAiB,mBAAqB,CAAC,CAAC,IAAIE,EACpE,kBACF,CAAC,EACH,EACA,CACE,MAAOA,EAAE,uCAAuC,EAChD,MAAO,GAAGiD,EAAgBjC,GAAM,iBAAmB,CAAC,CAAC,IAAIhB,EACvD,kBACF,CAAC,EACH,CACF,EACF,CACF,CACF,CAEJ,CACF,CACF,CAEJ,EAEOuD,GAAQ3D,GHnPf,IAAA4D,GAA+B,mBAOzBC,GAAO,CAAC,CAAE,GAAAC,EAAI,gBAAAC,CAAgB,IAAiB,CACnD,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,YAAS,EAAK,EAClCC,KAAc,eAAY,IAAMD,EAAS,CAACD,CAAK,EAAG,CAACA,CAAK,CAAC,EAEzD,CAAE,KAAAG,CAAK,EAAIC,GACfP,EACAC,EAAgB,UAAU,QAC1BA,EAAgB,aAAa,QAC7BA,EAAgB,UAAU,OAC5B,EAEMO,EAAWF,GAAM,MAAM,SACvBG,EAAWH,GAAM,MAAM,UAAU,QACjCI,EAAcJ,GAAM,MAAM,YAE1BK,EAAOV,GAAiB,UAAY,6BAG1C,OACEA,EAAgB,aAAe,QAC/BA,EAAgB,aAAe,MAC/BO,IAAa,QACbC,IAAa,QACbC,IAAgB,QAChBF,IAAa,MACbC,IAAa,MACbC,IAAgB,KAGd,EAAAE,QAAA,cAACC,GAAA,CAAU,KAAMF,EAAM,QAAST,EAAE,iBAAiB,GACjD,EAAAU,QAAA,cAACE,GAAA,KAAkBZ,EAAE,eAAe,CAAE,EAEtC,EAAAU,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAAC,SAAGV,EAAE,eAAe,CAAE,CACzB,CACF,EAKF,EAAAU,QAAA,gBAAAA,QAAA,cACGT,GAAS,EAAAS,QAAA,cAACI,GAAA,CAAU,GAAIhB,EAAI,gBAAiBC,EAAiB,QAASI,EAAa,EACrF,EAAAO,QAAA,cAACC,GAAA,CAAU,KAAMF,EAAM,QAAST,EAAE,iBAAiB,GACjD,EAAAU,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACE,GAAA,KAAkB,GAAGG,EAAgBP,CAAW,CAAC,IAAIR,EACpD,kBACF,CAAC,GAAI,EAEL,EAAAU,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAAC,SACEX,EAAgB,YAAcQ,EAC3BP,EAAE,kDAAmD,CACnD,OAAQ,GAAGe,EAAgBhB,EAAgB,UAAU,CAAC,MACtD,SAAAQ,CACF,CAAC,EACDP,EAAE,yCAAyC,CACjD,EAEA,EAAAU,QAAA,cAAC,SAAE,IAEAV,EAAE,mCAAoC,CACrC,SAAU,IAAIM,EAAW,KAAK,QAAQ,CAAC,CAAC,GAC1C,CAAC,EAAG,IACJ,EAAAI,QAAA,cAACM,EAAA,CAAa,QAASb,GAAcH,EAAE,iBAAiB,CAAE,CAC5D,CACF,CACF,CACF,CACF,CAEJ,EAEOiB,GAAQpB,GNnFf,IAAAqB,GAA+B,mBAOzBC,GAAmB,CAAC,CAAE,GAAAC,EAAI,iBAAAC,CAAiB,IAA6B,CAC5E,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,EAAA,KACC,GAAAD,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KAAeJ,EAAE,6CAA6C,CAAE,CACnE,EACA,GAAAC,QAAA,cAACE,EAAA,KACEJ,EAAiB,IAAI,CAACM,EAAiBC,IACtC,GAAAL,QAAA,cAAC,aAAS,IAAKK,IACXD,EAAgB,OAAS,WACzBA,EAAgB,OAAS,qBACzB,GAAAJ,QAAA,cAACM,GAAA,CAAQ,gBAAiBF,EAAiB,EAE5CA,EAAgB,OAAS,QAAU,GAAAJ,QAAA,cAACO,GAAA,CAAK,GAAIV,EAAI,gBAAiBO,EAAiB,CACtF,CACD,CACH,CACF,CAEJ,EAEOI,GAAQZ,GenCf,IAAAa,GAAkB,gBCAlB,IAAAC,GAA6C,gBCA7C,IAAAC,EAA6C,gBCA7C,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,EAMjBC,GAAO,GAAAD,QAAO;AAAA,aACdE,EAAK,GAAG,CAAC;AAAA,EAGTC,MAAU,GAAAH,SAAOI,EAAE,EAAE,MAAM,KAAO,CAC7C,GAAI,IACN,EAAE;AAAA;AAAA,EAIWC,GAAc,GAAAL,QAAO;AAAA,gBAClBE,EAAK,CAAC,CAAC;AAAA,EAGVI,GAAS,GAAAN,QAAO;AAAA,gBACbE,EAAK,CAAC,CAAC;AAAA;AAAA,EAIVK,GAAU,GAAAP,QAAO;AAAA,sBACPQ,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,aAC5CN,EAAK,GAAG,CAAC;ED5BtB,IAAAO,GAA+B,mBAQzBC,GAAY,CAAC,CAAE,QAAAC,EAAS,YAAAC,EAAa,SAAAC,CAAS,IAAa,CAC/D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAQC,CAAS,EAAI,GAAAC,QAAM,SAAS,EAAK,EAC1CC,EAAiB,GAAAD,QAAM,YAAY,IAAMD,EAAU,CAACD,CAAM,EAAG,CAACA,CAAM,CAAC,EAErEI,EAAyBL,EAATC,EAAW,yBAA8B,wBAAN,EAEzD,OACE,GAAAE,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,KAASX,CAAQ,EACjBC,GAAe,GAAAK,QAAA,cAACM,GAAA,KAAaX,CAAY,EAC1C,GAAAK,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,CAAY,QAASP,GACpB,GAAAD,QAAA,cAACS,EAAA,KAAeP,CAAc,CAChC,CACF,CACF,EACCJ,GAAU,GAAAE,QAAA,cAACU,GAAA,KAASd,CAAS,CAChC,CAEJ,EAEOe,GAAQlB,GEnCf,IAAAmB,GAA6C,gBCA7C,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO,MAEjBC,GAAS,GAAAD,QAAO;AAAA;AAAA;AAAA,EAKhBE,GAAQ,GAAAF,QAAO,MAEfG,GAAO,GAAAH,QAAO;AAAA,iBACVI,EAAK,CAAC,CAAC;AAAA,EAGXC,MAAU,GAAAL,SAAOM,CAAW,EAAE,MAAM,KAAO,CACtD,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAWSF,EAAK,GAAI,CAAC;AAAA,cACPA,EAAK,GAAI,CAAC;AAAA,YACZA,EAAK,GAAI,CAAC;AAAA,aACTA,EAAK,GAAI,CAAC;AAAA,wBACEG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBlDC,GAAS,GAAAR,QAAO;AAAA,iBACZI,EAAK,CAAC,CAAC;AAAA,gBACRA,EAAK,CAAC,CAAC;AAAA,0BACIG,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;EDxD7D,IAAAE,GAA+B,mBAOzBC,GAAa,CAAC,CAAE,MAAAC,EAAO,SAAAC,CAAS,IAAa,CACjD,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAQC,CAAS,KAAI,aAAS,EAAK,EACpCC,KAAiB,gBAAY,IAAMD,EAAU,CAACD,CAAM,EAAG,CAACA,CAAM,CAAC,EAErE,OACE,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KAAOT,CAAM,EACbC,GACC,GAAAK,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAQ,QAASN,EAAgB,MAAOH,EAAE,wBAAwB,GAAK,IACtE,GAAAI,QAAA,cAACM,GAAA,CAAS,MAAK,GAAC,CAClB,CACF,CAEJ,EACCT,GAAU,GAAAG,QAAA,cAACO,GAAA,KAAQZ,CAAS,CAC/B,CAEJ,EAEOa,GAAQf,GEjCf,IAAAgB,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO,MAAM,MAAM,KAAO,CAC/C,UAAW,gCACb,EAAE;AAAA,mBACiBC,EAAK,EAAG,CAAC;AAAA;EDE5B,IAAMC,GAAa,CAAC,CAAE,SAAAC,EAAU,QAAAC,CAAQ,IACtC,GAAAC,QAAA,cAACC,GAAA,CAAQ,QAASF,GAAUD,CAAS,EAGhCI,GAAQL,GEbf,IAAAM,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,sBAIPC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,EAI5CC,GAAQ,GAAAF,QAAO,MAAM,MAAM,KAAO,CAC7C,KAAM,OACN,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA,YAIWC,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA,eACzCE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAeRF,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;EDxCzD,IAAMG,GAAY,CAAC,CAAE,YAAAC,EAAa,MAAAC,EAAO,MAAAC,EAAO,GAAAC,EAAI,SAAAC,EAAU,UAAAC,CAAU,IACtE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,YAAaR,EACb,MAAOE,EACP,GAAIC,EACJ,aAAYF,EACZ,SAAUG,EACV,UAAWC,EACb,CACF,EAGKI,GAAQV,GE1Bf,IAAAW,GAAuB,gBCAvB,IAAAC,GAAuB,gBACvBC,GAA4B,4BAIrB,IAAMC,GAAQ,GAAAC,QAAO,MAAM,MAAM,KAAO,CAC7C,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAcWC,EAAK,GAAG,CAAC;AAAA,cACRA,EAAK,GAAG,CAAC;AAAA,oBACHA,EAAK,CAAC,CAAC;AAAA,wBACFC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY9CC,MAAU,GAAAH,SAAQE,GAAU,iBAAC,OAAK,GAAGA,EAAO,CAAE,EAAE,MAAM,CAAC,CAAE,KAAAE,EAAM,QAAAC,CAAQ,KAAO,CACzF,KAAMD,GAAQ,WACd,eAAgBC,CAClB,EAAE;AAAA,IACE,CAAC,CAAE,MAAAC,CAAM,IACTA,GACA;AAAA,QACIP,EAAK;AAAA,iBACKG,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;AAAA;AAAA;AAAA,8BAG1BA,GAAUA,EAAM,MAAM,MAAM,GAAG,aAAa;AAAA;AAAA;AAAA,KAGtE;AAAA,EAGQK,MAAQ,GAAAP,SAAQE,GAC3B,iBAAC,SAAO,GAAGA,EAAO,UAAW,GAAGA,EAAM,QAAU,UAAY,MAAS,IAAIA,EAAM,SAAS,GAAI,CAC7F,EAAE,MAAM,CAAC,CAAE,KAAAE,EAAM,QAAAC,CAAQ,KAAO,CAC/B,QAAAA,EACA,KAAMD,GAAQ,UAChB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMQL,EAAK;AAAA,eACCG,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA,4BAG3BA,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQzDH,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQFS,GAAY,GAAAR,QAAO;AAAA,WACpBE,GAAUA,EAAM,MAAM,MAAM,QAAQ;ECrFhD,IAAAO,GAAkB,gBCAlB,IAAAC,GAAmB,4BAInB,IAAMC,GAAW,WACXC,GAAgBC,EAAK,CAAC,EAEfC,GAAU,GAAAC,QAAO;AAAA;AAAA,sBAEPC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,EAI5CC,GAAS,GAAAF,QAAO,OAAO,MAAM,KAAO,CAC/C,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA,YAIWC,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOzCJ,EAAa;AAAA,wBACJD,EAAQ,MAAMC,EAAa;AAAA;AAAA,WAEvCI,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBnCE,GAAS,GAAAH,QAAO;AAAA,WACjBC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAGnCG,GAAO,GAAAJ,QAAO;AAAA;AAAA;AAAA,WAGhBH,EAAa;AAAA;AAAA,eAETD,EAAQ;EDvCvB,IAAMS,GAAc,CAAC,CAAE,MAAAC,EAAO,QAAAC,EAAS,SAAAC,EAAU,KAAAC,EAAM,MAAAC,CAAM,IAC3D,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAO,MAAOP,EAAO,SAAUE,EAAU,MAAOE,EAAO,aAAYA,GACjEH,GAAS,IAAKO,GACb,GAAAH,QAAA,cAACI,GAAA,CAAO,IAAKD,EAAO,MAAO,MAAOA,EAAO,OACtCA,EAAO,aAAeA,EAAO,MAC7BL,EAAO,IAAIA,CAAI,GAAK,EACvB,CACD,CACH,EACA,GAAAE,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,CAAgB,MAAK,GAAC,CACzB,CACF,EAGKC,GAAQb,GElCf,IAAAc,GAAmB,4BAIZ,IAAMC,GAAa,GAAAC,QAAO;AAAA,IAC5BC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,cAG1BC,EAAK,GAAI,CAAC;AAAA;AAAA,EAIXC,GAAmB,GAAAH,QAAO;AAAA,IAClCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA,oBAEtBC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAItBD,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,eAEzBC,EAAK,EAAG,CAAC;AAAA;ECrBxB,IAAAE,GAAmB,4BAIZ,IAAMC,GAAY,GAAAC,QAAO;AAAA;AAAA;AAAA,EAKnBC,GAAgB,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAQhBE,EAAK,CAAC,CAAC;AAAA;ECjB3B,IAAAC,GAAsC,oBCAtC,IAAAC,GAAoB,oBAEdC,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwCvBC,GAAQD,GDrCf,IAAME,GAA0B,CAC9BC,EACAC,EACAC,EACAC,OAEA,aAAqCC,GAAuB,CAC1D,UAAW,CACT,GAAAJ,EACA,OAAQC,EACR,eAAgBC,EAChB,gBAAiBC,CACnB,EACA,KAAMD,IAAmB,QAAaC,IAAoB,QAAaF,IAAa,MACtF,CAAC,EAEII,GAAQN,GErBR,IAAMO,GAAcC,GAAgBA,EAAI,8BAA8B,KAAKA,CAAC,EAAI,GjByBvF,IAAAC,GAA+B,mBAczBC,GAAiB,CAAC,CAAE,GAAAC,EAAI,OAAAC,EAAQ,QAAAC,EAAS,iBAAAC,CAAiB,IAAsB,CACpF,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAMC,CAAO,KAAI,YAAmB,CACzC,IAAK,GACL,iCACF,CAAC,EACK,CAACC,EAASC,CAAU,KAAI,YAAmB,EAC3C,CAAE,QAAAC,EAAS,KAAAC,EAAM,MAAAC,CAAM,EAAIC,GAC/BZ,EACAC,GAAQ,GAAKA,GAAQ,GAAK,OAC1BY,GAAWN,GAAS,GAAG,EAAIA,GAAS,IAAM,OAC1CA,GAAS,eACX,EAEMO,KAAc,eACjBC,GAA2CT,EAAQ,CAAE,GAAGD,EAAM,IAAKU,EAAE,cAAc,KAAM,CAAC,EAC3F,CAACV,CAAI,CACP,EAEMW,KAA0B,eAC7BD,GACCT,EAAQ,CAAE,GAAGD,EAAM,gBAAiBU,EAAE,cAAc,KAAyB,CAAC,EAChF,CAACV,CAAI,CACP,EAEMY,KAAmB,eAAY,IAAM,CACzCC,EAAO,QAAQ,mBAAmB,EAClCV,EAAWH,CAAI,CACjB,EAAG,CAACA,CAAI,CAAC,EAEHc,KAAY,eACfJ,GAA6C,CACxCA,EAAE,UAAY,IAAMF,GAAWR,EAAK,GAAG,GAAK,CAACI,GAC/CQ,EAAiB,CAErB,EACA,CAACZ,CAAI,CACP,EAEMe,EAAyB,CAC7B,CAAE,wBAAwC,YAAa,UAAW,EAClE,CAAE,2BAA2C,YAAa,aAAc,EACxE,CAAE,2BAA2C,YAAa,aAAc,EACxE,CAAE,2BAA2C,YAAa,aAAc,EACxE,CAAE,iBAAiC,YAAa,OAAQ,CAC1D,EAEA,OACE,EAAAC,QAAA,cAACC,EAAA,CAAM,MAAOlB,EAAE,gBAAgB,EAAG,QAASF,IACxCC,GAAkB,aAAeA,GAAkB,WACnD,EAAAkB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACG,GAAA,KACErB,EAAiB,aAChB,EAAAkB,QAAA,cAACI,GAAA,KACC,EAAAJ,QAAA,cAACK,EAAA,KACC,EAAAL,QAAA,cAAC,SAAGlB,EAAiB,WAAY,CACnC,CACF,EAEDA,EAAiB,UAChB,EAAAkB,QAAA,cAACM,GAAA,KACC,EAAAN,QAAA,cAACO,GAAA,CACC,KAAMzB,EAAiB,SACvB,IAAKA,EAAiB,MAAQC,EAAE,iBAAiB,EACjD,KAAI,GACN,CACF,CAEJ,CACF,EAGF,EAAAiB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACQ,GAAA,KACC,EAAAR,QAAA,cAACS,EAAA,KACC,EAAAT,QAAA,cAACU,GAAA,KACC,EAAAV,QAAA,cAACW,GAAA,KACC,EAAAX,QAAA,cAACY,GAAA,CAAW,QAAQ,kCACjB7B,EAAE,qBAAqB,CAC1B,EACA,EAAAiB,QAAA,cAACa,GAAA,CACC,YAAY,4BACZ,MAAO9B,EAAE,qBAAqB,EAC9B,MAAOC,EAAK,IACZ,SAAUS,EACV,UAAWK,EACX,GAAG,iCACL,CACF,EACA,EAAAE,QAAA,cAACW,GAAA,KACC,EAAAX,QAAA,cAACY,GAAA,CAAW,QAAQ,2BACjB7B,EAAE,4BAA4B,CACjC,EACA,EAAAiB,QAAA,cAACc,GAAA,CACC,MAAO9B,EAAK,gBACZ,SAAUW,EACV,QAASI,EACT,KAAK,MACL,MAAOhB,EAAE,4BAA4B,EACvC,CACF,CACF,CACF,EACA,EAAAiB,QAAA,cAACS,EAAA,KACC,EAAAT,QAAA,cAACe,GAAA,CACC,UAAS,GACT,SAAU,CAACvB,GAAWR,EAAK,GAAG,GAAKI,EACnC,QAASQ,GAET,EAAAI,QAAA,cAACgB,EAAA,KAAejC,EAAE,qBAAqB,CAAE,CAC3C,CACF,CACF,EACC,GAOD,EAAAiB,QAAA,cAACQ,GAAA,KACC,EAAAR,QAAA,cAACK,EAAA,CAAQ,MAAK,IACZ,EAAAL,QAAA,cAAC,SAAGjB,EAAE,yCAAyC,CAAE,CACnD,CACF,CACF,EAECK,GACC,EAAAY,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACiB,GAAA,IAAO,CACV,EAGD3B,GACC,EAAAU,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACkB,GAAA,CAAS,SAAS,QAAQ,KAAI,GAAC,QAASnC,EAAE,0BAA0B,GAAK,QACvEA,EAAE,8BAA8B,CACnC,CACF,EAGF,EAAAiB,QAAA,gBAAAA,QAAA,cACGX,GAAM,YACL,EAAAW,QAAA,cAACE,EAAA,KACEb,GAAM,WAAW,IAAK8B,GACrB,EAAAnB,QAAA,cAACE,EAAA,CAAO,IAAKiB,EAAU,MACrB,EAAAnB,QAAA,cAACoB,GAAA,CACC,QAAS,GAAGC,EAAgBF,EAAU,KAAK,CAAC,IAAIA,EAAU,IAAI,GAC9D,YAAaA,EAAU,MAEvB,EAAAnB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,gBAAAA,QAAA,cACGmB,EAAU,aACT,EAAAnB,QAAA,cAACS,EAAA,KACC,EAAAT,QAAA,cAACK,EAAA,KACC,EAAAL,QAAA,cAAC,SAAGmB,EAAU,WAAY,CAC5B,CACF,CAEJ,EACA,EAAAnB,QAAA,gBAAAA,QAAA,cACGmB,EAAU,KACT,EAAAnB,QAAA,cAACS,EAAA,KACC,EAAAT,QAAA,cAACsB,EAAA,CACC,GAAG,IACH,KAAMH,EAAU,KAAO,GACvB,OAAO,SACP,IAAI,+BACJ,MAAOpC,EAAE,yCAAyC,GAAK,IAEtDA,EAAE,yCAAyC,CAC9C,CACF,CAEJ,CACF,EACCoC,EAAU,OAASA,EAAU,MAAM,OAAS,GAC3C,EAAAnB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACuB,GAAA,KAAIxC,EAAE,wBAAwB,CAAE,EAChCoC,EAAU,MAAM,IAAKK,GACpB,EAAAxB,QAAA,cAACQ,GAAA,CAAY,IAAKgB,EAAK,MAAQ,IAC7B,EAAAxB,QAAA,cAACyB,GAAA,CAAW,MAAOD,EAAK,MAAQ,IAAKA,EAAK,WAAY,CACxD,CACD,CACH,EAEDL,EAAU,QAAUA,EAAU,OAAO,OAAS,GAC7C,EAAAnB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACuB,GAAA,KAAIxC,EAAE,0BAA0B,CAAE,EAClCoC,EAAU,OAAO,IAAKO,GACrB,EAAA1B,QAAA,cAACQ,GAAA,CAAY,IAAKkB,EAAM,OAAS,IAC/B,EAAA1B,QAAA,cAAC2B,GAAA,KACC,EAAA3B,QAAA,cAAC4B,GAAA,KACC,EAAA5B,QAAA,cAACyB,GAAA,CAAW,MAAOC,EAAM,OAAS,IAAKA,EAAM,WAAY,CAC3D,EACA,EAAA1B,QAAA,cAAC4B,GAAA,KACC,EAAA5B,QAAA,cAAC6B,GAAA,KAAgB,IACbH,EAAM,MAAM,IAAEA,EAAM,IACxB,CACF,CACF,CACF,CACD,CACH,CAEJ,CACF,CACD,CACH,CAEJ,CACF,CAEJ,EAEOI,GAAQpD,GDtPf,IAAAqD,GAA+B,mBAQzBC,GAAY,CAAC,CAAE,GAAAC,EAAI,OAAAC,EAAQ,iBAAAC,CAAiB,IAAwB,CACxE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,aAAS,EAAK,EAClCC,KAAc,gBAAY,IAAMD,EAAS,CAACD,CAAK,EAAG,CAACA,CAAK,CAAC,EAC/D,OAAKF,EAAiB,OAKpB,GAAAK,QAAA,iBAAAA,QAAA,cACGH,GACC,GAAAG,QAAA,cAACC,GAAA,CACC,GAAIR,EACJ,OAAQC,EACR,QAASK,EACT,iBAAkBJ,EAAiB,CAAC,EACtC,EAEF,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KAAeR,EAAE,mBAAmB,CAAE,CACzC,EACA,GAAAI,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,iBAAAA,QAAA,cACGL,EAAiB,IAAI,CAACU,EAAiBC,IACtC,GAAAN,QAAA,cAACO,GAAA,CACC,IAAK,GAAGF,EAAgB,GAAG,IAAIC,CAAK,GACpC,KAAMD,EAAgB,UAAY,OAClC,QAASA,EAAgB,MAAQT,EAAE,iBAAiB,GAEpD,GAAAI,QAAA,cAACQ,GAAA,KAAkBZ,EAAE,wBAAwB,CAAE,EAC/C,GAAAI,QAAA,cAACS,GAAA,KACC,GAAAT,QAAA,cAAC,SACC,GAAAA,QAAA,cAACU,EAAA,CAAa,QAASX,GAAcH,EAAE,wBAAwB,CAAE,CACnE,CACF,CACF,CACD,CACH,CACF,CACF,CACF,EApCO,IAsCX,EAEOe,GAAQnB,GmB7Df,IAAAoB,GAA6C,gBAM7C,IAAAC,GAAuB,YCNvB,IAAAC,GAAkB,gBAQlB,IAAAC,GAAuB,YACvBC,GAA+B,mBAOzBC,GAAqB,CAAC,CAAE,QAAAC,EAAS,iBAAAC,CAAiB,IAA0B,CAChF,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,EAAA,CAAM,MAAOH,GAAkB,iBAAmBC,EAAE,gBAAgB,EAAG,QAASF,GAC9EC,GAAkB,iBACjB,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,EAAA,CACC,wBAAyB,CACvB,UAAQ,WAAOL,EAAiB,eAAe,CACjD,EACD,CACH,EAEDA,GAAkB,KACjB,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,EAAA,CACC,GAAG,IACH,KAAMN,EAAiB,IACvB,MAAOC,EAAE,qCAAqC,GAAK,GACnD,OAAO,SACP,IAAI,uBAEHA,EAAE,qCAAqC,CAC1C,CACF,EAEDD,GAAkB,UACjB,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACK,GAAA,CACC,KAAMP,EAAiB,SACvB,IAAKA,EAAiB,MAAQC,EAAE,iBAAiB,EACjD,KAAI,GACN,CACF,CAEJ,CAEJ,EAEOO,GAAQV,GD7Cf,IAAAW,GAA+B,mBAMzBC,GAAY,CAAC,CAAE,iBAAAC,CAAiB,IAAwB,CAC5D,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,aAAS,EAAK,EAClCC,KAAc,gBAAY,IAAMD,EAAS,CAACD,CAAK,EAAG,CAACA,CAAK,CAAC,EAC/D,OAAKD,EAAiB,OAKpB,GAAAI,QAAA,iBAAAA,QAAA,cACGH,GAAS,GAAAG,QAAA,cAACC,GAAA,CAAmB,QAASF,EAAa,iBAAkBH,EAAiB,CAAC,EAAG,EAC3F,GAAAI,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACER,EAAiB,CAAC,GAAG,iBAAmB,EAAE,gBAAgB,CAC7D,CACF,EACA,GAAAI,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,iBAAAA,QAAA,cACGJ,EAAiB,IAAI,CAACS,EAAiBC,IACtC,GAAAN,QAAA,cAACO,GAAA,CACC,IAAK,GAAGF,EAAgB,GAAG,IAAIC,CAAK,GACpC,KAAMD,EAAgB,UAAY,OAClC,QAASA,EAAgB,MAAQ,EAAE,iBAAiB,GAEnDA,EAAgB,aACf,GAAAL,QAAA,cAACQ,EAAA,CACC,wBAAyB,CACvB,UAAQ,WAAOH,EAAgB,WAAW,CAC5C,EACF,EAEF,GAAAL,QAAA,cAACS,GAAA,KACC,GAAAT,QAAA,cAAC,SACC,GAAAA,QAAA,cAACU,EAAA,CAAa,QAASX,GAAc,EAAE,wBAAwB,CAAE,CACnE,CACF,CACF,CACD,CACH,CACF,CACF,CACF,EArCO,IAuCX,EAEOY,GAAQhB,GpBnDf,IAAMiB,GAAmB,CAAC,CAAE,GAAAC,EAAI,OAAAC,EAAQ,iBAAAC,CAAiB,IAClDA,EAAiB,QAIlBA,EAAiB,OAAS,EACxBA,EAAiB,CAAC,EAAE,kBAAoBA,EAAiB,CAAC,EAAE,uBACvD,GAAAC,QAAA,cAACC,GAAA,CAAU,GAAIJ,EAAI,OAAQC,EAAQ,iBAAkBC,EAAkB,EAEzE,GAAAC,QAAA,cAACE,GAAA,CAAc,iBAAkBH,EAAkB,EAPnD,KAaJI,GAAQP,GsB1Bf,IAAAQ,GAAkB,gBAClBC,GAAuB,YACvBC,GAA+B,mBAc/B,IAAMC,GAA4B,CAAC,CAAE,cAAAC,CAAc,IAAiC,CAClF,GAAM,CAAE,CAAE,KAAI,mBAAe,EAC7B,OAAKA,EAKH,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAG,SAAQ,IAAEJ,EAAc,KAAM,CACpC,EACCA,EAAc,aACb,GAAAC,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,EAAA,CAAQ,wBAAyB,CAAE,UAAQ,WAAOL,EAAc,WAAW,CAAE,EAAG,CACnF,EAEDA,EAAc,MAAM,KACnB,GAAAC,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACK,EAAA,CACC,GAAG,IACH,KAAMN,EAAc,KAAK,IACzB,OAAO,SACP,IAAI,uBAEHA,EAAc,KAAK,MAAQA,EAAc,KAAK,MAAQ,EAAE,uBAAuB,CAClF,CACF,EAEDA,EAAc,OACb,GAAAC,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACM,GAAA,CAAQ,KAAMP,EAAc,MAAO,IAAK,EAAE,iBAAiB,GAAK,GAAI,KAAI,GAAC,CAC5E,CAEJ,EA9BO,IAgCX,EAEOQ,GAAQT,GCrDf,IAAAU,EAAwD,gBCAxD,IAAAC,GAAmC,gBCAnC,IAAAC,GAA6C,gBAG7C,IAAAC,GAA+B,mBAUzBC,GAAa,CAAC,CAAE,MAAAC,EAAO,MAAAC,EAAO,KAAAC,EAAM,eAAAC,EAAgB,aAAAC,CAAa,IAAuB,CAC5F,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EAEtCC,KAAgB,gBAAY,IAAM,CAClCJ,GACFA,EAAa,CAEjB,EAAG,CAAC,CAAC,EAECK,KAAU,gBAAY,IAAM,CAC3BH,IACHC,EAAW,EAAI,EACXJ,GACFA,EAAe,EAGrB,EAAG,CAACG,CAAO,CAAC,EAENI,EACJR,IAAS,MACLG,EAAE,yBAAyB,EAC3BH,IAAS,SACTG,EAAE,0BAA0B,EAC5B,GAEN,OACE,GAAAM,QAAA,cAACC,EAAA,KACEN,EACC,GAAAK,QAAA,cAACE,GAAA,CACC,QAASL,EACT,GAAG,IACH,KAAM,GAAGN,CAAI,IAAID,CAAK,GACtB,MAAO,GAAGS,CAAY,IAAIT,CAAK,GAC/B,UAAS,IAET,GAAAU,QAAA,cAACG,EAAA,KAAeb,CAAM,CACxB,EAEA,GAAAU,QAAA,cAACE,GAAA,CAAgB,QAASJ,EAAS,MAAOT,EAAO,UAAS,IACxD,GAAAW,QAAA,cAACG,EAAA,KAAed,CAAM,CACxB,CAEJ,CAEJ,EAEOe,GAAQhB,GC5Df,IAAAiB,GAAyD,4BCAzD,IAAMC,GAAW,CACf,QAAS,SACT,sBAAuB,CAAE,GAAM,CAAC,IAAI,CAAE,EACtC,UAAW,CACT,GAAI,CACF,KACA,KACA,0EACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAE,EACf,CACE,CAAC,6BAA8B,WAAY,CAAC,IAAI,EAAG,MAAO,EAAG,UAAU,EACvE,CAAC,mBAAoB,QAAS,CAAC,eAAe,EAAG,MAAO,EAAG,OAAO,EAClE,CACE,2BACA,WACA,CAAC,wCAAwC,EACzC,MACA,EACA,UACF,EACA,CAAC,kCAAmC,cAAe,CAAC,GAAG,EAAG,MAAO,EAAG,aAAa,EACjF,CACE,6BACA,WACA,CACE,sHACF,EACA,MACA,EACA,UACF,EACA,CAAC,6BAA8B,WAAY,CAAC,eAAe,EAAG,MAAO,EAAG,UAAU,EAClF,CACE,qCACA,cACA,CAAC,mDAAmD,EACpD,MACA,EACA,aACF,EACA,CAAC,mCAAoC,cAAe,CAAC,MAAM,EAAG,MAAO,EAAG,aAAa,EACrF,CAAC,gCAAiC,cAAe,CAAC,GAAG,EAAG,MAAO,EAAG,aAAa,EAC/E,CACE,mCACA,cACA,CAAC,+EAA+E,EAChF,MACA,EACA,aACF,EACA,CAAC,mCAAoC,cAAe,CAAC,GAAG,EAAG,MAAO,EAAG,aAAa,EAClF,CACE,2CACA,iBACA,CAAC,MAAM,EACP,MACA,EACA,gBACF,CACF,EACA,IACA,EACA,EACA,EACA,EACA,EACA,CACE,CACE,meACA,CAAC,EAAG,EAAG,CAAC,CACV,EACA,CAAC,iBAAkB,CAAC,CAAC,CAAC,EACtB,CAAC,aAAc,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,EAC3B,CAAC,uCAAwC,CAAC,EAAG,EAAG,EAAG,EAAE,CAAC,EACtD,CAAC,gBAAiB,CAAC,CAAC,CAAC,EACrB,EACA,CAAC,gBAAiB,CAAC,CAAC,CAAC,EACrB,CAAC,iBAAkB,CAAC,CAAC,CAAC,EACtB,EACA,CAAC,gBAAiB,CAAC,CAAC,CAAC,CACvB,CACF,CACF,EACA,cAAe,CAAC,CAClB,EAEOC,GAAQD,GDlFf,IAAME,GAAgBC,GAETC,GAAqBC,GAAiB,CACjD,GAAI,CAKF,SAJe,+BACbA,EAAK,QAAQ,IAAK,EAAE,EAAE,QAAQ,KAAM,EAAE,EACtCH,EACF,GACe,eAAe,GAAKG,CACrC,MAAY,CACV,OAAOA,CACT,CACF,EFVA,IAAAC,GAA+B,mBAOzBC,GAAa,CAAC,CAAE,QAAAC,EAAS,OAAAC,CAAO,IAAuB,CAC3D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAAQH,GAAS,OAASC,GAAQ,SAAS,MAC3CG,EAAcJ,GAAS,aAAeC,GAAQ,SAAS,YAEvDI,KAAqB,gBAAY,IAAMC,EAAO,QAAQ,aAAa,EAAG,CAAC,CAAC,EACxEC,KAAsB,gBAAY,IAAMD,EAAO,QAAQ,oBAAoB,EAAG,CAAC,CAAC,EAChFE,KAAoB,gBAAY,IAAMF,EAAO,QAAQ,iBAAiB,EAAG,CAAC,CAAC,EAEjF,MAAI,CAACH,GAAS,CAACC,EACN,KAIP,GAAAK,QAAA,iBAAAA,QAAA,cACGN,GACC,GAAAM,QAAA,cAACC,GAAA,CACC,eAAgBL,EAChB,MAAOH,EAAE,wBAAwB,EACjC,MAAOC,EACP,KAAK,SACP,EAEDC,GACC,GAAAK,QAAA,cAACC,GAAA,CACC,MAAOR,EAAE,8BAA8B,EACvC,MAAOS,GAAkBP,CAAW,EACpC,KAAK,MACL,eAAgBG,EAChB,aAAcC,EAChB,CAEJ,CAEJ,EAEOI,GAAQb,GIjDf,IAAAc,GAA4B,4BASrB,IAAMC,GAAS,GAAAC,QAAO;AAAA;AAAA;AAAA,IAGzB,CAAC,CAAE,KAAAC,CAAK,IACRA,GACA;AAAA;AAAA,KAEC;AAAA;AAAA,IAED,CAAC,CAAE,SAAAC,CAAS,IACZA,GACA;AAAA;AAAA,KAEC;AAAA,EAaQC,GAAU,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA,IAI1B,CAAC,CAAE,OAAAI,CAAO,IACVA,IAAW,MACP;AAAA;AAAA,UAGAA,IAAW,SACX;AAAA;AAAA,UAGA;AAAA;AAAA,SAEC;AAAA;AAAA,IAEL,CAAC,CAAE,MAAAC,CAAM,IACTA,IAAU,MACN;AAAA;AAAA,UAGAA,IAAU,SACV;AAAA;AAAA,UAGA;AAAA;AAAA,SAEC;AAAA;AAAA,IAEL,CAAC,CAAE,SAAAC,CAAS,IACZA,GACA;AAAA,gBACYC,EAAKD,EAAW,EAAE,CAAC;AAAA;AAAA,YAEvBP,EAAM;AAAA,mBACCQ,EAAKD,EAAW,CAAC,CAAC;AAAA;AAAA,KAEhC;AAAA;AAAA,IAED,CAAC,CAAE,SAAAE,CAAS,IACZA,GACA;AAAA;AAAA,KAEC;AAAA;AAAA,IAED,CAAC,CAAE,WAAAC,CAAW,IACdA,GACA;AAAA;AAAA,KAEC;AAAA;AAAA,IAED,CAAC,CAAE,UAAAC,CAAU,IACbA,GACA;AAAA,QACKC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,KAGzC;AAAA;AAAA,IAED,CAAC,CAAE,UAAAC,CAAU,IACbA,GACA;AAAA,QACKD,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,KAGzC;ECrGL,IAAAE,GAA4B,4BAQrB,IAAMC,GAAiB,GAAAC,QAAO;AAAA,WAC1BC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGf,CAAC,CAAE,MAAAC,CAAM,IACTA,IAAU,UACN;AAAA,8BACuBC,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;AAAA,UAE9DD,IAAU,UACV;AAAA,8BACuBC,GAAUA,EAAM,MAAM,MAAM,GAAG,OAAO;AAAA,UAE7DD,IAAU,QACV;AAAA,8BACuBC,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;AAAA,UAE9D;AAAA,8BACuBA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA,SACjE;EC5BT,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,EAMdC,GAAO,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKTE,EAAK,EAAG,CAAC;AAAA;AAAA,EAIdC,GAAO,GAAAH,QAAO,IAAI,MAAM,KAAO,CAC1C,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,EAOWI,GAAQ,GAAAJ,QAAO;AAAA,6BACCE,EAAK,CAAC,CAAC;EDpB7B,IAAMG,GAAoB,CAAC,CAAE,SAAAC,CAAS,IAC3C,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAU,MAAK,GAAC,CACnB,EACA,GAAAH,QAAA,cAACI,GAAA,KAAOL,CAAS,CACnB,EAGIM,GAAgB,CAAC,CAAE,SAAAN,CAAS,IAAsB,GAAAC,QAAA,cAACM,GAAA,KAAMP,CAAS,EAEjEQ,GAAQF,GEpBf,IAAAG,GAA6C,gBCA7C,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO;AAAA,aACjBC,EAAK,GAAG,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA,sBACVC,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA,EAKhDC,GAAS,GAAAH,QAAO;AAAA;AAAA;AAAA,EAKhBI,GAAO,GAAAJ,QAAO;AAAA;AAAA,gBAEXC,EAAK,CAAC,CAAC;AAAA,EAGVI,GAAO,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA,EAMdM,GAAS,GAAAN,QAAO;AAAA;AAAA,kBAEXC,EAAK,GAAG,CAAC;AAAA;AAAA,EAIdM,GAAc,GAAAP,QAAO;AAAA;AAAA,mBAEfC,EAAK,GAAI,CAAC;AAAA;AAAA,EAIhBO,MAAU,GAAAR,SAAOS,CAAW,EAAE,MAAM,KAAO,CACtD,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOSR,EAAK,GAAI,CAAC;AAAA,cACPA,EAAK,GAAI,CAAC;AAAA,YACZA,EAAK,GAAI,CAAC;AAAA,aACTA,EAAK,GAAI,CAAC;AAAA,wBACEC,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBlDQ,GAAQ,GAAAV,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;EDvEF,IAAAW,GAA+B,mBAUzBC,GAAY,CAAC,CAAE,MAAAC,EAAO,KAAAC,EAAM,YAAAC,EAAa,SAAAC,EAAU,QAAAC,CAAQ,IAAa,CAC5E,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAMC,CAAO,KAAI,aAAS,EAAK,EAChCC,KAAe,gBAAY,IAAMD,EAAQ,CAACD,CAAI,EAAG,CAACA,CAAI,CAAC,EAE7D,OACE,GAAAG,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,KAAOd,CAAM,CAChB,EACCG,GACC,GAAAM,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACM,GAAA,CAAQ,QAASP,EAAc,MAAOH,EAAE,wBAAwB,GAAK,IACpE,GAAAI,QAAA,cAACO,GAAA,CAAS,MAAK,GAAC,CAClB,CACF,CAEJ,EACCd,GACC,GAAAO,QAAA,cAACQ,GAAA,KACC,GAAAR,QAAA,cAACS,EAAA,CAAa,QAASd,EAAS,MAAOF,GACpCA,CACH,CACF,CAEJ,EACCD,GAAQ,GAAAQ,QAAA,cAACU,GAAA,KAAMlB,CAAK,CACvB,EACCK,GACC,GAAAG,QAAA,cAACW,EAAA,CAAM,MAAOpB,EAAO,QAASQ,GAC3BL,CACH,CAEJ,CAEJ,EAEOkB,GAAQtB,GExDf,IAAAuB,GAAyD,gBCAzD,IAAAC,GAA8B,WAOjBC,MAAwB,kBAA0C,CAC7E,oBAAsBC,GAAM,CAAC,CAC/B,CAAC,EDCD,IAAAC,GAA+B,mBAQzBC,GAAc,CAAC,CAAE,QAAAC,EAAS,YAAAC,EAAa,QAAAC,CAAQ,IAAwB,CAC3E,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAAE,iBAAAC,EAAkB,oBAAAC,CAAoB,KAAI,eAAWC,EAAqB,EAC5E,CAACC,EAAYC,CAAa,KAAI,aAASJ,CAAgB,EAEvDK,KAAY,gBAAaC,GAAe,CACxCA,GACFL,EAAoBK,CAAE,CAE1B,EAAG,CAAC,CAAC,EAECC,KAAW,gBACdC,GAA4CJ,EAAcI,EAAE,cAAc,KAAK,EAChF,CAAC,CACH,EAEA,OAAKL,EAKH,GAAAM,QAAA,cAACC,EAAA,CAAM,MAAOX,EAAE,mBAAmB,EAAG,QAASD,GAC7C,GAAAW,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAAC,SAAGV,EAAE,8BAA8B,CAAE,CACxC,CACF,EACA,GAAAU,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACK,GAAA,KAAYf,EAAE,mBAAmB,CAAE,EACpC,GAAAU,QAAA,cAACM,GAAA,CACC,MAAOZ,EACP,SAAUI,EACV,QAASV,GAAa,IAAKmB,IAAO,CAChC,MAAOA,EAAE,GACT,YAAaA,EAAE,IACjB,EAAE,EACF,MAAOjB,EAAE,mBAAmB,EAC9B,CACF,CACF,EACA,GAAAU,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACQ,GAAA,CACC,SAAUrB,EACV,UAAS,GACT,QAAS,IAAMS,EAAUF,CAAU,EACnC,MAAOJ,EAAE,2BAA2B,GAAK,IAEzC,GAAAU,QAAA,cAACS,EAAA,KAAenB,EAAE,eAAe,CAAE,CACrC,CACF,CACF,EAlCO,IAoCX,EAEOoB,GAAQxB,GEzEf,IAAAyB,GAAkB,gBAClBC,GAAuB,YAyBvB,IAAMC,GAAqB,CAAC,CAAE,cAAAC,EAAe,QAAAC,CAAQ,IACnD,GAAAC,QAAA,cAACC,EAAA,CAAM,MAAOH,EAAc,OAAS,GAAI,QAASC,GAC/CD,EAAc,OACb,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAQ,KAAML,EAAc,MAAO,IAAKA,EAAc,OAAS,OAAW,KAAI,GAAC,CAClF,EAEDA,EAAc,aACb,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,EAAA,CAAQ,wBAAyB,CAAE,UAAQ,WAAON,EAAc,WAAW,CAAE,EAAG,CACnF,EAEDA,EAAc,MAAM,MAAQA,EAAc,KAAK,OAC9C,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACK,EAAA,CACC,GAAG,IACH,KAAMP,EAAc,KAAK,KACzB,OAAO,SACP,IAAI,gCAEHA,EAAc,KAAK,KACtB,CACF,CAEJ,EAGKQ,GAAQT,GbjCf,IAAAU,GAAuB,kBACvBC,GAAe,6BACfC,GAA+B,mBAazBC,GAAY,CAAC,CACjB,aAAAC,EACA,eAAAC,EACA,UAAAC,EACA,OAAAC,EACA,QAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,6BAAAC,CACF,IAAiB,CACf,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAaC,CAAc,KAAI,YAAS,EAAK,EAC9CC,KAAkB,eAAY,IAAMD,EAAe,EAAI,EAAG,CAAC,CAAC,EAC5DE,KAAmB,eAAY,IAAMF,EAAe,EAAK,EAAG,CAAC,CAAC,EAE9D,CAACG,EAAOC,CAAQ,KAAI,YAAiC,EACrDC,KAAS,eAAaC,GAAsCF,EAASE,CAAS,EAAG,CAAC,CAAC,EACnFC,KAAU,eAAY,IAAMH,EAAS,MAAS,EAAG,CAAC,CAAC,KAEzD,aAAU,IAAM,EACTX,GAAUC,IAAYK,GACzBC,EAAe,EAAK,CAExB,EAAG,CAACP,EAAQC,CAAO,CAAC,EAEpB,IAAMc,EAAgBlB,GAAc,cAEpC,OACE,EAAAmB,QAAA,gBAAAA,QAAA,cACGV,GACC,EAAAU,QAAA,cAACC,GAAA,CACC,QAASb,EACT,YAAaJ,GAAQ,YACrB,QAASS,EACX,EAEDC,GAAS,EAAAM,QAAA,cAACE,GAAA,CAAmB,cAAeR,EAAO,QAASI,EAAS,EACtE,EAAAE,QAAA,cAACG,EAAA,KACEpB,GAAaA,EAAU,SACtB,EAAAiB,QAAA,cAACI,EAAA,KACC,EAAAJ,QAAA,cAACK,GAAA,CAAc,SAAU,CAAC,CAACtB,EAAU,SAAU,UAAS,GAAC,QAASI,GAChE,EAAAa,QAAA,cAACM,EAAA,KAAejB,EAAE,wBAAwB,CAAE,CAC9C,CACF,EAEDN,GAAW,UACV,EAAAiB,QAAA,cAACI,EAAA,KACC,EAAAJ,QAAA,cAACO,GAAA,CACC,MAAOlB,EAAE,oBAAoB,EAC7B,KAAMA,EAAE,+BAA+B,GAAK,QAE5C,EAAAW,QAAA,cAACQ,EAAA,KACC,EAAAR,QAAA,cAAC,SAAGX,EAAE,6BAA6B,CAAE,CACvC,CACF,CACF,EAEF,EAAAW,QAAA,cAACS,GAAA,CAAW,OAAQzB,EAAQ,QAASC,EAAS,CAChD,EACA,EAAAe,QAAA,cAACG,EAAA,KACEjB,GAAiB,IAAI,KAAKA,CAAa,EAAE,QAAQ,EAAI,IAAI,KAAK,EAAE,QAAQ,GACvE,EAAAc,QAAA,cAACI,EAAA,KACC,EAAAJ,QAAA,cAACU,GAAA,CAAQ,SAAU,EAAG,OAAO,UAC3B,EAAAV,QAAA,cAACW,GAAA,CAAO,SAAQ,IACd,EAAAX,QAAA,cAACY,GAAA,CAAe,MAAM,UAAU,CAClC,EACA,EAAAZ,QAAA,cAACW,GAAA,KACC,EAAAX,QAAA,cAACa,GAAA,KACExB,EAAE,yBAA0B,CAC3B,QAAM,WAAO,IAAI,KAAKH,CAAa,EAAG,eAAgB,CAAE,OAAQ,GAAA4B,OAAG,CAAC,CACtE,CAAC,CACH,CACF,CACF,CACF,EAEF,EAAAd,QAAA,cAACI,EAAA,KACC,EAAAJ,QAAA,cAACe,GAAA,KACEhB,GAAe,OACd,EAAAC,QAAA,cAACgB,GAAA,KACC,EAAAhB,QAAA,gBAAAA,QAAA,cACGX,EAAE,qBAAqB,EAAG,IAC3B,EAAAW,QAAA,cAACiB,EAAA,CACC,QAAS,IACPrB,EAAO,CACL,MAAOG,GAAe,MACtB,MAAOA,GAAe,MACtB,YAAaA,GAAe,YAC5B,KAAMA,GAAe,IACvB,CAAC,GAGFA,EAAc,KACjB,EAAgB,IACfV,EAAE,kBAAkB,EAAE,YAAY,CACrC,CACF,EAEDP,GAAgB,IAAI,CAACiB,EAAemB,IACnC,EAAAlB,QAAA,cAACgB,GAAA,CAAkB,IAAKjB,EAAc,OAASmB,GAC7C,EAAAlB,QAAA,gBAAAA,QAAA,cACGX,EAAE,qBAAqB,EAAG,IAC3B,EAAAW,QAAA,cAACiB,EAAA,CACC,QAAS,IACPrB,EAAO,CACL,MAAOG,GAAe,MACtB,MAAOA,GAAe,MACtB,YAAaA,GAAe,YAC5B,KAAMA,GAAe,IACvB,CAAC,GAGFA,EAAc,KACjB,CACF,CACF,CACD,EACAhB,GAAW,kBACV,EAAAiB,QAAA,cAACgB,GAAA,KAAmB3B,EAAE,mBAAmB,CAAE,CAE/C,CACF,CACF,GACEL,GAAQ,YAAY,QAAU,GAAK,GACnC,EAAAgB,QAAA,cAACG,EAAA,KACC,EAAAH,QAAA,cAACO,GAAA,CACC,MAAOlB,EAAE,0BAA0B,EACnC,YAAaA,EAAE,mBAAmB,GAAK,GACvC,QAASG,GAET,EAAAQ,QAAA,cAACQ,EAAA,KACC,EAAAR,QAAA,cAAC,SAAGX,EAAE,qCAAqC,CAAE,CAC/C,CACF,CACF,CAEJ,CAEJ,EAEO8B,GAAQvC,Gc/Kf,IAAAwC,GAAmC,gBACnCC,GAA+B,mBCD/B,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,EAKjBC,GAAU,GAAAD,QAAO;AAAA;AAAA,EAIjBE,GAAS,GAAAF,QAAO;AAAA;AAAA,kBAEXG,EAAK,CAAC,CAAC;EDJzB,IAAMC,GAAgB,CAAC,CAAE,SAAAC,EAAU,QAAAC,EAAS,YAAAC,CAAY,IACtD,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAASL,CAAS,EAClBC,GAAWC,GACV,GAAAC,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAY,GAAG,IAAI,KAAK,IAAI,QAASN,GACpC,GAAAE,QAAA,cAACK,EAAA,KAAeN,CAAY,CAC9B,CACF,CAEJ,EAGKO,GAAQV,GExBf,IAAAW,EAAgE,gBCAhE,IAAAC,GAA4B,4BAQrB,IAAMC,GAAU,GAAAC,QAAO;AAAA,wBACNC,EAAK,CAAC,CAAC;AAAA,UACpBC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA;AAAA,IAEpCA,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,0BACdD,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAK7B,CAAC,CAAE,UAAAE,CAAU,IACbA,GACA;AAAA,cACWD,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,KAC5C;AAAA,EAGQE,GAAO,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMtBE,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc7BG,GAAO,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBvB,CAAC,CAAE,SAAAM,CAAS,IACZA,GACA;AAAA,QACIF,EAAI;AAAA,iBACK,IAAME,CAAQ;AAAA,qBACV,IAAMA,CAAQ;AAAA;AAAA,KAE9B;AAAA;AAAA,IAED,CAAC,CAAE,WAAAC,CAAW,IACdA,GACA;AAAA,QACKL,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,UAClCE,EAAI;AAAA,mBACK,IAAMG,CAAU;AAAA,uBACZ,IAAMA,CAAU;AAAA;AAAA;AAAA,KAGlC;AAAA;AAAA,IAED,CAAC,CAAE,WAAAC,CAAW,IACdA,GACA;AAAA,QACKN,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,UAClCE,EAAI;AAAA,mBACK,IAAMI,CAAU;AAAA,uBACZ,IAAMA,CAAU;AAAA;AAAA;AAAA,KAGlC;AAAA,EAOQC,GAAc,GAAAT,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAK7BE,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAehC,CAAC,CAAE,SAAAQ,CAAS,IACZA,EACI;AAAA,2DAC+CT,EAAKS,CAAQ,CAAC;AAAA,cAE7D;AAAA,4BACiBR,GAAUA,EAAM,MAAM,KAAK,SAAS,OAAO;AAAA,aAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAML,CAAC,CAAE,SAAAQ,CAAS,IACZA,EACI;AAAA,0DAC8CT,EAAKS,CAAQ,CAAC;AAAA,cAE5D;AAAA,4BACiBR,GAAUA,EAAM,MAAM,KAAK,SAAS,MAAM;AAAA,aAC1D;AAAA;AAAA;AAAA;AAAA,IAIT,CAAC,CAAE,SAAAQ,CAAS,IACZA,GACA;AAAA,QACIL,EAAI;AAAA,qBACSJ,EAAKS,EAAW,CAAC,CAAC;AAAA;AAAA;AAAA,QAG/BN,EAAI;AAAA,qBACSH,EAAKS,EAAW,CAAC,CAAC;AAAA;AAAA,KAElC;AAAA,EAGCC,GAAS,GAAAX,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKjBE,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,EAK7BU,MAAU,GAAAZ,SAAOW,EAAM;AAAA;AAAA;AAAA,EAKvBE,MAAU,GAAAb,SAAOW,EAAM;AAAA;AAAA;EDzJpC,IAAMG,GAAe,CAAC,CACpB,MAAAC,EACA,YAAAC,EACA,QAAAC,EACA,QAAAC,EACA,UAAAC,EACA,UAAAC,EACA,SAAAC,CACF,IAAqB,CACnB,IAAMC,KAAkB,UAAgC,IAAI,EAEtDC,KAAS,eAAY,IAAM,CAC/B,IAAMC,EAAYF,EAAgB,SAAS,SAAS,CAAC,EAAE,aAAe,EAChEG,EAAaH,EAAgB,SAAS,YAAc,EAEtDG,EAAa,GACfH,EAAgB,SAAS,OAAO,CAC9B,KAAMG,EAAaD,EACnB,SAAU,QACZ,CAAC,CAEL,EAAG,CAAC,CAAC,EAECE,KAAS,eAAY,IAAM,CAC/B,IAAMF,EAAYF,EAAgB,SAAS,SAAS,CAAC,EAAE,aAAe,EAChEK,EAAcL,EAAgB,SAAS,aAAe,EACtDG,EAAaH,EAAgB,SAAS,YAAc,EACpDM,EAAuBN,EAAgB,SAAS,aAAe,EAClCK,EAAcC,IAEdH,GACjCH,EAAgB,SAAS,OAAO,CAC9B,KAAMG,EAAaD,EACnB,SAAU,QACZ,CAAC,CAEL,EAAG,CAAC,CAAC,EAGC,CAACK,EAAaC,CAAc,KAAI,YAAS,EAAI,EAC7C,CAACC,EAAaC,CAAc,KAAI,YAAS,EAAI,EAE7CC,EAAW,IAAM,CACrB,IAAMR,EAAaH,EAAgB,SAAS,YAAc,EACpDK,EAAcL,EAAgB,SAAS,aAAe,EACtDM,EAAuBN,EAAgB,SAAS,aAAe,EAC/DY,EAA6BP,EAAcC,EAEjDE,EAAeL,GAAc,CAAgB,EAC7CO,EAAeE,GAA8BT,CAAyB,CACxE,EAEA,sBAAU,KACRQ,EAAS,EACTX,EAAgB,SAAS,iBAAiB,SAAUW,CAAQ,EACrD,IAAMX,EAAgB,SAAS,oBAAoB,SAAUW,CAAQ,GAC3E,CAAC,CAAC,EAGH,EAAAE,QAAA,cAACC,GAAA,CAAQ,UAAWf,GAClB,EAAAc,QAAA,cAACE,GAAA,CAAY,SAAUpB,GACrB,EAAAkB,QAAA,cAACG,GAAA,CACC,IAAKhB,EACL,SAAUJ,EACV,WAAYC,EACZ,WAAYC,GAEXL,EAAM,IAAI,CAACwB,EAAMC,IAChB,EAAAL,QAAA,cAACM,GAAA,CAAK,IAAKzB,EAAc,GAAGA,CAAW,IAAIwB,CAAC,GAAK,sBAAsBA,CAAC,IACrED,CACH,CACD,CACH,CACF,EACC,CAACV,GACA,EAAAM,QAAA,cAACO,GAAA,KACC,EAAAP,QAAA,cAACQ,GAAA,CAAU,QAASpB,EAAQ,MAAM,YAChC,EAAAY,QAAA,cAACS,GAAA,IAAgB,CACnB,CACF,EAED,CAACb,GACA,EAAAI,QAAA,cAACU,GAAA,KACC,EAAAV,QAAA,cAACQ,GAAA,CAAU,QAASjB,EAAQ,MAAM,QAChC,EAAAS,QAAA,cAACW,GAAA,IAAiB,CACpB,CACF,CAEJ,CAEJ,EAEOC,GAAQjC,GE5Gf,IAAAkC,GAAsC,WCAtC,IAAAC,GAA8B,WAWjBC,MAAuB,kBAAyC,CAC3E,gBAAiB,GACjB,QAAS,GACT,MAAO,GACP,SAAU,OACV,aAAeC,GAAM,CAAC,CACxB,CAAC,EDbD,IAAMC,GAAmB,CAACC,EAAYC,IAAiC,CACrE,IAAMC,KAAO,eAAWC,EAAoB,EAE5C,uBAAU,IAAM,CACd,IAAMC,EAAe,IAAI,gBACzBA,EAAa,IAAI,OAAQ,GAAG,EACxBF,EAAK,iBAAmBF,GAC1BI,EAAa,IAAI,KAAMJ,CAAE,EAEvBC,GACFG,EAAa,IAAI,sCAAuC,MAAM,EAEhEF,EAAK,aAAaE,CAAY,CAChC,EAAG,CAACJ,CAAE,CAAC,EAEAE,CACT,EAEOG,GAAQN,GEpBf,IAAMO,GAAe,4EAERC,GAAsBC,GAAcA,EAAE,QAAQ,wBAAyB,MAAM,EAE7EC,GAAiBC,GACxB,CAACA,GAAQA,EACJJ,GAEC,IAAI,OAAO,GAAGC,GAAmBG,CAAI,CAAC,GAAGJ,GAAa,MAAM,GAAI,IAAI,EPgBhF,IAAMK,GAAU,CAAC,CACf,GAAAC,EACA,UAAAC,EACA,UAAAC,EACA,mBAAAC,EACA,kBAAAC,EACA,kBAAAC,CACF,IAAoB,CAClB,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAAE,QAAAC,EAAS,SAAAC,EAAU,gBAAAC,CAAgB,EAAIC,GAAiBV,EAAI,CAAC,CAACG,CAAkB,EAElFQ,KAAgB,gBAAaX,GAAe,CAChDY,EAAO,QAAQ,cAAeZ,CAAE,EAC5BK,GACFA,EAAkBL,CAAE,CAExB,EAAG,CAAC,CAAC,EAEL,MAAI,CAACQ,GAAU,aAAa,UAAU,QAAUA,GAAU,aAAa,UAAU,SAAW,EACnF,KAGLD,EACK,GAAAM,QAAA,cAACC,GAAA,IAAO,EAIf,GAAAD,QAAA,cAACE,GAAA,CAAY,OAAM,GAAC,MAAK,GAAC,UAAU,wCAClC,GAAAF,QAAA,cAACG,GAAA,KACEP,EACC,GAAAI,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAc,QAAS,IAAM,CAAC,GAC7B,GAAAL,QAAA,cAACM,GAAA,CAAG,SAAQ,IAAEb,EAAE,sBAAsB,CAAE,CAC1C,CACF,EAEA,GAAAO,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAc,QAAS,IAAM,CAAC,EAAG,YAAY,aAC5C,GAAAL,QAAA,cAACM,GAAA,CAAG,SAAQ,IAAEb,EAAE,qBAAqB,CAAE,CACzC,CACF,EAGF,GAAAO,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACO,GAAA,CACC,SAAQ,GACR,QAAS,KACT,UAAW,IACX,UAAW,EACX,QAAS,EACT,MAAOZ,GAAU,aAAa,UAAU,IAAKa,GAAa,CACxD,IAAMC,EAASpB,EAAY,IAAIA,CAAS,GAAK,IAEvCqB,EAAIC,GAAc,EAElBC,EACJ,OAAO,SAAS,WAAa,IACzB,GAAGH,CAAM,GAAGD,EAAS,GAAG,GACxBE,EAAE,KAAK,GAAGrB,CAAS,GAAGF,CAAE,EAAE,EAC1B,OAAO,SAAS,SAAS,QAAQuB,EAAGF,EAAS,GAAG,EAChD,GAAG,OAAO,SAAS,QAAQ,GAAGC,CAAM,GAAGD,EAAS,GAAG,GAEzD,OACE,GAAAR,QAAA,cAACa,GAAA,CACC,IAAKL,EAAS,IACd,GAAIA,EAAS,IACb,QAASV,EACT,MAAOU,EAAS,MAChB,KAAMnB,EAAYuB,EAAexB,EAAY,IAAIoB,EAAS,GAAG,GAAK,OAClE,MAAOA,EAAS,eAAe,QAAQ,CAAC,GAAG,IAC3C,YAAaA,EAAS,iBACtB,WAAYjB,EAAoBiB,EAAS,WAAW,CAAC,GAAG,KAAO,OAC/D,QAAS,CACP,CACE,MAAOA,EAAS,SAClB,EACA,CACE,MAAO,GAAGM,EACRN,EAAS,iBAAiB,OAASA,EAAS,OAC9C,CAAC,IAAIf,EAAE,YAAYe,EAAS,iBAAiB,MAAQ,kBAAkB,EAAE,CAAC,EAC5E,EACA,CACE,MAAOA,EAAS,WAClB,EACA,CACE,MAAOA,EAAS,QAClB,CACF,EACA,MAAO,GAAGM,EAAgBN,EAAS,KAAK,CAAC,IAAIf,EAAE,kBAAkB,CAAC,GAClE,SACEe,EAAS,WAAa,QAAaA,EAAS,MAAQA,EAAS,SACzD,GAAGM,EAAgBN,EAAS,QAAQ,CAAC,IAAIf,EAAE,kBAAkB,CAAC,GAC9D,OAEN,aACEe,EAAS,eAAiB,OACtB,GAAGM,EAAgBN,EAAS,YAAY,CAAC,IAAIf,EAAE,kBAAkB,CAAC,GAClE,OAEN,qBACEe,EAAS,uBAAyB,OAC9B,GAAGM,EAAgBN,EAAS,oBAAoB,CAAC,IAAIf,EAAE,kBAAkB,CAAC,GAC1E,OAEN,UAAWJ,EACb,CAEJ,CAAC,EACH,CACF,CACF,CACF,CAEJ,EAEO0B,GAAQ7B,GQ7If,IAAA8B,GAAkB,gBAClBC,GAAuB,YASvB,IAAAC,GAA+B,mBAMzBC,GAAiB,CAAC,CAAE,eAAAC,CAAe,IAA2B,CAClE,GAAM,CAAE,CAAE,KAAI,mBAAe,EAC7B,OAAKA,EAKH,GAAAC,QAAA,iBAAAA,QAAA,cACGD,EAAe,IAAI,CAACE,EAAeC,IAClC,GAAAF,QAAA,cAACG,GAAA,CAAuB,IAAKF,EAAc,OAASC,GAClD,GAAAF,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAG,SAAQ,IAAEJ,EAAc,KAAM,CACpC,EACCA,EAAc,aACb,GAAAD,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACM,EAAA,CAAQ,wBAAyB,CAAE,UAAQ,WAAOL,EAAc,WAAW,CAAE,EAAG,CACnF,EAEDA,EAAc,MAAM,KACnB,GAAAD,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACO,EAAA,CACC,GAAG,IACH,KAAMN,EAAc,KAAK,IACzB,OAAO,SACP,IAAI,uBAEHA,EAAc,KAAK,MAAQA,EAAc,KAAK,MAAQ,EAAE,uBAAuB,CAClF,CACF,EAEDA,EAAc,OACb,GAAAD,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACQ,GAAA,CAAQ,KAAMP,EAAc,MAAO,IAAK,EAAE,iBAAiB,GAAK,GAAI,KAAI,GAAC,CAC5E,CAEJ,CACD,CACH,EAlCO,IAoCX,EAEOQ,GAAQX,GCzDf,IAAAY,EAAwD,gBCAxD,IAAAC,GAAmB,4BAIZ,IAAMC,GAAc,GAAAC,QAAO;AAAA;AAAA,EAIrBC,GAAiB,GAAAD,QAAO;AAAA;AAAA;AAAA,YAGzBE,EAAK,EAAE,CAAC;AAAA,EAGPC,GAAkB,GAAAH,QAAO;AAAA;AAAA,aAEzBE,EAAK,CAAC,CAAC;EChBpB,IAAAE,GAA+B,gBCA/B,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKnB,IAAMC,GAASC,GAAyC,CACtD,IAAIC,EAAKC,GAAM,MAAM,SAErB,OAAIF,IAAa,WACfC,EAAKC,GAAM,MAAM,GAAG,SACXF,IAAa,aACtBC,EAAKC,GAAM,MAAM,GAAG,UAGfD,CACT,EAMaE,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,UAAW,gCACb,EAAE;AAAA;AAAA,sBAEqBC,GAAkBN,GAAMM,EAAM,QAAQ,CAAC;AAAA,aACjDC,EAAK,GAAI,CAAC,IAAIA,EAAK,GAAG,CAAC;AAAA,WACxBD,GAAUA,EAAM,MAAM,MAAM,SAAS;AAAA;AAAA;AAAA;EDlBjD,IAAME,GAAQ,CAAC,CAAE,MAAAC,EAAO,SAAAC,CAAS,IAAa,GAAAC,QAAA,cAACC,GAAA,CAAQ,SAAUF,GAAWD,CAAM,EAE3EI,GAAQL,GDJf,IAAAM,GAAoB,kBACpBC,GAA+B,mBAIzBC,GAAsB,CAC1B,SACA,UACA,YACA,WACA,SACA,WACA,QACF,EAEMC,GAAqBC,GAAe,CACxC,OAAQA,EAAG,CACT,IAAK,SACH,OAAO,GAAAC,QAAQ,EAAE,oBAAoB,EACvC,IAAK,UACH,OAAO,GAAAA,QAAQ,EAAE,qBAAqB,EACxC,IAAK,YACH,OAAO,GAAAA,QAAQ,EAAE,uBAAuB,EAC1C,IAAK,WACH,OAAO,GAAAA,QAAQ,EAAE,sBAAsB,EACzC,IAAK,SACH,OAAO,GAAAA,QAAQ,EAAE,oBAAoB,EACvC,IAAK,WACH,OAAO,GAAAA,QAAQ,EAAE,sBAAsB,EACzC,IAAK,SACH,OAAO,GAAAA,QAAQ,EAAE,oBAAoB,CACzC,CACF,EASMC,GAA4B,CAAC,EAE7BC,GAAmBC,GACvBN,GAAS,OAAO,CAACO,EAAMC,IAAY,CACjC,IAAMC,EAAQR,GAAkBO,CAAO,EACjCE,EAAOJ,EAAEE,CAAO,EAChBG,EAAWJ,IAAOA,EAAK,OAAS,CAAC,EACvC,OAAII,GAAYA,EAAS,MAAQD,GAAM,MAAQC,EAAS,QAAUD,GAAM,MACtEH,EAAKA,EAAK,OAAS,CAAC,EAAE,QAAUE,EAEhCF,EAAK,KAAK,CACR,UAAWE,EACX,KAAMC,GAAM,KACZ,MAAOA,GAAM,KACf,CAAC,EAGIH,CACT,EAAGH,GAAI,MAAM,CAAC,EAEVQ,GAAwBN,GAAoB,CAChD,IAAMO,EAAY,IAAI,KAAK,EAAE,OAAO,EAC9BC,EAAMd,GAASa,IAAc,EAAI,EAAIA,EAAY,CAAC,EAClDL,EAAUF,EAAEQ,CAAG,EACrB,MAAO,CACL,MAAON,EAAU,GAAAL,QAAQ,EAAE,wBAAwB,EAAI,GAAAA,QAAQ,EAAE,kBAAkB,EACnF,KAAMK,GAAS,KACf,MAAOA,GAAS,KAClB,CACF,EAEMO,GAAoBC,GAAc,CACtC,IAAMC,EAAWD,EAAE,MAAM,GAAG,EAAE,IAAKE,GAAM,SAASA,EAAG,EAAE,CAAC,EACxD,OAAO,IAAI,KAAK,EAAE,SAASD,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,EAAE,QAAQ,CAC/D,EAMME,GAAe,CAAC,CAAE,aAAAC,CAAa,IAAyB,CAC5D,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvBC,KAAQ,YACZ,IAAOD,EAAeR,GAAqBQ,CAAY,EAAI,KAC3D,CAACA,CAAY,CACf,EAEME,KAAgB,YAAQ,IAAM,CAClC,GAAI,CACF,GAAID,GAAO,MAAQA,GAAO,MAAO,CAC/B,IAAME,EAAc,IAAI,KAAK,EAAE,QAAQ,EACjCC,EAAOT,GAAiBM,EAAM,IAAI,EAClCI,EAAQV,GAAiBM,EAAM,KAAK,EAC1C,OAAOE,GAAeC,GAAQD,GAAeE,CAC/C,CACF,MAAY,CACV,MAAO,EACT,CACF,EAAG,CAACJ,CAAK,CAAC,EAEJK,KAAK,YAAQ,IAAON,EAAef,GAAgBe,CAAY,EAAI,KAAO,CAACA,CAAY,CAAC,EAC9F,OAAKM,EAKH,GAAAC,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,MAAuB,EAAhBP,EAAkB,YAAiB,aAAN,EACpC,SAAUA,EAAgB,WAAa,WACzC,CACF,EACA,GAAAK,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KAAiBZ,GAAO,KAAM,CACjC,EACA,GAAAM,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KACEZ,GAAO,KAAO,GAAGA,EAAM,IAAI,IAAIA,EAAM,KAAK,GAAK,EAAE,aAAa,CACjE,CACF,CACF,EACCK,EAAG,IAAKpB,GACP,GAAAqB,QAAA,cAACI,GAAA,CAAe,IAAKzB,EAAE,WACrB,GAAAqB,QAAA,cAACK,GAAA,KACE1B,EAAE,QAAU,GAAGA,EAAE,SAAS,IAAIA,EAAE,OAAO,GAAKA,EAAE,SACjD,EACA,GAAAqB,QAAA,cAACK,GAAA,KACE1B,EAAE,KAAO,GAAGA,EAAE,IAAI,IAAIA,EAAE,KAAK,GAAK,EAAE,aAAa,CACpD,CACF,CACD,CACH,CACF,CACF,EAnCO,IAqCX,EAEO4B,GAAQf,GGrJf,IAAAgB,GAA6C,gBAI7C,IAAAC,GAA+B,mBAMzBC,GAAc,CAAC,CAAE,YAAAC,CAAY,IAAwB,CACzD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EAEtCC,KAAU,gBAAY,IAAM,CAACF,GAAWC,EAAW,EAAI,EAAG,CAACD,CAAO,CAAC,EAEzE,OACE,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAAiB,EAAE,mBAAmB,CAAE,EACzC,GAAAF,QAAA,cAACE,GAAA,KACEL,EACC,GAAAG,QAAA,cAACG,GAAA,CACC,GAAG,IACH,KAAM,OAAOP,CAAW,GACxB,MAAO,EAAE,wBAAyB,CAAE,YAAAA,CAAY,CAAC,GAAK,IAEtD,GAAAI,QAAA,cAACI,EAAA,KAAeR,CAAY,CAC9B,EAEA,GAAAI,QAAA,cAACG,GAAA,CAAiB,QAASJ,EAAS,MAAO,EAAE,uBAAuB,GAAK,IACvE,GAAAC,QAAA,cAACI,EAAA,KAAe,EAAE,uBAAuB,CAAE,CAC7C,CAEJ,CACF,CAEJ,EAEOC,GAAQV,GCtCf,IAAAW,GAA6C,gBCA7C,IAAAC,GAA2B,WCA3B,IAAAC,GAA8B,WAcjBC,MAAkB,kBAAoC,CAAC,CAAC,EDVrE,IAAMC,GAAc,OAAM,eAAWC,EAAe,EAE7CC,GAAQF,GENf,IAAAG,GAAmB,4BAENC,GAAU,GAAAC,QAAO;AAAA;AAAA,EAIjBC,GAAQ,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA,EAMfE,GAAc,GAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAQtBG,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAGnCC,GAAoB,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA;EHjBxC,IAAAK,GAA+B,mBAMzBC,GAAY,CAAC,CAAE,SAAAC,CAAS,IAAsB,CAClD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAAE,iBAAAC,EAAkB,iBAAAC,CAAiB,EAAIC,GAAY,EACrD,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EAEtCC,KAAY,gBAAaC,GAAuD,CAChFN,IACFM,EAAE,eAAe,EACjBF,EAAW,EAAI,EAEnB,EAAG,CAAC,CAAC,EAEL,GAAI,CAACL,EACH,OAAO,KAGT,GAAM,CAAE,SAAAQ,EAAU,UAAAC,CAAU,EAAIT,EAEhC,OAAII,GAAWH,EAEX,GAAAS,QAAA,cAACC,GAAA,CACC,KAAM,iCAAiCH,CAAQ,IAAIC,CAAS,GAC5D,MAAO,EAAE,uBAAuB,EAChC,OAAO,SACP,IAAI,gCAEJ,GAAAC,QAAA,cAACE,GAAA,CACC,IAAK,yDAAyDJ,CAAQ,IAAIC,CAAS,iDACjFP,EAAmB,QAAQ,mBAAmBA,CAAgB,CAAC,GAAK,EACtE,MAAMM,CAAQ,IAAIC,CAAS,QAAQR,CAAgB,GACnD,IAAK,EAAE,uBAAuB,EAChC,CACF,EAIF,GAAAS,QAAA,cAACG,GAAA,CACC,KAAM,iCAAiCL,CAAQ,IAAIC,CAAS,GAC5D,OAAO,SACP,IAAI,+BACJ,QAASH,GAET,GAAAI,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAgB,GAAG,OAClB,GAAAL,QAAA,cAACM,EAAA,KAAe,EAAE,gCAAgC,CAAE,CACtD,CACF,CACF,CAEJ,EAEOC,GAAQlB,GN/Cf,IAAAmB,GAA+B,mBAQzBC,GAAS,CAAC,CAAE,OAAAC,EAAQ,QAAAC,EAAS,kBAAAC,CAAkB,IAAmB,CACtE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,YAAS,EAAK,EAElCC,KAAY,eAAY,IAAMD,EAAS,EAAI,EAAG,CAAC,CAAC,EAChDE,KAAa,eAAY,IAAMF,EAAS,EAAK,EAAG,CAAC,CAAC,EAQxD,SANA,aAAU,IAAM,CACVL,GAAUI,GACZC,EAAS,EAAK,CAElB,EAAG,CAACL,CAAM,CAAC,EAENA,EAKH,EAAAQ,QAAA,gBAAAA,QAAA,cACGJ,GACC,EAAAI,QAAA,cAACC,GAAA,CAAY,QAASR,EAAS,YAAaD,GAAQ,YAAa,QAASO,EAAY,EAExF,EAAAC,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACG,GAAA,CAAG,SAAQ,IACTT,EACG,GAAGC,EAAE,0BAA0B,CAAC,IAAIH,EAAO,IAAI,GAC/CA,GAAQ,UAAU,KAClBG,EAAE,qCAAsC,CAAE,SAAUH,GAAQ,UAAU,IAAK,CAAC,EAC5EG,EAAE,cAAc,CACtB,CACF,EACA,EAAAK,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACI,GAAA,CAAI,SAAUZ,GAAQ,UAAU,SAAU,CAC7C,GACEA,GAAQ,aAAa,QAAU,GAAK,GACpC,EAAAQ,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACK,EAAA,KACC,EAAAL,QAAA,cAAC,SACEL,EAAE,0CAA0C,EAAG,IAChD,EAAAK,QAAA,cAACM,EAAA,CACC,GAAG,OACH,KAAK,SACL,QAASR,EACT,OAAM,GACN,MAAOH,EAAE,4CAA4C,GAAK,IAEzDA,EAAE,4CAA4C,CACjD,EAAe,GAEjB,CACF,CACF,EAEF,EAAAK,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACO,GAAA,KACC,EAAAP,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACQ,GAAA,KACEhB,GAAQ,UAAU,eAAiBA,GAAQ,UAAU,MACpD,EAAAQ,QAAA,cAACS,GAAA,KACC,EAAAT,QAAA,cAACU,GAAA,KAAiBf,EAAE,gBAAgB,CAAE,EACtC,EAAAK,QAAA,cAACU,GAAA,KACC,EAAAV,QAAA,cAACW,GAAA,KACC,EAAAX,QAAA,cAACY,EAAA,KAAe,GAAGpB,GAAQ,UAAU,aAAa,KAAKA,GAAQ,UAAU,IAAI,EAAG,CAClF,CACF,CACF,EAEDA,GAAQ,SAAS,aAChB,EAAAQ,QAAA,cAACa,GAAA,CAAY,YAAaC,GAAkBtB,EAAO,QAAQ,WAAW,EAAG,CAE7E,CACF,EACCA,GAAQ,cACP,EAAAQ,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACe,GAAA,CAAa,aAAcvB,EAAO,aAAc,CACnD,CAEJ,CACF,CACF,EAjEO,IAmEX,EAEOwB,GAAQzB,GU3Gf,IAAA0B,GAAsC,WCAtC,IAAAC,GAAsC,oBCAtC,IAAAC,GAAoB,oBAEdC,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZC,GAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA8H7BD,EAAS;AAAA,EAGNE,GAAQD,GDtIf,IAAME,GAAsB,CAC1BC,EACAC,OAEA,aAAkCC,GAA0B,CAC1D,UAAW,CAAE,GAAIF,EAAc,OAAQC,CAAiB,EACxD,KAAM,CAACD,GAAM,CAACC,CAChB,CAAC,EAEIE,GAAQJ,GDRf,IAAMK,GAAqBC,GAA6B,CACtD,GAAM,CAAE,iBAAAC,EAAkB,oBAAAC,CAAoB,KAAI,eAAWC,EAAqB,EAE5EC,EAAcJ,GAAS,QAAQ,YAC/BK,EAAWJ,EACbG,GAAa,KAAME,GAAMA,EAAE,KAAOL,CAAgB,GAAG,GACrD,OAEE,CAAE,KAAAM,EAAM,QAAAC,CAAQ,EAAIC,GAAoBT,GAAS,GAAIK,CAAQ,EAEnE,uBAAU,IAAM,CACd,IAAKD,GAAa,QAAU,GAAK,GAK3B,EAJUH,EACVG,GAAa,KAAME,GAAMA,EAAE,KAAOL,CAAgB,EAClD,QAEQ,CACV,IAAMS,EAAQN,IAAc,CAAC,EACzBM,GACFR,EAAoBQ,EAAM,EAAE,CAEhC,CAEJ,EAAG,CAACN,CAAW,CAAC,EAET,CACL,SAAUA,GAAa,QAAU,GAAK,EAAIG,GAAM,QAAUP,EAC1D,QAAAQ,CACF,CACF,EAEOG,GAAQZ,GGpCf,IAAAa,GAAkB,gBAKlB,IAAAC,GAA+B,mBAEzBC,GAAU,IAAM,CACpB,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAY,MAAK,IAChB,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAG,SAAQ,IAAEL,EAAE,gBAAgB,CAAE,CACpC,CACF,CACF,CAEJ,EAEOM,GAAQP,GCpBf,IAAAQ,GAAkB,gBAMlB,IAAMC,GAAc,IAClB,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAY,MAAK,IAChB,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,IAAO,CACV,CACF,CACF,EAGKC,GAAQN,GChBf,IAAAO,EAAiE,gBCEjE,IAAMC,GAAN,MAAMC,CAAoB,CAGxB,YAAYC,EAAiD,CA+B7D,KAAQ,uBAA0BC,GAChC,CAAC,CAAC,KAAK,WAAWA,CAAW,EAAE,UAAU,GAE3C,KAAQ,0BAA6BA,GACnC,CAAC,KAAK,uBAAuBA,CAAW,EAE1C,KAAQ,OAAUC,GAChBA,EAAS,OAASH,EAAoB,eAExC,KAAQ,UAAaG,GAA+B,CAAC,KAAK,OAAOA,CAAQ,EAkCzE,KAAQ,kBAAoB,CAACD,EAAqBE,IAChD,KAAK,WAAWF,CAAW,EAAE,UAAU,KAAOE,EAEhD,KAAQ,0BAA6BF,GACnC,CAAC,CAAC,KAAK,WAAWA,CAAW,EAAE,UAAU,aAAa,GAExD,KAAQ,6BAAgCA,GACtC,CAAC,KAAK,0BAA0BA,CAAW,EAqC7C,KAAQ,qBAAuB,CAACA,EAAqBE,IACnD,KAAK,WAAWF,CAAW,EAAE,UAAU,aAAa,KAAOE,EAtH3D,KAAK,WAAaH,CACpB,CAEA,QAAe,CACb,IAAMI,EAAa,KAAK,qBAAqB,EACvCC,EAAiB,KAAK,kBAAkB,EAC9C,OAAIA,EAAe,QACjBD,EAAW,KAAK,CACd,KAAML,EAAoB,sBAC1B,GAAIA,EAAoB,oBACxB,cAAe,CAAC,EAChB,WAAYM,CACd,CAAC,EAGU,CACX,WAAAD,CACF,CAGF,CAEQ,mBAAoB,CAK1B,OAJuB,OAAO,KAAK,KAAK,UAAU,EAC/C,OAAO,KAAK,yBAAyB,EACrC,IAAKE,GAAQ,KAAK,WAAWA,CAAG,CAAC,EACjC,OAAO,KAAK,SAAS,CAE1B,CAaQ,sBAAuB,CAC7B,IAAMF,EAAa,KAAK,cAAc,EAEtC,OADuB,KAAK,wBAAwBA,CAAU,CAEhE,CAEQ,eAAgB,CAKtB,OAJmB,OAAO,KAAK,KAAK,UAAU,EAC3C,OAAO,KAAK,sBAAsB,EAClC,IAAKE,GAAQ,KAAK,WAAWA,CAAG,EAAE,QAAmC,EACrE,OAAOP,EAAoB,kBAAkB,CAElD,CAEQ,wBAAwBK,EAA4B,CAC1D,OAAOA,EAAW,IAAKG,GAAa,CAClC,IAAMP,EAAa,OAAO,KAAK,KAAK,UAAU,EAC3C,OAAQM,GAAQ,KAAK,kBAAkBA,EAAKC,EAAS,EAAE,CAAC,EACxD,OAAO,KAAK,4BAA4B,EACxC,IAAKD,GAAQ,KAAK,WAAWA,CAAG,CAAC,EACjC,OAAO,KAAK,SAAS,EAClBE,EAAgB,KAAK,wBAAwBD,EAAS,EAAE,EAE9D,MAAO,CACL,GAAIA,EAAS,GACb,KAAMA,EAAS,KACf,WAAAP,EACA,cAAAQ,CACF,CACF,CAAC,CACH,CAWQ,wBAAwBL,EAAoB,CAElD,IAAMM,EADgB,KAAK,2BAA2BN,CAAU,EAE7D,IAAKO,GAAgB,KAAK,mBAAmBA,CAAW,CAAC,EACzD,OAAQH,GAAaA,EAAS,WAAW,OAAS,CAAC,EAChDI,EAAuB,KAAK,wBAAwBR,CAAU,EAGpE,OAFuBM,EAAuB,OAAOE,CAAoB,CAG3E,CAEQ,2BAA2BC,EAAY,CAO7C,OANmB,OAAO,KAAK,KAAK,UAAU,EAC3C,OAAQN,GAAQ,KAAK,kBAAkBA,EAAKM,CAAE,CAAC,EAC/C,OAAO,KAAK,yBAAyB,EACrC,IAAKN,GAAQ,KAAK,WAAWA,CAAG,EAAE,UAAU,WAA2B,EACvE,OAAOP,EAAoB,kBAAkB,CAGlD,CAEQ,mBAAmBW,EAAqC,CAC9D,IAAMV,EAAa,OAAO,KAAK,KAAK,UAAU,EAC3C,OAAQM,GAAQ,KAAK,qBAAqBA,EAAKI,EAAY,EAAE,CAAC,EAC9D,IAAKJ,GAAQ,KAAK,WAAWA,CAAG,CAAC,EACjC,OAAO,KAAK,SAAS,EAExB,MAAO,CACL,GAAII,EAAY,GAChB,KAAMA,EAAY,KAClB,WAAAV,EACA,cAAe,CAAC,CAClB,CACF,CAKA,YAAe,mBAAqB,CAClCO,EACAM,EACAC,IACG,CACH,IAAMC,EAAqBD,EAAK,KAAME,GAAUA,EAAM,KAAOT,EAAS,EAAE,EACxE,MAAO,CAAC,CAACQ,GAAsBD,EAAK,QAAQC,CAAkB,IAAMF,CACtE,EAEQ,wBAAwBV,EAAgC,CAc9D,OAbuB,OAAO,KAAK,KAAK,UAAU,EAC/C,OAAQG,GAAQ,KAAK,kBAAkBA,EAAKH,CAAU,CAAC,EACvD,IAAKG,GAAQ,KAAK,WAAWA,CAAG,CAAC,EACjC,OAAO,KAAK,MAAM,EAClB,OAAQW,GAAUA,EAAK,MAAmB,OAAS,CAAC,EAEX,IAAI,CAACf,EAAUW,KAAW,CACpE,GAAId,EAAoB,uBAAyBc,EACjD,KAAMX,EAAS,KACf,WAAY,KAAK,iBAAiBA,CAAQ,EAC1C,cAAe,CAAC,CAClB,EAAE,CAGJ,CAEQ,iBAAiBgB,EAAgC,CASvD,OAReA,EAAa,MACE,IAAKD,IAAU,CAC3C,KAAMA,EACN,MAAO,GACP,KAAM,OACN,KAAMC,EAAa,KACnB,KAAMA,EAAa,IACrB,EAAE,CAEJ,CAEA,YAAO,sBAAwB,iBAC/B,YAAO,oBAAsB,EAC7B,YAAO,eAAiB,YACxB,YAAO,uBAAyB,IAClC,EAEOC,GAAQrB,GC9Jf,IAAMsB,GAA0B,OAAO,OAAO,CAC5C,IAAQ,EACR,GAAM,EACN,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,IAAO,CACT,CAAC,EAIKC,GAAc,CAACC,EAAiBC,IAAqB,CACzD,IAAMC,EAAaJ,GAASE,CAAuB,GAAK,OAAO,iBACzDG,EAAcL,GAASG,CAAwB,GAAK,OAAO,iBAEjE,OAAIC,EAAaC,EACR,GACEA,EAAcD,EAChB,EAEF,CACT,EAEOE,GAAQ,CAACC,EAAiBC,IAAqB,CACpD,IAAMC,EAASR,GAAY,GAAGM,EAAM,EAAE,GAAI,GAAGC,EAAO,EAAE,EAAE,EAExD,OAAIC,IAAW,EACNA,EAGFF,EAAM,KAAK,cAAcC,EAAO,IAAI,CAC7C,EC1CA,IAAOE,GAAQ,CAACC,EAAiBC,IACxBD,EAAM,KAAK,cAAcC,EAAO,IAAI,ECmB7C,IAAMC,GAAe,OAAO,OAAO,CACjC,eAAW,EACX,OAAQ,EACR,QAAS,EACT,cAAU,EACV,qBAAiB,EACjB,yBAAgB,EAChB,oBAAW,EACX,UAAM,EACN,oBAAqB,EACrB,kBAAc,GACd,OAAQ,GACR,QAAS,GACT,MAAO,GACP,MAAO,GACP,MAAO,EACT,CAAC,EAIKC,GAA2B,CAACC,EAAiBC,IAAqB,CACtE,IAAMC,EAAaJ,GAAME,CAAmB,GAAK,OAAO,iBAClDG,EAAcL,GAAMG,CAAoB,GAAK,OAAO,iBAE1D,OAAIC,EAAaC,EACR,GACEA,EAAcD,EAChB,EAEF,CACT,EAEOE,GAAQ,CAACC,EAAiBC,IAAqB,CACpD,IAAMC,EAASR,GAAyB,GAAGM,EAAM,IAAI,GAAI,GAAGC,EAAO,IAAI,EAAE,EAEzE,OAAIC,IAAW,EACNA,EAGFC,GAAkBH,EAAOC,CAAM,CACxC,ECzDA,IAAMG,GAAQC,GAAe,CAC3BA,EAAK,WAAW,KAAKC,EAAiB,EACtCD,EAAK,WAAW,QAASE,GAAa,CAChCA,EAAS,KAAO,IAClBA,EAAS,WAAW,KAAKC,EAAsB,GAE/CD,EAAS,WAAW,KAAKE,EAAiB,EAC1CF,EAAS,cAAc,QAASG,GAAgB,CAC9CA,EAAY,WAAW,KAAKD,EAAiB,CAC/C,CAAC,EAEL,CAAC,CACH,EAEOE,GAAQP,GCnBf,IAAAQ,EAAoB,kBCGpB,IAAMC,GAA8BC,GAAc,KAAK,MAAM,KAAK,UAAUA,CAAM,CAAC,EAE5EC,GAAQF,GDAR,IAAMG,GAAY,OACZC,GAAc,SACdC,GAA+B,OAAO,OAAO,CACxD,GAAI,IACJ,KAAM,EAAAC,QAAQ,EAAE,gBAAgB,EAChC,YAAa,IACf,CAAC,EACYC,GAAmC,OAAO,OAAO,CAC5D,GAAI,EACJ,KAAM,EAAAD,QAAQ,EAAE,+BAA+B,EAC/C,YAAa,CACX,GAAI,GACJ,KAAM,EAAAA,QAAQ,EAAE,oBAAoB,EACpC,YAAa,IACf,CACF,CAAC,EAEKE,GAAN,KAAsB,CAAtB,cACE,UAAe,GACf,WAAyB,GACzB,UAAe,UACf,UAAsB,KACtB,UAAsB,KACtB,cAAgC,KAEhC,SAASC,EAAc,CACrB,YAAK,KAAOA,EACL,IACT,CAEA,SAASC,EAAc,CACrB,OAAIA,IACF,KAAK,KAAOA,GAEP,IACT,CAEA,UAAUC,EAAwB,CAChC,YAAK,MAAQA,EACN,IACT,CAEA,SAASC,EAAc,CACrB,YAAK,KAAOA,EACL,IACT,CAEA,aAAaC,EAAwB,CACnC,YAAK,SAAWA,EACT,IACT,CAEA,SAASC,EAAc,CACrB,YAAK,KAAOA,EACL,IACT,CAEA,OAA0B,CACxB,MAAO,CACL,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,KAAM,KAAK,KACX,KAAM,KAAK,KACX,KAAM,KAAK,KACX,SAAU,KAAK,QACjB,CACF,CACF,EAEOC,GAAQ,CAACC,EAAmBC,IAAoD,CACrF,IAAMC,EAAgBC,GAASF,CAAU,EAEzC,OAAMD,EAAK,eACTE,EAAc,aAAe,IAAIV,GAAgB,EAC9C,SAAS,EAAAF,QAAQ,EAAE,yCAAyC,CAAC,EAC7D,UAAUU,EAAK,YAAY,EAC3B,SAASb,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,cACTE,EAAc,YAAc,IAAIV,GAAgB,EAC7C,SAAS,EAAAF,QAAQ,EAAE,wCAAwC,CAAC,EAC5D,UAAUU,EAAK,WAAW,EAC1B,SAASb,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,YACTE,EAAc,UAAY,IAAIV,GAAgB,EAC3C,SAAS,EAAAF,QAAQ,EAAE,sCAAsC,CAAC,EAC1D,UAAUU,EAAK,SAAS,EACxB,SAAS,EAAAV,QAAQ,EAAE,+BAA+B,CAAC,EACnD,SAASH,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,YACTE,EAAc,UAAY,IAAIV,GAAgB,EAC3C,SAAS,EAAAF,QAAQ,EAAE,sCAAsC,CAAC,EAC1D,UAAUU,EAAK,SAAS,EACxB,SAAS,EAAAV,QAAQ,EAAE,+BAA+B,CAAC,EACnD,SAASF,EAAW,EACpB,aAAaC,EAAc,EAC3B,MAAM,GAGLW,EAAK,kBACTE,EAAc,gBAAkB,IAAIV,GAAgB,EACjD,SAAS,EAAAF,QAAQ,EAAE,4CAA4C,CAAC,EAChE,UAAUU,EAAK,eAAe,EAC9B,SAAS,EAAAV,QAAQ,EAAE,qCAAqC,CAAC,EACzD,SAASF,EAAW,EACpB,aAAaC,EAAc,EAC3B,MAAM,GAGPW,EAAK,gBACPE,EAAc,QAAU,IAAIV,GAAgB,EACzC,SAAS,EAAAF,QAAQ,EAAE,qCAAqC,CAAC,EACzD,UAAUU,EAAK,gBAAgB,KAAK,EACpC,SAAS,EAAAV,QAAQ,EAAE,8BAA8B,CAAC,EAClD,SAASF,EAAW,EACpB,aAAaC,EAAc,EAC3B,SAAS,EAAAC,QAAQ,EAAE,YAAYU,EAAK,gBAAgB,IAAI,EAAE,CAAC,EAC3D,MAAM,EACEA,EAAK,UAChBE,EAAc,QAAU,IAAIV,GAAgB,EACzC,SAAS,EAAAF,QAAQ,EAAE,qCAAqC,CAAC,EACzD,UAAUU,EAAK,OAAO,EACtB,SAAS,EAAAV,QAAQ,EAAE,8BAA8B,CAAC,EAClD,SAASF,EAAW,EACpB,aAAaC,EAAc,EAC3B,SAAS,EAAAC,QAAQ,EAAE,2BAA2B,CAAC,EAC/C,MAAM,GAGLU,EAAK,cACTE,EAAc,YAAc,IAAIV,GAAgB,EAC7C,SAAS,EAAAF,QAAQ,EAAE,wCAAwC,CAAC,EAC5D,UAAUU,EAAK,WAAW,EAC1B,SAASb,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,qBACTE,EAAc,mBAAqB,IAAIV,GAAgB,EACpD,SAAS,EAAAF,QAAQ,EAAE,+CAA+C,CAAC,EACnE,UAAUU,EAAK,kBAAkB,EACjC,SAASb,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,WACTE,EAAc,SAAW,IAAIV,GAAgB,EAC1C,SAAS,EAAAF,QAAQ,EAAE,qCAAqC,CAAC,EACzD,UAAUU,EAAK,QAAQ,EACvB,SAAS,EAAAV,QAAQ,EAAE,8BAA8B,CAAC,EAClD,SAASH,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGPW,EAAK,cACPE,EAAc,YAAc,IAAIV,GAAgB,EAC7C,SAAS,EAAAF,QAAQ,EAAE,wCAAwC,CAAC,EAC5D,UAAUU,EAAK,WAAW,EAC1B,SAAS,EAAAV,QAAQ,EAAE,iCAAiC,CAAC,EACrD,SAASF,EAAW,EACpB,aAAaG,EAAkB,EAC/B,MAAM,GAGJW,CACT,EErLA,IAAME,GAAsB,OAAO,OAAO,CACxC,mBACA,sBACA,MACA,cACA,eACA,eACF,CAAC,EAEKC,GAAuBC,GAAgBF,GAAoB,SAASE,CAAG,EAEvEC,GAAsB,OAAO,OAAO,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,CAAC,EAE/DC,GAAwBC,GAC5B,CAACA,EAAS,UACV,CAACA,EAAS,SAAS,IACnB,CAACF,GAAoB,SAASE,EAAS,SAAS,EAAE,EAE7CC,GAASC,GAAoD,CAClE,IAAMC,EAAgBC,GAASF,CAAU,EAEzC,cAAO,KAAKA,CAAU,EAAE,QAASL,GAAQ,CACvC,IAAMG,EAAWE,EAAWL,CAAG,GAC3BE,GAAqBC,CAAQ,GAEtBJ,GAAoBC,CAAG,IAChC,OAAOM,EAAcN,CAAG,CAE5B,CAAC,EAEMM,CACT,EClCA,IAAAE,GAA6C,gBCA7C,IAAAC,GAAmB,4BAIZ,IAAMC,GAAY,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,0BAILC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,6BAC/BA,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,EAInDC,GAAgB,GAAAF,QAAO;AAAA;AAAA;AAAA,aAGvBG,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,4BAGSF,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,EAIlDG,GAAe,GAAAJ,QAAO;AAAA;AAAA,EAItBK,GAAiB,GAAAL,QAAO;AAAA;AAAA,kBAEnBG,EAAK,CAAC,CAAC;AAAA,EAGZG,GAAsB,GAAAN,QAAO;AAAA,WAC9BC,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;AAAA,EAGtCM,GAAsB,GAAAP,QAAO;AAAA,WAC9BC,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;EDtBnD,IAAAO,GAAoB,kBACpBC,GAA+B,mBAEzBC,GAAc,CAACC,EAA0BC,IACzC,OAAOD,GAAU,UACZA,EACL,GAAAE,QAAA,cAACC,GAAA,CAAoB,MAAO,GAAAC,QAAQ,EAAE,YAAY,GAAK,IACrD,GAAAF,QAAA,cAACG,GAAA,KAAQ,GAAAD,QAAQ,EAAE,YAAY,CAAE,EACjC,GAAAF,QAAA,cAACI,GAAA,CAAU,MAAK,GAAC,CACnB,EAEA,GAAAJ,QAAA,cAACK,GAAA,CAAoB,MAAO,GAAAH,QAAQ,EAAE,WAAW,GAAK,IACpD,GAAAF,QAAA,cAACG,GAAA,KAAQ,GAAAD,QAAQ,EAAE,WAAW,CAAE,EAChC,GAAAF,QAAA,cAACM,GAAA,CAAW,MAAK,GAAC,CACpB,EAGA,MAAM,QAAQR,CAAK,EACdA,EAAM,KAAK,IAAI,EAElBA,GAAWC,EACR,GAAGD,CAAK,IAAIC,CAAI,GAElBD,EAUHS,GAAe,CAAC,CAAE,KAAAC,EAAM,KAAAC,EAAM,MAAAX,EAAO,KAAAC,CAAK,IAAyB,CACvE,GAAM,CAAE,EAAAW,CAAE,KAAI,mBAAe,EACvB,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EACtCC,KAAkB,gBAAY,IAAMD,EAAW,CAACD,CAAO,EAAG,CAACA,CAAO,CAAC,EAEnEG,EAAiBjB,GAAYC,EAAOC,CAAI,EAE9C,OACE,GAAAC,QAAA,cAACe,GAAA,KACC,GAAAf,QAAA,cAACgB,GAAA,KACEP,EACC,GAAAT,QAAA,cAACiB,EAAA,CACC,QAASJ,EACT,MAAOH,EAAE,4BAA6B,CAAE,QAASF,CAAK,CAAC,GAAK,IAE3DA,CACH,EAEAA,CAEJ,EACA,GAAAR,QAAA,cAACkB,GAAA,KACEpB,IAAU,OAAYgB,EAAiBJ,EAAE,uBAAuB,CACnE,EACCD,GAAQE,GACP,GAAAX,QAAA,cAACmB,EAAA,CAAM,MAAOX,EAAM,QAASK,GAC3B,GAAAb,QAAA,cAACoB,EAAA,CAAQ,wBAAyB,CAAE,OAAQX,CAAK,EAAG,CACtD,CAEJ,CAEJ,EAEOY,GAAQd,GEjFf,IAAAe,GAAuB,gBCCvB,IAAAC,GAA4B,4BAKrB,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA,gBAEdC,EAAK,EAAE,CAAC;AAAA,iBACPA,EAAK,EAAE,CAAC;AAAA,kBACPA,EAAK,EAAE,CAAC;AAAA;AAAA,IAErBC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,mBACvBD,EAAK,EAAE,CAAC;AAAA,oBACPA,EAAK,EAAE,CAAC;AAAA;AAAA,EAIfE,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAStBE,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,oBACtBD,EAAK,CAAC,CAAC;AAAA,qBACNA,EAAK,CAAC,CAAC;AAAA;AAAA,EAIfG,GAAO,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA,EAadK,MAAS,GAAAL,SAAOM,CAAW,EAAE,MAAM,KAAO,CACrD,KAAM,MACN,UAAW,gCACb,EAAE;AAAA;AAAA;AAAA,aAGWL,EAAK,CAAC,CAAC;AAAA,WACRC,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA,aAGzCA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOtCD,EAAK,CAAC,CAAC;AAAA,aACNA,EAAK,CAAC,CAAC;AAAA;AAAA,wBAEKC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMxDA,GACDA,EAAM,QACN;AAAA,eACYA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,KAK/C;EDjEL,IAAMK,GAAO,CAAe,CAAE,KAAAC,EAAM,OAAAC,EAAQ,QAAAC,CAAQ,IAClD,iBAACC,GAAA,KACC,iBAACC,GAAA,KACEJ,EAAK,IAAKK,GACT,iBAACC,GAAA,CAAK,IAAKD,EAAI,MACb,iBAACE,GAAA,CACC,MAAOF,EAAI,YACX,QAASH,EAAU,IAAMA,EAAQG,EAAI,IAAoB,EAAI,OAC7D,OAAQA,EAAI,OAASJ,EAAS,OAAS,QAEtCI,EAAI,WACP,CACF,CACD,CACH,CACF,EAGKG,GAAQT,GXdf,IAAMU,GAAsB,CAAC,CAAE,KAAAC,EAAM,WAAAC,CAAW,IAC9C,EAAAC,QAAA,cAACC,EAAA,KACC,EAAAD,QAAA,cAACE,GAAA,CAAG,GAAG,MAAMJ,CAAK,EAClB,EAAAE,QAAA,cAACG,GAAA,KACE,CAAC,CAACJ,EAAW,QACZA,EAAW,IAAI,CAACK,EAAUC,IACxB,EAAAL,QAAA,cAACM,GAAA,CACC,KAAMF,EAAS,KACf,KAAMA,EAAS,KACf,MAAOA,EAAS,MAChB,KAAMA,EAAS,KACf,IAAK,GAAGA,EAAS,IAAI,IAAIC,CAAK,GAChC,CACD,CACL,CACF,EAQIE,GAAmB,CAAC,CAAE,WAAAR,EAAY,cAAAS,CAAc,IACpD,EAAAR,QAAA,cAAC,OAAI,UAAU,eACZ,CAAC,CAACD,EAAW,QACZ,EAAAC,QAAA,cAACC,EAAA,KACC,EAAAD,QAAA,cAACG,GAAA,KACEJ,EAAW,IAAI,CAACK,EAAUC,IACzB,EAAAL,QAAA,cAACM,GAAA,CACC,KAAMF,EAAS,KACf,KAAMA,EAAS,KACf,MAAOA,EAAS,MAChB,KAAMA,EAAS,KACf,IAAK,GAAGA,EAAS,IAAI,IAAIC,CAAK,GAChC,CACD,CACH,CACF,EAED,CAAC,CAACG,EAAc,QACfA,EAAc,IAAI,CAACC,EAAaJ,IAC9B,EAAAL,QAAA,cAACH,GAAA,CACC,KAAMY,EAAY,KAClB,WAAYA,EAAY,WACxB,IAAK,GAAGA,EAAY,IAAI,IAAIJ,CAAK,GACnC,CACD,CACL,EAQIK,GAAc,CAAC,CAAE,YAAAC,EAAa,YAAAC,CAAY,IAAwB,CACtE,GAAM,CAACC,EAAkBC,CAAmB,KAAI,YAAS,EAAE,EACrDC,KAAmB,WAAQ,IAAM,CACrC,GAAI,CAACJ,EACH,OAGF,IAAMK,EAAgBC,GAAiBN,CAAW,EAC5CO,EAAqBC,GAAoBP,EAAaI,CAAa,EAEnEI,EAAO,IAAIC,GAAoBH,CAAkB,EAAE,OAAO,EAChE,OAAAI,GAASF,CAAI,EACNA,CACT,EAAG,CAACT,CAAW,CAAC,KAEhB,aAAU,IAAM,CACd,IAAMY,EACJR,GAAkB,YAAY,SAAW,OAAYA,GAAkB,WAAa,OAElFF,EAAmB,GAAKU,IAAe,QAAaA,EAAW,OAAS,GAC1ET,EAAoBS,EAAW,CAAC,EAAE,EAAE,CAExC,EAAG,CAACR,CAAgB,CAAC,EAErB,IAAMS,KAAQ,eAAaC,GAAeX,EAAoB,SAASW,EAAI,EAAE,CAAC,EAAG,CAAC,CAAC,EAE7EC,EAAiBX,GAAkB,YAAY,KAClDY,GAAaA,EAAS,KAAOd,CAChC,EAEA,OACE,EAAAb,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACC,EAAA,KACC,EAAAD,QAAA,cAAC4B,GAAA,CACC,KACEb,GAAkB,YAAY,IAAKY,IAAc,CAC/C,KAAM,GAAGA,EAAS,EAAE,GACpB,YAAaA,EAAS,IACxB,EAAE,GAAK,CAAC,EAEV,OAAQ,GAAGd,CAAgB,GAC3B,QAASW,EACX,CACF,EACCE,GACC,EAAA1B,QAAA,cAACC,EAAA,KACC,EAAAD,QAAA,cAACO,GAAA,CACC,WAAYmB,EAAe,WAC3B,cAAeA,EAAe,cAChC,CACF,CAEJ,CAEJ,EAEOG,GAAQnB,GanIf,IAAAoB,GAAkB,gBAIlB,IAAAC,GAA+B,mBAMzBC,GAAe,CAAC,CAAE,QAAAC,CAAQ,IAAyB,CACvD,GAAM,CAAE,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,EAAA,CAAM,MAAO,EAAE,cAAc,EAAG,QAASF,GACxC,GAAAC,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAAC,SAAG,EAAE,yBAAyB,CAAE,CACnC,CACF,CAEJ,EAEOG,GAAQL,GCrBf,IAAAM,GAAkB,gBCAlB,IAAAC,GAA+B,gBCA/B,IAAAC,GAAmB,4BAGZ,IAAMC,GAAc,GAAAC,QAAO,GAAG,MAAM,KAAO,CAChD,UAAW,yCACb,EAAE;AAAA;AAAA,aAEWC,EAAK,CAAC,CAAC;AAAA;AAAA,IAEhB,CAAC,CAAE,MAAAC,CAAM,IAAMA,EAAM,WAAW,IAAI;AAAA;AAAA;AAAA,EAK3BC,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAKfC,EAAK,EAAE,CAAC;AAAA,EAGPG,GAAU,GAAAJ,QAAO,EAAE,MAAM,KAAO,CAC3C,UAAW,2DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaWK,GAAW,GAAAL,QAAO;AAAA,WACnBM,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAEnCC,GAAc,GAAAP,QAAO;AAAA,WACtBM,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA,EAG1CE,GAAY,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnBS,GAAe,GAAAT,QAAO;AAAA;AAAA,sBAEZM,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,aAC5CL,EAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,wBAIGK,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;ED9CjE,IAAAI,GAA+B,mBAMzBC,GAAwBC,GAAsC,CAClE,OAAQA,EAAS,YAAa,CAC5B,IAAK,kBACH,MAAO,MACT,QAGE,OADEA,EAAS,KAAOA,EAAS,IAAI,SAAS,GAAG,EAAIA,EAAS,IAAI,MAAM,GAAG,EAAE,IAAI,EAAI,EAEnF,CACF,EAEaC,GAAkB,CAAC,CAAE,SAAAD,CAAS,IAA4B,CACrE,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvBE,KAAc,YAAQ,IAAMH,GAAqBC,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAC5E,OACE,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KAAUP,EAAS,IAAK,EACzB,GAAAG,QAAA,cAACK,GAAA,KAAaN,CAAY,CAC5B,EACA,GAAAC,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACM,GAAA,CACC,KAAMT,EAAS,IACf,IAAI,+BACJ,OAAO,SACP,MAAO,EAAE,qBAAsB,CAAE,SAAUA,EAAS,IAAK,CAAC,GAEzD,EAAE,aAAa,CAClB,CACF,CACF,CACF,CAEJ,EAMaU,GAAe,CAAC,CAAE,UAAAC,CAAU,IACvC,GAAAR,QAAA,cAACS,GAAA,KACED,EAAU,IAAI,CAACX,EAAUa,IACxB,GAAAV,QAAA,cAACF,GAAA,CAAgB,IAAK,GAAGD,EAAS,GAAG,IAAIa,CAAC,GAAI,SAAUb,EAAU,CACnE,CACH,EAGKc,GAAQJ,GD3Df,IAAAK,GAA+B,mBAE/B,IAAAC,GAAoB,kBAEdC,GAAc,CAClB,aAAc,GAAAC,QAAQ,EAAE,0CAA0C,EAClE,sBAAuB,GAAAA,QAAQ,EAAE,qCAAqC,EACtE,MAAO,GAAAA,QAAQ,EAAE,0BAA0B,CAC7C,EAEMC,GAAY,CAChB,aAAc,EACd,sBAAuB,EACvB,MAAO,CACT,EAcMC,GAAY,CAAC,CAAE,UAAAC,CAAU,IAAsB,CACnD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvBC,EAAcD,EACjB,OAAO,CAACE,EAAMC,IAAS,CACtB,IAAMC,EAAQF,EAAK,UAAWG,GAAMA,EAAE,YAAcF,EAAK,UAAY,SAAS,EAC9E,GAAIC,EAAQ,GACVF,EAAKE,CAAK,EAAE,UAAU,KAAKD,CAAI,MAC1B,CACL,IAAMG,EAAWH,EAAK,UAAY,SAClCD,EAAK,KAAK,CACR,SAAAI,EACA,UAAW,CAACH,CAAI,EAChB,UAAWL,KAAYQ,CAAwB,GAAK,EACtD,CAAC,CACH,CAEA,OAAOJ,CACT,EAAG,CAAC,CAAuB,EAC1B,KAAK,CAAC,EAAGK,IAAM,EAAE,UAAYA,EAAE,SAAS,EAE3C,GAAI,CAACP,EAAU,OAAQ,OAAO,KAE9B,IAAMQ,EAAiBP,EAAY,OAAS,EAE5C,OACE,GAAAQ,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAG,SAAQ,IAAE,EAAE,gBAAgB,CAAE,CACpC,EACA,GAAAH,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,GAAA,CAAc,YAAa,EAAE,iBAAiB,GAC5CZ,EAAY,IAAKa,GAChB,GAAAL,QAAA,cAACE,EAAA,CAAO,IAAKG,EAAM,UAChBN,GACC,GAAAC,QAAA,cAACM,GAAA,KAAInB,KAAckB,EAAM,QAAwB,GAAKlB,GAAY,KAAM,EAE1E,GAAAa,QAAA,cAACO,GAAA,CAAa,UAAWF,EAAM,UAAW,CAC5C,CACD,CACH,CACF,CACF,CAEJ,EAEOG,GAAQlB,GGhFf,IAAAmB,GAAgC,gBCAhC,IAAAC,GAAkB,gBCAlB,IAAAC,GAA4B,4BAKrB,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,SAGrBC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIVC,GAAmB;AAAA;AAAA;AAAA;AAAA,EAMZC,GAAQ,GAAAH,QAAO;AAAA,IACxBE,EAAgB;AAAA;AAAA;AAAA;AAAA,EAMPE,GAAoB,GAAAJ,QAAO;AAAA,IACpCE,EAAgB;AAAA;AAAA;AAAA;AAAA,WAIRG,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,sBAEhCA,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,EAG5CC,GAAO,GAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,SAKlBC,EAAK,CAAC,CAAC;AAAA,EAGHM,GAAU,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA,SAIrBC,EAAK,CAAC,CAAC;AAAA,EAGHO,GAAQ,GAAAR,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;AAAA,EAIWS,GAAW,GAAAT,QAAO;AAAA;AAAA,EAIlBU,GAAQ,GAAAV,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE,IAEWW,GAAW,GAAAX,QAAO;AAAA,2BACJC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAmBpBI,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA,kBACzBA,GAAUA,EAAM,MAAM,KAAK,SAAS,KAAK;AAAA;AAAA;AAAA,EAK/CO,MAAc,GAAAZ,SAAOa,CAAW,EAAE,MAAM,KAAO,CAC1D,UAAW,2DACb,EAAE;AAAA;AAAA;AAAA,WAGUR,GAAUA,EAAM,MAAM,MAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;EDhF5C,IAAAS,GAA+B,mBAiBzBC,GAAgB,CAAC,CACrB,MAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,SAAAC,EACA,YAAAC,CACF,IAA0B,CACxB,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACEP,EACC,GAAAM,QAAA,cAACE,GAAA,CAAM,IAAKR,EAAM,IAAK,OAAQA,EAAM,OAAQ,IAAKA,EAAM,IAAK,EAE7D,GAAAM,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,IAAU,CACb,EAEF,GAAAJ,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KACC,GAAAN,QAAA,cAACO,GAAA,KAAOd,CAAM,EACbE,GAAY,GAAAK,QAAA,cAACQ,GAAA,CAAS,IAAKb,EAAS,IAAK,OAAQA,EAAS,OAAQ,IAAKA,EAAS,IAAK,CACxF,EACCC,GAAS,GAAAI,QAAA,cAACS,GAAA,KAAOb,CAAM,EACvBC,GAAY,GAAAG,QAAA,cAACU,GAAA,KAAUb,CAAS,EAChCC,GACC,GAAAE,QAAA,cAACW,GAAA,CAAY,QAASb,EAAa,MAAOC,EAAE,iBAAiB,GAAK,IAC/DA,EAAE,iBAAiB,CACtB,CAEJ,CACF,CAEJ,EAEOa,GAAQpB,GEnEf,IAAAqB,GAAkB,gBAClBC,GAAuB,YCDvB,IAAAC,GAAmB,4BAENC,GAAQ,GAAAC,QAAO;AAAA;AAAA;ECF5B,IAAAC,GAA4B,4BAMfC,GAAO,GAAAC,QAAO,EAAE,MAAM,KAAO,CACxC,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMYC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO9C,CAAC,CAAE,YAAAC,CAAY,IACfA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KASC;EChCL,IAAAC,GAAkB,gBCAlB,IAAAC,GAA4B,4BAIrB,IAAMC,GAAU,GAAAC,QAAO;AAAA,wBACNC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKRC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,EAO5CC,GAAM,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUtB,CAAC,CAAE,UAAAI,CAAU,IACbA,GACA;AAAA;AAAA;AAAA,eAGYF,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,KAEtD;AAAA,EAGQG,GAAQ,GAAAL,QAAO,MAEfM,GAAQ,GAAAN,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;ED3BF,IAAMO,GAAW,CAAC,CAAE,OAAAC,CAAO,IACzB,GAAAC,QAAA,cAACC,GAAA,KACEF,GAAQ,IAAI,CAACG,EAAMC,IAClB,GAAAH,QAAA,cAACI,GAAA,CAAI,IAAK,GAAGF,EAAK,KAAK,IAAIC,CAAC,GAAI,UAAWD,EAAK,UAC9C,GAAAF,QAAA,cAACK,GAAA,KAAOH,EAAK,KAAM,EACnB,GAAAF,QAAA,cAACM,GAAA,KAAOJ,EAAK,KAAM,CACrB,CACD,CACH,EAGKK,GAAQT,GHbf,IAAAU,GAA+B,mBAOzBC,GAAgB,CAAC,CAAE,UAAAC,EAAW,QAAAC,CAAQ,IAA0B,CACpE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAAY,CAChB,CACE,MAAOD,EAAE,wBAAwB,EACjC,MAAO,GAAGE,EAAgBJ,EAAU,KAAK,CAAC,IAAIE,EAAE,kBAAkB,CAAC,GACnE,SAAU,EACZ,CACF,EAEA,OAAIF,EAAU,WACZG,EAAU,KAAK,CACb,MAAOD,EAAE,2BAA2B,EACpC,MAAO,GAAGE,EAAgBJ,EAAU,SAAS,CAAC,IAAIE,EAAE,kBAAkB,CAAC,GACvE,SAAU,EACZ,CAAC,EAGCF,EAAU,eACZG,EAAU,KAAK,CACb,MAAOD,EAAE,mCAAmC,EAC5C,MAAO,GAAGE,EAAgBJ,EAAU,aAAa,CAAC,IAAIE,EAAE,kBAAkB,CAAC,GAC3E,SAAU,EACZ,CAAC,EAID,GAAAG,QAAA,cAACC,EAAA,CAAM,MAAON,EAAU,KAAM,QAASC,GACpCD,EAAU,SAAS,CAAC,GACnB,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAM,IAAK,GAAGR,EAAU,OAAO,CAAC,CAAC,SAAU,IAAK,GAAGA,EAAU,IAAI,GAAI,CACxE,EAEDA,EAAU,UACT,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,GAAA,CACC,KAAM,GAAGT,EAAU,QAAQ,SAC3B,OAAQ,GAAGA,EAAU,QAAQ,SAC7B,IAAKA,EAAU,cAAgBE,EAAE,iBAAiB,GAAK,GACvD,KAAI,GACN,CACF,EAEF,GAAAG,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACK,GAAA,CAAS,OAAQP,EAAW,CAC/B,EAEA,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACM,EAAA,CAAQ,wBAAyB,CAAE,UAAQ,WAAOX,EAAU,WAAW,CAAE,EAAG,CAC/E,EACCA,EAAU,eACT,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACO,GAAA,CAAgB,GAAG,OAAOV,EAAE,qCAAqC,CAAE,EACpE,GAAAG,QAAA,cAAC,WAAKL,EAAU,aAAc,CAChC,EAEDA,EAAU,aAAeA,EAAU,YAAY,KAC9C,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACQ,GAAA,CACC,KAAMb,EAAU,YAAY,IAC5B,MACEE,EAAE,iDAAkD,CAClD,UAAWF,EAAU,IACvB,CAAC,GAAK,GAER,OAAO,SACP,IAAI,gCAEHA,EAAU,YAAY,OAASE,EAAE,iBAAiB,EAAE,KAAGA,EAAE,sBAAsB,EAAE,GACpF,CACF,CAEJ,CAEJ,EAEOY,GAAQf,GHrFf,IAAAgB,GAA+B,mBAMzBC,GAAqB,CAAC,CAAE,YAAAC,CAAY,IAA+B,CACvE,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,aAAgC,EAEpDC,EAAeC,GAAyBF,EAASE,CAAS,EAC1DC,EAAe,IAAMH,EAAS,MAAS,EAE7C,OAAKF,GAAa,OAGhB,GAAAM,QAAA,iBAAAA,QAAA,cACGL,GAAS,GAAAK,QAAA,cAACC,GAAA,CAAc,UAAWN,EAAO,QAASI,EAAc,EAClE,GAAAC,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAG,SAAQ,IAAE,EAAE,8BAA8B,CAAE,CAClD,EACA,GAAAJ,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACK,EAAA,KACC,GAAAL,QAAA,cAAC,SAAG,EAAE,yCAAyC,CAAE,CACnD,CACF,EACA,GAAAA,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACM,GAAA,CACC,QAAS,KACT,UAAW,IACX,UAAW,EACX,QAAS,EACT,MAAOZ,EAAY,IAAKI,GACtB,GAAAE,QAAA,cAACO,GAAA,CACC,IAAKT,EAAU,GACf,MAAOA,EAAU,KACjB,MACEA,EAAU,SAAS,CAAC,EAChB,CACE,IAAK,GAAGA,EAAU,SAAS,CAAC,CAAC,eAC7B,IAAKA,EAAU,IACjB,EACA,OAEN,MAAO,GAAGU,EAAgBV,EAAU,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,GACnE,SAAUA,EAAU,QACpB,YAAa,IAAMD,EAAYC,CAAS,EAC1C,CACD,EACH,CACF,CACF,CACF,EAxC+B,IA0CnC,EAEOW,GAAQhB,GzItBf,IAAAiB,GAAoB,kBAcdC,GAAkB,CAAC,CACvB,WAAAC,EACA,GAAAC,EACA,UAAAC,EACA,UAAAC,EACA,yBAAAC,EACA,iBAAAC,EACA,wBAAAC,EACA,kBAAAC,EACA,kBAAAC,CACF,IAA4B,CAC1B,IAAMC,EAAcC,GAAyBV,CAAU,EACjD,CAAE,aAAAW,CAAa,EAAIC,GAAY,EAC/BC,KAAc,UAAiC,EAC/C,CAAE,QAAAC,EAAS,KAAMC,CAAO,EAAIC,GAAcf,CAAE,EAC5C,CAAE,QAASgB,EAAuB,QAASC,CAA6B,EAC5EC,GAAkBJ,GAAQ,OAAO,EAE7B,CAACK,EAAcC,CAAe,KAAI,YAAS,EAAK,EAChDC,KAAuB,eAAY,IAAMD,EAAgB,CAACD,CAAY,EAAG,CAACA,CAAY,CAAC,KAE7F,aAAU,KACJT,IACFE,EAAY,QAAU,IAAI,GAAAU,QAAa,CACrC,GAAAtB,EACA,cAAe,CACb,IAAK,CACH,QAASU,EAAa,GACxB,EACA,iBAAkBA,GAAc,gBAClC,EACA,KAAMA,EAAa,mBACnB,OAAQA,EAAa,mBACrB,QAAQa,GAAMC,GAAOC,GAAcC,GAAO,CACxCC,EAAO,QAAQ,kBAAmBJ,GAAMC,GAAOC,GAAaC,EAAI,CAClE,CACF,CAAC,GAEI,IAAM,CACPd,EAAY,SACdA,EAAY,QAAQ,QAAQ,CAEhC,GACC,CAAC,CAAC,KAEL,aAAU,IAAM,CACTT,GACH,OAAO,SAAS,EAAG,CAAC,CAExB,EAAG,CAAC,CAAC,KAEL,aAAU,IAAM,CACd,GAAIW,GAAQ,SAAS,MAAQT,EAAyB,CACpD,GAAM,CAAE,QAAAuB,EAAQ,EAAId,EACd,CAAE,mBAAAe,EAAmB,EAAID,GAAQ,KACvC,SAAS,MAAQ,GAAGC,EAAkB,MAAMD,GAAQ,KAAK,MAAMA,GAAQ,gBAAgB,EACzF,CACF,EAAG,CAACd,CAAM,CAAC,EAEX,IAAMgB,KAAU,WACd,IAAMhB,GAAQ,SAAS,MAAM,SAAS,OAAOiB,EAAQ,EAAE,IAAKC,KAAS,CAAE,MAAOA,EAAI,EAAE,EACpF,CAAClB,GAAQ,SAAS,MAAM,OAAO,CACjC,EAEMmB,KAAyB,eAAY,IAAMN,EAAO,QAAQ,cAAc,EAAG,CAAC,CAAC,EAEnF,GAAI,CAACnB,EAAa,OAAO,KAEzB,GAAIK,EACF,OAAO,EAAAqB,QAAA,cAACC,GAAA,IAAY,EAGtB,GAAI,CAACrB,GAAQ,SAAS,KACpB,OAAO,EAAAoB,QAAA,cAACE,GAAA,IAAQ,EAGlB,GAAM,CAAE,QAAAR,EAAQ,EAAId,EACduB,GAAUrB,GAAuB,QACjCsB,GAAStB,GAAuB,OAChC,CACJ,MAAAuB,EACA,YAAAC,EACA,iBAAAC,EACA,MAAAC,EACA,YAAAC,GACA,MAAAC,GACA,SAAAC,GACA,iBAAAC,GACA,aAAAC,GACA,UAAAC,GACA,eAAAC,GACA,YAAAC,GACA,UAAAC,GACA,cAAAC,GACA,MAAAC,EACF,EAAIzB,GACE0B,GAAmBtC,GAAuB,iBAC5CA,EAAsB,iBACtBY,GAAQ,iBACN,CAAE,SAAA2B,GAAU,QAAAC,GAAS,gBAAAC,GAAiB,QAAAC,GAAS,UAAAC,GAAW,YAAAC,EAAY,EAAIhC,GAAQ,KAElFiC,GAAuB,CAC3B,CACE,MAAOF,EACT,CACF,EAEA,OAAIN,IAAO,aACTQ,GAAQ,KAAK,CACX,MAAO,GAAAC,QAAQ,EAAE,cAAc,EAC/B,QAASzC,CACX,CAAC,EAGHwC,GAAQ,KAAK,CACX,MAAO,GAAGE,EAAgBN,IAAiB,OAASD,EAAO,CAAC,IAAI,GAAAM,QAAQ,EACtE,YAAYL,IAAiB,MAAQ,kBAAkB,EACzD,CAAC,EACH,CAAC,EAEGC,IACFG,GAAQ,KAAK,CAAE,MAAOH,EAAQ,CAAC,EAG7BH,IACFM,GAAQ,KAAK,CAAE,MAAON,EAAS,CAAC,EAIhC,EAAArB,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAAC8B,GAAA,KACC,EAAA9B,QAAA,cAAC+B,GAAA,CAAY,MAAK,IAChB,EAAA/B,QAAA,cAACgC,GAAA,KACC,EAAAhC,QAAA,cAACiC,GAAA,KACC,EAAAjC,QAAA,cAACkC,GAAA,KACC,EAAAlC,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACnC,CAACnE,GAAaD,EACb,EAAAiC,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACqC,GAAA,KACC,EAAArC,QAAA,cAACsC,GAAA,CACC,GAAG,IACH,KAAK,IACL,MAAO,GAAAV,QAAQ,EAAE,yBAAyB,GAE1C,EAAA5B,QAAA,cAACuC,EAAA,KACC,EAAAvC,QAAA,cAACwC,GAAA,CAAgB,MAAK,GAAC,CACzB,EACA,EAAAxC,QAAA,cAACuC,EAAA,KAAe,GAAAX,QAAQ,EAAE,yBAAyB,CAAE,CACvD,CACF,CACF,EACE,KACHf,IAAc,UACb,EAAAb,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACyC,GAAA,CAAQ,KAAM5B,GAAa,SAAU,IAAKA,GAAa,KAAM,CAChE,EAEF,EAAAb,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAAC0C,GAAA,KACC,EAAA1C,QAAA,cAAC2C,GAAA,CAAG,SAAQ,IAAEtC,CAAM,CACtB,EACCE,GACC,EAAAP,QAAA,cAAC0C,GAAA,KACC,EAAA1C,QAAA,cAAC,WAAKO,CAAiB,CACzB,EAEF,EAAAP,QAAA,cAAC0C,GAAA,KACC,EAAA1C,QAAA,cAAC4C,GAAA,CAAQ,MAAK,GAAC,MAAOjB,GAAS,CACjC,CACF,CACF,EAEA,EAAA3B,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACpC,EAAAnC,QAAA,cAAC6C,GAAA,CAAW,MAAOnC,GAAO,SAAUC,IAAY,OAAW,CAC7D,GAEEC,GAAiB,OAAS,GAAKQ,GAAiB,OAAS,IACzD,EAAApB,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACnCvB,GAAiB,OAAS,GACzB,EAAAZ,QAAA,cAAC8C,GAAA,CAAiB,GAAIhF,EAAI,iBAAkB8C,GAAkB,EAE/DQ,GAAiB,OAAS,GACzB,EAAApB,QAAA,cAAC+C,GAAA,CACC,GAAIjF,EACJ,OAAQgB,GAAuB,OAC/B,iBAAkBsC,GACpB,CAEJ,EAGF,EAAApB,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACpC,EAAAnC,QAAA,cAACgD,GAAA,CACC,aAAcnC,GACd,eAAgBE,GAChB,UAAWD,GACX,OAAQV,GACR,QAAStB,GAAuB,QAChC,6BAA8BC,EAC9B,cAAemC,GACf,gBAAiB,IAAMxC,EAAY,SAAS,MAAM,EACpD,CACF,CACF,EACA,EAAAsB,QAAA,cAACiD,GAAA,KACC,EAAAjD,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACpC,EAAAnC,QAAA,cAACkD,GAAA,CAAQ,MAAO1C,EAAO,iBAAkBtC,EAAkB,CAC7D,EAEA,EAAA8B,QAAA,cAACmD,GAAA,KACC,EAAAnD,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACoD,GAAA,CAAG,SAAQ,IAAE,GAAAxB,QAAQ,EAAE,cAAc,CAAE,CAC1C,EACA,EAAA5B,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACqD,EAAA,KACC,EAAArD,QAAA,cAAC,SAAG,GAAA4B,QAAQ,EAAE,yBAAyB,CAAE,CAC3C,CACF,EACA,EAAA5B,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACsD,GAAA,CAAS,YAAa5B,GAAa,YAAahC,GAAQ,KAAM,CACjE,CACF,EAECe,IACC,EAAAT,QAAA,cAACmD,GAAA,KACC,EAAAnD,QAAA,cAACuD,GAAA,CACC,OAAQpD,IAAWA,GAAQ,KAAOA,GAAQ,KAAO,KACjD,KACEa,GACIwC,GAAe,OAAOxC,GAAawC,GAAe,QAAQ,EAC1D,OAEN,OAAQrD,IAAS,QAAU,QAE1B,CAAC,CAACM,IAAe,EAAAT,QAAA,cAAC,SAAGS,EAAY,CACpC,CACF,GAGAb,GAAS,QAAU,GAAK,GACxB,EAAAI,QAAA,cAACmD,GAAA,KACC,EAAAnD,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACoD,GAAA,CAAG,SAAQ,IAAE,GAAAxB,QAAQ,EAAE,gBAAgB,CAAE,CAC5C,EACA,EAAA5B,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACqD,EAAA,KACC,EAAArD,QAAA,cAAC,SAAG,GAAA4B,QAAQ,EAAE,2BAA2B,CAAE,CAC7C,CACF,EACA,EAAA5B,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACyD,GAAA,CACC,YAAa,GAAA7B,QAAQ,EAAE,iBAAiB,EACxC,QAAS7B,GAET,EAAAC,QAAA,cAAC4C,GAAA,CAAQ,MAAOhD,EAAS,CAC3B,CACF,CACF,EAGF,EAAAI,QAAA,cAAC0D,GAAA,CAAU,UAAWzC,GAAW,EAEjC,EAAAjB,QAAA,cAAC2D,GAAA,CAAmB,YAAarD,EAAa,EAE9C,EAAAN,QAAA,cAACmD,GAAA,KACC,EAAAnD,QAAA,cAAC4D,GAAA,CACC,OAAQxD,GACR,kBAAmBhC,EACnB,QAASW,EACX,EACC+B,IAAaA,GAAU,SACtB,EAAAd,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAAC6D,GAAA,CACC,SAAU,CAAC,CAAC/C,GAAU,SACtB,MAAM,sBACN,QAAS,IAAMpC,EAAY,SAAS,MAAM,GAC3C,qBAED,CACF,CAEJ,EAEA,EAAAsB,QAAA,cAAC8D,GAAA,CAAe,eAAgB/C,GAAgB,EAChD,EAAAf,QAAA,cAAC+D,GAAA,CAA0B,cAAelD,IAAc,cAAe,CACzE,CACF,CACF,CACF,EACA,EAAAb,QAAA,cAACgE,GAAA,CACC,GAAIlG,EACJ,UAAWC,EACX,UAAWC,EACX,mBAAoB,CAAC,CAACoC,IAAQ,OAAO,mBACrC,kBAAmBhC,EACnB,kBAAmBC,EACrB,CACF,EACA,EAAA2B,QAAA,cAACiE,GAAA,CAAc,GAAIC,GAAgB,cAAe,EACjDjF,GAAgB,EAAAe,QAAA,cAACmE,GAAA,CAAa,QAAShF,EAAsB,CAChE,CAEJ,EAEOiF,GAAQxG,GiJ3Wf,IAAAyG,GAAkB,gBCAlB,IAAAC,GAAkB,gBAClBC,GAAkF,oBAE5EC,GAAkB,CAAC,CAAE,IAAAC,EAAK,SAAAC,CAAS,IAAkD,CACzF,IAAMC,EAAS,IAAI,gBAAa,CAAE,IAAAF,EAAK,MAAO,IAAI,gBAAgB,CAAC,EACnE,OAAO,GAAAG,QAAA,cAAC,GAAAC,eAAA,CAAmB,OAAQF,GAASD,CAAS,CACvD,EAEOI,GAAQN,GCRf,IAAAO,GAAkB,gBAElBC,GAAmD,uBAQnD,IAAMC,GAAgB,CAAC,CAAE,SAAAC,CAAS,IAChC,GAAAC,QAAA,cAAC,GAAAC,cAAA,CAAkB,MAAOC,IAAQH,CAAS,EAGtCI,GAAQL,GCdf,IAAAM,GAAwD,gBCAjD,IAAMC,GAA4B,IAAM,IAAI,gBAAgB,OAAO,SAAS,MAAM,EDmBzF,IAAMC,GAAsB,IAAI,gBAChCA,GAAoB,IAAI,OAAQ,IAAI,EACpCA,GAAoB,IAAI,OAAQ,gBAAgB,EAEhD,IAAMC,GAAiB,CAAC,CACtB,IAAAC,EACA,OAAAC,EACA,sBAAAC,EACA,UAAAC,EACA,SAAAC,CACF,IAA2B,CACzB,GAAM,CAAE,aAAAC,EAAc,UAAAC,CAAU,EAAIC,GAAQ,EACtC,CAACC,EAAaC,CAAc,KAAI,aAAsB,CAC1D,aAAcX,EAChB,CAAC,EAEK,CAACY,EAAeC,CAAgB,KAAI,aAAkB,EACtD,CAACC,EAAWC,CAAY,KAAI,aAAqB,EACjD,CAACC,EAAYC,CAAa,KAAI,aAAS,EAAK,EAE5C,CAAE,KAAMC,CAAoB,EAAIC,GACpC,GAAGjB,CAAG,UACN,CACE,QAASC,EACL,CACE,YAAaA,CACf,EACA,CAAC,CACP,EACA,CAAC,CAACS,CACJ,EAEMQ,EAAQV,EAAY,aAAa,SAAS,EAC1C,CACJ,QAAAW,EACA,KAAMC,EACN,MAAAC,CACF,EAAIJ,GACF,GAAGjB,CAAG,GAAGkB,EAAQ,IAAIA,CAAK,GAAK,EAAE,GACjC,CACE,QAASjB,EACL,CACE,YAAaA,CACf,EACA,CAAC,CACP,EACA,CAACa,GAAc,CAAC,CAACN,GAAa,KAChC,EAEMc,EAAiBC,GAAyB,CAC9C,GAAM,CAAE,cAAAC,CAAc,EAAID,EAC1B,GAAIC,EAAe,CACjB,IAAMC,EAAmB,IAAI,gBAAiBD,EAAyB,SAAS,MAAM,EAEjFC,EAAiB,IAAI,MAAM,GAC9BA,EAAiB,IAAI,OAAQ,gBAAgB,EAG/ChB,EAAe,CACb,aAAcgB,CAChB,CAAC,CACH,CACF,KAEA,cAAU,IAAM,CACVvB,GACF,OAAO,iBAAiB,WAAYoB,CAAa,EAGnD,IAAMI,EAA4C,CAChD,WAAY,iBACZ,SAAUC,EACZ,EAEA,OAAAC,EAAY,gBAAgBF,CAAmB,EACxC,IAAM,CACX,OAAO,oBAAoB,WAAYJ,CAAa,EACpDM,EAAY,kBAAkBF,CAAmB,CACnD,CACF,EAAG,CAAC,CAAC,KAEL,cAAU,IAAM,CACVV,GACFL,EAAiBK,EAAoB,MAAM,CAE/C,EAAG,CAACA,CAAmB,CAAC,KAExB,cAAU,IAAM,CACd,GAAId,EAAuB,CACzB,IAAMuB,EAAmB,IAAI,gBAAgBjB,EAAY,YAAY,EACrEiB,EAAiB,OAAO,MAAM,EAC9BA,EAAiB,OAAO,QAAQ,EAC5BA,EAAiB,IAAI,MAAM,IAAM,kBACnCA,EAAiB,OAAO,MAAM,EAGhC,IAAMI,EAAaJ,EAAiB,SAAS,EAAI,IAAIA,CAAgB,GAAK,GAC1E,GAAIX,GACE,OAAO,SAAS,OAAO,cAAce,CAAU,IAAM,EAAG,CAC1D,IAAMC,EAAQ3B,GAAW,QAAQ,WAAY,EAAE,EACzC4B,GAASD,EAAQ,IAAIA,CAAK,IAAM,IAEhCE,GAAQF,EAAQ,OAAO,SAAS,SAAS,QAAQC,EAAM,EAAI,GAC7DE,GAAW,OAAO,SAAS,SAC3BD,GAAQ,KACVC,GAAWA,GAAS,OAAO,EAAGD,EAAK,GAGrC1B,EAAU,GAAG2B,EAAQ,GAAGJ,CAAU,EAAE,CACtC,CAEJ,CACF,EAAG,CAACrB,EAAaM,EAAYZ,CAAqB,CAAC,KAEnD,cAAU,IAAM,CACd,GAAIkB,EAAU,CAKZ,GAJI,CAACV,GAAiB,CAACR,GACrBS,EAAiBS,EAAS,MAAM,EAG9BlB,GAAyBkB,EAAS,OAAO,WAAY,CACvD,IAAMK,EAAmB,IAAI,gBAAgBL,EAAS,MAAM,UAAU,EACtEK,EAAiB,OAAO,MAAM,EAC9BA,EAAiB,OAAO,QAAQ,EAChC,IAAMI,EAAaJ,EAAiB,SAAS,EAAI,IAAIA,CAAgB,GAAK,GACtE,OAAO,SAAS,OAAO,cAAcI,CAAU,IAAM,IACvDxB,EAAa,GAAG,OAAO,SAAS,QAAQ,GAAGwB,CAAU,EAAE,EACvDpB,EAAe,CACb,aAAc,IAAI,gBAAgBoB,CAAU,EAC5C,MAAO,EACT,CAAC,EAEL,CAEIrB,GAAa,aACfK,EAAa,CAAC,GAAID,GAAa,CAAC,EAAI,GAAIQ,EAAS,aAAa,WAAa,CAAC,CAAE,CAAC,EAE/EP,EAAaO,EAAS,aAAa,WAAa,CAAC,CAAC,CAEtD,CACF,EAAG,CAACA,EAAUlB,CAAqB,CAAC,EAEpC,IAAMyB,MAAiB,gBACpBO,GAAsB,CAEdpB,GACHC,EAAc,EAAI,EAGpBN,EAAe,CACb,aAAc,IAAI,gBAAgByB,CAAS,CAC7C,CAAC,CAEL,EACA,CAACpB,CAAU,CACb,EAEMqB,MAAa,gBAAY,IAAM,CAC/Bf,GACFX,EAAe,CACb,aAAc,IAAI,gBAAgBW,GAAU,aAAa,WAAW,UAAU,KAAK,EACnF,aAAc,EAChB,CAAC,CAEL,EAAG,CAACA,CAAQ,CAAC,EAEPgB,MAAe,gBAClBC,GAA0C,CACzC,GAAI,CAACvB,EAAY,CACf,IAAMwB,EAAsBC,GAA0B,EAEhDC,EAAqBtC,EACvBoC,EACAD,EAUJ,GARInC,GAAyBmC,GAC3BA,EAAoB,QAAQ,CAACI,GAAOC,KAAQ,CACrCF,GAAoB,OAAOE,EAAG,GAAG,KAAMC,IAAMA,KAAMF,EAAK,GAC3DD,GAAoB,OAAOE,GAAKD,EAAK,CAEzC,CAAC,EAGCD,EAAoB,CACtB,IAAMf,GAAmB,IAAI,gBAAgBe,CAAkB,EAC/Df,GAAiB,OAAO,MAAM,EAC9BA,GAAiB,OAAO,QAAQ,EAE3Be,EAAmB,IAAI,MAAM,GAChCA,EAAmB,IAAI,OAAQ,IAAI,EAEhCA,EAAmB,IAAI,MAAM,GAChCA,EAAmB,IAAI,OAAQ,gBAAgB,EAGjD,IAAMX,GAAaJ,GAAiB,SAAS,EAAI,IAAIA,EAAgB,GAAK,GAE1EhB,EAAe,CACb,aAAc+B,CAChB,CAAC,EACGtC,GACFG,EAAa,GAAG,OAAO,SAAS,QAAQ,GAAGwB,EAAU,EAAE,CAE3D,CACAd,EAAc,EAAI,CACpB,CACF,EACA,CAACD,CAAU,CACb,EAEM2B,EAAQ,CACZ,QAAAtB,EACA,MAAAE,EACA,SAAAD,EACA,UAAAR,EACA,cAAAF,EACA,YAAAF,EACA,eAAAmB,GACA,WAAAQ,GACA,aAAAC,EACF,EAEA,OAAO,GAAAQ,QAAA,cAACC,GAAc,SAAd,CAAuB,MAAOJ,GAAQrC,CAAS,CACzD,EAEO0C,GAAQ/C,GEpPf,IAAAgD,GAAmB,4BAEbC,GAAO,GAAAC,QAAO,IAAI,MAAM,KAAO,CACnC,UAAW,mCACb,EAAE;AAAA,sBACqBC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA,WACzCA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBzCC,GAAQH,GCvBf,IAAAI,GAAkB,gBAWlB,IAAMC,GAAmB,CAAC,CACxB,iBAAAC,EACA,iBAAAC,EACA,aAAAC,EACA,SAAAC,CACF,IACE,GAAAC,QAAA,cAACC,GAAgB,SAAhB,CAAyB,MAAO,CAAE,aAAAH,EAAc,iBAAAF,EAAkB,iBAAAC,CAAiB,GACjFE,CACH,EAGKG,GAAQP,GCtBf,IAAAQ,GAA6C,gBAc7C,IAAMC,GAAwB,CAAC,CAAE,IAAAC,EAAK,OAAAC,EAAQ,OAAAC,EAAQ,SAAAC,CAAS,IAAkC,CAC/F,GAAM,CAACC,EAAaC,CAAc,KAAI,aAAsB,EAEtDC,EAAQF,GAAa,aAAa,SAAS,EAC3C,CACJ,QAAAG,EACA,KAAMC,EACN,MAAAC,CACF,EAAIC,GACF,GAAGT,GAAUD,CAAG,GAAGM,EAAQ,IAAIA,CAAK,GAAK,EAAE,GAC3C,CACE,QAASJ,EACL,CACE,YAAaA,CACf,EACA,CAAC,CACP,EACA,CAACE,CACH,EAEMO,KAAe,gBAClBC,GACCP,EAAe,CACb,aAAAO,CACF,CAAC,EACH,CAAC,CACH,EAEMC,EAAQ,CACZ,gBAAiB,CAAC,CAACZ,EACnB,QAAAM,EACA,MAAAE,EACA,SAAAD,EACA,YAAAJ,EACA,aAAAO,CACF,EAEA,OAAO,GAAAG,QAAA,cAACC,GAAqB,SAArB,CAA8B,MAAOF,GAAQV,CAAS,CAChE,EAEOa,GAAQjB,GCtDf,IAAAkB,GAAmC,gBCAnC,IAAAC,GAAsC,WAEhCC,GAAqBC,GAAgB,CACzC,GAAM,CAACC,EAAOC,CAAQ,KAAI,aAAS,eAAe,QAAQF,CAAG,CAAC,EAExDG,KAAM,gBACTC,GAAc,CACb,eAAe,QAAQJ,EAAKI,CAAC,EAC7BF,EAASE,CAAC,CACZ,EACA,CAACJ,CAAG,CACN,EAEMK,KAAS,gBAAY,IAAM,CAC/B,eAAe,WAAWL,CAAG,EAC7BE,EAAS,IAAI,CACf,EAAG,CAACF,CAAG,CAAC,EAEFM,KAAQ,gBAAY,IAAM,CAC9B,eAAe,MAAM,EACrBJ,EAAS,IAAI,CACf,EAAG,CAACF,CAAG,CAAC,EAER,MAAO,CACL,MAAAC,EACA,IAAAE,EACA,OAAAE,EACA,MAAAC,CACF,CACF,EAEOC,GAAQR,GDvBf,IAAMS,GAAyB,CAAC,CAAE,SAAAC,CAAS,IAAmC,CAC5E,GAAM,CAAE,MAAAC,EAAO,IAAAC,EAAK,OAAAC,CAAO,EAAIC,GAAkB,gBAAgB,EAE3DC,KAAsB,gBAAaC,GAAiBA,EAAKJ,EAAII,CAAE,EAAIH,EAAO,EAAI,CAAC,CAAC,EAEtF,OACE,GAAAI,QAAA,cAACC,GAAsB,SAAtB,CAA+B,MAAO,CAAE,iBAAkBP,EAAO,oBAAAI,CAAoB,GACnFL,CACH,CAEJ,EAEOS,GAAQV,GEpBf,IAAAW,GAAmE,gBCAnE,IAAAC,GAAkC,WAE5BC,GAAkBC,GAAa,CACnC,IAAMC,KAAM,WAAU,EACtB,uBAAU,IAAM,CACdA,EAAI,QAAUD,CAChB,CAAC,EACMC,EAAI,OACb,EAEOC,GAAQH,GCRR,IAAMI,GAAW,WAWXC,GAA0B,CACrC,KAAM,OAAO,SAAS,QACxB,EAEMC,GAAc,CAACC,EAAkBC,IAAuB,CAC5D,IAAMC,EAAO,CAAE,GAAGF,CAAM,EACxB,OAAQC,EAAO,KAAM,CACnB,KAAKJ,GACH,OAAAK,EAAK,KAAOD,EAAO,KACZC,EAET,QACE,MAAM,IAAI,MAAM,yBAAyB,CAC7C,CACF,EAEOC,GAAQJ,GFvBf,IAAMK,GACJ,qGACIC,GAAY,WAMZC,GAAe,CAAC,CAAE,SAAAC,CAAS,IAAyB,CACxD,GAAM,CAACC,EAAOC,CAAQ,KAAI,eAAWC,GAASC,EAAY,EACpDC,EAAeC,GAAYL,EAAM,IAAI,KAE3C,cAAU,IAAM,CACd,IAAMM,EAAa,IAAM,CACvBL,EAAS,CAAE,KAAMM,GAAU,KAAM,OAAO,SAAS,QAAS,CAAC,CAC7D,EAEA,cAAO,iBAAiBV,GAAWS,CAAU,EACtC,IAAM,CACX,OAAO,oBAAoBT,GAAWS,CAAU,CAClD,CACF,EAAG,CAAC,CAAC,EAEL,IAAME,KAAY,gBAAaC,GAAiB,CAC9C,IAAMC,EAAK,OAAO,SAAS,KAC3B,QAAQ,UAAU,KAAM,GAAI,GAAGD,CAAI,EAAE,EACrC,IAAME,EAAK,OAAO,SAAS,KACvBD,EAAG,cAAcC,CAAE,IAAM,GAC3B,OAAO,cAAc,IAAI,gBAAgB,YAAY,CAAC,EAExDV,EAAS,CAAE,KAAMM,GAAU,KAAAE,CAAK,CAAC,CACnC,EAAG,CAAC,CAAC,EAECG,KAAe,gBAAaH,GAAiB,CACjD,IAAMC,EAAK,OAAO,SAAS,KAC3B,QAAQ,aAAa,KAAM,GAAID,CAAI,EACnC,IAAME,EAAK,OAAO,SAAS,KACvBD,EAAG,cAAcC,CAAE,IAAM,GAC3B,OAAO,cAAc,IAAI,gBAAgB,YAAY,CAAC,EAExDV,EAAS,CAAE,KAAMM,GAAU,KAAAE,CAAK,CAAC,CACnC,EAAG,CAAC,CAAC,EAECI,KAAK,YAAQ,IAAMb,EAAM,KAAK,MAAMJ,EAAiB,GAAG,IAAI,EAAG,CAACI,EAAM,IAAI,CAAC,EAE3Ec,KAA0B,YAC9B,KAAO,CACL,GAAGd,EACH,aAAAI,EACA,GAAAS,EACA,UAAAL,EACA,aAAAI,CACF,GACA,CAACZ,CAAK,CACR,EAEA,OAAO,GAAAe,QAAA,cAACC,GAAY,SAAZ,CAAqB,MAAOF,GAAQf,CAAS,CACvD,EAEOkB,GAAQnB,GV7Bf,IAAMoB,GAAgB,CAAC,CACrB,IAAAC,EACA,OAAAC,EACA,OAAAC,EACA,aAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,sBAAAC,EACA,UAAAC,EACA,SAAAC,CACF,IACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,iBAAkBP,EAClB,iBAAkBC,EAClB,aAAcH,GAEd,GAAAO,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAgB,IAAKV,GACpB,GAAAM,QAAA,cAACK,GAAA,CACC,IAAKf,EACL,OAAQE,EACR,sBAAuBK,EACvB,UAAWC,GAEX,GAAAE,QAAA,cAACM,GAAA,CAAsB,IAAKhB,EAAK,OAAQC,EAAQ,OAAQC,GACvD,GAAAQ,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,KAAMT,CAAS,CAClB,CACF,CACF,CACF,CACF,CACF,CACF,EAGKU,GAAQpB,Ga1Ef,IAAAqB,GAAkB,gBCAlB,IAAAC,GAAiC,gBCAjC,IAAAC,GAAoC,WAE9BC,GAAY,8EACZC,GAAc,aAEdC,GAAU,IAAM,CACpB,IAAMC,EAAO,OAAO,SAAS,KAAK,OAAO,EAAG,OAAO,SAAS,KAAK,MAAM,EACvE,OAAOH,GAAU,KAAKG,CAAI,GAAK,CAACA,EAAOA,EAAO,MAChD,EAEMC,GAAc,IAAM,CACxB,GAAM,CAACC,EAAIC,CAAK,KAAI,aAA6B,IAAMJ,GAAQ,CAAC,EAC1DK,EAAe,IAAM,CACzB,IAAMJ,EAAO,OAAO,SAAS,KAAK,OAAO,EAAG,OAAO,SAAS,KAAK,MAAM,EACvE,GAAIH,GAAU,KAAKG,CAAI,GAAK,CAACA,EAC3BG,EAAM,OAAO,SAAS,KAAK,OAAO,EAAG,OAAO,SAAS,KAAK,MAAM,CAAC,MAEjE,MAAM,cAEV,EAEA,uBAAU,KACRC,EAAa,EACb,OAAO,iBAAiBN,GAAaM,CAAY,EAC1C,IAAM,CACX,OAAO,oBAAoBN,GAAaM,CAAY,CACtD,GACC,CAAC,CAAC,EAEEF,CACT,EAEOG,GAAQJ,GDrBf,IAAMK,GAAiB,CAAC,CACtB,WAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,gBAAAC,EACA,oBAAAC,EACA,yBAAAC,EACA,iBAAAC,EACA,UAAAC,EACA,wBAAAC,EACA,0BAAAC,EACA,kBAAAC,CACF,IAA2B,CACzB,IAAMC,EAASC,GAAY,EACrB,CAAE,GAAIC,CAAO,EAAIC,GAAQ,EACzBC,EAAcC,GAAyBhB,CAAU,KAEvD,cAAU,IAAM,CACTO,IACCI,EACFM,EAAO,QAAQ,kBAAmBN,CAAM,EAExCM,EAAO,QAAQ,iBAAiB,EAGtC,EAAG,CAACN,CAAM,CAAC,EAEX,IAAMO,EAAKL,GAAUF,EAErB,OAAKI,EAGH,GAAAI,QAAA,iBAAAA,QAAA,cACGD,EACC,GAAAC,QAAA,cAACC,GAAA,CACC,GAAIF,EACJ,UAAW,CAACX,EACZ,yBAA0BF,EAC1B,iBAAkBC,EAClB,UAAWC,EACX,wBAAyBC,EACzB,kBAAmBE,EACrB,EAEA,GAAAS,QAAA,cAACE,GAAA,CACC,WAAYrB,EACZ,WAAYC,EACZ,mBAAoBC,EACpB,gBAAiBC,EACjB,UAAW,CAACI,EACZ,iBAAkBD,EAClB,UAAWC,EACX,oBAAqBH,EACrB,0BAA2BK,EAC3B,kBAAmBC,EACrB,CAEJ,EA5BuB,IA8B3B,EAEOY,GAAQvB,GD9Df,IAAMwB,GAA6B,CAAC,CAAE,SAAAC,EAAU,UAAAC,CAAU,IACxD,GAAAC,QAAA,cAACC,GAAA,CAAe,GAAGH,GACjB,GAAAE,QAAA,cAACE,GAAA,CAAgB,GAAGH,EAAW,CACjC,EAGKI,GAAQN,GGhBf,IAAAO,GAAkB,gBAiClB,IAAMC,GAAoB,CAAC,CACzB,IAAAC,EACA,OAAAC,EACA,OAAAC,EACA,aAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,SAAAC,CACF,IACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,iBAAkBL,EAClB,iBAAkBC,EAClB,aAAcH,GAEd,GAAAK,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAgB,IAAKR,GACpB,GAAAI,QAAA,cAACK,GAAA,CAAsB,IAAKb,EAAK,OAAQC,EAAQ,OAAQC,GACvD,GAAAM,QAAA,cAACM,GAAA,KACC,GAAAN,QAAA,cAACO,GAAA,KAAMR,CAAS,CAClB,CACF,CACF,CACF,CACF,CACF,EAGKS,GAAQjB,GCaf,IAAOkB,GAAQC",
6
- "names": ["import_react", "import_react", "import_styled_components", "_colors", "theme", "theme_default", "size", "multiplier", "baseUnit", "theme_default", "Wrapper", "styled", "props", "size", "Container", "children", "React", "Wrapper", "Container_default", "import_styled_components", "Page", "styled", "PageSection", "size", "accent", "props", "large", "fillSpace", "import_react", "import_styled_components", "Wrapper", "styled", "Header", "size", "HeaderCount", "HeaderSort", "Body", "Footer", "FooterProgress", "FooterAction", "ResultCount", "props", "import_react", "import_styled_components", "Wrapper", "styled", "Description", "size", "Bar", "props", "BarActive", "import_react_i18next", "ProgressBar", "valueCurrent", "valueMax", "t", "barWidth", "React", "Wrapper", "Description", "Bar", "BarActive", "ProgressBar_default", "import_styled_components", "import_styled_components", "UtilityTextRight", "styled", "UtilityFontSizeSmall", "UtilityTextPrimary", "UtilityTextBold", "ButtonReset", "styled", "ButtonBase", "size", "props", "fullWidth", "inputHeight", "ButtonPrimary", "ButtonSecondary", "ButtonContent", "ButtonClear", "UtilityTextRight", "ButtonInline", "inline", "ButtonInlineBold", "ButtonInlineLight", "ButtonInlinePrimary", "React", "import_styled_components", "import_styled_components", "noTransform", "fadeIn", "rotate", "Spinner", "styled", "size", "rotate", "Wrapper", "inline", "center", "import_styled_components", "SrOnly", "styled", "import_react_i18next", "Loader", "inline", "center", "t", "Wrapper", "Spinner", "SrOnly", "Loader_default", "import_date_fns", "import_locale", "MANUFACTURER", "MODEL_SERIES", "FUEL_TYPE", "GEARBOX_TYPE", "BRANCH", "COLOR", "ENVIRONMENT_CLASS", "SEGMENT", "DRIVING_WHEEL", "PRICE", "MILEAGE", "MODEL_YEAR", "LEASING_PRICE", "BUSINESS_LEASING_PRICE", "ODOMETER_VALUE_AS_KM", "COLOR_WHITE", "COLOR_BLACK", "COLOR_GRAY", "COLOR_SILVER", "COLOR_BLUE", "COLOR_RED", "COLOR_BROWN", "COLOR_GREEN", "COLOR_ORANGE", "COLOR_YELLOW", "COLOR_PURPLE", "COLOR_BEIGE", "DEFAULT_PLACEHOLDER_IMAGE", "notEmpty", "value", "numberSeparator", "n", "x", "s", "c", "re", "num", "dateTimeFormat", "value", "format", "date", "formatFns", "import_react", "import_react", "SearchContext", "_", "useSearch", "SearchContext", "useSearch_default", "import_react", "import_styled_components", "iconSize", "Wrapper", "styled", "Select", "size", "props", "Option", "Icon", "React", "import_styled_components", "Icon", "styled", "block", "IconInfo", "IconCancel", "IconChevronDown", "IconChevronLeft", "IconChevronRight", "IconCheck", "IconRadio", "IconSearch", "IconExclamationCircle", "IconExclamationTriangle", "IconImage", "import_react_i18next", "SortSelect", "value", "options", "onChange", "unit", "t", "React", "Wrapper", "Select", "option", "Option", "Icon", "IconChevronDown", "SortSelect_default", "import_i18next", "SortOptionDisplayName", "getTranslatedSortOptionDisplayName", "str", "i18next", "Result", "children", "loading", "response", "documents", "queryFilter", "onLoadMore", "onFilterUpdate", "useSearch_default", "onSortOptionChange", "e", "numberOfDocuments", "numberOfHits", "useSkeletons", "selectedSortOption", "x", "sortOptions", "so", "getTranslatedSortOptionDisplayName", "React", "Loader_default", "Wrapper", "Header", "HeaderCount", "ResultCount", "numberSeparator", "HeaderSort", "SortSelect_default", "Body", "Footer", "FooterProgress", "ProgressBar_default", "FooterAction", "ButtonSecondary", "ButtonContent", "Result_default", "import_react", "import_styled_components", "List", "styled", "size", "Item", "Action", "ButtonReset", "props", "Label", "Indicator", "IndicatorValue", "import_react", "React", "import_styled_components", "import_styled_components", "HeadingBase", "styled", "size", "noMargin", "H1", "props", "H2", "H3", "H4", "H5", "VisualHeading", "Wrapper", "styled", "UiBlock", "fadeIn", "PanelWrapper", "props", "noTransform", "Header", "size", "Heading", "H1", "Close", "CloseBtn", "ButtonReset", "Body", "Footer", "FooterAction", "FooterActionItem", "portal_namespace_exports", "__export", "DefaultPortal", "React", "PortalElement", "id", "portal_element_default", "import_react", "import_react_dom", "Portal", "id", "children", "el", "React", "current", "dynamic", "ReactDOM", "portal_default", "import_react_i18next", "Panel", "id", "title", "footer", "onClose", "children", "t", "portal_default", "portal_namespace_exports", "Wrapper", "UiBlock", "PanelWrapper", "Header", "Heading", "H1", "Close", "CloseBtn", "IconCancel", "Body", "Footer", "Panel_default", "import_react", "import_styled_components", "List", "styled", "size", "Header", "ButtonReset", "Label", "Heading", "Indicator", "IndicatorValue", "Icon", "props", "Body", "Item", "isOpen", "import_react_i18next", "AccordionItem", "heading", "children", "activeCount", "isActive", "t", "extend", "setExtend", "onToggleExtend", "React", "Item", "Header", "Label", "Heading", "Indicator", "IndicatorValue", "Icon", "IconChevronDown", "Body", "Accordion", "List", "Accordion_default", "import_styled_components", "Repeat", "styled", "size", "RepeatTiny", "RepeatSmall", "import_react", "import_react", "import_react", "import_styled_components", "List", "styled", "size", "Item", "Action", "ButtonReset", "props", "ActionIcon", "ActionLabel", "ChecklistItem", "label", "onClick", "active", "radio", "React", "Item", "Action", "ActionIcon", "IconRadio", "IconCheck", "ActionLabel", "Checklist", "items", "List", "item", "Checklist_default", "import_react", "import_styled_components", "Wrapper", "styled", "OverflowBox", "children", "React", "Wrapper", "OverflowBox_default", "ChecklistFacet", "facet", "loading", "error", "onFilterUpdate", "useSearch_default", "selected", "setSelected", "onClick", "f", "React", "OverflowBox_default", "Checklist_default", "a", "b", "checkListFacet_default", "import_react", "import_react", "import_styled_components", "List", "styled", "size", "Item", "Action", "ButtonReset", "Color", "props", "active", "boxShadow", "Label", "ColorSelectItem", "label", "hex", "onClick", "active", "disabled", "boxShadow", "React", "Item", "Action", "Color", "Label", "ColorSelect", "items", "List", "item", "ColorSelect_default", "getHexColorFromDisplayName", "displayName", "COLOR_WHITE", "COLOR_BLACK", "COLOR_GRAY", "COLOR_SILVER", "COLOR_BLUE", "COLOR_RED", "COLOR_BROWN", "COLOR_GREEN", "COLOR_ORANGE", "COLOR_YELLOW", "COLOR_PURPLE", "COLOR_BEIGE", "ColorSelectFacet", "facet", "loading", "error", "onFilterUpdate", "useSearch_default", "selected", "setSelected", "onClick", "f", "React", "ColorSelect_default", "a", "b", "getHexColorFromDisplayName", "colorFacet_default", "import_react", "import_react", "import_react_compound_slider", "import_styled_components", "RangeSpan", "styled", "size", "RangeSpanItem", "props", "Slider", "Bar", "Track", "Handle", "import_react", "Handle", "min", "max", "id", "value", "percent", "getHandleProps", "React", "import_react", "Track", "source", "target", "getTrackProps", "React", "getSteps", "steps", "current", "step", "index", "c", "RangeSlider", "loading", "values", "domain", "unit", "formatValues", "maxPrefix", "onChange", "setCurrent", "onUpdate", "nextValues", "currentMin", "numberSeparator", "currentMax", "equal", "_maxPrefix", "React", "Slider", "Bar", "Track", "Handle", "getRailProps", "handles", "getHandleProps", "handle", "tracks", "getTrackProps", "id", "source", "target", "RangeSpan", "RangeSpanItem", "RangeSlider_default", "getInitialValues", "domain", "facet", "searchParams", "facetMin", "_queryMin", "facetMax", "_queryMax", "queryMin", "min", "queryMax", "max", "averageDelta", "x", "xs", "acc", "last", "getSteps", "initialAllValues", "delta", "i", "RangeFacet", "unit", "formatValues", "loading", "queryFilter", "initialFacets", "onFilterUpdate", "useSearch_default", "initialFacet", "maxPrefix", "state", "setValues", "_initialAllValues", "f", "_steps", "init", "minStr", "maxStr", "onChange", "nextValues", "query", "React", "RangeSlider_default", "rangeFacet_default", "import_react_i18next", "FacetSelector", "facet", "MANUFACTURER", "MODEL_SERIES", "FUEL_TYPE", "GEARBOX_TYPE", "BRANCH", "ENVIRONMENT_CLASS", "SEGMENT", "DRIVING_WHEEL", "React", "checkListFacet_default", "COLOR", "colorFacet_default", "PRICE", "rangeFacet_default", "BUSINESS_LEASING_PRICE", "LEASING_PRICE", "ODOMETER_VALUE_AS_KM", "MILEAGE", "MODEL_YEAR", "faceSelector_default", "import_react_i18next", "FilterPanel", "facet", "filteredFacets", "numberOfHits", "loading", "onFilterUpdate", "onClose", "t", "onClearFilters", "React", "Panel_default", "FooterAction", "FooterActionItem", "ButtonSecondary", "ButtonContent", "ButtonPrimary", "Accordion_default", "x", "f", "AccordionItem", "Repeat", "faceSelector_default", "FilterPanel_default", "import_react_i18next", "isSelected", "f", "searchParams", "PRICE", "MILEAGE", "LEASING_PRICE", "BUSINESS_LEASING_PRICE", "MODEL_YEAR", "filter", "filterOdometer", "id", "marketCode", "filterList", "Filter", "t", "queryFilter", "initialFacets", "loading", "response", "onFilterUpdate", "useSearch_default", "facets", "facet", "setFacet", "onSelectFacet", "nextFacet", "onClose", "filterNames", "x", "filteredFacets", "a", "b", "match", "y", "React", "FilterPanel_default", "List", "selected", "Item", "Action", "Label", "Indicator", "IndicatorValue", "Filter_default", "import_react", "import_styled_components", "Wrapper", "styled", "List", "size", "Item", "props", "import_react", "import_styled_components", "Wrapper", "styled", "Image", "props", "Picture", "Source", "Img", "Content", "size", "ContentBody", "ContentFooter", "PreHeading", "Heading", "Link", "Description", "Usp", "Price", "CurrentPrice", "PriceCell", "OldPrice", "Label", "import_react", "import_styled_components", "Item", "styled", "size", "Box", "props", "ItemSection", "Action", "ButtonReset", "List", "isSmall", "UspItem", "title", "onClick", "React", "Item", "Box", "ItemSection", "Action", "IconInfo", "UspList", "items", "small", "List", "item", "index", "UspList_default", "import_react", "import_react", "PathContext", "usePath", "context", "PathContext", "usePath_default", "import_react_i18next", "import_react", "useIsInViewport", "options", "containerRef", "isVisible", "setIsVisible", "intersectionRatio", "setIntersectionRatio", "callbackFunction", "entries", "observer", "entry", "useIsInViewport_default", "ProductCard", "id", "title", "href", "image", "pathRoute", "placeholderImage", "branchName", "description", "uspList", "price", "oldPrice", "leasingPrice", "businessLeasingPrice", "onClick", "t", "containerRef", "isVisible", "useIsInViewport_default", "pushState", "usePath_default", "_onClick", "onHrefClick", "e", "reg", "React", "Wrapper", "Image", "Picture", "Source", "Img", "DEFAULT_PLACEHOLDER_IMAGE", "Content", "ContentBody", "PreHeading", "Heading", "Link", "Description", "Usp", "UspList_default", "ContentFooter", "Price", "PriceCell", "OldPrice", "Label", "CurrentPrice", "ProductCard_default", "import_i18next", "resolveImage", "document", "img", "Grid", "documents", "placeholderImage", "hashRoute", "pathRoute", "displayBranchName", "onClickItem", "React", "Wrapper", "List", "_pathRoute", "Item", "ProductCard_default", "numberSeparator", "i18next", "Grid_default", "import_react", "import_styled_components", "Wrapper", "styled", "Query", "Clear", "ButtonReset", "size", "props", "import_react_i18next", "SearchTerm", "children", "onClear", "clearTitle", "t", "React", "Wrapper", "Query", "Clear", "IconCancel", "SearchTerm_default", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Label", "Search", "props", "Action", "ActionBtn", "ButtonReset", "Input", "size", "InputSearch", "React", "placeholder", "label", "value", "id", "onSearch", "onChange", "onKeyDown", "ref", "Wrapper", "Label", "Search", "Input", "Action", "ActionBtn", "IconSearch", "InputSearch_default", "import_react", "useOutsideClick", "ref", "callback", "handleClick", "e", "useOutsideClick_default", "import_react_i18next", "SearchBar", "value", "setValue", "onSearch", "t", "ref", "onChange", "e", "useOutsideClick_default", "_onSearch", "onKeyDown", "React", "InputSearch_default", "SearchBar_default", "SearchFilter", "value", "setValue", "queryFilter", "onFilterUpdate", "useSearch_default", "onSearch", "nextQuery", "React", "SearchBar_default", "SearchFilter_default", "import_react", "import_styled_components", "getSnackbarBg", "severity", "bg", "theme_default", "Wrapper", "styled", "size", "props", "Icon", "Content", "Heading", "Message", "Snackbar", "severity", "icon", "heading", "children", "iconSelector", "React", "IconInfo", "IconExclamationCircle", "IconExclamationTriangle", "IconCheck", "Wrapper", "Icon", "Content", "Heading", "Message", "Snackbar_default", "PubSub", "_PubSub", "event", "i", "eventName", "args", "pubsub_default", "import_i18next", "import_react", "import_i18next", "import_react_i18next", "getLanguage", "marketCode", "initializeI18n", "resolve", "i18n", "useInitializeTranslation", "marketCode", "initialized", "setInitialized", "i18n", "initialize", "m", "initializeI18n", "useInitializeTranslation_default", "import_i18next", "WaykeSearch", "marketCode", "filterList", "initialQueryParams", "hashRoute", "pathRoute", "removeSearchBar", "placeholderImage", "removeFilterOptions", "modifyDocumentTitleSearch", "displayBranchName", "onClickSearchItem", "error", "documents", "queryFilter", "onFilterUpdate", "onInitialize", "useSearch_default", "initialized", "useInitializeTranslation_default", "onItemClicked", "id", "pubsub_default", "onClearQuery", "nextQuery", "searchQuery", "React", "Page", "PageSection", "Container_default", "SearchFilter_default", "SearchTerm_default", "Filter_default", "Result_default", "Snackbar_default", "Grid_default", "i18next", "portal_element_default", "portal_namespace_exports", "search_default", "import_react", "import_ecom_web", "import_react", "import_styled_components", "List", "styled", "Item", "size", "Label", "Value", "import_styled_components", "Price", "styled", "OldPrice", "props", "import_react_i18next", "PriceTable", "price", "discount", "t", "React", "List", "Item", "Label", "VisualHeading", "Value", "Price", "numberSeparator", "OldPrice", "PriceTable_default", "React", "import_styled_components", "Logo", "styled", "size", "wide", "LogoBox", "logo", "logo2x", "alt", "wide", "logoRetina", "Logo", "LogoBox_default", "import_react", "import_styled_components", "Wrapper", "styled", "size", "small", "Content", "children", "small", "dangerouslySetInnerHTML", "React", "Wrapper", "Content_default", "import_react", "import_styled_components", "Wrapper", "styled", "props", "Quote", "Author", "size", "AvatarWrapper", "Info", "Name", "Date", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "Avatar", "image", "alt", "React", "Wrapper", "Avatar_default", "Blockquote", "children", "author", "avatar", "date", "React", "Wrapper", "Quote", "Author", "AvatarWrapper", "Avatar_default", "Info", "Name", "Date", "Blockquote_default", "import_react", "import_styled_components", "Wrapper", "styled", "Extend", "size", "extended", "Action", "ExtendContent", "children", "actionTitle", "onClick", "extend", "setExtend", "onExtend", "React", "Wrapper", "ref", "Extend", "Action", "ButtonClear", "ButtonContent", "ExtendContent_default", "import_react", "import_react_slick", "import_scroll_into_view_if_needed", "import_styled_components", "quickNavWidth", "Wrapper", "styled", "props", "size", "Main", "Alt", "Item", "SliderWrapper", "Image", "ImageFull", "Arrow", "ArrowLeft", "ArrowRight", "QuickNav", "QuickNavItem", "active", "QuickNavBtn", "ButtonReset", "QuickNavImg", "MediaButtonWrapper", "EnableNavigationButton", "import_styled_components", "NavButton", "styled", "ButtonReset", "size", "props", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "UiBlock", "Item", "Img", "CloseBtn", "ButtonReset", "import_react", "import_react", "getVimeoId", "url", "regExp", "match", "getYouTubeId", "youtubeBase", "getYoutubeThumbnail", "id", "onImageLoad", "thumbnail", "onImageError", "import_styled_components", "Wrapper", "styled", "props", "Iframe", "YouTubePlayer", "url", "autoplay", "React", "Wrapper", "Iframe", "getYouTubeId", "YoutubePlayer_default", "import_react", "VimeoPlayer", "url", "autoplay", "React", "Wrapper", "Iframe", "getVimeoId", "VimeoPlayer_default", "import_react", "import_styled_components", "Video", "styled", "modal", "Video_default", "CustomPlayer", "url", "controls", "modal", "ratio", "isPreview", "React", "Wrapper", "Video_default", "CustomPlayer_default", "ytNames", "isYouTubeVideo", "url", "host", "vNames", "isVimeoVideo", "VideoPlayer", "autoplay", "controls", "React", "YoutubePlayer_default", "VimeoPlayer_default", "CustomPlayer_default", "EmbeddedVideoLightbox_default", "import_react", "import_react", "import_styled_components", "compassSize", "size", "controlBtnSize", "Wrapper", "styled", "props", "Pannellum", "SphereViewer", "id", "src", "preview", "autoLoad", "onStart", "number", "startBtn", "React", "Wrapper", "Loader_default", "SphereViewer_default", "SphereLightbox", "url", "React", "SphereViewer_default", "SphereLightbox_default", "import_react", "import_react", "MediaButton", "text", "onClick", "React", "MediaButtonWrapper", "ButtonSecondary", "ButtonContent", "MediaButton_default", "import_react", "calculateCurrentFrame", "startFrame", "delta", "length", "frame", "Rotation", "children", "pointerPosition", "max", "state", "setState", "touchEnd", "mouseMove", "mouseUp", "touchMove", "event", "notTouched", "childCount", "offsetWidth", "pointer", "calculatePointerPosition", "offset", "setCurrentFrame", "touchStart", "onMouseEnter", "onMouseLeave", "current", "clientX", "offsetLeft", "React", "child", "i", "Rotation_default", "import_react_i18next", "ThreeSixtyLightbox", "urls", "started", "setStarted", "onStart", "React", "Rotation_default", "image", "i", "Img", "Item", "MediaButton_default", "ThreeSixtLightbox_default", "import_react_i18next", "Lightbox", "index", "media", "onClose", "t", "onRef", "ref", "React", "Wrapper", "e", "UiBlock", "m", "i", "Item", "Img", "ThreeSixtLightbox_default", "x", "SphereLightbox_default", "EmbeddedVideoLightbox_default", "CloseBtn", "IconCancel", "Lightbox_default", "import_react", "import_react", "import_react", "import_react", "cache", "getCachedResult", "key", "setCachedResult", "value", "pendingPromise", "isPendingPromise", "url", "setPendingPromise", "promise", "clearPendingPromise", "useFetch", "path", "options", "skip", "promiseCache", "data", "setData", "loading", "setLoading", "error", "setError", "doFetch", "cached", "request", "result", "json", "useFetch_default", "useVimeoThumbnail", "id", "small", "thumbnail", "setThumbnail", "data", "useFetch_default", "useVimeoThumbnail_default", "useThumbnail", "url", "small", "thumbnail", "setThumbnail", "vimeoId", "getVimeoId", "vimeoThumbnail", "useVimeoThumbnail_default", "youtubeThumbnail", "getYoutubeThumbnail", "useThumbnail_default", "React", "import_styled_components", "Wrapper", "styled", "props", "size", "UiBlock", "fadeIn", "Dialog", "noTransform", "Content", "Header", "Heading", "H1", "Close", "CloseBtn", "ButtonReset", "Body", "Image", "ModalFoldout", "ModalFoldoutBody", "import_react_i18next", "Modal", "id", "title", "onClose", "children", "t", "portal_default", "portal_namespace_exports", "Wrapper", "e", "UiBlock", "Dialog", "Content", "Header", "Heading", "H1", "Close", "CloseBtn", "IconCancel", "Body", "Modal_default", "import_react_i18next", "GalleryEmbed", "src", "index", "t", "modal", "setModal", "thumbnail", "useThumbnail_default", "onClick", "e", "onCloseModal", "onError", "onImageError", "onLoad", "onImageLoad", "customVideo", "React", "ImageFull", "MediaButton_default", "Modal_default", "EmbeddedVideoLightbox_default", "CustomPlayer_default", "EmbededVideo_default", "import_react", "import_react_i18next", "QuickNavEmbeded", "src", "index", "t", "thumbnail", "useThumbnail_default", "onError", "e", "onImageError", "onLoad", "onImageLoad", "customVideo", "React", "QuickNavImg", "CustomPlayer_default", "QuickNavEmbeded_default", "import_react", "import_react_i18next", "onMediaClick", "func", "Sphere", "url", "preview", "visible", "onDisableNavigation", "navigationDisabled", "t", "React", "ImageFull", "MediaButton_default", "e", "SphereViewer_default", "Sphere_default", "import_react", "import_react_i18next", "onMediaClick", "func", "ThreeSixty", "urls", "visible", "onDisableNavigation", "navigationDisabled", "t", "React", "Image", "MediaButton_default", "e", "Rotation_default", "image", "i", "ThreeSixty_default", "import_react_i18next", "sliderSettings", "Gallery", "media", "placeholderImage", "t", "slider", "quickNavRef", "isDragging", "index", "setIndex", "lightbox", "setLightbox", "navigationDisabled", "setNavigationDisabled", "beforeChange", "_", "newIndex", "element", "scrollIntoView", "onMouseDown", "onMouseMove", "onClick", "pubsub_default", "nextImage", "prevImage", "goTo", "target", "onDisableNavigation", "onEnableNavigation", "e", "onToggleLightbox", "mediaLength", "placeholder", "DEFAULT_PLACEHOLDER_IMAGE", "React", "Wrapper", "Main", "SliderWrapper", "Slider", "m", "i", "Item", "Image", "notEmpty", "x", "ThreeSixty_default", "EmbededVideo_default", "Sphere_default", "EnableNavigationButton", "ButtonSecondary", "ButtonContent", "ArrowLeft", "NavButton", "IconChevronLeft", "ArrowRight", "IconChevronRight", "Alt", "QuickNav", "src", "QuickNavItem", "QuickNavBtn", "QuickNavImg", "QuickNavEmbeded_default", "Lightbox_default", "Gallery_default", "import_styled_components", "ProductPage", "styled", "props", "ProductPageAside", "size", "ProductPageMain", "ProductPageAsideSection", "ProductPageMainSection", "Wrapper", "ProductPageContentLimit", "import_client", "import_client", "FinancialOptionDetail", "HoursOpen", "SEARCH_ITEM_QUERY", "SEARCH_ITEM_QUERY_default", "useSearchItem", "id", "SEARCH_ITEM_QUERY_default", "useSearchItem_default", "import_react", "import_react", "React", "import_styled_components", "Wrapper", "styled", "size", "props", "Logo", "LogoImg", "Content", "OptionBoxHeading", "OptionBoxContent", "OptionBox", "logo", "logo2x", "logoAlt", "children", "Wrapper", "Logo", "LogoImg", "Content", "OptionBox_default", "import_react", "import_styled_components", "List", "styled", "Item", "size", "Label", "Value", "DataList", "items", "React", "List", "item", "Item", "Label", "Value", "DataList_default", "import_react_i18next", "Leasing", "financialOption", "modal", "setModal", "toggleModal", "image", "description", "monthlyCost", "duration", "mileage", "type", "name", "title", "React", "Modal_default", "Image", "Content_default", "ModalFoldout", "ModalFoldoutBody", "DataList_default", "numberSeparator", "OptionBox_default", "OptionBoxHeading", "OptionBoxContent", "UtilityTextPrimary", "ButtonInline", "leasing_default", "import_react", "import_client", "import_client", "FinancialOptionDetail", "LOAN_CALCULATION", "LOAN_CALCULATION_default", "useLoanCalculation", "id", "duration", "downPayment", "residual", "LOAN_CALCULATION_default", "useLoan_default", "import_react", "import_styled_components", "ContentLogo", "styled", "props", "ContentLogoText", "ContentLogoMedia", "size", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Label", "Value", "size", "isHighlighted", "props", "RangeSliderLabel", "label", "value", "highlight", "React", "Wrapper", "Label", "Value", "RangeSliderLabel_default", "import_react", "import_react_compound_slider", "RangeSliderSimple", "loading", "values", "domain", "steps", "unit", "formatValues", "onChange", "onUpdate", "first", "step", "currentMin", "numberSeparator", "currentMax", "React", "Slider", "getRailProps", "Bar", "handles", "getHandleProps", "handle", "Handle", "tracks", "getTrackProps", "id", "source", "target", "Track", "RangeSliderSimple_default", "SliderWithLabel", "label", "values", "domain", "steps", "loading", "unit", "formatValues", "onChange", "local", "setLocal", "onUpdate", "nextValues", "React", "RepeatTiny", "RangeSliderLabel_default", "numberSeparator", "RangeSliderSimple_default", "SliderWithLabel_default", "import_react_i18next", "stepGenerator", "step", "max", "steps", "current", "nextCurrent", "LoanModal", "id", "financialOption", "onClose", "t", "tmp", "setTmp", "extend", "setExtend", "React", "onToggleExtend", "pubsub_default", "variables", "setVariables", "duration", "downPayment", "residual", "loading", "data", "useLoan_default", "loan", "downPaymentCurrent", "downPaymentMin", "downPaymentMax", "downPaymentStep", "downPaymentSteps", "onDownPaymentChange", "values", "durationCurrent", "durationMin", "durationMax", "durationStep", "durationSteps", "onDurationChange", "residualCurrent", "residualMin", "residualMax", "residualStep", "residualSteps", "onResidualChange", "interestText", "effectiveInterestText", "monthlyCost", "Modal_default", "Repeat", "ContentLogo", "ContentLogoText", "Content_default", "ContentLogoMedia", "LogoBox_default", "RepeatSmall", "SliderWithLabel_default", "RepeatTiny", "numberSeparator", "ButtonClear", "ButtonContent", "ModalFoldout", "ModalFoldoutBody", "DataList_default", "LoanModal_default", "import_react_i18next", "Loan", "id", "financialOption", "t", "modal", "setModal", "toggleModal", "data", "useLoan_default", "interest", "duration", "monthlyCost", "logo", "React", "OptionBox_default", "OptionBoxHeading", "OptionBoxContent", "LoanModal_default", "numberSeparator", "ButtonInline", "loan_default", "import_react_i18next", "FinancialOptions", "id", "financialOptions", "t", "React", "Repeat", "RepeatTiny", "VisualHeading", "financialOption", "index", "leasing_default", "loan_default", "FinancialOptions_default", "import_react", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Main", "size", "Heading", "H2", "Description", "Footer", "Foldout", "props", "import_react_i18next", "DetailBox", "heading", "description", "children", "t", "extend", "setExtend", "React", "onToggleExtend", "extendBtnText", "Wrapper", "Main", "Heading", "Description", "Footer", "ButtonClear", "ButtonContent", "Foldout", "DetailBox_default", "import_react", "import_styled_components", "Wrapper", "styled", "Header", "Title", "Info", "size", "InfoBtn", "ButtonReset", "props", "Extend", "import_react_i18next", "ExtendInfo", "title", "children", "t", "extend", "setExtend", "onToggleExtend", "React", "Wrapper", "Header", "Title", "Info", "InfoBtn", "IconInfo", "Extend", "ExtendInfo_default", "import_react", "import_styled_components", "Wrapper", "styled", "size", "InputLabel", "children", "htmlFor", "React", "Wrapper", "InputLabel_default", "import_react", "import_styled_components", "Wrapper", "styled", "props", "Input", "size", "InputText", "placeholder", "label", "value", "id", "onChange", "onKeyDown", "React", "Wrapper", "Input", "InputText_default", "React", "React", "import_styled_components", "Label", "styled", "size", "props", "Wrapper", "type", "checked", "error", "Input", "LabelText", "import_react", "import_styled_components", "iconSize", "selectPadding", "size", "Wrapper", "styled", "props", "Select", "Option", "Icon", "InputSelect", "value", "options", "onChange", "unit", "title", "React", "Wrapper", "Select", "option", "Option", "Icon", "IconChevronDown", "InputSelect_default", "import_styled_components", "InputGroup", "styled", "props", "size", "InputGroupColumn", "import_styled_components", "ColumnRow", "styled", "ColumnRowItem", "size", "import_client", "import_client", "INSURANCE_CALCULATION", "INSURANCE_CALCULATION_default", "useInsuranceCalculation", "id", "branchId", "personalNumber", "drivingDistance", "INSURANCE_CALCULATION_default", "useInsurance_default", "ssnIsValid", "s", "import_react_i18next", "InsuranceModal", "id", "branch", "onClose", "insuranceOptions", "t", "form", "setForm", "payload", "setPayload", "loading", "data", "error", "useInsurance_default", "ssnIsValid", "onChangeSsn", "e", "onChangeDrivingDistance", "onShowInsurances", "pubsub_default", "onKeyDown", "options", "React", "Modal_default", "Repeat", "ContentLogo", "ContentLogoText", "Content_default", "ContentLogoMedia", "LogoBox_default", "RepeatSmall", "RepeatTiny", "InputGroup", "InputGroupColumn", "InputLabel_default", "InputText_default", "InputSelect_default", "ButtonPrimary", "ButtonContent", "Loader_default", "Snackbar_default", "insurance", "DetailBox_default", "numberSeparator", "ButtonInline", "H4", "item", "ExtendInfo_default", "addon", "ColumnRow", "ColumnRowItem", "UtilityTextBold", "InsuranceModal_default", "import_react_i18next", "Insurance", "id", "branch", "insuranceOptions", "t", "modal", "setModal", "toggleModal", "React", "InsuranceModal_default", "Repeat", "RepeatTiny", "VisualHeading", "insuranceOption", "index", "OptionBox_default", "OptionBoxHeading", "OptionBoxContent", "ButtonInline", "Insurance_default", "import_react", "import_marked", "import_react", "import_marked", "import_react_i18next", "InsuranceFreeModal", "onClose", "insuranceOptions", "t", "React", "Modal_default", "Repeat", "Content_default", "ButtonInline", "LogoBox_default", "InsuranceFreeModal_default", "import_react_i18next", "Insurance", "insuranceOptions", "modal", "setModal", "toggleModal", "React", "InsuranceFreeModal_default", "Repeat", "RepeatTiny", "VisualHeading", "insuranceOption", "index", "OptionBox_default", "Content_default", "OptionBoxContent", "ButtonInline", "InsuranceFree_default", "InsuranceOptions", "id", "branch", "insuranceOptions", "React", "Insurance_default", "InsuranceFree_default", "InsuranceOptions_default", "import_react", "import_marked", "import_react_i18next", "ManufacturerPackageOption", "packageOption", "React", "ProductPageMainSection", "Repeat", "H2", "Content_default", "ButtonInline", "LogoBox_default", "ManufacturerPackagesOption_default", "import_react", "import_react", "import_react", "import_react_i18next", "ToggleItem", "title", "value", "type", "onClickVisible", "onClickValue", "t", "visible", "setVisible", "_onClickValue", "onClick", "visibleTitle", "React", "RepeatTiny", "ButtonSecondary", "ButtonContent", "toggle_item_default", "import_core", "Metadata", "metadata_min_default", "typedMetadata", "metadata_min_default", "formatPhonenumber", "text", "import_react_i18next", "ActionList", "contact", "branch", "t", "email", "phonenumber", "onClickMailVisible", "pubsub_default", "onClickPhoneVisible", "onClickPhoneValue", "React", "toggle_item_default", "formatPhonenumber", "ActionList_default", "import_styled_components", "Column", "styled", "grow", "noShrink", "Columns", "valign", "align", "$spacing", "size", "flexWrap", "flexInline", "clearLtSm", "props", "clearLtMd", "import_styled_components", "StateIndicator", "styled", "size", "$tone", "props", "import_react", "import_styled_components", "List", "styled", "Item", "size", "Icon", "Label", "CheckMarkListItem", "children", "React", "Item", "Icon", "IconCheck", "Label", "CheckMarkList", "List", "CheckMarkList_default", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "Header", "Body", "Info", "Action", "InfoContent", "InfoBtn", "ButtonReset", "Title", "import_react_i18next", "SwitchBar", "title", "body", "actionTitle", "children", "onClick", "t", "info", "setInfo", "onToggleInfo", "React", "Wrapper", "Header", "Info", "InfoContent", "Title", "InfoBtn", "IconInfo", "Action", "ButtonInline", "Body", "Modal_default", "SwitchBar_default", "import_react", "import_react", "CentralStorageContext", "_", "import_react_i18next", "BranchModal", "loading", "connections", "onClose", "t", "centralStorageId", "setCentralStorageId", "CentralStorageContext", "localValue", "setLocalValue", "onConfirm", "id", "onChange", "e", "React", "Modal_default", "Repeat", "RepeatTiny", "Content_default", "InputLabel_default", "InputSelect_default", "x", "ButtonPrimary", "ButtonContent", "BranchModal_default", "import_react", "import_marked", "PackageOptionModal", "packageOption", "onClose", "React", "Modal_default", "Repeat", "LogoBox_default", "Content_default", "ButtonInline", "PackageOptionModal_default", "import_esm", "import_sv", "import_react_i18next", "CheckList", "manufacturer", "packageOptions", "ecommerce", "branch", "contact", "availableFrom", "toggleEcomModal", "loadingCentralStorageVehicle", "t", "modalBranch", "setModalBranch", "openModalBranch", "closeModalBranch", "modal", "setModal", "onOpen", "nextModal", "onClose", "packageOption", "React", "BranchModal_default", "PackageOptionModal_default", "Repeat", "RepeatTiny", "ButtonPrimary", "ButtonContent", "SwitchBar_default", "Content_default", "ActionList_default", "Columns", "Column", "StateIndicator", "UtilityFontSizeSmall", "sv", "CheckMarkList_default", "CheckMarkListItem", "ButtonInline", "index", "CheckList_default", "import_react", "import_react_i18next", "import_react", "import_styled_components", "Wrapper", "styled", "Heading", "Action", "size", "SectionHeader", "children", "onClick", "actionTitle", "React", "Wrapper", "Heading", "Action", "ButtonClear", "ButtonContent", "SectionHeader_default", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "$accentBg", "Item", "List", "$columns", "$columnsSm", "$columnsMd", "ListWrapper", "$spacing", "NavBtn", "PrevBtn", "NextBtn", "OverflowGrid", "items", "itemKeyBase", "spacing", "columns", "columnsSm", "columnsMd", "accentBg", "overflowElement", "onPrev", "itemWidth", "scrollLeft", "onNext", "scrollWidth", "overflowElementWidth", "hidePrevNav", "setHidePrevNav", "hideNextNav", "setHideNextNav", "onScroll", "overflowElementScrollWidth", "React", "Wrapper", "ListWrapper", "List", "item", "i", "Item", "PrevBtn", "NavButton", "IconChevronLeft", "NextBtn", "IconChevronRight", "OverflowGrid_default", "import_react", "import_react", "RelatedSearchContext", "_", "useRelatedSearch", "id", "authorizedReseller", "data", "RelatedSearchContext", "searchParams", "useRelatedSearch_default", "regexEndGuid", "escapeRegExpString", "s", "regexPathGuid", "path", "Related", "id", "hashRoute", "pathRoute", "authorizedReseller", "displayBranchName", "onClickSearchItem", "t", "loading", "response", "moreLikeThisUrl", "useRelatedSearch_default", "onItemClicked", "pubsub_default", "React", "Loader_default", "PageSection", "Container_default", "Repeat", "SectionHeader_default", "H2", "OverflowGrid_default", "document", "prefix", "r", "regexPathGuid", "pathRouteUrl", "ProductCard_default", "numberSeparator", "Related_default", "import_react", "import_marked", "import_react_i18next", "PackageOptions", "packageOptions", "React", "packageOption", "index", "ProductPageMainSection", "Repeat", "H2", "Content_default", "ButtonInline", "LogoBox_default", "PackageOptions_default", "import_react", "import_styled_components", "TableColumn", "styled", "TableColumnRow", "size", "TableColumnCell", "import_react", "import_react", "import_styled_components", "getBg", "severity", "bg", "theme_default", "Wrapper", "styled", "props", "size", "Badge", "label", "severity", "React", "Wrapper", "Badge_default", "import_i18next", "import_react_i18next", "KeyOrder", "TranslateWeekDays", "d", "i18next", "arr", "GetOpeningHours", "o", "prev", "current", "title", "item", "previous", "GetOpeningHoursToday", "dayNumber", "day", "valuOfDateString", "s", "splitted", "x", "OpeningHours", "openingHours", "today", "currentlyOpen", "currentDate", "from", "until", "oh", "React", "RepeatSmall", "Badge_default", "TableColumn", "TableColumnRow", "TableColumnCell", "UtilityTextBold", "OpeningHours_default", "import_react", "import_react_i18next", "PhoneNumber", "phoneNumber", "visible", "setVisible", "onClick", "React", "TableColumnRow", "TableColumnCell", "ButtonInlineBold", "ButtonContent", "PhoneNumber_default", "import_react", "import_react", "import_react", "SettingsContext", "useSettings", "SettingsContext", "useSettings_default", "import_styled_components", "Wrapper", "styled", "Image", "Placeholder", "props", "PlaceholderAction", "import_react_i18next", "StaticMap", "position", "googleMapsApiKey", "googleMapsMarker", "useSettings_default", "visible", "setVisible", "onShowMap", "e", "latitude", "longitude", "React", "Wrapper", "Image", "Placeholder", "PlaceholderAction", "ButtonSecondary", "ButtonContent", "Map_default", "import_react_i18next", "Branch", "branch", "loading", "displayBranchName", "t", "modal", "setModal", "openModal", "closeModal", "React", "BranchModal_default", "Repeat", "H2", "Map_default", "Content_default", "ButtonInline", "ProductPageContentLimit", "TableColumn", "TableColumnRow", "TableColumnCell", "ButtonInlineBold", "ButtonContent", "PhoneNumber_default", "formatPhonenumber", "OpeningHours_default", "Branch_default", "import_react", "import_client", "import_client", "HoursOpen", "SEARCH_ITEM_BRANCH_QUERY", "SEARCH_ITEM_BRANCH_QUERY_default", "useSearchItemBranch", "id", "branch", "SEARCH_ITEM_BRANCH_QUERY_default", "useSearchItemBranch_default", "useCentralStorage", "vehicle", "centralStorageId", "setCentralStorageId", "CentralStorageContext", "connections", "branchId", "x", "data", "loading", "useSearchItemBranch_default", "first", "useCentralStorage_default", "import_react", "import_react_i18next", "Page404", "t", "React", "Page", "PageSection", "Container_default", "H1", "Page404_default", "import_react", "PageLoading", "React", "Page", "PageSection", "Container_default", "Loader_default", "PageLoading_default", "import_react", "PropertyTreeCreator", "_PropertyTreeCreator", "properties", "propertyKey", "property", "categoryId", "categories", "rootProperties", "key", "category", "subCategories", "convertedSubCategories", "subCategory", "createdSubCategories", "id", "index", "self", "firstOccuranceOfId", "value", "prop", "listProperty", "property_tree_creator_default", "ID_ORDER", "compareById", "firstId", "secondId", "firstOrder", "secondOrder", "compare_categories_default", "first", "second", "result", "compare_properties_default", "first", "second", "ORDER", "compareByPredefinedOrder", "firstId", "secondId", "firstOrder", "secondOrder", "compare_basic_properties_default", "first", "second", "result", "compare_properties_default", "sort", "tree", "compare_categories_default", "category", "compare_basic_properties_default", "compare_properties_default", "subCategory", "property_tree_sorter_default", "import_i18next", "deepCopy", "object", "deep_copy_default", "TEXT_TYPE", "NUMBER_TYPE", "BASIC_CATEGORY", "i18next", "ENGINE_SUBCATEGORY", "PropertyBuilder", "name", "hint", "value", "type", "category", "unit", "custom_property_adder_default", "item", "properties", "newProperties", "deep_copy_default", "PROPERTY_BLACK_LIST", "isForbiddenProperty", "key", "CATEGORY_WHITE_LIST", "hasForbiddenCategory", "property", "property_remover_default", "properties", "newProperties", "deep_copy_default", "import_react", "import_styled_components", "TableList", "styled", "props", "TableListItem", "size", "TableListKey", "TableListValue", "TableListBooleanPos", "TableListBooleanNeg", "import_i18next", "import_react_i18next", "formatValue", "value", "unit", "React", "TableListBooleanPos", "i18next", "SrOnly", "IconCheck", "TableListBooleanNeg", "IconCancel", "MetadataItem", "name", "hint", "t", "foldout", "setFoldout", "onToggleFoldout", "presentedValue", "TableListItem", "TableListKey", "ButtonInline", "TableListValue", "Modal_default", "Content_default", "MetadataItem_default", "React", "import_styled_components", "Wrapper", "styled", "size", "props", "List", "Item", "Action", "ButtonReset", "Tabs", "tabs", "active", "onClick", "Wrapper", "List", "tab", "Item", "Action", "Tabs_default", "MetadataSubCategory", "name", "properties", "React", "Repeat", "H5", "TableList", "property", "index", "MetadataItem_default", "MetadataCategory", "subCategories", "subCategory", "PropertySet", "propertySet", "vehicleData", "activeCategoryId", "setActiveCategoryId", "mappedProperties", "newProperties", "property_remover_default", "enrichedProperties", "custom_property_adder_default", "tree", "property_tree_creator_default", "property_tree_sorter_default", "categories", "onTab", "id", "activeCategory", "category", "Tabs_default", "Property_default", "import_react", "import_react_i18next", "DemoCarModal", "onClose", "React", "Modal_default", "Content_default", "DemoCarModal_default", "import_react", "import_react", "import_styled_components", "PdfListItem", "styled", "size", "theme", "List", "PdfLink", "PdfTitle", "props", "PdfSubtitle", "PdfColumn", "PdfListInner", "import_react_i18next", "translateContentType", "document", "PdfDownloadItem", "contentType", "React", "PdfListItem", "PdfListInner", "PdfColumn", "PdfTitle", "PdfSubtitle", "PdfLink", "DocumentList", "documents", "List", "i", "DocumentList_default", "import_react_i18next", "import_i18next", "Translation", "i18next", "SortOrder", "Documents", "documents", "categorised", "prev", "curr", "index", "x", "category", "b", "manyCategories", "React", "ProductPageMainSection", "Repeat", "H2", "ExtendContent_default", "group", "H3", "DocumentList_default", "Documents_default", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "size", "imageBaseStyling", "Image", "ImageaPlaceholder", "props", "Body", "Heading", "Title", "Branding", "Price", "Preamble", "ReadMoreBtn", "ButtonReset", "import_react_i18next", "AccessoryCard", "title", "image", "branding", "price", "preamble", "readMoreCta", "t", "React", "Wrapper", "Image", "ImageaPlaceholder", "IconImage", "Body", "Heading", "Title", "Branding", "Price", "Preamble", "ReadMoreBtn", "AccessoryCard_default", "import_react", "import_marked", "import_styled_components", "Image", "styled", "import_styled_components", "Link", "styled", "props", "$hoverGhost", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "Row", "$oldPrice", "Label", "Price", "PriceBox", "prices", "React", "Wrapper", "item", "i", "Row", "Label", "Price", "PriceBox_default", "import_react_i18next", "AccesoryModal", "accessory", "onClose", "t", "priceList", "numberSeparator", "React", "Modal_default", "Repeat", "Image", "LogoBox_default", "PriceBox_default", "Content_default", "UtilityTextBold", "Link", "AccessoryModal_default", "import_react_i18next", "AccessoriesSection", "accessories", "modal", "setModal", "onOpenModal", "accessory", "onCloseModal", "React", "AccessoryModal_default", "ProductPageMainSection", "Repeat", "H2", "Content_default", "OverflowGrid_default", "AccessoryCard_default", "numberSeparator", "Accessories_default", "import_i18next", "WaykeSearchItem", "marketCode", "id", "hashRoute", "pathRoute", "disableResetScrollOnInit", "placeholderImage", "modifyDocumentTitleItem", "displayBranchName", "onClickSearchItem", "initialized", "useInitializeTranslation_default", "ecomSettings", "useSettings_default", "ecomContext", "loading", "result", "useSearchItem_default", "centralStorageVehicle", "loadingCentralStorageVehicle", "useCentralStorage_default", "demoCarModal", "setDemoCarModal", "onToggleDemoCarModal", "WaykeEcomWeb", "view", "event", "currentStep", "data", "pubsub_default", "vehicle", "registrationNumber", "options", "notEmpty", "opt", "onShowMoreOptionsClick", "React", "PageLoading_default", "Page404_default", "contact", "branch", "title", "accessories", "shortDescription", "media", "description", "price", "discount", "financialOptions", "manufacturer", "ecommerce", "packageOptions", "publishedAt", "documents", "availableFrom", "flags", "insuranceOptions", "fuelType", "mileage", "odometerReading", "gearbox", "modelYear", "propertySet", "uspList", "i18next", "numberSeparator", "Page", "PageSection", "Container_default", "ProductPage", "ProductPageAside", "ProductPageAsideSection", "Repeat", "UtilityFontSizeSmall", "ButtonInlineLight", "ButtonContent", "IconChevronLeft", "LogoBox_default", "RepeatSmall", "H1", "UspList_default", "PriceTable_default", "FinancialOptions_default", "InsuranceOptions_default", "CheckList_default", "ProductPageMain", "Gallery_default", "ProductPageMainSection", "H2", "Content_default", "Property_default", "Blockquote_default", "dateTimeFormat", "ExtendContent_default", "Documents_default", "Accessories_default", "Branch_default", "ButtonPrimary", "PackageOptions_default", "ManufacturerPackagesOption_default", "Related_default", "portal_element_default", "portal_namespace_exports", "DemoCarModal_default", "searchItem_default", "import_react", "import_react", "import_client", "GraphqlProvider", "uri", "children", "client", "React", "ApolloProviderBase", "graphqlProvider_default", "import_react", "import_styled_components", "ThemeProvider", "children", "React", "ThemeProviderBase", "theme_default", "themeProvider_default", "import_react", "getUrlSearchParamsFromUrl", "initialSearchParams", "SearchProvider", "url", "apiKey", "useQueryParamsFromUrl", "pathRoute", "children", "replaceState", "pushState", "usePath_default", "queryFilter", "setQueryFilter", "initialFacets", "setInitialFacets", "documents", "setDocuments", "initialize", "setInitialize", "initialDataRepsonse", "useFetch_default", "query", "loading", "response", "error", "popStateEvent", "event", "currentTarget", "nextSearchParams", "onFilterUpdateEvent", "onFilterUpdate", "pubsub_default", "nextSearch", "_path", "prefix", "index", "pathname", "nextQuery", "onLoadMore", "onInitialize", "_initialQueryParams", "searchParamsFromUrl", "getUrlSearchParamsFromUrl", "initialQueryParams", "value", "key", "v", "React", "SearchContext", "SearchProvider_default", "import_styled_components", "Root", "styled", "props", "Root_default", "import_react", "SettingsProvider", "googleMapsApiKey", "googleMapsMarker", "ecomSettings", "children", "React", "SettingsContext", "SettingsProvider_default", "import_react", "RelatedSearchProvider", "url", "urlMlt", "apiKey", "children", "queryFilter", "setQueryFilter", "query", "loading", "response", "error", "useFetch_default", "fetchRelated", "searchParams", "value", "React", "RelatedSearchContext", "RelatedSearchProvider_default", "import_react", "import_react", "useSessionStorage", "key", "value", "setValue", "set", "v", "remove", "clear", "useSessionStorage_default", "CentralStorageProvider", "children", "value", "set", "remove", "useSessionStorage_default", "setCentralStorageId", "id", "React", "CentralStorageContext", "CentralStorageProvider_default", "import_react", "import_react", "usePrevious", "value", "ref", "usePrevious_default", "SET_PATH", "initialState", "pathReducer", "state", "action", "next", "reducer_default", "regexGuidAnyWhere", "POP_STATE", "PathProvider", "children", "state", "dispatch", "reducer_default", "initialState", "previousPath", "usePrevious_default", "onPopState", "SET_PATH", "pushState", "path", "h1", "h2", "replaceState", "id", "value", "React", "PathContext", "PathProvider_default", "WaykeProvider", "url", "urlMlt", "apiKey", "ecomSettings", "graphQlUrl", "googleMapsApiKey", "googleMapsMarker", "useQueryParamsFromUrl", "pathRoute", "children", "React", "PathProvider_default", "SettingsProvider_default", "CentralStorageProvider_default", "graphqlProvider_default", "SearchProvider_default", "RelatedSearchProvider_default", "themeProvider_default", "Root_default", "WaykeProvider_default", "import_react", "import_react", "import_react", "regexGuid", "HASH_CHANGE", "getGuid", "guid", "useHashGuid", "id", "setId", "onHashChange", "useHashGuid_default", "WaykeComposite", "marketCode", "filterList", "initialQueryParams", "removeSearchBar", "removeFilterOptions", "disableResetScrollOnInit", "placeholderImage", "pathRoute", "modifyDocumentTitleItem", "modifyDocumentTitleSearch", "displayBranchName", "hashId", "useHashGuid_default", "pathId", "usePath_default", "initialized", "useInitializeTranslation_default", "pubsub_default", "id", "React", "searchItem_default", "search_default", "WaykeComposite_default", "WaykeCompositeWithProvider", "provider", "composite", "React", "WaykeProvider_default", "WaykeComposite_default", "WaykeCompositeWithProvider_default", "import_react", "WaykeItemProvider", "url", "urlMlt", "apiKey", "ecomSettings", "graphQlUrl", "googleMapsApiKey", "googleMapsMarker", "children", "React", "PathProvider_default", "SettingsProvider_default", "CentralStorageProvider_default", "graphqlProvider_default", "RelatedSearchProvider_default", "themeProvider_default", "Root_default", "WaykeItemProvidet_default", "src_default", "WaykeCompositeWithProvider_default"]
4
+ "sourcesContent": ["import React, { useEffect, useCallback, useMemo } from 'react';\n\nimport Container from '../../components/Container';\nimport { Page, PageSection } from '../../components/Page';\nimport Result from '../../components/Result';\nimport Filter from '../../components/Filter';\nimport Grid from '../../components/Grid';\nimport SearchTerm from '../../components/SearchTerm';\nimport { PortalElement, PortalNamespace } from '../../components/Portal';\nimport SearchFilter from '../../components/SearchFilter';\nimport Snackbar from '../../components/Snackbar';\nimport useSearch from '../../State/Search/useSearch';\nimport { SearchFilterTypes } from '../../@types/filter';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { MarketCode } from '../../@types/market';\nimport useInitializeTranslation from '../../hooks/useInitializeTranslation';\nimport i18next from 'i18next';\n\nexport interface WaykeSearchProps {\n marketCode?: MarketCode;\n filterList?: SearchFilterTypes[];\n initialQueryParams?: URLSearchParams | string;\n removeSearchBar?: boolean;\n removeFilterOptions?: boolean;\n placeholderImage?: string;\n hashRoute?: boolean;\n pathRoute?: string;\n modifyDocumentTitleSearch?: string;\n displayBranchName?: boolean;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst WaykeSearch = ({\n marketCode,\n filterList,\n initialQueryParams,\n hashRoute,\n pathRoute,\n removeSearchBar,\n placeholderImage,\n removeFilterOptions,\n modifyDocumentTitleSearch,\n displayBranchName,\n onClickSearchItem,\n}: WaykeSearchProps) => {\n const { error, documents, queryFilter, onFilterUpdate, onInitialize } = useSearch();\n const initialized = useInitializeTranslation(marketCode);\n\n useEffect(() => {\n if (modifyDocumentTitleSearch) {\n document.title = modifyDocumentTitleSearch;\n }\n onInitialize(\n typeof initialQueryParams === 'string'\n ? new URLSearchParams(initialQueryParams)\n : initialQueryParams\n );\n }, []);\n\n const onItemClicked = useCallback((id: string) => {\n PubSub.publish('ItemClicked', id);\n if (onClickSearchItem) {\n onClickSearchItem(id);\n }\n }, []);\n\n const onClearQuery = useCallback(() => {\n const nextQuery = new URLSearchParams(queryFilter.searchParams);\n nextQuery.delete('query');\n onFilterUpdate(nextQuery.toString());\n }, [queryFilter.searchParams]);\n\n const searchQuery = useMemo(() => queryFilter.searchParams.get('query'), [documents]);\n\n if (!initialized) return null;\n\n return (\n <>\n <Page>\n {!removeSearchBar && (\n <PageSection>\n <Container>\n <SearchFilter />\n </Container>\n </PageSection>\n )}\n {searchQuery && (\n <PageSection>\n <Container>\n <SearchTerm onClear={onClearQuery}>{searchQuery}</SearchTerm>\n </Container>\n </PageSection>\n )}\n {!removeFilterOptions && (\n <PageSection>\n <Container>\n <Filter filterList={filterList} marketCode={marketCode} />\n </Container>\n </PageSection>\n )}\n <PageSection accent fillSpace className=\"wayke__theme wayke__color--accent-bg\">\n <Container>\n <Result>\n <>\n {error && (\n <Snackbar severity=\"error\" icon heading=\"Ett fel har intr\u00E4ffat\">\n V\u00E4nligen f\u00F6rs\u00F6k igen.\n </Snackbar>\n )}\n {!error && documents && documents.length > 0 && (\n <Grid\n hashRoute={hashRoute}\n pathRoute={pathRoute}\n onClickItem={onItemClicked}\n documents={documents}\n placeholderImage={placeholderImage}\n displayBranchName={displayBranchName}\n />\n )}\n {!error && documents && documents.length === 0 && (\n <Snackbar\n severity=\"warning\"\n icon\n heading={i18next.t('search.snackbarNoSearchResults.heading') || undefined}\n >\n {i18next.t('search.snackbarNoSearchResults.body')}\n </Snackbar>\n )}\n </>\n </Result>\n </Container>\n </PageSection>\n </Page>\n <PortalElement id={PortalNamespace.DefaultPortal} />\n </>\n );\n};\n\nexport default WaykeSearch;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst Container = ({ children }: Props) => <Wrapper>{children}</Wrapper>;\n\nexport default Container;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n width: 100%;\n max-width: ${(props) => props.theme.distances.containerMaxWidth};\n margin: 0 auto;\n padding: 0 ${size(3)};\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: 0 ${size(2)};\n }\n`;\n", "const _colors = {\n black: '#000',\n white: '#fff',\n gray: '#ddd',\n grayLight: '#f8f8f8',\n grayLightTransparent: 'rgba(248, 248, 248, 0)',\n grayLightDarker: '#ebebeb',\n grayDark: '#717171',\n blue: '#1d61ca',\n ui: {\n greenLight: '#cdf5c8',\n green: '#2b8747',\n redLight: '#ffd0d0',\n red: '#c71f1f',\n yellowLight: '#fff4c7',\n yellow: '#ffc700',\n blueLight: '#daf7fc',\n },\n};\n\nconst theme = {\n color: {\n bg: _colors.white,\n link: _colors.blue,\n accent: _colors.grayLight,\n accentTransparent: _colors.grayLightTransparent,\n accentDark: _colors.grayLightDarker,\n border: _colors.gray,\n textDark: _colors.black,\n textDarkLighten: _colors.grayDark,\n textLight: _colors.white,\n hoverOverlay: 'rgba(0, 0, 0, 0.04)',\n disabledBg: _colors.gray,\n disabledText: _colors.grayDark,\n placeholder: _colors.grayDark,\n ui: {\n positiveLight: _colors.ui.greenLight,\n positive: _colors.ui.green,\n neutralLight: _colors.ui.yellowLight,\n neutral: _colors.ui.yellow,\n negativeLight: _colors.ui.redLight,\n negative: _colors.ui.red,\n infoLight: _colors.ui.blueLight,\n },\n },\n breakpoint: {\n Sm: '@media (min-width: 600px)',\n LtSm: '@media (max-width: 599px)',\n Md: '@media (min-width: 900px)',\n LtMd: '@media (max-width: 899px)',\n Lg: '@media (min-width: 1200px)',\n LtLg: '@media (max-width: 1199px)',\n },\n mask: {\n gradient: {\n toTop: 'linear-gradient(to top, #000, transparent)',\n toBottom: 'linear-gradient(to bottom, #000, transparent)',\n toLeft: 'linear-gradient(to left, #000, transparent)',\n toRight: 'linear-gradient(to right, #000, transparent)',\n },\n },\n distances: {\n baseUnit: '8px',\n inputHeight: '48px',\n containerMaxWidth: '1312px',\n },\n};\n\nexport type Theme = typeof theme;\nexport default theme;\n", "import theme from './theme';\n\nexport const size = (multiplier = 1) => {\n const baseUnit = parseFloat(theme.distances.baseUnit);\n return `${multiplier * baseUnit}px`;\n};\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Page = styled.div``;\n\ntype PageSectionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n accent?: boolean;\n large?: boolean;\n fillSpace?: boolean;\n};\n\nexport const PageSection = styled.section<PageSectionProps>`\n margin-bottom: ${size(4)};\n\n ${({ accent }: { accent?: boolean }) =>\n accent &&\n css`\n padding: ${size(4)} 0;\n background-color: ${(props) => props.theme.color.accent};\n margin-bottom: 0;\n `}\n\n ${({ large }: { large?: boolean }) =>\n large &&\n css`\n margin-bottom: ${size(8)};\n `}\n\n ${({ accent, large }) =>\n accent &&\n large &&\n css`\n padding: ${size(8)} 0;\n margin-bottom: 0;\n `}\n\n ${({ fillSpace }: { fillSpace?: boolean }) =>\n fillSpace &&\n css`\n flex: 1 1 auto;\n `}\n`;\n", "import React, { useCallback } from 'react';\n\nimport {\n Wrapper,\n Header,\n HeaderCount,\n HeaderSort,\n Body,\n Footer,\n FooterProgress,\n FooterAction,\n ResultCount,\n} from './wrapper';\nimport ProgressBar from '../ProgressBar';\nimport { ButtonSecondary, ButtonContent } from '../Button';\nimport Loader from '../Loader';\nimport { numberSeparator } from '../../utils/formats';\nimport useSearch from '../../State/Search/useSearch';\nimport SortSelect, { OptionProps } from '../SortSelect';\nimport { getTranslatedSortOptionDisplayName } from '../../utils/sortOptions';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst Result = ({ children }: Props) => {\n const { loading, response, documents, queryFilter, onLoadMore, onFilterUpdate } = useSearch();\n\n const onSortOptionChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => onFilterUpdate(e.currentTarget.value),\n []\n );\n\n const numberOfDocuments = documents?.length || 0;\n const numberOfHits = response?.documentList.numberOfHits || 0;\n const useSkeletons = !!queryFilter?.concatResult;\n\n const selectedSortOption = response?.documentList.sortOptions.find((x) => x.selected)?.query;\n const sortOptions = response?.documentList.sortOptions\n .filter((x) => x.displayName !== 'relevance')\n .map(\n (so): OptionProps => ({\n value: so.query,\n displayName: getTranslatedSortOptionDisplayName(so.displayName),\n })\n );\n\n if (loading && !useSkeletons) {\n return <Loader />;\n }\n return (\n <Wrapper>\n <Header>\n <HeaderCount>\n <ResultCount>{`${numberSeparator(numberOfHits)} ${\n numberOfHits === 1 ? 'bil' : 'bilar'\n }`}</ResultCount>\n </HeaderCount>\n {sortOptions && selectedSortOption && (\n <HeaderSort>\n <SortSelect\n value={selectedSortOption}\n options={sortOptions}\n onChange={onSortOptionChange}\n />\n </HeaderSort>\n )}\n </Header>\n <Body>{children}</Body>\n <Footer>\n <FooterProgress>\n <ProgressBar valueCurrent={numberOfDocuments} valueMax={numberOfHits} />\n </FooterProgress>\n {numberOfDocuments !== numberOfHits && (\n <FooterAction>\n <ButtonSecondary\n disabled={loading}\n onClick={onLoadMore}\n title=\"Visa fler\"\n aria-label=\"Visa fler\"\n >\n <ButtonContent>Visa fler</ButtonContent>\n </ButtonSecondary>\n </FooterAction>\n )}\n </Footer>\n </Wrapper>\n );\n};\n\nexport default Result;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\nexport const Header = styled.header`\n display: flex;\n margin-bottom: ${size(4)};\n`;\n\nexport const HeaderCount = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const HeaderSort = styled.div`\n flex-shrink: 0;\n`;\n\nexport const Body = styled.div``;\n\nexport const Footer = styled.footer`\n margin-top: ${size(8)};\n text-align: center;\n`;\n\nexport const FooterProgress = styled.div`\n max-width: 175px;\n margin: 0 auto;\n`;\n\nexport const FooterAction = styled.div`\n margin-top: ${size(3)};\n`;\n\nexport const ResultCount = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { Wrapper, Description, Bar, BarActive } from './wrapper';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n valueCurrent: number;\n valueMax: number;\n}\n\nconst ProgressBar = ({ valueCurrent, valueMax }: Props) => {\n const { t } = useTranslation();\n const barWidth = (valueCurrent / valueMax) * 100;\n\n return (\n <Wrapper>\n <Description>\n {t('other.showingNumberOfResults', { current: valueCurrent, count: valueMax })}\n </Description>\n <Bar>\n <BarActive\n style={{ width: `${barWidth}%` }}\n aria-valuenow={valueCurrent}\n aria-valuemin={0}\n aria-valuemax={valueMax}\n />\n </Bar>\n </Wrapper>\n );\n};\n\nexport default ProgressBar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n text-align: center;\n`;\n\nexport const Description = styled.div`\n margin-bottom: ${size(1.5)};\n font-size: 0.875rem;\n`;\n\nexport const Bar = styled.div`\n position: relative;\n width: 100%;\n height: 2px;\n background-color: ${(props) => props.theme.color.accentDark};\n`;\n\nexport const BarActive = styled.div.attrs(() => ({\n role: 'progressbar',\n}))`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n background-color: ${(props) => props.theme.color.textDark};\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { UtilityTextRight } from '../Utility';\n\nexport const ButtonReset = styled.button.attrs(() => ({\n type: 'button',\n}))`\n display: inline-block;\n vertical-align: middle;\n padding: 0;\n margin: 0;\n background-color: transparent;\n border: 0;\n border-radius: 0;\n font-family: sans-serif;\n font-weight: 400;\n font-size: 1em;\n color: currentColor;\n line-height: 1.2;\n text-align: center;\n text-decoration: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0.1);\n cursor: pointer;\n\n :focus {\n outline: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\ntype ButtonResetProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n fullWidth?: boolean;\n inputHeight?: boolean;\n};\n\nconst ButtonBase = styled(ButtonReset)<ButtonResetProps>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${size(1.75)} ${size(6)};\n border-radius: 3px;\n font-size: 1rem;\n line-height: 1.2;\n text-decoration: none;\n transform-origin: 50% 50%;\n transition: 200ms ease, transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.97);\n }\n\n &[disabled] {\n background-color: ${(props) => props.theme.color.disabledBg};\n border-color: ${(props) => props.theme.color.disabledBg};\n color: ${(props) => props.theme.color.disabledText};\n }\n\n ${({ fullWidth }) =>\n fullWidth &&\n css`\n display: flex;\n width: 100%;\n `}\n\n ${({ inputHeight }) =>\n inputHeight &&\n css`\n height: ${(props) => props.theme.distances.inputHeight};\n `}\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: ${size(1.75)} ${size(2.5)};\n font-size: 0.875rem;\n }\n`;\n\nexport const ButtonPrimary = styled(ButtonBase).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg wayke__font--bold',\n}))``;\n\nexport const ButtonSecondary = styled(ButtonBase).attrs(() => ({\n className: 'wayke__theme wayke__color--secondary-bg wayke__font--bold',\n}))`\n background-color: ${(props) => props.theme.color.accentDark};\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const ButtonContent = styled.div`\n position: relative;\n z-index: 1;\n\n & + & {\n margin-left: ${size(0.5)};\n }\n`;\n\nexport const ButtonClear = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n position: relative;\n font-size: 0.875rem;\n padding: ${size(1.5)};\n margin: ${size(-1.5)};\n text-align: left;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n ${UtilityTextRight} & {\n text-align: right;\n }\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\ntype ButtonInlineProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n inline?: boolean;\n as?: string;\n};\n\nexport const ButtonInline = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))<ButtonInlineProps>`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n text-decoration: underline;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDark};\n }\n\n ${({ inline }) =>\n inline &&\n css`\n display: inline;\n `}\n`;\n\nexport const ButtonInlineBold = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n\n :hover {\n text-decoration: underline;\n }\n`;\n\nexport const ButtonInlineLight = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n text-decoration: none;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDarkLighten};\n }\n`;\n\nexport const ButtonInlinePrimary = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))<ButtonInlineProps>`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n\n :hover {\n text-decoration: underline;\n }\n`;\n", "import styled from 'styled-components';\n\nexport const UtilityTextRight = styled.div`\n text-align: right;\n`;\n\nexport const UtilityFontSizeSmall = styled.span`\n font-size: 0.875rem;\n`;\n\nexport const UtilityTextPrimary = styled.span.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))``;\n\nexport const UtilityTextBold = styled.span.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n", "import * as React from 'react';\n\nimport { Spinner, Wrapper } from './wrapper';\nimport { SrOnly } from '../SrOnly';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n inline?: boolean;\n center?: boolean;\n}\n\nconst Loader = ({ inline, center }: Props) => {\n const { t } = useTranslation();\n return (\n <Wrapper inline={inline} center={center}>\n <Spinner aria-hidden=\"true\" />\n <SrOnly>{t('other.loading')}</SrOnly>\n </Wrapper>\n );\n};\n\nexport default Loader;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { rotate } from '../../layout/keyframes';\n\nexport const Spinner = styled.div`\n display: block;\n margin: 0 auto;\n width: ${size(4)};\n height: ${size(4)};\n border-radius: 50%;\n border: 2px solid currentColor;\n border-top-color: transparent;\n animation: ${rotate} 600ms linear infinite;\n`;\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n inline?: boolean;\n center?: boolean;\n};\n\nexport const Wrapper = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n role: 'status',\n}))<WrapperProps>`\n ${({ inline }) =>\n inline &&\n css`\n display: inline-block;\n vertical-align: middle;\n color: currentColor !important;\n\n ${Spinner} {\n width: 1em;\n height: 1em;\n }\n `}\n\n ${({ center }) =>\n center &&\n css`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n `}\n`;\n", "import { keyframes } from 'styled-components';\n\nexport const noTransform = keyframes`\n to {\n transform: none;\n }\n`;\n\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n`;\n\nexport const rotate = keyframes`\n to {\n transform: rotate(360deg);\n }\n`;\n", "import styled from 'styled-components';\n\n// Adds element only visible to screen readers\nexport const SrOnly = styled.div`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n", "import formatFns from 'date-fns/esm/format';\nimport sv from 'date-fns/esm/locale/sv';\n\n// Filter function to remove any null/undefined values.\nexport const notEmpty = <TValue>(value: TValue | null | undefined): value is TValue =>\n value !== null && value !== undefined;\n\nexport const numberSeparator = (value: number, n = 0, x = 3, s = ' ', c = '.') => {\n if (value === null || value === undefined) {\n return null;\n }\n\n const re = `\\\\d(?=(\\\\d{${x || 3}})+${n > 0 ? '\\\\D' : '$'})`;\n const num = value.toFixed(Math.max(0, ~~n));\n\n return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), `$&${s || ','}`);\n};\n\nimport {\n MANUFACTURER,\n MODEL_SERIES,\n FUEL_TYPE,\n GEARBOX_TYPE,\n ENVIRONMENT_CLASS,\n SEGMENT,\n DRIVING_WHEEL,\n COLOR,\n PRICE,\n BRANCH,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n BUSINESS_LEASING_PRICE,\n} from './constants';\n\nexport const FacetIdToTitle = (f: string) => {\n switch (f) {\n case MANUFACTURER:\n return 'Tillverkare';\n case MODEL_SERIES:\n return 'Modell';\n case FUEL_TYPE:\n return 'Drivmedel';\n case GEARBOX_TYPE:\n return 'V\u00E4xell\u00E5da';\n case SEGMENT:\n return 'Segment';\n case DRIVING_WHEEL:\n return 'Drivhjul';\n case ENVIRONMENT_CLASS:\n return 'Milj\u00F6klass';\n case COLOR:\n return 'F\u00E4rg';\n case PRICE:\n return 'Pris';\n case BRANCH:\n return 'Anl\u00E4ggning';\n case MILEAGE:\n return 'Miltal';\n case MODEL_YEAR:\n return 'Modell\u00E5r';\n case LEASING_PRICE:\n return 'Privatleasing';\n case BUSINESS_LEASING_PRICE:\n return 'F\u00F6retagsleasing';\n default:\n return f;\n }\n};\n\nexport const dateTimeFormat = {\n YearMonth: 1,\n DayMonth: 2,\n\n format: (value: string | Date, format: number) => {\n const date = new Date(value);\n switch (format) {\n case dateTimeFormat.YearMonth:\n return formatFns(date, 'MMMM yyyy', { locale: sv });\n case dateTimeFormat.DayMonth:\n return formatFns(date, 'd MMMM yyyy', { locale: sv });\n default:\n return formatFns(date, 'yyyy-MM-dd HH:mm', { locale: sv });\n }\n },\n};\n", "export const MANUFACTURER = 'manufacturer';\nexport const MODEL_SERIES = 'modelSeries';\nexport const FUEL_TYPE = 'fuelType';\nexport const GEARBOX_TYPE = 'gearboxType';\nexport const BRANCH = 'branch';\nexport const COLOR = 'color';\nexport const ENVIRONMENT_CLASS = 'environmentClass';\nexport const SEGMENT = 'properties.segment';\nexport const DRIVING_WHEEL = 'drivingWheel';\nexport const PRICE = 'price';\nexport const MILEAGE = 'mileage';\nexport const MODEL_YEAR = 'modelYear';\nexport const LEASING_PRICE = 'leasingPrice';\nexport const BUSINESS_LEASING_PRICE = 'businessLeasingPrice';\nexport const ODOMETER_VALUE_AS_KM = 'odometerValueAsKm';\n\nexport const COLOR_WHITE = { displayName: 'Vit', hex: '#ffffff' };\nexport const COLOR_BLACK = { displayName: 'Svart', hex: '#000000' };\nexport const COLOR_GRAY = { displayName: 'Gr\u00E5', hex: '#808080' };\nexport const COLOR_SILVER = { displayName: 'Silver', hex: '#c0c0c0' };\nexport const COLOR_BLUE = { displayName: 'Bl\u00E5', hex: '#0000ff' };\nexport const COLOR_RED = { displayName: 'R\u00F6d', hex: '#ff0000' };\nexport const COLOR_BROWN = { displayName: 'Brun', hex: '#a52a2a' };\nexport const COLOR_GREEN = { displayName: 'Gr\u00F6n', hex: '#008000' };\nexport const COLOR_ORANGE = { displayName: 'Orange', hex: '#ffa500' };\nexport const COLOR_YELLOW = { displayName: 'Gul', hex: '#ffff00' };\nexport const COLOR_PURPLE = { displayName: 'Lila', hex: '#800080' };\nexport const COLOR_BEIGE = { displayName: 'Beige', hex: '#f5f5dc' };\n\n/*\nexport const DEFAULT_PLACEHOLDER_IMAGE =\n 'https://cdn.wayke.se/wui/images/placeholders/placeholder_product_card.jpg';\n*/\n\nexport const DEFAULT_PLACEHOLDER_IMAGE =\n 'data:image/jpeg;base64,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';\n", "import { useContext } from 'react';\nimport { SearchContext } from './SearchContext';\n\nconst useSearch = () => useContext(SearchContext);\n\nexport default useSearch;\n", "import { createContext } from 'react';\nimport { Facet, Document, Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\n\nexport interface SearchContextProps {\n loading: boolean;\n response?: Search;\n error: boolean;\n documents?: Document[];\n initialFacets?: Facet[];\n queryFilter: QueryFilter;\n onFilterUpdate: (nextQuery: string) => void;\n onLoadMore: () => void;\n onInitialize: (initialQueryParams?: URLSearchParams) => void;\n}\n\nexport const SearchContext = createContext<SearchContextProps>({\n loading: false,\n error: false,\n response: undefined,\n documents: undefined,\n initialFacets: undefined,\n queryFilter: { searchParams: new URLSearchParams() },\n onFilterUpdate: (_) => {},\n onLoadMore: () => {},\n onInitialize: (_) => {},\n});\n", "import React from 'react';\n\nimport { Wrapper, Select, Option, Icon } from './wrapper';\nimport { IconChevronDown } from '../Icon';\nimport { DrivingDistance } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\nexport interface OptionProps {\n value: number | string | DrivingDistance;\n displayName?: number | string;\n}\n\ninterface SortSelectProps {\n value: string | number;\n options: OptionProps[];\n unit?: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\nconst SortSelect = ({ value, options, onChange, unit }: SortSelectProps) => {\n const { t } = useTranslation();\n return (\n <Wrapper>\n <Select\n value={value}\n onChange={onChange}\n title={t('search.sortButton.text')}\n aria-label={t('search.sortButton.text')}\n >\n {options.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.displayName || option.value}\n {unit ? ` ${unit}` : ''}\n </Option>\n ))}\n </Select>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Wrapper>\n );\n};\n\nexport default SortSelect;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst iconSize = '0.875rem';\n\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const Select = styled.select.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n position: relative;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n text-indent: 0.01px;\n border: 0;\n padding: 0;\n padding-right: calc(${iconSize} + ${size(1)});\n background-color: transparent;\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n font-size: 16px;\n cursor: pointer;\n z-index: 1;\n\n :focus {\n outline: none;\n text-decoration: underline;\n }\n\n ::-ms-expand {\n display: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\nexport const Option = styled.option`\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const Icon = styled.div`\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n font-size: ${iconSize};\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\ntype SharedIconProps = {\n block?: boolean;\n};\n\ntype IconProps = React.SVGProps<SVGSVGElement> & SharedIconProps;\n\nconst Icon = styled.svg.attrs(() => ({\n xmlns: 'http://www.w3.org/2000/svg',\n}))<IconProps>`\n display: inline-block;\n vertical-align: middle;\n width: 1em;\n height: 1em;\n fill: currentColor;\n\n ${({ block }) =>\n block &&\n css`\n display: block;\n `}\n`;\n\ntype IconInfoProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> &\n SharedIconProps;\n\nexport const IconInfo = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 24 24\" block={block}>\n <path d=\"M12 0C5.371 0 0 5.371 0 12s5.371 12 12 12 12-5.371 12-12S18.629 0 12 0zm0 2c5.5234 0 10 4.4766 10 10s-4.4766 10-10 10S2 17.5234 2 12 6.4766 2 12 2zm0 3.8125c-.1836 0-.336-.004-.5.0313-.164.0351-.3164.125-.4375.2187-.121.0938-.211.2227-.2813.375s-.0937.332-.0937.5625c0 .2266.0234.4063.0938.5625.0703.1563.1601.2813.2812.375.121.0938.2734.1484.4375.1875.164.039.3164.0625.5.0625.1797 0 .371-.0234.5313-.0625.1601-.039.2851-.0938.4062-.1875.121-.0938.211-.2188.2813-.375.0703-.1523.125-.336.125-.5625 0-.2305-.0547-.4102-.125-.5625-.0704-.1523-.1602-.2813-.2813-.375-.121-.0938-.246-.1836-.4063-.2188-.1601-.0351-.3515-.0312-.5312-.0312zm-1.2188 3.3438v8.9687h2.4375V9.1562z\" />\n </Icon>\n);\n\nexport const IconCancel = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.7 14.3c.4.4.4 1 0 1.4-.2.2-.5.3-.7.3s-.5-.1-.7-.3L8 9.4l-6.3 6.3c-.2.2-.4.3-.7.3s-.5-.1-.7-.3c-.4-.4-.4-1 0-1.4L6.6 8 .3 1.7C-.1 1.3-.1.7.3.3c.4-.4 1-.4 1.4 0L8 6.6 14.3.3c.4-.4 1-.4 1.4 0 .4.4.4 1 0 1.4L9.4 8l6.3 6.3z\" />\n </Icon>\n);\n\nexport const IconChevronDown = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M17.7 5L9 13.7.3 5l.7-.7 8 8 8-8 .7.7z\" />\n </Icon>\n);\n\nexport const IconChevronLeft = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M13 17.7L4.3 9 13 .3l.7.7-8 8 8 8-.7.7z\" />\n </Icon>\n);\n\nexport const IconChevronRight = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M5 .3L13.7 9 5 17.7l-.7-.7 8-8-8-8L5 .3z\" />\n </Icon>\n);\n\nexport const IconCheck = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.6 4.3l-9.3 9.4c-.5.5-1.4.5-1.9 0l-4-4c-.5-.5-.5-1.4 0-1.9s1.3-.5 1.9 0l3.1 3.1 8.4-8.5c.5-.5 1.4-.5 1.9 0s.4 1.3-.1 1.9z\" />\n </Icon>\n);\n\nexport const IconRadio = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M13 8c0 2.8-2.2 5-5 5s-5-2.2-5-5 2.2-5 5-5 5 2.2 5 5zm3 0c0 4.4-3.6 8-8 8s-8-3.6-8-8 3.6-8 8-8 8 3.6 8 8zm-1 0c0-3.9-3.1-7-7-7S1 4.1 1 8s3.1 7 7 7 7-3.1 7-7z\" />\n </Icon>\n);\n\nexport const IconSearch = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.5 15.3L11 10.8c1.2-1.1 2-2.7 2-4.5C13 2.9 10.2.1 6.8.1S.5 2.8.5 6.2s2.8 6.2 6.2 6.2c1.3 0 2.5-.4 3.5-1.1l4.6 4.6.7-.6zM1.4 6.2C1.4 3.3 3.8 1 6.7 1S12 3.3 12 6.2c0 1.5-.7 2.9-1.7 3.9l-.7.5c-.8.5-1.8.8-2.8.8-3 .1-5.4-2.3-5.4-5.2z\" />\n </Icon>\n);\n\nexport const IconExclamationCircle = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 32 32\" block={block}>\n <path d=\"M14.482 21.893c0-0.857 0.694-1.551 1.551-1.551s1.551 0.694 1.551 1.551c0 0.857-0.694 1.551-1.551 1.551s-1.551-0.694-1.551-1.551zM16.033 2.838c-7.271 0-13.187 5.916-13.187 13.187s5.916 13.187 13.187 13.187 13.187-5.916 13.187-13.187c0-7.271-5.916-13.187-13.187-13.187zM16.033 27.203c-6.163 0-11.178-5.015-11.178-11.178s5.015-11.178 11.178-11.178c6.164 0 11.178 5.015 11.178 11.178s-5.014 11.178-11.178 11.178zM16.033 8.308c-0.555 0-1.004 0.45-1.004 1.004v8.227c0 0.555 0.45 1.004 1.004 1.004s1.004-0.45 1.004-1.004v-8.227c0-0.555-0.45-1.004-1.004-1.004z\" />\n </Icon>\n);\n\nexport const IconExclamationTriangle = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 32 32\" block={block}>\n <path d=\"M15.951 19.663c-0.457 0-0.828-0.37-0.828-0.828v-4.357c0-0.457 0.37-0.828 0.828-0.828s0.828 0.37 0.828 0.828v4.357c0 0.457-0.371 0.828-0.828 0.828zM15.952 22.906c-0.305 0-0.606-0.126-0.821-0.341s-0.338-0.514-0.338-0.818 0.122-0.606 0.338-0.821c0.431-0.43 1.209-0.43 1.639 0 0.215 0.215 0.341 0.516 0.341 0.821s-0.126 0.603-0.341 0.818c-0.215 0.215-0.513 0.341-0.818 0.341zM27.049 27.070h-22.196c-0.352 0-0.677-0.186-0.855-0.489s-0.184-0.677-0.014-0.985l11.098-20.105c0.175-0.317 0.508-0.513 0.87-0.513s0.695 0.197 0.87 0.513l11.098 20.105c0.17 0.308 0.165 0.683-0.014 0.985s-0.504 0.489-0.856 0.489zM6.536 25.083h18.83l-9.415-17.056-9.415 17.056z\" />\n </Icon>\n);\n\nexport const IconImage = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path\n d=\"M14.4 1.6H1.6C.7 1.6 0 2.3 0 3.2v9.6c0 .9.7 1.6 1.6 1.6h12.8c.9 0 1.6-.7 1.6-1.6V3.2c0-.9-.7-1.6-1.6-1.6zm0 11.2H1.6V3.2h12.8v9.6zM3.2 6c0-.7.5-1.2 1.2-1.2s1.2.5 1.2 1.2-.5 1.2-1.2 1.2S3.2 6.7 3.2 6zm.2 4.5l6.2-4.4c.4-.3.9-.2 1.1.2v.1l2.4 4.2c.1.2 0 .4-.1.5-.1 0-.1.1-.2.1H3.7c-.2 0-.4-.2-.4-.4 0-.1 0-.3.1-.3z\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </Icon>\n);\n", "import i18next from 'i18next';\n\nconst SortOptionDisplayName = {\n PublishedAsc: 'published-asc',\n PublishedDesc: 'published-desc',\n PriceAsc: 'price-asc',\n Pricedesc: 'price-desc',\n ModelAsc: 'model-asc',\n Modeldesc: 'model-desc',\n MileageAsc: 'mileage-asc',\n Mileagedesc: 'mileage-desc',\n};\n\ntype SortOptionDisplayName =\n | 'relevance'\n | 'published-asc'\n | 'published-desc'\n | 'price-asc'\n | 'price-desc'\n | 'model-asc'\n | 'model-desc'\n | 'mileage-asc'\n | 'mileage-desc';\n\nexport const getTranslatedSortOptionDisplayName = (str: string | SortOptionDisplayName): string => {\n switch (str) {\n case SortOptionDisplayName.PublishedAsc:\n return i18next.t('search.sortOptions.publishedAsc');\n case SortOptionDisplayName.PublishedDesc:\n return i18next.t('search.sortOptions.publishedDesc');\n case SortOptionDisplayName.PriceAsc:\n return i18next.t('search.sortOptions.priceAsc');\n case SortOptionDisplayName.Pricedesc:\n return i18next.t('search.sortOptions.priceDesc');\n case SortOptionDisplayName.ModelAsc:\n return i18next.t('search.sortOptions.modelAsc');\n case SortOptionDisplayName.Modeldesc:\n return i18next.t('search.sortOptions.modelDesc');\n case SortOptionDisplayName.MileageAsc:\n return i18next.t('search.sortOptions.mileageAsc');\n case SortOptionDisplayName.Mileagedesc:\n return i18next.t('search.sortOptions.mileageDesc');\n default:\n return str;\n }\n};\n", "import React, { useState, useCallback } from 'react';\n\nimport { List, Item, Action, Label, Indicator, IndicatorValue } from './wrapper';\nimport { Facet } from '../../@types/search';\nimport {\n PRICE,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n BUSINESS_LEASING_PRICE,\n} from '../../utils/constants';\nimport useSearch from '../../State/Search/useSearch';\nimport { SearchFilterTypes, SearchFilterNameTypes } from '../../@types/filter';\nimport FilterPanel from '../FilterPanel';\nimport { useTranslation } from 'react-i18next';\nimport { MarketCode } from '../../@types/market';\n\nconst isSelected = (f: Facet, searchParams: URLSearchParams) => {\n switch (f.id) {\n case PRICE:\n case MILEAGE:\n case LEASING_PRICE:\n case BUSINESS_LEASING_PRICE:\n case MODEL_YEAR:\n return searchParams.has(`${f.id}.min`) || searchParams.has(`${f.id}.max`) ? 1 : 0;\n default:\n return f.filters.filter((filter) => filter.selected).length;\n }\n};\n\nconst filterOdometer = (\n id: string,\n marketCode: MarketCode = 'SE',\n filterList?: SearchFilterNameTypes[]\n) => {\n if (filterList) return true;\n\n if (id === 'mileage') {\n return marketCode === 'SE' ? true : false;\n }\n\n if (id === 'odometerValueAsKm') {\n return marketCode === 'NO' ? true : false;\n }\n return true;\n};\n\ninterface FilterProps {\n marketCode?: MarketCode;\n filterList?: SearchFilterTypes[];\n}\n\nconst Filter = ({ marketCode, filterList }: FilterProps) => {\n const { t } = useTranslation();\n const { queryFilter, initialFacets, loading, response, onFilterUpdate } = useSearch();\n\n const facets = response?.facets;\n\n const [facet, setFacet] = useState<Facet>();\n const onSelectFacet = useCallback((nextFacet: Facet) => setFacet(nextFacet), []);\n const onClose = useCallback(() => setFacet(undefined), []);\n\n if (!facets) {\n return null;\n }\n const filterNames = filterList ? filterList.map((x) => x.filterName) : undefined;\n\n const filteredFacets = facets\n ?.filter((x) => x.id !== 'segment' && filterOdometer(x.id, marketCode, filterNames))\n ?.filter((f) => (filterNames ? filterNames.includes(f.id as SearchFilterNameTypes) : true))\n .sort((a, b) =>\n filterNames\n ? filterNames.indexOf(a.id as SearchFilterNameTypes) -\n filterNames.indexOf(b.id as SearchFilterNameTypes)\n : 0\n )\n .map((x) => {\n const match = filterList?.find((y) => y.filterName === x.id);\n if (match?.displayName) {\n return {\n ...x,\n displayName: match.displayName,\n };\n }\n return {\n ...x,\n displayName: t(`filter.${x.id}`),\n };\n });\n\n return (\n <>\n {initialFacets && facet && (\n <FilterPanel\n filterList={filterList}\n facet={facet}\n loading={loading}\n filteredFacets={filteredFacets}\n numberOfHits={response?.documentList.numberOfHits || 0}\n onFilterUpdate={onFilterUpdate}\n onClose={onClose}\n />\n )}\n <List>\n {filteredFacets\n .filter((x) => x.filters.length)\n .map((f) => {\n const selected = isSelected(f, queryFilter.searchParams);\n return (\n <Item key={f.id}>\n <Action\n onClick={() => onSelectFacet(f)}\n title={f.displayName}\n aria-label={f.displayName}\n className={\n selected > 0\n ? 'wayke__theme wayke__color--primary-bg wayke__font--bold'\n : 'wayke__theme wayke__font--regular'\n }\n >\n <Label>{f.displayName}</Label>\n {selected > 0 && (\n <Indicator>\n <IndicatorValue>{selected}</IndicatorValue>\n </Indicator>\n )}\n </Action>\n </Item>\n );\n })}\n </List>\n </>\n );\n};\n\nexport default Filter;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const List = styled.ul`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-0.5)};\n`;\n\nexport const Item = styled.li`\n padding: ${size(0.5)};\n`;\n\nexport const Action = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n padding: ${size(1.5)} ${size(3)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n font-size: 0.875rem;\n line-height: 1;\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Label = styled.div`\n z-index: 1;\n`;\n\nexport const Indicator = styled.div`\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${size(0.375)};\n margin-left: ${size(0.5)};\n background-color: currentColor;\n min-width: 1em;\n height: 1em;\n border-radius: 999px;\n z-index: 1;\n`;\n\nexport const IndicatorValue = styled.div`\n font-family: sans-serif; // Default font to guarantee visibility\n font-size: 0.75rem;\n font-weight: bold;\n color: white;\n mix-blend-mode: difference;\n`;\n", "import React, { useCallback } from 'react';\n\nimport { Facet } from '../../@types/search';\nimport Panel from '../Panel';\nimport { FooterAction, FooterActionItem } from '../Panel/wrapper';\nimport { ButtonSecondary, ButtonContent, ButtonPrimary } from '../Button';\nimport Accordion, { AccordionItem } from '../Accordion';\nimport { Repeat } from '../Repeat';\nimport FacetSelector from './faceSelector';\nimport { SearchFilterTypes } from '../../@types/filter';\nimport { useTranslation } from 'react-i18next';\n\nexport interface FilterProps {\n label: string;\n activeFilters?: number;\n}\n\nexport interface Props {\n facet?: Facet;\n loading: boolean;\n filteredFacets: Facet[];\n filterList?: SearchFilterTypes[];\n numberOfHits: number;\n onClose: () => void;\n onFilterUpdate: (nextQuery: string) => void;\n}\n\nconst FilterPanel = ({\n facet,\n filteredFacets,\n numberOfHits,\n loading,\n onFilterUpdate,\n onClose,\n}: Props) => {\n const { t } = useTranslation();\n const onClearFilters = useCallback(() => onFilterUpdate(''), []);\n\n return (\n <Panel\n title={t('search.filter')}\n onClose={onClose}\n footer={\n <>\n <FooterAction>\n <FooterActionItem>\n <ButtonSecondary fullWidth disabled={loading} onClick={onClearFilters}>\n <ButtonContent>{t('search.clearAllFilters.text')}</ButtonContent>\n </ButtonSecondary>\n </FooterActionItem>\n <FooterActionItem>\n <ButtonPrimary fullWidth disabled={loading} onClick={onClose}>\n <ButtonContent>\n {t('search.showNumberOfCustomUnit', {\n count: numberOfHits || 0,\n unit: t(`search.result.${(numberOfHits || 0) === 1 ? 'singular' : 'plural'}`),\n })}\n </ButtonContent>\n </ButtonPrimary>\n </FooterActionItem>\n </FooterAction>\n </>\n }\n >\n <Accordion>\n {filteredFacets\n .filter((x) => x.filters.length)\n .map((f) => (\n <AccordionItem\n key={f.displayName}\n heading={f.displayName}\n isActive={f.id === facet?.id}\n >\n <Repeat>\n <FacetSelector facet={f} />\n </Repeat>\n </AccordionItem>\n ))}\n </Accordion>\n </Panel>\n );\n};\n\nexport default FilterPanel;\n", "import * as React from 'react';\n\nimport {\n PanelWrapper,\n Close,\n CloseBtn,\n Header,\n Heading,\n Body,\n Footer,\n UiBlock,\n Wrapper,\n} from './wrapper';\nimport { Portal, PortalNamespace } from '../Portal';\nimport { H1 } from '../Heading';\nimport { IconCancel } from '../Icon';\nimport { useTranslation } from 'react-i18next';\n\ninterface IPanelPortal {\n id?: string | null;\n title: string | null;\n onClose: () => void;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nconst Panel = ({ id, title, footer, onClose, children }: IPanelPortal) => {\n const { t } = useTranslation();\n return (\n <Portal id={id || PortalNamespace.DefaultPortal}>\n <Wrapper>\n <UiBlock title={t('other.closePanel') || ''} onClick={onClose} />\n <PanelWrapper>\n <Header>\n <Heading>\n <H1 noMargin>{title}</H1>\n </Heading>\n <Close>\n <CloseBtn title={t('other.closePanel') || ''} onClick={onClose}>\n <IconCancel block />\n </CloseBtn>\n </Close>\n </Header>\n <Body>{children}</Body>\n {footer && <Footer>{footer}</Footer>}\n </PanelWrapper>\n </Wrapper>\n </Portal>\n );\n};\n\nexport default Panel;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { fadeIn, noTransform } from '../../layout/keyframes';\nimport { ButtonReset } from '../Button';\nimport { H1 } from '../Heading';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'dialog',\n}))`\n position: relative;\n z-index: 80;\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n 'aria-hidden': 'true',\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.35);\n animation: ${fadeIn} 200ms ease;\n`;\n\nexport const PanelWrapper = styled.article.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n display: flex;\n flex-direction: column;\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n width: 100%;\n background-color: ${(props) => props.theme.color.accent};\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);\n z-index: 1;\n animation: ${noTransform} 200ms ease forwards;\n\n ${(props) => props.theme.breakpoint.Sm} {\n max-width: 450px;\n transform: translateX(100%);\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n top: auto;\n max-height: 100%;\n transform: translateY(100%);\n }\n`;\n\nexport const Header = styled.header`\n position: relative;\n display: flex;\n flex-shrink: 0;\n align-items: center;\n min-height: 45px;\n padding: ${size(3)};\n padding-bottom: 0;\n\n :after {\n content: '';\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n height: ${size(3)};\n background-image: linear-gradient(\n ${(props) => props.theme.color.accent},\n ${(props) => props.theme.color.accentTransparent}\n );\n z-index: 1;\n }\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n\n ${H1} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Close = styled.div`\n flex-shrink: 0;\n margin: ${size(-2)};\n padding-left: ${size(3)};\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n position: relative;\n display: block;\n padding: ${size(2)};\n transform-origin: 50% 50%;\n transition: transform 200ms ease;\n z-index: 2;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accent};\n opacity: 0;\n transition: opacity 200ms ease;\n z-index: -1;\n }\n\n :active {\n transform: scale(0.9);\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Body = styled.div`\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: ${size(3)};\n`;\n\nexport const Footer = styled.footer`\n position: relative;\n flex-shrink: 0;\n padding: ${size(3)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n`;\n\nexport const FooterAction = styled.div.attrs(() => ({\n role: 'group',\n}))`\n display: flex;\n align-items: center;\n margin: ${size(-0.5)};\n`;\n\nexport const FooterActionItem = styled.div`\n flex: 1 1 50%;\n padding: ${size(0.5)};\n\n ${ButtonReset} {\n padding: ${size(1.75)} ${size(2)};\n }\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype HeadingBaseProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n noMargin?: boolean;\n};\n\nconst HeadingBase = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))<HeadingBaseProps>`\n margin-top: 0;\n margin-bottom: ${size(2)};\n font-weight: normal;\n line-height: 1.2;\n\n ${({ noMargin }) =>\n noMargin &&\n css`\n margin-bottom: 0;\n `}\n`;\n\nexport const H1 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h1',\n}))`\n font-size: 1.875rem;\n`;\n\nexport const H2 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h2',\n}))`\n font-size: 1.5rem;\n`;\n\nexport const H3 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h3',\n}))`\n font-size: 1.125rem;\n`;\n\nexport const H4 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h4',\n}))`\n font-size: 1rem;\n`;\n\nexport const H5 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h5',\n}))`\n font-size: 0.875rem;\n`;\n\n/*\nexport const H6 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h6',\n}))`\n font-size: 0.67rem;\n`;\n*/\n\nexport const VisualHeading = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1em;\n`;\n", "export const DefaultPortal = 'DEFAULT_PORTAL';\n", "import * as React from 'react';\n\nexport interface IPortalElement {\n id: string;\n}\n\nconst PortalElement = ({ id }: IPortalElement) => <div id={id} />;\n\nexport default PortalElement;\n", "import React from 'react';\nimport ReactDOM from 'react-dom';\n\nexport interface IPortal {\n id: string;\n children: React.ReactNode;\n}\n\nconst Portal = ({ id, children }: IPortal) => {\n const el = React.useRef(document.getElementById(id) || document.createElement('div'));\n if (!el.current) {\n return null;\n }\n\n const { current } = el;\n\n const [dynamic] = React.useState(!current.parentElement);\n\n React.useEffect(() => {\n if (dynamic) {\n current.id = id;\n if (document.body) {\n document.body.appendChild(current);\n }\n }\n return () => {\n if (dynamic && current.parentElement) {\n current.parentElement.removeChild(current);\n }\n };\n }, [id]);\n\n return ReactDOM.createPortal(children, current);\n};\n\nexport default React.memo<IPortal>(Portal);\n", "import React, { useState, useCallback } from 'react';\n\nimport {\n List,\n Item,\n Header,\n Label,\n Heading,\n Indicator,\n IndicatorValue,\n Icon,\n Body,\n} from './wrapper';\nimport { IconChevronDown } from '../Icon';\nimport { useTranslation } from 'react-i18next';\n\nexport interface IAccordionItem {\n heading: string;\n activeCount?: number;\n children: React.ReactNode;\n isActive?: boolean;\n}\n\nexport interface IAccordion {\n children?: React.ReactNode;\n}\n\nexport const AccordionItem = ({ heading, children, activeCount, isActive }: IAccordionItem) => {\n const { t } = useTranslation();\n const [extend, setExtend] = useState(isActive || false);\n const onToggleExtend = useCallback(() => setExtend(!extend), [extend]);\n\n return (\n <Item isOpen={extend}>\n <Header onClick={onToggleExtend} title={t('common.showMore') || ''}>\n <Label>\n <Heading\n className={activeCount && activeCount > 0 ? 'wayke__theme wayke__font--bold' : ''}\n >\n {heading}\n </Heading>\n {activeCount && activeCount > 0 && (\n <Indicator>\n <IndicatorValue>{activeCount}</IndicatorValue>\n </Indicator>\n )}\n </Label>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Header>\n <Body>{children}</Body>\n </Item>\n );\n};\n\nconst Accordion = ({ children }: IAccordion) => <List>{children}</List>;\n\nexport default Accordion;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: ${size(-1)} 0;\n font-size: 1rem;\n`;\n\nexport const Header = styled(ButtonReset)`\n display: flex;\n align-items: center;\n width: 100%;\n padding: ${size(3)} 0;\n text-align: left;\n font: inherit;\n`;\n\nexport const Label = styled.div`\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n`;\n\nexport const Heading = styled.div`\n line-height: 1;\n`;\n\nexport const Indicator = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${size(0.375)};\n margin-left: ${size(0.5)};\n min-width: 1em;\n height: 1em;\n border-radius: 999px;\n z-index: 1;\n`;\n\nexport const IndicatorValue = styled.div`\n font-family: sans-serif; // Default font to guarantee visibility\n font-size: 0.75rem;\n font-weight: bold;\n`;\n\nexport const Icon = styled.div`\n position: relative;\n flex-shrink: 0;\n padding-left: ${size(1)};\n transition: color 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-1)};\n bottom: ${size(-1)};\n left: 0;\n right: ${size(-1)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accent};\n z-index: -1;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n ${Header}:hover & {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Body = styled.div`\n display: none;\n padding-bottom: ${size(3)};\n`;\n\ntype ItemProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLLIElement>, HTMLLIElement> & {\n isOpen?: boolean;\n};\n\nexport const Item = styled.li<ItemProps>`\n & + & {\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n\n ${({ isOpen }) =>\n isOpen &&\n css`\n ${Body} {\n display: block;\n }\n\n ${Icon} {\n svg {\n transform: rotate(180deg);\n }\n }\n `}\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Repeat = styled.div`\n & + & {\n margin-top: ${size(3)};\n }\n`;\n\nexport const RepeatTiny = styled.div`\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const RepeatSmall = styled.div`\n & + & {\n margin-top: ${size(2)};\n }\n`;\n", "import React from 'react';\n\nimport { Facet } from '../../@types/search';\nimport CheckListFacet from './checkListFacet';\nimport ColorSelectFacet from './colorFacet';\nimport RangeFacet from './rangeFacet';\nimport {\n MANUFACTURER,\n MODEL_SERIES,\n FUEL_TYPE,\n GEARBOX_TYPE,\n ENVIRONMENT_CLASS,\n SEGMENT,\n DRIVING_WHEEL,\n COLOR,\n PRICE,\n BRANCH,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n BUSINESS_LEASING_PRICE,\n ODOMETER_VALUE_AS_KM,\n} from '../../utils/constants';\nimport { useTranslation } from 'react-i18next';\n\ninterface FacetSelectorProps {\n facet: Facet;\n}\n\nconst FacetSelector = ({ facet }: FacetSelectorProps) => {\n const { t } = useTranslation();\n switch (facet.id) {\n case MANUFACTURER:\n case MODEL_SERIES:\n case FUEL_TYPE:\n case GEARBOX_TYPE:\n case BRANCH:\n case ENVIRONMENT_CLASS:\n case SEGMENT:\n case DRIVING_WHEEL:\n return <CheckListFacet facet={facet} />;\n case COLOR:\n return <ColorSelectFacet facet={facet} />;\n case PRICE:\n return <RangeFacet facet={facet} unit={t('currency.default')} formatValues />;\n case BUSINESS_LEASING_PRICE:\n case LEASING_PRICE:\n return <RangeFacet facet={facet} unit={t('currency.monthly')} formatValues />;\n case ODOMETER_VALUE_AS_KM:\n return <RangeFacet facet={facet} unit={t('odometer.Kilometer')} formatValues />;\n case MILEAGE:\n return <RangeFacet facet={facet} unit={t('odometer.ScandinavianMile')} formatValues />;\n case MODEL_YEAR:\n return <RangeFacet facet={facet} unit=\"\u00E5r\" />;\n default:\n return null;\n }\n};\n\nexport default FacetSelector;\n", "import React, { useState, useEffect, useCallback } from 'react';\nimport Checklist from '../Checklist';\nimport OverflowBox from '../OverflowBox';\nimport { Facet, FacetFilter } from '../../@types/search';\nimport useSearch from '../../State/Search/useSearch';\n\ninterface ChecklistFacetProps {\n facet: Facet;\n}\n\nconst ChecklistFacet = ({ facet }: ChecklistFacetProps) => {\n const { loading, error, onFilterUpdate } = useSearch();\n const [selected, setSelected] = useState<{ [key: string]: boolean }>();\n useEffect(() => {\n setSelected(undefined);\n }, [facet, error]);\n\n const onClick = useCallback(\n (f: FacetFilter) => {\n if (!loading) {\n setSelected({\n ...selected,\n [f.displayName]: !f.selected,\n });\n onFilterUpdate(f.query);\n }\n },\n [loading]\n );\n\n return (\n <OverflowBox>\n <Checklist\n items={facet.filters\n .sort((a, b) => a.displayName.localeCompare(b.displayName))\n .map((f) => ({\n label: f.displayName,\n onClick: () => onClick(f),\n active: selected?.[f.displayName] !== undefined ? selected[f.displayName] : f.selected,\n }))}\n />\n </OverflowBox>\n );\n};\n\nexport default ChecklistFacet;\n", "import React from 'react';\n\nimport { List, Item, Action, ActionIcon, ActionLabel } from './wrapper';\nimport { IconCheck, IconRadio } from '../Icon';\n\nexport interface IChecklistItem {\n label: string;\n onClick: () => void;\n active?: boolean;\n radio?: boolean;\n}\n\nexport interface IChecklist {\n items: IChecklistItem[];\n radio?: boolean;\n}\n\nconst ChecklistItem = ({ label, onClick, active, radio }: IChecklistItem) => (\n <Item>\n <Action onClick={onClick}>\n {active && <ActionIcon>{radio ? <IconRadio block /> : <IconCheck block />}</ActionIcon>}\n <ActionLabel\n className={active ? 'wayke__theme wayke__font--bold wayke__color--primary-text' : ''}\n >\n {label}\n </ActionLabel>\n </Action>\n </Item>\n);\n\nconst Checklist = ({ items, radio }: IChecklist) => {\n if (!items?.length) {\n return null;\n }\n\n return (\n <List>\n {items.map((item) => (\n <ChecklistItem\n key={item.label}\n label={item.label}\n onClick={item.onClick}\n active={item.active}\n radio={radio}\n />\n ))}\n </List>\n );\n};\n\nexport default Checklist;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const List = styled.ul.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n list-style: none;\n padding: 0;\n margin: ${size(-1)} 0;\n font-size: 0.875rem;\n overflow: hidden;\n`;\n\nexport const Item = styled.li`\n ${List} {\n padding-left: ${size(5)};\n margin: 0;\n }\n`;\n\nexport const Action = styled(ButtonReset)`\n position: relative;\n display: block;\n width: 100%;\n text-align: left;\n font: inherit;\n padding: ${size(1)} 0;\n\n :before {\n content: '';\n position: absolute;\n left: 0;\n width: ${size(2)};\n height: ${size(2)};\n border-radius: 3px;\n background-color: ${(props) => props.theme.color.accentDark};\n margin-top: 2px; // Magic number\n }\n`;\n\nexport const ActionIcon = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: absolute;\n top: ${size(1)};\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(2)};\n height: ${size(2)};\n margin-top: 2px; // Magic number\n font-size: ${size(1.5)};\n`;\n\nexport const ActionLabel = styled.div`\n padding-left: ${size(3)};\n transition: transform 150ms ease;\n\n ${Action}:hover & {\n transform: translateX(${size(0.5)});\n }\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface IProps {\n children?: React.ReactNode;\n}\n\nconst OverflowBox = ({ children }: IProps) => <Wrapper>{children}</Wrapper>;\n\nexport default OverflowBox;\n", "import styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n max-height: 400px;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n", "import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Facet, FacetFilter } from '../../@types/search';\nimport ColorSelect from '../ColorSelect';\nimport useSearch from '../../State/Search/useSearch';\nimport { getHexColorFromDisplayName } from '../../utils/converters';\n\ninterface ColorSelectFacetProps {\n facet: Facet;\n}\n\nconst ColorSelectFacet = ({ facet }: ColorSelectFacetProps) => {\n const { loading, error, onFilterUpdate } = useSearch();\n const [selected, setSelected] = useState<{ [key: string]: boolean }>();\n\n useEffect(() => {\n setSelected(undefined);\n }, [facet, error]);\n\n const onClick = useCallback(\n (f: FacetFilter) => {\n if (!loading) {\n setSelected({\n ...selected,\n [f.displayName]: !f.selected,\n });\n onFilterUpdate(f.query);\n }\n },\n [loading]\n );\n\n return (\n <ColorSelect\n items={facet.filters\n .sort((a, b) => a.displayName.localeCompare(b.displayName))\n .map((f) => ({\n label: f.displayName,\n onClick: () => onClick(f),\n active: selected?.[f.displayName] !== undefined ? selected[f.displayName] : f.selected,\n hex: [getHexColorFromDisplayName(f.displayName)],\n }))}\n />\n );\n};\n\nexport default ColorSelectFacet;\n", "import React from 'react';\n\nimport { List, Item, Action, Color, Label } from './wrapper';\n\nexport interface ItemProps {\n label: string;\n hex: string[];\n onClick?: () => void;\n active?: boolean;\n disabled?: boolean;\n boxShadow?: boolean;\n}\n\nexport interface Props {\n items?: ItemProps[];\n}\n\nconst ColorSelectItem = ({ label, hex, onClick, active, disabled, boxShadow }: ItemProps) => {\n return (\n <Item>\n <Action onClick={onClick} disabled={disabled} title={label} aria-label={label}>\n <Color\n style={{\n backgroundColor: hex.length === 1 ? hex[0] : '',\n backgroundImage: hex.length > 1 ? `linear-gradient(${hex.join()})` : '',\n }}\n active={active}\n boxShadow={boxShadow}\n className={active ? 'wayke__theme wayke__color--primary-text' : ''}\n />\n <Label\n className={active ? 'wayke__theme wayke__color--primary-text wayke__font--bold' : ''}\n >\n {label}\n </Label>\n </Action>\n </Item>\n );\n};\n\nconst ColorSelect = ({ items }: Props) => {\n if (!items) {\n return null;\n }\n\n return (\n <List>\n {items.map((item) => (\n <ColorSelectItem\n key={item.label}\n label={item.label}\n hex={item.hex}\n onClick={item.onClick}\n active={item.active}\n disabled={item.disabled}\n boxShadow={item.boxShadow}\n />\n ))}\n </List>\n );\n};\n\nexport default ColorSelect;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-1.5)};\n`;\n\nexport const Item = styled.li`\n flex: 1 1 auto;\n width: 33.333%;\n max-width: 33.333%;\n padding: ${size(1.5)};\n`;\n\nexport const Action = styled(ButtonReset)`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n font: inherit;\n\n &[disabled] {\n opacity: 0.4;\n cursor: default;\n }\n`;\n\ntype ColorProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n active?: boolean;\n boxShadow?: boolean;\n};\n\nexport const Color = styled.div<ColorProps>`\n position: relative;\n width: ${size(3.75)};\n height: ${size(3.75)};\n border-radius: 50%;\n color: ${(props) => props.theme.color.border};\n\n :before {\n content: '';\n position: absolute;\n top: -5px;\n bottom: -5px;\n left: -5px;\n right: -5px;\n border: 2px solid;\n border-radius: 50%;\n display: none;\n }\n\n ${Action}:not([disabled]):hover & {\n :before {\n display: block;\n }\n }\n\n ${({ active }) =>\n active &&\n css`\n :before {\n display: block;\n }\n `}\n\n ${({ boxShadow }) =>\n boxShadow &&\n css`\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);\n `}\n`;\n\nexport const Label = styled.div`\n margin-top: ${size(1.25)};\n font-size: 0.875rem;\n`;\n", "import {\n COLOR_WHITE,\n COLOR_BLACK,\n COLOR_GRAY,\n COLOR_SILVER,\n COLOR_BLUE,\n COLOR_RED,\n COLOR_BROWN,\n COLOR_GREEN,\n COLOR_ORANGE,\n COLOR_YELLOW,\n COLOR_PURPLE,\n COLOR_BEIGE,\n} from './constants';\n\nexport const getHexColorFromDisplayName = (displayName: string) => {\n switch (displayName) {\n case COLOR_WHITE.displayName:\n return COLOR_WHITE.hex;\n case COLOR_BLACK.displayName:\n return COLOR_BLACK.hex;\n case COLOR_GRAY.displayName:\n return COLOR_GRAY.hex;\n case COLOR_SILVER.displayName:\n return COLOR_SILVER.hex;\n case COLOR_BLUE.displayName:\n return COLOR_BLUE.hex;\n case COLOR_RED.displayName:\n return COLOR_RED.hex;\n case COLOR_BROWN.displayName:\n return COLOR_BROWN.hex;\n case COLOR_GREEN.displayName:\n return COLOR_GREEN.hex;\n case COLOR_ORANGE.displayName:\n return COLOR_ORANGE.hex;\n case COLOR_YELLOW.displayName:\n return COLOR_YELLOW.hex;\n case COLOR_PURPLE.displayName:\n return COLOR_PURPLE.hex;\n case COLOR_BEIGE.displayName:\n return COLOR_BEIGE.hex;\n default:\n return '#fff';\n }\n};\n", "import React, { useCallback, useState, useEffect } from 'react';\nimport { Facet } from '../../@types/search';\nimport RangeSlider from '../RangeSlider';\nimport useSearch from '../../State/Search/useSearch';\n\ninterface RangeFacetProps {\n facet: Facet;\n unit?: string;\n formatValues?: boolean;\n}\n\nconst getInitialValues = (domain: number[], facet: Facet, searchParams: URLSearchParams) => {\n const facetMin = domain[0]; //parseInt(facet.filters[0].displayName, 10);\n const _queryMin = searchParams?.get(`${facet.id}.min`) || null;\n const facetMax = domain[domain.length - 1]; //parseInt(facet.filters[facet.filters.length - 1].displayName, 10);\n const _queryMax = searchParams?.get(`${facet.id}.max`) || null;\n\n const queryMin = parseInt(_queryMin === null ? `${facetMin}` : _queryMin, 10);\n const min = facetMin > queryMin ? facetMin : queryMin;\n const queryMax = parseInt(_queryMax === null ? `${facetMax}` : _queryMax, 10);\n const max = queryMax > facetMax ? facetMin : queryMax;\n\n return min || max ? [min ? min : domain[0], max ? max : domain[1]] : domain;\n};\n\nconst averageDelta = ([x, ...xs]: number[]) => {\n if (x === undefined) return NaN;\n\n return xs.reduce(([acc, last], x) => [acc + (x - last), x], [0, x])[0] / xs.length;\n};\n\nconst getSteps = (initialAllValues: number[]) => {\n const delta = averageDelta(initialAllValues);\n const max = Math.floor(initialAllValues[initialAllValues.length - 1] * 1000) / 1000;\n if (delta > 1000) return new Array(max / 1000 + 1).fill('').map((x, i) => i * 1000);\n if (delta <= 1000 && delta >= 500)\n return new Array(max / 500 + 1).fill('').map((x, i) => i * 500);\n return initialAllValues;\n};\n\nconst RangeFacet = ({ facet, unit, formatValues }: RangeFacetProps) => {\n const { loading, queryFilter, initialFacets, onFilterUpdate } = useSearch();\n const initialFacet = initialFacets?.find((x) => x.id === facet.id);\n const maxPrefix =\n initialFacet?.filters[initialFacet?.filters.length - 1]?.displayName?.includes('+');\n const [state, setValues] = useState<\n { id: string | undefined; steps: number[]; domain: number[]; values: number[] } | undefined\n >(undefined);\n\n useEffect(() => {\n const _initialAllValues = initialFacet?.filters.map((f) =>\n parseInt(f.displayName.replace(/[\\<\\>+-]+/g, ''), 10)\n ) || [1, 2];\n\n const _steps = getSteps(_initialAllValues);\n const domain = [_steps[0], _steps[_steps.length - 1]];\n\n setValues({\n id: initialFacet?.id,\n steps: _steps,\n domain: [_steps[0], _steps[_steps.length - 1]],\n values: initialFacet?.filters.length\n ? getInitialValues(domain, initialFacet, queryFilter.searchParams)\n : [0, 0],\n });\n }, [initialFacet?.id]);\n\n useEffect(() => {\n if (state?.id) {\n const init = initialFacet?.filters.length\n ? getInitialValues(state.domain, initialFacet, queryFilter.searchParams)\n : [0, 0];\n const minStr = queryFilter.searchParams?.get(`${facet.id}.min`);\n const maxStr = queryFilter.searchParams?.get(`${facet.id}.max`);\n\n const min = minStr ? parseFloat(minStr) : init[0];\n const max = maxStr ? parseFloat(maxStr) : init[1];\n if (min !== state.values[0] || max !== state.values[1]) {\n onChange([min, max]);\n }\n }\n }, [queryFilter.searchParams?.toString()]);\n\n const onChange = useCallback(\n (nextValues: readonly number[]) => {\n if (state?.id) {\n if (state.values[0] !== nextValues[0] || state.values[1] !== nextValues[1]) {\n setValues({ ...state, values: nextValues.slice() });\n const query = new URLSearchParams(queryFilter.searchParams);\n query.set('hits', '30');\n query.delete(`${facet.id}.min`);\n query.delete(`${facet.id}.max`);\n\n if (nextValues[0] !== state.domain[0]) {\n query.set(`${facet.id}.min`, `${nextValues[0]}`);\n }\n\n if (nextValues[1] !== state.domain[1]) {\n query.set(`${facet.id}.max`, `${nextValues[1]}`);\n }\n\n query.sort();\n onFilterUpdate(query.toString());\n }\n }\n },\n [queryFilter.searchParams, state]\n );\n\n return (\n <>\n {state && (\n <RangeSlider\n loading={loading}\n domain={state.domain}\n values={state.values}\n maxPrefix={maxPrefix ? '+' : undefined}\n steps={state.steps}\n unit={unit}\n onChange={onChange}\n formatValues={formatValues}\n />\n )}\n </>\n );\n};\n\nexport default RangeFacet;\n", "import React, { useState, useCallback, useEffect } from 'react';\nimport { Slider, Rail, Handles, Tracks } from 'react-compound-slider';\n\nimport {\n Bar,\n RangeSpan,\n RangeSpanItem,\n Slider as OwnSlider,\n Track as OwnTrack,\n Handle as OwnHandle,\n} from './wrapper';\nimport { Handle } from './handle';\nimport { Track } from './track';\nimport { numberSeparator } from '../../utils/formats';\n\nconst getSteps = (steps: number[]) => {\n let current = Number.MAX_SAFE_INTEGER;\n steps.forEach((step, index) => {\n if (index !== 0) {\n const c = step - steps[index - 1];\n if (c < current) {\n current = c;\n }\n }\n });\n return current;\n};\n\ninterface RangeSliderProps {\n loading: boolean;\n domain: number[];\n values: number[];\n steps: number[];\n unit?: string;\n formatValues?: boolean;\n maxPrefix?: string;\n onChange: (values: readonly number[]) => void;\n}\n\nconst RangeSlider = ({\n loading,\n values,\n domain,\n steps,\n unit,\n formatValues,\n maxPrefix,\n onChange,\n}: RangeSliderProps) => {\n const [current, setCurrent] = useState<number[]>(values);\n const onUpdate = useCallback(\n (nextValues: readonly number[]) => {\n if (!isNaN(nextValues[0]) && !isNaN(nextValues[1])) {\n setCurrent(nextValues.slice());\n }\n },\n [values]\n );\n\n const step = getSteps(steps);\n\n const currentMin = formatValues ? numberSeparator(current[0]) : current[0];\n const currentMax = formatValues ? numberSeparator(current[1]) : current[1];\n const equal = domain[0] === domain[1];\n const _maxPrefix = maxPrefix && domain[1] === current[1] ? maxPrefix : undefined;\n\n useEffect(() => {\n if (values[0] !== current[0] || values[1] !== current[1]) {\n setCurrent(values);\n }\n }, [values]);\n\n return (\n <>\n {equal ? (\n <OwnSlider>\n <Bar>\n <OwnTrack style={{ left: '0', width: '100%' }} />\n <OwnHandle role=\"slider\" aria-disabled style={{ left: '0' }} />\n <OwnHandle role=\"slider\" aria-disabled style={{ left: '100%' }} />\n </Bar>\n </OwnSlider>\n ) : (\n <OwnSlider>\n <Slider\n disabled={loading}\n mode={1}\n step={step}\n domain={domain}\n onChange={onChange}\n onUpdate={onUpdate}\n values={values}\n rootStyle={{ position: 'relative' }}\n >\n <Rail>{({ getRailProps }) => <Bar {...getRailProps()} />}</Rail>\n <Handles>\n {({ handles, getHandleProps }) => (\n <div className=\"slider-handles\">\n {handles.map((handle) => (\n <Handle\n key={handle.id}\n handle={handle}\n domain={domain}\n getHandleProps={getHandleProps}\n />\n ))}\n </div>\n )}\n </Handles>\n <Tracks left={false} right={false}>\n {({ tracks, getTrackProps }) => (\n <div className=\"slider-tracks\">\n {tracks.map(({ id, source, target }) => (\n <Track key={id} source={source} target={target} getTrackProps={getTrackProps} />\n ))}\n </div>\n )}\n </Tracks>\n </Slider>\n </OwnSlider>\n )}\n <RangeSpan>\n <RangeSpanItem>{`${currentMin}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n <RangeSpanItem>{`${currentMax}${_maxPrefix ? _maxPrefix : ''}${\n unit ? ` ${unit}` : ''\n }`}</RangeSpanItem>\n </RangeSpan>\n </>\n );\n};\n\nexport default RangeSlider;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const RangeSpan = styled.div`\n display: flex;\n align-items: center;\n margin-top: ${size(1)};\n user-select: none;\n`;\n\nexport const RangeSpanItem = styled.div`\n font-size: 0.875rem;\n color: ${(props) => props.theme.color.textDarkLighten};\n\n :first-child {\n flex: 1 1 auto;\n }\n\n :last-child {\n flex-shrink: 0;\n }\n`;\n\nexport const Slider = styled.div`\n padding: 10px 12px;\n`;\n\nexport const Bar = styled.div`\n position: relative;\n height: 4px;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -12px;\n right: -12px;\n background-color: ${(props) => props.theme.color.accentDark};\n }\n`;\n\nexport const Track = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n position: absolute;\n top: 0;\n height: 4px;\n margin-left: -12px;\n margin-right: -12px;\n`;\n\nexport const Handle = styled.div.attrs(() => ({\n role: 'slider',\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n position: absolute;\n top: 50%;\n transform-origin: 50% 50%;\n display: block;\n width: 24px;\n height: 24px;\n margin-top: -12px;\n margin-left: -12px;\n border-radius: 50%;\n cursor: move;\n cursor: ew-resize;\n cursor: -webkit-grab;\n cursor: grab;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 50%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :active {\n transform: scale(1.3);\n\n :before {\n opacity: 1;\n }\n }\n`;\n", "import React from 'react';\nimport { Handle as OwnHandle } from './wrapper';\nimport { SliderItem, GetHandleProps } from 'react-compound-slider';\n\ninterface IHandleProps {\n domain: number[];\n handle: SliderItem;\n getHandleProps: GetHandleProps;\n}\n\nexport const Handle = ({\n domain: [min, max],\n handle: { id, value, percent },\n getHandleProps,\n}: IHandleProps) => (\n <OwnHandle\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n style={{\n left: `${percent}%`,\n }}\n {...getHandleProps(id)}\n />\n);\n", "import React from 'react';\nimport { Track as OwnTrack } from './wrapper';\nimport { SliderItem, GetTrackProps } from 'react-compound-slider';\n\ninterface ITrackProps {\n source: SliderItem;\n target: SliderItem;\n getTrackProps: GetTrackProps;\n}\n\nexport const Track = ({ source, target, getTrackProps }: ITrackProps) => (\n <OwnTrack\n style={{\n left: `${source.percent}%`,\n width: `${target.percent - source.percent}%`,\n }}\n {...getTrackProps()}\n />\n);\n", "import React from 'react';\n\nimport { Wrapper, List, Item } from './wrapper';\nimport ProductCard from '../ProductCard';\nimport { Document } from '../../@types/search';\nimport { numberSeparator } from '../../utils/formats';\nimport i18next from 'i18next';\n\nconst resolveImage = (document: Document) => {\n const img = document.featuredImage?.files?.[0]?.url;\n if (img) {\n return `${img}?w=567&q=72`;\n }\n return undefined;\n};\n\ninterface GridProps {\n documents?: Document[];\n hashRoute?: boolean;\n pathRoute?: string;\n placeholderImage?: string;\n displayBranchName?: boolean;\n onClickItem?: (id: string) => void;\n}\n\nconst Grid = ({\n documents,\n placeholderImage,\n hashRoute,\n pathRoute,\n displayBranchName,\n onClickItem,\n}: GridProps) => {\n if (!documents) {\n return null;\n }\n\n return (\n <Wrapper>\n <List>\n {documents.map((document) => {\n /*\n const _path = pathRoute?.replace(/^\\/|\\/$/g, '');\n\n const prefix = _path ? `/${_path}/` : '/';\n\n const pathRouteUrl =\n window.location.pathname === '/'\n ? `${prefix}${document._id}`\n : `${window.location.pathname}${prefix}${document._id}`;\n */\n\n /*\n const _pathRoute = pathRoute\n ? pathRoute.startsWith('/')\n ? `${location.pathname}${pathRoute}/${document._id}`\n : `${pathRoute}/${document._id}`\n : undefined;\n\n console.log(_pathRoute);\n */\n\n const _pathRoute = pathRoute ? `${pathRoute}/${document._id}` : undefined;\n\n return (\n <Item key={document._id}>\n <ProductCard\n id={document._id}\n onClick={onClickItem}\n title={document.title}\n pathRoute={pathRoute}\n href={_pathRoute ? _pathRoute : hashRoute ? `#${document._id}` : undefined}\n image={resolveImage(document)}\n placeholderImage={placeholderImage}\n description={document.shortDescription}\n branchName={displayBranchName ? document.branches?.[0]?.name : undefined}\n uspList={[\n {\n title: document.modelYear,\n },\n {\n title: `${numberSeparator(\n document.odometerReading?.value || document.mileage\n )} ${i18next.t(\n `odometer.${document.odometerReading?.unit || 'ScandinavianMile'}`\n )}`,\n },\n {\n title: document.gearboxType,\n },\n {\n title: document.fuelType,\n },\n ]}\n price={`${numberSeparator(document.price)} ${i18next.t('currency.default')}`}\n oldPrice={\n document.oldPrice !== undefined && document.price < document.oldPrice\n ? `${numberSeparator(document.oldPrice)} ${i18next.t('currency.default')}`\n : undefined\n }\n leasingPrice={\n document.leasingPrice !== undefined\n ? `${numberSeparator(document.leasingPrice)} ${i18next.t('currency.monthly')}`\n : undefined\n }\n businessLeasingPrice={\n document.businessLeasingPrice !== undefined\n ? `${numberSeparator(document.businessLeasingPrice)} ${i18next.t(\n 'currency.monthly'\n )}`\n : undefined\n }\n />\n </Item>\n );\n })}\n </List>\n </Wrapper>\n );\n};\n\nexport default Grid;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\nexport const List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-2)} ${size(-1)};\n`;\n\nexport const Item = styled.li`\n flex: 1 1 auto;\n width: 100%;\n max-width: 100%;\n padding: ${size(2)} ${size(1)};\n\n ${(props) => props.theme.breakpoint.Sm} {\n width: 50%;\n max-width: 50%;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n width: 33.333%;\n max-width: 33.333%;\n }\n`;\n", "import React, { useCallback, useMemo } from 'react';\n\nimport {\n Wrapper,\n Image,\n Picture,\n Source,\n Img,\n Content,\n ContentBody,\n ContentFooter,\n Heading,\n Link,\n Description,\n Usp,\n Price,\n CurrentPrice,\n OldPrice,\n PriceCell,\n Label,\n PreHeading,\n} from './wrapper';\nimport UspList, { ItemProps } from '../UspList';\nimport { DEFAULT_PLACEHOLDER_IMAGE } from '../../utils/constants';\nimport usePath from '../../State/Path/usePath';\nimport { useTranslation } from 'react-i18next';\nimport useIsInViewport from '../../hooks/useIsInViewport';\n\ninterface Props {\n id: string;\n title: string;\n href?: string;\n image?: string;\n pathRoute?: string;\n placeholderImage?: string;\n description?: string;\n uspList?: ItemProps[];\n price: string;\n leasingPrice?: string;\n oldPrice?: string;\n branchName?: string;\n businessLeasingPrice?: string;\n onClick?: (id: string) => void;\n}\n\nconst ProductCard = ({\n id,\n title,\n href,\n image,\n pathRoute,\n placeholderImage,\n branchName,\n description,\n uspList,\n price,\n oldPrice,\n leasingPrice,\n businessLeasingPrice,\n onClick,\n}: Props) => {\n const { t } = useTranslation();\n\n const [containerRef, isVisible] = useIsInViewport<HTMLDivElement>({\n persistVisibility: true,\n });\n\n const { pushState } = usePath();\n const _onClick = useMemo(() => (onClick ? () => onClick(id) : undefined), [id]);\n\n const onHrefClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n if (pathRoute && href) {\n const reg = new RegExp('^((http|https)://)|//');\n if (!pathRoute.match(reg) && !pathRoute.startsWith(location.origin)) {\n e.preventDefault();\n pushState(href);\n }\n }\n },\n [id, pathRoute, href]\n );\n\n return (\n <Wrapper onClick={_onClick}>\n <Image ref={containerRef}>\n {isVisible && image ? (\n <>\n <Picture>\n <Source\n type=\"image/webp\"\n srcSet={`${image}?spec=822x548&format=webp 822w, ${image}?spec=750x500&format=webp 750w, ${image}?spec=411x274&format=webp 411w`}\n sizes=\"(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)\"\n />\n <Img\n srcSet={`${image}?spec=822x548 822w, ${image}?spec=750x500 750w, ${image}?spec=411x274 411w`}\n sizes=\"(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)\"\n src={`${image}?spec=411x274`}\n alt={title}\n />\n </Picture>\n </>\n ) : (\n <Picture>\n <Img src={placeholderImage || DEFAULT_PLACEHOLDER_IMAGE} />\n </Picture>\n )}\n </Image>\n <Content>\n <ContentBody>\n {branchName && <PreHeading>{branchName}</PreHeading>}\n <Heading>\n {href ? (\n <Link onClick={onHrefClick} href={href} title={title} aria-label={title}>\n {title}\n </Link>\n ) : (\n title\n )}\n </Heading>\n {description && <Description>{description}</Description>}\n {uspList && (\n <Usp>\n <UspList small items={uspList} />\n </Usp>\n )}\n </ContentBody>\n <ContentFooter>\n <Price>\n <PriceCell>\n {oldPrice ? <OldPrice>{oldPrice}</OldPrice> : <Label>{t('productCard.price')}</Label>}\n <CurrentPrice>{price}</CurrentPrice>\n </PriceCell>\n {leasingPrice && (\n <PriceCell>\n <Label>{t('productCard.privateLeasing')}</Label>\n <CurrentPrice>{leasingPrice}</CurrentPrice>\n </PriceCell>\n )}\n {businessLeasingPrice && (\n <PriceCell>\n <Label>{t('productCard.businessLeasing')}</Label>\n <CurrentPrice>{businessLeasingPrice}</CurrentPrice>\n </PriceCell>\n )}\n </Price>\n </ContentFooter>\n </Content>\n </Wrapper>\n );\n};\n\nexport default ProductCard;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.article`\n position: relative;\n height: 100%;\n display: flex;\n flex-direction: column;\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :active {\n transform: scale(0.98);\n }\n`;\n\nexport const Image = styled.div`\n flex-shrink: 0;\n position: relative;\n height: 0;\n padding-bottom: 66.666%;\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n ${Wrapper}:hover & {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Picture = styled.picture``;\n\nexport const Source = styled.source``;\n\nexport const Img = styled.img`\n position: absolute;\n width: 100%;\n height: 100%;\n object-fit: cover;\n top: auto;\n left: auto;\n border-radius: 3px;\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n margin-top: ${size(2)};\n`;\n\nexport const ContentBody = styled.div``;\n\nexport const ContentFooter = styled.div`\n margin-top: auto;\n padding-top: ${size(1)};\n`;\n\nexport const PreHeading = styled.div`\n margin-bottom: ${size(0.25)};\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.75rem;\n`;\n\nexport const Heading = styled.h1.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n font-weight: 400;\n margin: 0;\n font-size: 1rem;\n`;\n\nexport const Link = styled.a`\n display: block;\n color: inherit;\n text-decoration: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n :focus {\n text-decoration: underline;\n }\n`;\n\nexport const Description = styled.div`\n font-size: 0.875rem;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin-top: ${size(0.25)};\n`;\n\nexport const Usp = styled.div`\n margin-top: ${size(1)};\n`;\n\nexport const Price = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n width: 100%;\n`;\n\nexport const CurrentPrice = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n font-size: 1rem;\n margin-right: ${size(1)};\n`;\n\nexport const PriceCell = styled.div`\n flex: 1 1 auto;\n padding-right: ${size(1)};\n`;\n\nexport const OldPrice = styled.div`\n text-decoration: line-through;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n`;\n\nexport const Label = styled.label`\n color: ${(props) => props.theme.color.disabledText};\n font-size: 0.75rem;\n`;\n", "import React from 'react';\n\nimport { List, Item, Box, ItemSection, Action } from './wrapper';\nimport { IconInfo } from '../Icon';\n\nexport interface ItemProps {\n title: string | number | null;\n onClick?: () => void;\n}\n\nexport interface Props {\n items?: ItemProps[];\n small?: boolean;\n}\n\nconst UspItem = ({ title, onClick }: ItemProps) => {\n return (\n <Item>\n <Box>\n <ItemSection>{title}</ItemSection>\n {onClick && (\n <ItemSection>\n <Action onClick={onClick}>\n <IconInfo block />\n </Action>\n </ItemSection>\n )}\n </Box>\n </Item>\n );\n};\n\nconst UspList = ({ items, small }: Props) => {\n if (!items) {\n return null;\n }\n\n return (\n <List isSmall={small}>\n {items.map((item, index) => (\n <UspItem key={`${item.title}-${index}`} title={item.title} onClick={item.onClick} />\n ))}\n </List>\n );\n};\n\nexport default UspList;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const Item = styled.li`\n padding: ${size(0.5)};\n`;\n\nexport const Box = styled.div`\n display: flex;\n align-items: center;\n background-color: ${(props) => props.theme.color.accentDark};\n padding: ${size(1)} ${size(1.5)};\n border-radius: 3px;\n font-size: 0.875rem;\n overflow-wrap: break-word;\n hyphens: auto;\n`;\n\nexport const ItemSection = styled.div`\n & + & {\n margin-left: ${size(1)};\n }\n`;\n\nexport const Action = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const List = styled.ul`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-0.5)};\n\n ${({ isSmall }: { isSmall?: boolean }) =>\n isSmall &&\n css`\n margin: ${size(-0.25)};\n\n ${Item} {\n padding: ${size(0.25)};\n }\n\n ${Box} {\n padding: ${size(0.5)} ${size(1)};\n font-size: 0.75rem;\n }\n\n ${ItemSection} {\n & + & {\n margin-left: ${size(0.5)};\n }\n }\n `}\n`;\n", "import { useContext } from 'react';\nimport { PathContext, PathContextProps } from './PathContext';\n\nconst usePath = (): PathContextProps => {\n const context = useContext(PathContext);\n\n if (!context) {\n throw new Error('usePath must be used within a PathProvider');\n }\n\n return context;\n};\nexport default usePath;\n", "import { createContext } from 'react';\n\nexport interface PathContextProps {\n path: string;\n previousPath?: string;\n id?: string;\n pushState: (id: string) => void;\n replaceState: (id: string) => void;\n}\n\nexport const PathContext = createContext<PathContextProps | undefined>(undefined);\n", "import { useEffect, useRef, useState } from 'react';\n\ninterface Options extends IntersectionObserverInit {\n persistVisibility?: boolean;\n}\n\nconst useIsInViewport = <T>(\n options?: Options\n): [React.MutableRefObject<T | null>, boolean, number] => {\n const containerRef = useRef<T | null>(null);\n\n const [isVisible, setIsVisible] = useState(false);\n const [intersectionRatio, setIntersectionRatio] = useState(0);\n\n const callbackFunction = (\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver\n ) => {\n const [entry] = entries;\n setIsVisible(entry.isIntersecting);\n setIntersectionRatio(entry.intersectionRatio);\n\n if (entry.isIntersecting && options?.persistVisibility && containerRef.current) {\n observer.unobserve(containerRef.current as unknown as HTMLElement);\n containerRef.current = null;\n }\n };\n\n useEffect(() => {\n const observer = new IntersectionObserver(callbackFunction, options);\n if (containerRef.current) observer.observe(containerRef.current as unknown as HTMLElement);\n\n return () => {\n if (containerRef.current) observer.unobserve(containerRef.current as unknown as HTMLElement);\n };\n }, [containerRef, options]);\n\n return [containerRef, isVisible, intersectionRatio];\n};\n\nexport default useIsInViewport;\n", "import React from 'react';\n\nimport { Wrapper, Query, Clear } from './wrapper';\nimport { IconCancel } from '../Icon';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n children: string;\n onClear?: () => void;\n clearTitle?: string;\n}\n\nconst SearchTerm = ({ children, onClear, clearTitle }: Props) => {\n const { t } = useTranslation();\n return (\n <Wrapper>\n <Query>{children}</Query>\n {onClear && (\n <Clear onClick={onClear} title={clearTitle ? clearTitle : t('search.freeText')}>\n <IconCancel block />\n </Clear>\n )}\n </Wrapper>\n );\n};\n\nexport default SearchTerm;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Query = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 2.25rem;\n min-width: 0;\n overflow-wrap: break-word;\n hyphens: auto;\n\n :before,\n :after {\n content: '\"';\n }\n`;\n\nexport const Clear = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(2)};\n height: ${size(2)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accentDark};\n margin-left: ${size(1)};\n font-size: ${size(1)};\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-1)};\n bottom: ${size(-1)};\n left: ${size(-1)};\n right: ${size(-1)};\n border-radius: 50%;\n }\n\n :after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :after {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n", "import React, { useCallback, useState } from 'react';\nimport useSearch from '../../State/Search/useSearch';\nimport SearchBar from '../SearchBar';\n\nconst SearchFilter = () => {\n const [value, setValue] = useState('');\n const { queryFilter, onFilterUpdate } = useSearch();\n\n const onSearch = useCallback(\n (value: string) => {\n const nextQuery = new URLSearchParams(queryFilter.searchParams);\n if (value === nextQuery.get('query')) {\n return;\n }\n\n if (value) {\n nextQuery.set('query', value);\n } else {\n nextQuery.delete('qquery');\n }\n\n onFilterUpdate(nextQuery.toString());\n setValue('');\n },\n [queryFilter]\n );\n\n return <SearchBar value={value} setValue={setValue} onSearch={onSearch} />;\n};\n\nexport default SearchFilter;\n", "import React, { useCallback, useRef } from 'react';\nimport InputSearch from '../InputSearch';\nimport useOutsideClick from '../../hooks/useOutsideClick';\nimport { useTranslation } from 'react-i18next';\n\ninterface SearchBarProps {\n value: string;\n setValue: (value: string) => void;\n onSearch: (value: string) => void;\n}\n\nconst SearchBar = ({ value, setValue, onSearch }: SearchBarProps) => {\n const { t } = useTranslation();\n const ref = useRef<HTMLDivElement>(null);\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setValue(e.currentTarget.value),\n []\n );\n\n useOutsideClick(ref, () => setValue(''));\n\n const _onSearch = useCallback(() => {\n onSearch(value);\n }, [value]);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.keyCode === 13) {\n _onSearch();\n }\n },\n [value, _onSearch]\n );\n\n return (\n <InputSearch\n ref={ref}\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onSearch={_onSearch}\n placeholder={t('searchBar.placeholder')}\n label={t('searchBar.placeholder')}\n id=\"main-search\"\n />\n );\n};\n\nexport default SearchBar;\n", "import React from 'react';\n\nimport { Wrapper, Search, Action, ActionBtn, Input, Label } from './wrapper';\nimport { IconSearch } from '../Icon';\n\ntype InputProps = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>;\n\ntype Props = InputProps & {\n placeholder: string;\n label: string;\n value?: string;\n id: string;\n onSearch: () => void;\n};\n\nconst InputSearch = React.forwardRef(\n (\n { placeholder, label, value, id, onSearch, onChange, onKeyDown }: Props,\n ref:\n | ((instance: HTMLDivElement | null) => void)\n | React.RefObject<HTMLDivElement>\n | null\n | undefined\n ) => (\n <Wrapper ref={ref}>\n <Label htmlFor={id}>{label}</Label>\n <Search>\n <Input\n placeholder={placeholder}\n name=\"search\"\n value={value}\n id={id}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </Search>\n <Action>\n <ActionBtn onClick={onSearch} title={`Genomf\u00F6r ${label}`} aria-label={`Genomf\u00F6r ${label}`}>\n <IconSearch block />\n </ActionBtn>\n </Action>\n </Wrapper>\n )\n);\n\nInputSearch.displayName = 'InputSearch';\n\nexport default InputSearch;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'search',\n}))`\n display: flex;\n align-items: stretch;\n border-radius: 3px;\n`;\n\nexport const Label = styled.label`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n\nexport const Search = styled.div`\n flex: 1 1 auto;\n position: relative;\n display: flex;\n align-items: stretch;\n background-color: ${(props) => props.theme.color.accentDark};\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n`;\n\nexport const ActionBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${(props) => props.theme.distances.inputHeight};\n height: ${(props) => props.theme.distances.inputHeight};\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n font-size: 1rem;\n`;\n\nexport const Input = styled.input.attrs(() => ({\n type: 'search',\n className: 'wayke__theme wayke__font--regular',\n}))`\n flex: 1 1 auto;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n padding: 0 ${size(2)};\n background-color: transparent;\n font-size: 16px;\n border: none;\n border-radius: 0;\n box-shadow: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n\n :focus {\n outline: none;\n }\n\n &::-webkit-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &::-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-ms-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n`;\n", "import { useEffect } from 'react';\n\nconst useOutsideClick = (ref: React.RefObject<HTMLElement>, callback: () => void) => {\n const handleClick = (e: MouseEvent) => {\n if (ref.current && e.target && !ref.current.contains(e.target as Node)) {\n callback();\n }\n };\n\n useEffect(() => {\n document.addEventListener('click', handleClick);\n\n return () => {\n document.removeEventListener('click', handleClick);\n };\n });\n};\n\nexport default useOutsideClick;\n", "import React from 'react';\n\nimport { Wrapper, Icon, Content, Heading, Message } from './wrapper';\n\nimport { IconCheck, IconInfo, IconExclamationCircle, IconExclamationTriangle } from '../Icon';\n\ninterface Props {\n severity?: string;\n icon?: boolean;\n heading?: string;\n children?: React.ReactNode;\n}\n\nconst Snackbar = ({ severity, icon, heading, children }: Props) => {\n let iconSelector = <IconInfo block />;\n if (severity === 'error') {\n iconSelector = <IconExclamationCircle block />;\n } else if (severity === 'warning') {\n iconSelector = <IconExclamationTriangle block />;\n } else if (severity === 'success') {\n iconSelector = <IconCheck block />;\n }\n\n return (\n <Wrapper severity={severity}>\n {icon && <Icon>{iconSelector}</Icon>}\n <Content>\n {heading && <Heading>{heading}</Heading>}\n <Message>{children}</Message>\n </Content>\n </Wrapper>\n );\n};\n\nexport default Snackbar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport theme from '../../layout/theme';\n\nconst getSnackbarBg = (severity: string | undefined): string => {\n let bg = theme.color.accent;\n\n if (severity === 'error') {\n bg = theme.color.ui.negativeLight;\n } else if (severity === 'warning') {\n bg = theme.color.ui.neutralLight;\n } else if (severity === 'info') {\n bg = theme.color.ui.infoLight;\n } else if (severity === 'success') {\n bg = theme.color.ui.positiveLight;\n }\n\n return bg;\n};\n\ninterface Wrapper {\n severity?: string;\n}\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'alert',\n}))<Wrapper>`\n display: flex;\n align-items: center;\n padding: ${size(1.5)} ${size(2)};\n background-color: ${(props): string => getSnackbarBg(props.severity)};\n color: ${(props): string => props.theme.color.textDark};\n border-radius: 3px;\n`;\n\nexport const Icon = styled.div`\n flex-shrink: 0;\n padding-right: ${size(2)};\n font-size: ${size(3)};\n\n > svg {\n display: block;\n }\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n font-size: 1rem;\n`;\n\nexport const Heading = styled.div`\n font-weight: 700;\n`;\n\nexport const Message = styled.div`\n > * {\n &:first-child {\n margin-top: 0;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n`;\n", "import {\n ActionAll,\n ActionNames,\n ActionOnFilterUpdate,\n ActionTypes,\n CallbackOnFilterUpdate,\n} from './Actions';\nimport {\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnInit,\n EventEcomOnUser,\n EventEcomOnExit,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n} from './Events';\n\nexport type EventSubscriptions = {\n HashRouteChange: EventHashRouteChange[];\n ItemClicked: EventItemClicked[];\n EcomOnInit: EventEcomOnInit[];\n EcomOnUserEvent: EventEcomOnUser[];\n EcomOnExit: EventEcomOnExit[];\n ImagesClick: EventImagesClick[];\n OptionsClick: EventOptionsClick[];\n PhonenumberVisible: EventPhonenumberVisible[];\n PhonenumberCall: EventPhonenumberCall[];\n MailVisible: EventMailVisible[];\n InsuranceInterest: EventInsuranceInterest[];\n FinanceInterest: EventFinanceInterest[];\n All: EventAll[];\n};\n\nexport type ActionSubscriptions = {\n onFilterUpdate: ActionOnFilterUpdate[];\n All: ActionAll[];\n};\n\nclass PubSub {\n private static events: EventSubscriptions = {\n HashRouteChange: [],\n ItemClicked: [],\n EcomOnInit: [],\n EcomOnUserEvent: [],\n EcomOnExit: [],\n ImagesClick: [],\n OptionsClick: [],\n PhonenumberVisible: [],\n PhonenumberCall: [],\n MailVisible: [],\n InsuranceInterest: [],\n FinanceInterest: [],\n All: [],\n };\n\n private static actions: ActionSubscriptions = {\n onFilterUpdate: [],\n All: [],\n };\n\n public static subscribeAction = (event: ActionTypes) =>\n PubSub.actions[event.actionName].push(event as any);\n\n public static unsubscribeAction = (event: ActionTypes) => {\n if (PubSub.actions[event.actionName]) {\n for (let i = 0; i < PubSub.actions[event.actionName].length; i++) {\n if (PubSub.actions[event.actionName][i] === event) {\n PubSub.actions[event.actionName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n public static publishAction = (eventName: ActionNames, ...args: any) => {\n if (PubSub.actions.All) {\n PubSub.events.All.forEach((event) => event.callback(eventName, args));\n }\n if (PubSub.actions[eventName]) {\n PubSub.actions[eventName].forEach((event: ActionTypes) => {\n switch (eventName) {\n case 'onFilterUpdate':\n (event.callback as CallbackOnFilterUpdate)(args[0]);\n break;\n default:\n break;\n }\n });\n }\n };\n\n public static subscribe = (event: EventType) => PubSub.events[event.eventName].push(event as any);\n\n public static unsubscribe = (event: EventType) => {\n if (PubSub.events[event.eventName]) {\n for (let i = 0; i < PubSub.events[event.eventName].length; i++) {\n if (PubSub.events[event.eventName][i] === event) {\n PubSub.events[event.eventName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n public static publish = (eventName: EventNames, ...args: any) => {\n if (PubSub.events.All) {\n PubSub.events.All.forEach((event) => event.callback(eventName, args));\n }\n if (PubSub.events[eventName]) {\n PubSub.events[eventName].forEach((event: EventType) => {\n switch (eventName) {\n case 'HashRouteChange':\n (event.callback as CallbackHashRouteChange)(args[0]);\n break;\n case 'ItemClicked':\n (event.callback as CallbackEventItemClicked)(args[0]);\n break;\n case 'EcomOnUserEvent':\n (event.callback as CallbackEcomOnUserEvent)(args[0], args[1]);\n break;\n case 'EcomOnInit':\n case 'EcomOnExit':\n case 'ImagesClick':\n case 'OptionsClick':\n case 'PhonenumberVisible':\n case 'PhonenumberCall':\n case 'MailVisible':\n case 'InsuranceInterest':\n case 'FinanceInterest':\n (event.callback as CallbackEmpty)();\n break;\n default:\n break;\n }\n });\n }\n };\n}\nexport default PubSub;\n", "import i18n from 'i18next';\nimport { useCallback, useEffect, useState } from 'react';\nimport { MarketCode } from '../@types/market';\nimport { initializeI18n } from '../utils/I18n';\n\nconst useInitializeTranslation = (marketCode?: MarketCode) => {\n const [initialized, setInitialized] = useState(() => !!i18n.isInitialized);\n\n const initialize = useCallback(async (m?: MarketCode) => {\n await initializeI18n(m);\n setInitialized(true);\n }, []);\n\n useEffect(() => {\n if (!i18n.isInitialized) {\n initialize(marketCode);\n }\n }, []);\n\n return initialized;\n};\n\nexport default useInitializeTranslation;\n", "import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport { MarketCode } from '../@types/market';\n\nconst getLanguage = (marketCode?: MarketCode) => {\n switch (marketCode) {\n case 'NO':\n return 'nb-NO';\n case 'SE':\n return 'sv-SE';\n default:\n return 'en-US';\n }\n};\n\nexport const initializeI18n = (marketCode: MarketCode = 'SE') => {\n return new Promise((resolve) => {\n if (i18n.isInitialized) {\n resolve(true);\n return;\n }\n i18n.use(initReactI18next).init(\n {\n lng: getLanguage(marketCode),\n fallbackLng: 'en-US',\n interpolation: {\n escapeValue: false,\n },\n debug: true,\n resources: {\n 'sv-SE': {\n translation: {\n navigation: {\n backToSearch: 'Tillbaka till bils\u00F6k',\n },\n filter: {\n manufacturer: 'Tillverkare',\n modelSeries: 'Modell',\n fuelType: 'Drivmedel',\n gearboxType: 'V\u00E4xell\u00E5da',\n branch: 'Anl\u00E4ggning',\n color: 'F\u00E4rg',\n environmentClass: 'Milj\u00F6klass',\n 'properties.segment': 'Segment',\n drivingWheel: 'Drivhjul',\n price: 'Pris',\n mileage: 'Miltal',\n modelYear: 'Modell\u00E5r',\n odometerValueAsKm: 'M\u00E4tarst\u00E4llning',\n leasingPrice: 'Privatleasing',\n businessLeasingPrice: 'F\u00F6retagsleasa',\n },\n currency: {\n default: 'kr',\n monthly: 'kr/m\u00E5n',\n },\n category: {\n basic: 'Basuppgifter',\n engineAndPerformance: 'Motor & Prestanda',\n },\n subCategory: {\n engine: 'Motor',\n },\n customProperty: {\n manufacturer: {\n displayName: 'Varum\u00E4rke',\n hint: '',\n },\n modelSeries: {\n displayName: 'Modell',\n hint: '',\n },\n modelName: {\n displayName: 'Version',\n hint: 'Vilket utf\u00F6rande av bilmodellen det \u00E4r.',\n },\n modelYear: {\n displayName: 'Modell\u00E5r',\n hint: 'Modell\u00E5r s\u00E4tts av tillverkaren. Handlaren \u00E4ndrar ibland modell\u00E5ret f\u00F6r att matcha transportstyrelsens definition f\u00F6r <i>\u00E5rsmodell</i>. Definitionen f\u00F6r \u00E5rsmodell inneb\u00E4r att bilar tillverkade andra halvan av \u00E5ret f\u00E5r n\u00E4sta \u00E5rs modell\u00E5r.',\n },\n manufactureYear: {\n displayName: 'Tillverknings\u00E5r',\n hint: '\u00C5ret bilen tillverkades.',\n },\n odometer: { displayName: 'M\u00E4tarst\u00E4llning', hint: '' },\n gearboxType: { displayName: 'V\u00E4xell\u00E5da', hint: '' },\n registrationNumber: { displayName: 'Registreringsnummer', hint: '' },\n fuelType: {\n displayName: 'Br\u00E4nslegrupp',\n hint: 'Vad bilen ska tankas med och drivs av.',\n },\n enginePower: { displayName: 'Effekt', unit: 'hk' },\n },\n odometer: {\n Kilometer: 'km',\n ScandinavianMile: 'mil',\n },\n common: {\n yes: 'Ja',\n no: 'Nej',\n logotype: 'Logotyp',\n close: 'St\u00E4ng',\n showMore: 'Visa mer',\n readMore: 'L\u00E4s mer',\n showMoreInformation: 'Visa mer information',\n showLessInformation: 'Visa mindre information',\n choose: 'V\u00E4lj',\n address: 'Adress',\n mondayShort: 'M\u00E5n',\n tuesdayShort: 'Tis',\n wednesdayShort: 'Ons',\n thursdayShort: 'Tor',\n fridayShort: 'Fre',\n saturdayShort: 'L\u00F6r',\n sundayShort: 'S\u00F6n',\n moreInformation: 'Mer information',\n lessInformation: 'Mindre information',\n anErrorHasOccured: 'Ett fel har intr\u00E4ffat',\n opensInNewTab: '\u00D6ppnas i ny flik',\n open: '\u00D6ppna',\n imageIndex: 'Bild {{index}}',\n },\n item: {\n relatedVehicles: 'Relaterade fordon',\n latestVehicles: 'Senast inkomna',\n readMoreInNewTab: 'L\u00E4s mer (\u00F6ppnas i ny flik)',\n moreInfoAboutSubject: 'Mer information om {{subject}}',\n dataNotAvailable: 'Uppgift saknas',\n showOnGoogleMaps: 'Visa p\u00E5 Google Maps',\n googleMapsMapAlt: 'Karta',\n googleMapsPlaceholderInit: 'Visa karta',\n demoCar: 'Demobil',\n demoCarDescription:\n 'En demobil \u00E4r en bil som st\u00E5tt i utst\u00E4llning eller som p\u00E5 annat s\u00E4tt anv\u00E4nts f\u00F6r att visa upp en viss modell. Bilarna \u00E4r ofta v\u00E4lutrustade och har blivit v\u00E4l omh\u00E4ndertagna. Dessutom har de vanligtvis g\u00E5tt f\u00E5 mil och har fortfarande nybilsgarantierna kvar.',\n carData: 'Biluppgifter',\n carDataDescription: 'Information direkt fr\u00E5n Transportstyrelsen och tillverkaren.',\n equipment: 'Utrustning',\n equipmentDescription: 'Kompletterande uppgifter om bilen.',\n documents: 'Dokument',\n documentTypes: {\n tireEnergyDeclaration: 'Energideklaration f\u00F6r d\u00E4ck',\n goodsDeclaration: 'Varudeklaration',\n other: '\u00D6vriga dokument',\n },\n carIsReserved: 'Bilen \u00E4r reserverad',\n carIsReservedDescription: 'Denna bil \u00E4r reserverad av en annan k\u00F6pare.',\n carIsReservedModalBody: 'Denna bil \u00E4r reserverad av en annan k\u00F6pare.',\n centralWarehouseCar: 'Centrallagerbil',\n centralWarehouseCarDescription:\n 'Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar. Byt anl\u00E4ggning f\u00F6r att visa kontaktuppgifter till just den anl\u00E4ggningen.',\n centralWarehouseCarDescriptionShort:\n 'Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar.',\n clickHereToShowContactToAnotherBranch:\n ' Klicka h\u00E4r f\u00F6r att visa kontaktuppgifter till en annan anl\u00E4ggning',\n switchBranch: 'Byt anl\u00E4ggning',\n switchBranchDescription: 'V\u00E4lj den anl\u00E4ggning du vill visa kontaktuppgifter f\u00F6r.',\n chooseBranch: 'V\u00E4lj anl\u00E4ggning',\n chooseSelectedBranch: 'V\u00E4lj vald anl\u00E4ggning',\n availableFromDate: 'Tillg\u00E4nglig fr\u00E5n {{date}}',\n includingShort: 'Inkl.',\n usedWarrany: 'Begagnatgaranti',\n homeDelivery: 'Hemleverans',\n thisCarsIsLocatedAt: 'Den h\u00E4r bilen finns p\u00E5',\n thisCarIsAvailableAtOurBranch:\n 'Den h\u00E4r bilen finns p\u00E5 v\u00E5r anl\u00E4ggning i {{location}}',\n contact: 'Kontakt',\n start360Exterior: 'Starta 360\u00B0 exteri\u00F6rt',\n start360Interior: 'Starta 360\u00B0 interi\u00F6rt',\n openingHoursToday: '\u00D6ppetider idag',\n closedToday: 'St\u00E4ngt idag',\n open: '\u00D6ppet',\n closed: 'St\u00E4ngt',\n addInsurance: 'V\u00E4lj till f\u00F6rs\u00E4kring',\n getInsuranceQuote: 'F\u00E5 prisf\u00F6rslag',\n insurance: 'F\u00F6rs\u00E4kring',\n readMoreAboutInsuranceInNewTab: 'L\u00E4s mer om f\u00F6rs\u00E4kringen (\u00F6ppnas i ny flik)',\n personalNumber: 'Personnummer',\n estimatedAnualMileage: 'Uppskattad k\u00F6rstr\u00E4cka per \u00E5r',\n showInsurances: 'Visa f\u00F6rs\u00E4kringar',\n savePersonalNumberOnThisDevice: 'Spara personnummer p\u00E5 denna enhet',\n savePersonalNumberOnThisDeviceHelp:\n 'Spara personnummer p\u00E5 denna dator f\u00F6r att direkt visa f\u00F6rs\u00E4kringskostnaderna i Wayke. Personnumret lagras inte hos Wayke utan finns bara sparad i din webbl\u00E4sare.',\n couldNotfetchInsurances: 'Kunde inte h\u00E4mta f\u00F6rs\u00E4kringar. V\u00E4nligen f\u00F6rs\u00F6k igen.',\n openPrePurchaseInformationInNewTab:\n 'F\u00F6rk\u00F6psinformation och villkor (\u00F6ppnas i ny flik)',\n insuranceIncludes: 'F\u00F6rs\u00E4kringen inneh\u00E5ller',\n addInsuranceHeading: 'L\u00E4gg till',\n financialOptions: {\n otherFinancialOptions: 'Andra finansieringsalternativ',\n privateLease: 'Privatleasa',\n businessLease: 'F\u00F6retagsleasa',\n monthlyCost: 'M\u00E5nadskostnad',\n bindingTime: 'Bindningstid',\n annualMileage: '\u00C5rlig k\u00F6rstr\u00E4cka',\n payInInstallments: 'Delbetala',\n payInInstallmentsDetailed: 'Delbetala {{amount}} i {{duration}} m\u00E5n',\n disclaimer: 'Ber\u00E4knat p\u00E5 {{interest}} r\u00E4nta.',\n loanOptions: 'L\u00E5nealternativ',\n downPayment: 'Kontantinsats',\n duration: 'Avbetalning',\n residual: 'Restskuld',\n interest: 'R\u00E4nta',\n effectiveinterest: 'Effektiv r\u00E4nta',\n setupFee: 'Uppl\u00E4ggningskostnad',\n administrationFee: 'Administrativa avgifter',\n totalCreditCost: 'Total kreditkostnad',\n milagePerYear: 'mil/\u00E5r',\n months: 'm\u00E5n',\n loanOptionsDisclaimer:\n 'Ber\u00E4knat p\u00E5 {{interest}} % r\u00E4nta (effektivt {{effectiveInterest}} %).',\n loanOptionsDisclaimerMileage:\n 'Ber\u00E4knat p\u00E5 {{interest}} % r\u00E4nta (effektivt {{effectiveInterest}} %) och en \u00E5rlig k\u00F6rstr\u00E4cka om {{mileage}} mil.',\n },\n actions: {\n emailSubject: '{{hostName}} \u2013 Jag \u00E4r intresserad av {{vehicle}}',\n openform: '\u00D6ppna formul\u00E4r',\n buyOnline: 'K\u00F6p bilen online',\n showEmail: 'Visa mailadress',\n showPhoneNumber: 'Visa telefonnummer',\n callNumber: 'Ring',\n sendEmailTo: 'Skicka ett mail till',\n },\n accessories: {\n accessories: 'Tillbeh\u00F6r',\n accessoriesDescription: 'Tillbeh\u00F6r som passar till detta fordon.',\n price: 'Kontantpris',\n oldPrice: 'Tidigare pris',\n installationCost: 'Monteringskostnad',\n articleNumberShort: 'Art. nr.',\n moreInformationAboutAccessory: 'Mer information om {{accessory}}',\n },\n },\n productCard: {\n price: 'Pris',\n privateLeasing: 'Privatleasing',\n },\n search: {\n filter: 'Filter',\n sort: 'Sortera',\n showMore: {\n text: 'Visa fler',\n title: 'Visa fler resultat',\n },\n filterButton: {\n text: 'Filtrera',\n title: 'Visa filter',\n },\n sortButton: {\n text: 'Sortera',\n title: 'V\u00E4lj sorteringsordning',\n },\n searchResult: 'S\u00F6kresultat',\n snackbarNoSearchResults: {\n heading: 'Inga resultat',\n body: 'S\u00F6kningen gav inga resultat',\n },\n snackBarClearFreeText: {\n heading: 'Inga resultat',\n body: 'Rensa fritexten f\u00F6r att se alla filter',\n },\n sortOptions: {\n relevance: 'Relevans',\n publishedAsc: 'Publicerad (\u00E4ldst)',\n publishedDesc: 'Publicerad (senast)',\n priceAsc: 'Pris (l\u00E4gst)',\n priceDesc: 'Pris (h\u00F6gst)',\n modelAsc: '\u00C5rsmodell (\u00E4ldst)',\n modelDesc: '\u00C5rsmodell (nyast)',\n mileageAsc: 'Miltal (l\u00E4gst)',\n mileageDesc: 'Miltal (h\u00F6gst)',\n },\n clearAllFilters: {\n text: 'Rensa alla filter',\n title: 'Rensa alla filter',\n },\n showNumberOfCustomUnit: 'Visa {{count}} {{unit}}',\n result: {\n singular: 'Bil',\n plural: 'Bilar',\n },\n freeText: 'Fritext',\n from: 'Fr\u00E5n',\n to: 'Till',\n min: 'Min',\n max: 'Max',\n },\n searchBar: {\n title: 'S\u00F6k',\n placeholder: 'S\u00F6k din bil',\n button: {\n text: 'S\u00F6k',\n title: 'S\u00F6k',\n },\n searchResults: 'S\u00F6ktr\u00E4ffar',\n showAllRsults: 'Visa alla bilar',\n },\n other: {\n loading: 'Laddar...',\n error404: '404',\n showingNumberOfResults_one: 'Visar {{current}} av {{count}} resultat',\n showingNumberOfResults_other: 'Visar {{current}} av {{count}} resultat',\n closeModal: 'St\u00E4ng modal',\n closePanel: 'St\u00E4ng panel',\n goToHeading: 'G\u00E5 till {{heading}}',\n openDoumentt: '\u00D6ppna {{document}}',\n previousImage: 'F\u00F6reg\u00E5ende bild',\n nextImage: 'N\u00E4sta bild',\n goToImageIndex: 'G\u00E5 till bild {{index}}',\n phoneNumber: 'Telefonnummer',\n showPhoneNumber: 'Visa telefonnummer',\n callPhoneNumber: 'Ring {{phoneNumber}}',\n price: 'Pris',\n privateLeasingPrice: 'Privatleasing',\n video: 'Video',\n playVideo: 'Spela video',\n searchResults: 'S\u00F6ktr\u00E4ffar',\n showAllCars: 'Visa alla bilar',\n },\n },\n },\n 'nb-NO': {\n translation: {\n navigation: {\n backToSearch: 'Tilbake til bils\u00F8k',\n },\n filter: {\n manufacturer: 'Produsent',\n modelSeries: 'Modell',\n fuelType: 'Drivstofftype',\n gearboxType: 'Girkassetype',\n branch: 'Anlegget',\n color: 'Farge',\n environmentClass: 'Milj\u00F8klasse',\n 'properties.segment': 'Segment',\n drivingWheel: 'Drivhjul',\n price: 'Pris',\n mileage: 'Kilometerstand',\n modelYear: 'Modell\u00E5r',\n odometerValueAsKm: 'Kilometerstand',\n leasingPrice: 'Privatleasing',\n businessLease: 'Bedriftsleasing',\n },\n currency: {\n default: 'kr',\n monthly: 'kr/mnd',\n },\n category: {\n basic: 'Grunnopplysninger',\n engineAndPerformance: 'Motor og ytelse',\n },\n subCategory: {\n engine: 'Motor',\n },\n customProperty: {\n manufacturer: {\n displayName: 'Produsent',\n hint: '',\n },\n modelSeries: {\n displayName: 'Modell',\n hint: '',\n },\n modelName: {\n displayName: 'Versjon',\n hint: 'Hvilken versjon av bilmodellen det er.',\n },\n modelYear: {\n displayName: '\u00C5rsmodell',\n hint: 'Modell\u00E5ret settes av produsenten. Forhandlere endrer av og til modell\u00E5ret for \u00E5 matche transportmyndighetens definisjon av modell\u00E5ret. Definisjonen av modell\u00E5ret inneb\u00E6rer at biler produsert i den siste halvdelen av \u00E5ret f\u00E5r neste \u00E5rs modell\u00E5r.',\n },\n manufactureYear: {\n displayName: 'Produksjons\u00E5r',\n hint: '\u00C5ret bilen ble produsert.',\n },\n odometer: { displayName: 'Kilometerstand', hint: '' },\n gearboxType: { displayName: 'Girkasse', hint: '' },\n registrationNumber: { displayName: 'Registreringsnummer', hint: '' },\n fuelType: {\n displayName: 'Drivstofftype',\n hint: 'Hva bilen skal tankes med og drives av.',\n },\n enginePower: { displayName: 'Effekt', unit: 'hk' },\n },\n odometer: {\n Kilometer: 'km',\n ScandinavianMile: 'mil',\n },\n common: {\n yes: 'Ja',\n no: 'nei',\n logotype: 'Logotype',\n close: 'Close',\n showMore: 'Vis mer',\n readMore: 'Les mer',\n showMoreInformation: 'Vis mer informasjon',\n showLessInformation: 'Vis mindre informasjon',\n choose: 'Velg',\n address: 'Adresse',\n mondayShort: 'man',\n tuesdayShort: 'tirs',\n wednesdayShort: 'Wednesday',\n thursdayShort: 'Thursday',\n FridayShort: 'fre',\n saturdayShort: 'l\u00F8rdag',\n sundayShort: 'S\u00F8n',\n moreInformation: 'Mer informasjon',\n lessInformation: 'Mindre informasjon',\n anErrorHasOccured: 'Det har oppst\u00E5tt en feil',\n opensInNewTab: '\u00C5pnes i ny fane',\n open: '\u00C5pne',\n imageIndex: 'Bilde {{indeks}}',\n },\n item: {\n relatedVehicles: 'Relaterte kj\u00F8ret\u00F8y',\n latestVehicles: 'Sist mottatt',\n readMoreInNewTab: 'Les mer (\u00E5pnes i ny fane)',\n moreInfoAboutSubject: 'Mer informasjon om {{subject}}',\n dataNotAvailable: 'Data ikke tilgjengelig',\n showOnGoogleMaps: 'Vis p\u00E5 Google Maps',\n googleMapsMapAlt: 'Kart',\n googleMapsPlaceholderInit: 'Vis kart',\n demoCar: 'Demo Car',\n demoCarDescription:\n 'En demobil er en bil som har v\u00E6rt utstilt eller som har blitt brukt p\u00E5 annen m\u00E5te for \u00E5 vise frem en bestemt modell. Bilene er ofte godt utstyrt og har blitt tatt godt vare p\u00E5. Dessuten har de vanligvis bare noen f\u00E5 kilometer p\u00E5 seg og har fortsatt garantien p\u00E5 nybilen.',\n carData: 'Bildata',\n carDataDescription: 'Informasjon direkte fra Transportstyrelsen og produsenten.',\n equipment: 'Utstyr',\n equipmentDescription: 'Ytterligere informasjon om bilen.',\n documents: 'Dokumenter',\n documentTypes: {\n tireEnergyDeclaration: 'Energideklarasjon for dekk',\n goodsDeclaration: 'Varedeklarasjon',\n other: 'Andre dokumenter',\n },\n carIsReserved: 'Bilen er reservert',\n carIsReservedDescription: 'Denne bilen er reservert av en annen kj\u00F8per.',\n carIsReservedModalBody: 'Denne bilen er reservert av en annen kj\u00F8per.',\n centralWarehouseCar: 'Sentrallagerbil',\n centralWarehouseCarDescription:\n 'Denne bilen tilh\u00F8rer et sentrallager og kan kj\u00F8pes gjennom flere fasiliteter. Endre anlegget for \u00E5 vise kontaktinformasjon for det bestemte anlegget.',\n centralWarehouseCarDescriptionShort:\n 'Denne bilen tilh\u00F8rer et sentrallager og kan kj\u00F8pes gjennom flere fasiliteter.',\n clickHereToShowContactToAnotherBranch:\n 'Klikk her for \u00E5 se kontaktdetaljer for et annet anlegg',\n switchBranch: 'Switch Branch',\n switchBranchDescription: 'Velg filialen du vil vise kontaktdetaljer for.',\n selectBranch: 'Choose Branch',\n chooseSelectedBranch: 'Velg valgt gren',\n availableFromDate: 'Tilgjengelig fra {{date}}',\n includingShort: 'Inkl.',\n usedWarrany: 'Bruktgaranti',\n homeDelivery: 'Hjemlevering',\n thisCarsIsLocatedAt: 'Denne bilen er p\u00E5',\n thisCarIsAvailableAtOurBranch:\n 'Denne bilen er tilgjengelig i v\u00E5r filial i {{location}}',\n contact: 'Kontakt',\n start360Exterior: 'Start 360\u00B0 eksteri\u00F8r',\n start360Interior: 'Start 360\u00B0 interi\u00F8r',\n openingHoursToday: '\u00C5pningstider i dag',\n closedToday: 'Stengt i dag',\n open: '\u00C5pne',\n closed: 'Stengt',\n addInsurance: 'Velg til forsikring',\n getInsuranceQuote: 'F\u00E5 tilbud',\n insurance: 'Forsikring',\n readMoreAboutInsuranceInNewTab: 'Les mer om forsikring (\u00E5pnes i ny fane)',\n personalNumber: 'Personnummer',\n estimatedAnualMileage: 'Estimert kj\u00F8relengde per \u00E5r',\n showInsurances: 'Vis forsikringer',\n savePersonalNumberOnThisDevice: 'Lagre personlig nummer p\u00E5 denne enheten',\n savePersonalNumberOnThisDeviceHelp:\n 'Lagre personnummeret p\u00E5 denne datamaskinen for \u00E5 direkte se forsikringskostnadene i Wayke. Personnummeret lagres ikke hos Wayke, men lagres kun i nettleseren din.',\n couldNotfetchInsurances:\n 'Kunne ikke hente forsikringer. V\u00E6r s\u00E5 snill, pr\u00F8v p\u00E5 nytt.',\n openPrePurchaseInformationInNewTab:\n 'Informasjon og vilk\u00E5r f\u00F8r kj\u00F8p (\u00E5pnes i ny fane)',\n insuranceIncludes: 'Forsikringen inkluderer',\n addInsuranceHeading: 'Add',\n financialOptions: {\n otherFinancialOptions: 'Andre finansieringsalternativer',\n privateLease: 'PrivateLease',\n businessLease: 'Etagslease',\n monthlyCost: 'M\u00E5nedlig kostnad',\n bindingTime: 'Bindingstid',\n annualMileage: 'Annual Mileage',\n payInInstallments: 'Betal i avdrag',\n payInInstallmentsDetailed: 'Betal delvis {{amount}} i {{duration}} m\u00E5neder',\n disclaimer: 'Beregnet til {{interest}} rente.',\n loanOptions: 'L\u00E5nealternativer',\n downPayment: 'Kontantinnskudd',\n duration: 'Avbetaling',\n residual: 'Restgjeld',\n interesse: 'Interesse',\n effectiveinterest: 'Effektiv interesse',\n setupFee: 'Oppsettskostnad',\n administrationFee: 'Administrative gebyrer',\n totalCreditCost: 'Total kredittkostnad',\n milagePerYear: 'skandinaviske mil/\u00E5r',\n months: 'mnd',\n loanOptionsDisclaimer:\n 'Beregnet til {{interest}} % rente (effektiv {{effectiveInterest}} %).',\n loanOptionsDisclaimerMileage:\n 'Beregnet p\u00E5 {{interest}} % rente (effektiv {{effectiveInterest}} %) og en \u00E5rlig kj\u00F8relengde p\u00E5 {{mileage}} miles.',\n },\n actions: {\n emailSubject: '{{hostName}} - Jeg er interessert i {{vehicle}}',\n openform: '\u00C5pent skjema',\n buyOnline: 'Kj\u00F8p bilen p\u00E5 nett',\n showEmail: 'Vis e-postadresse',\n showPhoneNumber: 'Vis telefonnummer',\n callNumber: 'Ring',\n sendEmailTo: 'Send en e-post til',\n },\n accessories: {\n accessories: 'Tilbeh\u00F8r',\n accessoriesDescription: 'Tilbeh\u00F8r som passer for dette kj\u00F8ret\u00F8yet.',\n price: 'Kontantpris',\n oldPrice: 'Forrige pris',\n installationCost: 'Installasjonskostnad',\n articleNumberShort: 'Art. Nei.',\n moreInformationAboutAccessory: 'Mer informasjon om {{accessory}}',\n },\n },\n productCard: {\n price: 'Pris',\n privateLeasing: 'Privatleasing',\n },\n search: {\n filter: 'Filter',\n sort: 'Sorter',\n showMore: {\n text: 'Vis mer',\n title: 'Vis flere resultater',\n },\n filterButton: {\n text: 'Filter',\n title: 'Vis filter',\n },\n sortButton: {\n text: 'Sorter',\n title: 'Velg sorteringsrekkef\u00F8lge',\n },\n searchResult: 'S\u00F8keresultat',\n snackbarNoSearchResults: {\n heading: 'Ingen resultater',\n body: 'S\u00F8ket ga ingen resultater',\n },\n snackBarClearFreeText: {\n heading: 'Ingen resultater',\n body: 'T\u00F8m friteksten for \u00E5 se alle filtre',\n },\n sortOptions: {\n relevance: 'Relevans',\n publishedAsc: 'Publisert (eldste)',\n publishedDesc: 'Publisert (siste)',\n priceAsc: 'Pris (laveste)',\n priceDesc: 'Pris (maksimum)',\n modelAsc: '\u00C5rsmodell (eldste)',\n modelDesc: '\u00C5rsmodell (nyeste)',\n mileageAsc: 'Kilometerstand (lavest)',\n mileageDesc: 'Kilometerstand (maksimum)',\n },\n clearAllFilters: {\n text: 'T\u00F8m alle filtre',\n title: 'T\u00F8m alle filtre',\n },\n showNumberOfCustomUnit: 'Vis {{count}} {{unit}}',\n result: {\n singular: 'Bil',\n plural: 'Biler',\n },\n freeText: 'Gratis tekst',\n from: 'Fra',\n to: 'Til',\n min: 'Min',\n max: 'Max',\n },\n searchBar: {\n title: 'S\u00F8k',\n placeholder: 'S\u00F8k i bilen din',\n button: {\n text: 'S\u00F8k',\n title: 'S\u00F8k',\n },\n searchResults: 'S\u00F8keresultater',\n showAllRsults: 'Vis alle biler',\n },\n other: {\n loading: 'Laster...',\n error404: '404',\n showingNumberOfResults_one: 'Viser {{current}} av {{count}} resultater',\n showingNumberOfResults_other: 'Viser {{current}} av {{count}} resultater',\n closeModal: 'Close Modal',\n closePanel: 'Lukk panel',\n goToHeading: 'G\u00E5 til {{heading}}',\n openDoumentt: '\u00C5pne {{dokument}}',\n previousImage: 'Forrige bilde',\n nextImage: 'Neste bilde',\n goToImageIndex: 'G\u00E5 til bilde {{indeks}}',\n phoneNumber: 'Phone Number',\n showPhoneNumber: 'Vis telefonnummer',\n callPhoneNumber: 'Ring {{phoneNumber}}',\n price: 'Pris',\n privateLeasingPrice: 'Privatleasing',\n video: 'Video',\n playVideo: 'Spill av video',\n searchResults: 'S\u00F8keresultater',\n showAllCars: 'Vis alle biler',\n },\n },\n },\n 'en-US': {\n translation: {\n navigation: {\n backToSearch: 'Back to car search',\n },\n filter: {\n manufacturer: 'Manufacturer',\n modelSeries: 'Model',\n fuelType: 'Fuel Type',\n gearboxType: 'Gearbox Type',\n branch: 'Branch',\n color: 'Color',\n environmentClass: 'Environmental Class',\n 'properties.segment': 'Segment',\n drivingWheel: 'Driving Wheel',\n price: 'Price',\n mileage: 'Mileage',\n modelYear: 'Model Year',\n odometerValueAsKm: 'Meter setting',\n leasingPrice: 'Private leasing',\n businessLeasingPrice: 'Business leasing',\n },\n currency: {\n default: 'kr',\n monthly: 'kr/month',\n },\n category: {\n basic: 'Basic Information',\n engineAndPerformance: 'Engine & Performance',\n },\n subCategory: {\n engine: 'Engine',\n },\n customProperty: {\n manufacturer: {\n displayName: 'Brand',\n hint: '',\n },\n modelSeries: {\n displayName: 'Model',\n hint: '',\n },\n modelName: {\n displayName: 'Version',\n hint: 'Which version of the car model it is.',\n },\n modelYear: {\n displayName: 'Model year',\n hint: 'The model year is set by the manufacturer. Dealers sometimes change the model year to match the transport authority`s definition of the model year. The definition of the model year means that cars manufactured in the latter half of the year are given the next year`s model year.',\n },\n manufactureYear: {\n displayName: 'Manufacture year',\n hint: 'The year the car was manufactured.',\n },\n odometer: { displayName: 'Odometer reading', hint: '' },\n gearboxType: { displayName: 'Gearbox', hint: '' },\n registrationNumber: { displayName: 'Registration number', hint: '' },\n fuelType: {\n displayName: 'Fuel type',\n hint: 'What the car should be fueled with and powered by.',\n },\n enginePower: { displayName: 'Power', unit: 'hp' },\n },\n odometer: {\n Kilometer: 'km',\n ScandinavianMile: 'mil',\n },\n common: {\n yes: 'Yes',\n no: 'No',\n logotype: 'Logotype',\n close: 'Close',\n showMore: 'Show more',\n readMore: 'Read more',\n showMoreInformation: 'Show more information',\n showLessInformation: 'Show less information',\n choose: 'Choose',\n address: 'Address',\n mondayShort: 'Mon',\n tuesdayShort: 'Tues',\n wednesdayShort: 'Wednesday',\n thursdayShort: 'Thursday',\n fridayShort: 'Fri',\n saturdayShort: 'Sat',\n sundayShort: 'Sun',\n moreInformation: 'More information',\n lessInformation: 'Less information',\n anErrorHasOccured: 'An error has occurred',\n opensInNewTab: 'Opens in new tab',\n open: 'Open',\n imageIndex: 'Image {{index}}',\n },\n item: {\n relatedVehicles: 'Related Vehicles',\n latestVehicles: 'Latest received',\n readMoreInNewTab: 'Read more (opens in new tab)',\n moreInfoAboutSubject: 'More information about {{subject}}',\n dataNotAvailable: 'Data not available',\n showOnGoogleMaps: 'Show on Google Maps',\n googleMapsMapAlt: 'Map',\n googleMapsPlaceholderInit: 'Show Map',\n demoCar: 'Demo Car',\n demoCarDescription:\n 'A demo car is a car that has been on display or that has been used in some other way to show off a certain model. The cars are often well equipped and have been well looked after. Also, they usually have only a few miles on them and still have their new car warranties.',\n carData: 'Car Data',\n carDataDescription:\n 'Information directly from the Swedish Transport Agency and the manufacturer.',\n equipment: 'Equipment',\n equipmentDescription: 'Additional information about the car.',\n documents: 'Documents',\n documentTypes: {\n tireEnergyDeclaration: 'Energy declaration for tyres',\n goodsDeclaration: 'Goods declaration',\n other: 'Other documents',\n },\n carIsReserved: 'The car is reserved',\n carIsReservedDescription: 'This car is reserved by another buyer.',\n carIsReservedModalBody: 'This car is reserved by another buyer.',\n centralWarehouseCar: 'Central warehouse car',\n centralWarehouseCarDescription:\n 'This car belongs to a central warehouse and can be purchased through several facilities. Change facility to display contact information for that particular facility.',\n centralWarehouseCarDescriptionShort:\n 'This car belongs to a central warehouse and can be purchased through several facilities.',\n clickHereToShowContactToAnotherBranch:\n 'Click here to view contact details for another facility',\n switchBranch: 'Switch Branch',\n switchBranchDescription:\n 'Select the branch you want to display contact details for.',\n chooseBranch: 'Choose branch',\n chooseSelectedBranch: 'Choose selected branch',\n availableFromDate: 'Available from {{date}}',\n includingShort: 'Incl.',\n usedWarrany: 'Used Warranty',\n homeDelivery: 'Home delivery',\n thisCarsIsLocatedAt: 'This car is on',\n thisCarIsAvailableAtOurBranch:\n 'This car is available at our branch in {{location}}',\n contact: 'Contact',\n start360Exterior: 'Start 360\u00B0 exterior',\n start360Interior: 'Start 360\u00B0 interior',\n openingHoursToday: 'Opening hours today',\n closedToday: 'Closed today',\n open: 'Open',\n closed: 'Closed',\n addInsurance: 'Select insurance',\n getInsuranceQuote: 'Get Quote',\n insurance: 'Insurance',\n readMoreAboutInsuranceInNewTab: 'Read more about insurance (opens in new tab)',\n personalNumber: 'Personal number',\n estimatedAnnualMileage: 'Estimated mileage per year',\n showInsurances: 'Show insurances',\n savePersonalNumberOnThisDevice: 'Save personal number on this device',\n savePersonalNumberOnThisDeviceHelp:\n 'Save social security number on this computer to directly view the insurance costs in Wayke. The social security number is not stored at Wayke, but is only saved in your browser.',\n couldNotfetchInsurances: 'Could not fetch insurances. Please try again.',\n openPrePurchaseInformationInNewTab:\n 'Pre-Purchase Information and Terms (opens in new tab)',\n insuranceIncludes: 'The insurance includes',\n addInsuranceHeading: 'Add',\n financialOptions: {\n otherFinancialOptions: 'Other financing options',\n privateLease: 'PrivateLease',\n businessLease: 'Etagslease',\n monthlyCost: 'Monthly cost',\n bindingTime: 'Binding Time',\n annualMileage: 'Annual Mileage',\n payInInstallments: 'Pay In Installments',\n payInInstallmentsDetailed: 'Partially pay {{amount}} in {{duration}} months',\n disclaimer: 'Calculated at {{interest}} interest.',\n loanOptions: 'Loan Options',\n downPayment: 'Cash Deposit',\n duration: 'Instalment',\n residual: 'Residual debt',\n interest: 'Interest',\n effectiveinterest: 'Effective interest',\n setupFee: 'Setup cost',\n administrationFee: 'Administrative fees',\n totalCreditCost: 'Total Credit Cost',\n milagePerYear: 'mil/\u00E5r',\n months: 'mnd',\n loanOptionsDisclaimer:\n 'Calculated at {{interest}} % interest (effective {{effectiveInterest}} %).',\n loanOptionsDisclaimerMileage:\n 'Calculated on {{interest}} % interest (effective {{effectiveInterest}} %) and an annual mileage of {{mileage}} miles.',\n },\n actions: {\n emailSubject: \"{{hostName}} - I'm interested in {{vehicle}}\",\n openform: 'Open form',\n buyOnline: 'Buy the car online',\n showEmail: 'Show email address',\n showPhoneNumber: 'Show phone number',\n callNumber: 'Call',\n sendEmailTo: 'Send an email to',\n },\n accessories: {\n accessories: 'Accessories',\n accessoriesDescription: 'Accessories suitable for this vehicle.',\n price: 'Cash price',\n oldPrice: 'Previous Price',\n installationCost: 'Installation cost',\n articleNumberShort: 'Art. no.',\n moreInformationAboutAccessory: 'More information about {{accessory}}',\n },\n },\n productCard: {\n price: 'Price',\n privateLeasing: 'Privatleasing',\n },\n search: {\n filter: 'Filter',\n sort: 'Sort',\n showMore: {\n text: 'Show more',\n title: 'Show more results',\n },\n filterButton: {\n text: 'Filter',\n title: 'Show filter',\n },\n sortButton: {\n text: 'Sort',\n title: 'Select sort order',\n },\n searchResult: 'Search Result',\n snackbarNoSearchResults: {\n heading: 'No results',\n body: 'The search returned no results',\n },\n snackBarClearFreeText: {\n heading: 'No results',\n body: 'Clear the free text to see all filters',\n },\n sortOptions: {\n relevance: 'Relevance',\n publishedAsc: 'Published (oldest)',\n publishedDesc: 'Published (latest)',\n priceAsc: 'Price (Lowest)',\n priceDesc: 'Price (Maximum)',\n modelAsc: 'Year model (oldest)',\n modelDesc: 'Year Model (Newest)',\n mileageAsc: 'Mileage (lowest)',\n mileageDesc: 'Mileage (maximum)',\n },\n clearAllFilters: {\n text: 'Clear all filters',\n title: 'Clear all filters',\n },\n showNumberOfCustomUnit: 'Show {{count}} {{unit}}',\n result: {\n singular: 'Car',\n plural: 'Cars',\n },\n freeText: 'Free text',\n from: 'From',\n to: 'To',\n min: 'Min',\n max: 'Max',\n },\n searchBar: {\n title: 'Search',\n placeholder: 'Search your car',\n button: {\n text: 'Search',\n title: 'Search',\n },\n searchResults: 'Search Results',\n showAllRsults: 'Show all cars',\n },\n other: {\n loading: 'Loading...',\n error404: '404',\n showingNumberOfResults_one: 'Showing {{current}} of {{count}} results',\n showingNumberOfResults_other: 'Showing {{current}} of {{count}} results',\n closeModal: 'Close Modal',\n closePanel: 'Close panel',\n goToHeading: 'Go to {{heading}}',\n openDoumentt: 'Open {{document}}',\n previousImage: 'Previous Image',\n nextImage: 'Next Image',\n goToImageIndex: 'Go to image {{index}}',\n phoneNumber: 'Phone Number',\n showPhoneNumber: 'Show phone number',\n callPhoneNumber: 'Call {{phoneNumber}}',\n price: 'Price',\n privateLeasingPrice: 'Private Leasing',\n video: 'Video',\n playVideo: 'Play video',\n searchResults: 'Search Results',\n showAllCars: 'Show all cars',\n },\n },\n },\n },\n },\n () => {\n resolve(true);\n }\n );\n });\n};\n", "import React, { useMemo, useRef, useCallback, useState, useEffect } from 'react';\nimport WaykeEcomWeb from '@wayke-se/ecom-web';\n\nimport Container from '../../components/Container';\nimport UspList, { ItemProps } from '../../components/UspList';\nimport { Repeat, RepeatSmall } from '../../components/Repeat';\nimport PriceTable from '../../components/PriceTable';\nimport LogoBox from '../../components/LogoBox';\nimport Content from '../../components/Content';\nimport Blockquote from '../../components/Blockquote';\nimport ExtendContent from '../../components/ExtendContent';\nimport Gallery from '../../components/Gallery';\nimport { Page, PageSection } from '../../components/Page';\nimport {\n ProductPage,\n ProductPageMainSection,\n ProductPageAside,\n ProductPageMain,\n ProductPageAsideSection,\n} from '../../components/ProductPage';\nimport { H1, H2 } from '../../components/Heading';\nimport { ButtonPrimary, ButtonContent, ButtonInlineLight } from '../../components/Button';\nimport { UtilityFontSizeSmall } from '../../components/Utility';\nimport { IconChevronLeft } from '../../components/Icon';\nimport useSearchItem from '../../hooks/useSearchItem';\nimport { notEmpty, numberSeparator, dateTimeFormat } from '../../utils/formats';\nimport { PortalNamespace, PortalElement } from '../../components/Portal';\nimport FinancialOptions from '../../components/FinancialOptions';\nimport InsuranceOptions from '../../components/InsuranceOptions';\nimport ManufacturerPackageOption from './ManufacturerPackagesOption';\nimport CheckList from './CheckList';\nimport Related from './Related';\nimport PackageOptions from './PackageOptions';\nimport Branch from './Branch';\nimport useCentralStorage from '../../State/CentralStorage/useCentralStorage';\nimport Page404 from './Page404';\nimport PageLoading from './PageLoading';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport Property from './Property';\nimport DemoCarModal from './DemoCarModal';\nimport useSettings from '../../State/Settings/useSettings';\nimport Documents from './Documents';\nimport AccessoriesSection from './Accessories';\nimport { MarketCode } from '../../@types/market';\nimport useInitializeTranslation from '../../hooks/useInitializeTranslation';\nimport i18next from 'i18next';\n\nexport interface WaykeSearchItemProps {\n marketCode?: MarketCode;\n id: string;\n hashRoute?: boolean;\n pathRoute?: string;\n disableResetScrollOnInit?: boolean;\n placeholderImage?: string;\n modifyDocumentTitleItem?: boolean;\n displayBranchName?: boolean;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst WaykeSearchItem = ({\n marketCode,\n id,\n hashRoute,\n pathRoute,\n disableResetScrollOnInit,\n placeholderImage,\n modifyDocumentTitleItem,\n displayBranchName,\n onClickSearchItem,\n}: WaykeSearchItemProps) => {\n const initialized = useInitializeTranslation(marketCode);\n const { ecomSettings } = useSettings();\n const ecomContext = useRef<WaykeEcomWeb | undefined>();\n const { loading, data: result } = useSearchItem(id);\n const { vehicle: centralStorageVehicle, loading: loadingCentralStorageVehicle } =\n useCentralStorage(result?.vehicle);\n\n const [demoCarModal, setDemoCarModal] = useState(false);\n const onToggleDemoCarModal = useCallback(() => setDemoCarModal(!demoCarModal), [demoCarModal]);\n\n useEffect(() => {\n if (ecomSettings) {\n ecomContext.current = new WaykeEcomWeb({\n id,\n ecomSdkConfig: {\n api: {\n address: ecomSettings.url,\n },\n bankIdThumbprint: ecomSettings?.bankIdThumbprint,\n },\n logo: ecomSettings.serviceLogotypeUrl,\n logoX2: ecomSettings.serviceLogotypeUrl,\n onEvent(view, event, currentStep?, data?) {\n PubSub.publish('EcomOnUserEvent', view, event, currentStep, data);\n },\n });\n }\n return () => {\n if (ecomContext.current) {\n ecomContext.current.destroy();\n }\n };\n }, []);\n\n useEffect(() => {\n if (!disableResetScrollOnInit) {\n window.scrollTo(0, 0);\n }\n }, []);\n\n useEffect(() => {\n if (result?.vehicle?.data && modifyDocumentTitleItem) {\n const { vehicle } = result;\n const { registrationNumber } = vehicle.data;\n document.title = `${registrationNumber} | ${vehicle.title} | ${vehicle.shortDescription}`;\n }\n }, [result]);\n\n const options = useMemo(\n () => result?.vehicle?.data?.options?.filter(notEmpty).map((opt) => ({ title: opt })),\n [result?.vehicle?.data?.options]\n );\n\n const onShowMoreOptionsClick = useCallback(() => PubSub.publish('OptionsClick'), []);\n\n if (!initialized) return null;\n\n if (loading) {\n return <PageLoading />;\n }\n\n if (!result?.vehicle?.data) {\n return <Page404 />;\n }\n\n const { vehicle } = result;\n const contact = centralStorageVehicle?.contact;\n const branch = centralStorageVehicle?.branch;\n const {\n title,\n accessories,\n shortDescription,\n media,\n description,\n price,\n discount,\n financialOptions,\n manufacturer,\n ecommerce,\n packageOptions,\n publishedAt,\n documents,\n availableFrom,\n flags,\n } = vehicle;\n const insuranceOptions = centralStorageVehicle?.insuranceOptions\n ? centralStorageVehicle.insuranceOptions\n : vehicle.insuranceOptions;\n const { fuelType, mileage, odometerReading, gearbox, modelYear, propertySet } = vehicle.data;\n\n const uspList: ItemProps[] = [\n {\n title: modelYear,\n },\n ];\n\n if (flags?.demoVersion) {\n uspList.push({\n title: i18next.t('item.demoCar'),\n onClick: onToggleDemoCarModal,\n });\n }\n\n uspList.push({\n title: `${numberSeparator(odometerReading?.value || mileage)} ${i18next.t(\n `odometer.${odometerReading?.unit || 'ScandinavianMile'}`\n )}`,\n });\n\n if (gearbox) {\n uspList.push({ title: gearbox });\n }\n\n if (fuelType) {\n uspList.push({ title: fuelType });\n }\n\n return (\n <>\n <Page>\n <PageSection large>\n <Container>\n <ProductPage>\n <ProductPageAside>\n <ProductPageAsideSection mobileOrder={1}>\n {!pathRoute && hashRoute ? (\n <Repeat>\n <UtilityFontSizeSmall>\n <ButtonInlineLight\n as=\"a\"\n href=\"#\"\n title={i18next.t('navigation.backToSearch')}\n >\n <ButtonContent>\n <IconChevronLeft block />\n </ButtonContent>\n <ButtonContent>{i18next.t('navigation.backToSearch')}</ButtonContent>\n </ButtonInlineLight>\n </UtilityFontSizeSmall>\n </Repeat>\n ) : null}\n {manufacturer?.logotype && (\n <Repeat>\n <LogoBox logo={manufacturer.logotype} alt={manufacturer.name} />\n </Repeat>\n )}\n <Repeat>\n <RepeatSmall>\n <H1 noMargin>{title}</H1>\n </RepeatSmall>\n {shortDescription && (\n <RepeatSmall>\n <div>{shortDescription}</div>\n </RepeatSmall>\n )}\n <RepeatSmall>\n <UspList small items={uspList} />\n </RepeatSmall>\n </Repeat>\n </ProductPageAsideSection>\n\n <ProductPageAsideSection mobileOrder={2}>\n <PriceTable price={price} discount={discount || undefined} />\n </ProductPageAsideSection>\n\n {(financialOptions.length > 0 || insuranceOptions.length > 0) && (\n <ProductPageAsideSection mobileOrder={4}>\n {financialOptions.length > 0 && (\n <FinancialOptions id={id} financialOptions={financialOptions} />\n )}\n {insuranceOptions.length > 0 && (\n <InsuranceOptions\n id={id}\n branch={centralStorageVehicle?.branch}\n insuranceOptions={insuranceOptions}\n />\n )}\n </ProductPageAsideSection>\n )}\n\n <ProductPageAsideSection mobileOrder={5}>\n <CheckList\n manufacturer={manufacturer}\n packageOptions={packageOptions}\n ecommerce={ecommerce}\n branch={branch}\n contact={centralStorageVehicle?.contact}\n loadingCentralStorageVehicle={loadingCentralStorageVehicle}\n availableFrom={availableFrom}\n toggleEcomModal={() => ecomContext.current?.start()}\n />\n </ProductPageAsideSection>\n </ProductPageAside>\n <ProductPageMain>\n <ProductPageAsideSection mobileOrder={3}>\n <Gallery media={media} placeholderImage={placeholderImage} />\n </ProductPageAsideSection>\n\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{i18next.t('item.carData')}</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>{i18next.t('item.carDataDescription')}</p>\n </Content>\n </Repeat>\n <Repeat>\n <Property propertySet={propertySet} vehicleData={vehicle.data} />\n </Repeat>\n </ProductPageMainSection>\n {description && (\n <ProductPageMainSection>\n <Blockquote\n author={contact && contact.name ? contact.name : null}\n date={\n publishedAt\n ? dateTimeFormat.format(publishedAt, dateTimeFormat.DayMonth)\n : undefined\n }\n avatar={contact?.avatar || undefined}\n >\n {!!description && <p>{description}</p>}\n </Blockquote>\n </ProductPageMainSection>\n )}\n\n {(options?.length || 0) > 0 && (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{i18next.t('item.equipment')}</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>{i18next.t('item.equipmentDescription')}</p>\n </Content>\n </Repeat>\n <Repeat>\n <ExtendContent\n actionTitle={i18next.t('common.showMore')}\n onClick={onShowMoreOptionsClick}\n >\n <UspList items={options} />\n </ExtendContent>\n </Repeat>\n </ProductPageMainSection>\n )}\n\n <Documents documents={documents} />\n\n <AccessoriesSection accessories={accessories} />\n\n <ProductPageMainSection>\n <Branch\n branch={branch}\n displayBranchName={displayBranchName}\n loading={loadingCentralStorageVehicle}\n />\n {ecommerce && ecommerce.enabled && (\n <Repeat>\n <ButtonPrimary\n disabled={!!ecommerce.reserved}\n title=\"K\u00F6p bilen online\"\n onClick={() => ecomContext.current?.start()}\n >\n K\u00F6p bilen online\n </ButtonPrimary>\n </Repeat>\n )}\n </ProductPageMainSection>\n\n <PackageOptions packageOptions={packageOptions} />\n <ManufacturerPackageOption packageOption={manufacturer?.packageOption} />\n </ProductPageMain>\n </ProductPage>\n </Container>\n </PageSection>\n <Related\n id={id}\n hashRoute={hashRoute}\n pathRoute={pathRoute}\n authorizedReseller={!!branch?.flags?.authorizedReseller}\n displayBranchName={displayBranchName}\n onClickSearchItem={onClickSearchItem}\n />\n </Page>\n <PortalElement id={PortalNamespace.DefaultPortal} />\n {demoCarModal && <DemoCarModal onClose={onToggleDemoCarModal} />}\n </>\n );\n};\n\nexport default WaykeSearchItem;\n", "import React from 'react';\n\nimport { List, Item, Value, Label } from './wrapper';\nimport { VisualHeading } from '../Heading';\nimport { Price, OldPrice } from '../Price';\nimport { numberSeparator } from '../../utils/formats';\nimport { useTranslation } from 'react-i18next';\n\ninterface PriceTableProps {\n price: number;\n discount?: number;\n}\n\nconst PriceTable = ({ price, discount }: PriceTableProps) => {\n const { t } = useTranslation();\n return (\n <List>\n <Item>\n <Label>\n <VisualHeading>{t('other.price')}</VisualHeading>\n </Label>\n <Value>\n <Price>\n {numberSeparator(price)} {t('currency.default')}\n </Price>\n </Value>\n </Item>\n {discount !== undefined && (\n <Item>\n <Label />\n <Value>\n <OldPrice>\n {numberSeparator(price + discount)} {t('currency.default')}\n </OldPrice>\n </Value>\n </Item>\n )}\n </List>\n );\n};\n\nexport default PriceTable;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n display: flex;\n align-items: flex-end;\n line-height: 1;\n\n & + & {\n margin-top: ${size(0.5)};\n }\n`;\n\nexport const Label = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Value = styled.div`\n flex-shrink: 0;\n`;\n", "import styled from 'styled-components';\n\nexport const Price = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n font-size: 1.375rem;\n`;\n\nexport const OldPrice = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n text-decoration: line-through;\n`;\n", "import * as React from 'react';\n\nimport { Logo } from './wrapper';\n\ninterface ILogoBox {\n logo: string;\n logo2x?: string | null;\n alt?: string;\n wide?: boolean;\n}\n\nconst LogoBox = ({ logo, logo2x, alt, wide }: ILogoBox) => {\n let logoRetina = logo;\n\n if (logo2x) {\n logoRetina = `${logo2x} 2x`;\n }\n\n return <Logo src={logo} srcSet={logoRetina} alt={alt} wide={wide} />;\n};\n\nexport default LogoBox;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype LogoProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n wide?: boolean;\n};\n\nexport const Logo = styled.img<LogoProps>`\n display: block;\n max-width: ${size(9.5)};\n max-height: ${size(6)};\n\n ${({ wide }) =>\n wide &&\n css`\n max-width: ${size(20)};\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n small?: boolean;\n};\n\nconst Content = ({ children, small, dangerouslySetInnerHTML }: Props) => (\n <Wrapper small={small} dangerouslySetInnerHTML={dangerouslySetInnerHTML}>\n {children}\n </Wrapper>\n);\n\nexport default Content;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n small?: boolean;\n};\n\nexport const Wrapper = styled.div<WrapperProps>`\n font-size: 1rem;\n line-height: 1.5;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: ${size(4)};\n margin-bottom: ${size(1)};\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n\n & + p,\n & + table {\n margin-top: ${size(1)};\n }\n }\n\n p {\n margin: ${size(2)} 0;\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n }\n\n img {\n display: block;\n width: 100%;\n }\n\n ${({ small }) =>\n small &&\n css`\n font-size: 0.875rem;\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper, Quote, Author, AvatarWrapper, Info, Name, Date } from './wrapper';\nimport Avatar from '../Avatar';\n\ninterface Props {\n children: React.ReactNode;\n author?: string | null;\n avatar?: string;\n date?: string;\n}\n\nconst Blockquote = ({ children, author, avatar, date }: Props) => (\n <Wrapper>\n <Quote>{children}</Quote>\n {author && (\n <Author>\n {avatar && (\n <AvatarWrapper>\n <Avatar image={avatar} alt={`${author} avatar`} />\n </AvatarWrapper>\n )}\n <Info>\n <Name>{author}</Name>\n {date && <Date>{date}</Date>}\n </Info>\n </Author>\n )}\n </Wrapper>\n);\n\nexport default Blockquote;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.blockquote`\n display: flex;\n flex-direction: column;\n max-width: 600px;\n margin: 0 auto;\n\n ${(props) => props.theme.breakpoint.Sm} {\n align-items: center;\n }\n`;\n\nexport const Quote = styled.div`\n > * {\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n }\n`;\n\nexport const Author = styled.footer`\n display: inline-flex;\n align-items: center;\n margin-top: ${size(3)};\n\n ${(props) => props.theme.breakpoint.Md} {\n margin-top: ${size(4)};\n }\n`;\n\nexport const AvatarWrapper = styled.div`\n flex-shrink: 0;\n padding-right: ${size(1.5)};\n`;\n\nexport const Info = styled.div`\n flex: 1 1 auto;\n font-size: 0.875rem;\n`;\n\nexport const Name = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n\nexport const Date = styled.div``;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n image: string;\n alt?: string;\n}\n\nconst Avatar = ({ image, alt }: Props) => <Wrapper image={image} aria-label={alt} />;\n\nexport default Avatar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface Wrapper {\n image: string;\n}\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'image',\n}))<Wrapper>`\n display: block;\n width: ${size(5)};\n height: ${size(5)};\n border-radius: 50%;\n background-image: ${(props): string => `url(${props.image})`};\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n background-color: ${(props) => props.theme.color.accent};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Extend, Action } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button';\n\ninterface Props {\n children: React.ReactNode;\n actionTitle: string;\n onClick?: () => void;\n}\n\nconst ExtendContent = ({ children, actionTitle, onClick }: Props) => {\n const [extend, setExtend] = useState(false);\n const onExtend = useCallback(() => {\n setExtend(true);\n if (onClick) {\n onClick();\n }\n }, []);\n\n const onRef = (ref: HTMLDivElement | null) => {\n const refHeight = ref?.clientHeight || 0;\n\n if (refHeight < 207) {\n setExtend(true);\n }\n };\n\n return (\n <Wrapper ref={onRef}>\n <Extend extended={extend}>{children}</Extend>\n {!extend && (\n <Action>\n <ButtonClear onClick={onExtend} title={actionTitle}>\n <ButtonContent>{actionTitle}</ButtonContent>\n </ButtonClear>\n </Action>\n )}\n </Wrapper>\n );\n};\n\nexport default ExtendContent;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\ntype ExtendProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n extended?: boolean;\n};\n\nexport const Extend = styled.div<ExtendProps>`\n position: relative;\n max-height: 175px;\n overflow: hidden;\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: ${size(6)};\n background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));\n }\n\n ${({ extended }) =>\n extended &&\n css`\n max-height: none;\n\n :after {\n content: none;\n }\n `}\n`;\n\nexport const Action = styled.div`\n display: flex;\n justify-content: flex-end;\n margin-top: ${size(2)};\n`;\n", "import React, { useState, useCallback, useRef, useMemo } from 'react';\nimport SliderComponent from 'react-slick';\nimport scrollIntoView from 'scroll-into-view-if-needed';\n\nconst Slider: typeof SliderComponent = (\n SliderComponent as unknown as { default: typeof SliderComponent }\n).default;\n\nimport {\n Wrapper,\n SliderWrapper,\n Item,\n Image,\n ArrowLeft,\n ArrowRight,\n Main,\n Alt,\n QuickNav,\n QuickNavItem,\n QuickNavBtn,\n QuickNavImg,\n EnableNavigationButton,\n} from './wrapper';\nimport { IconChevronLeft, IconChevronRight } from '../Icon';\nimport { ButtonSecondary, ButtonContent } from '../Button';\nimport { NavButton } from '../NavButton';\nimport Lightbox from '../Lightbox';\nimport EmbededVideo from '../Video/EmbededVideo';\nimport QuickNavEmbeded from '../Video/QuickNavEmbeded';\nimport Sphere from '../Sphere/Sphere';\nimport { notEmpty } from '../../utils/formats';\nimport ThreeSixty from '../ThreeSixty/ThreeSixty';\nimport { Media } from '../../@types/codegen/types';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { DEFAULT_PLACEHOLDER_IMAGE } from '../../utils/constants';\nimport { useTranslation } from 'react-i18next';\n\ninterface GalleryProps {\n media?: Media[];\n placeholderImage?: string;\n}\n\nconst sliderSettings = {\n dots: false,\n arrows: false,\n infinite: true,\n speed: 300,\n slidesToShow: 1,\n slidesToScroll: 1,\n};\n\nconst Gallery = ({ media, placeholderImage }: GalleryProps) => {\n const { t } = useTranslation();\n const slider = useRef<SliderComponent>(null);\n const quickNavRef = useRef<HTMLUListElement>(null);\n const isDragging = useRef(false);\n const [index, setIndex] = useState(0);\n const [lightbox, setLightbox] = useState(false);\n const [navigationDisabled, setNavigationDisabled] = useState(false);\n\n const beforeChange = useCallback((_: number, newIndex: number) => {\n const element = quickNavRef.current?.querySelectorAll('li')?.[newIndex];\n if (element) {\n scrollIntoView(element, { scrollMode: 'if-needed', block: 'nearest', inline: 'nearest' });\n }\n setIndex(newIndex);\n }, []);\n\n const onMouseDown = useCallback(() => {\n if (isDragging.current) {\n isDragging.current = false;\n }\n }, []);\n const onMouseMove = useCallback(() => {\n if (!isDragging.current) {\n isDragging.current = true;\n }\n }, []);\n\n const onClick = useCallback(() => {\n PubSub.publish('ImagesClick');\n if (!isDragging.current && !lightbox && !!media?.length) {\n setLightbox(true);\n }\n }, [lightbox, media]);\n\n const nextImage = useCallback((): void => {\n if (!slider || !slider.current) {\n return;\n }\n slider.current.slickNext();\n }, [slider]);\n\n const prevImage = useCallback((): void => {\n if (!slider || !slider.current) {\n return;\n }\n slider.current.slickPrev();\n }, [slider]);\n\n const goTo = (target: number) => {\n if (!slider || !slider.current) {\n return;\n }\n if (slider.current) {\n setIndex(target);\n slider.current.slickGoTo(target);\n }\n };\n\n const onDisableNavigation = () => {\n if (!isDragging.current) setNavigationDisabled(true);\n };\n const onEnableNavigation = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.stopPropagation();\n isDragging.current = false;\n setNavigationDisabled(false);\n };\n\n const onToggleLightbox = useCallback(() => setLightbox(!lightbox), [lightbox]);\n\n const mediaLength = media?.length || 0;\n const placeholder = useMemo(\n () => placeholderImage || DEFAULT_PLACEHOLDER_IMAGE,\n [placeholderImage]\n );\n\n return (\n <>\n <Wrapper>\n <Main>\n <SliderWrapper onMouseDown={onMouseDown} onMouseMove={onMouseMove} onClick={onClick}>\n <Slider\n {...sliderSettings}\n swipe={!navigationDisabled}\n touchMove={!navigationDisabled}\n swipeToSlide={!navigationDisabled}\n ref={slider}\n beforeChange={beforeChange}\n >\n {!!media?.length ? (\n media.map((m, i) => (\n <Item key={m.files[0].url || i}>\n {m.type === 'image' && (\n <Image\n src={\n m.files[0].formats.filter(notEmpty).find((x) => x.format === '1170x')?.url\n }\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n {m.type === 'threesixty' && (\n <ThreeSixty\n urls={m.files.map((x) => x.url)}\n visible={i === index}\n onDisableNavigation={onDisableNavigation}\n navigationDisabled={navigationDisabled}\n />\n )}\n {m.type === 'embedded' && <EmbededVideo src={m.files[0].url} index={i + 1} />}\n {m.type === 'sphere' && (\n <Sphere\n visible={i === index}\n url={m.files[0].url}\n preview={m.files[0].url}\n onDisableNavigation={onDisableNavigation}\n navigationDisabled={navigationDisabled}\n />\n )}\n </Item>\n ))\n ) : (\n <Item key={placeholder}>\n <Image src={placeholder} alt={t('common.imageIndex', { index: 1 }) || ''} />\n </Item>\n )}\n </Slider>\n {navigationDisabled && mediaLength > 1 && (\n <EnableNavigationButton>\n <ButtonSecondary onClick={onEnableNavigation} title={t('common.close') || ''}>\n <ButtonContent>{t('common.close')}</ButtonContent>\n </ButtonSecondary>\n </EnableNavigationButton>\n )}\n </SliderWrapper>\n {!navigationDisabled && mediaLength > 1 && (\n <>\n <ArrowLeft>\n <NavButton onClick={prevImage} title={t('other.previousImage') || ''}>\n <IconChevronLeft block />\n </NavButton>\n </ArrowLeft>\n <ArrowRight>\n <NavButton onClick={nextImage} title={t('other.nextImage') || ''}>\n <IconChevronRight block />\n </NavButton>\n </ArrowRight>\n </>\n )}\n </Main>\n <Alt>\n <QuickNav ref={quickNavRef}>\n {!!media?.length ? (\n media.map((m, i) => {\n const src =\n m.files[0].formats.filter(notEmpty).find((x) => x.format === '225x150')?.url ||\n m.files[0].url;\n return (\n <QuickNavItem key={src || i} active={index === i}>\n <QuickNavBtn\n onClick={() => goTo(i)}\n title={t('other.goToImageIndex', { index: i + 1 }) || ''}\n >\n {m.type === 'image' && (\n <QuickNavImg\n src={src}\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n {m.type === 'threesixty' && (\n <QuickNavImg\n src={src}\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n {m.type === 'embedded' && <QuickNavEmbeded src={src} index={i} />}\n {m.type === 'sphere' && (\n <QuickNavImg\n src={m.files[0].url}\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n </QuickNavBtn>\n </QuickNavItem>\n );\n })\n ) : (\n <QuickNavItem key={placeholder} active>\n <QuickNavBtn\n onClick={() => goTo(0)}\n title={t('other.goToImageIndex', { index: 1 }) || ''}\n >\n <QuickNavImg src={placeholder} alt={t('common.imageIndex', { index: 1 }) || ''} />\n </QuickNavBtn>\n </QuickNavItem>\n )}\n </QuickNav>\n </Alt>\n </Wrapper>\n {lightbox && !!media?.length && (\n <Lightbox media={media} index={index} onClose={onToggleLightbox} />\n )}\n </>\n );\n};\n\nexport default Gallery;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\nimport { Wrapper as Container } from '../Container/wrapper';\n\nconst quickNavWidth = 83; // 75px + 8px\n\nexport const Wrapper = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n ${Container} & {\n margin-left: ${size(-3)};\n margin-right: ${size(-3)};\n }\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n ${Container} & {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n position: relative;\n padding-right: ${quickNavWidth}px;\n }\n`;\n\nexport const Main = styled.div`\n position: relative;\n height: 0;\n padding-bottom: 66.66666667%;\n\n ${(props) => props.theme.breakpoint.Md} {\n //background-color: ${(props) => props.theme.color.accent};\n }\n\n .slick-slider,\n .slick-list,\n .slick-track,\n .slick-slide,\n .slick-slide > * {\n height: 100%;\n }\n\n .slick-slide > * {\n font-size: 0;\n\n > * {\n font-size: 1rem;\n }\n }\n`;\n\nexport const Alt = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n width: ${quickNavWidth}px;\n padding-left: ${size(1)};\n\n ${(props) => props.theme.breakpoint.LtMd} {\n display: none;\n }\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: ${size(2.5)};\n background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));\n pointer-events: none;\n }\n`;\n\nexport const Item = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n\n :focus {\n outline: none;\n }\n\n ${(props) => props.theme.breakpoint.LtMd} {\n //background-color: ${(props) => props.theme.color.textDark};\n transition: border-radius 150ms ease;\n }\n`;\n\nexport const SliderWrapper = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n\n .slick-slider {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n\n ${(props) => props.theme.breakpoint.LtMd} {\n overflow: hidden;\n\n .slick-list {\n overflow: visible;\n width: 95%;\n }\n\n .slick-slide {\n border-right: ${size(1)} solid ${(props) => props.theme.color.bg};\n //transform: scale(0.95);\n transform-origin: 0 50%;\n transition: transform 150ms ease;\n }\n\n .slick-slide.slick-active {\n transform: none;\n\n ${Item} {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n }\n`;\n\nexport const Image = styled.img`\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n object-fit: cover;\n cursor: pointer;\n`;\n\nexport const ImageFull = styled.img`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\n// Arrow Nav\n\nconst Arrow = styled.div`\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n\n ${(props) => props.theme.breakpoint.LtSm} {\n display: none;\n }\n`;\n\nexport const ArrowLeft = styled(Arrow)`\n left: ${size(2)};\n`;\n\nexport const ArrowRight = styled(Arrow)`\n right: ${size(2)};\n`;\n\n// Quick Nav\n\nexport const QuickNav = styled.ul`\n position: relative;\n max-height: 100%;\n list-style: none;\n padding: 0;\n margin: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n\ntype QuickNavItemProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLLIElement>,\n HTMLLIElement\n> & {\n active?: boolean;\n};\n\nexport const QuickNavItem = styled.li.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))<QuickNavItemProps>`\n position: relative;\n\n & + & {\n margin-top: ${size(1)};\n }\n\n ${({ active }) =>\n active &&\n css`\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 3px solid currentColor;\n z-index: 2;\n }\n `}\n`;\n\nexport const QuickNavBtn = styled(ButtonReset)`\n position: relative;\n display: block;\n width: 100%;\n height: 0;\n padding-bottom: 66.66666667%; // 3:2\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.15);\n opacity: 0;\n z-index: 1;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const QuickNavImg = styled.img`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\n// Media Button\n\nexport const MediaButtonWrapper = styled.div`\n position: absolute;\n bottom: ${size(2)};\n left: 50%;\n transform: translateX(-50%);\n z-index: 1;\n`;\n\n// Sphere Close Button\n\nexport const EnableNavigationButton = styled.div`\n position: absolute;\n bottom: ${size(2)};\n left: 50%;\n transform: translateX(-50%);\n z-index: 1;\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const NavButton = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(4)};\n height: ${size(4)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.bg};\n color: ${(props) => props.theme.color.textDark};\n font-size: 0.75rem;\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);\n transition: transform 200ms ease;\n\n &::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 50%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n &:enabled {\n &:hover {\n &::before {\n opacity: 1;\n }\n }\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n", "import React from 'react';\n\nimport { Wrapper, UiBlock, Item, Img, CloseBtn } from './wrapper';\nimport { IconCancel } from '../Icon';\nimport EmbeddedVideoLightbox from '../Video/EmbeddedVideoLightbox';\nimport SphereLightbox from '../Sphere/SphereLightbox';\nimport ThreeSixtyLightbox from '../ThreeSixty/ThreeSixtLightbox';\nimport { Media } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface LightboxProps {\n index: number;\n media: Media[];\n onClose: () => void;\n}\n\nconst Lightbox = ({ index, media, onClose }: LightboxProps) => {\n const { t } = useTranslation();\n const onRef = (ref: HTMLDivElement | null) => {\n if (ref) {\n setTimeout(() => {\n ref.scrollIntoView();\n }, 300);\n }\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.keyCode === 27) {\n onClose();\n }\n };\n\n return (\n <Wrapper ref={(ref) => ref?.focus()} onKeyDown={onKeyDown} tabIndex={0}>\n <UiBlock onClick={onClose} aria-hidden />\n {media.map((m, i) => (\n <Item key={i} ref={index === i ? onRef : undefined}>\n {m.type === 'image' && (\n <Img\n id={`lightbox-image-${i}`}\n src={m.files[0].url}\n alt={t('common.imageIndex', { index: i + 1 }) || ''}\n />\n )}\n {m.type === 'threesixty' && <ThreeSixtyLightbox urls={m.files.map((x) => x.url)} />}\n {m.type === 'sphere' && <SphereLightbox url={m.files[0].url} />}\n {m.type === 'embedded' && <EmbeddedVideoLightbox url={m.files[0].url} />}\n </Item>\n ))}\n <CloseBtn onClick={onClose} title={t('common.close') || ''}>\n <IconCancel block />\n </CloseBtn>\n </Wrapper>\n );\n};\n\nexport default Lightbox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const Wrapper = styled.div`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n padding: ${size(3)};\n z-index: 90;\n overflow: auto;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: ${size(2)};\n }\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.3);\n z-index: -1;\n`;\n\nexport const Item = styled.div`\n position: relative;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Img = styled.img`\n position: relative;\n display: block;\n max-width: 100%;\n max-height: calc(100vh - ${size(6)});\n margin: 0 auto;\n z-index: 1;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n max-height: calc(100vh - ${size(4)});\n }\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n top: ${size(2)};\n right: ${size(2)};\n width: ${size(5)};\n height: ${size(5)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.bg};\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transform-origin: 50% 50%;\n transition: 200ms ease, transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n z-index: 1;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.97);\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n top: ${size(1)};\n right: ${size(1)};\n }\n`;\n", "import React from 'react';\n\nimport YouTubePlayer from './YoutubePlayer';\nimport VimeoPlayer from './VimeoPlayer';\nimport CustomPlayer from '../Video/CustomPlayer';\n\nconst ytNames = ['youtube.com', 'youtu.be'];\nconst isYouTubeVideo = (url: string): boolean =>\n ytNames.some((host: string): boolean => url.indexOf(host) >= 0);\n\nconst vNames = ['vimeo.com'];\nconst isVimeoVideo = (url: string): boolean =>\n vNames.some((host: string): boolean => url.indexOf(host) >= 0);\n\ntype PropsType = {\n url: string;\n autoplay?: boolean;\n controls?: boolean;\n};\n\nconst VideoPlayer = ({ url, autoplay = false, controls = true }: PropsType) => {\n if (!url) return null;\n\n if (isYouTubeVideo(url)) return <YouTubePlayer url={url} autoplay={autoplay} />;\n\n if (isVimeoVideo(url)) return <VimeoPlayer url={url} autoplay={autoplay} />;\n\n return <CustomPlayer ratio=\"56.25%\" controls={controls} url={url} />;\n};\n\nexport default VideoPlayer;\n", "import React from 'react';\nimport { getYouTubeId } from './utils';\n\nimport { Wrapper, Iframe } from './wrapper';\n\ntype PropsType = {\n url: string;\n autoplay: boolean;\n};\n\nconst YouTubePlayer = ({ url, autoplay }: PropsType) => (\n <Wrapper>\n <Iframe\n src={`https://www.youtube.com/embed/${getYouTubeId(url)}?&enablejsapi=1&?rel=0${\n autoplay ? '&autoplay=1' : ''\n }`}\n />\n </Wrapper>\n);\n\nexport default YouTubePlayer;\n", "export const getVimeoId = (url: string): string => {\n const regExp = /\\/(\\d+)/;\n const match = url.match(regExp);\n return match && match[1].length > 3 ? match[1] : '';\n};\n\nexport const getYouTubeId = (url: string): string => {\n const regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*/;\n const match = url.match(regExp);\n return match && match[7].length === 11 ? match[7] : '';\n};\n\nconst youtubeBase = 'https://img.youtube.com/vi/';\nexport const getYoutubeThumbnail = (url: string) => {\n const id = getYouTubeId(url);\n if (!id) {\n return undefined;\n }\n return {\n maxresdefault: `${youtubeBase}${id}/maxresdefault.jpg`,\n hqdefault: `${youtubeBase}${id}/hqdefault.jpg`,\n mqdefault: `${youtubeBase}${id}/mqdefault.jpg`,\n };\n};\n\nexport const onImageLoad = (\n e: React.SyntheticEvent<HTMLImageElement, Event>,\n thumbnail?: string[]\n) => {\n if (\n thumbnail?.length === 2 &&\n e.currentTarget.src === thumbnail[0] &&\n e.currentTarget.naturalWidth === 120 &&\n e.currentTarget.naturalHeight === 90\n ) {\n e.currentTarget.src = thumbnail[1];\n }\n};\n\nexport const onImageError = (\n e: React.SyntheticEvent<HTMLImageElement, Event>,\n thumbnail?: string[]\n) => {\n if (thumbnail?.length === 2) {\n e.currentTarget.src = thumbnail[1];\n }\n};\n", "import styled from 'styled-components';\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n ratio?: string;\n isPreview?: boolean;\n};\n\nexport const Wrapper = styled.div<WrapperProps>`\n position: relative;\n width: 100%;\n height: ${(props) => (props.isPreview ? '100%' : 0)};\n padding-bottom: ${(props): string => (props.ratio ? props.ratio : '56.25%')};\n`;\n\nexport const Iframe = styled.iframe.attrs(() => ({\n width: '100%',\n height: '100%',\n allowFullScreen: true,\n frameBorder: '0',\n}))`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n`;\n", "import React from 'react';\nimport { getVimeoId } from './utils';\n\nimport { Wrapper, Iframe } from './wrapper';\n\ntype PropsType = {\n url: string;\n autoplay: boolean;\n};\n\nconst VimeoPlayer = ({ url, autoplay }: PropsType) => (\n <Wrapper>\n <Iframe\n src={`https://player.vimeo.com/video/${getVimeoId(url)}?${\n autoplay ? '&autoplay=1' : ''\n }&loop=0&autopause=0`}\n />\n </Wrapper>\n);\n\nexport default VimeoPlayer;\n", "import React from 'react';\nimport { Wrapper } from './wrapper';\nimport Video from './Video';\n\ntype PropsType = {\n url?: string;\n modal?: boolean;\n controls?: boolean;\n ratio?: string;\n isPreview?: boolean;\n};\n\nconst CustomPlayer = ({ url, controls, modal, ratio = '56.25%', isPreview }: PropsType) => {\n return (\n <Wrapper ratio={ratio} isPreview={isPreview}>\n <Video\n key={url}\n modal={modal}\n preload=\"metadata\"\n controls={controls}\n width=\"100%\"\n height=\"100%\"\n src={url}\n />\n </Wrapper>\n );\n};\nexport default CustomPlayer;\n", "import React from 'react';\nimport styled from 'styled-components';\n\ntype VideoProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLVideoElement>,\n HTMLVideoElement\n> & {\n modal?: boolean;\n};\n\nconst Video = styled.video<VideoProps>`\n position: absolute;\n top: 0;\n left: 0;\n object-fit: ${({ modal }) => (modal ? 'contain' : 'cover')};\n`;\n\nexport default Video;\n", "import React from 'react';\nimport SphereViewer from './SphereViewer';\n\ntype PropsType = {\n url: string;\n};\n\nconst SphereLightbox = ({ url }: PropsType) => <SphereViewer id={url} src={url} preview={url} />;\n\nexport default SphereLightbox;\n", "import React, { lazy, useState, useEffect, Suspense } from 'react';\n\nimport { Wrapper } from '../Sphere/wrapper';\nimport Loader from '../Loader';\n\n// Skip loading pannellum with video\nconst Pannellum = lazy(() => import('@wayke-se/pannellum-react'));\n\ntype PropsType = {\n id: string;\n src: string;\n preview: string;\n autoLoad?: boolean;\n onStart?: () => void;\n};\n\nconst SphereViewer = ({ id, src, preview, autoLoad, onStart }: PropsType) => {\n const [number] = useState(Math.floor(100000000 + Math.random() * 900000000));\n useEffect(() => {\n setTimeout(() => {\n if (onStart) {\n const startBtn = document.querySelector('.pnlm-load-button');\n if (startBtn) startBtn.addEventListener('click', onStart);\n }\n }, 100);\n }, []);\n\n return (\n <Wrapper>\n <Suspense fallback={<Loader />}>\n <Pannellum\n id={`a-${id}-${number}`}\n panorama={src}\n hfov={120}\n autoLoad={autoLoad}\n compass\n width={'100%'}\n preview={preview}\n />\n </Suspense>\n </Wrapper>\n );\n};\n\nexport default SphereViewer;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst compassSize = size(4);\nconst controlBtnSize = size(4);\n\nexport const Wrapper = styled.div`\n width: 100%;\n height: 0 !important;\n padding-bottom: 66.666% !important; // 3:2\n\n .pnlm-container {\n background-image: none;\n background-color: ${(props) => props.theme.color.accentDark};\n }\n\n // Compass\n\n .pnlm-compass {\n width: ${compassSize};\n height: ${compassSize};\n border-radius: 50%;\n bottom: ${size(2)};\n left: ${size(2)};\n right: auto;\n margin-top: 0;\n border: 5px solid transparent;\n border-top-color: ${(props) => props.theme.color.textLight};\n background-color: rgba(255, 255, 255, 0.4);\n background-image: none;\n backdrop-filter: blur(5px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n box-sizing: border-box;\n\n &:hover {\n background-color: red;\n }\n }\n\n // Controls (zoom & fullscreen button)\n\n .pnlm-grab,\n .pnlm-grabbing {\n .pnlm-controls-container {\n display: block;\n }\n }\n\n .pnlm-controls-container {\n display: none;\n top: ${size(2)};\n left: ${size(2)};\n }\n\n .pnlm-controls {\n margin-top: 0;\n\n & + .pnlm-controls {\n margin-top: ${size(1)};\n }\n }\n\n // Fullscreen button\n\n .pnlm-fullscreen-toggle-button {\n display: none;\n position: relative;\n width: ${controlBtnSize};\n height: ${controlBtnSize};\n background-image: none;\n background-color: rgba(255, 255, 255, 0.4);\n backdrop-filter: blur(5px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n color: ${(props) => props.theme.color.textDark};\n border: 0;\n border-radius: 50%;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.6);\n }\n\n &:before {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.875rem;\n }\n }\n\n .pnlm-fullscreen-toggle-button-inactive {\n &:before {\n content: '\u2922';\n }\n\n &.pnlm-fullscreen-toggle-button-active {\n &:before {\n content: '\u2922';\n }\n }\n }\n\n // Gyroscope (Orientation)\n\n .pnlm-orientation-button {\n background-image: none;\n width: ${controlBtnSize};\n height: ${controlBtnSize};\n background-color: ${(props) => props.theme.color.accentDark};\n color: ${(props) => props.theme.color.textDark};\n border: 0;\n border-radius: 999px;\n\n &:hover {\n background-color: red;\n }\n\n &:before {\n content: 'A';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.875rem;\n }\n\n &.pnlm-orientation-button-active {\n background-color: green;\n\n &:hover {\n background-color: pink;\n }\n }\n }\n\n // Zoom controls\n\n .pnlm-zoom-controls {\n display: none;\n height: auto;\n width: auto;\n background-color: transparent;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n border: 0;\n border-radius: 999px;\n\n > * {\n &:first-child {\n border-top-left-radius: 999px;\n border-top-right-radius: 999px;\n }\n\n &:last-child {\n border-bottom-left-radius: 999px;\n border-bottom-right-radius: 999px;\n }\n }\n }\n\n .pnlm-zoom-in,\n .pnlm-zoom-out {\n position: relative;\n display: block;\n width: ${controlBtnSize};\n height: ${controlBtnSize};\n background-image: none;\n background-color: rgba(255, 255, 255, 0.4);\n backdrop-filter: blur(5px);\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n\n &:before {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.6);\n }\n }\n\n .pnlm-zoom-in {\n top: auto;\n\n &:before {\n content: '+';\n }\n }\n\n .pnlm-zoom-out {\n bottom: auto;\n border-top: 1px solid ${(props) => props.theme.color.textDark};\n\n &:before {\n content: '-';\n }\n }\n\n // Load Button\n\n .pnlm-load-button {\n top: auto;\n bottom: ${size(2)};\n transform: translateX(-50%);\n width: auto;\n height: auto;\n padding: ${size(1.75)} ${size(2)};\n border-radius: 3px;\n margin: 0;\n background-color: ${(props) => props.theme.color.accentDark};\n color: ${(props) => props.theme.color.textDark};\n line-height: 1.1;\n user-select: none;\n\n &:hover {\n background-color: ${(props) => props.theme.color.accentDark};\n }\n\n p {\n margin: 0;\n font-size: 0.875rem;\n }\n }\n\n // Load box\n\n .pnlm-load-box {\n background-color: transparent;\n height: auto;\n margin: 0;\n width: 150px;\n transform: translate(-50%, -50%);\n\n > p {\n display: none;\n }\n }\n\n // Load bar\n\n .pnlm-lbar {\n width: 100%;\n background-color: rgba(255, 255, 255, 0.4);\n border: 0;\n }\n\n .pnlm-lbar-fill {\n background-color: ${(props) => props.theme.color.textLight};\n }\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Item, Img } from '../Lightbox/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport Rotation from './Rotation';\nimport { useTranslation } from 'react-i18next';\n\ntype PropsType = {\n urls: string[];\n};\n\nconst ThreeSixtyLightbox = ({ urls }: PropsType) => {\n const { t } = useTranslation();\n const [started, setStarted] = useState(false);\n\n const onStart = useCallback(() => setStarted(true), []);\n\n if (!started) {\n return (\n <Item>\n <Img src={urls[0]} alt=\"alt\" />\n <MediaButton text={t('item.start360Exterior')} onClick={onStart} />\n </Item>\n );\n }\n\n return (\n <Rotation>\n {urls.map((image, i) => (\n <Img key={image} src={image} alt={t('common.imageIndex', { index: i + 1 }) || ''} />\n ))}\n </Rotation>\n );\n};\n\nexport default ThreeSixtyLightbox;\n", "import React from 'react';\n\nimport { MediaButtonWrapper } from './wrapper';\nimport { ButtonSecondary, ButtonContent } from '../Button';\n\ninterface MediaButtonProps {\n text: string;\n onClick: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n}\n\nconst MediaButton = ({ text, onClick }: MediaButtonProps) => (\n <MediaButtonWrapper>\n <ButtonSecondary onClick={onClick} title={text}>\n <ButtonContent>{text}</ButtonContent>\n </ButtonSecondary>\n </MediaButtonWrapper>\n);\n\nexport default MediaButton;\n", "import React, { useState, useEffect, useRef, cloneElement, Children } from 'react';\n\nconst calculateCurrentFrame = (startFrame: number, delta: number, length: number): number => {\n const frame = (startFrame + delta) % length;\n if (frame < 0) {\n return frame + length;\n }\n\n return frame;\n};\n\ntype PropsType = {\n children: React.ReactNode;\n};\n\ntype RotationEvent = any;\n\nconst Rotation = ({ children }: PropsType) => {\n const startFrame = useRef(0);\n const pointerPosition = useRef<number>();\n const max = useRef(0);\n\n const [state, setState] = useState({\n current: 0,\n outsideMouseMove: false,\n });\n\n useEffect(() => {\n document.addEventListener('mouseup', touchEnd);\n\n return () => {\n window.document.removeEventListener('mouseup', touchEnd);\n window.document.body.removeEventListener('mousemove', mouseMove);\n window.document.body.removeEventListener('mouseup', mouseUp);\n };\n }, []);\n\n const touchMove = (event: RotationEvent) => {\n const notTouched = typeof pointerPosition.current !== 'number';\n event.preventDefault();\n if (notTouched) {\n return;\n }\n\n const childCount = Children.count(children);\n\n const { offsetWidth } = event.currentTarget;\n const pointer = calculatePointerPosition(event);\n const max = offsetWidth;\n const offset = pointer - (pointerPosition.current || 0);\n const delta = Math.floor((offset / max) * childCount);\n setCurrentFrame(calculateCurrentFrame(startFrame.current, delta, childCount));\n };\n\n const mouseMove = (event: RotationEvent) => {\n const notTouched = typeof pointerPosition.current !== 'number';\n event.preventDefault();\n if (notTouched || !state.outsideMouseMove) return;\n\n const childCount = Children.count(children);\n\n const pointer = calculatePointerPosition(event);\n const offset = pointer - (pointerPosition.current || 0);\n const delta = Math.floor((offset / max.current) * childCount);\n setCurrentFrame(calculateCurrentFrame(startFrame.current, delta, childCount));\n };\n\n const mouseUp = () => {\n window.document.body.removeEventListener('mousemove', mouseMove);\n window.document.body.removeEventListener('mouseup', mouseUp);\n\n pointerPosition.current = undefined;\n startFrame.current = 0;\n };\n\n const touchStart = (event: RotationEvent) => {\n event.preventDefault();\n pointerPosition.current = calculatePointerPosition(event);\n startFrame.current = state.current;\n\n const { offsetWidth } = event.currentTarget;\n max.current = offsetWidth;\n\n window.document.body.addEventListener('mousemove', mouseMove);\n window.document.body.addEventListener('mouseup', mouseUp);\n };\n\n const touchEnd = (event: RotationEvent) => {\n event.preventDefault();\n pointerPosition.current = undefined;\n startFrame.current = 0;\n };\n\n const onMouseEnter = () => {\n if (state.outsideMouseMove) setState({ ...state, outsideMouseMove: false });\n };\n\n const onMouseLeave = () => {\n if (!state.outsideMouseMove) setState({ ...state, outsideMouseMove: true });\n };\n\n const setCurrentFrame = (current: number) => {\n if (current !== state.current) {\n setState({ ...state, current });\n }\n };\n\n const calculatePointerPosition = (event: RotationEvent): number => {\n const { clientX } = event.type.indexOf('touch') === 0 ? event.changedTouches[0] : event;\n const { offsetLeft } = event.currentTarget;\n return clientX - offsetLeft;\n };\n\n return (\n <div\n onTouchStart={touchStart}\n onTouchMove={touchMove}\n onTouchEnd={touchEnd}\n onMouseDown={touchStart}\n onMouseMove={touchMove}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {Children.map(children, (child, i) =>\n cloneElement(child as React.ReactElement, {\n style: {\n width: '100%',\n display: state.current === i ? 'block' : 'none',\n },\n })\n )}\n </div>\n );\n};\n\nexport default Rotation;\n", "import React, { useState, useCallback } from 'react';\n\nimport useThumbnail from './useThumbnail';\nimport { ImageFull } from '../Gallery/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport Modal from '../Modal';\nimport VideoPlayer from './EmbeddedVideoLightbox';\nimport { onImageLoad, onImageError } from './utils';\nimport CustomPlayer from '../Video/CustomPlayer';\nimport { useTranslation } from 'react-i18next';\n\ninterface GalleryEmbed {\n src: string;\n index: number;\n controls?: boolean;\n}\n\nconst GalleryEmbed = ({ src, index }: GalleryEmbed) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState<string>();\n const thumbnail = useThumbnail(src);\n\n const onClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.stopPropagation();\n setModal(src);\n };\n\n const onCloseModal = (e: React.MouseEvent<HTMLButtonElement | HTMLDivElement, MouseEvent>) => {\n e.stopPropagation();\n setModal(undefined);\n };\n\n const onError = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageError(e, thumbnail),\n [thumbnail]\n );\n\n const onLoad = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageLoad(e, thumbnail),\n [thumbnail]\n );\n\n const customVideo = src.toLowerCase().endsWith('.mp4');\n\n if (thumbnail?.length && !customVideo) {\n return (\n <>\n <ImageFull\n onLoad={onLoad}\n src={thumbnail[0]}\n onError={onError}\n alt={t('common.imageIndex', { index: index + 1 }) || ''}\n />\n <MediaButton text={t('other.playVideo')} onClick={onClick} />\n {modal && (\n <Modal title={t('other.video')} onClose={onCloseModal}>\n <VideoPlayer url={modal} />\n </Modal>\n )}\n </>\n );\n }\n\n if (customVideo)\n return (\n <>\n <CustomPlayer ratio=\"66.66%\" isPreview controls={false} url={src} />\n <MediaButton text={t('other.playVideo')} onClick={onClick} />\n {modal && (\n <Modal title={t('other.video')} onClose={onCloseModal}>\n <VideoPlayer url={modal} />\n </Modal>\n )}\n </>\n );\n return null;\n};\n\nexport default GalleryEmbed;\n", "import { useEffect, useState } from 'react';\nimport { getVimeoId, getYoutubeThumbnail } from './utils';\nimport useVimeoThumbnail from '../../hooks/useVimeoThumbnail';\n\nconst useThumbnail = (url?: string | null, small?: boolean) => {\n if (url?.toLowerCase().endsWith('.mp4')) return;\n\n const [thumbnail, setThumbnail] = useState<string[]>();\n const vimeoId = url ? getVimeoId(url) : undefined;\n const vimeoThumbnail = useVimeoThumbnail(vimeoId, small);\n\n useEffect(() => {\n if (url) {\n const youtubeThumbnail = getYoutubeThumbnail(url);\n if (youtubeThumbnail) {\n if (small) {\n setThumbnail([youtubeThumbnail.mqdefault]);\n } else {\n setThumbnail([youtubeThumbnail.maxresdefault, youtubeThumbnail.hqdefault]);\n }\n }\n }\n }, [url]);\n\n return vimeoThumbnail ? [vimeoThumbnail] : thumbnail;\n};\n\nexport default useThumbnail;\n", "import { useEffect, useState } from 'react';\nimport useFetch from './useFetch';\n\ninterface VimeoItem {\n thumbnail_large: string;\n thumbnail_small: string;\n}\n\nconst useVimeoThumbnail = (id?: string, small?: boolean) => {\n const [thumbnail, setThumbnail] = useState<string>();\n const { data } = useFetch<VimeoItem[]>(\n `http://vimeo.com/api/v2/video/${id}.json`,\n {},\n !id || !!thumbnail,\n true\n );\n\n useEffect(() => {\n if (data?.[0]) {\n if (small && data[0].thumbnail_small) {\n setThumbnail(data[0].thumbnail_small);\n } else if (data[0].thumbnail_large) {\n setThumbnail(data[0].thumbnail_large);\n }\n }\n }, [data]);\n\n return thumbnail;\n};\n\nexport default useVimeoThumbnail;\n", "import { useEffect, useState, useCallback } from 'react';\n\nconst cache: { [key: string]: unknown | undefined } = {};\n\nconst getCachedResult = <T>(key: string) => (cache?.[key] as T) || undefined;\nconst setCachedResult = <T>(key: string, value: T) => {\n cache[key] = value;\n};\n\n/**\n * Reusing already fired request by attaching to same promise.\n * Usefull if multiple request is fetching from same endpoint, while\n * the first request has not been finished (so no cache exist yet).\n */\n\nlet pendingPromise: { [key: string]: Promise<globalThis.Response> } = {};\nconst isPendingPromise = (url: string) => !!pendingPromise[url];\nconst setPendingPromise = (url: string, promise: Promise<globalThis.Response>) => {\n pendingPromise = {\n ...pendingPromise,\n [url]: promise,\n };\n};\nconst clearPendingPromise = (url: string) => {\n delete pendingPromise[url];\n};\n\ninterface Response<T> {\n loading: boolean;\n data?: T;\n error: boolean;\n}\n\nconst useFetch = <T>(\n path: RequestInfo,\n options?: RequestInit,\n skip?: boolean,\n promiseCache?: boolean\n): Response<T> => {\n const [data, setData] = useState<T | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n\n const doFetch = useCallback(async () => {\n const key = path.toString();\n const cached = getCachedResult<T>(key);\n setError(false);\n if (cached) {\n setData(cached);\n return;\n }\n setLoading(true);\n try {\n const reusePromise = promiseCache && isPendingPromise(key);\n const request = reusePromise ? pendingPromise[key] : fetch(path, options);\n if (promiseCache) {\n setPendingPromise(key, request);\n }\n\n const result = await request;\n if (result.ok) {\n const json = await result.clone().json();\n setCachedResult(key, json);\n setData(json);\n }\n } catch (e) {\n setError(true);\n } finally {\n setLoading(false);\n clearPendingPromise(key);\n }\n return;\n }, [path, options]);\n\n useEffect(() => {\n if (!skip) {\n doFetch();\n }\n }, [path, skip]);\n\n return {\n loading,\n data,\n error,\n };\n};\n\nexport default useFetch;\n", "import * as React from 'react';\n\nimport { Portal, PortalNamespace } from '../Portal';\n\nimport { H1 } from '../Heading';\nimport { IconCancel } from '../Icon';\nimport {\n Body,\n Content,\n Dialog,\n Header,\n Heading,\n UiBlock,\n Wrapper,\n Close,\n CloseBtn,\n} from './wrapper';\nimport { useTranslation } from 'react-i18next';\n\ninterface ModalProps {\n id?: string | null;\n title: string | null;\n children: React.ReactNode;\n onClose: (e: React.MouseEvent<HTMLDivElement | HTMLButtonElement, MouseEvent>) => void;\n}\n\nconst Modal = ({ id, title, onClose, children }: ModalProps) => {\n const { t } = useTranslation();\n return (\n <Portal id={id || PortalNamespace.DefaultPortal}>\n <Wrapper onClick={(e) => e.stopPropagation()}>\n <UiBlock onClick={onClose} title={t('other.closeModal') || ''} />\n <Dialog>\n <Content>\n <Header>\n <Heading>\n <H1 noMargin>{title}</H1>\n </Heading>\n <Close>\n <CloseBtn onClick={onClose} title={t('other.closeModal') || ''}>\n <IconCancel block />\n </CloseBtn>\n </Close>\n </Header>\n <Body>{children}</Body>\n </Content>\n </Dialog>\n </Wrapper>\n </Portal>\n );\n};\n\nexport default Modal;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { fadeIn, noTransform } from '../../layout/keyframes';\n\nimport { ButtonReset } from '../Button';\nimport { H1 } from '../Heading';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'dialog',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n white-space: normal;\n text-align: left;\n z-index: 90;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${(props) => props.theme.breakpoint.Sm} {\n padding: ${size(2)};\n }\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n 'aria-hidden': 'true',\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.35);\n z-index: -1;\n\n ${(props) => props.theme.breakpoint.LtMd} {\n animation: ${fadeIn} 300ms ease forwards;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n animation: ${fadeIn} 400ms ease forwards;\n }\n`;\n\nexport const Dialog = styled.article.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n display: flex;\n flex-direction: column;\n background-color: ${(props) => props.theme.color.bg};\n z-index: 1;\n width: 100%;\n max-width: 680px;\n max-height: 100%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n align-self: flex-end;\n transform: translateY(100%);\n animation: ${noTransform} 300ms ease forwards;\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n transform: translateY(${size(2)});\n animation: ${fadeIn} 400ms ease, ${noTransform} 400ms ease forwards;\n }\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n\nexport const Header = styled.header`\n display: flex;\n align-items: center;\n min-height: 60px;\n padding: ${size(3)};\n padding-bottom: 0;\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n\n ${H1} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Close = styled.div`\n flex-shrink: 0;\n margin: ${size(-2)};\n padding-left: ${size(3)};\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n display: block;\n padding: ${size(2)};\n`;\n\nexport const Body = styled.div`\n padding: ${size(3)};\n`;\n\nexport const Image = styled.img`\n display: block;\n width: calc(100% + ${size(6)});\n margin-left: ${size(-3)};\n margin-bottom: ${size(3)};\n`;\n\nexport const ModalFoldout = styled.div`\n background-color: ${(props) => props.theme.color.accent};\n margin: ${size(-3)};\n margin-top: ${size(3)};\n padding: ${size(3)};\n`;\n\nexport const ModalFoldoutBody = styled.div``;\n", "import React, { useCallback } from 'react';\n\nimport useThumbnail from './useThumbnail';\nimport { QuickNavImg } from '../Gallery/wrapper';\nimport { onImageLoad, onImageError } from './utils';\nimport CustomPlayer from '../Video/CustomPlayer';\nimport { useTranslation } from 'react-i18next';\n\ninterface QuickNavEmbededProps {\n src?: string;\n index: number;\n}\n\nconst QuickNavEmbeded = ({ src, index }: QuickNavEmbededProps) => {\n const { t } = useTranslation();\n const thumbnail = useThumbnail(src);\n const onError = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageError(e, thumbnail),\n [thumbnail]\n );\n\n const onLoad = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageLoad(e, thumbnail),\n [thumbnail]\n );\n\n const customVideo = src?.toLowerCase().endsWith('.mp4');\n\n if (thumbnail?.length && !customVideo)\n return (\n <QuickNavImg\n onLoad={onLoad}\n src={thumbnail[0]}\n onError={onError}\n alt={t('common.imageIndex', { index: index + 1 }) || ''}\n />\n );\n if (customVideo) return <CustomPlayer key={index} url={src} ratio=\"66.66%\" />;\n return null;\n};\n\nexport default QuickNavEmbeded;\n", "import React from 'react';\nimport SphereViewer from './SphereViewer';\n\nimport { ImageFull } from '../Gallery/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport { useTranslation } from 'react-i18next';\n\nconst onMediaClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>, func: () => void) => {\n e.stopPropagation();\n e.preventDefault();\n func();\n};\n\ntype PropsType = {\n url: string;\n preview: string;\n navigationDisabled: boolean;\n visible: boolean;\n onDisableNavigation: () => void;\n};\n\nconst Sphere = ({ url, preview, visible, onDisableNavigation, navigationDisabled }: PropsType) => {\n const { t } = useTranslation();\n if (!visible || (!navigationDisabled && visible)) {\n return (\n <>\n <ImageFull src={preview} alt=\"alt\" />\n <MediaButton\n text={t('item.start360Interior')}\n onClick={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void =>\n onMediaClick(e, onDisableNavigation)\n }\n />\n </>\n );\n }\n if (navigationDisabled && visible) {\n return (\n <SphereViewer\n id={url}\n preview={url}\n src={url}\n autoLoad={true}\n onStart={onDisableNavigation}\n />\n );\n }\n return null;\n};\n\nexport default Sphere;\n", "import React from 'react';\n\nimport { Image } from '../Gallery/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport Rotation from './Rotation';\nimport { useTranslation } from 'react-i18next';\n\nconst onMediaClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>, func: () => void) => {\n e.stopPropagation();\n e.preventDefault();\n func();\n};\n\ntype PropsType = {\n urls: string[];\n navigationDisabled: boolean;\n visible: boolean;\n onDisableNavigation: () => void;\n};\n\nconst ThreeSixty = ({ urls, visible, onDisableNavigation, navigationDisabled }: PropsType) => {\n const { t } = useTranslation();\n if (!visible || (!navigationDisabled && visible)) {\n return (\n <>\n <Image src={urls[0]} alt=\"alt\" />\n <MediaButton\n text={t('item.start360Exterior')}\n onClick={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void =>\n onMediaClick(e, onDisableNavigation)\n }\n />\n </>\n );\n }\n if (navigationDisabled && visible) {\n return (\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <Rotation>\n {urls.map((image, i) => (\n <Image key={image} src={image} alt={t('common.imageIndex', { index: i + 1 }) || ''} />\n ))}\n </Rotation>\n </div>\n );\n }\n return null;\n};\n\nexport default ThreeSixty;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { Wrapper as Container } from '../Container/wrapper';\n\nexport const ProductPage = styled.div`\n display: flex;\n flex-direction: column;\n\n ${(props) => props.theme.breakpoint.Md} {\n flex-direction: row;\n }\n`;\n\nexport const ProductPageAside = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: contents;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n flex-shrink: 0;\n width: calc(375px + ${size(2)});\n padding-right: ${size(2)};\n }\n`;\n\nexport const ProductPageMain = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: contents;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n flex: 1 1 100%;\n min-width: 0;\n padding-left: ${size(2)};\n }\n`;\n\ntype ProductPageAsideSectionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n mobileOrder?: number;\n};\n\nexport const ProductPageAsideSection = styled.div<ProductPageAsideSectionProps>`\n ${(props) => props.theme.breakpoint.LtMd} {\n order: ${(props) => props.mobileOrder};\n\n & + & {\n margin-top: ${size(2)};\n }\n\n :last-child {\n margin-bottom: ${size(4)};\n }\n\n ${ProductPageMain} & {\n margin-top: ${size(2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n & + & {\n margin-top: ${size(4)};\n }\n\n ${ProductPageMain} & {\n margin-bottom: ${size(8)};\n }\n }\n`;\n\nexport const ProductPageMainSection = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n order: 99;\n padding: ${size(4)} 0;\n border-top: ${size(1)} solid ${(props) => props.theme.color.accent};\n\n ${Container} & {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n padding-left: ${size(2)};\n padding-right: ${size(2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n & + & {\n margin-top: ${size(8)};\n padding-top: ${size(8)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n }\n`;\n\nexport const ProductPageContentLimit = styled.div`\n max-width: 420px;\n`;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport SEARCH_ITEM_QUERY from '../queries/SEARCH_ITEM_QUERY';\nimport { QueryVehicleArgs, Query } from '../@types/codegen/types';\n\nconst useSearchItem = (id?: string): QueryResult<Query, QueryVehicleArgs> =>\n useQuery<Query, QueryVehicleArgs>(SEARCH_ITEM_QUERY, {\n variables: { id: id as string },\n skip: !id,\n });\n\nexport default useSearchItem;\n", "import { gql } from '@apollo/client';\n\nconst FinancialOptionDetail = gql`\n fragment FinancialOptionDetail on FinancialOptionDetail {\n current\n default\n max\n min\n step\n }\n`;\n\nconst HoursOpen = gql`\n fragment HoursOpen on HoursOpen {\n from\n until\n }\n`;\n\nconst SEARCH_ITEM_QUERY = gql`\n query SearchItem($id: ID!) {\n vehicle(id: $id) {\n id\n documents\n contact {\n name\n email\n phonenumber\n avatar\n }\n accessories {\n articleNumber\n description\n excerpt\n id\n images\n logotype\n manufacturer\n model\n name\n price\n assemblyPrice\n productPage {\n title\n url\n }\n salePrice\n }\n manufacturer {\n description\n logotype\n name\n packageOption {\n description\n image\n link {\n title\n url\n }\n title\n }\n }\n packageOptions {\n description\n image\n link {\n title\n url\n }\n title\n }\n publishedAt\n branch {\n connections {\n id\n name\n location {\n city\n county\n streetAddress\n postalCode\n position {\n latitude\n longitude\n }\n }\n }\n contact {\n name\n email\n phonenumber\n avatar\n }\n id\n description\n name\n homepage\n flags {\n mrf\n centralStorage\n ecommerce\n }\n logotype\n openingHours {\n monday {\n ...HoursOpen\n }\n tuesday {\n ...HoursOpen\n }\n wednesday {\n ...HoursOpen\n }\n thursday {\n ...HoursOpen\n }\n friday {\n ...HoursOpen\n }\n saturday {\n ...HoursOpen\n }\n sunday {\n ...HoursOpen\n }\n }\n organization {\n branches {\n id\n }\n parent {\n id\n }\n }\n location {\n position {\n latitude\n longitude\n }\n city\n county\n streetAddress\n postalCode\n }\n promos {\n description\n image\n title\n }\n services {\n markdown\n title\n }\n }\n data {\n enginePower\n equipmentLevel\n fuelType\n gearbox\n gearboxType\n manufactureYear\n manufacturer\n mileage\n odometerReading {\n value\n unit\n }\n modelName\n modelSeries\n modelYear\n properties\n propertySet\n options\n registrationNumber\n salesName\n vin\n }\n description\n ecommerce {\n enabled\n reserved\n withTradeIn\n withHomeDelivery\n }\n insuranceOptions {\n insuranceHeader\n institute\n identifier\n logotype\n name\n description\n longDescription\n url\n insuranceText\n requiresPersonalNumber\n requiresDistance\n terms\n }\n financialOptions {\n description\n administrationFee\n downPayment {\n ...FinancialOptionDetail\n }\n duration {\n ...FinancialOptionDetail\n }\n effectiveInterest\n image\n includes\n includes\n interest\n link {\n title\n url\n }\n loanAmount\n logotype\n mileage {\n ...FinancialOptionDetail\n }\n monthlyCost\n name\n residual {\n ...FinancialOptionDetail\n }\n setupFee\n terms\n totalCreditCost\n totalResidualValue\n type\n url\n }\n media {\n type\n files {\n formats {\n format\n url\n }\n url\n }\n }\n location {\n city\n county\n streetAddress\n postalCode\n }\n price\n discount\n shortDescription\n title\n availableFrom\n flags {\n demoVersion\n }\n }\n }\n ${HoursOpen}\n ${FinancialOptionDetail}\n`;\n\nexport default SEARCH_ITEM_QUERY;\n", "import React, { Fragment } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat';\nimport { VisualHeading } from '../Heading';\nimport Leasing from './leasing';\nimport Loan from './loan';\nimport { FinancialOption } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface FinancialOptionsProps {\n id: string;\n financialOptions: FinancialOption[];\n}\n\nconst FinancialOptions = ({ id, financialOptions }: FinancialOptionsProps) => {\n const { t } = useTranslation();\n return (\n <Repeat>\n <RepeatTiny>\n <VisualHeading>{t('item.financialOptions.otherFinancialOptions')}</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n {financialOptions.map((financialOption, index) => (\n <Fragment key={index}>\n {(financialOption.type === 'leasing' ||\n financialOption.type === 'business-leasing') && (\n <Leasing financialOption={financialOption} />\n )}\n {financialOption.type === 'loan' && <Loan id={id} financialOption={financialOption} />}\n </Fragment>\n ))}\n </RepeatTiny>\n </Repeat>\n );\n};\n\nexport default FinancialOptions;\n", "import React, { useState, useCallback } from 'react';\n\nimport OptionBox from '../OptionBox';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { UtilityTextPrimary } from '../Utility';\nimport { ButtonInline } from '../Button';\nimport { numberSeparator } from '../../utils/formats';\nimport Modal from '../Modal';\nimport { Image, ModalFoldout, ModalFoldoutBody } from '../Modal/wrapper';\nimport Content from '../Content';\nimport DataList from '../DataList';\nimport { FinancialOption } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface LeasingProps {\n financialOption: FinancialOption;\n}\n\nconst Leasing = ({ financialOption }: LeasingProps) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n\n const { image, description, monthlyCost, duration, mileage, type, name } = financialOption;\n\n const title =\n type === 'leasing'\n ? t('item.financialOptions.privateLease')\n : type === 'business-leasing'\n ? t('item.financialOptions.businessLease')\n : type;\n\n return (\n <>\n {modal && (\n <Modal title={title} onClose={toggleModal}>\n {image && <Image src={image} alt={title} />}\n {description && <Content dangerouslySetInnerHTML={{ __html: description }} />}\n <ModalFoldout>\n <ModalFoldoutBody>\n <DataList\n items={[\n {\n label: t('item.financialOptions.monthlyCost'),\n value: `${numberSeparator(monthlyCost || 0)} ${t('currency.monthly')}`,\n },\n {\n label: t('item.financialOptions.bindingTime'),\n value: `${duration?.current} m\u00E5nader`,\n },\n {\n label: t('item.financialOptions.annualMileage'),\n value: `${numberSeparator(mileage?.current || 0)} ${t(\n 'item.financialOptions.mileagePeryear'\n )}`,\n },\n ]}\n />\n </ModalFoldoutBody>\n </ModalFoldout>\n </Modal>\n )}\n <OptionBox>\n <>\n {monthlyCost !== null && monthlyCost !== undefined && (\n <OptionBoxHeading>{`ca ${numberSeparator(monthlyCost)} ${t(\n 'currency.monthly'\n )}`}</OptionBoxHeading>\n )}\n </>\n <OptionBoxContent>\n <p>\n {title}{' '}\n {mileage?.current && duration?.current && (\n <>\n <UtilityTextPrimary>\n {numberSeparator(mileage?.current)} {t('item.financialOptions.mileagePeryear')}\n </UtilityTextPrimary>{' '}\n i{' '}\n <UtilityTextPrimary>\n {duration?.current} {t('item.financialOptions.months')}\n </UtilityTextPrimary>\n .{' '}\n </>\n )}\n </p>\n {name && (\n <p>\n <ButtonInline onClick={toggleModal}>{t('common.readMore')}</ButtonInline>\n </p>\n )}\n </OptionBoxContent>\n </OptionBox>\n </>\n );\n};\n\nexport default Leasing;\n", "import * as React from 'react';\n\nimport { Logo, LogoImg, Content, Wrapper } from './wrapper';\n\ninterface IOptionBox {\n logo?: string;\n logo2x?: string;\n logoAlt?: string;\n children: React.ReactNode;\n}\n\nconst OptionBox = ({ logo, logo2x, logoAlt, children }: IOptionBox) => (\n <Wrapper>\n {logo && (\n <Logo>\n <LogoImg src={logo} srcSet={logo2x} alt={logoAlt} />\n </Logo>\n )}\n <Content>{children}</Content>\n </Wrapper>\n);\n\nexport default OptionBox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n padding: ${size(1)};\n border: 1px solid ${(props) => props.theme.color.border};\n border-radius: 3px;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Logo = styled.div`\n position: relative;\n flex-shrink: 0;\n margin-right: ${size(1)};\n width: ${size(9.5)};\n height: ${size(6)};\n`;\n\nexport const LogoImg = styled.img`\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n right: auto;\n bottom: 0;\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n text-align: right;\n line-height: 1.4;\n`;\n\nexport const OptionBoxHeading = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1rem;\n`;\n\nexport const OptionBoxContent = styled.div`\n margin-top: ${size(0.5)};\n font-size: 0.875rem;\n\n p {\n margin: 0;\n }\n`;\n", "import React from 'react';\n\nimport { List, Item, Label, Value } from './wrapper';\n\ninterface ItemProps {\n label: string;\n value: string;\n}\n\ninterface Props {\n items: ItemProps[];\n}\n\nconst DataList = ({ items }: Props) => (\n <List>\n {items.map((item) => (\n <Item key={item.label}>\n <Label>{item.label}</Label>\n <Value>{item.value}</Value>\n </Item>\n ))}\n </List>\n);\n\nexport default DataList;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n display: flex;\n align-items: flex-start;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Label = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Value = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n flex-shrink: 0;\n padding-left: ${size(2)};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport OptionBox from '../OptionBox';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { ButtonInline } from '../Button';\nimport { numberSeparator } from '../../utils/formats';\nimport useLoanCalculation from '../../hooks/useLoan';\nimport { FinancialOption } from '../../@types/codegen/types';\nimport LoanModal from './LoanModal';\nimport { useTranslation } from 'react-i18next';\n\ninterface LoanProps {\n id: string;\n financialOption: FinancialOption;\n}\n\nconst Loan = ({ id, financialOption }: LoanProps) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n\n const { data } = useLoanCalculation(\n id,\n financialOption.duration?.current,\n financialOption.downPayment?.current,\n financialOption.residual?.current\n );\n\n const interest = data?.loan?.interest;\n const duration = data?.loan?.duration?.current;\n const monthlyCost = data?.loan?.monthlyCost;\n\n const logo = financialOption?.logotype || 'https://placehold.it/67x10';\n\n // Skeleton?\n if (\n financialOption.loanAmount === undefined ||\n financialOption.loanAmount === null ||\n interest === undefined ||\n duration === undefined ||\n monthlyCost === undefined ||\n interest === null ||\n duration === null ||\n monthlyCost === null\n ) {\n return (\n <OptionBox logo={logo} logoAlt={t('common.logotype')}>\n <OptionBoxHeading>{t('other.loading')}</OptionBoxHeading>\n\n <OptionBoxContent>\n <p>{t('other.loading')}</p>\n </OptionBoxContent>\n </OptionBox>\n );\n }\n\n return (\n <>\n {modal && <LoanModal id={id} financialOption={financialOption} onClose={toggleModal} />}\n <OptionBox logo={logo} logoAlt={t('common.logotype')}>\n <>\n <OptionBoxHeading>{`${numberSeparator(monthlyCost)} ${t(\n 'currency.monthly'\n )}*`}</OptionBoxHeading>\n\n <OptionBoxContent>\n <p>\n {financialOption.loanAmount && duration\n ? t('item.financialOptions.payInInstallmentsDetailed', {\n amount: `${numberSeparator(financialOption.loanAmount)} kr`,\n duration,\n })\n : t('item.financialOptions.payInInstallments')}\n </p>\n\n <p>\n *\n {t('item.financialOptions.disclaimer', {\n interest: `${(interest * 100).toFixed(2)}%`,\n })}{' '}\n <ButtonInline onClick={toggleModal}>{t('common.readMore')}</ButtonInline>\n </p>\n </OptionBoxContent>\n </>\n </OptionBox>\n </>\n );\n};\n\nexport default Loan;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport LOAN_CALCULATION from '../queries/LOAN_CALCULATION';\nimport { QueryLoanArgs, Query } from '../@types/codegen/types';\n\nconst useLoanCalculation = (\n id: string,\n duration?: number,\n downPayment?: number,\n residual?: number\n): QueryResult<Query, QueryLoanArgs> =>\n useQuery<Query, QueryLoanArgs>(LOAN_CALCULATION, {\n variables: {\n id,\n duration: duration as number,\n downPayment: downPayment as number,\n residual: (residual as number) || 0,\n },\n skip: duration === undefined || downPayment === undefined,\n });\n\nexport default useLoanCalculation;\n", "import { gql } from '@apollo/client';\n\nconst FinancialOptionDetail = gql`\n fragment FinancialOptionDetail on FinancialOptionDetail {\n current\n default\n max\n min\n step\n }\n`;\n\nconst LOAN_CALCULATION = gql`\n query LoanCalculation($id: ID!, $duration: Int!, $downPayment: Int!, $residual: Float!) {\n loan(id: $id, duration: $duration, downPayment: $downPayment, residual: $residual) {\n downPayment {\n ...FinancialOptionDetail\n }\n effectiveInterest\n duration {\n ...FinancialOptionDetail\n }\n residual {\n ...FinancialOptionDetail\n }\n mileage {\n ...FinancialOptionDetail\n }\n interest\n loanAmount\n totalCreditCost\n totalResidualValue\n monthlyCost\n }\n }\n ${FinancialOptionDetail}\n`;\n\nexport default LOAN_CALCULATION;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport useLoanCalculation from '../../hooks/useLoan';\nimport Modal from '../Modal';\nimport { ModalFoldout, ModalFoldoutBody } from '../Modal/wrapper';\nimport Content from '../Content';\nimport LogoBox from '../LogoBox';\nimport { Repeat, RepeatSmall, RepeatTiny } from '../Repeat';\nimport { numberSeparator } from '../../utils/formats';\nimport { ButtonClear, ButtonContent } from '../Button';\nimport { ContentLogo, ContentLogoText, ContentLogoMedia } from '../ContentLogo';\nimport DataList from '../DataList';\nimport { FinancialOption, Query } from '../../@types/codegen/types';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport SliderWithLabel from '../RangeSlider/SliderWithLabel';\nimport { useTranslation } from 'react-i18next';\n\nconst stepGenerator = (\n step: number,\n max: number,\n steps: number[] = [],\n current?: number\n): number[] => {\n if (step === 0 && current === undefined) return steps;\n\n if (current !== undefined && current >= max && step !== 0) {\n return steps;\n }\n\n const nextCurrent = current ? step + current : step;\n steps.push(nextCurrent);\n return stepGenerator(step, max, steps, nextCurrent);\n};\n\ninterface LoanModalProps {\n id: string;\n financialOption: FinancialOption;\n onClose: () => void;\n}\n\nconst LoanModal = ({ id, financialOption, onClose }: LoanModalProps) => {\n const { t } = useTranslation();\n const [tmp, setTmp] = useState<Query>();\n const [extend, setExtend] = React.useState(false);\n const onToggleExtend = React.useCallback(() => {\n if (!extend) {\n PubSub.publish('FinanceInterest');\n }\n setExtend(!extend);\n }, [extend]);\n\n const [variables, setVariables] = useState({\n duration: financialOption.duration?.current,\n downPayment: financialOption.downPayment?.current,\n residual: financialOption.residual?.current,\n });\n\n const { duration, downPayment, residual } = variables;\n const { loading, data } = useLoanCalculation(id, duration, downPayment, residual);\n useEffect(() => {\n if (data) {\n setTmp(data);\n setVariables({\n duration: data?.loan?.duration?.current || 0,\n downPayment: data?.loan?.downPayment?.current || 0,\n residual: data?.loan?.residual?.current || 0,\n });\n }\n }, [data]);\n\n const loan = data?.loan || tmp?.loan;\n\n const downPaymentCurrent = loan?.downPayment?.current || 0;\n const downPaymentMin = loan?.downPayment?.min || 0;\n const downPaymentMax = loan?.downPayment?.max || 0;\n const downPaymentStep = loan?.downPayment?.step || 0;\n const downPaymentSteps = stepGenerator(downPaymentStep, downPaymentMax);\n const onDownPaymentChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, downPayment: values[0] });\n },\n [variables]\n );\n\n const durationCurrent = loan?.duration?.current || 0;\n const durationMin = loan?.duration?.min || 0;\n const durationMax = loan?.duration?.max || 0;\n const durationStep = loan?.duration?.step || 0;\n const durationSteps = stepGenerator(durationStep, durationMax);\n const onDurationChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, duration: values[0] });\n },\n [variables]\n );\n\n const residualCurrent = (loan?.residual?.current || 0) * 100 || 0;\n const residualMin = (loan?.residual?.min || 0) * 100 || 0;\n const residualMax = (loan?.residual?.max || 0) * 100 || 0;\n const residualStep = (loan?.residual?.step || 0) * 100 || 0;\n const residualSteps = stepGenerator(residualStep, residualMax);\n const onResidualChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, residual: values[0] / 100 });\n },\n [variables]\n );\n\n const interestText = ((loan?.interest || 0) * 100).toFixed(2);\n const effectiveInterestText = ((loan?.effectiveInterest || 0) * 100).toFixed(2);\n const monthlyCost = loan?.monthlyCost;\n\n return (\n <Modal title={t('item.financialOptions.loanOptions')} onClose={onClose}>\n <Repeat>\n <ContentLogo>\n {financialOption?.description && (\n <ContentLogoText>\n <Content>\n <p>{financialOption.description}</p>\n </Content>\n </ContentLogoText>\n )}\n {financialOption?.image && (\n <ContentLogoMedia>\n <LogoBox\n logo={financialOption.image}\n alt={financialOption.name || t('common.logotype')}\n wide\n />\n </ContentLogoMedia>\n )}\n </ContentLogo>\n </Repeat>\n <Repeat>\n <RepeatSmall>\n <SliderWithLabel\n label={t('item.financialOptions.downPayment')}\n values={[downPaymentCurrent]}\n domain={[downPaymentMin, downPaymentMax]}\n steps={downPaymentSteps}\n unit={t('currency.default')}\n formatValues\n loading={loading}\n onChange={onDownPaymentChange}\n />\n </RepeatSmall>\n <RepeatSmall>\n <SliderWithLabel\n label={t('item.financialOptions.duration')}\n values={[durationCurrent]}\n domain={[durationMin, durationMax]}\n steps={durationSteps}\n unit={t('item.financialOptions.months')}\n loading={loading}\n onChange={onDurationChange}\n />\n </RepeatSmall>\n {residual !== undefined && residualMax !== 0 && (\n <RepeatSmall>\n <SliderWithLabel\n label={t('item.financialOptions.residual')}\n values={[residualCurrent]}\n domain={[residualMin, residualMax]}\n steps={residualSteps}\n unit=\"%\"\n loading={loading}\n onChange={onResidualChange}\n />\n </RepeatSmall>\n )}\n <RepeatSmall>\n <RepeatTiny>\n {monthlyCost !== null && monthlyCost !== undefined && (\n <Content>{`${numberSeparator(monthlyCost)} ${t('currency.monthly')}*`}</Content>\n )}\n <Content small>\n <p>\n *\n {loan?.mileage !== null\n ? t('item.financialOptions.loanOptionsDisclaimerMileage', {\n interest: interestText,\n effectiveInterest: effectiveInterestText,\n mileage: loan?.mileage,\n })\n : t('item.financialOptions.loanOptionsDisclaimer', {\n interest: interestText,\n effectiveInterest: effectiveInterestText,\n })}\n </p>\n </Content>\n </RepeatTiny>\n </RepeatSmall>\n\n <RepeatSmall>\n <ButtonClear\n onClick={onToggleExtend}\n title={\n extend ? t('common.showLessInformation') || '' : t('common.showMoreInformation') || ''\n }\n >\n <ButtonContent>\n {extend ? t('common.lessInformation') : t('common.showMoreInformation')}\n </ButtonContent>\n </ButtonClear>\n </RepeatSmall>\n <>\n {extend && (\n <ModalFoldout>\n <ModalFoldoutBody>\n <DataList\n items={[\n {\n label: t('item.financialOptions.interest'),\n value: `${interestText} %`,\n },\n {\n label: t('item.financialOptions.effectiveinterest'),\n value: `${effectiveInterestText} %`,\n },\n {\n label: t('item.financialOptions.setupFee'),\n value: `${numberSeparator(financialOption?.setupFee || 0)} ${t(\n 'currency.default'\n )}`,\n },\n {\n label: t('item.financialOptions.administrationFee'),\n value: `${numberSeparator(financialOption?.administrationFee || 0)} ${t(\n 'currency.monthly'\n )}`,\n },\n {\n label: t('item.financialOptions.totalCreditCost'),\n value: `${numberSeparator(loan?.totalCreditCost || 0)} ${t(\n 'currency.default'\n )}`,\n },\n ]}\n />\n </ModalFoldoutBody>\n </ModalFoldout>\n )}\n </>\n </Repeat>\n </Modal>\n );\n};\n\nexport default LoanModal;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const ContentLogo = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n display: flex;\n align-items: flex-start;\n }\n`;\n\nexport const ContentLogoText = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n flex: 1 1 auto;\n }\n`;\n\nexport const ContentLogoMedia = styled.div`\n ${(props) => props.theme.breakpoint.LtSm} {\n margin-top: ${size(2)};\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n flex-shrink: 0;\n padding-left: ${size(4)};\n }\n`;\n", "import React, { useCallback, useEffect, useState } from 'react';\nimport { numberSeparator } from '../../utils/formats';\nimport RangeSliderLabel from '../RangeSliderLabel';\nimport { RepeatTiny } from '../Repeat';\nimport RangeSliderSimple from './RangeSliderSimple';\n\ninterface SliderWithLabelProps {\n label: string;\n values: number[];\n domain: number[];\n steps: number[];\n loading: boolean;\n unit: string;\n formatValues?: boolean;\n onChange: (values: readonly number[]) => void;\n}\n\nconst SliderWithLabel = ({\n label,\n values,\n domain,\n steps,\n loading,\n unit,\n formatValues,\n onChange,\n}: SliderWithLabelProps) => {\n const [local, setLocal] = useState<number[] | undefined>(steps);\n\n const onUpdate = useCallback((nextValues: readonly number[]) => {\n setLocal([...nextValues]);\n }, []);\n\n useEffect(() => {\n if (!loading) setLocal(undefined);\n }, [loading]);\n\n return (\n <>\n <RepeatTiny>\n <RangeSliderLabel\n label={label}\n value={`${numberSeparator(local?.[0] || values[0])}${unit ? ` ${unit}` : ''}`}\n />\n </RepeatTiny>\n <RepeatTiny>\n <RangeSliderSimple\n loading={loading}\n values={values}\n domain={domain}\n steps={steps}\n onChange={onChange}\n onUpdate={onUpdate}\n unit={unit}\n formatValues={formatValues}\n />\n </RepeatTiny>\n </>\n );\n};\n\nexport default SliderWithLabel;\n", "import React from 'react';\n\nimport { Wrapper, Label, Value } from './wrapper';\n\ninterface Props {\n label: string;\n value?: React.ReactNode;\n highlight?: boolean;\n}\n\nconst RangeSliderLabel = ({ label, value, highlight }: Props) => (\n <Wrapper>\n <Label>{label}</Label>\n {value && <Value isHighlighted={highlight}>{value}</Value>}\n </Wrapper>\n);\n\nexport default RangeSliderLabel;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: flex-end;\n`;\n\nexport const Label = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n flex: 1 1 auto;\n`;\n\ntype ValueProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n isHighlighted?: boolean;\n};\n\nexport const Value = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold wayke__color--primary-text',\n}))<ValueProps>`\n flex-shrink: 0;\n padding-left: ${size(2)};\n font-size: 1.125rem;\n\n ${({ isHighlighted }) =>\n isHighlighted &&\n css`\n font-size: 1.375rem;\n color: ${(props) => props.theme.color.textDark} !important;\n `}\n`;\n", "import React from 'react';\nimport { Slider, Rail, Handles, Tracks } from 'react-compound-slider';\n\nimport { Bar, RangeSpan, RangeSpanItem, Slider as OwnSlider } from './wrapper';\nimport { Handle } from './handle';\nimport { Track } from './track';\nimport { numberSeparator } from '../../utils/formats';\n\ninterface RangeSliderProps {\n loading: boolean;\n domain: number[];\n values: number[];\n steps: number[];\n unit?: string;\n formatValues?: boolean;\n onChange: (values: readonly number[]) => void;\n onUpdate?: (values: readonly number[]) => void;\n}\n\nconst RangeSliderSimple = ({\n loading,\n values,\n domain,\n steps,\n unit,\n formatValues,\n onChange,\n onUpdate,\n}: RangeSliderProps) => {\n const first = steps[0];\n const second = steps[1];\n const step = second - first;\n\n const currentMin = formatValues ? numberSeparator(domain[0]) : domain[0];\n const currentMax = formatValues ? numberSeparator(domain[1]) : domain[1];\n\n if (steps.length < 2) {\n return null;\n }\n\n return (\n <>\n <OwnSlider>\n <Slider\n disabled={loading}\n mode={1}\n step={step}\n domain={domain}\n onChange={onChange}\n onUpdate={onUpdate}\n values={values}\n rootStyle={{ position: 'relative' }}\n >\n <Rail>{({ getRailProps }) => <Bar {...getRailProps()} />}</Rail>\n <Handles>\n {({ handles, getHandleProps }) => (\n <div className=\"slider-handles\">\n {handles.map((handle) => (\n <Handle\n key={handle.id}\n handle={handle}\n domain={domain}\n getHandleProps={getHandleProps}\n />\n ))}\n </div>\n )}\n </Handles>\n <Tracks right={false}>\n {({ tracks, getTrackProps }) => (\n <div className=\"slider-tracks\">\n {tracks.map(({ id, source, target }) => (\n <Track key={id} source={source} target={target} getTrackProps={getTrackProps} />\n ))}\n </div>\n )}\n </Tracks>\n </Slider>\n </OwnSlider>\n {false && (\n <RangeSpan>\n <RangeSpanItem>{`${currentMin}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n <RangeSpanItem>{`${currentMax}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n </RangeSpan>\n )}\n </>\n );\n};\n\nexport default RangeSliderSimple;\n", "import React from 'react';\nimport { InsuranceOption, Branch } from '../../@types/codegen/types';\nimport Insurance from './Insurance';\nimport InsuranceFree from './InsuranceFree';\n\ninterface InsuranceOptions {\n id: string;\n branch?: Branch | null;\n insuranceOptions: InsuranceOption[];\n}\n\nconst InsuranceOptions = ({ id, branch, insuranceOptions }: InsuranceOptions) => {\n if (!insuranceOptions.length) {\n return null;\n }\n\n if (insuranceOptions.length > 0) {\n if (insuranceOptions[0].requiresDistance && insuranceOptions[0].requiresPersonalNumber)\n return <Insurance id={id} branch={branch} insuranceOptions={insuranceOptions} />;\n\n return <InsuranceFree insuranceOptions={insuranceOptions} />;\n }\n\n return null;\n};\n\nexport default InsuranceOptions;\n", "import React, { useState, useCallback } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat';\nimport { VisualHeading } from '../Heading';\nimport OptionBox from '../OptionBox';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { ButtonInline } from '../Button';\nimport { InsuranceOption, Branch } from '../../@types/codegen/types';\nimport InsuranceModal from './InsuranceModal';\nimport { useTranslation } from 'react-i18next';\n\ninterface InsuranceOptions {\n id: string;\n branch?: Branch | null;\n insuranceOptions: InsuranceOption[];\n}\n\nconst Insurance = ({ id, branch, insuranceOptions }: InsuranceOptions) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n if (!insuranceOptions.length) {\n return null;\n }\n\n return (\n <>\n {modal && (\n <InsuranceModal\n id={id}\n branch={branch}\n onClose={toggleModal}\n insuranceOptions={insuranceOptions[0]}\n />\n )}\n <Repeat>\n <RepeatTiny>\n <VisualHeading>{t('item.addInsurance')}</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n <>\n {insuranceOptions.map((insuranceOption, index) => (\n <OptionBox\n key={`${insuranceOption.url}-${index}`}\n logo={insuranceOption.logotype || undefined}\n logoAlt={insuranceOption.name || t('common.logotype')}\n >\n <OptionBoxHeading>{t('item.getInsuranceQuote')}</OptionBoxHeading>\n <OptionBoxContent>\n <p>\n <ButtonInline onClick={toggleModal}>{t('common.moreInformation')}</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n ))}\n </>\n </RepeatTiny>\n </Repeat>\n </>\n );\n};\n\nexport default Insurance;\n", "import React, { useState, useCallback } from 'react';\n\nimport Modal from '../Modal';\nimport Content from '../Content';\nimport { Repeat, RepeatTiny, RepeatSmall } from '../Repeat';\nimport LogoBox from '../LogoBox';\nimport DetailBox from '../DetailBox';\nimport ExtendInfo from '../ExtendInfo';\nimport Snackbar from '../Snackbar';\nimport { UtilityTextBold } from '../Utility';\nimport InputLabel from '../InputLabel';\nimport InputText from '../InputText';\nimport InputCheckbox from '../InputCheckbox';\nimport InputSelect, { OptionProps } from '../InputSelect';\nimport { H4 } from '../Heading';\nimport { InputGroup, InputGroupColumn } from '../InputGroup';\nimport { ButtonPrimary, ButtonContent, ButtonInline } from '../Button';\nimport { ContentLogo, ContentLogoText, ContentLogoMedia } from '../ContentLogo';\nimport { ColumnRow, ColumnRowItem } from '../ColumnRow';\nimport useInsuranceCalculation from '../../hooks/useInsurance';\nimport { ssnIsValid } from '../../utils/ssn';\nimport Loader from '../Loader';\nimport { numberSeparator } from '../../utils/formats';\nimport { DrivingDistance, InsuranceOption, Branch } from '../../@types/codegen/types';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { useTranslation } from 'react-i18next';\n\ninterface FormData {\n ssn: string;\n drivingDistance: DrivingDistance;\n}\n\ninterface InsuranceModal {\n id: string;\n branch?: Branch | null;\n onClose: () => void;\n insuranceOptions: InsuranceOption;\n}\n\nconst InsuranceModal = ({ id, branch, onClose, insuranceOptions }: InsuranceModal) => {\n const { t } = useTranslation();\n const [form, setForm] = useState<FormData>({\n ssn: '',\n drivingDistance: DrivingDistance.Between0And1000,\n });\n const [payload, setPayload] = useState<FormData>();\n const { loading, data, error } = useInsuranceCalculation(\n id,\n branch?.id ? branch?.id : undefined,\n ssnIsValid(payload?.ssn) ? payload?.ssn : undefined,\n payload?.drivingDistance\n );\n\n const onChangeSsn = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setForm({ ...form, ssn: e.currentTarget.value }),\n [form]\n );\n\n const onChangeDrivingDistance = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) =>\n setForm({ ...form, drivingDistance: e.currentTarget.value as DrivingDistance }),\n [form]\n );\n\n const onShowInsurances = useCallback(() => {\n PubSub.publish('InsuranceInterest');\n setPayload(form);\n }, [form]);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.keyCode === 13 && ssnIsValid(form.ssn) && !loading) {\n onShowInsurances();\n }\n },\n [form]\n );\n\n const options: OptionProps[] = [\n { value: DrivingDistance.Between0And1000, displayName: '0 - 1000' },\n { value: DrivingDistance.Between1000And1500, displayName: '1000 - 1500' },\n { value: DrivingDistance.Between1500And2000, displayName: '1500 - 2000' },\n { value: DrivingDistance.Between2000And2500, displayName: '2000 - 2500' },\n { value: DrivingDistance.Over2500, displayName: '2500+' },\n ];\n\n return (\n <Modal title={t('item.insurance')} onClose={onClose}>\n {(insuranceOptions?.description || insuranceOptions?.logotype) && (\n <Repeat>\n <ContentLogo>\n {insuranceOptions.description && (\n <ContentLogoText>\n <Content>\n <p>{insuranceOptions.description}</p>\n </Content>\n </ContentLogoText>\n )}\n {insuranceOptions.logotype && (\n <ContentLogoMedia>\n <LogoBox\n logo={insuranceOptions.logotype}\n alt={insuranceOptions.name || t('common.logotype')}\n wide\n />\n </ContentLogoMedia>\n )}\n </ContentLogo>\n </Repeat>\n )}\n\n <Repeat>\n <RepeatSmall>\n <RepeatTiny>\n <InputGroup>\n <InputGroupColumn>\n <InputLabel htmlFor=\"input-insurance-personalnumber\">\n {t('item.personalNumber')}\n </InputLabel>\n <InputText\n placeholder=\"\u00C5\u00C5\u00C5\u00C5MMDD-XXXX\"\n label={t('item.personalNumber')}\n value={form.ssn}\n onChange={onChangeSsn}\n onKeyDown={onKeyDown}\n id=\"input-insurance-personalnumber\"\n />\n </InputGroupColumn>\n <InputGroupColumn>\n <InputLabel htmlFor=\"input-insurance-mileage\">\n {t('item.estimatedAnualMileage')}\n </InputLabel>\n <InputSelect\n value={form.drivingDistance}\n onChange={onChangeDrivingDistance}\n options={options}\n unit=\"mil\"\n title={t('item.estimatedAnualMileage')}\n />\n </InputGroupColumn>\n </InputGroup>\n </RepeatTiny>\n <RepeatTiny>\n <ButtonPrimary\n fullWidth\n disabled={!ssnIsValid(form.ssn) || loading}\n onClick={onShowInsurances}\n >\n <ButtonContent>{t('item.showInsurances')}</ButtonContent>\n </ButtonPrimary>\n </RepeatTiny>\n </RepeatSmall>\n {false && (\n <RepeatSmall>\n <InputCheckbox id=\"input-insurance-save-personalnumber\">\n {t('item.savePersonalNumberOnThisDevice')}\n </InputCheckbox>\n </RepeatSmall>\n )}\n <RepeatSmall>\n <Content small>\n <p>{t('item.savePersonalNumberOnThisDeviceHelp')}</p>\n </Content>\n </RepeatSmall>\n </Repeat>\n\n {loading && (\n <Repeat>\n <Loader />\n </Repeat>\n )}\n\n {error && (\n <Repeat>\n <Snackbar severity=\"error\" icon heading={t('common.anErrorHasOccured') || undefined}>\n {t('item.couldNotfetchInsurances')}\n </Snackbar>\n </Repeat>\n )}\n\n <>\n {data?.insurances && (\n <Repeat>\n {data?.insurances.map((insurance) => (\n <Repeat key={insurance.name}>\n <DetailBox\n heading={`${numberSeparator(insurance.price)} ${insurance.unit}`}\n description={insurance.name}\n >\n <Repeat>\n <>\n {insurance.description && (\n <RepeatTiny>\n <Content>\n <p>{insurance.description}</p>\n </Content>\n </RepeatTiny>\n )}\n </>\n <>\n {insurance.url && (\n <RepeatTiny>\n <ButtonInline\n as=\"a\"\n href={insurance.url || ''}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n title={t('item.openPrePurchaseInformationInNewTab') || ''}\n >\n {t('item.openPrePurchaseInformationInNewTab')}\n </ButtonInline>\n </RepeatTiny>\n )}\n </>\n </Repeat>\n {insurance.items && insurance.items.length > 0 && (\n <Repeat>\n <H4>{t('item.insuranceIncludes')}</H4>\n {insurance.items.map((item) => (\n <RepeatSmall key={item.name || ''}>\n <ExtendInfo title={item.name || ''}>{item.description}</ExtendInfo>\n </RepeatSmall>\n ))}\n </Repeat>\n )}\n {insurance.addons && insurance.addons.length > 0 && (\n <Repeat>\n <H4>{t('item.addInsuranceHeading')}</H4>\n {insurance.addons.map((addon) => (\n <RepeatSmall key={addon.title || ''}>\n <ColumnRow>\n <ColumnRowItem>\n <ExtendInfo title={addon.title || ''}>{addon.description}</ExtendInfo>\n </ColumnRowItem>\n <ColumnRowItem>\n <UtilityTextBold>\n +{addon.price} {addon.unit}\n </UtilityTextBold>\n </ColumnRowItem>\n </ColumnRow>\n </RepeatSmall>\n ))}\n </Repeat>\n )}\n </DetailBox>\n </Repeat>\n ))}\n </Repeat>\n )}\n </>\n </Modal>\n );\n};\n\nexport default InsuranceModal;\n", "import React from 'react';\n\nimport { Wrapper, Main, Heading, Description, Footer, Foldout } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n heading: string;\n description?: string;\n children: React.ReactNode;\n}\n\nconst DetailBox = ({ heading, description, children }: Props) => {\n const { t } = useTranslation();\n const [extend, setExtend] = React.useState(false);\n const onToggleExtend = React.useCallback(() => setExtend(!extend), [extend]);\n\n const extendBtnText = extend ? t('common.lessInformation') : t('common.moreInformation');\n\n return (\n <Wrapper>\n <Main>\n <Heading>{heading}</Heading>\n {description && <Description>{description}</Description>}\n <Footer>\n <ButtonClear onClick={onToggleExtend}>\n <ButtonContent>{extendBtnText}</ButtonContent>\n </ButtonClear>\n </Footer>\n </Main>\n {extend && <Foldout>{children}</Foldout>}\n </Wrapper>\n );\n};\n\nexport default DetailBox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { H2 } from '../Heading';\n\nexport const Wrapper = styled.article`\n box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n overflow: hidden;\n`;\n\nexport const Main = styled.div`\n padding: ${size(2.5)};\n`;\n\nexport const Heading = styled(H2).attrs(() => ({\n as: 'h1',\n}))`\n margin-bottom: 0;\n`;\n\nexport const Description = styled.div`\n margin-top: ${size(1)};\n`;\n\nexport const Footer = styled.div`\n margin-top: ${size(1)};\n color: red;\n`;\n\nexport const Foldout = styled.div`\n background-color: ${(props) => props.theme.color.accent};\n padding: ${size(2.5)};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Header, Title, Info, InfoBtn, Extend } from './wrapper';\nimport { IconInfo } from '../Icon';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n title: string;\n children?: React.ReactNode;\n}\n\nconst ExtendInfo = ({ title, children }: Props) => {\n const { t } = useTranslation();\n const [extend, setExtend] = useState(false);\n const onToggleExtend = useCallback(() => setExtend(!extend), [extend]);\n\n return (\n <Wrapper>\n <Header>\n <Title>{title}</Title>\n {children && (\n <Info>\n <InfoBtn onClick={onToggleExtend} title={t('common.moreInformation') || ''}>\n <IconInfo block />\n </InfoBtn>\n </Info>\n )}\n </Header>\n {extend && <Extend>{children}</Extend>}\n </Wrapper>\n );\n};\n\nexport default ExtendInfo;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const Wrapper = styled.div``;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Title = styled.div``;\n\nexport const Info = styled.div`\n margin-left: ${size(1)};\n`;\n\nexport const InfoBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n font: inherit;\n font-size: 1em;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Extend = styled.div`\n padding-top: ${size(1)};\n margin-top: ${size(1)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n font-size: 0.875em;\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n children: string;\n htmlFor?: string;\n}\n\nconst InputLabel = ({ children, htmlFor }: Props) => (\n <Wrapper htmlFor={htmlFor}>{children}</Wrapper>\n);\n\nexport default InputLabel;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.label.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n margin-bottom: ${size(0.5)};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { Wrapper, Input } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n> & {\n value: string;\n placeholder: string;\n label: string;\n};\n\nconst InputText = ({ placeholder, label, value, id, onChange, onKeyDown }: Props) => (\n <Wrapper>\n <Input\n placeholder={placeholder}\n value={value}\n id={id}\n aria-label={label}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </Wrapper>\n);\n\nexport default InputText;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: stretch;\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 3px;\n`;\n\nexport const Input = styled.input.attrs(() => ({\n type: 'text',\n className: 'wayke__theme wayke__font--regular',\n}))`\n flex: 1 1 auto;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n padding: 0 ${size(2)};\n background-color: transparent;\n font-size: 16px;\n border: none;\n border-radius: 0;\n box-shadow: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n\n :focus {\n outline: none;\n }\n\n &::-webkit-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &::-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-ms-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n`;\n", "import * as React from 'react';\n\nimport { Input, Label, LabelText, Wrapper } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n> & {\n id: string;\n children: React.ReactNode;\n};\n\nconst InputCheckbox = ({ children, ...props }: Props) => {\n const { id } = props;\n return (\n <Wrapper aria-labelledby={id ? `${id}-label` : undefined}>\n <Input\n {...(props as React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n >)}\n />\n <Label id={`${id}-label`} htmlFor={id}>\n <LabelText>{children}</LabelText>\n </Label>\n </Wrapper>\n );\n};\n\nexport default InputCheckbox;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Label = styled.label.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: flex;\n align-items: flex-start;\n font-size: 1rem;\n line-height: 1.2;\n cursor: pointer;\n\n :before {\n content: '';\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: ${size(2.5)};\n height: ${size(2.5)};\n margin-right: ${size(1)};\n background-color: ${(props) => props.theme.color.accent};\n color: currentColor;\n border: none;\n box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.07);\n text-align: center;\n font-size: 15px;\n cursor: pointer;\n border-radius: 3px;\n margin-top: -2px;\n }\n`;\n\nexport const Wrapper = styled((props) => <div {...props} />).attrs(({ type, checked }) => ({\n role: type || 'checkbox',\n 'aria-checked': checked,\n}))`\n ${({ error }) =>\n error &&\n css`\n ${Label} {\n color: ${(props) => props.theme.color.ui.negative};\n\n :before {\n background-color: ${(props) => props.theme.color.ui.negativeLight};\n }\n }\n `}\n`;\n\nexport const Input = styled((props) => (\n <input {...props} className={`${props.checked ? 'checked' : undefined} ${props.className}`} />\n)).attrs(({ type, checked }) => ({\n checked,\n type: type || 'checkbox',\n}))`\n position: fixed;\n left: -9999px;\n opacity: 0;\n\n &[disabled] {\n & + ${Label} {\n color: ${(props) => props.theme.color.disabledText};\n\n &:before {\n background-color: ${(props) => props.theme.color.disabledBg};\n cursor: not-allowed;\n }\n }\n }\n\n &:checked,\n &.checked {\n & + ${Label} {\n :before {\n content: '\u2713';\n }\n }\n }\n`;\n\nexport const LabelText = styled.div`\n color: ${(props) => props.theme.color.textDark};\n`;\n", "import React from 'react';\n\nimport { Wrapper, Select, Option, Icon } from './wrapper';\nimport { IconChevronDown } from '../Icon';\n\nexport interface OptionProps {\n value: number | string;\n displayName?: number | string | null;\n}\n\ninterface Props {\n value?: string | number;\n options?: OptionProps[];\n unit?: string;\n title: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\nconst InputSelect = ({ value, options, onChange, unit, title }: Props) => (\n <Wrapper>\n <Select value={value} onChange={onChange} title={title} aria-label={title}>\n {options?.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.displayName || option.value}\n {unit ? ` ${unit}` : ''}\n </Option>\n ))}\n </Select>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Wrapper>\n);\n\nexport default InputSelect;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst iconSize = '0.875rem';\nconst selectPadding = size(2);\n\nexport const Wrapper = styled.div`\n position: relative;\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 3px;\n`;\n\nexport const Select = styled.select.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n position: relative;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n text-indent: 0.01px;\n border: 0;\n padding: 0 ${selectPadding};\n padding-right: calc(${iconSize} + ${selectPadding});\n background-color: transparent;\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n font-size: 16px;\n cursor: pointer;\n z-index: 1;\n\n :focus {\n outline: none;\n }\n\n ::-ms-expand {\n display: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\nexport const Option = styled.option`\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const Icon = styled.div`\n position: absolute;\n top: 50%;\n right: ${selectPadding};\n transform: translateY(-50%);\n font-size: ${iconSize};\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const InputGroup = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n display: flex;\n align-items: flex-start;\n margin: ${size(-0.5)};\n }\n`;\n\nexport const InputGroupColumn = styled.div`\n ${(props) => props.theme.breakpoint.LtSm} {\n & + & {\n margin-top: ${size(1)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n flex: 1 1 50%;\n padding: ${size(0.5)};\n }\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const ColumnRow = styled.div`\n display: flex;\n align-items: flex-start;\n`;\n\nexport const ColumnRowItem = styled.div`\n flex: 1 1 auto;\n\n :last-child:not(:only-child) {\n flex: 0 0 auto;\n }\n\n & + & {\n padding-left: ${size(2)};\n }\n`;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport INSURANCE_CALCULATION from '../queries/INSURANCE_CALCULATION';\n\nimport { DrivingDistance, QueryInsurancesArgs, Query } from '../@types/codegen/types';\n\nconst useInsuranceCalculation = (\n id: string,\n branchId?: string,\n personalNumber?: string,\n drivingDistance?: DrivingDistance\n): QueryResult<Query, QueryInsurancesArgs> =>\n useQuery<Query, QueryInsurancesArgs>(INSURANCE_CALCULATION, {\n variables: {\n id,\n branch: branchId as string,\n personalNumber: personalNumber as string,\n drivingDistance: drivingDistance as DrivingDistance,\n },\n skip: personalNumber === undefined || drivingDistance === undefined || branchId === undefined,\n });\n\nexport default useInsuranceCalculation;\n", "import { gql } from '@apollo/client';\n\nconst INSURANCE_CALCULATION = gql`\n query InsuranceCalculation(\n $id: ID!\n $branch: ID\n $personalNumber: PersonalNumber!\n $drivingDistance: DrivingDistance!\n ) {\n insurances(\n id: $id\n branch: $branch\n personalNumber: $personalNumber\n drivingDistance: $drivingDistance\n ) {\n name\n price\n unit\n description\n logotype\n addons {\n id\n title\n description\n price\n unit\n exclusions\n }\n items {\n name\n description\n }\n legality {\n description\n url\n }\n terms\n url\n }\n }\n`;\n\nexport default INSURANCE_CALCULATION;\n", "export const ssnIsValid = (s?: string) => (s ? /^\\d{2,4}\\d{2}\\d{2}\\-?\\d{4}$/.test(s) : false);\n", "import React, { useState, useCallback } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat';\nimport { VisualHeading } from '../Heading';\nimport OptionBox from '../OptionBox';\nimport { OptionBoxContent } from '../OptionBox/wrapper';\nimport Content from '../Content';\nimport { marked } from 'marked';\nimport { ButtonInline } from '../Button';\nimport { InsuranceOption } from '../../@types/codegen/types';\nimport InsuranceFreeModal from './InsuranceFreeModal';\nimport { useTranslation } from 'react-i18next';\n\ninterface InsuranceOptions {\n insuranceOptions: InsuranceOption[];\n}\n\nconst Insurance = ({ insuranceOptions }: InsuranceOptions) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n if (!insuranceOptions.length) {\n return null;\n }\n\n return (\n <>\n {modal && <InsuranceFreeModal onClose={toggleModal} insuranceOptions={insuranceOptions[0]} />}\n <Repeat>\n <RepeatTiny>\n <VisualHeading>\n {insuranceOptions[0]?.insuranceHeader ?? t('item.insurance')}\n </VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n <>\n {insuranceOptions.map((insuranceOption, index) => (\n <OptionBox\n key={`${insuranceOption.url}-${index}`}\n logo={insuranceOption.logotype || undefined}\n logoAlt={insuranceOption.name || t('common.logotype')}\n >\n {insuranceOption.description && (\n <Content\n dangerouslySetInnerHTML={{\n __html: marked(insuranceOption.description),\n }}\n />\n )}\n <OptionBoxContent>\n <p>\n <ButtonInline onClick={toggleModal}>{t('common.moreInformation')}</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n ))}\n </>\n </RepeatTiny>\n </Repeat>\n </>\n );\n};\n\nexport default Insurance;\n", "import React from 'react';\n\nimport Modal from '../Modal';\nimport Content from '../Content';\nimport { Repeat } from '../Repeat';\nimport { ButtonInline } from '../Button';\nimport LogoBox from '../LogoBox';\nimport { InsuranceOption } from '../../@types/codegen/types';\nimport { marked } from 'marked';\nimport { useTranslation } from 'react-i18next';\n\ninterface InsuranceFreeModal {\n onClose: () => void;\n insuranceOptions: InsuranceOption;\n}\n\nconst InsuranceFreeModal = ({ onClose, insuranceOptions }: InsuranceFreeModal) => {\n const { t } = useTranslation();\n return (\n <Modal title={insuranceOptions?.insuranceHeader ?? t('item.insurance')} onClose={onClose}>\n {insuranceOptions?.longDescription && (\n <Repeat>\n <Content\n dangerouslySetInnerHTML={{\n __html: marked(insuranceOptions.longDescription),\n }}\n ></Content>\n </Repeat>\n )}\n {insuranceOptions?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={insuranceOptions.url}\n title={t('item.readMoreAboutInsuranceInNewTab') || ''}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {t('item.readMoreAboutInsuranceInNewTab')}\n </ButtonInline>\n </Repeat>\n )}\n {insuranceOptions?.logotype && (\n <Repeat>\n <LogoBox\n logo={insuranceOptions.logotype}\n alt={insuranceOptions.name || t('common.logotype')}\n wide\n />\n </Repeat>\n )}\n </Modal>\n );\n};\n\nexport default InsuranceFreeModal;\n", "import React from 'react';\nimport { marked } from 'marked';\nimport { useTranslation } from 'react-i18next';\n\nimport { Repeat } from '../../components/Repeat';\nimport { ProductPageMainSection } from '../../components/ProductPage';\nimport Content from '../../components/Content';\nimport { H2 } from '../../components/Heading';\nimport { ButtonInline } from '../../components/Button';\nimport LogoBox from '../../components/LogoBox';\nimport { Maybe, PackageOption } from '../../@types/codegen/types';\n\ninterface ManufacturerPackageOption {\n packageOption?: Maybe<PackageOption>;\n}\n\nconst ManufacturerPackageOption = ({ packageOption }: ManufacturerPackageOption) => {\n const { t } = useTranslation();\n if (!packageOption) {\n return null;\n }\n\n return (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{packageOption.title}</H2>\n </Repeat>\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {packageOption.link.title ? packageOption.link.title : t('item.readMoreInNewTab')}\n </ButtonInline>\n </Repeat>\n )}\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt={t('common.logotype') || ''} wide />\n </Repeat>\n )}\n </ProductPageMainSection>\n );\n};\n\nexport default ManufacturerPackageOption;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport { Repeat, RepeatTiny } from '../../components/Repeat';\nimport ActionList from '../../components/ActionList';\nimport { ButtonPrimary, ButtonContent, ButtonInline } from '../../components/Button';\nimport { Columns, Column } from '../../components/Columns';\nimport { UtilityFontSizeSmall } from '../../components/Utility';\nimport { StateIndicator } from '../../components/StateIndicator';\nimport CheckMarkList, { CheckMarkListItem } from '../../components/CheckMarkList';\nimport Content from '../../components/Content';\nimport SwitchBar from '../../components/SwitchBar';\nimport {\n Manufacturer,\n PackageOption,\n Ecommerce,\n ContactOptions,\n Branch,\n} from '../../@types/codegen/types';\nimport BranchModal from './BranchModal';\nimport PackageOptionModal, { PackageOptionModalData } from './PackageOptionModal';\nimport format from 'date-fns/esm/format/index';\nimport sv from 'date-fns/esm/locale/sv/index';\nimport { useTranslation } from 'react-i18next';\n\ninterface CheckList {\n manufacturer?: Manufacturer | null;\n packageOptions: PackageOption[];\n ecommerce?: Ecommerce | null;\n branch?: Branch | null;\n contact?: ContactOptions | null;\n loadingCentralStorageVehicle: boolean;\n availableFrom?: Date | null;\n toggleEcomModal: () => void;\n}\n\nconst CheckList = ({\n manufacturer,\n packageOptions,\n ecommerce,\n branch,\n contact,\n availableFrom,\n toggleEcomModal,\n loadingCentralStorageVehicle,\n}: CheckList) => {\n const { t } = useTranslation();\n const [modalBranch, setModalBranch] = useState(false);\n const openModalBranch = useCallback(() => setModalBranch(true), []);\n const closeModalBranch = useCallback(() => setModalBranch(false), []);\n\n const [modal, setModal] = useState<PackageOptionModalData>();\n const onOpen = useCallback((nextModal: PackageOptionModalData) => setModal(nextModal), []);\n const onClose = useCallback(() => setModal(undefined), []);\n\n useEffect(() => {\n if ((branch || contact) && modalBranch) {\n setModalBranch(false);\n }\n }, [branch, contact]);\n\n const packageOption = manufacturer?.packageOption;\n\n return (\n <>\n {modalBranch && (\n <BranchModal\n loading={loadingCentralStorageVehicle}\n connections={branch?.connections}\n onClose={closeModalBranch}\n />\n )}\n {modal && <PackageOptionModal packageOption={modal} onClose={onClose} />}\n <Repeat>\n {ecommerce && ecommerce.enabled && (\n <RepeatTiny>\n <ButtonPrimary disabled={!!ecommerce.reserved} fullWidth onClick={toggleEcomModal}>\n <ButtonContent>{t('item.actions.buyOnline')}</ButtonContent>\n </ButtonPrimary>\n </RepeatTiny>\n )}\n {ecommerce?.reserved && (\n <RepeatTiny>\n <SwitchBar\n title={t('item.carIsReserved')}\n body={t('item.carIsReservedDescription') || undefined}\n >\n <Content>\n <p>{t('item.carIsReservedModalBody')}</p>\n </Content>\n </SwitchBar>\n </RepeatTiny>\n )}\n <ActionList branch={branch} contact={contact} />\n </Repeat>\n <Repeat>\n {availableFrom && new Date(availableFrom).valueOf() > new Date().valueOf() && (\n <RepeatTiny>\n <Columns $spacing={1} valign=\"center\">\n <Column noShrink>\n <StateIndicator $tone=\"pending\" />\n </Column>\n <Column>\n <UtilityFontSizeSmall>\n {t('item.availableFromDate', {\n date: format(new Date(availableFrom), 'dd MMMM yyyy', { locale: sv }),\n })}\n </UtilityFontSizeSmall>\n </Column>\n </Columns>\n </RepeatTiny>\n )}\n <RepeatTiny>\n <CheckMarkList>\n {packageOption?.title && (\n <CheckMarkListItem>\n <>\n {t('item.includingShort')}{' '}\n <ButtonInline\n onClick={() =>\n onOpen({\n title: packageOption?.title,\n image: packageOption?.image,\n description: packageOption?.description,\n link: packageOption?.link,\n })\n }\n >\n {packageOption.title}\n </ButtonInline>{' '}\n {t('item.usedWarrany').toLowerCase()}\n </>\n </CheckMarkListItem>\n )}\n {packageOptions?.map((packageOption, index) => (\n <CheckMarkListItem key={packageOption.title || index}>\n <>\n {t('item.includingShort')}{' '}\n <ButtonInline\n onClick={() =>\n onOpen({\n title: packageOption?.title,\n image: packageOption?.image,\n description: packageOption?.description,\n link: packageOption?.link,\n })\n }\n >\n {packageOption.title}\n </ButtonInline>\n </>\n </CheckMarkListItem>\n ))}\n {ecommerce?.withHomeDelivery && (\n <CheckMarkListItem>{t('item.homeDelivery')}</CheckMarkListItem>\n )}\n </CheckMarkList>\n </RepeatTiny>\n </Repeat>\n {(branch?.connections.length || 0) > 1 && (\n <Repeat>\n <SwitchBar\n title={t('item.centralWarehouseCar')}\n actionTitle={t('item.switchBranch') || ''}\n onClick={openModalBranch}\n >\n <Content>\n <p>{t('item.centralWarehouseCarDescription')}</p>\n </Content>\n </SwitchBar>\n </Repeat>\n )}\n </>\n );\n};\n\nexport default CheckList;\n", "import React, { useCallback } from 'react';\n\nimport ToggleItem from './toggle-item';\nimport { Maybe, ContactOptions, Branch } from '../../@types/codegen/types';\nimport { formatPhonenumber } from '../../utils/phonenumbers';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { useTranslation } from 'react-i18next';\n\ninterface ActionListProps {\n branch?: Maybe<Branch>;\n contact?: Maybe<ContactOptions>;\n}\n\nconst ActionList = ({ contact, branch }: ActionListProps) => {\n const { t } = useTranslation();\n const email = contact?.email || branch?.contact?.email;\n const phonenumber = contact?.phonenumber || branch?.contact?.phonenumber;\n\n const onClickMailVisible = useCallback(() => PubSub.publish('MailVisible'), []);\n const onClickPhoneVisible = useCallback(() => PubSub.publish('PhonenumberVisible'), []);\n const onClickPhoneValue = useCallback(() => PubSub.publish('PhonenumberCall'), []);\n\n if (!email && !phonenumber) {\n return null;\n }\n\n return (\n <>\n {email && (\n <ToggleItem\n onClickVisible={onClickMailVisible}\n title={t('item.actions.showEmail')}\n value={email}\n type=\"mailto\"\n />\n )}\n {phonenumber && (\n <ToggleItem\n title={t('item.actions.showPhoneNumber')}\n value={formatPhonenumber(phonenumber)}\n type=\"tel\"\n onClickVisible={onClickPhoneVisible}\n onClickValue={onClickPhoneValue}\n />\n )}\n </>\n );\n};\n\nexport default ActionList;\n", "import React, { useState, useCallback } from 'react';\nimport { ButtonSecondary, ButtonContent } from '../Button';\nimport { RepeatTiny } from '../Repeat';\nimport { useTranslation } from 'react-i18next';\n\ninterface ToggleItemProps {\n title: string;\n value: string;\n type: 'tel' | 'mailto';\n onClickVisible?: () => void;\n onClickValue?: () => void;\n}\n\nconst ToggleItem = ({ title, value, type, onClickVisible, onClickValue }: ToggleItemProps) => {\n const { t } = useTranslation();\n const [visible, setVisible] = useState(false);\n\n const _onClickValue = useCallback(() => {\n if (onClickValue) {\n onClickValue();\n }\n }, []);\n\n const onClick = useCallback(() => {\n if (!visible) {\n setVisible(true);\n if (onClickVisible) {\n onClickVisible();\n }\n }\n }, [visible]);\n\n const visibleTitle =\n type === 'tel'\n ? t('item.actions.callNumber')\n : type === 'mailto'\n ? t('item.actions.sendEmailTo')\n : '';\n\n return (\n <RepeatTiny>\n {visible ? (\n <ButtonSecondary\n onClick={_onClickValue}\n as=\"a\"\n href={`${type}:${value}`}\n title={`${visibleTitle} ${value}`}\n fullWidth\n >\n <ButtonContent>{value}</ButtonContent>\n </ButtonSecondary>\n ) : (\n <ButtonSecondary onClick={onClick} title={title} fullWidth>\n <ButtonContent>{title}</ButtonContent>\n </ButtonSecondary>\n )}\n </RepeatTiny>\n );\n};\n\nexport default ToggleItem;\n", "import { MetadataJson, parsePhoneNumberFromString } from 'libphonenumber-js/core';\n\nimport metadata from './metadata.min';\n\nconst typedMetadata = metadata as unknown as MetadataJson;\n\nexport const formatPhonenumber = (text: string) => {\n try {\n const parsed = parsePhoneNumberFromString(\n text.replace('-', '').replace(/ /g, ''),\n typedMetadata\n );\n return parsed?.formatNational() || text;\n } catch (e) {\n return text;\n }\n};\n", "const Metadata = {\n version: '1.7.53',\n country_calling_codes: { '46': ['SE'] },\n countries: {\n SE: [\n '46',\n '00',\n '(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}',\n [6, 7, 8, 9, 10],\n [\n ['(\\\\d{2})(\\\\d{2,3})(\\\\d{2})', '$1-$2 $3', ['20'], '0$1', 0, '$1 $2 $3'],\n ['(\\\\d{3})(\\\\d{4})', '$1-$2', ['9(?:00|39|44)'], '0$1', 0, '$1 $2'],\n [\n '(\\\\d{2})(\\\\d{3})(\\\\d{2})',\n '$1-$2 $3',\n ['[12][136]|3[356]|4[0246]|6[03]|90[1-9]'],\n '0$1',\n 0,\n '$1 $2 $3',\n ],\n ['(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})', '$1-$2 $3 $4', ['8'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2,3})(\\\\d{2})',\n '$1-$2 $3',\n [\n '1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])',\n ],\n '0$1',\n 0,\n '$1 $2 $3',\n ],\n ['(\\\\d{3})(\\\\d{2,3})(\\\\d{3})', '$1-$2 $3', ['9(?:00|39|44)'], '0$1', 0, '$1 $2 $3'],\n [\n '(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4',\n ['1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]'],\n '0$1',\n 0,\n '$1 $2 $3 $4',\n ],\n ['(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})', '$1-$2 $3 $4', ['10|7'], '0$1', 0, '$1 $2 $3 $4'],\n ['(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})', '$1-$2 $3 $4', ['8'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4',\n ['[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])'],\n '0$1',\n 0,\n '$1 $2 $3 $4',\n ],\n ['(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})', '$1-$2 $3 $4', ['9'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4 $5',\n ['[26]'],\n '0$1',\n 0,\n '$1 $2 $3 $4 $5',\n ],\n ],\n '0',\n 0,\n 0,\n 0,\n 0,\n 0,\n [\n [\n '(?:(?:[12][136]|3[356]|4[0246]|6[03]|8\\\\d)\\\\d|90[1-9])\\\\d{4,6}|(?:1(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\\\d)|2(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])|3(?:0[0-4]|1\\\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])|4(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\\\d|6[03-5]|7[013]|8[0-79]|9[01])|6(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])|9(?:1[0-68]|2\\\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8]))\\\\d{5,6}',\n [7, 8, 9],\n ],\n ['7[02369]\\\\d{7}', [9]],\n ['20\\\\d{4,7}', [6, 7, 8, 9]],\n ['649\\\\d{6}|9(?:00|39|44)[1-8]\\\\d{3,6}', [7, 8, 9, 10]],\n ['75[1-8]\\\\d{6}', [9]],\n 0,\n ['10[1-8]\\\\d{6}', [9]],\n ['74[02-9]\\\\d{6}', [9]],\n 0,\n ['77[0-7]\\\\d{6}', [9]],\n ],\n ],\n },\n nonGeographic: {},\n};\n\nexport default Metadata;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface IColumn {\n grow?: boolean;\n noShrink?: boolean;\n}\n\nexport const Column = styled.div<IColumn>`\n flex: 0 1 auto;\n\n ${({ grow }) =>\n grow &&\n css`\n flex-grow: 1;\n `}\n\n ${({ noShrink }) =>\n noShrink &&\n css`\n flex-shrink: 0;\n `}\n`;\n\ninterface IColumns {\n $spacing?: number;\n flexWrap?: boolean;\n flexInline?: boolean;\n valign?: 'start' | 'center' | 'end';\n align?: 'start' | 'center' | 'end';\n clearLtSm?: boolean;\n clearLtMd?: boolean;\n}\n\nexport const Columns = styled.div<IColumns>`\n display: flex;\n align-items: flex-start;\n\n ${({ valign }) =>\n valign === 'end'\n ? css`\n align-items: flex-end;\n `\n : valign === 'center'\n ? css`\n align-items: center;\n `\n : css`\n align-items: flex-start;\n `}\n\n ${({ align }) =>\n align === 'end'\n ? css`\n justify-content: flex-end;\n `\n : align === 'center'\n ? css`\n justify-content: center;\n `\n : css`\n justify-content: flex-start;\n `}\n\n ${({ $spacing }) =>\n $spacing &&\n css`\n margin: ${size($spacing / -2)};\n\n & > ${Column} {\n padding: ${size($spacing / 2)};\n }\n `}\n\n ${({ flexWrap }) =>\n flexWrap &&\n css`\n flex-wrap: wrap;\n `}\n\n ${({ flexInline }) =>\n flexInline &&\n css`\n display: inline-flex;\n `}\n\n ${({ clearLtSm }) =>\n clearLtSm &&\n css`\n ${(props) => props.theme.breakpoint.LtSm} {\n display: block;\n }\n `}\n\n ${({ clearLtMd }) =>\n clearLtMd &&\n css`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: block;\n }\n `}\n`;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface StateIndicatorProps {\n $tone?: 'success' | 'pending' | 'error';\n}\n\nexport const StateIndicator = styled.div<StateIndicatorProps>`\n width: ${size(1)};\n height: ${size(1)};\n border-radius: 50%;\n\n ${({ $tone }) =>\n $tone === 'success'\n ? css`\n background-color: ${(props) => props.theme.color.ui.positive};\n `\n : $tone === 'pending'\n ? css`\n background-color: ${(props) => props.theme.color.ui.neutral};\n `\n : $tone === 'error'\n ? css`\n background-color: ${(props) => props.theme.color.ui.negative};\n `\n : css`\n background-color: ${(props) => props.theme.color.textDarkLighten};\n `}\n`;\n", "import React from 'react';\n\nimport { List, Item, Icon, Label } from './wrapper';\nimport { IconCheck } from '../Icon';\n\nexport interface ICheckMarkList {\n children: React.ReactNode;\n}\n\nexport const CheckMarkListItem = ({ children }: ICheckMarkList) => (\n <Item>\n <Icon>\n <IconCheck block />\n </Icon>\n <Label>{children}</Label>\n </Item>\n);\n\nconst CheckMarkList = ({ children }: ICheckMarkList) => <List>{children}</List>;\n\nexport default CheckMarkList;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n position: relative;\n font-size: 0.875rem;\n\n & + & {\n margin-top: ${size(0.5)};\n }\n`;\n\nexport const Icon = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: absolute;\n left: 0;\n top: 4px; // Magic number\n font-size: 0.875em;\n`;\n\nexport const Label = styled.div`\n padding-left: calc(1em + ${size(1)});\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Header, Body, Info, Action, InfoContent, InfoBtn, Title } from './wrapper';\nimport Modal from '../Modal';\nimport { ButtonInline } from '../Button';\nimport { IconInfo } from '../Icon';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n title: string;\n body?: string;\n actionTitle?: string;\n children: React.ReactNode;\n onClick?: () => void;\n}\n\nconst SwitchBar = ({ title, body, actionTitle, children, onClick }: Props) => {\n const { t } = useTranslation();\n const [info, setInfo] = useState(false);\n const onToggleInfo = useCallback(() => setInfo(!info), [info]);\n\n return (\n <>\n <Wrapper>\n <Header>\n <Info>\n <InfoContent>\n <Title>{title}</Title>\n </InfoContent>\n {children && (\n <InfoContent>\n <InfoBtn onClick={onToggleInfo} title={t('common.moreInformation') || ''}>\n <IconInfo block />\n </InfoBtn>\n </InfoContent>\n )}\n </Info>\n {actionTitle && (\n <Action>\n <ButtonInline onClick={onClick} title={actionTitle}>\n {actionTitle}\n </ButtonInline>\n </Action>\n )}\n </Header>\n {body && <Body>{body}</Body>}\n </Wrapper>\n {info && (\n <Modal title={title} onClose={onToggleInfo}>\n {children}\n </Modal>\n )}\n </>\n );\n};\n\nexport default SwitchBar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const Wrapper = styled.div`\n padding: ${size(1.5)} ${size(2)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n font-size: 0.875rem;\n`;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Body = styled.div`\n font-size: 0.875rem;\n margin-top: ${size(1)};\n`;\n\nexport const Info = styled.div`\n flex: 1 1 auto;\n display: flex;\n align-items: center;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n padding-left: ${size(1.5)};\n font-size: 0.875rem;\n`;\n\nexport const InfoContent = styled.div`\n & + & {\n margin-left: ${size(0.75)};\n }\n`;\n\nexport const InfoBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Title = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1rem;\n`;\n", "import React, { useState, useCallback, useContext } from 'react';\n\nimport { Repeat, RepeatTiny } from '../../components/Repeat';\nimport InputSelect from '../../components/InputSelect';\nimport { ButtonPrimary, ButtonContent } from '../../components/Button';\nimport Modal from '../../components/Modal';\nimport Content from '../../components/Content';\nimport InputLabel from '../../components/InputLabel';\nimport { BranchConnection } from '../../@types/codegen/types';\nimport { CentralStorageContext } from '../../State/CentralStorage/CentralStorageContext';\nimport { useTranslation } from 'react-i18next';\n\ninterface BranchModalProps {\n loading: boolean;\n connections?: BranchConnection[];\n onClose: () => void;\n}\n\nconst BranchModal = ({ loading, connections, onClose }: BranchModalProps) => {\n const { t } = useTranslation();\n const { centralStorageId, setCentralStorageId } = useContext(CentralStorageContext);\n const [localValue, setLocalValue] = useState(centralStorageId);\n\n const onConfirm = useCallback((id: string) => {\n if (id) {\n setCentralStorageId(id);\n }\n }, []);\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => setLocalValue(e.currentTarget.value),\n []\n );\n\n if (!localValue) {\n return null;\n }\n\n return (\n <Modal title={t('item.switchBranch')} onClose={onClose}>\n <Repeat>\n <RepeatTiny>\n <Content>\n <p>{t('item.switchBranchDescription')}</p>\n </Content>\n </RepeatTiny>\n <RepeatTiny>\n <InputLabel>{t('item.chooseBranch')}</InputLabel>\n <InputSelect\n value={localValue}\n onChange={onChange}\n options={connections?.map((x) => ({\n value: x.id,\n displayName: x.name,\n }))}\n title={t('item.chooseBranch')}\n />\n </RepeatTiny>\n </Repeat>\n <Repeat>\n <ButtonPrimary\n disabled={loading}\n fullWidth\n onClick={() => onConfirm(localValue)}\n title={t('item.chooseSelectedBranch') || ''}\n >\n <ButtonContent>{t('common.choose')}</ButtonContent>\n </ButtonPrimary>\n </Repeat>\n </Modal>\n );\n};\n\nexport default BranchModal;\n", "import { createContext } from 'react';\n\nexport interface CentralStorageContextProps {\n centralStorageId?: string | null;\n setCentralStorageId: (id?: string) => void;\n}\n\nexport const CentralStorageContext = createContext<CentralStorageContextProps>({\n setCentralStorageId: (_) => {},\n});\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat';\nimport { ButtonInline } from '../../components/Button';\nimport Modal from '../../components/Modal';\nimport Content from '../../components/Content';\nimport LogoBox from '../../components/LogoBox';\n\ninterface ModelLink {\n href?: string | null;\n title?: string | null;\n}\n\nexport interface PackageOptionModalData {\n title?: string | null;\n image?: string | null;\n description?: string | null;\n link?: ModelLink | null;\n}\n\ninterface PackageOptionsModalProps {\n packageOption: PackageOptionModalData;\n onClose: () => void;\n}\n\nconst PackageOptionModal = ({ packageOption, onClose }: PackageOptionsModalProps) => (\n <Modal title={packageOption.title || ''} onClose={onClose}>\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt={packageOption.title || undefined} wide />\n </Repeat>\n )}\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.href && packageOption.link.title && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n {packageOption.link.title}\n </ButtonInline>\n </Repeat>\n )}\n </Modal>\n);\n\nexport default PackageOptionModal;\n", "import React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Container from '../../components/Container';\nimport { Repeat } from '../../components/Repeat';\n\nimport { PageSection } from '../../components/Page';\nimport SectionHeader from '../../components/SectionHeader';\nimport OverflowGrid from '../../components/OverflowGrid';\nimport ProductCard from '../../components/ProductCard';\nimport { H2 } from '../../components/Heading';\nimport useRelatedSearch from '../../State/RelatedSearch/useRelatedSearch';\nimport Loader from '../../components/Loader';\nimport { numberSeparator } from '../../utils/formats';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { regexPathGuid } from '../../utils/regex';\n\ninterface RelatedProps {\n id: string;\n hashRoute?: boolean;\n pathRoute?: string;\n authorizedReseller?: boolean;\n displayBranchName?: boolean;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst Related = ({\n id,\n hashRoute,\n pathRoute,\n authorizedReseller,\n displayBranchName,\n onClickSearchItem,\n}: RelatedProps) => {\n const { t } = useTranslation();\n const { loading, response, moreLikeThisUrl } = useRelatedSearch(id, !!authorizedReseller);\n\n const onItemClicked = useCallback((id: string) => {\n PubSub.publish('ItemClicked', id);\n if (onClickSearchItem) {\n onClickSearchItem(id);\n }\n }, []);\n\n if (!response?.documentList.documents.length || response?.documentList.documents.length === 0) {\n return null;\n }\n\n if (loading) {\n return <Loader />;\n }\n\n return (\n <PageSection accent large className=\"wayke__theme wayke__color--accent-bg\">\n <Container>\n {moreLikeThisUrl ? (\n <Repeat>\n <SectionHeader onClick={() => {}}>\n <H2 noMargin>{t('item.relatedVehicles')}</H2>\n </SectionHeader>\n </Repeat>\n ) : (\n <Repeat>\n <SectionHeader onClick={() => {}} actionTitle=\"Visa alla\">\n <H2 noMargin>{t('item.latestVehicles')}</H2>\n </SectionHeader>\n </Repeat>\n )}\n\n <Repeat>\n <OverflowGrid\n accentBg\n columns={1.05}\n columnsSm={2.1}\n columnsMd={3}\n spacing={2}\n items={response?.documentList.documents.map((document) => {\n const prefix = pathRoute ? `/${pathRoute}` : '/';\n\n const r = regexPathGuid();\n\n const pathRouteUrl =\n window.location.pathname === '/'\n ? `${prefix}${document._id}`\n : r.test(`${pathRoute}${id}`)\n ? window.location.pathname.replace(r, document._id)\n : `${window.location.pathname}${prefix}${document._id}`;\n\n return (\n <ProductCard\n key={document._id}\n id={document._id}\n onClick={onItemClicked}\n title={document.title}\n href={pathRoute ? pathRouteUrl : hashRoute ? `#${document._id}` : undefined}\n image={document.featuredImage?.files?.[0]?.url}\n description={document.shortDescription}\n branchName={displayBranchName ? document.branches?.[0]?.name : undefined}\n uspList={[\n {\n title: document.modelYear,\n },\n {\n title: `${numberSeparator(\n document.odometerReading?.value || document.mileage\n )} ${t(`odometer.${document.odometerReading?.unit || 'ScandinavianMile'}`)}`,\n },\n {\n title: document.gearboxType,\n },\n {\n title: document.fuelType,\n },\n ]}\n price={`${numberSeparator(document.price)} ${t('currency.default')}`}\n oldPrice={\n document.oldPrice !== undefined && document.price < document.oldPrice\n ? `${numberSeparator(document.oldPrice)} ${t('currency.default')}`\n : undefined\n }\n leasingPrice={\n document.leasingPrice !== undefined\n ? `${numberSeparator(document.leasingPrice)} ${t('currency.monthly')}`\n : undefined\n }\n businessLeasingPrice={\n document.businessLeasingPrice !== undefined\n ? `${numberSeparator(document.businessLeasingPrice)} ${t('currency.monthly')}`\n : undefined\n }\n pathRoute={pathRoute}\n />\n );\n })}\n />\n </Repeat>\n </Container>\n </PageSection>\n );\n};\n\nexport default Related;\n", "import React from 'react';\n\nimport { Wrapper, Heading, Action } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button';\n\ninterface Props {\n children: React.ReactNode;\n onClick?: () => void;\n actionTitle?: string;\n}\n\nconst SectionHeader = ({ children, onClick, actionTitle }: Props) => (\n <Wrapper>\n <Heading>{children}</Heading>\n {onClick && actionTitle && (\n <Action>\n <ButtonClear as=\"a\" href=\"#\" onClick={onClick}>\n <ButtonContent>{actionTitle}</ButtonContent>\n </ButtonClear>\n </Action>\n )}\n </Wrapper>\n);\n\nexport default SectionHeader;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n padding-left: ${size(2)};\n`;\n", "import React, { useRef, useCallback, useState, useEffect } from 'react';\n\nimport { Wrapper, ListWrapper, List, Item, PrevBtn, NextBtn } from './wrapper';\nimport { IconChevronLeft, IconChevronRight } from '../Icon';\nimport { NavButton } from '../NavButton';\n\nexport interface IOverflowGrid {\n items: React.ReactNode[];\n itemKeyBase?: string;\n spacing?: number;\n columns?: number;\n columnsSm?: number;\n columnsMd?: number;\n accentBg?: boolean;\n}\n\nconst OverflowGrid = ({\n items,\n itemKeyBase,\n spacing,\n columns,\n columnsSm,\n columnsMd,\n accentBg,\n}: IOverflowGrid) => {\n const overflowElement = useRef<HTMLUListElement | null>(null);\n\n const onPrev = useCallback(() => {\n const itemWidth = overflowElement.current?.children[0].clientWidth || 0;\n const scrollLeft = overflowElement.current?.scrollLeft || 0;\n\n if (scrollLeft > 0) {\n overflowElement.current?.scroll({\n left: scrollLeft - itemWidth,\n behavior: 'smooth',\n });\n }\n }, []);\n\n const onNext = useCallback(() => {\n const itemWidth = overflowElement.current?.children[0].clientWidth || 0;\n const scrollWidth = overflowElement.current?.scrollWidth || 0;\n const scrollLeft = overflowElement.current?.scrollLeft || 0;\n const overflowElementWidth = overflowElement.current?.offsetWidth || 0;\n const overflowElementScrollWidth = scrollWidth - overflowElementWidth;\n\n if (overflowElementScrollWidth !== scrollLeft) {\n overflowElement.current?.scroll({\n left: scrollLeft + itemWidth,\n behavior: 'smooth',\n });\n }\n }, []);\n\n // Hide navigation buttons depending on scroll position\n const [hidePrevNav, setHidePrevNav] = useState(true);\n const [hideNextNav, setHideNextNav] = useState(true);\n\n const onScroll = () => {\n const scrollLeft = overflowElement.current?.scrollLeft || 0;\n const scrollWidth = overflowElement.current?.scrollWidth || 0;\n const overflowElementWidth = overflowElement.current?.offsetWidth || 0;\n const overflowElementScrollWidth = scrollWidth - overflowElementWidth;\n\n setHidePrevNav(scrollLeft == 0 ? true : false);\n setHideNextNav(overflowElementScrollWidth == scrollLeft ? true : false);\n };\n\n useEffect(() => {\n onScroll();\n overflowElement.current?.addEventListener('scroll', onScroll);\n return () => overflowElement.current?.removeEventListener('scroll', onScroll);\n }, []);\n\n return (\n <Wrapper $accentBg={accentBg}>\n <ListWrapper $spacing={spacing}>\n <List\n ref={overflowElement}\n $columns={columns}\n $columnsSm={columnsSm}\n $columnsMd={columnsMd}\n >\n {items.map((item, i) => (\n <Item key={itemKeyBase ? `${itemKeyBase}-${i}` : `overflow-grid-item-${i}`}>\n {item}\n </Item>\n ))}\n </List>\n </ListWrapper>\n {!hidePrevNav && (\n <PrevBtn>\n <NavButton onClick={onPrev} title=\"Previous\">\n <IconChevronLeft />\n </NavButton>\n </PrevBtn>\n )}\n {!hideNextNav && (\n <NextBtn>\n <NavButton onClick={onNext} title=\"Next\">\n <IconChevronRight />\n </NavButton>\n </NextBtn>\n )}\n </Wrapper>\n );\n};\n\nexport default OverflowGrid;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface WrapperProps {\n $accentBg?: boolean;\n}\n\nexport const Wrapper = styled.div<WrapperProps>`\n --container-gutter: ${size(2)};\n --bg: ${(props) => props.theme.color.bg};\n\n ${(props) => props.theme.breakpoint.Sm} {\n --container-gutter: ${size(3)};\n }\n\n position: relative;\n\n ${({ $accentBg }) =>\n $accentBg &&\n css`\n --bg: ${(props) => props.theme.color.accent};\n `}\n`;\n\nexport const Item = styled.li`\n flex: 1 0 auto;\n width: 100%;\n max-width: 100%;\n scroll-snap-align: start;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n &:is(:only-child, #important) {\n width: 100%;\n max-width: 100%;\n }\n }\n`;\n\ninterface ListProps {\n $columns?: number;\n $columnsSm?: number;\n $columnsMd?: number;\n}\n\nexport const List = styled.ul<ListProps>`\n display: flex;\n align-items: stretch;\n list-style: none;\n padding: 0 var(--container-gutter);\n margin: 0;\n overflow: auto;\n scroll-snap-type: x mandatory;\n scroll-padding-left: var(--container-gutter);\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n ${({ $columns }) =>\n $columns &&\n css`\n ${Item} {\n width: ${100 / $columns}%;\n max-width: ${100 / $columns}%;\n }\n `}\n\n ${({ $columnsSm }) =>\n $columnsSm &&\n css`\n ${(props) => props.theme.breakpoint.Sm} {\n ${Item} {\n width: ${100 / $columnsSm}%;\n max-width: ${100 / $columnsSm}%;\n }\n }\n `}\n\n ${({ $columnsMd }) =>\n $columnsMd &&\n css`\n ${(props) => props.theme.breakpoint.Md} {\n ${Item} {\n width: ${100 / $columnsMd}%;\n max-width: ${100 / $columnsMd}%;\n }\n }\n `}\n`;\n\ninterface ListWrapperProps {\n $spacing?: number;\n}\n\nexport const ListWrapper = styled.div<ListWrapperProps>`\n position: relative;\n overflow: hidden;\n margin: 0 calc(var(--container-gutter) * -1);\n\n ${(props) => props.theme.breakpoint.Md} {\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n width: var(--container-gutter);\n background-color: var(--bg);\n z-index: 1;\n }\n\n &::before {\n left: 0;\n\n ${({ $spacing }) =>\n $spacing\n ? css`\n mask-image: linear-gradient(to right, #000 ${size($spacing)}, transparent);\n `\n : css`\n mask-image: ${(props) => props.theme.mask.gradient.toRight};\n `}\n }\n\n &::after {\n right: 0;\n\n ${({ $spacing }) =>\n $spacing\n ? css`\n mask-image: linear-gradient(to left, #000 ${size($spacing)}, transparent);\n `\n : css`\n mask-image: ${(props) => props.theme.mask.gradient.toLeft};\n `}\n }\n }\n\n ${({ $spacing }) =>\n $spacing &&\n css`\n ${List} {\n margin: 0 -${size($spacing / 2)};\n }\n\n ${Item} {\n padding: 0 ${size($spacing / 2)};\n }\n `}\n`;\n\nconst NavBtn = styled.div`\n position: absolute;\n top: 50%;\n z-index: 2;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n display: none;\n }\n`;\n\nexport const PrevBtn = styled(NavBtn)`\n left: 0;\n transform: translate(-50%, -50%);\n`;\n\nexport const NextBtn = styled(NavBtn)`\n right: 0;\n transform: translate(50%, -50%);\n`;\n", "import { useContext, useEffect } from 'react';\n\nimport { RelatedSearchContext } from './RelatedSearchContext';\n\nconst useRelatedSearch = (id: string, authorizedReseller?: boolean) => {\n const data = useContext(RelatedSearchContext);\n\n useEffect(() => {\n const searchParams = new URLSearchParams();\n searchParams.set('hits', '3');\n if (data.moreLikeThisUrl && id) {\n searchParams.set('id', id);\n }\n if (authorizedReseller) {\n searchParams.set('isAuthorizedResellerForManufacturer', 'true');\n }\n data.fetchRelated(searchParams);\n }, [id]);\n\n return data;\n};\n\nexport default useRelatedSearch;\n", "import { createContext } from 'react';\nimport { Search } from '../../@types/search';\n\nexport interface RelatedSearchContextProps {\n moreLikeThisUrl: boolean;\n loading: boolean;\n response?: Search;\n error: boolean;\n fetchRelated: (searchParmas: URLSearchParams) => void;\n}\n\nexport const RelatedSearchContext = createContext<RelatedSearchContextProps>({\n moreLikeThisUrl: false,\n loading: false,\n error: false,\n response: undefined,\n fetchRelated: (_) => {},\n});\n", "export const regexGuid =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst regexEndGuid = /[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n\nexport const escapeRegExpString = (s: string) => s.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n\nexport const regexPathGuid = (path?: string) => {\n if (!path || path) {\n return regexEndGuid;\n }\n const r = new RegExp(`${escapeRegExpString(path)}${regexEndGuid.source}`, 'gi');\n return r;\n};\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat';\nimport { ProductPageMainSection } from '../../components/ProductPage';\nimport Content from '../../components/Content';\nimport { H2 } from '../../components/Heading';\nimport { ButtonInline } from '../../components/Button';\nimport LogoBox from '../../components/LogoBox';\nimport { PackageOption } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface PackageOptionsProps {\n packageOptions?: PackageOption[] | null;\n}\n\nconst PackageOptions = ({ packageOptions }: PackageOptionsProps) => {\n const { t } = useTranslation();\n if (!packageOptions) {\n return null;\n }\n\n return (\n <>\n {packageOptions.map((packageOption, index) => (\n <ProductPageMainSection key={packageOption.title || index}>\n <Repeat>\n <H2 noMargin>{packageOption.title}</H2>\n </Repeat>\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {packageOption.link.title ? packageOption.link.title : t('item.readMoreInNewTab')}\n </ButtonInline>\n </Repeat>\n )}\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt={t('common.logotype') || ''} wide />\n </Repeat>\n )}\n </ProductPageMainSection>\n ))}\n </>\n );\n};\n\nexport default PackageOptions;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport { Repeat } from '../../components/Repeat';\nimport Content from '../../components/Content';\nimport { ProductPageContentLimit } from '../../components/ProductPage';\nimport { H2 } from '../../components/Heading';\nimport { ButtonContent, ButtonInline, ButtonInlineBold } from '../../components/Button';\nimport { TableColumn, TableColumnRow, TableColumnCell } from '../../components/TableColumn';\n\nimport OpeningHours from '../../components/OpeningHours';\nimport PhoneNumber from '../../components/PhoneNumber';\nimport Map from '../../components/Map';\n\nimport { Branch, Maybe } from '../../@types/codegen/types';\nimport BranchModal from './BranchModal';\nimport { formatPhonenumber } from '../../utils/phonenumbers';\nimport { useTranslation } from 'react-i18next';\n\ninterface BranchProps {\n branch?: Maybe<Branch>;\n loading: boolean;\n displayBranchName?: boolean;\n}\n\nconst Branch = ({ branch, loading, displayBranchName }: BranchProps) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState(false);\n\n const openModal = useCallback(() => setModal(true), []);\n const closeModal = useCallback(() => setModal(false), []);\n\n useEffect(() => {\n if (branch && modal) {\n setModal(false);\n }\n }, [branch]);\n\n if (!branch) {\n return null;\n }\n\n return (\n <>\n {modal && (\n <BranchModal loading={loading} connections={branch?.connections} onClose={closeModal} />\n )}\n <Repeat>\n <H2 noMargin>\n {displayBranchName\n ? `${t('item.thisCarsIsLocatedAt')} ${branch.name}`\n : branch?.location?.city\n ? t('item.thisCarIsAvailableAtOurBranch', { location: branch?.location?.city })\n : t('item.contact')}\n </H2>\n </Repeat>\n <Repeat>\n <Map position={branch?.location?.position} />\n </Repeat>\n {(branch?.connections?.length || 0) > 1 && (\n <Repeat>\n <Content>\n <p>\n {t('item.centralWarehouseCarDescriptionShort')}{' '}\n <ButtonInline\n as=\"span\"\n role=\"button\"\n onClick={openModal}\n inline\n title={t('item.clickHereToShowContactToAnotherBranch') || ''}\n >\n {t('item.clickHereToShowContactToAnotherBranch')}\n </ButtonInline>\n .\n </p>\n </Content>\n </Repeat>\n )}\n <Repeat>\n <ProductPageContentLimit>\n <Repeat>\n <TableColumn>\n {branch?.location?.streetAddress && branch?.location?.city && (\n <TableColumnRow>\n <TableColumnCell>{t('common.address')}</TableColumnCell>\n <TableColumnCell>\n <ButtonInlineBold>\n <ButtonContent>{`${branch?.location?.streetAddress}, ${branch?.location?.city}`}</ButtonContent>\n </ButtonInlineBold>\n </TableColumnCell>\n </TableColumnRow>\n )}\n {branch?.contact?.phonenumber && (\n <PhoneNumber phoneNumber={formatPhonenumber(branch.contact.phonenumber)} />\n )}\n </TableColumn>\n </Repeat>\n {branch?.openingHours && (\n <Repeat>\n <OpeningHours openingHours={branch.openingHours} />\n </Repeat>\n )}\n </ProductPageContentLimit>\n </Repeat>\n </>\n );\n};\n\nexport default Branch;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const TableColumn = styled.div`\n line-height: 1.2;\n`;\n\nexport const TableColumnRow = styled.div`\n display: flex;\n align-items: flex-start;\n margin: ${size(-1)};\n`;\n\nexport const TableColumnCell = styled.div`\n flex: 1 0 50%;\n padding: ${size(1)};\n`;\n", "import React, { useMemo } from 'react';\nimport { RepeatSmall } from '../Repeat';\nimport Badge from '../Badge';\nimport { TableColumn, TableColumnRow, TableColumnCell } from '../TableColumn';\nimport { UtilityTextBold } from '../Utility';\n\nimport { OpeningHours, Maybe } from '../../@types/codegen/types';\nimport i18next from 'i18next';\nimport { useTranslation } from 'react-i18next';\n\ntype Days = Omit<OpeningHours, '__typename'>;\ntype KeyType = keyof Days;\nconst KeyOrder: KeyType[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n 'sunday',\n];\n\nconst TranslateWeekDays = (d: KeyType) => {\n switch (d) {\n case 'monday':\n return i18next.t('common.mondayShort');\n case 'tuesday':\n return i18next.t('common.tuesdayShort');\n case 'wednesday':\n return i18next.t('common.wednesdayShort');\n case 'thursday':\n return i18next.t('common.thursdayShort');\n case 'friday':\n return i18next.t('common.fridayShort');\n case 'saturday':\n return i18next.t('common.saturdayShort');\n case 'sunday':\n return i18next.t('common.sundayShort');\n }\n};\n\ninterface OpeningHoursSample {\n titleFrom: string;\n titleTo?: string;\n from?: string | null;\n until?: string | null;\n}\n\nconst arr: OpeningHoursSample[] = [];\n\nconst GetOpeningHours = (o: OpeningHours) =>\n KeyOrder.reduce((prev, current) => {\n const title = TranslateWeekDays(current);\n const item = o[current];\n const previous = prev?.[prev.length - 1];\n if (previous && previous.from == item?.from && previous.until === item?.until) {\n prev[prev.length - 1].titleTo = title;\n } else {\n prev.push({\n titleFrom: title,\n from: item?.from,\n until: item?.until,\n });\n }\n\n return prev;\n }, arr.slice());\n\nconst GetOpeningHoursToday = (o: OpeningHours) => {\n const dayNumber = new Date().getDay();\n const day = KeyOrder[dayNumber === 0 ? 6 : dayNumber - 1] as KeyType;\n const current = o[day];\n return {\n title: current ? i18next.t('item.openingHoursToday') : i18next.t('item.closedToday'),\n from: current?.from,\n until: current?.until,\n };\n};\n\nconst valuOfDateString = (s: string) => {\n const splitted = s.split(':').map((x) => parseInt(x, 10));\n return new Date().setHours(splitted[0], splitted[1]).valueOf();\n};\n\ninterface OpeningHoursProps {\n openingHours?: Maybe<OpeningHours>;\n}\n\nconst OpeningHours = ({ openingHours }: OpeningHoursProps) => {\n const { t } = useTranslation();\n const today = useMemo(\n () => (openingHours ? GetOpeningHoursToday(openingHours) : null),\n [openingHours]\n );\n\n const currentlyOpen = useMemo(() => {\n try {\n if (today?.from && today?.until) {\n const currentDate = new Date().valueOf();\n const from = valuOfDateString(today.from);\n const until = valuOfDateString(today.until);\n return currentDate >= from && currentDate <= until;\n }\n } catch (e) {\n return false;\n }\n }, [today]);\n\n const oh = useMemo(() => (openingHours ? GetOpeningHours(openingHours) : null), [openingHours]);\n if (!oh) {\n return null;\n }\n\n return (\n <>\n <RepeatSmall>\n <Badge\n label={currentlyOpen ? t('item.open') : t('item.closed')}\n severity={currentlyOpen ? 'positive' : 'negative'}\n />\n </RepeatSmall>\n <RepeatSmall>\n <TableColumn>\n <TableColumnRow>\n <TableColumnCell>\n <UtilityTextBold>{today?.title}</UtilityTextBold>\n </TableColumnCell>\n <TableColumnCell>\n <UtilityTextBold>\n {today?.from ? `${today.from}-${today.until}` : t('item.closed')}\n </UtilityTextBold>\n </TableColumnCell>\n </TableColumnRow>\n {oh.map((o) => (\n <TableColumnRow key={o.titleFrom}>\n <TableColumnCell>\n {o.titleTo ? `${o.titleFrom}-${o.titleTo}` : o.titleFrom}\n </TableColumnCell>\n <TableColumnCell>\n {o.from ? `${o.from}-${o.until}` : t('item.closed')}\n </TableColumnCell>\n </TableColumnRow>\n ))}\n </TableColumn>\n </RepeatSmall>\n </>\n );\n};\n\nexport default OpeningHours;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n label: string;\n severity?: 'positive' | 'negative';\n}\n\nconst Badge = ({ label, severity }: Props) => <Wrapper severity={severity}>{label}</Wrapper>;\n\nexport default Badge;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport theme from '../../layout/theme';\n\nconst getBg = (severity: string | undefined): string => {\n let bg = theme.color.textDark;\n\n if (severity === 'positive') {\n bg = theme.color.ui.positive;\n } else if (severity === 'negative') {\n bg = theme.color.ui.negative;\n }\n\n return bg;\n};\n\ninterface Wrapper {\n severity?: string;\n}\n\nexport const Wrapper = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))<Wrapper>`\n display: inline-block;\n background-color: ${(props): string => getBg(props.severity)};\n padding: ${size(0.75)} ${size(1.5)};\n color: ${(props) => props.theme.color.textLight};\n border-radius: 3px;\n font-size: 0.75rem;\n line-height: 1.2;\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { TableColumnRow, TableColumnCell } from '../TableColumn';\nimport { ButtonContent, ButtonInlineBold } from '../Button';\nimport { useTranslation } from 'react-i18next';\n\ninterface PhoneNumberProps {\n phoneNumber: string;\n}\n\nconst PhoneNumber = ({ phoneNumber }: PhoneNumberProps) => {\n const { t } = useTranslation();\n const [visible, setVisible] = useState(false);\n\n const onClick = useCallback(() => !visible && setVisible(true), [visible]);\n\n return (\n <TableColumnRow>\n <TableColumnCell>{t('other.phoneNumber')}</TableColumnCell>\n <TableColumnCell>\n {visible ? (\n <ButtonInlineBold\n as=\"a\"\n href={`tel:${phoneNumber}`}\n title={t('other.callPhoneNumber', { phoneNumber }) || ''}\n >\n <ButtonContent>{phoneNumber}</ButtonContent>\n </ButtonInlineBold>\n ) : (\n <ButtonInlineBold onClick={onClick} title={t('other.showPhoneNumber') || ''}>\n <ButtonContent>{t('other.showPhoneNumber')}</ButtonContent>\n </ButtonInlineBold>\n )}\n </TableColumnCell>\n </TableColumnRow>\n );\n};\n\nexport default PhoneNumber;\n", "import React, { useState, useCallback } from 'react';\nimport useSettings from '../../State/Settings/useSettings';\n\nimport { Wrapper, Image, Placeholder, PlaceholderAction } from './wrapper';\nimport { ButtonSecondary, ButtonContent } from '../Button';\nimport { Position, Maybe } from '../../@types/codegen/types';\nimport { useTranslation } from 'react-i18next';\n\ninterface StaticMapProps {\n position?: Maybe<Position>;\n}\n\nconst StaticMap = ({ position }: StaticMapProps) => {\n const { t } = useTranslation();\n const { googleMapsApiKey, googleMapsMarker } = useSettings();\n const [visible, setVisible] = useState(false);\n\n const onShowMap = useCallback((e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n if (googleMapsApiKey) {\n e.preventDefault();\n setVisible(true);\n }\n }, []);\n\n if (!position) {\n return null;\n }\n\n const { latitude, longitude } = position;\n\n if (visible && googleMapsApiKey) {\n return (\n <Wrapper\n href={`http://maps.google.com/maps?q=${latitude},${longitude}`}\n title={t('item.showOnGoogleMaps')}\n target=\"_blank\"\n rel=\"nofollow noopener noreferrer\"\n >\n <Image\n src={`https://maps.googleapis.com/maps/api/staticmap?center=${latitude},${longitude}&zoom=10&size=640x280&maptype=roadmap&markers=${\n googleMapsMarker ? `icon:${encodeURIComponent(googleMapsMarker)}` : ''\n }%7C${latitude},${longitude}&key=${googleMapsApiKey}`}\n alt={t('item.googleMapsMapAlt')}\n />\n </Wrapper>\n );\n }\n return (\n <Placeholder\n href={`http://maps.google.com/maps?q=${latitude},${longitude}`}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n onClick={onShowMap}\n >\n <PlaceholderAction>\n <ButtonSecondary as=\"div\">\n <ButtonContent>{t('item.googleMapsPlaceholderInit')}</ButtonContent>\n </ButtonSecondary>\n </PlaceholderAction>\n </Placeholder>\n );\n};\n\nexport default StaticMap;\n", "import { useContext } from 'react';\n\nimport { SettingsContext } from './SettingsContext';\n\nconst useSettings = () => useContext(SettingsContext);\n\nexport default useSettings;\n", "import { createContext } from 'react';\n\nexport interface SettingsContextProps {\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n ecomSettings?: {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n };\n}\n\nexport const SettingsContext = createContext<SettingsContextProps>({});\n", "import styled from 'styled-components';\n\nexport const Wrapper = styled.a`\n display: block;\n`;\n\nexport const Image = styled.img`\n display: block;\n width: 100%;\n border-radius: 3px;\n`;\n\nexport const Placeholder = styled.a`\n display: block;\n position: relative;\n width: 100%;\n height: 0;\n padding-bottom: 43.75%; // Proportions of Google Static Map (640x280)\n background-image: linear-gradient(-15deg, #dfe4ce, #c1d6ea, #dfe4ce);\n border-radius: 3px;\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const PlaceholderAction = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n", "import { useContext, useEffect } from 'react';\nimport { CentralStorageContext } from './CentralStorageContext';\nimport { Vehicle } from '../../@types/codegen/types';\nimport useSearchItemBranch from '../../hooks/useSearchItemBranch';\n\nconst useCentralStorage = (vehicle?: Vehicle | null) => {\n const { centralStorageId, setCentralStorageId } = useContext(CentralStorageContext);\n\n const connections = vehicle?.branch?.connections;\n const branchId = centralStorageId\n ? connections?.find((x) => x.id === centralStorageId)?.id\n : undefined;\n\n const { data, loading } = useSearchItemBranch(vehicle?.id, branchId);\n\n useEffect(() => {\n if ((connections?.length || 0) > 0) {\n const match = centralStorageId\n ? connections?.find((x) => x.id === centralStorageId)\n : undefined;\n\n if (!match) {\n const first = connections?.[0];\n if (first) {\n setCentralStorageId(first.id);\n }\n }\n }\n }, [connections]);\n\n return {\n vehicle: (connections?.length || 0) > 0 ? data?.vehicle : vehicle,\n loading,\n };\n};\n\nexport default useCentralStorage;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport SEARCH_ITEM_BRANCH_QUERY from '../queries/SEARCH_ITEM_BRANCH_QUERY';\nimport { QueryVehicleArgs, Query } from '../@types/codegen/types';\n\nconst useSearchItemBranch = (\n id?: string | null,\n branch?: string | null\n): QueryResult<Query, QueryVehicleArgs> =>\n useQuery<Query, QueryVehicleArgs>(SEARCH_ITEM_BRANCH_QUERY, {\n variables: { id: id as string, branch: branch as string },\n skip: !id || !branch,\n });\n\nexport default useSearchItemBranch;\n", "import { gql } from '@apollo/client';\n\nconst HoursOpen = gql`\n fragment HoursOpen on HoursOpen {\n from\n until\n }\n`;\n\nconst SEARCH_ITEM_BRANCH_QUERY = gql`\n query SearchItemBranch($id: ID!, $branch: ID) {\n vehicle(id: $id, branch: $branch) {\n contact {\n name\n email\n phonenumber\n avatar\n }\n accessories {\n articleNumber\n description\n excerpt\n id\n images\n logotype\n manufacturer\n model\n name\n price\n assemblyPrice\n productPage {\n title\n url\n }\n salePrice\n }\n branch {\n connections {\n id\n name\n location {\n city\n county\n streetAddress\n postalCode\n position {\n latitude\n longitude\n }\n }\n }\n contact {\n name\n email\n phonenumber\n avatar\n }\n id\n description\n name\n homepage\n flags {\n mrf\n centralStorage\n ecommerce\n authorizedReseller\n }\n logotype\n openingHours {\n monday {\n ...HoursOpen\n }\n tuesday {\n ...HoursOpen\n }\n wednesday {\n ...HoursOpen\n }\n thursday {\n ...HoursOpen\n }\n friday {\n ...HoursOpen\n }\n saturday {\n ...HoursOpen\n }\n sunday {\n ...HoursOpen\n }\n }\n organization {\n branches {\n id\n }\n parent {\n id\n }\n }\n location {\n position {\n latitude\n longitude\n }\n city\n county\n streetAddress\n postalCode\n }\n promos {\n description\n image\n title\n }\n services {\n markdown\n title\n }\n }\n insuranceOptions {\n insuranceHeader\n institute\n identifier\n logotype\n name\n description\n longDescription\n url\n insuranceText\n requiresPersonalNumber\n requiresDistance\n terms\n }\n }\n }\n ${HoursOpen}\n`;\n\nexport default SEARCH_ITEM_BRANCH_QUERY;\n", "import React from 'react';\n\nimport Container from '../../components/Container';\nimport { Page, PageSection } from '../../components/Page';\nimport { H1 } from '../../components/Heading';\nimport { useTranslation } from 'react-i18next';\n\nconst Page404 = () => {\n const { t } = useTranslation();\n return (\n <Page>\n <PageSection large>\n <Container>\n <H1 noMargin>{t('other.error404')}</H1>\n </Container>\n </PageSection>\n </Page>\n );\n};\n\nexport default Page404;\n", "import React from 'react';\n\nimport Container from '../../components/Container';\nimport { Page, PageSection } from '../../components/Page';\nimport Loader from '../../components/Loader';\n\nconst PageLoading = () => (\n <Page>\n <PageSection large>\n <Container>\n <Loader />\n </Container>\n </PageSection>\n </Page>\n);\n\nexport default PageLoading;\n", "import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Category, Property } from '../../@types/vehicle-properties';\nimport PropertyTreeCreator from '../../utils/vehicle-properties/property-tree-creator';\nimport sortTree from '../../utils/vehicle-properties/property-tree-sorter';\nimport addCustomProperties from '../../utils/vehicle-properties/custom-property-adder';\nimport removeProperties from '../../utils/vehicle-properties/property-remover';\nimport MetadataItem from './MetadataItem';\n\nimport { H5 } from '../../components/Heading';\nimport { Repeat } from '../../components/Repeat';\nimport { TableList } from '../../components/TableList';\nimport Tabs from '../../components/Tabs';\nimport { VehicleData } from '../../@types/codegen/types';\n\ninterface MetadataSubCategoryProps {\n name: string;\n properties: Property[];\n}\n\nconst MetadataSubCategory = ({ name, properties }: MetadataSubCategoryProps) => (\n <Repeat>\n <H5 as=\"h3\">{name}</H5>\n <TableList>\n {!!properties.length &&\n properties.map((property, index) => (\n <MetadataItem\n name={property.name}\n hint={property.hint}\n value={property.value}\n unit={property.unit}\n key={`${property.name}-${index}`}\n />\n ))}\n </TableList>\n </Repeat>\n);\n\ninterface MetadataCaregoryProps {\n properties: Property[];\n subCategories: Category[];\n}\n\nconst MetadataCategory = ({ properties, subCategories }: MetadataCaregoryProps) => (\n <div className=\"tab-section\">\n {!!properties.length && (\n <Repeat>\n <TableList>\n {properties.map((property, index) => (\n <MetadataItem\n name={property.name}\n hint={property.hint}\n value={property.value}\n unit={property.unit}\n key={`${property.name}-${index}`}\n />\n ))}\n </TableList>\n </Repeat>\n )}\n {!!subCategories.length &&\n subCategories.map((subCategory, index) => (\n <MetadataSubCategory\n name={subCategory.name}\n properties={subCategory.properties}\n key={`${subCategory.name}-${index}`}\n />\n ))}\n </div>\n);\n\ninterface PropertySetProps {\n propertySet: any;\n vehicleData: VehicleData;\n}\n\nconst PropertySet = ({ propertySet, vehicleData }: PropertySetProps) => {\n const [activeCategoryId, setActiveCategoryId] = useState(-1);\n const mappedProperties = useMemo(() => {\n if (!propertySet) {\n return undefined;\n }\n\n const newProperties = removeProperties(propertySet);\n const enrichedProperties = addCustomProperties(vehicleData, newProperties);\n\n const tree = new PropertyTreeCreator(enrichedProperties).create();\n sortTree(tree);\n return tree;\n }, [propertySet]);\n\n useEffect(() => {\n const categories =\n mappedProperties?.categories?.length !== undefined ? mappedProperties?.categories : undefined;\n\n if (activeCategoryId < 0 && categories !== undefined && categories.length > 0) {\n setActiveCategoryId(categories[0].id);\n }\n }, [mappedProperties]);\n\n const onTab = useCallback((id: string) => setActiveCategoryId(parseInt(id, 10)), []);\n\n const activeCategory = mappedProperties?.categories?.find(\n (category) => category.id === activeCategoryId\n );\n\n return (\n <>\n <Repeat>\n <Tabs\n tabs={\n mappedProperties?.categories?.map((category) => ({\n name: `${category.id}`,\n displayName: category.name,\n })) || []\n }\n active={`${activeCategoryId}`}\n onClick={onTab}\n />\n </Repeat>\n {activeCategory && (\n <Repeat>\n <MetadataCategory\n properties={activeCategory.properties}\n subCategories={activeCategory.subCategories}\n />\n </Repeat>\n )}\n </>\n );\n};\n\nexport default PropertySet;\n", "import { EnhancedProperty, Tree, Category, ItemCategory } from '../../@types/vehicle-properties';\n\nclass PropertyTreeCreator {\n private properties: { [key: string]: EnhancedProperty };\n\n constructor(properties: { [key: string]: EnhancedProperty }) {\n this.properties = properties;\n }\n\n create(): Tree {\n const categories = this.createTreeCategories();\n const rootProperties = this.getRootProperties();\n if (rootProperties.length) {\n categories.push({\n name: PropertyTreeCreator.DEFAULT_CATEGORY_NAME,\n id: PropertyTreeCreator.DEFAULT_CATEGORY_ID,\n subCategories: [],\n properties: rootProperties,\n });\n }\n\n const tree = {\n categories,\n };\n\n return tree;\n }\n\n private getRootProperties() {\n const rootProperties = Object.keys(this.properties)\n .filter(this.propertiesWithoutCategory)\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n return rootProperties;\n }\n\n private propertiesWithCategory = (propertyKey: string) =>\n !!this.properties[propertyKey].category?.id;\n\n private propertiesWithoutCategory = (propertyKey: string) =>\n !this.propertiesWithCategory(propertyKey);\n\n private isList = (property: EnhancedProperty) =>\n property.type === PropertyTreeCreator.TEXT_LIST_TYPE;\n\n private isNonList = (property: EnhancedProperty) => !this.isList(property);\n\n private createTreeCategories() {\n const categories = this.getCategories();\n const treeCategories = this.convertToTreeCategories(categories);\n return treeCategories;\n }\n\n private getCategories() {\n const categories = Object.keys(this.properties)\n .filter(this.propertiesWithCategory)\n .map((key) => this.properties[key].category as unknown as ItemCategory)\n .filter(PropertyTreeCreator.distinctCategories);\n return categories;\n }\n\n private convertToTreeCategories(categories: ItemCategory[]) {\n return categories.map((category) => {\n const properties = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, category.id))\n .filter(this.propertiesWithoutSubCategory)\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n const subCategories = this.createTreeSubCategories(category.id);\n\n return {\n id: category.id,\n name: category.name,\n properties,\n subCategories,\n };\n });\n }\n\n private hasCategoryWithId = (propertyKey: string, categoryId: number) =>\n this.properties[propertyKey].category?.id === categoryId;\n\n private propertiesWithSubCategory = (propertyKey: string) =>\n !!this.properties[propertyKey].category?.subCategory?.id;\n\n private propertiesWithoutSubCategory = (propertyKey: string) =>\n !this.propertiesWithSubCategory(propertyKey);\n\n private createTreeSubCategories(categoryId: number) {\n const subCategories = this.getSubCategoriesOfCategory(categoryId);\n const convertedSubCategories = subCategories\n .map((subCategory) => this.convertSubCategory(subCategory))\n .filter((category) => category.properties.length > 0);\n const createdSubCategories = this.createListSubCategories(categoryId);\n const treeCategories = convertedSubCategories.concat(createdSubCategories);\n\n return treeCategories;\n }\n\n private getSubCategoriesOfCategory(id: number) {\n const categories = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, id))\n .filter(this.propertiesWithSubCategory)\n .map((key) => this.properties[key].category?.subCategory as ItemCategory)\n .filter(PropertyTreeCreator.distinctCategories);\n\n return categories;\n }\n\n private convertSubCategory(subCategory: ItemCategory): Category {\n const properties = Object.keys(this.properties)\n .filter((key) => this.hasSubCategoryWithId(key, subCategory.id))\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n\n return {\n id: subCategory.id,\n name: subCategory.name,\n properties,\n subCategories: [],\n };\n }\n\n private hasSubCategoryWithId = (propertyKey: string, categoryId: number) =>\n this.properties[propertyKey].category?.subCategory?.id === categoryId;\n\n private static distinctCategories = (\n category: ItemCategory,\n index: number,\n self: ItemCategory[]\n ) => {\n const firstOccuranceOfId = self.find((value) => value.id === category.id);\n return !!firstOccuranceOfId && self.indexOf(firstOccuranceOfId) === index;\n };\n\n private createListSubCategories(categoryId: number): Category[] {\n const listProperties = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, categoryId))\n .map((key) => this.properties[key])\n .filter(this.isList)\n .filter((prop) => (prop.value as string[]).length > 0);\n\n const createdSubCategories = listProperties.map((property, index) => ({\n id: PropertyTreeCreator.LIST_CATEGORY_START_ID + index,\n name: property.name,\n properties: this.asBoolProperties(property),\n subCategories: [],\n }));\n\n return createdSubCategories;\n }\n\n private asBoolProperties(listProperty: EnhancedProperty) {\n const values = listProperty.value as string[];\n const boolProperties = values.map((prop) => ({\n name: prop,\n value: true,\n type: 'bool',\n unit: listProperty.unit,\n hint: listProperty.hint,\n }));\n return boolProperties;\n }\n\n static DEFAULT_CATEGORY_NAME = 'Okategoriserat';\n static DEFAULT_CATEGORY_ID = 0;\n static TEXT_LIST_TYPE = 'text-list';\n static LIST_CATEGORY_START_ID = 100000;\n}\n\nexport default PropertyTreeCreator;\n", "import { Category } from '../../@types/vehicle-properties';\n\ninterface ID_ORDER_TYPE {\n '1000': 1;\n '71': 2;\n '2': 3;\n '1': 4;\n '8': 5;\n '6': 6;\n '119': 7;\n}\n\nconst ID_ORDER: ID_ORDER_TYPE = Object.freeze({\n '1000': 1,\n '71': 2,\n '2': 3,\n '1': 4,\n '8': 5,\n '6': 6,\n '119': 7,\n});\n\ntype ID_ORDER_KEY = keyof ID_ORDER_TYPE;\n\nconst compareById = (firstId: string, secondId: string) => {\n const firstOrder = ID_ORDER[firstId as ID_ORDER_KEY] || Number.MAX_SAFE_INTEGER;\n const secondOrder = ID_ORDER[secondId as ID_ORDER_KEY] || Number.MAX_SAFE_INTEGER;\n\n if (firstOrder < secondOrder) {\n return -1;\n } else if (secondOrder < firstOrder) {\n return 1;\n }\n return 0;\n};\n\nexport default (first: Category, second: Category) => {\n const result = compareById(`${first.id}`, `${second.id}`);\n\n if (result !== 0) {\n return result;\n }\n\n return first.name.localeCompare(second.name);\n};\n", "import { Property } from '../../@types/vehicle-properties';\n\nexport default (first: Property, second: Property) => {\n return first.name.localeCompare(second.name);\n};\n", "import { Property } from '../../@types/vehicle-properties';\n\nimport compareProperties from './compare-properties';\n\ninterface Order {\n Varum\u00E4rke: 1;\n Modell: 2;\n Version: 3;\n Modell\u00E5r: 4;\n Tillverknings\u00E5r: 5;\n M\u00E4tarst\u00E4llning: 6;\n V\u00E4xell\u00E5da: 7;\n F\u00E4rg: 8;\n Registreringsnummer: 9;\n Br\u00E4nslegrupp: 10;\n Kaross: 11;\n Segment: 12;\n Skatt: 13;\n Malus: 14;\n Bonus: 15;\n}\n\nconst ORDER: Order = Object.freeze({\n Varum\u00E4rke: 1,\n Modell: 2,\n Version: 3,\n Modell\u00E5r: 4,\n Tillverknings\u00E5r: 5,\n M\u00E4tarst\u00E4llning: 6,\n V\u00E4xell\u00E5da: 7,\n F\u00E4rg: 8,\n Registreringsnummer: 9,\n Br\u00E4nslegrupp: 10,\n Kaross: 11,\n Segment: 12,\n Skatt: 13,\n Malus: 14,\n Bonus: 15,\n});\n\ntype OrderKey = keyof Order;\n\nconst compareByPredefinedOrder = (firstId: string, secondId: string) => {\n const firstOrder = ORDER[firstId as OrderKey] || Number.MAX_SAFE_INTEGER;\n const secondOrder = ORDER[secondId as OrderKey] || Number.MAX_SAFE_INTEGER;\n\n if (firstOrder < secondOrder) {\n return -1;\n } else if (secondOrder < firstOrder) {\n return 1;\n }\n return 0;\n};\n\nexport default (first: Property, second: Property) => {\n const result = compareByPredefinedOrder(`${first.name}`, `${second.name}`);\n\n if (result !== 0) {\n return result;\n }\n\n return compareProperties(first, second);\n};\n", "import { Tree } from '../../@types/vehicle-properties';\nimport compareCategories from './compare-categories';\nimport compareBasicProperties from './compare-basic-properties';\nimport compareProperties from './compare-properties';\n\nconst sort = (tree: Tree) => {\n tree.categories.sort(compareCategories);\n tree.categories.forEach((category) => {\n if (category.id === 1000) {\n category.properties.sort(compareBasicProperties);\n } else {\n category.properties.sort(compareProperties);\n category.subCategories.forEach((subCategory) => {\n subCategory.properties.sort(compareProperties);\n });\n }\n });\n};\n\nexport default sort;\n", "import i18next from 'i18next';\nimport { VehicleData } from '../../@types/codegen/types';\nimport { EnhancedProperty, ItemCategory } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nexport const TEXT_TYPE = 'text';\nexport const NUMBER_TYPE = 'number';\nexport const BASIC_CATEGORY: ItemCategory = Object.freeze({\n id: 1000,\n name: i18next.t('category.basic'),\n subCategory: null,\n});\nexport const ENGINE_SUBCATEGORY: ItemCategory = Object.freeze({\n id: 6,\n name: i18next.t('category.engineAndPerformance'),\n subCategory: {\n id: 54,\n name: i18next.t('subCategory.engine'),\n subCategory: null,\n },\n});\n\nclass PropertyBuilder {\n name: string = '';\n value: string | number = '';\n type: string = 'unknown';\n unit: string | null = null;\n hint: string | null = null;\n category: ItemCategory | null = null;\n\n withName(name: string) {\n this.name = name;\n return this;\n }\n\n withHint(hint: string) {\n if (hint) {\n this.hint = hint;\n }\n return this;\n }\n\n withValue(value: string | number) {\n this.value = value;\n return this;\n }\n\n withType(type: string) {\n this.type = type;\n return this;\n }\n\n withCategory(category: ItemCategory) {\n this.category = category;\n return this;\n }\n\n withUnit(unit: string) {\n this.unit = unit;\n return this;\n }\n\n build(): EnhancedProperty {\n return {\n name: this.name,\n value: this.value,\n type: this.type,\n unit: this.unit,\n hint: this.hint,\n category: this.category,\n };\n }\n}\n\nexport default (item: VehicleData, properties: { [key: string]: EnhancedProperty }) => {\n const newProperties = deepCopy(properties);\n\n if (!!item.manufacturer) {\n newProperties.manufacturer = new PropertyBuilder()\n .withName(i18next.t('customProperty.manufacturer.displayName'))\n .withValue(item.manufacturer)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelSeries) {\n newProperties.modelSeries = new PropertyBuilder()\n .withName(i18next.t('customProperty.modelSeries.displayName'))\n .withValue(item.modelSeries)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelName) {\n newProperties.modelName = new PropertyBuilder()\n .withName(i18next.t('customProperty.modelName.displayName'))\n .withValue(item.modelName)\n .withHint(i18next.t('customProperty.modelName.hint'))\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelYear) {\n newProperties.modelYear = new PropertyBuilder()\n .withName(i18next.t('customProperty.modelYear.displayName'))\n .withValue(item.modelYear)\n .withHint(i18next.t('customProperty.modelYear.hint'))\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.manufactureYear) {\n newProperties.manufactureYear = new PropertyBuilder()\n .withName(i18next.t('customProperty.manufactureYear.displayName'))\n .withValue(item.manufactureYear)\n .withHint(i18next.t('customProperty.manufactureYear.hint'))\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (item.odometerReading) {\n newProperties.mileage = new PropertyBuilder()\n .withName(i18next.t('customProperty.odometer.displayName'))\n .withValue(item.odometerReading.value)\n .withHint(i18next.t('customProperty.odometer.hint'))\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .withUnit(i18next.t(`odometer.${item.odometerReading.unit}`))\n .build();\n } else if (!!item.mileage) {\n newProperties.mileage = new PropertyBuilder()\n .withName(i18next.t('customProperty.odometer.displayName'))\n .withValue(item.mileage)\n .withHint(i18next.t('customProperty.odometer.hint'))\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .withUnit(i18next.t('odometer.ScandinavianMile'))\n .build();\n }\n\n if (!!item.gearboxType) {\n newProperties.gearboxType = new PropertyBuilder()\n .withName(i18next.t('customProperty.gearboxType.displayName'))\n .withValue(item.gearboxType)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.registrationNumber) {\n newProperties.registrationNumber = new PropertyBuilder()\n .withName(i18next.t('customProperty.registrationNumber.displayName'))\n .withValue(item.registrationNumber)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.fuelType) {\n newProperties.fuelType = new PropertyBuilder()\n .withName(i18next.t('customProperty.fuelType.displayName'))\n .withValue(item.fuelType)\n .withHint(i18next.t('customProperty.fuelType.hint'))\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (item.enginePower) {\n newProperties.enginePower = new PropertyBuilder()\n .withName(i18next.t('customProperty.enginePower.displayName'))\n .withValue(item.enginePower)\n .withUnit(i18next.t('customProperty.enginePower.unit'))\n .withType(NUMBER_TYPE)\n .withCategory(ENGINE_SUBCATEGORY)\n .build();\n }\n\n return newProperties;\n};\n", "/**\n * Does not copy complex objects such as Date, functions etc.\n */\nconst deepCopy = <T extends Object>(object: T) => JSON.parse(JSON.stringify(object)) as T;\n\nexport default deepCopy;\n", "import { EnhancedProperty } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nconst PROPERTY_BLACK_LIST = Object.freeze([\n 'towHitchFoldable',\n 'trailerTotalWeightB',\n 'gps',\n 'androidAuto',\n 'appleCarPlay',\n 'tintedWindows',\n]);\n\nconst isForbiddenProperty = (key: string) => PROPERTY_BLACK_LIST.includes(key);\n\nconst CATEGORY_WHITE_LIST = Object.freeze([1, 2, 6, 8, 71, 119, 1000]);\n\nconst hasForbiddenCategory = (property: EnhancedProperty) =>\n !property.category ||\n !property.category.id ||\n !CATEGORY_WHITE_LIST.includes(property.category.id);\n\nexport default (properties: { [key: string]: EnhancedProperty }) => {\n const newProperties = deepCopy(properties);\n\n Object.keys(properties).forEach((key) => {\n const property = properties[key];\n if (hasForbiddenCategory(property)) {\n delete newProperties[key];\n } else if (isForbiddenProperty(key)) {\n delete newProperties[key];\n }\n });\n\n return newProperties;\n};\n", "import React, { useState, useCallback } from 'react';\nimport { Property } from '../../@types/vehicle-properties';\n\nimport {\n TableListItem,\n TableListKey,\n TableListValue,\n TableListBooleanPos,\n TableListBooleanNeg,\n} from '../../components/TableList';\nimport { IconCheck, IconCancel } from '../../components/Icon';\nimport { SrOnly } from '../../components/SrOnly';\nimport { ButtonInline } from '../../components/Button';\nimport Modal from '../../components/Modal';\nimport Content from '../../components/Content';\nimport i18next from 'i18next';\nimport { useTranslation } from 'react-i18next';\n\nconst formatValue = (value: Property['value'], unit: Property['unit']) => {\n if (typeof value === 'boolean') {\n return value ? (\n <TableListBooleanPos title={i18next.t('common.yes') || ''}>\n <SrOnly>{i18next.t('common.yes')}</SrOnly>\n <IconCheck block />\n </TableListBooleanPos>\n ) : (\n <TableListBooleanNeg title={i18next.t('common.no') || ''}>\n <SrOnly>{i18next.t('common.no')}</SrOnly>\n <IconCancel block />\n </TableListBooleanNeg>\n );\n }\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n if (!!value && !!unit) {\n return `${value} ${unit}`;\n }\n return value;\n};\n\ninterface MetadataItemProps {\n name: string;\n hint?: string | null | undefined;\n value: Property['value'];\n unit: Property['unit'];\n}\n\nconst MetadataItem = ({ name, hint, value, unit }: MetadataItemProps) => {\n const { t } = useTranslation();\n const [foldout, setFoldout] = useState(false);\n const onToggleFoldout = useCallback(() => setFoldout(!foldout), [foldout]);\n\n const presentedValue = formatValue(value, unit);\n\n return (\n <TableListItem>\n <TableListKey>\n {hint ? (\n <ButtonInline\n onClick={onToggleFoldout}\n title={t('item.moreInfoAboutSubject', { subject: name }) || ''}\n >\n {name}\n </ButtonInline>\n ) : (\n name\n )}\n </TableListKey>\n <TableListValue>\n {value !== undefined ? presentedValue : t('item.dataNotAvailable')}\n </TableListValue>\n {hint && foldout && (\n <Modal title={name} onClose={onToggleFoldout}>\n <Content dangerouslySetInnerHTML={{ __html: hint }} />\n </Modal>\n )}\n </TableListItem>\n );\n};\n\nexport default MetadataItem;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const TableList = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n border-top: 1px solid ${(props) => props.theme.color.border};\n border-bottom: 1px solid ${(props) => props.theme.color.border};\n font-size: 0.875rem;\n`;\n\nexport const TableListItem = styled.li`\n display: flex;\n align-items: center;\n padding: ${size(1)} 0;\n\n & + & {\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n`;\n\nexport const TableListKey = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const TableListValue = styled.div`\n flex-shrink: 0;\n padding-left: ${size(1)};\n`;\n\nexport const TableListBooleanPos = styled.div`\n color: ${(props) => props.theme.color.ui.positive};\n`;\n\nexport const TableListBooleanNeg = styled.div`\n color: ${(props) => props.theme.color.ui.negative};\n`;\n", "import * as React from 'react';\n\nimport { Action, Item, List, Wrapper } from './wrapper';\n\nexport interface ITabItem {\n name: string;\n displayName: string;\n}\n\nexport interface ITabInterface<T> {\n tabs: ITabItem[];\n active: string;\n onClick?: (name: T) => void;\n}\n\nconst Tabs = <T extends {}>({ tabs, active, onClick }: ITabInterface<T>) => (\n <Wrapper>\n <List>\n {tabs.map((tab) => (\n <Item key={tab.name}>\n <Action\n title={tab.displayName}\n onClick={onClick ? () => onClick(tab.name as unknown as T) : undefined}\n active={tab.name === active ? 'true' : undefined}\n >\n {tab.displayName}\n </Action>\n </Item>\n ))}\n </List>\n </Wrapper>\n);\n\nexport default Tabs;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { ButtonReset } from '../Button';\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n overflow: hidden;\n margin-top: ${size(-1)};\n margin-left: ${size(-1)};\n margin-right: ${size(-1)};\n\n ${(props) => props.theme.breakpoint.LtSm} {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n }\n`;\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n white-space: nowrap;\n font-size: 0;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding-left: ${size(1)};\n padding-right: ${size(1)};\n }\n`;\n\nexport const Item = styled.li`\n display: inline-block;\n vertical-align: bottom;\n font-size: 1rem;\n`;\n\ntype ActionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n active?: boolean | string;\n};\n\nexport const Action = styled(ButtonReset).attrs(() => ({\n role: 'tab',\n className: 'wayke__theme wayke__font--bold',\n}))<ActionProps>`\n position: relative;\n display: block;\n padding: ${size(1)};\n color: ${(props) => props.theme.color.textDarkLighten};\n\n :hover {\n color: ${(props) => props.theme.color.textDark};\n }\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: ${size(1)};\n right: ${size(1)};\n height: 2px;\n background-color: ${(props) => props.theme.color.textDark};\n transform: scaleY(0);\n transition: transform 200ms ease;\n z-index: 1;\n }\n\n ${(props) =>\n props.active &&\n css`\n color: ${(props) => props.theme.color.textDark};\n\n :after {\n transform: scaleY(1);\n }\n `}\n`;\n", "import React from 'react';\n\nimport Modal from '../../components/Modal';\nimport Content from '../../components/Content';\nimport { useTranslation } from 'react-i18next';\n\ninterface DemoCarModalProps {\n onClose: () => void;\n}\n\nconst DemoCarModal = ({ onClose }: DemoCarModalProps) => {\n const { t } = useTranslation();\n return (\n <Modal title={t('item.demoCar')} onClose={onClose}>\n <Content>\n <p>{t('item.demoCarDescription')}</p>\n </Content>\n </Modal>\n );\n};\n\nexport default DemoCarModal;\n", "import React from 'react';\n\nimport { H2, H3 } from '../../components/Heading';\nimport { ProductPageMainSection } from '../../components/ProductPage';\nimport { Scalars } from '../../@types/codegen/types';\nimport DocumentList from '../../components/DocumentList';\nimport { Repeat } from '../../components/Repeat';\nimport { useTranslation } from 'react-i18next';\nimport ExtendContent from '../../components/ExtendContent';\nimport i18next from 'i18next';\n\nconst Translation = {\n 'tyre-label': i18next.t('item.documentTypes.tireEnergyDeclaration'),\n 'content declaration': i18next.t('item.documentTypes.goodsDeclaration'),\n other: i18next.t('item.documentTypes.other'),\n};\n\nconst SortOrder = {\n 'tyre-label': 2,\n 'content declaration': 1,\n other: 3,\n};\n\ntype CategoryType = keyof typeof Translation;\n\ninterface DocumentCategory {\n category: string;\n sortOrder: number;\n documents: Scalars['FileDocument'][];\n}\n\ninterface DocumentsProps {\n documents: Scalars['FileDocument'][];\n}\n\nconst Documents = ({ documents }: DocumentsProps) => {\n const { t } = useTranslation();\n const categorised = documents\n .reduce((prev, curr) => {\n const index = prev.findIndex((x) => x.category === (curr.category || 'others'));\n if (index > -1) {\n prev[index].documents.push(curr);\n } else {\n const category = curr.category || 'others';\n prev.push({\n category,\n documents: [curr],\n sortOrder: SortOrder?.[category as CategoryType] ?? 99,\n });\n }\n\n return prev;\n }, [] as DocumentCategory[])\n .sort((a, b) => a.sortOrder - b.sortOrder);\n\n if (!documents.length) return null;\n\n const manyCategories = categorised.length > 1;\n\n return (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{t('item.documents')}</H2>\n </Repeat>\n <Repeat>\n <ExtendContent actionTitle={t('common.showMore')}>\n {categorised.map((group) => (\n <Repeat key={group.category}>\n {manyCategories && (\n <H3>{Translation?.[group.category as CategoryType] || Translation.other}</H3>\n )}\n <DocumentList documents={group.documents} />\n </Repeat>\n ))}\n </ExtendContent>\n </Repeat>\n </ProductPageMainSection>\n );\n};\n\nexport default Documents;\n", "import React, { useMemo } from 'react';\n\nimport { Scalars } from '../../@types/codegen/types';\nimport {\n PdfListItem,\n PdfSubtitle,\n PdfTitle,\n List,\n PdfListInner,\n PdfLink,\n PdfColumn,\n} from './wrapper';\nimport { useTranslation } from 'react-i18next';\n\ninterface PdfDownloadItemProps {\n document: Scalars['FileDocument'];\n}\n\nconst translateContentType = (document: Scalars['FileDocument']) => {\n switch (document.contentType) {\n case 'application/pdf':\n return 'PDF';\n default:\n const formattedContentType =\n document.url && document.url.includes('.') ? document.url.split('.').pop() : '';\n return formattedContentType;\n }\n};\n\nexport const PdfDownloadItem = ({ document }: PdfDownloadItemProps) => {\n const { t } = useTranslation();\n const contentType = useMemo(() => translateContentType(document), [document]);\n return (\n <PdfListItem>\n <PdfListInner>\n <PdfColumn>\n <PdfTitle>{document.name}</PdfTitle>\n <PdfSubtitle>{contentType}</PdfSubtitle>\n </PdfColumn>\n <PdfColumn>\n <PdfLink\n href={document.url}\n rel=\"noopener noreferrer nofollow\"\n target=\"_blank\"\n title={t('other.openDocument', { document: document.name })}\n >\n {t('common.open')}\n </PdfLink>\n </PdfColumn>\n </PdfListInner>\n </PdfListItem>\n );\n};\n\ninterface IDocumentList {\n documents: Scalars['FileDocument'][];\n}\n\nexport const DocumentList = ({ documents }: IDocumentList) => (\n <List>\n {documents.map((document, i) => (\n <PdfDownloadItem key={`${document.url}-${i}`} document={document} />\n ))}\n </List>\n);\n\nexport default DocumentList;\n", "import styled from 'styled-components';\nimport { size } from '../../layout/helpers';\n\nexport const PdfListItem = styled.li.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n flex: 0 0 50%;\n padding: ${size(1)};\n\n ${({ theme }) => theme.breakpoint.LtSm} {\n flex: 0 0 100%;\n }\n`;\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n display: flex;\n flex-wrap: wrap;\n margin: ${size(-1)};\n`;\n\nexport const PdfLink = styled.a.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n text-decoration: none;\n font-size: 0.875rem;\n &:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const PdfTitle = styled.div`\n color: ${(props) => props.theme.color.textDark};\n`;\nexport const PdfSubtitle = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n`;\n\nexport const PdfColumn = styled.div`\n flex: 0 0 auto;\n &:first-child {\n flex: 1 1 auto;\n }\n`;\n\nexport const PdfListInner = styled.div`\n position: relative;\n border: 1px solid ${(props) => props.theme.color.border};\n padding: ${size(1.5)};\n display: flex;\n align-items: center;\n :hover {\n background-color: ${(props) => props.theme.color.hoverOverlay};\n }\n`;\n", "import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Accessory } from '../../../@types/codegen/types';\nimport { numberSeparator } from '../../../utils/formats';\nimport { ProductPageMainSection } from '../../../components/ProductPage';\nimport { Repeat } from '../../../components/Repeat';\nimport { H2 } from '../../../components/Heading';\nimport Content from '../../../components/Content';\nimport AccessoryCard from '../../../components/AccessoryCard';\nimport OverflowGrid from '../../../components/OverflowGrid';\nimport AccesoryModal from './AccessoryModal';\n\ninterface AccessoriesSectionProps {\n accessories?: Accessory[];\n}\n\nconst AccessoriesSection = ({ accessories }: AccessoriesSectionProps) => {\n const { t } = useTranslation();\n const [modal, setModal] = useState<Accessory | undefined>();\n\n const onOpenModal = (accessory: Accessory) => setModal(accessory);\n const onCloseModal = () => setModal(undefined);\n\n if (!accessories?.length) return null;\n\n return (\n <>\n {modal && <AccesoryModal accessory={modal} onClose={onCloseModal} />}\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{t('item.accessories.accessories')}</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>{t('item.accessories.accessoriesDescription')}</p>\n </Content>\n </Repeat>\n <Repeat>\n <OverflowGrid\n columns={1.05}\n columnsSm={2.1}\n columnsMd={2}\n spacing={2}\n items={accessories.map((accessory) => (\n <AccessoryCard\n key={accessory.id}\n title={accessory.name}\n image={\n accessory.images?.[0]\n ? {\n src: `${accessory.images?.[0]}?w=539&h=303`,\n alt: accessory.name,\n }\n : undefined\n }\n price={`${numberSeparator(accessory.price)} ${t('currency.default')}`}\n preamble={accessory.excerpt}\n readMoreCta={() => onOpenModal(accessory)}\n />\n ))}\n />\n </Repeat>\n </ProductPageMainSection>\n </>\n );\n};\n\nexport default AccessoriesSection;\n", "import React from 'react';\n\nimport {\n Wrapper,\n Image,\n ImageaPlaceholder,\n Body,\n Heading,\n Title,\n Branding,\n Price,\n Preamble,\n ReadMoreBtn,\n} from './wrapper';\nimport { IconImage } from '../Icon';\nimport { useTranslation } from 'react-i18next';\n\ninterface AccessoryCardImageProps {\n src: string;\n srcSet?: string;\n alt: string;\n}\n\ninterface AccessoryCardProps {\n title: string;\n image?: AccessoryCardImageProps;\n branding?: AccessoryCardImageProps;\n price?: string;\n preamble?: string;\n readMoreCta?: () => void;\n}\n\nconst AccessoryCard = ({\n title,\n image,\n branding,\n price,\n preamble,\n readMoreCta,\n}: AccessoryCardProps) => {\n const { t } = useTranslation();\n return (\n <Wrapper>\n {image ? (\n <Image src={image.src} srcSet={image.srcSet} alt={image.alt} />\n ) : (\n <ImageaPlaceholder>\n <IconImage />\n </ImageaPlaceholder>\n )}\n <Body>\n <Heading>\n <Title>{title}</Title>\n {branding && <Branding src={branding.src} srcSet={branding.srcSet} alt={branding.alt} />}\n </Heading>\n {price && <Price>{price}</Price>}\n {preamble && <Preamble>{preamble}</Preamble>}\n {readMoreCta && (\n <ReadMoreBtn onClick={readMoreCta} title={t('common.readMore') || ''}>\n {t('common.readMore')}\n </ReadMoreBtn>\n )}\n </Body>\n </Wrapper>\n );\n};\n\nexport default AccessoryCard;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button';\n\nexport const Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${size(2)};\n height: 100%;\n`;\n\nconst imageBaseStyling = css`\n flex-shrink: 0;\n aspect-ratio: 16 / 9;\n border-radius: 3px;\n`;\n\nexport const Image = styled.img`\n ${imageBaseStyling};\n display: block;\n width: 100%;\n object-fit: cover;\n`;\n\nexport const ImageaPlaceholder = styled.div`\n ${imageBaseStyling};\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 2rem;\n background-color: ${(props) => props.theme.color.accent};\n`;\n\nexport const Body = styled.div`\n flex: 1 1 auto;\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n gap: ${size(1)};\n`;\n\nexport const Heading = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${size(2)};\n`;\n\nexport const Title = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1.125rem;\n`;\n\nexport const Branding = styled.img`\n display: block;\n`;\n\nexport const Price = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n\nexport const Preamble = styled.div`\n --preamble-max-height: ${size(6)};\n --preamble-gradient-height: calc(var(--preamble-max-height) / 2);\n\n position: relative;\n max-height: var(--preamble-max-height);\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n white-space: pre-wrap;\n\n &::before {\n content: '';\n position: absolute;\n top: var(--preamble-max-height);\n left: 0;\n width: 100%;\n height: var(--preamble-gradient-height);\n transform: translateY(-100%); // Only visible if Preamble reaches max height\n color: ${(props) => props.theme.color.bg};\n mask-image: ${(props) => props.theme.mask.gradient.toTop};\n pointer-events: none;\n }\n`;\n\nexport const ReadMoreBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__font--bold wayke__color--primary-text',\n}))`\n margin-top: auto;\n display: block;\n color: ${(props) => props.theme.color.link};\n font-size: 0.875rem;\n\n &:hover {\n text-decoration: underline;\n }\n`;\n", "import React from 'react';\nimport { marked } from 'marked';\nimport { Accessory } from '../../../@types/codegen/types';\nimport { numberSeparator } from '../../../utils/formats';\nimport { Repeat } from '../../../components/Repeat';\nimport { Image } from '../../../components/Image';\nimport { Link } from '../../../components/Link';\nimport { UtilityTextBold } from '../../../components/Utility';\nimport Modal from '../../../components/Modal';\nimport PriceBox from '../../../components/PriceBox';\nimport LogoBox from '../../../components/LogoBox';\nimport Content from '../../../components/Content';\nimport { useTranslation } from 'react-i18next';\n\ninterface AccesoryModalProps {\n accessory: Accessory;\n onClose: () => void;\n}\n\nconst AccesoryModal = ({ accessory, onClose }: AccesoryModalProps) => {\n const { t } = useTranslation();\n const priceList = [\n {\n label: t('item.accessories.price'),\n price: `${numberSeparator(accessory.price)} ${t('currency.default')}`,\n oldPrice: false,\n },\n ];\n\n if (accessory.salePrice) {\n priceList.push({\n label: t('item.accessories.oldPrice'),\n price: `${numberSeparator(accessory.salePrice)} ${t('currency.default')}`,\n oldPrice: true,\n });\n }\n\n if (accessory.assemblyPrice) {\n priceList.push({\n label: t('item.accessories.installationCost'),\n price: `${numberSeparator(accessory.assemblyPrice)} ${t('currency.default')}`,\n oldPrice: false,\n });\n }\n\n return (\n <Modal title={accessory.name} onClose={onClose}>\n {accessory.images?.[0] && (\n <Repeat>\n <Image src={`${accessory.images[0]}?w=632`} alt={`${accessory.name}`} />\n </Repeat>\n )}\n {accessory.logotype && (\n <Repeat>\n <LogoBox\n logo={`${accessory.logotype}?w=160`}\n logo2x={`${accessory.logotype}?w=320`}\n alt={accessory.manufacturer || t('common.logotype') || ''}\n wide\n />\n </Repeat>\n )}\n <Repeat>\n <PriceBox prices={priceList} />\n </Repeat>\n\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(accessory.description) }} />\n </Repeat>\n {accessory.articleNumber && (\n <Repeat>\n <UtilityTextBold as=\"div\">{t('item.accessories.articleNumberShort')}</UtilityTextBold>\n <div>{accessory.articleNumber}</div>\n </Repeat>\n )}\n {accessory.productPage && accessory.productPage.url && (\n <Repeat>\n <Link\n href={accessory.productPage.url}\n title={\n t('item.accessories.moreInformationAboutAccessory', {\n accessory: accessory.name,\n }) || ''\n }\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n {accessory.productPage.title || t('common.readMore')} ({t('common.opensInNewTab')})\n </Link>\n </Repeat>\n )}\n </Modal>\n );\n};\n\nexport default AccesoryModal;\n", "import styled from 'styled-components';\n\nexport const Image = styled.img`\n display: block;\n width: 100%;\n`;\n", "import styled, { css } from 'styled-components';\n\ninterface LinkProps {\n $hoverGhost?: boolean;\n}\n\nexport const Link = styled.a.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))<LinkProps>`\n text-decoration: none;\n cursor: pointer;\n text-decoration: underline;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDark};\n }\n\n &:hover {\n text-decoration: underline;\n }\n\n ${({ $hoverGhost }) =>\n $hoverGhost &&\n css`\n &:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper, Row, Label, Price } from './wrapper';\n\ninterface PriceBoxItemProps {\n label: string;\n price: string;\n oldPrice?: boolean;\n}\n\ninterface PriceBoxProps {\n prices: PriceBoxItemProps[];\n}\n\nconst PriceBox = ({ prices }: PriceBoxProps) => (\n <Wrapper>\n {prices?.map((item, i) => (\n <Row key={`${item.label}-${i}`} $oldPrice={item.oldPrice}>\n <Label>{item.label}</Label>\n <Price>{item.price}</Price>\n </Row>\n ))}\n </Wrapper>\n);\n\nexport default PriceBox;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.ul`\n --price-box-gutter: ${size(2)};\n\n list-style: none;\n padding: var(--price-box-gutter);\n margin: 0;\n border: 1px solid ${(props) => props.theme.color.border};\n`;\n\ninterface RowProps {\n $oldPrice?: boolean;\n}\n\nexport const Row = styled.li<RowProps>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--price-box-gutter);\n\n & + & {\n margin-top: calc(var(--price-box-gutter) / 4);\n }\n\n ${({ $oldPrice }) =>\n $oldPrice &&\n css`\n --price-text-decoration: line-through;\n\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n `}\n`;\n\nexport const Label = styled.div``;\n\nexport const Price = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n text-decoration: var(--price-text-decoration);\n`;\n", "import React from 'react';\n\nimport GraphqlProvider from './graphqlProvider';\nimport Theme from './themeProvider';\nimport SearchProvider from '../State/Search/SearchProvider';\nimport Root from '../components/Root';\n\nimport SettingsProvider from '../State/Settings/SettingsProvider';\nimport RelatedSearchProvider from '../State/RelatedSearch/RelatedSearchProvider';\nimport CentralStorageProvider from '../State/CentralStorage/CentralStorageProvider';\nimport PathProvider from '../State/Path/PathProvider';\n\nexport interface EcomSettings {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n}\n\nexport interface WaykeProviderSettings {\n url: string;\n urlMlt?: string;\n apiKey?: string;\n graphQlUrl: string;\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n useQueryParamsFromUrl?: boolean;\n pathRoute?: string;\n}\n\nexport type WaykeProviderProps = WaykeProviderSettings & {\n children?: React.ReactNode;\n};\n\nconst WaykeProvider = ({\n url,\n urlMlt,\n apiKey,\n ecomSettings,\n graphQlUrl,\n googleMapsApiKey,\n googleMapsMarker,\n useQueryParamsFromUrl,\n pathRoute,\n children,\n}: WaykeProviderProps) => (\n <PathProvider>\n <SettingsProvider\n googleMapsApiKey={googleMapsApiKey}\n googleMapsMarker={googleMapsMarker}\n ecomSettings={ecomSettings}\n >\n <CentralStorageProvider>\n <GraphqlProvider uri={graphQlUrl}>\n <SearchProvider\n url={url}\n apiKey={apiKey}\n useQueryParamsFromUrl={useQueryParamsFromUrl}\n pathRoute={pathRoute}\n >\n <RelatedSearchProvider url={url} urlMlt={urlMlt} apiKey={apiKey}>\n <Theme>\n <Root>{children}</Root>\n </Theme>\n </RelatedSearchProvider>\n </SearchProvider>\n </GraphqlProvider>\n </CentralStorageProvider>\n </SettingsProvider>\n </PathProvider>\n);\n\nexport default WaykeProvider;\n", "import React from 'react';\nimport { ApolloProvider as ApolloProviderBase, ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst GraphqlProvider = ({ uri, children }: { uri: string; children: React.ReactNode }) => {\n const client = new ApolloClient({ uri, cache: new InMemoryCache() });\n return <ApolloProviderBase client={client}>{children}</ApolloProviderBase>;\n};\n\nexport default GraphqlProvider;\n", "import React from 'react';\n\nimport { ThemeProvider as ThemeProviderBase } from 'styled-components';\n\nimport theme from '../layout/theme';\n\ninterface ThemeProps {\n children: React.ReactNode;\n}\n\nconst ThemeProvider = ({ children }: ThemeProps) => (\n <ThemeProviderBase theme={theme}>{children}</ThemeProviderBase>\n);\n\nexport default ThemeProvider;\n", "import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Facet, Document, Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\nimport useFetch from '../../hooks/useFetch';\nimport { SearchContext } from './SearchContext';\nimport { getUrlSearchParamsFromUrl } from '../../utils/url';\nimport { WaykePubSub } from '../../';\nimport { ActionOnFilterUpdate } from '../../utils/pubsub/Actions';\nimport usePath from '../Path/usePath';\n\ninterface SearchProviderProps {\n url: string;\n apiKey?: string;\n useQueryParamsFromUrl?: boolean;\n pathRoute?: string;\n children: React.ReactNode;\n}\n\nconst initialSearchParams = new URLSearchParams();\ninitialSearchParams.set('hits', '30');\ninitialSearchParams.set('sort', 'published-desc');\n\nconst SearchProvider = ({\n url,\n apiKey,\n useQueryParamsFromUrl,\n pathRoute,\n children,\n}: SearchProviderProps) => {\n const { replaceState, pushState } = usePath();\n const [queryFilter, setQueryFilter] = useState<QueryFilter>({\n searchParams: initialSearchParams,\n });\n\n const [initialFacets, setInitialFacets] = useState<Facet[]>();\n const [documents, setDocuments] = useState<Document[]>();\n const [initialize, setInitialize] = useState(false);\n\n const { data: initialDataRepsonse } = useFetch<Search>(\n `${url}?hits=0`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !!initialFacets\n );\n\n const query = queryFilter.searchParams.toString();\n const {\n loading,\n data: response,\n error,\n } = useFetch<Search>(\n `${url}${query ? `?${query}` : ''}`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !initialize || !!queryFilter?.block\n );\n\n const popStateEvent = (event: PopStateEvent) => {\n const { currentTarget } = event;\n if (currentTarget) {\n const nextSearchParams = new URLSearchParams((currentTarget as Window).location.search);\n\n if (!nextSearchParams.has('sort')) {\n nextSearchParams.set('sort', 'published-desc');\n }\n\n setQueryFilter({\n searchParams: nextSearchParams,\n });\n }\n };\n\n useEffect(() => {\n if (useQueryParamsFromUrl) {\n window.addEventListener('popstate', popStateEvent);\n }\n\n const onFilterUpdateEvent: ActionOnFilterUpdate = {\n actionName: 'onFilterUpdate',\n callback: onFilterUpdate,\n };\n\n WaykePubSub.subscribeAction(onFilterUpdateEvent);\n return () => {\n window.removeEventListener('popstate', popStateEvent);\n WaykePubSub.unsubscribeAction(onFilterUpdateEvent);\n };\n }, []);\n\n useEffect(() => {\n if (initialDataRepsonse) {\n setInitialFacets(initialDataRepsonse.facets);\n }\n }, [initialDataRepsonse]);\n\n useEffect(() => {\n if (useQueryParamsFromUrl) {\n const nextSearchParams = new URLSearchParams(queryFilter.searchParams);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n if (nextSearchParams.get('sort') === 'published-desc') {\n nextSearchParams.delete('sort');\n }\n\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n if (initialize) {\n if (window.location.search.localeCompare(nextSearch) !== 0) {\n const _path = pathRoute?.replace(/^\\/|\\/$/g, '');\n const prefix = _path ? `/${_path}/` : '/';\n\n const index = _path ? window.location.pathname.indexOf(prefix) : -1;\n let pathname = window.location.pathname;\n if (index > -1) {\n pathname = pathname.substr(0, index);\n }\n\n pushState(`${pathname}${nextSearch}`);\n }\n }\n }\n }, [queryFilter, initialize, useQueryParamsFromUrl]);\n\n useEffect(() => {\n if (response) {\n if (!initialFacets && !useQueryParamsFromUrl) {\n setInitialFacets(response.facets);\n }\n\n if (useQueryParamsFromUrl && response.query?.parameters) {\n const nextSearchParams = new URLSearchParams(response.query.parameters);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n if (window.location.search.localeCompare(nextSearch) !== 0) {\n replaceState(`${window.location.pathname}${nextSearch}`);\n setQueryFilter({\n searchParams: new URLSearchParams(nextSearch),\n block: true,\n });\n }\n }\n\n if (queryFilter?.concatResult) {\n setDocuments([...(documents || []), ...(response.documentList.documents || [])]);\n } else {\n setDocuments(response.documentList.documents || []);\n }\n }\n }, [response, useQueryParamsFromUrl]);\n\n const onFilterUpdate = useCallback(\n (nextQuery: string) => {\n {\n if (!initialize) {\n setInitialize(true);\n }\n\n setQueryFilter({\n searchParams: new URLSearchParams(nextQuery),\n });\n }\n },\n [initialize]\n );\n\n const onLoadMore = useCallback(() => {\n if (response) {\n setQueryFilter({\n searchParams: new URLSearchParams(response?.documentList.pagination.nextPage?.query),\n concatResult: true,\n });\n }\n }, [response]);\n\n const onInitialize = useCallback(\n (_initialQueryParams?: URLSearchParams) => {\n if (!initialize) {\n const searchParamsFromUrl = getUrlSearchParamsFromUrl();\n\n const initialQueryParams = useQueryParamsFromUrl\n ? searchParamsFromUrl\n : _initialQueryParams;\n\n if (useQueryParamsFromUrl && _initialQueryParams) {\n _initialQueryParams.forEach((value, key) => {\n if (!initialQueryParams?.getAll(key)?.some((v) => v === value)) {\n initialQueryParams?.append(key, value);\n }\n });\n }\n\n if (initialQueryParams) {\n const nextSearchParams = new URLSearchParams(initialQueryParams);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n\n if (!initialQueryParams.has('hits')) {\n initialQueryParams.set('hits', '30');\n }\n if (!initialQueryParams.has('sort')) {\n initialQueryParams.set('sort', 'published-desc');\n }\n\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n\n setQueryFilter({\n searchParams: initialQueryParams,\n });\n if (useQueryParamsFromUrl) {\n replaceState(`${window.location.pathname}${nextSearch}`);\n }\n }\n setInitialize(true);\n }\n },\n [initialize]\n );\n\n const value = {\n loading,\n error,\n response,\n documents,\n initialFacets,\n queryFilter,\n onFilterUpdate,\n onLoadMore,\n onInitialize,\n };\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;\n};\n\nexport default SearchProvider;\n", "export const getUrlSearchParamsFromUrl = () => new URLSearchParams(window.location.search);\n", "import styled from 'styled-components';\n\nconst Root = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n background-color: ${(props) => props.theme.color.bg};\n color: ${(props) => props.theme.color.textDark};\n font-size: 1rem;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n *,\n *:before,\n *:after {\n box-sizing: border-box;\n }\n\n a img {\n border: 0;\n }\n`;\n\nexport default Root;\n", "import React from 'react';\nimport { SettingsContext } from './SettingsContext';\nimport { EcomSettings } from '../../providers/WaykeProvider';\n\ninterface SettingsProps {\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n children: React.ReactNode;\n}\n\nconst SettingsProvider = ({\n googleMapsApiKey,\n googleMapsMarker,\n ecomSettings,\n children,\n}: SettingsProps) => (\n <SettingsContext.Provider value={{ ecomSettings, googleMapsApiKey, googleMapsMarker }}>\n {children}\n </SettingsContext.Provider>\n);\n\nexport default SettingsProvider;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\nimport useFetch from '../../hooks/useFetch';\nimport { RelatedSearchContext } from './RelatedSearchContext';\n\ninterface RelatedSearchProviderProps {\n url: string;\n urlMlt?: string;\n apiKey?: string;\n children: React.ReactNode;\n}\n\nconst RelatedSearchProvider = ({ url, urlMlt, apiKey, children }: RelatedSearchProviderProps) => {\n const [queryFilter, setQueryFilter] = useState<QueryFilter>();\n\n const query = queryFilter?.searchParams.toString();\n const {\n loading,\n data: response,\n error,\n } = useFetch<Search>(\n `${urlMlt || url}${query ? `?${query}` : ''}`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !queryFilter\n );\n\n const fetchRelated = useCallback(\n (searchParams: URLSearchParams) =>\n setQueryFilter({\n searchParams,\n }),\n []\n );\n\n const value = {\n moreLikeThisUrl: !!urlMlt,\n loading,\n error,\n response,\n queryFilter,\n fetchRelated,\n };\n\n return <RelatedSearchContext.Provider value={value}>{children}</RelatedSearchContext.Provider>;\n};\n\nexport default RelatedSearchProvider;\n", "import React, { useCallback } from 'react';\nimport { CentralStorageContext } from './CentralStorageContext';\nimport useSessionStorage from '../../hooks/useSessionStorage';\n\ninterface CentralStorageProviderProps {\n children: React.ReactNode;\n}\n\nconst CentralStorageProvider = ({ children }: CentralStorageProviderProps) => {\n const { value, set, remove } = useSessionStorage('centralStorage');\n\n const setCentralStorageId = useCallback((id?: string) => (id ? set(id) : remove()), []);\n\n return (\n <CentralStorageContext.Provider value={{ centralStorageId: value, setCentralStorageId }}>\n {children}\n </CentralStorageContext.Provider>\n );\n};\n\nexport default CentralStorageProvider;\n", "import { useState, useCallback } from 'react';\n\nconst useSessionStorage = (key: string) => {\n const [value, setValue] = useState(sessionStorage.getItem(key));\n\n const set = useCallback(\n (v: string) => {\n sessionStorage.setItem(key, v);\n setValue(v);\n },\n [key]\n );\n\n const remove = useCallback(() => {\n sessionStorage.removeItem(key);\n setValue(null);\n }, [key]);\n\n const clear = useCallback(() => {\n sessionStorage.clear();\n setValue(null);\n }, [key]);\n\n return {\n value,\n set,\n remove,\n clear,\n };\n};\n\nexport default useSessionStorage;\n", "import React, { useCallback, useEffect, useMemo, useReducer } from 'react';\nimport usePrevious from '../../hooks/usePrevious';\n\nimport { PathContext, PathContextProps } from './PathContext';\nimport reducer, { initialState, SET_PATH } from './reducer';\n\nconst regexGuidAnyWhere =\n /(\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1}/g;\nconst POP_STATE = 'popstate';\n\ninterface PathProviderProps {\n children: React.ReactNode;\n}\n\nconst PathProvider = ({ children }: PathProviderProps) => {\n const [state, dispatch] = useReducer(reducer, initialState);\n const previousPath = usePrevious(state.path);\n\n useEffect(() => {\n const onPopState = () => {\n dispatch({ type: SET_PATH, path: window.location.pathname });\n };\n\n window.addEventListener(POP_STATE, onPopState);\n return () => {\n window.removeEventListener(POP_STATE, onPopState);\n };\n }, []);\n\n const pushState = useCallback((path: string) => {\n const h1 = window.location.hash;\n history.pushState(null, '', `${path}`);\n const h2 = window.location.hash;\n if (h1.localeCompare(h2) !== 0) {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n }\n dispatch({ type: SET_PATH, path });\n }, []);\n\n const replaceState = useCallback((path: string) => {\n const h1 = window.location.hash;\n history.replaceState(null, '', path);\n const h2 = window.location.hash;\n if (h1.localeCompare(h2) !== 0) {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n }\n dispatch({ type: SET_PATH, path });\n }, []);\n\n const id = useMemo(() => state.path.match(regexGuidAnyWhere)?.pop(), [state.path]);\n\n const value: PathContextProps = useMemo(\n () => ({\n ...state,\n previousPath,\n id,\n pushState,\n replaceState,\n }),\n [state]\n );\n\n return <PathContext.Provider value={value}>{children}</PathContext.Provider>;\n};\n\nexport default PathProvider;\n", "import { useRef, useEffect } from 'react';\n\nconst usePrevious = <T>(value: T) => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport default usePrevious;\n", "import { BaseAction } from '../../@types/action';\n\nexport const SET_PATH = 'SET_PATH';\ntype SET_PATH_TYPE = BaseAction<typeof SET_PATH> & {\n path: string;\n};\n\ntype PathAction = SET_PATH_TYPE;\n\ninterface PathState {\n path: string;\n}\n\nexport const initialState: PathState = {\n path: window.location.pathname,\n};\n\nconst pathReducer = (state: PathState, action: PathAction) => {\n const next = { ...state };\n switch (action.type) {\n case SET_PATH:\n next.path = action.path;\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default pathReducer;\n", "import React from 'react';\n\nimport WaykeProvider, { WaykeProviderProps } from '../providers/WaykeProvider';\nimport WaykeComposite, { WaykeCompositeProps } from './WaykeComposite';\n\nexport interface WaykeCompositeWithProviderProps {\n provider: WaykeProviderProps;\n composite?: WaykeCompositeProps;\n}\n\nconst WaykeCompositeWithProvider = ({ provider, composite }: WaykeCompositeWithProviderProps) => (\n <WaykeProvider {...provider}>\n <WaykeComposite {...composite} />\n </WaykeProvider>\n);\n\nexport default WaykeCompositeWithProvider;\n", "import React, { useEffect } from 'react';\nimport useHashGuid from '../hooks/useHashGuid';\nimport PubSub from '../utils/pubsub/pubsub';\n\nimport WaykeSearch, { WaykeSearchProps } from './search';\nimport WaykeSearchItem, { WaykeSearchItemProps } from './searchItem';\nimport usePath from '../State/Path/usePath';\nimport useInitializeTranslation from '../hooks/useInitializeTranslation';\n\nexport type WaykeCompositeProps = Omit<WaykeSearchProps & WaykeSearchItemProps, 'id'>;\n\nconst WaykeComposite = ({\n marketCode,\n filterList,\n initialQueryParams,\n removeSearchBar,\n removeFilterOptions,\n disableResetScrollOnInit,\n placeholderImage,\n pathRoute,\n modifyDocumentTitleItem,\n modifyDocumentTitleSearch,\n displayBranchName,\n}: WaykeCompositeProps) => {\n const hashId = useHashGuid();\n const { id: pathId } = usePath();\n const initialized = useInitializeTranslation(marketCode);\n\n useEffect(() => {\n if (!pathRoute) {\n if (hashId) {\n PubSub.publish('HashRouteChange', hashId);\n } else {\n PubSub.publish('HashRouteChange');\n }\n }\n }, [hashId]);\n\n const id = pathId || hashId;\n\n if (!initialized) return null;\n\n return (\n <>\n {id ? (\n <WaykeSearchItem\n id={id}\n hashRoute={!pathRoute}\n disableResetScrollOnInit={disableResetScrollOnInit}\n placeholderImage={placeholderImage}\n pathRoute={pathRoute}\n modifyDocumentTitleItem={modifyDocumentTitleItem}\n displayBranchName={displayBranchName}\n />\n ) : (\n <WaykeSearch\n marketCode={marketCode}\n filterList={filterList}\n initialQueryParams={initialQueryParams}\n removeSearchBar={removeSearchBar}\n hashRoute={!pathRoute}\n placeholderImage={placeholderImage}\n pathRoute={pathRoute}\n removeFilterOptions={removeFilterOptions}\n modifyDocumentTitleSearch={modifyDocumentTitleSearch}\n displayBranchName={displayBranchName}\n />\n )}\n </>\n );\n};\n\nexport default WaykeComposite;\n", "import { useState, useEffect } from 'react';\n\nconst regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst HASH_CHANGE = 'hashchange';\n\nconst getGuid = () => {\n const guid = window.location.hash.substr(1, window.location.hash.length);\n return regexGuid.test(guid) || !guid ? guid : undefined;\n};\n\nconst useHashGuid = () => {\n const [id, setId] = useState<string | undefined>(() => getGuid());\n const onHashChange = () => {\n const guid = window.location.hash.substr(1, window.location.hash.length);\n if (regexGuid.test(guid) || !guid) {\n setId(window.location.hash.substr(1, window.location.hash.length));\n } else {\n throw 'Invalid Guid';\n }\n };\n\n useEffect(() => {\n onHashChange();\n window.addEventListener(HASH_CHANGE, onHashChange);\n return () => {\n window.removeEventListener(HASH_CHANGE, onHashChange);\n };\n }, []);\n\n return id;\n};\n\nexport default useHashGuid;\n", "import React from 'react';\n\nimport GraphqlProvider from './graphqlProvider';\nimport Theme from './themeProvider';\nimport Root from '../components/Root';\n\nimport SettingsProvider from '../State/Settings/SettingsProvider';\nimport RelatedSearchProvider from '../State/RelatedSearch/RelatedSearchProvider';\nimport CentralStorageProvider from '../State/CentralStorage/CentralStorageProvider';\nimport PathProvider from '../State/Path/PathProvider';\n\nexport interface EcomSettings {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n}\n\nexport interface WaykeItemProviderSettings {\n url: string;\n urlMlt?: string;\n graphQlUrl: string;\n apiKey?: string;\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n}\n\nexport type WaykeItemProviderProps = WaykeItemProviderSettings & {\n children?: React.ReactNode;\n};\n\nconst WaykeItemProvider = ({\n url,\n urlMlt,\n apiKey,\n ecomSettings,\n graphQlUrl,\n googleMapsApiKey,\n googleMapsMarker,\n children,\n}: WaykeItemProviderProps) => (\n <PathProvider>\n <SettingsProvider\n googleMapsApiKey={googleMapsApiKey}\n googleMapsMarker={googleMapsMarker}\n ecomSettings={ecomSettings}\n >\n <CentralStorageProvider>\n <GraphqlProvider uri={graphQlUrl}>\n <RelatedSearchProvider url={url} urlMlt={urlMlt} apiKey={apiKey}>\n <Theme>\n <Root>{children}</Root>\n </Theme>\n </RelatedSearchProvider>\n </GraphqlProvider>\n </CentralStorageProvider>\n </SettingsProvider>\n </PathProvider>\n);\n\nexport default WaykeItemProvider;\n", "import WaykeSearch from './layouts/search';\nimport type { WaykeSearchProps } from './layouts/search';\nimport WaykeSearchItem from './layouts/searchItem';\nimport type { WaykeSearchItemProps } from './layouts/searchItem';\nimport WaykeProvider from './providers/WaykeProvider';\nimport type { WaykeProviderSettings } from './providers/WaykeProvider';\nimport WaykeComposite from './layouts/WaykeCompositeWithProvider';\nimport type { WaykeCompositeWithProviderProps } from './layouts/WaykeCompositeWithProvider';\nimport SearchBar from './components/SearchBar';\nimport WaykeThemeProvider from './providers/themeProvider';\nimport WaykeItemProvider from './providers/WaykeItemProvidet';\nimport type { WaykeItemProviderSettings } from './providers/WaykeItemProvidet';\nimport WaykePubSub from './utils/pubsub/pubsub';\nimport type { EventSubscriptions } from './utils/pubsub/pubsub';\nimport type { SearchFilterTypes, SearchFilterNameTypes } from './@types/filter';\n\nimport type {\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnInit,\n EventEcomOnUser,\n EventEcomOnExit,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n} from './utils/pubsub/Events';\n\nexport {\n WaykeProvider,\n WaykeItemProvider,\n WaykeSearch,\n WaykeSearchItem,\n SearchBar,\n WaykeThemeProvider,\n WaykeItemProviderSettings,\n WaykePubSub,\n WaykeCompositeWithProviderProps,\n WaykeProviderSettings,\n WaykeSearchProps,\n WaykeSearchItemProps,\n SearchFilterTypes,\n SearchFilterNameTypes,\n EventSubscriptions,\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnInit,\n EventEcomOnUser,\n EventEcomOnExit,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n};\n\nexport default WaykeComposite;\n"],
5
+ "mappings": "kyBAAA,IAAAA,EAAuD,gBCAvD,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BCAnB,IAAMC,EAAU,CACd,MAAO,OACP,MAAO,OACP,KAAM,OACN,UAAW,UACX,qBAAsB,yBACtB,gBAAiB,UACjB,SAAU,UACV,KAAM,UACN,GAAI,CACF,WAAY,UACZ,MAAO,UACP,SAAU,UACV,IAAK,UACL,YAAa,UACb,OAAQ,UACR,UAAW,SACb,CACF,EAEMC,GAAQ,CACZ,MAAO,CACL,GAAID,EAAQ,MACZ,KAAMA,EAAQ,KACd,OAAQA,EAAQ,UAChB,kBAAmBA,EAAQ,qBAC3B,WAAYA,EAAQ,gBACpB,OAAQA,EAAQ,KAChB,SAAUA,EAAQ,MAClB,gBAAiBA,EAAQ,SACzB,UAAWA,EAAQ,MACnB,aAAc,sBACd,WAAYA,EAAQ,KACpB,aAAcA,EAAQ,SACtB,YAAaA,EAAQ,SACrB,GAAI,CACF,cAAeA,EAAQ,GAAG,WAC1B,SAAUA,EAAQ,GAAG,MACrB,aAAcA,EAAQ,GAAG,YACzB,QAASA,EAAQ,GAAG,OACpB,cAAeA,EAAQ,GAAG,SAC1B,SAAUA,EAAQ,GAAG,IACrB,UAAWA,EAAQ,GAAG,SACxB,CACF,EACA,WAAY,CACV,GAAI,4BACJ,KAAM,4BACN,GAAI,4BACJ,KAAM,4BACN,GAAI,6BACJ,KAAM,4BACR,EACA,KAAM,CACJ,SAAU,CACR,MAAO,6CACP,SAAU,gDACV,OAAQ,8CACR,QAAS,8CACX,CACF,EACA,UAAW,CACT,SAAU,MACV,YAAa,OACb,kBAAmB,QACrB,CACF,EAGOE,GAAQD,GCnER,IAAME,EAAO,CAACC,EAAa,IAAM,CACtC,IAAMC,EAAW,WAAWC,GAAM,UAAU,QAAQ,EACpD,MAAO,GAAGF,EAAaC,CAAQ,IACjC,EFDO,IAAME,GAAU,GAAAC,QAAO;AAAA;AAAA,eAEdC,GAAUA,EAAM,MAAM,UAAU,iBAAiB;AAAA;AAAA,eAElDC,EAAK,CAAC,CAAC;AAAA;AAAA,IAEjBD,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,iBACzBC,EAAK,CAAC,CAAC;AAAA;EDHxB,IAAMC,GAAY,CAAC,CAAE,SAAAC,CAAS,IAAa,GAAAC,QAAA,cAACC,GAAA,KAASF,CAAS,EAEvDG,GAAQJ,GIVf,IAAAK,GAA4B,4BAIrB,IAAMC,GAAO,GAAAC,QAAO,MAWdC,GAAc,GAAAD,QAAO;AAAA,mBACfE,EAAK,CAAC,CAAC;AAAA;AAAA,IAEtB,CAAC,CAAE,OAAAC,CAAO,IACVA,GACA;AAAA,iBACaD,EAAK,CAAC,CAAC;AAAA,0BACGE,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,KAExD;AAAA;AAAA,IAED,CAAC,CAAE,MAAAC,CAAM,IACTA,GACA;AAAA,uBACmBH,EAAK,CAAC,CAAC;AAAA,KACzB;AAAA;AAAA,IAED,CAAC,CAAE,OAAAC,EAAQ,MAAAE,CAAM,IACjBF,GACAE,GACA;AAAA,iBACaH,EAAK,CAAC,CAAC;AAAA;AAAA,KAEnB;AAAA;AAAA,IAED,CAAC,CAAE,UAAAI,CAAU,IACbA,GACA;AAAA;AAAA,KAEC;EC5CL,IAAAC,GAAmC,gBCAnC,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO,MAEjBC,GAAS,GAAAD,QAAO;AAAA;AAAA,mBAEVE,EAAK,CAAC,CAAC;AAAA,EAGbC,GAAc,GAAAH,QAAO;AAAA;AAAA,EAIrBI,GAAa,GAAAJ,QAAO;AAAA;AAAA,EAIpBK,GAAO,GAAAL,QAAO,MAEdM,GAAS,GAAAN,QAAO;AAAA,gBACbE,EAAK,CAAC,CAAC;AAAA;AAAA,EAIVK,GAAiB,GAAAP,QAAO;AAAA;AAAA;AAAA,EAKxBQ,GAAe,GAAAR,QAAO;AAAA,gBACnBE,EAAK,CAAC,CAAC;AAAA,EAGVO,GAAc,GAAAT,QAAO;AAAA,WACtBU,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;ECpCvD,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA,EAIjBC,GAAc,GAAAD,QAAO;AAAA,mBACfE,EAAK,GAAG,CAAC;AAAA;AAAA,EAIfC,GAAM,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA,sBAIHI,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,EAGhDC,GAAY,GAAAL,QAAO,IAAI,MAAM,KAAO,CAC/C,KAAM,aACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKqBI,GAAUA,EAAM,MAAM,MAAM,QAAQ;EDxB3D,IAAAE,GAA+B,mBAOzBC,GAAc,CAAC,CAAE,aAAAC,EAAc,SAAAC,CAAS,IAAa,CACzD,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAAYH,EAAeC,EAAY,IAE7C,OACE,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACEJ,EAAE,+BAAgC,CAAE,QAASF,EAAc,MAAOC,CAAS,CAAC,CAC/E,EACA,GAAAG,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CACC,MAAO,CAAE,MAAO,GAAGL,CAAQ,GAAI,EAC/B,gBAAeH,EACf,gBAAe,EACf,gBAAeC,EACjB,CACF,CACF,CAEJ,EAEOQ,GAAQV,GE9Bf,IAAAW,GAA4B,4BCD5B,IAAAC,GAAmB,4BAENC,GAAmB,GAAAC,QAAO;AAAA;AAAA,EAI1BC,GAAuB,GAAAD,QAAO;AAAA;AAAA,EAI9BE,GAAqB,GAAAF,QAAO,KAAK,MAAM,KAAO,CACzD,UAAW,yCACb,EAAE,IAEWG,GAAkB,GAAAH,QAAO,KAAK,MAAM,KAAO,CACtD,UAAW,gCACb,EAAE,IDVK,IAAMI,EAAc,GAAAC,QAAO,OAAO,MAAM,KAAO,CACpD,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCIC,MAAa,GAAAD,SAAOD,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA,aAKxBG,EAAK,IAAI,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAeTC,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAiBxCA,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,oBAC1CA,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,aAC7CA,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA,IAGlD,CAAC,CAAE,UAAAC,CAAU,IACbA,GACA;AAAA;AAAA;AAAA,KAGC;AAAA;AAAA,IAED,CAAC,CAAE,YAAAC,CAAY,IACfA,GACA;AAAA,gBACaF,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA,KACvD;AAAA;AAAA,IAEAA,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,eAC3BD,EAAK,IAAI,CAAC,IAAIA,EAAK,GAAG,CAAC;AAAA;AAAA;AAAA,EAKzBI,MAAgB,GAAAN,SAAOC,EAAU,EAAE,MAAM,KAAO,CAC3D,UAAW,yDACb,EAAE,IAEWM,MAAkB,GAAAP,SAAOC,EAAU,EAAE,MAAM,KAAO,CAC7D,UAAW,2DACb,EAAE;AAAA,sBACqBE,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,WACjDA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAGnCK,EAAgB,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKjBE,EAAK,EAAG,CAAC;AAAA;AAAA,EAIfO,MAAc,GAAAT,SAAOD,CAAW,EAAE,MAAM,KAAO,CAC1D,UAAW,2DACb,EAAE;AAAA;AAAA;AAAA,aAGWG,EAAK,GAAG,CAAC;AAAA,YACVA,EAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlBQ,EAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAWKP,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBlDQ,KAAe,GAAAX,SAAOD,CAAW,EAAE,MAAM,KAAO,CAC3D,UAAW,8DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAOYI,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,IAG9C,CAAC,CAAE,OAAAS,CAAO,IACVA,GACA;AAAA;AAAA,KAEC;AAAA,EAGQC,MAAmB,GAAAb,SAAOD,CAAW,EAAE,MAAM,KAAO,CAC/D,UAAW,2DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUWe,MAAoB,GAAAd,SAAOD,CAAW,EAAE,MAAM,KAAO,CAChE,UAAW,8DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAOYI,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,EAI5CY,MAAsB,GAAAf,SAAOD,CAAW,EAAE,MAAM,KAAO,CAClE,UAAW,8DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EEzNF,IAAAiB,GAAuB,gBCAvB,IAAAC,GAA4B,4BCA5B,IAAAC,GAA0B,uBAEbC,GAAc;AAAA;AAAA;AAAA;AAAA,EAMdC,GAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUTC,GAAS;AAAA;AAAA;AAAA;EDbf,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,WAGnBC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,eAIJC,EAAM;AAAA,EAWRC,GAAU,GAAAH,QAAO,IAAI,MAAM,KAAO,CAC7C,UAAW,0CACX,KAAM,QACR,EAAE;AAAA,IACE,CAAC,CAAE,OAAAI,CAAO,IACVA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKIL,EAAO;AAAA;AAAA;AAAA;AAAA,KAIV;AAAA;AAAA,IAED,CAAC,CAAE,OAAAM,CAAO,IACVA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA,KAKC;EEhDL,IAAAC,GAAmB,4BAGNC,GAAS,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EHC7B,IAAAC,GAA+B,mBAOzBC,GAAS,CAAC,CAAE,OAAAC,EAAQ,OAAAC,CAAO,IAAa,CAC5C,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,iBAACC,GAAA,CAAQ,OAAQH,EAAQ,OAAQC,GAC/B,iBAACG,GAAA,CAAQ,cAAY,OAAO,EAC5B,iBAACC,GAAA,KAAQH,EAAE,eAAe,CAAE,CAC9B,CAEJ,EAEOI,GAAQP,GIrBf,IAAAQ,GAAsB,8BACtBC,GAAe,iCCDR,IAAMC,GAAe,eACfC,GAAe,cACfC,GAAY,WACZC,GAAe,cACfC,GAAS,SACTC,GAAQ,QACRC,GAAoB,mBACpBC,GAAU,qBACVC,GAAgB,eAChBC,GAAQ,QACRC,GAAU,UACVC,GAAa,YACbC,GAAgB,eAChBC,GAAyB,uBACzBC,GAAuB,oBAEvBC,GAAc,CAAE,YAAa,MAAO,IAAK,SAAU,EACnDC,GAAc,CAAE,YAAa,QAAS,IAAK,SAAU,EACrDC,GAAa,CAAE,YAAa,SAAO,IAAK,SAAU,EAClDC,GAAe,CAAE,YAAa,SAAU,IAAK,SAAU,EACvDC,GAAa,CAAE,YAAa,SAAO,IAAK,SAAU,EAClDC,GAAY,CAAE,YAAa,SAAO,IAAK,SAAU,EACjDC,GAAc,CAAE,YAAa,OAAQ,IAAK,SAAU,EACpDC,GAAc,CAAE,YAAa,UAAQ,IAAK,SAAU,EACpDC,GAAe,CAAE,YAAa,SAAU,IAAK,SAAU,EACvDC,GAAe,CAAE,YAAa,MAAO,IAAK,SAAU,EACpDC,GAAe,CAAE,YAAa,OAAQ,IAAK,SAAU,EACrDC,GAAc,CAAE,YAAa,QAAS,IAAK,SAAU,EAOrDC,GACX,877ED/BK,IAAMC,GAAoBC,GAC/BA,GAAU,KAECC,EAAkB,CAACD,EAAeE,EAAI,EAAGC,EAAI,EAAGC,EAAI,IAAKC,EAAI,MAAQ,CAChF,GAAIL,GAAU,KACZ,OAAO,KAGT,IAAMM,EAAK,cAAcH,GAAK,CAAC,MAAMD,EAAI,EAAI,MAAQ,GAAG,IAClDK,EAAMP,EAAM,QAAQ,KAAK,IAAI,EAAG,CAAC,CAACE,CAAC,CAAC,EAE1C,OAAQG,EAAIE,EAAI,QAAQ,IAAKF,CAAC,EAAIE,GAAK,QAAQ,IAAI,OAAOD,EAAI,GAAG,EAAG,KAAKF,GAAK,GAAG,EAAE,CACrF,EAsDO,IAAMI,GAAiB,CAC5B,UAAW,EACX,SAAU,EAEV,OAAQ,CAACC,EAAsBC,IAAmB,CAChD,IAAMC,EAAO,IAAI,KAAKF,CAAK,EAC3B,OAAQC,EAAQ,CACd,KAAKF,GAAe,UAClB,SAAO,GAAAI,SAAUD,EAAM,YAAa,CAAE,OAAQ,GAAAE,OAAG,CAAC,EACpD,KAAKL,GAAe,SAClB,SAAO,GAAAI,SAAUD,EAAM,cAAe,CAAE,OAAQ,GAAAE,OAAG,CAAC,EACtD,QACE,SAAO,GAAAD,SAAUD,EAAM,mBAAoB,CAAE,OAAQ,GAAAE,OAAG,CAAC,CAC7D,CACF,CACF,EErFA,IAAAC,GAA2B,WCA3B,IAAAC,GAA8B,WAgBjBC,MAAgB,kBAAkC,CAC7D,QAAS,GACT,MAAO,GACP,SAAU,OACV,UAAW,OACX,cAAe,OACf,YAAa,CAAE,aAAc,IAAI,eAAkB,EACnD,eAAiBC,GAAM,CAAC,EACxB,WAAY,IAAM,CAAC,EACnB,aAAeA,GAAM,CAAC,CACxB,CAAC,EDvBD,IAAMC,GAAY,OAAM,eAAWC,EAAa,EAEzCC,GAAQF,GELf,IAAAG,GAAkB,gBCAlB,IAAAC,GAAmB,4BAInB,IAAMC,GAAW,WAEJC,GAAU,GAAAC,QAAO;AAAA;AAAA,EAIjBC,GAAS,GAAAD,QAAO,OAAO,MAAM,KAAO,CAC/C,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBASsBF,EAAQ,MAAMI,EAAK,CAAC,CAAC;AAAA;AAAA,WAEjCC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBnCC,GAAS,GAAAJ,QAAO;AAAA,WACjBG,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAGnCE,GAAO,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKZF,EAAQ;ECpDvB,IAAAQ,EAAuB,gBACvBC,GAA4B,4BAQtBC,GAAO,GAAAC,QAAO,IAAI,MAAM,KAAO,CACnC,MAAO,4BACT,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOE,CAAC,CAAE,MAAAC,CAAM,IACTA,GACA;AAAA;AAAA,KAEC;AAAA,EAMQC,GAAW,CAAC,CAAE,MAAAD,CAAM,IAC/B,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,mqBAAmqB,CAC7qB,EAGWE,GAAa,CAAC,CAAE,MAAAF,CAAM,IACjC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,iOAAiO,CAC3O,EAGWG,GAAkB,CAAC,CAAE,MAAAH,CAAM,IACtC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,yCAAyC,CACnD,EAGWI,GAAkB,CAAC,CAAE,MAAAJ,CAAM,IACtC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,0CAA0C,CACpD,EAGWK,GAAmB,CAAC,CAAE,MAAAL,CAAM,IACvC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,2CAA2C,CACrD,EAGWM,GAAY,CAAC,CAAE,MAAAN,CAAM,IAChC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,+HAA+H,CACzI,EAGWO,GAAY,CAAC,CAAE,MAAAP,CAAM,IAChC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,gKAAgK,CAC1K,EAGWQ,GAAa,CAAC,CAAE,MAAAR,CAAM,IACjC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,0OAA0O,CACpP,EAGWS,GAAwB,CAAC,CAAE,MAAAT,CAAM,IAC5C,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,2iBAA2iB,CACrjB,EAGWU,GAA0B,CAAC,CAAE,MAAAV,CAAM,IAC9C,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QAAK,EAAE,woBAAwoB,CAClpB,EAGWW,GAAY,CAAC,CAAE,MAAAX,CAAM,IAChC,gBAACF,GAAA,CAAK,QAAQ,YAAY,MAAOE,GAC/B,gBAAC,QACC,EAAE,yTACF,SAAS,UACT,SAAS,UACX,CACF,EF1FF,IAAAY,GAA+B,mBAczBC,GAAa,CAAC,CAAE,MAAAC,EAAO,QAAAC,EAAS,SAAAC,EAAU,KAAAC,CAAK,IAAuB,CAC1E,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,MAAOP,EACP,SAAUE,EACV,MAAOE,EAAE,wBAAwB,EACjC,aAAYA,EAAE,wBAAwB,GAErCH,EAAQ,IAAKO,GACZ,GAAAH,QAAA,cAACI,GAAA,CAAO,IAAKD,EAAO,MAAO,MAAOA,EAAO,OACtCA,EAAO,aAAeA,EAAO,MAC7BL,EAAO,IAAIA,CAAI,GAAK,EACvB,CACD,CACH,EACA,GAAAE,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,CAAgB,MAAK,GAAC,CACzB,CACF,CAEJ,EAEOC,GAAQb,GG3Cf,IAAAc,GAAoB,kBAEdC,GAAwB,CAC5B,aAAc,gBACd,cAAe,iBACf,SAAU,YACV,UAAW,aACX,SAAU,YACV,UAAW,aACX,WAAY,cACZ,YAAa,cACf,EAaaC,GAAsCC,GAAgD,CACjG,OAAQA,EAAK,CACX,KAAKF,GAAsB,aACzB,OAAO,GAAAG,QAAQ,EAAE,iCAAiC,EACpD,KAAKH,GAAsB,cACzB,OAAO,GAAAG,QAAQ,EAAE,kCAAkC,EACrD,KAAKH,GAAsB,SACzB,OAAO,GAAAG,QAAQ,EAAE,6BAA6B,EAChD,KAAKH,GAAsB,UACzB,OAAO,GAAAG,QAAQ,EAAE,8BAA8B,EACjD,KAAKH,GAAsB,SACzB,OAAO,GAAAG,QAAQ,EAAE,6BAA6B,EAChD,KAAKH,GAAsB,UACzB,OAAO,GAAAG,QAAQ,EAAE,8BAA8B,EACjD,KAAKH,GAAsB,WACzB,OAAO,GAAAG,QAAQ,EAAE,+BAA+B,EAClD,KAAKH,GAAsB,YACzB,OAAO,GAAAG,QAAQ,EAAE,gCAAgC,EACnD,QACE,OAAOD,CACX,CACF,EjBpBA,IAAME,GAAS,CAAC,CAAE,SAAAC,CAAS,IAAa,CACtC,GAAM,CAAE,QAAAC,EAAS,SAAAC,EAAU,UAAAC,EAAW,YAAAC,EAAa,WAAAC,EAAY,eAAAC,CAAe,EAAIC,GAAU,EAEtFC,KAAqB,gBACxBC,GAA4CH,EAAeG,EAAE,cAAc,KAAK,EACjF,CAAC,CACH,EAEMC,EAAoBP,GAAW,QAAU,EACzCQ,EAAeT,GAAU,aAAa,cAAgB,EACtDU,EAAe,CAAC,CAACR,GAAa,aAE9BS,EAAqBX,GAAU,aAAa,YAAY,KAAMY,GAAMA,EAAE,QAAQ,GAAG,MACjFC,EAAcb,GAAU,aAAa,YACxC,OAAQY,GAAMA,EAAE,cAAgB,WAAW,EAC3C,IACEE,IAAqB,CACpB,MAAOA,EAAG,MACV,YAAaC,GAAmCD,EAAG,WAAW,CAChE,EACF,EAEF,OAAIf,GAAW,CAACW,EACP,GAAAM,QAAA,cAACC,GAAA,IAAO,EAGf,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,KAAa,GAAGC,EAAgBb,CAAY,CAAC,IAC5CA,IAAiB,EAAI,MAAQ,OAC/B,EAAG,CACL,EACCI,GAAeF,GACd,GAAAK,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,CACC,MAAOb,EACP,QAASE,EACT,SAAUP,EACZ,CACF,CAEJ,EACA,GAAAU,QAAA,cAACS,GAAA,KAAM3B,CAAS,EAChB,GAAAkB,QAAA,cAACU,GAAA,KACC,GAAAV,QAAA,cAACW,GAAA,KACC,GAAAX,QAAA,cAACY,GAAA,CAAY,aAAcpB,EAAmB,SAAUC,EAAc,CACxE,EACCD,IAAsBC,GACrB,GAAAO,QAAA,cAACa,GAAA,KACC,GAAAb,QAAA,cAACc,GAAA,CACC,SAAU/B,EACV,QAASI,EACT,MAAM,YACN,aAAW,aAEX,GAAAa,QAAA,cAACe,EAAA,KAAc,WAAS,CAC1B,CACF,CAEJ,CACF,CAEJ,EAEOC,GAAQnC,GkB1Ff,IAAAoC,GAA6C,gBCA7C,IAAAC,GAAmB,4BAKZ,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMfC,EAAK,GAAI,CAAC;AAAA,EAGTC,GAAO,GAAAF,QAAO;AAAA,aACdC,EAAK,EAAG,CAAC;AAAA,EAGTE,MAAS,GAAAH,SAAOI,CAAW;AAAA;AAAA;AAAA;AAAA,aAI3BH,EAAK,GAAG,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA,sBACVI,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAcpCA,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBpDC,GAAQ,GAAAN,QAAO;AAAA;AAAA,EAIfO,GAAY,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKjBC,EAAK,IAAK,CAAC;AAAA,iBACTA,EAAK,EAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQbO,GAAiB,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;ECxErC,IAAAS,GAAmC,gBCAnC,IAAAC,GAAuB,gBCAvB,IAAAC,GAAmB,4BCCnB,IAAAC,GAA4B,4BAW5B,IAAMC,GAAc,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC1C,UAAW,gCACb,EAAE;AAAA;AAAA,mBAEiBC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAItB,CAAC,CAAE,SAAAC,CAAS,IACZA,GACA;AAAA;AAAA,KAEC;AAAA,EAGQC,MAAK,GAAAH,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAIWC,MAAK,GAAAL,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAIWE,MAAK,GAAAN,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAIWG,MAAK,GAAAP,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAIWI,MAAK,GAAAR,SAAOD,EAAW,EAAE,MAAuBK,IAAW,CACtE,GAAIA,EAAM,IAAM,IAClB,EAAE;AAAA;AAAA,EAYWK,GAAgB,GAAAT,QAAO,IAAI,MAAM,KAAO,CACnD,UAAW,gCACb,EAAE;AAAA;ED5DK,IAAMU,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,QACR,EAAE;AAAA;AAAA;AAAA,EAKWC,GAAU,GAAAD,QAAO,IAAI,MAAM,KAAO,CAC7C,cAAe,OACf,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOaE,EAAM;AAAA,EAGRC,GAAe,GAAAH,QAAO,QAAQ,MAAM,KAAO,CACtD,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAQqBI,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA,eAG1CC,EAAW;AAAA;AAAA,IAErBD,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnCA,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7BE,GAAS,GAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMhBO,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cASNA,EAAK,CAAC,CAAC;AAAA;AAAA,QAEZH,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,QAClCA,GAAUA,EAAM,MAAM,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAMzCI,GAAU,GAAAR,QAAO;AAAA;AAAA;AAAA,IAG1BS,EAAE;AAAA;AAAA;AAAA,EAKOC,GAAQ,GAAAV,QAAO;AAAA;AAAA,YAEhBO,EAAK,EAAE,CAAC;AAAA,kBACFA,EAAK,CAAC,CAAC;AAAA,EAGZI,MAAW,GAAAX,SAAOY,CAAW;AAAA;AAAA;AAAA,aAG7BL,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAaKH,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiB9CS,GAAO,GAAAb,QAAO;AAAA;AAAA;AAAA;AAAA,aAIdO,EAAK,CAAC,CAAC;AAAA,EAGPO,GAAS,GAAAd,QAAO;AAAA;AAAA;AAAA,aAGhBO,EAAK,CAAC,CAAC;AAAA,0BACOH,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,EAGhDW,GAAe,GAAAf,QAAO,IAAI,MAAM,KAAO,CAClD,KAAM,OACR,EAAE;AAAA;AAAA;AAAA,YAGUO,EAAK,GAAI,CAAC;AAAA,EAGTS,GAAmB,GAAAhB,QAAO;AAAA;AAAA,aAE1BO,EAAK,EAAG,CAAC;AAAA;AAAA,IAElBK,CAAW;AAAA,eACAL,EAAK,IAAI,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;EExJpC,IAAAU,GAAA,GAAAC,GAAAD,GAAA,mBAAAE,KAAO,IAAMA,GAAgB,iBCA7B,IAAAC,GAAuB,gBAMjBC,GAAgB,CAAC,CAAE,GAAAC,CAAG,IAAsB,iBAAC,OAAI,GAAIA,EAAI,EAExDC,GAAQF,GCRf,IAAAG,GAAkB,gBAClBC,GAAqB,oBAOfC,GAAS,CAAC,CAAE,GAAAC,EAAI,SAAAC,CAAS,IAAe,CAC5C,IAAMC,EAAK,GAAAC,QAAM,OAAO,SAAS,eAAeH,CAAE,GAAK,SAAS,cAAc,KAAK,CAAC,EACpF,GAAI,CAACE,EAAG,QACN,OAAO,KAGT,GAAM,CAAE,QAAAE,CAAQ,EAAIF,EAEd,CAACG,CAAO,EAAI,GAAAF,QAAM,SAAS,CAACC,EAAQ,aAAa,EAEvD,UAAAD,QAAM,UAAU,KACVE,IACFD,EAAQ,GAAKJ,EACT,SAAS,MACX,SAAS,KAAK,YAAYI,CAAO,GAG9B,IAAM,CACPC,GAAWD,EAAQ,eACrBA,EAAQ,cAAc,YAAYA,CAAO,CAE7C,GACC,CAACJ,CAAE,CAAC,EAEA,GAAAM,QAAS,aAAaL,EAAUG,CAAO,CAChD,EAEOG,GAAQ,GAAAJ,QAAM,KAAcJ,EAAM,ELnBzC,IAAAS,GAA+B,mBAUzBC,GAAQ,CAAC,CAAE,GAAAC,EAAI,MAAAC,EAAO,OAAAC,EAAQ,QAAAC,EAAS,SAAAC,CAAS,IAAoB,CACxE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,iBAACC,GAAA,CAAO,GAAIN,GAAMO,GAAgB,eAChC,iBAACC,GAAA,KACC,iBAACC,GAAA,CAAQ,MAAOJ,EAAE,kBAAkB,GAAK,GAAI,QAASF,EAAS,EAC/D,iBAACO,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,CAAG,SAAQ,IAAEZ,CAAM,CACtB,EACA,iBAACa,GAAA,KACC,iBAACC,GAAA,CAAS,MAAOV,EAAE,kBAAkB,GAAK,GAAI,QAASF,GACrD,iBAACa,GAAA,CAAW,MAAK,GAAC,CACpB,CACF,CACF,EACA,iBAACC,GAAA,KAAMb,CAAS,EACfF,GAAU,iBAACgB,GAAA,KAAQhB,CAAO,CAC7B,CACF,CACF,CAEJ,EAEOiB,GAAQpB,GMnDf,IAAAqB,GAA6C,gBCA7C,IAAAC,GAA4B,4BAKrB,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA,YAGfC,EAAK,EAAE,CAAC;AAAA;AAAA,EAIPC,MAAS,GAAAF,SAAOG,CAAW;AAAA;AAAA;AAAA;AAAA,aAI3BF,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,EAKPG,GAAQ,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA,EAMfK,GAAU,GAAAL,QAAO;AAAA;AAAA,EAIjBM,GAAY,GAAAN,QAAO,IAAI,MAAM,KAAO,CAC/C,UAAW,uCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,eAKaC,EAAK,IAAK,CAAC;AAAA,iBACTA,EAAK,EAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAObM,GAAiB,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA,EAMxBQ,GAAO,GAAAR,QAAO;AAAA;AAAA;AAAA,kBAGTC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMdA,EAAK,EAAE,CAAC;AAAA,cACLA,EAAK,EAAE,CAAC;AAAA;AAAA,aAETA,EAAK,EAAE,CAAC;AAAA;AAAA,wBAEIQ,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMvDP,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAOGQ,GAAO,GAAAV,QAAO;AAAA;AAAA,oBAEPC,EAAK,CAAC,CAAC;AAAA,EAOdU,GAAO,GAAAX,QAAO;AAAA;AAAA,4BAEES,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA,IAG3D,CAAC,CAAE,OAAAG,CAAO,IACVA,GACA;AAAA,QACIF,EAAI;AAAA;AAAA;AAAA;AAAA,QAIJF,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA,KAKP;ED3FL,IAAAK,GAA+B,mBAalBC,GAAgB,CAAC,CAAE,QAAAC,EAAS,SAAAC,EAAU,YAAAC,EAAa,SAAAC,CAAS,IAAsB,CAC7F,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAQC,CAAS,KAAI,aAASH,GAAY,EAAK,EAChDI,KAAiB,gBAAY,IAAMD,EAAU,CAACD,CAAM,EAAG,CAACA,CAAM,CAAC,EAErE,OACE,GAAAG,QAAA,cAACC,GAAA,CAAK,OAAQJ,GACZ,GAAAG,QAAA,cAACE,GAAA,CAAO,QAASH,EAAgB,MAAOH,EAAE,iBAAiB,GAAK,IAC9D,GAAAI,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CACC,UAAWV,GAAeA,EAAc,EAAI,iCAAmC,IAE9EF,CACH,EACCE,GAAeA,EAAc,GAC5B,GAAAM,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KAAgBZ,CAAY,CAC/B,CAEJ,EACA,GAAAM,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,CAAgB,MAAK,GAAC,CACzB,CACF,EACA,GAAAR,QAAA,cAACS,GAAA,KAAMhB,CAAS,CAClB,CAEJ,EAEMiB,GAAY,CAAC,CAAE,SAAAjB,CAAS,IAAkB,GAAAO,QAAA,cAACW,GAAA,KAAMlB,CAAS,EAEzDmB,GAAQF,GE1Df,IAAAG,GAAmB,4BAIZ,IAAMC,EAAS,GAAAC,QAAO;AAAA;AAAA,kBAEXC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZC,EAAa,GAAAF,QAAO;AAAA;AAAA,kBAEfC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZE,GAAc,GAAAH,QAAO;AAAA;AAAA,kBAEhBC,EAAK,CAAC,CAAC;AAAA;EClBzB,IAAAG,GAAkB,gBCAlB,IAAAC,GAAwD,gBCAxD,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAO,GAAAC,QAAO,GAAG,MAAM,KAAO,CACzC,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA,YAGUC,EAAK,EAAE,CAAC;AAAA;AAAA;AAAA,EAKPC,GAAO,GAAAF,QAAO;AAAA,IACvBD,EAAI;AAAA,oBACYE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,EAKdE,MAAS,GAAAH,SAAOI,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3BH,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMPA,EAAK,CAAC,CAAC;AAAA,cACNA,EAAK,CAAC,CAAC;AAAA;AAAA,wBAEII,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA,EAKlDC,GAAa,GAAAN,QAAO,IAAI,MAAM,KAAO,CAChD,UAAW,yCACb,EAAE;AAAA;AAAA,SAEOC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,WAKLA,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,eAEJA,EAAK,GAAG,CAAC;AAAA,EAGXM,GAAc,GAAAP,QAAO;AAAA,kBAChBC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGrBE,EAAM;AAAA,4BACkBF,EAAK,EAAG,CAAC;AAAA;ED7CrC,IAAMO,GAAgB,CAAC,CAAE,MAAAC,EAAO,QAAAC,EAAS,OAAAC,EAAQ,MAAAC,CAAM,IACrD,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAO,QAASL,GACdC,GAAU,GAAAE,QAAA,cAACG,GAAA,KAAYJ,EAAQ,GAAAC,QAAA,cAACI,GAAA,CAAU,MAAK,GAAC,EAAK,GAAAJ,QAAA,cAACK,GAAA,CAAU,MAAK,GAAC,CAAG,EAC1E,GAAAL,QAAA,cAACM,GAAA,CACC,UAAWR,EAAS,4DAA8D,IAEjFF,CACH,CACF,CACF,EAGIW,GAAY,CAAC,CAAE,MAAAC,EAAO,MAAAT,CAAM,IAC3BS,GAAO,OAKV,GAAAR,QAAA,cAACS,GAAA,KACED,EAAM,IAAKE,GACV,GAAAV,QAAA,cAACL,GAAA,CACC,IAAKe,EAAK,MACV,MAAOA,EAAK,MACZ,QAASA,EAAK,QACd,OAAQA,EAAK,OACb,MAAOX,EACT,CACD,CACH,EAdO,KAkBJY,GAAQJ,GElDf,IAAAK,GAAkB,gBCAlB,IAAAC,GAAmB,4BAENC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;EDM9B,IAAMC,GAAc,CAAC,CAAE,SAAAC,CAAS,IAAc,GAAAC,QAAA,cAACC,GAAA,KAASF,CAAS,EAE1DG,GAAQJ,GHAf,IAAMK,GAAiB,CAAC,CAAE,MAAAC,CAAM,IAA2B,CACzD,GAAM,CAAE,QAAAC,EAAS,MAAAC,EAAO,eAAAC,CAAe,EAAIC,GAAU,EAC/C,CAACC,EAAUC,CAAW,KAAI,aAAqC,KACrE,cAAU,IAAM,CACdA,EAAY,MAAS,CACvB,EAAG,CAACN,EAAOE,CAAK,CAAC,EAEjB,IAAMK,KAAU,gBACbC,GAAmB,CACbP,IACHK,EAAY,CACV,GAAGD,EACH,CAACG,EAAE,WAAW,EAAG,CAACA,EAAE,QACtB,CAAC,EACDL,EAAeK,EAAE,KAAK,EAE1B,EACA,CAACP,CAAO,CACV,EAEA,OACE,GAAAQ,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,MAAOX,EAAM,QACV,KAAK,CAACY,EAAGC,IAAMD,EAAE,YAAY,cAAcC,EAAE,WAAW,CAAC,EACzD,IAAKL,IAAO,CACX,MAAOA,EAAE,YACT,QAAS,IAAMD,EAAQC,CAAC,EACxB,OAAQH,IAAWG,EAAE,WAAW,IAAM,OAAYH,EAASG,EAAE,WAAW,EAAIA,EAAE,QAChF,EAAE,EACN,CACF,CAEJ,EAEOM,GAAQf,GK7Cf,IAAAgB,GAAwD,gBCAxD,IAAAC,GAAkB,gBCAlB,IAAAC,GAA4B,4BAKrB,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAKfC,EAAK,IAAI,CAAC;AAAA,EAGTC,GAAO,GAAAF,QAAO;AAAA;AAAA;AAAA;AAAA,aAIdC,EAAK,GAAG,CAAC;AAAA,EAGTE,MAAS,GAAAH,SAAOI,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkB3BC,GAAQ,GAAAL,QAAO;AAAA;AAAA,WAEjBC,EAAK,IAAI,CAAC;AAAA,YACTA,EAAK,IAAI,CAAC;AAAA;AAAA,WAEVK,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAc1CH,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,CAAC,CAAE,OAAAI,CAAO,IACVA,GACA;AAAA;AAAA;AAAA;AAAA,KAIC;AAAA;AAAA,IAED,CAAC,CAAE,UAAAC,CAAU,IACbA,GACA;AAAA;AAAA,KAEC;AAAA,EAGQC,GAAQ,GAAAT,QAAO;AAAA,gBACZC,EAAK,IAAI,CAAC;AAAA;ED9D1B,IAAMS,GAAkB,CAAC,CAAE,MAAAC,EAAO,IAAAC,EAAK,QAAAC,EAAS,OAAAC,EAAQ,SAAAC,EAAU,UAAAC,CAAU,IAExE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAO,QAASN,EAAS,SAAUE,EAAU,MAAOJ,EAAO,aAAYA,GACtE,GAAAM,QAAA,cAACG,GAAA,CACC,MAAO,CACL,gBAAiBR,EAAI,SAAW,EAAIA,EAAI,CAAC,EAAI,GAC7C,gBAAiBA,EAAI,OAAS,EAAI,mBAAmBA,EAAI,KAAK,CAAC,IAAM,EACvE,EACA,OAAQE,EACR,UAAWE,EACX,UAAWF,EAAS,0CAA4C,GAClE,EACA,GAAAG,QAAA,cAACI,GAAA,CACC,UAAWP,EAAS,4DAA8D,IAEjFH,CACH,CACF,CACF,EAIEW,GAAc,CAAC,CAAE,MAAAC,CAAM,IACtBA,EAKH,GAAAN,QAAA,cAACO,GAAA,KACED,EAAM,IAAKE,GACV,GAAAR,QAAA,cAACP,GAAA,CACC,IAAKe,EAAK,MACV,MAAOA,EAAK,MACZ,IAAKA,EAAK,IACV,QAASA,EAAK,QACd,OAAQA,EAAK,OACb,SAAUA,EAAK,SACf,UAAWA,EAAK,UAClB,CACD,CACH,EAhBO,KAoBJC,GAAQJ,GE/CR,IAAMK,GAA8BC,GAAwB,CACjE,OAAQA,EAAa,CACnB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,KAAKC,GAAW,YACd,OAAOA,GAAW,IACpB,KAAKC,GAAa,YAChB,OAAOA,GAAa,IACtB,KAAKC,GAAW,YACd,OAAOA,GAAW,IACpB,KAAKC,GAAU,YACb,OAAOA,GAAU,IACnB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,KAAKC,GAAa,YAChB,OAAOA,GAAa,IACtB,KAAKC,GAAa,YAChB,OAAOA,GAAa,IACtB,KAAKC,GAAa,YAChB,OAAOA,GAAa,IACtB,KAAKC,GAAY,YACf,OAAOA,GAAY,IACrB,QACE,MAAO,MACX,CACF,EHjCA,IAAMC,GAAmB,CAAC,CAAE,MAAAC,CAAM,IAA6B,CAC7D,GAAM,CAAE,QAAAC,EAAS,MAAAC,EAAO,eAAAC,CAAe,EAAIC,GAAU,EAC/C,CAACC,EAAUC,CAAW,KAAI,aAAqC,KAErE,cAAU,IAAM,CACdA,EAAY,MAAS,CACvB,EAAG,CAACN,EAAOE,CAAK,CAAC,EAEjB,IAAMK,KAAU,gBACbC,GAAmB,CACbP,IACHK,EAAY,CACV,GAAGD,EACH,CAACG,EAAE,WAAW,EAAG,CAACA,EAAE,QACtB,CAAC,EACDL,EAAeK,EAAE,KAAK,EAE1B,EACA,CAACP,CAAO,CACV,EAEA,OACE,GAAAQ,QAAA,cAACC,GAAA,CACC,MAAOV,EAAM,QACV,KAAK,CAACW,EAAGC,IAAMD,EAAE,YAAY,cAAcC,EAAE,WAAW,CAAC,EACzD,IAAKJ,IAAO,CACX,MAAOA,EAAE,YACT,QAAS,IAAMD,EAAQC,CAAC,EACxB,OAAQH,IAAWG,EAAE,WAAW,IAAM,OAAYH,EAASG,EAAE,WAAW,EAAIA,EAAE,SAC9E,IAAK,CAACK,GAA2BL,EAAE,WAAW,CAAC,CACjD,EAAE,EACN,CAEJ,EAEOM,GAAQf,GI9Cf,IAAAgB,GAAwD,gBCAxD,IAAAC,EAAwD,gBACxDC,GAA8C,2BCD9C,IAAAC,GAAmB,4BAIZ,IAAMC,GAAY,GAAAC,QAAO;AAAA;AAAA;AAAA,gBAGhBC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIVC,GAAgB,GAAAF,QAAO;AAAA;AAAA,WAExBG,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW1CC,GAAS,GAAAJ,QAAO;AAAA;AAAA,EAIhBK,GAAM,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAWDG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA,EAIlDG,GAAQ,GAAAN,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,uCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQWO,GAAS,GAAAP,QAAO,IAAI,MAAM,KAAO,CAC5C,KAAM,SACN,UAAW,uCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECxDF,IAAAQ,GAAkB,gBAUX,IAAMC,GAAS,CAAC,CACrB,OAAQ,CAACC,EAAKC,CAAG,EACjB,OAAQ,CAAE,GAAAC,EAAI,MAAAC,EAAO,QAAAC,CAAQ,EAC7B,eAAAC,CACF,IACE,GAAAC,QAAA,cAACP,GAAA,CACC,KAAK,SACL,gBAAeC,EACf,gBAAeC,EACf,gBAAeE,EACf,MAAO,CACL,KAAM,GAAGC,CAAO,GAClB,EACC,GAAGC,EAAeH,CAAE,EACvB,ECxBF,IAAAK,GAAkB,gBAUX,IAAMC,GAAQ,CAAC,CAAE,OAAAC,EAAQ,OAAAC,EAAQ,cAAAC,CAAc,IACpD,GAAAC,QAAA,cAACJ,GAAA,CACC,MAAO,CACL,KAAM,GAAGC,EAAO,OAAO,IACvB,MAAO,GAAGC,EAAO,QAAUD,EAAO,OAAO,GAC3C,EACC,GAAGE,EAAc,EACpB,EHFF,IAAME,GAAYC,GAAoB,CACpC,IAAIC,EAAU,OAAO,iBACrB,OAAAD,EAAM,QAAQ,CAACE,EAAMC,IAAU,CAC7B,GAAIA,IAAU,EAAG,CACf,IAAMC,EAAIF,EAAOF,EAAMG,EAAQ,CAAC,EAC5BC,EAAIH,IACNA,EAAUG,EAEd,CACF,CAAC,EACMH,CACT,EAaMI,GAAc,CAAC,CACnB,QAAAC,EACA,OAAAC,EACA,OAAAC,EACA,MAAAR,EACA,KAAAS,EACA,aAAAC,EACA,UAAAC,EACA,SAAAC,CACF,IAAwB,CACtB,GAAM,CAACX,EAASY,CAAU,KAAI,YAAmBN,CAAM,EACjDO,KAAW,eACdC,GAAkC,CAC7B,CAAC,MAAMA,EAAW,CAAC,CAAC,GAAK,CAAC,MAAMA,EAAW,CAAC,CAAC,GAC/CF,EAAWE,EAAW,MAAM,CAAC,CAEjC,EACA,CAACR,CAAM,CACT,EAEML,EAAOH,GAASC,CAAK,EAErBgB,EAAaN,EAAeO,EAAgBhB,EAAQ,CAAC,CAAC,EAAIA,EAAQ,CAAC,EACnEiB,EAAaR,EAAeO,EAAgBhB,EAAQ,CAAC,CAAC,EAAIA,EAAQ,CAAC,EACnEkB,EAAQX,EAAO,CAAC,IAAMA,EAAO,CAAC,EAC9BY,EAAaT,GAAaH,EAAO,CAAC,IAAMP,EAAQ,CAAC,EAAIU,EAAY,OAEvE,sBAAU,IAAM,EACVJ,EAAO,CAAC,IAAMN,EAAQ,CAAC,GAAKM,EAAO,CAAC,IAAMN,EAAQ,CAAC,IACrDY,EAAWN,CAAM,CAErB,EAAG,CAACA,CAAM,CAAC,EAGT,EAAAc,QAAA,gBAAAA,QAAA,cACGF,EACC,EAAAE,QAAA,cAACC,GAAA,KACC,EAAAD,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,CAAS,MAAO,CAAE,KAAM,IAAK,MAAO,MAAO,EAAG,EAC/C,EAAAH,QAAA,cAACI,GAAA,CAAU,KAAK,SAAS,gBAAa,GAAC,MAAO,CAAE,KAAM,GAAI,EAAG,EAC7D,EAAAJ,QAAA,cAACI,GAAA,CAAU,KAAK,SAAS,gBAAa,GAAC,MAAO,CAAE,KAAM,MAAO,EAAG,CAClE,CACF,EAEA,EAAAJ,QAAA,cAACC,GAAA,KACC,EAAAD,QAAA,cAAC,WACC,SAAUf,EACV,KAAM,EACN,KAAMJ,EACN,OAAQM,EACR,SAAUI,EACV,SAAUE,EACV,OAAQP,EACR,UAAW,CAAE,SAAU,UAAW,GAElC,EAAAc,QAAA,cAAC,aAAM,CAAC,CAAE,aAAAK,CAAa,IAAM,EAAAL,QAAA,cAACE,GAAA,CAAK,GAAGG,EAAa,EAAG,CAAG,EACzD,EAAAL,QAAA,cAAC,gBACE,CAAC,CAAE,QAAAM,EAAS,eAAAC,CAAe,IAC1B,EAAAP,QAAA,cAAC,OAAI,UAAU,kBACZM,EAAQ,IAAKE,GACZ,EAAAR,QAAA,cAACI,GAAA,CACC,IAAKI,EAAO,GACZ,OAAQA,EACR,OAAQrB,EACR,eAAgBoB,EAClB,CACD,CACH,CAEJ,EACA,EAAAP,QAAA,cAAC,WAAO,KAAM,GAAO,MAAO,IACzB,CAAC,CAAE,OAAAS,EAAQ,cAAAC,CAAc,IACxB,EAAAV,QAAA,cAAC,OAAI,UAAU,iBACZS,EAAO,IAAI,CAAC,CAAE,GAAAE,EAAI,OAAAC,EAAQ,OAAAC,CAAO,IAChC,EAAAb,QAAA,cAACG,GAAA,CAAM,IAAKQ,EAAI,OAAQC,EAAQ,OAAQC,EAAQ,cAAeH,EAAe,CAC/E,CACH,CAEJ,CACF,CACF,EAEF,EAAAV,QAAA,cAACc,GAAA,KACC,EAAAd,QAAA,cAACe,GAAA,KAAe,GAAGpB,CAAU,GAAGP,EAAO,IAAIA,CAAI,GAAK,EAAE,EAAG,EACzD,EAAAY,QAAA,cAACe,GAAA,KAAe,GAAGlB,CAAU,GAAGE,GAA0B,EAAE,GAC1DX,EAAO,IAAIA,CAAI,GAAK,EACtB,EAAG,CACL,CACF,CAEJ,EAEO4B,GAAQhC,GDxHf,IAAMiC,GAAmB,CAACC,EAAkBC,EAAcC,IAAkC,CAC1F,IAAMC,EAAWH,EAAO,CAAC,EACnBI,EAAYF,GAAc,IAAI,GAAGD,EAAM,EAAE,MAAM,GAAK,KACpDI,EAAWL,EAAOA,EAAO,OAAS,CAAC,EACnCM,EAAYJ,GAAc,IAAI,GAAGD,EAAM,EAAE,MAAM,GAAK,KAEpDM,EAAW,SAASH,IAAc,KAAO,GAAGD,CAAQ,GAAKC,EAAW,EAAE,EACtEI,EAAML,EAAWI,EAAWJ,EAAWI,EACvCE,EAAW,SAASH,IAAc,KAAO,GAAGD,CAAQ,GAAKC,EAAW,EAAE,EACtEI,EAAMD,EAAWJ,EAAWF,EAAWM,EAE7C,OAAOD,GAAOE,EAAM,CAACF,GAAYR,EAAO,CAAC,EAAGU,GAAYV,EAAO,CAAC,CAAC,EAAIA,CACvE,EAEMW,GAAe,CAAC,CAACC,EAAM,GAAAC,CAAE,IACzBD,IAAM,OAAkB,IAErBC,EAAG,OAAO,CAAC,CAACC,EAAKC,CAAI,EAAGH,IAAM,CAACE,GAAOF,EAAIG,GAAOH,CAAC,EAAG,CAAC,EAAGA,CAAC,CAAC,EAAE,CAAC,EAAIC,EAAG,OAGxEG,GAAYC,GAA+B,CAC/C,IAAMC,EAAQP,GAAaM,CAAgB,EACrCP,EAAM,KAAK,MAAMO,EAAiBA,EAAiB,OAAS,CAAC,EAAI,GAAI,EAAI,IAC/E,OAAIC,EAAQ,IAAa,IAAI,MAAMR,EAAM,IAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAACE,EAAGO,IAAMA,EAAI,GAAI,EAC9ED,GAAS,KAAQA,GAAS,IACrB,IAAI,MAAMR,EAAM,IAAM,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAACE,EAAGO,IAAMA,EAAI,GAAG,EACzDF,CACT,EAEMG,GAAa,CAAC,CAAE,MAAAnB,EAAO,KAAAoB,EAAM,aAAAC,CAAa,IAAuB,CACrE,GAAM,CAAE,QAAAC,EAAS,YAAAC,EAAa,cAAAC,EAAe,eAAAC,CAAe,EAAIC,GAAU,EACpEC,EAAeH,GAAe,KAAMb,GAAMA,EAAE,KAAOX,EAAM,EAAE,EAC3D4B,EACJD,GAAc,QAAQA,GAAc,QAAQ,OAAS,CAAC,GAAG,aAAa,SAAS,GAAG,EAC9E,CAACE,EAAOC,CAAS,KAAI,aAEzB,MAAS,KAEX,cAAU,IAAM,CACd,IAAMC,EAAoBJ,GAAc,QAAQ,IAAKK,GACnD,SAASA,EAAE,YAAY,QAAQ,aAAc,EAAE,EAAG,EAAE,CACtD,GAAK,CAAC,EAAG,CAAC,EAEJC,EAASlB,GAASgB,CAAiB,EACnChC,EAAS,CAACkC,EAAO,CAAC,EAAGA,EAAOA,EAAO,OAAS,CAAC,CAAC,EAEpDH,EAAU,CACR,GAAIH,GAAc,GAClB,MAAOM,EACP,OAAQ,CAACA,EAAO,CAAC,EAAGA,EAAOA,EAAO,OAAS,CAAC,CAAC,EAC7C,OAAQN,GAAc,QAAQ,OAC1B7B,GAAiBC,EAAQ4B,EAAcJ,EAAY,YAAY,EAC/D,CAAC,EAAG,CAAC,CACX,CAAC,CACH,EAAG,CAACI,GAAc,EAAE,CAAC,KAErB,cAAU,IAAM,CACd,GAAIE,GAAO,GAAI,CACb,IAAMK,EAAOP,GAAc,QAAQ,OAC/B7B,GAAiB+B,EAAM,OAAQF,EAAcJ,EAAY,YAAY,EACrE,CAAC,EAAG,CAAC,EACHY,EAASZ,EAAY,cAAc,IAAI,GAAGvB,EAAM,EAAE,MAAM,EACxDoC,EAASb,EAAY,cAAc,IAAI,GAAGvB,EAAM,EAAE,MAAM,EAExDO,EAAM4B,EAAS,WAAWA,CAAM,EAAID,EAAK,CAAC,EAC1CzB,EAAM2B,EAAS,WAAWA,CAAM,EAAIF,EAAK,CAAC,GAC5C3B,IAAQsB,EAAM,OAAO,CAAC,GAAKpB,IAAQoB,EAAM,OAAO,CAAC,IACnDQ,EAAS,CAAC9B,EAAKE,CAAG,CAAC,CAEvB,CACF,EAAG,CAACc,EAAY,cAAc,SAAS,CAAC,CAAC,EAEzC,IAAMc,KAAW,gBACdC,GAAkC,CACjC,GAAIT,GAAO,KACLA,EAAM,OAAO,CAAC,IAAMS,EAAW,CAAC,GAAKT,EAAM,OAAO,CAAC,IAAMS,EAAW,CAAC,GAAG,CAC1ER,EAAU,CAAE,GAAGD,EAAO,OAAQS,EAAW,MAAM,CAAE,CAAC,EAClD,IAAMC,EAAQ,IAAI,gBAAgBhB,EAAY,YAAY,EAC1DgB,EAAM,IAAI,OAAQ,IAAI,EACtBA,EAAM,OAAO,GAAGvC,EAAM,EAAE,MAAM,EAC9BuC,EAAM,OAAO,GAAGvC,EAAM,EAAE,MAAM,EAE1BsC,EAAW,CAAC,IAAMT,EAAM,OAAO,CAAC,GAClCU,EAAM,IAAI,GAAGvC,EAAM,EAAE,OAAQ,GAAGsC,EAAW,CAAC,CAAC,EAAE,EAG7CA,EAAW,CAAC,IAAMT,EAAM,OAAO,CAAC,GAClCU,EAAM,IAAI,GAAGvC,EAAM,EAAE,OAAQ,GAAGsC,EAAW,CAAC,CAAC,EAAE,EAGjDC,EAAM,KAAK,EACXd,EAAec,EAAM,SAAS,CAAC,CACjC,CAEJ,EACA,CAAChB,EAAY,aAAcM,CAAK,CAClC,EAEA,OACE,GAAAW,QAAA,iBAAAA,QAAA,cACGX,GACC,GAAAW,QAAA,cAACC,GAAA,CACC,QAASnB,EACT,OAAQO,EAAM,OACd,OAAQA,EAAM,OACd,UAAWD,EAAY,IAAM,OAC7B,MAAOC,EAAM,MACb,KAAMT,EACN,SAAUiB,EACV,aAAchB,EAChB,CAEJ,CAEJ,EAEOqB,GAAQvB,GVxGf,IAAAwB,GAA+B,mBAMzBC,GAAgB,CAAC,CAAE,MAAAC,CAAM,IAA0B,CACvD,GAAM,CAAE,CAAE,KAAI,mBAAe,EAC7B,OAAQA,EAAM,GAAI,CAChB,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACH,OAAO,GAAAC,QAAA,cAACC,GAAA,CAAe,MAAOV,EAAO,EACvC,KAAKW,GACH,OAAO,GAAAF,QAAA,cAACG,GAAA,CAAiB,MAAOZ,EAAO,EACzC,KAAKa,GACH,OAAO,GAAAJ,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAM,EAAE,kBAAkB,EAAG,aAAY,GAAC,EAC7E,KAAKe,GACL,KAAKC,GACH,OAAO,GAAAP,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAM,EAAE,kBAAkB,EAAG,aAAY,GAAC,EAC7E,KAAKiB,GACH,OAAO,GAAAR,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAM,EAAE,oBAAoB,EAAG,aAAY,GAAC,EAC/E,KAAKkB,GACH,OAAO,GAAAT,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAM,EAAE,2BAA2B,EAAG,aAAY,GAAC,EACtF,KAAKmB,GACH,OAAO,GAAAV,QAAA,cAACK,GAAA,CAAW,MAAOd,EAAO,KAAK,QAAK,EAC7C,QACE,OAAO,IACX,CACF,EAEOoB,GAAQrB,GVjDf,IAAAsB,GAA+B,mBAiBzBC,GAAc,CAAC,CACnB,MAAAC,EACA,eAAAC,EACA,aAAAC,EACA,QAAAC,EACA,eAAAC,EACA,QAAAC,CACF,IAAa,CACX,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,KAAiB,gBAAY,IAAMH,EAAe,EAAE,EAAG,CAAC,CAAC,EAE/D,OACE,GAAAI,QAAA,cAACC,GAAA,CACC,MAAOH,EAAE,eAAe,EACxB,QAASD,EACT,OACE,GAAAG,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAgB,UAAS,GAAC,SAAUT,EAAS,QAASI,GACrD,GAAAC,QAAA,cAACK,EAAA,KAAeP,EAAE,6BAA6B,CAAE,CACnD,CACF,EACA,GAAAE,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACM,GAAA,CAAc,UAAS,GAAC,SAAUX,EAAS,QAASE,GACnD,GAAAG,QAAA,cAACK,EAAA,KACEP,EAAE,gCAAiC,CAClC,MAAOJ,GAAgB,EACvB,KAAMI,EAAE,kBAAkBJ,GAAgB,KAAO,EAAI,WAAa,QAAQ,EAAE,CAC9E,CAAC,CACH,CACF,CACF,CACF,CACF,GAGF,GAAAM,QAAA,cAACO,GAAA,KACEd,EACE,OAAQe,GAAMA,EAAE,QAAQ,MAAM,EAC9B,IAAKC,GACJ,GAAAT,QAAA,cAACU,GAAA,CACC,IAAKD,EAAE,YACP,QAASA,EAAE,YACX,SAAUA,EAAE,KAAOjB,GAAO,IAE1B,GAAAQ,QAAA,cAACW,EAAA,KACC,GAAAX,QAAA,cAACY,GAAA,CAAc,MAAOH,EAAG,CAC3B,CACF,CACD,CACL,CACF,CAEJ,EAEOI,GAAQtB,GFrEf,IAAAuB,GAA+B,mBAGzBC,GAAa,CAACC,EAAUC,IAAkC,CAC9D,OAAQD,EAAE,GAAI,CACZ,KAAKE,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACH,OAAOL,EAAa,IAAI,GAAGD,EAAE,EAAE,MAAM,GAAKC,EAAa,IAAI,GAAGD,EAAE,EAAE,MAAM,EAAI,EAAI,EAClF,QACE,OAAOA,EAAE,QAAQ,OAAQO,GAAWA,EAAO,QAAQ,EAAE,MACzD,CACF,EAEMC,GAAiB,CACrBC,EACAC,EAAyB,KACzBC,IAEIA,EAAmB,GAEnBF,IAAO,UACFC,IAAe,KAGpBD,IAAO,oBACFC,IAAe,KAEjB,GAQHE,GAAS,CAAC,CAAE,WAAAF,EAAY,WAAAC,CAAW,IAAmB,CAC1D,GAAM,CAAE,EAAAE,CAAE,KAAI,mBAAe,EACvB,CAAE,YAAAC,EAAa,cAAAC,EAAe,QAAAC,EAAS,SAAAC,EAAU,eAAAC,CAAe,EAAIC,GAAU,EAE9EC,EAASH,GAAU,OAEnB,CAACI,EAAOC,CAAQ,KAAI,aAAgB,EACpCC,KAAgB,gBAAaC,GAAqBF,EAASE,CAAS,EAAG,CAAC,CAAC,EACzEC,KAAU,gBAAY,IAAMH,EAAS,MAAS,EAAG,CAAC,CAAC,EAEzD,GAAI,CAACF,EACH,OAAO,KAET,IAAMM,EAAcf,EAAaA,EAAW,IAAKgB,GAAMA,EAAE,UAAU,EAAI,OAEjEC,EAAiBR,GACnB,OAAQO,GAAMA,EAAE,KAAO,WAAanB,GAAemB,EAAE,GAAIjB,EAAYgB,CAAW,CAAC,GACjF,OAAQ1B,GAAO0B,EAAcA,EAAY,SAAS1B,EAAE,EAA2B,EAAI,EAAK,EACzF,KAAK,CAAC6B,EAAGC,IACRJ,EACIA,EAAY,QAAQG,EAAE,EAA2B,EACjDH,EAAY,QAAQI,EAAE,EAA2B,EACjD,CACN,EACC,IAAKH,GAAM,CACV,IAAMI,EAAQpB,GAAY,KAAMqB,GAAMA,EAAE,aAAeL,EAAE,EAAE,EAC3D,OAAII,GAAO,YACF,CACL,GAAGJ,EACH,YAAaI,EAAM,WACrB,EAEK,CACL,GAAGJ,EACH,YAAad,EAAE,UAAUc,EAAE,EAAE,EAAE,CACjC,CACF,CAAC,EAEH,OACE,GAAAM,QAAA,iBAAAA,QAAA,cACGlB,GAAiBM,GAChB,GAAAY,QAAA,cAACC,GAAA,CACC,WAAYvB,EACZ,MAAOU,EACP,QAASL,EACT,eAAgBY,EAChB,aAAcX,GAAU,aAAa,cAAgB,EACrD,eAAgBC,EAChB,QAASO,EACX,EAEF,GAAAQ,QAAA,cAACE,GAAA,KACEP,EACE,OAAQD,GAAMA,EAAE,QAAQ,MAAM,EAC9B,IAAK3B,GAAM,CACV,IAAMoC,EAAWrC,GAAWC,EAAGc,EAAY,YAAY,EACvD,OACE,GAAAmB,QAAA,cAACI,GAAA,CAAK,IAAKrC,EAAE,IACX,GAAAiC,QAAA,cAACK,GAAA,CACC,QAAS,IAAMf,EAAcvB,CAAC,EAC9B,MAAOA,EAAE,YACT,aAAYA,EAAE,YACd,UACEoC,EAAW,EACP,0DACA,qCAGN,GAAAH,QAAA,cAACM,GAAA,KAAOvC,EAAE,WAAY,EACrBoC,EAAW,GACV,GAAAH,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,KAAgBL,CAAS,CAC5B,CAEJ,CACF,CAEJ,CAAC,CACL,CACF,CAEJ,EAEOM,GAAQ9B,G2BvIf,IAAA+B,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO,MAEjBC,GAAO,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAKfE,EAAK,EAAE,CAAC,IAAIA,EAAK,EAAE,CAAC;AAAA,EAGnBC,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA,aAIdE,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;AAAA,IAE1BE,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnCA,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;ECzBxC,IAAAC,EAA4C,gBCA5C,IAAAC,EAAmB,4BAIZ,IAAMC,GAAU,EAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAajBC,GAAQ,EAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKLE,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBzDH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOEI,GAAU,EAAAH,QAAO,UAEjBI,GAAS,EAAAJ,QAAO,SAEhBK,GAAM,EAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUbM,GAAU,EAAAN,QAAO;AAAA;AAAA;AAAA;AAAA,gBAIdO,EAAK,CAAC,CAAC;AAAA,EAGVC,GAAc,EAAAR,QAAO,MAErBS,GAAgB,EAAAT,QAAO;AAAA;AAAA,iBAEnBO,EAAK,CAAC,CAAC;AAAA,EAGXG,GAAa,EAAAV,QAAO;AAAA,mBACdO,EAAK,GAAI,CAAC;AAAA,WACjBL,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,EAI1CS,GAAU,EAAAX,QAAO,GAAG,MAAM,KAAO,CAC5C,UAAW,gCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUWY,GAAO,EAAAZ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBda,GAAc,EAAAb,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMlBO,EAAK,GAAI,CAAC;AAAA,EAGbO,GAAM,EAAAd,QAAO;AAAA,gBACVO,EAAK,CAAC,CAAC;AAAA,EAGVQ,GAAQ,EAAAf,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOfgB,GAAe,EAAAhB,QAAO,IAAI,MAAM,KAAO,CAClD,UAAW,2DACb,EAAE;AAAA;AAAA,kBAEgBO,EAAK,CAAC,CAAC;AAAA,EAGZU,GAAY,EAAAjB,QAAO;AAAA;AAAA,mBAEbO,EAAK,CAAC,CAAC;AAAA,EAGbW,GAAW,EAAAlB,QAAO;AAAA;AAAA,WAEnBE,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,EAI1CiB,GAAQ,EAAAnB,QAAO;AAAA,WAChBE,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;ECtJpD,IAAAkB,GAAkB,gBCAlB,IAAAC,GAA4B,4BAKrB,IAAMC,GAAO,GAAAC,QAAO;AAAA,aACdC,EAAK,EAAG,CAAC;AAAA,EAGTC,GAAM,GAAAF,QAAO;AAAA;AAAA;AAAA,sBAGHG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,aAChDF,EAAK,CAAC,CAAC,IAAIA,EAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpBG,GAAc,GAAAJ,QAAO;AAAA;AAAA,mBAEfC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIbI,MAAS,GAAAL,SAAOM,CAAW,EAAE,MAAM,KAAO,CACrD,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WASSL,EAAK,GAAI,CAAC;AAAA,cACPA,EAAK,GAAI,CAAC;AAAA,YACZA,EAAK,GAAI,CAAC;AAAA,aACTA,EAAK,GAAI,CAAC;AAAA,wBACEE,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsB9CI,GAAO,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMfC,EAAK,GAAI,CAAC;AAAA;AAAA,IAElB,CAAC,CAAE,QAAAO,CAAQ,IACXA,GACA;AAAA,gBACYP,EAAK,IAAK,CAAC;AAAA;AAAA,QAEnBF,EAAI;AAAA,mBACOE,EAAK,GAAI,CAAC;AAAA;AAAA;AAAA,QAGrBC,EAAG;AAAA,mBACQD,EAAK,EAAG,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,QAI/BG,EAAW;AAAA;AAAA,yBAEMH,EAAK,EAAG,CAAC;AAAA;AAAA;AAAA,KAG7B;ED3EL,IAAMQ,GAAU,CAAC,CAAE,MAAAC,EAAO,QAAAC,CAAQ,IAE9B,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KAAaL,CAAM,EACnBC,GACC,GAAAC,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAO,QAASL,GACf,GAAAC,QAAA,cAACK,GAAA,CAAS,MAAK,GAAC,CAClB,CACF,CAEJ,CACF,EAIEC,GAAU,CAAC,CAAE,MAAAC,EAAO,MAAAC,CAAM,IACzBD,EAKH,GAAAP,QAAA,cAACS,GAAA,CAAK,QAASD,GACZD,EAAM,IAAI,CAACG,EAAMC,IAChB,GAAAX,QAAA,cAACH,GAAA,CAAQ,IAAK,GAAGa,EAAK,KAAK,IAAIC,CAAK,GAAI,MAAOD,EAAK,MAAO,QAASA,EAAK,QAAS,CACnF,CACH,EARO,KAYJE,GAAQN,GE9Cf,IAAAO,GAA2B,WCA3B,IAAAC,GAA8B,WAUjBC,MAAc,kBAA4C,MAAS,EDPhF,IAAMC,GAAU,IAAwB,CACtC,IAAMC,KAAU,eAAWC,EAAW,EAEtC,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,4CAA4C,EAG9D,OAAOA,CACT,EACOE,GAAQH,GJaf,IAAAI,GAA+B,mBMzB/B,IAAAC,GAA4C,WAMtCC,GACJC,GACwD,CACxD,IAAMC,KAAe,WAAiB,IAAI,EAEpC,CAACC,EAAWC,CAAY,KAAI,aAAS,EAAK,EAC1C,CAACC,EAAmBC,CAAoB,KAAI,aAAS,CAAC,EAEtDC,EAAmB,CACvBC,EACAC,IACG,CACH,GAAM,CAACC,CAAK,EAAIF,EAChBJ,EAAaM,EAAM,cAAc,EACjCJ,EAAqBI,EAAM,iBAAiB,EAExCA,EAAM,gBAAkBT,GAAS,mBAAqBC,EAAa,UACrEO,EAAS,UAAUP,EAAa,OAAiC,EACjEA,EAAa,QAAU,KAE3B,EAEA,uBAAU,IAAM,CACd,IAAMO,EAAW,IAAI,qBAAqBF,EAAkBN,CAAO,EACnE,OAAIC,EAAa,SAASO,EAAS,QAAQP,EAAa,OAAiC,EAElF,IAAM,CACPA,EAAa,SAASO,EAAS,UAAUP,EAAa,OAAiC,CAC7F,CACF,EAAG,CAACA,EAAcD,CAAO,CAAC,EAEnB,CAACC,EAAcC,EAAWE,CAAiB,CACpD,EAEOM,GAAQX,GNKf,IAAMY,GAAc,CAAC,CACnB,GAAAC,EACA,MAAAC,EACA,KAAAC,EACA,MAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,YAAAC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,aAAAC,EACA,qBAAAC,EACA,QAAAC,CACF,IAAa,CACX,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAEvB,CAACC,EAAcC,CAAS,EAAIC,GAAgC,CAChE,kBAAmB,EACrB,CAAC,EAEK,CAAE,UAAAC,CAAU,EAAIC,GAAQ,EACxBC,KAAW,WAAQ,IAAOP,EAAU,IAAMA,EAAQb,CAAE,EAAI,OAAY,CAACA,CAAE,CAAC,EAExEqB,KAAc,eACjBC,GAAuD,CACtD,GAAIlB,GAAaF,EAAM,CACrB,IAAMqB,GAAM,IAAI,OAAO,uBAAuB,EAC1C,CAACnB,EAAU,MAAMmB,EAAG,GAAK,CAACnB,EAAU,WAAW,SAAS,MAAM,IAChEkB,EAAE,eAAe,EACjBJ,EAAUhB,CAAI,EAElB,CACF,EACA,CAACF,EAAII,EAAWF,CAAI,CACtB,EAEA,OACE,EAAAsB,QAAA,cAACC,GAAA,CAAQ,QAASL,GAChB,EAAAI,QAAA,cAACE,GAAA,CAAM,IAAKX,GACTC,GAAab,EACZ,EAAAqB,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACI,GAAA,CACC,KAAK,aACL,OAAQ,GAAGzB,CAAK,mCAAmCA,CAAK,mCAAmCA,CAAK,iCAChG,MAAM,+JACR,EACA,EAAAqB,QAAA,cAACK,GAAA,CACC,OAAQ,GAAG1B,CAAK,uBAAuBA,CAAK,uBAAuBA,CAAK,qBACxE,MAAM,+JACN,IAAK,GAAGA,CAAK,gBACb,IAAKF,EACP,CACF,CACF,EAEA,EAAAuB,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACK,GAAA,CAAI,IAAKxB,GAAoByB,GAA2B,CAC3D,CAEJ,EACA,EAAAN,QAAA,cAACO,GAAA,KACC,EAAAP,QAAA,cAACQ,GAAA,KACE1B,GAAc,EAAAkB,QAAA,cAACS,GAAA,KAAY3B,CAAW,EACvC,EAAAkB,QAAA,cAACU,GAAA,KACEhC,EACC,EAAAsB,QAAA,cAACW,GAAA,CAAK,QAASd,EAAa,KAAMnB,EAAM,MAAOD,EAAO,aAAYA,GAC/DA,CACH,EAEAA,CAEJ,EACCM,GAAe,EAAAiB,QAAA,cAACY,GAAA,KAAa7B,CAAY,EACzCC,GACC,EAAAgB,QAAA,cAACa,GAAA,KACC,EAAAb,QAAA,cAACc,GAAA,CAAQ,MAAK,GAAC,MAAO9B,EAAS,CACjC,CAEJ,EACA,EAAAgB,QAAA,cAACe,GAAA,KACC,EAAAf,QAAA,cAACgB,GAAA,KACC,EAAAhB,QAAA,cAACiB,GAAA,KACE/B,EAAW,EAAAc,QAAA,cAACkB,GAAA,KAAUhC,CAAS,EAAc,EAAAc,QAAA,cAACmB,GAAA,KAAO7B,EAAE,mBAAmB,CAAE,EAC7E,EAAAU,QAAA,cAACoB,GAAA,KAAcnC,CAAM,CACvB,EACCE,GACC,EAAAa,QAAA,cAACiB,GAAA,KACC,EAAAjB,QAAA,cAACmB,GAAA,KAAO7B,EAAE,4BAA4B,CAAE,EACxC,EAAAU,QAAA,cAACoB,GAAA,KAAcjC,CAAa,CAC9B,EAEDC,GACC,EAAAY,QAAA,cAACiB,GAAA,KACC,EAAAjB,QAAA,cAACmB,GAAA,KAAO7B,EAAE,6BAA6B,CAAE,EACzC,EAAAU,QAAA,cAACoB,GAAA,KAAchC,CAAqB,CACtC,CAEJ,CACF,CACF,CACF,CAEJ,EAEOiC,GAAQ9C,GFlJf,IAAA+C,GAAoB,kBAEdC,GAAgBC,GAAuB,CAC3C,IAAMC,EAAMD,EAAS,eAAe,QAAQ,CAAC,GAAG,IAChD,GAAIC,EACF,MAAO,GAAGA,CAAG,aAGjB,EAWMC,GAAO,CAAC,CACZ,UAAAC,EACA,iBAAAC,EACA,UAAAC,EACA,UAAAC,EACA,kBAAAC,EACA,YAAAC,CACF,IACOL,EAKH,GAAAM,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACER,EAAU,IAAKH,GAAa,CAsB3B,IAAMY,EAAaN,EAAY,GAAGA,CAAS,IAAIN,EAAS,GAAG,GAAK,OAEhE,OACE,GAAAS,QAAA,cAACI,GAAA,CAAK,IAAKb,EAAS,KAClB,GAAAS,QAAA,cAACK,GAAA,CACC,GAAId,EAAS,IACb,QAASQ,EACT,MAAOR,EAAS,MAChB,UAAWM,EACX,KAAMM,IAA0BP,EAAY,IAAIL,EAAS,GAAG,GAAK,QACjE,MAAOD,GAAaC,CAAQ,EAC5B,iBAAkBI,EAClB,YAAaJ,EAAS,iBACtB,WAAYO,EAAoBP,EAAS,WAAW,CAAC,GAAG,KAAO,OAC/D,QAAS,CACP,CACE,MAAOA,EAAS,SAClB,EACA,CACE,MAAO,GAAGe,EACRf,EAAS,iBAAiB,OAASA,EAAS,OAC9C,CAAC,IAAI,GAAAgB,QAAQ,EACX,YAAYhB,EAAS,iBAAiB,MAAQ,kBAAkB,EAClE,CAAC,EACH,EACA,CACE,MAAOA,EAAS,WAClB,EACA,CACE,MAAOA,EAAS,QAClB,CACF,EACA,MAAO,GAAGe,EAAgBf,EAAS,KAAK,CAAC,IAAI,GAAAgB,QAAQ,EAAE,kBAAkB,CAAC,GAC1E,SACEhB,EAAS,WAAa,QAAaA,EAAS,MAAQA,EAAS,SACzD,GAAGe,EAAgBf,EAAS,QAAQ,CAAC,IAAI,GAAAgB,QAAQ,EAAE,kBAAkB,CAAC,GACtE,OAEN,aACEhB,EAAS,eAAiB,OACtB,GAAGe,EAAgBf,EAAS,YAAY,CAAC,IAAI,GAAAgB,QAAQ,EAAE,kBAAkB,CAAC,GAC1E,OAEN,qBACEhB,EAAS,uBAAyB,OAC9B,GAAGe,EAAgBf,EAAS,oBAAoB,CAAC,IAAI,GAAAgB,QAAQ,EAC3D,kBACF,CAAC,GACD,OAER,CACF,CAEJ,CAAC,CACH,CACF,EAnFO,KAuFJC,GAAQf,GSzHf,IAAAgB,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,EAKjBC,GAAQ,GAAAD,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYWE,MAAQ,GAAAF,SAAOG,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA,WAK5BC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,sBAEIC,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,iBAC5CD,EAAK,CAAC,CAAC;AAAA,eACTA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOXA,EAAK,EAAE,CAAC;AAAA,cACLA,EAAK,EAAE,CAAC;AAAA,YACVA,EAAK,EAAE,CAAC;AAAA,aACPA,EAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAWIC,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EDnDjE,IAAAC,GAA+B,mBAQzBC,GAAa,CAAC,CAAE,SAAAC,EAAU,QAAAC,EAAS,WAAAC,CAAW,IAAa,CAC/D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAAON,CAAS,EAChBC,GACC,GAAAG,QAAA,cAACG,GAAA,CAAM,QAASN,EAAS,MAAOC,GAA0BC,EAAE,iBAAiB,GAC3E,GAAAC,QAAA,cAACI,GAAA,CAAW,MAAK,GAAC,CACpB,CAEJ,CAEJ,EAEOC,GAAQV,GE1Bf,IAAAW,GAA6C,gBCA7C,IAAAC,GAA2C,gBCA3C,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA,EAMWC,GAAQ,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYfE,GAAS,GAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKNG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA,EAKhDC,GAAS,GAAAJ,QAAO;AAAA;AAAA,EAIhBK,MAAY,GAAAL,SAAOM,CAAW,EAAE,MAAM,KAAO,CACxD,UAAW,uCACb,EAAE;AAAA;AAAA;AAAA;AAAA,WAIUH,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA,YAC1CA,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA;AAAA;AAAA;AAAA,EAM3CI,GAAQ,GAAAP,QAAO,MAAM,MAAM,KAAO,CAC7C,KAAM,SACN,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA,YAIWG,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA,eACzCK,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAeRL,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;ED3EzD,IAAMM,GAAc,GAAAC,QAAM,WACxB,CACE,CAAE,YAAAC,EAAa,MAAAC,EAAO,MAAAC,EAAO,GAAAC,EAAI,SAAAC,EAAU,SAAAC,EAAU,UAAAC,CAAU,EAC/DC,IAMA,GAAAR,QAAA,cAACS,GAAA,CAAQ,IAAKD,GACZ,GAAAR,QAAA,cAACU,GAAA,CAAM,QAASN,GAAKF,CAAM,EAC3B,GAAAF,QAAA,cAACW,GAAA,KACC,GAAAX,QAAA,cAACY,GAAA,CACC,YAAaX,EACb,KAAK,SACL,MAAOE,EACP,GAAIC,EACJ,SAAUE,EACV,UAAWC,EACb,CACF,EACA,GAAAP,QAAA,cAACa,GAAA,KACC,GAAAb,QAAA,cAACc,GAAA,CAAU,QAAST,EAAU,MAAO,eAAYH,CAAK,GAAI,aAAY,eAAYA,CAAK,IACrF,GAAAF,QAAA,cAACe,GAAA,CAAW,MAAK,GAAC,CACpB,CACF,CACF,CAEJ,EAEAhB,GAAY,YAAc,cAE1B,IAAOiB,GAAQjB,GElDf,IAAAkB,GAA0B,WAEpBC,GAAkB,CAACC,EAAmCC,IAAyB,CACnF,IAAMC,EAAeC,GAAkB,CACjCH,EAAI,SAAWG,EAAE,QAAU,CAACH,EAAI,QAAQ,SAASG,EAAE,MAAc,GACnEF,EAAS,CAEb,KAEA,cAAU,KACR,SAAS,iBAAiB,QAASC,CAAW,EAEvC,IAAM,CACX,SAAS,oBAAoB,QAASA,CAAW,CACnD,EACD,CACH,EAEOE,GAAQL,GHff,IAAAM,GAA+B,mBAQzBC,GAAY,CAAC,CAAE,MAAAC,EAAO,SAAAC,EAAU,SAAAC,CAAS,IAAsB,CACnE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,KAAM,WAAuB,IAAI,EAEjCC,KAAW,gBACdC,GAA2CL,EAASK,EAAE,cAAc,KAAK,EAC1E,CAAC,CACH,EAEAC,GAAgBH,EAAK,IAAMH,EAAS,EAAE,CAAC,EAEvC,IAAMO,KAAY,gBAAY,IAAM,CAClCN,EAASF,CAAK,CAChB,EAAG,CAACA,CAAK,CAAC,EAEJS,KAAY,gBACfH,GAA6C,CACxCA,EAAE,UAAY,IAChBE,EAAU,CAEd,EACA,CAACR,EAAOQ,CAAS,CACnB,EAEA,OACE,GAAAE,QAAA,cAACC,GAAA,CACC,IAAKP,EACL,MAAOJ,EACP,SAAUK,EACV,UAAWI,EACX,SAAUD,EACV,YAAaL,EAAE,uBAAuB,EACtC,MAAOA,EAAE,uBAAuB,EAChC,GAAG,cACL,CAEJ,EAEOS,GAAQb,GD7Cf,IAAMc,GAAe,IAAM,CACzB,GAAM,CAACC,EAAOC,CAAQ,KAAI,aAAS,EAAE,EAC/B,CAAE,YAAAC,EAAa,eAAAC,CAAe,EAAIC,GAAU,EAE5CC,KAAW,gBACdL,GAAkB,CACjB,IAAMM,EAAY,IAAI,gBAAgBJ,EAAY,YAAY,EAC1DF,IAAUM,EAAU,IAAI,OAAO,IAI/BN,EACFM,EAAU,IAAI,QAASN,CAAK,EAE5BM,EAAU,OAAO,QAAQ,EAG3BH,EAAeG,EAAU,SAAS,CAAC,EACnCL,EAAS,EAAE,EACb,EACA,CAACC,CAAW,CACd,EAEA,OAAO,GAAAK,QAAA,cAACC,GAAA,CAAU,MAAOR,EAAO,SAAUC,EAAU,SAAUI,EAAU,CAC1E,EAEOI,GAAQV,GK9Bf,IAAAW,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKnB,IAAMC,GAAiBC,GAAyC,CAC9D,IAAIC,EAAKC,GAAM,MAAM,OAErB,OAAIF,IAAa,QACfC,EAAKC,GAAM,MAAM,GAAG,cACXF,IAAa,UACtBC,EAAKC,GAAM,MAAM,GAAG,aACXF,IAAa,OACtBC,EAAKC,GAAM,MAAM,GAAG,UACXF,IAAa,YACtBC,EAAKC,GAAM,MAAM,GAAG,eAGfD,CACT,EAKaE,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,OACR,EAAE;AAAA;AAAA;AAAA,aAGWC,EAAK,GAAG,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA,sBACVC,GAAkBP,GAAcO,EAAM,QAAQ,CAAC;AAAA,WAC1DA,GAAkBA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAI3CC,GAAO,GAAAH,QAAO;AAAA;AAAA,mBAERC,EAAK,CAAC,CAAC;AAAA,eACXA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAOTG,GAAU,GAAAJ,QAAO;AAAA;AAAA;AAAA,EAKjBK,GAAU,GAAAL,QAAO;AAAA;AAAA,EAIjBM,GAAU,GAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EDzC9B,IAAMO,GAAW,CAAC,CAAE,SAAAC,EAAU,KAAAC,EAAM,QAAAC,EAAS,SAAAC,CAAS,IAAa,CACjE,IAAIC,EAAe,GAAAC,QAAA,cAACC,GAAA,CAAS,MAAK,GAAC,EACnC,OAAIN,IAAa,QACfI,EAAe,GAAAC,QAAA,cAACE,GAAA,CAAsB,MAAK,GAAC,EACnCP,IAAa,UACtBI,EAAe,GAAAC,QAAA,cAACG,GAAA,CAAwB,MAAK,GAAC,EACrCR,IAAa,YACtBI,EAAe,GAAAC,QAAA,cAACI,GAAA,CAAU,MAAK,GAAC,GAIhC,GAAAJ,QAAA,cAACK,GAAA,CAAQ,SAAUV,GAChBC,GAAQ,GAAAI,QAAA,cAACM,GAAA,KAAMP,CAAa,EAC7B,GAAAC,QAAA,cAACO,GAAA,KACEV,GAAW,GAAAG,QAAA,cAACQ,GAAA,KAASX,CAAQ,EAC9B,GAAAG,QAAA,cAACS,GAAA,KAASX,CAAS,CACrB,CACF,CAEJ,EAEOY,GAAQhB,GEgBf,IAAMiB,GAAN,MAAMC,CAAO,CACX,YAAe,OAA6B,CAC1C,gBAAiB,CAAC,EAClB,YAAa,CAAC,EACd,WAAY,CAAC,EACb,gBAAiB,CAAC,EAClB,WAAY,CAAC,EACb,YAAa,CAAC,EACd,aAAc,CAAC,EACf,mBAAoB,CAAC,EACrB,gBAAiB,CAAC,EAClB,YAAa,CAAC,EACd,kBAAmB,CAAC,EACpB,gBAAiB,CAAC,EAClB,IAAK,CAAC,CACR,EAEA,YAAe,QAA+B,CAC5C,eAAgB,CAAC,EACjB,IAAK,CAAC,CACR,EAEA,YAAc,gBAAmBC,GAC/BD,EAAO,QAAQC,EAAM,UAAU,EAAE,KAAKA,CAAY,EAEpD,YAAc,kBAAqBA,GAAuB,CACxD,GAAID,EAAO,QAAQC,EAAM,UAAU,GACjC,QAASC,EAAI,EAAGA,EAAIF,EAAO,QAAQC,EAAM,UAAU,EAAE,OAAQC,IAC3D,GAAIF,EAAO,QAAQC,EAAM,UAAU,EAAEC,CAAC,IAAMD,EAAO,CACjDD,EAAO,QAAQC,EAAM,UAAU,EAAE,OAAOC,EAAG,CAAC,EAC5C,KACF,EAGN,EAEA,YAAc,cAAgB,CAACC,KAA2BC,IAAc,CAClEJ,EAAO,QAAQ,KACjBA,EAAO,OAAO,IAAI,QAASC,GAAUA,EAAM,SAASE,EAAWC,CAAI,CAAC,EAElEJ,EAAO,QAAQG,CAAS,GAC1BH,EAAO,QAAQG,CAAS,EAAE,QAASF,GAAuB,CACxD,OAAQE,EAAW,CACjB,IAAK,iBACFF,EAAM,SAAoCG,EAAK,CAAC,CAAC,EAClD,MACF,QACE,KACJ,CACF,CAAC,CAEL,EAEA,YAAc,UAAaH,GAAqBD,EAAO,OAAOC,EAAM,SAAS,EAAE,KAAKA,CAAY,EAEhG,YAAc,YAAeA,GAAqB,CAChD,GAAID,EAAO,OAAOC,EAAM,SAAS,GAC/B,QAASC,EAAI,EAAGA,EAAIF,EAAO,OAAOC,EAAM,SAAS,EAAE,OAAQC,IACzD,GAAIF,EAAO,OAAOC,EAAM,SAAS,EAAEC,CAAC,IAAMD,EAAO,CAC/CD,EAAO,OAAOC,EAAM,SAAS,EAAE,OAAOC,EAAG,CAAC,EAC1C,KACF,EAGN,EAEA,YAAc,QAAU,CAACC,KAA0BC,IAAc,CAC3DJ,EAAO,OAAO,KAChBA,EAAO,OAAO,IAAI,QAASC,GAAUA,EAAM,SAASE,EAAWC,CAAI,CAAC,EAElEJ,EAAO,OAAOG,CAAS,GACzBH,EAAO,OAAOG,CAAS,EAAE,QAASF,GAAqB,CACrD,OAAQE,EAAW,CACjB,IAAK,kBACFF,EAAM,SAAqCG,EAAK,CAAC,CAAC,EACnD,MACF,IAAK,cACFH,EAAM,SAAsCG,EAAK,CAAC,CAAC,EACpD,MACF,IAAK,kBACFH,EAAM,SAAqCG,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EAC5D,MACF,IAAK,aACL,IAAK,aACL,IAAK,cACL,IAAK,eACL,IAAK,qBACL,IAAK,kBACL,IAAK,cACL,IAAK,oBACL,IAAK,kBACFH,EAAM,SAA2B,EAClC,MACF,QACE,KACJ,CACF,CAAC,CAEL,EACF,EACOI,EAAQN,GCtJf,IAAAO,GAAiB,kBACjBC,GAAiD,WCDjD,IAAAC,GAAiB,kBACjBC,GAAiC,mBAG3BC,GAAeC,GAA4B,CAC/C,OAAQA,EAAY,CAClB,IAAK,KACH,MAAO,QACT,IAAK,KACH,MAAO,QACT,QACE,MAAO,OACX,CACF,EAEaC,GAAiB,CAACD,EAAyB,OAC/C,IAAI,QAASE,GAAY,CAC9B,GAAI,GAAAC,QAAK,cAAe,CACtBD,EAAQ,EAAI,EACZ,MACF,CACA,GAAAC,QAAK,IAAI,mBAAgB,EAAE,KACzB,CACE,IAAKJ,GAAYC,CAAU,EAC3B,YAAa,QACb,cAAe,CACb,YAAa,EACf,EACA,MAAO,GACP,UAAW,CACT,QAAS,CACP,YAAa,CACX,WAAY,CACV,aAAc,yBAChB,EACA,OAAQ,CACN,aAAc,cACd,YAAa,SACb,SAAU,YACV,YAAa,kBACb,OAAQ,gBACR,MAAO,UACP,iBAAkB,gBAClB,qBAAsB,UACtB,aAAc,WACd,MAAO,OACP,QAAS,SACT,UAAW,cACX,kBAAmB,uBACnB,aAAc,gBACd,qBAAsB,kBACxB,EACA,SAAU,CACR,QAAS,KACT,QAAS,WACX,EACA,SAAU,CACR,MAAO,eACP,qBAAsB,mBACxB,EACA,YAAa,CACX,OAAQ,OACV,EACA,eAAgB,CACd,aAAc,CACZ,YAAa,eACb,KAAM,EACR,EACA,YAAa,CACX,YAAa,SACb,KAAM,EACR,EACA,UAAW,CACT,YAAa,UACb,KAAM,+CACR,EACA,UAAW,CACT,YAAa,cACb,KAAM,2RACR,EACA,gBAAiB,CACf,YAAa,qBACb,KAAM,6BACR,EACA,SAAU,CAAE,YAAa,uBAAkB,KAAM,EAAG,EACpD,YAAa,CAAE,YAAa,kBAAa,KAAM,EAAG,EAClD,mBAAoB,CAAE,YAAa,sBAAuB,KAAM,EAAG,EACnE,SAAU,CACR,YAAa,kBACb,KAAM,wCACR,EACA,YAAa,CAAE,YAAa,SAAU,KAAM,IAAK,CACnD,EACA,SAAU,CACR,UAAW,KACX,iBAAkB,KACpB,EACA,OAAQ,CACN,IAAK,KACL,GAAI,MACJ,SAAU,UACV,MAAO,WACP,SAAU,WACV,SAAU,aACV,oBAAqB,uBACrB,oBAAqB,0BACrB,OAAQ,UACR,QAAS,SACT,YAAa,SACb,aAAc,MACd,eAAgB,MAChB,cAAe,MACf,YAAa,MACb,cAAe,SACf,YAAa,SACb,gBAAiB,kBACjB,gBAAiB,qBACjB,kBAAmB,2BACnB,cAAe,sBACf,KAAM,WACN,WAAY,gBACd,EACA,KAAM,CACJ,gBAAiB,oBACjB,eAAgB,iBAChB,iBAAkB,mCAClB,qBAAsB,iCACtB,iBAAkB,iBAClB,iBAAkB,yBAClB,iBAAkB,QAClB,0BAA2B,aAC3B,QAAS,UACT,mBACE,ySACF,QAAS,eACT,mBAAoB,kEACpB,UAAW,aACX,qBAAsB,qCACtB,UAAW,WACX,cAAe,CACb,sBAAuB,mCACvB,iBAAkB,kBAClB,MAAO,oBACT,EACA,cAAe,yBACf,yBAA0B,oDAC1B,uBAAwB,oDACxB,oBAAqB,kBACrB,+BACE,8KACF,oCACE,4FACF,sCACE,8EACF,aAAc,oBACd,wBAAyB,kEACzB,aAAc,wBACd,qBAAsB,6BACtB,kBAAmB,kCACnB,eAAgB,QAChB,YAAa,kBACb,aAAc,cACd,oBAAqB,+BACrB,8BACE,mEACF,QAAS,UACT,iBAAkB,8BAClB,iBAAkB,8BAClB,kBAAmB,oBACnB,YAAa,iBACb,KAAM,WACN,OAAQ,YACR,aAAc,gCACd,kBAAmB,uBACnB,UAAW,mBACX,+BAAgC,yDAChC,eAAgB,eAChB,sBAAuB,wCACvB,eAAgB,0BAChB,+BAAgC,uCAChC,mCACE,mLACF,wBAAyB,yEACzB,mCACE,6DACF,kBAAmB,mCACnB,oBAAqB,eACrB,iBAAkB,CAChB,sBAAuB,gCACvB,aAAc,cACd,cAAe,mBACf,YAAa,mBACb,YAAa,eACb,cAAe,4BACf,kBAAmB,YACnB,0BAA2B,6CAC3B,WAAY,2CACZ,YAAa,oBACb,YAAa,gBACb,SAAU,cACV,SAAU,YACV,SAAU,WACV,kBAAmB,oBACnB,SAAU,yBACV,kBAAmB,0BACnB,gBAAiB,sBACjB,cAAe,YACf,OAAQ,SACR,sBACE,iFACF,6BACE,oIACJ,EACA,QAAS,CACP,aAAc,2DACd,SAAU,uBACV,UAAW,sBACX,UAAW,kBACX,gBAAiB,qBACjB,WAAY,OACZ,YAAa,sBACf,EACA,YAAa,CACX,YAAa,eACb,uBAAwB,6CACxB,MAAO,cACP,SAAU,gBACV,iBAAkB,oBAClB,mBAAoB,WACpB,8BAA+B,kCACjC,CACF,EACA,YAAa,CACX,MAAO,OACP,eAAgB,eAClB,EACA,OAAQ,CACN,OAAQ,SACR,KAAM,UACN,SAAU,CACR,KAAM,YACN,MAAO,oBACT,EACA,aAAc,CACZ,KAAM,WACN,MAAO,aACT,EACA,WAAY,CACV,KAAM,UACN,MAAO,2BACT,EACA,aAAc,iBACd,wBAAyB,CACvB,QAAS,gBACT,KAAM,gCACR,EACA,sBAAuB,CACrB,QAAS,gBACT,KAAM,2CACR,EACA,YAAa,CACX,UAAW,WACX,aAAc,wBACd,cAAe,sBACf,SAAU,kBACV,UAAW,kBACX,SAAU,0BACV,UAAW,uBACX,WAAY,oBACZ,YAAa,mBACf,EACA,gBAAiB,CACf,KAAM,oBACN,MAAO,mBACT,EACA,uBAAwB,0BACxB,OAAQ,CACN,SAAU,MACV,OAAQ,OACV,EACA,SAAU,UACV,KAAM,UACN,GAAI,OACJ,IAAK,MACL,IAAK,KACP,EACA,UAAW,CACT,MAAO,SACP,YAAa,iBACb,OAAQ,CACN,KAAM,SACN,MAAO,QACT,EACA,cAAe,mBACf,cAAe,iBACjB,EACA,MAAO,CACL,QAAS,YACT,SAAU,MACV,2BAA4B,0CAC5B,6BAA8B,0CAC9B,WAAY,iBACZ,WAAY,iBACZ,YAAa,yBACb,aAAc,wBACd,cAAe,wBACf,UAAW,gBACX,eAAgB,4BAChB,YAAa,gBACb,gBAAiB,qBACjB,gBAAiB,uBACjB,MAAO,OACP,oBAAqB,gBACrB,MAAO,QACP,UAAW,cACX,cAAe,mBACf,YAAa,iBACf,CACF,CACF,EACA,QAAS,CACP,YAAa,CACX,WAAY,CACV,aAAc,uBAChB,EACA,OAAQ,CACN,aAAc,YACd,YAAa,SACb,SAAU,gBACV,YAAa,eACb,OAAQ,WACR,MAAO,QACP,iBAAkB,iBAClB,qBAAsB,UACtB,aAAc,WACd,MAAO,OACP,QAAS,iBACT,UAAW,cACX,kBAAmB,iBACnB,aAAc,gBACd,cAAe,iBACjB,EACA,SAAU,CACR,QAAS,KACT,QAAS,QACX,EACA,SAAU,CACR,MAAO,oBACP,qBAAsB,iBACxB,EACA,YAAa,CACX,OAAQ,OACV,EACA,eAAgB,CACd,aAAc,CACZ,YAAa,YACb,KAAM,EACR,EACA,YAAa,CACX,YAAa,SACb,KAAM,EACR,EACA,UAAW,CACT,YAAa,UACb,KAAM,wCACR,EACA,UAAW,CACT,YAAa,eACb,KAAM,oRACR,EACA,gBAAiB,CACf,YAAa,mBACb,KAAM,8BACR,EACA,SAAU,CAAE,YAAa,iBAAkB,KAAM,EAAG,EACpD,YAAa,CAAE,YAAa,WAAY,KAAM,EAAG,EACjD,mBAAoB,CAAE,YAAa,sBAAuB,KAAM,EAAG,EACnE,SAAU,CACR,YAAa,gBACb,KAAM,yCACR,EACA,YAAa,CAAE,YAAa,SAAU,KAAM,IAAK,CACnD,EACA,SAAU,CACR,UAAW,KACX,iBAAkB,KACpB,EACA,OAAQ,CACN,IAAK,KACL,GAAI,MACJ,SAAU,WACV,MAAO,QACP,SAAU,UACV,SAAU,UACV,oBAAqB,sBACrB,oBAAqB,yBACrB,OAAQ,OACR,QAAS,UACT,YAAa,MACb,aAAc,OACd,eAAgB,YAChB,cAAe,WACf,YAAa,MACb,cAAe,YACf,YAAa,SACb,gBAAiB,kBACjB,gBAAiB,qBACjB,kBAAmB,8BACnB,cAAe,qBACf,KAAM,UACN,WAAY,kBACd,EACA,KAAM,CACJ,gBAAiB,2BACjB,eAAgB,eAChB,iBAAkB,+BAClB,qBAAsB,iCACtB,iBAAkB,yBAClB,iBAAkB,wBAClB,iBAAkB,OAClB,0BAA2B,WAC3B,QAAS,WACT,mBACE,ySACF,QAAS,UACT,mBAAoB,6DACpB,UAAW,SACX,qBAAsB,oCACtB,UAAW,aACX,cAAe,CACb,sBAAuB,6BACvB,iBAAkB,kBAClB,MAAO,kBACT,EACA,cAAe,qBACf,yBAA0B,kDAC1B,uBAAwB,kDACxB,oBAAqB,kBACrB,+BACE,iKACF,oCACE,sFACF,sCACE,4DACF,aAAc,gBACd,wBAAyB,iDACzB,aAAc,gBACd,qBAAsB,kBACtB,kBAAmB,4BACnB,eAAgB,QAChB,YAAa,eACb,aAAc,eACd,oBAAqB,uBACrB,8BACE,6DACF,QAAS,UACT,iBAAkB,6BAClB,iBAAkB,4BAClB,kBAAmB,wBACnB,YAAa,eACb,KAAM,UACN,OAAQ,SACR,aAAc,sBACd,kBAAmB,eACnB,UAAW,aACX,+BAAgC,6CAChC,eAAgB,eAChB,sBAAuB,oCACvB,eAAgB,mBAChB,+BAAgC,6CAChC,mCACE,2KACF,wBACE,yEACF,mCACE,+DACF,kBAAmB,0BACnB,oBAAqB,MACrB,iBAAkB,CAChB,sBAAuB,kCACvB,aAAc,eACd,cAAe,aACf,YAAa,sBACb,YAAa,cACb,cAAe,iBACf,kBAAmB,iBACnB,0BAA2B,oDAC3B,WAAY,mCACZ,YAAa,sBACb,YAAa,kBACb,SAAU,aACV,SAAU,YACV,UAAW,YACX,kBAAmB,qBACnB,SAAU,kBACV,kBAAmB,yBACnB,gBAAiB,uBACjB,cAAe,0BACf,OAAQ,MACR,sBACE,wEACF,6BACE,+HACJ,EACA,QAAS,CACP,aAAc,kDACd,SAAU,kBACV,UAAW,2BACX,UAAW,oBACX,gBAAiB,oBACjB,WAAY,OACZ,YAAa,oBACf,EACA,YAAa,CACX,YAAa,cACb,uBAAwB,qDACxB,MAAO,cACP,SAAU,eACV,iBAAkB,uBAClB,mBAAoB,YACpB,8BAA+B,kCACjC,CACF,EACA,YAAa,CACX,MAAO,OACP,eAAgB,eAClB,EACA,OAAQ,CACN,OAAQ,SACR,KAAM,SACN,SAAU,CACR,KAAM,UACN,MAAO,sBACT,EACA,aAAc,CACZ,KAAM,SACN,MAAO,YACT,EACA,WAAY,CACV,KAAM,SACN,MAAO,8BACT,EACA,aAAc,kBACd,wBAAyB,CACvB,QAAS,mBACT,KAAM,8BACR,EACA,sBAAuB,CACrB,QAAS,mBACT,KAAM,2CACR,EACA,YAAa,CACX,UAAW,WACX,aAAc,qBACd,cAAe,oBACf,SAAU,iBACV,UAAW,kBACX,SAAU,wBACV,UAAW,wBACX,WAAY,0BACZ,YAAa,2BACf,EACA,gBAAiB,CACf,KAAM,qBACN,MAAO,oBACT,EACA,uBAAwB,yBACxB,OAAQ,CACN,SAAU,MACV,OAAQ,OACV,EACA,SAAU,eACV,KAAM,MACN,GAAI,MACJ,IAAK,MACL,IAAK,KACP,EACA,UAAW,CACT,MAAO,SACP,YAAa,qBACb,OAAQ,CACN,KAAM,SACN,MAAO,QACT,EACA,cAAe,oBACf,cAAe,gBACjB,EACA,MAAO,CACL,QAAS,YACT,SAAU,MACV,2BAA4B,4CAC5B,6BAA8B,4CAC9B,WAAY,cACZ,WAAY,aACZ,YAAa,wBACb,aAAc,uBACd,cAAe,gBACf,UAAW,cACX,eAAgB,6BAChB,YAAa,eACb,gBAAiB,oBACjB,gBAAiB,uBACjB,MAAO,OACP,oBAAqB,gBACrB,MAAO,QACP,UAAW,iBACX,cAAe,oBACf,YAAa,gBACf,CACF,CACF,EACA,QAAS,CACP,YAAa,CACX,WAAY,CACV,aAAc,oBAChB,EACA,OAAQ,CACN,aAAc,eACd,YAAa,QACb,SAAU,YACV,YAAa,eACb,OAAQ,SACR,MAAO,QACP,iBAAkB,sBAClB,qBAAsB,UACtB,aAAc,gBACd,MAAO,QACP,QAAS,UACT,UAAW,aACX,kBAAmB,gBACnB,aAAc,kBACd,qBAAsB,kBACxB,EACA,SAAU,CACR,QAAS,KACT,QAAS,UACX,EACA,SAAU,CACR,MAAO,oBACP,qBAAsB,sBACxB,EACA,YAAa,CACX,OAAQ,QACV,EACA,eAAgB,CACd,aAAc,CACZ,YAAa,QACb,KAAM,EACR,EACA,YAAa,CACX,YAAa,QACb,KAAM,EACR,EACA,UAAW,CACT,YAAa,UACb,KAAM,uCACR,EACA,UAAW,CACT,YAAa,aACb,KAAM,wRACR,EACA,gBAAiB,CACf,YAAa,mBACb,KAAM,oCACR,EACA,SAAU,CAAE,YAAa,mBAAoB,KAAM,EAAG,EACtD,YAAa,CAAE,YAAa,UAAW,KAAM,EAAG,EAChD,mBAAoB,CAAE,YAAa,sBAAuB,KAAM,EAAG,EACnE,SAAU,CACR,YAAa,YACb,KAAM,oDACR,EACA,YAAa,CAAE,YAAa,QAAS,KAAM,IAAK,CAClD,EACA,SAAU,CACR,UAAW,KACX,iBAAkB,KACpB,EACA,OAAQ,CACN,IAAK,MACL,GAAI,KACJ,SAAU,WACV,MAAO,QACP,SAAU,YACV,SAAU,YACV,oBAAqB,wBACrB,oBAAqB,wBACrB,OAAQ,SACR,QAAS,UACT,YAAa,MACb,aAAc,OACd,eAAgB,YAChB,cAAe,WACf,YAAa,MACb,cAAe,MACf,YAAa,MACb,gBAAiB,mBACjB,gBAAiB,mBACjB,kBAAmB,wBACnB,cAAe,mBACf,KAAM,OACN,WAAY,iBACd,EACA,KAAM,CACJ,gBAAiB,mBACjB,eAAgB,kBAChB,iBAAkB,+BAClB,qBAAsB,qCACtB,iBAAkB,qBAClB,iBAAkB,sBAClB,iBAAkB,MAClB,0BAA2B,WAC3B,QAAS,WACT,mBACE,gRACF,QAAS,WACT,mBACE,+EACF,UAAW,YACX,qBAAsB,wCACtB,UAAW,YACX,cAAe,CACb,sBAAuB,+BACvB,iBAAkB,oBAClB,MAAO,iBACT,EACA,cAAe,sBACf,yBAA0B,yCAC1B,uBAAwB,yCACxB,oBAAqB,wBACrB,+BACE,wKACF,oCACE,2FACF,sCACE,0DACF,aAAc,gBACd,wBACE,6DACF,aAAc,gBACd,qBAAsB,yBACtB,kBAAmB,0BACnB,eAAgB,QAChB,YAAa,gBACb,aAAc,gBACd,oBAAqB,iBACrB,8BACE,sDACF,QAAS,UACT,iBAAkB,yBAClB,iBAAkB,yBAClB,kBAAmB,sBACnB,YAAa,eACb,KAAM,OACN,OAAQ,SACR,aAAc,mBACd,kBAAmB,YACnB,UAAW,YACX,+BAAgC,+CAChC,eAAgB,kBAChB,uBAAwB,6BACxB,eAAgB,kBAChB,+BAAgC,sCAChC,mCACE,oLACF,wBAAyB,gDACzB,mCACE,wDACF,kBAAmB,yBACnB,oBAAqB,MACrB,iBAAkB,CAChB,sBAAuB,0BACvB,aAAc,eACd,cAAe,aACf,YAAa,eACb,YAAa,eACb,cAAe,iBACf,kBAAmB,sBACnB,0BAA2B,kDAC3B,WAAY,uCACZ,YAAa,eACb,YAAa,eACb,SAAU,aACV,SAAU,gBACV,SAAU,WACV,kBAAmB,qBACnB,SAAU,aACV,kBAAmB,sBACnB,gBAAiB,oBACjB,cAAe,YACf,OAAQ,MACR,sBACE,6EACF,6BACE,uHACJ,EACA,QAAS,CACP,aAAc,+CACd,SAAU,YACV,UAAW,qBACX,UAAW,qBACX,gBAAiB,oBACjB,WAAY,OACZ,YAAa,kBACf,EACA,YAAa,CACX,YAAa,cACb,uBAAwB,yCACxB,MAAO,aACP,SAAU,iBACV,iBAAkB,oBAClB,mBAAoB,WACpB,8BAA+B,sCACjC,CACF,EACA,YAAa,CACX,MAAO,QACP,eAAgB,eAClB,EACA,OAAQ,CACN,OAAQ,SACR,KAAM,OACN,SAAU,CACR,KAAM,YACN,MAAO,mBACT,EACA,aAAc,CACZ,KAAM,SACN,MAAO,aACT,EACA,WAAY,CACV,KAAM,OACN,MAAO,mBACT,EACA,aAAc,gBACd,wBAAyB,CACvB,QAAS,aACT,KAAM,gCACR,EACA,sBAAuB,CACrB,QAAS,aACT,KAAM,wCACR,EACA,YAAa,CACX,UAAW,YACX,aAAc,qBACd,cAAe,qBACf,SAAU,iBACV,UAAW,kBACX,SAAU,sBACV,UAAW,sBACX,WAAY,mBACZ,YAAa,mBACf,EACA,gBAAiB,CACf,KAAM,oBACN,MAAO,mBACT,EACA,uBAAwB,0BACxB,OAAQ,CACN,SAAU,MACV,OAAQ,MACV,EACA,SAAU,YACV,KAAM,OACN,GAAI,KACJ,IAAK,MACL,IAAK,KACP,EACA,UAAW,CACT,MAAO,SACP,YAAa,kBACb,OAAQ,CACN,KAAM,SACN,MAAO,QACT,EACA,cAAe,iBACf,cAAe,eACjB,EACA,MAAO,CACL,QAAS,aACT,SAAU,MACV,2BAA4B,2CAC5B,6BAA8B,2CAC9B,WAAY,cACZ,WAAY,cACZ,YAAa,oBACb,aAAc,oBACd,cAAe,iBACf,UAAW,aACX,eAAgB,wBAChB,YAAa,eACb,gBAAiB,oBACjB,gBAAiB,uBACjB,MAAO,QACP,oBAAqB,kBACrB,MAAO,QACP,UAAW,aACX,cAAe,iBACf,YAAa,eACf,CACF,CACF,CACF,CACF,EACA,IAAM,CACJE,EAAQ,EAAI,CACd,CACF,CACF,CAAC,EDx4BH,IAAME,GAA4BC,GAA4B,CAC5D,GAAM,CAACC,EAAaC,CAAc,KAAI,aAAS,IAAM,CAAC,CAAC,GAAAC,QAAK,aAAa,EAEnEC,KAAa,gBAAY,MAAOC,GAAmB,CACvD,MAAMC,GAAeD,CAAC,EACtBH,EAAe,EAAI,CACrB,EAAG,CAAC,CAAC,EAEL,uBAAU,IAAM,CACT,GAAAC,QAAK,eACRC,EAAWJ,CAAU,CAEzB,EAAG,CAAC,CAAC,EAEEC,CACT,EAEOM,GAAQR,GtENf,IAAAS,GAAoB,kBAgBdC,GAAc,CAAC,CACnB,WAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,oBAAAC,EACA,0BAAAC,EACA,kBAAAC,EACA,kBAAAC,CACF,IAAwB,CACtB,GAAM,CAAE,MAAAC,EAAO,UAAAC,EAAW,YAAAC,EAAa,eAAAC,EAAgB,aAAAC,CAAa,EAAIC,GAAU,EAC5EC,EAAcC,GAAyBlB,CAAU,KAEvD,aAAU,IAAM,CACVQ,IACF,SAAS,MAAQA,GAEnBO,EACE,OAAOb,GAAuB,SAC1B,IAAI,gBAAgBA,CAAkB,EACtCA,CACN,CACF,EAAG,CAAC,CAAC,EAEL,IAAMiB,KAAgB,eAAaC,GAAe,CAChDC,EAAO,QAAQ,cAAeD,CAAE,EAC5BV,GACFA,EAAkBU,CAAE,CAExB,EAAG,CAAC,CAAC,EAECE,KAAe,eAAY,IAAM,CACrC,IAAMC,EAAY,IAAI,gBAAgBV,EAAY,YAAY,EAC9DU,EAAU,OAAO,OAAO,EACxBT,EAAeS,EAAU,SAAS,CAAC,CACrC,EAAG,CAACV,EAAY,YAAY,CAAC,EAEvBW,KAAc,WAAQ,IAAMX,EAAY,aAAa,IAAI,OAAO,EAAG,CAACD,CAAS,CAAC,EAEpF,OAAKK,EAGH,EAAAQ,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACC,GAAA,KACE,CAACrB,GACA,EAAAoB,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACI,GAAA,IAAa,CAChB,CACF,EAEDL,GACC,EAAAC,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACK,GAAA,CAAW,QAASR,GAAeE,CAAY,CAClD,CACF,EAED,CAACjB,GACA,EAAAkB,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACM,GAAA,CAAO,WAAY9B,EAAY,WAAYD,EAAY,CAC1D,CACF,EAEF,EAAAyB,QAAA,cAACE,GAAA,CAAY,OAAM,GAAC,UAAS,GAAC,UAAU,wCACtC,EAAAF,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAACO,GAAA,KACC,EAAAP,QAAA,gBAAAA,QAAA,cACGd,GACC,EAAAc,QAAA,cAACQ,GAAA,CAAS,SAAS,QAAQ,KAAI,GAAC,QAAQ,4BAAwB,gCAEhE,EAED,CAACtB,GAASC,GAAaA,EAAU,OAAS,GACzC,EAAAa,QAAA,cAACS,GAAA,CACC,UAAW/B,EACX,UAAWC,EACX,YAAae,EACb,UAAWP,EACX,iBAAkBN,EAClB,kBAAmBG,EACrB,EAED,CAACE,GAASC,GAAaA,EAAU,SAAW,GAC3C,EAAAa,QAAA,cAACQ,GAAA,CACC,SAAS,UACT,KAAI,GACJ,QAAS,GAAAE,QAAQ,EAAE,wCAAwC,GAAK,QAE/D,GAAAA,QAAQ,EAAE,qCAAqC,CAClD,CAEJ,CACF,CACF,CACF,CACF,EACA,EAAAV,QAAA,cAACW,GAAA,CAAc,GAAIC,GAAgB,cAAe,CACpD,EA5DuB,IA8D3B,EAEOC,GAAQvC,GwE1If,IAAAwC,EAAyE,gBACzEC,GAAyB,6BCDzB,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,EAMdC,GAAO,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAMTE,EAAK,EAAG,CAAC;AAAA;AAAA,EAIdC,GAAQ,GAAAH,QAAO;AAAA;AAAA,EAIfI,GAAQ,GAAAJ,QAAO;AAAA;ECxB5B,IAAAK,GAAmB,4BAENC,GAAQ,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,2DACb,EAAE;AAAA;AAAA,EAIWC,GAAW,GAAAD,QAAO;AAAA,WACnBE,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;EFHvD,IAAAC,GAA+B,mBAOzBC,GAAa,CAAC,CAAE,MAAAC,EAAO,SAAAC,CAAS,IAAuB,CAC3D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KAAeL,EAAE,aAAa,CAAE,CACnC,EACA,GAAAC,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KACEC,EAAgBV,CAAK,EAAE,IAAEE,EAAE,kBAAkB,CAChD,CACF,CACF,EACCD,IAAa,QACZ,GAAAE,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,IAAM,EACP,GAAAH,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACQ,GAAA,KACED,EAAgBV,EAAQC,CAAQ,EAAE,IAAEC,EAAE,kBAAkB,CAC3D,CACF,CACF,CAEJ,CAEJ,EAEOU,GAAQb,GGzCf,IAAAc,GAAuB,gBCAvB,IAAAC,GAA4B,4BAQrB,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA,eAEZC,EAAK,GAAG,CAAC;AAAA,gBACRA,EAAK,CAAC,CAAC;AAAA;AAAA,IAEnB,CAAC,CAAE,KAAAC,CAAK,IACRA,GACA;AAAA,mBACeD,EAAK,EAAE,CAAC;AAAA,KACtB;EDNL,IAAME,GAAU,CAAC,CAAE,KAAAC,EAAM,OAAAC,EAAQ,IAAAC,EAAK,KAAAC,CAAK,IAAgB,CACzD,IAAIC,EAAaJ,EAEjB,OAAIC,IACFG,EAAa,GAAGH,CAAM,OAGjB,iBAACI,GAAA,CAAK,IAAKL,EAAM,OAAQI,EAAY,IAAKF,EAAK,KAAMC,EAAM,CACpE,EAEOG,GAAQP,GErBf,IAAAQ,GAAkB,gBCAlB,IAAAC,GAA4B,4BAWrB,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAUZC,EAAK,CAAC,CAAC;AAAA,qBACJA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAYRA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,cAKbA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBjB,CAAC,CAAE,MAAAC,CAAM,IACTA,GACA;AAAA;AAAA,KAEC;EDnDL,IAAMC,GAAU,CAAC,CAAE,SAAAC,EAAU,MAAAC,EAAO,wBAAAC,CAAwB,IAC1D,GAAAC,QAAA,cAACC,GAAA,CAAQ,MAAOH,EAAO,wBAAyBC,GAC7CF,CACH,EAGKK,EAAQN,GEdf,IAAAO,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMzBC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,EAK3BC,GAAQ,GAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYfG,GAAS,GAAAH,QAAO;AAAA;AAAA;AAAA,gBAGbI,EAAK,CAAC,CAAC;AAAA;AAAA,IAElBH,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,kBACtBG,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZC,GAAgB,GAAAL,QAAO;AAAA;AAAA,mBAEjBI,EAAK,GAAG,CAAC;AAAA,EAGfE,GAAO,GAAAN,QAAO;AAAA;AAAA;AAAA,EAKdO,GAAO,GAAAP,QAAO,IAAI,MAAM,KAAO,CAC1C,UAAW,gCACb,EAAE,IAEWQ,GAAO,GAAAR,QAAO,MCnD3B,IAAAS,GAAkB,gBCAlB,IAAAC,GAAmB,4BAQZ,IAAMC,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,OACR,EAAE;AAAA;AAAA,WAESC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,sBAEIC,GAAkB,OAAOA,EAAM,KAAK,GAAG;AAAA;AAAA;AAAA;AAAA,sBAIvCA,GAAUA,EAAM,MAAM,MAAM,MAAM;EDVzD,IAAMC,GAAS,CAAC,CAAE,MAAAC,EAAO,IAAAC,CAAI,IAAa,GAAAC,QAAA,cAACC,GAAA,CAAQ,MAAOH,EAAO,aAAYC,EAAK,EAE3EG,GAAQL,GFCf,IAAMM,GAAa,CAAC,CAAE,SAAAC,EAAU,OAAAC,EAAQ,OAAAC,EAAQ,KAAAC,CAAK,IACnD,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAAON,CAAS,EAChBC,GACC,GAAAG,QAAA,cAACG,GAAA,KACEL,GACC,GAAAE,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAO,MAAOP,EAAQ,IAAK,GAAGD,CAAM,UAAW,CAClD,EAEF,GAAAG,QAAA,cAACM,GAAA,KACC,GAAAN,QAAA,cAACO,GAAA,KAAMV,CAAO,EACbE,GAAQ,GAAAC,QAAA,cAACQ,GAAA,KAAMT,CAAK,CACvB,CACF,CAEJ,EAGKU,GAAQd,GI/Bf,IAAAe,GAA6C,gBCA7C,IAAAC,GAA4B,4BAIrB,IAAMC,GAAU,GAAAC,QAAO,MAMjBC,GAAS,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAWfE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAIjB,CAAC,CAAE,SAAAC,CAAS,IACZA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMC;AAAA,EAGQC,GAAS,GAAAJ,QAAO;AAAA;AAAA;AAAA,gBAGbE,EAAK,CAAC,CAAC;ED5BvB,IAAMG,GAAgB,CAAC,CAAE,SAAAC,EAAU,YAAAC,EAAa,QAAAC,CAAQ,IAAa,CACnE,GAAM,CAACC,EAAQC,CAAS,KAAI,aAAS,EAAK,EACpCC,KAAW,gBAAY,IAAM,CACjCD,EAAU,EAAI,EACVF,GACFA,EAAQ,CAEZ,EAAG,CAAC,CAAC,EAUL,OACE,GAAAI,QAAA,cAACC,GAAA,CAAQ,IATIC,GAA+B,EAC1BA,GAAK,cAAgB,GAEvB,KACdJ,EAAU,EAAI,CAElB,GAII,GAAAE,QAAA,cAACG,GAAA,CAAO,SAAUN,GAASH,CAAS,EACnC,CAACG,GACA,GAAAG,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAY,QAASN,EAAU,MAAOJ,GACrC,GAAAK,QAAA,cAACM,EAAA,KAAeX,CAAY,CAC9B,CACF,CAEJ,CAEJ,EAEOY,GAAQd,GE1Cf,IAAAe,EAA8D,gBAC9DC,GAA4B,sBAC5BC,GAA2B,qCCF3B,IAAAC,GAA4B,4BAM5B,IAAMC,GAAgB,GAETC,GAAU,GAAAC,QAAO;AAAA,IACzBC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,MACpCF,EAAS;AAAA,qBACMG,EAAK,EAAE,CAAC;AAAA,sBACPA,EAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA,IAIzBD,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,MACpCF,EAAS;AAAA,qBACMG,EAAK,EAAE,CAAC;AAAA,sBACPA,EAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA,IAIzBD,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,qBAEnBH,EAAa;AAAA;AAAA,EAIrBK,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKtBC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,0BACbA,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBhDG,GAAM,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,WAKfF,EAAa;AAAA,kBACNI,EAAK,CAAC,CAAC;AAAA;AAAA,IAEpBD,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAU5BC,EAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,EAMVG,GAAO,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUtBC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,0BACfA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAKlDK,GAAgB,GAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAe/BC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBASpBC,EAAK,CAAC,CAAC,UAAWD,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAS9DI,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQCE,GAAQ,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcfQ,GAAY,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY1BS,GAAQ,GAAAT,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKhBC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,EAK7BS,MAAY,GAAAV,SAAOS,EAAK;AAAA,UAC3BP,EAAK,CAAC,CAAC;AAAA,EAGJS,MAAa,GAAAX,SAAOS,EAAK;AAAA,WAC3BP,EAAK,CAAC,CAAC;AAAA,EAKLU,GAAW,GAAAZ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBlBa,GAAe,GAAAb,QAAO,GAAG,MAAM,KAAO,CACjD,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA,kBAIgBE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGrB,CAAC,CAAE,OAAAY,CAAO,IACVA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAWC;AAAA,EAGQC,MAAc,GAAAf,SAAOgB,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiChCC,GAAc,GAAAjB,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYrBkB,GAAqB,GAAAlB,QAAO;AAAA;AAAA,YAE7BE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,EAQNiB,GAAyB,GAAAnB,QAAO;AAAA;AAAA,YAEjCE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;ECzRnB,IAAAkB,GAAmB,4BAKZ,IAAMC,MAAY,GAAAC,SAAOC,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA,WAKhCC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,sBAEIC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA,WACzCA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECdhD,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMjBC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAIfC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,eAC3BD,EAAK,CAAC,CAAC;AAAA;AAAA,EAITE,GAAU,GAAAH,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUWI,GAAO,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA,kBAITC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZI,GAAM,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA,6BAIGC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAI/BC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,+BACXD,EAAK,CAAC,CAAC;AAAA;AAAA,EAIzBK,MAAW,GAAAN,SAAOO,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA,SAKjCN,EAAK,CAAC,CAAC;AAAA,WACLA,EAAK,CAAC,CAAC;AAAA,WACPA,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA,sBAEIC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAa5BA,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgB5DA,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,WAC/BD,EAAK,CAAC,CAAC;AAAA,aACLA,EAAK,CAAC,CAAC;AAAA;EC9FpB,IAAAO,GAAkB,gBCAlB,IAAAC,GAAkB,gBCAX,IAAMC,GAAcC,GAAwB,CACjD,IAAMC,EAAS,UACTC,EAAQF,EAAI,MAAMC,CAAM,EAC9B,OAAOC,GAASA,EAAM,CAAC,EAAE,OAAS,EAAIA,EAAM,CAAC,EAAI,EACnD,EAEaC,GAAgBH,GAAwB,CACnD,IAAMC,EAAS,8EACTC,EAAQF,EAAI,MAAMC,CAAM,EAC9B,OAAOC,GAASA,EAAM,CAAC,EAAE,SAAW,GAAKA,EAAM,CAAC,EAAI,EACtD,EAEME,GAAc,8BACPC,GAAuBL,GAAgB,CAClD,IAAMM,EAAKH,GAAaH,CAAG,EAC3B,GAAKM,EAGL,MAAO,CACL,cAAe,GAAGF,EAAW,GAAGE,CAAE,qBAClC,UAAW,GAAGF,EAAW,GAAGE,CAAE,iBAC9B,UAAW,GAAGF,EAAW,GAAGE,CAAE,gBAChC,CACF,EAEaC,GAAc,CACzB,EACAC,IACG,CAEDA,GAAW,SAAW,GACtB,EAAE,cAAc,MAAQA,EAAU,CAAC,GACnC,EAAE,cAAc,eAAiB,KACjC,EAAE,cAAc,gBAAkB,KAElC,EAAE,cAAc,IAAMA,EAAU,CAAC,EAErC,EAEaC,GAAe,CAC1B,EACAD,IACG,CACCA,GAAW,SAAW,IACxB,EAAE,cAAc,IAAMA,EAAU,CAAC,EAErC,EC9CA,IAAAE,GAAmB,4BAUNC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,YAGjBC,GAAWA,EAAM,UAAY,OAAS,CAAE;AAAA,oBAChCA,GAAmBA,EAAM,MAAQA,EAAM,MAAQ,QAAS;AAAA,EAGhEC,GAAS,GAAAF,QAAO,OAAO,MAAM,KAAO,CAC/C,MAAO,OACP,OAAQ,OACR,gBAAiB,GACjB,YAAa,GACf,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;EFZF,IAAMG,GAAgB,CAAC,CAAE,IAAAC,EAAK,SAAAC,CAAS,IACrC,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,IAAK,iCAAiCC,GAAaL,CAAG,CAAC,yBACrDC,EAAW,cAAgB,EAC7B,GACF,CACF,EAGKK,GAAQP,GGpBf,IAAAQ,GAAkB,gBAUlB,IAAMC,GAAc,CAAC,CAAE,IAAAC,EAAK,SAAAC,CAAS,IACnC,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,IAAK,kCAAkCC,GAAWL,CAAG,CAAC,IACpDC,EAAW,cAAgB,EAC7B,sBACF,CACF,EAGKK,GAAQP,GCpBf,IAAAQ,GAAkB,gBCClB,IAAAC,GAAmB,4BASbC,GAAQ,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,gBAIL,CAAC,CAAE,MAAAC,CAAM,IAAOA,EAAQ,UAAY,OAAQ;AAAA,EAGrDC,GAAQH,GDLf,IAAMI,GAAe,CAAC,CAAE,IAAAC,EAAK,SAAAC,EAAU,MAAAC,EAAO,MAAAC,EAAQ,SAAU,UAAAC,CAAU,IAEtE,GAAAC,QAAA,cAACC,GAAA,CAAQ,MAAOH,EAAO,UAAWC,GAChC,GAAAC,QAAA,cAACE,GAAA,CACC,IAAKP,EACL,MAAOE,EACP,QAAQ,WACR,SAAUD,EACV,MAAM,OACN,OAAO,OACP,IAAKD,EACP,CACF,EAGGQ,GAAQT,GLrBf,IAAMU,GAAU,CAAC,cAAe,UAAU,EACpCC,GAAkBC,GACtBF,GAAQ,KAAMG,GAA0BD,EAAI,QAAQC,CAAI,GAAK,CAAC,EAE1DC,GAAS,CAAC,WAAW,EACrBC,GAAgBH,GACpBE,GAAO,KAAMD,GAA0BD,EAAI,QAAQC,CAAI,GAAK,CAAC,EAQzDG,GAAc,CAAC,CAAE,IAAAJ,EAAK,SAAAK,EAAW,GAAO,SAAAC,EAAW,EAAK,IACvDN,EAEDD,GAAeC,CAAG,EAAU,GAAAO,QAAA,cAACC,GAAA,CAAc,IAAKR,EAAK,SAAUK,EAAU,EAEzEF,GAAaH,CAAG,EAAU,GAAAO,QAAA,cAACE,GAAA,CAAY,IAAKT,EAAK,SAAUK,EAAU,EAElE,GAAAE,QAAA,cAACG,GAAA,CAAa,MAAM,SAAS,SAAUJ,EAAU,IAAKN,EAAK,EANjD,KASZW,GAAQP,GO9Bf,IAAAQ,GAAkB,gBCAlB,IAAAC,GAA2D,gBCA3D,IAAAC,GAAmB,4BAInB,IAAMC,GAAcC,EAAK,CAAC,EACpBC,GAAiBD,EAAK,CAAC,EAEhBE,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOLC,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMlDL,EAAW;AAAA,cACVA,EAAW;AAAA;AAAA,cAEXC,EAAK,CAAC,CAAC;AAAA,YACTA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,wBAIMI,GAAUA,EAAM,MAAM,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAuBnDJ,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAOCA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aASdC,EAAc;AAAA,cACbA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA,aAKdG,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAiCrCH,EAAc;AAAA,cACbA,EAAc;AAAA,wBACHG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,aACjDA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAsDrCH,EAAc;AAAA,cACbA,EAAc;AAAA;AAAA;AAAA;AAAA,aAIdG,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAyBrBA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAWnDJ,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,eAINA,EAAK,IAAI,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,wBAGXI,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA,aACjDA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKvBA,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAgCxCA,GAAUA,EAAM,MAAM,MAAM,SAAS;AAAA;EDpP9D,IAAMC,MAAY,SAAK,IAAM,OAAO,2BAA2B,CAAC,EAU1DC,GAAe,CAAC,CAAE,GAAAC,EAAI,IAAAC,EAAK,QAAAC,EAAS,SAAAC,EAAU,QAAAC,CAAQ,IAAiB,CAC3E,GAAM,CAACC,CAAM,KAAI,aAAS,KAAK,MAAM,IAAY,KAAK,OAAO,EAAI,GAAS,CAAC,EAC3E,uBAAU,IAAM,CACd,WAAW,IAAM,CACf,GAAID,EAAS,CACX,IAAME,EAAW,SAAS,cAAc,mBAAmB,EACvDA,GAAUA,EAAS,iBAAiB,QAASF,CAAO,CAC1D,CACF,EAAG,GAAG,CACR,EAAG,CAAC,CAAC,EAGH,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAAC,aAAS,SAAU,GAAAA,QAAA,cAACE,GAAA,IAAO,GAC1B,GAAAF,QAAA,cAACT,GAAA,CACC,GAAI,KAAKE,CAAE,IAAIK,CAAM,GACrB,SAAUJ,EACV,KAAM,IACN,SAAUE,EACV,QAAO,GACP,MAAO,OACP,QAASD,EACX,CACF,CACF,CAEJ,EAEOQ,GAAQX,GDrCf,IAAMY,GAAiB,CAAC,CAAE,IAAAC,CAAI,IAAiB,GAAAC,QAAA,cAACC,GAAA,CAAa,GAAIF,EAAK,IAAKA,EAAK,QAASA,EAAK,EAEvFG,GAAQJ,GGTf,IAAAK,GAA6C,gBCA7C,IAAAC,GAAkB,gBAUlB,IAAMC,GAAc,CAAC,CAAE,KAAAC,EAAM,QAAAC,CAAQ,IACnC,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAgB,QAASH,EAAS,MAAOD,GACxC,GAAAE,QAAA,cAACG,EAAA,KAAeL,CAAK,CACvB,CACF,EAGKM,GAAQP,GClBf,IAAAQ,GAA2E,gBAErEC,GAAwB,CAACC,EAAoBC,EAAeC,IAA2B,CAC3F,IAAMC,GAASH,EAAaC,GAASC,EACrC,OAAIC,EAAQ,EACHA,EAAQD,EAGVC,CACT,EAQMC,GAAW,CAAC,CAAE,SAAAC,CAAS,IAAiB,CAC5C,IAAML,KAAa,WAAO,CAAC,EACrBM,KAAkB,WAAe,EACjCC,KAAM,WAAO,CAAC,EAEd,CAACC,EAAOC,CAAQ,KAAI,aAAS,CACjC,QAAS,EACT,iBAAkB,EACpB,CAAC,KAED,cAAU,KACR,SAAS,iBAAiB,UAAWC,CAAQ,EAEtC,IAAM,CACX,OAAO,SAAS,oBAAoB,UAAWA,CAAQ,EACvD,OAAO,SAAS,KAAK,oBAAoB,YAAaC,CAAS,EAC/D,OAAO,SAAS,KAAK,oBAAoB,UAAWC,CAAO,CAC7D,GACC,CAAC,CAAC,EAEL,IAAMC,EAAaC,GAAyB,CAC1C,IAAMC,EAAa,OAAOT,EAAgB,SAAY,SAEtD,GADAQ,EAAM,eAAe,EACjBC,EACF,OAGF,IAAMC,EAAa,YAAS,MAAMX,CAAQ,EAEpC,CAAE,YAAAY,CAAY,EAAIH,EAAM,cACxBI,EAAUC,EAAyBL,CAAK,EACxCP,EAAMU,EACNG,GAASF,GAAWZ,EAAgB,SAAW,GAC/CL,GAAQ,KAAK,MAAOmB,GAASb,EAAOS,CAAU,EACpDK,EAAgBtB,GAAsBC,EAAW,QAASC,GAAOe,CAAU,CAAC,CAC9E,EAEML,EAAaG,GAAyB,CAC1C,IAAMC,EAAa,OAAOT,EAAgB,SAAY,SAEtD,GADAQ,EAAM,eAAe,EACjBC,GAAc,CAACP,EAAM,iBAAkB,OAE3C,IAAMQ,EAAa,YAAS,MAAMX,CAAQ,EAGpCe,EADUD,EAAyBL,CAAK,GACpBR,EAAgB,SAAW,GAC/CL,EAAQ,KAAK,MAAOmB,EAASb,EAAI,QAAWS,CAAU,EAC5DK,EAAgBtB,GAAsBC,EAAW,QAASC,EAAOe,CAAU,CAAC,CAC9E,EAEMJ,EAAU,IAAM,CACpB,OAAO,SAAS,KAAK,oBAAoB,YAAaD,CAAS,EAC/D,OAAO,SAAS,KAAK,oBAAoB,UAAWC,CAAO,EAE3DN,EAAgB,QAAU,OAC1BN,EAAW,QAAU,CACvB,EAEMsB,EAAcR,GAAyB,CAC3CA,EAAM,eAAe,EACrBR,EAAgB,QAAUa,EAAyBL,CAAK,EACxDd,EAAW,QAAUQ,EAAM,QAE3B,GAAM,CAAE,YAAAS,CAAY,EAAIH,EAAM,cAC9BP,EAAI,QAAUU,EAEd,OAAO,SAAS,KAAK,iBAAiB,YAAaN,CAAS,EAC5D,OAAO,SAAS,KAAK,iBAAiB,UAAWC,CAAO,CAC1D,EAEMF,EAAYI,GAAyB,CACzCA,EAAM,eAAe,EACrBR,EAAgB,QAAU,OAC1BN,EAAW,QAAU,CACvB,EAEMuB,EAAe,IAAM,CACrBf,EAAM,kBAAkBC,EAAS,CAAE,GAAGD,EAAO,iBAAkB,EAAM,CAAC,CAC5E,EAEMgB,EAAe,IAAM,CACpBhB,EAAM,kBAAkBC,EAAS,CAAE,GAAGD,EAAO,iBAAkB,EAAK,CAAC,CAC5E,EAEMa,EAAmBI,GAAoB,CACvCA,IAAYjB,EAAM,SACpBC,EAAS,CAAE,GAAGD,EAAO,QAAAiB,CAAQ,CAAC,CAElC,EAEMN,EAA4BL,GAAiC,CACjE,GAAM,CAAE,QAAAY,CAAQ,EAAIZ,EAAM,KAAK,QAAQ,OAAO,IAAM,EAAIA,EAAM,eAAe,CAAC,EAAIA,EAC5E,CAAE,WAAAa,CAAW,EAAIb,EAAM,cAC7B,OAAOY,EAAUC,CACnB,EAEA,OACE,GAAAC,QAAA,cAAC,OACC,aAAcN,EACd,YAAaT,EACb,WAAYH,EACZ,YAAaY,EACb,YAAaT,EACb,aAAcU,EACd,aAAcC,GAEb,YAAS,IAAInB,EAAU,CAACwB,EAAOC,OAC9B,iBAAaD,EAA6B,CACxC,MAAO,CACL,MAAO,OACP,QAASrB,EAAM,UAAYsB,EAAI,QAAU,MAC3C,CACF,CAAC,CACH,CACF,CAEJ,EAEOC,GAAQ3B,GFlIf,IAAA4B,GAA+B,mBAMzBC,GAAqB,CAAC,CAAE,KAAAC,CAAK,IAAiB,CAClD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EAEtCC,KAAU,gBAAY,IAAMD,EAAW,EAAI,EAAG,CAAC,CAAC,EAEtD,OAAKD,EAUH,GAAAG,QAAA,cAACC,GAAA,KACEL,EAAK,IAAI,CAACM,EAAOC,IAChB,GAAAH,QAAA,cAACI,GAAA,CAAI,IAAKF,EAAO,IAAKA,EAAO,IAAK,EAAE,oBAAqB,CAAE,MAAOC,EAAI,CAAE,CAAC,GAAK,GAAI,CACnF,CACH,EAZE,GAAAH,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACI,GAAA,CAAI,IAAKR,EAAK,CAAC,EAAG,IAAI,MAAM,EAC7B,GAAAI,QAAA,cAACM,GAAA,CAAY,KAAM,EAAE,uBAAuB,EAAG,QAASP,EAAS,CACnE,CAWN,EAEOQ,GAAQZ,GZ3Bf,IAAAa,GAA+B,mBAQzBC,GAAW,CAAC,CAAE,MAAAC,EAAO,MAAAC,EAAO,QAAAC,CAAQ,IAAqB,CAC7D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAASC,GAA+B,CACxCA,GACF,WAAW,IAAM,CACfA,EAAI,eAAe,CACrB,EAAG,GAAG,CAEV,EAQA,OACE,GAAAC,QAAA,cAACC,GAAA,CAAQ,IAAMF,GAAQA,GAAK,MAAM,EAAG,UAPpBG,GAA2C,CACxDA,EAAE,UAAY,IAChBN,EAAQ,CAEZ,EAG6D,SAAU,GACnE,GAAAI,QAAA,cAACG,GAAA,CAAQ,QAASP,EAAS,cAAW,GAAC,EACtCD,EAAM,IAAI,CAACS,EAAGC,IACb,GAAAL,QAAA,cAACM,GAAA,CAAK,IAAKD,EAAG,IAAKX,IAAUW,EAAIP,EAAQ,QACtCM,EAAE,OAAS,SACV,GAAAJ,QAAA,cAACO,GAAA,CACC,GAAI,kBAAkBF,CAAC,GACvB,IAAKD,EAAE,MAAM,CAAC,EAAE,IAChB,IAAKP,EAAE,oBAAqB,CAAE,MAAOQ,EAAI,CAAE,CAAC,GAAK,GACnD,EAEDD,EAAE,OAAS,cAAgB,GAAAJ,QAAA,cAACQ,GAAA,CAAmB,KAAMJ,EAAE,MAAM,IAAKK,GAAMA,EAAE,GAAG,EAAG,EAChFL,EAAE,OAAS,UAAY,GAAAJ,QAAA,cAACU,GAAA,CAAe,IAAKN,EAAE,MAAM,CAAC,EAAE,IAAK,EAC5DA,EAAE,OAAS,YAAc,GAAAJ,QAAA,cAACW,GAAA,CAAsB,IAAKP,EAAE,MAAM,CAAC,EAAE,IAAK,CACxE,CACD,EACD,GAAAJ,QAAA,cAACY,GAAA,CAAS,QAAShB,EAAS,MAAOC,EAAE,cAAc,GAAK,IACtD,GAAAG,QAAA,cAACa,GAAA,CAAW,MAAK,GAAC,CACpB,CACF,CAEJ,EAEOC,GAAQrB,GexDf,IAAAsB,GAA6C,gBCA7C,IAAAC,GAAoC,WCApC,IAAAC,GAAoC,WCApC,IAAAC,GAAiD,WAE3CC,GAAgD,CAAC,EAEjDC,GAAsBC,GAAiBF,KAAQE,CAAG,GAAW,OAC7DC,GAAkB,CAAID,EAAaE,IAAa,CACpDJ,GAAME,CAAG,EAAIE,CACf,EAQIC,GAAkE,CAAC,EACjEC,GAAoBC,GAAgB,CAAC,CAACF,GAAeE,CAAG,EACxDC,GAAoB,CAACD,EAAaE,IAA0C,CAChFJ,GAAiB,CACf,GAAGA,GACH,CAACE,CAAG,EAAGE,CACT,CACF,EACMC,GAAuBH,GAAgB,CAC3C,OAAOF,GAAeE,CAAG,CAC3B,EAQMI,GAAW,CACfC,EACAC,EACAC,EACAC,IACgB,CAChB,GAAM,CAACC,EAAMC,CAAO,KAAI,aAAwB,EAC1C,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EACtC,CAACC,EAAOC,CAAQ,KAAI,aAAS,EAAK,EAElCC,KAAU,gBAAY,SAAY,CACtC,IAAMpB,EAAMU,EAAK,SAAS,EACpBW,EAAStB,GAAmBC,CAAG,EAErC,GADAmB,EAAS,EAAK,EACVE,EAAQ,CACVN,EAAQM,CAAM,EACd,MACF,CACAJ,EAAW,EAAI,EACf,GAAI,CAEF,IAAMK,EADeT,GAAgBT,GAAiBJ,CAAG,EAC1BG,GAAeH,CAAG,EAAI,MAAMU,EAAMC,CAAO,EACpEE,GACFP,GAAkBN,EAAKsB,CAAO,EAGhC,IAAMC,EAAS,MAAMD,EACrB,GAAIC,EAAO,GAAI,CACb,IAAMC,EAAO,MAAMD,EAAO,MAAM,EAAE,KAAK,EACvCtB,GAAgBD,EAAKwB,CAAI,EACzBT,EAAQS,CAAI,CACd,CACF,MAAY,CACVL,EAAS,EAAI,CACf,QAAE,CACAF,EAAW,EAAK,EAChBT,GAAoBR,CAAG,CACzB,CAEF,EAAG,CAACU,EAAMC,CAAO,CAAC,EAElB,uBAAU,IAAM,CACTC,GACHQ,EAAQ,CAEZ,EAAG,CAACV,EAAME,CAAI,CAAC,EAER,CACL,QAAAI,EACA,KAAAF,EACA,MAAAI,CACF,CACF,EAEOO,GAAQhB,GD/Ef,IAAMiB,GAAoB,CAACC,EAAaC,IAAoB,CAC1D,GAAM,CAACC,EAAWC,CAAY,KAAI,aAAiB,EAC7C,CAAE,KAAAC,CAAK,EAAIC,GACf,iCAAiCL,CAAE,QACnC,CAAC,EACD,CAACA,GAAM,CAAC,CAACE,EACT,EACF,EAEA,uBAAU,IAAM,CACVE,IAAO,CAAC,IACNH,GAASG,EAAK,CAAC,EAAE,gBACnBD,EAAaC,EAAK,CAAC,EAAE,eAAe,EAC3BA,EAAK,CAAC,EAAE,iBACjBD,EAAaC,EAAK,CAAC,EAAE,eAAe,EAG1C,EAAG,CAACA,CAAI,CAAC,EAEFF,CACT,EAEOI,GAAQP,GD1Bf,IAAMQ,GAAe,CAACC,EAAqBC,IAAoB,CAC7D,GAAID,GAAK,YAAY,EAAE,SAAS,MAAM,EAAG,OAEzC,GAAM,CAACE,EAAWC,CAAY,KAAI,aAAmB,EAC/CC,EAAUJ,EAAMK,GAAWL,CAAG,EAAI,OAClCM,EAAiBC,GAAkBH,EAASH,CAAK,EAEvD,uBAAU,IAAM,CACd,GAAID,EAAK,CACP,IAAMQ,EAAmBC,GAAoBT,CAAG,EAC5CQ,GAEAL,EADEF,EACW,CAACO,EAAiB,SAAS,EAE3B,CAACA,EAAiB,cAAeA,EAAiB,SAAS,CAF/B,CAK/C,CACF,EAAG,CAACR,CAAG,CAAC,EAEDM,EAAiB,CAACA,CAAc,EAAIJ,CAC7C,EAEOQ,GAAQX,GG3Bf,IAAAY,GAAuB,gBCAvB,IAAAC,GAAmB,4BAQZ,IAAMC,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcGC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,eACzBC,EAAK,CAAC,CAAC;AAAA;AAAA,EAITC,GAAU,GAAAH,QAAO,IAAI,MAAM,KAAO,CAC7C,cAAe,OACf,KAAM,QACR,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASGC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,iBACzBG,EAAM;AAAA;AAAA;AAAA,IAGlBH,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,iBACvBG,EAAM;AAAA;AAAA,EAIVC,GAAS,GAAAL,QAAO,QAAQ,MAAM,KAAO,CAChD,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA,sBAGqBC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQhDA,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,iBAGzBK,EAAW;AAAA;AAAA;AAAA,IAGvBL,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,4BACZC,EAAK,CAAC,CAAC;AAAA,iBAClBE,EAAM,gBAAgBE,EAAW;AAAA;AAAA,EAIrCC,GAAU,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA,EAMjBQ,GAAS,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA,aAIhBE,EAAK,CAAC,CAAC;AAAA;AAAA,EAIPO,GAAU,GAAAT,QAAO;AAAA;AAAA;AAAA,IAG1BU,EAAE;AAAA;AAAA;AAAA,EAKOC,GAAQ,GAAAX,QAAO;AAAA;AAAA,YAEhBE,EAAK,EAAE,CAAC;AAAA,kBACFA,EAAK,CAAC,CAAC;AAAA,EAGZU,MAAW,GAAAZ,SAAOa,CAAW;AAAA;AAAA,aAE7BX,EAAK,CAAC,CAAC;AAAA,EAGPY,GAAO,GAAAd,QAAO;AAAA,aACdE,EAAK,CAAC,CAAC;AAAA,EAGPa,GAAQ,GAAAf,QAAO;AAAA;AAAA,uBAELE,EAAK,CAAC,CAAC;AAAA,iBACbA,EAAK,EAAE,CAAC;AAAA,mBACNA,EAAK,CAAC,CAAC;AAAA,EAGbc,GAAe,GAAAhB,QAAO;AAAA,sBACZC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,YAC7CC,EAAK,EAAE,CAAC;AAAA,gBACJA,EAAK,CAAC,CAAC;AAAA,aACVA,EAAK,CAAC,CAAC;AAAA,EAGPe,GAAmB,GAAAjB,QAAO,MD7GvC,IAAAkB,GAA+B,mBASzBC,GAAQ,CAAC,CAAE,GAAAC,EAAI,MAAAC,EAAO,QAAAC,EAAS,SAAAC,CAAS,IAAkB,CAC9D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,iBAACC,GAAA,CAAO,GAAIL,GAAMM,GAAgB,eAChC,iBAACC,GAAA,CAAQ,QAAUC,GAAMA,EAAE,gBAAgB,GACzC,iBAACC,GAAA,CAAQ,QAASP,EAAS,MAAOE,EAAE,kBAAkB,GAAK,GAAI,EAC/D,iBAACM,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,KACC,iBAACC,GAAA,CAAG,SAAQ,IAAEb,CAAM,CACtB,EACA,iBAACc,GAAA,KACC,iBAACC,GAAA,CAAS,QAASd,EAAS,MAAOE,EAAE,kBAAkB,GAAK,IAC1D,iBAACa,GAAA,CAAW,MAAK,GAAC,CACpB,CACF,CACF,EACA,iBAACC,GAAA,KAAMf,CAAS,CAClB,CACF,CACF,CACF,CAEJ,EAEOgB,EAAQpB,GJ3Cf,IAAAqB,GAA+B,mBAQzBC,GAAe,CAAC,CAAE,IAAAC,EAAK,MAAAC,CAAM,IAAoB,CACrD,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,aAAiB,EACrCC,EAAYC,GAAaN,CAAG,EAE5BO,EAAWC,GAAuD,CACtEA,EAAE,gBAAgB,EAClBJ,EAASJ,CAAG,CACd,EAEMS,EAAgBD,GAAwE,CAC5FA,EAAE,gBAAgB,EAClBJ,EAAS,MAAS,CACpB,EAEMM,KAAU,gBACbF,GAAqDG,GAAaH,EAAGH,CAAS,EAC/E,CAACA,CAAS,CACZ,EAEMO,KAAS,gBACZJ,GAAqDK,GAAYL,EAAGH,CAAS,EAC9E,CAACA,CAAS,CACZ,EAEMS,EAAcd,EAAI,YAAY,EAAE,SAAS,MAAM,EAErD,OAAIK,GAAW,QAAU,CAACS,EAEtB,GAAAC,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,CACC,OAAQJ,EACR,IAAKP,EAAU,CAAC,EAChB,QAASK,EACT,IAAKR,EAAE,oBAAqB,CAAE,MAAOD,EAAQ,CAAE,CAAC,GAAK,GACvD,EACA,GAAAc,QAAA,cAACE,GAAA,CAAY,KAAMf,EAAE,iBAAiB,EAAG,QAASK,EAAS,EAC1DJ,GACC,GAAAY,QAAA,cAACG,EAAA,CAAM,MAAOhB,EAAE,aAAa,EAAG,QAASO,GACvC,GAAAM,QAAA,cAACI,GAAA,CAAY,IAAKhB,EAAO,CAC3B,CAEJ,EAIAW,EAEA,GAAAC,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACK,GAAA,CAAa,MAAM,SAAS,UAAS,GAAC,SAAU,GAAO,IAAKpB,EAAK,EAClE,GAAAe,QAAA,cAACE,GAAA,CAAY,KAAMf,EAAE,iBAAiB,EAAG,QAASK,EAAS,EAC1DJ,GACC,GAAAY,QAAA,cAACG,EAAA,CAAM,MAAOhB,EAAE,aAAa,EAAG,QAASO,GACvC,GAAAM,QAAA,cAACI,GAAA,CAAY,IAAKhB,EAAO,CAC3B,CAEJ,EAEG,IACT,EAEOkB,GAAQtB,GM9Ef,IAAAuB,GAAmC,gBAMnC,IAAAC,GAA+B,mBAOzBC,GAAkB,CAAC,CAAE,IAAAC,EAAK,MAAAC,CAAM,IAA4B,CAChE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAAYC,GAAaJ,CAAG,EAC5BK,KAAU,gBACbC,GAAqDC,GAAaD,EAAGH,CAAS,EAC/E,CAACA,CAAS,CACZ,EAEMK,KAAS,gBACZF,GAAqDG,GAAYH,EAAGH,CAAS,EAC9E,CAACA,CAAS,CACZ,EAEMO,EAAcV,GAAK,YAAY,EAAE,SAAS,MAAM,EAEtD,OAAIG,GAAW,QAAU,CAACO,EAEtB,GAAAC,QAAA,cAACC,GAAA,CACC,OAAQJ,EACR,IAAKL,EAAU,CAAC,EAChB,QAASE,EACT,IAAKH,EAAE,oBAAqB,CAAE,MAAOD,EAAQ,CAAE,CAAC,GAAK,GACvD,EAEAS,EAAoB,GAAAC,QAAA,cAACE,GAAA,CAAa,IAAKZ,EAAO,IAAKD,EAAK,MAAM,SAAS,EACpE,IACT,EAEOc,GAAQf,GCzCf,IAAAgB,GAAkB,gBAKlB,IAAAC,GAA+B,mBAEzBC,GAAe,CAAC,EAAoDC,IAAqB,CAC7F,EAAE,gBAAgB,EAClB,EAAE,eAAe,EACjBA,EAAK,CACP,EAUMC,GAAS,CAAC,CAAE,IAAAC,EAAK,QAAAC,EAAS,QAAAC,EAAS,oBAAAC,EAAqB,mBAAAC,CAAmB,IAAiB,CAChG,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,MAAI,CAACH,GAAY,CAACE,GAAsBF,EAEpC,GAAAI,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,CAAU,IAAKN,EAAS,IAAI,MAAM,EACnC,GAAAK,QAAA,cAACE,GAAA,CACC,KAAMH,EAAE,uBAAuB,EAC/B,QAAUI,GACRZ,GAAaY,EAAGN,CAAmB,EAEvC,CACF,EAGAC,GAAsBF,EAEtB,GAAAI,QAAA,cAACI,GAAA,CACC,GAAIV,EACJ,QAASA,EACT,IAAKA,EACL,SAAU,GACV,QAASG,EACX,EAGG,IACT,EAEOQ,GAAQZ,GClDf,IAAAa,GAAkB,gBAKlB,IAAAC,GAA+B,mBAEzBC,GAAe,CAAC,EAAoDC,IAAqB,CAC7F,EAAE,gBAAgB,EAClB,EAAE,eAAe,EACjBA,EAAK,CACP,EASMC,GAAa,CAAC,CAAE,KAAAC,EAAM,QAAAC,EAAS,oBAAAC,EAAqB,mBAAAC,CAAmB,IAAiB,CAC5F,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,MAAI,CAACH,GAAY,CAACE,GAAsBF,EAEpC,GAAAI,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,CAAM,IAAKN,EAAK,CAAC,EAAG,IAAI,MAAM,EAC/B,GAAAK,QAAA,cAACE,GAAA,CACC,KAAMH,EAAE,uBAAuB,EAC/B,QAAUI,GACRX,GAAaW,EAAGN,CAAmB,EAEvC,CACF,EAGAC,GAAsBF,EAEtB,GAAAI,QAAA,cAAC,OACC,QAAUG,GAAM,CACdA,EAAE,gBAAgB,EAClBA,EAAE,eAAe,CACnB,GAEA,GAAAH,QAAA,cAACI,GAAA,KACET,EAAK,IAAI,CAACU,EAAOC,IAChB,GAAAN,QAAA,cAACC,GAAA,CAAM,IAAKI,EAAO,IAAKA,EAAO,IAAKN,EAAE,oBAAqB,CAAE,MAAOO,EAAI,CAAE,CAAC,GAAK,GAAI,CACrF,CACH,CACF,EAGG,IACT,EAEOC,GAAQb,G1BnBf,IAAAc,GAA+B,mBA/BzBC,GACJ,GAAAC,QACA,QAoCIC,GAAiB,CACrB,KAAM,GACN,OAAQ,GACR,SAAU,GACV,MAAO,IACP,aAAc,EACd,eAAgB,CAClB,EAEMC,GAAU,CAAC,CAAE,MAAAC,EAAO,iBAAAC,CAAiB,IAAoB,CAC7D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,KAAS,UAAwB,IAAI,EACrCC,KAAc,UAAyB,IAAI,EAC3CC,KAAa,UAAO,EAAK,EACzB,CAACC,EAAOC,CAAQ,KAAI,YAAS,CAAC,EAC9B,CAACC,EAAUC,CAAW,KAAI,YAAS,EAAK,EACxC,CAACC,EAAoBC,CAAqB,KAAI,YAAS,EAAK,EAE5DC,KAAe,eAAY,CAACC,EAAWC,IAAqB,CAChE,IAAMC,EAAUX,EAAY,SAAS,iBAAiB,IAAI,IAAIU,CAAQ,EAClEC,MACF,GAAAC,SAAeD,EAAS,CAAE,WAAY,YAAa,MAAO,UAAW,OAAQ,SAAU,CAAC,EAE1FR,EAASO,CAAQ,CACnB,EAAG,CAAC,CAAC,EAECG,KAAc,eAAY,IAAM,CAChCZ,EAAW,UACbA,EAAW,QAAU,GAEzB,EAAG,CAAC,CAAC,EACCa,KAAc,eAAY,IAAM,CAC/Bb,EAAW,UACdA,EAAW,QAAU,GAEzB,EAAG,CAAC,CAAC,EAECc,KAAU,eAAY,IAAM,CAChCC,EAAO,QAAQ,aAAa,EACxB,CAACf,EAAW,SAAW,CAACG,GAAcR,GAAO,QAC/CS,EAAY,EAAI,CAEpB,EAAG,CAACD,EAAUR,CAAK,CAAC,EAEdqB,KAAY,eAAY,IAAY,CACpC,CAAClB,GAAU,CAACA,EAAO,SAGvBA,EAAO,QAAQ,UAAU,CAC3B,EAAG,CAACA,CAAM,CAAC,EAELmB,KAAY,eAAY,IAAY,CACpC,CAACnB,GAAU,CAACA,EAAO,SAGvBA,EAAO,QAAQ,UAAU,CAC3B,EAAG,CAACA,CAAM,CAAC,EAELoB,EAAQC,GAAmB,CAC3B,CAACrB,GAAU,CAACA,EAAO,SAGnBA,EAAO,UACTI,EAASiB,CAAM,EACfrB,EAAO,QAAQ,UAAUqB,CAAM,EAEnC,EAEMC,EAAsB,IAAM,CAC3BpB,EAAW,SAASM,EAAsB,EAAI,CACrD,EACMe,EAAsBC,GAAuD,CACjFA,EAAE,gBAAgB,EAClBtB,EAAW,QAAU,GACrBM,EAAsB,EAAK,CAC7B,EAEMiB,MAAmB,eAAY,IAAMnB,EAAY,CAACD,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAEvEqB,GAAc7B,GAAO,QAAU,EAC/B8B,MAAc,WAClB,IAAM7B,GAAoB8B,GAC1B,CAAC9B,CAAgB,CACnB,EAEA,OACE,EAAA+B,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACC,GAAA,KACC,EAAAD,QAAA,cAACE,GAAA,KACC,EAAAF,QAAA,cAACG,GAAA,CAAc,YAAalB,EAAa,YAAaC,EAAa,QAASC,GAC1E,EAAAa,QAAA,cAACpC,GAAA,CACE,GAAGE,GACJ,MAAO,CAACY,EACR,UAAW,CAACA,EACZ,aAAc,CAACA,EACf,IAAKP,EACL,aAAcS,GAEXZ,GAAO,OACRA,EAAM,IAAI,CAACoC,EAAGC,IACZ,EAAAL,QAAA,cAACM,GAAA,CAAK,IAAKF,EAAE,MAAM,CAAC,EAAE,KAAOC,GAC1BD,EAAE,OAAS,SACV,EAAAJ,QAAA,cAACO,GAAA,CACC,IACEH,EAAE,MAAM,CAAC,EAAE,QAAQ,OAAOI,EAAQ,EAAE,KAAMC,GAAMA,EAAE,SAAW,OAAO,GAAG,IAEzE,IAAKvC,EAAE,oBAAqB,CAAE,MAAOmC,EAAI,CAAE,CAAC,GAAK,GACnD,EAEDD,EAAE,OAAS,cACV,EAAAJ,QAAA,cAACU,GAAA,CACC,KAAMN,EAAE,MAAM,IAAKK,GAAMA,EAAE,GAAG,EAC9B,QAASJ,IAAM/B,EACf,oBAAqBmB,EACrB,mBAAoBf,EACtB,EAED0B,EAAE,OAAS,YAAc,EAAAJ,QAAA,cAACW,GAAA,CAAa,IAAKP,EAAE,MAAM,CAAC,EAAE,IAAK,MAAOC,EAAI,EAAG,EAC1ED,EAAE,OAAS,UACV,EAAAJ,QAAA,cAACY,GAAA,CACC,QAASP,IAAM/B,EACf,IAAK8B,EAAE,MAAM,CAAC,EAAE,IAChB,QAASA,EAAE,MAAM,CAAC,EAAE,IACpB,oBAAqBX,EACrB,mBAAoBf,EACtB,CAEJ,CACD,EAED,EAAAsB,QAAA,cAACM,GAAA,CAAK,IAAKR,IACT,EAAAE,QAAA,cAACO,GAAA,CAAM,IAAKT,GAAa,IAAK5B,EAAE,oBAAqB,CAAE,MAAO,CAAE,CAAC,GAAK,GAAI,CAC5E,CAEJ,EACCQ,GAAsBmB,GAAc,GACnC,EAAAG,QAAA,cAACa,GAAA,KACC,EAAAb,QAAA,cAACc,GAAA,CAAgB,QAASpB,EAAoB,MAAOxB,EAAE,cAAc,GAAK,IACxE,EAAA8B,QAAA,cAACe,EAAA,KAAe7C,EAAE,cAAc,CAAE,CACpC,CACF,CAEJ,EACC,CAACQ,GAAsBmB,GAAc,GACpC,EAAAG,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACgB,GAAA,KACC,EAAAhB,QAAA,cAACiB,GAAA,CAAU,QAAS3B,EAAW,MAAOpB,EAAE,qBAAqB,GAAK,IAChE,EAAA8B,QAAA,cAACkB,GAAA,CAAgB,MAAK,GAAC,CACzB,CACF,EACA,EAAAlB,QAAA,cAACmB,GAAA,KACC,EAAAnB,QAAA,cAACiB,GAAA,CAAU,QAAS5B,EAAW,MAAOnB,EAAE,iBAAiB,GAAK,IAC5D,EAAA8B,QAAA,cAACoB,GAAA,CAAiB,MAAK,GAAC,CAC1B,CACF,CACF,CAEJ,EACA,EAAApB,QAAA,cAACqB,GAAA,KACC,EAAArB,QAAA,cAACsB,GAAA,CAAS,IAAKlD,GACVJ,GAAO,OACRA,EAAM,IAAI,CAACoC,EAAGC,IAAM,CAClB,IAAMkB,EACJnB,EAAE,MAAM,CAAC,EAAE,QAAQ,OAAOI,EAAQ,EAAE,KAAMC,GAAMA,EAAE,SAAW,SAAS,GAAG,KACzEL,EAAE,MAAM,CAAC,EAAE,IACb,OACE,EAAAJ,QAAA,cAACwB,GAAA,CAAa,IAAKD,GAAOlB,EAAG,OAAQ/B,IAAU+B,GAC7C,EAAAL,QAAA,cAACyB,GAAA,CACC,QAAS,IAAMlC,EAAKc,CAAC,EACrB,MAAOnC,EAAE,uBAAwB,CAAE,MAAOmC,EAAI,CAAE,CAAC,GAAK,IAErDD,EAAE,OAAS,SACV,EAAAJ,QAAA,cAAC0B,GAAA,CACC,IAAKH,EACL,IAAKrD,EAAE,oBAAqB,CAAE,MAAOmC,EAAI,CAAE,CAAC,GAAK,GACnD,EAEDD,EAAE,OAAS,cACV,EAAAJ,QAAA,cAAC0B,GAAA,CACC,IAAKH,EACL,IAAKrD,EAAE,oBAAqB,CAAE,MAAOmC,EAAI,CAAE,CAAC,GAAK,GACnD,EAEDD,EAAE,OAAS,YAAc,EAAAJ,QAAA,cAAC2B,GAAA,CAAgB,IAAKJ,EAAK,MAAOlB,EAAG,EAC9DD,EAAE,OAAS,UACV,EAAAJ,QAAA,cAAC0B,GAAA,CACC,IAAKtB,EAAE,MAAM,CAAC,EAAE,IAChB,IAAKlC,EAAE,oBAAqB,CAAE,MAAOmC,EAAI,CAAE,CAAC,GAAK,GACnD,CAEJ,CACF,CAEJ,CAAC,EAED,EAAAL,QAAA,cAACwB,GAAA,CAAa,IAAK1B,GAAa,OAAM,IACpC,EAAAE,QAAA,cAACyB,GAAA,CACC,QAAS,IAAMlC,EAAK,CAAC,EACrB,MAAOrB,EAAE,uBAAwB,CAAE,MAAO,CAAE,CAAC,GAAK,IAElD,EAAA8B,QAAA,cAAC0B,GAAA,CAAY,IAAK5B,GAAa,IAAK5B,EAAE,oBAAqB,CAAE,MAAO,CAAE,CAAC,GAAK,GAAI,CAClF,CACF,CAEJ,CACF,CACF,EACCM,GAAY,CAAC,CAACR,GAAO,QACpB,EAAAgC,QAAA,cAAC4B,GAAA,CAAS,MAAO5D,EAAO,MAAOM,EAAO,QAASsB,GAAkB,CAErE,CAEJ,EAEOiC,GAAQ9D,G2BhQf,IAAA+D,GAAmB,4BAKZ,IAAMC,GAAc,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,IAI7BC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,EAK3BC,GAAmB,GAAAF,QAAO;AAAA,IAClCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA,IAIrCA,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,0BAEdE,EAAK,CAAC,CAAC;AAAA,qBACZA,EAAK,CAAC,CAAC;AAAA;AAAA,EAIfC,GAAkB,GAAAJ,QAAO;AAAA,IACjCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA,IAIrCA,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,oBAGpBE,EAAK,CAAC,CAAC;AAAA;AAAA,EAWdE,GAA0B,GAAAL,QAAO;AAAA,IACzCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,aAC5BA,GAAUA,EAAM,WAAW;AAAA;AAAA;AAAA,oBAGrBE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIJA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,MAGxBC,EAAe;AAAA,oBACDD,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAItBF,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,oBAEpBE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,MAGrBC,EAAe;AAAA,uBACED,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,EAKjBG,GAAyB,GAAAN,QAAO;AAAA,IACxCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA,eAE3BE,EAAK,CAAC,CAAC;AAAA,kBACJA,EAAK,CAAC,CAAC,UAAWF,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,MAEhEM,EAAS;AAAA,qBACMJ,EAAK,EAAE,CAAC;AAAA,sBACPA,EAAK,EAAE,CAAC;AAAA,sBACRA,EAAK,CAAC,CAAC;AAAA,uBACNA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAIzBF,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,oBAEpBE,EAAK,CAAC,CAAC;AAAA,qBACNA,EAAK,CAAC,CAAC;AAAA,8BACGF,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA,EAKpDO,GAA0B,GAAAR,QAAO;AAAA;EChG9C,IAAAS,GAAsC,oBCAtC,IAAAC,GAAoB,oBAEdC,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUxBC,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZC,GAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgPtBD,EAAS;AAAA,IACTD,EAAqB;AAAA,EAGlBG,GAAQD,GDnQf,IAAME,GAAiBC,MACrB,aAAkCC,GAAmB,CACnD,UAAW,CAAE,GAAID,CAAa,EAC9B,KAAM,CAACA,CACT,CAAC,EAEIE,GAAQH,GEVf,IAAAI,GAAgC,gBCAhC,IAAAC,EAA6C,gBCA7C,IAAAC,GAAuB,gBCAvB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,aAGjBC,EAAK,CAAC,CAAC;AAAA,sBACGC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA,kBAIvCD,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZE,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA,kBAGTC,EAAK,CAAC,CAAC;AAAA,WACdA,EAAK,GAAG,CAAC;AAAA,YACRA,EAAK,CAAC,CAAC;AAAA,EAGNG,GAAU,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYjBK,GAAU,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA,EAMjBM,GAAmB,GAAAN,QAAO,IAAI,MAAM,KAAO,CACtD,UAAW,gCACb,EAAE;AAAA;AAAA,EAIWO,GAAmB,GAAAP,QAAO;AAAA,gBACvBC,EAAK,EAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;EDtCzB,IAAMO,GAAY,CAAC,CAAE,KAAAC,EAAM,OAAAC,EAAQ,QAAAC,EAAS,SAAAC,CAAS,IACnD,iBAACC,GAAA,KACEJ,GACC,iBAACK,GAAA,KACC,iBAACC,GAAA,CAAQ,IAAKN,EAAM,OAAQC,EAAQ,IAAKC,EAAS,CACpD,EAEF,iBAACK,GAAA,KAASJ,CAAS,CACrB,EAGKK,GAAQT,GEtBf,IAAAU,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,EAMdC,GAAO,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKTE,EAAK,CAAC,CAAC;AAAA;AAAA,EAIZC,GAAQ,GAAAH,QAAO;AAAA;AAAA,EAIfI,GAAQ,GAAAJ,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;AAAA,kBAEgBE,EAAK,CAAC,CAAC;EDdzB,IAAMG,GAAW,CAAC,CAAE,MAAAC,CAAM,IACxB,GAAAC,QAAA,cAACC,GAAA,KACEF,EAAM,IAAKG,GACV,GAAAF,QAAA,cAACG,GAAA,CAAK,IAAKD,EAAK,OACd,GAAAF,QAAA,cAACI,GAAA,KAAOF,EAAK,KAAM,EACnB,GAAAF,QAAA,cAACK,GAAA,KAAOH,EAAK,KAAM,CACrB,CACD,CACH,EAGKI,GAAQR,GHZf,IAAAS,GAA+B,mBAMzBC,GAAU,CAAC,CAAE,gBAAAC,CAAgB,IAAoB,CACrD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,YAAS,EAAK,EAClCC,KAAc,eAAY,IAAMD,EAAS,CAACD,CAAK,EAAG,CAACA,CAAK,CAAC,EAEzD,CAAE,MAAAG,EAAO,YAAAC,EAAa,YAAAC,EAAa,SAAAC,EAAU,QAAAC,EAAS,KAAAC,EAAM,KAAAC,CAAK,EAAIV,EAErEW,EACJF,IAAS,UACL,EAAE,oCAAoC,EACtCA,IAAS,mBACT,EAAE,qCAAqC,EACvCA,EAEN,OACE,EAAAG,QAAA,gBAAAA,QAAA,cACGX,GACC,EAAAW,QAAA,cAACC,EAAA,CAAM,MAAOF,EAAO,QAASR,GAC3BC,GAAS,EAAAQ,QAAA,cAACE,GAAA,CAAM,IAAKV,EAAO,IAAKO,EAAO,EACxCN,GAAe,EAAAO,QAAA,cAACG,EAAA,CAAQ,wBAAyB,CAAE,OAAQV,CAAY,EAAG,EAC3E,EAAAO,QAAA,cAACI,GAAA,KACC,EAAAJ,QAAA,cAACK,GAAA,KACC,EAAAL,QAAA,cAACM,GAAA,CACC,MAAO,CACL,CACE,MAAO,EAAE,mCAAmC,EAC5C,MAAO,GAAGC,EAAgBb,GAAe,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACtE,EACA,CACE,MAAO,EAAE,mCAAmC,EAC5C,MAAO,GAAGC,GAAU,OAAO,aAC7B,EACA,CACE,MAAO,EAAE,qCAAqC,EAC9C,MAAO,GAAGY,EAAgBX,GAAS,SAAW,CAAC,CAAC,IAAI,EAClD,sCACF,CAAC,EACH,CACF,EACF,CACF,CACF,CACF,EAEF,EAAAI,QAAA,cAACQ,GAAA,KACC,EAAAR,QAAA,gBAAAA,QAAA,cACGN,GAAgB,MACf,EAAAM,QAAA,cAACS,GAAA,KAAkB,MAAMF,EAAgBb,CAAW,CAAC,IAAI,EACvD,kBACF,CAAC,EAAG,CAER,EACA,EAAAM,QAAA,cAACU,GAAA,KACC,EAAAV,QAAA,cAAC,SACED,EAAO,IACPH,GAAS,SAAWD,GAAU,SAC7B,EAAAK,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACW,GAAA,KACEJ,EAAgBX,GAAS,OAAO,EAAE,IAAE,EAAE,sCAAsC,CAC/E,EAAsB,IAAI,IACxB,IACF,EAAAI,QAAA,cAACW,GAAA,KACEhB,GAAU,QAAQ,IAAE,EAAE,8BAA8B,CACvD,EAAqB,IACnB,GACJ,CAEJ,EACCG,GACC,EAAAE,QAAA,cAAC,SACC,EAAAA,QAAA,cAACY,EAAA,CAAa,QAASrB,GAAc,EAAE,iBAAiB,CAAE,CAC5D,CAEJ,CACF,CACF,CAEJ,EAEOsB,GAAQ1B,GKjGf,IAAA2B,EAA6C,gBCA7C,IAAAC,GAAsC,oBCAtC,IAAAC,GAAoB,oBAEdC,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUxBC,GAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAuBrBD,EAAqB;AAAA,EAGlBE,GAAQD,GDlCf,IAAME,GAAqB,CACzBC,EACAC,EACAC,EACAC,OAEA,aAA+BC,GAAkB,CAC/C,UAAW,CACT,GAAAJ,EACA,SAAUC,EACV,YAAaC,EACb,SAAWC,GAAuB,CACpC,EACA,KAAMF,IAAa,QAAaC,IAAgB,MAClD,CAAC,EAEIG,GAAQN,GEpBf,IAAAO,EAAwD,gBCAxD,IAAAC,GAAmB,4BAIZ,IAAMC,GAAc,GAAAC,QAAO;AAAA,IAC7BC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA,EAM3BC,GAAkB,GAAAF,QAAO;AAAA,IACjCC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,EAK3BE,GAAmB,GAAAH,QAAO;AAAA,IAClCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,kBACxBG,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGpBH,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,oBAEpBG,EAAK,CAAC,CAAC;AAAA;ECxB3B,IAAAC,GAAwD,gBCAxD,IAAAC,GAAkB,gBCAlB,IAAAC,GAA4B,4BAIrB,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,EAKjBC,GAAQ,GAAAD,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;AAAA,EAQWE,GAAQ,GAAAF,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,2DACb,EAAE;AAAA;AAAA,kBAEgBG,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGrB,CAAC,CAAE,cAAAC,CAAc,IACjBA,GACA;AAAA;AAAA,eAEYC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,KAC/C;EDrBL,IAAMC,GAAmB,CAAC,CAAE,MAAAC,EAAO,MAAAC,EAAO,UAAAC,CAAU,IAClD,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAAOL,CAAM,EACbC,GAAS,GAAAE,QAAA,cAACG,GAAA,CAAM,cAAeJ,GAAYD,CAAM,CACpD,EAGKM,GAAQR,GEjBf,IAAAS,GAAkB,gBAClBC,GAA8C,2BAkB9C,IAAMC,GAAoB,CAAC,CACzB,QAAAC,EACA,OAAAC,EACA,OAAAC,EACA,MAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,SAAAC,CACF,IAAwB,CACtB,IAAMC,EAAQL,EAAM,CAAC,EAEfM,EADSN,EAAM,CAAC,EACAK,EAEhBE,EAAaL,EAAeM,EAAgBT,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EACjEU,EAAaP,EAAeM,EAAgBT,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAEvE,OAAIC,EAAM,OAAS,EACV,KAIP,GAAAU,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAAC,WACC,SAAUb,EACV,KAAM,EACN,KAAMS,EACN,OAAQP,EACR,SAAUI,EACV,SAAUC,EACV,OAAQN,EACR,UAAW,CAAE,SAAU,UAAW,GAElC,GAAAY,QAAA,cAAC,aAAM,CAAC,CAAE,aAAAE,CAAa,IAAM,GAAAF,QAAA,cAACG,GAAA,CAAK,GAAGD,EAAa,EAAG,CAAG,EACzD,GAAAF,QAAA,cAAC,gBACE,CAAC,CAAE,QAAAI,EAAS,eAAAC,CAAe,IAC1B,GAAAL,QAAA,cAAC,OAAI,UAAU,kBACZI,EAAQ,IAAKE,GACZ,GAAAN,QAAA,cAACO,GAAA,CACC,IAAKD,EAAO,GACZ,OAAQA,EACR,OAAQjB,EACR,eAAgBgB,EAClB,CACD,CACH,CAEJ,EACA,GAAAL,QAAA,cAAC,WAAO,MAAO,IACZ,CAAC,CAAE,OAAAQ,EAAQ,cAAAC,CAAc,IACxB,GAAAT,QAAA,cAAC,OAAI,UAAU,iBACZQ,EAAO,IAAI,CAAC,CAAE,GAAAE,EAAI,OAAAC,EAAQ,OAAAC,CAAO,IAChC,GAAAZ,QAAA,cAACa,GAAA,CAAM,IAAKH,EAAI,OAAQC,EAAQ,OAAQC,EAAQ,cAAeH,EAAe,CAC/E,CACH,CAEJ,CACF,CACF,EACC,EAMH,CAEJ,EAEOK,GAAQ5B,GHxEf,IAAM6B,GAAkB,CAAC,CACvB,MAAAC,EACA,OAAAC,EACA,OAAAC,EACA,MAAAC,EACA,QAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,CACF,IAA4B,CAC1B,GAAM,CAACC,EAAOC,CAAQ,KAAI,aAA+BN,CAAK,EAExDO,KAAW,gBAAaC,GAAkC,CAC9DF,EAAS,CAAC,GAAGE,CAAU,CAAC,CAC1B,EAAG,CAAC,CAAC,EAEL,uBAAU,IAAM,CACTP,GAASK,EAAS,MAAS,CAClC,EAAG,CAACL,CAAO,CAAC,EAGV,GAAAQ,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,EAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,MAAOd,EACP,MAAO,GAAGe,EAAgBP,IAAQ,CAAC,GAAKP,EAAO,CAAC,CAAC,CAAC,GAAGI,EAAO,IAAIA,CAAI,GAAK,EAAE,GAC7E,CACF,EACA,GAAAO,QAAA,cAACC,EAAA,KACC,GAAAD,QAAA,cAACI,GAAA,CACC,QAASZ,EACT,OAAQH,EACR,OAAQC,EACR,MAAOC,EACP,SAAUI,EACV,SAAUG,EACV,KAAML,EACN,aAAcC,EAChB,CACF,CACF,CAEJ,EAEOW,GAAQlB,GF9Cf,IAAAmB,GAA+B,mBAEzBC,GAAgB,CACpBC,EACAC,EACAC,EAAkB,CAAC,EACnBC,IACa,CAGb,GAFIH,IAAS,GAAKG,IAAY,QAE1BA,IAAY,QAAaA,GAAWF,GAAOD,IAAS,EACtD,OAAOE,EAGT,IAAME,EAAcD,EAAUH,EAAOG,EAAUH,EAC/C,OAAAE,EAAM,KAAKE,CAAW,EACfL,GAAcC,EAAMC,EAAKC,EAAOE,CAAW,CACpD,EAQMC,GAAY,CAAC,CAAE,GAAAC,EAAI,gBAAAC,EAAiB,QAAAC,CAAQ,IAAsB,CACtE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAKC,CAAM,KAAI,YAAgB,EAChC,CAACC,EAAQC,CAAS,EAAI,EAAAC,QAAM,SAAS,EAAK,EAC1CC,EAAiB,EAAAD,QAAM,YAAY,IAAM,CACxCF,GACHI,EAAO,QAAQ,iBAAiB,EAElCH,EAAU,CAACD,CAAM,CACnB,EAAG,CAACA,CAAM,CAAC,EAEL,CAACK,EAAWC,CAAY,KAAI,YAAS,CACzC,SAAUX,EAAgB,UAAU,QACpC,YAAaA,EAAgB,aAAa,QAC1C,SAAUA,EAAgB,UAAU,OACtC,CAAC,EAEK,CAAE,SAAAY,EAAU,YAAAC,EAAa,SAAAC,CAAS,EAAIJ,EACtC,CAAE,QAAAK,EAAS,KAAAC,CAAK,EAAIC,GAAmBlB,EAAIa,EAAUC,EAAaC,CAAQ,KAChF,aAAU,IAAM,CACVE,IACFZ,EAAOY,CAAI,EACXL,EAAa,CACX,SAAUK,GAAM,MAAM,UAAU,SAAW,EAC3C,YAAaA,GAAM,MAAM,aAAa,SAAW,EACjD,SAAUA,GAAM,MAAM,UAAU,SAAW,CAC7C,CAAC,EAEL,EAAG,CAACA,CAAI,CAAC,EAET,IAAME,EAAOF,GAAM,MAAQb,GAAK,KAE1BgB,EAAqBD,GAAM,aAAa,SAAW,EACnDE,EAAiBF,GAAM,aAAa,KAAO,EAC3CG,EAAiBH,GAAM,aAAa,KAAO,EAC3CI,EAAkBJ,GAAM,aAAa,MAAQ,EAC7CK,GAAmB/B,GAAc8B,EAAiBD,CAAc,EAChEG,MAAsB,eACzBC,IAA8B,CAC7BhB,EAAO,QAAQ,iBAAiB,EAChCE,EAAa,CAAE,GAAGD,EAAW,YAAae,GAAO,CAAC,CAAE,CAAC,CACvD,EACA,CAACf,CAAS,CACZ,EAEMgB,GAAkBR,GAAM,UAAU,SAAW,EAC7CS,EAAcT,GAAM,UAAU,KAAO,EACrCU,EAAcV,GAAM,UAAU,KAAO,EACrCW,EAAeX,GAAM,UAAU,MAAQ,EACvCY,EAAgBtC,GAAcqC,EAAcD,CAAW,EACvDG,MAAmB,eACtBN,IAA8B,CAC7BhB,EAAO,QAAQ,iBAAiB,EAChCE,EAAa,CAAE,GAAGD,EAAW,SAAUe,GAAO,CAAC,CAAE,CAAC,CACpD,EACA,CAACf,CAAS,CACZ,EAEMsB,IAAmBd,GAAM,UAAU,SAAW,GAAK,KAAO,EAC1De,IAAef,GAAM,UAAU,KAAO,GAAK,KAAO,EAClDgB,IAAehB,GAAM,UAAU,KAAO,GAAK,KAAO,EAClDiB,IAAgBjB,GAAM,UAAU,MAAQ,GAAK,KAAO,EACpDkB,GAAgB5C,GAAc2C,GAAcD,EAAW,EACvDG,MAAmB,eACtBZ,IAA8B,CAC7BhB,EAAO,QAAQ,iBAAiB,EAChCE,EAAa,CAAE,GAAGD,EAAW,SAAUe,GAAO,CAAC,EAAI,GAAI,CAAC,CAC1D,EACA,CAACf,CAAS,CACZ,EAEM4B,KAAiBpB,GAAM,UAAY,GAAK,KAAK,QAAQ,CAAC,EACtDqB,KAA0BrB,GAAM,mBAAqB,GAAK,KAAK,QAAQ,CAAC,EACxEsB,GAActB,GAAM,YAE1B,OACE,EAAAX,QAAA,cAACkC,EAAA,CAAM,MAAOvC,EAAE,mCAAmC,EAAG,QAASD,GAC7D,EAAAM,QAAA,cAACmC,EAAA,KACC,EAAAnC,QAAA,cAACoC,GAAA,KACE3C,GAAiB,aAChB,EAAAO,QAAA,cAACqC,GAAA,KACC,EAAArC,QAAA,cAACsC,EAAA,KACC,EAAAtC,QAAA,cAAC,SAAGP,EAAgB,WAAY,CAClC,CACF,EAEDA,GAAiB,OAChB,EAAAO,QAAA,cAACuC,GAAA,KACC,EAAAvC,QAAA,cAACwC,GAAA,CACC,KAAM/C,EAAgB,MACtB,IAAKA,EAAgB,MAAQE,EAAE,iBAAiB,EAChD,KAAI,GACN,CACF,CAEJ,CACF,EACA,EAAAK,QAAA,cAACmC,EAAA,KACC,EAAAnC,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC0C,GAAA,CACC,MAAO/C,EAAE,mCAAmC,EAC5C,OAAQ,CAACiB,CAAkB,EAC3B,OAAQ,CAACC,EAAgBC,CAAc,EACvC,MAAOE,GACP,KAAMrB,EAAE,kBAAkB,EAC1B,aAAY,GACZ,QAASa,EACT,SAAUS,GACZ,CACF,EACA,EAAAjB,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC0C,GAAA,CACC,MAAO/C,EAAE,gCAAgC,EACzC,OAAQ,CAACwB,EAAe,EACxB,OAAQ,CAACC,EAAaC,CAAW,EACjC,MAAOE,EACP,KAAM5B,EAAE,8BAA8B,EACtC,QAASa,EACT,SAAUgB,GACZ,CACF,EACCjB,IAAa,QAAaoB,KAAgB,GACzC,EAAA3B,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC0C,GAAA,CACC,MAAO/C,EAAE,gCAAgC,EACzC,OAAQ,CAAC8B,EAAe,EACxB,OAAQ,CAACC,GAAaC,EAAW,EACjC,MAAOE,GACP,KAAK,IACL,QAASrB,EACT,SAAUsB,GACZ,CACF,EAEF,EAAA9B,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC2C,EAAA,KACEV,IAAgB,MACf,EAAAjC,QAAA,cAACsC,EAAA,KAAS,GAAGM,EAAgBX,EAAW,CAAC,IAAItC,EAAE,kBAAkB,CAAC,GAAI,EAExE,EAAAK,QAAA,cAACsC,EAAA,CAAQ,MAAK,IACZ,EAAAtC,QAAA,cAAC,SAAE,IAEAW,GAAM,UAAY,KACfhB,EAAE,qDAAsD,CACtD,SAAUoC,GACV,kBAAmBC,GACnB,QAASrB,GAAM,OACjB,CAAC,EACDhB,EAAE,8CAA+C,CAC/C,SAAUoC,GACV,kBAAmBC,EACrB,CAAC,CACP,CACF,CACF,CACF,EAEA,EAAAhC,QAAA,cAACyC,GAAA,KACC,EAAAzC,QAAA,cAAC6C,GAAA,CACC,QAAS5C,EACT,MACEH,EAASH,EAAE,4BAA4B,GAAK,GAAKA,EAAE,4BAA4B,GAAK,IAGtF,EAAAK,QAAA,cAAC8C,EAAA,KACWnD,EAATG,EAAW,yBAA8B,4BAAN,CACtC,CACF,CACF,EACA,EAAAE,QAAA,gBAAAA,QAAA,cACGF,GACC,EAAAE,QAAA,cAAC+C,GAAA,KACC,EAAA/C,QAAA,cAACgD,GAAA,KACC,EAAAhD,QAAA,cAACiD,GAAA,CACC,MAAO,CACL,CACE,MAAOtD,EAAE,gCAAgC,EACzC,MAAO,GAAGoC,EAAY,IACxB,EACA,CACE,MAAOpC,EAAE,yCAAyC,EAClD,MAAO,GAAGqC,EAAqB,IACjC,EACA,CACE,MAAOrC,EAAE,gCAAgC,EACzC,MAAO,GAAGiD,EAAgBnD,GAAiB,UAAY,CAAC,CAAC,IAAIE,EAC3D,kBACF,CAAC,EACH,EACA,CACE,MAAOA,EAAE,yCAAyC,EAClD,MAAO,GAAGiD,EAAgBnD,GAAiB,mBAAqB,CAAC,CAAC,IAAIE,EACpE,kBACF,CAAC,EACH,EACA,CACE,MAAOA,EAAE,uCAAuC,EAChD,MAAO,GAAGiD,EAAgBjC,GAAM,iBAAmB,CAAC,CAAC,IAAIhB,EACvD,kBACF,CAAC,EACH,CACF,EACF,CACF,CACF,CAEJ,CACF,CACF,CAEJ,EAEOuD,GAAQ3D,GHnPf,IAAA4D,GAA+B,mBAOzBC,GAAO,CAAC,CAAE,GAAAC,EAAI,gBAAAC,CAAgB,IAAiB,CACnD,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,YAAS,EAAK,EAClCC,KAAc,eAAY,IAAMD,EAAS,CAACD,CAAK,EAAG,CAACA,CAAK,CAAC,EAEzD,CAAE,KAAAG,CAAK,EAAIC,GACfP,EACAC,EAAgB,UAAU,QAC1BA,EAAgB,aAAa,QAC7BA,EAAgB,UAAU,OAC5B,EAEMO,EAAWF,GAAM,MAAM,SACvBG,EAAWH,GAAM,MAAM,UAAU,QACjCI,EAAcJ,GAAM,MAAM,YAE1BK,EAAOV,GAAiB,UAAY,6BAG1C,OACEA,EAAgB,aAAe,QAC/BA,EAAgB,aAAe,MAC/BO,IAAa,QACbC,IAAa,QACbC,IAAgB,QAChBF,IAAa,MACbC,IAAa,MACbC,IAAgB,KAGd,EAAAE,QAAA,cAACC,GAAA,CAAU,KAAMF,EAAM,QAAST,EAAE,iBAAiB,GACjD,EAAAU,QAAA,cAACE,GAAA,KAAkBZ,EAAE,eAAe,CAAE,EAEtC,EAAAU,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAAC,SAAGV,EAAE,eAAe,CAAE,CACzB,CACF,EAKF,EAAAU,QAAA,gBAAAA,QAAA,cACGT,GAAS,EAAAS,QAAA,cAACI,GAAA,CAAU,GAAIhB,EAAI,gBAAiBC,EAAiB,QAASI,EAAa,EACrF,EAAAO,QAAA,cAACC,GAAA,CAAU,KAAMF,EAAM,QAAST,EAAE,iBAAiB,GACjD,EAAAU,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACE,GAAA,KAAkB,GAAGG,EAAgBP,CAAW,CAAC,IAAIR,EACpD,kBACF,CAAC,GAAI,EAEL,EAAAU,QAAA,cAACG,GAAA,KACC,EAAAH,QAAA,cAAC,SACEX,EAAgB,YAAcQ,EAC3BP,EAAE,kDAAmD,CACnD,OAAQ,GAAGe,EAAgBhB,EAAgB,UAAU,CAAC,MACtD,SAAAQ,CACF,CAAC,EACDP,EAAE,yCAAyC,CACjD,EAEA,EAAAU,QAAA,cAAC,SAAE,IAEAV,EAAE,mCAAoC,CACrC,SAAU,IAAIM,EAAW,KAAK,QAAQ,CAAC,CAAC,GAC1C,CAAC,EAAG,IACJ,EAAAI,QAAA,cAACM,EAAA,CAAa,QAASb,GAAcH,EAAE,iBAAiB,CAAE,CAC5D,CACF,CACF,CACF,CACF,CAEJ,EAEOiB,GAAQpB,GNnFf,IAAAqB,GAA+B,mBAOzBC,GAAmB,CAAC,CAAE,GAAAC,EAAI,iBAAAC,CAAiB,IAA6B,CAC5E,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,EAAA,KACC,GAAAD,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KAAeJ,EAAE,6CAA6C,CAAE,CACnE,EACA,GAAAC,QAAA,cAACE,EAAA,KACEJ,EAAiB,IAAI,CAACM,EAAiBC,IACtC,GAAAL,QAAA,cAAC,aAAS,IAAKK,IACXD,EAAgB,OAAS,WACzBA,EAAgB,OAAS,qBACzB,GAAAJ,QAAA,cAACM,GAAA,CAAQ,gBAAiBF,EAAiB,EAE5CA,EAAgB,OAAS,QAAU,GAAAJ,QAAA,cAACO,GAAA,CAAK,GAAIV,EAAI,gBAAiBO,EAAiB,CACtF,CACD,CACH,CACF,CAEJ,EAEOI,GAAQZ,GenCf,IAAAa,GAAkB,gBCAlB,IAAAC,GAA6C,gBCA7C,IAAAC,EAA6C,gBCA7C,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,EAMjBC,GAAO,GAAAD,QAAO;AAAA,aACdE,EAAK,GAAG,CAAC;AAAA,EAGTC,MAAU,GAAAH,SAAOI,EAAE,EAAE,MAAM,KAAO,CAC7C,GAAI,IACN,EAAE;AAAA;AAAA,EAIWC,GAAc,GAAAL,QAAO;AAAA,gBAClBE,EAAK,CAAC,CAAC;AAAA,EAGVI,GAAS,GAAAN,QAAO;AAAA,gBACbE,EAAK,CAAC,CAAC;AAAA;AAAA,EAIVK,GAAU,GAAAP,QAAO;AAAA,sBACPQ,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,aAC5CN,EAAK,GAAG,CAAC;ED5BtB,IAAAO,GAA+B,mBAQzBC,GAAY,CAAC,CAAE,QAAAC,EAAS,YAAAC,EAAa,SAAAC,CAAS,IAAa,CAC/D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAQC,CAAS,EAAI,GAAAC,QAAM,SAAS,EAAK,EAC1CC,EAAiB,GAAAD,QAAM,YAAY,IAAMD,EAAU,CAACD,CAAM,EAAG,CAACA,CAAM,CAAC,EAErEI,EAAyBL,EAATC,EAAW,yBAA8B,wBAAN,EAEzD,OACE,GAAAE,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,KAASX,CAAQ,EACjBC,GAAe,GAAAK,QAAA,cAACM,GAAA,KAAaX,CAAY,EAC1C,GAAAK,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,CAAY,QAASP,GACpB,GAAAD,QAAA,cAACS,EAAA,KAAeP,CAAc,CAChC,CACF,CACF,EACCJ,GAAU,GAAAE,QAAA,cAACU,GAAA,KAASd,CAAS,CAChC,CAEJ,EAEOe,GAAQlB,GEnCf,IAAAmB,GAA6C,gBCA7C,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO,MAEjBC,GAAS,GAAAD,QAAO;AAAA;AAAA;AAAA,EAKhBE,GAAQ,GAAAF,QAAO,MAEfG,GAAO,GAAAH,QAAO;AAAA,iBACVI,EAAK,CAAC,CAAC;AAAA,EAGXC,MAAU,GAAAL,SAAOM,CAAW,EAAE,MAAM,KAAO,CACtD,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAWSF,EAAK,GAAI,CAAC;AAAA,cACPA,EAAK,GAAI,CAAC;AAAA,YACZA,EAAK,GAAI,CAAC;AAAA,aACTA,EAAK,GAAI,CAAC;AAAA,wBACEG,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBlDC,GAAS,GAAAR,QAAO;AAAA,iBACZI,EAAK,CAAC,CAAC;AAAA,gBACRA,EAAK,CAAC,CAAC;AAAA,0BACIG,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;EDxD7D,IAAAE,GAA+B,mBAOzBC,GAAa,CAAC,CAAE,MAAAC,EAAO,SAAAC,CAAS,IAAa,CACjD,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAQC,CAAS,KAAI,aAAS,EAAK,EACpCC,KAAiB,gBAAY,IAAMD,EAAU,CAACD,CAAM,EAAG,CAACA,CAAM,CAAC,EAErE,OACE,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KAAOT,CAAM,EACbC,GACC,GAAAK,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAQ,QAASN,EAAgB,MAAOH,EAAE,wBAAwB,GAAK,IACtE,GAAAI,QAAA,cAACM,GAAA,CAAS,MAAK,GAAC,CAClB,CACF,CAEJ,EACCT,GAAU,GAAAG,QAAA,cAACO,GAAA,KAAQZ,CAAS,CAC/B,CAEJ,EAEOa,GAAQf,GEjCf,IAAAgB,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO,MAAM,MAAM,KAAO,CAC/C,UAAW,gCACb,EAAE;AAAA,mBACiBC,EAAK,EAAG,CAAC;AAAA;EDE5B,IAAMC,GAAa,CAAC,CAAE,SAAAC,EAAU,QAAAC,CAAQ,IACtC,GAAAC,QAAA,cAACC,GAAA,CAAQ,QAASF,GAAUD,CAAS,EAGhCI,GAAQL,GEbf,IAAAM,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,sBAIPC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,EAI5CC,GAAQ,GAAAF,QAAO,MAAM,MAAM,KAAO,CAC7C,KAAM,OACN,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA,YAIWC,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA,eACzCE,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAeRF,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM3CA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;EDxCzD,IAAMG,GAAY,CAAC,CAAE,YAAAC,EAAa,MAAAC,EAAO,MAAAC,EAAO,GAAAC,EAAI,SAAAC,EAAU,UAAAC,CAAU,IACtE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,YAAaR,EACb,MAAOE,EACP,GAAIC,EACJ,aAAYF,EACZ,SAAUG,EACV,UAAWC,EACb,CACF,EAGKI,GAAQV,GE1Bf,IAAAW,GAAuB,gBCAvB,IAAAC,GAAuB,gBACvBC,GAA4B,4BAIrB,IAAMC,GAAQ,GAAAC,QAAO,MAAM,MAAM,KAAO,CAC7C,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAcWC,EAAK,GAAG,CAAC;AAAA,cACRA,EAAK,GAAG,CAAC;AAAA,oBACHA,EAAK,CAAC,CAAC;AAAA,wBACFC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY9CC,MAAU,GAAAH,SAAQE,GAAU,iBAAC,OAAK,GAAGA,EAAO,CAAE,EAAE,MAAM,CAAC,CAAE,KAAAE,EAAM,QAAAC,CAAQ,KAAO,CACzF,KAAMD,GAAQ,WACd,eAAgBC,CAClB,EAAE;AAAA,IACE,CAAC,CAAE,MAAAC,CAAM,IACTA,GACA;AAAA,QACIP,EAAK;AAAA,iBACKG,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;AAAA;AAAA;AAAA,8BAG1BA,GAAUA,EAAM,MAAM,MAAM,GAAG,aAAa;AAAA;AAAA;AAAA,KAGtE;AAAA,EAGQK,MAAQ,GAAAP,SAAQE,GAC3B,iBAAC,SAAO,GAAGA,EAAO,UAAW,GAAGA,EAAM,QAAU,UAAY,MAAS,IAAIA,EAAM,SAAS,GAAI,CAC7F,EAAE,MAAM,CAAC,CAAE,KAAAE,EAAM,QAAAC,CAAQ,KAAO,CAC/B,QAAAA,EACA,KAAMD,GAAQ,UAChB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMQL,EAAK;AAAA,eACCG,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA,4BAG3BA,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQzDH,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQFS,GAAY,GAAAR,QAAO;AAAA,WACpBE,GAAUA,EAAM,MAAM,MAAM,QAAQ;ECrFhD,IAAAO,GAAkB,gBCAlB,IAAAC,GAAmB,4BAInB,IAAMC,GAAW,WACXC,GAAgBC,EAAK,CAAC,EAEfC,GAAU,GAAAC,QAAO;AAAA;AAAA,sBAEPC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,EAI5CC,GAAS,GAAAF,QAAO,OAAO,MAAM,KAAO,CAC/C,UAAW,mCACb,EAAE;AAAA;AAAA;AAAA;AAAA,YAIWC,GAAUA,EAAM,MAAM,UAAU,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOzCJ,EAAa;AAAA,wBACJD,EAAQ,MAAMC,EAAa;AAAA;AAAA,WAEvCI,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBnCE,GAAS,GAAAH,QAAO;AAAA,WACjBC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAGnCG,GAAO,GAAAJ,QAAO;AAAA;AAAA;AAAA,WAGhBH,EAAa;AAAA;AAAA,eAETD,EAAQ;EDvCvB,IAAMS,GAAc,CAAC,CAAE,MAAAC,EAAO,QAAAC,EAAS,SAAAC,EAAU,KAAAC,EAAM,MAAAC,CAAM,IAC3D,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAO,MAAOP,EAAO,SAAUE,EAAU,MAAOE,EAAO,aAAYA,GACjEH,GAAS,IAAKO,GACb,GAAAH,QAAA,cAACI,GAAA,CAAO,IAAKD,EAAO,MAAO,MAAOA,EAAO,OACtCA,EAAO,aAAeA,EAAO,MAC7BL,EAAO,IAAIA,CAAI,GAAK,EACvB,CACD,CACH,EACA,GAAAE,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,CAAgB,MAAK,GAAC,CACzB,CACF,EAGKC,GAAQb,GElCf,IAAAc,GAAmB,4BAIZ,IAAMC,GAAa,GAAAC,QAAO;AAAA,IAC5BC,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA,cAG1BC,EAAK,GAAI,CAAC;AAAA;AAAA,EAIXC,GAAmB,GAAAH,QAAO;AAAA,IAClCC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA,oBAEtBC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,IAItBD,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA,eAEzBC,EAAK,EAAG,CAAC;AAAA;ECrBxB,IAAAE,GAAmB,4BAIZ,IAAMC,GAAY,GAAAC,QAAO;AAAA;AAAA;AAAA,EAKnBC,GAAgB,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAQhBE,EAAK,CAAC,CAAC;AAAA;ECjB3B,IAAAC,GAAsC,oBCAtC,IAAAC,GAAoB,oBAEdC,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwCvBC,GAAQD,GDrCf,IAAME,GAA0B,CAC9BC,EACAC,EACAC,EACAC,OAEA,aAAqCC,GAAuB,CAC1D,UAAW,CACT,GAAAJ,EACA,OAAQC,EACR,eAAgBC,EAChB,gBAAiBC,CACnB,EACA,KAAMD,IAAmB,QAAaC,IAAoB,QAAaF,IAAa,MACtF,CAAC,EAEII,GAAQN,GErBR,IAAMO,GAAcC,GAAgBA,EAAI,8BAA8B,KAAKA,CAAC,EAAI,GjByBvF,IAAAC,GAA+B,mBAczBC,GAAiB,CAAC,CAAE,GAAAC,EAAI,OAAAC,EAAQ,QAAAC,EAAS,iBAAAC,CAAiB,IAAsB,CACpF,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAMC,CAAO,KAAI,YAAmB,CACzC,IAAK,GACL,iCACF,CAAC,EACK,CAACC,EAASC,CAAU,KAAI,YAAmB,EAC3C,CAAE,QAAAC,EAAS,KAAAC,EAAM,MAAAC,CAAM,EAAIC,GAC/BZ,EACAC,GAAQ,GAAKA,GAAQ,GAAK,OAC1BY,GAAWN,GAAS,GAAG,EAAIA,GAAS,IAAM,OAC1CA,GAAS,eACX,EAEMO,KAAc,eACjBC,GAA2CT,EAAQ,CAAE,GAAGD,EAAM,IAAKU,EAAE,cAAc,KAAM,CAAC,EAC3F,CAACV,CAAI,CACP,EAEMW,KAA0B,eAC7BD,GACCT,EAAQ,CAAE,GAAGD,EAAM,gBAAiBU,EAAE,cAAc,KAAyB,CAAC,EAChF,CAACV,CAAI,CACP,EAEMY,KAAmB,eAAY,IAAM,CACzCC,EAAO,QAAQ,mBAAmB,EAClCV,EAAWH,CAAI,CACjB,EAAG,CAACA,CAAI,CAAC,EAEHc,KAAY,eACfJ,GAA6C,CACxCA,EAAE,UAAY,IAAMF,GAAWR,EAAK,GAAG,GAAK,CAACI,GAC/CQ,EAAiB,CAErB,EACA,CAACZ,CAAI,CACP,EAEMe,EAAyB,CAC7B,CAAE,wBAAwC,YAAa,UAAW,EAClE,CAAE,2BAA2C,YAAa,aAAc,EACxE,CAAE,2BAA2C,YAAa,aAAc,EACxE,CAAE,2BAA2C,YAAa,aAAc,EACxE,CAAE,iBAAiC,YAAa,OAAQ,CAC1D,EAEA,OACE,EAAAC,QAAA,cAACC,EAAA,CAAM,MAAOlB,EAAE,gBAAgB,EAAG,QAASF,IACxCC,GAAkB,aAAeA,GAAkB,WACnD,EAAAkB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACG,GAAA,KACErB,EAAiB,aAChB,EAAAkB,QAAA,cAACI,GAAA,KACC,EAAAJ,QAAA,cAACK,EAAA,KACC,EAAAL,QAAA,cAAC,SAAGlB,EAAiB,WAAY,CACnC,CACF,EAEDA,EAAiB,UAChB,EAAAkB,QAAA,cAACM,GAAA,KACC,EAAAN,QAAA,cAACO,GAAA,CACC,KAAMzB,EAAiB,SACvB,IAAKA,EAAiB,MAAQC,EAAE,iBAAiB,EACjD,KAAI,GACN,CACF,CAEJ,CACF,EAGF,EAAAiB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACQ,GAAA,KACC,EAAAR,QAAA,cAACS,EAAA,KACC,EAAAT,QAAA,cAACU,GAAA,KACC,EAAAV,QAAA,cAACW,GAAA,KACC,EAAAX,QAAA,cAACY,GAAA,CAAW,QAAQ,kCACjB7B,EAAE,qBAAqB,CAC1B,EACA,EAAAiB,QAAA,cAACa,GAAA,CACC,YAAY,4BACZ,MAAO9B,EAAE,qBAAqB,EAC9B,MAAOC,EAAK,IACZ,SAAUS,EACV,UAAWK,EACX,GAAG,iCACL,CACF,EACA,EAAAE,QAAA,cAACW,GAAA,KACC,EAAAX,QAAA,cAACY,GAAA,CAAW,QAAQ,2BACjB7B,EAAE,4BAA4B,CACjC,EACA,EAAAiB,QAAA,cAACc,GAAA,CACC,MAAO9B,EAAK,gBACZ,SAAUW,EACV,QAASI,EACT,KAAK,MACL,MAAOhB,EAAE,4BAA4B,EACvC,CACF,CACF,CACF,EACA,EAAAiB,QAAA,cAACS,EAAA,KACC,EAAAT,QAAA,cAACe,GAAA,CACC,UAAS,GACT,SAAU,CAACvB,GAAWR,EAAK,GAAG,GAAKI,EACnC,QAASQ,GAET,EAAAI,QAAA,cAACgB,EAAA,KAAejC,EAAE,qBAAqB,CAAE,CAC3C,CACF,CACF,EACC,GAOD,EAAAiB,QAAA,cAACQ,GAAA,KACC,EAAAR,QAAA,cAACK,EAAA,CAAQ,MAAK,IACZ,EAAAL,QAAA,cAAC,SAAGjB,EAAE,yCAAyC,CAAE,CACnD,CACF,CACF,EAECK,GACC,EAAAY,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACiB,GAAA,IAAO,CACV,EAGD3B,GACC,EAAAU,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACkB,GAAA,CAAS,SAAS,QAAQ,KAAI,GAAC,QAASnC,EAAE,0BAA0B,GAAK,QACvEA,EAAE,8BAA8B,CACnC,CACF,EAGF,EAAAiB,QAAA,gBAAAA,QAAA,cACGX,GAAM,YACL,EAAAW,QAAA,cAACE,EAAA,KACEb,GAAM,WAAW,IAAK8B,GACrB,EAAAnB,QAAA,cAACE,EAAA,CAAO,IAAKiB,EAAU,MACrB,EAAAnB,QAAA,cAACoB,GAAA,CACC,QAAS,GAAGC,EAAgBF,EAAU,KAAK,CAAC,IAAIA,EAAU,IAAI,GAC9D,YAAaA,EAAU,MAEvB,EAAAnB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,gBAAAA,QAAA,cACGmB,EAAU,aACT,EAAAnB,QAAA,cAACS,EAAA,KACC,EAAAT,QAAA,cAACK,EAAA,KACC,EAAAL,QAAA,cAAC,SAAGmB,EAAU,WAAY,CAC5B,CACF,CAEJ,EACA,EAAAnB,QAAA,gBAAAA,QAAA,cACGmB,EAAU,KACT,EAAAnB,QAAA,cAACS,EAAA,KACC,EAAAT,QAAA,cAACsB,EAAA,CACC,GAAG,IACH,KAAMH,EAAU,KAAO,GACvB,OAAO,SACP,IAAI,+BACJ,MAAOpC,EAAE,yCAAyC,GAAK,IAEtDA,EAAE,yCAAyC,CAC9C,CACF,CAEJ,CACF,EACCoC,EAAU,OAASA,EAAU,MAAM,OAAS,GAC3C,EAAAnB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACuB,GAAA,KAAIxC,EAAE,wBAAwB,CAAE,EAChCoC,EAAU,MAAM,IAAKK,GACpB,EAAAxB,QAAA,cAACQ,GAAA,CAAY,IAAKgB,EAAK,MAAQ,IAC7B,EAAAxB,QAAA,cAACyB,GAAA,CAAW,MAAOD,EAAK,MAAQ,IAAKA,EAAK,WAAY,CACxD,CACD,CACH,EAEDL,EAAU,QAAUA,EAAU,OAAO,OAAS,GAC7C,EAAAnB,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACuB,GAAA,KAAIxC,EAAE,0BAA0B,CAAE,EAClCoC,EAAU,OAAO,IAAKO,GACrB,EAAA1B,QAAA,cAACQ,GAAA,CAAY,IAAKkB,EAAM,OAAS,IAC/B,EAAA1B,QAAA,cAAC2B,GAAA,KACC,EAAA3B,QAAA,cAAC4B,GAAA,KACC,EAAA5B,QAAA,cAACyB,GAAA,CAAW,MAAOC,EAAM,OAAS,IAAKA,EAAM,WAAY,CAC3D,EACA,EAAA1B,QAAA,cAAC4B,GAAA,KACC,EAAA5B,QAAA,cAAC6B,GAAA,KAAgB,IACbH,EAAM,MAAM,IAAEA,EAAM,IACxB,CACF,CACF,CACF,CACD,CACH,CAEJ,CACF,CACD,CACH,CAEJ,CACF,CAEJ,EAEOI,GAAQpD,GDtPf,IAAAqD,GAA+B,mBAQzBC,GAAY,CAAC,CAAE,GAAAC,EAAI,OAAAC,EAAQ,iBAAAC,CAAiB,IAAwB,CACxE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,aAAS,EAAK,EAClCC,KAAc,gBAAY,IAAMD,EAAS,CAACD,CAAK,EAAG,CAACA,CAAK,CAAC,EAC/D,OAAKF,EAAiB,OAKpB,GAAAK,QAAA,iBAAAA,QAAA,cACGH,GACC,GAAAG,QAAA,cAACC,GAAA,CACC,GAAIR,EACJ,OAAQC,EACR,QAASK,EACT,iBAAkBJ,EAAiB,CAAC,EACtC,EAEF,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KAAeR,EAAE,mBAAmB,CAAE,CACzC,EACA,GAAAI,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,iBAAAA,QAAA,cACGL,EAAiB,IAAI,CAACU,EAAiBC,IACtC,GAAAN,QAAA,cAACO,GAAA,CACC,IAAK,GAAGF,EAAgB,GAAG,IAAIC,CAAK,GACpC,KAAMD,EAAgB,UAAY,OAClC,QAASA,EAAgB,MAAQT,EAAE,iBAAiB,GAEpD,GAAAI,QAAA,cAACQ,GAAA,KAAkBZ,EAAE,wBAAwB,CAAE,EAC/C,GAAAI,QAAA,cAACS,GAAA,KACC,GAAAT,QAAA,cAAC,SACC,GAAAA,QAAA,cAACU,EAAA,CAAa,QAASX,GAAcH,EAAE,wBAAwB,CAAE,CACnE,CACF,CACF,CACD,CACH,CACF,CACF,CACF,EApCO,IAsCX,EAEOe,GAAQnB,GmB7Df,IAAAoB,GAA6C,gBAM7C,IAAAC,GAAuB,YCNvB,IAAAC,GAAkB,gBAQlB,IAAAC,GAAuB,YACvBC,GAA+B,mBAOzBC,GAAqB,CAAC,CAAE,QAAAC,EAAS,iBAAAC,CAAiB,IAA0B,CAChF,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,EAAA,CAAM,MAAOH,GAAkB,iBAAmBC,EAAE,gBAAgB,EAAG,QAASF,GAC9EC,GAAkB,iBACjB,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,EAAA,CACC,wBAAyB,CACvB,UAAQ,WAAOL,EAAiB,eAAe,CACjD,EACD,CACH,EAEDA,GAAkB,KACjB,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,EAAA,CACC,GAAG,IACH,KAAMN,EAAiB,IACvB,MAAOC,EAAE,qCAAqC,GAAK,GACnD,OAAO,SACP,IAAI,uBAEHA,EAAE,qCAAqC,CAC1C,CACF,EAEDD,GAAkB,UACjB,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACK,GAAA,CACC,KAAMP,EAAiB,SACvB,IAAKA,EAAiB,MAAQC,EAAE,iBAAiB,EACjD,KAAI,GACN,CACF,CAEJ,CAEJ,EAEOO,GAAQV,GD7Cf,IAAAW,GAA+B,mBAMzBC,GAAY,CAAC,CAAE,iBAAAC,CAAiB,IAAwB,CAC5D,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,aAAS,EAAK,EAClCC,KAAc,gBAAY,IAAMD,EAAS,CAACD,CAAK,EAAG,CAACA,CAAK,CAAC,EAC/D,OAAKD,EAAiB,OAKpB,GAAAI,QAAA,iBAAAA,QAAA,cACGH,GAAS,GAAAG,QAAA,cAACC,GAAA,CAAmB,QAASF,EAAa,iBAAkBH,EAAiB,CAAC,EAAG,EAC3F,GAAAI,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACER,EAAiB,CAAC,GAAG,iBAAmB,EAAE,gBAAgB,CAC7D,CACF,EACA,GAAAI,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,iBAAAA,QAAA,cACGJ,EAAiB,IAAI,CAACS,EAAiBC,IACtC,GAAAN,QAAA,cAACO,GAAA,CACC,IAAK,GAAGF,EAAgB,GAAG,IAAIC,CAAK,GACpC,KAAMD,EAAgB,UAAY,OAClC,QAASA,EAAgB,MAAQ,EAAE,iBAAiB,GAEnDA,EAAgB,aACf,GAAAL,QAAA,cAACQ,EAAA,CACC,wBAAyB,CACvB,UAAQ,WAAOH,EAAgB,WAAW,CAC5C,EACF,EAEF,GAAAL,QAAA,cAACS,GAAA,KACC,GAAAT,QAAA,cAAC,SACC,GAAAA,QAAA,cAACU,EAAA,CAAa,QAASX,GAAc,EAAE,wBAAwB,CAAE,CACnE,CACF,CACF,CACD,CACH,CACF,CACF,CACF,EArCO,IAuCX,EAEOY,GAAQhB,GpBnDf,IAAMiB,GAAmB,CAAC,CAAE,GAAAC,EAAI,OAAAC,EAAQ,iBAAAC,CAAiB,IAClDA,EAAiB,QAIlBA,EAAiB,OAAS,EACxBA,EAAiB,CAAC,EAAE,kBAAoBA,EAAiB,CAAC,EAAE,uBACvD,GAAAC,QAAA,cAACC,GAAA,CAAU,GAAIJ,EAAI,OAAQC,EAAQ,iBAAkBC,EAAkB,EAEzE,GAAAC,QAAA,cAACE,GAAA,CAAc,iBAAkBH,EAAkB,EAPnD,KAaJI,GAAQP,GsB1Bf,IAAAQ,GAAkB,gBAClBC,GAAuB,YACvBC,GAA+B,mBAc/B,IAAMC,GAA4B,CAAC,CAAE,cAAAC,CAAc,IAAiC,CAClF,GAAM,CAAE,CAAE,KAAI,mBAAe,EAC7B,OAAKA,EAKH,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAG,SAAQ,IAAEJ,EAAc,KAAM,CACpC,EACCA,EAAc,aACb,GAAAC,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,EAAA,CAAQ,wBAAyB,CAAE,UAAQ,WAAOL,EAAc,WAAW,CAAE,EAAG,CACnF,EAEDA,EAAc,MAAM,KACnB,GAAAC,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACK,EAAA,CACC,GAAG,IACH,KAAMN,EAAc,KAAK,IACzB,OAAO,SACP,IAAI,uBAEHA,EAAc,KAAK,MAAQA,EAAc,KAAK,MAAQ,EAAE,uBAAuB,CAClF,CACF,EAEDA,EAAc,OACb,GAAAC,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACM,GAAA,CAAQ,KAAMP,EAAc,MAAO,IAAK,EAAE,iBAAiB,GAAK,GAAI,KAAI,GAAC,CAC5E,CAEJ,EA9BO,IAgCX,EAEOQ,GAAQT,GCrDf,IAAAU,EAAwD,gBCAxD,IAAAC,GAAmC,gBCAnC,IAAAC,GAA6C,gBAG7C,IAAAC,GAA+B,mBAUzBC,GAAa,CAAC,CAAE,MAAAC,EAAO,MAAAC,EAAO,KAAAC,EAAM,eAAAC,EAAgB,aAAAC,CAAa,IAAuB,CAC5F,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EAEtCC,KAAgB,gBAAY,IAAM,CAClCJ,GACFA,EAAa,CAEjB,EAAG,CAAC,CAAC,EAECK,KAAU,gBAAY,IAAM,CAC3BH,IACHC,EAAW,EAAI,EACXJ,GACFA,EAAe,EAGrB,EAAG,CAACG,CAAO,CAAC,EAENI,EACJR,IAAS,MACLG,EAAE,yBAAyB,EAC3BH,IAAS,SACTG,EAAE,0BAA0B,EAC5B,GAEN,OACE,GAAAM,QAAA,cAACC,EAAA,KACEN,EACC,GAAAK,QAAA,cAACE,GAAA,CACC,QAASL,EACT,GAAG,IACH,KAAM,GAAGN,CAAI,IAAID,CAAK,GACtB,MAAO,GAAGS,CAAY,IAAIT,CAAK,GAC/B,UAAS,IAET,GAAAU,QAAA,cAACG,EAAA,KAAeb,CAAM,CACxB,EAEA,GAAAU,QAAA,cAACE,GAAA,CAAgB,QAASJ,EAAS,MAAOT,EAAO,UAAS,IACxD,GAAAW,QAAA,cAACG,EAAA,KAAed,CAAM,CACxB,CAEJ,CAEJ,EAEOe,GAAQhB,GC5Df,IAAAiB,GAAyD,4BCAzD,IAAMC,GAAW,CACf,QAAS,SACT,sBAAuB,CAAE,GAAM,CAAC,IAAI,CAAE,EACtC,UAAW,CACT,GAAI,CACF,KACA,KACA,0EACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAE,EACf,CACE,CAAC,6BAA8B,WAAY,CAAC,IAAI,EAAG,MAAO,EAAG,UAAU,EACvE,CAAC,mBAAoB,QAAS,CAAC,eAAe,EAAG,MAAO,EAAG,OAAO,EAClE,CACE,2BACA,WACA,CAAC,wCAAwC,EACzC,MACA,EACA,UACF,EACA,CAAC,kCAAmC,cAAe,CAAC,GAAG,EAAG,MAAO,EAAG,aAAa,EACjF,CACE,6BACA,WACA,CACE,sHACF,EACA,MACA,EACA,UACF,EACA,CAAC,6BAA8B,WAAY,CAAC,eAAe,EAAG,MAAO,EAAG,UAAU,EAClF,CACE,qCACA,cACA,CAAC,mDAAmD,EACpD,MACA,EACA,aACF,EACA,CAAC,mCAAoC,cAAe,CAAC,MAAM,EAAG,MAAO,EAAG,aAAa,EACrF,CAAC,gCAAiC,cAAe,CAAC,GAAG,EAAG,MAAO,EAAG,aAAa,EAC/E,CACE,mCACA,cACA,CAAC,+EAA+E,EAChF,MACA,EACA,aACF,EACA,CAAC,mCAAoC,cAAe,CAAC,GAAG,EAAG,MAAO,EAAG,aAAa,EAClF,CACE,2CACA,iBACA,CAAC,MAAM,EACP,MACA,EACA,gBACF,CACF,EACA,IACA,EACA,EACA,EACA,EACA,EACA,CACE,CACE,meACA,CAAC,EAAG,EAAG,CAAC,CACV,EACA,CAAC,iBAAkB,CAAC,CAAC,CAAC,EACtB,CAAC,aAAc,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,EAC3B,CAAC,uCAAwC,CAAC,EAAG,EAAG,EAAG,EAAE,CAAC,EACtD,CAAC,gBAAiB,CAAC,CAAC,CAAC,EACrB,EACA,CAAC,gBAAiB,CAAC,CAAC,CAAC,EACrB,CAAC,iBAAkB,CAAC,CAAC,CAAC,EACtB,EACA,CAAC,gBAAiB,CAAC,CAAC,CAAC,CACvB,CACF,CACF,EACA,cAAe,CAAC,CAClB,EAEOC,GAAQD,GDlFf,IAAME,GAAgBC,GAETC,GAAqBC,GAAiB,CACjD,GAAI,CAKF,SAJe,+BACbA,EAAK,QAAQ,IAAK,EAAE,EAAE,QAAQ,KAAM,EAAE,EACtCH,EACF,GACe,eAAe,GAAKG,CACrC,MAAY,CACV,OAAOA,CACT,CACF,EFVA,IAAAC,GAA+B,mBAOzBC,GAAa,CAAC,CAAE,QAAAC,EAAS,OAAAC,CAAO,IAAuB,CAC3D,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAAQH,GAAS,OAASC,GAAQ,SAAS,MAC3CG,EAAcJ,GAAS,aAAeC,GAAQ,SAAS,YAEvDI,KAAqB,gBAAY,IAAMC,EAAO,QAAQ,aAAa,EAAG,CAAC,CAAC,EACxEC,KAAsB,gBAAY,IAAMD,EAAO,QAAQ,oBAAoB,EAAG,CAAC,CAAC,EAChFE,KAAoB,gBAAY,IAAMF,EAAO,QAAQ,iBAAiB,EAAG,CAAC,CAAC,EAEjF,MAAI,CAACH,GAAS,CAACC,EACN,KAIP,GAAAK,QAAA,iBAAAA,QAAA,cACGN,GACC,GAAAM,QAAA,cAACC,GAAA,CACC,eAAgBL,EAChB,MAAOH,EAAE,wBAAwB,EACjC,MAAOC,EACP,KAAK,SACP,EAEDC,GACC,GAAAK,QAAA,cAACC,GAAA,CACC,MAAOR,EAAE,8BAA8B,EACvC,MAAOS,GAAkBP,CAAW,EACpC,KAAK,MACL,eAAgBG,EAChB,aAAcC,EAChB,CAEJ,CAEJ,EAEOI,GAAQb,GIjDf,IAAAc,GAA4B,4BASrB,IAAMC,GAAS,GAAAC,QAAO;AAAA;AAAA;AAAA,IAGzB,CAAC,CAAE,KAAAC,CAAK,IACRA,GACA;AAAA;AAAA,KAEC;AAAA;AAAA,IAED,CAAC,CAAE,SAAAC,CAAS,IACZA,GACA;AAAA;AAAA,KAEC;AAAA,EAaQC,GAAU,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA,IAI1B,CAAC,CAAE,OAAAI,CAAO,IACVA,IAAW,MACP;AAAA;AAAA,UAGAA,IAAW,SACX;AAAA;AAAA,UAGA;AAAA;AAAA,SAEC;AAAA;AAAA,IAEL,CAAC,CAAE,MAAAC,CAAM,IACTA,IAAU,MACN;AAAA;AAAA,UAGAA,IAAU,SACV;AAAA;AAAA,UAGA;AAAA;AAAA,SAEC;AAAA;AAAA,IAEL,CAAC,CAAE,SAAAC,CAAS,IACZA,GACA;AAAA,gBACYC,EAAKD,EAAW,EAAE,CAAC;AAAA;AAAA,YAEvBP,EAAM;AAAA,mBACCQ,EAAKD,EAAW,CAAC,CAAC;AAAA;AAAA,KAEhC;AAAA;AAAA,IAED,CAAC,CAAE,SAAAE,CAAS,IACZA,GACA;AAAA;AAAA,KAEC;AAAA;AAAA,IAED,CAAC,CAAE,WAAAC,CAAW,IACdA,GACA;AAAA;AAAA,KAEC;AAAA;AAAA,IAED,CAAC,CAAE,UAAAC,CAAU,IACbA,GACA;AAAA,QACKC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,KAGzC;AAAA;AAAA,IAED,CAAC,CAAE,UAAAC,CAAU,IACbA,GACA;AAAA,QACKD,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,KAGzC;ECrGL,IAAAE,GAA4B,4BAQrB,IAAMC,GAAiB,GAAAC,QAAO;AAAA,WAC1BC,EAAK,CAAC,CAAC;AAAA,YACNA,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,IAGf,CAAC,CAAE,MAAAC,CAAM,IACTA,IAAU,UACN;AAAA,8BACuBC,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;AAAA,UAE9DD,IAAU,UACV;AAAA,8BACuBC,GAAUA,EAAM,MAAM,MAAM,GAAG,OAAO;AAAA,UAE7DD,IAAU,QACV;AAAA,8BACuBC,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;AAAA,UAE9D;AAAA,8BACuBA,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA,SACjE;EC5BT,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAO,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,EAMdC,GAAO,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKTE,EAAK,EAAG,CAAC;AAAA;AAAA,EAIdC,GAAO,GAAAH,QAAO,IAAI,MAAM,KAAO,CAC1C,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,EAOWI,GAAQ,GAAAJ,QAAO;AAAA,6BACCE,EAAK,CAAC,CAAC;EDpB7B,IAAMG,GAAoB,CAAC,CAAE,SAAAC,CAAS,IAC3C,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAU,MAAK,GAAC,CACnB,EACA,GAAAH,QAAA,cAACI,GAAA,KAAOL,CAAS,CACnB,EAGIM,GAAgB,CAAC,CAAE,SAAAN,CAAS,IAAsB,GAAAC,QAAA,cAACM,GAAA,KAAMP,CAAS,EAEjEQ,GAAQF,GEpBf,IAAAG,GAA6C,gBCA7C,IAAAC,GAAmB,4BAKZ,IAAMC,GAAU,GAAAC,QAAO;AAAA,aACjBC,EAAK,GAAG,CAAC,IAAIA,EAAK,CAAC,CAAC;AAAA,sBACVC,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA,EAKhDC,GAAS,GAAAH,QAAO;AAAA;AAAA;AAAA,EAKhBI,GAAO,GAAAJ,QAAO;AAAA;AAAA,gBAEXC,EAAK,CAAC,CAAC;AAAA,EAGVI,GAAO,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA,EAMdM,GAAS,GAAAN,QAAO;AAAA;AAAA,kBAEXC,EAAK,GAAG,CAAC;AAAA;AAAA,EAIdM,GAAc,GAAAP,QAAO;AAAA;AAAA,mBAEfC,EAAK,GAAI,CAAC;AAAA;AAAA,EAIhBO,MAAU,GAAAR,SAAOS,CAAW,EAAE,MAAM,KAAO,CACtD,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOSR,EAAK,GAAI,CAAC;AAAA,cACPA,EAAK,GAAI,CAAC;AAAA,YACZA,EAAK,GAAI,CAAC;AAAA,aACTA,EAAK,GAAI,CAAC;AAAA,wBACEC,GAAUA,EAAM,MAAM,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBlDQ,GAAQ,GAAAV,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;EDvEF,IAAAW,GAA+B,mBAUzBC,GAAY,CAAC,CAAE,MAAAC,EAAO,KAAAC,EAAM,YAAAC,EAAa,SAAAC,EAAU,QAAAC,CAAQ,IAAa,CAC5E,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAMC,CAAO,KAAI,aAAS,EAAK,EAChCC,KAAe,gBAAY,IAAMD,EAAQ,CAACD,CAAI,EAAG,CAACA,CAAI,CAAC,EAE7D,OACE,GAAAG,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,KAAOd,CAAM,CAChB,EACCG,GACC,GAAAM,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACM,GAAA,CAAQ,QAASP,EAAc,MAAOH,EAAE,wBAAwB,GAAK,IACpE,GAAAI,QAAA,cAACO,GAAA,CAAS,MAAK,GAAC,CAClB,CACF,CAEJ,EACCd,GACC,GAAAO,QAAA,cAACQ,GAAA,KACC,GAAAR,QAAA,cAACS,EAAA,CAAa,QAASd,EAAS,MAAOF,GACpCA,CACH,CACF,CAEJ,EACCD,GAAQ,GAAAQ,QAAA,cAACU,GAAA,KAAMlB,CAAK,CACvB,EACCK,GACC,GAAAG,QAAA,cAACW,EAAA,CAAM,MAAOpB,EAAO,QAASQ,GAC3BL,CACH,CAEJ,CAEJ,EAEOkB,GAAQtB,GExDf,IAAAuB,GAAyD,gBCAzD,IAAAC,GAA8B,WAOjBC,MAAwB,kBAA0C,CAC7E,oBAAsBC,GAAM,CAAC,CAC/B,CAAC,EDCD,IAAAC,GAA+B,mBAQzBC,GAAc,CAAC,CAAE,QAAAC,EAAS,YAAAC,EAAa,QAAAC,CAAQ,IAAwB,CAC3E,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAAE,iBAAAC,EAAkB,oBAAAC,CAAoB,KAAI,eAAWC,EAAqB,EAC5E,CAACC,EAAYC,CAAa,KAAI,aAASJ,CAAgB,EAEvDK,KAAY,gBAAaC,GAAe,CACxCA,GACFL,EAAoBK,CAAE,CAE1B,EAAG,CAAC,CAAC,EAECC,KAAW,gBACdC,GAA4CJ,EAAcI,EAAE,cAAc,KAAK,EAChF,CAAC,CACH,EAEA,OAAKL,EAKH,GAAAM,QAAA,cAACC,EAAA,CAAM,MAAOX,EAAE,mBAAmB,EAAG,QAASD,GAC7C,GAAAW,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAAC,SAAGV,EAAE,8BAA8B,CAAE,CACxC,CACF,EACA,GAAAU,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACK,GAAA,KAAYf,EAAE,mBAAmB,CAAE,EACpC,GAAAU,QAAA,cAACM,GAAA,CACC,MAAOZ,EACP,SAAUI,EACV,QAASV,GAAa,IAAKmB,IAAO,CAChC,MAAOA,EAAE,GACT,YAAaA,EAAE,IACjB,EAAE,EACF,MAAOjB,EAAE,mBAAmB,EAC9B,CACF,CACF,EACA,GAAAU,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACQ,GAAA,CACC,SAAUrB,EACV,UAAS,GACT,QAAS,IAAMS,EAAUF,CAAU,EACnC,MAAOJ,EAAE,2BAA2B,GAAK,IAEzC,GAAAU,QAAA,cAACS,EAAA,KAAenB,EAAE,eAAe,CAAE,CACrC,CACF,CACF,EAlCO,IAoCX,EAEOoB,GAAQxB,GEzEf,IAAAyB,GAAkB,gBAClBC,GAAuB,YAyBvB,IAAMC,GAAqB,CAAC,CAAE,cAAAC,EAAe,QAAAC,CAAQ,IACnD,GAAAC,QAAA,cAACC,EAAA,CAAM,MAAOH,EAAc,OAAS,GAAI,QAASC,GAC/CD,EAAc,OACb,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAQ,KAAML,EAAc,MAAO,IAAKA,EAAc,OAAS,OAAW,KAAI,GAAC,CAClF,EAEDA,EAAc,aACb,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,EAAA,CAAQ,wBAAyB,CAAE,UAAQ,WAAON,EAAc,WAAW,CAAE,EAAG,CACnF,EAEDA,EAAc,MAAM,MAAQA,EAAc,KAAK,OAC9C,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACK,EAAA,CACC,GAAG,IACH,KAAMP,EAAc,KAAK,KACzB,OAAO,SACP,IAAI,gCAEHA,EAAc,KAAK,KACtB,CACF,CAEJ,EAGKQ,GAAQT,GbjCf,IAAAU,GAAmB,oCACnBC,GAAe,uCACfC,GAA+B,mBAazBC,GAAY,CAAC,CACjB,aAAAC,EACA,eAAAC,EACA,UAAAC,EACA,OAAAC,EACA,QAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,6BAAAC,CACF,IAAiB,CACf,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAaC,CAAc,KAAI,YAAS,EAAK,EAC9CC,KAAkB,eAAY,IAAMD,EAAe,EAAI,EAAG,CAAC,CAAC,EAC5DE,KAAmB,eAAY,IAAMF,EAAe,EAAK,EAAG,CAAC,CAAC,EAE9D,CAACG,EAAOC,CAAQ,KAAI,YAAiC,EACrDC,KAAS,eAAaC,GAAsCF,EAASE,CAAS,EAAG,CAAC,CAAC,EACnFC,KAAU,eAAY,IAAMH,EAAS,MAAS,EAAG,CAAC,CAAC,KAEzD,aAAU,IAAM,EACTX,GAAUC,IAAYK,GACzBC,EAAe,EAAK,CAExB,EAAG,CAACP,EAAQC,CAAO,CAAC,EAEpB,IAAMc,EAAgBlB,GAAc,cAEpC,OACE,EAAAmB,QAAA,gBAAAA,QAAA,cACGV,GACC,EAAAU,QAAA,cAACC,GAAA,CACC,QAASb,EACT,YAAaJ,GAAQ,YACrB,QAASS,EACX,EAEDC,GAAS,EAAAM,QAAA,cAACE,GAAA,CAAmB,cAAeR,EAAO,QAASI,EAAS,EACtE,EAAAE,QAAA,cAACG,EAAA,KACEpB,GAAaA,EAAU,SACtB,EAAAiB,QAAA,cAACI,EAAA,KACC,EAAAJ,QAAA,cAACK,GAAA,CAAc,SAAU,CAAC,CAACtB,EAAU,SAAU,UAAS,GAAC,QAASI,GAChE,EAAAa,QAAA,cAACM,EAAA,KAAejB,EAAE,wBAAwB,CAAE,CAC9C,CACF,EAEDN,GAAW,UACV,EAAAiB,QAAA,cAACI,EAAA,KACC,EAAAJ,QAAA,cAACO,GAAA,CACC,MAAOlB,EAAE,oBAAoB,EAC7B,KAAMA,EAAE,+BAA+B,GAAK,QAE5C,EAAAW,QAAA,cAACQ,EAAA,KACC,EAAAR,QAAA,cAAC,SAAGX,EAAE,6BAA6B,CAAE,CACvC,CACF,CACF,EAEF,EAAAW,QAAA,cAACS,GAAA,CAAW,OAAQzB,EAAQ,QAASC,EAAS,CAChD,EACA,EAAAe,QAAA,cAACG,EAAA,KACEjB,GAAiB,IAAI,KAAKA,CAAa,EAAE,QAAQ,EAAI,IAAI,KAAK,EAAE,QAAQ,GACvE,EAAAc,QAAA,cAACI,EAAA,KACC,EAAAJ,QAAA,cAACU,GAAA,CAAQ,SAAU,EAAG,OAAO,UAC3B,EAAAV,QAAA,cAACW,GAAA,CAAO,SAAQ,IACd,EAAAX,QAAA,cAACY,GAAA,CAAe,MAAM,UAAU,CAClC,EACA,EAAAZ,QAAA,cAACW,GAAA,KACC,EAAAX,QAAA,cAACa,GAAA,KACExB,EAAE,yBAA0B,CAC3B,QAAM,GAAAyB,SAAO,IAAI,KAAK5B,CAAa,EAAG,eAAgB,CAAE,OAAQ,GAAA6B,OAAG,CAAC,CACtE,CAAC,CACH,CACF,CACF,CACF,EAEF,EAAAf,QAAA,cAACI,EAAA,KACC,EAAAJ,QAAA,cAACgB,GAAA,KACEjB,GAAe,OACd,EAAAC,QAAA,cAACiB,GAAA,KACC,EAAAjB,QAAA,gBAAAA,QAAA,cACGX,EAAE,qBAAqB,EAAG,IAC3B,EAAAW,QAAA,cAACkB,EAAA,CACC,QAAS,IACPtB,EAAO,CACL,MAAOG,GAAe,MACtB,MAAOA,GAAe,MACtB,YAAaA,GAAe,YAC5B,KAAMA,GAAe,IACvB,CAAC,GAGFA,EAAc,KACjB,EAAgB,IACfV,EAAE,kBAAkB,EAAE,YAAY,CACrC,CACF,EAEDP,GAAgB,IAAI,CAACiB,EAAeoB,IACnC,EAAAnB,QAAA,cAACiB,GAAA,CAAkB,IAAKlB,EAAc,OAASoB,GAC7C,EAAAnB,QAAA,gBAAAA,QAAA,cACGX,EAAE,qBAAqB,EAAG,IAC3B,EAAAW,QAAA,cAACkB,EAAA,CACC,QAAS,IACPtB,EAAO,CACL,MAAOG,GAAe,MACtB,MAAOA,GAAe,MACtB,YAAaA,GAAe,YAC5B,KAAMA,GAAe,IACvB,CAAC,GAGFA,EAAc,KACjB,CACF,CACF,CACD,EACAhB,GAAW,kBACV,EAAAiB,QAAA,cAACiB,GAAA,KAAmB5B,EAAE,mBAAmB,CAAE,CAE/C,CACF,CACF,GACEL,GAAQ,YAAY,QAAU,GAAK,GACnC,EAAAgB,QAAA,cAACG,EAAA,KACC,EAAAH,QAAA,cAACO,GAAA,CACC,MAAOlB,EAAE,0BAA0B,EACnC,YAAaA,EAAE,mBAAmB,GAAK,GACvC,QAASG,GAET,EAAAQ,QAAA,cAACQ,EAAA,KACC,EAAAR,QAAA,cAAC,SAAGX,EAAE,qCAAqC,CAAE,CAC/C,CACF,CACF,CAEJ,CAEJ,EAEO+B,GAAQxC,Gc/Kf,IAAAyC,GAAmC,gBACnCC,GAA+B,mBCD/B,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAIZ,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,EAKjBC,GAAU,GAAAD,QAAO;AAAA;AAAA,EAIjBE,GAAS,GAAAF,QAAO;AAAA;AAAA,kBAEXG,EAAK,CAAC,CAAC;EDJzB,IAAMC,GAAgB,CAAC,CAAE,SAAAC,EAAU,QAAAC,EAAS,YAAAC,CAAY,IACtD,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAASL,CAAS,EAClBC,GAAWC,GACV,GAAAC,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAY,GAAG,IAAI,KAAK,IAAI,QAASN,GACpC,GAAAE,QAAA,cAACK,EAAA,KAAeN,CAAY,CAC9B,CACF,CAEJ,EAGKO,GAAQV,GExBf,IAAAW,EAAgE,gBCAhE,IAAAC,GAA4B,4BAQrB,IAAMC,GAAU,GAAAC,QAAO;AAAA,wBACNC,EAAK,CAAC,CAAC;AAAA,UACpBC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA;AAAA,IAEpCA,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,0BACdD,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAK7B,CAAC,CAAE,UAAAE,CAAU,IACbA,GACA;AAAA,cACWD,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,KAC5C;AAAA,EAGQE,GAAO,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMtBE,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc7BG,GAAO,GAAAL,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBvB,CAAC,CAAE,SAAAM,CAAS,IACZA,GACA;AAAA,QACIF,EAAI;AAAA,iBACK,IAAME,CAAQ;AAAA,qBACV,IAAMA,CAAQ;AAAA;AAAA,KAE9B;AAAA;AAAA,IAED,CAAC,CAAE,WAAAC,CAAW,IACdA,GACA;AAAA,QACKL,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,UAClCE,EAAI;AAAA,mBACK,IAAMG,CAAU;AAAA,uBACZ,IAAMA,CAAU;AAAA;AAAA;AAAA,KAGlC;AAAA;AAAA,IAED,CAAC,CAAE,WAAAC,CAAW,IACdA,GACA;AAAA,QACKN,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA,UAClCE,EAAI;AAAA,mBACK,IAAMI,CAAU;AAAA,uBACZ,IAAMA,CAAU;AAAA;AAAA;AAAA,KAGlC;AAAA,EAOQC,GAAc,GAAAT,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAK7BE,GAAUA,EAAM,MAAM,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAehC,CAAC,CAAE,SAAAQ,CAAS,IACZA,EACI;AAAA,2DAC+CT,EAAKS,CAAQ,CAAC;AAAA,cAE7D;AAAA,4BACiBR,GAAUA,EAAM,MAAM,KAAK,SAAS,OAAO;AAAA,aAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAML,CAAC,CAAE,SAAAQ,CAAS,IACZA,EACI;AAAA,0DAC8CT,EAAKS,CAAQ,CAAC;AAAA,cAE5D;AAAA,4BACiBR,GAAUA,EAAM,MAAM,KAAK,SAAS,MAAM;AAAA,aAC1D;AAAA;AAAA;AAAA;AAAA,IAIT,CAAC,CAAE,SAAAQ,CAAS,IACZA,GACA;AAAA,QACIL,EAAI;AAAA,qBACSJ,EAAKS,EAAW,CAAC,CAAC;AAAA;AAAA;AAAA,QAG/BN,EAAI;AAAA,qBACSH,EAAKS,EAAW,CAAC,CAAC;AAAA;AAAA,KAElC;AAAA,EAGCC,GAAS,GAAAX,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKjBE,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,EAK7BU,MAAU,GAAAZ,SAAOW,EAAM;AAAA;AAAA;AAAA,EAKvBE,MAAU,GAAAb,SAAOW,EAAM;AAAA;AAAA;EDzJpC,IAAMG,GAAe,CAAC,CACpB,MAAAC,EACA,YAAAC,EACA,QAAAC,EACA,QAAAC,EACA,UAAAC,EACA,UAAAC,EACA,SAAAC,CACF,IAAqB,CACnB,IAAMC,KAAkB,UAAgC,IAAI,EAEtDC,KAAS,eAAY,IAAM,CAC/B,IAAMC,EAAYF,EAAgB,SAAS,SAAS,CAAC,EAAE,aAAe,EAChEG,EAAaH,EAAgB,SAAS,YAAc,EAEtDG,EAAa,GACfH,EAAgB,SAAS,OAAO,CAC9B,KAAMG,EAAaD,EACnB,SAAU,QACZ,CAAC,CAEL,EAAG,CAAC,CAAC,EAECE,KAAS,eAAY,IAAM,CAC/B,IAAMF,EAAYF,EAAgB,SAAS,SAAS,CAAC,EAAE,aAAe,EAChEK,EAAcL,EAAgB,SAAS,aAAe,EACtDG,EAAaH,EAAgB,SAAS,YAAc,EACpDM,EAAuBN,EAAgB,SAAS,aAAe,EAClCK,EAAcC,IAEdH,GACjCH,EAAgB,SAAS,OAAO,CAC9B,KAAMG,EAAaD,EACnB,SAAU,QACZ,CAAC,CAEL,EAAG,CAAC,CAAC,EAGC,CAACK,EAAaC,CAAc,KAAI,YAAS,EAAI,EAC7C,CAACC,EAAaC,CAAc,KAAI,YAAS,EAAI,EAE7CC,EAAW,IAAM,CACrB,IAAMR,EAAaH,EAAgB,SAAS,YAAc,EACpDK,EAAcL,EAAgB,SAAS,aAAe,EACtDM,EAAuBN,EAAgB,SAAS,aAAe,EAC/DY,EAA6BP,EAAcC,EAEjDE,EAAeL,GAAc,CAAgB,EAC7CO,EAAeE,GAA8BT,CAAyB,CACxE,EAEA,sBAAU,KACRQ,EAAS,EACTX,EAAgB,SAAS,iBAAiB,SAAUW,CAAQ,EACrD,IAAMX,EAAgB,SAAS,oBAAoB,SAAUW,CAAQ,GAC3E,CAAC,CAAC,EAGH,EAAAE,QAAA,cAACC,GAAA,CAAQ,UAAWf,GAClB,EAAAc,QAAA,cAACE,GAAA,CAAY,SAAUpB,GACrB,EAAAkB,QAAA,cAACG,GAAA,CACC,IAAKhB,EACL,SAAUJ,EACV,WAAYC,EACZ,WAAYC,GAEXL,EAAM,IAAI,CAACwB,EAAMC,IAChB,EAAAL,QAAA,cAACM,GAAA,CAAK,IAAKzB,EAAc,GAAGA,CAAW,IAAIwB,CAAC,GAAK,sBAAsBA,CAAC,IACrED,CACH,CACD,CACH,CACF,EACC,CAACV,GACA,EAAAM,QAAA,cAACO,GAAA,KACC,EAAAP,QAAA,cAACQ,GAAA,CAAU,QAASpB,EAAQ,MAAM,YAChC,EAAAY,QAAA,cAACS,GAAA,IAAgB,CACnB,CACF,EAED,CAACb,GACA,EAAAI,QAAA,cAACU,GAAA,KACC,EAAAV,QAAA,cAACQ,GAAA,CAAU,QAASjB,EAAQ,MAAM,QAChC,EAAAS,QAAA,cAACW,GAAA,IAAiB,CACpB,CACF,CAEJ,CAEJ,EAEOC,GAAQjC,GE5Gf,IAAAkC,GAAsC,WCAtC,IAAAC,GAA8B,WAWjBC,MAAuB,kBAAyC,CAC3E,gBAAiB,GACjB,QAAS,GACT,MAAO,GACP,SAAU,OACV,aAAeC,GAAM,CAAC,CACxB,CAAC,EDbD,IAAMC,GAAmB,CAACC,EAAYC,IAAiC,CACrE,IAAMC,KAAO,eAAWC,EAAoB,EAE5C,uBAAU,IAAM,CACd,IAAMC,EAAe,IAAI,gBACzBA,EAAa,IAAI,OAAQ,GAAG,EACxBF,EAAK,iBAAmBF,GAC1BI,EAAa,IAAI,KAAMJ,CAAE,EAEvBC,GACFG,EAAa,IAAI,sCAAuC,MAAM,EAEhEF,EAAK,aAAaE,CAAY,CAChC,EAAG,CAACJ,CAAE,CAAC,EAEAE,CACT,EAEOG,GAAQN,GEpBf,IAAMO,GAAe,4EAERC,GAAsBC,GAAcA,EAAE,QAAQ,wBAAyB,MAAM,EAE7EC,GAAiBC,GACxB,CAACA,GAAQA,EACJJ,GAEC,IAAI,OAAO,GAAGC,GAAmBG,CAAI,CAAC,GAAGJ,GAAa,MAAM,GAAI,IAAI,EPgBhF,IAAMK,GAAU,CAAC,CACf,GAAAC,EACA,UAAAC,EACA,UAAAC,EACA,mBAAAC,EACA,kBAAAC,EACA,kBAAAC,CACF,IAAoB,CAClB,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAAE,QAAAC,EAAS,SAAAC,EAAU,gBAAAC,CAAgB,EAAIC,GAAiBV,EAAI,CAAC,CAACG,CAAkB,EAElFQ,KAAgB,gBAAaX,GAAe,CAChDY,EAAO,QAAQ,cAAeZ,CAAE,EAC5BK,GACFA,EAAkBL,CAAE,CAExB,EAAG,CAAC,CAAC,EAEL,MAAI,CAACQ,GAAU,aAAa,UAAU,QAAUA,GAAU,aAAa,UAAU,SAAW,EACnF,KAGLD,EACK,GAAAM,QAAA,cAACC,GAAA,IAAO,EAIf,GAAAD,QAAA,cAACE,GAAA,CAAY,OAAM,GAAC,MAAK,GAAC,UAAU,wCAClC,GAAAF,QAAA,cAACG,GAAA,KACEP,EACC,GAAAI,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAc,QAAS,IAAM,CAAC,GAC7B,GAAAL,QAAA,cAACM,GAAA,CAAG,SAAQ,IAAEb,EAAE,sBAAsB,CAAE,CAC1C,CACF,EAEA,GAAAO,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAc,QAAS,IAAM,CAAC,EAAG,YAAY,aAC5C,GAAAL,QAAA,cAACM,GAAA,CAAG,SAAQ,IAAEb,EAAE,qBAAqB,CAAE,CACzC,CACF,EAGF,GAAAO,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACO,GAAA,CACC,SAAQ,GACR,QAAS,KACT,UAAW,IACX,UAAW,EACX,QAAS,EACT,MAAOZ,GAAU,aAAa,UAAU,IAAKa,GAAa,CACxD,IAAMC,EAASpB,EAAY,IAAIA,CAAS,GAAK,IAEvCqB,EAAIC,GAAc,EAElBC,EACJ,OAAO,SAAS,WAAa,IACzB,GAAGH,CAAM,GAAGD,EAAS,GAAG,GACxBE,EAAE,KAAK,GAAGrB,CAAS,GAAGF,CAAE,EAAE,EAC1B,OAAO,SAAS,SAAS,QAAQuB,EAAGF,EAAS,GAAG,EAChD,GAAG,OAAO,SAAS,QAAQ,GAAGC,CAAM,GAAGD,EAAS,GAAG,GAEzD,OACE,GAAAR,QAAA,cAACa,GAAA,CACC,IAAKL,EAAS,IACd,GAAIA,EAAS,IACb,QAASV,EACT,MAAOU,EAAS,MAChB,KAAMnB,EAAYuB,EAAexB,EAAY,IAAIoB,EAAS,GAAG,GAAK,OAClE,MAAOA,EAAS,eAAe,QAAQ,CAAC,GAAG,IAC3C,YAAaA,EAAS,iBACtB,WAAYjB,EAAoBiB,EAAS,WAAW,CAAC,GAAG,KAAO,OAC/D,QAAS,CACP,CACE,MAAOA,EAAS,SAClB,EACA,CACE,MAAO,GAAGM,EACRN,EAAS,iBAAiB,OAASA,EAAS,OAC9C,CAAC,IAAIf,EAAE,YAAYe,EAAS,iBAAiB,MAAQ,kBAAkB,EAAE,CAAC,EAC5E,EACA,CACE,MAAOA,EAAS,WAClB,EACA,CACE,MAAOA,EAAS,QAClB,CACF,EACA,MAAO,GAAGM,EAAgBN,EAAS,KAAK,CAAC,IAAIf,EAAE,kBAAkB,CAAC,GAClE,SACEe,EAAS,WAAa,QAAaA,EAAS,MAAQA,EAAS,SACzD,GAAGM,EAAgBN,EAAS,QAAQ,CAAC,IAAIf,EAAE,kBAAkB,CAAC,GAC9D,OAEN,aACEe,EAAS,eAAiB,OACtB,GAAGM,EAAgBN,EAAS,YAAY,CAAC,IAAIf,EAAE,kBAAkB,CAAC,GAClE,OAEN,qBACEe,EAAS,uBAAyB,OAC9B,GAAGM,EAAgBN,EAAS,oBAAoB,CAAC,IAAIf,EAAE,kBAAkB,CAAC,GAC1E,OAEN,UAAWJ,EACb,CAEJ,CAAC,EACH,CACF,CACF,CACF,CAEJ,EAEO0B,GAAQ7B,GQ7If,IAAA8B,GAAkB,gBAClBC,GAAuB,YASvB,IAAAC,GAA+B,mBAMzBC,GAAiB,CAAC,CAAE,eAAAC,CAAe,IAA2B,CAClE,GAAM,CAAE,CAAE,KAAI,mBAAe,EAC7B,OAAKA,EAKH,GAAAC,QAAA,iBAAAA,QAAA,cACGD,EAAe,IAAI,CAACE,EAAeC,IAClC,GAAAF,QAAA,cAACG,GAAA,CAAuB,IAAKF,EAAc,OAASC,GAClD,GAAAF,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAG,SAAQ,IAAEJ,EAAc,KAAM,CACpC,EACCA,EAAc,aACb,GAAAD,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACM,EAAA,CAAQ,wBAAyB,CAAE,UAAQ,WAAOL,EAAc,WAAW,CAAE,EAAG,CACnF,EAEDA,EAAc,MAAM,KACnB,GAAAD,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACO,EAAA,CACC,GAAG,IACH,KAAMN,EAAc,KAAK,IACzB,OAAO,SACP,IAAI,uBAEHA,EAAc,KAAK,MAAQA,EAAc,KAAK,MAAQ,EAAE,uBAAuB,CAClF,CACF,EAEDA,EAAc,OACb,GAAAD,QAAA,cAACI,EAAA,KACC,GAAAJ,QAAA,cAACQ,GAAA,CAAQ,KAAMP,EAAc,MAAO,IAAK,EAAE,iBAAiB,GAAK,GAAI,KAAI,GAAC,CAC5E,CAEJ,CACD,CACH,EAlCO,IAoCX,EAEOQ,GAAQX,GCzDf,IAAAY,EAAwD,gBCAxD,IAAAC,GAAmB,4BAIZ,IAAMC,GAAc,GAAAC,QAAO;AAAA;AAAA,EAIrBC,GAAiB,GAAAD,QAAO;AAAA;AAAA;AAAA,YAGzBE,EAAK,EAAE,CAAC;AAAA,EAGPC,GAAkB,GAAAH,QAAO;AAAA;AAAA,aAEzBE,EAAK,CAAC,CAAC;EChBpB,IAAAE,GAA+B,gBCA/B,IAAAC,GAAkB,gBCAlB,IAAAC,GAAmB,4BAKnB,IAAMC,GAASC,GAAyC,CACtD,IAAIC,EAAKC,GAAM,MAAM,SAErB,OAAIF,IAAa,WACfC,EAAKC,GAAM,MAAM,GAAG,SACXF,IAAa,aACtBC,EAAKC,GAAM,MAAM,GAAG,UAGfD,CACT,EAMaE,GAAU,GAAAC,QAAO,IAAI,MAAM,KAAO,CAC7C,UAAW,gCACb,EAAE;AAAA;AAAA,sBAEqBC,GAAkBN,GAAMM,EAAM,QAAQ,CAAC;AAAA,aACjDC,EAAK,GAAI,CAAC,IAAIA,EAAK,GAAG,CAAC;AAAA,WACxBD,GAAUA,EAAM,MAAM,MAAM,SAAS;AAAA;AAAA;AAAA;EDlBjD,IAAME,GAAQ,CAAC,CAAE,MAAAC,EAAO,SAAAC,CAAS,IAAa,GAAAC,QAAA,cAACC,GAAA,CAAQ,SAAUF,GAAWD,CAAM,EAE3EI,GAAQL,GDJf,IAAAM,GAAoB,kBACpBC,GAA+B,mBAIzBC,GAAsB,CAC1B,SACA,UACA,YACA,WACA,SACA,WACA,QACF,EAEMC,GAAqBC,GAAe,CACxC,OAAQA,EAAG,CACT,IAAK,SACH,OAAO,GAAAC,QAAQ,EAAE,oBAAoB,EACvC,IAAK,UACH,OAAO,GAAAA,QAAQ,EAAE,qBAAqB,EACxC,IAAK,YACH,OAAO,GAAAA,QAAQ,EAAE,uBAAuB,EAC1C,IAAK,WACH,OAAO,GAAAA,QAAQ,EAAE,sBAAsB,EACzC,IAAK,SACH,OAAO,GAAAA,QAAQ,EAAE,oBAAoB,EACvC,IAAK,WACH,OAAO,GAAAA,QAAQ,EAAE,sBAAsB,EACzC,IAAK,SACH,OAAO,GAAAA,QAAQ,EAAE,oBAAoB,CACzC,CACF,EASMC,GAA4B,CAAC,EAE7BC,GAAmBC,GACvBN,GAAS,OAAO,CAACO,EAAMC,IAAY,CACjC,IAAMC,EAAQR,GAAkBO,CAAO,EACjCE,EAAOJ,EAAEE,CAAO,EAChBG,EAAWJ,IAAOA,EAAK,OAAS,CAAC,EACvC,OAAII,GAAYA,EAAS,MAAQD,GAAM,MAAQC,EAAS,QAAUD,GAAM,MACtEH,EAAKA,EAAK,OAAS,CAAC,EAAE,QAAUE,EAEhCF,EAAK,KAAK,CACR,UAAWE,EACX,KAAMC,GAAM,KACZ,MAAOA,GAAM,KACf,CAAC,EAGIH,CACT,EAAGH,GAAI,MAAM,CAAC,EAEVQ,GAAwBN,GAAoB,CAChD,IAAMO,EAAY,IAAI,KAAK,EAAE,OAAO,EAC9BC,EAAMd,GAASa,IAAc,EAAI,EAAIA,EAAY,CAAC,EAClDL,EAAUF,EAAEQ,CAAG,EACrB,MAAO,CACL,MAAON,EAAU,GAAAL,QAAQ,EAAE,wBAAwB,EAAI,GAAAA,QAAQ,EAAE,kBAAkB,EACnF,KAAMK,GAAS,KACf,MAAOA,GAAS,KAClB,CACF,EAEMO,GAAoBC,GAAc,CACtC,IAAMC,EAAWD,EAAE,MAAM,GAAG,EAAE,IAAKE,GAAM,SAASA,EAAG,EAAE,CAAC,EACxD,OAAO,IAAI,KAAK,EAAE,SAASD,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,EAAE,QAAQ,CAC/D,EAMME,GAAe,CAAC,CAAE,aAAAC,CAAa,IAAyB,CAC5D,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvBC,KAAQ,YACZ,IAAOD,EAAeR,GAAqBQ,CAAY,EAAI,KAC3D,CAACA,CAAY,CACf,EAEME,KAAgB,YAAQ,IAAM,CAClC,GAAI,CACF,GAAID,GAAO,MAAQA,GAAO,MAAO,CAC/B,IAAME,EAAc,IAAI,KAAK,EAAE,QAAQ,EACjCC,EAAOT,GAAiBM,EAAM,IAAI,EAClCI,EAAQV,GAAiBM,EAAM,KAAK,EAC1C,OAAOE,GAAeC,GAAQD,GAAeE,CAC/C,CACF,MAAY,CACV,MAAO,EACT,CACF,EAAG,CAACJ,CAAK,CAAC,EAEJK,KAAK,YAAQ,IAAON,EAAef,GAAgBe,CAAY,EAAI,KAAO,CAACA,CAAY,CAAC,EAC9F,OAAKM,EAKH,GAAAC,QAAA,iBAAAA,QAAA,cACE,GAAAA,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,MAAuB,EAAhBP,EAAkB,YAAiB,aAAN,EACpC,SAAUA,EAAgB,WAAa,WACzC,CACF,EACA,GAAAK,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KAAiBZ,GAAO,KAAM,CACjC,EACA,GAAAM,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KACEZ,GAAO,KAAO,GAAGA,EAAM,IAAI,IAAIA,EAAM,KAAK,GAAK,EAAE,aAAa,CACjE,CACF,CACF,EACCK,EAAG,IAAKpB,GACP,GAAAqB,QAAA,cAACI,GAAA,CAAe,IAAKzB,EAAE,WACrB,GAAAqB,QAAA,cAACK,GAAA,KACE1B,EAAE,QAAU,GAAGA,EAAE,SAAS,IAAIA,EAAE,OAAO,GAAKA,EAAE,SACjD,EACA,GAAAqB,QAAA,cAACK,GAAA,KACE1B,EAAE,KAAO,GAAGA,EAAE,IAAI,IAAIA,EAAE,KAAK,GAAK,EAAE,aAAa,CACpD,CACF,CACD,CACH,CACF,CACF,EAnCO,IAqCX,EAEO4B,GAAQf,GGrJf,IAAAgB,GAA6C,gBAI7C,IAAAC,GAA+B,mBAMzBC,GAAc,CAAC,CAAE,YAAAC,CAAY,IAAwB,CACzD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EAEtCC,KAAU,gBAAY,IAAM,CAACF,GAAWC,EAAW,EAAI,EAAG,CAACD,CAAO,CAAC,EAEzE,OACE,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KAAiB,EAAE,mBAAmB,CAAE,EACzC,GAAAF,QAAA,cAACE,GAAA,KACEL,EACC,GAAAG,QAAA,cAACG,GAAA,CACC,GAAG,IACH,KAAM,OAAOP,CAAW,GACxB,MAAO,EAAE,wBAAyB,CAAE,YAAAA,CAAY,CAAC,GAAK,IAEtD,GAAAI,QAAA,cAACI,EAAA,KAAeR,CAAY,CAC9B,EAEA,GAAAI,QAAA,cAACG,GAAA,CAAiB,QAASJ,EAAS,MAAO,EAAE,uBAAuB,GAAK,IACvE,GAAAC,QAAA,cAACI,EAAA,KAAe,EAAE,uBAAuB,CAAE,CAC7C,CAEJ,CACF,CAEJ,EAEOC,GAAQV,GCtCf,IAAAW,GAA6C,gBCA7C,IAAAC,GAA2B,WCA3B,IAAAC,GAA8B,WAcjBC,MAAkB,kBAAoC,CAAC,CAAC,EDVrE,IAAMC,GAAc,OAAM,eAAWC,EAAe,EAE7CC,GAAQF,GENf,IAAAG,GAAmB,4BAENC,GAAU,GAAAC,QAAO;AAAA;AAAA,EAIjBC,GAAQ,GAAAD,QAAO;AAAA;AAAA;AAAA;AAAA,EAMfE,GAAc,GAAAF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAQtBG,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAGnCC,GAAoB,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA;EHjBxC,IAAAK,GAA+B,mBAMzBC,GAAY,CAAC,CAAE,SAAAC,CAAS,IAAsB,CAClD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAAE,iBAAAC,EAAkB,iBAAAC,CAAiB,EAAIC,GAAY,EACrD,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EAEtCC,KAAY,gBAAaC,GAAuD,CAChFN,IACFM,EAAE,eAAe,EACjBF,EAAW,EAAI,EAEnB,EAAG,CAAC,CAAC,EAEL,GAAI,CAACL,EACH,OAAO,KAGT,GAAM,CAAE,SAAAQ,EAAU,UAAAC,CAAU,EAAIT,EAEhC,OAAII,GAAWH,EAEX,GAAAS,QAAA,cAACC,GAAA,CACC,KAAM,iCAAiCH,CAAQ,IAAIC,CAAS,GAC5D,MAAO,EAAE,uBAAuB,EAChC,OAAO,SACP,IAAI,gCAEJ,GAAAC,QAAA,cAACE,GAAA,CACC,IAAK,yDAAyDJ,CAAQ,IAAIC,CAAS,iDACjFP,EAAmB,QAAQ,mBAAmBA,CAAgB,CAAC,GAAK,EACtE,MAAMM,CAAQ,IAAIC,CAAS,QAAQR,CAAgB,GACnD,IAAK,EAAE,uBAAuB,EAChC,CACF,EAIF,GAAAS,QAAA,cAACG,GAAA,CACC,KAAM,iCAAiCL,CAAQ,IAAIC,CAAS,GAC5D,OAAO,SACP,IAAI,+BACJ,QAASH,GAET,GAAAI,QAAA,cAACI,GAAA,KACC,GAAAJ,QAAA,cAACK,GAAA,CAAgB,GAAG,OAClB,GAAAL,QAAA,cAACM,EAAA,KAAe,EAAE,gCAAgC,CAAE,CACtD,CACF,CACF,CAEJ,EAEOC,GAAQlB,GN/Cf,IAAAmB,GAA+B,mBAQzBC,GAAS,CAAC,CAAE,OAAAC,EAAQ,QAAAC,EAAS,kBAAAC,CAAkB,IAAmB,CACtE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,YAAS,EAAK,EAElCC,KAAY,eAAY,IAAMD,EAAS,EAAI,EAAG,CAAC,CAAC,EAChDE,KAAa,eAAY,IAAMF,EAAS,EAAK,EAAG,CAAC,CAAC,EAQxD,SANA,aAAU,IAAM,CACVL,GAAUI,GACZC,EAAS,EAAK,CAElB,EAAG,CAACL,CAAM,CAAC,EAENA,EAKH,EAAAQ,QAAA,gBAAAA,QAAA,cACGJ,GACC,EAAAI,QAAA,cAACC,GAAA,CAAY,QAASR,EAAS,YAAaD,GAAQ,YAAa,QAASO,EAAY,EAExF,EAAAC,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACG,GAAA,CAAG,SAAQ,IACTT,EACG,GAAGC,EAAE,0BAA0B,CAAC,IAAIH,EAAO,IAAI,GAC/CA,GAAQ,UAAU,KAClBG,EAAE,qCAAsC,CAAE,SAAUH,GAAQ,UAAU,IAAK,CAAC,EAC5EG,EAAE,cAAc,CACtB,CACF,EACA,EAAAK,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACI,GAAA,CAAI,SAAUZ,GAAQ,UAAU,SAAU,CAC7C,GACEA,GAAQ,aAAa,QAAU,GAAK,GACpC,EAAAQ,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACK,EAAA,KACC,EAAAL,QAAA,cAAC,SACEL,EAAE,0CAA0C,EAAG,IAChD,EAAAK,QAAA,cAACM,EAAA,CACC,GAAG,OACH,KAAK,SACL,QAASR,EACT,OAAM,GACN,MAAOH,EAAE,4CAA4C,GAAK,IAEzDA,EAAE,4CAA4C,CACjD,EAAe,GAEjB,CACF,CACF,EAEF,EAAAK,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACO,GAAA,KACC,EAAAP,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACQ,GAAA,KACEhB,GAAQ,UAAU,eAAiBA,GAAQ,UAAU,MACpD,EAAAQ,QAAA,cAACS,GAAA,KACC,EAAAT,QAAA,cAACU,GAAA,KAAiBf,EAAE,gBAAgB,CAAE,EACtC,EAAAK,QAAA,cAACU,GAAA,KACC,EAAAV,QAAA,cAACW,GAAA,KACC,EAAAX,QAAA,cAACY,EAAA,KAAe,GAAGpB,GAAQ,UAAU,aAAa,KAAKA,GAAQ,UAAU,IAAI,EAAG,CAClF,CACF,CACF,EAEDA,GAAQ,SAAS,aAChB,EAAAQ,QAAA,cAACa,GAAA,CAAY,YAAaC,GAAkBtB,EAAO,QAAQ,WAAW,EAAG,CAE7E,CACF,EACCA,GAAQ,cACP,EAAAQ,QAAA,cAACE,EAAA,KACC,EAAAF,QAAA,cAACe,GAAA,CAAa,aAAcvB,EAAO,aAAc,CACnD,CAEJ,CACF,CACF,EAjEO,IAmEX,EAEOwB,GAAQzB,GU3Gf,IAAA0B,GAAsC,WCAtC,IAAAC,GAAsC,oBCAtC,IAAAC,GAAoB,oBAEdC,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZC,GAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA8H7BD,EAAS;AAAA,EAGNE,GAAQD,GDtIf,IAAME,GAAsB,CAC1BC,EACAC,OAEA,aAAkCC,GAA0B,CAC1D,UAAW,CAAE,GAAIF,EAAc,OAAQC,CAAiB,EACxD,KAAM,CAACD,GAAM,CAACC,CAChB,CAAC,EAEIE,GAAQJ,GDRf,IAAMK,GAAqBC,GAA6B,CACtD,GAAM,CAAE,iBAAAC,EAAkB,oBAAAC,CAAoB,KAAI,eAAWC,EAAqB,EAE5EC,EAAcJ,GAAS,QAAQ,YAC/BK,EAAWJ,EACbG,GAAa,KAAME,GAAMA,EAAE,KAAOL,CAAgB,GAAG,GACrD,OAEE,CAAE,KAAAM,EAAM,QAAAC,CAAQ,EAAIC,GAAoBT,GAAS,GAAIK,CAAQ,EAEnE,uBAAU,IAAM,CACd,IAAKD,GAAa,QAAU,GAAK,GAK3B,EAJUH,EACVG,GAAa,KAAME,GAAMA,EAAE,KAAOL,CAAgB,EAClD,QAEQ,CACV,IAAMS,EAAQN,IAAc,CAAC,EACzBM,GACFR,EAAoBQ,EAAM,EAAE,CAEhC,CAEJ,EAAG,CAACN,CAAW,CAAC,EAET,CACL,SAAUA,GAAa,QAAU,GAAK,EAAIG,GAAM,QAAUP,EAC1D,QAAAQ,CACF,CACF,EAEOG,GAAQZ,GGpCf,IAAAa,GAAkB,gBAKlB,IAAAC,GAA+B,mBAEzBC,GAAU,IAAM,CACpB,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAY,MAAK,IAChB,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAG,SAAQ,IAAEL,EAAE,gBAAgB,CAAE,CACpC,CACF,CACF,CAEJ,EAEOM,GAAQP,GCpBf,IAAAQ,GAAkB,gBAMlB,IAAMC,GAAc,IAClB,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CAAY,MAAK,IAChB,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,IAAO,CACV,CACF,CACF,EAGKC,GAAQN,GChBf,IAAAO,EAAiE,gBCEjE,IAAMC,GAAN,MAAMC,CAAoB,CAGxB,YAAYC,EAAiD,CA+B7D,KAAQ,uBAA0BC,GAChC,CAAC,CAAC,KAAK,WAAWA,CAAW,EAAE,UAAU,GAE3C,KAAQ,0BAA6BA,GACnC,CAAC,KAAK,uBAAuBA,CAAW,EAE1C,KAAQ,OAAUC,GAChBA,EAAS,OAASH,EAAoB,eAExC,KAAQ,UAAaG,GAA+B,CAAC,KAAK,OAAOA,CAAQ,EAkCzE,KAAQ,kBAAoB,CAACD,EAAqBE,IAChD,KAAK,WAAWF,CAAW,EAAE,UAAU,KAAOE,EAEhD,KAAQ,0BAA6BF,GACnC,CAAC,CAAC,KAAK,WAAWA,CAAW,EAAE,UAAU,aAAa,GAExD,KAAQ,6BAAgCA,GACtC,CAAC,KAAK,0BAA0BA,CAAW,EAqC7C,KAAQ,qBAAuB,CAACA,EAAqBE,IACnD,KAAK,WAAWF,CAAW,EAAE,UAAU,aAAa,KAAOE,EAtH3D,KAAK,WAAaH,CACpB,CAEA,QAAe,CACb,IAAMI,EAAa,KAAK,qBAAqB,EACvCC,EAAiB,KAAK,kBAAkB,EAC9C,OAAIA,EAAe,QACjBD,EAAW,KAAK,CACd,KAAML,EAAoB,sBAC1B,GAAIA,EAAoB,oBACxB,cAAe,CAAC,EAChB,WAAYM,CACd,CAAC,EAGU,CACX,WAAAD,CACF,CAGF,CAEQ,mBAAoB,CAK1B,OAJuB,OAAO,KAAK,KAAK,UAAU,EAC/C,OAAO,KAAK,yBAAyB,EACrC,IAAKE,GAAQ,KAAK,WAAWA,CAAG,CAAC,EACjC,OAAO,KAAK,SAAS,CAE1B,CAaQ,sBAAuB,CAC7B,IAAMF,EAAa,KAAK,cAAc,EAEtC,OADuB,KAAK,wBAAwBA,CAAU,CAEhE,CAEQ,eAAgB,CAKtB,OAJmB,OAAO,KAAK,KAAK,UAAU,EAC3C,OAAO,KAAK,sBAAsB,EAClC,IAAKE,GAAQ,KAAK,WAAWA,CAAG,EAAE,QAAmC,EACrE,OAAOP,EAAoB,kBAAkB,CAElD,CAEQ,wBAAwBK,EAA4B,CAC1D,OAAOA,EAAW,IAAKG,GAAa,CAClC,IAAMP,EAAa,OAAO,KAAK,KAAK,UAAU,EAC3C,OAAQM,GAAQ,KAAK,kBAAkBA,EAAKC,EAAS,EAAE,CAAC,EACxD,OAAO,KAAK,4BAA4B,EACxC,IAAKD,GAAQ,KAAK,WAAWA,CAAG,CAAC,EACjC,OAAO,KAAK,SAAS,EAClBE,EAAgB,KAAK,wBAAwBD,EAAS,EAAE,EAE9D,MAAO,CACL,GAAIA,EAAS,GACb,KAAMA,EAAS,KACf,WAAAP,EACA,cAAAQ,CACF,CACF,CAAC,CACH,CAWQ,wBAAwBL,EAAoB,CAElD,IAAMM,EADgB,KAAK,2BAA2BN,CAAU,EAE7D,IAAKO,GAAgB,KAAK,mBAAmBA,CAAW,CAAC,EACzD,OAAQH,GAAaA,EAAS,WAAW,OAAS,CAAC,EAChDI,EAAuB,KAAK,wBAAwBR,CAAU,EAGpE,OAFuBM,EAAuB,OAAOE,CAAoB,CAG3E,CAEQ,2BAA2BC,EAAY,CAO7C,OANmB,OAAO,KAAK,KAAK,UAAU,EAC3C,OAAQN,GAAQ,KAAK,kBAAkBA,EAAKM,CAAE,CAAC,EAC/C,OAAO,KAAK,yBAAyB,EACrC,IAAKN,GAAQ,KAAK,WAAWA,CAAG,EAAE,UAAU,WAA2B,EACvE,OAAOP,EAAoB,kBAAkB,CAGlD,CAEQ,mBAAmBW,EAAqC,CAC9D,IAAMV,EAAa,OAAO,KAAK,KAAK,UAAU,EAC3C,OAAQM,GAAQ,KAAK,qBAAqBA,EAAKI,EAAY,EAAE,CAAC,EAC9D,IAAKJ,GAAQ,KAAK,WAAWA,CAAG,CAAC,EACjC,OAAO,KAAK,SAAS,EAExB,MAAO,CACL,GAAII,EAAY,GAChB,KAAMA,EAAY,KAClB,WAAAV,EACA,cAAe,CAAC,CAClB,CACF,CAKA,YAAe,mBAAqB,CAClCO,EACAM,EACAC,IACG,CACH,IAAMC,EAAqBD,EAAK,KAAME,GAAUA,EAAM,KAAOT,EAAS,EAAE,EACxE,MAAO,CAAC,CAACQ,GAAsBD,EAAK,QAAQC,CAAkB,IAAMF,CACtE,EAEQ,wBAAwBV,EAAgC,CAc9D,OAbuB,OAAO,KAAK,KAAK,UAAU,EAC/C,OAAQG,GAAQ,KAAK,kBAAkBA,EAAKH,CAAU,CAAC,EACvD,IAAKG,GAAQ,KAAK,WAAWA,CAAG,CAAC,EACjC,OAAO,KAAK,MAAM,EAClB,OAAQW,GAAUA,EAAK,MAAmB,OAAS,CAAC,EAEX,IAAI,CAACf,EAAUW,KAAW,CACpE,GAAId,EAAoB,uBAAyBc,EACjD,KAAMX,EAAS,KACf,WAAY,KAAK,iBAAiBA,CAAQ,EAC1C,cAAe,CAAC,CAClB,EAAE,CAGJ,CAEQ,iBAAiBgB,EAAgC,CASvD,OAReA,EAAa,MACE,IAAKD,IAAU,CAC3C,KAAMA,EACN,MAAO,GACP,KAAM,OACN,KAAMC,EAAa,KACnB,KAAMA,EAAa,IACrB,EAAE,CAEJ,CAEA,YAAO,sBAAwB,iBAC/B,YAAO,oBAAsB,EAC7B,YAAO,eAAiB,YACxB,YAAO,uBAAyB,IAClC,EAEOC,GAAQrB,GC9Jf,IAAMsB,GAA0B,OAAO,OAAO,CAC5C,IAAQ,EACR,GAAM,EACN,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,IAAO,CACT,CAAC,EAIKC,GAAc,CAACC,EAAiBC,IAAqB,CACzD,IAAMC,EAAaJ,GAASE,CAAuB,GAAK,OAAO,iBACzDG,EAAcL,GAASG,CAAwB,GAAK,OAAO,iBAEjE,OAAIC,EAAaC,EACR,GACEA,EAAcD,EAChB,EAEF,CACT,EAEOE,GAAQ,CAACC,EAAiBC,IAAqB,CACpD,IAAMC,EAASR,GAAY,GAAGM,EAAM,EAAE,GAAI,GAAGC,EAAO,EAAE,EAAE,EAExD,OAAIC,IAAW,EACNA,EAGFF,EAAM,KAAK,cAAcC,EAAO,IAAI,CAC7C,EC1CA,IAAOE,GAAQ,CAACC,EAAiBC,IACxBD,EAAM,KAAK,cAAcC,EAAO,IAAI,ECmB7C,IAAMC,GAAe,OAAO,OAAO,CACjC,eAAW,EACX,OAAQ,EACR,QAAS,EACT,cAAU,EACV,qBAAiB,EACjB,yBAAgB,EAChB,oBAAW,EACX,UAAM,EACN,oBAAqB,EACrB,kBAAc,GACd,OAAQ,GACR,QAAS,GACT,MAAO,GACP,MAAO,GACP,MAAO,EACT,CAAC,EAIKC,GAA2B,CAACC,EAAiBC,IAAqB,CACtE,IAAMC,EAAaJ,GAAME,CAAmB,GAAK,OAAO,iBAClDG,EAAcL,GAAMG,CAAoB,GAAK,OAAO,iBAE1D,OAAIC,EAAaC,EACR,GACEA,EAAcD,EAChB,EAEF,CACT,EAEOE,GAAQ,CAACC,EAAiBC,IAAqB,CACpD,IAAMC,EAASR,GAAyB,GAAGM,EAAM,IAAI,GAAI,GAAGC,EAAO,IAAI,EAAE,EAEzE,OAAIC,IAAW,EACNA,EAGFC,GAAkBH,EAAOC,CAAM,CACxC,ECzDA,IAAMG,GAAQC,GAAe,CAC3BA,EAAK,WAAW,KAAKC,EAAiB,EACtCD,EAAK,WAAW,QAASE,GAAa,CAChCA,EAAS,KAAO,IAClBA,EAAS,WAAW,KAAKC,EAAsB,GAE/CD,EAAS,WAAW,KAAKE,EAAiB,EAC1CF,EAAS,cAAc,QAASG,GAAgB,CAC9CA,EAAY,WAAW,KAAKD,EAAiB,CAC/C,CAAC,EAEL,CAAC,CACH,EAEOE,GAAQP,GCnBf,IAAAQ,EAAoB,kBCGpB,IAAMC,GAA8BC,GAAc,KAAK,MAAM,KAAK,UAAUA,CAAM,CAAC,EAE5EC,GAAQF,GDAR,IAAMG,GAAY,OACZC,GAAc,SACdC,GAA+B,OAAO,OAAO,CACxD,GAAI,IACJ,KAAM,EAAAC,QAAQ,EAAE,gBAAgB,EAChC,YAAa,IACf,CAAC,EACYC,GAAmC,OAAO,OAAO,CAC5D,GAAI,EACJ,KAAM,EAAAD,QAAQ,EAAE,+BAA+B,EAC/C,YAAa,CACX,GAAI,GACJ,KAAM,EAAAA,QAAQ,EAAE,oBAAoB,EACpC,YAAa,IACf,CACF,CAAC,EAEKE,GAAN,KAAsB,CAAtB,cACE,UAAe,GACf,WAAyB,GACzB,UAAe,UACf,UAAsB,KACtB,UAAsB,KACtB,cAAgC,KAEhC,SAASC,EAAc,CACrB,YAAK,KAAOA,EACL,IACT,CAEA,SAASC,EAAc,CACrB,OAAIA,IACF,KAAK,KAAOA,GAEP,IACT,CAEA,UAAUC,EAAwB,CAChC,YAAK,MAAQA,EACN,IACT,CAEA,SAASC,EAAc,CACrB,YAAK,KAAOA,EACL,IACT,CAEA,aAAaC,EAAwB,CACnC,YAAK,SAAWA,EACT,IACT,CAEA,SAASC,EAAc,CACrB,YAAK,KAAOA,EACL,IACT,CAEA,OAA0B,CACxB,MAAO,CACL,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,KAAM,KAAK,KACX,KAAM,KAAK,KACX,KAAM,KAAK,KACX,SAAU,KAAK,QACjB,CACF,CACF,EAEOC,GAAQ,CAACC,EAAmBC,IAAoD,CACrF,IAAMC,EAAgBC,GAASF,CAAU,EAEzC,OAAMD,EAAK,eACTE,EAAc,aAAe,IAAIV,GAAgB,EAC9C,SAAS,EAAAF,QAAQ,EAAE,yCAAyC,CAAC,EAC7D,UAAUU,EAAK,YAAY,EAC3B,SAASb,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,cACTE,EAAc,YAAc,IAAIV,GAAgB,EAC7C,SAAS,EAAAF,QAAQ,EAAE,wCAAwC,CAAC,EAC5D,UAAUU,EAAK,WAAW,EAC1B,SAASb,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,YACTE,EAAc,UAAY,IAAIV,GAAgB,EAC3C,SAAS,EAAAF,QAAQ,EAAE,sCAAsC,CAAC,EAC1D,UAAUU,EAAK,SAAS,EACxB,SAAS,EAAAV,QAAQ,EAAE,+BAA+B,CAAC,EACnD,SAASH,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,YACTE,EAAc,UAAY,IAAIV,GAAgB,EAC3C,SAAS,EAAAF,QAAQ,EAAE,sCAAsC,CAAC,EAC1D,UAAUU,EAAK,SAAS,EACxB,SAAS,EAAAV,QAAQ,EAAE,+BAA+B,CAAC,EACnD,SAASF,EAAW,EACpB,aAAaC,EAAc,EAC3B,MAAM,GAGLW,EAAK,kBACTE,EAAc,gBAAkB,IAAIV,GAAgB,EACjD,SAAS,EAAAF,QAAQ,EAAE,4CAA4C,CAAC,EAChE,UAAUU,EAAK,eAAe,EAC9B,SAAS,EAAAV,QAAQ,EAAE,qCAAqC,CAAC,EACzD,SAASF,EAAW,EACpB,aAAaC,EAAc,EAC3B,MAAM,GAGPW,EAAK,gBACPE,EAAc,QAAU,IAAIV,GAAgB,EACzC,SAAS,EAAAF,QAAQ,EAAE,qCAAqC,CAAC,EACzD,UAAUU,EAAK,gBAAgB,KAAK,EACpC,SAAS,EAAAV,QAAQ,EAAE,8BAA8B,CAAC,EAClD,SAASF,EAAW,EACpB,aAAaC,EAAc,EAC3B,SAAS,EAAAC,QAAQ,EAAE,YAAYU,EAAK,gBAAgB,IAAI,EAAE,CAAC,EAC3D,MAAM,EACEA,EAAK,UAChBE,EAAc,QAAU,IAAIV,GAAgB,EACzC,SAAS,EAAAF,QAAQ,EAAE,qCAAqC,CAAC,EACzD,UAAUU,EAAK,OAAO,EACtB,SAAS,EAAAV,QAAQ,EAAE,8BAA8B,CAAC,EAClD,SAASF,EAAW,EACpB,aAAaC,EAAc,EAC3B,SAAS,EAAAC,QAAQ,EAAE,2BAA2B,CAAC,EAC/C,MAAM,GAGLU,EAAK,cACTE,EAAc,YAAc,IAAIV,GAAgB,EAC7C,SAAS,EAAAF,QAAQ,EAAE,wCAAwC,CAAC,EAC5D,UAAUU,EAAK,WAAW,EAC1B,SAASb,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,qBACTE,EAAc,mBAAqB,IAAIV,GAAgB,EACpD,SAAS,EAAAF,QAAQ,EAAE,+CAA+C,CAAC,EACnE,UAAUU,EAAK,kBAAkB,EACjC,SAASb,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGLW,EAAK,WACTE,EAAc,SAAW,IAAIV,GAAgB,EAC1C,SAAS,EAAAF,QAAQ,EAAE,qCAAqC,CAAC,EACzD,UAAUU,EAAK,QAAQ,EACvB,SAAS,EAAAV,QAAQ,EAAE,8BAA8B,CAAC,EAClD,SAASH,EAAS,EAClB,aAAaE,EAAc,EAC3B,MAAM,GAGPW,EAAK,cACPE,EAAc,YAAc,IAAIV,GAAgB,EAC7C,SAAS,EAAAF,QAAQ,EAAE,wCAAwC,CAAC,EAC5D,UAAUU,EAAK,WAAW,EAC1B,SAAS,EAAAV,QAAQ,EAAE,iCAAiC,CAAC,EACrD,SAASF,EAAW,EACpB,aAAaG,EAAkB,EAC/B,MAAM,GAGJW,CACT,EErLA,IAAME,GAAsB,OAAO,OAAO,CACxC,mBACA,sBACA,MACA,cACA,eACA,eACF,CAAC,EAEKC,GAAuBC,GAAgBF,GAAoB,SAASE,CAAG,EAEvEC,GAAsB,OAAO,OAAO,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,CAAC,EAE/DC,GAAwBC,GAC5B,CAACA,EAAS,UACV,CAACA,EAAS,SAAS,IACnB,CAACF,GAAoB,SAASE,EAAS,SAAS,EAAE,EAE7CC,GAASC,GAAoD,CAClE,IAAMC,EAAgBC,GAASF,CAAU,EAEzC,cAAO,KAAKA,CAAU,EAAE,QAASL,GAAQ,CACvC,IAAMG,EAAWE,EAAWL,CAAG,GAC3BE,GAAqBC,CAAQ,GAEtBJ,GAAoBC,CAAG,IAChC,OAAOM,EAAcN,CAAG,CAE5B,CAAC,EAEMM,CACT,EClCA,IAAAE,GAA6C,gBCA7C,IAAAC,GAAmB,4BAIZ,IAAMC,GAAY,GAAAC,QAAO;AAAA;AAAA;AAAA;AAAA,0BAILC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,6BAC/BA,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,EAInDC,GAAgB,GAAAF,QAAO;AAAA;AAAA;AAAA,aAGvBG,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA,4BAGSF,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA;AAAA,EAIlDG,GAAe,GAAAJ,QAAO;AAAA;AAAA,EAItBK,GAAiB,GAAAL,QAAO;AAAA;AAAA,kBAEnBG,EAAK,CAAC,CAAC;AAAA,EAGZG,GAAsB,GAAAN,QAAO;AAAA,WAC9BC,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;AAAA,EAGtCM,GAAsB,GAAAP,QAAO;AAAA,WAC9BC,GAAUA,EAAM,MAAM,MAAM,GAAG,QAAQ;EDtBnD,IAAAO,GAAoB,kBACpBC,GAA+B,mBAEzBC,GAAc,CAACC,EAA0BC,IACzC,OAAOD,GAAU,UACZA,EACL,GAAAE,QAAA,cAACC,GAAA,CAAoB,MAAO,GAAAC,QAAQ,EAAE,YAAY,GAAK,IACrD,GAAAF,QAAA,cAACG,GAAA,KAAQ,GAAAD,QAAQ,EAAE,YAAY,CAAE,EACjC,GAAAF,QAAA,cAACI,GAAA,CAAU,MAAK,GAAC,CACnB,EAEA,GAAAJ,QAAA,cAACK,GAAA,CAAoB,MAAO,GAAAH,QAAQ,EAAE,WAAW,GAAK,IACpD,GAAAF,QAAA,cAACG,GAAA,KAAQ,GAAAD,QAAQ,EAAE,WAAW,CAAE,EAChC,GAAAF,QAAA,cAACM,GAAA,CAAW,MAAK,GAAC,CACpB,EAGA,MAAM,QAAQR,CAAK,EACdA,EAAM,KAAK,IAAI,EAElBA,GAAWC,EACR,GAAGD,CAAK,IAAIC,CAAI,GAElBD,EAUHS,GAAe,CAAC,CAAE,KAAAC,EAAM,KAAAC,EAAM,MAAAX,EAAO,KAAAC,CAAK,IAAyB,CACvE,GAAM,CAAE,EAAAW,CAAE,KAAI,mBAAe,EACvB,CAACC,EAASC,CAAU,KAAI,aAAS,EAAK,EACtCC,KAAkB,gBAAY,IAAMD,EAAW,CAACD,CAAO,EAAG,CAACA,CAAO,CAAC,EAEnEG,EAAiBjB,GAAYC,EAAOC,CAAI,EAE9C,OACE,GAAAC,QAAA,cAACe,GAAA,KACC,GAAAf,QAAA,cAACgB,GAAA,KACEP,EACC,GAAAT,QAAA,cAACiB,EAAA,CACC,QAASJ,EACT,MAAOH,EAAE,4BAA6B,CAAE,QAASF,CAAK,CAAC,GAAK,IAE3DA,CACH,EAEAA,CAEJ,EACA,GAAAR,QAAA,cAACkB,GAAA,KACEpB,IAAU,OAAYgB,EAAiBJ,EAAE,uBAAuB,CACnE,EACCD,GAAQE,GACP,GAAAX,QAAA,cAACmB,EAAA,CAAM,MAAOX,EAAM,QAASK,GAC3B,GAAAb,QAAA,cAACoB,EAAA,CAAQ,wBAAyB,CAAE,OAAQX,CAAK,EAAG,CACtD,CAEJ,CAEJ,EAEOY,GAAQd,GEjFf,IAAAe,GAAuB,gBCCvB,IAAAC,GAA4B,4BAKrB,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA,gBAEdC,EAAK,EAAE,CAAC;AAAA,iBACPA,EAAK,EAAE,CAAC;AAAA,kBACPA,EAAK,EAAE,CAAC;AAAA;AAAA,IAErBC,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,mBACvBD,EAAK,EAAE,CAAC;AAAA,oBACPA,EAAK,EAAE,CAAC;AAAA;AAAA,EAIfE,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAStBE,GAAUA,EAAM,MAAM,WAAW,IAAI;AAAA,oBACtBD,EAAK,CAAC,CAAC;AAAA,qBACNA,EAAK,CAAC,CAAC;AAAA;AAAA,EAIfG,GAAO,GAAAJ,QAAO;AAAA;AAAA;AAAA;AAAA,EAadK,MAAS,GAAAL,SAAOM,CAAW,EAAE,MAAM,KAAO,CACrD,KAAM,MACN,UAAW,gCACb,EAAE;AAAA;AAAA;AAAA,aAGWL,EAAK,CAAC,CAAC;AAAA,WACRC,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA;AAAA,aAGzCA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOtCD,EAAK,CAAC,CAAC;AAAA,aACNA,EAAK,CAAC,CAAC;AAAA;AAAA,wBAEKC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMxDA,GACDA,EAAM,QACN;AAAA,eACYA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,KAK/C;EDjEL,IAAMK,GAAO,CAAe,CAAE,KAAAC,EAAM,OAAAC,EAAQ,QAAAC,CAAQ,IAClD,iBAACC,GAAA,KACC,iBAACC,GAAA,KACEJ,EAAK,IAAKK,GACT,iBAACC,GAAA,CAAK,IAAKD,EAAI,MACb,iBAACE,GAAA,CACC,MAAOF,EAAI,YACX,QAASH,EAAU,IAAMA,EAAQG,EAAI,IAAoB,EAAI,OAC7D,OAAQA,EAAI,OAASJ,EAAS,OAAS,QAEtCI,EAAI,WACP,CACF,CACD,CACH,CACF,EAGKG,GAAQT,GXdf,IAAMU,GAAsB,CAAC,CAAE,KAAAC,EAAM,WAAAC,CAAW,IAC9C,EAAAC,QAAA,cAACC,EAAA,KACC,EAAAD,QAAA,cAACE,GAAA,CAAG,GAAG,MAAMJ,CAAK,EAClB,EAAAE,QAAA,cAACG,GAAA,KACE,CAAC,CAACJ,EAAW,QACZA,EAAW,IAAI,CAACK,EAAUC,IACxB,EAAAL,QAAA,cAACM,GAAA,CACC,KAAMF,EAAS,KACf,KAAMA,EAAS,KACf,MAAOA,EAAS,MAChB,KAAMA,EAAS,KACf,IAAK,GAAGA,EAAS,IAAI,IAAIC,CAAK,GAChC,CACD,CACL,CACF,EAQIE,GAAmB,CAAC,CAAE,WAAAR,EAAY,cAAAS,CAAc,IACpD,EAAAR,QAAA,cAAC,OAAI,UAAU,eACZ,CAAC,CAACD,EAAW,QACZ,EAAAC,QAAA,cAACC,EAAA,KACC,EAAAD,QAAA,cAACG,GAAA,KACEJ,EAAW,IAAI,CAACK,EAAUC,IACzB,EAAAL,QAAA,cAACM,GAAA,CACC,KAAMF,EAAS,KACf,KAAMA,EAAS,KACf,MAAOA,EAAS,MAChB,KAAMA,EAAS,KACf,IAAK,GAAGA,EAAS,IAAI,IAAIC,CAAK,GAChC,CACD,CACH,CACF,EAED,CAAC,CAACG,EAAc,QACfA,EAAc,IAAI,CAACC,EAAaJ,IAC9B,EAAAL,QAAA,cAACH,GAAA,CACC,KAAMY,EAAY,KAClB,WAAYA,EAAY,WACxB,IAAK,GAAGA,EAAY,IAAI,IAAIJ,CAAK,GACnC,CACD,CACL,EAQIK,GAAc,CAAC,CAAE,YAAAC,EAAa,YAAAC,CAAY,IAAwB,CACtE,GAAM,CAACC,EAAkBC,CAAmB,KAAI,YAAS,EAAE,EACrDC,KAAmB,WAAQ,IAAM,CACrC,GAAI,CAACJ,EACH,OAGF,IAAMK,EAAgBC,GAAiBN,CAAW,EAC5CO,EAAqBC,GAAoBP,EAAaI,CAAa,EAEnEI,EAAO,IAAIC,GAAoBH,CAAkB,EAAE,OAAO,EAChE,OAAAI,GAASF,CAAI,EACNA,CACT,EAAG,CAACT,CAAW,CAAC,KAEhB,aAAU,IAAM,CACd,IAAMY,EACJR,GAAkB,YAAY,SAAW,OAAYA,GAAkB,WAAa,OAElFF,EAAmB,GAAKU,IAAe,QAAaA,EAAW,OAAS,GAC1ET,EAAoBS,EAAW,CAAC,EAAE,EAAE,CAExC,EAAG,CAACR,CAAgB,CAAC,EAErB,IAAMS,KAAQ,eAAaC,GAAeX,EAAoB,SAASW,EAAI,EAAE,CAAC,EAAG,CAAC,CAAC,EAE7EC,EAAiBX,GAAkB,YAAY,KAClDY,GAAaA,EAAS,KAAOd,CAChC,EAEA,OACE,EAAAb,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAACC,EAAA,KACC,EAAAD,QAAA,cAAC4B,GAAA,CACC,KACEb,GAAkB,YAAY,IAAKY,IAAc,CAC/C,KAAM,GAAGA,EAAS,EAAE,GACpB,YAAaA,EAAS,IACxB,EAAE,GAAK,CAAC,EAEV,OAAQ,GAAGd,CAAgB,GAC3B,QAASW,EACX,CACF,EACCE,GACC,EAAA1B,QAAA,cAACC,EAAA,KACC,EAAAD,QAAA,cAACO,GAAA,CACC,WAAYmB,EAAe,WAC3B,cAAeA,EAAe,cAChC,CACF,CAEJ,CAEJ,EAEOG,GAAQnB,GanIf,IAAAoB,GAAkB,gBAIlB,IAAAC,GAA+B,mBAMzBC,GAAe,CAAC,CAAE,QAAAC,CAAQ,IAAyB,CACvD,GAAM,CAAE,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,EAAA,CAAM,MAAO,EAAE,cAAc,EAAG,QAASF,GACxC,GAAAC,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAAC,SAAG,EAAE,yBAAyB,CAAE,CACnC,CACF,CAEJ,EAEOG,GAAQL,GCrBf,IAAAM,GAAkB,gBCAlB,IAAAC,GAA+B,gBCA/B,IAAAC,GAAmB,4BAGZ,IAAMC,GAAc,GAAAC,QAAO,GAAG,MAAM,KAAO,CAChD,UAAW,yCACb,EAAE;AAAA;AAAA,aAEWC,EAAK,CAAC,CAAC;AAAA;AAAA,IAEhB,CAAC,CAAE,MAAAC,CAAM,IAAMA,EAAM,WAAW,IAAI;AAAA;AAAA;AAAA,EAK3BC,GAAO,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAKfC,EAAK,EAAE,CAAC;AAAA,EAGPG,GAAU,GAAAJ,QAAO,EAAE,MAAM,KAAO,CAC3C,UAAW,2DACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaWK,GAAW,GAAAL,QAAO;AAAA,WACnBM,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA,EAEnCC,GAAc,GAAAP,QAAO;AAAA,WACtBM,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA,EAG1CE,GAAY,GAAAR,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnBS,GAAe,GAAAT,QAAO;AAAA;AAAA,sBAEZM,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,aAC5CL,EAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,wBAIGK,GAAUA,EAAM,MAAM,MAAM,YAAY;AAAA;ED9CjE,IAAAI,GAA+B,mBAMzBC,GAAwBC,GAAsC,CAClE,OAAQA,EAAS,YAAa,CAC5B,IAAK,kBACH,MAAO,MACT,QAGE,OADEA,EAAS,KAAOA,EAAS,IAAI,SAAS,GAAG,EAAIA,EAAS,IAAI,MAAM,GAAG,EAAE,IAAI,EAAI,EAEnF,CACF,EAEaC,GAAkB,CAAC,CAAE,SAAAD,CAAS,IAA4B,CACrE,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvBE,KAAc,YAAQ,IAAMH,GAAqBC,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAC5E,OACE,GAAAG,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,KAAUP,EAAS,IAAK,EACzB,GAAAG,QAAA,cAACK,GAAA,KAAaN,CAAY,CAC5B,EACA,GAAAC,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACM,GAAA,CACC,KAAMT,EAAS,IACf,IAAI,+BACJ,OAAO,SACP,MAAO,EAAE,qBAAsB,CAAE,SAAUA,EAAS,IAAK,CAAC,GAEzD,EAAE,aAAa,CAClB,CACF,CACF,CACF,CAEJ,EAMaU,GAAe,CAAC,CAAE,UAAAC,CAAU,IACvC,GAAAR,QAAA,cAACS,GAAA,KACED,EAAU,IAAI,CAACX,EAAUa,IACxB,GAAAV,QAAA,cAACF,GAAA,CAAgB,IAAK,GAAGD,EAAS,GAAG,IAAIa,CAAC,GAAI,SAAUb,EAAU,CACnE,CACH,EAGKc,GAAQJ,GD3Df,IAAAK,GAA+B,mBAE/B,IAAAC,GAAoB,kBAEdC,GAAc,CAClB,aAAc,GAAAC,QAAQ,EAAE,0CAA0C,EAClE,sBAAuB,GAAAA,QAAQ,EAAE,qCAAqC,EACtE,MAAO,GAAAA,QAAQ,EAAE,0BAA0B,CAC7C,EAEMC,GAAY,CAChB,aAAc,EACd,sBAAuB,EACvB,MAAO,CACT,EAcMC,GAAY,CAAC,CAAE,UAAAC,CAAU,IAAsB,CACnD,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvBC,EAAcD,EACjB,OAAO,CAACE,EAAMC,IAAS,CACtB,IAAMC,EAAQF,EAAK,UAAWG,GAAMA,EAAE,YAAcF,EAAK,UAAY,SAAS,EAC9E,GAAIC,EAAQ,GACVF,EAAKE,CAAK,EAAE,UAAU,KAAKD,CAAI,MAC1B,CACL,IAAMG,EAAWH,EAAK,UAAY,SAClCD,EAAK,KAAK,CACR,SAAAI,EACA,UAAW,CAACH,CAAI,EAChB,UAAWL,KAAYQ,CAAwB,GAAK,EACtD,CAAC,CACH,CAEA,OAAOJ,CACT,EAAG,CAAC,CAAuB,EAC1B,KAAK,CAAC,EAAGK,IAAM,EAAE,UAAYA,EAAE,SAAS,EAE3C,GAAI,CAACP,EAAU,OAAQ,OAAO,KAE9B,IAAMQ,EAAiBP,EAAY,OAAS,EAE5C,OACE,GAAAQ,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAG,SAAQ,IAAE,EAAE,gBAAgB,CAAE,CACpC,EACA,GAAAH,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,GAAA,CAAc,YAAa,EAAE,iBAAiB,GAC5CZ,EAAY,IAAKa,GAChB,GAAAL,QAAA,cAACE,EAAA,CAAO,IAAKG,EAAM,UAChBN,GACC,GAAAC,QAAA,cAACM,GAAA,KAAInB,KAAckB,EAAM,QAAwB,GAAKlB,GAAY,KAAM,EAE1E,GAAAa,QAAA,cAACO,GAAA,CAAa,UAAWF,EAAM,UAAW,CAC5C,CACD,CACH,CACF,CACF,CAEJ,EAEOG,GAAQlB,GGhFf,IAAAmB,GAAgC,gBAChCC,GAA+B,mBCD/B,IAAAC,GAAkB,gBCAlB,IAAAC,GAA4B,4BAKrB,IAAMC,GAAU,GAAAC,QAAO;AAAA;AAAA;AAAA,SAGrBC,EAAK,CAAC,CAAC;AAAA;AAAA,EAIVC,GAAmB;AAAA;AAAA;AAAA;AAAA,EAMZC,GAAQ,GAAAH,QAAO;AAAA,IACxBE,EAAgB;AAAA;AAAA;AAAA;AAAA,EAMPE,GAAoB,GAAAJ,QAAO;AAAA,IACpCE,EAAgB;AAAA;AAAA;AAAA;AAAA,WAIRG,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,sBAEhCA,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,EAG5CC,GAAO,GAAAN,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,SAKlBC,EAAK,CAAC,CAAC;AAAA,EAGHM,GAAU,GAAAP,QAAO;AAAA;AAAA;AAAA;AAAA,SAIrBC,EAAK,CAAC,CAAC;AAAA,EAGHO,GAAQ,GAAAR,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;AAAA,EAIWS,GAAW,GAAAT,QAAO;AAAA;AAAA,EAIlBU,GAAQ,GAAAV,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE,IAEWW,GAAW,GAAAX,QAAO;AAAA,2BACJC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAmBpBI,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA,kBACzBA,GAAUA,EAAM,MAAM,KAAK,SAAS,KAAK;AAAA;AAAA;AAAA,EAK/CO,MAAc,GAAAZ,SAAOa,CAAW,EAAE,MAAM,KAAO,CAC1D,UAAW,2DACb,EAAE;AAAA;AAAA;AAAA,WAGUR,GAAUA,EAAM,MAAM,MAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;EDhF5C,IAAAS,GAA+B,mBAiBzBC,GAAgB,CAAC,CACrB,MAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,SAAAC,EACA,YAAAC,CACF,IAA0B,CACxB,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EAC7B,OACE,GAAAC,QAAA,cAACC,GAAA,KACEP,EACC,GAAAM,QAAA,cAACE,GAAA,CAAM,IAAKR,EAAM,IAAK,OAAQA,EAAM,OAAQ,IAAKA,EAAM,IAAK,EAE7D,GAAAM,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,IAAU,CACb,EAEF,GAAAJ,QAAA,cAACK,GAAA,KACC,GAAAL,QAAA,cAACM,GAAA,KACC,GAAAN,QAAA,cAACO,GAAA,KAAOd,CAAM,EACbE,GAAY,GAAAK,QAAA,cAACQ,GAAA,CAAS,IAAKb,EAAS,IAAK,OAAQA,EAAS,OAAQ,IAAKA,EAAS,IAAK,CACxF,EACCC,GAAS,GAAAI,QAAA,cAACS,GAAA,KAAOb,CAAM,EACvBC,GAAY,GAAAG,QAAA,cAACU,GAAA,KAAUb,CAAS,EAChCC,GACC,GAAAE,QAAA,cAACW,GAAA,CAAY,QAASb,EAAa,MAAOC,EAAE,iBAAiB,GAAK,IAC/DA,EAAE,iBAAiB,CACtB,CAEJ,CACF,CAEJ,EAEOa,GAAQpB,GEnEf,IAAAqB,GAAkB,gBAClBC,GAAuB,YCDvB,IAAAC,GAAmB,4BAENC,GAAQ,GAAAC,QAAO;AAAA;AAAA;ECF5B,IAAAC,GAA4B,4BAMfC,GAAO,GAAAC,QAAO,EAAE,MAAM,KAAO,CACxC,UAAW,yCACb,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMYC,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO9C,CAAC,CAAE,YAAAC,CAAY,IACfA,GACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KASC;EChCL,IAAAC,GAAkB,gBCAlB,IAAAC,GAA4B,4BAIrB,IAAMC,GAAU,GAAAC,QAAO;AAAA,wBACNC,EAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKRC,GAAUA,EAAM,MAAM,MAAM,MAAM;AAAA,EAO5CC,GAAM,GAAAH,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUtB,CAAC,CAAE,UAAAI,CAAU,IACbA,GACA;AAAA;AAAA;AAAA,eAGYF,GAAUA,EAAM,MAAM,MAAM,eAAe;AAAA;AAAA,KAEtD;AAAA,EAGQG,GAAQ,GAAAL,QAAO,MAEfM,GAAQ,GAAAN,QAAO,IAAI,MAAM,KAAO,CAC3C,UAAW,gCACb,EAAE;AAAA;ED3BF,IAAMO,GAAW,CAAC,CAAE,OAAAC,CAAO,IACzB,GAAAC,QAAA,cAACC,GAAA,KACEF,GAAQ,IAAI,CAACG,EAAMC,IAClB,GAAAH,QAAA,cAACI,GAAA,CAAI,IAAK,GAAGF,EAAK,KAAK,IAAIC,CAAC,GAAI,UAAWD,EAAK,UAC9C,GAAAF,QAAA,cAACK,GAAA,KAAOH,EAAK,KAAM,EACnB,GAAAF,QAAA,cAACM,GAAA,KAAOJ,EAAK,KAAM,CACrB,CACD,CACH,EAGKK,GAAQT,GHbf,IAAAU,GAA+B,mBAOzBC,GAAgB,CAAC,CAAE,UAAAC,EAAW,QAAAC,CAAQ,IAA0B,CACpE,GAAM,CAAE,EAAAC,CAAE,KAAI,mBAAe,EACvBC,EAAY,CAChB,CACE,MAAOD,EAAE,wBAAwB,EACjC,MAAO,GAAGE,EAAgBJ,EAAU,KAAK,CAAC,IAAIE,EAAE,kBAAkB,CAAC,GACnE,SAAU,EACZ,CACF,EAEA,OAAIF,EAAU,WACZG,EAAU,KAAK,CACb,MAAOD,EAAE,2BAA2B,EACpC,MAAO,GAAGE,EAAgBJ,EAAU,SAAS,CAAC,IAAIE,EAAE,kBAAkB,CAAC,GACvE,SAAU,EACZ,CAAC,EAGCF,EAAU,eACZG,EAAU,KAAK,CACb,MAAOD,EAAE,mCAAmC,EAC5C,MAAO,GAAGE,EAAgBJ,EAAU,aAAa,CAAC,IAAIE,EAAE,kBAAkB,CAAC,GAC3E,SAAU,EACZ,CAAC,EAID,GAAAG,QAAA,cAACC,EAAA,CAAM,MAAON,EAAU,KAAM,QAASC,GACpCD,EAAU,SAAS,CAAC,GACnB,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACG,GAAA,CAAM,IAAK,GAAGR,EAAU,OAAO,CAAC,CAAC,SAAU,IAAK,GAAGA,EAAU,IAAI,GAAI,CACxE,EAEDA,EAAU,UACT,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACI,GAAA,CACC,KAAM,GAAGT,EAAU,QAAQ,SAC3B,OAAQ,GAAGA,EAAU,QAAQ,SAC7B,IAAKA,EAAU,cAAgBE,EAAE,iBAAiB,GAAK,GACvD,KAAI,GACN,CACF,EAEF,GAAAG,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACK,GAAA,CAAS,OAAQP,EAAW,CAC/B,EAEA,GAAAE,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACM,EAAA,CAAQ,wBAAyB,CAAE,UAAQ,WAAOX,EAAU,WAAW,CAAE,EAAG,CAC/E,EACCA,EAAU,eACT,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACO,GAAA,CAAgB,GAAG,OAAOV,EAAE,qCAAqC,CAAE,EACpE,GAAAG,QAAA,cAAC,WAAKL,EAAU,aAAc,CAChC,EAEDA,EAAU,aAAeA,EAAU,YAAY,KAC9C,GAAAK,QAAA,cAACE,EAAA,KACC,GAAAF,QAAA,cAACQ,GAAA,CACC,KAAMb,EAAU,YAAY,IAC5B,MACEE,EAAE,iDAAkD,CAClD,UAAWF,EAAU,IACvB,CAAC,GAAK,GAER,OAAO,SACP,IAAI,gCAEHA,EAAU,YAAY,OAASE,EAAE,iBAAiB,EAAE,KAAGA,EAAE,sBAAsB,EAAE,GACpF,CACF,CAEJ,CAEJ,EAEOY,GAAQf,GH/Ef,IAAMgB,GAAqB,CAAC,CAAE,YAAAC,CAAY,IAA+B,CACvE,GAAM,CAAE,CAAE,KAAI,mBAAe,EACvB,CAACC,EAAOC,CAAQ,KAAI,aAAgC,EAEpDC,EAAeC,GAAyBF,EAASE,CAAS,EAC1DC,EAAe,IAAMH,EAAS,MAAS,EAE7C,OAAKF,GAAa,OAGhB,GAAAM,QAAA,iBAAAA,QAAA,cACGL,GAAS,GAAAK,QAAA,cAACC,GAAA,CAAc,UAAWN,EAAO,QAASI,EAAc,EAClE,GAAAC,QAAA,cAACE,GAAA,KACC,GAAAF,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAG,SAAQ,IAAE,EAAE,8BAA8B,CAAE,CAClD,EACA,GAAAJ,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACK,EAAA,KACC,GAAAL,QAAA,cAAC,SAAG,EAAE,yCAAyC,CAAE,CACnD,CACF,EACA,GAAAA,QAAA,cAACG,EAAA,KACC,GAAAH,QAAA,cAACM,GAAA,CACC,QAAS,KACT,UAAW,IACX,UAAW,EACX,QAAS,EACT,MAAOZ,EAAY,IAAKI,GACtB,GAAAE,QAAA,cAACO,GAAA,CACC,IAAKT,EAAU,GACf,MAAOA,EAAU,KACjB,MACEA,EAAU,SAAS,CAAC,EAChB,CACE,IAAK,GAAGA,EAAU,SAAS,CAAC,CAAC,eAC7B,IAAKA,EAAU,IACjB,EACA,OAEN,MAAO,GAAGU,EAAgBV,EAAU,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,GACnE,SAAUA,EAAU,QACpB,YAAa,IAAMD,EAAYC,CAAS,EAC1C,CACD,EACH,CACF,CACF,CACF,EAxC+B,IA0CnC,EAEOW,GAAQhB,GzItBf,IAAAiB,GAAoB,kBAcdC,GAAkB,CAAC,CACvB,WAAAC,EACA,GAAAC,EACA,UAAAC,EACA,UAAAC,EACA,yBAAAC,EACA,iBAAAC,EACA,wBAAAC,EACA,kBAAAC,EACA,kBAAAC,CACF,IAA4B,CAC1B,IAAMC,EAAcC,GAAyBV,CAAU,EACjD,CAAE,aAAAW,CAAa,EAAIC,GAAY,EAC/BC,KAAc,UAAiC,EAC/C,CAAE,QAAAC,EAAS,KAAMC,CAAO,EAAIC,GAAcf,CAAE,EAC5C,CAAE,QAASgB,EAAuB,QAASC,CAA6B,EAC5EC,GAAkBJ,GAAQ,OAAO,EAE7B,CAACK,EAAcC,CAAe,KAAI,YAAS,EAAK,EAChDC,KAAuB,eAAY,IAAMD,EAAgB,CAACD,CAAY,EAAG,CAACA,CAAY,CAAC,KAE7F,aAAU,KACJT,IACFE,EAAY,QAAU,IAAI,GAAAU,QAAa,CACrC,GAAAtB,EACA,cAAe,CACb,IAAK,CACH,QAASU,EAAa,GACxB,EACA,iBAAkBA,GAAc,gBAClC,EACA,KAAMA,EAAa,mBACnB,OAAQA,EAAa,mBACrB,QAAQa,GAAMC,GAAOC,GAAcC,GAAO,CACxCC,EAAO,QAAQ,kBAAmBJ,GAAMC,GAAOC,GAAaC,EAAI,CAClE,CACF,CAAC,GAEI,IAAM,CACPd,EAAY,SACdA,EAAY,QAAQ,QAAQ,CAEhC,GACC,CAAC,CAAC,KAEL,aAAU,IAAM,CACTT,GACH,OAAO,SAAS,EAAG,CAAC,CAExB,EAAG,CAAC,CAAC,KAEL,aAAU,IAAM,CACd,GAAIW,GAAQ,SAAS,MAAQT,EAAyB,CACpD,GAAM,CAAE,QAAAuB,EAAQ,EAAId,EACd,CAAE,mBAAAe,EAAmB,EAAID,GAAQ,KACvC,SAAS,MAAQ,GAAGC,EAAkB,MAAMD,GAAQ,KAAK,MAAMA,GAAQ,gBAAgB,EACzF,CACF,EAAG,CAACd,CAAM,CAAC,EAEX,IAAMgB,KAAU,WACd,IAAMhB,GAAQ,SAAS,MAAM,SAAS,OAAOiB,EAAQ,EAAE,IAAKC,KAAS,CAAE,MAAOA,EAAI,EAAE,EACpF,CAAClB,GAAQ,SAAS,MAAM,OAAO,CACjC,EAEMmB,KAAyB,eAAY,IAAMN,EAAO,QAAQ,cAAc,EAAG,CAAC,CAAC,EAEnF,GAAI,CAACnB,EAAa,OAAO,KAEzB,GAAIK,EACF,OAAO,EAAAqB,QAAA,cAACC,GAAA,IAAY,EAGtB,GAAI,CAACrB,GAAQ,SAAS,KACpB,OAAO,EAAAoB,QAAA,cAACE,GAAA,IAAQ,EAGlB,GAAM,CAAE,QAAAR,EAAQ,EAAId,EACduB,GAAUrB,GAAuB,QACjCsB,GAAStB,GAAuB,OAChC,CACJ,MAAAuB,EACA,YAAAC,EACA,iBAAAC,EACA,MAAAC,EACA,YAAAC,GACA,MAAAC,GACA,SAAAC,GACA,iBAAAC,GACA,aAAAC,GACA,UAAAC,GACA,eAAAC,GACA,YAAAC,GACA,UAAAC,GACA,cAAAC,GACA,MAAAC,EACF,EAAIzB,GACE0B,GAAmBtC,GAAuB,iBAC5CA,EAAsB,iBACtBY,GAAQ,iBACN,CAAE,SAAA2B,GAAU,QAAAC,GAAS,gBAAAC,GAAiB,QAAAC,GAAS,UAAAC,GAAW,YAAAC,EAAY,EAAIhC,GAAQ,KAElFiC,GAAuB,CAC3B,CACE,MAAOF,EACT,CACF,EAEA,OAAIN,IAAO,aACTQ,GAAQ,KAAK,CACX,MAAO,GAAAC,QAAQ,EAAE,cAAc,EAC/B,QAASzC,CACX,CAAC,EAGHwC,GAAQ,KAAK,CACX,MAAO,GAAGE,EAAgBN,IAAiB,OAASD,EAAO,CAAC,IAAI,GAAAM,QAAQ,EACtE,YAAYL,IAAiB,MAAQ,kBAAkB,EACzD,CAAC,EACH,CAAC,EAEGC,IACFG,GAAQ,KAAK,CAAE,MAAOH,EAAQ,CAAC,EAG7BH,IACFM,GAAQ,KAAK,CAAE,MAAON,EAAS,CAAC,EAIhC,EAAArB,QAAA,gBAAAA,QAAA,cACE,EAAAA,QAAA,cAAC8B,GAAA,KACC,EAAA9B,QAAA,cAAC+B,GAAA,CAAY,MAAK,IAChB,EAAA/B,QAAA,cAACgC,GAAA,KACC,EAAAhC,QAAA,cAACiC,GAAA,KACC,EAAAjC,QAAA,cAACkC,GAAA,KACC,EAAAlC,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACnC,CAACnE,GAAaD,EACb,EAAAiC,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACqC,GAAA,KACC,EAAArC,QAAA,cAACsC,GAAA,CACC,GAAG,IACH,KAAK,IACL,MAAO,GAAAV,QAAQ,EAAE,yBAAyB,GAE1C,EAAA5B,QAAA,cAACuC,EAAA,KACC,EAAAvC,QAAA,cAACwC,GAAA,CAAgB,MAAK,GAAC,CACzB,EACA,EAAAxC,QAAA,cAACuC,EAAA,KAAe,GAAAX,QAAQ,EAAE,yBAAyB,CAAE,CACvD,CACF,CACF,EACE,KACHf,IAAc,UACb,EAAAb,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACyC,GAAA,CAAQ,KAAM5B,GAAa,SAAU,IAAKA,GAAa,KAAM,CAChE,EAEF,EAAAb,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAAC0C,GAAA,KACC,EAAA1C,QAAA,cAAC2C,GAAA,CAAG,SAAQ,IAAEtC,CAAM,CACtB,EACCE,GACC,EAAAP,QAAA,cAAC0C,GAAA,KACC,EAAA1C,QAAA,cAAC,WAAKO,CAAiB,CACzB,EAEF,EAAAP,QAAA,cAAC0C,GAAA,KACC,EAAA1C,QAAA,cAAC4C,GAAA,CAAQ,MAAK,GAAC,MAAOjB,GAAS,CACjC,CACF,CACF,EAEA,EAAA3B,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACpC,EAAAnC,QAAA,cAAC6C,GAAA,CAAW,MAAOnC,GAAO,SAAUC,IAAY,OAAW,CAC7D,GAEEC,GAAiB,OAAS,GAAKQ,GAAiB,OAAS,IACzD,EAAApB,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACnCvB,GAAiB,OAAS,GACzB,EAAAZ,QAAA,cAAC8C,GAAA,CAAiB,GAAIhF,EAAI,iBAAkB8C,GAAkB,EAE/DQ,GAAiB,OAAS,GACzB,EAAApB,QAAA,cAAC+C,GAAA,CACC,GAAIjF,EACJ,OAAQgB,GAAuB,OAC/B,iBAAkBsC,GACpB,CAEJ,EAGF,EAAApB,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACpC,EAAAnC,QAAA,cAACgD,GAAA,CACC,aAAcnC,GACd,eAAgBE,GAChB,UAAWD,GACX,OAAQV,GACR,QAAStB,GAAuB,QAChC,6BAA8BC,EAC9B,cAAemC,GACf,gBAAiB,IAAMxC,EAAY,SAAS,MAAM,EACpD,CACF,CACF,EACA,EAAAsB,QAAA,cAACiD,GAAA,KACC,EAAAjD,QAAA,cAACmC,GAAA,CAAwB,YAAa,GACpC,EAAAnC,QAAA,cAACkD,GAAA,CAAQ,MAAO1C,EAAO,iBAAkBtC,EAAkB,CAC7D,EAEA,EAAA8B,QAAA,cAACmD,GAAA,KACC,EAAAnD,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACoD,GAAA,CAAG,SAAQ,IAAE,GAAAxB,QAAQ,EAAE,cAAc,CAAE,CAC1C,EACA,EAAA5B,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACqD,EAAA,KACC,EAAArD,QAAA,cAAC,SAAG,GAAA4B,QAAQ,EAAE,yBAAyB,CAAE,CAC3C,CACF,EACA,EAAA5B,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACsD,GAAA,CAAS,YAAa5B,GAAa,YAAahC,GAAQ,KAAM,CACjE,CACF,EACCe,IACC,EAAAT,QAAA,cAACmD,GAAA,KACC,EAAAnD,QAAA,cAACuD,GAAA,CACC,OAAQpD,IAAWA,GAAQ,KAAOA,GAAQ,KAAO,KACjD,KACEa,GACIwC,GAAe,OAAOxC,GAAawC,GAAe,QAAQ,EAC1D,OAEN,OAAQrD,IAAS,QAAU,QAE1B,CAAC,CAACM,IAAe,EAAAT,QAAA,cAAC,SAAGS,EAAY,CACpC,CACF,GAGAb,GAAS,QAAU,GAAK,GACxB,EAAAI,QAAA,cAACmD,GAAA,KACC,EAAAnD,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACoD,GAAA,CAAG,SAAQ,IAAE,GAAAxB,QAAQ,EAAE,gBAAgB,CAAE,CAC5C,EACA,EAAA5B,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACqD,EAAA,KACC,EAAArD,QAAA,cAAC,SAAG,GAAA4B,QAAQ,EAAE,2BAA2B,CAAE,CAC7C,CACF,EACA,EAAA5B,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAACyD,GAAA,CACC,YAAa,GAAA7B,QAAQ,EAAE,iBAAiB,EACxC,QAAS7B,GAET,EAAAC,QAAA,cAAC4C,GAAA,CAAQ,MAAOhD,EAAS,CAC3B,CACF,CACF,EAGF,EAAAI,QAAA,cAAC0D,GAAA,CAAU,UAAWzC,GAAW,EAEjC,EAAAjB,QAAA,cAAC2D,GAAA,CAAmB,YAAarD,EAAa,EAE9C,EAAAN,QAAA,cAACmD,GAAA,KACC,EAAAnD,QAAA,cAAC4D,GAAA,CACC,OAAQxD,GACR,kBAAmBhC,EACnB,QAASW,EACX,EACC+B,IAAaA,GAAU,SACtB,EAAAd,QAAA,cAACoC,EAAA,KACC,EAAApC,QAAA,cAAC6D,GAAA,CACC,SAAU,CAAC,CAAC/C,GAAU,SACtB,MAAM,sBACN,QAAS,IAAMpC,EAAY,SAAS,MAAM,GAC3C,qBAED,CACF,CAEJ,EAEA,EAAAsB,QAAA,cAAC8D,GAAA,CAAe,eAAgB/C,GAAgB,EAChD,EAAAf,QAAA,cAAC+D,GAAA,CAA0B,cAAelD,IAAc,cAAe,CACzE,CACF,CACF,CACF,EACA,EAAAb,QAAA,cAACgE,GAAA,CACC,GAAIlG,EACJ,UAAWC,EACX,UAAWC,EACX,mBAAoB,CAAC,CAACoC,IAAQ,OAAO,mBACrC,kBAAmBhC,EACnB,kBAAmBC,EACrB,CACF,EACA,EAAA2B,QAAA,cAACiE,GAAA,CAAc,GAAIC,GAAgB,cAAe,EACjDjF,GAAgB,EAAAe,QAAA,cAACmE,GAAA,CAAa,QAAShF,EAAsB,CAChE,CAEJ,EAEOiF,GAAQxG,GiJ1Wf,IAAAyG,GAAkB,gBCAlB,IAAAC,GAAkB,gBAClBC,GAAkF,oBAE5EC,GAAkB,CAAC,CAAE,IAAAC,EAAK,SAAAC,CAAS,IAAkD,CACzF,IAAMC,EAAS,IAAI,gBAAa,CAAE,IAAAF,EAAK,MAAO,IAAI,gBAAgB,CAAC,EACnE,OAAO,GAAAG,QAAA,cAAC,GAAAC,eAAA,CAAmB,OAAQF,GAASD,CAAS,CACvD,EAEOI,GAAQN,GCRf,IAAAO,GAAkB,gBAElBC,GAAmD,uBAQnD,IAAMC,GAAgB,CAAC,CAAE,SAAAC,CAAS,IAChC,GAAAC,QAAA,cAAC,GAAAC,cAAA,CAAkB,MAAOC,IAAQH,CAAS,EAGtCI,GAAQL,GCdf,IAAAM,GAAwD,gBCAjD,IAAMC,GAA4B,IAAM,IAAI,gBAAgB,OAAO,SAAS,MAAM,EDmBzF,IAAMC,GAAsB,IAAI,gBAChCA,GAAoB,IAAI,OAAQ,IAAI,EACpCA,GAAoB,IAAI,OAAQ,gBAAgB,EAEhD,IAAMC,GAAiB,CAAC,CACtB,IAAAC,EACA,OAAAC,EACA,sBAAAC,EACA,UAAAC,EACA,SAAAC,CACF,IAA2B,CACzB,GAAM,CAAE,aAAAC,EAAc,UAAAC,CAAU,EAAIC,GAAQ,EACtC,CAACC,EAAaC,CAAc,KAAI,aAAsB,CAC1D,aAAcX,EAChB,CAAC,EAEK,CAACY,EAAeC,CAAgB,KAAI,aAAkB,EACtD,CAACC,EAAWC,CAAY,KAAI,aAAqB,EACjD,CAACC,EAAYC,CAAa,KAAI,aAAS,EAAK,EAE5C,CAAE,KAAMC,CAAoB,EAAIC,GACpC,GAAGjB,CAAG,UACN,CACE,QAASC,EACL,CACE,YAAaA,CACf,EACA,CAAC,CACP,EACA,CAAC,CAACS,CACJ,EAEMQ,EAAQV,EAAY,aAAa,SAAS,EAC1C,CACJ,QAAAW,EACA,KAAMC,EACN,MAAAC,CACF,EAAIJ,GACF,GAAGjB,CAAG,GAAGkB,EAAQ,IAAIA,CAAK,GAAK,EAAE,GACjC,CACE,QAASjB,EACL,CACE,YAAaA,CACf,EACA,CAAC,CACP,EACA,CAACa,GAAc,CAAC,CAACN,GAAa,KAChC,EAEMc,EAAiBC,GAAyB,CAC9C,GAAM,CAAE,cAAAC,CAAc,EAAID,EAC1B,GAAIC,EAAe,CACjB,IAAMC,EAAmB,IAAI,gBAAiBD,EAAyB,SAAS,MAAM,EAEjFC,EAAiB,IAAI,MAAM,GAC9BA,EAAiB,IAAI,OAAQ,gBAAgB,EAG/ChB,EAAe,CACb,aAAcgB,CAChB,CAAC,CACH,CACF,KAEA,cAAU,IAAM,CACVvB,GACF,OAAO,iBAAiB,WAAYoB,CAAa,EAGnD,IAAMI,EAA4C,CAChD,WAAY,iBACZ,SAAUC,EACZ,EAEA,OAAAC,EAAY,gBAAgBF,CAAmB,EACxC,IAAM,CACX,OAAO,oBAAoB,WAAYJ,CAAa,EACpDM,EAAY,kBAAkBF,CAAmB,CACnD,CACF,EAAG,CAAC,CAAC,KAEL,cAAU,IAAM,CACVV,GACFL,EAAiBK,EAAoB,MAAM,CAE/C,EAAG,CAACA,CAAmB,CAAC,KAExB,cAAU,IAAM,CACd,GAAId,EAAuB,CACzB,IAAMuB,EAAmB,IAAI,gBAAgBjB,EAAY,YAAY,EACrEiB,EAAiB,OAAO,MAAM,EAC9BA,EAAiB,OAAO,QAAQ,EAC5BA,EAAiB,IAAI,MAAM,IAAM,kBACnCA,EAAiB,OAAO,MAAM,EAGhC,IAAMI,EAAaJ,EAAiB,SAAS,EAAI,IAAIA,CAAgB,GAAK,GAC1E,GAAIX,GACE,OAAO,SAAS,OAAO,cAAce,CAAU,IAAM,EAAG,CAC1D,IAAMC,EAAQ3B,GAAW,QAAQ,WAAY,EAAE,EACzC4B,GAASD,EAAQ,IAAIA,CAAK,IAAM,IAEhCE,GAAQF,EAAQ,OAAO,SAAS,SAAS,QAAQC,EAAM,EAAI,GAC7DE,GAAW,OAAO,SAAS,SAC3BD,GAAQ,KACVC,GAAWA,GAAS,OAAO,EAAGD,EAAK,GAGrC1B,EAAU,GAAG2B,EAAQ,GAAGJ,CAAU,EAAE,CACtC,CAEJ,CACF,EAAG,CAACrB,EAAaM,EAAYZ,CAAqB,CAAC,KAEnD,cAAU,IAAM,CACd,GAAIkB,EAAU,CAKZ,GAJI,CAACV,GAAiB,CAACR,GACrBS,EAAiBS,EAAS,MAAM,EAG9BlB,GAAyBkB,EAAS,OAAO,WAAY,CACvD,IAAMK,EAAmB,IAAI,gBAAgBL,EAAS,MAAM,UAAU,EACtEK,EAAiB,OAAO,MAAM,EAC9BA,EAAiB,OAAO,QAAQ,EAChC,IAAMI,EAAaJ,EAAiB,SAAS,EAAI,IAAIA,CAAgB,GAAK,GACtE,OAAO,SAAS,OAAO,cAAcI,CAAU,IAAM,IACvDxB,EAAa,GAAG,OAAO,SAAS,QAAQ,GAAGwB,CAAU,EAAE,EACvDpB,EAAe,CACb,aAAc,IAAI,gBAAgBoB,CAAU,EAC5C,MAAO,EACT,CAAC,EAEL,CAEIrB,GAAa,aACfK,EAAa,CAAC,GAAID,GAAa,CAAC,EAAI,GAAIQ,EAAS,aAAa,WAAa,CAAC,CAAE,CAAC,EAE/EP,EAAaO,EAAS,aAAa,WAAa,CAAC,CAAC,CAEtD,CACF,EAAG,CAACA,EAAUlB,CAAqB,CAAC,EAEpC,IAAMyB,MAAiB,gBACpBO,GAAsB,CAEdpB,GACHC,EAAc,EAAI,EAGpBN,EAAe,CACb,aAAc,IAAI,gBAAgByB,CAAS,CAC7C,CAAC,CAEL,EACA,CAACpB,CAAU,CACb,EAEMqB,MAAa,gBAAY,IAAM,CAC/Bf,GACFX,EAAe,CACb,aAAc,IAAI,gBAAgBW,GAAU,aAAa,WAAW,UAAU,KAAK,EACnF,aAAc,EAChB,CAAC,CAEL,EAAG,CAACA,CAAQ,CAAC,EAEPgB,MAAe,gBAClBC,GAA0C,CACzC,GAAI,CAACvB,EAAY,CACf,IAAMwB,EAAsBC,GAA0B,EAEhDC,EAAqBtC,EACvBoC,EACAD,EAUJ,GARInC,GAAyBmC,GAC3BA,EAAoB,QAAQ,CAACI,GAAOC,KAAQ,CACrCF,GAAoB,OAAOE,EAAG,GAAG,KAAMC,IAAMA,KAAMF,EAAK,GAC3DD,GAAoB,OAAOE,GAAKD,EAAK,CAEzC,CAAC,EAGCD,EAAoB,CACtB,IAAMf,GAAmB,IAAI,gBAAgBe,CAAkB,EAC/Df,GAAiB,OAAO,MAAM,EAC9BA,GAAiB,OAAO,QAAQ,EAE3Be,EAAmB,IAAI,MAAM,GAChCA,EAAmB,IAAI,OAAQ,IAAI,EAEhCA,EAAmB,IAAI,MAAM,GAChCA,EAAmB,IAAI,OAAQ,gBAAgB,EAGjD,IAAMX,GAAaJ,GAAiB,SAAS,EAAI,IAAIA,EAAgB,GAAK,GAE1EhB,EAAe,CACb,aAAc+B,CAChB,CAAC,EACGtC,GACFG,EAAa,GAAG,OAAO,SAAS,QAAQ,GAAGwB,EAAU,EAAE,CAE3D,CACAd,EAAc,EAAI,CACpB,CACF,EACA,CAACD,CAAU,CACb,EAEM2B,EAAQ,CACZ,QAAAtB,EACA,MAAAE,EACA,SAAAD,EACA,UAAAR,EACA,cAAAF,EACA,YAAAF,EACA,eAAAmB,GACA,WAAAQ,GACA,aAAAC,EACF,EAEA,OAAO,GAAAQ,QAAA,cAACC,GAAc,SAAd,CAAuB,MAAOJ,GAAQrC,CAAS,CACzD,EAEO0C,GAAQ/C,GEpPf,IAAAgD,GAAmB,4BAEbC,GAAO,GAAAC,QAAO,IAAI,MAAM,KAAO,CACnC,UAAW,mCACb,EAAE;AAAA,sBACqBC,GAAUA,EAAM,MAAM,MAAM,EAAE;AAAA,WACzCA,GAAUA,EAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBzCC,GAAQH,GCvBf,IAAAI,GAAkB,gBAWlB,IAAMC,GAAmB,CAAC,CACxB,iBAAAC,EACA,iBAAAC,EACA,aAAAC,EACA,SAAAC,CACF,IACE,GAAAC,QAAA,cAACC,GAAgB,SAAhB,CAAyB,MAAO,CAAE,aAAAH,EAAc,iBAAAF,EAAkB,iBAAAC,CAAiB,GACjFE,CACH,EAGKG,GAAQP,GCtBf,IAAAQ,GAA6C,gBAc7C,IAAMC,GAAwB,CAAC,CAAE,IAAAC,EAAK,OAAAC,EAAQ,OAAAC,EAAQ,SAAAC,CAAS,IAAkC,CAC/F,GAAM,CAACC,EAAaC,CAAc,KAAI,aAAsB,EAEtDC,EAAQF,GAAa,aAAa,SAAS,EAC3C,CACJ,QAAAG,EACA,KAAMC,EACN,MAAAC,CACF,EAAIC,GACF,GAAGT,GAAUD,CAAG,GAAGM,EAAQ,IAAIA,CAAK,GAAK,EAAE,GAC3C,CACE,QAASJ,EACL,CACE,YAAaA,CACf,EACA,CAAC,CACP,EACA,CAACE,CACH,EAEMO,KAAe,gBAClBC,GACCP,EAAe,CACb,aAAAO,CACF,CAAC,EACH,CAAC,CACH,EAEMC,EAAQ,CACZ,gBAAiB,CAAC,CAACZ,EACnB,QAAAM,EACA,MAAAE,EACA,SAAAD,EACA,YAAAJ,EACA,aAAAO,CACF,EAEA,OAAO,GAAAG,QAAA,cAACC,GAAqB,SAArB,CAA8B,MAAOF,GAAQV,CAAS,CAChE,EAEOa,GAAQjB,GCtDf,IAAAkB,GAAmC,gBCAnC,IAAAC,GAAsC,WAEhCC,GAAqBC,GAAgB,CACzC,GAAM,CAACC,EAAOC,CAAQ,KAAI,aAAS,eAAe,QAAQF,CAAG,CAAC,EAExDG,KAAM,gBACTC,GAAc,CACb,eAAe,QAAQJ,EAAKI,CAAC,EAC7BF,EAASE,CAAC,CACZ,EACA,CAACJ,CAAG,CACN,EAEMK,KAAS,gBAAY,IAAM,CAC/B,eAAe,WAAWL,CAAG,EAC7BE,EAAS,IAAI,CACf,EAAG,CAACF,CAAG,CAAC,EAEFM,KAAQ,gBAAY,IAAM,CAC9B,eAAe,MAAM,EACrBJ,EAAS,IAAI,CACf,EAAG,CAACF,CAAG,CAAC,EAER,MAAO,CACL,MAAAC,EACA,IAAAE,EACA,OAAAE,EACA,MAAAC,CACF,CACF,EAEOC,GAAQR,GDvBf,IAAMS,GAAyB,CAAC,CAAE,SAAAC,CAAS,IAAmC,CAC5E,GAAM,CAAE,MAAAC,EAAO,IAAAC,EAAK,OAAAC,CAAO,EAAIC,GAAkB,gBAAgB,EAE3DC,KAAsB,gBAAaC,GAAiBA,EAAKJ,EAAII,CAAE,EAAIH,EAAO,EAAI,CAAC,CAAC,EAEtF,OACE,GAAAI,QAAA,cAACC,GAAsB,SAAtB,CAA+B,MAAO,CAAE,iBAAkBP,EAAO,oBAAAI,CAAoB,GACnFL,CACH,CAEJ,EAEOS,GAAQV,GEpBf,IAAAW,GAAmE,gBCAnE,IAAAC,GAAkC,WAE5BC,GAAkBC,GAAa,CACnC,IAAMC,KAAM,WAAU,EACtB,uBAAU,IAAM,CACdA,EAAI,QAAUD,CAChB,CAAC,EACMC,EAAI,OACb,EAEOC,GAAQH,GCRR,IAAMI,GAAW,WAWXC,GAA0B,CACrC,KAAM,OAAO,SAAS,QACxB,EAEMC,GAAc,CAACC,EAAkBC,IAAuB,CAC5D,IAAMC,EAAO,CAAE,GAAGF,CAAM,EACxB,OAAQC,EAAO,KAAM,CACnB,KAAKJ,GACH,OAAAK,EAAK,KAAOD,EAAO,KACZC,EAET,QACE,MAAM,IAAI,MAAM,yBAAyB,CAC7C,CACF,EAEOC,GAAQJ,GFvBf,IAAMK,GACJ,qGACIC,GAAY,WAMZC,GAAe,CAAC,CAAE,SAAAC,CAAS,IAAyB,CACxD,GAAM,CAACC,EAAOC,CAAQ,KAAI,eAAWC,GAASC,EAAY,EACpDC,EAAeC,GAAYL,EAAM,IAAI,KAE3C,cAAU,IAAM,CACd,IAAMM,EAAa,IAAM,CACvBL,EAAS,CAAE,KAAMM,GAAU,KAAM,OAAO,SAAS,QAAS,CAAC,CAC7D,EAEA,cAAO,iBAAiBV,GAAWS,CAAU,EACtC,IAAM,CACX,OAAO,oBAAoBT,GAAWS,CAAU,CAClD,CACF,EAAG,CAAC,CAAC,EAEL,IAAME,KAAY,gBAAaC,GAAiB,CAC9C,IAAMC,EAAK,OAAO,SAAS,KAC3B,QAAQ,UAAU,KAAM,GAAI,GAAGD,CAAI,EAAE,EACrC,IAAME,EAAK,OAAO,SAAS,KACvBD,EAAG,cAAcC,CAAE,IAAM,GAC3B,OAAO,cAAc,IAAI,gBAAgB,YAAY,CAAC,EAExDV,EAAS,CAAE,KAAMM,GAAU,KAAAE,CAAK,CAAC,CACnC,EAAG,CAAC,CAAC,EAECG,KAAe,gBAAaH,GAAiB,CACjD,IAAMC,EAAK,OAAO,SAAS,KAC3B,QAAQ,aAAa,KAAM,GAAID,CAAI,EACnC,IAAME,EAAK,OAAO,SAAS,KACvBD,EAAG,cAAcC,CAAE,IAAM,GAC3B,OAAO,cAAc,IAAI,gBAAgB,YAAY,CAAC,EAExDV,EAAS,CAAE,KAAMM,GAAU,KAAAE,CAAK,CAAC,CACnC,EAAG,CAAC,CAAC,EAECI,KAAK,YAAQ,IAAMb,EAAM,KAAK,MAAMJ,EAAiB,GAAG,IAAI,EAAG,CAACI,EAAM,IAAI,CAAC,EAE3Ec,KAA0B,YAC9B,KAAO,CACL,GAAGd,EACH,aAAAI,EACA,GAAAS,EACA,UAAAL,EACA,aAAAI,CACF,GACA,CAACZ,CAAK,CACR,EAEA,OAAO,GAAAe,QAAA,cAACC,GAAY,SAAZ,CAAqB,MAAOF,GAAQf,CAAS,CACvD,EAEOkB,GAAQnB,GV7Bf,IAAMoB,GAAgB,CAAC,CACrB,IAAAC,EACA,OAAAC,EACA,OAAAC,EACA,aAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,sBAAAC,EACA,UAAAC,EACA,SAAAC,CACF,IACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,iBAAkBP,EAClB,iBAAkBC,EAClB,aAAcH,GAEd,GAAAO,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAgB,IAAKV,GACpB,GAAAM,QAAA,cAACK,GAAA,CACC,IAAKf,EACL,OAAQE,EACR,sBAAuBK,EACvB,UAAWC,GAEX,GAAAE,QAAA,cAACM,GAAA,CAAsB,IAAKhB,EAAK,OAAQC,EAAQ,OAAQC,GACvD,GAAAQ,QAAA,cAACO,GAAA,KACC,GAAAP,QAAA,cAACQ,GAAA,KAAMT,CAAS,CAClB,CACF,CACF,CACF,CACF,CACF,CACF,EAGKU,GAAQpB,Ga1Ef,IAAAqB,GAAkB,gBCAlB,IAAAC,GAAiC,gBCAjC,IAAAC,GAAoC,WAE9BC,GAAY,8EACZC,GAAc,aAEdC,GAAU,IAAM,CACpB,IAAMC,EAAO,OAAO,SAAS,KAAK,OAAO,EAAG,OAAO,SAAS,KAAK,MAAM,EACvE,OAAOH,GAAU,KAAKG,CAAI,GAAK,CAACA,EAAOA,EAAO,MAChD,EAEMC,GAAc,IAAM,CACxB,GAAM,CAACC,EAAIC,CAAK,KAAI,aAA6B,IAAMJ,GAAQ,CAAC,EAC1DK,EAAe,IAAM,CACzB,IAAMJ,EAAO,OAAO,SAAS,KAAK,OAAO,EAAG,OAAO,SAAS,KAAK,MAAM,EACvE,GAAIH,GAAU,KAAKG,CAAI,GAAK,CAACA,EAC3BG,EAAM,OAAO,SAAS,KAAK,OAAO,EAAG,OAAO,SAAS,KAAK,MAAM,CAAC,MAEjE,MAAM,cAEV,EAEA,uBAAU,KACRC,EAAa,EACb,OAAO,iBAAiBN,GAAaM,CAAY,EAC1C,IAAM,CACX,OAAO,oBAAoBN,GAAaM,CAAY,CACtD,GACC,CAAC,CAAC,EAEEF,CACT,EAEOG,GAAQJ,GDrBf,IAAMK,GAAiB,CAAC,CACtB,WAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,gBAAAC,EACA,oBAAAC,EACA,yBAAAC,EACA,iBAAAC,EACA,UAAAC,EACA,wBAAAC,EACA,0BAAAC,EACA,kBAAAC,CACF,IAA2B,CACzB,IAAMC,EAASC,GAAY,EACrB,CAAE,GAAIC,CAAO,EAAIC,GAAQ,EACzBC,EAAcC,GAAyBhB,CAAU,KAEvD,cAAU,IAAM,CACTO,IACCI,EACFM,EAAO,QAAQ,kBAAmBN,CAAM,EAExCM,EAAO,QAAQ,iBAAiB,EAGtC,EAAG,CAACN,CAAM,CAAC,EAEX,IAAMO,EAAKL,GAAUF,EAErB,OAAKI,EAGH,GAAAI,QAAA,iBAAAA,QAAA,cACGD,EACC,GAAAC,QAAA,cAACC,GAAA,CACC,GAAIF,EACJ,UAAW,CAACX,EACZ,yBAA0BF,EAC1B,iBAAkBC,EAClB,UAAWC,EACX,wBAAyBC,EACzB,kBAAmBE,EACrB,EAEA,GAAAS,QAAA,cAACE,GAAA,CACC,WAAYrB,EACZ,WAAYC,EACZ,mBAAoBC,EACpB,gBAAiBC,EACjB,UAAW,CAACI,EACZ,iBAAkBD,EAClB,UAAWC,EACX,oBAAqBH,EACrB,0BAA2BK,EAC3B,kBAAmBC,EACrB,CAEJ,EA5BuB,IA8B3B,EAEOY,GAAQvB,GD9Df,IAAMwB,GAA6B,CAAC,CAAE,SAAAC,EAAU,UAAAC,CAAU,IACxD,GAAAC,QAAA,cAACC,GAAA,CAAe,GAAGH,GACjB,GAAAE,QAAA,cAACE,GAAA,CAAgB,GAAGH,EAAW,CACjC,EAGKI,GAAQN,GGhBf,IAAAO,GAAkB,gBAiClB,IAAMC,GAAoB,CAAC,CACzB,IAAAC,EACA,OAAAC,EACA,OAAAC,EACA,aAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,SAAAC,CACF,IACE,GAAAC,QAAA,cAACC,GAAA,KACC,GAAAD,QAAA,cAACE,GAAA,CACC,iBAAkBL,EAClB,iBAAkBC,EAClB,aAAcH,GAEd,GAAAK,QAAA,cAACG,GAAA,KACC,GAAAH,QAAA,cAACI,GAAA,CAAgB,IAAKR,GACpB,GAAAI,QAAA,cAACK,GAAA,CAAsB,IAAKb,EAAK,OAAQC,EAAQ,OAAQC,GACvD,GAAAM,QAAA,cAACM,GAAA,KACC,GAAAN,QAAA,cAACO,GAAA,KAAMR,CAAS,CAClB,CACF,CACF,CACF,CACF,CACF,EAGKS,GAAQjB,GCaf,IAAOkB,GAAQC",
6
+ "names": ["import_react", "import_react", "import_styled_components", "_colors", "theme", "theme_default", "size", "multiplier", "baseUnit", "theme_default", "Wrapper", "styled", "props", "size", "Container", "children", "React", "Wrapper", "Container_default", "import_styled_components", "Page", "styled", "PageSection", "size", "accent", "props", "large", "fillSpace", "import_react", "import_styled_components", "Wrapper", "styled", "Header", "size", "HeaderCount", "HeaderSort", "Body", "Footer", "FooterProgress", "FooterAction", "ResultCount", "props", "import_react", "import_styled_components", "Wrapper", "styled", "Description", "size", "Bar", "props", "BarActive", "import_react_i18next", "ProgressBar", "valueCurrent", "valueMax", "t", "barWidth", "React", "Wrapper", "Description", "Bar", "BarActive", "ProgressBar_default", "import_styled_components", "import_styled_components", "UtilityTextRight", "styled", "UtilityFontSizeSmall", "UtilityTextPrimary", "UtilityTextBold", "ButtonReset", "styled", "ButtonBase", "size", "props", "fullWidth", "inputHeight", "ButtonPrimary", "ButtonSecondary", "ButtonContent", "ButtonClear", "UtilityTextRight", "ButtonInline", "inline", "ButtonInlineBold", "ButtonInlineLight", "ButtonInlinePrimary", "React", "import_styled_components", "import_styled_components", "noTransform", "fadeIn", "rotate", "Spinner", "styled", "size", "rotate", "Wrapper", "inline", "center", "import_styled_components", "SrOnly", "styled", "import_react_i18next", "Loader", "inline", "center", "t", "Wrapper", "Spinner", "SrOnly", "Loader_default", "import_format", "import_sv", "MANUFACTURER", "MODEL_SERIES", "FUEL_TYPE", "GEARBOX_TYPE", "BRANCH", "COLOR", "ENVIRONMENT_CLASS", "SEGMENT", "DRIVING_WHEEL", "PRICE", "MILEAGE", "MODEL_YEAR", "LEASING_PRICE", "BUSINESS_LEASING_PRICE", "ODOMETER_VALUE_AS_KM", "COLOR_WHITE", "COLOR_BLACK", "COLOR_GRAY", "COLOR_SILVER", "COLOR_BLUE", "COLOR_RED", "COLOR_BROWN", "COLOR_GREEN", "COLOR_ORANGE", "COLOR_YELLOW", "COLOR_PURPLE", "COLOR_BEIGE", "DEFAULT_PLACEHOLDER_IMAGE", "notEmpty", "value", "numberSeparator", "n", "x", "s", "c", "re", "num", "dateTimeFormat", "value", "format", "date", "formatFns", "sv", "import_react", "import_react", "SearchContext", "_", "useSearch", "SearchContext", "useSearch_default", "import_react", "import_styled_components", "iconSize", "Wrapper", "styled", "Select", "size", "props", "Option", "Icon", "React", "import_styled_components", "Icon", "styled", "block", "IconInfo", "IconCancel", "IconChevronDown", "IconChevronLeft", "IconChevronRight", "IconCheck", "IconRadio", "IconSearch", "IconExclamationCircle", "IconExclamationTriangle", "IconImage", "import_react_i18next", "SortSelect", "value", "options", "onChange", "unit", "t", "React", "Wrapper", "Select", "option", "Option", "Icon", "IconChevronDown", "SortSelect_default", "import_i18next", "SortOptionDisplayName", "getTranslatedSortOptionDisplayName", "str", "i18next", "Result", "children", "loading", "response", "documents", "queryFilter", "onLoadMore", "onFilterUpdate", "useSearch_default", "onSortOptionChange", "e", "numberOfDocuments", "numberOfHits", "useSkeletons", "selectedSortOption", "x", "sortOptions", "so", "getTranslatedSortOptionDisplayName", "React", "Loader_default", "Wrapper", "Header", "HeaderCount", "ResultCount", "numberSeparator", "HeaderSort", "SortSelect_default", "Body", "Footer", "FooterProgress", "ProgressBar_default", "FooterAction", "ButtonSecondary", "ButtonContent", "Result_default", "import_react", "import_styled_components", "List", "styled", "size", "Item", "Action", "ButtonReset", "props", "Label", "Indicator", "IndicatorValue", "import_react", "React", "import_styled_components", "import_styled_components", "HeadingBase", "styled", "size", "noMargin", "H1", "props", "H2", "H3", "H4", "H5", "VisualHeading", "Wrapper", "styled", "UiBlock", "fadeIn", "PanelWrapper", "props", "noTransform", "Header", "size", "Heading", "H1", "Close", "CloseBtn", "ButtonReset", "Body", "Footer", "FooterAction", "FooterActionItem", "portal_namespace_exports", "__export", "DefaultPortal", "React", "PortalElement", "id", "portal_element_default", "import_react", "import_react_dom", "Portal", "id", "children", "el", "React", "current", "dynamic", "ReactDOM", "portal_default", "import_react_i18next", "Panel", "id", "title", "footer", "onClose", "children", "t", "portal_default", "portal_namespace_exports", "Wrapper", "UiBlock", "PanelWrapper", "Header", "Heading", "H1", "Close", "CloseBtn", "IconCancel", "Body", "Footer", "Panel_default", "import_react", "import_styled_components", "List", "styled", "size", "Header", "ButtonReset", "Label", "Heading", "Indicator", "IndicatorValue", "Icon", "props", "Body", "Item", "isOpen", "import_react_i18next", "AccordionItem", "heading", "children", "activeCount", "isActive", "t", "extend", "setExtend", "onToggleExtend", "React", "Item", "Header", "Label", "Heading", "Indicator", "IndicatorValue", "Icon", "IconChevronDown", "Body", "Accordion", "List", "Accordion_default", "import_styled_components", "Repeat", "styled", "size", "RepeatTiny", "RepeatSmall", "import_react", "import_react", "import_react", "import_styled_components", "List", "styled", "size", "Item", "Action", "ButtonReset", "props", "ActionIcon", "ActionLabel", "ChecklistItem", "label", "onClick", "active", "radio", "React", "Item", "Action", "ActionIcon", "IconRadio", "IconCheck", "ActionLabel", "Checklist", "items", "List", "item", "Checklist_default", "import_react", "import_styled_components", "Wrapper", "styled", "OverflowBox", "children", "React", "Wrapper", "OverflowBox_default", "ChecklistFacet", "facet", "loading", "error", "onFilterUpdate", "useSearch_default", "selected", "setSelected", "onClick", "f", "React", "OverflowBox_default", "Checklist_default", "a", "b", "checkListFacet_default", "import_react", "import_react", "import_styled_components", "List", "styled", "size", "Item", "Action", "ButtonReset", "Color", "props", "active", "boxShadow", "Label", "ColorSelectItem", "label", "hex", "onClick", "active", "disabled", "boxShadow", "React", "Item", "Action", "Color", "Label", "ColorSelect", "items", "List", "item", "ColorSelect_default", "getHexColorFromDisplayName", "displayName", "COLOR_WHITE", "COLOR_BLACK", "COLOR_GRAY", "COLOR_SILVER", "COLOR_BLUE", "COLOR_RED", "COLOR_BROWN", "COLOR_GREEN", "COLOR_ORANGE", "COLOR_YELLOW", "COLOR_PURPLE", "COLOR_BEIGE", "ColorSelectFacet", "facet", "loading", "error", "onFilterUpdate", "useSearch_default", "selected", "setSelected", "onClick", "f", "React", "ColorSelect_default", "a", "b", "getHexColorFromDisplayName", "colorFacet_default", "import_react", "import_react", "import_react_compound_slider", "import_styled_components", "RangeSpan", "styled", "size", "RangeSpanItem", "props", "Slider", "Bar", "Track", "Handle", "import_react", "Handle", "min", "max", "id", "value", "percent", "getHandleProps", "React", "import_react", "Track", "source", "target", "getTrackProps", "React", "getSteps", "steps", "current", "step", "index", "c", "RangeSlider", "loading", "values", "domain", "unit", "formatValues", "maxPrefix", "onChange", "setCurrent", "onUpdate", "nextValues", "currentMin", "numberSeparator", "currentMax", "equal", "_maxPrefix", "React", "Slider", "Bar", "Track", "Handle", "getRailProps", "handles", "getHandleProps", "handle", "tracks", "getTrackProps", "id", "source", "target", "RangeSpan", "RangeSpanItem", "RangeSlider_default", "getInitialValues", "domain", "facet", "searchParams", "facetMin", "_queryMin", "facetMax", "_queryMax", "queryMin", "min", "queryMax", "max", "averageDelta", "x", "xs", "acc", "last", "getSteps", "initialAllValues", "delta", "i", "RangeFacet", "unit", "formatValues", "loading", "queryFilter", "initialFacets", "onFilterUpdate", "useSearch_default", "initialFacet", "maxPrefix", "state", "setValues", "_initialAllValues", "f", "_steps", "init", "minStr", "maxStr", "onChange", "nextValues", "query", "React", "RangeSlider_default", "rangeFacet_default", "import_react_i18next", "FacetSelector", "facet", "MANUFACTURER", "MODEL_SERIES", "FUEL_TYPE", "GEARBOX_TYPE", "BRANCH", "ENVIRONMENT_CLASS", "SEGMENT", "DRIVING_WHEEL", "React", "checkListFacet_default", "COLOR", "colorFacet_default", "PRICE", "rangeFacet_default", "BUSINESS_LEASING_PRICE", "LEASING_PRICE", "ODOMETER_VALUE_AS_KM", "MILEAGE", "MODEL_YEAR", "faceSelector_default", "import_react_i18next", "FilterPanel", "facet", "filteredFacets", "numberOfHits", "loading", "onFilterUpdate", "onClose", "t", "onClearFilters", "React", "Panel_default", "FooterAction", "FooterActionItem", "ButtonSecondary", "ButtonContent", "ButtonPrimary", "Accordion_default", "x", "f", "AccordionItem", "Repeat", "faceSelector_default", "FilterPanel_default", "import_react_i18next", "isSelected", "f", "searchParams", "PRICE", "MILEAGE", "LEASING_PRICE", "BUSINESS_LEASING_PRICE", "MODEL_YEAR", "filter", "filterOdometer", "id", "marketCode", "filterList", "Filter", "t", "queryFilter", "initialFacets", "loading", "response", "onFilterUpdate", "useSearch_default", "facets", "facet", "setFacet", "onSelectFacet", "nextFacet", "onClose", "filterNames", "x", "filteredFacets", "a", "b", "match", "y", "React", "FilterPanel_default", "List", "selected", "Item", "Action", "Label", "Indicator", "IndicatorValue", "Filter_default", "import_react", "import_styled_components", "Wrapper", "styled", "List", "size", "Item", "props", "import_react", "import_styled_components", "Wrapper", "styled", "Image", "props", "Picture", "Source", "Img", "Content", "size", "ContentBody", "ContentFooter", "PreHeading", "Heading", "Link", "Description", "Usp", "Price", "CurrentPrice", "PriceCell", "OldPrice", "Label", "import_react", "import_styled_components", "Item", "styled", "size", "Box", "props", "ItemSection", "Action", "ButtonReset", "List", "isSmall", "UspItem", "title", "onClick", "React", "Item", "Box", "ItemSection", "Action", "IconInfo", "UspList", "items", "small", "List", "item", "index", "UspList_default", "import_react", "import_react", "PathContext", "usePath", "context", "PathContext", "usePath_default", "import_react_i18next", "import_react", "useIsInViewport", "options", "containerRef", "isVisible", "setIsVisible", "intersectionRatio", "setIntersectionRatio", "callbackFunction", "entries", "observer", "entry", "useIsInViewport_default", "ProductCard", "id", "title", "href", "image", "pathRoute", "placeholderImage", "branchName", "description", "uspList", "price", "oldPrice", "leasingPrice", "businessLeasingPrice", "onClick", "t", "containerRef", "isVisible", "useIsInViewport_default", "pushState", "usePath_default", "_onClick", "onHrefClick", "e", "reg", "React", "Wrapper", "Image", "Picture", "Source", "Img", "DEFAULT_PLACEHOLDER_IMAGE", "Content", "ContentBody", "PreHeading", "Heading", "Link", "Description", "Usp", "UspList_default", "ContentFooter", "Price", "PriceCell", "OldPrice", "Label", "CurrentPrice", "ProductCard_default", "import_i18next", "resolveImage", "document", "img", "Grid", "documents", "placeholderImage", "hashRoute", "pathRoute", "displayBranchName", "onClickItem", "React", "Wrapper", "List", "_pathRoute", "Item", "ProductCard_default", "numberSeparator", "i18next", "Grid_default", "import_react", "import_styled_components", "Wrapper", "styled", "Query", "Clear", "ButtonReset", "size", "props", "import_react_i18next", "SearchTerm", "children", "onClear", "clearTitle", "t", "React", "Wrapper", "Query", "Clear", "IconCancel", "SearchTerm_default", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Label", "Search", "props", "Action", "ActionBtn", "ButtonReset", "Input", "size", "InputSearch", "React", "placeholder", "label", "value", "id", "onSearch", "onChange", "onKeyDown", "ref", "Wrapper", "Label", "Search", "Input", "Action", "ActionBtn", "IconSearch", "InputSearch_default", "import_react", "useOutsideClick", "ref", "callback", "handleClick", "e", "useOutsideClick_default", "import_react_i18next", "SearchBar", "value", "setValue", "onSearch", "t", "ref", "onChange", "e", "useOutsideClick_default", "_onSearch", "onKeyDown", "React", "InputSearch_default", "SearchBar_default", "SearchFilter", "value", "setValue", "queryFilter", "onFilterUpdate", "useSearch_default", "onSearch", "nextQuery", "React", "SearchBar_default", "SearchFilter_default", "import_react", "import_styled_components", "getSnackbarBg", "severity", "bg", "theme_default", "Wrapper", "styled", "size", "props", "Icon", "Content", "Heading", "Message", "Snackbar", "severity", "icon", "heading", "children", "iconSelector", "React", "IconInfo", "IconExclamationCircle", "IconExclamationTriangle", "IconCheck", "Wrapper", "Icon", "Content", "Heading", "Message", "Snackbar_default", "PubSub", "_PubSub", "event", "i", "eventName", "args", "pubsub_default", "import_i18next", "import_react", "import_i18next", "import_react_i18next", "getLanguage", "marketCode", "initializeI18n", "resolve", "i18n", "useInitializeTranslation", "marketCode", "initialized", "setInitialized", "i18n", "initialize", "m", "initializeI18n", "useInitializeTranslation_default", "import_i18next", "WaykeSearch", "marketCode", "filterList", "initialQueryParams", "hashRoute", "pathRoute", "removeSearchBar", "placeholderImage", "removeFilterOptions", "modifyDocumentTitleSearch", "displayBranchName", "onClickSearchItem", "error", "documents", "queryFilter", "onFilterUpdate", "onInitialize", "useSearch_default", "initialized", "useInitializeTranslation_default", "onItemClicked", "id", "pubsub_default", "onClearQuery", "nextQuery", "searchQuery", "React", "Page", "PageSection", "Container_default", "SearchFilter_default", "SearchTerm_default", "Filter_default", "Result_default", "Snackbar_default", "Grid_default", "i18next", "portal_element_default", "portal_namespace_exports", "search_default", "import_react", "import_ecom_web", "import_react", "import_styled_components", "List", "styled", "Item", "size", "Label", "Value", "import_styled_components", "Price", "styled", "OldPrice", "props", "import_react_i18next", "PriceTable", "price", "discount", "t", "React", "List", "Item", "Label", "VisualHeading", "Value", "Price", "numberSeparator", "OldPrice", "PriceTable_default", "React", "import_styled_components", "Logo", "styled", "size", "wide", "LogoBox", "logo", "logo2x", "alt", "wide", "logoRetina", "Logo", "LogoBox_default", "import_react", "import_styled_components", "Wrapper", "styled", "size", "small", "Content", "children", "small", "dangerouslySetInnerHTML", "React", "Wrapper", "Content_default", "import_react", "import_styled_components", "Wrapper", "styled", "props", "Quote", "Author", "size", "AvatarWrapper", "Info", "Name", "Date", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "Avatar", "image", "alt", "React", "Wrapper", "Avatar_default", "Blockquote", "children", "author", "avatar", "date", "React", "Wrapper", "Quote", "Author", "AvatarWrapper", "Avatar_default", "Info", "Name", "Date", "Blockquote_default", "import_react", "import_styled_components", "Wrapper", "styled", "Extend", "size", "extended", "Action", "ExtendContent", "children", "actionTitle", "onClick", "extend", "setExtend", "onExtend", "React", "Wrapper", "ref", "Extend", "Action", "ButtonClear", "ButtonContent", "ExtendContent_default", "import_react", "import_react_slick", "import_scroll_into_view_if_needed", "import_styled_components", "quickNavWidth", "Wrapper", "styled", "props", "size", "Main", "Alt", "Item", "SliderWrapper", "Image", "ImageFull", "Arrow", "ArrowLeft", "ArrowRight", "QuickNav", "QuickNavItem", "active", "QuickNavBtn", "ButtonReset", "QuickNavImg", "MediaButtonWrapper", "EnableNavigationButton", "import_styled_components", "NavButton", "styled", "ButtonReset", "size", "props", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "UiBlock", "Item", "Img", "CloseBtn", "ButtonReset", "import_react", "import_react", "getVimeoId", "url", "regExp", "match", "getYouTubeId", "youtubeBase", "getYoutubeThumbnail", "id", "onImageLoad", "thumbnail", "onImageError", "import_styled_components", "Wrapper", "styled", "props", "Iframe", "YouTubePlayer", "url", "autoplay", "React", "Wrapper", "Iframe", "getYouTubeId", "YoutubePlayer_default", "import_react", "VimeoPlayer", "url", "autoplay", "React", "Wrapper", "Iframe", "getVimeoId", "VimeoPlayer_default", "import_react", "import_styled_components", "Video", "styled", "modal", "Video_default", "CustomPlayer", "url", "controls", "modal", "ratio", "isPreview", "React", "Wrapper", "Video_default", "CustomPlayer_default", "ytNames", "isYouTubeVideo", "url", "host", "vNames", "isVimeoVideo", "VideoPlayer", "autoplay", "controls", "React", "YoutubePlayer_default", "VimeoPlayer_default", "CustomPlayer_default", "EmbeddedVideoLightbox_default", "import_react", "import_react", "import_styled_components", "compassSize", "size", "controlBtnSize", "Wrapper", "styled", "props", "Pannellum", "SphereViewer", "id", "src", "preview", "autoLoad", "onStart", "number", "startBtn", "React", "Wrapper", "Loader_default", "SphereViewer_default", "SphereLightbox", "url", "React", "SphereViewer_default", "SphereLightbox_default", "import_react", "import_react", "MediaButton", "text", "onClick", "React", "MediaButtonWrapper", "ButtonSecondary", "ButtonContent", "MediaButton_default", "import_react", "calculateCurrentFrame", "startFrame", "delta", "length", "frame", "Rotation", "children", "pointerPosition", "max", "state", "setState", "touchEnd", "mouseMove", "mouseUp", "touchMove", "event", "notTouched", "childCount", "offsetWidth", "pointer", "calculatePointerPosition", "offset", "setCurrentFrame", "touchStart", "onMouseEnter", "onMouseLeave", "current", "clientX", "offsetLeft", "React", "child", "i", "Rotation_default", "import_react_i18next", "ThreeSixtyLightbox", "urls", "started", "setStarted", "onStart", "React", "Rotation_default", "image", "i", "Img", "Item", "MediaButton_default", "ThreeSixtLightbox_default", "import_react_i18next", "Lightbox", "index", "media", "onClose", "t", "onRef", "ref", "React", "Wrapper", "e", "UiBlock", "m", "i", "Item", "Img", "ThreeSixtLightbox_default", "x", "SphereLightbox_default", "EmbeddedVideoLightbox_default", "CloseBtn", "IconCancel", "Lightbox_default", "import_react", "import_react", "import_react", "import_react", "cache", "getCachedResult", "key", "setCachedResult", "value", "pendingPromise", "isPendingPromise", "url", "setPendingPromise", "promise", "clearPendingPromise", "useFetch", "path", "options", "skip", "promiseCache", "data", "setData", "loading", "setLoading", "error", "setError", "doFetch", "cached", "request", "result", "json", "useFetch_default", "useVimeoThumbnail", "id", "small", "thumbnail", "setThumbnail", "data", "useFetch_default", "useVimeoThumbnail_default", "useThumbnail", "url", "small", "thumbnail", "setThumbnail", "vimeoId", "getVimeoId", "vimeoThumbnail", "useVimeoThumbnail_default", "youtubeThumbnail", "getYoutubeThumbnail", "useThumbnail_default", "React", "import_styled_components", "Wrapper", "styled", "props", "size", "UiBlock", "fadeIn", "Dialog", "noTransform", "Content", "Header", "Heading", "H1", "Close", "CloseBtn", "ButtonReset", "Body", "Image", "ModalFoldout", "ModalFoldoutBody", "import_react_i18next", "Modal", "id", "title", "onClose", "children", "t", "portal_default", "portal_namespace_exports", "Wrapper", "e", "UiBlock", "Dialog", "Content", "Header", "Heading", "H1", "Close", "CloseBtn", "IconCancel", "Body", "Modal_default", "import_react_i18next", "GalleryEmbed", "src", "index", "t", "modal", "setModal", "thumbnail", "useThumbnail_default", "onClick", "e", "onCloseModal", "onError", "onImageError", "onLoad", "onImageLoad", "customVideo", "React", "ImageFull", "MediaButton_default", "Modal_default", "EmbeddedVideoLightbox_default", "CustomPlayer_default", "EmbededVideo_default", "import_react", "import_react_i18next", "QuickNavEmbeded", "src", "index", "t", "thumbnail", "useThumbnail_default", "onError", "e", "onImageError", "onLoad", "onImageLoad", "customVideo", "React", "QuickNavImg", "CustomPlayer_default", "QuickNavEmbeded_default", "import_react", "import_react_i18next", "onMediaClick", "func", "Sphere", "url", "preview", "visible", "onDisableNavigation", "navigationDisabled", "t", "React", "ImageFull", "MediaButton_default", "e", "SphereViewer_default", "Sphere_default", "import_react", "import_react_i18next", "onMediaClick", "func", "ThreeSixty", "urls", "visible", "onDisableNavigation", "navigationDisabled", "t", "React", "Image", "MediaButton_default", "e", "Rotation_default", "image", "i", "ThreeSixty_default", "import_react_i18next", "Slider", "SliderComponent", "sliderSettings", "Gallery", "media", "placeholderImage", "t", "slider", "quickNavRef", "isDragging", "index", "setIndex", "lightbox", "setLightbox", "navigationDisabled", "setNavigationDisabled", "beforeChange", "_", "newIndex", "element", "scrollIntoView", "onMouseDown", "onMouseMove", "onClick", "pubsub_default", "nextImage", "prevImage", "goTo", "target", "onDisableNavigation", "onEnableNavigation", "e", "onToggleLightbox", "mediaLength", "placeholder", "DEFAULT_PLACEHOLDER_IMAGE", "React", "Wrapper", "Main", "SliderWrapper", "m", "i", "Item", "Image", "notEmpty", "x", "ThreeSixty_default", "EmbededVideo_default", "Sphere_default", "EnableNavigationButton", "ButtonSecondary", "ButtonContent", "ArrowLeft", "NavButton", "IconChevronLeft", "ArrowRight", "IconChevronRight", "Alt", "QuickNav", "src", "QuickNavItem", "QuickNavBtn", "QuickNavImg", "QuickNavEmbeded_default", "Lightbox_default", "Gallery_default", "import_styled_components", "ProductPage", "styled", "props", "ProductPageAside", "size", "ProductPageMain", "ProductPageAsideSection", "ProductPageMainSection", "Wrapper", "ProductPageContentLimit", "import_client", "import_client", "FinancialOptionDetail", "HoursOpen", "SEARCH_ITEM_QUERY", "SEARCH_ITEM_QUERY_default", "useSearchItem", "id", "SEARCH_ITEM_QUERY_default", "useSearchItem_default", "import_react", "import_react", "React", "import_styled_components", "Wrapper", "styled", "size", "props", "Logo", "LogoImg", "Content", "OptionBoxHeading", "OptionBoxContent", "OptionBox", "logo", "logo2x", "logoAlt", "children", "Wrapper", "Logo", "LogoImg", "Content", "OptionBox_default", "import_react", "import_styled_components", "List", "styled", "Item", "size", "Label", "Value", "DataList", "items", "React", "List", "item", "Item", "Label", "Value", "DataList_default", "import_react_i18next", "Leasing", "financialOption", "modal", "setModal", "toggleModal", "image", "description", "monthlyCost", "duration", "mileage", "type", "name", "title", "React", "Modal_default", "Image", "Content_default", "ModalFoldout", "ModalFoldoutBody", "DataList_default", "numberSeparator", "OptionBox_default", "OptionBoxHeading", "OptionBoxContent", "UtilityTextPrimary", "ButtonInline", "leasing_default", "import_react", "import_client", "import_client", "FinancialOptionDetail", "LOAN_CALCULATION", "LOAN_CALCULATION_default", "useLoanCalculation", "id", "duration", "downPayment", "residual", "LOAN_CALCULATION_default", "useLoan_default", "import_react", "import_styled_components", "ContentLogo", "styled", "props", "ContentLogoText", "ContentLogoMedia", "size", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Label", "Value", "size", "isHighlighted", "props", "RangeSliderLabel", "label", "value", "highlight", "React", "Wrapper", "Label", "Value", "RangeSliderLabel_default", "import_react", "import_react_compound_slider", "RangeSliderSimple", "loading", "values", "domain", "steps", "unit", "formatValues", "onChange", "onUpdate", "first", "step", "currentMin", "numberSeparator", "currentMax", "React", "Slider", "getRailProps", "Bar", "handles", "getHandleProps", "handle", "Handle", "tracks", "getTrackProps", "id", "source", "target", "Track", "RangeSliderSimple_default", "SliderWithLabel", "label", "values", "domain", "steps", "loading", "unit", "formatValues", "onChange", "local", "setLocal", "onUpdate", "nextValues", "React", "RepeatTiny", "RangeSliderLabel_default", "numberSeparator", "RangeSliderSimple_default", "SliderWithLabel_default", "import_react_i18next", "stepGenerator", "step", "max", "steps", "current", "nextCurrent", "LoanModal", "id", "financialOption", "onClose", "t", "tmp", "setTmp", "extend", "setExtend", "React", "onToggleExtend", "pubsub_default", "variables", "setVariables", "duration", "downPayment", "residual", "loading", "data", "useLoan_default", "loan", "downPaymentCurrent", "downPaymentMin", "downPaymentMax", "downPaymentStep", "downPaymentSteps", "onDownPaymentChange", "values", "durationCurrent", "durationMin", "durationMax", "durationStep", "durationSteps", "onDurationChange", "residualCurrent", "residualMin", "residualMax", "residualStep", "residualSteps", "onResidualChange", "interestText", "effectiveInterestText", "monthlyCost", "Modal_default", "Repeat", "ContentLogo", "ContentLogoText", "Content_default", "ContentLogoMedia", "LogoBox_default", "RepeatSmall", "SliderWithLabel_default", "RepeatTiny", "numberSeparator", "ButtonClear", "ButtonContent", "ModalFoldout", "ModalFoldoutBody", "DataList_default", "LoanModal_default", "import_react_i18next", "Loan", "id", "financialOption", "t", "modal", "setModal", "toggleModal", "data", "useLoan_default", "interest", "duration", "monthlyCost", "logo", "React", "OptionBox_default", "OptionBoxHeading", "OptionBoxContent", "LoanModal_default", "numberSeparator", "ButtonInline", "loan_default", "import_react_i18next", "FinancialOptions", "id", "financialOptions", "t", "React", "Repeat", "RepeatTiny", "VisualHeading", "financialOption", "index", "leasing_default", "loan_default", "FinancialOptions_default", "import_react", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Main", "size", "Heading", "H2", "Description", "Footer", "Foldout", "props", "import_react_i18next", "DetailBox", "heading", "description", "children", "t", "extend", "setExtend", "React", "onToggleExtend", "extendBtnText", "Wrapper", "Main", "Heading", "Description", "Footer", "ButtonClear", "ButtonContent", "Foldout", "DetailBox_default", "import_react", "import_styled_components", "Wrapper", "styled", "Header", "Title", "Info", "size", "InfoBtn", "ButtonReset", "props", "Extend", "import_react_i18next", "ExtendInfo", "title", "children", "t", "extend", "setExtend", "onToggleExtend", "React", "Wrapper", "Header", "Title", "Info", "InfoBtn", "IconInfo", "Extend", "ExtendInfo_default", "import_react", "import_styled_components", "Wrapper", "styled", "size", "InputLabel", "children", "htmlFor", "React", "Wrapper", "InputLabel_default", "import_react", "import_styled_components", "Wrapper", "styled", "props", "Input", "size", "InputText", "placeholder", "label", "value", "id", "onChange", "onKeyDown", "React", "Wrapper", "Input", "InputText_default", "React", "React", "import_styled_components", "Label", "styled", "size", "props", "Wrapper", "type", "checked", "error", "Input", "LabelText", "import_react", "import_styled_components", "iconSize", "selectPadding", "size", "Wrapper", "styled", "props", "Select", "Option", "Icon", "InputSelect", "value", "options", "onChange", "unit", "title", "React", "Wrapper", "Select", "option", "Option", "Icon", "IconChevronDown", "InputSelect_default", "import_styled_components", "InputGroup", "styled", "props", "size", "InputGroupColumn", "import_styled_components", "ColumnRow", "styled", "ColumnRowItem", "size", "import_client", "import_client", "INSURANCE_CALCULATION", "INSURANCE_CALCULATION_default", "useInsuranceCalculation", "id", "branchId", "personalNumber", "drivingDistance", "INSURANCE_CALCULATION_default", "useInsurance_default", "ssnIsValid", "s", "import_react_i18next", "InsuranceModal", "id", "branch", "onClose", "insuranceOptions", "t", "form", "setForm", "payload", "setPayload", "loading", "data", "error", "useInsurance_default", "ssnIsValid", "onChangeSsn", "e", "onChangeDrivingDistance", "onShowInsurances", "pubsub_default", "onKeyDown", "options", "React", "Modal_default", "Repeat", "ContentLogo", "ContentLogoText", "Content_default", "ContentLogoMedia", "LogoBox_default", "RepeatSmall", "RepeatTiny", "InputGroup", "InputGroupColumn", "InputLabel_default", "InputText_default", "InputSelect_default", "ButtonPrimary", "ButtonContent", "Loader_default", "Snackbar_default", "insurance", "DetailBox_default", "numberSeparator", "ButtonInline", "H4", "item", "ExtendInfo_default", "addon", "ColumnRow", "ColumnRowItem", "UtilityTextBold", "InsuranceModal_default", "import_react_i18next", "Insurance", "id", "branch", "insuranceOptions", "t", "modal", "setModal", "toggleModal", "React", "InsuranceModal_default", "Repeat", "RepeatTiny", "VisualHeading", "insuranceOption", "index", "OptionBox_default", "OptionBoxHeading", "OptionBoxContent", "ButtonInline", "Insurance_default", "import_react", "import_marked", "import_react", "import_marked", "import_react_i18next", "InsuranceFreeModal", "onClose", "insuranceOptions", "t", "React", "Modal_default", "Repeat", "Content_default", "ButtonInline", "LogoBox_default", "InsuranceFreeModal_default", "import_react_i18next", "Insurance", "insuranceOptions", "modal", "setModal", "toggleModal", "React", "InsuranceFreeModal_default", "Repeat", "RepeatTiny", "VisualHeading", "insuranceOption", "index", "OptionBox_default", "Content_default", "OptionBoxContent", "ButtonInline", "InsuranceFree_default", "InsuranceOptions", "id", "branch", "insuranceOptions", "React", "Insurance_default", "InsuranceFree_default", "InsuranceOptions_default", "import_react", "import_marked", "import_react_i18next", "ManufacturerPackageOption", "packageOption", "React", "ProductPageMainSection", "Repeat", "H2", "Content_default", "ButtonInline", "LogoBox_default", "ManufacturerPackagesOption_default", "import_react", "import_react", "import_react", "import_react_i18next", "ToggleItem", "title", "value", "type", "onClickVisible", "onClickValue", "t", "visible", "setVisible", "_onClickValue", "onClick", "visibleTitle", "React", "RepeatTiny", "ButtonSecondary", "ButtonContent", "toggle_item_default", "import_core", "Metadata", "metadata_min_default", "typedMetadata", "metadata_min_default", "formatPhonenumber", "text", "import_react_i18next", "ActionList", "contact", "branch", "t", "email", "phonenumber", "onClickMailVisible", "pubsub_default", "onClickPhoneVisible", "onClickPhoneValue", "React", "toggle_item_default", "formatPhonenumber", "ActionList_default", "import_styled_components", "Column", "styled", "grow", "noShrink", "Columns", "valign", "align", "$spacing", "size", "flexWrap", "flexInline", "clearLtSm", "props", "clearLtMd", "import_styled_components", "StateIndicator", "styled", "size", "$tone", "props", "import_react", "import_styled_components", "List", "styled", "Item", "size", "Icon", "Label", "CheckMarkListItem", "children", "React", "Item", "Icon", "IconCheck", "Label", "CheckMarkList", "List", "CheckMarkList_default", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "Header", "Body", "Info", "Action", "InfoContent", "InfoBtn", "ButtonReset", "Title", "import_react_i18next", "SwitchBar", "title", "body", "actionTitle", "children", "onClick", "t", "info", "setInfo", "onToggleInfo", "React", "Wrapper", "Header", "Info", "InfoContent", "Title", "InfoBtn", "IconInfo", "Action", "ButtonInline", "Body", "Modal_default", "SwitchBar_default", "import_react", "import_react", "CentralStorageContext", "_", "import_react_i18next", "BranchModal", "loading", "connections", "onClose", "t", "centralStorageId", "setCentralStorageId", "CentralStorageContext", "localValue", "setLocalValue", "onConfirm", "id", "onChange", "e", "React", "Modal_default", "Repeat", "RepeatTiny", "Content_default", "InputLabel_default", "InputSelect_default", "x", "ButtonPrimary", "ButtonContent", "BranchModal_default", "import_react", "import_marked", "PackageOptionModal", "packageOption", "onClose", "React", "Modal_default", "Repeat", "LogoBox_default", "Content_default", "ButtonInline", "PackageOptionModal_default", "import_format", "import_sv", "import_react_i18next", "CheckList", "manufacturer", "packageOptions", "ecommerce", "branch", "contact", "availableFrom", "toggleEcomModal", "loadingCentralStorageVehicle", "t", "modalBranch", "setModalBranch", "openModalBranch", "closeModalBranch", "modal", "setModal", "onOpen", "nextModal", "onClose", "packageOption", "React", "BranchModal_default", "PackageOptionModal_default", "Repeat", "RepeatTiny", "ButtonPrimary", "ButtonContent", "SwitchBar_default", "Content_default", "ActionList_default", "Columns", "Column", "StateIndicator", "UtilityFontSizeSmall", "format", "sv", "CheckMarkList_default", "CheckMarkListItem", "ButtonInline", "index", "CheckList_default", "import_react", "import_react_i18next", "import_react", "import_styled_components", "Wrapper", "styled", "Heading", "Action", "size", "SectionHeader", "children", "onClick", "actionTitle", "React", "Wrapper", "Heading", "Action", "ButtonClear", "ButtonContent", "SectionHeader_default", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "$accentBg", "Item", "List", "$columns", "$columnsSm", "$columnsMd", "ListWrapper", "$spacing", "NavBtn", "PrevBtn", "NextBtn", "OverflowGrid", "items", "itemKeyBase", "spacing", "columns", "columnsSm", "columnsMd", "accentBg", "overflowElement", "onPrev", "itemWidth", "scrollLeft", "onNext", "scrollWidth", "overflowElementWidth", "hidePrevNav", "setHidePrevNav", "hideNextNav", "setHideNextNav", "onScroll", "overflowElementScrollWidth", "React", "Wrapper", "ListWrapper", "List", "item", "i", "Item", "PrevBtn", "NavButton", "IconChevronLeft", "NextBtn", "IconChevronRight", "OverflowGrid_default", "import_react", "import_react", "RelatedSearchContext", "_", "useRelatedSearch", "id", "authorizedReseller", "data", "RelatedSearchContext", "searchParams", "useRelatedSearch_default", "regexEndGuid", "escapeRegExpString", "s", "regexPathGuid", "path", "Related", "id", "hashRoute", "pathRoute", "authorizedReseller", "displayBranchName", "onClickSearchItem", "t", "loading", "response", "moreLikeThisUrl", "useRelatedSearch_default", "onItemClicked", "pubsub_default", "React", "Loader_default", "PageSection", "Container_default", "Repeat", "SectionHeader_default", "H2", "OverflowGrid_default", "document", "prefix", "r", "regexPathGuid", "pathRouteUrl", "ProductCard_default", "numberSeparator", "Related_default", "import_react", "import_marked", "import_react_i18next", "PackageOptions", "packageOptions", "React", "packageOption", "index", "ProductPageMainSection", "Repeat", "H2", "Content_default", "ButtonInline", "LogoBox_default", "PackageOptions_default", "import_react", "import_styled_components", "TableColumn", "styled", "TableColumnRow", "size", "TableColumnCell", "import_react", "import_react", "import_styled_components", "getBg", "severity", "bg", "theme_default", "Wrapper", "styled", "props", "size", "Badge", "label", "severity", "React", "Wrapper", "Badge_default", "import_i18next", "import_react_i18next", "KeyOrder", "TranslateWeekDays", "d", "i18next", "arr", "GetOpeningHours", "o", "prev", "current", "title", "item", "previous", "GetOpeningHoursToday", "dayNumber", "day", "valuOfDateString", "s", "splitted", "x", "OpeningHours", "openingHours", "today", "currentlyOpen", "currentDate", "from", "until", "oh", "React", "RepeatSmall", "Badge_default", "TableColumn", "TableColumnRow", "TableColumnCell", "UtilityTextBold", "OpeningHours_default", "import_react", "import_react_i18next", "PhoneNumber", "phoneNumber", "visible", "setVisible", "onClick", "React", "TableColumnRow", "TableColumnCell", "ButtonInlineBold", "ButtonContent", "PhoneNumber_default", "import_react", "import_react", "import_react", "SettingsContext", "useSettings", "SettingsContext", "useSettings_default", "import_styled_components", "Wrapper", "styled", "Image", "Placeholder", "props", "PlaceholderAction", "import_react_i18next", "StaticMap", "position", "googleMapsApiKey", "googleMapsMarker", "useSettings_default", "visible", "setVisible", "onShowMap", "e", "latitude", "longitude", "React", "Wrapper", "Image", "Placeholder", "PlaceholderAction", "ButtonSecondary", "ButtonContent", "Map_default", "import_react_i18next", "Branch", "branch", "loading", "displayBranchName", "t", "modal", "setModal", "openModal", "closeModal", "React", "BranchModal_default", "Repeat", "H2", "Map_default", "Content_default", "ButtonInline", "ProductPageContentLimit", "TableColumn", "TableColumnRow", "TableColumnCell", "ButtonInlineBold", "ButtonContent", "PhoneNumber_default", "formatPhonenumber", "OpeningHours_default", "Branch_default", "import_react", "import_client", "import_client", "HoursOpen", "SEARCH_ITEM_BRANCH_QUERY", "SEARCH_ITEM_BRANCH_QUERY_default", "useSearchItemBranch", "id", "branch", "SEARCH_ITEM_BRANCH_QUERY_default", "useSearchItemBranch_default", "useCentralStorage", "vehicle", "centralStorageId", "setCentralStorageId", "CentralStorageContext", "connections", "branchId", "x", "data", "loading", "useSearchItemBranch_default", "first", "useCentralStorage_default", "import_react", "import_react_i18next", "Page404", "t", "React", "Page", "PageSection", "Container_default", "H1", "Page404_default", "import_react", "PageLoading", "React", "Page", "PageSection", "Container_default", "Loader_default", "PageLoading_default", "import_react", "PropertyTreeCreator", "_PropertyTreeCreator", "properties", "propertyKey", "property", "categoryId", "categories", "rootProperties", "key", "category", "subCategories", "convertedSubCategories", "subCategory", "createdSubCategories", "id", "index", "self", "firstOccuranceOfId", "value", "prop", "listProperty", "property_tree_creator_default", "ID_ORDER", "compareById", "firstId", "secondId", "firstOrder", "secondOrder", "compare_categories_default", "first", "second", "result", "compare_properties_default", "first", "second", "ORDER", "compareByPredefinedOrder", "firstId", "secondId", "firstOrder", "secondOrder", "compare_basic_properties_default", "first", "second", "result", "compare_properties_default", "sort", "tree", "compare_categories_default", "category", "compare_basic_properties_default", "compare_properties_default", "subCategory", "property_tree_sorter_default", "import_i18next", "deepCopy", "object", "deep_copy_default", "TEXT_TYPE", "NUMBER_TYPE", "BASIC_CATEGORY", "i18next", "ENGINE_SUBCATEGORY", "PropertyBuilder", "name", "hint", "value", "type", "category", "unit", "custom_property_adder_default", "item", "properties", "newProperties", "deep_copy_default", "PROPERTY_BLACK_LIST", "isForbiddenProperty", "key", "CATEGORY_WHITE_LIST", "hasForbiddenCategory", "property", "property_remover_default", "properties", "newProperties", "deep_copy_default", "import_react", "import_styled_components", "TableList", "styled", "props", "TableListItem", "size", "TableListKey", "TableListValue", "TableListBooleanPos", "TableListBooleanNeg", "import_i18next", "import_react_i18next", "formatValue", "value", "unit", "React", "TableListBooleanPos", "i18next", "SrOnly", "IconCheck", "TableListBooleanNeg", "IconCancel", "MetadataItem", "name", "hint", "t", "foldout", "setFoldout", "onToggleFoldout", "presentedValue", "TableListItem", "TableListKey", "ButtonInline", "TableListValue", "Modal_default", "Content_default", "MetadataItem_default", "React", "import_styled_components", "Wrapper", "styled", "size", "props", "List", "Item", "Action", "ButtonReset", "Tabs", "tabs", "active", "onClick", "Wrapper", "List", "tab", "Item", "Action", "Tabs_default", "MetadataSubCategory", "name", "properties", "React", "Repeat", "H5", "TableList", "property", "index", "MetadataItem_default", "MetadataCategory", "subCategories", "subCategory", "PropertySet", "propertySet", "vehicleData", "activeCategoryId", "setActiveCategoryId", "mappedProperties", "newProperties", "property_remover_default", "enrichedProperties", "custom_property_adder_default", "tree", "property_tree_creator_default", "property_tree_sorter_default", "categories", "onTab", "id", "activeCategory", "category", "Tabs_default", "Property_default", "import_react", "import_react_i18next", "DemoCarModal", "onClose", "React", "Modal_default", "Content_default", "DemoCarModal_default", "import_react", "import_react", "import_styled_components", "PdfListItem", "styled", "size", "theme", "List", "PdfLink", "PdfTitle", "props", "PdfSubtitle", "PdfColumn", "PdfListInner", "import_react_i18next", "translateContentType", "document", "PdfDownloadItem", "contentType", "React", "PdfListItem", "PdfListInner", "PdfColumn", "PdfTitle", "PdfSubtitle", "PdfLink", "DocumentList", "documents", "List", "i", "DocumentList_default", "import_react_i18next", "import_i18next", "Translation", "i18next", "SortOrder", "Documents", "documents", "categorised", "prev", "curr", "index", "x", "category", "b", "manyCategories", "React", "ProductPageMainSection", "Repeat", "H2", "ExtendContent_default", "group", "H3", "DocumentList_default", "Documents_default", "import_react", "import_react_i18next", "import_react", "import_styled_components", "Wrapper", "styled", "size", "imageBaseStyling", "Image", "ImageaPlaceholder", "props", "Body", "Heading", "Title", "Branding", "Price", "Preamble", "ReadMoreBtn", "ButtonReset", "import_react_i18next", "AccessoryCard", "title", "image", "branding", "price", "preamble", "readMoreCta", "t", "React", "Wrapper", "Image", "ImageaPlaceholder", "IconImage", "Body", "Heading", "Title", "Branding", "Price", "Preamble", "ReadMoreBtn", "AccessoryCard_default", "import_react", "import_marked", "import_styled_components", "Image", "styled", "import_styled_components", "Link", "styled", "props", "$hoverGhost", "import_react", "import_styled_components", "Wrapper", "styled", "size", "props", "Row", "$oldPrice", "Label", "Price", "PriceBox", "prices", "React", "Wrapper", "item", "i", "Row", "Label", "Price", "PriceBox_default", "import_react_i18next", "AccesoryModal", "accessory", "onClose", "t", "priceList", "numberSeparator", "React", "Modal_default", "Repeat", "Image", "LogoBox_default", "PriceBox_default", "Content_default", "UtilityTextBold", "Link", "AccessoryModal_default", "AccessoriesSection", "accessories", "modal", "setModal", "onOpenModal", "accessory", "onCloseModal", "React", "AccessoryModal_default", "ProductPageMainSection", "Repeat", "H2", "Content_default", "OverflowGrid_default", "AccessoryCard_default", "numberSeparator", "Accessories_default", "import_i18next", "WaykeSearchItem", "marketCode", "id", "hashRoute", "pathRoute", "disableResetScrollOnInit", "placeholderImage", "modifyDocumentTitleItem", "displayBranchName", "onClickSearchItem", "initialized", "useInitializeTranslation_default", "ecomSettings", "useSettings_default", "ecomContext", "loading", "result", "useSearchItem_default", "centralStorageVehicle", "loadingCentralStorageVehicle", "useCentralStorage_default", "demoCarModal", "setDemoCarModal", "onToggleDemoCarModal", "WaykeEcomWeb", "view", "event", "currentStep", "data", "pubsub_default", "vehicle", "registrationNumber", "options", "notEmpty", "opt", "onShowMoreOptionsClick", "React", "PageLoading_default", "Page404_default", "contact", "branch", "title", "accessories", "shortDescription", "media", "description", "price", "discount", "financialOptions", "manufacturer", "ecommerce", "packageOptions", "publishedAt", "documents", "availableFrom", "flags", "insuranceOptions", "fuelType", "mileage", "odometerReading", "gearbox", "modelYear", "propertySet", "uspList", "i18next", "numberSeparator", "Page", "PageSection", "Container_default", "ProductPage", "ProductPageAside", "ProductPageAsideSection", "Repeat", "UtilityFontSizeSmall", "ButtonInlineLight", "ButtonContent", "IconChevronLeft", "LogoBox_default", "RepeatSmall", "H1", "UspList_default", "PriceTable_default", "FinancialOptions_default", "InsuranceOptions_default", "CheckList_default", "ProductPageMain", "Gallery_default", "ProductPageMainSection", "H2", "Content_default", "Property_default", "Blockquote_default", "dateTimeFormat", "ExtendContent_default", "Documents_default", "Accessories_default", "Branch_default", "ButtonPrimary", "PackageOptions_default", "ManufacturerPackagesOption_default", "Related_default", "portal_element_default", "portal_namespace_exports", "DemoCarModal_default", "searchItem_default", "import_react", "import_react", "import_client", "GraphqlProvider", "uri", "children", "client", "React", "ApolloProviderBase", "graphqlProvider_default", "import_react", "import_styled_components", "ThemeProvider", "children", "React", "ThemeProviderBase", "theme_default", "themeProvider_default", "import_react", "getUrlSearchParamsFromUrl", "initialSearchParams", "SearchProvider", "url", "apiKey", "useQueryParamsFromUrl", "pathRoute", "children", "replaceState", "pushState", "usePath_default", "queryFilter", "setQueryFilter", "initialFacets", "setInitialFacets", "documents", "setDocuments", "initialize", "setInitialize", "initialDataRepsonse", "useFetch_default", "query", "loading", "response", "error", "popStateEvent", "event", "currentTarget", "nextSearchParams", "onFilterUpdateEvent", "onFilterUpdate", "pubsub_default", "nextSearch", "_path", "prefix", "index", "pathname", "nextQuery", "onLoadMore", "onInitialize", "_initialQueryParams", "searchParamsFromUrl", "getUrlSearchParamsFromUrl", "initialQueryParams", "value", "key", "v", "React", "SearchContext", "SearchProvider_default", "import_styled_components", "Root", "styled", "props", "Root_default", "import_react", "SettingsProvider", "googleMapsApiKey", "googleMapsMarker", "ecomSettings", "children", "React", "SettingsContext", "SettingsProvider_default", "import_react", "RelatedSearchProvider", "url", "urlMlt", "apiKey", "children", "queryFilter", "setQueryFilter", "query", "loading", "response", "error", "useFetch_default", "fetchRelated", "searchParams", "value", "React", "RelatedSearchContext", "RelatedSearchProvider_default", "import_react", "import_react", "useSessionStorage", "key", "value", "setValue", "set", "v", "remove", "clear", "useSessionStorage_default", "CentralStorageProvider", "children", "value", "set", "remove", "useSessionStorage_default", "setCentralStorageId", "id", "React", "CentralStorageContext", "CentralStorageProvider_default", "import_react", "import_react", "usePrevious", "value", "ref", "usePrevious_default", "SET_PATH", "initialState", "pathReducer", "state", "action", "next", "reducer_default", "regexGuidAnyWhere", "POP_STATE", "PathProvider", "children", "state", "dispatch", "reducer_default", "initialState", "previousPath", "usePrevious_default", "onPopState", "SET_PATH", "pushState", "path", "h1", "h2", "replaceState", "id", "value", "React", "PathContext", "PathProvider_default", "WaykeProvider", "url", "urlMlt", "apiKey", "ecomSettings", "graphQlUrl", "googleMapsApiKey", "googleMapsMarker", "useQueryParamsFromUrl", "pathRoute", "children", "React", "PathProvider_default", "SettingsProvider_default", "CentralStorageProvider_default", "graphqlProvider_default", "SearchProvider_default", "RelatedSearchProvider_default", "themeProvider_default", "Root_default", "WaykeProvider_default", "import_react", "import_react", "import_react", "regexGuid", "HASH_CHANGE", "getGuid", "guid", "useHashGuid", "id", "setId", "onHashChange", "useHashGuid_default", "WaykeComposite", "marketCode", "filterList", "initialQueryParams", "removeSearchBar", "removeFilterOptions", "disableResetScrollOnInit", "placeholderImage", "pathRoute", "modifyDocumentTitleItem", "modifyDocumentTitleSearch", "displayBranchName", "hashId", "useHashGuid_default", "pathId", "usePath_default", "initialized", "useInitializeTranslation_default", "pubsub_default", "id", "React", "searchItem_default", "search_default", "WaykeComposite_default", "WaykeCompositeWithProvider", "provider", "composite", "React", "WaykeProvider_default", "WaykeComposite_default", "WaykeCompositeWithProvider_default", "import_react", "WaykeItemProvider", "url", "urlMlt", "apiKey", "ecomSettings", "graphQlUrl", "googleMapsApiKey", "googleMapsMarker", "children", "React", "PathProvider_default", "SettingsProvider_default", "CentralStorageProvider_default", "graphqlProvider_default", "RelatedSearchProvider_default", "themeProvider_default", "Root_default", "WaykeItemProvidet_default", "src_default", "WaykeCompositeWithProvider_default"]
7
7
  }