emoji-picker-react 4.6.4 → 4.6.6-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"emoji-picker-react.esm.js","sources":["../src/DomUtils/classNames.ts","../src/Stylesheet/stylesheet.ts","../src/DomUtils/focusElement.ts","../src/components/context/ElementRefContext.tsx","../src/types/exposedTypes.ts","../src/config/categoryConfig.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/DataTypes.ts","../src/dataUtils/alphaNumericEmojiIndex.ts","../src/dataUtils/emojiSelectors.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/config/mutableConfig.ts","../src/config/useConfig.ts","../src/hooks/useDebouncedState.ts","../src/hooks/useHideEmojisByUniocode.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/components/context/PickerContext.tsx","../src/hooks/useDisallowMouseMove.ts","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/dataUtils/suggested.ts","../src/typeRefinements/typeRefinements.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useMouseDownHandlers.ts","../src/hooks/useOnScroll.ts","../src/DomUtils/scrollTo.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useIsEmojiHidden.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/atoms/Button.tsx","../src/components/emoji/ClickableEmojiButton.tsx","../src/components/emoji/EmojiImg.tsx","../src/components/emoji/NativeEmoji.tsx","../src/components/emoji/ViewOnlyEmoji.tsx","../src/components/emoji/Emoji.tsx","../src/components/body/EmojiCategory.tsx","../src/components/body/Suggested.tsx","../src/components/body/EmojiList.tsx","../src/DomUtils/keyboardNavigation.ts","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/hooks/useEmojiPreviewEvents.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/components/Layout/Flex.tsx","../src/components/Layout/Space.tsx","../src/components/Layout/Absolute.tsx","../src/components/Layout/Relative.tsx","../src/components/header/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useIsSearchMode.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/hooks/useShouldHideCustomEmojis.ts","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/CssSearch.tsx","../src/components/header/Search.tsx","../src/components/header/Header.tsx","../src/DomUtils/getActiveElement.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/EmojiPickerReact.tsx","../src/components/ErrorBoundary.tsx","../src/components/emoji/ExportedEmoji.tsx","../src/index.tsx"],"sourcesContent":["export enum ClassNames {\n hiddenOnSearch = 'epr-hidden-on-search',\n searchActive = 'epr-search-active',\n hidden = 'epr-hidden',\n visible = 'epr-visible',\n active = 'epr-active',\n emoji = 'epr-emoji',\n category = 'epr-emoji-category',\n label = 'epr-emoji-category-label',\n categoryContent = 'epr-emoji-category-content',\n emojiHasVariations = 'epr-emoji-has-variations',\n scrollBody = 'epr-body',\n emojiList = 'epr-emoji-list',\n external = '__EmojiPicker__',\n emojiPicker = 'EmojiPickerReact',\n open = 'epr-open',\n vertical = 'epr-vertical',\n horizontal = 'epr-horizontal',\n variationPicker = 'epr-emoji-variation-picker',\n darkTheme = 'epr-dark-theme',\n autoTheme = 'epr-auto-theme'\n}\n\nexport function asSelectors(...classNames: ClassNames[]): string {\n return classNames.map(c => `.${c}`).join('');\n}\n","import { createSheet } from 'flairup';\n\nexport const stylesheet = createSheet('epr');\n","import { NullableElement } from './selectors';\n\nexport function focusElement(element: NullableElement) {\n if (!element) {\n return;\n }\n\n requestAnimationFrame(() => {\n element.focus();\n });\n}\n\nexport function focusPrevElementSibling(element: NullableElement) {\n if (!element) return;\n\n const prev = element.previousElementSibling as HTMLElement;\n\n focusElement(prev);\n}\n\nexport function focusNextElementSibling(element: NullableElement) {\n if (!element) return;\n\n const next = element.nextElementSibling as HTMLElement;\n\n focusElement(next);\n}\n\nexport function focusFirstElementChild(element: NullableElement) {\n if (!element) return;\n\n const first = element.firstElementChild as HTMLElement;\n\n focusElement(first);\n}\n","import * as React from 'react';\n\nimport { focusElement } from '../../DomUtils/focusElement';\nimport { NullableElement } from '../../DomUtils/selectors';\n\nexport function ElementRefContextProvider({\n children\n}: {\n children: React.ReactNode;\n}) {\n const PickerMainRef = React.useRef<HTMLElement>(null);\n const AnchoredEmojiRef = React.useRef<HTMLElement>(null);\n const BodyRef = React.useRef<HTMLDivElement>(null);\n const SearchInputRef = React.useRef<HTMLInputElement>(null);\n const SkinTonePickerRef = React.useRef<HTMLDivElement>(null);\n const CategoryNavigationRef = React.useRef<HTMLDivElement>(null);\n const VariationPickerRef = React.useRef<HTMLDivElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<\n E extends HTMLElement = HTMLElement\n> = React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef()\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function usePickerMainRef() {\n return useElementRef()['PickerMainRef'];\n}\n\nexport function useAnchoredEmojiRef() {\n return useElementRef()['AnchoredEmojiRef'];\n}\n\nexport function useSetAnchoredEmojiRef(): (target: NullableElement) => void {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return (target: NullableElement) => {\n if (target === null && AnchoredEmojiRef.current !== null) {\n focusElement(AnchoredEmojiRef.current);\n }\n\n AnchoredEmojiRef.current = target;\n };\n}\n\nexport function useBodyRef() {\n return useElementRef()['BodyRef'];\n}\n\nexport function useSearchInputRef() {\n return useElementRef()['SearchInputRef'];\n}\n\nexport function useSkinTonePickerRef() {\n return useElementRef()['SkinTonePickerRef'];\n}\n\nexport function useCategoryNavigationRef() {\n return useElementRef()['CategoryNavigationRef'];\n}\n\nexport function useVariationPickerRef() {\n return useElementRef()['VariationPickerRef'];\n}\n","export type EmojiClickData = {\n activeSkinTone: SkinTones;\n unified: string;\n unifiedWithoutSkinTone: string;\n emoji: string;\n names: string[];\n imageUrl: string;\n getImageUrl: (emojiStyle?: EmojiStyle) => string;\n isCustom: boolean;\n};\n\nexport enum SuggestionMode {\n RECENT = 'recent',\n FREQUENT = 'frequent'\n}\n\nexport enum EmojiStyle {\n NATIVE = 'native',\n APPLE = 'apple',\n TWITTER = 'twitter',\n GOOGLE = 'google',\n FACEBOOK = 'facebook'\n}\n\nexport enum Theme {\n DARK = 'dark',\n LIGHT = 'light',\n AUTO = 'auto'\n}\n\nexport enum SkinTones {\n NEUTRAL = 'neutral',\n LIGHT = '1f3fb',\n MEDIUM_LIGHT = '1f3fc',\n MEDIUM = '1f3fd',\n MEDIUM_DARK = '1f3fe',\n DARK = '1f3ff'\n}\n\nexport enum Categories {\n SUGGESTED = 'suggested',\n CUSTOM = 'custom',\n SMILEYS_PEOPLE = 'smileys_people',\n ANIMALS_NATURE = 'animals_nature',\n FOOD_DRINK = 'food_drink',\n TRAVEL_PLACES = 'travel_places',\n ACTIVITIES = 'activities',\n OBJECTS = 'objects',\n SYMBOLS = 'symbols',\n FLAGS = 'flags'\n}\n\nexport enum SkinTonePickerLocation {\n SEARCH = 'SEARCH',\n PREVIEW = 'PREVIEW'\n}\n","import { Categories, SuggestionMode } from '../types/exposedTypes';\n\nexport { Categories };\n\nconst categoriesOrdered: Categories[] = [\n Categories.SUGGESTED,\n Categories.CUSTOM,\n Categories.SMILEYS_PEOPLE,\n Categories.ANIMALS_NATURE,\n Categories.FOOD_DRINK,\n Categories.TRAVEL_PLACES,\n Categories.ACTIVITIES,\n Categories.OBJECTS,\n Categories.SYMBOLS,\n Categories.FLAGS\n];\n\nexport const SuggestedRecent: CategoryConfig = {\n name: 'Recently Used',\n category: Categories.SUGGESTED\n};\n\nexport type CustomCategoryConfig = {\n category: Categories.CUSTOM;\n name: string;\n};\n\nconst configByCategory: Record<Categories, CategoryConfig> = {\n [Categories.SUGGESTED]: {\n category: Categories.SUGGESTED,\n name: 'Frequently Used'\n },\n [Categories.CUSTOM]: {\n category: Categories.CUSTOM,\n name: 'Custom Emojis'\n },\n [Categories.SMILEYS_PEOPLE]: {\n category: Categories.SMILEYS_PEOPLE,\n name: 'Smileys & People'\n },\n [Categories.ANIMALS_NATURE]: {\n category: Categories.ANIMALS_NATURE,\n name: 'Animals & Nature'\n },\n [Categories.FOOD_DRINK]: {\n category: Categories.FOOD_DRINK,\n name: 'Food & Drink'\n },\n [Categories.TRAVEL_PLACES]: {\n category: Categories.TRAVEL_PLACES,\n name: 'Travel & Places'\n },\n [Categories.ACTIVITIES]: {\n category: Categories.ACTIVITIES,\n name: 'Activities'\n },\n [Categories.OBJECTS]: {\n category: Categories.OBJECTS,\n name: 'Objects'\n },\n [Categories.SYMBOLS]: {\n category: Categories.SYMBOLS,\n name: 'Symbols'\n },\n [Categories.FLAGS]: {\n category: Categories.FLAGS,\n name: 'Flags'\n }\n};\n\nexport function baseCategoriesConfig(\n modifiers?: Record<Categories, CategoryConfig>\n): CategoriesConfig {\n return categoriesOrdered.map(category => {\n return {\n ...configByCategory[category],\n ...(modifiers && modifiers[category] && modifiers[category])\n };\n });\n}\n\nexport function categoryFromCategoryConfig(category: CategoryConfig) {\n return category.category;\n}\n\nexport function categoryNameFromCategoryConfig(category: CategoryConfig) {\n return category.name;\n}\n\nexport type CategoriesConfig = CategoryConfig[];\n\nexport type CategoryConfig = {\n category: Categories;\n name: string;\n};\n\nexport type UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {}\n): CategoriesConfig {\n const extra = {} as Record<Categories, CategoryConfig>;\n\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n extra[Categories.SUGGESTED] = SuggestedRecent;\n }\n\n const base = baseCategoriesConfig(extra);\n if (!userCategoriesConfig?.length) {\n return base;\n }\n\n return userCategoriesConfig.map(category => {\n if (typeof category === 'string') {\n return getBaseConfigByCategory(category, extra[category]);\n }\n\n return {\n ...getBaseConfigByCategory(category.category, extra[category.category]),\n ...category\n };\n });\n}\n\nfunction getBaseConfigByCategory(\n category: Categories,\n modifier: CategoryConfig = {} as CategoryConfig\n) {\n return Object.assign(configByCategory[category], modifier);\n}\n\ntype CategoryConfigModifiers = {\n suggestionMode?: SuggestionMode;\n};\n","import { EmojiStyle } from '../types/exposedTypes';\n\nconst CDN_URL_APPLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/';\nconst CDN_URL_FACEBOOK =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-facebook/img/facebook/64/';\nconst CDN_URL_TWITTER =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-twitter/img/twitter/64/';\nconst CDN_URL_GOOGLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-google/img/google/64/';\n\nexport function cdnUrl(emojiStyle: EmojiStyle): string {\n switch (emojiStyle) {\n case EmojiStyle.TWITTER:\n return CDN_URL_TWITTER;\n case EmojiStyle.GOOGLE:\n return CDN_URL_GOOGLE;\n case EmojiStyle.FACEBOOK:\n return CDN_URL_FACEBOOK;\n case EmojiStyle.APPLE:\n default:\n return CDN_URL_APPLE;\n }\n}\n","import { SkinTones } from '../types/exposedTypes';\n\nconst skinToneVariations = [\n SkinTones.NEUTRAL,\n SkinTones.LIGHT,\n SkinTones.MEDIUM_LIGHT,\n SkinTones.MEDIUM,\n SkinTones.MEDIUM_DARK,\n SkinTones.DARK\n];\n\nexport const skinTonesNamed = Object.entries(SkinTones).reduce(\n (acc, [key, value]) => {\n acc[value] = key;\n return acc;\n },\n {} as Record<string, string>\n);\n\nexport const skinTonesMapped: Record<\n string,\n string\n> = skinToneVariations.reduce(\n (mapped, skinTone) =>\n Object.assign(mapped, {\n [skinTone]: skinTone\n }),\n {}\n);\n\nexport default skinToneVariations;\n","import emojis from '../data/emojis';\n\nexport enum EmojiProperties {\n name = 'n',\n unified = 'u',\n variations = 'v',\n added_in = 'a',\n imgUrl = 'imgUrl'\n}\n\nexport interface DataEmoji extends WithName {\n [EmojiProperties.unified]: string;\n [EmojiProperties.variations]?: string[];\n [EmojiProperties.added_in]: string;\n [EmojiProperties.imgUrl]?: string;\n}\n\nexport type DataEmojis = DataEmoji[];\n\nexport type DataGroups = keyof typeof emojis;\n\nexport type WithName = {\n [EmojiProperties.name]: string[];\n};\n","import { DataEmoji } from './DataTypes';\nimport { allEmojis, emojiNames, emojiUnified } from './emojiSelectors';\n\nexport const alphaNumericEmojiIndex: BaseIndex = {};\n\nsetTimeout(() => {\n allEmojis.reduce((searchIndex, emoji) => {\n indexEmoji(emoji);\n return searchIndex;\n }, alphaNumericEmojiIndex as BaseIndex);\n});\n\ntype BaseIndex = Record<string, Record<string, DataEmoji>>;\n\nexport function indexEmoji(emoji: DataEmoji): void {\n const joinedNameString = emojiNames(emoji)\n .flat()\n .join('')\n .toLowerCase()\n .replace(/[^a-zA-Z\\d]/g, '')\n .split('');\n\n joinedNameString.forEach(char => {\n alphaNumericEmojiIndex[char] = alphaNumericEmojiIndex[char] ?? {};\n\n alphaNumericEmojiIndex[char][emojiUnified(emoji)] = emoji;\n });\n}\n","import { Categories } from '../config/categoryConfig';\nimport { cdnUrl } from '../config/cdnUrls';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport emojis from '../data/emojis';\nimport skinToneVariations, {\n skinTonesMapped\n} from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, DataEmojis, EmojiProperties, WithName } from './DataTypes';\nimport { indexEmoji } from './alphaNumericEmojiIndex';\n\nexport function emojiNames(emoji: WithName): string[] {\n return emoji[EmojiProperties.name] ?? [];\n}\n\nexport function addedIn(emoji: DataEmoji): number {\n return parseFloat(emoji[EmojiProperties.added_in]);\n}\n\nexport function emojiName(emoji?: WithName): string {\n if (!emoji) {\n return '';\n }\n\n return emojiNames(emoji)[0];\n}\n\nexport function unifiedWithoutSkinTone(unified: string): string {\n const splat = unified.split('-');\n const [skinTone] = splat.splice(1, 1);\n\n if (skinTonesMapped[skinTone]) {\n return splat.join('-');\n }\n\n return unified;\n}\n\nexport function emojiUnified(emoji: DataEmoji, skinTone?: string): string {\n const unified = emoji[EmojiProperties.unified];\n\n if (!skinTone || !emojiHasVariations(emoji)) {\n return unified;\n }\n\n return emojiVariationUnified(emoji, skinTone) ?? unified;\n}\n\nexport function emojisByCategory(category: Categories): DataEmojis {\n // @ts-ignore\n return emojis?.[category] ?? [];\n}\n\n// WARNING: DO NOT USE DIRECTLY\nexport function emojiUrlByUnified(\n unified: string,\n emojiStyle: EmojiStyle\n): string {\n return `${cdnUrl(emojiStyle)}${unified}.png`;\n}\n\nexport function emojiVariations(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.variations] ?? [];\n}\n\nexport function emojiHasVariations(emoji: DataEmoji): boolean {\n return emojiVariations(emoji).length > 0;\n}\n\nexport function emojiVariationUnified(\n emoji: DataEmoji,\n skinTone?: string\n): string | undefined {\n return skinTone\n ? emojiVariations(emoji).find(variation => variation.includes(skinTone))\n : emojiUnified(emoji);\n}\n\nexport function emojiByUnified(unified?: string): DataEmoji | undefined {\n if (!unified) {\n return;\n }\n\n if (allEmojisByUnified[unified]) {\n return allEmojisByUnified[unified];\n }\n\n const withoutSkinTone = unifiedWithoutSkinTone(unified);\n return allEmojisByUnified[withoutSkinTone];\n}\n\nexport const allEmojis: DataEmojis = Object.values(emojis).flat();\n\nexport function setCustomEmojis(customEmojis: CustomEmoji[]): void {\n emojis[Categories.CUSTOM].length = 0;\n\n customEmojis.forEach(emoji => {\n const emojiData = customToRegularEmoji(emoji);\n\n emojis[Categories.CUSTOM].push(emojiData as never);\n\n if (allEmojisByUnified[emojiData[EmojiProperties.unified]]) {\n return;\n }\n\n allEmojis.push(emojiData);\n allEmojisByUnified[emojiData[EmojiProperties.unified]] = emojiData;\n indexEmoji(emojiData);\n });\n}\n\nfunction customToRegularEmoji(emoji: CustomEmoji): DataEmoji {\n return {\n [EmojiProperties.name]: emoji.names.map(name => name.toLowerCase()),\n [EmojiProperties.unified]: emoji.id.toLowerCase(),\n [EmojiProperties.added_in]: '0',\n [EmojiProperties.imgUrl]: emoji.imgUrl\n };\n}\n\nconst allEmojisByUnified: {\n [unified: string]: DataEmoji;\n} = {};\n\nsetTimeout(() => {\n allEmojis.reduce((allEmojis, Emoji) => {\n allEmojis[emojiUnified(Emoji)] = Emoji;\n\n if (emojiHasVariations(Emoji)) {\n emojiVariations(Emoji).forEach(variation => {\n allEmojis[variation] = Emoji;\n });\n }\n\n return allEmojis;\n }, allEmojisByUnified);\n});\n\nexport function activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return skinToneVariations.includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import * as React from 'react'\n\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n setCustomEmojis,\n emojiUrlByUnified\n} from '../dataUtils/emojiSelectors';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport {\n CategoriesConfig,\n baseCategoriesConfig,\n mergeCategoriesConfig\n} from './categoryConfig';\nimport { CustomEmoji } from './customEmojiConfig';\n\nconst KNOWN_FAILING_EMOJIS = ['2640-fe0f', '2642-fe0f', '2695-fe0f'];\n\nexport const DEFAULT_SEARCH_PLACEHOLDER = 'Search';\nexport const SEARCH_RESULTS_NO_RESULTS_FOUND = 'No results found';\nexport const SEARCH_RESULTS_SUFFIX =\n ' found. Use up and down arrow keys to navigate.';\nexport const SEARCH_RESULTS_ONE_RESULT_FOUND =\n '1 result' + SEARCH_RESULTS_SUFFIX;\nexport const SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND =\n '%n results' + SEARCH_RESULTS_SUFFIX;\n\nexport function mergeConfig(\n userConfig: PickerConfig = {}\n): PickerConfigInternal {\n const base = basePickerConfig();\n\n const previewConfig = Object.assign(\n base.previewConfig,\n userConfig.previewConfig ?? {}\n );\n const config = Object.assign(base, userConfig);\n\n const categories = mergeCategoriesConfig(userConfig.categories, {\n suggestionMode: config.suggestedEmojisMode\n });\n\n setCustomEmojis(config.customEmojis ?? []);\n\n const skinTonePickerLocation = config.searchDisabled\n ? SkinTonePickerLocation.PREVIEW\n : config.skinTonePickerLocation;\n\n return {\n ...config,\n categories,\n previewConfig,\n skinTonePickerLocation\n };\n}\n\nexport function basePickerConfig(): PickerConfigInternal {\n return {\n autoFocusSearch: true,\n categories: baseCategoriesConfig(),\n className: '',\n customEmojis: [],\n defaultSkinTone: SkinTones.NEUTRAL,\n emojiStyle: EmojiStyle.APPLE,\n emojiVersion: null,\n getEmojiUrl: emojiUrlByUnified,\n height: 450,\n lazyLoadEmojis: false,\n previewConfig: {\n ...basePreviewConfig\n },\n searchDisabled: false,\n searchPlaceHolder: DEFAULT_SEARCH_PLACEHOLDER,\n searchPlaceholder: DEFAULT_SEARCH_PLACEHOLDER,\n skinTonePickerLocation: SkinTonePickerLocation.SEARCH,\n skinTonesDisabled: false,\n style: {},\n suggestedEmojisMode: SuggestionMode.FREQUENT,\n theme: Theme.LIGHT,\n unicodeToHide: new Set<string>(KNOWN_FAILING_EMOJIS),\n width: 350\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n searchPlaceholder: string;\n defaultSkinTone: SkinTones;\n skinTonesDisabled: boolean;\n autoFocusSearch: boolean;\n emojiStyle: EmojiStyle;\n categories: CategoriesConfig;\n theme: Theme;\n suggestedEmojisMode: SuggestionMode;\n lazyLoadEmojis: boolean;\n previewConfig: PreviewConfig;\n className: string;\n height: PickerDimensions;\n width: PickerDimensions;\n style: React.CSSProperties;\n getEmojiUrl: GetEmojiUrl;\n searchDisabled: boolean;\n skinTonePickerLocation: SkinTonePickerLocation;\n unicodeToHide: Set<string>;\n customEmojis: CustomEmoji[];\n};\n\nexport type PreviewConfig = {\n defaultEmoji: string;\n defaultCaption: string;\n showPreview: boolean;\n};\n\nconst basePreviewConfig: PreviewConfig = {\n defaultEmoji: '1f60a',\n defaultCaption: \"What's your mood?\",\n showPreview: true\n};\n\ntype ConfigExternal = {\n previewConfig: Partial<PreviewConfig>;\n onEmojiClick: (emoji: EmojiClickData, event: MouseEvent) => void;\n} & Omit<PickerConfigInternal, 'previewConfig' | 'unicodeToHide'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n","import * as React from 'react';\n\nimport {\n basePickerConfig,\n mergeConfig,\n PickerConfig,\n PickerConfigInternal\n} from '../../config/config';\n\ntype Props = PickerConfig &\n Readonly<{\n children: React.ReactNode;\n }>;\n\nconst ConfigContext = React.createContext<PickerConfigInternal>(\n basePickerConfig()\n);\n\nexport function PickerConfigProvider({ children, ...config }: Props) {\n const mergedConfig = useSetConfig(config);\n\n return (\n <ConfigContext.Provider value={mergedConfig}>\n {children}\n </ConfigContext.Provider>\n );\n}\n\nexport function useSetConfig(config: PickerConfig) {\n const [mergedConfig, setMergedConfig] = React.useState(() =>\n mergeConfig(config)\n );\n\n React.useEffect(() => {\n if (config.customEmojis?.length !== mergedConfig.customEmojis?.length) {\n setMergedConfig(mergeConfig(config));\n }\n // not gonna...\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.customEmojis?.length]);\n\n return mergedConfig;\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\n}\n","import React from 'react';\n\nimport { EmojiClickData } from '../types/exposedTypes';\n\nexport type MutableConfig = {\n onEmojiClick?: (emoji: EmojiClickData, event: MouseEvent) => void;\n};\n\nexport const MutableConfigContext = React.createContext<\n React.MutableRefObject<MutableConfig>\n>({} as React.MutableRefObject<MutableConfig>);\n\nexport function useMutableConfig(): React.MutableRefObject<MutableConfig> {\n const mutableConfig = React.useContext(MutableConfigContext);\n return mutableConfig;\n}\n\nexport function useDefineMutableConfig(\n config: MutableConfig\n): React.MutableRefObject<MutableConfig> {\n const MutableConfigRef = React.useRef<MutableConfig>({\n onEmojiClick: config.onEmojiClick || emptyFunc\n });\n\n React.useEffect(() => {\n MutableConfigRef.current.onEmojiClick = config.onEmojiClick || emptyFunc;\n }, [config.onEmojiClick]);\n\n return MutableConfigRef;\n}\n\nfunction emptyFunc() {}\n","import * as React from 'react';\n\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport { CategoriesConfig } from './categoryConfig';\nimport {\n DEFAULT_SEARCH_PLACEHOLDER,\n SEARCH_RESULTS_NO_RESULTS_FOUND,\n SEARCH_RESULTS_ONE_RESULT_FOUND,\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND,\n PickerDimensions,\n PreviewConfig\n} from './config';\nimport { CustomEmoji } from './customEmojiConfig';\nimport { useMutableConfig } from './mutableConfig';\n\nexport function useSearchPlaceHolderConfig(): string {\n const { searchPlaceHolder, searchPlaceholder } = usePickerConfig();\n return (\n [searchPlaceHolder, searchPlaceholder].find(\n p => p !== DEFAULT_SEARCH_PLACEHOLDER\n ) ?? DEFAULT_SEARCH_PLACEHOLDER\n );\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useSkinTonesDisabledConfig(): boolean {\n const { skinTonesDisabled } = usePickerConfig();\n return skinTonesDisabled;\n}\n\nexport function useEmojiStyleConfig(): EmojiStyle {\n const { emojiStyle } = usePickerConfig();\n return emojiStyle;\n}\n\nexport function useAutoFocusSearchConfig(): boolean {\n const { autoFocusSearch } = usePickerConfig();\n return autoFocusSearch;\n}\n\nexport function useCategoriesConfig(): CategoriesConfig {\n const { categories } = usePickerConfig();\n return categories;\n}\n\nexport function useCustomEmojisConfig(): CustomEmoji[] {\n const { customEmojis } = usePickerConfig();\n return customEmojis;\n}\n\nexport function useOnEmojiClickConfig(): (\n emoji: EmojiClickData,\n event: MouseEvent\n) => void {\n const { current } = useMutableConfig();\n return current.onEmojiClick || (() => {});\n}\n\nexport function usePreviewConfig(): PreviewConfig {\n const { previewConfig } = usePickerConfig();\n return previewConfig;\n}\n\nexport function useThemeConfig(): Theme {\n const { theme } = usePickerConfig();\n\n return theme;\n}\n\nexport function useSuggestedEmojisModeConfig(): SuggestionMode {\n const { suggestedEmojisMode } = usePickerConfig();\n return suggestedEmojisMode;\n}\n\nexport function useLazyLoadEmojisConfig(): boolean {\n const { lazyLoadEmojis } = usePickerConfig();\n return lazyLoadEmojis;\n}\n\nexport function useClassNameConfig(): string {\n const { className } = usePickerConfig();\n return className;\n}\n\nexport function useStyleConfig(): React.CSSProperties {\n const { height, width, style } = usePickerConfig();\n return { height: getDimension(height), width: getDimension(width), ...style };\n}\n\nexport function useEmojiVersionConfig(): string | null {\n const { emojiVersion } = usePickerConfig();\n return emojiVersion;\n}\n\nexport function useSearchDisabledConfig(): boolean {\n const { searchDisabled } = usePickerConfig();\n return searchDisabled;\n}\n\nexport function useSkinTonePickerLocationConfig(): SkinTonePickerLocation {\n const { skinTonePickerLocation } = usePickerConfig();\n return skinTonePickerLocation;\n}\n\nexport function useUnicodeToHide() {\n const { unicodeToHide } = usePickerConfig();\n return unicodeToHide;\n}\n\nexport function useGetEmojiUrlConfig(): (\n unified: string,\n style: EmojiStyle\n) => string {\n const { getEmojiUrl } = usePickerConfig();\n return getEmojiUrl;\n}\n\nfunction getDimension(dimensionConfig: PickerDimensions): PickerDimensions {\n return typeof dimensionConfig === 'number'\n ? `${dimensionConfig}px`\n : dimensionConfig;\n}\n\nexport function useSearchResultsConfig(searchResultsCount: number): string {\n const hasResults = searchResultsCount > 0;\n const isPlural = searchResultsCount > 1;\n\n if (hasResults) {\n return isPlural ?\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND.replace('%n', searchResultsCount.toString())\n : SEARCH_RESULTS_ONE_RESULT_FOUND;\n }\n\n return SEARCH_RESULTS_NO_RESULTS_FOUND;\n}\n","import { useRef, useState } from 'react';\n\nexport function useDebouncedState<T>(\n initialValue: T,\n delay: number = 0\n): [T, (value: T) => Promise<T>] {\n const [state, setState] = useState<T>(initialValue);\n const timer = useRef<number | null>(null);\n\n function debouncedSetState(value: T) {\n return new Promise<T>(resolve => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = window?.setTimeout(() => {\n setState(value);\n resolve(value);\n }, delay);\n });\n }\n\n return [state, debouncedSetState];\n}\n","import { useUnicodeToHide } from \"../config/useConfig\";\n\nexport function useIsUnicodeHidden() {\n const unicodeToHide = useUnicodeToHide();\n return (emojiUnified: string) => unicodeToHide.has(emojiUnified);\n }\n","import { useRef, useMemo } from 'react';\n\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n allEmojis,\n emojiUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { useIsUnicodeHidden } from './useHideEmojisByUniocode';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n\n return useMemo(() => {\n const emojiVersion = parseFloat(`${emojiVersionConfig}`);\n\n if (!emojiVersionConfig || Number.isNaN(emojiVersion)) {\n return DisallowedEmojisRef.current;\n }\n\n return allEmojis.reduce((disallowedEmojis, emoji) => {\n if (addedInNewerVersion(emoji, emojiVersion)) {\n disallowedEmojis[emojiUnified(emoji)] = true;\n }\n\n return disallowedEmojis;\n }, DisallowedEmojisRef.current);\n }, [emojiVersionConfig]);\n}\n\nexport function useIsEmojiDisallowed() {\n const disallowedEmojis = useDisallowedEmojis();\n const isUnicodeHidden = useIsUnicodeHidden();\n\n return function isEmojiDisallowed(emoji: DataEmoji) {\n const unified = unifiedWithoutSkinTone(emojiUnified(emoji));\n\n return Boolean(disallowedEmojis[unified] || isUnicodeHidden(unified));\n };\n}\n\nfunction addedInNewerVersion(\n emoji: DataEmoji,\n supportedLevel: number\n): boolean {\n return addedIn(emoji) > supportedLevel;\n}\n","import { useEffect } from 'react';\nimport * as React from 'react';\n\nexport function useMarkInitialLoad(\n dispatch: React.Dispatch<React.SetStateAction<boolean>>\n) {\n useEffect(() => {\n dispatch(true);\n }, [dispatch]);\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport { useDefaultSkinToneConfig } from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { alphaNumericEmojiIndex } from '../../dataUtils/alphaNumericEmojiIndex';\nimport { useDebouncedState } from '../../hooks/useDebouncedState';\nimport { useDisallowedEmojis } from '../../hooks/useDisallowedEmojis';\nimport { FilterDict } from '../../hooks/useFilter';\nimport { useMarkInitialLoad } from '../../hooks/useInitialLoad';\nimport { SkinTones } from '../../types/exposedTypes';\n\nexport function PickerContextProvider({ children }: Props) {\n const disallowedEmojis = useDisallowedEmojis();\n const defaultSkinTone = useDefaultSkinToneConfig();\n\n // Initialize the filter with the inititial dictionary\n const filterRef = React.useRef<FilterState>(alphaNumericEmojiIndex);\n const disallowClickRef = React.useRef<boolean>(false);\n const disallowMouseRef = React.useRef<boolean>(false);\n const disallowedEmojisRef = React.useRef<Record<string, boolean>>(\n disallowedEmojis\n );\n\n const suggestedUpdateState = useDebouncedState(Date.now(), 200);\n const searchTerm = useDebouncedState('', 100);\n const skinToneFanOpenState = useState<boolean>(false);\n const activeSkinTone = useState<SkinTones>(defaultSkinTone);\n const activeCategoryState = useState<ActiveCategoryState>(null);\n const emojisThatFailedToLoadState = useState<Set<string>>(new Set());\n const emojiVariationPickerState = useState<DataEmoji | null>(null);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n\n useMarkInitialLoad(setIsPastInitialLoad);\n\n return (\n <PickerContext.Provider\n value={{\n activeCategoryState,\n activeSkinTone,\n disallowClickRef,\n disallowMouseRef,\n disallowedEmojisRef,\n emojiVariationPickerState,\n emojisThatFailedToLoadState,\n filterRef,\n isPastInitialLoad,\n searchTerm,\n skinToneFanOpenState,\n suggestedUpdateState\n }}\n >\n {children}\n </PickerContext.Provider>\n );\n}\n\ntype ReactState<T> = [T, React.Dispatch<React.SetStateAction<T>>];\n\nconst PickerContext = React.createContext<{\n searchTerm: [string, (term: string) => Promise<string>];\n suggestedUpdateState: [number, (term: number) => void];\n activeCategoryState: ReactState<ActiveCategoryState>;\n activeSkinTone: ReactState<SkinTones>;\n emojisThatFailedToLoadState: ReactState<Set<string>>;\n isPastInitialLoad: boolean;\n emojiVariationPickerState: ReactState<DataEmoji | null>;\n skinToneFanOpenState: ReactState<boolean>;\n filterRef: React.MutableRefObject<FilterState>;\n disallowClickRef: React.MutableRefObject<boolean>;\n disallowMouseRef: React.MutableRefObject<boolean>;\n disallowedEmojisRef: React.MutableRefObject<Record<string, boolean>>;\n}>({\n activeCategoryState: [null, () => {}],\n activeSkinTone: [SkinTones.NEUTRAL, () => {}],\n disallowClickRef: { current: false },\n disallowMouseRef: { current: false },\n disallowedEmojisRef: { current: {} },\n emojiVariationPickerState: [null, () => {}],\n emojisThatFailedToLoadState: [new Set(), () => {}],\n filterRef: { current: {} },\n isPastInitialLoad: true,\n searchTerm: ['', () => new Promise<string>(() => undefined)],\n skinToneFanOpenState: [false, () => {}],\n suggestedUpdateState: [Date.now(), () => {}]\n});\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport function useFilterRef() {\n const { filterRef } = React.useContext(PickerContext);\n return filterRef;\n}\n\nexport function useDisallowClickRef() {\n const { disallowClickRef } = React.useContext(PickerContext);\n return disallowClickRef;\n}\n\nexport function useDisallowMouseRef() {\n const { disallowMouseRef } = React.useContext(PickerContext);\n return disallowMouseRef;\n}\n\nexport function useSearchTermState() {\n const { searchTerm } = React.useContext(PickerContext);\n return searchTerm;\n}\n\nexport function useActiveSkinToneState(): [\n SkinTones,\n (skinTone: SkinTones) => void\n] {\n const { activeSkinTone } = React.useContext(PickerContext);\n return activeSkinTone;\n}\n\nexport function useEmojisThatFailedToLoadState() {\n const { emojisThatFailedToLoadState } = React.useContext(PickerContext);\n return emojisThatFailedToLoadState;\n}\n\nexport function useIsPastInitialLoad(): boolean {\n const { isPastInitialLoad } = React.useContext(PickerContext);\n return isPastInitialLoad;\n}\n\nexport function useEmojiVariationPickerState() {\n const { emojiVariationPickerState } = React.useContext(PickerContext);\n return emojiVariationPickerState;\n}\n\nexport function useSkinToneFanOpenState() {\n const { skinToneFanOpenState } = React.useContext(PickerContext);\n return skinToneFanOpenState;\n}\n\nexport function useDisallowedEmojisRef() {\n const { disallowedEmojisRef } = React.useContext(PickerContext);\n return disallowedEmojisRef;\n}\n\nexport function useUpdateSuggested(): [number, () => void] {\n const { suggestedUpdateState } = React.useContext(PickerContext);\n\n const [suggestedUpdated, setsuggestedUpdate] = suggestedUpdateState;\n return [\n suggestedUpdated,\n function updateSuggested() {\n setsuggestedUpdate(Date.now());\n }\n ];\n}\n\nexport type FilterState = Record<string, FilterDict>;\n\ntype ActiveCategoryState = null | string;\n","import { useEffect } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useDisallowMouseRef } from '../components/context/PickerContext';\n\nexport function useDisallowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function disallowMouseMove() {\n DisallowMouseRef.current = true;\n };\n}\n\nexport function useAllowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function allowMouseMove() {\n DisallowMouseRef.current = false;\n };\n}\n\nexport function useIsMouseDisallowed() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function isMouseDisallowed() {\n return DisallowMouseRef.current;\n };\n}\n\nexport function useOnMouseMove() {\n const BodyRef = useBodyRef();\n const allowMouseMove = useAllowMouseMove();\n const isMouseDisallowed = useIsMouseDisallowed();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n bodyRef?.addEventListener('mousemove', onMouseMove, {\n passive: true\n });\n\n function onMouseMove() {\n if (isMouseDisallowed()) {\n allowMouseMove();\n }\n }\n return () => {\n bodyRef?.removeEventListener('mousemove', onMouseMove);\n };\n }, [BodyRef, allowMouseMove, isMouseDisallowed]);\n}\n","import { NullableElement } from './selectors';\n\nexport function elementCountInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function elementIndexInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementWidth = element.getBoundingClientRect().width;\n const elementLeft = element.getBoundingClientRect().left;\n const parentLeft = parent.getBoundingClientRect().left;\n\n return Math.floor((elementLeft - parentLeft) / elementWidth);\n}\n\nexport function rowNumber(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n return Math.round((elementTop - parentTop) / elementHeight);\n}\n\nexport function hasNextRow(\n parent: NullableElement,\n element: NullableElement\n): boolean {\n if (!parent || !element) {\n return false;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n const parentHeight = parent.getBoundingClientRect().height;\n\n return Math.round(elementTop - parentTop + elementHeight) < parentHeight;\n}\n\nfunction getRowElements(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number\n): HTMLElement[] {\n if (row === -1) {\n const lastRow = Math.floor((elements.length - 1) / elementsInRow);\n const firstElementIndex = lastRow * elementsInRow;\n const lastElementIndex = elements.length - 1;\n return elements.slice(firstElementIndex, lastElementIndex + 1);\n }\n\n return elements.slice(row * elementsInRow, (row + 1) * elementsInRow);\n}\n\nfunction getNextRowElements(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number\n): HTMLElement[] {\n const nextRow = currentRow + 1;\n\n if (nextRow * elementsInRow > allElements.length) {\n return [];\n }\n\n return getRowElements(allElements, nextRow, elementsInRow);\n}\n\nexport function getElementInRow(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number,\n indexInRow: number\n): NullableElement {\n const rowElements = getRowElements(elements, row, elementsInRow);\n // get element, default to last\n return rowElements[indexInRow] || rowElements[rowElements.length - 1] || null;\n}\n\nexport function getElementInNextRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const nextRowElements = getNextRowElements(\n allElements,\n currentRow,\n elementsInRow\n );\n\n // return item in index, or last item in row\n return (\n nextRowElements[index] ||\n nextRowElements[nextRowElements.length - 1] ||\n null\n );\n}\n\nexport function getElementInPrevRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const prevRowElements = getRowElements(\n allElements,\n currentRow - 1,\n elementsInRow\n );\n\n // default to last\n return (\n prevRowElements[index] ||\n prevRowElements[prevRowElements.length - 1] ||\n null\n );\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[]\n): NullableElement {\n if (!parent || !elements.length) {\n return null;\n }\n\n const parentTop = parent.getBoundingClientRect().top;\n const parentBottom = parent.getBoundingClientRect().bottom;\n\n const visibleElements = elements.find(element => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n\n return (\n (elementTop >= parentTop && elementTop <= parentBottom) ||\n (elementBottom >= parentTop && elementBottom <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n","import { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n emojiByUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport { firstVisibleElementInContainer } from './elementPositionInRow';\n\nexport type NullableElement = HTMLElement | null;\n\nexport const EmojiButtonSelector = `button${asSelectors(ClassNames.emoji)}`;\nexport const VisibleEmojiSelector = [\n EmojiButtonSelector,\n asSelectors(ClassNames.visible),\n `:not(${asSelectors(ClassNames.hidden)})`\n].join('');\n\nexport function buttonFromTarget(\n emojiElement: NullableElement\n): HTMLButtonElement | null {\n return emojiElement?.closest(EmojiButtonSelector) ?? null;\n}\n\nexport function isEmojiButton(element: NullableElement): boolean {\n if (!element) {\n return false;\n }\n\n return element.matches(EmojiButtonSelector);\n}\n\nexport function emojiFromElement(\n element: NullableElement\n): [DataEmoji, string] | [] {\n const originalUnified = originalUnifiedFromEmojiElement(element);\n const unified = unifiedFromEmojiElement(element);\n\n if (!originalUnified) {\n return [];\n }\n\n const emoji = emojiByUnified(unified ?? originalUnified);\n\n if (!emoji) {\n return [];\n }\n\n return [emoji, unified as string];\n}\n\nexport function isEmojiElement(element: NullableElement): boolean {\n return Boolean(\n element?.matches(EmojiButtonSelector) ||\n element?.parentElement?.matches(EmojiButtonSelector)\n );\n}\n\nexport function categoryLabelFromCategory(\n category: NullableElement\n): NullableElement {\n return category?.querySelector(asSelectors(ClassNames.label)) ?? null;\n}\n\nexport function closestCategoryLabel(\n element: NullableElement\n): NullableElement {\n const category = closestCategory(element);\n return categoryLabelFromCategory(category);\n}\n\nexport function elementHeight(element: NullableElement): number {\n return element?.clientHeight ?? 0;\n}\n\nexport function emojiTrueOffsetTop(element: NullableElement): number {\n if (!element) {\n return 0;\n }\n\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n // compensate for the label height\n const labelHeight = categoryLabelHeight(category);\n\n return elementOffsetTop(button) + elementOffsetTop(category) + labelHeight;\n}\n\nexport function categoryLabelHeight(category: NullableElement): number {\n if (!category) {\n return 0;\n }\n\n const categoryWithoutLabel = category.querySelector(\n asSelectors(ClassNames.categoryContent)\n );\n\n return (\n (category?.clientHeight ?? 0) - (categoryWithoutLabel?.clientHeight ?? 0)\n );\n}\n\nexport function isEmojiBehindLabel(emoji: NullableElement): boolean {\n if (!emoji) {\n return false;\n }\n\n return (\n emojiDistanceFromScrollTop(emoji) <\n categoryLabelHeight(closestCategory(emoji))\n );\n}\n\nexport function queryScrollBody(root: NullableElement): NullableElement {\n if (!root) return null;\n\n return root.matches(asSelectors(ClassNames.scrollBody))\n ? root\n : root.querySelector(asSelectors(ClassNames.scrollBody));\n}\n\nexport function emojiDistanceFromScrollTop(emoji: NullableElement): number {\n if (!emoji) {\n return 0;\n }\n\n return emojiTrueOffsetTop(emoji) - (closestScrollBody(emoji)?.scrollTop ?? 0);\n}\n\nexport function closestScrollBody(element: NullableElement): NullableElement {\n if (!element) {\n return null;\n }\n\n return element.closest(asSelectors(ClassNames.scrollBody)) ?? null;\n}\n\nexport function emojiTruOffsetLeft(element: NullableElement): number {\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n return elementOffsetLeft(button) + elementOffsetLeft(category);\n}\n\nfunction elementOffsetTop(element: NullableElement): number {\n return element?.offsetTop ?? 0;\n}\n\nfunction elementOffsetLeft(element: NullableElement): number {\n return element?.offsetLeft ?? 0;\n}\n\nexport function unifiedFromEmojiElement(emoji: NullableElement): string | null {\n return elementDataSetKey(buttonFromTarget(emoji), 'unified') ?? null;\n}\n\nexport function originalUnifiedFromEmojiElement(\n emoji: NullableElement\n): string | null {\n const unified = unifiedFromEmojiElement(emoji);\n\n if (unified) {\n return unifiedWithoutSkinTone(unified);\n }\n return null;\n}\n\nfunction elementDataSetKey(\n element: NullableElement,\n key: string\n): string | null {\n return elementDataSet(element)[key] ?? null;\n}\n\nfunction elementDataSet(element: NullableElement): DOMStringMap {\n return element?.dataset ?? {};\n}\n\nexport function isVisibleEmoji(element: HTMLElement) {\n return element.classList.contains(ClassNames.visible);\n}\n\nexport function isHidden(element: NullableElement) {\n if (!element) return true;\n\n return element.classList.contains(ClassNames.hidden);\n}\n\nexport function allVisibleEmojis(parent: NullableElement) {\n if (!parent) {\n return [];\n }\n\n return Array.from(\n parent.querySelectorAll(VisibleEmojiSelector)\n ) as HTMLElement[];\n}\n\nexport function lastVisibleEmoji(element: NullableElement): NullableElement {\n if (!element) return null;\n\n const allEmojis = allVisibleEmojis(element);\n const [last] = allEmojis.slice(-1);\n if (!last) {\n return null;\n }\n\n if (!isVisibleEmoji(last)) {\n return prevVisibleEmoji(last);\n }\n\n return last;\n}\n\nexport function nextVisibleEmoji(element: HTMLElement): NullableElement {\n const next = element.nextElementSibling as HTMLElement;\n\n if (!next) {\n return firstVisibleEmoji(nextCategory(element));\n }\n\n if (!isVisibleEmoji(next)) {\n return nextVisibleEmoji(next);\n }\n\n return next;\n}\n\nexport function prevVisibleEmoji(element: HTMLElement): NullableElement {\n const prev = element.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return lastVisibleEmoji(prevCategory(element));\n }\n\n if (!isVisibleEmoji(prev)) {\n return prevVisibleEmoji(prev);\n }\n\n return prev;\n}\n\nexport function firstVisibleEmoji(parent: NullableElement) {\n if (!parent) {\n return null;\n }\n\n const allEmojis = allVisibleEmojis(parent);\n\n return firstVisibleElementInContainer(parent, allEmojis);\n}\n\nexport function prevCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const prev = category.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return null;\n }\n\n if (isHidden(prev)) {\n return prevCategory(prev);\n }\n\n return prev;\n}\n\nexport function nextCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const next = category.nextElementSibling as HTMLElement;\n\n if (!next) {\n return null;\n }\n\n if (isHidden(next)) {\n return nextCategory(next);\n }\n\n return next;\n}\n\nexport function closestCategory(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(asSelectors(ClassNames.category)) as HTMLElement;\n}\n\nexport function closestCategoryContent(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(\n asSelectors(ClassNames.categoryContent)\n ) as HTMLElement;\n}\n","export function parseNativeEmoji(unified: string): string {\n return unified\n .split('-')\n .map(hex => String.fromCodePoint(parseInt(hex, 16)))\n .join('');\n}\n","import { SkinTones, SuggestionMode } from '../types/exposedTypes';\n\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './emojiSelectors';\n\nconst SUGGESTED_LS_KEY = 'epr_suggested';\n\ntype SuggestedItem = {\n unified: string;\n original: string;\n count: number;\n};\n\ntype Suggested = SuggestedItem[];\n\nexport function getSuggested(mode?: SuggestionMode): Suggested {\n try {\n if (!window?.localStorage) {\n return [];\n }\n const recent = JSON.parse(\n window?.localStorage.getItem(SUGGESTED_LS_KEY) ?? '[]'\n ) as Suggested;\n\n if (mode === SuggestionMode.FREQUENT) {\n return recent.sort((a, b) => b.count - a.count);\n }\n\n return recent;\n } catch {\n return [];\n }\n}\n\nexport function setSuggested(emoji: DataEmoji, skinTone: SkinTones) {\n const recent = getSuggested();\n\n const unified = emojiUnified(emoji, skinTone);\n const originalUnified = emojiUnified(emoji);\n\n let existing = recent.find(({ unified: u }) => u === unified);\n\n let nextList: SuggestedItem[];\n\n if (existing) {\n nextList = [existing].concat(recent.filter(i => i !== existing));\n } else {\n existing = {\n unified,\n original: originalUnified,\n count: 0\n };\n nextList = [existing, ...recent];\n }\n\n existing.count++;\n\n nextList.length = Math.min(nextList.length, 14);\n\n try {\n window?.localStorage.setItem(SUGGESTED_LS_KEY, JSON.stringify(nextList));\n // Prevents the change from being seen immediately.\n } catch {\n // ignore\n }\n}\n","import {\n Categories,\n CategoryConfig,\n CustomCategoryConfig\n} from '../config/categoryConfig';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\n\nexport function isCustomCategory(\n category: CategoryConfig | CustomCategoryConfig\n): category is CustomCategoryConfig {\n return category.category === Categories.CUSTOM;\n}\n\nexport function isCustomEmoji(emoji: Partial<DataEmoji>): emoji is CustomEmoji {\n return emoji.imgUrl !== undefined;\n}\n","import { useCallback } from 'react';\n\nimport {\n useEmojiVariationPickerState,\n useSkinToneFanOpenState\n} from '../components/context/PickerContext';\n\nexport function useCloseAllOpenToggles() {\n const [variationPicker, setVariationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen, setSkinToneFanOpen] = useSkinToneFanOpenState();\n\n const closeAllOpenToggles = useCallback(() => {\n if (variationPicker) {\n setVariationPicker(null);\n }\n\n if (skinToneFanOpen) {\n setSkinToneFanOpen(false);\n }\n }, [\n variationPicker,\n skinToneFanOpen,\n setVariationPicker,\n setSkinToneFanOpen\n ]);\n\n return closeAllOpenToggles;\n}\n\nexport function useHasOpenToggles() {\n const [variationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen] = useSkinToneFanOpenState();\n\n return function hasOpenToggles() {\n return !!variationPicker || skinToneFanOpen;\n };\n}\n","import { emojiFromElement, NullableElement } from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n\n return function setVariationPicker(element: NullableElement) {\n const [emoji] = emojiFromElement(element);\n\n if (emoji) {\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n }\n };\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n emojiFromElement,\n isEmojiElement,\n NullableElement\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested\n} from '../components/context/PickerContext';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useOnEmojiClickConfig\n} from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n emojiHasVariations,\n emojiNames,\n emojiUnified\n} from '../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../dataUtils/parseNativeEmoji';\nimport { setSuggested } from '../dataUtils/suggested';\nimport { isCustomEmoji } from '../typeRefinements/typeRefinements';\nimport { EmojiClickData, SkinTones, EmojiStyle } from '../types/exposedTypes';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\nimport useSetVariationPicker from './useSetVariationPicker';\n\nexport function useMouseDownHandlers(\n BodyRef: React.MutableRefObject<NullableElement>\n) {\n const mouseDownTimerRef = useRef<undefined | number>();\n const setVariationPicker = useSetVariationPicker();\n const disallowClickRef = useDisallowClickRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [activeSkinTone] = useActiveSkinToneState();\n const onEmojiClick = useOnEmojiClickConfig();\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const activeEmojiStyle = useEmojiStyleConfig();\n\n const onClick = React.useCallback(\n function onClick(event: MouseEvent) {\n if (disallowClickRef.current) {\n return;\n }\n\n closeAllOpenToggles();\n\n const [emoji, unified] = emojiFromEvent(event);\n\n if (!emoji || !unified) {\n return;\n }\n\n const skinToneToUse =\n activeVariationFromUnified(unified) || activeSkinTone;\n\n updateSuggested();\n setSuggested(emoji, skinToneToUse);\n onEmojiClick(\n emojiClickOutput(emoji, skinToneToUse, activeEmojiStyle, getEmojiUrl),\n event\n );\n },\n [\n activeSkinTone,\n closeAllOpenToggles,\n disallowClickRef,\n onEmojiClick,\n updateSuggested,\n getEmojiUrl,\n activeEmojiStyle\n ]\n );\n\n const onMouseDown = React.useCallback(\n function onMouseDown(event: MouseEvent) {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n }\n\n const [emoji] = emojiFromEvent(event);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = window?.setTimeout(() => {\n disallowClickRef.current = true;\n mouseDownTimerRef.current = undefined;\n closeAllOpenToggles();\n setVariationPicker(event.target as HTMLElement);\n setEmojiVariationPicker(emoji);\n }, 500);\n },\n [\n disallowClickRef,\n closeAllOpenToggles,\n setVariationPicker,\n setEmojiVariationPicker\n ]\n );\n const onMouseUp = React.useCallback(\n function onMouseUp() {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n mouseDownTimerRef.current = undefined;\n } else if (disallowClickRef.current) {\n // The problem we're trying to overcome here\n // is that the emoji has both mouseup and click events\n // and when releasing a mouseup event\n // the click gets triggered too\n // So we're disallowing the click event for a short time\n\n requestAnimationFrame(() => {\n disallowClickRef.current = false;\n });\n }\n },\n [disallowClickRef]\n );\n\n useEffect(() => {\n if (!BodyRef.current) {\n return;\n }\n const bodyRef = BodyRef.current;\n bodyRef.addEventListener('click', onClick, {\n passive: true\n });\n\n bodyRef.addEventListener('mousedown', onMouseDown, {\n passive: true\n });\n bodyRef.addEventListener('mouseup', onMouseUp, {\n passive: true\n });\n\n return () => {\n bodyRef?.removeEventListener('click', onClick);\n bodyRef?.removeEventListener('mousedown', onMouseDown);\n bodyRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [BodyRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(event: MouseEvent): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n return emojiFromElement(target);\n}\n\nfunction emojiClickOutput(\n emoji: DataEmoji,\n activeSkinTone: SkinTones,\n activeEmojiStyle: EmojiStyle,\n getEmojiUrl: GetEmojiUrl\n): EmojiClickData {\n const names = emojiNames(emoji);\n\n if (isCustomEmoji(emoji)) {\n const unified = emojiUnified(emoji);\n return {\n activeSkinTone,\n emoji: unified,\n getImageUrl() {\n return emoji.imgUrl;\n },\n imageUrl: emoji.imgUrl,\n isCustom: true,\n names,\n unified,\n unifiedWithoutSkinTone: unified\n };\n }\n const unified = emojiUnified(emoji, activeSkinTone);\n\n return {\n activeSkinTone,\n emoji: parseNativeEmoji(unified),\n getImageUrl(emojiStyle: EmojiStyle = activeEmojiStyle ?? EmojiStyle.APPLE) {\n return getEmojiUrl(unified, emojiStyle);\n },\n imageUrl: getEmojiUrl(unified, activeEmojiStyle ?? EmojiStyle.APPLE),\n isCustom: false,\n names,\n unified,\n unifiedWithoutSkinTone: emojiUnified(emoji)\n };\n}\n","import { useEffect } from 'react';\n\nimport { ElementRef } from '../components/context/ElementRefContext';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\n\nexport function useOnScroll(BodyRef: ElementRef) {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n if (!bodyRef) {\n return;\n }\n\n bodyRef.addEventListener('scroll', onScroll, {\n passive: true\n });\n\n function onScroll() {\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n}\n","import { useCallback } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport {\n categoryLabelHeight,\n closestCategory,\n closestScrollBody,\n emojiDistanceFromScrollTop,\n isEmojiBehindLabel,\n NullableElement,\n queryScrollBody\n} from './selectors';\n\nexport function scrollTo(root: NullableElement, top: number = 0) {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = top + 1;\n });\n}\n\nexport function scrollBy(root: NullableElement, by: number): void {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = $eprBody.scrollTop + by;\n });\n}\n\nexport function useScrollTo() {\n const BodyRef = useBodyRef();\n\n return useCallback(\n (top: number) => {\n requestAnimationFrame(() => {\n if (BodyRef.current) {\n BodyRef.current.scrollTop = top;\n }\n });\n },\n [BodyRef]\n );\n}\n\nexport function scrollEmojiAboveLabel(emoji: NullableElement) {\n if (!emoji || !isEmojiBehindLabel(emoji)) {\n return;\n }\n\n if (emoji.closest(asSelectors(ClassNames.variationPicker))) {\n return;\n }\n\n const scrollBody = closestScrollBody(emoji);\n const by = emojiDistanceFromScrollTop(emoji);\n scrollBy(scrollBody, -(categoryLabelHeight(closestCategory(emoji)) - by));\n}\n","import { useCallback } from 'react';\n\nimport { focusElement, focusFirstElementChild } from '../DomUtils/focusElement';\nimport {\n useCategoryNavigationRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\n\nexport function useFocusSearchInput() {\n const SearchInputRef = useSearchInputRef();\n\n return useCallback(() => {\n focusElement(SearchInputRef.current);\n }, [SearchInputRef]);\n}\n\nexport function useFocusSkinTonePicker() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n\n return useCallback(() => {\n if (!SkinTonePickerRef.current) {\n return;\n }\n\n focusFirstElementChild(SkinTonePickerRef.current);\n }, [SkinTonePickerRef]);\n}\n\nexport function useFocusCategoryNavigation() {\n const CategoryNavigationRef = useCategoryNavigationRef();\n\n return useCallback(() => {\n if (!CategoryNavigationRef.current) {\n return;\n }\n\n focusFirstElementChild(CategoryNavigationRef.current);\n }, [CategoryNavigationRef]);\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport {\n usePickerMainRef,\n useSearchInputRef\n} from '../components/context/ElementRefContext';\nimport {\n FilterState,\n useFilterRef,\n useSearchTermState\n} from '../components/context/PickerContext';\nimport { useSearchResultsConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiNames } from '../dataUtils/emojiSelectors';\n\nimport { useFocusSearchInput } from './useFocus';\n\nfunction useSetFilterRef() {\n const filterRef = useFilterRef();\n\n return function setFilter(\n setter: FilterState | ((current: FilterState) => FilterState)\n ): void {\n if (typeof setter === 'function') {\n return setFilter(setter(filterRef.current));\n }\n\n filterRef.current = setter;\n };\n}\n\nexport function useClearSearch() {\n const applySearch = useApplySearch();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n\n return function clearSearch() {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = '';\n }\n\n applySearch('');\n focusSearchInput();\n };\n}\n\nexport function useAppendSearch() {\n const SearchInputRef = useSearchInputRef();\n const applySearch = useApplySearch();\n\n return function appendSearch(str: string) {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = `${SearchInputRef.current.value}${str}`;\n applySearch(getNormalizedSearchTerm(SearchInputRef.current.value));\n } else {\n applySearch(getNormalizedSearchTerm(str));\n }\n };\n}\n\nexport function useFilter() {\n const SearchInputRef = useSearchInputRef();\n const filterRef = useFilterRef();\n const setFilterRef = useSetFilterRef();\n const applySearch = useApplySearch();\n\n const [searchTerm] = useSearchTermState();\n const statusSearchResults = getStatusSearchResults(\n filterRef.current,\n searchTerm\n );\n\n return {\n onChange,\n searchTerm,\n SearchInputRef,\n statusSearchResults\n };\n\n function onChange(inputValue: string) {\n const filter = filterRef.current;\n\n const nextValue = inputValue.toLowerCase();\n\n if (filter?.[nextValue] || nextValue.length <= 1) {\n return applySearch(nextValue);\n }\n\n const longestMatch = findLongestMatch(nextValue, filter);\n\n if (!longestMatch) {\n // Can we even get here?\n // If so, we need to search among all emojis\n return applySearch(nextValue);\n }\n\n setFilterRef(current =>\n Object.assign(current, {\n [nextValue]: filterEmojiObjectByKeyword(longestMatch, nextValue)\n })\n );\n applySearch(nextValue);\n }\n}\n\nfunction useApplySearch() {\n const [, setSearchTerm] = useSearchTermState();\n const PickerMainRef = usePickerMainRef();\n\n return function applySearch(searchTerm: string) {\n requestAnimationFrame(() => {\n setSearchTerm(searchTerm ? searchTerm?.toLowerCase() : searchTerm).then(\n () => {\n scrollTo(PickerMainRef.current, 0);\n }\n );\n });\n };\n}\n\nfunction filterEmojiObjectByKeyword(\n emojis: FilterDict,\n keyword: string\n): FilterDict {\n const filtered: FilterDict = {};\n\n for (const unified in emojis) {\n const emoji = emojis[unified];\n\n if (hasMatch(emoji, keyword)) {\n filtered[unified] = emoji;\n }\n }\n\n return filtered;\n}\n\nfunction hasMatch(emoji: DataEmoji, keyword: string): boolean {\n return emojiNames(emoji).some(name => name.includes(keyword));\n}\n\nexport function useIsEmojiFiltered(): (unified: string) => boolean {\n const { current: filter } = useFilterRef();\n const [searchTerm] = useSearchTermState();\n\n return unified => isEmojiFilteredBySearchTerm(unified, filter, searchTerm);\n}\n\nfunction isEmojiFilteredBySearchTerm(\n unified: string,\n filter: FilterState,\n searchTerm: string\n): boolean {\n if (!filter || !searchTerm) {\n return false;\n }\n\n return !filter[searchTerm]?.[unified];\n}\n\nexport type FilterDict = Record<string, DataEmoji>;\n\nfunction findLongestMatch(\n keyword: string,\n dict: Record<string, FilterDict> | null\n): FilterDict | null {\n if (!dict) {\n return null;\n }\n\n if (dict[keyword]) {\n return dict[keyword];\n }\n\n const longestMatchingKey = Object.keys(dict)\n .sort((a, b) => b.length - a.length)\n .find(key => keyword.includes(key));\n\n if (longestMatchingKey) {\n return dict[longestMatchingKey];\n }\n\n return null;\n}\n\nexport function getNormalizedSearchTerm(str: string): string {\n if (!str || typeof str !== 'string') {\n return '';\n }\n\n return str.trim().toLowerCase();\n}\n\nfunction getStatusSearchResults(\n filterState: FilterState,\n searchTerm: string\n): string {\n if (!filterState?.[searchTerm]) return '';\n\n const searchResultsCount =\n Object.entries(filterState?.[searchTerm])?.length || 0;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSearchResultsConfig(searchResultsCount);\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiSelectors';\n\nimport { useIsEmojiFiltered } from './useFilter';\n\nexport function useIsEmojiHidden(): (emoji: DataEmoji) => IsHiddenReturn {\n const [emojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const isEmojiFiltered = useIsEmojiFiltered();\n\n return (emoji: DataEmoji): IsHiddenReturn => {\n const unified = emojiUnified(emoji);\n\n const failedToLoad = emojisThatFailedToLoad.has(unified);\n const filteredOut = isEmojiFiltered(unified);\n\n return {\n failedToLoad,\n filteredOut,\n hidden: failedToLoad || filteredOut\n };\n };\n}\n\ntype IsHiddenReturn = {\n failedToLoad: boolean;\n filteredOut: boolean;\n hidden: boolean;\n};\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\ninterface Props\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n className?: string;\n}\n\nexport function Button(props: Props) {\n return (\n <button type=\"button\" {...props} className={cx('epr-btn', props.className)}>\n {props.children}\n </button>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { Button } from '../atoms/Button';\n\nimport './Emoji.css';\n\ntype ClickableEmojiButtonProps = Readonly<{\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emojiNames: string[];\n children: React.ReactNode;\n hasVariations: boolean;\n unified?: string;\n}>;\n\nexport function ClickableEmojiButton({\n emojiNames,\n unified,\n hidden,\n hiddenOnSearch,\n showVariations = true,\n hasVariations,\n children\n}: ClickableEmojiButtonProps) {\n return (\n <Button\n className={cx(ClassNames.emoji, {\n [ClassNames.hidden]: hidden,\n [ClassNames.hiddenOnSearch]: hiddenOnSearch,\n [ClassNames.visible]: !hidden && !hiddenOnSearch,\n [ClassNames.emojiHasVariations]: hasVariations && showVariations\n })}\n data-unified={unified}\n aria-label={emojiNames[0]}\n data-full-name={emojiNames}\n >\n {children}\n </Button>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nexport function EmojiImg({\n emojiName,\n style,\n lazyLoad = false,\n imgUrl,\n onError\n}: {\n emojiName: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n imgUrl: string;\n onError: () => void;\n}) {\n return (\n <img\n src={imgUrl}\n alt={emojiName}\n className={cx(ClassNames.external, 'epr-emoji-img')}\n loading={lazyLoad ? 'lazy' : 'eager'}\n onError={onError}\n style={style}\n />\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { parseNativeEmoji } from '../../dataUtils/parseNativeEmoji';\n\nexport function NativeEmoji({\n unified,\n style\n}: {\n unified: string;\n style: React.CSSProperties;\n}) {\n return (\n <span\n className={cx(ClassNames.external, 'epr-emoji-native')}\n data-unified={unified}\n style={style}\n >\n {parseNativeEmoji(unified)}\n </span>\n );\n}\n","import * as React from 'react';\n\nimport {\n emojiByUnified,\n emojiName,\n emojiUrlByUnified\n} from '../../dataUtils/emojiSelectors';\nimport { isCustomEmoji } from '../../typeRefinements/typeRefinements';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { EmojiImg } from './EmojiImg';\nimport { NativeEmoji } from './NativeEmoji';\n\nexport function ViewOnlyEmoji({\n emoji,\n unified,\n emojiStyle,\n size,\n lazyLoad,\n getEmojiUrl = emojiUrlByUnified\n}: BaseEmojiProps) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n\n const style = {} as React.CSSProperties;\n if (size) {\n style.width = style.height = style.fontSize = `${size}px`;\n }\n\n const emojiToRender = emoji ? emoji : emojiByUnified(unified);\n\n if (!emojiToRender) {\n return null;\n }\n\n if (isCustomEmoji(emojiToRender)) {\n return (\n <EmojiImg\n style={style}\n emojiName={unified}\n emojiStyle={EmojiStyle.NATIVE}\n lazyLoad={lazyLoad}\n imgUrl={emojiToRender.imgUrl}\n onError={onError}\n />\n );\n }\n\n return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} />\n ) : (\n <EmojiImg\n style={style}\n emojiName={emojiName(emojiToRender)}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n imgUrl={getEmojiUrl(unified, emojiStyle)}\n onError={onError}\n />\n )}\n </>\n );\n\n function onError() {\n setEmojisThatFailedToLoad(prev => new Set(prev).add(unified));\n }\n}\n","import * as React from 'react';\n\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiHasVariations, emojiNames } from '../../dataUtils/emojiSelectors';\n\nimport './Emoji.css';\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { ClickableEmojiButton } from './ClickableEmojiButton';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\ntype ClickableEmojiProps = Readonly<\n BaseEmojiProps & {\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emoji: DataEmoji;\n }\n>;\n\nexport function ClickableEmoji({\n emoji,\n unified,\n hidden,\n hiddenOnSearch,\n emojiStyle,\n showVariations = true,\n size,\n lazyLoad,\n getEmojiUrl\n}: ClickableEmojiProps) {\n const hasVariations = emojiHasVariations(emoji);\n\n return (\n <ClickableEmojiButton\n hasVariations={hasVariations}\n showVariations={showVariations}\n hidden={hidden}\n hiddenOnSearch={hiddenOnSearch}\n emojiNames={emojiNames(emoji)}\n unified={unified}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n />\n </ClickableEmojiButton>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n CategoryConfig,\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\n\nimport './EmojiCategory.css';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch\n}: Props) {\n const category = categoryFromCategoryConfig(categoryConfig);\n const categoryName = categoryNameFromCategoryConfig(categoryConfig);\n\n return (\n <li\n className={cx(ClassNames.category, {\n [ClassNames.hidden]: hidden,\n [ClassNames.hiddenOnSearch]: hiddenOnSearch\n })}\n data-name={category}\n aria-label={categoryName}\n >\n <h2 className={ClassNames.label}>{categoryName}</h2>\n <div className={ClassNames.categoryContent}>{children}</div>\n </li>\n );\n}\n","import * as React from 'react';\n\nimport { CategoryConfig } from '../../config/categoryConfig';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useSuggestedEmojisModeConfig,\n} from '../../config/useConfig';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { getSuggested } from '../../dataUtils/suggested';\nimport { useUpdateSuggested } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n}>;\n\nexport function Suggested({ categoryConfig }: Props) {\n const [suggestedUpdated] = useUpdateSuggested();\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const suggested = React.useMemo(\n () => getSuggested(suggestedEmojisModeConfig) ?? [],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [suggestedUpdated, suggestedEmojisModeConfig]\n );\n const emojiStyle = useEmojiStyleConfig();\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n hiddenOnSearch\n hidden={suggested.length === 0}\n >\n {suggested.map((suggestedItem) => {\n const emoji = emojiByUnified(suggestedItem.original);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={false}\n unified={suggestedItem.unified}\n emojiStyle={emojiStyle}\n emoji={emoji}\n key={suggestedItem.unified}\n getEmojiUrl={getEmojiUrl}\n />\n );\n })}\n </EmojiCategory>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n Categories,\n CategoryConfig,\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n useSkinTonesDisabledConfig\n} from '../../config/useConfig';\nimport { emojisByCategory, emojiUnified } from '../../dataUtils/emojiSelectors';\nimport { useIsEmojiDisallowed } from '../../hooks/useDisallowedEmojis';\nimport { useIsEmojiHidden } from '../../hooks/useIsEmojiHidden';\nimport {\n useActiveSkinToneState,\n useIsPastInitialLoad\n} from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { Suggested } from './Suggested';\n\nexport function EmojiList() {\n const categories = useCategoriesConfig();\n const renderdCategoriesCountRef = React.useRef(0);\n\n return (\n <ul className={cx(styles.emojiList)}>\n {categories.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n if (category === Categories.SUGGESTED) {\n return <Suggested key={category} categoryConfig={categoryConfig} />;\n }\n\n return (\n <RenderCategory\n key={category}\n category={category}\n categoryConfig={categoryConfig}\n renderdCategoriesCountRef={renderdCategoriesCountRef}\n />\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n category,\n categoryConfig,\n renderdCategoriesCountRef\n}: {\n category: Categories;\n categoryConfig: CategoryConfig;\n renderdCategoriesCountRef: React.MutableRefObject<number>;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const isPastInitialLoad = useIsPastInitialLoad();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const showVariations = !useSkinTonesDisabledConfig();\n\n // Small trick to defer the rendering of all emoji categories until the first category is visible\n // This way the user gets to actually see something and not wait for the whole picker to render.\n const emojisToPush =\n !isPastInitialLoad && renderdCategoriesCountRef.current > 0\n ? []\n : emojisByCategory(category);\n\n if (emojisToPush.length > 0) {\n renderdCategoriesCountRef.current++;\n }\n\n let hiddenCounter = 0;\n\n const emojis = emojisToPush.map(emoji => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n const isDisallowed = isEmojiDisallowed(emoji);\n\n if (hidden || isDisallowed) {\n hiddenCounter++;\n }\n\n if (isDisallowed) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={showVariations}\n key={unified}\n emoji={emoji}\n unified={unified}\n hidden={failedToLoad}\n hiddenOnSearch={filteredOut}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n />\n );\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={hiddenCounter === emojis.length}\n >\n {emojis}\n </EmojiCategory>\n );\n}\n\nconst styles = stylesheet.create({\n emojiList: {\n '.': ClassNames.emojiList,\n listStyle: 'none',\n margin: '0',\n padding: '0'\n }\n});\n","import {\n elementCountInRow,\n elementIndexInRow,\n getElementInNextRow,\n getElementInPrevRow,\n getElementInRow,\n hasNextRow,\n rowNumber\n} from './elementPositionInRow';\nimport { focusElement } from './focusElement';\nimport { scrollEmojiAboveLabel } from './scrollTo';\nimport {\n allVisibleEmojis,\n closestCategory,\n firstVisibleEmoji,\n lastVisibleEmoji,\n nextCategory,\n nextVisibleEmoji,\n NullableElement,\n prevCategory,\n prevVisibleEmoji,\n closestCategoryContent\n} from './selectors';\n\nexport function focusFirstVisibleEmoji(parent: NullableElement) {\n const emoji = firstVisibleEmoji(parent);\n focusElement(emoji);\n scrollEmojiAboveLabel(emoji);\n}\n\nexport function focusAndClickFirstVisibleEmoji(parent: NullableElement) {\n const firstEmoji = firstVisibleEmoji(parent);\n\n focusElement(firstEmoji);\n firstEmoji?.click();\n}\n\nexport function focusLastVisibleEmoji(parent: NullableElement) {\n focusElement(lastVisibleEmoji(parent));\n}\n\nexport function focusNextVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = nextVisibleEmoji(element);\n\n if (!next) {\n return focusFirstVisibleEmoji(nextCategory(element));\n }\n\n focusElement(next);\n scrollEmojiAboveLabel(next);\n}\n\nexport function focusPrevVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const prev = prevVisibleEmoji(element);\n\n if (!prev) {\n return focusLastVisibleEmoji(prevCategory(element));\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowUp(\n element: NullableElement,\n exitUp: () => void\n) {\n if (!element) {\n return;\n }\n\n const prev = visibleEmojiOneRowUp(element);\n\n if (!prev) {\n return exitUp();\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowDown(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = visibleEmojiOneRowDown(element);\n\n return focusElement(next);\n}\n\nfunction visibleEmojiOneRowUp(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n\n if (row === 0) {\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(prevVisibleCategory),\n -1, // last row\n countInRow,\n indexInRow\n );\n }\n\n return getElementInPrevRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n}\n\nfunction visibleEmojiOneRowDown(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n if (!hasNextRow(categoryContent, element)) {\n const nextVisibleCategory = nextCategory(category);\n\n if (!nextVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(nextVisibleCategory),\n 0,\n countInRow,\n indexInRow\n );\n }\n\n const itemInNextRow = getElementInNextRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n\n return itemInNextRow;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { focusFirstVisibleEmoji } from '../../DomUtils/keyboardNavigation';\nimport {\n buttonFromTarget,\n elementHeight,\n emojiTrueOffsetTop,\n emojiTruOffsetLeft\n} from '../../DomUtils/selectors';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig\n} from '../../config/useConfig';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations\n} from '../../dataUtils/emojiSelectors';\nimport {\n useAnchoredEmojiRef,\n useBodyRef,\n useSetAnchoredEmojiRef,\n useVariationPickerRef\n} from '../context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport './EmojiVariationPicker.css';\n\nenum Direction {\n Up,\n Down\n}\n\nexport function EmojiVariationPicker() {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const VariationPickerRef = useVariationPickerRef();\n const [emoji] = useEmojiVariationPickerState();\n const emojiStyle = useEmojiStyleConfig();\n\n const { getTop, getMenuDirection } = useVariationPickerTop(\n VariationPickerRef\n );\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const getPointerStyle = usePointerStyle(VariationPickerRef);\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const visible =\n emoji &&\n button &&\n emojiHasVariations(emoji) &&\n button.classList.contains(ClassNames.emojiHasVariations);\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n focusFirstVisibleEmoji(VariationPickerRef.current);\n }, [VariationPickerRef, visible, AnchoredEmojiRef]);\n\n let top, pointerStyle;\n\n if (!visible && AnchoredEmojiRef.current) {\n setAnchoredEmojiRef(null);\n } else {\n top = getTop();\n pointerStyle = getPointerStyle();\n }\n\n return (\n <div\n ref={VariationPickerRef}\n className={cx(ClassNames.variationPicker, {\n visible,\n 'pointing-up': getMenuDirection() === Direction.Down\n })}\n style={{ top }}\n >\n {visible && emoji\n ? [emojiUnified(emoji)]\n .concat(emojiVariations(emoji))\n .slice(0, 6)\n .map(unified => (\n <ClickableEmoji\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n showVariations={false}\n getEmojiUrl={getEmojiUrl}\n />\n ))\n : null}\n <div className=\"epr-emoji-pointer\" style={pointerStyle} />\n </div>\n );\n}\n\nfunction usePointerStyle(VariationPickerRef: React.RefObject<HTMLElement>) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return function getPointerStyle() {\n const style: React.CSSProperties = {};\n if (!VariationPickerRef.current) {\n return style;\n }\n\n if (AnchoredEmojiRef.current) {\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const offsetLeft = emojiTruOffsetLeft(button);\n\n if (!button) {\n return style;\n }\n\n // half of the button\n style.left = offsetLeft + button?.clientWidth / 2;\n }\n\n return style;\n };\n}\n\nfunction useVariationPickerTop(\n VariationPickerRef: React.RefObject<HTMLElement>\n) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const BodyRef = useBodyRef();\n let direction = Direction.Up;\n\n return {\n getMenuDirection,\n getTop\n };\n\n function getMenuDirection() {\n return direction;\n }\n\n function getTop() {\n direction = Direction.Up;\n let emojiOffsetTop = 0;\n\n if (!VariationPickerRef.current) {\n return 0;\n }\n\n const height = elementHeight(VariationPickerRef.current);\n\n if (AnchoredEmojiRef.current) {\n const bodyRef = BodyRef.current;\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const buttonHeight = elementHeight(button);\n\n emojiOffsetTop = emojiTrueOffsetTop(button);\n\n const scrollTop = bodyRef?.scrollTop ?? 0;\n\n if (scrollTop > emojiOffsetTop - height) {\n direction = Direction.Down;\n emojiOffsetTop += buttonHeight + height;\n }\n }\n\n return emojiOffsetTop - height;\n }\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { useOnMouseMove } from '../../hooks/useDisallowMouseMove';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useOnScroll } from '../../hooks/useOnScroll';\nimport { useBodyRef } from '../context/ElementRefContext';\n\nimport { EmojiList } from './EmojiList';\nimport { EmojiVariationPicker } from './EmojiVariationPicker';\n\nexport function Body() {\n const BodyRef = useBodyRef();\n useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef);\n useOnMouseMove();\n\n return (\n <div className={cx(styles.body)} ref={BodyRef}>\n <EmojiVariationPicker />\n <EmojiList />\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n body: {\n '.': ClassNames.scrollBody,\n flex: '1',\n overflowY: 'scroll',\n overflowX: 'hidden',\n position: 'relative'\n }\n});\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { focusElement } from '../DomUtils/focusElement';\nimport {\n buttonFromTarget,\n originalUnifiedFromEmojiElement,\n unifiedFromEmojiElement\n} from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { PreviewEmoji } from '../components/footer/Preview';\n\nimport {\n useAllowMouseMove,\n useIsMouseDisallowed\n} from './useDisallowMouseMove';\n\nexport function useEmojiPreviewEvents(\n allow: boolean,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const BodyRef = useBodyRef();\n const isMouseDisallowed = useIsMouseDisallowed();\n const allowMouseMove = useAllowMouseMove();\n\n useEffect(() => {\n if (!allow) {\n return;\n }\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('keydown', onEscape, {\n passive: true\n });\n\n bodyRef?.addEventListener('mouseover', onMouseOver, true);\n\n bodyRef?.addEventListener('focus', onEnter, true);\n\n bodyRef?.addEventListener('mouseout', onLeave, {\n passive: true\n });\n bodyRef?.addEventListener('blur', onLeave, true);\n\n function onEnter(e: FocusEvent) {\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (!button) {\n return onLeave();\n }\n\n const unified = unifiedFromEmojiElement(button);\n const originalUnified = originalUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return onLeave();\n }\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n }\n function onLeave(e?: FocusEvent | MouseEvent) {\n if (e) {\n const relatedTarget = e.relatedTarget as HTMLElement;\n\n if (!buttonFromTarget(relatedTarget)) {\n return setPreviewEmoji(null);\n }\n }\n\n setPreviewEmoji(null);\n }\n function onEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setPreviewEmoji(null);\n }\n }\n\n function onMouseOver(e: MouseEvent) {\n if (isMouseDisallowed()) {\n return;\n }\n\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (button) {\n focusElement(button);\n }\n }\n\n return () => {\n bodyRef?.removeEventListener('mouseover', onMouseOver);\n bodyRef?.removeEventListener('mouseout', onLeave);\n bodyRef?.removeEventListener('focus', onEnter, true);\n bodyRef?.removeEventListener('blur', onLeave, true);\n bodyRef?.removeEventListener('keydown', onEscape);\n };\n }, [BodyRef, allow, setPreviewEmoji, isMouseDisallowed, allowMouseMove]);\n}\n","import { useSkinTonePickerLocationConfig } from '../config/useConfig';\nimport { SkinTonePickerLocation } from '../types/exposedTypes';\n\nexport function useShouldShowSkinTonePicker() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return function shouldShowSkinTonePicker(location: SkinTonePickerLocation) {\n return skinTonePickerLocationConfig === location;\n };\n}\n\nexport function useIsSkinToneInSearch() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.SEARCH;\n}\n\nexport function useIsSkinToneInPreview() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.PREVIEW;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport './Flex.css';\n\nexport enum FlexDirection {\n ROW = 'FlexRow',\n COLUMN = 'FlexColumn'\n}\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n direction?: FlexDirection;\n}>;\n\nexport default function Flex({\n children,\n className,\n style = {},\n direction = FlexDirection.ROW\n}: Props) {\n return (\n <div style={{ ...style }} className={cx('Flex', className, direction)}>\n {children}\n </div>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\n\ntype Props = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Space({ className, style = {} }: Props) {\n return <div style={{ flex: 1, ...style }} className={cx(className)} />;\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Absolute({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'absolute' }} className={className}>\n {children}\n </div>\n );\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Relative({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'relative' }} className={className}>\n {children}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { useSkinTonesDisabledConfig } from '../../config/useConfig';\nimport skinToneVariations, {\n skinTonesNamed\n} from '../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../hooks/useFocus';\nimport { SkinTones } from '../../types/exposedTypes';\nimport Absolute from '../Layout/Absolute';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSkinTonePickerRef } from '../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState\n} from '../context/PickerContext';\n\nimport './SkinTonePicker.css';\nimport { cx } from 'flairup';\n\nconst ITEM_SIZE = 28;\n\ntype Props = {\n direction?: SkinTonePickerDirection;\n};\n\nexport function SkinTonePickerMenu() {\n return (\n <Relative style={{ height: ITEM_SIZE }}>\n <Absolute style={{ bottom: 0, right: 0 }}>\n <SkinTonePicker direction={SkinTonePickerDirection.VERTICAL} />\n </Absolute>\n </Relative>\n );\n}\n\nexport function SkinTonePicker({\n direction = SkinTonePickerDirection.HORIZONTAL\n}: Props) {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const isDisabled = useSkinTonesDisabledConfig();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const [activeSkinTone, setActiveSkinTone] = useActiveSkinToneState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const focusSearchInput = useFocusSearchInput();\n\n if (isDisabled) {\n return null;\n }\n\n const fullWidth = `${ITEM_SIZE * skinToneVariations.length}px`;\n\n const expandedSize = isOpen ? fullWidth : ITEM_SIZE + 'px';\n\n const vertical = direction === SkinTonePickerDirection.VERTICAL;\n\n return (\n <Relative\n className={cx('epr-skin-tones', direction, {\n [ClassNames.open]: isOpen\n })}\n style={\n vertical\n ? { flexBasis: expandedSize, height: expandedSize }\n : { flexBasis: expandedSize }\n }\n >\n <div className=\"epr-skin-tone-select\" ref={SkinTonePickerRef}>\n {skinToneVariations.map((skinToneVariation, i) => {\n const active = skinToneVariation === activeSkinTone;\n return (\n <Button\n style={{\n transform: cx(\n vertical\n ? `translateY(-${i * (isOpen ? ITEM_SIZE : 0)}px)`\n : `translateX(-${i * (isOpen ? ITEM_SIZE : 0)}px)`,\n isOpen && active && 'scale(1.3)'\n )\n }}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n key={skinToneVariation}\n className={cx(`epr-tone-${skinToneVariation}`, 'epr-tone', {\n [ClassNames.active]: active\n })}\n tabIndex={isOpen ? 0 : -1}\n aria-pressed={active}\n aria-label={`Skin tone ${\n skinTonesNamed[skinToneVariation as SkinTones]\n }`}\n ></Button>\n );\n })}\n </div>\n </Relative>\n );\n}\n\nexport enum SkinTonePickerDirection {\n VERTICAL = ClassNames.vertical,\n HORIZONTAL = ClassNames.horizontal\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig\n} from '../../config/useConfig';\nimport {\n emojiByUnified,\n emojiName,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport './Preview.css';\nimport { ViewOnlyEmoji } from '../emoji/ViewOnlyEmoji';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex className=\"epr-preview\">\n <PreviewBody />\n <Space />\n {isSkinToneInPreview ? <SkinTonePickerMenu /> : null}\n </Flex>\n );\n}\n\nexport function PreviewBody() {\n const previewConfig = usePreviewConfig();\n const [previewEmoji, setPreviewEmoji] = useState<PreviewEmoji>(null);\n const emojiStyle = useEmojiStyleConfig();\n const [variationPickerEmoji] = useEmojiVariationPickerState();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(\n previewEmoji?.unified ?? previewEmoji?.originalUnified\n );\n\n const show = emoji != null && previewEmoji != null;\n\n return <PreviewContent />;\n\n function PreviewContent() {\n const defaultEmoji =\n variationPickerEmoji ?? emojiByUnified(previewConfig.defaultEmoji);\n if (!defaultEmoji) {\n return null;\n }\n const defaultText = variationPickerEmoji\n ? emojiName(variationPickerEmoji)\n : previewConfig.defaultCaption;\n\n return (\n <>\n <div>\n {show ? (\n <ViewOnlyEmoji\n unified={previewEmoji?.unified as string}\n emoji={emoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : null}\n </div>\n {show ? (\n <div className=\"epr-preview-emoji-label\">{emojiName(emoji)}</div>\n ) : (\n <div className=\"epr-preview-emoji-label\">{defaultText}</div>\n )}\n </>\n );\n }\n}\n\nexport type PreviewEmoji = null | {\n unified: string;\n originalUnified: string;\n};\n","export function categoryNameFromDom($category: Element | null): string | null {\n return $category?.getAttribute('data-name') ?? null;\n}\n","import { useEffect } from 'react';\n\nimport { categoryNameFromDom } from '../DomUtils/categoryNameFromDom';\nimport { asSelectors, ClassNames } from '../DomUtils/classNames';\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nexport function useActiveCategoryScrollDetection(\n setActiveCategory: (category: string) => void\n) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map();\n const bodyRef = BodyRef.current;\n const observer = new IntersectionObserver(\n entries => {\n if (!bodyRef) {\n return;\n }\n\n for (const entry of entries) {\n const id = categoryNameFromDom(entry.target);\n visibleCategories.set(id, entry.intersectionRatio);\n }\n\n const ratios = Array.from(visibleCategories);\n const lastCategory = ratios[ratios.length - 1];\n\n if (lastCategory[1] == 1) {\n return setActiveCategory(lastCategory[0]);\n }\n\n for (const [id, ratio] of ratios) {\n if (ratio) {\n setActiveCategory(id);\n break;\n }\n }\n },\n {\n threshold: [0, 1]\n }\n );\n bodyRef?.querySelectorAll(asSelectors(ClassNames.category)).forEach(el => {\n observer.observe(el);\n });\n }, [BodyRef, setActiveCategory]);\n}\n","import { useSearchTermState } from '../components/context/PickerContext';\n\nexport default function useIsSearchMode(): boolean {\n const [searchTerm] = useSearchTermState();\n\n return !!searchTerm;\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport { NullableElement } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef\n} from '../components/context/ElementRefContext';\n\nexport function useScrollCategoryIntoView() {\n const BodyRef = useBodyRef();\n const PickerMainRef = usePickerMainRef();\n\n return function scrollCategoryIntoView(category: string): void {\n if (!BodyRef.current) {\n return;\n }\n const $category = BodyRef.current?.querySelector(\n `[data-name=\"${category}\"]`\n ) as NullableElement;\n\n if (!$category) {\n return;\n }\n\n const offsetTop = $category.offsetTop || 0;\n\n scrollTo(PickerMainRef.current, offsetTop);\n };\n}\n","import { useCustomEmojisConfig } from '../config/useConfig';\n\nexport function useShouldHideCustomEmojis() {\n const customCategoryConfig = useCustomEmojisConfig();\n\n if (!customCategoryConfig) {\n return false;\n }\n\n return customCategoryConfig.length === 0;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport './CategoryNavigation.css';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { useActiveCategoryScrollDetection } from '../../hooks/useActiveCategoryScrollDetection';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useScrollCategoryIntoView } from '../../hooks/useScrollCategoryIntoView';\nimport { useShouldHideCustomEmojis } from '../../hooks/useShouldHideCustomEmojis';\nimport { isCustomCategory } from '../../typeRefinements/typeRefinements';\nimport { Button } from '../atoms/Button';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection(setActiveCategory);\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const hideCustomCategory = useShouldHideCustomEmojis();\n\n return (\n <div\n className=\"epr-category-nav\"\n role=\"tablist\"\n aria-label=\"Category navigation\"\n id=\"epr-category-nav-id\"\n ref={CategoryNavigationRef}\n >\n {categoriesConfig.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n const isActiveCategory = category === activeCategory;\n\n if (isCustomCategory(categoryConfig) && hideCustomCategory) {\n return null;\n }\n\n return (\n <Button\n tabIndex={isSearchMode || isActiveCategory ? -1 : 0}\n className={cx('epr-cat-btn', `epr-icn-${category}`, {\n [ClassNames.active]: isActiveCategory\n })}\n key={category}\n onClick={() => {\n setActiveCategory(category);\n scrollCategoryIntoView(category);\n }}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n aria-selected={isActiveCategory}\n role=\"tab\"\n aria-controls=\"epr-category-nav-id\"\n />\n );\n })}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { ClassNames, asSelectors } from '../../DomUtils/classNames';\nimport { getNormalizedSearchTerm } from '../../hooks/useFilter';\n\nconst SCOPE = `${asSelectors(ClassNames.emojiPicker)} ${asSelectors(\n ClassNames.emojiList\n)}`;\n\nconst EMOJI_BUTTON = ['button', asSelectors(ClassNames.emoji)].join('');\nconst CATEGORY = asSelectors(ClassNames.category);\n\nexport function CssSearch({ value }: { value: undefined | string }) {\n if (!value) {\n return null;\n }\n\n const q = genQuery(value);\n\n return (\n <style>{`\n ${SCOPE} ${EMOJI_BUTTON} {\n display: none;\n }\n\n\n ${SCOPE} ${q} {\n display: flex;\n }\n\n ${SCOPE} ${CATEGORY}:not(:has(${q})) {\n display: none;\n }\n `}</style>\n );\n}\n\nfunction genQuery(value: string): string {\n return [\n EMOJI_BUTTON,\n '[data-full-name*=\"',\n getNormalizedSearchTerm(value),\n '\"]'\n ].join('');\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig\n} from '../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useClearSearch, useFilter } from '../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSearchInputRef } from '../context/ElementRefContext';\n\nimport './Search.css';\nimport { CssSearch } from './CssSearch';\nimport { SkinTonePicker } from './SkinTonePicker';\n\nexport function SearchContainer() {\n const searchDisabled = useSearchDisabledConfig();\n\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n if (searchDisabled) {\n return null;\n }\n\n return (\n <Flex className={cx(styles.overlay)}>\n <Search />\n\n {isSkinToneInSearch ? <SkinTonePicker /> : null}\n </Flex>\n );\n}\n\nconst styles = stylesheet.create({\n overlay: {\n padding: 'var(--epr-header-padding)',\n zIndex: 'var(--epr-header-overlay-z-index)'\n }\n});\n\nexport function Search() {\n const [inc, setInc] = useState(0);\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\n const clearSearch = useClearSearch();\n const placeholder = useSearchPlaceHolderConfig();\n const autoFocus = useAutoFocusSearchConfig();\n const { statusSearchResults, searchTerm, onChange } = useFilter();\n\n const input = SearchInputRef?.current;\n const value = input?.value;\n\n return (\n <Relative className=\"epr-search-container\">\n <CssSearch value={value} />\n <input\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-label={'Type to search for an emoji'}\n onFocus={closeAllOpenToggles}\n className=\"epr-search\"\n type=\"text\"\n aria-controls=\"epr-search-id\"\n placeholder={placeholder}\n onChange={event => {\n setInc(inc + 1);\n setTimeout(() => {\n onChange(event?.target?.value ?? value);\n });\n }}\n ref={SearchInputRef}\n />\n {searchTerm ? (\n <div\n role=\"status\"\n className={cx(\n 'epr-status-search-results',\n 'epr-status-visually-hidden'\n )}\n aria-live=\"polite\"\n id=\"epr-search-id\"\n aria-atomic=\"true\"\n >\n {statusSearchResults}\n </div>\n ) : null}\n <div className=\"epr-icn-search\" />\n <Button\n className={cx('epr-btn-clear-search', 'epr-visible-on-search-only')}\n onClick={clearSearch}\n aria-label=\"Clear\"\n title=\"Clear\"\n >\n <div className=\"epr-icn-clear-search\" />\n </Button>\n </Relative>\n );\n}\n","import * as React from 'react';\n\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport { SearchContainer } from './Search';\n\nexport function Header() {\n return (\n <Relative className=\"epr-header\">\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\n}\n","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusNextElementSibling,\n focusPrevElementSibling\n} from '../DomUtils/focusElement';\nimport { getActiveElement } from '../DomUtils/getActiveElement';\nimport {\n focusAndClickFirstVisibleEmoji,\n focusFirstVisibleEmoji,\n focusNextVisibleEmoji,\n focusPrevVisibleEmoji,\n focusVisibleEmojiOneRowDown,\n focusVisibleEmojiOneRowUp\n} from '../DomUtils/keyboardNavigation';\nimport { useScrollTo } from '../DomUtils/scrollTo';\nimport { buttonFromTarget } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n useCategoryNavigationRef,\n usePickerMainRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\nimport { useSkinToneFanOpenState } from '../components/context/PickerContext';\nimport { useSearchDisabledConfig } from '../config/useConfig';\n\nimport {\n useCloseAllOpenToggles,\n useHasOpenToggles\n} from './useCloseAllOpenToggles';\nimport { useDisallowMouseMove } from './useDisallowMouseMove';\nimport { useAppendSearch, useClearSearch } from './useFilter';\nimport {\n useFocusCategoryNavigation,\n useFocusSearchInput,\n useFocusSkinTonePicker\n} from './useFocus';\nimport useIsSearchMode from './useIsSearchMode';\nimport useSetVariationPicker from './useSetVariationPicker';\nimport {\n useIsSkinToneInPreview,\n useIsSkinToneInSearch\n} from './useShouldShowSkinTonePicker';\n\nenum KeyboardEvents {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n Escape = 'Escape',\n Enter = 'Enter',\n Space = ' '\n}\n\nexport function useKeyboardNavigation() {\n usePickerMainKeyboardEvents();\n useSearchInputKeyboardEvents();\n useSkinTonePickerKeyboardEvents();\n useCategoryNavigationKeyboardEvents();\n useBodyKeyboardEvents();\n}\n\nfunction usePickerMainKeyboardEvents() {\n const PickerMainRef = usePickerMainRef();\n const clearSearch = useClearSearch();\n const scrollTo = useScrollTo();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n const hasOpenToggles = useHasOpenToggles();\n const disallowMouseMove = useDisallowMouseMove();\n\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n disallowMouseMove();\n switch (key) {\n // eslint-disable-next-line no-fallthrough\n case KeyboardEvents.Escape:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n return;\n }\n clearSearch();\n scrollTo(0);\n focusSearchInput();\n break;\n }\n },\n [\n scrollTo,\n clearSearch,\n closeAllOpenToggles,\n focusSearchInput,\n hasOpenToggles,\n disallowMouseMove\n ]\n );\n\n useEffect(() => {\n const current = PickerMainRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, scrollTo, onKeyDown]);\n}\n\nfunction useSearchInputKeyboardEvents() {\n const focusSkinTonePicker = useFocusSkinTonePicker();\n const PickerMainRef = usePickerMainRef();\n const BodyRef = useBodyRef();\n const SearchInputRef = useSearchInputRef();\n const [, setSkinToneFanOpenState] = useSkinToneFanOpenState();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n if (!isSkinToneInSearch) {\n return;\n }\n event.preventDefault();\n setSkinToneFanOpenState(true);\n focusSkinTonePicker();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n goDownFromSearchInput();\n break;\n case KeyboardEvents.Enter:\n event.preventDefault();\n focusAndClickFirstVisibleEmoji(BodyRef.current);\n break;\n }\n },\n [\n focusSkinTonePicker,\n goDownFromSearchInput,\n setSkinToneFanOpenState,\n BodyRef,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SearchInputRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, onKeyDown]);\n}\n\nfunction useSkinTonePickerKeyboardEvents() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const focusSearchInput = useFocusSearchInput();\n const SearchInputRef = useSearchInputRef();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n if (isSkinToneInSearch) {\n switch (key) {\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n }\n goDownFromSearchInput();\n break;\n default:\n onType(event);\n break;\n }\n }\n\n if (isSkinToneInPreview) {\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n default:\n onType(event);\n break;\n }\n }\n },\n [\n isOpen,\n focusSearchInput,\n setIsOpen,\n goDownFromSearchInput,\n onType,\n isSkinToneInPreview,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SkinTonePickerRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [SkinTonePickerRef, SearchInputRef, isOpen, onKeyDown]);\n}\n\nfunction useCategoryNavigationKeyboardEvents() {\n const focusSearchInput = useFocusSearchInput();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const BodyRef = useBodyRef();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n focusSearchInput();\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n focusFirstVisibleEmoji(BodyRef.current);\n break;\n default:\n onType(event);\n break;\n }\n },\n [BodyRef, focusSearchInput, onType]\n );\n\n useEffect(() => {\n const current = CategoryNavigationRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [CategoryNavigationRef, BodyRef, onKeyDown]);\n}\n\nfunction useBodyKeyboardEvents() {\n const BodyRef = useBodyRef();\n const goUpFromBody = useGoUpFromBody();\n const setVariationPicker = useSetVariationPicker();\n const hasOpenToggles = useHasOpenToggles();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n const activeElement = buttonFromTarget(getActiveElement());\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowDown(activeElement);\n break;\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowUp(activeElement, goUpFromBody);\n break;\n case KeyboardEvents.Space:\n event.preventDefault();\n setVariationPicker(event.target as HTMLElement);\n break;\n default:\n onType(event);\n break;\n }\n },\n [\n goUpFromBody,\n onType,\n setVariationPicker,\n hasOpenToggles,\n closeAllOpenToggles\n ]\n );\n\n useEffect(() => {\n const current = BodyRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [BodyRef, onKeyDown]);\n}\n\nfunction useGoDownFromSearchInput() {\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n const BodyRef = useBodyRef();\n\n return useCallback(\n function goDownFromSearchInput() {\n if (isSearchMode) {\n return focusFirstVisibleEmoji(BodyRef.current);\n }\n return focusCategoryNavigation();\n },\n [BodyRef, focusCategoryNavigation, isSearchMode]\n );\n}\n\nfunction useGoUpFromBody() {\n const focusSearchInput = useFocusSearchInput();\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n\n return useCallback(\n function goUpFromEmoji() {\n if (isSearchMode) {\n return focusSearchInput();\n }\n return focusCategoryNavigation();\n },\n [focusSearchInput, isSearchMode, focusCategoryNavigation]\n );\n}\n\nfunction focusNextSkinTone(exitLeft: () => void) {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n if (!hasNextElementSibling(currentSkinTone)) {\n exitLeft();\n }\n\n focusNextElementSibling(currentSkinTone);\n}\n\nfunction focusPrevSkinTone() {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n focusPrevElementSibling(currentSkinTone);\n}\n\nfunction useOnType() {\n const appendSearch = useAppendSearch();\n const focusSearchInput = useFocusSearchInput();\n const searchDisabled = useSearchDisabledConfig();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n return function onType(event: KeyboardEvent) {\n const { key } = event;\n\n if (hasModifier(event) || searchDisabled) {\n return;\n }\n\n if (key.match(/(^[a-zA-Z0-9]$){1}/)) {\n event.preventDefault();\n closeAllOpenToggles();\n focusSearchInput();\n appendSearch(key);\n }\n };\n}\n\nfunction hasModifier(event: KeyboardEvent): boolean {\n const { metaKey, ctrlKey, altKey } = event;\n\n return metaKey || ctrlKey || altKey;\n}\n","import { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified, emojiVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n emojiVariations(emoji).forEach((variation) => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\n\n preloadedEmojs.add(unified);\n}\n\nexport const preloadedEmojs: Set<string> = new Set();\n\nfunction preloadImage(url: string): void {\n const image = new Image();\n image.src = url;\n}\n","import { useEffect } from 'react';\n\nimport { buttonFromTarget, emojiFromElement } from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useEmojiStyleConfig, useGetEmojiUrlConfig } from '../config/useConfig';\nimport { emojiHasVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nimport { preloadEmoji } from './preloadEmoji';\n\nexport function useOnFocus() {\n const BodyRef = useBodyRef();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEffect(() => {\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('focusin', onFocus);\n\n return () => {\n bodyRef?.removeEventListener('focusin', onFocus);\n };\n\n function onFocus(event: FocusEvent) {\n const button = buttonFromTarget(event.target as HTMLElement);\n\n if (!button) {\n return;\n }\n\n const [emoji] = emojiFromElement(button);\n\n if (!emoji) {\n return;\n }\n\n if (emojiHasVariations(emoji)) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyle);\n }\n }\n }, [BodyRef, emojiStyle, getEmojiUrl]);\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useClassNameConfig,\n useStyleConfig,\n useThemeConfig\n} from '../../config/useConfig';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { useOnFocus } from '../../hooks/useOnFocus';\nimport { Theme } from '../../types/exposedTypes';\nimport { usePickerMainRef } from '../context/ElementRefContext';\nimport { PickerContextProvider } from '../context/PickerContext';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport default function PickerMain({ children }: Props) {\n return (\n <PickerContextProvider>\n <PickerRootElement>{children}</PickerRootElement>\n </PickerContextProvider>\n );\n}\n\ntype RootProps = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n children: React.ReactNode;\n}>;\n\nfunction PickerRootElement({ children }: RootProps) {\n const theme = useThemeConfig();\n const searchModeActive = useIsSearchMode();\n const PickerMainRef = usePickerMainRef();\n const className = useClassNameConfig();\n const style = useStyleConfig();\n\n useKeyboardNavigation();\n useOnFocus();\n\n return (\n <aside\n className={cx(\n styles.main,\n {\n [ClassNames.searchActive]: searchModeActive,\n [ClassNames.darkTheme]: theme === Theme.DARK,\n [ClassNames.autoTheme]: theme === Theme.AUTO\n },\n className\n )}\n ref={PickerMainRef}\n style={style}\n >\n {children}\n </aside>\n );\n}\n\nconst styles = stylesheet.create({\n main: {\n '.': ['epr-main', ClassNames.emojiPicker],\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: 'var(--epr-picker-border-radius)',\n borderColor: 'var(--epr-picker-border-color)'\n }\n});\n","import * as React from 'react';\n\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\n\nimport './EmojiPickerReact.css';\nimport { PickerProps } from './index';\n\nfunction EmojiPicker(props: PickerProps) {\n return (\n <ElementRefContextProvider>\n <PickerConfigProvider {...props}>\n <PickerMain>\n <Header />\n <Body />\n <Preview />\n </PickerMain>\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n\n// eslint-disable-next-line complexity\nexport default React.memo(EmojiPicker, (prev, next) => {\n const prevCustomEmojis = prev.customEmojis ?? [];\n const nextCustomEmojis = next.customEmojis ?? [];\n return (\n prev.emojiVersion === next.emojiVersion &&\n prev.searchPlaceHolder === next.searchPlaceHolder &&\n prev.searchPlaceholder === next.searchPlaceholder &&\n prev.defaultSkinTone === next.defaultSkinTone &&\n prev.skinTonesDisabled === next.skinTonesDisabled &&\n prev.autoFocusSearch === next.autoFocusSearch &&\n prev.emojiStyle === next.emojiStyle &&\n prev.theme === next.theme &&\n prev.suggestedEmojisMode === next.suggestedEmojisMode &&\n prev.lazyLoadEmojis === next.lazyLoadEmojis &&\n prev.className === next.className &&\n prev.height === next.height &&\n prev.width === next.width &&\n prev.style === next.style &&\n prev.searchDisabled === next.searchDisabled &&\n prev.skinTonePickerLocation === next.skinTonePickerLocation &&\n prevCustomEmojis.length === nextCustomEmojis.length\n );\n});\n","import * as React from 'react';\n\nexport default class ErrorBoundary extends React.Component<\n { children: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: { children: React.ReactNode }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: any) {\n // eslint-disable-next-line no-console\n console.error('Emoji Picker React failed to render:', error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}\n","import * as React from 'react';\n\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { GetEmojiUrl } from './BaseEmojiProps';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\nexport function ExportedEmoji({\n unified,\n size = 32,\n emojiStyle = EmojiStyle.APPLE,\n lazyLoad = false,\n getEmojiUrl,\n emojiUrl\n}: {\n unified: string;\n emojiStyle?: EmojiStyle;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n emojiUrl?: string;\n}) {\n if (!unified && !emojiUrl && !getEmojiUrl) {\n return null;\n }\n\n return (\n <ViewOnlyEmoji\n unified={unified}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={emojiUrl ? () => emojiUrl : getEmojiUrl}\n />\n );\n}\n","import * as React from 'react';\n\nimport EmojiPickerReact from './EmojiPickerReact';\nimport ErrorBoundary from './components/ErrorBoundary';\nimport { PickerConfig } from './config/config';\nimport {\n MutableConfigContext,\n useDefineMutableConfig\n} from './config/mutableConfig';\n\nexport { ExportedEmoji as Emoji } from './components/emoji/ExportedEmoji';\n\nexport {\n EmojiStyle,\n SkinTones,\n Theme,\n Categories,\n EmojiClickData,\n SuggestionMode,\n SkinTonePickerLocation\n} from './types/exposedTypes';\n\nexport interface PickerProps extends PickerConfig {}\n\nexport default function EmojiPicker(props: PickerProps) {\n const MutableConfigRef = useDefineMutableConfig({\n onEmojiClick: props.onEmojiClick\n });\n\n return (\n <ErrorBoundary>\n <MutableConfigContext.Provider value={MutableConfigRef}>\n <EmojiPickerReact {...props} />\n </MutableConfigContext.Provider>\n </ErrorBoundary>\n );\n}\n"],"names":["ClassNames","asSelectors","classNames","map","c","join","stylesheet","createSheet","focusElement","element","requestAnimationFrame","focus","focusPrevElementSibling","prev","previousElementSibling","focusNextElementSibling","next","nextElementSibling","focusFirstElementChild","first","firstElementChild","ElementRefContextProvider","children","PickerMainRef","React","AnchoredEmojiRef","BodyRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ElementRefContext","Provider","value","useElementRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","current","useBodyRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","categoriesOrdered","SUGGESTED","CUSTOM","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","name","category","configByCategory","baseCategoriesConfig","modifiers","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","suggestionMode","RECENT","base","length","getBaseConfigByCategory","modifier","Object","assign","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","emojiStyle","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","NEUTRAL","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","entries","reduce","acc","key","skinTonesMapped","mapped","skinTone","EmojiProperties","alphaNumericEmojiIndex","setTimeout","allEmojis","searchIndex","emoji","indexEmoji","joinedNameString","emojiNames","flat","toLowerCase","replace","split","forEach","char","emojiUnified","addedIn","parseFloat","added_in","emojiName","unifiedWithoutSkinTone","unified","splat","splice","emojiHasVariations","emojiVariationUnified","emojisByCategory","emojis","emojiUrlByUnified","emojiVariations","variations","find","variation","includes","emojiByUnified","allEmojisByUnified","withoutSkinTone","values","setCustomEmojis","customEmojis","emojiData","customToRegularEmoji","push","names","id","imgUrl","Emoji","activeVariationFromUnified","suspectedSkinTone","KNOWN_FAILING_EMOJIS","DEFAULT_SEARCH_PLACEHOLDER","SEARCH_RESULTS_NO_RESULTS_FOUND","SEARCH_RESULTS_SUFFIX","SEARCH_RESULTS_ONE_RESULT_FOUND","SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND","mergeConfig","userConfig","basePickerConfig","previewConfig","config","categories","suggestedEmojisMode","skinTonePickerLocation","searchDisabled","PREVIEW","autoFocusSearch","className","defaultSkinTone","emojiVersion","getEmojiUrl","height","lazyLoadEmojis","basePreviewConfig","searchPlaceHolder","searchPlaceholder","SEARCH","skinTonesDisabled","style","FREQUENT","theme","unicodeToHide","Set","width","defaultEmoji","defaultCaption","showPreview","ConfigContext","PickerConfigProvider","mergedConfig","useSetConfig","setMergedConfig","usePickerConfig","MutableConfigContext","createContext","useMutableConfig","mutableConfig","useContext","useDefineMutableConfig","MutableConfigRef","useRef","onEmojiClick","emptyFunc","useEffect","useSearchPlaceHolderConfig","p","useDefaultSkinToneConfig","useSkinTonesDisabledConfig","useEmojiStyleConfig","useAutoFocusSearchConfig","useCategoriesConfig","useCustomEmojisConfig","useOnEmojiClickConfig","usePreviewConfig","useThemeConfig","useSuggestedEmojisModeConfig","useLazyLoadEmojisConfig","useClassNameConfig","useStyleConfig","getDimension","useEmojiVersionConfig","useSearchDisabledConfig","useSkinTonePickerLocationConfig","useUnicodeToHide","useGetEmojiUrlConfig","dimensionConfig","useSearchResultsConfig","searchResultsCount","hasResults","isPlural","toString","useDebouncedState","initialValue","delay","useState","state","setState","timer","debouncedSetState","Promise","resolve","clearTimeout","window","useIsUnicodeHidden","has","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useMemo","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isUnicodeHidden","isEmojiDisallowed","Boolean","supportedLevel","useMarkInitialLoad","dispatch","PickerContextProvider","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","emojiVariationPickerState","isPastInitialLoad","setIsPastInitialLoad","PickerContext","undefined","useFilterRef","useDisallowClickRef","useDisallowMouseRef","useSearchTermState","useActiveSkinToneState","useEmojisThatFailedToLoadState","useIsPastInitialLoad","useEmojiVariationPickerState","useSkinToneFanOpenState","useUpdateSuggested","suggestedUpdated","setsuggestedUpdate","updateSuggested","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","elementCountInRow","parent","parentWidth","getBoundingClientRect","elementWidth","Math","floor","elementIndexInRow","elementLeft","left","parentLeft","rowNumber","elementHeight","elementTop","top","parentTop","round","hasNextRow","parentHeight","getRowElements","elements","row","elementsInRow","lastRow","firstElementIndex","lastElementIndex","slice","getNextRowElements","allElements","currentRow","nextRow","getElementInRow","indexInRow","rowElements","getElementInNextRow","index","nextRowElements","getElementInPrevRow","prevRowElements","firstVisibleElementInContainer","parentBottom","bottom","visibleElements","elementBottom","hasNextElementSibling","EmojiButtonSelector","VisibleEmojiSelector","visible","hidden","buttonFromTarget","emojiElement","closest","emojiFromElement","originalUnified","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","matches","parentElement","clientHeight","emojiTrueOffsetTop","button","closestCategory","labelHeight","categoryLabelHeight","elementOffsetTop","categoryWithoutLabel","querySelector","categoryContent","isEmojiBehindLabel","emojiDistanceFromScrollTop","queryScrollBody","root","scrollBody","closestScrollBody","scrollTop","emojiTruOffsetLeft","elementOffsetLeft","offsetTop","offsetLeft","elementDataSetKey","elementDataSet","dataset","isVisibleEmoji","classList","contains","isHidden","allVisibleEmojis","Array","from","querySelectorAll","lastVisibleEmoji","last","prevVisibleEmoji","nextVisibleEmoji","firstVisibleEmoji","nextCategory","prevCategory","closestCategoryContent","parseNativeEmoji","hex","String","fromCodePoint","parseInt","SUGGESTED_LS_KEY","getSuggested","mode","localStorage","recent","JSON","parse","getItem","sort","a","b","count","setSuggested","existing","u","nextList","concat","filter","i","original","min","setItem","stringify","isCustomCategory","isCustomEmoji","useCloseAllOpenToggles","variationPicker","setVariationPicker","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useCallback","useHasOpenToggles","hasOpenToggles","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","useMouseDownHandlers","mouseDownTimerRef","activeEmojiStyle","onClick","event","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","onMouseUp","getImageUrl","imageUrl","isCustom","useOnScroll","onScroll","scrollTo","$eprBody","scrollBy","by","useScrollTo","scrollEmojiAboveLabel","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","statusSearchResults","getStatusSearchResults","onChange","inputValue","nextValue","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","isEmojiFilteredBySearchTerm","dict","longestMatchingKey","keys","trim","filterState","useIsEmojiHidden","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","filteredOut","Button","props","type","cx","ClickableEmojiButton","hiddenOnSearch","showVariations","hasVariations","EmojiImg","lazyLoad","onError","src","alt","external","loading","NativeEmoji","ViewOnlyEmoji","size","setEmojisThatFailedToLoad","fontSize","emojiToRender","NATIVE","add","ClickableEmoji","EmojiCategory","categoryConfig","categoryName","label","Suggested","suggestedEmojisModeConfig","suggested","suggestedItem","EmojiList","renderdCategoriesCountRef","styles","emojiList","RenderCategory","isEmojiHidden","emojisToPush","hiddenCounter","isDisallowed","create","listStyle","margin","padding","focusFirstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","focusNextVisibleEmoji","focusPrevVisibleEmoji","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","countInRow","prevVisibleCategory","nextVisibleCategory","itemInNextRow","Direction","EmojiVariationPicker","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","ref","Down","clientWidth","direction","Up","emojiOffsetTop","buttonHeight","Body","body","flex","overflowY","overflowX","position","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","e","relatedTarget","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","FlexDirection","Flex","ROW","Space","Absolute","Relative","ITEM_SIZE","SkinTonePickerMenu","right","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","isOpen","setIsOpen","setActiveSkinTone","fullWidth","expandedSize","vertical","open","flexBasis","skinToneVariation","active","transform","tabIndex","Preview","isSkinToneInPreview","PreviewBody","previewEmoji","variationPickerEmoji","show","PreviewContent","defaultText","categoryNameFromDom","$category","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","visibleCategories","Map","observer","IntersectionObserver","entry","set","intersectionRatio","ratios","lastCategory","ratio","threshold","el","observe","useIsSearchMode","useScrollCategoryIntoView","scrollCategoryIntoView","useShouldHideCustomEmojis","customCategoryConfig","CategoryNavigation","activeCategory","isSearchMode","categoriesConfig","hideCustomCategory","role","isActiveCategory","SCOPE","emojiPicker","EMOJI_BUTTON","CATEGORY","CssSearch","q","genQuery","SearchContainer","isSkinToneInSearch","overlay","Search","zIndex","inc","setInc","placeholder","autoFocus","input","onFocus","title","Header","getActiveElement","document","activeElement","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useBodyKeyboardEvents","onKeyDown","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","ArrowRight","ArrowDown","Enter","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","goUpFromBody","useGoUpFromBody","focusCategoryNavigation","goUpFromEmoji","exitLeft","currentSkinTone","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmoji","preloadedEmojs","emojiUrl","preloadImage","url","image","Image","useOnFocus","PickerMain","PickerRootElement","searchModeActive","main","searchActive","darkTheme","autoTheme","AUTO","display","flexDirection","borderWidth","borderStyle","borderRadius","borderColor","EmojiPicker","prevCustomEmojis","nextCustomEmojis","ErrorBoundary","hasError","getDerivedStateFromError","componentDidCatch","error","errorInfo","console","render","ExportedEmoji","EmojiPickerReact"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"emoji-picker-react.esm.js","sources":["../src/DomUtils/classNames.ts","../src/Stylesheet/stylesheet.ts","../src/DomUtils/focusElement.ts","../src/components/context/ElementRefContext.tsx","../src/types/exposedTypes.ts","../src/config/categoryConfig.ts","../src/config/cdnUrls.ts","../src/data/skinToneVariations.ts","../src/dataUtils/DataTypes.ts","../src/dataUtils/alphaNumericEmojiIndex.ts","../src/dataUtils/emojiSelectors.ts","../src/config/config.ts","../src/components/context/PickerConfigContext.tsx","../src/config/mutableConfig.ts","../src/config/useConfig.ts","../src/hooks/useDebouncedState.ts","../src/hooks/useHideEmojisByUniocode.ts","../src/hooks/useDisallowedEmojis.ts","../src/hooks/useInitialLoad.ts","../src/components/context/PickerContext.tsx","../src/hooks/useDisallowMouseMove.ts","../src/DomUtils/elementPositionInRow.ts","../src/DomUtils/selectors.ts","../src/dataUtils/parseNativeEmoji.ts","../src/dataUtils/suggested.ts","../src/typeRefinements/typeRefinements.ts","../src/hooks/useCloseAllOpenToggles.ts","../src/hooks/useSetVariationPicker.ts","../src/hooks/useMouseDownHandlers.ts","../src/hooks/useOnScroll.ts","../src/DomUtils/scrollTo.ts","../src/hooks/useFocus.ts","../src/hooks/useFilter.ts","../src/hooks/useIsEmojiHidden.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/atoms/Button.tsx","../src/components/emoji/ClickableEmojiButton.tsx","../src/components/emoji/EmojiImg.tsx","../src/components/emoji/NativeEmoji.tsx","../src/components/emoji/ViewOnlyEmoji.tsx","../src/components/emoji/Emoji.tsx","../src/components/body/EmojiCategory.tsx","../src/components/body/Suggested.tsx","../src/components/body/EmojiList.tsx","../src/DomUtils/keyboardNavigation.ts","../src/components/body/EmojiVariationPicker.tsx","../src/components/body/Body.tsx","../src/hooks/useEmojiPreviewEvents.ts","../src/hooks/useShouldShowSkinTonePicker.ts","../src/components/Layout/Flex.tsx","../src/components/Layout/Space.tsx","../src/components/Layout/Absolute.tsx","../src/components/Layout/Relative.tsx","../src/components/header/SkinTonePicker.tsx","../src/components/footer/Preview.tsx","../src/DomUtils/categoryNameFromDom.ts","../src/hooks/useActiveCategoryScrollDetection.ts","../src/hooks/useIsSearchMode.ts","../src/hooks/useScrollCategoryIntoView.ts","../src/hooks/useShouldHideCustomEmojis.ts","../src/components/navigation/svg/CategoryNav.svg","../src/components/navigation/CategoryNavigation.tsx","../src/components/header/CssSearch.tsx","../src/components/header/Search.tsx","../src/components/header/Header.tsx","../src/DomUtils/getActiveElement.ts","../src/hooks/useKeyboardNavigation.ts","../src/hooks/preloadEmoji.ts","../src/hooks/useOnFocus.ts","../src/components/main/PickerMain.tsx","../src/EmojiPickerReact.tsx","../src/components/ErrorBoundary.tsx","../src/components/emoji/ExportedEmoji.tsx","../src/index.tsx"],"sourcesContent":["export enum ClassNames {\n hiddenOnSearch = 'epr-hidden-on-search',\n searchActive = 'epr-search-active',\n hidden = 'epr-hidden',\n visible = 'epr-visible',\n active = 'epr-active',\n emoji = 'epr-emoji',\n category = 'epr-emoji-category',\n label = 'epr-emoji-category-label',\n categoryContent = 'epr-emoji-category-content',\n emojiHasVariations = 'epr-emoji-has-variations',\n scrollBody = 'epr-body',\n emojiList = 'epr-emoji-list',\n external = '__EmojiPicker__',\n emojiPicker = 'EmojiPickerReact',\n open = 'epr-open',\n vertical = 'epr-vertical',\n horizontal = 'epr-horizontal',\n variationPicker = 'epr-emoji-variation-picker',\n darkTheme = 'epr-dark-theme',\n autoTheme = 'epr-auto-theme'\n}\n\nexport function asSelectors(...classNames: ClassNames[]): string {\n return classNames.map(c => `.${c}`).join('');\n}\n","import { createSheet } from 'flairup';\n\nimport { ClassNames } from '../DomUtils/classNames';\n\nexport const stylesheet = createSheet('epr');\n\nexport const commonStyles = stylesheet.create({\n hidden: {\n '.': ClassNames.hidden,\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden'\n },\n hiddenOnSearch: {\n display: 'none',\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden'\n }\n});\n","import { NullableElement } from './selectors';\n\nexport function focusElement(element: NullableElement) {\n if (!element) {\n return;\n }\n\n requestAnimationFrame(() => {\n element.focus();\n });\n}\n\nexport function focusPrevElementSibling(element: NullableElement) {\n if (!element) return;\n\n const prev = element.previousElementSibling as HTMLElement;\n\n focusElement(prev);\n}\n\nexport function focusNextElementSibling(element: NullableElement) {\n if (!element) return;\n\n const next = element.nextElementSibling as HTMLElement;\n\n focusElement(next);\n}\n\nexport function focusFirstElementChild(element: NullableElement) {\n if (!element) return;\n\n const first = element.firstElementChild as HTMLElement;\n\n focusElement(first);\n}\n","import * as React from 'react';\n\nimport { focusElement } from '../../DomUtils/focusElement';\nimport { NullableElement } from '../../DomUtils/selectors';\n\nexport function ElementRefContextProvider({\n children\n}: {\n children: React.ReactNode;\n}) {\n const PickerMainRef = React.useRef<HTMLElement>(null);\n const AnchoredEmojiRef = React.useRef<HTMLElement>(null);\n const BodyRef = React.useRef<HTMLDivElement>(null);\n const SearchInputRef = React.useRef<HTMLInputElement>(null);\n const SkinTonePickerRef = React.useRef<HTMLDivElement>(null);\n const CategoryNavigationRef = React.useRef<HTMLDivElement>(null);\n const VariationPickerRef = React.useRef<HTMLDivElement>(null);\n\n return (\n <ElementRefContext.Provider\n value={{\n AnchoredEmojiRef,\n BodyRef,\n CategoryNavigationRef,\n PickerMainRef,\n SearchInputRef,\n SkinTonePickerRef,\n VariationPickerRef\n }}\n >\n {children}\n </ElementRefContext.Provider>\n );\n}\n\nexport type ElementRef<\n E extends HTMLElement = HTMLElement\n> = React.MutableRefObject<E | null>;\n\ntype ElementRefs = {\n PickerMainRef: ElementRef;\n AnchoredEmojiRef: ElementRef;\n SkinTonePickerRef: ElementRef<HTMLDivElement>;\n SearchInputRef: ElementRef<HTMLInputElement>;\n BodyRef: ElementRef<HTMLDivElement>;\n CategoryNavigationRef: ElementRef<HTMLDivElement>;\n VariationPickerRef: ElementRef<HTMLDivElement>;\n};\n\nconst ElementRefContext = React.createContext<ElementRefs>({\n AnchoredEmojiRef: React.createRef(),\n BodyRef: React.createRef(),\n CategoryNavigationRef: React.createRef(),\n PickerMainRef: React.createRef(),\n SearchInputRef: React.createRef(),\n SkinTonePickerRef: React.createRef(),\n VariationPickerRef: React.createRef()\n});\n\nfunction useElementRef() {\n return React.useContext(ElementRefContext);\n}\n\nexport function usePickerMainRef() {\n return useElementRef()['PickerMainRef'];\n}\n\nexport function useAnchoredEmojiRef() {\n return useElementRef()['AnchoredEmojiRef'];\n}\n\nexport function useSetAnchoredEmojiRef(): (target: NullableElement) => void {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return (target: NullableElement) => {\n if (target === null && AnchoredEmojiRef.current !== null) {\n focusElement(AnchoredEmojiRef.current);\n }\n\n AnchoredEmojiRef.current = target;\n };\n}\n\nexport function useBodyRef() {\n return useElementRef()['BodyRef'];\n}\n\nexport function useSearchInputRef() {\n return useElementRef()['SearchInputRef'];\n}\n\nexport function useSkinTonePickerRef() {\n return useElementRef()['SkinTonePickerRef'];\n}\n\nexport function useCategoryNavigationRef() {\n return useElementRef()['CategoryNavigationRef'];\n}\n\nexport function useVariationPickerRef() {\n return useElementRef()['VariationPickerRef'];\n}\n","export type EmojiClickData = {\n activeSkinTone: SkinTones;\n unified: string;\n unifiedWithoutSkinTone: string;\n emoji: string;\n names: string[];\n imageUrl: string;\n getImageUrl: (emojiStyle?: EmojiStyle) => string;\n isCustom: boolean;\n};\n\nexport enum SuggestionMode {\n RECENT = 'recent',\n FREQUENT = 'frequent'\n}\n\nexport enum EmojiStyle {\n NATIVE = 'native',\n APPLE = 'apple',\n TWITTER = 'twitter',\n GOOGLE = 'google',\n FACEBOOK = 'facebook'\n}\n\nexport enum Theme {\n DARK = 'dark',\n LIGHT = 'light',\n AUTO = 'auto'\n}\n\nexport enum SkinTones {\n NEUTRAL = 'neutral',\n LIGHT = '1f3fb',\n MEDIUM_LIGHT = '1f3fc',\n MEDIUM = '1f3fd',\n MEDIUM_DARK = '1f3fe',\n DARK = '1f3ff'\n}\n\nexport enum Categories {\n SUGGESTED = 'suggested',\n CUSTOM = 'custom',\n SMILEYS_PEOPLE = 'smileys_people',\n ANIMALS_NATURE = 'animals_nature',\n FOOD_DRINK = 'food_drink',\n TRAVEL_PLACES = 'travel_places',\n ACTIVITIES = 'activities',\n OBJECTS = 'objects',\n SYMBOLS = 'symbols',\n FLAGS = 'flags'\n}\n\nexport enum SkinTonePickerLocation {\n SEARCH = 'SEARCH',\n PREVIEW = 'PREVIEW'\n}\n","import { Categories, SuggestionMode } from '../types/exposedTypes';\n\nexport { Categories };\n\nconst categoriesOrdered: Categories[] = [\n Categories.SUGGESTED,\n Categories.CUSTOM,\n Categories.SMILEYS_PEOPLE,\n Categories.ANIMALS_NATURE,\n Categories.FOOD_DRINK,\n Categories.TRAVEL_PLACES,\n Categories.ACTIVITIES,\n Categories.OBJECTS,\n Categories.SYMBOLS,\n Categories.FLAGS\n];\n\nexport const SuggestedRecent: CategoryConfig = {\n name: 'Recently Used',\n category: Categories.SUGGESTED\n};\n\nexport type CustomCategoryConfig = {\n category: Categories.CUSTOM;\n name: string;\n};\n\nconst configByCategory: Record<Categories, CategoryConfig> = {\n [Categories.SUGGESTED]: {\n category: Categories.SUGGESTED,\n name: 'Frequently Used'\n },\n [Categories.CUSTOM]: {\n category: Categories.CUSTOM,\n name: 'Custom Emojis'\n },\n [Categories.SMILEYS_PEOPLE]: {\n category: Categories.SMILEYS_PEOPLE,\n name: 'Smileys & People'\n },\n [Categories.ANIMALS_NATURE]: {\n category: Categories.ANIMALS_NATURE,\n name: 'Animals & Nature'\n },\n [Categories.FOOD_DRINK]: {\n category: Categories.FOOD_DRINK,\n name: 'Food & Drink'\n },\n [Categories.TRAVEL_PLACES]: {\n category: Categories.TRAVEL_PLACES,\n name: 'Travel & Places'\n },\n [Categories.ACTIVITIES]: {\n category: Categories.ACTIVITIES,\n name: 'Activities'\n },\n [Categories.OBJECTS]: {\n category: Categories.OBJECTS,\n name: 'Objects'\n },\n [Categories.SYMBOLS]: {\n category: Categories.SYMBOLS,\n name: 'Symbols'\n },\n [Categories.FLAGS]: {\n category: Categories.FLAGS,\n name: 'Flags'\n }\n};\n\nexport function baseCategoriesConfig(\n modifiers?: Record<Categories, CategoryConfig>\n): CategoriesConfig {\n return categoriesOrdered.map(category => {\n return {\n ...configByCategory[category],\n ...(modifiers && modifiers[category] && modifiers[category])\n };\n });\n}\n\nexport function categoryFromCategoryConfig(category: CategoryConfig) {\n return category.category;\n}\n\nexport function categoryNameFromCategoryConfig(category: CategoryConfig) {\n return category.name;\n}\n\nexport type CategoriesConfig = CategoryConfig[];\n\nexport type CategoryConfig = {\n category: Categories;\n name: string;\n};\n\nexport type UserCategoryConfig = Array<Categories | CategoryConfig>;\n\nexport function mergeCategoriesConfig(\n userCategoriesConfig: UserCategoryConfig = [],\n modifiers: CategoryConfigModifiers = {}\n): CategoriesConfig {\n const extra = {} as Record<Categories, CategoryConfig>;\n\n if (modifiers.suggestionMode === SuggestionMode.RECENT) {\n extra[Categories.SUGGESTED] = SuggestedRecent;\n }\n\n const base = baseCategoriesConfig(extra);\n if (!userCategoriesConfig?.length) {\n return base;\n }\n\n return userCategoriesConfig.map(category => {\n if (typeof category === 'string') {\n return getBaseConfigByCategory(category, extra[category]);\n }\n\n return {\n ...getBaseConfigByCategory(category.category, extra[category.category]),\n ...category\n };\n });\n}\n\nfunction getBaseConfigByCategory(\n category: Categories,\n modifier: CategoryConfig = {} as CategoryConfig\n) {\n return Object.assign(configByCategory[category], modifier);\n}\n\ntype CategoryConfigModifiers = {\n suggestionMode?: SuggestionMode;\n};\n","import { EmojiStyle } from '../types/exposedTypes';\n\nconst CDN_URL_APPLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/';\nconst CDN_URL_FACEBOOK =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-facebook/img/facebook/64/';\nconst CDN_URL_TWITTER =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-twitter/img/twitter/64/';\nconst CDN_URL_GOOGLE =\n 'https://cdn.jsdelivr.net/npm/emoji-datasource-google/img/google/64/';\n\nexport function cdnUrl(emojiStyle: EmojiStyle): string {\n switch (emojiStyle) {\n case EmojiStyle.TWITTER:\n return CDN_URL_TWITTER;\n case EmojiStyle.GOOGLE:\n return CDN_URL_GOOGLE;\n case EmojiStyle.FACEBOOK:\n return CDN_URL_FACEBOOK;\n case EmojiStyle.APPLE:\n default:\n return CDN_URL_APPLE;\n }\n}\n","import { SkinTones } from '../types/exposedTypes';\n\nconst skinToneVariations = [\n SkinTones.NEUTRAL,\n SkinTones.LIGHT,\n SkinTones.MEDIUM_LIGHT,\n SkinTones.MEDIUM,\n SkinTones.MEDIUM_DARK,\n SkinTones.DARK\n];\n\nexport const skinTonesNamed = Object.entries(SkinTones).reduce(\n (acc, [key, value]) => {\n acc[value] = key;\n return acc;\n },\n {} as Record<string, string>\n);\n\nexport const skinTonesMapped: Record<\n string,\n string\n> = skinToneVariations.reduce(\n (mapped, skinTone) =>\n Object.assign(mapped, {\n [skinTone]: skinTone\n }),\n {}\n);\n\nexport default skinToneVariations;\n","import emojis from '../data/emojis';\n\nexport enum EmojiProperties {\n name = 'n',\n unified = 'u',\n variations = 'v',\n added_in = 'a',\n imgUrl = 'imgUrl'\n}\n\nexport interface DataEmoji extends WithName {\n [EmojiProperties.unified]: string;\n [EmojiProperties.variations]?: string[];\n [EmojiProperties.added_in]: string;\n [EmojiProperties.imgUrl]?: string;\n}\n\nexport type DataEmojis = DataEmoji[];\n\nexport type DataGroups = keyof typeof emojis;\n\nexport type WithName = {\n [EmojiProperties.name]: string[];\n};\n","import { DataEmoji } from './DataTypes';\nimport { allEmojis, emojiNames, emojiUnified } from './emojiSelectors';\n\nexport const alphaNumericEmojiIndex: BaseIndex = {};\n\nsetTimeout(() => {\n allEmojis.reduce((searchIndex, emoji) => {\n indexEmoji(emoji);\n return searchIndex;\n }, alphaNumericEmojiIndex as BaseIndex);\n});\n\ntype BaseIndex = Record<string, Record<string, DataEmoji>>;\n\nexport function indexEmoji(emoji: DataEmoji): void {\n const joinedNameString = emojiNames(emoji)\n .flat()\n .join('')\n .toLowerCase()\n .replace(/[^a-zA-Z\\d]/g, '')\n .split('');\n\n joinedNameString.forEach(char => {\n alphaNumericEmojiIndex[char] = alphaNumericEmojiIndex[char] ?? {};\n\n alphaNumericEmojiIndex[char][emojiUnified(emoji)] = emoji;\n });\n}\n","import { Categories } from '../config/categoryConfig';\nimport { cdnUrl } from '../config/cdnUrls';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport emojis from '../data/emojis';\nimport skinToneVariations, {\n skinTonesMapped\n} from '../data/skinToneVariations';\nimport { EmojiStyle, SkinTones } from '../types/exposedTypes';\n\nimport { DataEmoji, DataEmojis, EmojiProperties, WithName } from './DataTypes';\nimport { indexEmoji } from './alphaNumericEmojiIndex';\n\nexport function emojiNames(emoji: WithName): string[] {\n return emoji[EmojiProperties.name] ?? [];\n}\n\nexport function addedIn(emoji: DataEmoji): number {\n return parseFloat(emoji[EmojiProperties.added_in]);\n}\n\nexport function emojiName(emoji?: WithName): string {\n if (!emoji) {\n return '';\n }\n\n return emojiNames(emoji)[0];\n}\n\nexport function unifiedWithoutSkinTone(unified: string): string {\n const splat = unified.split('-');\n const [skinTone] = splat.splice(1, 1);\n\n if (skinTonesMapped[skinTone]) {\n return splat.join('-');\n }\n\n return unified;\n}\n\nexport function emojiUnified(emoji: DataEmoji, skinTone?: string): string {\n const unified = emoji[EmojiProperties.unified];\n\n if (!skinTone || !emojiHasVariations(emoji)) {\n return unified;\n }\n\n return emojiVariationUnified(emoji, skinTone) ?? unified;\n}\n\nexport function emojisByCategory(category: Categories): DataEmojis {\n // @ts-ignore\n return emojis?.[category] ?? [];\n}\n\n// WARNING: DO NOT USE DIRECTLY\nexport function emojiUrlByUnified(\n unified: string,\n emojiStyle: EmojiStyle\n): string {\n return `${cdnUrl(emojiStyle)}${unified}.png`;\n}\n\nexport function emojiVariations(emoji: DataEmoji): string[] {\n return emoji[EmojiProperties.variations] ?? [];\n}\n\nexport function emojiHasVariations(emoji: DataEmoji): boolean {\n return emojiVariations(emoji).length > 0;\n}\n\nexport function emojiVariationUnified(\n emoji: DataEmoji,\n skinTone?: string\n): string | undefined {\n return skinTone\n ? emojiVariations(emoji).find(variation => variation.includes(skinTone))\n : emojiUnified(emoji);\n}\n\nexport function emojiByUnified(unified?: string): DataEmoji | undefined {\n if (!unified) {\n return;\n }\n\n if (allEmojisByUnified[unified]) {\n return allEmojisByUnified[unified];\n }\n\n const withoutSkinTone = unifiedWithoutSkinTone(unified);\n return allEmojisByUnified[withoutSkinTone];\n}\n\nexport const allEmojis: DataEmojis = Object.values(emojis).flat();\n\nexport function setCustomEmojis(customEmojis: CustomEmoji[]): void {\n emojis[Categories.CUSTOM].length = 0;\n\n customEmojis.forEach(emoji => {\n const emojiData = customToRegularEmoji(emoji);\n\n emojis[Categories.CUSTOM].push(emojiData as never);\n\n if (allEmojisByUnified[emojiData[EmojiProperties.unified]]) {\n return;\n }\n\n allEmojis.push(emojiData);\n allEmojisByUnified[emojiData[EmojiProperties.unified]] = emojiData;\n indexEmoji(emojiData);\n });\n}\n\nfunction customToRegularEmoji(emoji: CustomEmoji): DataEmoji {\n return {\n [EmojiProperties.name]: emoji.names.map(name => name.toLowerCase()),\n [EmojiProperties.unified]: emoji.id.toLowerCase(),\n [EmojiProperties.added_in]: '0',\n [EmojiProperties.imgUrl]: emoji.imgUrl\n };\n}\n\nconst allEmojisByUnified: {\n [unified: string]: DataEmoji;\n} = {};\n\nsetTimeout(() => {\n allEmojis.reduce((allEmojis, Emoji) => {\n allEmojis[emojiUnified(Emoji)] = Emoji;\n\n if (emojiHasVariations(Emoji)) {\n emojiVariations(Emoji).forEach(variation => {\n allEmojis[variation] = Emoji;\n });\n }\n\n return allEmojis;\n }, allEmojisByUnified);\n});\n\nexport function activeVariationFromUnified(unified: string): SkinTones | null {\n const [, suspectedSkinTone] = unified.split('-') as [string, SkinTones];\n return skinToneVariations.includes(suspectedSkinTone)\n ? suspectedSkinTone\n : null;\n}\n","import * as React from 'react'\n\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n setCustomEmojis,\n emojiUrlByUnified\n} from '../dataUtils/emojiSelectors';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport {\n CategoriesConfig,\n baseCategoriesConfig,\n mergeCategoriesConfig\n} from './categoryConfig';\nimport { CustomEmoji } from './customEmojiConfig';\n\nconst KNOWN_FAILING_EMOJIS = ['2640-fe0f', '2642-fe0f', '2695-fe0f'];\n\nexport const DEFAULT_SEARCH_PLACEHOLDER = 'Search';\nexport const SEARCH_RESULTS_NO_RESULTS_FOUND = 'No results found';\nexport const SEARCH_RESULTS_SUFFIX =\n ' found. Use up and down arrow keys to navigate.';\nexport const SEARCH_RESULTS_ONE_RESULT_FOUND =\n '1 result' + SEARCH_RESULTS_SUFFIX;\nexport const SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND =\n '%n results' + SEARCH_RESULTS_SUFFIX;\n\nexport function mergeConfig(\n userConfig: PickerConfig = {}\n): PickerConfigInternal {\n const base = basePickerConfig();\n\n const previewConfig = Object.assign(\n base.previewConfig,\n userConfig.previewConfig ?? {}\n );\n const config = Object.assign(base, userConfig);\n\n const categories = mergeCategoriesConfig(userConfig.categories, {\n suggestionMode: config.suggestedEmojisMode\n });\n\n setCustomEmojis(config.customEmojis ?? []);\n\n const skinTonePickerLocation = config.searchDisabled\n ? SkinTonePickerLocation.PREVIEW\n : config.skinTonePickerLocation;\n\n return {\n ...config,\n categories,\n previewConfig,\n skinTonePickerLocation\n };\n}\n\nexport function basePickerConfig(): PickerConfigInternal {\n return {\n autoFocusSearch: true,\n categories: baseCategoriesConfig(),\n className: '',\n customEmojis: [],\n defaultSkinTone: SkinTones.NEUTRAL,\n emojiStyle: EmojiStyle.APPLE,\n emojiVersion: null,\n getEmojiUrl: emojiUrlByUnified,\n height: 450,\n lazyLoadEmojis: false,\n previewConfig: {\n ...basePreviewConfig\n },\n searchDisabled: false,\n searchPlaceHolder: DEFAULT_SEARCH_PLACEHOLDER,\n searchPlaceholder: DEFAULT_SEARCH_PLACEHOLDER,\n skinTonePickerLocation: SkinTonePickerLocation.SEARCH,\n skinTonesDisabled: false,\n style: {},\n suggestedEmojisMode: SuggestionMode.FREQUENT,\n theme: Theme.LIGHT,\n unicodeToHide: new Set<string>(KNOWN_FAILING_EMOJIS),\n width: 350\n };\n}\n\nexport type PickerConfigInternal = {\n emojiVersion: string | null;\n searchPlaceHolder: string;\n searchPlaceholder: string;\n defaultSkinTone: SkinTones;\n skinTonesDisabled: boolean;\n autoFocusSearch: boolean;\n emojiStyle: EmojiStyle;\n categories: CategoriesConfig;\n theme: Theme;\n suggestedEmojisMode: SuggestionMode;\n lazyLoadEmojis: boolean;\n previewConfig: PreviewConfig;\n className: string;\n height: PickerDimensions;\n width: PickerDimensions;\n style: React.CSSProperties;\n getEmojiUrl: GetEmojiUrl;\n searchDisabled: boolean;\n skinTonePickerLocation: SkinTonePickerLocation;\n unicodeToHide: Set<string>;\n customEmojis: CustomEmoji[];\n};\n\nexport type PreviewConfig = {\n defaultEmoji: string;\n defaultCaption: string;\n showPreview: boolean;\n};\n\nconst basePreviewConfig: PreviewConfig = {\n defaultEmoji: '1f60a',\n defaultCaption: \"What's your mood?\",\n showPreview: true\n};\n\ntype ConfigExternal = {\n previewConfig: Partial<PreviewConfig>;\n onEmojiClick: (emoji: EmojiClickData, event: MouseEvent) => void;\n} & Omit<PickerConfigInternal, 'previewConfig' | 'unicodeToHide'>;\n\nexport type PickerConfig = Partial<ConfigExternal>;\n\nexport type PickerDimensions = string | number;\n","import * as React from 'react';\n\nimport {\n basePickerConfig,\n mergeConfig,\n PickerConfig,\n PickerConfigInternal\n} from '../../config/config';\n\ntype Props = PickerConfig &\n Readonly<{\n children: React.ReactNode;\n }>;\n\nconst ConfigContext = React.createContext<PickerConfigInternal>(\n basePickerConfig()\n);\n\nexport function PickerConfigProvider({ children, ...config }: Props) {\n const mergedConfig = useSetConfig(config);\n\n return (\n <ConfigContext.Provider value={mergedConfig}>\n {children}\n </ConfigContext.Provider>\n );\n}\n\nexport function useSetConfig(config: PickerConfig) {\n const [mergedConfig, setMergedConfig] = React.useState(() =>\n mergeConfig(config)\n );\n\n React.useEffect(() => {\n if (config.customEmojis?.length !== mergedConfig.customEmojis?.length) {\n setMergedConfig(mergeConfig(config));\n }\n // not gonna...\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.customEmojis?.length]);\n\n return mergedConfig;\n}\n\nexport function usePickerConfig() {\n return React.useContext(ConfigContext);\n}\n","import React from 'react';\n\nimport { EmojiClickData } from '../types/exposedTypes';\n\nexport type MutableConfig = {\n onEmojiClick?: (emoji: EmojiClickData, event: MouseEvent) => void;\n};\n\nexport const MutableConfigContext = React.createContext<\n React.MutableRefObject<MutableConfig>\n>({} as React.MutableRefObject<MutableConfig>);\n\nexport function useMutableConfig(): React.MutableRefObject<MutableConfig> {\n const mutableConfig = React.useContext(MutableConfigContext);\n return mutableConfig;\n}\n\nexport function useDefineMutableConfig(\n config: MutableConfig\n): React.MutableRefObject<MutableConfig> {\n const MutableConfigRef = React.useRef<MutableConfig>({\n onEmojiClick: config.onEmojiClick || emptyFunc\n });\n\n React.useEffect(() => {\n MutableConfigRef.current.onEmojiClick = config.onEmojiClick || emptyFunc;\n }, [config.onEmojiClick]);\n\n return MutableConfigRef;\n}\n\nfunction emptyFunc() {}\n","import * as React from 'react';\n\nimport { usePickerConfig } from '../components/context/PickerConfigContext';\nimport {\n EmojiClickData,\n EmojiStyle,\n SkinTonePickerLocation,\n SkinTones,\n SuggestionMode,\n Theme\n} from '../types/exposedTypes';\n\nimport { CategoriesConfig } from './categoryConfig';\nimport {\n DEFAULT_SEARCH_PLACEHOLDER,\n SEARCH_RESULTS_NO_RESULTS_FOUND,\n SEARCH_RESULTS_ONE_RESULT_FOUND,\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND,\n PickerDimensions,\n PreviewConfig\n} from './config';\nimport { CustomEmoji } from './customEmojiConfig';\nimport { useMutableConfig } from './mutableConfig';\n\nexport function useSearchPlaceHolderConfig(): string {\n const { searchPlaceHolder, searchPlaceholder } = usePickerConfig();\n return (\n [searchPlaceHolder, searchPlaceholder].find(\n p => p !== DEFAULT_SEARCH_PLACEHOLDER\n ) ?? DEFAULT_SEARCH_PLACEHOLDER\n );\n}\n\nexport function useDefaultSkinToneConfig(): SkinTones {\n const { defaultSkinTone } = usePickerConfig();\n return defaultSkinTone;\n}\n\nexport function useSkinTonesDisabledConfig(): boolean {\n const { skinTonesDisabled } = usePickerConfig();\n return skinTonesDisabled;\n}\n\nexport function useEmojiStyleConfig(): EmojiStyle {\n const { emojiStyle } = usePickerConfig();\n return emojiStyle;\n}\n\nexport function useAutoFocusSearchConfig(): boolean {\n const { autoFocusSearch } = usePickerConfig();\n return autoFocusSearch;\n}\n\nexport function useCategoriesConfig(): CategoriesConfig {\n const { categories } = usePickerConfig();\n return categories;\n}\n\nexport function useCustomEmojisConfig(): CustomEmoji[] {\n const { customEmojis } = usePickerConfig();\n return customEmojis;\n}\n\nexport function useOnEmojiClickConfig(): (\n emoji: EmojiClickData,\n event: MouseEvent\n) => void {\n const { current } = useMutableConfig();\n return current.onEmojiClick || (() => {});\n}\n\nexport function usePreviewConfig(): PreviewConfig {\n const { previewConfig } = usePickerConfig();\n return previewConfig;\n}\n\nexport function useThemeConfig(): Theme {\n const { theme } = usePickerConfig();\n\n return theme;\n}\n\nexport function useSuggestedEmojisModeConfig(): SuggestionMode {\n const { suggestedEmojisMode } = usePickerConfig();\n return suggestedEmojisMode;\n}\n\nexport function useLazyLoadEmojisConfig(): boolean {\n const { lazyLoadEmojis } = usePickerConfig();\n return lazyLoadEmojis;\n}\n\nexport function useClassNameConfig(): string {\n const { className } = usePickerConfig();\n return className;\n}\n\nexport function useStyleConfig(): React.CSSProperties {\n const { height, width, style } = usePickerConfig();\n return { height: getDimension(height), width: getDimension(width), ...style };\n}\n\nexport function useEmojiVersionConfig(): string | null {\n const { emojiVersion } = usePickerConfig();\n return emojiVersion;\n}\n\nexport function useSearchDisabledConfig(): boolean {\n const { searchDisabled } = usePickerConfig();\n return searchDisabled;\n}\n\nexport function useSkinTonePickerLocationConfig(): SkinTonePickerLocation {\n const { skinTonePickerLocation } = usePickerConfig();\n return skinTonePickerLocation;\n}\n\nexport function useUnicodeToHide() {\n const { unicodeToHide } = usePickerConfig();\n return unicodeToHide;\n}\n\nexport function useGetEmojiUrlConfig(): (\n unified: string,\n style: EmojiStyle\n) => string {\n const { getEmojiUrl } = usePickerConfig();\n return getEmojiUrl;\n}\n\nfunction getDimension(dimensionConfig: PickerDimensions): PickerDimensions {\n return typeof dimensionConfig === 'number'\n ? `${dimensionConfig}px`\n : dimensionConfig;\n}\n\nexport function useSearchResultsConfig(searchResultsCount: number): string {\n const hasResults = searchResultsCount > 0;\n const isPlural = searchResultsCount > 1;\n\n if (hasResults) {\n return isPlural ?\n SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND.replace('%n', searchResultsCount.toString())\n : SEARCH_RESULTS_ONE_RESULT_FOUND;\n }\n\n return SEARCH_RESULTS_NO_RESULTS_FOUND;\n}\n","import { useRef, useState } from 'react';\n\nexport function useDebouncedState<T>(\n initialValue: T,\n delay: number = 0\n): [T, (value: T) => Promise<T>] {\n const [state, setState] = useState<T>(initialValue);\n const timer = useRef<number | null>(null);\n\n function debouncedSetState(value: T) {\n return new Promise<T>(resolve => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n\n timer.current = window?.setTimeout(() => {\n setState(value);\n resolve(value);\n }, delay);\n });\n }\n\n return [state, debouncedSetState];\n}\n","import { useUnicodeToHide } from \"../config/useConfig\";\n\nexport function useIsUnicodeHidden() {\n const unicodeToHide = useUnicodeToHide();\n return (emojiUnified: string) => unicodeToHide.has(emojiUnified);\n }\n","import { useRef, useMemo } from 'react';\n\nimport { useEmojiVersionConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n addedIn,\n allEmojis,\n emojiUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { useIsUnicodeHidden } from './useHideEmojisByUniocode';\n\nexport function useDisallowedEmojis() {\n const DisallowedEmojisRef = useRef<Record<string, boolean>>({});\n const emojiVersionConfig = useEmojiVersionConfig();\n\n return useMemo(() => {\n const emojiVersion = parseFloat(`${emojiVersionConfig}`);\n\n if (!emojiVersionConfig || Number.isNaN(emojiVersion)) {\n return DisallowedEmojisRef.current;\n }\n\n return allEmojis.reduce((disallowedEmojis, emoji) => {\n if (addedInNewerVersion(emoji, emojiVersion)) {\n disallowedEmojis[emojiUnified(emoji)] = true;\n }\n\n return disallowedEmojis;\n }, DisallowedEmojisRef.current);\n }, [emojiVersionConfig]);\n}\n\nexport function useIsEmojiDisallowed() {\n const disallowedEmojis = useDisallowedEmojis();\n const isUnicodeHidden = useIsUnicodeHidden();\n\n return function isEmojiDisallowed(emoji: DataEmoji) {\n const unified = unifiedWithoutSkinTone(emojiUnified(emoji));\n\n return Boolean(disallowedEmojis[unified] || isUnicodeHidden(unified));\n };\n}\n\nfunction addedInNewerVersion(\n emoji: DataEmoji,\n supportedLevel: number\n): boolean {\n return addedIn(emoji) > supportedLevel;\n}\n","import { useEffect } from 'react';\nimport * as React from 'react';\n\nexport function useMarkInitialLoad(\n dispatch: React.Dispatch<React.SetStateAction<boolean>>\n) {\n useEffect(() => {\n dispatch(true);\n }, [dispatch]);\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport { useDefaultSkinToneConfig } from '../../config/useConfig';\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { alphaNumericEmojiIndex } from '../../dataUtils/alphaNumericEmojiIndex';\nimport { useDebouncedState } from '../../hooks/useDebouncedState';\nimport { useDisallowedEmojis } from '../../hooks/useDisallowedEmojis';\nimport { FilterDict } from '../../hooks/useFilter';\nimport { useMarkInitialLoad } from '../../hooks/useInitialLoad';\nimport { SkinTones } from '../../types/exposedTypes';\n\nexport function PickerContextProvider({ children }: Props) {\n const disallowedEmojis = useDisallowedEmojis();\n const defaultSkinTone = useDefaultSkinToneConfig();\n\n // Initialize the filter with the inititial dictionary\n const filterRef = React.useRef<FilterState>(alphaNumericEmojiIndex);\n const disallowClickRef = React.useRef<boolean>(false);\n const disallowMouseRef = React.useRef<boolean>(false);\n const disallowedEmojisRef = React.useRef<Record<string, boolean>>(\n disallowedEmojis\n );\n\n const suggestedUpdateState = useDebouncedState(Date.now(), 200);\n const searchTerm = useDebouncedState('', 100);\n const skinToneFanOpenState = useState<boolean>(false);\n const activeSkinTone = useState<SkinTones>(defaultSkinTone);\n const activeCategoryState = useState<ActiveCategoryState>(null);\n const emojisThatFailedToLoadState = useState<Set<string>>(new Set());\n const emojiVariationPickerState = useState<DataEmoji | null>(null);\n const [isPastInitialLoad, setIsPastInitialLoad] = useState(false);\n\n useMarkInitialLoad(setIsPastInitialLoad);\n\n return (\n <PickerContext.Provider\n value={{\n activeCategoryState,\n activeSkinTone,\n disallowClickRef,\n disallowMouseRef,\n disallowedEmojisRef,\n emojiVariationPickerState,\n emojisThatFailedToLoadState,\n filterRef,\n isPastInitialLoad,\n searchTerm,\n skinToneFanOpenState,\n suggestedUpdateState\n }}\n >\n {children}\n </PickerContext.Provider>\n );\n}\n\ntype ReactState<T> = [T, React.Dispatch<React.SetStateAction<T>>];\n\nconst PickerContext = React.createContext<{\n searchTerm: [string, (term: string) => Promise<string>];\n suggestedUpdateState: [number, (term: number) => void];\n activeCategoryState: ReactState<ActiveCategoryState>;\n activeSkinTone: ReactState<SkinTones>;\n emojisThatFailedToLoadState: ReactState<Set<string>>;\n isPastInitialLoad: boolean;\n emojiVariationPickerState: ReactState<DataEmoji | null>;\n skinToneFanOpenState: ReactState<boolean>;\n filterRef: React.MutableRefObject<FilterState>;\n disallowClickRef: React.MutableRefObject<boolean>;\n disallowMouseRef: React.MutableRefObject<boolean>;\n disallowedEmojisRef: React.MutableRefObject<Record<string, boolean>>;\n}>({\n activeCategoryState: [null, () => {}],\n activeSkinTone: [SkinTones.NEUTRAL, () => {}],\n disallowClickRef: { current: false },\n disallowMouseRef: { current: false },\n disallowedEmojisRef: { current: {} },\n emojiVariationPickerState: [null, () => {}],\n emojisThatFailedToLoadState: [new Set(), () => {}],\n filterRef: { current: {} },\n isPastInitialLoad: true,\n searchTerm: ['', () => new Promise<string>(() => undefined)],\n skinToneFanOpenState: [false, () => {}],\n suggestedUpdateState: [Date.now(), () => {}]\n});\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport function useFilterRef() {\n const { filterRef } = React.useContext(PickerContext);\n return filterRef;\n}\n\nexport function useDisallowClickRef() {\n const { disallowClickRef } = React.useContext(PickerContext);\n return disallowClickRef;\n}\n\nexport function useDisallowMouseRef() {\n const { disallowMouseRef } = React.useContext(PickerContext);\n return disallowMouseRef;\n}\n\nexport function useSearchTermState() {\n const { searchTerm } = React.useContext(PickerContext);\n return searchTerm;\n}\n\nexport function useActiveSkinToneState(): [\n SkinTones,\n (skinTone: SkinTones) => void\n] {\n const { activeSkinTone } = React.useContext(PickerContext);\n return activeSkinTone;\n}\n\nexport function useEmojisThatFailedToLoadState() {\n const { emojisThatFailedToLoadState } = React.useContext(PickerContext);\n return emojisThatFailedToLoadState;\n}\n\nexport function useIsPastInitialLoad(): boolean {\n const { isPastInitialLoad } = React.useContext(PickerContext);\n return isPastInitialLoad;\n}\n\nexport function useEmojiVariationPickerState() {\n const { emojiVariationPickerState } = React.useContext(PickerContext);\n return emojiVariationPickerState;\n}\n\nexport function useSkinToneFanOpenState() {\n const { skinToneFanOpenState } = React.useContext(PickerContext);\n return skinToneFanOpenState;\n}\n\nexport function useDisallowedEmojisRef() {\n const { disallowedEmojisRef } = React.useContext(PickerContext);\n return disallowedEmojisRef;\n}\n\nexport function useUpdateSuggested(): [number, () => void] {\n const { suggestedUpdateState } = React.useContext(PickerContext);\n\n const [suggestedUpdated, setsuggestedUpdate] = suggestedUpdateState;\n return [\n suggestedUpdated,\n function updateSuggested() {\n setsuggestedUpdate(Date.now());\n }\n ];\n}\n\nexport type FilterState = Record<string, FilterDict>;\n\ntype ActiveCategoryState = null | string;\n","import { useEffect } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useDisallowMouseRef } from '../components/context/PickerContext';\n\nexport function useDisallowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function disallowMouseMove() {\n DisallowMouseRef.current = true;\n };\n}\n\nexport function useAllowMouseMove() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function allowMouseMove() {\n DisallowMouseRef.current = false;\n };\n}\n\nexport function useIsMouseDisallowed() {\n const DisallowMouseRef = useDisallowMouseRef();\n return function isMouseDisallowed() {\n return DisallowMouseRef.current;\n };\n}\n\nexport function useOnMouseMove() {\n const BodyRef = useBodyRef();\n const allowMouseMove = useAllowMouseMove();\n const isMouseDisallowed = useIsMouseDisallowed();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n bodyRef?.addEventListener('mousemove', onMouseMove, {\n passive: true\n });\n\n function onMouseMove() {\n if (isMouseDisallowed()) {\n allowMouseMove();\n }\n }\n return () => {\n bodyRef?.removeEventListener('mousemove', onMouseMove);\n };\n }, [BodyRef, allowMouseMove, isMouseDisallowed]);\n}\n","import { NullableElement } from './selectors';\n\nexport function elementCountInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const parentWidth = parent.getBoundingClientRect().width;\n const elementWidth = element.getBoundingClientRect().width;\n return Math.floor(parentWidth / elementWidth);\n}\n\nexport function elementIndexInRow(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementWidth = element.getBoundingClientRect().width;\n const elementLeft = element.getBoundingClientRect().left;\n const parentLeft = parent.getBoundingClientRect().left;\n\n return Math.floor((elementLeft - parentLeft) / elementWidth);\n}\n\nexport function rowNumber(\n parent: NullableElement,\n element: NullableElement\n): number {\n if (!parent || !element) {\n return 0;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n return Math.round((elementTop - parentTop) / elementHeight);\n}\n\nexport function hasNextRow(\n parent: NullableElement,\n element: NullableElement\n): boolean {\n if (!parent || !element) {\n return false;\n }\n\n const elementHeight = element.getBoundingClientRect().height;\n const elementTop = element.getBoundingClientRect().top;\n const parentTop = parent.getBoundingClientRect().top;\n const parentHeight = parent.getBoundingClientRect().height;\n\n return Math.round(elementTop - parentTop + elementHeight) < parentHeight;\n}\n\nfunction getRowElements(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number\n): HTMLElement[] {\n if (row === -1) {\n const lastRow = Math.floor((elements.length - 1) / elementsInRow);\n const firstElementIndex = lastRow * elementsInRow;\n const lastElementIndex = elements.length - 1;\n return elements.slice(firstElementIndex, lastElementIndex + 1);\n }\n\n return elements.slice(row * elementsInRow, (row + 1) * elementsInRow);\n}\n\nfunction getNextRowElements(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number\n): HTMLElement[] {\n const nextRow = currentRow + 1;\n\n if (nextRow * elementsInRow > allElements.length) {\n return [];\n }\n\n return getRowElements(allElements, nextRow, elementsInRow);\n}\n\nexport function getElementInRow(\n elements: HTMLElement[],\n row: number,\n elementsInRow: number,\n indexInRow: number\n): NullableElement {\n const rowElements = getRowElements(elements, row, elementsInRow);\n // get element, default to last\n return rowElements[indexInRow] || rowElements[rowElements.length - 1] || null;\n}\n\nexport function getElementInNextRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const nextRowElements = getNextRowElements(\n allElements,\n currentRow,\n elementsInRow\n );\n\n // return item in index, or last item in row\n return (\n nextRowElements[index] ||\n nextRowElements[nextRowElements.length - 1] ||\n null\n );\n}\n\nexport function getElementInPrevRow(\n allElements: HTMLElement[],\n currentRow: number,\n elementsInRow: number,\n index: number\n): NullableElement {\n const prevRowElements = getRowElements(\n allElements,\n currentRow - 1,\n elementsInRow\n );\n\n // default to last\n return (\n prevRowElements[index] ||\n prevRowElements[prevRowElements.length - 1] ||\n null\n );\n}\n\nexport function firstVisibleElementInContainer(\n parent: NullableElement,\n elements: HTMLElement[]\n): NullableElement {\n if (!parent || !elements.length) {\n return null;\n }\n\n const parentTop = parent.getBoundingClientRect().top;\n const parentBottom = parent.getBoundingClientRect().bottom;\n\n const visibleElements = elements.find(element => {\n const elementTop = element.getBoundingClientRect().top;\n const elementBottom = element.getBoundingClientRect().bottom;\n\n return (\n (elementTop >= parentTop && elementTop <= parentBottom) ||\n (elementBottom >= parentTop && elementBottom <= parentBottom)\n );\n });\n\n return visibleElements || null;\n}\n\nexport function hasNextElementSibling(element: HTMLElement) {\n return !!element.nextElementSibling;\n}\n","import { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n emojiByUnified,\n unifiedWithoutSkinTone\n} from '../dataUtils/emojiSelectors';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport { firstVisibleElementInContainer } from './elementPositionInRow';\n\nexport type NullableElement = HTMLElement | null;\n\nexport const EmojiButtonSelector = `button${asSelectors(ClassNames.emoji)}`;\nexport const VisibleEmojiSelector = [\n EmojiButtonSelector,\n asSelectors(ClassNames.visible),\n `:not(${asSelectors(ClassNames.hidden)})`\n].join('');\n\nexport function buttonFromTarget(\n emojiElement: NullableElement\n): HTMLButtonElement | null {\n return emojiElement?.closest(EmojiButtonSelector) ?? null;\n}\n\nexport function isEmojiButton(element: NullableElement): boolean {\n if (!element) {\n return false;\n }\n\n return element.matches(EmojiButtonSelector);\n}\n\nexport function emojiFromElement(\n element: NullableElement\n): [DataEmoji, string] | [] {\n const originalUnified = originalUnifiedFromEmojiElement(element);\n const unified = unifiedFromEmojiElement(element);\n\n if (!originalUnified) {\n return [];\n }\n\n const emoji = emojiByUnified(unified ?? originalUnified);\n\n if (!emoji) {\n return [];\n }\n\n return [emoji, unified as string];\n}\n\nexport function isEmojiElement(element: NullableElement): boolean {\n return Boolean(\n element?.matches(EmojiButtonSelector) ||\n element?.parentElement?.matches(EmojiButtonSelector)\n );\n}\n\nexport function categoryLabelFromCategory(\n category: NullableElement\n): NullableElement {\n return category?.querySelector(asSelectors(ClassNames.label)) ?? null;\n}\n\nexport function closestCategoryLabel(\n element: NullableElement\n): NullableElement {\n const category = closestCategory(element);\n return categoryLabelFromCategory(category);\n}\n\nexport function elementHeight(element: NullableElement): number {\n return element?.clientHeight ?? 0;\n}\n\nexport function emojiTrueOffsetTop(element: NullableElement): number {\n if (!element) {\n return 0;\n }\n\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n // compensate for the label height\n const labelHeight = categoryLabelHeight(category);\n\n return elementOffsetTop(button) + elementOffsetTop(category) + labelHeight;\n}\n\nexport function categoryLabelHeight(category: NullableElement): number {\n if (!category) {\n return 0;\n }\n\n const categoryWithoutLabel = category.querySelector(\n asSelectors(ClassNames.categoryContent)\n );\n\n return (\n (category?.clientHeight ?? 0) - (categoryWithoutLabel?.clientHeight ?? 0)\n );\n}\n\nexport function isEmojiBehindLabel(emoji: NullableElement): boolean {\n if (!emoji) {\n return false;\n }\n\n return (\n emojiDistanceFromScrollTop(emoji) <\n categoryLabelHeight(closestCategory(emoji))\n );\n}\n\nexport function queryScrollBody(root: NullableElement): NullableElement {\n if (!root) return null;\n\n return root.matches(asSelectors(ClassNames.scrollBody))\n ? root\n : root.querySelector(asSelectors(ClassNames.scrollBody));\n}\n\nexport function emojiDistanceFromScrollTop(emoji: NullableElement): number {\n if (!emoji) {\n return 0;\n }\n\n return emojiTrueOffsetTop(emoji) - (closestScrollBody(emoji)?.scrollTop ?? 0);\n}\n\nexport function closestScrollBody(element: NullableElement): NullableElement {\n if (!element) {\n return null;\n }\n\n return element.closest(asSelectors(ClassNames.scrollBody)) ?? null;\n}\n\nexport function emojiTruOffsetLeft(element: NullableElement): number {\n const button = buttonFromTarget(element);\n const category = closestCategory(button);\n\n return elementOffsetLeft(button) + elementOffsetLeft(category);\n}\n\nfunction elementOffsetTop(element: NullableElement): number {\n return element?.offsetTop ?? 0;\n}\n\nfunction elementOffsetLeft(element: NullableElement): number {\n return element?.offsetLeft ?? 0;\n}\n\nexport function unifiedFromEmojiElement(emoji: NullableElement): string | null {\n return elementDataSetKey(buttonFromTarget(emoji), 'unified') ?? null;\n}\n\nexport function originalUnifiedFromEmojiElement(\n emoji: NullableElement\n): string | null {\n const unified = unifiedFromEmojiElement(emoji);\n\n if (unified) {\n return unifiedWithoutSkinTone(unified);\n }\n return null;\n}\n\nfunction elementDataSetKey(\n element: NullableElement,\n key: string\n): string | null {\n return elementDataSet(element)[key] ?? null;\n}\n\nfunction elementDataSet(element: NullableElement): DOMStringMap {\n return element?.dataset ?? {};\n}\n\nexport function isVisibleEmoji(element: HTMLElement) {\n return element.classList.contains(ClassNames.visible);\n}\n\nexport function isHidden(element: NullableElement) {\n if (!element) return true;\n\n return element.classList.contains(ClassNames.hidden);\n}\n\nexport function allVisibleEmojis(parent: NullableElement) {\n if (!parent) {\n return [];\n }\n\n return Array.from(\n parent.querySelectorAll(VisibleEmojiSelector)\n ) as HTMLElement[];\n}\n\nexport function lastVisibleEmoji(element: NullableElement): NullableElement {\n if (!element) return null;\n\n const allEmojis = allVisibleEmojis(element);\n const [last] = allEmojis.slice(-1);\n if (!last) {\n return null;\n }\n\n if (!isVisibleEmoji(last)) {\n return prevVisibleEmoji(last);\n }\n\n return last;\n}\n\nexport function nextVisibleEmoji(element: HTMLElement): NullableElement {\n const next = element.nextElementSibling as HTMLElement;\n\n if (!next) {\n return firstVisibleEmoji(nextCategory(element));\n }\n\n if (!isVisibleEmoji(next)) {\n return nextVisibleEmoji(next);\n }\n\n return next;\n}\n\nexport function prevVisibleEmoji(element: HTMLElement): NullableElement {\n const prev = element.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return lastVisibleEmoji(prevCategory(element));\n }\n\n if (!isVisibleEmoji(prev)) {\n return prevVisibleEmoji(prev);\n }\n\n return prev;\n}\n\nexport function firstVisibleEmoji(parent: NullableElement) {\n if (!parent) {\n return null;\n }\n\n const allEmojis = allVisibleEmojis(parent);\n\n return firstVisibleElementInContainer(parent, allEmojis);\n}\n\nexport function prevCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const prev = category.previousElementSibling as HTMLElement;\n\n if (!prev) {\n return null;\n }\n\n if (isHidden(prev)) {\n return prevCategory(prev);\n }\n\n return prev;\n}\n\nexport function nextCategory(element: NullableElement): NullableElement {\n const category = closestCategory(element);\n\n if (!category) {\n return null;\n }\n\n const next = category.nextElementSibling as HTMLElement;\n\n if (!next) {\n return null;\n }\n\n if (isHidden(next)) {\n return nextCategory(next);\n }\n\n return next;\n}\n\nexport function closestCategory(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(asSelectors(ClassNames.category)) as HTMLElement;\n}\n\nexport function closestCategoryContent(element: NullableElement) {\n if (!element) {\n return null;\n }\n return element.closest(\n asSelectors(ClassNames.categoryContent)\n ) as HTMLElement;\n}\n","export function parseNativeEmoji(unified: string): string {\n return unified\n .split('-')\n .map(hex => String.fromCodePoint(parseInt(hex, 16)))\n .join('');\n}\n","import { SkinTones, SuggestionMode } from '../types/exposedTypes';\n\nimport { DataEmoji } from './DataTypes';\nimport { emojiUnified } from './emojiSelectors';\n\nconst SUGGESTED_LS_KEY = 'epr_suggested';\n\ntype SuggestedItem = {\n unified: string;\n original: string;\n count: number;\n};\n\ntype Suggested = SuggestedItem[];\n\nexport function getSuggested(mode?: SuggestionMode): Suggested {\n try {\n if (!window?.localStorage) {\n return [];\n }\n const recent = JSON.parse(\n window?.localStorage.getItem(SUGGESTED_LS_KEY) ?? '[]'\n ) as Suggested;\n\n if (mode === SuggestionMode.FREQUENT) {\n return recent.sort((a, b) => b.count - a.count);\n }\n\n return recent;\n } catch {\n return [];\n }\n}\n\nexport function setSuggested(emoji: DataEmoji, skinTone: SkinTones) {\n const recent = getSuggested();\n\n const unified = emojiUnified(emoji, skinTone);\n const originalUnified = emojiUnified(emoji);\n\n let existing = recent.find(({ unified: u }) => u === unified);\n\n let nextList: SuggestedItem[];\n\n if (existing) {\n nextList = [existing].concat(recent.filter(i => i !== existing));\n } else {\n existing = {\n unified,\n original: originalUnified,\n count: 0\n };\n nextList = [existing, ...recent];\n }\n\n existing.count++;\n\n nextList.length = Math.min(nextList.length, 14);\n\n try {\n window?.localStorage.setItem(SUGGESTED_LS_KEY, JSON.stringify(nextList));\n // Prevents the change from being seen immediately.\n } catch {\n // ignore\n }\n}\n","import {\n Categories,\n CategoryConfig,\n CustomCategoryConfig\n} from '../config/categoryConfig';\nimport { CustomEmoji } from '../config/customEmojiConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\n\nexport function isCustomCategory(\n category: CategoryConfig | CustomCategoryConfig\n): category is CustomCategoryConfig {\n return category.category === Categories.CUSTOM;\n}\n\nexport function isCustomEmoji(emoji: Partial<DataEmoji>): emoji is CustomEmoji {\n return emoji.imgUrl !== undefined;\n}\n","import { useCallback } from 'react';\n\nimport {\n useEmojiVariationPickerState,\n useSkinToneFanOpenState\n} from '../components/context/PickerContext';\n\nexport function useCloseAllOpenToggles() {\n const [variationPicker, setVariationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen, setSkinToneFanOpen] = useSkinToneFanOpenState();\n\n const closeAllOpenToggles = useCallback(() => {\n if (variationPicker) {\n setVariationPicker(null);\n }\n\n if (skinToneFanOpen) {\n setSkinToneFanOpen(false);\n }\n }, [\n variationPicker,\n skinToneFanOpen,\n setVariationPicker,\n setSkinToneFanOpen\n ]);\n\n return closeAllOpenToggles;\n}\n\nexport function useHasOpenToggles() {\n const [variationPicker] = useEmojiVariationPickerState();\n const [skinToneFanOpen] = useSkinToneFanOpenState();\n\n return function hasOpenToggles() {\n return !!variationPicker || skinToneFanOpen;\n };\n}\n","import { emojiFromElement, NullableElement } from '../DomUtils/selectors';\nimport { useSetAnchoredEmojiRef } from '../components/context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../components/context/PickerContext';\n\nexport default function useSetVariationPicker() {\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n\n return function setVariationPicker(element: NullableElement) {\n const [emoji] = emojiFromElement(element);\n\n if (emoji) {\n setAnchoredEmojiRef(element);\n setEmojiVariationPicker(emoji);\n }\n };\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport {\n emojiFromElement,\n isEmojiElement,\n NullableElement\n} from '../DomUtils/selectors';\nimport {\n useActiveSkinToneState,\n useDisallowClickRef,\n useEmojiVariationPickerState,\n useUpdateSuggested\n} from '../components/context/PickerContext';\nimport { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useOnEmojiClickConfig\n} from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport {\n activeVariationFromUnified,\n emojiHasVariations,\n emojiNames,\n emojiUnified\n} from '../dataUtils/emojiSelectors';\nimport { parseNativeEmoji } from '../dataUtils/parseNativeEmoji';\nimport { setSuggested } from '../dataUtils/suggested';\nimport { isCustomEmoji } from '../typeRefinements/typeRefinements';\nimport { EmojiClickData, SkinTones, EmojiStyle } from '../types/exposedTypes';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\nimport useSetVariationPicker from './useSetVariationPicker';\n\nexport function useMouseDownHandlers(\n BodyRef: React.MutableRefObject<NullableElement>\n) {\n const mouseDownTimerRef = useRef<undefined | number>();\n const setVariationPicker = useSetVariationPicker();\n const disallowClickRef = useDisallowClickRef();\n const [, setEmojiVariationPicker] = useEmojiVariationPickerState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const [activeSkinTone] = useActiveSkinToneState();\n const onEmojiClick = useOnEmojiClickConfig();\n const [, updateSuggested] = useUpdateSuggested();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const activeEmojiStyle = useEmojiStyleConfig();\n\n const onClick = React.useCallback(\n function onClick(event: MouseEvent) {\n if (disallowClickRef.current) {\n return;\n }\n\n closeAllOpenToggles();\n\n const [emoji, unified] = emojiFromEvent(event);\n\n if (!emoji || !unified) {\n return;\n }\n\n const skinToneToUse =\n activeVariationFromUnified(unified) || activeSkinTone;\n\n updateSuggested();\n setSuggested(emoji, skinToneToUse);\n onEmojiClick(\n emojiClickOutput(emoji, skinToneToUse, activeEmojiStyle, getEmojiUrl),\n event\n );\n },\n [\n activeSkinTone,\n closeAllOpenToggles,\n disallowClickRef,\n onEmojiClick,\n updateSuggested,\n getEmojiUrl,\n activeEmojiStyle\n ]\n );\n\n const onMouseDown = React.useCallback(\n function onMouseDown(event: MouseEvent) {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n }\n\n const [emoji] = emojiFromEvent(event);\n\n if (!emoji || !emojiHasVariations(emoji)) {\n return;\n }\n\n mouseDownTimerRef.current = window?.setTimeout(() => {\n disallowClickRef.current = true;\n mouseDownTimerRef.current = undefined;\n closeAllOpenToggles();\n setVariationPicker(event.target as HTMLElement);\n setEmojiVariationPicker(emoji);\n }, 500);\n },\n [\n disallowClickRef,\n closeAllOpenToggles,\n setVariationPicker,\n setEmojiVariationPicker\n ]\n );\n const onMouseUp = React.useCallback(\n function onMouseUp() {\n if (mouseDownTimerRef.current) {\n clearTimeout(mouseDownTimerRef.current);\n mouseDownTimerRef.current = undefined;\n } else if (disallowClickRef.current) {\n // The problem we're trying to overcome here\n // is that the emoji has both mouseup and click events\n // and when releasing a mouseup event\n // the click gets triggered too\n // So we're disallowing the click event for a short time\n\n requestAnimationFrame(() => {\n disallowClickRef.current = false;\n });\n }\n },\n [disallowClickRef]\n );\n\n useEffect(() => {\n if (!BodyRef.current) {\n return;\n }\n const bodyRef = BodyRef.current;\n bodyRef.addEventListener('click', onClick, {\n passive: true\n });\n\n bodyRef.addEventListener('mousedown', onMouseDown, {\n passive: true\n });\n bodyRef.addEventListener('mouseup', onMouseUp, {\n passive: true\n });\n\n return () => {\n bodyRef?.removeEventListener('click', onClick);\n bodyRef?.removeEventListener('mousedown', onMouseDown);\n bodyRef?.removeEventListener('mouseup', onMouseUp);\n };\n }, [BodyRef, onClick, onMouseDown, onMouseUp]);\n}\n\nfunction emojiFromEvent(event: MouseEvent): [DataEmoji, string] | [] {\n const target = event?.target as HTMLElement;\n if (!isEmojiElement(target)) {\n return [];\n }\n\n return emojiFromElement(target);\n}\n\nfunction emojiClickOutput(\n emoji: DataEmoji,\n activeSkinTone: SkinTones,\n activeEmojiStyle: EmojiStyle,\n getEmojiUrl: GetEmojiUrl\n): EmojiClickData {\n const names = emojiNames(emoji);\n\n if (isCustomEmoji(emoji)) {\n const unified = emojiUnified(emoji);\n return {\n activeSkinTone,\n emoji: unified,\n getImageUrl() {\n return emoji.imgUrl;\n },\n imageUrl: emoji.imgUrl,\n isCustom: true,\n names,\n unified,\n unifiedWithoutSkinTone: unified\n };\n }\n const unified = emojiUnified(emoji, activeSkinTone);\n\n return {\n activeSkinTone,\n emoji: parseNativeEmoji(unified),\n getImageUrl(emojiStyle: EmojiStyle = activeEmojiStyle ?? EmojiStyle.APPLE) {\n return getEmojiUrl(unified, emojiStyle);\n },\n imageUrl: getEmojiUrl(unified, activeEmojiStyle ?? EmojiStyle.APPLE),\n isCustom: false,\n names,\n unified,\n unifiedWithoutSkinTone: emojiUnified(emoji)\n };\n}\n","import { useEffect } from 'react';\n\nimport { ElementRef } from '../components/context/ElementRefContext';\n\nimport { useCloseAllOpenToggles } from './useCloseAllOpenToggles';\n\nexport function useOnScroll(BodyRef: ElementRef) {\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n useEffect(() => {\n const bodyRef = BodyRef.current;\n if (!bodyRef) {\n return;\n }\n\n bodyRef.addEventListener('scroll', onScroll, {\n passive: true\n });\n\n function onScroll() {\n closeAllOpenToggles();\n }\n\n return () => {\n bodyRef?.removeEventListener('scroll', onScroll);\n };\n }, [BodyRef, closeAllOpenToggles]);\n}\n","import { useCallback } from 'react';\n\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nimport { asSelectors, ClassNames } from './classNames';\nimport {\n categoryLabelHeight,\n closestCategory,\n closestScrollBody,\n emojiDistanceFromScrollTop,\n isEmojiBehindLabel,\n NullableElement,\n queryScrollBody\n} from './selectors';\n\nexport function scrollTo(root: NullableElement, top: number = 0) {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = top + 1;\n });\n}\n\nexport function scrollBy(root: NullableElement, by: number): void {\n const $eprBody = queryScrollBody(root);\n\n if (!$eprBody) {\n return;\n }\n\n requestAnimationFrame(() => {\n $eprBody.scrollTop = $eprBody.scrollTop + by;\n });\n}\n\nexport function useScrollTo() {\n const BodyRef = useBodyRef();\n\n return useCallback(\n (top: number) => {\n requestAnimationFrame(() => {\n if (BodyRef.current) {\n BodyRef.current.scrollTop = top;\n }\n });\n },\n [BodyRef]\n );\n}\n\nexport function scrollEmojiAboveLabel(emoji: NullableElement) {\n if (!emoji || !isEmojiBehindLabel(emoji)) {\n return;\n }\n\n if (emoji.closest(asSelectors(ClassNames.variationPicker))) {\n return;\n }\n\n const scrollBody = closestScrollBody(emoji);\n const by = emojiDistanceFromScrollTop(emoji);\n scrollBy(scrollBody, -(categoryLabelHeight(closestCategory(emoji)) - by));\n}\n","import { useCallback } from 'react';\n\nimport { focusElement, focusFirstElementChild } from '../DomUtils/focusElement';\nimport {\n useCategoryNavigationRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\n\nexport function useFocusSearchInput() {\n const SearchInputRef = useSearchInputRef();\n\n return useCallback(() => {\n focusElement(SearchInputRef.current);\n }, [SearchInputRef]);\n}\n\nexport function useFocusSkinTonePicker() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n\n return useCallback(() => {\n if (!SkinTonePickerRef.current) {\n return;\n }\n\n focusFirstElementChild(SkinTonePickerRef.current);\n }, [SkinTonePickerRef]);\n}\n\nexport function useFocusCategoryNavigation() {\n const CategoryNavigationRef = useCategoryNavigationRef();\n\n return useCallback(() => {\n if (!CategoryNavigationRef.current) {\n return;\n }\n\n focusFirstElementChild(CategoryNavigationRef.current);\n }, [CategoryNavigationRef]);\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport {\n usePickerMainRef,\n useSearchInputRef\n} from '../components/context/ElementRefContext';\nimport {\n FilterState,\n useFilterRef,\n useSearchTermState\n} from '../components/context/PickerContext';\nimport { useSearchResultsConfig } from '../config/useConfig';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiNames } from '../dataUtils/emojiSelectors';\n\nimport { useFocusSearchInput } from './useFocus';\n\nfunction useSetFilterRef() {\n const filterRef = useFilterRef();\n\n return function setFilter(\n setter: FilterState | ((current: FilterState) => FilterState)\n ): void {\n if (typeof setter === 'function') {\n return setFilter(setter(filterRef.current));\n }\n\n filterRef.current = setter;\n };\n}\n\nexport function useClearSearch() {\n const applySearch = useApplySearch();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n\n return function clearSearch() {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = '';\n }\n\n applySearch('');\n focusSearchInput();\n };\n}\n\nexport function useAppendSearch() {\n const SearchInputRef = useSearchInputRef();\n const applySearch = useApplySearch();\n\n return function appendSearch(str: string) {\n if (SearchInputRef.current) {\n SearchInputRef.current.value = `${SearchInputRef.current.value}${str}`;\n applySearch(getNormalizedSearchTerm(SearchInputRef.current.value));\n } else {\n applySearch(getNormalizedSearchTerm(str));\n }\n };\n}\n\nexport function useFilter() {\n const SearchInputRef = useSearchInputRef();\n const filterRef = useFilterRef();\n const setFilterRef = useSetFilterRef();\n const applySearch = useApplySearch();\n\n const [searchTerm] = useSearchTermState();\n const statusSearchResults = getStatusSearchResults(\n filterRef.current,\n searchTerm\n );\n\n return {\n onChange,\n searchTerm,\n SearchInputRef,\n statusSearchResults\n };\n\n function onChange(inputValue: string) {\n const filter = filterRef.current;\n\n const nextValue = inputValue.toLowerCase();\n\n if (filter?.[nextValue] || nextValue.length <= 1) {\n return applySearch(nextValue);\n }\n\n const longestMatch = findLongestMatch(nextValue, filter);\n\n if (!longestMatch) {\n // Can we even get here?\n // If so, we need to search among all emojis\n return applySearch(nextValue);\n }\n\n setFilterRef(current =>\n Object.assign(current, {\n [nextValue]: filterEmojiObjectByKeyword(longestMatch, nextValue)\n })\n );\n applySearch(nextValue);\n }\n}\n\nfunction useApplySearch() {\n const [, setSearchTerm] = useSearchTermState();\n const PickerMainRef = usePickerMainRef();\n\n return function applySearch(searchTerm: string) {\n requestAnimationFrame(() => {\n setSearchTerm(searchTerm ? searchTerm?.toLowerCase() : searchTerm).then(\n () => {\n scrollTo(PickerMainRef.current, 0);\n }\n );\n });\n };\n}\n\nfunction filterEmojiObjectByKeyword(\n emojis: FilterDict,\n keyword: string\n): FilterDict {\n const filtered: FilterDict = {};\n\n for (const unified in emojis) {\n const emoji = emojis[unified];\n\n if (hasMatch(emoji, keyword)) {\n filtered[unified] = emoji;\n }\n }\n\n return filtered;\n}\n\nfunction hasMatch(emoji: DataEmoji, keyword: string): boolean {\n return emojiNames(emoji).some(name => name.includes(keyword));\n}\n\nexport function useIsEmojiFiltered(): (unified: string) => boolean {\n const { current: filter } = useFilterRef();\n const [searchTerm] = useSearchTermState();\n\n return unified => isEmojiFilteredBySearchTerm(unified, filter, searchTerm);\n}\n\nfunction isEmojiFilteredBySearchTerm(\n unified: string,\n filter: FilterState,\n searchTerm: string\n): boolean {\n if (!filter || !searchTerm) {\n return false;\n }\n\n return !filter[searchTerm]?.[unified];\n}\n\nexport type FilterDict = Record<string, DataEmoji>;\n\nfunction findLongestMatch(\n keyword: string,\n dict: Record<string, FilterDict> | null\n): FilterDict | null {\n if (!dict) {\n return null;\n }\n\n if (dict[keyword]) {\n return dict[keyword];\n }\n\n const longestMatchingKey = Object.keys(dict)\n .sort((a, b) => b.length - a.length)\n .find(key => keyword.includes(key));\n\n if (longestMatchingKey) {\n return dict[longestMatchingKey];\n }\n\n return null;\n}\n\nexport function getNormalizedSearchTerm(str: string): string {\n if (!str || typeof str !== 'string') {\n return '';\n }\n\n return str.trim().toLowerCase();\n}\n\nfunction getStatusSearchResults(\n filterState: FilterState,\n searchTerm: string\n): string {\n if (!filterState?.[searchTerm]) return '';\n\n const searchResultsCount =\n Object.entries(filterState?.[searchTerm])?.length || 0;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSearchResultsConfig(searchResultsCount);\n}\n","import { useEmojisThatFailedToLoadState } from '../components/context/PickerContext';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified } from '../dataUtils/emojiSelectors';\n\nimport { useIsEmojiFiltered } from './useFilter';\n\nexport function useIsEmojiHidden(): (emoji: DataEmoji) => IsHiddenReturn {\n const [emojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n const isEmojiFiltered = useIsEmojiFiltered();\n\n return (emoji: DataEmoji): IsHiddenReturn => {\n const unified = emojiUnified(emoji);\n\n const failedToLoad = emojisThatFailedToLoad.has(unified);\n const filteredOut = isEmojiFiltered(unified);\n\n return {\n failedToLoad,\n filteredOut,\n hidden: failedToLoad || filteredOut\n };\n };\n}\n\ntype IsHiddenReturn = {\n failedToLoad: boolean;\n filteredOut: boolean;\n hidden: boolean;\n};\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\ninterface Props\n extends React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n > {\n className?: string;\n}\n\nexport function Button(props: Props) {\n return (\n <button\n type=\"button\"\n {...props}\n className={cx(styles.button, props.className)}\n >\n {props.children}\n </button>\n );\n}\n\nconst styles = stylesheet.create({\n button: {\n '.': 'epr-btn',\n cursor: 'pointer',\n border: '0',\n background: 'none',\n outline: 'none'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { commonStyles } from '../../Stylesheet/stylesheet';\nimport { Button } from '../atoms/Button';\n\nimport './Emoji.css';\n\ntype ClickableEmojiButtonProps = Readonly<{\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emojiNames: string[];\n children: React.ReactNode;\n hasVariations: boolean;\n unified?: string;\n}>;\n\nexport function ClickableEmojiButton({\n emojiNames,\n unified,\n hidden,\n hiddenOnSearch,\n showVariations = true,\n hasVariations,\n children\n}: ClickableEmojiButtonProps) {\n return (\n <Button\n className={cx(\n ClassNames.emoji,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonStyles.hiddenOnSearch,\n {\n [ClassNames.visible]: !hidden && !hiddenOnSearch,\n [ClassNames.emojiHasVariations]: hasVariations && showVariations\n }\n )}\n data-unified={unified}\n aria-label={emojiNames[0]}\n data-full-name={emojiNames}\n >\n {children}\n </Button>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nexport function EmojiImg({\n emojiName,\n style,\n lazyLoad = false,\n imgUrl,\n onError\n}: {\n emojiName: string;\n emojiStyle: EmojiStyle;\n style: React.CSSProperties;\n lazyLoad?: boolean;\n imgUrl: string;\n onError: () => void;\n}) {\n return (\n <img\n src={imgUrl}\n alt={emojiName}\n className={cx(ClassNames.external, 'epr-emoji-img')}\n loading={lazyLoad ? 'lazy' : 'eager'}\n onError={onError}\n style={style}\n />\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { parseNativeEmoji } from '../../dataUtils/parseNativeEmoji';\n\nexport function NativeEmoji({\n unified,\n style\n}: {\n unified: string;\n style: React.CSSProperties;\n}) {\n return (\n <span\n className={cx(ClassNames.external, 'epr-emoji-native')}\n data-unified={unified}\n style={style}\n >\n {parseNativeEmoji(unified)}\n </span>\n );\n}\n","import * as React from 'react';\n\nimport {\n emojiByUnified,\n emojiName,\n emojiUrlByUnified\n} from '../../dataUtils/emojiSelectors';\nimport { isCustomEmoji } from '../../typeRefinements/typeRefinements';\nimport { EmojiStyle } from '../../types/exposedTypes';\nimport { useEmojisThatFailedToLoadState } from '../context/PickerContext';\n\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { EmojiImg } from './EmojiImg';\nimport { NativeEmoji } from './NativeEmoji';\n\nexport function ViewOnlyEmoji({\n emoji,\n unified,\n emojiStyle,\n size,\n lazyLoad,\n getEmojiUrl = emojiUrlByUnified\n}: BaseEmojiProps) {\n const [, setEmojisThatFailedToLoad] = useEmojisThatFailedToLoadState();\n\n const style = {} as React.CSSProperties;\n if (size) {\n style.width = style.height = style.fontSize = `${size}px`;\n }\n\n const emojiToRender = emoji ? emoji : emojiByUnified(unified);\n\n if (!emojiToRender) {\n return null;\n }\n\n if (isCustomEmoji(emojiToRender)) {\n return (\n <EmojiImg\n style={style}\n emojiName={unified}\n emojiStyle={EmojiStyle.NATIVE}\n lazyLoad={lazyLoad}\n imgUrl={emojiToRender.imgUrl}\n onError={onError}\n />\n );\n }\n\n return (\n <>\n {emojiStyle === EmojiStyle.NATIVE ? (\n <NativeEmoji unified={unified} style={style} />\n ) : (\n <EmojiImg\n style={style}\n emojiName={emojiName(emojiToRender)}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n imgUrl={getEmojiUrl(unified, emojiStyle)}\n onError={onError}\n />\n )}\n </>\n );\n\n function onError() {\n setEmojisThatFailedToLoad(prev => new Set(prev).add(unified));\n }\n}\n","import * as React from 'react';\n\nimport { DataEmoji } from '../../dataUtils/DataTypes';\nimport { emojiHasVariations, emojiNames } from '../../dataUtils/emojiSelectors';\n\nimport './Emoji.css';\nimport { BaseEmojiProps } from './BaseEmojiProps';\nimport { ClickableEmojiButton } from './ClickableEmojiButton';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\ntype ClickableEmojiProps = Readonly<\n BaseEmojiProps & {\n hidden?: boolean;\n showVariations?: boolean;\n hiddenOnSearch?: boolean;\n emoji: DataEmoji;\n }\n>;\n\nexport function ClickableEmoji({\n emoji,\n unified,\n hidden,\n hiddenOnSearch,\n emojiStyle,\n showVariations = true,\n size,\n lazyLoad,\n getEmojiUrl\n}: ClickableEmojiProps) {\n const hasVariations = emojiHasVariations(emoji);\n\n return (\n <ClickableEmojiButton\n hasVariations={hasVariations}\n showVariations={showVariations}\n hidden={hidden}\n hiddenOnSearch={hiddenOnSearch}\n emojiNames={emojiNames(emoji)}\n unified={unified}\n >\n <ViewOnlyEmoji\n unified={unified}\n emoji={emoji}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={getEmojiUrl}\n />\n </ClickableEmojiButton>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { commonStyles, stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n CategoryConfig,\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n children?: React.ReactNode;\n hidden?: boolean;\n hiddenOnSearch?: boolean;\n}>;\n\nexport function EmojiCategory({\n categoryConfig,\n children,\n hidden,\n hiddenOnSearch\n}: Props) {\n const category = categoryFromCategoryConfig(categoryConfig);\n const categoryName = categoryNameFromCategoryConfig(categoryConfig);\n\n return (\n <li\n className={cx(\n styles.category,\n hidden && commonStyles.hidden,\n hiddenOnSearch && commonStyles.hiddenOnSearch\n )}\n data-name={category}\n aria-label={categoryName}\n >\n <h2 className={cx(styles.label)}>{categoryName}</h2>\n <div className={cx(styles.categoryContent)}>{children}</div>\n </li>\n );\n}\n\nconst styles = stylesheet.create({\n category: {\n '.': ClassNames.category,\n ':not(:has(.epr-visible))': {\n display: 'none'\n }\n },\n categoryContent: {\n '.': ClassNames.categoryContent,\n display: 'grid',\n gridGap: '0',\n gridTemplateColumns: 'repeat(auto-fill, var(--epr-emoji-fullsize))',\n justifyContent: 'space-between',\n margin: 'var(--epr-category-padding)',\n position: 'relative'\n },\n label: {\n '.': ClassNames.label,\n alignItems: 'center',\n // @ts-expect-error - backdropFilter is a valid CSS property\n backdropFilter: 'blur(3px)',\n backgroundColor: 'var(--epr-category-label-bg-color)',\n color: 'var(--epr-category-label-text-color)',\n display: 'flex',\n fontSize: '16px',\n fontWeight: 'bold',\n height: 'var(--epr-category-label-height)',\n margin: '0',\n padding: 'var(--epr-category-label-padding)',\n position: 'sticky',\n textTransform: 'capitalize',\n top: '0',\n width: '100%',\n zIndex: 'var(--epr-category-label-z-index)'\n }\n});\n","import * as React from 'react';\n\nimport { CategoryConfig } from '../../config/categoryConfig';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useSuggestedEmojisModeConfig,\n} from '../../config/useConfig';\nimport { emojiByUnified } from '../../dataUtils/emojiSelectors';\nimport { getSuggested } from '../../dataUtils/suggested';\nimport { useUpdateSuggested } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\n\ntype Props = Readonly<{\n categoryConfig: CategoryConfig;\n}>;\n\nexport function Suggested({ categoryConfig }: Props) {\n const [suggestedUpdated] = useUpdateSuggested();\n const suggestedEmojisModeConfig = useSuggestedEmojisModeConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const suggested = React.useMemo(\n () => getSuggested(suggestedEmojisModeConfig) ?? [],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [suggestedUpdated, suggestedEmojisModeConfig]\n );\n const emojiStyle = useEmojiStyleConfig();\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n hiddenOnSearch\n hidden={suggested.length === 0}\n >\n {suggested.map((suggestedItem) => {\n const emoji = emojiByUnified(suggestedItem.original);\n\n if (!emoji) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={false}\n unified={suggestedItem.unified}\n emojiStyle={emojiStyle}\n emoji={emoji}\n key={suggestedItem.unified}\n getEmojiUrl={getEmojiUrl}\n />\n );\n })}\n </EmojiCategory>\n );\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n Categories,\n CategoryConfig,\n categoryFromCategoryConfig\n} from '../../config/categoryConfig';\nimport {\n useCategoriesConfig,\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n useLazyLoadEmojisConfig,\n useSkinTonesDisabledConfig\n} from '../../config/useConfig';\nimport { emojisByCategory, emojiUnified } from '../../dataUtils/emojiSelectors';\nimport { useIsEmojiDisallowed } from '../../hooks/useDisallowedEmojis';\nimport { useIsEmojiHidden } from '../../hooks/useIsEmojiHidden';\nimport {\n useActiveSkinToneState,\n useIsPastInitialLoad\n} from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport { EmojiCategory } from './EmojiCategory';\nimport { Suggested } from './Suggested';\n\nexport function EmojiList() {\n const categories = useCategoriesConfig();\n const renderdCategoriesCountRef = React.useRef(0);\n\n return (\n <ul className={cx(styles.emojiList)}>\n {categories.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n\n if (category === Categories.SUGGESTED) {\n return <Suggested key={category} categoryConfig={categoryConfig} />;\n }\n\n return (\n <RenderCategory\n key={category}\n category={category}\n categoryConfig={categoryConfig}\n renderdCategoriesCountRef={renderdCategoriesCountRef}\n />\n );\n })}\n </ul>\n );\n}\n\nfunction RenderCategory({\n category,\n categoryConfig,\n renderdCategoriesCountRef\n}: {\n category: Categories;\n categoryConfig: CategoryConfig;\n renderdCategoriesCountRef: React.MutableRefObject<number>;\n}) {\n const isEmojiHidden = useIsEmojiHidden();\n const lazyLoadEmojis = useLazyLoadEmojisConfig();\n const emojiStyle = useEmojiStyleConfig();\n const isPastInitialLoad = useIsPastInitialLoad();\n const [activeSkinTone] = useActiveSkinToneState();\n const isEmojiDisallowed = useIsEmojiDisallowed();\n const getEmojiUrl = useGetEmojiUrlConfig();\n const showVariations = !useSkinTonesDisabledConfig();\n\n // Small trick to defer the rendering of all emoji categories until the first category is visible\n // This way the user gets to actually see something and not wait for the whole picker to render.\n const emojisToPush =\n !isPastInitialLoad && renderdCategoriesCountRef.current > 0\n ? []\n : emojisByCategory(category);\n\n if (emojisToPush.length > 0) {\n renderdCategoriesCountRef.current++;\n }\n\n let hiddenCounter = 0;\n\n const emojis = emojisToPush.map(emoji => {\n const unified = emojiUnified(emoji, activeSkinTone);\n const { failedToLoad, filteredOut, hidden } = isEmojiHidden(emoji);\n\n const isDisallowed = isEmojiDisallowed(emoji);\n\n if (hidden || isDisallowed) {\n hiddenCounter++;\n }\n\n if (isDisallowed) {\n return null;\n }\n\n return (\n <ClickableEmoji\n showVariations={showVariations}\n key={unified}\n emoji={emoji}\n unified={unified}\n hidden={failedToLoad}\n hiddenOnSearch={filteredOut}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoadEmojis}\n getEmojiUrl={getEmojiUrl}\n />\n );\n });\n\n return (\n <EmojiCategory\n categoryConfig={categoryConfig}\n // Indicates that there are no visible emojis\n // Hence, the category should be hidden\n hidden={hiddenCounter === emojis.length}\n >\n {emojis}\n </EmojiCategory>\n );\n}\n\nconst styles = stylesheet.create({\n emojiList: {\n '.': ClassNames.emojiList,\n listStyle: 'none',\n margin: '0',\n padding: '0'\n }\n});\n","import {\n elementCountInRow,\n elementIndexInRow,\n getElementInNextRow,\n getElementInPrevRow,\n getElementInRow,\n hasNextRow,\n rowNumber\n} from './elementPositionInRow';\nimport { focusElement } from './focusElement';\nimport { scrollEmojiAboveLabel } from './scrollTo';\nimport {\n allVisibleEmojis,\n closestCategory,\n firstVisibleEmoji,\n lastVisibleEmoji,\n nextCategory,\n nextVisibleEmoji,\n NullableElement,\n prevCategory,\n prevVisibleEmoji,\n closestCategoryContent\n} from './selectors';\n\nexport function focusFirstVisibleEmoji(parent: NullableElement) {\n const emoji = firstVisibleEmoji(parent);\n focusElement(emoji);\n scrollEmojiAboveLabel(emoji);\n}\n\nexport function focusAndClickFirstVisibleEmoji(parent: NullableElement) {\n const firstEmoji = firstVisibleEmoji(parent);\n\n focusElement(firstEmoji);\n firstEmoji?.click();\n}\n\nexport function focusLastVisibleEmoji(parent: NullableElement) {\n focusElement(lastVisibleEmoji(parent));\n}\n\nexport function focusNextVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = nextVisibleEmoji(element);\n\n if (!next) {\n return focusFirstVisibleEmoji(nextCategory(element));\n }\n\n focusElement(next);\n scrollEmojiAboveLabel(next);\n}\n\nexport function focusPrevVisibleEmoji(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const prev = prevVisibleEmoji(element);\n\n if (!prev) {\n return focusLastVisibleEmoji(prevCategory(element));\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowUp(\n element: NullableElement,\n exitUp: () => void\n) {\n if (!element) {\n return;\n }\n\n const prev = visibleEmojiOneRowUp(element);\n\n if (!prev) {\n return exitUp();\n }\n\n focusElement(prev);\n scrollEmojiAboveLabel(prev);\n}\n\nexport function focusVisibleEmojiOneRowDown(element: NullableElement) {\n if (!element) {\n return;\n }\n\n const next = visibleEmojiOneRowDown(element);\n\n return focusElement(next);\n}\n\nfunction visibleEmojiOneRowUp(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n\n if (row === 0) {\n const prevVisibleCategory = prevCategory(category);\n\n if (!prevVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(prevVisibleCategory),\n -1, // last row\n countInRow,\n indexInRow\n );\n }\n\n return getElementInPrevRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n}\n\nfunction visibleEmojiOneRowDown(element: HTMLElement) {\n if (!element) {\n return null;\n }\n\n const categoryContent = closestCategoryContent(element);\n const category = closestCategory(categoryContent);\n const indexInRow = elementIndexInRow(categoryContent, element);\n const row = rowNumber(categoryContent, element);\n const countInRow = elementCountInRow(categoryContent, element);\n if (!hasNextRow(categoryContent, element)) {\n const nextVisibleCategory = nextCategory(category);\n\n if (!nextVisibleCategory) {\n return null;\n }\n\n return getElementInRow(\n allVisibleEmojis(nextVisibleCategory),\n 0,\n countInRow,\n indexInRow\n );\n }\n\n const itemInNextRow = getElementInNextRow(\n allVisibleEmojis(categoryContent),\n row,\n countInRow,\n indexInRow\n );\n\n return itemInNextRow;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { focusFirstVisibleEmoji } from '../../DomUtils/keyboardNavigation';\nimport {\n buttonFromTarget,\n elementHeight,\n emojiTrueOffsetTop,\n emojiTruOffsetLeft\n} from '../../DomUtils/selectors';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig\n} from '../../config/useConfig';\nimport {\n emojiHasVariations,\n emojiUnified,\n emojiVariations\n} from '../../dataUtils/emojiSelectors';\nimport {\n useAnchoredEmojiRef,\n useBodyRef,\n useSetAnchoredEmojiRef,\n useVariationPickerRef\n} from '../context/ElementRefContext';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ClickableEmoji } from '../emoji/Emoji';\n\nimport './EmojiVariationPicker.css';\n\nenum Direction {\n Up,\n Down\n}\n\nexport function EmojiVariationPicker() {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const VariationPickerRef = useVariationPickerRef();\n const [emoji] = useEmojiVariationPickerState();\n const emojiStyle = useEmojiStyleConfig();\n\n const { getTop, getMenuDirection } = useVariationPickerTop(\n VariationPickerRef\n );\n const setAnchoredEmojiRef = useSetAnchoredEmojiRef();\n const getPointerStyle = usePointerStyle(VariationPickerRef);\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const visible =\n emoji &&\n button &&\n emojiHasVariations(emoji) &&\n button.classList.contains(ClassNames.emojiHasVariations);\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n focusFirstVisibleEmoji(VariationPickerRef.current);\n }, [VariationPickerRef, visible, AnchoredEmojiRef]);\n\n let top, pointerStyle;\n\n if (!visible && AnchoredEmojiRef.current) {\n setAnchoredEmojiRef(null);\n } else {\n top = getTop();\n pointerStyle = getPointerStyle();\n }\n\n return (\n <div\n ref={VariationPickerRef}\n className={cx(ClassNames.variationPicker, {\n visible,\n 'pointing-up': getMenuDirection() === Direction.Down\n })}\n style={{ top }}\n >\n {visible && emoji\n ? [emojiUnified(emoji)]\n .concat(emojiVariations(emoji))\n .slice(0, 6)\n .map(unified => (\n <ClickableEmoji\n key={unified}\n emoji={emoji}\n unified={unified}\n emojiStyle={emojiStyle}\n showVariations={false}\n getEmojiUrl={getEmojiUrl}\n />\n ))\n : null}\n <div className=\"epr-emoji-pointer\" style={pointerStyle} />\n </div>\n );\n}\n\nfunction usePointerStyle(VariationPickerRef: React.RefObject<HTMLElement>) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n return function getPointerStyle() {\n const style: React.CSSProperties = {};\n if (!VariationPickerRef.current) {\n return style;\n }\n\n if (AnchoredEmojiRef.current) {\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const offsetLeft = emojiTruOffsetLeft(button);\n\n if (!button) {\n return style;\n }\n\n // half of the button\n style.left = offsetLeft + button?.clientWidth / 2;\n }\n\n return style;\n };\n}\n\nfunction useVariationPickerTop(\n VariationPickerRef: React.RefObject<HTMLElement>\n) {\n const AnchoredEmojiRef = useAnchoredEmojiRef();\n const BodyRef = useBodyRef();\n let direction = Direction.Up;\n\n return {\n getMenuDirection,\n getTop\n };\n\n function getMenuDirection() {\n return direction;\n }\n\n function getTop() {\n direction = Direction.Up;\n let emojiOffsetTop = 0;\n\n if (!VariationPickerRef.current) {\n return 0;\n }\n\n const height = elementHeight(VariationPickerRef.current);\n\n if (AnchoredEmojiRef.current) {\n const bodyRef = BodyRef.current;\n const button = buttonFromTarget(AnchoredEmojiRef.current);\n\n const buttonHeight = elementHeight(button);\n\n emojiOffsetTop = emojiTrueOffsetTop(button);\n\n const scrollTop = bodyRef?.scrollTop ?? 0;\n\n if (scrollTop > emojiOffsetTop - height) {\n direction = Direction.Down;\n emojiOffsetTop += buttonHeight + height;\n }\n }\n\n return emojiOffsetTop - height;\n }\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport { useOnMouseMove } from '../../hooks/useDisallowMouseMove';\nimport { useMouseDownHandlers } from '../../hooks/useMouseDownHandlers';\nimport { useOnScroll } from '../../hooks/useOnScroll';\nimport { useBodyRef } from '../context/ElementRefContext';\n\nimport { EmojiList } from './EmojiList';\nimport { EmojiVariationPicker } from './EmojiVariationPicker';\n\nexport function Body() {\n const BodyRef = useBodyRef();\n useOnScroll(BodyRef);\n useMouseDownHandlers(BodyRef);\n useOnMouseMove();\n\n return (\n <div className={cx(styles.body)} ref={BodyRef}>\n <EmojiVariationPicker />\n <EmojiList />\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n body: {\n '.': ClassNames.scrollBody,\n flex: '1',\n overflowY: 'scroll',\n overflowX: 'hidden',\n position: 'relative'\n }\n});\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { focusElement } from '../DomUtils/focusElement';\nimport {\n buttonFromTarget,\n originalUnifiedFromEmojiElement,\n unifiedFromEmojiElement\n} from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { PreviewEmoji } from '../components/footer/Preview';\n\nimport {\n useAllowMouseMove,\n useIsMouseDisallowed\n} from './useDisallowMouseMove';\n\nexport function useEmojiPreviewEvents(\n allow: boolean,\n setPreviewEmoji: React.Dispatch<React.SetStateAction<PreviewEmoji>>\n) {\n const BodyRef = useBodyRef();\n const isMouseDisallowed = useIsMouseDisallowed();\n const allowMouseMove = useAllowMouseMove();\n\n useEffect(() => {\n if (!allow) {\n return;\n }\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('keydown', onEscape, {\n passive: true\n });\n\n bodyRef?.addEventListener('mouseover', onMouseOver, true);\n\n bodyRef?.addEventListener('focus', onEnter, true);\n\n bodyRef?.addEventListener('mouseout', onLeave, {\n passive: true\n });\n bodyRef?.addEventListener('blur', onLeave, true);\n\n function onEnter(e: FocusEvent) {\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (!button) {\n return onLeave();\n }\n\n const unified = unifiedFromEmojiElement(button);\n const originalUnified = originalUnifiedFromEmojiElement(button);\n\n if (!unified || !originalUnified) {\n return onLeave();\n }\n\n setPreviewEmoji({\n unified,\n originalUnified\n });\n }\n function onLeave(e?: FocusEvent | MouseEvent) {\n if (e) {\n const relatedTarget = e.relatedTarget as HTMLElement;\n\n if (!buttonFromTarget(relatedTarget)) {\n return setPreviewEmoji(null);\n }\n }\n\n setPreviewEmoji(null);\n }\n function onEscape(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setPreviewEmoji(null);\n }\n }\n\n function onMouseOver(e: MouseEvent) {\n if (isMouseDisallowed()) {\n return;\n }\n\n const button = buttonFromTarget(e.target as HTMLElement);\n\n if (button) {\n focusElement(button);\n }\n }\n\n return () => {\n bodyRef?.removeEventListener('mouseover', onMouseOver);\n bodyRef?.removeEventListener('mouseout', onLeave);\n bodyRef?.removeEventListener('focus', onEnter, true);\n bodyRef?.removeEventListener('blur', onLeave, true);\n bodyRef?.removeEventListener('keydown', onEscape);\n };\n }, [BodyRef, allow, setPreviewEmoji, isMouseDisallowed, allowMouseMove]);\n}\n","import { useSkinTonePickerLocationConfig } from '../config/useConfig';\nimport { SkinTonePickerLocation } from '../types/exposedTypes';\n\nexport function useShouldShowSkinTonePicker() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return function shouldShowSkinTonePicker(location: SkinTonePickerLocation) {\n return skinTonePickerLocationConfig === location;\n };\n}\n\nexport function useIsSkinToneInSearch() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.SEARCH;\n}\n\nexport function useIsSkinToneInPreview() {\n const skinTonePickerLocationConfig = useSkinTonePickerLocationConfig();\n\n return skinTonePickerLocationConfig === SkinTonePickerLocation.PREVIEW;\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\n\nexport enum FlexDirection {\n ROW = 'FlexRow',\n COLUMN = 'FlexColumn'\n}\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n direction?: FlexDirection;\n}>;\n\nexport default function Flex({\n children,\n className,\n style = {},\n direction = FlexDirection.ROW\n}: Props) {\n return (\n <div\n style={{ ...style }}\n className={cx(styles.flex, className, styles[direction])}\n >\n {children}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n flex: {\n display: 'flex'\n },\n [FlexDirection.ROW]: {\n flexDirection: 'row'\n },\n [FlexDirection.COLUMN]: {\n flexDirection: 'column'\n }\n});\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\n\ntype Props = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Space({ className, style = {} }: Props) {\n return <div style={{ flex: 1, ...style }} className={cx(className)} />;\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Absolute({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'absolute' }} className={className}>\n {children}\n </div>\n );\n}\n","import * as React from 'react';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}>;\n\nexport default function Relative({ children, className, style }: Props) {\n return (\n <div style={{ ...style, position: 'relative' }} className={className}>\n {children}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { useSkinTonesDisabledConfig } from '../../config/useConfig';\nimport skinToneVariations, {\n skinTonesNamed\n} from '../../data/skinToneVariations';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useFocusSearchInput } from '../../hooks/useFocus';\nimport { SkinTones } from '../../types/exposedTypes';\nimport Absolute from '../Layout/Absolute';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSkinTonePickerRef } from '../context/ElementRefContext';\nimport {\n useActiveSkinToneState,\n useSkinToneFanOpenState\n} from '../context/PickerContext';\n\nimport './SkinTonePicker.css';\nimport { cx } from 'flairup';\n\nconst ITEM_SIZE = 28;\n\ntype Props = {\n direction?: SkinTonePickerDirection;\n};\n\nexport function SkinTonePickerMenu() {\n return (\n <Relative style={{ height: ITEM_SIZE }}>\n <Absolute style={{ bottom: 0, right: 0 }}>\n <SkinTonePicker direction={SkinTonePickerDirection.VERTICAL} />\n </Absolute>\n </Relative>\n );\n}\n\nexport function SkinTonePicker({\n direction = SkinTonePickerDirection.HORIZONTAL\n}: Props) {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const isDisabled = useSkinTonesDisabledConfig();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const [activeSkinTone, setActiveSkinTone] = useActiveSkinToneState();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const focusSearchInput = useFocusSearchInput();\n\n if (isDisabled) {\n return null;\n }\n\n const fullWidth = `${ITEM_SIZE * skinToneVariations.length}px`;\n\n const expandedSize = isOpen ? fullWidth : ITEM_SIZE + 'px';\n\n const vertical = direction === SkinTonePickerDirection.VERTICAL;\n\n return (\n <Relative\n className={cx('epr-skin-tones', direction, {\n [ClassNames.open]: isOpen\n })}\n style={\n vertical\n ? { flexBasis: expandedSize, height: expandedSize }\n : { flexBasis: expandedSize }\n }\n >\n <div className=\"epr-skin-tone-select\" ref={SkinTonePickerRef}>\n {skinToneVariations.map((skinToneVariation, i) => {\n const active = skinToneVariation === activeSkinTone;\n return (\n <Button\n style={{\n transform: cx(\n vertical\n ? `translateY(-${i * (isOpen ? ITEM_SIZE : 0)}px)`\n : `translateX(-${i * (isOpen ? ITEM_SIZE : 0)}px)`,\n isOpen && active && 'scale(1.3)'\n )\n }}\n onClick={() => {\n if (isOpen) {\n setActiveSkinTone(skinToneVariation);\n focusSearchInput();\n } else {\n setIsOpen(true);\n }\n closeAllOpenToggles();\n }}\n key={skinToneVariation}\n className={cx(`epr-tone-${skinToneVariation}`, 'epr-tone', {\n [ClassNames.active]: active\n })}\n tabIndex={isOpen ? 0 : -1}\n aria-pressed={active}\n aria-label={`Skin tone ${\n skinTonesNamed[skinToneVariation as SkinTones]\n }`}\n ></Button>\n );\n })}\n </div>\n </Relative>\n );\n}\n\nexport enum SkinTonePickerDirection {\n VERTICAL = ClassNames.vertical,\n HORIZONTAL = ClassNames.horizontal\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useEmojiStyleConfig,\n useGetEmojiUrlConfig,\n usePreviewConfig\n} from '../../config/useConfig';\nimport {\n emojiByUnified,\n emojiName,\n emojiUnified\n} from '../../dataUtils/emojiSelectors';\nimport { useEmojiPreviewEvents } from '../../hooks/useEmojiPreviewEvents';\nimport { useIsSkinToneInPreview } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Space from '../Layout/Space';\nimport { useEmojiVariationPickerState } from '../context/PickerContext';\nimport { ViewOnlyEmoji } from '../emoji/ViewOnlyEmoji';\nimport { SkinTonePickerMenu } from '../header/SkinTonePicker';\n\nexport function Preview() {\n const previewConfig = usePreviewConfig();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n\n if (!previewConfig.showPreview) {\n return null;\n }\n\n return (\n <Flex className={cx(styles.preview)}>\n <PreviewBody />\n <Space />\n {isSkinToneInPreview ? <SkinTonePickerMenu /> : null}\n </Flex>\n );\n}\n\nexport function PreviewBody() {\n const previewConfig = usePreviewConfig();\n const [previewEmoji, setPreviewEmoji] = useState<PreviewEmoji>(null);\n const emojiStyle = useEmojiStyleConfig();\n const [variationPickerEmoji] = useEmojiVariationPickerState();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEmojiPreviewEvents(previewConfig.showPreview, setPreviewEmoji);\n\n const emoji = emojiByUnified(\n previewEmoji?.unified ?? previewEmoji?.originalUnified\n );\n\n const show = emoji != null && previewEmoji != null;\n\n return <PreviewContent />;\n\n function PreviewContent() {\n const defaultEmoji =\n variationPickerEmoji ?? emojiByUnified(previewConfig.defaultEmoji);\n if (!defaultEmoji) {\n return null;\n }\n const defaultText = variationPickerEmoji\n ? emojiName(variationPickerEmoji)\n : previewConfig.defaultCaption;\n\n return (\n <>\n <div>\n {show ? (\n <ViewOnlyEmoji\n unified={previewEmoji?.unified as string}\n emoji={emoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : defaultEmoji ? (\n <ViewOnlyEmoji\n unified={emojiUnified(defaultEmoji)}\n emoji={defaultEmoji}\n emojiStyle={emojiStyle}\n size={45}\n getEmojiUrl={getEmojiUrl}\n />\n ) : null}\n </div>\n {show ? (\n <div className={cx(styles.label)}>{emojiName(emoji)}</div>\n ) : (\n <div className={cx(styles.label)}>{defaultText}</div>\n )}\n </>\n );\n }\n}\n\nexport type PreviewEmoji = null | {\n unified: string;\n originalUnified: string;\n};\n\nconst styles = stylesheet.create({\n preview: {\n alignItems: 'center',\n borderTop: '1px solid var(--epr-preview-border-color)',\n height: 'var(--epr-preview-height)',\n padding: '0 var(--epr-horizontal-padding)',\n position: 'relative',\n zIndex: 'var(--epr-preview-z-index)'\n },\n label: {\n color: 'var(--epr-preview-text-color)',\n fontSize: 'var(--epr-preview-text-size)',\n padding: 'var(--epr-preview-text-padding)',\n textTransform: 'capitalize'\n }\n});\n","export function categoryNameFromDom($category: Element | null): string | null {\n return $category?.getAttribute('data-name') ?? null;\n}\n","import { useEffect } from 'react';\n\nimport { categoryNameFromDom } from '../DomUtils/categoryNameFromDom';\nimport { asSelectors, ClassNames } from '../DomUtils/classNames';\nimport { useBodyRef } from '../components/context/ElementRefContext';\n\nexport function useActiveCategoryScrollDetection(\n setActiveCategory: (category: string) => void\n) {\n const BodyRef = useBodyRef();\n\n useEffect(() => {\n const visibleCategories = new Map();\n const bodyRef = BodyRef.current;\n const observer = new IntersectionObserver(\n entries => {\n if (!bodyRef) {\n return;\n }\n\n for (const entry of entries) {\n const id = categoryNameFromDom(entry.target);\n visibleCategories.set(id, entry.intersectionRatio);\n }\n\n const ratios = Array.from(visibleCategories);\n const lastCategory = ratios[ratios.length - 1];\n\n if (lastCategory[1] == 1) {\n return setActiveCategory(lastCategory[0]);\n }\n\n for (const [id, ratio] of ratios) {\n if (ratio) {\n setActiveCategory(id);\n break;\n }\n }\n },\n {\n threshold: [0, 1]\n }\n );\n bodyRef?.querySelectorAll(asSelectors(ClassNames.category)).forEach(el => {\n observer.observe(el);\n });\n }, [BodyRef, setActiveCategory]);\n}\n","import { useSearchTermState } from '../components/context/PickerContext';\n\nexport default function useIsSearchMode(): boolean {\n const [searchTerm] = useSearchTermState();\n\n return !!searchTerm;\n}\n","import { scrollTo } from '../DomUtils/scrollTo';\nimport { NullableElement } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n usePickerMainRef\n} from '../components/context/ElementRefContext';\n\nexport function useScrollCategoryIntoView() {\n const BodyRef = useBodyRef();\n const PickerMainRef = usePickerMainRef();\n\n return function scrollCategoryIntoView(category: string): void {\n if (!BodyRef.current) {\n return;\n }\n const $category = BodyRef.current?.querySelector(\n `[data-name=\"${category}\"]`\n ) as NullableElement;\n\n if (!$category) {\n return;\n }\n\n const offsetTop = $category.offsetTop || 0;\n\n scrollTo(PickerMainRef.current, offsetTop);\n };\n}\n","import { useCustomEmojisConfig } from '../config/useConfig';\n\nexport function useShouldHideCustomEmojis() {\n const customCategoryConfig = useCustomEmojisConfig();\n\n if (!customCategoryConfig) {\n return false;\n }\n\n return customCategoryConfig.length === 0;\n}\n","<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t width=\"200px\" height=\"80px\" viewBox=\"0 0 200 80\" enable-background=\"new 0 0 200 80\" xml:space=\"preserve\">\n<g id=\"Layer_11\">\n\t<g>\n\t\t<path fill=\"#3371B7\" stroke=\"#3371B7\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M12.8,29.5c0.6,0,1.1-0.5,1.1-1.1\n\t\t\tc0-0.6-0.5-1.2-1.1-1.2c-0.6,0-1.2,0.5-1.2,1.2C11.6,29,12.2,29.5,12.8,29.5z M12.8,28c0.2,0,0.4,0.2,0.4,0.4\n\t\t\tc0,0.2-0.2,0.4-0.4,0.4c-0.2,0-0.4-0.2-0.4-0.4C12.4,28.1,12.6,28,12.8,28z\"/>\n\t\t<path fill=\"#3371B7\" stroke=\"#3371B7\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M10,23c-3.8,0-7,3.1-7,7c0,3.8,3.1,7,7,7\n\t\t\ts7-3.1,7-7C17,26.2,13.8,23,10,23z M10,36.2c-3.4,0-6.2-2.8-6.2-6.2c0-3.4,2.8-6.2,6.2-6.2s6.2,2.8,6.2,6.2\n\t\t\tC16.2,33.4,13.4,36.2,10,36.2z\"/>\n\t\t<path fill=\"#3371B7\" stroke=\"#3371B7\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M14.6,31.2c-0.1-0.1-0.2-0.2-0.3-0.2H5.7\n\t\t\tc-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.1,0.2,0,0.4c0.7,2,2.5,3.3,4.6,3.3s3.9-1.3,4.6-3.3C14.7,31.5,14.7,31.3,14.6,31.2z M10,34.1\n\t\t\tc-1.6,0-3-0.9-3.7-2.2h7.3C13,33.2,11.6,34.1,10,34.1z\"/>\n\t\t<path fill=\"#3371B7\" stroke=\"#3371B7\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M7.2,29.5c0.6,0,1.2-0.5,1.2-1.1\n\t\t\tc0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.1,0.5-1.1,1.2C6.1,29,6.6,29.5,7.2,29.5z M7.2,28c0.2,0,0.4,0.2,0.4,0.4c0,0.2-0.2,0.4-0.4,0.4\n\t\t\tc-0.2,0-0.4-0.2-0.4-0.4C6.8,28.1,7,28,7.2,28z\"/>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M64.1,33.4l2.3,0c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.3\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4v-2.1C63.7,33.6,63.8,33.4,64.1,33.4z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M73.5,33.5h2.4c0.2,0,0.4,0.2,0.4,0.4v2c0,0.2-0.2,0.4-0.4,0.4h-2.4\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4l0-2C73.1,33.6,73.3,33.5,73.5,33.5z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M63.7,28.4h12.6v5H63.7V28.4z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M65.5,23.6h8.9c1,0,1.9,0.8,1.9,1.9v3.1H63.7v-3.1C63.7,24.5,64.5,23.6,65.5,23.6z\"/>\n\t\t\t<ellipse fill=\"#3371B7\" cx=\"66.2\" cy=\"30.9\" rx=\"0.9\" ry=\"1\"/>\n\t\t\t<ellipse fill=\"#3371B7\" cx=\"73.8\" cy=\"30.9\" rx=\"0.9\" ry=\"1\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M96.4,30c0,3.6-2.9,6.5-6.4,6.5s-6.4-2.9-6.4-6.5s2.9-6.5,6.4-6.5S96.4,26.4,96.4,30z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M96.3,28.6c0,0,0,0.1,0,0.1c-0.9,0.1-2.9,0.1-4.6-1.1c-1.1-0.8-2-1.7-2.6-2.5\n\t\t\t\tc-0.3-0.4-0.6-0.8-0.7-1c-0.1-0.1-0.1-0.1-0.1-0.2c0.5-0.1,1.2-0.2,2-0.1c1.2,0,2.5,0.3,3.5,1.1c1,0.8,1.7,1.8,2.1,2.8\n\t\t\t\tC96.1,27.9,96.2,28.3,96.3,28.6z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M84,32.2c0,0,0-0.1,0-0.1c0.9-0.2,2.9-0.4,4.7,0.6c1.1,0.7,1.9,1.5,2.4,2.3\n\t\t\t\tc0.4,0.5,0.6,1,0.7,1.3c-0.4,0.1-1,0.2-1.7,0.3c-1,0-2.1-0.1-3.2-0.8s-1.9-1.6-2.4-2.5C84.2,32.8,84.1,32.5,84,32.2z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M116.3,26.8l-1.4,2l-0.8-0.8l-0.6-0.6l0,0.9l-0.1,8.2h-6.8\n\t\t\t\tl-0.1-8.2l0-0.9l-0.6,0.6l-0.8,0.8l-1.4-2l2.6-2.9c0.1-0.1,0.2-0.1,0.3-0.1h1.3l0.4,0.7c0.7,1.3,2.6,1.3,3.3-0.1l0.3-0.6h1.2\n\t\t\t\tc0.1,0,0.2,0,0.3,0.1l0.3-0.3l-0.3,0.3L116.3,26.8z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M110.1,27.7h2v0.9c0,0.4-0.4,0.7-1,0.7c-0.6,0-1-0.3-1-0.7L110.1,27.7L110.1,27.7z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M126.8,34.3c0,1.2-1,2.2-2.2,2.2s-2.2-1-2.2-2.2s1-2.2,2.2-2.2S126.8,33.1,126.8,34.3z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M137.6,34.3c0,1.2-1,2.2-2.2,2.2c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2\n\t\t\t\tC136.6,32.1,137.6,33.1,137.6,34.3z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M126.8,24.4v9.9\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M137.7,24.4v9.9\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M126.8,23.5h10.8v2.7h-10.8C126.8,26.2,126.8,23.5,126.8,23.5z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"#3371B7\" d=\"M170.8,23.1L170.8,23.1c-0.3,0-0.5,0-0.8,0c-2.1,0-4,1-5.3,2.5l-0.1,0l-0.1-0.1l-1-1.2l-0.3,3.4l3.4,0.3\n\t\t\t\tl-1.1-1.3l-0.1-0.1l0.1-0.1c1.1-1.5,3-2.3,5-2.1l0,0c3.2,0.3,5.5,3.1,5.2,6.3c-0.3,3-3.1,5.3-6.1,5.1c-3.1-0.2-5.4-2.9-5.3-6\n\t\t\t\tl-1.3-0.1c-0.2,3.8,2.6,7.1,6.3,7.4c3.9,0.3,7.3-2.6,7.6-6.5C177.2,26.8,174.4,23.5,170.8,23.1z\"/>\n\t\t\t<path fill=\"#3371B7\" d=\"M170.3,27.4c0-0.3-0.3-0.6-0.6-0.6s-0.6,0.3-0.6,0.6v3.2c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.4,0.2\n\t\t\t\th2.4c0.4,0,0.6-0.3,0.6-0.6c0-0.4-0.3-0.6-0.6-0.6h-1.6h-0.2v-0.2L170.3,27.4L170.3,27.4z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M186.2,23.4h7.7c1.5,0,2.7,1.2,2.7,2.7v7.7c0,1.5-1.2,2.7-2.7,2.7h-7.7\n\t\t\t\tc-1.5,0-2.7-1.2-2.7-2.7v-7.7C183.4,24.6,184.7,23.4,186.2,23.4z\"/>\n\t\t\t<ellipse fill=\"#3371B7\" cx=\"186\" cy=\"28.9\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t\t<ellipse fill=\"#3371B7\" cx=\"194\" cy=\"26.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M186,33.3l0.4-0.3c0.4-0.3,1-0.3,1.5-0.1l1,0.4\n\t\t\t\tc0.5,0.2,1,0.2,1.5-0.1l0.8-0.5c0.4-0.3,1-0.3,1.5-0.1l1.8,0.8\"/>\n\t\t</g>\n\t</g>\n\t<path fill=\"#3371B7\" stroke=\"#3371B7\" stroke-width=\"0.25\" stroke-miterlimit=\"10\" d=\"M156,24.3c-0.2-0.1-0.4-0.1-0.5,0\n\t\tc0,0-0.2,0.1-0.9,0.2c-0.7,0-2.4-0.1-3.8-0.6c-0.8-0.3-1.7-0.5-2.5-0.5c-0.2,0-0.4,0-0.5,0c-1.3,0-2.5,0.3-3.6,1\n\t\tc-0.2,0.1-0.2,0.2-0.2,0.4v11.6c0,0.3,0.1,0.5,0.3,0.5c0.6,0,0.5-0.4,0.5-0.6v-5.7c0.7-0.3,3.2-1.1,5.8-0.1\n\t\tc1.6,0.6,3.5,0.7,4.3,0.7c0.8,0,1.3-0.3,1.3-0.3c0.2-0.1,0.3-0.2,0.3-0.4v-5.7C156.2,24.6,156.1,24.4,156,24.3z M155.6,30.2\n\t\tc-0.1,0-0.7,0.1-1,0.1c-0.7,0-2.4-0.1-3.8-0.6c-2.5-1-5-0.5-6.2-0.1v-4.9c0.9-0.5,2.2-0.7,3.2-0.7c0.1,0,0.3,0,0.4,0\n\t\tc0.7,0,1.5,0.2,2.2,0.4c1.6,0.6,3.5,0.7,4.3,0.7c0.2,0,0.8,0,1-0.1V30.2z\"/>\n\t<g>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M48.1,23.5h3.7c2.5,0,4.5,2,4.5,4.5c0,0.5-0.4,0.9-0.9,0.9H44.5c-0.5,0-0.9-0.4-0.9-0.9\n\t\t\tC43.6,25.5,45.6,23.5,48.1,23.5z\"/>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M43.5,28.8c-0.2,0.1-0.5,1.2,0,1.5c1.4,1,8.5,0.8,11.3,0.6\n\t\t\tc0.8-0.1,1.6-0.4,1.7-1.2c0-0.3-0.1-0.6-0.6-0.9\"/>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M43.5,30.6L43.3,31c-0.2,0.5,0.2,1,0.7,0.9c0.3-0.1,0.5,0,0.7,0.3\n\t\t\tl0.1,0.2c0.3,0.5,1,0.6,1.5,0.2l0,0c0.3-0.2,0.7-0.3,1-0.2l0.8,0.3c0.4,0.2,0.8,0.1,1.2,0l0.5-0.2c0.4-0.2,0.9-0.2,1.3,0l0.5,0.2\n\t\t\tc0.4,0.2,0.8,0.2,1.2,0l0.2-0.1c0.3-0.2,0.8-0.2,1.1,0.1l0.2,0.2c0.3,0.3,0.8,0.2,1-0.2l0.1-0.2c0.1-0.2,0-0.3,0.2-0.3\n\t\t\tc0.5,0,1.2-0.3,1.1-0.7l-0.4-1.1\"/>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M43.5,32.2c-0.1,0.2-0.3,0.8,0,1.1c0.3,0.4,3,1.1,6.4,1.1\n\t\t\tc2.2,0,4.6-0.3,6-0.6c0.5-0.1,0.9-0.5,0.8-0.9c0-0.2-0.2-0.5-0.4-0.7\"/>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M43.5,33.3c0,0.5,0.6,2.3,1.3,2.7c1.8,0.8,5.7,0.7,8.1,0.5\n\t\t\tc1.3-0.1,2.5-0.7,3.2-1.8c0.3-0.5,0.5-1,0.5-1.4\"/>\n\t\t<ellipse fill=\"#3371B7\" cx=\"51.6\" cy=\"26.5\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#3371B7\" cx=\"53\" cy=\"25\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#3371B7\" cx=\"53\" cy=\"27.2\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#3371B7\" cx=\"54.3\" cy=\"26.5\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#3371B7\" cx=\"50.9\" cy=\"25\" rx=\"0.3\" ry=\"0.4\"/>\n\t</g>\n\t<g>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" d=\"M24.2,31v-7.6c0.1,0.1,0.8,0.9,2.8,3.1c2.5-1.6,5.6-0.7,6.9,0l2.4-3.1v7.1\n\t\t\tc0,1.2-0.1,2.5-0.9,3.4c-1,1.2-2.7,2.5-5.3,2.5c-2.9,0-4.5-1.5-5.3-2.9C24.2,32.9,24.2,32,24.2,31z\"/>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M21.2,30l5.4,1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M21.2,34.1l5.4-1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M38.8,30l-5.4,1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M38.8,34.1l-5.4-1.2\"/>\n\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#3371B7\" d=\"M29.5,32.4L29,31.7c-0.2-0.3,0-0.6,0.3-0.6h1.4\n\t\t\tc0.3,0,0.5,0.4,0.3,0.6l-0.7,1l0,0c-0.7,1.2-2.6,1.1-3.1-0.3l-0.1-0.2c-0.1-0.2,0-0.4,0.2-0.5s0.4,0,0.5,0.2l0.1,0.2\n\t\t\tC28.3,32.8,29.1,32.9,29.5,32.4z\"/>\n\t\t<path fill=\"none\" stroke=\"#3371B7\" stroke-linecap=\"round\" d=\"M32.4,32.1l-0.1,0.2c-0.4,1-1.8,1.1-2.3,0.2\"/>\n\t\t<ellipse fill=\"#3371B7\" cx=\"27.6\" cy=\"29.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t<ellipse fill=\"#3371B7\" cx=\"32.4\" cy=\"29.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t</g>\n\t<g>\n\t\t<path fill=\"#C0C0BF\" stroke=\"#C0C0BF\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M12.8,49.5c0.6,0,1.1-0.5,1.1-1.1\n\t\t\tc0-0.6-0.5-1.2-1.1-1.2c-0.6,0-1.2,0.5-1.2,1.2C11.6,49,12.2,49.5,12.8,49.5z M12.8,48c0.2,0,0.4,0.2,0.4,0.4\n\t\t\tc0,0.2-0.2,0.4-0.4,0.4c-0.2,0-0.4-0.2-0.4-0.4C12.4,48.1,12.6,48,12.8,48z\"/>\n\t\t<path fill=\"#C0C0BF\" stroke=\"#C0C0BF\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M14.6,51.2c-0.1-0.1-0.2-0.2-0.3-0.2H5.7\n\t\t\tc-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.1,0.2,0,0.4c0.7,2,2.5,3.3,4.6,3.3s3.9-1.3,4.6-3.3C14.7,51.5,14.7,51.3,14.6,51.2z M10,54.1\n\t\t\tc-1.6,0-3-0.9-3.7-2.2h7.3C13,53.2,11.6,54.1,10,54.1z\"/>\n\t\t<path fill=\"#C0C0BF\" stroke=\"#C0C0BF\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M7.2,49.5c0.6,0,1.2-0.5,1.2-1.1\n\t\t\tc0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.1,0.5-1.1,1.2C6.1,49,6.6,49.5,7.2,49.5z M7.2,48c0.2,0,0.4,0.2,0.4,0.4c0,0.2-0.2,0.4-0.4,0.4\n\t\t\tc-0.2,0-0.4-0.2-0.4-0.4C6.8,48.1,7,48,7.2,48z\"/>\n\t\t<path fill=\"#C0C0BF\" stroke=\"#C0C0BF\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M10,43c-3.8,0-7,3.1-7,7c0,3.8,3.1,7,7,7\n\t\t\ts7-3.1,7-7C17,46.2,13.8,43,10,43z M10,56.2c-3.4,0-6.2-2.8-6.2-6.2c0-3.4,2.8-6.2,6.2-6.2s6.2,2.8,6.2,6.2\n\t\t\tC16.2,53.4,13.4,56.2,10,56.2z\"/>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M64.1,53.4l2.3,0c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.3\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4v-2.1C63.7,53.6,63.8,53.4,64.1,53.4z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M73.5,53.5h2.4c0.2,0,0.4,0.2,0.4,0.4v2c0,0.2-0.2,0.4-0.4,0.4h-2.4\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4l0-2C73.1,53.6,73.3,53.5,73.5,53.5z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M63.7,48.4h12.6v5H63.7V48.4z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M65.5,43.6h8.9c1,0,1.9,0.8,1.9,1.9v3.1H63.7v-3.1C63.7,44.5,64.5,43.6,65.5,43.6z\"/>\n\t\t\t<ellipse fill=\"#C0C0BF\" cx=\"66.2\" cy=\"50.9\" rx=\"0.9\" ry=\"1\"/>\n\t\t\t<ellipse fill=\"#C0C0BF\" cx=\"73.8\" cy=\"50.9\" rx=\"0.9\" ry=\"1\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M96.4,50c0,3.6-2.9,6.5-6.4,6.5s-6.4-2.9-6.4-6.5s2.9-6.5,6.4-6.5S96.4,46.4,96.4,50z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M96.3,48.6c0,0,0,0.1,0,0.1c-0.9,0.1-2.9,0.1-4.6-1.2c-1.1-0.8-2-1.7-2.6-2.5\n\t\t\t\tc-0.3-0.4-0.6-0.8-0.7-1c-0.1-0.1-0.1-0.2-0.1-0.2c0.5-0.1,1.2-0.2,2-0.2c1.2,0,2.5,0.3,3.5,1.1c1,0.8,1.7,1.8,2.1,2.8\n\t\t\t\tC96.1,47.9,96.2,48.3,96.3,48.6z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M84,52.2c0,0,0-0.1,0-0.1c0.9-0.2,2.9-0.4,4.7,0.6c1.1,0.7,1.9,1.5,2.4,2.3\n\t\t\t\tc0.4,0.5,0.6,1,0.7,1.3c-0.4,0.1-1,0.2-1.7,0.3c-1,0-2.1-0.1-3.2-0.8s-1.9-1.6-2.4-2.5C84.2,52.8,84.1,52.5,84,52.2z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M116.3,46.8l-1.4,2l-0.8-0.8l-0.6-0.7l0,0.9l-0.1,8.2h-6.8\n\t\t\t\tl-0.1-8.2l0-0.9l-0.6,0.7l-0.8,0.8l-1.4-2l2.6-2.9c0.1-0.1,0.2-0.1,0.3-0.1h1.3l0.4,0.7c0.7,1.3,2.6,1.3,3.3-0.1l0.3-0.6h1.2\n\t\t\t\tc0.1,0,0.2,0,0.3,0.1l0.3-0.3l-0.3,0.3L116.3,46.8z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M110.1,47.7h2v0.9c0,0.4-0.4,0.7-1,0.7c-0.6,0-1-0.3-1-0.7L110.1,47.7L110.1,47.7z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M126.8,54.3c0,1.2-1,2.2-2.2,2.2s-2.2-1-2.2-2.2s1-2.2,2.2-2.2S126.8,53.1,126.8,54.3z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M137.6,54.3c0,1.2-1,2.2-2.2,2.2c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2\n\t\t\t\tC136.6,52.1,137.6,53.1,137.6,54.3z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M126.8,44.4v9.9\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M137.7,44.4v9.9\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M126.8,43.5h10.8v2.7h-10.8C126.8,46.2,126.8,43.5,126.8,43.5z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"#C0C0BF\" d=\"M170.8,43.1L170.8,43.1c-0.3,0-0.5,0-0.8,0c-2.1,0-4,1-5.3,2.5l-0.1,0l-0.1-0.1l-1-1.2l-0.3,3.4l3.4,0.3\n\t\t\t\tl-1.1-1.3l-0.1-0.1l0.1-0.1c1.1-1.5,3-2.3,5-2.1l0,0c3.2,0.3,5.5,3.1,5.2,6.3c-0.3,3-3.1,5.3-6.1,5.1c-3.1-0.2-5.4-2.9-5.3-6\n\t\t\t\tl-1.3-0.1c-0.2,3.8,2.6,7.1,6.3,7.4c3.9,0.3,7.3-2.6,7.6-6.5C177.2,46.8,174.4,43.5,170.8,43.1z\"/>\n\t\t\t<path fill=\"#C0C0BF\" d=\"M170.3,47.4c0-0.3-0.3-0.6-0.6-0.6s-0.6,0.3-0.6,0.6v3.2c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.4,0.2\n\t\t\t\th2.4c0.4,0,0.6-0.3,0.6-0.6c0-0.3-0.3-0.6-0.6-0.6h-1.6h-0.2v-0.2L170.3,47.4L170.3,47.4z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M186.2,43.4h7.7c1.5,0,2.7,1.2,2.7,2.7v7.7c0,1.5-1.2,2.7-2.7,2.7h-7.7\n\t\t\t\tc-1.5,0-2.7-1.2-2.7-2.7v-7.7C183.4,44.7,184.7,43.4,186.2,43.4z\"/>\n\t\t\t<ellipse fill=\"#C0C0BF\" cx=\"186\" cy=\"48.9\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t\t<ellipse fill=\"#C0C0BF\" cx=\"194\" cy=\"46.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M186,53.3l0.4-0.3c0.4-0.3,1-0.3,1.5-0.1l1,0.4\n\t\t\t\tc0.5,0.2,1,0.2,1.5-0.1l0.8-0.5c0.4-0.3,1-0.3,1.5-0.1l1.8,0.8\"/>\n\t\t</g>\n\t</g>\n\t<path fill=\"#C0C0BF\" stroke=\"#C0C0BF\" stroke-width=\"0.25\" stroke-miterlimit=\"10\" d=\"M156,44.3c-0.2-0.1-0.4-0.1-0.5,0\n\t\tc0,0-0.2,0.1-0.9,0.2c-0.7,0-2.4-0.1-3.8-0.6c-0.8-0.3-1.7-0.5-2.5-0.5c-0.2,0-0.4,0-0.5,0c-1.3,0-2.5,0.3-3.6,1\n\t\tc-0.2,0.1-0.2,0.2-0.2,0.4v11.6c0,0.3,0.1,0.5,0.3,0.5c0.6,0,0.5-0.4,0.5-0.6v-5.7c0.7-0.3,3.2-1.1,5.8-0.1\n\t\tc1.6,0.6,3.5,0.7,4.3,0.7c0.8,0,1.3-0.3,1.3-0.3c0.2-0.1,0.3-0.2,0.3-0.4v-5.7C156.2,44.6,156.1,44.4,156,44.3z M155.6,50.2\n\t\tc-0.1,0-0.7,0.1-1,0.1c-0.7,0-2.4-0.1-3.8-0.6c-2.5-1-5-0.5-6.2-0.1v-4.9c0.9-0.5,2.2-0.7,3.2-0.7c0.1,0,0.3,0,0.4,0\n\t\tc0.7,0,1.5,0.2,2.2,0.4c1.6,0.6,3.5,0.7,4.3,0.7c0.2,0,0.8,0,1-0.1V50.2z\"/>\n\t<g>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M48.1,43.5h3.7c2.5,0,4.5,2,4.5,4.5c0,0.5-0.4,0.9-0.9,0.9H44.5c-0.5,0-0.9-0.4-0.9-0.9\n\t\t\tC43.6,45.5,45.6,43.5,48.1,43.5z\"/>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M43.5,48.8c-0.2,0.1-0.5,1.2,0,1.5c1.4,1,8.5,0.8,11.3,0.6\n\t\t\tc0.8-0.1,1.6-0.4,1.7-1.2c0-0.3-0.1-0.6-0.6-0.9\"/>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M43.5,50.6L43.3,51c-0.2,0.5,0.2,1,0.7,0.9c0.3-0.1,0.5,0,0.7,0.3\n\t\t\tl0.1,0.2c0.3,0.5,1,0.6,1.5,0.2l0,0c0.3-0.2,0.7-0.3,1-0.2l0.8,0.3c0.4,0.2,0.8,0.1,1.2,0l0.5-0.2c0.4-0.2,0.9-0.2,1.3,0l0.5,0.2\n\t\t\tc0.4,0.2,0.8,0.2,1.2,0l0.2-0.1c0.3-0.2,0.8-0.2,1.1,0.1l0.2,0.2c0.3,0.3,0.8,0.2,1-0.2l0.1-0.2c0.1-0.2,0-0.3,0.2-0.3\n\t\t\tc0.5,0,1.2-0.3,1.1-0.7l-0.4-1.1\"/>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M43.5,52.2c-0.1,0.2-0.3,0.8,0,1.1c0.3,0.4,3,1.1,6.4,1.1\n\t\t\tc2.2,0,4.6-0.3,6-0.6c0.5-0.1,0.9-0.5,0.8-0.9c0-0.2-0.2-0.5-0.4-0.7\"/>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M43.5,53.3c0,0.5,0.6,2.3,1.3,2.7c1.8,0.8,5.7,0.7,8.1,0.5\n\t\t\tc1.3-0.1,2.5-0.7,3.2-1.8c0.3-0.5,0.5-1,0.5-1.4\"/>\n\t\t<ellipse fill=\"#C0C0BF\" cx=\"51.6\" cy=\"46.5\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#C0C0BF\" cx=\"53\" cy=\"45\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#C0C0BF\" cx=\"53\" cy=\"47.2\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#C0C0BF\" cx=\"54.3\" cy=\"46.5\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#C0C0BF\" cx=\"50.9\" cy=\"45\" rx=\"0.3\" ry=\"0.4\"/>\n\t</g>\n\t<g>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" d=\"M24.2,51v-7.6c0.1,0.1,0.8,0.9,2.8,3.1c2.5-1.7,5.6-0.7,6.9,0l2.4-3.1v7.1\n\t\t\tc0,1.2-0.1,2.5-0.9,3.4c-1,1.2-2.7,2.5-5.3,2.5c-2.9,0-4.5-1.5-5.3-2.9C24.2,52.9,24.2,52,24.2,51z\"/>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M21.2,50l5.4,1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M21.2,54.1l5.4-1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M38.8,50l-5.4,1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M38.8,54.1l-5.4-1.2\"/>\n\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#C0C0BF\" d=\"M29.5,52.4L29,51.7c-0.2-0.3,0-0.6,0.3-0.6h1.4\n\t\t\tc0.3,0,0.5,0.4,0.3,0.6l-0.7,1l0,0c-0.7,1.2-2.6,1.1-3.1-0.3l-0.1-0.2c-0.1-0.2,0-0.4,0.2-0.5s0.4,0,0.5,0.2l0.1,0.2\n\t\t\tC28.3,52.8,29.1,52.9,29.5,52.4z\"/>\n\t\t<path fill=\"none\" stroke=\"#C0C0BF\" stroke-linecap=\"round\" d=\"M32.4,52.1l-0.1,0.2c-0.4,1-1.8,1.1-2.3,0.2\"/>\n\t\t<ellipse fill=\"#C0C0BF\" cx=\"27.6\" cy=\"49.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t<ellipse fill=\"#C0C0BF\" cx=\"32.4\" cy=\"49.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t</g>\n\t<g>\n\t\t<path fill=\"#6AA9DD\" stroke=\"#6AA9DD\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M14.6,71.2c-0.1-0.1-0.2-0.2-0.3-0.2H5.7\n\t\t\tc-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.1,0.2,0,0.4c0.7,2,2.5,3.3,4.6,3.3s3.9-1.3,4.6-3.3C14.7,71.5,14.7,71.3,14.6,71.2z M10,74.1\n\t\t\tc-1.6,0-3-0.9-3.7-2.2h7.3C13,73.2,11.6,74.1,10,74.1z\"/>\n\t\t<path fill=\"#6AA9DD\" stroke=\"#6AA9DD\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M12.8,69.5c0.6,0,1.1-0.5,1.1-1.1\n\t\t\tc0-0.6-0.5-1.2-1.1-1.2c-0.6,0-1.2,0.5-1.2,1.2C11.6,69,12.2,69.5,12.8,69.5z M12.8,68c0.2,0,0.4,0.2,0.4,0.4\n\t\t\tc0,0.2-0.2,0.4-0.4,0.4c-0.2,0-0.4-0.2-0.4-0.4C12.4,68.1,12.6,68,12.8,68z\"/>\n\t\t<path fill=\"#6AA9DD\" stroke=\"#6AA9DD\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M7.2,69.5c0.6,0,1.2-0.5,1.2-1.1\n\t\t\tc0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.1,0.5-1.1,1.2C6.1,69,6.6,69.5,7.2,69.5z M7.2,68c0.2,0,0.4,0.2,0.4,0.4c0,0.2-0.2,0.4-0.4,0.4\n\t\t\tc-0.2,0-0.4-0.2-0.4-0.4C6.8,68.1,7,68,7.2,68z\"/>\n\t\t<path fill=\"#6AA9DD\" stroke=\"#6AA9DD\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M10,63c-3.8,0-7,3.1-7,7c0,3.8,3.1,7,7,7\n\t\t\ts7-3.1,7-7C17,66.2,13.8,63,10,63z M10,76.2c-3.4,0-6.2-2.8-6.2-6.2c0-3.4,2.8-6.2,6.2-6.2s6.2,2.8,6.2,6.2\n\t\t\tC16.2,73.4,13.4,76.2,10,76.2z\"/>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M64.1,73.4l2.3,0c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.3\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4v-2.1C63.7,73.6,63.8,73.4,64.1,73.4z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M73.5,73.5h2.4c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.4\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4l0-2.1C73.1,73.6,73.3,73.5,73.5,73.5z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M63.7,68.4h12.6v5H63.7V68.4z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M65.5,63.6h8.9c1,0,1.9,0.8,1.9,1.9v3.1H63.7v-3.1C63.7,64.5,64.5,63.6,65.5,63.6z\"/>\n\t\t\t<ellipse fill=\"#6AA9DD\" cx=\"66.2\" cy=\"70.9\" rx=\"0.9\" ry=\"0.9\"/>\n\t\t\t<ellipse fill=\"#6AA9DD\" cx=\"73.8\" cy=\"70.9\" rx=\"0.9\" ry=\"0.9\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M96.4,70c0,3.6-2.9,6.5-6.4,6.5s-6.4-2.9-6.4-6.5s2.9-6.5,6.4-6.5S96.4,66.4,96.4,70z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M96.3,68.6c0,0,0,0.1,0,0.1c-0.9,0.1-2.9,0.1-4.6-1.2c-1.1-0.8-2-1.7-2.6-2.5\n\t\t\t\tc-0.3-0.4-0.6-0.8-0.7-1.1c-0.1-0.1-0.1-0.2-0.1-0.2c0.5-0.1,1.2-0.2,2-0.2c1.2,0,2.5,0.3,3.5,1.1c1,0.8,1.7,1.8,2.1,2.8\n\t\t\t\tC96.1,67.9,96.2,68.3,96.3,68.6z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M84,72.2c0,0,0-0.1,0-0.1c0.9-0.2,2.9-0.4,4.7,0.6c1.1,0.7,1.9,1.5,2.4,2.3\n\t\t\t\tc0.4,0.5,0.6,1,0.7,1.3c-0.4,0.1-1,0.2-1.7,0.3c-1,0-2.1-0.1-3.2-0.8s-1.9-1.6-2.4-2.5C84.2,72.8,84.1,72.4,84,72.2z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M116.3,66.8l-1.4,2l-0.8-0.8l-0.6-0.7l0,0.9l-0.1,8.2h-6.8\n\t\t\t\tl-0.1-8.2l0-0.9l-0.6,0.7l-0.8,0.8l-1.4-2l2.6-2.9c0.1-0.1,0.2-0.1,0.3-0.1h1.3l0.4,0.7c0.7,1.3,2.6,1.3,3.3-0.1l0.3-0.6h1.2\n\t\t\t\tc0.1,0,0.2,0,0.3,0.1l0.3-0.3l-0.3,0.3L116.3,66.8z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M110.1,67.7h2v0.9c0,0.4-0.4,0.7-1,0.7c-0.6,0-1-0.3-1-0.7L110.1,67.7L110.1,67.7z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M126.8,74.3c0,1.2-1,2.2-2.2,2.2s-2.2-1-2.2-2.2s1-2.2,2.2-2.2S126.8,73.1,126.8,74.3z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M137.6,74.3c0,1.2-1,2.2-2.2,2.2c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2\n\t\t\t\tC136.6,72.1,137.6,73.1,137.6,74.3z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M126.8,64.4v9.9\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M137.7,64.4v9.9\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M126.8,63.5h10.8v2.7h-10.8C126.8,66.2,126.8,63.5,126.8,63.5z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"#6AA9DD\" d=\"M170.8,63.1L170.8,63.1c-0.3,0-0.5,0-0.8,0c-2.1,0-4,1-5.3,2.5l-0.1,0l-0.1-0.1l-1-1.2l-0.3,3.4l3.4,0.3\n\t\t\t\tl-1.1-1.3l-0.1-0.1l0.1-0.1c1.1-1.4,3-2.3,5-2.1l0,0c3.2,0.3,5.5,3.1,5.2,6.3c-0.3,3-3.1,5.3-6.1,5.1c-3.1-0.2-5.4-2.9-5.3-6\n\t\t\t\tl-1.3-0.1c-0.2,3.8,2.6,7.1,6.3,7.4c3.9,0.3,7.3-2.6,7.6-6.5C177.2,66.8,174.4,63.5,170.8,63.1z\"/>\n\t\t\t<path fill=\"#6AA9DD\" d=\"M170.3,67.4c0-0.3-0.3-0.6-0.6-0.6s-0.6,0.3-0.6,0.6v3.2c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.4,0.2\n\t\t\t\th2.4c0.4,0,0.6-0.3,0.6-0.6S172.4,70,172,70h-1.6h-0.2v-0.2L170.3,67.4L170.3,67.4z\"/>\n\t\t</g>\n\t</g>\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M186.2,63.4h7.7c1.5,0,2.7,1.2,2.7,2.7v7.7c0,1.5-1.2,2.7-2.7,2.7h-7.7\n\t\t\t\tc-1.5,0-2.7-1.2-2.7-2.7v-7.7C183.4,64.7,184.7,63.4,186.2,63.4z\"/>\n\t\t\t<ellipse fill=\"#6AA9DD\" cx=\"186\" cy=\"68.9\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t\t<ellipse fill=\"#6AA9DD\" cx=\"194\" cy=\"66.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M186,73.3l0.4-0.3c0.4-0.3,1-0.3,1.5-0.1l1,0.4\n\t\t\t\tc0.5,0.2,1,0.2,1.5-0.1l0.8-0.5c0.4-0.3,1-0.3,1.5-0.1l1.8,0.8\"/>\n\t\t</g>\n\t</g>\n\t<path fill=\"#6AA9DD\" stroke=\"#6AA9DD\" stroke-width=\"0.25\" stroke-miterlimit=\"10\" d=\"M156,64.3c-0.2-0.1-0.4-0.1-0.5,0\n\t\tc0,0-0.2,0.1-0.9,0.2c-0.7,0-2.4-0.1-3.8-0.6c-0.8-0.3-1.7-0.5-2.5-0.5c-0.2,0-0.4,0-0.5,0c-1.3,0-2.5,0.3-3.6,1\n\t\tc-0.2,0.1-0.2,0.2-0.2,0.4v11.6c0,0.3,0.1,0.5,0.3,0.5c0.6,0,0.5-0.4,0.5-0.6v-5.7c0.7-0.3,3.2-1.1,5.8-0.1\n\t\tc1.6,0.6,3.5,0.7,4.3,0.7c0.8,0,1.3-0.3,1.3-0.3c0.2-0.1,0.3-0.2,0.3-0.4v-5.7C156.2,64.6,156.1,64.4,156,64.3z M155.6,70.2\n\t\tc-0.1,0-0.7,0.1-1,0.1c-0.7,0-2.4-0.1-3.8-0.6c-2.5-1-5-0.5-6.2-0.1v-4.9c0.9-0.5,2.2-0.7,3.2-0.7c0.1,0,0.3,0,0.4,0\n\t\tc0.7,0,1.5,0.2,2.2,0.4c1.6,0.6,3.5,0.7,4.3,0.7c0.2,0,0.8,0,1-0.1V70.2z\"/>\n\t<g>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M48.1,63.5h3.7c2.5,0,4.5,2,4.5,4.5c0,0.5-0.4,0.9-0.9,0.9H44.5c-0.5,0-0.9-0.4-0.9-0.9\n\t\t\tC43.6,65.5,45.6,63.5,48.1,63.5z\"/>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M43.5,68.8c-0.2,0.1-0.5,1.2,0,1.5c1.4,0.9,8.5,0.8,11.3,0.6\n\t\t\tc0.8-0.1,1.6-0.4,1.7-1.2c0-0.3-0.1-0.6-0.6-0.9\"/>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M43.5,70.6L43.3,71c-0.2,0.5,0.2,1,0.7,0.9c0.3-0.1,0.5,0.1,0.7,0.3\n\t\t\tl0.1,0.2c0.3,0.5,1,0.6,1.5,0.2l0,0c0.3-0.2,0.7-0.3,1-0.2l0.8,0.3c0.4,0.2,0.8,0.1,1.2,0l0.5-0.2c0.4-0.2,0.9-0.2,1.3,0l0.5,0.2\n\t\t\tc0.4,0.2,0.8,0.2,1.2-0.1l0.2-0.1c0.3-0.2,0.8-0.2,1.1,0.1l0.2,0.2c0.3,0.3,0.8,0.2,1-0.2l0.1-0.2c0.1-0.2,0-0.3,0.2-0.3\n\t\t\tc0.5,0,1.2-0.3,1.1-0.7l-0.4-1.1\"/>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M43.5,72.2c-0.1,0.2-0.3,0.8,0,1.1c0.3,0.4,3,1.1,6.4,1.1\n\t\t\tc2.2,0,4.6-0.3,6-0.6c0.5-0.1,0.9-0.4,0.8-0.9c0-0.2-0.2-0.5-0.4-0.7\"/>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M43.5,73.3c0,0.5,0.6,2.3,1.3,2.7c1.8,0.8,5.7,0.7,8.1,0.5\n\t\t\tc1.3-0.1,2.5-0.7,3.2-1.8c0.3-0.5,0.5-1,0.5-1.4\"/>\n\t\t<ellipse fill=\"#6AA9DD\" cx=\"51.6\" cy=\"66.5\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#6AA9DD\" cx=\"53\" cy=\"65\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#6AA9DD\" cx=\"53\" cy=\"67.2\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#6AA9DD\" cx=\"54.3\" cy=\"66.5\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t<ellipse fill=\"#6AA9DD\" cx=\"50.9\" cy=\"65\" rx=\"0.3\" ry=\"0.4\"/>\n\t</g>\n\t<g>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" d=\"M24.2,71v-7.6c0.1,0.1,0.8,0.9,2.8,3.1c2.5-1.7,5.6-0.7,6.9,0l2.4-3.1v7.1\n\t\t\tc0,1.2-0.1,2.5-0.9,3.4c-1,1.2-2.7,2.5-5.3,2.5c-2.9,0-4.5-1.5-5.3-2.9C24.2,72.9,24.2,72,24.2,71z\"/>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M21.2,70.1l5.4,1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M21.2,74.1l5.4-1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M38.8,70.1l-5.4,1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M38.8,74.1l-5.4-1.2\"/>\n\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#6AA9DD\" d=\"M29.5,72.4L29,71.7c-0.2-0.3,0-0.6,0.3-0.6h1.4\n\t\t\tc0.3,0,0.5,0.4,0.3,0.6l-0.7,1l0,0c-0.7,1.2-2.6,1.1-3.1-0.3l-0.1-0.2c-0.1-0.2,0-0.4,0.2-0.5c0.2-0.1,0.4,0,0.5,0.2l0.1,0.2\n\t\t\tC28.3,72.8,29.1,72.9,29.5,72.4z\"/>\n\t\t<path fill=\"none\" stroke=\"#6AA9DD\" stroke-linecap=\"round\" d=\"M32.4,72.1l-0.1,0.2c-0.4,1-1.8,1.1-2.3,0.2\"/>\n\t\t<ellipse fill=\"#6AA9DD\" cx=\"27.6\" cy=\"69.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t<ellipse fill=\"#6AA9DD\" cx=\"32.4\" cy=\"69.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t</g>\n</g>\n<g>\n\t<path fill=\"#868686\" stroke=\"#868686\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M12.8,9.5c0.6,0,1.1-0.5,1.1-1.2\n\t\tc0-0.6-0.5-1.1-1.1-1.1c-0.6,0-1.2,0.5-1.2,1.1S12.2,9.5,12.8,9.5z M12.8,7.9c0.2,0,0.4,0.2,0.4,0.4c0,0.2-0.2,0.4-0.4,0.4\n\t\tc-0.2,0-0.4-0.2-0.4-0.4C12.4,8.1,12.6,7.9,12.8,7.9z\"/>\n\t<path fill=\"#868686\" stroke=\"#868686\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M7.2,9.5c0.6,0,1.2-0.5,1.2-1.2\n\t\tc0-0.6-0.5-1.1-1.2-1.1c-0.6,0-1.1,0.5-1.1,1.1S6.6,9.5,7.2,9.5z M7.2,7.9c0.2,0,0.4,0.2,0.4,0.4c0,0.2-0.2,0.4-0.4,0.4\n\t\tC7,8.7,6.8,8.5,6.8,8.3C6.8,8.1,7,7.9,7.2,7.9z\"/>\n\t<path fill=\"#868686\" stroke=\"#868686\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M14.6,11.2c-0.1-0.1-0.2-0.2-0.3-0.2H5.7\n\t\tc-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.1,0.2,0,0.4c0.7,2,2.5,3.3,4.6,3.3s3.9-1.3,4.6-3.3C14.7,11.4,14.7,11.3,14.6,11.2z M10,14.1\n\t\tc-1.6,0-3-0.9-3.7-2.2h7.3C13,13.2,11.6,14.1,10,14.1z\"/>\n\t<path fill=\"#868686\" stroke=\"#868686\" stroke-width=\"0.1\" stroke-miterlimit=\"10\" d=\"M10,3c-3.8,0-7,3.1-7,7s3.1,7,7,7s7-3.1,7-7\n\t\tS13.8,3,10,3z M10,16.2c-3.4,0-6.2-2.8-6.2-6.2S6.6,3.8,10,3.8s6.2,2.8,6.2,6.2S13.4,16.2,10,16.2z\"/>\n</g>\n<g id=\"Car_00000018935395085413413750000000825273877842775715_\">\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M64.1,13.4l2.3,0c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.3\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4v-2.1C63.7,13.6,63.8,13.4,64.1,13.4z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M73.5,13.4h2.4c0.2,0,0.4,0.2,0.4,0.4v2.1c0,0.2-0.2,0.4-0.4,0.4h-2.4\n\t\t\t\tc-0.2,0-0.4-0.2-0.4-0.4l0-2.1C73.1,13.6,73.3,13.4,73.5,13.4z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M63.7,8.4h12.6v5H63.7V8.4z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M65.5,3.6h8.9c1,0,1.9,0.8,1.9,1.9v3.1H63.7V5.5C63.7,4.4,64.5,3.6,65.5,3.6z\"/>\n\t\t\t<ellipse fill=\"#868686\" cx=\"66.2\" cy=\"10.9\" rx=\"0.9\" ry=\"0.9\"/>\n\t\t\t<ellipse fill=\"#868686\" cx=\"73.8\" cy=\"10.9\" rx=\"0.9\" ry=\"0.9\"/>\n\t\t</g>\n\t</g>\n</g>\n<g id=\"Activities\">\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M96.4,10c0,3.6-2.9,6.5-6.4,6.5s-6.4-2.9-6.4-6.5s2.9-6.5,6.4-6.5S96.4,6.4,96.4,10z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M96.3,8.6c0,0,0,0.1,0,0.1c-0.9,0.1-2.9,0.1-4.6-1.2c-1.1-0.8-2-1.7-2.6-2.5\n\t\t\t\tc-0.3-0.4-0.6-0.8-0.7-1.1c-0.1-0.1-0.1-0.2-0.1-0.2c0.5-0.1,1.2-0.2,2-0.2c1.2,0,2.5,0.3,3.5,1.1c1,0.8,1.7,1.8,2.1,2.8\n\t\t\t\tC96.1,7.9,96.2,8.3,96.3,8.6z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M84,12.1c0,0,0-0.1,0-0.1c0.9-0.2,2.9-0.4,4.7,0.6c1.1,0.6,1.9,1.5,2.4,2.3\n\t\t\t\tc0.4,0.5,0.6,1,0.7,1.3c-0.4,0.1-1,0.2-1.7,0.3c-1,0-2.1-0.1-3.2-0.8c-1.1-0.6-1.9-1.6-2.4-2.5C84.2,12.8,84.1,12.4,84,12.1z\"/>\n\t\t</g>\n\t</g>\n</g>\n<g id=\"Objects_00000064312371739130315250000010225889032228632975_\">\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M116.3,6.8l-1.4,2L114.1,8l-0.6-0.7l0,0.9l-0.1,8.2h-6.8l-0.1-8.2\n\t\t\t\tl0-0.9L105.9,8l-0.8,0.8l-1.4-2l2.6-2.9c0.1-0.1,0.2-0.1,0.3-0.1h1.3l0.4,0.7c0.7,1.3,2.6,1.3,3.3-0.1l0.3-0.6h1.2\n\t\t\t\tc0.1,0,0.2,0,0.3,0.1l0.3-0.3l-0.3,0.3L116.3,6.8z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M110.1,7.7h2v0.9c0,0.4-0.4,0.7-1,0.7c-0.6,0-1-0.3-1-0.7L110.1,7.7L110.1,7.7z\"/>\n\t\t</g>\n\t</g>\n</g>\n<g id=\"Symbols_00000096746907869929921180000006484812830282582416_\">\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M126.8,14.3c0,1.2-1,2.2-2.2,2.2s-2.2-1-2.2-2.2s1-2.2,2.2-2.2S126.8,13.1,126.8,14.3z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M137.6,14.3c0,1.2-1,2.2-2.2,2.2c-1.2,0-2.2-1-2.2-2.2s1-2.2,2.2-2.2\n\t\t\t\tC136.6,12.1,137.6,13.1,137.6,14.3z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M126.8,4.4v9.9\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M137.7,4.4v9.9\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M126.8,3.5h10.8v2.7h-10.8C126.8,6.2,126.8,3.5,126.8,3.5z\"/>\n\t\t</g>\n\t</g>\n</g>\n<g id=\"Recents\">\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"#868686\" d=\"M170.8,3.1L170.8,3.1c-0.3,0-0.5,0-0.8,0c-2.1,0-4,1-5.3,2.5l-0.1,0l-0.1-0.1l-1-1.2l-0.3,3.4l3.4,0.3\n\t\t\t\tl-1.1-1.3l-0.1-0.1l0.1-0.1c1.1-1.4,3-2.3,5-2.1l0,0c3.2,0.3,5.5,3.1,5.2,6.3c-0.3,3-3.1,5.3-6.1,5.1c-3.1-0.2-5.4-2.9-5.3-6\n\t\t\t\tL163,9.5c-0.2,3.8,2.6,7.1,6.3,7.4c3.9,0.4,7.3-2.6,7.6-6.5C177.2,6.8,174.4,3.5,170.8,3.1z\"/>\n\t\t\t<path fill=\"#868686\" d=\"M170.3,7.4c0-0.3-0.3-0.6-0.6-0.6S169,7.1,169,7.4v3.2c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.4,0.2\n\t\t\t\th2.4c0.4,0,0.6-0.3,0.6-0.6s-0.3-0.6-0.6-0.6h-1.6h-0.2V9.8L170.3,7.4L170.3,7.4z\"/>\n\t\t</g>\n\t</g>\n</g>\n<g id=\"Custom_00000181087229434302336780000005152277945940674488_\">\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M186.2,3.4h7.7c1.5,0,2.7,1.2,2.7,2.7v7.7c0,1.5-1.2,2.7-2.7,2.7h-7.7\n\t\t\t\tc-1.5,0-2.7-1.2-2.7-2.7V6.1C183.4,4.6,184.7,3.4,186.2,3.4z\"/>\n\t\t\t<ellipse fill=\"#868686\" cx=\"186\" cy=\"8.9\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t\t<ellipse fill=\"#868686\" cx=\"194\" cy=\"6.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M186,13.3l0.4-0.3c0.4-0.3,1-0.3,1.5-0.1l1,0.4\n\t\t\t\tc0.5,0.2,1,0.2,1.5-0.1l0.8-0.5c0.4-0.3,1-0.3,1.5-0.1l1.8,0.8\"/>\n\t\t</g>\n\t</g>\n</g>\n<path fill=\"#868686\" stroke=\"#868686\" stroke-width=\"0.25\" stroke-miterlimit=\"10\" d=\"M156,4.3c-0.2-0.1-0.4-0.1-0.5,0\n\tc0,0-0.2,0.1-0.9,0.1c-0.7,0-2.4-0.1-3.8-0.6c-0.8-0.3-1.7-0.5-2.5-0.5c-0.2,0-0.4,0-0.5,0c-1.3,0-2.5,0.3-3.6,1\n\tc-0.2,0.1-0.2,0.2-0.2,0.4v11.6c0,0.3,0.1,0.5,0.3,0.5c0.6,0,0.5-0.4,0.5-0.6v-5.7c0.7-0.3,3.2-1.1,5.8-0.1c1.6,0.6,3.5,0.7,4.3,0.7\n\tc0.8,0,1.3-0.3,1.3-0.3c0.2-0.1,0.3-0.2,0.3-0.4V4.7C156.2,4.5,156.1,4.4,156,4.3z M155.6,10.2c-0.1,0-0.7,0.1-1,0.1\n\tc-0.7,0-2.4-0.1-3.8-0.6c-2.5-1-5-0.5-6.2-0.1V4.7c0.9-0.5,2.2-0.7,3.2-0.7c0.1,0,0.3,0,0.4,0c0.7,0,1.5,0.2,2.2,0.4\n\tc1.6,0.6,3.5,0.7,4.3,0.7c0.2,0,0.8,0,1-0.1V10.2z\"/>\n<g id=\"Food\">\n\t<g id=\"Layer_12\">\n\t\t<g>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M48.1,3.5h3.7c2.5,0,4.5,2,4.5,4.5c0,0.5-0.4,0.9-0.9,0.9H44.5c-0.5,0-0.9-0.4-0.9-0.9\n\t\t\t\tC43.6,5.5,45.6,3.5,48.1,3.5z\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M43.5,8.7c-0.2,0.1-0.5,1.2,0,1.5c1.4,0.9,8.5,0.8,11.3,0.6\n\t\t\t\tc0.8-0.1,1.6-0.4,1.7-1.2c0-0.3-0.1-0.6-0.6-0.9\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M43.5,10.6L43.3,11c-0.2,0.5,0.2,1,0.7,0.9\n\t\t\t\tc0.3-0.1,0.5,0.1,0.7,0.3l0.1,0.2c0.3,0.5,1,0.6,1.5,0.2l0,0c0.3-0.2,0.7-0.3,1-0.2l0.8,0.3c0.4,0.1,0.8,0.1,1.2,0l0.5-0.2\n\t\t\t\tc0.4-0.2,0.9-0.2,1.3,0l0.5,0.2c0.4,0.2,0.8,0.1,1.2-0.1l0.2-0.1c0.3-0.2,0.8-0.1,1.1,0.1l0.2,0.2c0.3,0.3,0.8,0.2,1-0.2l0.1-0.2\n\t\t\t\tc0.1-0.2,0-0.3,0.2-0.4c0.5,0,1.2-0.3,1.1-0.7l-0.4-1.1\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M43.5,12.1c-0.1,0.2-0.3,0.8,0,1.1c0.3,0.4,3,1.1,6.4,1.1\n\t\t\t\tc2.2,0,4.6-0.3,6-0.6c0.5-0.1,0.9-0.4,0.8-0.9c0-0.2-0.2-0.5-0.4-0.7\"/>\n\t\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M43.5,13.3c0,0.5,0.6,2.4,1.3,2.6c1.8,0.8,5.7,0.7,8.1,0.5\n\t\t\t\tc1.3-0.1,2.5-0.7,3.2-1.8c0.3-0.5,0.5-1,0.5-1.4\"/>\n\t\t\t<ellipse fill=\"#868686\" cx=\"51.6\" cy=\"6.5\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t\t<ellipse fill=\"#868686\" cx=\"53\" cy=\"4.9\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t\t<ellipse fill=\"#868686\" cx=\"53\" cy=\"7.2\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t\t<ellipse fill=\"#868686\" cx=\"54.3\" cy=\"6.5\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t\t<ellipse fill=\"#868686\" cx=\"50.9\" cy=\"4.9\" rx=\"0.3\" ry=\"0.4\"/>\n\t\t</g>\n\t</g>\n</g>\n<g id=\"Animals\">\n\t<g>\n\t\t<path fill=\"none\" stroke=\"#868686\" d=\"M24.2,11V3.5c0.1,0.1,0.8,0.9,2.8,3.1c2.5-1.7,5.6-0.7,6.9,0l2.4-3.1v7.1\n\t\t\tc0,1.2-0.1,2.5-0.9,3.4c-1,1.2-2.7,2.5-5.3,2.5c-2.9,0-4.5-1.5-5.3-2.9C24.2,12.9,24.2,11.9,24.2,11z\"/>\n\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M21.2,10l5.4,1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M21.2,14.1l5.4-1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M38.8,10l-5.4,1.2\"/>\n\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M38.8,14.1l-5.4-1.2\"/>\n\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#868686\" d=\"M29.5,12.4L29,11.7c-0.2-0.3,0-0.6,0.3-0.6h1.4\n\t\t\tc0.3,0,0.5,0.4,0.3,0.6l-0.7,1l0,0c-0.7,1.2-2.6,1.1-3.1-0.3l-0.1-0.2c-0.1-0.2,0-0.4,0.2-0.5s0.4,0,0.5,0.2l0.1,0.2\n\t\t\tC28.3,12.7,29.1,12.9,29.5,12.4z\"/>\n\t\t<path fill=\"none\" stroke=\"#868686\" stroke-linecap=\"round\" d=\"M32.4,12.1l-0.1,0.2c-0.4,1-1.8,1.1-2.3,0.2\"/>\n\t\t<ellipse fill=\"#868686\" cx=\"27.6\" cy=\"9.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t\t<ellipse fill=\"#868686\" cx=\"32.4\" cy=\"9.7\" rx=\"0.7\" ry=\"0.7\"/>\n\t</g>\n</g>\n</svg>\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport './CategoryNavigation.css';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport {\n categoryFromCategoryConfig,\n categoryNameFromCategoryConfig\n} from '../../config/categoryConfig';\nimport { useCategoriesConfig } from '../../config/useConfig';\nimport { useActiveCategoryScrollDetection } from '../../hooks/useActiveCategoryScrollDetection';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useScrollCategoryIntoView } from '../../hooks/useScrollCategoryIntoView';\nimport { useShouldHideCustomEmojis } from '../../hooks/useShouldHideCustomEmojis';\nimport { isCustomCategory } from '../../typeRefinements/typeRefinements';\nimport { Button } from '../atoms/Button';\nimport { useCategoryNavigationRef } from '../context/ElementRefContext';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport IcnNav from './svg/CategoryNav.svg';\n\nexport function CategoryNavigation() {\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const scrollCategoryIntoView = useScrollCategoryIntoView();\n useActiveCategoryScrollDetection(setActiveCategory);\n const isSearchMode = useIsSearchMode();\n\n const categoriesConfig = useCategoriesConfig();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const hideCustomCategory = useShouldHideCustomEmojis();\n\n return (\n <div\n className={cx(styles.nav)}\n role=\"tablist\"\n aria-label=\"Category navigation\"\n id=\"epr-category-nav-id\"\n ref={CategoryNavigationRef}\n >\n {categoriesConfig.map(categoryConfig => {\n const category = categoryFromCategoryConfig(categoryConfig);\n const isActiveCategory = category === activeCategory;\n\n if (isCustomCategory(categoryConfig) && hideCustomCategory) {\n return null;\n }\n\n return (\n <Button\n tabIndex={isSearchMode || isActiveCategory ? -1 : 0}\n className={cx(styles.catBtn, `epr-icn-${category}`, {\n [ClassNames.active]: isActiveCategory\n })}\n key={category}\n onClick={() => {\n setActiveCategory(category);\n scrollCategoryIntoView(category);\n }}\n aria-label={categoryNameFromCategoryConfig(categoryConfig)}\n aria-selected={isActiveCategory}\n role=\"tab\"\n aria-controls=\"epr-category-nav-id\"\n />\n );\n })}\n </div>\n );\n}\n\nconst styles = stylesheet.create({\n nav: {\n '.': 'epr-category-nav',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-around',\n padding: 'var(--epr-header-padding)'\n },\n '.epr-search-active': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n },\n '.epr-main:has(input:not(:placeholder-shown))': {\n nav: {\n opacity: '0.3',\n cursor: 'default',\n pointerEvents: 'none'\n }\n },\n catBtn: {\n '.': 'epr-cat-btn',\n display: 'inline-block',\n transition: 'opacity 0.2s ease-in-out',\n position: 'relative',\n height: 'var(--epr-category-navigation-button-size)',\n width: 'var(--epr-category-navigation-button-size)',\n backgroundSize: 'calc(var(--epr-category-navigation-button-size) * 10)',\n outline: 'none',\n backgroundImage: `url(${IcnNav})`,\n backgroundPosition: '0 0',\n ':focus:before': {\n content: '',\n position: 'absolute',\n top: '-2px',\n left: '-2px',\n right: '-2px',\n bottom: '-2px',\n border: '2px solid var(--epr-category-icon-active-color)',\n borderRadius: '50%'\n }\n }\n});\n","import * as React from 'react';\n\nimport { ClassNames, asSelectors } from '../../DomUtils/classNames';\nimport { getNormalizedSearchTerm } from '../../hooks/useFilter';\n\nconst SCOPE = `${asSelectors(ClassNames.emojiPicker)} ${asSelectors(\n ClassNames.emojiList\n)}`;\n\nconst EMOJI_BUTTON = ['button', asSelectors(ClassNames.emoji)].join('');\nconst CATEGORY = asSelectors(ClassNames.category);\n\nexport function CssSearch({ value }: { value: undefined | string }) {\n if (!value) {\n return null;\n }\n\n const q = genQuery(value);\n\n return (\n <style>{`\n ${SCOPE} ${EMOJI_BUTTON} {\n display: none;\n }\n\n\n ${SCOPE} ${q} {\n display: flex;\n }\n\n ${SCOPE} ${CATEGORY}:not(:has(${q})) {\n display: none;\n }\n `}</style>\n );\n}\n\nfunction genQuery(value: string): string {\n return [\n EMOJI_BUTTON,\n '[data-full-name*=\"',\n getNormalizedSearchTerm(value),\n '\"]'\n ].join('');\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useAutoFocusSearchConfig,\n useSearchDisabledConfig,\n useSearchPlaceHolderConfig\n} from '../../config/useConfig';\nimport { useCloseAllOpenToggles } from '../../hooks/useCloseAllOpenToggles';\nimport { useClearSearch, useFilter } from '../../hooks/useFilter';\nimport { useIsSkinToneInSearch } from '../../hooks/useShouldShowSkinTonePicker';\nimport Flex from '../Layout/Flex';\nimport Relative from '../Layout/Relative';\nimport { Button } from '../atoms/Button';\nimport { useSearchInputRef } from '../context/ElementRefContext';\n\nimport './Search.css';\nimport { CssSearch } from './CssSearch';\nimport { SkinTonePicker } from './SkinTonePicker';\n\nexport function SearchContainer() {\n const searchDisabled = useSearchDisabledConfig();\n\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n if (searchDisabled) {\n return null;\n }\n\n return (\n <Flex className={cx(styles.overlay)}>\n <Search />\n\n {isSkinToneInSearch ? <SkinTonePicker /> : null}\n </Flex>\n );\n}\n\nconst styles = stylesheet.create({\n overlay: {\n padding: 'var(--epr-header-padding)',\n zIndex: 'var(--epr-header-overlay-z-index)'\n }\n});\n\nexport function Search() {\n const [inc, setInc] = useState(0);\n const closeAllOpenToggles = useCloseAllOpenToggles();\n const SearchInputRef = useSearchInputRef();\n const clearSearch = useClearSearch();\n const placeholder = useSearchPlaceHolderConfig();\n const autoFocus = useAutoFocusSearchConfig();\n const { statusSearchResults, searchTerm, onChange } = useFilter();\n\n const input = SearchInputRef?.current;\n const value = input?.value;\n\n return (\n <Relative className=\"epr-search-container\">\n <CssSearch value={value} />\n <input\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-label={'Type to search for an emoji'}\n onFocus={closeAllOpenToggles}\n className=\"epr-search\"\n type=\"text\"\n aria-controls=\"epr-search-id\"\n placeholder={placeholder}\n onChange={event => {\n setInc(inc + 1);\n setTimeout(() => {\n onChange(event?.target?.value ?? value);\n });\n }}\n ref={SearchInputRef}\n />\n {searchTerm ? (\n <div\n role=\"status\"\n className={cx(\n 'epr-status-search-results',\n 'epr-status-visually-hidden'\n )}\n aria-live=\"polite\"\n id=\"epr-search-id\"\n aria-atomic=\"true\"\n >\n {statusSearchResults}\n </div>\n ) : null}\n <div className=\"epr-icn-search\" />\n <Button\n className={cx('epr-btn-clear-search', 'epr-visible-on-search-only')}\n onClick={clearSearch}\n aria-label=\"Clear\"\n title=\"Clear\"\n >\n <div className=\"epr-icn-clear-search\" />\n </Button>\n </Relative>\n );\n}\n","import * as React from 'react';\n\nimport Relative from '../Layout/Relative';\nimport { CategoryNavigation } from '../navigation/CategoryNavigation';\n\nimport { SearchContainer } from './Search';\n\nexport function Header() {\n return (\n <Relative className=\"epr-header\">\n <SearchContainer />\n <CategoryNavigation />\n </Relative>\n );\n}\n","import { NullableElement } from './selectors';\n\nexport function getActiveElement() {\n return document.activeElement as NullableElement;\n}\n","import { useCallback, useEffect, useMemo } from 'react';\n\nimport { hasNextElementSibling } from '../DomUtils/elementPositionInRow';\nimport {\n focusNextElementSibling,\n focusPrevElementSibling\n} from '../DomUtils/focusElement';\nimport { getActiveElement } from '../DomUtils/getActiveElement';\nimport {\n focusAndClickFirstVisibleEmoji,\n focusFirstVisibleEmoji,\n focusNextVisibleEmoji,\n focusPrevVisibleEmoji,\n focusVisibleEmojiOneRowDown,\n focusVisibleEmojiOneRowUp\n} from '../DomUtils/keyboardNavigation';\nimport { useScrollTo } from '../DomUtils/scrollTo';\nimport { buttonFromTarget } from '../DomUtils/selectors';\nimport {\n useBodyRef,\n useCategoryNavigationRef,\n usePickerMainRef,\n useSearchInputRef,\n useSkinTonePickerRef\n} from '../components/context/ElementRefContext';\nimport { useSkinToneFanOpenState } from '../components/context/PickerContext';\nimport { useSearchDisabledConfig } from '../config/useConfig';\n\nimport {\n useCloseAllOpenToggles,\n useHasOpenToggles\n} from './useCloseAllOpenToggles';\nimport { useDisallowMouseMove } from './useDisallowMouseMove';\nimport { useAppendSearch, useClearSearch } from './useFilter';\nimport {\n useFocusCategoryNavigation,\n useFocusSearchInput,\n useFocusSkinTonePicker\n} from './useFocus';\nimport useIsSearchMode from './useIsSearchMode';\nimport useSetVariationPicker from './useSetVariationPicker';\nimport {\n useIsSkinToneInPreview,\n useIsSkinToneInSearch\n} from './useShouldShowSkinTonePicker';\n\nenum KeyboardEvents {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n Escape = 'Escape',\n Enter = 'Enter',\n Space = ' '\n}\n\nexport function useKeyboardNavigation() {\n usePickerMainKeyboardEvents();\n useSearchInputKeyboardEvents();\n useSkinTonePickerKeyboardEvents();\n useCategoryNavigationKeyboardEvents();\n useBodyKeyboardEvents();\n}\n\nfunction usePickerMainKeyboardEvents() {\n const PickerMainRef = usePickerMainRef();\n const clearSearch = useClearSearch();\n const scrollTo = useScrollTo();\n const SearchInputRef = useSearchInputRef();\n const focusSearchInput = useFocusSearchInput();\n const hasOpenToggles = useHasOpenToggles();\n const disallowMouseMove = useDisallowMouseMove();\n\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n disallowMouseMove();\n switch (key) {\n // eslint-disable-next-line no-fallthrough\n case KeyboardEvents.Escape:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n return;\n }\n clearSearch();\n scrollTo(0);\n focusSearchInput();\n break;\n }\n },\n [\n scrollTo,\n clearSearch,\n closeAllOpenToggles,\n focusSearchInput,\n hasOpenToggles,\n disallowMouseMove\n ]\n );\n\n useEffect(() => {\n const current = PickerMainRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, scrollTo, onKeyDown]);\n}\n\nfunction useSearchInputKeyboardEvents() {\n const focusSkinTonePicker = useFocusSkinTonePicker();\n const PickerMainRef = usePickerMainRef();\n const BodyRef = useBodyRef();\n const SearchInputRef = useSearchInputRef();\n const [, setSkinToneFanOpenState] = useSkinToneFanOpenState();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n if (!isSkinToneInSearch) {\n return;\n }\n event.preventDefault();\n setSkinToneFanOpenState(true);\n focusSkinTonePicker();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n goDownFromSearchInput();\n break;\n case KeyboardEvents.Enter:\n event.preventDefault();\n focusAndClickFirstVisibleEmoji(BodyRef.current);\n break;\n }\n },\n [\n focusSkinTonePicker,\n goDownFromSearchInput,\n setSkinToneFanOpenState,\n BodyRef,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SearchInputRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [PickerMainRef, SearchInputRef, onKeyDown]);\n}\n\nfunction useSkinTonePickerKeyboardEvents() {\n const SkinTonePickerRef = useSkinTonePickerRef();\n const focusSearchInput = useFocusSearchInput();\n const SearchInputRef = useSearchInputRef();\n const goDownFromSearchInput = useGoDownFromSearchInput();\n const [isOpen, setIsOpen] = useSkinToneFanOpenState();\n const isSkinToneInPreview = useIsSkinToneInPreview();\n const isSkinToneInSearch = useIsSkinToneInSearch();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n if (isSkinToneInSearch) {\n switch (key) {\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n }\n goDownFromSearchInput();\n break;\n default:\n onType(event);\n break;\n }\n }\n\n if (isSkinToneInPreview) {\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusNextSkinTone(focusSearchInput);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (!isOpen) {\n return focusSearchInput();\n }\n focusPrevSkinTone();\n break;\n default:\n onType(event);\n break;\n }\n }\n },\n [\n isOpen,\n focusSearchInput,\n setIsOpen,\n goDownFromSearchInput,\n onType,\n isSkinToneInPreview,\n isSkinToneInSearch\n ]\n );\n\n useEffect(() => {\n const current = SkinTonePickerRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [SkinTonePickerRef, SearchInputRef, isOpen, onKeyDown]);\n}\n\nfunction useCategoryNavigationKeyboardEvents() {\n const focusSearchInput = useFocusSearchInput();\n const CategoryNavigationRef = useCategoryNavigationRef();\n const BodyRef = useBodyRef();\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n switch (key) {\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n focusSearchInput();\n break;\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevElementSibling(getActiveElement());\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n focusFirstVisibleEmoji(BodyRef.current);\n break;\n default:\n onType(event);\n break;\n }\n },\n [BodyRef, focusSearchInput, onType]\n );\n\n useEffect(() => {\n const current = CategoryNavigationRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [CategoryNavigationRef, BodyRef, onKeyDown]);\n}\n\nfunction useBodyKeyboardEvents() {\n const BodyRef = useBodyRef();\n const goUpFromBody = useGoUpFromBody();\n const setVariationPicker = useSetVariationPicker();\n const hasOpenToggles = useHasOpenToggles();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n const onType = useOnType();\n\n const onKeyDown = useMemo(\n () =>\n // eslint-disable-next-line complexity\n function onKeyDown(event: KeyboardEvent) {\n const { key } = event;\n\n const activeElement = buttonFromTarget(getActiveElement());\n\n switch (key) {\n case KeyboardEvents.ArrowRight:\n event.preventDefault();\n focusNextVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowLeft:\n event.preventDefault();\n focusPrevVisibleEmoji(activeElement);\n break;\n case KeyboardEvents.ArrowDown:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowDown(activeElement);\n break;\n case KeyboardEvents.ArrowUp:\n event.preventDefault();\n if (hasOpenToggles()) {\n closeAllOpenToggles();\n break;\n }\n focusVisibleEmojiOneRowUp(activeElement, goUpFromBody);\n break;\n case KeyboardEvents.Space:\n event.preventDefault();\n setVariationPicker(event.target as HTMLElement);\n break;\n default:\n onType(event);\n break;\n }\n },\n [\n goUpFromBody,\n onType,\n setVariationPicker,\n hasOpenToggles,\n closeAllOpenToggles\n ]\n );\n\n useEffect(() => {\n const current = BodyRef.current;\n\n if (!current) {\n return;\n }\n\n current.addEventListener('keydown', onKeyDown);\n\n return () => {\n current.removeEventListener('keydown', onKeyDown);\n };\n }, [BodyRef, onKeyDown]);\n}\n\nfunction useGoDownFromSearchInput() {\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n const BodyRef = useBodyRef();\n\n return useCallback(\n function goDownFromSearchInput() {\n if (isSearchMode) {\n return focusFirstVisibleEmoji(BodyRef.current);\n }\n return focusCategoryNavigation();\n },\n [BodyRef, focusCategoryNavigation, isSearchMode]\n );\n}\n\nfunction useGoUpFromBody() {\n const focusSearchInput = useFocusSearchInput();\n const focusCategoryNavigation = useFocusCategoryNavigation();\n const isSearchMode = useIsSearchMode();\n\n return useCallback(\n function goUpFromEmoji() {\n if (isSearchMode) {\n return focusSearchInput();\n }\n return focusCategoryNavigation();\n },\n [focusSearchInput, isSearchMode, focusCategoryNavigation]\n );\n}\n\nfunction focusNextSkinTone(exitLeft: () => void) {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n if (!hasNextElementSibling(currentSkinTone)) {\n exitLeft();\n }\n\n focusNextElementSibling(currentSkinTone);\n}\n\nfunction focusPrevSkinTone() {\n const currentSkinTone = getActiveElement();\n\n if (!currentSkinTone) {\n return;\n }\n\n focusPrevElementSibling(currentSkinTone);\n}\n\nfunction useOnType() {\n const appendSearch = useAppendSearch();\n const focusSearchInput = useFocusSearchInput();\n const searchDisabled = useSearchDisabledConfig();\n const closeAllOpenToggles = useCloseAllOpenToggles();\n\n return function onType(event: KeyboardEvent) {\n const { key } = event;\n\n if (hasModifier(event) || searchDisabled) {\n return;\n }\n\n if (key.match(/(^[a-zA-Z0-9]$){1}/)) {\n event.preventDefault();\n closeAllOpenToggles();\n focusSearchInput();\n appendSearch(key);\n }\n };\n}\n\nfunction hasModifier(event: KeyboardEvent): boolean {\n const { metaKey, ctrlKey, altKey } = event;\n\n return metaKey || ctrlKey || altKey;\n}\n","import { GetEmojiUrl } from '../components/emoji/BaseEmojiProps';\nimport { DataEmoji } from '../dataUtils/DataTypes';\nimport { emojiUnified, emojiVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nexport function preloadEmoji(\n getEmojiUrl: GetEmojiUrl,\n emoji: undefined | DataEmoji,\n emojiStyle: EmojiStyle\n): void {\n if (!emoji) {\n return;\n }\n\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const unified = emojiUnified(emoji);\n\n if (preloadedEmojs.has(unified)) {\n return;\n }\n\n emojiVariations(emoji).forEach((variation) => {\n const emojiUrl = getEmojiUrl(variation, emojiStyle);\n preloadImage(emojiUrl);\n });\n\n preloadedEmojs.add(unified);\n}\n\nexport const preloadedEmojs: Set<string> = new Set();\n\nfunction preloadImage(url: string): void {\n const image = new Image();\n image.src = url;\n}\n","import { useEffect } from 'react';\n\nimport { buttonFromTarget, emojiFromElement } from '../DomUtils/selectors';\nimport { useBodyRef } from '../components/context/ElementRefContext';\nimport { useEmojiStyleConfig, useGetEmojiUrlConfig } from '../config/useConfig';\nimport { emojiHasVariations } from '../dataUtils/emojiSelectors';\nimport { EmojiStyle } from '../types/exposedTypes';\n\nimport { preloadEmoji } from './preloadEmoji';\n\nexport function useOnFocus() {\n const BodyRef = useBodyRef();\n const emojiStyle = useEmojiStyleConfig();\n const getEmojiUrl = useGetEmojiUrlConfig();\n\n useEffect(() => {\n if (emojiStyle === EmojiStyle.NATIVE) {\n return;\n }\n\n const bodyRef = BodyRef.current;\n\n bodyRef?.addEventListener('focusin', onFocus);\n\n return () => {\n bodyRef?.removeEventListener('focusin', onFocus);\n };\n\n function onFocus(event: FocusEvent) {\n const button = buttonFromTarget(event.target as HTMLElement);\n\n if (!button) {\n return;\n }\n\n const [emoji] = emojiFromElement(button);\n\n if (!emoji) {\n return;\n }\n\n if (emojiHasVariations(emoji)) {\n preloadEmoji(getEmojiUrl, emoji, emojiStyle);\n }\n }\n }, [BodyRef, emojiStyle, getEmojiUrl]);\n}\n","import { cx } from 'flairup';\nimport * as React from 'react';\n\nimport { ClassNames } from '../../DomUtils/classNames';\nimport { stylesheet } from '../../Stylesheet/stylesheet';\nimport {\n useClassNameConfig,\n useStyleConfig,\n useThemeConfig\n} from '../../config/useConfig';\nimport useIsSearchMode from '../../hooks/useIsSearchMode';\nimport { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation';\nimport { useOnFocus } from '../../hooks/useOnFocus';\nimport { Theme } from '../../types/exposedTypes';\nimport { usePickerMainRef } from '../context/ElementRefContext';\nimport { PickerContextProvider } from '../context/PickerContext';\n\ntype Props = Readonly<{\n children: React.ReactNode;\n}>;\n\nexport default function PickerMain({ children }: Props) {\n return (\n <PickerContextProvider>\n <PickerRootElement>{children}</PickerRootElement>\n </PickerContextProvider>\n );\n}\n\ntype RootProps = Readonly<{\n className?: string;\n style?: React.CSSProperties;\n children: React.ReactNode;\n}>;\n\nfunction PickerRootElement({ children }: RootProps) {\n const theme = useThemeConfig();\n const searchModeActive = useIsSearchMode();\n const PickerMainRef = usePickerMainRef();\n const className = useClassNameConfig();\n const style = useStyleConfig();\n\n useKeyboardNavigation();\n useOnFocus();\n\n return (\n <aside\n className={cx(\n styles.main,\n styles.baseVariables,\n theme === Theme.DARK && styles.darkTheme,\n theme === Theme.AUTO && styles.autoThemeDark,\n {\n [ClassNames.searchActive]: searchModeActive\n },\n className\n )}\n ref={PickerMainRef}\n style={style}\n >\n {children}\n </aside>\n );\n}\n\nconst DarkTheme = {\n '--epr-emoji-variation-picker-bg-color':\n 'var(--epr-dark-emoji-variation-picker-bg-color)',\n '--epr-highlight-color': 'var(--epr-dark-highlight-color)',\n '--epr-text-color': 'var(--epr-dark-text-color)',\n '--epr-hover-bg-color': 'var(--epr-dark-hover-bg-color)',\n '--epr-focus-bg-color': 'var(--epr-dark-focus-bg-color)',\n '--epr-search-input-bg-color': 'var(--epr-dark-search-input-bg-color)',\n '--epr-category-label-bg-color': 'var(--epr-dark-category-label-bg-color)',\n '--epr-picker-border-color': 'var(--epr-dark-picker-border-color)',\n '--epr-bg-color': 'var(--epr-dark-bg-color)',\n '--epr-search-input-bg-color-active':\n 'var(--epr-dark-search-input-bg-color-active)',\n '--epr-emoji-variation-indicator-color':\n 'var(--epr-dark-emoji-variation-indicator-color)',\n '--epr-category-icon-active-color':\n 'var(--epr-dark-category-icon-active-color)',\n '--epr-skin-tone-picker-menu-color':\n 'var(--epr-dark-skin-tone-picker-menu-color)'\n};\n\nconst styles = stylesheet.create({\n main: {\n '.': ['epr-main', ClassNames.emojiPicker],\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: 'var(--epr-picker-border-radius)',\n borderColor: 'var(--epr-picker-border-color)',\n backgroundColor: 'var(--epr-bg-color)',\n overflow: 'hidden'\n },\n baseVariables: {\n '--': {\n '--epr-highlight-color': '#007aeb',\n '--epr-hover-bg-color': '#f1f8ff',\n '--epr-focus-bg-color': '#e0f0ff',\n '--epr-text-color': '#858585',\n '--epr-search-input-bg-color': '#f6f6f6',\n '--epr-picker-border-color': '#e7e7e7',\n '--epr-bg-color': '#fff',\n '--epr-category-icon-active-color': '#6aa8de',\n '--epr-skin-tone-picker-menu-color': '#ffffff95',\n\n '--epr-horizontal-padding': '10px',\n\n '--epr-picker-border-radius': '8px',\n\n /* Header */\n '--epr-search-border-color': 'var(--epr-highlight-color)',\n '--epr-header-padding': '15px var(--epr-horizontal-padding)',\n\n /* Skin Tone Picker */\n '--epr-active-skin-tone-indicator-border-color':\n 'var(--epr-highlight-color)',\n '--epr-active-skin-hover-color': 'var(--epr-hover-bg-color)',\n\n /* Search */\n '--epr-search-input-bg-color-active': 'var(--epr-search-input-bg-color)',\n '--epr-search-input-padding': '0 30px',\n '--epr-search-input-border-radius': '8px',\n '--epr-search-input-height': '40px',\n '--epr-search-input-text-color': 'var(--epr-text-color)',\n '--epr-search-input-placeholder-color': 'var(--epr-text-color)',\n '--epr-search-bar-inner-padding': 'var(--epr-horizontal-padding)',\n\n /* Category Navigation */\n '--epr-category-navigation-button-size': '30px',\n\n /* Variation Picker */\n '--epr-emoji-variation-picker-height': '45px',\n '--epr-emoji-variation-picker-bg-color': 'var(--epr-bg-color)',\n\n /* Preview */\n '--epr-preview-height': '70px',\n '--epr-preview-text-size': '14px',\n '--epr-preview-text-padding': '0 var(--epr-horizontal-padding)',\n '--epr-preview-border-color': 'var(--epr-picker-border-color)',\n '--epr-preview-text-color': 'var(--epr-text-color)',\n\n /* Category */\n '--epr-category-padding': '0 var(--epr-horizontal-padding)',\n\n /* Category Label */\n '--epr-category-label-bg-color': '#ffffffe6',\n '--epr-category-label-text-color': 'var(--epr-text-color)',\n '--epr-category-label-padding': '0 var(--epr-horizontal-padding)',\n '--epr-category-label-height': '40px',\n\n /* Emoji */\n '--epr-emoji-size': '30px',\n '--epr-emoji-padding': '5px',\n '--epr-emoji-fullsize':\n 'calc(var(--epr-emoji-size) + var(--epr-emoji-padding) * 2)',\n '--epr-emoji-hover-color': 'var(--epr-hover-bg-color)',\n '--epr-emoji-variation-indicator-color': 'var(--epr-picker-border-color)',\n '--epr-emoji-variation-indicator-color-hover': 'var(--epr-text-color)',\n\n /* Z-Index */\n '--epr-header-overlay-z-index': '3',\n '--epr-emoji-variations-indictator-z-index': '1',\n '--epr-category-label-z-index': '2',\n '--epr-skin-variation-picker-z-index': '5',\n '--epr-preview-z-index': '6',\n\n /* Dark Theme Variables */\n '--epr-dark': '#000',\n '--epr-dark-emoji-variation-picker-bg-color': 'var(--epr-dark)',\n '--epr-dark-highlight-color': '#c0c0c0',\n '--epr-dark-text-color': 'var(--epr-highlight-color)',\n '--epr-dark-hover-bg-color': '#363636f6',\n '--epr-dark-focus-bg-color': '#474747',\n '--epr-dark-search-input-bg-color': '#333333',\n '--epr-dark-category-label-bg-color': '#222222e6',\n '--epr-dark-picker-border-color': '#151617',\n '--epr-dark-bg-color': '#222222',\n '--epr-dark-search-input-bg-color-active': 'var(--epr-dark)',\n '--epr-dark-emoji-variation-indicator-color': '#444',\n '--epr-dark-category-icon-active-color': '#3271b7',\n '--epr-dark-skin-tone-picker-menu-color': '#22222295'\n }\n },\n autoThemeDark: {\n '.': ClassNames.autoTheme,\n '@media (prefers-color-scheme: dark)': {\n '--': DarkTheme\n }\n },\n darkTheme: {\n '.': ClassNames.darkTheme,\n '--': DarkTheme\n }\n});\n","import * as React from 'react';\n\nimport { Body } from './components/body/Body';\nimport { ElementRefContextProvider } from './components/context/ElementRefContext';\nimport { PickerConfigProvider } from './components/context/PickerConfigContext';\nimport { Preview } from './components/footer/Preview';\nimport { Header } from './components/header/Header';\nimport PickerMain from './components/main/PickerMain';\n\nimport './EmojiPickerReact.css';\nimport { PickerProps } from './index';\n\nfunction EmojiPicker(props: PickerProps) {\n return (\n <ElementRefContextProvider>\n <PickerConfigProvider {...props}>\n <PickerMain>\n <Header />\n <Body />\n <Preview />\n </PickerMain>\n </PickerConfigProvider>\n </ElementRefContextProvider>\n );\n}\n\n// eslint-disable-next-line complexity\nexport default React.memo(EmojiPicker, (prev, next) => {\n const prevCustomEmojis = prev.customEmojis ?? [];\n const nextCustomEmojis = next.customEmojis ?? [];\n return (\n prev.emojiVersion === next.emojiVersion &&\n prev.searchPlaceHolder === next.searchPlaceHolder &&\n prev.searchPlaceholder === next.searchPlaceholder &&\n prev.defaultSkinTone === next.defaultSkinTone &&\n prev.skinTonesDisabled === next.skinTonesDisabled &&\n prev.autoFocusSearch === next.autoFocusSearch &&\n prev.emojiStyle === next.emojiStyle &&\n prev.theme === next.theme &&\n prev.suggestedEmojisMode === next.suggestedEmojisMode &&\n prev.lazyLoadEmojis === next.lazyLoadEmojis &&\n prev.className === next.className &&\n prev.height === next.height &&\n prev.width === next.width &&\n prev.style === next.style &&\n prev.searchDisabled === next.searchDisabled &&\n prev.skinTonePickerLocation === next.skinTonePickerLocation &&\n prevCustomEmojis.length === nextCustomEmojis.length\n );\n});\n","import * as React from 'react';\n\nexport default class ErrorBoundary extends React.Component<\n { children: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: { children: React.ReactNode }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: any) {\n // eslint-disable-next-line no-console\n console.error('Emoji Picker React failed to render:', error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}\n","import * as React from 'react';\n\nimport { EmojiStyle } from '../../types/exposedTypes';\n\nimport { GetEmojiUrl } from './BaseEmojiProps';\nimport { ViewOnlyEmoji } from './ViewOnlyEmoji';\n\nexport function ExportedEmoji({\n unified,\n size = 32,\n emojiStyle = EmojiStyle.APPLE,\n lazyLoad = false,\n getEmojiUrl,\n emojiUrl\n}: {\n unified: string;\n emojiStyle?: EmojiStyle;\n size?: number;\n lazyLoad?: boolean;\n getEmojiUrl?: GetEmojiUrl;\n emojiUrl?: string;\n}) {\n if (!unified && !emojiUrl && !getEmojiUrl) {\n return null;\n }\n\n return (\n <ViewOnlyEmoji\n unified={unified}\n size={size}\n emojiStyle={emojiStyle}\n lazyLoad={lazyLoad}\n getEmojiUrl={emojiUrl ? () => emojiUrl : getEmojiUrl}\n />\n );\n}\n","import * as React from 'react';\n\nimport EmojiPickerReact from './EmojiPickerReact';\nimport ErrorBoundary from './components/ErrorBoundary';\nimport { PickerConfig } from './config/config';\nimport {\n MutableConfigContext,\n useDefineMutableConfig\n} from './config/mutableConfig';\n\nexport { ExportedEmoji as Emoji } from './components/emoji/ExportedEmoji';\n\nexport {\n EmojiStyle,\n SkinTones,\n Theme,\n Categories,\n EmojiClickData,\n SuggestionMode,\n SkinTonePickerLocation\n} from './types/exposedTypes';\n\nexport interface PickerProps extends PickerConfig {}\n\nexport default function EmojiPicker(props: PickerProps) {\n const MutableConfigRef = useDefineMutableConfig({\n onEmojiClick: props.onEmojiClick\n });\n\n return (\n <ErrorBoundary>\n <MutableConfigContext.Provider value={MutableConfigRef}>\n <EmojiPickerReact {...props} />\n </MutableConfigContext.Provider>\n </ErrorBoundary>\n );\n}\n"],"names":["ClassNames","asSelectors","classNames","map","c","join","stylesheet","createSheet","commonStyles","create","hidden","display","opacity","pointerEvents","visibility","hiddenOnSearch","focusElement","element","requestAnimationFrame","focus","focusPrevElementSibling","prev","previousElementSibling","focusNextElementSibling","next","nextElementSibling","focusFirstElementChild","first","firstElementChild","ElementRefContextProvider","children","PickerMainRef","React","AnchoredEmojiRef","BodyRef","SearchInputRef","SkinTonePickerRef","CategoryNavigationRef","VariationPickerRef","ElementRefContext","Provider","value","useElementRef","usePickerMainRef","useAnchoredEmojiRef","useSetAnchoredEmojiRef","target","current","useBodyRef","useSearchInputRef","useSkinTonePickerRef","useCategoryNavigationRef","useVariationPickerRef","SuggestionMode","EmojiStyle","Theme","SkinTones","Categories","SkinTonePickerLocation","categoriesOrdered","SUGGESTED","CUSTOM","SMILEYS_PEOPLE","ANIMALS_NATURE","FOOD_DRINK","TRAVEL_PLACES","ACTIVITIES","OBJECTS","SYMBOLS","FLAGS","SuggestedRecent","name","category","configByCategory","baseCategoriesConfig","modifiers","categoryFromCategoryConfig","categoryNameFromCategoryConfig","mergeCategoriesConfig","userCategoriesConfig","extra","suggestionMode","RECENT","base","length","getBaseConfigByCategory","modifier","Object","assign","CDN_URL_APPLE","CDN_URL_FACEBOOK","CDN_URL_TWITTER","CDN_URL_GOOGLE","cdnUrl","emojiStyle","TWITTER","GOOGLE","FACEBOOK","APPLE","skinToneVariations","NEUTRAL","LIGHT","MEDIUM_LIGHT","MEDIUM","MEDIUM_DARK","DARK","skinTonesNamed","entries","reduce","acc","key","skinTonesMapped","mapped","skinTone","EmojiProperties","alphaNumericEmojiIndex","setTimeout","allEmojis","searchIndex","emoji","indexEmoji","joinedNameString","emojiNames","flat","toLowerCase","replace","split","forEach","char","emojiUnified","addedIn","parseFloat","added_in","emojiName","unifiedWithoutSkinTone","unified","splat","splice","emojiHasVariations","emojiVariationUnified","emojisByCategory","emojis","emojiUrlByUnified","emojiVariations","variations","find","variation","includes","emojiByUnified","allEmojisByUnified","withoutSkinTone","values","setCustomEmojis","customEmojis","emojiData","customToRegularEmoji","push","names","id","imgUrl","Emoji","activeVariationFromUnified","suspectedSkinTone","KNOWN_FAILING_EMOJIS","DEFAULT_SEARCH_PLACEHOLDER","SEARCH_RESULTS_NO_RESULTS_FOUND","SEARCH_RESULTS_SUFFIX","SEARCH_RESULTS_ONE_RESULT_FOUND","SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND","mergeConfig","userConfig","basePickerConfig","previewConfig","config","categories","suggestedEmojisMode","skinTonePickerLocation","searchDisabled","PREVIEW","autoFocusSearch","className","defaultSkinTone","emojiVersion","getEmojiUrl","height","lazyLoadEmojis","basePreviewConfig","searchPlaceHolder","searchPlaceholder","SEARCH","skinTonesDisabled","style","FREQUENT","theme","unicodeToHide","Set","width","defaultEmoji","defaultCaption","showPreview","ConfigContext","PickerConfigProvider","mergedConfig","useSetConfig","setMergedConfig","usePickerConfig","MutableConfigContext","createContext","useMutableConfig","mutableConfig","useContext","useDefineMutableConfig","MutableConfigRef","useRef","onEmojiClick","emptyFunc","useEffect","useSearchPlaceHolderConfig","p","useDefaultSkinToneConfig","useSkinTonesDisabledConfig","useEmojiStyleConfig","useAutoFocusSearchConfig","useCategoriesConfig","useCustomEmojisConfig","useOnEmojiClickConfig","usePreviewConfig","useThemeConfig","useSuggestedEmojisModeConfig","useLazyLoadEmojisConfig","useClassNameConfig","useStyleConfig","getDimension","useEmojiVersionConfig","useSearchDisabledConfig","useSkinTonePickerLocationConfig","useUnicodeToHide","useGetEmojiUrlConfig","dimensionConfig","useSearchResultsConfig","searchResultsCount","hasResults","isPlural","toString","useDebouncedState","initialValue","delay","useState","state","setState","timer","debouncedSetState","Promise","resolve","clearTimeout","window","useIsUnicodeHidden","has","useDisallowedEmojis","DisallowedEmojisRef","emojiVersionConfig","useMemo","Number","isNaN","disallowedEmojis","addedInNewerVersion","useIsEmojiDisallowed","isUnicodeHidden","isEmojiDisallowed","Boolean","supportedLevel","useMarkInitialLoad","dispatch","PickerContextProvider","filterRef","disallowClickRef","disallowMouseRef","disallowedEmojisRef","suggestedUpdateState","Date","now","searchTerm","skinToneFanOpenState","activeSkinTone","activeCategoryState","emojisThatFailedToLoadState","emojiVariationPickerState","isPastInitialLoad","setIsPastInitialLoad","PickerContext","undefined","useFilterRef","useDisallowClickRef","useDisallowMouseRef","useSearchTermState","useActiveSkinToneState","useEmojisThatFailedToLoadState","useIsPastInitialLoad","useEmojiVariationPickerState","useSkinToneFanOpenState","useUpdateSuggested","suggestedUpdated","setsuggestedUpdate","updateSuggested","useDisallowMouseMove","DisallowMouseRef","disallowMouseMove","useAllowMouseMove","allowMouseMove","useIsMouseDisallowed","isMouseDisallowed","useOnMouseMove","bodyRef","addEventListener","onMouseMove","passive","removeEventListener","elementCountInRow","parent","parentWidth","getBoundingClientRect","elementWidth","Math","floor","elementIndexInRow","elementLeft","left","parentLeft","rowNumber","elementHeight","elementTop","top","parentTop","round","hasNextRow","parentHeight","getRowElements","elements","row","elementsInRow","lastRow","firstElementIndex","lastElementIndex","slice","getNextRowElements","allElements","currentRow","nextRow","getElementInRow","indexInRow","rowElements","getElementInNextRow","index","nextRowElements","getElementInPrevRow","prevRowElements","firstVisibleElementInContainer","parentBottom","bottom","visibleElements","elementBottom","hasNextElementSibling","EmojiButtonSelector","VisibleEmojiSelector","visible","buttonFromTarget","emojiElement","closest","emojiFromElement","originalUnified","originalUnifiedFromEmojiElement","unifiedFromEmojiElement","isEmojiElement","matches","parentElement","clientHeight","emojiTrueOffsetTop","button","closestCategory","labelHeight","categoryLabelHeight","elementOffsetTop","categoryWithoutLabel","querySelector","categoryContent","isEmojiBehindLabel","emojiDistanceFromScrollTop","queryScrollBody","root","scrollBody","closestScrollBody","scrollTop","emojiTruOffsetLeft","elementOffsetLeft","offsetTop","offsetLeft","elementDataSetKey","elementDataSet","dataset","isVisibleEmoji","classList","contains","isHidden","allVisibleEmojis","Array","from","querySelectorAll","lastVisibleEmoji","last","prevVisibleEmoji","nextVisibleEmoji","firstVisibleEmoji","nextCategory","prevCategory","closestCategoryContent","parseNativeEmoji","hex","String","fromCodePoint","parseInt","SUGGESTED_LS_KEY","getSuggested","mode","localStorage","recent","JSON","parse","getItem","sort","a","b","count","setSuggested","existing","u","nextList","concat","filter","i","original","min","setItem","stringify","isCustomCategory","isCustomEmoji","useCloseAllOpenToggles","variationPicker","setVariationPicker","skinToneFanOpen","setSkinToneFanOpen","closeAllOpenToggles","useCallback","useHasOpenToggles","hasOpenToggles","useSetVariationPicker","setAnchoredEmojiRef","setEmojiVariationPicker","useMouseDownHandlers","mouseDownTimerRef","activeEmojiStyle","onClick","event","emojiFromEvent","skinToneToUse","emojiClickOutput","onMouseDown","onMouseUp","getImageUrl","imageUrl","isCustom","useOnScroll","onScroll","scrollTo","$eprBody","scrollBy","by","useScrollTo","scrollEmojiAboveLabel","useFocusSearchInput","useFocusSkinTonePicker","useFocusCategoryNavigation","useSetFilterRef","setFilter","setter","useClearSearch","applySearch","useApplySearch","focusSearchInput","clearSearch","useAppendSearch","appendSearch","str","getNormalizedSearchTerm","useFilter","setFilterRef","statusSearchResults","getStatusSearchResults","onChange","inputValue","nextValue","longestMatch","findLongestMatch","filterEmojiObjectByKeyword","setSearchTerm","then","keyword","filtered","hasMatch","some","useIsEmojiFiltered","isEmojiFilteredBySearchTerm","dict","longestMatchingKey","keys","trim","filterState","useIsEmojiHidden","emojisThatFailedToLoad","isEmojiFiltered","failedToLoad","filteredOut","Button","props","type","cx","styles","cursor","border","background","outline","ClickableEmojiButton","showVariations","hasVariations","EmojiImg","lazyLoad","onError","src","alt","external","loading","NativeEmoji","ViewOnlyEmoji","size","setEmojisThatFailedToLoad","fontSize","emojiToRender","NATIVE","add","ClickableEmoji","EmojiCategory","categoryConfig","categoryName","label","gridGap","gridTemplateColumns","justifyContent","margin","position","alignItems","backdropFilter","backgroundColor","color","fontWeight","padding","textTransform","zIndex","Suggested","suggestedEmojisModeConfig","suggested","suggestedItem","EmojiList","renderdCategoriesCountRef","emojiList","RenderCategory","isEmojiHidden","emojisToPush","hiddenCounter","isDisallowed","listStyle","focusFirstVisibleEmoji","focusAndClickFirstVisibleEmoji","firstEmoji","click","focusLastVisibleEmoji","focusNextVisibleEmoji","focusPrevVisibleEmoji","focusVisibleEmojiOneRowUp","exitUp","visibleEmojiOneRowUp","focusVisibleEmojiOneRowDown","visibleEmojiOneRowDown","countInRow","prevVisibleCategory","nextVisibleCategory","itemInNextRow","Direction","EmojiVariationPicker","useVariationPickerTop","getTop","getMenuDirection","getPointerStyle","usePointerStyle","pointerStyle","ref","Down","clientWidth","direction","Up","emojiOffsetTop","buttonHeight","Body","body","flex","overflowY","overflowX","useEmojiPreviewEvents","allow","setPreviewEmoji","onEscape","onMouseOver","onEnter","onLeave","e","relatedTarget","useIsSkinToneInSearch","skinTonePickerLocationConfig","useIsSkinToneInPreview","FlexDirection","Flex","ROW","flexDirection","COLUMN","Space","Absolute","Relative","ITEM_SIZE","SkinTonePickerMenu","right","SkinTonePicker","SkinTonePickerDirection","VERTICAL","HORIZONTAL","isDisabled","isOpen","setIsOpen","setActiveSkinTone","fullWidth","expandedSize","vertical","open","flexBasis","skinToneVariation","active","transform","tabIndex","Preview","isSkinToneInPreview","preview","PreviewBody","previewEmoji","variationPickerEmoji","show","PreviewContent","defaultText","borderTop","categoryNameFromDom","$category","getAttribute","useActiveCategoryScrollDetection","setActiveCategory","visibleCategories","Map","observer","IntersectionObserver","entry","set","intersectionRatio","ratios","lastCategory","ratio","threshold","el","observe","useIsSearchMode","useScrollCategoryIntoView","scrollCategoryIntoView","useShouldHideCustomEmojis","customCategoryConfig","_extends","React.createElement","CategoryNavigation","activeCategory","isSearchMode","categoriesConfig","hideCustomCategory","nav","role","isActiveCategory","catBtn","transition","backgroundSize","backgroundImage","IcnNav","backgroundPosition","content","borderRadius","SCOPE","emojiPicker","EMOJI_BUTTON","CATEGORY","CssSearch","q","genQuery","SearchContainer","isSkinToneInSearch","overlay","Search","inc","setInc","placeholder","autoFocus","input","onFocus","title","Header","getActiveElement","document","activeElement","KeyboardEvents","useKeyboardNavigation","usePickerMainKeyboardEvents","useSearchInputKeyboardEvents","useSkinTonePickerKeyboardEvents","useCategoryNavigationKeyboardEvents","useBodyKeyboardEvents","onKeyDown","Escape","preventDefault","focusSkinTonePicker","setSkinToneFanOpenState","goDownFromSearchInput","useGoDownFromSearchInput","ArrowRight","ArrowDown","Enter","onType","useOnType","ArrowLeft","focusNextSkinTone","focusPrevSkinTone","ArrowUp","goUpFromBody","useGoUpFromBody","focusCategoryNavigation","goUpFromEmoji","exitLeft","currentSkinTone","hasModifier","match","metaKey","ctrlKey","altKey","preloadEmoji","preloadedEmojs","emojiUrl","preloadImage","url","image","Image","useOnFocus","PickerMain","PickerRootElement","searchModeActive","main","baseVariables","darkTheme","AUTO","autoThemeDark","searchActive","DarkTheme","borderWidth","borderStyle","borderColor","overflow","autoTheme","EmojiPicker","prevCustomEmojis","nextCustomEmojis","ErrorBoundary","hasError","getDerivedStateFromError","componentDidCatch","error","errorInfo","console","render","ExportedEmoji","EmojiPickerReact"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrBD,IAAMU,kBAAkB,GAAG,CACzB3C,SAAS,CAAC4C,OADe,EAEzB5C,SAAS,CAAC6C,KAFe,EAGzB7C,SAAS,CAAC8C,YAHe,EAIzB9C,SAAS,CAAC+C,MAJe,EAKzB/C,SAAS,CAACgD,WALe,EAMzBhD,SAAS,CAACiD,IANe,CAA3B;AASA,AAAO,IAAMC,cAAc,gBAAGnB,MAAM,CAACoB,OAAP,CAAenD,SAAf,EAA0BoD,MAA1B,CAC5B,UAACC,GAAD;MAAOC;MAAKrE;EACVoE,GAAG,CAACpE,KAAD,CAAH,GAAaqE,GAAb;EACA,OAAOD,GAAP;AACD,CAJ2B,EAK5B,EAL4B,CAAvB;AAQP,AAAO,IAAME,eAAe,gBAGxBZ,kBAAkB,CAACS,MAAnB,CACF,UAACI,MAAD,EAASC,QAAT;EAAA;;EAAA,OACE1B,MAAM,CAACC,MAAP,CAAcwB,MAAd,uCACGC,QADH,IACcA,QADd,kBADF;AAAA,CADE,EAKF,EALE,CAHG;;ACjBP,IAAYC,eAAZ;;AAAA,WAAYA;EACVA,uBAAA,MAAA;EACAA,0BAAA,MAAA;EACAA,6BAAA,MAAA;EACAA,2BAAA,MAAA;EACAA,yBAAA,WAAA;AACD,CAND,EAAYA,eAAe,KAAfA,eAAe,KAAA,CAA3B;;ACCO,IAAMC,sBAAsB,GAAc,EAA1C;AAEPC,UAAU,CAAC;EACTC,SAAS,CAACT,MAAV,CAAiB,UAACU,WAAD,EAAcC,KAAd;IACfC,UAAU,CAACD,KAAD,CAAV;IACA,OAAOD,WAAP;GAFF,EAGGH,sBAHH;AAID,CALS,CAAV;AASA,SAAgBK,WAAWD;EACzB,IAAME,gBAAgB,GAAGC,UAAU,CAACH,KAAD,CAAV,CACtBI,IADsB,GAEtBtH,IAFsB,CAEjB,EAFiB,EAGtBuH,WAHsB,GAItBC,OAJsB,CAId,cAJc,EAIE,EAJF,EAKtBC,KALsB,CAKhB,EALgB,CAAzB;EAOAL,gBAAgB,CAACM,OAAjB,CAAyB,UAAAC,KAAI;;;IAC3Bb,sBAAsB,CAACa,KAAD,CAAtB,4BAA+Bb,sBAAsB,CAACa,KAAD,CAArD,oCAA+D,EAA/D;IAEAb,sBAAsB,CAACa,KAAD,CAAtB,CAA6BC,YAAY,CAACV,KAAD,CAAzC,IAAoDA,KAApD;GAHF;AAKD;;SCfeG,WAAWH;;;EACzB,gCAAOA,KAAK,CAACL,eAAe,CAAC3C,IAAjB,CAAZ,oCAAsC,EAAtC;AACD;AAED,SAAgB2D,QAAQX;EACtB,OAAOY,UAAU,CAACZ,KAAK,CAACL,eAAe,CAACkB,QAAjB,CAAN,CAAjB;AACD;AAED,SAAgBC,UAAUd;EACxB,IAAI,CAACA,KAAL,EAAY;IACV,OAAO,EAAP;;;EAGF,OAAOG,UAAU,CAACH,KAAD,CAAV,CAAkB,CAAlB,CAAP;AACD;AAED,SAAgBe,uBAAuBC;EACrC,IAAMC,KAAK,GAAGD,OAAO,CAACT,KAAR,CAAc,GAAd,CAAd;;EACA,oBAAmBU,KAAK,CAACC,MAAN,CAAa,CAAb,EAAgB,CAAhB,CAAnB;MAAOxB,QAAP;;EAEA,IAAIF,eAAe,CAACE,QAAD,CAAnB,EAA+B;IAC7B,OAAOuB,KAAK,CAACnI,IAAN,CAAW,GAAX,CAAP;;;EAGF,OAAOkI,OAAP;AACD;AAED,SAAgBN,aAAaV,OAAkBN;;;EAC7C,IAAMsB,OAAO,GAAGhB,KAAK,CAACL,eAAe,CAACqB,OAAjB,CAArB;;EAEA,IAAI,CAACtB,QAAD,IAAa,CAACyB,kBAAkB,CAACnB,KAAD,CAApC,EAA6C;IAC3C,OAAOgB,OAAP;;;EAGF,gCAAOI,qBAAqB,CAACpB,KAAD,EAAQN,QAAR,CAA5B,oCAAiDsB,OAAjD;AACD;AAED,SAAgBK,iBAAiBpE;;;;EAE/B,2BAAOqE,MAAP,oBAAOA,MAAM,CAAGrE,QAAH,CAAb,+BAA6B,EAA7B;AACD;;AAGD,SAAgBsE,kBACdP,SACAzC;EAEA,YAAUD,MAAM,CAACC,UAAD,CAAhB,GAA+ByC,OAA/B;AACD;AAED,SAAgBQ,gBAAgBxB;;;EAC9B,iCAAOA,KAAK,CAACL,eAAe,CAAC8B,UAAjB,CAAZ,qCAA4C,EAA5C;AACD;AAED,SAAgBN,mBAAmBnB;EACjC,OAAOwB,eAAe,CAACxB,KAAD,CAAf,CAAuBnC,MAAvB,GAAgC,CAAvC;AACD;AAED,SAAgBuD,sBACdpB,OACAN;EAEA,OAAOA,QAAQ,GACX8B,eAAe,CAACxB,KAAD,CAAf,CAAuB0B,IAAvB,CAA4B,UAAAC,SAAS;IAAA,OAAIA,SAAS,CAACC,QAAV,CAAmBlC,QAAnB,CAAJ;GAArC,CADW,GAEXgB,YAAY,CAACV,KAAD,CAFhB;AAGD;AAED,SAAgB6B,eAAeb;EAC7B,IAAI,CAACA,OAAL,EAAc;IACZ;;;EAGF,IAAIc,kBAAkB,CAACd,OAAD,CAAtB,EAAiC;IAC/B,OAAOc,kBAAkB,CAACd,OAAD,CAAzB;;;EAGF,IAAMe,eAAe,GAAGhB,sBAAsB,CAACC,OAAD,CAA9C;EACA,OAAOc,kBAAkB,CAACC,eAAD,CAAzB;AACD;AAED,AAAO,IAAMjC,SAAS,gBAAe9B,MAAM,CAACgE,MAAP,CAAcV,MAAd,EAAsBlB,IAAtB,EAA9B;AAEP,SAAgB6B,gBAAgBC;EAC9BZ,MAAM,CAACpF,UAAU,CAACI,MAAZ,CAAN,CAA0BuB,MAA1B,GAAmC,CAAnC;EAEAqE,YAAY,CAAC1B,OAAb,CAAqB,UAAAR,KAAK;IACxB,IAAMmC,SAAS,GAAGC,oBAAoB,CAACpC,KAAD,CAAtC;IAEAsB,MAAM,CAACpF,UAAU,CAACI,MAAZ,CAAN,CAA0B+F,IAA1B,CAA+BF,SAA/B;;IAEA,IAAIL,kBAAkB,CAACK,SAAS,CAACxC,eAAe,CAACqB,OAAjB,CAAV,CAAtB,EAA4D;MAC1D;;;IAGFlB,SAAS,CAACuC,IAAV,CAAeF,SAAf;IACAL,kBAAkB,CAACK,SAAS,CAACxC,eAAe,CAACqB,OAAjB,CAAV,CAAlB,GAAyDmB,SAAzD;IACAlC,UAAU,CAACkC,SAAD,CAAV;GAXF;AAaD;;AAED,SAASC,oBAAT,CAA8BpC,KAA9B;;;EACE,uBACGL,eAAe,CAAC3C,IADnB,IAC0BgD,KAAK,CAACsC,KAAN,CAAY1J,GAAZ,CAAgB,UAAAoE,IAAI;IAAA,OAAIA,IAAI,CAACqD,WAAL,EAAJ;GAApB,CAD1B,OAEGV,eAAe,CAACqB,OAFnB,IAE6BhB,KAAK,CAACuC,EAAN,CAASlC,WAAT,EAF7B,OAGGV,eAAe,CAACkB,QAHnB,IAG8B,GAH9B,OAIGlB,eAAe,CAAC6C,MAJnB,IAI4BxC,KAAK,CAACwC,MAJlC;AAMD;;AAED,IAAMV,kBAAkB,GAEpB,EAFJ;AAIAjC,UAAU,CAAC;EACTC,SAAS,CAACT,MAAV,CAAiB,UAACS,SAAD,EAAY2C,KAAZ;IACf3C,SAAS,CAACY,YAAY,CAAC+B,KAAD,CAAb,CAAT,GAAiCA,KAAjC;;IAEA,IAAItB,kBAAkB,CAACsB,KAAD,CAAtB,EAA+B;MAC7BjB,eAAe,CAACiB,KAAD,CAAf,CAAuBjC,OAAvB,CAA+B,UAAAmB,SAAS;QACtC7B,SAAS,CAAC6B,SAAD,CAAT,GAAuBc,KAAvB;OADF;;;IAKF,OAAO3C,SAAP;GATF,EAUGgC,kBAVH;AAWD,CAZS,CAAV;AAcA,SAAgBY,2BAA2B1B;EACzC,qBAA8BA,OAAO,CAACT,KAAR,CAAc,GAAd,CAA9B;MAASoC,iBAAT;;EACA,OAAO/D,kBAAkB,CAACgD,QAAnB,CAA4Be,iBAA5B,IACHA,iBADG,GAEH,IAFJ;AAGD;;ACzHD,IAAMC,oBAAoB,GAAG,CAAC,WAAD,EAAc,WAAd,EAA2B,WAA3B,CAA7B;AAEA,AAAO,IAAMC,0BAA0B,GAAG,QAAnC;AACP,AAAO,IAAMC,+BAA+B,GAAG,kBAAxC;AACP,AAAO,IAAMC,qBAAqB,GAChC,iDADK;AAEP,AAAO,IAAMC,+BAA+B,GAC1C,aAAaD,qBADR;AAEP,AAAO,IAAME,qCAAqC,GAChD,eAAeF,qBADV;AAGP,SAAgBG,YACdC;;;MAAAA;IAAAA,aAA2B;;;EAE3B,IAAMvF,IAAI,GAAGwF,gBAAgB,EAA7B;EAEA,IAAMC,aAAa,GAAGrF,MAAM,CAACC,MAAP,CACpBL,IAAI,CAACyF,aADe,2BAEpBF,UAAU,CAACE,aAFS,oCAEQ,EAFR,CAAtB;EAIA,IAAMC,MAAM,GAAGtF,MAAM,CAACC,MAAP,CAAcL,IAAd,EAAoBuF,UAApB,CAAf;EAEA,IAAMI,UAAU,GAAGhG,qBAAqB,CAAC4F,UAAU,CAACI,UAAZ,EAAwB;IAC9D7F,cAAc,EAAE4F,MAAM,CAACE;GADe,CAAxC;EAIAvB,eAAe,yBAACqB,MAAM,CAACpB,YAAR,mCAAwB,EAAxB,CAAf;EAEA,IAAMuB,sBAAsB,GAAGH,MAAM,CAACI,cAAP,GAC3BvH,sBAAsB,CAACwH,OADI,GAE3BL,MAAM,CAACG,sBAFX;EAIA,oBACKH,MADL;IAEEC,UAAU,EAAVA,UAFF;IAGEF,aAAa,EAAbA,aAHF;IAIEI,sBAAsB,EAAtBA;;AAEH;AAED,SAAgBL;EACd,OAAO;IACLQ,eAAe,EAAE,IADZ;IAELL,UAAU,EAAEpG,oBAAoB,EAF3B;IAGL0G,SAAS,EAAE,EAHN;IAIL3B,YAAY,EAAE,EAJT;IAKL4B,eAAe,EAAE7H,SAAS,CAAC4C,OALtB;IAMLN,UAAU,EAAExC,UAAU,CAAC4C,KANlB;IAOLoF,YAAY,EAAE,IAPT;IAQLC,WAAW,EAAEzC,iBARR;IASL0C,MAAM,EAAE,GATH;IAULC,cAAc,EAAE,KAVX;IAWLb,aAAa,eACRc,iBADQ,CAXR;IAcLT,cAAc,EAAE,KAdX;IAeLU,iBAAiB,EAAEvB,0BAfd;IAgBLwB,iBAAiB,EAAExB,0BAhBd;IAiBLY,sBAAsB,EAAEtH,sBAAsB,CAACmI,MAjB1C;IAkBLC,iBAAiB,EAAE,KAlBd;IAmBLC,KAAK,EAAE,EAnBF;IAoBLhB,mBAAmB,EAAE1H,cAAc,CAAC2I,QApB/B;IAqBLC,KAAK,EAAE1I,KAAK,CAAC8C,KArBR;IAsBL6F,aAAa,EAAE,IAAIC,GAAJ,CAAgBhC,oBAAhB,CAtBV;IAuBLiC,KAAK,EAAE;GAvBT;AAyBD;AAgCD,IAAMV,iBAAiB,GAAkB;EACvCW,YAAY,EAAE,OADyB;EAEvCC,cAAc,EAAE,mBAFuB;EAGvCC,WAAW,EAAE;AAH0B,CAAzC;;;ACzHA,AAcA,IAAMC,aAAa,gBAAGxK,aAAA,eACpB2I,gBAAgB,EADI,CAAtB;AAIA,SAAgB8B;MAAuB3K,gBAAAA;MAAa+I;;EAClD,IAAM6B,YAAY,GAAGC,YAAY,CAAC9B,MAAD,CAAjC;EAEA,OACE7I,aAAA,CAACwK,aAAa,CAAChK,QAAf;IAAwBC,KAAK,EAAEiK;GAA/B,EACG5K,QADH,CADF;AAKD;AAED,SAAgB6K,aAAa9B;;;EAC3B,sBAAwC7I,QAAA,CAAe;IAAA,OACrDyI,WAAW,CAACI,MAAD,CAD0C;GAAf,CAAxC;MAAO6B,YAAP;MAAqBE,eAArB;;EAIA5K,SAAA,CAAgB;;;IACd,IAAI,yBAAA6I,MAAM,CAACpB,YAAP,0CAAqBrE,MAArB,gCAAgCsH,YAAY,CAACjD,YAA7C,qBAAgC,sBAA2BrE,MAA3D,CAAJ,EAAuE;MACrEwH,eAAe,CAACnC,WAAW,CAACI,MAAD,CAAZ,CAAf;;;;GAFJ,EAMG,0BAACA,MAAM,CAACpB,YAAR,qBAAC,sBAAqBrE,MAAtB,CANH;EAQA,OAAOsH,YAAP;AACD;AAED,SAAgBG;EACd,OAAO7K,UAAA,CAAiBwK,aAAjB,CAAP;AACD;;ACtCM,IAAMM,oBAAoB,gBAAG9K,cAAK,CAAC+K,aAAN,CAElC,EAFkC,CAA7B;AAIP,SAAgBC;EACd,IAAMC,aAAa,GAAGjL,cAAK,CAACkL,UAAN,CAAiBJ,oBAAjB,CAAtB;EACA,OAAOG,aAAP;AACD;AAED,SAAgBE,uBACdtC;EAEA,IAAMuC,gBAAgB,GAAGpL,cAAK,CAACqL,MAAN,CAA4B;IACnDC,YAAY,EAAEzC,MAAM,CAACyC,YAAP,IAAuBC;GADd,CAAzB;EAIAvL,cAAK,CAACwL,SAAN,CAAgB;IACdJ,gBAAgB,CAACrK,OAAjB,CAAyBuK,YAAzB,GAAwCzC,MAAM,CAACyC,YAAP,IAAuBC,SAA/D;GADF,EAEG,CAAC1C,MAAM,CAACyC,YAAR,CAFH;EAIA,OAAOF,gBAAP;AACD;;AAED,SAASG,SAAT;;SCPgBE;;;EACd,uBAAiDZ,eAAe,EAAhE;MAAQlB,iBAAR,oBAAQA,iBAAR;MAA2BC,iBAA3B,oBAA2BA,iBAA3B;;EACA,gBACE,CAACD,iBAAD,EAAoBC,iBAApB,EAAuC3C,IAAvC,CACE,UAAAyE,CAAC;IAAA,OAAIA,CAAC,KAAKtD,0BAAV;GADH,CADF,oBAGOA,0BAHP;AAKD;AAED,SAAgBuD;EACd,wBAA4Bd,eAAe,EAA3C;MAAQxB,eAAR,qBAAQA,eAAR;;EACA,OAAOA,eAAP;AACD;AAED,SAAgBuC;EACd,wBAA8Bf,eAAe,EAA7C;MAAQf,iBAAR,qBAAQA,iBAAR;;EACA,OAAOA,iBAAP;AACD;AAED,SAAgB+B;EACd,wBAAuBhB,eAAe,EAAtC;MAAQ/G,UAAR,qBAAQA,UAAR;;EACA,OAAOA,UAAP;AACD;AAED,SAAgBgI;EACd,wBAA4BjB,eAAe,EAA3C;MAAQ1B,eAAR,qBAAQA,eAAR;;EACA,OAAOA,eAAP;AACD;AAED,SAAgB4C;EACd,wBAAuBlB,eAAe,EAAtC;MAAQ/B,UAAR,qBAAQA,UAAR;;EACA,OAAOA,UAAP;AACD;AAED,SAAgBkD;EACd,wBAAyBnB,eAAe,EAAxC;MAAQpD,YAAR,qBAAQA,YAAR;;EACA,OAAOA,YAAP;AACD;AAED,SAAgBwE;EAId,wBAAoBjB,gBAAgB,EAApC;MAAQjK,OAAR,qBAAQA,OAAR;;EACA,OAAOA,OAAO,CAACuK,YAAR,IAAyB,cAAhC;AACD;AAED,SAAgBY;EACd,wBAA0BrB,eAAe,EAAzC;MAAQjC,aAAR,qBAAQA,aAAR;;EACA,OAAOA,aAAP;AACD;AAED,SAAgBuD;EACd,wBAAkBtB,eAAe,EAAjC;MAAQZ,KAAR,qBAAQA,KAAR;;EAEA,OAAOA,KAAP;AACD;AAED,SAAgBmC;EACd,yBAAgCvB,eAAe,EAA/C;MAAQ9B,mBAAR,sBAAQA,mBAAR;;EACA,OAAOA,mBAAP;AACD;AAED,SAAgBsD;EACd,yBAA2BxB,eAAe,EAA1C;MAAQpB,cAAR,sBAAQA,cAAR;;EACA,OAAOA,cAAP;AACD;AAED,SAAgB6C;EACd,yBAAsBzB,eAAe,EAArC;MAAQzB,SAAR,sBAAQA,SAAR;;EACA,OAAOA,SAAP;AACD;AAED,SAAgBmD;EACd,yBAAiC1B,eAAe,EAAhD;MAAQrB,MAAR,sBAAQA,MAAR;MAAgBY,KAAhB,sBAAgBA,KAAhB;MAAuBL,KAAvB,sBAAuBA,KAAvB;;EACA;IAASP,MAAM,EAAEgD,YAAY,CAAChD,MAAD,CAA7B;IAAuCY,KAAK,EAAEoC,YAAY,CAACpC,KAAD;KAAYL,KAAtE;AACD;AAED,SAAgB0C;EACd,yBAAyB5B,eAAe,EAAxC;MAAQvB,YAAR,sBAAQA,YAAR;;EACA,OAAOA,YAAP;AACD;AAED,SAAgBoD;EACd,yBAA2B7B,eAAe,EAA1C;MAAQ5B,cAAR,sBAAQA,cAAR;;EACA,OAAOA,cAAP;AACD;AAED,SAAgB0D;EACd,yBAAmC9B,eAAe,EAAlD;MAAQ7B,sBAAR,sBAAQA,sBAAR;;EACA,OAAOA,sBAAP;AACD;AAED,SAAgB4D;EACd,yBAA0B/B,eAAe,EAAzC;MAAQX,aAAR,sBAAQA,aAAR;;EACA,OAAOA,aAAP;AACD;AAED,SAAgB2C;EAId,yBAAwBhC,eAAe,EAAvC;MAAQtB,WAAR,sBAAQA,WAAR;;EACA,OAAOA,WAAP;AACD;;AAED,SAASiD,YAAT,CAAsBM,eAAtB;EACE,OAAO,OAAOA,eAAP,KAA2B,QAA3B,GACAA,eADA,UAEHA,eAFJ;AAGD;;AAED,SAAgBC,uBAAuBC;EACrC,IAAMC,UAAU,GAAGD,kBAAkB,GAAG,CAAxC;EACA,IAAME,QAAQ,GAAGF,kBAAkB,GAAG,CAAtC;;EAEA,IAAIC,UAAJ,EAAgB;IACd,OAAOC,QAAQ,GACb1E,qCAAqC,CAAC3C,OAAtC,CAA8C,IAA9C,EAAoDmH,kBAAkB,CAACG,QAAnB,EAApD,CADa,GAET5E,+BAFN;;;EAKF,OAAOF,+BAAP;AACD;;SCjJe+E,kBACdC,cACAC;MAAAA;IAAAA,QAAgB;;;EAEhB,gBAA0BC,QAAQ,CAAIF,YAAJ,CAAlC;MAAOG,KAAP;MAAcC,QAAd;;EACA,IAAMC,KAAK,GAAGrC,MAAM,CAAgB,IAAhB,CAApB;;EAEA,SAASsC,iBAAT,CAA2BlN,KAA3B;IACE,OAAO,IAAImN,OAAJ,CAAe,UAAAC,OAAO;;;MAC3B,IAAIH,KAAK,CAAC3M,OAAV,EAAmB;QACjB+M,YAAY,CAACJ,KAAK,CAAC3M,OAAP,CAAZ;;;MAGF2M,KAAK,CAAC3M,OAAN,cAAgBgN,MAAhB,qBAAgB,QAAQ3I,UAAR,CAAmB;QACjCqI,QAAQ,CAAChN,KAAD,CAAR;QACAoN,OAAO,CAACpN,KAAD,CAAP;OAFc,EAGb6M,KAHa,CAAhB;KALK,CAAP;;;EAYF,OAAO,CAACE,KAAD,EAAQG,iBAAR,CAAP;AACD;;SCrBeK;EACZ,IAAM9D,aAAa,GAAG0C,gBAAgB,EAAtC;EACA,OAAO,UAAC3G,YAAD;IAAA,OAA0BiE,aAAa,CAAC+D,GAAd,CAAkBhI,YAAlB,CAA1B;GAAP;AACD;;SCQaiI;EACd,IAAMC,mBAAmB,GAAG9C,MAAM,CAA0B,EAA1B,CAAlC;EACA,IAAM+C,kBAAkB,GAAG3B,qBAAqB,EAAhD;EAEA,OAAO4B,OAAO,CAAC;IACb,IAAM/E,YAAY,GAAGnD,UAAU,MAAIiI,kBAAJ,CAA/B;;IAEA,IAAI,CAACA,kBAAD,IAAuBE,MAAM,CAACC,KAAP,CAAajF,YAAb,CAA3B,EAAuD;MACrD,OAAO6E,mBAAmB,CAACpN,OAA3B;;;IAGF,OAAOsE,SAAS,CAACT,MAAV,CAAiB,UAAC4J,gBAAD,EAAmBjJ,KAAnB;MACtB,IAAIkJ,mBAAmB,CAAClJ,KAAD,EAAQ+D,YAAR,CAAvB,EAA8C;QAC5CkF,gBAAgB,CAACvI,YAAY,CAACV,KAAD,CAAb,CAAhB,GAAwC,IAAxC;;;MAGF,OAAOiJ,gBAAP;KALK,EAMJL,mBAAmB,CAACpN,OANhB,CAAP;GAPY,EAcX,CAACqN,kBAAD,CAdW,CAAd;AAeD;AAED,SAAgBM;EACd,IAAMF,gBAAgB,GAAGN,mBAAmB,EAA5C;EACA,IAAMS,eAAe,GAAGX,kBAAkB,EAA1C;EAEA,OAAO,SAASY,iBAAT,CAA2BrJ,KAA3B;IACL,IAAMgB,OAAO,GAAGD,sBAAsB,CAACL,YAAY,CAACV,KAAD,CAAb,CAAtC;IAEA,OAAOsJ,OAAO,CAACL,gBAAgB,CAACjI,OAAD,CAAhB,IAA6BoI,eAAe,CAACpI,OAAD,CAA7C,CAAd;GAHF;AAKD;;AAED,SAASkI,mBAAT,CACElJ,KADF,EAEEuJ,cAFF;EAIE,OAAO5I,OAAO,CAACX,KAAD,CAAP,GAAiBuJ,cAAxB;AACD;;SC/CeC,mBACdC;EAEAxD,SAAS,CAAC;IACRwD,QAAQ,CAAC,IAAD,CAAR;GADO,EAEN,CAACA,QAAD,CAFM,CAAT;AAGD;;SCGeC;MAAwBnP,gBAAAA;EACtC,IAAM0O,gBAAgB,GAAGN,mBAAmB,EAA5C;EACA,IAAM7E,eAAe,GAAGsC,wBAAwB,EAAhD;;EAGA,IAAMuD,SAAS,GAAGlP,MAAA,CAA0BmF,sBAA1B,CAAlB;EACA,IAAMgK,gBAAgB,GAAGnP,MAAA,CAAsB,KAAtB,CAAzB;EACA,IAAMoP,gBAAgB,GAAGpP,MAAA,CAAsB,KAAtB,CAAzB;EACA,IAAMqP,mBAAmB,GAAGrP,MAAA,CAC1BwO,gBAD0B,CAA5B;EAIA,IAAMc,oBAAoB,GAAGlC,iBAAiB,CAACmC,IAAI,CAACC,GAAL,EAAD,EAAa,GAAb,CAA9C;EACA,IAAMC,UAAU,GAAGrC,iBAAiB,CAAC,EAAD,EAAK,GAAL,CAApC;EACA,IAAMsC,oBAAoB,GAAGnC,QAAQ,CAAU,KAAV,CAArC;EACA,IAAMoC,cAAc,GAAGpC,QAAQ,CAAYlE,eAAZ,CAA/B;EACA,IAAMuG,mBAAmB,GAAGrC,QAAQ,CAAsB,IAAtB,CAApC;EACA,IAAMsC,2BAA2B,GAAGtC,QAAQ,CAAc,IAAIpD,GAAJ,EAAd,CAA5C;EACA,IAAM2F,yBAAyB,GAAGvC,QAAQ,CAAmB,IAAnB,CAA1C;;EACA,gBAAkDA,QAAQ,CAAC,KAAD,CAA1D;MAAOwC,iBAAP;MAA0BC,oBAA1B;;EAEAjB,kBAAkB,CAACiB,oBAAD,CAAlB;EAEA,OACEhQ,aAAA,CAACiQ,aAAa,CAACzP,QAAf;IACEC,KAAK,EAAE;MACLmP,mBAAmB,EAAnBA,mBADK;MAELD,cAAc,EAAdA,cAFK;MAGLR,gBAAgB,EAAhBA,gBAHK;MAILC,gBAAgB,EAAhBA,gBAJK;MAKLC,mBAAmB,EAAnBA,mBALK;MAMLS,yBAAyB,EAAzBA,yBANK;MAOLD,2BAA2B,EAA3BA,2BAPK;MAQLX,SAAS,EAATA,SARK;MASLa,iBAAiB,EAAjBA,iBATK;MAULN,UAAU,EAAVA,UAVK;MAWLC,oBAAoB,EAApBA,oBAXK;MAYLJ,oBAAoB,EAApBA;;GAbJ,EAgBGxP,QAhBH,CADF;AAoBD;AAID,IAAMmQ,aAAa,gBAAGjQ,aAAA,CAanB;EACD4P,mBAAmB,EAAE,CAAC,IAAD,EAAO,cAAP,CADpB;EAEDD,cAAc,EAAE,CAACnO,SAAS,CAAC4C,OAAX,EAAoB,cAApB,CAFf;EAGD+K,gBAAgB,EAAE;IAAEpO,OAAO,EAAE;GAH5B;EAIDqO,gBAAgB,EAAE;IAAErO,OAAO,EAAE;GAJ5B;EAKDsO,mBAAmB,EAAE;IAAEtO,OAAO,EAAE;GAL/B;EAMD+O,yBAAyB,EAAE,CAAC,IAAD,EAAO,cAAP,CAN1B;EAODD,2BAA2B,EAAE,cAAC,IAAI1F,GAAJ,EAAD,EAAY,cAAZ,CAP5B;EAQD+E,SAAS,EAAE;IAAEnO,OAAO,EAAE;GARrB;EASDgP,iBAAiB,EAAE,IATlB;EAUDN,UAAU,EAAE,CAAC,EAAD,EAAK;IAAA,OAAM,IAAI7B,OAAJ,CAAoB;MAAA,OAAMsC,SAAN;KAApB,CAAN;GAAL,CAVX;EAWDR,oBAAoB,EAAE,CAAC,KAAD,EAAQ,cAAR,CAXrB;EAYDJ,oBAAoB,EAAE,cAACC,IAAI,CAACC,GAAL,EAAD,EAAa,cAAb;AAZrB,CAbmB,CAAtB;AAgCA,SAAgBW;EACd,wBAAsBnQ,UAAA,CAAiBiQ,aAAjB,CAAtB;MAAQf,SAAR,qBAAQA,SAAR;;EACA,OAAOA,SAAP;AACD;AAED,SAAgBkB;EACd,yBAA6BpQ,UAAA,CAAiBiQ,aAAjB,CAA7B;MAAQd,gBAAR,sBAAQA,gBAAR;;EACA,OAAOA,gBAAP;AACD;AAED,SAAgBkB;EACd,yBAA6BrQ,UAAA,CAAiBiQ,aAAjB,CAA7B;MAAQb,gBAAR,sBAAQA,gBAAR;;EACA,OAAOA,gBAAP;AACD;AAED,SAAgBkB;EACd,yBAAuBtQ,UAAA,CAAiBiQ,aAAjB,CAAvB;MAAQR,UAAR,sBAAQA,UAAR;;EACA,OAAOA,UAAP;AACD;AAED,SAAgBc;EAId,yBAA2BvQ,UAAA,CAAiBiQ,aAAjB,CAA3B;MAAQN,cAAR,sBAAQA,cAAR;;EACA,OAAOA,cAAP;AACD;AAED,SAAgBa;EACd,yBAAwCxQ,UAAA,CAAiBiQ,aAAjB,CAAxC;MAAQJ,2BAAR,sBAAQA,2BAAR;;EACA,OAAOA,2BAAP;AACD;AAED,SAAgBY;EACd,yBAA8BzQ,UAAA,CAAiBiQ,aAAjB,CAA9B;MAAQF,iBAAR,sBAAQA,iBAAR;;EACA,OAAOA,iBAAP;AACD;AAED,SAAgBW;EACd,yBAAsC1Q,UAAA,CAAiBiQ,aAAjB,CAAtC;MAAQH,yBAAR,sBAAQA,yBAAR;;EACA,OAAOA,yBAAP;AACD;AAED,SAAgBa;EACd,yBAAiC3Q,UAAA,CAAiBiQ,aAAjB,CAAjC;MAAQP,oBAAR,sBAAQA,oBAAR;;EACA,OAAOA,oBAAP;AACD;AAED,SAKgBkB;EACd,0BAAiC5Q,UAAA,CAAiBiQ,aAAjB,CAAjC;MAAQX,oBAAR,uBAAQA,oBAAR;;EAEA,IAAOuB,gBAAP,GAA+CvB,oBAA/C;MAAyBwB,kBAAzB,GAA+CxB,oBAA/C;EACA,OAAO,CACLuB,gBADK,EAEL,SAASE,eAAT;IACED,kBAAkB,CAACvB,IAAI,CAACC,GAAL,EAAD,CAAlB;GAHG,CAAP;AAMD;;SCrJewB;EACd,IAAMC,gBAAgB,GAAGZ,mBAAmB,EAA5C;EACA,OAAO,SAASa,iBAAT;IACLD,gBAAgB,CAAClQ,OAAjB,GAA2B,IAA3B;GADF;AAGD;AAED,SAAgBoQ;EACd,IAAMF,gBAAgB,GAAGZ,mBAAmB,EAA5C;EACA,OAAO,SAASe,cAAT;IACLH,gBAAgB,CAAClQ,OAAjB,GAA2B,KAA3B;GADF;AAGD;AAED,SAAgBsQ;EACd,IAAMJ,gBAAgB,GAAGZ,mBAAmB,EAA5C;EACA,OAAO,SAASiB,iBAAT;IACL,OAAOL,gBAAgB,CAAClQ,OAAxB;GADF;AAGD;AAED,SAAgBwQ;EACd,IAAMrR,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMoQ,cAAc,GAAGD,iBAAiB,EAAxC;EACA,IAAMG,iBAAiB,GAAGD,oBAAoB,EAA9C;EAEA7F,SAAS,CAAC;IACR,IAAMgG,OAAO,GAAGtR,OAAO,CAACa,OAAxB;IACAyQ,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,WAA1B,EAAuCC,WAAvC,EAAoD;MAClDC,OAAO,EAAE;KADX;;IAIA,SAASD,WAAT;MACE,IAAIJ,iBAAiB,EAArB,EAAyB;QACvBF,cAAc;;;;IAGlB,OAAO;MACLI,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,WAA7B,EAA0CF,WAA1C;KADF;GAXO,EAcN,CAACxR,OAAD,EAAUkR,cAAV,EAA0BE,iBAA1B,CAdM,CAAT;AAeD;;SC5CeO,kBACdC,QACA7S;EAEA,IAAI,CAAC6S,MAAD,IAAW,CAAC7S,OAAhB,EAAyB;IACvB,OAAO,CAAP;;;EAGF,IAAM8S,WAAW,GAAGD,MAAM,CAACE,qBAAP,GAA+B5H,KAAnD;EACA,IAAM6H,YAAY,GAAGhT,OAAO,CAAC+S,qBAAR,GAAgC5H,KAArD;EACA,OAAO8H,IAAI,CAACC,KAAL,CAAWJ,WAAW,GAAGE,YAAzB,CAAP;AACD;AAED,SAAgBG,kBACdN,QACA7S;EAEA,IAAI,CAAC6S,MAAD,IAAW,CAAC7S,OAAhB,EAAyB;IACvB,OAAO,CAAP;;;EAGF,IAAMgT,YAAY,GAAGhT,OAAO,CAAC+S,qBAAR,GAAgC5H,KAArD;EACA,IAAMiI,WAAW,GAAGpT,OAAO,CAAC+S,qBAAR,GAAgCM,IAApD;EACA,IAAMC,UAAU,GAAGT,MAAM,CAACE,qBAAP,GAA+BM,IAAlD;EAEA,OAAOJ,IAAI,CAACC,KAAL,CAAW,CAACE,WAAW,GAAGE,UAAf,IAA6BN,YAAxC,CAAP;AACD;AAED,SAAgBO,UACdV,QACA7S;EAEA,IAAI,CAAC6S,MAAD,IAAW,CAAC7S,OAAhB,EAAyB;IACvB,OAAO,CAAP;;;EAGF,IAAMwT,aAAa,GAAGxT,OAAO,CAAC+S,qBAAR,GAAgCxI,MAAtD;EACA,IAAMkJ,UAAU,GAAGzT,OAAO,CAAC+S,qBAAR,GAAgCW,GAAnD;EACA,IAAMC,SAAS,GAAGd,MAAM,CAACE,qBAAP,GAA+BW,GAAjD;EACA,OAAOT,IAAI,CAACW,KAAL,CAAW,CAACH,UAAU,GAAGE,SAAd,IAA2BH,aAAtC,CAAP;AACD;AAED,SAAgBK,WACdhB,QACA7S;EAEA,IAAI,CAAC6S,MAAD,IAAW,CAAC7S,OAAhB,EAAyB;IACvB,OAAO,KAAP;;;EAGF,IAAMwT,aAAa,GAAGxT,OAAO,CAAC+S,qBAAR,GAAgCxI,MAAtD;EACA,IAAMkJ,UAAU,GAAGzT,OAAO,CAAC+S,qBAAR,GAAgCW,GAAnD;EACA,IAAMC,SAAS,GAAGd,MAAM,CAACE,qBAAP,GAA+BW,GAAjD;EACA,IAAMI,YAAY,GAAGjB,MAAM,CAACE,qBAAP,GAA+BxI,MAApD;EAEA,OAAO0I,IAAI,CAACW,KAAL,CAAWH,UAAU,GAAGE,SAAb,GAAyBH,aAApC,IAAqDM,YAA5D;AACD;;AAED,SAASC,cAAT,CACEC,QADF,EAEEC,GAFF,EAGEC,aAHF;EAKE,IAAID,GAAG,KAAK,CAAC,CAAb,EAAgB;IACd,IAAME,OAAO,GAAGlB,IAAI,CAACC,KAAL,CAAW,CAACc,QAAQ,CAAC7P,MAAT,GAAkB,CAAnB,IAAwB+P,aAAnC,CAAhB;IACA,IAAME,iBAAiB,GAAGD,OAAO,GAAGD,aAApC;IACA,IAAMG,gBAAgB,GAAGL,QAAQ,CAAC7P,MAAT,GAAkB,CAA3C;IACA,OAAO6P,QAAQ,CAACM,KAAT,CAAeF,iBAAf,EAAkCC,gBAAgB,GAAG,CAArD,CAAP;;;EAGF,OAAOL,QAAQ,CAACM,KAAT,CAAeL,GAAG,GAAGC,aAArB,EAAoC,CAACD,GAAG,GAAG,CAAP,IAAYC,aAAhD,CAAP;AACD;;AAED,SAASK,kBAAT,CACEC,WADF,EAEEC,UAFF,EAGEP,aAHF;EAKE,IAAMQ,OAAO,GAAGD,UAAU,GAAG,CAA7B;;EAEA,IAAIC,OAAO,GAAGR,aAAV,GAA0BM,WAAW,CAACrQ,MAA1C,EAAkD;IAChD,OAAO,EAAP;;;EAGF,OAAO4P,cAAc,CAACS,WAAD,EAAcE,OAAd,EAAuBR,aAAvB,CAArB;AACD;;AAED,SAAgBS,gBACdX,UACAC,KACAC,eACAU;EAEA,IAAMC,WAAW,GAAGd,cAAc,CAACC,QAAD,EAAWC,GAAX,EAAgBC,aAAhB,CAAlC;;EAEA,OAAOW,WAAW,CAACD,UAAD,CAAX,IAA2BC,WAAW,CAACA,WAAW,CAAC1Q,MAAZ,GAAqB,CAAtB,CAAtC,IAAkE,IAAzE;AACD;AAED,SAAgB2Q,oBACdN,aACAC,YACAP,eACAa;EAEA,IAAMC,eAAe,GAAGT,kBAAkB,CACxCC,WADwC,EAExCC,UAFwC,EAGxCP,aAHwC,CAA1C;;EAOA,OACEc,eAAe,CAACD,KAAD,CAAf,IACAC,eAAe,CAACA,eAAe,CAAC7Q,MAAhB,GAAyB,CAA1B,CADf,IAEA,IAHF;AAKD;AAED,SAAgB8Q,oBACdT,aACAC,YACAP,eACAa;EAEA,IAAMG,eAAe,GAAGnB,cAAc,CACpCS,WADoC,EAEpCC,UAAU,GAAG,CAFuB,EAGpCP,aAHoC,CAAtC;;EAOA,OACEgB,eAAe,CAACH,KAAD,CAAf,IACAG,eAAe,CAACA,eAAe,CAAC/Q,MAAhB,GAAyB,CAA1B,CADf,IAEA,IAHF;AAKD;AAED,SAAgBgR,+BACdtC,QACAmB;EAEA,IAAI,CAACnB,MAAD,IAAW,CAACmB,QAAQ,CAAC7P,MAAzB,EAAiC;IAC/B,OAAO,IAAP;;;EAGF,IAAMwP,SAAS,GAAGd,MAAM,CAACE,qBAAP,GAA+BW,GAAjD;EACA,IAAM0B,YAAY,GAAGvC,MAAM,CAACE,qBAAP,GAA+BsC,MAApD;EAEA,IAAMC,eAAe,GAAGtB,QAAQ,CAAChM,IAAT,CAAc,UAAAhI,OAAO;IAC3C,IAAMyT,UAAU,GAAGzT,OAAO,CAAC+S,qBAAR,GAAgCW,GAAnD;IACA,IAAM6B,aAAa,GAAGvV,OAAO,CAAC+S,qBAAR,GAAgCsC,MAAtD;IAEA,OACG5B,UAAU,IAAIE,SAAd,IAA2BF,UAAU,IAAI2B,YAA1C,IACCG,aAAa,IAAI5B,SAAjB,IAA8B4B,aAAa,IAAIH,YAFlD;GAJsB,CAAxB;EAUA,OAAOE,eAAe,IAAI,IAA1B;AACD;AAED,SAAgBE,sBAAsBxV;EACpC,OAAO,CAAC,CAACA,OAAO,CAACQ,kBAAjB;AACD;;AC3JM,IAAMiV,mBAAmB,2BAAYzW,WAAW,CAACD,UAAU,CAACuH,KAAZ,CAAhD;AACP,AAAO,IAAMoP,oBAAoB,gBAAG,CAClCD,mBADkC,EAElCzW,WAAW,CAACD,UAAU,CAAC4W,OAAZ,CAFuB,YAG1B3W,WAAW,CAACD,UAAU,CAACU,MAAZ,CAHe,QAIlCL,IAJkC,CAI7B,EAJ6B,CAA7B;AAMP,SAAgBwW,iBACdC;;;EAEA,gCAAOA,YAAP,oBAAOA,YAAY,CAAEC,OAAd,CAAsBL,mBAAtB,CAAP,oCAAqD,IAArD;AACD;AAED,SAQgBM,iBACd/V;EAEA,IAAMgW,eAAe,GAAGC,+BAA+B,CAACjW,OAAD,CAAvD;EACA,IAAMsH,OAAO,GAAG4O,uBAAuB,CAAClW,OAAD,CAAvC;;EAEA,IAAI,CAACgW,eAAL,EAAsB;IACpB,OAAO,EAAP;;;EAGF,IAAM1P,KAAK,GAAG6B,cAAc,CAACb,OAAD,WAACA,OAAD,GAAY0O,eAAZ,CAA5B;;EAEA,IAAI,CAAC1P,KAAL,EAAY;IACV,OAAO,EAAP;;;EAGF,OAAO,CAACA,KAAD,EAAQgB,OAAR,CAAP;AACD;AAED,SAAgB6O,eAAenW;;;EAC7B,OAAO4P,OAAO,CACZ,CAAA5P,OAAO,QAAP,YAAAA,OAAO,CAAEoW,OAAT,CAAiBX,mBAAjB,OACEzV,OADF,6CACEA,OAAO,CAAEqW,aADX,qBACE,sBAAwBD,OAAxB,CAAgCX,mBAAhC,CADF,CADY,CAAd;AAID;AAED,SAagBjC,cAAcxT;;;EAC5B,gCAAOA,OAAP,oBAAOA,OAAO,CAAEsW,YAAhB,oCAAgC,CAAhC;AACD;AAED,SAAgBC,mBAAmBvW;EACjC,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,CAAP;;;EAGF,IAAMwW,MAAM,GAAGZ,gBAAgB,CAAC5V,OAAD,CAA/B;EACA,IAAMuD,QAAQ,GAAGkT,eAAe,CAACD,MAAD,CAAhC;;EAGA,IAAME,WAAW,GAAGC,mBAAmB,CAACpT,QAAD,CAAvC;EAEA,OAAOqT,gBAAgB,CAACJ,MAAD,CAAhB,GAA2BI,gBAAgB,CAACrT,QAAD,CAA3C,GAAwDmT,WAA/D;AACD;AAED,SAAgBC,oBAAoBpT;;;EAClC,IAAI,CAACA,QAAL,EAAe;IACb,OAAO,CAAP;;;EAGF,IAAMsT,oBAAoB,GAAGtT,QAAQ,CAACuT,aAAT,CAC3B9X,WAAW,CAACD,UAAU,CAACgY,eAAZ,CADgB,CAA7B;EAIA,OACE,0BAACxT,QAAD,oBAACA,QAAQ,CAAE+S,YAAX,oCAA2B,CAA3B,8BAAiCO,oBAAjC,oBAAiCA,oBAAoB,CAAEP,YAAvD,oCAAuE,CAAvE,CADF;AAGD;AAED,SAAgBU,mBAAmB1Q;EACjC,IAAI,CAACA,KAAL,EAAY;IACV,OAAO,KAAP;;;EAGF,OACE2Q,0BAA0B,CAAC3Q,KAAD,CAA1B,GACAqQ,mBAAmB,CAACF,eAAe,CAACnQ,KAAD,CAAhB,CAFrB;AAID;AAED,SAAgB4Q,gBAAgBC;EAC9B,IAAI,CAACA,IAAL,EAAW,OAAO,IAAP;EAEX,OAAOA,IAAI,CAACf,OAAL,CAAapX,WAAW,CAACD,UAAU,CAACqY,UAAZ,CAAxB,IACHD,IADG,GAEHA,IAAI,CAACL,aAAL,CAAmB9X,WAAW,CAACD,UAAU,CAACqY,UAAZ,CAA9B,CAFJ;AAGD;AAED,SAAgBH,2BAA2B3Q;;;EACzC,IAAI,CAACA,KAAL,EAAY;IACV,OAAO,CAAP;;;EAGF,OAAOiQ,kBAAkB,CAACjQ,KAAD,CAAlB,mDAA6B+Q,iBAAiB,CAAC/Q,KAAD,CAA9C,qBAA6B,mBAA0BgR,SAAvD,oCAAoE,CAApE,CAAP;AACD;AAED,SAAgBD,kBAAkBrX;;;EAChC,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAGF,2BAAOA,OAAO,CAAC8V,OAAR,CAAgB9W,WAAW,CAACD,UAAU,CAACqY,UAAZ,CAA3B,CAAP,+BAA8D,IAA9D;AACD;AAED,SAAgBG,mBAAmBvX;EACjC,IAAMwW,MAAM,GAAGZ,gBAAgB,CAAC5V,OAAD,CAA/B;EACA,IAAMuD,QAAQ,GAAGkT,eAAe,CAACD,MAAD,CAAhC;EAEA,OAAOgB,iBAAiB,CAAChB,MAAD,CAAjB,GAA4BgB,iBAAiB,CAACjU,QAAD,CAApD;AACD;;AAED,SAASqT,gBAAT,CAA0B5W,OAA1B;;;EACE,6BAAOA,OAAP,oBAAOA,OAAO,CAAEyX,SAAhB,iCAA6B,CAA7B;AACD;;AAED,SAASD,iBAAT,CAA2BxX,OAA3B;;;EACE,8BAAOA,OAAP,oBAAOA,OAAO,CAAE0X,UAAhB,kCAA8B,CAA9B;AACD;;AAED,SAAgBxB,wBAAwB5P;;;EACtC,6BAAOqR,iBAAiB,CAAC/B,gBAAgB,CAACtP,KAAD,CAAjB,EAA0B,SAA1B,CAAxB,iCAAgE,IAAhE;AACD;AAED,SAAgB2P,gCACd3P;EAEA,IAAMgB,OAAO,GAAG4O,uBAAuB,CAAC5P,KAAD,CAAvC;;EAEA,IAAIgB,OAAJ,EAAa;IACX,OAAOD,sBAAsB,CAACC,OAAD,CAA7B;;;EAEF,OAAO,IAAP;AACD;;AAED,SAASqQ,iBAAT,CACE3X,OADF,EAEE6F,GAFF;;;EAIE,8BAAO+R,cAAc,CAAC5X,OAAD,CAAd,CAAwB6F,GAAxB,CAAP,kCAAuC,IAAvC;AACD;;AAED,SAAS+R,cAAT,CAAwB5X,OAAxB;;;EACE,2BAAOA,OAAP,oBAAOA,OAAO,CAAE6X,OAAhB,+BAA2B,EAA3B;AACD;;AAED,SAAgBC,eAAe9X;EAC7B,OAAOA,OAAO,CAAC+X,SAAR,CAAkBC,QAAlB,CAA2BjZ,UAAU,CAAC4W,OAAtC,CAAP;AACD;AAED,SAAgBsC,SAASjY;EACvB,IAAI,CAACA,OAAL,EAAc,OAAO,IAAP;EAEd,OAAOA,OAAO,CAAC+X,SAAR,CAAkBC,QAAlB,CAA2BjZ,UAAU,CAACU,MAAtC,CAAP;AACD;AAED,SAAgByY,iBAAiBrF;EAC/B,IAAI,CAACA,MAAL,EAAa;IACX,OAAO,EAAP;;;EAGF,OAAOsF,KAAK,CAACC,IAAN,CACLvF,MAAM,CAACwF,gBAAP,CAAwB3C,oBAAxB,CADK,CAAP;AAGD;AAED,SAAgB4C,iBAAiBtY;EAC/B,IAAI,CAACA,OAAL,EAAc,OAAO,IAAP;EAEd,IAAMoG,SAAS,GAAG8R,gBAAgB,CAAClY,OAAD,CAAlC;;EACA,uBAAeoG,SAAS,CAACkO,KAAV,CAAgB,CAAC,CAAjB,CAAf;MAAOiE,IAAP;;EACA,IAAI,CAACA,IAAL,EAAW;IACT,OAAO,IAAP;;;EAGF,IAAI,CAACT,cAAc,CAACS,IAAD,CAAnB,EAA2B;IACzB,OAAOC,gBAAgB,CAACD,IAAD,CAAvB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBE,iBAAiBzY;EAC/B,IAAMO,IAAI,GAAGP,OAAO,CAACQ,kBAArB;;EAEA,IAAI,CAACD,IAAL,EAAW;IACT,OAAOmY,iBAAiB,CAACC,YAAY,CAAC3Y,OAAD,CAAb,CAAxB;;;EAGF,IAAI,CAAC8X,cAAc,CAACvX,IAAD,CAAnB,EAA2B;IACzB,OAAOkY,gBAAgB,CAAClY,IAAD,CAAvB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBiY,iBAAiBxY;EAC/B,IAAMI,IAAI,GAAGJ,OAAO,CAACK,sBAArB;;EAEA,IAAI,CAACD,IAAL,EAAW;IACT,OAAOkY,gBAAgB,CAACM,YAAY,CAAC5Y,OAAD,CAAb,CAAvB;;;EAGF,IAAI,CAAC8X,cAAc,CAAC1X,IAAD,CAAnB,EAA2B;IACzB,OAAOoY,gBAAgB,CAACpY,IAAD,CAAvB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBsY,kBAAkB7F;EAChC,IAAI,CAACA,MAAL,EAAa;IACX,OAAO,IAAP;;;EAGF,IAAMzM,SAAS,GAAG8R,gBAAgB,CAACrF,MAAD,CAAlC;EAEA,OAAOsC,8BAA8B,CAACtC,MAAD,EAASzM,SAAT,CAArC;AACD;AAED,SAAgBwS,aAAa5Y;EAC3B,IAAMuD,QAAQ,GAAGkT,eAAe,CAACzW,OAAD,CAAhC;;EAEA,IAAI,CAACuD,QAAL,EAAe;IACb,OAAO,IAAP;;;EAGF,IAAMnD,IAAI,GAAGmD,QAAQ,CAAClD,sBAAtB;;EAEA,IAAI,CAACD,IAAL,EAAW;IACT,OAAO,IAAP;;;EAGF,IAAI6X,QAAQ,CAAC7X,IAAD,CAAZ,EAAoB;IAClB,OAAOwY,YAAY,CAACxY,IAAD,CAAnB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBuY,aAAa3Y;EAC3B,IAAMuD,QAAQ,GAAGkT,eAAe,CAACzW,OAAD,CAAhC;;EAEA,IAAI,CAACuD,QAAL,EAAe;IACb,OAAO,IAAP;;;EAGF,IAAMhD,IAAI,GAAGgD,QAAQ,CAAC/C,kBAAtB;;EAEA,IAAI,CAACD,IAAL,EAAW;IACT,OAAO,IAAP;;;EAGF,IAAI0X,QAAQ,CAAC1X,IAAD,CAAZ,EAAoB;IAClB,OAAOoY,YAAY,CAACpY,IAAD,CAAnB;;;EAGF,OAAOA,IAAP;AACD;AAED,SAAgBkW,gBAAgBzW;EAC9B,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAEF,OAAOA,OAAO,CAAC8V,OAAR,CAAgB9W,WAAW,CAACD,UAAU,CAACwE,QAAZ,CAA3B,CAAP;AACD;AAED,SAAgBsV,uBAAuB7Y;EACrC,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAEF,OAAOA,OAAO,CAAC8V,OAAR,CACL9W,WAAW,CAACD,UAAU,CAACgY,eAAZ,CADN,CAAP;AAGD;;SCnTe+B,iBAAiBxR;EAC/B,OAAOA,OAAO,CACXT,KADI,CACE,GADF,EAEJ3H,GAFI,CAEA,UAAA6Z,GAAG;IAAA,OAAIC,MAAM,CAACC,aAAP,CAAqBC,QAAQ,CAACH,GAAD,EAAM,EAAN,CAA7B,CAAJ;GAFH,EAGJ3Z,IAHI,CAGC,EAHD,CAAP;AAID;;ACAD,IAAM+Z,gBAAgB,GAAG,eAAzB;AAUA,SAAgBC,aAAaC;EAC3B,IAAI;IAAA;;IACF,IAAI,aAACvK,MAAD,aAAC,QAAQwK,YAAT,CAAJ,EAA2B;MACzB,OAAO,EAAP;;;IAEF,IAAMC,MAAM,GAAGC,IAAI,CAACC,KAAL,sCACb3K,MADa,qBACb,SAAQwK,YAAR,CAAqBI,OAArB,CAA6BP,gBAA7B,CADa,oCACqC,IADrC,CAAf;;IAIA,IAAIE,IAAI,KAAKjX,cAAc,CAAC2I,QAA5B,EAAsC;MACpC,OAAOwO,MAAM,CAACI,IAAP,CAAY,UAACC,CAAD,EAAIC,CAAJ;QAAA,OAAUA,CAAC,CAACC,KAAF,GAAUF,CAAC,CAACE,KAAtB;OAAZ,CAAP;;;IAGF,OAAOP,MAAP;GAZF,CAaE,gBAAM;IACN,OAAO,EAAP;;AAEH;AAED,SAAgBQ,aAAazT,OAAkBN;EAC7C,IAAMuT,MAAM,GAAGH,YAAY,EAA3B;EAEA,IAAM9R,OAAO,GAAGN,YAAY,CAACV,KAAD,EAAQN,QAAR,CAA5B;EACA,IAAMgQ,eAAe,GAAGhP,YAAY,CAACV,KAAD,CAApC;EAEA,IAAI0T,QAAQ,GAAGT,MAAM,CAACvR,IAAP,CAAY;IAAA,IAAYiS,CAAZ,QAAG3S,OAAH;IAAA,OAAoB2S,CAAC,KAAK3S,OAA1B;GAAZ,CAAf;EAEA,IAAI4S,QAAJ;;EAEA,IAAIF,QAAJ,EAAc;IACZE,QAAQ,GAAG,CAACF,QAAD,EAAWG,MAAX,CAAkBZ,MAAM,CAACa,MAAP,CAAc,UAAAC,CAAC;MAAA,OAAIA,CAAC,KAAKL,QAAV;KAAf,CAAlB,CAAX;GADF,MAEO;IACLA,QAAQ,GAAG;MACT1S,OAAO,EAAPA,OADS;MAETgT,QAAQ,EAAEtE,eAFD;MAGT8D,KAAK,EAAE;KAHT;IAKAI,QAAQ,IAAIF,QAAJ,SAAiBT,MAAjB,CAAR;;;EAGFS,QAAQ,CAACF,KAAT;EAEAI,QAAQ,CAAC/V,MAAT,GAAkB8O,IAAI,CAACsH,GAAL,CAASL,QAAQ,CAAC/V,MAAlB,EAA0B,EAA1B,CAAlB;;EAEA,IAAI;IAAA;;IACF,YAAA2K,MAAM,SAAN,qBAAQwK,YAAR,CAAqBkB,OAArB,CAA6BrB,gBAA7B,EAA+CK,IAAI,CAACiB,SAAL,CAAeP,QAAf,CAA/C,EADE;GAAJ,CAGE,iBAAM;;AAGT;;SCzDeQ,iBACdnX;EAEA,OAAOA,QAAQ,CAACA,QAAT,KAAsBf,UAAU,CAACI,MAAxC;AACD;AAED,SAAgB+X,cAAcrU;EAC5B,OAAOA,KAAK,CAACwC,MAAN,KAAiBmI,SAAxB;AACD;;SCTe2J;EACd,4BAA8CnJ,4BAA4B,EAA1E;MAAOoJ,eAAP;MAAwBC,kBAAxB;;EACA,4BAA8CpJ,uBAAuB,EAArE;MAAOqJ,eAAP;MAAwBC,kBAAxB;;EAEA,IAAMC,mBAAmB,GAAGC,WAAW,CAAC;IACtC,IAAIL,eAAJ,EAAqB;MACnBC,kBAAkB,CAAC,IAAD,CAAlB;;;IAGF,IAAIC,eAAJ,EAAqB;MACnBC,kBAAkB,CAAC,KAAD,CAAlB;;GANmC,EAQpC,CACDH,eADC,EAEDE,eAFC,EAGDD,kBAHC,EAIDE,kBAJC,CARoC,CAAvC;EAeA,OAAOC,mBAAP;AACD;AAED,SAAgBE;EACd,6BAA0B1J,4BAA4B,EAAtD;MAAOoJ,eAAP;;EACA,6BAA0BnJ,uBAAuB,EAAjD;MAAOqJ,eAAP;;EAEA,OAAO,SAASK,cAAT;IACL,OAAO,CAAC,CAACP,eAAF,IAAqBE,eAA5B;GADF;AAGD;;SChCuBM;EACtB,IAAMC,mBAAmB,GAAG1Z,sBAAsB,EAAlD;;EACA,4BAAoC6P,4BAA4B,EAAhE;MAAS8J,uBAAT;;EAEA,OAAO,SAAST,kBAAT,CAA4B9a,OAA5B;IACL,wBAAgB+V,gBAAgB,CAAC/V,OAAD,CAAhC;QAAOsG,KAAP;;IAEA,IAAIA,KAAJ,EAAW;MACTgV,mBAAmB,CAACtb,OAAD,CAAnB;MACAub,uBAAuB,CAACjV,KAAD,CAAvB;;GALJ;AAQD;;SCmBekV,qBACdva;EAEA,IAAMwa,iBAAiB,GAAGrP,MAAM,EAAhC;EACA,IAAM0O,kBAAkB,GAAGO,qBAAqB,EAAhD;EACA,IAAMnL,gBAAgB,GAAGiB,mBAAmB,EAA5C;;EACA,4BAAoCM,4BAA4B,EAAhE;MAAS8J,uBAAT;;EACA,IAAMN,mBAAmB,GAAGL,sBAAsB,EAAlD;;EACA,4BAAyBtJ,sBAAsB,EAA/C;MAAOZ,cAAP;;EACA,IAAMrE,YAAY,GAAGW,qBAAqB,EAA1C;;EACA,0BAA4B2E,kBAAkB,EAA9C;MAASG,eAAT;;EACA,IAAMxH,WAAW,GAAGsD,oBAAoB,EAAxC;EACA,IAAM8N,gBAAgB,GAAG9O,mBAAmB,EAA5C;EAEA,IAAM+O,OAAO,GAAG5a,WAAA,CACd,SAAS4a,OAAT,CAAiBC,KAAjB;IACE,IAAI1L,gBAAgB,CAACpO,OAArB,EAA8B;MAC5B;;;IAGFmZ,mBAAmB;;IAEnB,sBAAyBY,cAAc,CAACD,KAAD,CAAvC;QAAOtV,KAAP;QAAcgB,OAAd;;IAEA,IAAI,CAAChB,KAAD,IAAU,CAACgB,OAAf,EAAwB;MACtB;;;IAGF,IAAMwU,aAAa,GACjB9S,0BAA0B,CAAC1B,OAAD,CAA1B,IAAuCoJ,cADzC;IAGAoB,eAAe;IACfiI,YAAY,CAACzT,KAAD,EAAQwV,aAAR,CAAZ;IACAzP,YAAY,CACV0P,gBAAgB,CAACzV,KAAD,EAAQwV,aAAR,EAAuBJ,gBAAvB,EAAyCpR,WAAzC,CADN,EAEVsR,KAFU,CAAZ;GAnBY,EAwBd,CACElL,cADF,EAEEuK,mBAFF,EAGE/K,gBAHF,EAIE7D,YAJF,EAKEyF,eALF,EAMExH,WANF,EAOEoR,gBAPF,CAxBc,CAAhB;EAmCA,IAAMM,WAAW,GAAGjb,WAAA,CAClB,SAASib,WAAT,CAAqBJ,KAArB;;;IACE,IAAIH,iBAAiB,CAAC3Z,OAAtB,EAA+B;MAC7B+M,YAAY,CAAC4M,iBAAiB,CAAC3Z,OAAnB,CAAZ;;;IAGF,uBAAgB+Z,cAAc,CAACD,KAAD,CAA9B;QAAOtV,KAAP;;IAEA,IAAI,CAACA,KAAD,IAAU,CAACmB,kBAAkB,CAACnB,KAAD,CAAjC,EAA0C;MACxC;;;IAGFmV,iBAAiB,CAAC3Z,OAAlB,cAA4BgN,MAA5B,qBAA4B,QAAQ3I,UAAR,CAAmB;MAC7C+J,gBAAgB,CAACpO,OAAjB,GAA2B,IAA3B;MACA2Z,iBAAiB,CAAC3Z,OAAlB,GAA4BmP,SAA5B;MACAgK,mBAAmB;MACnBH,kBAAkB,CAACc,KAAK,CAAC/Z,MAAP,CAAlB;MACA0Z,uBAAuB,CAACjV,KAAD,CAAvB;KAL0B,EAMzB,GANyB,CAA5B;GAZgB,EAoBlB,CACE4J,gBADF,EAEE+K,mBAFF,EAGEH,kBAHF,EAIES,uBAJF,CApBkB,CAApB;EA2BA,IAAMU,SAAS,GAAGlb,WAAA,CAChB,SAASkb,SAAT;IACE,IAAIR,iBAAiB,CAAC3Z,OAAtB,EAA+B;MAC7B+M,YAAY,CAAC4M,iBAAiB,CAAC3Z,OAAnB,CAAZ;MACA2Z,iBAAiB,CAAC3Z,OAAlB,GAA4BmP,SAA5B;KAFF,MAGO,IAAIf,gBAAgB,CAACpO,OAArB,EAA8B;;;;;;MAOnC7B,qBAAqB,CAAC;QACpBiQ,gBAAgB,CAACpO,OAAjB,GAA2B,KAA3B;OADmB,CAArB;;GAZY,EAiBhB,CAACoO,gBAAD,CAjBgB,CAAlB;EAoBA3D,SAAS,CAAC;IACR,IAAI,CAACtL,OAAO,CAACa,OAAb,EAAsB;MACpB;;;IAEF,IAAMyQ,OAAO,GAAGtR,OAAO,CAACa,OAAxB;IACAyQ,OAAO,CAACC,gBAAR,CAAyB,OAAzB,EAAkCmJ,OAAlC,EAA2C;MACzCjJ,OAAO,EAAE;KADX;IAIAH,OAAO,CAACC,gBAAR,CAAyB,WAAzB,EAAsCwJ,WAAtC,EAAmD;MACjDtJ,OAAO,EAAE;KADX;IAGAH,OAAO,CAACC,gBAAR,CAAyB,SAAzB,EAAoCyJ,SAApC,EAA+C;MAC7CvJ,OAAO,EAAE;KADX;IAIA,OAAO;MACLH,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,OAA7B,EAAsCgJ,OAAtC;MACApJ,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,WAA7B,EAA0CqJ,WAA1C;MACAzJ,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,SAA7B,EAAwCsJ,SAAxC;KAHF;GAhBO,EAqBN,CAAChb,OAAD,EAAU0a,OAAV,EAAmBK,WAAnB,EAAgCC,SAAhC,CArBM,CAAT;AAsBD;;AAED,SAASJ,cAAT,CAAwBD,KAAxB;EACE,IAAM/Z,MAAM,GAAG+Z,KAAH,oBAAGA,KAAK,CAAE/Z,MAAtB;;EACA,IAAI,CAACsU,cAAc,CAACtU,MAAD,CAAnB,EAA6B;IAC3B,OAAO,EAAP;;;EAGF,OAAOkU,gBAAgB,CAAClU,MAAD,CAAvB;AACD;;AAED,SAASka,gBAAT,CACEzV,KADF,EAEEoK,cAFF,EAGEgL,gBAHF,EAIEpR,WAJF;EAME,IAAM1B,KAAK,GAAGnC,UAAU,CAACH,KAAD,CAAxB;;EAEA,IAAIqU,aAAa,CAACrU,KAAD,CAAjB,EAA0B;IACxB,IAAMgB,QAAO,GAAGN,YAAY,CAACV,KAAD,CAA5B;;IACA,OAAO;MACLoK,cAAc,EAAdA,cADK;MAELpK,KAAK,EAAEgB,QAFF;MAGL4U,WAHK;QAIH,OAAO5V,KAAK,CAACwC,MAAb;OAJG;MAMLqT,QAAQ,EAAE7V,KAAK,CAACwC,MANX;MAOLsT,QAAQ,EAAE,IAPL;MAQLxT,KAAK,EAALA,KARK;MASLtB,OAAO,EAAPA,QATK;MAULD,sBAAsB,EAAEC;KAV1B;;;EAaF,IAAMA,OAAO,GAAGN,YAAY,CAACV,KAAD,EAAQoK,cAAR,CAA5B;EAEA,OAAO;IACLA,cAAc,EAAdA,cADK;IAELpK,KAAK,EAAEwS,gBAAgB,CAACxR,OAAD,CAFlB;IAGL4U,WAHK,uBAGOrX,UAHP;UAGOA;QAAAA,aAAyB6W,2BAAAA,mBAAoBrZ,UAAU,CAAC4C;;;MAClE,OAAOqF,WAAW,CAAChD,OAAD,EAAUzC,UAAV,CAAlB;KAJG;IAMLsX,QAAQ,EAAE7R,WAAW,CAAChD,OAAD,EAAUoU,gBAAV,WAAUA,gBAAV,GAA8BrZ,UAAU,CAAC4C,KAAzC,CANhB;IAOLmX,QAAQ,EAAE,KAPL;IAQLxT,KAAK,EAALA,KARK;IASLtB,OAAO,EAAPA,OATK;IAULD,sBAAsB,EAAEL,YAAY,CAACV,KAAD;GAVtC;AAYD;;SCnMe+V,YAAYpb;EAC1B,IAAMga,mBAAmB,GAAGL,sBAAsB,EAAlD;EAEArO,SAAS,CAAC;IACR,IAAMgG,OAAO,GAAGtR,OAAO,CAACa,OAAxB;;IACA,IAAI,CAACyQ,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAACC,gBAAR,CAAyB,QAAzB,EAAmC8J,QAAnC,EAA6C;MAC3C5J,OAAO,EAAE;KADX;;IAIA,SAAS4J,QAAT;MACErB,mBAAmB;;;IAGrB,OAAO;MACL1I,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,QAA7B,EAAuC2J,QAAvC;KADF;GAdO,EAiBN,CAACrb,OAAD,EAAUga,mBAAV,CAjBM,CAAT;AAkBD;;SCZesB,SAASpF,MAAuBzD;MAAAA;IAAAA,MAAc;;;EAC5D,IAAM8I,QAAQ,GAAGtF,eAAe,CAACC,IAAD,CAAhC;;EAEA,IAAI,CAACqF,QAAL,EAAe;IACb;;;EAGFvc,qBAAqB,CAAC;IACpBuc,QAAQ,CAAClF,SAAT,GAAqB5D,GAAG,GAAG,CAA3B;GADmB,CAArB;AAGD;AAED,SAAgB+I,SAAStF,MAAuBuF;EAC9C,IAAMF,QAAQ,GAAGtF,eAAe,CAACC,IAAD,CAAhC;;EAEA,IAAI,CAACqF,QAAL,EAAe;IACb;;;EAGFvc,qBAAqB,CAAC;IACpBuc,QAAQ,CAAClF,SAAT,GAAqBkF,QAAQ,CAAClF,SAAT,GAAqBoF,EAA1C;GADmB,CAArB;AAGD;AAED,SAAgBC;EACd,IAAM1b,OAAO,GAAGc,UAAU,EAA1B;EAEA,OAAOmZ,WAAW,CAChB,UAACxH,GAAD;IACEzT,qBAAqB,CAAC;MACpB,IAAIgB,OAAO,CAACa,OAAZ,EAAqB;QACnBb,OAAO,CAACa,OAAR,CAAgBwV,SAAhB,GAA4B5D,GAA5B;;KAFiB,CAArB;GAFc,EAQhB,CAACzS,OAAD,CARgB,CAAlB;AAUD;AAED,SAAgB2b,sBAAsBtW;EACpC,IAAI,CAACA,KAAD,IAAU,CAAC0Q,kBAAkB,CAAC1Q,KAAD,CAAjC,EAA0C;IACxC;;;EAGF,IAAIA,KAAK,CAACwP,OAAN,CAAc9W,WAAW,CAACD,UAAU,CAAC8b,eAAZ,CAAzB,CAAJ,EAA4D;IAC1D;;;EAGF,IAAMzD,UAAU,GAAGC,iBAAiB,CAAC/Q,KAAD,CAApC;EACA,IAAMoW,EAAE,GAAGzF,0BAA0B,CAAC3Q,KAAD,CAArC;EACAmW,QAAQ,CAACrF,UAAD,EAAa,EAAET,mBAAmB,CAACF,eAAe,CAACnQ,KAAD,CAAhB,CAAnB,GAA8CoW,EAAhD,CAAb,CAAR;AACD;;SCzDeG;EACd,IAAM3b,cAAc,GAAGc,iBAAiB,EAAxC;EAEA,OAAOkZ,WAAW,CAAC;IACjBnb,YAAY,CAACmB,cAAc,CAACY,OAAhB,CAAZ;GADgB,EAEf,CAACZ,cAAD,CAFe,CAAlB;AAGD;AAED,SAAgB4b;EACd,IAAM3b,iBAAiB,GAAGc,oBAAoB,EAA9C;EAEA,OAAOiZ,WAAW,CAAC;IACjB,IAAI,CAAC/Z,iBAAiB,CAACW,OAAvB,EAAgC;MAC9B;;;IAGFrB,sBAAsB,CAACU,iBAAiB,CAACW,OAAnB,CAAtB;GALgB,EAMf,CAACX,iBAAD,CANe,CAAlB;AAOD;AAED,SAAgB4b;EACd,IAAM3b,qBAAqB,GAAGc,wBAAwB,EAAtD;EAEA,OAAOgZ,WAAW,CAAC;IACjB,IAAI,CAAC9Z,qBAAqB,CAACU,OAA3B,EAAoC;MAClC;;;IAGFrB,sBAAsB,CAACW,qBAAqB,CAACU,OAAvB,CAAtB;GALgB,EAMf,CAACV,qBAAD,CANe,CAAlB;AAOD;;ACvBD,SAAS4b,eAAT;EACE,IAAM/M,SAAS,GAAGiB,YAAY,EAA9B;EAEA,OAAO,SAAS+L,SAAT,CACLC,MADK;IAGL,IAAI,OAAOA,MAAP,KAAkB,UAAtB,EAAkC;MAChC,OAAOD,SAAS,CAACC,MAAM,CAACjN,SAAS,CAACnO,OAAX,CAAP,CAAhB;;;IAGFmO,SAAS,CAACnO,OAAV,GAAoBob,MAApB;GAPF;AASD;;AAED,SAAgBC;EACd,IAAMC,WAAW,GAAGC,cAAc,EAAlC;EACA,IAAMnc,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMsb,gBAAgB,GAAGT,mBAAmB,EAA5C;EAEA,OAAO,SAASU,WAAT;IACL,IAAIrc,cAAc,CAACY,OAAnB,EAA4B;MAC1BZ,cAAc,CAACY,OAAf,CAAuBN,KAAvB,GAA+B,EAA/B;;;IAGF4b,WAAW,CAAC,EAAD,CAAX;IACAE,gBAAgB;GANlB;AAQD;AAED,SAAgBE;EACd,IAAMtc,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMob,WAAW,GAAGC,cAAc,EAAlC;EAEA,OAAO,SAASI,YAAT,CAAsBC,GAAtB;IACL,IAAIxc,cAAc,CAACY,OAAnB,EAA4B;MAC1BZ,cAAc,CAACY,OAAf,CAAuBN,KAAvB,QAAkCN,cAAc,CAACY,OAAf,CAAuBN,KAAzD,GAAiEkc,GAAjE;MACAN,WAAW,CAACO,uBAAuB,CAACzc,cAAc,CAACY,OAAf,CAAuBN,KAAxB,CAAxB,CAAX;KAFF,MAGO;MACL4b,WAAW,CAACO,uBAAuB,CAACD,GAAD,CAAxB,CAAX;;GALJ;AAQD;AAED,SAAgBE;EACd,IAAM1c,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMiO,SAAS,GAAGiB,YAAY,EAA9B;EACA,IAAM2M,YAAY,GAAGb,eAAe,EAApC;EACA,IAAMI,WAAW,GAAGC,cAAc,EAAlC;;EAEA,0BAAqBhM,kBAAkB,EAAvC;MAAOb,UAAP;;EACA,IAAMsN,mBAAmB,GAAGC,sBAAsB,CAChD9N,SAAS,CAACnO,OADsC,EAEhD0O,UAFgD,CAAlD;EAKA,OAAO;IACLwN,QAAQ,EAARA,QADK;IAELxN,UAAU,EAAVA,UAFK;IAGLtP,cAAc,EAAdA,cAHK;IAIL4c,mBAAmB,EAAnBA;GAJF;;EAOA,SAASE,QAAT,CAAkBC,UAAlB;IACE,IAAM7D,MAAM,GAAGnK,SAAS,CAACnO,OAAzB;IAEA,IAAMoc,SAAS,GAAGD,UAAU,CAACtX,WAAX,EAAlB;;IAEA,IAAIyT,MAAM,QAAN,IAAAA,MAAM,CAAG8D,SAAH,CAAN,IAAuBA,SAAS,CAAC/Z,MAAV,IAAoB,CAA/C,EAAkD;MAChD,OAAOiZ,WAAW,CAACc,SAAD,CAAlB;;;IAGF,IAAMC,YAAY,GAAGC,gBAAgB,CAACF,SAAD,EAAY9D,MAAZ,CAArC;;IAEA,IAAI,CAAC+D,YAAL,EAAmB;;;MAGjB,OAAOf,WAAW,CAACc,SAAD,CAAlB;;;IAGFL,YAAY,CAAC,UAAA/b,OAAO;MAAA;;MAAA,OAClBwC,MAAM,CAACC,MAAP,CAAczC,OAAd,uCACGoc,SADH,IACeG,0BAA0B,CAACF,YAAD,EAAeD,SAAf,CADzC,kBADkB;KAAR,CAAZ;IAKAd,WAAW,CAACc,SAAD,CAAX;;AAEH;;AAED,SAASb,cAAT;EACE,2BAA0BhM,kBAAkB,EAA5C;MAASiN,aAAT;;EACA,IAAMxd,aAAa,GAAGY,gBAAgB,EAAtC;EAEA,OAAO,SAAS0b,WAAT,CAAqB5M,UAArB;IACLvQ,qBAAqB,CAAC;MACpBqe,aAAa,CAAC9N,UAAU,GAAGA,UAAH,oBAAGA,UAAU,CAAE7J,WAAZ,EAAH,GAA+B6J,UAA1C,CAAb,CAAmE+N,IAAnE,CACE;QACEhC,QAAQ,CAACzb,aAAa,CAACgB,OAAf,EAAwB,CAAxB,CAAR;OAFJ;KADmB,CAArB;GADF;AASD;;AAED,SAASuc,0BAAT,CACEzW,MADF,EAEE4W,OAFF;EAIE,IAAMC,QAAQ,GAAe,EAA7B;;EAEA,KAAK,IAAMnX,OAAX,IAAsBM,MAAtB,EAA8B;IAC5B,IAAMtB,KAAK,GAAGsB,MAAM,CAACN,OAAD,CAApB;;IAEA,IAAIoX,QAAQ,CAACpY,KAAD,EAAQkY,OAAR,CAAZ,EAA8B;MAC5BC,QAAQ,CAACnX,OAAD,CAAR,GAAoBhB,KAApB;;;;EAIJ,OAAOmY,QAAP;AACD;;AAED,SAASC,QAAT,CAAkBpY,KAAlB,EAAoCkY,OAApC;EACE,OAAO/X,UAAU,CAACH,KAAD,CAAV,CAAkBqY,IAAlB,CAAuB,UAAArb,IAAI;IAAA,OAAIA,IAAI,CAAC4E,QAAL,CAAcsW,OAAd,CAAJ;GAA3B,CAAP;AACD;;AAED,SAAgBI;EACd,oBAA4B1N,YAAY,EAAxC;MAAiBkJ,MAAjB,iBAAQtY,OAAR;;EACA,2BAAqBuP,kBAAkB,EAAvC;MAAOb,UAAP;;EAEA,OAAO,UAAAlJ,OAAO;IAAA,OAAIuX,2BAA2B,CAACvX,OAAD,EAAU8S,MAAV,EAAkB5J,UAAlB,CAA/B;GAAd;AACD;;AAED,SAASqO,2BAAT,CACEvX,OADF,EAEE8S,MAFF,EAGE5J,UAHF;;;EAKE,IAAI,CAAC4J,MAAD,IAAW,CAAC5J,UAAhB,EAA4B;IAC1B,OAAO,KAAP;;;EAGF,OAAO,wBAAC4J,MAAM,CAAC5J,UAAD,CAAP,aAAC,mBAAqBlJ,OAArB,CAAD,CAAP;AACD;;AAID,SAAS8W,gBAAT,CACEI,OADF,EAEEM,IAFF;EAIE,IAAI,CAACA,IAAL,EAAW;IACT,OAAO,IAAP;;;EAGF,IAAIA,IAAI,CAACN,OAAD,CAAR,EAAmB;IACjB,OAAOM,IAAI,CAACN,OAAD,CAAX;;;EAGF,IAAMO,kBAAkB,GAAGza,MAAM,CAAC0a,IAAP,CAAYF,IAAZ,EACxBnF,IADwB,CACnB,UAACC,CAAD,EAAIC,CAAJ;IAAA,OAAUA,CAAC,CAAC1V,MAAF,GAAWyV,CAAC,CAACzV,MAAvB;GADmB,EAExB6D,IAFwB,CAEnB,UAAAnC,GAAG;IAAA,OAAI2Y,OAAO,CAACtW,QAAR,CAAiBrC,GAAjB,CAAJ;GAFgB,CAA3B;;EAIA,IAAIkZ,kBAAJ,EAAwB;IACtB,OAAOD,IAAI,CAACC,kBAAD,CAAX;;;EAGF,OAAO,IAAP;AACD;;AAED,SAAgBpB,wBAAwBD;EACtC,IAAI,CAACA,GAAD,IAAQ,OAAOA,GAAP,KAAe,QAA3B,EAAqC;IACnC,OAAO,EAAP;;;EAGF,OAAOA,GAAG,CAACuB,IAAJ,GAAWtY,WAAX,EAAP;AACD;;AAED,SAASoX,sBAAT,CACEmB,WADF,EAEE1O,UAFF;;;EAIE,IAAI,EAAC0O,WAAD,YAACA,WAAW,CAAG1O,UAAH,CAAZ,CAAJ,EAAgC,OAAO,EAAP;EAEhC,IAAMzC,kBAAkB,GACtB,oBAAAzJ,MAAM,CAACoB,OAAP,CAAewZ,WAAf,oBAAeA,WAAW,CAAG1O,UAAH,CAA1B,sCAA2CrM,MAA3C,KAAqD,CADvD;;EAGA,OAAO2J,sBAAsB,CAACC,kBAAD,CAA7B;AACD;;SCpMeoR;EACd,4BAAiC5N,8BAA8B,EAA/D;MAAO6N,sBAAP;;EACA,IAAMC,eAAe,GAAGT,kBAAkB,EAA1C;EAEA,OAAO,UAACtY,KAAD;IACL,IAAMgB,OAAO,GAAGN,YAAY,CAACV,KAAD,CAA5B;IAEA,IAAMgZ,YAAY,GAAGF,sBAAsB,CAACpQ,GAAvB,CAA2B1H,OAA3B,CAArB;IACA,IAAMiY,WAAW,GAAGF,eAAe,CAAC/X,OAAD,CAAnC;IAEA,OAAO;MACLgY,YAAY,EAAZA,YADK;MAELC,WAAW,EAAXA,WAFK;MAGL9f,MAAM,EAAE6f,YAAY,IAAIC;KAH1B;GANF;AAYD;;ACtBD,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;AACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;AACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9B,KAAK;AACL,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;AACnC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,GAAG;AACH,CAAC;;;;;SCZeC,OAAOC;EACrB,OACE1e,aAAA,SAAA;IACE2e,IAAI,EAAC;KACDD;IACJtV,SAAS,EAAEwV,EAAE,CAACC,MAAM,CAACpJ,MAAR,EAAgBiJ,KAAK,CAACtV,SAAtB;IAHf,EAKGsV,KAAK,CAAC5e,QALT,CADF;AASD;AAED,IAAM+e,MAAM,gBAAGvgB,UAAU,CAACG,MAAX,CAAkB;EAC/BgX,MAAM,EAAE;IACN,KAAK,SADC;IAENqJ,MAAM,EAAE,SAFF;IAGNC,MAAM,EAAE,GAHF;IAINC,UAAU,EAAE,MAJN;IAKNC,OAAO,EAAE;;AANoB,CAAlB,CAAf;;SCNgBC;;;MACdxZ,kBAAAA;MACAa,eAAAA;MACA7H,cAAAA;MACAK,sBAAAA;iCACAogB;MAAAA,kDAAiB;MACjBC,qBAAAA;MACAtf,gBAAAA;EAEA,OACEE,aAAA,CAACye,MAAD;IACErV,SAAS,EAAEwV,EAAE,CACX5gB,UAAU,CAACuH,KADA,EAEX7G,MAAM,IAAIF,YAAY,CAACE,MAFZ,EAGXK,cAAc,IAAIP,YAAY,CAACO,cAHpB,iBAKRf,UAAU,CAAC4W,OALH,IAKa,CAAClW,MAAD,IAAW,CAACK,cALzB,MAMRf,UAAU,CAAC0I,kBANH,IAMwB0Y,aAAa,IAAID,cANzC;oBASC5Y;kBACFb,UAAU,CAAC,CAAD;sBACNA;GAZlB,EAcG5F,QAdH,CADF;AAkBD;;SCxCeuf;MACdhZ,iBAAAA;MACA0D,aAAAA;2BACAuV;MAAAA,sCAAW;MACXvX,cAAAA;MACAwX,eAAAA;EASA,OACEvf,aAAA,MAAA;IACEwf,GAAG,EAAEzX;IACL0X,GAAG,EAAEpZ;IACL+C,SAAS,EAAEwV,EAAE,CAAC5gB,UAAU,CAAC0hB,QAAZ,EAAsB,eAAtB;IACbC,OAAO,EAAEL,QAAQ,GAAG,MAAH,GAAY;IAC7BC,OAAO,EAAEA;IACTxV,KAAK,EAAEA;GANT,CADF;AAUD;;SCxBe6V;MACdrZ,eAAAA;MACAwD,aAAAA;EAKA,OACE/J,aAAA,OAAA;IACEoJ,SAAS,EAAEwV,EAAE,CAAC5gB,UAAU,CAAC0hB,QAAZ,EAAsB,kBAAtB;oBACCnZ;IACdwD,KAAK,EAAEA;GAHT,EAKGgO,gBAAgB,CAACxR,OAAD,CALnB,CADF;AASD;;SCPesZ;MACdta,aAAAA;MACAgB,eAAAA;MACAzC,kBAAAA;MACAgc,YAAAA;MACAR,gBAAAA;8BACA/V;MAAAA,4CAAczC;;EAEd,4BAAsC0J,8BAA8B,EAApE;MAASuP,yBAAT;;EAEA,IAAMhW,KAAK,GAAG,EAAd;;EACA,IAAI+V,IAAJ,EAAU;IACR/V,KAAK,CAACK,KAAN,GAAcL,KAAK,CAACP,MAAN,GAAeO,KAAK,CAACiW,QAAN,GAAoBF,IAApB,OAA7B;;;EAGF,IAAMG,aAAa,GAAG1a,KAAK,GAAGA,KAAH,GAAW6B,cAAc,CAACb,OAAD,CAApD;;EAEA,IAAI,CAAC0Z,aAAL,EAAoB;IAClB,OAAO,IAAP;;;EAGF,IAAIrG,aAAa,CAACqG,aAAD,CAAjB,EAAkC;IAChC,OACEjgB,aAAA,CAACqf,QAAD;MACEtV,KAAK,EAAEA;MACP1D,SAAS,EAAEE;MACXzC,UAAU,EAAExC,UAAU,CAAC4e;MACvBZ,QAAQ,EAAEA;MACVvX,MAAM,EAAEkY,aAAa,CAAClY;MACtBwX,OAAO,EAAEA;KANX,CADF;;;EAYF,OACEvf,aAAA,SAAA,MAAA,EACG8D,UAAU,KAAKxC,UAAU,CAAC4e,MAA1B,GACClgB,aAAA,CAAC4f,WAAD;IAAarZ,OAAO,EAAEA;IAASwD,KAAK,EAAEA;GAAtC,CADD,GAGC/J,aAAA,CAACqf,QAAD;IACEtV,KAAK,EAAEA;IACP1D,SAAS,EAAEA,SAAS,CAAC4Z,aAAD;IACpBnc,UAAU,EAAEA;IACZwb,QAAQ,EAAEA;IACVvX,MAAM,EAAEwB,WAAW,CAAChD,OAAD,EAAUzC,UAAV;IACnByb,OAAO,EAAEA;GANX,CAJJ,CADF;;EAiBA,SAASA,OAAT;IACEQ,yBAAyB,CAAC,UAAA1gB,IAAI;MAAA,OAAI,IAAI8K,GAAJ,CAAQ9K,IAAR,EAAc8gB,GAAd,CAAkB5Z,OAAlB,CAAJ;KAAL,CAAzB;;AAEH;;SClDe6Z;MACd7a,aAAAA;MACAgB,eAAAA;MACA7H,cAAAA;MACAK,sBAAAA;MACA+E,kBAAAA;iCACAqb;MAAAA,kDAAiB;MACjBW,YAAAA;MACAR,gBAAAA;MACA/V,mBAAAA;EAEA,IAAM6V,aAAa,GAAG1Y,kBAAkB,CAACnB,KAAD,CAAxC;EAEA,OACEvF,aAAA,CAACkf,oBAAD;IACEE,aAAa,EAAEA;IACfD,cAAc,EAAEA;IAChBzgB,MAAM,EAAEA;IACRK,cAAc,EAAEA;IAChB2G,UAAU,EAAEA,UAAU,CAACH,KAAD;IACtBgB,OAAO,EAAEA;GANX,EAQEvG,aAAA,CAAC6f,aAAD;IACEtZ,OAAO,EAAEA;IACThB,KAAK,EAAEA;IACPua,IAAI,EAAEA;IACNhc,UAAU,EAAEA;IACZwb,QAAQ,EAAEA;IACV/V,WAAW,EAAEA;GANf,CARF,CADF;AAmBD;;SCjCe8W;MACdC,sBAAAA;MACAxgB,gBAAAA;MACApB,cAAAA;MACAK,sBAAAA;EAEA,IAAMyD,QAAQ,GAAGI,0BAA0B,CAAC0d,cAAD,CAA3C;EACA,IAAMC,YAAY,GAAG1d,8BAA8B,CAACyd,cAAD,CAAnD;EAEA,OACEtgB,aAAA,KAAA;IACEoJ,SAAS,EAAEwV,EAAE,CACXC,QAAM,CAACrc,QADI,EAEX9D,MAAM,IAAIF,YAAY,CAACE,MAFZ,EAGXK,cAAc,IAAIP,YAAY,CAACO,cAHpB;iBAKFyD;kBACC+d;GAPd,EASEvgB,aAAA,KAAA;IAAIoJ,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAAC2B,KAAR;GAAjB,EAAkCD,YAAlC,CATF,EAUEvgB,aAAA,MAAA;IAAKoJ,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAAC7I,eAAR;GAAlB,EAA6ClW,QAA7C,CAVF,CADF;AAcD;AAED,IAAM+e,QAAM,gBAAGvgB,UAAU,CAACG,MAAX,CAAkB;EAC/B+D,QAAQ,EAAE;IACR,KAAKxE,UAAU,CAACwE,QADR;IAER,4BAA4B;MAC1B7D,OAAO,EAAE;;GAJkB;EAO/BqX,eAAe,EAAE;IACf,KAAKhY,UAAU,CAACgY,eADD;IAEfrX,OAAO,EAAE,MAFM;IAGf8hB,OAAO,EAAE,GAHM;IAIfC,mBAAmB,EAAE,8CAJN;IAKfC,cAAc,EAAE,eALD;IAMfC,MAAM,EAAE,6BANO;IAOfC,QAAQ,EAAE;GAdmB;EAgB/BL,KAAK,EAAE;IACL,KAAKxiB,UAAU,CAACwiB,KADX;IAELM,UAAU,EAAE,QAFP;;IAILC,cAAc,EAAE,WAJX;IAKLC,eAAe,EAAE,oCALZ;IAMLC,KAAK,EAAE,sCANF;IAOLtiB,OAAO,EAAE,MAPJ;IAQLqhB,QAAQ,EAAE,MARL;IASLkB,UAAU,EAAE,MATP;IAUL1X,MAAM,EAAE,kCAVH;IAWLoX,MAAM,EAAE,GAXH;IAYLO,OAAO,EAAE,mCAZJ;IAaLN,QAAQ,EAAE,QAbL;IAcLO,aAAa,EAAE,YAdV;IAeLzO,GAAG,EAAE,GAfA;IAgBLvI,KAAK,EAAE,MAhBF;IAiBLiX,MAAM,EAAE;;AAjCqB,CAAlB,CAAf;;SCxBgBC;MAAYhB,sBAAAA;;EAC1B,0BAA2B1P,kBAAkB,EAA7C;MAAOC,gBAAP;;EACA,IAAM0Q,yBAAyB,GAAGnV,4BAA4B,EAA9D;EACA,IAAM7C,WAAW,GAAGsD,oBAAoB,EAAxC;EACA,IAAM2U,SAAS,GAAGxhB,OAAA,CAChB;IAAA;;IAAA,wBAAMqY,YAAY,CAACkJ,yBAAD,CAAlB,4BAAiD,EAAjD;GADgB;EAGhB,CAAC1Q,gBAAD,EAAmB0Q,yBAAnB,CAHgB,CAAlB;EAKA,IAAMzd,UAAU,GAAG+H,mBAAmB,EAAtC;EAEA,OACE7L,aAAA,CAACqgB,aAAD;IACEC,cAAc,EAAEA;IAChBvhB,cAAc;IACdL,MAAM,EAAE8iB,SAAS,CAACpe,MAAV,KAAqB;GAH/B,EAKGoe,SAAS,CAACrjB,GAAV,CAAc,UAACsjB,aAAD;IACb,IAAMlc,KAAK,GAAG6B,cAAc,CAACqa,aAAa,CAAClI,QAAf,CAA5B;;IAEA,IAAI,CAAChU,KAAL,EAAY;MACV,OAAO,IAAP;;;IAGF,OACEvF,aAAA,CAACogB,cAAD;MACEjB,cAAc,EAAE;MAChB5Y,OAAO,EAAEkb,aAAa,CAAClb;MACvBzC,UAAU,EAAEA;MACZyB,KAAK,EAAEA;MACPT,GAAG,EAAE2c,aAAa,CAAClb;MACnBgD,WAAW,EAAEA;KANf,CADF;GAPD,CALH,CADF;AA0BD;;SC3BemY;EACd,IAAM5Y,UAAU,GAAGiD,mBAAmB,EAAtC;EACA,IAAM4V,yBAAyB,GAAG3hB,MAAA,CAAa,CAAb,CAAlC;EAEA,OACEA,aAAA,KAAA;IAAIoJ,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAAC+C,SAAR;GAAjB,EACG9Y,UAAU,CAAC3K,GAAX,CAAe,UAAAmiB,cAAc;IAC5B,IAAM9d,QAAQ,GAAGI,0BAA0B,CAAC0d,cAAD,CAA3C;;IAEA,IAAI9d,QAAQ,KAAKf,UAAU,CAACG,SAA5B,EAAuC;MACrC,OAAO5B,aAAA,CAACshB,SAAD;QAAWxc,GAAG,EAAEtC;QAAU8d,cAAc,EAAEA;OAA1C,CAAP;;;IAGF,OACEtgB,aAAA,CAAC6hB,cAAD;MACE/c,GAAG,EAAEtC;MACLA,QAAQ,EAAEA;MACV8d,cAAc,EAAEA;MAChBqB,yBAAyB,EAAEA;KAJ7B,CADF;GAPD,CADH,CADF;AAoBD;;AAED,SAASE,cAAT;MACErf,gBAAAA;MACA8d,sBAAAA;MACAqB,iCAAAA;EAMA,IAAMG,aAAa,GAAG1D,gBAAgB,EAAtC;EACA,IAAM3U,cAAc,GAAG4C,uBAAuB,EAA9C;EACA,IAAMvI,UAAU,GAAG+H,mBAAmB,EAAtC;EACA,IAAMkE,iBAAiB,GAAGU,oBAAoB,EAA9C;;EACA,4BAAyBF,sBAAsB,EAA/C;MAAOZ,cAAP;;EACA,IAAMf,iBAAiB,GAAGF,oBAAoB,EAA9C;EACA,IAAMnF,WAAW,GAAGsD,oBAAoB,EAAxC;EACA,IAAMsS,cAAc,GAAG,CAACvT,0BAA0B,EAAlD;;;EAIA,IAAMmW,YAAY,GAChB,CAAChS,iBAAD,IAAsB4R,yBAAyB,CAAC5gB,OAA1B,GAAoC,CAA1D,GACI,EADJ,GAEI6F,gBAAgB,CAACpE,QAAD,CAHtB;;EAKA,IAAIuf,YAAY,CAAC3e,MAAb,GAAsB,CAA1B,EAA6B;IAC3Bue,yBAAyB,CAAC5gB,OAA1B;;;EAGF,IAAIihB,aAAa,GAAG,CAApB;EAEA,IAAMnb,MAAM,GAAGkb,YAAY,CAAC5jB,GAAb,CAAiB,UAAAoH,KAAK;IACnC,IAAMgB,OAAO,GAAGN,YAAY,CAACV,KAAD,EAAQoK,cAAR,CAA5B;;IACA,qBAA8CmS,aAAa,CAACvc,KAAD,CAA3D;QAAQgZ,YAAR,kBAAQA,YAAR;QAAsBC,WAAtB,kBAAsBA,WAAtB;QAAmC9f,MAAnC,kBAAmCA,MAAnC;;IAEA,IAAMujB,YAAY,GAAGrT,iBAAiB,CAACrJ,KAAD,CAAtC;;IAEA,IAAI7G,MAAM,IAAIujB,YAAd,EAA4B;MAC1BD,aAAa;;;IAGf,IAAIC,YAAJ,EAAkB;MAChB,OAAO,IAAP;;;IAGF,OACEjiB,aAAA,CAACogB,cAAD;MACEjB,cAAc,EAAEA;MAChBra,GAAG,EAAEyB;MACLhB,KAAK,EAAEA;MACPgB,OAAO,EAAEA;MACT7H,MAAM,EAAE6f;MACRxf,cAAc,EAAEyf;MAChB1a,UAAU,EAAEA;MACZwb,QAAQ,EAAE7V;MACVF,WAAW,EAAEA;KATf,CADF;GAda,CAAf;EA6BA,OACEvJ,aAAA,CAACqgB,aAAD;IACEC,cAAc,EAAEA;;;IAGhB5hB,MAAM,EAAEsjB,aAAa,KAAKnb,MAAM,CAACzD;GAJnC,EAMGyD,MANH,CADF;AAUD;;AAED,IAAMgY,QAAM,gBAAGvgB,UAAU,CAACG,MAAX,CAAkB;EAC/BmjB,SAAS,EAAE;IACT,KAAK5jB,UAAU,CAAC4jB,SADP;IAETM,SAAS,EAAE,MAFF;IAGTtB,MAAM,EAAE,GAHC;IAITO,OAAO,EAAE;;AALoB,CAAlB,CAAf;;SCvGgBgB,uBAAuBrQ;EACrC,IAAMvM,KAAK,GAAGoS,iBAAiB,CAAC7F,MAAD,CAA/B;EACA9S,YAAY,CAACuG,KAAD,CAAZ;EACAsW,qBAAqB,CAACtW,KAAD,CAArB;AACD;AAED,SAAgB6c,+BAA+BtQ;EAC7C,IAAMuQ,UAAU,GAAG1K,iBAAiB,CAAC7F,MAAD,CAApC;EAEA9S,YAAY,CAACqjB,UAAD,CAAZ;EACAA,UAAU,QAAV,YAAAA,UAAU,CAAEC,KAAZ;AACD;AAED,SAAgBC,sBAAsBzQ;EACpC9S,YAAY,CAACuY,gBAAgB,CAACzF,MAAD,CAAjB,CAAZ;AACD;AAED,SAAgB0Q,sBAAsBvjB;EACpC,IAAI,CAACA,OAAL,EAAc;IACZ;;;EAGF,IAAMO,IAAI,GAAGkY,gBAAgB,CAACzY,OAAD,CAA7B;;EAEA,IAAI,CAACO,IAAL,EAAW;IACT,OAAO2iB,sBAAsB,CAACvK,YAAY,CAAC3Y,OAAD,CAAb,CAA7B;;;EAGFD,YAAY,CAACQ,IAAD,CAAZ;EACAqc,qBAAqB,CAACrc,IAAD,CAArB;AACD;AAED,SAAgBijB,sBAAsBxjB;EACpC,IAAI,CAACA,OAAL,EAAc;IACZ;;;EAGF,IAAMI,IAAI,GAAGoY,gBAAgB,CAACxY,OAAD,CAA7B;;EAEA,IAAI,CAACI,IAAL,EAAW;IACT,OAAOkjB,qBAAqB,CAAC1K,YAAY,CAAC5Y,OAAD,CAAb,CAA5B;;;EAGFD,YAAY,CAACK,IAAD,CAAZ;EACAwc,qBAAqB,CAACxc,IAAD,CAArB;AACD;AAED,SAAgBqjB,0BACdzjB,SACA0jB;EAEA,IAAI,CAAC1jB,OAAL,EAAc;IACZ;;;EAGF,IAAMI,IAAI,GAAGujB,oBAAoB,CAAC3jB,OAAD,CAAjC;;EAEA,IAAI,CAACI,IAAL,EAAW;IACT,OAAOsjB,MAAM,EAAb;;;EAGF3jB,YAAY,CAACK,IAAD,CAAZ;EACAwc,qBAAqB,CAACxc,IAAD,CAArB;AACD;AAED,SAAgBwjB,4BAA4B5jB;EAC1C,IAAI,CAACA,OAAL,EAAc;IACZ;;;EAGF,IAAMO,IAAI,GAAGsjB,sBAAsB,CAAC7jB,OAAD,CAAnC;EAEA,OAAOD,YAAY,CAACQ,IAAD,CAAnB;AACD;;AAED,SAASojB,oBAAT,CAA8B3jB,OAA9B;EACE,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAGF,IAAM+W,eAAe,GAAG8B,sBAAsB,CAAC7Y,OAAD,CAA9C;EACA,IAAMuD,QAAQ,GAAGkT,eAAe,CAACM,eAAD,CAAhC;EACA,IAAMnC,UAAU,GAAGzB,iBAAiB,CAAC4D,eAAD,EAAkB/W,OAAlB,CAApC;EACA,IAAMiU,GAAG,GAAGV,SAAS,CAACwD,eAAD,EAAkB/W,OAAlB,CAArB;EACA,IAAM8jB,UAAU,GAAGlR,iBAAiB,CAACmE,eAAD,EAAkB/W,OAAlB,CAApC;;EAEA,IAAIiU,GAAG,KAAK,CAAZ,EAAe;IACb,IAAM8P,mBAAmB,GAAGnL,YAAY,CAACrV,QAAD,CAAxC;;IAEA,IAAI,CAACwgB,mBAAL,EAA0B;MACxB,OAAO,IAAP;;;IAGF,OAAOpP,eAAe,CACpBuD,gBAAgB,CAAC6L,mBAAD,CADI,EAEpB,CAAC,CAFmB;IAGpBD,UAHoB,EAIpBlP,UAJoB,CAAtB;;;EAQF,OAAOK,mBAAmB,CACxBiD,gBAAgB,CAACnB,eAAD,CADQ,EAExB9C,GAFwB,EAGxB6P,UAHwB,EAIxBlP,UAJwB,CAA1B;AAMD;;AAED,SAASiP,sBAAT,CAAgC7jB,OAAhC;EACE,IAAI,CAACA,OAAL,EAAc;IACZ,OAAO,IAAP;;;EAGF,IAAM+W,eAAe,GAAG8B,sBAAsB,CAAC7Y,OAAD,CAA9C;EACA,IAAMuD,QAAQ,GAAGkT,eAAe,CAACM,eAAD,CAAhC;EACA,IAAMnC,UAAU,GAAGzB,iBAAiB,CAAC4D,eAAD,EAAkB/W,OAAlB,CAApC;EACA,IAAMiU,GAAG,GAAGV,SAAS,CAACwD,eAAD,EAAkB/W,OAAlB,CAArB;EACA,IAAM8jB,UAAU,GAAGlR,iBAAiB,CAACmE,eAAD,EAAkB/W,OAAlB,CAApC;;EACA,IAAI,CAAC6T,UAAU,CAACkD,eAAD,EAAkB/W,OAAlB,CAAf,EAA2C;IACzC,IAAMgkB,mBAAmB,GAAGrL,YAAY,CAACpV,QAAD,CAAxC;;IAEA,IAAI,CAACygB,mBAAL,EAA0B;MACxB,OAAO,IAAP;;;IAGF,OAAOrP,eAAe,CACpBuD,gBAAgB,CAAC8L,mBAAD,CADI,EAEpB,CAFoB,EAGpBF,UAHoB,EAIpBlP,UAJoB,CAAtB;;;EAQF,IAAMqP,aAAa,GAAGnP,mBAAmB,CACvCoD,gBAAgB,CAACnB,eAAD,CADuB,EAEvC9C,GAFuC,EAGvC6P,UAHuC,EAIvClP,UAJuC,CAAzC;EAOA,OAAOqP,aAAP;AACD;;;;;ACtID,IAAKC,SAAL;;AAAA,WAAKA;EACHA,8BAAA,OAAA;EACAA,gCAAA,SAAA;AACD,CAHD,EAAKA,SAAS,KAATA,SAAS,KAAA,CAAd;;AAKA,SAAgBC;EACd,IAAMnjB,gBAAgB,GAAGW,mBAAmB,EAA5C;EACA,IAAMN,kBAAkB,GAAGc,qBAAqB,EAAhD;;EACA,4BAAgBsP,4BAA4B,EAA5C;MAAOnL,KAAP;;EACA,IAAMzB,UAAU,GAAG+H,mBAAmB,EAAtC;;EAEA,4BAAqCwX,qBAAqB,CACxD/iB,kBADwD,CAA1D;MAAQgjB,MAAR,yBAAQA,MAAR;MAAgBC,gBAAhB,yBAAgBA,gBAAhB;;EAGA,IAAMhJ,mBAAmB,GAAG1Z,sBAAsB,EAAlD;EACA,IAAM2iB,eAAe,GAAGC,eAAe,CAACnjB,kBAAD,CAAvC;EACA,IAAMiJ,WAAW,GAAGsD,oBAAoB,EAAxC;EAEA,IAAM4I,MAAM,GAAGZ,gBAAgB,CAAC5U,gBAAgB,CAACc,OAAlB,CAA/B;EAEA,IAAM6T,OAAO,GACXrP,KAAK,IACLkQ,MADA,IAEA/O,kBAAkB,CAACnB,KAAD,CAFlB,IAGAkQ,MAAM,CAACuB,SAAP,CAAiBC,QAAjB,CAA0BjZ,UAAU,CAAC0I,kBAArC,CAJF;EAMA8E,SAAS,CAAC;IACR,IAAI,CAACoJ,OAAL,EAAc;MACZ;;;IAGFuN,sBAAsB,CAAC7hB,kBAAkB,CAACS,OAApB,CAAtB;GALO,EAMN,CAACT,kBAAD,EAAqBsU,OAArB,EAA8B3U,gBAA9B,CANM,CAAT;EAQA,IAAI0S,GAAJ,EAAS+Q,YAAT;;EAEA,IAAI,CAAC9O,OAAD,IAAY3U,gBAAgB,CAACc,OAAjC,EAA0C;IACxCwZ,mBAAmB,CAAC,IAAD,CAAnB;GADF,MAEO;IACL5H,GAAG,GAAG2Q,MAAM,EAAZ;IACAI,YAAY,GAAGF,eAAe,EAA9B;;;EAGF,OACExjB,aAAA,MAAA;IACE2jB,GAAG,EAAErjB;IACL8I,SAAS,EAAEwV,EAAE,CAAC5gB,UAAU,CAAC8b,eAAZ,EAA6B;MACxClF,OAAO,EAAPA,OADwC;MAExC,eAAe2O,gBAAgB,OAAOJ,SAAS,CAACS;KAFrC;IAIb7Z,KAAK,EAAE;MAAE4I,GAAG,EAAHA;;GANX,EAQGiC,OAAO,IAAIrP,KAAX,GACG,CAACU,YAAY,CAACV,KAAD,CAAb,EACG6T,MADH,CACUrS,eAAe,CAACxB,KAAD,CADzB,EAEGgO,KAFH,CAES,CAFT,EAEY,CAFZ,EAGGpV,GAHH,CAGO,UAAAoI,OAAO;IAAA,OACVvG,aAAA,CAACogB,cAAD;MACEtb,GAAG,EAAEyB;MACLhB,KAAK,EAAEA;MACPgB,OAAO,EAAEA;MACTzC,UAAU,EAAEA;MACZqb,cAAc,EAAE;MAChB5V,WAAW,EAAEA;KANf,CADU;GAHd,CADH,GAcG,IAtBN,EAuBEvJ,aAAA,MAAA;IAAKoJ,SAAS,EAAC;IAAoBW,KAAK,EAAE2Z;GAA1C,CAvBF,CADF;AA2BD;;AAED,SAASD,eAAT,CAAyBnjB,kBAAzB;EACE,IAAML,gBAAgB,GAAGW,mBAAmB,EAA5C;EACA,OAAO,SAAS4iB,eAAT;IACL,IAAMzZ,KAAK,GAAwB,EAAnC;;IACA,IAAI,CAACzJ,kBAAkB,CAACS,OAAxB,EAAiC;MAC/B,OAAOgJ,KAAP;;;IAGF,IAAI9J,gBAAgB,CAACc,OAArB,EAA8B;MAC5B,IAAM0U,MAAM,GAAGZ,gBAAgB,CAAC5U,gBAAgB,CAACc,OAAlB,CAA/B;MAEA,IAAM4V,UAAU,GAAGH,kBAAkB,CAACf,MAAD,CAArC;;MAEA,IAAI,CAACA,MAAL,EAAa;QACX,OAAO1L,KAAP;OAN0B;;;MAU5BA,KAAK,CAACuI,IAAN,GAAaqE,UAAU,GAAG,CAAAlB,MAAM,QAAN,YAAAA,MAAM,CAAEoO,WAAR,IAAsB,CAAhD;;;IAGF,OAAO9Z,KAAP;GAnBF;AAqBD;;AAED,SAASsZ,qBAAT,CACE/iB,kBADF;EAGE,IAAML,gBAAgB,GAAGW,mBAAmB,EAA5C;EACA,IAAMV,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAI8iB,SAAS,GAAGX,SAAS,CAACY,EAA1B;EAEA,OAAO;IACLR,gBAAgB,EAAhBA,gBADK;IAELD,MAAM,EAANA;GAFF;;EAKA,SAASC,gBAAT;IACE,OAAOO,SAAP;;;EAGF,SAASR,MAAT;IACEQ,SAAS,GAAGX,SAAS,CAACY,EAAtB;IACA,IAAIC,cAAc,GAAG,CAArB;;IAEA,IAAI,CAAC1jB,kBAAkB,CAACS,OAAxB,EAAiC;MAC/B,OAAO,CAAP;;;IAGF,IAAMyI,MAAM,GAAGiJ,aAAa,CAACnS,kBAAkB,CAACS,OAApB,CAA5B;;IAEA,IAAId,gBAAgB,CAACc,OAArB,EAA8B;MAAA;;MAC5B,IAAMyQ,OAAO,GAAGtR,OAAO,CAACa,OAAxB;MACA,IAAM0U,MAAM,GAAGZ,gBAAgB,CAAC5U,gBAAgB,CAACc,OAAlB,CAA/B;MAEA,IAAMkjB,YAAY,GAAGxR,aAAa,CAACgD,MAAD,CAAlC;MAEAuO,cAAc,GAAGxO,kBAAkB,CAACC,MAAD,CAAnC;MAEA,IAAMc,SAAS,yBAAG/E,OAAH,oBAAGA,OAAO,CAAE+E,SAAZ,iCAAyB,CAAxC;;MAEA,IAAIA,SAAS,GAAGyN,cAAc,GAAGxa,MAAjC,EAAyC;QACvCsa,SAAS,GAAGX,SAAS,CAACS,IAAtB;QACAI,cAAc,IAAIC,YAAY,GAAGza,MAAjC;;;;IAIJ,OAAOwa,cAAc,GAAGxa,MAAxB;;AAEH;;SChKe0a;EACd,IAAMhkB,OAAO,GAAGc,UAAU,EAA1B;EACAsa,WAAW,CAACpb,OAAD,CAAX;EACAua,oBAAoB,CAACva,OAAD,CAApB;EACAqR,cAAc;EAEd,OACEvR,aAAA,MAAA;IAAKoJ,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAACsF,IAAR;IAAeR,GAAG,EAAEzjB;GAAtC,EACEF,aAAA,CAACojB,oBAAD,MAAA,CADF,EAEEpjB,aAAA,CAAC0hB,SAAD,MAAA,CAFF,CADF;AAMD;AAED,IAAM7C,QAAM,gBAAGvgB,UAAU,CAACG,MAAX,CAAkB;EAC/B0lB,IAAI,EAAE;IACJ,KAAKnmB,UAAU,CAACqY,UADZ;IAEJ+N,IAAI,EAAE,GAFF;IAGJC,SAAS,EAAE,QAHP;IAIJC,SAAS,EAAE,QAJP;IAKJzD,QAAQ,EAAE;;AANmB,CAAlB,CAAf;;SCVgB0D,sBACdC,OACAC;EAEA,IAAMvkB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMsQ,iBAAiB,GAAGD,oBAAoB,EAA9C;EACA,IAAMD,cAAc,GAAGD,iBAAiB,EAAxC;EAEA3F,SAAS,CAAC;IACR,IAAI,CAACgZ,KAAL,EAAY;MACV;;;IAEF,IAAMhT,OAAO,GAAGtR,OAAO,CAACa,OAAxB;IAEAyQ,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,SAA1B,EAAqCiT,QAArC,EAA+C;MAC7C/S,OAAO,EAAE;KADX;IAIAH,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,WAA1B,EAAuCkT,WAAvC,EAAoD,IAApD;IAEAnT,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,OAA1B,EAAmCmT,OAAnC,EAA4C,IAA5C;IAEApT,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,UAA1B,EAAsCoT,OAAtC,EAA+C;MAC7ClT,OAAO,EAAE;KADX;IAGAH,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,MAA1B,EAAkCoT,OAAlC,EAA2C,IAA3C;;IAEA,SAASD,OAAT,CAAiBE,CAAjB;MACE,IAAMrP,MAAM,GAAGZ,gBAAgB,CAACiQ,CAAC,CAAChkB,MAAH,CAA/B;;MAEA,IAAI,CAAC2U,MAAL,EAAa;QACX,OAAOoP,OAAO,EAAd;;;MAGF,IAAMte,OAAO,GAAG4O,uBAAuB,CAACM,MAAD,CAAvC;MACA,IAAMR,eAAe,GAAGC,+BAA+B,CAACO,MAAD,CAAvD;;MAEA,IAAI,CAAClP,OAAD,IAAY,CAAC0O,eAAjB,EAAkC;QAChC,OAAO4P,OAAO,EAAd;;;MAGFJ,eAAe,CAAC;QACdle,OAAO,EAAPA,OADc;QAEd0O,eAAe,EAAfA;OAFa,CAAf;;;IAKF,SAAS4P,OAAT,CAAiBC,CAAjB;MACE,IAAIA,CAAJ,EAAO;QACL,IAAMC,aAAa,GAAGD,CAAC,CAACC,aAAxB;;QAEA,IAAI,CAAClQ,gBAAgB,CAACkQ,aAAD,CAArB,EAAsC;UACpC,OAAON,eAAe,CAAC,IAAD,CAAtB;;;;MAIJA,eAAe,CAAC,IAAD,CAAf;;;IAEF,SAASC,QAAT,CAAkBI,CAAlB;MACE,IAAIA,CAAC,CAAChgB,GAAF,KAAU,QAAd,EAAwB;QACtB2f,eAAe,CAAC,IAAD,CAAf;;;;IAIJ,SAASE,WAAT,CAAqBG,CAArB;MACE,IAAIxT,iBAAiB,EAArB,EAAyB;QACvB;;;MAGF,IAAMmE,MAAM,GAAGZ,gBAAgB,CAACiQ,CAAC,CAAChkB,MAAH,CAA/B;;MAEA,IAAI2U,MAAJ,EAAY;QACVzW,YAAY,CAACyW,MAAD,CAAZ;;;;IAIJ,OAAO;MACLjE,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,WAA7B,EAA0C+S,WAA1C;MACAnT,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,UAA7B,EAAyCiT,OAAzC;MACArT,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,OAA7B,EAAsCgT,OAAtC,EAA+C,IAA/C;MACApT,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,MAA7B,EAAqCiT,OAArC,EAA8C,IAA9C;MACArT,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,SAA7B,EAAwC8S,QAAxC;KALF;GAnEO,EA0EN,CAACxkB,OAAD,EAAUskB,KAAV,EAAiBC,eAAjB,EAAkCnT,iBAAlC,EAAqDF,cAArD,CA1EM,CAAT;AA2ED;;SCzFe4T;EACd,IAAMC,4BAA4B,GAAGtY,+BAA+B,EAApE;EAEA,OAAOsY,4BAA4B,KAAKvjB,sBAAsB,CAACmI,MAA/D;AACD;AAED,SAAgBqb;EACd,IAAMD,4BAA4B,GAAGtY,+BAA+B,EAApE;EAEA,OAAOsY,4BAA4B,KAAKvjB,sBAAsB,CAACwH,OAA/D;AACD;;;AChBD,IAAYic,aAAZ;;AAAA,WAAYA;EACVA,oBAAA,YAAA;EACAA,uBAAA,eAAA;AACD,CAHD,EAAYA,aAAa,KAAbA,aAAa,KAAA,CAAzB;;AAYA,SAAwBC;MACtBtlB,gBAAAA;MACAsJ,iBAAAA;wBACAW;MAAAA,gCAAQ;4BACR+Z;MAAAA,wCAAYqB,aAAa,CAACE;EAE1B,OACErlB,aAAA,MAAA;IACE+J,KAAK,eAAOA,KAAP;IACLX,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAACuF,IAAR,EAAchb,SAAd,EAAyByV,QAAM,CAACiF,SAAD,CAA/B;GAFf,EAIGhkB,QAJH,CADF;AAQD;AAED,IAAM+e,QAAM,gBAAGvgB,UAAU,CAACG,MAAX;EACb2lB,IAAI,EAAE;IACJzlB,OAAO,EAAE;;AAFE,sBAIZwmB,aAAa,CAACE,GAJF,IAIQ;EACnBC,aAAa,EAAE;AADI,CAJR,qBAOZH,aAAa,CAACI,MAPF,IAOW;EACtBD,aAAa,EAAE;AADO,CAPX,sBAAf;;SCxBwBE;MAAQpc,iBAAAA;wBAAWW;MAAAA,gCAAQ;EACjD,OAAO/J,aAAA,MAAA;IAAK+J,KAAK;MAAIqa,IAAI,EAAE;OAAMra,KAAhB;IAAyBX,SAAS,EAAEwV,EAAE,CAACxV,SAAD;GAAhD,CAAP;AACD;;SCHuBqc;MAAW3lB,gBAAAA;MAAUsJ,iBAAAA;MAAWW,aAAAA;EACtD,OACE/J,aAAA,MAAA;IAAK+J,KAAK,eAAOA,KAAP;MAAc8W,QAAQ,EAAE;;IAAczX,SAAS,EAAEA;GAA3D,EACGtJ,QADH,CADF;AAKD;;SCNuB4lB;MAAW5lB,gBAAAA;MAAUsJ,iBAAAA;MAAWW,aAAAA;EACtD,OACE/J,aAAA,MAAA;IAAK+J,KAAK,eAAOA,KAAP;MAAc8W,QAAQ,EAAE;;IAAczX,SAAS,EAAEA;GAA3D,EACGtJ,QADH,CADF;AAKD;;;;;ACQD,IAAM6lB,SAAS,GAAG,EAAlB;AAMA,SAAgBC;EACd,OACE5lB,aAAA,CAAC0lB,QAAD;IAAU3b,KAAK,EAAE;MAAEP,MAAM,EAAEmc;;GAA3B,EACE3lB,aAAA,CAACylB,QAAD;IAAU1b,KAAK,EAAE;MAAEuK,MAAM,EAAE,CAAV;MAAauR,KAAK,EAAE;;GAArC,EACE7lB,aAAA,CAAC8lB,cAAD;IAAgBhC,SAAS,EAAEiC,uBAAuB,CAACC;GAAnD,CADF,CADF,CADF;AAOD;AAED,SAAgBF;;;4BACdhC;MAAAA,wCAAYiC,uBAAuB,CAACE;EAEpC,IAAM7lB,iBAAiB,GAAGc,oBAAoB,EAA9C;EACA,IAAMglB,UAAU,GAAGta,0BAA0B,EAA7C;;EACA,4BAA4B+E,uBAAuB,EAAnD;MAAOwV,MAAP;MAAeC,SAAf;;EACA,4BAA4C7V,sBAAsB,EAAlE;MAAOZ,cAAP;MAAuB0W,iBAAvB;;EACA,IAAMnM,mBAAmB,GAAGL,sBAAsB,EAAlD;EACA,IAAM0C,gBAAgB,GAAGT,mBAAmB,EAA5C;;EAEA,IAAIoK,UAAJ,EAAgB;IACd,OAAO,IAAP;;;EAGF,IAAMI,SAAS,GAAMX,SAAS,GAAGxhB,kBAAkB,CAACf,MAArC,OAAf;EAEA,IAAMmjB,YAAY,GAAGJ,MAAM,GAAGG,SAAH,GAAeX,SAAS,GAAG,IAAtD;EAEA,IAAMa,QAAQ,GAAG1C,SAAS,KAAKiC,uBAAuB,CAACC,QAAvD;EAEA,OACEhmB,aAAA,CAAC0lB,QAAD;IACEtc,SAAS,EAAEwV,EAAE,CAAC,gBAAD,EAAmBkF,SAAnB,iBACV9lB,UAAU,CAACyoB,IADD,IACQN,MADR;IAGbpc,KAAK,EACHyc,QAAQ,GACJ;MAAEE,SAAS,EAAEH,YAAb;MAA2B/c,MAAM,EAAE+c;KAD/B,GAEJ;MAAEG,SAAS,EAAEH;;GAPrB,EAUEvmB,aAAA,MAAA;IAAKoJ,SAAS,EAAC;IAAuBua,GAAG,EAAEvjB;GAA3C,EACG+D,kBAAkB,CAAChG,GAAnB,CAAuB,UAACwoB,iBAAD,EAAoBrN,CAApB;;;IACtB,IAAMsN,MAAM,GAAGD,iBAAiB,KAAKhX,cAArC;IACA,OACE3P,aAAA,CAACye,MAAD;MACE1U,KAAK,EAAE;QACL8c,SAAS,EAAEjI,EAAE,CACX4H,QAAQ,oBACWlN,CAAC,IAAI6M,MAAM,GAAGR,SAAH,GAAe,CAAzB,CADZ,4BAEWrM,CAAC,IAAI6M,MAAM,GAAGR,SAAH,GAAe,CAAzB,CAFZ,QADG,EAIXQ,MAAM,IAAIS,MAAV,IAAoB,YAJT;;MAOfhM,OAAO,EAAE;QACP,IAAIuL,MAAJ,EAAY;UACVE,iBAAiB,CAACM,iBAAD,CAAjB;UACApK,gBAAgB;SAFlB,MAGO;UACL6J,SAAS,CAAC,IAAD,CAAT;;;QAEFlM,mBAAmB;;MAErBpV,GAAG,EAAE6hB;MACLvd,SAAS,EAAEwV,EAAE,eAAa+H,iBAAb,EAAkC,UAAlC,mBACV3oB,UAAU,CAAC4oB,MADD,IACUA,MADV;MAGbE,QAAQ,EAAEX,MAAM,GAAG,CAAH,GAAO,CAAC;sBACVS;mCAEZliB,cAAc,CAACiiB,iBAAD;KAzBlB,CADF;GAFD,CADH,CAVF,CADF;AAgDD;AAED,AAAA,IAAYZ,uBAAZ;;AAAA,WAAYA;EACVA,mCAAA,iBAAA;EACAA,qCAAA,mBAAA;AACD,CAHD,EAAYA,uBAAuB,KAAvBA,uBAAuB,KAAA,CAAnC;;SCrFgBgB;EACd,IAAMne,aAAa,GAAGsD,gBAAgB,EAAtC;EACA,IAAM8a,mBAAmB,GAAG9B,sBAAsB,EAAlD;;EAEA,IAAI,CAACtc,aAAa,CAAC2B,WAAnB,EAAgC;IAC9B,OAAO,IAAP;;;EAGF,OACEvK,aAAA,CAAColB,IAAD;IAAMhc,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAACoI,OAAR;GAAnB,EACEjnB,aAAA,CAACknB,WAAD,MAAA,CADF,EAEElnB,aAAA,CAACwlB,KAAD,MAAA,CAFF,EAGGwB,mBAAmB,GAAGhnB,aAAA,CAAC4lB,kBAAD,MAAA,CAAH,GAA4B,IAHlD,CADF;AAOD;AAED,SAAgBsB;;;EACd,IAAMte,aAAa,GAAGsD,gBAAgB,EAAtC;;EACA,gBAAwCqB,QAAQ,CAAe,IAAf,CAAhD;MAAO4Z,YAAP;MAAqB1C,eAArB;;EACA,IAAM3gB,UAAU,GAAG+H,mBAAmB,EAAtC;;EACA,4BAA+B6E,4BAA4B,EAA3D;MAAO0W,oBAAP;;EACA,IAAM7d,WAAW,GAAGsD,oBAAoB,EAAxC;EAEA0X,qBAAqB,CAAC3b,aAAa,CAAC2B,WAAf,EAA4Bka,eAA5B,CAArB;EAEA,IAAMlf,KAAK,GAAG6B,cAAc,0BAC1B+f,YAD0B,oBAC1BA,YAAY,CAAE5gB,OADY,oCACD4gB,YADC,oBACDA,YAAY,CAAElS,eADb,CAA5B;EAIA,IAAMoS,IAAI,GAAG9hB,KAAK,IAAI,IAAT,IAAiB4hB,YAAY,IAAI,IAA9C;EAEA,OAAOnnB,aAAA,CAACsnB,cAAD,MAAA,CAAP;;EAEA,SAASA,cAAT;IACE,IAAMjd,YAAY,GAChB+c,oBADgB,WAChBA,oBADgB,GACQhgB,cAAc,CAACwB,aAAa,CAACyB,YAAf,CADxC;;IAEA,IAAI,CAACA,YAAL,EAAmB;MACjB,OAAO,IAAP;;;IAEF,IAAMkd,WAAW,GAAGH,oBAAoB,GACpC/gB,SAAS,CAAC+gB,oBAAD,CAD2B,GAEpCxe,aAAa,CAAC0B,cAFlB;IAIA,OACEtK,aAAA,SAAA,MAAA,EACEA,aAAA,MAAA,MAAA,EACGqnB,IAAI,GACHrnB,aAAA,CAAC6f,aAAD;MACEtZ,OAAO,EAAE4gB,YAAF,oBAAEA,YAAY,CAAE5gB;MACvBhB,KAAK,EAAEA;MACPzB,UAAU,EAAEA;MACZgc,IAAI,EAAE;MACNvW,WAAW,EAAEA;KALf,CADG,GAQDc,YAAY,GACdrK,aAAA,CAAC6f,aAAD;MACEtZ,OAAO,EAAEN,YAAY,CAACoE,YAAD;MACrB9E,KAAK,EAAE8E;MACPvG,UAAU,EAAEA;MACZgc,IAAI,EAAE;MACNvW,WAAW,EAAEA;KALf,CADc,GAQZ,IAjBN,CADF,EAoBG8d,IAAI,GACHrnB,aAAA,MAAA;MAAKoJ,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAAC2B,KAAR;KAAlB,EAAmCna,SAAS,CAACd,KAAD,CAA5C,CADG,GAGHvF,aAAA,MAAA;MAAKoJ,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAAC2B,KAAR;KAAlB,EAAmC+G,WAAnC,CAvBJ,CADF;;AA6BH;AAOD,IAAM1I,QAAM,gBAAGvgB,UAAU,CAACG,MAAX,CAAkB;EAC/BwoB,OAAO,EAAE;IACPnG,UAAU,EAAE,QADL;IAEP0G,SAAS,EAAE,2CAFJ;IAGPhe,MAAM,EAAE,2BAHD;IAIP2X,OAAO,EAAE,iCAJF;IAKPN,QAAQ,EAAE,UALH;IAMPQ,MAAM,EAAE;GAPqB;EAS/Bb,KAAK,EAAE;IACLS,KAAK,EAAE,+BADF;IAELjB,QAAQ,EAAE,8BAFL;IAGLmB,OAAO,EAAE,iCAHJ;IAILC,aAAa,EAAE;;AAbc,CAAlB,CAAf;;;;;SCvGgBqG,oBAAoBC;;;EAClC,gCAAOA,SAAP,oBAAOA,SAAS,CAAEC,YAAX,CAAwB,WAAxB,CAAP,oCAA+C,IAA/C;AACD;;SCIeC,iCACdC;EAEA,IAAM3nB,OAAO,GAAGc,UAAU,EAA1B;EAEAwK,SAAS,CAAC;IACR,IAAMsc,iBAAiB,GAAG,IAAIC,GAAJ,EAA1B;IACA,IAAMvW,OAAO,GAAGtR,OAAO,CAACa,OAAxB;IACA,IAAMinB,QAAQ,GAAG,IAAIC,oBAAJ,CACf,UAAAtjB,OAAO;MACL,IAAI,CAAC6M,OAAL,EAAc;QACZ;;;MAGF,qDAAoB7M,OAApB,wCAA6B;QAAA,IAAlBujB,KAAkB;;QAC3B,IAAMpgB,GAAE,GAAG2f,mBAAmB,CAACS,KAAK,CAACpnB,MAAP,CAA9B;;QACAgnB,iBAAiB,CAACK,GAAlB,CAAsBrgB,GAAtB,EAA0BogB,KAAK,CAACE,iBAAhC;;;MAGF,IAAMC,MAAM,GAAGjR,KAAK,CAACC,IAAN,CAAWyQ,iBAAX,CAAf;MACA,IAAMQ,YAAY,GAAGD,MAAM,CAACA,MAAM,CAACjlB,MAAP,GAAgB,CAAjB,CAA3B;;MAEA,IAAIklB,YAAY,CAAC,CAAD,CAAZ,IAAmB,CAAvB,EAA0B;QACxB,OAAOT,iBAAiB,CAACS,YAAY,CAAC,CAAD,CAAb,CAAxB;;;MAGF,2BAA0BD,MAA1B,6BAAkC;QAA7B;YAAOvgB,EAAP;YAAWygB,KAAX;;QACH,IAAIA,KAAJ,EAAW;UACTV,iBAAiB,CAAC/f,EAAD,CAAjB;UACA;;;KArBS,EAyBf;MACE0gB,SAAS,EAAE,CAAC,CAAD,EAAI,CAAJ;KA1BE,CAAjB;IA6BAhX,OAAO,QAAP,YAAAA,OAAO,CAAE8F,gBAAT,CAA0BrZ,WAAW,CAACD,UAAU,CAACwE,QAAZ,CAArC,EAA4DuD,OAA5D,CAAoE,UAAA0iB,EAAE;MACpET,QAAQ,CAACU,OAAT,CAAiBD,EAAjB;KADF;GAhCO,EAmCN,CAACvoB,OAAD,EAAU2nB,iBAAV,CAnCM,CAAT;AAoCD;;SC7CuBc;EACtB,0BAAqBrY,kBAAkB,EAAvC;MAAOb,UAAP;;EAEA,OAAO,CAAC,CAACA,UAAT;AACD;;SCCemZ;EACd,IAAM1oB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMjB,aAAa,GAAGY,gBAAgB,EAAtC;EAEA,OAAO,SAASkoB,sBAAT,CAAgCrmB,QAAhC;;;IACL,IAAI,CAACtC,OAAO,CAACa,OAAb,EAAsB;MACpB;;;IAEF,IAAM2mB,SAAS,uBAAGxnB,OAAO,CAACa,OAAX,qBAAG,iBAAiBgV,aAAjB,mBACDvT,QADC,SAAlB;;IAIA,IAAI,CAACklB,SAAL,EAAgB;MACd;;;IAGF,IAAMhR,SAAS,GAAGgR,SAAS,CAAChR,SAAV,IAAuB,CAAzC;IAEA8E,QAAQ,CAACzb,aAAa,CAACgB,OAAf,EAAwB2V,SAAxB,CAAR;GAdF;AAgBD;;SCzBeoS;EACd,IAAMC,oBAAoB,GAAG/c,qBAAqB,EAAlD;;EAEA,IAAI,CAAC+c,oBAAL,EAA2B;IACzB,OAAO,KAAP;;;EAGF,OAAOA,oBAAoB,CAAC3lB,MAArB,KAAgC,CAAvC;AACD;;ACVD,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;AACvkC,SAAS4lB,UAAQ,GAAG,EAAEA,UAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,MAAM,EAAE,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,OAAOA,UAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE;AACnV,AACA,IAAI,cAAc,GAAG,SAAS,cAAc,CAAC,KAAK,EAAE;AACpD,EAAE,oBAAoBC,aAAmB,CAAC,KAAK,EAAED,UAAQ,CAAC;AAC1D,IAAI,KAAK,EAAE,4BAA4B;AACvC,IAAI,QAAQ,EAAE,UAAU;AACxB,IAAI,KAAK,EAAE,GAAG;AACd,IAAI,MAAM,EAAE,EAAE;AACd,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,gBAAgBC,aAAmB,CAAC,GAAG,EAAE;AAC/D,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,gBAAgB,EAAE,EAAE;AACxB,IAAI,WAAW,EAAE,GAAG;AACpB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,6IAA6I;AACpJ,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,mJAAmJ;AAC1J,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,2TAA2T;AAClU,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACnE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,2MAA2M;AAClN,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACpE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,oEAAoE;AAC3E,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC3E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,CAAC;AACT,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC7E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,CAAC;AACT,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC3D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,kFAAkF;AACzF,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,0SAA0S;AACjT,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC5D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,wKAAwK;AAC/K,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,iDAAiD;AACxD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC5D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,iNAAiN;AACxN,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC5D,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,qPAAqP;AAC5P,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,kHAAkH;AACzH,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACrE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,2HAA2H;AAClI,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AACxE,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC1E,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACpE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,sFAAsF;AAC7F,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACpE,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,gBAAgB,EAAE,EAAE;AACxB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,CAAC,EAAE,2YAA2Y;AAClZ,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACpE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,+FAA+F;AACtG,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACpE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,uFAAuF;AAC9F,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACpE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,0OAA0O;AACjP,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACpE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,iGAAiG;AACxG,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,uFAAuF;AAC9F,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC7E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC7E,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC7E,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC7E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC7E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,sJAAsJ;AAC7J,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,wEAAwE;AAC/E,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,QAAQ,EAAE,SAAS;AACvB,IAAI,CAAC,EAAE,0IAA0I;AACjJ,IAAI,QAAQ,EAAE,SAAS;AACvB,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,qCAAqC;AAC5C,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC1E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC1E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC3D,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,gBAAgB,EAAE,EAAE;AACxB,IAAI,WAAW,EAAE,GAAG;AACpB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,scAAsc;AAC7c,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,mJAAmJ;AAC1J,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACvE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,2MAA2M;AAClN,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,oEAAoE;AAC3E,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC7E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,CAAC;AACT,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC7E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,CAAC;AACT,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC3D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,kFAAkF;AACzF,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,4SAA4S;AACnT,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC5D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,wKAAwK;AAC/K,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,iDAAiD;AACxD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC5D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,iNAAiN;AACxN,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC9D,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,qPAAqP;AAC5P,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,8GAA8G;AACrH,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACvE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,2HAA2H;AAClI,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC1E,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC1E,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,sFAAsF;AAC7F,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,gBAAgB,EAAE,EAAE;AACxB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,CAAC,EAAE,2YAA2Y;AAClZ,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,+FAA+F;AACtG,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,uFAAuF;AAC9F,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,0OAA0O;AACjP,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,iGAAiG;AACxG,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,uFAAuF;AAC9F,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,sJAAsJ;AAC7J,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,wEAAwE;AAC/E,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,QAAQ,EAAE,SAAS;AACvB,IAAI,CAAC,EAAE,0IAA0I;AACjJ,IAAI,QAAQ,EAAE,SAAS;AACvB,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,qCAAqC;AAC5C,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC1E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC1E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC7D,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,gBAAgB,EAAE,EAAE;AACxB,IAAI,WAAW,EAAE,GAAG;AACpB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,scAAsc;AAC7c,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,mJAAmJ;AAC1J,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACvE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,8MAA8M;AACrN,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,oEAAoE;AAC3E,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC1E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC7D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,kFAAkF;AACzF,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,8SAA8S;AACrT,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC9D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,wKAAwK;AAC/K,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,iDAAiD;AACxD,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC9D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,iNAAiN;AACxN,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC9D,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,qPAAqP;AAC5P,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,8GAA8G;AACrH,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACvE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,2HAA2H;AAClI,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,sFAAsF;AAC7F,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,gBAAgB,EAAE,EAAE;AACxB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,CAAC,EAAE,2YAA2Y;AAClZ,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,+FAA+F;AACtG,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,uFAAuF;AAC9F,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,8OAA8O;AACrP,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,iGAAiG;AACxG,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,uFAAuF;AAC9F,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,sJAAsJ;AAC7J,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,4EAA4E;AACnF,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,QAAQ,EAAE,SAAS;AACvB,IAAI,CAAC,EAAE,0IAA0I;AACjJ,IAAI,QAAQ,EAAE,SAAS;AACvB,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,qCAAqC;AAC5C,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC7D,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,gBAAgB,EAAE,EAAE;AACxB,IAAI,WAAW,EAAE,GAAG;AACpB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,ybAAyb;AAChc,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,qIAAqI;AAC5I,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACvE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,8MAA8M;AACrN,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,mEAAmE;AAC1E,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC7D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,kFAAkF;AACzF,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,iTAAiT;AACxT,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC9D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,uKAAuK;AAC9K,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,gDAAgD;AACvD,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC9D,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,8MAA8M;AACrN,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,gBAAgBA,aAAmB,CAAC,GAAG,EAAE;AAC9D,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC9C,IAAI,CAAC,EAAE,oPAAoP;AAC3P,GAAG,CAAC,eAAeA,aAAmB,CAAC,MAAM,EAAE;AAC/C,IAAI,CAAC,EAAE,6GAA6G;AACpH,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACvE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,yHAAyH;AAChI,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,sFAAsF;AAC7F,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,gBAAgB,EAAE,EAAE;AACxB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,CAAC,EAAE,qYAAqY;AAC5Y,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,8FAA8F;AACrG,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,sFAAsF;AAC7F,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,2OAA2O;AAClP,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,iGAAiG;AACxG,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,uFAAuF;AAC9F,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,EAAE;AACV,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,gBAAgBA,aAAmB,CAAC,SAAS,EAAE;AAC/E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,EAAE,EAAE,GAAG;AACX,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,CAAC,EAAE,qJAAqJ;AAC5J,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,wEAAwE;AAC/E,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,QAAQ,EAAE,SAAS;AACvB,IAAI,CAAC,EAAE,0IAA0I;AACjJ,IAAI,QAAQ,EAAE,SAAS;AACvB,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,gBAAgBA,aAAmB,CAAC,MAAM,EAAE;AACtE,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,MAAM,EAAE,SAAS;AACrB,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,CAAC,EAAE,qCAAqC;AAC5C,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,gBAAgBA,aAAmB,CAAC,QAAQ,EAAE;AAC5E,IAAI,EAAE,EAAE,IAAI;AACZ,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,CAAC,EAAE,GAAG;AACV,IAAI,IAAI,EAAE,SAAS;AACnB,GAAG,CAAC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;;SC/nBcC;EACd,gBAA4C3b,QAAQ,CAAgB,IAAhB,CAApD;MAAO4b,cAAP;MAAuBtB,iBAAvB;;EACA,IAAMgB,sBAAsB,GAAGD,yBAAyB,EAAxD;EACAhB,gCAAgC,CAACC,iBAAD,CAAhC;EACA,IAAMuB,YAAY,GAAGT,eAAe,EAApC;EAEA,IAAMU,gBAAgB,GAAGtd,mBAAmB,EAA5C;EACA,IAAM1L,qBAAqB,GAAGc,wBAAwB,EAAtD;EACA,IAAMmoB,kBAAkB,GAAGR,yBAAyB,EAApD;EAEA,OACE9oB,aAAA,MAAA;IACEoJ,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAAC0K,GAAR;IACbC,IAAI,EAAC;kBACM;IACX1hB,EAAE,EAAC;IACH6b,GAAG,EAAEtjB;GALP,EAOGgpB,gBAAgB,CAAClrB,GAAjB,CAAqB,UAAAmiB,cAAc;;;IAClC,IAAM9d,QAAQ,GAAGI,0BAA0B,CAAC0d,cAAD,CAA3C;IACA,IAAMmJ,gBAAgB,GAAGjnB,QAAQ,KAAK2mB,cAAtC;;IAEA,IAAIxP,gBAAgB,CAAC2G,cAAD,CAAhB,IAAoCgJ,kBAAxC,EAA4D;MAC1D,OAAO,IAAP;;;IAGF,OACEtpB,aAAA,CAACye,MAAD;MACEqI,QAAQ,EAAEsC,YAAY,IAAIK,gBAAhB,GAAmC,CAAC,CAApC,GAAwC;MAClDrgB,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAAC6K,MAAR,eAA2BlnB,QAA3B,iBACVxE,UAAU,CAAC4oB,MADD,IACU6C,gBADV;MAGb3kB,GAAG,EAAEtC;MACLoY,OAAO,EAAE;QACPiN,iBAAiB,CAACrlB,QAAD,CAAjB;QACAqmB,sBAAsB,CAACrmB,QAAD,CAAtB;;oBAEUK,8BAA8B,CAACyd,cAAD;uBAC3BmJ;MACfD,IAAI,EAAC;uBACS;KAbhB,CADF;GARD,CAPH,CADF;AAoCD;AAED,IAAM3K,QAAM,gBAAGvgB,UAAU,CAACG,MAAX,CAAkB;EAC/B8qB,GAAG,EAAE;IACH,KAAK,kBADF;IAEH5qB,OAAO,EAAE,MAFN;IAGH2mB,aAAa,EAAE,KAHZ;IAIH3E,cAAc,EAAE,cAJb;IAKHQ,OAAO,EAAE;GANoB;EAQ/B,sBAAsB;IACpBoI,GAAG,EAAE;MACH3qB,OAAO,EAAE,KADN;MAEHkgB,MAAM,EAAE,SAFL;MAGHjgB,aAAa,EAAE;;GAZY;EAe/B,gDAAgD;IAC9C0qB,GAAG,EAAE;MACH3qB,OAAO,EAAE,KADN;MAEHkgB,MAAM,EAAE,SAFL;MAGHjgB,aAAa,EAAE;;GAnBY;EAsB/B6qB,MAAM,EAAE;IACN,KAAK,aADC;IAEN/qB,OAAO,EAAE,cAFH;IAGNgrB,UAAU,EAAE,0BAHN;IAIN9I,QAAQ,EAAE,UAJJ;IAKNrX,MAAM,EAAE,4CALF;IAMNY,KAAK,EAAE,4CAND;IAONwf,cAAc,EAAE,uDAPV;IAQN3K,OAAO,EAAE,MARH;IASN4K,eAAe,WAASC,cAAT,MATT;IAUNC,kBAAkB,EAAE,KAVd;IAWN,iBAAiB;MACfC,OAAO,EAAE,EADM;MAEfnJ,QAAQ,EAAE,UAFK;MAGflO,GAAG,EAAE,MAHU;MAIfL,IAAI,EAAE,MAJS;MAKfuT,KAAK,EAAE,MALQ;MAMfvR,MAAM,EAAE,MANO;MAOfyK,MAAM,EAAE,iDAPO;MAQfkL,YAAY,EAAE;;;AAzCa,CAAlB,CAAf;;;;;AChEA,IAAMC,KAAK,gBAAMjsB,WAAW,CAACD,UAAU,CAACmsB,WAAZ,CAAjB,sBAA6ClsB,WAAW,CACjED,UAAU,CAAC4jB,SADsD,CAAnE;AAIA,IAAMwI,YAAY,gBAAG,CAAC,QAAD,EAAWnsB,WAAW,CAACD,UAAU,CAACuH,KAAZ,CAAtB,EAA0ClH,IAA1C,CAA+C,EAA/C,CAArB;AACA,IAAMgsB,QAAQ,gBAAGpsB,WAAW,CAACD,UAAU,CAACwE,QAAZ,CAA5B;AAEA,SAAgB8nB;MAAY7pB,aAAAA;;EAC1B,IAAI,CAACA,KAAL,EAAY;IACV,OAAO,IAAP;;;EAGF,IAAM8pB,CAAC,GAAGC,QAAQ,CAAC/pB,KAAD,CAAlB;EAEA,OACET,aAAA,QAAA,MAAA,aACEkqB,KADF,SACWE,YADX,iDAMEF,KANF,SAMWK,CANX,+CAUEL,KAVF,SAUWG,QAVX,kBAUgCE,CAVhC,2CADF;AAgBD;;AAED,SAASC,QAAT,CAAkB/pB,KAAlB;EACE,OAAO,CACL2pB,YADK,EAEL,oBAFK,EAGLxN,uBAAuB,CAACnc,KAAD,CAHlB,EAIL,IAJK,EAKLpC,IALK,CAKA,EALA,CAAP;AAMD;;SCtBeosB;EACd,IAAMxhB,cAAc,GAAGyD,uBAAuB,EAA9C;EAEA,IAAMge,kBAAkB,GAAG1F,qBAAqB,EAAhD;;EAEA,IAAI/b,cAAJ,EAAoB;IAClB,OAAO,IAAP;;;EAGF,OACEjJ,aAAA,CAAColB,IAAD;IAAMhc,SAAS,EAAEwV,EAAE,CAACC,QAAM,CAAC8L,OAAR;GAAnB,EACE3qB,aAAA,CAAC4qB,MAAD,MAAA,CADF,EAGGF,kBAAkB,GAAG1qB,aAAA,CAAC8lB,cAAD,MAAA,CAAH,GAAwB,IAH7C,CADF;AAOD;AAED,IAAMjH,QAAM,gBAAGvgB,UAAU,CAACG,MAAX,CAAkB;EAC/BksB,OAAO,EAAE;IACPxJ,OAAO,EAAE,2BADF;IAEPE,MAAM,EAAE;;AAHqB,CAAlB,CAAf;AAOA,SAAgBuJ;EACd,gBAAsBrd,QAAQ,CAAC,CAAD,CAA9B;MAAOsd,GAAP;MAAYC,MAAZ;;EACA,IAAM5Q,mBAAmB,GAAGL,sBAAsB,EAAlD;EACA,IAAM1Z,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMub,WAAW,GAAGJ,cAAc,EAAlC;EACA,IAAM2O,WAAW,GAAGtf,0BAA0B,EAA9C;EACA,IAAMuf,SAAS,GAAGlf,wBAAwB,EAA1C;;EACA,iBAAsD+Q,SAAS,EAA/D;MAAQE,mBAAR,cAAQA,mBAAR;MAA6BtN,UAA7B,cAA6BA,UAA7B;MAAyCwN,SAAzC,cAAyCA,QAAzC;;EAEA,IAAMgO,KAAK,GAAG9qB,cAAH,oBAAGA,cAAc,CAAEY,OAA9B;EACA,IAAMN,KAAK,GAAGwqB,KAAH,oBAAGA,KAAK,CAAExqB,KAArB;EAEA,OACET,aAAA,CAAC0lB,QAAD;IAAUtc,SAAS,EAAC;GAApB,EACEpJ,aAAA,CAACsqB,SAAD;IAAW7pB,KAAK,EAAEA;GAAlB,CADF,EAEET,aAAA,QAAA;;IAEEgrB,SAAS,EAAEA;kBACC;IACZE,OAAO,EAAEhR;IACT9Q,SAAS,EAAC;IACVuV,IAAI,EAAC;qBACS;IACdoM,WAAW,EAAEA;IACb9N,QAAQ,EAAE,kBAAApC,KAAK;MACbiQ,MAAM,CAACD,GAAG,GAAG,CAAP,CAAN;MACAzlB,UAAU,CAAC;;;QACT6X,SAAQ,wBAACpC,KAAD,qCAACA,KAAK,CAAE/Z,MAAR,qBAAC,cAAeL,KAAhB,kCAAyBA,KAAzB,CAAR;OADQ,CAAV;;IAIFkjB,GAAG,EAAExjB;GAfP,CAFF,EAmBGsP,UAAU,GACTzP,aAAA,MAAA;IACEwpB,IAAI,EAAC;IACLpgB,SAAS,EAAEwV,EAAE,CACX,2BADW,EAEX,4BAFW;iBAIH;IACV9W,EAAE,EAAC;mBACS;GARd,EAUGiV,mBAVH,CADS,GAaP,IAhCN,EAiCE/c,aAAA,MAAA;IAAKoJ,SAAS,EAAC;GAAf,CAjCF,EAkCEpJ,aAAA,CAACye,MAAD;IACErV,SAAS,EAAEwV,EAAE,CAAC,sBAAD,EAAyB,4BAAzB;IACbhE,OAAO,EAAE4B;kBACE;IACX2O,KAAK,EAAC;GAJR,EAMEnrB,aAAA,MAAA;IAAKoJ,SAAS,EAAC;GAAf,CANF,CAlCF,CADF;AA6CD;;SCjGegiB;EACd,OACEprB,aAAA,CAAC0lB,QAAD;IAAUtc,SAAS,EAAC;GAApB,EACEpJ,aAAA,CAACyqB,eAAD,MAAA,CADF,EAEEzqB,aAAA,CAACkpB,kBAAD,MAAA,CAFF,CADF;AAMD;;SCZemC;EACd,OAAOC,QAAQ,CAACC,aAAhB;AACD;;AC0CD,IAAKC,cAAL;;AAAA,WAAKA;EACHA,2BAAA,cAAA;EACAA,yBAAA,YAAA;EACAA,2BAAA,cAAA;EACAA,4BAAA,eAAA;EACAA,wBAAA,WAAA;EACAA,uBAAA,UAAA;EACAA,uBAAA,MAAA;AACD,CARD,EAAKA,cAAc,KAAdA,cAAc,KAAA,CAAnB;;AAUA,SAAgBC;EACdC,2BAA2B;EAC3BC,4BAA4B;EAC5BC,+BAA+B;EAC/BC,mCAAmC;EACnCC,qBAAqB;AACtB;;AAED,SAASJ,2BAAT;EACE,IAAM3rB,aAAa,GAAGY,gBAAgB,EAAtC;EACA,IAAM6b,WAAW,GAAGJ,cAAc,EAAlC;EACA,IAAMZ,QAAQ,GAAGI,WAAW,EAA5B;EACA,IAAMzb,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMsb,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAMzB,cAAc,GAAGD,iBAAiB,EAAxC;EACA,IAAMlJ,iBAAiB,GAAGF,oBAAoB,EAA9C;EAEA,IAAMkJ,mBAAmB,GAAGL,sBAAsB,EAAlD;EAEA,IAAMkS,SAAS,GAAG1d,OAAO,CACvB;IAAA,OACE,SAAS0d,SAAT,CAAmBlR,KAAnB;MACE,IAAQ/V,GAAR,GAAgB+V,KAAhB,CAAQ/V,GAAR;MAEAoM,iBAAiB;;MACjB,QAAQpM,GAAR;;QAEE,KAAK0mB,cAAc,CAACQ,MAApB;UACEnR,KAAK,CAACoR,cAAN;;UACA,IAAI5R,cAAc,EAAlB,EAAsB;YACpBH,mBAAmB;YACnB;;;UAEFsC,WAAW;UACXhB,QAAQ,CAAC,CAAD,CAAR;UACAe,gBAAgB;UAChB;;KAhBR;GADuB,EAoBvB,CACEf,QADF,EAEEgB,WAFF,EAGEtC,mBAHF,EAIEqC,gBAJF,EAKElC,cALF,EAMEnJ,iBANF,CApBuB,CAAzB;EA8BA1F,SAAS,CAAC;IACR,IAAMzK,OAAO,GAAGhB,aAAa,CAACgB,OAA9B;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAAC0Q,gBAAR,CAAyB,SAAzB,EAAoCsa,SAApC;IAEA,OAAO;MACLhrB,OAAO,CAAC6Q,mBAAR,CAA4B,SAA5B,EAAuCma,SAAvC;KADF;GATO,EAYN,CAAChsB,aAAD,EAAgBI,cAAhB,EAAgCqb,QAAhC,EAA0CuQ,SAA1C,CAZM,CAAT;AAaD;;AAED,SAASJ,4BAAT;EACE,IAAMO,mBAAmB,GAAGnQ,sBAAsB,EAAlD;EACA,IAAMhc,aAAa,GAAGY,gBAAgB,EAAtC;EACA,IAAMT,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMb,cAAc,GAAGc,iBAAiB,EAAxC;;EACA,4BAAoC0P,uBAAuB,EAA3D;MAASwb,uBAAT;;EACA,IAAMC,qBAAqB,GAAGC,wBAAwB,EAAtD;EACA,IAAM3B,kBAAkB,GAAG1F,qBAAqB,EAAhD;EAEA,IAAM+G,SAAS,GAAG1d,OAAO,CACvB;IAAA,OACE,SAAS0d,SAAT,CAAmBlR,KAAnB;MACE,IAAQ/V,GAAR,GAAgB+V,KAAhB,CAAQ/V,GAAR;;MAEA,QAAQA,GAAR;QACE,KAAK0mB,cAAc,CAACc,UAApB;UACE,IAAI,CAAC5B,kBAAL,EAAyB;YACvB;;;UAEF7P,KAAK,CAACoR,cAAN;UACAE,uBAAuB,CAAC,IAAD,CAAvB;UACAD,mBAAmB;UACnB;;QACF,KAAKV,cAAc,CAACe,SAApB;UACE1R,KAAK,CAACoR,cAAN;UACAG,qBAAqB;UACrB;;QACF,KAAKZ,cAAc,CAACgB,KAApB;UACE3R,KAAK,CAACoR,cAAN;UACA7J,8BAA8B,CAACliB,OAAO,CAACa,OAAT,CAA9B;UACA;;KApBR;GADuB,EAwBvB,CACEmrB,mBADF,EAEEE,qBAFF,EAGED,uBAHF,EAIEjsB,OAJF,EAKEwqB,kBALF,CAxBuB,CAAzB;EAiCAlf,SAAS,CAAC;IACR,IAAMzK,OAAO,GAAGZ,cAAc,CAACY,OAA/B;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAAC0Q,gBAAR,CAAyB,SAAzB,EAAoCsa,SAApC;IAEA,OAAO;MACLhrB,OAAO,CAAC6Q,mBAAR,CAA4B,SAA5B,EAAuCma,SAAvC;KADF;GATO,EAYN,CAAChsB,aAAD,EAAgBI,cAAhB,EAAgC4rB,SAAhC,CAZM,CAAT;AAaD;;AAED,SAASH,+BAAT;EACE,IAAMxrB,iBAAiB,GAAGc,oBAAoB,EAA9C;EACA,IAAMqb,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAM3b,cAAc,GAAGc,iBAAiB,EAAxC;EACA,IAAMmrB,qBAAqB,GAAGC,wBAAwB,EAAtD;;EACA,6BAA4B1b,uBAAuB,EAAnD;MAAOwV,MAAP;MAAeC,SAAf;;EACA,IAAMY,mBAAmB,GAAG9B,sBAAsB,EAAlD;EACA,IAAMwF,kBAAkB,GAAG1F,qBAAqB,EAAhD;EACA,IAAMyH,MAAM,GAAGC,SAAS,EAAxB;EAEA,IAAMX,SAAS,GAAG1d,OAAO,CACvB;IAAA;MAEE,SAAS0d,SAAT,CAAmBlR,KAAnB;QACE,IAAQ/V,GAAR,GAAgB+V,KAAhB,CAAQ/V,GAAR;;QAEA,IAAI4lB,kBAAJ,EAAwB;UACtB,QAAQ5lB,GAAR;YACE,KAAK0mB,cAAc,CAACmB,SAApB;cACE9R,KAAK,CAACoR,cAAN;;cACA,IAAI,CAAC9F,MAAL,EAAa;gBACX,OAAO5J,gBAAgB,EAAvB;;;cAEFqQ,iBAAiB,CAACrQ,gBAAD,CAAjB;cACA;;YACF,KAAKiP,cAAc,CAACc,UAApB;cACEzR,KAAK,CAACoR,cAAN;;cACA,IAAI,CAAC9F,MAAL,EAAa;gBACX,OAAO5J,gBAAgB,EAAvB;;;cAEFsQ,iBAAiB;cACjB;;YACF,KAAKrB,cAAc,CAACe,SAApB;cACE1R,KAAK,CAACoR,cAAN;;cACA,IAAI9F,MAAJ,EAAY;gBACVC,SAAS,CAAC,KAAD,CAAT;;;cAEFgG,qBAAqB;cACrB;;YACF;cACEK,MAAM,CAAC5R,KAAD,CAAN;cACA;;;;QAIN,IAAImM,mBAAJ,EAAyB;UACvB,QAAQliB,GAAR;YACE,KAAK0mB,cAAc,CAACsB,OAApB;cACEjS,KAAK,CAACoR,cAAN;;cACA,IAAI,CAAC9F,MAAL,EAAa;gBACX,OAAO5J,gBAAgB,EAAvB;;;cAEFqQ,iBAAiB,CAACrQ,gBAAD,CAAjB;cACA;;YACF,KAAKiP,cAAc,CAACe,SAApB;cACE1R,KAAK,CAACoR,cAAN;;cACA,IAAI,CAAC9F,MAAL,EAAa;gBACX,OAAO5J,gBAAgB,EAAvB;;;cAEFsQ,iBAAiB;cACjB;;YACF;cACEJ,MAAM,CAAC5R,KAAD,CAAN;cACA;;;;;GArDa,EAyDvB,CACEsL,MADF,EAEE5J,gBAFF,EAGE6J,SAHF,EAIEgG,qBAJF,EAKEK,MALF,EAMEzF,mBANF,EAOE0D,kBAPF,CAzDuB,CAAzB;EAoEAlf,SAAS,CAAC;IACR,IAAMzK,OAAO,GAAGX,iBAAiB,CAACW,OAAlC;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAAC0Q,gBAAR,CAAyB,SAAzB,EAAoCsa,SAApC;IAEA,OAAO;MACLhrB,OAAO,CAAC6Q,mBAAR,CAA4B,SAA5B,EAAuCma,SAAvC;KADF;GATO,EAYN,CAAC3rB,iBAAD,EAAoBD,cAApB,EAAoCgmB,MAApC,EAA4C4F,SAA5C,CAZM,CAAT;AAaD;;AAED,SAASF,mCAAT;EACE,IAAMtP,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAMzb,qBAAqB,GAAGc,wBAAwB,EAAtD;EACA,IAAMjB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAMyrB,MAAM,GAAGC,SAAS,EAAxB;EAEA,IAAMX,SAAS,GAAG1d,OAAO,CACvB;IAAA,OACE,SAAS0d,SAAT,CAAmBlR,KAAnB;MACE,IAAQ/V,GAAR,GAAgB+V,KAAhB,CAAQ/V,GAAR;;MAEA,QAAQA,GAAR;QACE,KAAK0mB,cAAc,CAACsB,OAApB;UACEjS,KAAK,CAACoR,cAAN;UACA1P,gBAAgB;UAChB;;QACF,KAAKiP,cAAc,CAACc,UAApB;UACEzR,KAAK,CAACoR,cAAN;UACA1sB,uBAAuB,CAAC8rB,gBAAgB,EAAjB,CAAvB;UACA;;QACF,KAAKG,cAAc,CAACmB,SAApB;UACE9R,KAAK,CAACoR,cAAN;UACA7sB,uBAAuB,CAACisB,gBAAgB,EAAjB,CAAvB;UACA;;QACF,KAAKG,cAAc,CAACe,SAApB;UACE1R,KAAK,CAACoR,cAAN;UACA9J,sBAAsB,CAACjiB,OAAO,CAACa,OAAT,CAAtB;UACA;;QACF;UACE0rB,MAAM,CAAC5R,KAAD,CAAN;UACA;;KAvBR;GADuB,EA2BvB,CAAC3a,OAAD,EAAUqc,gBAAV,EAA4BkQ,MAA5B,CA3BuB,CAAzB;EA8BAjhB,SAAS,CAAC;IACR,IAAMzK,OAAO,GAAGV,qBAAqB,CAACU,OAAtC;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAAC0Q,gBAAR,CAAyB,SAAzB,EAAoCsa,SAApC;IAEA,OAAO;MACLhrB,OAAO,CAAC6Q,mBAAR,CAA4B,SAA5B,EAAuCma,SAAvC;KADF;GATO,EAYN,CAAC1rB,qBAAD,EAAwBH,OAAxB,EAAiC6rB,SAAjC,CAZM,CAAT;AAaD;;AAED,SAASD,qBAAT;EACE,IAAM5rB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAM+rB,YAAY,GAAGC,eAAe,EAApC;EACA,IAAMjT,kBAAkB,GAAGO,qBAAqB,EAAhD;EACA,IAAMD,cAAc,GAAGD,iBAAiB,EAAxC;EACA,IAAMF,mBAAmB,GAAGL,sBAAsB,EAAlD;EAEA,IAAM4S,MAAM,GAAGC,SAAS,EAAxB;EAEA,IAAMX,SAAS,GAAG1d,OAAO,CACvB;IAAA;MAEE,SAAS0d,SAAT,CAAmBlR,KAAnB;QACE,IAAQ/V,GAAR,GAAgB+V,KAAhB,CAAQ/V,GAAR;QAEA,IAAMymB,aAAa,GAAG1W,gBAAgB,CAACwW,gBAAgB,EAAjB,CAAtC;;QAEA,QAAQvmB,GAAR;UACE,KAAK0mB,cAAc,CAACc,UAApB;YACEzR,KAAK,CAACoR,cAAN;YACAzJ,qBAAqB,CAAC+I,aAAD,CAArB;YACA;;UACF,KAAKC,cAAc,CAACmB,SAApB;YACE9R,KAAK,CAACoR,cAAN;YACAxJ,qBAAqB,CAAC8I,aAAD,CAArB;YACA;;UACF,KAAKC,cAAc,CAACe,SAApB;YACE1R,KAAK,CAACoR,cAAN;;YACA,IAAI5R,cAAc,EAAlB,EAAsB;cACpBH,mBAAmB;cACnB;;;YAEF2I,2BAA2B,CAAC0I,aAAD,CAA3B;YACA;;UACF,KAAKC,cAAc,CAACsB,OAApB;YACEjS,KAAK,CAACoR,cAAN;;YACA,IAAI5R,cAAc,EAAlB,EAAsB;cACpBH,mBAAmB;cACnB;;;YAEFwI,yBAAyB,CAAC6I,aAAD,EAAgBwB,YAAhB,CAAzB;YACA;;UACF,KAAKvB,cAAc,CAAChG,KAApB;YACE3K,KAAK,CAACoR,cAAN;YACAlS,kBAAkB,CAACc,KAAK,CAAC/Z,MAAP,CAAlB;YACA;;UACF;YACE2rB,MAAM,CAAC5R,KAAD,CAAN;YACA;;;;GAvCe,EA0CvB,CACEkS,YADF,EAEEN,MAFF,EAGE1S,kBAHF,EAIEM,cAJF,EAKEH,mBALF,CA1CuB,CAAzB;EAmDA1O,SAAS,CAAC;IACR,IAAMzK,OAAO,GAAGb,OAAO,CAACa,OAAxB;;IAEA,IAAI,CAACA,OAAL,EAAc;MACZ;;;IAGFA,OAAO,CAAC0Q,gBAAR,CAAyB,SAAzB,EAAoCsa,SAApC;IAEA,OAAO;MACLhrB,OAAO,CAAC6Q,mBAAR,CAA4B,SAA5B,EAAuCma,SAAvC;KADF;GATO,EAYN,CAAC7rB,OAAD,EAAU6rB,SAAV,CAZM,CAAT;AAaD;;AAED,SAASM,wBAAT;EACE,IAAMY,uBAAuB,GAAGjR,0BAA0B,EAA1D;EACA,IAAMoN,YAAY,GAAGT,eAAe,EAApC;EACA,IAAMzoB,OAAO,GAAGc,UAAU,EAA1B;EAEA,OAAOmZ,WAAW,CAChB,SAASiS,qBAAT;IACE,IAAIhD,YAAJ,EAAkB;MAChB,OAAOjH,sBAAsB,CAACjiB,OAAO,CAACa,OAAT,CAA7B;;;IAEF,OAAOksB,uBAAuB,EAA9B;GALc,EAOhB,CAAC/sB,OAAD,EAAU+sB,uBAAV,EAAmC7D,YAAnC,CAPgB,CAAlB;AASD;;AAED,SAAS4D,eAAT;EACE,IAAMzQ,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAMmR,uBAAuB,GAAGjR,0BAA0B,EAA1D;EACA,IAAMoN,YAAY,GAAGT,eAAe,EAApC;EAEA,OAAOxO,WAAW,CAChB,SAAS+S,aAAT;IACE,IAAI9D,YAAJ,EAAkB;MAChB,OAAO7M,gBAAgB,EAAvB;;;IAEF,OAAO0Q,uBAAuB,EAA9B;GALc,EAOhB,CAAC1Q,gBAAD,EAAmB6M,YAAnB,EAAiC6D,uBAAjC,CAPgB,CAAlB;AASD;;AAED,SAASL,iBAAT,CAA2BO,QAA3B;EACE,IAAMC,eAAe,GAAG/B,gBAAgB,EAAxC;;EAEA,IAAI,CAAC+B,eAAL,EAAsB;IACpB;;;EAGF,IAAI,CAAC3Y,qBAAqB,CAAC2Y,eAAD,CAA1B,EAA6C;IAC3CD,QAAQ;;;EAGV5tB,uBAAuB,CAAC6tB,eAAD,CAAvB;AACD;;AAED,SAASP,iBAAT;EACE,IAAMO,eAAe,GAAG/B,gBAAgB,EAAxC;;EAEA,IAAI,CAAC+B,eAAL,EAAsB;IACpB;;;EAGFhuB,uBAAuB,CAACguB,eAAD,CAAvB;AACD;;AAED,SAASV,SAAT;EACE,IAAMhQ,YAAY,GAAGD,eAAe,EAApC;EACA,IAAMF,gBAAgB,GAAGT,mBAAmB,EAA5C;EACA,IAAM7S,cAAc,GAAGyD,uBAAuB,EAA9C;EACA,IAAMwN,mBAAmB,GAAGL,sBAAsB,EAAlD;EAEA,OAAO,SAAS4S,MAAT,CAAgB5R,KAAhB;IACL,IAAQ/V,GAAR,GAAgB+V,KAAhB,CAAQ/V,GAAR;;IAEA,IAAIuoB,WAAW,CAACxS,KAAD,CAAX,IAAsB5R,cAA1B,EAA0C;MACxC;;;IAGF,IAAInE,GAAG,CAACwoB,KAAJ,CAAU,oBAAV,CAAJ,EAAqC;MACnCzS,KAAK,CAACoR,cAAN;MACA/R,mBAAmB;MACnBqC,gBAAgB;MAChBG,YAAY,CAAC5X,GAAD,CAAZ;;GAXJ;AAcD;;AAED,SAASuoB,WAAT,CAAqBxS,KAArB;EACE,IAAQ0S,OAAR,GAAqC1S,KAArC,CAAQ0S,OAAR;MAAiBC,OAAjB,GAAqC3S,KAArC,CAAiB2S,OAAjB;MAA0BC,MAA1B,GAAqC5S,KAArC,CAA0B4S,MAA1B;EAEA,OAAOF,OAAO,IAAIC,OAAX,IAAsBC,MAA7B;AACD;;SCzdeC,aACdnkB,aACAhE,OACAzB;EAEA,IAAI,CAACyB,KAAL,EAAY;IACV;;;EAGF,IAAIzB,UAAU,KAAKxC,UAAU,CAAC4e,MAA9B,EAAsC;IACpC;;;EAGF,IAAM3Z,OAAO,GAAGN,YAAY,CAACV,KAAD,CAA5B;;EAEA,IAAIooB,cAAc,CAAC1f,GAAf,CAAmB1H,OAAnB,CAAJ,EAAiC;IAC/B;;;EAGFQ,eAAe,CAACxB,KAAD,CAAf,CAAuBQ,OAAvB,CAA+B,UAACmB,SAAD;IAC7B,IAAM0mB,QAAQ,GAAGrkB,WAAW,CAACrC,SAAD,EAAYpD,UAAZ,CAA5B;IACA+pB,YAAY,CAACD,QAAD,CAAZ;GAFF;EAKAD,cAAc,CAACxN,GAAf,CAAmB5Z,OAAnB;AACD;AAED,AAAO,IAAMonB,cAAc,gBAAgB,IAAIxjB,GAAJ,EAApC;;AAEP,SAAS0jB,YAAT,CAAsBC,GAAtB;EACE,IAAMC,KAAK,GAAG,IAAIC,KAAJ,EAAd;EACAD,KAAK,CAACvO,GAAN,GAAYsO,GAAZ;AACD;;SC3BeG;EACd,IAAM/tB,OAAO,GAAGc,UAAU,EAA1B;EACA,IAAM8C,UAAU,GAAG+H,mBAAmB,EAAtC;EACA,IAAMtC,WAAW,GAAGsD,oBAAoB,EAAxC;EAEArB,SAAS,CAAC;IACR,IAAI1H,UAAU,KAAKxC,UAAU,CAAC4e,MAA9B,EAAsC;MACpC;;;IAGF,IAAM1O,OAAO,GAAGtR,OAAO,CAACa,OAAxB;IAEAyQ,OAAO,QAAP,YAAAA,OAAO,CAAEC,gBAAT,CAA0B,SAA1B,EAAqCyZ,OAArC;IAEA,OAAO;MACL1Z,OAAO,QAAP,YAAAA,OAAO,CAAEI,mBAAT,CAA6B,SAA7B,EAAwCsZ,OAAxC;KADF;;IAIA,SAASA,OAAT,CAAiBrQ,KAAjB;MACE,IAAMpF,MAAM,GAAGZ,gBAAgB,CAACgG,KAAK,CAAC/Z,MAAP,CAA/B;;MAEA,IAAI,CAAC2U,MAAL,EAAa;QACX;;;MAGF,wBAAgBT,gBAAgB,CAACS,MAAD,CAAhC;UAAOlQ,KAAP;;MAEA,IAAI,CAACA,KAAL,EAAY;QACV;;;MAGF,IAAImB,kBAAkB,CAACnB,KAAD,CAAtB,EAA+B;QAC7BmoB,YAAY,CAACnkB,WAAD,EAAchE,KAAd,EAAqBzB,UAArB,CAAZ;;;GA3BG,EA8BN,CAAC5D,OAAD,EAAU4D,UAAV,EAAsByF,WAAtB,CA9BM,CAAT;AA+BD;;SCzBuB2kB;MAAapuB,gBAAAA;EACnC,OACEE,aAAA,CAACiP,qBAAD,MAAA,EACEjP,aAAA,CAACmuB,iBAAD,MAAA,EAAoBruB,QAApB,CADF,CADF;AAKD;;AAQD,SAASquB,iBAAT;;;MAA6BruB,iBAAAA;EAC3B,IAAMmK,KAAK,GAAGkC,cAAc,EAA5B;EACA,IAAMiiB,gBAAgB,GAAGzF,eAAe,EAAxC;EACA,IAAM5oB,aAAa,GAAGY,gBAAgB,EAAtC;EACA,IAAMyI,SAAS,GAAGkD,kBAAkB,EAApC;EACA,IAAMvC,KAAK,GAAGwC,cAAc,EAA5B;EAEAkf,qBAAqB;EACrBwC,UAAU;EAEV,OACEjuB,aAAA,QAAA;IACEoJ,SAAS,EAAEwV,EAAE,CACXC,QAAM,CAACwP,IADI,EAEXxP,QAAM,CAACyP,aAFI,EAGXrkB,KAAK,KAAK1I,KAAK,CAACkD,IAAhB,IAAwBoa,QAAM,CAAC0P,SAHpB,EAIXtkB,KAAK,KAAK1I,KAAK,CAACitB,IAAhB,IAAwB3P,QAAM,CAAC4P,aAJpB,iBAMRzwB,UAAU,CAAC0wB,YANH,IAMkBN,gBANlB,QAQXhlB,SARW;IAUbua,GAAG,EAAE5jB;IACLgK,KAAK,EAAEA;GAZT,EAcGjK,QAdH,CADF;AAkBD;;AAED,IAAM6uB,SAAS,GAAG;EAChB,yCACE,iDAFc;EAGhB,yBAAyB,iCAHT;EAIhB,oBAAoB,4BAJJ;EAKhB,wBAAwB,gCALR;EAMhB,wBAAwB,gCANR;EAOhB,+BAA+B,uCAPf;EAQhB,iCAAiC,yCARjB;EAShB,6BAA6B,qCATb;EAUhB,kBAAkB,0BAVF;EAWhB,sCACE,8CAZc;EAahB,yCACE,iDAdc;EAehB,oCACE,4CAhBc;EAiBhB,qCACE;AAlBc,CAAlB;AAqBA,IAAM9P,QAAM,gBAAGvgB,UAAU,CAACG,MAAX,CAAkB;EAC/B4vB,IAAI,EAAE;IACJ,KAAK,CAAC,UAAD,EAAarwB,UAAU,CAACmsB,WAAxB,CADD;IAEJtJ,QAAQ,EAAE,UAFN;IAGJliB,OAAO,EAAE,MAHL;IAIJ2mB,aAAa,EAAE,QAJX;IAKJsJ,WAAW,EAAE,KALT;IAMJC,WAAW,EAAE,OANT;IAOJ5E,YAAY,EAAE,iCAPV;IAQJ6E,WAAW,EAAE,gCART;IASJ9N,eAAe,EAAE,qBATb;IAUJ+N,QAAQ,EAAE;GAXmB;EAa/BT,aAAa,EAAE;IACb,MAAM;MACJ,yBAAyB,SADrB;MAEJ,wBAAwB,SAFpB;MAGJ,wBAAwB,SAHpB;MAIJ,oBAAoB,SAJhB;MAKJ,+BAA+B,SAL3B;MAMJ,6BAA6B,SANzB;MAOJ,kBAAkB,MAPd;MAQJ,oCAAoC,SARhC;MASJ,qCAAqC,WATjC;MAWJ,4BAA4B,MAXxB;MAaJ,8BAA8B,KAb1B;;;MAgBJ,6BAA6B,4BAhBzB;MAiBJ,wBAAwB,oCAjBpB;;;MAoBJ,iDACE,4BArBE;MAsBJ,iCAAiC,2BAtB7B;;;MAyBJ,sCAAsC,kCAzBlC;MA0BJ,8BAA8B,QA1B1B;MA2BJ,oCAAoC,KA3BhC;MA4BJ,6BAA6B,MA5BzB;MA6BJ,iCAAiC,uBA7B7B;MA8BJ,wCAAwC,uBA9BpC;MA+BJ,kCAAkC,+BA/B9B;;;MAkCJ,yCAAyC,MAlCrC;;;MAqCJ,uCAAuC,MArCnC;MAsCJ,yCAAyC,qBAtCrC;;;MAyCJ,wBAAwB,MAzCpB;MA0CJ,2BAA2B,MA1CvB;MA2CJ,8BAA8B,iCA3C1B;MA4CJ,8BAA8B,gCA5C1B;MA6CJ,4BAA4B,uBA7CxB;;;MAgDJ,0BAA0B,iCAhDtB;;;MAmDJ,iCAAiC,WAnD7B;MAoDJ,mCAAmC,uBApD/B;MAqDJ,gCAAgC,iCArD5B;MAsDJ,+BAA+B,MAtD3B;;;MAyDJ,oBAAoB,MAzDhB;MA0DJ,uBAAuB,KA1DnB;MA2DJ,wBACE,4DA5DE;MA6DJ,2BAA2B,2BA7DvB;MA8DJ,yCAAyC,gCA9DrC;MA+DJ,+CAA+C,uBA/D3C;;;MAkEJ,gCAAgC,GAlE5B;MAmEJ,6CAA6C,GAnEzC;MAoEJ,gCAAgC,GApE5B;MAqEJ,uCAAuC,GArEnC;MAsEJ,yBAAyB,GAtErB;;;MAyEJ,cAAc,MAzEV;MA0EJ,8CAA8C,iBA1E1C;MA2EJ,8BAA8B,SA3E1B;MA4EJ,yBAAyB,4BA5ErB;MA6EJ,6BAA6B,WA7EzB;MA8EJ,6BAA6B,SA9EzB;MA+EJ,oCAAoC,SA/EhC;MAgFJ,sCAAsC,WAhFlC;MAiFJ,kCAAkC,SAjF9B;MAkFJ,uBAAuB,SAlFnB;MAmFJ,2CAA2C,iBAnFvC;MAoFJ,8CAA8C,MApF1C;MAqFJ,yCAAyC,SArFrC;MAsFJ,0CAA0C;;GApGf;EAuG/BG,aAAa,EAAE;IACb,KAAKzwB,UAAU,CAACgxB,SADH;IAEb,uCAAuC;MACrC,MAAML;;GA1GqB;EA6G/BJ,SAAS,EAAE;IACT,KAAKvwB,UAAU,CAACuwB,SADP;IAET,MAAMI;;AA/GuB,CAAlB,CAAf;;;;;AC1EA,SAASM,WAAT,CAAqBvQ,KAArB;EACE,OACE1e,aAAA,CAACH,yBAAD,MAAA,EACEG,aAAA,CAACyK,oBAAD,oBAA0BiU,MAA1B,EACE1e,aAAA,CAACkuB,UAAD,MAAA,EACEluB,aAAA,CAACorB,MAAD,MAAA,CADF,EAEEprB,aAAA,CAACkkB,IAAD,MAAA,CAFF,EAGElkB,aAAA,CAAC+mB,OAAD,MAAA,CAHF,CADF,CADF,CADF;AAWD;;;AAGD,oCAAe/mB,IAAA,CAAWivB,WAAX,EAAwB,UAAC5vB,IAAD,EAAOG,IAAP;;;EACrC,IAAM0vB,gBAAgB,yBAAG7vB,IAAI,CAACoI,YAAR,iCAAwB,EAA9C;EACA,IAAM0nB,gBAAgB,yBAAG3vB,IAAI,CAACiI,YAAR,iCAAwB,EAA9C;EACA,OACEpI,IAAI,CAACiK,YAAL,KAAsB9J,IAAI,CAAC8J,YAA3B,IACAjK,IAAI,CAACsK,iBAAL,KAA2BnK,IAAI,CAACmK,iBADhC,IAEAtK,IAAI,CAACuK,iBAAL,KAA2BpK,IAAI,CAACoK,iBAFhC,IAGAvK,IAAI,CAACgK,eAAL,KAAyB7J,IAAI,CAAC6J,eAH9B,IAIAhK,IAAI,CAACyK,iBAAL,KAA2BtK,IAAI,CAACsK,iBAJhC,IAKAzK,IAAI,CAAC8J,eAAL,KAAyB3J,IAAI,CAAC2J,eAL9B,IAMA9J,IAAI,CAACyE,UAAL,KAAoBtE,IAAI,CAACsE,UANzB,IAOAzE,IAAI,CAAC4K,KAAL,KAAezK,IAAI,CAACyK,KAPpB,IAQA5K,IAAI,CAAC0J,mBAAL,KAA6BvJ,IAAI,CAACuJ,mBARlC,IASA1J,IAAI,CAACoK,cAAL,KAAwBjK,IAAI,CAACiK,cAT7B,IAUApK,IAAI,CAAC+J,SAAL,KAAmB5J,IAAI,CAAC4J,SAVxB,IAWA/J,IAAI,CAACmK,MAAL,KAAgBhK,IAAI,CAACgK,MAXrB,IAYAnK,IAAI,CAAC+K,KAAL,KAAe5K,IAAI,CAAC4K,KAZpB,IAaA/K,IAAI,CAAC0K,KAAL,KAAevK,IAAI,CAACuK,KAbpB,IAcA1K,IAAI,CAAC4J,cAAL,KAAwBzJ,IAAI,CAACyJ,cAd7B,IAeA5J,IAAI,CAAC2J,sBAAL,KAAgCxJ,IAAI,CAACwJ,sBAfrC,IAgBAkmB,gBAAgB,CAAC9rB,MAAjB,KAA4B+rB,gBAAgB,CAAC/rB,MAjB/C;AAmBD,CAtBc,CAAf;;ICzBqBgsB;;;EAInB,uBAAY1Q,KAAZ;;;IACE,oCAAMA,KAAN;IACA,MAAKlR,KAAL,GAAa;MAAE6hB,QAAQ,EAAE;KAAzB;;;;gBAGKC,2BAAP;IACE,OAAO;MAAED,QAAQ,EAAE;KAAnB;;;;;SAGFE,oBAAA,2BAAkBC,KAAlB,EAAgCC,SAAhC;;IAEEC,OAAO,CAACF,KAAR,CAAc,sCAAd,EAAsDA,KAAtD,EAA6DC,SAA7D;;;SAGFE,SAAA;IACE,IAAI,KAAKniB,KAAL,CAAW6hB,QAAf,EAAyB;MACvB,OAAO,IAAP;;;IAGF,OAAO,KAAK3Q,KAAL,CAAW5e,QAAlB;;;;EAvBuCE;;SCK3B4vB;MACdrpB,eAAAA;uBACAuZ;MAAAA,8BAAO;6BACPhc;MAAAA,0CAAaxC,UAAU,CAAC4C;2BACxBob;MAAAA,sCAAW;MACX/V,mBAAAA;MACAqkB,gBAAAA;;EASA,IAAI,CAACrnB,OAAD,IAAY,CAACqnB,QAAb,IAAyB,CAACrkB,WAA9B,EAA2C;IACzC,OAAO,IAAP;;;EAGF,OACEvJ,aAAA,CAAC6f,aAAD;IACEtZ,OAAO,EAAEA;IACTuZ,IAAI,EAAEA;IACNhc,UAAU,EAAEA;IACZwb,QAAQ,EAAEA;IACV/V,WAAW,EAAEqkB,QAAQ,GAAG;MAAA,OAAMA,QAAN;KAAH,GAAoBrkB;GAL3C,CADF;AASD;;SCXuB0lB,cAAYvQ;EAClC,IAAMtT,gBAAgB,GAAGD,sBAAsB,CAAC;IAC9CG,YAAY,EAAEoT,KAAK,CAACpT;GADyB,CAA/C;EAIA,OACEtL,aAAA,CAACovB,aAAD,MAAA,EACEpvB,aAAA,CAAC8K,oBAAoB,CAACtK,QAAtB;IAA+BC,KAAK,EAAE2K;GAAtC,EACEpL,aAAA,CAAC6vB,gBAAD,oBAAsBnR,MAAtB,CADF,CADF,CADF;AAOD;;;;;"}