@pstdio/ui 0.12.0 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/activity/activity-avatar.tsx","../src/components/activity/activity-comment.tsx","../src/components/activity/activity-composer.tsx","../src/components/activity/activity-event.tsx","../src/components/activity/activity-root.tsx","../src/components/activity/activity-timeline.tsx","../src/components/activity/index.ts","../src/components/attached-panel.tsx","../src/components/header.tsx","../src/components/searchable-menu.tsx","../src/components/list-row/searchable-action-menu.tsx","../src/components/list-row/list-row-actions.tsx","../src/components/list-row/list-row-content.tsx","../src/components/list-row/list-row-menu.tsx","../src/components/list-row/list-row.tsx","../src/components/resource-context-menu.tsx","../src/components/breadcrumb.tsx","../src/components/bubble-button.tsx","../src/components/bubble-panel.tsx","../src/utils/apply-theme-preference.ts","../src/utils/browser-storage.ts","../src/utils/theme-preference.tsx","../src/components/code-editor.tsx","../src/components/content-placeholder.tsx","../src/components/icon-color-picker.tsx","../src/components/session-indicator.tsx","../src/components/workspace-badge.tsx","../src/components/data-renderer/types.ts","../src/components/data-renderer/data-renderer-helpers.ts","../src/components/data-renderer/data-renderer-card.tsx","../src/components/data-renderer/data-renderer-board.tsx","../src/components/data-renderer/data-renderer-list.tsx","../src/components/data-renderer/data-renderer-content.tsx","../src/components/data-renderer/data-renderer-grouping.ts","../src/components/data-renderer/display-menu.tsx","../src/components/data-renderer/filter-menu.tsx","../src/components/data-renderer/use-data-renderer-store.ts","../src/components/data-renderer/use-resolved-attributes.ts","../src/components/data-renderer/data-renderer-toolbar.tsx","../src/components/data-renderer/data-renderer.tsx","../src/components/delete-confirmation-modal.tsx","../src/components/diff-viewer/diff-size.ts","../src/components/diff-viewer/diff-card-body.tsx","../src/components/diff-viewer/diff-card-load-state.tsx","../src/components/diff-viewer/diff-card-content.tsx","../src/components/diff-viewer/diff-card.tsx","../src/components/diff-viewer/diff-drawer-empty-state.tsx","../src/components/diff-viewer/diff-drawer-height.ts","../src/components/diff-viewer/diff-drawer-scroll.ts","../src/components/diff-viewer/use-selected-diff-scroll.ts","../src/components/diff-viewer/diff-drawer.tsx","../src/components/resizable-split-layout.handle.tsx","../src/components/resizable-split-layout.tsx","../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer.store.ts","../src/components/tree-list/tree-list-model.ts","../src/components/tree-list/tree-list-node-row.tsx","../src/components/tree-list/tree-list-section-header.tsx","../src/components/tree-list/tree-list-reorder.ts","../src/components/tree-list/tree-list-sortable.tsx","../src/components/tree-list/use-tree-list-keyboard-navigation.ts","../src/components/tree-list/tree-list.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx","../src/components/error-boundary.tsx","../src/components/horizontal-menu-stack.tsx","../src/components/simple-card.tsx","../src/components/integration-card.tsx","../src/components/item-section.tsx","../src/components/open-source-notices-screen.tsx","../src/components/palette-filter.ts","../src/components/palette-list.tsx","../src/components/palette.tsx","../src/components/palette-shortcut.tsx","../src/components/param-editor/param-editor-label.tsx","../src/components/param-editor/param-editor-read-only-value.tsx","../src/components/param-editor/color-input.tsx","../src/components/param-editor/date-input.tsx","../src/components/number-input.tsx","../src/components/slider.tsx","../src/components/param-editor/number-input.tsx","../src/components/param-editor/selection-input.tsx","../src/components/param-editor/text-input.tsx","../src/components/param-editor/input-group.tsx","../src/components/param-editor/param-editor.tsx","../src/components/repo-picker-dialog.tsx","../src/components/sidebar/sidebar.store.ts","../src/components/sidebar/sidebar-footer.tsx","../src/components/panel-header.constants.ts","../src/components/sidebar/sidebar-header.tsx","../src/components/sidebar/sidebar.tsx","../src/components/sidebar/sidebar-project-menu.tsx","../src/components/switch.tsx","../src/components/tab-strip/tab-visibility.store.ts","../src/components/tree-list/tree-list-visibility-filter.ts","../src/components/tab-strip/tab-visibility-filter.ts","../src/components/tag-editor/tag-editor-row.tsx","../src/components/tag-editor/tag-editor.tsx","../src/components/tag-editor/tag-settings-panel.tsx","../src/components/toaster.tsx","../src/components/tree-list/tree-list-order.store.ts","../src/components/tree-list/tree-list-order-filter.ts","../src/components/tree-list/tree-list-visibility.store.ts","../src/utils/prism.ts"],"sourcesContent":["import { Avatar, Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\n\nexport interface ActivityAvatarProps {\n actor?: ActivityActor;\n icon?: ReactNode;\n color?: string;\n background?: string;\n}\n\nexport const ActivityAvatar = (props: ActivityAvatarProps) => {\n const { actor, icon, color = \"fg.muted\", background = \"bg.muted\" } = props;\n\n if (icon) {\n return (\n <Box\n boxSize=\"18px\"\n borderRadius=\"full\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n color={color}\n background={background}\n >\n {icon}\n </Box>\n );\n }\n\n return (\n <Avatar.Root size=\"2xs\" flexShrink={0}>\n <Avatar.Image src={actor?.avatarSrc} alt={actor?.avatarAlt ?? actor?.name} />\n <Avatar.Fallback name={actor?.name} background={background} color={color} />\n </Avatar.Root>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { Children, type ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\ninterface ActivityCommentHeaderProps {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityCommentProps extends Omit<HTMLChakraProps<\"article\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n replies?: ReactNode;\n composer?: ReactNode;\n children: ReactNode;\n}\n\nexport interface ActivityReplyProps extends Omit<HTMLChakraProps<\"div\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n children: ReactNode;\n}\n\nconst TimestampSeparator = () => (\n <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />\n);\n\nconst ActivityCommentHeader = (props: ActivityCommentHeaderProps) => {\n const { actor, timestamp, actions } = props;\n\n return (\n <HStack gap=\"xs\" alignItems=\"center\" minW=\"0\">\n <ActivityAvatar actor={actor} />\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n {actor.name}\n </Text>\n {timestamp ? (\n <>\n <TimestampSeparator />\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n <Box marginLeft=\"auto\" flexShrink={0}>\n {actions}\n </Box>\n </HStack>\n );\n};\n\nexport const ActivityReply = (props: ActivityReplyProps) => {\n const { actor, timestamp, actions, children, ...rootProps } = props;\n\n return (\n <Box paddingX=\"md\" paddingY=\"sm\" {...rootProps}>\n <Stack gap=\"xs\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Box paddingLeft=\"32px\">\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\">\n {children}\n </Text>\n </Box>\n </Stack>\n </Box>\n );\n};\n\nexport const ActivityComment = (props: ActivityCommentProps) => {\n const { actor, timestamp, actions, replies, composer, children, ...rootProps } = props;\n const hasReplies = Children.count(replies) > 0;\n\n return (\n <Box\n as=\"article\"\n width=\"full\"\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"sm\"\n background=\"bg\"\n overflow=\"hidden\"\n {...rootProps}\n >\n <Stack gap=\"sm\" padding=\"md\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\" whiteSpace=\"pre-wrap\">\n {children}\n </Text>\n </Stack>\n {hasReplies ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {replies}\n </Box>\n ) : null}\n {composer ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {composer}\n </Box>\n ) : null}\n </Box>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, chakra, HStack, Icon, IconButton, Spacer, Textarea } from \"@chakra-ui/react\";\nimport { ArrowUp, Paperclip } from \"lucide-react\";\nimport type { FormEvent, ReactNode } from \"react\";\nimport { useState } from \"react\";\n\nimport { Tooltip } from \"../tooltip\";\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityComposerProps extends Omit<HTMLChakraProps<\"form\">, \"onChange\" | \"onSubmit\"> {\n actor?: ActivityActor;\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n variant?: \"standalone\" | \"inline\";\n minRows?: number;\n attachLabel?: string;\n submitLabel?: string;\n actions?: ReactNode;\n onAttach?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n}\n\nexport const ActivityComposer = (props: ActivityComposerProps) => {\n const {\n actor,\n value,\n defaultValue = \"\",\n placeholder = \"Leave a comment...\",\n variant = \"standalone\",\n minRows = variant === \"standalone\" ? 3 : 1,\n attachLabel = \"Attach file\",\n submitLabel = \"Submit comment\",\n actions,\n onAttach,\n onChange,\n onSubmit,\n ...rootProps\n } = props;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value ?? internalValue;\n const isInline = variant === \"inline\";\n const canSubmit = currentValue.trim().length > 0;\n\n const handleChange = (nextValue: string) => {\n if (value === undefined) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n };\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!canSubmit) return;\n\n onSubmit?.(currentValue.trim());\n\n if (value === undefined) {\n setInternalValue(\"\");\n }\n };\n\n return (\n <chakra.form\n width=\"full\"\n background=\"bg\"\n borderWidth={isInline ? \"0\" : \"1px\"}\n borderColor=\"border.muted\"\n borderRadius={isInline ? \"0\" : \"sm\"}\n transition=\"border-color 0.12s ease, box-shadow 0.12s ease\"\n _focusWithin={isInline ? undefined : { borderColor: \"blue.border\", boxShadow: \"mid\" }}\n onSubmit={handleSubmit}\n {...rootProps}\n >\n <HStack alignItems=\"flex-start\" gap=\"xs\" padding={isInline ? \"sm\" : \"md\"}>\n {actor ? <ActivityAvatar actor={actor} /> : null}\n <Box flex=\"1\" minW=\"0\">\n <Textarea\n value={currentValue}\n rows={minRows}\n resize=\"none\"\n border=\"0\"\n padding=\"0\"\n minH={isInline ? \"1.5rem\" : \"4rem\"}\n background=\"transparent\"\n color=\"fg\"\n textStyle=\"label/S/regular\"\n placeholder={placeholder}\n _placeholder={{ color: \"fg.subtle\" }}\n _focus={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n onChange={(event) => handleChange(event.currentTarget.value)}\n />\n <HStack gap=\"2xs\" marginTop={isInline ? \"0\" : \"sm\"}>\n {actions}\n <Spacer />\n <Tooltip content={attachLabel}>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={attachLabel} type=\"button\" onClick={onAttach}>\n <Icon as={Paperclip} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n <Tooltip content={submitLabel}>\n <IconButton size=\"2xs\" variant=\"subtle\" aria-label={submitLabel} type=\"submit\" disabled={!canSubmit}>\n <Icon as={ArrowUp} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </HStack>\n </Box>\n </HStack>\n </chakra.form>\n );\n};\n","import type { TimelineItemProps } from \"@chakra-ui/react\";\nimport { Box, Text, Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityEventProps extends Omit<TimelineItemProps, \"title\"> {\n actor?: ActivityActor;\n icon?: ReactNode;\n iconColor?: string;\n iconBackground?: string;\n timestamp?: ReactNode;\n children: ReactNode;\n}\n\nconst EventSeparator = () => <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />;\n\nexport const ActivityEvent = (props: ActivityEventProps) => {\n const {\n actor,\n icon,\n iconColor = \"fg.muted\",\n iconBackground = \"transparent\",\n timestamp,\n children,\n ...rootProps\n } = props;\n\n return (\n <Timeline.Item gap=\"xs\" minH=\"24px\" paddingX=\"md\" {...rootProps}>\n <Timeline.Connector>\n <Timeline.Separator borderColor=\"border.muted\" />\n <Timeline.Indicator outline=\"none\" shadow=\"none\" border=\"none\" background=\"transparent\">\n <ActivityAvatar actor={actor} icon={icon} color={iconColor} background={iconBackground} />\n </Timeline.Indicator>\n </Timeline.Connector>\n <Timeline.Content gap=\"0\" paddingBottom=\"xs\" minW=\"0\">\n <Timeline.Title\n marginTop=\"0\"\n gap=\"xs\"\n minW=\"0\"\n fontWeight=\"normal\"\n textStyle=\"label/S/regular\"\n color=\"fg.muted\"\n >\n {actor ? (\n <Text as=\"span\" color=\"fg\" fontWeight=\"500\" flexShrink={0}>\n {actor.name}\n </Text>\n ) : null}\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" gap=\"2xs\" minW=\"0\" flexWrap=\"wrap\">\n {children}\n </Box>\n {timestamp ? (\n <>\n <EventSeparator />\n <Text as=\"span\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n </Timeline.Title>\n </Timeline.Content>\n </Timeline.Item>\n );\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityRootProps extends StackProps {\n children: ReactNode;\n}\n\nexport interface ActivityHeaderProps extends Omit<StackProps, \"title\"> {\n title?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityFeedProps extends StackProps {\n children: ReactNode;\n}\n\nexport const ActivityRoot = (props: ActivityRootProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack width=\"full\" gap=\"md\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n\nexport const ActivityHeader = (props: ActivityHeaderProps) => {\n const { title = \"Activity\", actions, ...rootProps } = props;\n\n return (\n <HStack alignItems=\"center\" justifyContent=\"space-between\" gap=\"md\" {...rootProps}>\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {title}\n </Text>\n {actions ? <HStack gap=\"xs\">{actions}</HStack> : null}\n </HStack>\n );\n};\n\nexport const ActivityFeed = (props: ActivityFeedProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack gap=\"md\" width=\"full\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n","import type { TimelineRootProps } from \"@chakra-ui/react\";\nimport { Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityTimelineProps extends TimelineRootProps {\n children: ReactNode;\n}\n\nexport const ActivityTimeline = (props: ActivityTimelineProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Timeline.Root size=\"sm\" variant=\"plain\" width=\"full\" css={{ \"--timeline-indicator-size\": \"18px\" }} {...rootProps}>\n {children}\n </Timeline.Root>\n );\n};\n","import { ActivityAvatar } from \"./activity-avatar\";\nimport { ActivityComment, ActivityReply } from \"./activity-comment\";\nimport { ActivityComposer } from \"./activity-composer\";\nimport { ActivityEvent } from \"./activity-event\";\nimport { ActivityFeed, ActivityHeader, ActivityRoot } from \"./activity-root\";\nimport { ActivityTimeline } from \"./activity-timeline\";\n\nexport type { ActivityActor } from \"./activity.types\";\nexport type { ActivityAvatarProps } from \"./activity-avatar\";\nexport type { ActivityCommentProps, ActivityReplyProps } from \"./activity-comment\";\nexport type { ActivityComposerProps } from \"./activity-composer\";\nexport type { ActivityEventProps } from \"./activity-event\";\nexport type { ActivityFeedProps, ActivityHeaderProps, ActivityRootProps } from \"./activity-root\";\nexport type { ActivityTimelineProps } from \"./activity-timeline\";\n\nexport {\n ActivityAvatar,\n ActivityComment,\n ActivityComposer,\n ActivityEvent,\n ActivityFeed,\n ActivityHeader,\n ActivityReply,\n ActivityRoot,\n ActivityTimeline,\n};\n\nexport const Activity = {\n Root: ActivityRoot,\n Header: ActivityHeader,\n Feed: ActivityFeed,\n Timeline: ActivityTimeline,\n Event: ActivityEvent,\n Comment: ActivityComment,\n Reply: ActivityReply,\n Composer: ActivityComposer,\n Avatar: ActivityAvatar,\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nconst DEFAULT_RESIZABLE_MIN_WIDTH = \"20rem\";\n\ninterface AttachedPanelProps extends Omit<FlexProps, \"children\"> {\n children?: ReactNode;\n header?: ReactNode;\n resizable?: boolean;\n}\n\nexport const AttachedPanel = (props: AttachedPanelProps) => {\n const { children, header, width = \"28rem\", minWidth, resizable = false, ...rest } = props;\n const resolvedMinWidth = minWidth ?? (resizable ? DEFAULT_RESIZABLE_MIN_WIDTH : width);\n const resolvedWidth = resizable ? \"full\" : width;\n\n return (\n <Flex\n direction=\"column\"\n position=\"relative\"\n flexShrink={0}\n w={resolvedWidth}\n minW={resolvedMinWidth}\n h=\"100%\"\n borderLeftWidth=\"1px\"\n bg=\"bg\"\n overflow=\"hidden\"\n {...rest}\n >\n {header}\n <Flex flex=\"1\" minH={0} direction=\"column\">\n {children}\n </Flex>\n </Flex>\n );\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport type HeaderVariant = \"main\" | \"narrow\" | \"input\";\n\ninterface HeaderVariantStyles {\n h: string;\n px: string;\n}\n\nconst headerVariantStyles: Record<HeaderVariant, HeaderVariantStyles> = {\n main: {\n h: \"2.5rem\",\n px: \"xs\",\n },\n narrow: {\n h: \"2rem\",\n px: \"xs\",\n },\n input: {\n h: \"3rem\",\n px: \"0\",\n },\n};\n\nexport interface HeaderProps extends Omit<StackProps, \"variant\"> {\n variant?: HeaderVariant;\n}\n\nexport const Header = React.forwardRef<HTMLDivElement, HeaderProps>(function Header(props, ref) {\n const { variant = \"main\", children, ...rest } = props;\n\n return (\n <HStack ref={ref} as=\"header\" alignItems=\"center\" borderWidth=\"0\" {...headerVariantStyles[variant]} {...rest}>\n {children}\n </HStack>\n );\n});\n","import { Box, Icon, Input, InputGroup, Menu, Portal } from \"@chakra-ui/react\";\nimport { ChevronDown, Search } from \"lucide-react\";\nimport { type ElementType, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Header } from \"./header\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport { ScrollArea } from \"./scroll-area\";\n\ntype MenuRootProps = React.ComponentProps<typeof Menu.Root>;\ntype MenuContentProps = React.ComponentProps<typeof Menu.Content>;\n\nexport interface SearchableMenuItem {\n id: string;\n label: string;\n searchText?: string;\n secondaryLabel?: string;\n tooltipLabel?: ReactNode;\n icon?: ElementType;\n variant?: \"default\" | \"compact\";\n isDisabled?: boolean;\n isSelected?: boolean;\n onSelect?: () => void;\n}\n\nexport interface SearchableMenuParentList<T extends SearchableMenuItem> {\n items: T[];\n selectedLabel: string;\n selectedIcon?: ElementType;\n ariaLabel?: string;\n disabled?: boolean;\n emptyState?: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n searchPlaceholder?: string;\n showSearch?: boolean;\n contentTestId?: string;\n onSelect?: (item: T) => void;\n}\n\ninterface ListConfig<T extends SearchableMenuItem> {\n items: T[];\n filterItems: (items: T[], query: string) => T[];\n showSearch: boolean;\n searchPlaceholder: string;\n emptyState: ReactNode;\n contentTestId?: string;\n closeOnSelect: boolean;\n listId: string;\n}\n\ninterface SearchableMenuProps<T extends SearchableMenuItem> {\n trigger: ReactNode;\n items: T[];\n searchPlaceholder: string;\n emptyState: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n listId?: string;\n header?: ReactNode;\n width?: MenuContentProps[\"width\"];\n maxListHeight?: string;\n showSearch?: boolean;\n closeOnSelect?: MenuRootProps[\"closeOnSelect\"];\n lazyMount?: MenuRootProps[\"lazyMount\"];\n open?: MenuRootProps[\"open\"];\n positioning?: MenuRootProps[\"positioning\"];\n onOpenChange?: MenuRootProps[\"onOpenChange\"];\n onFocusOutside?: MenuRootProps[\"onFocusOutside\"];\n contentTestId?: string;\n portalled?: boolean;\n parentList?: SearchableMenuParentList<T>;\n}\n\nexport const filterSearchableMenuItems = <T extends SearchableMenuItem>(items: T[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return items;\n }\n\n return items.filter((item) => {\n const content = [item.label, item.searchText].filter(Boolean).join(\" \").toLowerCase();\n return content.includes(normalizedQuery);\n });\n};\n\nexport const shouldResetSearchableMenuQuery = (currentListId?: string, nextListId?: string) => {\n if (!currentListId || !nextListId) {\n return false;\n }\n\n return currentListId !== nextListId;\n};\n\nexport const resolveActiveListConfig = <T extends SearchableMenuItem>(\n isShowingParent: boolean,\n parentList: SearchableMenuParentList<T> | undefined,\n childConfig: ListConfig<T>,\n): ListConfig<T> => {\n if (!isShowingParent || !parentList) {\n return childConfig;\n }\n\n return {\n items: parentList.items,\n filterItems: parentList.filterItems ?? childConfig.filterItems,\n showSearch: parentList.showSearch ?? childConfig.showSearch,\n searchPlaceholder: parentList.searchPlaceholder ?? childConfig.searchPlaceholder,\n emptyState: parentList.emptyState ?? childConfig.emptyState,\n contentTestId: parentList.contentTestId ?? childConfig.contentTestId,\n closeOnSelect: false,\n listId: \"parent\",\n };\n};\n\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nexport const SearchableMenu = <T extends SearchableMenuItem>(props: SearchableMenuProps<T>) => {\n const {\n trigger,\n items,\n searchPlaceholder,\n emptyState,\n filterItems = filterSearchableMenuItems,\n listId,\n header,\n width = \"260px\",\n maxListHeight = \"18rem\",\n showSearch = true,\n closeOnSelect = true,\n lazyMount = false,\n open,\n positioning,\n onOpenChange,\n onFocusOutside,\n contentTestId,\n portalled = true,\n parentList,\n } = props;\n const hasParentList = Boolean(parentList);\n const [internalOpen, setInternalOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeList, setActiveList] = useState<\"child\" | \"parent\">(\"child\");\n const inputRef = useRef<HTMLInputElement>(null);\n const isOpen = open ?? internalOpen;\n const isShowingParent = hasParentList && activeList === \"parent\";\n\n const childConfig: ListConfig<T> = {\n items,\n filterItems,\n showSearch,\n searchPlaceholder,\n emptyState,\n contentTestId,\n closeOnSelect,\n listId: hasParentList ? \"child\" : (listId ?? \"\"),\n };\n\n const config = resolveActiveListConfig(isShowingParent, parentList, childConfig);\n const filteredItems = config.filterItems(config.items, query);\n const previousListIdRef = useRef(config.listId);\n\n useEffect(() => {\n if (!isOpen) {\n previousListIdRef.current = config.listId;\n return;\n }\n\n if (shouldResetSearchableMenuQuery(previousListIdRef.current, config.listId)) {\n setQuery(\"\");\n }\n\n previousListIdRef.current = config.listId;\n }, [isOpen, config.listId]);\n\n useEffect(() => {\n if (!isOpen || !config.showSearch) {\n return;\n }\n\n const timeout = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(timeout);\n }, [isOpen, config.showSearch]);\n\n const handleOpenChange: NonNullable<MenuRootProps[\"onOpenChange\"]> = (details) => {\n if (open === undefined) {\n setInternalOpen(details.open);\n }\n\n setQuery(\"\");\n\n if (details.open && hasParentList) {\n setActiveList(\"child\");\n }\n\n onOpenChange?.(details);\n };\n\n const handleMenuItemSelect = (details: { value: string }) => {\n if (!isShowingParent || !parentList) return;\n\n const item = parentList.items.find((i) => i.id === details.value);\n if (!item) return;\n\n parentList.onSelect?.(item);\n setActiveList(\"child\");\n };\n\n const renderIcon = (icon: ElementType | undefined) => (icon ? <Icon as={icon} boxSize=\"14px\" /> : undefined);\n\n const buildRowItem = (item: T): ListRowItem => ({\n id: item.id,\n label: item.label,\n description: item.secondaryLabel,\n icon: renderIcon(item.icon),\n disabled: item.isDisabled,\n tooltip: item.tooltipLabel,\n });\n\n const parentListHeader = parentList ? (\n <Header\n as=\"div\"\n role=\"button\"\n aria-label={parentList.ariaLabel}\n aria-disabled={parentList.disabled || undefined}\n tabIndex={parentList.disabled ? -1 : 0}\n variant=\"narrow\"\n px=\"0\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n flexShrink={0}\n onPointerDownCapture={(event) => event.stopPropagation()}\n onClickCapture={(event) => {\n event.stopPropagation();\n if (parentList.disabled) return;\n setActiveList((current) => (current === \"child\" ? \"parent\" : \"child\"));\n }}\n >\n <ListRow\n variant=\"compact\"\n id=\"__parent-toggle\"\n label={parentList.selectedLabel}\n icon={renderIcon(parentList.selectedIcon)}\n disabled={parentList.disabled}\n endContent={parentList.disabled ? undefined : <Icon as={ChevronDown} boxSize=\"14px\" />}\n />\n </Header>\n ) : null;\n\n const resolvedHeader = parentList ? parentListHeader : header;\n const shouldShowSeparator = Boolean(resolvedHeader) && !config.showSearch;\n\n const searchInput = config.showSearch ? (\n <Header variant=\"input\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" flexShrink={0}>\n <InputGroup startElement={<Search size={14} />} width=\"full\">\n <Input\n ref={inputRef}\n borderWidth=\"0\"\n borderRadius=\"0\"\n height=\"full\"\n value={query}\n placeholder={config.searchPlaceholder}\n aria-label={config.searchPlaceholder}\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputBorderProps}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => event.stopPropagation()}\n />\n </InputGroup>\n </Header>\n ) : null;\n\n return (\n <Menu.Root\n lazyMount={lazyMount}\n closeOnSelect={config.closeOnSelect}\n open={open}\n positioning={positioning}\n onOpenChange={handleOpenChange}\n onFocusOutside={onFocusOutside}\n onSelect={hasParentList ? handleMenuItemSelect : undefined}\n >\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n <Portal disabled={!portalled}>\n <Menu.Positioner>\n <Menu.Content w={width} bg=\"bg\" gap=\"0\" p=\"0\" zIndex=\"popover\">\n {resolvedHeader}\n {searchInput}\n {shouldShowSeparator ? <Menu.Separator margin=\"0\" /> : null}\n <ScrollArea\n maxH={maxListHeight}\n data-testid={config.contentTestId}\n viewportProps={{ overscrollBehavior: \"contain\" }}\n p=\"0\"\n gap=\"0\"\n >\n {filteredItems.length > 0\n ? filteredItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.isDisabled} onClick={item.onSelect} asChild>\n <Box\n bg=\"transparent\"\n h=\"auto\"\n p=\"0\"\n _hover={{ bg: \"transparent\" }}\n _focus={{ bg: \"transparent\" }}\n _active={{ bg: \"transparent\" }}\n >\n <ListRow\n asChild\n {...buildRowItem(item)}\n variant={item.variant ?? \"compact\"}\n isSelected={item.isSelected}\n />\n </Box>\n </Menu.Item>\n ))\n : config.emptyState}\n </ScrollArea>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { IconButton, Menu } from \"@chakra-ui/react\";\nimport { SearchableMenu } from \"../searchable-menu\";\nimport { ListRow } from \"./list-row\";\nimport type { ListRowAction } from \"./list-row.types\";\n\ninterface SearchableActionMenuProps {\n action: ListRowAction;\n}\n\nexport const SearchableActionMenu = (props: SearchableActionMenuProps) => {\n const { action } = props;\n const items = (action.menuItems ?? []).map((item) => ({\n id: item.id,\n label: item.label,\n searchText: [item.label, item.description].filter(Boolean).join(\" \"),\n tooltipLabel: item.description,\n variant: \"compact\" as const,\n onSelect: () => item.onAction?.(),\n }));\n\n return (\n <SearchableMenu\n trigger={\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n }\n items={items}\n searchPlaceholder={action.searchPlaceholder ?? \"Search...\"}\n emptyState={\n <Menu.Item value=\"empty\" asChild>\n <ListRow asChild variant=\"compact\" label={action.emptyMenuLabel ?? \"No results found\"} disabled />\n </Menu.Item>\n }\n onFocusOutside={(event) => event.preventDefault()}\n />\n );\n};\n","import { Box, HStack, IconButton, Menu } from \"@chakra-ui/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowAction } from \"./list-row.types\";\nimport { SearchableActionMenu } from \"./searchable-action-menu\";\n\ninterface RowActionsProps {\n actions: ListRowAction[];\n context: { sectionId?: string; nodeId?: string };\n}\n\nconst keyedTooltip = (action: ListRowAction, child: ReactElement) => {\n if (action.tooltip) {\n return (\n <Tooltip key={action.id} content={action.tooltip} openDelay={300}>\n {child}\n </Tooltip>\n );\n }\n return <Fragment key={action.id}>{child}</Fragment>;\n};\n\nexport const RowActions = (props: RowActionsProps) => {\n const { actions, context } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n\n if (action.menuItems && action.menuItems.length > 0) {\n return keyedTooltip(\n action,\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Tooltip key={item.id} content={item.description} disabled={!item.description} openDelay={300}>\n <Menu.Item\n value={item.id}\n disabled={item.disabled || item.readOnly}\n onClick={() => {\n if (!item.readOnly) item.onAction?.();\n }}\n >\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\">\n <HStack gap=\"2\" minW=\"0\">\n {item.icon ? <Box>{item.icon as never}</Box> : null}\n <Box minW=\"0\">{item.label}</Box>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n </Tooltip>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>,\n );\n }\n\n return keyedTooltip(\n action,\n <IconButton\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.(context);\n }}\n >\n {action.icon}\n </IconButton>,\n );\n })}\n </HStack>\n );\n};\n","import { Box, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowItem, ListRowProps, RowContentProps } from \"./list-row.types\";\nimport { RowActions } from \"./list-row-actions\";\n\nconst RowContent = (props: RowContentProps) => {\n const { item, isExpanded, showChevron, isDisabled, variant, tone } = props;\n const isDenseVariant = variant === \"compact\" || variant === \"tree\";\n const labelTextStyle = isDenseVariant ? \"label/S/regular\" : \"label/M/regular\";\n const descriptionTextStyle = isDenseVariant ? \"label/XS\" : \"label/S/regular\";\n const descriptionMarginLeft = isDenseVariant ? \"0\" : \"2px\";\n\n const labelColor = (() => {\n if (isDisabled) return \"fg.muted\";\n if (tone === \"danger\") return \"red.500\";\n return \"fg\";\n })();\n const iconColor = item.iconColor ?? (tone === \"danger\" ? \"red.500\" : \"fg.muted\");\n const descriptionColor = tone === \"danger\" ? \"red.400\" : \"fg.menu-item.secondary\";\n\n return (\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" overflow=\"hidden\" alignItems=\"center\">\n {showChevron ? (\n <Box color=\"fg.muted\" flexShrink={0} display=\"flex\" alignItems=\"center\">\n <Icon\n as={ChevronRight}\n boxSize=\"12px\"\n transform={isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 120ms ease\"\n />\n </Box>\n ) : null}\n <Stack gap=\"2xs\" minW=\"0\" flex=\"1\">\n <HStack gap=\"2\" minW=\"0\" alignItems=\"center\">\n {item.icon ? (\n <Box\n color={iconColor}\n flexShrink={0}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n boxSize=\"14px\"\n fontSize=\"14px\"\n lineHeight=\"1\"\n css={{ \"& > svg\": { width: \"14px\", height: \"14px\" } }}\n >\n {item.icon}\n </Box>\n ) : null}\n {item.indicator ? (\n <Tooltip content={item.indicator.tooltip} disabled={!item.indicator.tooltip} openDelay={300}>\n <Box color={item.indicator.color ?? \"fg.muted\"} flexShrink={0}>\n {item.indicator.icon}\n </Box>\n </Tooltip>\n ) : null}\n {typeof item.label === \"string\" ? (\n <Text textStyle={labelTextStyle} color={labelColor} truncate>\n {item.label}\n </Text>\n ) : (\n <Box minW=\"0\" maxW=\"full\" overflow=\"hidden\" color={labelColor}>\n {item.label}\n </Box>\n )}\n </HStack>\n {item.description ? (\n typeof item.description === \"string\" ? (\n <Text ml={descriptionMarginLeft} textStyle={descriptionTextStyle} color={descriptionColor} truncate>\n {item.description}\n </Text>\n ) : (\n <Box ml={descriptionMarginLeft} minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {item.description}\n </Box>\n )\n ) : null}\n </Stack>\n </HStack>\n );\n};\n\nexport const ListRowContent = (props: {\n item: ListRowItem;\n isExpanded: boolean;\n showChevron: boolean;\n isDisabled: boolean;\n tone: ListRowProps[\"tone\"];\n variant: ListRowProps[\"variant\"];\n}) => {\n const { item, isDisabled, isExpanded, showChevron, tone = \"default\", variant = \"default\" } = props;\n\n return (\n <>\n <RowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n />\n {item.endContent ? (\n <Box flexShrink={0} color=\"fg.muted\" display=\"flex\" alignItems=\"center\">\n {item.endContent}\n </Box>\n ) : null}\n {item.actions && item.actions.length > 0 ? (\n <RowActions actions={item.actions} context={{ nodeId: item.id }} />\n ) : null}\n </>\n );\n};\n","import { Box, HStack, Icon, Menu, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport type { ReactElement } from \"react\";\nimport type { ListRowActionMenuItem, ListRowMenuPlacement } from \"./list-row.types\";\n\ninterface ListRowMenuProps {\n items: ListRowActionMenuItem[];\n open: boolean;\n placement?: ListRowMenuPlacement;\n children: ReactElement;\n onOpenChange: (open: boolean) => void;\n onSelect: (item: ListRowActionMenuItem) => void;\n}\n\nconst ListRowMenuItemIcon = (props: { item: ListRowActionMenuItem }) => {\n const { item } = props;\n if (!item.icon) return null;\n\n return (\n <Box color=\"fg.muted\" flexShrink={0} display=\"inline-flex\">\n {typeof item.icon === \"function\" ? <Icon as={item.icon} boxSize=\"14px\" /> : item.icon}\n </Box>\n );\n};\n\nexport const ListRowMenu = (props: ListRowMenuProps) => {\n const { children, items, onOpenChange, onSelect, open, placement = \"right-start\" } = props;\n\n return (\n <Menu.Root\n open={open}\n positioning={{ placement, offset: { mainAxis: 4 } }}\n onOpenChange={(details) => onOpenChange(details.open)}\n >\n <Menu.Trigger asChild>{children}</Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"200px\" bg=\"bg\">\n {items.map((item) => (\n <Menu.Item\n key={item.id}\n value={item.id}\n disabled={item.disabled || item.readOnly}\n _disabled={item.readOnly ? { opacity: 1, cursor: \"default\" } : undefined}\n onClick={() => {\n if (!item.readOnly) onSelect(item);\n }}\n >\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\" alignItems=\"center\">\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" alignItems={item.description ? \"flex-start\" : \"center\"}>\n <ListRowMenuItemIcon item={item} />\n <Stack gap=\"0\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" truncate>\n {item.label}\n </Text>\n {item.description ? (\n <Text textStyle=\"label/XS\" color=\"fg.menu-item.secondary\" truncate>\n {item.description}\n </Text>\n ) : null}\n </Stack>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { chakra, Icon } from \"@chakra-ui/react\";\nimport { forwardRef, type ReactElement, type MouseEvent as ReactMouseEvent, useState } from \"react\";\nimport { ResourceContextMenu } from \"../resource-context-menu\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowItem, ListRowProps } from \"./list-row.types\";\nimport { ListRowContent } from \"./list-row-content\";\nimport { ListRowMenu } from \"./list-row-menu\";\n\nconst computePaddingLeft = (depth: number) => {\n if (depth <= 0) return undefined;\n return `calc(var(--chakra-spacing-1) + ${depth} * 12px)`;\n};\n\nconst resolveListRowSizing = (variant: ListRowProps[\"variant\"], hasDescription: boolean) => {\n if (variant === \"compact\" && !hasDescription) return { rowHeight: \"1.75rem\", minHeight: undefined };\n\n return {\n rowHeight: \"auto\",\n minHeight: variant === \"default\" ? \"2.25rem\" : \"1.75rem\",\n };\n};\n\nconst createRowBackgroundProps = (input: {\n isSelected: boolean;\n selectedBg: ListRowProps[\"selectedBg\"];\n hoverBg: ListRowProps[\"hoverBg\"];\n tone: NonNullable<ListRowProps[\"tone\"]>;\n}) => ({\n bg: input.isSelected ? input.selectedBg : \"transparent\",\n _hover:\n input.tone === \"danger\" ? { boxShadow: \"inset 0 0 0 1px var(--chakra-colors-red-500)\" } : { bg: input.hoverBg },\n});\n\nexport const ListRow = forwardRef<HTMLElement, ListRowProps>((props, ref) => {\n const {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n depth = 0,\n isSelected = false,\n isExpanded = false,\n showExpandToggle = false,\n variant = \"default\",\n tone = \"default\",\n selectedBg = \"bg.menu-item.selected\",\n hoverBg = \"bg.menu-item.hover\",\n asChild = false,\n className,\n onToggleExpand,\n onPointerMove,\n draggable,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n onClick,\n ...rootProps\n } = props;\n const [menuOpen, setMenuOpen] = useState(false);\n\n const item: ListRowItem = {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n };\n\n const dragProps = { draggable, onDragStart, onDragOver, onDragEnd, onDrop };\n\n const hasChildren = (item.children?.length ?? 0) > 0 || item.isContainer === true;\n const hasMenuItems = (item.menuItems?.length ?? 0) > 0;\n const showChevron = showExpandToggle && hasChildren;\n const isDisabled = item.disabled === true;\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasMenuItems) return;\n if (showChevron) {\n onToggleExpand?.();\n return;\n }\n if (onActivate) {\n onActivate();\n return;\n }\n item.onActivate?.();\n };\n\n const handleClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n handleActivate();\n };\n\n const handleMenuClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n setMenuOpen((current) => !current);\n };\n\n const paddingLeft = computePaddingLeft(depth);\n const verticalPadding = variant === \"default\" ? \"xs\" : \"2xs\";\n const hasDescription = item.description !== undefined;\n const activationProps = hasMenuItems ? { onClick: handleMenuClick } : { onClick: handleClick };\n const { rowHeight, minHeight } = resolveListRowSizing(variant, hasDescription);\n\n const rowProps = {\n ...rootProps,\n role: hasMenuItems ? (\"button\" as const) : (\"option\" as const),\n \"aria-selected\": isSelected,\n \"aria-expanded\": showChevron ? isExpanded : undefined,\n className: className ? `group ${className}` : \"group\",\n width: \"full\",\n minWidth: \"0\",\n maxWidth: \"full\",\n height: rowHeight,\n minHeight,\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"space-between\" as const,\n gap: \"xs\" as const,\n px: \"sm\",\n py: verticalPadding,\n pl: paddingLeft,\n borderRadius: \"0\" as const,\n ...createRowBackgroundProps({ isSelected, selectedBg, hoverBg, tone }),\n cursor: isDisabled ? (\"not-allowed\" as const) : (\"pointer\" as const),\n overflow: \"hidden\" as const,\n textAlign: \"left\" as const,\n color: \"inherit\",\n textDecoration: \"none\",\n };\n\n const content = (\n <ListRowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n />\n );\n\n const wrapWithContextMenu = (children: ReactElement) => {\n if (!item.contextMenuItems || item.contextMenuItems.length === 0) return children;\n\n const contextActions = item.contextMenuItems.map((entry) => ({\n key: entry.id,\n label: entry.label,\n icon: typeof entry.icon === \"function\" ? <Icon as={entry.icon} boxSize=\"16px\" /> : entry.icon,\n endContent: entry.endContent,\n isDisabled: entry.disabled,\n onClick: () => entry.onAction?.(),\n }));\n\n return (\n <ResourceContextMenu actions={contextActions} contentMinWidth=\"180px\">\n {children}\n </ResourceContextMenu>\n );\n };\n\n const wrapWithMenu = (children: ReactElement) => {\n if (!item.menuItems || item.menuItems.length === 0) return children;\n\n return (\n <ListRowMenu\n items={item.menuItems}\n open={menuOpen}\n placement={item.menuPlacement}\n onOpenChange={setMenuOpen}\n onSelect={(menuItem) => {\n setMenuOpen(false);\n menuItem.onAction?.();\n }}\n >\n {children}\n </ListRowMenu>\n );\n };\n\n const wrapWithTooltip = (children: ReactElement) => {\n if (!item.tooltip) return children;\n return <Tooltip content={item.tooltip}>{children}</Tooltip>;\n };\n\n const wrap = (children: ReactElement) =>\n hasMenuItems ? wrapWithMenu(children) : wrapWithContextMenu(wrapWithTooltip(children));\n\n if (asChild) {\n return wrap(\n <chakra.div ref={ref} {...rowProps} {...dragProps} {...activationProps} onPointerMove={onPointerMove}>\n {content}\n </chakra.div>,\n );\n }\n if (item.href && !showChevron && !isDisabled && !hasMenuItems) {\n return wrap(\n <chakra.a\n ref={ref}\n href={item.href}\n {...(rowProps as object)}\n {...dragProps}\n onClick={handleClick}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.a>,\n );\n }\n\n return wrap(\n <chakra.button\n ref={ref}\n type=\"button\"\n disabled={isDisabled}\n {...(rowProps as object)}\n {...dragProps}\n {...activationProps}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.button>,\n );\n});\n","import { Menu, Portal } from \"@chakra-ui/react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\n\ntype MenuRootProps = ComponentProps<typeof Menu.Root>;\n\nexport interface ResourceContextAction {\n key: string;\n label: string;\n onClick: () => Promise<void> | void;\n isDisabled?: boolean;\n icon?: ReactNode;\n endContent?: ReactNode;\n}\n\ninterface ResourceContextMenuProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n contentMinWidth?: string;\n contentBackground?: string;\n positioning?: MenuRootProps[\"positioning\"];\n /** Keep the menu open after selecting an item — useful for menus that toggle several entries in one pass. */\n closeOnSelect?: MenuRootProps[\"closeOnSelect\"];\n}\n\nexport const ResourceContextMenu = (props: ResourceContextMenuProps) => {\n const {\n actions,\n children,\n contentMinWidth = \"220px\",\n contentBackground = \"bg\",\n positioning = { placement: \"bottom-start\" },\n closeOnSelect,\n } = props;\n\n if (actions.length === 0) {\n return <>{children}</>;\n }\n\n return (\n <Menu.Root positioning={positioning} closeOnSelect={closeOnSelect}>\n <Menu.ContextTrigger asChild>{children}</Menu.ContextTrigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW={contentMinWidth} bg={contentBackground}>\n {actions.map((action) => (\n <Menu.Item key={action.key} value={action.key} disabled={action.isDisabled} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n label={action.label}\n icon={action.icon}\n endContent={action.endContent}\n disabled={action.isDisabled}\n onActivate={action.onClick}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Breadcrumb as ChakraBreadcrumb, type SystemStyleObject } from \"@chakra-ui/react\";\nimport * as React from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"./resource-context-menu\";\n\nexport interface BreadcrumbItem {\n title: React.ReactNode;\n url?: string;\n onClick?: () => void;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface BreadcrumbLinkProps {\n to: string;\n children: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends ChakraBreadcrumb.RootProps {\n separator?: React.ReactNode;\n separatorGap?: SystemStyleObject[\"gap\"];\n items: BreadcrumbItem[];\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\nconst linkProps = {\n alignItems: \"center\",\n display: \"inline-flex\",\n gap: \"2xs\",\n minW: \"0\",\n maxW: \"100%\",\n overflow: \"hidden\",\n outline: \"none\",\n boxShadow: \"none\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n _active: { outline: \"none\", boxShadow: \"none\" },\n _focus: { outline: \"none\", boxShadow: \"none\" },\n _focusVisible: { outline: \"none\", boxShadow: \"none\" },\n} as const;\n\nconst staticProps = {\n ...linkProps,\n color: \"fg\",\n cursor: \"default\",\n textDecoration: \"none\",\n _hover: { textDecoration: \"none\" },\n} as const;\n\ninterface BreadcrumbItemContentProps {\n item: BreadcrumbItem;\n isCurrent: boolean;\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\ninterface BreadcrumbSeparatorProps {\n separator?: React.ReactNode;\n}\n\nconst isInteractiveItem = (item: BreadcrumbItem) => Boolean(item.url || item.onClick);\n\nconst BreadcrumbItemLink = (props: BreadcrumbItemContentProps) => {\n const { item, isCurrent, linkComponent: LinkComponent } = props;\n\n if (isCurrent && !isInteractiveItem(item)) {\n return <ChakraBreadcrumb.CurrentLink {...staticProps}>{item.title}</ChakraBreadcrumb.CurrentLink>;\n }\n\n if (item.url && LinkComponent) {\n return (\n <ChakraBreadcrumb.Link asChild {...linkProps}>\n <LinkComponent to={item.url}>{item.title}</LinkComponent>\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.url) {\n return (\n <ChakraBreadcrumb.Link href={item.url} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.onClick) {\n return (\n <ChakraBreadcrumb.Link as=\"button\" type=\"button\" onClick={item.onClick} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n return (\n <ChakraBreadcrumb.Link as=\"span\" {...staticProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n};\n\nconst BreadcrumbItemContent = (props: BreadcrumbItemContentProps) => {\n const { item } = props;\n const content = <BreadcrumbItemLink {...props} />;\n\n if (!item.contextMenuActions?.length) return content;\n\n return (\n <ResourceContextMenu actions={item.contextMenuActions} positioning={{ placement: \"bottom-start\" }}>\n {content}\n </ResourceContextMenu>\n );\n};\n\nconst BreadcrumbSeparator = (props: BreadcrumbSeparatorProps) => {\n const { separator } = props;\n\n if (separator === undefined) {\n return <ChakraBreadcrumb.Separator flexShrink={0} />;\n }\n\n return <ChakraBreadcrumb.Separator flexShrink={0}>{separator}</ChakraBreadcrumb.Separator>;\n};\n\nexport const Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(function BreadcrumbRoot(props, ref) {\n const { separator, separatorGap, items, linkComponent: LinkComponent, ...rest } = props;\n\n return (\n <ChakraBreadcrumb.Root ref={ref} {...rest}>\n <ChakraBreadcrumb.List gap={separatorGap} flexWrap=\"nowrap\" minW=\"0\" maxW=\"100%\" overflow=\"hidden\">\n {items.map((item, index) => {\n const isCurrent = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n <ChakraBreadcrumb.Item minW=\"0\" flexShrink={isCurrent ? 1 : 0} overflow=\"hidden\">\n <BreadcrumbItemContent item={item} isCurrent={isCurrent} linkComponent={LinkComponent} />\n </ChakraBreadcrumb.Item>\n {isCurrent ? null : <BreadcrumbSeparator separator={separator} />}\n </React.Fragment>\n );\n })}\n </ChakraBreadcrumb.List>\n </ChakraBreadcrumb.Root>\n );\n});\n","import { chakra, type HTMLChakraProps, IconButton, type IconButtonProps } from \"@chakra-ui/react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Tooltip } from \"./tooltip\";\n\ntype BubbleButtonStyleProps = \"boxShadow\" | \"transition\" | \"_hover\" | \"_active\" | \"borderColor\" | \"borderWidth\";\n\nexport interface BubbleButtonProps extends Omit<IconButtonProps, BubbleButtonStyleProps> {\n containerProps?: HTMLChakraProps<\"div\">;\n isOpen?: boolean;\n tooltip?: ReactNode;\n}\n\nexport const BubbleButton = forwardRef<HTMLButtonElement, BubbleButtonProps>(function BubbleButton(props, ref) {\n const { children, containerProps, isOpen = false, tooltip, ...rest } = props;\n const button = (\n <IconButton\n ref={ref}\n rounded=\"full\"\n size=\"lg\"\n borderWidth=\"1px\"\n boxShadow={isOpen ? \"none\" : \"mid\"}\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: \"border.accent\",\n boxShadow: \"mid\",\n }}\n _active={{ boxShadow: isOpen ? \"none\" : \"mid\" }}\n {...rest}\n >\n {children}\n </IconButton>\n );\n\n return (\n <chakra.div position=\"fixed\" bottom=\"6\" right=\"6\" zIndex=\"docked\" {...containerProps}>\n {tooltip ? <Tooltip content={tooltip}>{button}</Tooltip> : button}\n </chakra.div>\n );\n});\n","import { Box, chakra, Flex, HStack, type HTMLChakraProps, IconButton, Portal, Spacer } from \"@chakra-ui/react\";\nimport { Minus, SquareArrowOutUpRight } from \"lucide-react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Header } from \"./header\";\nimport { Tooltip } from \"./tooltip\";\n\nexport interface BubblePanelProps {\n isOpen?: boolean;\n title?: string;\n menu?: ReactNode;\n onClose?: () => void;\n closeLabel?: string;\n onPopOut?: (() => void) | null;\n popOutLabel?: string;\n width?: string;\n height?: string;\n containerProps?: HTMLChakraProps<\"section\">;\n testId?: string;\n \"aria-label\"?: string;\n children?: ReactNode;\n}\n\nexport const BubblePanel = forwardRef<HTMLDivElement, BubblePanelProps>(function BubblePanel(props, ref) {\n const {\n isOpen = false,\n title,\n menu,\n onClose,\n closeLabel,\n onPopOut,\n popOutLabel,\n width = \"28rem\",\n height = \"38rem\",\n containerProps,\n testId,\n \"aria-label\": ariaLabel,\n children,\n } = props;\n\n if (!isOpen) return null;\n\n return (\n <Portal>\n <chakra.section\n ref={ref}\n role=\"dialog\"\n data-testid={testId}\n aria-label={ariaLabel ?? title}\n position=\"fixed\"\n bottom=\"3\"\n right=\"3\"\n w={width}\n maxW=\"calc(100vw - 2rem)\"\n h={height}\n maxH=\"calc(100vh - 2rem)\"\n borderRadius=\"3xl\"\n boxShadow=\"2xl\"\n bg=\"bg\"\n zIndex=\"dropdown\"\n {...containerProps}\n >\n <Flex direction=\"column\" h=\"full\">\n <Header variant=\"main\" gap=\"sm\" flexShrink={0}>\n <HStack gap=\"1\" minW=\"0\">\n {menu}\n </HStack>\n <Spacer />\n <HStack gap=\"1\">\n {onPopOut ? (\n <Tooltip content={popOutLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={popOutLabel} onClick={onPopOut}>\n <SquareArrowOutUpRight size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n {onClose ? (\n <Tooltip content={closeLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={closeLabel} onClick={onClose}>\n <Minus size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </HStack>\n </Header>\n <Box flex=\"1\" minH={0} display=\"flex\" flexDirection=\"column\" gap=\"sm\">\n {children}\n </Box>\n </Flex>\n </chakra.section>\n </Portal>\n );\n});\n","export type ThemePreference = string;\nexport type ThemePreferenceMode = \"light\" | \"dark\";\nexport type ThemePreferenceTokens = Record<string, string>;\n\nexport interface ThemePreferenceOption {\n id: ThemePreference;\n title?: string;\n mode: ThemePreferenceMode;\n tokens?: ThemePreferenceTokens;\n monacoTheme?: unknown;\n}\n\nexport const defaultThemePreferences = [\n { id: \"pstdio-light\", mode: \"light\" },\n { id: \"pstdio-dark\", mode: \"dark\" },\n] satisfies ThemePreferenceOption[];\n\nexport const isThemePreference = (\n value: string | null,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n): value is ThemePreference => typeof value === \"string\" && themePreferences.some((theme) => theme.id === value);\n\nexport const getThemePreferenceMode = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => themePreferences.find((preference) => preference.id === theme)?.mode ?? \"light\";\n\nexport const getThemePreferenceClassName = (theme: ThemePreference) => `theme-${theme}`;\n\nexport const getThemePreferenceClassNames = (\n theme: ThemePreference,\n mode: ThemePreferenceMode = getThemePreferenceMode(theme),\n) => [mode, getThemePreferenceClassName(theme)];\n\nconst THEME_TOKEN_PATHS_ATTRIBUTE = \"data-pstdio-theme-token-paths\";\n\nconst getThemePreferenceCssVariableName = (tokenPath: string) => `--chakra-${tokenPath.replaceAll(\".\", \"-\")}`;\n\nconst removeThemeTokens = (el: HTMLElement, theme?: ThemePreferenceOption) => {\n if (!theme?.tokens) return;\n\n for (const tokenPath of Object.keys(theme.tokens)) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n};\n\nconst removeTrackedThemeTokens = (el: HTMLElement) => {\n const tokenPaths = el.getAttribute(THEME_TOKEN_PATHS_ATTRIBUTE)?.split(\"\\n\").filter(Boolean) ?? [];\n\n for (const tokenPath of tokenPaths) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n};\n\nconst applyThemeTokens = (el: HTMLElement, theme: ThemePreferenceOption) => {\n if (!theme.tokens) {\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n return;\n }\n\n for (const [tokenPath, value] of Object.entries(theme.tokens)) {\n el.style.setProperty(getThemePreferenceCssVariableName(tokenPath), value);\n }\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, Object.keys(theme.tokens).join(\"\\n\"));\n};\n\nexport const applyThemePreference = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof document === \"undefined\") return;\n\n const root = document.documentElement;\n const body = document.body;\n const preference = themePreferences.find((option) => option.id === theme) ?? { id: theme, mode: \"light\" };\n const mode = getThemePreferenceMode(theme, themePreferences);\n\n for (const el of [root, body]) {\n if (!el) continue;\n const previousTheme = el.getAttribute(\"data-theme\");\n const previousPreference = themePreferences.find((option) => option.id === previousTheme);\n\n el.classList.remove(\"light\", \"dark\");\n if (previousTheme) {\n el.classList.remove(getThemePreferenceClassName(previousTheme));\n }\n removeTrackedThemeTokens(el);\n removeThemeTokens(el, previousPreference);\n applyThemeTokens(el, preference);\n el.classList.add(...getThemePreferenceClassNames(theme, mode));\n el.setAttribute(\"data-theme\", theme);\n el.setAttribute(\"data-color-mode\", mode);\n el.style.colorScheme = mode;\n }\n};\n","interface BrowserStorage {\n getItem: (key: string) => string | null;\n removeItem: (key: string) => void;\n setItem: (key: string, value: string) => void;\n}\n\nconst noopStorage = {\n getItem: () => null,\n removeItem: () => {},\n setItem: () => {},\n} satisfies BrowserStorage;\n\nconst readLocalStorage = () => {\n try {\n return globalThis.localStorage;\n } catch {\n return undefined;\n }\n};\n\nexport const createBrowserStorage = (): BrowserStorage => {\n const storage = readLocalStorage();\n if (!storage) return noopStorage;\n\n return {\n getItem(key) {\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n },\n removeItem(key) {\n try {\n storage.removeItem(key);\n } catch {}\n },\n setItem(key, value) {\n try {\n storage.setItem(key, value);\n } catch {}\n },\n };\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from \"react\";\n\nimport {\n applyThemePreference,\n defaultThemePreferences,\n getThemePreferenceMode,\n isThemePreference,\n type ThemePreference,\n type ThemePreferenceMode,\n type ThemePreferenceOption,\n} from \"./apply-theme-preference\";\nimport { createBrowserStorage } from \"./browser-storage\";\n\nconst STORAGE_KEY = \"theme-preference\";\n\nconst ThemePreferenceContext = createContext<ThemePreferenceContextValue | null>(null);\n\ninterface ThemePreferenceContextValue {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (preference: ThemePreference) => void;\n toggleThemePreference: () => void;\n}\n\ninterface ThemePreferenceProviderProps {\n children: ReactNode;\n initialPreference?: ThemePreference;\n themePreferences?: readonly ThemePreferenceOption[];\n}\n\nconst getDefaultThemePreference = (themePreferences: readonly ThemePreferenceOption[], mode: ThemePreferenceMode) =>\n themePreferences.find((preference) => preference.mode === mode)?.id ??\n themePreferences[0]?.id ??\n defaultThemePreferences[0].id;\n\nexport const getInitialThemePreference = (\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof window === \"undefined\") return getDefaultThemePreference(themePreferences, \"light\");\n\n const stored = createBrowserStorage().getItem(STORAGE_KEY);\n if (isThemePreference(stored, themePreferences)) return stored;\n\n const prefersDark =\n typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n return getDefaultThemePreference(themePreferences, prefersDark ? \"dark\" : \"light\");\n};\n\nexport const ThemePreferenceProvider = (props: ThemePreferenceProviderProps) => {\n const { children, themePreferences = defaultThemePreferences } = props;\n const initialPreference = props.initialPreference ?? getInitialThemePreference(themePreferences);\n const [themePreference, setThemePreference] = useState<ThemePreference>(initialPreference);\n\n useEffect(() => {\n if (!isThemePreference(themePreference, themePreferences)) {\n setThemePreference(\n getDefaultThemePreference(themePreferences, getThemePreferenceMode(themePreference, themePreferences)),\n );\n return;\n }\n\n applyThemePreference(themePreference, themePreferences);\n if (typeof window !== \"undefined\") createBrowserStorage().setItem(STORAGE_KEY, themePreference);\n }, [themePreference, themePreferences]);\n\n const toggleThemePreference = () => {\n setThemePreference((prev) => {\n const nextMode = getThemePreferenceMode(prev, themePreferences) === \"dark\" ? \"light\" : \"dark\";\n\n return getDefaultThemePreference(themePreferences, nextMode);\n });\n };\n\n return (\n <ThemePreferenceContext value={{ themePreference, themePreferences, setThemePreference, toggleThemePreference }}>\n {children}\n </ThemePreferenceContext>\n );\n};\n\nexport const useThemePreference = () => {\n const context = useContext(ThemePreferenceContext);\n\n if (!context) {\n throw new Error(\"useThemePreference must be used within a ThemePreferenceProvider\");\n }\n\n return context;\n};\n","import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../theme\";\nimport { useThemePreference } from \"../utils/theme-preference\";\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n} satisfies MonacoThemeData;\n\nconst isMonacoTheme = (value: unknown): value is MonacoThemeData =>\n typeof value === \"object\" && value !== null && \"base\" in value && \"colors\" in value;\n\ntype MonacoApi = {\n editor: {\n defineTheme: (name: string, data: MonacoThemeData) => void;\n setTheme: (name: string) => void;\n };\n};\n\nconst EDITOR_THEME_NAME = \"ps-theme\";\n\nconst useEditorTheme = () => {\n const { themePreference, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference);\n return isMonacoTheme(preference?.monacoTheme) ? preference.monacoTheme : customTheme;\n};\n\nconst useApplyEditorTheme = (editorTheme: MonacoThemeData) => {\n const monacoRef = useRef<MonacoApi | null>(null);\n\n useEffect(() => {\n const monaco = monacoRef.current;\n if (!monaco) return;\n\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n }, [editorTheme]);\n\n return (monaco: MonacoApi) => {\n monacoRef.current = monaco;\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n };\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={EDITOR_THEME_NAME}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={async (editor, monaco) => {\n applyEditorTheme(monaco);\n\n // Add JSX support\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n\n // Format on cmd+s\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n\n // Run format on the initial value\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={EDITOR_THEME_NAME}\n options={options}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(_, monaco) => {\n applyEditorTheme(monaco);\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n }}\n />\n );\n};\n","import { Box, type BoxProps, Text, type TextProps } from \"@chakra-ui/react\";\n\nexport interface ContentPlaceholderProps extends BoxProps {}\n\nexport const contentPlaceholderBackgroundImage = `url(\"data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%239C92AC' fill-opacity='0.2' fillRule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E\")`;\n\nexport const ContentPlaceholder = (props: ContentPlaceholderProps) => (\n <Box\n {...props}\n css={{\n backgroundClip: \"padding-box\",\n backgroundImage: contentPlaceholderBackgroundImage,\n display: \"flex\",\n width: \"100%\",\n }}\n />\n);\n\nexport const Label = (props: TextProps) => (\n <Box p=\"2\">\n <Text color=\"fg.muted\" fontWeight=\"medium\" textStyle=\"sm\" whiteSpace=\"nowrap\" {...props} />\n </Box>\n);\n","import { Grid, GridItem, Icon, IconButton, Popover, Text } from \"@chakra-ui/react\";\nimport {\n AlertTriangle,\n BookOpen,\n Bug,\n ChartColumnIncreasing,\n CheckCircle,\n Circle,\n CircleQuestionMark,\n Clock,\n Code,\n Eye,\n Feather,\n Flag,\n Flame,\n Gauge,\n Layers,\n Lightbulb,\n Scale,\n Shield,\n ShieldAlert,\n Sparkles,\n Star,\n Tag,\n Wrench,\n} from \"lucide-react\";\nimport type { ComponentType } from \"react\";\n\nexport interface IconColorPickerIconOption {\n value: string | null;\n label: string;\n icon: ComponentType;\n}\n\nexport const optionColors = [\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n] as const;\n\nexport const optionIcons = [\n { value: null, label: \"circle\", icon: Circle },\n { value: \"bug\", label: \"bug\", icon: Bug },\n { value: \"sparkles\", label: \"sparkles\", icon: Sparkles },\n { value: \"book-open\", label: \"book open\", icon: BookOpen },\n { value: \"wrench\", label: \"wrench\", icon: Wrench },\n { value: \"gauge\", label: \"gauge\", icon: Gauge },\n { value: \"feather\", label: \"feather\", icon: Feather },\n { value: \"scale\", label: \"scale\", icon: Scale },\n { value: \"layers\", label: \"layers\", icon: Layers },\n { value: \"alert-triangle\", label: \"alert triangle\", icon: AlertTriangle },\n { value: \"star\", label: \"star\", icon: Star },\n { value: \"flag\", label: \"flag\", icon: Flag },\n { value: \"flame\", label: \"flame\", icon: Flame },\n { value: \"lightbulb\", label: \"lightbulb\", icon: Lightbulb },\n { value: \"shield\", label: \"shield\", icon: Shield },\n { value: \"eye\", label: \"eye\", icon: Eye },\n { value: \"clock\", label: \"clock\", icon: Clock },\n { value: \"check-circle\", label: \"check circle\", icon: CheckCircle },\n { value: \"tag\", label: \"tag\", icon: Tag },\n { value: \"code\", label: \"code\", icon: Code },\n { value: \"chart-column-increasing\", label: \"chart column increasing\", icon: ChartColumnIncreasing },\n { value: \"circle-question-mark\", label: \"circle question mark\", icon: CircleQuestionMark },\n { value: \"shield-alert\", label: \"shield alert\", icon: ShieldAlert },\n] satisfies IconColorPickerIconOption[];\n\nexport const getIconComponent = (\n name: string | null | undefined,\n iconOptions: readonly IconColorPickerIconOption[] = optionIcons,\n): ComponentType => {\n const entry = iconOptions.find((icon) => icon.value === (name ?? null));\n return entry?.icon ?? Circle;\n};\n\nexport interface IconColorPickerProps {\n color: string;\n colorOptions?: readonly string[];\n icon?: string | null;\n iconOptions?: readonly IconColorPickerIconOption[];\n onColorChange: (color: string) => void;\n onIconChange?: (icon: string | null) => void;\n disabled?: boolean;\n showIcons?: boolean;\n \"aria-label\"?: string;\n}\n\nexport const IconColorPicker = (props: IconColorPickerProps) => {\n const {\n color,\n colorOptions = optionColors,\n icon,\n iconOptions = optionIcons,\n onColorChange,\n onIconChange,\n disabled,\n showIcons = true,\n \"aria-label\": ariaLabel = \"Pick color and icon\",\n } = props;\n const IconComponent = showIcons ? getIconComponent(icon, iconOptions) : Circle;\n const selectedIcon = icon ?? null;\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" disabled={disabled} aria-label={ariaLabel}>\n <Icon\n as={IconComponent}\n boxSize=\"14px\"\n color={`${color}.500`}\n fill={showIcons ? undefined : `${color}.500`}\n />\n </IconButton>\n </Popover.Trigger>\n <Popover.Positioner>\n <Popover.Content w={showIcons ? \"320px\" : \"220px\"} p=\"sm\" bg=\"bg\">\n <Text textStyle=\"label/S\" mb=\"xs\">\n Color\n </Text>\n <Grid\n templateColumns={showIcons ? \"repeat(10, 1fr)\" : \"repeat(5, 1fr)\"}\n gap=\"2xs\"\n mb={showIcons ? \"md\" : \"0\"}\n >\n {colorOptions.map((optionColor) => (\n <GridItem key={optionColor}>\n <IconButton\n size=\"2xs\"\n variant={optionColor === color ? \"solid\" : \"ghost\"}\n colorPalette={optionColor}\n onClick={() => onColorChange(optionColor)}\n aria-label={optionColor}\n >\n <Icon as={Circle} boxSize=\"14px\" fill={`${optionColor}.500`} color={`${optionColor}.500`} />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n {showIcons ? (\n <>\n <Text textStyle=\"label/S\" mb=\"xs\">\n Icon\n </Text>\n <Grid templateColumns=\"repeat(5, 1fr)\" gap=\"2xs\">\n {iconOptions.map((entry) => (\n <GridItem key={entry.value ?? \"none\"}>\n <IconButton\n size=\"2xs\"\n variant={entry.value === selectedIcon ? \"solid\" : \"ghost\"}\n onClick={() => onIconChange?.(entry.value)}\n aria-label={entry.label}\n >\n <Icon as={entry.icon} boxSize=\"14px\" />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n </>\n ) : null}\n </Popover.Content>\n </Popover.Positioner>\n </Popover.Root>\n );\n};\n","import { Icon } from \"@chakra-ui/react\";\nimport { CircleAlert, CircleCheck, CircleDashed, CirclePause, CircleStop, ClockAlert } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\n\nexport type SessionCompletionStatus =\n | \"in_progress\"\n | \"awaiting_input\"\n | \"queued\"\n | \"completed\"\n | \"failed\"\n | \"cancelled\"\n | \"disconnected\";\n\nexport const resolveSessionIndicatorIcon = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return CircleCheck;\n if (status === \"failed\") return CircleAlert;\n if (status === \"cancelled\") return CircleStop;\n if (status === \"disconnected\") return CirclePause;\n if (status === \"queued\") return ClockAlert;\n return CircleDashed;\n};\n\nexport const resolveSessionIndicatorColor = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return \"fg.success\";\n if (status === \"failed\") return \"fg.error\";\n if (status === \"cancelled\") return \"fg.warning\";\n if (status === \"disconnected\") return \"fg.warning\";\n if (status === \"queued\") return \"fg.info\";\n return \"fg.muted\";\n};\n\ninterface SessionIndicatorProps {\n status?: SessionCompletionStatus;\n boxSize?: ComponentProps<typeof Icon>[\"boxSize\"];\n ariaLabel?: string;\n cursor?: ComponentProps<typeof Icon>[\"cursor\"];\n onClick?: ComponentProps<typeof Icon>[\"onClick\"];\n}\n\nexport const SessionIndicator = (props: SessionIndicatorProps) => {\n const { status, boxSize = \"14px\", ariaLabel = \"Session status\", cursor, onClick } = props;\n\n return (\n <Icon\n as={resolveSessionIndicatorIcon(status)}\n boxSize={boxSize}\n color={resolveSessionIndicatorColor(status)}\n aria-label={ariaLabel}\n cursor={cursor}\n onClick={onClick}\n />\n );\n};\n","import { Box, HStack, Icon, Spinner, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, GitBranchIcon, GitCommitIcon } from \"lucide-react\";\nimport type { MouseEvent } from \"react\";\nimport { DiffBubble } from \"@/components/diff-viewer/diff-bubble\";\nimport { type SessionCompletionStatus, SessionIndicator } from \"@/components/session-indicator\";\nimport { Tooltip } from \"@/components/tooltip\";\n\ninterface WorkspaceAttemptStatus {\n name: string;\n color: string;\n description?: string | null;\n}\n\nconst ATTEMPT_STATUS_COLOR_ALIASES: Record<string, string> = {\n amber: \"yellow\",\n};\n\nconst CHAKRA_COLOR_PALETTES = new Set([\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n]);\n\nexport interface WorkspaceBadgeProps {\n workspaceType: \"worktree\" | \"current_branch\";\n initializing?: boolean;\n label?: string;\n shorthand?: string;\n attemptStatus?: WorkspaceAttemptStatus;\n sessionStatus?: SessionCompletionStatus;\n showLeadingSessionIndicator?: boolean;\n diffAdditions?: number;\n diffDeletions?: number;\n hasMultipleWorkspaces?: boolean;\n onClick?: () => void;\n onDropdownClick?: () => void;\n onSessionIndicatorClick?: () => void;\n}\n\nconst resolveWorkspaceIcon = (workspaceType: WorkspaceBadgeProps[\"workspaceType\"]) => {\n if (workspaceType === \"current_branch\") {\n return GitCommitIcon;\n }\n\n return GitBranchIcon;\n};\n\nconst resolveAttemptStatusColor = (color: string) => {\n if (color.startsWith(\"#\") || color.startsWith(\"rgb\") || color.startsWith(\"hsl\") || color.startsWith(\"var(\")) {\n return color;\n }\n\n const resolvedColor = ATTEMPT_STATUS_COLOR_ALIASES[color] ?? color;\n if (CHAKRA_COLOR_PALETTES.has(resolvedColor)) {\n return `var(--chakra-colors-${resolvedColor}-500)`;\n }\n\n return resolvedColor;\n};\n\nconst buildAttemptStatusTooltip = (attemptStatus: WorkspaceAttemptStatus | undefined) => {\n if (!attemptStatus) return null;\n\n if (attemptStatus.description) {\n return `${attemptStatus.name}: ${attemptStatus.description}`;\n }\n\n return attemptStatus.name;\n};\n\nconst handleIconClick = (event: MouseEvent<SVGSVGElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst handleBadgeClick = (event: MouseEvent<HTMLSpanElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst LeadingSessionIndicator = (props: {\n sessionStatus?: SessionCompletionStatus;\n onSessionIndicatorClick?: () => void;\n}) => {\n const { sessionStatus, onSessionIndicatorClick } = props;\n\n if (!sessionStatus) {\n return null;\n }\n\n const sessionTooltip = onSessionIndicatorClick ? \"Open latest session\" : \"Latest session status\";\n\n return (\n <Tooltip content={sessionTooltip}>\n <SessionIndicator\n status={sessionStatus}\n boxSize=\"12px\"\n ariaLabel={sessionTooltip}\n cursor=\"pointer\"\n onClick={onSessionIndicatorClick ? (event) => handleIconClick(event, onSessionIndicatorClick) : undefined}\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceTypeIndicator = (props: {\n workspaceType: WorkspaceBadgeProps[\"workspaceType\"];\n initializing: boolean;\n label?: string;\n shorthand?: string;\n}) => {\n const { workspaceType, initializing, label, shorthand } = props;\n const WorkspaceTypeIcon = resolveWorkspaceIcon(workspaceType);\n const displayLabel = label ?? shorthand;\n\n return (\n <HStack as=\"span\" gap=\"0\" alignItems=\"center\" color=\"fg.muted\" minW=\"0\">\n <Icon\n as={WorkspaceTypeIcon}\n boxSize=\"12px\"\n flexShrink={0}\n aria-label={workspaceType === \"worktree\" ? \"Worktree\" : \"Current branch\"}\n />\n {initializing ? <Spinner size=\"xs\" color=\"fg.muted\" /> : null}\n {displayLabel ? (\n <Text as=\"span\" textStyle=\"label/XS/regular\" color=\"fg.muted\" minW=\"0\" maxW=\"10rem\" truncate>\n {displayLabel}\n </Text>\n ) : null}\n </HStack>\n );\n};\n\nconst WorkspaceAttemptStatusIndicator = (props: { attemptStatus?: WorkspaceAttemptStatus }) => {\n const { attemptStatus } = props;\n\n if (!attemptStatus) {\n return null;\n }\n\n return (\n <Tooltip content={buildAttemptStatusTooltip(attemptStatus)}>\n <Box\n as=\"span\"\n boxSize=\"8px\"\n borderRadius=\"full\"\n backgroundColor={resolveAttemptStatusColor(attemptStatus.color)}\n flexShrink={0}\n aria-label={`Attempt status ${attemptStatus.name}`}\n data-testid=\"workspace-attempt-status\"\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceDiffTotals = (props: { diffAdditions?: number; diffDeletions?: number }) => {\n const { diffAdditions, diffDeletions } = props;\n\n if (typeof diffAdditions !== \"number\" || typeof diffDeletions !== \"number\") {\n return null;\n }\n\n return (\n <DiffBubble additions={diffAdditions} deletions={diffDeletions} variant=\"ghost\" size=\"small\" fileName={undefined} />\n );\n};\n\nconst WorkspaceDropdownTrigger = (props: { hasMultipleWorkspaces: boolean; onDropdownClick?: () => void }) => {\n const { hasMultipleWorkspaces, onDropdownClick } = props;\n\n if (!hasMultipleWorkspaces) {\n return null;\n }\n\n return (\n <Icon\n as={ChevronDown}\n boxSize=\"12px\"\n color=\"fg.muted\"\n cursor={onDropdownClick ? \"pointer\" : \"default\"}\n aria-label=\"Workspace selector\"\n onClick={onDropdownClick ? (event) => handleIconClick(event, onDropdownClick) : undefined}\n />\n );\n};\n\nexport const WorkspaceBadge = (props: WorkspaceBadgeProps) => {\n const {\n workspaceType,\n initializing = false,\n label,\n shorthand,\n attemptStatus,\n sessionStatus,\n showLeadingSessionIndicator = true,\n diffAdditions,\n diffDeletions,\n hasMultipleWorkspaces = false,\n onClick,\n onDropdownClick,\n onSessionIndicatorClick,\n } = props;\n\n return (\n <HStack\n as=\"span\"\n display=\"inline-flex\"\n gap=\"2xs\"\n alignItems=\"center\"\n minW=\"0\"\n px=\"2px\"\n py=\"1px\"\n borderRadius=\"xs\"\n cursor=\"pointer\"\n transition=\"background-color 0.2s ease-in-out\"\n _hover={{ backgroundColor: \"bg.hover\" }}\n onClick={onClick ? (event) => handleBadgeClick(event, onClick) : undefined}\n data-testid=\"workspace-badge\"\n >\n {showLeadingSessionIndicator ? (\n <LeadingSessionIndicator sessionStatus={sessionStatus} onSessionIndicatorClick={onSessionIndicatorClick} />\n ) : null}\n <WorkspaceTypeIndicator\n workspaceType={workspaceType}\n initializing={initializing}\n label={label}\n shorthand={shorthand}\n />\n <WorkspaceAttemptStatusIndicator attemptStatus={attemptStatus} />\n <WorkspaceDiffTotals diffAdditions={diffAdditions} diffDeletions={diffDeletions} />\n <WorkspaceDropdownTrigger hasMultipleWorkspaces={hasMultipleWorkspaces} onDropdownClick={onDropdownClick} />\n </HStack>\n );\n};\n","import type { ReactNode } from \"react\";\n\nexport type ViewMode = \"board\" | \"list\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport const NO_GROUPING = \"none\";\nexport const MANUAL_ORDERING = \"manual\";\n\nexport interface EnumOption {\n value: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\n/**\n * Reactive options source for enum / enum-multi attributes. Mirrors React's\n * useSyncExternalStore contract so a contribution can hand its options off as\n * a live collection (e.g. a project-scoped resource) instead of a frozen\n * array, and the renderer subscribes to it the same way it subscribes to rows.\n */\nexport interface EnumOptionsSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => EnumOption[];\n}\n\nexport type EnumOptions = EnumOption[] | EnumOptionsSource;\n\nexport type AttributeType =\n | { kind: \"enum\"; options: EnumOptions }\n | { kind: \"enum-multi\"; options: EnumOptions }\n | { kind: \"string\" }\n | { kind: \"date\" }\n | { kind: \"number\" }\n | { kind: \"user\" };\n\nexport const isEnumOptionsSource = (options: EnumOptions): options is EnumOptionsSource => !Array.isArray(options);\n\nexport type AttributeKind = AttributeType[\"kind\"];\n\nexport type AttributeDisplayDescriptor = { kind: \"workspace-badge\"; itemsAttributeId: string };\n\nexport interface AttributeDescriptor {\n id: string;\n label: string;\n type: AttributeType;\n filterable?: boolean;\n groupable?: boolean;\n sortable?: boolean;\n displayable?: boolean;\n editable?: boolean;\n display?: AttributeDisplayDescriptor;\n render?: (value: unknown, row: DataRendererRow) => ReactNode;\n compare?: (a: unknown, b: unknown) => number;\n}\n\n/**\n * Reactive source for an entire attribute schema. Mirrors React's\n * useSyncExternalStore contract so consumers (e.g. the workbench's\n * data-renderer bridge) can subscribe and re-resolve when the schema changes\n * — letting a contribution add/remove/edit attributes at runtime without\n * re-registering.\n */\nexport interface AttributesSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => AttributeDescriptor[];\n}\n\nexport const isAttributesSource = (\n attributes: AttributeDescriptor[] | AttributesSource,\n): attributes is AttributesSource => !Array.isArray(attributes);\n\nexport interface DataRendererRow {\n id: string;\n title: string;\n /**\n * Optional navigation handle. When set, the renderer's default click handler\n * routes through the contribution's onRowClick (which typically opens the\n * resource via the workbench).\n */\n resource?: unknown;\n attributes: Record<string, unknown>;\n}\n\nexport interface DataRendererOrdering {\n attributeId: string | typeof MANUAL_ORDERING;\n direction: SortDirection;\n}\n\nexport interface DataRendererSettings {\n viewMode: ViewMode;\n columnGrouping: string | typeof NO_GROUPING;\n rowGrouping: string | typeof NO_GROUPING;\n ordering: DataRendererOrdering;\n displayProperties: string[];\n}\n\nexport type DataRendererFilterState = Record<string, string[]>;\n\nexport const DEFAULT_DATA_RENDERER_SETTINGS: DataRendererSettings = {\n viewMode: \"board\",\n columnGrouping: NO_GROUPING,\n rowGrouping: NO_GROUPING,\n ordering: { attributeId: MANUAL_ORDERING, direction: \"asc\" },\n displayProperties: [],\n};\n\nexport const isEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum\" }> =>\n type.kind === \"enum\";\nexport const isMultiEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum-multi\" }> =>\n type.kind === \"enum-multi\";\n\n/**\n * Look up an attribute by id from a contribution-provided descriptor list.\n * Returns undefined for sentinels (\"none\", \"manual\") or unknown ids.\n */\nexport const findAttribute = (attributes: AttributeDescriptor[], id: string | undefined) => {\n if (!id || id === NO_GROUPING || id === MANUAL_ORDERING) return undefined;\n return attributes.find((attribute) => attribute.id === id);\n};\n","import type { ReactNode } from \"react\";\nimport type {\n AttributeDescriptor,\n AttributeType,\n DataRendererFilterState,\n DataRendererRow,\n DataRendererSettings,\n EnumOption,\n} from \"./types\";\nimport { findAttribute, isEnumOptionsSource, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\n/**\n * Normalize an enum / enum-multi attribute's `options` to a plain `EnumOption[]`.\n * Sources resolve via `getSnapshot()` on every call, so callers naturally see\n * the latest values — pair with `useResolvedAttributes` to also rerender on\n * source change.\n */\nexport const getEnumOptions = (type: AttributeType): EnumOption[] => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return [];\n return isEnumOptionsSource(type.options) ? type.options.getSnapshot() : type.options;\n};\n\nexport const toTitleCase = (value: string) =>\n value\n .replaceAll(\"_\", \" \")\n .split(\" \")\n .filter((chunk) => chunk.length > 0)\n .map((chunk) => chunk[0]!.toUpperCase() + chunk.slice(1))\n .join(\" \");\n\n/**\n * Read a typed attribute value out of a row. enum-multi normalizes to an array;\n * single-valued kinds normalize to undefined when missing.\n */\nexport const getAttributeValue = (row: DataRendererRow, descriptor: AttributeDescriptor) => {\n const raw = row.attributes[descriptor.id];\n if (descriptor.type.kind === \"enum-multi\") {\n if (Array.isArray(raw)) return raw.filter((entry): entry is string => typeof entry === \"string\");\n return [] as string[];\n }\n return raw;\n};\n\nexport const getAttributeStringValues = (row: DataRendererRow, descriptor: AttributeDescriptor): string[] => {\n const value = getAttributeValue(row, descriptor);\n if (descriptor.type.kind === \"enum-multi\") return value as string[];\n if (value === null || value === undefined) return [];\n if (typeof value === \"string\") return value === \"\" ? [] : [value];\n if (typeof value === \"number\") return [String(value)];\n return [];\n};\n\nexport const findEnumOption = (type: AttributeType, value: string): EnumOption | undefined => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return undefined;\n return getEnumOptions(type).find((option) => option.value === value);\n};\n\nexport const enumOptionLabel = (type: AttributeType, value: string) => {\n const option = findEnumOption(type, value);\n return option?.label ?? toTitleCase(value);\n};\n\nconst formatDateValue = (value: unknown) => {\n if (typeof value !== \"string\" || value === \"\") return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleDateString();\n};\n\nconst formatNumberValue = (value: unknown) => {\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n if (typeof value === \"string\" && value !== \"\" && !Number.isNaN(Number(value))) return value;\n return null;\n};\n\nconst formatStringValue = (value: unknown) => {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return value === \"\" ? null : value;\n return String(value);\n};\n\nconst formatUserValue = (value: unknown) => formatStringValue(value);\n\nconst summarizeMultiEnum = (values: string[], type: AttributeType) => {\n if (values.length === 0) return null;\n if (values.length <= 2) return values.map((value) => enumOptionLabel(type, value)).join(\", \");\n return `${enumOptionLabel(type, values[0]!)}, ${enumOptionLabel(type, values[1]!)} +${values.length - 2}`;\n};\n\nexport interface AttributeBadge {\n attributeId: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\nexport const getAttributeBadgeColorPalette = (_badge: AttributeBadge) => \"gray\";\n\nconst renderEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum\") return null;\n const stringValue = typeof value === \"string\" ? value : null;\n if (!stringValue) return null;\n const option = findEnumOption(type, stringValue);\n return {\n attributeId: descriptor.id,\n label: option?.label ?? toTitleCase(stringValue),\n color: option?.color,\n icon: option?.icon,\n };\n};\n\nconst renderMultiEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum-multi\") return null;\n const values = value as string[];\n const summary = summarizeMultiEnum(values, type);\n if (!summary) return null;\n const firstOption = values[0] ? findEnumOption(type, values[0]) : undefined;\n return { attributeId: descriptor.id, label: summary, color: firstOption?.color, icon: firstOption?.icon };\n};\n\nconst isRenderableNode = (value: unknown) => value !== null && value !== undefined && value !== false;\n\n/**\n * Per-type default cell summary used by the card / list end-content. Returns\n * null when the attribute has no displayable value.\n */\nexport const renderAttributeBadge = (descriptor: AttributeDescriptor, row: DataRendererRow): AttributeBadge | null => {\n const type = descriptor.type;\n const value = getAttributeValue(row, descriptor);\n\n if (descriptor.render) return null;\n\n if (type.kind === \"enum\") return renderEnumBadge(descriptor, type, value);\n if (type.kind === \"enum-multi\") return renderMultiEnumBadge(descriptor, type, value);\n\n if (type.kind === \"date\") {\n const formatted = formatDateValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"number\") {\n const formatted = formatNumberValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"user\") {\n const formatted = formatUserValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted, color: \"blue\" } : null;\n }\n\n const formatted = formatStringValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n};\n\nexport const collectDisplayBadges = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): AttributeBadge[] => {\n const badges: AttributeBadge[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n const badge = renderAttributeBadge(descriptor, row);\n if (badge) badges.push(badge);\n }\n return badges;\n};\n\nexport const collectDisplayCustomSlots = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): ReactNode[] => {\n const slots: ReactNode[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor?.render || descriptor.displayable === false) continue;\n\n const slot = descriptor.render(getAttributeValue(row, descriptor), row);\n if (isRenderableNode(slot)) slots.push(slot);\n }\n return slots;\n};\n\nconst collectValuesFromRows = (rows: DataRendererRow[], descriptor: AttributeDescriptor) => {\n const values = new Set<string>();\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) values.add(value);\n }\n return values;\n};\n\nexport interface FilterCategoryView {\n id: string;\n label: string;\n options: { value: string; label: string; color?: string }[];\n}\n\n/**\n * Build the filter menu's category list from the declared attributes. Enum\n * descriptors expose their declared options first; auto-derived values from\n * the data fill in the gaps for string / date / number / user attributes (so\n * filter chips for free-form fields don't require declaring every option).\n */\nexport const buildFilterCategories = (\n attributes: AttributeDescriptor[],\n rows: DataRendererRow[],\n): FilterCategoryView[] => {\n const categories: FilterCategoryView[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.filterable) continue;\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const declared = getEnumOptions(descriptor.type);\n const auto = collectValuesFromRows(rows, descriptor);\n const declaredValues = new Set(declared.map((option) => option.value));\n const undeclared = [...auto]\n .filter((value) => !declaredValues.has(value))\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n\n categories.push({\n id: descriptor.id,\n label: descriptor.label,\n options: [\n ...declared.map((option) => ({ value: option.value, label: option.label, color: option.color })),\n ...undeclared,\n ],\n });\n continue;\n }\n\n const auto = [...collectValuesFromRows(rows, descriptor)]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n categories.push({ id: descriptor.id, label: descriptor.label, options: auto });\n }\n return categories;\n};\n\nexport interface MenuOption {\n value: string;\n label: string;\n}\n\nexport const buildGroupingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: NO_GROUPING, label: \"None\" }];\n for (const descriptor of attributes) {\n if (!descriptor.groupable) continue;\n // enum-multi is intentionally not offered for grouping (one row can hold\n // multiple values; we don't double-render).\n if (descriptor.type.kind === \"enum-multi\") continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildOrderingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: MANUAL_ORDERING, label: \"Manual\" }];\n options.push({ value: \"title\", label: \"Title\" });\n for (const descriptor of attributes) {\n if (!descriptor.sortable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildDisplayPropertyOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.displayable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const resolveSubGroupingOptions = (options: MenuOption[], columnGrouping: string) => {\n if (columnGrouping === NO_GROUPING) return options.filter((option) => option.value === NO_GROUPING);\n return options.filter((option) => option.value === NO_GROUPING || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: string, placement?: { columnKey?: string }) => {\n if (columnGrouping === NO_GROUPING) return \"all\";\n return placement?.columnKey;\n};\n\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filters?: DataRendererFilterState,\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const active = filters?.[columnGrouping];\n if (active && active.length > 0) return active;\n const descriptor = findAttribute(attributes, columnGrouping);\n if (!descriptor) return undefined;\n if (descriptor.type.kind === \"enum\") return getEnumOptions(descriptor.type).map((option) => option.value);\n return undefined;\n};\n\nexport const omitFilterCategory = (filters: DataRendererFilterState, id: string): DataRendererFilterState => {\n const next = { ...filters };\n delete next[id];\n return next;\n};\n\n/**\n * Drop persisted settings entries that reference attribute ids no longer\n * declared by the contribution. Falls back to defaults for missing grouping\n * and ordering attributes so a stale saved view still loads cleanly.\n */\nexport const sanitizeSettings = (\n settings: DataRendererSettings,\n attributes: AttributeDescriptor[],\n): DataRendererSettings => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const validGroupingId = (id: string) => id === NO_GROUPING || knownIds.has(id);\n const validOrderingId = (id: string) => id === MANUAL_ORDERING || id === \"title\" || knownIds.has(id);\n\n const columnGrouping = validGroupingId(settings.columnGrouping) ? settings.columnGrouping : NO_GROUPING;\n const rowGrouping = validGroupingId(settings.rowGrouping) ? settings.rowGrouping : NO_GROUPING;\n const orderingId = validOrderingId(settings.ordering.attributeId) ? settings.ordering.attributeId : MANUAL_ORDERING;\n const displayProperties = settings.displayProperties.filter(validGroupingId);\n\n return {\n viewMode: settings.viewMode,\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId, direction: settings.ordering.direction },\n displayProperties,\n };\n};\n\nexport const sanitizeFilters = (filters: DataRendererFilterState, attributes: AttributeDescriptor[]) => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!knownIds.has(id)) continue;\n if (!values || values.length === 0) continue;\n next[id] = values;\n }\n return next;\n};\n","import { Badge, HStack, Icon, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler, ReactNode } from \"react\";\nimport { getIconComponent } from \"@/components/icon-color-picker\";\nimport type { WorkspaceBadgeProps } from \"@/components/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/workspace-badge\";\nimport { type AttributeBadge, getAttributeBadgeColorPalette } from \"./data-renderer-helpers\";\n\nexport interface DataRendererCardProps {\n title: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n}\n\nexport const DataRendererCard = (props: DataRendererCardProps) => {\n const {\n title,\n badges = [],\n customSlots = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onDragStart,\n onDragEnd,\n onClick,\n } = props;\n\n const hasBadges = badges.length > 0 || customSlots.length > 0;\n const cursor = draggable ? \"grab\" : onClick ? \"pointer\" : \"default\";\n\n return (\n <Stack\n gap=\"xs\"\n padding=\"sm\"\n borderRadius=\"sm\"\n borderWidth=\"1px\"\n width=\"100%\"\n background=\"bg\"\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{ borderColor: \"border.blue\", boxShadow: \"mid\" }}\n cursor={cursor}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"renderer-card\"\n >\n <HStack align=\"start\" gap=\"2xs\" flexWrap=\"wrap\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" flex=\"1\" minW=\"0\" overflowWrap=\"anywhere\">\n {title}\n </Text>\n {workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}\n </HStack>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <Badge\n key={badge.attributeId}\n variant=\"subtle\"\n colorPalette={getAttributeBadgeColorPalette(badge)}\n gap=\"2xs\"\n textStyle=\"label/XS/medium\"\n >\n {badge.icon ? (\n <Icon as={getIconComponent(badge.icon)} boxSize=\"3.5\" color={`${badge.color ?? \"gray\"}.fg`} />\n ) : null}\n {badge.label}\n </Badge>\n ))}\n {customSlots}\n </Wrap>\n )}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, IconButton, Menu, Spacer, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight, MoreHorizontal, Plus } from \"lucide-react\";\nimport { type ComponentProps, type ComponentType, type DragEvent, useState } from \"react\";\n\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport type { ResourceContextAction } from \"@/components/resource-context-menu\";\nimport { ResourceContextMenu } from \"@/components/resource-context-menu\";\nimport { ScrollArea } from \"@/components/scroll-area\";\nimport { Tooltip } from \"@/components/tooltip\";\n\nimport { DataRendererCard } from \"./data-renderer-card\";\n\ntype DataRendererCardProps = ComponentProps<typeof DataRendererCard>;\n\nexport interface DataRendererBoardItem {\n id: string;\n cardProps: Omit<DataRendererCardProps, \"draggable\" | \"onDragStart\" | \"onDragEnd\" | \"isSelected\">;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface DataRendererBoardColumnAction {\n id: string;\n label: string;\n icon: ComponentType<{ size?: number | string }>;\n}\n\nexport interface DataRendererBoardGroup {\n key: string;\n label: string;\n items: DataRendererBoardItem[];\n}\n\nexport interface DataRendererBoardColumn {\n id: string;\n label: string;\n createLabel?: string;\n color?: string;\n items: DataRendererBoardItem[];\n groups?: DataRendererBoardGroup[];\n canDragIn: boolean;\n canDragOut: boolean;\n canCreate: boolean;\n actions: DataRendererBoardColumnAction[];\n}\n\ninterface DataRendererBoardProps {\n columns: DataRendererBoardColumn[];\n selectedItemId?: string | null;\n onMoveItem?: (itemId: string, targetColumnId: string, context?: { beforeItemId?: string }) => void;\n onMoveToGroup?: (itemId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => void;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const DataRendererBoard = (props: DataRendererBoardProps) => {\n const { columns, selectedItemId = null, onMoveItem, onMoveToGroup, onCreateStart, onColumnAction } = props;\n\n const [activeColumn, setActiveColumn] = useState<string | null>(null);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const handleDragStart = (itemId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.dataTransfer.setData(\"text/plain\", itemId);\n event.dataTransfer.effectAllowed = \"move\";\n };\n\n const handleDragEnd = () => {\n setActiveColumn(null);\n setActiveGroup(null);\n };\n\n const handleDragOver = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(columnId);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveColumn(null);\n };\n\n const handleDrop = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setActiveColumn(null);\n\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n\n onMoveItem?.(itemId, columnId);\n };\n\n return (\n <ScrollArea\n height=\"100%\"\n size=\"xs\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ display: \"flex\", alignItems: \"stretch\", gap: \"0\", pb: \"2xs\", minH: \"100%\" }}\n >\n {columns.map((column) => (\n <Stack\n key={column.id}\n data-testid={`board-column-${column.id}`}\n gap=\"xs\"\n _notFirst={{ borderLeft: \"1px solid\", borderColor: \"border.muted\" }}\n background={activeColumn === column.id ? \"bg.subtle\" : \"bg\"}\n transition=\"background 150ms ease\"\n height=\"100%\"\n minH=\"240px\"\n overflow=\"hidden\"\n minW=\"260px\"\n flex=\"1 0 260px\"\n onDragOver={column.canDragIn ? handleDragOver(column.id) : undefined}\n onDragLeave={column.canDragIn ? handleDragLeave : undefined}\n onDrop={column.canDragIn ? handleDrop(column.id) : undefined}\n >\n <ColumnHeader column={column} onCreateStart={onCreateStart} onColumnAction={onColumnAction} />\n\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n size=\"xs\"\n verticalScrollbarProps={{ margin: \"0\" }}\n contentProps={{\n spaceY: \"sm\",\n ps: \"xs\",\n pe: \"xs\",\n }}\n >\n {column.groups && column.groups.length > 0\n ? column.groups.map((group) => {\n const groupId = `${column.id}::${group.key}`;\n return (\n <GroupSection\n key={group.key}\n columnId={column.id}\n group={group}\n selectedItemId={selectedItemId}\n canDragIn={column.canDragIn}\n canDragOut={column.canDragOut}\n isDropTarget={activeGroup === groupId}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onGroupDragOver={(event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveGroup(groupId);\n setActiveColumn(null);\n }}\n onGroupDragLeave={(event) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveGroup(null);\n }}\n onGroupDrop={(event, beforeItemId) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveGroup(null);\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n onMoveItem?.(itemId, column.id, { beforeItemId });\n onMoveToGroup?.(itemId, group.key, { beforeItemId });\n }}\n />\n );\n })\n : column.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(column.id);\n }\n : undefined\n }\n onDrop={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onMoveItem?.(itemId, column.id, { beforeItemId: item.id });\n }\n : undefined\n }\n >\n <DataRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={column.canDragOut}\n onDragStart={column.canDragOut ? handleDragStart(item.id) : undefined}\n onDragEnd={column.canDragOut ? handleDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </ScrollArea>\n </Stack>\n ))}\n </ScrollArea>\n );\n};\n\ninterface ColumnHeaderProps {\n column: DataRendererBoardColumn;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\ninterface GroupSectionProps {\n columnId: string;\n group: DataRendererBoardGroup;\n selectedItemId: string | null;\n canDragIn: boolean;\n canDragOut: boolean;\n isDropTarget: boolean;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n onGroupDragOver: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDragLeave: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDrop: (event: DragEvent<HTMLDivElement>, beforeItemId?: string) => void;\n}\n\nconst GroupSection = (props: GroupSectionProps) => {\n const {\n columnId,\n group,\n selectedItemId,\n canDragIn,\n canDragOut,\n isDropTarget,\n onDragStart,\n onDragEnd,\n onGroupDragOver,\n onGroupDragLeave,\n onGroupDrop,\n } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <Stack\n data-column-id={columnId}\n data-group-key={group.key}\n gap=\"0\"\n borderRadius=\"sm\"\n background={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n transition=\"background 150ms ease\"\n onDragOver={canDragIn ? onGroupDragOver : undefined}\n onDragLeave={canDragIn ? onGroupDragLeave : undefined}\n onDrop={canDragIn ? onGroupDrop : undefined}\n >\n <HStack\n px=\"xs\"\n py=\"2xs\"\n gap=\"2xs\"\n cursor=\"pointer\"\n _hover={{ bg: \"bg.hover\" }}\n borderRadius=\"sm\"\n onClick={() => setExpanded((v) => !v)}\n >\n <Box display=\"flex\" alignItems=\"center\" flexShrink={0}>\n <Icon\n as={ChevronRight}\n boxSize=\"14px\"\n color=\"fg.muted\"\n transform={expanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 0.15s ease\"\n />\n </Box>\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\">\n {group.label}\n </Text>\n <Badge variant=\"subtle\" colorPalette=\"gray\" size=\"sm\">\n {group.items.length}\n </Badge>\n </HStack>\n {expanded && (\n <Stack gap=\"sm\" pt=\"xs\">\n {group.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onGroupDrop(event, item.id);\n }\n : undefined\n }\n >\n <DataRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={canDragOut}\n onDragStart={canDragOut ? onDragStart(item.id) : undefined}\n onDragEnd={canDragOut ? onDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n\nconst ColumnHeader = (props: ColumnHeaderProps) => {\n const { column, onCreateStart, onColumnAction } = props;\n\n return (\n <HStack padding=\"xs\" gap=\"xs\" alignItems=\"center\">\n <Text textStyle=\"label/L/medium\">{column.label}</Text>\n\n <Badge variant=\"subtle\" colorPalette={column.color ?? \"gray\"}>\n {column.items.length}\n </Badge>\n\n <Spacer />\n\n {column.canCreate && onCreateStart && (\n <Tooltip content={column.createLabel ?? \"Create new row\"}>\n <IconButton\n size=\"2xs\"\n variant=\"outline\"\n onClick={() => onCreateStart(column.id)}\n aria-label={column.createLabel ?? \"Create row\"}\n >\n <Icon as={Plus} boxSize=\"12px\" />\n </IconButton>\n </Tooltip>\n )}\n\n {column.actions.length > 0 && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={`Column actions for ${column.label}`}>\n <Icon as={MoreHorizontal} boxSize=\"12px\" />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"180px\" bg=\"bg\">\n {column.actions.map((action) => (\n <Menu.Item key={action.id} value={action.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n label={action.label}\n icon={<Icon as={action.icon} boxSize=\"16px\" />}\n onActivate={() => onColumnAction?.(column.id, action.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n )}\n </HStack>\n );\n};\n","import { Badge, Box, HStack, Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport { type ComponentType, type DragEvent, type ReactNode, useState } from \"react\";\nimport { getIconComponent } from \"@/components/icon-color-picker\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowItem } from \"../list-row/list-row.types\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport { type AttributeBadge, getAttributeBadgeColorPalette } from \"./data-renderer-helpers\";\n\nexport interface DataRendererListItem {\n id: string;\n title: string;\n countBadge?: number;\n countColorPalette?: string;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n children?: DataRendererListItem[];\n onClick?: () => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropRow?: (rowId: string) => void;\n}\n\nexport type DataRendererListExpandedState = Record<string, boolean>;\n\nexport interface DataRendererListProps {\n items: DataRendererListItem[];\n selectedItemId?: string | null;\n expandedGroups?: DataRendererListExpandedState;\n onItemClick?: (item: DataRendererListItem) => void;\n onExpandedGroupChange?: (rowId: string, isExpanded: boolean) => void;\n}\n\nconst INDENT_STEP_PX = 12;\n\ninterface FlattenedDataRendererListItem {\n id: string;\n item: DataRendererListItem;\n depth: number;\n canExpand: boolean;\n}\n\nexport const getDataRendererListIndentation = (depth: number) => {\n if (depth <= 0) return undefined;\n return `${depth * INDENT_STEP_PX}px`;\n};\n\nexport const flattenDataRendererListItems = (\n items: DataRendererListItem[],\n expanded: DataRendererListExpandedState,\n depth = 0,\n) => {\n const rows: FlattenedDataRendererListItem[] = [];\n\n for (const item of items) {\n const canExpand = (item.children?.length ?? 0) > 0;\n rows.push({ id: item.id, item, depth, canExpand });\n\n if (canExpand && getRowIsExpanded(expanded, item.id)) {\n rows.push(...flattenDataRendererListItems(item.children ?? [], expanded, depth + 1));\n }\n }\n\n return rows;\n};\n\nconst getDropTargetBoxShadow = (isDropTarget: boolean, isGroup: boolean) => {\n if (!isDropTarget) return undefined;\n if (isGroup) return \"inset 3px 0 0 var(--chakra-colors-border-accent)\";\n return \"inset 0 2px 0 var(--chakra-colors-border-accent)\";\n};\n\nconst getRowIsExpanded = (expandedState: DataRendererListExpandedState, rowId: string) => {\n return expandedState[rowId] !== false;\n};\n\nconst updateExpandedState = (expandedState: DataRendererListExpandedState, rowId: string, isExpanded: boolean) => {\n return { ...expandedState, [rowId]: isExpanded };\n};\n\nconst renderLabel = (item: DataRendererListItem) => (\n <HStack gap=\"xs\" minW=\"0\" maxW=\"full\" flex=\"1\">\n <Text textStyle=\"label/S/regular\" minW=\"0\" truncate>\n {item.title}\n </Text>\n {typeof item.countBadge === \"number\" ? (\n <Badge variant=\"subtle\" size=\"sm\" colorPalette={item.countColorPalette ?? \"gray\"} flexShrink={0}>\n {item.countBadge}\n </Badge>\n ) : null}\n </HStack>\n);\n\nconst renderEndContent = (item: DataRendererListItem) => {\n const hasBadges = (item.badges?.length ?? 0) > 0 || (item.customSlots?.length ?? 0) > 0;\n\n if (!hasBadges) return null;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <Badge\n key={badge.attributeId}\n variant=\"subtle\"\n colorPalette={getAttributeBadgeColorPalette(badge)}\n gap=\"2xs\"\n textStyle=\"label/XS/medium\"\n >\n {badge.icon ? (\n <Icon as={getIconComponent(badge.icon)} boxSize=\"3.5\" color={`${badge.color ?? \"gray\"}.fg`} />\n ) : null}\n {badge.label}\n </Badge>\n ))}\n {item.customSlots}\n </Wrap>\n </HStack>\n );\n};\n\nconst buildListRowItem = (item: DataRendererListItem, hasChildren: boolean): ListRowItem => ({\n id: item.id,\n label: renderLabel(item),\n icon: item.statusIcon ? <Icon as={item.statusIcon} boxSize=\"16px\" /> : undefined,\n iconColor: item.statusColor ?? \"fg.muted\",\n endContent: renderEndContent(item),\n isContainer: hasChildren,\n contextMenuItems: item.contextMenuActions?.map((action) => ({\n id: action.key,\n label: action.label,\n icon: action.icon ?? undefined,\n disabled: action.isDisabled,\n onAction: action.onClick,\n })),\n});\n\nexport const DataRendererList = (props: DataRendererListProps) => {\n const { items, selectedItemId = null, expandedGroups, onItemClick, onExpandedGroupChange } = props;\n const [localExpandedGroups, setLocalExpandedGroups] = useState<DataRendererListExpandedState>({});\n const [activeDropTargetId, setActiveDropTargetId] = useState<string | null>(null);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n const expanded = expandedGroups ?? localExpandedGroups;\n const rows = flattenDataRendererListItems(items, expanded);\n\n const handleExpandedChange = (rowId: string, isExpanded: boolean) => {\n onExpandedGroupChange?.(rowId, isExpanded);\n if (expandedGroups === undefined) {\n setLocalExpandedGroups((current) => updateExpandedState(current, rowId, isExpanded));\n }\n };\n\n return (\n <Box>\n {rows.map((row) => (\n <DataRendererListRow\n key={row.id}\n row={row}\n isExpanded={getRowIsExpanded(expanded, row.id)}\n selectedItemId={selectedItemId}\n activeDropTargetId={activeDropTargetId}\n draggedItemId={draggedItemId}\n onDraggedItemChange={setDraggedItemId}\n onDropTargetChange={setActiveDropTargetId}\n onItemClick={onItemClick}\n onExpandedChange={handleExpandedChange}\n />\n ))}\n </Box>\n );\n};\n\ninterface DataRendererListRowProps {\n row: FlattenedDataRendererListItem;\n isExpanded: boolean;\n selectedItemId: string | null;\n activeDropTargetId: string | null;\n draggedItemId: string | null;\n onDraggedItemChange: (itemId: string | null) => void;\n onDropTargetChange: (itemId: string | null) => void;\n onExpandedChange: (rowId: string, isExpanded: boolean) => void;\n onItemClick?: (item: DataRendererListItem) => void;\n}\n\nconst DataRendererListRow = (props: DataRendererListRowProps) => {\n const {\n row,\n isExpanded,\n selectedItemId,\n activeDropTargetId,\n draggedItemId,\n onDraggedItemChange,\n onDropTargetChange,\n onItemClick,\n onExpandedChange,\n } = props;\n const { item, canExpand } = row;\n const isSelected = item.id === selectedItemId;\n const canDropHere = Boolean(item.onDropRow) && item.id !== draggedItemId;\n const isDropTarget = canDropHere && item.id === activeDropTargetId;\n const rowItem = buildListRowItem(item, canExpand);\n const toggleExpanded = () => onExpandedChange(row.id, !isExpanded);\n\n const handleActivate = () => {\n if (canExpand) {\n toggleExpanded();\n return;\n }\n item.onClick?.();\n onItemClick?.(item);\n };\n\n const handleDragStart = (event: DragEvent<HTMLDivElement>) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n onDraggedItemChange(item.id);\n onDropTargetChange(null);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n onDropTargetChange(item.id);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n onDropTargetChange(null);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere || !item.onDropRow) return;\n event.preventDefault();\n event.stopPropagation();\n onDropTargetChange(null);\n onDraggedItemChange(null);\n const draggedId = event.dataTransfer.getData(\"text/plain\");\n if (!draggedId || draggedId === item.id) return;\n item.onDropRow(draggedId);\n };\n\n const handleDragEnd = () => {\n onDropTargetChange(null);\n onDraggedItemChange(null);\n };\n\n return (\n <Box\n data-drop-target={isDropTarget ? \"true\" : undefined}\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n bg={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n boxShadow={getDropTargetBoxShadow(isDropTarget, canExpand)}\n draggable={item.draggable}\n transition=\"background 120ms ease, box-shadow 120ms ease\"\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragLeave={item.onDropRow ? handleDragLeave : undefined}\n onDragEnd={handleDragEnd}\n onDrop={handleDrop}\n >\n <ListRow\n {...rowItem}\n variant=\"tree\"\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={isExpanded}\n showExpandToggle={canExpand}\n onActivate={handleActivate}\n onToggleExpand={toggleExpanded}\n />\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { EmptyState } from \"@/components/empty-state\";\nimport { DataRendererBoard, type DataRendererBoardColumn } from \"./data-renderer-board\";\nimport { DataRendererList, type DataRendererListItem } from \"./data-renderer-list\";\nimport type { DataRendererSettings } from \"./types\";\n\ninterface DataRendererEmptyStateProps {\n emptyState?: ReactNode;\n title: string;\n description?: string;\n height?: string;\n}\n\ninterface DataRendererContentProps {\n viewMode: DataRendererSettings[\"viewMode\"];\n boardColumns: DataRendererBoardColumn[];\n listItems: DataRendererListItem[];\n listExpandedGroups: Record<string, boolean>;\n selectedRowId: string | null;\n emptyState?: ReactNode;\n emptyTitle: string;\n emptyDescription?: string;\n onBoardMoveItem: (rowId: string, targetColumnId: string) => void;\n onBoardMoveToGroup: (rowId: string, targetGroupKey: string) => void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n onListExpandedGroupChange: (rowId: string, isExpanded: boolean) => void;\n listKey: string;\n}\n\nconst DataRendererEmptyState = (props: DataRendererEmptyStateProps) => {\n const { emptyState, title, description, height } = props;\n\n if (emptyState !== undefined) {\n return height ? <Box height={height}>{emptyState}</Box> : emptyState;\n }\n\n return <EmptyState title={title} description={description} height={height} />;\n};\n\nexport const DataRendererContent = (props: DataRendererContentProps) => {\n const {\n viewMode,\n boardColumns,\n listItems,\n listExpandedGroups,\n selectedRowId,\n emptyState,\n emptyTitle,\n emptyDescription,\n onBoardMoveItem,\n onBoardMoveToGroup,\n onCreateRow,\n onColumnAction,\n onListExpandedGroupChange,\n listKey,\n } = props;\n\n if (viewMode === \"board\") {\n return (\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <DataRendererBoard\n columns={boardColumns}\n selectedItemId={selectedRowId}\n onMoveItem={onBoardMoveItem}\n onMoveToGroup={onBoardMoveToGroup}\n onCreateStart={onCreateRow}\n onColumnAction={onColumnAction}\n />\n ) : (\n <DataRendererEmptyState\n emptyState={emptyState}\n title={emptyTitle}\n description={emptyDescription}\n height=\"100%\"\n />\n )}\n </Box>\n );\n }\n\n if (listItems.length > 0) {\n return (\n <DataRendererList\n key={listKey}\n items={listItems}\n selectedItemId={selectedRowId}\n expandedGroups={listExpandedGroups}\n onExpandedGroupChange={onListExpandedGroupChange}\n />\n );\n }\n\n return <DataRendererEmptyState emptyState={emptyState} title={emptyTitle} description={emptyDescription} />;\n};\n","import {\n enumOptionLabel,\n getAttributeStringValues,\n getAttributeValue,\n getEnumOptions,\n toTitleCase,\n} from \"./data-renderer-helpers\";\nimport {\n type AttributeDescriptor,\n type AttributeType,\n type DataRendererFilterState,\n type DataRendererOrdering,\n type DataRendererRow,\n findAttribute,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface GroupingOptions {\n attributes: AttributeDescriptor[];\n columnGrouping: string;\n rowGrouping: string;\n knownColumnKeys?: string[];\n}\n\ninterface DataRendererRowGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n}\n\ninterface DataRendererColumnGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n subgroups: DataRendererRowGroup[];\n}\n\nconst UNASSIGNED_LABEL = \"Unassigned\";\n\nconst fallbackLabel = (descriptor: AttributeDescriptor) => `No ${descriptor.label.toLowerCase()}`;\n\nconst labelForGroupKey = (key: string, descriptor: AttributeDescriptor | undefined) => {\n if (!descriptor) return key === NO_GROUPING ? \"All\" : key;\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")\n return enumOptionLabel(descriptor.type, key);\n return key;\n};\n\nconst getGroupingKey = (row: DataRendererRow, descriptor: AttributeDescriptor | undefined, columnId: string) => {\n if (columnId === NO_GROUPING) return \"all\";\n if (!descriptor) return \"all\";\n // Grouping by an enum-multi is intentionally rejected at the renderer level\n // (the contribution lists it as non-groupable). Defensive fallback: treat\n // each row as a single bucket using its first value, else fallback.\n if (descriptor.type.kind === \"enum-multi\") {\n const [first] = getAttributeStringValues(row, descriptor);\n return first ?? fallbackLabel(descriptor);\n }\n const [value] = getAttributeStringValues(row, descriptor);\n return value ?? fallbackLabel(descriptor);\n};\n\nconst compareGroupKey = (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true });\n\nconst compareGroupKeyForDescriptor = (a: string, b: string, descriptor: AttributeDescriptor | undefined) => {\n if (descriptor && (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")) {\n const ordered = compareEnumValues(a, b, descriptor.type);\n if (ordered !== 0) return ordered;\n }\n return compareGroupKey(a, b);\n};\n\nconst orderByDirection = (value: number, direction: DataRendererOrdering[\"direction\"]) =>\n direction === \"asc\" ? value : value * -1;\n\nconst compareEnumValues = (left: string | undefined, right: string | undefined, type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return 0;\n const options = getEnumOptions(type);\n const toIndex = (value: string | undefined) => {\n if (value === undefined) return options.length;\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? options.length + 1 : index;\n };\n return toIndex(left) - toIndex(right);\n};\n\nconst compareForDescriptor = (a: DataRendererRow, b: DataRendererRow, descriptor: AttributeDescriptor) => {\n if (descriptor.compare) return descriptor.compare(getAttributeValue(a, descriptor), getAttributeValue(b, descriptor));\n\n const left = getAttributeValue(a, descriptor);\n const right = getAttributeValue(b, descriptor);\n\n if (descriptor.type.kind === \"date\") {\n const leftTime = typeof left === \"string\" ? new Date(left).getTime() : 0;\n const rightTime = typeof right === \"string\" ? new Date(right).getTime() : 0;\n return leftTime - rightTime;\n }\n\n if (descriptor.type.kind === \"number\") {\n const leftNum = typeof left === \"number\" ? left : Number(left ?? 0);\n const rightNum = typeof right === \"number\" ? right : Number(right ?? 0);\n return leftNum - rightNum;\n }\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const [leftValue] = getAttributeStringValues(a, descriptor);\n const [rightValue] = getAttributeStringValues(b, descriptor);\n return compareEnumValues(leftValue, rightValue, descriptor.type);\n }\n\n const leftString = typeof left === \"string\" ? left : String(left ?? \"\");\n const rightString = typeof right === \"string\" ? right : String(right ?? \"\");\n return leftString.localeCompare(rightString, undefined, { numeric: true });\n};\n\nexport const orderRows = (\n rows: DataRendererRow[],\n ordering: DataRendererOrdering,\n attributes: AttributeDescriptor[],\n) => {\n if (ordering.attributeId === MANUAL_ORDERING) return rows;\n\n if (ordering.attributeId === \"title\") {\n return [...rows].sort((a, b) => orderByDirection(a.title.localeCompare(b.title), ordering.direction));\n }\n\n const descriptor = findAttribute(attributes, ordering.attributeId);\n if (!descriptor) return rows;\n\n return [...rows].sort((a, b) => orderByDirection(compareForDescriptor(a, b, descriptor), ordering.direction));\n};\n\nexport const groupRows = (rows: DataRendererRow[], options: GroupingOptions): DataRendererColumnGroup[] => {\n const { attributes, columnGrouping, rowGrouping, knownColumnKeys } = options;\n const columnDescriptor = findAttribute(attributes, columnGrouping);\n const rowDescriptor = findAttribute(attributes, rowGrouping);\n const groupedByColumn = new Map<string, DataRendererRow[]>();\n\n if (knownColumnKeys) {\n for (const key of knownColumnKeys) groupedByColumn.set(key, []);\n }\n\n for (const row of rows) {\n const key = getGroupingKey(row, columnDescriptor, columnGrouping);\n groupedByColumn.set(key, [...(groupedByColumn.get(key) ?? []), row]);\n }\n\n const columnEntries = [...groupedByColumn.entries()].sort(([left], [right]) =>\n compareGroupKeyForDescriptor(left, right, columnDescriptor),\n );\n\n return columnEntries.map(([columnKey, columnRows]) => {\n const label = labelForGroupKey(columnKey, columnDescriptor);\n\n if (rowGrouping === NO_GROUPING) {\n return { key: columnKey, label, rows: columnRows, subgroups: [] };\n }\n\n const groupedByRow = new Map<string, DataRendererRow[]>();\n for (const row of columnRows) {\n const rowKey = getGroupingKey(row, rowDescriptor, rowGrouping);\n groupedByRow.set(rowKey, [...(groupedByRow.get(rowKey) ?? []), row]);\n }\n\n const subgroups = [...groupedByRow.entries()]\n .sort(([left], [right]) => compareGroupKeyForDescriptor(left, right, rowDescriptor))\n .map(([rowKey, rowRows]) => ({\n key: rowKey,\n label: labelForGroupKey(rowKey, rowDescriptor) || toTitleCase(rowKey || UNASSIGNED_LABEL),\n rows: rowRows,\n }));\n\n return { key: columnKey, label, rows: columnRows, subgroups };\n });\n};\n\nconst matchesFilter = (row: DataRendererRow, descriptor: AttributeDescriptor, values: string[]) => {\n const rowValues = getAttributeStringValues(row, descriptor);\n return rowValues.some((value) => values.includes(value));\n};\n\nexport const filterRows = (\n rows: DataRendererRow[],\n filters: DataRendererFilterState,\n attributes: AttributeDescriptor[],\n) => {\n const activeFilters = Object.entries(filters).filter(\n (entry): entry is [string, string[]] => Array.isArray(entry[1]) && entry[1].length > 0,\n );\n if (activeFilters.length === 0) return rows;\n\n return rows.filter((row) =>\n activeFilters.every(([id, values]) => {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor) return true;\n return matchesFilter(row, descriptor, values);\n }),\n );\n};\n\nexport const countFilterValues = (rows: DataRendererRow[], attributeId: string, attributes: AttributeDescriptor[]) => {\n const counts: Record<string, number> = {};\n const descriptor = findAttribute(attributes, attributeId);\n if (!descriptor) return counts;\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) {\n counts[value] = (counts[value] ?? 0) + 1;\n }\n }\n return counts;\n};\n\nexport type { DataRendererColumnGroup, DataRendererRowGroup };\n","import { Button, HStack, Icon, IconButton, Menu, Popover, Portal, Separator, Stack, Text } from \"@chakra-ui/react\";\nimport { ArrowDownUp, ChevronDown, KanbanSquare, List, Settings2 } from \"lucide-react\";\nimport { Fragment, useEffect, useRef, useState } from \"react\";\nimport { type MenuOption, resolveSubGroupingOptions } from \"./data-renderer-helpers\";\nimport type { DataRendererSettings } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: DataRendererSettings;\n groupingOptions: MenuOption[];\n orderingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: DataRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onOrderingAttributeIdChange: (value: string) => void;\n onSortDirectionToggle: () => void;\n onDisplayPropertyToggle: (property: string) => void;\n}\n\nconst SectionLabel = (props: { children: string }) => (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n {props.children}\n </Text>\n);\n\nconst viewModeOptions = [\n { value: \"list\", label: \"List\", icon: List },\n { value: \"board\", label: \"Board\", icon: KanbanSquare },\n] as const;\n\nconst Dropdown = (props: {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n}) => {\n const selectedLabel = props.options.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoneFirst = props.options[0]?.value === \"none\";\n\n return (\n <Stack gap=\"2xs\">\n <SectionLabel>{props.label}</SectionLabel>\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"sm\" variant=\"outline\" width=\"full\" justifyContent=\"space-between\">\n {selectedLabel}\n <Icon as={ChevronDown} color=\"fg.muted\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"260px\" bg=\"bg\">\n {props.options.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoneFirst && index === 1 ? <Menu.Separator /> : null}\n <Menu.Item value={option.value} onClick={() => props.onSelect(option.value)}>\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Stack>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n orderingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onOrderingAttributeIdChange,\n onSortDirectionToggle,\n onDisplayPropertyToggle,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}\n onOpenChange={(event) => setOpen(event.open)}\n >\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Display settings\" variant=\"ghost\" size=\"sm\">\n <Icon as={Settings2} boxSize=\"14px\" />\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"320px\" p=\"sm\" bg=\"bg\">\n <Stack gap=\"sm\">\n <SectionLabel>View</SectionLabel>\n <HStack gap=\"2xs\">\n {viewModeOptions.map((option) => {\n const ViewModeIcon = option.icon;\n const active = settings.viewMode === option.value;\n\n return (\n <Button\n key={option.value}\n flex=\"1\"\n size=\"sm\"\n variant={active ? \"solid\" : \"outline\"}\n aria-pressed={active}\n onClick={() => onViewModeChange(option.value)}\n >\n <ViewModeIcon size={14} />\n {option.label}\n </Button>\n );\n })}\n </HStack>\n\n <Separator />\n\n <Dropdown\n label=\"Grouping\"\n value={settings.columnGrouping}\n options={groupingOptions}\n onSelect={(value) => {\n onColumnGroupingChange(value);\n if (value === \"none\" || value === settings.rowGrouping) onRowGroupingChange(\"none\");\n }}\n />\n\n <Dropdown\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\n <Stack gap=\"2xs\">\n <SectionLabel>Ordering</SectionLabel>\n <HStack gap=\"2xs\">\n <Dropdown\n label=\"Sort by\"\n value={settings.ordering.attributeId}\n options={orderingOptions}\n onSelect={onOrderingAttributeIdChange}\n />\n <IconButton\n mt=\"lg\"\n aria-label=\"Toggle sort direction\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onSortDirectionToggle}\n data-direction={settings.ordering.direction}\n >\n <Icon\n as={ArrowDownUp}\n transform={settings.ordering.direction === \"asc\" ? \"rotate(0deg)\" : \"rotate(180deg)\"}\n />\n </IconButton>\n </HStack>\n </Stack>\n\n <Separator />\n <Stack gap=\"2xs\">\n <SectionLabel>Display properties</SectionLabel>\n <HStack flexWrap=\"wrap\" gap=\"2xs\">\n {displayPropertyOptions.map((option) => {\n const isActive = settings.displayProperties.includes(option.value);\n\n return (\n <Button\n key={option.value}\n size=\"2xs\"\n variant={isActive ? \"solid\" : \"outline\"}\n onClick={() => onDisplayPropertyToggle(option.value)}\n >\n {option.label}\n </Button>\n );\n })}\n </HStack>\n </Stack>\n </Stack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, IconButton, Popover, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Check, Filter } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport type { FilterCategoryView } from \"./data-renderer-helpers\";\nimport type { DataRendererFilterState } from \"./types\";\n\ninterface FilterMenuProps {\n categories: FilterCategoryView[];\n filters: DataRendererFilterState;\n countsByCategory: Record<string, Record<string, number>>;\n onToggleFilterValue: (attributeId: string, value: string) => void;\n onClearFilter: (attributeId: string) => void;\n onClearAll: () => void;\n}\n\nconst getActiveFilterCount = (filters: DataRendererFilterState) =>\n Object.values(filters).reduce((sum, values) => sum + (values?.length ?? 0), 0);\n\nexport const FilterMenu = (props: FilterMenuProps) => {\n const { categories, filters, countsByCategory, onToggleFilterValue, onClearFilter, onClearAll } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [activeCategoryId, setActiveCategoryId] = useState<string>(categories[0]?.id ?? \"\");\n\n const activeCategory = categories.find((category) => category.id === activeCategoryId) ?? categories[0];\n\n const activeFilterCount = getActiveFilterCount(filters);\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}\n onOpenChange={(event) => setOpen(event.open)}\n >\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Filter rows\" variant=\"ghost\" size=\"sm\">\n <HStack gap=\"2xs\">\n <Icon as={Filter} boxSize=\"14px\" />\n {activeFilterCount > 0 ? <Badge variant=\"solid\">{activeFilterCount}</Badge> : null}\n </HStack>\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"420px\" p=\"0\" bg=\"bg\" overflow=\"hidden\">\n <HStack align=\"stretch\" gap=\"0\" minH=\"320px\">\n <Stack minWidth=\"180px\" borderRightWidth=\"1px\" borderColor=\"border.muted\" p=\"sm\" gap=\"2xs\">\n <HStack justifyContent=\"space-between\">\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n Filters\n </Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={onClearAll}>\n Clear all\n </Button>\n </HStack>\n {categories.map((category) => {\n const selectedValues = filters[category.id] ?? [];\n return (\n <Button\n key={category.id}\n variant={activeCategoryId === category.id ? \"subtle\" : \"ghost\"}\n size=\"sm\"\n justifyContent=\"space-between\"\n onClick={() => setActiveCategoryId(category.id)}\n >\n <Text>{category.label}</Text>\n {selectedValues.length > 0 ? <Badge variant=\"subtle\">{selectedValues.length}</Badge> : null}\n </Button>\n );\n })}\n </Stack>\n\n <Stack flex=\"1\" p=\"sm\" gap=\"sm\">\n {activeCategory ? (\n <>\n <HStack justifyContent=\"space-between\">\n <Text textStyle=\"label/S/medium\">{activeCategory.label}</Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={() => onClearFilter(activeCategory.id)}>\n Clear\n </Button>\n </HStack>\n <Stack gap=\"2xs\">\n {activeCategory.options.map((option) => {\n const checked = (filters[activeCategory.id] ?? []).includes(option.value);\n const count = countsByCategory[activeCategory.id]?.[option.value] ?? 0;\n\n return (\n <Button\n key={option.value}\n role=\"checkbox\"\n aria-checked={checked}\n variant=\"ghost\"\n size=\"sm\"\n width=\"full\"\n px=\"xs\"\n py=\"2xs\"\n height=\"auto\"\n borderRadius=\"sm\"\n justifyContent=\"flex-start\"\n onClick={() => onToggleFilterValue(activeCategory.id, option.value)}\n >\n <Box\n boxSize=\"4\"\n borderWidth=\"1px\"\n borderRadius=\"xs\"\n borderColor={checked ? \"fg\" : \"border\"}\n bg={checked ? \"fg\" : \"transparent\"}\n color={checked ? \"bg\" : \"transparent\"}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n >\n {checked ? <Icon as={Check} boxSize=\"3\" /> : null}\n </Box>\n <HStack gap=\"2xs\" justifyContent=\"space-between\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {count}\n </Text>\n </HStack>\n </Button>\n );\n })}\n </Stack>\n </>\n ) : null}\n </Stack>\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport { omitFilterCategory } from \"./data-renderer-helpers\";\nimport {\n type DataRendererFilterState,\n type DataRendererSettings,\n DEFAULT_DATA_RENDERER_SETTINGS,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface DataRendererSnapshot {\n settings: DataRendererSettings;\n filters: DataRendererFilterState;\n expandedGroups: Record<string, boolean>;\n}\n\ninterface DataRendererStoreInitialState {\n settings?: Partial<DataRendererSettings>;\n filters?: DataRendererFilterState;\n expandedGroups?: Record<string, boolean>;\n}\n\ninterface DataRendererState extends DataRendererSnapshot {\n setViewMode: (viewMode: DataRendererSettings[\"viewMode\"]) => void;\n setColumnGrouping: (columnGrouping: DataRendererSettings[\"columnGrouping\"]) => void;\n setRowGrouping: (rowGrouping: DataRendererSettings[\"rowGrouping\"]) => void;\n setOrdering: (ordering: DataRendererSettings[\"ordering\"]) => void;\n setOrderingAttributeId: (attributeId: DataRendererSettings[\"ordering\"][\"attributeId\"]) => void;\n setDisplayProperties: (displayProperties: string[]) => void;\n toggleSortDirection: () => void;\n toggleDisplayProperty: (property: string) => void;\n setFilter: (attributeId: string, values: string[]) => void;\n toggleFilterValue: (attributeId: string, value: string) => void;\n clearFilter: (attributeId: string) => void;\n clearAllFilters: () => void;\n setExpandedGroup: (groupId: string, isExpanded: boolean) => void;\n reset: () => void;\n}\n\ninterface CreateDataRendererStoreOptions {\n storageKey: string;\n initialState?: DataRendererStoreInitialState;\n}\n\nconst WORKSPACE_STORE_NAMESPACE = \"pstdio/ui/data-renderer\";\n\nconst toStorageName = (storageKey: string) => `${WORKSPACE_STORE_NAMESPACE}/${storageKey}`;\n\nconst DEFAULT_SNAPSHOT: DataRendererSnapshot = {\n settings: DEFAULT_DATA_RENDERER_SETTINGS,\n filters: {},\n expandedGroups: {},\n};\n\nconst createSnapshot = (initialState?: DataRendererStoreInitialState): DataRendererSnapshot => ({\n settings: { ...DEFAULT_SNAPSHOT.settings, ...(initialState?.settings ?? {}) },\n filters: initialState?.filters ?? DEFAULT_SNAPSHOT.filters,\n expandedGroups: initialState?.expandedGroups ?? DEFAULT_SNAPSHOT.expandedGroups,\n});\n\nconst toggleValue = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\n// Strip the legacy \"tag:\" prefix used before attributes became first-class.\nconst stripTagPrefix = (id: string) => (id.startsWith(\"tag:\") ? id.slice(4) : id);\n\nconst migrateSettings = (settings: Record<string, unknown>): DataRendererSettings => {\n const orderingRaw = settings.ordering as Record<string, unknown> | undefined;\n const orderingId =\n typeof orderingRaw?.attributeId === \"string\"\n ? (orderingRaw.attributeId as string)\n : typeof orderingRaw?.field === \"string\"\n ? stripTagPrefix(orderingRaw.field as string)\n : MANUAL_ORDERING;\n const orderingDirection = (\n orderingRaw?.direction === \"desc\" ? \"desc\" : \"asc\"\n ) as DataRendererSettings[\"ordering\"][\"direction\"];\n\n const columnGrouping =\n typeof settings.columnGrouping === \"string\" ? stripTagPrefix(settings.columnGrouping) : NO_GROUPING;\n const rowGrouping = typeof settings.rowGrouping === \"string\" ? stripTagPrefix(settings.rowGrouping) : NO_GROUPING;\n const displayProperties = Array.isArray(settings.displayProperties)\n ? (settings.displayProperties as unknown[])\n .filter((entry): entry is string => typeof entry === \"string\")\n .map(stripTagPrefix)\n : [];\n\n return {\n viewMode: settings.viewMode === \"list\" ? \"list\" : \"board\",\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId === \"manual\" ? MANUAL_ORDERING : orderingId, direction: orderingDirection },\n displayProperties,\n };\n};\n\nconst migrateFilters = (filters: Record<string, unknown>): DataRendererFilterState => {\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!Array.isArray(values)) continue;\n const stringValues = values.filter((value): value is string => typeof value === \"string\");\n if (stringValues.length === 0) continue;\n next[stripTagPrefix(id)] = stringValues;\n }\n return next;\n};\n\nexport const createDataRendererStore = (options: CreateDataRendererStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = createSnapshot(initialState);\n\n return createStore<DataRendererState>()(\n persist(\n (set) => ({\n ...snapshot,\n setViewMode: (viewMode) => set((state) => ({ ...state, settings: { ...state.settings, viewMode } })),\n setColumnGrouping: (columnGrouping) =>\n set((state) => ({ ...state, settings: { ...state.settings, columnGrouping } })),\n setRowGrouping: (rowGrouping) => set((state) => ({ ...state, settings: { ...state.settings, rowGrouping } })),\n setOrdering: (ordering) => set((state) => ({ ...state, settings: { ...state.settings, ordering } })),\n setOrderingAttributeId: (attributeId) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, ordering: { ...state.settings.ordering, attributeId } },\n })),\n setDisplayProperties: (displayProperties) =>\n set((state) => ({ ...state, settings: { ...state.settings, displayProperties } })),\n toggleSortDirection: () =>\n set((state) => ({\n ...state,\n settings: {\n ...state.settings,\n ordering: {\n ...state.settings.ordering,\n direction: state.settings.ordering.direction === \"asc\" ? \"desc\" : \"asc\",\n },\n },\n })),\n toggleDisplayProperty: (property) =>\n set((state) => {\n const displayProperties = state.settings.displayProperties.includes(property)\n ? state.settings.displayProperties.filter((value) => value !== property)\n : [...state.settings.displayProperties, property];\n return { ...state, settings: { ...state.settings, displayProperties } };\n }),\n setFilter: (attributeId, values) =>\n set((state) => ({ ...state, filters: { ...state.filters, [attributeId]: values } })),\n toggleFilterValue: (attributeId, value) =>\n set((state) => {\n const currentValues = state.filters[attributeId] ?? [];\n const nextValues = toggleValue(currentValues, value);\n const nextFilters =\n nextValues.length === 0\n ? omitFilterCategory(state.filters, attributeId)\n : { ...state.filters, [attributeId]: nextValues };\n return { ...state, filters: nextFilters };\n }),\n clearFilter: (attributeId) =>\n set((state) => ({ ...state, filters: omitFilterCategory(state.filters, attributeId) })),\n clearAllFilters: () => set((state) => ({ ...state, filters: {} })),\n setExpandedGroup: (groupId, isExpanded) =>\n set((state) => ({ ...state, expandedGroups: { ...state.expandedGroups, [groupId]: isExpanded } })),\n reset: () => set(snapshot),\n }),\n {\n name: toStorageName(storageKey),\n version: 2,\n migrate: (persisted, version) => {\n if (!persisted || typeof persisted !== \"object\") return persisted as DataRendererSnapshot;\n const state = persisted as {\n settings?: Record<string, unknown>;\n filters?: Record<string, unknown>;\n expandedGroups?: Record<string, boolean>;\n };\n if (version >= 2) {\n const snapshot = state as unknown as DataRendererSnapshot;\n return { ...snapshot, expandedGroups: snapshot.expandedGroups ?? {} };\n }\n return {\n settings: migrateSettings(state.settings ?? {}),\n filters: migrateFilters(state.filters ?? {}),\n expandedGroups: {},\n };\n },\n storage: createJSONStorage(createBrowserStorage),\n partialize: (state) => ({\n settings: state.settings,\n filters: state.filters,\n expandedGroups: state.expandedGroups,\n }),\n },\n ),\n );\n};\n\nconst workspaceStoreRegistry = new Map<string, ReturnType<typeof createDataRendererStore>>();\n\nexport const getDataRendererStore = (storageKey: string, initialState?: DataRendererStoreInitialState) => {\n const existingStore = workspaceStoreRegistry.get(storageKey);\n if (existingStore) return existingStore;\n\n const store = createDataRendererStore({ storageKey, initialState });\n workspaceStoreRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useDataRendererStore = <T>(\n storageKey: string,\n selector: (state: DataRendererState) => T,\n initialState?: DataRendererStoreInitialState,\n) => {\n const store = getDataRendererStore(storageKey, initialState);\n return useStore(store, selector);\n};\n\nexport type { DataRendererSnapshot, DataRendererState, DataRendererStoreInitialState };\n","import { useEffect, useReducer } from \"react\";\n\nimport type { AttributeDescriptor, EnumOptionsSource } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\nconst collectSources = (attributes: AttributeDescriptor[]): EnumOptionsSource[] => {\n const sources: EnumOptionsSource[] = [];\n for (const attribute of attributes) {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") continue;\n if (isEnumOptionsSource(attribute.type.options)) sources.push(attribute.type.options);\n }\n return sources;\n};\n\n/**\n * Returns the same descriptors with every source-backed enum's options\n * replaced by a fresh `getSnapshot()` array. Pure — call from anywhere that\n * needs a normalized view of the schema.\n */\nexport const resolveAttributeOptions = (attributes: AttributeDescriptor[]): AttributeDescriptor[] =>\n attributes.map((attribute) => {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") return attribute;\n if (!isEnumOptionsSource(attribute.type.options)) return attribute;\n return { ...attribute, type: { ...attribute.type, options: attribute.type.options.getSnapshot() } };\n });\n\n/**\n * Subscribes to every source-backed enum in `attributes` and returns the\n * resolved descriptors (options materialized to plain arrays). When any\n * source's listener fires the component rerenders, so downstream renders see\n * the new snapshot automatically.\n */\nexport const useResolvedAttributes = (attributes: AttributeDescriptor[]) => {\n const [, forceRender] = useReducer((tick: number) => tick + 1, 0);\n\n useEffect(() => {\n const sources = collectSources(attributes);\n if (sources.length === 0) return;\n const refresh = () => forceRender();\n const unsubscribes = sources.map((source) => source.subscribe(refresh));\n return () => {\n for (const dispose of unsubscribes) dispose();\n };\n }, [attributes]);\n\n return resolveAttributeOptions(attributes);\n};\n","import { Box, HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { countFilterValues } from \"./data-renderer-grouping\";\nimport {\n buildDisplayPropertyOptions,\n buildFilterCategories,\n buildGroupingOptions,\n buildOrderingOptions,\n} from \"./data-renderer-helpers\";\nimport { DisplayMenu } from \"./display-menu\";\nimport { FilterMenu } from \"./filter-menu\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\nexport interface DataRendererToolbarProps<TRow extends DataRendererRow = DataRendererRow> {\n rows: TRow[];\n storageKey: string;\n attributes: AttributeDescriptor[];\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n leading?: ReactNode;\n align?: \"split\" | \"end\";\n}\n\nexport const DataRendererToolbar = <TRow extends DataRendererRow>(props: DataRendererToolbarProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n defaultSettings,\n defaultFilters,\n leading,\n align = \"split\",\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const groupingOptions = buildGroupingOptions(attributes);\n const orderingOptions = buildOrderingOptions(attributes);\n const displayPropertyOptions = buildDisplayPropertyOptions(attributes);\n\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n const setViewMode = useDataRendererStore(storageKey, (state) => state.setViewMode, initialState);\n const setColumnGrouping = useDataRendererStore(storageKey, (state) => state.setColumnGrouping, initialState);\n const setRowGrouping = useDataRendererStore(storageKey, (state) => state.setRowGrouping, initialState);\n const setOrderingAttributeId = useDataRendererStore(\n storageKey,\n (state) => state.setOrderingAttributeId,\n initialState,\n );\n const toggleSortDirection = useDataRendererStore(storageKey, (state) => state.toggleSortDirection, initialState);\n const toggleDisplayProperty = useDataRendererStore(storageKey, (state) => state.toggleDisplayProperty, initialState);\n const toggleFilterValue = useDataRendererStore(storageKey, (state) => state.toggleFilterValue, initialState);\n const clearFilter = useDataRendererStore(storageKey, (state) => state.clearFilter, initialState);\n const clearAllFilters = useDataRendererStore(storageKey, (state) => state.clearAllFilters, initialState);\n\n const categoryOptions = buildFilterCategories(attributes, rows);\n const countsByCategory = Object.fromEntries(\n categoryOptions.map((category) => [category.id, countFilterValues(rows, category.id, attributes)]),\n );\n\n return (\n <HStack\n gap=\"2xs\"\n minW=\"0\"\n w={align === \"split\" ? \"full\" : undefined}\n flexShrink={0}\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n padding=\"2xs\"\n >\n {leading}\n {align === \"split\" ? <Box flex=\"1\" /> : null}\n <FilterMenu\n categories={categoryOptions}\n filters={filters}\n countsByCategory={countsByCategory}\n onToggleFilterValue={toggleFilterValue}\n onClearFilter={clearFilter}\n onClearAll={clearAllFilters}\n />\n <DisplayMenu\n settings={settings}\n groupingOptions={groupingOptions}\n orderingOptions={orderingOptions}\n displayPropertyOptions={displayPropertyOptions}\n onViewModeChange={setViewMode}\n onColumnGroupingChange={setColumnGrouping}\n onRowGroupingChange={setRowGrouping}\n onOrderingAttributeIdChange={setOrderingAttributeId}\n onSortDirectionToggle={toggleSortDirection}\n onDisplayPropertyToggle={toggleDisplayProperty}\n />\n </HStack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type {\n DataRendererBoardColumn,\n DataRendererBoardColumnAction,\n DataRendererBoardGroup,\n} from \"./data-renderer-board\";\nimport { DataRendererContent } from \"./data-renderer-content\";\nimport { type DataRendererColumnGroup, filterRows, groupRows, orderRows } from \"./data-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveKnownColumnKeys,\n resolveListDropTargetColumnKey,\n} from \"./data-renderer-helpers\";\nimport type { DataRendererListItem } from \"./data-renderer-list\";\nimport { DataRendererToolbar } from \"./data-renderer-toolbar\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\n/** Board-column behavior and menu configuration for a resolved column group. */\nexport interface BoardColumnConfig {\n /** Chakra color palette used for the column header and group badges. */\n color?: string;\n canDragIn?: boolean;\n canDragOut?: boolean;\n canCreate?: boolean;\n actions?: DataRendererBoardColumnAction[];\n}\n\n/** Switchable list/board renderer for rows with typed attributes, filtering, grouping, and ordering. */\nexport interface DataRendererProps<TRow extends DataRendererRow = DataRendererRow> {\n /** Stable rows to render. Each row must have an id, title, and attributes map. */\n rows: TRow[];\n /** Persistent key used by the renderer store for view, filter, grouping, ordering, and list expansion settings. */\n storageKey: string;\n /** Attribute descriptors that define display, filtering, grouping, ordering, and board columns. */\n attributes: AttributeDescriptor[];\n selectedRowId?: string | null;\n emptyState?: ReactNode;\n emptyTitle?: string;\n emptyDescription?: string;\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n hideToolbar?: boolean;\n toolbarLeading?: ReactNode;\n onRowClick?: (row: TRow) => void;\n /** Called when a row attribute changes through drag/drop, board movement, or inline controls. */\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => void;\n /** Called for manual row ordering when a dragged row is dropped before another row. */\n onReorder?: (rowId: string, beforeRowId?: string) => void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\ninterface BuildListItemsInput<TRow extends DataRendererRow> {\n settings: DataRendererSettings;\n visibleRows: TRow[];\n grouped: DataRendererColumnGroup[];\n attributes: AttributeDescriptor[];\n onRowClick?: (row: TRow) => void;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => void;\n onReorder?: (rowId: string, beforeRowId?: string) => void;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nconst buildListItems = <TRow extends DataRendererRow>(input: BuildListItemsInput<TRow>): DataRendererListItem[] => {\n const {\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n } = input;\n\n const supportsManualReorder = settings.ordering.attributeId === MANUAL_ORDERING;\n const getGroupColorPalette = (attributeId: string, key: string) => {\n const descriptor = findAttribute(attributes, attributeId);\n return descriptor ? findEnumOption(descriptor.type, key)?.color : undefined;\n };\n\n const toListItem = (row: TRow, placement?: { columnKey?: string; rowKey?: string }): DataRendererListItem => ({\n id: row.id,\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n contextMenuActions: getRowContextMenuActions?.(row),\n onClick: () => onRowClick?.(row),\n draggable: Boolean(onAttributeChange || onReorder),\n onDropRow:\n supportsManualReorder && (onAttributeChange || onReorder)\n ? (draggedId) => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (targetColumnKey && settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n onAttributeChange(draggedId, settings.columnGrouping, targetColumnKey);\n }\n if (settings.rowGrouping !== NO_GROUPING && placement?.rowKey && onAttributeChange) {\n onAttributeChange(draggedId, settings.rowGrouping, placement.rowKey);\n }\n onReorder?.(draggedId, row.id);\n }\n : undefined,\n });\n\n const toSubgroupListItem = (\n subgroup: { key: string; label: string; rows: DataRendererRow[] },\n parent?: { columnKey: string },\n ): DataRendererListItem => ({\n id: parent ? `group::${parent.columnKey}::${subgroup.key}` : `group::${subgroup.key}`,\n title: subgroup.label,\n countBadge: subgroup.rows.length,\n countColorPalette: getGroupColorPalette(parent ? settings.rowGrouping : settings.columnGrouping, subgroup.key),\n onDropRow:\n onAttributeChange && settings.columnGrouping !== NO_GROUPING\n ? (draggedId) => {\n const columnKey = parent?.columnKey ?? subgroup.key;\n onAttributeChange(draggedId, settings.columnGrouping, columnKey);\n if (settings.rowGrouping !== NO_GROUPING && parent) {\n onAttributeChange(draggedId, settings.rowGrouping, subgroup.key);\n }\n }\n : undefined,\n children: orderRows(subgroup.rows, settings.ordering, attributes).map((row) =>\n toListItem(row as TRow, {\n columnKey: parent?.columnKey ?? subgroup.key,\n rowKey: parent ? subgroup.key : undefined,\n }),\n ),\n });\n\n if (settings.columnGrouping === NO_GROUPING) {\n return orderRows(visibleRows, settings.ordering, attributes).map((row) => toListItem(row as TRow));\n }\n\n return grouped.map((column) => {\n if (column.subgroups.length > 0) {\n return {\n id: `group::${column.key}`,\n title: column.label,\n countBadge: column.rows.length,\n countColorPalette: getGroupColorPalette(settings.columnGrouping, column.key),\n onDropRow: onAttributeChange\n ? (draggedId: string) => onAttributeChange(draggedId, settings.columnGrouping, column.key)\n : undefined,\n children: column.subgroups.map((subgroup) => toSubgroupListItem(subgroup, { columnKey: column.key })),\n } satisfies DataRendererListItem;\n }\n\n return toSubgroupListItem(column);\n });\n};\n\nexport const DataRenderer = <TRow extends DataRendererRow>(props: DataRendererProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n selectedRowId = null,\n emptyState,\n emptyTitle = \"No rows found\",\n emptyDescription = \"Try changing filters or display settings.\",\n defaultSettings,\n defaultFilters,\n onRowClick,\n onAttributeChange,\n onReorder,\n onCreateRow,\n onColumnAction,\n getBoardColumnConfig,\n getRowContextMenuActions,\n hideToolbar = false,\n toolbarLeading,\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n const expandedGroups = useDataRendererStore(storageKey, (state) => state.expandedGroups, initialState);\n const setExpandedGroup = useDataRendererStore(storageKey, (state) => state.setExpandedGroup, initialState);\n\n const visibleRows = filterRows(rows, filters, attributes) as TRow[];\n\n const knownColumnKeys = resolveKnownColumnKeys(settings.columnGrouping, attributes, filters);\n\n const grouped = groupRows(visibleRows, {\n attributes,\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys,\n });\n\n const listItems = buildListItems({\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n });\n\n const toBoardItems = (boardRows: DataRendererRow[]) =>\n boardRows.map((row) => ({\n id: row.id,\n contextMenuActions: getRowContextMenuActions?.(row as TRow),\n cardProps: {\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n onClick: () => onRowClick?.(row as TRow),\n },\n }));\n\n const columnGroupingDescriptor = findAttribute(attributes, settings.columnGrouping);\n\n const boardColumns: DataRendererBoardColumn[] = grouped.map((column) => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n const orderedRows = orderRows(column.rows, settings.ordering, attributes);\n // Column color follows the enum option when the contribution does not\n // provide one, while row display badges stay visually neutral.\n const enumColor = columnGroupingDescriptor\n ? findEnumOption(columnGroupingDescriptor.type, column.key)?.color\n : undefined;\n\n const groups: DataRendererBoardGroup[] | undefined =\n column.subgroups.length > 0\n ? column.subgroups.map((subgroup) => ({\n key: subgroup.key,\n label: subgroup.label,\n items: toBoardItems(orderRows(subgroup.rows, settings.ordering, attributes)),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color ?? enumColor,\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(orderedRows),\n groups,\n } satisfies DataRendererBoardColumn;\n });\n\n const handleBoardMoveItem = (rowId: string, targetColumnId: string) => {\n if (settings.columnGrouping === NO_GROUPING || !onAttributeChange) return;\n onAttributeChange(rowId, settings.columnGrouping, targetColumnId);\n };\n\n const handleBoardMoveToGroup = (rowId: string, targetGroupKey: string) => {\n if (settings.rowGrouping === NO_GROUPING || !onAttributeChange) return;\n onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n };\n\n return (\n <Stack height=\"100%\" minH=\"0\" gap=\"0\">\n {hideToolbar ? null : (\n <DataRendererToolbar\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={defaultSettings}\n defaultFilters={defaultFilters}\n leading={toolbarLeading}\n />\n )}\n\n <DataRendererContent\n viewMode={settings.viewMode}\n boardColumns={boardColumns}\n listItems={listItems}\n listExpandedGroups={expandedGroups}\n selectedRowId={selectedRowId}\n emptyState={emptyState}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n onBoardMoveItem={handleBoardMoveItem}\n onBoardMoveToGroup={handleBoardMoveToGroup}\n onCreateRow={onCreateRow}\n onColumnAction={onColumnAction}\n onListExpandedGroupChange={setExpandedGroup}\n listKey={`${settings.columnGrouping}:${settings.rowGrouping}`}\n />\n </Stack>\n );\n};\n","import { Button, CloseButton, Dialog, Stack, Text } from \"@chakra-ui/react\";\nimport { useState } from \"react\";\n\ninterface DeleteConfirmationModalProps {\n open: boolean;\n onClose: () => void;\n onDelete: () => void | Promise<void>;\n headline?: string;\n notificationText?: string;\n buttonText?: string;\n}\n\nexport type { DeleteConfirmationModalProps };\n\nexport const DeleteConfirmationModal = (props: DeleteConfirmationModalProps) => {\n const [isDeleting, setIsDeleting] = useState(false);\n const { headline, buttonText, notificationText, onDelete, open, onClose } = props;\n\n const handleDelete = async () => {\n setIsDeleting(true);\n\n try {\n await onDelete();\n onClose();\n } catch {\n // Errors surface through parent state.\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onClose}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Text textStyle=\"heading/M\">{headline}</Text>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>{notificationText}</Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"1\">\n <Button onClick={onClose}>Close</Button>\n <Button loading={isDeleting} variant=\"solid\" colorPalette=\"red\" onClick={handleDelete}>\n {buttonText}\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","export const LARGE_DIFF_LINE_THRESHOLD = 1000;\n\nconst generatedDiffFileNames = new Set([\"bun.lock\", \"bun.lockb\", \"package-lock.json\", \"pnpm-lock.yaml\", \"yarn.lock\"]);\n\n// Extensions whose byte content cannot be meaningfully shown as a unified diff.\n// SVG is intentionally excluded — it is text-based XML and benefits from a line diff.\nconst binaryDiffExtensions = new Set([\n \"avif\",\n \"bmp\",\n \"gif\",\n \"heic\",\n \"ico\",\n \"jpeg\",\n \"jpg\",\n \"png\",\n \"tif\",\n \"tiff\",\n \"webp\",\n \"pdf\",\n \"zip\",\n \"tar\",\n \"gz\",\n \"tgz\",\n \"rar\",\n \"7z\",\n \"exe\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"wasm\",\n \"class\",\n \"jar\",\n \"mp3\",\n \"mp4\",\n \"mov\",\n \"ogg\",\n \"wav\",\n \"webm\",\n \"flac\",\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n]);\n\nconst imageDiffExtensions = new Set([\"avif\", \"bmp\", \"gif\", \"heic\", \"ico\", \"jpeg\", \"jpg\", \"png\", \"tif\", \"tiff\", \"webp\"]);\n\nconst getExtension = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n const ext = fileName.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\nexport const getDiffLineCount = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return (input.additions ?? 0) + (input.deletions ?? 0);\n};\n\nexport const isLargeDiffContent = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return getDiffLineCount(input) > LARGE_DIFF_LINE_THRESHOLD;\n};\n\nexport const isGeneratedDiffPath = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n\n return generatedDiffFileNames.has(fileName) || fileName.endsWith(\".min.js\") || fileName.endsWith(\".generated.ts\");\n};\n\nexport const isBinaryDiffPath = (path: string) => {\n const ext = getExtension(path);\n return ext.length > 0 && binaryDiffExtensions.has(ext);\n};\n\nexport const isImageDiffPath = (path: string) => {\n const ext = getExtension(path);\n return ext.length > 0 && imageDiffExtensions.has(ext);\n};\n","import { Box, Button } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffEditor } from \"./diff-editor\";\nimport { getDiffLineCount, isBinaryDiffPath, isImageDiffPath } from \"./diff-size\";\nimport { type BuiltDiffViewData, buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardBodyProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isLargeDiff: boolean;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardBodyModelInput extends DiffCardBodyProps {\n buildViewData?: typeof buildDiffViewData;\n}\n\nexport const createDiffCardBodyModel = (input: DiffCardBodyModelInput) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n buildViewData,\n } = input;\n\n if (isBinaryDiffPath(filePath)) {\n return {\n kind: \"binary\" as const,\n filePath,\n isImage: isImageDiffPath(filePath),\n };\n }\n\n if (isLargeDiff && !hasOptedIntoLargeDiff) {\n return {\n kind: \"placeholder\" as const,\n filePath,\n renderedLineCount: getDiffLineCount(diff),\n onShowFullDiff,\n };\n }\n\n const diffViewData = (buildViewData ?? buildDiffViewData)({\n original: oldContent,\n modified: newContent,\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n return {\n kind: \"editor\" as const,\n diffViewData,\n sideBySide: diffViewMode === \"split\",\n };\n};\n\nexport const DiffCardBody = (props: DiffCardBodyProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n const model = createDiffCardBodyModel({\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode,\n });\n\n return (\n <Box bg=\"bg\" borderBottomRadius=\"xs\" overflow=\"hidden\">\n {model.kind === \"editor\" ? (\n <DiffEditor\n original={oldContent}\n modified={newContent}\n oldPath={diff.oldPath}\n newPath={diff.newPath}\n sideBySide={model.sideBySide}\n data={model.diffViewData}\n />\n ) : model.kind === \"binary\" ? (\n <BinaryDiffPlaceholder isImage={model.isImage} />\n ) : (\n <LargeDiffPlaceholder\n filePath={model.filePath}\n renderedLineCount={model.renderedLineCount}\n onShowFullDiff={model.onShowFullDiff}\n />\n )}\n </Box>\n );\n};\n\ninterface LargeDiffPlaceholderProps {\n filePath: string;\n renderedLineCount: number;\n onShowFullDiff?: () => void;\n}\n\nconst LargeDiffPlaceholder = (props: LargeDiffPlaceholderProps) => {\n const { filePath, onShowFullDiff } = props;\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title=\"Large diffs are hidden by default\" paddingY=\"sm\">\n {onShowFullDiff ? (\n <Button size=\"xs\" variant=\"outline\" aria-label={`Render full diff for ${filePath}`} onClick={onShowFullDiff}>\n Show full diff\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\ninterface BinaryDiffPlaceholderProps {\n isImage: boolean;\n}\n\nconst BinaryDiffPlaceholder = (props: BinaryDiffPlaceholderProps) => {\n const { isImage } = props;\n const title = isImage ? \"Image diffs are not shown\" : \"Binary diffs are not shown\";\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title={title} paddingY=\"sm\" />\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Skeleton, Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\n\ninterface DeferredDiffLoadProps {\n title: string;\n actionLabel?: string;\n isLoadingDiff: boolean;\n onAction?: () => void;\n}\n\nexport const DeferredDiffLoad = (props: DeferredDiffLoadProps) => {\n const { title, actionLabel, isLoadingDiff, onAction } = props;\n\n return (\n <Box bg=\"bg\" p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\">\n <EmptyState title={title} paddingY=\"sm\">\n {actionLabel ? (\n <Button size=\"xs\" variant=\"outline\" loading={isLoadingDiff} onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nconst loadingDiffContentRows = [\"first\", \"second\", \"third\"] as const;\n\nexport const LoadingDiffContent = () => (\n <Stack\n h=\"280px\"\n bg=\"bg\"\n borderTop=\"1px solid\"\n borderColor=\"border.muted\"\n p=\"xs\"\n gap=\"2xs\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading diff\"\n >\n {loadingDiffContentRows.map((row) => (\n <Skeleton key={row} h=\"20px\" w=\"full\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { DiffCardBody } from \"./diff-card-body\";\nimport { DeferredDiffLoad, LoadingDiffContent } from \"./diff-card-load-state\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardContentProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isExpanded: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n hasDiffContent: boolean;\n canLoadDiff: boolean;\n shouldAutoLoadDiff: boolean;\n loadError: boolean;\n isLoadingDiff: boolean;\n onLoadDiff: () => Promise<void>;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DeferredDiffLoadStateInput {\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n loadError: boolean;\n canLoadDiff: boolean;\n onLoadDiff: () => Promise<void>;\n onShowFullDiff?: () => void;\n}\n\nconst buildDeferredDiffLoadState = (input: DeferredDiffLoadStateInput) => {\n const { isLargeDiff, isGeneratedDiff, loadError, canLoadDiff, onLoadDiff, onShowFullDiff } = input;\n let title = \"Diff content is not loaded yet.\";\n let actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n let onAction: (() => void) | undefined = canLoadDiff ? () => void onLoadDiff() : undefined;\n\n if (isLargeDiff) {\n title = \"Large diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Show full diff\" : undefined;\n onAction = () => {\n onShowFullDiff?.();\n void onLoadDiff();\n };\n }\n\n if (isGeneratedDiff) {\n title = \"Generated diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n if (loadError) {\n title = \"Diff failed to load. Try again.\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n return { title, actionLabel, onAction };\n};\n\nexport const DiffCardContent = (props: DiffCardContentProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isExpanded,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n hasDiffContent,\n canLoadDiff,\n shouldAutoLoadDiff,\n loadError,\n isLoadingDiff,\n onLoadDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n if (!isExpanded) return null;\n\n if (isBinaryDiff) {\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={false}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n }\n\n if (!hasDiffContent && !shouldAutoLoadDiff) {\n const { title, actionLabel, onAction } = buildDeferredDiffLoadState({\n isLargeDiff,\n isGeneratedDiff,\n loadError,\n canLoadDiff,\n onLoadDiff,\n onShowFullDiff,\n });\n\n return (\n <DeferredDiffLoad title={title} actionLabel={actionLabel} isLoadingDiff={isLoadingDiff} onAction={onAction} />\n );\n }\n\n if (shouldAutoLoadDiff) {\n return <LoadingDiffContent />;\n }\n\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={isLargeDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n};\n","import { Box, Grid, IconButton, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport { DiffCardContent } from \"./diff-card-content\";\nimport { isBinaryDiffPath, isGeneratedDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport type { DiffViewMode } from \"./types\";\n\nexport interface Diff {\n change: \"added\" | \"deleted\" | \"modified\" | \"renamed\" | \"copied\" | \"permissionChange\";\n oldPath?: string;\n newPath?: string;\n oldContent?: string;\n newContent?: string;\n additions?: number;\n deletions?: number;\n}\n\ninterface DiffCardProps {\n diff: Diff;\n isSelected?: boolean;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n onSelect?: () => void;\n onLoadDiff?: (path: string) => Promise<void>;\n hasOptedIntoLargeDiff?: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardHeaderProps {\n diff: Diff;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n}\n\nexport const shouldAutoLoadDiffContent = (input: {\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const { isExpanded, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, requestedPath, filePath } = input;\n\n return (\n isExpanded && !hasDiffContent && !isLargeDiff && !isGeneratedDiff && !isBinaryDiff && requestedPath !== filePath\n );\n};\n\nexport const resolveRequestedDiffPath = (input: {\n requestedPath: string | null;\n filePath: string;\n hasDiffContent: boolean;\n}) => {\n const { requestedPath, filePath, hasDiffContent } = input;\n\n if (requestedPath === filePath && hasDiffContent) {\n return null;\n }\n\n return requestedPath;\n};\n\nconst useDiffContentLoader = (input: {\n filePath: string;\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, onLoadDiff } =\n input;\n const [isLoadingDiff, setLoadingDiff] = useState(false);\n const [requestedPath, setRequestedPath] = useState<string | null>(null);\n const [loadError, setLoadError] = useState(false);\n\n const loadDiff = async () => {\n if (!onLoadDiff || isLoadingDiff) return;\n\n setRequestedPath(filePath);\n setLoadError(false);\n setLoadingDiff(true);\n try {\n await onLoadDiff(filePath);\n } catch {\n setRequestedPath(null);\n setLoadError(true);\n } finally {\n setLoadingDiff(false);\n }\n };\n\n const shouldAutoLoadDiff = shouldAutoLoadDiffContent({\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n requestedPath,\n filePath,\n });\n\n useEffect(() => {\n setRequestedPath((current) => resolveRequestedDiffPath({ requestedPath: current, filePath, hasDiffContent }));\n }, [filePath, hasDiffContent]);\n\n useEffect(() => {\n if (!onLoadDiff || !shouldAutoLoadDiff || loadError) {\n return;\n }\n\n void loadDiff();\n });\n\n return {\n isLoadingDiff,\n loadError,\n shouldAutoLoadDiff: Boolean(onLoadDiff) && shouldAutoLoadDiff && !loadError,\n loadDiff,\n };\n};\n\nexport const DiffCard = (props: DiffCardProps) => {\n const {\n diff,\n isSelected = false,\n isExpanded = true,\n onToggleExpanded,\n onSelect,\n onLoadDiff,\n hasOptedIntoLargeDiff = false,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const oldContent = diff.oldContent || \"\";\n const newContent = diff.newContent || \"\";\n const isLargeDiff = isLargeDiffContent(diff);\n const isGeneratedDiff = isGeneratedDiffPath(filePath);\n const isBinaryDiff = isBinaryDiffPath(filePath);\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const { isLoadingDiff, loadError, shouldAutoLoadDiff, loadDiff } = useDiffContentLoader({\n filePath,\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff: isLargeDiff && !hasOptedIntoLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n onLoadDiff,\n });\n\n return (\n <Box\n data-testid=\"diff-card\"\n border=\"1px solid\"\n borderColor={isSelected ? \"border.accent\" : \"border.muted\"}\n borderRadius=\"xs\"\n overflow=\"visible\"\n bg=\"bg\"\n width=\"100%\"\n maxW=\"100%\"\n transition=\"border-color 0.14s ease\"\n _hover={{ borderColor: \"border.accent\" }}\n onClick={onSelect}\n >\n <DiffCardHeader diff={diff} isExpanded={isExpanded} onToggleExpanded={onToggleExpanded} />\n\n <DiffCardContent\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isExpanded={isExpanded}\n isLargeDiff={isLargeDiff}\n isGeneratedDiff={isGeneratedDiff}\n isBinaryDiff={isBinaryDiff}\n hasDiffContent={hasDiffContent}\n canLoadDiff={Boolean(onLoadDiff)}\n shouldAutoLoadDiff={shouldAutoLoadDiff}\n loadError={loadError}\n isLoadingDiff={isLoadingDiff}\n onLoadDiff={loadDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n};\n\nexport const DiffCardHeader = (props: DiffCardHeaderProps) => {\n const { diff, isExpanded = true, onToggleExpanded } = props;\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const additions = diff.additions ?? 0;\n const deletions = diff.deletions ?? 0;\n\n return (\n <Grid\n data-testid=\"diff-card-header\"\n templateColumns=\"auto minmax(0, 1fr) auto\"\n px=\"xs\"\n py=\"2xs\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderBottom={isExpanded ? \"1px solid\" : \"none\"}\n borderColor=\"border.muted\"\n borderTopRadius=\"xs\"\n borderBottomRadius={isExpanded ? \"0\" : \"xs\"}\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n bg=\"bg\"\n cursor=\"pointer\"\n transition=\"background 0.14s ease\"\n _hover={{ bg: \"bg\" }}\n onClick={() => onToggleExpanded?.()}\n gap=\"sm\"\n >\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleExpanded?.();\n }}\n flexShrink={0}\n >\n {isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </IconButton>\n\n <Box minW={0} overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" title={filePath}>\n {diff.change === \"renamed\" ? (\n <Text as=\"span\" textStyle=\"sm\">\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" mr=\"xs\">\n {diff.oldPath}\n </Text>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" verticalAlign=\"middle\" mr=\"xs\">\n <ChevronRight size={12} />\n </Box>\n {diff.newPath}\n </Text>\n ) : diff.change === \"deleted\" ? (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n ) : (\n <Text as=\"span\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n </Box>\n\n <Box flexShrink={0}>\n <DiffBubble variant=\"ghost\" additions={additions} deletions={deletions} />\n </Box>\n </Grid>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\nimport { ScrollArea } from \"../scroll-area\";\n\nexport const DiffDrawerEmptyState = () => (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <ScrollArea flex=\"1\" minH=\"0\" contentProps={{ p: \"xs\", spaceY: \"xs\" }}>\n <EmptyState title=\"No changes detected\" description=\"Make some changes to see the diff here.\" paddingY=\"sm\" />\n </ScrollArea>\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\nconst CARD_HEADER_HEIGHT = 34;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 34;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst ITEM_GAP_HEIGHT = 8;\n\ninterface EstimateDiffCardHeightInput {\n diff: Diff;\n isCollapsed: boolean;\n hasOptedIntoLargeDiff?: boolean;\n diffViewMode?: DiffViewMode;\n}\n\nconst deferredCardHeight = () => CARD_HEADER_HEIGHT + DEFERRED_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n\n// Mirrors the branches DiffCardContent renders, so the virtualizer's estimate matches the DOM\n// before measureElement gets a chance to refine it.\nexport const estimateDiffCardHeight = (input: EstimateDiffCardHeightInput) => {\n const { diff, isCollapsed, hasOptedIntoLargeDiff = false, diffViewMode = \"unified\" } = input;\n\n if (isCollapsed) return COLLAPSED_CARD_HEIGHT + ITEM_GAP_HEIGHT;\n\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n if (!hasDiffContent) return deferredCardHeight();\n if (isLargeDiffContent(diff) && !hasOptedIntoLargeDiff) return deferredCardHeight();\n\n const { unifiedContentRows, splitContentRows, hunkRows } = buildDiffViewData({\n original: diff.oldContent ?? \"\",\n modified: diff.newContent ?? \"\",\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n const contentRows = diffViewMode === \"split\" ? splitContentRows : unifiedContentRows;\n if (contentRows === 0 && hunkRows === 0) return deferredCardHeight();\n\n const bodyHeight = contentRows * CARD_BODY_LINE_HEIGHT + hunkRows * HUNK_ROW_HEIGHT;\n return CARD_HEADER_HEIGHT + bodyHeight + ITEM_GAP_HEIGHT;\n};\n","import type { Diff } from \"./diff-card\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface EstimateDiffRangeHeightInput {\n diffs: Diff[];\n collapsedPaths: Set<string>;\n largeDiffOptInPaths: Set<string>;\n diffViewMode: DiffViewMode;\n startIndex: number;\n endIndex: number;\n}\n\ninterface SelectedExpansionCommand {\n action: string;\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\ninterface ResolveSelectedScrollStateInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: SelectedExpansionCommand | null;\n completedScrollCommandId: number | null;\n}\n\nexport interface RenderedDiffItem {\n element: HTMLElement;\n index: number;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst PINNED_DIFF_LOOKBEHIND_COUNT = 24;\n\nexport const estimateDiffRangeHeight = (input: EstimateDiffRangeHeightInput) => {\n const { diffs, collapsedPaths, largeDiffOptInPaths, diffViewMode, startIndex, endIndex } = input;\n let offset = 0;\n for (let diffIndex = startIndex; diffIndex < endIndex; diffIndex += 1) {\n const diff = diffs[diffIndex];\n const path = getDiffPath(diff);\n offset += estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n }\n return offset;\n};\n\nexport const resolveSelectedScrollState = (input: ResolveSelectedScrollStateInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, expansionCommand, completedScrollCommandId } = input;\n let selectedScrollPath = selectedDiffPath;\n let selectedScrollSourceKey = selectedDiffPath ? `selected:${selectedDiffPath}` : null;\n const selectedScrollCommandId = expansionCommand?.action === \"expand-selected\" ? expansionCommand.id : null;\n const hasCompletedSelectedScroll =\n selectedScrollCommandId !== null && completedScrollCommandId === selectedScrollCommandId;\n\n if (expansionCommand?.action === \"expand-selected\" && expansionCommand.path) {\n selectedScrollPath = expansionCommand.path;\n selectedScrollSourceKey = `command:${expansionCommand.id}:${expansionCommand.path}`;\n }\n\n let selectedScrollKey = selectedScrollSourceKey;\n if (selectedScrollPath && selectedScrollSourceKey) {\n const selectedScrollExpansionState = collapsedPaths.has(selectedScrollPath) ? \"collapsed\" : \"expanded\";\n selectedScrollKey = `${selectedScrollSourceKey}:${selectedScrollExpansionState}`;\n }\n\n const selectedScrollIndex = selectedScrollPath\n ? diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath)\n : -1;\n const shouldPinSelectedScrollIndex =\n selectedScrollIndex >= 0 &&\n expansionCommand?.action === \"expand-selected\" &&\n expansionCommand.direction === \"up\" &&\n !hasCompletedSelectedScroll;\n\n return {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n };\n};\n\nexport const includePinnedDiffIndexes = (input: {\n indexes: number[];\n selectedScrollIndex: number;\n shouldPinSelectedScrollIndex: boolean;\n}) => {\n const { indexes, selectedScrollIndex, shouldPinSelectedScrollIndex } = input;\n if (!shouldPinSelectedScrollIndex || indexes.includes(selectedScrollIndex)) return indexes;\n\n const pinnedStartIndex = Math.max(0, selectedScrollIndex - PINNED_DIFF_LOOKBEHIND_COUNT);\n const pinnedIndexes = Array.from(\n { length: selectedScrollIndex - pinnedStartIndex + 1 },\n (_, index) => pinnedStartIndex + index,\n );\n\n return Array.from(new Set([...indexes, ...pinnedIndexes])).sort((a, b) => a - b);\n};\n\nexport const getRenderedDiffItems = (scrollElement: HTMLElement | null) =>\n Array.from(scrollElement?.querySelectorAll<HTMLElement>(\"[data-index]\") ?? [])\n .filter((element) => element.querySelector('[data-testid=\"diff-card\"]'))\n .map((element) => ({ element, index: Number(element.dataset.index) }))\n .filter((item): item is RenderedDiffItem => Number.isInteger(item.index))\n .sort((a, b) => a.index - b.index);\n\nexport const getElementScrollOffset = (input: { element: HTMLElement; scrollElement: HTMLElement | null }) => {\n const { element, scrollElement } = input;\n if (!scrollElement) return element.offsetTop;\n\n const elementRect = element.getBoundingClientRect();\n const scrollRect = scrollElement.getBoundingClientRect();\n return scrollElement.scrollTop + elementRect.top - scrollRect.top;\n};\n","import { useLayoutEffect, useState } from \"react\";\nimport type { Diff } from \"./diff-card\";\nimport type { DiffExpansionCommand } from \"./diff-drawer\";\nimport {\n estimateDiffRangeHeight,\n getElementScrollOffset,\n getRenderedDiffItems,\n resolveSelectedScrollState,\n} from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface UseSelectedDiffScrollInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n largeDiffOptInPaths: Set<string>;\n expansionCommand: DiffExpansionCommand | null;\n diffViewMode: DiffViewMode;\n scrollRef: { current: HTMLDivElement | null };\n}\n\nconst SELECTED_ALIGNMENT_THRESHOLD = 72;\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nexport const useSelectedDiffScroll = (input: UseSelectedDiffScrollInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, largeDiffOptInPaths, expansionCommand, diffViewMode, scrollRef } =\n input;\n const [completedScrollCommandId, setCompletedScrollCommandId] = useState<number | null>(null);\n const {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n } = resolveSelectedScrollState({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n completedScrollCommandId,\n });\n\n useLayoutEffect(() => {\n if (!selectedScrollPath || !selectedScrollKey) return;\n if (hasCompletedSelectedScroll) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath);\n if (index < 0) return;\n\n const frameIds: number[] = [];\n let cancelledByUserScroll = false;\n const scrollElement = scrollRef.current;\n const cancelSelectedScroll = () => {\n cancelledByUserScroll = true;\n if (selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n }\n };\n const estimateRangeHeight = (startIndex: number, endIndex: number) => {\n return estimateDiffRangeHeight({\n diffs,\n collapsedPaths,\n largeDiffOptInPaths,\n diffViewMode,\n startIndex,\n endIndex,\n });\n };\n const scrollToOffset = (offset: number) => {\n if (cancelledByUserScroll) return;\n scrollRef.current?.scrollTo({ top: Math.max(0, offset), behavior: \"auto\" });\n };\n const scrollToSelectedDiff = () => scrollToOffset(estimateRangeHeight(0, index));\n const alignRenderedSelectedDiff = () => {\n const renderedItems = getRenderedDiffItems(scrollRef.current);\n const selectedItem = renderedItems.find((item) => item.index === index);\n if (selectedItem) {\n const selectedOffset = getElementScrollOffset({ element: selectedItem.element, scrollElement });\n const currentOffset = selectedOffset - (scrollElement?.scrollTop ?? 0);\n if (Math.abs(currentOffset) >= SELECTED_ALIGNMENT_THRESHOLD) {\n scrollToOffset(selectedOffset);\n }\n return Math.abs(currentOffset) < SELECTED_ALIGNMENT_THRESHOLD;\n }\n\n const firstItem = renderedItems[0];\n const lastItem = renderedItems.at(-1);\n if (firstItem && firstItem.index > index) {\n scrollToOffset(\n getElementScrollOffset({ element: firstItem.element, scrollElement }) -\n estimateRangeHeight(index, firstItem.index),\n );\n return false;\n }\n if (lastItem && lastItem.index < index) {\n scrollToOffset(\n getElementScrollOffset({ element: lastItem.element, scrollElement }) +\n estimateRangeHeight(lastItem.index, index),\n );\n return false;\n }\n if (!firstItem || !lastItem) {\n scrollToSelectedDiff();\n }\n return false;\n };\n let alignmentAttempts = 0;\n const reconcileSelectedDiff = () => {\n if (cancelledByUserScroll) return;\n const isAligned = alignRenderedSelectedDiff();\n alignmentAttempts += 1;\n const hasSettled = alignmentAttempts >= 3;\n if (isAligned && hasSettled && !collapsedPaths.has(selectedScrollPath) && selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n return;\n }\n if ((!isAligned || !hasSettled) && alignmentAttempts < 10) {\n frameIds.push(requestAnimationFrame(reconcileSelectedDiff));\n }\n };\n\n scrollElement?.addEventListener(\"wheel\", cancelSelectedScroll, { passive: true });\n scrollElement?.addEventListener(\"touchmove\", cancelSelectedScroll, { passive: true });\n const isInitiallyAligned = alignRenderedSelectedDiff();\n if (!shouldPinSelectedScrollIndex && !isInitiallyAligned) {\n scrollToSelectedDiff();\n }\n\n frameIds.push(requestAnimationFrame(reconcileSelectedDiff));\n\n return () => {\n scrollElement?.removeEventListener(\"wheel\", cancelSelectedScroll);\n scrollElement?.removeEventListener(\"touchmove\", cancelSelectedScroll);\n for (const frameId of frameIds) {\n cancelAnimationFrame(frameId);\n }\n };\n }, [\n selectedScrollKey,\n selectedScrollPath,\n selectedScrollCommandId,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n diffs,\n collapsedPaths,\n largeDiffOptInPaths,\n diffViewMode,\n scrollRef,\n ]);\n\n return { selectedScrollIndex, shouldPinSelectedScrollIndex };\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { defaultRangeExtractor, useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { DiffDrawerEmptyState } from \"./diff-drawer-empty-state\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport { includePinnedDiffIndexes } from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\nimport { useSelectedDiffScroll } from \"./use-selected-diff-scroll\";\n\ninterface DiffDrawerProps {\n diffs: Diff[];\n selectedDiffPath?: string | null;\n onLoadDiff?: (path: string) => Promise<void>;\n onSelectDiffPath?: (path: string) => void;\n onExpansionStateChange?: (state: DiffDrawerExpansionState) => void;\n expansionCommand?: DiffExpansionCommand | null;\n diffViewMode?: DiffViewMode;\n}\n\nexport interface DiffExpansionCommand {\n action: \"expand\" | \"collapse\" | \"expand-selected\";\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\n\nexport const buildInitialCollapsedPaths = (diffs: Diff[]) => {\n if (diffs.length <= INITIAL_EXPANDED_DIFF_COUNT) return new Set<string>();\n\n return new Set(\n diffs\n .filter((diff, index) => {\n const lineCount = (diff.additions ?? 0) + (diff.deletions ?? 0);\n return index >= INITIAL_EXPANDED_DIFF_COUNT || lineCount > INITIAL_COLLAPSED_LINE_THRESHOLD;\n })\n .map((diff) => getDiffPath(diff)),\n );\n};\n\nexport const buildAllCollapsedPaths = (diffs: Diff[]) => new Set(diffs.map((diff) => getDiffPath(diff)));\n\nexport const toggleCollapsedPath = (collapsedPaths: Set<string>, path: string) => {\n const next = new Set(collapsedPaths);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n};\n\nexport const resolveCollapsedPathsForSelectedDiff = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string | null,\n) => {\n if (!selectedDiffPath) return collapsedPaths;\n if (!collapsedPaths.has(selectedDiffPath)) return collapsedPaths;\n if (!diffs.some((diff) => getDiffPath(diff) === selectedDiffPath)) return collapsedPaths;\n\n const next = new Set(collapsedPaths);\n next.delete(selectedDiffPath);\n return next;\n};\n\nexport function DiffDrawer(props: DiffDrawerProps) {\n const {\n diffs,\n selectedDiffPath = null,\n onLoadDiff,\n onSelectDiffPath,\n onExpansionStateChange,\n expansionCommand = null,\n diffViewMode = \"unified\",\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const reportedExpansionStateRef = useRef<DiffDrawerExpansionState | null>(null);\n const [collapsedPaths, setCollapsedPaths] = useState<Set<string>>(() => buildInitialCollapsedPaths(diffs));\n const [largeDiffOptInPaths, setLargeDiffOptInPaths] = useState<Set<string>>(() => new Set());\n const { selectedScrollIndex, shouldPinSelectedScrollIndex } = useSelectedDiffScroll({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n largeDiffOptInPaths,\n expansionCommand,\n diffViewMode,\n scrollRef,\n });\n\n const virtualizer = useVirtualizer({\n count: diffs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => {\n const diff = diffs[index];\n const path = getDiffPath(diff);\n return estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n },\n getItemKey: (index) => getDiffPath(diffs[index]),\n overscan: 3,\n rangeExtractor: (range) => {\n const indexes = defaultRangeExtractor(range);\n return includePinnedDiffIndexes({ indexes, selectedScrollIndex, shouldPinSelectedScrollIndex });\n },\n });\n virtualizer.shouldAdjustScrollPositionOnItemSizeChange = (_item, _delta, instance) => !instance.isScrolling;\n\n useLayoutEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useLayoutEffect(() => {\n if (!expansionCommand) return;\n\n if (expansionCommand.action === \"expand-selected\") {\n setCollapsedPaths((prev) =>\n expansionCommand.path ? resolveCollapsedPathsForSelectedDiff(diffs, prev, expansionCommand.path) : prev,\n );\n return;\n }\n\n setCollapsedPaths(expansionCommand.action === \"collapse\" ? buildAllCollapsedPaths(diffs) : new Set());\n }, [diffs, expansionCommand]);\n\n useEffect(() => {\n const expansionState = {\n allExpanded: collapsedPaths.size === 0,\n allCollapsed: diffs.length > 0 && diffs.every((diff) => collapsedPaths.has(getDiffPath(diff))),\n };\n const reportedExpansionState = reportedExpansionStateRef.current;\n if (\n reportedExpansionState?.allExpanded === expansionState.allExpanded &&\n reportedExpansionState.allCollapsed === expansionState.allCollapsed\n ) {\n return;\n }\n\n reportedExpansionStateRef.current = expansionState;\n onExpansionStateChange?.(expansionState);\n }, [collapsedPaths, diffs, onExpansionStateChange]);\n\n if (diffs.length === 0) return <DiffDrawerEmptyState />;\n\n const toggleExpanded = (path: string) => {\n setCollapsedPaths((prev) => toggleCollapsedPath(prev, path));\n };\n\n const showFullDiff = (path: string) => {\n setLargeDiffOptInPaths((prev) => {\n const next = new Set(prev);\n next.add(path);\n return next;\n });\n };\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Box position=\"relative\" flex=\"1\" minH=\"0\" bg=\"bg\">\n <ScrollArea\n position=\"absolute\"\n inset=\"0\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n contentProps={{ p: \"xs\" }}\n >\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualItems.map((virtualItem) => {\n const diff = diffs[virtualItem.index];\n const path = getDiffPath(diff);\n\n return (\n <Box\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n pb=\"xs\"\n style={{ top: `${virtualItem.start}px` }}\n >\n <DiffCard\n key={path}\n diff={diff}\n isSelected={selectedDiffPath === path}\n isExpanded={!collapsedPaths.has(path)}\n onToggleExpanded={() => toggleExpanded(path)}\n onSelect={() => onSelectDiffPath?.(path)}\n onLoadDiff={onLoadDiff}\n hasOptedIntoLargeDiff={largeDiffOptInPaths.has(path)}\n onShowFullDiff={() => showFullDiff(path)}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\n </Box>\n </Stack>\n );\n}\n","import { Box } from \"@chakra-ui/react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from \"react\";\n\nexport type ResizableSplitSide = \"left\" | \"right\";\n\nconst RESIZE_SEPARATOR_HOVER_STYLE = { _before: { bg: \"border.emphasized\" } };\nconst RESIZE_HANDLE_WIDTH = \"12px\";\n\ninterface ResizeHandleProps {\n bounds: { minSize: number; maxSize: number };\n contentPanelId: string;\n resizablePanelId: string;\n resizeLabel: string;\n resolvedPanelWidth: number;\n showResizeSeparator: boolean;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizeHandle = (props: ResizeHandleProps) => {\n const {\n bounds,\n contentPanelId,\n resizablePanelId,\n resizeLabel,\n resolvedPanelWidth,\n showResizeSeparator,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n return (\n <Box\n role=\"separator\"\n aria-label={resizeLabel}\n aria-orientation=\"vertical\"\n aria-controls={`${resizablePanelId} ${contentPanelId}`}\n aria-valuemin={0}\n aria-valuemax={Math.round(bounds.maxSize)}\n aria-valuenow={Math.round(resolvedPanelWidth)}\n tabIndex={0}\n position=\"relative\"\n zIndex=\"1\"\n flex={`0 0 ${RESIZE_HANDLE_WIDTH}`}\n w={RESIZE_HANDLE_WIDTH}\n mx=\"-6px\"\n cursor=\"col-resize\"\n touchAction=\"none\"\n outline=\"none\"\n onPointerDown={onResizeStart}\n onKeyDown={onResizeKeyDown}\n _before={{\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n bottom: 0,\n insetInlineStart: \"50%\",\n w: \"1px\",\n bg: showResizeSeparator ? \"border.muted\" : \"transparent\",\n transform: \"translateX(-50%)\",\n }}\n _hover={showResizeSeparator ? RESIZE_SEPARATOR_HOVER_STYLE : undefined}\n _focusVisible={{\n _before: {\n bg: \"colorPalette.focusRing\",\n w: \"2px\",\n },\n }}\n />\n );\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { type ResizableSplitSide, ResizeHandle } from \"./resizable-split-layout.handle\";\n\ninterface ResizableSplitLayoutProps extends Omit<FlexProps, \"children\" | \"onResize\"> {\n resizablePanel: ReactNode;\n contentPanel: ReactNode;\n resizableSide?: ResizableSplitSide;\n defaultSizePx?: number;\n minSizePx?: number;\n maxSizePx?: number;\n contentMinSizePx?: number;\n collapsed?: boolean;\n collapsible?: boolean;\n resizeLabel?: string;\n showResizeSeparator?: boolean;\n onSizeChange?: (width: number) => void;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst FALLBACK_ROOT_WIDTH = 1200;\nconst KEYBOARD_RESIZE_STEP = 24;\nconst MIN_COLLAPSE_THRESHOLD_PX = 72;\nconst MAX_COLLAPSE_THRESHOLD_PX = 160;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveRootWidth = (rootWidth: number) => (rootWidth > 0 ? rootWidth : FALLBACK_ROOT_WIDTH);\n\nconst resolveCollapseThreshold = (minSizePx: number) =>\n clamp(minSizePx / 2, MIN_COLLAPSE_THRESHOLD_PX, MAX_COLLAPSE_THRESHOLD_PX);\n\nconst resolveResizableBoundsPx = (input: {\n rootWidth: number;\n minSizePx: number;\n maxSizePx?: number;\n contentMinSizePx: number;\n}) => {\n const rootWidth = resolveRootWidth(input.rootWidth);\n const maxFromContent = Math.max(0, rootWidth - input.contentMinSizePx);\n const configuredMax = input.maxSizePx ?? maxFromContent;\n const maxSize = Math.max(0, Math.min(configuredMax, maxFromContent));\n const minSize = Math.min(input.minSizePx, maxSize);\n\n return { minSize, maxSize };\n};\n\nconst getElementWidth = (element: HTMLDivElement | null) => element?.getBoundingClientRect().width ?? 0;\n\nconst applyPanelWidthToElement = (panel: HTMLDivElement | null, width: number) => {\n if (!panel) return;\n\n panel.style.width = `${width}px`;\n panel.style.flexBasis = `${width}px`;\n panel.style.flexGrow = \"0\";\n panel.style.flexShrink = \"0\";\n panel.style.display = width > 0 ? \"flex\" : \"none\";\n};\n\nconst clearPanelInlineStyles = (panel: HTMLDivElement | null) => {\n if (!panel) return;\n\n panel.style.width = \"\";\n panel.style.flexBasis = \"\";\n panel.style.flexGrow = \"\";\n panel.style.flexShrink = \"\";\n panel.style.display = \"\";\n};\n\nexport const ResizableSplitLayout = (props: ResizableSplitLayoutProps) => {\n const {\n resizablePanel,\n contentPanel,\n resizableSide = \"left\",\n defaultSizePx = 240,\n minSizePx = 200,\n maxSizePx,\n contentMinSizePx = 0,\n collapsed: controlledCollapsed,\n collapsible = true,\n resizeLabel = \"Resize panel\",\n showResizeSeparator = true,\n onSizeChange,\n onCollapsedChange,\n ...rest\n } = props;\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const resizablePanelRef = useRef<HTMLDivElement>(null);\n const contentPanelRef = useRef<HTMLDivElement>(null);\n const cleanupDragRef = useRef<() => void>(() => undefined);\n const lastWidthRef = useRef(defaultSizePx);\n const [panelWidth, setPanelWidth] = useState(defaultSizePx);\n const [rootWidth, setRootWidth] = useState(0);\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const collapseThresholdPx = resolveCollapseThreshold(minSizePx);\n const resolvedPanelWidth = collapsed ? 0 : clamp(panelWidth, bounds.minSize, bounds.maxSize);\n const contentPanelId = `${id}-content`;\n const resizablePanelId = `${id}-resizable`;\n\n useEffect(() => {\n const element = rootRef.current;\n if (!element) return;\n\n const updateRootWidth = () => {\n setRootWidth(element.getBoundingClientRect().width);\n };\n\n updateRootWidth();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootWidth);\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n useEffect(() => {\n lastWidthRef.current = defaultSizePx;\n setPanelWidth(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelWidth = (width: number) => {\n applyPanelWidthToElement(resizablePanelRef.current, width);\n };\n\n useEffect(() => {\n // React may reuse the same DOM element across renders when this component swaps roles\n // (e.g., a wrapping ResizableSplitLayout disappears, leaving the inner one in its place).\n // Clear any inline styles on the content panel that leaked from a prior render where\n // the same DOM element was the resizable panel; otherwise stale `flex: 0 0 Xpx` pins\n // the content's width.\n clearPanelInlineStyles(contentPanelRef.current);\n applyPanelWidthToElement(resizablePanelRef.current, resolvedPanelWidth);\n }, [resolvedPanelWidth]);\n\n const commitPanelWidth = (width: number) => {\n const rootWidth = getElementWidth(rootRef.current);\n const nextBounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const nextWidth = clamp(width, nextBounds.minSize, nextBounds.maxSize);\n\n lastWidthRef.current = nextWidth;\n setPanelWidth(nextWidth);\n applyPanelWidth(nextWidth);\n onSizeChange?.(nextWidth);\n };\n\n const setCollapsed = (nextCollapsed: boolean) => {\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(nextCollapsed);\n }\n\n onCollapsedChange?.(nextCollapsed);\n };\n\n const handleResizeStart = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0 || (collapsed && !collapsible)) return;\n\n event.preventDefault();\n cleanupDragRef.current();\n\n const resizeHandle = event.currentTarget;\n const rootWidth = getElementWidth(rootRef.current);\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const startX = event.clientX;\n const startWidth = collapsed ? 0 : getElementWidth(resizablePanelRef.current) || lastWidthRef.current;\n const direction = resizableSide === \"left\" ? 1 : -1;\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n let nextWidth = startWidth === 0 ? 0 : clamp(startWidth, bounds.minSize, bounds.maxSize);\n let nextCollapsed = collapsed;\n let animationFrame = 0;\n\n const setDraggingPanelState = (value: string) => {\n if (resizablePanelRef.current) resizablePanelRef.current.style.pointerEvents = value;\n if (contentPanelRef.current) contentPanelRef.current.style.pointerEvents = value;\n };\n\n const schedulePanelWidth = () => {\n if (animationFrame) return;\n\n animationFrame = window.requestAnimationFrame(() => {\n animationFrame = 0;\n applyPanelWidth(nextWidth);\n });\n };\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const rawWidth = startWidth + (moveEvent.clientX - startX) * direction;\n nextCollapsed = collapsible && rawWidth <= collapseThresholdPx;\n nextWidth = nextCollapsed ? 0 : clamp(rawWidth, bounds.minSize, bounds.maxSize);\n if (!nextCollapsed) lastWidthRef.current = nextWidth;\n schedulePanelWidth();\n };\n\n const cleanup = () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", cleanup);\n window.removeEventListener(\"pointercancel\", cleanup);\n window.removeEventListener(\"blur\", cleanup);\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n if (resizeHandle.hasPointerCapture(event.pointerId)) resizeHandle.releasePointerCapture(event.pointerId);\n setDraggingPanelState(\"\");\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n cleanupDragRef.current = () => undefined;\n if (nextCollapsed) {\n applyPanelWidth(0);\n setCollapsed(true);\n } else {\n setCollapsed(false);\n commitPanelWidth(nextWidth);\n }\n };\n\n cleanupDragRef.current = cleanup;\n resizeHandle.setPointerCapture(event.pointerId);\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n setDraggingPanelState(\"none\");\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", cleanup, { once: true });\n window.addEventListener(\"pointercancel\", cleanup, { once: true });\n window.addEventListener(\"blur\", cleanup, { once: true });\n };\n\n const handleResizeKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const direction = resizableSide === \"left\" ? 1 : -1;\n const width = lastWidthRef.current;\n\n if (collapsed && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\" || event.key === \"End\")) {\n event.preventDefault();\n setCollapsed(false);\n commitPanelWidth(width);\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n commitPanelWidth(width - KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n commitPanelWidth(width + KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitPanelWidth(bounds.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitPanelWidth(bounds.maxSize);\n }\n };\n\n const resizablePanelNode = (\n <Flex\n id={resizablePanelId}\n ref={resizablePanelRef}\n display={collapsed ? \"none\" : \"flex\"}\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex={`0 0 ${resolvedPanelWidth}px`}\n w={`${resolvedPanelWidth}px`}\n aria-hidden={collapsed ? true : undefined}\n >\n {resizablePanel}\n </Flex>\n );\n const contentPanelNode = (\n <Flex\n id={contentPanelId}\n ref={contentPanelRef}\n display=\"flex\"\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex=\"1\"\n >\n {contentPanel}\n </Flex>\n );\n const resizeTrigger = collapsed ? null : (\n <ResizeHandle\n bounds={bounds}\n contentPanelId={contentPanelId}\n resizablePanelId={resizablePanelId}\n resizeLabel={resizeLabel}\n resolvedPanelWidth={resolvedPanelWidth}\n showResizeSeparator={showResizeSeparator}\n onResizeKeyDown={handleResizeKeyDown}\n onResizeStart={handleResizeStart}\n />\n );\n\n return (\n <Flex ref={rootRef} direction=\"row\" h=\"full\" w=\"full\" overflow=\"hidden\" {...rest}>\n {resizableSide === \"left\" ? (\n <>\n {resizablePanelNode}\n {resizeTrigger}\n {contentPanelNode}\n </>\n ) : (\n <>\n {contentPanelNode}\n {resizeTrigger}\n {resizablePanelNode}\n </>\n )}\n </Flex>\n );\n};\n","import type { ChangedFilesViewMode, ChangedFileTreeNode } from \"./types\";\n\nconst normalizeChangedFilePath = (path: string) =>\n path\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join(\"/\");\n\nconst sortNodes = (nodes: ChangedFileTreeNode[]) => {\n nodes.sort((left, right) => {\n if (left.type !== right.type) return left.type === \"folder\" ? -1 : 1;\n return left.name.localeCompare(right.name);\n });\n\n nodes.forEach((node) => {\n if (node.children) sortNodes(node.children);\n });\n\n return nodes;\n};\n\nconst dedupePaths = (paths: string[]) => Array.from(new Set(paths.map(normalizeChangedFilePath).filter(Boolean)));\n\nconst buildFlatTree = (paths: string[]) =>\n dedupePaths(paths)\n .map((path) => ({ id: `file:${path}`, name: path, type: \"file\" }) satisfies ChangedFileTreeNode)\n .sort((left, right) => left.name.localeCompare(right.name));\n\nexport const buildChangedFilesTree = (paths: string[], mode: ChangedFilesViewMode): ChangedFileTreeNode[] => {\n if (mode === \"flat\") return buildFlatTree(paths);\n\n const treeById = new Map<string, ChangedFileTreeNode>();\n const rootNodes: ChangedFileTreeNode[] = [];\n\n dedupePaths(paths).forEach((path) => {\n const segments = path.split(\"/\");\n let parentPath = \"\";\n let parentNode: ChangedFileTreeNode | null = null;\n\n segments.forEach((segment, index) => {\n const currentPath = parentPath ? `${parentPath}/${segment}` : segment;\n const isFile = index === segments.length - 1;\n const nodeId = `${isFile ? \"file\" : \"folder\"}:${currentPath}`;\n const existingNode = treeById.get(nodeId);\n\n if (existingNode) {\n parentNode = existingNode;\n parentPath = currentPath;\n return;\n }\n\n const nextNode: ChangedFileTreeNode = {\n id: nodeId,\n name: segment,\n type: isFile ? \"file\" : \"folder\",\n ...(isFile ? {} : { children: [] }),\n };\n\n treeById.set(nodeId, nextNode);\n\n if (!parentNode) rootNodes.push(nextNode);\n else parentNode.children?.push(nextNode);\n\n parentNode = nextNode;\n parentPath = currentPath;\n });\n });\n\n return sortNodes(rootNodes);\n};\n\nexport const collectExpandedFolderIds = (nodes: ChangedFileTreeNode[]) => {\n const folderIds: string[] = [];\n\n const visit = (items: ChangedFileTreeNode[]) => {\n items.forEach((item) => {\n if (item.type !== \"folder\") return;\n folderIds.push(item.id);\n visit(item.children ?? []);\n });\n };\n\n visit(nodes);\n return folderIds;\n};\n\nconst collectNestedFileOrder = (nodes: ChangedFileTreeNode[]) => {\n const orderedPaths: string[] = [];\n\n const visit = (treeNodes: ChangedFileTreeNode[]) => {\n treeNodes.forEach((node) => {\n if (node.type === \"file\") {\n orderedPaths.push(node.id.replace(/^file:/, \"\"));\n return;\n }\n\n visit(node.children ?? []);\n });\n };\n\n visit(nodes);\n return orderedPaths;\n};\n\nexport const sortPathsByViewMode = (paths: string[], mode: ChangedFilesViewMode) => {\n if (mode === \"flat\") return [...paths].sort((left, right) => left.localeCompare(right));\n return collectNestedFileOrder(buildChangedFilesTree(paths, \"nested\"));\n};\n","import { create } from \"zustand\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerState {\n isTreePanelOpen: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n searchQuery: string;\n selectedPath: string | null;\n expandedFolderIds: Set<string>;\n setTreePanelOpen: (open: boolean) => void;\n toggleTreePanel: () => void;\n setViewMode: (viewMode: ChangedFilesViewMode) => void;\n setDiffViewMode: (diffViewMode: DiffViewMode) => void;\n setSearchQuery: (searchQuery: string) => void;\n setSelectedPath: (selectedPath: string | null) => void;\n setExpandedFolderIds: (folderIds: string[]) => void;\n toggleFolder: (folderId: string) => void;\n expandAll: (folderIds: string[]) => void;\n collapseAll: () => void;\n}\n\nexport const useDiffViewerStore = create<DiffViewerState>((set) => ({\n isTreePanelOpen: true,\n viewMode: \"nested\",\n diffViewMode: \"unified\",\n searchQuery: \"\",\n selectedPath: null,\n expandedFolderIds: new Set(),\n setTreePanelOpen: (isTreePanelOpen) => set({ isTreePanelOpen }),\n toggleTreePanel: () => set((state) => ({ isTreePanelOpen: !state.isTreePanelOpen })),\n setViewMode: (viewMode) => set({ viewMode }),\n setDiffViewMode: (diffViewMode) => set({ diffViewMode }),\n setSearchQuery: (searchQuery) => set({ searchQuery }),\n setSelectedPath: (selectedPath) => set({ selectedPath }),\n setExpandedFolderIds: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n toggleFolder: (folderId) =>\n set((state) => {\n const expandedFolderIds = new Set(state.expandedFolderIds);\n if (expandedFolderIds.has(folderId)) expandedFolderIds.delete(folderId);\n else expandedFolderIds.add(folderId);\n return { expandedFolderIds };\n }),\n expandAll: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n collapseAll: () => set({ expandedFolderIds: new Set() }),\n}));\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nexport const isInList = (id: string, values: string[]) => values.includes(id);\n\nexport const isActiveNode = (id: string, activeNodeId?: string | string[] | null) =>\n Array.isArray(activeNodeId) ? activeNodeId.includes(id) : activeNodeId === id;\n\nexport const isNavigableNode = (node: TreeListNode) => node.isNavigable || node.navigationIntent !== undefined;\n\nexport const getNodeChildren = (node: TreeListNode) => (node.children as TreeListNode[] | undefined) ?? [];\n\nexport const hasExpandableChildren = (node: TreeListNode) =>\n getNodeChildren(node).length > 0 || node.isContainer === true;\n\nexport type VirtualRow =\n | {\n kind: \"section-header\";\n key: string;\n sectionId: string;\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n }\n | { kind: \"node\"; key: string; sectionId: string; node: TreeListNode; level: number; parentNodeId?: string }\n | { kind: \"section-empty\"; key: string; sectionId: string; emptyState: TreeListSection[\"emptyState\"] };\n\nexport type VirtualNodeRow = Extract<VirtualRow, { kind: \"node\" }>;\nexport type VirtualSectionHeaderRow = Extract<VirtualRow, { kind: \"section-header\" }>;\n\n/** Rows the keyboard can land on: enabled nodes and collapsible section headers. */\nexport type FocusableRow = VirtualNodeRow | VirtualSectionHeaderRow;\n\nconst appendVisibleNodeRows = (input: {\n rows: VirtualRow[];\n sectionId: string;\n nodes: TreeListNode[];\n expandedNodeIds: string[];\n level: number;\n parentNodeId?: string;\n}) => {\n const { rows, sectionId, nodes, expandedNodeIds, level, parentNodeId } = input;\n\n for (const node of nodes) {\n rows.push({ kind: \"node\", key: `${sectionId}:${node.id}`, sectionId, node, level, parentNodeId });\n\n const children = getNodeChildren(node);\n if (children.length === 0 || !isInList(node.id, expandedNodeIds)) continue;\n\n appendVisibleNodeRows({\n rows,\n sectionId,\n nodes: children,\n expandedNodeIds,\n level: level + 1,\n parentNodeId: node.id,\n });\n }\n};\n\nexport const buildVirtualRows = (\n sections: TreeListSection[],\n expandedSectionIds: string[],\n expandedNodeIds: string[],\n) => {\n const rows: VirtualRow[] = [];\n for (const section of sections) {\n const collapsible = section.collapsible !== false && section.label !== undefined;\n const expanded = collapsible ? isInList(section.id, expandedSectionIds) : true;\n if (section.label) {\n rows.push({\n kind: \"section-header\",\n key: `header:${section.id}`,\n sectionId: section.id,\n section,\n collapsible,\n expanded,\n });\n }\n if (!expanded) continue;\n if (section.nodes.length === 0) {\n if (section.emptyState) {\n rows.push({\n kind: \"section-empty\",\n key: `empty:${section.id}`,\n sectionId: section.id,\n emptyState: section.emptyState,\n });\n }\n continue;\n }\n appendVisibleNodeRows({ rows, sectionId: section.id, nodes: section.nodes, expandedNodeIds, level: 0 });\n }\n return rows;\n};\n\n/** Stable id used to track keyboard focus across renders. */\nexport const getRowFocusId = (row: FocusableRow) => (row.kind === \"node\" ? row.node.id : row.key);\n\nexport const isFocusableRow = (row: VirtualRow): row is FocusableRow => {\n if (row.kind === \"node\") return row.node.disabled !== true;\n return row.kind === \"section-header\" && row.collapsible;\n};\n\nexport const getFocusableRows = (rows: VirtualRow[]) => rows.filter(isFocusableRow);\n\nexport const resolveTreeListFocusRowId = (\n focusedRowId: string | undefined,\n activeNodeId: string | string[] | null | undefined,\n rows: VirtualRow[],\n) => {\n const focusableRows = getFocusableRows(rows);\n const focusableIds = new Set(focusableRows.map(getRowFocusId));\n if (focusedRowId && focusableIds.has(focusedRowId)) return focusedRowId;\n\n const activeIds = Array.isArray(activeNodeId) ? activeNodeId : activeNodeId ? [activeNodeId] : [];\n const activeId = activeIds.find((id) => focusableIds.has(id));\n if (activeId) return activeId;\n\n const firstRow = focusableRows[0];\n return firstRow ? getRowFocusId(firstRow) : undefined;\n};\n\nconst resolveSectionHeaderNavigation = (input: {\n row: VirtualSectionHeaderRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, key } = input;\n\n if (key === \"Enter\" || key === \" \") return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n if (key === \"ArrowRight\") {\n if (!row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.sectionId === row.sectionId) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\" && row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n return null;\n};\n\nconst resolveNodeNavigation = (input: {\n row: VirtualNodeRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, expandedNodeIds, key } = input;\n const expanded = isInList(row.node.id, expandedNodeIds);\n const expandable = hasExpandableChildren(row.node);\n\n if (key === \"ArrowRight\") {\n if (!expandable) return null;\n if (!expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.parentNodeId === row.node.id) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\") {\n if (expandable && expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n if (row.parentNodeId) return { type: \"focus\" as const, rowId: row.parentNodeId };\n }\n\n return null;\n};\n\nexport const resolveTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n focusedRowId: string | undefined;\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { rows, focusedRowId, activeNodeId, expandedNodeIds, key } = input;\n const focusableRows = getFocusableRows(rows);\n if (focusableRows.length === 0) return null;\n\n const resolvedFocusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const currentIndex = Math.max(\n 0,\n focusableRows.findIndex((row) => getRowFocusId(row) === resolvedFocusRowId),\n );\n const currentRow = focusableRows[currentIndex];\n if (!currentRow) return null;\n\n const focusByIndex = (index: number) => {\n const clamped = Math.min(Math.max(index, 0), focusableRows.length - 1);\n return { type: \"focus\" as const, rowId: getRowFocusId(focusableRows[clamped]!) };\n };\n\n if (key === \"ArrowDown\") return focusByIndex(currentIndex + 1);\n if (key === \"ArrowUp\") return focusByIndex(currentIndex - 1);\n if (key === \"Home\") return focusByIndex(0);\n if (key === \"End\") return focusByIndex(focusableRows.length - 1);\n\n if (currentRow.kind === \"section-header\") {\n return resolveSectionHeaderNavigation({ row: currentRow, focusableRows, currentIndex, key });\n }\n\n return resolveNodeNavigation({ row: currentRow, focusableRows, currentIndex, expandedNodeIds, key });\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FocusEventHandler } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode } from \"./tree-list.types\";\nimport { hasExpandableChildren, isActiveNode, isInList, isNavigableNode } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface TreeListNodeRowProps {\n sectionId: string;\n node: TreeListNode;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n tabIndex?: number;\n onFocus?: FocusEventHandler<HTMLElement>;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nexport const TreeListNodeRow = (props: TreeListNodeRowProps) => {\n const {\n sectionId,\n node,\n level,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent: LinkComponent,\n tabIndex,\n onFocus,\n onNavigate,\n onToggleNode,\n } = props;\n\n const hasChildren = hasExpandableChildren(node);\n const expanded = hasChildren && isInList(node.id, expandedNodeIds);\n const isActive = isActiveNode(node.id, activeNodeId);\n const isDisabled = node.disabled === true;\n const isNavigable = isNavigableNode(node);\n const canLink = Boolean(LinkComponent && node.href && isNavigable && !hasChildren && !isDisabled);\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasChildren) {\n onToggleNode?.(node.id);\n return;\n }\n if (isNavigable && onNavigate) {\n onNavigate({ sectionId, nodeId: node.id, node, intent: node.navigationIntent });\n return;\n }\n node.onActivate?.();\n };\n\n const rowItem: TreeListNode = {\n ...node,\n actions: node.actions?.map((action) => ({\n ...action,\n onAction: action.onAction\n ? (context) => action.onAction?.({ sectionId, nodeId: node.id, ...context })\n : undefined,\n })),\n };\n\n const rowProps = {\n ...rowItem,\n depth: level,\n variant: rowVariant,\n isSelected: isActive,\n isExpanded: expanded,\n showExpandToggle: hasChildren,\n tabIndex,\n \"data-tree-list-focus-id\": node.id,\n \"aria-level\": level + 1,\n \"aria-expanded\": hasChildren ? expanded : undefined,\n onFocus,\n onActivate: handleActivate,\n onToggleExpand: () => onToggleNode?.(node.id),\n };\n\n const row =\n canLink && LinkComponent && node.href ? (\n <LinkComponent to={node.href}>\n <ListRow {...rowProps} asChild />\n </LinkComponent>\n ) : (\n <ListRow {...rowProps} />\n );\n\n return (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {row}\n </Stack>\n );\n};\n","import { Box, HStack, IconButton, Menu, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { FocusEventHandler, MouseEvent as ReactMouseEvent } from \"react\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport type { TreeListAction, TreeListSection } from \"./tree-list.types\";\n\ninterface TreeListSectionActionsProps {\n sectionId: string;\n actions: TreeListAction[];\n}\n\nconst TreeListSectionActions = (props: TreeListSectionActionsProps) => {\n const { sectionId, actions } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n if (action.menuItems && action.menuItems.length > 0) {\n return (\n <Menu.Root key={action.id}>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.disabled} onClick={() => item.onAction?.()}>\n {item.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n }\n return (\n <IconButton\n key={action.id}\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.({ sectionId });\n }}\n >\n {action.icon}\n </IconButton>\n );\n })}\n </HStack>\n );\n};\n\ninterface TreeListSectionHeaderProps {\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n focusId: string;\n tabIndex: number;\n onFocus: FocusEventHandler<HTMLElement>;\n onToggle: () => void;\n onContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nexport const TreeListSectionHeader = (props: TreeListSectionHeaderProps) => {\n const { section, collapsible, expanded, focusId, tabIndex, onFocus, onToggle, onContextMenu } = props;\n\n return (\n <HStack\n className=\"group\"\n justify=\"space-between\"\n align=\"center\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n px=\"sm\"\n py=\"2xs\"\n height=\"7\"\n cursor={collapsible ? \"pointer\" : \"default\"}\n tabIndex={collapsible ? tabIndex : undefined}\n data-tree-list-focus-id={collapsible ? focusId : undefined}\n aria-expanded={collapsible ? expanded : undefined}\n _hover={collapsible ? { bg: \"bg.hover\" } : undefined}\n _focusVisible={collapsible ? { bg: \"bg.hover\" } : undefined}\n onFocus={collapsible ? onFocus : undefined}\n onClick={collapsible ? onToggle : undefined}\n onContextMenu={\n onContextMenu\n ? (event) => {\n event.preventDefault();\n onContextMenu(event, section.id);\n }\n : undefined\n }\n >\n <HStack gap=\"1\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/XS\" textTransform=\"uppercase\" color=\"fg.muted\" letterSpacing=\"0.08em\" truncate>\n {section.label}\n </Text>\n {collapsible ? (\n <Box color=\"fg.muted\" flexShrink={0}>\n <ChevronRight\n size={14}\n style={{ transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"120ms\" }}\n />\n </Box>\n ) : null}\n </HStack>\n <TreeListSectionActions sectionId={section.id} actions={section.actions ?? []} />\n </HStack>\n );\n};\n","import type { TreeListSection } from \"./tree-list.types\";\n\nconst SECTION_PREFIX = \"section:\";\n\nexport const toSectionDragId = (sectionId: string) => `${SECTION_PREFIX}${sectionId}`;\nexport const isSectionDragId = (id: string) => id.startsWith(SECTION_PREFIX);\nexport const fromSectionDragId = (id: string) => id.slice(SECTION_PREFIX.length);\n\nconst arrayMoveInPlace = <T>(items: T[], from: number, to: number) => {\n const next = items.slice();\n const [removed] = next.splice(from, 1);\n next.splice(to, 0, removed);\n return next;\n};\n\nexport type ReorderResult =\n | { kind: \"section\"; nextSectionIds: string[] }\n | { kind: \"node\"; sectionId: string; nextNodeIds: string[] };\n\nexport const computeReorderResult = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n): ReorderResult | null => {\n if (activeId === overId) return null;\n\n if (isSectionDragId(activeId) && isSectionDragId(overId)) {\n const orderedIds = sections.map((section) => section.id);\n const oldIndex = orderedIds.indexOf(fromSectionDragId(activeId));\n const newIndex = orderedIds.indexOf(fromSectionDragId(overId));\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) return null;\n return { kind: \"section\", nextSectionIds: arrayMoveInPlace(orderedIds, oldIndex, newIndex) };\n }\n\n for (const section of sections) {\n const nodeIds = section.nodes.map((node) => node.id);\n const oldIndex = nodeIds.indexOf(activeId);\n const newIndex = nodeIds.indexOf(overId);\n if (oldIndex < 0 || newIndex < 0) continue;\n if (oldIndex === newIndex) return null;\n return {\n kind: \"node\",\n sectionId: section.id,\n nextNodeIds: arrayMoveInPlace(nodeIds, oldIndex, newIndex),\n };\n }\n\n return null;\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { computeReorderResult, toSectionDragId } from \"./tree-list-reorder\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface SortableHostProps {\n id: string;\n children: (input: {\n setNodeRef: (element: HTMLElement | null) => void;\n attributes: ReturnType<typeof useSortable>[\"attributes\"];\n listeners: ReturnType<typeof useSortable>[\"listeners\"];\n style: { transform?: string; transition?: string; opacity?: number };\n }) => React.ReactNode;\n}\n\n// Render-prop sortable host. The child decides which DOM node receives the\n// drag listeners so we never paint a visible grip glyph — the row or section\n// header is itself the drag handle. Clicks pass through because the pointer\n// sensor activates only after the cursor moves 4px (configured below).\nconst SortableHost = (props: SortableHostProps) => {\n const sortable = useSortable({ id: props.id });\n const style = {\n transform: CSS.Transform.toString(sortable.transform),\n transition: sortable.transition,\n opacity: sortable.isDragging ? 0.5 : 1,\n };\n return (\n <>\n {props.children({\n setNodeRef: sortable.setNodeRef,\n attributes: sortable.attributes,\n listeners: sortable.listeners,\n style,\n })}\n </>\n );\n};\n\ninterface SortableSectionGroupProps {\n section: TreeListSection;\n sectionRows: VirtualRow[];\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst SortableSectionGroup = (props: SortableSectionGroupProps) => {\n const {\n section,\n sectionRows,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = props;\n\n const headerRow = sectionRows.find((row) => row.kind === \"section-header\");\n const nodeRows = sectionRows.filter((row) => row.kind === \"node\");\n const topLevelNodeIds = nodeRows\n .filter((row) => row.kind === \"node\" && row.level === 0)\n .map((row) => (row.kind === \"node\" ? row.node.id : \"\"));\n\n return (\n <SortableHost id={toSectionDragId(section.id)}>\n {({ setNodeRef, attributes, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\">\n {headerRow && headerRow.kind === \"section-header\" ? (\n // Drag listeners live on the header so dragging the section moves\n // it, while click-to-collapse still works via the activation\n // distance on the pointer sensor.\n <Box {...attributes} {...listeners}>\n <TreeListSectionHeader\n section={headerRow.section}\n collapsible={headerRow.collapsible}\n expanded={headerRow.expanded}\n focusId={headerRow.key}\n tabIndex={-1}\n onFocus={() => {}}\n onToggle={() => onToggleSection?.(headerRow.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n </Box>\n ) : null}\n <SortableContext items={topLevelNodeIds} strategy={verticalListSortingStrategy}>\n <Stack gap={nodeGap} w=\"full\" minW=\"0\">\n {nodeRows.map((row) =>\n row.kind === \"node\" ? (\n <SortableOrPlainNodeRow\n key={row.key}\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ) : null,\n )}\n </Stack>\n </SortableContext>\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface SortableOrPlainNodeRowProps {\n row: Extract<VirtualRow, { kind: \"node\" }>;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nconst renderNodeRow = (input: {\n node: TreeListNode;\n sectionId: string;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}) => (\n <TreeListNodeRow\n sectionId={input.sectionId}\n node={input.node}\n level={input.level}\n expandedNodeIds={input.expandedNodeIds}\n activeNodeId={input.activeNodeId}\n rowVariant={input.rowVariant}\n nodeGap={input.nodeGap}\n linkComponent={input.linkComponent}\n onNavigate={input.onNavigate}\n onToggleNode={input.onToggleNode}\n />\n);\n\n// Top-level nodes participate in their section's SortableContext; nested rows\n// inherit position from their parent and render plain (cross-section moves are\n// out of scope per the ADR).\nconst SortableOrPlainNodeRow = (props: SortableOrPlainNodeRowProps) => {\n const { row, ...rest } = props;\n if (row.level > 0) {\n return renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest });\n }\n return (\n <SortableHost id={row.node.id}>\n {({ setNodeRef, attributes, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\" {...attributes} {...listeners}>\n {renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest })}\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface TreeListSortableProps {\n sections: TreeListSection[];\n expandedSectionIds?: string[];\n expandedNodeIds?: string[];\n activeNodeId?: string | string[] | null;\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nexport const TreeListSortable = (props: TreeListSortableProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onReorderSections,\n onReorderNodes,\n } = props;\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }));\n\n const handleDragEnd = (event: DragEndEvent) => {\n if (!event.over) return;\n const result = computeReorderResult(sections, String(event.active.id), String(event.over.id));\n if (!result) return;\n if (result.kind === \"section\") {\n onReorderSections?.(result.nextSectionIds);\n } else {\n onReorderNodes?.(result.sectionId, result.nextNodeIds);\n }\n };\n\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n\n return (\n <DndContext sensors={sensors} onDragEnd={handleDragEnd}>\n <SortableContext\n items={sections.map((section) => toSectionDragId(section.id))}\n strategy={verticalListSortingStrategy}\n >\n <Stack gap={sectionGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {sections.map((section) => (\n <SortableSectionGroup\n key={section.id}\n section={section}\n sectionRows={rows.filter((row) => row.sectionId === section.id)}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n />\n ))}\n </Stack>\n </SortableContext>\n </DndContext>\n );\n};\n","import { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport {\n getFocusableRows,\n getRowFocusId,\n isFocusableRow,\n resolveTreeListFocusRowId,\n resolveTreeListKeyboardNavigation,\n type VirtualRow,\n} from \"./tree-list-model\";\n\nconst findRowElement = (root: HTMLElement | null, focusId: string) => {\n if (!root) return null;\n const elements = root.querySelectorAll<HTMLElement>(\"[data-tree-list-focus-id]\");\n return [...elements].find((element) => element.dataset.treeListFocusId === focusId) ?? null;\n};\n\nconst findFocusedRowId = (root: HTMLElement | null, target: EventTarget | null) => {\n if (!root || !(target instanceof HTMLElement) || !root.contains(target)) return undefined;\n return target.closest<HTMLElement>(\"[data-tree-list-focus-id]\")?.dataset.treeListFocusId;\n};\n\nconst isTextEditingTarget = (target: EventTarget | null) => {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n return [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName);\n};\n\nconst getRowIndex = (rows: VirtualRow[], focusId: string) =>\n rows.findIndex((row) => isFocusableRow(row) && getRowFocusId(row) === focusId);\n\nexport const useTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n onToggleNode?: (nodeId: string) => void;\n onToggleSection?: (sectionId: string) => void;\n scrollToRow?: (index: number) => void;\n}) => {\n const { rows, activeNodeId, expandedNodeIds, onToggleNode, onToggleSection, scrollToRow } = input;\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [focusedRowId, setFocusedRowId] = useState<string>();\n const [pendingFocusRowId, setPendingFocusRowId] = useState<string>();\n const focusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const focusableRowIds = getFocusableRows(rows).map(getRowFocusId).join(\"\\0\");\n\n useEffect(() => {\n if (!focusedRowId) return;\n if (focusableRowIds.split(\"\\0\").includes(focusedRowId)) return;\n setFocusedRowId(undefined);\n }, [focusedRowId, focusableRowIds]);\n\n useEffect(() => {\n if (!pendingFocusRowId) return;\n const frame = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const element = findRowElement(rootRef.current, pendingFocusRowId);\n if (!element) return;\n element.focus();\n setPendingFocusRowId(undefined);\n });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [pendingFocusRowId]);\n\n const focusRow = (rowId: string) => {\n setFocusedRowId(rowId);\n const element = findRowElement(rootRef.current, rowId);\n if (element) {\n element.focus();\n return;\n }\n\n const rowIndex = getRowIndex(rows, rowId);\n if (rowIndex === -1) return;\n scrollToRow?.(rowIndex);\n setPendingFocusRowId(rowId);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (isTextEditingTarget(event.target)) return;\n\n const navigation = resolveTreeListKeyboardNavigation({\n rows,\n focusedRowId: findFocusedRowId(rootRef.current, event.target) ?? focusRowId,\n activeNodeId,\n expandedNodeIds,\n key: event.key,\n });\n if (!navigation) return;\n\n event.preventDefault();\n if (navigation.type === \"toggle-node\") {\n onToggleNode?.(navigation.nodeId);\n return;\n }\n if (navigation.type === \"toggle-section\") {\n onToggleSection?.(navigation.sectionId);\n return;\n }\n\n focusRow(navigation.rowId);\n };\n\n return {\n focusRowId,\n rootRef,\n handleKeyDown,\n onRowFocus: (rowId: string) => setFocusedRowId(rowId),\n };\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { MouseEvent as ReactMouseEvent, ReactNode, RefObject } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"../resource-context-menu\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\nimport { TreeListSortable } from \"./tree-list-sortable\";\nimport { useTreeListKeyboardNavigation } from \"./use-tree-list-keyboard-navigation\";\n\nexport { buildVirtualRows } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\n/** Sectioned hierarchical list for files, resources, navigation, and customizable sidebars. */\ninterface TreeListProps {\n /** Ordered sections to render, each containing nested tree nodes. */\n sections: TreeListSection[];\n /** Controlled section ids that are currently expanded. */\n expandedSectionIds?: string[];\n /** Controlled node ids that are currently expanded. */\n expandedNodeIds?: string[];\n /** Active node id, or ids, used for selection styling. */\n activeNodeId?: string | string[] | null;\n /** Compact rows suit app navigation; tree rows suit file/resource hierarchies. */\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n /** Link renderer used when nodes provide `href`. */\n linkComponent?: TreeListLinkComponent;\n /** Called when a navigable node is activated. */\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n /** Render large trees with virtual rows. Disable when using drag ordering. */\n virtualize?: boolean;\n scrollRef?: RefObject<HTMLDivElement | null>;\n // When true, sections and items render with drag handles. Virtualization is\n // bypassed (per the ADR) — customizable trees are typically small. Hosts\n // must supply onReorderSections / onReorderNodes to persist the new order.\n draggable?: boolean;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n // When set, right-clicking the empty back area of the tree (everything not\n // covered by an item row) opens this menu. Item rows keep their own\n // right-click behaviour — the menu lives on a layer behind them.\n backgroundContextActions?: ResourceContextAction[];\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface RenderVirtualRowInput {\n row: VirtualRow;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n focusRowId?: string;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onRowFocus: (rowId: string) => void;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst renderVirtualRow = (input: RenderVirtualRowInput) => {\n const {\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = input;\n\n if (row.kind === \"section-header\") {\n return (\n <TreeListSectionHeader\n section={row.section}\n collapsible={row.collapsible}\n expanded={row.expanded}\n focusId={row.key}\n tabIndex={row.key === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.key)}\n onToggle={() => onToggleSection?.(row.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n );\n }\n\n if (row.kind === \"section-empty\") return row.emptyState ?? null;\n\n return (\n <TreeListNodeRow\n sectionId={row.sectionId}\n node={row.node}\n level={row.level}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n tabIndex={row.node.id === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.node.id)}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n );\n};\n\ninterface VirtualTreeListProps extends TreeListProps {\n rows: VirtualRow[];\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nconst VirtualTreeList = (props: VirtualTreeListProps) => {\n const {\n rows,\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n scrollRef,\n } = props;\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => VIRTUAL_ROW_ESTIMATE,\n overscan: VIRTUAL_ROW_OVERSCAN,\n getItemKey: (index) => rows[index]?.key ?? index,\n });\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n scrollToRow: (index) => virtualizer.scrollToIndex(index, { align: \"auto\" }),\n });\n\n return (\n <Box\n ref={keyboard.rootRef}\n role=\"listbox\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n style={{ height: virtualizer.getTotalSize() }}\n onKeyDown={keyboard.handleKeyDown}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = rows[virtualItem.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n data-tree-list-row={row.kind}\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n w=\"full\"\n style={{ transform: `translateY(${virtualItem.start}px)` }}\n >\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n );\n })}\n </Box>\n );\n};\n\nconst StackTreeList = (props: TreeListProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n virtualize,\n scrollRef,\n } = props;\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n });\n\n if (virtualize && scrollRef) {\n return <VirtualTreeList {...props} rows={rows} scrollRef={scrollRef} />;\n }\n\n return (\n <Stack\n ref={keyboard.rootRef}\n role=\"listbox\"\n gap={sectionGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n overflowX=\"hidden\"\n onKeyDown={keyboard.handleKeyDown}\n >\n {sections.map((section) => {\n const sectionRows = rows.filter((row) => row.sectionId === section.id);\n\n return (\n <Stack\n key={section.id}\n gap={nodeGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n data-testid={`tree-list-section-${section.id}`}\n >\n {sectionRows.map((row) => (\n <Box key={row.key} w=\"full\" minW=\"0\">\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n ))}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n\ninterface TreeListBackgroundProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n}\n\n// Renders the right-click target as a layer behind the rows so empty back-area\n// clicks open the menu while item rows (painted above) keep their own handling.\n// `flex` lets the layer grow to fill a flex-column host (e.g. a scroll area);\n// `minH=full` covers definite-height hosts. Either way the absolute child fills\n// the wrapper, so the whole back area is right-clickable, not just the rows.\nconst TreeListBackground = (props: TreeListBackgroundProps) => {\n const { actions, children } = props;\n\n return (\n <Box position=\"relative\" flex=\"1 0 auto\" minH=\"full\" w=\"full\" minW=\"0\" maxW=\"full\">\n <ResourceContextMenu actions={actions} closeOnSelect={false}>\n <Box position=\"absolute\" inset=\"0\" zIndex={0} aria-hidden data-tree-list-background=\"true\" />\n </ResourceContextMenu>\n <Box position=\"relative\" zIndex={1} w=\"full\" minW=\"0\" maxW=\"full\">\n {children}\n </Box>\n </Box>\n );\n};\n\nexport const TreeList = (props: TreeListProps) => {\n const content = props.draggable ? (\n <TreeListSortable\n sections={props.sections}\n expandedSectionIds={props.expandedSectionIds}\n expandedNodeIds={props.expandedNodeIds}\n activeNodeId={props.activeNodeId}\n rowVariant={props.rowVariant}\n sectionGap={props.sectionGap}\n nodeGap={props.nodeGap}\n linkComponent={props.linkComponent}\n onNavigate={props.onNavigate}\n onToggleSection={props.onToggleSection}\n onToggleNode={props.onToggleNode}\n onSectionContextMenu={props.onSectionContextMenu}\n onReorderSections={props.onReorderSections}\n onReorderNodes={props.onReorderNodes}\n />\n ) : (\n <StackTreeList {...props} />\n );\n\n if (!props.backgroundContextActions || props.backgroundContextActions.length === 0) {\n return content;\n }\n\n return <TreeListBackground actions={props.backgroundContextActions}>{content}</TreeListBackground>;\n};\n","import { Badge, Box, HStack, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FileText, Search } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport type { TreeListNode } from \"../tree-list/tree-list.types\";\nimport { buildChangedFilesTree } from \"./build-changed-files-tree\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\n title: string;\n paths: string[];\n selectedPath: string | null;\n viewMode: ChangedFilesViewMode;\n searchQuery: string;\n expandedFolderIds: Set<string>;\n onSelectPath: (path: string) => void;\n onSearchQueryChange: (value: string) => void;\n onToggleFolder: (id: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}\n\nconst changeLabels: Record<string, string> = {\n added: \"A\",\n copied: \"C\",\n deleted: \"D\",\n modified: \"U\",\n permissionChange: \"M\",\n renamed: \"R\",\n};\n\nconst changeColors: Record<string, string> = {\n added: \"green\",\n copied: \"purple\",\n deleted: \"red\",\n modified: \"blue\",\n permissionChange: \"yellow\",\n renamed: \"orange\",\n};\n\nconst getFilePathParts = (filePath: string) => {\n const lastSlashIndex = filePath.lastIndexOf(\"/\");\n if (lastSlashIndex < 0) return { fileName: filePath, dirPath: \"\" };\n return { fileName: filePath.slice(lastSlashIndex + 1), dirPath: filePath.slice(0, lastSlashIndex) };\n};\n\nconst renderFileLabel = (node: ChangedFileTreeNode, viewMode: ChangedFilesViewMode, filePath: string) => {\n const { fileName, dirPath } = getFilePathParts(filePath);\n if (viewMode !== \"flat\" || !dirPath) return node.name;\n\n return (\n <Text textStyle=\"label/S/regular\" truncate>\n <Text as=\"span\" color=\"fg.default\">\n {fileName}\n </Text>{\" \"}\n <Text as=\"span\" color=\"fg.muted\">\n {dirPath}\n </Text>\n </Text>\n );\n};\n\nconst toTreeListNodes = (input: {\n nodes: ChangedFileTreeNode[];\n viewMode: ChangedFilesViewMode;\n onSelectPath: (path: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}): TreeListNode[] => {\n const { nodes, viewMode, onSelectPath, resolveFileIcon, changeByPath } = input;\n\n return nodes.map((node) => {\n if (node.type === \"folder\") {\n return {\n id: node.id,\n label: node.name,\n isContainer: true,\n children: toTreeListNodes({\n nodes: node.children ?? [],\n viewMode,\n onSelectPath,\n resolveFileIcon,\n changeByPath,\n }),\n };\n }\n\n const filePath = node.id.replace(/^file:/, \"\");\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"14px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n\n return {\n id: node.id,\n label: renderFileLabel(node, viewMode, filePath),\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? (\n <Badge size=\"sm\" variant=\"subtle\" colorPalette={changeColors[change] ?? \"gray\"} flexShrink={0}>\n {changeLabels[change] ?? change}\n </Badge>\n ) : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\n title,\n paths,\n selectedPath,\n viewMode,\n searchQuery,\n expandedFolderIds,\n onSelectPath,\n onSearchQueryChange,\n onToggleFolder,\n resolveFileIcon,\n changeByPath,\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const fileTree = buildChangedFilesTree(paths, viewMode);\n const treeNodes = toTreeListNodes({ nodes: fileTree, viewMode, onSelectPath, resolveFileIcon, changeByPath });\n const emptyTitle = searchQuery.trim() ? \"No matching files\" : \"No changed files\";\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" gap=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Header variant=\"main\" justifyContent=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\">\n <HStack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"foreground.secondary\" truncate>\n {title}\n </Text>\n <Badge size=\"sm\" variant=\"subtle\" flexShrink={0}>\n {paths.length}\n </Badge>\n </HStack>\n </Header>\n <Stack gap=\"xs\" borderBottomWidth=\"1px\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n border=\"0\"\n borderRadius=\"0\"\n placeholder=\"Filter files\"\n value={searchQuery}\n _hover={{ borderColor: \"transparent\" }}\n _focus={{ borderColor: \"transparent\", boxShadow: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Stack>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n bg=\"bg\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowX: \"hidden\" } }}\n >\n {paths.length > 0 ? (\n <TreeList\n sections={[{ id: \"files\", nodes: treeNodes }]}\n expandedNodeIds={[...expandedFolderIds]}\n activeNodeId={selectedPath ? `file:${selectedPath}` : null}\n rowVariant=\"tree\"\n onToggleNode={onToggleFolder}\n virtualize\n scrollRef={scrollRef}\n />\n ) : (\n <Box px=\"xs\" py=\"xs\">\n <EmptyState title={emptyTitle} size=\"sm\" textAlign=\"left\" alignItems=\"flex-start\" />\n </Box>\n )}\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, Flex, HStack, IconButton, Menu, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport {\n Check,\n ChevronsDownUp,\n ChevronsUpDown,\n List,\n ListTree,\n PanelLeftClose,\n PanelLeftOpen,\n Rows2,\n Settings2,\n SquareSplitHorizontal,\n} from \"lucide-react\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ResizableSplitLayout } from \"../resizable-split-layout\";\nimport { buildChangedFilesTree, collectExpandedFolderIds, sortPathsByViewMode } from \"./build-changed-files-tree\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffDrawer, type DiffDrawerExpansionState, type DiffExpansionCommand } from \"./diff-drawer\";\nimport { useDiffViewerStore } from \"./diff-viewer.store\";\nimport { FileListPanel } from \"./file-list-panel\";\nimport type { ChangedFilesViewMode, FileIconInfo } from \"./types\";\n\nexport interface DiffViewerProps {\n diffs: Diff[];\n changedFilePaths?: string[];\n defaultSelectedPath?: string | null;\n loading?: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst buildChangeByPath = (diffs: Diff[]) => new Map(diffs.map((diff) => [getDiffPath(diff), diff.change]));\nconst sumDiffStats = (diffs: Diff[]) =>\n diffs.reduce(\n (total, diff) => ({\n additions: total.additions + (diff.additions ?? 0),\n deletions: total.deletions + (diff.deletions ?? 0),\n }),\n { additions: 0, deletions: 0 },\n );\n\nconst buildFilteredDiffs = (input: {\n diffs: Diff[];\n normalizedSearchQuery: string;\n viewMode: ChangedFilesViewMode;\n}) => {\n const { diffs, normalizedSearchQuery, viewMode } = input;\n const matchingDiffs = normalizedSearchQuery\n ? diffs.filter((diff) => getDiffPath(diff).toLowerCase().includes(normalizedSearchQuery))\n : diffs;\n const orderedPaths = sortPathsByViewMode(matchingDiffs.map(getDiffPath), viewMode);\n const orderByPath = new Map(orderedPaths.map((path, index) => [path, index]));\n\n return [...matchingDiffs].sort((left, right) => {\n const leftOrder = orderByPath.get(getDiffPath(left)) ?? Number.MAX_SAFE_INTEGER;\n const rightOrder = orderByPath.get(getDiffPath(right)) ?? Number.MAX_SAFE_INTEGER;\n return leftOrder - rightOrder;\n });\n};\n\nconst resolveSelectedPath = (preferredPaths: string[], fallbackPaths: string[]) =>\n preferredPaths[0] ?? fallbackPaths[0] ?? null;\n\nconst MenuItemContent = (props: { checked?: boolean; icon: ReactNode; label: string }) => {\n const { checked, icon, label } = props;\n\n return (\n <HStack gap=\"2xs\" w=\"full\">\n <Box flexShrink={0}>{icon}</Box>\n <Text flex=\"1\">{label}</Text>\n {checked !== undefined ? (\n <Box w=\"14px\" flexShrink={0}>\n {checked ? <Check size={14} /> : null}\n </Box>\n ) : null}\n </HStack>\n );\n};\n\nconst loadingDiffItems = [\"first\", \"second\", \"third\"] as const;\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" bg=\"bg\" p=\"xs\" gap=\"xs\" role=\"status\" aria-busy=\"true\" aria-label=\"Loading diff panel\">\n {loadingDiffItems.map((item) => (\n <Skeleton key={item} h=\"72px\" w=\"full\" flexShrink=\"0\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => {\n const { diffs, changedFilePaths, defaultSelectedPath = null, loading = false, onLoadDiff, resolveFileIcon } = props;\n const [diffExpansionCommand, setDiffExpansionCommand] = useState<DiffExpansionCommand | null>(null);\n const [diffExpansionState, setDiffExpansionState] = useState<DiffDrawerExpansionState>({\n allExpanded: false,\n allCollapsed: false,\n });\n const {\n isTreePanelOpen,\n viewMode,\n diffViewMode,\n searchQuery,\n selectedPath,\n expandedFolderIds,\n setTreePanelOpen,\n setViewMode,\n setDiffViewMode,\n setSearchQuery,\n setSelectedPath,\n setExpandedFolderIds,\n toggleFolder,\n expandAll,\n collapseAll,\n } = useDiffViewerStore();\n\n const diffPaths = diffs.map(getDiffPath);\n const filePaths = changedFilePaths ?? diffPaths;\n const normalizedSearchQuery = searchQuery.trim().toLowerCase();\n const filteredFilePaths = normalizedSearchQuery\n ? filePaths.filter((path) => path.toLowerCase().includes(normalizedSearchQuery))\n : filePaths;\n const filteredDiffs = buildFilteredDiffs({ diffs, normalizedSearchQuery, viewMode });\n const changeByPath = buildChangeByPath(diffs);\n const filteredDiffPaths = filteredDiffs.map(getDiffPath);\n const fileTree = buildChangedFilesTree(filteredFilePaths, viewMode);\n const folderIds = viewMode === \"nested\" ? collectExpandedFolderIds(fileTree) : [];\n const filteredFilePathKey = filteredFilePaths.join(\"\\0\");\n const filteredDiffPathKey = filteredDiffPaths.join(\"\\0\");\n const resolvedSelectedPath =\n selectedPath ?? defaultSelectedPath ?? resolveSelectedPath(filteredDiffPaths, filteredFilePaths);\n const hasDiffs = filteredDiffs.length > 0;\n const emptyDiffTitle = normalizedSearchQuery ? \"No matching diffs\" : \"No changes\";\n const showDiffEmptyState = !loading && !hasDiffs;\n const totalDiff = sumDiffStats(filteredDiffs);\n const hasExpandableItems = folderIds.length > 0 || filteredDiffs.length > 0;\n const allFilesExpanded = folderIds.every((folderId) => expandedFolderIds.has(folderId));\n const allFilesCollapsed = folderIds.every((folderId) => !expandedFolderIds.has(folderId));\n const allDiffsExpanded = filteredDiffs.length === 0 || diffExpansionState.allExpanded;\n const allDiffsCollapsed = filteredDiffs.length === 0 || diffExpansionState.allCollapsed;\n const isExpandAllDisabled = !hasExpandableItems || (allFilesExpanded && allDiffsExpanded);\n const isCollapseAllDisabled = !hasExpandableItems || (allFilesCollapsed && allDiffsCollapsed);\n\n useEffect(() => {\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n const tree = buildChangedFilesTree(filePaths, viewMode);\n setExpandedFolderIds(viewMode === \"nested\" ? collectExpandedFolderIds(tree) : []);\n }, [filteredFilePathKey, setExpandedFolderIds, viewMode]);\n\n useEffect(() => {\n const diffPaths = filteredDiffPathKey ? filteredDiffPathKey.split(\"\\0\") : [];\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n if (resolvedSelectedPath && diffPaths.includes(resolvedSelectedPath)) return;\n setSelectedPath(resolveSelectedPath(diffPaths, filePaths));\n }, [filteredDiffPathKey, filteredFilePathKey, resolvedSelectedPath, setSelectedPath]);\n\n const expandAllFilesAndDiffs = () => {\n expandAll(folderIds);\n setDiffExpansionCommand((current) => ({ action: \"expand\", id: (current?.id ?? 0) + 1 }));\n };\n\n const collapseAllFilesAndDiffs = () => {\n collapseAll();\n setDiffExpansionCommand((current) => ({ action: \"collapse\", id: (current?.id ?? 0) + 1 }));\n };\n\n const selectChangedFilePath = (path: string) => {\n const currentIndex = resolvedSelectedPath ? filteredDiffPaths.indexOf(resolvedSelectedPath) : -1;\n const nextIndex = filteredDiffPaths.indexOf(path);\n const direction = currentIndex >= 0 && nextIndex >= 0 && nextIndex < currentIndex ? \"up\" : \"down\";\n\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", direction, id: (current?.id ?? 0) + 1, path }));\n };\n\n const diffPanel = (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" flex=\"1\" bg=\"bg\" gap=\"0\">\n <Header variant=\"main\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\" justifyContent=\"space-between\">\n <HStack gap=\"xs\" minW=\"0\">\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Diff view options\" variant=\"ghost\" size=\"sm\">\n <Settings2 size={14} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"190px\" bg=\"bg\">\n <Menu.Item value=\"toggle-file-tree\" onClick={() => setTreePanelOpen(!isTreePanelOpen)}>\n <MenuItemContent\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n />\n </Menu.Item>\n <Menu.Separator />\n {filePaths.length > 0 ? (\n <>\n <Menu.Item value=\"nested\" onClick={() => setViewMode(\"nested\")}>\n <MenuItemContent checked={viewMode === \"nested\"} icon={<ListTree size={14} />} label=\"Nested\" />\n </Menu.Item>\n <Menu.Item value=\"flat\" onClick={() => setViewMode(\"flat\")}>\n <MenuItemContent checked={viewMode === \"flat\"} icon={<List size={14} />} label=\"Flat\" />\n </Menu.Item>\n <Menu.Separator />\n </>\n ) : null}\n <Menu.Item value=\"unified\" onClick={() => setDiffViewMode(\"unified\")}>\n <MenuItemContent checked={diffViewMode === \"unified\"} icon={<Rows2 size={14} />} label=\"Unified\" />\n </Menu.Item>\n <Menu.Item value=\"split\" onClick={() => setDiffViewMode(\"split\")}>\n <MenuItemContent\n checked={diffViewMode === \"split\"}\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n />\n </Menu.Item>\n <Menu.Separator />\n <Menu.Item value=\"expand-all\" disabled={isExpandAllDisabled} onClick={expandAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsUpDown size={14} />} label=\"Expand all\" />\n </Menu.Item>\n <Menu.Item value=\"collapse-all\" disabled={isCollapseAllDisabled} onClick={collapseAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsDownUp size={14} />} label=\"Collapse all\" />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n {showDiffEmptyState ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {emptyDiffTitle}\n </Text>\n ) : null}\n </HStack>\n <DiffBubble variant=\"ghost\" additions={totalDiff.additions} deletions={totalDiff.deletions} />\n </Header>\n {loading ? (\n <DiffViewerLoading />\n ) : hasDiffs ? (\n <Box flex=\"1\" minH=\"0\">\n <DiffDrawer\n diffs={filteredDiffs}\n selectedDiffPath={resolvedSelectedPath}\n onLoadDiff={onLoadDiff}\n onSelectDiffPath={setSelectedPath}\n onExpansionStateChange={setDiffExpansionState}\n expansionCommand={diffExpansionCommand}\n diffViewMode={diffViewMode}\n />\n </Box>\n ) : (\n <Box flex=\"1\" minH=\"0\" px=\"md\" py=\"lg\" display=\"flex\" alignItems=\"center\" justifyContent=\"center\" bg=\"bg\">\n <EmptyState title={emptyDiffTitle} />\n </Box>\n )}\n </Stack>\n );\n\n return (\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" bg=\"bg\" gap=\"0\" data-testid=\"diff-viewer\">\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <FileListPanel\n title=\"Changed files\"\n paths={filteredFilePaths}\n selectedPath={resolvedSelectedPath}\n viewMode={viewMode}\n searchQuery={searchQuery}\n expandedFolderIds={expandedFolderIds}\n onSelectPath={selectChangedFilePath}\n onSearchQueryChange={setSearchQuery}\n onToggleFolder={toggleFolder}\n resolveFileIcon={resolveFileIcon}\n changeByPath={changeByPath}\n />\n }\n contentPanel={diffPanel}\n collapsed={!isTreePanelOpen}\n defaultSizePx={288}\n minSizePx={224}\n contentMinSizePx={320}\n resizeLabel=\"Resize file list panel\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n","import { AbsoluteCenter, Button, Stack, Text } from \"@chakra-ui/react\";\nimport { Component, type ErrorInfo, type ReactNode } from \"react\";\n\nimport { AlertMessage } from \"./alert\";\nimport { ContentPlaceholder } from \"./content-placeholder\";\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode;\n label?: string;\n onReset?: () => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n console.error(\"Dashboard error boundary caught an error\", error, info);\n }\n\n handleReset = () => {\n this.setState({ error: null });\n this.props.onReset?.();\n };\n\n render() {\n const { children, fallback, label } = this.props;\n const { error } = this.state;\n\n if (error) {\n if (fallback) {\n return fallback;\n }\n\n return <ErrorFallback error={error} label={label} onReset={this.handleReset} />;\n }\n\n return children;\n }\n}\n\ninterface ErrorFallbackProps {\n error: Error;\n label?: string;\n onReset?: () => void;\n}\n\nexport const ErrorFallback = (props: ErrorFallbackProps) => {\n const { error, label, onReset } = props;\n\n return (\n <ContentPlaceholder height=\"100%\" width=\"100%\">\n <AbsoluteCenter>\n <AlertMessage\n status=\"error\"\n title={<Text textStyle=\"paragraph/M/medium\">{label ?? \"Something went wrong\"}</Text>}\n >\n <Stack gap=\"sm\">\n <Text textStyle=\"paragraph/S/regular\">\n {error.message || \"An unexpected error occurred while rendering this section.\"}\n </Text>\n {onReset ? (\n <Button size=\"sm\" variant=\"solid\" colorScheme={\"black\"} onClick={onReset}>\n Try again\n </Button>\n ) : null}\n </Stack>\n </AlertMessage>\n </AbsoluteCenter>\n </ContentPlaceholder>\n );\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\n\ninterface HorizontalMenuStackProps extends StackProps {\n children?: StackProps[\"children\"];\n}\n\nexport function HorizontalMenuStack(props: HorizontalMenuStackProps) {\n const { children, h = \"41px\", px = \"xs\", py = \"xs\", borderBottomWidth = \"1px\", ...rest } = props;\n\n return (\n <HStack\n {...rest}\n h={h}\n justify=\"space-between\"\n align=\"center\"\n borderBottomWidth={borderBottomWidth}\n borderColor={\"border.muted\"}\n px={px}\n py={py}\n >\n {children}\n </HStack>\n );\n}\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\n\nexport type SimpleCardProps = BoxProps;\n\nexport const SimpleCard = (props: SimpleCardProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"0\" bg=\"bg\" {...rest}>\n {children}\n </Box>\n );\n};\n\nexport type SimpleCardBodyProps = BoxProps;\n\nexport const SimpleCardBody = (props: SimpleCardBodyProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box p=\"md\" {...rest}>\n {children}\n </Box>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { SimpleCard, SimpleCardBody } from \"./simple-card\";\n\nexport interface IntegrationCardProps {\n icon: ReactNode;\n name: string;\n description: string;\n id: string;\n version?: string;\n category?: string;\n active?: boolean;\n actionLabel?: string;\n}\n\nexport const IntegrationCard = (props: IntegrationCardProps) => {\n const { icon, name, description, id, version, category, active = false, actionLabel } = props;\n\n return (\n <SimpleCard>\n <SimpleCardBody>\n <HStack gap=\"4\" alignItems=\"flex-start\">\n <Icon boxSize=\"1em\" fontSize=\"2xl\" flexShrink=\"0\" color=\"fg.muted\">\n {icon}\n </Icon>\n <Box flex=\"1\" minW=\"0\">\n <Stack gap=\"1\">\n <HStack gap=\"2\" flexWrap=\"wrap\">\n <Text textStyle=\"sm\" fontWeight=\"semibold\">\n {name}\n </Text>\n <Badge size=\"sm\" variant=\"outline\">\n {id}\n </Badge>\n {version && (\n <Badge size=\"sm\" variant=\"outline\">\n v{version}\n </Badge>\n )}\n {category && (\n <Badge size=\"sm\" variant=\"outline\">\n {category}\n </Badge>\n )}\n </HStack>\n <Text color=\"fg.muted\">{description}</Text>\n </Stack>\n </Box>\n <Button\n type=\"button\"\n disabled={active}\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"gray\"\n bg=\"bg\"\n flexShrink=\"0\"\n >\n {active && (\n <Icon color=\"fg.success\">\n <Check />\n </Icon>\n )}\n {actionLabel ?? (active ? \"Active\" : \"Connect\")}\n </Button>\n </HStack>\n </SimpleCardBody>\n </SimpleCard>\n );\n};\n","import { Box, Collapsible, Flex, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ItemSectionProps {\n children: ReactNode;\n title?: string;\n defaultOpen?: boolean;\n action?: ReactNode;\n}\n\n/**\n * A collapsible section wrapper with a title trigger and optional action.\n */\nexport const ItemSection = (props: ItemSectionProps) => {\n const { children, title, defaultOpen = true, action } = props;\n\n return (\n <Collapsible.Root defaultOpen={defaultOpen} width=\"full\">\n <Flex>\n <Collapsible.Trigger\n _hover={{\n background: \"bg.hover\",\n }}\n padding=\"sm\"\n height=\"2rem\"\n display=\"flex\"\n width=\"full\"\n gap=\"2\"\n alignItems=\"center\"\n cursor=\"pointer\"\n justifyContent=\"space-between\"\n >\n {title && (\n <Text fontWeight=\"600\" textStyle=\"label/S/medium\">\n {title}\n </Text>\n )}\n <Collapsible.Indicator transition=\"transform 0.2s\" _open={{ transform: \"rotate(90deg)\" }}>\n <ChevronRight size={16} />\n </Collapsible.Indicator>\n </Collapsible.Trigger>\n {action && (\n <Box marginLeft=\"auto\" onClick={(e) => e.stopPropagation()}>\n {action}\n </Box>\n )}\n </Flex>\n <Collapsible.Content>{children}</Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import { Box, HStack, Link, Separator, Stack, Text } from \"@chakra-ui/react\";\n\nexport interface OpenSourceNotice {\n name: string;\n version?: string;\n license?: string;\n copyright?: string;\n homepageUrl?: string;\n sourceUrl?: string;\n attribution?: string;\n}\n\nexport interface OpenSourceNoticesScreenProps {\n notices: OpenSourceNotice[];\n title?: string;\n description?: string;\n productName?: string;\n productVersion?: string;\n generatedAt?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n}\n\nconst getNoticeKey = (notice: OpenSourceNotice, index: number) => {\n return `${notice.name}-${notice.version ?? \"unknown\"}-${index}`;\n};\n\nconst getNoticeTitle = (notice: OpenSourceNotice) => {\n if (!notice.version) return notice.name;\n\n return `${notice.name} v${notice.version}`;\n};\n\nexport const OpenSourceNoticesScreen = (props: OpenSourceNoticesScreenProps) => {\n const {\n notices,\n title = \"Open Source and Third-Party Notices\",\n description = \"This product includes software developed by the open source community.\",\n productName,\n productVersion,\n generatedAt,\n emptyTitle = \"No third-party notices available\",\n emptyDescription = \"No third-party packages were included in this build.\",\n } = props;\n\n return (\n <Stack width=\"full\" minHeight=\"100%\" background=\"bg\" color=\"fg\" padding={{ base: \"md\", md: \"xl\" }} gap=\"lg\">\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/L\">{title}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n\n <HStack gap=\"md\" flexWrap=\"wrap\">\n {productName ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Product: {productName}\n </Text>\n ) : null}\n\n {productVersion ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Version: {productVersion}\n </Text>\n ) : null}\n\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Packages: {notices.length}\n </Text>\n\n {generatedAt ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Generated: {generatedAt}\n </Text>\n ) : null}\n </HStack>\n </Stack>\n\n <Separator borderColor=\"border.muted\" />\n\n {notices.length === 0 ? (\n <Stack borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"md\" padding=\"lg\" gap=\"xs\">\n <Text textStyle=\"label/L/medium\">{emptyTitle}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {emptyDescription}\n </Text>\n </Stack>\n ) : (\n <Stack gap=\"md\">\n {notices.map((notice, index) => (\n <Box\n key={getNoticeKey(notice, index)}\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"md\"\n padding=\"md\"\n >\n <Stack gap=\"sm\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/L/medium\">{getNoticeTitle(notice)}</Text>\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n License: {notice.license ?? \"Unknown\"}\n </Text>\n </Stack>\n\n {notice.copyright ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n {notice.copyright}\n </Text>\n ) : null}\n\n {(notice.homepageUrl || notice.sourceUrl) && (\n <Stack gap=\"2xs\">\n {notice.homepageUrl ? (\n <Link\n href={notice.homepageUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Homepage\n </Link>\n ) : null}\n\n {notice.sourceUrl ? (\n <Link\n href={notice.sourceUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Source code\n </Link>\n ) : null}\n </Stack>\n )}\n\n {notice.attribution ? (\n <Box background=\"bg.muted\" borderRadius=\"sm\" padding=\"sm\">\n <Text textStyle=\"label/S/regular\" whiteSpace=\"pre-wrap\">\n {notice.attribution}\n </Text>\n </Box>\n ) : null}\n </Stack>\n </Box>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n","import type { ReactNode } from \"react\";\n\nexport const DEFAULT_PALETTE_ASSET_LIMIT = 48;\n\nexport interface PaletteSearchEntry {\n id: string;\n mode?: string;\n label: ReactNode;\n searchText?: string;\n secondaryLabel?: ReactNode;\n assetType?: string;\n}\n\nexport interface PaletteMode {\n id: string;\n inputPrefix?: string;\n}\n\nexport interface FilterPaletteEntriesOptions {\n query: string;\n mode?: string;\n getEffectiveQuery?: (query: string) => string;\n defaultAssetLimit?: number;\n}\n\nconst getSearchableText = (entry: PaletteSearchEntry) => {\n const label = typeof entry.label === \"string\" ? entry.label : \"\";\n const secondaryLabel = typeof entry.secondaryLabel === \"string\" ? entry.secondaryLabel : \"\";\n\n return `${label} ${entry.searchText ?? \"\"} ${secondaryLabel}`;\n};\n\nconst hasInputPrefix = (query: string, inputPrefix: string) => query.trimStart().startsWith(inputPrefix);\n\nexport const resolvePaletteMode = (query: string, modes: readonly PaletteMode[] = [], fallbackMode?: string) => {\n const prefixedMode = modes.find((mode) => mode.inputPrefix && hasInputPrefix(query, mode.inputPrefix));\n\n return prefixedMode?.id ?? fallbackMode ?? modes.find((mode) => !mode.inputPrefix)?.id ?? modes[0]?.id;\n};\n\nexport const getPaletteEffectiveQuery = (query: string, modes: readonly PaletteMode[] = [], modeId?: string) => {\n const mode = modes.find(\n (candidate) => candidate.id === modeId && candidate.inputPrefix && hasInputPrefix(query, candidate.inputPrefix),\n );\n\n if (!mode?.inputPrefix) return query.trim();\n\n return query.trimStart().slice(mode.inputPrefix.length).trim();\n};\n\nconst limitDefaultAssetEntries = <T extends PaletteSearchEntry>(entries: T[], limit: number) => {\n const counts: Record<string, number> = {};\n\n return entries.filter((entry) => {\n const assetType = entry.assetType;\n if (!assetType) return true;\n\n const count = counts[assetType] ?? 0;\n if (count >= limit) return false;\n\n counts[assetType] = count + 1;\n return true;\n });\n};\n\nexport const filterPaletteEntries = <T extends PaletteSearchEntry>(\n entries: T[],\n options: FilterPaletteEntriesOptions,\n) => {\n const effectiveQuery = (options.getEffectiveQuery?.(options.query) ?? options.query.trim()).toLowerCase();\n\n const filteredEntries = entries.filter((entry) => {\n if (options.mode && entry.mode !== options.mode) return false;\n if (!effectiveQuery) return true;\n\n return getSearchableText(entry).toLowerCase().includes(effectiveQuery);\n });\n\n if (effectiveQuery || options.defaultAssetLimit === undefined) {\n return filteredEntries;\n }\n\n return limitDefaultAssetEntries(filteredEntries, options.defaultAssetLimit);\n};\n","import { Box, HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { Check } from \"lucide-react\";\nimport { type RefObject, useEffect } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport type { PaletteEntry } from \"./palette\";\n\ntype PaletteRow<T extends PaletteEntry> =\n | { type: \"group\"; id: string; label: string }\n | { type: \"entry\"; id: string; entry: T; entryIndex: number };\n\nconst GROUP_ROW_HEIGHT = 24;\nconst ENTRY_ROW_HEIGHT = 40;\nconst INITIAL_VIEWPORT_HEIGHT = 384;\nconst ACTIVE_ROW_BG = \"bg.menu-item.hover\";\n\nconst buildEntryItem = (entry: PaletteEntry): ListRowItem => ({\n id: entry.id,\n label: entry.label,\n description: entry.description ?? entry.secondaryLabel,\n icon: entry.icon,\n endContent:\n entry.endContent ??\n (entry.shortcut || entry.isSelected ? (\n <HStack gap=\"2\">\n {entry.shortcut}\n {entry.isSelected ? <Icon as={Check} boxSize=\"14px\" color=\"fg.muted\" /> : null}\n </HStack>\n ) : undefined),\n onActivate: entry.onActivate,\n});\n\nconst buildRows = <T extends PaletteEntry>(entries: T[]) => {\n const rows: PaletteRow<T>[] = [];\n\n entries.forEach((entry, index) => {\n const previousEntry = entries[index - 1];\n if (entry.group && entry.group !== previousEntry?.group) {\n rows.push({ type: \"group\", id: `group:${entry.group}:${entry.id}`, label: entry.group });\n }\n\n rows.push({ type: \"entry\", id: entry.id, entry, entryIndex: index });\n });\n\n return rows;\n};\n\nconst getActiveRowIndex = <T extends PaletteEntry>(rows: PaletteRow<T>[], activeIndex: number) =>\n rows.findIndex((row) => row.type === \"entry\" && row.entryIndex === activeIndex);\n\ninterface PaletteListProps<T extends PaletteEntry> {\n entries: T[];\n activeIndex: number;\n emptyLabel: string;\n onHover: (index: number) => void;\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nexport const PaletteList = <T extends PaletteEntry>(props: PaletteListProps<T>) => {\n const { entries, activeIndex, emptyLabel, onHover, scrollRef } = props;\n const rows = buildRows(entries);\n const activeRowIndex = getActiveRowIndex(rows, activeIndex);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => (rows[index]?.type === \"group\" ? GROUP_ROW_HEIGHT : ENTRY_ROW_HEIGHT),\n getItemKey: (index) => rows[index]?.id ?? index,\n initialRect: { width: 0, height: INITIAL_VIEWPORT_HEIGHT },\n overscan: 6,\n });\n\n useEffect(() => {\n if (activeRowIndex < 0) return;\n\n virtualizer.scrollToIndex(activeRowIndex, { align: \"auto\", behavior: \"auto\" });\n }, [activeRowIndex, virtualizer]);\n\n if (entries.length === 0) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" px=\"sm\" py=\"md\">\n {emptyLabel}\n </Text>\n );\n }\n\n return (\n <Box role=\"listbox\" position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualRow.key}\n data-index={virtualRow.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n style={{ top: virtualRow.start }}\n >\n {row.type === \"group\" ? (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\" px=\"sm\" pt=\"xs\" pb=\"2xs\">\n {row.label}\n </Text>\n ) : (\n <ListRow\n variant=\"compact\"\n {...buildEntryItem(row.entry)}\n isSelected={row.entryIndex === activeIndex}\n selectedBg={ACTIVE_ROW_BG}\n hoverBg={row.entryIndex === activeIndex ? ACTIVE_ROW_BG : \"transparent\"}\n tabIndex={-1}\n onPointerMove={() => onHover(row.entryIndex)}\n />\n )}\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { CloseButton, Dialog, Input, InputGroup } from \"@chakra-ui/react\";\nimport type { KeyboardEvent, ReactNode, SetStateAction } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n DEFAULT_PALETTE_ASSET_LIMIT,\n type FilterPaletteEntriesOptions,\n filterPaletteEntries,\n getPaletteEffectiveQuery,\n type PaletteMode,\n type PaletteSearchEntry,\n resolvePaletteMode,\n} from \"./palette-filter\";\nimport { PaletteList } from \"./palette-list\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport type { FilterPaletteEntriesOptions, PaletteMode, PaletteSearchEntry };\nexport { DEFAULT_PALETTE_ASSET_LIMIT, filterPaletteEntries };\n\nexport interface PaletteEntry extends PaletteSearchEntry {\n description?: ReactNode;\n icon?: ReactNode;\n shortcut?: ReactNode;\n endContent?: ReactNode;\n group?: string;\n isSelected?: boolean;\n onActivate: () => void;\n}\n\nexport interface PaletteState<T extends PaletteEntry> {\n query: string;\n mode?: string;\n activeIndex: number;\n entries: T[];\n}\n\nexport interface PaletteEscapeContext<T extends PaletteEntry> extends PaletteState<T> {\n activeEntry: T | null;\n entryCount: number;\n setQuery: (query: string) => void;\n setActiveIndex: (index: SetStateAction<number>) => void;\n runActiveEntry: () => void;\n closePalette: () => void;\n}\n\nexport type PaletteStateValue<T extends PaletteEntry, TValue> = TValue | ((state: PaletteState<T>) => TValue);\n\nexport interface PaletteProps<T extends PaletteEntry = PaletteEntry> {\n open: boolean;\n entries: T[];\n initialQuery?: string;\n initialActiveIndex?: number;\n mode?: string;\n modes?: PaletteMode[];\n resetKey?: string;\n inputIcon?: PaletteStateValue<T, ReactNode>;\n placeholder?: PaletteStateValue<T, string>;\n emptyLabel?: string;\n footerStart?: ReactNode;\n footerEnd?: ReactNode;\n filterEntries?: (entries: T[], query: string, mode?: string) => T[];\n onActiveEntryChange?: (entry: T | null, index: number) => void;\n onQueryChange?: (query: string) => void;\n onClose: () => void;\n onEscape?: (ctx: PaletteEscapeContext<T>) => boolean | undefined;\n}\n\nconst resolveStateValue = <T extends PaletteEntry, TValue>(\n value: PaletteStateValue<T, TValue> | undefined,\n state: PaletteState<T>,\n fallback: TValue,\n) => {\n if (typeof value === \"function\") {\n return (value as (state: PaletteState<T>) => TValue)(state);\n }\n\n return value ?? fallback;\n};\n\nconst paletteInputStateProps = {\n borderColor: \"transparent\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nexport const Palette = <T extends PaletteEntry>(props: PaletteProps<T>) => {\n const {\n open,\n entries,\n initialQuery = \"\",\n initialActiveIndex = 0,\n mode,\n modes,\n resetKey = \"default\",\n inputIcon,\n placeholder,\n emptyLabel = \"No results.\",\n footerStart,\n footerEnd,\n filterEntries,\n onActiveEntryChange,\n onQueryChange,\n onClose,\n onEscape,\n } = props;\n const [query, setQueryState] = useState(initialQuery);\n const [activeIndex, setActiveIndex] = useState(initialActiveIndex);\n const inputRef = useRef<HTMLInputElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef({ open: false, resetKey });\n const activeMode = mode ?? resolvePaletteMode(query, modes);\n const filteredEntries = filterEntries\n ? filterEntries(entries, query, activeMode)\n : filterPaletteEntries(entries, {\n query,\n mode: activeMode,\n getEffectiveQuery: (value) => getPaletteEffectiveQuery(value, modes, activeMode),\n });\n const activeEntry = filteredEntries[activeIndex] ?? null;\n const state: PaletteState<T> = { query, mode: activeMode, activeIndex, entries: filteredEntries };\n const resolvedInputIcon = resolveStateValue(inputIcon, state, null);\n const resolvedPlaceholder = resolveStateValue(placeholder, state, \"Search\");\n\n const setQuery = (nextQuery: string) => {\n setQueryState(nextQuery);\n onQueryChange?.(nextQuery);\n };\n\n const runActiveEntry = () => {\n activeEntry?.onActivate();\n };\n\n const closePalette = () => {\n onClose();\n };\n\n useEffect(() => {\n const previousSetup = setupRef.current;\n setupRef.current = { open, resetKey };\n if (!open) return;\n\n const shouldInitialize = !previousSetup.open || previousSetup.resetKey !== resetKey;\n if (!shouldInitialize) return;\n\n setQueryState(initialQuery);\n setActiveIndex(initialActiveIndex);\n\n const timeout = setTimeout(() => {\n const input = inputRef.current;\n if (!input) return;\n input.focus();\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n return () => clearTimeout(timeout);\n }, [initialActiveIndex, initialQuery, open, resetKey]);\n\n useEffect(() => {\n setActiveIndex((current) => Math.min(current, Math.max(filteredEntries.length - 1, 0)));\n }, [filteredEntries.length]);\n\n useEffect(() => {\n onActiveEntryChange?.(activeEntry, activeIndex);\n }, [activeEntry, activeIndex, onActiveEntryChange]);\n\n const handleEscape = () => {\n const handled = onEscape?.({\n ...state,\n activeEntry,\n entryCount: filteredEntries.length,\n setQuery,\n setActiveIndex,\n runActiveEntry,\n closePalette,\n });\n if (handled) return;\n\n if (query.length > 0) {\n setQuery(\"\");\n setActiveIndex(0);\n return;\n }\n\n closePalette();\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setActiveIndex((current) => Math.min(current + 1, Math.max(filteredEntries.length - 1, 0)));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(current - 1, 0));\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n runActiveEntry();\n return;\n }\n\n if (event.key !== \"Escape\") return;\n\n event.preventDefault();\n event.stopPropagation();\n handleEscape();\n };\n\n const hasFooter = footerStart || footerEnd;\n\n return (\n <Dialog.Root open={open} onOpenChange={(details) => !details.open && closePalette()}>\n <Dialog.Backdrop />\n <Dialog.Positioner alignItems=\"flex-start\" pt=\"10vh\">\n <Dialog.Content maxW=\"44rem\" p=\"0\" overflow=\"hidden\">\n <Dialog.Header px=\"0\" py=\"0\" borderBottomWidth=\"1px\" borderBottomColor=\"border.muted\">\n <InputGroup startElement={resolvedInputIcon}>\n <Input\n ref={inputRef}\n value={query}\n placeholder={resolvedPlaceholder}\n aria-label={resolvedPlaceholder}\n autoComplete=\"off\"\n borderWidth=\"0\"\n borderColor=\"transparent\"\n borderRadius=\"0\"\n h=\"3rem\"\n _hover={paletteInputStateProps}\n _active={paletteInputStateProps}\n _focus={paletteInputStateProps}\n _focusVisible={paletteInputStateProps}\n onChange={(event) => {\n setQuery(event.target.value);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n />\n </InputGroup>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" mr=\"2\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body p=\"0\">\n <ScrollArea\n maxH=\"24rem\"\n showHorizontalScrollbar={false}\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n >\n <PaletteList\n entries={filteredEntries}\n activeIndex={activeIndex}\n emptyLabel={emptyLabel}\n onHover={setActiveIndex}\n scrollRef={scrollRef}\n />\n </ScrollArea>\n </Dialog.Body>\n {hasFooter ? (\n <Dialog.Footer\n justifyContent=\"space-between\"\n px=\"sm\"\n py=\"xs\"\n borderTopWidth=\"1px\"\n borderTopColor=\"border.muted\"\n >\n {footerStart}\n {footerEnd}\n </Dialog.Footer>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { Kbd } from \"@chakra-ui/react\";\nimport { Fragment } from \"react\";\n\nexport type PaletteShortcutBinding = string | string[];\n\nconst splitShortcutStep = (step: string) => {\n return step\n .split(\"+\")\n .map((part) => part.trim())\n .filter(Boolean);\n};\n\nconst getShortcutDisplayParts = (binding: PaletteShortcutBinding) => {\n const steps = Array.isArray(binding) ? binding.map(splitShortcutStep) : [splitShortcutStep(binding)];\n\n return steps.map((step) => step.map((label) => ({ label })));\n};\n\nexport const PaletteShortcut = (props: { binding: PaletteShortcutBinding }) => {\n const { binding } = props;\n const steps = getShortcutDisplayParts(binding);\n\n return (\n <>\n {steps.map((step, stepIndex) => (\n <Fragment key={`${step.map((part) => part.label).join(\"+\")}-${stepIndex}`}>\n {step.map((part, partIndex) => (\n <Fragment key={`${part.label}-${partIndex}`}>\n <Kbd fontSize=\"xs\" borderRadius=\"0\" display=\"inline-flex\" alignItems=\"center\" aria-label={part.label}>\n {part.label}\n </Kbd>\n {partIndex < step.length - 1 ? \" + \" : null}\n </Fragment>\n ))}\n {stepIndex < steps.length - 1 ? \" then \" : null}\n </Fragment>\n ))}\n </>\n );\n};\n","import { HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { CircleHelp } from \"lucide-react\";\nimport { Tooltip } from \"../tooltip\";\n\ninterface ParamEditorLabelProps {\n name: string;\n description?: string;\n}\n\nexport const ParamEditorLabel = (props: ParamEditorLabelProps) => {\n const { name, description } = props;\n\n return (\n <HStack gap=\"1\" alignItems=\"center\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\" truncate>\n {name}\n </Text>\n {description ? (\n <Tooltip content={description} showArrow>\n <Icon as={CircleHelp} boxSize=\"12px\" color=\"fg.muted\" opacity={0.6} cursor=\"help\" flexShrink={0} />\n </Tooltip>\n ) : null}\n </HStack>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface ParamEditorReadOnlyValueProps extends Omit<BoxProps, \"children\"> {\n children: ReactNode;\n preserveWhitespace?: boolean;\n}\n\nexport const ParamEditorReadOnlyValue = (props: ParamEditorReadOnlyValueProps) => {\n const { children, preserveWhitespace = false, ...boxProps } = props;\n\n return (\n <Box minW=\"0\" textStyle=\"label/S/regular\" whiteSpace={preserveWhitespace ? \"pre-wrap\" : undefined} {...boxProps}>\n {children}\n </Box>\n );\n};\n","import { Box, ColorPicker, type ColorPickerValueChangeDetails, Flex, parseColor } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface ColorInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const ColorInput = (props: ColorInputProps) => {\n const { id, defaultValue, name, onChange, description, readOnly, hideLabel = false, fullWidth = false } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextColor: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextColor), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newColor: string) => {\n setValue(newColor);\n scheduleChange(newColor);\n };\n\n if (readOnly) {\n const valueElement = (\n <ParamEditorReadOnlyValue>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Box boxSize=\"0.75rem\" borderRadius=\"xs\" borderWidth=\"1px\" borderColor=\"border.muted\" bg={value} />\n <Box as=\"span\">{value}</Box>\n </Flex>\n </ParamEditorReadOnlyValue>\n );\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n const rootProps = {\n value: parseColor(value),\n onValueChange: (details: ColorPickerValueChangeDetails) => handleChange(details.value.toString(\"hex\")),\n disabled: readOnly,\n };\n\n const picker = (\n <ColorPicker.Root {...rootProps} size=\"sm\" maxW={fullWidth ? \"100%\" : \"8.75rem\"}>\n <ColorPicker.HiddenInput />\n <ColorPicker.Label srOnly>{name}</ColorPicker.Label>\n <ColorPicker.Control>\n <ColorPicker.Input readOnly={readOnly} />\n <ColorPicker.Trigger />\n </ColorPicker.Control>\n <ColorPicker.Positioner>\n <ColorPicker.Content>\n <ColorPicker.Area />\n <ColorPicker.Sliders />\n <ColorPicker.SwatchGroup>\n <ColorPicker.SwatchTrigger value={value}>\n <ColorPicker.Swatch value={value} />\n </ColorPicker.SwatchTrigger>\n </ColorPicker.SwatchGroup>\n </ColorPicker.Content>\n </ColorPicker.Positioner>\n </ColorPicker.Root>\n );\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {picker}\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {picker}\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface DateInputProps {\n id: string;\n defaultValue: string;\n name: string;\n min?: string;\n max?: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const DateInput = (props: DateInputProps) => {\n const {\n id,\n defaultValue,\n name,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{value}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"8.75rem\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n )}\n </Box>\n );\n};\n","import { NumberInput as ChakraNumberInput } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface NumberInputProps extends ChakraNumberInput.RootProps {}\n\nexport const NumberInputRoot = React.forwardRef<HTMLDivElement, NumberInputProps>(function NumberInput(props, ref) {\n const { children, ...rest } = props;\n return (\n <ChakraNumberInput.Root ref={ref} variant=\"outline\" {...rest}>\n {children}\n <ChakraNumberInput.Control>\n <ChakraNumberInput.IncrementTrigger />\n <ChakraNumberInput.DecrementTrigger />\n </ChakraNumberInput.Control>\n </ChakraNumberInput.Root>\n );\n});\n\nexport const NumberInputField = ChakraNumberInput.Input;\nexport const NumberInputScrubber = ChakraNumberInput.Scrubber;\nexport const NumberInputLabel = ChakraNumberInput.Label;\n","import { Slider as ChakraSlider } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SliderProps extends ChakraSlider.RootProps {}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(function Slider(props, ref) {\n const { children, ...rest } = props;\n\n return (\n <ChakraSlider.Root ref={ref} variant=\"solid\" {...rest}>\n <ChakraSlider.Control>\n <ChakraSlider.Track borderRadius=\"0\">\n <ChakraSlider.Range />\n </ChakraSlider.Track>\n <ChakraSlider.Thumbs />\n </ChakraSlider.Control>\n {children}\n </ChakraSlider.Root>\n );\n});\n","import { Box, Flex, type NumberInputValueChangeDetails, type SliderValueChangeDetails } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { NumberInputField, NumberInputRoot } from \"../number-input\";\nimport { Slider } from \"../slider\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface NumberInputProps {\n id: string;\n defaultValue: number;\n name: string;\n step?: number;\n min?: number;\n max?: number;\n onChange: (id: string, value: number) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n hideSlider?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const NumberInput = (props: NumberInputProps) => {\n const {\n id,\n defaultValue,\n name,\n step = 1,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n hideSlider = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const isRange = min !== undefined && max !== undefined;\n const showSlider = isRange && !hideSlider;\n const useFullWidthLayout = fullWidth && !showSlider;\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const scheduleChange = (nextValue: number) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{value}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {useFullWidthLayout ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <NumberInputRoot\n disabled={readOnly}\n width=\"100%\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <NumberInputRoot\n disabled={readOnly}\n width=\"5rem\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Flex>\n )}\n {showSlider && (\n <Slider\n size=\"sm\"\n disabled={readOnly}\n value={[value]}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: SliderValueChangeDetails) => {\n setValue(details.value[0]);\n }}\n onValueChangeEnd={(details: SliderValueChangeDetails) => {\n onChange(id, details.value[0]);\n }}\n />\n )}\n </Box>\n );\n};\n","import { Box, Button, Flex, Icon, Menu } from \"@chakra-ui/react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface Option {\n id: string;\n name: string;\n icon?: string;\n}\n\ninterface SelectionInputProps {\n id: string;\n defaultValue: string | string[];\n name: string;\n options: Option[];\n onChange: (id: string, value: string | string[]) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n multiSelect?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n placeholder?: string;\n fullWidth?: boolean;\n}\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const {\n id,\n defaultValue,\n name,\n options,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n multiSelect = false,\n placeholder,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string | string[]) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const isSelected = (optionId: string) => {\n if (multiSelect) {\n return Array.isArray(value) && value.includes(optionId);\n }\n return value === optionId;\n };\n\n const getDisplayText = () => {\n if (multiSelect) {\n const selectedValues = Array.isArray(value) ? value : [];\n if (selectedValues.length === 0) {\n return placeholder || `Select`;\n }\n\n const selectedOptions = selectedValues\n .map((id) => options.find((o) => o.id === id))\n .filter(Boolean)\n .map((opt) => opt!.name);\n\n if (selectedOptions.length <= 3) {\n return selectedOptions.join(\", \");\n }\n const displayItems = selectedOptions.slice(0, 3).join(\", \");\n const remaining = selectedOptions.length - 3;\n return `${displayItems} +${remaining}`;\n }\n const selectedOption = options.find((o) => o.id === value);\n return selectedOption?.name || \"Select\";\n };\n\n const handleSelect = (newValue: string) => {\n if (multiSelect) {\n const currentValues = Array.isArray(value) ? value : [];\n let updatedValues: string[];\n\n if (currentValues.includes(newValue)) {\n updatedValues = currentValues.filter((v) => v !== newValue);\n } else {\n updatedValues = [...currentValues, newValue];\n }\n\n setValue(updatedValues);\n scheduleChange(updatedValues);\n } else {\n setValue(newValue);\n scheduleChange(newValue);\n }\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{getDisplayText()}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button\n size=\"sm\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"border\"\n disabled={readOnly}\n width=\"100%\"\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\" w=\"full\">\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n </Flex>\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button size=\"sm\" borderWidth=\"1px\" borderStyle=\"solid\" borderColor=\"border\" disabled={readOnly}>\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input, Textarea } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface TextInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n singleLine?: boolean;\n hideLabel?: boolean;\n fullWidth?: boolean;\n}\n\nexport const TextInput = (props: TextInputProps) => {\n const {\n id,\n defaultValue,\n name,\n onChange,\n description,\n readOnly,\n singleLine = true,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue preserveWhitespace={!singleLine}>{value}</ParamEditorReadOnlyValue>;\n\n if (singleLine && !fullWidth) {\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n {singleLine && !fullWidth ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n flex=\"1\"\n maxW=\"12.5rem\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n ) : (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {singleLine ? (\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n ) : (\n <Textarea\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n rows={3}\n resize=\"vertical\"\n />\n )}\n </Box>\n )}\n </Box>\n );\n};\n","import { Box, Button, Collapsible, Flex, Stack, Text, useDisclosure } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronLeft } from \"lucide-react\";\nimport { ColorInput } from \"./color-input\";\nimport { DateInput } from \"./date-input\";\nimport { NumberInput } from \"./number-input\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\nimport { SelectionInput } from \"./selection-input\";\nimport { TextInput } from \"./text-input\";\n\ninterface InputGroupComponentProps {\n group: InputGroup;\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const InputGroupComponent = (props: InputGroupComponentProps) => {\n const { group, defaultValues, onChange, readOnly, fullWidth = false } = props;\n const { open, onToggle } = useDisclosure({\n defaultOpen: !group.defaultCollapsed,\n });\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={onChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Box>\n {group.collapsible ? (\n <Button variant=\"ghost\" size=\"xs\" onClick={onToggle} pl={0} _hover={{ bg: \"transparent\" }}>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n {open ? <ChevronDown size={14} /> : <ChevronLeft size={14} />}\n </Flex>\n </Button>\n ) : (\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n )}\n\n {group.description && (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" mb=\"sm\">\n {group.description}\n </Text>\n )}\n\n <Collapsible.Root open={group.collapsible ? open : true}>\n <Collapsible.Content>\n <Stack gap=\"md\">{group.params.map(renderParam)}</Stack>\n </Collapsible.Content>\n </Collapsible.Root>\n </Box>\n );\n};\n","import { Box, Flex, Separator, Stack } from \"@chakra-ui/react\";\nimport { Fragment } from \"react\";\nimport { ColorInput } from \"./color-input\";\nimport { DateInput } from \"./date-input\";\nimport { InputGroupComponent } from \"./input-group\";\nimport { NumberInput } from \"./number-input\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\nimport { SelectionInput } from \"./selection-input\";\nimport { TextInput } from \"./text-input\";\n\nexport interface ParamEditorProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues?: ParamValueMap;\n onChange?: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const ParamEditor = (props: ParamEditorProps) => {\n const { params = [], groups = [], defaultValues = {}, onChange, readOnly, fullWidth = false } = props;\n const handleChange = onChange ?? (() => undefined);\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={handleChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap=\"sm\">\n {params.map(renderParam)}\n\n {params.length > 0 && groups.length > 0 && <Separator borderColor=\"border.muted\" />}\n\n {groups.map((group, index) => (\n <Fragment key={group.id}>\n <InputGroupComponent\n group={group}\n defaultValues={defaultValues}\n onChange={handleChange}\n readOnly={readOnly}\n fullWidth={fullWidth}\n />\n {index < groups.length - 1 && <Separator borderColor=\"border.muted\" />}\n </Fragment>\n ))}\n </Stack>\n );\n};\n","import { Badge, Button, Dialog, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUp, FileText, Folder, FolderOpen, Home, Search } from \"lucide-react\";\nimport { type KeyboardEvent, useEffect, useState } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport interface RepoPickerDialogEntry {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n}\n\ninterface RepoPickerDialogProps {\n open: boolean;\n title?: string;\n description?: string;\n currentPath?: string;\n entries: RepoPickerDialogEntry[];\n selectedPath?: string | null;\n selectedPaths?: string[];\n isLoading?: boolean;\n error?: string;\n isSelectDisabled?: boolean;\n onClose: () => void;\n onSelect: () => void;\n onSelectHomeDirectory: () => void;\n onSelectParentDirectory: () => void;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n}\n\nexport type { RepoPickerDialogProps };\n\nconst getEntryIcon = (entry: RepoPickerDialogEntry) => {\n if (!entry.isDirectory) return FileText;\n if (entry.isGitRepo) return FolderOpen;\n return Folder;\n};\n\nconst filterEntries = (entries: RepoPickerDialogEntry[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return entries;\n }\n\n return entries.filter((entry) => `${entry.name} ${entry.path}`.toLowerCase().includes(normalizedQuery));\n};\n\ntype RepoPickerListEntryProps = {\n entry: RepoPickerDialogEntry;\n selectedPath: string | null;\n selectedPathSet: Set<string>;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n};\n\nconst RepoPickerListEntry = (props: RepoPickerListEntryProps) => {\n const { entry, selectedPath, selectedPathSet, onEntryClick } = props;\n const isAlreadySelected = entry.isGitRepo && selectedPathSet.has(entry.path);\n const isDisabled = !entry.isDirectory || isAlreadySelected;\n\n const handleClick = () => {\n if (isAlreadySelected) {\n return;\n }\n\n onEntryClick(entry);\n };\n\n return (\n <ListRow\n variant=\"compact\"\n isSelected={selectedPath === entry.path}\n id={entry.path}\n label={entry.name}\n icon={<Icon as={getEntryIcon(entry)} boxSize=\"16px\" />}\n endContent={\n entry.isGitRepo ? (\n <Badge\n textStyle=\"label/XS/medium\"\n px=\"xs\"\n py=\"2px\"\n colorPalette=\"green\"\n variant=\"subtle\"\n pointerEvents=\"none\"\n >\n Git repo\n </Badge>\n ) : undefined\n }\n disabled={isDisabled}\n onActivate={handleClick}\n />\n );\n};\n\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nconst searchInputFocusVisibleProps = {\n boxShadow: \"none\",\n outline: \"2px solid\",\n outlineColor: \"blue.border\",\n outlineOffset: \"-2px\",\n} as const;\n\nconst focusInlinePickerOption = (event: KeyboardEvent<HTMLDivElement>) => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) {\n return;\n }\n\n const options = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]:not(:disabled)'),\n );\n\n if (options.length === 0) {\n return;\n }\n\n const currentIndex = options.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex = (() => {\n if (event.key === \"Home\") return 0;\n if (event.key === \"End\") return options.length - 1;\n if (event.key === \"ArrowUp\") return currentIndex <= 0 ? options.length - 1 : currentIndex - 1;\n return currentIndex < 0 || currentIndex === options.length - 1 ? 0 : currentIndex + 1;\n })();\n\n event.preventDefault();\n options[nextIndex]?.focus();\n};\n\nexport const RepoPickerDialog = (props: RepoPickerDialogProps) => {\n const {\n open,\n title = \"Select folder\",\n description,\n currentPath = \"\",\n entries,\n selectedPath = null,\n selectedPaths = [],\n isLoading = false,\n error = \"\",\n isSelectDisabled = false,\n onClose,\n onSelect,\n onSelectHomeDirectory,\n onSelectParentDirectory,\n onEntryClick,\n } = props;\n\n const [query, setQuery] = useState(\"\");\n const selectedPathSet = new Set(selectedPaths);\n const filteredEntries = filterEntries(entries, query);\n const searchScope = currentPath || \"Home\";\n\n useEffect(() => {\n if (!open || !searchScope) return;\n setQuery(\"\");\n }, [open, searchScope]);\n\n return (\n <Dialog.Root\n lazyMount\n unmountOnExit\n closeOnInteractOutside={false}\n open={open}\n onOpenChange={(details) => !details.open && onClose()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n <Stack direction=\"row\" gap=\"sm\" align=\"center\">\n <Button aria-label=\"Go to home directory\" variant=\"outline\" size=\"sm\" onClick={onSelectHomeDirectory}>\n <Home size={16} />\n </Button>\n <Button\n aria-label=\"Go to parent directory\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onSelectParentDirectory}\n disabled={!currentPath || currentPath === \"/\"}\n >\n <ChevronUp size={16} />\n </Button>\n <Text\n data-testid=\"folder-picker-path\"\n textStyle=\"paragraph/S/regular\"\n color=\"fg.muted\"\n flex=\"1\"\n lineClamp={1}\n >\n {searchScope}\n </Text>\n </Stack>\n\n <Stack gap=\"0\" borderWidth=\"1px\" borderRadius=\"md\" borderColor=\"border.muted\" overflow=\"hidden\">\n <InputGroup\n startElement={<Search size={14} />}\n width=\"full\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n >\n <Input\n borderWidth=\"0\"\n borderRadius=\"0\"\n value={query}\n placeholder=\"Search repositories\"\n aria-label=\"Search repositories\"\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputFocusVisibleProps}\n onChange={(event) => setQuery(event.target.value)}\n />\n </InputGroup>\n {isLoading ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Loading...\n </Text>\n ) : error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"red.500\" p=\"sm\">\n {error}\n </Text>\n ) : filteredEntries.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n No entries found.\n </Text>\n ) : (\n <ScrollArea maxHeight=\"320px\" contentProps={{ padding: \"sm\" }}>\n <Stack gap=\"xs\" role=\"listbox\" aria-label=\"Repository folders\" onKeyDown={focusInlinePickerOption}>\n {filteredEntries.map((entry) => (\n <RepoPickerListEntry\n key={entry.path}\n entry={entry}\n selectedPath={selectedPath}\n selectedPathSet={selectedPathSet}\n onEntryClick={onEntryClick}\n />\n ))}\n </Stack>\n </ScrollArea>\n )}\n </Stack>\n </Stack>\n </Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"sm\">\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={onSelect} disabled={isSelectDisabled}>\n Select repository\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface SidebarSnapshot {\n open: boolean;\n expandedSections: string[];\n expandedNodes: string[];\n width: number | null;\n}\n\ninterface SidebarState extends SidebarSnapshot {\n openSidebar: () => void;\n closeSidebar: () => void;\n toggleSidebar: () => void;\n toggleSection: (sectionId: string) => void;\n toggleNode: (nodeId: string) => void;\n setSectionExpanded: (sectionId: string, expanded: boolean) => void;\n setNodeExpanded: (nodeId: string, expanded: boolean) => void;\n setWidth: (width: number) => void;\n reset: () => void;\n}\n\ninterface CreateSidebarStoreOptions {\n storageKey: string;\n initialState?: Partial<SidebarSnapshot>;\n}\n\nconst DEFAULT_SNAPSHOT = {\n open: true,\n expandedSections: [],\n expandedNodes: [],\n width: null,\n} satisfies SidebarSnapshot;\n\nconst SIDEBAR_STORE_NAMESPACE = \"pstdio/ui/sidebar\";\n\nconst toStorageName = (storageKey: string) => `${SIDEBAR_STORE_NAMESPACE}/${storageKey}`;\n\nconst toggleId = (values: string[], id: string) =>\n values.includes(id) ? values.filter((value) => value !== id) : [...values, id];\n\nconst setExpanded = (values: string[], id: string, expanded: boolean) => {\n if (expanded) {\n return values.includes(id) ? values : [...values, id];\n }\n\n return values.filter((value) => value !== id);\n};\n\nconst getPersistedSnapshot = (state: SidebarState) => ({\n open: state.open,\n expandedSections: state.expandedSections,\n expandedNodes: state.expandedNodes,\n width: state.width,\n});\n\nexport const createSidebarStore = (options: CreateSidebarStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = { ...DEFAULT_SNAPSHOT, ...initialState };\n\n return createStore<SidebarState>()(\n persist(\n (set) => ({\n ...snapshot,\n openSidebar: () => set((state) => ({ ...state, open: true })),\n closeSidebar: () => set((state) => ({ ...state, open: false })),\n toggleSidebar: () => set((state) => ({ ...state, open: !state.open })),\n toggleSection: (sectionId) =>\n set((state) => ({\n ...state,\n expandedSections: toggleId(state.expandedSections, sectionId),\n })),\n toggleNode: (nodeId) =>\n set((state) => ({\n ...state,\n expandedNodes: toggleId(state.expandedNodes, nodeId),\n })),\n setSectionExpanded: (sectionId, expanded) =>\n set((state) => ({\n ...state,\n expandedSections: setExpanded(state.expandedSections, sectionId, expanded),\n })),\n setNodeExpanded: (nodeId, expanded) =>\n set((state) => ({\n ...state,\n expandedNodes: setExpanded(state.expandedNodes, nodeId, expanded),\n })),\n setWidth: (width) => set((state) => ({ ...state, width })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n};\n\nconst sidebarStoreRegistry = new Map<string, ReturnType<typeof createSidebarStore>>();\n\nexport const getSidebarStore = (storageKey: string, initialState?: Partial<SidebarSnapshot>) => {\n const existingStore = sidebarStoreRegistry.get(storageKey);\n\n if (existingStore) {\n return existingStore;\n }\n\n const store = createSidebarStore({ storageKey, initialState });\n sidebarStoreRegistry.set(storageKey, store);\n\n return store;\n};\n\nexport const useSidebarStore = <T>(\n storageKey: string,\n selector: (state: SidebarState) => T,\n initialState?: Partial<SidebarSnapshot>,\n) => {\n const store = getSidebarStore(storageKey, initialState);\n return useStore(store, selector);\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface SidebarFooterProps {\n children?: ReactNode;\n}\n\nexport const SidebarFooter = (props: SidebarFooterProps) => {\n const { children } = props;\n\n if (!children) {\n return null;\n }\n\n return (\n <Box bg=\"bg\" position=\"sticky\" bottom=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n","export const PANEL_HEADER_HEIGHT = \"2.5rem\";\n","import { HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { PANEL_HEADER_HEIGHT } from \"../panel-header.constants\";\n\ninterface SidebarHeaderProps {\n children?: ReactNode;\n}\n\nexport const SidebarHeader = (props: SidebarHeaderProps) => {\n const { children } = props;\n\n return (\n <HStack\n data-testid=\"sidebar-header\"\n justify=\"space-between\"\n align=\"center\"\n minH={PANEL_HEADER_HEIGHT}\n bg=\"bg\"\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n gap=\"0\"\n >\n <HStack minW=\"0\" flex=\"1\">\n {children}\n </HStack>\n </HStack>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef } from \"react\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport { useSidebarStore } from \"./sidebar.store\";\nimport type { SidebarProps } from \"./sidebar.types\";\nimport { SidebarFooter } from \"./sidebar-footer\";\nimport { SidebarHeader } from \"./sidebar-header\";\n\nconst DEFAULT_WIDTH = 240;\nconst DEFAULT_MIN_WIDTH = 200;\nconst DEFAULT_MAX_WIDTH = 480;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveInitialWidth = (width?: string | number, defaultWidth = DEFAULT_WIDTH) => {\n if (typeof width === \"number\") return width;\n if (typeof width === \"string\") {\n const parsed = parseInt(width, 10);\n if (!Number.isNaN(parsed)) return parsed;\n }\n return defaultWidth;\n};\n\nexport const Sidebar = (props: SidebarProps) => {\n const {\n storageKey,\n sections,\n activeNodeId,\n backgroundContextActions,\n header,\n footer,\n width,\n closable = true,\n emptyLabel = \"No items available.\",\n defaultExpandedSections,\n linkComponent,\n onNavigate,\n onOpenChange,\n resizable = true,\n defaultWidth,\n minWidth = DEFAULT_MIN_WIDTH,\n maxWidth = DEFAULT_MAX_WIDTH,\n virtualize = false,\n } = props;\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n\n const initialWidth = resolveInitialWidth(width, defaultWidth);\n const initialState = {\n ...(defaultExpandedSections ? { expandedSections: defaultExpandedSections } : {}),\n width: initialWidth,\n };\n\n const open = useSidebarStore(storageKey, (state) => state.open, initialState);\n const persistedWidth = useSidebarStore(storageKey, (state) => state.width, initialState);\n const expandedSections = useSidebarStore(storageKey, (state) => state.expandedSections, initialState);\n const expandedNodes = useSidebarStore(storageKey, (state) => state.expandedNodes, initialState);\n const toggleSection = useSidebarStore(storageKey, (state) => state.toggleSection, initialState);\n const toggleNode = useSidebarStore(storageKey, (state) => state.toggleNode, initialState);\n\n useEffect(() => {\n onOpenChange?.(open);\n }, [onOpenChange, open]);\n\n const effectiveWidth = clamp(persistedWidth ?? initialWidth, minWidth, maxWidth);\n if (!open && closable) {\n return null;\n }\n\n const widthCss = resizable ? `${effectiveWidth}px` : (width ?? `${initialWidth}px`);\n\n return (\n <Flex\n as=\"aside\"\n data-testid=\"sidebar\"\n direction=\"column\"\n position=\"relative\"\n h=\"100%\"\n w={widthCss}\n minW={widthCss}\n maxW={widthCss}\n flexShrink={0}\n borderRightWidth=\"1px\"\n borderRightColor=\"border.muted\"\n bg=\"bg\"\n >\n <SidebarHeader>{header}</SidebarHeader>\n\n <ScrollArea\n flex=\"1\"\n mt=\"lg\"\n viewportRef={viewportRef}\n viewportProps={{ display: \"block\", style: { overflowX: \"hidden\" } }}\n contentProps={{\n style: { minWidth: \"100%\", width: \"100%\", minHeight: \"100%\", display: \"flex\", flexDirection: \"column\" },\n }}\n >\n <Box w=\"full\" minW=\"0\" flex=\"1 0 auto\" display=\"flex\" flexDirection=\"column\">\n {sections.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"3\">\n {emptyLabel}\n </Text>\n ) : (\n <TreeList\n sections={sections}\n expandedSectionIds={expandedSections}\n expandedNodeIds={expandedNodes}\n activeNodeId={activeNodeId}\n backgroundContextActions={backgroundContextActions}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n virtualize={virtualize}\n scrollRef={viewportRef}\n />\n )}\n </Box>\n </ScrollArea>\n\n <SidebarFooter>{footer}</SidebarFooter>\n </Flex>\n );\n};\n","import { Avatar, Button, HStack, Icon, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, FolderIcon } from \"lucide-react\";\nimport { ListRow } from \"../list-row/list-row\";\n\ninterface SidebarProjectMenuProps {\n name: string;\n projectsLabel: string;\n onSelectProjects: () => void;\n}\n\nexport const SidebarProjectMenu = (props: SidebarProjectMenuProps) => {\n const { name, projectsLabel, onSelectProjects } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button borderRadius=\"0\" variant=\"ghost\" size=\"sm\" width=\"full\" justifyContent=\"flex-start\">\n <HStack gap=\"0\" minW=\"0\" flex=\"1\">\n <Avatar.Root size=\"2xs\">\n <Avatar.Fallback name={name} />\n </Avatar.Root>\n <Text textStyle=\"label/S/medium\" truncate>\n {name}\n </Text>\n </HStack>\n <ChevronDown size={14} />\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"240px\" bg=\"bg\">\n <Menu.Item value=\"projects\" asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id=\"projects\"\n label={projectsLabel}\n icon={<Icon as={FolderIcon} boxSize=\"16px\" />}\n onActivate={onSelectProjects}\n />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Switch as ChakraSwitch } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SwitchProps extends ChakraSwitch.RootProps {\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n rootRef?: React.RefObject<HTMLLabelElement | null>;\n trackLabel?: { on: React.ReactNode; off: React.ReactNode };\n thumbLabel?: { on: React.ReactNode; off: React.ReactNode };\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(props, ref) {\n const { inputProps, children, rootRef, trackLabel, thumbLabel, disabled = false, ...rest } = props;\n const interactiveCursor = disabled ? \"not-allowed\" : \"pointer\";\n\n return (\n <ChakraSwitch.Root ref={rootRef} disabled={disabled} cursor={interactiveCursor} {...rest}>\n <ChakraSwitch.HiddenInput ref={ref} {...inputProps} />\n <ChakraSwitch.Control borderRadius=\"md\" cursor={interactiveCursor}>\n <ChakraSwitch.Thumb borderRadius=\"full\">\n {thumbLabel && (\n <ChakraSwitch.ThumbIndicator fallback={thumbLabel?.off}>{thumbLabel?.on}</ChakraSwitch.ThumbIndicator>\n )}\n </ChakraSwitch.Thumb>\n {trackLabel && <ChakraSwitch.Indicator fallback={trackLabel.off}>{trackLabel.on}</ChakraSwitch.Indicator>}\n </ChakraSwitch.Control>\n {children != null && <ChakraSwitch.Label cursor={interactiveCursor}>{children}</ChakraSwitch.Label>}\n </ChakraSwitch.Root>\n );\n});\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\n\ninterface TabVisibilitySnapshot {\n tabOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TabVisibilityState extends TabVisibilitySnapshot {\n setTab: (key: string, value: VisibilityOverride | undefined) => void;\n toggleTab: (key: string, hiddenByDefault: boolean) => void;\n clearTab: (key: string) => void;\n reset: () => void;\n}\n\ninterface CreateTabVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TabVisibilitySnapshot = { tabOverrides: {} };\n\nconst STORE_NAMESPACE = \"pstdio/ui/tab-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n key: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(key in overrides)) return overrides;\n const { [key]: _removed, ...rest } = overrides;\n return rest;\n }\n if (overrides[key] === value) return overrides;\n return { ...overrides, [key]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, key: string, hiddenByDefault: boolean) => {\n const current = resolveEffective(overrides[key], hiddenByDefault);\n return setOverride(overrides, key, current === \"hidden\" ? \"shown\" : \"hidden\");\n};\n\nconst getPersistedSnapshot = (state: TabVisibilityState) => ({ tabOverrides: state.tabOverrides });\n\nexport const createTabVisibilityStore = (options: CreateTabVisibilityStoreOptions) =>\n createStore<TabVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setTab: (key, value) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, value) })),\n toggleTab: (key, hiddenByDefault) =>\n set((state) => ({ ...state, tabOverrides: toggleOverride(state.tabOverrides, key, hiddenByDefault) })),\n clearTab: (key) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTabVisibilityStore>>();\n\nexport const getTabVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n const store = createTabVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTabVisibilityStore = <T>(storageKey: string, selector: (state: TabVisibilityState) => T) => {\n const store = getTabVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TabVisibilitySnapshot, TabVisibilityState };\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport type { VisibilityOverride } from \"./tree-list-visibility.store\";\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nexport const resolveVisibility = (\n override: VisibilityOverride | undefined,\n hiddenByDefault: boolean | undefined,\n): VisibilityOverride => override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst isNodeVisible = (node: TreeListNode, nodeOverrides: Record<string, VisibilityOverride>) =>\n resolveVisibility(nodeOverrides[node.id], node.hiddenByDefault) === \"shown\";\n\nconst filterNodes = (nodes: TreeListNode[], nodeOverrides: Record<string, VisibilityOverride>): TreeListNode[] => {\n let changed = false;\n const next: TreeListNode[] = [];\n for (const node of nodes) {\n if (!isNodeVisible(node, nodeOverrides)) {\n changed = true;\n continue;\n }\n if (node.children && node.children.length > 0) {\n const filteredChildren = filterNodes(node.children, nodeOverrides);\n if (filteredChildren !== node.children) {\n changed = true;\n next.push({ ...node, children: filteredChildren });\n continue;\n }\n }\n next.push(node);\n }\n return changed ? next : nodes;\n};\n\nexport const filterVisibleSections = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n): TreeListSection[] => {\n let changed = false;\n const next: TreeListSection[] = [];\n for (const section of sections) {\n if (resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault) === \"hidden\") {\n changed = true;\n continue;\n }\n const filteredNodes = filterNodes(section.nodes, nodeOverrides);\n if (filteredNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: filteredNodes });\n continue;\n }\n next.push(section);\n }\n return changed ? next : sections;\n};\n\nexport interface TreeVisibilityMenuActions {\n onToggleSection: (id: string, hiddenByDefault: boolean) => void;\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n onResetOrder?: () => void;\n}\n\ninterface BuildMenuOptions {\n checkmark: ReactNode;\n}\n\nconst buildSectionAction = (\n section: TreeListSection,\n sectionOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = section.hiddenByDefault === true;\n const effective = resolveVisibility(sectionOverrides[section.id], hiddenByDefault);\n return {\n key: `section:${section.id}`,\n label: section.label ?? section.id,\n onClick: () => actions.onToggleSection(section.id, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n };\n};\n\nconst buildNodeAction = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n // Locked nodes stay visible and are surfaced as a disabled, checked row.\n const locked = node.canHide === false;\n return {\n key: `node:${node.id}`,\n label: toStringLabel(node.label, node.id),\n isDisabled: locked,\n onClick: locked ? () => {} : () => actions.onToggleNode(node.id, hiddenByDefault),\n endContent: locked || effective === \"shown\" ? options.checkmark : null,\n };\n};\n\nexport const buildTreeVisibilityMenuActions = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n\n for (const section of sections) {\n // Unlabeled sections are structural groupings, not user-facing toggle targets.\n if (section.label) result.push(buildSectionAction(section, sectionOverrides, actions, options));\n const sectionEffective = resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault);\n if (sectionEffective === \"hidden\") continue;\n for (const node of section.nodes) {\n result.push(buildNodeAction(node, nodeOverrides, actions, options));\n }\n }\n\n result.push({ key: \"__reset-visibility\", label: \"Reset to default\", onClick: actions.onResetAll });\n if (actions.onResetOrder) {\n result.push({ key: \"__reset-order\", label: \"Reset order\", onClick: actions.onResetOrder });\n }\n\n return result;\n};\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\nimport { resolveVisibility } from \"../tree-list/tree-list-visibility-filter\";\n\nexport interface TabVisibilityPlacement {\n closable?: boolean;\n hiddenByDefault?: boolean;\n title?: string;\n contributionId: string;\n}\n\nexport const filterVisibleTabs = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n getKey: (placement: T) => string,\n): T[] => {\n let changed = false;\n const next: T[] = [];\n for (const placement of placements) {\n if (placement.closable === true) {\n next.push(placement);\n continue;\n }\n const effective = resolveVisibility(tabOverrides[getKey(placement)], placement.hiddenByDefault);\n if (effective === \"hidden\") {\n changed = true;\n continue;\n }\n next.push(placement);\n }\n return changed ? next : placements;\n};\n\nexport interface TabVisibilityMenuActions {\n onToggleTab: (key: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n}\n\ninterface BuildTabMenuOptions {\n checkmark: ReactNode;\n}\n\nexport const buildTabVisibilityMenuActions = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n actions: TabVisibilityMenuActions,\n getKey: (placement: T) => string,\n options: BuildTabMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n let nonCloseableCount = 0;\n\n for (const placement of placements) {\n if (placement.closable === true) continue;\n nonCloseableCount += 1;\n const key = getKey(placement);\n const hiddenByDefault = placement.hiddenByDefault === true;\n const effective = resolveVisibility(tabOverrides[key], hiddenByDefault);\n result.push({\n key: `tab:${key}`,\n label: placement.title ?? placement.contributionId,\n onClick: () => actions.onToggleTab(key, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n });\n }\n\n if (nonCloseableCount === 0) return result;\n\n result.push({ key: \"__reset-tabs\", label: \"Reset to default\", onClick: actions.onResetAll });\n return result;\n};\n","import { Button, Editable, Flex, Icon, Menu, Table } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Check, ChevronDown, GripVertical, Trash2 } from \"lucide-react\";\n\nimport { IconColorPicker, type IconColorPickerIconOption } from \"../icon-color-picker\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TagEditorAction, TagEditorValue } from \"./tag-editor.types\";\n\ninterface TagEditorRowProps {\n actionOptions?: TagEditorAction[];\n colorOptions?: readonly string[];\n iconOptions?: readonly IconColorPickerIconOption[];\n value: TagEditorValue;\n isSaving?: boolean;\n showDefault?: boolean;\n showIcons?: boolean;\n onActionsChange: (actions: string[]) => void;\n onColorChange: (color: string) => void;\n onDelete: () => void;\n onIconChange: (icon: string | null) => void;\n onNameChange: (name: string) => void;\n onSetDefault: () => void;\n}\n\nconst ActionDropdown = (props: {\n actions: string[];\n disabled?: boolean;\n options: TagEditorAction[];\n onChange: (actions: string[]) => void;\n}) => {\n const { actions, disabled, options, onChange } = props;\n\n const toggleAction = (action: string) => {\n onChange(actions.includes(action) ? actions.filter((item) => item !== action) : [...actions, action]);\n };\n\n return (\n <Menu.Root closeOnSelect={false}>\n <Menu.Trigger asChild>\n <Button size=\"2xs\" variant=\"outline\" gap=\"xs\" disabled={disabled}>\n {actions.length} action{actions.length !== 1 ? \"s\" : \"\"}\n <Icon as={ChevronDown} boxSize=\"12px\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {options.map((option) => (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={option.value}\n label={option.label}\n isSelected={actions.includes(option.value)}\n endContent={actions.includes(option.value) ? <Check size={14} /> : undefined}\n onActivate={() => toggleAction(option.value)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const TagEditorRow = (props: TagEditorRowProps) => {\n const {\n actionOptions,\n colorOptions,\n iconOptions,\n value,\n isSaving,\n showDefault,\n showIcons,\n onActionsChange,\n onColorChange,\n onDelete,\n onIconChange,\n onNameChange,\n onSetDefault,\n } = props;\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: value.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <Table.Row ref={setNodeRef} style={style}>\n <Table.Cell width=\"40px\">\n <Flex cursor=\"grab\" {...attributes} {...listeners}>\n <GripVertical size={14} color=\"var(--chakra-colors-fg-muted)\" />\n </Flex>\n </Table.Cell>\n <Table.Cell>\n <Editable.Root\n defaultValue={value.name}\n onValueCommit={(details) => {\n const trimmed = details.value.trim();\n if (trimmed && trimmed !== value.name) onNameChange(trimmed);\n }}\n >\n <Editable.Preview />\n <Editable.Input />\n </Editable.Root>\n </Table.Cell>\n <Table.Cell width=\"54px\">\n <IconColorPicker\n color={value.color}\n colorOptions={colorOptions}\n icon={value.icon}\n iconOptions={iconOptions}\n showIcons={showIcons}\n onColorChange={onColorChange}\n onIconChange={onIconChange}\n disabled={isSaving}\n />\n </Table.Cell>\n {showDefault ? (\n <Table.Cell width=\"80px\">\n <Button\n size=\"2xs\"\n variant={value.isDefault ? \"solid\" : \"ghost\"}\n onClick={onSetDefault}\n disabled={isSaving || value.isDefault}\n aria-label={`Set ${value.name} as default`}\n >\n <Check size={14} />\n </Button>\n </Table.Cell>\n ) : null}\n {actionOptions ? (\n <Table.Cell width=\"140px\">\n <ActionDropdown\n actions={value.actions ?? []}\n disabled={isSaving}\n options={actionOptions}\n onChange={onActionsChange}\n />\n </Table.Cell>\n ) : null}\n <Table.Cell width=\"40px\">\n <Button\n size=\"2xs\"\n variant=\"ghost\"\n colorPalette=\"red\"\n onClick={onDelete}\n disabled={isSaving || value.isDefault}\n aria-label={`Delete ${value.name}`}\n >\n <Trash2 size={14} />\n </Button>\n </Table.Cell>\n </Table.Row>\n );\n};\n","import { Button, Flex, HStack, Input, Stack, Table, Text } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { Plus, X } from \"lucide-react\";\nimport type { KeyboardEvent } from \"react\";\nimport { useState } from \"react\";\n\nimport { DeleteConfirmationModal } from \"../delete-confirmation-modal\";\nimport { IconColorPicker } from \"../icon-color-picker\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\nimport { TagEditorRow } from \"./tag-editor-row\";\n\ninterface AddFormState {\n name: string;\n color: string;\n icon: string | null;\n}\n\nconst buildDraftItem = (form: AddFormState, sortOrder: number) => ({\n id: `new-${crypto.randomUUID()}`,\n name: form.name.trim(),\n color: form.color,\n icon: form.icon,\n sortOrder,\n isNew: true,\n});\n\nexport const TagEditor = (props: TagEditorProps) => {\n const {\n title,\n description,\n values,\n onValuesChange,\n onSave,\n onCancel,\n onDeleteValue,\n onSetDefault,\n hasChanges,\n isSaving,\n addLabel = \"Add tag\",\n addPlaceholder = \"Tag name\",\n actionOptions,\n actionsColumnLabel = \"Actions\",\n cancelLabel = \"Cancel\",\n colorOptions,\n defaultAddColor = \"blue\",\n defaultAddIcon = null,\n defaultColumnLabel = \"Default\",\n deleteButtonText = \"Delete tag\",\n deleteHeadline = \"Delete tag?\",\n deleteNotificationText = (value) => `This will delete \"${value.name}\".`,\n iconOptions,\n saveLabel = \"Save\",\n showDefault,\n showIcons = true,\n valueColumnLabel = \"Name\",\n } = props;\n const [isAdding, setIsAdding] = useState(false);\n const [addForm, setAddForm] = useState<AddFormState>({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n const [valueToDelete, setValueToDelete] = useState<TagEditorValue | null>(null);\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n const resetAddForm = () => {\n setIsAdding(false);\n setAddForm({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n };\n\n const updateValue = (index: number, patch: Partial<TagEditorValue>) => {\n const next = [...values];\n next[index] = { ...next[index], ...patch };\n onValuesChange(next);\n };\n\n const handleAddOption = () => {\n if (!addForm.name.trim()) return;\n const maxOrder = values.length > 0 ? Math.max(...values.map((value) => value.sortOrder)) : 0;\n onValuesChange([...values, buildDraftItem(addForm, maxOrder + 1)]);\n resetAddForm();\n };\n\n const handleDeleteOption = () => {\n if (!valueToDelete) return;\n if (onDeleteValue) {\n onDeleteValue(valueToDelete);\n } else {\n onValuesChange(values.filter((value) => value.id !== valueToDelete.id));\n }\n setValueToDelete(null);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = values.findIndex((value) => value.id === active.id);\n const newIndex = values.findIndex((value) => value.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return;\n\n onValuesChange(arrayMove(values, oldIndex, newIndex).map((value, index) => ({ ...value, sortOrder: index })));\n };\n\n const handleAddKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") handleAddOption();\n if (event.key === \"Escape\") resetAddForm();\n };\n\n return (\n <>\n <Stack gap=\"md\" height=\"100%\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"sm\" flexWrap=\"wrap\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"heading/S\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsAdding(true)} disabled={isAdding || isSaving}>\n <Plus size={16} />\n {addLabel}\n </Button>\n </Flex>\n\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={values.map((value) => value.id)} strategy={verticalListSortingStrategy}>\n <Table.Root size=\"sm\" variant=\"outline\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader width=\"40px\" />\n <Table.ColumnHeader>{valueColumnLabel}</Table.ColumnHeader>\n <Table.ColumnHeader width=\"54px\" />\n {showDefault ? <Table.ColumnHeader width=\"80px\">{defaultColumnLabel}</Table.ColumnHeader> : null}\n {actionOptions ? <Table.ColumnHeader width=\"140px\">{actionsColumnLabel}</Table.ColumnHeader> : null}\n <Table.ColumnHeader width=\"40px\" />\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {values.map((value, index) => (\n <TagEditorRow\n key={value.id}\n value={value}\n isSaving={isSaving}\n showDefault={showDefault}\n showIcons={showIcons}\n actionOptions={actionOptions}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onNameChange={(name) => updateValue(index, { name })}\n onColorChange={(color) => updateValue(index, { color })}\n onIconChange={(icon) => updateValue(index, { icon })}\n onActionsChange={(actions) => updateValue(index, { actions })}\n onSetDefault={() => onSetDefault?.(value)}\n onDelete={() => setValueToDelete(value)}\n />\n ))}\n {isAdding ? (\n <Table.Row>\n <Table.Cell />\n <Table.Cell>\n <Input\n size=\"xs\"\n placeholder={addPlaceholder}\n value={addForm.name}\n onChange={(event) => setAddForm({ ...addForm, name: event.target.value })}\n onKeyDown={handleAddKeyDown}\n autoFocus\n />\n </Table.Cell>\n <Table.Cell>\n <IconColorPicker\n color={addForm.color}\n icon={addForm.icon}\n showIcons={showIcons}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onColorChange={(color) => setAddForm({ ...addForm, color })}\n onIconChange={(icon) => setAddForm({ ...addForm, icon })}\n />\n </Table.Cell>\n {showDefault ? <Table.Cell /> : null}\n {actionOptions ? <Table.Cell /> : null}\n <Table.Cell>\n <HStack gap=\"2xs\">\n <Button size=\"2xs\" variant=\"primary\" onClick={handleAddOption} disabled={!addForm.name.trim()}>\n Add\n </Button>\n <Button size=\"2xs\" variant=\"ghost\" onClick={resetAddForm} aria-label=\"Cancel add value\">\n <X size={14} />\n </Button>\n </HStack>\n </Table.Cell>\n </Table.Row>\n ) : null}\n </Table.Body>\n </Table.Root>\n </SortableContext>\n </DndContext>\n\n <Flex justifyContent=\"flex-end\">\n <HStack gap=\"xs\">\n <Button size=\"sm\" variant=\"outline\" onClick={onCancel} disabled={!hasChanges || isSaving}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" variant=\"primary\" onClick={onSave} loading={isSaving} disabled={!hasChanges}>\n {saveLabel}\n </Button>\n </HStack>\n </Flex>\n </Stack>\n\n <DeleteConfirmationModal\n open={Boolean(valueToDelete)}\n onClose={() => setValueToDelete(null)}\n onDelete={handleDeleteOption}\n headline={deleteHeadline}\n notificationText={valueToDelete ? deleteNotificationText(valueToDelete) : \"\"}\n buttonText={deleteButtonText}\n />\n </>\n );\n};\n","import { HStack, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { AlertMessage } from \"../alert\";\nimport { TagEditor } from \"./tag-editor\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\n\nexport interface SaveTagSettingsInput<TValue> {\n deletedIds: Set<string>;\n drafts: TagEditorValue[];\n values: TValue[];\n}\n\ntype EditorLabels = Pick<\n TagEditorProps,\n | \"actionOptions\"\n | \"actionsColumnLabel\"\n | \"addLabel\"\n | \"addPlaceholder\"\n | \"colorOptions\"\n | \"deleteButtonText\"\n | \"deleteHeadline\"\n | \"deleteNotificationText\"\n | \"description\"\n | \"iconOptions\"\n | \"showIcons\"\n | \"title\"\n | \"valueColumnLabel\"\n>;\n\ntype SortableValue = { id: string; sortOrder: number };\n\nexport interface TagSettingsPanelProps<TValue extends SortableValue> extends EditorLabels {\n errorTitle: string;\n loadingText?: string;\n /** Loaded values; pass undefined while the initial load is pending. */\n values: TValue[] | undefined;\n /** Load/save error surfaced by the host's data layer. */\n loadError?: unknown;\n /**\n * Persists the pending edits. The host owns fetching and cache invalidation;\n * the panel resets its delete tracking once the returned promise resolves.\n */\n onSave: (input: SaveTagSettingsInput<TValue>) => Promise<void>;\n toEditorValue: (value: TValue) => TagEditorValue;\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean;\n}\n\nconst bySortOrder = (left: TagEditorValue, right: TagEditorValue) =>\n left.sortOrder - right.sortOrder || left.name.localeCompare(right.name);\n\nconst toEditorValues = <TValue extends SortableValue>(\n values: TValue[],\n toEditorValue: (value: TValue) => TagEditorValue,\n) => values.map(toEditorValue).sort(bySortOrder);\n\nconst findOriginalValue = <TValue extends SortableValue>(values: TValue[], draft: TagEditorValue) =>\n values.find((value) => value.id === draft.id);\n\nconst hasTagValueChanges = <TValue extends SortableValue>(\n values: TValue[],\n drafts: TagEditorValue[],\n deletedIds: Set<string>,\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean,\n) => {\n if (deletedIds.size > 0) return true;\n\n return drafts.some((draft) => {\n if (draft.isNew) return true;\n const original = findOriginalValue(values, draft);\n if (!original) return true;\n return valueNeedsUpdate(original, draft) || draft.sortOrder !== original.sortOrder;\n });\n};\n\nconst errorMessage = (error: unknown) => (error instanceof Error ? error.message : error ? String(error) : null);\n\nexport const TagSettingsPanel = <TValue extends SortableValue>(props: TagSettingsPanelProps<TValue>) => {\n const {\n errorTitle,\n loadingText = \"Loading...\",\n values: loadedValues,\n loadError,\n onSave,\n toEditorValue,\n valueNeedsUpdate,\n ...editorProps\n } = props;\n const [drafts, setDrafts] = useState<TagEditorValue[]>([]);\n const [deletedIds, setDeletedIds] = useState<Set<string>>(new Set());\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<unknown>(null);\n\n const values = loadedValues ?? [];\n\n // Edits never refetch in the background, so loaded values only change on\n // initial load and after a save invalidates the host's cache — keeping local\n // drafts in sync.\n useEffect(() => {\n if (loadedValues) setDrafts(toEditorValues(loadedValues, toEditorValue));\n }, [loadedValues, toEditorValue]);\n\n const handleSave = async () => {\n setIsSaving(true);\n setSaveError(null);\n try {\n await onSave({ deletedIds, drafts, values });\n setDeletedIds(new Set());\n } catch (error) {\n setSaveError(error);\n } finally {\n setIsSaving(false);\n }\n };\n\n const hasChanges = hasTagValueChanges(values, drafts, deletedIds, valueNeedsUpdate);\n const error = errorMessage(loadError) ?? errorMessage(saveError);\n\n const handleDeleteValue = (value: TagEditorValue) => {\n if (!value.isNew) setDeletedIds(new Set([...deletedIds, value.id]));\n setDrafts(drafts.filter((draft) => draft.id !== value.id));\n };\n\n const handleCancel = () => {\n setDrafts(toEditorValues(values, toEditorValue));\n setDeletedIds(new Set());\n setSaveError(null);\n };\n\n return (\n <Stack boxSizing=\"border-box\" minH=\"100%\" p=\"lg\" gap=\"lg\" bg=\"bg\" color=\"fg\">\n {error ? (\n <AlertMessage status=\"error\" colorPalette=\"red\" title={errorTitle} size=\"sm\">\n {error}\n </AlertMessage>\n ) : null}\n {loadedValues === undefined ? (\n <HStack gap=\"sm\" color=\"fg.muted\">\n <Spinner size=\"sm\" />\n <Text textStyle=\"paragraph/S/regular\">{loadingText}</Text>\n </HStack>\n ) : (\n <TagEditor\n {...editorProps}\n values={drafts}\n onValuesChange={setDrafts}\n onDeleteValue={handleDeleteValue}\n hasChanges={hasChanges}\n isSaving={isSaving}\n onSave={() => void handleSave()}\n onCancel={handleCancel}\n />\n )}\n </Stack>\n );\n};\n","import { Toaster as ChakraToaster, createToaster, Portal, Spinner, Stack, Toast } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@/components/scroll-area\";\n\nexport const toaster: ReturnType<typeof createToaster> = createToaster({\n placement: \"top\",\n pauseOnPageIdle: true,\n duration: 10000,\n});\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }} alignItems=\"start\">\n {toast.type === \"loading\" ? <Spinner size=\"sm\" color=\"blue.solid\" /> : <Toast.Indicator />}\n <Stack gap=\"1\" flex=\"1\" minWidth=\"0\" maxWidth=\"100%\">\n {toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n {toast.description && (\n <ScrollArea maxHeight=\"12rem\" contentProps={{ paddingEnd: \"1\" }}>\n <Toast.Description whiteSpace=\"pre-wrap\" wordBreak=\"break-word\">\n {toast.description}\n </Toast.Description>\n </ScrollArea>\n )}\n </Stack>\n {toast.action && <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>}\n <Toast.CloseTrigger />\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface TreeListOrderSnapshot {\n sectionOrder: string[];\n nodeOrderBySection: Record<string, string[]>;\n}\n\ninterface TreeListOrderState extends TreeListOrderSnapshot {\n setSectionOrder: (nextSectionIds: string[]) => void;\n setNodeOrder: (sectionId: string, nextNodeIds: string[]) => void;\n resetSectionOrder: () => void;\n resetNodeOrder: (sectionId: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListOrderStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListOrderSnapshot = {\n sectionOrder: [],\n nodeOrderBySection: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-order\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst dedupe = (ids: string[]) => {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const id of ids) {\n if (seen.has(id)) continue;\n seen.add(id);\n result.push(id);\n }\n return result;\n};\n\nconst getPersistedSnapshot = (state: TreeListOrderState) => ({\n sectionOrder: state.sectionOrder,\n nodeOrderBySection: state.nodeOrderBySection,\n});\n\nexport const createTreeListOrderStore = (options: CreateTreeListOrderStoreOptions) =>\n createStore<TreeListOrderState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSectionOrder: (nextSectionIds) => set((state) => ({ ...state, sectionOrder: dedupe(nextSectionIds) })),\n setNodeOrder: (sectionId, nextNodeIds) =>\n set((state) => ({\n ...state,\n nodeOrderBySection: { ...state.nodeOrderBySection, [sectionId]: dedupe(nextNodeIds) },\n })),\n resetSectionOrder: () => set((state) => ({ ...state, sectionOrder: [] })),\n resetNodeOrder: (sectionId) =>\n set((state) => {\n if (!(sectionId in state.nodeOrderBySection)) return state;\n const { [sectionId]: _removed, ...rest } = state.nodeOrderBySection;\n return { ...state, nodeOrderBySection: rest };\n }),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListOrderStore>>();\n\nexport const getTreeListOrderStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListOrderStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListOrderStore = <T>(storageKey: string, selector: (state: TreeListOrderState) => T) => {\n const store = getTreeListOrderStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListOrderSnapshot, TreeListOrderState };\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nconst reorderBy = <T extends { id: string }>(items: T[], order: string[]): T[] => {\n if (order.length === 0) return items;\n\n const indexById = new Map(items.map((item, index) => [item.id, index]));\n const placed = new Set<number>();\n const next: T[] = [];\n\n for (const id of order) {\n const index = indexById.get(id);\n if (index === undefined || placed.has(index)) continue;\n placed.add(index);\n next.push(items[index]);\n }\n\n let changed = next.length > 0 && next.length !== items.length;\n for (let i = 0; i < items.length; i += 1) {\n if (placed.has(i)) continue;\n if (next.length !== i && !changed) changed = true;\n next.push(items[i]);\n }\n\n if (!changed) {\n for (let i = 0; i < items.length; i += 1) {\n if (items[i] !== next[i]) {\n changed = true;\n break;\n }\n }\n }\n\n return changed ? next : items;\n};\n\nexport const applyTreeListOrder = (\n sections: TreeListSection[],\n sectionOrder: string[],\n nodeOrderBySection: Record<string, string[]>,\n): TreeListSection[] => {\n let changed = false;\n const reorderedSections = reorderBy(sections, sectionOrder);\n if (reorderedSections !== sections) changed = true;\n\n const next: TreeListSection[] = [];\n for (const section of reorderedSections) {\n const nodeOrder = nodeOrderBySection[section.id];\n if (!nodeOrder || nodeOrder.length === 0) {\n next.push(section);\n continue;\n }\n const reorderedNodes = reorderBy(section.nodes, nodeOrder);\n if (reorderedNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: reorderedNodes });\n } else {\n next.push(section);\n }\n }\n\n return changed ? next : sections;\n};\n\nexport const reorderNodesById = (nodes: TreeListNode[], order: string[]) => reorderBy(nodes, order);\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\nexport type VisibilityOverride = \"hidden\" | \"shown\";\n\ninterface TreeListVisibilitySnapshot {\n sectionOverrides: Record<string, VisibilityOverride>;\n nodeOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TreeListVisibilityState extends TreeListVisibilitySnapshot {\n setSection: (id: string, value: VisibilityOverride | undefined) => void;\n setNode: (id: string, value: VisibilityOverride | undefined) => void;\n toggleSection: (id: string, hiddenByDefault: boolean) => void;\n toggleNode: (id: string, hiddenByDefault: boolean) => void;\n clearSection: (id: string) => void;\n clearNode: (id: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListVisibilitySnapshot = {\n sectionOverrides: {},\n nodeOverrides: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst flipOverride = (current: VisibilityOverride): VisibilityOverride => (current === \"hidden\" ? \"shown\" : \"hidden\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n id: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(id in overrides)) return overrides;\n const { [id]: _removed, ...rest } = overrides;\n return rest;\n }\n\n if (overrides[id] === value) return overrides;\n return { ...overrides, [id]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, id: string, hiddenByDefault: boolean) => {\n const next = flipOverride(resolveEffective(overrides[id], hiddenByDefault));\n return setOverride(overrides, id, next);\n};\n\nconst getPersistedSnapshot = (state: TreeListVisibilityState) => ({\n sectionOverrides: state.sectionOverrides,\n nodeOverrides: state.nodeOverrides,\n});\n\nexport const createTreeListVisibilityStore = (options: CreateTreeListVisibilityStoreOptions) =>\n createStore<TreeListVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSection: (id, value) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, value) })),\n setNode: (id, value) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, value) })),\n toggleSection: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n sectionOverrides: toggleOverride(state.sectionOverrides, id, hiddenByDefault),\n })),\n toggleNode: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n nodeOverrides: toggleOverride(state.nodeOverrides, id, hiddenByDefault),\n })),\n clearSection: (id) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, undefined) })),\n clearNode: (id) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListVisibilityStore>>();\n\nexport const getTreeListVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListVisibilityStore = <T>(storageKey: string, selector: (state: TreeListVisibilityState) => T) => {\n const store = getTreeListVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListVisibilitySnapshot, TreeListVisibilityState };\n","const readDefaultExport = (module: { default?: unknown }) => module.default ?? module;\n\nexport const installPrismGlobal = async () => {\n const globalScope = globalThis as typeof globalThis & { Prism?: unknown };\n if (globalScope.Prism) return;\n\n const prismModule = await import(\"prismjs\");\n globalScope.Prism = readDefaultExport(prismModule);\n};\n"],"names":["ActivityAvatar","props","$","_c","actor","icon","color","t0","background","t1","undefined","t2","Box","avatarSrc","t3","avatarAlt","name","t4","Avatar","t5","t6","t7","TimestampSeparator","Symbol","for","jsx","ActivityCommentHeader","timestamp","actions","Text","jsxs","Fragment","HStack","ActivityReply","children","rootProps","Stack","ActivityComment","composer","replies","hasReplies","Children","count","ActivityComposer","value","defaultValue","placeholder","variant","minRows","attachLabel","submitLabel","onAttach","onChange","onSubmit","internalValue","setInternalValue","useState","currentValue","isInline","canSubmit","trim","length","handleChange","nextValue","handleSubmit","event","preventDefault","chakra","borderColor","boxShadow","Textarea","outline","currentTarget","Spacer","Tooltip","IconButton","Icon","Paperclip","ArrowUp","EventSeparator","ActivityEvent","iconColor","iconBackground","Timeline","t8","ActivityRoot","ActivityHeader","title","ActivityFeed","ActivityTimeline","Activity","Root","Header","Feed","Event","Comment","Reply","Composer","DEFAULT_RESIZABLE_MIN_WIDTH","AttachedPanel","header","minWidth","rest","width","resizable","resolvedMinWidth","resolvedWidth","Flex","headerVariantStyles","main","h","px","narrow","input","React","forwardRef","ref","filterSearchableMenuItems","items","query","normalizedQuery","toLowerCase","filter","item","label","searchText","Boolean","join","includes","shouldResetSearchableMenuQuery","currentListId","nextListId","resolveActiveListConfig","isShowingParent","parentList","childConfig","filterItems","showSearch","searchPlaceholder","emptyState","contentTestId","closeOnSelect","listId","searchInputBorderProps","SearchableMenu","trigger","maxListHeight","lazyMount","open","positioning","onOpenChange","onFocusOutside","portalled","hasParentList","internalOpen","setInternalOpen","setQuery","activeList","setActiveList","inputRef","useRef","isOpen","config","filteredItems","previousListIdRef","useEffect","current","timeout","setTimeout","focus","clearTimeout","details","handleOpenChange","t9","details_0","find","i","id","onSelect","handleMenuItemSelect","renderIcon","_temp","t10","item_0","description","secondaryLabel","disabled","isDisabled","tooltip","tooltipLabel","buildRowItem","t11","ariaLabel","_temp2","event_0","stopPropagation","_temp3","ListRow","selectedLabel","selectedIcon","ChevronDown","resolvedHeader","shouldShowSeparator","searchInput","InputGroup","Search","Input","event_1","target","_temp4","t12","Menu","t13","t14","T0","Portal","t15","t16","t17","t18","t19","t20","t21","t22","T1","ScrollArea","t23","overscrollBehavior","t24","t25","t26","map","item_1","bg","isSelected","t27","t28","Content","t29","Positioner","t30","t31","event_2","SearchableActionMenu","action","menuItems","emptyMenuLabel","onAction","keyedTooltip","child","RowActions","context","opacity","pointerEvents","readOnly","endContent","RowContent","isExpanded","showChevron","tone","isDenseVariant","labelTextStyle","descriptionTextStyle","descriptionMarginLeft","bb0","labelColor","descriptionColor","ChevronRight","height","indicator","ListRowContent","nodeId","ListRowMenuItemIcon","ListRowMenu","placement","mainAxis","offset","cursor","computePaddingLeft","depth","resolveListRowSizing","hasDescription","rowHeight","minHeight","createRowBackgroundProps","selectedBg","_hover","hoverBg","className","contextMenuItems","draggable","href","isContainer","isNavigable","menuPlacement","navigationIntent","onActivate","onClick","onDragEnd","onDragOver","onDragStart","onDrop","onPointerMove","onToggleExpand","showExpandToggle","asChild","menuOpen","setMenuOpen","dragProps","hasChildren","hasMenuItems","handleActivate","defaultPrevented","handleClick","handleMenuClick","paddingLeft","verticalPadding","activationProps","role","maxWidth","display","alignItems","justifyContent","gap","py","pl","borderRadius","overflow","textAlign","textDecoration","rowProps","content","children_0","contextActions","ResourceContextMenu","wrapWithContextMenu","children_1","menuItem","wrapWithMenu","children_2","wrapWithTooltip","children_3","wrap","entry","key","contentMinWidth","contentBackground","linkProps","minW","maxW","textOverflow","whiteSpace","_active","_focus","_focusVisible","staticProps","isInteractiveItem","url","BreadcrumbItemLink","isCurrent","linkComponent","LinkComponent","ChakraBreadcrumb","BreadcrumbItemContent","contextMenuActions","BreadcrumbSeparator","separator","Breadcrumb","separatorGap","index","BubbleButton","containerProps","button","BubblePanel","menu","onClose","closeLabel","onPopOut","popOutLabel","testId","SquareArrowOutUpRight","Minus","defaultThemePreferences","mode","isThemePreference","themePreferences","some","theme","getThemePreferenceMode","preference","getThemePreferenceClassName","getThemePreferenceClassNames","THEME_TOKEN_PATHS_ATTRIBUTE","getThemePreferenceCssVariableName","tokenPath","replaceAll","removeThemeTokens","el","tokens","Object","keys","style","removeProperty","removeTrackedThemeTokens","tokenPaths","getAttribute","split","setAttribute","applyThemeTokens","entries","setProperty","applyThemePreference","document","root","documentElement","body","option","previousTheme","previousPreference","classList","remove","add","colorScheme","noopStorage","getItem","removeItem","setItem","readLocalStorage","globalThis","localStorage","createBrowserStorage","storage","STORAGE_KEY","ThemePreferenceContext","createContext","getDefaultThemePreference","getInitialThemePreference","window","stored","prefersDark","matchMedia","matches","ThemePreferenceProvider","initialPreference","themePreference","setThemePreference","prev","nextMode","toggleThemePreference","useThemePreference","useContext","Error","customTheme","base","inherit","rules","colors","isMonacoTheme","EDITOR_THEME_NAME","useEditorTheme","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","monaco","editor","defineTheme","setTheme","monaco_0","CodeEditor","defaultCode","code","showLineNumbers","isEditable","language","disableScroll","applyEditorTheme","enabled","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","tabSize","minimap","fontSize","lineNumbers","options","languages","typescript","typescriptDefaults","setCompilerOptions","JsxEmit","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","Editor","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","DiffEditor","contentPlaceholderBackgroundImage","ContentPlaceholder","backgroundClip","backgroundImage","Label","optionColors","optionIcons","Circle","Bug","Sparkles","BookOpen","Wrench","Gauge","Feather","Scale","Layers","AlertTriangle","Star","Flag","Flame","Lightbulb","Shield","Eye","Clock","CheckCircle","Tag","Code","ChartColumnIncreasing","CircleQuestionMark","ShieldAlert","getIconComponent","iconOptions","IconColorPicker","colorOptions","onColorChange","onIconChange","showIcons","IconComponent","Popover","optionColor","GridItem","Grid","resolveSessionIndicatorIcon","status","CircleCheck","CircleAlert","CircleStop","CirclePause","ClockAlert","CircleDashed","resolveSessionIndicatorColor","SessionIndicator","boxSize","ATTEMPT_STATUS_COLOR_ALIASES","amber","CHAKRA_COLOR_PALETTES","Set","resolveWorkspaceIcon","workspaceType","GitCommitIcon","GitBranchIcon","resolveAttemptStatusColor","startsWith","resolvedColor","has","buildAttemptStatusTooltip","attemptStatus","handleIconClick","handleBadgeClick","LeadingSessionIndicator","sessionStatus","onSessionIndicatorClick","sessionTooltip","WorkspaceTypeIndicator","initializing","shorthand","WorkspaceTypeIcon","displayLabel","Spinner","WorkspaceAttemptStatusIndicator","WorkspaceDiffTotals","diffAdditions","diffDeletions","DiffBubble","WorkspaceDropdownTrigger","hasMultipleWorkspaces","onDropdownClick","WorkspaceBadge","showLeadingSessionIndicator","backgroundColor","NO_GROUPING","MANUAL_ORDERING","isEnumOptionsSource","Array","isArray","isAttributesSource","attributes","DEFAULT_DATA_RENDERER_SETTINGS","viewMode","columnGrouping","rowGrouping","ordering","attributeId","direction","displayProperties","findAttribute","attribute","getEnumOptions","type","kind","getSnapshot","toTitleCase","chunk","toUpperCase","slice","getAttributeValue","row","descriptor","raw","getAttributeStringValues","String","findEnumOption","enumOptionLabel","formatDateValue","date","Date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","formatStringValue","formatUserValue","summarizeMultiEnum","values","getAttributeBadgeColorPalette","_badge","renderEnumBadge","stringValue","renderMultiEnumBadge","summary","firstOption","isRenderableNode","renderAttributeBadge","render","formatted","collectDisplayBadges","badges","displayable","badge","push","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","buildFilterCategories","categories","filterable","declared","auto","declaredValues","undeclared","sort","a","b","localeCompare","numeric","buildGroupingOptions","groupable","buildOrderingOptions","sortable","buildDisplayPropertyOptions","resolveSubGroupingOptions","resolveListDropTargetColumnKey","columnKey","resolveKnownColumnKeys","filters","active","omitFilterCategory","next","sanitizeSettings","settings","knownIds","validGroupingId","validOrderingId","orderingId","sanitizeFilters","DataRendererCard","customSlots","workspaceBadge","hasBadges","Wrap","Badge","DataRendererBoard","columns","selectedItemId","onMoveItem","onMoveToGroup","onCreateStart","onColumnAction","activeColumn","setActiveColumn","activeGroup","setActiveGroup","handleDragStart","handleDragEnd","columnId","dataTransfer","dropEffect","handleDragOver","contains","relatedTarget","handleDragLeave","columnId_0","itemId_0","getData","itemId","handleDrop","pb","minH","column","borderLeft","canDragIn","ColumnHeader","margin","spaceY","ps","pe","groups","group","groupId","GroupSection","canDragOut","event_3","event_4","event_5","beforeItemId","itemId_1","event_6","event_7","itemId_2","cardProps","isDropTarget","onGroupDragOver","onGroupDragLeave","onGroupDrop","expanded","setExpanded","canCreate","createLabel","Plus","MoreHorizontal","setData","effectAllowed","v","flattenDataRendererListItems","canExpand","getRowIsExpanded","getDropTargetBoxShadow","isGroup","expandedState","rowId","updateExpandedState","renderLabel","countBadge","countColorPalette","renderEndContent","buildListRowItem","statusIcon","statusColor","DataRendererList","expandedGroups","onItemClick","onExpandedGroupChange","localExpandedGroups","setLocalExpandedGroups","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","handleExpandedChange","DataRendererListRow","onDraggedItemChange","onDropTargetChange","onExpandedChange","canDropHere","onDropRow","rowItem","toggleExpanded","draggedId","DataRendererEmptyState","EmptyState","DataRendererContent","boardColumns","listItems","listExpandedGroups","selectedRowId","emptyTitle","emptyDescription","onBoardMoveItem","onBoardMoveToGroup","onCreateRow","onListExpandedGroupChange","listKey","UNASSIGNED_LABEL","fallbackLabel","labelForGroupKey","getGroupingKey","first","compareGroupKey","compareGroupKeyForDescriptor","ordered","compareEnumValues","orderByDirection","left","right","toIndex","findIndex","compareForDescriptor","compare","leftTime","rightTime","leftNum","rightNum","leftValue","rightValue","leftString","rightString","orderRows","groupRows","knownColumnKeys","columnDescriptor","rowDescriptor","groupedByColumn","Map","set","get","columnRows","subgroups","groupedByRow","rowKey","rowRows","matchesFilter","filterRows","activeFilters","every","countFilterValues","counts","SectionLabel","viewModeOptions","List","KanbanSquare","Dropdown","hasNoneFirst","Button","option_0","DisplayMenu","groupingOptions","orderingOptions","displayPropertyOptions","onViewModeChange","onColumnGroupingChange","onRowGroupingChange","onOrderingAttributeIdChange","onSortDirectionToggle","onDisplayPropertyToggle","triggerRef","contentRef","setOpen","closeOnOutsidePointerDown","Node","addEventListener","removeEventListener","Settings2","ViewModeIcon","Separator","ArrowDownUp","isActive","getActiveFilterCount","reduce","sum","FilterMenu","countsByCategory","onToggleFilterValue","onClearFilter","onClearAll","activeCategoryId","setActiveCategoryId","category","activeCategory","activeFilterCount","Filter","category_0","selectedValues","checked","Check","WORKSPACE_STORE_NAMESPACE","toStorageName","storageKey","DEFAULT_SNAPSHOT","createSnapshot","initialState","toggleValue","stripTagPrefix","migrateSettings","orderingRaw","field","orderingDirection","migrateFilters","stringValues","createDataRendererStore","snapshot","createStore","persist","setViewMode","state","setColumnGrouping","setRowGrouping","setOrdering","setOrderingAttributeId","setDisplayProperties","toggleSortDirection","toggleDisplayProperty","property","setFilter","toggleFilterValue","currentValues","nextValues","nextFilters","clearFilter","clearAllFilters","setExpandedGroup","reset","version","migrate","persisted","createJSONStorage","partialize","workspaceStoreRegistry","getDataRendererStore","existingStore","store","useDataRendererStore","selector","useStore","collectSources","sources","resolveAttributeOptions","useResolvedAttributes","forceRender","useReducer","refresh","unsubscribes","source","subscribe","dispose","tick","DataRendererToolbar","rawAttributes","defaultSettings","defaultFilters","leading","align","_temp5","_temp6","_temp7","_temp8","_temp9","_temp0","_temp1","categoryOptions","fromEntries","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","state_8","state_9","buildListItems","visibleRows","grouped","onRowClick","onAttributeChange","onReorder","getRowContextMenuActions","supportsManualReorder","getGroupColorPalette","toListItem","targetColumnKey","toSubgroupListItem","subgroup","parent","DataRenderer","getBoardColumnConfig","hideToolbar","toolbarLeading","boardRows","toBoardItems","columnGroupingDescriptor","columnConfig","orderedRows","enumColor","targetColumnId","handleBoardMoveItem","rowId_0","targetGroupKey","handleBoardMoveToGroup","DeleteConfirmationModal","isDeleting","setIsDeleting","headline","buttonText","notificationText","onDelete","handleDelete","Dialog","CloseButton","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","binaryDiffExtensions","imageDiffExtensions","getExtension","path","ext","pop","getDiffLineCount","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","fileName","endsWith","isBinaryDiffPath","isImageDiffPath","createDiffCardBodyModel","diff","filePath","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","isImage","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","DiffCardBody","model","BinaryDiffPlaceholder","LargeDiffPlaceholder","DeferredDiffLoad","actionLabel","isLoadingDiff","loadingDiffContentRows","LoadingDiffContent","Skeleton","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isBinaryDiff","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","requestedPath","resolveRequestedDiffPath","useDiffContentLoader","setLoadingDiff","setRequestedPath","setLoadError","loadDiff","DiffCard","onToggleExpanded","DiffCardHeader","change","DiffDrawerEmptyState","p","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","ITEM_GAP_HEIGHT","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","getDiffPath","PINNED_DIFF_LOOKBEHIND_COUNT","estimateDiffRangeHeight","diffs","collapsedPaths","largeDiffOptInPaths","startIndex","endIndex","diffIndex","resolveSelectedScrollState","selectedDiffPath","expansionCommand","completedScrollCommandId","selectedScrollPath","selectedScrollSourceKey","selectedScrollCommandId","hasCompletedSelectedScroll","selectedScrollKey","selectedScrollExpansionState","selectedScrollIndex","shouldPinSelectedScrollIndex","includePinnedDiffIndexes","indexes","pinnedStartIndex","Math","max","pinnedIndexes","from","getRenderedDiffItems","scrollElement","querySelectorAll","element","querySelector","dataset","isInteger","getElementScrollOffset","offsetTop","elementRect","getBoundingClientRect","scrollRect","scrollTop","top","SELECTED_ALIGNMENT_THRESHOLD","useSelectedDiffScroll","scrollRef","setCompletedScrollCommandId","frameIds","cancelledByUserScroll","cancelSelectedScroll","estimateRangeHeight","scrollToOffset","scrollTo","behavior","scrollToSelectedDiff","alignRenderedSelectedDiff","renderedItems","selectedItem","selectedOffset","currentOffset","abs","firstItem","lastItem","at","alignmentAttempts","reconcileSelectedDiff","isAligned","hasSettled","requestAnimationFrame","passive","isInitiallyAligned","frameId","cancelAnimationFrame","useLayoutEffect","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","delete","resolveCollapsedPathsForSelectedDiff","DiffDrawer","onSelectDiffPath","onExpansionStateChange","reportedExpansionStateRef","setCollapsedPaths","setLargeDiffOptInPaths","virtualizer","useVirtualizer","getScrollElement","estimateSize","getItemKey","overscan","rangeExtractor","range","defaultRangeExtractor","shouldAdjustScrollPositionOnItemSizeChange","_item","_delta","instance","isScrolling","expansionState","allExpanded","size","allCollapsed","reportedExpansionState","showFullDiff","virtualItems","getVirtualItems","overflowAnchor","getTotalSize","virtualItem","measureElement","start","RESIZE_SEPARATOR_HOVER_STYLE","_before","RESIZE_HANDLE_WIDTH","ResizeHandle","bounds","contentPanelId","resizablePanelId","resizeLabel","resolvedPanelWidth","showResizeSeparator","onResizeKeyDown","onResizeStart","maxSize","round","position","bottom","insetInlineStart","w","transform","FALLBACK_ROOT_WIDTH","KEYBOARD_RESIZE_STEP","MIN_COLLAPSE_THRESHOLD_PX","MAX_COLLAPSE_THRESHOLD_PX","clamp","min","resolveRootWidth","rootWidth","resolveCollapseThreshold","minSizePx","resolveResizableBoundsPx","maxFromContent","contentMinSizePx","configuredMax","maxSizePx","minSize","getElementWidth","applyPanelWidthToElement","panel","flexBasis","flexGrow","flexShrink","clearPanelInlineStyles","ResizableSplitLayout","contentPanel","controlledCollapsed","onCollapsedChange","onSizeChange","resizablePanel","resizableSide","defaultSizePx","collapsed","collapsible","useId","rootRef","resizablePanelRef","contentPanelRef","cleanupDragRef","lastWidthRef","panelWidth","setPanelWidth","setRootWidth","internalCollapsed","setInternalCollapsed","collapseThresholdPx","updateRootWidth","ResizeObserver","observer","observe","disconnect","applyPanelWidth","width_0","rootWidth_0","nextBounds","nextWidth","commitPanelWidth","nextCollapsed","setCollapsed","resizeHandle","rootWidth_1","bounds_0","startX","clientX","startWidth","previousCursor","previousUserSelect","userSelect","nextWidth_0","nextCollapsed_0","animationFrame","setDraggingPanelState","schedulePanelWidth","handlePointerMove","moveEvent","rawWidth","cleanup","hasPointerCapture","pointerId","releasePointerCapture","setPointerCapture","once","handleResizeStart","direction_0","width_1","handleResizeKeyDown","resizablePanelNode","contentPanelNode","resizeTrigger","normalizeChangedFilePath","segment","sortNodes","nodes","forEach","node","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","treeById","rootNodes","segments","parentPath","parentNode","currentPath","isFile","existingNode","nextNode","collectExpandedFolderIds","folderIds","visit","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","isInList","isActiveNode","activeNodeId","isNavigableNode","getNodeChildren","hasExpandableChildren","appendVisibleNodeRows","sectionId","expandedNodeIds","level","parentNodeId","buildVirtualRows","sections","expandedSectionIds","section","getRowFocusId","isFocusableRow","getFocusableRows","resolveTreeListFocusRowId","focusedRowId","focusableRows","focusableIds","activeId","firstRow","resolveSectionHeaderNavigation","currentIndex","nextRow","resolveNodeNavigation","expandable","resolveTreeListKeyboardNavigation","resolvedFocusRowId","currentRow","focusByIndex","clamped","TreeListNodeRow","rowVariant","nodeGap","tabIndex","onFocus","onNavigate","onToggleNode","canLink","intent","TreeListSectionActions","TreeListSectionHeader","focusId","onToggle","onContextMenu","transition","SECTION_PREFIX","toSectionDragId","isSectionDragId","fromSectionDragId","arrayMoveInPlace","to","removed","splice","computeReorderResult","overId","orderedIds","oldIndex","indexOf","newIndex","nextSectionIds","nodeIds","nextNodeIds","SortableHost","useSortable","isDragging","listeners","setNodeRef","CSS","Transform","toString","SortableSectionGroup","sectionRows","onToggleSection","onSectionContextMenu","headerRow","nodeRows","topLevelNodeIds","SortableContext","verticalListSortingStrategy","row_3","SortableOrPlainNodeRow","renderNodeRow","TreeListSortable","sectionGap","onReorderSections","onReorderNodes","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","over","result","DndContext","T2","section_0","row_0","row_1","row_2","findRowElement","treeListFocusId","findFocusedRowId","HTMLElement","closest","isTextEditingTarget","isContentEditable","tagName","getRowIndex","useTreeListKeyboardNavigation","scrollToRow","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusRowId","focusableRowIds","frame","element_0","rowIndex","focusRow","altKey","ctrlKey","metaKey","shiftKey","navigation","handleKeyDown","onRowFocus","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","renderVirtualRow","VirtualTreeList","keyboard","scrollToIndex","StackTreeList","virtualize","TreeListBackground","TreeList","backgroundContextActions","changeLabels","added","copied","deleted","permissionChange","renamed","changeColors","getFilePathParts","lastSlashIndex","lastIndexOf","dirPath","renderFileLabel","toTreeListNodes","onSelectPath","resolveFileIcon","changeByPath","fileIcon","FileText","FileListPanel","onSearchQueryChange","onToggleFolder","fileTree","overflowX","buildChangeByPath","sumDiffStats","total","buildFilteredDiffs","normalizedSearchQuery","matchingDiffs","orderByPath","leftOrder","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","MenuItemContent","loadingDiffItems","DiffViewerLoading","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","diffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","isExpandAllDisabled","isCollapseAllDisabled","filePaths_0","tree","diffPaths_0","filePaths_1","expandAllFilesAndDiffs","collapseAllFilesAndDiffs","path_0","nextIndex","current_1","selectChangedFilePath","PanelLeftClose","PanelLeftOpen","ListTree","Rows2","SquareSplitHorizontal","ChevronsUpDown","t32","ChevronsDownUp","t33","t34","t35","t36","t37","t38","t39","t40","diffPanel","t41","t42","t43","t44","current_0","ErrorBoundary","Component","error","getDerivedStateFromError","componentDidCatch","info","console","handleReset","setState","onReset","fallback","ErrorFallback","message","AbsoluteCenter","AlertMessage","HorizontalMenuStack","borderBottomWidth","SimpleCard","SimpleCardBody","IntegrationCard","ItemSection","defaultOpen","Collapsible","e","getNoticeKey","notice","getNoticeTitle","OpenSourceNoticesScreen","notices","productName","productVersion","generatedAt","md","license","copyright","homepageUrl","sourceUrl","Link","attribution","DEFAULT_PALETTE_ASSET_LIMIT","getSearchableText","hasInputPrefix","inputPrefix","trimStart","resolvePaletteMode","modes","fallbackMode","getPaletteEffectiveQuery","modeId","candidate","limitDefaultAssetEntries","limit","assetType","filterPaletteEntries","effectiveQuery","getEffectiveQuery","filteredEntries","defaultAssetLimit","GROUP_ROW_HEIGHT","ENTRY_ROW_HEIGHT","INITIAL_VIEWPORT_HEIGHT","ACTIVE_ROW_BG","buildEntryItem","shortcut","buildRows","previousEntry","entryIndex","getActiveRowIndex","activeIndex","PaletteList","emptyLabel","onHover","activeRowIndex","initialRect","virtualRow","resolveStateValue","paletteInputStateProps","Palette","initialQuery","initialActiveIndex","resetKey","inputIcon","footerStart","footerEnd","filterEntries","onActiveEntryChange","onQueryChange","onEscape","setQueryState","setActiveIndex","setupRef","activeEntry","resolvedInputIcon","activeMode","resolvedPlaceholder","nextQuery","runActiveEntry","closePalette","previousSetup","setSelectionRange","entryCount","handleEscape","hasFooter","splitShortcutStep","step","part","getShortcutDisplayParts","binding","PaletteShortcut","steps","stepIndex","part_0","partIndex","Kbd","ParamEditorLabel","CircleHelp","ParamEditorReadOnlyValue","boxProps","preserveWhitespace","ColorInput","hideLabel","fullWidth","setValue","timeoutRef","nextColor","scheduleChange","newColor","valueElement","parseColor","onValueChange","ColorPicker","picker","DateInput","newValue","e_1","e_0","blur","e_2","NumberInputRoot","ChakraNumberInput","NumberInputField","Scrubber","Slider","ChakraSlider","NumberInput","hideSlider","showSlider","useFullWidthLayout","valueAsNumber","next_0","details_1","details_2","SelectionInput","multiSelect","optionId","selectedOptions","id_0","o","displayItems","remaining","o_0","getDisplayText","handleSelect","updatedValues","opt_0","opt","opt_1","TextInput","singleLine","e_3","resolveDefaultValue","defaultValues","paramId","InputGroupComponent","defaultCollapsed","useDisclosure","param","renderNumberParam","param_0","renderTextParam","param_1","renderSelectionParam","param_2","renderDateParam","param_3","renderColorParam","param_4","renderPropertyParam","param_5","renderParam","ChevronLeft","params","ParamEditor","getEntryIcon","isDirectory","isGitRepo","FolderOpen","Folder","RepoPickerListEntry","selectedPathSet","onEntryClick","isAlreadySelected","searchInputFocusVisibleProps","outlineColor","outlineOffset","focusInlinePickerOption","activeElement","RepoPickerDialog","selectedPaths","isLoading","isSelectDisabled","onSelectHomeDirectory","onSelectParentDirectory","searchScope","Home","ChevronUp","padding","Body","t45","t46","t47","t48","expandedSections","expandedNodes","SIDEBAR_STORE_NAMESPACE","toggleId","getPersistedSnapshot","createSidebarStore","openSidebar","closeSidebar","toggleSidebar","toggleSection","toggleNode","setSectionExpanded","setNodeExpanded","setWidth","sidebarStoreRegistry","getSidebarStore","useSidebarStore","SidebarFooter","PANEL_HEADER_HEIGHT","SidebarHeader","DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","resolveInitialWidth","defaultWidth","parsed","parseInt","Sidebar","footer","closable","defaultExpandedSections","viewportRef","initialWidth","persistedWidth","effectiveWidth","widthCss","flexDirection","SidebarProjectMenu","projectsLabel","onSelectProjects","FolderIcon","Switch","inputProps","thumbLabel","trackLabel","interactiveCursor","ChakraSwitch","off","on","tabOverrides","STORE_NAMESPACE","resolveEffective","override","hiddenByDefault","setOverride","overrides","_removed","toggleOverride","createTabVisibilityStore","setTab","toggleTab","clearTab","storeRegistry","getTabVisibilityStore","existing","useTabVisibilityStore","toStringLabel","resolveVisibility","isNodeVisible","nodeOverrides","filterNodes","changed","filteredChildren","filterVisibleSections","sectionOverrides","filteredNodes","buildSectionAction","effective","checkmark","buildNodeAction","locked","canHide","buildTreeVisibilityMenuActions","onResetAll","onResetOrder","filterVisibleTabs","placements","getKey","buildTabVisibilityMenuActions","nonCloseableCount","contributionId","onToggleTab","ActionDropdown","toggleAction","TagEditorRow","actionOptions","isSaving","showDefault","onActionsChange","onNameChange","onSetDefault","GripVertical","Table","trimmed","Editable","isDefault","Trash2","buildDraftItem","form","sortOrder","crypto","randomUUID","isNew","TagEditor","onValuesChange","onSave","onCancel","onDeleteValue","hasChanges","addLabel","addPlaceholder","actionsColumnLabel","cancelLabel","defaultAddColor","defaultAddIcon","defaultColumnLabel","deleteButtonText","deleteHeadline","deleteNotificationText","saveLabel","valueColumnLabel","isAdding","setIsAdding","addForm","setAddForm","valueToDelete","setValueToDelete","resetAddForm","updateValue","patch","handleAddOption","maxOrder","handleDeleteOption","arrayMove","handleAddKeyDown","closestCenter","X","bySortOrder","toEditorValues","toEditorValue","findOriginalValue","draft","hasTagValueChanges","drafts","deletedIds","valueNeedsUpdate","errorMessage","TagSettingsPanel","errorTitle","loadingText","loadedValues","editorProps","setDrafts","setDeletedIds","setIsSaving","saveError","setSaveError","handleSave","handleDeleteValue","handleCancel","toaster","createToaster","pauseOnPageIdle","duration","Toaster","ChakraToaster","mdDown","toast","Toast","paddingEnd","sectionOrder","nodeOrderBySection","dedupe","ids","seen","createTreeListOrderStore","setSectionOrder","setNodeOrder","resetSectionOrder","resetNodeOrder","getTreeListOrderStore","useTreeListOrderStore","reorderBy","order","indexById","placed","applyTreeListOrder","reorderedSections","nodeOrder","reorderedNodes","flipOverride","createTreeListVisibilityStore","setSection","setNode","clearSection","clearNode","getTreeListVisibilityStore","useTreeListVisibilityStore","readDefaultExport","module","default","installPrismGlobal","globalScope","Prism","prismModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAMA,KAAiBC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAAC,OAAAA;AAAAA,IAAAC,MAAAA;AAAAA,IAAAC,OAAAC;AAAAA,IAAAC,YAAAC;AAAAA,EAAAA,IAAqER,GAAhDK,IAAAC,MAAAG,SAAA,aAAAH,GAAoBC,IAAAC,MAAAC,SAAA,aAAAD;AAEzC,MAAIJ,GAAI;AAAA,QAAAM;AAAA,WAAAT,EAAA,CAAA,MAAAM,KAAAN,SAAAI,KAAAJ,EAAA,CAAA,MAAAG,KAEJM,sBAACC,GAAA,EACS,SAAA,QACK,cAAA,QACL,SAAA,eACG,YAAA,UACI,gBAAA,UACH,eACLN,OAAAA,GACKE,YAAAA,gBAGd,GAAMN,OAAAM,GAAAN,OAAAI,GAAAJ,OAAAG,GAAAH,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAXNS;AAAAA,EAWM;AAMa,QAAAA,IAAAP,GAAKS,WAAkBC,IAAAV,GAAKW,aAAeX,GAAKY;AAAM,MAAAC;AAAA,EAAAf,EAAA,CAAA,MAAAS,KAAAT,SAAAY,KAAzEG,sBAAAC,GAAA,OAAA,EAAmB,KAAAP,GAAuB,KAAAG,GAA+B,GAAIZ,OAAAS,GAAAT,OAAAY,GAAAZ,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AACtD,QAAAiB,IAAAf,GAAKY;AAAM,MAAAI;AAAA,EAAAlB,EAAA,CAAA,MAAAM,KAAAN,SAAAI,KAAAJ,EAAA,CAAA,MAAAiB,KAAlCC,qCAAuB,MAAAD,GAAyBX,YAAAA,GAAmBF,OAAAA,GAAK,GAAIJ,OAAAM,GAAAN,OAAAI,GAAAJ,OAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,SAAAnB,EAAA,EAAA,MAAAe,KAAAf,UAAAkB,KAF9EC,sBAAAH,GAAA,MAAA,EAAkB,MAAA,OAAkB,YAAA,GAClCD,UAAAA;AAAAA,IAAAA;AAAAA,IACAG;AAAAA,EAAAA,GACF,GAAclB,QAAAe,GAAAf,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GAHdmB;AAGc,GCPZC,KAAqBA,MAAA;AAAA,QAAApB,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACzBjB,IAAA,gBAAAkB,EAACb,GAAA,EAAO,IAAA,QAAe,SAAA,OAAmB,cAAA,QAAkB,YAAA,aAAwB,YAAA,EAAA,CAAC,GAAIV,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAAzFK;AAAyF,GAGrFmB,KAAwBzB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAAC,OAAAA;AAAAA,IAAAuB,WAAAA;AAAAA,IAAAC,SAAAA;AAAAA,EAAAA,IAAsC3B;AAAM,MAAAM;AAAA,EAAAL,SAAAE,KAIxCG,sBAACP,MAAsBI,OAAAA,EAAAA,CAAK,GAAIF,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,EAAA,CAAA,MAAAE,EAAAY,QAChCP,IAAA,gBAAAgB,EAACI,KAAe,WAAA,kBAAuB,OAAA,MAAK,UAAA,IACzCzB,UAAAA,EAAKY,KAAAA,CACR,GAAOd,EAAA,CAAA,IAAAE,EAAAY,MAAAd,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAAyB,KACNhB,IAAAgB,IAAA,gBAAAG,EAAAC,IAAA,EAEG,UAAA;AAAA,IAAA,gBAAAN,EAACH,IAAA,EAAkB;AAAA,IACnB,gBAAAG,EAACI,KAAe,WAAA,mBAAwB,OAAA,YAAuB,YAAA,GAC5DF,UAAAA,EAAAA,CACH;AAAA,EAAA,EAAA,CAAO,IALV,MAOOzB,OAAAyB,GAAAzB,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,SAAA0B,KACRd,sBAACF,GAAA,EAAe,YAAA,QAAmB,eAChCgB,UAAAA,GACH,GAAM1B,OAAA0B,GAAA1B,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,SAAAf,EAAA,CAAA,MAAAK,KAAAL,EAAA,CAAA,MAAAO,KAAAP,EAAA,EAAA,MAAAS,KAAAT,UAAAY,KAfRG,sBAACe,IAAA,EAAW,KAAA,MAAgB,YAAA,UAAc,MAAA,KACxCzB,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA,IAGCE;AAAAA,IAQDG;AAAAA,EAAAA,GAGF,GAASZ,OAAAK,GAAAL,OAAAO,GAAAP,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,KAAAA,IAAAf,EAAA,EAAA,GAhBTe;AAgBS,GAIAgB,KAAgBhC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAyB,GAAAxB,GAAA8B,GAAAC,GAAAR;AAAA,EAAAzB,SAAAD,KAC3B;AAAA,IAAAG,OAAAA;AAAAA,IAAAuB,WAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAM,UAAAA;AAAAA,IAAA,GAAAC;AAAAA,EAAAA,IAA8DlC,GAAMC,OAAAD,GAAAC,OAAA0B,GAAA1B,OAAAE,GAAAF,OAAAgC,GAAAhC,OAAAiC,GAAAjC,OAAAyB,MAAAC,IAAA1B,EAAA,CAAA,GAAAE,IAAAF,EAAA,CAAA,GAAAgC,IAAAhC,EAAA,CAAA,GAAAiC,IAAAjC,EAAA,CAAA,GAAAyB,IAAAzB,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAA0B,KAAA1B,SAAAE,KAAAF,EAAA,CAAA,MAAAyB,KAK9DpB,sBAACmB,IAAA,EAA6BtB,OAAAA,GAAkBuB,WAAAA,GAAoBC,SAAAA,GAAO,GAAI1B,OAAA0B,GAAA1B,OAAAE,GAAAF,OAAAyB,GAAAzB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,UAAAgC,KAC/EzB,IAAA,gBAAAgB,EAACb,GAAA,EAAgB,aAAA,QACf,4BAACiB,GAAA,EAAQ,IAAA,OAAgB,WAAA,mBAAwB,OAAA,MAAkB,cAAA,YAChEK,UAAAA,GACH,GACF,GAAMhC,QAAAgC,GAAAhC,QAAAO,KAAAA,IAAAP,EAAA,EAAA;AAAA,MAAAS;AAAA,EAAAT,EAAA,EAAA,MAAAK,KAAAL,UAAAO,KANRE,IAAA,gBAAAmB,EAACM,GAAA,EAAU,KAAA,MACT7B,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA,EAAAA,GAKF,GAAQP,QAAAK,GAAAL,QAAAO,GAAAP,QAAAS,KAAAA,IAAAT,EAAA,EAAA;AAAA,MAAAY;AAAA,SAAAZ,EAAA,EAAA,MAAAiC,KAAAjC,UAAAS,KARVG,sBAACF,KAAa,UAAA,MAAc,UAAA,MAAI,GAAKuB,GACnCxB,UAAAA,EAAAA,CAQF,GAAMT,QAAAiC,GAAAjC,QAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA,GATNY;AASM,GAIGuB,KAAkBpC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAyB,GAAAxB,GAAA8B,GAAAI,GAAAC,GAAAJ,GAAAR;AAAA,EAAAzB,SAAAD,KAC7B;AAAA,IAAAG,OAAAA;AAAAA,IAAAuB,WAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAW,SAAAA;AAAAA,IAAAD,UAAAA;AAAAA,IAAAJ,UAAAA;AAAAA,IAAA,GAAAC;AAAAA,EAAAA,IAAiFlC,GAAMC,OAAAD,GAAAC,OAAA0B,GAAA1B,OAAAE,GAAAF,OAAAgC,GAAAhC,OAAAoC,GAAApC,OAAAqC,GAAArC,OAAAiC,GAAAjC,OAAAyB,MAAAC,IAAA1B,EAAA,CAAA,GAAAE,IAAAF,EAAA,CAAA,GAAAgC,IAAAhC,EAAA,CAAA,GAAAoC,IAAApC,EAAA,CAAA,GAAAqC,IAAArC,EAAA,CAAA,GAAAiC,IAAAjC,EAAA,CAAA,GAAAyB,IAAAzB,EAAA,CAAA;AACvF,QAAAsC,IAAmBC,GAAQC,MAAOH,CAAO,IAAI;AAAE,MAAAhC;AAAA,EAAAL,EAAA,CAAA,MAAA0B,KAAA1B,SAAAE,KAAAF,EAAA,EAAA,MAAAyB,KAczCpB,sBAACmB,IAAA,EAA6BtB,OAAAA,GAAkBuB,WAAAA,GAAoBC,SAAAA,GAAO,GAAI1B,OAAA0B,GAAA1B,OAAAE,GAAAF,QAAAyB,GAAAzB,QAAAK,KAAAA,IAAAL,EAAA,EAAA;AAAA,MAAAO;AAAA,EAAAP,UAAAgC,KAC/EzB,IAAA,gBAAAgB,EAACI,GAAA,EAAQ,IAAA,OAAgB,WAAA,mBAAwB,OAAA,MAAkB,cAAA,YAAsB,YAAA,YACtFK,UAAAA,GACH,GAAOhC,QAAAgC,GAAAhC,QAAAO,KAAAA,IAAAP,EAAA,EAAA;AAAA,MAAAS;AAAA,EAAAT,EAAA,EAAA,MAAAK,KAAAL,UAAAO,KAJTE,sBAACyB,GAAA,EAAU,KAAA,MAAa,SAAA,MACtB7B,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA,EAAAA,GAGF,GAAQP,QAAAK,GAAAL,QAAAO,GAAAP,QAAAS,KAAAA,IAAAT,EAAA,EAAA;AAAA,MAAAY;AAAA,EAAAZ,EAAA,EAAA,MAAAsC,KAAAtC,UAAAqC,KACPzB,IAAA0B,sBACE5B,GAAA,EAAmB,gBAAA,OAAkB,aAAA,gBACnC2B,aACH,IAHD,MAIOrC,QAAAsC,GAAAtC,QAAAqC,GAAArC,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AAAA,MAAAe;AAAA,EAAAf,UAAAoC,KACPrB,IAAAqB,sBACE1B,GAAA,EAAmB,gBAAA,OAAkB,aAAA,gBACnC0B,aACH,IAHD,MAIOpC,QAAAoC,GAAApC,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAiB;AAAA,SAAAjB,EAAA,EAAA,MAAAiC,KAAAjC,EAAA,EAAA,MAAAS,KAAAT,EAAA,EAAA,MAAAY,KAAAZ,UAAAe,KAzBVE,sBAACP,GAAA,EACI,IAAA,WACG,OAAA,QACM,aAAA,OACA,aAAA,gBACC,cAAA,MACF,YAAA,MACF,UAAA,UAAQ,GACbuB,GAEJxB,UAAAA;AAAAA,IAAAA;AAAAA,IAMCG;AAAAA,IAKAG;AAAAA,EAAAA,GAKH,GAAMf,QAAAiC,GAAAjC,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA,GA1BNiB;AA0BM,GChFGwB,KAAmBA,CAAC1C,MAAiC;AAChE,QAAM;AAAA,IACJG,OAAAA;AAAAA,IACAwC,OAAAA;AAAAA,IACAC,cAAAA,IAAe;AAAA,IACfC,aAAAA,IAAc;AAAA,IACdC,SAAAA,IAAU;AAAA,IACVC,SAAAA,IAAUD,MAAY,eAAe,IAAI;AAAA,IACzCE,aAAAA,IAAc;AAAA,IACdC,aAAAA,IAAc;AAAA,IACdtB,SAAAA;AAAAA,IACAuB,UAAAA;AAAAA,IACAC,UAAAA;AAAAA,IACAC,UAAAA;AAAAA,IACA,GAAGlB;AAAAA,EAAAA,IACDlC,GACE,CAACqD,GAAeC,CAAgB,IAAIC,GAASX,CAAY,GACzDY,IAAeb,KAASU,GACxBI,IAAWX,MAAY,UACvBY,IAAYF,EAAaG,KAAAA,EAAOC,SAAS,GAEzCC,IAAeA,CAACC,MAAsB;AAC1C,IAAInB,MAAUlC,UACZ6C,EAAiBQ,CAAS,GAG5BX,IAAWW,CAAS;AAAA,EACtB,GAEMC,IAAeA,CAACC,MAAsC;AAE1D,IADAA,EAAMC,eAAAA,GACDP,MAELN,IAAWI,EAAaG,MAAM,GAE1BhB,MAAUlC,UACZ6C,EAAiB,EAAE;AAAA,EAEvB;AAEA,SACE,gBAAA9B,EAAC0C,GAAO,MAAP,EACC,OAAM,QACN,YAAW,MACX,aAAaT,IAAW,MAAM,OAC9B,aAAY,gBACZ,cAAcA,IAAW,MAAM,MAC/B,YAAW,kDACX,cAAcA,IAAWhD,SAAY;AAAA,IAAE0D,aAAa;AAAA,IAAeC,WAAW;AAAA,EAAA,GAC9E,UAAUL,GACV,GAAI7B,GAEJ,UAAA,gBAAAL,EAACE,IAAA,EAAO,YAAW,cAAa,KAAI,MAAK,SAAS0B,IAAW,OAAO,MACjEtD,UAAAA;AAAAA,IAAAA,IAAQ,gBAAAqB,EAACzB,IAAA,EAAe,OAAAI,EAAA,CAAa,IAAM;AAAA,IAC5C,gBAAA0B,EAAClB,GAAA,EAAI,MAAK,KAAI,MAAK,KACjB,UAAA;AAAA,MAAA,gBAAAa,EAAC6C,IAAA,EACC,OAAOb,GACP,MAAMT,GACN,QAAO,QACP,QAAO,KACP,SAAQ,KACR,MAAMU,IAAW,WAAW,QAC5B,YAAW,eACX,OAAM,MACN,WAAU,mBACV,aAAAZ,GACA,cAAc;AAAA,QAAExC,OAAO;AAAA,MAAA,GACvB,QAAQ;AAAA,QAAE8D,aAAa;AAAA,QAAeC,WAAW;AAAA,QAAQE,SAAS;AAAA,MAAA,GAClE,eAAe;AAAA,QAAEH,aAAa;AAAA,QAAeC,WAAW;AAAA,QAAQE,SAAS;AAAA,MAAA,GACzE,UAAWN,CAAAA,MAAUH,EAAaG,EAAMO,cAAc5B,KAAK,GAAE;AAAA,wBAE9DZ,IAAA,EAAO,KAAI,OAAM,WAAW0B,IAAW,MAAM,MAC3C9B,UAAAA;AAAAA,QAAAA;AAAAA,0BACA6C,IAAA,EAAM;AAAA,QACP,gBAAAhD,EAACiD,MAAQ,SAASzB,GAChB,4BAAC0B,IAAA,EAAW,MAAK,OAAM,SAAQ,SAAQ,cAAY1B,GAAa,MAAK,UAAS,SAASE,GACrF,UAAA,gBAAA1B,EAACmD,IAAA,EAAK,IAAIC,IAAW,SAAQ,OAAA,CAAM,EAAA,CACrC,EAAA,CACF;AAAA,QACA,gBAAApD,EAACiD,IAAA,EAAQ,SAASxB,GAChB,UAAA,gBAAAzB,EAACkD,MAAW,MAAK,OAAM,SAAQ,UAAS,cAAYzB,GAAa,MAAK,UAAS,UAAU,CAACS,GACxF,UAAA,gBAAAlC,EAACmD,IAAA,EAAK,IAAIE,IAAS,SAAQ,OAAA,CAAM,EAAA,CACnC,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ,GClGMC,KAAiBA,MAAA;AAAA,QAAA7E,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAAMjB,IAAA,gBAAAkB,EAACb,GAAA,EAAO,IAAA,QAAe,SAAA,OAAmB,cAAA,QAAkB,YAAA,aAAwB,YAAA,EAAA,CAAC,GAAIV,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAAzFK;AAAyF,GAEzGyE,KAAgB/E,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAC,GAAA8B,GAAA7B,GAAA8B,GAAA5B,GAAAE,GAAAkB;AAAA,EAAAzB,SAAAD,KAC3B;AAAA,IAAAG,OAAAA;AAAAA,IAAAC,MAAAA;AAAAA,IAAA4E,WAAA1E;AAAAA,IAAA2E,gBAAAzE;AAAAA,IAAAkB,WAAAA;AAAAA,IAAAO,UAAAA;AAAAA,IAAA,GAAAC;AAAAA,EAAAA,IAQIlC,GAAMC,OAAAD,GAAAC,OAAAE,GAAAF,OAAAgC,GAAAhC,OAAAG,GAAAH,OAAAiC,GAAAjC,OAAAK,GAAAL,OAAAO,GAAAP,OAAAyB,MAAAvB,IAAAF,EAAA,CAAA,GAAAgC,IAAAhC,EAAA,CAAA,GAAAG,IAAAH,EAAA,CAAA,GAAAiC,IAAAjC,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA,GAAAyB,IAAAzB,EAAA,CAAA;AALR,QAAA+E,IAAA1E,MAAAG,SAAA,aAAAH,GACA2E,IAAAzE,MAAAC,SAAA,gBAAAD;AAA8B,MAAAE;AAAA,EAAAT,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAS1Bb,IAAA,gBAAAc,EAAA0D,GAAA,WAAA,EAAgC,aAAA,gBAAc,GAAGjF,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,EAAA,CAAA,MAAAE,KAAAF,EAAA,EAAA,MAAAG,KAAAH,EAAA,EAAA,MAAAgF,KAAAhF,UAAA+E,KADnDnE,IAAA,gBAAAgB,EAAAqD,GAAA,WAAA,EACExE,UAAAA;AAAAA,IAAAA;AAAAA,IACA,gBAAAc,kBAA4B,SAAA,QAAc,QAAA,QAAc,QAAA,QAAkB,YAAA,eACxE,UAAA,gBAAAA,EAACzB,MAAsBI,OAAAA,GAAaC,MAAAA,GAAa4E,OAAAA,GAAuBC,YAAAA,GAAc,EAAA,CACxF;AAAA,EAAA,GACF,GAAqBhF,OAAAE,GAAAF,QAAAG,GAAAH,QAAAgF,GAAAhF,QAAA+E,GAAA/E,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AAAA,MAAAe;AAAA,EAAAf,UAAAE,KAUhBa,IAAAb,IACC,gBAAAqB,EAACI,GAAA,EAAQ,IAAA,QAAa,OAAA,MAAgB,YAAA,OAAkB,YAAA,GACrDzB,UAAAA,EAAKY,MACR,IAHD,MAIOd,QAAAE,GAAAF,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAiB;AAAA,EAAAjB,UAAAgC,KACRf,IAAA,gBAAAM,EAACb,GAAA,EAAO,IAAA,QAAe,SAAA,eAAyB,YAAA,UAAa,KAAA,OAAW,MAAA,KAAa,UAAA,QAClFsB,UAAAA,GACH,GAAMhC,QAAAgC,GAAAhC,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAAkB;AAAA,EAAAlB,UAAAyB,KACLP,IAAAO,IAAA,gBAAAG,EAAAC,IAAA,EAEG,UAAA;AAAA,IAAA,gBAAAN,EAACsD,IAAA,EAAc;AAAA,IACf,gBAAAtD,EAACI,KAAQ,IAAA,QAAa,OAAA,YAAuB,YAAA,GAC1CF,UAAAA,EAAAA,CACH;AAAA,EAAA,EAAA,CAAO,IALV,MAOOzB,QAAAyB,GAAAzB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,EAAAnB,EAAA,EAAA,MAAAe,KAAAf,UAAAiB,KAAAjB,EAAA,EAAA,MAAAkB,KAxBZC,IAAA,gBAAAI,EAAA0D,GAAA,SAAA,EAAsB,KAAA,KAAkB,eAAA,MAAU,MAAA,KAChD,UAAA,gBAAArD,EAAAqD,GAAA,OAAA,EACY,WAAA,KACN,KAAA,MACC,MAAA,KACM,YAAA,UACD,WAAA,mBACJ,OAAA,YAELlE,UAAAA;AAAAA,IAAAA;AAAAA,IAKDE;AAAAA,IAGCC;AAAAA,EAAAA,EAAAA,CAQH,EAAA,CACF,GAAmBlB,QAAAe,GAAAf,QAAAiB,GAAAjB,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,SAAAlF,EAAA,EAAA,MAAAiC,KAAAjC,UAAAY,KAAAZ,EAAA,EAAA,MAAAmB,KAjCrB+D,IAAA,gBAAAtD,EAAAqD,GAAA,MAAA,EAAmB,KAAA,MAAU,MAAA,QAAgB,UAAA,MAAI,GAAKhD,GACpDrB,UAAAA;AAAAA,IAAAA;AAAAA,IAMAO;AAAAA,EAAAA,GA2BF,GAAgBnB,QAAAiC,GAAAjC,QAAAY,GAAAZ,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA,GAlChBkF;AAkCgB,GC/CPC,KAAepF,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAA+B,GAAAC;AAAA,EAAAjC,SAAAD,KAC1B;AAAA,IAAAiC,UAAAA;AAAAA,IAAA,GAAAC;AAAAA,EAAAA,IAAmClC,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAiC,MAAAD,IAAAhC,EAAA,CAAA,GAAAiC,IAAAjC,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAgC,KAAAhC,SAAAiC,KAGvC5B,sBAAC6B,KAAY,OAAA,QAAW,KAAA,SAASD,gBAEjC,GAAQjC,OAAAgC,GAAAhC,OAAAiC,GAAAjC,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFRK;AAEQ,GAIC+E,KAAiBrF,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAyB,GAAAO,GAAA5B;AAAA,EAAAL,SAAAD,KAC5B;AAAA,IAAAsF,OAAAhF;AAAAA,IAAAqB,SAAAA;AAAAA,IAAA,GAAAO;AAAAA,EAAAA,IAAsDlC,GAAMC,OAAAD,GAAAC,OAAA0B,GAAA1B,OAAAiC,GAAAjC,OAAAK,MAAAqB,IAAA1B,EAAA,CAAA,GAAAiC,IAAAjC,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA;AAApD,QAAAqF,IAAAhF,MAAAG,SAAA,aAAAH;AAAkB,MAAAE;AAAA,EAAAP,SAAAqF,KAItB9E,sBAACoB,GAAA,EAAe,WAAA,kBAAuB,OAAA,MACpC0D,UAAAA,GACH,GAAOrF,OAAAqF,GAAArF,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAA0B,KACNjB,IAAAiB,IAAU,gBAAAH,EAACO,IAAA,EAAW,KAAA,mBAAc,IAApC,MAAoD9B,OAAA0B,GAAA1B,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,SAAAZ,EAAA,CAAA,MAAAiC,KAAAjC,SAAAO,KAAAP,EAAA,EAAA,MAAAS,KAJvDG,IAAA,gBAAAgB,EAACE,MAAkB,YAAA,UAAwB,gBAAA,iBAAoB,KAAA,MAAI,GAAKG,GACtE1B,UAAAA;AAAAA,IAAAA;AAAAA,IAGCE;AAAAA,EAAAA,GACH,GAAST,OAAAiC,GAAAjC,OAAAO,GAAAP,QAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA,GALTY;AAKS,GAIA0E,KAAevF,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAA+B,GAAAC;AAAA,EAAAjC,SAAAD,KAC1B;AAAA,IAAAiC,UAAAA;AAAAA,IAAA,GAAAC;AAAAA,EAAAA,IAAmClC,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAiC,MAAAD,IAAAhC,EAAA,CAAA,GAAAiC,IAAAjC,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAgC,KAAAhC,SAAAiC,KAGvC5B,sBAAC6B,KAAU,KAAA,MAAW,OAAA,WAAWD,gBAEjC,GAAQjC,OAAAgC,GAAAhC,OAAAiC,GAAAjC,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFRK;AAEQ,GCtCCkF,KAAmBxF,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAA+B,GAAAC;AAAA,EAAAjC,SAAAD,KAC9B;AAAA,IAAAiC,UAAAA;AAAAA,IAAA,GAAAC;AAAAA,EAAAA,IAAmClC,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAiC,MAAAD,IAAAhC,EAAA,CAAA,GAAAiC,IAAAjC,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAGoBjB,IAAA;AAAA,IAAA,6BAA+B;AAAA,EAAA,GAAQL,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,EAAA,CAAA,MAAAgC,KAAAhC,SAAAiC,KAAlG1B,IAAA,gBAAAgB,EAAA0D,GAAA,MAAA,EAAoB,MAAA,MAAa,SAAA,SAAc,OAAA,QAAY,KAAA5E,MAA6C4B,GACrGD,UAAAA,GACH,GAAgBhC,OAAAgC,GAAAhC,OAAAiC,GAAAjC,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GAFhBO;AAEgB,GCaPiF,KAAW;AAAA,EACtBC,MAAMN;AAAAA,EACNO,QAAQN;AAAAA,EACRO,MAAML;AAAAA,EACNL,UAAUM;AAAAA,EACVK,OAAOd;AAAAA,EACPe,SAAS1D;AAAAA,EACT2D,OAAO/D;AAAAA,EACPgE,UAAUtD;AAAAA,EACVzB,QAAQlB;AACV,GClCMkG,KAA8B,SAQvBC,KAAgBlG,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAA+B,GAAAkE,GAAAC,GAAAC,GAAA/F,GAAAE;AAAA,EAAAP,SAAAD,KAC3B;AAAA,IAAAiC,UAAAA;AAAAA,IAAAkE,QAAAA;AAAAA,IAAAG,OAAAhG;AAAAA,IAAA8F,UAAAA;AAAAA,IAAAG,WAAA/F;AAAAA,IAAA,GAAA6F;AAAAA,EAAAA,IAAoFrG,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAkG,GAAAlG,OAAAmG,GAAAnG,OAAAoG,GAAApG,OAAAK,GAAAL,OAAAO,MAAAyB,IAAAhC,EAAA,CAAA,GAAAkG,IAAAlG,EAAA,CAAA,GAAAmG,IAAAnG,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA;AAAhE,QAAAqG,IAAAhG,MAAAG,SAAA,UAAAH,GAA2BiG,IAAA/F,MAAAC,SAAA,KAAAD,GACrDgG,IAAyBJ,MAAaG,IAAAN,KAAAK,IACtCG,IAAsBF,IAAA,SAAAD;AAA2B,MAAA5F;AAAA,EAAAT,SAAAgC,KAgB7CvB,sBAACgG,MAAU,MAAA,KAAU,SAAa,WAAA,uBAElC,GAAOzG,OAAAgC,GAAAhC,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,SAAAZ,EAAA,CAAA,MAAAkG,KAAAlG,EAAA,EAAA,MAAAuG,KAAAvG,EAAA,EAAA,MAAAwG,KAAAxG,EAAA,EAAA,MAAAoG,KAAApG,UAAAS,KAfTG,IAAA,gBAAAgB,EAAC6E,MACW,WAAA,UACD,UAAA,YACG,YAAA,GACTD,GAAAA,GACGD,MAAAA,GACJ,GAAA,QACc,iBAAA,OACb,IAAA,MACM,UAAA,UAAQ,GACbH,GAEHF,UAAAA;AAAAA,IAAAA;AAAAA,IACDzF;AAAAA,EAAAA,GAGF,GAAOT,OAAAkG,GAAAlG,QAAAuG,GAAAvG,QAAAwG,GAAAxG,QAAAoG,GAAApG,QAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA,GAhBPY;AAgBO,GCvBL8F,KAAkE;AAAA,EACtEC,MAAM;AAAA,IACJC,GAAG;AAAA,IACHC,IAAI;AAAA,EAAA;AAAA,EAENC,QAAQ;AAAA,IACNF,GAAG;AAAA,IACHC,IAAI;AAAA,EAAA;AAAA,EAENE,OAAO;AAAA,IACLH,GAAG;AAAA,IACHC,IAAI;AAAA,EAAA;AAER,GAManB,KAASsB,GAAMC,WAAwC,SAAAlH,GAAAmH,GAAA;AAAA,QAAAlH,IAAAC,EAAA,CAAA;AAAA,MAAA+B,GAAAoE,GAAA/F;AAAA,EAAAL,SAAAD,KAClE;AAAA,IAAA8C,SAAAxC;AAAAA,IAAA2B,UAAAA;AAAAA,IAAA,GAAAoE;AAAAA,EAAAA,IAAgDrG,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAoG,GAAApG,OAAAK,MAAA2B,IAAAhC,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA;AAGkB,QAAAO,IAAAmG,GAHhErG,MAAAG,SAAA,SAAAH,CAG2F;AAAC,MAAAI;AAAA,SAAAT,EAAA,CAAA,MAAAgC,KAAAhC,EAAA,CAAA,MAAAkH,KAAAlH,EAAA,CAAA,MAAAoG,KAAApG,SAAAO,KAAlGE,IAAA,gBAAAc,EAACO,IAAA,EAAYoF,KAAAA,GAAQ,IAAA,UAAoB,YAAA,UAAqB,aAAA,KAAG,GAAK3G,GAA4B,GAAM6F,GACrGpE,UAAAA,GACH,GAAShC,OAAAgC,GAAAhC,OAAAkH,GAAAlH,OAAAoG,GAAApG,OAAAO,GAAAP,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAFTS;AAES,CAEZ,GCkCY0G,KAA4B,CAA+BC,GAAYC,MAAkB;AACpG,QAAMC,IAAkBD,EAAM3D,KAAAA,EAAO6D,YAAAA;AAErC,SAAKD,IAIEF,EAAMI,OAAQC,CAAAA,MACH,CAACA,EAAKC,OAAOD,EAAKE,UAAU,EAAEH,OAAOI,OAAO,EAAEC,KAAK,GAAG,EAAEN,YAAAA,EACzDO,SAASR,CAAe,CACxC,IANQF;AAOX,GAEaW,KAAiCA,CAACC,GAAwBC,MACjE,CAACD,KAAiB,CAACC,IACd,KAGFD,MAAkBC,GAGdC,KAA0B,CACrCC,GACAC,GACAC,MAEI,CAACF,KAAmB,CAACC,IAChBC,IAGF;AAAA,EACLjB,OAAOgB,EAAWhB;AAAAA,EAClBkB,aAAaF,EAAWE,eAAeD,EAAYC;AAAAA,EACnDC,YAAYH,EAAWG,cAAcF,EAAYE;AAAAA,EACjDC,mBAAmBJ,EAAWI,qBAAqBH,EAAYG;AAAAA,EAC/DC,YAAYL,EAAWK,cAAcJ,EAAYI;AAAAA,EACjDC,eAAeN,EAAWM,iBAAiBL,EAAYK;AAAAA,EACvDC,eAAe;AAAA,EACfC,QAAQ;AAAA,GAINC,KAAyB;AAAA,EAC7B3E,aAAa;AAAA,EACbC,WAAW;AAAA,EACXE,SAAS;AACX,GAEayE,KAAiB/I,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAA8I,SAAAA;AAAAA,IAAA3B,OAAAA;AAAAA,IAAAoB,mBAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAH,aAAAjI;AAAAA,IAAAuI,QAAAA;AAAAA,IAAA1C,QAAAA;AAAAA,IAAAG,OAAA9F;AAAAA,IAAAyI,eAAAvI;AAAAA,IAAA8H,YAAA3H;AAAAA,IAAA+H,eAAA5H;AAAAA,IAAAkI,WAAAhI;AAAAA,IAAAiI,MAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAX,eAAAA;AAAAA,IAAAY,WAAApI;AAAAA,IAAAkH,YAAAA;AAAAA,EAAAA,IAoBIrI,GAfFuI,IAAAjI,MAAAG,SAAA2G,KAAA9G,GAGAgG,IAAA9F,MAAAC,SAAA,UAAAD,GACAyI,IAAAvI,MAAAD,SAAA,UAAAC,GACA8H,IAAA3H,MAAAJ,SAAA,KAAAI,GACA+H,IAAA5H,MAAAP,SAAA,KAAAO,GACAkI,IAAAhI,MAAAT,SAAA,KAAAS,GAMAqI,IAAApI,MAAAV,SAAA,KAAAU,GAGFqI,IAAsB3B,EAAQQ,GAC9B,CAAAoB,GAAAC,CAAA,IAAwCnG,GAAS,EAAK,GACtD,CAAA+D,GAAAqC,CAAA,IAA0BpG,GAAS,EAAE,GACrC,CAAAqG,GAAAC,CAAA,IAAoCtG,GAA6B,OAAO,GACxEuG,IAAiBC,GAAyB,IAAI,GAC9CC,IAAeb,KAAAM,GACfrB,IAAwBoB,KAAiBI,MAAe,UAaxDK,IAAe9B,GAAwBC,GAAiBC,GAXrB;AAAA,IAAAhB,OAAAA;AAAAA,IAAAkB,aAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,mBAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,QAQzBW,IAAA,UAA2BX,KAAA;AAAA,EAAA,CAG0C,GAC/EqB,IAAsBD,EAAM1B,YAAa0B,EAAM5C,OAAQC,CAAK,GAC5D6C,IAA0BJ,GAAOE,EAAMpB,MAAO;AAE9CuB,EAAAA,GAAU,MAAA;AACR,QAAI,CAACJ,GAAM;AACTG,MAAAA,EAAiBE,UAAWJ,EAAMpB;AAAT;AAAA,IAAA;AAI3B,IAAIb,GAA+BmC,EAAiBE,SAAUJ,EAAMpB,MAAO,KACzEc,EAAS,EAAE,GAGbQ,EAAiBE,UAAWJ,EAAMpB;AAAAA,EAAT,GACxB,CAACmB,GAAQC,EAAMpB,MAAO,CAAC;AAAC,MAAAzH;AAAA,EAAAnB,EAAA,CAAA,MAAAgK,KAAAhK,SAAA+J,KASxB5I,KAAC4I,GAAQC,EAAMzB,UAAW,GAACvI,OAAAgK,GAAAhK,OAAA+J,GAAA/J,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA,GAP9BmK,GAAU,MAAA;AACR,QAAI,CAACJ,KAAD,CAAYC,EAAMzB;AAAW;AAIjC,UAAA8B,KAAgBC,WAAW,MAAMT,EAAQO,SAAeG,MAAAA,GAAI,CAAC;AAAE,WACxD,MAAMC,aAAaH,EAAO;AAAA,EAAC,GACjClJ,CAA2B;AAAC,MAAA+D;AAAA,EAAAlF,EAAA,CAAA,MAAAuJ,KAAAvJ,SAAAoJ,KAAApJ,EAAA,CAAA,MAAAkJ,KAEsChE,IAAAuF,CAAAA,OAAA;AACnE,IAAIvB,MAAS1I,UACXiJ,EAAgBgB,GAAOvB,IAAK,GAG9BQ,EAAS,EAAE,GAEPe,GAAOvB,QAAPK,KACFK,EAAc,OAAO,GAGvBR,IAAeqB,EAAO;AAAA,EAAC,GACxBzK,OAAAuJ,GAAAvJ,OAAAoJ,GAAApJ,OAAAkJ,GAAAlJ,OAAAkF,KAAAA,IAAAlF,EAAA,CAAA;AAZD,QAAA0K,KAAqExF;AAYnE,MAAAyF;AAAA,EAAA3K,EAAA,CAAA,MAAAmI,KAAAnI,SAAAoI,KAE2BuC,KAAAC,CAAAA,OAAA;AAC3B,QAAI,CAACzC,KAAD,CAAqBC;AAAU;AAEnC,UAAAX,KAAaW,EAAUhB,MAAMyD,KAAMC,QAAOA,GAACC,OAAQN,GAAO/H,KAAM;AAChE,IAAK+E,OAELW,EAAU4C,WAAYvD,EAAI,GAC1BmC,EAAc,OAAO;AAAA,EAAC,GACvB5J,OAAAmI,GAAAnI,OAAAoI,GAAApI,OAAA2K,MAAAA,KAAA3K,EAAA,CAAA;AARD,QAAAiL,KAA6BN,IAU7BO,KAAmBC;AAA0F,MAAAC;AAAA,EAAApL,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAExF8J,KAAAC,CAAAA,QAA2B;AAAA,IAAAN,IAC1CtD,GAAIsD;AAAAA,IAAGrD,OACJD,GAAIC;AAAAA,IAAM4D,aACJ7D,GAAI8D;AAAAA,IAAepL,MAC1B+K,GAAWzD,GAAItH,IAAK;AAAA,IAACqL,UACjB/D,GAAIgE;AAAAA,IAAWC,SAChBjE,GAAIkE;AAAAA,EAAAA,IACb3L,QAAAoL,MAAAA,KAAApL,EAAA,EAAA;AAPF,QAAA4L,KAAqBR;AAOlB,MAAAS;AAAA,EAAA7L,UAAAoI,KAEsByD,KAAAzD,IACvB,gBAAA7G,EAACmE,IAAA,EACI,IAAA,OACE,MAAA,UACO,cAAA0C,EAAU0D,WACP,iBAAA1D,EAAUoD,YAAVhL,QACL,UAAA4H,EAAUoD,WAAV,KAAA,GACF,SAAA,UACL,IAAA,KACe,mBAAA,OACN,aAAA,gBACA,eACU,sBAAAO,IACN,gBAAAC,CAAAA,OAAA;AAEd,IADAjI,GAAKkI,gBAAAA,GACD7D,CAAAA,EAAUoD,YACd5B,EAAcsC,EAAuD;AAAA,EAAC,GAGxE,UAAA,gBAAA3K,EAAC4K,IAAA,EACS,SAAA,WACL,IAAA,mBACI,OAAA/D,EAAUgE,eACX,MAAAlB,GAAW9C,EAAUiE,YAAa,GAC9B,UAAAjE,EAAUoD,UACR,YAAApD,EAAUoD,WAAVhL,SAAkC,gBAAAe,EAACmD,IAAA,EAAS4H,IAAAA,IAAqB,SAAA,OAAA,CAAM,EAAA,CAAG,GAE1F,IA3BuB,MA4BjBtM,QAAAoI,GAAApI,QAAA6L,MAAAA,KAAA7L,EAAA,EAAA;AAER,QAAAuM,KAAuBnE,IA9BEyD,KA8BF3F,GACvBsG,IAA4B5E,EAAQ2E,MAAR,CAA4BvC,EAAMzB,YAE9DkE,KAAoBzC,EAAMzB,aACxB,gBAAAhH,EAACmE,IAAA,EAAe,SAAA,SAA0B,mBAAA,OAAkB,aAAA,gBAA2B,YAAA,GACrF,UAAA,gBAAAnE,EAACmL,IAAA,EAAyB,gCAACC,IAAA,EAAa,MAAA,GAAA,CAAE,GAAY,OAAA,QACpD,UAAA,gBAAApL,EAACqL,IAAA,EACM/C,KAAAA,GACO,aAAA,KACC,cAAA,KACN,QAAA,QACAxC,OAAAA,GACM,aAAA2C,EAAMxB,mBACP,cAAAwB,EAAMxB,mBACL,cAAA,OACLK,YACCA,SAAAA,IACDA,QAAAA,IACOA,eAAAA,IACL,UAAAgE,CAAAA,OAAWnD,EAAS3F,GAAK+I,OAAOpK,KAAM,GACrC,WAAAqK,GAAAA,CAAkC,EAAA,CAEjD,GACF,IApBkB,MAwBjBC,KAAAC,GAOWC,KAAA3D,IAAA0B,KAAAzK;AAAgD,MAAA2M;AAAA,EAAAnN,UAAA+I,KAE1DoE,uBAAAF,EAAA,SAAA,EAAc,SAAA,IAASlE,UAAAA,GAAQ,GAAe/I,QAAA+I,GAAA/I,QAAAmN,MAAAA,KAAAnN,EAAA,EAAA;AAC7C,QAAAoN,KAAAC,IAAiBC,MAAChE,GAChBiE,KAAAN,GACEO,KAAAP,GAA0BQ,KAAA,MAASC,KAAA,KAAMC,KAAA,KAAWC,KAAA;AAAS,MAAAC;AAAA,EAAA7N,UAAAwM,KAG3DqB,IAAArB,IAAsB,gBAAAjL,EAAA0L,EAAA,WAAA,EAAuB,QAAA,KAAG,IAAhD,MAA0DjN,QAAAwM,GAAAxM,QAAA6N,KAAAA,IAAA7N,EAAA,EAAA;AAC1D,QAAA8N,KAAAC;AAAU,MAAAC;AAAA,EAAAhO,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAGM0M,KAAA;AAAA,IAAAC,oBAAsB;AAAA,EAAA,GAAWjO,QAAAgO,MAAAA,KAAAhO,EAAA,EAAA;AAC9C,QAAAkO,KAAA,KACEC,KAAA,KAEHC,KAAAnE,EAAatG,SAAU,IACpBsG,EAAaoE,IAAKC,CAAAA,OAChB,gBAAA/M,EAAA0L,EAAA,MAAA,EAAgC,OAAAxF,GAAIsD,IAAe,UAAAtD,GAAIgE,YAAsB,SAAAhE,GAAIuD,UAAW,aAC1F,UAAA,gBAAAzJ,EAACb,GAAA,EACI,IAAA,eACD,GAAA,QACA,GAAA,KACM,QAAA;AAAA,IAAA6N,IAAM;AAAA,EAAA,GACN,QAAA;AAAA,IAAAA,IAAM;AAAA,EAAA,GACL,SAAA;AAAA,IAAAA,IAAM;AAAA,EAAA,GAEf,4BAACpC,IAAA,EACC,aAAO,GACHP,GAAanE,EAAI,GACZ,SAAAA,GAAI5E,WAAJ,WACG,YAAA4E,GAAI+G,YAAW,EAAA,CAE/B,KAfc/G,GAAIsD,EAgBpB,CAEc,IAAhBf,EAAMvB;AAAW,MAAAgG;AAAA,EAAAzO,EAAA,EAAA,MAAA8N,MAAA9N,EAAA,EAAA,MAAAgK,KAAAhK,EAAA,EAAA,MAAAgJ,KAAAhJ,EAAA,EAAA,MAAAgO,MAAAhO,UAAAoO,MA3BvBK,sBAACX,IAAA,EACO9E,SACO,eAAAgB,EAAMtB,eACJ,eAAAsF,IACb,GAAAE,IACE,KAAAC,IAEHC,UAAAA,IAqBH,GAAapO,QAAA8N,IAAA9N,QAAAgK,GAAAhK,QAAAgJ,GAAAhJ,QAAAgO,IAAAhO,QAAAoO,IAAApO,QAAAyO,KAAAA,IAAAzO,EAAA,EAAA;AAAA,MAAA0O;AAAA,EAAA1O,EAAA,EAAA,MAAAuM,MAAAvM,UAAAyM,MAAAzM,EAAA,EAAA,MAAAwN,GAAAmB,WAAA3O,EAAA,EAAA,MAAA6N,KAAA7N,UAAAyO,KAAAzO,EAAA,EAAA,MAAAqG,KAhCfqI,qCAAiBrI,GAAU,IAAAoH,IAAS,KAAAC,IAAM,GAAAC,IAAW,QAAAC,IAClDrB,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA,IACAoB;AAAAA,IACDY;AAAAA,EAAAA,GA6BF,GAAezO,QAAAuM,IAAAvM,QAAAyM,IAAAzM,EAAA,EAAA,IAAAwN,GAAAmB,SAAA3O,QAAA6N,GAAA7N,QAAAyO,GAAAzO,QAAAqG,GAAArG,QAAA0O,MAAAA,KAAA1O,EAAA,EAAA;AAAA,MAAA4O;AAAA,EAAA5O,UAAAuN,GAAAsB,cAAA7O,UAAA0O,MAlCjBE,KAAA,gBAAArN,EAAAgM,GAAA,YAAA,EACEmB,UAAAA,IAkCF,GAAkB1O,EAAA,EAAA,IAAAuN,GAAAsB,YAAA7O,QAAA0O,IAAA1O,QAAA4O,MAAAA,KAAA5O,EAAA,EAAA;AAAA,MAAA8O;AAAA,EAAA9O,EAAA,EAAA,MAAAoN,MAAApN,UAAAsN,MAAAtN,EAAA,EAAA,MAAA4O,MApCpBE,KAAA,gBAAAvN,EAAC6L,IAAA,EAAiB,UAAAE,IAChBsB,UAAAA,IAoCF,GAAS5O,QAAAoN,IAAApN,QAAAsN,IAAAtN,QAAA4O,IAAA5O,QAAA8O,MAAAA,KAAA9O,EAAA,EAAA;AAAA,MAAA+O;AAAA,SAAA/O,EAAA,EAAA,MAAAgK,KAAAhK,EAAA,EAAA,MAAA0K,MAAA1K,EAAA,EAAA,MAAAiJ,KAAAjJ,EAAA,EAAA,MAAAqJ,KAAArJ,UAAAkJ,KAAAlJ,EAAA,EAAA,MAAAmJ,KAAAnJ,UAAAgN,GAAAvH,QAAAzF,EAAA,EAAA,MAAAkN,MAAAlN,EAAA,EAAA,MAAAmN,MAAAnN,UAAA8O,MA/CXC,KAAA,gBAAAnN,EAAAoL,GAAA,MAAA,EACa/D,WAAAA,GACI,eAAAe,EAAMrB,eACfO,MAAAA,GACOC,aAAAA,GACCuB,kBACErB,gBAAAA,GACN,UAAA6D,IAEVC,UAAAA;AAAAA,IAAAA;AAAAA,IACA2B;AAAAA,EAAAA,GAsCF,GAAY9O,QAAAgK,GAAAhK,QAAA0K,IAAA1K,QAAAiJ,GAAAjJ,QAAAqJ,GAAArJ,QAAAkJ,GAAAlJ,QAAAmJ,GAAAnJ,EAAA,EAAA,IAAAgN,GAAAvH,MAAAzF,QAAAkN,IAAAlN,QAAAmN,IAAAnN,QAAA8O,IAAA9O,QAAA+O,MAAAA,KAAA/O,EAAA,EAAA,GAhDZ+O;AAgDY;AA/Mc,SAAA5D,GAAAhL,GAAA;AAAA,SA2F2BA,IAAO,gBAAAoB,EAACmD,IAAA,EAASvE,IAAAA,GAAc,SAAA,QAAM,IAArCK;AAAoD;AA3F/E,SAAAuL,GAAAhI,GAAA;AAAA,SAkHSA,EAAKkI,gBAAAA;AAAkB;AAlHhC,SAAAC,GAAA9B,GAAA;AAAA,SAsHMA,MAAY,UAAZ,WAAA;AAAwC;AAtH9C,SAAA2C,GAAAiC,GAAA;AAAA,SAwJEjL,EAAKkI,gBAAAA;AAAkB;ACtQhD,MAAMgD,KAAuBlP,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAClC;AAAA,IAAAiP,QAAAA;AAAAA,EAAAA,IAAmBnP;AAAM,MAAAM;AAAA,EAAAL,EAAA,CAAA,MAAAkP,EAAAC,aACV9O,IAAA6O,EAAMC,aAAN,CAAA,GAAsBnP,EAAA,CAAA,IAAAkP,EAAAC,WAAAnP,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,SAAAK,KAAvBE,IAACF,EAAsBgO,IAAMlD,EAOzC,GAACnL,OAAAK,GAAAL,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAPH,QAAAoH,IAAc7G;AAOV,MAAAE;AAAA,EAAAT,EAAA,CAAA,MAAAkP,EAAA/O,QAAAH,EAAA,CAAA,MAAAkP,EAAAxH,SAKEjH,IAAA,gBAAAc,EAACkD,IAAA,EAAmB,SAAA,SAAa,MAAA,OAAkB,cAAAyK,EAAMxH,OACtDwH,UAAAA,EAAM/O,KAAAA,CACT,GAAaH,EAAA,CAAA,IAAAkP,EAAA/O,MAAAH,EAAA,CAAA,IAAAkP,EAAAxH,OAAA1H,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAGI,QAAAY,IAAAsO,EAAM1G,qBAAN,aAG2BzH,IAAAmO,EAAME,kBAAN;AAA2C,MAAAnO;AAAA,EAAAjB,SAAAe,KADvFE,sBAAAgM,EAAA,MAAA,EAAiB,OAAA,SAAQ,SAAA,IACvB,UAAA,gBAAA1L,EAAC4K,IAAA,EAAQ,SAAA,IAAgB,SAAA,WAAiB,OAAApL,GAA6C,UAAA,OACzF,GAAYf,OAAAe,GAAAf,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,SAAAlB,EAAA,CAAA,MAAAoH,KAAApH,EAAA,EAAA,MAAAS,KAAAT,EAAA,EAAA,MAAAY,KAAAZ,UAAAiB,KAXhBC,IAAA,gBAAAK,EAACuH,IAAA,EAEG,SAAArI,GAIK2G,OAAAA,GACY,mBAAAxG,GAEjB,YAAAK,GAIc,gBAAA8K,GAAAA,CAAiC,GACjD/L,OAAAoH,GAAApH,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA,GAdFkB;AAcE;AA1B8B,SAAAiK,GAAA1D,GAAA;AAAA,SAEoB;AAAA,IAAAsD,IAChDtD,EAAIsD;AAAAA,IAAGrD,OACJD,EAAIC;AAAAA,IAAMC,YACL,CAACF,EAAIC,OAAQD,EAAI6D,WAAY,EAAC9D,OAAQI,OAAO,EAACC,KAAM,GAAG;AAAA,IAAC8D,cACtDlE,EAAI6D;AAAAA,IAAYzI,SACrB;AAAA,IAAkBmI,UACjBA,MAAMvD,EAAI4H,WAAAA;AAAAA,EAAY;AACjC;AATiC,SAAAtD,GAAAhI,GAAA;AAAA,SAyBHA,EAAKC,eAAAA;AAAiB;ACvBvD,MAAMsL,KAAeA,CAACJ,GAAuBK,MACvCL,EAAOxD,UAEP,gBAAAnK,EAACiD,MAAwB,SAAS0K,EAAOxD,SAAS,WAAW,KAC1D6D,UAAAA,KADWL,EAAOnE,EAErB,IAGG,gBAAAxJ,EAACM,IAAA,EAA0B0N,UAAAA,EAAAA,GAAZL,EAAOnE,EAAW,GAG7ByE,KAAazP,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACxB;AAAA,IAAAyB,SAAAA;AAAAA,IAAA+N,SAAAA;AAAAA,EAAAA,IAA6B1P;AAC7B,MAAI2B,EAAOiC,WAAY;AAAC,WAAS;AAAK,MAAAtD,GAAAE;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAOrBjB,IAAA;AAAA,IAAAqP,SAAW;AAAA,IAAGC,eAAiB;AAAA,EAAA,GACzBpP,IAAA;AAAA,IAAAmP,SAAW;AAAA,IAAGC,eAAiB;AAAA,EAAA,GAAQ3P,OAAAK,GAAAL,OAAAO,MAAAF,IAAAL,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,MAAAT,EAAA,CAAA,MAAA0B,KAAA1B,SAAAyP,GAAA;AAAA,QAAA7O;AAAA,IAAAZ,SAAAyP,KAI7C7O,IAAAsO,CAAAA,MACPA,EAAMC,aAAcD,EAAMC,UAAUxL,UAAW,IAC1C,gBAAApC,EAAC0N,IAAA,EAA6CC,QAAAA,EAAAA,GAAnBA,EAAMnE,EAAmB,IAGzDmE,EAAMC,aAAcD,EAAMC,UAAUxL,SAAU,IACzC2L,GACLJ,GACA,gBAAAtN,EAAAqL,EAAA,MAAA,EACE,UAAA;AAAA,MAAA,gBAAA1L,EAAA0L,EAAA,SAAA,EAAc,SAAA,IACZ,4BAACxI,IAAA,EAAmB,SAAA,SAAa,MAAA,OAAkB,cAAAyK,EAAMxH,OACtDwH,UAAAA,EAAM/O,MACT,GACF;AAAA,wBACA8M,EAAA,YAAA,EACE,UAAA,gBAAA1L,EAAA0L,EAAA,SAAA,EAAmB,MAAA,SAAW,IAAA,MAC3BiC,UAAAA,EAAMC,UAAUd,IAAKtC,EAkBrB,GACH,EAAA,CACF;AAAA,IAAA,EAAA,CACF,CACF,IAGKuD,GACLJ,GACA,gBAAA3N,EAACkD,IAAA,EACS,SAAA,SACH,MAAA,OACO,cAAAyK,EAAMxH,OACT,SAAAsE,CAAAA,MAAA;AACPjI,MAAAA,EAAKkI,gBAAAA,GACLiD,EAAMG,WAAYI,CAAO;AAAA,IAAC,GAG3BP,UAAAA,EAAM/O,KAAAA,CACT,CACF,GACDH,OAAAyP,GAAAzP,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GAvDAS,IAAAiB,EAAO2M,IAAKzN,CAuDZ,GAACZ,OAAA0B,GAAA1B,OAAAyP,GAAAzP,OAAAS;AAAAA,EAAA;AAAAA,IAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,SAAAZ,SAAAS,KAhEJG,sBAACkB,IAAA,EACK,KAAA,KACI,SAAA,KACM,eAAA,QACD,aAAAzB,GACM,mBAAAE,GACR,YAAA,sBACF,SAAA4K,IAER1K,UAAAA,GAwDH,GAAST,OAAAS,GAAAT,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GAjETY;AAiES;AAtEa,SAAAuK,GAAApH,GAAA;AAAA,SAYAA,EAAKkI,gBAAAA;AAAkB;AAZvB,SAAAF,GAAAtE,GAAA;AAAA,SA+BN,gBAAAlG,EAACiD,IAAA,EAA+B,SAAAiD,EAAI6D,aAAwB,UAAA,CAAC7D,EAAI6D,aAAyB,WAAA,KACxF,UAAA,gBAAA/J,EAAA0L,EAAA,MAAA,EACS,OAAAxF,EAAIsD,IACD,UAAAtD,EAAI+D,YAAa/D,EAAImI,UACtB,SAAA,MAAA;AACP,IAAKnI,EAAImI,YAAWnI,EAAI4H,WAAAA;AAAAA,EAAc,GAGxC,UAAA,gBAAAzN,EAACE,IAAA,EAAW,KAAA,KAAS,MAAA,KAAM,GAAA,QAAe,SAAA,iBACxC,UAAA;AAAA,IAAA,gBAAAF,EAACE,IAAA,EAAW,KAAA,KAAS,MAAA,KAClB2F,UAAAA;AAAAA,MAAAA,EAAItH,OAAQ,gBAAAoB,EAACb,GAAA,EAAK+G,UAAAA,EAAItH,MAAe,IAArC;AAAA,MACD,gBAAAoB,EAACb,GAAA,EAAS,MAAA,KAAK+G,YAAIC,MAAAA,CAAO;AAAA,IAAA,GAC5B;AAAA,IACCD,EAAIoI,aAAc,gBAAAtO,EAACb,GAAA,EAAgB,YAAA,GAAI+G,UAAAA,EAAIoI,YAAY,IAAvD;AAAA,EAAA,EAAA,CACH,EAAA,CACF,KAfYpI,EAAIsD,EAgBlB;AAAU;AC/D9B,MAAM+E,KAAa/P,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACjB;AAAA,IAAAwH,MAAAA;AAAAA,IAAAsI,YAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAvE,YAAAA;AAAAA,IAAA5I,SAAAA;AAAAA,IAAAoN,MAAAA;AAAAA,EAAAA,IAAqElQ,GACrEmQ,IAAuBrN,MAAY,aAAaA,MAAY,QAC5DsN,IAAuBD,IAAA,oBAAA,mBACvBE,IAA6BF,IAAA,aAAA,mBAC7BG,IAA8BH,IAAA,MAAA;AAA6B,MAAA7P;AAAAiQ,EAAAA,GAAA;AAGzD,QAAI7E,GAAU;AAAEpL,MAAAA,IAAO;AAAP,YAAAiQ;AAAAA,IAAkB;AAClC,QAAIL,MAAS,UAAQ;AAAE5P,MAAAA,IAAO;AAAP,YAAAiQ;AAAAA,IAAiB;AACxCjQ,IAAAA,IAAO;AAAA,EAAK;AAHd,QAAAkQ,IAAmBlQ,GAKnB0E,IAAkB0C,EAAI1C,cAAekL,MAAS,WAAT,YAAA,aACrCO,IAAyBP,MAAS,WAAT,YAAA;AAAyD,MAAA1P;AAAA,EAAAP,EAAA,CAAA,MAAA+P,KAAA/P,SAAAgQ,KAI7EzP,IAAAyP,IACC,gBAAAzO,EAACb,GAAA,EAAU,OAAA,YAAuB,eAAW,SAAA,QAAkB,YAAA,UAC7D,UAAA,gBAAAa,EAACmD,MACK+L,IAAAA,IACI,SAAA,QACG,WAAAV,IAAA,kBAAA,gBACA,YAAA,uBAAA,IAEf,IARD,MASO/P,OAAA+P,GAAA/P,OAAAgQ,GAAAhQ,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAA+E,KAAA/E,EAAA,CAAA,MAAAyH,EAAAtH,QAGHM,IAAAgH,EAAItH,OACH,gBAAAoB,EAACb,GAAA,EACQqE,OAAAA,GACK,eACJ,SAAA,eACG,YAAA,UACI,gBAAA,UACP,SAAA,QACC,UAAA,QACE,YAAA,KACN,KAAA;AAAA,IAAA,WAAa;AAAA,MAAAsB,OAAS;AAAA,MAAMqK,QAAU;AAAA,IAAA;AAAA,EAAO,GAEjDjJ,UAAAA,EAAItH,KAAAA,CACP,IAbD,MAcOH,OAAA+E,GAAA/E,EAAA,CAAA,IAAAyH,EAAAtH,MAAAH,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,EAAA,CAAA,MAAAyH,EAAAkJ,aACP/P,IAAA6G,EAAIkJ,YACH,gBAAApP,EAACiD,IAAA,EAAiB,SAAAiD,EAAIkJ,UAAUjF,SAAoB,UAAA,CAACjE,EAAIkJ,UAAUjF,SAAqB,gBACtF,UAAA,gBAAAnK,EAACb,GAAA,EAAW,OAAA+G,EAAIkJ,UAAUvQ,SAAd,YAAgD,YAAA,GACzDqH,UAAAA,EAAIkJ,UAAUxQ,KAAAA,CACjB,EAAA,CACF,IALD,MAMOH,EAAA,CAAA,IAAAyH,EAAAkJ,WAAA3Q,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,EAAA,CAAA,MAAAyH,EAAAC,SAAA1H,EAAA,CAAA,MAAAuQ,KAAAvQ,EAAA,EAAA,MAAAmQ,KACPpP,IAAA,OAAO0G,EAAIC,SAAW,WACrB,gBAAAnG,EAACI,GAAA,EAAgBwO,WAAAA,GAAuBI,OAAAA,GAAY,UAAA,IACjD9I,UAAAA,EAAIC,OACP,IAEA,gBAAAnG,EAACb,GAAA,EAAS,MAAA,KAAS,MAAA,QAAgB,UAAA,UAAgB6P,OAAAA,GAChD9I,UAAAA,EAAIC,OACP,GACD1H,EAAA,CAAA,IAAAyH,EAAAC,OAAA1H,OAAAuQ,GAAAvQ,QAAAmQ,GAAAnQ,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,EAAA,MAAAS,KAAAT,UAAAY,KAAAZ,EAAA,EAAA,MAAAe,KA/BHE,sBAACa,IAAA,EAAW,KAAA,KAAS,MAAA,KAAe,YAAA,UACjCrB,UAAAA;AAAAA,IAAAA;AAAAA,IAeAG;AAAAA,IAOAG;AAAAA,EAAAA,GASH,GAASf,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,EAAA,MAAAwQ,KAAAxQ,UAAAqQ,KAAArQ,EAAA,EAAA,MAAAoQ,KAAApQ,EAAA,EAAA,MAAAyH,EAAA6D,eACRpK,IAAAuG,EAAI6D,cACH,OAAO7D,EAAI6D,eAAiB,WAC1B,gBAAA/J,EAACI,GAAA,EAAS0O,IAAAA,GAAkCD,WAAAA,GAA6BI,OAAAA,GAAkB,UAAA,IACxF/I,UAAAA,EAAI6D,YAAAA,CACP,IAEA,gBAAA/J,EAACb,GAAA,EAAQ2P,IAAAA,GAA4B,MAAA,KAAS,MAAA,QAAgB,UAAA,UAC3D5I,UAAAA,EAAI6D,aACP,IARH,MAUOtL,QAAAwQ,GAAAxQ,QAAAqQ,GAAArQ,QAAAoQ,GAAApQ,EAAA,EAAA,IAAAyH,EAAA6D,aAAAtL,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,EAAAnB,EAAA,EAAA,MAAAiB,KAAAjB,UAAAkB,KA5CVC,sBAACe,GAAA,EAAU,KAAA,OAAW,MAAA,KAAS,MAAA,KAC7BjB,UAAAA;AAAAA,IAAAA;AAAAA,IAiCCC;AAAAA,EAAAA,GAWH,GAAQlB,QAAAiB,GAAAjB,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,SAAAlF,EAAA,EAAA,MAAAO,KAAAP,UAAAmB,KAxDV+D,IAAA,gBAAAtD,EAACE,IAAA,EAAW,KAAA,KAAS,MAAA,KAAS,MAAA,KAAa,UAAA,UAAoB,YAAA,UAC5DvB,UAAAA;AAAAA,IAAAA;AAAAA,IAUDY;AAAAA,EAAAA,GA8CF,GAASnB,QAAAO,GAAAP,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA,GAzDTkF;AAyDS,GAIA0L,KAAiB7Q,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAQ5B;AAAA,IAAAwH,MAAAA;AAAAA,IAAAgE,YAAAA;AAAAA,IAAAsE,YAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,MAAA5P;AAAAA,IAAAwC,SAAAtC;AAAAA,EAAAA,IAA6FR,GAA1CkQ,IAAA5P,MAAAG,SAAA,YAAAH,GAAkBwC,IAAAtC,MAAAC,SAAA,YAAAD;AAAmB,MAAAE;AAAA,EAAAT,SAAAyL,KAAAzL,EAAA,CAAA,MAAA+P,KAAA/P,EAAA,CAAA,MAAAyH,KAAAzH,EAAA,CAAA,MAAAgQ,KAAAhQ,SAAAiQ,KAAAjQ,EAAA,CAAA,MAAA6C,KAIpFpC,sBAACqP,IAAA,EACOrI,MAAAA,GACMsI,YAAAA,GACCC,aAAAA,GACDvE,YAAAA,GACNwE,MAAAA,GACGpN,SAAAA,GAAO,GAChB7C,OAAAyL,GAAAzL,OAAA+P,GAAA/P,OAAAyH,GAAAzH,OAAAgQ,GAAAhQ,OAAAiQ,GAAAjQ,OAAA6C,GAAA7C,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,EAAA,CAAA,MAAAyH,EAAAoI,cACDjP,IAAA6G,EAAIoI,aACH,gBAAAtO,EAACb,GAAA,EAAgB,YAAA,GAAS,OAAA,YAAmB,SAAA,QAAkB,YAAA,UAC5D+G,UAAAA,EAAIoI,YACP,IAHD,MAIO7P,EAAA,CAAA,IAAAyH,EAAAoI,YAAA7P,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,EAAA,CAAA,MAAAyH,EAAA/F,WAAA1B,EAAA,EAAA,MAAAyH,EAAAsD,MACPhK,IAAA0G,EAAI/F,WAAY+F,EAAI/F,QAAQiC,SAAU,IACrC,gBAAApC,EAACiO,IAAA,EAAoB,SAAA/H,EAAI/F,SAAmB,SAAA;AAAA,IAAAmP,QAAUpJ,EAAIsD;AAAAA,EAAAA,GAAK,IADhE,MAEO/K,EAAA,CAAA,IAAAyH,EAAA/F,SAAA1B,EAAA,EAAA,IAAAyH,EAAAsD,IAAA/K,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAiB;AAAA,SAAAjB,EAAA,EAAA,MAAAS,KAAAT,UAAAY,KAAAZ,EAAA,EAAA,MAAAe,KAhBVE,IAAA,gBAAAW,EAAAC,IAAA,EACEpB,UAAAA;AAAAA,IAAAA;AAAAA,IAQCG;AAAAA,IAKAG;AAAAA,EAAAA,GAEO,GACPf,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA,GAjBHiB;AAiBG,GClGD6P,KAAsB/Q,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC1B;AAAA,IAAAwH,MAAAA;AAAAA,EAAAA,IAAiB1H;AACjB,MAAI,CAAC0H,EAAItH;AAAK,WAAS;AAAK,MAAAE;AAAA,EAAAL,EAAA,CAAA,MAAAyH,EAAAtH,QAIvBE,IAAA,OAAOoH,EAAItH,QAAU,aAAa,gBAAAoB,EAACmD,IAAA,EAAS,IAAA+C,EAAItH,MAAe,SAAA,OAAA,CAAM,IAAMsH,EAAItH,MAAKH,EAAA,CAAA,IAAAyH,EAAAtH,MAAAH,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,SAAAK,KADvFE,IAAA,gBAAAgB,EAACb,KAAU,OAAA,YAAuB,YAAA,GAAW,SAAA,eAC1CL,UAAAA,EAAAA,CACH,GAAML,OAAAK,GAAAL,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GAFNO;AAEM,GAIGwQ,KAAchR,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACzB;AAAA,IAAA+B,UAAAA;AAAAA,IAAAoF,OAAAA;AAAAA,IAAAgC,cAAAA;AAAAA,IAAA4B,UAAAA;AAAAA,IAAA9B,MAAAA;AAAAA,IAAA8H,WAAA3Q;AAAAA,EAAAA,IAAqFN,GAA9BiR,IAAA3Q,MAAAG,SAAA,gBAAAH;AAAyB,MAAAE;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAK1Cf,IAAA;AAAA,IAAA0Q,UAAY;AAAA,EAAA,GAAGjR,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAAgR,KAApCvQ,IAAA;AAAA,IAAAuQ,WAAAA;AAAAA,IAAAE,QAAqB3Q;AAAAA,EAAAA,GAAiBP,OAAAgR,GAAAhR,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,SAAAoJ,KACrCxI,IAAA6J,CAAAA,MAAarB,EAAaqB,EAAOvB,IAAK,GAAClJ,OAAAoJ,GAAApJ,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,SAAAgC,KAErDjB,sBAAAkM,EAAA,SAAA,EAAc,SAAA,IAASjL,UAAAA,GAAS,GAAehC,OAAAgC,GAAAhC,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,MAAAjB,EAAA,CAAA,MAAAoH,KAAApH,SAAAgL,GAAA;AAAA,QAAA9J;AAAA,IAAAlB,UAAAgL,KAI9B9J,IAAAuG,CAAAA,MACT,gBAAAlG,EAAA0L,EAAA,MAAA,EAES,OAAAxF,EAAIsD,IACD,UAAAtD,EAAI+D,YAAa/D,EAAImI,UACpB,WAAAnI,EAAImI,WAAJ;AAAA,MAAAF,SAA2B;AAAA,MAACyB,QAAU;AAAA,IAAA,IAAtC3Q,QACF,SAAA,MAAA;AACP,MAAKiH,EAAImI,YAAW5E,EAASvD,CAAI;AAAA,IAAE,GAGrC,UAAA,gBAAA7F,EAACE,IAAA,EAAW,KAAA,KAAS,MAAA,KAAM,GAAA,QAAe,SAAA,iBAA2B,YAAA,UACnE,UAAA;AAAA,MAAA,gBAAAF,EAACE,IAAA,EAAW,KAAA,KAAS,MAAA,KAAS,MAAA,KAAgB,YAAA2F,EAAI6D,cAAJ,eAAA,UAC5C,UAAA;AAAA,QAAA,gBAAA/J,EAACuP,MAA0BrJ,MAAAA;QAC3B,gBAAA7F,EAACM,GAAA,EAAU,KAAA,KAAS,MAAA,KAClB,UAAA;AAAA,UAAA,gBAAAX,EAACI,KAAe,WAAA,mBAAkB,UAAA,IAC/B8F,YAAIC,OACP;AAAA,UACCD,EAAI6D,cACH,gBAAA/J,EAACI,GAAA,EAAe,WAAA,YAAiB,OAAA,0BAAyB,cACvD8F,UAAAA,EAAI6D,YAAAA,CACP,IAHD;AAAA,QAAA,EAAA,CAKH;AAAA,MAAA,GACF;AAAA,MACC7D,EAAIoI,aAAc,gBAAAtO,EAACb,GAAA,EAAgB,eAAI+G,UAAAA,EAAIoI,YAAY,IAAvD;AAAA,IAAA,GACH,EAAA,GAvBKpI,EAAIsD,EAwBX,GACD/K,QAAAgL,GAAAhL,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA,GA3BAiB,IAAAmG,EAAKiH,IAAKnN,CA2BV,GAAClB,OAAAoH,GAAApH,OAAAgL,GAAAhL,OAAAiB;AAAAA,EAAA;AAAAA,IAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,UAAAiB,KA9BRC,sBAACmM,IAAA,EACC,UAAA,gBAAA9L,EAAA0L,EAAA,YAAA,EACE,UAAA,gBAAA1L,eAAmB,MAAA,SAAW,IAAA,MAC3BN,UAAAA,EAAAA,CA4BH,GACF,GACF,GAASjB,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,SAAAnB,EAAA,EAAA,MAAAkJ,KAAAlJ,EAAA,EAAA,MAAAS,KAAAT,EAAA,EAAA,MAAAY,KAAAZ,EAAA,EAAA,MAAAe,KAAAf,UAAAkB,KAvCXC,IAAA,gBAAAS,EAAAqL,EAAA,MAAA,EACQ/D,MAAAA,GACO,aAAAzI,GACC,cAAAG,GAEdG,UAAAA;AAAAA,IAAAA;AAAAA,IACAG;AAAAA,EAAAA,GAkCF,GAAYlB,QAAAkJ,GAAAlJ,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GAxCZmB;AAwCY,GC5DViQ,KAAqBA,CAACC,MAAkB;AAC5C,MAAIA,EAAAA,KAAS;AACb,WAAO,kCAAkCA,CAAK;AAChD,GAEMC,KAAuBA,CAACzO,GAAkC0O,MAC1D1O,MAAY,aAAa,CAAC0O,IAAuB;AAAA,EAAEC,WAAW;AAAA,EAAWC,WAAWjR;AAAAA,IAEjF;AAAA,EACLgR,WAAW;AAAA,EACXC,WAAW5O,MAAY,YAAY,YAAY;AAAA,GAI7C6O,KAA2BA,CAAC3K,OAK3B;AAAA,EACLwH,IAAIxH,EAAMyH,aAAazH,EAAM4K,aAAa;AAAA,EAC1CC,QACE7K,EAAMkJ,SAAS,WAAW;AAAA,IAAE9L,WAAW;AAAA,EAAA,IAAmD;AAAA,IAAEoK,IAAIxH,EAAM8K;AAAAA,EAAAA;AAC1G,IAEa1F,KAAUlF,GAAsC,CAAAlH,GAAAmH,MAAA;AAAA,QAAAlH,IAAAC,EAAA,GAAA;AAAA,MAAAyB,GAAAM,GAAA8P,GAAAC,GAAAzG,GAAAE,GAAAwG,GAAAnC,GAAAoC,GAAA9R,GAAA4E,GAAAgG,GAAA4F,GAAAuB,GAAAC,GAAAzK,GAAAyH,GAAAiD,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAA5Q,GAAA5B,GAAAE,GAAAE,GAAAG,GAAAG,GAAAE,GAAAC,GAAAC,GAAA+D,GAAAwG;AAAA,EAAA1L,SAAAD,KAC3D;AAAA,IAAAgL,IAAAA;AAAAA,IAAArD,OAAAA;AAAAA,IAAA4D,aAAAA;AAAAA,IAAAnL,MAAAA;AAAAA,IAAA4E,WAAAA;AAAAA,IAAA4L,WAAAA;AAAAA,IAAAd,YAAAA;AAAAA,IAAAnE,SAAAA;AAAAA,IAAAF,UAAAA;AAAAA,IAAA0G,aAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAF,MAAAA;AAAAA,IAAAI,kBAAAA;AAAAA,IAAAlD,WAAAA;AAAAA,IAAAiD,eAAAA;AAAAA,IAAAL,kBAAAA;AAAAA,IAAArQ,SAAAA;AAAAA,IAAAM,UAAAA;AAAAA,IAAAsQ,YAAAA;AAAAA,IAAAjB,OAAAhR;AAAAA,IAAAmO,YAAAjO;AAAAA,IAAAwP,YAAAtP;AAAAA,IAAAqS,kBAAAlS;AAAAA,IAAAiC,SAAA9B;AAAAA,IAAAkP,MAAAhP;AAAAA,IAAA0Q,YAAAzQ;AAAAA,IAAA2Q,SAAA1Q;AAAAA,IAAA4R,SAAA7N;AAAAA,IAAA4M,WAAAA;AAAAA,IAAAe,gBAAAA;AAAAA,IAAAD,eAAAA;AAAAA,IAAAZ,WAAAA;AAAAA,IAAAU,aAAAA;AAAAA,IAAAD,YAAAA;AAAAA,IAAAD,WAAAA;AAAAA,IAAAG,QAAAA;AAAAA,IAAAJ,SAAAA;AAAAA,IAAA,GAAAtQ;AAAAA,EAAAA,IAuCIlC,GAAMC,OAAAD,GAAAC,OAAA0B,GAAA1B,OAAAgC,GAAAhC,OAAA8R,GAAA9R,OAAA+R,GAAA/R,OAAAsL,GAAAtL,OAAAwL,GAAAxL,OAAAgS,GAAAhS,OAAA6P,GAAA7P,OAAAiS,GAAAjS,QAAAG,GAAAH,QAAA+E,GAAA/E,QAAA+K,GAAA/K,QAAA2Q,GAAA3Q,QAAAkS,GAAAlS,QAAAmS,GAAAnS,QAAA0H,GAAA1H,QAAAmP,GAAAnP,QAAAoS,GAAApS,QAAAqS,GAAArS,QAAAsS,GAAAtS,QAAAuS,GAAAvS,QAAAwS,GAAAxS,QAAAyS,GAAAzS,QAAA0S,GAAA1S,QAAA2S,GAAA3S,QAAA4S,GAAA5S,QAAA6S,GAAA7S,QAAAiC,GAAAjC,QAAAK,GAAAL,QAAAO,GAAAP,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAiB,GAAAjB,QAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAA0L,MAAAhK,IAAA1B,EAAA,CAAA,GAAAgC,IAAAhC,EAAA,CAAA,GAAA8R,IAAA9R,EAAA,CAAA,GAAA+R,IAAA/R,EAAA,CAAA,GAAAsL,IAAAtL,EAAA,CAAA,GAAAwL,IAAAxL,EAAA,CAAA,GAAAgS,IAAAhS,EAAA,CAAA,GAAA6P,IAAA7P,EAAA,CAAA,GAAAiS,IAAAjS,EAAA,CAAA,GAAAG,IAAAH,EAAA,EAAA,GAAA+E,IAAA/E,EAAA,EAAA,GAAA+K,IAAA/K,EAAA,EAAA,GAAA2Q,IAAA3Q,EAAA,EAAA,GAAAkS,IAAAlS,EAAA,EAAA,GAAAmS,IAAAnS,EAAA,EAAA,GAAA0H,IAAA1H,EAAA,EAAA,GAAAmP,IAAAnP,EAAA,EAAA,GAAAoS,IAAApS,EAAA,EAAA,GAAAqS,IAAArS,EAAA,EAAA,GAAAsS,IAAAtS,EAAA,EAAA,GAAAuS,IAAAvS,EAAA,EAAA,GAAAwS,IAAAxS,EAAA,EAAA,GAAAyS,IAAAzS,EAAA,EAAA,GAAA0S,IAAA1S,EAAA,EAAA,GAAA2S,IAAA3S,EAAA,EAAA,GAAA4S,IAAA5S,EAAA,EAAA,GAAA6S,IAAA7S,EAAA,EAAA,GAAAiC,IAAAjC,EAAA,EAAA,GAAAK,IAAAL,EAAA,EAAA,GAAAO,IAAAP,EAAA,EAAA,GAAAS,IAAAT,EAAA,EAAA,GAAAY,IAAAZ,EAAA,EAAA,GAAAe,IAAAf,EAAA,EAAA,GAAAiB,IAAAjB,EAAA,EAAA,GAAAkB,IAAAlB,EAAA,EAAA,GAAAmB,IAAAnB,EAAA,EAAA,GAAAkF,IAAAlF,EAAA,EAAA,GAAA0L,IAAA1L,EAAA,EAAA;AAnBR,QAAAqR,IAAAhR,MAAAG,SAAA,IAAAH,GACAmO,IAAAjO,MAAAC,SAAA,KAAAD,GACAwP,IAAAtP,MAAAD,SAAA,KAAAC,GACAqS,KAAAlS,MAAAJ,SAAA,KAAAI,GACAiC,KAAA9B,MAAAP,SAAA,YAAAO,GACAkP,KAAAhP,MAAAT,SAAA,YAAAS,GACA0Q,KAAAzQ,MAAAV,SAAA,0BAAAU,GACA2Q,KAAA1Q,MAAAX,SAAA,uBAAAW,GACA4R,KAAA7N,MAAA1E,SAAA,KAAA0E,GAYF,CAAA8N,IAAAC,EAAA,IAAgC3P,GAAS,EAAK;AAAE,MAAAqH;AAAA,EAAA3K,EAAA,EAAA,MAAA0B,KAAA1B,EAAA,EAAA,MAAAgC,KAAAhC,UAAA+R,KAAA/R,EAAA,EAAA,MAAAsL,KAAAtL,EAAA,EAAA,MAAAwL,KAAAxL,EAAA,EAAA,MAAA6P,KAAA7P,EAAA,EAAA,MAAAiS,KAAAjS,UAAAG,KAAAH,EAAA,EAAA,MAAA+E,KAAA/E,EAAA,EAAA,MAAA+K,KAAA/K,EAAA,EAAA,MAAA2Q,KAAA3Q,EAAA,EAAA,MAAAkS,KAAAlS,EAAA,EAAA,MAAAmS,KAAAnS,UAAA0H,KAAA1H,EAAA,EAAA,MAAAmP,KAAAnP,EAAA,EAAA,MAAAoS,KAAApS,EAAA,EAAA,MAAAqS,KAAArS,EAAA,EAAA,MAAAsS,KAAAtS,UAAA0L,KAEtBf,KAAA;AAAA,IAAAI,IAAAA;AAAAA,IAAArD,OAAAA;AAAAA,IAAA4D,aAAAA;AAAAA,IAAAnL,MAAAA;AAAAA,IAAA4E,WAAAA;AAAAA,IAAA4L,WAAAA;AAAAA,IAAAd,YAAAA;AAAAA,IAAAnE,SAAAA;AAAAA,IAAAF,UAAAA;AAAAA,IAAA0G,aAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAF,MAAAA;AAAAA,IAAAI,kBAAAA;AAAAA,IAAAlD,WAAAA;AAAAA,IAAAiD,eAAAA;AAAAA,IAAAL,kBAAAA;AAAAA,IAAArQ,SAAAA;AAAAA,IAAAM,UAAAA;AAAAA,IAAAsQ,YAAAA;AAAAA,EAAAA,GAoBzBtS,QAAA0B,GAAA1B,QAAAgC,GAAAhC,QAAA+R,GAAA/R,QAAAsL,GAAAtL,QAAAwL,GAAAxL,QAAA6P,GAAA7P,QAAAiS,GAAAjS,QAAAG,GAAAH,QAAA+E,GAAA/E,QAAA+K,GAAA/K,QAAA2Q,GAAA3Q,QAAAkS,GAAAlS,QAAAmS,GAAAnS,QAAA0H,GAAA1H,QAAAmP,GAAAnP,QAAAoS,GAAApS,QAAAqS,GAAArS,QAAAsS,GAAAtS,QAAA0L,GAAA1L,QAAA2K,MAAAA,KAAA3K,EAAA,EAAA;AApBD,QAAAyH,IAA0BkD;AAoBxB,MAAAS;AAAA,EAAApL,EAAA,EAAA,MAAAgS,KAAAhS,EAAA,EAAA,MAAAwS,KAAAxS,EAAA,EAAA,MAAAyS,KAAAzS,EAAA,EAAA,MAAA0S,KAAA1S,UAAA2S,KAEgBvH,KAAA;AAAA,IAAA4G,WAAAA;AAAAA,IAAAU,aAAAA;AAAAA,IAAAD,YAAAA;AAAAA,IAAAD,WAAAA;AAAAA,IAAAG,QAAAA;AAAAA,EAAAA,GAAyD3S,QAAAgS,GAAAhS,QAAAwS,GAAAxS,QAAAyS,GAAAzS,QAAA0S,GAAA1S,QAAA2S,GAAA3S,QAAAoL,MAAAA,KAAApL,EAAA,EAAA;AAA3E,QAAAkT,KAAkB9H,IAElB+H,MAAqB1L,EAAIzF,UAAiB2B,UAArB,KAA8B,KAAK8D,EAAIyK,gBAAiB,IAC7EkB,MAAsB3L,EAAI0H,WAAkBxL,UAAtB,KAA+B,GACrDqM,KAAoB8C,MAAAK,IACpB1H,KAAmBhE,EAAI+D,aAAc;AAAK,MAAAK;AAAA,EAAA7L,UAAAoT,MAAApT,EAAA,EAAA,MAAAyL,MAAAzL,EAAA,EAAA,MAAAyH,KAAAzH,EAAA,EAAA,MAAAsS,KAAAtS,UAAA6S,KAAA7S,EAAA,EAAA,MAAAgQ,MAEnBnE,KAAAA,MAAA;AACrB,QAAIJ,CAAAA,MACA2H,CAAAA,IACJ;AAAA,UAAIpD,IAAW;AACb6C,QAAAA,IAAAA;AAAkB;AAAA,MAAA;AAGpB,UAAIP,GAAU;AACZA,QAAAA,EAAAA;AAAY;AAAA,MAAA;AAGd7K,MAAAA,EAAI6K,aAAAA;AAAAA;AAAAA,EAAe,GACpBtS,QAAAoT,IAAApT,QAAAyL,IAAAzL,QAAAyH,GAAAzH,QAAAsS,GAAAtS,QAAA6S,GAAA7S,QAAAgQ,IAAAhQ,QAAA6L,MAAAA,KAAA7L,EAAA,EAAA;AAZD,QAAAqT,KAAuBxH;AAYrB,MAAAmB;AAAA,EAAAhN,EAAA,EAAA,MAAAqT,MAAArT,UAAAyL,MAAAzL,EAAA,EAAA,MAAAuS,KAEkBvF,KAAAjJ,CAAAA,OAAA;AAElB,QADAwO,IAAUxO,EAAK,GACXA,CAAAA,GAAKuP,kBAET;AAAA,UAAI7H,IAAU;AACZ1H,QAAAA,GAAKC,eAAAA;AAAiB;AAAA,MAAA;AAGxBqP,MAAAA,GAAAA;AAAAA;AAAAA,EAAgB,GACjBrT,QAAAqT,IAAArT,QAAAyL,IAAAzL,QAAAuS,GAAAvS,QAAAgN,MAAAA,KAAAhN,EAAA,EAAA;AATD,QAAAuT,KAAoBvG;AASlB,MAAAE;AAAA,EAAAlN,EAAA,EAAA,MAAAyL,MAAAzL,UAAAuS,KAEsBrF,KAAAlB,CAAAA,OAAA;AAEtB,QADAuG,IAAUxO,EAAK,GACXA,CAAAA,GAAKuP,kBAET;AAAA,UAAI7H,IAAU;AACZ1H,QAAAA,GAAKC,eAAAA;AAAiB;AAAA,MAAA;AAIxBiP,MAAAA,GAAY9H,EAAqB;AAAA;AAAA,EAAC,GACnCnL,QAAAyL,IAAAzL,QAAAuS,GAAAvS,QAAAkN,MAAAA,KAAAlN,EAAA,EAAA;AAVD,QAAAwT,KAAwBtG;AAUtB,MAAAC;AAAA,EAAAnN,UAAAqR,KAEkBlE,IAAAiE,GAAmBC,CAAK,GAACrR,QAAAqR,GAAArR,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA;AAA7C,QAAAyT,KAAoBtG,GACpBuG,KAAwB7Q,OAAY,YAAZ,OAAA,OACxB0O,KAAuB9J,EAAI6D,gBAAiB9K;AAAU,MAAA8M;AAAA,EAAAtN,EAAA,EAAA,MAAAuT,MAAAvT,UAAAwT,MAAAxT,EAAA,EAAA,MAAAoT,MAC9B9F,KAAA8F,KAAA;AAAA,IAAAb,SAA0BiB;AAAAA,EAAAA,IAA1B;AAAA,IAAAjB,SAAyDgB;AAAAA,EAAAA,GAAavT,QAAAuT,IAAAvT,QAAAwT,IAAAxT,QAAAoT,IAAApT,QAAAsN,MAAAA,KAAAtN,EAAA,EAAA;AAA9F,QAAA2T,KAAwBrG;AAAuE,MAAAC;AAAA,EAAAvN,EAAA,EAAA,MAAAuR,MAAAvR,UAAA6C,MAC9D0K,IAAA+D,GAAqBzO,IAAS0O,EAAc,GAACvR,QAAAuR,IAAAvR,QAAA6C,IAAA7C,QAAAuN,KAAAA,IAAAvN,EAAA,EAAA;AAA9E,QAAA;AAAA,IAAAwR,WAAAA;AAAAA,IAAAC,WAAAA;AAAAA,EAAAA,IAAiClE,GAIzBC,KAAA4F,KAAgB,WAAsB,UAE3B3F,KAAAuC,KAAAD,IAAAvP,QACNkN,KAAAoE,IAAA,SAAqBA,CAAS,KAA9B;AAA0C,MAAAnE;AAAA,EAAA3N,EAAA,EAAA,MAAA6R,MAAA7R,EAAA,EAAA,MAAAwO,KAAAxO,EAAA,EAAA,MAAA2R,MAAA3R,UAAAiQ,MAclDtC,KAAA+D,GAAyB;AAAA,IAAAlD,YAAAA;AAAAA,IAAAmD,YAAAA;AAAAA,IAAAE,SAAAA;AAAAA,IAAA5B,MAAAA;AAAAA,EAAAA,CAAyC,GAACjQ,QAAA6R,IAAA7R,QAAAwO,GAAAxO,QAAA2R,IAAA3R,QAAAiQ,IAAAjQ,QAAA2N,MAAAA,KAAA3N,EAAA,EAAA;AAC9D,QAAA4N,KAAAnC,KAAc,gBAA2B;AAAmB,MAAAoC;AAAA,EAAA7N,EAAA,EAAA,MAAAwO,KAAAxO,EAAA,EAAA,MAAAyR,MAAAzR,UAAAyT,MAAAzT,EAAA,EAAA,MAAAiC,KAAAjC,EAAA,EAAA,MAAAwR,MAAAxR,EAAA,EAAA,MAAAwN,MAAAxN,EAAA,EAAA,MAAAyN,MAAAzN,WAAA0N,MAAA1N,EAAA,GAAA,MAAA2N,MAAA3N,EAAA,GAAA,MAAA4N,MAAA5N,WAAA0T,MApBrD7F,KAAA;AAAA,IAAA,GACZ5L;AAAAA,IAAS2R,MACNpG;AAAAA,IAAwD,iBAC7CgB;AAAAA,IAAU,iBACVf;AAAAA,IAAoCqE,WAC1CpE;AAAAA,IAA0CrH,OAC9C;AAAA,IAAMF,UACH;AAAA,IAAG0N,UACH;AAAA,IAAMnD,QACRc;AAAAA,IAASC,WAAAA;AAAAA,IAAAqC,SAER;AAAA,IAAeC,YACZ;AAAA,IAAiBC,gBACb;AAAA,IAAwBC,KACnC;AAAA,IAAapN,IACd;AAAA,IAAIqN,IACJR;AAAAA,IAAeS,IACfV;AAAAA,IAAWW,cACD;AAAA,IAAY,GACvBzG;AAAAA,IAAmEwD,QAC9DvD;AAAAA,IAA4DyG,UAC1D;AAAA,IAAiBC,WAChB;AAAA,IAAelU,OACnB;AAAA,IAASmU,gBACA;AAAA,EAAA,GACjBvU,QAAAwO,GAAAxO,QAAAyR,IAAAzR,QAAAyT,IAAAzT,QAAAiC,GAAAjC,QAAAwR,IAAAxR,QAAAwN,IAAAxN,QAAAyN,IAAAzN,SAAA0N,IAAA1N,SAAA2N,IAAA3N,SAAA4N,IAAA5N,SAAA0T,IAAA1T,SAAA6N,MAAAA,KAAA7N,EAAA,GAAA;AAzBD,QAAAwU,KAAiB3G;AAyBf,MAAAG;AAAA,EAAAhO,WAAAyL,MAAAzL,EAAA,GAAA,MAAA+P,KAAA/P,EAAA,GAAA,MAAAyH,KAAAzH,EAAA,GAAA,MAAAgQ,MAAAhQ,WAAAiQ,MAAAjQ,EAAA,GAAA,MAAA6C,MAGAmL,uBAAC4C,IAAA,EACOnJ,MAAAA,GACMsI,YAAAA,GACCC,aAAAA,IACDvE,YAAAA,IACNwE,MAAAA,IACGpN,SAAAA,IAAO,GAChB7C,SAAAyL,IAAAzL,SAAA+P,GAAA/P,SAAAyH,GAAAzH,SAAAgQ,IAAAhQ,SAAAiQ,IAAAjQ,SAAA6C,IAAA7C,SAAAgO,MAAAA,KAAAhO,EAAA,GAAA;AARJ,QAAAyU,KACEzG;AAQA,MAAAE;AAAA,EAAAlO,EAAA,GAAA,MAAAyH,EAAAsK,oBAE0B7D,KAAAwG,CAAAA,OAAA;AAC1B,QAAI,CAACjN,EAAIsK,oBAAqBtK,EAAIsK,iBAAiBpO,WAAY;AAAC,aAAS3B;AAEzE,UAAA2S,KAAuBlN,EAAIsK,iBAAiB1D,IAAKtC,EAO/C;AAAE,6BAGD6I,IAAA,EAA6BD,aAAgC,iBAAA,SAC3D3S,UAAAA,IACH;AAAA,EAAsB,GAEzBhC,EAAA,GAAA,IAAAyH,EAAAsK,kBAAA/R,SAAAkO,MAAAA,KAAAlO,EAAA,GAAA;AAjBD,QAAA6U,KAA4B3G;AAiB1B,MAAAC;AAAA,EAAAnO,EAAA,GAAA,MAAAyH,EAAA0H,aAAAnP,EAAA,GAAA,MAAAyH,EAAA2K,iBAAApS,WAAAgT,MAEmB7E,KAAA2G,CAAAA,OACf,CAACrN,EAAI0H,aAAc1H,EAAI0H,UAAUxL,WAAY,IAAU3B,KAGzD,gBAAAT,EAACwP,IAAA,EACQ,OAAAtJ,EAAI0H,WACL6D,UACK,WAAAvL,EAAI2K,eACDa,cAAAA,IACJ,UAAA8B,CAAAA,OAAA;AACR9B,IAAAA,GAAY,EAAK,GACjB8B,GAAQ1F,WAAAA;AAAAA,EAAa,GAGtBrN,UAAAA,IACH,GAEHhC,EAAA,GAAA,IAAAyH,EAAA0H,WAAAnP,EAAA,GAAA,IAAAyH,EAAA2K,eAAApS,SAAAgT,IAAAhT,SAAAmO,MAAAA,KAAAnO,EAAA,GAAA;AAjBD,QAAAgV,KAAqB7G;AAiBnB,MAAAC;AAAA,EAAApO,EAAA,GAAA,MAAAyH,EAAAiE,WAEsB0C,KAAA6G,CAAAA,OACjBxN,EAAIiE,UACF,gBAAAnK,EAACiD,IAAA,EAAiB,SAAAiD,EAAIiE,SAAW1J,UAAAA,IAAS,IADvBA,IAE3BhC,EAAA,GAAA,IAAAyH,EAAAiE,SAAA1L,SAAAoO,MAAAA,KAAApO,EAAA,GAAA;AAHD,QAAAkV,KAAwB9G;AAGtB,MAAAK;AAAA,EAAAzO,EAAA,GAAA,MAAAoT,MAAApT,EAAA,GAAA,MAAA6U,MAAA7U,EAAA,GAAA,MAAAgV,MAAAhV,WAAAkV,MAEWzG,KAAA0G,CAAAA,OACX/B,KAAe4B,GAAahT,EAAyD,IAA7C6S,GAAoBK,GAAgBlT,EAAQ,CAAC,GAAChC,SAAAoT,IAAApT,SAAA6U,IAAA7U,SAAAgV,IAAAhV,SAAAkV,IAAAlV,SAAAyO,MAAAA,KAAAzO,EAAA,GAAA;AADxF,QAAAoV,KAAa3G;AAGb,MAAIsE,IAAO;AAAA,QAAArE;AAAA,IAAA1O,WAAA2T,MAAA3T,EAAA,GAAA,MAAAyU,MAAAzU,EAAA,GAAA,MAAAkT,MAAAlT,EAAA,GAAA,MAAA4S,KAAA5S,WAAAkH,KAAAlH,EAAA,GAAA,MAAAwU,MAEP9F,iCAAiBxH,KAAAA,GAAG,GAAMsN,IAAQ,GAAMtB,OAAeS,IAAgCf,eAAAA,GACpF6B,UAAAA,GAAAA,CACH,GAAazU,SAAA2T,IAAA3T,SAAAyU,IAAAzU,SAAAkT,IAAAlT,SAAA4S,GAAA5S,SAAAkH,GAAAlH,SAAAwU,IAAAxU,SAAA0O,MAAAA,KAAA1O,EAAA,GAAA;AAAA,QAAA4O;AAAA,WAAA5O,EAAA,GAAA,MAAA0O,MAAA1O,WAAAoV,MAHRxG,KAAAwG,GACL1G,EAGF,GAAC1O,SAAA0O,IAAA1O,SAAAoV,IAAApV,SAAA4O,MAAAA,KAAA5O,EAAA,GAAA,GAJM4O;AAAAA,EAIN;AAEH,MAAInH,EAAIwK,QAAJ,CAAcjC,MAAd,CAA8BvE,MAA9B,CAA6C2H,IAAY;AAKlD,UAAA1E,KAAA8F;AAAkB,QAAA5F;AAAA,IAAA5O,EAAA,GAAA,MAAAyU,MAAAzU,EAAA,GAAA,MAAAkT,MAAAlT,EAAA,GAAA,MAAAuT,MAAAvT,EAAA,GAAA,MAAAyH,EAAAwK,QAAAjS,EAAA,GAAA,MAAA4S,KAAA5S,EAAA,GAAA,MAAAkH,KAAAlH,EAAA,GAAA,MAAA0O,MAHzBE,KAAA,gBAAArN,EAAA0C,GAAA,GAAA,EACOiD,KAAAA,GACC,MAAAO,EAAIwK,MAAK,GACVvD,IAAkB,GACnBwE,IACKK,SAAAA,IACMX,eAAAA,GAEd6B,UAAAA,IACH,GAAWzU,SAAAyU,IAAAzU,SAAAkT,IAAAlT,SAAAuT,IAAAvT,EAAA,GAAA,IAAAyH,EAAAwK,MAAAjS,SAAA4S,GAAA5S,SAAAkH,GAAAlH,SAAA0O,IAAA1O,SAAA4O,MAAAA,KAAA5O,EAAA,GAAA;AAAA,QAAA8O;AAAA,WAAA9O,EAAA,GAAA,MAAA4O,MAAA5O,WAAAoV,MAVNtG,KAAAsG,GACLxG,EAUF,GAAC5O,SAAA4O,IAAA5O,SAAAoV,IAAApV,SAAA8O,MAAAA,KAAA9O,EAAA,GAAA,GAXM8O;AAAAA,EAWN;AAQM,QAAAJ,KAAA8F;AAAkB,MAAA5F;AAAA,EAAA5O,EAAA,GAAA,MAAA2T,MAAA3T,EAAA,GAAA,MAAAyU,MAAAzU,EAAA,GAAA,MAAAkT,MAAAlT,WAAAyL,MAAAzL,EAAA,GAAA,MAAA4S,KAAA5S,EAAA,GAAA,MAAAkH,KAAAlH,EAAA,GAAA,MAAA0O,MAJzBE,uBAAA3K,GAAA,QAAA,EACOiD,KAAAA,GACA,MAAA,UACKuE,UAAAA,IAAU,GACfiD,IAAkB,GACnBwE,IAAS,GACTS,IACWf,eAAAA,GAEd6B,UAAAA,IACH,GAAgBzU,SAAA2T,IAAA3T,SAAAyU,IAAAzU,SAAAkT,IAAAlT,SAAAyL,IAAAzL,SAAA4S,GAAA5S,SAAAkH,GAAAlH,SAAA0O,IAAA1O,SAAA4O,MAAAA,KAAA5O,EAAA,GAAA;AAAA,MAAA8O;AAAA,SAAA9O,EAAA,GAAA,MAAA4O,MAAA5O,WAAAoV,MAXXtG,KAAAsG,GACLxG,EAWF,GAAC5O,SAAA4O,IAAA5O,SAAAoV,IAAApV,SAAA8O,MAAAA,KAAA9O,EAAA,GAAA,GAZM8O;AAYN,CACF;AA1O4D,SAAA3D,GAAAf,GAAA;AAAA,SA0GhC,CAACA;AAAO;AA1GwB,SAAA2B,GAAAsJ,GAAA;AAAA,SA4JI;AAAA,IAAAC,KACtDD,EAAKtK;AAAAA,IAAGrD,OACN2N,EAAK3N;AAAAA,IAAMvH,MACZ,OAAOkV,EAAKlV,QAAU,aAAa,gBAAAoB,EAACmD,IAAA,EAAS,IAAA2Q,EAAKlV,MAAe,SAAA,OAAA,CAAM,IAAMkV,EAAKlV;AAAAA,IAAK0P,YACjFwF,EAAKxF;AAAAA,IAAWpE,YAChB4J,EAAK7J;AAAAA,IAAS+G,SACjBA,MAAM8C,EAAKhG,WAAAA;AAAAA,EAAY;AACjC;AC3KE,MAAMuF,KAAsB7U,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACjC;AAAA,IAAAyB,SAAAA;AAAAA,IAAAM,UAAAA;AAAAA,IAAAuT,iBAAAlV;AAAAA,IAAAmV,mBAAAjV;AAAAA,IAAA4I,aAAA1I;AAAAA,IAAAkI,eAAAA;AAAAA,EAAAA,IAOI5I,GAJFwV,IAAAlV,MAAAG,SAAA,UAAAH,GACAmV,IAAAjV,MAAAC,SAAA,OAAAD;AAAwB,MAAAK;AAAA,EAAAZ,SAAAS,KACxBG,IAAAH,MAAAD,SAAA;AAAA,IAAAwQ,WAA2B;AAAA,EAAA,IAA3BvQ,GAA2CT,OAAAS,GAAAT,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAA3C,QAAAmJ,IAAAvI;AAIF,MAAIc,EAAOiC,WAAY,GAAC;AAAA,QAAA5C;AAAA,WAAAf,SAAAgC,KACfjB,4BAAGiB,UAAAA,EAAAA,CAAQ,GAAIhC,OAAAgC,GAAAhC,OAAAe,KAAAA,IAAAf,EAAA,CAAA,GAAfe;AAAAA,EAAe;AACvB,MAAAA;AAAA,EAAAf,SAAAgC,KAIGjB,sBAAAkM,EAAA,gBAAA,EAAqB,SAAA,IAASjL,UAAAA,GAAS,GAAsBhC,OAAAgC,GAAAhC,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,SAAA0B,KAItDT,IAAAS,EAAO2M,IAAKlD,EAYZ,GAACnL,OAAA0B,GAAA1B,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,CAAA,MAAAwV,KAAAxV,SAAAuV,KAAAvV,EAAA,EAAA,MAAAiB,KAfRC,sBAACmM,IAAA,EACC,UAAA,gBAAA9L,EAAA0L,EAAA,YAAA,EACE,UAAA,gBAAA1L,eAAoBgU,MAAAA,GAAqBC,IAAAA,GACtCvU,UAAAA,EAAAA,CAaH,GACF,GACF,GAASjB,OAAAwV,GAAAxV,OAAAuV,GAAAvV,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,SAAAnB,EAAA,EAAA,MAAA2I,KAAA3I,EAAA,EAAA,MAAAmJ,KAAAnJ,EAAA,EAAA,MAAAe,KAAAf,UAAAkB,KApBXC,gCAAwBgI,aAAAA,GAA4BR,eAAAA,GAClD5H,UAAAA;AAAAA,IAAAA;AAAAA,IACAG;AAAAA,EAAAA,GAmBF,GAAYlB,QAAA2I,GAAA3I,QAAAmJ,GAAAnJ,QAAAe,GAAAf,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GArBZmB;AAqBY;AApCmB,SAAAgK,GAAA+D,GAAA;AAAA,SAqBrB,gBAAA3N,YAAmC,OAAA2N,EAAMoG,KAAgB,UAAApG,EAAMzD,YAAa,aAC1E,UAAA,gBAAAlK,EAAC4K,IAAA,EACC,aACQ,SAAA,WACD,OAAA+C,EAAMxH,OACP,MAAAwH,EAAM/O,MACA,YAAA+O,EAAMW,YACR,UAAAX,EAAMzD,YACJ,YAAAyD,EAAMqD,QAAAA,MARNrD,EAAMoG,GAUtB;AAAY;ACjC1B,MAAMG,KAAY;AAAA,EAChB1B,YAAY;AAAA,EACZD,SAAS;AAAA,EACTG,KAAK;AAAA,EACLyB,MAAM;AAAA,EACNC,MAAM;AAAA,EACNtB,UAAU;AAAA,EACVhQ,SAAS;AAAA,EACTF,WAAW;AAAA,EACXyR,cAAc;AAAA,EACdC,YAAY;AAAA,EACZC,SAAS;AAAA,IAAEzR,SAAS;AAAA,IAAQF,WAAW;AAAA,EAAA;AAAA,EACvC4R,QAAQ;AAAA,IAAE1R,SAAS;AAAA,IAAQF,WAAW;AAAA,EAAA;AAAA,EACtC6R,eAAe;AAAA,IAAE3R,SAAS;AAAA,IAAQF,WAAW;AAAA,EAAA;AAC/C,GAEM8R,KAAc;AAAA,EAClB,GAAGR;AAAAA,EACHrV,OAAO;AAAA,EACP+Q,QAAQ;AAAA,EACRoD,gBAAgB;AAAA,EAChB3C,QAAQ;AAAA,IAAE2C,gBAAgB;AAAA,EAAA;AAC5B,GAYM2B,KAAoBA,CAACzO,MAAyBG,GAAQH,EAAK0O,OAAO1O,EAAK8K,UAEvE6D,KAAqBrW,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACzB;AAAA,IAAAwH,MAAAA;AAAAA,IAAA4O,WAAAA;AAAAA,IAAAC,eAAAC;AAAAA,EAAAA,IAA0DxW;AAE1D,MAAIsW,KAAA,CAAcH,GAAkBzO,CAAI,GAAC;AAAA,QAAApH;AAAA,WAAAL,EAAA,CAAA,MAAAyH,EAAApC,SAChChF,sBAAAmW,GAAA,aAAA,EAAA,GAAkCP,IAAcxO,YAAIpC,OAAO,GAA+BrF,EAAA,CAAA,IAAAyH,EAAApC,OAAArF,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAA1FK;AAAAA,EAA0F;AAGnG,MAAIoH,EAAI0O,OAAJI,GAAyB;AAAA,QAAAlW;AAAA,WAAAL,EAAA,CAAA,MAAAuW,KAAAvW,EAAA,CAAA,MAAAyH,EAAApC,SAAArF,EAAA,CAAA,MAAAyH,EAAA0O,OAEzB9V,IAAA,gBAAAkB,EAAAiV,GAAA,MAAA,EAAuB,SAAA,IAAO,GAAKf,IACjC,UAAA,gBAAAlU,EAACgV,KAAkB,IAAA9O,EAAI0O,KAAO1O,UAAAA,EAAIpC,OAAO,GAC3C,GAAwBrF,OAAAuW,GAAAvW,EAAA,CAAA,IAAAyH,EAAApC,OAAArF,EAAA,CAAA,IAAAyH,EAAA0O,KAAAnW,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFxBK;AAAAA,EAEwB;AAI5B,MAAIoH,EAAI0O,KAAI;AAAA,QAAA9V;AAAA,WAAAL,EAAA,CAAA,MAAAyH,EAAApC,SAAArF,EAAA,CAAA,MAAAyH,EAAA0O,OAER9V,iCAA6B,MAAAoH,EAAI0O,KAAI,GAAMV,IACxChO,UAAAA,EAAIpC,MAAAA,CACP,GAAwBrF,EAAA,CAAA,IAAAyH,EAAApC,OAAArF,EAAA,CAAA,IAAAyH,EAAA0O,KAAAnW,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFxBK;AAAAA,EAEwB;AAI5B,MAAIoH,EAAI8K,SAAQ;AAAA,QAAAlS;AAAA,WAAAL,EAAA,CAAA,MAAAyH,EAAA8K,WAAAvS,EAAA,EAAA,MAAAyH,EAAApC,SAEZhF,IAAA,gBAAAkB,EAAAiV,GAAA,MAAA,EAA0B,IAAA,UAAc,MAAA,UAAkB,SAAA/O,EAAI8K,SAAQ,GAAMkD,IACzEhO,YAAIpC,OACP,GAAwBrF,EAAA,CAAA,IAAAyH,EAAA8K,SAAAvS,EAAA,EAAA,IAAAyH,EAAApC,OAAArF,QAAAK,KAAAA,IAAAL,EAAA,EAAA,GAFxBK;AAAAA,EAEwB;AAE3B,MAAAA;AAAA,SAAAL,EAAA,EAAA,MAAAyH,EAAApC,SAGChF,IAAA,gBAAAkB,EAAAiV,GAAA,MAAA,EAA0B,IAAA,QAAM,GAAKP,IAClCxO,UAAAA,EAAIpC,MAAAA,CACP,GAAwBrF,EAAA,EAAA,IAAAyH,EAAApC,OAAArF,QAAAK,KAAAA,IAAAL,EAAA,EAAA,GAFxBK;AAEwB,GAItBoW,KAAwB1W,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC5B;AAAA,IAAAwH,MAAAA;AAAAA,EAAAA,IAAiB1H;AAAM,MAAAM;AAAA,EAAAL,SAAAD,KACPM,IAAA,gBAAAkB,EAAC6U,IAAA,EAAkB,GAAKrW,EAAAA,CAAK,GAAIC,OAAAD,GAAAC,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAjD,QAAAyU,IAAgBpU;AAEhB,MAAI,CAACoH,EAAIiP,oBAA2B/S;AAAA,WAAS8Q;AAAQ,MAAAlU;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAGiBf,IAAA;AAAA,IAAAyQ,WAAa;AAAA,EAAA,GAAgBhR,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,SAAAT,SAAAyU,KAAAzU,EAAA,CAAA,MAAAyH,EAAAiP,sBAAjGjW,sBAACmU,IAAA,EAA6B,SAAAnN,EAAIiP,oBAAkC,aAAAnW,GACjEkU,UAAAA,EAAAA,CACH,GAAsBzU,OAAAyU,GAAAzU,EAAA,CAAA,IAAAyH,EAAAiP,oBAAA1W,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAFtBS;AAEsB,GAIpBkW,KAAsB5W,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC1B;AAAA,IAAA2W,WAAAA;AAAAA,EAAAA,IAAsB7W;AAEtB,MAAI6W,MAAcpW,QAAS;AAAA,QAAAH;AAAA,WAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAClBjB,IAAA,gBAAAkB,EAAAiV,GAAA,WAAA,EAAwC,YAAA,GAAC,GAAIxW,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAA7CK;AAAAA,EAA6C;AACrD,MAAAA;AAAA,SAAAL,SAAA4W,KAEMvW,sCAAwC,eAAIuW,UAAAA,GAAU,GAA6B5W,OAAA4W,GAAA5W,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAAnFK;AAAmF,GAG/EwW,KAAa7P,GAAMC,WAA4C,SAAAlH,GAAAmH,GAAA;AAAA,QAAAlH,IAAAC,EAAA,EAAA;AAAA,MAAAsW,GAAAnP,GAAAhB,GAAAwQ,GAAAE;AAAA,EAAA9W,SAAAD,KAC1E;AAAA,IAAA6W,WAAAA;AAAAA,IAAAE,cAAAA;AAAAA,IAAA1P,OAAAA;AAAAA,IAAAkP,eAAAC;AAAAA,IAAA,GAAAnQ;AAAAA,EAAAA,IAAkFrG,GAAMC,OAAAD,GAAAC,OAAAuW,GAAAvW,OAAAoH,GAAApH,OAAAoG,GAAApG,OAAA4W,GAAA5W,OAAA8W,MAAAP,IAAAvW,EAAA,CAAA,GAAAoH,IAAApH,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA,GAAA4W,IAAA5W,EAAA,CAAA,GAAA8W,IAAA9W,EAAA,CAAA;AAAA,MAAAK;AAAA,MAAAL,EAAA,CAAA,MAAAuW,KAAAvW,SAAAoH,KAAApH,EAAA,CAAA,MAAA4W,GAAA;AAAA,QAAArW;AAAA,IAAAP,EAAA,EAAA,MAAAuW,KAAAvW,EAAA,EAAA,MAAAoH,EAAAzD,UAAA3D,EAAA,EAAA,MAAA4W,KAKvErW,IAAAA,CAAAkH,GAAAsP,MAAA;AACT,YAAAV,IAAkBU,MAAU3P,EAAKzD,SAAU;AAAE,aAG3C,gBAAA/B,EAAAoF,GAAA,UAAA,EACE,UAAA;AAAA,QAAA,gBAAAzF,EAAAiV,GAAA,MAAA,EAA4B,MAAA,KAAgB,YAAAH,IAAA,IAAA,GAA4B,UAAA,UACtE,UAAA,gBAAA9U,EAACkV,IAAA,EAA4BhP,MAAAA,GAAiB4O,WAAAA,GAA0BE,eAAAA,GAAa,GACvF;AAAA,QACCF,IAAA,OAAmB,gBAAA9U,EAACoV,IAAA,EAA+BC,WAAAA,EAAAA,CAAS;AAAA,MAAA,EAAA,GAJ1CG,CAKrB;AAAA,IAAiB,GAEpB/W,QAAAuW,GAAAvW,EAAA,EAAA,IAAAoH,EAAAzD,QAAA3D,QAAA4W,GAAA5W,QAAAO,KAAAA,IAAAP,EAAA,EAAA,GAXAK,IAAA+G,EAAKiH,IAAK9N,CAWV,GAACP,OAAAuW,GAAAvW,OAAAoH,GAAApH,OAAA4W,GAAA5W,OAAAK;AAAAA,EAAA;AAAAA,IAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,EAAA,EAAA,MAAA8W,KAAA9W,UAAAK,KAZJE,IAAA,gBAAAgB,EAAAiV,GAAA,MAAA,EAA4BM,KAAAA,GAAuB,UAAA,UAAc,MAAA,KAAS,MAAA,QAAgB,UAAA,UACvFzW,UAAAA,GAYH,GAAwBL,QAAA8W,GAAA9W,QAAAK,GAAAL,QAAAO,KAAAA,IAAAP,EAAA,EAAA;AAAA,MAAAS;AAAA,SAAAT,EAAA,EAAA,MAAAkH,KAAAlH,UAAAoG,KAAApG,EAAA,EAAA,MAAAO,KAd1BE,sBAAA+V,GAAA,MAAA,EAA4BtP,KAAAA,GAAG,GAAMd,GACnC7F,UAAAA,GAcF,GAAwBP,QAAAkH,GAAAlH,QAAAoG,GAAApG,QAAAO,GAAAP,QAAAS,KAAAA,IAAAT,EAAA,EAAA,GAfxBS;AAewB,CAE3B,GCjIYuW,KAAe/P,GAAiD,SAAAlH,GAAAmH,GAAA;AAAA,QAAAlH,IAAAC,EAAA,EAAA;AAAA,MAAA+B,GAAAiV,GAAA7Q,GAAA/F,GAAAqL;AAAA,EAAA1L,SAAAD,KAC3E;AAAA,IAAAiC,UAAAA;AAAAA,IAAAiV,gBAAAA;AAAAA,IAAAlN,QAAA1J;AAAAA,IAAAqL,SAAAA;AAAAA,IAAA,GAAAtF;AAAAA,EAAAA,IAAuErG,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAiX,GAAAjX,OAAAoG,GAAApG,OAAAK,GAAAL,OAAA0L,MAAA1J,IAAAhC,EAAA,CAAA,GAAAiX,IAAAjX,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,GAAA0L,IAAA1L,EAAA,CAAA;AAA3C,QAAA+J,IAAA1J,MAAAG,SAAA,KAAAH,GAOnBE,IAAAwJ,IAAA,SAAA;AAAuB,MAAAtJ;AAAA,EAAAT,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAE1Bb,IAAA;AAAA,IAAAyD,aACO;AAAA,IAAeC,WACjB;AAAA,EAAA,GACZnE,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AACqB,QAAAY,IAAAmJ,IAAA,SAAA;AAAuB,MAAAhJ;AAAA,EAAAf,SAAAY,KAApCG,IAAA;AAAA,IAAAoD,WAAavD;AAAAA,EAAAA,GAAyBZ,OAAAY,GAAAZ,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAAgC,KAAAhC,EAAA,EAAA,MAAAkH,KAAAlH,EAAA,EAAA,MAAAoG,KAAApG,EAAA,EAAA,MAAAO,KAAAP,UAAAe,KAXjDE,sBAACwD,IAAA,EACMyC,KAAAA,GACG,SAAA,QACH,MAAA,MACO,aAAA,OACD,WAAA3G,GACA,YAAA,8DACH,QAAAE,GAIC,SAAAM,GAAsC,GAC3CqF,GAEHpE,UAAAA,GACH,GAAahC,OAAAgC,GAAAhC,QAAAkH,GAAAlH,QAAAoG,GAAApG,QAAAO,GAAAP,QAAAe,GAAAf,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAhBf,QAAAkX,IACEjW;AAgBA,MAAAC;AAAA,EAAAlB,EAAA,EAAA,MAAAkX,KAAAlX,UAAA0L,KAIGxK,IAAAwK,IAAU,gBAAAnK,EAACiD,IAAA,EAAiBkH,SAAAA,GAAUwL,aAAO,IAA7CA,GAAgElX,QAAAkX,GAAAlX,QAAA0L,GAAA1L,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,SAAAnB,EAAA,EAAA,MAAAiX,KAAAjX,UAAAkB,KADnEC,IAAA,gBAAAI,EAAA0C,GAAA,KAAA,EAAqB,UAAA,SAAe,QAAA,KAAU,OAAA,KAAW,QAAA,UAAQ,GAAKgT,GACnE/V,UAAAA,GACH,GAAalB,QAAAiX,GAAAjX,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GAFbmB;AAEa,CAEhB,GChBYgW,KAAclQ,GAA6C,SAAAlH,GAAAmH,GAAA;AAAA,QAAAlH,IAAAC,EAAA,EAAA,GACtE;AAAA,IAAA8J,QAAA1J;AAAAA,IAAAgF,OAAAA;AAAAA,IAAA+R,MAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAnR,OAAA9F;AAAAA,IAAAmQ,QAAAjQ;AAAAA,IAAAwW,gBAAAA;AAAAA,IAAAQ,QAAAA;AAAAA,IAAA,cAAA3L;AAAAA,IAAA9J,UAAAA;AAAAA,EAAAA,IAcIjC,GAbFgK,IAAA1J,MAAAG,SAAA,KAAAH,GAOAgG,IAAA9F,MAAAC,SAAA,UAAAD,GACAmQ,IAAAjQ,MAAAD,SAAA,UAAAC;AAOF,MAAI,CAACsJ;AAAM,WAAS;AAQF,QAAAnJ,IAAAkL,KAAAzG;AAAkB,MAAAtE;AAAA,EAAAf,SAAAoX,KAgB1BrW,sBAACe,IAAA,EAAW,KAAA,KAAS,MAAA,KAClBsV,UAAAA,GACH,GAASpX,OAAAoX,GAAApX,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACTL,sBAACsD,IAAA,EAAM,GAAGvE,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,CAAA,MAAAuX,KAAAvX,SAAAwX,KAEPtW,IAAAqW,sBACE/S,IAAA,EAAiBgT,SAAAA,GAChB,UAAA,gBAAAjW,EAACkD,IAAA,EAAgB,MAAA,MAAa,SAAA,SAAoB+S,cAAAA,GAAsBD,YACtE,UAAA,gBAAAhW,EAACmW,MAA4B,MAAA,GAAA,IAC/B,EAAA,CACF,IALD,MAMO1X,OAAAuX,GAAAvX,OAAAwX,GAAAxX,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAA,MAAAmB;AAAA,EAAAnB,EAAA,CAAA,MAAAsX,KAAAtX,SAAAqX,KACPlW,IAAAkW,sBACE7S,IAAA,EAAiB8S,SAAAA,GAChB,UAAA,gBAAA/V,EAACkD,IAAA,EAAgB,MAAA,MAAa,SAAA,SAAoB6S,cAAAA,GAAqBD,YACrE,UAAA,gBAAA9V,EAACoW,MAAY,MAAA,GAAA,IACf,EAAA,CACF,IALD,MAMO3X,OAAAsX,GAAAtX,OAAAqX,GAAArX,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,CAAA,MAAAkB,KAAAlB,UAAAmB,KAdV+D,IAAA,gBAAAtD,EAACE,IAAA,EAAW,KAAA,KACTZ,UAAAA;AAAAA,IAAAA;AAAAA,IAOAC;AAAAA,EAAAA,GAOH,GAASnB,OAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,EAAA3K,EAAA,EAAA,MAAAe,KAAAf,UAAAkF,KApBXyF,sBAACjF,IAAA,EAAe,SAAA,QAAW,KAAA,MAAiB,eAC1C3E,UAAAA;AAAAA,IAAAA;AAAAA,IAGAE;AAAAA,IACAiE;AAAAA,EAAAA,GAgBF,GAASlF,QAAAe,GAAAf,QAAAkF,GAAAlF,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,EAAApL,UAAAgC,KACToJ,IAAA,gBAAA7J,EAACb,GAAA,EAAS,MAAA,KAAU,MAAA,GAAW,SAAA,QAAqB,eAAA,UAAa,KAAA,MAC9DsB,UAAAA,GACH,GAAMhC,QAAAgC,GAAAhC,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,EAAA,EAAA,MAAAoL,KAAApL,UAAA2K,KAzBRkB,sBAACpF,IAAA,EAAe,WAAA,UAAW,GAAA,QACzBkE,UAAAA;AAAAA,IAAAA;AAAAA,IAsBAS;AAAAA,EAAAA,GAGF,GAAOpL,QAAAoL,GAAApL,QAAA2K,GAAA3K,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,SAAAhN,EAAA,EAAA,MAAAiX,KAAAjX,EAAA,EAAA,MAAA0Q,KAAA1Q,EAAA,EAAA,MAAAkH,KAAAlH,UAAA6L,KAAA7L,EAAA,EAAA,MAAAY,KAAAZ,EAAA,EAAA,MAAAyX,KAAAzX,EAAA,EAAA,MAAAqG,KA7CX2G,sBAACK,IAAA,EACC,UAAA,gBAAA9L,EAAA0C,GAAA,SAAA,EACOiD,KAAAA,GACA,MAAA,UACQuQ,kBACD,cAAA7W,GACH,UAAA,SACF,QAAA,KACD,OAAA,KACHyF,GAAAA,GACE,MAAA,sBACFqK,GAAAA,GACE,MAAA,sBACQ,cAAA,OACH,WAAA,OACP,IAAA,MACI,QAAA,YAAU,GACbuG,GAEJpL,aA2BF,GACF,GAAS7L,QAAAiX,GAAAjX,QAAA0Q,GAAA1Q,QAAAkH,GAAAlH,QAAA6L,GAAA7L,QAAAY,GAAAZ,QAAAyX,GAAAzX,QAAAqG,GAAArG,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA,GA/CTgN;AA+CS,CAEZ,GC/EY4K,KAA0B,CACrC;AAAA,EAAE7M,IAAI;AAAA,EAAgB8M,MAAM;AAAQ,GACpC;AAAA,EAAE9M,IAAI;AAAA,EAAe8M,MAAM;AAAO,CAAC,GAGxBC,KAAoBA,CAC/BpV,GACAqV,IAAqDH,OACxB,OAAOlV,KAAU,YAAYqV,EAAiBC,KAAMC,CAAAA,MAAUA,EAAMlN,OAAOrI,CAAK,GAElGwV,KAAyBA,CACpCD,GACAF,IAAqDH,OAClDG,EAAiBlN,KAAMsN,CAAAA,MAAeA,EAAWpN,OAAOkN,CAAK,GAAGJ,QAAQ,SAEhEO,KAA8BA,CAACH,MAA2B,SAASA,CAAK,IAExEI,KAA+BA,CAC1CJ,GACAJ,IAA4BK,GAAuBD,CAAK,MACrD,CAACJ,GAAMO,GAA4BH,CAAK,CAAC,GAExCK,KAA8B,iCAE9BC,KAAoCA,CAACC,MAAsB,YAAYA,EAAUC,WAAW,KAAK,GAAG,CAAC,IAErGC,KAAoBA,CAACC,GAAiBV,MAAkC;AAC5E,MAAKA,GAAOW;AAEZ,eAAWJ,KAAaK,OAAOC,KAAKb,EAAMW,MAAM;AAC9CD,MAAAA,EAAGI,MAAMC,eAAeT,GAAkCC,CAAS,CAAC;AAExE,GAEMS,KAA2BA,CAACN,MAAoB;AACpD,QAAMO,IAAaP,EAAGQ,aAAab,EAA2B,GAAGc,MAAM;AAAA,CAAI,EAAE5R,OAAOI,OAAO,KAAK,CAAA;AAEhG,aAAW4Q,KAAaU;AACtBP,IAAAA,EAAGI,MAAMC,eAAeT,GAAkCC,CAAS,CAAC;AAGtEG,EAAAA,EAAGU,aAAaf,IAA6B,EAAE;AACjD,GAEMgB,KAAmBA,CAACX,GAAiBV,MAAiC;AAC1E,MAAI,CAACA,EAAMW,QAAQ;AACjBD,IAAAA,EAAGU,aAAaf,IAA6B,EAAE;AAC/C;AAAA,EACF;AAEA,aAAW,CAACE,GAAW9V,CAAK,KAAKmW,OAAOU,QAAQtB,EAAMW,MAAM;AAC1DD,IAAAA,EAAGI,MAAMS,YAAYjB,GAAkCC,CAAS,GAAG9V,CAAK;AAE1EiW,EAAAA,EAAGU,aAAaf,IAA6BO,OAAOC,KAAKb,EAAMW,MAAM,EAAE/Q,KAAK;AAAA,CAAI,CAAC;AACnF,GAEa4R,KAAuBA,CAClCxB,GACAF,IAAqDH,OAClD;AACH,MAAI,OAAO8B,WAAa,IAAa;AAErC,QAAMC,IAAOD,SAASE,iBAChBC,IAAOH,SAASG,MAChB1B,IAAaJ,EAAiBlN,KAAMiP,OAAWA,EAAO/O,OAAOkN,CAAK,KAAK,CAA2B,GAClGJ,IAAOK,GAAuBD,GAAOF,CAAgB;AAE3D,aAAWY,KAAM,CAACgB,GAAME,CAAI,GAAG;AAC7B,QAAI,CAAClB,EAAI;AACT,UAAMoB,IAAgBpB,EAAGQ,aAAa,YAAY,GAC5Ca,IAAqBjC,EAAiBlN,KAAMiP,CAAAA,MAAWA,EAAO/O,OAAOgP,CAAa;AAExFpB,IAAAA,EAAGsB,UAAUC,OAAO,SAAS,MAAM,GAC/BH,KACFpB,EAAGsB,UAAUC,OAAO9B,GAA4B2B,CAAa,CAAC,GAEhEd,GAAyBN,CAAE,GAC3BD,GAAkBC,GAAIqB,CAAkB,GACxCV,GAAiBX,GAAIR,CAAU,GAC/BQ,EAAGsB,UAAUE,IAAI,GAAG9B,GAA6BJ,GAAOJ,CAAI,CAAC,GAC7Dc,EAAGU,aAAa,cAAcpB,CAAK,GACnCU,EAAGU,aAAa,mBAAmBxB,CAAI,GACvCc,EAAGI,MAAMqB,cAAcvC;AAAAA,EACzB;AACF,GC1FMwC,KAAc;AAAA,EAClBC,SAASA,MAAM;AAAA,EACfC,YAAYA,MAAM;AAAA,EAAC;AAAA,EACnBC,SAASA,MAAM;AAAA,EAAC;AAClB,GAEMC,KAAmBA,MAAM;AAC7B,MAAI;AACF,WAAOC,WAAWC;AAAAA,EACpB,QAAQ;AACN;AAAA,EACF;AACF,GAEaC,KAAuBA,MAAsB;AACxD,QAAMC,IAAUJ,GAAAA;AAChB,SAAKI,IAEE;AAAA,IACLP,QAAQhF,GAAK;AACX,UAAI;AACF,eAAOuF,EAAQP,QAAQhF,CAAG;AAAA,MAC5B,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACAiF,WAAWjF,GAAK;AACd,UAAI;AACFuF,QAAAA,EAAQN,WAAWjF,CAAG;AAAA,MACxB,QAAQ;AAAA,MAAC;AAAA,IACX;AAAA,IACAkF,QAAQlF,GAAK5S,GAAO;AAClB,UAAI;AACFmY,QAAAA,EAAQL,QAAQlF,GAAK5S,CAAK;AAAA,MAC5B,QAAQ;AAAA,MAAC;AAAA,IACX;AAAA,EAAA,IAnBmB2X;AAqBvB,GC9BMS,KAAc,oBAEdC,KAAyBC,GAAkD,IAAI,GAe/EC,KAA4BA,CAAClD,GAAoDF,MACrFE,EAAiBlN,KAAMsN,OAAeA,EAAWN,SAASA,CAAI,GAAG9M,MACjEgN,EAAiB,CAAC,GAAGhN,MACrB6M,GAAwB,CAAC,EAAE7M,IAEhBmQ,KAA4BA,CACvCnD,IAAqDH,OAClD;AACH,MAAI,OAAOuD,SAAW,IAAa,QAAOF,GAA0BlD,GAAkB,OAAO;AAE7F,QAAMqD,IAASR,KAAuBN,QAAQQ,EAAW;AACzD,MAAIhD,GAAkBsD,GAAQrD,CAAgB,EAAG,QAAOqD;AAExD,QAAMC,IACJ,OAAOF,OAAOG,cAAe,cAAcH,OAAOG,WAAW,8BAA8B,EAAEC;AAE/F,SAAON,GAA0BlD,GAAkBsD,IAAc,SAAS,OAAO;AACnF,GAEaG,KAA0Bzb,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACrC;AAAA,IAAA+B,UAAAA;AAAAA,IAAA+V,kBAAA1X;AAAAA,EAAAA,IAAiEN,GAA/CgY,IAAA1X,MAAAG,SAAAoX,KAAAvX;AAA0C,MAAAE;AAAA,EAAAP,SAAAD,EAAA0b,qBAAAzb,SAAA+X,KAClCxX,IAAAR,EAAK0b,qBAAsBP,GAA0BnD,CAAgB,GAAC/X,EAAA,CAAA,IAAAD,EAAA0b,mBAAAzb,OAAA+X,GAAA/X,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAhG,QAAAyb,IAA0Blb,GAC1B,CAAAmb,GAAAC,CAAA,IAA8CrY,GAA0BmY,CAAiB;AAAE,MAAAhb,GAAAG;AAAA,EAAAZ,EAAA,CAAA,MAAA0b,KAAA1b,SAAA+X,KAEjFtX,IAAAA,MAAA;AACR,QAAI,CAACqX,GAAkB4D,GAAiB3D,CAAgB,GAAC;AACvD4D,MAAAA,EACEV,GAA0BlD,GAAkBG,GAAuBwD,GAAiB3D,CAAgB,CAAC,CACvG;AAAC;AAAA,IAAA;AAIH0B,IAAAA,GAAqBiC,GAAiB3D,CAAgB,GAClD,OAAOoD,SAAW,OAAaP,KAAsBJ,QAASM,IAAaY,CAAe;AAAA,EAAE,GAC/F9a,IAAA,CAAC8a,GAAiB3D,CAAgB,GAAC/X,OAAA0b,GAAA1b,OAAA+X,GAAA/X,OAAAS,GAAAT,OAAAY,MAAAH,IAAAT,EAAA,CAAA,GAAAY,IAAAZ,EAAA,CAAA,IAVtCmK,GAAU1J,GAUPG,CAAmC;AAAC,MAAAG;AAAA,EAAAf,SAAA+X,KAEThX,IAAAA,MAAA;AAC5B4a,IAAAA,EAAmBC,CAAAA,MAAA;AACjB,YAAAC,IAAiB3D,GAAuB0D,GAAM7D,CAAgB,MAAM,SAAnD,UAAA;AAA6E,aAEvFkD,GAA0BlD,GAAkB8D,CAAQ;AAAA,IAAC,CAC7D;AAAA,EAAC,GACH7b,OAAA+X,GAAA/X,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAND,QAAA8b,IAA8B/a;AAM5B,MAAAE;AAAA,EAAAjB,EAAA,CAAA,MAAA0b,KAAA1b,UAAA+X,KAAA/X,EAAA,EAAA,MAAA8b,KAG+B7a,IAAA;AAAA,IAAAya,iBAAAA;AAAAA,IAAA3D,kBAAAA;AAAAA,IAAA4D,oBAAAA;AAAAA,IAAAG,uBAAAA;AAAAA,EAAAA,GAAgF9b,OAAA0b,GAAA1b,QAAA+X,GAAA/X,QAAA8b,GAAA9b,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAAkB;AAAA,SAAAlB,EAAA,EAAA,MAAAgC,KAAAhC,UAAAiB,KAA/GC,IAAA,gBAAAK,EAACwZ,IAAA,EAA8B,OAAA9Z,GAC5Be,UAAAA,GACH,GAAyBhC,QAAAgC,GAAAhC,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA,GAFzBkB;AAEyB,GAIhB6a,KAAqBA,MAAA;AAChC,QAAAtM,IAAgBuM,GAAWjB,EAAsB;AAEjD,MAAI,CAACtL;AACH,UAAM,IAAIwM,MAAM,kEAAkE;AACnF,SAEMxM;AAAO,GCnFHyM,KAAc;AAAA,EACzBC,MAAM;AAAA,EACNC,SAAS;AAAA,EACTC,OAAO,CAAA;AAAA,EACPC,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,kCAAkC;AAAA,IAClC,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,IAC/B,gCAAgC;AAAA,IAChC,sCAAsC;AAAA,EAAA;AAE1C,GAEMC,KAAgBA,CAAC7Z,MACrB,OAAOA,KAAU,YAAYA,MAAU,QAAQ,UAAUA,KAAS,YAAYA,GAS1E8Z,KAAoB,YAEpBC,KAAiBA,MAAA;AAAA,QAAAzc,IAAAC,EAAA,CAAA,GACrB;AAAA,IAAAyb,iBAAAA;AAAAA,IAAA3D,kBAAAA;AAAAA,EAAAA,IAA8CgE,GAAAA;AAAqB,MAAA1b;AAAA,MAAAL,EAAA,CAAA,MAAA0b,KAAA1b,SAAA+X,GAAA;AAAA,QAAAxX;AAAA,IAAAP,SAAA0b,KAC1Bnb,IAAA0X,CAAAA,MAAWA,EAAKlN,OAAQ2Q,GAAe1b,OAAA0b,GAAA1b,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAhF,UAAAmY,IAAmBJ,EAAgBlN,KAAMtK,CAAuC;AACzEF,IAAAA,IAAAkc,GAAcpE,GAAUuE,WAAoD,IAAnCvE,EAAUuE,cAAnDR,IAA6Elc,OAAA0b,GAAA1b,OAAA+X,GAAA/X,OAAAK;AAAAA,EAAA;AAAAA,IAAAA,IAAAL,EAAA,CAAA;AAAA,SAA7EK;AAA6E,GAGhFsc,KAAsBC,CAAAA,MAAA;AAAA,QAAA5c,IAAAC,EAAA,CAAA,GAC1B4c,IAAkB/S,GAAyB,IAAI;AAAE,MAAAzJ,GAAAE;AAAA,EAAAP,SAAA4c,KAEvCvc,IAAAA,MAAA;AACR,UAAAyc,IAAeD,EAASzS;AACxB,IAAK0S,MAELA,EAAMC,OAAOC,YAAaR,IAAmBI,CAAW,GACxDE,EAAMC,OAAOE,SAAUT,EAAiB;AAAA,EAAC,GACxCjc,IAAA,CAACqc,CAAW,GAAC5c,OAAA4c,GAAA5c,OAAAK,GAAAL,OAAAO,MAAAF,IAAAL,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA,IANhBmK,GAAU9J,GAMPE,CAAa;AAAC,MAAAE;AAAA,SAAAT,SAAA4c,KAEVnc,IAAAyc,CAAAA,MAAA;AACLL,IAAAA,EAASzS,UAAW0S,GACpBA,EAAMC,OAAOC,YAAaR,IAAmBI,CAAW,GACxDE,EAAMC,OAAOE,SAAUT,EAAiB;AAAA,EAAC,GAC1Cxc,OAAA4c,GAAA5c,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAJMS;AAIN,GAaU0c,KAAapd,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACxB;AAAA,IAAAmd,aAAAA;AAAAA,IAAAC,MAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,UAAAnd;AAAAA,IAAA6C,UAAAA;AAAAA,IAAAua,eAAAA;AAAAA,EAAAA,IAA6G1d,GAArDyd,IAAAnd,MAAAG,SAAA,eAAAH,GACxDuc,IAAoBH,GAAAA,GACpBiB,IAAyBf,GAAoBC,CAAW;AAAE,MAAArc;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAI/Cf,IAAA;AAAA,IAAAod,SACE;AAAA,EAAA,GACV3d,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAES,QAAAS,KAAC8c,GACE3c,IAAA0c,IAAA,OAAA;AAA8B,MAAAvc;AAAA,EAAAf,SAAAyd,KACvC1c,IAAA0c,IAAA;AAAA,IAAAG,WAEa;AAAA,MAAAC,UACC;AAAA,MAAiBC,YACf;AAAA,MAAiBC,YACjB;AAAA,MAAKC,yBACQ;AAAA,IAAA;AAAA,IAC1BC,sBACqB;AAAA,IAAKC,6BACE;AAAA,IAACC,oBACV;AAAA,EAAA,IAVtB,CAAA,GAYEne,OAAAyd,GAAAzd,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAAS,KAAAT,SAAAY,KAAAZ,EAAA,CAAA,MAAAe,KApBQE,IAAA;AAAA,IAAAmd,SACL;AAAA,IAACC,SACD9d;AAAAA,IAER+d,UACS;AAAA,IAAE1O,UACFnP;AAAAA,IAAW8d,aACR3d;AAAAA,IAA8B,GACvCG;AAAAA,EAAAA,GAaLf,OAAAS,GAAAT,OAAAY,GAAAZ,OAAAe,GAAAf,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AArBD,QAAAwe,IAAgBvd;AAqBL,MAAAC;AAAA,EAAAlB,SAAAkD,KAWGhC,IAAAwB,CAAAA,MAAA;AACRQ,IAAAA,IAAWR,KAAA,EAAW;AAAA,EAAC,GACxB1C,OAAAkD,GAAAlD,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAA,MAAAmB,GAAA+D;AAAA,EAAAlF,SAAA0d,KACYvc,IAAA2b,CAAAA,MAAA;AACXY,IAAAA,EAAiBZ,CAAM;AAAA,EAAC,GAEjB5X,IAAA,OAAA6X,GAAAG,MAAA;AACPQ,IAAAA,EAAiBZ,CAAM,GAGvBA,EAAM2B,UAAUC,WAAWC,mBAAmBC,mBAAoB;AAAA,MAAArd,KAC3Dub,EAAM2B,UAAUC,WAAWG,QAAQ7X;AAAAA,IAAAA,CACzC,GAGD+V,EAAM+B,WAAYhC,EAAMiC,OAAOC,UAAWlC,EAAMmC,QAAQC,MAAO,YAAA;AAC7D,YAAMnC,EAAMoC,UAAW,8BAAmC,GAACC,IAAAA;AAAAA,IAAE,CAC9D,GAGD,MAAMrC,EAAMoC,UAAW,8BAAmC,GAACC,IAAAA;AAAAA,EAAE,GAC9Dpf,OAAA0d,GAAA1d,QAAAmB,GAAAnB,QAAAkF,MAAA/D,IAAAnB,EAAA,EAAA,GAAAkF,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,SAAA3K,EAAA,EAAA,MAAAqd,KAAArd,EAAA,EAAA,MAAAod,KAAApd,EAAA,EAAA,MAAAwd,KAAAxd,UAAAwe,KAAAxe,EAAA,EAAA,MAAAkB,KAAAlB,EAAA,EAAA,MAAAmB,KAAAnB,EAAA,EAAA,MAAAkF,KA7BHyF,sBAAC0U,IAAA,EACO,OAAA,QACC,QAAA,QACG7B,UAAAA,GACIJ,cAAAA,GACPC,OAAAA,GACAb,OAAAA,IACEgC,SAAAA,GACC,UAAAtd,GAGG,aAAAC,GAGJ,SAAA+D,GAeR,GACDlF,QAAAqd,GAAArd,QAAAod,GAAApd,QAAAwd,GAAAxd,QAAAwe,GAAAxe,QAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA,GA9BF2K;AA8BE,GAYO2U,KAAiBvf,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAAsf,UAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAlC,iBAAAA;AAAAA,IAAAE,UAAAnd;AAAAA,IAAAod,eAAAA;AAAAA,EAAAA,IAAwF1d,GAA3Cyd,IAAAnd,MAAAG,SAAA,eAAAH,GAC7Cuc,IAAoBH,GAAAA,GACpBiB,IAAyBf,GAAoBC,CAAW;AAAE,MAAArc;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAI/Cf,IAAA;AAAA,IAAAod,SACE;AAAA,EAAA,GACV3d,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAMY,QAAAS,IAAA6c,IAAA,OAAA;AAA8B,MAAA1c;AAAA,EAAAZ,SAAAyd,KACvC7c,IAAA6c,IAAA;AAAA,IAAAG,WAEa;AAAA,MAAAC,UACC;AAAA,MAAiBC,YACf;AAAA,MAAiBC,YACjB;AAAA,MAAKC,yBACQ;AAAA,IAAA;AAAA,IAC1BC,sBACqB;AAAA,IAAKC,6BACE;AAAA,IAACC,oBACV;AAAA,EAAA,IAVtB,CAAA,GAYEne,OAAAyd,GAAAzd,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,EAAA,CAAA,MAAAS,KAAAT,SAAAY,KAvBQG,IAAA;AAAA,IAAAqd,SACL;AAAA,IAACC,SACD9d;AAAAA,IAER+d,UACS;AAAA,IAAE1O,UACF;AAAA,IAAI6P,kBACI;AAAA,IAAKC,kBACL;AAAA,IAAIC,kCACY;AAAA,IAAIpB,aACzB9d;AAAAA,IAA8B,GACvCG;AAAAA,EAAAA,GAaLZ,OAAAS,GAAAT,OAAAY,GAAAZ,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAxBD,QAAAwe,IAAgBzd;AAwBL,MAAAE,GAAAC;AAAA,EAAAlB,SAAA0d,KAWMzc,IAAA6b,CAAAA,MAAA;AACXY,IAAAA,EAAiBZ,CAAM;AAAA,EAAC,GAEjB5b,IAAAA,CAAA0e,GAAA1C,MAAA;AACPQ,IAAAA,EAAiBZ,CAAM,GAEvBA,EAAM2B,UAAUC,WAAWC,mBAAmBC,mBAAoB;AAAA,MAAArd,KAC3Dub,EAAM2B,UAAUC,WAAWG,QAAQ7X;AAAAA,IAAAA,CACzC;AAAA,EAAC,GACHhH,OAAA0d,GAAA1d,OAAAiB,GAAAjB,OAAAkB,MAAAD,IAAAjB,EAAA,CAAA,GAAAkB,IAAAlB,EAAA,CAAA;AAAA,MAAAmB;AAAA,SAAAnB,SAAAwd,KAAAxd,EAAA,EAAA,MAAAwf,KAAAxf,EAAA,EAAA,MAAAwe,KAAAxe,EAAA,EAAA,MAAAuf,KAAAvf,UAAAiB,KAAAjB,EAAA,EAAA,MAAAkB,KAjBHC,IAAA,gBAAAI,EAACse,IAAA,EACO,OAAA,QACC,QAAA,QACGrC,UAAAA,GACA+B,UAAAA,GACAC,UAAAA,GACHhD,OAAAA,IACEgC,SAAAA,GACI,aAAAvd,GAGJ,SAAAC,GAMR,GACDlB,OAAAwd,GAAAxd,QAAAwf,GAAAxf,QAAAwe,GAAAxe,QAAAuf,GAAAvf,QAAAiB,GAAAjB,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GAlBFmB;AAkBE,GCvLO2e,KAAoC,uOAEpCC,KAAqBhgB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,EAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAGzBjB,IAAA;AAAA,IAAA2f,gBACa;AAAA,IAAaC,iBACZH;AAAAA,IAAiChM,SACzC;AAAA,IAAMzN,OACR;AAAA,EAAA,GACRrG,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,SAAAD,KAPHQ,IAAA,gBAAAgB,EAACb,GAAA,EAAG,GACEX,GACC,KAAAM,GAKJ,GACDL,OAAAD,GAAAC,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GARFO;AAQE,GAGS2f,KAAQngB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,SAAAD,KACnBM,sBAACK,GAAA,EAAM,GAAA,KACL,UAAA,gBAAAa,EAACI,KAAW,OAAA,YAAsB,YAAA,UAAmB,WAAA,MAAgB,YAAA,UAAQ,GAAK5B,GAAK,GACzF,GAAMC,OAAAD,GAAAC,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFNK;AAEM,GCaK8f,KAAe,CAC1B,QACA,OACA,UACA,UACA,SACA,QACA,QACA,QACA,UACA,MAAM,GAGKC,KAAc,CACzB;AAAA,EAAE1d,OAAO;AAAA,EAAMgF,OAAO;AAAA,EAAUvH,MAAMkgB;AAAO,GAC7C;AAAA,EAAE3d,OAAO;AAAA,EAAOgF,OAAO;AAAA,EAAOvH,MAAMmgB;AAAI,GACxC;AAAA,EAAE5d,OAAO;AAAA,EAAYgF,OAAO;AAAA,EAAYvH,MAAMogB;AAAS,GACvD;AAAA,EAAE7d,OAAO;AAAA,EAAagF,OAAO;AAAA,EAAavH,MAAMqgB;AAAS,GACzD;AAAA,EAAE9d,OAAO;AAAA,EAAUgF,OAAO;AAAA,EAAUvH,MAAMsgB;AAAO,GACjD;AAAA,EAAE/d,OAAO;AAAA,EAASgF,OAAO;AAAA,EAASvH,MAAMugB;AAAM,GAC9C;AAAA,EAAEhe,OAAO;AAAA,EAAWgF,OAAO;AAAA,EAAWvH,MAAMwgB;AAAQ,GACpD;AAAA,EAAEje,OAAO;AAAA,EAASgF,OAAO;AAAA,EAASvH,MAAMygB;AAAM,GAC9C;AAAA,EAAEle,OAAO;AAAA,EAAUgF,OAAO;AAAA,EAAUvH,MAAM0gB;AAAO,GACjD;AAAA,EAAEne,OAAO;AAAA,EAAkBgF,OAAO;AAAA,EAAkBvH,MAAM2gB;AAAc,GACxE;AAAA,EAAEpe,OAAO;AAAA,EAAQgF,OAAO;AAAA,EAAQvH,MAAM4gB;AAAK,GAC3C;AAAA,EAAEre,OAAO;AAAA,EAAQgF,OAAO;AAAA,EAAQvH,MAAM6gB;AAAK,GAC3C;AAAA,EAAEte,OAAO;AAAA,EAASgF,OAAO;AAAA,EAASvH,MAAM8gB;AAAM,GAC9C;AAAA,EAAEve,OAAO;AAAA,EAAagF,OAAO;AAAA,EAAavH,MAAM+gB;AAAU,GAC1D;AAAA,EAAExe,OAAO;AAAA,EAAUgF,OAAO;AAAA,EAAUvH,MAAMghB;AAAO,GACjD;AAAA,EAAEze,OAAO;AAAA,EAAOgF,OAAO;AAAA,EAAOvH,MAAMihB;AAAI,GACxC;AAAA,EAAE1e,OAAO;AAAA,EAASgF,OAAO;AAAA,EAASvH,MAAMkhB;AAAM,GAC9C;AAAA,EAAE3e,OAAO;AAAA,EAAgBgF,OAAO;AAAA,EAAgBvH,MAAMmhB;AAAY,GAClE;AAAA,EAAE5e,OAAO;AAAA,EAAOgF,OAAO;AAAA,EAAOvH,MAAMohB;AAAI,GACxC;AAAA,EAAE7e,OAAO;AAAA,EAAQgF,OAAO;AAAA,EAAQvH,MAAMqhB;AAAK,GAC3C;AAAA,EAAE9e,OAAO;AAAA,EAA2BgF,OAAO;AAAA,EAA2BvH,MAAMshB;AAAsB,GAClG;AAAA,EAAE/e,OAAO;AAAA,EAAwBgF,OAAO;AAAA,EAAwBvH,MAAMuhB;AAAmB,GACzF;AAAA,EAAEhf,OAAO;AAAA,EAAgBgF,OAAO;AAAA,EAAgBvH,MAAMwhB;AAAY,CAAC,GAGxDC,KAAmBA,CAC9B9gB,GACA+gB,IAAoDzB,OAEtCyB,EAAYhX,KAAM1K,OAASA,EAAKuC,WAAW5B,KAAQ,KAAK,GACxDX,QAAQkgB,IAeXyB,KAAkB/hB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC7B;AAAA,IAAAG,OAAAA;AAAAA,IAAA2hB,cAAA1hB;AAAAA,IAAAF,MAAAA;AAAAA,IAAA0hB,aAAAthB;AAAAA,IAAAyhB,eAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAzW,UAAAA;AAAAA,IAAA0W,WAAAzhB;AAAAA,IAAA,cAAAG;AAAAA,EAAAA,IAUIb,GARFgiB,IAAA1hB,MAAAG,SAAA2f,KAAA9f,GAEAwhB,IAAAthB,MAAAC,SAAA4f,KAAA7f,GAIA2hB,IAAAzhB,MAAAD,SAAA,KAAAC,GACcqL,IAAAlL,MAAAJ,SAAA,wBAAAI;AAAiC,MAAAG;AAAA,EAAAf,EAAA,CAAA,MAAAG,KAAAH,SAAA6hB,KAAA7hB,EAAA,CAAA,MAAAkiB,KAE3BnhB,IAAAmhB,IAAYN,GAAiBzhB,GAAM0hB,CAAoB,IAAvDxB,IAAwDrgB,OAAAG,GAAAH,OAAA6hB,GAAA7hB,OAAAkiB,GAAAliB,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAA9E,QAAAmiB,IAAsBphB,GACtBsL,IAAqBlM,KAAA,MASJc,IAAA,GAAGb,CAAK,QACTc,IAAAghB,IAAA1hB,SAAA,GAA2BJ,CAAK;AAAM,MAAAe;AAAA,EAAAnB,EAAA,CAAA,MAAAmiB,KAAAniB,SAAAiB,KAAAjB,EAAA,CAAA,MAAAkB,KAJ9CC,IAAA,gBAAAI,EAACmD,MACKyd,IAAAA,GACI,SAAA,QACD,OAAAlhB,GACD,MAAAC,EAAAA,CAAsC,GAC5ClB,OAAAmiB,GAAAniB,OAAAiB,GAAAjB,OAAAkB,GAAAlB,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,CAAA,MAAA8L,KAAA9L,SAAAwL,KAAAxL,EAAA,EAAA,MAAAmB,KAPN+D,sBAAAkd,GAAA,SAAA,EAAiB,SAAA,IACf,UAAA,gBAAA7gB,EAACkD,IAAA,EAAgB,MAAA,OAAc,SAAA,SAAkB+G,UAAAA,GAAsBM,cAAAA,GACrE3K,aAMF,GACF,GAAkBnB,OAAA8L,GAAA9L,OAAAwL,GAAAxL,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAEI,QAAA2K,IAAAuX,IAAA,UAAA;AAA6B,MAAA9W;AAAA,EAAApL,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAC/C8J,sBAACzJ,GAAA,EAAe,WAAA,WAAa,IAAA,MAAK,UAAA,SAElC,GAAO3B,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAEY,QAAA6L,IAAAqW,IAAA,oBAAA,kBAEblV,IAAAkV,IAAA,OAAA;AAAsB,MAAAhV;AAAA,MAAAlN,EAAA,EAAA,MAAAI,KAAAJ,UAAA+hB,KAAA/hB,EAAA,EAAA,MAAAgiB,GAAA;AAAA,QAAA7U;AAAA,IAAAnN,EAAA,EAAA,MAAAI,KAAAJ,UAAAgiB,KAER7U,IAAAkV,CAAAA,MAChB,gBAAA9gB,EAAC+gB,IAAA,EACC,UAAA,gBAAA/gB,EAACkD,MACM,MAAA,OACI,SAAA4d,MAAgBjiB,IAAhB,UAAA,SACKiiB,cAAAA,GACL,SAAA,MAAML,EAAcK,CAAW,GAC5BA,cAAAA,GAEZ,UAAA,gBAAA9gB,EAACmD,IAAA,EAAS2b,IAAAA,IAAgB,SAAA,QAAa,SAAGgC,CAAW,QAAe,OAAA,GAAGA,CAAW,QAAM,EAAA,CAC1F,KATaA,CAUf,GACDriB,QAAAI,GAAAJ,QAAAgiB,GAAAhiB,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA,GAZAkN,IAAA6U,EAAY1T,IAAKlB,CAYjB,GAACnN,QAAAI,GAAAJ,QAAA+hB,GAAA/hB,QAAAgiB,GAAAhiB,QAAAkN;AAAAA,EAAA;AAAAA,IAAAA,IAAAlN,EAAA,EAAA;AAAA,MAAAmN;AAAA,EAAAnN,EAAA,EAAA,MAAA6L,KAAA7L,UAAAgN,KAAAhN,EAAA,EAAA,MAAAkN,KAjBJC,IAAA,gBAAA5L,EAACghB,MACkB,iBAAA1W,GACb,KAAA,OACA,IAAAmB,GAEHE,UAAAA,EAAAA,CAaH,GAAOlN,QAAA6L,GAAA7L,QAAAgN,GAAAhN,QAAAkN,GAAAlN,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA;AAAA,MAAAsN;AAAA,EAAAtN,EAAA,EAAA,MAAA6hB,KAAA7hB,EAAA,EAAA,MAAAiiB,KAAAjiB,EAAA,EAAA,MAAAqM,KAAArM,UAAAkiB,KACN5U,IAAA4U,IAAA,gBAAAtgB,EAAAC,IAAA,EAEG,UAAA;AAAA,IAAA,gBAAAN,EAACI,GAAA,EAAe,WAAA,WAAa,IAAA,MAAK,UAAA,QAElC;AAAA,sBACC4gB,IAAA,EAAqB,iBAAA,kBAAqB,KAAA,OACxCV,YAAWxT,IAAKgH,CAAAA,wBACdiN,IAAA,EACC,UAAA,gBAAA/gB,EAACkD,MACM,MAAA,OACI,SAAA4Q,EAAK3S,UAAW2J,IAAhB,UAAA,SACA,eAAM4V,IAAe5M,EAAK3S,KAAM,GAC7B,cAAA2S,EAAK3N,OAEjB,4BAAChD,IAAA,EAAS,IAAA2Q,EAAKlV,MAAe,SAAA,WAChC,EAAA,GARakV,EAAK3S,SAAL,MASf,CACD,EAAA,CACH;AAAA,EAAA,EAAA,CAAO,IAlBV,MAoBO1C,QAAA6hB,GAAA7hB,QAAAiiB,GAAAjiB,QAAAqM,GAAArM,QAAAkiB,GAAAliB,QAAAsN,KAAAA,IAAAtN,EAAA,EAAA;AAAA,MAAAuN;AAAA,EAAAvN,EAAA,EAAA,MAAAmN,KAAAnN,UAAAsN,KAAAtN,EAAA,EAAA,MAAA2K,KA5CZ4C,IAAA,gBAAAhM,EAAA6gB,GAAA,YAAA,EACE,UAAA,gBAAAxgB,EAAAwgB,GAAA,SAAA,EAAoBzX,GAAiC,GAAA,MAAQ,IAAA,MAC3DS,UAAAA;AAAAA,IAAAA;AAAAA,IAGA+B;AAAAA,IAmBCG;AAAAA,EAAAA,EAAAA,CAqBH,EAAA,CACF,GAAqBtN,QAAAmN,GAAAnN,QAAAsN,GAAAtN,QAAA2K,GAAA3K,QAAAuN,KAAAA,IAAAvN,EAAA,EAAA;AAAA,MAAAwN;AAAA,SAAAxN,EAAA,EAAA,MAAAuN,KAAAvN,UAAAkF,KAzDvBsI,iCACEtI,UAAAA;AAAAA,IAAAA;AAAAA,IAUAqI;AAAAA,EAAAA,GA+CF,GAAevN,QAAAuN,GAAAvN,QAAAkF,GAAAlF,QAAAwN,KAAAA,IAAAxN,EAAA,EAAA,GA1DfwN;AA0De,GC1JNgV,KAA8BA,CAACC,MACtCA,MAAW,cAAoBC,KAC/BD,MAAW,WAAiBE,KAC5BF,MAAW,cAAoBG,KAC/BH,MAAW,iBAAuBI,KAClCJ,MAAW,WAAiBK,KACzBC,IAGIC,KAA+BA,CAACP,MACvCA,MAAW,cAAoB,eAC/BA,MAAW,WAAiB,aAC5BA,MAAW,eACXA,MAAW,iBAAuB,eAClCA,MAAW,WAAiB,YACzB,YAWIQ,KAAmBljB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC9B;AAAA,IAAAwiB,QAAAA;AAAAA,IAAAS,SAAA7iB;AAAAA,IAAAyL,WAAAvL;AAAAA,IAAA4Q,QAAAA;AAAAA,IAAAoB,SAAAA;AAAAA,EAAAA,IAAoFxS,GAApEmjB,IAAA7iB,MAAAG,SAAA,SAAAH,GAAkByL,IAAAvL,MAAAC,SAAA,mBAAAD;AAA4B,MAAAE;AAAA,EAAAT,SAAAyiB,KAItDhiB,IAAA+hB,GAA4BC,CAAM,GAACziB,OAAAyiB,GAAAziB,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,SAAAyiB,KAEhC7hB,IAAAoiB,GAA6BP,CAAM,GAACziB,OAAAyiB,GAAAziB,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,SAAAf,SAAA8L,KAAA9L,EAAA,CAAA,MAAAkjB,KAAAljB,EAAA,CAAA,MAAAmR,KAAAnR,EAAA,CAAA,MAAAuS,KAAAvS,SAAAS,KAAAT,EAAA,CAAA,MAAAY,KAH7CG,IAAA,gBAAAQ,EAACmD,IAAA,EACK,IAAAjE,GACKyiB,SAAAA,GACF,OAAAtiB,GACKkL,cAAAA,GACJqF,QAAAA,GACCoB,SAAAA,EAAAA,CAAO,GAChBvS,OAAA8L,GAAA9L,OAAAkjB,GAAAljB,OAAAmR,GAAAnR,OAAAuS,GAAAvS,OAAAS,GAAAT,OAAAY,GAAAZ,QAAAe,KAAAA,IAAAf,EAAA,EAAA,GAPFe;AAOE,GCrCAoiB,KAAuD;AAAA,EAC3DC,OAAO;AACT,GAEMC,KAAwB,oBAAIC,IAAI,CACpC,QACA,OACA,UACA,UACA,SACA,QACA,QACA,QACA,UACA,MAAM,CACP,GAkBKC,KAAuBA,CAACC,MACxBA,MAAkB,mBACbC,KAGFC,IAGHC,KAA4BA,CAACvjB,MAAkB;AACnD,MAAIA,EAAMwjB,WAAW,GAAG,KAAKxjB,EAAMwjB,WAAW,KAAK,KAAKxjB,EAAMwjB,WAAW,KAAK,KAAKxjB,EAAMwjB,WAAW,MAAM;AACxG,WAAOxjB;AAGT,QAAMyjB,IAAgBV,GAA6B/iB,CAAK,KAAKA;AAC7D,SAAIijB,GAAsBS,IAAID,CAAa,IAClC,uBAAuBA,CAAa,UAGtCA;AACT,GAEME,KAA4BA,CAACC,MAC5BA,IAEDA,EAAc1Y,cACT,GAAG0Y,EAAcljB,IAAI,KAAKkjB,EAAc1Y,WAAW,KAGrD0Y,EAAcljB,OANM,MASvBmjB,KAAkBA,CAAClgB,GAAkCwO,MAAsC;AAC/FxO,EAAAA,EAAMkI,gBAAAA,GACNsG,IAAAA;AACF,GAEM2R,KAAmBA,CAACngB,GAAoCwO,MAAsC;AAClGxO,EAAAA,EAAMkI,gBAAAA,GACNsG,IAAAA;AACF,GAEM4R,KAA0BpkB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAI9B;AAAA,IAAAmkB,eAAAA;AAAAA,IAAAC,yBAAAA;AAAAA,EAAAA,IAAmDtkB;AAEnD,MAAI,CAACqkB;AAAa,WACT;AAGT,QAAAE,IAAuBD,IAAA,wBAAA;AAA0E,MAAAhkB;AAAA,EAAAL,SAAAqkB,KASlFhkB,IAAAgkB,IAAAtgB,CAAAA,MAAqCkgB,GAAgBlgB,GAAOsgB,CAAuB,IAAnF7jB,QAAgGR,OAAAqkB,GAAArkB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,EAAA,CAAA,MAAAokB,KAAApkB,SAAAskB,KAAAtkB,EAAA,CAAA,MAAAK,KAL3GE,IAAA,gBAAAgB,EAAC0hB,IAAA,EACSmB,QAAAA,GACA,SAAA,QACGE,WAAAA,GACJ,QAAA,WACE,SAAAjkB,EAAAA,CAAgG,GACzGL,OAAAokB,GAAApkB,OAAAskB,GAAAtkB,OAAAK,GAAAL,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,SAAAT,EAAA,CAAA,MAAAskB,KAAAtkB,SAAAO,KAPJE,IAAA,gBAAAc,EAACiD,IAAA,EAAiB8f,SAAAA,GAChB/jB,UAAAA,GAOF,GAAUP,OAAAskB,GAAAtkB,OAAAO,GAAAP,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GARVS;AAQU,GAIR8jB,KAAyBxkB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAM7B;AAAA,IAAAujB,eAAAA;AAAAA,IAAAgB,cAAAA;AAAAA,IAAA9c,OAAAA;AAAAA,IAAA+c,WAAAA;AAAAA,EAAAA,IAA0D1kB;AAAM,MAAAM;AAAA,EAAAL,SAAAwjB,KACtCnjB,IAAAkjB,GAAqBC,CAAa,GAACxjB,OAAAwjB,GAAAxjB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA7D,QAAA0kB,IAA0BrkB,GAC1BskB,IAAqBjd,KAAA+c,GAQHlkB,IAAAijB,MAAkB,aAAlB,aAAA;AAA4D,MAAA/iB;AAAA,EAAAT,EAAA,CAAA,MAAA0kB,KAAA1kB,SAAAO,KAJ1EE,IAAA,gBAAAc,EAACmD,MACKggB,IAAAA,GACI,SAAA,QACI,YAAA,GACA,cAAAnkB,EAAAA,CAA4D,GACxEP,OAAA0kB,GAAA1kB,OAAAO,GAAAP,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,SAAAwkB,KACD5jB,IAAA4jB,IAAe,gBAAAjjB,EAACqjB,IAAA,EAAa,MAAA,MAAW,OAAA,YAAU,IAAlD,MAA4D5kB,OAAAwkB,GAAAxkB,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,SAAA2kB,KAC5D5jB,IAAA4jB,IACC,gBAAApjB,EAACI,GAAA,EAAQ,IAAA,QAAiB,WAAA,oBAAyB,OAAA,YAAgB,MAAA,KAAS,MAAA,SAAQ,UAAA,IACjFgjB,aACH,IAHD,MAIO3kB,OAAA2kB,GAAA3kB,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,SAAAjB,EAAA,CAAA,MAAAS,KAAAT,UAAAY,KAAAZ,EAAA,EAAA,MAAAe,KAZVE,IAAA,gBAAAW,EAACE,IAAA,EAAU,IAAA,QAAW,KAAA,KAAe,YAAA,UAAe,OAAA,YAAgB,MAAA,KAClErB,UAAAA;AAAAA,IAAAA;AAAAA,IAMCG;AAAAA,IACAG;AAAAA,EAAAA,GAKH,GAASf,OAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA,GAbTiB;AAaS,GAIP4jB,KAAkC9kB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACtC;AAAA,IAAA+jB,eAAAA;AAAAA,EAAAA,IAA0BjkB;AAE1B,MAAI,CAACikB;AAAa,WACT;AACR,MAAA3jB;AAAA,EAAAL,SAAAgkB,KAGmB3jB,IAAA0jB,GAA0BC,CAAa,GAAChkB,OAAAgkB,GAAAhkB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,EAAA,CAAA,MAAAgkB,EAAA5jB,SAKrCG,IAAAojB,GAA0BK,EAAa5jB,KAAM,GAACJ,EAAA,CAAA,IAAAgkB,EAAA5jB,OAAAJ,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAEnD,QAAAS,IAAA,kBAAkBujB,EAAaljB,IAAK;AAAE,MAAAF;AAAA,EAAAZ,EAAA,CAAA,MAAAO,KAAAP,SAAAS,KANpDG,IAAA,gBAAAW,EAACb,GAAA,EACI,IAAA,QACK,SAAA,OACK,cAAA,QACI,iBAAAH,GACL,eACA,cAAAE,GACA,eAAA,4BAA0B,GACtCT,OAAAO,GAAAP,OAAAS,GAAAT,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,SAAAf,EAAA,CAAA,MAAAK,KAAAL,SAAAY,KATJG,IAAA,gBAAAQ,EAACiD,IAAA,EAAiB,SAAAnE,GAChBO,UAAAA,GASF,GAAUZ,OAAAK,GAAAL,OAAAY,GAAAZ,OAAAe,KAAAA,IAAAf,EAAA,CAAA,GAVVe;AAUU,GAIR+jB,KAAsB/kB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC1B;AAAA,IAAA8kB,eAAAA;AAAAA,IAAAC,eAAAA;AAAAA,EAAAA,IAAyCjlB;AAEzC,MAAI,OAAOglB,KAAkB,YAAY,OAAOC,KAAkB;AAAQ,WACjE;AACR,MAAA3kB;AAAA,SAAAL,EAAA,CAAA,MAAA+kB,KAAA/kB,SAAAglB,KAGC3kB,IAAA,gBAAAkB,EAAC0jB,IAAA,EAAsBF,cAA0BC,WAAAA,GAAuB,SAAA,SAAa,MAAA,SAAkBxkB,UAAAA,OAAAA,CAAS,GAAIR,OAAA+kB,GAAA/kB,OAAAglB,GAAAhlB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAApHK;AAAoH,GAIlH6kB,KAA2BnlB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC/B;AAAA,IAAAklB,uBAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,EAAAA,IAAmDrlB;AAEnD,MAAI,CAAColB;AAAqB,WACjB;AAQG,QAAA9kB,IAAA+kB,IAAA,YAAA;AAAuC,MAAA7kB;AAAA,EAAAP,SAAAolB,KAEtC7kB,IAAA6kB,IAAArhB,CAAAA,MAA6BkgB,GAAgBlgB,GAAOqhB,CAAe,IAAnE5kB,QAAgFR,OAAAolB,GAAAplB,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,SAAAT,EAAA,CAAA,MAAAK,KAAAL,SAAAO,KAN3FE,IAAA,gBAAAc,EAACmD,IAAA,EACK4H,IAAAA,IACI,SAAA,QACF,OAAA,YACE,QAAAjM,GACG,cAAA,sBACF,SAAAE,GAAgF,GACzFP,OAAAK,GAAAL,OAAAO,GAAAP,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAPFS;AAOE,GAIO4kB,KAAiBtlB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAAujB,eAAAA;AAAAA,IAAAgB,cAAAnkB;AAAAA,IAAAqH,OAAAA;AAAAA,IAAA+c,WAAAA;AAAAA,IAAAT,eAAAA;AAAAA,IAAAI,eAAAA;AAAAA,IAAAkB,6BAAA/kB;AAAAA,IAAAwkB,eAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAG,uBAAA1kB;AAAAA,IAAA8R,SAAAA;AAAAA,IAAA6S,iBAAAA;AAAAA,IAAAf,yBAAAA;AAAAA,EAAAA,IAcItkB,GAZFykB,IAAAnkB,MAAAG,SAAA,KAAAH,GAKAilB,IAAA/kB,MAAAC,SAAA,KAAAD,GAGA4kB,IAAA1kB,MAAAD,SAAA,KAAAC;AAA6B,MAAAG;AAAA,EAAAZ,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAkBnBV,IAAA;AAAA,IAAA2kB,iBAAmB;AAAA,EAAA,GAAYvlB,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,SAAAuS,KAC9BxR,IAAAwR,IAAAxO,CAAAA,MAAqBmgB,GAAiBngB,GAAOwO,CAAO,IAApD/R,QAAiER,OAAAuS,GAAAvS,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAAqkB,KAAArkB,SAAAokB,KAAApkB,EAAA,CAAA,MAAAslB,KAGzErkB,IAAAqkB,IACC,gBAAA/jB,EAAC4iB,IAAA,EAAuCC,eAAAA,GAAwCC,yBAAAA,GAAuB,IADxG,MAEOrkB,OAAAqkB,GAAArkB,OAAAokB,GAAApkB,OAAAslB,GAAAtlB,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,CAAA,MAAAwkB,KAAAxkB,EAAA,CAAA,MAAA0H,KAAA1H,EAAA,CAAA,MAAAykB,KAAAzkB,UAAAwjB,KACRtiB,IAAA,gBAAAK,EAACgjB,IAAA,EACgBf,eAAAA,GACDgB,cAAAA,GACP9c,OAAAA,GACI+c,WAAAA,GAAS,GACpBzkB,OAAAwkB,GAAAxkB,OAAA0H,GAAA1H,OAAAykB,GAAAzkB,QAAAwjB,GAAAxjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,EAAAnB,UAAAgkB,KACF7iB,sBAAC0jB,MAA+Cb,eAAAA,EAAAA,CAAa,GAAIhkB,QAAAgkB,GAAAhkB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,EAAA,MAAA+kB,KAAA/kB,UAAAglB,KACjE9f,IAAA,gBAAA3D,EAACujB,IAAA,EAAmCC,eAAAA,GAA8BC,eAAAA,EAAAA,CAAa,GAAIhlB,QAAA+kB,GAAA/kB,QAAAglB,GAAAhlB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,EAAA3K,EAAA,EAAA,MAAAmlB,KAAAnlB,UAAAolB,KACnFza,IAAA,gBAAApJ,EAAC2jB,IAAA,EAAgDC,uBAAAA,GAAwCC,iBAAAA,EAAAA,CAAe,GAAIplB,QAAAmlB,GAAAnlB,QAAAolB,GAAAplB,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,SAAApL,UAAAe,KAAAf,EAAA,EAAA,MAAAiB,KAAAjB,EAAA,EAAA,MAAAkB,KAAAlB,EAAA,EAAA,MAAAmB,KAAAnB,UAAAkF,KAAAlF,EAAA,EAAA,MAAA2K,KA1B9GS,sBAACtJ,IAAA,EACI,IAAA,QACK,SAAA,eACJ,KAAA,OACO,YAAA,UACN,MAAA,KACF,IAAA,OACA,IAAA,OACU,cAAA,MACN,QAAA,WACI,YAAA,qCACH,QAAAlB,GACC,SAAAG,GACG,eAAA,mBAEXE,UAAAA;AAAAA,IAAAA;AAAAA,IAGDC;AAAAA,IAMAC;AAAAA,IACA+D;AAAAA,IACAyF;AAAAA,EAAAA,GACF,GAAS3K,QAAAe,GAAAf,QAAAiB,GAAAjB,QAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAA2K,GAAA3K,QAAAoL,KAAAA,IAAApL,EAAA,EAAA,GA3BToL;AA2BS,GCxOAoa,KAAc,QACdC,KAAkB,UA8BlBC,KAAsBA,CAAClH,MAAuD,CAACmH,MAAMC,QAAQpH,CAAO,GAgCpGqH,KAAqBA,CAChCC,MACmC,CAACH,MAAMC,QAAQE,CAAU,GA6BjDC,KAAuD;AAAA,EAClEC,UAAU;AAAA,EACVC,gBAAgBT;AAAAA,EAChBU,aAAaV;AAAAA,EACbW,UAAU;AAAA,IAAEC,aAAaX;AAAAA,IAAiBY,WAAW;AAAA,EAAA;AAAA,EACrDC,mBAAmB,CAAA;AACrB,GAWaC,KAAgBA,CAACT,GAAmC/a,MAA2B;AAC1F,MAAI,GAACA,KAAMA,MAAOya,MAAeza,MAAO0a;AACxC,WAAOK,EAAWjb,KAAM2b,CAAAA,MAAcA,EAAUzb,OAAOA,CAAE;AAC3D,GCvGa0b,KAAiBA,CAACC,MACzBA,EAAKC,SAAS,UAAUD,EAAKC,SAAS,eAAqB,CAAA,IACxDjB,GAAoBgB,EAAKlI,OAAO,IAAIkI,EAAKlI,QAAQoI,gBAAgBF,EAAKlI,SAGlEqI,KAAcA,CAACnkB,MAC1BA,EACG+V,WAAW,KAAK,GAAG,EACnBW,MAAM,GAAG,EACT5R,OAAQsf,OAAUA,EAAMnjB,SAAS,CAAC,EAClC0K,IAAKyY,CAAAA,MAAUA,EAAM,CAAC,EAAGC,gBAAgBD,EAAME,MAAM,CAAC,CAAC,EACvDnf,KAAK,GAAG,GAMAof,KAAoBA,CAACC,GAAsBC,MAAoC;AAC1F,QAAMC,IAAMF,EAAIpB,WAAWqB,EAAWpc,EAAE;AACxC,SAAIoc,EAAWT,KAAKC,SAAS,eACvBhB,MAAMC,QAAQwB,CAAG,IAAUA,EAAI5f,OAAO,CAAC6N,MAA2B,OAAOA,KAAU,QAAQ,IACxF,CAAA,IAEF+R;AACT,GAEaC,KAA2BA,CAACH,GAAsBC,MAA8C;AAC3G,QAAMzkB,IAAQukB,GAAkBC,GAAKC,CAAU;AAC/C,SAAIA,EAAWT,KAAKC,SAAS,eAAqBjkB,IAC9CA,KAAU,OAAoC,CAAA,IAC9C,OAAOA,KAAU,WAAiBA,MAAU,KAAK,CAAA,IAAK,CAACA,CAAK,IAC5D,OAAOA,KAAU,WAAiB,CAAC4kB,OAAO5kB,CAAK,CAAC,IAC7C,CAAA;AACT,GAEa6kB,KAAiBA,CAACb,GAAqBhkB,MAA0C;AAC5F,MAAIgkB,EAAAA,EAAKC,SAAS,UAAUD,EAAKC,SAAS;AAC1C,WAAOF,GAAeC,CAAI,EAAE7b,KAAMiP,CAAAA,MAAWA,EAAOpX,UAAUA,CAAK;AACrE,GAEa8kB,KAAkBA,CAACd,GAAqBhkB,MACpC6kB,GAAeb,GAAMhkB,CAAK,GAC1BgF,SAASmf,GAAYnkB,CAAK,GAGrC+kB,KAAkBA,CAAC/kB,MAAmB;AAC1C,MAAI,OAAOA,KAAU,YAAYA,MAAU,GAAI,QAAO;AACtD,QAAMglB,IAAO,IAAIC,KAAKjlB,CAAK;AAC3B,SAAIklB,OAAOC,MAAMH,EAAKI,QAAAA,CAAS,IAAU,OAClCJ,EAAKK,mBAAAA;AACd,GAEMC,KAAoBA,CAACtlB,MACrB,OAAOA,KAAU,YAAYklB,OAAOK,SAASvlB,CAAK,IAAU4kB,OAAO5kB,CAAK,IACxE,OAAOA,KAAU,YAAYA,MAAU,MAAM,CAACklB,OAAOC,MAAMD,OAAOllB,CAAK,CAAC,IAAUA,IAC/E,MAGHwlB,KAAoBA,CAACxlB,MACrBA,KAAU,OAAoC,OAC9C,OAAOA,KAAU,WAAiBA,MAAU,KAAK,OAAOA,IACrD4kB,OAAO5kB,CAAK,GAGfylB,KAAkBA,CAACzlB,MAAmBwlB,GAAkBxlB,CAAK,GAE7D0lB,KAAqBA,CAACC,GAAkB3B,MACxC2B,EAAO1kB,WAAW,IAAU,OAC5B0kB,EAAO1kB,UAAU,IAAU0kB,EAAOha,IAAK3L,CAAAA,MAAU8kB,GAAgBd,GAAMhkB,CAAK,CAAC,EAAEmF,KAAK,IAAI,IACrF,GAAG2f,GAAgBd,GAAM2B,EAAO,CAAC,CAAE,CAAC,KAAKb,GAAgBd,GAAM2B,EAAO,CAAC,CAAE,CAAC,KAAKA,EAAO1kB,SAAS,CAAC,IAU5F2kB,KAAgCA,CAACC,MAA2B,QAEnEC,KAAkBA,CAACrB,GAAiCT,GAAqBhkB,MAAmB;AAChG,MAAIgkB,EAAKC,SAAS,OAAQ,QAAO;AACjC,QAAM8B,IAAc,OAAO/lB,KAAU,WAAWA,IAAQ;AACxD,MAAI,CAAC+lB,EAAa,QAAO;AACzB,QAAM3O,IAASyN,GAAeb,GAAM+B,CAAW;AAC/C,SAAO;AAAA,IACLrC,aAAae,EAAWpc;AAAAA,IACxBrD,OAAOoS,GAAQpS,SAASmf,GAAY4B,CAAW;AAAA,IAC/CroB,OAAO0Z,GAAQ1Z;AAAAA,IACfD,MAAM2Z,GAAQ3Z;AAAAA,EAAAA;AAElB,GAEMuoB,KAAuBA,CAACvB,GAAiCT,GAAqBhkB,MAAmB;AACrG,MAAIgkB,EAAKC,SAAS,aAAc,QAAO;AACvC,QAAM0B,IAAS3lB,GACTimB,IAAUP,GAAmBC,GAAQ3B,CAAI;AAC/C,MAAI,CAACiC,EAAS,QAAO;AACrB,QAAMC,IAAcP,EAAO,CAAC,IAAId,GAAeb,GAAM2B,EAAO,CAAC,CAAC,IAAI7nB;AAClE,SAAO;AAAA,IAAE4lB,aAAae,EAAWpc;AAAAA,IAAIrD,OAAOihB;AAAAA,IAASvoB,OAAOwoB,GAAaxoB;AAAAA,IAAOD,MAAMyoB,GAAazoB;AAAAA,EAAAA;AACrG,GAEM0oB,KAAmBA,CAACnmB,MAAmBA,KAAU,QAA+BA,MAAU,IAMnFomB,KAAuBA,CAAC3B,GAAiCD,MAAgD;AACpH,QAAMR,IAAOS,EAAWT,MAClBhkB,IAAQukB,GAAkBC,GAAKC,CAAU;AAE/C,MAAIA,EAAW4B,OAAQ,QAAO;AAE9B,MAAIrC,EAAKC,SAAS,eAAe6B,GAAgBrB,GAAYT,GAAMhkB,CAAK;AACxE,MAAIgkB,EAAKC,SAAS,qBAAqB+B,GAAqBvB,GAAYT,GAAMhkB,CAAK;AAEnF,MAAIgkB,EAAKC,SAAS,QAAQ;AACxB,UAAMqC,IAAYvB,GAAgB/kB,CAAK;AACvC,WAAOsmB,IAAY;AAAA,MAAE5C,aAAae,EAAWpc;AAAAA,MAAIrD,OAAOshB;AAAAA,IAAAA,IAAc;AAAA,EACxE;AAEA,MAAItC,EAAKC,SAAS,UAAU;AAC1B,UAAMqC,IAAYhB,GAAkBtlB,CAAK;AACzC,WAAOsmB,IAAY;AAAA,MAAE5C,aAAae,EAAWpc;AAAAA,MAAIrD,OAAOshB;AAAAA,IAAAA,IAAc;AAAA,EACxE;AAEA,MAAItC,EAAKC,SAAS,QAAQ;AACxB,UAAMqC,IAAYb,GAAgBzlB,CAAK;AACvC,WAAOsmB,IAAY;AAAA,MAAE5C,aAAae,EAAWpc;AAAAA,MAAIrD,OAAOshB;AAAAA,MAAW5oB,OAAO;AAAA,IAAA,IAAW;AAAA,EACvF;AAEA,QAAM4oB,IAAYd,GAAkBxlB,CAAK;AACzC,SAAOsmB,IAAY;AAAA,IAAE5C,aAAae,EAAWpc;AAAAA,IAAIrD,OAAOshB;AAAAA,EAAAA,IAAc;AACxE,GAEaC,KAAuBA,CAClC/B,GACApB,GACAQ,MACqB;AACrB,QAAM4C,IAA2B,CAAA;AACjC,aAAWne,KAAMub,GAAmB;AAClC,UAAMa,IAAaZ,GAAcT,GAAY/a,CAAE;AAC/C,QAAI,CAACoc,KAAcA,EAAWgC,gBAAgB,GAAO;AACrD,UAAMC,IAAQN,GAAqB3B,GAAYD,CAAG;AAClD,IAAIkC,KAAOF,EAAOG,KAAKD,CAAK;AAAA,EAC9B;AACA,SAAOF;AACT,GAEaI,KAA4BA,CACvCpC,GACApB,GACAQ,MACgB;AAChB,QAAMiD,IAAqB,CAAA;AAC3B,aAAWxe,KAAMub,GAAmB;AAClC,UAAMa,IAAaZ,GAAcT,GAAY/a,CAAE;AAC/C,QAAI,CAACoc,GAAY4B,UAAU5B,EAAWgC,gBAAgB,GAAO;AAE7D,UAAMK,IAAOrC,EAAW4B,OAAO9B,GAAkBC,GAAKC,CAAU,GAAGD,CAAG;AACtE,IAAI2B,GAAiBW,CAAI,KAAGD,EAAMF,KAAKG,CAAI;AAAA,EAC7C;AACA,SAAOD;AACT,GAEME,KAAwBA,CAACC,GAAyBvC,MAAoC;AAC1F,QAAMkB,wBAAa/E,IAAAA;AACnB,aAAW4D,KAAOwC;AAChB,eAAWhnB,KAAS2kB,GAAyBH,GAAKC,CAAU,EAAGkB,CAAAA,EAAOlO,IAAIzX,CAAK;AAEjF,SAAO2lB;AACT,GAcasB,KAAwBA,CACnC7D,GACA4D,MACyB;AACzB,QAAME,IAAmC,CAAA;AACzC,aAAWzC,KAAcrB,GAAY;AACnC,QAAI,CAACqB,EAAW0C,WAAY;AAE5B,QAAI1C,EAAWT,KAAKC,SAAS,UAAUQ,EAAWT,KAAKC,SAAS,cAAc;AAC5E,YAAMmD,IAAWrD,GAAeU,EAAWT,IAAI,GACzCqD,IAAON,GAAsBC,GAAMvC,CAAU,GAC7C6C,IAAiB,IAAI1G,IAAIwG,EAASzb,IAAKyL,CAAAA,MAAWA,EAAOpX,KAAK,CAAC,GAC/DunB,IAAa,CAAC,GAAGF,CAAI,EACxBviB,OAAQ9E,CAAAA,MAAU,CAACsnB,EAAelG,IAAIphB,CAAK,CAAC,EAC5CwnB,KAAK,CAACC,GAAGC,MAAMD,EAAEE,cAAcD,GAAG5pB,QAAW;AAAA,QAAE8pB,SAAS;AAAA,MAAA,CAAM,CAAC,EAC/Djc,IAAK3L,CAAAA,OAAW;AAAA,QAAEA,OAAAA;AAAAA,QAAOgF,OAAOmf,GAAYnkB,CAAK;AAAA,MAAA,EAAI;AAExDknB,MAAAA,EAAWP,KAAK;AAAA,QACdte,IAAIoc,EAAWpc;AAAAA,QACfrD,OAAOyf,EAAWzf;AAAAA,QAClB8W,SAAS,CACP,GAAGsL,EAASzb,IAAKyL,CAAAA,OAAY;AAAA,UAAEpX,OAAOoX,EAAOpX;AAAAA,UAAOgF,OAAOoS,EAAOpS;AAAAA,UAAOtH,OAAO0Z,EAAO1Z;AAAAA,QAAAA,EAAQ,GAC/F,GAAG6pB,CAAU;AAAA,MAAA,CAEhB;AACD;AAAA,IACF;AAEA,UAAMF,IAAO,CAAC,GAAGN,GAAsBC,GAAMvC,CAAU,CAAC,EACrD+C,KAAK,CAACC,GAAGC,MAAMD,EAAEE,cAAcD,GAAG5pB,QAAW;AAAA,MAAE8pB,SAAS;AAAA,IAAA,CAAM,CAAC,EAC/Djc,IAAK3L,CAAAA,OAAW;AAAA,MAAEA,OAAAA;AAAAA,MAAOgF,OAAOmf,GAAYnkB,CAAK;AAAA,IAAA,EAAI;AACxDknB,IAAAA,EAAWP,KAAK;AAAA,MAAEte,IAAIoc,EAAWpc;AAAAA,MAAIrD,OAAOyf,EAAWzf;AAAAA,MAAO8W,SAASuL;AAAAA,IAAAA,CAAM;AAAA,EAC/E;AACA,SAAOH;AACT,GAOaW,KAAuBA,CAACzE,MAAoD;AACvF,QAAMtH,IAAwB,CAAC;AAAA,IAAE9b,OAAO8iB;AAAAA,IAAa9d,OAAO;AAAA,EAAA,CAAQ;AACpE,aAAWyf,KAAcrB;AACvB,IAAKqB,EAAWqD,aAGZrD,EAAWT,KAAKC,SAAS,gBAC7BnI,EAAQ6K,KAAK;AAAA,MAAE3mB,OAAOykB,EAAWpc;AAAAA,MAAIrD,OAAOyf,EAAWzf;AAAAA,IAAAA,CAAO;AAEhE,SAAO8W;AACT,GAEaiM,KAAuBA,CAAC3E,MAAoD;AACvF,QAAMtH,IAAwB,CAAC;AAAA,IAAE9b,OAAO+iB;AAAAA,IAAiB/d,OAAO;AAAA,EAAA,CAAU;AAC1E8W,EAAAA,EAAQ6K,KAAK;AAAA,IAAE3mB,OAAO;AAAA,IAASgF,OAAO;AAAA,EAAA,CAAS;AAC/C,aAAWyf,KAAcrB;AACvB,IAAKqB,EAAWuD,YAChBlM,EAAQ6K,KAAK;AAAA,MAAE3mB,OAAOykB,EAAWpc;AAAAA,MAAIrD,OAAOyf,EAAWzf;AAAAA,IAAAA,CAAO;AAEhE,SAAO8W;AACT,GAEamM,KAA8BA,CAAC7E,MAAoD;AAC9F,QAAMtH,IAAwB,CAAA;AAC9B,aAAW2I,KAAcrB;AACvB,IAAKqB,EAAWgC,eAChB3K,EAAQ6K,KAAK;AAAA,MAAE3mB,OAAOykB,EAAWpc;AAAAA,MAAIrD,OAAOyf,EAAWzf;AAAAA,IAAAA,CAAO;AAEhE,SAAO8W;AACT,GAEaoM,KAA4BA,CAACpM,GAAuByH,MAC3DA,MAAmBT,KAAoBhH,EAAQhX,OAAQsS,CAAAA,MAAWA,EAAOpX,UAAU8iB,EAAW,IAC3FhH,EAAQhX,OAAQsS,CAAAA,MAAWA,EAAOpX,UAAU8iB,MAAe1L,EAAOpX,UAAUujB,CAAc,GAGtF4E,KAAiCA,CAAC5E,GAAwBjV,MACjEiV,MAAmBT,KAAoB,QACpCxU,GAAW8Z,WAGPC,KAAyBA,CACpC9E,GACAH,GACAkF,MACG;AACH,MAAI/E,MAAmBT,GAAa;AACpC,QAAMyF,IAASD,IAAU/E,CAAc;AACvC,MAAIgF,KAAUA,EAAOtnB,SAAS,EAAG,QAAOsnB;AACxC,QAAM9D,IAAaZ,GAAcT,GAAYG,CAAc;AAC3D,MAAKkB,KACDA,EAAWT,KAAKC,SAAS;AAAQ,WAAOF,GAAeU,EAAWT,IAAI,EAAErY,IAAKyL,CAAAA,MAAWA,EAAOpX,KAAK;AAE1G,GAEawoB,KAAqBA,CAACF,GAAkCjgB,MAAwC;AAC3G,QAAMogB,IAAO;AAAA,IAAE,GAAGH;AAAAA,EAAAA;AAClB,gBAAOG,EAAKpgB,CAAE,GACPogB;AACT,GAOaC,KAAmBA,CAC9BC,GACAvF,MACyB;AACzB,QAAMwF,IAAW,IAAIhI,IAAIwC,EAAWzX,IAAKmY,CAAAA,MAAcA,EAAUzb,EAAE,CAAC,GAC9DwgB,IAAkBA,CAACxgB,MAAeA,MAAOya,MAAe8F,EAASxH,IAAI/Y,CAAE,GACvEygB,IAAkBA,CAACzgB,MAAeA,MAAO0a,MAAmB1a,MAAO,WAAWugB,EAASxH,IAAI/Y,CAAE,GAE7Fkb,IAAiBsF,EAAgBF,EAASpF,cAAc,IAAIoF,EAASpF,iBAAiBT,IACtFU,IAAcqF,EAAgBF,EAASnF,WAAW,IAAImF,EAASnF,cAAcV,IAC7EiG,IAAaD,EAAgBH,EAASlF,SAASC,WAAW,IAAIiF,EAASlF,SAASC,cAAcX,IAC9Fa,IAAoB+E,EAAS/E,kBAAkB9e,OAAO+jB,CAAe;AAE3E,SAAO;AAAA,IACLvF,UAAUqF,EAASrF;AAAAA,IACnBC,gBAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,UAAU;AAAA,MAAEC,aAAaqF;AAAAA,MAAYpF,WAAWgF,EAASlF,SAASE;AAAAA,IAAAA;AAAAA,IAClEC,mBAAAA;AAAAA,EAAAA;AAEJ,GAEaoF,KAAkBA,CAACV,GAAkClF,MAAsC;AACtG,QAAMwF,IAAW,IAAIhI,IAAIwC,EAAWzX,IAAKmY,CAAAA,MAAcA,EAAUzb,EAAE,CAAC,GAC9DogB,IAAgC,CAAA;AACtC,aAAW,CAACpgB,GAAIsd,CAAM,KAAKxP,OAAOU,QAAQyR,CAAO;AAC/C,IAAKM,EAASxH,IAAI/Y,CAAE,MAChB,CAACsd,KAAUA,EAAO1kB,WAAW,MACjCwnB,EAAKpgB,CAAE,IAAIsd;AAEb,SAAO8C;AACT,GCpUaQ,KAAmB5rB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC9B;AAAA,IAAAoF,OAAAA;AAAAA,IAAA6jB,QAAA7oB;AAAAA,IAAAurB,aAAArrB;AAAAA,IAAAsrB,gBAAAA;AAAAA,IAAArd,YAAA/N;AAAAA,IAAAuR,WAAAA;AAAAA,IAAAU,aAAAA;AAAAA,IAAAF,WAAAA;AAAAA,IAAAD,SAAAA;AAAAA,EAAAA,IAUIxS;AAAM,MAAAa;AAAA,EAAAZ,SAAAK,KARRO,IAAAP,MAAAG,SAAA,CAAA,IAAAH,GAAWL,OAAAK,GAAAL,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAX,QAAAkpB,IAAAtoB;AAAW,MAAAG;AAAA,EAAAf,SAAAO,KACXQ,IAAAR,MAAAC,SAAA,CAAA,IAAAD,GAAgBP,OAAAO,GAAAP,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAhB,QAAA4rB,IAAA7qB,GAEAyN,IAAA/N,MAAAD,SAAA,KAAAC,GAOFqrB,IAAkB5C,EAAMvlB,SAAU,KAAKioB,EAAWjoB,SAAU,GAC5DwN,IAAea,IAAA,SAAqBO,IAAA,YAAA;AAAgC,MAAAtR;AAAA,EAAAjB,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAWxDL,IAAA;AAAA,IAAAiD,aAAe;AAAA,IAAaC,WAAa;AAAA,EAAA,GAAOnE,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAMzC,QAAAkB,IAAAsN,IAAA,SAAAhO;AAA+B,MAAAW;AAAA,EAAAnB,SAAAqF,KAI5ClE,IAAA,gBAAAI,EAACI,GAAA,EAAe,WAAA,mBAAuB,MAAA,KAAS,MAAA,KAAiB,cAAA,YAC9D0D,UAAAA,EAAAA,CACH,GAAOrF,OAAAqF,GAAArF,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAA,MAAAkF;AAAA,EAAAlF,SAAA6rB,KACN3mB,IAAA2mB,IAAiB,gBAAAtqB,EAAC8jB,IAAA,EAAc,GAAKwG,GAAc,IAAnD,MAA8D7rB,OAAA6rB,GAAA7rB,OAAAkF,KAAAA,IAAAlF,EAAA,CAAA;AAAA,MAAA2K;AAAA,EAAA3K,EAAA,CAAA,MAAAmB,KAAAnB,UAAAkF,KAJjEyF,IAAA,gBAAA/I,EAACE,MAAa,OAAA,SAAY,KAAA,OAAe,UAAA,QAAY,MAAA,KACnDX,UAAAA;AAAAA,IAAAA;AAAAA,IAGC+D;AAAAA,EAAAA,GACH,GAASlF,OAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,EAAApL,EAAA,EAAA,MAAAkpB,KAAAlpB,UAAA4rB,KAAA5rB,EAAA,EAAA,MAAA8rB,KAER1gB,IAAA0gB,KACC,gBAAAlqB,EAACmqB,IAAA,EAAS,KAAA,OACP7C,UAAAA;AAAAA,IAAAA,EAAM7a,IAAKlD,EAaX;AAAA,IACAygB;AAAAA,EAAAA,GACH,GACD5rB,QAAAkpB,GAAAlpB,QAAA4rB,GAAA5rB,QAAA8rB,GAAA9rB,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,SAAA7L,EAAA,EAAA,MAAAmR,KAAAnR,EAAA,EAAA,MAAAgS,KAAAhS,EAAA,EAAA,MAAAuS,KAAAvS,EAAA,EAAA,MAAAwS,KAAAxS,EAAA,EAAA,MAAA0S,KAAA1S,EAAA,EAAA,MAAAoL,KAAApL,EAAA,EAAA,MAAAkB,KAAAlB,UAAA2K,KA1CHkB,sBAAC3J,GAAA,EACK,KAAA,MACI,SAAA,MACK,cAAA,MACD,aAAA,OACN,OAAA,QACK,YAAA,MACA,YAAA,8DACH,QAAAjB,GACAkQ,QAAAA,GACGa,WAAAA,GACEU,aAAAA,GACFF,WAAAA,GACFD,SAAAA,GACM,iBAAArR,GACH,eAAA,iBAEZyJ,UAAAA;AAAAA,IAAAA;AAAAA,IAOCS;AAAAA,EAAAA,GAmBH,GAAQpL,QAAAmR,GAAAnR,QAAAgS,GAAAhS,QAAAuS,GAAAvS,QAAAwS,GAAAxS,QAAA0S,GAAA1S,QAAAoL,GAAApL,QAAAkB,GAAAlB,QAAA2K,GAAA3K,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA,GA3CR6L;AA2CQ;AA5DoB,SAAAV,GAAAie,GAAA;AAAA,SA4CpB,gBAAAxnB,EAACoqB,IAAA,EAES,SAAA,UACM,cAAA1D,GAAmC,GAC7C,KAAA,OACM,WAAA,mBAETc,UAAAA;AAAAA,IAAAA,EAAKjpB,OACJ,gBAAAoB,EAACmD,IAAA,EAAS,IAAAkd,GAAiBwH,EAAKjpB,IAAK,GAAW,SAAA,OAAa,OAAA,GAAGipB,EAAKhpB,SAAL,MAAqB,WADtF;AAAA,IAGAgpB,EAAK1hB;AAAAA,EAAAA,EAAAA,GATD0hB,EAAKhD,WAUZ;AAAQ;ACpBb,MAAM6F,KAAoBlsB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC/B;AAAA,IAAAisB,SAAAA;AAAAA,IAAAC,gBAAA9rB;AAAAA,IAAA+rB,YAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,EAAAA,IAAqGxsB,GAApFosB,IAAA9rB,MAAAG,SAAA,OAAAH,GAEjB,CAAAmsB,GAAAC,CAAA,IAAwCnpB,GAAwB,IAAI,GACpE,CAAAopB,GAAAC,CAAA,IAAsCrpB,GAAwB,IAAI,GAElEspB,IAAwBzhB;AAGtB,MAAA5K;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEoBf,IAAAA,MAAA;AACpBksB,IAAAA,EAAgB,IAAI,GACpBE,EAAe,IAAI;AAAA,EAAC,GACrB3sB,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAHD,QAAA6sB,IAAsBtsB;AAGpB,MAAAE;AAAA,EAAAT,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEqBb,IAAAqsB,OAAsB9gB,CAAAA,MAAA;AAC3CjI,IAAAA,EAAKC,eAAAA,GACLD,EAAKgpB,aAAaC,aAAc,QAChCP,EAAgBK,CAAQ;AAAA,EAAC,GAC1B9sB,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAJD,QAAAitB,IAAuBxsB;AAIrB,MAAAG;AAAA,EAAAZ,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEsBV,IAAAiM,CAAAA,MAAA;AACtB,IAAI9I,EAAKO,cAAc4oB,SAAUnpB,EAAKopB,aAAsB,KAC5DV,EAAgB,IAAI;AAAA,EAAC,GACtBzsB,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAHD,QAAAotB,IAAwBxsB;AAGtB,MAAAG;AAAA,EAAAf,SAAAosB,KAEiBrrB,IAAAssB,OAAsBre,CAAAA,MAAA;AACvCjL,IAAAA,EAAKC,eAAAA,GACLyoB,EAAgB,IAAI;AAEpB,UAAAa,IAAevpB,EAAKgpB,aAAaQ,QAAS,YAAY;AACtD,IAAKC,KAELpB,IAAaoB,GAAQV,CAAQ;AAAA,EAAC,GAC/B9sB,OAAAosB,GAAApsB,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AARD,QAAAytB,IAAmB1sB;AAQjB,MAAAE;AAAA,EAAAjB,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAQgBL,IAAA;AAAA,IAAA6S,SAAW;AAAA,IAAMC,YAAc;AAAA,IAASE,KAAO;AAAA,IAAGyZ,IAAM;AAAA,IAAKC,MAAQ;AAAA,EAAA,GAAQ3tB,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,MAAAlB,EAAA,CAAA,MAAAwsB,KAAAxsB,EAAA,CAAA,MAAA0sB,KAAA1sB,SAAAksB,KAAAlsB,EAAA,CAAA,MAAAytB,KAAAztB,EAAA,EAAA,MAAAusB,KAAAvsB,EAAA,EAAA,MAAAssB,KAAAtsB,EAAA,EAAA,MAAAosB,KAAApsB,EAAA,EAAA,MAAAqsB,KAAArsB,UAAAmsB,GAAA;AAAA,QAAAhrB;AAAA,IAAAnB,EAAA,EAAA,MAAAwsB,KAAAxsB,EAAA,EAAA,MAAA0sB,KAAA1sB,EAAA,EAAA,MAAAytB,KAAAztB,EAAA,EAAA,MAAAusB,KAAAvsB,EAAA,EAAA,MAAAssB,KAAAtsB,EAAA,EAAA,MAAAosB,KAAApsB,EAAA,EAAA,MAAAqsB,KAAArsB,UAAAmsB,KAE9EhrB,IAAAysB,CAAAA,MACX,gBAAAhsB,EAACM,GAAA,EAEc,eAAA,gBAAgB0rB,EAAM7iB,EAAG,IAClC,KAAA,MACO,WAAA;AAAA,MAAA8iB,YAAc;AAAA,MAAW3pB,aAAe;AAAA,IAAA,GACvC,YAAAsoB,MAAiBoB,EAAM7iB,KAAvB,cAAA,MACD,YAAA,yBACJ,QAAA,QACF,MAAA,SACI,UAAA,UACJ,MAAA,SACA,MAAA,aACO,YAAA6iB,EAAME,YAAab,EAAeW,EAAM7iB,EAAe,IAAvDvK,QACC,aAAAotB,EAAME,YAANV,IAAA5sB,QACL,QAAAotB,EAAME,YAAaL,EAAWG,EAAM7iB,EAAe,IAAnDvK,QAER,UAAA;AAAA,MAAA,gBAAAe,EAACwsB,IAAA,EAAqBH,QAAAA,GAAuBtB,eAAAA,GAA+BC,gBAAAA,EAAAA,CAAc;AAAA,MAE1F,gBAAAhrB,EAACwM,MACM,MAAA,KACA,MAAA,KACA,MAAA,MACmB,wBAAA;AAAA,QAAAigB,QAAU;AAAA,MAAA,GACpB,cAAA;AAAA,QAAAC,QACJ;AAAA,QAAIC,IACR;AAAA,QAAIC,IACJ;AAAA,MAAA,GAGLP,UAAAA,EAAMQ,UAAWR,EAAMQ,OAAOzqB,SAAU,IACrCiqB,EAAMQ,OAAO/f,IAAKggB,CAAAA,MAAA;AAChB,cAAAC,IAAgB,GAAGV,EAAM7iB,EAAG,KAAKsjB,EAAK/Y,GAAI;AAAG,eAE3C,gBAAA/T,EAACgtB,MAEW,UAAAX,EAAM7iB,IACTsjB,OAAAA,GACSlC,gBAAAA,GACL,WAAAyB,EAAME,WACL,YAAAF,EAAMY,YACJ,cAAA9B,MAAgB4B,GACjB1B,aAAAA,GACFC,WAAAA,GACM,iBAAA4B,CAAAA,MAAA;AACf1qB,UAAAA,EAAKC,eAAAA,GACLD,EAAKkI,gBAAAA,GACLlI,EAAKgpB,aAAaC,aAAc,QAChCL,EAAe2B,CAAO,GACtB7B,EAAgB,IAAI;AAAA,QAAC,GAEL,kBAAAiC,CAAAA,MAAA;AAChB,UAAI3qB,EAAKO,cAAc4oB,SAAUnpB,EAAKopB,aAAsB,KAC5DR,EAAe,IAAI;AAAA,QAAC,GAET,aAAA,CAAAgC,GAAAC,MAAA;AACX7qB,UAAAA,EAAKC,eAAAA,GACLD,EAAKkI,gBAAAA,GACL0gB,EAAe,IAAI,GACnBF,EAAgB,IAAI;AACpB,gBAAAoC,IAAe9qB,EAAKgpB,aAAaQ,QAAS,YAAY;AACtD,UAAKC,MACLpB,IAAaoB,GAAQI,EAAM7iB,IAAK;AAAA,YAAA6jB,cAAAA;AAAAA,UAAAA,CAAgB,GAChDvC,IAAgBmB,GAAQa,EAAK/Y,KAAM;AAAA,YAAAsZ,cAAAA;AAAAA,UAAAA,CAAgB;AAAA,QAAC,EAAA,GA5BjDP,EAAK/Y,GA6BT;AAAA,MACD,CAsCL,IAnCDsY,EAAMxmB,MAAMiH,IAAK5G,CAAAA,wBACdmN,IAAA,EAA2C,SAAAnN,EAAIiP,sBAAJ,CAAA,GAC1C,UAAA,gBAAAnV,EAACb,KAEG,YAAAktB,EAAME,YAANgB,CAAAA,MAAA;AAEM/qB,QAAAA,EAAKC,eAAAA,GACLD,EAAKkI,gBAAAA,GACLlI,EAAKgpB,aAAaC,aAAc,QAChCP,EAAgBmB,EAAM7iB,EAAG;AAAA,MAAC,IALhCvK,QAUA,QAAAotB,EAAME,YAANiB,CAAAA,MAAA;AAEMhrB,QAAAA,EAAKC,eAAAA,GACLD,EAAKkI,gBAAAA,GACLwgB,EAAgB,IAAI;AACpB,cAAAuC,IAAejrB,EAAKgpB,aAAaQ,QAAS,YAAY;AACtD,QAAI,CAACC,KAAUA,MAAW/lB,EAAIsD,MAC9BqhB,IAAaoB,GAAQI,EAAM7iB,IAAK;AAAA,UAAA6jB,cAAgBnnB,EAAIsD;AAAAA,QAAAA,CAAK;AAAA,MAAC,IAPhEvK,QAYF,UAAA,gBAAAe,EAACoqB,IAAA,EAAgB,GACXlkB,EAAIwnB,WACI,YAAAxnB,EAAIsD,OAAQohB,GACb,WAAAyB,EAAMY,YACJ,aAAAZ,EAAMY,aAAc5B,EAAgBnlB,EAAIsD,EAAe,IAAvDvK,QACF,WAAAotB,EAAMY,aAAN3B,IAAArsB,OAAAA,CAA6C,EAAA,CAE5D,EAAA,GAhCwBiH,EAAIsD,EAiC9B,CACD,EAAA,CACP;AAAA,IAAA,EAAA,GAtGK6iB,EAAM7iB,EAuGb,GACD/K,QAAAwsB,GAAAxsB,QAAA0sB,GAAA1sB,QAAAytB,GAAAztB,QAAAusB,GAAAvsB,QAAAssB,GAAAtsB,QAAAosB,GAAApsB,QAAAqsB,GAAArsB,QAAAmsB,GAAAnsB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GA1GAkB,IAAAgrB,EAAO7d,IAAKlN,CA0GZ,GAACnB,OAAAwsB,GAAAxsB,OAAA0sB,GAAA1sB,OAAAksB,GAAAlsB,OAAAytB,GAAAztB,QAAAusB,GAAAvsB,QAAAssB,GAAAtsB,QAAAosB,GAAApsB,QAAAqsB,GAAArsB,QAAAmsB,GAAAnsB,QAAAkB;AAAAA,EAAA;AAAAA,IAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,SAAAnB,UAAAkB,KAjHJC,IAAA,gBAAAI,EAACwM,IAAA,EACQ,QAAA,QACF,MAAA,MACL,6BACuB,uBAAA,IACT,cAAA9M,GAEbC,UAAAA,GA2GH,GAAalB,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GAlHbmB;AAkHa,GAwBXotB,KAAexuB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACnB;AAAA,IAAA6sB,UAAAA;AAAAA,IAAAuB,OAAAA;AAAAA,IAAAlC,gBAAAA;AAAAA,IAAA2B,WAAAA;AAAAA,IAAAU,YAAAA;AAAAA,IAAAU,cAAAA;AAAAA,IAAAxc,aAAAA;AAAAA,IAAAF,WAAAA;AAAAA,IAAA2c,iBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAC,aAAAA;AAAAA,EAAAA,IAYItvB,GACJ,CAAAuvB,GAAAC,CAAA,IAAgCjsB,GAAS,EAAI,GAQ7BjD,IAAA6uB,IAAA,cAAA,eAEA3uB,IAAAutB,IAAAqB,IAAA3uB,QACCC,IAAAqtB,IAAAsB,IAAA5uB,QACLI,IAAAktB,IAAAuB,IAAA7uB;AAAmC,MAAAO;AAAA,EAAAf,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAOjCP,IAAA;AAAA,IAAAwN,IAAM;AAAA,EAAA,GAAYvO,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEjBL,IAAAA,MAAMsuB,EAAYxjB,EAAS,GAAC/L,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAOtB,QAAAkB,IAAAouB,IAAA,kBAAA;AAA2C,MAAAnuB;AAAA,EAAAnB,SAAAkB,KAL1DC,sBAACT,KAAY,SAAA,QAAkB,YAAA,UAAqB,YAAA,GAClD,UAAA,gBAAAa,EAACmD,IAAA,EACK+L,IAAAA,IACI,SAAA,QACF,OAAA,YACK,WAAAvP,GACA,YAAA,wBAAsB,EAAA,CAErC,GAAMlB,OAAAkB,GAAAlB,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,CAAA,MAAAquB,EAAA3mB,SACNxC,sBAACvD,GAAA,EAAe,WAAA,kBAAuB,OAAA,YACpC0sB,YAAK3mB,MAAAA,CACR,GAAO1H,EAAA,CAAA,IAAAquB,EAAA3mB,OAAA1H,OAAAkF,KAAAA,IAAAlF,EAAA,CAAA;AAAA,MAAA2K;AAAA,EAAA3K,EAAA,CAAA,MAAAquB,EAAAjnB,MAAAzD,UACPgH,IAAA,gBAAApJ,EAACyqB,IAAA,EAAc,SAAA,UAAsB,cAAA,QAAY,MAAA,MAC9CqC,UAAAA,EAAKjnB,MAAMzD,OAAAA,CACd,GAAQ3D,EAAA,CAAA,IAAAquB,EAAAjnB,MAAAzD,QAAA3D,OAAA2K,KAAAA,IAAA3K,EAAA,CAAA;AAAA,MAAAoL;AAAA,EAAApL,EAAA,CAAA,MAAAmB,KAAAnB,SAAAkF,KAAAlF,EAAA,EAAA,MAAA2K,KAvBVS,IAAA,gBAAAxJ,EAACE,IAAA,EACI,IAAA,MACA,IAAA,OACC,KAAA,OACG,QAAA,WACC,QAAAf,GACK,cAAA,MACJ,SAAAE,GAETE,UAAAA;AAAAA,IAAAA;AAAAA,IASA+D;AAAAA,IAGAyF;AAAAA,EAAAA,GAGF,GAAS3K,OAAAmB,GAAAnB,OAAAkF,GAAAlF,QAAA2K,GAAA3K,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,EAAA,EAAA,MAAA8tB,KAAA9tB,EAAA,EAAA,MAAAwuB,KAAAxuB,EAAA,EAAA,MAAAsvB,KAAAtvB,UAAAquB,EAAAjnB,SAAApH,EAAA,EAAA,MAAAwS,KAAAxS,EAAA,EAAA,MAAA0S,KAAA1S,EAAA,EAAA,MAAAqvB,KAAArvB,UAAAmsB,KACRtgB,IAAAyjB,KACC,gBAAA/tB,EAACW,GAAA,EAAU,KAAA,MAAQ,IAAA,MAChBmsB,UAAAA,EAAKjnB,MAAMiH,IAAK5G,CAAAA,MACf,gBAAAlG,EAACqT,IAAA,EAA2C,SAAAnN,EAAIiP,sBAAJ,CAAA,GAC1C,UAAA,gBAAAnV,EAACb,GAAA,EAEG,YAAAotB,IAAA5hB,KAAA1L,QASA,QAAAstB,IAAA9hB,CAAAA,MAAA;AAEMjI,IAAAA,EAAKC,eAAAA,GACLD,EAAKkI,gBAAAA;AACL,UAAAuhB,IAAezpB,EAAKgpB,aAAaQ,QAAS,YAAY;AACtD,IAAI,CAACC,KAAUA,MAAW/lB,EAAIsD,MAC9BskB,EAAYtrB,GAAO0D,EAAIsD,EAAG;AAAA,EAAC,IANjCvK,QAWF,UAAA,gBAAAe,EAACoqB,IAAA,EAAgB,GACXlkB,EAAIwnB,WACI,YAAAxnB,EAAIsD,OAAQohB,GACbqC,WAAAA,GACE,aAAAA,IAAa9b,EAAYjL,EAAIsD,EAAe,IAA5CvK,QACF,WAAAguB,IAAAhc,IAAAhS,OAAAA,CAAkC,EAAA,CAEjD,EAAA,GA9BwBiH,EAAIsD,EA+B9B,CACD,EAAA,CACH,GACD/K,QAAA8tB,GAAA9tB,QAAAwuB,GAAAxuB,QAAAsvB,GAAAtvB,EAAA,EAAA,IAAAquB,EAAAjnB,OAAApH,QAAAwS,GAAAxS,QAAA0S,GAAA1S,QAAAqvB,GAAArvB,QAAAmsB,GAAAnsB,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,SAAAhN,EAAA,EAAA,MAAA8sB,KAAA9sB,EAAA,EAAA,MAAAquB,EAAA/Y,OAAAtV,EAAA,EAAA,MAAAK,KAAAL,EAAA,EAAA,MAAAO,KAAAP,EAAA,EAAA,MAAAoL,KAAApL,EAAA,EAAA,MAAA6L,KAAA7L,EAAA,EAAA,MAAAS,KAAAT,UAAAY,KAzEHoM,IAAA,gBAAApL,EAACM,KACiB4qB,kBAAAA,GACA,kBAAAuB,EAAK/Y,KACjB,KAAA,KACS,cAAA,MACD,YAAAjV,GACD,YAAA,yBACC,YAAAE,GACC,aAAAE,GACL,QAAAG,GAERwK,UAAAA;AAAAA,IAAAA;AAAAA,IAyBCS;AAAAA,EAAAA,GAsCH,GAAQ7L,QAAA8sB,GAAA9sB,EAAA,EAAA,IAAAquB,EAAA/Y,KAAAtV,QAAAK,GAAAL,QAAAO,GAAAP,QAAAoL,GAAApL,QAAA6L,GAAA7L,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA,GA1ERgN;AA0EQ,GAIN+gB,KAAehuB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACnB;AAAA,IAAA2tB,QAAAA;AAAAA,IAAAtB,eAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,EAAAA,IAAkDxsB;AAAM,MAAAM;AAAA,EAAAL,EAAA,CAAA,MAAA4tB,EAAAlmB,SAIpDrH,IAAA,gBAAAkB,EAACI,GAAA,EAAe,WAAA,kBAAkBisB,YAAMlmB,OAAO,GAAO1H,EAAA,CAAA,IAAA4tB,EAAAlmB,OAAA1H,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAEhB,QAAAO,IAAAqtB,EAAMxtB,SAAN;AAAsB,MAAAK;AAAA,EAAAT,EAAA,CAAA,MAAA4tB,EAAAxmB,MAAAzD,UAAA3D,EAAA,CAAA,MAAAO,KAA5DE,IAAA,gBAAAc,EAACyqB,MAAc,SAAA,UAAuB,cAAAzrB,GACnCqtB,UAAAA,EAAMxmB,MAAMzD,OAAAA,CACf,GAAQ3D,EAAA,CAAA,IAAA4tB,EAAAxmB,MAAAzD,QAAA3D,OAAAO,GAAAP,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAERV,sBAAC2D,IAAA,EAAM,GAAGvE,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,SAAA4tB,EAAA4B,aAAAxvB,SAAA4tB,EAAA6B,eAAAzvB,SAAA4tB,EAAA7iB,MAAA/K,SAAAssB,KAETvrB,IAAA6sB,EAAM4B,aAANlD,KACC,gBAAA/qB,EAACiD,MAAiB,SAAAopB,EAAM6B,eAAN,kBAChB,UAAA,gBAAAluB,EAACkD,IAAA,EACM,MAAA,OACG,SAAA,WACC,SAAA,MAAM6nB,EAAcsB,EAAM7iB,EAAG,GAC1B,cAAA6iB,EAAM6B,eAAN,cAEZ,UAAA,gBAAAluB,EAACmD,IAAA,EAASgrB,IAAAA,IAAc,SAAA,OAAA,CAAM,GAChC,GACF,GACD1vB,EAAA,CAAA,IAAA4tB,EAAA4B,WAAAxvB,EAAA,CAAA,IAAA4tB,EAAA6B,aAAAzvB,EAAA,CAAA,IAAA4tB,EAAA7iB,IAAA/K,OAAAssB,GAAAtsB,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAiB;AAAA,EAAAjB,UAAA4tB,EAAAlsB,WAAA1B,UAAA4tB,EAAA7iB,MAAA/K,UAAA4tB,EAAAlmB,SAAA1H,UAAAusB,KAEAtrB,IAAA2sB,EAAMlsB,QAAQiC,SAAU,KACvB,gBAAA/B,YACE,UAAA;AAAA,IAAA,gBAAAL,EAAA0L,EAAA,SAAA,EAAc,SAAA,IACZ,UAAA,gBAAA1L,EAACkD,IAAA,EAAgB,MAAA,OAAc,SAAA,SAAoB,cAAA,sBAAsBmpB,EAAMlmB,KAAM,IACnF,UAAA,gBAAAnG,EAACmD,IAAA,EAASirB,IAAAA,IAAwB,SAAA,OAAA,IACpC,EAAA,CACF;AAAA,IACA,gBAAApuB,kBACE,UAAA,gBAAAA,EAAA0L,EAAA,SAAA,EAAmB,MAAA,SAAW,IAAA,MAC3B2gB,UAAAA,EAAMlsB,QAAQ2M,IAAKa,CAAAA,MAClB,gBAAA3N,EAAA0L,EAAA,MAAA,EAAkC,OAAAiC,EAAMnE,IAAK,SAAA,IAC3C,UAAA,gBAAAxJ,EAAC4K,IAAA,EACC,SAAA,IACQ,SAAA,WACD,OAAA+C,EAAMxH,OACP,MAAA,gBAAAnG,EAACmD,IAAA,EAAS,IAAAwK,EAAM/O,MAAe,SAAA,OAAA,IACzB,kBAAMosB,IAAiBqB,EAAM7iB,IAAKmE,EAAMnE,EAAG,EAAA,CAAC,EAAA,GAN5CmE,EAAMnE,EAQtB,CACD,EAAA,CACH,EAAA,CACF;AAAA,EAAA,GACF,GACD/K,EAAA,EAAA,IAAA4tB,EAAAlsB,SAAA1B,EAAA,EAAA,IAAA4tB,EAAA7iB,IAAA/K,EAAA,EAAA,IAAA4tB,EAAAlmB,OAAA1H,QAAAusB,GAAAvsB,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAAkB;AAAA,SAAAlB,EAAA,EAAA,MAAAK,KAAAL,EAAA,EAAA,MAAAS,KAAAT,EAAA,EAAA,MAAAe,KAAAf,UAAAiB,KA7CHC,sBAACY,IAAA,EAAe,SAAA,MAAS,KAAA,MAAgB,YAAA,UACvCzB,UAAAA;AAAAA,IAAAA;AAAAA,IAEAI;AAAAA,IAIAG;AAAAA,IAECG;AAAAA,IAaAE;AAAAA,EAAAA,GAwBH,GAASjB,QAAAK,GAAAL,QAAAS,GAAAT,QAAAe,GAAAf,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA,GA9CTkB;AA8CS;AAjUoB,SAAAiK,GAAAqiB,GAAA;AAAA,SAMazpB,CAAAA,MAAA;AAC1CA,IAAAA,EAAKgpB,aAAa6C,QAAS,cAAcpC,CAAM,GAC/CzpB,EAAKgpB,aAAa8C,gBAAiB;AAAA,EAAH;AACjC;AAuKkB,SAAA9jB,GAAA+jB,GAAA;AAAA,SAmCqB,CAACA;AAAC;AAnCvB,SAAA5jB,GAAAnI,GAAA;AA6DGA,EAAAA,EAAKC,eAAAA,GACLD,EAAKkI,gBAAAA,GACLlI,EAAKgpB,aAAaC,aAAc;AAAH;ACrP9C,MAAM+C,KAA+BA,CAC1C3oB,GACAkoB,GACAje,IAAQ,MACL;AACH,QAAMqY,IAAwC,CAAA;AAE9C,aAAWjiB,KAAQL,GAAO;AACxB,UAAM4oB,KAAavoB,EAAKzF,UAAU2B,UAAU,KAAK;AACjD+lB,IAAAA,EAAKL,KAAK;AAAA,MAAEte,IAAItD,EAAKsD;AAAAA,MAAItD,MAAAA;AAAAA,MAAM4J,OAAAA;AAAAA,MAAO2e,WAAAA;AAAAA,IAAAA,CAAW,GAE7CA,KAAaC,GAAiBX,GAAU7nB,EAAKsD,EAAE,KACjD2e,EAAKL,KAAK,GAAG0G,GAA6BtoB,EAAKzF,YAAY,CAAA,GAAIstB,GAAUje,IAAQ,CAAC,CAAC;AAAA,EAEvF;AAEA,SAAOqY;AACT,GAEMwG,KAAyBA,CAAChB,GAAuBiB,MAAqB;AAC1E,MAAKjB;AACL,WAAIiB,IAAgB,qDACb;AACT,GAEMF,KAAmBA,CAACG,GAA8CC,MAC/DD,EAAcC,CAAK,MAAM,IAG5BC,KAAsBA,CAACF,GAA8CC,GAAetgB,OACjF;AAAA,EAAE,GAAGqgB;AAAAA,EAAe,CAACC,CAAK,GAAGtgB;AAAAA,IAGhCwgB,KAAcA,CAAC9oB,MACnB,gBAAA7F,EAACE,IAAA,EAAO,KAAI,MAAK,MAAK,KAAI,MAAK,QAAO,MAAK,KACzC,UAAA;AAAA,EAAA,gBAAAP,EAACI,GAAA,EAAK,WAAU,mBAAkB,MAAK,KAAI,UAAQ,IAChD8F,YAAKpC,MAAAA,CACR;AAAA,EACC,OAAOoC,EAAK+oB,cAAe,WAC1B,gBAAAjvB,EAACyqB,IAAA,EAAM,SAAQ,UAAS,MAAK,MAAK,cAAcvkB,EAAKgpB,qBAAqB,QAAQ,YAAY,GAC3FhpB,UAAAA,EAAK+oB,YACR,IACE;AAAA,GACN,GAGIE,KAAmBA,CAACjpB,OACLA,EAAKyhB,QAAQvlB,UAAU,KAAK,MAAM8D,EAAKmkB,aAAajoB,UAAU,KAAK,IAKpF,gBAAApC,EAACO,IAAA,EAAO,KAAI,MAAK,YAAY,GAC3B,UAAA,gBAAAF,EAACmqB,IAAA,EAAK,KAAI,OAAM,YAAY,GACzBtkB,UAAAA;AAAAA,EAAAA,EAAKyhB,QAAQ7a,IAAK+a,CAAAA,MACjB,gBAAAxnB,EAACoqB,MAEC,SAAQ,UACR,cAAc1D,GAAmC,GACjD,KAAI,OACJ,WAAU,mBAETc,UAAAA;AAAAA,IAAAA,EAAMjpB,OACL,gBAAAoB,EAACmD,IAAA,EAAK,IAAIkd,GAAiBwH,EAAMjpB,IAAI,GAAG,SAAQ,OAAM,OAAO,GAAGipB,EAAMhpB,SAAS,MAAM,OAAM,IACzF;AAAA,IACHgpB,EAAM1hB;AAAAA,EAAAA,KATF0hB,EAAMhD,WAUb,CACD;AAAA,EACA3e,EAAKmkB;AAAAA,EAAAA,CACR,EAAA,CACF,IArBqB,MAyBnB+E,KAAmBA,CAAClpB,GAA4B0L,OAAuC;AAAA,EAC3FpI,IAAItD,EAAKsD;AAAAA,EACTrD,OAAO6oB,GAAY9oB,CAAI;AAAA,EACvBtH,MAAMsH,EAAKmpB,aAAa,gBAAArvB,EAACmD,IAAA,EAAK,IAAI+C,EAAKmpB,YAAY,SAAQ,OAAA,CAAM,IAAMpwB;AAAAA,EACvEuE,WAAW0C,EAAKopB,eAAe;AAAA,EAC/BhhB,YAAY6gB,GAAiBjpB,CAAI;AAAA,EACjCyK,aAAaiB;AAAAA,EACbpB,kBAAkBtK,EAAKiP,oBAAoBrI,IAAKa,CAAAA,OAAY;AAAA,IAC1DnE,IAAImE,EAAOoG;AAAAA,IACX5N,OAAOwH,EAAOxH;AAAAA,IACdvH,MAAM+O,EAAO/O,QAAQK;AAAAA,IACrBgL,UAAU0D,EAAOzD;AAAAA,IACjB4D,UAAUH,EAAOqD;AAAAA,EAAAA,EACjB;AACJ,IAEaue,KAAmB/wB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC9B;AAAA,IAAAmH,OAAAA;AAAAA,IAAA+kB,gBAAA9rB;AAAAA,IAAA0wB,gBAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,uBAAAA;AAAAA,EAAAA,IAA6FlxB,GAA9EosB,IAAA9rB,MAAAG,SAAA,OAAAH;AAAqB,MAAAE;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAC0Df,QAAEP,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAhG,QAAA,CAAAkxB,GAAAC,CAAA,IAAsD7tB,GAAwC/C,CAAE,GAChG,CAAA6wB,GAAAC,CAAA,IAAoD/tB,GAAwB,IAAI,GAChF,CAAAguB,GAAAC,CAAA,IAA0CjuB,GAAwB,IAAI,GACtEgsB,IAAiByB,KAAAG;AAAsC,MAAA9jB,GAAA3M;AAAA,MAAAT,EAAA,CAAA,MAAAoxB,KAAApxB,EAAA,CAAA,MAAAsxB,KAAAtxB,EAAA,CAAA,MAAAsvB,KAAAtvB,EAAA,CAAA,MAAA+wB,KAAA/wB,EAAA,CAAA,MAAAoH,KAAApH,EAAA,CAAA,MAAAixB,KAAAjxB,EAAA,CAAA,MAAAgxB,KAAAhxB,SAAAmsB,GAAA;AACvD,UAAAzC,IAAaqG,GAA6B3oB,GAAOkoB,CAAQ;AAAE,QAAA1uB;AAAA,IAAAZ,EAAA,EAAA,MAAA+wB,KAAA/wB,UAAAixB,KAE9BrwB,IAAAA,CAAAyvB,GAAAtgB,MAAA;AAC3BkhB,MAAAA,IAAwBZ,GAAOtgB,CAAU,GACrCghB,MAAmBvwB,UACrB2wB,EAAuB/mB,CAAAA,MAAakmB,GAAoBlmB,GAASimB,GAAOtgB,CAAU,CAAC;AAAA,IACpF,GACF/P,QAAA+wB,GAAA/wB,QAAAixB,GAAAjxB,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AALD,UAAAwxB,IAA6B5wB;AAQ1BwM,IAAAA,IAAA1M;AAAG,QAAAK;AAAA,IAAAf,UAAAoxB,KAAApxB,EAAA,EAAA,MAAAsxB,KAAAtxB,EAAA,EAAA,MAAAsvB,KAAAtvB,EAAA,EAAA,MAAAwxB,KAAAxxB,UAAAgxB,KAAAhxB,EAAA,EAAA,MAAAmsB,KACQprB,IAAAmmB,CAAAA,wBACPuK,IAAA,EAEMvK,KAAAA,GACO,YAAA+I,GAAiBX,GAAUpI,EAAGnc,EAAG,GAC7BohB,gBAAAA,GACIiF,oBAAAA,GACLE,eAAAA,GACMC,qBAAAA,GACDF,oBAAAA,GACPL,aAAAA,GACKQ,kBAAAA,KATbtK,EAAGnc,EAS8B,GAEzC/K,QAAAoxB,GAAApxB,QAAAsxB,GAAAtxB,QAAAsvB,GAAAtvB,QAAAwxB,GAAAxxB,QAAAgxB,GAAAhxB,QAAAmsB,GAAAnsB,QAAAe,KAAAA,IAAAf,EAAA,EAAA,GAbAS,IAAAipB,EAAIrb,IAAKtN,CAaT,GAACf,OAAAoxB,GAAApxB,OAAAsxB,GAAAtxB,OAAAsvB,GAAAtvB,OAAA+wB,GAAA/wB,OAAAoH,GAAApH,OAAAixB,GAAAjxB,OAAAgxB,GAAAhxB,OAAAmsB,GAAAnsB,OAAAoN,GAAApN,QAAAS;AAAAA,EAAA;AAAA2M,IAAAA,IAAApN,EAAA,CAAA,GAAAS,IAAAT,EAAA,EAAA;AAAA,MAAAY;AAAA,SAAAZ,EAAA,EAAA,MAAAoN,KAAApN,UAAAS,KAdJG,IAAA,gBAAAW,EAAC6L,KACE3M,UAAAA,EAAAA,CAcH,GAAMT,QAAAoN,GAAApN,QAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA,GAfNY;AAeM,GAgBJ6wB,KAAsB1xB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC1B;AAAA,IAAAinB,KAAAA;AAAAA,IAAAnX,YAAAA;AAAAA,IAAAoc,gBAAAA;AAAAA,IAAAiF,oBAAAA;AAAAA,IAAAE,eAAAA;AAAAA,IAAAI,qBAAAA;AAAAA,IAAAC,oBAAAA;AAAAA,IAAAX,aAAAA;AAAAA,IAAAY,kBAAAA;AAAAA,EAAAA,IAUI7xB,GACJ;AAAA,IAAA0H,MAAAA;AAAAA,IAAAuoB,WAAAA;AAAAA,EAAAA,IAA4B9I,GAC5B1Y,IAAmB/G,EAAIsD,OAAQohB,GAC/B0F,IAAoBjqB,EAAQH,EAAIqqB,aAAerqB,EAAIsD,OAAQumB,GAC3DpC,IAAqB2C,KAAepqB,EAAIsD,OAAQqmB;AAAmB,MAAA/wB;AAAA,EAAAL,EAAA,CAAA,MAAAgwB,KAAAhwB,SAAAyH,KACnDpH,IAAAswB,GAAiBlpB,GAAMuoB,CAAS,GAAChwB,OAAAgwB,GAAAhwB,OAAAyH,GAAAzH,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAjD,QAAA+xB,IAAgB1xB;AAAkC,MAAAE;AAAA,EAAAP,EAAA,CAAA,MAAA+P,KAAA/P,EAAA,CAAA,MAAA4xB,KAAA5xB,EAAA,CAAA,MAAAknB,EAAAnc,MAC3BxK,IAAAA,MAAMqxB,EAAiB1K,EAAGnc,IAAK,CAACgF,CAAU,GAAC/P,OAAA+P,GAAA/P,OAAA4xB,GAAA5xB,EAAA,CAAA,IAAAknB,EAAAnc,IAAA/K,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAlE,QAAAgyB,IAAuBzxB;AAA4C,MAAAE;AAAA,EAAAT,EAAA,CAAA,MAAAgwB,KAAAhwB,EAAA,CAAA,MAAAyH,KAAAzH,EAAA,CAAA,MAAAgxB,KAAAhxB,UAAAgyB,KAE5CvxB,IAAAA,MAAA;AACrB,QAAIuvB,GAAS;AACXgC,MAAAA,EAAAA;AAAgB;AAAA,IAAA;AAGlBvqB,IAAAA,EAAI8K,UAAAA,GACJye,IAAcvpB,CAAI;AAAA,EAAC,GACpBzH,OAAAgwB,GAAAhwB,OAAAyH,GAAAzH,OAAAgxB,GAAAhxB,QAAAgyB,GAAAhyB,QAAAS,KAAAA,IAAAT,EAAA,EAAA;AAPD,QAAAqT,IAAuB5S;AAOrB,MAAAG;AAAA,EAAAZ,EAAA,EAAA,MAAAyH,EAAAuK,aAAAhS,EAAA,EAAA,MAAAyH,EAAAsD,MAAA/K,EAAA,EAAA,MAAA0xB,KAAA1xB,UAAA2xB,KAEsB/wB,IAAAmD,CAAAA,MAAA;AACtB,IAAK0D,EAAIuK,cACTjO,EAAKkI,gBAAAA,GACLlI,EAAKgpB,aAAa6C,QAAS,cAAcnoB,EAAIsD,EAAG,GAChDhH,EAAKgpB,aAAa8C,gBAAiB,QACnC6B,EAAoBjqB,EAAIsD,EAAG,GAC3B4mB,EAAmB,IAAI;AAAA,EAAC,GACzB3xB,EAAA,EAAA,IAAAyH,EAAAuK,WAAAhS,EAAA,EAAA,IAAAyH,EAAAsD,IAAA/K,QAAA0xB,GAAA1xB,QAAA2xB,GAAA3xB,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AAPD,QAAA4sB,IAAwBhsB;AAOtB,MAAAG;AAAA,EAAAf,EAAA,EAAA,MAAA6xB,KAAA7xB,EAAA,EAAA,MAAAyH,EAAAsD,MAAA/K,EAAA,EAAA,MAAA2xB,KAEqB5wB,IAAAiL,CAAAA,MAAA;AACrB,IAAK6lB,MACL9tB,EAAKC,eAAAA,GACLD,EAAKkI,gBAAAA,GACLlI,EAAKgpB,aAAaC,aAAc,QAChC2E,EAAmBlqB,EAAIsD,EAAG;AAAA,EAAC,GAC5B/K,QAAA6xB,GAAA7xB,EAAA,EAAA,IAAAyH,EAAAsD,IAAA/K,QAAA2xB,GAAA3xB,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAND,QAAAitB,IAAuBlsB;AAMrB,MAAAE;AAAA,EAAAjB,UAAA2xB,KAEsB1wB,IAAA4L,CAAAA,MAAA;AACtB,IAAI9I,EAAKO,cAAc4oB,SAAUnpB,EAAKopB,aAAsB,KAC5DwE,EAAmB,IAAI;AAAA,EAAC,GACzB3xB,QAAA2xB,GAAA3xB,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAHD,QAAAotB,IAAwBnsB;AAGtB,MAAAC;AAAA,EAAAlB,EAAA,EAAA,MAAA6xB,KAAA7xB,EAAA,EAAA,MAAAyH,KAAAzH,EAAA,EAAA,MAAA0xB,KAAA1xB,UAAA2xB,KAEiBzwB,IAAA8N,CAAAA,MAAA;AACjB,QAAI,CAAC6iB,KAAD,CAAiBpqB,EAAIqqB;AAAU;AACnC/tB,IAAAA,EAAKC,eAAAA,GACLD,EAAKkI,gBAAAA,GACL0lB,EAAmB,IAAI,GACvBD,EAAoB,IAAI;AACxB,UAAAO,IAAkBluB,EAAKgpB,aAAaQ,QAAS,YAAY;AACzD,IAAI,CAAC0E,KAAaA,MAAcxqB,EAAIsD,MACpCtD,EAAIqqB,UAAWG,CAAS;AAAA,EAAC,GAC1BjyB,QAAA6xB,GAAA7xB,QAAAyH,GAAAzH,QAAA0xB,GAAA1xB,QAAA2xB,GAAA3xB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AATD,QAAAytB,IAAmBvsB;AASjB,MAAAC;AAAA,EAAAnB,EAAA,EAAA,MAAA0xB,KAAA1xB,UAAA2xB,KAEoBxwB,IAAAA,MAAA;AACpBwwB,IAAAA,EAAmB,IAAI,GACvBD,EAAoB,IAAI;AAAA,EAAC,GAC1B1xB,QAAA0xB,GAAA1xB,QAAA2xB,GAAA3xB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAHD,QAAA6sB,IAAsB1rB,GAOA+D,IAAAgqB,IAAA,SAAA1uB,QAGdmK,IAAAukB,IAAA,cAAA;AAA0C,MAAA9jB;AAAA,EAAApL,EAAA,EAAA,MAAAgwB,KAAAhwB,UAAAkvB,KACnC9jB,IAAA8kB,GAAuBhB,GAAcc,CAAS,GAAChwB,QAAAgwB,GAAAhwB,QAAAkvB,GAAAlvB,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAK7C,QAAA6L,IAAApE,EAAIqqB,YAAJ1E,IAAA5sB;AAA4C,MAAAwM;AAAA,EAAAhN,EAAA,EAAA,MAAAgwB,KAAAhwB,EAAA,EAAA,MAAAqT,KAAArT,EAAA,EAAA,MAAA+P,KAAA/P,EAAA,EAAA,MAAAwO,KAAAxO,EAAA,EAAA,MAAAknB,EAAA7V,SAAArR,EAAA,EAAA,MAAA+xB,KAAA/xB,EAAA,EAAA,MAAAgyB,KAIzDhlB,sBAACb,IAAA,EAAO,GACF4lB,GACI,SAAA,QACD,OAAA7K,EAAG7V,OACE7C,YAAAA,GACAuB,YAAAA,GACMigB,kBAAAA,GACN3c,eACI2e,gBAAAA,GAAc,GAC9BhyB,QAAAgwB,GAAAhwB,QAAAqT,GAAArT,QAAA+P,GAAA/P,QAAAwO,GAAAxO,EAAA,EAAA,IAAAknB,EAAA7V,OAAArR,QAAA+xB,GAAA/xB,QAAAgyB,GAAAhyB,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA;AAAA,MAAAkN;AAAA,SAAAlN,EAAA,EAAA,MAAA6sB,KAAA7sB,EAAA,EAAA,MAAAitB,KAAAjtB,EAAA,EAAA,MAAA4sB,KAAA5sB,EAAA,EAAA,MAAAytB,KAAAztB,UAAAyH,EAAAuK,aAAAhS,EAAA,EAAA,MAAAoL,KAAApL,EAAA,EAAA,MAAA6L,KAAA7L,EAAA,EAAA,MAAAgN,KAAAhN,EAAA,EAAA,MAAAkF,KAAAlF,UAAA2K,KAvBJuC,IAAA,gBAAA3L,EAACb,GAAA,EACmB,oBAAAwE,GACA,mBAAA,OACN,aAAA,gBACR,IAAAyF,GACO,WAAAS,GACA,WAAA3D,EAAIuK,WACJ,YAAA,gDACE4a,aAAAA,GACDK,YAAAA,GACC,aAAAphB,GACFghB,WAAAA,GACHY,QAAAA,GAERzgB,UAAAA,GAUF,GAAMhN,QAAA6sB,GAAA7sB,QAAAitB,GAAAjtB,QAAA4sB,GAAA5sB,QAAAytB,GAAAztB,EAAA,EAAA,IAAAyH,EAAAuK,WAAAhS,QAAAoL,GAAApL,QAAA6L,GAAA7L,QAAAgN,GAAAhN,QAAAkF,GAAAlF,QAAA2K,GAAA3K,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA,GAxBNkN;AAwBM,GCpPJglB,KAAyBnyB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC7B;AAAA,IAAAwI,YAAAA;AAAAA,IAAApD,OAAAA;AAAAA,IAAAiG,aAAAA;AAAAA,IAAAoF,QAAAA;AAAAA,EAAAA,IAAmD3Q;AAEnD,MAAI0I,MAAejI,QAAS;AAAA,QAAAH;AAAA,WAAAL,EAAA,CAAA,MAAAyI,KAAAzI,SAAA0Q,KACnBrQ,IAAAqQ,IAAS,gBAAAnP,EAACb,GAAA,EAAYgQ,QAAAA,GAASjI,aAAW,IAA1CA,GAA6DzI,OAAAyI,GAAAzI,OAAA0Q,GAAA1Q,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAA7DK;AAAAA,EAA6D;AACrE,MAAAA;AAAA,SAAAL,EAAA,CAAA,MAAAsL,KAAAtL,SAAA0Q,KAAA1Q,EAAA,CAAA,MAAAqF,KAEMhF,sBAAC8xB,IAAA,EAAkB9sB,OAAAA,GAAoBiG,aAAAA,GAAqBoF,QAAAA,GAAM,GAAI1Q,OAAAsL,GAAAtL,OAAA0Q,GAAA1Q,OAAAqF,GAAArF,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAAtEK;AAAsE,GAGlE+xB,KAAsBryB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACjC;AAAA,IAAA+lB,UAAAA;AAAAA,IAAAqM,cAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,oBAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAA/pB,YAAAA;AAAAA,IAAAgqB,YAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,oBAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAtG,gBAAAA;AAAAA,IAAAuG,2BAAAA;AAAAA,IAAAC,SAAAA;AAAAA,EAAAA,IAeIhzB;AAEJ,MAAIimB,MAAa,SAAO;AAAA,QAAA3lB;AAAA,WAAAL,EAAA,CAAA,MAAAqyB,KAAAryB,EAAA,CAAA,MAAA0yB,KAAA1yB,SAAAyI,KAAAzI,EAAA,CAAA,MAAAyyB,KAAAzyB,EAAA,CAAA,MAAA2yB,KAAA3yB,EAAA,CAAA,MAAA4yB,KAAA5yB,EAAA,CAAA,MAAAusB,KAAAvsB,EAAA,CAAA,MAAA6yB,KAAA7yB,SAAAwyB,KAEpBnyB,sBAACK,GAAA,EAAS,MAAA,KAAS,MAAA,KAChB2xB,UAAAA,EAAY1uB,SAAU,IACrB,gBAAApC,EAAC0qB,IAAA,EACUoG,SAAAA,GACOG,gBAAAA,GACJG,YAAAA,GACGC,eAAAA,GACAC,eAAAA,GACCtG,gBAAAA,OAGlB,gBAAAhrB,EAAC2wB,IAAA,EACazpB,YAAAA,GACLgqB,OAAAA,GACMC,aAAAA,GACN,QAAA,WAGb,GAAM1yB,OAAAqyB,GAAAryB,OAAA0yB,GAAA1yB,OAAAyI,GAAAzI,OAAAyyB,GAAAzyB,OAAA2yB,GAAA3yB,OAAA4yB,GAAA5yB,OAAAusB,GAAAvsB,OAAA6yB,GAAA7yB,OAAAwyB,GAAAxyB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAlBNK;AAAAA,EAkBM;AAIV,MAAIiyB,EAAS3uB,SAAU,GAAC;AAAA,QAAAtD;AAAA,WAAAL,EAAA,EAAA,MAAAuyB,KAAAvyB,EAAA,EAAA,MAAAsyB,KAAAtyB,EAAA,EAAA,MAAA+yB,KAAA/yB,EAAA,EAAA,MAAA8yB,KAAA9yB,UAAAwyB,KAEpBnyB,IAAA,gBAAAkB,EAACuvB,IAAA,EAEQwB,OAAAA,GACSE,gBAAAA,GACAD,gBAAAA,GACOO,uBAAAA,EAAAA,GAJlBC,CAI2C,GAChD/yB,QAAAuyB,GAAAvyB,QAAAsyB,GAAAtyB,QAAA+yB,GAAA/yB,QAAA8yB,GAAA9yB,QAAAwyB,GAAAxyB,QAAAK,KAAAA,IAAAL,EAAA,EAAA,GANFK;AAAAA,EAME;AAEL,MAAAA;AAAA,SAAAL,EAAA,EAAA,MAAA0yB,KAAA1yB,UAAAyI,KAAAzI,EAAA,EAAA,MAAAyyB,KAEMpyB,sBAAC6xB,IAAA,EAAmCzpB,YAAAA,GAAmBgqB,UAAyBC,aAAAA,GAAgB,GAAI1yB,QAAA0yB,GAAA1yB,QAAAyI,GAAAzI,QAAAyyB,GAAAzyB,QAAAK,KAAAA,IAAAL,EAAA,EAAA,GAApGK;AAAoG,GC1DvG2yB,KAAmB,cAEnBC,KAAgBA,CAAC9L,MAAoC,MAAMA,EAAWzf,MAAMH,aAAa,IAEzF2rB,KAAmBA,CAAC5d,GAAa6R,MAChCA,IACDA,EAAWT,KAAKC,SAAS,UAAUQ,EAAWT,KAAKC,SAAS,eACvDa,GAAgBL,EAAWT,MAAMpR,CAAG,IACtCA,IAHiBA,MAAQkQ,KAAc,QAAQlQ,GAMlD6d,KAAiBA,CAACjM,GAAsBC,GAA6C2F,MAAqB;AAE9G,MADIA,MAAatH,MACb,CAAC2B,EAAY,QAAO;AAIxB,MAAIA,EAAWT,KAAKC,SAAS,cAAc;AACzC,UAAM,CAACyM,CAAK,IAAI/L,GAAyBH,GAAKC,CAAU;AACxD,WAAOiM,KAASH,GAAc9L,CAAU;AAAA,EAC1C;AACA,QAAM,CAACzkB,CAAK,IAAI2kB,GAAyBH,GAAKC,CAAU;AACxD,SAAOzkB,KAASuwB,GAAc9L,CAAU;AAC1C,GAEMkM,KAAkBA,CAAClJ,GAAWC,MAAcD,EAAEE,cAAcD,GAAG5pB,QAAW;AAAA,EAAE8pB,SAAS;AAAK,CAAC,GAE3FgJ,KAA+BA,CAACnJ,GAAWC,GAAWjD,MAAgD;AAC1G,MAAIA,MAAeA,EAAWT,KAAKC,SAAS,UAAUQ,EAAWT,KAAKC,SAAS,eAAe;AAC5F,UAAM4M,IAAUC,GAAkBrJ,GAAGC,GAAGjD,EAAWT,IAAI;AACvD,QAAI6M,MAAY,EAAG,QAAOA;AAAAA,EAC5B;AACA,SAAOF,GAAgBlJ,GAAGC,CAAC;AAC7B,GAEMqJ,KAAmBA,CAAC/wB,GAAe2jB,MACvCA,MAAc,QAAQ3jB,IAAQA,IAAQ,IAElC8wB,KAAoBA,CAACE,GAA0BC,GAA2BjN,MAAwB;AACtG,MAAIA,EAAKC,SAAS,UAAUD,EAAKC,SAAS,aAAc,QAAO;AAC/D,QAAMnI,IAAUiI,GAAeC,CAAI,GAC7BkN,IAAUA,CAAClxB,MAA8B;AAC7C,QAAIA,MAAUlC,OAAW,QAAOge,EAAQ7a;AACxC,UAAMoT,IAAQyH,EAAQqV,UAAW/Z,CAAAA,MAAWA,EAAOpX,UAAUA,CAAK;AAClE,WAAOqU,MAAU,KAAKyH,EAAQ7a,SAAS,IAAIoT;AAAAA,EAC7C;AACA,SAAO6c,EAAQF,CAAI,IAAIE,EAAQD,CAAK;AACtC,GAEMG,KAAuBA,CAAC3J,GAAoBC,GAAoBjD,MAAoC;AACxG,MAAIA,EAAW4M,QAAS,QAAO5M,EAAW4M,QAAQ9M,GAAkBkD,GAAGhD,CAAU,GAAGF,GAAkBmD,GAAGjD,CAAU,CAAC;AAEpH,QAAMuM,IAAOzM,GAAkBkD,GAAGhD,CAAU,GACtCwM,IAAQ1M,GAAkBmD,GAAGjD,CAAU;AAE7C,MAAIA,EAAWT,KAAKC,SAAS,QAAQ;AACnC,UAAMqN,IAAW,OAAON,KAAS,WAAW,IAAI/L,KAAK+L,CAAI,EAAE5L,QAAAA,IAAY,GACjEmM,IAAY,OAAON,KAAU,WAAW,IAAIhM,KAAKgM,CAAK,EAAE7L,QAAAA,IAAY;AAC1E,WAAOkM,IAAWC;AAAAA,EACpB;AAEA,MAAI9M,EAAWT,KAAKC,SAAS,UAAU;AACrC,UAAMuN,IAAU,OAAOR,KAAS,WAAWA,IAAO9L,OAAO8L,KAAQ,CAAC,GAC5DS,IAAW,OAAOR,KAAU,WAAWA,IAAQ/L,OAAO+L,KAAS,CAAC;AACtE,WAAOO,IAAUC;AAAAA,EACnB;AAEA,MAAIhN,EAAWT,KAAKC,SAAS,UAAUQ,EAAWT,KAAKC,SAAS,cAAc;AAC5E,UAAM,CAACyN,CAAS,IAAI/M,GAAyB8C,GAAGhD,CAAU,GACpD,CAACkN,CAAU,IAAIhN,GAAyB+C,GAAGjD,CAAU;AAC3D,WAAOqM,GAAkBY,GAAWC,GAAYlN,EAAWT,IAAI;AAAA,EACjE;AAEA,QAAM4N,IAAa,OAAOZ,KAAS,WAAWA,IAAOpM,OAAOoM,KAAQ,EAAE,GAChEa,IAAc,OAAOZ,KAAU,WAAWA,IAAQrM,OAAOqM,KAAS,EAAE;AAC1E,SAAOW,EAAWjK,cAAckK,GAAa/zB,QAAW;AAAA,IAAE8pB,SAAS;AAAA,EAAA,CAAM;AAC3E,GAEakK,KAAYA,CACvB9K,GACAvD,GACAL,MACG;AACH,MAAIK,EAASC,gBAAgBX,GAAiB,QAAOiE;AAErD,MAAIvD,EAASC,gBAAgB;AAC3B,WAAO,CAAC,GAAGsD,CAAI,EAAEQ,KAAK,CAACC,GAAGC,MAAMqJ,GAAiBtJ,EAAE9kB,MAAMglB,cAAcD,EAAE/kB,KAAK,GAAG8gB,EAASE,SAAS,CAAC;AAGtG,QAAMc,IAAaZ,GAAcT,GAAYK,EAASC,WAAW;AACjE,SAAKe,IAEE,CAAC,GAAGuC,CAAI,EAAEQ,KAAK,CAACC,GAAGC,MAAMqJ,GAAiBK,GAAqB3J,GAAGC,GAAGjD,CAAU,GAAGhB,EAASE,SAAS,CAAC,IAFpFqD;AAG1B,GAEa+K,KAAYA,CAAC/K,GAAyBlL,MAAwD;AACzG,QAAM;AAAA,IAAEsH,YAAAA;AAAAA,IAAYG,gBAAAA;AAAAA,IAAgBC,aAAAA;AAAAA,IAAawO,iBAAAA;AAAAA,EAAAA,IAAoBlW,GAC/DmW,IAAmBpO,GAAcT,GAAYG,CAAc,GAC3D2O,IAAgBrO,GAAcT,GAAYI,CAAW,GACrD2O,wBAAsBC,IAAAA;AAE5B,MAAIJ;AACF,eAAWpf,KAAOof,EAAiBG,CAAAA,EAAgBE,IAAIzf,GAAK,EAAE;AAGhE,aAAW4R,KAAOwC,GAAM;AACtB,UAAMpU,IAAM6d,GAAejM,GAAKyN,GAAkB1O,CAAc;AAChE4O,IAAAA,EAAgBE,IAAIzf,GAAK,CAAC,GAAIuf,EAAgBG,IAAI1f,CAAG,KAAK,IAAK4R,CAAG,CAAC;AAAA,EACrE;AAMA,SAJsB,CAAC,GAAG2N,EAAgBtb,QAAAA,CAAS,EAAE2Q,KAAK,CAAC,CAACwJ,CAAI,GAAG,CAACC,CAAK,MACvEL,GAA6BI,GAAMC,GAAOgB,CAAgB,CAC5D,EAEqBtmB,IAAI,CAAC,CAACyc,GAAWmK,CAAU,MAAM;AACpD,UAAMvtB,IAAQwrB,GAAiBpI,GAAW6J,CAAgB;AAE1D,QAAIzO,MAAgBV;AAClB,aAAO;AAAA,QAAElQ,KAAKwV;AAAAA,QAAWpjB,OAAAA;AAAAA,QAAOgiB,MAAMuL;AAAAA,QAAYC,WAAW,CAAA;AAAA,MAAA;AAG/D,UAAMC,wBAAmBL,IAAAA;AACzB,eAAW5N,KAAO+N,GAAY;AAC5B,YAAMG,IAASjC,GAAejM,GAAK0N,GAAe1O,CAAW;AAC7DiP,MAAAA,EAAaJ,IAAIK,GAAQ,CAAC,GAAID,EAAaH,IAAII,CAAM,KAAK,IAAKlO,CAAG,CAAC;AAAA,IACrE;AAEA,UAAMgO,IAAY,CAAC,GAAGC,EAAa5b,QAAAA,CAAS,EACzC2Q,KAAK,CAAC,CAACwJ,CAAI,GAAG,CAACC,CAAK,MAAML,GAA6BI,GAAMC,GAAOiB,CAAa,CAAC,EAClFvmB,IAAI,CAAC,CAAC+mB,GAAQC,CAAO,OAAO;AAAA,MAC3B/f,KAAK8f;AAAAA,MACL1tB,OAAOwrB,GAAiBkC,GAAQR,CAAa,KAAK/N,GAAYuO,KAAUpC,EAAgB;AAAA,MACxFtJ,MAAM2L;AAAAA,IAAAA,EACN;AAEJ,WAAO;AAAA,MAAE/f,KAAKwV;AAAAA,MAAWpjB,OAAAA;AAAAA,MAAOgiB,MAAMuL;AAAAA,MAAYC,WAAAA;AAAAA,IAAAA;AAAAA,EACpD,CAAC;AACH,GAEMI,KAAgBA,CAACpO,GAAsBC,GAAiCkB,MAC1DhB,GAAyBH,GAAKC,CAAU,EACzCnP,KAAMtV,CAAAA,MAAU2lB,EAAOvgB,SAASpF,CAAK,CAAC,GAG5C6yB,KAAaA,CACxB7L,GACAsB,GACAlF,MACG;AACH,QAAM0P,IAAgB3c,OAAOU,QAAQyR,CAAO,EAAExjB,OAC5C,CAAC6N,MAAuCsQ,MAAMC,QAAQvQ,EAAM,CAAC,CAAC,KAAKA,EAAM,CAAC,EAAE1R,SAAS,CACvF;AACA,SAAI6xB,EAAc7xB,WAAW,IAAU+lB,IAEhCA,EAAKliB,OAAQ0f,CAAAA,MAClBsO,EAAcC,MAAM,CAAC,CAAC1qB,GAAIsd,CAAM,MAAM;AACpC,UAAMlB,IAAaZ,GAAcT,GAAY/a,CAAE;AAC/C,WAAKoc,IACEmO,GAAcpO,GAAKC,GAAYkB,CAAM,IADpB;AAAA,EAE1B,CAAC,CACH;AACF,GAEaqN,KAAoBA,CAAChM,GAAyBtD,GAAqBN,MAAsC;AACpH,QAAM6P,IAAiC,CAAA,GACjCxO,IAAaZ,GAAcT,GAAYM,CAAW;AACxD,MAAI,CAACe,EAAY,QAAOwO;AACxB,aAAWzO,KAAOwC;AAChB,eAAWhnB,KAAS2kB,GAAyBH,GAAKC,CAAU;AAC1DwO,MAAAA,EAAOjzB,CAAK,KAAKizB,EAAOjzB,CAAK,KAAK,KAAK;AAG3C,SAAOizB;AACT,GChMMC,KAAe71B,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAD,EAAAiC,YACnB3B,sBAACsB,GAAA,EAAe,WAAA,mBAAwB,OAAA,YACrC5B,YAAKiC,SAAAA,CACR,GAAOhC,EAAA,CAAA,IAAAD,EAAAiC,UAAAhC,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFPK;AAEO,GAGHw1B,KAAkB,CACtB;AAAA,EAAEnzB,OAAO;AAAA,EAAQgF,OAAO;AAAA,EAAQvH,MAAM21B;AAAK,GAC3C;AAAA,EAAEpzB,OAAO;AAAA,EAASgF,OAAO;AAAA,EAASvH,MAAM41B;AAAa,CAAC,GAGlDC,KAAWj2B,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAI;AAAA,EAAAL,EAAA,CAAA,MAAAD,EAAA2H,SAAA1H,EAAA,CAAA,MAAAD,EAAAye,WAAAxe,EAAA,CAAA,MAAAD,EAAA2C,SAMOrC,IAAAN,EAAKye,QAAQ3T,KAAMiP,CAAAA,MAAYA,EAAMpX,UAAW3C,EAAK2C,KAAa,GAACgF,SAAI3H,EAAK2H,OAAM1H,EAAA,CAAA,IAAAD,EAAA2H,OAAA1H,EAAA,CAAA,IAAAD,EAAAye,SAAAxe,EAAA,CAAA,IAAAD,EAAA2C,OAAA1C,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAxG,QAAAoM,IAAsB/L,GACtB41B,IAAqBl2B,EAAKye,QAAQ,CAAA,GAAU9b,UAAK;AAAO,MAAAnC;AAAA,EAAAP,EAAA,CAAA,MAAAD,EAAA2H,SAIpDnH,IAAA,gBAAAgB,EAACq0B,IAAA,EAAc71B,UAAAA,EAAK2H,OAAO,GAAe1H,EAAA,CAAA,IAAAD,EAAA2H,OAAA1H,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAKpCb,IAAA,gBAAAc,EAACmD,IAAA,EAAS4H,IAAAA,IAAmB,OAAA,YAAU,GAAGtM,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,SAAAoM,KAH9CxL,IAAA,gBAAAW,EAAA0L,EAAA,SAAA,EAAc,SAAA,IACZ,UAAA,gBAAArL,EAACs0B,IAAA,EAAY,MAAA,MAAa,SAAA,WAAgB,OAAA,QAAsB,gBAAA,iBAC7D9pB,UAAAA;AAAAA,IAAAA;AAAAA,IACD3L;AAAAA,EAAAA,EAAAA,CACF,EAAA,CACF,GAAeT,OAAAoM,GAAApM,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,EAAA,CAAA,MAAAi2B,KAAAj2B,UAAAD,KAGVgB,IAAAhB,EAAKye,QAAQnQ,IAAK,CAAA8nB,GAAApf,wBAChBlV,IAAA,EACEo0B,UAAAA;AAAAA,IAAAA,KAAgBlf,MAAU,IAAI,gBAAAxV,EAAA0L,EAAA,WAAA,CAAA,CAAA,IAA9B;AAAA,IACD,gBAAA1L,YAAkB,OAAAuY,EAAMpX,OAAiB,SAAA,MAAM3C,EAAKiL,SAAU8O,EAAMpX,KAAM,GACxE,UAAA,gBAAAnB,EAACI,GAAA,EAAe,WAAA,mBAAmBmY,UAAAA,EAAMpS,OAAO,EAAA,CAClD;AAAA,EAAA,KAJaoS,EAAMpX,KAKrB,CACD,GAAC1C,OAAAi2B,GAAAj2B,QAAAD,GAAAC,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAiB;AAAA,EAAAjB,UAAAe,KATNE,IAAA,gBAAAM,EAAA0L,EAAA,YAAA,EACE,UAAA,gBAAA1L,EAAA0L,EAAA,SAAA,EAAmB,MAAA,SAAW,IAAA,MAC3BlM,aAQH,GACF,GAAkBf,QAAAe,GAAAf,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,EAAA,MAAAY,KAAAZ,UAAAiB,KAlBpBC,gCACEN,UAAAA;AAAAA,IAAAA;AAAAA,IAMAK;AAAAA,EAAAA,GAYF,GAAYjB,QAAAY,GAAAZ,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,SAAAnB,EAAA,EAAA,MAAAO,KAAAP,UAAAkB,KArBdC,IAAA,gBAAAS,EAACM,GAAA,EAAU,KAAA,OACT3B,UAAAA;AAAAA,IAAAA;AAAAA,IACAW;AAAAA,EAAAA,GAoBF,GAAQlB,QAAAO,GAAAP,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GAtBRmB;AAsBQ,GAICi1B,KAAcr2B,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACzB;AAAA,IAAAorB,UAAAA;AAAAA,IAAAgL,iBAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,wBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAC,wBAAAA;AAAAA,IAAAC,qBAAAA;AAAAA,IAAAC,6BAAAA;AAAAA,IAAAC,uBAAAA;AAAAA,IAAAC,yBAAAA;AAAAA,EAAAA,IAWI92B,GACJ+2B,IAAmBhtB,GAA0B,IAAI,GACjDitB,IAAmBjtB,GAAuB,IAAI,GAC9C,CAAAZ,GAAA8tB,CAAA,IAAwB1zB,GAAS,EAAK;AAAE,MAAAjD,GAAAE;AAAA,EAAAP,SAAAkJ,KAE9B7I,IAAAA,MAAA;AACR,QAAI,CAAC6I;AAAI;AAET,UAAA+tB,IAAkClzB,CAAAA,MAAA;AAChC,YAAA+I,KAAe/I,EAAK+I;AACpB,MAAMA,cAAkBoqB,SACpBH,EAAU3sB,SAAkB8iB,SAACpgB,EAAM,KACnCgqB,EAAU1sB,SAAkB8iB,SAACpgB,EAAM,KACvCkqB,EAAQ,EAAK;AAAA,IAAC;AAGhBtd,oBAAQyd,iBAAkB,eAAeF,CAAyB,GAC3D,MAAMvd,SAAQ0d,oBAAqB,eAAeH,CAAyB;AAAA,EAAC,GAClF12B,IAAA,CAAC2I,CAAI,GAAClJ,OAAAkJ,GAAAlJ,OAAAK,GAAAL,OAAAO,MAAAF,IAAAL,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA,IAbTmK,GAAU9J,GAaPE,CAAM;AAAC,MAAAE,GAAAG;AAAA,EAAAZ,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAMOb,IAAA;AAAA,IAAAuQ,WAAa;AAAA,IAAYE,QAAU;AAAA,MAAAD,UAAY;AAAA,IAAA;AAAA,EAAE,GAChDrQ,IAAAoL,CAAAA,MAAWgrB,EAAQjzB,EAAKmF,IAAK,GAAClJ,OAAAS,GAAAT,OAAAY,MAAAH,IAAAT,EAAA,CAAA,GAAAY,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAE5CP,oCAAiB,aACf,UAAA,gBAAAQ,EAACkD,IAAA,EAAgBqyB,QAAuB,cAAA,oBAA2B,SAAA,SAAa,MAAA,MAC9E,UAAA,gBAAAv1B,EAACmD,IAAA,EAAS2yB,QAAmB,SAAA,OAAA,IAC/B,EAAA,CACF,GAAkBr3B,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAKVL,sBAAC20B,MAAa,UAAA,OAAA,CAAI,GAAe51B,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,SAAAw2B,KAAAx2B,EAAA,CAAA,MAAAqrB,EAAArF,YAE9B9kB,IAAA20B,GAAexnB,IAAKyL,CAAAA,MAAA;AACnB,UAAAwd,IAAqBxd,EAAM3Z,MAC3B8qB,KAAeI,EAAQrF,aAAclM,EAAMpX;AAAO,6BAG/CwzB,IAAA,EAEM,MAAA,KACA,MAAA,MACI,SAAAjL,KAAA,UAAA,WACKA,gBAAAA,IACL,SAAA,MAAMuL,EAAiB1c,EAAMpX,KAAM,GAE5C,UAAA;AAAA,MAAA,gBAAAnB,EAAC+1B,GAAA,EAAmB,MAAA,GAAA,CAAE;AAAA,MACrBxd,EAAMpS;AAAAA,IAAAA,EAAAA,GARFoS,EAAMpX,KASb;AAAA,EAAS,CAEZ,GAAC1C,OAAAw2B,GAAAx2B,EAAA,CAAA,IAAAqrB,EAAArF,UAAAhmB,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAA,MAAAmB;AAAA,EAAAnB,UAAAkB,KAlBJC,IAAA,gBAAAI,EAACO,IAAA,EAAW,KAAA,OACTZ,UAAAA,GAkBH,GAASlB,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAET4D,sBAACqyB,IAAA,EAAS,GAAGv3B,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,EAAA3K,EAAA,EAAA,MAAAy2B,KAAAz2B,EAAA,EAAA,MAAA02B,KAAA12B,EAAA,EAAA,MAAAqrB,EAAAnF,eAMDvb,IAAAjI,CAAAA,MAAA;AACR+zB,IAAAA,EAAuB/zB,CAAK,IACxBA,MAAU,UAAUA,MAAU2oB,EAAQnF,gBAAcwQ,EAAoB,MAAM;AAAA,EAAE,GACrF12B,QAAAy2B,GAAAz2B,QAAA02B,GAAA12B,EAAA,EAAA,IAAAqrB,EAAAnF,aAAAlmB,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,EAAApL,EAAA,EAAA,MAAAq2B,KAAAr2B,EAAA,EAAA,MAAAqrB,EAAApF,kBAAAjmB,EAAA,EAAA,MAAA2K,KAPHS,IAAA,gBAAA7J,EAACy0B,IAAA,EACO,OAAA,YACC,OAAA3K,EAAQpF,gBACNoQ,SAAAA,GACC,UAAA1rB,EAAAA,CAGT,GACD3K,QAAAq2B,GAAAr2B,EAAA,EAAA,IAAAqrB,EAAApF,gBAAAjmB,QAAA2K,GAAA3K,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAIO,QAAA6L,IAAAwf,EAAQnF;AAAY,MAAAlZ;AAAA,EAAAhN,UAAAq2B,KAAAr2B,EAAA,EAAA,MAAAqrB,EAAApF,kBAClBjZ,IAAA4d,GAA0ByL,GAAiBhL,EAAQpF,cAAe,GAACjmB,QAAAq2B,GAAAr2B,EAAA,EAAA,IAAAqrB,EAAApF,gBAAAjmB,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA;AAAA,MAAAkN;AAAA,EAAAlN,EAAA,EAAA,MAAA02B,KAAA12B,EAAA,EAAA,MAAAqrB,EAAAnF,eAAAlmB,EAAA,EAAA,MAAAgN,KAH9EE,IAAA,gBAAA3L,EAACy0B,MACO,OAAA,gBACC,OAAAnqB,GACE,SAAAmB,GACC0pB,UAAAA,EAAAA,CAAmB,GAC7B12B,QAAA02B,GAAA12B,EAAA,EAAA,IAAAqrB,EAAAnF,aAAAlmB,QAAAgN,GAAAhN,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA;AAAA,MAAAmN;AAAA,EAAAnN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAGA6L,sBAACyoB,MAAa,UAAA,WAAA,CAAQ,GAAe51B,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA;AAAA,MAAAsN;AAAA,EAAAtN,EAAA,EAAA,MAAA22B,KAAA32B,EAAA,EAAA,MAAAs2B,KAAAt2B,EAAA,EAAA,MAAAqrB,EAAAlF,SAAAC,eAEnC9Y,IAAA,gBAAA/L,EAACy0B,IAAA,EACO,OAAA,WACC,OAAA3K,EAAQlF,SAASC,aACfkQ,SAAAA,GACCK,UAAAA,EAAAA,CAA2B,GACrC32B,QAAA22B,GAAA32B,QAAAs2B,GAAAt2B,EAAA,EAAA,IAAAqrB,EAAAlF,SAAAC,aAAApmB,QAAAsN,KAAAA,IAAAtN,EAAA,EAAA;AAWa,QAAAuN,IAAA8d,EAAQlF,SAASE,cAAe,QAAhC,iBAAA;AAAyE,MAAA7Y;AAAA,EAAAxN,UAAAuN,KAFtFC,IAAA,gBAAAjM,EAACmD,IAAA,EACK8yB,IAAAA,IACO,WAAAjqB,GAAyE,GACpFvN,QAAAuN,GAAAvN,QAAAwN,KAAAA,IAAAxN,EAAA,EAAA;AAAA,MAAAyN;AAAA,EAAAzN,EAAA,EAAA,MAAA42B,KAAA52B,EAAA,EAAA,MAAAqrB,EAAAlF,SAAAE,aAAArmB,UAAAwN,KAXJC,sBAAChJ,IAAA,EACI,IAAA,MACQ,cAAA,yBACN,MAAA,MACG,SAAA,WACCmyB,YACO,kBAAAvL,EAAQlF,SAASE,WAEjC7Y,UAAAA,GAIF,GAAaxN,QAAA42B,GAAA52B,EAAA,EAAA,IAAAqrB,EAAAlF,SAAAE,WAAArmB,QAAAwN,GAAAxN,QAAAyN,KAAAA,IAAAzN,EAAA,EAAA;AAAA,MAAA0N;AAAA,EAAA1N,EAAA,EAAA,MAAAsN,KAAAtN,UAAAyN,KArBjBC,IAAA,gBAAA9L,EAACM,GAAA,EAAU,KAAA,OACTiL,UAAAA;AAAAA,IAAAA;AAAAA,IACA,gBAAAvL,EAACE,IAAA,EAAW,KAAA,OACVwL,UAAAA;AAAAA,MAAAA;AAAAA,MAMAG;AAAAA,IAAAA,EAAAA,CAaF;AAAA,EAAA,GACF,GAAQzN,QAAAsN,GAAAtN,QAAAyN,GAAAzN,QAAA0N,KAAAA,IAAA1N,EAAA,EAAA;AAAA,MAAA2N;AAAA,EAAA3N,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAERqM,sBAAC4pB,IAAA,EAAS,GAAGv3B,QAAA2N,KAAAA,IAAA3N,EAAA,EAAA;AAAA,MAAA4N;AAAA,EAAA5N,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEXsM,sBAACgoB,MAAa,UAAA,qBAAA,CAAkB,GAAe51B,QAAA4N,KAAAA,IAAA5N,EAAA,EAAA;AAAA,MAAA6N;AAAA,MAAA7N,EAAA,EAAA,MAAAu2B,KAAAv2B,EAAA,EAAA,MAAA62B,KAAA72B,EAAA,EAAA,MAAAqrB,EAAA/E,mBAAA;AAAA,QAAAtY;AAAA,IAAAhO,UAAA62B,KAAA72B,EAAA,EAAA,MAAAqrB,EAAA/E,qBAEjBtY,IAAAmoB,CAAAA,MAAA;AAC1B,YAAAsB,KAAiBpM,EAAQ/E,kBAAkBxe,SAAUgS,EAAMpX,KAAM;AAAE,+BAGhEwzB,IAAA,EAEM,MAAA,OACI,SAAAuB,KAAA,UAAA,WACA,SAAA,MAAMZ,EAAwB/c,EAAMpX,KAAM,GAElDoX,UAAAA,EAAMpS,MAAAA,GALFoS,EAAMpX,KAMb;AAAA,IAAS,GAEZ1C,QAAA62B,GAAA72B,EAAA,EAAA,IAAAqrB,EAAA/E,mBAAAtmB,QAAAgO,KAAAA,IAAAhO,EAAA,EAAA,GAbA6N,IAAA0oB,EAAsBloB,IAAKL,CAa3B,GAAChO,QAAAu2B,GAAAv2B,QAAA62B,GAAA72B,EAAA,EAAA,IAAAqrB,EAAA/E,mBAAAtmB,QAAA6N;AAAAA,EAAA;AAAAA,IAAAA,IAAA7N,EAAA,EAAA;AAAA,MAAAgO;AAAA,EAAAhO,UAAA6N,KAhBNG,IAAA,gBAAApM,EAACM,GAAA,EAAU,KAAA,OACT0L,UAAAA;AAAAA,IAAAA;AAAAA,sBACC9L,IAAA,EAAgB,UAAA,QAAW,KAAA,OACzB+L,UAAAA,EAAAA,CAcH;AAAA,EAAA,GACF,GAAQ7N,QAAA6N,GAAA7N,QAAAgO,KAAAA,IAAAhO,EAAA,EAAA;AAAA,MAAAkO;AAAA,EAAAlO,EAAA,EAAA,MAAAoL,KAAApL,EAAA,EAAA,MAAAkN,KAAAlN,EAAA,EAAA,MAAA0N,KAAA1N,EAAA,EAAA,MAAAgO,KAAAhO,UAAAmB,KAzFhB+M,IAAA,gBAAA3M,EAAC8L,MACC,UAAA,gBAAA9L,EAAA6gB,GAAA,YAAA,EACE,UAAA,gBAAA7gB,EAAA6gB,GAAA,SAAA,EAAsB2U,KAAAA,GAAkB,OAAA,SAAU,GAAA,MAAQ,IAAA,MACxD,UAAA,gBAAAn1B,EAACM,GAAA,EAAU,KAAA,MACTjB,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA,IAqBA+D;AAAAA,IAEAkG;AAAAA,IAUA8B;AAAAA,IAOAQ;AAAAA,IAyBAC;AAAAA,IACAK;AAAAA,EAAAA,GAmBF,EAAA,CACF,GACF,GACF,GAAShO,QAAAoL,GAAApL,QAAAkN,GAAAlN,QAAA0N,GAAA1N,QAAAgO,GAAAhO,QAAAmB,GAAAnB,QAAAkO,KAAAA,IAAAlO,EAAA,EAAA;AAAA,MAAAmO;AAAA,SAAAnO,EAAA,EAAA,MAAAkJ,KAAAlJ,UAAAkO,KAxGXC,IAAA,gBAAAvM,EAAAwgB,GAAA,MAAA,EACQlZ,MAAAA,GACkB,wBAAA,IACX,aAAAzI,GACC,cAAAG,GAEdG,UAAAA;AAAAA,IAAAA;AAAAA,IAKAmN;AAAAA,EAAAA,GA8FF,GAAelO,QAAAkJ,GAAAlJ,QAAAkO,GAAAlO,QAAAmO,KAAAA,IAAAnO,EAAA,EAAA,GAzGfmO;AAyGe,GC5LbupB,KAAuBA,CAAC1M,MAC5BnS,OAAOwP,OAAO2C,CAAO,EAAE2M,OAAO,CAACC,GAAKvP,MAAWuP,KAAOvP,GAAQ1kB,UAAU,IAAI,CAAC,GAElEk0B,KAAa93B,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACxB;AAAA,IAAA2pB,YAAAA;AAAAA,IAAAoB,SAAAA;AAAAA,IAAA8M,kBAAAA;AAAAA,IAAAC,qBAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAAkGl4B,GAClG+2B,IAAmBhtB,GAA0B,IAAI,GACjDitB,IAAmBjtB,GAAuB,IAAI,GAC9C,CAAAZ,GAAA8tB,CAAA,IAAwB1zB,GAAS,EAAK,GACtC,CAAA40B,GAAAC,CAAA,IAAgD70B,GAAiBsmB,EAAU,CAAA,GAAO7e,MAAjB,EAAuB;AAAE,MAAA1K;AAAA,EAAAL,EAAA,CAAA,MAAAk4B,KAAAl4B,SAAA4pB,KAEnEvpB,IAAAupB,EAAU/e,KAAMutB,CAAAA,MAAcA,EAAQrtB,OAAQmtB,CAAiC,KAAZtO,EAAU,CAAA,GAAG5pB,OAAAk4B,GAAAl4B,OAAA4pB,GAAA5pB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAvG,QAAAq4B,IAAuBh4B,GAEvBi4B,IAA0BZ,GAAqB1M,CAAO;AAAE,MAAAzqB,GAAAE;AAAA,EAAAT,SAAAkJ,KAE9C3I,IAAAA,MAAA;AACR,QAAI,CAAC2I;AAAI;AAET,UAAA+tB,IAAkClzB,CAAAA,MAAA;AAChC,YAAA+I,IAAe/I,EAAK+I;AACpB,MAAMA,aAAkBoqB,SACpBH,EAAU3sB,SAAkB8iB,SAACpgB,CAAM,KACnCgqB,EAAU1sB,SAAkB8iB,SAACpgB,CAAM,KACvCkqB,EAAQ,EAAK;AAAA,IAAC;AAGhBtd,oBAAQyd,iBAAkB,eAAeF,CAAyB,GAC3D,MAAMvd,SAAQ0d,oBAAqB,eAAeH,CAAyB;AAAA,EAAC,GAClFx2B,IAAA,CAACyI,CAAI,GAAClJ,OAAAkJ,GAAAlJ,OAAAO,GAAAP,OAAAS,MAAAF,IAAAP,EAAA,CAAA,GAAAS,IAAAT,EAAA,CAAA,IAbTmK,GAAU5J,GAaPE,CAAM;AAAC,MAAAG,GAAAG;AAAA,EAAAf,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAMOV,IAAA;AAAA,IAAAoQ,WAAa;AAAA,IAAYE,QAAU;AAAA,MAAAD,UAAY;AAAA,IAAA;AAAA,EAAE,GAChDlQ,IAAAiL,CAAAA,MAAWgrB,EAAQjzB,EAAKmF,IAAK,GAAClJ,OAAAY,GAAAZ,OAAAe,MAAAH,IAAAZ,EAAA,CAAA,GAAAe,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAKtCL,IAAA,gBAAAM,EAACmD,IAAA,EAAS6zB,IAAAA,IAAgB,SAAA,QAAM,GAAGv4B,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,SAAAs4B,KAClCp3B,IAAAo3B,IAAoB,IAAI,gBAAA/2B,EAACyqB,MAAc,SAAA,SAASsM,aAAkB,IAAlE,MAAiFt4B,OAAAs4B,GAAAt4B,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,EAAAnB,UAAAkB,KAJxFC,sBAAAihB,GAAA,SAAA,EAAiB,SAAA,IACf,4BAAC3d,IAAA,EAAgBqyB,KAAAA,GAAuB,cAAA,eAAsB,SAAA,SAAa,MAAA,MACzE,UAAA,gBAAAl1B,EAACE,IAAA,EAAW,KAAA,OACVb,UAAAA;AAAAA,IAAAA;AAAAA,IACCC;AAAAA,EAAAA,EAAAA,CACH,GACF,GACF,GAAkBlB,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAON4D,sBAACvD,GAAA,EAAe,WAAA,mBAAwB,OAAA,YAAW,UAAA,WAEnD,GAAO3B,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,EAAA3K,UAAAi4B,KAHTttB,IAAA,gBAAA/I,EAACE,IAAA,EAAsB,gBAAA,iBACrBoD,UAAAA;AAAAA,IAAAA;AAAAA,IAGA,gBAAA3D,EAAC20B,MAAY,MAAA,OAAc,SAAA,SAAiB+B,SAAAA,GAAY,UAAA,YAAA,CAExD;AAAA,EAAA,GACF,GAASj4B,QAAAi4B,GAAAj4B,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,MAAApL,EAAA,EAAA,MAAAk4B,KAAAl4B,UAAA4pB,KAAA5pB,EAAA,EAAA,MAAAgrB,GAAA;AAAA,QAAAnf;AAAA,IAAA7L,EAAA,EAAA,MAAAk4B,KAAAl4B,UAAAgrB,KACOnf,IAAA2sB,CAAAA,MAAA;AACd,YAAAC,IAAuBzN,EAAQoN,EAAQrtB,EAAG,KAAnB,CAAA;AAA2B,+BAE/CmrB,IAAA,EAEU,SAAAgC,MAAqBE,EAAQrtB,KAA7B,WAAA,SACJ,MAAA,MACU,gBAAA,iBACN,SAAA,MAAMotB,EAAoBC,EAAQrtB,EAAG,GAE9C,UAAA;AAAA,QAAA,gBAAAxJ,EAACI,GAAA,EAAMy2B,YAAQ1wB,MAAAA,CAAO;AAAA,QACrB+wB,EAAc90B,SAAU,IAAI,gBAAApC,EAACyqB,MAAc,SAAA,UAAUyM,UAAAA,EAAc90B,OAAAA,CAAQ,IAA3E;AAAA,MAAA,EAAA,GAPIy0B,EAAQrtB,EAQf;AAAA,IAAS,GAEZ/K,QAAAk4B,GAAAl4B,QAAAgrB,GAAAhrB,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA,GAdAoL,IAAAwe,EAAUvb,IAAKxC,CAcf,GAAC7L,QAAAk4B,GAAAl4B,QAAA4pB,GAAA5pB,QAAAgrB,GAAAhrB,QAAAoL;AAAAA,EAAA;AAAAA,IAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,EAAA,EAAA,MAAAoL,KAAApL,UAAA2K,KAvBJkB,IAAA,gBAAAjK,EAACM,GAAA,EAAe,UAAA,SAAyB,kBAAA,OAAkB,aAAA,gBAAiB,GAAA,MAAS,KAAA,OACnFyI,UAAAA;AAAAA,IAAAA;AAAAA,IAQCS;AAAAA,EAAAA,GAeH,GAAQpL,QAAAoL,GAAApL,QAAA2K,GAAA3K,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,EAAAhN,EAAA,EAAA,MAAAq4B,KAAAr4B,EAAA,EAAA,MAAA83B,KAAA93B,EAAA,EAAA,MAAAgrB,KAAAhrB,EAAA,EAAA,MAAAg4B,KAAAh4B,UAAA+3B,KAGL/qB,IAAAqrB,IAAA,gBAAAz2B,EAAAC,IAAA,EAEG,UAAA;AAAA,IAAA,gBAAAD,EAACE,IAAA,EAAsB,gBAAA,iBACrB,UAAA;AAAA,MAAA,gBAAAP,EAACI,GAAA,EAAe,WAAA,kBAAkB02B,UAAAA,EAAc3wB,OAAO;AAAA,MACvD,gBAAAnG,EAAC20B,IAAA,EAAY,MAAA,OAAc,SAAA,SAAiB,SAAA,MAAM8B,EAAcK,EAActtB,EAAG,GAAG,UAAA,QAAA,CAEpF;AAAA,IAAA,GACF;AAAA,sBACC7I,GAAA,EAAU,KAAA,OACRm2B,UAAAA,EAAc7Z,QAAQnQ,IAAKyL,CAAAA,MAAA;AAC1B,YAAA4e,KAAiB1N,EAAQqN,EAActtB,EAAG,KAAzB,IAAgCjD,SAAWgS,EAAMpX,KAAM,GACxEF,IAAcs1B,EAAiBO,EAActtB,EAAG,IAAI+O,EAAMpX,KAAM,KAAlD;AAAyD,aAGrE,gBAAAd,EAACs0B,IAAA,EAEM,MAAA,YACSwC,gBAAAA,GACN,SAAA,SACH,MAAA,MACC,OAAA,QACH,IAAA,MACA,IAAA,OACI,QAAA,QACM,cAAA,MACE,gBAAA,cACN,SAAA,MAAMX,EAAoBM,EAActtB,IAAK+O,EAAMpX,KAAM,GAElE,UAAA;AAAA,QAAA,gBAAAnB,EAACb,GAAA,EACS,SAAA,KACI,aAAA,OACC,cAAA,MACA,aAAAg4B,IAAA,OAAA,UACT,IAAAA,IAAA,OAAA,eACG,OAAAA,IAAA,OAAA,eACC,SAAA,eACG,YAAA,UACI,gBAAA,UACH,YAAA,GAEXA,UAAAA,IAAU,gBAAAn3B,EAACmD,MAASi0B,IAAAA,IAAe,SAAA,IAAA,CAAG,IAAtC,MACH;AAAA,QACA,gBAAA/2B,EAACE,MAAW,KAAA,OAAqB,gBAAA,iBAAqB,MAAA,KAAS,MAAA,KAC7D,UAAA;AAAA,UAAA,gBAAAP,EAACI,GAAA,EAAe,WAAA,mBAAmBmY,UAAAA,EAAMpS,OAAO;AAAA,4BAC/C/F,GAAA,EAAe,WAAA,oBAAyB,OAAA,YACtCa,UAAAA,EAAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,GAhCKsX,EAAMpX,KAiCb;AAAA,IAAS,CAEZ,EAAA,CACH;AAAA,EAAA,EAAA,CAAQ,IAnDX,MAqDO1C,QAAAq4B,GAAAr4B,QAAA83B,GAAA93B,QAAAgrB,GAAAhrB,QAAAg4B,GAAAh4B,QAAA+3B,GAAA/3B,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA;AAAA,MAAAkN;AAAA,EAAAlN,UAAAgN,KAtDVE,IAAA,gBAAA3L,EAACW,KAAW,MAAA,KAAM,GAAA,MAAS,KAAA,MACxB8K,UAAAA,EAAAA,CAsDH,GAAQhN,QAAAgN,GAAAhN,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA;AAAA,MAAAmN;AAAA,EAAAnN,EAAA,EAAA,MAAA6L,KAAA7L,UAAAkN,KArFhBC,IAAA,gBAAA5L,EAAC8L,IAAA,EACC,UAAA,gBAAA9L,EAAA6gB,GAAA,YAAA,EACE,UAAA,gBAAA7gB,EAAA6gB,GAAA,SAAA,EAAsB2U,KAAAA,GAAkB,OAAA,SAAU,GAAA,KAAO,IAAA,MAAc,UAAA,UACrE,UAAA,gBAAAn1B,EAACE,IAAA,EAAa,OAAA,WAAc,KAAA,KAAS,MAAA,SACnC+J,UAAAA;AAAAA,IAAAA;AAAAA,IA0BAqB;AAAAA,EAAAA,GAwDF,EAAA,CACF,GACF,GACF,GAASlN,QAAA6L,GAAA7L,QAAAkN,GAAAlN,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA;AAAA,MAAAsN;AAAA,SAAAtN,EAAA,EAAA,MAAAkJ,KAAAlJ,UAAAmN,KAAAnN,EAAA,EAAA,MAAAmB,KAvGXmM,IAAA,gBAAA1L,EAAAwgB,GAAA,MAAA,EACQlZ,MAAAA,GACkB,wBAAA,IACX,aAAAtI,GACC,cAAAG,GAEdI,UAAAA;AAAAA,IAAAA;AAAAA,IAQAgM;AAAAA,EAAAA,GA0FF,GAAenN,QAAAkJ,GAAAlJ,QAAAmN,GAAAnN,QAAAmB,GAAAnB,QAAAsN,KAAAA,IAAAtN,EAAA,EAAA,GAxGfsN;AAwGe,GCvGbsrB,KAA4B,2BAE5BC,KAAgBA,CAACC,MAAuB,GAAGF,EAAyB,IAAIE,CAAU,IAElFC,KAAyC;AAAA,EAC7C1N,UAAUtF;AAAAA,EACViF,SAAS,CAAA;AAAA,EACT+F,gBAAgB,CAAA;AAClB,GAEMiI,KAAiBA,CAACC,OAAwE;AAAA,EAC9F5N,UAAU;AAAA,IAAE,GAAG0N,GAAiB1N;AAAAA,IAAU,GAAI4N,GAAc5N,YAAY,CAAA;AAAA,EAAC;AAAA,EACzEL,SAASiO,GAAcjO,WAAW+N,GAAiB/N;AAAAA,EACnD+F,gBAAgBkI,GAAclI,kBAAkBgI,GAAiBhI;AACnE,IAEMmI,KAAcA,CAAC7Q,GAAkB3lB,MACrC2lB,EAAOvgB,SAASpF,CAAK,IAAI2lB,EAAO7gB,OAAQ6N,OAAUA,MAAU3S,CAAK,IAAI,CAAC,GAAG2lB,GAAQ3lB,CAAK,GAGlFy2B,KAAiBA,CAACpuB,MAAgBA,EAAG6Y,WAAW,MAAM,IAAI7Y,EAAGic,MAAM,CAAC,IAAIjc,GAExEquB,KAAkBA,CAAC/N,MAA4D;AACnF,QAAMgO,IAAchO,EAASlF,UACvBsF,IACJ,OAAO4N,GAAajT,eAAgB,WAC/BiT,EAAYjT,cACb,OAAOiT,GAAaC,SAAU,WAC5BH,GAAeE,EAAYC,KAAe,IAC1C7T,IACF8T,IACJF,GAAahT,cAAc,SAAS,SAAS,OAGzCJ,IACJ,OAAOoF,EAASpF,kBAAmB,WAAWkT,GAAe9N,EAASpF,cAAc,IAAIT,IACpFU,IAAc,OAAOmF,EAASnF,eAAgB,WAAWiT,GAAe9N,EAASnF,WAAW,IAAIV,IAChGc,IAAoBX,MAAMC,QAAQyF,EAAS/E,iBAAiB,IAC7D+E,EAAS/E,kBACP9e,OAAO,CAAC6N,MAA2B,OAAOA,KAAU,QAAQ,EAC5DhH,IAAI8qB,EAAc,IACrB,CAAA;AAEJ,SAAO;AAAA,IACLnT,UAAUqF,EAASrF,aAAa,SAAS,SAAS;AAAA,IAClDC,gBAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,UAAU;AAAA,MAAEC,aAAaqF,MAAe,WAAWhG,KAAkBgG;AAAAA,MAAYpF,WAAWkT;AAAAA,IAAAA;AAAAA,IAC5FjT,mBAAAA;AAAAA,EAAAA;AAEJ,GAEMkT,KAAiBA,CAACxO,MAA8D;AACpF,QAAMG,IAAgC,CAAA;AACtC,aAAW,CAACpgB,GAAIsd,CAAM,KAAKxP,OAAOU,QAAQyR,CAAO,GAAG;AAClD,QAAI,CAACrF,MAAMC,QAAQyC,CAAM,EAAG;AAC5B,UAAMoR,IAAepR,EAAO7gB,OAAO,CAAC9E,MAA2B,OAAOA,KAAU,QAAQ;AACxF,IAAI+2B,EAAa91B,WAAW,MAC5BwnB,EAAKgO,GAAepuB,CAAE,CAAC,IAAI0uB;AAAAA,EAC7B;AACA,SAAOtO;AACT,GAEauO,KAA0BA,CAAClb,MAA4C;AAClF,QAAM;AAAA,IAAEsa,YAAAA;AAAAA,IAAYG,cAAAA;AAAAA,EAAAA,IAAiBza,GAC/Bmb,IAAWX,GAAeC,CAAY;AAE5C,SAAOW,GAAAA,EACLC,GACG9E,CAAAA,OAAS;AAAA,IACR,GAAG4E;AAAAA,IACHG,aAAc9T,CAAAA,MAAa+O,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO1O,UAAU;AAAA,QAAE,GAAG0O,EAAM1O;AAAAA,QAAUrF,UAAAA;AAAAA,MAAAA;AAAAA,IAAS,EAAI;AAAA,IACnGgU,mBAAoB/T,CAAAA,MAClB8O,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO1O,UAAU;AAAA,QAAE,GAAG0O,EAAM1O;AAAAA,QAAUpF,gBAAAA;AAAAA,MAAAA;AAAAA,IAAe,EAAI;AAAA,IAChFgU,gBAAiB/T,CAAAA,MAAgB6O,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO1O,UAAU;AAAA,QAAE,GAAG0O,EAAM1O;AAAAA,QAAUnF,aAAAA;AAAAA,MAAAA;AAAAA,IAAY,EAAI;AAAA,IAC5GgU,aAAc/T,CAAAA,MAAa4O,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO1O,UAAU;AAAA,QAAE,GAAG0O,EAAM1O;AAAAA,QAAUlF,UAAAA;AAAAA,MAAAA;AAAAA,IAAS,EAAI;AAAA,IACnGgU,wBAAyB/T,CAAAA,MACvB2O,EAAKgF,CAAAA,OAAW;AAAA,MACd,GAAGA;AAAAA,MACH1O,UAAU;AAAA,QAAE,GAAG0O,EAAM1O;AAAAA,QAAUlF,UAAU;AAAA,UAAE,GAAG4T,EAAM1O,SAASlF;AAAAA,UAAUC,aAAAA;AAAAA,QAAAA;AAAAA,MAAY;AAAA,IAAE,EACrF;AAAA,IACJgU,sBAAuB9T,CAAAA,MACrByO,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO1O,UAAU;AAAA,QAAE,GAAG0O,EAAM1O;AAAAA,QAAU/E,mBAAAA;AAAAA,MAAAA;AAAAA,IAAkB,EAAI;AAAA,IACnF+T,qBAAqBA,MACnBtF,EAAKgF,CAAAA,OAAW;AAAA,MACd,GAAGA;AAAAA,MACH1O,UAAU;AAAA,QACR,GAAG0O,EAAM1O;AAAAA,QACTlF,UAAU;AAAA,UACR,GAAG4T,EAAM1O,SAASlF;AAAAA,UAClBE,WAAW0T,EAAM1O,SAASlF,SAASE,cAAc,QAAQ,SAAS;AAAA,QAAA;AAAA,MACpE;AAAA,IACF,EACA;AAAA,IACJiU,uBAAwBC,CAAAA,MACtBxF,EAAKgF,CAAAA,MAAU;AACb,YAAMzT,IAAoByT,EAAM1O,SAAS/E,kBAAkBxe,SAASyyB,CAAQ,IACxER,EAAM1O,SAAS/E,kBAAkB9e,OAAQ9E,CAAAA,MAAUA,MAAU63B,CAAQ,IACrE,CAAC,GAAGR,EAAM1O,SAAS/E,mBAAmBiU,CAAQ;AAClD,aAAO;AAAA,QAAE,GAAGR;AAAAA,QAAO1O,UAAU;AAAA,UAAE,GAAG0O,EAAM1O;AAAAA,UAAU/E,mBAAAA;AAAAA,QAAAA;AAAAA,MAAkB;AAAA,IACtE,CAAC;AAAA,IACHkU,WAAWA,CAACpU,GAAaiC,MACvB0M,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO/O,SAAS;AAAA,QAAE,GAAG+O,EAAM/O;AAAAA,QAAS,CAAC5E,CAAW,GAAGiC;AAAAA,MAAAA;AAAAA,IAAO,EAAI;AAAA,IACrFoS,mBAAmBA,CAACrU,GAAa1jB,MAC/BqyB,EAAKgF,CAAAA,MAAU;AACb,YAAMW,IAAgBX,EAAM/O,QAAQ5E,CAAW,KAAK,CAAA,GAC9CuU,IAAazB,GAAYwB,GAAeh4B,CAAK,GAC7Ck4B,IACJD,EAAWh3B,WAAW,IAClBunB,GAAmB6O,EAAM/O,SAAS5E,CAAW,IAC7C;AAAA,QAAE,GAAG2T,EAAM/O;AAAAA,QAAS,CAAC5E,CAAW,GAAGuU;AAAAA,MAAAA;AACzC,aAAO;AAAA,QAAE,GAAGZ;AAAAA,QAAO/O,SAAS4P;AAAAA,MAAAA;AAAAA,IAC9B,CAAC;AAAA,IACHC,aAAczU,CAAAA,MACZ2O,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO/O,SAASE,GAAmB6O,EAAM/O,SAAS5E,CAAW;AAAA,IAAA,EAAI;AAAA,IACxF0U,iBAAiBA,MAAM/F,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO/O,SAAS,CAAA;AAAA,IAAC,EAAI;AAAA,IACjE+P,kBAAkBA,CAACzM,GAASve,MAC1BglB,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAOhJ,gBAAgB;AAAA,QAAE,GAAGgJ,EAAMhJ;AAAAA,QAAgB,CAACzC,CAAO,GAAGve;AAAAA,MAAAA;AAAAA,IAAW,EAAI;AAAA,IACnGirB,OAAOA,MAAMjG,EAAI4E,CAAQ;AAAA,EAAA,IAE3B;AAAA,IACE74B,MAAM+3B,GAAcC,CAAU;AAAA,IAC9BmC,SAAS;AAAA,IACTC,SAASA,CAACC,GAAWF,MAAY;AAC/B,UAAI,CAACE,KAAa,OAAOA,KAAc,SAAU,QAAOA;AACxD,YAAMpB,IAAQoB;AAKd,UAAIF,KAAW,GAAG;AAChB,cAAMtB,IAAWI;AACjB,eAAO;AAAA,UAAE,GAAGJ;AAAAA,UAAU5I,gBAAgB4I,EAAS5I,kBAAkB,CAAA;AAAA,QAAC;AAAA,MACpE;AACA,aAAO;AAAA,QACL1F,UAAU+N,GAAgBW,EAAM1O,YAAY,CAAA,CAAE;AAAA,QAC9CL,SAASwO,GAAeO,EAAM/O,WAAW,CAAA,CAAE;AAAA,QAC3C+F,gBAAgB,CAAA;AAAA,MAAC;AAAA,IAErB;AAAA,IACAlW,SAASugB,GAAkBxgB,EAAoB;AAAA,IAC/CygB,YAAatB,CAAAA,OAAW;AAAA,MACtB1O,UAAU0O,EAAM1O;AAAAA,MAChBL,SAAS+O,EAAM/O;AAAAA,MACf+F,gBAAgBgJ,EAAMhJ;AAAAA,IAAAA;AAAAA,EACxB,CAEJ,CACF;AACF,GAEMuK,yBAA6BxG,IAAAA,GAEtByG,KAAuBA,CAACzC,GAAoBG,MAAiD;AACxG,QAAMuC,IAAgBF,GAAuBtG,IAAI8D,CAAU;AAC3D,MAAI0C,EAAe,QAAOA;AAE1B,QAAMC,IAAQ/B,GAAwB;AAAA,IAAEZ,YAAAA;AAAAA,IAAYG,cAAAA;AAAAA,EAAAA,CAAc;AAClEqC,SAAAA,GAAuBvG,IAAI+D,GAAY2C,CAAK,GACrCA;AACT,GAEaC,KAAuBA,CAAA5C,GAAA6C,GAAA1C,MAAA;AAAA,QAAAj5B,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAi5B,KAAAj5B,SAAA84B,KAKpBz4B,IAAAk7B,GAAqBzC,GAAYG,CAAY,GAACj5B,OAAAi5B,GAAAj5B,OAAA84B,GAAA94B,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GACrD47B,GADOv7B,GACSs7B,CAAQ;AAAC,GClN5BE,KAAiBA,CAAC/V,MAA2D;AACjF,QAAMgW,IAA+B,CAAA;AACrC,aAAWtV,KAAaV;AACtB,IAAIU,EAAUE,KAAKC,SAAS,UAAUH,EAAUE,KAAKC,SAAS,gBAC1DjB,GAAoBc,EAAUE,KAAKlI,OAAO,KAAGsd,EAAQzS,KAAK7C,EAAUE,KAAKlI,OAAO;AAEtF,SAAOsd;AACT,GAOaC,KAA0BA,CAACjW,MACtCA,EAAWzX,IAAKmY,CAAAA,MACVA,EAAUE,KAAKC,SAAS,UAAUH,EAAUE,KAAKC,SAAS,gBAC1D,CAACjB,GAAoBc,EAAUE,KAAKlI,OAAO,IAAUgI,IAClD;AAAA,EAAE,GAAGA;AAAAA,EAAWE,MAAM;AAAA,IAAE,GAAGF,EAAUE;AAAAA,IAAMlI,SAASgI,EAAUE,KAAKlI,QAAQoI,YAAAA;AAAAA,EAAY;AAAE,CACjG,GAQUoV,KAAwBlW,CAAAA,MAAA;AAAA,QAAA9lB,IAAAC,EAAA,CAAA,GACnC,CAAA,EAAAg8B,CAAA,IAAwBC,GAAW/wB,IAA4B,CAAC;AAAE,MAAA9K;AAAA,EAAAL,EAAA,CAAA,MAAA8lB,KAAA9lB,SAAAi8B,KAExD57B,IAAAA,MAAA;AACR,UAAAy7B,IAAgBD,GAAe/V,CAAU;AACzC,QAAIgW,EAAOn4B,WAAY;AAAC;AACxB,UAAAw4B,IAAgBA,MAAMF,EAAAA,GACtBG,IAAqBN,EAAOztB,IAAKguB,OAAYA,EAAMC,UAAWH,CAAO,CAAC;AAAE,WACjE,MAAA;AACL,iBAAKI,KAAiBH;AAAcG,QAAAA,EAAAA;AAAAA,IAAU;AAAA,EAC/C,GACFv8B,OAAA8lB,GAAA9lB,OAAAi8B,GAAAj8B,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,SAAA8lB,KAAEvlB,IAAA,CAACulB,CAAU,GAAC9lB,OAAA8lB,GAAA9lB,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GARfmK,GAAU9J,GAQPE,CAAY;AAAC,MAAAE;AAAA,SAAAT,SAAA8lB,KAETrlB,IAAAs7B,GAAwBjW,CAAU,GAAC9lB,OAAA8lB,GAAA9lB,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAAnCS;AAAmC;AAbP,SAAA0K,GAAAqxB,GAAA;AAAA,SACkBA,IAAO;AAAC;ACPxD,MAAMC,KAAsB18B,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACjC;AAAA,IAAAypB,MAAAA;AAAAA,IAAAoP,YAAAA;AAAAA,IAAAhT,YAAA4W;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAC,OAAAz8B;AAAAA,EAAAA,IAQIN,GADF+8B,IAAAz8B,MAAAG,SAAA,UAAAH,GAGFylB,IAAmBkW,GAAsBU,CAAa;AAAE,MAAAn8B;AAAA,EAAAP,SAAA8lB,KAChCvlB,IAAAgqB,GAAqBzE,CAAU,GAAC9lB,OAAA8lB,GAAA9lB,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAxD,QAAAq2B,IAAwB91B;AAAiC,MAAAE;AAAA,EAAAT,SAAA8lB,KACjCrlB,IAAAgqB,GAAqB3E,CAAU,GAAC9lB,OAAA8lB,GAAA9lB,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAxD,QAAAs2B,IAAwB71B;AAAiC,MAAAG;AAAA,EAAAZ,SAAA8lB,KAC1BllB,IAAA+pB,GAA4B7E,CAAU,GAAC9lB,OAAA8lB,GAAA9lB,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAtE,QAAAu2B,IAA+B31B;AAAwC,MAAAG;AAAA,EAAAf,EAAA,CAAA,MAAA48B,KAAA58B,SAAA28B,KAElD57B,IAAA;AAAA,IAAAsqB,UAAYsR;AAAAA,IAAe3R,SAAW4R;AAAAA,EAAAA,GAAgB58B,OAAA48B,GAAA58B,OAAA28B,GAAA38B,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAA3E,QAAAi5B,IAAqBl4B,GACrBsqB,IAAiBqQ,GAAqB5C,GAAY3tB,IAA2B8tB,CAAY,GACzFjO,IAAgB0Q,GAAqB5C,GAAY/sB,IAA0BktB,CAAY,GACvFa,IAAoB4B,GAAqB5C,GAAY5sB,IAA8B+sB,CAAY,GAC/Fe,IAA0B0B,GAAqB5C,GAAY/rB,IAAoCksB,CAAY,GAC3GgB,IAAuByB,GAAqB5C,GAAYiE,IAAiC9D,CAAY,GACrGkB,IAA+BuB,GAC7B5C,GACAkE,IACA/D,CACF,GACAoB,IAA4BqB,GAAqB5C,GAAYmE,IAAsChE,CAAY,GAC/GqB,IAA8BoB,GAAqB5C,GAAYoE,IAAwCjE,CAAY,GACnHwB,IAA0BiB,GAAqB5C,GAAYqE,IAAoClE,CAAY,GAC3G4B,IAAoBa,GAAqB5C,GAAYsE,IAA8BnE,CAAY,GAC/F6B,IAAwBY,GAAqB5C,GAAYuE,IAAkCpE,CAAY;AAAE,MAAAqE,GAAAr8B;AAAA,EAAAjB,EAAA,CAAA,MAAA8lB,KAAA9lB,UAAA0pB,KAEzG4T,IAAwB3T,GAAsB7D,GAAY4D,CAAI,GACrCzoB,IAAA4X,OAAM0kB,YAC7BD,EAAejvB,IAAK+pB,OAAc,CAACA,EAAQrtB,IAAK2qB,GAAkBhM,GAAM0O,EAAQrtB,IAAK+a,CAAU,CAAC,CAAC,CACnG,GAAC9lB,OAAA8lB,GAAA9lB,QAAA0pB,GAAA1pB,QAAAs9B,GAAAt9B,QAAAiB,MAAAq8B,IAAAt9B,EAAA,EAAA,GAAAiB,IAAAjB,EAAA,EAAA;AAFD,QAAA83B,IAAyB72B,GAQlBC,IAAA47B,MAAU,UAAV,SAAAt8B;AAAsC,MAAAW;AAAA,EAAAnB,UAAA88B,KAOxC37B,IAAA27B,MAAU,UAAU,gBAAAv7B,EAACb,GAAA,EAAS,MAAA,KAAG,IAAjC,MAA2CV,QAAA88B,GAAA98B,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,EAAAlF,UAAAs9B,KAAAt9B,EAAA,EAAA,MAAA86B,KAAA96B,EAAA,EAAA,MAAA66B,KAAA76B,EAAA,EAAA,MAAA83B,KAAA93B,UAAAgrB,KAAAhrB,EAAA,EAAA,MAAAy6B,KAC5Cv1B,IAAA,gBAAA3D,EAACs2B,IAAA,EACayF,YAAAA,GACHtS,SAAAA,GACS8M,kBAAAA,GACG2C,qBAAAA,GACNI,eAAAA,GACHC,YAAAA,EAAAA,CAAe,GAC3B96B,QAAAs9B,GAAAt9B,QAAA86B,GAAA96B,QAAA66B,GAAA76B,QAAA83B,GAAA93B,QAAAgrB,GAAAhrB,QAAAy6B,GAAAz6B,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,EAAA3K,EAAA,EAAA,MAAAu2B,KAAAv2B,UAAAq2B,KAAAr2B,EAAA,EAAA,MAAAs2B,KAAAt2B,UAAAg6B,KAAAh6B,EAAA,EAAA,MAAAm6B,KAAAn6B,UAAAi6B,KAAAj6B,EAAA,EAAA,MAAA85B,KAAA95B,EAAA,EAAA,MAAAqrB,KAAArrB,EAAA,EAAA,MAAAs6B,KAAAt6B,UAAAq6B,KACF1vB,sBAACyrB,IAAA,EACW/K,UAAAA,GACOgL,iBAAAA,GACAC,iBAAAA,GACOC,wBAAAA,GACNuD,kBAAAA,GACME,wBAAAA,GACHC,qBAAAA,GACQE,gCACNE,uBAAAA,GACEC,yBAAAA,GAAqB,GAC9Ct6B,QAAAu2B,GAAAv2B,QAAAq2B,GAAAr2B,QAAAs2B,GAAAt2B,QAAAg6B,GAAAh6B,QAAAm6B,GAAAn6B,QAAAi6B,GAAAj6B,QAAA85B,GAAA95B,QAAAqrB,GAAArrB,QAAAs6B,GAAAt6B,QAAAq6B,GAAAr6B,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,SAAApL,EAAA,EAAA,MAAA68B,KAAA78B,EAAA,EAAA,MAAAkB,KAAAlB,EAAA,EAAA,MAAAmB,KAAAnB,EAAA,EAAA,MAAAkF,KAAAlF,UAAA2K,KA9BJS,IAAA,gBAAAxJ,EAACE,IAAA,EACK,KAAA,OACC,MAAA,KACF,GAAAZ,GACS,YAAA,GACM,mBAAA,OACN,aAAA,gBACJ,SAAA,OAEP27B,UAAAA;AAAAA,IAAAA;AAAAA,IACA17B;AAAAA,IACD+D;AAAAA,IAQAyF;AAAAA,EAAAA,GAYF,GAAS3K,QAAA68B,GAAA78B,QAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAA2K,GAAA3K,QAAAoL,KAAAA,IAAApL,EAAA,EAAA,GA/BToL;AA+BS;AAtEsB,SAAAD,GAAA4uB,GAAA;AAAA,SAiB4BA,EAAK1O;AAAS;AAjB1C,SAAAtf,GAAAyxB,GAAA;AAAA,SAkB2BzD,EAAK/O;AAAQ;AAlBxC,SAAA9e,GAAAuxB,GAAA;AAAA,SAmB+B1D,EAAKD;AAAY;AAnBhD,SAAA/sB,GAAA2wB,GAAA;AAAA,SAoBqC3D,EAAKC;AAAkB;AApB5D,SAAA+C,GAAAY,GAAA;AAAA,SAqBkC5D,EAAKE;AAAe;AArBtD,SAAA+C,GAAAY,GAAA;AAAA,SAwBpB7D,EAAKI;AAAuB;AAxBR,SAAA8C,GAAAY,GAAA;AAAA,SA2BuC9D,EAAKM;AAAoB;AA3BhE,SAAA6C,GAAAY,GAAA;AAAA,SA4ByC/D,EAAKO;AAAsB;AA5BpE,SAAA6C,GAAAY,GAAA;AAAA,SA6BqChE,EAAKU;AAAkB;AA7B5D,SAAA2C,GAAAY,GAAA;AAAA,SA8B+BjE,EAAKc;AAAY;AA9BhD,SAAAwC,GAAAY,GAAA;AAAA,SA+BmClE,EAAKe;AAAgB;ACgB3F,MAAMoD,KAAiB,CAA+Bn3B,MAA6D;AACjH,QAAM;AAAA,IACJskB,UAAAA;AAAAA,IACA8S,aAAAA;AAAAA,IACAC,SAAAA;AAAAA,IACAtY,YAAAA;AAAAA,IACAuY,YAAAA;AAAAA,IACAC,mBAAAA;AAAAA,IACAC,WAAAA;AAAAA,IACAC,0BAAAA;AAAAA,EAAAA,IACEz3B,GAEE03B,IAAwBpT,EAASlF,SAASC,gBAAgBX,IAC1DiZ,IAAuBA,CAACtY,GAAqB9Q,MAAgB;AACjE,UAAM6R,IAAaZ,GAAcT,GAAYM,CAAW;AACxD,WAAOe,IAAaI,GAAeJ,EAAWT,MAAMpR,CAAG,GAAGlV,QAAQI;AAAAA,EACpE,GAEMm+B,IAAaA,CAACzX,GAAWlW,OAA+E;AAAA,IAC5GjG,IAAImc,EAAInc;AAAAA,IACR1F,OAAO6hB,EAAI7hB;AAAAA,IACX6jB,QAAQD,GAAqB/B,GAAKpB,GAAYuF,EAAS/E,iBAAiB;AAAA,IACxEsF,aAAatC,GAA0BpC,GAAKpB,GAAYuF,EAAS/E,iBAAiB;AAAA,IAClF5P,oBAAoB8nB,IAA2BtX,CAAG;AAAA,IAClD3U,SAASA,MAAM8rB,IAAanX,CAAG;AAAA,IAC/BlV,WAAWpK,GAAQ02B,KAAqBC;AAAAA,IACxCzM,WACE2M,MAA0BH,KAAqBC,KAC1CtM,CAAAA,MAAc;AACb,YAAM2M,IAAkB/T,GAA+BQ,EAASpF,gBAAgBjV,CAAS;AACzF,MAAI4tB,KAAmBvT,EAASpF,mBAAmBT,MAAe8Y,KAChEA,EAAkBrM,GAAW5G,EAASpF,gBAAgB2Y,CAAe,GAEnEvT,EAASnF,gBAAgBV,MAAexU,GAAWokB,UAAUkJ,KAC/DA,EAAkBrM,GAAW5G,EAASnF,aAAalV,EAAUokB,MAAM,GAErEmJ,IAAYtM,GAAW/K,EAAInc,EAAE;AAAA,IAC/B,IACAvK;AAAAA,EAAAA,IAGFq+B,IAAqBA,CACzBC,GACAC,OAC0B;AAAA,IAC1Bh0B,IAAIg0B,IAAS,UAAUA,EAAOjU,SAAS,KAAKgU,EAASxpB,GAAG,KAAK,UAAUwpB,EAASxpB,GAAG;AAAA,IACnFjQ,OAAOy5B,EAASp3B;AAAAA,IAChB8oB,YAAYsO,EAASpV,KAAK/lB;AAAAA,IAC1B8sB,mBAAmBiO,EAAqBK,IAAS1T,EAASnF,cAAcmF,EAASpF,gBAAgB6Y,EAASxpB,GAAG;AAAA,IAC7Gwc,WACEwM,KAAqBjT,EAASpF,mBAAmBT,KAC5CyM,CAAAA,MAAc;AACb,YAAMnH,IAAYiU,GAAQjU,aAAagU,EAASxpB;AAChDgpB,MAAAA,EAAkBrM,GAAW5G,EAASpF,gBAAgB6E,CAAS,GAC3DO,EAASnF,gBAAgBV,MAAeuZ,KAC1CT,EAAkBrM,GAAW5G,EAASnF,aAAa4Y,EAASxpB,GAAG;AAAA,IAEnE,IACA9U;AAAAA,IACNwB,UAAUwyB,GAAUsK,EAASpV,MAAM2B,EAASlF,UAAUL,CAAU,EAAEzX,IAAK6Y,CAAAA,MACrEyX,EAAWzX,GAAa;AAAA,MACtB4D,WAAWiU,GAAQjU,aAAagU,EAASxpB;AAAAA,MACzC8f,QAAQ2J,IAASD,EAASxpB,MAAM9U;AAAAA,IAAAA,CACjC,CACH;AAAA,EAAA;AAGF,SAAI6qB,EAASpF,mBAAmBT,KACvBgP,GAAU2J,GAAa9S,EAASlF,UAAUL,CAAU,EAAEzX,IAAK6Y,CAAAA,MAAQyX,EAAWzX,CAAW,CAAC,IAG5FkX,EAAQ/vB,IAAKuf,CAAAA,MACdA,EAAOsH,UAAUvxB,SAAS,IACrB;AAAA,IACLoH,IAAI,UAAU6iB,EAAOtY,GAAG;AAAA,IACxBjQ,OAAOuoB,EAAOlmB;AAAAA,IACd8oB,YAAY5C,EAAOlE,KAAK/lB;AAAAA,IACxB8sB,mBAAmBiO,EAAqBrT,EAASpF,gBAAgB2H,EAAOtY,GAAG;AAAA,IAC3Ewc,WAAWwM,IACP,CAACrM,MAAsBqM,EAAkBrM,GAAW5G,EAASpF,gBAAgB2H,EAAOtY,GAAG,IACvF9U;AAAAA,IACJwB,UAAU4rB,EAAOsH,UAAU7mB,IAAKywB,CAAAA,MAAaD,EAAmBC,GAAU;AAAA,MAAEhU,WAAW8C,EAAOtY;AAAAA,IAAAA,CAAK,CAAC;AAAA,EAAA,IAIjGupB,EAAmBjR,CAAM,CACjC;AACH,GAEaoR,KAAej/B,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC1B;AAAA,IAAAypB,MAAAA;AAAAA,IAAAoP,YAAAA;AAAAA,IAAAhT,YAAA4W;AAAAA,IAAAlK,eAAAnyB;AAAAA,IAAAoI,YAAAA;AAAAA,IAAAgqB,YAAAlyB;AAAAA,IAAAmyB,kBAAAjyB;AAAAA,IAAAk8B,iBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAyB,YAAAA;AAAAA,IAAAC,mBAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAA1L,aAAAA;AAAAA,IAAAtG,gBAAAA;AAAAA,IAAA0S,sBAAAA;AAAAA,IAAAT,0BAAAA;AAAAA,IAAAU,aAAAt+B;AAAAA,IAAAu+B,gBAAAA;AAAAA,EAAAA,IAmBIp/B,GAfFyyB,IAAAnyB,MAAAG,SAAA,OAAAH,GAEAoyB,IAAAlyB,MAAAC,SAAA,kBAAAD,GACAmyB,IAAAjyB,MAAAD,SAAA,8CAAAC,GAUAy+B,IAAAt+B,MAAAJ,SAAA,KAAAI,GAIFklB,IAAmBkW,GAAsBU,CAAa;AAAE,MAAA37B;AAAA,EAAAf,EAAA,CAAA,MAAA48B,KAAA58B,SAAA28B,KACnC57B,IAAA;AAAA,IAAAsqB,UAAYsR;AAAAA,IAAe3R,SAAW4R;AAAAA,EAAAA,GAAgB58B,OAAA48B,GAAA58B,OAAA28B,GAAA38B,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAA3E,QAAAi5B,IAAqBl4B,GACrBsqB,IAAiBqQ,GAAqB5C,GAAY3tB,IAA2B8tB,CAAY,GACzFjO,IAAgB0Q,GAAqB5C,GAAY/sB,IAA0BktB,CAAY,GACvFlI,IAAuB2K,GAAqB5C,GAAY5sB,IAAiC+sB,CAAY,GACrG8B,IAAyBW,GAAqB5C,GAAY/rB,IAAmCksB,CAAY;AAAE,MAAA3G,GAAArxB;AAAA,MAAAjB,EAAA,CAAA,MAAA8lB,KAAA9lB,EAAA,CAAA,MAAAgrB,KAAAhrB,SAAAi/B,KAAAj/B,EAAA,CAAA,MAAAw+B,KAAAx+B,EAAA,CAAA,MAAAs+B,KAAAt+B,EAAA,CAAA,MAAAu+B,KAAAv+B,EAAA,CAAA,MAAAq+B,KAAAr+B,EAAA,EAAA,MAAA0pB,KAAA1pB,UAAAqrB,GAAA;AAE3G,UAAA8S,IAAoB5I,GAAW7L,GAAMsB,GAASlF,CAAU,GAExD4O,IAAwB3J,GAAuBM,EAAQpF,gBAAiBH,GAAYkF,CAAO,GAE3FoT,KAAgB3J,GAAU0J,GAAa;AAAA,MAAArY,YAAAA;AAAAA,MAAAG,gBAErBoF,EAAQpF;AAAAA,MAAeC,aAC1BmF,EAAQnF;AAAAA,MAAYwO,iBAAAA;AAAAA,IAAAA,CAElC;AAEDpC,IAAAA,IAAkB4L,GAAe;AAAA,MAAA7S,UAAAA;AAAAA,MAAA8S,aAAAA;AAAAA,MAAAC,SAAAA;AAAAA,MAAAtY,YAAAA;AAAAA,MAAAuY,YAAAA;AAAAA,MAAAC,mBAAAA;AAAAA,MAAAC,WAAAA;AAAAA,MAAAC,0BAAAA;AAAAA,IAAAA,CAShC;AAAE,QAAAt9B;AAAA,IAAAlB,EAAA,EAAA,MAAA8lB,KAAA9lB,UAAAw+B,KAAAx+B,EAAA,EAAA,MAAAq+B,KAAAr+B,EAAA,EAAA,MAAAqrB,EAAA/E,qBAEkBplB,KAAAk+B,CAAAA,OACnBA,GAAS/wB,IAAK6Y,CAAAA,QAAU;AAAA,MAAAnc,IAClBmc,GAAGnc;AAAAA,MAAG2L,oBACU8nB,IAA2BtX,EAAW;AAAA,MAAC+H,WAChD;AAAA,QAAA5pB,OACF6hB,GAAG7hB;AAAAA,QAAM6jB,QACRD,GAAqB/B,IAAKpB,GAAYuF,EAAQ/E,iBAAkB;AAAA,QAACsF,aAC5DtC,GAA0BpC,IAAKpB,GAAYuF,EAAQ/E,iBAAkB;AAAA,QAAC/T,SAC1EA,MAAM8rB,IAAanX,EAAW;AAAA,MAAA;AAAA,IACzC,EACA,GAAClnB,QAAA8lB,GAAA9lB,QAAAw+B,GAAAx+B,QAAAq+B,GAAAr+B,EAAA,EAAA,IAAAqrB,EAAA/E,mBAAAtmB,QAAAkB,MAAAA,KAAAlB,EAAA,EAAA;AAVL,UAAAq/B,KAAqBn+B,IAYrBo+B,KAAiC/Y,GAAcT,GAAYuF,EAAQpF,cAAe;AAElChlB,IAAAA,IAAAm9B,GAAO/vB,IAAKuf,CAAAA,OAAA;AAC1D,YAAA2R,KAAqBN,IAAuBrR,GAAMtY,GAAU,KAAvC,CAAA,GACrBkqB,KAAoBhL,GAAU5G,GAAMlE,MAAO2B,EAAQlF,UAAWL,CAAU,GAGxE2Z,KAAkBH,KACd/X,GAAe+X,GAAwB5Y,MAAOkH,GAAMtY,GAAW,GAAClV,QADlDI,QAIlB4tB,KACER,GAAMsH,UAAUvxB,SAAU,IACtBiqB,GAAMsH,UAAU7mB,IAAKywB,CAAAA,OAAe;AAAA,QAAAxpB,KAC7BwpB,EAAQxpB;AAAAA,QAAI5N,OACVo3B,EAAQp3B;AAAAA,QAAMN,OACdi4B,GAAa7K,GAAUsK,EAAQpV,MAAO2B,EAAQlF,UAAWL,CAAU,CAAC;AAAA,MAAA,EAErE,IANZtlB;AAMc,aAET;AAAA,QAAAuK,IACD6iB,GAAMtY;AAAAA,QAAI5N,OACPkmB,GAAMlmB;AAAAA,QAAMtH,OACZm/B,GAAYn/B,SAAZq/B;AAAAA,QAA+B3R,WAC3ByR,GAAYzR,aAAZ;AAAA,QAA+BU,YAC9B+Q,GAAY/Q,cAAZ;AAAA,QAAgCgB,WACjC+P,GAAY/P,aAAZ;AAAA,QAA+B9tB,SACjC69B,GAAY79B,WAAZ,CAAA;AAAA,QAA0B0F,OAC5Bi4B,GAAaG,EAAW;AAAA,QAACpR,QAAAA;AAAAA,MAAAA;AAAAA,IAEC,CACpC,GAACpuB,OAAA8lB,GAAA9lB,OAAAgrB,GAAAhrB,OAAAi/B,GAAAj/B,OAAAw+B,GAAAx+B,OAAAs+B,GAAAt+B,OAAAu+B,GAAAv+B,OAAAq+B,GAAAr+B,QAAA0pB,GAAA1pB,QAAAqrB,GAAArrB,QAAAsyB,GAAAtyB,QAAAiB;AAAAA,EAAA;AAAAqxB,IAAAA,IAAAtyB,EAAA,EAAA,GAAAiB,IAAAjB,EAAA,EAAA;AA7BF,QAAAqyB,IAAgDpxB;AA6B7C,MAAAC;AAAA,EAAAlB,UAAAs+B,KAAAt+B,EAAA,EAAA,MAAAqrB,EAAApF,kBAEyB/kB,IAAAA,CAAAmvB,GAAAqP,MAAA;AAC1B,IAAIrU,EAAQpF,mBAAoBT,MAA5B,CAA4C8Y,KAChDA,EAAkBjO,GAAOhF,EAAQpF,gBAAiByZ,CAAc;AAAA,EAAC,GAClE1/B,QAAAs+B,GAAAt+B,EAAA,EAAA,IAAAqrB,EAAApF,gBAAAjmB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAHD,QAAA2/B,IAA4Bz+B;AAG1B,MAAAC;AAAA,EAAAnB,UAAAs+B,KAAAt+B,EAAA,EAAA,MAAAqrB,EAAAnF,eAE6B/kB,IAAAA,CAAAy+B,GAAAC,MAAA;AAC7B,IAAIxU,EAAQnF,gBAAiBV,MAAzB,CAAyC8Y,KAC7CA,EAAkBjO,GAAOhF,EAAQnF,aAAc2Z,CAAc;AAAA,EAAC,GAC/D7/B,QAAAs+B,GAAAt+B,EAAA,EAAA,IAAAqrB,EAAAnF,aAAAlmB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAHD,QAAA8/B,IAA+B3+B;AAG7B,MAAA+D;AAAA,EAAAlF,EAAA,EAAA,MAAA8lB,KAAA9lB,EAAA,EAAA,MAAA48B,KAAA58B,EAAA,EAAA,MAAA28B,KAAA38B,UAAAk/B,KAAAl/B,EAAA,EAAA,MAAA0pB,KAAA1pB,EAAA,EAAA,MAAA84B,KAAA94B,EAAA,EAAA,MAAAm/B,KAIGj6B,IAAAg6B,IAAA,OACC,gBAAA39B,EAACk7B,IAAA,EACO/S,MAAAA,GACMoP,YAAAA,GACAhT,YAAAA,GACK6W,iBAAAA,GACDC,gBAAAA,GACPuC,SAAAA,EAAAA,CAAc,GAE1Bn/B,QAAA8lB,GAAA9lB,QAAA48B,GAAA58B,QAAA28B,GAAA38B,QAAAk/B,GAAAl/B,QAAA0pB,GAAA1pB,QAAA84B,GAAA94B,QAAAm/B,GAAAn/B,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAgBU,QAAA2K,OAAG0gB,EAAQpF,cAAe,IAAIoF,EAAQnF,WAAY;AAAE,MAAA9a;AAAA,EAAApL,EAAA,EAAA,MAAAqyB,KAAAryB,EAAA,EAAA,MAAA0yB,KAAA1yB,EAAA,EAAA,MAAAyI,KAAAzI,UAAAyyB,KAAAzyB,EAAA,EAAA,MAAA+wB,KAAA/wB,EAAA,EAAA,MAAA2/B,KAAA3/B,EAAA,EAAA,MAAA8/B,KAAA9/B,EAAA,EAAA,MAAAsyB,KAAAtyB,EAAA,EAAA,MAAAusB,KAAAvsB,EAAA,EAAA,MAAA6yB,KAAA7yB,EAAA,EAAA,MAAAwyB,KAAAxyB,EAAA,EAAA,MAAA+6B,KAAA/6B,EAAA,EAAA,MAAAqrB,EAAArF,YAAAhmB,EAAA,EAAA,MAAA2K,KAd/DS,sBAACgnB,MACW,UAAA/G,EAAQrF,UACJqM,cAAAA,GACHC,WAAAA,GACSvB,oBAAAA,GACLyB,eAAAA,GACH/pB,YAAAA,GACAgqB,YAAAA,GACMC,kBAAAA,GACDiN,iBAAAA,GACGG,oBAAAA,GACPjN,aAAAA,GACGtG,gBAAAA,GACWwO,2BAAAA,GAClB,SAAApwB,EAAAA,CAAoD,GAC7D3K,QAAAqyB,GAAAryB,QAAA0yB,GAAA1yB,QAAAyI,GAAAzI,QAAAyyB,GAAAzyB,QAAA+wB,GAAA/wB,QAAA2/B,GAAA3/B,QAAA8/B,GAAA9/B,QAAAsyB,GAAAtyB,QAAAusB,GAAAvsB,QAAA6yB,GAAA7yB,QAAAwyB,GAAAxyB,QAAA+6B,GAAA/6B,EAAA,EAAA,IAAAqrB,EAAArF,UAAAhmB,QAAA2K,GAAA3K,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,SAAA7L,EAAA,EAAA,MAAAoL,KAAApL,UAAAkF,KA3BJ2G,sBAAC3J,GAAA,EAAa,QAAA,QAAY,MAAA,KAAQ,KAAA,KAC/BgD,UAAAA;AAAAA,IAAAA;AAAAA,IAWDkG;AAAAA,EAAAA,GAgBF,GAAQpL,QAAAoL,GAAApL,QAAAkF,GAAAlF,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA,GA5BR6L;AA4BQ;AAvIgB,SAAAV,GAAA4uB,GAAA;AAAA,SAwBmCA,EAAK1O;AAAS;AAxBjD,SAAAtf,GAAAyxB,GAAA;AAAA,SAyBkCzD,EAAK/O;AAAQ;AAzB/C,SAAA9e,GAAAuxB,GAAA;AAAA,SA0ByC1D,EAAKhJ;AAAe;AA1B7D,SAAAhkB,GAAA2wB,GAAA;AAAA,SA2B2C3D,EAAKgB;AAAiB;AC/KtF,MAAMgF,KAA0BA,CAAChgC,MAAwC;AAC9E,QAAM,CAACigC,GAAYC,CAAa,IAAI38B,GAAS,EAAK,GAC5C;AAAA,IAAE48B,UAAAA;AAAAA,IAAUC,YAAAA;AAAAA,IAAYC,kBAAAA;AAAAA,IAAkBC,UAAAA;AAAAA,IAAUn3B,MAAAA;AAAAA,IAAMmO,SAAAA;AAAAA,EAAAA,IAAYtX,GAEtEugC,IAAe,YAAY;AAC/BL,IAAAA,EAAc,EAAI;AAElB,QAAI;AACF,YAAMI,EAAAA,GACNhpB,EAAAA;AAAAA,IACF,QAAQ;AAAA,IACN,UAAA;AAEA4oB,MAAAA,EAAc,EAAK;AAAA,IACrB;AAAA,EACF;AAEA,2BACGM,GAAO,MAAP,EAAY,MAAAr3B,GAAY,cAAcmO,GACrC,UAAA;AAAA,IAAA,gBAAA9V,EAACg/B,GAAO,UAAP,EAAe;AAAA,sBACfA,GAAO,YAAP,EACC,UAAA,gBAAA3+B,EAAC2+B,GAAO,SAAP,EACC,UAAA;AAAA,MAAA,gBAAA3+B,EAAC2+B,GAAO,QAAP,EACC,UAAA;AAAA,QAAA,gBAAAh/B,EAACI,GAAA,EAAK,WAAU,aAAau+B,UAAAA,GAAS;AAAA,QACtC,gBAAA3+B,EAACg/B,GAAO,cAAP,EAAoB,SAAO,IAC1B,UAAA,gBAAAh/B,EAACi/B,IAAA,EAAY,MAAK,KAAA,CAAI,EAAA,CACxB;AAAA,MAAA,GACF;AAAA,MACA,gBAAAj/B,EAACg/B,GAAO,MAAP,EAAaH,UAAAA,EAAAA,CAAiB;AAAA,MAC/B,gBAAA7+B,EAACg/B,GAAO,QAAP,EACC,4BAACr+B,GAAA,EAAM,WAAU,OAAM,KAAI,KACzB,UAAA;AAAA,QAAA,gBAAAX,EAAC20B,IAAA,EAAO,SAAS7e,GAAS,UAAA,SAAK;AAAA,QAC/B,gBAAA9V,EAAC20B,IAAA,EAAO,SAAS8J,GAAY,SAAQ,SAAQ,cAAa,OAAM,SAASM,GACtEH,UAAAA,EAAAA,CACH;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GCvDaM,KAA4B,KAEnCC,yBAA6Bpd,IAAI,CAAC,YAAY,aAAa,qBAAqB,kBAAkB,WAAW,CAAC,GAI9Gqd,KAAuB,oBAAIrd,IAAI,CACnC,QACA,OACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,QACA,QACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,OACA,MACA,SACA,QACA,SACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,OACA,OACA,QACA,SACA,KAAK,CACN,GAEKsd,KAAsB,oBAAItd,IAAI,CAAC,QAAQ,OAAO,OAAO,QAAQ,OAAO,QAAQ,OAAO,OAAO,OAAO,QAAQ,MAAM,CAAC,GAEhHud,KAAeA,CAACC,MAAiB;AAErC,QAAMC,KADWD,EAAK1nB,MAAM,OAAO,EAAE4nB,SAASF,GACzB1nB,MAAM,GAAG,EAAE4nB,IAAAA;AAChC,SAAOD,IAAMA,EAAIx5B,YAAAA,IAAgB;AACnC,GAEa05B,KAAmBA,CAACl6B,OAMvBA,EAAMm6B,aAAa,MAAMn6B,EAAMo6B,aAAa,IAGzCC,KAAqBA,CAACr6B,MAM1Bk6B,GAAiBl6B,CAAK,IAAI05B,IAGtBY,KAAsBA,CAACP,MAAiB;AACnD,QAAMQ,IAAWR,EAAK1nB,MAAM,OAAO,EAAE4nB,SAASF;AAE9C,SAAOJ,GAAuB5c,IAAIwd,CAAQ,KAAKA,EAASC,SAAS,SAAS,KAAKD,EAASC,SAAS,eAAe;AAClH,GAEaC,KAAmBA,CAACV,MAAiB;AAChD,QAAMC,IAAMF,GAAaC,CAAI;AAC7B,SAAOC,EAAIp9B,SAAS,KAAKg9B,GAAqB7c,IAAIid,CAAG;AACvD,GAEaU,KAAkBA,CAACX,MAAiB;AAC/C,QAAMC,IAAMF,GAAaC,CAAI;AAC7B,SAAOC,EAAIp9B,SAAS,KAAKi9B,GAAoB9c,IAAIid,CAAG;AACtD,GC/DaW,KAA0BA,CAAC36B,MAAkC;AACxE,QAAM;AAAA,IACJ46B,MAAAA;AAAAA,IACAC,UAAAA;AAAAA,IACAC,YAAAA;AAAAA,IACAC,YAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,uBAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAC,cAAAA,IAAe;AAAA,IACfC,eAAAA;AAAAA,EAAAA,IACEp7B;AAEJ,SAAIy6B,GAAiBI,CAAQ,IACpB;AAAA,IACLjb,MAAM;AAAA,IACNib,UAAAA;AAAAA,IACAQ,SAASX,GAAgBG,CAAQ;AAAA,EAAA,IAIjCG,KAAe,CAACC,IACX;AAAA,IACLrb,MAAM;AAAA,IACNib,UAAAA;AAAAA,IACAS,mBAAmBpB,GAAiBU,CAAI;AAAA,IACxCM,gBAAAA;AAAAA,EAAAA,IAUG;AAAA,IACLtb,MAAM;AAAA,IACN2b,eARoBH,KAAiBI,IAAmB;AAAA,MACxDhjB,UAAUsiB;AAAAA,MACVriB,UAAUsiB;AAAAA,MACVU,SAASb,EAAKa;AAAAA,MACdC,SAASd,EAAKc;AAAAA,IAAAA,CACf;AAAA,IAICC,YAAYR,MAAiB;AAAA,EAAA;AAEjC,GAEaS,KAAe5iC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC1B;AAAA,IAAA0hC,MAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,uBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,cAAA7hC;AAAAA,EAAAA,IASIN,GADFmiC,IAAA7hC,MAAAG,SAAA,YAAAH;AAAwB,MAAAE;AAAA,EAAAP,EAAA,CAAA,MAAA2hC,KAAA3hC,EAAA,CAAA,MAAAkiC,KAAAliC,EAAA,CAAA,MAAA4hC,KAAA5hC,EAAA,CAAA,MAAAgiC,KAAAhiC,EAAA,CAAA,MAAA+hC,KAAA/hC,EAAA,CAAA,MAAA8hC,KAAA9hC,EAAA,CAAA,MAAA6hC,KAAA7hC,SAAAiiC,KAEZ1hC,IAAAmhC,GAAwB;AAAA,IAAAC,MAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,uBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,cAAAA;AAAAA,EAAAA,CASrC,GAACliC,OAAA2hC,GAAA3hC,OAAAkiC,GAAAliC,OAAA4hC,GAAA5hC,OAAAgiC,GAAAhiC,OAAA+hC,GAAA/hC,OAAA8hC,GAAA9hC,OAAA6hC,GAAA7hC,OAAAiiC,GAAAjiC,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AATF,QAAA4iC,IAAcriC;AASX,MAAAE;AAAA,SAAAT,EAAA,CAAA,MAAA2hC,KAAA3hC,UAAA4iC,EAAAN,gBAAAtiC,EAAA,EAAA,MAAA4iC,EAAAhB,YAAA5hC,EAAA,EAAA,MAAA4iC,EAAAR,WAAApiC,EAAA,EAAA,MAAA4iC,EAAAjc,QAAA3mB,EAAA,EAAA,MAAA4iC,EAAAX,kBAAAjiC,EAAA,EAAA,MAAA4iC,EAAAP,qBAAAriC,EAAA,EAAA,MAAA4iC,EAAAF,cAAA1iC,UAAA8hC,KAAA9hC,EAAA,EAAA,MAAA6hC,KAGDphC,IAAA,gBAAAc,EAACb,KAAO,IAAA,MAAwB,oBAAA,MAAc,UAAA,UAC3CkiC,UAAAA,EAAKjc,SAAU,6BACb9G,IAAA,EACWgiB,UAAAA,GACAC,UAAAA,GACD,SAAAH,EAAIa,SACJ,SAAAb,EAAIc,SACD,YAAAG,EAAKF,YACX,MAAAE,EAAKN,cAAa,IAExBM,EAAKjc,SAAU,WACjB,gBAAAplB,EAACshC,IAAA,EAA+B,SAAAD,EAAKR,QAAAA,CAAQ,IAE7C,gBAAA7gC,EAACuhC,IAAA,EACW,UAAAF,EAAKhB,UACI,mBAAAgB,EAAKP,mBACR,gBAAAO,EAAKX,eAAAA,CAAe,EAAA,CAG1C,GAAMjiC,OAAA2hC,GAAA3hC,EAAA,EAAA,IAAA4iC,EAAAN,cAAAtiC,EAAA,EAAA,IAAA4iC,EAAAhB,UAAA5hC,EAAA,EAAA,IAAA4iC,EAAAR,SAAApiC,EAAA,EAAA,IAAA4iC,EAAAjc,MAAA3mB,EAAA,EAAA,IAAA4iC,EAAAX,gBAAAjiC,EAAA,EAAA,IAAA4iC,EAAAP,mBAAAriC,EAAA,EAAA,IAAA4iC,EAAAF,YAAA1iC,QAAA8hC,GAAA9hC,QAAA6hC,GAAA7hC,QAAAS,KAAAA,IAAAT,EAAA,EAAA,GAnBNS;AAmBM,GAUJqiC,KAAuB/iC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC3B;AAAA,IAAA2hC,UAAAA;AAAAA,IAAAK,gBAAAA;AAAAA,EAAAA,IAAqCliC;AAAM,MAAAM;AAAA,EAAAL,EAAA,CAAA,MAAA4hC,KAAA5hC,SAAAiiC,KAKpC5hC,IAAA4hC,IACC,gBAAA1gC,EAAC20B,IAAA,EAAY,MAAA,MAAa,SAAA,WAAsB,cAAA,wBAAwB0L,CAAQ,IAAaK,SAAAA,GAAgB,4BAE7G,IAHD,MAIOjiC,OAAA4hC,GAAA5hC,OAAAiiC,GAAAjiC,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,SAAAK,KANZE,sBAACG,GAAA,EAAM,GAAA,MAAe,WAAA,aAAwB,aAAA,gBAAkB,IAAA,MAC9D,4BAACyxB,IAAA,EAAiB,OAAA,qCAA6C,UAAA,MAC5D9xB,aAKH,GACF,GAAML,OAAAK,GAAAL,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GARNO;AAQM,GAQJsiC,KAAwB9iC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC5B;AAAA,IAAAmiC,SAAAA;AAAAA,EAAAA,IAAoBriC,GACpBsF,IAAc+8B,IAAA,8BAAA;AAAqE,MAAA/hC;AAAA,SAAAL,SAAAqF,KAGjFhF,IAAA,gBAAAkB,EAACb,GAAA,EAAM,GAAA,MAAe,WAAA,aAAwB,aAAA,gBAAkB,IAAA,MAC9D,UAAA,gBAAAa,EAAC4wB,IAAA,EAAkB9sB,OAAAA,GAAgB,UAAA,MAAI,GACzC,GAAMrF,OAAAqF,GAAArF,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFNK;AAEM,GCvIG0iC,KAAmBhjC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC9B;AAAA,IAAAoF,OAAAA;AAAAA,IAAA29B,aAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAA5zB,UAAAA;AAAAA,EAAAA,IAAwDtP;AAAM,MAAAM;AAAA,EAAAL,EAAA,CAAA,MAAAgjC,KAAAhjC,SAAAijC,KAAAjjC,EAAA,CAAA,MAAAqP,KAKvDhP,IAAA2iC,IACC,gBAAAzhC,EAAC20B,IAAA,EAAY,MAAA,MAAa,SAAA,WAAmB+M,SAAAA,GAAwB5zB,SAAAA,GAClE2zB,UAAAA,EAAAA,CACH,IAHD,MAIOhjC,OAAAgjC,GAAAhjC,OAAAijC,GAAAjjC,OAAAqP,GAAArP,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,EAAA,CAAA,MAAAK,KAAAL,SAAAqF,KANZ9E,sBAACG,GAAA,EAAO,IAAA,MAAO,GAAA,MAAe,WAAA,aAAwB,aAAA,gBACpD,4BAACyxB,IAAA,EAAkB9sB,OAAAA,GAAgB,UAAA,MAChChF,aAKH,GACF,GAAML,OAAAK,GAAAL,OAAAqF,GAAArF,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GARNO;AAQM,GAIJ2iC,KAAyB,CAAC,SAAS,UAAU,OAAO,GAE7CC,KAAqBA,MAAA;AAAA,QAAAnjC,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAChCjB,IAAA,gBAAAkB,EAACW,KACG,GAAA,SACC,IAAA,MACO,WAAA,aACE,aAAA,gBACV,GAAA,MACE,KAAA,OACC,MAAA,UACK,aAAA,QACC,cAAA,gBAEVghC,UAAAA,GAAsB70B,IAAKlD,EAE3B,EAAA,CACH,GAAQnL,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAdRK;AAcQ;AAfwB,SAAA8K,GAAA+b,GAAA;AAAA,SAa5B,gBAAA3lB,EAAC6hC,MAAqB,GAAA,QAAS,GAAA,QAAoB,cAAA,QAApClc,CAAwC;AAAG;ACPhE,MAAMmc,KAA6BA,CAACt8B,MAAsC;AACxE,QAAM;AAAA,IAAEg7B,aAAAA;AAAAA,IAAauB,iBAAAA;AAAAA,IAAiBC,WAAAA;AAAAA,IAAWC,aAAAA;AAAAA,IAAaC,YAAAA;AAAAA,IAAYxB,gBAAAA;AAAAA,EAAAA,IAAmBl7B;AAC7F,MAAI1B,IAAQ,mCACR29B,IAAcQ,IAAc,cAAchjC,QAC1C6O,IAAqCm0B,IAAc;AAAM,IAAKC;MAAejjC;AAEjF,SAAIuhC,MACF18B,IAAQ,qCACR29B,IAAcQ,IAAc,mBAAmBhjC,QAC/C6O,IAAWA,MAAM;AACf4yB,IAAAA,IAAAA,GACKwB,EAAAA;AAAAA,EACP,IAGEH,MACFj+B,IAAQ,yCACR29B,IAAcQ,IAAc,cAAchjC,QAC1C6O,IAAWm0B,IAAc;AAAM,IAAKC,EAAAA;AAAAA,MAAejjC,SAGjD+iC,MACFl+B,IAAQ,mCACR29B,IAAcQ,IAAc,cAAchjC,QAC1C6O,IAAWm0B,IAAc;AAAM,IAAKC,EAAAA;AAAAA,MAAejjC,SAG9C;AAAA,IAAE6E,OAAAA;AAAAA,IAAO29B,aAAAA;AAAAA,IAAa3zB,UAAAA;AAAAA,EAAAA;AAC/B,GAEaq0B,KAAkB3jC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC7B;AAAA,IAAA0hC,MAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAA/xB,YAAAA;AAAAA,IAAAgyB,aAAAA;AAAAA,IAAAuB,iBAAAA;AAAAA,IAAAK,cAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAJ,aAAAA;AAAAA,IAAAK,oBAAAA;AAAAA,IAAAN,WAAAA;AAAAA,IAAAN,eAAAA;AAAAA,IAAAQ,YAAAA;AAAAA,IAAAzB,uBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,cAAA7hC;AAAAA,EAAAA,IAkBIN,GADFmiC,IAAA7hC,MAAAG,SAAA,YAAAH;AAGF,MAAI,CAAC0P;AAAU,WAAS;AAExB,MAAI4zB,GAAY;AAAA,QAAApjC;AAAA,WAAAP,EAAA,CAAA,MAAA2hC,KAAA3hC,EAAA,CAAA,MAAAkiC,KAAAliC,EAAA,CAAA,MAAA4hC,KAAA5hC,SAAAgiC,KAAAhiC,EAAA,CAAA,MAAA8hC,KAAA9hC,EAAA,CAAA,MAAA6hC,KAAA7hC,EAAA,CAAA,MAAAiiC,KAEZ1hC,sBAACoiC,IAAA,EACOhB,MAAAA,GACIC,UAAAA,GACEC,YAAAA,GACAC,YAAAA,GACC,aAAA,IACUE,uBAAAA,GACPC,gBAAAA,GACFC,cAAAA,EAAAA,CAAY,GAC1BliC,OAAA2hC,GAAA3hC,OAAAkiC,GAAAliC,OAAA4hC,GAAA5hC,OAAAgiC,GAAAhiC,OAAA8hC,GAAA9hC,OAAA6hC,GAAA7hC,OAAAiiC,GAAAjiC,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GATFO;AAAAA,EASE;AAIN,MAAI,CAACqjC,KAAD,CAAoBC,GAAkB;AAAA,QAAAtjC;AAAA,IAAAP,SAAAwjC,KAAAxjC,EAAA,CAAA,MAAAsjC,KAAAtjC,EAAA,EAAA,MAAA+hC,KAAA/hC,EAAA,EAAA,MAAAujC,KAAAvjC,UAAAyjC,KAAAzjC,EAAA,EAAA,MAAAiiC,KACC1hC,IAAA8iC,GAA2B;AAAA,MAAAtB,aAAAA;AAAAA,MAAAuB,iBAAAA;AAAAA,MAAAC,WAAAA;AAAAA,MAAAC,aAAAA;AAAAA,MAAAC,YAAAA;AAAAA,MAAAxB,gBAAAA;AAAAA,IAAAA,CAOnE,GAACjiC,OAAAwjC,GAAAxjC,OAAAsjC,GAAAtjC,QAAA+hC,GAAA/hC,QAAAujC,GAAAvjC,QAAAyjC,GAAAzjC,QAAAiiC,GAAAjiC,QAAAO,KAAAA,IAAAP,EAAA,EAAA;AAPF,UAAA;AAAA,MAAAqF,OAAAA;AAAAA,MAAA29B,aAAAA;AAAAA,MAAA3zB,UAAAA;AAAAA,IAAAA,IAAyC9O;AAOtC,QAAAE;AAAA,WAAAT,EAAA,EAAA,MAAAgjC,KAAAhjC,EAAA,EAAA,MAAAijC,KAAAjjC,EAAA,EAAA,MAAAqP,KAAArP,UAAAqF,KAGD5E,IAAA,gBAAAc,EAACwhC,IAAA,EAAwB19B,OAAAA,GAAoB29B,aAAAA,GAA4BC,eAAAA,GAAyB5zB,UAAAA,GAAQ,GAAIrP,QAAAgjC,GAAAhjC,QAAAijC,GAAAjjC,QAAAqP,GAAArP,QAAAqF,GAAArF,QAAAS,KAAAA,IAAAT,EAAA,EAAA,GAA9GS;AAAAA,EAA8G;AAIlH,MAAIojC,GAAkB;AAAA,QAAAtjC;AAAA,WAAAP,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACbf,sBAAC4iC,IAAA,EAAkB,GAAGnjC,QAAAO,KAAAA,IAAAP,EAAA,EAAA,GAAtBO;AAAAA,EAAsB;AAC9B,MAAAA;AAAA,SAAAP,EAAA,EAAA,MAAA2hC,KAAA3hC,EAAA,EAAA,MAAAkiC,KAAAliC,EAAA,EAAA,MAAA4hC,KAAA5hC,EAAA,EAAA,MAAAgiC,KAAAhiC,EAAA,EAAA,MAAA+hC,KAAA/hC,EAAA,EAAA,MAAA8hC,KAAA9hC,EAAA,EAAA,MAAA6hC,KAAA7hC,UAAAiiC,KAGC1hC,sBAACoiC,MACOhB,MAAAA,GACIC,UAAAA,GACEC,YAAAA,GACAC,YAAAA,GACCC,aAAAA,GACUC,uBAAAA,GACPC,gBAAAA,GACFC,cAAAA,EAAAA,CAAY,GAC1BliC,QAAA2hC,GAAA3hC,QAAAkiC,GAAAliC,QAAA4hC,GAAA5hC,QAAAgiC,GAAAhiC,QAAA+hC,GAAA/hC,QAAA8hC,GAAA9hC,QAAA6hC,GAAA7hC,QAAAiiC,GAAAjiC,QAAAO,KAAAA,IAAAP,EAAA,EAAA,GATFO;AASE,GC/FOujC,KAA4BA,CAAC/8B,MASpC;AACJ,QAAM;AAAA,IAAEgJ,YAAAA;AAAAA,IAAY6zB,gBAAAA;AAAAA,IAAgB7B,aAAAA;AAAAA,IAAauB,iBAAAA;AAAAA,IAAiBK,cAAAA;AAAAA,IAAcI,eAAAA;AAAAA,IAAenC,UAAAA;AAAAA,EAAAA,IAAa76B;AAE5G,SACEgJ,KAAc,CAAC6zB,KAAkB,CAAC7B,KAAe,CAACuB,KAAmB,CAACK,KAAgBI,MAAkBnC;AAE5G,GAEaoC,KAA2BA,CAACj9B,MAInC;AACJ,QAAM;AAAA,IAAEg9B,eAAAA;AAAAA,IAAenC,UAAAA;AAAAA,IAAUgC,gBAAAA;AAAAA,EAAAA,IAAmB78B;AAEpD,SAAIg9B,MAAkBnC,KAAYgC,IACzB,OAGFG;AACT,GAEME,KAAuBA,CAACl9B,MASxB;AACJ,QAAM;AAAA,IAAE66B,UAAAA;AAAAA,IAAU7xB,YAAAA;AAAAA,IAAYvB,YAAAA;AAAAA,IAAYo1B,gBAAAA;AAAAA,IAAgB7B,aAAAA;AAAAA,IAAauB,iBAAAA;AAAAA,IAAiBK,cAAAA;AAAAA,IAAcF,YAAAA;AAAAA,EAAAA,IACpG18B,GACI,CAACk8B,GAAeiB,CAAc,IAAI5gC,GAAS,EAAK,GAChD,CAACygC,GAAeI,CAAgB,IAAI7gC,GAAwB,IAAI,GAChE,CAACigC,GAAWa,CAAY,IAAI9gC,GAAS,EAAK,GAE1C+gC,IAAW,YAAY;AAC3B,QAAI,GAACZ,KAAcR,IAEnBkB;AAAAA,MAAAA,EAAiBvC,CAAQ,GACzBwC,EAAa,EAAK,GAClBF,EAAe,EAAI;AACnB,UAAI;AACF,cAAMT,EAAW7B,CAAQ;AAAA,MAC3B,QAAQ;AACNuC,QAAAA,EAAiB,IAAI,GACrBC,EAAa,EAAI;AAAA,MACnB,UAAA;AACEF,QAAAA,EAAe,EAAK;AAAA,MACtB;AAAA;AAAA,EACF,GAEML,IAAqBC,GAA0B;AAAA,IACnD/zB,YAAAA;AAAAA,IAEA6zB,gBAAAA;AAAAA,IACA7B,aAAAA;AAAAA,IACAuB,iBAAAA;AAAAA,IACAK,cAAAA;AAAAA,IACAI,eAAAA;AAAAA,IACAnC,UAAAA;AAAAA,EAAAA,CACD;AAEDz3B,SAAAA,GAAU,MAAM;AACdg6B,IAAAA,EAAkB/5B,OAAY45B,GAAyB;AAAA,MAAED,eAAe35B;AAAAA,MAASw3B,UAAAA;AAAAA,MAAUgC,gBAAAA;AAAAA,IAAAA,CAAgB,CAAC;AAAA,EAC9G,GAAG,CAAChC,GAAUgC,CAAc,CAAC,GAE7Bz5B,GAAU,MAAM;AACd,IAAI,CAACs5B,KAAc,CAACI,KAAsBN,KAIrCc,EAAAA;AAAAA,EACP,CAAC,GAEM;AAAA,IACLpB,eAAAA;AAAAA,IACAM,WAAAA;AAAAA,IACAM,oBAAoBj8B,EAAQ67B,KAAeI,KAAsB,CAACN;AAAAA,IAClEc,UAAAA;AAAAA,EAAAA;AAEJ,GAEaC,KAAWvkC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACtB;AAAA,IAAA0hC,MAAAA;AAAAA,IAAAnzB,YAAAnO;AAAAA,IAAA0P,YAAAxP;AAAAA,IAAAgkC,kBAAAA;AAAAA,IAAAv5B,UAAAA;AAAAA,IAAAy4B,YAAAA;AAAAA,IAAAzB,uBAAAvhC;AAAAA,IAAAwhC,gBAAAA;AAAAA,IAAAC,cAAAthC;AAAAA,EAAAA,IAUIb,GARFyO,IAAAnO,MAAAG,SAAA,KAAAH,GACA0P,IAAAxP,MAAAC,SAAA,KAAAD,GAIAyhC,IAAAvhC,MAAAD,SAAA,KAAAC,GAEAyhC,IAAAthC,MAAAJ,SAAA,YAAAI,GAGFghC,IAAiBD,EAAIc,WAAYd,EAAIa,WAApB,WACjBX,IAAmBF,EAAIE,cAAJ,IACnBC,IAAmBH,EAAIG,cAAJ;AAAsB,MAAA/gC;AAAA,EAAAf,SAAA2hC,KACrB5gC,IAAAqgC,GAAmBO,CAAI,GAAC3hC,OAAA2hC,GAAA3hC,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAA5C,QAAA+hC,IAAoBhhC;AAAyB,MAAAE;AAAA,EAAAjB,SAAA4hC,KACrB3gC,IAAAogC,GAAoBO,CAAQ,GAAC5hC,OAAA4hC,GAAA5hC,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAArD,QAAAsjC,IAAwBriC;AAA8B,MAAAC;AAAA,EAAAlB,SAAA4hC,KACjC1gC,IAAAsgC,GAAiBI,CAAQ,GAAC5hC,OAAA4hC,GAAA5hC,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAA/C,QAAA2jC,IAAqBziC,GACrB0iC,IAAuBjC,EAAIE,eAAgBrhC,UAAamhC,EAAIG,eAAgBthC,QAM7DW,IAAA4gC,KAAA,CAAgBC;AAAqB,MAAA98B;AAAA,EAAAlF,EAAA,CAAA,MAAA4hC,KAAA5hC,EAAA,CAAA,MAAA4jC,KAAA5jC,EAAA,CAAA,MAAA2jC,KAAA3jC,EAAA,CAAA,MAAA+P,KAAA/P,EAAA,EAAA,MAAAsjC,KAAAtjC,EAAA,EAAA,MAAAwO,KAAAxO,EAAA,EAAA,MAAAyjC,KAAAzjC,UAAAmB,KALoC+D,IAAA;AAAA,IAAA08B,UAAAA;AAAAA,IAAA7xB,YAAAA;AAAAA,IAAAvB,YAAAA;AAAAA,IAAAo1B,gBAAAA;AAAAA,IAAA7B,aAKzE5gC;AAAAA,IAAqCmiC,iBAAAA;AAAAA,IAAAK,cAAAA;AAAAA,IAAAF,YAAAA;AAAAA,EAAAA,GAInDzjC,OAAA4hC,GAAA5hC,OAAA4jC,GAAA5jC,OAAA2jC,GAAA3jC,OAAA+P,GAAA/P,QAAAsjC,GAAAtjC,QAAAwO,GAAAxO,QAAAyjC,GAAAzjC,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AATD,QAAA;AAAA,IAAAijC,eAAAA;AAAAA,IAAAM,WAAAA;AAAAA,IAAAM,oBAAAA;AAAAA,IAAAQ,UAAAA;AAAAA,EAAAA,IAAmEJ,GAAqB/+B,CASvF,GAMgByF,IAAA6D,IAAA,kBAAA;AAA6C,MAAApD;AAAA,EAAApL,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAOlD8J,IAAA;AAAA,IAAAlH,aAAe;AAAA,EAAA,GAAiBlE,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,EAAA,EAAA,MAAA2hC,KAAA3hC,UAAA+P,KAAA/P,EAAA,EAAA,MAAAukC,KAGxC14B,sBAAC24B,IAAA,EAAqB7C,MAAAA,GAAkB5xB,YAAAA,GAA8Bw0B,kBAAAA,GAAgB,GAAIvkC,QAAA2hC,GAAA3hC,QAAA+P,GAAA/P,QAAAukC,GAAAvkC,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAY3E,QAAAgN,IAAApF,EAAQ67B;AAAW,MAAAv2B;AAAA,EAAAlN,EAAA,EAAA,MAAA2hC,KAAA3hC,EAAA,EAAA,MAAAkiC,KAAAliC,EAAA,EAAA,MAAA4hC,KAAA5hC,EAAA,EAAA,MAAA4jC,KAAA5jC,EAAA,EAAA,MAAAgiC,KAAAhiC,UAAA2jC,KAAA3jC,EAAA,EAAA,MAAA+P,KAAA/P,EAAA,EAAA,MAAAsjC,KAAAtjC,EAAA,EAAA,MAAA+hC,KAAA/hC,EAAA,EAAA,MAAAijC,KAAAjjC,EAAA,EAAA,MAAAqkC,KAAArkC,EAAA,EAAA,MAAAujC,KAAAvjC,EAAA,EAAA,MAAA8hC,KAAA9hC,EAAA,EAAA,MAAA6hC,KAAA7hC,EAAA,EAAA,MAAAiiC,KAAAjiC,EAAA,EAAA,MAAA6jC,KAAA7jC,UAAAgN,KAVlCE,sBAACw2B,MACO/B,MAAAA,GACIC,UAAAA,GACEC,YAAAA,GACAC,YAAAA,GACA/xB,YAAAA,GACCgyB,aAAAA,GACIuB,iBAAAA,GACHK,cAAAA,GACEC,gBAAAA,GACH,aAAA52B,GACO62B,oBAAAA,GACTN,WAAAA,GACIN,eAAAA,GACHoB,YAAAA,GACWrC,uBAAAA,GACPC,gBAAAA,GACFC,cAAAA,EAAAA,CAAY,GAC1BliC,QAAA2hC,GAAA3hC,QAAAkiC,GAAAliC,QAAA4hC,GAAA5hC,QAAA4jC,GAAA5jC,QAAAgiC,GAAAhiC,QAAA2jC,GAAA3jC,QAAA+P,GAAA/P,QAAAsjC,GAAAtjC,QAAA+hC,GAAA/hC,QAAAijC,GAAAjjC,QAAAqkC,GAAArkC,QAAAujC,GAAAvjC,QAAA8hC,GAAA9hC,QAAA6hC,GAAA7hC,QAAAiiC,GAAAjiC,QAAA6jC,GAAA7jC,QAAAgN,GAAAhN,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA;AAAA,MAAAmN;AAAA,SAAAnN,EAAA,EAAA,MAAAgL,KAAAhL,EAAA,EAAA,MAAA6L,KAAA7L,EAAA,EAAA,MAAAkN,KAAAlN,UAAA2K,KAjCJwC,IAAA,gBAAAvL,EAAClB,KACa,eAAA,aACL,QAAA,aACM,aAAAiK,GACA,cAAA,MACJ,UAAA,WACN,IAAA,MACG,OAAA,QACD,MAAA,QACM,YAAA,2BACH,QAAAS,GACCJ,SAAAA,GAETa,UAAAA;AAAAA,IAAAA;AAAAA,IAEAqB;AAAAA,EAAAA,GAmBF,GAAMlN,QAAAgL,GAAAhL,QAAA6L,GAAA7L,QAAAkN,GAAAlN,QAAA2K,GAAA3K,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA,GAlCNmN;AAkCM,GAIGq3B,KAAiBzkC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAA0hC,MAAAA;AAAAA,IAAA5xB,YAAA1P;AAAAA,IAAAkkC,kBAAAA;AAAAA,EAAAA,IAAsDxkC,GAAxCgQ,IAAA1P,MAAAG,SAAA,KAAAH,GACduhC,IAAiBD,EAAIc,WAAYd,EAAIa,WAApB,WACjBtB,IAAkBS,EAAIT,aAAJ,GAClBC,IAAkBQ,EAAIR,aAAJ,GAUA5gC,IAAAwP,IAAA,cAAA,QAGMtP,IAAAsP,IAAA,MAAA;AAAuB,MAAAnP;AAAA,EAAAZ,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAOnCV,IAAA;AAAA,IAAA2N,IAAM;AAAA,EAAA,GAAMvO,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,SAAAukC,KACXxjC,IAAAA,MAAMwjC,IAAAA,GAAoBvkC,OAAAukC,GAAAvkC,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAIrB,QAAAiB,IAAA8O,IAAA,aAAA;AAAkC,MAAA7O;AAAA,EAAAlB,SAAAukC,KAGrCrjC,IAAA6C,CAAAA,MAAA;AACPA,IAAAA,EAAKkI,gBAAAA,GACLs4B,IAAAA;AAAAA,EAAoB,GACrBvkC,OAAAukC,GAAAvkC,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAA,MAAAmB;AAAA,EAAAnB,SAAA+P,KAGA5O,IAAA4O,sBAAczD,IAAA,EAAkB,MAAA,IAAE,IAAO,gBAAA/K,EAACkP,IAAA,EAAmB,MAAA,GAAA,CAAE,GAAIzQ,OAAA+P,GAAA/P,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,CAAA,MAAAiB,KAAAjB,SAAAkB,KAAAlB,EAAA,CAAA,MAAAmB,KAVtE+D,IAAA,gBAAA3D,EAACkD,IAAA,EACa,cAAAxD,GACJ,SAAA,SACH,MAAA,OACI,SAAAC,GAIG,YAAA,GAEXC,UAAAA,GACH,GAAanB,OAAAiB,GAAAjB,OAAAkB,GAAAlB,OAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,EAAA3K,UAAA2hC,EAAA8C,UAAAzkC,UAAA2hC,EAAAc,WAAAziC,UAAA2hC,EAAAa,WAAAxiC,UAAA4hC,KAGVj3B,IAAAg3B,EAAI8C,WAAY,YACf,gBAAA7iC,EAACD,KAAQ,IAAA,QAAiB,WAAA,MACxB,UAAA;AAAA,IAAA,gBAAAJ,EAACI,GAAA,EAAQ,IAAA,QAAa,OAAA,YAA0B,gBAAA,gBAAkB,IAAA,MAC/DggC,UAAAA,EAAIa,QAAAA,CACP;AAAA,sBACC9hC,GAAA,EAAO,IAAA,QAAe,SAAA,eAAyB,YAAA,UAAuB,eAAA,UAAY,IAAA,MACjF,UAAA,gBAAAa,EAACkP,IAAA,EAAmB,MAAA,IAAE,GACxB;AAAA,IACCkxB,EAAIc;AAAAA,EAAAA,EAAAA,CACP,IACEd,EAAI8C,WAAY,8BACjB9iC,GAAA,EAAQ,IAAA,QAAa,OAAA,YAA0B,gBAAA,gBAAyB,WAAA,MACtEigC,aACH,IAEA,gBAAArgC,EAACI,KAAQ,IAAA,QAAiB,WAAA,MACvBigC,UAAAA,EAAAA,CACH,GACD5hC,EAAA,EAAA,IAAA2hC,EAAA8C,QAAAzkC,EAAA,EAAA,IAAA2hC,EAAAc,SAAAziC,EAAA,EAAA,IAAA2hC,EAAAa,SAAAxiC,QAAA4hC,GAAA5hC,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,EAAApL,EAAA,EAAA,MAAA4hC,KAAA5hC,UAAA2K,KAnBHS,IAAA,gBAAA7J,EAACb,GAAA,EAAU,MAAA,GAAY,UAAA,UAAsB,cAAA,YAAsB,YAAA,UAAgBkhC,OAAAA,GAChFj3B,UAAAA,GAmBH,GAAM3K,QAAA4hC,GAAA5hC,QAAA2K,GAAA3K,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,EAAA,EAAA,MAAAkhC,KAAAlhC,UAAAmhC,KAENt1B,IAAA,gBAAAtK,EAACb,GAAA,EAAgB,YAAA,GACf,UAAA,gBAAAa,EAAC0jB,MAAmB,SAAA,SAAmBic,WAAAA,GAAsBC,WAAAA,EAAAA,CAAS,EAAA,CACxE,GAAMnhC,QAAAkhC,GAAAlhC,QAAAmhC,GAAAnhC,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,SAAAhN,UAAAO,KAAAP,EAAA,EAAA,MAAAoL,KAAApL,EAAA,EAAA,MAAA6L,KAAA7L,EAAA,EAAA,MAAAS,KAAAT,UAAAe,KAAAf,EAAA,EAAA,MAAAkF,KA1DR8H,sBAACuV,IAAA,EACa,eAAA,oBACI,iBAAA,4BACb,IAAA,MACA,IAAA,OACQ,YAAA,UACI,gBAAA,iBACD,cAAAhiB,GACF,aAAA,gBACI,iBAAA,MACI,oBAAAE,GACX,UAAA,UACL,KAAA,KACG,QAAA,KACJ,IAAA,MACI,QAAA,WACI,YAAA,yBACH,QAAAG,GACC,SAAAG,GACL,KAAA,MAEJmE,UAAAA;AAAAA,IAAAA;AAAAA,IAaAkG;AAAAA,IAsBAS;AAAAA,EAAAA,GAGF,GAAO7L,QAAAO,GAAAP,QAAAoL,GAAApL,QAAA6L,GAAA7L,QAAAS,GAAAT,QAAAe,GAAAf,QAAAkF,GAAAlF,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA,GA3DPgN;AA2DO,GCtQE03B,KAAuBA,MAAA;AAAA,QAAA1kC,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAClCjB,sBAAC6B,GAAA,EAAQ,GAAA,QAAY,MAAA,KAAQ,KAAA,KAAO,IAAA,MAClC,4BAAC6L,IAAA,EAAgB,MAAA,KAAS,MAAA,KAAkB,cAAA;AAAA,IAAA42B,GAAK;AAAA,IAAI1W,QAAU;AAAA,EAAA,GAC7D,UAAA,gBAAA1sB,EAAC4wB,IAAA,EAAiB,OAAA,uBAAkC,aAAA,2CAAmD,UAAA,MAAI,EAAA,CAC7G,EAAA,CACF,GAAQnyB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAJRK;AAIQ,GCJJukC,KAAqB,IACrBC,KAAwB,IACxBC,KAAkB,IAClBC,KAAwB,IACxBC,KAAuB,IACvBC,KAAkB,GASlBC,KAAqBA,MAAMN,KAAqBI,KAAuBC,IAIhEE,KAAyBA,CAACp+B,MAAuC;AAC5E,QAAM;AAAA,IAAE46B,MAAAA;AAAAA,IAAMyD,aAAAA;AAAAA,IAAapD,uBAAAA,IAAwB;AAAA,IAAOE,cAAAA,IAAe;AAAA,EAAA,IAAcn7B;AAEvF,MAAIq+B,UAAoBL,KAAwBE;AAIhD,MADI,EADmBtD,EAAKE,eAAerhC,UAAamhC,EAAKG,eAAethC,WAExE4gC,GAAmBO,CAAI,KAAK,CAACK,UAA8BkD,GAAAA;AAE/D,QAAM;AAAA,IAAEG,oBAAAA;AAAAA,IAAoBC,kBAAAA;AAAAA,IAAkBC,UAAAA;AAAAA,EAAAA,IAAahD,GAAkB;AAAA,IAC3EhjB,UAAUoiB,EAAKE,cAAc;AAAA,IAC7BriB,UAAUmiB,EAAKG,cAAc;AAAA,IAC7BU,SAASb,EAAKa;AAAAA,IACdC,SAASd,EAAKc;AAAAA,EAAAA,CACf,GACK+C,IAActD,MAAiB,UAAUoD,IAAmBD;AAClE,MAAIG,MAAgB,KAAKD,MAAa,UAAUL,GAAAA;AAEhD,QAAMO,IAAaD,IAAcX,KAAwBU,IAAWT;AACpE,SAAOF,KAAqBa,IAAaR;AAC3C,GCVMS,KAAcA,CAAC/D,MAAeA,EAAKc,WAAWd,EAAKa,WAAW,WAC9DmD,KAA+B,IAExBC,KAA0BA,CAAC7+B,MAAwC;AAC9E,QAAM;AAAA,IAAE8+B,OAAAA;AAAAA,IAAOC,gBAAAA;AAAAA,IAAgBC,qBAAAA;AAAAA,IAAqB7D,cAAAA;AAAAA,IAAc8D,YAAAA;AAAAA,IAAYC,UAAAA;AAAAA,EAAAA,IAAal/B;AAC3F,MAAImK,IAAS;AACb,WAASg1B,IAAYF,GAAYE,IAAYD,GAAUC,KAAa,GAAG;AACrE,UAAMvE,IAAOkE,EAAMK,CAAS,GACtBpF,IAAO4E,GAAY/D,CAAI;AAC7BzwB,IAAAA,KAAUi0B,GAAuB;AAAA,MAC/BxD,MAAAA;AAAAA,MACAyD,aAAaU,EAAehiB,IAAIgd,CAAI;AAAA,MACpCkB,uBAAuB+D,EAAoBjiB,IAAIgd,CAAI;AAAA,MACnDoB,cAAAA;AAAAA,IAAAA,CACD;AAAA,EACH;AACA,SAAOhxB;AACT,GAEai1B,KAA6BA,CAACp/B,MAA2C;AACpF,QAAM;AAAA,IAAE8+B,OAAAA;AAAAA,IAAOO,kBAAAA;AAAAA,IAAkBN,gBAAAA;AAAAA,IAAgBO,kBAAAA;AAAAA,IAAkBC,0BAAAA;AAAAA,EAAAA,IAA6Bv/B;AAChG,MAAIw/B,IAAqBH,GACrBI,IAA0BJ,IAAmB,YAAYA,CAAgB,KAAK;AAClF,QAAMK,IAA0BJ,GAAkBn3B,WAAW,oBAAoBm3B,EAAiBt7B,KAAK,MACjG27B,IACJD,MAA4B,QAAQH,MAA6BG;AAEnE,EAAIJ,GAAkBn3B,WAAW,qBAAqBm3B,EAAiBvF,SACrEyF,IAAqBF,EAAiBvF,MACtC0F,IAA0B,WAAWH,EAAiBt7B,EAAE,IAAIs7B,EAAiBvF,IAAI;AAGnF,MAAI6F,IAAoBH;AACxB,MAAID,KAAsBC,GAAyB;AACjD,UAAMI,IAA+Bd,EAAehiB,IAAIyiB,CAAkB,IAAI,cAAc;AAC5FI,IAAAA,IAAoB,GAAGH,CAAuB,IAAII,CAA4B;AAAA,EAChF;AAEA,QAAMC,IAAsBN,IACxBV,EAAMhS,UAAW8N,OAAS+D,GAAY/D,CAAI,MAAM4E,CAAkB,IAClE,IACEO,IACJD,KAAuB,KACvBR,GAAkBn3B,WAAW,qBAC7Bm3B,EAAiBhgB,cAAc,QAC/B,CAACqgB;AAEH,SAAO;AAAA,IACLH,oBAAAA;AAAAA,IACAI,mBAAAA;AAAAA,IACAF,yBAAAA;AAAAA,IACAI,qBAAAA;AAAAA,IACAC,8BAAAA;AAAAA,IACAJ,4BAAAA;AAAAA,EAAAA;AAEJ,GAEaK,KAA2BA,CAAChgC,MAInC;AACJ,QAAM;AAAA,IAAEigC,SAAAA;AAAAA,IAASH,qBAAAA;AAAAA,IAAqBC,8BAAAA;AAAAA,EAAAA,IAAiC//B;AACvE,MAAI,CAAC+/B,KAAgCE,EAAQl/B,SAAS++B,CAAmB,EAAG,QAAOG;AAEnF,QAAMC,IAAmBC,KAAKC,IAAI,GAAGN,IAAsBlB,EAA4B,GACjFyB,IAAgBzhB,MAAM0hB,KAC1B;AAAA,IAAE1jC,QAAQkjC,IAAsBI,IAAmB;AAAA,EAAA,GACnD,CAACrnB,GAAG7I,MAAUkwB,IAAmBlwB,CACnC;AAEA,SAAO4O,MAAM0hB,KAAK,oBAAI/jB,IAAI,CAAC,GAAG0jB,GAAS,GAAGI,CAAa,CAAC,CAAC,EAAEld,KAAK,CAACC,GAAGC,MAAMD,IAAIC,CAAC;AACjF,GAEakd,KAAuBA,CAACC,MACnC5hB,MAAM0hB,KAAKE,GAAeC,iBAA8B,cAAc,KAAK,CAAA,CAAE,EAC1EhgC,OAAQigC,OAAYA,EAAQC,cAAc,2BAA2B,CAAC,EACtEr5B,IAAKo5B,CAAAA,OAAa;AAAA,EAAEA,SAAAA;AAAAA,EAAS1wB,OAAO6Q,OAAO6f,EAAQE,QAAQ5wB,KAAK;AAAE,EAAE,EACpEvP,OAAO,CAACC,MAAmCmgB,OAAOggB,UAAUngC,EAAKsP,KAAK,CAAC,EACvEmT,KAAK,CAACC,GAAGC,MAAMD,EAAEpT,QAAQqT,EAAErT,KAAK,GAExB8wB,KAAyBA,CAAC9gC,MAAuE;AAC5G,QAAM;AAAA,IAAE0gC,SAAAA;AAAAA,IAASF,eAAAA;AAAAA,EAAAA,IAAkBxgC;AACnC,MAAI,CAACwgC,EAAe,QAAOE,EAAQK;AAEnC,QAAMC,IAAcN,EAAQO,sBAAAA,GACtBC,IAAaV,EAAcS,sBAAAA;AACjC,SAAOT,EAAcW,YAAYH,EAAYI,MAAMF,EAAWE;AAChE,GCpGMC,KAA+B,IAC/B1C,KAAcA,CAAC/D,MAAeA,EAAKc,WAAWd,EAAKa,WAAW,WAEvD6F,KAAwBthC,CAAAA,MAAA;AAAA,QAAA/G,IAAAC,EAAA,EAAA,GACnC;AAAA,IAAA4lC,OAAAA;AAAAA,IAAAO,kBAAAA;AAAAA,IAAAN,gBAAAA;AAAAA,IAAAC,qBAAAA;AAAAA,IAAAM,kBAAAA;AAAAA,IAAAnE,cAAAA;AAAAA,IAAAoG,WAAAA;AAAAA,EAAAA,IACEvhC,GACF,CAAAu/B,GAAAiC,CAAA,IAAgEjlC,GAAwB,IAAI;AAAE,MAAAjD;AAAA,EAAAL,EAAA,CAAA,MAAA8lC,KAAA9lC,EAAA,CAAA,MAAAsmC,KAAAtmC,EAAA,CAAA,MAAA6lC,KAAA7lC,EAAA,CAAA,MAAAqmC,KAAArmC,SAAAomC,KAQ1F/lC,IAAA8lC,GAA2B;AAAA,IAAAN,OAAAA;AAAAA,IAAAO,kBAAAA;AAAAA,IAAAN,gBAAAA;AAAAA,IAAAO,kBAAAA;AAAAA,IAAAC,0BAAAA;AAAAA,EAAAA,CAM9B,GAACtmC,OAAA8lC,GAAA9lC,OAAAsmC,GAAAtmC,OAAA6lC,GAAA7lC,OAAAqmC,GAAArmC,OAAAomC,GAAApmC,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAbF,QAAA;AAAA,IAAAumC,oBAAAA;AAAAA,IAAAI,mBAAAA;AAAAA,IAAAF,yBAAAA;AAAAA,IAAAI,qBAAAA;AAAAA,IAAAC,8BAAAA;AAAAA,IAAAJ,4BAAAA;AAAAA,EAAAA,IAOIrmC;AAMD,MAAAE,GAAAE;AAAA,EAAAT,EAAA,CAAA,MAAA8lC,KAAA9lC,SAAAkiC,KAAAliC,EAAA,CAAA,MAAA6lC,KAAA7lC,SAAA0mC,KAAA1mC,EAAA,EAAA,MAAA+lC,KAAA/lC,UAAAsoC,KAAAtoC,EAAA,EAAA,MAAAymC,KAAAzmC,EAAA,EAAA,MAAA2mC,KAAA3mC,EAAA,EAAA,MAAAumC,KAAAvmC,UAAA8mC,KAEavmC,IAAAA,MAAA;AAEd,QADI,CAACgmC,KAAD,CAAwBI,KACxBD;AAA0B;AAE9B,UAAA3vB,IAAc8uB,EAAKhS,UAAW8N,OAAU+D,GAAY/D,CAAI,MAAM4E,CAAkB;AAChF,QAAIxvB,IAAQ;AAAC;AAEb,UAAAyxB,IAA2B,CAAA;AAC3B,QAAAC,IAA4B;AAC5B,UAAAlB,IAAsBe,EAASl+B,SAC/Bs+B,IAA6BA,MAAA;AAC3BD,MAAAA,IAAwBA,IACpBhC,MAA4B,QAC9B8B,EAA4B9B,CAAuB;AAAA,IACpD,GAEHkC,IAA4BA,CAAA3C,GAAAC,MACnBL,GAAwB;AAAA,MAAAC,OAAAA;AAAAA,MAAAC,gBAAAA;AAAAA,MAAAC,qBAAAA;AAAAA,MAAA7D,cAAAA;AAAAA,MAAA8D,YAAAA;AAAAA,MAAAC,UAAAA;AAAAA,IAAAA,CAO9B,GAEH2C,IAAuB13B,CAAAA,MAAA;AACrB,MAAIu3B,KACJH,EAASl+B,SAAkBy+B,SAAC;AAAA,QAAAV,KAAOjB,KAAIC,IAAK,GAAGj2B,CAAM;AAAA,QAAC43B,UAAY;AAAA,MAAA,CAAQ;AAAA,IAAC,GAE7EC,IAA6BA,MAAMH,EAAeD,EAAoB,GAAG5xB,CAAK,CAAC,GAC/EiyB,IAAkCA,MAAA;AAChC,YAAAC,IAAsB3B,GAAqBgB,EAASl+B,OAAQ,GAC5D8+B,IAAqBD,EAAap+B,KAAMpD,CAAAA,MAAUA,EAAIsP,UAAWA,CAAK;AACtE,UAAImyB,GAAY;AACd,cAAAC,IAAuBtB,GAAuB;AAAA,UAAAJ,SAAWyB,EAAYzB;AAAAA,UAAQF,eAAAA;AAAAA,QAAAA,CAAiB,GAC9F6B,IAAsBD,KAAkB5B,GAAaW,aAAb;AACxC,eAAIhB,KAAImC,IAAKD,CAAa,KAAKhB,MAC7BQ,EAAeO,CAAc,GAExBjC,KAAImC,IAAKD,CAAa,IAAIhB;AAAAA,MAA4B;AAG/D,YAAAkB,IAAkBL,EAAa,CAAA,GAC/BM,IAAiBN,EAAaO,GAAI,EAAE;AACpC,aAAIF,KAAaA,EAASvyB,QAASA,KACjC6xB,EACEf,GAAuB;AAAA,QAAAJ,SAAW6B,EAAS7B;AAAAA,QAAQF,eAAAA;AAAAA,MAAAA,CAAiB,IAClEoB,EAAoB5xB,GAAOuyB,EAASvyB,KAAM,CAC9C,GACO,MAELwyB,KAAYA,EAAQxyB,QAASA,KAC/B6xB,EACEf,GAAuB;AAAA,QAAAJ,SAAW8B,EAAQ9B;AAAAA,QAAQF,eAAAA;AAAAA,MAAAA,CAAiB,IACjEoB,EAAoBY,EAAQxyB,OAAQA,CAAK,CAC7C,GACO,QAEL,CAACuyB,KAAD,CAAeC,MACjBR,EAAAA,GAEK;AAAA,IAAK;AAEd,QAAAU,IAAwB;AACxB,UAAAC,IAA8BA,MAAA;AAC5B,UAAIjB;AAAqB;AACzB,YAAAkB,IAAkBX,EAAAA;AAClBS,MAAAA,IAAAA,IAAqB;AACrB,YAAAG,IAAmBH,KAAqB;AACxC,UAAIE,KAAAC,KAAA,CAA4B9D,EAAchiB,IAAKyiB,CAAkB,KAAKE,MAA4B,MAAI;AACxG8B,QAAAA,EAA4B9B,CAAuB;AAAC;AAAA,MAAA;AAGtD,OAAK,CAACkD,KAAD,CAAeC,MAAeH,IAAoB,MACrDjB,EAAQnf,KAAMwgB,sBAAsBH,CAAqB,CAAC;AAAA,IAC3D;AAGHnC,IAAAA,GAAapQ,iBAAmB,SAASuR,GAAsB;AAAA,MAAAoB,SAAW;AAAA,IAAA,CAAM,GAChFvC,GAAapQ,iBAAmB,aAAauR,GAAsB;AAAA,MAAAoB,SAAW;AAAA,IAAA,CAAM;AACpF,UAAAC,IAA2Bf,EAAAA;AAC3B,WAAI,CAAClC,KAAD,CAAkCiD,KACpChB,EAAAA,GAGFP,EAAQnf,KAAMwgB,sBAAsBH,CAAqB,CAAC,GAEnD,MAAA;AACLnC,MAAAA,GAAanQ,oBAAsB,SAASsR,CAAoB,GAChEnB,GAAanQ,oBAAsB,aAAasR,CAAoB;AACpE,iBAAKsB,KAAiBxB;AACpByB,6BAAqBD,CAAO;AAAA,IAC7B;AAAA,EACF,GACAvpC,IAAA,CACDkmC,GACAJ,GACAE,GACAK,GACAJ,GACAb,GACAC,GACAC,GACA7D,GACAoG,CAAS,GACVtoC,OAAA8lC,GAAA9lC,OAAAkiC,GAAAliC,OAAA6lC,GAAA7lC,OAAA0mC,GAAA1mC,QAAA+lC,GAAA/lC,QAAAsoC,GAAAtoC,QAAAymC,GAAAzmC,QAAA2mC,GAAA3mC,QAAAumC,GAAAvmC,QAAA8mC,GAAA9mC,QAAAO,GAAAP,QAAAS,MAAAF,IAAAP,EAAA,EAAA,GAAAS,IAAAT,EAAA,EAAA,IA1GDkqC,GAAgB3pC,GA+FbE,CAWF;AAAC,MAAAG;AAAA,SAAAZ,EAAA,EAAA,MAAA6mC,KAAA7mC,UAAA8mC,KAEKlmC,IAAA;AAAA,IAAAimC,qBAAAA;AAAAA,IAAAC,8BAAAA;AAAAA,EAAAA,GAAqD9mC,QAAA6mC,GAAA7mC,QAAA8mC,GAAA9mC,QAAAY,KAAAA,IAAAZ,EAAA,EAAA,GAArDY;AAAqD,GCnHxD8kC,KAAcA,CAAC/D,MAAeA,EAAKc,WAAWd,EAAKa,WAAW,WAE9D2H,KAA8B,IAC9BC,KAAmC,KAE5BC,KAA6BA,CAACxE,MACrCA,EAAMliC,UAAUwmC,yBAAwC7mB,IAAAA,IAErD,IAAIA,IACTuiB,EACGr+B,OAAO,CAACm6B,GAAM5qB,MAAU;AACvB,QAAMuzB,KAAa3I,EAAKT,aAAa,MAAMS,EAAKR,aAAa;AAC7D,SAAOpqB,KAASozB,MAA+BG,IAAYF;AAC7D,CAAC,EACA/7B,IAAKszB,OAAS+D,GAAY/D,CAAI,CAAC,CACpC,GAGW4I,KAAyBA,CAAC1E,MAAkB,IAAIviB,IAAIuiB,EAAMx3B,IAAKszB,CAAAA,MAAS+D,GAAY/D,CAAI,CAAC,CAAC,GAE1F6I,KAAsBA,CAAC1E,GAA6BhF,MAAiB;AAChF,QAAM3V,IAAO,IAAI7H,IAAIwiB,CAAc;AACnC,SAAI3a,EAAKrH,IAAIgd,CAAI,IACf3V,EAAKsf,OAAO3J,CAAI,IAEhB3V,EAAKhR,IAAI2mB,CAAI,GAER3V;AACT,GAEauf,KAAuCA,CAClD7E,GACAC,GACAM,MACG;AAGH,MAFI,CAACA,KACD,CAACN,EAAehiB,IAAIsiB,CAAgB,KACpC,CAACP,EAAM7tB,KAAM2pB,CAAAA,MAAS+D,GAAY/D,CAAI,MAAMyE,CAAgB,EAAG,QAAON;AAE1E,QAAM3a,IAAO,IAAI7H,IAAIwiB,CAAc;AACnC3a,SAAAA,EAAKsf,OAAOrE,CAAgB,GACrBjb;AACT;AAEO,SAASwf,GAAW5qC,GAAwB;AACjD,QAAM;AAAA,IACJ8lC,OAAAA;AAAAA,IACAO,kBAAAA,IAAmB;AAAA,IACnB3C,YAAAA;AAAAA,IACAmH,kBAAAA;AAAAA,IACAC,wBAAAA;AAAAA,IACAxE,kBAAAA,IAAmB;AAAA,IACnBnE,cAAAA,IAAe;AAAA,EAAA,IACbniC,GACEuoC,IAAYx+B,GAAuB,IAAI,GACvCghC,IAA4BhhC,GAAwC,IAAI,GACxE,CAACg8B,GAAgBiF,CAAiB,IAAIznC,GAAsB,MAAM+mC,GAA2BxE,CAAK,CAAC,GACnG,CAACE,GAAqBiF,CAAsB,IAAI1nC,GAAsB,MAAM,oBAAIggB,KAAK,GACrF;AAAA,IAAEujB,qBAAAA;AAAAA,IAAqBC,8BAAAA;AAAAA,EAAAA,IAAiCuB,GAAsB;AAAA,IAClFxC,OAAAA;AAAAA,IACAO,kBAAAA;AAAAA,IACAN,gBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAM,kBAAAA;AAAAA,IACAnE,cAAAA;AAAAA,IACAoG,WAAAA;AAAAA,EAAAA,CACD,GAEK2C,IAAcC,GAAe;AAAA,IACjC1oC,OAAOqjC,EAAMliC;AAAAA,IACbwnC,kBAAkBA,MAAM7C,EAAUl+B;AAAAA,IAClCghC,cAAer0B,CAAAA,MAAU;AACvB,YAAM4qB,IAAOkE,EAAM9uB,CAAK,GAClB+pB,IAAO4E,GAAY/D,CAAI;AAC7B,aAAOwD,GAAuB;AAAA,QAC5BxD,MAAAA;AAAAA,QACAyD,aAAaU,EAAehiB,IAAIgd,CAAI;AAAA,QACpCkB,uBAAuB+D,EAAoBjiB,IAAIgd,CAAI;AAAA,QACnDoB,cAAAA;AAAAA,MAAAA,CACD;AAAA,IACH;AAAA,IACAmJ,YAAat0B,CAAAA,MAAU2uB,GAAYG,EAAM9uB,CAAK,CAAC;AAAA,IAC/Cu0B,UAAU;AAAA,IACVC,gBAAiBC,CAAAA,MAAU;AACzB,YAAMxE,IAAUyE,GAAsBD,CAAK;AAC3C,aAAOzE,GAAyB;AAAA,QAAEC,SAAAA;AAAAA,QAASH,qBAAAA;AAAAA,QAAqBC,8BAAAA;AAAAA,MAAAA,CAA8B;AAAA,IAChG;AAAA,EAAA,CACD;AAuCD,MAtCAmE,EAAYS,6CAA6C,CAACC,GAAOC,GAAQC,MAAa,CAACA,EAASC,aAEhG5B,GAAgB,MAAM;AACpB,IAAK9D,KAEL2E,EAAmBnvB,CAAAA,MAAS8uB,GAAqC7E,GAAOjqB,GAAMwqB,CAAgB,CAAC;AAAA,EACjG,GAAG,CAACP,GAAOO,CAAgB,CAAC,GAE5B8D,GAAgB,MAAM;AACpB,QAAK7D,GAEL;AAAA,UAAIA,EAAiBn3B,WAAW,mBAAmB;AACjD67B,QAAAA,EAAmBnvB,CAAAA,MACjByqB,EAAiBvF,OAAO4J,GAAqC7E,GAAOjqB,GAAMyqB,EAAiBvF,IAAI,IAAIllB,CACrG;AACA;AAAA,MACF;AAEAmvB,MAAAA,EAAkB1E,EAAiBn3B,WAAW,aAAaq7B,GAAuB1E,CAAK,IAAI,oBAAIviB,KAAK;AAAA;AAAA,EACtG,GAAG,CAACuiB,GAAOQ,CAAgB,CAAC,GAE5Bl8B,GAAU,MAAM;AACd,UAAM4hC,IAAiB;AAAA,MACrBC,aAAalG,EAAemG,SAAS;AAAA,MACrCC,cAAcrG,EAAMliC,SAAS,KAAKkiC,EAAMpQ,MAAOkM,CAAAA,MAASmE,EAAehiB,IAAI4hB,GAAY/D,CAAI,CAAC,CAAC;AAAA,IAAA,GAEzFwK,IAAyBrB,EAA0B1gC;AACzD,IACE+hC,GAAwBH,gBAAgBD,EAAeC,eACvDG,EAAuBD,iBAAiBH,EAAeG,iBAKzDpB,EAA0B1gC,UAAU2hC,GACpClB,IAAyBkB,CAAc;AAAA,EACzC,GAAG,CAACjG,GAAgBD,GAAOgF,CAAsB,CAAC,GAE9ChF,EAAMliC,WAAW,EAAG,0BAAQ+gC,IAAA,EAAoB;AAEpD,QAAM1S,IAAiBA,CAAC8O,MAAiB;AACvCiK,IAAAA,EAAmBnvB,CAAAA,MAAS4uB,GAAoB5uB,GAAMklB,CAAI,CAAC;AAAA,EAC7D,GAEMsL,IAAeA,CAACtL,MAAiB;AACrCkK,IAAAA,EAAwBpvB,CAAAA,MAAS;AAC/B,YAAMuP,IAAO,IAAI7H,IAAI1H,CAAI;AACzBuP,aAAAA,EAAKhR,IAAI2mB,CAAI,GACN3V;AAAAA,IACT,CAAC;AAAA,EACH,GAEMkhB,IAAepB,EAAYqB,gBAAAA;AAEjC,SACE,gBAAA/qC,EAACW,GAAA,EAAM,GAAE,QAAO,MAAK,KAAI,KAAI,KAAI,IAAG,MAClC,UAAA,gBAAAX,EAACb,GAAA,EAAI,UAAS,YAAW,MAAK,KAAI,MAAK,KAAI,IAAG,MAC5C,UAAA,gBAAAa,EAACwM,IAAA,EACC,UAAS,YACT,OAAM,KACN,aAAau6B,GACb,eAAe;AAAA,IAAEvvB,OAAO;AAAA,MAAEwzB,gBAAgB;AAAA,IAAA;AAAA,EAAO,GACjD,cAAc;AAAA,IAAE5H,GAAG;AAAA,EAAA,GAEnB,UAAA,gBAAApjC,EAACb,GAAA,EAAI,UAAS,YAAW,OAAM,QAAO,OAAO;AAAA,IAAEgQ,QAAQu6B,EAAYuB,aAAAA;AAAAA,EAAa,GAC7EH,UAAAA,EAAah+B,IAAKo+B,CAAAA,MAAgB;AACjC,UAAM9K,IAAOkE,EAAM4G,EAAY11B,KAAK,GAC9B+pB,IAAO4E,GAAY/D,CAAI;AAE7B,6BACGjhC,GAAA,EAEC,cAAY+rC,EAAY11B,OACxB,KAAKk0B,EAAYyB,gBACjB,UAAS,YACT,MAAK,KACL,OAAM,QACN,IAAG,MACH,OAAO;AAAA,MAAEvE,KAAK,GAAGsE,EAAYE,KAAK;AAAA,IAAA,GAElC,UAAA,gBAAAprC,EAAC+iC,IAAA,EAEC,MAAM3C,GACN,YAAYyE,MAAqBtF,GACjC,YAAY,CAACgF,EAAehiB,IAAIgd,CAAI,GACpC,kBAAkB,MAAM9O,EAAe8O,CAAI,GAC3C,UAAU,MAAM8J,IAAmB9J,CAAI,GACvC,YAAA2C,GACA,uBAAuBsC,EAAoBjiB,IAAIgd,CAAI,GACnD,gBAAgB,MAAMsL,EAAatL,CAAI,GACvC,cAAAoB,KATKpB,CASsB,EAAA,GAnBxB2L,EAAYn3B,GAqBnB;AAAA,EAEJ,CAAC,EAAA,CACH,GACF,EAAA,CACF,EAAA,CACF;AAEJ;AC3NA,MAAMs3B,KAA+B;AAAA,EAAEC,SAAS;AAAA,IAAEt+B,IAAI;AAAA,EAAA;AAAsB,GACtEu+B,KAAsB,QAafC,KAAehtC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC1B;AAAA,IAAA+sC,QAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,oBAAAA;AAAAA,IAAAC,qBAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,eAAAA;AAAAA,EAAAA,IASIxtC,GAMeM,IAAA,GAAG6sC,CAAgB,IAAID,CAAc;AAAE,MAAA1sC;AAAA,EAAAP,EAAA,CAAA,MAAAgtC,EAAAQ,WAEvCjtC,IAAA2mC,KAAIuG,MAAOT,EAAMQ,OAAQ,GAACxtC,EAAA,CAAA,IAAAgtC,EAAAQ,SAAAxtC,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAAotC,KAC1B3sC,IAAAymC,KAAIuG,MAAOL,CAAkB,GAACptC,OAAAotC,GAAAptC,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAmBvC,QAAAY,IAAAysC,IAAA,iBAAA;AAAoD,MAAAtsC;AAAA,EAAAf,SAAAY,KAPjDG,IAAA;AAAA,IAAA0T,SACE;AAAA,IAAIi5B,UACH;AAAA,IAAUvF,KACf;AAAA,IAACwF,QACE;AAAA,IAACC,kBACS;AAAA,IAAKC,GACpB;AAAA,IAAKt/B,IACJ3N;AAAAA,IAAoDktC,WAC7C;AAAA,EAAA,GACZ9tC,OAAAY,GAAAZ,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AACO,QAAAiB,IAAAosC,IAAAT,KAAApsC;AAA8D,MAAAU;AAAA,EAAAlB,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACvDJ,IAAA;AAAA,IAAA2rC,SACJ;AAAA,MAAAt+B,IACH;AAAA,MAAwBs/B,GACzB;AAAA,IAAA;AAAA,EACL,GACD7tC,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAA,MAAAmB;AAAA,SAAAnB,EAAA,CAAA,MAAAstC,KAAAttC,EAAA,CAAA,MAAAutC,KAAAvtC,EAAA,CAAA,MAAAmtC,KAAAntC,EAAA,EAAA,MAAAK,KAAAL,EAAA,EAAA,MAAAO,KAAAP,EAAA,EAAA,MAAAS,KAAAT,EAAA,EAAA,MAAAe,KAAAf,UAAAiB,KAnCHE,IAAA,gBAAAI,EAACb,KACM,MAAA,aACOysC,cAAAA,GACK,oBAAA,YACF,iBAAA9sC,GACA,iBAAA,GACA,iBAAAE,GACA,iBAAAE,GACL,UAAA,GACD,UAAA,YACF,QAAA,KACD,aAAOqsC,EAAmB,IAC7BA,GAAAA,IACA,IAAA,QACI,QAAA,cACK,aAAA,QACJ,SAAA,QACOS,eAAAA,GACJD,WAAAA,GACF,SAAAvsC,GAUD,QAAAE,GACO,eAAAC,EAAAA,CAKd,GACDlB,OAAAstC,GAAAttC,OAAAutC,GAAAvtC,OAAAmtC,GAAAntC,QAAAK,GAAAL,QAAAO,GAAAP,QAAAS,GAAAT,QAAAe,GAAAf,QAAAiB,GAAAjB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GApCFmB;AAoCE,GCvCA4sC,KAAsB,MACtBC,KAAuB,IACvBC,KAA4B,IAC5BC,KAA4B,KAE5BC,KAAQA,CAACzrC,GAAe0rC,GAAajH,MAAgBD,KAAKkH,IAAIlH,KAAKC,IAAIzkC,GAAO0rC,CAAG,GAAGjH,CAAG,GAEvFkH,KAAmBA,CAACC,MAAuBA,IAAY,IAAIA,IAAYP,IAEvEQ,KAA2BA,CAACC,MAChCL,GAAMK,IAAY,GAAGP,IAA2BC,EAAyB,GAErEO,KAA2BA,CAAC1nC,MAK5B;AACJ,QAAMunC,IAAYD,GAAiBtnC,EAAMunC,SAAS,GAC5CI,IAAiBxH,KAAKC,IAAI,GAAGmH,IAAYvnC,EAAM4nC,gBAAgB,GAC/DC,IAAgB7nC,EAAM8nC,aAAaH,GACnClB,IAAUtG,KAAKC,IAAI,GAAGD,KAAKkH,IAAIQ,GAAeF,CAAc,CAAC;AAGnE,SAAO;AAAA,IAAEI,SAFO5H,KAAKkH,IAAIrnC,EAAMynC,WAAWhB,CAAO;AAAA,IAE/BA,SAAAA;AAAAA,EAAAA;AACpB,GAEMuB,KAAkBA,CAACtH,MAAmCA,GAASO,sBAAAA,EAAwB3hC,SAAS,GAEhG2oC,KAA2BA,CAACC,GAA8B5oC,MAAkB;AAChF,EAAK4oC,MAELA,EAAMl2B,MAAM1S,QAAQ,GAAGA,CAAK,MAC5B4oC,EAAMl2B,MAAMm2B,YAAY,GAAG7oC,CAAK,MAChC4oC,EAAMl2B,MAAMo2B,WAAW,KACvBF,EAAMl2B,MAAMq2B,aAAa,KACzBH,EAAMl2B,MAAMjF,UAAUzN,IAAQ,IAAI,SAAS;AAC7C,GAEMgpC,KAAyBA,CAACJ,MAAiC;AAC/D,EAAKA,MAELA,EAAMl2B,MAAM1S,QAAQ,IACpB4oC,EAAMl2B,MAAMm2B,YAAY,IACxBD,EAAMl2B,MAAMo2B,WAAW,IACvBF,EAAMl2B,MAAMq2B,aAAa,IACzBH,EAAMl2B,MAAMjF,UAAU;AACxB,GAEaw7B,KAAuBvvC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAsvC,GAAAC,GAAAX,GAAAY,GAAAC,GAAAC,GAAAvpC,GAAA/F,GAAAE,GAAAE,GAAAG,GAAAG,GAAAE,GAAAC;AAAA,EAAAlB,SAAAD,KAClC;AAAA,IAAA4vC,gBAAAA;AAAAA,IAAAJ,cAAAA;AAAAA,IAAAK,eAAAvvC;AAAAA,IAAAwvC,eAAAtvC;AAAAA,IAAAiuC,WAAA/tC;AAAAA,IAAAouC,WAAAA;AAAAA,IAAAF,kBAAA/tC;AAAAA,IAAAkvC,WAAAN;AAAAA,IAAAO,aAAAhvC;AAAAA,IAAAosC,aAAAlsC;AAAAA,IAAAosC,qBAAAnsC;AAAAA,IAAAwuC,cAAAA;AAAAA,IAAAD,mBAAAA;AAAAA,IAAA,GAAArpC;AAAAA,EAAAA,IAeIrG,GAAMC,OAAAD,GAAAC,OAAAuvC,GAAAvvC,OAAAwvC,GAAAxvC,OAAA6uC,GAAA7uC,OAAAyvC,GAAAzvC,OAAA0vC,GAAA1vC,OAAA2vC,GAAA3vC,OAAAoG,GAAApG,OAAAK,GAAAL,OAAAO,GAAAP,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAiB,GAAAjB,QAAAkB,MAAAquC,IAAAvvC,EAAA,CAAA,GAAAwvC,IAAAxvC,EAAA,CAAA,GAAA6uC,IAAA7uC,EAAA,CAAA,GAAAyvC,IAAAzvC,EAAA,CAAA,GAAA0vC,IAAA1vC,EAAA,CAAA,GAAA2vC,IAAA3vC,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA,GAAAS,IAAAT,EAAA,EAAA,GAAAY,IAAAZ,EAAA,EAAA,GAAAe,IAAAf,EAAA,EAAA,GAAAiB,IAAAjB,EAAA,EAAA,GAAAkB,IAAAlB,EAAA,EAAA;AAZR,QAAA4vC,IAAAvvC,MAAAG,SAAA,SAAAH,GACAwvC,IAAAtvC,MAAAC,SAAA,MAAAD,GACAiuC,IAAA/tC,MAAAD,SAAA,MAAAC,GAEAkuC,IAAA/tC,MAAAJ,SAAA,IAAAI,GAEAmvC,IAAAhvC,MAAAP,SAAA,KAAAO,GACAosC,IAAAlsC,MAAAT,SAAA,iBAAAS,GACAosC,IAAAnsC,MAAAV,SAAA,KAAAU,GAKF6J,IAAWilC,GAAAA,GACXC,IAAgBnmC,GAAuB,IAAI,GAC3ComC,IAA0BpmC,GAAuB,IAAI,GACrDqmC,IAAwBrmC,GAAuB,IAAI,GACnDsmC,IAAuBtmC,GAAmBqB,EAAe,GACzDklC,IAAqBvmC,GAAO+lC,CAAa,GACzC,CAAAS,GAAAC,CAAA,IAAoCjtC,GAASusC,CAAa,GAC1D,CAAAvB,GAAAkC,CAAA,IAAkCltC,GAAS,CAAC,GAC5C,CAAAmtC,GAAAC,CAAA,IAAkDptC,GAAS,EAAK,GAChEwsC,IAAkBN,KAAAiB;AAAyC,MAAAzD,GAAA2D,GAAAxvC;AAAA,EAAAnB,UAAA8vC,KAAA9vC,EAAA,EAAA,MAAA2uC,KAAA3uC,EAAA,EAAA,MAAA6uC,KAAA7uC,EAAA,EAAA,MAAAwuC,KAAAxuC,UAAAswC,KAAAtwC,EAAA,EAAA,MAAAsuC,KAC3DtB,IAAeyB,GAAyB;AAAA,IAAAH,WAAAA;AAAAA,IAAAE,WAAAA;AAAAA,IAAAK,WAAAA;AAAAA,IAAAF,kBAAAA;AAAAA,EAAAA,CAAqD,GAC7FgC,IAA4BpC,GAAyBC,CAAS,GACnCrtC,IAAA2uC,IAAA,IAAgB3B,GAAMmC,GAAYtD,EAAM8B,SAAU9B,EAAMQ,OAAQ,GAACxtC,QAAA8vC,GAAA9vC,QAAA2uC,GAAA3uC,QAAA6uC,GAAA7uC,QAAAwuC,GAAAxuC,QAAAswC,GAAAtwC,QAAAsuC,GAAAtuC,QAAAgtC,GAAAhtC,QAAA2wC,GAAA3wC,QAAAmB,MAAA6rC,IAAAhtC,EAAA,EAAA,GAAA2wC,IAAA3wC,EAAA,EAAA,GAAAmB,IAAAnB,EAAA,EAAA;AAA5F,QAAAotC,IAA2BjsC,GAC3B8rC,IAAuB,GAAGliC,CAAE,YAC5BmiC,IAAyB,GAAGniC,CAAE;AAAa,MAAA7F,GAAAyF;AAAA,EAAA3K,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEjC4D,IAAAA,MAAA;AACR,UAAAuiC,IAAgBwI,EAAO7lC;AACvB,QAAI,CAACq9B;AAAO;AAEZ,UAAAmJ,KAAwBA,MAAA;AACtBJ,MAAAA,EAAa/I,EAAOO,sBAAAA,EAAwB3hC,KAAM;AAAA,IAAC;AAKrD,QAFAuqC,GAAAA,GAEI,OAAOC,iBAAmB;AAAW;AAEzC,UAAAC,KAAiB,IAAID,eAAeD,EAAe;AACnDE,WAAAA,GAAQC,QAAStJ,CAAO,GAEjB,MAAA;AACLqJ,MAAAA,GAAQE,WAAAA;AAAAA,IAAa;AAAA,EACtB,GACArmC,IAAA,CAAA,GAAE3K,QAAAkF,GAAAlF,QAAA2K,MAAAzF,IAAAlF,EAAA,EAAA,GAAA2K,IAAA3K,EAAA,EAAA,IAlBLmK,GAAUjF,GAkBPyF,CAAE;AAAC,MAAAS,IAAAS;AAAA,EAAA7L,UAAA6vC,KAEIzkC,KAAAA,MAAA;AACRilC,IAAAA,EAAYjmC,UAAWylC,GACvBU,EAAcV,CAAa;AAAA,EAAC,GAC3BhkC,KAAA,CAACgkC,CAAa,GAAC7vC,QAAA6vC,GAAA7vC,QAAAoL,IAAApL,QAAA6L,OAAAT,KAAApL,EAAA,EAAA,GAAA6L,KAAA7L,EAAA,EAAA,IAHlBmK,GAAUiB,IAGPS,EAAe;AAAC,MAAAmB,IAAAE;AAAA,EAAAlN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAET0L,KAAAA,MAAM,MAAMojC,EAAchmC,QAAAA,GAAY8C,KAAA,CAAA,GAAElN,QAAAgN,IAAAhN,QAAAkN,OAAAF,KAAAhN,EAAA,EAAA,GAAAkN,KAAAlN,EAAA,EAAA,IAAlDmK,GAAU6C,IAAsCE,EAAE;AAAC,MAAAC;AAAA,EAAAnN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAE3B6L,KAAA9G,CAAAA,MAAA;AACtB2oC,IAAAA,GAAyBkB,EAAiB9lC,SAAU/D,CAAK;AAAA,EAAC,GAC3DrG,QAAAmN,MAAAA,KAAAnN,EAAA,EAAA;AAFD,QAAAixC,KAAwB9jC;AAEtB,MAAAG,IAAAC;AAAA,EAAAvN,UAAAotC,KAEQ9/B,KAAAA,MAAA;AAMR+hC,IAAAA,GAAuBc,EAAe/lC,OAAQ,GAC9C4kC,GAAyBkB,EAAiB9lC,SAAUgjC,CAAkB;AAAA,EAAC,GACtE7/B,KAAA,CAAC6/B,CAAkB,GAACptC,QAAAotC,GAAAptC,QAAAsN,IAAAtN,QAAAuN,OAAAD,KAAAtN,EAAA,EAAA,GAAAuN,KAAAvN,EAAA,EAAA,IARvBmK,GAAUmD,IAQPC,EAAoB;AAAC,MAAAC;AAAA,EAAAxN,EAAA,EAAA,MAAA2uC,KAAA3uC,EAAA,EAAA,MAAA6uC,KAAA7uC,EAAA,EAAA,MAAAwuC,KAAAxuC,UAAA0vC,KAECliC,KAAA0jC,CAAAA,MAAA;AACvB,UAAAC,KAAkBpC,GAAgBkB,EAAO7lC,OAAQ,GACjDgnC,KAAmB3C,GAAyB;AAAA,MAAAH,WAAEA;AAAAA,MAASE,WAAAA;AAAAA,MAAAK,WAAAA;AAAAA,MAAAF,kBAAAA;AAAAA,IAAAA,CAA0C,GACjG0C,KAAkBlD,GAAM9nC,GAAO+qC,GAAUtC,SAAUsC,GAAU5D,OAAQ;AAErE6C,IAAAA,EAAYjmC,UAAWinC,IACvBd,EAAcc,EAAS,GACvBJ,GAAgBI,EAAS,GACzB3B,IAAe2B,EAAS;AAAA,EAAC,GAC1BrxC,QAAA2uC,GAAA3uC,QAAA6uC,GAAA7uC,QAAAwuC,GAAAxuC,QAAA0vC,GAAA1vC,QAAAwN,MAAAA,KAAAxN,EAAA,EAAA;AATD,QAAAsxC,IAAyB9jC;AASvB,MAAAC;AAAA,EAAAzN,EAAA,EAAA,MAAAwvC,KAAAxvC,UAAAyvC,KAEmBhiC,KAAA8jC,CAAAA,MAAA;AACnB,IAAI/B,MAAwBhvC,UAC1BkwC,EAAqBa,CAAa,GAGpC9B,IAAoB8B,CAAa;AAAA,EAAC,GACnCvxC,QAAAwvC,GAAAxvC,QAAAyvC,GAAAzvC,QAAAyN,MAAAA,KAAAzN,EAAA,EAAA;AAND,QAAAwxC,KAAqB/jC;AAMnB,MAAAC;AAAA,EAAA1N,EAAA,EAAA,MAAA2wC,KAAA3wC,EAAA,EAAA,MAAA8vC,KAAA9vC,UAAA+vC,KAAA/vC,EAAA,EAAA,MAAAsxC,KAAAtxC,EAAA,EAAA,MAAA2uC,KAAA3uC,EAAA,EAAA,MAAA6uC,KAAA7uC,EAAA,EAAA,MAAAwuC,KAAAxuC,EAAA,EAAA,MAAA4vC,KAAA5vC,UAAAwxC,MAEwB9jC,KAAA3J,CAAAA,MAAA;AACxB,QAAIA,EAAKmT,WAAY,KAAM44B,KAAA,CAAcC;AAAY;AAErDhsC,IAAAA,EAAKC,eAAAA,GACLosC,EAAchmC,QAAAA;AAEd,UAAAqnC,KAAqB1tC,EAAKO,eAC1BotC,KAAkB3C,GAAgBkB,EAAO7lC,OAAQ,GACjDunC,KAAelD,GAAyB;AAAA,MAAAH,WAAEA;AAAAA,MAASE,WAAAA;AAAAA,MAAAK,WAAAA;AAAAA,MAAAF,kBAAAA;AAAAA,IAAAA,CAA0C,GAC7FiD,KAAe7tC,EAAK8tC,SACpBC,KAAmBhC,IAAA,IAAgBf,GAAgBmB,EAAiB9lC,OAAgC,KAAnBimC,EAAYjmC,SAC7Fic,KAAkBupB,MAAkB,SAAlB,IAAA,IAClBmC,KAAuBr4B,SAAQG,KAAKd,MAAM5H,QAC1C6gC,KAA2Bt4B,SAAQG,KAAKd,MAAMk5B;AAC9C,QAAAC,KAAgBJ,OAAe,IAAf,IAAuB3D,GAAM2D,IAAY9E,GAAM8B,SAAU9B,GAAMQ,OAAQ,GACvF2E,KAAoBrC,GACpBsC,KAAqB;AAErB,UAAAC,KAA8B3vC,CAAAA,OAAA;AAC5B,MAAIwtC,EAAiB9lC,YAAU8lC,EAAiB9lC,QAAQ2O,MAAMpJ,gBAAiBjN,KAC3EytC,EAAe/lC,YAAU+lC,EAAe/lC,QAAQ2O,MAAMpJ,gBAAiBjN;AAAAA,IAAM,GAGnF4vC,KAA2BA,MAAA;AACzB,MAAIF,OAEJA,KAAiBj3B,OAAM0uB,sBAAuB,MAAA;AAC5CuI,QAAAA,KAAiBA,GACjBnB,GAAgBI,EAAS;AAAA,MAAC,CAC3B;AAAA,IAHa,GAMhBkB,KAA0BC,CAAAA,OAAA;AACxB,YAAAC,KAAiBX,MAAcU,GAASX,UAAWD,MAAUvrB;AAC7DkrB,MAAAA,KAAgBA,KAAekB,MAAY9B,GAC3CU,KAAYE,KAAA,IAAoBpD,GAAMsE,IAAUzF,GAAM8B,SAAU9B,GAAMQ,OAAQ,GACzE+D,OAAelB,EAAYjmC,UAAWinC,KAC3CiB,GAAAA;AAAAA,IAAoB,GAGtBI,KAAgBA,MAAA;AACdv3B,aAAMic,oBAAqB,eAAemb,EAAiB,GAC3Dp3B,OAAMic,oBAAqB,aAAasb,EAAO,GAC/Cv3B,OAAMic,oBAAqB,iBAAiBsb,EAAO,GACnDv3B,OAAMic,oBAAqB,QAAQsb,EAAO,GAC1Ch5B,SAAQG,KAAKd,MAAM5H,SAAU4gC,IAC7Br4B,SAAQG,KAAKd,MAAMk5B,aAAcD,IAC7BP,GAAYkB,kBAAmB5uC,EAAK6uC,SAAU,KAAGnB,GAAYoB,sBAAuB9uC,EAAK6uC,SAAU,GACvGP,GAAsB,EAAE,GACpBD,OACFj3B,OAAM8uB,qBAAsBmI,EAAc,GAC1CA,KAAiBA,IAEnBhC,EAAchmC,UAAW2B,IACrBwlC,MACFN,GAAgB,CAAC,GACjBO,GAAa,EAAI,MAEjBA,GAAa,EAAK,GAClBF,EAAiBD,EAAS;AAAA,IAC3B;AAGHjB,IAAAA,EAAchmC,UAAWsoC,IACzBjB,GAAYqB,kBAAmB/uC,EAAK6uC,SAAU,GAC9Cl5B,SAAQG,KAAKd,MAAM5H,SAAU,cAC7BuI,SAAQG,KAAKd,MAAMk5B,aAAc,QACjCI,GAAsB,MAAM,GAC5Bl3B,OAAMgc,iBAAkB,eAAeob,EAAiB,GACxDp3B,OAAMgc,iBAAkB,aAAaub,IAAS;AAAA,MAAAK,MAAQ;AAAA,IAAA,CAAM,GAC5D53B,OAAMgc,iBAAkB,iBAAiBub,IAAS;AAAA,MAAAK,MAAQ;AAAA,IAAA,CAAM,GAChE53B,OAAMgc,iBAAkB,QAAQub,IAAS;AAAA,MAAAK,MAAQ;AAAA,IAAA,CAAM;AAAA,EAAC,GACzD/yC,QAAA2wC,GAAA3wC,QAAA8vC,GAAA9vC,QAAA+vC,GAAA/vC,QAAAsxC,GAAAtxC,QAAA2uC,GAAA3uC,QAAA6uC,GAAA7uC,QAAAwuC,GAAAxuC,QAAA4vC,GAAA5vC,QAAAwxC,IAAAxxC,QAAA0N,MAAAA,KAAA1N,EAAA,EAAA;AAxED,QAAAgzC,KAA0BtlC;AAwExB,MAAAC;AAAA,EAAA3N,UAAAgtC,KAAAhtC,EAAA,EAAA,MAAA8vC,KAAA9vC,EAAA,EAAA,MAAA+vC,KAAA/vC,EAAA,EAAA,MAAAsxC,KAAAtxC,UAAA4vC,KAAA5vC,EAAA,EAAA,MAAAwxC,MAE0B7jC,KAAA3B,CAAAA,MAAA;AAC1B,UAAAinC,KAAkBrD,MAAkB,SAAlB,IAAA,IAClBsD,KAAc7C,EAAYjmC;AAE1B,IAAI0lC,MAAc/rC,EAAKuR,QAAS,eAAevR,EAAKuR,QAAS,gBAAgBvR,EAAKuR,QAAS,UACzFvR,EAAKC,eAAAA,GACLwtC,GAAa,EAAK,GAClBF,EAAiBjrC,EAAK,KACbtC,EAAKuR,QAAS,eACvBvR,EAAKC,eAAAA,GACLstC,EAAiBjrC,KAAQ2nC,KAAuB3nB,EAAS,KAChDtiB,EAAKuR,QAAS,gBACvBvR,EAAKC,eAAAA,GACLstC,EAAiBjrC,KAAQ2nC,KAAuB3nB,EAAS,KAChDtiB,EAAKuR,QAAS,UACvBvR,EAAKC,eAAAA,GACD+rC,IAAayB,GAAa,EAAI,IAC7BF,EAAiBtE,EAAM8B,OAAQ,KAC3B/qC,EAAKuR,QAAS,UACvBvR,EAAKC,eAAAA,GACLstC,EAAiBtE,EAAMQ,OAAQ;AAAA,EAChC,GACFxtC,QAAAgtC,GAAAhtC,QAAA8vC,GAAA9vC,QAAA+vC,GAAA/vC,QAAAsxC,GAAAtxC,QAAA4vC,GAAA5vC,QAAAwxC,IAAAxxC,QAAA2N,MAAAA,KAAA3N,EAAA,EAAA;AAtBD,QAAAmzC,KAA4BxlC,IA4BfC,KAAAkiC,IAAA,SAAA,QAKHjiC,KAAA,OAAOu/B,CAAkB,MAC5Bp/B,KAAA,GAAGo/B,CAAkB,MACXl/B,KAAA4hC,IAAA,KAAAtvC;AAA4B,MAAA2N;AAAA,EAAAnO,UAAA2vC,KAAA3vC,EAAA,EAAA,MAAAktC,KAAAltC,EAAA,EAAA,MAAA4N,MAAA5N,EAAA,EAAA,MAAA6N,MAAA7N,UAAAgO,MAAAhO,EAAA,EAAA,MAAAkO,MAV3CC,KAAA,gBAAA5M,EAACkF,MACKymC,IAAAA,GACCgD,KAAAA,GACI,SAAAtiC,IACP,GAAA,QACG,MAAA,KACA,MAAA,KACI,UAAA,UACH,MAAAC,IACH,GAAAG,IACU,eAAAE,IAEZyhC,UAAAA,EAAAA,CACH,GAAO3vC,QAAA2vC,GAAA3vC,QAAAktC,GAAAltC,QAAA4N,IAAA5N,QAAA6N,IAAA7N,QAAAgO,IAAAhO,QAAAkO,IAAAlO,QAAAmO,MAAAA,KAAAnO,EAAA,EAAA;AAdT,QAAAozC,KACEjlC;AAcA,MAAAC;AAAA,EAAApO,EAAA,EAAA,MAAAuvC,KAAAvvC,UAAAitC,KAEA7+B,sBAAC3H,IAAA,EACKwmC,IAAAA,GACCkD,KAAAA,GACG,SAAA,QACN,GAAA,QACG,MAAA,KACA,MAAA,KACI,UAAA,UACJ,MAAA,kBAGP,GAAOnwC,QAAAuvC,GAAAvvC,QAAAitC,GAAAjtC,QAAAoO,KAAAA,IAAApO,EAAA,EAAA;AAZT,QAAAqzC,KACEjlC;AAYA,MAAAK;AAAA,EAAAzO,EAAA,EAAA,MAAAgtC,KAAAhtC,EAAA,EAAA,MAAA8vC,KAAA9vC,UAAAitC,KAAAjtC,EAAA,EAAA,MAAAmzC,MAAAnzC,EAAA,EAAA,MAAAgzC,MAAAhzC,EAAA,EAAA,MAAAktC,KAAAltC,EAAA,EAAA,MAAAmtC,KAAAntC,EAAA,EAAA,MAAAotC,KAAAptC,UAAAqtC,KACoB5+B,KAAAqhC,IAAA,OACpB,gBAAAvuC,EAACwrC,IAAA,EACSC,QAAAA,GACQC,gBAAAA,GACEC,kBAAAA,GACLC,aAAAA,GACOC,oBAAAA,GACCC,qBAAAA,GACJ8F,iBAAAA,IACFH,eAAAA,IAAiB,GAEnChzC,QAAAgtC,GAAAhtC,QAAA8vC,GAAA9vC,QAAAitC,GAAAjtC,QAAAmzC,IAAAnzC,QAAAgzC,IAAAhzC,QAAAktC,GAAAltC,QAAAmtC,GAAAntC,QAAAotC,GAAAptC,QAAAqtC,GAAArtC,QAAAyO,MAAAA,KAAAzO,EAAA,EAAA;AAXD,QAAAszC,KAAsB7kC;AAWpB,MAAAC;AAAA,EAAA1O,EAAA,EAAA,MAAAqzC,MAAArzC,EAAA,EAAA,MAAAozC,MAAApzC,EAAA,EAAA,MAAA4vC,KAAA5vC,UAAAszC,MAIG5kC,KAAAkhC,MAAkB,SAAlB,gBAAAhuC,EAAAC,IAAA,EAEIuxC,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA;KACgB,IAJpB,gBAAA1xC,EAAAC,IAAA,EAQIwxC,UAAAA;AAAAA,IAAAA;AAAAA,IACAC;AAAAA,IACAF;AAAAA,EAAAA,GAAkB,GAEtBpzC,QAAAqzC,IAAArzC,QAAAozC,IAAApzC,QAAA4vC,GAAA5vC,QAAAszC,IAAAtzC,QAAA0O,MAAAA,KAAA1O,EAAA,EAAA;AAAA,MAAA4O;AAAA,SAAA5O,EAAA,EAAA,MAAAoG,KAAApG,UAAA0O,MAbHE,KAAA,gBAAArN,EAACkF,IAAA,EAAUwpC,KAAAA,GAAmB,WAAA,OAAQ,GAAA,QAAS,GAAA,QAAgB,UAAA,UAAQ,GAAK7pC,GACzEsI,UAAAA,IAaH,GAAO1O,QAAAoG,GAAApG,QAAA0O,IAAA1O,QAAA4O,MAAAA,KAAA5O,EAAA,EAAA,GAdP4O;AAcO;AAzPyB,SAAAzD,KAAA;AAAA;AAAA,SAAAY,KAAA;AAAA;AC3EpC,MAAMwnC,KAA2BA,CAACzS,MAChCA,EACG1nB,MAAM,GAAG,EACT/K,IAAKmlC,CAAAA,MAAYA,EAAQ9vC,MAAM,EAC/B8D,OAAOI,OAAO,EACdC,KAAK,GAAG,GAEP4rC,KAAYA,CAACC,OACjBA,EAAMxpB,KAAK,CAACwJ,GAAMC,MACZD,EAAKhN,SAASiN,EAAMjN,OAAagN,EAAKhN,SAAS,WAAW,KAAK,IAC5DgN,EAAK5yB,KAAKupB,cAAcsJ,EAAM7yB,IAAI,CAC1C,GAED4yC,EAAMC,QAASC,CAAAA,MAAS;AACtB,EAAIA,EAAK5xC,YAAUyxC,GAAUG,EAAK5xC,QAAQ;AAC5C,CAAC,GAEM0xC,IAGHG,KAAcA,CAACC,MAAoBnuB,MAAM0hB,KAAK,IAAI/jB,IAAIwwB,EAAMzlC,IAAIklC,EAAwB,EAAE/rC,OAAOI,OAAO,CAAC,CAAC,GAE1GmsC,KAAgBA,CAACD,MACrBD,GAAYC,CAAK,EACdzlC,IAAKyyB,CAAAA,OAAU;AAAA,EAAE/1B,IAAI,QAAQ+1B,CAAI;AAAA,EAAIhgC,MAAMggC;AAAAA,EAAMpa,MAAM;AAAO,EAAgC,EAC9FwD,KAAK,CAACwJ,GAAMC,MAAUD,EAAK5yB,KAAKupB,cAAcsJ,EAAM7yB,IAAI,CAAC,GAEjDkzC,KAAwBA,CAACF,GAAiBj8B,MAAsD;AAC3G,MAAIA,MAAS,OAAQ,QAAOk8B,GAAcD,CAAK;AAE/C,QAAMG,wBAAenf,IAAAA,GACfof,IAAmC,CAAA;AAEzCL,SAAAA,GAAYC,CAAK,EAAEH,QAAS7S,CAAAA,MAAS;AACnC,UAAMqT,IAAWrT,EAAK1nB,MAAM,GAAG;AAC/B,QAAIg7B,IAAa,IACbC,IAAyC;AAE7CF,IAAAA,EAASR,QAAQ,CAACH,GAASz8B,MAAU;AACnC,YAAMu9B,IAAcF,IAAa,GAAGA,CAAU,IAAIZ,CAAO,KAAKA,GACxDe,IAASx9B,MAAUo9B,EAASxwC,SAAS,GACrCkN,IAAS,GAAG0jC,IAAS,SAAS,QAAQ,IAAID,CAAW,IACrDE,IAAeP,EAASjf,IAAInkB,CAAM;AAExC,UAAI2jC,GAAc;AAChBH,QAAAA,IAAaG,GACbJ,IAAaE;AACb;AAAA,MACF;AAEA,YAAMG,IAAgC;AAAA,QACpC1pC,IAAI8F;AAAAA,QACJ/P,MAAM0yC;AAAAA,QACN9sB,MAAM6tB,IAAS,SAAS;AAAA,QACxB,GAAIA,IAAS,CAAA,IAAK;AAAA,UAAEvyC,UAAU,CAAA;AAAA,QAAA;AAAA,MAAG;AAGnCiyC,MAAAA,EAASlf,IAAIlkB,GAAQ4jC,CAAQ,GAExBJ,IACAA,EAAWryC,UAAUqnB,KAAKorB,CAAQ,IADtBP,EAAU7qB,KAAKorB,CAAQ,GAGxCJ,IAAaI,GACbL,IAAaE;AAAAA,IACf,CAAC;AAAA,EACH,CAAC,GAEMb,GAAUS,CAAS;AAC5B,GAEaQ,KAA2BA,CAAChB,MAAiC;AACxE,QAAMiB,IAAsB,CAAA,GAEtBC,IAAQA,CAACxtC,MAAiC;AAC9CA,IAAAA,EAAMusC,QAASlsC,CAAAA,MAAS;AACtB,MAAIA,EAAKif,SAAS,aAClBiuB,EAAUtrB,KAAK5hB,EAAKsD,EAAE,GACtB6pC,EAAMntC,EAAKzF,YAAY,EAAE;AAAA,IAC3B,CAAC;AAAA,EACH;AAEA4yC,SAAAA,EAAMlB,CAAK,GACJiB;AACT,GAEME,KAAyBA,CAACnB,MAAiC;AAC/D,QAAMoB,IAAyB,CAAA,GAEzBF,IAAQA,CAACG,MAAqC;AAClDA,IAAAA,EAAUpB,QAASC,CAAAA,MAAS;AAC1B,UAAIA,EAAKltB,SAAS,QAAQ;AACxBouB,QAAAA,EAAazrB,KAAKuqB,EAAK7oC,GAAGiqC,QAAQ,UAAU,EAAE,CAAC;AAC/C;AAAA,MACF;AAEAJ,MAAAA,EAAMhB,EAAK5xC,YAAY,EAAE;AAAA,IAC3B,CAAC;AAAA,EACH;AAEA4yC,SAAAA,EAAMlB,CAAK,GACJoB;AACT,GAEaG,KAAsBA,CAACnB,GAAiBj8B,MAC/CA,MAAS,SAAe,CAAC,GAAGi8B,CAAK,EAAE5pB,KAAK,CAACwJ,GAAMC,MAAUD,EAAKrJ,cAAcsJ,CAAK,CAAC,IAC/EkhB,GAAuBb,GAAsBF,GAAO,QAAQ,CAAC,GCrFzDoB,KAAqBC,GAAyBpgB,CAAAA,OAAS;AAAA,EAClEqgB,iBAAiB;AAAA,EACjBpvB,UAAU;AAAA,EACVkc,cAAc;AAAA,EACdmT,aAAa;AAAA,EACbC,cAAc;AAAA,EACdC,uCAAuBjyB,IAAAA;AAAAA,EACvBkyB,kBAAmBJ,OAAoBrgB,EAAI;AAAA,IAAEqgB,iBAAAA;AAAAA,EAAAA,CAAiB;AAAA,EAC9DK,iBAAiBA,MAAM1gB,EAAKgF,CAAAA,OAAW;AAAA,IAAEqb,iBAAiB,CAACrb,EAAMqb;AAAAA,EAAAA,EAAkB;AAAA,EACnFtb,aAAc9T,OAAa+O,EAAI;AAAA,IAAE/O,UAAAA;AAAAA,EAAAA,CAAU;AAAA,EAC3C0vB,iBAAkBxT,OAAiBnN,EAAI;AAAA,IAAEmN,cAAAA;AAAAA,EAAAA,CAAc;AAAA,EACvDyT,gBAAiBN,OAAgBtgB,EAAI;AAAA,IAAEsgB,aAAAA;AAAAA,EAAAA,CAAa;AAAA,EACpDO,iBAAkBN,OAAiBvgB,EAAI;AAAA,IAAEugB,cAAAA;AAAAA,EAAAA,CAAc;AAAA,EACvDO,sBAAuBlB,OAAc5f,EAAI;AAAA,IAAEwgB,mBAAmB,IAAIjyB,IAAIqxB,CAAS;AAAA,EAAA,CAAG;AAAA,EAClFmB,cAAeC,CAAAA,MACbhhB,EAAKgF,CAAAA,MAAU;AACb,UAAMwb,IAAoB,IAAIjyB,IAAIyW,EAAMwb,iBAAiB;AACzD,WAAIA,EAAkBzxB,IAAIiyB,CAAQ,IAAGR,EAAkB9K,OAAOsL,CAAQ,IACjER,EAAkBp7B,IAAI47B,CAAQ,GAC5B;AAAA,MAAER,mBAAAA;AAAAA,IAAAA;AAAAA,EACX,CAAC;AAAA,EACHS,WAAYrB,OAAc5f,EAAI;AAAA,IAAEwgB,mBAAmB,IAAIjyB,IAAIqxB,CAAS;AAAA,EAAA,CAAG;AAAA,EACvEsB,aAAaA,MAAMlhB,EAAI;AAAA,IAAEwgB,uCAAuBjyB,IAAAA;AAAAA,EAAI,CAAG;AACzD,EAAE,GC3CW4yB,KAAWA,CAACnrC,GAAYsd,MAAqBA,EAAOvgB,SAASiD,CAAE,GAE/DorC,KAAeA,CAACprC,GAAYqrC,MACvCzwB,MAAMC,QAAQwwB,CAAY,IAAIA,EAAatuC,SAASiD,CAAE,IAAIqrC,MAAiBrrC,GAEhEsrC,KAAkBA,CAACzC,MAAuBA,EAAKzhC,eAAeyhC,EAAKvhC,qBAAqB7R,QAExF81C,KAAkBA,CAAC1C,MAAwBA,EAAK5xC,YAA2C,CAAA,GAE3Fu0C,KAAwBA,CAAC3C,MACpC0C,GAAgB1C,CAAI,EAAEjwC,SAAS,KAAKiwC,EAAK1hC,gBAAgB,IAoBrDskC,KAAwBA,CAACzvC,MAOzB;AACJ,QAAM;AAAA,IAAE2iB,MAAAA;AAAAA,IAAM+sB,WAAAA;AAAAA,IAAW/C,OAAAA;AAAAA,IAAOgD,iBAAAA;AAAAA,IAAiBC,OAAAA;AAAAA,IAAOC,cAAAA;AAAAA,EAAAA,IAAiB7vC;AAEzE,aAAW6sC,KAAQF,GAAO;AACxBhqB,IAAAA,EAAKL,KAAK;AAAA,MAAE1C,MAAM;AAAA,MAAQrR,KAAK,GAAGmhC,CAAS,IAAI7C,EAAK7oC,EAAE;AAAA,MAAI0rC,WAAAA;AAAAA,MAAW7C,MAAAA;AAAAA,MAAM+C,OAAAA;AAAAA,MAAOC,cAAAA;AAAAA,IAAAA,CAAc;AAEhG,UAAM50C,IAAWs0C,GAAgB1C,CAAI;AACrC,IAAI5xC,EAAS2B,WAAW,KAAK,CAACuyC,GAAStC,EAAK7oC,IAAI2rC,CAAe,KAE/DF,GAAsB;AAAA,MACpB9sB,MAAAA;AAAAA,MACA+sB,WAAAA;AAAAA,MACA/C,OAAO1xC;AAAAA,MACP00C,iBAAAA;AAAAA,MACAC,OAAOA,IAAQ;AAAA,MACfC,cAAchD,EAAK7oC;AAAAA,IAAAA,CACpB;AAAA,EACH;AACF,GAEa8rC,KAAmBA,CAC9BC,GACAC,GACAL,MACG;AACH,QAAMhtB,IAAqB,CAAA;AAC3B,aAAWstB,KAAWF,GAAU;AAC9B,UAAM/G,IAAciH,EAAQjH,gBAAgB,MAASiH,EAAQtvC,UAAUlH,QACjE8uB,IAAWygB,IAAcmG,GAASc,EAAQjsC,IAAIgsC,CAAkB,IAAI;AAW1E,QAVIC,EAAQtvC,SACVgiB,EAAKL,KAAK;AAAA,MACR1C,MAAM;AAAA,MACNrR,KAAK,UAAU0hC,EAAQjsC,EAAE;AAAA,MACzB0rC,WAAWO,EAAQjsC;AAAAA,MACnBisC,SAAAA;AAAAA,MACAjH,aAAAA;AAAAA,MACAzgB,UAAAA;AAAAA,IAAAA,CACD,GAEC,EAACA,GACL;AAAA,UAAI0nB,EAAQtD,MAAM/vC,WAAW,GAAG;AAC9B,QAAIqzC,EAAQvuC,cACVihB,EAAKL,KAAK;AAAA,UACR1C,MAAM;AAAA,UACNrR,KAAK,SAAS0hC,EAAQjsC,EAAE;AAAA,UACxB0rC,WAAWO,EAAQjsC;AAAAA,UACnBtC,YAAYuuC,EAAQvuC;AAAAA,QAAAA,CACrB;AAEH;AAAA,MACF;AACA+tC,MAAAA,GAAsB;AAAA,QAAE9sB,MAAAA;AAAAA,QAAM+sB,WAAWO,EAAQjsC;AAAAA,QAAI2oC,OAAOsD,EAAQtD;AAAAA,QAAOgD,iBAAAA;AAAAA,QAAiBC,OAAO;AAAA,MAAA,CAAG;AAAA;AAAA,EACxG;AACA,SAAOjtB;AACT,GAGautB,KAAgBA,CAAC/vB,MAAuBA,EAAIP,SAAS,SAASO,EAAI0sB,KAAK7oC,KAAKmc,EAAI5R,KAEhF4hC,KAAiBA,CAAChwB,MACzBA,EAAIP,SAAS,SAAeO,EAAI0sB,KAAKpoC,aAAa,KAC/C0b,EAAIP,SAAS,oBAAoBO,EAAI6oB,aAGjCoH,KAAmBA,CAACztB,MAAuBA,EAAKliB,OAAO0vC,EAAc,GAErEE,KAA4BA,CACvCC,GACAjB,GACA1sB,MACG;AACH,QAAM4tB,IAAgBH,GAAiBztB,CAAI,GACrC6tB,IAAe,IAAIj0B,IAAIg0B,EAAcjpC,IAAI4oC,EAAa,CAAC;AAC7D,MAAII,KAAgBE,EAAazzB,IAAIuzB,CAAY,EAAG,QAAOA;AAG3D,QAAMG,KADY7xB,MAAMC,QAAQwwB,CAAY,IAAIA,IAAeA,IAAe,CAACA,CAAY,IAAI,CAAA,GACpEvrC,KAAME,OAAOwsC,EAAazzB,IAAI/Y,CAAE,CAAC;AAC5D,MAAIysC,EAAU,QAAOA;AAErB,QAAMC,IAAWH,EAAc,CAAC;AAChC,SAAOG,IAAWR,GAAcQ,CAAQ,IAAIj3C;AAC9C,GAEMk3C,KAAiCA,CAAC3wC,MAKlC;AACJ,QAAM;AAAA,IAAEmgB,KAAAA;AAAAA,IAAKowB,eAAAA;AAAAA,IAAeK,cAAAA;AAAAA,IAAcriC,KAAAA;AAAAA,EAAAA,IAAQvO;AAElD,MAAIuO,MAAQ,WAAWA,MAAQ,IAAK,QAAO;AAAA,IAAEoR,MAAM;AAAA,IAA2B+vB,WAAWvvB,EAAIuvB;AAAAA,EAAAA;AAE7F,MAAInhC,MAAQ,cAAc;AACxB,QAAI,CAAC4R,EAAIoI,SAAU,QAAO;AAAA,MAAE5I,MAAM;AAAA,MAA2B+vB,WAAWvvB,EAAIuvB;AAAAA,IAAAA;AAE5E,UAAMmB,IAAUN,EAAcK,IAAe,CAAC;AAC9C,WAAIC,GAASjxB,SAAS,UAAUixB,EAAQnB,cAAcvvB,EAAIuvB,YACjD;AAAA,MAAE/vB,MAAM;AAAA,MAAkB2J,OAAOunB,EAAQhE,KAAK7oC;AAAAA,IAAAA,IAEhD;AAAA,EACT;AAEA,SAAIuK,MAAQ,eAAe4R,EAAIoI,WAAiB;AAAA,IAAE5I,MAAM;AAAA,IAA2B+vB,WAAWvvB,EAAIuvB;AAAAA,EAAAA,IAE3F;AACT,GAEMoB,KAAwBA,CAAC9wC,MAMzB;AACJ,QAAM;AAAA,IAAEmgB,KAAAA;AAAAA,IAAKowB,eAAAA;AAAAA,IAAeK,cAAAA;AAAAA,IAAcjB,iBAAAA;AAAAA,IAAiBphC,KAAAA;AAAAA,EAAAA,IAAQvO,GAC7DuoB,IAAW4mB,GAAShvB,EAAI0sB,KAAK7oC,IAAI2rC,CAAe,GAChDoB,IAAavB,GAAsBrvB,EAAI0sB,IAAI;AAEjD,MAAIt+B,MAAQ,cAAc;AACxB,QAAI,CAACwiC,EAAY,QAAO;AACxB,QAAI,CAACxoB,EAAU,QAAO;AAAA,MAAE5I,MAAM;AAAA,MAAwB7V,QAAQqW,EAAI0sB,KAAK7oC;AAAAA,IAAAA;AAEvE,UAAM6sC,IAAUN,EAAcK,IAAe,CAAC;AAC9C,WAAIC,GAASjxB,SAAS,UAAUixB,EAAQhB,iBAAiB1vB,EAAI0sB,KAAK7oC,KACzD;AAAA,MAAE2b,MAAM;AAAA,MAAkB2J,OAAOunB,EAAQhE,KAAK7oC;AAAAA,IAAAA,IAEhD;AAAA,EACT;AAEA,MAAIuK,MAAQ,aAAa;AACvB,QAAIwiC,KAAcxoB,EAAU,QAAO;AAAA,MAAE5I,MAAM;AAAA,MAAwB7V,QAAQqW,EAAI0sB,KAAK7oC;AAAAA,IAAAA;AACpF,QAAImc,EAAI0vB,aAAc,QAAO;AAAA,MAAElwB,MAAM;AAAA,MAAkB2J,OAAOnJ,EAAI0vB;AAAAA,IAAAA;AAAAA,EACpE;AAEA,SAAO;AACT,GAEamB,KAAoCA,CAAChxC,MAM5C;AACJ,QAAM;AAAA,IAAE2iB,MAAAA;AAAAA,IAAM2tB,cAAAA;AAAAA,IAAcjB,cAAAA;AAAAA,IAAcM,iBAAAA;AAAAA,IAAiBphC,KAAAA;AAAAA,EAAAA,IAAQvO,GAC7DuwC,IAAgBH,GAAiBztB,CAAI;AAC3C,MAAI4tB,EAAc3zC,WAAW,EAAG,QAAO;AAEvC,QAAMq0C,IAAqBZ,GAA0BC,GAAcjB,GAAc1sB,CAAI,GAC/EiuB,IAAezQ,KAAKC,IACxB,GACAmQ,EAAczjB,UAAW3M,CAAAA,MAAQ+vB,GAAc/vB,CAAG,MAAM8wB,CAAkB,CAC5E,GACMC,IAAaX,EAAcK,CAAY;AAC7C,MAAI,CAACM,EAAY,QAAO;AAExB,QAAMC,IAAeA,CAACnhC,MAAkB;AACtC,UAAMohC,IAAUjR,KAAKkH,IAAIlH,KAAKC,IAAIpwB,GAAO,CAAC,GAAGugC,EAAc3zC,SAAS,CAAC;AACrE,WAAO;AAAA,MAAE+iB,MAAM;AAAA,MAAkB2J,OAAO4mB,GAAcK,EAAca,CAAO,CAAE;AAAA,IAAA;AAAA,EAC/E;AAEA,SAAI7iC,MAAQ,cAAoB4iC,EAAaP,IAAe,CAAC,IACzDriC,MAAQ,YAAkB4iC,EAAaP,IAAe,CAAC,IACvDriC,MAAQ,SAAe4iC,EAAa,CAAC,IACrC5iC,MAAQ,QAAc4iC,EAAaZ,EAAc3zC,SAAS,CAAC,IAE3Ds0C,EAAWtxB,SAAS,mBACf+wB,GAA+B;AAAA,IAAExwB,KAAK+wB;AAAAA,IAAYX,eAAAA;AAAAA,IAAeK,cAAAA;AAAAA,IAAcriC,KAAAA;AAAAA,EAAAA,CAAK,IAGtFuiC,GAAsB;AAAA,IAAE3wB,KAAK+wB;AAAAA,IAAYX,eAAAA;AAAAA,IAAeK,cAAAA;AAAAA,IAAcjB,iBAAAA;AAAAA,IAAiBphC,KAAAA;AAAAA,EAAAA,CAAK;AACrG,GC3La8iC,KAAkBr4C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC7B;AAAA,IAAAw2C,WAAAA;AAAAA,IAAA7C,MAAAA;AAAAA,IAAA+C,OAAAA;AAAAA,IAAAD,iBAAAA;AAAAA,IAAAN,cAAAA;AAAAA,IAAAiC,YAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAhiC,eAAAC;AAAAA,IAAAgiC,UAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,cAAAA;AAAAA,EAAAA,IAaI34C;AAAM,MAAAM;AAAA,EAAAL,SAAA4zC,KAEUvzC,IAAAk2C,GAAsB3C,CAAI,GAAC5zC,OAAA4zC,GAAA5zC,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA/C,QAAAmT,IAAoB9S;AAA4B,MAAAE;AAAA,EAAAP,EAAA,CAAA,MAAA02C,KAAA12C,EAAA,CAAA,MAAAmT,KAAAnT,EAAA,CAAA,MAAA4zC,EAAA7oC,MAC/BxK,IAAA4S,KAAe+iC,GAAStC,EAAI7oC,IAAK2rC,CAAe,GAAC12C,OAAA02C,GAAA12C,OAAAmT,GAAAnT,EAAA,CAAA,IAAA4zC,EAAA7oC,IAAA/K,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAlE,QAAAsvB,IAAiB/uB;AAAkD,MAAAE;AAAA,EAAAT,SAAAo2C,KAAAp2C,EAAA,CAAA,MAAA4zC,EAAA7oC,MAClDtK,IAAA01C,GAAavC,EAAI7oC,IAAKqrC,CAAY,GAACp2C,OAAAo2C,GAAAp2C,EAAA,CAAA,IAAA4zC,EAAA7oC,IAAA/K,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAApD,QAAAy3B,IAAiBh3B,GACjBgL,IAAmBmoC,EAAIpoC,aAAc;AAAK,MAAA5K;AAAA,EAAAZ,SAAA4zC,KACtBhzC,IAAAy1C,GAAgBzC,CAAI,GAAC5zC,OAAA4zC,GAAA5zC,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AAAzC,QAAAmS,IAAoBvR,GACpB+3C,IAAgB/wC,GAAQ2O,KAAiBq9B,EAAI3hC,QAArBE,KAAA,CAA8CgB,KAA9C,CAA8D1H;AAAY,MAAA1K;AAAA,EAAAf,EAAA,EAAA,MAAAmT,KAAAnT,EAAA,EAAA,MAAAyL,KAAAzL,EAAA,EAAA,MAAAmS,KAAAnS,UAAA4zC,KAAA5zC,EAAA,EAAA,MAAAy4C,KAAAz4C,EAAA,EAAA,MAAA04C,KAAA14C,EAAA,EAAA,MAAAy2C,KAE3E11C,IAAAA,MAAA;AACrB,QAAI0K,CAAAA,GACJ;AAAA,UAAI0H,GAAW;AACbulC,QAAAA,IAAe9E,EAAI7oC,EAAG;AAAC;AAAA,MAAA;AAGzB,UAAIoH,KAAAsmC,GAAyB;AAC3BA,QAAAA,EAAW;AAAA,UAAAhC,WAAAA;AAAAA,UAAA5lC,QAAqB+iC,EAAI7oC;AAAAA,UAAG6oC,MAAAA;AAAAA,UAAAgF,QAAgBhF,EAAIvhC;AAAAA,QAAAA,CAAmB;AAAC;AAAA,MAAA;AAGjFuhC,MAAAA,EAAIthC,aAAAA;AAAAA;AAAAA,EAAe,GACpBtS,QAAAmT,GAAAnT,QAAAyL,GAAAzL,QAAAmS,GAAAnS,QAAA4zC,GAAA5zC,QAAAy4C,GAAAz4C,QAAA04C,GAAA14C,QAAAy2C,GAAAz2C,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAXD,QAAAqT,IAAuBtS;AAWrB,MAAAE;AAAA,EAAAjB,EAAA,EAAA,MAAA4zC,EAAAlyC,WAAA1B,EAAA,EAAA,MAAA4zC,EAAA7oC,MAAA/K,UAAAy2C,KAISx1C,IAAA2yC,EAAIlyC,SAAa2M,IAACa,CAAAA,OAAa;AAAA,IAAA,GACnCA;AAAAA,IAAMG,UACCH,EAAMG,WAANI,CAAAA,MACOP,EAAMG,WAAY;AAAA,MAAAonC,WAAAA;AAAAA,MAAA5lC,QAAqB+iC,EAAI7oC;AAAAA,MAAG,GAAK0E;AAAAA,IAAAA,CAAS,IADnEjP;AAAAA,EAAAA,EAGV,GAACR,EAAA,EAAA,IAAA4zC,EAAAlyC,SAAA1B,EAAA,EAAA,IAAA4zC,EAAA7oC,IAAA/K,QAAAy2C,GAAAz2C,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,EAAA,MAAA4zC,KAAA5zC,UAAAiB,KAPyBC,IAAA;AAAA,IAAA,GACzB0yC;AAAAA,IAAIlyC,SACET;AAAAA,EAAAA,GAMVjB,QAAA4zC,GAAA5zC,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AARD,QAAA+xB,IAA8B7wB,GAmBdC,IAAAw1C,IAAQ,GACLzxC,IAAAiO,IAAAmc,IAAA9uB;AAAkC,MAAAmK;AAAA,EAAA3K,UAAA4zC,EAAA7oC,MAAA/K,UAAA04C,KAGnC/tC,IAAAA,MAAM+tC,IAAe9E,EAAI7oC,EAAG,GAAC/K,EAAA,EAAA,IAAA4zC,EAAA7oC,IAAA/K,QAAA04C,GAAA14C,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,EAAApL,EAAA,EAAA,MAAAsvB,KAAAtvB,UAAAqT,KAAArT,EAAA,EAAA,MAAAmT,KAAAnT,EAAA,EAAA,MAAAy3B,KAAAz3B,EAAA,EAAA,MAAA22C,KAAA32C,EAAA,EAAA,MAAA4zC,EAAA7oC,MAAA/K,EAAA,EAAA,MAAAw4C,KAAAx4C,EAAA,EAAA,MAAA+xB,KAAA/xB,EAAA,EAAA,MAAAq4C,KAAAr4C,EAAA,EAAA,MAAAmB,KAAAnB,EAAA,EAAA,MAAAkF,KAAAlF,UAAA2K,KAAA3K,EAAA,EAAA,MAAAu4C,KAb9BntC,IAAA;AAAA,IAAA,GACZ2mB;AAAAA,IAAO1gB,OACHslC;AAAAA,IAAK9zC,SACHw1C;AAAAA,IAAU7pC,YACPipB;AAAAA,IAAQ1nB,YACRuf;AAAAA,IAAQxc,kBACFK;AAAAA,IAAWolC,UAAAA;AAAAA,IAAA,2BAEF3E,EAAI7oC;AAAAA,IAAG,cACpB5J;AAAAA,IAAS,iBACN+D;AAAAA,IAAkCszC,SAAAA;AAAAA,IAAAlmC,YAEvCe;AAAAA,IAAcR,gBACVlI;AAAAA,EAAAA,GACjB3K,QAAAsvB,GAAAtvB,QAAAqT,GAAArT,QAAAmT,GAAAnT,QAAAy3B,GAAAz3B,QAAA22C,GAAA32C,EAAA,EAAA,IAAA4zC,EAAA7oC,IAAA/K,QAAAw4C,GAAAx4C,QAAA+xB,GAAA/xB,QAAAq4C,GAAAr4C,QAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAA2K,GAAA3K,QAAAu4C,GAAAv4C,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAdD,QAAAwU,IAAiBpJ;AAcf,MAAAS;AAAA,EAAA7L,EAAA,EAAA,MAAAuW,KAAAvW,UAAA24C,KAAA34C,EAAA,EAAA,MAAA4zC,EAAA3hC,QAAAjS,UAAAwU,KAGA3I,IAAA8sC,KAAApiC,KAA4Bq9B,EAAI3hC,yBAC7BsE,GAAA,EAAkB,IAAAq9B,EAAI3hC,MACrB,UAAA,gBAAA1Q,EAAC4K,MAAO,GAAKqI,GAAU,SAAA,GAAA,CAAO,GAChC,IAEA,gBAAAjT,EAAC4K,IAAA,EAAO,GAAKqI,EAAAA,CAAQ,GACtBxU,QAAAuW,GAAAvW,QAAA24C,GAAA34C,EAAA,EAAA,IAAA4zC,EAAA3hC,MAAAjS,QAAAwU,GAAAxU,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAPH,QAAAknB,IACErb;AAME,MAAAmB;AAAA,SAAAhN,EAAA,EAAA,MAAAs4C,KAAAt4C,UAAAknB,KAGFla,IAAA,gBAAAzL,EAACW,GAAA,EAAWo2C,QAAW,GAAA,QAAY,MAAA,KAAS,MAAA,QACzCpxB,UAAAA,EAAAA,CACH,GAAQlnB,QAAAs4C,GAAAt4C,QAAAknB,GAAAlnB,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA,GAFRgN;AAEQ,GCvFN6rC,KAAyB94C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC7B;AAAA,IAAAw2C,WAAAA;AAAAA,IAAA/0C,SAAAA;AAAAA,EAAAA,IAA+B3B;AAC/B,MAAI2B,EAAOiC,WAAY;AAAC,WAAS;AAAK,MAAAtD,GAAAE;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAOrBjB,IAAA;AAAA,IAAAqP,SAAW;AAAA,IAAGC,eAAiB;AAAA,EAAA,GACzBpP,IAAA;AAAA,IAAAmP,SAAW;AAAA,IAAGC,eAAiB;AAAA,EAAA,GAAQ3P,OAAAK,GAAAL,OAAAO,MAAAF,IAAAL,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,MAAAT,EAAA,CAAA,MAAA0B,KAAA1B,SAAAy2C,GAAA;AAAA,QAAA71C;AAAA,IAAAZ,SAAAy2C,KAI7C71C,IAAAsO,CAAAA,MACPA,EAAMC,aAAcD,EAAMC,UAAUxL,UAAW,IAC1C,gBAAApC,EAAC0N,IAAA,EAA6CC,QAAAA,EAAAA,GAAnBA,EAAMnE,EAAmB,IAEzDmE,EAAMC,aAAcD,EAAMC,UAAUxL,SAAU,IAE9C,gBAAA/B,EAAAqL,EAAA,MAAA,EACE,UAAA;AAAA,MAAA,gBAAA1L,EAAA0L,EAAA,SAAA,EAAc,aACZ,4BAACxI,IAAA,EAAmB,SAAA,SAAa,MAAA,OAAkB,cAAAyK,EAAMxH,OACtDwH,UAAAA,EAAM/O,MACT,GACF;AAAA,wBACA8M,EAAA,YAAA,EACE,UAAA,gBAAA1L,EAAA0L,EAAA,SAAA,EAAmB,MAAA,SAAW,IAAA,MAC3BiC,UAAAA,EAAMC,UAAUd,IAAKtC,EAIrB,GACH,EAAA,CACF;AAAA,IAAA,EAAA,GAdcmD,EAAMnE,EAetB,IAIF,gBAAAxJ,EAACkD,IAAA,EAES,SAAA,SACH,MAAA,OACO,cAAAyK,EAAMxH,OACT,SAAAsE,CAAAA,MAAA;AACPjI,MAAAA,EAAKkI,gBAAAA,GACLiD,EAAMG,WAAY;AAAA,QAAAonC,WAAAA;AAAAA,MAAAA,CAAa;AAAA,IAAC,GAGjCvnC,UAAAA,EAAM/O,KAAAA,GATF+O,EAAMnE,EAUb,GAEH/K,OAAAy2C,GAAAz2C,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GAtCAS,IAAAiB,EAAO2M,IAAKzN,CAsCZ,GAACZ,OAAA0B,GAAA1B,OAAAy2C,GAAAz2C,OAAAS;AAAAA,EAAA;AAAAA,IAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,SAAAZ,SAAAS,KA/CJG,sBAACkB,IAAA,EACK,KAAA,KACI,SAAA,KACM,eAAA,QACD,aAAAzB,GACM,mBAAAE,GACR,YAAA,sBACF,SAAA4K,IAER1K,UAAAA,GAuCH,GAAST,OAAAS,GAAAT,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GAhDTY;AAgDS,GAeAk4C,KAAwB/4C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACnC;AAAA,IAAA+2C,SAAAA;AAAAA,IAAAjH,aAAAA;AAAAA,IAAAzgB,UAAAA;AAAAA,IAAAypB,SAAAA;AAAAA,IAAAR,UAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAQ,UAAAA;AAAAA,IAAAC,eAAAA;AAAAA,EAAAA,IAAgGl5C,GAapFM,IAAA0vC,IAAA,YAAA,WACExvC,IAAAwvC,IAAAwI,IAAA/3C,QACeC,IAAAsvC,IAAAgJ,IAAAv4C,QACVI,IAAAmvC,IAAAzgB,IAAA9uB;AAAkC,MAAAO;AAAA,EAAAf,SAAA+vC,KACzChvC,IAAAgvC,IAAA;AAAA,IAAAxhC,IAAoB;AAAA,EAAA,IAApB/N,QAA4CR,OAAA+vC,GAAA/vC,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,SAAA+vC,KACrC9uC,IAAA8uC,IAAA;AAAA,IAAAxhC,IAAoB;AAAA,EAAA,IAApB/N,QAA4CR,OAAA+vC,GAAA/vC,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAClD,QAAAkB,IAAA6uC,IAAAyI,IAAAh4C,QACAW,IAAA4uC,IAAAiJ,IAAAx4C;AAAkC,MAAA0E;AAAA,EAAAlF,SAAAi5C,KAAAj5C,EAAA,CAAA,MAAAg3C,EAAAjsC,MAEzC7F,IAAA+zC,IAAAl1C,CAAAA,MAAA;AAEMA,IAAAA,EAAKC,eAAAA,GACLi1C,EAAcl1C,GAAOizC,EAAOjsC,EAAG;AAAA,EAAC,IAHtCvK,QAKaR,OAAAi5C,GAAAj5C,EAAA,CAAA,IAAAg3C,EAAAjsC,IAAA/K,OAAAkF,KAAAA,IAAAlF,EAAA,CAAA;AAAA,MAAA2K;AAAA,EAAA3K,EAAA,CAAA,MAAAg3C,EAAAtvC,SAIbiD,IAAA,gBAAApJ,EAACI,GAAA,EAAe,WAAA,YAAyB,eAAA,aAAkB,OAAA,YAAyB,eAAA,UAAS,cAC1Fq1C,YAAOtvC,OACV,GAAO1H,EAAA,CAAA,IAAAg3C,EAAAtvC,OAAA1H,OAAA2K,KAAAA,IAAA3K,EAAA,CAAA;AAAA,MAAAoL;AAAA,EAAApL,EAAA,CAAA,MAAA+vC,KAAA/vC,UAAAsvB,KACNlkB,IAAA2kC,IACC,gBAAAxuC,EAACb,GAAA,EAAU,OAAA,YAAuB,YAAA,GAChC,UAAA,gBAAAa,EAACkP,IAAA,EACO,MAAA,IACC,OAAA;AAAA,IAAAq9B,WAAaxe,IAAA,kBAAA;AAAA,IAA2C4pB,YAAc;AAAA,EAAA,EAAQ,CAAC,GAE1F,IAND,MAOOl5C,OAAA+vC,GAAA/vC,QAAAsvB,GAAAtvB,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,EAAA,EAAA,MAAAoL,KAAApL,UAAA2K,KAXVkB,sBAAC/J,IAAA,EAAW,KAAA,KAAS,MAAA,KAAS,MAAA,KAC5B6I,UAAAA;AAAAA,IAAAA;AAAAA,IAGCS;AAAAA,EAAAA,GAQH,GAASpL,QAAAoL,GAAApL,QAAA2K,GAAA3K,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,EAAAhN,EAAA,EAAA,MAAAg3C,EAAAt1C,WAC+CsL,IAAAgqC,EAAOt1C,WAAP,CAAA,GAAqB1B,EAAA,EAAA,IAAAg3C,EAAAt1C,SAAA1B,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA;AAAA,MAAAkN;AAAA,EAAAlN,UAAAg3C,EAAAjsC,MAAA/K,UAAAgN,KAA7EE,sBAAC2rC,IAAA,EAAkC,WAAA7B,EAAOjsC,IAAc,SAAAiC,GAAqB,GAAIhN,EAAA,EAAA,IAAAg3C,EAAAjsC,IAAA/K,QAAAgN,GAAAhN,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA;AAAA,MAAAmN;AAAA,SAAAnN,EAAA,EAAA,MAAAK,KAAAL,EAAA,EAAA,MAAAO,KAAAP,UAAA6L,KAAA7L,EAAA,EAAA,MAAAkN,KAAAlN,EAAA,EAAA,MAAAS,KAAAT,EAAA,EAAA,MAAAY,KAAAZ,EAAA,EAAA,MAAAe,KAAAf,UAAAiB,KAAAjB,EAAA,EAAA,MAAAkB,KAAAlB,EAAA,EAAA,MAAAmB,KAAAnB,UAAAkF,KAxCnFiI,sBAACrL,IAAA,EACW,WAAA,SACF,SAAA,iBACF,OAAA,UACJ,GAAA,QACG,MAAA,KACA,MAAA,QACF,IAAA,MACA,IAAA,OACI,QAAA,KACC,QAAAzB,GACE,UAAAE,GACe,2BAAAE,GACV,iBAAAG,GACP,QAAAG,GACO,eAAAE,GACN,SAAAC,GACA,SAAAC,GAEP,eAAA+D,GAQF2G,UAAAA;AAAAA,IAAAA;AAAAA,IAaAqB;AAAAA,EAAAA,GACF,GAASlN,QAAAK,GAAAL,QAAAO,GAAAP,QAAA6L,GAAA7L,QAAAkN,GAAAlN,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAiB,GAAAjB,QAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA,GAzCTmN;AAyCS;AAjHkB,SAAAhC,GAAApH,GAAA;AAAA,SAYLA,EAAKkI,gBAAAA;AAAkB;AAZlB,SAAAF,GAAAtE,GAAA;AAAA,qCA6BqB,OAAAA,EAAIsD,IAAe,UAAAtD,EAAI+D,UAAoB,eAAM/D,EAAI4H,cAClF5H,UAAAA,EAAIC,MAAAA,GADSD,EAAIsD,EAEpB;AAAY;ACxChC,MAAMouC,KAAiB,YAEVC,KAAkBA,CAAC3C,MAAsB,GAAG0C,EAAc,GAAG1C,CAAS,IACtE4C,KAAkBA,CAACtuC,MAAeA,EAAG6Y,WAAWu1B,EAAc,GAC9DG,KAAoBA,CAACvuC,MAAeA,EAAGic,MAAMmyB,GAAex1C,MAAM,GAEzE41C,KAAmB,CAAInyC,GAAYigC,GAAcmS,MAAe;AACpE,QAAMruB,IAAO/jB,EAAM4f,MAAAA,GACb,CAACyyB,CAAO,IAAItuB,EAAKuuB,OAAOrS,GAAM,CAAC;AACrClc,SAAAA,EAAKuuB,OAAOF,GAAI,GAAGC,CAAO,GACnBtuB;AACT,GAMawuB,KAAuBA,CAClC7C,GACAU,GACAoC,MACyB;AACzB,MAAIpC,MAAaoC,EAAQ,QAAO;AAEhC,MAAIP,GAAgB7B,CAAQ,KAAK6B,GAAgBO,CAAM,GAAG;AACxD,UAAMC,IAAa/C,EAASzoC,IAAK2oC,CAAAA,MAAYA,EAAQjsC,EAAE,GACjD+uC,IAAWD,EAAWE,QAAQT,GAAkB9B,CAAQ,CAAC,GACzDwC,IAAWH,EAAWE,QAAQT,GAAkBM,CAAM,CAAC;AAC7D,WAAIE,IAAW,KAAKE,IAAW,KAAKF,MAAaE,IAAiB,OAC3D;AAAA,MAAErzB,MAAM;AAAA,MAAWszB,gBAAgBV,GAAiBM,GAAYC,GAAUE,CAAQ;AAAA,IAAA;AAAA,EAC3F;AAEA,aAAWhD,KAAWF,GAAU;AAC9B,UAAMoD,IAAUlD,EAAQtD,MAAMrlC,IAAKulC,CAAAA,MAASA,EAAK7oC,EAAE,GAC7C+uC,IAAWI,EAAQH,QAAQvC,CAAQ,GACnCwC,IAAWE,EAAQH,QAAQH,CAAM;AACvC,QAAIE,EAAAA,IAAW,KAAKE,IAAW;AAC/B,aAAIF,MAAaE,IAAiB,OAC3B;AAAA,QACLrzB,MAAM;AAAA,QACN8vB,WAAWO,EAAQjsC;AAAAA,QACnBovC,aAAaZ,GAAiBW,GAASJ,GAAUE,CAAQ;AAAA,MAAA;AAAA,EAE7D;AAEA,SAAO;AACT,GCrBMI,KAAer6C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAI;AAAA,EAAAL,EAAA,CAAA,MAAAD,EAAAgL,MACU1K,IAAA;AAAA,IAAA0K,IAAMhL,EAAKgL;AAAAA,EAAAA,GAAK/K,EAAA,CAAA,IAAAD,EAAAgL,IAAA/K,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA7C,QAAA0qB,IAAiB2vB,GAAYh6C,CAAgB;AAAE,MAAAE;AAAA,MAAAP,EAAA,CAAA,MAAAD,EAAAiC,YAAAhC,EAAA,CAAA,MAAA0qB,EAAA5E,cAAA9lB,EAAA,CAAA,MAAA0qB,EAAA4vB,cAAAt6C,EAAA,CAAA,MAAA0qB,EAAA6vB,aAAAv6C,SAAA0qB,EAAA8vB,cAAAx6C,EAAA,CAAA,MAAA0qB,EAAAojB,aAAA9tC,EAAA,CAAA,MAAA0qB,EAAAwuB,YAAA;AAC/C,UAAAngC,IAAc;AAAA,MAAA+0B,WACD2M,GAAGC,UAAUC,SAAUjwB,EAAQojB,SAAU;AAAA,MAACoL,YACzCxuB,EAAQwuB;AAAAA,MAAWxpC,SACtBgb,EAAQ4vB,aAAR,MAAA;AAAA,IAAA;AAIN/5C,IAAAA,IAAAR,EAAKiC,SAAU;AAAA,MAAAw4C,YACF9vB,EAAQ8vB;AAAAA,MAAW10B,YACnB4E,EAAQ5E;AAAAA,MAAWy0B,WACpB7vB,EAAQ6vB;AAAAA,MAAUxhC,OAAAA;AAAAA,IAAAA,CAE9B,GAAC/Y,EAAA,CAAA,IAAAD,EAAAiC,UAAAhC,EAAA,CAAA,IAAA0qB,EAAA5E,YAAA9lB,EAAA,CAAA,IAAA0qB,EAAA4vB,YAAAt6C,EAAA,CAAA,IAAA0qB,EAAA6vB,WAAAv6C,EAAA,CAAA,IAAA0qB,EAAA8vB,YAAAx6C,EAAA,CAAA,IAAA0qB,EAAAojB,WAAA9tC,EAAA,CAAA,IAAA0qB,EAAAwuB,YAAAl5C,OAAAO;AAAAA,EAAA;AAAAA,IAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,SAAAT,UAAAO,KANJE,4BACGF,UAAAA,EAAAA,CAKC,GACDP,QAAAO,GAAAP,QAAAS,KAAAA,IAAAT,EAAA,EAAA,GAPHS;AAOG,GAkBDm6C,KAAuB76C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC3B;AAAA,IAAA+2C,SAAAA;AAAAA,IAAA6D,aAAAA;AAAAA,IAAAnE,iBAAAA;AAAAA,IAAAN,cAAAA;AAAAA,IAAAiC,YAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAhiC,eAAAA;AAAAA,IAAAmiC,YAAAA;AAAAA,IAAAqC,iBAAAA;AAAAA,IAAApC,cAAAA;AAAAA,IAAAqC,sBAAAA;AAAAA,EAAAA,IAYIh7C;AAAM,MAAAM;AAAA,EAAAL,SAAA66C,KAEQx6C,IAAAw6C,EAAWhwC,KAAMM,EAAsC,GAACnL,OAAA66C,GAAA76C,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA1E,QAAAg7C,IAAkB36C;AAAyD,MAAA46C,GAAA16C;AAAA,EAAAP,SAAA66C,KAC3EI,IAAiBJ,EAAWrzC,OAAQuE,EAA4B,GACxCxL,IAAA06C,EAAQzzC,OACtB0E,EAA+C,EAACmC,IACnDtB,EAAiD,GAAC/M,OAAA66C,GAAA76C,OAAAi7C,GAAAj7C,OAAAO,MAAA06C,IAAAj7C,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA;AAFzD,QAAAk7C,IAAwB36C;AAEkC,MAAAE;AAAA,EAAAT,EAAA,CAAA,MAAAg3C,EAAAjsC,MAGtCtK,IAAA24C,GAAgBpC,EAAOjsC,EAAG,GAAC/K,EAAA,CAAA,IAAAg3C,EAAAjsC,IAAA/K,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,SAAAo2C,KAAAp2C,EAAA,CAAA,MAAA02C,KAAA12C,EAAA,CAAA,MAAAg7C,KAAAh7C,UAAAsW,KAAAtW,EAAA,EAAA,MAAAs4C,KAAAt4C,EAAA,EAAA,MAAAi7C,KAAAj7C,EAAA,EAAA,MAAAy4C,KAAAz4C,UAAA+6C,KAAA/6C,EAAA,EAAA,MAAA04C,KAAA14C,EAAA,EAAA,MAAA86C,KAAA96C,UAAAq4C,KAAAr4C,EAAA,EAAA,MAAAk7C,KAC1Ct6C,IAAAG,CAAAA,MAAA;AAAC,UAAA;AAAA,MAAAy5C,YAAAA;AAAAA,MAAA10B,YAAAA;AAAAA,MAAAy0B,WAAAA;AAAAA,MAAAxhC,OAAAA;AAAAA,IAAAA,IAAAhY;AAA4C,WAC5C,gBAAAa,EAAClB,KAAS85C,KAAAA,GAAmBzhC,OAAAA,GAAS,GAAA,QAAY,MAAA,KAC/CiiC,UAAAA;AAAAA,MAAAA,KAAaA,EAASr0B,SAAU,mBAI/B,gBAAAplB,EAACb,GAAA,EAAG,GAAKolB,GAAU,GAAMy0B,GACvB,UAAA,gBAAAh5C,EAACu3C,MACU,SAAAkC,EAAShE,SACL,aAAAgE,EAASjL,aACZ,UAAAiL,EAAS1rB,UACV,SAAA0rB,EAAS1lC,KACR,UAAA,IACD,SAAAynB,IACC,UAAA,MAAM+d,IAAkBE,EAASvE,SAAU,GACtCsE,eAAAA,EAAAA,IAEnB,IAfD;AAAA,wBAiBAI,IAAA,EAAuBD,OAAAA,GAA2BE,UAAAA,IACjD,UAAA,gBAAA75C,EAACW,GAAA,EAAWo2C,KAAAA,GAAW,GAAA,QAAY,MAAA,KAChC2C,UAAAA,EAAQ5sC,IAAKgtC,CAAAA,MACZn0B,EAAGP,SAAU,2BACV20B,IAAA,EAEMp0B,KAAAA,GACYwvB,iBAAAA,GACHN,cAAAA,GACFiC,YAAAA,GACHC,SAAAA,GACMhiC,eAAAA,GACHmiC,YAAAA,GACEC,cAAAA,KARTxxB,EAAG5R,OAFZ,IAaF,GACF,EAAA,CACF;AAAA,IAAA,GACF;AAAA,EAAM,GACPtV,OAAAo2C,GAAAp2C,OAAA02C,GAAA12C,OAAAg7C,GAAAh7C,QAAAsW,GAAAtW,QAAAs4C,GAAAt4C,QAAAi7C,GAAAj7C,QAAAy4C,GAAAz4C,QAAA+6C,GAAA/6C,QAAA04C,GAAA14C,QAAA86C,GAAA96C,QAAAq4C,GAAAr4C,QAAAk7C,GAAAl7C,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AAAA,MAAAe;AAAA,SAAAf,EAAA,EAAA,MAAAS,KAAAT,UAAAY,KAxCHG,IAAA,gBAAAQ,EAAC64C,IAAA,EAAiB,IAAA35C,GACfG,UAAAA,GAwCH,GAAeZ,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,KAAAA,IAAAf,EAAA,EAAA,GAzCfe;AAyCe,GAebw6C,KAAgBA,CAACx0C,MAYrB,gBAAAxF,EAAC62C,MACC,WAAWrxC,EAAM0vC,WACjB,MAAM1vC,EAAM6sC,MACZ,OAAO7sC,EAAM4vC,OACb,iBAAiB5vC,EAAM2vC,iBACvB,cAAc3vC,EAAMqvC,cACpB,YAAYrvC,EAAMsxC,YAClB,SAAStxC,EAAMuxC,SACf,eAAevxC,EAAMuP,eACrB,YAAYvP,EAAM0xC,YAClB,cAAc1xC,EAAM2xC,cAAa,GAO/B4C,KAAyBv7C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAmG,GAAA8gB,GAAA7mB;AAAA,MAAAL,SAAAD,GAAA;AAGpBM,IAAAA,IAAAgB,uBAAsFC,IAAtF,6BAAqF;AAACgP,IAAAA;AAD/F,UADA;AAAA,QAAA4W,KAAAA;AAAAA,QAAA,GAAA9gB;AAAAA,MAAAA,IAAyBrG,GACrBmnB,EAAGyvB,QAAS,GAAC;AACRt2C,QAAAA,IAAAk7C,GAAc;AAAA,UAAA3H,MAAQ1sB,EAAG0sB;AAAAA,UAAK6C,WAAavvB,EAAGuvB;AAAAA,UAAUE,OAASzvB,EAAGyvB;AAAAA,UAAM,GAAKvwC;AAAAA,QAAAA,CAAM;AAArF,cAAAkK;AAAAA,MAAsF;AAC9FtQ,IAAAA,OAAAD,GAAAC,OAAAoG,GAAApG,OAAAknB,GAAAlnB,OAAAK;AAAAA,EAAA;AAAA+F,IAAAA,IAAApG,EAAA,CAAA,GAAAknB,IAAAlnB,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA;AAAA,MAAAK,MAAAgB,uBAAAC,IAAA,6BAAA;AAAA,WAAAjB;AAAA,MAAAE;AAAA,EAAAP,SAAAoG,KAAApG,EAAA,CAAA,MAAAknB,EAAAyvB,SAAA32C,EAAA,CAAA,MAAAknB,EAAA0sB,QAAA5zC,EAAA,CAAA,MAAAknB,EAAAuvB,aAGIl2C,IAAAE,CAAAA,MAAA;AAAC,UAAA;AAAA,MAAA+5C,YAAAA;AAAAA,MAAA10B,YAAAA;AAAAA,MAAAy0B,WAAAA;AAAAA,MAAAxhC,OAAAA;AAAAA,IAAAA,IAAAtY;AAA4C,WAC5C,gBAAAc,EAACb,GAAA,EAAS85C,KAAAA,GAAmBzhC,OAAAA,GAAS,GAAA,QAAY,MAAA,KAAG,GAAK+M,GAAU,GAAMy0B,GACvEgB,UAAAA,GAAc;AAAA,MAAA3H,MAAQ1sB,EAAG0sB;AAAAA,MAAK6C,WAAavvB,EAAGuvB;AAAAA,MAAUE,OAASzvB,EAAGyvB;AAAAA,MAAM,GAAKvwC;AAAAA,IAAAA,CAAM,GACxF;AAAA,EAAM,GACPpG,OAAAoG,GAAApG,EAAA,CAAA,IAAAknB,EAAAyvB,OAAA32C,EAAA,CAAA,IAAAknB,EAAA0sB,MAAA5zC,EAAA,CAAA,IAAAknB,EAAAuvB,WAAAz2C,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,SAAAT,EAAA,CAAA,MAAAknB,EAAA0sB,KAAA7oC,MAAA/K,EAAA,EAAA,MAAAO,KALHE,sBAAC25C,IAAA,EAAiB,IAAAlzB,EAAG0sB,KAAK7oC,IACvBxK,UAAAA,GAKH,GAAeP,EAAA,CAAA,IAAAknB,EAAA0sB,KAAA7oC,IAAA/K,QAAAO,GAAAP,QAAAS,KAAAA,IAAAT,EAAA,EAAA,GANfS;AAMe,GAqBN+6C,KAAmBz7C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC9B;AAAA,IAAA62C,UAAAA;AAAAA,IAAAC,oBAAA12C;AAAAA,IAAAq2C,iBAAAn2C;AAAAA,IAAA61C,cAAAA;AAAAA,IAAAiC,YAAA53C;AAAAA,IAAAg7C,YAAA76C;AAAAA,IAAA03C,SAAAv3C;AAAAA,IAAAuV,eAAAA;AAAAA,IAAAmiC,YAAAA;AAAAA,IAAAqC,iBAAAA;AAAAA,IAAApC,cAAAA;AAAAA,IAAAqC,sBAAAA;AAAAA,IAAAW,mBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,EAAAA,IAeI57C,GAbFg3C,IAAA12C,MAAAG,SAAA,CAAA,IAAAH,GACAq2C,IAAAn2C,MAAAC,SAAA,CAAA,IAAAD,GAEA83C,IAAA53C,MAAAD,SAAA,SAAAC,GACAg7C,IAAA76C,MAAAJ,SAAA,MAAAI,GACA03C,IAAAv3C,MAAAP,SAAA,MAAAO;AAAa,MAAAE;AAAA,EAAAjB,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAUqCL,IAAA;AAAA,IAAA26C,sBAAwB;AAAA,MAAAC,UAAY;AAAA,IAAA;AAAA,EAAE,GAAG77C,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAA7F,QAAA87C,IAAgBC,GAAWC,GAAUC,IAAeh7C,CAAyC,CAAC;AAAE,MAAAC;AAAA,EAAAlB,EAAA,CAAA,MAAA27C,KAAA37C,SAAA07C,KAAA17C,EAAA,CAAA,MAAA82C,KAE1E51C,IAAA6C,CAAAA,MAAA;AACpB,QAAI,CAACA,EAAKm4C;AAAK;AACf,UAAAC,IAAexC,GAAqB7C,GAAUxvB,OAAOvjB,EAAKknB,OAAOlgB,EAAG,GAAGuc,OAAOvjB,EAAKm4C,KAAKnxC,EAAG,CAAC;AAC5F,IAAKoxC,MACDA,EAAMx1B,SAAU,YAClB+0B,IAAoBS,EAAMlC,cAAe,IAEzC0B,IAAiBQ,EAAM1F,WAAY0F,EAAMhC,WAAY;AAAA,EACtD,GACFn6C,OAAA27C,GAAA37C,OAAA07C,GAAA17C,OAAA82C,GAAA92C,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AATD,QAAA6sB,IAAsB3rB,GAWtBwoB,IAAamtB,GAAiBC,GAAUC,GAAoBL,CAAe,GAGxEtpC,IAAAgvC,IACEtuC,IAAAqtC;AAAe,MAAAh6C;AAAA,EAAAnB,SAAA82C,KACP31C,IAAA21C,EAAQzoC,IAAK2uB,EAAwC,GAACh9B,OAAA82C,GAAA92C,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AACnDo7C,QAAAA,IAAAA,IAETiB,IAAAn6C,GAAyByI,IAAA,QAAYS,IAAA,KAASS,IAAA,QAC5CmB,IAAA8pC,EAAQzoC,IAAKiuC,CAAAA,MACZ,gBAAA/6C,EAACq5C,IAAA,EAEU5D,SAAAA,GACI,aAAAttB,EAAIliB,OAAQ0f,CAAAA,MAASA,EAAGuvB,cAAeO,EAAOjsC,EAAG,GAC7C2rC,iBAAAA,GACHN,cAAAA,GACFiC,YAAAA,GACHC,SAAAA,GACMhiC,eAAAA,GACHmiC,YAAAA,GACKqC,iBAAAA,GACHpC,cAAAA,GACQqC,sBAAAA,EAAAA,GAXjB/D,EAAOjsC,GAaf;AAAC,MAAAmC;AAAA,EAAAlN,EAAA,CAAA,MAAAq8C,KAAAr8C,SAAAy7C,KAAAz7C,EAAA,CAAA,MAAAgN,KAhBJE,IAAA,gBAAA3L,EAAC86C,GAAA,EAAWZ,KAAAA,GAAc,GAAA9wC,GAAY,MAAAS,GAAS,MAAAS,GAC5CmB,UAAAA,EAAAA,CAgBH,GAAQhN,OAAAq8C,GAAAr8C,OAAAy7C,GAAAz7C,OAAAgN,GAAAhN,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA;AAAA,MAAAmN;AAAA,EAAAnN,EAAA,EAAA,MAAA8N,KAAA9N,EAAA,EAAA,MAAAkN,KAAAlN,EAAA,EAAA,MAAAmB,KAAAnB,UAAAkF,KArBViI,sBAACW,GAAA,EACQ,OAAA3M,GACGi6C,UAAAA,GAEVluC,UAAAA,GAkBF,GAAkBlN,QAAA8N,GAAA9N,QAAAkN,GAAAlN,QAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA;AAAA,MAAAsN;AAAA,SAAAtN,EAAA,EAAA,MAAAoN,KAAApN,EAAA,EAAA,MAAA6sB,KAAA7sB,EAAA,EAAA,MAAA87C,KAAA97C,UAAAmN,KAvBpBG,sBAACF,GAAA,EAAoB0uC,SAAAA,GAAoBjvB,WAAAA,GACvC1f,UAAAA,GAuBF,GAAanN,QAAAoN,GAAApN,QAAA6sB,GAAA7sB,QAAA87C,GAAA97C,QAAAmN,GAAAnN,QAAAsN,KAAAA,IAAAtN,EAAA,EAAA,GAxBbsN;AAwBa;AAtMY,SAAAnC,GAAA+b,GAAA;AAAA,SAeiBA,EAAGP,SAAU;AAAgB;AAf9C,SAAA5a,GAAAwwC,GAAA;AAAA,SAgBkBr1B,EAAGP,SAAU;AAAM;AAhBrC,SAAAza,GAAAswC,GAAA;AAAA,SAkBRt1B,EAAGP,SAAU,UAAUO,EAAGyvB,UAAW;AAAC;AAlB9B,SAAA5pC,GAAA0vC,GAAA;AAAA,SAmBVv1B,EAAGP,SAAU,SAASO,EAAG0sB,KAAK7oC,KAA9B;AAAsC;AAnB5B,SAAAgyB,KAAA;AAAA;AA4IG,SAAAC,GAAAga,GAAA;AAAA,SAoCSoC,GAAgBpC,EAAOjsC,EAAG;AAAC;AClOpE,MAAM2xC,KAAiBA,CAAC/iC,GAA0Bo/B,MAC3Cp/B,IAEE,CAAC,GADSA,EAAK6tB,iBAA8B,2BAA2B,CAC5D,EAAE38B,KAAM48B,OAAYA,EAAQE,QAAQgV,oBAAoB5D,CAAO,KAAK,OAFrE,MAKd6D,KAAmBA,CAACjjC,GAA0B7M,MAA+B;AACjF,MAAI,GAAC6M,KAAQ,EAAE7M,aAAkB+vC,gBAAgB,CAACljC,EAAKuT,SAASpgB,CAAM;AACtE,WAAOA,EAAOgwC,QAAqB,2BAA2B,GAAGnV,QAAQgV;AAC3E,GAEMI,KAAsBA,CAACjwC,MACrBA,aAAkB+vC,cACpB/vC,EAAOkwC,oBAA0B,KAC9B,CAAC,SAAS,YAAY,QAAQ,EAAEl1C,SAASgF,EAAOmwC,OAAO,IAFjB,IAKzCC,KAAcA,CAACxzB,GAAoBqvB,MACvCrvB,EAAKmK,UAAW3M,CAAAA,MAAQgwB,GAAehwB,CAAG,KAAK+vB,GAAc/vB,CAAG,MAAM6xB,CAAO,GAElEoE,KAAgCp2C,CAAAA,MAAA;AAAA,QAAA/G,IAAAC,EAAA,EAAA,GAQ3C;AAAA,IAAAypB,MAAAA;AAAAA,IAAA0sB,cAAAA;AAAAA,IAAAM,iBAAAA;AAAAA,IAAAgC,cAAAA;AAAAA,IAAAoC,iBAAAA;AAAAA,IAAAsC,aAAAA;AAAAA,EAAAA,IAA4Fr2C,GAC5FkpC,IAAgBnmC,GAA8B,IAAI,GAClD,CAAAutC,GAAAgG,CAAA,IAAwC/5C,GAAAA,GACxC,CAAAg6C,GAAAC,CAAA,IAAkDj6C,GAAAA;AAAmB,MAAAjD;AAAA,EAAAL,EAAA,CAAA,MAAAo2C,KAAAp2C,SAAAq3C,KAAAr3C,EAAA,CAAA,MAAA0pB,KAClDrpB,IAAA+2C,GAA0BC,GAAcjB,GAAc1sB,CAAI,GAAC1pB,OAAAo2C,GAAAp2C,OAAAq3C,GAAAr3C,OAAA0pB,GAAA1pB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA9E,QAAAw9C,IAAmBn9C;AAA4D,MAAAE;AAAA,EAAAP,SAAA0pB,KACvDnpB,IAAA42C,GAAiBztB,CAAI,EAACrb,IAAK4oC,EAAa,EAACpvC,KAAM,IAAI,GAAC7H,OAAA0pB,GAAA1pB,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAA5E,QAAAy9C,IAAwBl9C;AAAqD,MAAAE,GAAAG;AAAA,EAAAZ,EAAA,CAAA,MAAAy9C,KAAAz9C,SAAAq3C,KAEnE52C,IAAAA,MAAA;AACR,IAAK42C,MACDoG,EAAerkC,MAAO,IAAI,EAACtR,SAAUuvC,CAAY,KACrDgG,EAAgB78C,MAAS;AAAA,EAAC,GACzBI,IAAA,CAACy2C,GAAcoG,CAAe,GAACz9C,OAAAy9C,GAAAz9C,OAAAq3C,GAAAr3C,OAAAS,GAAAT,OAAAY,MAAAH,IAAAT,EAAA,CAAA,GAAAY,IAAAZ,EAAA,CAAA,IAJlCmK,GAAU1J,GAIPG,CAA+B;AAAC,MAAAG,GAAAE;AAAA,EAAAjB,UAAAs9C,KAEzBv8C,IAAAA,MAAA;AACR,QAAI,CAACu8C;AAAiB;AACtB,UAAAI,IAAc7T,sBAAsB,MAAA;AAClCA,4BAAsB,MAAA;AACpB,cAAApC,IAAgBiV,GAAezM,EAAO7lC,SAAUkzC,CAAiB;AACjE,QAAK7V,MACLA,EAAOl9B,MAAAA,GACPgzC,EAAqB/8C,MAAS;AAAA,MAAC,CAChC;AAAA,IAAC,CACH;AAAE,WAEI,MAAMypC,qBAAqByT,CAAK;AAAA,EAAC,GACvCz8C,IAAA,CAACq8C,CAAiB,GAACt9C,QAAAs9C,GAAAt9C,QAAAe,GAAAf,QAAAiB,MAAAF,IAAAf,EAAA,EAAA,GAAAiB,IAAAjB,EAAA,EAAA,IAZtBmK,GAAUpJ,GAYPE,CAAmB;AAAC,MAAAC;AAAA,EAAAlB,EAAA,EAAA,MAAA0pB,KAAA1pB,UAAAo9C,KAENl8C,IAAAmvB,CAAAA,MAAA;AACfgtB,IAAAA,EAAgBhtB,CAAK;AACrB,UAAAstB,IAAgBjB,GAAezM,EAAO7lC,SAAUimB,CAAK;AACrD,QAAIoX,GAAO;AACTA,MAAAA,EAAOl9B,MAAAA;AAAQ;AAAA,IAAA;AAIjB,UAAAqzC,IAAiBV,GAAYxzB,GAAM2G,CAAK;AACxC,IAAIutB,MAAa,OACjBR,IAAcQ,CAAQ,GACtBL,EAAqBltB,CAAK;AAAA,EAAC,GAC5BrwB,QAAA0pB,GAAA1pB,QAAAo9C,GAAAp9C,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAZD,QAAA69C,IAAiB38C;AAYf,MAAAC;AAAA,EAAAnB,EAAA,EAAA,MAAAo2C,KAAAp2C,EAAA,EAAA,MAAA02C,KAAA12C,EAAA,EAAA,MAAA69C,KAAA79C,UAAAw9C,KAAAx9C,EAAA,EAAA,MAAA04C,KAAA14C,EAAA,EAAA,MAAA86C,KAAA96C,EAAA,EAAA,MAAA0pB,KAEoBvoB,IAAA4C,CAAAA,MAAA;AAEpB,QADIA,EAAK+5C,UAAW/5C,EAAKg6C,WAAYh6C,EAAKi6C,WAAYj6C,EAAKk6C,YACvDlB,GAAoBh5C,EAAK+I,MAAO;AAAC;AAErC,UAAAoxC,IAAmBnG,GAAkC;AAAA,MAAAruB,MAAAA;AAAAA,MAAA2tB,cAErCuF,GAAiB3M,EAAO7lC,SAAUrG,EAAK+I,MAAqB,KAA5D0wC;AAAAA,MAA6DpH,cAAAA;AAAAA,MAAAM,iBAAAA;AAAAA,MAAAphC,KAGtEvR,EAAKuR;AAAAA,IAAAA,CACX;AACD,QAAK4oC,GAGL;AAAA,UADAn6C,EAAKC,eAAAA,GACDk6C,EAAUx3B,SAAU,eAAa;AACnCgyB,QAAAA,IAAewF,EAAUrtC,MAAO;AAAC;AAAA,MAAA;AAGnC,UAAIqtC,EAAUx3B,SAAU,kBAAgB;AACtCo0B,QAAAA,IAAkBoD,EAAUzH,SAAU;AAAC;AAAA,MAAA;AAIzCoH,MAAAA,EAASK,EAAU7tB,KAAM;AAAA;AAAA,EAAC,GAC3BrwB,QAAAo2C,GAAAp2C,QAAA02C,GAAA12C,QAAA69C,GAAA79C,QAAAw9C,GAAAx9C,QAAA04C,GAAA14C,QAAA86C,GAAA96C,QAAA0pB,GAAA1pB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAxBD,QAAAm+C,IAAsBh9C;AAwBpB,MAAA+D;AAAA,EAAAlF,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAMY4D,IAAA06B,CAAAA,MAAmByd,EAAgBhtB,CAAK,GAACrwB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,SAAA3K,EAAA,EAAA,MAAAw9C,KAAAx9C,UAAAm+C,KAJhDxzC,IAAA;AAAA,IAAA6yC,YAAAA;AAAAA,IAAAvN,SAAAA;AAAAA,IAAAkO,eAAAA;AAAAA,IAAAC,YAIOl5C;AAAAA,EAAAA,GACblF,QAAAw9C,GAAAx9C,QAAAm+C,GAAAn+C,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA,GALM2K;AAKN,GC3DG0zC,KAAuB,IACvBC,KAAuB,GAiBvBC,KAAmBA,CAACx3C,MAAiC;AACzD,QAAM;AAAA,IACJmgB,KAAAA;AAAAA,IACAwvB,iBAAAA;AAAAA,IACAN,cAAAA;AAAAA,IACAoH,YAAAA;AAAAA,IACAnF,YAAAA;AAAAA,IACAC,SAAAA;AAAAA,IACAhiC,eAAAA;AAAAA,IACA8nC,YAAAA;AAAAA,IACA3F,YAAAA;AAAAA,IACAqC,iBAAAA;AAAAA,IACApC,cAAAA;AAAAA,IACAqC,sBAAAA;AAAAA,EAAAA,IACEh0C;AAEJ,SAAImgB,EAAIP,SAAS,mBAEb,gBAAAplB,EAACu3C,IAAA,EACC,SAAS5xB,EAAI8vB,SACb,aAAa9vB,EAAI6oB,aACjB,UAAU7oB,EAAIoI,UACd,SAASpI,EAAI5R,KACb,UAAU4R,EAAI5R,QAAQkoC,IAAa,IAAI,IACvC,SAAS,MAAMY,EAAWl3B,EAAI5R,GAAG,GACjC,UAAU,MAAMwlC,IAAkB5zB,EAAIuvB,SAAS,GAC/C,eAAesE,GAAqB,IAKtC7zB,EAAIP,SAAS,kBAAwBO,EAAIze,cAAc,OAGzD,gBAAAlH,EAAC62C,IAAA,EACC,WAAWlxB,EAAIuvB,WACf,MAAMvvB,EAAI0sB,MACV,OAAO1sB,EAAIyvB,OACX,iBAAAD,GACA,cAAAN,GACA,YAAAiC,GACA,SAAAC,GACA,eAAAhiC,GACA,UAAU4Q,EAAI0sB,KAAK7oC,OAAOyyC,IAAa,IAAI,IAC3C,SAAS,MAAMY,EAAWl3B,EAAI0sB,KAAK7oC,EAAE,GACrC,YAAA0tC,GACA,cAAAC,GAA2B;AAGjC,GAOM8F,KAAkBA,CAACz+C,MAAgC;AACvD,QAAM;AAAA,IACJ2pB,MAAAA;AAAAA,IACAgtB,iBAAAA,IAAkB,CAAA;AAAA,IAClBN,cAAAA;AAAAA,IACAiC,YAAAA,IAAa;AAAA,IACbC,SAAAA,IAAU;AAAA,IACVhiC,eAAAA;AAAAA,IACAmiC,YAAAA;AAAAA,IACAqC,iBAAAA;AAAAA,IACApC,cAAAA;AAAAA,IACAqC,sBAAAA;AAAAA,IACAzS,WAAAA;AAAAA,EAAAA,IACEvoC,GAEEkrC,IAAcC,GAAe;AAAA,IACjC1oC,OAAOknB,EAAK/lB;AAAAA,IACZwnC,kBAAkBA,MAAM7C,EAAUl+B;AAAAA,IAClCghC,cAAcA,MAAMiT;AAAAA,IACpB/S,UAAUgT;AAAAA,IACVjT,YAAat0B,CAAAA,MAAU2S,EAAK3S,CAAK,GAAGzB,OAAOyB;AAAAA,EAAAA,CAC5C,GACK0nC,IAAWtB,GAA8B;AAAA,IAC7CzzB,MAAAA;AAAAA,IACA0sB,cAAAA;AAAAA,IACAM,iBAAAA;AAAAA,IACAgC,cAAAA;AAAAA,IACAoC,iBAAAA;AAAAA,IACAsC,aAAcrmC,CAAAA,MAAUk0B,EAAYyT,cAAc3nC,GAAO;AAAA,MAAE+lB,OAAO;AAAA,IAAA,CAAQ;AAAA,EAAA,CAC3E;AAED,SACE,gBAAAv7B,EAACb,GAAA,EACC,KAAK+9C,EAASxO,SACd,MAAK,WACL,GAAE,QACF,MAAK,KACL,MAAK,QACL,UAAS,YACT,OAAO;AAAA,IAAEv/B,QAAQu6B,EAAYuB,aAAAA;AAAAA,EAAa,GAC1C,WAAWiS,EAASN,eAEnBlT,YAAYqB,gBAAAA,EAAkBj+B,IAAKo+B,CAAAA,MAAgB;AAClD,UAAMvlB,IAAMwC,EAAK+iB,EAAY11B,KAAK;AAClC,WAAKmQ,sBAGFxmB,GAAA,EAEC,KAAKuqC,EAAYyB,gBACjB,cAAYD,EAAY11B,OACxB,sBAAoBmQ,EAAIP,MACxB,UAAS,YACT,KAAI,KACJ,MAAK,KACL,GAAE,QACF,OAAO;AAAA,MAAEmnB,WAAW,cAAcrB,EAAYE,KAAK;AAAA,IAAA,GAElD4R,UAAAA,GAAiB;AAAA,MAChBr3B,KAAAA;AAAAA,MACAwvB,iBAAAA;AAAAA,MACAN,cAAAA;AAAAA,MACAoH,YAAYiB,EAASjB;AAAAA,MACrBnF,YAAAA;AAAAA,MACAC,SAAAA;AAAAA,MACAhiC,eAAAA;AAAAA,MACA8nC,YAAYK,EAASL;AAAAA,MACrB3F,YAAAA;AAAAA,MACAqC,iBAAAA;AAAAA,MACApC,cAAAA;AAAAA,MACAqC,sBAAAA;AAAAA,IAAAA,CACD,EAAA,GAvBItO,EAAYn3B,GAwBnB,IA5Be;AAAA,EA8BnB,CAAC,EAAA,CACH;AAEJ,GAEMqpC,KAAgBA,CAAC5+C,MAAyB;AAC9C,QAAM;AAAA,IACJ+2C,UAAAA;AAAAA,IACAC,oBAAAA,IAAqB,CAAA;AAAA,IACrBL,iBAAAA,IAAkB,CAAA;AAAA,IAClBN,cAAAA;AAAAA,IACAiC,YAAAA,IAAa;AAAA,IACboD,YAAAA,IAAa;AAAA,IACbnD,SAAAA,IAAU;AAAA,IACVhiC,eAAAA;AAAAA,IACAmiC,YAAAA;AAAAA,IACAqC,iBAAAA;AAAAA,IACApC,cAAAA;AAAAA,IACAqC,sBAAAA;AAAAA,IACA6D,YAAAA;AAAAA,IACAtW,WAAAA;AAAAA,EAAAA,IACEvoC,GACE2pB,IAAOmtB,GAAiBC,GAAUC,GAAoBL,CAAe,GACrE+H,IAAWtB,GAA8B;AAAA,IAC7CzzB,MAAAA;AAAAA,IACA0sB,cAAAA;AAAAA,IACAM,iBAAAA;AAAAA,IACAgC,cAAAA;AAAAA,IACAoC,iBAAAA;AAAAA,EAAAA,CACD;AAED,SAAI8D,KAActW,IACT,gBAAA/mC,EAACi9C,IAAA,KAAoBz+C,GAAO,MAAA2pB,GAAY,WAAA4e,GAAqB,IAIpE,gBAAA/mC,EAACW,KACC,KAAKu8C,EAASxO,SACd,MAAK,WACL,KAAKwL,GACL,GAAE,QACF,MAAK,KACL,MAAK,QACL,WAAU,UACV,WAAWgD,EAASN,eAEnBrH,UAAAA,EAASzoC,IAAK2oC,CAAAA,MAAY;AACzB,UAAM6D,IAAcnxB,EAAKliB,OAAQ0f,OAAQA,EAAIuvB,cAAcO,EAAQjsC,EAAE;AAErE,WACE,gBAAAxJ,EAACW,GAAA,EAEC,KAAKo2C,GACL,GAAE,QACF,MAAK,KACL,MAAK,QACL,eAAa,qBAAqBtB,EAAQjsC,EAAE,IAE3C8vC,UAAAA,EAAYxsC,IAAK6Y,CAAAA,MAChB,gBAAA3lB,EAACb,KAAkB,GAAE,QAAO,MAAK,KAC9B69C,UAAAA,GAAiB;AAAA,MAChBr3B,KAAAA;AAAAA,MACAwvB,iBAAAA;AAAAA,MACAN,cAAAA;AAAAA,MACAoH,YAAYiB,EAASjB;AAAAA,MACrBnF,YAAAA;AAAAA,MACAC,SAAAA;AAAAA,MACAhiC,eAAAA;AAAAA,MACA8nC,YAAYK,EAASL;AAAAA,MACrB3F,YAAAA;AAAAA,MACAqC,iBAAAA;AAAAA,MACApC,cAAAA;AAAAA,MACAqC,sBAAAA;AAAAA,IAAAA,CACD,EAAA,GAdO7zB,EAAI5R,GAed,CACD,EAAA,GAxBI0hC,EAAQjsC,EAyBf;AAAA,EAEJ,CAAC,EAAA,CACH;AAEJ,GAYM8zC,KAAqB9+C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACzB;AAAA,IAAAyB,SAAAA;AAAAA,IAAAM,UAAAA;AAAAA,EAAAA,IAA8BjC;AAAM,MAAAM;AAAA,EAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAK9BjB,IAAA,gBAAAkB,EAACb,GAAA,EAAa,UAAA,YAAiB,OAAA,KAAY,QAAA,GAAG,eAAA,IAAsC,6BAAA,OAAA,CAAM,GAAGV,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,SAAA0B,KAD/FnB,sBAACqU,IAAA,EAA6BlT,SAAAA,GAAwB,eAAA,IACpDrB,UAAAA,GACF,GAAsBL,OAAA0B,GAAA1B,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAAgC,KACtBvB,IAAA,gBAAAc,EAACb,GAAA,EAAa,UAAA,YAAmB,QAAA,GAAK,GAAA,QAAY,MAAA,KAAS,MAAA,QACxDsB,UAAAA,GACH,GAAMhC,OAAAgC,GAAAhC,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,SAAAZ,EAAA,CAAA,MAAAO,KAAAP,SAAAS,KANRG,IAAA,gBAAAgB,EAAClB,GAAA,EAAa,UAAA,YAAgB,MAAA,YAAgB,MAAA,QAAS,GAAA,QAAY,MAAA,KAAS,MAAA,QAC1EH,UAAAA;AAAAA,IAAAA;AAAAA,IAGAE;AAAAA,EAAAA,GAGF,GAAMT,OAAAO,GAAAP,OAAAS,GAAAT,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GAPNY;AAOM,GAIGk+C,KAAW/+C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,EAAAL,SAAAD,KACNM,IAAAN,EAAKiS,YACnB,gBAAAzQ,EAACi6C,IAAA,EACW,UAAAz7C,EAAK+2C,UACK,oBAAA/2C,EAAKg3C,oBACR,iBAAAh3C,EAAK22C,iBACR,cAAA32C,EAAKq2C,cACP,YAAAr2C,EAAKs4C,YACL,YAAAt4C,EAAK07C,YACR,SAAA17C,EAAKu4C,SACC,eAAAv4C,EAAKuW,eACR,YAAAvW,EAAK04C,YACA,iBAAA14C,EAAK+6C,iBACR,cAAA/6C,EAAK24C,cACG,sBAAA34C,EAAKg7C,sBACR,mBAAAh7C,EAAK27C,mBACR,gBAAA37C,EAAK47C,gBAAe,IAGtC,gBAAAp6C,EAACo9C,IAAA,EAAa,GAAK5+C,EAAAA,CAAK,GACzBC,OAAAD,GAAAC,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAnBD,QAAAyU,IAAgBpU;AAqBhB,MAAI,CAACN,EAAKg/C,4BAA6Bh/C,EAAKg/C,yBAAyBp7C,WAAY;AAAC,WACzE8Q;AACR,MAAAlU;AAAA,SAAAP,SAAAyU,KAAAzU,EAAA,CAAA,MAAAD,EAAAg/C,4BAEMx+C,IAAA,gBAAAgB,EAACs9C,IAAA,EAA4B,SAAA9+C,EAAKg/C,0BAA4BtqC,UAAAA,GAAQ,GAAqBzU,OAAAyU,GAAAzU,EAAA,CAAA,IAAAD,EAAAg/C,0BAAA/+C,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GAA3FO;AAA2F,GCpT9Fy+C,KAAuC;AAAA,EAC3CC,OAAO;AAAA,EACPC,QAAQ;AAAA,EACRC,SAAS;AAAA,EACT3/B,UAAU;AAAA,EACV4/B,kBAAkB;AAAA,EAClBC,SAAS;AACX,GAEMC,KAAuC;AAAA,EAC3CL,OAAO;AAAA,EACPC,QAAQ;AAAA,EACRC,SAAS;AAAA,EACT3/B,UAAU;AAAA,EACV4/B,kBAAkB;AAAA,EAClBC,SAAS;AACX,GAEME,KAAmBA,CAAC3d,MAAqB;AAC7C,QAAM4d,IAAiB5d,EAAS6d,YAAY,GAAG;AAC/C,SAAID,IAAiB,IAAU;AAAA,IAAEle,UAAUM;AAAAA,IAAU8d,SAAS;AAAA,EAAA,IACvD;AAAA,IAAEpe,UAAUM,EAAS5a,MAAMw4B,IAAiB,CAAC;AAAA,IAAGE,SAAS9d,EAAS5a,MAAM,GAAGw4B,CAAc;AAAA,EAAA;AAClG,GAEMG,KAAkBA,CAAC/L,GAA2B5tB,GAAgC4b,MAAqB;AACvG,QAAM;AAAA,IAAEN,UAAAA;AAAAA,IAAUoe,SAAAA;AAAAA,EAAAA,IAAYH,GAAiB3d,CAAQ;AACvD,SAAI5b,MAAa,UAAU,CAAC05B,IAAgB9L,EAAK9yC,OAG/C,gBAAAc,EAACD,GAAA,EAAK,WAAU,mBAAkB,UAAQ,IACxC,UAAA;AAAA,IAAA,gBAAAJ,EAACI,GAAA,EAAK,IAAG,QAAO,OAAM,cACnB2/B,UAAAA,GACH;AAAA,IAAQ;AAAA,sBACP3/B,GAAA,EAAK,IAAG,QAAO,OAAM,YACnB+9C,UAAAA,EAAAA,CACH;AAAA,EAAA,GACF;AAEJ,GAEME,KAAkBA,CAAC74C,MAMH;AACpB,QAAM;AAAA,IAAE2sC,OAAAA;AAAAA,IAAO1tB,UAAAA;AAAAA,IAAU65B,cAAAA;AAAAA,IAAcC,iBAAAA;AAAAA,IAAiBC,cAAAA;AAAAA,EAAAA,IAAiBh5C;AAEzE,SAAO2sC,EAAMrlC,IAAKulC,CAAAA,MAAS;AACzB,QAAIA,EAAKltB,SAAS;AAChB,aAAO;AAAA,QACL3b,IAAI6oC,EAAK7oC;AAAAA,QACTrD,OAAOksC,EAAK9yC;AAAAA,QACZoR,aAAa;AAAA,QACblQ,UAAU49C,GAAgB;AAAA,UACxBlM,OAAOE,EAAK5xC,YAAY,CAAA;AAAA,UACxBgkB,UAAAA;AAAAA,UACA65B,cAAAA;AAAAA,UACAC,iBAAAA;AAAAA,UACAC,cAAAA;AAAAA,QAAAA,CACD;AAAA,MAAA;AAIL,UAAMne,IAAWgS,EAAK7oC,GAAGiqC,QAAQ,UAAU,EAAE,GACvCgL,IAAWF,IAAkBle,CAAQ,KAAK;AAAA,MAAEzhC,MAAM,gBAAAoB,EAACmD,IAAA,EAAK,IAAIu7C,IAAU,SAAQ,QAAM;AAAA,MAAK7/C,OAAO;AAAA,IAAA,GAChGqkC,IAASsb,GAAc/qB,IAAI4M,CAAQ;AAEzC,WAAO;AAAA,MACL72B,IAAI6oC,EAAK7oC;AAAAA,MACTrD,OAAOi4C,GAAgB/L,GAAM5tB,GAAU4b,CAAQ;AAAA,MAC/CzhC,MAAM6/C,EAAS7/C;AAAAA,MACf4E,WAAWi7C,EAAS5/C;AAAAA,MACpByP,YAAY40B,IACV,gBAAAljC,EAACyqB,MAAM,MAAK,MAAK,SAAQ,UAAS,cAAcszB,GAAa7a,CAAM,KAAK,QAAQ,YAAY,GACzFua,aAAava,CAAM,KAAKA,GAC3B,IACEjkC;AAAAA,MACJ8R,YAAYA,MAAMutC,EAAaje,CAAQ;AAAA,IAAA;AAAA,EAE3C,CAAC;AACH,GAEase,KAAgBngD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC3B;AAAA,IAAAoF,OAAAA;AAAAA,IAAAyuC,OAAAA;AAAAA,IAAAwB,cAAAA;AAAAA,IAAAtvB,UAAAA;AAAAA,IAAAqvB,aAAAA;AAAAA,IAAAE,mBAAAA;AAAAA,IAAAsK,cAAAA;AAAAA,IAAAM,qBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAN,iBAAAA;AAAAA,IAAAC,cAAAA;AAAAA,EAAAA,IAYIhgD,GACJuoC,IAAkBx+B,GAAuB,IAAI;AAAE,MAAAzJ;AAAA,MAAAL,EAAA,CAAA,MAAA+/C,KAAA//C,EAAA,CAAA,MAAA6/C,KAAA7/C,EAAA,CAAA,MAAA8zC,KAAA9zC,EAAA,CAAA,MAAA8/C,KAAA9/C,SAAAgmB,GAAA;AAC/C,UAAAq6B,IAAiBrM,GAAsBF,GAAO9tB,CAAQ;AACpC3lB,IAAAA,IAAAu/C,GAAgB;AAAA,MAAAlM,OAAS2M;AAAAA,MAAQr6B,UAAAA;AAAAA,MAAA65B,cAAAA;AAAAA,MAAAC,iBAAAA;AAAAA,MAAAC,cAAAA;AAAAA,IAAAA,CAAyD,GAAC//C,OAAA+/C,GAAA//C,OAAA6/C,GAAA7/C,OAAA8zC,GAAA9zC,OAAA8/C,GAAA9/C,OAAAgmB,GAAAhmB,OAAAK;AAAAA,EAAA;AAAAA,IAAAA,IAAAL,EAAA,CAAA;AAA7G,QAAA+0C,IAAkB10C,GAClBoyB,IAAmB4iB,EAAW3xC,KAAAA,IAAX,sBAAA;AAA8D,MAAAnD;AAAA,EAAAP,SAAAqF,KAMzE9E,IAAA,gBAAAgB,EAACI,KAAe,WAAA,kBAAuB,OAAA,wBAAuB,2BAE9D,GAAO3B,OAAAqF,GAAArF,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,EAAA,CAAA,MAAA8zC,EAAAnwC,UACPlD,IAAA,gBAAAc,EAACyqB,MAAW,MAAA,MAAa,SAAA,UAAqB,YAAA,GAC3C8nB,UAAAA,EAAKnwC,OAAAA,CACR,GAAQ3D,EAAA,CAAA,IAAA8zC,EAAAnwC,QAAA3D,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,EAAA,EAAA,MAAAO,KAAAP,UAAAS,KAPZG,sBAAC8E,IAAA,EAAe,SAAA,QAAsB,gBAAA,iBAAkC,mBAAA,OAAkB,aAAA,gBAAkB,IAAA,MAC1G,UAAA,gBAAA9D,EAACE,MAAW,KAAA,OAAW,MAAA,KACrBvB,UAAAA;AAAAA,IAAAA;AAAAA,IAGAE;AAAAA,EAAAA,EAAAA,CAGF,EAAA,CACF,GAAST,QAAAO,GAAAP,QAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AAAA,MAAAe;AAAA,EAAAf,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEmBP,sBAAC4L,IAAA,EAAa,MAAA,GAAA,CAAE,GAAI3M,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAiB,GAAAC,GAAAC;AAAA,EAAAnB,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAOlCL,IAAA;AAAA,IAAAiD,aAAe;AAAA,EAAA,GACfhD,IAAA;AAAA,IAAAgD,aAAe;AAAA,IAAaC,WAAa;AAAA,EAAA,GAClChD,IAAA;AAAA,IAAA+C,aAAe;AAAA,IAAaC,WAAa;AAAA,IAAME,SAAW;AAAA,EAAA,GAAQrE,QAAAiB,GAAAjB,QAAAkB,GAAAlB,QAAAmB,MAAAF,IAAAjB,EAAA,EAAA,GAAAkB,IAAAlB,EAAA,EAAA,GAAAmB,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,EAAAlF,UAAAmgD,KACvEj7C,IAAAnB,CAAAA,MAAWo8C,EAAoBp8C,EAAK+I,OAAOpK,KAAM,GAAC1C,QAAAmgD,GAAAngD,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,EAAA3K,EAAA,EAAA,MAAAq1C,KAAAr1C,UAAAkF,KAXlEyF,sBAACzI,GAAA,EAAU,KAAA,MAAuB,mBAAA,OAAS,IAAA,MACzC,UAAA,gBAAAX,EAACmL,IAAA,EAAyB,cAAA3L,GACxB,UAAA,gBAAAQ,EAACqL,MACM,MAAA,MACE,QAAA,KACM,cAAA,KACD,aAAA,gBACLyoC,UACC,QAAAp0C,GACA,QAAAC,GACO,eAAAC,GACL,UAAA+D,EAAAA,CAAkD,GAEhE,GACF,GAAQlF,QAAAq1C,GAAAr1C,QAAAkF,GAAAlF,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,EAAApL,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAOS8J,IAAA;AAAA,IAAA2N,OAAS;AAAA,MAAAunC,WAAa;AAAA,IAAA;AAAA,EAAS,GAAGtgD,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,EAAA,EAAA,MAAAyyB,KAAAzyB,UAAAu1C,KAAAv1C,EAAA,EAAA,MAAAogD,KAAApgD,EAAA,EAAA,MAAA8zC,EAAAnwC,UAAA3D,UAAAs1C,KAAAt1C,EAAA,EAAA,MAAA+0C,KANnDlpC,sBAACkC,MACM,MAAA,KACA,MAAA,KACA,MAAA,KACF,IAAA,MACUu6B,aAAAA,GACE,eAAAl9B,GAEd0oC,UAAAA,EAAKnwC,SAAU,IACd,gBAAApC,EAACu9C,IAAA,EACW,UAAA,CAAC;AAAA,IAAA/zC,IAAM;AAAA,IAAO2oC,OAASqB;AAAAA,EAAAA,CAAW,GAC3B,iBAAA,CAAA,GAAIQ,CAAiB,GACxB,cAAAD,IAAA,QAAuBA,CAAY,KAAnC,MACH,YAAA,QACG8K,cAAAA,GACd,YAAA,IACW9X,WAAAA,EAAAA,CAAS,sBAGrB5nC,GAAA,EAAO,IAAA,MAAQ,IAAA,MACd,UAAA,gBAAAa,EAAC4wB,IAAA,EAAkBM,OAAAA,GAAiB,MAAA,MAAe,WAAA,QAAkB,YAAA,aAAA,IACvE,GAEJ,GAAazyB,QAAAyyB,GAAAzyB,QAAAu1C,GAAAv1C,QAAAogD,GAAApgD,EAAA,EAAA,IAAA8zC,EAAAnwC,QAAA3D,QAAAs1C,GAAAt1C,QAAA+0C,GAAA/0C,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,SAAAhN,EAAA,EAAA,MAAA6L,KAAA7L,UAAAY,KAAAZ,EAAA,EAAA,MAAA2K,KAjDfqC,sBAAC9K,GAAA,EAAQ,GAAA,QAAY,MAAA,KAAS,MAAA,KAAM,GAAA,QAAW,KAAA,KAAa,UAAA,UAAY,IAAA,MACtEtB,UAAAA;AAAAA,IAAAA;AAAAA,IAUA+J;AAAAA,IAeAkB;AAAAA,EAAAA,GAwBF,GAAQ7L,QAAA6L,GAAA7L,QAAAY,GAAAZ,QAAA2K,GAAA3K,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA,GAlDRgN;AAkDQ,GCjJN04B,KAAcA,CAAC/D,MAAeA,EAAKc,WAAWd,EAAKa,WAAW,WAC9D+d,KAAoBA,CAAC1a,MAAkB,IAAI/Q,IAAI+Q,EAAMx3B,IAAKszB,CAAAA,MAAS,CAAC+D,GAAY/D,CAAI,GAAGA,EAAK8C,MAAM,CAAC,CAAC,GACpG+b,KAAeA,CAAC3a,MACpBA,EAAMlO,OACJ,CAAC8oB,GAAO9e,OAAU;AAAA,EAChBT,WAAWuf,EAAMvf,aAAaS,EAAKT,aAAa;AAAA,EAChDC,WAAWsf,EAAMtf,aAAaQ,EAAKR,aAAa;AAClD,IACA;AAAA,EAAED,WAAW;AAAA,EAAGC,WAAW;AAAE,CAC/B,GAEIuf,KAAqBA,CAAC35C,MAItB;AACJ,QAAM;AAAA,IAAE8+B,OAAAA;AAAAA,IAAO8a,uBAAAA;AAAAA,IAAuB36B,UAAAA;AAAAA,EAAAA,IAAajf,GAC7C65C,IAAgBD,IAClB9a,EAAMr+B,OAAQm6B,CAAAA,MAAS+D,GAAY/D,CAAI,EAAEp6B,YAAAA,EAAcO,SAAS64C,CAAqB,CAAC,IACtF9a,GACEiP,IAAeG,GAAoB2L,EAAcvyC,IAAIq3B,EAAW,GAAG1f,CAAQ,GAC3E66B,IAAc,IAAI/rB,IAAIggB,EAAazmC,IAAI,CAACyyB,GAAM/pB,MAAU,CAAC+pB,GAAM/pB,CAAK,CAAC,CAAC;AAE5E,SAAO,CAAC,GAAG6pC,CAAa,EAAE12B,KAAK,CAACwJ,GAAMC,MAAU;AAC9C,UAAMmtB,IAAYD,EAAY7rB,IAAI0Q,GAAYhS,CAAI,CAAC,KAAK9L,OAAOm5B,kBACzDC,IAAaH,EAAY7rB,IAAI0Q,GAAY/R,CAAK,CAAC,KAAK/L,OAAOm5B;AACjE,WAAOD,IAAYE;AAAAA,EACrB,CAAC;AACH,GAEMC,KAAsBA,CAACC,GAA0BC,MACrDD,EAAe,CAAC,KAAKC,EAAc,CAAC,KAAK,MAErCC,KAAkBrhD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACtB;AAAA,IAAAy4B,SAAAA;AAAAA,IAAAv4B,MAAAA;AAAAA,IAAAuH,OAAAA;AAAAA,EAAAA,IAAiC3H;AAAM,MAAAM;AAAA,EAAAL,SAAAG,KAInCE,IAAA,gBAAAkB,EAACb,GAAA,EAAgB,YAAA,GAAIP,UAAAA,GAAK,GAAMH,OAAAG,GAAAH,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,SAAA0H,KAChCnH,IAAA,gBAAAgB,EAACI,GAAA,EAAU,MAAA,KAAK+F,UAAAA,GAAM,GAAO1H,OAAA0H,GAAA1H,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAA04B,KAC5Bj4B,IAAAi4B,MAAYl4B,SACX,gBAAAe,EAACb,GAAA,EAAM,GAAA,QAAmB,eACvBg4B,UAAAA,sBAAWC,IAAA,EAAY,MAAA,IAAE,IAAzB,MACH,IAHD,MAIO34B,OAAA04B,GAAA14B,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,SAAAZ,EAAA,CAAA,MAAAK,KAAAL,SAAAO,KAAAP,EAAA,CAAA,MAAAS,KAPVG,IAAA,gBAAAgB,EAACE,IAAA,EAAW,KAAA,OAAQ,GAAA,QAClBzB,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA,IACCE;AAAAA,EAAAA,GAKH,GAAST,OAAAK,GAAAL,OAAAO,GAAAP,OAAAS,GAAAT,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GARTY;AAQS,GAIPygD,KAAmB,CAAC,SAAS,UAAU,OAAO,GAE9CC,KAAoBA,MAAA;AAAA,QAAAthD,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACxBjB,IAAA,gBAAAkB,EAACW,KAAW,MAAA,KAAS,MAAA,KAAO,IAAA,MAAO,GAAA,MAAS,KAAA,MAAU,MAAA,UAAmB,aAAA,QAAkB,cAAA,sBACxFm/C,UAAAA,GAAgBhzC,IAAKlD,EAErB,EAAA,CACH,GAAQnL,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAJRK;AAIQ,GAGGkhD,KAAaxhD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,GAAA,GACxB;AAAA,IAAA4lC,OAAAA;AAAAA,IAAA2b,kBAAAA;AAAAA,IAAAC,qBAAAphD;AAAAA,IAAAqhD,SAAAnhD;AAAAA,IAAAkjC,YAAAA;AAAAA,IAAAqc,iBAAAA;AAAAA,EAAAA,IAA8G//C,GAA7E0hD,IAAAphD,MAAAG,SAAA,OAAAH,GAA4BqhD,IAAAnhD,MAAAC,SAAA,KAAAD,GAC7D,CAAAohD,GAAAC,CAAA,IAAwDt+C,GAAsC,IAAI;AAAE,MAAA7C;AAAA,EAAAT,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACbb,IAAA;AAAA,IAAAurC,aACxE;AAAA,IAAKE,cACJ;AAAA,EAAA,GACflsC,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAHD,QAAA,CAAA6hD,GAAAC,CAAA,IAAoDx+C,GAAmC7C,CAGtF,GACD;AAAA,IAAA20C,iBAAAA;AAAAA,IAAApvB,UAAAA;AAAAA,IAAAkc,cAAAA;AAAAA,IAAAmT,aAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,mBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAA1b,aAAAA;AAAAA,IAAA4b,iBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,sBAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAE,WAAAA;AAAAA,IAAAC,aAAAA;AAAAA,EAAAA,IAgBIf,GAAAA;AAAqB,MAAA6M,GAAAhC,GAAAiC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAA3N,GAAA4N,GAAAC,GAAAC,GAAAC,GAAA9hD,IAAA+hD;AAAA,MAAA3iD,EAAA,CAAA,MAAAwhD,KAAAxhD,EAAA,CAAA,MAAAyhD,KAAAzhD,EAAA,CAAA,MAAA6lC,KAAA7lC,EAAA,CAAA,MAAAu1C,KAAAv1C,EAAA,CAAA,MAAA0hD,KAAA1hD,EAAA,CAAA,MAAAq1C,KAAAr1C,EAAA,CAAA,MAAAs1C,KAAAt1C,SAAAgmB,GAAA;AAEzB,UAAA48B,KAAkB/c,EAAKx3B,IAAKq3B,EAAW;AACvCuc,IAAAA,IAAkBT,KAAAoB;AAClB,UAAAjC,KAA8BtL,EAAW3xC,KAAAA,EAAO6D,YAAAA;AAChD+6C,IAAAA,IAA0B3B,KACtBsB,EAASz6C,OAAQs5B,CAAAA,OAAUA,GAAIv5B,cAAcO,SAAU64C,EAAqB,CACpE,IAFcsB,GAG1BG,IAAsB1B,GAAmB;AAAA,MAAA7a,OAAAA;AAAAA,MAAA8a,uBAAAA;AAAAA,MAAA36B,UAAAA;AAAAA,IAAAA,CAA0C;AAAE,QAAAjlB;AAAA,IAAAf,UAAA6lC,KAChE9kC,KAAAw/C,GAAkB1a,CAAK,GAAC7lC,QAAA6lC,GAAA7lC,QAAAe,MAAAA,KAAAf,EAAA,EAAA,GAA7C+/C,IAAqBh/C,IACrBohD,IAA0BC,EAAa/zC,IAAKq3B,EAAW;AACvD,UAAA2a,KAAiBrM,GAAsBsO,GAAmBt8B,CAAQ;AAClE2uB,IAAAA,IAAkB3uB,MAAa,WAAW0uB,GAAyB2L,EAAa,IAA9D,CAAA,GAClBgC,IAA4BC,EAAiBz6C,KAAM,IAAI,GACvDq6C,IAA4BC,EAAiBt6C,KAAM,IAAI,GACvD46C,IACEnN,KAAAmM,KAAuCR,GAAoBkB,GAAmBG,CAAiB,GACjGC,IAAiBH,EAAaz+C,SAAU,GACxCq+C,IAAuBrB,KAAA,sBAAA,cACvB+B,IAA2B,CAAChB,KAAD,CAAaa,GACxCI,KAAkBnC,GAAa4B,CAAa,GAC5CI,IAA2B7N,EAAShxC,SAAU,KAAKy+C,EAAaz+C,SAAU;AAAE,QAAA1C;AAAA,IAAAjB,UAAAu1C,KACnCt0C,KAAA80C,CAAAA,OAAcR,EAAiBzxB,IAAKiyB,EAAQ,GAAC/1C,QAAAu1C,GAAAv1C,QAAAiB,MAAAA,KAAAjB,EAAA,EAAA,GAAtF+hD,IAAyBpN,EAASlf,MAAOx0B,EAA6C;AAAE,QAAAC;AAAA,IAAAlB,UAAAu1C,KAC9Cr0C,KAAA2hD,CAAAA,OAAc,CAACtN,EAAiBzxB,IAAKiyB,EAAQ,GAAC/1C,QAAAu1C,GAAAv1C,QAAAkB,MAAAA,KAAAlB,EAAA,EAAA,GAA9DY,KAAA+zC,EAASlf,MAAOv0B,EAA8C,GAAClB,OAAAwhD,GAAAxhD,OAAAyhD,GAAAzhD,OAAA6lC,GAAA7lC,OAAAu1C,GAAAv1C,OAAA0hD,GAAA1hD,OAAAq1C,GAAAr1C,OAAAs1C,GAAAt1C,OAAAgmB,GAAAhmB,OAAA+hD,GAAA/hD,QAAA+/C,GAAA//C,QAAAgiD,GAAAhiD,QAAAiiD,GAAAjiD,QAAAkiD,GAAAliD,QAAAmiD,GAAAniD,QAAAoiD,GAAApiD,QAAAqiD,GAAAriD,QAAAsiD,GAAAtiD,QAAA20C,GAAA30C,QAAAuiD,GAAAviD,QAAAwiD,GAAAxiD,QAAAyiD,GAAAziD,QAAA0iD,GAAA1iD,QAAAY,IAAAZ,QAAA2iD;AAAAA,EAAA;AAAAZ,IAAAA,IAAA/hD,EAAA,CAAA,GAAA+/C,IAAA//C,EAAA,EAAA,GAAAgiD,IAAAhiD,EAAA,EAAA,GAAAiiD,IAAAjiD,EAAA,EAAA,GAAAkiD,IAAAliD,EAAA,EAAA,GAAAmiD,IAAAniD,EAAA,EAAA,GAAAoiD,IAAApiD,EAAA,EAAA,GAAAqiD,IAAAriD,EAAA,EAAA,GAAAsiD,IAAAtiD,EAAA,EAAA,GAAA20C,IAAA30C,EAAA,EAAA,GAAAuiD,IAAAviD,EAAA,EAAA,GAAAwiD,IAAAxiD,EAAA,EAAA,GAAAyiD,IAAAziD,EAAA,EAAA,GAAA0iD,IAAA1iD,EAAA,EAAA,GAAAY,KAAAZ,EAAA,EAAA,GAAA2iD,KAAA3iD,EAAA,EAAA;AAAzF,QAAA8iD,KAA0BliD,IAC1BmiD,KAAyBX,EAAaz+C,WAAY,KAAKk+C,EAAkB7V,aACzEgX,KAA0BZ,EAAaz+C,WAAY,KAAKk+C,EAAkB3V,cAC1E+W,KAA4B,CAACT,KAAuBT,KAAAgB,IACpDG,KAA8B,CAACV,KAAuBM,MAAAE;AAAwC,MAAAjiD,IAAAE;AAAA,EAAAjB,EAAA,EAAA,MAAAqiD,KAAAriD,UAAA61C,KAAA71C,EAAA,EAAA,MAAAgmB,KAEpFjlB,KAAAA,MAAA;AACR,UAAAoiD,KAAkBd,IAAsBA,EAAmBjpC,MAAO,IAAS,IAAzD,CAAA,GAClBgqC,KAAapP,GAAsBiO,IAAWj8B,CAAQ;AACtD6vB,IAAAA,EAAqB7vB,MAAa,WAAW0uB,GAAyB0O,EAAS,IAA1D,CAAA,CAA2D;AAAA,EAAC,GAChFniD,MAACohD,GAAqBxM,GAAsB7vB,CAAQ,GAAChmB,QAAAqiD,GAAAriD,QAAA61C,GAAA71C,QAAAgmB,GAAAhmB,QAAAe,IAAAf,QAAAiB,OAAAF,KAAAf,EAAA,EAAA,GAAAiB,KAAAjB,EAAA,EAAA,IAJxDmK,GAAUpJ,IAIPE,EAAqD;AAAC,MAAAC,GAAAC;AAAA,EAAAnB,EAAA,EAAA,MAAAkiD,KAAAliD,EAAA,EAAA,MAAAqiD,KAAAriD,EAAA,EAAA,MAAAyiD,KAAAziD,UAAA41C,KAE/C10C,IAAAA,MAAA;AACR,UAAAmiD,KAAkBnB,IAAsBA,EAAmB9oC,MAAO,IAAS,IAAzD,CAAA,GAClBkqC,KAAkBjB,IAAsBA,EAAmBjpC,MAAO,IAAS,IAAzD,CAAA;AAClB,IAAIqpC,KAAwBG,GAAS96C,SAAU26C,CAAoB,KACnE7M,EAAgBqL,GAAoB2B,IAAWX,EAAS,CAAC;AAAA,EAAC,GACzD9gD,KAAA,CAAC+gD,GAAqBG,GAAqBI,GAAsB7M,CAAe,GAAC51C,QAAAkiD,GAAAliD,QAAAqiD,GAAAriD,QAAAyiD,GAAAziD,QAAA41C,GAAA51C,QAAAkB,GAAAlB,QAAAmB,OAAAD,IAAAlB,EAAA,EAAA,GAAAmB,KAAAnB,EAAA,EAAA,IALpFmK,GAAUjJ,GAKPC,EAAiF;AAAC,MAAA+D;AAAA,EAAAlF,EAAA,EAAA,MAAAg2C,KAAAh2C,UAAA20C,KAEtDzvC,KAAAA,MAAA;AAC7B8wC,IAAAA,EAAUrB,CAAS,GACnBiN,EAAwB71C,EAA+D;AAAA,EAAC,GACzF/L,QAAAg2C,GAAAh2C,QAAA20C,GAAA30C,QAAAkF,MAAAA,KAAAlF,EAAA,EAAA;AAHD,QAAAujD,KAA+Br+C;AAG7B,MAAAyF;AAAA,EAAA3K,UAAAi2C,KAE+BtrC,KAAAA,MAAA;AAC/BsrC,IAAAA,EAAAA,GACA2L,EAAwB11C,EAAiE;AAAA,EAAC,GAC3FlM,QAAAi2C,GAAAj2C,QAAA2K,MAAAA,KAAA3K,EAAA,EAAA;AAHD,QAAAwjD,KAAiC74C;AAG/B,MAAAS;AAAA,EAAApL,EAAA,EAAA,MAAAmiD,KAAAniD,UAAAyiD,KAAAziD,EAAA,EAAA,MAAA41C,KAE4BxqC,KAAAq4C,CAAAA,OAAA;AAC5B,UAAA9L,KAAqB8K,IAAuBN,EAAiBpI,QAAS0I,CAAyB,IAA1E,IACrBiB,KAAkBvB,EAAiBpI,QAASjZ,EAAI,GAChDza,KAAkBsxB,MAAgB,KAAK+L,MAAa,KAAKA,KAAY/L,KAAnD,OAAA;AAElB/B,IAAAA,EAAgB9U,EAAI,GACpB8gB,EAAwB+B,CAAAA,QAAc;AAAA,MAAAz0C,QAAU;AAAA,MAAiBmX,WAAAA;AAAAA,MAAAtb,KAAkBX,IAAOW,MAAP,KAAoB;AAAA,MAAC+1B,MAAEA;AAAAA,IAAAA,EAAO;AAAA,EAAC,GACnH9gC,QAAAmiD,GAAAniD,QAAAyiD,GAAAziD,QAAA41C,GAAA51C,QAAAoL,MAAAA,KAAApL,EAAA,EAAA;AAPD,QAAA4jD,KAA8Bx4C;AAO5B,MAAAS;AAAA,EAAA7L,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAOQuK,uBAAAoB,EAAA,SAAA,EAAc,SAAA,IACZ,4BAACxI,IAAA,EAAsB,cAAA,qBAA4B,SAAA,SAAa,MAAA,MAC9D,UAAA,gBAAAlD,EAAC81B,MAAgB,MAAA,IAAE,GACrB,EAAA,CACF,GAAer3B,QAAA6L,MAAAA,KAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,EAAAhN,EAAA,EAAA,MAAAo1C,KAAAp1C,UAAAw1C,KAGkCxoC,KAAAA,MAAMwoC,EAAiB,CAACJ,CAAe,GAACp1C,QAAAo1C,GAAAp1C,QAAAw1C,GAAAx1C,QAAAgN,MAAAA,KAAAhN,EAAA,EAAA;AAAA,MAAAkN;AAAA,EAAAlN,UAAAo1C,KAE3EloC,KAAAkoC,sBAAmByO,IAAA,EAAqB,MAAA,IAAE,IAAO,gBAAAtiD,EAACuiD,IAAA,EAAoB,MAAA,GAAA,CAAE,GAAI9jD,QAAAo1C,GAAAp1C,QAAAkN,MAAAA,KAAAlN,EAAA,EAAA;AAC3E,QAAAmN,KAAAioC,IAAA,mBAAA;AAAqD,MAAA9nC;AAAA,EAAAtN,EAAA,EAAA,MAAAkN,MAAAlN,UAAAmN,MAF9DG,KAAA,gBAAA/L,EAAC6/C,IAAA,EACO,MAAAl0C,IACC,OAAAC,IAAqD,GAC5DnN,QAAAkN,IAAAlN,QAAAmN,IAAAnN,QAAAsN,MAAAA,KAAAtN,EAAA,EAAA;AAAA,MAAAuN;AAAA,EAAAvN,EAAA,EAAA,MAAAgN,MAAAhN,UAAAsN,MAJJC,IAAA,gBAAAhM,EAAA0L,EAAA,MAAA,EAAiB,OAAA,oBAA4B,SAAAD,IAC3CM,UAAAA,GAAAA,CAIF,GAAYtN,QAAAgN,IAAAhN,QAAAsN,IAAAtN,QAAAuN,KAAAA,IAAAvN,EAAA,EAAA;AAAA,MAAAwN;AAAA,EAAAxN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACZkM,KAAA,gBAAAjM,EAAA0L,EAAA,WAAA,CAAA,CAAA,GAAkBjN,QAAAwN,MAAAA,KAAAxN,EAAA,EAAA;AAAA,MAAAyN;AAAA,EAAAzN,EAAA,EAAA,MAAAiiD,EAAAt+C,UAAA3D,EAAA,EAAA,MAAA85B,KAAA95B,EAAA,EAAA,MAAAgmB,KACjBvY,KAAAw0C,EAASt+C,SAAU,IAAnB,gBAAA/B,EAAAC,IAAA,EAEG,UAAA;AAAA,IAAA,gBAAAN,EAAA0L,EAAA,MAAA,EAAiB,OAAA,UAAkB,SAAA,MAAM6sB,EAAY,QAAQ,GAC3D,UAAA,gBAAAv4B,EAAC6/C,MAAyB,SAAAp7B,MAAa,UAAgB,wBAAC+9B,IAAA,EAAe,MAAA,GAAA,CAAE,GAAY,OAAA,SAAA,CAAQ,EAAA,CAC/F;AAAA,IACA,gBAAAxiD,YAAiB,OAAA,QAAgB,SAAA,MAAMu4B,EAAY,MAAM,GACvD,UAAA,gBAAAv4B,EAAC6/C,MAAyB,SAAAp7B,MAAa,QAAc,MAAA,gBAAAzkB,EAACu0B,IAAA,EAAW,MAAA,GAAA,IAAc,OAAA,OAAA,IACjF;AAAA,IACA,gBAAAv0B,EAAA0L,EAAA,WAAA,CAAA,CAAA;AAAA,EAAA,EAAA,CAAkB,IARrB,MAUOjN,EAAA,EAAA,IAAAiiD,EAAAt+C,QAAA3D,QAAA85B,GAAA95B,QAAAgmB,GAAAhmB,QAAAyN,MAAAA,KAAAzN,EAAA,EAAA;AAAA,MAAA0N;AAAA,EAAA1N,UAAA01C,KAC4BhoC,KAAAA,MAAMgoC,EAAgB,SAAS,GAAC11C,QAAA01C,GAAA11C,QAAA0N,MAAAA,KAAA1N,EAAA,EAAA;AACxC,QAAA2N,KAAAu0B,MAAiB;AAAS,MAAAt0B;AAAA,EAAA5N,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAAQsM,uBAACo2C,IAAA,EAAY,MAAA,GAAA,CAAE,GAAIhkD,QAAA4N,MAAAA,KAAA5N,EAAA,EAAA;AAAA,MAAA6N;AAAA,EAAA7N,UAAA2N,MAA/EE,sBAACuzC,IAAA,EAAyB,SAAAzzC,IAAkC,MAAAC,IAA2B,OAAA,WAAS,GAAG5N,QAAA2N,IAAA3N,QAAA6N,KAAAA,IAAA7N,EAAA,EAAA;AAAA,MAAAgO;AAAA,EAAAhO,EAAA,EAAA,MAAA0N,MAAA1N,UAAA6N,KADrGG,KAAA,gBAAAzM,EAAA0L,EAAA,MAAA,EAAiB,OAAA,WAAmB,SAAAS,IAClCG,UAAAA,EAAAA,CACF,GAAY7N,QAAA0N,IAAA1N,QAAA6N,GAAA7N,QAAAgO,MAAAA,KAAAhO,EAAA,EAAA;AAAA,MAAAkO;AAAA,EAAAlO,UAAA01C,KACsBxnC,KAAAA,MAAMwnC,EAAgB,OAAO,GAAC11C,QAAA01C,GAAA11C,QAAAkO,MAAAA,KAAAlO,EAAA,EAAA;AAEnD,QAAAmO,KAAA+zB,MAAiB;AAAO,MAAA9zB;AAAA,EAAApO,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAC3B8M,uBAAC61C,IAAA,EAA4B,MAAA,GAAA,CAAE,GAAIjkD,QAAAoO,MAAAA,KAAApO,EAAA,EAAA;AAAA,MAAAyO;AAAA,EAAAzO,UAAAmO,MAF3CM,uBAAC2yC,IAAA,EACU,SAAAjzC,IACH,MAAAC,IACA,OAAA,SAAO,GACbpO,QAAAmO,IAAAnO,QAAAyO,MAAAA,KAAAzO,EAAA,EAAA;AAAA,MAAA0O;AAAA,EAAA1O,EAAA,EAAA,MAAAkO,MAAAlO,UAAAyO,MALJC,KAAA,gBAAAnN,EAAA0L,EAAA,MAAA,EAAiB,OAAA,SAAiB,SAAAiB,IAChCO,UAAAA,GAAAA,CAKF,GAAYzO,QAAAkO,IAAAlO,QAAAyO,IAAAzO,QAAA0O,MAAAA,KAAA1O,EAAA,EAAA;AAAA,MAAA4O;AAAA,EAAA5O,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACZsN,KAAA,gBAAArN,EAAA0L,EAAA,WAAA,CAAA,CAAA,GAAkBjN,QAAA4O,MAAAA,KAAA5O,EAAA,EAAA;AAAA,MAAA8O;AAAA,EAAA9O,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEhBwN,uBAACsyC,MAAsB,MAAA,gBAAA7/C,EAAC2iD,MAAqB,MAAA,GAAA,CAAE,GAAY,OAAA,aAAA,CAAY,GAAGlkD,QAAA8O,MAAAA,KAAA9O,EAAA,EAAA;AAAA,MAAA+O;AAAA,EAAA/O,EAAA,EAAA,MAAAujD,MAAAvjD,UAAAijD,MAD5El0C,iCAAiB,OAAA,cAAuBk0C,UAAAA,IAA8BM,SAAAA,IACpEz0C,UAAAA,GAAAA,CACF,GAAY9O,QAAAujD,IAAAvjD,QAAAijD,IAAAjjD,QAAA+O,MAAAA,KAAA/O,EAAA,EAAA;AAAA,MAAAmkD;AAAA,EAAAnkD,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEV6iD,uBAAC/C,MAAsB,MAAA,gBAAA7/C,EAAC6iD,MAAqB,MAAA,GAAA,CAAE,GAAY,OAAA,eAAA,CAAc,GAAGpkD,QAAAmkD,MAAAA,KAAAnkD,EAAA,EAAA;AAAA,MAAAqkD;AAAA,EAAArkD,EAAA,EAAA,MAAAwjD,MAAAxjD,UAAAkjD,MAD9EmB,iCAAiB,OAAA,gBAAyBnB,UAAAA,IAAgCM,SAAAA,IACxEW,UAAAA,GAAAA,CACF,GAAYnkD,QAAAwjD,IAAAxjD,QAAAkjD,IAAAljD,QAAAqkD,MAAAA,KAAArkD,EAAA,EAAA;AAAA,MAAAskD;AAAA,EAAAtkD,UAAAuN,KAAAvN,EAAA,EAAA,MAAAyN,MAAAzN,EAAA,EAAA,MAAAgO,MAAAhO,EAAA,EAAA,MAAA0O,MAAA1O,UAAA+O,MAAA/O,EAAA,EAAA,MAAAqkD,MA1ClBC,iCACEz4C,UAAAA;AAAAA,IAAAA;AAAAA,IAKA,gBAAAtK,EAAA0L,EAAA,YAAA,EACE,UAAA,gBAAArL,EAAAqL,EAAA,SAAA,EAAmB,MAAA,SAAW,IAAA,MAC5BM,UAAAA;AAAAA,MAAAA;AAAAA,MAMAC;AAAAA,MACCC;AAAAA,MAWDO;AAAAA,MAGAU;AAAAA,MAOAE;AAAAA,MACAG;AAAAA,MAGAs1C;AAAAA,IAAAA,EAAAA,CAGF,EAAA,CACF;AAAA,EAAA,GACF,GAAYrkD,QAAAuN,GAAAvN,QAAAyN,IAAAzN,QAAAgO,IAAAhO,QAAA0O,IAAA1O,QAAA+O,IAAA/O,QAAAqkD,IAAArkD,QAAAskD,MAAAA,KAAAtkD,EAAA,EAAA;AAAA,MAAAukD;AAAA,EAAAvkD,EAAA,GAAA,MAAAgiD,KAAAhiD,WAAA0iD,KACX6B,KAAA7B,IACC,gBAAAnhD,EAACI,GAAA,EAAe,WAAA,mBAAwB,OAAA,YAAW,UAAA,IAChDqgD,UAAAA,EAAAA,CACH,IAHD,MAIOhiD,SAAAgiD,GAAAhiD,SAAA0iD,GAAA1iD,SAAAukD,MAAAA,KAAAvkD,EAAA,GAAA;AAAA,MAAAwkD;AAAA,EAAAxkD,EAAA,GAAA,MAAAskD,MAAAtkD,WAAAukD,MAnDVC,uBAAC1iD,IAAA,EAAW,KAAA,MAAU,MAAA,KACpBwiD,UAAAA;AAAAA,IAAAA;AAAAA,IA8CCC;AAAAA,EAAAA,GAKH,GAASvkD,SAAAskD,IAAAtkD,SAAAukD,IAAAvkD,SAAAwkD,MAAAA,KAAAxkD,EAAA,GAAA;AAAA,MAAAykD;AAAA,EAAAzkD,EAAA,GAAA,MAAA2iD,GAAAzhB,aAAAlhC,EAAA,GAAA,MAAA2iD,GAAAxhB,aACTsjB,KAAA,gBAAAljD,EAAC0jB,MAAmB,SAAA,SAAmB,WAAA09B,GAASzhB,WAAuB,WAAAyhB,GAASxhB,UAAAA,CAAU,GAAInhC,EAAA,GAAA,IAAA2iD,GAAAzhB,WAAAlhC,EAAA,GAAA,IAAA2iD,GAAAxhB,WAAAnhC,SAAAykD,MAAAA,KAAAzkD,EAAA,GAAA;AAAA,MAAA0kD;AAAA,EAAA1kD,EAAA,GAAA,MAAAwkD,MAAAxkD,WAAAykD,MAtDhGC,KAAA,gBAAA9iD,EAAC8D,IAAA,EAAe,SAAA,QAAyB,mBAAA,OAAkB,aAAA,gBAAkB,IAAA,MAAoB,gBAAA,iBAC/F8+C,UAAAA;AAAAA,IAAAA;AAAAA,IAqDAC;AAAAA,EAAAA,GACF,GAASzkD,SAAAwkD,IAAAxkD,SAAAykD,IAAAzkD,SAAA0kD,MAAAA,KAAA1kD,EAAA,GAAA;AAAA,MAAA2kD;AAAA,EAAA3kD,EAAA,GAAA,MAAA2hD,KAAA3hD,EAAA,GAAA,MAAAkiC,KAAAliC,WAAAgiD,KAAAhiD,EAAA,GAAA,MAAAoiD,KAAApiD,EAAA,GAAA,MAAAuiD,KAAAviD,EAAA,GAAA,MAAA0hD,KAAA1hD,EAAA,GAAA,MAAAyjC,KAAAzjC,EAAA,GAAA,MAAAyiD,KAAAziD,WAAA41C,KACR+O,KAAAjD,sBACEJ,IAAA,CAAA,CAAiB,IAChBiB,IACF,gBAAAhhD,EAACb,GAAA,EAAS,MAAA,KAAS,MAAA,KACjB,4BAACiqC,IAAA,EACQyX,UACWK,kBAAAA,GACNhf,YAAAA,GACMmS,kBAAAA,GACMkM,wBAAAA,GACNH,kBAAAA,GACJzf,cAAAA,GAAY,EAAA,CAE9B,sBAECxhC,GAAA,EAAS,MAAA,KAAS,MAAA,KAAO,IAAA,MAAQ,IAAA,MAAa,SAAA,QAAkB,YAAA,UAAwB,gBAAA,UAAY,IAAA,MACnG,UAAA,gBAAAa,EAAC4wB,IAAA,EAAkB6vB,UAAc,EAAA,CACnC,GACDhiD,SAAA2hD,GAAA3hD,SAAAkiC,GAAAliC,SAAAgiD,GAAAhiD,SAAAoiD,GAAApiD,SAAAuiD,GAAAviD,SAAA0hD,GAAA1hD,SAAAyjC,GAAAzjC,SAAAyiD,GAAAziD,SAAA41C,GAAA51C,SAAA2kD,MAAAA,KAAA3kD,EAAA,GAAA;AAAA,MAAA4kD;AAAA,EAAA5kD,EAAA,GAAA,MAAA0kD,MAAA1kD,WAAA2kD,MA3EHC,KAAA,gBAAAhjD,EAACM,GAAA,EAAQ,GAAA,QAAY,MAAA,KAAS,MAAA,KAAS,MAAA,KAAO,IAAA,MAAS,KAAA,KACrDwiD,UAAAA;AAAAA,IAAAA;AAAAA,IAwDCC;AAAAA,EAAAA,GAmBH,GAAQ3kD,SAAA0kD,IAAA1kD,SAAA2kD,IAAA3kD,SAAA4kD,MAAAA,KAAA5kD,EAAA,GAAA;AA7EV,QAAA6kD,KACED;AA6EA,MAAAE;AAAA,EAAA9kD,EAAA,GAAA,MAAA+/C,KAAA//C,WAAAu1C,KAAAv1C,EAAA,GAAA,MAAAsiD,KAAAtiD,WAAA8/C,KAAA9/C,EAAA,GAAA,MAAAyiD,KAAAziD,WAAAq1C,KAAAr1C,EAAA,GAAA,MAAA4jD,MAAA5jD,EAAA,GAAA,MAAA21C,KAAA31C,EAAA,GAAA,MAAA81C,KAAA91C,WAAAgmB,KASM8+B,uBAAC5E,IAAA,EACO,OAAA,iBACCoC,OAAAA,GACOG,cAAAA,GACJz8B,UAAAA,GACGqvB,aAAAA,GACME,mBAAAA,GACLqO,cAAAA,IACOjO,qBAAAA,GACLG,gBAAAA,GACCgK,iBAAAA,GACHC,cAAAA,GAAY,GAC1B//C,SAAA+/C,GAAA//C,SAAAu1C,GAAAv1C,SAAAsiD,GAAAtiD,SAAA8/C,GAAA9/C,SAAAyiD,GAAAziD,SAAAq1C,GAAAr1C,SAAA4jD,IAAA5jD,SAAA21C,GAAA31C,SAAA81C,GAAA91C,SAAAgmB,GAAAhmB,SAAA8kD,MAAAA,KAAA9kD,EAAA,GAAA;AAGO,QAAA+kD,MAAC3P;AAAe,MAAA4P;AAAA,EAAAhlD,WAAAw1C,KAKRwP,KAAAlV,CAAAA,OAAe0F,EAAiB,CAAC1F,EAAS,GAAC9vC,SAAAw1C,GAAAx1C,SAAAglD,MAAAA,KAAAhlD,EAAA,GAAA;AAAA,MAAAilD;AAAA,SAAAjlD,EAAA,GAAA,MAAA6kD,MAAA7kD,EAAA,GAAA,MAAA8kD,MAAA9kD,EAAA,GAAA,MAAA+kD,MAAA/kD,WAAAglD,MA1BlEC,uBAACx+C,IAAA,EAAU,MAAA,KAAS,MAAA,KAAS,MAAA,KAAO,IAAA,MAAS,KAAA,KAAgB,eAAA,eAC3D,UAAA,gBAAAlF,EAAC+tC,IAAA,EACM,MAAA,KACA,MAAA,KACA,MAAA,KAEH,gBAAAwV,IAcYD,cAAAA,IACH,WAAAE,IACI,eAAA,KACJ,WAAA,KACO,kBAAA,KACN,aAAA,0BACO,mBAAAC,IAA2C,GAElE,GAAOhlD,SAAA6kD,IAAA7kD,SAAA8kD,IAAA9kD,SAAA+kD,IAAA/kD,SAAAglD,IAAAhlD,SAAAilD,MAAAA,KAAAjlD,EAAA,GAAA,GA5BPilD;AA4BO;AAzMe,SAAA95C,GAAA1D,GAAA;AAAA,SAGpB,gBAAAlG,EAAC6hC,IAAA,EAAsB,GAAA,QAAS,GAAA,QAAkB,YAAA,KAAiB,cAAA,KAAA,GAApD37B,CAAwD;AAAG;AAKtD,SAAAsE,GAAA3B,GAAA;AAAA,SAmEgB;AAAA,IAAA8E,QAAU;AAAA,IAAQnE,KAAOX,GAAOW,MAAP,KAAoB;AAAA,EAAA;AAAG;AAnEhE,SAAAmB,GAAAg5C,GAAA;AAAA,SAwEgB;AAAA,IAAAh2C,QAAU;AAAA,IAAUnE,KAAOX,GAAOW,MAAP,KAAoB;AAAA,EAAA;AAAG;ACpJrF,MAAMo6C,WAAsBC,GAAkD;AAAA,EACnFrrB,QAA4B;AAAA,IAAEsrB,OAAO;AAAA,EAAA;AAAA,EAErC,OAAOC,yBAAyBD,GAAc;AAC5C,WAAO;AAAA,MAAEA,OAAAA;AAAAA,IAAAA;AAAAA,EACX;AAAA,EAEAE,kBAAkBF,GAAcG,GAAiB;AAC/CC,YAAQJ,MAAM,4CAA4CA,GAAOG,CAAI;AAAA,EACvE;AAAA,EAEAE,cAAcA,MAAM;AAClB,SAAKC,SAAS;AAAA,MAAEN,OAAO;AAAA,IAAA,CAAM,GAC7B,KAAKtlD,MAAM6lD,UAAAA;AAAAA,EACb;AAAA,EAEA78B,SAAS;AACP,UAAM;AAAA,MAAE/mB,UAAAA;AAAAA,MAAU6jD,UAAAA;AAAAA,MAAUn+C,OAAAA;AAAAA,IAAAA,IAAU,KAAK3H,OACrC;AAAA,MAAEslD,OAAAA;AAAAA,IAAAA,IAAU,KAAKtrB;AAEvB,WAAIsrB,IACEQ,uBAIIC,IAAA,EAAc,OAAAT,GAAc,OAAA39C,GAAc,SAAS,KAAKg+C,aAAY,IAGvE1jD;AAAAA,EACT;AACF;AAQO,MAAM8jD,KAAgB/lD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC3B;AAAA,IAAAolD,OAAAA;AAAAA,IAAA39C,OAAAA;AAAAA,IAAAk+C,SAAAA;AAAAA,EAAAA,IAAkC7lD,GAOmBM,IAAAqH,KAAA;AAA+B,MAAAnH;AAAA,EAAAP,SAAAK,KAArEE,IAAA,gBAAAgB,EAACI,GAAA,EAAe,WAAA,sBAAsBtB,UAAAA,GAAgC,GAAOL,OAAAK,GAAAL,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAI/E,QAAAS,IAAA4kD,EAAKU,WAAL;AAA6E,MAAAnlD;AAAA,EAAAZ,SAAAS,KADhFG,IAAA,gBAAAW,EAACI,GAAA,EAAe,WAAA,uBACblB,UAAAA,GACH,GAAOT,OAAAS,GAAAT,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,SAAA4lD,KACN7kD,IAAA6kD,IACC,gBAAArkD,EAAC20B,IAAA,EAAY,MAAA,MAAa,SAAA,SAAqB,aAAA,SAAkB0vB,SAAAA,GAAS,UAAA,YAAA,CAE1E,IAHD,MAIO5lD,OAAA4lD,GAAA5lD,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAAY,KAAAZ,SAAAe,KARVE,IAAA,gBAAAW,EAACM,GAAA,EAAU,KAAA,MACTtB,UAAAA;AAAAA,IAAAA;AAAAA,IAGCG;AAAAA,EAAAA,GAKH,GAAQf,OAAAY,GAAAZ,OAAAe,GAAAf,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,SAAAlB,EAAA,CAAA,MAAAO,KAAAP,UAAAiB,KAfdC,sBAAC6e,IAAA,EAA0B,QAAA,QAAa,OAAA,QACtC,UAAA,gBAAAxe,EAACykD,IAAA,EACC,UAAA,gBAAAzkD,EAAC0kD,IAAA,EACQ,QAAA,SACA,OAAA1lD,GAEPU,UAAAA,GAUF,GACF,EAAA,CACF,GAAqBjB,OAAAO,GAAAP,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA,GAlBrBkB;AAkBqB;ACvElB,SAAAglD,GAAAnmD,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAA+B,GAAAoE,GAAA/F,GAAAE,GAAAE,GAAAG;AAAA,EAAAZ,SAAAD,KACL;AAAA,IAAAiC,UAAAA;AAAAA,IAAA4E,GAAAvG;AAAAA,IAAAwG,IAAAtG;AAAAA,IAAA2T,IAAAzT;AAAAA,IAAA0lD,mBAAAvlD;AAAAA,IAAA,GAAAwF;AAAAA,EAAAA,IAA2FrG,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAoG,GAAApG,OAAAK,GAAAL,OAAAO,GAAAP,OAAAS,GAAAT,OAAAY,MAAAoB,IAAAhC,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,GAAAO,IAAAP,EAAA,CAAA,GAAAS,IAAAT,EAAA,CAAA,GAAAY,IAAAZ,EAAA,CAAA;AAA/E,QAAA4G,IAAAvG,MAAAG,SAAA,SAAAH,GAAYwG,IAAAtG,MAAAC,SAAA,OAAAD,GAAW2T,IAAAzT,MAAAD,SAAA,OAAAC,GAAW0lD,IAAAvlD,MAAAJ,SAAA,QAAAI;AAAyB,MAAAG;AAAA,SAAAf,SAAAmmD,KAAAnmD,EAAA,CAAA,MAAAgC,KAAAhC,EAAA,CAAA,MAAA4G,KAAA5G,EAAA,EAAA,MAAA6G,KAAA7G,UAAAkU,KAAAlU,EAAA,EAAA,MAAAoG,KAG3ErF,sBAACe,IAAA,EAAM,GACDsE,GACDQ,GAAAA,GACK,SAAA,iBACF,OAAA,UACau/C,mBAAAA,GACN,aAAA,gBACTt/C,IAAAA,GACAqN,IAAAA,gBAGN,GAASlU,OAAAmmD,GAAAnmD,OAAAgC,GAAAhC,OAAA4G,GAAA5G,QAAA6G,GAAA7G,QAAAkU,GAAAlU,QAAAoG,GAAApG,QAAAe,KAAAA,IAAAf,EAAA,EAAA,GAXTe;AAWS;ACjBN,MAAMqlD,KAAarmD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAA+B,GAAAoE;AAAA,EAAApG,SAAAD,KACxB;AAAA,IAAAiC,UAAAA;AAAAA,IAAA,GAAAoE;AAAAA,EAAAA,IAA8BrG,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAoG,MAAApE,IAAAhC,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAgC,KAAAhC,SAAAoG,KAGlC/F,IAAA,gBAAAkB,EAACb,GAAA,EAAgB,aAAA,OAAkB,aAAA,gBAA4B,cAAA,KAAO,IAAA,MAAI,GAAK0F,GAC5EpE,UAAAA,EAAAA,CACH,GAAMhC,OAAAgC,GAAAhC,OAAAoG,GAAApG,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFNK;AAEM,GAMGgmD,KAAiBtmD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAA+B,GAAAoE;AAAA,EAAApG,SAAAD,KAC5B;AAAA,IAAAiC,UAAAA;AAAAA,IAAA,GAAAoE;AAAAA,EAAAA,IAA8BrG,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAoG,MAAApE,IAAAhC,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAgC,KAAAhC,SAAAoG,KAGlC/F,sBAACK,GAAA,EAAM,GAAA,MAAI,GAAK0F,GACbpE,UAAAA,GACH,GAAMhC,OAAAgC,GAAAhC,OAAAoG,GAAApG,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFNK;AAEM,GCLGimD,KAAkBvmD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC7B;AAAA,IAAAE,MAAAA;AAAAA,IAAAW,MAAAA;AAAAA,IAAAwK,aAAAA;AAAAA,IAAAP,IAAAA;AAAAA,IAAAkwB,SAAAA;AAAAA,IAAA7C,UAAAA;AAAAA,IAAAnN,QAAA5qB;AAAAA,IAAA2iC,aAAAA;AAAAA,EAAAA,IAAwFjjC,GAAhCkrB,IAAA5qB,MAAAG,SAAA,KAAAH;AAAc,MAAAE;AAAA,EAAAP,SAAAG,KAM9DI,IAAA,gBAAAgB,EAACmD,IAAA,EAAa,SAAA,OAAe,UAAA,OAAiB,YAAA,KAAU,OAAA,YACrDvE,UAAAA,EAAAA,CACH,GAAOH,OAAAG,GAAAH,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAAc,KAIDL,sBAACkB,GAAA,EAAe,WAAA,MAAgB,YAAA,YAC7Bb,UAAAA,GACH,GAAOd,OAAAc,GAAAd,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,SAAA+K,KACPnK,sBAACorB,IAAA,EAAW,MAAA,MAAa,SAAA,WACtBjhB,UAAAA,GACH,GAAQ/K,OAAA+K,GAAA/K,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,SAAAi7B,KACPl6B,IAAAk6B,KACC,gBAAAr5B,EAACoqB,IAAA,EAAW,MAAA,MAAa,SAAA,WAAU,UAAA;AAAA,IAAA;AAAA;KAEnC,GACDhsB,OAAAi7B,GAAAj7B,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,SAAAo4B,KACAn3B,IAAAm3B,KACC,gBAAA72B,EAACyqB,IAAA,EAAW,MAAA,MAAa,SAAA,wBAEzB,GACDhsB,OAAAo4B,GAAAp4B,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,EAAA,MAAAS,KAAAT,EAAA,EAAA,MAAAY,KAAAZ,EAAA,EAAA,MAAAe,KAAAf,UAAAiB,KAhBHC,IAAA,gBAAAU,EAACE,IAAA,EAAW,KAAA,KAAa,UAAA,QACvBrB,UAAAA;AAAAA,IAAAA;AAAAA,IAGAG;AAAAA,IAGCG;AAAAA,IAKAE;AAAAA,EAAAA,GAKH,GAASjB,QAAAS,GAAAT,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,EAAAnB,UAAAsL,KACTnK,IAAA,gBAAAI,EAACI,GAAA,EAAW,OAAA,YAAY2J,UAAAA,GAAY,GAAOtL,QAAAsL,GAAAtL,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,EAAA,MAAAkB,KAAAlB,UAAAmB,KApB/C+D,IAAA,gBAAA3D,EAACb,KAAS,MAAA,KAAS,MAAA,KACjB,UAAA,gBAAAkB,EAACM,GAAA,EAAU,KAAA,KACThB,UAAAA;AAAAA,IAAAA;AAAAA,IAkBAC;AAAAA,EAAAA,EAAAA,CACF,EAAA,CACF,GAAMnB,QAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,EAAA3K,UAAAirB,KAUHtgB,IAAAsgB,KACC,gBAAA1pB,EAACmD,IAAA,EAAW,OAAA,cACV,UAAA,gBAAAnD,EAACo3B,MAAK,EAAA,CACR,GACD34B,QAAAirB,GAAAjrB,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AACA,QAAAoL,IAAA43B,MAAgB/X,IAAA,WAAA;AAA8B,MAAApf;AAAA,EAAA7L,EAAA,EAAA,MAAAirB,KAAAjrB,UAAAoL,KAAApL,EAAA,EAAA,MAAA2K,KAdjDkB,sBAACqqB,IAAA,EACM,MAAA,UACKjL,UAAAA,GACL,MAAA,MACG,SAAA,WACK,cAAA,QACV,IAAA,MACQ,YAAA,KAEVtgB,UAAAA;AAAAA,IAAAA;AAAAA,IAKAS;AAAAA,EAAAA,GACH,GAASpL,QAAAirB,GAAAjrB,QAAAoL,GAAApL,QAAA2K,GAAA3K,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,SAAAhN,EAAA,EAAA,MAAAO,KAAAP,UAAA6L,KAAA7L,EAAA,EAAA,MAAAkF,KA5Cf8H,IAAA,gBAAAzL,EAAC6kD,MACC,UAAA,gBAAA7kD,EAAC8kD,IAAA,EACC,4BAACvkD,IAAA,EAAW,KAAA,KAAe,YAAA,cACzBvB,UAAAA;AAAAA,IAAAA;AAAAA,IAGA2E;AAAAA,IAuBA2G;AAAAA,EAAAA,EAAAA,CAgBF,GACF,GACF,GAAa7L,QAAAO,GAAAP,QAAA6L,GAAA7L,QAAAkF,GAAAlF,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA,GA/CbgN;AA+Ca,GCtDJu5C,KAAcxmD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACzB;AAAA,IAAA+B,UAAAA;AAAAA,IAAAqD,OAAAA;AAAAA,IAAAmhD,aAAAnmD;AAAAA,IAAA6O,QAAAA;AAAAA,EAAAA,IAAwDnP,GAA/BymD,IAAAnmD,MAAAG,SAAA,KAAAH;AAAkB,MAAAE;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAM3Bf,IAAA;AAAA,IAAAD,YACM;AAAA,EAAA,GACbN,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAAqF,KAUA5E,IAAA4E,KACC,gBAAA9D,EAACI,GAAA,EAAgB,YAAA,OAAgB,WAAA,+BAEjC,GACD3B,OAAAqF,GAAArF,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACDV,sCAAkC,YAAA,kBAAwB,OAAA;AAAA,IAAAktC,WAAa;AAAA,EAAA,GACrE,UAAA,gBAAAvsC,EAACkP,IAAA,EAAmB,MAAA,IAAE,GACxB,GAAwBzQ,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,SAAAS,KApB1BM,IAAA,gBAAAa,EAAA6kD,GAAA,SAAA,EACU,QAAAlmD,GAGA,SAAA,MACD,QAAA,QACC,SAAA,QACF,OAAA,QACF,KAAA,KACO,YAAA,UACJ,QAAA,WACQ,gBAAA,iBAEdE,UAAAA;AAAAA,IAAAA;AAAAA,IAKDG;AAAAA,EAAAA,GAGF,GAAsBZ,OAAAS,GAAAT,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,SAAAkP,KACrBjO,IAAAiO,KACC,gBAAA3N,EAACb,GAAA,EAAe,YAAA,QAAgB,SAAAyK,iBAEhC,GACDnL,OAAAkP,GAAAlP,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,CAAA,MAAAe,KAAAf,SAAAiB,KA3BHC,sBAACuF,IAAA,EACC1F,UAAAA;AAAAA,IAAAA;AAAAA,IAsBCE;AAAAA,EAAAA,GAKH,GAAOjB,OAAAe,GAAAf,OAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,EAAAnB,UAAAgC,KACPb,IAAA,gBAAAI,EAAAklD,GAAA,SAAA,EAAsBzkD,UAAAA,EAAAA,CAAS,GAAsBhC,QAAAgC,GAAAhC,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,SAAAlF,EAAA,EAAA,MAAAwmD,KAAAxmD,UAAAkB,KAAAlB,EAAA,EAAA,MAAAmB,KA9BvD+D,iCAA+BshD,aAAAA,GAAmB,OAAA,QAChDtlD,UAAAA;AAAAA,IAAAA;AAAAA,IA6BAC;AAAAA,EAAAA,GACF,GAAmBnB,QAAAwmD,GAAAxmD,QAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA,GA/BnBkF;AA+BmB;AAnCI,SAAAiG,GAAAu7C,GAAA;AAAA,SA6BsBA,EAACz6C,gBAAAA;AAAkB;ACpBpE,MAAM06C,KAAeA,CAACC,GAA0B7vC,MACvC,GAAG6vC,EAAO9lD,IAAI,IAAI8lD,EAAO3rB,WAAW,SAAS,IAAIlkB,CAAK,IAGzD8vC,KAAiBA,CAACD,MACjBA,EAAO3rB,UAEL,GAAG2rB,EAAO9lD,IAAI,KAAK8lD,EAAO3rB,OAAO,KAFZ2rB,EAAO9lD,MAKxBgmD,KAA0B/mD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACrC;AAAA,IAAA8mD,SAAAA;AAAAA,IAAA1hD,OAAAhF;AAAAA,IAAAiL,aAAA/K;AAAAA,IAAAymD,aAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAz0B,YAAAhyB;AAAAA,IAAAiyB,kBAAA9xB;AAAAA,EAAAA,IASIb,GAPFsF,IAAAhF,MAAAG,SAAA,wCAAAH,GACAiL,IAAA/K,MAAAC,SAAA,2EAAAD,GAIAkyB,IAAAhyB,MAAAD,SAAA,qCAAAC,GACAiyB,IAAA9xB,MAAAJ,SAAA,yDAAAI;AAAyE,MAAAG;AAAA,EAAAf,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAIAP,IAAA;AAAA,IAAAob,MAAQ;AAAA,IAAIgrC,IAAM;AAAA,EAAA,GAAMnnD,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,SAAAqF,KAE7FpE,IAAA,gBAAAM,EAACI,GAAA,EAAe,WAAA,aAAa0D,UAAAA,GAAM,GAAOrF,OAAAqF,GAAArF,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,SAAAsL,KAC1CpK,sBAACS,GAAA,EAAe,WAAA,uBAA4B,OAAA,YACzC2J,UAAAA,GACH,GAAOtL,OAAAsL,GAAAtL,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAA,MAAAmB;AAAA,EAAAnB,SAAAgnD,KAGJ7lD,IAAA6lD,IACC,gBAAAplD,EAACD,GAAA,EAAe,WAAA,YAAiB,OAAA,YAAW,UAAA;AAAA,IAAA;AAAA,IAChCqlD;AAAAA,EAAAA,EAAAA,CACZ,IAHD,MAIOhnD,OAAAgnD,GAAAhnD,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAA,MAAAkF;AAAA,EAAAlF,SAAAinD,KAEP/hD,IAAA+hD,IACC,gBAAArlD,EAACD,GAAA,EAAe,WAAA,YAAiB,OAAA,YAAW,UAAA;AAAA,IAAA;AAAA,IAChCslD;AAAAA,EAAAA,EAAAA,CACZ,IAHD,MAIOjnD,OAAAinD,GAAAjnD,OAAAkF,KAAAA,IAAAlF,EAAA,CAAA;AAAA,MAAA2K;AAAA,EAAA3K,EAAA,CAAA,MAAA+mD,EAAApjD,UAERgH,sBAAChJ,GAAA,EAAe,WAAA,YAAiB,OAAA,YAAW,UAAA;AAAA,IAAA;AAAA,IAC/BolD,EAAOpjD;AAAAA,EAAAA,GACpB,GAAO3D,EAAA,CAAA,IAAA+mD,EAAApjD,QAAA3D,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,EAAApL,UAAAknD,KAEN97C,IAAA87C,IACC,gBAAAtlD,EAACD,GAAA,EAAe,WAAA,YAAiB,OAAA,YAAW,UAAA;AAAA,IAAA;AAAA,IAC9BulD;AAAAA,EAAAA,EAAAA,CACd,IAHD,MAIOlnD,QAAAknD,GAAAlnD,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,EAAA,EAAA,MAAAoL,KAAApL,EAAA,EAAA,MAAAmB,KAAAnB,EAAA,EAAA,MAAAkF,KAAAlF,UAAA2K,KArBVkB,IAAA,gBAAAjK,EAACE,IAAA,EAAW,KAAA,MAAc,UAAA,QACvBX,UAAAA;AAAAA,IAAAA;AAAAA,IAMA+D;AAAAA,IAMDyF;AAAAA,IAICS;AAAAA,EAAAA,GAKH,GAASpL,QAAAoL,GAAApL,QAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAA2K,GAAA3K,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,EAAAhN,EAAA,EAAA,MAAA6L,KAAA7L,UAAAiB,KAAAjB,EAAA,EAAA,MAAAkB,KA5BX8L,sBAAC9K,GAAA,EAAU,KAAA,MACTjB,UAAAA;AAAAA,IAAAA;AAAAA,IACAC;AAAAA,IAIA2K;AAAAA,EAAAA,GAuBF,GAAQ7L,QAAA6L,GAAA7L,QAAAiB,GAAAjB,QAAAkB,GAAAlB,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA;AAAA,MAAAkN;AAAA,EAAAlN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAER4L,sBAACqqB,IAAA,EAAsB,aAAA,eAAA,CAAc,GAAGv3B,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA;AAAA,MAAAmN;AAAA,EAAAnN,EAAA,EAAA,MAAA0yB,KAAA1yB,UAAAyyB,KAAAzyB,EAAA,EAAA,MAAA+mD,KAEvC55C,IAAA45C,EAAOpjD,WAAY,IAClB,gBAAA/B,EAACM,KAAkB,aAAA,OAAkB,aAAA,gBAA4B,cAAA,MAAa,SAAA,MAAS,KAAA,MACrF,UAAA;AAAA,IAAA,gBAAAX,EAACI,GAAA,EAAe,WAAA,kBAAkB8wB,UAAAA,GAAW;AAAA,sBAC5C9wB,GAAA,EAAe,WAAA,uBAA4B,OAAA,YACzC+wB,UAAAA,EAAAA,CACH;AAAA,EAAA,EAAA,CACF,sBAECxwB,GAAA,EAAU,KAAA,MACR6kD,UAAAA,EAAO14C,IAAKlD,EA2DZ,EAAA,CACH,GACDnL,QAAA0yB,GAAA1yB,QAAAyyB,GAAAzyB,QAAA+mD,GAAA/mD,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA;AAAA,MAAAsN;AAAA,SAAAtN,EAAA,EAAA,MAAAgN,KAAAhN,UAAAmN,KAxGHG,sBAACpL,GAAA,EAAY,OAAA,QAAiB,WAAA,QAAkB,YAAA,MAAW,OAAA,MAAc,SAAAnB,GAA8B,KAAA,MACrGiM,UAAAA;AAAAA,IAAAA;AAAAA,IA+BAE;AAAAA,IAECC;AAAAA,EAAAA,GAuEH,GAAQnN,QAAAgN,GAAAhN,QAAAmN,GAAAnN,QAAAsN,KAAAA,IAAAtN,EAAA,EAAA,GAzGRsN;AAyGQ;AAtH2B,SAAAnC,GAAAy7C,GAAA7vC,GAAA;AAAA,SAyD3B,gBAAAxV,EAACb,GAAA,EAEa,aAAA,OACA,aAAA,gBACC,cAAA,MACL,SAAA,MAER,UAAA,gBAAAkB,EAACM,GAAA,EAAU,KAAA,MACT,UAAA;AAAA,IAAA,gBAAAN,EAACM,GAAA,EAAU,KAAA,OACT,UAAA;AAAA,MAAA,gBAAAX,EAACI,GAAA,EAAe,WAAA,kBAAkBklD,UAAAA,GAAeD,CAAM,GAAE;AAAA,MACzD,gBAAAhlD,EAACD,GAAA,EAAe,WAAA,mBAAwB,OAAA,YAAW,UAAA;AAAA,QAAA;AAAA,QACvCilD,EAAMQ,WAAN;AAAA,MAAA,EAAA,CACZ;AAAA,IAAA,GACF;AAAA,IAECR,EAAMS,YACL,gBAAA9lD,EAACI,GAAA,EAAe,WAAA,mBAAwB,OAAA,YACrCilD,UAAAA,EAAMS,UAAAA,CACT,IAHD;AAAA,KAMCT,EAAMU,eAAgBV,EAAMW,cAC5B,gBAAA3lD,EAACM,GAAA,EAAU,KAAA,OACR0kD,UAAAA;AAAAA,MAAAA,EAAMU,cACL,gBAAA/lD,EAACimD,IAAA,EACO,MAAAZ,EAAMU,aACL,QAAA,UACH,KAAA,cACM,WAAA,kBACJ,OAAA,eACP,sBAED,IATD;AAAA,MAYAV,EAAMW,YACL,gBAAAhmD,EAACimD,IAAA,EACO,MAAAZ,EAAMW,WACL,QAAA,UACH,KAAA,cACM,WAAA,kBACJ,OAAA,eACP,yBAED,IATD;AAAA,IAAA,GAWH;AAAA,IAGDX,EAAMa,cACL,gBAAAlmD,EAACb,KAAe,YAAA,YAAwB,cAAA,MAAa,SAAA,MACnD,UAAA,gBAAAa,EAACI,GAAA,EAAe,WAAA,mBAA6B,YAAA,YAC1CilD,UAAAA,EAAMa,YAAAA,CACT,GACF,IALD;AAAA,EAAA,EAAA,CAOH,EAAA,GAvDKd,GAAaC,GAAQ7vC,CAAK,CAwDjC;AAAM;ACjJX,MAAM2wC,KAA8B,IAuBrCC,KAAoBA,CAACtyC,MAA8B;AACvD,QAAM3N,IAAQ,OAAO2N,EAAM3N,SAAU,WAAW2N,EAAM3N,QAAQ,IACxD6D,IAAiB,OAAO8J,EAAM9J,kBAAmB,WAAW8J,EAAM9J,iBAAiB;AAEzF,SAAO,GAAG7D,CAAK,IAAI2N,EAAM1N,cAAc,EAAE,IAAI4D,CAAc;AAC7D,GAEMq8C,KAAiBA,CAACvgD,GAAewgD,MAAwBxgD,EAAMygD,UAAAA,EAAYlkC,WAAWikC,CAAW,GAE1FE,KAAqBA,CAAC1gD,GAAe2gD,IAAgC,CAAA,GAAIC,MAC/DD,EAAMn9C,KAAMgN,CAAAA,MAASA,EAAKgwC,eAAeD,GAAevgD,GAAOwQ,EAAKgwC,WAAW,CAAC,GAEhF98C,MAAMk9C,KAAgBD,EAAMn9C,KAAMgN,CAAAA,MAAS,CAACA,EAAKgwC,WAAW,GAAG98C,MAAMi9C,EAAM,CAAC,GAAGj9C,IAGzFm9C,KAA2BA,CAAC7gD,GAAe2gD,IAAgC,CAAA,GAAIG,MAAoB;AAC9G,QAAMtwC,IAAOmwC,EAAMn9C,KAChBu9C,CAAAA,MAAcA,EAAUr9C,OAAOo9C,KAAUC,EAAUP,eAAeD,GAAevgD,GAAO+gD,EAAUP,WAAW,CAChH;AAEA,SAAKhwC,GAAMgwC,cAEJxgD,EAAMygD,YAAY9gC,MAAMnP,EAAKgwC,YAAYlkD,MAAM,EAAED,KAAAA,IAFzB2D,EAAM3D,KAAAA;AAGvC,GAEM2kD,KAA2B,CAA+B9uC,GAAc+uC,MAAkB;AAC9F,QAAM3yB,IAAiC,CAAA;AAEvC,SAAOpc,EAAQ/R,OAAQ6N,CAAAA,MAAU;AAC/B,UAAMkzC,IAAYlzC,EAAMkzC;AACxB,QAAI,CAACA,EAAW,QAAO;AAEvB,UAAM/lD,IAAQmzB,EAAO4yB,CAAS,KAAK;AACnC,WAAI/lD,KAAS8lD,IAAc,MAE3B3yB,EAAO4yB,CAAS,IAAI/lD,IAAQ,GACrB;AAAA,EACT,CAAC;AACH,GAEagmD,KAAuB,CAClCjvC,GACAiF,MACG;AACH,QAAMiqC,KAAkBjqC,EAAQkqC,oBAAoBlqC,EAAQnX,KAAK,KAAKmX,EAAQnX,MAAM3D,KAAAA,GAAQ6D,YAAAA,GAEtFohD,IAAkBpvC,EAAQ/R,OAAQ6N,CAAAA,MAClCmJ,EAAQ3G,QAAQxC,EAAMwC,SAAS2G,EAAQ3G,OAAa,KACnD4wC,IAEEd,GAAkBtyC,CAAK,EAAE9N,YAAAA,EAAcO,SAAS2gD,CAAc,IAFzC,EAG7B;AAED,SAAIA,KAAkBjqC,EAAQoqC,sBAAsBpoD,SAC3CmoD,IAGFN,GAAyBM,GAAiBnqC,EAAQoqC,iBAAiB;AAC5E,GCvEMC,KAAmB,IACnBC,KAAmB,IACnBC,KAA0B,KAC1BC,KAAgB,sBAEhBC,KAAiBA,CAAC5zC,OAAsC;AAAA,EAC5DtK,IAAIsK,EAAMtK;AAAAA,EACVrD,OAAO2N,EAAM3N;AAAAA,EACb4D,aAAa+J,EAAM/J,eAAe+J,EAAM9J;AAAAA,EACxCpL,MAAMkV,EAAMlV;AAAAA,EACZ0P,YACEwF,EAAMxF,eACLwF,EAAM6zC,YAAY7zC,EAAM7G,aACvB,gBAAA5M,EAACE,IAAA,EAAO,KAAI,KACTuT,UAAAA;AAAAA,IAAAA,EAAM6zC;AAAAA,IACN7zC,EAAM7G,aAAa,gBAAAjN,EAACmD,IAAA,EAAK,IAAIi0B,IAAO,SAAQ,QAAO,OAAM,WAAA,CAAU,IAAM;AAAA,EAAA,EAAA,CAC5E,IACEn4B;AAAAA,EACN8R,YAAY+C,EAAM/C;AACpB,IAEM62C,KAAY,CAAyB5vC,MAAiB;AAC1D,QAAMmQ,IAAwB,CAAA;AAE9BnQ,SAAAA,EAAQo6B,QAAQ,CAACt+B,GAAO0B,MAAU;AAChC,UAAMqyC,IAAgB7vC,EAAQxC,IAAQ,CAAC;AACvC,IAAI1B,EAAMgZ,SAAShZ,EAAMgZ,UAAU+6B,GAAe/6B,SAChD3E,EAAKL,KAAK;AAAA,MAAE3C,MAAM;AAAA,MAAS3b,IAAI,SAASsK,EAAMgZ,KAAK,IAAIhZ,EAAMtK,EAAE;AAAA,MAAIrD,OAAO2N,EAAMgZ;AAAAA,IAAAA,CAAO,GAGzF3E,EAAKL,KAAK;AAAA,MAAE3C,MAAM;AAAA,MAAS3b,IAAIsK,EAAMtK;AAAAA,MAAIsK,OAAAA;AAAAA,MAAOg0C,YAAYtyC;AAAAA,IAAAA,CAAO;AAAA,EACrE,CAAC,GAEM2S;AACT,GAEM4/B,KAAoB,CAAyB5/B,GAAuB6/B,MACxE7/B,EAAKmK,UAAW3M,CAAAA,MAAQA,EAAIR,SAAS,WAAWQ,EAAImiC,eAAeE,CAAW,GAUnEC,KAAc,CAAyBzpD,MAA+B;AACjF,QAAM;AAAA,IAAEwZ,SAAAA;AAAAA,IAASgwC,aAAAA;AAAAA,IAAaE,YAAAA;AAAAA,IAAYC,SAAAA;AAAAA,IAASphB,WAAAA;AAAAA,EAAAA,IAAcvoC,GAC3D2pB,IAAOy/B,GAAU5vC,CAAO,GACxBowC,IAAiBL,GAAkB5/B,GAAM6/B,CAAW,GACpDte,IAAcC,GAAe;AAAA,IACjC1oC,OAAOknB,EAAK/lB;AAAAA,IACZwnC,kBAAkBA,MAAM7C,EAAUl+B;AAAAA,IAClCghC,cAAer0B,CAAAA,MAAW2S,EAAK3S,CAAK,GAAG2P,SAAS,UAAUmiC,KAAmBC;AAAAA,IAC7Ezd,YAAat0B,CAAAA,MAAU2S,EAAK3S,CAAK,GAAGhM,MAAMgM;AAAAA,IAC1C6yC,aAAa;AAAA,MAAEvjD,OAAO;AAAA,MAAGqK,QAAQq4C;AAAAA,IAAAA;AAAAA,IACjCzd,UAAU;AAAA,EAAA,CACX;AAQD,SANAnhC,GAAU,MAAM;AACd,IAAIw/C,IAAiB,KAErB1e,EAAYyT,cAAciL,GAAgB;AAAA,MAAE7sB,OAAO;AAAA,MAAQgM,UAAU;AAAA,IAAA,CAAQ;AAAA,EAC/E,GAAG,CAAC6gB,GAAgB1e,CAAW,CAAC,GAE5B1xB,EAAQ5V,WAAW,IAEnB,gBAAApC,EAACI,GAAA,EAAK,WAAU,uBAAsB,OAAM,YAAW,IAAG,MAAK,IAAG,MAC/D8nD,UAAAA,EAAAA,CACH,IAKF,gBAAAloD,EAACb,KAAI,MAAK,WAAU,UAAS,YAAW,OAAM,QAAO,OAAO;AAAA,IAAEgQ,QAAQu6B,EAAYuB,aAAAA;AAAAA,EAAa,GAC5FvB,UAAAA,EAAYqB,gBAAAA,EAAkBj+B,IAAKw7C,CAAAA,MAAe;AACjD,UAAM3iC,IAAMwC,EAAKmgC,EAAW9yC,KAAK;AACjC,WAAKmQ,IAGH,gBAAA3lB,EAACb,GAAA,EAEC,cAAYmpD,EAAW9yC,OACvB,KAAKk0B,EAAYyB,gBACjB,UAAS,YACT,MAAK,KACL,OAAM,QACN,OAAO;AAAA,MAAEvE,KAAK0hB,EAAWld;AAAAA,IAAAA,GAExBzlB,YAAIR,SAAS,4BACX/kB,GAAA,EAAK,WAAU,mBAAkB,OAAM,YAAW,IAAG,MAAK,IAAG,MAAK,IAAG,OACnEulB,UAAAA,EAAIxf,MAAAA,CACP,IAEA,gBAAAnG,EAAC4K,IAAA,EACC,SAAQ,WACR,GAAI88C,GAAe/hC,EAAI7R,KAAK,GAC5B,YAAY6R,EAAImiC,eAAeE,GAC/B,YAAYP,IACZ,SAAS9hC,EAAImiC,eAAeE,IAAcP,KAAgB,eAC1D,UAAU,IACV,eAAe,MAAMU,EAAQxiC,EAAImiC,UAAU,EAAA,CAAE,KApB5CQ,EAAWv0C,GAuBlB,IA3Be;AAAA,EA6BnB,CAAC,EAAA,CACH;AAEJ,GCxDMw0C,KAAoB,CACxBpnD,GACAq3B,GACA8rB,MAEI,OAAOnjD,KAAU,aACXA,EAA6Cq3B,CAAK,IAGrDr3B,KAASmjD,GAGZkE,KAAyB;AAAA,EAC7B7lD,aAAa;AAAA,EACbC,WAAW;AAAA,EACXE,SAAS;AACX,GAEa2lD,KAAUjqD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACrB;AAAA,IAAAiJ,MAAAA;AAAAA,IAAAqQ,SAAAA;AAAAA,IAAA0wC,cAAA5pD;AAAAA,IAAA6pD,oBAAA3pD;AAAAA,IAAAsX,MAAAA;AAAAA,IAAAmwC,OAAAA;AAAAA,IAAAmC,UAAA1pD;AAAAA,IAAA2pD,WAAAA;AAAAA,IAAAxnD,aAAAA;AAAAA,IAAA6mD,YAAA7oD;AAAAA,IAAAypD,aAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,qBAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAApzC,SAAAA;AAAAA,IAAAqzC,UAAAA;AAAAA,EAAAA,IAkBI3qD,GAfFkqD,IAAA5pD,MAAAG,SAAA,KAAAH,GACA6pD,IAAA3pD,MAAAC,SAAA,IAAAD,GAGA4pD,IAAA1pD,MAAAD,SAAA,YAAAC,GAGAgpD,IAAA7oD,MAAAJ,SAAA,gBAAAI,GASF,CAAAyG,GAAAsjD,CAAA,IAA+BrnD,GAAS2mD,CAAY,GACpD,CAAAV,GAAAqB,CAAA,IAAsCtnD,GAAS4mD,CAAkB,GACjErgD,IAAiBC,GAAyB,IAAI,GAC9Cw+B,IAAkBx+B,GAAuB,IAAI;AAAE,MAAA/I;AAAA,EAAAf,SAAAmqD,KACvBppD,IAAA;AAAA,IAAAmI,MAAQ;AAAA,IAAKihD,UAAAA;AAAAA,EAAAA,GAAYnqD,OAAAmqD,GAAAnqD,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAjD,QAAA6qD,IAAiB/gD,GAAO/I,CAAyB;AAAE,MAAA+pD,GAAAnC,GAAAoC,GAAAhxB,GAAA94B;AAAA,MAAAjB,EAAA,CAAA,MAAAupD,KAAAvpD,EAAA,CAAA,MAAAuZ,KAAAvZ,EAAA,CAAA,MAAAuqD,KAAAvqD,EAAA,CAAA,MAAAoqD,KAAApqD,EAAA,CAAA,MAAA6X,KAAA7X,EAAA,CAAA,MAAAgoD,KAAAhoD,EAAA,CAAA,MAAA4C,KAAA5C,SAAAqH,GAAA;AACnD,UAAA2jD,IAAmBnzC,KAAQkwC,GAAmB1gD,GAAO2gD,CAAK;AAC1DW,IAAAA,IAAwB4B,IACpBA,EAAchxC,GAASlS,GAAO2jD,CAK7B,IAJDxC,GAAqBjvC,GAAS;AAAA,MAAAlS,OAAAA;AAAAA,MAAAwQ,MAEtBmzC;AAAAA,MAAUtC,mBACGhmD,CAAAA,OAAWwlD,GAAyBxlD,IAAOslD,GAAOgD,CAAU;AAAA,IAAA,CAChF,GACLF,IAAoBnC,EAAgBY,CAAW,KAA3B,MACpBxvB,IAA+B;AAAA,MAAA1yB,OAAAA;AAAAA,MAAAwQ,MAAemzC;AAAAA,MAAUzB,aAAAA;AAAAA,MAAAhwC,SAAwBovC;AAAAA,IAAAA,GAChFoC,IAA0BjB,GAAkBM,GAAWrwB,GAAO,IAAI,GACtC94B,IAAA6oD,GAAkBlnD,GAAam3B,GAAO,QAAQ,GAAC/5B,OAAAupD,GAAAvpD,OAAAuZ,GAAAvZ,OAAAuqD,GAAAvqD,OAAAoqD,GAAApqD,OAAA6X,GAAA7X,OAAAgoD,GAAAhoD,OAAA4C,GAAA5C,OAAAqH,GAAArH,QAAA8qD,GAAA9qD,QAAA2oD,GAAA3oD,QAAA+qD,GAAA/qD,QAAA+5B,GAAA/5B,QAAAiB;AAAAA,EAAA;AAAA6pD,IAAAA,IAAA9qD,EAAA,EAAA,GAAA2oD,IAAA3oD,EAAA,EAAA,GAAA+qD,IAAA/qD,EAAA,EAAA,GAAA+5B,IAAA/5B,EAAA,EAAA,GAAAiB,IAAAjB,EAAA,EAAA;AAA3E,QAAAirD,IAA4BhqD;AAAgD,MAAAC;AAAA,EAAAlB,UAAAyqD,KAE3DvpD,IAAAgqD,CAAAA,MAAA;AACfP,IAAAA,EAAcO,CAAS,GACvBT,IAAgBS,CAAS;AAAA,EAAC,GAC3BlrD,QAAAyqD,GAAAzqD,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAHD,QAAA0J,IAAiBxI;AAGf,MAAAC;AAAA,EAAAnB,UAAA8qD,KAEqB3pD,IAAAA,MAAA;AACrB2pD,IAAAA,GAAWx4C,WAAAA;AAAAA,EAAc,GAC1BtS,QAAA8qD,GAAA9qD,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAFD,QAAAmrD,IAAuBhqD;AAErB,MAAA+D;AAAA,EAAAlF,UAAAqX,KAEmBnS,IAAAA,MAAA;AACnBmS,IAAAA,EAAAA;AAAAA,EAAS,GACVrX,QAAAqX,GAAArX,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAFD,QAAAorD,IAAqBlmD;AAEnB,MAAAkG,GAAAT;AAAA,EAAA3K,EAAA,EAAA,MAAAkqD,KAAAlqD,EAAA,EAAA,MAAAiqD,KAAAjqD,EAAA,EAAA,MAAAkJ,KAAAlJ,UAAAmqD,KAEQx/C,KAAAA,MAAA;AACR,UAAA0gD,IAAsBR,EAAQzgD;AAK9B,QAJAygD,EAAQzgD,UAAW;AAAA,MAAAlB,MAAAA;AAAAA,MAAAihD,UAAAA;AAAAA,IAAAA,GACf,CAACjhD,KAGD,EADqB,CAACmiD,EAAaniD,QAASmiD,EAAalB,aAAcA;AACtD;AAErBQ,IAAAA,EAAcV,CAAY,GAC1BW,EAAeV,CAAkB;AAEjC,UAAA7/C,KAAgBC,WAAW,MAAA;AACzB,YAAAvD,KAAc8C,EAAQO;AACtB,UAAI,CAACrD;AAAK;AACVA,MAAAA,GAAKwD,MAAAA;AACL,YAAA5G,KAAeoD,GAAKrE,MAAMiB;AAC1BoD,MAAAA,GAAKukD,kBAAmB3nD,IAAQA,EAAM;AAAA,IAAC,GACtC,CAAC;AAAE,WACC,MAAM6G,aAAaH,EAAO;AAAA,EAAC,GACjCe,IAAA,CAAC8+C,GAAoBD,GAAc/gD,GAAMihD,CAAQ,GAACnqD,QAAAkqD,GAAAlqD,QAAAiqD,GAAAjqD,QAAAkJ,GAAAlJ,QAAAmqD,GAAAnqD,QAAAoL,GAAApL,QAAA2K,OAAAS,IAAApL,EAAA,EAAA,GAAA2K,KAAA3K,EAAA,EAAA,IAnBrDmK,GAAUQ,IAmBPS,CAAkD;AAAC,MAAAS,IAAAmB;AAAA,EAAAhN,EAAA,EAAA,MAAA2oD,EAAAhlD,UAE5CkI,KAAAA,MAAA;AACR++C,IAAAA,EAAexgD,CAAAA,MAAa88B,KAAIkH,IAAKhkC,GAAS88B,KAAIC,IAAKwhB,EAAehlD,SAAU,GAAG,CAAC,CAAC,CAAC;AAAA,EAAC,GACtFqJ,KAAA,CAAC27C,EAAehlD,MAAO,GAAC3D,EAAA,EAAA,IAAA2oD,EAAAhlD,QAAA3D,QAAA6L,IAAA7L,QAAAgN,OAAAnB,KAAA7L,EAAA,EAAA,GAAAgN,KAAAhN,EAAA,EAAA,IAF3BmK,GAAU0B,IAEPmB,EAAwB;AAAC,MAAAE,IAAAC;AAAA,EAAAnN,EAAA,EAAA,MAAA8qD,KAAA9qD,UAAAupD,KAAAvpD,EAAA,EAAA,MAAAwqD,KAElBt9C,KAAAA,MAAA;AACRs9C,IAAAA,IAAsBM,GAAavB,CAAW;AAAA,EAAC,GAC9Cp8C,MAAC29C,GAAavB,GAAaiB,CAAmB,GAACxqD,QAAA8qD,GAAA9qD,QAAAupD,GAAAvpD,QAAAwqD,GAAAxqD,QAAAkN,IAAAlN,QAAAmN,OAAAD,KAAAlN,EAAA,EAAA,GAAAmN,KAAAnN,EAAA,EAAA,IAFlDmK,GAAU+C,IAEPC,EAA+C;AAAC,MAAAG;AAAA,EAAAtN,EAAA,EAAA,MAAA8qD,KAAA9qD,EAAA,EAAA,MAAAorD,KAAAprD,EAAA,EAAA,MAAA2oD,EAAAhlD,UAAA3D,EAAA,EAAA,MAAA0qD,KAAA1qD,EAAA,EAAA,MAAAqH,KAAArH,EAAA,EAAA,MAAAmrD,KAAAnrD,EAAA,EAAA,MAAA0J,KAAA1J,UAAA+5B,KAE9BzsB,KAAAA,MAAA;AAUnB,QATgBo9C,CAAAA,IAAW;AAAA,MAAA,GACtB3wB;AAAAA,MAAK+wB,aAAAA;AAAAA,MAAAS,YAEI5C,EAAehlD;AAAAA,MAAO+F,UAAAA;AAAAA,MAAAkhD,gBAAAA;AAAAA,MAAAO,gBAAAA;AAAAA,MAAAC,cAAAA;AAAAA,IAAAA,CAKnC,GAGD;AAAA,UAAI/jD,EAAK1D,SAAU,GAAC;AAClB+F,QAAAA,EAAS,EAAE,GACXkhD,EAAe,CAAC;AAAC;AAAA,MAAA;AAInBQ,MAAAA,EAAAA;AAAAA;AAAAA,EAAc,GACfprD,QAAA8qD,GAAA9qD,QAAAorD,GAAAprD,EAAA,EAAA,IAAA2oD,EAAAhlD,QAAA3D,QAAA0qD,GAAA1qD,QAAAqH,GAAArH,QAAAmrD,GAAAnrD,QAAA0J,GAAA1J,QAAA+5B,GAAA/5B,QAAAsN,MAAAA,KAAAtN,EAAA,EAAA;AAnBD,QAAAwrD,KAAqBl+C;AAmBnB,MAAAC;AAAA,EAAAvN,EAAA,EAAA,MAAA2oD,EAAAhlD,UAAA3D,EAAA,EAAA,MAAAwrD,MAAAxrD,EAAA,EAAA,MAAAmrD,KAEoB59C,KAAAxJ,CAAAA,MAAA;AACpB,QAAIA,EAAKuR,QAAS,aAAW;AAC3BvR,MAAAA,EAAKC,eAAAA,GACL4mD,EAAe1F,CAAAA,OAAahe,KAAIkH,IAAKhkC,KAAU,GAAG88B,KAAIC,IAAKwhB,EAAehlD,SAAU,GAAG,CAAC,CAAC,CAAC;AAAC;AAAA,IAAA;AAI7F,QAAII,EAAKuR,QAAS,WAAS;AACzBvR,MAAAA,EAAKC,eAAAA,GACL4mD,EAAez/C,EAAqC;AAAC;AAAA,IAAA;AAIvD,QAAIpH,EAAKuR,QAAS,SAAO;AACvBvR,MAAAA,EAAKC,eAAAA,GACLmnD,EAAAA;AAAgB;AAAA,IAAA;AAIlB,IAAIpnD,EAAKuR,QAAS,aAElBvR,EAAKC,eAAAA,GACLD,EAAKkI,gBAAAA,GACLu/C,GAAAA;AAAAA,EAAc,GACfxrD,EAAA,EAAA,IAAA2oD,EAAAhlD,QAAA3D,QAAAwrD,IAAAxrD,QAAAmrD,GAAAnrD,QAAAuN,MAAAA,KAAAvN,EAAA,EAAA;AAxBD,QAAAm+C,KAAsB5wC,IA0BtBk+C,IAAkBpB,KAAAC;AAAyB,MAAA98C;AAAA,EAAAxN,UAAAorD,KAGF59C,KAAA/C,CAAAA,MAAa,CAACA,EAAOvB,QAASkiD,EAAAA,GAAcprD,QAAAorD,GAAAprD,QAAAwN,MAAAA,KAAAxN,EAAA,EAAA;AAAA,MAAAyN;AAAA,EAAAzN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACjFmM,KAAA,gBAAAlM,EAAAg/B,GAAA,UAAA,CAAA,CAAA,GAAmBvgC,QAAAyN,MAAAA,KAAAzN,EAAA,EAAA;AAAA,MAAA0N;AAAA,EAAA1N,UAAA0J,KAmBCgE,KAAA1B,CAAAA,MAAA;AACRtC,IAAAA,EAAS3F,EAAK+I,OAAOpK,KAAM,GAC3BkoD,EAAe,CAAC;AAAA,EAAC,GAClB5qD,QAAA0J,GAAA1J,QAAA0N,MAAAA,KAAA1N,EAAA,EAAA;AAAA,MAAA2N;AAAA,EAAA3N,EAAA,EAAA,MAAAm+C,MAAAn+C,EAAA,EAAA,MAAAqH,KAAArH,EAAA,EAAA,MAAAirD,KAAAjrD,UAAA0N,MAjBHC,KAAA,gBAAApM,EAACqL,IAAA,EACM/C,KAAAA,GACExC,OAAAA,GACM4jD,aAAAA,GACDA,cAAAA,GACC,cAAA,OACD,aAAA,KACA,aAAA,eACC,cAAA,KACX,GAAA,QACMlB,QAAAA,IACCA,SAAAA,IACDA,QAAAA,IACOA,eAAAA,IACL,UAAAr8C,IAICywC,WAAAA,IAAa,GACxBn+C,QAAAm+C,IAAAn+C,QAAAqH,GAAArH,QAAAirD,GAAAjrD,QAAA0N,IAAA1N,QAAA2N,MAAAA,KAAA3N,EAAA,EAAA;AAAA,MAAA4N;AAAA,EAAA5N,EAAA,EAAA,MAAA+qD,KAAA/qD,UAAA2N,MApBJC,KAAA,gBAAArM,EAACmL,IAAA,EAAyBq+C,cAAAA,GACxBp9C,UAAAA,IAoBF,GAAa3N,QAAA+qD,GAAA/qD,QAAA2N,IAAA3N,QAAA4N,MAAAA,KAAA5N,EAAA,EAAA;AAAA,MAAA6N;AAAA,EAAA7N,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACbuM,0CAAqB,SAAA,IACnB,UAAA,gBAAAtM,EAACi/B,IAAA,EAAiB,MAAA,MAAQ,IAAA,IAAA,IAC5B,GAAsBxgC,QAAA6N,MAAAA,KAAA7N,EAAA,EAAA;AAAA,MAAAgO;AAAA,EAAAhO,UAAA4N,MAzBxBI,KAAA,gBAAApM,EAAA2+B,GAAA,QAAA,EAAkB,IAAA,KAAO,IAAA,KAAsB,mBAAA,OAAwB,mBAAA,gBACrE3yB,UAAAA;AAAAA,IAAAA;AAAAA,IAsBAC;AAAAA,EAAAA,GAGF,GAAgB7N,QAAA4N,IAAA5N,QAAAgO,MAAAA,KAAAhO,EAAA,EAAA;AAAA,MAAAkO;AAAA,EAAAlO,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAMG4M,KAAA;AAAA,IAAA6K,OAAS;AAAA,MAAAwzB,gBAAkB;AAAA,IAAA;AAAA,EAAO,GAAGvsC,QAAAkO,MAAAA,KAAAlO,EAAA,EAAA;AAAA,MAAAmO;AAAA,EAAAnO,EAAA,EAAA,MAAAupD,KAAAvpD,UAAAypD,KAAAzpD,EAAA,EAAA,MAAA2oD,KALxDx6C,KAAA,gBAAA5M,EAAAg/B,GAAA,MAAA,EAAe,GAAA,KACb,UAAA,gBAAAh/B,EAACwM,IAAA,EACM,MAAA,SACoB,yBAAA,IACZu6B,aAAAA,GACE,eAAAp6B,IAEf,UAAA,gBAAA3M,EAACioD,IAAA,EACUb,SAAAA,GACIY,aAAAA,GACDE,YAAAA,GACHmB,SAAAA,GACEtiB,WAAAA,EAAAA,CAAS,EAAA,CAExB,GACF,GAActoC,QAAAupD,GAAAvpD,QAAAypD,GAAAzpD,QAAA2oD,GAAA3oD,QAAAmO,MAAAA,KAAAnO,EAAA,EAAA;AAAA,MAAAoO;AAAA,EAAApO,EAAA,EAAA,MAAAsqD,KAAAtqD,UAAAqqD,KAAArqD,EAAA,EAAA,MAAAyrD,KACbr9C,KAAAq9C,IACC,gBAAA7pD,EAAA2+B,GAAA,QAAA,EACiB,gBAAA,iBACZ,IAAA,MACA,IAAA,MACY,gBAAA,OACA,gBAAA,gBAEd8pB,UAAAA;AAAAA,IAAAA;AAAAA,IACAC;AAAAA,EAAAA,EAAAA,CACH,IAVD,MAWOtqD,QAAAsqD,GAAAtqD,QAAAqqD,GAAArqD,QAAAyrD,GAAAzrD,QAAAoO,MAAAA,KAAApO,EAAA,EAAA;AAAA,MAAAyO;AAAA,EAAAzO,EAAA,EAAA,MAAAgO,MAAAhO,UAAAmO,MAAAnO,EAAA,EAAA,MAAAoO,MAxDZK,uBAAA8xB,GAAA,YAAA,EAA8B,YAAA,cAAgB,IAAA,QAC5C,UAAA,gBAAA3+B,EAAA2+B,GAAA,SAAA,EAAqB,MAAA,SAAU,GAAA,KAAa,UAAA,UAC1CvyB,UAAAA;AAAAA,IAAAA;AAAAA,IA2BAG;AAAAA,IAgBCC;AAAAA,EAAAA,EAAAA,CAYH,EAAA,CACF,GAAoBpO,QAAAgO,IAAAhO,QAAAmO,IAAAnO,QAAAoO,IAAApO,QAAAyO,MAAAA,KAAAzO,EAAA,EAAA;AAAA,MAAA0O;AAAA,SAAA1O,EAAA,EAAA,MAAAkJ,KAAAlJ,UAAAwN,MAAAxN,EAAA,EAAA,MAAAyO,MA5DtBC,kCAAmBxF,MAAAA,GAAoB,cAAAsE,IACrCC,UAAAA;AAAAA,IAAAA;AAAAA,IACAgB;AAAAA,EAAAA,GA2DF,GAAczO,QAAAkJ,GAAAlJ,QAAAwN,IAAAxN,QAAAyO,IAAAzO,QAAA0O,MAAAA,KAAA1O,EAAA,EAAA,GA7Dd0O;AA6Dc;AA/LK,SAAAvD,GAAAw4C,GAAA;AAAA,SA8GWzc,KAAIC,IAAK/8B,IAAU,GAAG,CAAC;AAAC;AC7L1D,MAAMshD,KAAoBA,CAACC,MAClBA,EACJvyC,MAAM,GAAG,EACT/K,IAAKu9C,CAAAA,MAASA,EAAKloD,KAAAA,CAAM,EACzB8D,OAAOI,OAAO,GAGbikD,KAA0BA,CAACC,OACjBnmC,MAAMC,QAAQkmC,CAAO,IAAIA,EAAQz9C,IAAIq9C,EAAiB,IAAI,CAACA,GAAkBI,CAAO,CAAC,GAEtFz9C,IAAKs9C,CAAAA,MAASA,EAAKt9C,IAAK3G,CAAAA,OAAW;AAAA,EAAEA,OAAAA;AAAAA,EAAQ,CAAC,GAGhDqkD,KAAkBhsD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC7B;AAAA,IAAA6rD,SAAAA;AAAAA,EAAAA,IAAoB/rD;AAAM,MAAAM;AAAA,MAAAL,SAAA8rD,GAAA;AAC1B,UAAAE,IAAcH,GAAwBC,CAAO;AAIxCzrD,IAAAA,IAAA2rD,EAAK39C,IAAK,CAAAs9C,GAAAM,MACT,gBAAArqD,EAACC,IAAA,EACE8pD,UAAAA;AAAAA,MAAAA,EAAIt9C,IAAK,CAAA69C,GAAAC,MACR,gBAAAvqD,EAACC,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAN,EAAC6qD,IAAA,EAAa,UAAA,MAAkB,cAAA,KAAY,SAAA,eAAyB,YAAA,UAAqB,cAAAR,EAAIlkD,OAC3FkkD,YAAIlkD,OACP;AAAA,QACCykD,IAAYR,EAAIhoD,SAAU,IAA1B,QAAA;AAAA,MAAA,EAAA,GAJY,GAAGioD,EAAIlkD,KAAM,IAAIykD,CAAS,EAKzC,CACD;AAAA,MACAF,IAAYD,EAAKroD,SAAU,IAA3B,WAAA;AAAA,IAAA,EAAA,GATY,GAAGgoD,EAAIt9C,IAAKlD,EAAoB,EAACtD,KAAM,GAAG,CAAC,IAAIokD,CAAS,EAUvE,CACD,GAACjsD,OAAA8rD,GAAA9rD,OAAAK;AAAAA,EAAA;AAAAA,IAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,SAAAK,KAbJE,4BACGF,UAAAA,EAAAA,CAYC,GACDL,OAAAK,GAAAL,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GAdHO;AAcG;AAnBwB,SAAA4K,GAAAygD,GAAA;AAAA,SAOcA,EAAIlkD;AAAM;AChBhD,MAAM2kD,KAAmBtsD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC9B;AAAA,IAAAa,MAAAA;AAAAA,IAAAwK,aAAAA;AAAAA,EAAAA,IAA8BvL;AAAM,MAAAM;AAAA,EAAAL,SAAAc,KAIhCT,IAAA,gBAAAkB,EAACI,KAAe,WAAA,kBAAuB,OAAA,YAAW,2BAElD,GAAO3B,OAAAc,GAAAd,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,SAAAsL,KACN/K,IAAA+K,sBACE9G,IAAA,EAAiB8G,SAAAA,GAAa,WAAA,IAC7B,UAAA,gBAAA/J,EAACmD,IAAA,EAAS4nD,IAAAA,IAAoB,SAAA,QAAa,OAAA,YAAoB,SAAA,KAAY,QAAA,QAAmB,YAAA,MAChG,IAHD,MAIOtsD,OAAAsL,GAAAtL,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,SAAAT,EAAA,CAAA,MAAAK,KAAAL,SAAAO,KARVE,sBAACqB,IAAA,EAAW,KAAA,KAAe,YAAA,UAAc,MAAA,KACvCzB,UAAAA;AAAAA,IAAAA;AAAAA,IAGCE;AAAAA,EAAAA,GAKH,GAASP,OAAAK,GAAAL,OAAAO,GAAAP,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GATTS;AASS,GCdA8rD,KAA2BxsD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAusD,GAAAxqD,GAAA3B;AAAA,EAAAL,SAAAD,KACtC;AAAA,IAAAiC,UAAAA;AAAAA,IAAAyqD,oBAAApsD;AAAAA,IAAA,GAAAmsD;AAAAA,EAAAA,IAA8DzsD,GAAMC,OAAAD,GAAAC,OAAAwsD,GAAAxsD,OAAAgC,GAAAhC,OAAAK,MAAAmsD,IAAAxsD,EAAA,CAAA,GAAAgC,IAAAhC,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA;AAGZ,QAAAO,KAHtCF,MAAAG,SAAA,KAAAH,KAGsC,aAAAG;AAA2C,MAAAC;AAAA,SAAAT,EAAA,CAAA,MAAAwsD,KAAAxsD,SAAAgC,KAAAhC,EAAA,CAAA,MAAAO,KAAjGE,IAAA,gBAAAc,EAACb,GAAA,EAAS,MAAA,KAAc,WAAA,mBAA8B,YAAAH,GAA2C,GAAMisD,GACpGxqD,UAAAA,EAAAA,CACH,GAAMhC,OAAAwsD,GAAAxsD,OAAAgC,GAAAhC,OAAAO,GAAAP,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAFNS;AAEM,GCGGisD,KAAa3sD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACxB;AAAA,IAAA8K,IAAAA;AAAAA,IAAApI,cAAAA;AAAAA,IAAA7B,MAAAA;AAAAA,IAAAoC,UAAAA;AAAAA,IAAAoI,aAAAA;AAAAA,IAAAsE,UAAAA;AAAAA,IAAA+8C,WAAAtsD;AAAAA,IAAAusD,WAAArsD;AAAAA,EAAAA,IAA0GR,GAAzC4sD,IAAAtsD,MAAAG,SAAA,KAAAH,GAAmBusD,IAAArsD,MAAAC,SAAA,KAAAD,GACpF,CAAAmC,GAAAmqD,CAAA,IAA0BvpD,GAASX,CAAY,GAC/CmqD,IAAmBhjD,GAA6C,IAAI;AAAE,MAAArJ;AAAA,EAAAT,EAAA,CAAA,MAAA+K,KAAA/K,SAAAkD,KAC/CzC,IAAAssD,CAAAA,MAAA;AACrB,IAAID,EAAU1iD,WAAUI,aAAasiD,EAAU1iD,OAAQ,GACvD0iD,EAAU1iD,UAAWE,WAAW,MAAMpH,EAAS6H,GAAIgiD,CAAS,GAAG,GAAG;AAAA,EAAhD,GACnB/sD,OAAA+K,GAAA/K,OAAAkD,GAAAlD,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAHD,QAAAgtD,IAAuBvsD;AAGrB,MAAAG,GAAAG;AAAA,EAAAf,SAAA2C,KAEQ/B,IAAAA,MAAA;AACRisD,IAAAA,EAASlqD,CAAY;AAAA,EAAC,GACrB5B,IAAA,CAAC4B,CAAY,GAAC3C,OAAA2C,GAAA3C,OAAAY,GAAAZ,OAAAe,MAAAH,IAAAZ,EAAA,CAAA,GAAAe,IAAAf,EAAA,CAAA,IAFjBmK,GAAUvJ,GAEPG,CAAc;AAAC,MAAAE;AAAA,EAAAjB,SAAAgtD,KAEG/rD,IAAAgsD,CAAAA,MAAA;AACnBJ,IAAAA,EAASI,CAAQ,GACjBD,EAAeC,CAAQ;AAAA,EAAC,GACzBjtD,OAAAgtD,GAAAhtD,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAHD,QAAA4D,IAAqB3C;AAKrB,MAAI2O,GAAQ;AAAA,QAAA1O;AAAA,IAAAlB,SAAA0C,KAERxB,sBAACqrD,IAAA,EACC,UAAA,gBAAA3qD,EAAC6E,MAAgB,YAAA,UAAa,KAAA,MAC5B,UAAA;AAAA,MAAA,gBAAAlF,EAACb,GAAA,EAAY,SAAA,WAAuB,cAAA,MAAiB,aAAA,OAAkB,aAAA,gBAAmBgC,IAAAA,EAAAA,CAAK;AAAA,MAC/F,gBAAAnB,EAACb,GAAA,EAAO,IAAA,QAAQgC,UAAAA,EAAAA,CAAM;AAAA,IAAA,EAAA,CACxB,EAAA,CACF,GAA2B1C,OAAA0C,GAAA1C,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAN7B,UAAAktD,IACEhsD;AAQF,QAAI0rD,GAAS;AAAA,UAAAzrD;AAAA,MAAAnB,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAGNK,IAAA,CAACwrD,KACA,gBAAAprD,EAACb,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW,EAAA,CACxD,GACDtL,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,UAAAkF;AAAA,aAAAlF,EAAA,EAAA,MAAAmB,KAAAnB,UAAAktD,KALHhoD,sBAACxE,GAAA,EACES,UAAAA;AAAAA,QAAAA;AAAAA,QAKA+rD;AAAAA,MAAAA,GACH,GAAMltD,QAAAmB,GAAAnB,QAAAktD,GAAAltD,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA,GAPNkF;AAAAA,IAOM;AAET,QAAA/D;AAAA,IAAAnB,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAKMK,IAAA,CAACwrD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,GAAW,GAAItL,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,QAAAkF;AAAA,WAAAlF,EAAA,EAAA,MAAAmB,KAAAnB,UAAAktD,KAF7EhoD,IAAA,gBAAA3D,EAACb,GAAA,EACC,UAAA,gBAAAkB,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3EtF,UAAAA;AAAAA,MAAAA;AAAAA,MACA+rD;AAAAA,IAAAA,EAAAA,CACH,EAAA,CACF,GAAMltD,QAAAmB,GAAAnB,QAAAktD,GAAAltD,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA,GALNkF;AAAAA,EAKM;AAET,MAAAhE;AAAA,EAAAlB,UAAA0C,KAGQxB,IAAAisD,GAAWzqD,CAAK,GAAC1C,QAAA0C,GAAA1C,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,EAAAnB,UAAA4D,KACTzC,IAAAsJ,OAA4C7G,EAAa6G,EAAO/H,MAAMi4C,SAAU,KAAK,CAAC,GAAC36C,QAAA4D,GAAA5D,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,EAAA,MAAA4P,KAAA5P,UAAAkB,KAAAlB,EAAA,EAAA,MAAAmB,KAFtF+D,IAAA;AAAA,IAAAxC,OACTxB;AAAAA,IAAiBksD,eACTjsD;AAAAA,IAAuFqK,UAC5FoE;AAAAA,EAAAA,GACX5P,QAAA4P,GAAA5P,QAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAJD,QAAAiC,IAAkBiD,GAOiCyF,IAAAiiD,IAAA,SAAA;AAA8B,MAAAxhD;AAAA,EAAApL,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAC7E8J,IAAA,gBAAA7J,EAAA8rD,GAAA,aAAA,CAAA,CAAA,GAA2BrtD,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,UAAAc,KAC3B+K,sBAAAwhD,GAAA,OAAA,EAAmB,QAAA,IAAQvsD,UAAAA,GAAK,GAAoBd,QAAAc,GAAAd,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,EAAAhN,UAAA4P,KAElD5C,IAAA,gBAAAzL,EAAA8rD,GAAA,OAAA,EAA6Bz9C,UAAAA,EAAAA,CAAQ,GAAI5P,QAAA4P,GAAA5P,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA;AAAA,MAAAkN;AAAA,EAAAlN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACzC4L,IAAA,gBAAA3L,EAAA8rD,GAAA,SAAA,CAAA,CAAA,GAAuBrtD,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA;AAAA,MAAAmN;AAAA,EAAAnN,UAAAgN,KAFzBG,oCACEH,UAAAA;AAAAA,IAAAA;AAAAA,IACAE;AAAAA,EAAAA,GACF,GAAsBlN,QAAAgN,GAAAhN,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA;AAAA,MAAAsN,GAAAC;AAAA,EAAAvN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAGlBgM,IAAA,gBAAA/L,EAAA8rD,GAAA,MAAA,CAAA,CAAA,GACA9/C,IAAA,gBAAAhM,EAAA8rD,GAAA,SAAA,CAAA,CAAA,GAAuBrtD,QAAAsN,GAAAtN,QAAAuN,MAAAD,IAAAtN,EAAA,EAAA,GAAAuN,IAAAvN,EAAA,EAAA;AAAA,MAAAwN;AAAA,EAAAxN,UAAA0C,KAGnB8K,IAAA,gBAAAjM,EAAA8rD,GAAA,QAAA,EAA2B3qD,OAAAA,EAAAA,CAAK,GAAI1C,QAAA0C,GAAA1C,QAAAwN,KAAAA,IAAAxN,EAAA,EAAA;AAAA,MAAAyN;AAAA,EAAAzN,EAAA,EAAA,MAAAwN,KAAAxN,UAAA0C,KAN5C+K,sBAAA4/C,GAAA,YAAA,EACE,UAAA,gBAAAzrD,gBACE0L,UAAAA;AAAAA,IAAAA;AAAAA,IACAC;AAAAA,IACA,gBAAAhM,EAAA8rD,GAAA,aAAA,EACE,UAAA,gBAAA9rD,EAAA8rD,GAAA,eAAA,EAAkC3qD,OAAAA,GAChC8K,UAAAA,EAAAA,CACF,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF,GAAyBxN,QAAAwN,GAAAxN,QAAA0C,GAAA1C,QAAAyN,KAAAA,IAAAzN,EAAA,EAAA;AAAA,MAAA0N;AAAA,EAAA1N,EAAA,EAAA,MAAAiC,KAAAjC,EAAA,EAAA,MAAA6L,KAAA7L,EAAA,EAAA,MAAAmN,KAAAnN,EAAA,EAAA,MAAAyN,KAAAzN,UAAA2K,KAjB3B+C,IAAA,gBAAA9L,EAAAyrD,GAAA,MAAA,EAAA,GAAsBprD,GAAgB,MAAA,MAAW,MAAA0I,GAC/CS,UAAAA;AAAAA,IAAAA;AAAAA,IACAS;AAAAA,IACAsB;AAAAA,IAIAM;AAAAA,EAAAA,GAWF,GAAmBzN,QAAAiC,GAAAjC,QAAA6L,GAAA7L,QAAAmN,GAAAnN,QAAAyN,GAAAzN,QAAA2K,GAAA3K,QAAA0N,KAAAA,IAAA1N,EAAA,EAAA;AAnBrB,QAAAstD,IACE5/C;AAmBA,MAAAC;AAAA,SAAA3N,EAAA,EAAA,MAAAsL,KAAAtL,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAAAd,UAAAstD,KAGA3/C,sBAACjN,GAAA,EACEksD,UAAAA,IACC,gBAAAhrD,EAAClB,GAAA,EACE,UAAA;AAAA,IAAA,CAACisD,uBACCjsD,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,IAC7C;AAAA,IAEDgiD;AAAAA,EAAAA,EAAAA,CACH,IAEA,gBAAA1rD,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3E,UAAA;AAAA,IAAA,CAACkmD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA;IACzDgiD;AAAAA,EAAAA,EAAAA,CACH,EAAA,CAEJ,GAAMttD,QAAAsL,GAAAtL,QAAA4sD,GAAA5sD,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAAstD,GAAAttD,QAAA2N,KAAAA,IAAA3N,EAAA,EAAA,GAhBN2N;AAgBM,GC9FG4/C,KAAYxtD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACvB;AAAA,IAAA8K,IAAAA;AAAAA,IAAApI,cAAAA;AAAAA,IAAA7B,MAAAA;AAAAA,IAAAstC,KAAAA;AAAAA,IAAAjH,KAAAA;AAAAA,IAAAjkC,UAAAA;AAAAA,IAAAoI,aAAAA;AAAAA,IAAAsE,UAAAA;AAAAA,IAAA+8C,WAAAtsD;AAAAA,IAAAusD,WAAArsD;AAAAA,EAAAA,IAWIR,GAFF4sD,IAAAtsD,MAAAG,SAAA,KAAAH,GACAusD,IAAArsD,MAAAC,SAAA,KAAAD,GAEF,CAAAmC,GAAAmqD,CAAA,IAA0BvpD,GAASX,CAAY,GAC/CmqD,IAAmBhjD,GAA6C,IAAI;AAAE,MAAArJ;AAAA,EAAAT,EAAA,CAAA,MAAA+K,KAAA/K,SAAAkD,KAC/CzC,IAAAoD,CAAAA,MAAA;AACrB,IAAIipD,EAAU1iD,WAAUI,aAAasiD,EAAU1iD,OAAQ,GACvD0iD,EAAU1iD,UAAWE,WAAW,MAAMpH,EAAS6H,GAAIlH,CAAS,GAAG,GAAG;AAAA,EAAhD,GACnB7D,OAAA+K,GAAA/K,OAAAkD,GAAAlD,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAHD,QAAAgtD,IAAuBvsD;AAGrB,MAAAG,GAAAG;AAAA,EAAAf,SAAA2C,KAEQ/B,IAAAA,MAAA;AACRisD,IAAAA,EAASlqD,CAAY;AAAA,EAAC,GACrB5B,IAAA,CAAC4B,CAAY,GAAC3C,OAAA2C,GAAA3C,OAAAY,GAAAZ,OAAAe,MAAAH,IAAAZ,EAAA,CAAA,GAAAe,IAAAf,EAAA,CAAA,IAFjBmK,GAAUvJ,GAEPG,CAAc;AAAC,MAAAE;AAAA,EAAAjB,SAAAgtD,KAEG/rD,IAAAusD,CAAAA,MAAA;AACnBX,IAAAA,EAASW,CAAQ,GACjBR,EAAeQ,CAAQ;AAAA,EAAC,GACzBxtD,OAAAgtD,GAAAhtD,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAHD,QAAA4D,IAAqB3C;AAKrB,MAAI2O,GAAQ;AAAA,QAAA1O;AAAA,IAAAlB,SAAA0C,KACWxB,sBAACqrD,IAAA,eAAgC,GAA2BvsD,OAAA0C,GAAA1C,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAjF,UAAAktD,IAAqBhsD;AAErB,QAAI0rD,GAAS;AAAA,UAAAzrD;AAAA,MAAAnB,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAGNK,IAAA,CAACwrD,KACA,gBAAAprD,EAACb,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW,EAAA,CACxD,GACDtL,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,UAAAkF;AAAA,aAAAlF,EAAA,EAAA,MAAAmB,KAAAnB,UAAAktD,KALHhoD,sBAACxE,GAAA,EACES,UAAAA;AAAAA,QAAAA;AAAAA,QAKA+rD;AAAAA,MAAAA,GACH,GAAMltD,QAAAmB,GAAAnB,QAAAktD,GAAAltD,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA,GAPNkF;AAAAA,IAOM;AAET,QAAA/D;AAAA,IAAAnB,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAKMK,IAAA,CAACwrD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,GAAW,GAAItL,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,QAAAkF;AAAA,WAAAlF,EAAA,EAAA,MAAAmB,KAAAnB,UAAAktD,KAF7EhoD,IAAA,gBAAA3D,EAACb,GAAA,EACC,UAAA,gBAAAkB,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3EtF,UAAAA;AAAAA,MAAAA;AAAAA,MACA+rD;AAAAA,IAAAA,EAAAA,CACH,EAAA,CACF,GAAMltD,QAAAmB,GAAAnB,QAAAktD,GAAAltD,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA,GALNkF;AAAAA,EAKM;AAET,MAAAhE;AAAA,SAAAlB,EAAA,EAAA,MAAAsL,KAAAtL,EAAA,EAAA,MAAA4sD,KAAA5sD,UAAA4D,KAAA5D,EAAA,EAAA,MAAA2sD,KAAA3sD,EAAA,EAAA,MAAAmnC,KAAAnnC,EAAA,EAAA,MAAAouC,KAAApuC,EAAA,EAAA,MAAAc,KAAAd,EAAA,EAAA,MAAA4P,KAAA5P,UAAA0C,KAGCxB,IAAA,gBAAAK,EAACb,GAAA,EACEksD,UAAAA,IACC,gBAAAhrD,EAAClB,GAAA,EACE,UAAA;AAAA,IAAA,CAACisD,uBACCjsD,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW,EAAA,CACxD;AAAA,IAEF,gBAAA/J,EAACqL,IAAA,EACW,WAAA,UACAgD,UAAAA,GACJ,OAAA,QACD,MAAA,MACA,MAAA,QACQ,aAAA+8C,IAAA7rD,IAAAN,QACNkC,OAAAA,GACF0rC,KAAAA,GACAjH,KAAAA,GACK,UAAAuf,CAAAA,MAAO9iD,EAAa8iD,EAAC55C,OAAOpK,KAAM,GACnC,SAAAyI,GAAAA,CAIR;AAAA,EAAA,EAAA,CAEL,IAEA,gBAAAvJ,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3E,UAAA;AAAA,IAAA,CAACkmD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW;AAAA,IACrE,gBAAA/J,EAACqL,IAAA,EACW,WAAA,UACAgD,UAAAA,GACJ,OAAA,WACD,MAAA,MACA,MAAA,QACQ,aAAA+8C,IAAA7rD,IAAAN,QACNkC,OAAAA,GACF0rC,KAAAA,GACAjH,KAAAA,GACK,UAAAsmB,CAAAA,MAAO7pD,EAAa8iD,EAAC55C,OAAOpK,KAAM,GACnC,SAAAqJ,GAAAA,CAIR;AAAA,EAAA,EAAA,CAEL,EAAA,CAEJ,GAAM/L,QAAAsL,GAAAtL,QAAA4sD,GAAA5sD,QAAA4D,GAAA5D,QAAA2sD,GAAA3sD,QAAAmnC,GAAAnnC,QAAAouC,GAAApuC,QAAAc,GAAAd,QAAA4P,GAAA5P,QAAA0C,GAAA1C,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA,GAhDNkB;AAgDM;AAxGe,SAAAiK,GAAAuiD,GAAA;AA4EX,EAAIhH,EAACpxC,QAAS,WACZoxC,EAACpiD,cAAcqpD,KAAAA;AAChB;AA9EU,SAAA5hD,GAAA6hD,GAAA;AAiGX,EAAIlH,EAACpxC,QAAS,WACZoxC,EAACpiD,cAAcqpD,KAAAA;AAChB;ACjHR,MAAME,KAAkB7mD,GAAMC,WAA6C,SAAAlH,GAAAmH,GAAA;AAAA,QAAAlH,IAAAC,EAAA,CAAA;AAAA,MAAA+B,GAAAoE;AAAA,EAAApG,SAAAD,KAChF;AAAA,IAAAiC,UAAAA;AAAAA,IAAA,GAAAoE;AAAAA,EAAAA,IAA8BrG,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAoG,MAAApE,IAAAhC,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAIhCjB,IAAA,gBAAAuB,EAAAksD,GAAA,SAAA,EACE,UAAA;AAAA,IAAA,gBAAAvsD,EAAAusD,GAAA,kBAAA,EAAA;AAAA,IACA,gBAAAvsD,EAAAusD,GAAA,kBAAA,CAAA,CAAA;AAAA,EAAA,GACF,GAA4B9tD,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,EAAA,CAAA,MAAAgC,KAAAhC,SAAAkH,KAAAlH,EAAA,CAAA,MAAAoG,KAL9B7F,iCAA6B2G,KAAAA,GAAa,SAAA,WAAS,GAAKd,GACrDpE,UAAAA;AAAAA,IAAAA;AAAAA,IACD3B;AAAAA,EAAAA,GAIF,GAAyBL,OAAAgC,GAAAhC,OAAAkH,GAAAlH,OAAAoG,GAAApG,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GANzBO;AAMyB,CAE5B,GAEYwtD,KAAmBD,GAAkBlhD;AACfkhD,GAAkBE;AACrBF,GAAkB5tC;ACf3C,MAAM+tC,KAASjnD,GAAMC,WAAwC,SAAAlH,GAAAmH,GAAA;AAAA,QAAAlH,IAAAC,EAAA,CAAA;AAAA,MAAA+B,GAAAoE;AAAA,EAAApG,SAAAD,KAClE;AAAA,IAAAiC,UAAAA;AAAAA,IAAA,GAAAoE;AAAAA,EAAAA,IAA8BrG,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAAoG,MAAApE,IAAAhC,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAIhCjB,IAAA,gBAAAuB,EAAAssD,GAAA,SAAA,EACE,UAAA;AAAA,IAAA,gBAAA3sD,cAAiC,cAAA,KAC/B,UAAA,gBAAAA,EAAA2sD,GAAA,OAAA,CAAA,CAAA,EAAA,CACF;AAAA,IACA,gBAAA3sD,EAAA2sD,GAAA,QAAA,CAAA,CAAA;AAAA,EAAA,GACF,GAAuBluD,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,SAAAP,EAAA,CAAA,MAAAgC,KAAAhC,SAAAkH,KAAAlH,EAAA,CAAA,MAAAoG,KANzB7F,iCAAwB2G,KAAAA,GAAa,SAAA,SAAO,GAAKd,GAC/C/F,UAAAA;AAAAA,IAAAA;AAAAA,IAMC2B;AAAAA,EAAAA,GACH,GAAoBhC,OAAAgC,GAAAhC,OAAAkH,GAAAlH,OAAAoG,GAAApG,OAAAO,KAAAA,IAAAP,EAAA,CAAA,GARpBO;AAQoB,CAEvB,GCIY4tD,KAAcpuD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACzB;AAAA,IAAA8K,IAAAA;AAAAA,IAAApI,cAAAA;AAAAA,IAAA7B,MAAAA;AAAAA,IAAA6qD,MAAAtrD;AAAAA,IAAA+tC,KAAAA;AAAAA,IAAAjH,KAAAA;AAAAA,IAAAjkC,UAAAA;AAAAA,IAAAoI,aAAAA;AAAAA,IAAAsE,UAAAA;AAAAA,IAAA+8C,WAAApsD;AAAAA,IAAA6tD,YAAA3tD;AAAAA,IAAAmsD,WAAAhsD;AAAAA,EAAAA,IAaIb,GATF4rD,IAAAtrD,MAAAG,SAAA,IAAAH,GAMAssD,IAAApsD,MAAAC,SAAA,KAAAD,GACA6tD,IAAA3tD,MAAAD,SAAA,KAAAC,GACAmsD,IAAAhsD,MAAAJ,SAAA,KAAAI,GAEF,CAAA8B,GAAAmqD,CAAA,IAA0BvpD,GAASX,CAAY,GAE/C0rD,IADgBjgB,MAAQ5tC,UAAa2mC,MAAQ3mC,UAC1B,CAAY4tD,GAC/BE,IAA2B1B,KAAA,CAAcyB,GACzCvB,IAAmBhjD,GAA6C,IAAI;AAAE,MAAA/I;AAAA,EAAAf,EAAA,CAAA,MAAA+K,KAAA/K,SAAAkD,KAE/CnC,IAAA8C,CAAAA,MAAA;AACrB,IAAIipD,EAAU1iD,WAAUI,aAAasiD,EAAU1iD,OAAQ,GACvD0iD,EAAU1iD,UAAWE,WAAW,MAAMpH,EAAS6H,GAAIlH,CAAS,GAAG,GAAG;AAAA,EAAhD,GACnB7D,OAAA+K,GAAA/K,OAAAkD,GAAAlD,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAHD,QAAAgtD,IAAuBjsD;AAGrB,MAAAE,GAAAC;AAMF,MANElB,SAAA2C,KAEQ1B,IAAAA,MAAA;AACR4rD,IAAAA,EAASlqD,CAAY;AAAA,EAAC,GACrBzB,IAAA,CAACyB,CAAY,GAAC3C,OAAA2C,GAAA3C,OAAAiB,GAAAjB,OAAAkB,MAAAD,IAAAjB,EAAA,CAAA,GAAAkB,IAAAlB,EAAA,CAAA,IAFjBmK,GAAUlJ,GAEPC,CAAc,GAEb0O,GAAQ;AAAA,QAAAzO;AAAA,IAAAnB,SAAA0C,KACWvB,sBAACorD,IAAA,eAAgC,GAA2BvsD,OAAA0C,GAAA1C,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAjF,UAAAktD,IAAqB/rD;AAErB,QAAIyrD,GAAS;AAAA,UAAA1nD;AAAA,MAAAlF,EAAA,CAAA,MAAAsL,KAAAtL,SAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAGNoE,IAAA,CAACynD,KACA,gBAAAprD,EAACb,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW,EAAA,CACxD,GACDtL,OAAAsL,GAAAtL,OAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,UAAA2K;AAAA,aAAA3K,EAAA,EAAA,MAAAkF,KAAAlF,UAAAktD,KALHviD,sBAACjK,GAAA,EACEwE,UAAAA;AAAAA,QAAAA;AAAAA,QAKAgoD;AAAAA,MAAAA,GACH,GAAMltD,QAAAkF,GAAAlF,QAAAktD,GAAAltD,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA,GAPN2K;AAAAA,IAOM;AAET,QAAAzF;AAAA,IAAAlF,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAKMoE,IAAA,CAACynD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,GAAW,GAAItL,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,QAAA2K;AAAA,WAAA3K,EAAA,EAAA,MAAAkF,KAAAlF,UAAAktD,KAF7EviD,IAAA,gBAAApJ,EAACb,GAAA,EACC,UAAA,gBAAAkB,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3EvB,UAAAA;AAAAA,MAAAA;AAAAA,MACAgoD;AAAAA,IAAAA,EAAAA,CACH,EAAA,CACF,GAAMltD,QAAAkF,GAAAlF,QAAAktD,GAAAltD,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA,GALN2K;AAAAA,EAKM;AAET,MAAAxJ;AAAA,EAAAnB,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAmnC,KAAAnnC,UAAAouC,KAAApuC,EAAA,EAAA,MAAAc,KAAAd,UAAA4P,KAAA5P,EAAA,EAAA,MAAAgtD,KAAAhtD,EAAA,EAAA,MAAA2rD,KAAA3rD,EAAA,EAAA,MAAAsuD,KAAAtuD,UAAA0C,KAIIvB,IAAAmtD,sBACE5tD,GAAA,EACE,UAAA;AAAA,IAAA,CAACisD,uBACCjsD,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW,EAAA,CACxD;AAAA,sBAEDuiD,IAAA,EACWj+C,UAAAA,GACJ,OAAA,QACD,MAAA,MACE,OAAA,GAAGlN,CAAK,IACTipD,MAAAA,GACDvd,KAAAA,GACAjH,KAAAA,GACU,eAAA18B,CAAAA,MAAA;AACb,YAAA0gB,IAAavD,OAAMC,MAAOpd,EAAO8jD,aAAmD,IAAhCngB,KAAA,IAAY3jC,EAAO8jD;AACvE1B,MAAAA,EAAS1hC,CAAI,GACb6hC,EAAe7hC,CAAI;AAAA,IAAC,GAGtB,UAAA,gBAAA5pB,EAACwsD,IAAA,EACW,WAAA,UACR,GAAA,QACQn+C,UAAAA,GACG,aAAA+8C,IAAA7rD,IAAAN,QACJ,SAAA2K,IAIR,EAAA,CAEL;AAAA,EAAA,EAAA,CACF,IAEA,gBAAAvJ,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3E,UAAA;AAAA,IAAA,CAACkmD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW;AAAA,sBACpEuiD,IAAA,EACWj+C,UAAAA,GACJ,OAAA,QACD,MAAA,MACE,OAAA,GAAGlN,CAAK,IACTipD,MAAAA,GACDvd,KAAAA,GACAjH,KAAAA,GACU,eAAAv8B,CAAAA,MAAA;AACb,YAAA4jD,IAAa5mC,OAAMC,MAAOpd,EAAO8jD,aAAmD,IAAhCngB,KAAA,IAAY3jC,EAAO8jD;AACvE1B,MAAAA,EAAS1hC,CAAI,GACb6hC,EAAe7hC,CAAI;AAAA,IAAC,GAGtB,UAAA,gBAAA5pB,EAACwsD,IAAA,EACW,WAAA,UACR,GAAA,QACQn+C,UAAAA,GACG,aAAA+8C,IAAA7rD,IAAAN,QACJ,SAAAuL,IAIR,EAAA,CAEL;AAAA,EAAA,GACF,GACD/L,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAmnC,GAAAnnC,QAAAouC,GAAApuC,QAAAc,GAAAd,QAAA4P,GAAA5P,QAAAgtD,GAAAhtD,QAAA2rD,GAAA3rD,QAAAsuD,GAAAtuD,QAAA0C,GAAA1C,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,EAAA,MAAA+K,KAAA/K,EAAA,EAAA,MAAAmnC,KAAAnnC,EAAA,EAAA,MAAAouC,KAAApuC,EAAA,EAAA,MAAAkD,KAAAlD,EAAA,EAAA,MAAA4P,KAAA5P,EAAA,EAAA,MAAAquD,KAAAruD,EAAA,EAAA,MAAA2rD,KAAA3rD,UAAA0C,KACAwC,IAAAmpD,KACC,gBAAA9sD,EAAC0sD,IAAA,EACM,MAAA,MACKr+C,UAAAA,GACH,OAAA,CAAClN,CAAK,GACPipD,MAAAA,GACDvd,KAAAA,GACAjH,KAAAA,GACU,eAAAsnB,CAAAA,MAAA;AACb5B,IAAAA,EAASpiD,EAAO/H,QAAS;AAAA,EAAC,GAEV,kBAAAgsD,CAAAA,MAAA;AAChBxrD,IAAAA,EAAS6H,GAAIN,EAAO/H,QAAS;AAAA,EAAC,GAC/B,GAEJ1C,QAAA+K,GAAA/K,QAAAmnC,GAAAnnC,QAAAouC,GAAApuC,QAAAkD,GAAAlD,QAAA4P,GAAA5P,QAAAquD,GAAAruD,QAAA2rD,GAAA3rD,QAAA0C,GAAA1C,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,SAAA3K,EAAA,EAAA,MAAAmB,KAAAnB,UAAAkF,KAjFHyF,sBAACjK,GAAA,EACES,UAAAA;AAAAA,IAAAA;AAAAA,IAiEA+D;AAAAA,EAAAA,GAgBH,GAAMlF,QAAAmB,GAAAnB,QAAAkF,GAAAlF,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA,GAlFN2K;AAkFM;AA3IiB,SAAAQ,GAAAu7C,GAAA;AAqFX,EAAIA,EAACpxC,QAAS,WACZoxC,EAACpiD,cAAcqpD,KAAAA;AAChB;AAvFU,SAAA5hD,GAAA2hD,GAAA;AAmHX,EAAIhH,EAACpxC,QAAS,WACZoxC,EAACpiD,cAAcqpD,KAAAA;AAChB;AChHV,MAAMgB,KAAiB5uD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC5B;AAAA,IAAA8K,IAAAA;AAAAA,IAAApI,cAAAA;AAAAA,IAAA7B,MAAAA;AAAAA,IAAA0d,SAAAA;AAAAA,IAAAtb,UAAAA;AAAAA,IAAAoI,aAAAA;AAAAA,IAAAsE,UAAAA;AAAAA,IAAA+8C,WAAAtsD;AAAAA,IAAAuuD,aAAAruD;AAAAA,IAAAqC,aAAAA;AAAAA,IAAAgqD,WAAAnsD;AAAAA,EAAAA,IAYIV,GAJF4sD,IAAAtsD,MAAAG,SAAA,KAAAH,GACAuuD,IAAAruD,MAAAC,SAAA,KAAAD,GAEAqsD,IAAAnsD,MAAAD,SAAA,KAAAC,GAEF,CAAAiC,GAAAmqD,CAAA,IAA0BvpD,GAASX,CAAY,GAC/CmqD,IAAmBhjD,GAA6C,IAAI,GACpEkjD,IAAuBnpD,CAAAA,MAAA;AACrB,IAAIipD,EAAU1iD,WAAUI,aAAasiD,EAAU1iD,OAAQ,GACvD0iD,EAAU1iD,UAAWE,WAAW,MAAMpH,EAAS6H,GAAIlH,CAAS,GAAG,GAAG;AAAA,EAAhD;AAClB,MAAAjD,GAAAG;AAAA,EAAAf,SAAA2C,KAEQ/B,IAAAA,MAAA;AACRisD,IAAAA,EAASlqD,CAAY;AAAA,EAAC,GACrB5B,IAAA,CAAC4B,CAAY,GAAC3C,OAAA2C,GAAA3C,OAAAY,GAAAZ,OAAAe,MAAAH,IAAAZ,EAAA,CAAA,GAAAe,IAAAf,EAAA,CAAA,IAFjBmK,GAAUvJ,GAEPG,CAAc;AAAC,MAAAE;AAAA,EAAAjB,EAAA,CAAA,MAAA4uD,KAAA5uD,SAAA0C,KAECzB,IAAA4tD,CAAAA,MACbD,IACKjpC,MAAKC,QAASljB,CAAiC,KAAvBA,EAAKoF,SAAU+mD,CAAQ,IAEjDnsD,MAAUmsD,GAClB7uD,OAAA4uD,GAAA5uD,OAAA0C,GAAA1C,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AALD,QAAAwO,IAAmBvN;AAKjB,MAAAC;AAAA,EAAAlB,EAAA,CAAA,MAAA4uD,KAAA5uD,EAAA,CAAA,MAAAwe,KAAAxe,EAAA,CAAA,MAAA4C,KAAA5C,SAAA0C,KAEqBxB,IAAAA,MAAA;AACrB,QAAI0tD,GAAW;AACb,YAAAn2B,IAAuB9S,MAAKC,QAASljB,CAAkB,IAAhCA,IAAA,CAAA;AACvB,UAAI+1B,EAAc90B,WAAY;AAAC,eACtBf,KAAA;AAGT,YAAAksD,IAAwBr2B,EAAcpqB,IAC/B0gD,CAAAA,MAAQvwC,EAAO3T,KAAMmkD,CAAAA,MAAOA,EAACjkD,OAAQA,CAAE,CAAC,EAACvD,OACtCI,OAAO,EAACyG,IACXlD,EAAkB;AAEzB,UAAI2jD,EAAenrD,UAAW;AAAC,eACtBmrD,EAAejnD,KAAM,IAAI;AAElC,YAAAonD,IAAqBH,EAAe9nC,MAAO,GAAG,CAAC,EAACnf,KAAM,IAAI,GAC1DqnD,IAAkBJ,EAAenrD,SAAU;AAAE,aACtC,GAAGsrD,CAAY,KAAKC,CAAS;AAAA,IAAE;AAEmB,WAApC1wC,EAAO3T,KAAMskD,CAAAA,MAAOH,EAACjkD,OAAQrI,CAAK,GACpC5B,QAAd;AAAA,EAAgC,GACxCd,OAAA4uD,GAAA5uD,OAAAwe,GAAAxe,OAAA4C,GAAA5C,OAAA0C,GAAA1C,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AArBD,QAAAovD,IAAuBluD,GAuBvBmuD,IAAqB7B,CAAAA,MAAA;AACnB,QAAIoB,GAAW;AACb,YAAAl0B,IAAsB/U,MAAKC,QAASljB,CAAkB,IAAhCA,IAAA,CAAA;AAClB4sD,UAAAA;AAEJ,MAAI50B,EAAa5yB,SAAU0lD,CAAQ,IACjC8B,IAAgB50B,EAAalzB,OAAQsoB,CAAAA,MAAOA,MAAM09B,CAAQ,IAE1D8B,IAAgBA,IAAI50B,GAAe8yB,CAAQ,GAG7CX,EAASyC,CAAa,GACtBtC,EAAesC,CAAa;AAAA,IAAC;AAE7BzC,MAAAA,EAASW,CAAQ,GACjBR,EAAeQ,CAAQ;AAAA,EACxB;AAGH,MAAI59C,GAAQ;AAAA,QAAAzO;AAAA,IAAAnB,UAAAovD,KACsCjuD,IAAAiuD,EAAAA,GAAgBpvD,QAAAovD,GAAApvD,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,QAAAkF;AAAA,IAAAlF,UAAAmB,KAA3C+D,IAAA,gBAAA3D,EAACgrD,IAAA,EAA0BprD,UAAAA,EAAAA,CAAiB,GAA2BnB,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAA5F,UAAAktD,IAAqBhoD;AAErB,QAAI0nD,GAAS;AAAA,UAAAjiD;AAAA,MAAA3K,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAGN6J,IAAA,CAACgiD,KACA,gBAAAprD,EAACb,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW,EAAA,CACxD,GACDtL,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,UAAAoL;AAAA,aAAApL,EAAA,EAAA,MAAA2K,KAAA3K,UAAAktD,KALH9hD,sBAAC1K,GAAA,EACEiK,UAAAA;AAAAA,QAAAA;AAAAA,QAKAuiD;AAAAA,MAAAA,GACH,GAAMltD,QAAA2K,GAAA3K,QAAAktD,GAAAltD,QAAAoL,KAAAA,IAAApL,EAAA,EAAA,GAPNoL;AAAAA,IAOM;AAET,QAAAT;AAAA,IAAA3K,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAKM6J,IAAA,CAACgiD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,GAAW,GAAItL,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,QAAAoL;AAAA,WAAApL,EAAA,EAAA,MAAA2K,KAAA3K,UAAAktD,KAF7E9hD,IAAA,gBAAA7J,EAACb,GAAA,EACC,UAAA,gBAAAkB,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3EkE,UAAAA;AAAAA,MAAAA;AAAAA,MACAuiD;AAAAA,IAAAA,EAAAA,CACH,EAAA,CACF,GAAMltD,QAAA2K,GAAA3K,QAAAktD,GAAAltD,QAAAoL,KAAAA,IAAApL,EAAA,EAAA,GALNoL;AAAAA,EAKM;AAKP,QAAAgC,IAAA1M,GACES,IAAAyrD,IACC,gBAAAhrD,EAAClB,GAAA,EACE,UAAA;AAAA,IAAA,CAACisD,uBACCjsD,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW,EAAA,CACxD;AAAA,sBAEF2B,EAAA,MAAA,EAA0B,eAAA,CAAC2hD,GACzB,UAAA;AAAA,MAAA,gBAAArtD,EAAA0L,EAAA,SAAA,EAAc,SAAA,IACZ,UAAA,gBAAA1L,EAAC20B,IAAA,EACM,MAAA,MACO,aAAA,OACA,aAAA,SACA,aAAA,UACFtmB,UAAAA,GACJ,OAAA,QAEN,UAAA,gBAAAhO,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAAoB,KAAA,MAAO,GAAA,QAClE,UAAA;AAAA,QAAA,gBAAAlF,EAACkF,MAAgB,YAAA,UAAa,KAAA,MAC3B2oD,eACH;AAAA,QACA,gBAAA7tD,EAAC+K,IAAA,EAAkB,MAAA,GAAA,CAAE;AAAA,MAAA,EAAA,CACvB,GACF,GACF;AAAA,MACA,gBAAA/K,EAAA0L,EAAA,YAAA,EACE,UAAA,gBAAA1L,EAAA0L,EAAA,SAAA,EACGuR,UAAAA,EAAOnQ,IAAKkhD,CAAAA,MACX,gBAAAhuD,YAA+B,OAAAiuD,EAAGzkD,IAAK,SAAA,IACrC,UAAA,gBAAAxJ,EAAC4K,IAAA,EACC,SAAA,IACQ,SAAA,WACJ,IAAAqjD,EAAGzkD,IACA,OAAAykD,EAAG1uD,MACE,YAAA8tD,KAAepgD,EAAWghD,EAAGzkD,EAAG,IAAI,gBAAAxJ,EAACmD,IAAA,EAASi0B,IAAAA,IAAe,SAAA,OAAA,CAAM,IAAnEn4B,QACA,YAAA,MAAM6uD,EAAaG,EAAGzkD,EAAG,EAAA,MAPzBykD,EAAGzkD,EASnB,CACD,EAAA,CACH,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,IAEA,gBAAAnJ,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3E,UAAA;AAAA,IAAA,CAACkmD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW;AAAA,sBACrE2B,EAAA,MAAA,EAA0B,eAAA,CAAC2hD,GACzB,UAAA;AAAA,MAAA,gBAAArtD,EAAA0L,EAAA,SAAA,EAAc,SAAA,IACZ,UAAA,gBAAA1L,EAAC20B,IAAA,EAAY,MAAA,MAAiB,aAAA,OAAkB,aAAA,SAAoB,aAAA,UAAmBtmB,aACrF,4BAACnJ,IAAA,EAAgB,YAAA,UAAa,KAAA,MAC3B2oD,UAAAA;AAAAA,QAAAA,EAAAA;AAAAA,QACD,gBAAA7tD,EAAC+K,IAAA,EAAkB,MAAA,GAAA,CAAE;AAAA,MAAA,EAAA,CACvB,GACF,GACF;AAAA,MACA,gBAAA/K,EAAA0L,EAAA,YAAA,EACE,UAAA,gBAAA1L,eACGid,UAAAA,EAAOnQ,IAAKohD,CAAAA,MACX,gBAAAluD,EAAA0L,EAAA,MAAA,EAA+B,OAAAuiD,EAAGzkD,IAAK,SAAA,IACrC,UAAA,gBAAAxJ,EAAC4K,IAAA,EACC,aACQ,SAAA,WACJ,IAAAqjD,EAAGzkD,IACA,OAAAykD,EAAG1uD,MACE,YAAA8tD,KAAepgD,EAAWghD,EAAGzkD,EAAG,IAAI,gBAAAxJ,EAACmD,IAAA,EAASi0B,IAAAA,IAAe,SAAA,OAAA,CAAM,IAAnEn4B,QACA,YAAA,MAAM6uD,EAAaG,EAAGzkD,EAAG,EAAA,CAAC,EAAA,GAP1BykD,EAAGzkD,EASnB,CACD,EAAA,CACH,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AACD,MAAA7F;AAAA,SAAAlF,EAAA,EAAA,MAAAoN,KAAApN,UAAAmB,KA1EH+D,IAAA,gBAAA3D,EAAC6L,KACEjM,UAAAA,EAAAA,CA0EH,GAAMnB,QAAAoN,GAAApN,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA,GA3ENkF;AA2EM;AAhLoB,SAAAiG,GAAAqkD,GAAA;AAAA,SA0CRA,EAAG1uD;AAAM;ACrDxB,MAAM4uD,KAAY3vD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACvB;AAAA,IAAA8K,IAAAA;AAAAA,IAAApI,cAAAA;AAAAA,IAAA7B,MAAAA;AAAAA,IAAAoC,UAAAA;AAAAA,IAAAoI,aAAAA;AAAAA,IAAAsE,UAAAA;AAAAA,IAAA+/C,YAAAtvD;AAAAA,IAAAssD,WAAApsD;AAAAA,IAAAqsD,WAAAnsD;AAAAA,EAAAA,IAUIV,GAHF4vD,IAAAtvD,MAAAG,SAAA,KAAAH,GACAssD,IAAApsD,MAAAC,SAAA,KAAAD,GACAqsD,IAAAnsD,MAAAD,SAAA,KAAAC,GAEF,CAAAiC,GAAAmqD,CAAA,IAA0BvpD,GAASX,CAAY,GAC/CmqD,IAAmBhjD,GAA6C,IAAI;AAAE,MAAAlJ;AAAA,EAAAZ,EAAA,CAAA,MAAA+K,KAAA/K,SAAAkD,KAC/CtC,IAAAiD,CAAAA,MAAA;AACrB,IAAIipD,EAAU1iD,WAAUI,aAAasiD,EAAU1iD,OAAQ,GACvD0iD,EAAU1iD,UAAWE,WAAW,MAAMpH,EAAS6H,GAAIlH,CAAS,GAAG,GAAG;AAAA,EAAhD,GACnB7D,OAAA+K,GAAA/K,OAAAkD,GAAAlD,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAHD,QAAAgtD,IAAuBpsD;AAGrB,MAAAG,GAAAE;AAAA,EAAAjB,SAAA2C,KAEQ5B,IAAAA,MAAA;AACR8rD,IAAAA,EAASlqD,CAAY;AAAA,EAAC,GACrB1B,IAAA,CAAC0B,CAAY,GAAC3C,OAAA2C,GAAA3C,OAAAe,GAAAf,OAAAiB,MAAAF,IAAAf,EAAA,CAAA,GAAAiB,IAAAjB,EAAA,CAAA,IAFjBmK,GAAUpJ,GAEPE,CAAc;AAAC,MAAAC;AAAA,EAAAlB,SAAAgtD,KAEG9rD,IAAAssD,CAAAA,MAAA;AACnBX,IAAAA,EAASW,CAAQ,GACjBR,EAAeQ,CAAQ;AAAA,EAAC,GACzBxtD,OAAAgtD,GAAAhtD,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAHD,QAAA4D,IAAqB1C;AAKrB,MAAI0O,GAAQ;AACyD,UAAAzO,KAACwuD;AAAU,QAAAzqD;AAAA,IAAAlF,EAAA,CAAA,MAAAmB,KAAAnB,SAAA0C,KAAzDwC,IAAA,gBAAA3D,EAACgrD,IAAA,EAA6C,oBAAAprD,GAAcuB,UAAAA,GAAM,GAA2B1C,OAAAmB,GAAAnB,OAAA0C,GAAA1C,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAAlH,UAAAktD,IAAqBhoD;AAErB,QAAIyqD,KAAA,CAAe/C,GAAS;AAAA,UAAAjiD;AAAA,MAAA3K,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAInB6J,IAAA,CAACgiD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,GAAW,GAAItL,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,UAAAoL;AAAA,aAAApL,EAAA,EAAA,MAAA2K,KAAA3K,UAAAktD,KAF7E9hD,IAAA,gBAAA7J,EAACb,GAAA,EACC,UAAA,gBAAAkB,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3EkE,UAAAA;AAAAA,QAAAA;AAAAA,QACAuiD;AAAAA,MAAAA,EAAAA,CACH,EAAA,CACF,GAAMltD,QAAA2K,GAAA3K,QAAAktD,GAAAltD,QAAAoL,KAAAA,IAAApL,EAAA,EAAA,GALNoL;AAAAA,IAKM;AAET,QAAAT;AAAA,IAAA3K,EAAA,EAAA,MAAAsL,KAAAtL,UAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAII6J,IAAA,CAACgiD,KACA,gBAAAprD,EAACb,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW,EAAA,CACxD,GACDtL,QAAAsL,GAAAtL,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,QAAAoL;AAAA,WAAApL,EAAA,EAAA,MAAA2K,KAAA3K,UAAAktD,KALH9hD,sBAAC1K,GAAA,EACEiK,UAAAA;AAAAA,MAAAA;AAAAA,MAKAuiD;AAAAA,IAAAA,GACH,GAAMltD,QAAA2K,GAAA3K,QAAAktD,GAAAltD,QAAAoL,KAAAA,IAAApL,EAAA,EAAA,GAPNoL;AAAAA,EAOM;AAET,MAAAjK;AAAA,SAAAnB,EAAA,EAAA,MAAAsL,KAAAtL,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAA4D,KAAA5D,EAAA,EAAA,MAAA2sD,KAAA3sD,EAAA,EAAA,MAAAc,KAAAd,EAAA,EAAA,MAAA4P,KAAA5P,EAAA,EAAA,MAAA2vD,KAAA3vD,UAAA0C,KAGCvB,IAAA,gBAAAI,EAACb,GAAA,EACEivD,UAAAA,KAAA,CAAe/C,IACd,gBAAAhrD,EAAC6E,IAAA,EAAgB,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3E,UAAA;AAAA,IAAA,CAACkmD,KAAa,gBAAAprD,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW;AAAA,IACrE,gBAAA/J,EAACqL,IAAA,EACW,WAAA,UACAgD,UAAAA,GACL,MAAA,KACA,MAAA,WACA,MAAA,MACA,MAAA,QACQ,aAAA+8C,IAAA7rD,IAAAN,QACNkC,OAAAA,GACG,UAAAgkD,CAAAA,MAAO9iD,EAAa8iD,EAAC55C,OAAOpK,KAAM,GACnC,SAAAyI,GAAAA,CAIR;AAAA,EAAA,EAAA,CAEL,sBAECzK,GAAA,EACE,UAAA;AAAA,IAAA,CAACisD,uBACCjsD,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuBvrD,MAAAA,GAAmBwK,aAAAA,EAAAA,CAAW,EAAA,CACxD;AAAA,IAEDqkD,sBACE/iD,IAAA,EACW,WAAA,UACAgD,UAAAA,GACJ,OAAA,QACD,MAAA,MACA,MAAA,QACQ,aAAA+8C,IAAA7rD,IAAAN,QACNkC,OAAAA,GACG,UAAA+qD,OAAO7pD,EAAa8iD,EAAC55C,OAAOpK,KAAM,GACnC,SAAAqJ,IAIR,IAGH,gBAAAxK,EAAC6C,IAAA,EACW,WAAA,UACAwL,UAAAA,GACJ,OAAA,QACD,MAAA,MACQ,aAAA+8C,IAAA7rD,IAAAN,QACNkC,OAAAA,GACG,UAAAktD,CAAAA,MAAOhsD,EAAa8iD,EAAC55C,OAAOpK,KAAM,GACtC,MAAA,GACC,QAAA,WAAA,CAAU;AAAA,EAAA,EAAA,CAGvB,EAAA,CAEJ,GAAM1C,QAAAsL,GAAAtL,QAAA4sD,GAAA5sD,QAAA4D,GAAA5D,QAAA2sD,GAAA3sD,QAAAc,GAAAd,QAAA4P,GAAA5P,QAAA2vD,GAAA3vD,QAAA0C,GAAA1C,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GA3DNmB;AA2DM;AAlHe,SAAAgK,GAAAuiD,GAAA;AAsEX,EAAIhH,EAACpxC,QAAS,WACZoxC,EAACpiD,cAAcqpD,KAAAA;AAChB;AAxEU,SAAA5hD,GAAA6hD,GAAA;AA8FT,EAAIlH,EAACpxC,QAAS,WACZoxC,EAACpiD,cAAcqpD,KAAAA;AAChB;AC9FjB,MAAMkC,KAAsB,CAAKC,GAA8BC,GAAiBlK,MACvEiK,EAAcC,CAAO,MAAMvvD,SAAYqlD,IAAYiK,EAAcC,CAAO,GAGpEC,KAAsBjwD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACjC;AAAA,IAAAouB,OAAAA;AAAAA,IAAAyhC,eAAAA;AAAAA,IAAA5sD,UAAAA;AAAAA,IAAA0M,UAAAA;AAAAA,IAAAg9C,WAAAvsD;AAAAA,EAAAA,IAAwEN,GAAtB6sD,IAAAvsD,MAAAG,SAAA,KAAAH,GAEnCE,IAAA,CAAC8tB,EAAK4hC;AAAiB,MAAAxvD;AAAA,EAAAT,SAAAO,KADGE,IAAA;AAAA,IAAA+lD,aAC1BjmD;AAAAA,EAAAA,GACdP,OAAAO,GAAAP,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAFD,QAAA;AAAA,IAAAkJ,MAAAA;AAAAA,IAAA8vC,UAAAA;AAAAA,EAAAA,IAA2BkX,GAAczvD,CAExC;AAAE,MAAAG;AAAA,EAAAZ,EAAA,CAAA,MAAA8vD,KAAA9vD,EAAA,CAAA,MAAA4sD,KAAA5sD,EAAA,CAAA,MAAAkD,KAAAlD,SAAA4P,KAEuBhP,IAAAuvD,CAAAA,MACxB,gBAAA5uD,EAAC4sD,IAAA,EACWv+C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,YAAa,GACxE,KAAAwtD,EAAK/hB,KACL,KAAA+hB,EAAKhpB,KACJ,MAAAgpB,EAAKxE,MACDzoD,UAAAA,GACC0pD,WAAAA,EAAAA,GARNuD,EAAKplD,EAQU,GAEvB/K,OAAA8vD,GAAA9vD,OAAA4sD,GAAA5sD,OAAAkD,GAAAlD,OAAA4P,GAAA5P,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAdD,QAAAowD,IAA0BxvD;AAcxB,MAAAG;AAAA,EAAAf,EAAA,CAAA,MAAA8vD,KAAA9vD,EAAA,CAAA,MAAA4sD,KAAA5sD,EAAA,CAAA,MAAAkD,KAAAlD,UAAA4P,KAEsB7O,IAAAsvD,CAAAA,MACtB,gBAAA9uD,EAACmuD,IAAA,EACW9/C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,YAAa,GACjE,YAAAwtD,EAAKR,YACPzsD,UAAAA,GACC0pD,WAAAA,EAAAA,GANNuD,EAAKplD,EAMU,GAEvB/K,OAAA8vD,GAAA9vD,OAAA4sD,GAAA5sD,OAAAkD,GAAAlD,QAAA4P,GAAA5P,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAZD,QAAAswD,IAAwBvvD;AAYtB,MAAAE;AAAA,EAAAjB,EAAA,EAAA,MAAA8vD,KAAA9vD,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAAkD,KAAAlD,UAAA4P,KAE2B3O,IAAAsvD,CAAAA,MAC3B,gBAAAhvD,EAACotD,IAAA,EACW/+C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,YAAa,GACpE,SAAAwtD,EAAK3xC,SACJtb,UAAAA,GACG,aAAAitD,EAAKvB,aACL,aAAAuB,EAAKvtD,aACPgqD,WAAAA,EAAAA,GARNuD,EAAKplD,EAQU,GAEvB/K,QAAA8vD,GAAA9vD,QAAA4sD,GAAA5sD,QAAAkD,GAAAlD,QAAA4P,GAAA5P,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAdD,QAAAwwD,IAA6BvvD;AAc3B,MAAAC;AAAA,EAAAlB,EAAA,EAAA,MAAA8vD,KAAA9vD,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAAkD,KAAAlD,UAAA4P,KAEsB1O,IAAAuvD,CAAAA,MACtB,gBAAAlvD,EAACgsD,IAAA,EACW39C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,YAAa,GACxE,KAAAwtD,EAAK/hB,KACL,KAAA+hB,EAAKhpB,KACAjkC,UAAAA,GACC0pD,WAAAA,EAAAA,GAPNuD,EAAKplD,EAOU,GAEvB/K,QAAA8vD,GAAA9vD,QAAA4sD,GAAA5sD,QAAAkD,GAAAlD,QAAA4P,GAAA5P,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAbD,QAAA0wD,IAAwBxvD;AAatB,MAAAC;AAAA,EAAAnB,EAAA,EAAA,MAAA8vD,KAAA9vD,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAAkD,KAAAlD,UAAA4P,KAEuBzO,IAAAwvD,CAAAA,MACvB,gBAAApvD,EAACmrD,IAAA,EACW98C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,YAAa,GACnEO,UAAAA,GACC0pD,WAAAA,EAAAA,GALNuD,EAAKplD,EAKU,GAEvB/K,QAAA8vD,GAAA9vD,QAAA4sD,GAAA5sD,QAAAkD,GAAAlD,QAAA4P,GAAA5P,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAXD,QAAA4wD,IAAyBzvD;AAWvB,MAAA+D;AAAA,EAAAlF,UAAA4sD,KAE0B1nD,IAAA2rD,CAAAA,MACtBjE,sBAEClsD,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAa,EAACb,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuB,MAAA8D,EAAKrvD,MAAoB,aAAAqvD,EAAK7kD,YAAAA,CAAY,GACpE;AAAA,IACA,gBAAA/J,EAACgrD,IAAA,EAA0B4D,UAAAA,EAAKztD,MAAAA,CAAO;AAAA,EAAA,EAAA,GAJ/BytD,EAAKplD,EAKf,IAKF,gBAAAnJ,EAAC6E,MAA+B,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3F,UAAA;AAAA,IAAA,gBAAAlF,EAAC8qD,MAAuB,MAAA8D,EAAKrvD,MAAoB,aAAAqvD,EAAK7kD,aAAY;AAAA,IAClE,gBAAA/J,EAACgrD,IAAA,EAA0B4D,UAAAA,EAAKztD,MAAAA,CAAO;AAAA,EAAA,EAAA,GAF9BytD,EAAKplD,EAGhB,GAEH/K,QAAA4sD,GAAA5sD,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAlBD,QAAA8wD,IAA4B5rD;AAkB1B,MAAAyF;AAAA,EAAA3K,UAAA4wD,KAAA5wD,EAAA,EAAA,MAAA0wD,KAAA1wD,EAAA,EAAA,MAAAowD,KAAApwD,EAAA,EAAA,MAAA8wD,KAAA9wD,UAAAwwD,KAAAxwD,EAAA,EAAA,MAAAswD,KAEkB3lD,IAAAomD,CAAAA,MAAA;AAClB,YAAQZ,EAAKzpC,MAAAA;AAAAA,MAAK,KACX;AAAQ,eACJ0pC,EAAkBD,CAAK;AAAA,MAAC,KAC5B;AAAM,eACFG,EAAgBH,CAAK;AAAA,MAAC,KAC1B;AAAW,eACPK,EAAqBL,CAAK;AAAA,MAAC,KAC/B;AAAM,eACFO,EAAgBP,CAAK;AAAA,MAAC,KAC1B;AAAO,eACHS,EAAiBT,CAAK;AAAA,MAAC,KAC3B;AAAU,eACNW,EAAoBX,CAAK;AAAA,MAAC;AAAA,eAE1B;AAAA,IAAI;AAAA,EACd,GACFnwD,QAAA4wD,GAAA5wD,QAAA0wD,GAAA1wD,QAAAowD,GAAApwD,QAAA8wD,GAAA9wD,QAAAwwD,GAAAxwD,QAAAswD,GAAAtwD,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAjBD,QAAAgxD,IAAoBrmD;AAiBlB,MAAAS;AAAA,EAAApL,EAAA,EAAA,MAAAquB,EAAA0hB,eAAA/vC,EAAA,EAAA,MAAAquB,EAAAhpB,SAAArF,EAAA,EAAA,MAAAg5C,KAAAh5C,UAAAkJ,KAIGkC,IAAAijB,EAAK0hB,cACJ,gBAAAxuC,EAAC20B,IAAA,EAAe,SAAA,SAAa,MAAA,MAAc8iB,SAAAA,GAAc,IAAA,GAAW,QAAA;AAAA,IAAAzqC,IAAM;AAAA,EAAA,GACxE,UAAA,gBAAA3M,EAAC6E,IAAA,EAAgB,YAAA,UAAa,KAAA,MAC5B,UAAA;AAAA,IAAA,gBAAAlF,EAACI,GAAA,EAAe,WAAA,kBAAkB0sB,UAAAA,EAAKhpB,OAAO;AAAA,IAC7C6D,sBAAQoD,IAAA,EAAkB,MAAA,IAAE,IAAO,gBAAA/K,EAAC0vD,IAAA,EAAkB,MAAA,GAAA,CAAE;AAAA,EAAA,EAAA,CAC3D,GACF,IAEA,gBAAA1vD,EAACI,KAAe,WAAA,kBAAkB0sB,YAAKhpB,OAAO,GAC/CrF,EAAA,EAAA,IAAAquB,EAAA0hB,aAAA/vC,EAAA,EAAA,IAAAquB,EAAAhpB,OAAArF,QAAAg5C,GAAAh5C,QAAAkJ,GAAAlJ,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,EAAA,EAAA,MAAAquB,EAAA/iB,eAEAO,IAAAwiB,EAAK/iB,eACJ,gBAAA/J,EAACI,GAAA,EAAe,WAAA,mBAAwB,OAAA,YAAc,IAAA,MACnD0sB,UAAAA,EAAK/iB,aACR,GACDtL,EAAA,EAAA,IAAAquB,EAAA/iB,aAAAtL,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAEuB,QAAAgN,IAAAqhB,EAAK0hB,cAAL7mC,IAAA;AAA+B,MAAAgE;AAAA,EAAAlN,UAAAquB,EAAA6iC,UAAAlxD,UAAAgxD,KAElC9jD,IAAAmhB,EAAK6iC,OAAO7iD,IAAK2iD,CAAW,GAAChxD,EAAA,EAAA,IAAAquB,EAAA6iC,QAAAlxD,QAAAgxD,GAAAhxD,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA;AAAA,MAAAmN;AAAA,EAAAnN,UAAAkN,KADhDC,IAAA,gBAAA5L,EAAAklD,GAAA,SAAA,EACE,4BAACvkD,GAAA,EAAU,KAAA,MAAMgL,UAAAA,EAAAA,CAA8B,EAAA,CACjD,GAAsBlN,QAAAkN,GAAAlN,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA;AAAA,MAAAsN;AAAA,EAAAtN,EAAA,EAAA,MAAAgN,KAAAhN,UAAAmN,KAHxBG,sBAAAm5C,GAAA,MAAA,EAAwB,MAAAz5C,GACtBG,UAAAA,GAGF,GAAmBnN,QAAAgN,GAAAhN,QAAAmN,GAAAnN,QAAAsN,KAAAA,IAAAtN,EAAA,EAAA;AAAA,MAAAuN;AAAA,SAAAvN,EAAA,EAAA,MAAAoL,KAAApL,UAAA6L,KAAA7L,EAAA,EAAA,MAAAsN,KAtBrBC,sBAAC7M,GAAA,EACE0K,UAAAA;AAAAA,IAAAA;AAAAA,IAWAS;AAAAA,IAMDyB;AAAAA,EAAAA,GAKF,GAAMtN,QAAAoL,GAAApL,QAAA6L,GAAA7L,QAAAsN,GAAAtN,QAAAuN,KAAAA,IAAAvN,EAAA,EAAA,GAvBNuN;AAuBM,GCjJJsiD,KAAsB,CAAKC,GAA8BC,GAAiBlK,MACvEiK,EAAcC,CAAO,MAAMvvD,SAAYqlD,IAAYiK,EAAcC,CAAO,GAGpEoB,KAAcpxD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACzB;AAAA,IAAAixD,QAAA7wD;AAAAA,IAAA+tB,QAAA7tB;AAAAA,IAAAuvD,eAAArvD;AAAAA,IAAAyC,UAAAA;AAAAA,IAAA0M,UAAAA;AAAAA,IAAAg9C,WAAAhsD;AAAAA,EAAAA,IAAgGb;AAAM,MAAAgB;AAAA,EAAAf,SAAAK,KAA9FU,IAAAV,MAAAG,SAAA,CAAA,IAAAH,GAAWL,OAAAK,GAAAL,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAX,QAAAkxD,IAAAnwD;AAAW,MAAAE;AAAA,EAAAjB,SAAAO,KAAEU,IAAAV,MAAAC,SAAA,CAAA,IAAAD,GAAWP,OAAAO,GAAAP,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAX,QAAAouB,IAAAntB;AAAW,MAAAC;AAAA,EAAAlB,SAAAS,KAAES,IAAAT,MAAAD,SAAA,CAAA,IAAAC,GAAkBT,OAAAS,GAAAT,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAAlB,QAAA8vD,IAAA5uD,GAAwC0rD,IAAAhsD,MAAAJ,SAAA,KAAAI,GAC1EgD,IAAqBV,KAAAiI;AAA8B,MAAAhK;AAAA,EAAAnB,EAAA,CAAA,MAAA8vD,KAAA9vD,EAAA,CAAA,MAAA4sD,KAAA5sD,EAAA,CAAA,MAAA4D,KAAA5D,SAAA4P,KAEzBzO,IAAAgvD,OACxB,gBAAA5uD,EAAC4sD,IAAA,EACWv+C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,gBAAiBwtD,EAAK/hB,GAAI,GACrF,KAAA+hB,EAAK/hB,KACL,KAAA+hB,EAAKhpB,KACJ,MAAAgpB,EAAKxE,MACD/nD,UAAAA,GACCgpD,WAAAA,EAAAA,GARNuD,EAAKplD,EAQU,GAEvB/K,OAAA8vD,GAAA9vD,OAAA4sD,GAAA5sD,OAAA4D,GAAA5D,OAAA4P,GAAA5P,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAdD,QAAAowD,IAA0BjvD;AAcxB,MAAA+D;AAAA,EAAAlF,EAAA,EAAA,MAAA8vD,KAAA9vD,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAA4D,KAAA5D,UAAA4P,KAEsB1K,IAAAmrD,CAAAA,MACtB,gBAAA9uD,EAACmuD,IAAA,EACW9/C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,YAAa,GACjE,YAAAwtD,EAAKR,YACP/rD,aACCgpD,WAAAA,EAAAA,GANNuD,EAAKplD,EAMU,GAEvB/K,QAAA8vD,GAAA9vD,QAAA4sD,GAAA5sD,QAAA4D,GAAA5D,QAAA4P,GAAA5P,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA;AAZD,QAAAswD,IAAwBprD;AAYtB,MAAAyF;AAAA,EAAA3K,EAAA,EAAA,MAAA8vD,KAAA9vD,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAA4D,KAAA5D,UAAA4P,KAE2BjF,IAAA4lD,CAAAA,MAC3B,gBAAAhvD,EAACotD,IAAA,EACW/+C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,YAAa,GACpE,SAAAwtD,EAAK3xC,SACJ5a,aACG,aAAAusD,EAAKvB,aACL,aAAAuB,EAAKvtD,aACPgqD,WAAAA,EAAAA,GARNuD,EAAKplD,EAQU,GAEvB/K,QAAA8vD,GAAA9vD,QAAA4sD,GAAA5sD,QAAA4D,GAAA5D,QAAA4P,GAAA5P,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAdD,QAAAwwD,IAA6B7lD;AAc3B,MAAAS;AAAA,EAAApL,EAAA,EAAA,MAAA8vD,KAAA9vD,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAA4D,KAAA5D,UAAA4P,KAEsBxE,IAAAqlD,CAAAA,MACtB,gBAAAlvD,EAACgsD,IAAA,EACW39C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,gBAAiBwtD,EAAK/hB,GAAI,GACrF,KAAA+hB,EAAK/hB,KACL,KAAA+hB,EAAKhpB,KACAvjC,aACCgpD,WAAAA,EAAAA,GAPNuD,EAAKplD,EAOU,GAEvB/K,QAAA8vD,GAAA9vD,QAAA4sD,GAAA5sD,QAAA4D,GAAA5D,QAAA4P,GAAA5P,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAbD,QAAA0wD,IAAwBtlD;AAatB,MAAAS;AAAA,EAAA7L,EAAA,EAAA,MAAA8vD,KAAA9vD,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAA4D,KAAA5D,UAAA4P,KAEuB/D,IAAA8kD,CAAAA,MACvB,gBAAApvD,EAACmrD,IAAA,EACW98C,UAAAA,GACN,IAAAugD,EAAKplD,IAEH,MAAAolD,EAAKrvD,MACE,aAAAqvD,EAAK7kD,eAAL,IACC,cAAAukD,GAAoBC,GAAeK,EAAKplD,IAAKolD,EAAKxtD,YAAa,GACnEiB,UAAAA,GACCgpD,WAAAA,EAAAA,GALNuD,EAAKplD,EAKU,GAEvB/K,QAAA8vD,GAAA9vD,QAAA4sD,GAAA5sD,QAAA4D,GAAA5D,QAAA4P,GAAA5P,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAXD,QAAA4wD,IAAyB/kD;AAWvB,MAAAmB;AAAA,EAAAhN,UAAA4sD,KAE0B5/C,IAAA6jD,CAAAA,MACtBjE,sBAEClsD,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAa,EAACb,GAAA,EAAO,IAAA,MACN,UAAA,gBAAAa,EAAC8qD,IAAA,EAAuB,MAAA8D,EAAKrvD,MAAoB,aAAAqvD,EAAK7kD,YAAAA,CAAY,GACpE;AAAA,IACA,gBAAA/J,EAACgrD,IAAA,EAA0B4D,UAAAA,EAAKztD,MAAAA,CAAO;AAAA,EAAA,EAAA,GAJ/BytD,EAAKplD,EAKf,IAKF,gBAAAnJ,EAAC6E,MAA+B,YAAA,UAAwB,gBAAA,iBAA0B,WAAA,QAAW,KAAA,MAC3F,UAAA;AAAA,IAAA,gBAAAlF,EAAC8qD,MAAuB,MAAA8D,EAAKrvD,MAAoB,aAAAqvD,EAAK7kD,aAAY;AAAA,IAClE,gBAAA/J,EAACgrD,IAAA,EAA0B4D,UAAAA,EAAKztD,MAAAA,CAAO;AAAA,EAAA,EAAA,GAF9BytD,EAAKplD,EAGhB,GAEH/K,QAAA4sD,GAAA5sD,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA;AAlBD,QAAA8wD,IAA4B9jD;AAkB1B,MAAAE;AAAA,EAAAlN,UAAA4wD,KAAA5wD,EAAA,EAAA,MAAA0wD,KAAA1wD,EAAA,EAAA,MAAAowD,KAAApwD,EAAA,EAAA,MAAA8wD,KAAA9wD,UAAAwwD,KAAAxwD,EAAA,EAAA,MAAAswD,KAEkBpjD,IAAA6jD,CAAAA,MAAA;AAClB,YAAQZ,EAAKzpC,MAAAA;AAAAA,MAAK,KACX;AAAQ,eACJ0pC,EAAkBD,CAAK;AAAA,MAAC,KAC5B;AAAM,eACFG,EAAgBH,CAAK;AAAA,MAAC,KAC1B;AAAW,eACPK,EAAqBL,CAAK;AAAA,MAAC,KAC/B;AAAM,eACFO,EAAgBP,CAAK;AAAA,MAAC,KAC1B;AAAO,eACHS,EAAiBT,CAAK;AAAA,MAAC,KAC3B;AAAU,eACNW,EAAoBX,CAAK;AAAA,MAAC;AAAA,eAE1B;AAAA,IAAI;AAAA,EACd,GACFnwD,QAAA4wD,GAAA5wD,QAAA0wD,GAAA1wD,QAAAowD,GAAApwD,QAAA8wD,GAAA9wD,QAAAwwD,GAAAxwD,QAAAswD,GAAAtwD,QAAAkN,KAAAA,IAAAlN,EAAA,EAAA;AAjBD,QAAAgxD,IAAoB9jD;AAiBlB,MAAAC;AAAA,EAAAnN,EAAA,EAAA,MAAAkxD,KAAAlxD,UAAAgxD,KAIG7jD,IAAA+jD,EAAM7iD,IAAK2iD,CAAW,GAAChxD,QAAAkxD,GAAAlxD,QAAAgxD,GAAAhxD,QAAAmN,KAAAA,IAAAnN,EAAA,EAAA;AAAA,MAAAsN;AAAA,EAAAtN,EAAA,EAAA,MAAAouB,EAAAzqB,UAAA3D,EAAA,EAAA,MAAAkxD,EAAAvtD,UAEvB2J,IAAA4jD,EAAMvtD,SAAU,KAAKyqB,EAAMzqB,SAAU,KAAK,gBAAApC,EAACg2B,IAAA,EAAsB,aAAA,eAAA,CAAc,GAAGv3B,EAAA,EAAA,IAAAouB,EAAAzqB,QAAA3D,EAAA,EAAA,IAAAkxD,EAAAvtD,QAAA3D,QAAAsN,KAAAA,IAAAtN,EAAA,EAAA;AAAA,MAAAuN;AAAA,MAAAvN,EAAA,EAAA,MAAA8vD,KAAA9vD,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAAouB,KAAApuB,EAAA,EAAA,MAAA4D,KAAA5D,UAAA4P,GAAA;AAAA,QAAApC;AAAA,IAAAxN,UAAA8vD,KAAA9vD,EAAA,EAAA,MAAA4sD,KAAA5sD,EAAA,EAAA,MAAAouB,EAAAzqB,UAAA3D,EAAA,EAAA,MAAA4D,KAAA5D,UAAA4P,KAEvEpC,IAAAA,CAAA6gB,GAAAtX,wBACTlV,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAN,EAACyuD,MACQ3hC,OAAAA,GACQyhC,eAAAA,GACLlsD,UAAAA,GACAgM,UAAAA,GACCg9C,WAAAA,GAAS;AAAA,MAErB71C,IAAQqX,EAAMzqB,SAAU,KAAK,gBAAApC,EAACg2B,IAAA,EAAsB,aAAA,eAAA,CAAc;AAAA,IAAA,EAAA,GARtDlJ,EAAKtjB,EASpB,GACD/K,QAAA8vD,GAAA9vD,QAAA4sD,GAAA5sD,EAAA,EAAA,IAAAouB,EAAAzqB,QAAA3D,QAAA4D,GAAA5D,QAAA4P,GAAA5P,QAAAwN,KAAAA,IAAAxN,EAAA,EAAA,GAXAuN,IAAA6gB,EAAM/f,IAAKb,CAWX,GAACxN,QAAA8vD,GAAA9vD,QAAA4sD,GAAA5sD,QAAAouB,GAAApuB,QAAA4D,GAAA5D,QAAA4P,GAAA5P,QAAAuN;AAAAA,EAAA;AAAAA,IAAAA,IAAAvN,EAAA,EAAA;AAAA,MAAAwN;AAAA,SAAAxN,EAAA,EAAA,MAAAmN,KAAAnN,UAAAsN,KAAAtN,EAAA,EAAA,MAAAuN,KAhBJC,sBAACtL,GAAA,EAAW,MAAA,KAAS,MAAA,QAAW,KAAA,MAC7BiL,UAAAA;AAAAA,IAAAA;AAAAA,IAEAG;AAAAA,IAEAC;AAAAA,EAAAA,GAYH,GAAQvN,QAAAmN,GAAAnN,QAAAsN,GAAAtN,QAAAuN,GAAAvN,QAAAwN,KAAAA,IAAAxN,EAAA,EAAA,GAjBRwN;AAiBQ;AAvIe,SAAArC,KAAA;AAAA;ACQ3B,MAAMimD,KAAeA,CAAC/7C,MACfA,EAAMg8C,cACPh8C,EAAMi8C,YAAkBC,KACrBC,KAFwBvR,IAK3BsK,KAAgBA,CAAChxC,GAAkClS,MAAkB;AACzE,QAAMC,IAAkBD,EAAM3D,KAAAA,EAAO6D,YAAAA;AAErC,SAAKD,IAIEiS,EAAQ/R,OAAQ6N,CAAAA,MAAU,GAAGA,EAAMvU,IAAI,IAAIuU,EAAMyrB,IAAI,GAAGv5B,YAAAA,EAAcO,SAASR,CAAe,CAAC,IAH7FiS;AAIX,GASMk4C,KAAsB1xD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC1B;AAAA,IAAAoV,OAAAA;AAAAA,IAAAigC,cAAAA;AAAAA,IAAAoc,iBAAAA;AAAAA,IAAAC,cAAAA;AAAAA,EAAAA,IAA+D5xD;AAAM,MAAAM;AAAA,EAAAL,EAAA,CAAA,MAAAqV,EAAAi8C,aAAAtxD,EAAA,CAAA,MAAAqV,EAAAyrB,QAAA9gC,SAAA0xD,KAC3CrxD,IAAAgV,EAAKi8C,aAAcI,EAAe5tC,IAAKzO,EAAKyrB,IAAK,GAAC9gC,EAAA,CAAA,IAAAqV,EAAAi8C,WAAAtxD,EAAA,CAAA,IAAAqV,EAAAyrB,MAAA9gC,OAAA0xD,GAAA1xD,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA5E,QAAA4xD,IAA0BvxD,GAC1BoL,IAAmB,CAAC4J,EAAKg8C,eAANO;AAAwC,MAAArxD;AAAA,EAAAP,EAAA,CAAA,MAAAqV,KAAArV,SAAA4xD,KAAA5xD,EAAA,CAAA,MAAA2xD,KAEvCpxD,IAAAA,MAAA;AAClB,IAAIqxD,KAIJD,EAAat8C,CAAK;AAAA,EAAC,GACpBrV,OAAAqV,GAAArV,OAAA4xD,GAAA5xD,OAAA2xD,GAAA3xD,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAND,QAAAuT,IAAoBhT,GAWJE,IAAA60C,MAAiBjgC,EAAKyrB,MAC9BlgC,IAAAyU,EAAKyrB,MACF//B,IAAAsU,EAAKvU;AAAK,MAAAG;AAAA,EAAAjB,SAAAqV,KACDpU,IAAAmwD,GAAa/7C,CAAK,GAACrV,OAAAqV,GAAArV,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,MAAAkB;AAAA,EAAAlB,UAAAiB,KAA7BC,IAAA,gBAAAK,EAACmD,IAAA,EAAS,IAAAzD,GAA6B,SAAA,QAAM,GAAGjB,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,EAAAnB,EAAA,EAAA,MAAAqV,EAAAi8C,aAEpDnwD,IAAAkU,EAAKi8C,YACH,gBAAA/vD,EAACyqB,IAAA,EACW,WAAA,mBACP,IAAA,MACA,IAAA,OACU,cAAA,SACL,SAAA,UACM,eAAA,QACf,sBAED,IAVFxrB,QAWaR,EAAA,EAAA,IAAAqV,EAAAi8C,WAAAtxD,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA;AAAA,MAAAkF;AAAA,SAAAlF,EAAA,EAAA,MAAAqV,EAAAvU,QAAAd,EAAA,EAAA,MAAAqV,EAAAyrB,QAAA9gC,EAAA,EAAA,MAAAuT,KAAAvT,EAAA,EAAA,MAAAyL,KAAAzL,EAAA,EAAA,MAAAS,KAAAT,EAAA,EAAA,MAAAkB,KAAAlB,UAAAmB,KAlBjB+D,sBAACiH,IAAA,EACS,SAAA,WACI,YAAA1L,GACR,IAAAG,GACG,OAAAG,GACD,MAAAG,GAEJ,YAAAC,GAaQsK,UAAAA,GACE8H,YAAAA,GAAW,GACvBvT,EAAA,EAAA,IAAAqV,EAAAvU,MAAAd,EAAA,EAAA,IAAAqV,EAAAyrB,MAAA9gC,QAAAuT,GAAAvT,QAAAyL,GAAAzL,QAAAS,GAAAT,QAAAkB,GAAAlB,QAAAmB,GAAAnB,QAAAkF,KAAAA,IAAAlF,EAAA,EAAA,GAtBFkF;AAsBE,GAIA2D,KAAyB;AAAA,EAC7B3E,aAAa;AAAA,EACbC,WAAW;AAAA,EACXE,SAAS;AACX,GAEMwtD,KAA+B;AAAA,EACnC1tD,WAAW;AAAA,EACXE,SAAS;AAAA,EACTytD,cAAc;AAAA,EACdC,eAAe;AACjB,GAEMC,KAA0BA,CAACjuD,MAAyC;AACxE,MAAI,CAAC,CAAC,aAAa,WAAW,QAAQ,KAAK,EAAE+D,SAAS/D,EAAMuR,GAAG;AAC7D;AAGF,QAAMkJ,IAAUmH,MAAM0hB,KACpBtjC,EAAMO,cAAckjC,iBAAoC,sCAAsC,CAChG;AAEA,MAAIhpB,EAAQ7a,WAAW;AACrB;AAGF,QAAMg0C,IAAen5B,EAAQu7B,QAAQrgC,SAASu4C,aAAkC,GAC1EvO,IACA3/C,EAAMuR,QAAQ,SAAe,IAC7BvR,EAAMuR,QAAQ,QAAckJ,EAAQ7a,SAAS,IAC7CI,EAAMuR,QAAQ,YAAkBqiC,KAAgB,IAAIn5B,EAAQ7a,SAAS,IAAIg0C,IAAe,IACrFA,IAAe,KAAKA,MAAiBn5B,EAAQ7a,SAAS,IAAI,IAAIg0C,IAAe;AAGtF5zC,EAAAA,EAAMC,eAAAA,GACNwa,EAAQklC,CAAS,GAAGn5C,MAAAA;AACtB,GAEa2nD,KAAmBnyD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC9B;AAAA,IAAAiJ,MAAAA;AAAAA,IAAA7D,OAAAhF;AAAAA,IAAAiL,aAAAA;AAAAA,IAAAgpC,aAAA/zC;AAAAA,IAAAgZ,SAAAA;AAAAA,IAAA+7B,cAAA70C;AAAAA,IAAA0xD,eAAAvxD;AAAAA,IAAAwxD,WAAArxD;AAAAA,IAAAskD,OAAApkD;AAAAA,IAAAoxD,kBAAAnxD;AAAAA,IAAAmW,SAAAA;AAAAA,IAAArM,UAAAA;AAAAA,IAAAsnD,uBAAAA;AAAAA,IAAAC,yBAAAA;AAAAA,IAAAZ,cAAAA;AAAAA,EAAAA,IAgBI5xD,GAdFsF,IAAAhF,MAAAG,SAAA,kBAAAH,GAEAi0C,IAAA/zC,MAAAC,SAAA,KAAAD,GAEA+0C,IAAA70C,MAAAD,SAAA,OAAAC;AAAmB,MAAAU;AAAA,EAAAnB,SAAAY,KACnBO,IAAAP,MAAAJ,SAAA,CAAA,IAAAI,GAAkBZ,OAAAY,GAAAZ,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAlB,QAAAmyD,IAAAhxD,GACAixD,IAAArxD,MAAAP,SAAA,KAAAO,GACAskD,IAAApkD,MAAAT,SAAA,KAAAS,GACAoxD,IAAAnxD,MAAAV,SAAA,KAAAU,GAQF,CAAAmG,GAAAqC,CAAA,IAA0BpG,GAAS,EAAE;AAAE,MAAA4B;AAAA,EAAAlF,SAAAmyD,KACfjtD,IAAA,IAAIoe,IAAI6uC,CAAa,GAACnyD,OAAAmyD,GAAAnyD,OAAAkF,KAAAA,IAAAlF,EAAA,CAAA;AAA9C,QAAA0xD,IAAwBxsD,GACxByjD,IAAwB4B,GAAchxC,GAASlS,CAAK,GACpDmrD,IAAoBle,KAAA;AAAsB,MAAAlpC,GAAAT;AAAA,EAAA3K,EAAA,CAAA,MAAAkJ,KAAAlJ,SAAAwyD,KAEhC7nD,IAAAA,MAAA;AACR,IAAI,CAACzB,KAAD,CAAUspD,KACd9oD,EAAS,EAAE;AAAA,EAAC,GACX0B,IAAA,CAAClC,GAAMspD,CAAW,GAACxyD,OAAAkJ,GAAAlJ,OAAAwyD,GAAAxyD,OAAAoL,GAAApL,OAAA2K,MAAAS,IAAApL,EAAA,CAAA,GAAA2K,IAAA3K,EAAA,CAAA,IAHtBmK,GAAUQ,GAGPS,CAAmB;AAGnB,QAAAS,IAAA00B,IACCvzB,IAAA,IACAE,IAAA,IACwBC,IAAA;AAAK,MAAAG;AAAA,EAAAtN,SAAAqX,KAEf/J,IAAA7C,CAAAA,OAAa,CAACA,GAAOvB,QAASmO,EAAAA,GAASrX,OAAAqX,GAAArX,OAAAsN,KAAAA,IAAAtN,EAAA,CAAA;AAAA,MAAAuN;AAAA,EAAAvN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAErDiM,IAAA,gBAAAhM,EAAAg/B,GAAA,UAAA,CAAA,CAAA,GAAmBvgC,QAAAuN,KAAAA,IAAAvN,EAAA,EAAA;AAClB,QAAAwN,IAAA+yB,IACE9yB,IAAA8yB;AAAM,MAAA7yB;AAAA,EAAA1N,UAAAqF,KAGDqI,IAAA,gBAAAnM,EAACI,GAAA,EAAe,WAAA,aAAa0D,UAAAA,GAAM,GAAOrF,QAAAqF,GAAArF,QAAA0N,KAAAA,IAAA1N,EAAA,EAAA;AAAA,MAAA2N;AAAA,EAAA3N,UAAAsL,KACzCqC,IAAArC,sBACE3J,GAAA,EAAe,WAAA,uBAA4B,OAAA,YACzC2J,aACH,IAHD,MAIOtL,QAAAsL,GAAAtL,QAAA2N,KAAAA,IAAA3N,EAAA,EAAA;AAAA,MAAA4N;AAAA,EAAA5N,EAAA,EAAA,MAAA0N,KAAA1N,UAAA2N,KAPZC,mCACE,UAAA,gBAAAhM,EAACM,GAAA,EAAU,KAAA,MACTwL,UAAAA;AAAAA,IAAAA;AAAAA,IACCC;AAAAA,EAAAA,EAAAA,CAKH,EAAA,CACF,GAAgB3N,QAAA0N,GAAA1N,QAAA2N,GAAA3N,QAAA4N,KAAAA,IAAA5N,EAAA,EAAA;AACf,QAAA6N,KAAA0yB,IACEnzB,KAAAlL,GAAU8L,KAAA;AAAI,MAAAE;AAAA,EAAAlO,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAGT4M,uBAACukD,IAAA,EAAW,MAAA,GAAA,CAAE,GAAIzyD,QAAAkO,MAAAA,KAAAlO,EAAA,EAAA;AAAA,MAAAmO;AAAA,EAAAnO,UAAAsyD,KADpBnkD,KAAA,gBAAA5M,EAAC20B,IAAA,EAAkB,cAAA,wBAA+B,SAAA,WAAe,MAAA,MAAco8B,SAAAA,GAC7EpkD,UAAAA,GAAAA,CACF,GAASlO,QAAAsyD,GAAAtyD,QAAAmO,MAAAA,KAAAnO,EAAA,EAAA;AAMG,QAAAoO,KAAA,CAACkmC,KAAeA,MAAgB;AAAG,MAAA7lC;AAAA,EAAAzO,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAE7CmN,uBAACikD,IAAA,EAAgB,MAAA,GAAA,CAAE,GAAI1yD,QAAAyO,MAAAA,KAAAzO,EAAA,EAAA;AAAA,MAAA0O;AAAA,EAAA1O,EAAA,EAAA,MAAAuyD,KAAAvyD,UAAAoO,MAPzBM,KAAA,gBAAAnN,EAAC20B,IAAA,EACY,cAAA,0BACH,SAAA,WACH,MAAA,MACIq8B,SAAAA,GACC,UAAAnkD,IAEVK,UAAAA,IACF,GAASzO,QAAAuyD,GAAAvyD,QAAAoO,IAAApO,QAAA0O,MAAAA,KAAA1O,EAAA,EAAA;AAAA,MAAA4O;AAAA,EAAA5O,UAAAwyD,KACT5jD,KAAA,gBAAArN,EAACI,GAAA,EACa,eAAA,sBACF,WAAA,uBACJ,OAAA,YACD,MAAA,KACM,WAAA,GAEV6wD,UAAAA,GACH,GAAOxyD,QAAAwyD,GAAAxyD,QAAA4O,MAAAA,KAAA5O,EAAA,EAAA;AAAA,MAAA8O;AAAA,EAAA9O,EAAA,EAAA,MAAAmO,MAAAnO,UAAA0O,MAAA1O,EAAA,EAAA,MAAA4O,MArBTE,sBAAC5M,GAAA,EAAgB,WAAA,OAAU,KAAA,MAAW,OAAA,UACpCiM,UAAAA;AAAAA,IAAAA;AAAAA,IAGAO;AAAAA,IASAE;AAAAA,EAAAA,GASF,GAAQ5O,QAAAmO,IAAAnO,QAAA0O,IAAA1O,QAAA4O,IAAA5O,QAAA8O,KAAAA,IAAA9O,EAAA,EAAA;AAEP,QAAA8N,KAAA5L,GAAU6M,KAAA,KAAgBo1C,KAAA,OAAmBE,KAAA,MAAiBC,KAAA,gBAAwBC,KAAA;AAAQ,MAAAC;AAAA,EAAAxkD,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAE7EkjD,uBAAC73C,IAAA,EAAa,MAAA,GAAA,CAAE,GAAI3M,QAAAwkD,MAAAA,KAAAxkD,EAAA,EAAA;AAAA,MAAAykD;AAAA,EAAAzkD,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAgBtBmjD,KAAA1gD,CAAAA,OAAW2F,EAAS3F,GAAK+I,OAAOpK,KAAM,GAAC1C,QAAAykD,MAAAA,KAAAzkD,EAAA,EAAA;AAAA,MAAA0kD;AAAA,EAAA1kD,UAAAqH,KAjBrDq9C,uBAACh4C,IAAA,EACe,cAAA83C,IACR,OAAA,QACY,mBAAA,OACN,aAAA,gBAEZ,UAAA,gBAAAjjD,EAACqL,IAAA,EACa,aAAA,KACC,cAAA,KACNvF,OAAAA,GACK,aAAA,uBACD,cAAA,uBACE,cAAA,OACLwB,QAAAA,IACCA,SAAAA,IACDA,QAAAA,IACOgpD,eAAAA,IACL,UAAApN,IAAuC,GAErD,GAAazkD,QAAAqH,GAAArH,QAAA0kD,MAAAA,KAAA1kD,EAAA,EAAA;AACZ,QAAA2kD,KAAAyN,IACC,gBAAA7wD,EAACI,KAAe,WAAA,uBAA4B,OAAA,YAAa,GAAA,MAAK,UAAA,cAE9D,IACE0jD,IACF,gBAAA9jD,EAACI,KAAe,WAAA,uBAA4B,OAAA,WAAY,GAAA,MACrD0jD,UAAAA,EAAAA,CACH,IACEsD,EAAehlD,WAAY,IAC7B,gBAAApC,EAACI,GAAA,EAAe,WAAA,uBAA4B,OAAA,YAAa,GAAA,MAAK,UAAA,qBAE9D,sBAECoM,IAAA,EAAqB,WAAA,SAAsB,cAAA;AAAA,IAAA4kD,SAAW;AAAA,EAAA,GACrD,UAAA,gBAAApxD,EAACW,GAAA,EAAU,KAAA,MAAU,MAAA,WAAqB,cAAA,sBAAgC8vD,WAAAA,IACvErJ,UAAAA,EAAet6C,IAAKgH,CAAAA,OACnB,gBAAA9T,EAACkwD,IAAA,EAEQp8C,OAAAA,IACOigC,cAAAA,GACGoc,iBAAAA,GACHC,cAAAA,KAJTt8C,GAAKyrB,IAIgB,CAE7B,EAAA,CACH,EAAA,CACF;AACD,MAAA8jB;AAAA,EAAA5kD,EAAA,EAAA,MAAA8N,MAAA9N,UAAA0kD,MAAA1kD,EAAA,EAAA,MAAA2kD,MA/CHC,uBAAC92C,IAAA,EAAU,KAAAiB,IAAgB,aAAAo1C,IAAmB,cAAAE,IAAiB,aAAAC,IAAwB,UAAAC,IACrFG,UAAAA;AAAAA,IAAAA;AAAAA,IAoBCC;AAAAA,EAAAA,GA2BH,GAAQ3kD,QAAA8N,IAAA9N,QAAA0kD,IAAA1kD,QAAA2kD,IAAA3kD,QAAA4kD,MAAAA,KAAA5kD,EAAA,EAAA;AAAA,MAAA8kD;AAAA,EAAA9kD,EAAA,EAAA,MAAAoN,MAAApN,UAAA8O,KAAA9O,EAAA,EAAA,MAAA4kD,MAzEVE,uBAAC13C,IAAA,EAAU,KAAAY,IACTc,UAAAA;AAAAA,IAAAA;AAAAA,IAwBA81C;AAAAA,EAAAA,GAiDF,GAAQ5kD,QAAAoN,IAAApN,QAAA8O,GAAA9O,QAAA4kD,IAAA5kD,QAAA8kD,MAAAA,KAAA9kD,EAAA,EAAA;AAAA,MAAA+kD;AAAA,EAAA/kD,UAAA6N,GAAA+kD,QAAA5yD,UAAA8kD,MA3EVC,IAAA,gBAAAxjD,EAAAsM,GAAA,MAAA,EACEi3C,UAAAA,IA2EF,GAAc9kD,EAAA,EAAA,IAAA6N,GAAA+kD,MAAA5yD,QAAA8kD,IAAA9kD,QAAA+kD,KAAAA,IAAA/kD,EAAA,EAAA;AAAA,MAAAglD;AAAA,EAAAhlD,UAAAqX,KAGV2tC,uBAAC9uB,IAAA,EAAe,SAAA,WAAmB7e,YAAS,UAAA,UAE5C,GAASrX,QAAAqX,GAAArX,QAAAglD,MAAAA,KAAAhlD,EAAA,EAAA;AAAA,MAAAilD;AAAA,EAAAjlD,EAAA,EAAA,MAAAqyD,KAAAryD,UAAAgL,KACTi6C,uBAAC/uB,IAAA,EAAgBlrB,YAAoBqnD,aAAkB,UAAA,qBAEvD,GAASryD,QAAAqyD,GAAAryD,QAAAgL,GAAAhL,QAAAilD,MAAAA,KAAAjlD,EAAA,EAAA;AAAA,MAAA6yD;AAAA,EAAA7yD,EAAA,EAAA,MAAAglD,MAAAhlD,UAAAilD,MAPb4N,KAAA,gBAAAtxD,EAAAg/B,GAAA,QAAA,EACE,4BAACr+B,GAAA,EAAgB,WAAA,OAAU,KAAA,MACzB8iD,UAAAA;AAAAA,IAAAA;AAAAA,IAGAC;AAAAA,EAAAA,EAAAA,CAGF,EAAA,CACF,GAAgBjlD,QAAAglD,IAAAhlD,QAAAilD,IAAAjlD,QAAA6yD,MAAAA,KAAA7yD,EAAA,EAAA;AAAA,MAAA8yD;AAAA,EAAA9yD,EAAA,EAAA,MAAAyN,EAAAkB,WAAA3O,EAAA,EAAA,MAAA4N,KAAA5N,EAAA,EAAA,MAAA+kD,KAAA/kD,UAAA6yD,MAjGlBC,KAAA,gBAAAlxD,EAAA6L,EAAA,SAAA,EACEG,UAAAA;AAAAA,IAAAA;AAAAA,IAUAm3C;AAAAA,IA6EA8N;AAAAA,EAAAA,GAUF,GAAiB7yD,EAAA,EAAA,IAAAyN,EAAAkB,SAAA3O,QAAA4N,GAAA5N,QAAA+kD,GAAA/kD,QAAA6yD,IAAA7yD,QAAA8yD,MAAAA,KAAA9yD,EAAA,EAAA;AAAA,MAAA+yD;AAAA,EAAA/yD,UAAAwN,EAAAqB,cAAA7O,UAAA8yD,MAnGnBC,KAAA,gBAAAxxD,EAAAiM,EAAA,YAAA,EACEslD,UAAAA,IAmGF,GAAoB9yD,EAAA,EAAA,IAAAwN,EAAAqB,YAAA7O,QAAA8yD,IAAA9yD,QAAA+yD,MAAAA,KAAA/yD,EAAA,EAAA;AAAA,MAAAgzD;AAAA,SAAAhzD,UAAAkJ,KAAAlJ,EAAA,EAAA,MAAA6L,EAAApG,QAAAzF,EAAA,EAAA,MAAAsN,KAAAtN,EAAA,EAAA,MAAAuN,KAAAvN,UAAA+yD,MA5GtBC,gCACE,WAAAhmD,GACA,eAAAE,GACwB,wBAAAC,GAClBjE,MAAAA,GACQ,cAAAoE,GAEdC,UAAAA;AAAAA,IAAAA;AAAAA,IACAwlD;AAAAA,EAAAA,GAqGF,GAAc/yD,QAAAkJ,GAAAlJ,EAAA,EAAA,IAAA6L,EAAApG,MAAAzF,QAAAsN,GAAAtN,QAAAuN,GAAAvN,QAAA+yD,IAAA/yD,QAAAgzD,KAAAA,IAAAhzD,EAAA,EAAA,GA7GdgzD;AA6Gc,GCpPZj6B,KAAmB;AAAA,EACvB7vB,MAAM;AAAA,EACN+pD,kBAAkB,CAAA;AAAA,EAClBC,eAAe,CAAA;AAAA,EACf7sD,OAAO;AACT,GAEM8sD,KAA0B,qBAE1Bt6B,KAAgBA,CAACC,MAAuB,GAAGq6B,EAAuB,IAAIr6B,CAAU,IAEhFs6B,KAAWA,CAAC/qC,GAAkBtd,MAClCsd,EAAOvgB,SAASiD,CAAE,IAAIsd,EAAO7gB,OAAQ9E,OAAUA,MAAUqI,CAAE,IAAI,CAAC,GAAGsd,GAAQtd,CAAE,GAEzEwkB,KAAcA,CAAClH,GAAkBtd,GAAYukB,MAC7CA,IACKjH,EAAOvgB,SAASiD,CAAE,IAAIsd,IAAS,CAAC,GAAGA,GAAQtd,CAAE,IAG/Csd,EAAO7gB,OAAQ9E,CAAAA,MAAUA,MAAUqI,CAAE,GAGxCsoD,KAAuBA,CAACt5B,OAAyB;AAAA,EACrD7wB,MAAM6wB,EAAM7wB;AAAAA,EACZ+pD,kBAAkBl5B,EAAMk5B;AAAAA,EACxBC,eAAen5B,EAAMm5B;AAAAA,EACrB7sD,OAAO0zB,EAAM1zB;AACf,IAEaitD,KAAqBA,CAAC90C,MAAuC;AACxE,QAAM;AAAA,IAAEsa,YAAAA;AAAAA,IAAYG,cAAAA;AAAAA,EAAAA,IAAiBza,GAC/Bmb,IAAW;AAAA,IAAE,GAAGZ;AAAAA,IAAkB,GAAGE;AAAAA,EAAAA;AAE3C,SAAOW,GAAAA,EACLC,GACG9E,CAAAA,OAAS;AAAA,IACR,GAAG4E;AAAAA,IACH45B,aAAaA,MAAMx+B,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO7wB,MAAM;AAAA,IAAA,EAAO;AAAA,IAC5DsqD,cAAcA,MAAMz+B,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO7wB,MAAM;AAAA,IAAA,EAAQ;AAAA,IAC9DuqD,eAAeA,MAAM1+B,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO7wB,MAAM,CAAC6wB,EAAM7wB;AAAAA,IAAAA,EAAO;AAAA,IACrEwqD,eAAgBjd,CAAAA,MACd1hB,EAAKgF,CAAAA,OAAW;AAAA,MACd,GAAGA;AAAAA,MACHk5B,kBAAkBG,GAASr5B,EAAMk5B,kBAAkBxc,CAAS;AAAA,IAAA,EAC5D;AAAA,IACJkd,YAAa9iD,CAAAA,MACXkkB,EAAKgF,CAAAA,OAAW;AAAA,MACd,GAAGA;AAAAA,MACHm5B,eAAeE,GAASr5B,EAAMm5B,eAAeriD,CAAM;AAAA,IAAA,EACnD;AAAA,IACJ+iD,oBAAoBA,CAACnd,GAAWnnB,MAC9ByF,EAAKgF,CAAAA,OAAW;AAAA,MACd,GAAGA;AAAAA,MACHk5B,kBAAkB1jC,GAAYwK,EAAMk5B,kBAAkBxc,GAAWnnB,CAAQ;AAAA,IAAA,EACzE;AAAA,IACJukC,iBAAiBA,CAAChjD,GAAQye,MACxByF,EAAKgF,CAAAA,OAAW;AAAA,MACd,GAAGA;AAAAA,MACHm5B,eAAe3jC,GAAYwK,EAAMm5B,eAAeriD,GAAQye,CAAQ;AAAA,IAAA,EAChE;AAAA,IACJwkC,UAAWztD,CAAAA,MAAU0uB,EAAKgF,CAAAA,OAAW;AAAA,MAAE,GAAGA;AAAAA,MAAO1zB,OAAAA;AAAAA,IAAAA,EAAQ;AAAA,IACzD20B,OAAOA,MAAMjG,EAAIgE,EAAgB;AAAA,EAAA,IAEnC;AAAA,IACEj4B,MAAM+3B,GAAcC,CAAU;AAAA,IAC9Bje,SAASugB,GAAkBxgB,EAAoB;AAAA,IAC/CygB,YAAYg4B;AAAAA,EAAAA,CAEhB,CACF;AACF,GAEMU,yBAA2Bj/B,IAAAA,GAEpBk/B,KAAkBA,CAACl7B,GAAoBG,MAA4C;AAC9F,QAAMuC,IAAgBu4B,GAAqB/+B,IAAI8D,CAAU;AAEzD,MAAI0C;AACF,WAAOA;AAGT,QAAMC,IAAQ63B,GAAmB;AAAA,IAAEx6B,YAAAA;AAAAA,IAAYG,cAAAA;AAAAA,EAAAA,CAAc;AAC7D86B,SAAAA,GAAqBh/B,IAAI+D,GAAY2C,CAAK,GAEnCA;AACT,GAEaw4B,KAAkBA,CAAAn7B,GAAA6C,GAAA1C,MAAA;AAAA,QAAAj5B,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAi5B,KAAAj5B,SAAA84B,KAKfz4B,IAAA2zD,GAAgBl7B,GAAYG,CAAY,GAACj5B,OAAAi5B,GAAAj5B,OAAA84B,GAAA94B,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAChD47B,GADOv7B,GACSs7B,CAAQ;AAAC,GCnHrBu4B,KAAgBn0D,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC3B;AAAA,IAAA+B,UAAAA;AAAAA,EAAAA,IAAqBjC;AAErB,MAAI,CAACiC;AAAQ,WACJ;AACR,MAAA3B;AAAA,SAAAL,SAAAgC,KAGC3B,IAAA,gBAAAkB,EAACb,GAAA,EAAO,IAAA,MAAc,UAAA,UAAgB,QAAA,KAAa,UAAA,UAChDsB,UAAAA,EAAAA,CACH,GAAMhC,OAAAgC,GAAAhC,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFNK;AAEM,GCjBG8zD,KAAsB,UCQtBC,KAAgBr0D,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC3B;AAAA,IAAA+B,UAAAA;AAAAA,EAAAA,IAAqBjC;AAAM,MAAAM;AAAA,SAAAL,SAAAgC,KAGzB3B,IAAA,gBAAAkB,EAACO,IAAA,EACa,eAAA,kBACJ,SAAA,iBACF,OAAA,UACAqyD,MAAAA,IACH,IAAA,MACM,UAAA,UACL,KAAA,KACG,QAAA,KACH,KAAA,KAEJ,UAAA,gBAAA5yD,EAACO,IAAA,EAAY,MAAA,KAAS,MAAA,KACnBE,UAAAA,EAAAA,CACH,GACF,GAAShC,OAAAgC,GAAAhC,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAdTK;AAcS,GCjBPg0D,KAAgB,KAChBC,KAAoB,KACpBC,KAAoB,KAEpBpmB,KAAQA,CAACzrC,GAAe0rC,GAAajH,MAAgBD,KAAKkH,IAAIlH,KAAKC,IAAIzkC,GAAO0rC,CAAG,GAAGjH,CAAG,GAEvFqtB,KAAsBA,CAACnuD,GAAyBouD,IAAeJ,OAAkB;AACrF,MAAI,OAAOhuD,KAAU,SAAU,QAAOA;AACtC,MAAI,OAAOA,KAAU,UAAU;AAC7B,UAAMquD,IAASC,SAAStuD,GAAO,EAAE;AACjC,QAAI,CAACuhB,OAAOC,MAAM6sC,CAAM,EAAG,QAAOA;AAAAA,EACpC;AACA,SAAOD;AACT,GAEaG,KAAU70D,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACrB;AAAA,IAAA64B,YAAAA;AAAAA,IAAAge,UAAAA;AAAAA,IAAAV,cAAAA;AAAAA,IAAA2I,0BAAAA;AAAAA,IAAA74C,QAAAA;AAAAA,IAAA2uD,QAAAA;AAAAA,IAAAxuD,OAAAA;AAAAA,IAAAyuD,UAAAz0D;AAAAA,IAAAopD,YAAAlpD;AAAAA,IAAAw0D,yBAAAA;AAAAA,IAAAz+C,eAAAA;AAAAA,IAAAmiC,YAAAA;AAAAA,IAAArvC,cAAAA;AAAAA,IAAA9C,WAAA7F;AAAAA,IAAAg0D,cAAAA;AAAAA,IAAAtuD,UAAAvF;AAAAA,IAAAiT,UAAA9S;AAAAA,IAAA69C,YAAA39C;AAAAA,EAAAA,IAmBIlB,GAXF+0D,IAAAz0D,MAAAG,SAAA,KAAAH,GACAopD,IAAAlpD,MAAAC,SAAA,wBAAAD,GAKA+F,IAAA7F,MAAAD,SAAA,KAAAC,GAEA0F,IAAAvF,MAAAJ,SAAA8zD,KAAA1zD,GACAiT,IAAA9S,MAAAP,SAAA+zD,KAAAxzD,GACA69C,IAAA39C,MAAAT,SAAA,KAAAS,GAGF+zD,IAAoBlrD,GAA8B,IAAI;AAAE,MAAA5I;AAAA,EAAAlB,EAAA,CAAA,MAAAy0D,KAAAz0D,SAAAqG,KAEnCnF,IAAAszD,GAAoBnuD,GAAOouD,CAAY,GAACz0D,OAAAy0D,GAAAz0D,OAAAqG,GAAArG,OAAAkB,KAAAA,IAAAlB,EAAA,CAAA;AAA7D,QAAAi1D,IAAqB/zD;AAAyC,MAAAC;AAAA,EAAAnB,SAAA+0D,KAExD5zD,IAAA4zD,IAAA;AAAA,IAAA9B,kBAA8C8B;AAAAA,EAAAA,IAA9C,CAAA,GAA4E/0D,OAAA+0D,GAAA/0D,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAA,MAAAkF;AAAA,EAAAlF,EAAA,CAAA,MAAAi1D,KAAAj1D,SAAAmB,KAD7D+D,IAAA;AAAA,IAAA,GACf/D;AAAAA,IAA4EkF,OACzE4uD;AAAAA,EAAAA,GACRj1D,OAAAi1D,GAAAj1D,OAAAmB,GAAAnB,OAAAkF,KAAAA,IAAAlF,EAAA,CAAA;AAHD,QAAAi5B,IAAqB/zB,GAKrBgE,IAAa+qD,GAAgBn7B,GAAY3tB,IAAuB8tB,CAAY,GAC5Ei8B,IAAuBjB,GAAgBn7B,GAAY/sB,IAAwBktB,CAAY,GACvFg6B,IAAyBgB,GAAgBn7B,GAAY5sB,IAAmC+sB,CAAY,GACpGi6B,IAAsBe,GAAgBn7B,GAAY/rB,IAAgCksB,CAAY,GAC9Fy6B,IAAsBO,GAAgBn7B,GAAYiE,IAAgC9D,CAAY,GAC9F06B,IAAmBM,GAAgBn7B,GAAYkE,IAA6B/D,CAAY;AAAE,MAAA7tB,GAAAT;AAAA,EAAA3K,EAAA,CAAA,MAAAoJ,KAAApJ,SAAAkJ,KAEhFyB,IAAAA,MAAA;AACRvB,IAAAA,IAAeF,CAAI;AAAA,EAAC,GACnBkC,IAAA,CAAChC,GAAcF,CAAI,GAAClJ,OAAAoJ,GAAApJ,OAAAkJ,GAAAlJ,QAAAoL,GAAApL,QAAA2K,MAAAS,IAAApL,EAAA,EAAA,GAAA2K,IAAA3K,EAAA,EAAA,IAFvBmK,GAAUQ,GAEPS,CAAoB;AAEM,QAAAS,IAAAqpD,KAAAD;AAA8B,MAAAjoD;AAAA,EAAAhN,EAAA,EAAA,MAAA6T,KAAA7T,UAAAmG,KAAAnG,EAAA,EAAA,MAAA6L,KAApCmB,IAAAmhC,GAAMtiC,GAAgC1F,GAAU0N,CAAQ,GAAC7T,QAAA6T,GAAA7T,QAAAmG,GAAAnG,QAAA6L,GAAA7L,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA;AAAhF,QAAAm1D,IAAuBnoD;AACvB,MAAI,CAAC9D,KAAD4rD;AAAiB,WACZ;AAGT,QAAAM,IAAiB9uD,IAAA,GAAe6uD,CAAc,OAAQ9uD,KAAA,GAAY4uD,CAAY;AAAM,MAAA/nD;AAAA,EAAAlN,UAAAkG,KAiBhFgH,uBAACknD,mBAAsB,GAAgBp0D,QAAAkG,GAAAlG,QAAAkN,MAAAA,KAAAlN,EAAA,EAAA;AAAA,MAAAmN,IAAAG;AAAA,EAAAtN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAMtB6L,KAAA;AAAA,IAAA2G,SAAW;AAAA,IAAOiF,OAAS;AAAA,MAAAunC,WAAa;AAAA,IAAA;AAAA,EAAS,GAClDhzC,KAAA;AAAA,IAAAyL,OACL;AAAA,MAAA5S,UAAY;AAAA,MAAME,OAAS;AAAA,MAAMoL,WAAa;AAAA,MAAMqC,SAAW;AAAA,MAAMuhD,eAAiB;AAAA,IAAA;AAAA,EAAS,GACvGr1D,QAAAmN,IAAAnN,QAAAsN,OAAAH,KAAAnN,EAAA,EAAA,GAAAsN,KAAAtN,EAAA,EAAA;AAAA,MAAAuN;AAAA,EAAAvN,EAAA,EAAA,MAAAo2C,KAAAp2C,EAAA,EAAA,MAAA++C,KAAA/+C,UAAAypD,KAAAzpD,EAAA,EAAA,MAAAkzD,KAAAlzD,EAAA,EAAA,MAAAizD,KAAAjzD,EAAA,EAAA,MAAAsW,KAAAtW,EAAA,EAAA,MAAAy4C,KAAAz4C,UAAA82C,KAAA92C,EAAA,EAAA,MAAA2zD,KAAA3zD,EAAA,EAAA,MAAA0zD,KAAA1zD,UAAA4+C,KAPHrxC,KAAA,gBAAAhM,EAACwM,IAAA,EACM,MAAA,KACF,IAAA,MACUinD,aAAAA,GACE,eAAA7nD,IACD,cAAAG,IAId,UAAA,gBAAA/L,EAACb,GAAA,EAAM,GAAA,QAAY,MAAA,KAAS,MAAA,YAAmB,SAAA,QAAqB,eAAA,UACjEo2C,UAAAA,EAAQnzC,WAAY,IACnB,gBAAApC,EAACI,GAAA,EAAe,WAAA,uBAA4B,OAAA,YAAa,GAAA,KACtD8nD,UAAAA,GACH,IAEA,gBAAAloD,EAACu9C,IAAA,EACWhI,UAAAA,GACUmc,oBAAAA,GACHC,iBAAAA,GACH9c,cAAAA,GACY2I,0BAAAA,GACf,YAAA,WACA,YAAA,MACIzoC,eAAAA,GACHmiC,YAAAA,GACKib,iBAAAA,GACHC,cAAAA,GACF/U,YAAAA,GACDoW,WAAAA,EAAAA,CAAW,EAAA,CAG5B,GACF,GAAah1D,QAAAo2C,GAAAp2C,QAAA++C,GAAA/+C,QAAAypD,GAAAzpD,QAAAkzD,GAAAlzD,QAAAizD,GAAAjzD,QAAAsW,GAAAtW,QAAAy4C,GAAAz4C,QAAA82C,GAAA92C,QAAA2zD,GAAA3zD,QAAA0zD,GAAA1zD,QAAA4+C,GAAA5+C,QAAAuN,MAAAA,KAAAvN,EAAA,EAAA;AAAA,MAAAwN;AAAA,EAAAxN,UAAA60D,KAEbrnD,uBAAC0mD,mBAAsB,GAAgBl0D,QAAA60D,GAAA70D,QAAAwN,MAAAA,KAAAxN,EAAA,EAAA;AAAA,MAAAyN;AAAA,SAAAzN,EAAA,EAAA,MAAAkN,MAAAlN,EAAA,EAAA,MAAAuN,MAAAvN,EAAA,EAAA,MAAAwN,MAAAxN,UAAAo1D,KAlDzC3nD,KAAA,gBAAA7L,EAAC6E,IAAA,EACI,IAAA,SACS,eAAA,WACF,WAAA,UACD,UAAA,YACP,GAAA,QACC2uD,GAAAA,GACGA,MAAAA,GACAA,MAAAA,GACM,YAAA,GACK,kBAAA,OACA,kBAAA,gBACd,IAAA,MAEHloD,UAAAA;AAAAA,IAAAA;AAAAA,IAEAK;AAAAA,IAkCAC;AAAAA,EAAAA,GACF,GAAOxN,QAAAkN,IAAAlN,QAAAuN,IAAAvN,QAAAwN,IAAAxN,QAAAo1D,GAAAp1D,QAAAyN,MAAAA,KAAAzN,EAAA,EAAA,GAnDPyN;AAmDO;AApGY,SAAAtC,GAAA4uB,GAAA;AAAA,SA8B+BA,EAAK7wB;AAAK;AA9BzC,SAAA6C,GAAAyxB,GAAA;AAAA,SA+ByCzD,EAAK1zB;AAAM;AA/BpD,SAAA6F,GAAAuxB,GAAA;AAAA,SAgC2C1D,EAAKk5B;AAAiB;AAhCjE,SAAAlmD,GAAA2wB,GAAA;AAAA,SAiCwC3D,EAAKm5B;AAAc;AAjC3D,SAAAn2B,GAAAY,GAAA;AAAA,SAkCwC5D,EAAK25B;AAAc;AAlC3D,SAAA12B,GAAAY,GAAA;AAAA,SAmCqC7D,EAAK45B;AAAW;ACjDrE,MAAM2B,KAAqBv1D,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAChC;AAAA,IAAAa,MAAAA;AAAAA,IAAAy0D,eAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,EAAAA,IAAkDz1D;AAAM,MAAAM;AAAA,EAAAL,SAAAc,KAMhDT,sBAACyB,IAAA,EAAW,KAAA,KAAS,MAAA,KAAS,MAAA,KAC5B,UAAA;AAAA,IAAA,gBAAAP,EAAAP,GAAA,MAAA,EAAkB,MAAA,OAChB,4BAAAA,GAAA,UAAA,EAAuBF,MAAAA,EAAAA,CAAI,EAAA,CAC7B;AAAA,sBACCa,GAAA,EAAe,WAAA,kBAAiB,UAAA,IAC9Bb,UAAAA,EAAAA,CACH;AAAA,EAAA,GACF,GAASd,OAAAc,GAAAd,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAO;AAAA,EAAAP,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACTf,sBAAC+L,IAAA,EAAkB,MAAA,GAAA,CAAE,GAAItM,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAAA,MAAAS;AAAA,EAAAT,SAAAK,KAV7BI,mCAAc,SAAA,IACZ,UAAA,gBAAAmB,EAACs0B,IAAA,EAAoB,cAAA,KAAY,SAAA,SAAa,MAAA,MAAW,OAAA,QAAsB,gBAAA,cAC7E71B,UAAAA;AAAAA,IAAAA;AAAAA,IAQAE;AAAAA,EAAAA,EAAAA,CACF,EAAA,CACF,GAAeP,OAAAK,GAAAL,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAUCV,IAAA,gBAAAW,EAACmD,IAAA,EAAS+wD,IAAAA,IAAoB,SAAA,QAAM,GAAGz1D,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,EAAAf,EAAA,CAAA,MAAAw1D,KAAAx1D,SAAAu1D,KATvDx0D,sBAACsM,IAAA,EACC,UAAA,gBAAA9L,EAAA0L,EAAA,YAAA,EACE,UAAA,gBAAA1L,EAAA0L,EAAA,SAAA,EAAmB,MAAA,SAAW,IAAA,MAC5B,UAAA,gBAAA1L,EAAA0L,EAAA,MAAA,EAAiB,OAAA,YAAW,SAAA,IAC1B,UAAA,gBAAA1L,EAAC4K,IAAA,EACC,SAAA,IACQ,SAAA,WACL,IAAA,YACIopD,OAAAA,GACD,MAAA30D,GACM40D,YAAAA,GAAgB,GAEhC,EAAA,CACF,GACF,GACF,GAASx1D,OAAAw1D,GAAAx1D,OAAAu1D,GAAAv1D,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,SAAAjB,EAAA,CAAA,MAAAS,KAAAT,UAAAe,KA7BXE,gCACER,UAAAA;AAAAA,IAAAA;AAAAA,IAaAM;AAAAA,EAAAA,GAgBF,GAAYf,OAAAS,GAAAT,QAAAe,GAAAf,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA,GA9BZiB;AA8BY,GClCHy0D,KAAS1uD,GAAMC,WAA0C,SAAAlH,GAAAmH,GAAA;AAAA,QAAAlH,IAAAC,EAAA,EAAA;AAAA,MAAA+B,GAAA2zD,GAAAvvD,GAAA6pC,GAAA5vC,GAAAu1D,GAAAC;AAAA,EAAA71D,SAAAD,KACpE;AAAA,IAAA41D,YAAAA;AAAAA,IAAA3zD,UAAAA;AAAAA,IAAAiuC,SAAAA;AAAAA,IAAA4lB,YAAAA;AAAAA,IAAAD,YAAAA;AAAAA,IAAApqD,UAAAnL;AAAAA,IAAA,GAAA+F;AAAAA,EAAAA,IAA6FrG,GAAMC,OAAAD,GAAAC,OAAAgC,GAAAhC,OAAA21D,GAAA31D,OAAAoG,GAAApG,OAAAiwC,GAAAjwC,OAAAK,GAAAL,OAAA41D,GAAA51D,OAAA61D,MAAA7zD,IAAAhC,EAAA,CAAA,GAAA21D,IAAA31D,EAAA,CAAA,GAAAoG,IAAApG,EAAA,CAAA,GAAAiwC,IAAAjwC,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,GAAA41D,IAAA51D,EAAA,CAAA,GAAA61D,IAAA71D,EAAA,CAAA;AAApC,QAAAwL,IAAAnL,MAAAG,SAAA,KAAAH,GAC/Dy1D,IAA0BtqD,IAAA,gBAAA;AAAqC,MAAAjL;AAAA,EAAAP,EAAA,CAAA,MAAA21D,KAAA31D,SAAAkH,KAI3D3G,wCAA+B2G,KAAAA,GAAG,GAAMyuD,GAAU,GAAI31D,OAAA21D,GAAA31D,OAAAkH,GAAAlH,QAAAO,KAAAA,IAAAP,EAAA,EAAA;AAAA,MAAAS;AAAA,EAAAT,UAAA41D,KAGjDn1D,IAAAm1D,uBACCG,GAAA,gBAAA,EAAuC,UAAAH,GAAUI,KAAQJ,UAAAA,GAAUK,GAAAA,CAAK,GACzEj2D,QAAA41D,GAAA51D,QAAAS,KAAAA,IAAAT,EAAA,EAAA;AAAA,MAAAY;AAAA,EAAAZ,UAAAS,KAHHG,sBAAAm1D,GAAA,OAAA,EAAiC,cAAA,QAC9Bt1D,UAAAA,GAGH,GAAqBT,QAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AAAA,MAAAe;AAAA,EAAAf,UAAA61D,KACpB90D,IAAA80D,uBAAcE,GAAA,WAAA,EAAkC,UAAAF,EAAUG,KAAOH,UAAAA,EAAUI,GAAAA,CAAI,GAAyBj2D,QAAA61D,GAAA71D,QAAAe,KAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,EAAA,MAAA81D,KAAA91D,UAAAY,KAAAZ,EAAA,EAAA,MAAAe,KAN3GE,oCAAmC,cAAA,MAAa60D,QAAAA,GAC9Cl1D,UAAAA;AAAAA,IAAAA;AAAAA,IAKCG;AAAAA,EAAAA,GACH,GAAuBf,QAAA81D,GAAA91D,QAAAY,GAAAZ,QAAAe,GAAAf,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAAkB;AAAA,EAAAlB,EAAA,EAAA,MAAAgC,KAAAhC,UAAA81D,KACtB50D,IAAAc,KAAY,QAAQ,gBAAAT,EAAAw0D,GAAA,OAAA,EAA4BD,QAAAA,GAAoB9zD,UAAAA,GAAS,GAAqBhC,QAAAgC,GAAAhC,QAAA81D,GAAA91D,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB;AAAA,SAAAnB,EAAA,EAAA,MAAAwL,KAAAxL,EAAA,EAAA,MAAA81D,KAAA91D,EAAA,EAAA,MAAAoG,KAAApG,UAAAiwC,KAAAjwC,EAAA,EAAA,MAAAO,KAAAP,EAAA,EAAA,MAAAiB,KAAAjB,EAAA,EAAA,MAAAkB,KAVrGC,IAAA,gBAAAS,EAAAm0D,GAAA,MAAA,EAAwB9lB,KAAAA,GAAmBzkC,UAAAA,GAAkBsqD,QAAAA,GAAiB,GAAM1vD,GAClF7F,UAAAA;AAAAA,IAAAA;AAAAA,IACAU;AAAAA,IAQCC;AAAAA,EAAAA,GACH,GAAoBlB,QAAAwL,GAAAxL,QAAA81D,GAAA91D,QAAAoG,GAAApG,QAAAiwC,GAAAjwC,QAAAO,GAAAP,QAAAiB,GAAAjB,QAAAkB,GAAAlB,QAAAmB,KAAAA,IAAAnB,EAAA,EAAA,GAXpBmB;AAWoB,CAEvB,GCPK43B,KAA0C;AAAA,EAAEm9B,cAAc,CAAA;AAAG,GAE7DC,KAAkB,4BAElBt9B,KAAgBA,CAACC,MAAuB,GAAGq9B,EAAe,IAAIr9B,CAAU,IAExEs9B,KAAmBA,CAACC,GAA0CC,MAClED,MAAaC,IAAkB,WAAW,UAEtCC,KAAcA,CAClBC,GACAlhD,GACA5S,MACG;AACH,MAAIA,MAAUlC,QAAW;AACvB,QAAI,EAAE8U,KAAOkhD,GAAY,QAAOA;AAChC,UAAM;AAAA,MAAE,CAAClhD,CAAG,GAAGmhD;AAAAA,MAAU,GAAGrwD;AAAAA,IAAAA,IAASowD;AACrC,WAAOpwD;AAAAA,EACT;AACA,SAAIowD,EAAUlhD,CAAG,MAAM5S,IAAc8zD,IAC9B;AAAA,IAAE,GAAGA;AAAAA,IAAW,CAAClhD,CAAG,GAAG5S;AAAAA,EAAAA;AAChC,GAEMg0D,KAAiBA,CAACF,GAA+ClhD,GAAaghD,MAA6B;AAC/G,QAAMlsD,IAAUgsD,GAAiBI,EAAUlhD,CAAG,GAAGghD,CAAe;AAChE,SAAOC,GAAYC,GAAWlhD,GAAKlL,MAAY,WAAW,UAAU,QAAQ;AAC9E,GAEMipD,KAAuBA,CAACt5B,OAA+B;AAAA,EAAEm8B,cAAcn8B,EAAMm8B;AAAa,IAEnFS,KAA2BA,CAACn4C,MACvCob,GAAAA,EACEC,GACG9E,CAAAA,OAAS;AAAA,EACR,GAAGgE;AAAAA,EACH69B,QAAQA,CAACthD,GAAK5S,MACZqyB,EAAKgF,CAAAA,OAAW;AAAA,IAAE,GAAGA;AAAAA,IAAOm8B,cAAcK,GAAYx8B,EAAMm8B,cAAc5gD,GAAK5S,CAAK;AAAA,EAAA,EAAI;AAAA,EAC1Fm0D,WAAWA,CAACvhD,GAAKghD,MACfvhC,EAAKgF,CAAAA,OAAW;AAAA,IAAE,GAAGA;AAAAA,IAAOm8B,cAAcQ,GAAe38B,EAAMm8B,cAAc5gD,GAAKghD,CAAe;AAAA,EAAA,EAAI;AAAA,EACvGQ,UAAWxhD,CAAAA,MACTyf,EAAKgF,CAAAA,OAAW;AAAA,IAAE,GAAGA;AAAAA,IAAOm8B,cAAcK,GAAYx8B,EAAMm8B,cAAc5gD,GAAK9U,MAAS;AAAA,EAAA,EAAI;AAAA,EAC9Fw6B,OAAOA,MAAMjG,EAAIgE,EAAgB;AACnC,IACA;AAAA,EACEj4B,MAAM+3B,GAAcra,EAAQsa,UAAU;AAAA,EACtCje,SAASugB,GAAkBxgB,EAAoB;AAAA,EAC/CygB,YAAYg4B;AACd,CACF,CACF,GAEI0D,yBAAoBjiC,IAAAA,GAEbkiC,KAAwBA,CAACl+B,MAAuB;AAC3D,QAAMm+B,IAAWF,GAAc/hC,IAAI8D,CAAU;AAC7C,MAAIm+B,EAAU,QAAOA;AACrB,QAAMx7B,IAAQk7B,GAAyB;AAAA,IAAE79B,YAAAA;AAAAA,EAAAA,CAAY;AACrDi+B,SAAAA,GAAchiC,IAAI+D,GAAY2C,CAAK,GAC5BA;AACT,GAEay7B,KAAwBA,CAAAp+B,GAAA6C,MAAA;AAAA,QAAA37B,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,SAAA84B,KACrBz4B,IAAA22D,GAAsBl+B,CAAU,GAAC94B,OAAA84B,GAAA94B,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GACxC47B,GADOv7B,GACSs7B,CAAQ;AAAC,GC/E5Bw7B,KAAgBA,CAACzvD,GAAkBm+C,MAAsB,OAAOn+C,KAAU,WAAWA,IAAQm+C,GAEtFuR,KAAoBA,CAC/Bf,GACAC,MACuBD,MAAaC,IAAkB,WAAW,UAE7De,KAAgBA,CAACzjB,GAAoB0jB,MACzCF,GAAkBE,EAAc1jB,EAAK7oC,EAAE,GAAG6oC,EAAK0iB,eAAe,MAAM,SAEhEiB,KAAcA,CAAC7jB,GAAuB4jB,MAAsE;AAChH,MAAIE,IAAU;AACd,QAAMrsC,IAAuB,CAAA;AAC7B,aAAWyoB,KAAQF,GAAO;AACxB,QAAI,CAAC2jB,GAAczjB,GAAM0jB,CAAa,GAAG;AACvCE,MAAAA,IAAU;AACV;AAAA,IACF;AACA,QAAI5jB,EAAK5xC,YAAY4xC,EAAK5xC,SAAS2B,SAAS,GAAG;AAC7C,YAAM8zD,IAAmBF,GAAY3jB,EAAK5xC,UAAUs1D,CAAa;AACjE,UAAIG,MAAqB7jB,EAAK5xC,UAAU;AACtCw1D,QAAAA,IAAU,IACVrsC,EAAK9B,KAAK;AAAA,UAAE,GAAGuqB;AAAAA,UAAM5xC,UAAUy1D;AAAAA,QAAAA,CAAkB;AACjD;AAAA,MACF;AAAA,IACF;AACAtsC,IAAAA,EAAK9B,KAAKuqB,CAAI;AAAA,EAChB;AACA,SAAO4jB,IAAUrsC,IAAOuoB;AAC1B,GAEagkB,KAAwBA,CACnC5gB,GACA6gB,GACAL,MACsB;AACtB,MAAIE,IAAU;AACd,QAAMrsC,IAA0B,CAAA;AAChC,aAAW6rB,KAAWF,GAAU;AAC9B,QAAIsgB,GAAkBO,EAAiB3gB,EAAQjsC,EAAE,GAAGisC,EAAQsf,eAAe,MAAM,UAAU;AACzFkB,MAAAA,IAAU;AACV;AAAA,IACF;AACA,UAAMI,IAAgBL,GAAYvgB,EAAQtD,OAAO4jB,CAAa;AAC9D,QAAIM,MAAkB5gB,EAAQtD,OAAO;AACnC8jB,MAAAA,IAAU,IACVrsC,EAAK9B,KAAK;AAAA,QAAE,GAAG2tB;AAAAA,QAAStD,OAAOkkB;AAAAA,MAAAA,CAAe;AAC9C;AAAA,IACF;AACAzsC,IAAAA,EAAK9B,KAAK2tB,CAAO;AAAA,EACnB;AACA,SAAOwgB,IAAUrsC,IAAO2rB;AAC1B,GAaM+gB,KAAqBA,CACzB7gB,GACA2gB,GACAj2D,GACA8c,MAC0B;AAC1B,QAAM83C,IAAkBtf,EAAQsf,oBAAoB,IAC9CwB,IAAYV,GAAkBO,EAAiB3gB,EAAQjsC,EAAE,GAAGurD,CAAe;AACjF,SAAO;AAAA,IACLhhD,KAAK,WAAW0hC,EAAQjsC,EAAE;AAAA,IAC1BrD,OAAOsvC,EAAQtvC,SAASsvC,EAAQjsC;AAAAA,IAChCwH,SAASA,MAAM7Q,EAAQo5C,gBAAgB9D,EAAQjsC,IAAIurD,CAAe;AAAA,IAClEzmD,YAAYioD,MAAc,UAAUt5C,EAAQu5C,YAAY;AAAA,EAAA;AAE5D,GAEMC,KAAkBA,CACtBpkB,GACA0jB,GACA51D,GACA8c,MAC0B;AAC1B,QAAM83C,IAAkB1iB,EAAK0iB,oBAAoB,IAC3CwB,IAAYV,GAAkBE,EAAc1jB,EAAK7oC,EAAE,GAAGurD,CAAe,GAErE2B,IAASrkB,EAAKskB,YAAY;AAChC,SAAO;AAAA,IACL5iD,KAAK,QAAQs+B,EAAK7oC,EAAE;AAAA,IACpBrD,OAAOyvD,GAAcvjB,EAAKlsC,OAAOksC,EAAK7oC,EAAE;AAAA,IACxCU,YAAYwsD;AAAAA,IACZ1lD,SAAS0lD,IAAS,MAAM;AAAA,IAAC,IAAI,MAAMv2D,EAAQg3C,aAAa9E,EAAK7oC,IAAIurD,CAAe;AAAA,IAChFzmD,YAAYooD,KAAUH,MAAc,UAAUt5C,EAAQu5C,YAAY;AAAA,EAAA;AAEtE,GAEaI,KAAiCA,CAC5CrhB,GACA6gB,GACAL,GACA51D,GACA8c,MAC4B;AAC5B,QAAM29B,IAAkC,CAAA;AAExC,aAAWnF,KAAWF;AAIpB,QAFIE,EAAQtvC,SAAOy0C,EAAO9yB,KAAKwuC,GAAmB7gB,GAAS2gB,GAAkBj2D,GAAS8c,CAAO,CAAC,GACrE44C,GAAkBO,EAAiB3gB,EAAQjsC,EAAE,GAAGisC,EAAQsf,eAAe,MACvE;AACzB,iBAAW1iB,KAAQoD,EAAQtD;AACzByI,QAAAA,EAAO9yB,KAAK2uC,GAAgBpkB,GAAM0jB,GAAe51D,GAAS8c,CAAO,CAAC;AAItE29B,SAAAA,EAAO9yB,KAAK;AAAA,IAAE/T,KAAK;AAAA,IAAsB5N,OAAO;AAAA,IAAoB6K,SAAS7Q,EAAQ02D;AAAAA,EAAAA,CAAY,GAC7F12D,EAAQ22D,gBACVlc,EAAO9yB,KAAK;AAAA,IAAE/T,KAAK;AAAA,IAAiB5N,OAAO;AAAA,IAAe6K,SAAS7Q,EAAQ22D;AAAAA,EAAAA,CAAc,GAGpFlc;AACT,GCtHamc,KAAoB,CAC/BC,GACArC,GACAsC,MACQ;AACR,MAAIhB,IAAU;AACd,QAAMrsC,IAAY,CAAA;AAClB,aAAWna,KAAaunD,GAAY;AAClC,QAAIvnD,EAAU8jD,aAAa,IAAM;AAC/B3pC,MAAAA,EAAK9B,KAAKrY,CAAS;AACnB;AAAA,IACF;AAEA,QADkBomD,GAAkBlB,EAAasC,EAAOxnD,CAAS,CAAC,GAAGA,EAAUslD,eAAe,MAC5E,UAAU;AAC1BkB,MAAAA,IAAU;AACV;AAAA,IACF;AACArsC,IAAAA,EAAK9B,KAAKrY,CAAS;AAAA,EACrB;AACA,SAAOwmD,IAAUrsC,IAAOotC;AAC1B,GAWaE,KAAgC,CAC3CF,GACArC,GACAx0D,GACA82D,GACAh6C,MAC4B;AAC5B,QAAM29B,IAAkC,CAAA;AACxC,MAAIuc,IAAoB;AAExB,aAAW1nD,KAAaunD,GAAY;AAClC,QAAIvnD,EAAU8jD,aAAa,GAAM;AACjC4D,IAAAA,KAAqB;AACrB,UAAMpjD,IAAMkjD,EAAOxnD,CAAS,GACtBslD,IAAkBtlD,EAAUslD,oBAAoB,IAChDwB,IAAYV,GAAkBlB,EAAa5gD,CAAG,GAAGghD,CAAe;AACtEna,IAAAA,EAAO9yB,KAAK;AAAA,MACV/T,KAAK,OAAOA,CAAG;AAAA,MACf5N,OAAOsJ,EAAU3L,SAAS2L,EAAU2nD;AAAAA,MACpCpmD,SAASA,MAAM7Q,EAAQk3D,YAAYtjD,GAAKghD,CAAe;AAAA,MACvDzmD,YAAYioD,MAAc,UAAUt5C,EAAQu5C,YAAY;AAAA,IAAA,CACzD;AAAA,EACH;AAEA,SAAIW,MAAsB,KAE1Bvc,EAAO9yB,KAAK;AAAA,IAAE/T,KAAK;AAAA,IAAgB5N,OAAO;AAAA,IAAoB6K,SAAS7Q,EAAQ02D;AAAAA,EAAAA,CAAY,GACpFjc;AACT,GC9CM0c,KAAiB94D,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAMrB;AAAA,IAAAyB,SAAAA;AAAAA,IAAA8J,UAAAA;AAAAA,IAAAgT,SAAAA;AAAAA,IAAAtb,UAAAA;AAAAA,EAAAA,IAAiDnD;AAAM,MAAAM;AAAA,EAAAL,EAAA,CAAA,MAAA0B,KAAA1B,SAAAkD,KAElC7C,IAAA6O,CAAAA,MAAA;AACnBhM,IAAAA,EAASxB,EAAOoG,SAAUoH,CAAyE,IAA/DxN,EAAO8F,OAAQC,CAAAA,MAAUA,MAASyH,CAA6B,IAA1F,IAA2ExN,GAASwN,CAAM,CAAC;AAAA,EAAC,GACtGlP,OAAA0B,GAAA1B,OAAAkD,GAAAlD,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAFD,QAAA84D,IAAqBz4D,GAQWE,IAAAmB,EAAOiC,WAAY,IAAnB,MAAA;AAA+B,MAAAlD;AAAA,EAAAT,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KACvDb,IAAA,gBAAAc,EAACmD,IAAA,EAAS4H,IAAAA,IAAqB,SAAA,QAAM,GAAGtM,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,MAAAY;AAAA,EAAAZ,EAAA,CAAA,MAAA0B,EAAAiC,UAAA3D,EAAA,CAAA,MAAAwL,KAAAxL,EAAA,CAAA,MAAAO,KAH5CK,mCAAc,aACZ,UAAA,gBAAAgB,EAACs0B,IAAA,EAAY,MAAA,OAAc,SAAA,WAAc,KAAA,MAAe1qB,UAAAA,GACrD9J,UAAAA;AAAAA,IAAAA,EAAOiC;AAAAA,IAAQ;AAAA,IAAQpD;AAAAA,IACxBE;AAAAA,EAAAA,EAAAA,CACF,EAAA,CACF,GAAeT,EAAA,CAAA,IAAA0B,EAAAiC,QAAA3D,OAAAwL,GAAAxL,OAAAO,GAAAP,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAe;AAAA,MAAAf,EAAA,CAAA,MAAA0B,KAAA1B,SAAAwe,KAAAxe,EAAA,EAAA,MAAA84D,GAAA;AAAA,QAAA73D;AAAA,IAAAjB,EAAA,EAAA,MAAA0B,KAAA1B,UAAA84D,KAGE73D,IAAA6Y,OACX,gBAAAvY,EAAA0L,EAAA,MAAA,EAAqC,OAAA6M,EAAMpX,OAAQ,SAAA,IACjD,4BAACyJ,IAAA,EACC,SAAA,IACQ,SAAA,WACJ,IAAA2N,EAAMpX,OACH,OAAAoX,EAAMpS,OACD,YAAAhG,EAAOoG,SAAUgS,EAAMpX,KAAM,GAC7B,YAAAhB,EAAOoG,SAAUgS,EAAMpX,KAAwC,IAA9B,gBAAAnB,EAACo3B,IAAA,EAAY,MAAA,IAAE,IAAhDn4B,QACA,kBAAMs4D,EAAah/C,EAAMpX,KAAM,EAAA,CAAC,KARhCoX,EAAMpX,KAUtB,GACD1C,QAAA0B,GAAA1B,QAAA84D,GAAA94D,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA,GAZAe,IAAAyd,EAAOnQ,IAAKpN,CAYZ,GAACjB,OAAA0B,GAAA1B,OAAAwe,GAAAxe,QAAA84D,GAAA94D,QAAAe;AAAAA,EAAA;AAAAA,IAAAA,IAAAf,EAAA,EAAA;AAAA,MAAAiB;AAAA,EAAAjB,UAAAe,KAdNE,IAAA,gBAAAM,EAAA0L,EAAA,YAAA,EACE,UAAA,gBAAA1L,EAAA0L,EAAA,SAAA,EAAmB,MAAA,SAAW,IAAA,MAC3BlM,aAaH,GACF,GAAkBf,QAAAe,GAAAf,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAAkB;AAAA,SAAAlB,EAAA,EAAA,MAAAY,KAAAZ,UAAAiB,KAvBpBC,IAAA,gBAAAU,EAAAqL,EAAA,MAAA,EAA0B,eAAA,IACxBrM,UAAAA;AAAAA,IAAAA;AAAAA,IAMAK;AAAAA,EAAAA,GAiBF,GAAYjB,QAAAY,GAAAZ,QAAAiB,GAAAjB,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA,GAxBZkB;AAwBY,GAIH63D,KAAeh5D,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC1B;AAAA,IAAA+4D,eAAAA;AAAAA,IAAAj3C,cAAAA;AAAAA,IAAAF,aAAAA;AAAAA,IAAAnf,OAAAA;AAAAA,IAAAu2D,UAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAh3C,WAAAA;AAAAA,IAAAi3C,iBAAAA;AAAAA,IAAAn3C,eAAAA;AAAAA,IAAAqe,UAAAA;AAAAA,IAAApe,cAAAA;AAAAA,IAAAm3C,cAAAA;AAAAA,IAAAC,cAAAA;AAAAA,EAAAA,IAcIt5D;AAAM,MAAAM;AAAA,EAAAL,EAAA,CAAA,MAAA0C,EAAAqI,MACmF1K,IAAA;AAAA,IAAA0K,IAAMrI,EAAKqI;AAAAA,EAAAA,GAAK/K,EAAA,CAAA,IAAA0C,EAAAqI,IAAA/K,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA7G,QAAA;AAAA,IAAA8lB,YAAAA;AAAAA,IAAAy0B,WAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAA1M,WAAAA;AAAAA,IAAAoL,YAAAA;AAAAA,IAAAoB,YAAAA;AAAAA,EAAAA,IAAiFD,GAAYh6C,CAAgB;AAAE,MAAAE;AAAA,EAAAP,SAAA8tC,KAGlGvtC,IAAAk6C,GAAGC,UAAUC,SAAU7M,CAAS,GAAC9tC,OAAA8tC,GAAA9tC,OAAAO,KAAAA,IAAAP,EAAA,CAAA;AAEnC,QAAAS,IAAA65C,IAAA,MAAA;AAAoB,MAAA15C;AAAA,EAAAZ,EAAA,CAAA,MAAAO,KAAAP,SAAAS,KAAAT,EAAA,CAAA,MAAAk5C,KAHjBt4C,IAAA;AAAA,IAAAktC,WACDvtC;AAAAA,IAAiC24C,YAAAA;AAAAA,IAAAxpC,SAEnCjP;AAAAA,EAAAA,GACVT,OAAAO,GAAAP,OAAAS,GAAAT,OAAAk5C,GAAAl5C,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAJD,QAAA+Y,IAAcnY;AAIZ,MAAAG;AAAA,EAAAf,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAMMP,IAAA,gBAAAQ,EAAC+3D,IAAA,EAAmB,MAAA,IAAU,OAAA,iCAA+B,GAAGt5D,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,MAAAiB;AAAA,EAAAjB,EAAA,CAAA,MAAA8lB,KAAA9lB,UAAAu6C,KAFpEt5C,IAAA,gBAAAM,EAAAg4D,GAAA,MAAA,EAAkB,OAAA,QAChB,UAAA,gBAAAh4D,EAACkF,IAAA,EAAY,QAAA,WAAWqf,GAAU,GAAMy0B,GACtCx5C,aACF,GACF,GAAaf,OAAA8lB,GAAA9lB,QAAAu6C,GAAAv6C,QAAAiB,KAAAA,IAAAjB,EAAA,EAAA;AAAA,MAAAkB;AAAA,EAAAlB,UAAAo5D,KAAAp5D,EAAA,EAAA,MAAA0C,EAAA5B,QAIMI,IAAAuJ,CAAAA,MAAA;AACb,UAAA+uD,IAAgB/uD,EAAO/H,MAAMgB,KAAAA;AAC7B,IAAI81D,KAAWA,MAAY92D,EAAK5B,QAAOs4D,EAAaI,CAAO;AAAA,EAAE,GAC9Dx5D,QAAAo5D,GAAAp5D,EAAA,EAAA,IAAA0C,EAAA5B,MAAAd,QAAAkB,KAAAA,IAAAlB,EAAA,EAAA;AAAA,MAAAmB,GAAA+D;AAAA,EAAAlF,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEDH,IAAA,gBAAAI,EAAAk4D,GAAA,SAAA,CAAA,CAAA,GACAv0D,IAAA,gBAAA3D,EAAAk4D,GAAA,OAAA,CAAA,CAAA,GAAkBz5D,QAAAmB,GAAAnB,QAAAkF,MAAA/D,IAAAnB,EAAA,EAAA,GAAAkF,IAAAlF,EAAA,EAAA;AAAA,MAAA2K;AAAA,EAAA3K,UAAAkB,KAAAlB,EAAA,EAAA,MAAA0C,EAAA5B,QATtB6J,IAAA,gBAAApJ,EAAAg4D,GAAA,MAAA,EACE,UAAA,gBAAA33D,aACgB,cAAAc,EAAK5B,MACJ,eAAAI,GAKfC,UAAAA;AAAAA,IAAAA;AAAAA,IACA+D;AAAAA,EAAAA,EAAAA,CACF,EAAA,CACF,GAAalF,QAAAkB,GAAAlB,EAAA,EAAA,IAAA0C,EAAA5B,MAAAd,QAAA2K,KAAAA,IAAA3K,EAAA,EAAA;AAAA,MAAAoL;AAAA,EAAApL,EAAA,EAAA,MAAA+hB,KAAA/hB,EAAA,EAAA,MAAA6hB,KAAA7hB,UAAAi5D,KAAAj5D,EAAA,EAAA,MAAAgiB,KAAAhiB,EAAA,EAAA,MAAAiiB,KAAAjiB,EAAA,EAAA,MAAAkiB,KAAAliB,EAAA,EAAA,MAAA0C,EAAAtC,SAAAJ,EAAA,EAAA,MAAA0C,EAAAvC,QACbiL,IAAA,gBAAA7J,EAAAg4D,GAAA,MAAA,EAAkB,OAAA,QAChB,UAAA,gBAAAh4D,EAACugB,MACQ,OAAApf,EAAKtC,OACE2hB,cAAAA,GACR,MAAArf,EAAKvC,MACE0hB,aAAAA,GACFK,WAAAA,GACIF,eAAAA,GACDC,cAAAA,GACJg3C,UAAAA,EAAAA,CAAQ,EAAA,CAEtB,GAAaj5D,QAAA+hB,GAAA/hB,QAAA6hB,GAAA7hB,QAAAi5D,GAAAj5D,QAAAgiB,GAAAhiB,QAAAiiB,GAAAjiB,QAAAkiB,GAAAliB,EAAA,EAAA,IAAA0C,EAAAtC,OAAAJ,EAAA,EAAA,IAAA0C,EAAAvC,MAAAH,QAAAoL,KAAAA,IAAApL,EAAA,EAAA;AAAA,MAAA6L;AAAA,EAAA7L,UAAAi5D,KAAAj5D,EAAA,EAAA,MAAAq5D,KAAAr5D,EAAA,EAAA,MAAAk5D,KAAAl5D,EAAA,EAAA,MAAA0C,EAAAg3D,aAAA15D,EAAA,EAAA,MAAA0C,EAAA5B,QACZ+K,IAAAqtD,IACC,gBAAA33D,EAAAg4D,GAAA,MAAA,EAAkB,OAAA,QAChB,UAAA,gBAAAh4D,EAAC20B,IAAA,EACM,MAAA,OACI,SAAAxzB,EAAKg3D,YAAL,UAAA,SACAL,YACC,UAAAJ,KAAYv2D,EAAKg3D,WACf,cAAA,OAAOh3D,EAAK5B,IAAK,eAE7B,4BAAC63B,IAAA,EAAY,MAAA,IAAE,EAAA,CACjB,GACF,IAXD,MAYO34B,QAAAi5D,GAAAj5D,QAAAq5D,GAAAr5D,QAAAk5D,GAAAl5D,EAAA,EAAA,IAAA0C,EAAAg3D,WAAA15D,EAAA,EAAA,IAAA0C,EAAA5B,MAAAd,QAAA6L,KAAAA,IAAA7L,EAAA,EAAA;AAAA,MAAAgN;AAAA,EAAAhN,EAAA,EAAA,MAAAg5D,KAAAh5D,UAAAi5D,KAAAj5D,EAAA,EAAA,MAAAm5D,KAAAn5D,EAAA,EAAA,MAAA0C,EAAAhB,WACPsL,IAAAgsD,sBACCO,GAAA,MAAA,EAAkB,OAAA,SAChB,4BAACV,IAAA,EACU,SAAAn2D,EAAKhB,WAAL,CAAA,GACCu3D,UAAAA,GACDD,SAAAA,GACCG,UAAAA,GAAe,EAAA,CAE7B,IARD,MASOn5D,QAAAg5D,GAAAh5D,QAAAi5D,GAAAj5D,QAAAm5D,GAAAn5D,EAAA,EAAA,IAAA0C,EAAAhB,SAAA1B,QAAAgN,KAAAA,IAAAhN,EAAA,EAAA;AAOM,QAAAkN,IAAA+rD,KAAYv2D,EAAKg3D,WACfvsD,IAAA,UAAUzK,EAAK5B,IAAK;AAAE,MAAAwM;AAAA,EAAAtN,EAAA,EAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAElCgM,sBAACqsD,IAAA,EAAa,MAAA,GAAA,CAAE,GAAI35D,QAAAsN,KAAAA,IAAAtN,EAAA,EAAA;AAAA,MAAAuN;AAAA,EAAAvN,EAAA,EAAA,MAAAqgC,KAAArgC,UAAAkN,KAAAlN,EAAA,EAAA,MAAAmN,KATxBI,iCAAkB,OAAA,QAChB,UAAA,gBAAAhM,EAAC20B,MACM,MAAA,OACG,SAAA,SACK,cAAA,OACJmK,SAAAA,GACC,UAAAnzB,GACE,cAAAC,GAEZG,UAAAA,EAAAA,CACF,EAAA,CACF,GAAatN,QAAAqgC,GAAArgC,QAAAkN,GAAAlN,QAAAmN,GAAAnN,QAAAuN,KAAAA,IAAAvN,EAAA,EAAA;AAAA,MAAAwN;AAAA,SAAAxN,EAAA,EAAA,MAAAw6C,KAAAx6C,EAAA,EAAA,MAAA+Y,KAAA/Y,EAAA,EAAA,MAAAoL,KAAApL,EAAA,EAAA,MAAA6L,KAAA7L,EAAA,EAAA,MAAAgN,KAAAhN,EAAA,EAAA,MAAAuN,KAAAvN,EAAA,EAAA,MAAAiB,KAAAjB,UAAA2K,KAhEf6C,sBAAA+rD,GAAA,KAAA,EAAgB/e,KAAAA,GAAmBzhC,OAAAA,GACjC9X,UAAAA;AAAAA,IAAAA;AAAAA,IAKA0J;AAAAA,IAYAS;AAAAA,IAYCS;AAAAA,IAaAmB;AAAAA,IAUDO;AAAAA,EAAAA,GAYF,GAAYvN,QAAAw6C,GAAAx6C,QAAA+Y,GAAA/Y,QAAAoL,GAAApL,QAAA6L,GAAA7L,QAAAgN,GAAAhN,QAAAuN,GAAAvN,QAAAiB,GAAAjB,QAAA2K,GAAA3K,QAAAwN,KAAAA,IAAAxN,EAAA,EAAA,GAjEZwN;AAiEY,GC1IVosD,KAAiBA,CAACC,GAAoBC,OAAuB;AAAA,EACjE/uD,IAAI,OAAOgvD,OAAOC,WAAAA,CAAY;AAAA,EAC9Bl5D,MAAM+4D,EAAK/4D,KAAK4C,KAAAA;AAAAA,EAChBtD,OAAOy5D,EAAKz5D;AAAAA,EACZD,MAAM05D,EAAK15D;AAAAA,EACX25D,WAAAA;AAAAA,EACAG,OAAO;AACT,IAEaC,KAAYA,CAACn6D,MAA0B;AAClD,QAAM;AAAA,IACJsF,OAAAA;AAAAA,IACAiG,aAAAA;AAAAA,IACA+c,QAAAA;AAAAA,IACA8xC,gBAAAA;AAAAA,IACAC,QAAAA;AAAAA,IACAC,UAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAjB,cAAAA;AAAAA,IACAkB,YAAAA;AAAAA,IACAtB,UAAAA;AAAAA,IACAuB,UAAAA,IAAW;AAAA,IACXC,gBAAAA,IAAiB;AAAA,IACjBzB,eAAAA;AAAAA,IACA0B,oBAAAA,IAAqB;AAAA,IACrBC,aAAAA,IAAc;AAAA,IACd54C,cAAAA;AAAAA,IACA64C,iBAAAA,IAAkB;AAAA,IAClBC,gBAAAA,IAAiB;AAAA,IACjBC,oBAAAA,IAAqB;AAAA,IACrBC,kBAAAA,IAAmB;AAAA,IACnBC,gBAAAA,IAAiB;AAAA,IACjBC,wBAAAA,IAA0Bv4D,CAAAA,MAAU,qBAAqBA,EAAM5B,IAAI;AAAA,IACnE+gB,aAAAA;AAAAA,IACAq5C,WAAAA,IAAY;AAAA,IACZhC,aAAAA;AAAAA,IACAh3C,WAAAA,IAAY;AAAA,IACZi5C,kBAAAA,IAAmB;AAAA,EAAA,IACjBp7D,GACE,CAACq7D,GAAUC,CAAW,IAAI/3D,GAAS,EAAK,GACxC,CAACg4D,GAASC,CAAU,IAAIj4D,GAAuB;AAAA,IAAExC,MAAM;AAAA,IAAIV,OAAOw6D;AAAAA,IAAiBz6D,MAAM06D;AAAAA,EAAAA,CAAgB,GACzG,CAACW,GAAeC,CAAgB,IAAIn4D,GAAgC,IAAI,GACxEw4C,IAAUC,GAAWC,GAAUC,IAAe;AAAA,IAAEL,sBAAsB;AAAA,MAAEC,UAAU;AAAA,IAAA;AAAA,EAAE,CAAG,CAAC,GAExF6f,IAAeA,MAAM;AACzBL,IAAAA,EAAY,EAAK,GACjBE,EAAW;AAAA,MAAEz6D,MAAM;AAAA,MAAIV,OAAOw6D;AAAAA,MAAiBz6D,MAAM06D;AAAAA,IAAAA,CAAgB;AAAA,EACvE,GAEMc,IAAcA,CAAC5kD,GAAe6kD,MAAmC;AACrE,UAAMzwC,IAAO,CAAC,GAAG9C,CAAM;AACvB8C,IAAAA,EAAKpU,CAAK,IAAI;AAAA,MAAE,GAAGoU,EAAKpU,CAAK;AAAA,MAAG,GAAG6kD;AAAAA,IAAAA,GACnCzB,EAAehvC,CAAI;AAAA,EACrB,GAEM0wC,IAAkBA,MAAM;AAC5B,QAAI,CAACP,EAAQx6D,KAAK4C,OAAQ;AAC1B,UAAMo4D,IAAWzzC,EAAO1kB,SAAS,IAAIujC,KAAKC,IAAI,GAAG9e,EAAOha,IAAK3L,CAAAA,MAAUA,EAAMo3D,SAAS,CAAC,IAAI;AAC3FK,IAAAA,EAAe,CAAC,GAAG9xC,GAAQuxC,GAAe0B,GAASQ,IAAW,CAAC,CAAC,CAAC,GACjEJ,EAAAA;AAAAA,EACF,GAEMK,IAAqBA,MAAM;AAC/B,IAAKP,MACDlB,IACFA,EAAckB,CAAa,IAE3BrB,EAAe9xC,EAAO7gB,OAAQ9E,CAAAA,MAAUA,EAAMqI,OAAOywD,EAAczwD,EAAE,CAAC,GAExE0wD,EAAiB,IAAI;AAAA,EACvB,GAEM5uC,IAAgBA,CAAC9oB,MAAwB;AAC7C,UAAM;AAAA,MAAEknB,QAAAA;AAAAA,MAAQixB,MAAAA;AAAAA,IAAAA,IAASn4C;AACzB,QAAI,CAACm4C,KAAQjxB,EAAOlgB,OAAOmxC,EAAKnxC,GAAI;AAEpC,UAAM+uC,KAAWzxB,EAAOwL,UAAWnxB,QAAUA,GAAMqI,OAAOkgB,EAAOlgB,EAAE,GAC7DivC,KAAW3xB,EAAOwL,UAAWnxB,QAAUA,GAAMqI,OAAOmxC,EAAKnxC,EAAE;AACjE,IAAI+uC,KAAW,KAAKE,KAAW,KAE/BmgB,EAAe6B,GAAU3zC,GAAQyxB,IAAUE,EAAQ,EAAE3rC,IAAI,CAAC3L,IAAOqU,QAAW;AAAA,MAAE,GAAGrU;AAAAA,MAAOo3D,WAAW/iD;AAAAA,IAAAA,EAAQ,CAAC;AAAA,EAC9G,GAEMklD,IAAmBA,CAACl4D,MAA2C;AACnE,IAAIA,EAAMuR,QAAQ,WAASumD,EAAAA,GACvB93D,EAAMuR,QAAQ,YAAUomD,EAAAA;AAAAA,EAC9B;AAEA,SACE,gBAAA95D,EAAAC,IAAA,EACE,UAAA;AAAA,IAAA,gBAAAD,EAACM,GAAA,EAAM,KAAI,MAAK,QAAO,QACrB,UAAA;AAAA,MAAA,gBAAAN,EAAC6E,IAAA,EAAK,gBAAe,iBAAgB,YAAW,UAAS,KAAI,MAAK,UAAS,QACzE,UAAA;AAAA,QAAA,gBAAA7E,EAACM,GAAA,EAAM,KAAI,OACT,UAAA;AAAA,UAAA,gBAAAX,EAACI,GAAA,EAAK,WAAU,aAAa0D,UAAAA,GAAM;AAAA,UAClCiG,sBACE3J,GAAA,EAAK,WAAU,uBAAsB,OAAM,YACzC2J,aACH,IACE;AAAA,QAAA,GACN;AAAA,QACA,gBAAA1J,EAACs0B,IAAA,EAAO,MAAK,MAAK,SAAQ,WAAU,SAAS,MAAMmlC,EAAY,EAAI,GAAG,UAAUD,KAAYnC,GAC1F,UAAA;AAAA,UAAA,gBAAA13D,EAACmuB,IAAA,EAAK,MAAM,GAAA,CAAG;AAAA,UACd8qC;AAAAA,QAAAA,EAAAA,CACH;AAAA,MAAA,GACF;AAAA,MAEA,gBAAAj5D,EAAC66C,IAAA,EAAW,SAAAN,GAAkB,oBAAoBogB,IAAe,WAAWrvC,GAC1E,UAAA,gBAAAtrB,EAAC45C,IAAA,EAAgB,OAAO9yB,EAAOha,IAAK3L,OAAUA,EAAMqI,EAAE,GAAG,UAAUqwC,IACjE,UAAA,gBAAAx5C,EAAC23D,GAAM,MAAN,EAAW,MAAK,MAAK,SAAQ,WAC5B,UAAA;AAAA,QAAA,gBAAAh4D,EAACg4D,GAAM,QAAN,EACC,UAAA,gBAAA33D,EAAC23D,GAAM,KAAN,EACC,UAAA;AAAA,UAAA,gBAAAh4D,EAACg4D,GAAM,cAAN,EAAmB,OAAM,OAAA,CAAM;AAAA,UAChC,gBAAAh4D,EAACg4D,GAAM,cAAN,EAAoB4B,UAAAA,EAAAA,CAAiB;AAAA,UACtC,gBAAA55D,EAACg4D,GAAM,cAAN,EAAmB,OAAM,OAAA,CAAM;AAAA,UAC/BL,sBAAeK,GAAM,cAAN,EAAmB,OAAM,QAAQuB,aAAmB,IAAwB;AAAA,UAC3F9B,sBAAiBO,GAAM,cAAN,EAAmB,OAAM,SAASmB,aAAmB,IAAwB;AAAA,UAC/F,gBAAAn5D,EAACg4D,GAAM,cAAN,EAAmB,OAAM,OAAA,CAAM;AAAA,QAAA,EAAA,CAClC,EAAA,CACF;AAAA,QACA,gBAAA33D,EAAC23D,GAAM,MAAN,EACElxC,UAAAA;AAAAA,UAAAA,EAAOha,IAAI,CAAC3L,GAAOqU,MAClB,gBAAAxV,EAACw3D,MAEC,OAAOr2D,GACP,UAAAu2D,GACA,aAAAC,GACA,WAAAh3C,GACA,eAAA82C,GACA,cAAAj3C,GACA,aAAAF,GACA,cAAe/gB,CAAAA,MAAS66D,EAAY5kD,GAAO;AAAA,YAAEjW,MAAAA;AAAAA,UAAAA,CAAM,GACnD,eAAgBV,CAAAA,MAAUu7D,EAAY5kD,GAAO;AAAA,YAAE3W,OAAAA;AAAAA,UAAAA,CAAO,GACtD,cAAeD,CAAAA,MAASw7D,EAAY5kD,GAAO;AAAA,YAAE5W,MAAAA;AAAAA,UAAAA,CAAM,GACnD,iBAAkBuB,CAAAA,MAAYi6D,EAAY5kD,GAAO;AAAA,YAAErV,SAAAA;AAAAA,UAAAA,CAAS,GAC5D,cAAc,MAAM23D,IAAe32D,CAAK,GACxC,UAAU,MAAM+4D,EAAiB/4D,CAAK,EAAA,GAbjCA,EAAMqI,EAa6B,CAE3C;AAAA,UACAqwD,IACC,gBAAAx5D,EAAC23D,GAAM,KAAN,EACC,UAAA;AAAA,YAAA,gBAAAh4D,EAACg4D,GAAM,MAAN,EAAU;AAAA,YACX,gBAAAh4D,EAACg4D,GAAM,MAAN,EACC,4BAAC3sD,IAAA,EACC,MAAK,MACL,aAAa6tD,GACb,OAAOa,EAAQx6D,MACf,UAAWiD,OAAUw3D,EAAW;AAAA,cAAE,GAAGD;AAAAA,cAASx6D,MAAMiD,EAAM+I,OAAOpK;AAAAA,YAAAA,CAAO,GACxE,WAAWu5D,GACX,WAAS,IAAA,EAAA,CAEb;AAAA,8BACC1C,GAAM,MAAN,EACC,UAAA,gBAAAh4D,EAACugB,MACC,OAAOw5C,EAAQl7D,OACf,MAAMk7D,EAAQn7D,MACd,WAAA+hB,GACA,cAAAH,GACA,aAAAF,GACA,eAAgBzhB,OAAUm7D,EAAW;AAAA,cAAE,GAAGD;AAAAA,cAASl7D,OAAAA;AAAAA,YAAAA,CAAO,GAC1D,cAAeD,CAAAA,MAASo7D,EAAW;AAAA,cAAE,GAAGD;AAAAA,cAASn7D,MAAAA;AAAAA,YAAAA,CAAM,GAAE,EAAA,CAE7D;AAAA,YACC+4D,IAAc,gBAAA33D,EAACg4D,GAAM,MAAN,CAAA,CAAU,IAAM;AAAA,YAC/BP,IAAgB,gBAAAz3D,EAACg4D,GAAM,MAAN,CAAA,CAAU,IAAM;AAAA,8BACjCA,GAAM,MAAN,EACC,UAAA,gBAAA33D,EAACE,IAAA,EAAO,KAAI,OACV,UAAA;AAAA,cAAA,gBAAAP,EAAC20B,IAAA,EAAO,MAAK,OAAM,SAAQ,WAAU,SAAS2lC,GAAiB,UAAU,CAACP,EAAQx6D,KAAK4C,KAAAA,GAAO,UAAA,OAE9F;AAAA,cACA,gBAAAnC,EAAC20B,IAAA,EAAO,MAAK,OAAM,SAAQ,SAAQ,SAASwlC,GAAc,cAAW,oBACnE,UAAA,gBAAAn6D,EAAC46D,IAAA,EAAE,MAAM,IAAG,EAAA,CACd;AAAA,YAAA,EAAA,CACF,EAAA,CACF;AAAA,UAAA,EAAA,CACF,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA,EAAA,CACF,GACF,GACF;AAAA,wBAEC11D,IAAA,EAAK,gBAAe,YACnB,UAAA,gBAAA7E,EAACE,IAAA,EAAO,KAAI,MACV,UAAA;AAAA,QAAA,gBAAAP,EAAC20B,IAAA,EAAO,MAAK,MAAK,SAAQ,WAAU,SAASmkC,GAAU,UAAU,CAACE,KAActB,GAC7E0B,UAAAA,EAAAA,CACH;AAAA,QACA,gBAAAp5D,EAAC20B,IAAA,EAAO,MAAK,MAAK,SAAQ,WAAU,SAASkkC,GAAQ,SAASnB,GAAU,UAAU,CAACsB,GAChFW,UAAAA,EAAAA,CACH;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAEA,gBAAA35D,EAACw+B,MACC,MAAMn4B,EAAQ4zD,GACd,SAAS,MAAMC,EAAiB,IAAI,GACpC,UAAUM,GACV,UAAUf,GACV,kBAAkBQ,IAAgBP,EAAuBO,CAAa,IAAI,IAC1E,YAAYT,EAAAA,CAAiB;AAAA,EAAA,GAEjC;AAEJ,GC9KMqB,KAAcA,CAAC1oC,GAAsBC,MACzCD,EAAKomC,YAAYnmC,EAAMmmC,aAAapmC,EAAK5yB,KAAKupB,cAAcsJ,EAAM7yB,IAAI,GAElEu7D,KAAiB,CACrBh0C,GACAi0C,MACGj0C,EAAOha,IAAIiuD,CAAa,EAAEpyC,KAAKkyC,EAAW,GAEzCG,KAAoB,CAA+Bl0C,GAAkBm0C,MACzEn0C,EAAOxd,KAAMnI,CAAAA,MAAUA,EAAMqI,OAAOyxD,EAAMzxD,EAAE,GAExC0xD,KAAqB,CACzBp0C,GACAq0C,GACAC,GACAC,MAEID,EAAW1wB,OAAO,IAAU,KAEzBywB,EAAO1kD,KAAMwkD,CAAAA,MAAU;AAC5B,MAAIA,EAAMvC,MAAO,QAAO;AACxB,QAAM16C,IAAWg9C,GAAkBl0C,GAAQm0C,CAAK;AAChD,SAAKj9C,IACEq9C,EAAiBr9C,GAAUi9C,CAAK,KAAKA,EAAM1C,cAAcv6C,EAASu6C,YADnD;AAExB,CAAC,GAGG+C,KAAeA,CAACxX,MAAoBA,aAAiBppC,QAAQopC,EAAMU,UAAUV,IAAQ/9B,OAAO+9B,CAAK,IAAI,MAE9FyX,KAAmB,CAA+B/8D,MAAyC;AACtG,QAAM;AAAA,IACJg9D,YAAAA;AAAAA,IACAC,aAAAA,IAAc;AAAA,IACd30C,QAAQ40C;AAAAA,IACR15B,WAAAA;AAAAA,IACA62B,QAAAA;AAAAA,IACAkC,eAAAA;AAAAA,IACAM,kBAAAA;AAAAA,IACA,GAAGM;AAAAA,EAAAA,IACDn9D,GACE,CAAC28D,GAAQS,CAAS,IAAI75D,GAA2B,CAAA,CAAE,GACnD,CAACq5D,GAAYS,CAAa,IAAI95D,GAAsB,oBAAIggB,KAAK,GAC7D,CAAC21C,GAAUoE,CAAW,IAAI/5D,GAAS,EAAK,GACxC,CAACg6D,GAAWC,CAAY,IAAIj6D,GAAkB,IAAI,GAElD+kB,IAAS40C,KAAgB,CAAA;AAK/B9yD,EAAAA,GAAU,MAAM;AACd,IAAI8yD,KAAcE,EAAUd,GAAeY,GAAcX,CAAa,CAAC;AAAA,EACzE,GAAG,CAACW,GAAcX,CAAa,CAAC;AAEhC,QAAMkB,IAAa,YAAY;AAC7BH,IAAAA,EAAY,EAAI,GAChBE,EAAa,IAAI;AACjB,QAAI;AACF,YAAMnD,EAAO;AAAA,QAAEuC,YAAAA;AAAAA,QAAYD,QAAAA;AAAAA,QAAQr0C,QAAAA;AAAAA,MAAAA,CAAQ,GAC3C+0C,EAAc,oBAAI95C,KAAK;AAAA,IACzB,SAAS+hC,GAAO;AACdkY,MAAAA,EAAalY,CAAK;AAAA,IACpB,UAAA;AACEgY,MAAAA,EAAY,EAAK;AAAA,IACnB;AAAA,EACF,GAEM9C,IAAakC,GAAmBp0C,GAAQq0C,GAAQC,GAAYC,CAAgB,GAC5EvX,IAAQwX,GAAat5B,CAAS,KAAKs5B,GAAaS,CAAS;AAa/D,SACE,gBAAA17D,EAACM,GAAA,EAAM,WAAU,cAAa,MAAK,QAAO,GAAE,MAAK,KAAI,MAAK,IAAG,MAAK,OAAM,MACrEmjD,UAAAA;AAAAA,IAAAA,IACC,gBAAA9jD,EAAC0kD,IAAA,EAAa,QAAO,SAAQ,cAAa,OAAM,OAAO8W,GAAY,MAAK,MACrE1X,UAAAA,EAAAA,CACH,IACE;AAAA,IACH4X,MAAiBz8D,SAChB,gBAAAoB,EAACE,MAAO,KAAI,MAAK,OAAM,YACrB,UAAA;AAAA,MAAA,gBAAAP,EAACqjB,IAAA,EAAQ,MAAK,KAAA,CAAI;AAAA,MAClB,gBAAArjB,EAACI,GAAA,EAAK,WAAU,uBAAuBq7D,UAAAA,EAAAA,CAAY;AAAA,IAAA,GACrD,IAEA,gBAAAz7D,EAAC24D,IAAA,EACC,GAAIgD,GACJ,QAAQR,GACR,gBAAgBS,GAChB,eA5BkBM,CAAC/6D,MAA0B;AACnD,MAAKA,EAAMu3D,SAAOmD,EAAc,oBAAI95C,IAAI,CAAC,GAAGq5C,GAAYj6D,EAAMqI,EAAE,CAAC,CAAC,GAClEoyD,EAAUT,EAAOl1D,OAAQg1D,CAAAA,MAAUA,EAAMzxD,OAAOrI,EAAMqI,EAAE,CAAC;AAAA,IAC3D,GA0BQ,YAAAwvD,GACA,UAAAtB,GACA,QAAQ,MAAA;AAAM,MAAKuE,EAAAA;AAAAA,OACnB,UA3BaE,MAAM;AACzBP,MAAAA,EAAUd,GAAeh0C,GAAQi0C,CAAa,CAAC,GAC/Cc,EAAc,oBAAI95C,KAAK,GACvBi6C,EAAa,IAAI;AAAA,IACnB,EAuBkBG,CAAa;AAAA,EAAA,GAG7B;AAEJ,GCvJaC,KAA4CC,GAAc;AAAA,EACrE5sD,WAAW;AAAA,EACX6sD,iBAAiB;AAAA,EACjBC,UAAU;AACZ,CAAC,GAEYC,KAAUA,MAAA;AAAA,QAAA/9D,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,EAAA,CAAA,MAAAqB,uBAAAC,IAAA,2BAAA,KAEnBjB,IAAA,gBAAAkB,EAAC8L,IAAA,EACC,UAAA,gBAAA9L,EAACy8D,IAAA,EAAuBL,SAAAA,IAAsB,aAAA;AAAA,IAAAM,QAAU;AAAA,EAAA,GACrD9yD,cAiBH,GACF,GAASnL,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GApBTK;AAoBS;AAtBU,SAAA8K,GAAA+yD,GAAA;AAAA,SAKb,gBAAAt8D,EAAAu8D,GAAA,MAAA,EAAmB,OAAA;AAAA,IAAAhX,IAAM;AAAA,EAAA,GAAmB,YAAA,SACzC+W,UAAAA;AAAAA,IAAAA,EAAKx3C,SAAU,YAAY,gBAAAnlB,EAACqjB,IAAA,EAAa,MAAA,MAAW,OAAA,aAAA,KAAkB,gBAAArjB,EAAA48D,GAAA,WAAA,CAAA,CAAA;AAAA,IACvE,gBAAAv8D,EAACM,KAAU,KAAA,KAAS,MAAA,KAAa,UAAA,KAAa,UAAA,QAC3Cg8D,UAAAA;AAAAA,MAAAA,EAAK74D,SAAU,gBAAA9D,EAAA48D,GAAA,OAAA,EAAcD,YAAK74D,OAAO;AAAA,MACzC64D,EAAK5yD,eACJ,gBAAA/J,EAACwM,IAAA,EAAqB,WAAA,SAAsB,cAAA;AAAA,QAAAqwD,YAAc;AAAA,MAAA,GACxD,UAAA,gBAAA78D,EAAA48D,GAAA,aAAA,EAA8B,YAAA,YAAqB,WAAA,cAChDD,UAAAA,EAAK5yD,YAAAA,CACR,EAAA,CACF;AAAA,IAAA,GAEJ;AAAA,IACC4yD,EAAKhvD,UAAW,gBAAA3N,EAAA48D,GAAA,eAAA,EAAsBD,UAAAA,EAAKhvD,OAAOxH,OAAO;AAAA,IAC1D,gBAAAnG;KACF;AAAa;ACNvB,MAAMw3B,KAA0C;AAAA,EAC9CslC,cAAc,CAAA;AAAA,EACdC,oBAAoB,CAAA;AACtB,GAEMnI,KAAkB,6BAElBt9B,KAAgBA,CAACC,MAAuB,GAAGq9B,EAAe,IAAIr9B,CAAU,IAExEylC,KAASA,CAACC,MAAkB;AAChC,QAAMC,wBAAWn7C,IAAAA,GACX64B,IAAmB,CAAA;AACzB,aAAWpxC,KAAMyzD;AACf,IAAIC,EAAK36C,IAAI/Y,CAAE,MACf0zD,EAAKtkD,IAAIpP,CAAE,GACXoxC,EAAO9yB,KAAKte,CAAE;AAEhB,SAAOoxC;AACT,GAEMkX,KAAuBA,CAACt5B,OAA+B;AAAA,EAC3DskC,cAActkC,EAAMskC;AAAAA,EACpBC,oBAAoBvkC,EAAMukC;AAC5B,IAEaI,KAA2BA,CAAClgD,MACvCob,GAAAA,EACEC,GACG9E,CAAAA,OAAS;AAAA,EACR,GAAGgE;AAAAA,EACH4lC,iBAAkB1kB,CAAAA,MAAmBllB,EAAKgF,CAAAA,OAAW;AAAA,IAAE,GAAGA;AAAAA,IAAOskC,cAAcE,GAAOtkB,CAAc;AAAA,EAAA,EAAI;AAAA,EACxG2kB,cAAcA,CAACnoB,GAAW0D,MACxBplB,EAAKgF,CAAAA,OAAW;AAAA,IACd,GAAGA;AAAAA,IACHukC,oBAAoB;AAAA,MAAE,GAAGvkC,EAAMukC;AAAAA,MAAoB,CAAC7nB,CAAS,GAAG8nB,GAAOpkB,CAAW;AAAA,IAAA;AAAA,EAAE,EACpF;AAAA,EACJ0kB,mBAAmBA,MAAM9pC,EAAKgF,CAAAA,OAAW;AAAA,IAAE,GAAGA;AAAAA,IAAOskC,cAAc,CAAA;AAAA,EAAA,EAAK;AAAA,EACxES,gBAAiBroB,CAAAA,MACf1hB,EAAKgF,CAAAA,MAAU;AACb,QAAI,EAAE0c,KAAa1c,EAAMukC,oBAAqB,QAAOvkC;AACrD,UAAM;AAAA,MAAE,CAAC0c,CAAS,GAAGggB;AAAAA,MAAU,GAAGrwD;AAAAA,IAAAA,IAAS2zB,EAAMukC;AACjD,WAAO;AAAA,MAAE,GAAGvkC;AAAAA,MAAOukC,oBAAoBl4D;AAAAA,IAAAA;AAAAA,EACzC,CAAC;AAAA,EACH40B,OAAOA,MAAMjG,EAAIgE,EAAgB;AACnC,IACA;AAAA,EACEj4B,MAAM+3B,GAAcra,EAAQsa,UAAU;AAAA,EACtCje,SAASugB,GAAkBxgB,EAAoB;AAAA,EAC/CygB,YAAYg4B;AACd,CACF,CACF,GAEI0D,yBAAoBjiC,IAAAA,GAEbiqC,KAAwBA,CAACjmC,MAAuB;AAC3D,QAAMm+B,IAAWF,GAAc/hC,IAAI8D,CAAU;AAC7C,MAAIm+B,EAAU,QAAOA;AAErB,QAAMx7B,IAAQijC,GAAyB;AAAA,IAAE5lC,YAAAA;AAAAA,EAAAA,CAAY;AACrDi+B,SAAAA,GAAchiC,IAAI+D,GAAY2C,CAAK,GAC5BA;AACT,GAEaujC,KAAwBA,CAAAlmC,GAAA6C,MAAA;AAAA,QAAA37B,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,SAAA84B,KACrBz4B,IAAA0+D,GAAsBjmC,CAAU,GAAC94B,OAAA84B,GAAA94B,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GACxC47B,GADOv7B,GACSs7B,CAAQ;AAAC,GCtF5BsjC,KAAY,CAA2B73D,GAAY83D,MAAyB;AAChF,MAAIA,EAAMv7D,WAAW,EAAG,QAAOyD;AAE/B,QAAM+3D,IAAY,IAAIrqC,IAAI1tB,EAAMiH,IAAI,CAAC5G,GAAMsP,MAAU,CAACtP,EAAKsD,IAAIgM,CAAK,CAAC,CAAC,GAChEqoD,wBAAa97C,IAAAA,GACb6H,IAAY,CAAA;AAElB,aAAWpgB,KAAMm0D,GAAO;AACtB,UAAMnoD,IAAQooD,EAAUnqC,IAAIjqB,CAAE;AAC9B,IAAIgM,MAAUvW,UAAa4+D,EAAOt7C,IAAI/M,CAAK,MAC3CqoD,EAAOjlD,IAAIpD,CAAK,GAChBoU,EAAK9B,KAAKjiB,EAAM2P,CAAK,CAAC;AAAA,EACxB;AAEA,MAAIygD,IAAUrsC,EAAKxnB,SAAS,KAAKwnB,EAAKxnB,WAAWyD,EAAMzD;AACvD,WAASmH,IAAI,GAAGA,IAAI1D,EAAMzD,QAAQmH,KAAK;AACrC,IAAIs0D,EAAOt7C,IAAIhZ,CAAC,MACZqgB,EAAKxnB,WAAWmH,KAAK,CAAC0sD,MAASA,IAAU,KAC7CrsC,EAAK9B,KAAKjiB,EAAM0D,CAAC,CAAC;AAGpB,MAAI,CAAC0sD;AACH,aAAS1sD,IAAI,GAAGA,IAAI1D,EAAMzD,QAAQmH,KAAK;AACrC,UAAI1D,EAAM0D,CAAC,MAAMqgB,EAAKrgB,CAAC,GAAG;AACxB0sD,QAAAA,IAAU;AACV;AAAA,MACF;AAAA;AAIJ,SAAOA,IAAUrsC,IAAO/jB;AAC1B,GAEai4D,KAAqBA,CAChCvoB,GACAunB,GACAC,MACsB;AACtB,MAAI9G,IAAU;AACd,QAAM8H,IAAoBL,GAAUnoB,GAAUunB,CAAY;AAC1D,EAAIiB,MAAsBxoB,MAAU0gB,IAAU;AAE9C,QAAMrsC,IAA0B,CAAA;AAChC,aAAW6rB,KAAWsoB,GAAmB;AACvC,UAAMC,IAAYjB,EAAmBtnB,EAAQjsC,EAAE;AAC/C,QAAI,CAACw0D,KAAaA,EAAU57D,WAAW,GAAG;AACxCwnB,MAAAA,EAAK9B,KAAK2tB,CAAO;AACjB;AAAA,IACF;AACA,UAAMwoB,IAAiBP,GAAUjoB,EAAQtD,OAAO6rB,CAAS;AACzD,IAAIC,MAAmBxoB,EAAQtD,SAC7B8jB,IAAU,IACVrsC,EAAK9B,KAAK;AAAA,MAAE,GAAG2tB;AAAAA,MAAStD,OAAO8rB;AAAAA,IAAAA,CAAgB,KAE/Cr0C,EAAK9B,KAAK2tB,CAAO;AAAA,EAErB;AAEA,SAAOwgB,IAAUrsC,IAAO2rB;AAC1B,GCnCM/d,KAA+C;AAAA,EACnD4+B,kBAAkB,CAAA;AAAA,EAClBL,eAAe,CAAA;AACjB,GAEMnB,KAAkB,kCAElBt9B,KAAgBA,CAACC,MAAuB,GAAGq9B,EAAe,IAAIr9B,CAAU,IAExEs9B,KAAmBA,CAACC,GAA0CC,MAClED,MAAaC,IAAkB,WAAW,UAEtCmJ,KAAeA,CAACr1D,MAAqDA,MAAY,WAAW,UAAU,UAEtGmsD,KAAcA,CAClBC,GACAzrD,GACArI,MACG;AACH,MAAIA,MAAUlC,QAAW;AACvB,QAAI,EAAEuK,KAAMyrD,GAAY,QAAOA;AAC/B,UAAM;AAAA,MAAE,CAACzrD,CAAE,GAAG0rD;AAAAA,MAAU,GAAGrwD;AAAAA,IAAAA,IAASowD;AACpC,WAAOpwD;AAAAA,EACT;AAEA,SAAIowD,EAAUzrD,CAAE,MAAMrI,IAAc8zD,IAC7B;AAAA,IAAE,GAAGA;AAAAA,IAAW,CAACzrD,CAAE,GAAGrI;AAAAA,EAAAA;AAC/B,GAEMg0D,KAAiBA,CAACF,GAA+CzrD,GAAYurD,MAA6B;AAC9G,QAAMnrC,IAAOs0C,GAAarJ,GAAiBI,EAAUzrD,CAAE,GAAGurD,CAAe,CAAC;AAC1E,SAAOC,GAAYC,GAAWzrD,GAAIogB,CAAI;AACxC,GAEMkoC,KAAuBA,CAACt5B,OAAoC;AAAA,EAChE49B,kBAAkB59B,EAAM49B;AAAAA,EACxBL,eAAev9B,EAAMu9B;AACvB,IAEaoI,KAAgCA,CAAClhD,MAC5Cob,GAAAA,EACEC,GACG9E,CAAAA,OAAS;AAAA,EACR,GAAGgE;AAAAA,EACH4mC,YAAYA,CAAC50D,GAAIrI,MACfqyB,EAAKgF,CAAAA,OAAW;AAAA,IAAE,GAAGA;AAAAA,IAAO49B,kBAAkBpB,GAAYx8B,EAAM49B,kBAAkB5sD,GAAIrI,CAAK;AAAA,EAAA,EAAI;AAAA,EACjGk9D,SAASA,CAAC70D,GAAIrI,MACZqyB,EAAKgF,CAAAA,OAAW;AAAA,IAAE,GAAGA;AAAAA,IAAOu9B,eAAef,GAAYx8B,EAAMu9B,eAAevsD,GAAIrI,CAAK;AAAA,EAAA,EAAI;AAAA,EAC3FgxD,eAAeA,CAAC3oD,GAAIurD,MAClBvhC,EAAKgF,CAAAA,OAAW;AAAA,IACd,GAAGA;AAAAA,IACH49B,kBAAkBjB,GAAe38B,EAAM49B,kBAAkB5sD,GAAIurD,CAAe;AAAA,EAAA,EAC5E;AAAA,EACJ3C,YAAYA,CAAC5oD,GAAIurD,MACfvhC,EAAKgF,CAAAA,OAAW;AAAA,IACd,GAAGA;AAAAA,IACHu9B,eAAeZ,GAAe38B,EAAMu9B,eAAevsD,GAAIurD,CAAe;AAAA,EAAA,EACtE;AAAA,EACJuJ,cAAe90D,CAAAA,MACbgqB,EAAKgF,CAAAA,OAAW;AAAA,IAAE,GAAGA;AAAAA,IAAO49B,kBAAkBpB,GAAYx8B,EAAM49B,kBAAkB5sD,GAAIvK,MAAS;AAAA,EAAA,EAAI;AAAA,EACrGs/D,WAAY/0D,CAAAA,MACVgqB,EAAKgF,CAAAA,OAAW;AAAA,IAAE,GAAGA;AAAAA,IAAOu9B,eAAef,GAAYx8B,EAAMu9B,eAAevsD,GAAIvK,MAAS;AAAA,EAAA,EAAI;AAAA,EAC/Fw6B,OAAOA,MAAMjG,EAAIgE,EAAgB;AACnC,IACA;AAAA,EACEj4B,MAAM+3B,GAAcra,EAAQsa,UAAU;AAAA,EACtCje,SAASugB,GAAkBxgB,EAAoB;AAAA,EAC/CygB,YAAYg4B;AACd,CACF,CACF,GAEI0D,yBAAoBjiC,IAAAA,GAEbirC,KAA6BA,CAACjnC,MAAuB;AAChE,QAAMm+B,IAAWF,GAAc/hC,IAAI8D,CAAU;AAC7C,MAAIm+B,EAAU,QAAOA;AAErB,QAAMx7B,IAAQikC,GAA8B;AAAA,IAAE5mC,YAAAA;AAAAA,EAAAA,CAAY;AAC1Di+B,SAAAA,GAAchiC,IAAI+D,GAAY2C,CAAK,GAC5BA;AACT,GAEaukC,KAA6BA,CAAAlnC,GAAA6C,MAAA;AAAA,QAAA37B,IAAAC,EAAA,CAAA;AAAA,MAAAI;AAAA,SAAAL,SAAA84B,KAC1Bz4B,IAAA0/D,GAA2BjnC,CAAU,GAAC94B,OAAA84B,GAAA94B,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAC7C47B,GADOv7B,GACSs7B,CAAQ;AAAC,GC/G5BskC,KAAoBA,CAACC,MAAkCA,EAAOC,WAAWD,GAElEE,KAAqB,YAAY;AAC5C,QAAMC,IAAc3lD;AACpB,MAAI2lD,EAAYC,MAAO;AAEvB,QAAMC,IAAc,MAAM,OAAO,SAAS;AAC1CF,EAAAA,EAAYC,QAAQL,GAAkBM,CAAW;AACnD;"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/activity/activity-avatar.tsx","../src/components/activity/activity-comment.tsx","../src/components/activity/activity-composer.tsx","../src/components/activity/activity-event.tsx","../src/components/activity/activity-root.tsx","../src/components/activity/activity-timeline.tsx","../src/components/activity/index.ts","../src/components/attached-panel.tsx","../src/components/header.tsx","../src/components/searchable-menu.tsx","../src/components/list-row/searchable-action-menu.tsx","../src/components/list-row/list-row-actions.tsx","../src/components/list-row/list-row-content.tsx","../src/components/list-row/list-row-menu.tsx","../src/components/list-row/list-row.tsx","../src/components/resource-context-menu.tsx","../src/components/breadcrumb.tsx","../src/components/bubble-button.tsx","../src/components/bubble-panel.tsx","../src/utils/apply-theme-preference.ts","../src/utils/browser-storage.ts","../src/utils/theme-preference.tsx","../src/components/code-editor.tsx","../src/components/content-placeholder.tsx","../src/components/session-indicator.tsx","../src/components/workspace-badge.tsx","../src/components/data-renderer/card-interaction-guard.ts","../src/components/icon-color-picker.tsx","../src/components/data-renderer/types.ts","../src/components/data-renderer/data-renderer-enum-helpers.ts","../src/components/data-renderer/data-renderer-badge-helpers.ts","../src/components/data-renderer/data-renderer-helpers.ts","../src/components/data-renderer/data-renderer-attribute-badge.tsx","../src/components/data-renderer/data-renderer-card.tsx","../src/components/data-renderer/data-renderer-board.tsx","../src/components/data-renderer/data-renderer-list.tsx","../src/components/data-renderer/data-renderer-content.tsx","../src/components/data-renderer/data-renderer-grouping.ts","../src/components/data-renderer/display-menu.tsx","../src/components/data-renderer/filter-menu.tsx","../src/components/data-renderer/use-data-renderer-store.ts","../src/components/data-renderer/use-resolved-attributes.ts","../src/components/data-renderer/data-renderer-toolbar.tsx","../src/components/data-renderer/data-renderer.tsx","../src/components/delete-confirmation-modal.tsx","../src/components/diff-viewer/diff-size.ts","../src/components/diff-viewer/diff-card-body.tsx","../src/components/diff-viewer/diff-card-load-state.tsx","../src/components/diff-viewer/diff-card-content.tsx","../src/components/diff-viewer/diff-card.tsx","../src/components/diff-viewer/diff-drawer-empty-state.tsx","../src/components/diff-viewer/diff-drawer-height.ts","../src/components/diff-viewer/diff-drawer-scroll.ts","../src/components/diff-viewer/use-selected-diff-scroll.ts","../src/components/diff-viewer/diff-drawer.tsx","../src/components/resizable-split-layout.handle.tsx","../src/components/resizable-split-layout.tsx","../src/components/diff-viewer/build-changed-files-tree.ts","../src/components/diff-viewer/diff-viewer.store.ts","../src/components/tree-list/tree-list-model.ts","../src/components/tree-list/tree-list-node-row.tsx","../src/components/tree-list/tree-list-section-header.tsx","../src/components/tree-list/tree-list-reorder.ts","../src/components/tree-list/tree-list-sortable.tsx","../src/components/tree-list/use-tree-list-keyboard-navigation.ts","../src/components/tree-list/tree-list.tsx","../src/components/diff-viewer/file-list-panel.tsx","../src/components/diff-viewer/diff-viewer.tsx","../src/components/error-boundary.tsx","../src/components/horizontal-menu-stack.tsx","../src/components/simple-card.tsx","../src/components/integration-card.tsx","../src/components/item-section.tsx","../src/components/open-source-notices-screen.tsx","../src/components/palette-filter.ts","../src/components/palette-list.tsx","../src/components/palette.tsx","../src/components/palette-shortcut.tsx","../src/components/param-editor/param-editor-label.tsx","../src/components/param-editor/param-editor-read-only-value.tsx","../src/components/param-editor/color-input.tsx","../src/components/param-editor/date-input.tsx","../src/components/number-input.tsx","../src/components/slider.tsx","../src/components/param-editor/number-input.tsx","../src/components/param-editor/selection-input.tsx","../src/components/param-editor/text-input.tsx","../src/components/param-editor/input-group.tsx","../src/components/param-editor/param-editor.tsx","../src/components/repo-picker-dialog.tsx","../src/components/sidebar/sidebar.store.ts","../src/components/sidebar/sidebar-footer.tsx","../src/components/panel-header.constants.ts","../src/components/sidebar/sidebar-header.tsx","../src/components/sidebar/sidebar.tsx","../src/components/sidebar/sidebar-project-menu.tsx","../src/components/switch.tsx","../src/components/tab-strip/tab-visibility.store.ts","../src/components/tree-list/tree-list-visibility-filter.ts","../src/components/tab-strip/tab-visibility-filter.ts","../src/components/tag-editor/tag-editor-row.tsx","../src/components/tag-editor/tag-editor.tsx","../src/components/tag-editor/tag-settings-panel.tsx","../src/components/toaster.tsx","../src/components/tree-list/tree-list-order.store.ts","../src/components/tree-list/tree-list-order-filter.ts","../src/components/tree-list/tree-list-visibility.store.ts","../src/utils/prism.ts"],"sourcesContent":["import { Avatar, Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\n\nexport interface ActivityAvatarProps {\n actor?: ActivityActor;\n icon?: ReactNode;\n color?: string;\n background?: string;\n}\n\nexport const ActivityAvatar = (props: ActivityAvatarProps) => {\n const { actor, icon, color = \"fg.muted\", background = \"bg.muted\" } = props;\n\n if (icon) {\n return (\n <Box\n boxSize=\"18px\"\n borderRadius=\"full\"\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n color={color}\n background={background}\n >\n {icon}\n </Box>\n );\n }\n\n return (\n <Avatar.Root size=\"2xs\" flexShrink={0}>\n <Avatar.Image src={actor?.avatarSrc} alt={actor?.avatarAlt ?? actor?.name} />\n <Avatar.Fallback name={actor?.name} background={background} color={color} />\n </Avatar.Root>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { Children, type ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\ninterface ActivityCommentHeaderProps {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityCommentProps extends Omit<HTMLChakraProps<\"article\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n replies?: ReactNode;\n composer?: ReactNode;\n children: ReactNode;\n}\n\nexport interface ActivityReplyProps extends Omit<HTMLChakraProps<\"div\">, \"title\"> {\n actor: ActivityActor;\n timestamp?: ReactNode;\n actions?: ReactNode;\n children: ReactNode;\n}\n\nconst TimestampSeparator = () => (\n <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />\n);\n\nconst ActivityCommentHeader = (props: ActivityCommentHeaderProps) => {\n const { actor, timestamp, actions } = props;\n\n return (\n <HStack gap=\"xs\" alignItems=\"center\" minW=\"0\">\n <ActivityAvatar actor={actor} />\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n {actor.name}\n </Text>\n {timestamp ? (\n <>\n <TimestampSeparator />\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n <Box marginLeft=\"auto\" flexShrink={0}>\n {actions}\n </Box>\n </HStack>\n );\n};\n\nexport const ActivityReply = (props: ActivityReplyProps) => {\n const { actor, timestamp, actions, children, ...rootProps } = props;\n\n return (\n <Box paddingX=\"md\" paddingY=\"sm\" {...rootProps}>\n <Stack gap=\"xs\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Box paddingLeft=\"32px\">\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\">\n {children}\n </Text>\n </Box>\n </Stack>\n </Box>\n );\n};\n\nexport const ActivityComment = (props: ActivityCommentProps) => {\n const { actor, timestamp, actions, replies, composer, children, ...rootProps } = props;\n const hasReplies = Children.count(replies) > 0;\n\n return (\n <Box\n as=\"article\"\n width=\"full\"\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"sm\"\n background=\"bg\"\n overflow=\"hidden\"\n {...rootProps}\n >\n <Stack gap=\"sm\" padding=\"md\">\n <ActivityCommentHeader actor={actor} timestamp={timestamp} actions={actions} />\n <Text as=\"div\" textStyle=\"label/S/regular\" color=\"fg\" overflowWrap=\"anywhere\" whiteSpace=\"pre-wrap\">\n {children}\n </Text>\n </Stack>\n {hasReplies ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {replies}\n </Box>\n ) : null}\n {composer ? (\n <Box borderTopWidth=\"1px\" borderColor=\"border.muted\">\n {composer}\n </Box>\n ) : null}\n </Box>\n );\n};\n","import type { HTMLChakraProps } from \"@chakra-ui/react\";\nimport { Box, chakra, HStack, Icon, IconButton, Spacer, Textarea } from \"@chakra-ui/react\";\nimport { ArrowUp, Paperclip } from \"lucide-react\";\nimport type { FormEvent, ReactNode } from \"react\";\nimport { useState } from \"react\";\n\nimport { Tooltip } from \"../tooltip\";\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityComposerProps extends Omit<HTMLChakraProps<\"form\">, \"onChange\" | \"onSubmit\"> {\n actor?: ActivityActor;\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n variant?: \"standalone\" | \"inline\";\n minRows?: number;\n attachLabel?: string;\n submitLabel?: string;\n actions?: ReactNode;\n onAttach?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n}\n\nexport const ActivityComposer = (props: ActivityComposerProps) => {\n const {\n actor,\n value,\n defaultValue = \"\",\n placeholder = \"Leave a comment...\",\n variant = \"standalone\",\n minRows = variant === \"standalone\" ? 3 : 1,\n attachLabel = \"Attach file\",\n submitLabel = \"Submit comment\",\n actions,\n onAttach,\n onChange,\n onSubmit,\n ...rootProps\n } = props;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value ?? internalValue;\n const isInline = variant === \"inline\";\n const canSubmit = currentValue.trim().length > 0;\n\n const handleChange = (nextValue: string) => {\n if (value === undefined) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n };\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!canSubmit) return;\n\n onSubmit?.(currentValue.trim());\n\n if (value === undefined) {\n setInternalValue(\"\");\n }\n };\n\n return (\n <chakra.form\n width=\"full\"\n background=\"bg\"\n borderWidth={isInline ? \"0\" : \"1px\"}\n borderColor=\"border.muted\"\n borderRadius={isInline ? \"0\" : \"sm\"}\n transition=\"border-color 0.12s ease, box-shadow 0.12s ease\"\n _focusWithin={isInline ? undefined : { borderColor: \"blue.border\", boxShadow: \"mid\" }}\n onSubmit={handleSubmit}\n {...rootProps}\n >\n <HStack alignItems=\"flex-start\" gap=\"xs\" padding={isInline ? \"sm\" : \"md\"}>\n {actor ? <ActivityAvatar actor={actor} /> : null}\n <Box flex=\"1\" minW=\"0\">\n <Textarea\n value={currentValue}\n rows={minRows}\n resize=\"none\"\n border=\"0\"\n padding=\"0\"\n minH={isInline ? \"1.5rem\" : \"4rem\"}\n background=\"transparent\"\n color=\"fg\"\n textStyle=\"label/S/regular\"\n placeholder={placeholder}\n _placeholder={{ color: \"fg.subtle\" }}\n _focus={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n onChange={(event) => handleChange(event.currentTarget.value)}\n />\n <HStack gap=\"2xs\" marginTop={isInline ? \"0\" : \"sm\"}>\n {actions}\n <Spacer />\n <Tooltip content={attachLabel}>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={attachLabel} type=\"button\" onClick={onAttach}>\n <Icon as={Paperclip} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n <Tooltip content={submitLabel}>\n <IconButton size=\"2xs\" variant=\"subtle\" aria-label={submitLabel} type=\"submit\" disabled={!canSubmit}>\n <Icon as={ArrowUp} boxSize=\"14px\" />\n </IconButton>\n </Tooltip>\n </HStack>\n </Box>\n </HStack>\n </chakra.form>\n );\n};\n","import type { TimelineItemProps } from \"@chakra-ui/react\";\nimport { Box, Text, Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ActivityActor } from \"./activity.types\";\nimport { ActivityAvatar } from \"./activity-avatar\";\n\nexport interface ActivityEventProps extends Omit<TimelineItemProps, \"title\"> {\n actor?: ActivityActor;\n icon?: ReactNode;\n iconColor?: string;\n iconBackground?: string;\n timestamp?: ReactNode;\n children: ReactNode;\n}\n\nconst EventSeparator = () => <Box as=\"span\" boxSize=\"3px\" borderRadius=\"full\" background=\"fg.subtle\" flexShrink={0} />;\n\nexport const ActivityEvent = (props: ActivityEventProps) => {\n const {\n actor,\n icon,\n iconColor = \"fg.muted\",\n iconBackground = \"transparent\",\n timestamp,\n children,\n ...rootProps\n } = props;\n\n return (\n <Timeline.Item gap=\"xs\" minH=\"24px\" paddingX=\"md\" {...rootProps}>\n <Timeline.Connector>\n <Timeline.Separator borderColor=\"border.muted\" />\n <Timeline.Indicator outline=\"none\" shadow=\"none\" border=\"none\" background=\"transparent\">\n <ActivityAvatar actor={actor} icon={icon} color={iconColor} background={iconBackground} />\n </Timeline.Indicator>\n </Timeline.Connector>\n <Timeline.Content gap=\"0\" paddingBottom=\"xs\" minW=\"0\">\n <Timeline.Title\n marginTop=\"0\"\n gap=\"xs\"\n minW=\"0\"\n fontWeight=\"normal\"\n textStyle=\"label/S/regular\"\n color=\"fg.muted\"\n >\n {actor ? (\n <Text as=\"span\" color=\"fg\" fontWeight=\"500\" flexShrink={0}>\n {actor.name}\n </Text>\n ) : null}\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" gap=\"2xs\" minW=\"0\" flexWrap=\"wrap\">\n {children}\n </Box>\n {timestamp ? (\n <>\n <EventSeparator />\n <Text as=\"span\" color=\"fg.muted\" flexShrink={0}>\n {timestamp}\n </Text>\n </>\n ) : null}\n </Timeline.Title>\n </Timeline.Content>\n </Timeline.Item>\n );\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { HStack, Stack, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityRootProps extends StackProps {\n children: ReactNode;\n}\n\nexport interface ActivityHeaderProps extends Omit<StackProps, \"title\"> {\n title?: ReactNode;\n actions?: ReactNode;\n}\n\nexport interface ActivityFeedProps extends StackProps {\n children: ReactNode;\n}\n\nexport const ActivityRoot = (props: ActivityRootProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack width=\"full\" gap=\"md\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n\nexport const ActivityHeader = (props: ActivityHeaderProps) => {\n const { title = \"Activity\", actions, ...rootProps } = props;\n\n return (\n <HStack alignItems=\"center\" justifyContent=\"space-between\" gap=\"md\" {...rootProps}>\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {title}\n </Text>\n {actions ? <HStack gap=\"xs\">{actions}</HStack> : null}\n </HStack>\n );\n};\n\nexport const ActivityFeed = (props: ActivityFeedProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Stack gap=\"md\" width=\"full\" {...rootProps}>\n {children}\n </Stack>\n );\n};\n","import type { TimelineRootProps } from \"@chakra-ui/react\";\nimport { Timeline } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ActivityTimelineProps extends TimelineRootProps {\n children: ReactNode;\n}\n\nexport const ActivityTimeline = (props: ActivityTimelineProps) => {\n const { children, ...rootProps } = props;\n\n return (\n <Timeline.Root size=\"sm\" variant=\"plain\" width=\"full\" css={{ \"--timeline-indicator-size\": \"18px\" }} {...rootProps}>\n {children}\n </Timeline.Root>\n );\n};\n","import { ActivityAvatar } from \"./activity-avatar\";\nimport { ActivityComment, ActivityReply } from \"./activity-comment\";\nimport { ActivityComposer } from \"./activity-composer\";\nimport { ActivityEvent } from \"./activity-event\";\nimport { ActivityFeed, ActivityHeader, ActivityRoot } from \"./activity-root\";\nimport { ActivityTimeline } from \"./activity-timeline\";\n\nexport type { ActivityActor } from \"./activity.types\";\nexport type { ActivityAvatarProps } from \"./activity-avatar\";\nexport type { ActivityCommentProps, ActivityReplyProps } from \"./activity-comment\";\nexport type { ActivityComposerProps } from \"./activity-composer\";\nexport type { ActivityEventProps } from \"./activity-event\";\nexport type { ActivityFeedProps, ActivityHeaderProps, ActivityRootProps } from \"./activity-root\";\nexport type { ActivityTimelineProps } from \"./activity-timeline\";\n\nexport {\n ActivityAvatar,\n ActivityComment,\n ActivityComposer,\n ActivityEvent,\n ActivityFeed,\n ActivityHeader,\n ActivityReply,\n ActivityRoot,\n ActivityTimeline,\n};\n\nexport const Activity = {\n Root: ActivityRoot,\n Header: ActivityHeader,\n Feed: ActivityFeed,\n Timeline: ActivityTimeline,\n Event: ActivityEvent,\n Comment: ActivityComment,\n Reply: ActivityReply,\n Composer: ActivityComposer,\n Avatar: ActivityAvatar,\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nconst DEFAULT_RESIZABLE_MIN_WIDTH = \"20rem\";\n\ninterface AttachedPanelProps extends Omit<FlexProps, \"children\"> {\n children?: ReactNode;\n header?: ReactNode;\n resizable?: boolean;\n}\n\nexport const AttachedPanel = (props: AttachedPanelProps) => {\n const { children, header, width = \"28rem\", minWidth, resizable = false, ...rest } = props;\n const resolvedMinWidth = minWidth ?? (resizable ? DEFAULT_RESIZABLE_MIN_WIDTH : width);\n const resolvedWidth = resizable ? \"full\" : width;\n\n return (\n <Flex\n direction=\"column\"\n position=\"relative\"\n flexShrink={0}\n w={resolvedWidth}\n minW={resolvedMinWidth}\n h=\"100%\"\n borderLeftWidth=\"1px\"\n bg=\"bg\"\n overflow=\"hidden\"\n {...rest}\n >\n {header}\n <Flex flex=\"1\" minH={0} direction=\"column\">\n {children}\n </Flex>\n </Flex>\n );\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport type HeaderVariant = \"main\" | \"narrow\" | \"input\";\n\ninterface HeaderVariantStyles {\n h: string;\n px: string;\n}\n\nconst headerVariantStyles: Record<HeaderVariant, HeaderVariantStyles> = {\n main: {\n h: \"2.5rem\",\n px: \"xs\",\n },\n narrow: {\n h: \"2rem\",\n px: \"xs\",\n },\n input: {\n h: \"3rem\",\n px: \"0\",\n },\n};\n\nexport interface HeaderProps extends Omit<StackProps, \"variant\"> {\n variant?: HeaderVariant;\n}\n\nexport const Header = React.forwardRef<HTMLDivElement, HeaderProps>(function Header(props, ref) {\n const { variant = \"main\", children, ...rest } = props;\n\n return (\n <HStack ref={ref} as=\"header\" alignItems=\"center\" borderWidth=\"0\" {...headerVariantStyles[variant]} {...rest}>\n {children}\n </HStack>\n );\n});\n","import { Box, Icon, Input, InputGroup, Menu, Portal } from \"@chakra-ui/react\";\nimport { ChevronDown, Search } from \"lucide-react\";\nimport { type ElementType, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Header } from \"./header\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport { ScrollArea } from \"./scroll-area\";\n\ntype MenuRootProps = React.ComponentProps<typeof Menu.Root>;\ntype MenuContentProps = React.ComponentProps<typeof Menu.Content>;\n\nexport interface SearchableMenuItem {\n id: string;\n label: string;\n searchText?: string;\n secondaryLabel?: string;\n tooltipLabel?: ReactNode;\n icon?: ElementType;\n variant?: \"default\" | \"compact\";\n isDisabled?: boolean;\n isSelected?: boolean;\n onSelect?: () => void;\n}\n\nexport interface SearchableMenuParentList<T extends SearchableMenuItem> {\n items: T[];\n selectedLabel: string;\n selectedIcon?: ElementType;\n ariaLabel?: string;\n disabled?: boolean;\n emptyState?: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n searchPlaceholder?: string;\n showSearch?: boolean;\n contentTestId?: string;\n onSelect?: (item: T) => void;\n}\n\ninterface ListConfig<T extends SearchableMenuItem> {\n items: T[];\n filterItems: (items: T[], query: string) => T[];\n showSearch: boolean;\n searchPlaceholder: string;\n emptyState: ReactNode;\n contentTestId?: string;\n closeOnSelect: boolean;\n listId: string;\n}\n\ninterface SearchableMenuProps<T extends SearchableMenuItem> {\n trigger: ReactNode;\n items: T[];\n searchPlaceholder: string;\n emptyState: ReactNode;\n filterItems?: (items: T[], query: string) => T[];\n listId?: string;\n header?: ReactNode;\n width?: MenuContentProps[\"width\"];\n maxListHeight?: string;\n showSearch?: boolean;\n closeOnSelect?: MenuRootProps[\"closeOnSelect\"];\n lazyMount?: MenuRootProps[\"lazyMount\"];\n open?: MenuRootProps[\"open\"];\n positioning?: MenuRootProps[\"positioning\"];\n onOpenChange?: MenuRootProps[\"onOpenChange\"];\n onFocusOutside?: MenuRootProps[\"onFocusOutside\"];\n contentTestId?: string;\n portalled?: boolean;\n parentList?: SearchableMenuParentList<T>;\n}\n\nexport const filterSearchableMenuItems = <T extends SearchableMenuItem>(items: T[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return items;\n }\n\n return items.filter((item) => {\n const content = [item.label, item.searchText].filter(Boolean).join(\" \").toLowerCase();\n return content.includes(normalizedQuery);\n });\n};\n\nexport const shouldResetSearchableMenuQuery = (currentListId?: string, nextListId?: string) => {\n if (!currentListId || !nextListId) {\n return false;\n }\n\n return currentListId !== nextListId;\n};\n\nexport const resolveActiveListConfig = <T extends SearchableMenuItem>(\n isShowingParent: boolean,\n parentList: SearchableMenuParentList<T> | undefined,\n childConfig: ListConfig<T>,\n): ListConfig<T> => {\n if (!isShowingParent || !parentList) {\n return childConfig;\n }\n\n return {\n items: parentList.items,\n filterItems: parentList.filterItems ?? childConfig.filterItems,\n showSearch: parentList.showSearch ?? childConfig.showSearch,\n searchPlaceholder: parentList.searchPlaceholder ?? childConfig.searchPlaceholder,\n emptyState: parentList.emptyState ?? childConfig.emptyState,\n contentTestId: parentList.contentTestId ?? childConfig.contentTestId,\n closeOnSelect: false,\n listId: \"parent\",\n };\n};\n\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nexport const SearchableMenu = <T extends SearchableMenuItem>(props: SearchableMenuProps<T>) => {\n const {\n trigger,\n items,\n searchPlaceholder,\n emptyState,\n filterItems = filterSearchableMenuItems,\n listId,\n header,\n width = \"260px\",\n maxListHeight = \"18rem\",\n showSearch = true,\n closeOnSelect = true,\n lazyMount = false,\n open,\n positioning,\n onOpenChange,\n onFocusOutside,\n contentTestId,\n portalled = true,\n parentList,\n } = props;\n const hasParentList = Boolean(parentList);\n const [internalOpen, setInternalOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeList, setActiveList] = useState<\"child\" | \"parent\">(\"child\");\n const inputRef = useRef<HTMLInputElement>(null);\n const isOpen = open ?? internalOpen;\n const isShowingParent = hasParentList && activeList === \"parent\";\n\n const childConfig: ListConfig<T> = {\n items,\n filterItems,\n showSearch,\n searchPlaceholder,\n emptyState,\n contentTestId,\n closeOnSelect,\n listId: hasParentList ? \"child\" : (listId ?? \"\"),\n };\n\n const config = resolveActiveListConfig(isShowingParent, parentList, childConfig);\n const filteredItems = config.filterItems(config.items, query);\n const previousListIdRef = useRef(config.listId);\n\n useEffect(() => {\n if (!isOpen) {\n previousListIdRef.current = config.listId;\n return;\n }\n\n if (shouldResetSearchableMenuQuery(previousListIdRef.current, config.listId)) {\n setQuery(\"\");\n }\n\n previousListIdRef.current = config.listId;\n }, [isOpen, config.listId]);\n\n useEffect(() => {\n if (!isOpen || !config.showSearch) {\n return;\n }\n\n const timeout = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(timeout);\n }, [isOpen, config.showSearch]);\n\n const handleOpenChange: NonNullable<MenuRootProps[\"onOpenChange\"]> = (details) => {\n if (open === undefined) {\n setInternalOpen(details.open);\n }\n\n setQuery(\"\");\n\n if (details.open && hasParentList) {\n setActiveList(\"child\");\n }\n\n onOpenChange?.(details);\n };\n\n const handleMenuItemSelect = (details: { value: string }) => {\n if (!isShowingParent || !parentList) return;\n\n const item = parentList.items.find((i) => i.id === details.value);\n if (!item) return;\n\n parentList.onSelect?.(item);\n setActiveList(\"child\");\n };\n\n const renderIcon = (icon: ElementType | undefined) => (icon ? <Icon as={icon} boxSize=\"14px\" /> : undefined);\n\n const buildRowItem = (item: T): ListRowItem => ({\n id: item.id,\n label: item.label,\n description: item.secondaryLabel,\n icon: renderIcon(item.icon),\n disabled: item.isDisabled,\n tooltip: item.tooltipLabel,\n });\n\n const parentListHeader = parentList ? (\n <Header\n as=\"div\"\n role=\"menuitem\"\n aria-label={parentList.ariaLabel}\n aria-disabled={parentList.disabled || undefined}\n tabIndex={parentList.disabled ? -1 : 0}\n variant=\"narrow\"\n px=\"0\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n flexShrink={0}\n onPointerDownCapture={(event) => event.stopPropagation()}\n onClickCapture={(event) => {\n event.stopPropagation();\n if (parentList.disabled) return;\n setActiveList((current) => (current === \"child\" ? \"parent\" : \"child\"));\n }}\n >\n <ListRow\n asChild\n role=\"presentation\"\n variant=\"compact\"\n id=\"__parent-toggle\"\n label={parentList.selectedLabel}\n icon={renderIcon(parentList.selectedIcon)}\n disabled={parentList.disabled}\n endContent={parentList.disabled ? undefined : <Icon as={ChevronDown} boxSize=\"14px\" />}\n />\n </Header>\n ) : null;\n\n const resolvedHeader = parentList ? parentListHeader : header;\n const shouldShowSeparator = Boolean(resolvedHeader) && !config.showSearch;\n\n const searchInput = config.showSearch ? (\n <Header variant=\"input\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" flexShrink={0}>\n <InputGroup startElement={<Search size={14} />} width=\"full\">\n <Input\n ref={inputRef}\n borderWidth=\"0\"\n borderRadius=\"0\"\n height=\"full\"\n value={query}\n placeholder={config.searchPlaceholder}\n aria-label={config.searchPlaceholder}\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputBorderProps}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => event.stopPropagation()}\n />\n </InputGroup>\n </Header>\n ) : null;\n\n return (\n <Menu.Root\n lazyMount={lazyMount}\n closeOnSelect={config.closeOnSelect}\n open={open}\n positioning={positioning}\n onOpenChange={handleOpenChange}\n onFocusOutside={onFocusOutside}\n onSelect={hasParentList ? handleMenuItemSelect : undefined}\n >\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n <Portal disabled={!portalled}>\n <Menu.Positioner>\n <Menu.Content w={width} bg=\"bg\" gap=\"0\" p=\"0\" zIndex=\"popover\">\n {resolvedHeader}\n {searchInput}\n {shouldShowSeparator ? <Menu.Separator margin=\"0\" /> : null}\n <ScrollArea\n maxH={maxListHeight}\n data-testid={config.contentTestId}\n viewportProps={{ overscrollBehavior: \"contain\" }}\n p=\"0\"\n gap=\"0\"\n >\n {filteredItems.length > 0\n ? filteredItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.isDisabled} onClick={item.onSelect} asChild>\n <Box\n bg=\"transparent\"\n h=\"auto\"\n p=\"0\"\n _hover={{ bg: \"transparent\" }}\n _focus={{ bg: \"transparent\" }}\n _active={{ bg: \"transparent\" }}\n >\n <ListRow\n asChild\n {...buildRowItem(item)}\n role=\"presentation\"\n variant={item.variant ?? \"compact\"}\n isSelected={item.isSelected}\n />\n </Box>\n </Menu.Item>\n ))\n : config.emptyState}\n </ScrollArea>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { IconButton, Menu } from \"@chakra-ui/react\";\nimport { SearchableMenu } from \"../searchable-menu\";\nimport { ListRow } from \"./list-row\";\nimport type { ListRowAction } from \"./list-row.types\";\n\ninterface SearchableActionMenuProps {\n action: ListRowAction;\n}\n\nexport const SearchableActionMenu = (props: SearchableActionMenuProps) => {\n const { action } = props;\n const items = (action.menuItems ?? []).map((item) => ({\n id: item.id,\n label: item.label,\n searchText: [item.label, item.description].filter(Boolean).join(\" \"),\n tooltipLabel: item.description,\n variant: \"compact\" as const,\n onSelect: () => item.onAction?.(),\n }));\n\n return (\n <SearchableMenu\n trigger={\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n }\n items={items}\n searchPlaceholder={action.searchPlaceholder ?? \"Search...\"}\n emptyState={\n <Menu.Item value=\"empty\" asChild>\n <ListRow asChild variant=\"compact\" label={action.emptyMenuLabel ?? \"No results found\"} disabled />\n </Menu.Item>\n }\n onFocusOutside={(event) => event.preventDefault()}\n />\n );\n};\n","import { Box, HStack, IconButton, Menu } from \"@chakra-ui/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowAction } from \"./list-row.types\";\nimport { SearchableActionMenu } from \"./searchable-action-menu\";\n\ninterface RowActionsProps {\n actions: ListRowAction[];\n context: { sectionId?: string; nodeId?: string };\n}\n\nconst keyedTooltip = (action: ListRowAction, child: ReactElement) => {\n if (action.tooltip) {\n return (\n <Tooltip key={action.id} content={action.tooltip} openDelay={300}>\n {child}\n </Tooltip>\n );\n }\n return <Fragment key={action.id}>{child}</Fragment>;\n};\n\nexport const RowActions = (props: RowActionsProps) => {\n const { actions, context } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n\n if (action.menuItems && action.menuItems.length > 0) {\n return keyedTooltip(\n action,\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Tooltip key={item.id} content={item.description} disabled={!item.description} openDelay={300}>\n <Menu.Item\n value={item.id}\n disabled={item.disabled || item.readOnly}\n onClick={() => {\n if (!item.readOnly) item.onAction?.();\n }}\n >\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\">\n <HStack gap=\"2\" minW=\"0\">\n {item.icon ? <Box>{item.icon as never}</Box> : null}\n <Box minW=\"0\">{item.label}</Box>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n </Tooltip>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>,\n );\n }\n\n return keyedTooltip(\n action,\n <IconButton\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.(context);\n }}\n >\n {action.icon}\n </IconButton>,\n );\n })}\n </HStack>\n );\n};\n","import { Box, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowItem, ListRowProps, RowContentProps } from \"./list-row.types\";\nimport { RowActions } from \"./list-row-actions\";\n\nconst RowContent = (props: RowContentProps) => {\n const { item, isExpanded, showChevron, isDisabled, variant, tone } = props;\n const isDenseVariant = variant === \"compact\" || variant === \"tree\";\n const labelTextStyle = isDenseVariant ? \"label/S/regular\" : \"label/M/regular\";\n const descriptionTextStyle = isDenseVariant ? \"label/XS\" : \"label/S/regular\";\n const descriptionMarginLeft = isDenseVariant ? \"0\" : \"2px\";\n\n const labelColor = (() => {\n if (isDisabled) return \"fg.muted\";\n if (tone === \"danger\") return \"red.500\";\n return \"fg\";\n })();\n const iconColor = item.iconColor ?? (tone === \"danger\" ? \"red.500\" : \"fg.muted\");\n const descriptionColor = tone === \"danger\" ? \"red.400\" : \"fg.menu-item.secondary\";\n\n return (\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" overflow=\"hidden\" alignItems=\"center\">\n {showChevron ? (\n <Box color=\"fg.muted\" flexShrink={0} display=\"flex\" alignItems=\"center\">\n <Icon\n as={ChevronRight}\n boxSize=\"12px\"\n transform={isExpanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 120ms ease\"\n />\n </Box>\n ) : null}\n <Stack gap=\"2xs\" minW=\"0\" flex=\"1\">\n <HStack gap=\"2\" minW=\"0\" alignItems=\"center\">\n {item.icon ? (\n <Box\n color={iconColor}\n flexShrink={0}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n boxSize=\"14px\"\n fontSize=\"14px\"\n lineHeight=\"1\"\n css={{ \"& > svg\": { width: \"14px\", height: \"14px\" } }}\n >\n {item.icon}\n </Box>\n ) : null}\n {item.indicator ? (\n <Tooltip content={item.indicator.tooltip} disabled={!item.indicator.tooltip} openDelay={300}>\n <Box color={item.indicator.color ?? \"fg.muted\"} flexShrink={0}>\n {item.indicator.icon}\n </Box>\n </Tooltip>\n ) : null}\n {typeof item.label === \"string\" ? (\n <Text textStyle={labelTextStyle} color={labelColor} truncate>\n {item.label}\n </Text>\n ) : (\n <Box minW=\"0\" maxW=\"full\" overflow=\"hidden\" color={labelColor}>\n {item.label}\n </Box>\n )}\n </HStack>\n {item.description ? (\n typeof item.description === \"string\" ? (\n <Text ml={descriptionMarginLeft} textStyle={descriptionTextStyle} color={descriptionColor} truncate>\n {item.description}\n </Text>\n ) : (\n <Box ml={descriptionMarginLeft} minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {item.description}\n </Box>\n )\n ) : null}\n </Stack>\n </HStack>\n );\n};\n\nexport const ListRowContent = (props: {\n item: ListRowItem;\n isExpanded: boolean;\n showChevron: boolean;\n isDisabled: boolean;\n tone: ListRowProps[\"tone\"];\n variant: ListRowProps[\"variant\"];\n}) => {\n const { item, isDisabled, isExpanded, showChevron, tone = \"default\", variant = \"default\" } = props;\n\n return (\n <>\n <RowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n />\n {item.endContent ? (\n <Box flexShrink={0} color=\"fg.muted\" display=\"flex\" alignItems=\"center\">\n {item.endContent}\n </Box>\n ) : null}\n {item.actions && item.actions.length > 0 ? (\n <RowActions actions={item.actions} context={{ nodeId: item.id }} />\n ) : null}\n </>\n );\n};\n","import { Box, HStack, Icon, Menu, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport type { ListRowActionMenuItem, ListRowMenuPlacement } from \"./list-row.types\";\n\ninterface ListRowMenuProps {\n items: ListRowActionMenuItem[];\n open: boolean;\n placement?: ListRowMenuPlacement;\n children: ReactElement;\n onOpenChange: (open: boolean) => void;\n onSelect: (item: ListRowActionMenuItem) => void;\n}\n\nconst ListRowMenuItemIcon = (props: { item: ListRowActionMenuItem }) => {\n const { item } = props;\n if (!item.icon) return null;\n\n return (\n <Box color=\"fg.muted\" flexShrink={0} display=\"inline-flex\">\n {typeof item.icon === \"function\" ? <Icon as={item.icon} boxSize=\"14px\" /> : item.icon}\n </Box>\n );\n};\n\nexport const ListRowMenu = (props: ListRowMenuProps) => {\n const { children, items, onOpenChange, onSelect, open, placement = \"right-start\" } = props;\n\n return (\n <Menu.Root\n open={open}\n positioning={{ placement, offset: { mainAxis: 4 } }}\n onOpenChange={(details) => onOpenChange(details.open)}\n >\n <Menu.Trigger asChild>{children}</Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"200px\" bg=\"bg\">\n {items.map((item) => (\n <Fragment key={item.id}>\n {item.separatorBefore ? <Menu.Separator /> : null}\n <Menu.Item\n value={item.id}\n disabled={item.disabled || item.readOnly}\n _disabled={item.readOnly ? { opacity: 1, cursor: \"default\" } : undefined}\n onClick={() => {\n if (!item.readOnly) onSelect(item);\n }}\n >\n <HStack gap=\"2\" minW=\"0\" w=\"full\" justify=\"space-between\" alignItems=\"center\">\n <HStack gap=\"2\" minW=\"0\" flex=\"1\" alignItems={item.description ? \"flex-start\" : \"center\"}>\n <ListRowMenuItemIcon item={item} />\n <Stack gap=\"0\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" truncate>\n {item.label}\n </Text>\n {item.description ? (\n <Text textStyle=\"label/XS\" color=\"fg.menu-item.secondary\" truncate>\n {item.description}\n </Text>\n ) : null}\n </Stack>\n </HStack>\n {item.endContent ? <Box flexShrink={0}>{item.endContent}</Box> : null}\n </HStack>\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { chakra, Icon } from \"@chakra-ui/react\";\nimport { forwardRef, type ReactElement, type MouseEvent as ReactMouseEvent, useState } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"../resource-context-menu\";\nimport { Tooltip } from \"../tooltip\";\nimport type { ListRowItem, ListRowProps } from \"./list-row.types\";\nimport { ListRowContent } from \"./list-row-content\";\nimport { ListRowMenu } from \"./list-row-menu\";\n\nconst computePaddingLeft = (depth: number) => {\n if (depth <= 0) return undefined;\n return `calc(var(--chakra-spacing-1) + ${depth} * 12px)`;\n};\n\nconst resolveListRowSizing = (variant: ListRowProps[\"variant\"], hasDescription: boolean) => {\n if (variant === \"compact\" && !hasDescription) return { rowHeight: \"1.75rem\", minHeight: undefined };\n\n return {\n rowHeight: \"auto\",\n minHeight: variant === \"default\" ? \"2.25rem\" : \"1.75rem\",\n };\n};\n\nconst createRowBackgroundProps = (input: {\n isSelected: boolean;\n selectedBg: ListRowProps[\"selectedBg\"];\n hoverBg: ListRowProps[\"hoverBg\"];\n tone: NonNullable<ListRowProps[\"tone\"]>;\n}) => ({\n bg: input.isSelected ? input.selectedBg : \"transparent\",\n _hover:\n input.tone === \"danger\" ? { boxShadow: \"inset 0 0 0 1px var(--chakra-colors-red-500)\" } : { bg: input.hoverBg },\n});\n\nconst createResourceContextActions = (items: NonNullable<ListRowItem[\"contextMenuItems\"]>): ResourceContextAction[] =>\n items.map((entry) => ({\n key: entry.id,\n label: entry.label,\n icon: typeof entry.icon === \"function\" ? <Icon as={entry.icon} boxSize=\"16px\" /> : entry.icon,\n endContent: entry.endContent,\n isDisabled: entry.disabled,\n separatorBefore: entry.separatorBefore,\n onClick: () => entry.onAction?.(),\n }));\n\nexport const ListRow = forwardRef<HTMLElement, ListRowProps>((props, ref) => {\n const {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n depth = 0,\n isSelected = false,\n isExpanded = false,\n showExpandToggle = false,\n variant = \"default\",\n tone = \"default\",\n selectedBg = \"bg.menu-item.selected\",\n hoverBg = \"bg.menu-item.hover\",\n asChild = false,\n className,\n role: roleProp,\n onToggleExpand,\n onPointerMove,\n draggable,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n onClick,\n ...rootProps\n } = props;\n const [menuOpen, setMenuOpen] = useState(false);\n\n const item: ListRowItem = {\n id,\n label,\n description,\n icon,\n iconColor,\n indicator,\n endContent,\n tooltip,\n disabled,\n isContainer,\n isNavigable,\n href,\n navigationIntent,\n menuItems,\n menuPlacement,\n contextMenuItems,\n actions,\n children,\n onActivate,\n };\n\n const dragProps = { draggable, onDragStart, onDragOver, onDragEnd, onDrop };\n\n const hasChildren = (item.children?.length ?? 0) > 0 || item.isContainer === true;\n const hasMenuItems = (item.menuItems?.length ?? 0) > 0;\n const showChevron = showExpandToggle && hasChildren;\n const isDisabled = item.disabled === true;\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasMenuItems) return;\n if (showChevron) {\n onToggleExpand?.();\n return;\n }\n if (onActivate) {\n onActivate();\n return;\n }\n item.onActivate?.();\n };\n\n const handleClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n handleActivate();\n };\n\n const handleMenuClick = (event: ReactMouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n setMenuOpen((current) => !current);\n };\n\n const paddingLeft = computePaddingLeft(depth);\n const verticalPadding = variant === \"default\" ? \"xs\" : \"2xs\";\n const hasDescription = item.description !== undefined;\n const activationProps = hasMenuItems ? { onClick: handleMenuClick } : { onClick: handleClick };\n const { rowHeight, minHeight } = resolveListRowSizing(variant, hasDescription);\n const rowRole = roleProp ?? (hasMenuItems ? \"button\" : \"option\");\n\n const rowProps = {\n ...rootProps,\n role: rowRole,\n \"aria-selected\": rootProps[\"aria-selected\"] ?? (rowRole === \"option\" ? isSelected : undefined),\n \"aria-expanded\": showChevron ? isExpanded : undefined,\n className: className ? `group ${className}` : \"group\",\n width: \"full\",\n minWidth: \"0\",\n maxWidth: \"full\",\n height: rowHeight,\n minHeight,\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"space-between\" as const,\n gap: \"xs\" as const,\n px: \"sm\",\n py: verticalPadding,\n pl: paddingLeft,\n borderRadius: \"0\" as const,\n ...createRowBackgroundProps({ isSelected, selectedBg, hoverBg, tone }),\n cursor: isDisabled ? (\"not-allowed\" as const) : (\"pointer\" as const),\n overflow: \"hidden\" as const,\n textAlign: \"left\" as const,\n color: \"inherit\",\n textDecoration: \"none\",\n };\n\n const content = (\n <ListRowContent\n item={item}\n isExpanded={isExpanded}\n showChevron={showChevron}\n isDisabled={isDisabled}\n tone={tone}\n variant={variant}\n />\n );\n\n const wrapWithContextMenu = (children: ReactElement) => {\n if (!item.contextMenuItems || item.contextMenuItems.length === 0) return children;\n\n return (\n <ResourceContextMenu actions={createResourceContextActions(item.contextMenuItems)} contentMinWidth=\"180px\">\n {children}\n </ResourceContextMenu>\n );\n };\n\n const wrapWithMenu = (children: ReactElement) => {\n if (!item.menuItems || item.menuItems.length === 0) return children;\n\n return (\n <ListRowMenu\n items={item.menuItems}\n open={menuOpen}\n placement={item.menuPlacement}\n onOpenChange={setMenuOpen}\n onSelect={(menuItem) => {\n setMenuOpen(false);\n menuItem.onAction?.();\n }}\n >\n {children}\n </ListRowMenu>\n );\n };\n\n const wrapWithTooltip = (children: ReactElement) => {\n if (!item.tooltip) return children;\n return <Tooltip content={item.tooltip}>{children}</Tooltip>;\n };\n\n const wrap = (children: ReactElement) =>\n hasMenuItems ? wrapWithMenu(children) : wrapWithContextMenu(wrapWithTooltip(children));\n\n if (asChild) {\n return wrap(\n <chakra.div ref={ref} {...rowProps} {...dragProps} {...activationProps} onPointerMove={onPointerMove}>\n {content}\n </chakra.div>,\n );\n }\n if (item.href && !showChevron && !isDisabled && !hasMenuItems) {\n return wrap(\n <chakra.a\n ref={ref}\n href={item.href}\n {...(rowProps as object)}\n {...dragProps}\n onClick={handleClick}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.a>,\n );\n }\n\n return wrap(\n <chakra.button\n ref={ref}\n type=\"button\"\n disabled={isDisabled}\n {...(rowProps as object)}\n {...dragProps}\n {...activationProps}\n onPointerMove={onPointerMove}\n >\n {content}\n </chakra.button>,\n );\n});\n","import { Menu, Portal } from \"@chakra-ui/react\";\nimport { type ComponentProps, Fragment, type ReactNode } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\n\ntype MenuRootProps = ComponentProps<typeof Menu.Root>;\n\nexport interface ResourceContextAction {\n key: string;\n label: string;\n onClick: () => Promise<void> | void;\n isDisabled?: boolean;\n icon?: ReactNode;\n endContent?: ReactNode;\n separatorBefore?: boolean;\n}\n\ninterface ResourceContextMenuProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n contentMinWidth?: string;\n contentBackground?: string;\n positioning?: MenuRootProps[\"positioning\"];\n /** Keep the menu open after selecting an item — useful for menus that toggle several entries in one pass. */\n closeOnSelect?: MenuRootProps[\"closeOnSelect\"];\n}\n\nexport const ResourceContextMenu = (props: ResourceContextMenuProps) => {\n const {\n actions,\n children,\n contentMinWidth = \"220px\",\n contentBackground = \"bg\",\n positioning = { placement: \"bottom-start\" },\n closeOnSelect,\n } = props;\n\n if (actions.length === 0) {\n return <>{children}</>;\n }\n\n return (\n <Menu.Root positioning={positioning} closeOnSelect={closeOnSelect}>\n <Menu.ContextTrigger asChild>{children}</Menu.ContextTrigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW={contentMinWidth} bg={contentBackground}>\n {actions.map((action) => (\n <Fragment key={action.key}>\n {action.separatorBefore ? <Menu.Separator /> : null}\n <Menu.Item value={action.key} disabled={action.isDisabled} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n label={action.label}\n icon={action.icon}\n endContent={action.endContent}\n disabled={action.isDisabled}\n onActivate={action.onClick}\n />\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Breadcrumb as ChakraBreadcrumb, type SystemStyleObject } from \"@chakra-ui/react\";\nimport * as React from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"./resource-context-menu\";\n\nexport interface BreadcrumbItem {\n title: React.ReactNode;\n url?: string;\n onClick?: () => void;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface BreadcrumbLinkProps {\n to: string;\n children: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends ChakraBreadcrumb.RootProps {\n separator?: React.ReactNode;\n separatorGap?: SystemStyleObject[\"gap\"];\n items: BreadcrumbItem[];\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\nconst linkProps = {\n alignItems: \"center\",\n display: \"inline-flex\",\n gap: \"2xs\",\n minW: \"0\",\n maxW: \"100%\",\n overflow: \"hidden\",\n outline: \"none\",\n boxShadow: \"none\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n _active: { outline: \"none\", boxShadow: \"none\" },\n _focus: { outline: \"none\", boxShadow: \"none\" },\n _focusVisible: { outline: \"none\", boxShadow: \"none\" },\n} as const;\n\nconst staticProps = {\n ...linkProps,\n color: \"fg\",\n cursor: \"default\",\n textDecoration: \"none\",\n _hover: { textDecoration: \"none\" },\n} as const;\n\ninterface BreadcrumbItemContentProps {\n item: BreadcrumbItem;\n isCurrent: boolean;\n linkComponent?: React.ComponentType<BreadcrumbLinkProps>;\n}\n\ninterface BreadcrumbSeparatorProps {\n separator?: React.ReactNode;\n}\n\nconst isInteractiveItem = (item: BreadcrumbItem) => Boolean(item.url || item.onClick);\n\nconst BreadcrumbItemLink = (props: BreadcrumbItemContentProps) => {\n const { item, isCurrent, linkComponent: LinkComponent } = props;\n\n if (isCurrent && !isInteractiveItem(item)) {\n return <ChakraBreadcrumb.CurrentLink {...staticProps}>{item.title}</ChakraBreadcrumb.CurrentLink>;\n }\n\n if (item.url && LinkComponent) {\n return (\n <ChakraBreadcrumb.Link asChild {...linkProps}>\n <LinkComponent to={item.url}>{item.title}</LinkComponent>\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.url) {\n return (\n <ChakraBreadcrumb.Link href={item.url} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n if (item.onClick) {\n return (\n <ChakraBreadcrumb.Link as=\"button\" type=\"button\" onClick={item.onClick} {...linkProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n }\n\n return (\n <ChakraBreadcrumb.Link as=\"span\" {...staticProps}>\n {item.title}\n </ChakraBreadcrumb.Link>\n );\n};\n\nconst BreadcrumbItemContent = (props: BreadcrumbItemContentProps) => {\n const { item } = props;\n const content = <BreadcrumbItemLink {...props} />;\n\n if (!item.contextMenuActions?.length) return content;\n\n return (\n <ResourceContextMenu actions={item.contextMenuActions} positioning={{ placement: \"bottom-start\" }}>\n {content}\n </ResourceContextMenu>\n );\n};\n\nconst BreadcrumbSeparator = (props: BreadcrumbSeparatorProps) => {\n const { separator } = props;\n\n if (separator === undefined) {\n return <ChakraBreadcrumb.Separator flexShrink={0} />;\n }\n\n return <ChakraBreadcrumb.Separator flexShrink={0}>{separator}</ChakraBreadcrumb.Separator>;\n};\n\nexport const Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(function BreadcrumbRoot(props, ref) {\n const { separator, separatorGap, items, linkComponent: LinkComponent, ...rest } = props;\n\n return (\n <ChakraBreadcrumb.Root ref={ref} {...rest}>\n <ChakraBreadcrumb.List gap={separatorGap} flexWrap=\"nowrap\" minW=\"0\" maxW=\"100%\" overflow=\"hidden\">\n {items.map((item, index) => {\n const isCurrent = index === items.length - 1;\n\n return (\n <React.Fragment key={index}>\n <ChakraBreadcrumb.Item minW=\"0\" flexShrink={isCurrent ? 1 : 0} overflow=\"hidden\">\n <BreadcrumbItemContent item={item} isCurrent={isCurrent} linkComponent={LinkComponent} />\n </ChakraBreadcrumb.Item>\n {isCurrent ? null : <BreadcrumbSeparator separator={separator} />}\n </React.Fragment>\n );\n })}\n </ChakraBreadcrumb.List>\n </ChakraBreadcrumb.Root>\n );\n});\n","import { chakra, type HTMLChakraProps, IconButton, type IconButtonProps } from \"@chakra-ui/react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Tooltip } from \"./tooltip\";\n\ntype BubbleButtonStyleProps = \"boxShadow\" | \"transition\" | \"_hover\" | \"_active\" | \"borderColor\" | \"borderWidth\";\n\nexport interface BubbleButtonProps extends Omit<IconButtonProps, BubbleButtonStyleProps> {\n containerProps?: HTMLChakraProps<\"div\">;\n isOpen?: boolean;\n tooltip?: ReactNode;\n}\n\nexport const BubbleButton = forwardRef<HTMLButtonElement, BubbleButtonProps>(function BubbleButton(props, ref) {\n const { children, containerProps, isOpen = false, tooltip, ...rest } = props;\n const button = (\n <IconButton\n ref={ref}\n rounded=\"full\"\n size=\"lg\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n boxShadow={isOpen ? \"none\" : \"mid\"}\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: \"border.accent\",\n boxShadow: \"mid\",\n }}\n _active={{ boxShadow: isOpen ? \"none\" : \"mid\" }}\n {...rest}\n >\n {children}\n </IconButton>\n );\n\n return (\n <chakra.div position=\"fixed\" bottom=\"6\" right=\"6\" zIndex=\"docked\" {...containerProps}>\n {tooltip ? <Tooltip content={tooltip}>{button}</Tooltip> : button}\n </chakra.div>\n );\n});\n","import { Box, chakra, Flex, HStack, type HTMLChakraProps, IconButton, Portal, Spacer } from \"@chakra-ui/react\";\nimport { Minus, SquareArrowOutUpRight } from \"lucide-react\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Header } from \"./header\";\nimport { Tooltip } from \"./tooltip\";\n\nexport interface BubblePanelProps {\n isOpen?: boolean;\n title?: string;\n menu?: ReactNode;\n onClose?: () => void;\n closeLabel?: string;\n onPopOut?: (() => void) | null;\n popOutLabel?: string;\n width?: string;\n height?: string;\n containerProps?: HTMLChakraProps<\"section\">;\n testId?: string;\n \"aria-label\"?: string;\n children?: ReactNode;\n}\n\nexport const BubblePanel = forwardRef<HTMLDivElement, BubblePanelProps>(function BubblePanel(props, ref) {\n const {\n isOpen = false,\n title,\n menu,\n onClose,\n closeLabel,\n onPopOut,\n popOutLabel,\n width = \"28rem\",\n height = \"38rem\",\n containerProps,\n testId,\n \"aria-label\": ariaLabel,\n children,\n } = props;\n\n if (!isOpen) return null;\n\n return (\n <Portal>\n <chakra.section\n ref={ref}\n role=\"dialog\"\n data-testid={testId}\n aria-label={ariaLabel ?? title}\n position=\"fixed\"\n bottom=\"3\"\n right=\"3\"\n w={width}\n maxW=\"calc(100vw - 2rem)\"\n h={height}\n maxH=\"calc(100vh - 2rem)\"\n borderRadius=\"3xl\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n boxShadow=\"2xl\"\n bg=\"bg\"\n overflow=\"hidden\"\n zIndex=\"dropdown\"\n {...containerProps}\n >\n <Flex direction=\"column\" h=\"full\">\n <Header variant=\"main\" gap=\"sm\" flexShrink={0}>\n <HStack gap=\"1\" minW=\"0\">\n {menu}\n </HStack>\n <Spacer />\n <HStack gap=\"1\">\n {onPopOut ? (\n <Tooltip content={popOutLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={popOutLabel} onClick={onPopOut}>\n <SquareArrowOutUpRight size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n {onClose ? (\n <Tooltip content={closeLabel}>\n <IconButton size=\"xs\" variant=\"ghost\" aria-label={closeLabel} onClick={onClose}>\n <Minus size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </HStack>\n </Header>\n <Box flex=\"1\" minH={0} display=\"flex\" flexDirection=\"column\" gap=\"sm\">\n {children}\n </Box>\n </Flex>\n </chakra.section>\n </Portal>\n );\n});\n","export type ThemePreference = string;\nexport type ThemePreferenceMode = \"light\" | \"dark\";\nexport type ThemePreferenceTokens = Record<string, string>;\n\nexport interface ThemePreferenceOption {\n id: ThemePreference;\n title?: string;\n mode: ThemePreferenceMode;\n tokens?: ThemePreferenceTokens;\n monacoTheme?: unknown;\n}\n\nexport const defaultThemePreferences = [\n { id: \"pstdio-light\", mode: \"light\" },\n { id: \"pstdio-dark\", mode: \"dark\" },\n] satisfies ThemePreferenceOption[];\n\nexport const isThemePreference = (\n value: string | null,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n): value is ThemePreference => typeof value === \"string\" && themePreferences.some((theme) => theme.id === value);\n\nexport const getThemePreferenceMode = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => themePreferences.find((preference) => preference.id === theme)?.mode ?? \"light\";\n\nexport const getThemePreferenceClassName = (theme: ThemePreference) => `theme-${theme}`;\n\nexport const getThemePreferenceClassNames = (\n theme: ThemePreference,\n mode: ThemePreferenceMode = getThemePreferenceMode(theme),\n) => [mode, getThemePreferenceClassName(theme)];\n\nconst THEME_TOKEN_PATHS_ATTRIBUTE = \"data-pstdio-theme-token-paths\";\n\nconst getThemePreferenceCssVariableName = (tokenPath: string) => `--chakra-${tokenPath.replaceAll(\".\", \"-\")}`;\n\nconst removeThemeTokens = (el: HTMLElement, theme?: ThemePreferenceOption) => {\n if (!theme?.tokens) return;\n\n for (const tokenPath of Object.keys(theme.tokens)) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n};\n\nconst removeTrackedThemeTokens = (el: HTMLElement) => {\n const tokenPaths = el.getAttribute(THEME_TOKEN_PATHS_ATTRIBUTE)?.split(\"\\n\").filter(Boolean) ?? [];\n\n for (const tokenPath of tokenPaths) {\n el.style.removeProperty(getThemePreferenceCssVariableName(tokenPath));\n }\n\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n};\n\nconst applyThemeTokens = (el: HTMLElement, theme: ThemePreferenceOption) => {\n if (!theme.tokens) {\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, \"\");\n return;\n }\n\n for (const [tokenPath, value] of Object.entries(theme.tokens)) {\n el.style.setProperty(getThemePreferenceCssVariableName(tokenPath), value);\n }\n el.setAttribute(THEME_TOKEN_PATHS_ATTRIBUTE, Object.keys(theme.tokens).join(\"\\n\"));\n};\n\nexport const applyThemePreference = (\n theme: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof document === \"undefined\") return;\n\n const root = document.documentElement;\n const body = document.body;\n const preference = themePreferences.find((option) => option.id === theme) ?? { id: theme, mode: \"light\" };\n const mode = getThemePreferenceMode(theme, themePreferences);\n\n for (const el of [root, body]) {\n if (!el) continue;\n const previousTheme = el.getAttribute(\"data-theme\");\n const previousPreference = themePreferences.find((option) => option.id === previousTheme);\n\n el.classList.remove(\"light\", \"dark\");\n if (previousTheme) {\n el.classList.remove(getThemePreferenceClassName(previousTheme));\n }\n removeTrackedThemeTokens(el);\n removeThemeTokens(el, previousPreference);\n applyThemeTokens(el, preference);\n el.classList.add(...getThemePreferenceClassNames(theme, mode));\n el.setAttribute(\"data-theme\", theme);\n el.setAttribute(\"data-color-mode\", mode);\n el.style.colorScheme = mode;\n }\n};\n","interface BrowserStorage {\n getItem: (key: string) => string | null;\n removeItem: (key: string) => void;\n setItem: (key: string, value: string) => void;\n}\n\nconst noopStorage = {\n getItem: () => null,\n removeItem: () => {},\n setItem: () => {},\n} satisfies BrowserStorage;\n\nconst readLocalStorage = () => {\n try {\n return globalThis.localStorage;\n } catch {\n return undefined;\n }\n};\n\nexport const createBrowserStorage = (): BrowserStorage => {\n const storage = readLocalStorage();\n if (!storage) return noopStorage;\n\n return {\n getItem(key) {\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n },\n removeItem(key) {\n try {\n storage.removeItem(key);\n } catch {}\n },\n setItem(key, value) {\n try {\n storage.setItem(key, value);\n } catch {}\n },\n };\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from \"react\";\n\nimport {\n applyThemePreference,\n defaultThemePreferences,\n getThemePreferenceMode,\n isThemePreference,\n type ThemePreference,\n type ThemePreferenceMode,\n type ThemePreferenceOption,\n} from \"./apply-theme-preference\";\nimport { createBrowserStorage } from \"./browser-storage\";\n\nconst STORAGE_KEY = \"theme-preference\";\n\nconst ThemePreferenceContext = createContext<ThemePreferenceContextValue | null>(null);\n\ninterface ThemePreferenceContextValue {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (preference: ThemePreference) => void;\n toggleThemePreference: () => void;\n}\n\ninterface ThemePreferenceProviderProps {\n children: ReactNode;\n initialPreference?: ThemePreference;\n themePreferences?: readonly ThemePreferenceOption[];\n}\n\nconst getDefaultThemePreference = (themePreferences: readonly ThemePreferenceOption[], mode: ThemePreferenceMode) =>\n themePreferences.find((preference) => preference.mode === mode)?.id ??\n themePreferences[0]?.id ??\n defaultThemePreferences[0].id;\n\nexport const getInitialThemePreference = (\n themePreferences: readonly ThemePreferenceOption[] = defaultThemePreferences,\n) => {\n if (typeof window === \"undefined\") return getDefaultThemePreference(themePreferences, \"light\");\n\n const stored = createBrowserStorage().getItem(STORAGE_KEY);\n if (isThemePreference(stored, themePreferences)) return stored;\n\n const prefersDark =\n typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n return getDefaultThemePreference(themePreferences, prefersDark ? \"dark\" : \"light\");\n};\n\nexport const ThemePreferenceProvider = (props: ThemePreferenceProviderProps) => {\n const { children, themePreferences = defaultThemePreferences } = props;\n const initialPreference = props.initialPreference ?? getInitialThemePreference(themePreferences);\n const [themePreference, setThemePreference] = useState<ThemePreference>(initialPreference);\n\n useEffect(() => {\n if (!isThemePreference(themePreference, themePreferences)) {\n setThemePreference(\n getDefaultThemePreference(themePreferences, getThemePreferenceMode(themePreference, themePreferences)),\n );\n return;\n }\n\n applyThemePreference(themePreference, themePreferences);\n if (typeof window !== \"undefined\") createBrowserStorage().setItem(STORAGE_KEY, themePreference);\n }, [themePreference, themePreferences]);\n\n const toggleThemePreference = () => {\n setThemePreference((prev) => {\n const nextMode = getThemePreferenceMode(prev, themePreferences) === \"dark\" ? \"light\" : \"dark\";\n\n return getDefaultThemePreference(themePreferences, nextMode);\n });\n };\n\n return (\n <ThemePreferenceContext value={{ themePreference, themePreferences, setThemePreference, toggleThemePreference }}>\n {children}\n </ThemePreferenceContext>\n );\n};\n\nexport const useThemePreference = () => {\n const context = useContext(ThemePreferenceContext);\n\n if (!context) {\n throw new Error(\"useThemePreference must be used within a ThemePreferenceProvider\");\n }\n\n return context;\n};\n","import { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport { useEffect, useRef } from \"react\";\nimport type { MonacoThemeData } from \"../theme\";\nimport { useThemePreference } from \"../utils/theme-preference\";\n\nexport const customTheme = {\n base: \"vs-dark\" as const,\n inherit: true,\n rules: [],\n colors: {\n \"editor.background\": \"#0a0d15\",\n \"editor.foreground\": \"#f5f5f5\",\n \"editor.lineHighlightBackground\": \"#22252C\",\n \"editorCursor.foreground\": \"#A7A7A7\",\n \"editorWhitespace.foreground\": \"#3B3B3B\",\n \"editorIndentGuide.background\": \"#404040\",\n \"editorIndentGuide.activeBackground\": \"#707070\",\n },\n} satisfies MonacoThemeData;\n\nconst isMonacoTheme = (value: unknown): value is MonacoThemeData =>\n typeof value === \"object\" && value !== null && \"base\" in value && \"colors\" in value;\n\ntype MonacoApi = {\n editor: {\n defineTheme: (name: string, data: MonacoThemeData) => void;\n setTheme: (name: string) => void;\n };\n};\n\nconst EDITOR_THEME_NAME = \"ps-theme\";\n\nconst useEditorTheme = () => {\n const { themePreference, themePreferences } = useThemePreference();\n const preference = themePreferences.find((theme) => theme.id === themePreference);\n return isMonacoTheme(preference?.monacoTheme) ? preference.monacoTheme : customTheme;\n};\n\nconst useApplyEditorTheme = (editorTheme: MonacoThemeData) => {\n const monacoRef = useRef<MonacoApi | null>(null);\n\n useEffect(() => {\n const monaco = monacoRef.current;\n if (!monaco) return;\n\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n }, [editorTheme]);\n\n return (monaco: MonacoApi) => {\n monacoRef.current = monaco;\n monaco.editor.defineTheme(EDITOR_THEME_NAME, editorTheme);\n monaco.editor.setTheme(EDITOR_THEME_NAME);\n };\n};\n\ninterface CodeEditorProps {\n language: string;\n defaultCode?: string;\n code?: string;\n isEditable: boolean;\n showLineNumbers?: boolean;\n onChange?: (code: string) => void;\n disableScroll?: boolean;\n}\n\nexport const CodeEditor = (props: CodeEditorProps) => {\n const { defaultCode, code, showLineNumbers, isEditable, language = \"javascript\", onChange, disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: !isEditable,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <Editor\n width=\"100%\"\n height=\"100%\"\n language={language}\n defaultValue={defaultCode}\n value={code}\n theme={EDITOR_THEME_NAME}\n options={options}\n onChange={(value) => {\n onChange?.(value || \"\");\n }}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={async (editor, monaco) => {\n applyEditorTheme(monaco);\n\n // Add JSX support\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n\n // Format on cmd+s\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, async () => {\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n });\n\n // Run format on the initial value\n await editor.getAction(\"editor.action.formatDocument\")?.run();\n }}\n />\n );\n};\n\ninterface CodeDiffEditorProps {\n language: string;\n original: string;\n modified: string;\n showLineNumbers?: boolean;\n disableScroll?: boolean;\n}\n\nexport const CodeDiffEditor = (props: CodeDiffEditorProps) => {\n const { original, modified, showLineNumbers, language = \"javascript\", disableScroll } = props;\n const editorTheme = useEditorTheme();\n const applyEditorTheme = useApplyEditorTheme(editorTheme);\n\n const options = {\n tabSize: 2,\n minimap: {\n enabled: false,\n },\n fontSize: 12,\n readOnly: true,\n originalEditable: false,\n renderSideBySide: true,\n useInlineViewWhenSpaceIsTooSmall: true,\n lineNumbers: showLineNumbers ? \"on\" : \"off\",\n ...(disableScroll\n ? {\n scrollbar: {\n vertical: \"hidden\" as const,\n horizontal: \"hidden\" as const,\n useShadows: false,\n alwaysConsumeMouseWheel: false,\n },\n scrollBeyondLastLine: false,\n mouseWheelScrollSensitivity: 0,\n overviewRulerLanes: 0,\n }\n : {}),\n } as const;\n\n return (\n <DiffEditor\n width=\"100%\"\n height=\"100%\"\n language={language}\n original={original}\n modified={modified}\n theme={EDITOR_THEME_NAME}\n options={options}\n beforeMount={(monaco) => {\n applyEditorTheme(monaco);\n }}\n onMount={(_, monaco) => {\n applyEditorTheme(monaco);\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: monaco.languages.typescript.JsxEmit.React,\n });\n }}\n />\n );\n};\n","import { Box, type BoxProps, Text, type TextProps } from \"@chakra-ui/react\";\n\nexport interface ContentPlaceholderProps extends BoxProps {}\n\nexport const contentPlaceholderBackgroundImage = `url(\"data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%239C92AC' fill-opacity='0.2' fillRule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E\")`;\n\nexport const ContentPlaceholder = (props: ContentPlaceholderProps) => (\n <Box\n {...props}\n css={{\n backgroundClip: \"padding-box\",\n backgroundImage: contentPlaceholderBackgroundImage,\n display: \"flex\",\n width: \"100%\",\n }}\n />\n);\n\nexport const Label = (props: TextProps) => (\n <Box p=\"2\">\n <Text color=\"fg.muted\" fontWeight=\"medium\" textStyle=\"sm\" whiteSpace=\"nowrap\" {...props} />\n </Box>\n);\n","import { Icon } from \"@chakra-ui/react\";\nimport { CircleAlert, CircleCheck, CircleDashed, CirclePause, CircleStop, ClockAlert } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\n\nexport type SessionCompletionStatus =\n | \"in_progress\"\n | \"awaiting_input\"\n | \"queued\"\n | \"completed\"\n | \"failed\"\n | \"cancelled\"\n | \"disconnected\";\n\nexport const resolveSessionIndicatorIcon = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return CircleCheck;\n if (status === \"failed\") return CircleAlert;\n if (status === \"cancelled\") return CircleStop;\n if (status === \"disconnected\") return CirclePause;\n if (status === \"queued\") return ClockAlert;\n return CircleDashed;\n};\n\nexport const resolveSessionIndicatorColor = (status: SessionCompletionStatus | undefined) => {\n if (status === \"completed\") return \"fg.success\";\n if (status === \"failed\") return \"fg.error\";\n if (status === \"cancelled\") return \"fg.warning\";\n if (status === \"disconnected\") return \"fg.warning\";\n if (status === \"queued\") return \"fg.info\";\n return \"fg.muted\";\n};\n\ninterface SessionIndicatorProps {\n status?: SessionCompletionStatus;\n boxSize?: ComponentProps<typeof Icon>[\"boxSize\"];\n ariaLabel?: string;\n cursor?: ComponentProps<typeof Icon>[\"cursor\"];\n onClick?: ComponentProps<typeof Icon>[\"onClick\"];\n}\n\nexport const SessionIndicator = (props: SessionIndicatorProps) => {\n const { status, boxSize = \"14px\", ariaLabel = \"Session status\", cursor, onClick } = props;\n\n return (\n <Icon\n as={resolveSessionIndicatorIcon(status)}\n boxSize={boxSize}\n color={resolveSessionIndicatorColor(status)}\n aria-label={ariaLabel}\n cursor={cursor}\n onClick={onClick}\n />\n );\n};\n","import { Badge, Box, HStack, Icon, Spinner, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, GitBranchIcon, GitCommitIcon } from \"lucide-react\";\nimport type { MouseEvent } from \"react\";\nimport { type SessionCompletionStatus, SessionIndicator } from \"@/components/session-indicator\";\nimport { Tooltip } from \"@/components/tooltip\";\n\ninterface WorkspaceAttemptStatus {\n name: string;\n color: string;\n description?: string | null;\n}\n\nconst ATTEMPT_STATUS_COLOR_ALIASES: Record<string, string> = {\n amber: \"yellow\",\n};\n\nconst CHAKRA_COLOR_PALETTES = new Set([\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n]);\n\nexport interface WorkspaceBadgeProps {\n workspaceType: \"worktree\" | \"current_branch\";\n initializing?: boolean;\n label?: string;\n shorthand?: string;\n attemptStatus?: WorkspaceAttemptStatus;\n sessionStatus?: SessionCompletionStatus;\n showLeadingSessionIndicator?: boolean;\n diffAdditions?: number;\n diffDeletions?: number;\n hasMultipleWorkspaces?: boolean;\n onClick?: () => void;\n onDropdownClick?: () => void;\n onSessionIndicatorClick?: () => void;\n}\n\nconst resolveWorkspaceIcon = (workspaceType: WorkspaceBadgeProps[\"workspaceType\"]) => {\n if (workspaceType === \"current_branch\") {\n return GitCommitIcon;\n }\n\n return GitBranchIcon;\n};\n\nconst resolveAttemptStatusColor = (color: string) => {\n if (color.startsWith(\"#\") || color.startsWith(\"rgb\") || color.startsWith(\"hsl\") || color.startsWith(\"var(\")) {\n return color;\n }\n\n const resolvedColor = ATTEMPT_STATUS_COLOR_ALIASES[color] ?? color;\n if (CHAKRA_COLOR_PALETTES.has(resolvedColor)) {\n return `var(--chakra-colors-${resolvedColor}-500)`;\n }\n\n return resolvedColor;\n};\n\nconst buildAttemptStatusTooltip = (attemptStatus: WorkspaceAttemptStatus | undefined) => {\n if (!attemptStatus) return null;\n\n if (attemptStatus.description) {\n return `${attemptStatus.name}: ${attemptStatus.description}`;\n }\n\n return attemptStatus.name;\n};\n\nconst handleIconClick = (event: MouseEvent<SVGSVGElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst handleBadgeClick = (event: MouseEvent<HTMLSpanElement>, onClick: (() => void) | undefined) => {\n event.stopPropagation();\n onClick?.();\n};\n\nconst LeadingSessionIndicator = (props: {\n sessionStatus?: SessionCompletionStatus;\n onSessionIndicatorClick?: () => void;\n}) => {\n const { sessionStatus, onSessionIndicatorClick } = props;\n\n if (!sessionStatus) {\n return null;\n }\n\n const sessionTooltip = onSessionIndicatorClick ? \"Open latest session\" : \"Latest session status\";\n\n return (\n <Tooltip content={sessionTooltip}>\n <SessionIndicator\n status={sessionStatus}\n boxSize=\"12px\"\n ariaLabel={sessionTooltip}\n cursor=\"pointer\"\n onClick={onSessionIndicatorClick ? (event) => handleIconClick(event, onSessionIndicatorClick) : undefined}\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceTypeIndicator = (props: {\n workspaceType: WorkspaceBadgeProps[\"workspaceType\"];\n initializing: boolean;\n label?: string;\n shorthand?: string;\n}) => {\n const { workspaceType, initializing, label, shorthand } = props;\n const WorkspaceTypeIcon = resolveWorkspaceIcon(workspaceType);\n const displayLabel = label ?? shorthand;\n\n return (\n <HStack as=\"span\" gap=\"2xs\" alignItems=\"center\" color=\"fg.muted\" minW=\"0\">\n <Icon\n as={WorkspaceTypeIcon}\n boxSize=\"3.5\"\n flexShrink={0}\n aria-label={workspaceType === \"worktree\" ? \"Worktree\" : \"Current branch\"}\n />\n {initializing ? <Spinner size=\"xs\" color=\"fg.muted\" /> : null}\n {displayLabel ? (\n <Text as=\"span\" textStyle=\"label/XS/medium\" color=\"fg.muted\" minW=\"0\" maxW=\"10rem\" truncate>\n {displayLabel}\n </Text>\n ) : null}\n </HStack>\n );\n};\n\nconst WorkspaceAttemptStatusIndicator = (props: { attemptStatus?: WorkspaceAttemptStatus }) => {\n const { attemptStatus } = props;\n\n if (!attemptStatus) {\n return null;\n }\n\n return (\n <Tooltip content={buildAttemptStatusTooltip(attemptStatus)}>\n <Box\n as=\"span\"\n boxSize=\"8px\"\n borderRadius=\"full\"\n backgroundColor={resolveAttemptStatusColor(attemptStatus.color)}\n flexShrink={0}\n aria-label={`Attempt status ${attemptStatus.name}`}\n data-testid=\"workspace-attempt-status\"\n />\n </Tooltip>\n );\n};\n\nconst WorkspaceDiffTotals = (props: { diffAdditions?: number; diffDeletions?: number }) => {\n const { diffAdditions, diffDeletions } = props;\n\n if (typeof diffAdditions !== \"number\" || typeof diffDeletions !== \"number\") {\n return null;\n }\n\n return (\n <HStack as=\"span\" gap=\"3xs\" flexShrink={0}>\n <Text as=\"span\" textStyle=\"label/XS/medium\" color=\"fg.success\">\n +{diffAdditions}\n </Text>\n <Text as=\"span\" textStyle=\"label/XS/medium\" color=\"fg.error\">\n -{diffDeletions}\n </Text>\n </HStack>\n );\n};\n\nconst WorkspaceDropdownTrigger = (props: { hasMultipleWorkspaces: boolean; onDropdownClick?: () => void }) => {\n const { hasMultipleWorkspaces, onDropdownClick } = props;\n\n if (!hasMultipleWorkspaces) {\n return null;\n }\n\n return (\n <Icon\n as={ChevronDown}\n boxSize=\"12px\"\n color=\"fg.muted\"\n cursor={onDropdownClick ? \"pointer\" : \"default\"}\n aria-label=\"Workspace selector\"\n onClick={onDropdownClick ? (event) => handleIconClick(event, onDropdownClick) : undefined}\n />\n );\n};\n\nexport const WorkspaceBadge = (props: WorkspaceBadgeProps) => {\n const {\n workspaceType,\n initializing = false,\n label,\n shorthand,\n attemptStatus,\n sessionStatus,\n showLeadingSessionIndicator = true,\n diffAdditions,\n diffDeletions,\n hasMultipleWorkspaces = false,\n onClick,\n onDropdownClick,\n onSessionIndicatorClick,\n } = props;\n\n return (\n <Badge\n as=\"span\"\n display=\"inline-flex\"\n gap=\"2xs\"\n alignItems=\"center\"\n minW=\"0\"\n maxW=\"100%\"\n variant=\"subtle\"\n colorPalette=\"gray\"\n textStyle=\"label/XS/medium\"\n cursor={onClick || onDropdownClick || hasMultipleWorkspaces ? \"pointer\" : \"default\"}\n transition=\"background-color 0.2s ease-in-out\"\n _hover={{ backgroundColor: \"bg.hover\" }}\n onClick={onClick ? (event) => handleBadgeClick(event, onClick) : undefined}\n data-testid=\"workspace-badge\"\n >\n {showLeadingSessionIndicator ? (\n <LeadingSessionIndicator sessionStatus={sessionStatus} onSessionIndicatorClick={onSessionIndicatorClick} />\n ) : null}\n <WorkspaceTypeIndicator\n workspaceType={workspaceType}\n initializing={initializing}\n label={label}\n shorthand={shorthand}\n />\n <WorkspaceAttemptStatusIndicator attemptStatus={attemptStatus} />\n <WorkspaceDiffTotals diffAdditions={diffAdditions} diffDeletions={diffDeletions} />\n <WorkspaceDropdownTrigger hasMultipleWorkspaces={hasMultipleWorkspaces} onDropdownClick={onDropdownClick} />\n </Badge>\n );\n};\n","const suppressionKey = \"__pstdioDataRendererCardClickSuppressionUntil\";\n\ntype DataRendererCardInteractionGlobal = typeof globalThis & {\n [suppressionKey]?: number;\n};\n\nconst getInteractionGlobal = () => globalThis as DataRendererCardInteractionGlobal;\n\nexport const suppressNextDataRendererCardClick = () => {\n getInteractionGlobal()[suppressionKey] = Date.now() + 1500;\n};\n\nexport const isDataRendererCardClickSuppressed = () => Date.now() <= (getInteractionGlobal()[suppressionKey] ?? 0);\n","import { Grid, GridItem, Icon, IconButton, Popover, Text } from \"@chakra-ui/react\";\nimport {\n AlertTriangle,\n BookOpen,\n Bug,\n ChartColumnIncreasing,\n CheckCircle,\n Circle,\n CircleQuestionMark,\n Clock,\n Code,\n Eye,\n Feather,\n Flag,\n Flame,\n Gauge,\n Layers,\n Lightbulb,\n Scale,\n Shield,\n ShieldAlert,\n Sparkles,\n Star,\n Tag,\n Wrench,\n} from \"lucide-react\";\nimport type { ComponentType } from \"react\";\n\nexport interface IconColorPickerIconOption {\n value: string | null;\n label: string;\n icon: ComponentType;\n}\n\nexport const optionColors = [\n \"gray\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"teal\",\n \"blue\",\n \"cyan\",\n \"purple\",\n \"pink\",\n] as const;\n\nexport const optionIcons = [\n { value: null, label: \"circle\", icon: Circle },\n { value: \"bug\", label: \"bug\", icon: Bug },\n { value: \"sparkles\", label: \"sparkles\", icon: Sparkles },\n { value: \"book-open\", label: \"book open\", icon: BookOpen },\n { value: \"wrench\", label: \"wrench\", icon: Wrench },\n { value: \"gauge\", label: \"gauge\", icon: Gauge },\n { value: \"feather\", label: \"feather\", icon: Feather },\n { value: \"scale\", label: \"scale\", icon: Scale },\n { value: \"layers\", label: \"layers\", icon: Layers },\n { value: \"alert-triangle\", label: \"alert triangle\", icon: AlertTriangle },\n { value: \"star\", label: \"star\", icon: Star },\n { value: \"flag\", label: \"flag\", icon: Flag },\n { value: \"flame\", label: \"flame\", icon: Flame },\n { value: \"lightbulb\", label: \"lightbulb\", icon: Lightbulb },\n { value: \"shield\", label: \"shield\", icon: Shield },\n { value: \"eye\", label: \"eye\", icon: Eye },\n { value: \"clock\", label: \"clock\", icon: Clock },\n { value: \"check-circle\", label: \"check circle\", icon: CheckCircle },\n { value: \"tag\", label: \"tag\", icon: Tag },\n { value: \"code\", label: \"code\", icon: Code },\n { value: \"chart-column-increasing\", label: \"chart column increasing\", icon: ChartColumnIncreasing },\n { value: \"circle-question-mark\", label: \"circle question mark\", icon: CircleQuestionMark },\n { value: \"shield-alert\", label: \"shield alert\", icon: ShieldAlert },\n] satisfies IconColorPickerIconOption[];\n\nexport const getIconComponent = (\n name: string | null | undefined,\n iconOptions: readonly IconColorPickerIconOption[] = optionIcons,\n): ComponentType => {\n const entry = iconOptions.find((icon) => icon.value === (name ?? null));\n return entry?.icon ?? Circle;\n};\n\nexport interface IconColorPickerProps {\n color: string;\n colorOptions?: readonly string[];\n icon?: string | null;\n iconOptions?: readonly IconColorPickerIconOption[];\n onColorChange: (color: string) => void;\n onIconChange?: (icon: string | null) => void;\n disabled?: boolean;\n showIcons?: boolean;\n \"aria-label\"?: string;\n}\n\nexport const IconColorPicker = (props: IconColorPickerProps) => {\n const {\n color,\n colorOptions = optionColors,\n icon,\n iconOptions = optionIcons,\n onColorChange,\n onIconChange,\n disabled,\n showIcons = true,\n \"aria-label\": ariaLabel = \"Pick color and icon\",\n } = props;\n const IconComponent = showIcons ? getIconComponent(icon, iconOptions) : Circle;\n const selectedIcon = icon ?? null;\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" disabled={disabled} aria-label={ariaLabel}>\n <Icon\n as={IconComponent}\n boxSize=\"14px\"\n color={`${color}.500`}\n fill={showIcons ? undefined : `${color}.500`}\n />\n </IconButton>\n </Popover.Trigger>\n <Popover.Positioner>\n <Popover.Content w={showIcons ? \"320px\" : \"220px\"} p=\"sm\" bg=\"bg\">\n <Text textStyle=\"label/S\" mb=\"xs\">\n Color\n </Text>\n <Grid\n templateColumns={showIcons ? \"repeat(10, 1fr)\" : \"repeat(5, 1fr)\"}\n gap=\"2xs\"\n mb={showIcons ? \"md\" : \"0\"}\n >\n {colorOptions.map((optionColor) => (\n <GridItem key={optionColor}>\n <IconButton\n size=\"2xs\"\n variant={optionColor === color ? \"solid\" : \"ghost\"}\n colorPalette={optionColor}\n onClick={() => onColorChange(optionColor)}\n aria-label={optionColor}\n >\n <Icon as={Circle} boxSize=\"14px\" fill={`${optionColor}.500`} color={`${optionColor}.500`} />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n {showIcons ? (\n <>\n <Text textStyle=\"label/S\" mb=\"xs\">\n Icon\n </Text>\n <Grid templateColumns=\"repeat(5, 1fr)\" gap=\"2xs\">\n {iconOptions.map((entry) => (\n <GridItem key={entry.value ?? \"none\"}>\n <IconButton\n size=\"2xs\"\n variant={entry.value === selectedIcon ? \"solid\" : \"ghost\"}\n onClick={() => onIconChange?.(entry.value)}\n aria-label={entry.label}\n >\n <Icon as={entry.icon} boxSize=\"14px\" />\n </IconButton>\n </GridItem>\n ))}\n </Grid>\n </>\n ) : null}\n </Popover.Content>\n </Popover.Positioner>\n </Popover.Root>\n );\n};\n","import type { ReactNode } from \"react\";\n\nexport type ViewMode = \"board\" | \"list\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport const NO_GROUPING = \"none\";\nexport const MANUAL_ORDERING = \"manual\";\n\nexport interface EnumOption {\n value: string;\n label: string;\n color?: string;\n icon?: string | null;\n}\n\n/**\n * Reactive options source for enum / enum-multi attributes. Mirrors React's\n * useSyncExternalStore contract so a contribution can hand its options off as\n * a live collection (e.g. a project-scoped resource) instead of a frozen\n * array, and the renderer subscribes to it the same way it subscribes to rows.\n */\nexport interface EnumOptionsSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => EnumOption[];\n}\n\nexport type EnumOptions = EnumOption[] | EnumOptionsSource;\n\nexport type AttributeType =\n | { kind: \"enum\"; options: EnumOptions }\n | { kind: \"enum-multi\"; options: EnumOptions }\n | { kind: \"string\" }\n | { kind: \"date\" }\n | { kind: \"number\" }\n | { kind: \"user\" };\n\nexport const isEnumOptionsSource = (options: EnumOptions): options is EnumOptionsSource => !Array.isArray(options);\n\nexport type AttributeKind = AttributeType[\"kind\"];\n\nexport type AttributeDisplayDescriptor = { kind: \"workspace-badge\"; itemsAttributeId: string };\n\nexport interface AttributeDescriptor {\n id: string;\n label: string;\n type: AttributeType;\n filterable?: boolean;\n groupable?: boolean;\n sortable?: boolean;\n displayable?: boolean;\n editable?: boolean;\n display?: AttributeDisplayDescriptor;\n render?: (value: unknown, row: DataRendererRow) => ReactNode;\n compare?: (a: unknown, b: unknown) => number;\n}\n\n/**\n * Reactive source for an entire attribute schema. Mirrors React's\n * useSyncExternalStore contract so consumers (e.g. the workbench's\n * data-renderer bridge) can subscribe and re-resolve when the schema changes\n * — letting a contribution add/remove/edit attributes at runtime without\n * re-registering.\n */\nexport interface AttributesSource {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => AttributeDescriptor[];\n}\n\nexport const isAttributesSource = (\n attributes: AttributeDescriptor[] | AttributesSource,\n): attributes is AttributesSource => !Array.isArray(attributes);\n\nexport interface DataRendererRow {\n id: string;\n title: string;\n /**\n * Optional navigation handle. When set, the renderer's default click handler\n * routes through the contribution's onRowClick (which typically opens the\n * resource via the workbench).\n */\n resource?: unknown;\n attributes: Record<string, unknown>;\n}\n\nexport interface DataRendererOrdering {\n attributeId: string | typeof MANUAL_ORDERING;\n direction: SortDirection;\n}\n\nexport interface DataRendererSettings {\n viewMode: ViewMode;\n columnGrouping: string | typeof NO_GROUPING;\n rowGrouping: string | typeof NO_GROUPING;\n ordering: DataRendererOrdering;\n displayProperties: string[];\n}\n\nexport type DataRendererFilterState = Record<string, string[]>;\n\nexport const DEFAULT_DATA_RENDERER_SETTINGS: DataRendererSettings = {\n viewMode: \"board\",\n columnGrouping: NO_GROUPING,\n rowGrouping: NO_GROUPING,\n ordering: { attributeId: MANUAL_ORDERING, direction: \"asc\" },\n displayProperties: [],\n};\n\nexport const isEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum\" }> =>\n type.kind === \"enum\";\nexport const isMultiEnumType = (type: AttributeType): type is Extract<AttributeType, { kind: \"enum-multi\" }> =>\n type.kind === \"enum-multi\";\n\n/**\n * Look up an attribute by id from a contribution-provided descriptor list.\n * Returns undefined for sentinels (\"none\", \"manual\") or unknown ids.\n */\nexport const findAttribute = (attributes: AttributeDescriptor[], id: string | undefined) => {\n if (!id || id === NO_GROUPING || id === MANUAL_ORDERING) return undefined;\n return attributes.find((attribute) => attribute.id === id);\n};\n","import type { AttributeType } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\n/**\n * Normalize an enum / enum-multi attribute's `options` to a plain option list.\n * Sources resolve via `getSnapshot()` on every call, so callers naturally see\n * the latest values.\n */\nexport const getEnumOptions = (type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return [];\n return isEnumOptionsSource(type.options) ? type.options.getSnapshot() : type.options;\n};\n\nexport const toTitleCase = (value: string) =>\n value\n .replaceAll(\"_\", \" \")\n .split(\" \")\n .filter((chunk) => chunk.length > 0)\n .map((chunk) => chunk[0]!.toUpperCase() + chunk.slice(1))\n .join(\" \");\n\nexport const findEnumOption = (type: AttributeType, value: string) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return undefined;\n return getEnumOptions(type).find((option) => option.value === value);\n};\n\nexport const enumOptionLabel = (type: AttributeType, value: string) => {\n const option = findEnumOption(type, value);\n return option?.label ?? toTitleCase(value);\n};\n","import { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./data-renderer-enum-helpers\";\nimport type { AttributeDescriptor, AttributeType, EnumOption } from \"./types\";\n\nconst summarizeMultiEnum = (values: string[], type: AttributeType) => {\n if (values.length === 0) return null;\n if (values.length <= 2) return values.map((value) => enumOptionLabel(type, value)).join(\", \");\n return `${enumOptionLabel(type, values[0]!)}, ${enumOptionLabel(type, values[1]!)} +${values.length - 2}`;\n};\n\nexport interface AttributeBadge {\n attributeId: string;\n attributeLabel?: string;\n label: string;\n color?: string;\n icon?: string | null;\n value?: string | string[];\n options?: EnumOption[];\n isEditable?: boolean;\n}\n\nexport const getAttributeBadgeColorPalette = (_badge: AttributeBadge) => \"gray\";\n\nexport const renderEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum\") return null;\n const stringValue = typeof value === \"string\" ? value : null;\n const editable = descriptor.editable === true;\n if (!stringValue) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: stringValue ?? undefined,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const option = findEnumOption(type, stringValue);\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: option?.label ?? toTitleCase(stringValue),\n color: option?.color,\n icon: option?.icon,\n ...(editable ? { value: stringValue, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n\nexport const renderMultiEnumBadge = (descriptor: AttributeDescriptor, type: AttributeType, value: unknown) => {\n if (type.kind !== \"enum-multi\") return null;\n const values = Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n const summary = summarizeMultiEnum(values, type);\n const editable = descriptor.editable === true;\n if (!summary) {\n return editable\n ? {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: descriptor.label,\n value: values,\n options: getEnumOptions(type),\n isEditable: true,\n }\n : null;\n }\n const firstOption = values[0] ? findEnumOption(type, values[0]) : undefined;\n return {\n attributeId: descriptor.id,\n attributeLabel: descriptor.label,\n label: summary,\n color: firstOption?.color,\n icon: firstOption?.icon,\n ...(editable ? { value: values, options: getEnumOptions(type), isEditable: true } : {}),\n };\n};\n","import { createElement, type ReactNode } from \"react\";\nimport { WorkspaceBadge, type WorkspaceBadgeProps } from \"../workspace-badge\";\nimport type { AttributeBadge } from \"./data-renderer-badge-helpers\";\nimport { renderEnumBadge, renderMultiEnumBadge } from \"./data-renderer-badge-helpers\";\nimport { getEnumOptions, toTitleCase } from \"./data-renderer-enum-helpers\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\n\nexport type { AttributeBadge } from \"./data-renderer-badge-helpers\";\nexport { getAttributeBadgeColorPalette } from \"./data-renderer-badge-helpers\";\nexport { enumOptionLabel, findEnumOption, getEnumOptions, toTitleCase } from \"./data-renderer-enum-helpers\";\n\n/**\n * Read a typed attribute value out of a row. enum-multi normalizes to an array;\n * single-valued kinds normalize to undefined when missing.\n */\nexport const getAttributeValue = (row: DataRendererRow, descriptor: AttributeDescriptor) => {\n const raw = row.attributes[descriptor.id];\n if (descriptor.type.kind === \"enum-multi\") {\n if (Array.isArray(raw)) return raw.filter((entry): entry is string => typeof entry === \"string\");\n return [] as string[];\n }\n return raw;\n};\n\nexport const getAttributeStringValues = (row: DataRendererRow, descriptor: AttributeDescriptor): string[] => {\n const value = getAttributeValue(row, descriptor);\n if (descriptor.type.kind === \"enum-multi\") return value as string[];\n if (value === null || value === undefined) return [];\n if (typeof value === \"string\") return value === \"\" ? [] : [value];\n if (typeof value === \"number\") return [String(value)];\n return [];\n};\n\nconst formatDateValue = (value: unknown) => {\n if (typeof value !== \"string\" || value === \"\") return null;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleDateString();\n};\n\nconst formatNumberValue = (value: unknown) => {\n if (typeof value === \"number\" && Number.isFinite(value)) return String(value);\n if (typeof value === \"string\" && value !== \"\" && !Number.isNaN(Number(value))) return value;\n return null;\n};\n\nconst formatStringValue = (value: unknown) => {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return value === \"\" ? null : value;\n return String(value);\n};\n\nconst formatUserValue = (value: unknown) => formatStringValue(value);\n\nconst isRenderableNode = (value: unknown) => value !== null && value !== undefined && value !== false;\n\ninterface WorkspaceBadgeItem {\n id: string;\n name: string;\n shorthand?: string;\n type: WorkspaceBadgeProps[\"workspaceType\"];\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst textValue = (value: unknown) => (typeof value === \"string\" && value.trim() ? value.trim() : undefined);\n\nconst workspaceTypeFrom = (value: unknown): WorkspaceBadgeProps[\"workspaceType\"] =>\n value === \"current_branch\" ? \"current_branch\" : \"worktree\";\n\nconst normalizeWorkspaceBadgeItems = (value: unknown): WorkspaceBadgeItem[] => {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((item) => {\n if (!isRecord(item)) return [];\n const id = textValue(item.id);\n if (!id) return [];\n const shorthand = textValue(item.shorthand);\n const name = textValue(item.name) ?? shorthand ?? id;\n return [{ id, name, ...(shorthand ? { shorthand } : {}), type: workspaceTypeFrom(item.type) }];\n });\n};\n\nconst renderWorkspaceBadgeDisplay = (\n descriptor: AttributeDescriptor,\n value: unknown,\n row: DataRendererRow,\n): ReactNode => {\n if (descriptor.display?.kind !== \"workspace-badge\") return null;\n const items = normalizeWorkspaceBadgeItems(row.attributes[descriptor.display.itemsAttributeId]);\n if (items.length === 0) return null;\n\n const selectedId = typeof value === \"string\" ? value : undefined;\n const selectedItem = items.find((item) => item.id === selectedId) ?? items[0];\n if (!selectedItem) return null;\n\n return createElement(WorkspaceBadge, {\n workspaceType: selectedItem.type,\n shorthand: selectedItem.shorthand ?? selectedItem.name,\n hasMultipleWorkspaces: items.length > 1,\n showLeadingSessionIndicator: false,\n });\n};\n\n/**\n * Per-type default cell summary used by the card / list end-content. Returns\n * null when the attribute has no displayable value.\n */\nexport const renderAttributeBadge = (descriptor: AttributeDescriptor, row: DataRendererRow): AttributeBadge | null => {\n const type = descriptor.type;\n const value = getAttributeValue(row, descriptor);\n\n if (descriptor.render || descriptor.display) return null;\n\n if (type.kind === \"enum\") return renderEnumBadge(descriptor, type, value);\n if (type.kind === \"enum-multi\") return renderMultiEnumBadge(descriptor, type, value);\n\n if (type.kind === \"date\") {\n const formatted = formatDateValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"number\") {\n const formatted = formatNumberValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n }\n\n if (type.kind === \"user\") {\n const formatted = formatUserValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted, color: \"blue\" } : null;\n }\n\n const formatted = formatStringValue(value);\n return formatted ? { attributeId: descriptor.id, label: formatted } : null;\n};\n\nexport const collectDisplayBadges = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): AttributeBadge[] => {\n const badges: AttributeBadge[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n const badge = renderAttributeBadge(descriptor, row);\n if (badge) badges.push(badge);\n }\n return badges;\n};\n\nexport const collectDisplayCustomSlots = (\n row: DataRendererRow,\n attributes: AttributeDescriptor[],\n displayProperties: string[],\n): ReactNode[] => {\n const slots: ReactNode[] = [];\n for (const id of displayProperties) {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor || descriptor.displayable === false) continue;\n\n const value = getAttributeValue(row, descriptor);\n const slot = descriptor.render\n ? descriptor.render(value, row)\n : renderWorkspaceBadgeDisplay(descriptor, value, row);\n if (isRenderableNode(slot)) slots.push(slot);\n }\n return slots;\n};\n\nconst collectValuesFromRows = (rows: DataRendererRow[], descriptor: AttributeDescriptor) => {\n const values = new Set<string>();\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) values.add(value);\n }\n return values;\n};\n\nexport interface FilterCategoryView {\n id: string;\n label: string;\n options: { value: string; label: string; color?: string }[];\n}\n\n/**\n * Build the filter menu's category list from the declared attributes. Enum\n * descriptors expose their declared options first; auto-derived values from\n * the data fill in the gaps for string / date / number / user attributes (so\n * filter chips for free-form fields don't require declaring every option).\n */\nexport const buildFilterCategories = (\n attributes: AttributeDescriptor[],\n rows: DataRendererRow[],\n): FilterCategoryView[] => {\n const categories: FilterCategoryView[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.filterable) continue;\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const declared = getEnumOptions(descriptor.type);\n const auto = collectValuesFromRows(rows, descriptor);\n const declaredValues = new Set(declared.map((option) => option.value));\n const undeclared = [...auto]\n .filter((value) => !declaredValues.has(value))\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n\n categories.push({\n id: descriptor.id,\n label: descriptor.label,\n options: [\n ...declared.map((option) => ({ value: option.value, label: option.label, color: option.color })),\n ...undeclared,\n ],\n });\n continue;\n }\n\n const auto = [...collectValuesFromRows(rows, descriptor)]\n .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))\n .map((value) => ({ value, label: toTitleCase(value) }));\n categories.push({ id: descriptor.id, label: descriptor.label, options: auto });\n }\n return categories;\n};\n\nexport interface MenuOption {\n value: string;\n label: string;\n}\n\nexport const buildGroupingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: NO_GROUPING, label: \"None\" }];\n for (const descriptor of attributes) {\n if (!descriptor.groupable) continue;\n // enum-multi is intentionally not offered for grouping (one row can hold\n // multiple values; we don't double-render).\n if (descriptor.type.kind === \"enum-multi\") continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildOrderingOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [{ value: MANUAL_ORDERING, label: \"Manual\" }];\n options.push({ value: \"title\", label: \"Title\" });\n for (const descriptor of attributes) {\n if (!descriptor.sortable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const buildDisplayPropertyOptions = (attributes: AttributeDescriptor[]): MenuOption[] => {\n const options: MenuOption[] = [];\n for (const descriptor of attributes) {\n if (!descriptor.displayable) continue;\n options.push({ value: descriptor.id, label: descriptor.label });\n }\n return options;\n};\n\nexport const resolveSubGroupingOptions = (options: MenuOption[], columnGrouping: string) => {\n if (columnGrouping === NO_GROUPING) return options.filter((option) => option.value === NO_GROUPING);\n return options.filter((option) => option.value === NO_GROUPING || option.value !== columnGrouping);\n};\n\nexport const resolveListDropTargetColumnKey = (columnGrouping: string, placement?: { columnKey?: string }) => {\n if (columnGrouping === NO_GROUPING) return \"all\";\n return placement?.columnKey;\n};\n\nexport const resolveKnownColumnKeys = (\n columnGrouping: string,\n attributes: AttributeDescriptor[],\n filters?: DataRendererFilterState,\n) => {\n if (columnGrouping === NO_GROUPING) return undefined;\n const active = filters?.[columnGrouping];\n if (active && active.length > 0) return active;\n const descriptor = findAttribute(attributes, columnGrouping);\n if (!descriptor) return undefined;\n if (descriptor.type.kind === \"enum\") return getEnumOptions(descriptor.type).map((option) => option.value);\n return undefined;\n};\n\nexport const omitFilterCategory = (filters: DataRendererFilterState, id: string): DataRendererFilterState => {\n const next = { ...filters };\n delete next[id];\n return next;\n};\n\n/**\n * Drop persisted settings entries that reference attribute ids no longer\n * declared by the contribution. Falls back to defaults for missing grouping\n * and ordering attributes so a stale saved view still loads cleanly.\n */\nexport const sanitizeSettings = (\n settings: DataRendererSettings,\n attributes: AttributeDescriptor[],\n): DataRendererSettings => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const validGroupingId = (id: string) => id === NO_GROUPING || knownIds.has(id);\n const validOrderingId = (id: string) => id === MANUAL_ORDERING || id === \"title\" || knownIds.has(id);\n\n const columnGrouping = validGroupingId(settings.columnGrouping) ? settings.columnGrouping : NO_GROUPING;\n const rowGrouping = validGroupingId(settings.rowGrouping) ? settings.rowGrouping : NO_GROUPING;\n const orderingId = validOrderingId(settings.ordering.attributeId) ? settings.ordering.attributeId : MANUAL_ORDERING;\n const displayProperties = settings.displayProperties.filter(validGroupingId);\n\n return {\n viewMode: settings.viewMode,\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId, direction: settings.ordering.direction },\n displayProperties,\n };\n};\n\nexport const sanitizeFilters = (filters: DataRendererFilterState, attributes: AttributeDescriptor[]) => {\n const knownIds = new Set(attributes.map((attribute) => attribute.id));\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!knownIds.has(id)) continue;\n if (!values || values.length === 0) continue;\n next[id] = values;\n }\n return next;\n};\n","import { Badge, Icon, Menu, Portal } from \"@chakra-ui/react\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\n\nimport { getIconComponent } from \"@/components/icon-color-picker\";\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport { suppressNextDataRendererCardClick } from \"./card-interaction-guard\";\nimport type { AttributeBadge } from \"./data-renderer-helpers\";\nimport { getAttributeBadgeColorPalette } from \"./data-renderer-helpers\";\n\ninterface DataRendererAttributeBadgeProps {\n badge: AttributeBadge;\n onChange?: (attributeId: string, value: unknown) => void;\n}\n\nconst stopRowActivation = (event: { stopPropagation: () => void }) => event.stopPropagation();\nconst markRowActivationSuppression = () => suppressNextDataRendererCardClick();\nconst suppressRowActivation = (event: { stopPropagation: () => void }) => {\n markRowActivationSuppression();\n event.stopPropagation();\n};\n\nconst getSelectedValues = (badge: AttributeBadge) => {\n if (Array.isArray(badge.value)) return badge.value;\n return badge.value ? [badge.value] : [];\n};\n\nconst toggleMultiValue = (values: string[], optionValue: string) =>\n values.includes(optionValue) ? values.filter((value) => value !== optionValue) : [...values, optionValue];\n\nexport const DataRendererAttributeBadge = (props: DataRendererAttributeBadgeProps) => {\n const { badge, onChange } = props;\n const options = badge.options ?? [];\n const canEdit = Boolean(onChange && badge.isEditable && options.length > 0);\n const isMultiValue = Array.isArray(badge.value);\n const selectedValues = getSelectedValues(badge);\n const attributeLabel = badge.attributeLabel ?? badge.label;\n const rowInteractionProps = {\n onClickCapture: markRowActivationSuppression,\n onPointerDownCapture: markRowActivationSuppression,\n onKeyDown: stopRowActivation,\n };\n\n const handleOptionChange = (optionValue: string) => {\n const nextValue = isMultiValue ? toggleMultiValue(selectedValues, optionValue) : optionValue;\n onChange?.(badge.attributeId, nextValue);\n };\n\n const handleClearSelection = () => onChange?.(badge.attributeId, isMultiValue ? [] : \"\");\n\n const badgeContent = (\n <>\n {badge.icon ? (\n <Icon as={getIconComponent(badge.icon)} boxSize=\"3.5\" color={`${badge.color ?? \"gray\"}.fg`} />\n ) : null}\n {badge.label}\n {canEdit ? <Icon as={ChevronDown} boxSize=\"3\" color=\"fg.muted\" /> : null}\n </>\n );\n\n if (!canEdit) {\n return (\n <Badge variant=\"subtle\" colorPalette={getAttributeBadgeColorPalette(badge)} gap=\"2xs\" textStyle=\"label/XS/medium\">\n {badgeContent}\n </Badge>\n );\n }\n\n return (\n <Menu.Root closeOnSelect={!isMultiValue}>\n <Menu.Trigger asChild>\n <Badge\n as=\"span\"\n role=\"button\"\n tabIndex={0}\n variant=\"subtle\"\n colorPalette={getAttributeBadgeColorPalette(badge)}\n gap=\"2xs\"\n textStyle=\"label/XS/medium\"\n cursor=\"pointer\"\n _hover={{ bg: \"bg.subtle\" }}\n onClickCapture={markRowActivationSuppression}\n onClick={stopRowActivation}\n onPointerDownCapture={markRowActivationSuppression}\n onPointerDown={suppressRowActivation}\n onKeyDown={stopRowActivation}\n >\n {badgeContent}\n </Badge>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content\n minW=\"180px\"\n bg=\"bg\"\n p=\"0\"\n gap=\"0\"\n onClickCapture={markRowActivationSuppression}\n onClick={stopRowActivation}\n onPointerDownCapture={markRowActivationSuppression}\n onPointerDown={suppressRowActivation}\n onKeyDown={stopRowActivation}\n >\n {!isMultiValue ? (\n <>\n <Menu.Item value=\"__clear\" asChild>\n <ListRow\n asChild\n role=\"menuitem\"\n variant=\"compact\"\n id=\"__clear\"\n label={`No ${attributeLabel}`}\n icon={<X size={16} />}\n iconColor=\"gray.500\"\n isSelected={selectedValues.length === 0}\n endContent={selectedValues.length === 0 ? <Check size={14} /> : undefined}\n onActivate={handleClearSelection}\n {...rowInteractionProps}\n />\n </Menu.Item>\n <Menu.Separator margin=\"0\" />\n </>\n ) : null}\n {options.map((option) => {\n const isSelected = selectedValues.includes(option.value);\n return (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n role=\"menuitem\"\n variant=\"compact\"\n id={option.value}\n label={option.label}\n icon={<Icon as={getIconComponent(option.icon)} boxSize=\"16px\" />}\n iconColor={`${option.color ?? \"gray\"}.500`}\n isSelected={isSelected}\n endContent={isSelected ? <Check size={14} /> : undefined}\n onActivate={() => handleOptionChange(option.value)}\n {...rowInteractionProps}\n />\n </Menu.Item>\n );\n })}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { HStack, Stack, Text, Wrap } from \"@chakra-ui/react\";\nimport type { DragEventHandler, MouseEvent, ReactNode } from \"react\";\nimport type { WorkspaceBadgeProps } from \"@/components/workspace-badge\";\nimport { WorkspaceBadge } from \"@/components/workspace-badge\";\nimport { isDataRendererCardClickSuppressed } from \"./card-interaction-guard\";\nimport { DataRendererAttributeBadge } from \"./data-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./data-renderer-helpers\";\n\nexport interface DataRendererCardProps {\n title: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n workspaceBadge?: WorkspaceBadgeProps;\n isSelected?: boolean;\n draggable?: boolean;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n onDragStart?: DragEventHandler<HTMLDivElement>;\n onDragEnd?: DragEventHandler<HTMLDivElement>;\n onClick?: () => void;\n}\n\nexport const DataRendererCard = (props: DataRendererCardProps) => {\n const {\n title,\n badges = [],\n customSlots = [],\n workspaceBadge,\n isSelected = false,\n draggable,\n onBadgeChange,\n onDragStart,\n onDragEnd,\n onClick,\n } = props;\n\n const hasBadges = badges.length > 0 || customSlots.length > 0;\n const cursor = draggable ? \"grab\" : onClick ? \"pointer\" : \"default\";\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n if (isDataRendererCardClickSuppressed()) return;\n if (event.defaultPrevented) return;\n if (!(event.target instanceof Node) || !event.currentTarget.contains(event.target)) return;\n onClick?.();\n };\n\n return (\n <Stack\n gap=\"xs\"\n padding=\"sm\"\n borderRadius=\"sm\"\n borderWidth=\"1px\"\n width=\"100%\"\n background=\"bg\"\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{ borderColor: \"border.blue\", boxShadow: \"mid\" }}\n cursor={cursor}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onClick={onClick ? handleClick : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-testid=\"renderer-card\"\n >\n <HStack align=\"start\" gap=\"2xs\" flexWrap=\"wrap\" minW=\"0\">\n <Text textStyle=\"label/S/regular\" flex=\"1\" minW=\"0\" overflowWrap=\"anywhere\">\n {title}\n </Text>\n {workspaceBadge ? <WorkspaceBadge {...workspaceBadge} /> : null}\n </HStack>\n\n {hasBadges && (\n <Wrap gap=\"2xs\">\n {badges.map((badge) => (\n <DataRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={onBadgeChange} />\n ))}\n {customSlots}\n </Wrap>\n )}\n </Stack>\n );\n};\n","import { Badge, Box, HStack, Icon, IconButton, Menu, Spacer, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronRight, MoreHorizontal, Plus } from \"lucide-react\";\nimport { type ComponentProps, type ComponentType, type DragEvent, useState } from \"react\";\n\nimport { ListRow } from \"@/components/list-row/list-row\";\nimport type { ResourceContextAction } from \"@/components/resource-context-menu\";\nimport { ResourceContextMenu } from \"@/components/resource-context-menu\";\nimport { ScrollArea } from \"@/components/scroll-area\";\nimport { Tooltip } from \"@/components/tooltip\";\n\nimport { DataRendererCard } from \"./data-renderer-card\";\n\ntype DataRendererCardProps = ComponentProps<typeof DataRendererCard>;\n\nexport interface DataRendererBoardItem {\n id: string;\n cardProps: Omit<DataRendererCardProps, \"draggable\" | \"onDragStart\" | \"onDragEnd\" | \"isSelected\">;\n contextMenuActions?: ResourceContextAction[];\n}\n\nexport interface DataRendererBoardColumnAction {\n id: string;\n label: string;\n icon: ComponentType<{ size?: number | string }>;\n}\n\nexport interface DataRendererBoardGroup {\n key: string;\n label: string;\n items: DataRendererBoardItem[];\n}\n\nexport interface DataRendererBoardColumn {\n id: string;\n label: string;\n createLabel?: string;\n color?: string;\n items: DataRendererBoardItem[];\n groups?: DataRendererBoardGroup[];\n canDragIn: boolean;\n canDragOut: boolean;\n canCreate: boolean;\n actions: DataRendererBoardColumnAction[];\n}\n\ninterface DataRendererBoardProps {\n columns: DataRendererBoardColumn[];\n selectedItemId?: string | null;\n onMoveItem?: (itemId: string, targetColumnId: string, context?: { beforeItemId?: string }) => void;\n onMoveToGroup?: (itemId: string, targetGroupKey: string, context?: { beforeItemId?: string }) => void;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\nexport const DataRendererBoard = (props: DataRendererBoardProps) => {\n const { columns, selectedItemId = null, onMoveItem, onMoveToGroup, onCreateStart, onColumnAction } = props;\n\n const [activeColumn, setActiveColumn] = useState<string | null>(null);\n const [activeGroup, setActiveGroup] = useState<string | null>(null);\n\n const handleDragStart = (itemId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.dataTransfer.setData(\"text/plain\", itemId);\n event.dataTransfer.effectAllowed = \"move\";\n };\n\n const handleDragEnd = () => {\n setActiveColumn(null);\n setActiveGroup(null);\n };\n\n const handleDragOver = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(columnId);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveColumn(null);\n };\n\n const handleDrop = (columnId: string) => (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setActiveColumn(null);\n\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n\n onMoveItem?.(itemId, columnId);\n };\n\n return (\n <ScrollArea\n height=\"100%\"\n size=\"xs\"\n showHorizontalScrollbar\n showVerticalScrollbar={false}\n contentProps={{ display: \"flex\", alignItems: \"stretch\", gap: \"0\", pb: \"2xs\", minH: \"100%\" }}\n >\n {columns.map((column) => (\n <Stack\n key={column.id}\n data-testid={`board-column-${column.id}`}\n gap=\"xs\"\n _notFirst={{ borderLeft: \"1px solid\", borderColor: \"border.muted\" }}\n background={activeColumn === column.id ? \"bg.subtle\" : \"bg\"}\n transition=\"background 150ms ease\"\n height=\"100%\"\n minH=\"240px\"\n overflow=\"hidden\"\n minW=\"260px\"\n flex=\"1 0 260px\"\n onDragOver={column.canDragIn ? handleDragOver(column.id) : undefined}\n onDragLeave={column.canDragIn ? handleDragLeave : undefined}\n onDrop={column.canDragIn ? handleDrop(column.id) : undefined}\n >\n <ColumnHeader column={column} onCreateStart={onCreateStart} onColumnAction={onColumnAction} />\n\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n size=\"xs\"\n verticalScrollbarProps={{ margin: \"0\" }}\n contentProps={{\n spaceY: \"sm\",\n ps: \"xs\",\n pe: \"xs\",\n }}\n >\n {column.groups && column.groups.length > 0\n ? column.groups.map((group) => {\n const groupId = `${column.id}::${group.key}`;\n return (\n <GroupSection\n key={group.key}\n columnId={column.id}\n group={group}\n selectedItemId={selectedItemId}\n canDragIn={column.canDragIn}\n canDragOut={column.canDragOut}\n isDropTarget={activeGroup === groupId}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onGroupDragOver={(event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveGroup(groupId);\n setActiveColumn(null);\n }}\n onGroupDragLeave={(event) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n setActiveGroup(null);\n }}\n onGroupDrop={(event, beforeItemId) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveGroup(null);\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId) return;\n onMoveItem?.(itemId, column.id, { beforeItemId });\n onMoveToGroup?.(itemId, group.key, { beforeItemId });\n }}\n />\n );\n })\n : column.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n setActiveColumn(column.id);\n }\n : undefined\n }\n onDrop={\n column.canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n setActiveColumn(null);\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onMoveItem?.(itemId, column.id, { beforeItemId: item.id });\n }\n : undefined\n }\n >\n <DataRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={column.canDragOut}\n onDragStart={column.canDragOut ? handleDragStart(item.id) : undefined}\n onDragEnd={column.canDragOut ? handleDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </ScrollArea>\n </Stack>\n ))}\n </ScrollArea>\n );\n};\n\ninterface ColumnHeaderProps {\n column: DataRendererBoardColumn;\n onCreateStart?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n}\n\ninterface GroupSectionProps {\n columnId: string;\n group: DataRendererBoardGroup;\n selectedItemId: string | null;\n canDragIn: boolean;\n canDragOut: boolean;\n isDropTarget: boolean;\n onDragStart: (itemId: string) => (event: DragEvent<HTMLDivElement>) => void;\n onDragEnd: () => void;\n onGroupDragOver: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDragLeave: (event: DragEvent<HTMLDivElement>) => void;\n onGroupDrop: (event: DragEvent<HTMLDivElement>, beforeItemId?: string) => void;\n}\n\nconst GroupSection = (props: GroupSectionProps) => {\n const {\n columnId,\n group,\n selectedItemId,\n canDragIn,\n canDragOut,\n isDropTarget,\n onDragStart,\n onDragEnd,\n onGroupDragOver,\n onGroupDragLeave,\n onGroupDrop,\n } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <Stack\n data-column-id={columnId}\n data-group-key={group.key}\n gap=\"0\"\n borderRadius=\"sm\"\n background={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n transition=\"background 150ms ease\"\n onDragOver={canDragIn ? onGroupDragOver : undefined}\n onDragLeave={canDragIn ? onGroupDragLeave : undefined}\n onDrop={canDragIn ? onGroupDrop : undefined}\n >\n <HStack\n px=\"xs\"\n py=\"2xs\"\n gap=\"2xs\"\n cursor=\"pointer\"\n _hover={{ bg: \"bg.hover\" }}\n borderRadius=\"sm\"\n onClick={() => setExpanded((v) => !v)}\n >\n <Box display=\"flex\" alignItems=\"center\" flexShrink={0}>\n <Icon\n as={ChevronRight}\n boxSize=\"14px\"\n color=\"fg.muted\"\n transform={expanded ? \"rotate(90deg)\" : \"rotate(0deg)\"}\n transition=\"transform 0.15s ease\"\n />\n </Box>\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\">\n {group.label}\n </Text>\n <Badge variant=\"subtle\" colorPalette=\"gray\" size=\"sm\">\n {group.items.length}\n </Badge>\n </HStack>\n {expanded && (\n <Stack gap=\"sm\" pt=\"xs\">\n {group.items.map((item) => (\n <ResourceContextMenu key={item.id} actions={item.contextMenuActions ?? []}>\n <Box\n onDragOver={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n }\n : undefined\n }\n onDrop={\n canDragIn\n ? (event) => {\n event.preventDefault();\n event.stopPropagation();\n const itemId = event.dataTransfer.getData(\"text/plain\");\n if (!itemId || itemId === item.id) return;\n onGroupDrop(event, item.id);\n }\n : undefined\n }\n >\n <DataRendererCard\n {...item.cardProps}\n isSelected={item.id === selectedItemId}\n draggable={canDragOut}\n onDragStart={canDragOut ? onDragStart(item.id) : undefined}\n onDragEnd={canDragOut ? onDragEnd : undefined}\n />\n </Box>\n </ResourceContextMenu>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n\nconst ColumnHeader = (props: ColumnHeaderProps) => {\n const { column, onCreateStart, onColumnAction } = props;\n\n return (\n <HStack padding=\"xs\" gap=\"xs\" alignItems=\"center\">\n <Text textStyle=\"label/L/medium\">{column.label}</Text>\n\n <Badge variant=\"subtle\" colorPalette={column.color ?? \"gray\"}>\n {column.items.length}\n </Badge>\n\n <Spacer />\n\n {column.canCreate && onCreateStart && (\n <Tooltip content={column.createLabel ?? \"Create new row\"}>\n <IconButton\n size=\"2xs\"\n variant=\"outline\"\n onClick={() => onCreateStart(column.id)}\n aria-label={column.createLabel ?? \"Create row\"}\n >\n <Icon as={Plus} boxSize=\"12px\" />\n </IconButton>\n </Tooltip>\n )}\n\n {column.actions.length > 0 && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton size=\"2xs\" variant=\"ghost\" aria-label={`Column actions for ${column.label}`}>\n <Icon as={MoreHorizontal} boxSize=\"12px\" />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"180px\" bg=\"bg\">\n {column.actions.map((action) => (\n <Menu.Item key={action.id} value={action.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n label={action.label}\n icon={<Icon as={action.icon} boxSize=\"16px\" />}\n onActivate={() => onColumnAction?.(column.id, action.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n )}\n </HStack>\n );\n};\n","import { Badge, Box, HStack, Icon, Text, Wrap } from \"@chakra-ui/react\";\nimport { type ComponentType, type DragEvent, type ReactNode, useState } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { ListRowItem } from \"../list-row/list-row.types\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport { DataRendererAttributeBadge } from \"./data-renderer-attribute-badge\";\nimport type { AttributeBadge } from \"./data-renderer-helpers\";\n\nexport interface DataRendererListItem {\n id: string;\n title: string;\n countBadge?: number;\n countColorPalette?: string;\n statusIcon?: ComponentType<{ size?: number | string }>;\n statusColor?: string;\n badges?: AttributeBadge[];\n customSlots?: ReactNode[];\n children?: DataRendererListItem[];\n onClick?: () => void;\n onBadgeChange?: (attributeId: string, value: unknown) => void;\n contextMenuActions?: ResourceContextAction[];\n draggable?: boolean;\n onDropRow?: (rowId: string) => void;\n}\n\nexport type DataRendererListExpandedState = Record<string, boolean>;\n\nexport interface DataRendererListProps {\n items: DataRendererListItem[];\n selectedItemId?: string | null;\n expandedGroups?: DataRendererListExpandedState;\n onItemClick?: (item: DataRendererListItem) => void;\n onExpandedGroupChange?: (rowId: string, isExpanded: boolean) => void;\n}\n\nconst INDENT_STEP_PX = 12;\n\ninterface FlattenedDataRendererListItem {\n id: string;\n item: DataRendererListItem;\n depth: number;\n canExpand: boolean;\n}\n\nexport const getDataRendererListIndentation = (depth: number) => {\n if (depth <= 0) return undefined;\n return `${depth * INDENT_STEP_PX}px`;\n};\n\nexport const flattenDataRendererListItems = (\n items: DataRendererListItem[],\n expanded: DataRendererListExpandedState,\n depth = 0,\n) => {\n const rows: FlattenedDataRendererListItem[] = [];\n\n for (const item of items) {\n const canExpand = (item.children?.length ?? 0) > 0;\n rows.push({ id: item.id, item, depth, canExpand });\n\n if (canExpand && getRowIsExpanded(expanded, item.id)) {\n rows.push(...flattenDataRendererListItems(item.children ?? [], expanded, depth + 1));\n }\n }\n\n return rows;\n};\n\nconst getDropTargetBoxShadow = (isDropTarget: boolean, isGroup: boolean) => {\n if (!isDropTarget) return undefined;\n if (isGroup) return \"inset 3px 0 0 var(--chakra-colors-border-accent)\";\n return \"inset 0 2px 0 var(--chakra-colors-border-accent)\";\n};\n\nconst getRowIsExpanded = (expandedState: DataRendererListExpandedState, rowId: string) => {\n return expandedState[rowId] !== false;\n};\n\nconst updateExpandedState = (expandedState: DataRendererListExpandedState, rowId: string, isExpanded: boolean) => {\n return { ...expandedState, [rowId]: isExpanded };\n};\n\nconst renderLabel = (item: DataRendererListItem) => (\n <HStack gap=\"xs\" minW=\"0\" maxW=\"full\" flex=\"1\">\n <Text textStyle=\"label/S/regular\" minW=\"0\" truncate>\n {item.title}\n </Text>\n {typeof item.countBadge === \"number\" ? (\n <Badge variant=\"subtle\" size=\"sm\" colorPalette={item.countColorPalette ?? \"gray\"} flexShrink={0}>\n {item.countBadge}\n </Badge>\n ) : null}\n </HStack>\n);\n\nconst renderEndContent = (item: DataRendererListItem) => {\n const hasBadges = (item.badges?.length ?? 0) > 0 || (item.customSlots?.length ?? 0) > 0;\n\n if (!hasBadges) return null;\n\n return (\n <HStack gap=\"xs\" flexShrink={0}>\n <Wrap gap=\"2xs\" flexShrink={0}>\n {item.badges?.map((badge) => (\n <DataRendererAttributeBadge key={badge.attributeId} badge={badge} onChange={item.onBadgeChange} />\n ))}\n {item.customSlots}\n </Wrap>\n </HStack>\n );\n};\n\nconst buildListRowItem = (item: DataRendererListItem, hasChildren: boolean): ListRowItem => ({\n id: item.id,\n label: renderLabel(item),\n icon: item.statusIcon ? <Icon as={item.statusIcon} boxSize=\"16px\" /> : undefined,\n iconColor: item.statusColor ?? \"fg.muted\",\n endContent: renderEndContent(item),\n isContainer: hasChildren,\n contextMenuItems: item.contextMenuActions?.map((action) => ({\n id: action.key,\n label: action.label,\n icon: action.icon ?? undefined,\n disabled: action.isDisabled,\n separatorBefore: action.separatorBefore,\n endContent: action.endContent,\n onAction: action.onClick,\n })),\n});\n\nexport const DataRendererList = (props: DataRendererListProps) => {\n const { items, selectedItemId = null, expandedGroups, onItemClick, onExpandedGroupChange } = props;\n const [localExpandedGroups, setLocalExpandedGroups] = useState<DataRendererListExpandedState>({});\n const [activeDropTargetId, setActiveDropTargetId] = useState<string | null>(null);\n const [draggedItemId, setDraggedItemId] = useState<string | null>(null);\n const expanded = expandedGroups ?? localExpandedGroups;\n const rows = flattenDataRendererListItems(items, expanded);\n\n const handleExpandedChange = (rowId: string, isExpanded: boolean) => {\n onExpandedGroupChange?.(rowId, isExpanded);\n if (expandedGroups === undefined) {\n setLocalExpandedGroups((current) => updateExpandedState(current, rowId, isExpanded));\n }\n };\n\n return (\n <Box>\n {rows.map((row) => (\n <DataRendererListRow\n key={row.id}\n row={row}\n isExpanded={getRowIsExpanded(expanded, row.id)}\n selectedItemId={selectedItemId}\n activeDropTargetId={activeDropTargetId}\n draggedItemId={draggedItemId}\n onDraggedItemChange={setDraggedItemId}\n onDropTargetChange={setActiveDropTargetId}\n onItemClick={onItemClick}\n onExpandedChange={handleExpandedChange}\n />\n ))}\n </Box>\n );\n};\n\ninterface DataRendererListRowProps {\n row: FlattenedDataRendererListItem;\n isExpanded: boolean;\n selectedItemId: string | null;\n activeDropTargetId: string | null;\n draggedItemId: string | null;\n onDraggedItemChange: (itemId: string | null) => void;\n onDropTargetChange: (itemId: string | null) => void;\n onExpandedChange: (rowId: string, isExpanded: boolean) => void;\n onItemClick?: (item: DataRendererListItem) => void;\n}\n\nconst DataRendererListRow = (props: DataRendererListRowProps) => {\n const {\n row,\n isExpanded,\n selectedItemId,\n activeDropTargetId,\n draggedItemId,\n onDraggedItemChange,\n onDropTargetChange,\n onItemClick,\n onExpandedChange,\n } = props;\n const { item, canExpand } = row;\n const isSelected = item.id === selectedItemId;\n const canDropHere = Boolean(item.onDropRow) && item.id !== draggedItemId;\n const isDropTarget = canDropHere && item.id === activeDropTargetId;\n const rowItem = buildListRowItem(item, canExpand);\n const toggleExpanded = () => onExpandedChange(row.id, !isExpanded);\n\n const handleActivate = () => {\n if (canExpand) {\n toggleExpanded();\n return;\n }\n item.onClick?.();\n onItemClick?.(item);\n };\n\n const handleDragStart = (event: DragEvent<HTMLDivElement>) => {\n if (!item.draggable) return;\n event.stopPropagation();\n event.dataTransfer.setData(\"text/plain\", item.id);\n event.dataTransfer.effectAllowed = \"move\";\n onDraggedItemChange(item.id);\n onDropTargetChange(null);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere) return;\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = \"move\";\n onDropTargetChange(item.id);\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {\n if (event.currentTarget.contains(event.relatedTarget as Node)) return;\n onDropTargetChange(null);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n if (!canDropHere || !item.onDropRow) return;\n event.preventDefault();\n event.stopPropagation();\n onDropTargetChange(null);\n onDraggedItemChange(null);\n const draggedId = event.dataTransfer.getData(\"text/plain\");\n if (!draggedId || draggedId === item.id) return;\n item.onDropRow(draggedId);\n };\n\n const handleDragEnd = () => {\n onDropTargetChange(null);\n onDraggedItemChange(null);\n };\n\n return (\n <Box\n data-drop-target={isDropTarget ? \"true\" : undefined}\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n bg={isDropTarget ? \"bg.subtle\" : \"transparent\"}\n boxShadow={getDropTargetBoxShadow(isDropTarget, canExpand)}\n draggable={item.draggable}\n transition=\"background 120ms ease, box-shadow 120ms ease\"\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragLeave={item.onDropRow ? handleDragLeave : undefined}\n onDragEnd={handleDragEnd}\n onDrop={handleDrop}\n >\n <ListRow\n {...rowItem}\n variant=\"tree\"\n depth={row.depth}\n isSelected={isSelected}\n isExpanded={isExpanded}\n showExpandToggle={canExpand}\n onActivate={handleActivate}\n onToggleExpand={toggleExpanded}\n />\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { EmptyState } from \"@/components/empty-state\";\nimport { DataRendererBoard, type DataRendererBoardColumn } from \"./data-renderer-board\";\nimport { DataRendererList, type DataRendererListItem } from \"./data-renderer-list\";\nimport type { DataRendererSettings } from \"./types\";\n\ninterface DataRendererEmptyStateProps {\n emptyState?: ReactNode;\n title: string;\n description?: string;\n height?: string;\n}\n\ninterface DataRendererContentProps {\n viewMode: DataRendererSettings[\"viewMode\"];\n boardColumns: DataRendererBoardColumn[];\n listItems: DataRendererListItem[];\n listExpandedGroups: Record<string, boolean>;\n selectedRowId: string | null;\n emptyState?: ReactNode;\n emptyTitle: string;\n emptyDescription?: string;\n onBoardMoveItem: (rowId: string, targetColumnId: string) => void;\n onBoardMoveToGroup: (rowId: string, targetGroupKey: string) => void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n onListExpandedGroupChange: (rowId: string, isExpanded: boolean) => void;\n listKey: string;\n}\n\nconst DataRendererEmptyState = (props: DataRendererEmptyStateProps) => {\n const { emptyState, title, description, height } = props;\n\n if (emptyState !== undefined) {\n return height ? <Box height={height}>{emptyState}</Box> : emptyState;\n }\n\n return <EmptyState title={title} description={description} height={height} />;\n};\n\nexport const DataRendererContent = (props: DataRendererContentProps) => {\n const {\n viewMode,\n boardColumns,\n listItems,\n listExpandedGroups,\n selectedRowId,\n emptyState,\n emptyTitle,\n emptyDescription,\n onBoardMoveItem,\n onBoardMoveToGroup,\n onCreateRow,\n onColumnAction,\n onListExpandedGroupChange,\n listKey,\n } = props;\n\n if (viewMode === \"board\") {\n return (\n <Box flex=\"1\" minH=\"0\">\n {boardColumns.length > 0 ? (\n <DataRendererBoard\n columns={boardColumns}\n selectedItemId={selectedRowId}\n onMoveItem={onBoardMoveItem}\n onMoveToGroup={onBoardMoveToGroup}\n onCreateStart={onCreateRow}\n onColumnAction={onColumnAction}\n />\n ) : (\n <DataRendererEmptyState\n emptyState={emptyState}\n title={emptyTitle}\n description={emptyDescription}\n height=\"100%\"\n />\n )}\n </Box>\n );\n }\n\n if (listItems.length > 0) {\n return (\n <DataRendererList\n key={listKey}\n items={listItems}\n selectedItemId={selectedRowId}\n expandedGroups={listExpandedGroups}\n onExpandedGroupChange={onListExpandedGroupChange}\n />\n );\n }\n\n return <DataRendererEmptyState emptyState={emptyState} title={emptyTitle} description={emptyDescription} />;\n};\n","import {\n enumOptionLabel,\n getAttributeStringValues,\n getAttributeValue,\n getEnumOptions,\n toTitleCase,\n} from \"./data-renderer-helpers\";\nimport {\n type AttributeDescriptor,\n type AttributeType,\n type DataRendererFilterState,\n type DataRendererOrdering,\n type DataRendererRow,\n findAttribute,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface GroupingOptions {\n attributes: AttributeDescriptor[];\n columnGrouping: string;\n rowGrouping: string;\n knownColumnKeys?: string[];\n}\n\ninterface DataRendererRowGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n}\n\ninterface DataRendererColumnGroup {\n key: string;\n label: string;\n rows: DataRendererRow[];\n subgroups: DataRendererRowGroup[];\n}\n\nconst UNASSIGNED_LABEL = \"Unassigned\";\n\nconst fallbackLabel = (descriptor: AttributeDescriptor) => `No ${descriptor.label.toLowerCase()}`;\n\nconst labelForGroupKey = (key: string, descriptor: AttributeDescriptor | undefined) => {\n if (!descriptor) return key === NO_GROUPING ? \"All\" : key;\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")\n return enumOptionLabel(descriptor.type, key);\n return key;\n};\n\nconst getGroupingKey = (row: DataRendererRow, descriptor: AttributeDescriptor | undefined, columnId: string) => {\n if (columnId === NO_GROUPING) return \"all\";\n if (!descriptor) return \"all\";\n // Grouping by an enum-multi is intentionally rejected at the renderer level\n // (the contribution lists it as non-groupable). Defensive fallback: treat\n // each row as a single bucket using its first value, else fallback.\n if (descriptor.type.kind === \"enum-multi\") {\n const [first] = getAttributeStringValues(row, descriptor);\n return first ?? fallbackLabel(descriptor);\n }\n const [value] = getAttributeStringValues(row, descriptor);\n return value ?? fallbackLabel(descriptor);\n};\n\nconst compareGroupKey = (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true });\n\nconst compareGroupKeyForDescriptor = (a: string, b: string, descriptor: AttributeDescriptor | undefined) => {\n if (descriptor && (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\")) {\n const ordered = compareEnumValues(a, b, descriptor.type);\n if (ordered !== 0) return ordered;\n }\n return compareGroupKey(a, b);\n};\n\nconst orderByDirection = (value: number, direction: DataRendererOrdering[\"direction\"]) =>\n direction === \"asc\" ? value : value * -1;\n\nconst compareEnumValues = (left: string | undefined, right: string | undefined, type: AttributeType) => {\n if (type.kind !== \"enum\" && type.kind !== \"enum-multi\") return 0;\n const options = getEnumOptions(type);\n const toIndex = (value: string | undefined) => {\n if (value === undefined) return options.length;\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? options.length + 1 : index;\n };\n return toIndex(left) - toIndex(right);\n};\n\nconst compareForDescriptor = (a: DataRendererRow, b: DataRendererRow, descriptor: AttributeDescriptor) => {\n if (descriptor.compare) return descriptor.compare(getAttributeValue(a, descriptor), getAttributeValue(b, descriptor));\n\n const left = getAttributeValue(a, descriptor);\n const right = getAttributeValue(b, descriptor);\n\n if (descriptor.type.kind === \"date\") {\n const leftTime = typeof left === \"string\" ? new Date(left).getTime() : 0;\n const rightTime = typeof right === \"string\" ? new Date(right).getTime() : 0;\n return leftTime - rightTime;\n }\n\n if (descriptor.type.kind === \"number\") {\n const leftNum = typeof left === \"number\" ? left : Number(left ?? 0);\n const rightNum = typeof right === \"number\" ? right : Number(right ?? 0);\n return leftNum - rightNum;\n }\n\n if (descriptor.type.kind === \"enum\" || descriptor.type.kind === \"enum-multi\") {\n const [leftValue] = getAttributeStringValues(a, descriptor);\n const [rightValue] = getAttributeStringValues(b, descriptor);\n return compareEnumValues(leftValue, rightValue, descriptor.type);\n }\n\n const leftString = typeof left === \"string\" ? left : String(left ?? \"\");\n const rightString = typeof right === \"string\" ? right : String(right ?? \"\");\n return leftString.localeCompare(rightString, undefined, { numeric: true });\n};\n\nexport const orderRows = (\n rows: DataRendererRow[],\n ordering: DataRendererOrdering,\n attributes: AttributeDescriptor[],\n) => {\n if (ordering.attributeId === MANUAL_ORDERING) return rows;\n\n if (ordering.attributeId === \"title\") {\n return [...rows].sort((a, b) => orderByDirection(a.title.localeCompare(b.title), ordering.direction));\n }\n\n const descriptor = findAttribute(attributes, ordering.attributeId);\n if (!descriptor) return rows;\n\n return [...rows].sort((a, b) => orderByDirection(compareForDescriptor(a, b, descriptor), ordering.direction));\n};\n\nexport const groupRows = (rows: DataRendererRow[], options: GroupingOptions): DataRendererColumnGroup[] => {\n const { attributes, columnGrouping, rowGrouping, knownColumnKeys } = options;\n const columnDescriptor = findAttribute(attributes, columnGrouping);\n const rowDescriptor = findAttribute(attributes, rowGrouping);\n const groupedByColumn = new Map<string, DataRendererRow[]>();\n\n if (knownColumnKeys) {\n for (const key of knownColumnKeys) groupedByColumn.set(key, []);\n }\n\n for (const row of rows) {\n const key = getGroupingKey(row, columnDescriptor, columnGrouping);\n groupedByColumn.set(key, [...(groupedByColumn.get(key) ?? []), row]);\n }\n\n const columnEntries = [...groupedByColumn.entries()].sort(([left], [right]) =>\n compareGroupKeyForDescriptor(left, right, columnDescriptor),\n );\n\n return columnEntries.map(([columnKey, columnRows]) => {\n const label = labelForGroupKey(columnKey, columnDescriptor);\n\n if (rowGrouping === NO_GROUPING) {\n return { key: columnKey, label, rows: columnRows, subgroups: [] };\n }\n\n const groupedByRow = new Map<string, DataRendererRow[]>();\n for (const row of columnRows) {\n const rowKey = getGroupingKey(row, rowDescriptor, rowGrouping);\n groupedByRow.set(rowKey, [...(groupedByRow.get(rowKey) ?? []), row]);\n }\n\n const subgroups = [...groupedByRow.entries()]\n .sort(([left], [right]) => compareGroupKeyForDescriptor(left, right, rowDescriptor))\n .map(([rowKey, rowRows]) => ({\n key: rowKey,\n label: labelForGroupKey(rowKey, rowDescriptor) || toTitleCase(rowKey || UNASSIGNED_LABEL),\n rows: rowRows,\n }));\n\n return { key: columnKey, label, rows: columnRows, subgroups };\n });\n};\n\nconst matchesFilter = (row: DataRendererRow, descriptor: AttributeDescriptor, values: string[]) => {\n const rowValues = getAttributeStringValues(row, descriptor);\n return rowValues.some((value) => values.includes(value));\n};\n\nexport const filterRows = (\n rows: DataRendererRow[],\n filters: DataRendererFilterState,\n attributes: AttributeDescriptor[],\n) => {\n const activeFilters = Object.entries(filters).filter(\n (entry): entry is [string, string[]] => Array.isArray(entry[1]) && entry[1].length > 0,\n );\n if (activeFilters.length === 0) return rows;\n\n return rows.filter((row) =>\n activeFilters.every(([id, values]) => {\n const descriptor = findAttribute(attributes, id);\n if (!descriptor) return true;\n return matchesFilter(row, descriptor, values);\n }),\n );\n};\n\nexport const countFilterValues = (rows: DataRendererRow[], attributeId: string, attributes: AttributeDescriptor[]) => {\n const counts: Record<string, number> = {};\n const descriptor = findAttribute(attributes, attributeId);\n if (!descriptor) return counts;\n for (const row of rows) {\n for (const value of getAttributeStringValues(row, descriptor)) {\n counts[value] = (counts[value] ?? 0) + 1;\n }\n }\n return counts;\n};\n\nexport type { DataRendererColumnGroup, DataRendererRowGroup };\n","import { Button, HStack, Icon, IconButton, Menu, Popover, Portal, Separator, Stack, Text } from \"@chakra-ui/react\";\nimport { ArrowDownUp, ChevronDown, KanbanSquare, List, Settings2 } from \"lucide-react\";\nimport { Fragment, useEffect, useRef, useState } from \"react\";\nimport { type MenuOption, resolveSubGroupingOptions } from \"./data-renderer-helpers\";\nimport type { DataRendererSettings } from \"./types\";\n\ninterface DisplayMenuProps {\n settings: DataRendererSettings;\n groupingOptions: MenuOption[];\n orderingOptions: MenuOption[];\n displayPropertyOptions: MenuOption[];\n onViewModeChange: (value: DataRendererSettings[\"viewMode\"]) => void;\n onColumnGroupingChange: (value: string) => void;\n onRowGroupingChange: (value: string) => void;\n onOrderingAttributeIdChange: (value: string) => void;\n onSortDirectionToggle: () => void;\n onDisplayPropertyToggle: (property: string) => void;\n}\n\nconst SectionLabel = (props: { children: string }) => (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n {props.children}\n </Text>\n);\n\nconst viewModeOptions = [\n { value: \"list\", label: \"List\", icon: List },\n { value: \"board\", label: \"Board\", icon: KanbanSquare },\n] as const;\n\nconst Dropdown = (props: {\n label: string;\n value: string;\n options: MenuOption[];\n onSelect: (value: string) => void;\n}) => {\n const selectedLabel = props.options.find((option) => option.value === props.value)?.label ?? props.label;\n const hasNoneFirst = props.options[0]?.value === \"none\";\n\n return (\n <Stack gap=\"2xs\">\n <SectionLabel>{props.label}</SectionLabel>\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"sm\" variant=\"outline\" width=\"full\" justifyContent=\"space-between\">\n {selectedLabel}\n <Icon as={ChevronDown} color=\"fg.muted\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"260px\" bg=\"bg\">\n {props.options.map((option, index) => (\n <Fragment key={option.value}>\n {hasNoneFirst && index === 1 ? <Menu.Separator /> : null}\n <Menu.Item value={option.value} onClick={() => props.onSelect(option.value)}>\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Stack>\n );\n};\n\nexport const DisplayMenu = (props: DisplayMenuProps) => {\n const {\n settings,\n groupingOptions,\n orderingOptions,\n displayPropertyOptions,\n onViewModeChange,\n onColumnGroupingChange,\n onRowGroupingChange,\n onOrderingAttributeIdChange,\n onSortDirectionToggle,\n onDisplayPropertyToggle,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}\n onOpenChange={(event) => setOpen(event.open)}\n >\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Display settings\" variant=\"ghost\" size=\"sm\">\n <Icon as={Settings2} boxSize=\"14px\" />\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"320px\" p=\"sm\" bg=\"bg\">\n <Stack gap=\"sm\">\n <SectionLabel>View</SectionLabel>\n <HStack gap=\"2xs\">\n {viewModeOptions.map((option) => {\n const ViewModeIcon = option.icon;\n const active = settings.viewMode === option.value;\n\n return (\n <Button\n key={option.value}\n flex=\"1\"\n size=\"sm\"\n variant={active ? \"solid\" : \"outline\"}\n aria-pressed={active}\n onClick={() => onViewModeChange(option.value)}\n >\n <ViewModeIcon size={14} />\n {option.label}\n </Button>\n );\n })}\n </HStack>\n\n <Separator />\n\n <Dropdown\n label=\"Grouping\"\n value={settings.columnGrouping}\n options={groupingOptions}\n onSelect={(value) => {\n onColumnGroupingChange(value);\n if (value === \"none\" || value === settings.rowGrouping) onRowGroupingChange(\"none\");\n }}\n />\n\n <Dropdown\n label=\"Sub-grouping\"\n value={settings.rowGrouping}\n options={resolveSubGroupingOptions(groupingOptions, settings.columnGrouping)}\n onSelect={onRowGroupingChange}\n />\n\n <Stack gap=\"2xs\">\n <SectionLabel>Ordering</SectionLabel>\n <HStack gap=\"2xs\">\n <Dropdown\n label=\"Sort by\"\n value={settings.ordering.attributeId}\n options={orderingOptions}\n onSelect={onOrderingAttributeIdChange}\n />\n <IconButton\n mt=\"lg\"\n aria-label=\"Toggle sort direction\"\n size=\"sm\"\n variant=\"outline\"\n onClick={onSortDirectionToggle}\n data-direction={settings.ordering.direction}\n >\n <Icon\n as={ArrowDownUp}\n transform={settings.ordering.direction === \"asc\" ? \"rotate(0deg)\" : \"rotate(180deg)\"}\n />\n </IconButton>\n </HStack>\n </Stack>\n\n <Separator />\n <Stack gap=\"2xs\">\n <SectionLabel>Display properties</SectionLabel>\n <HStack flexWrap=\"wrap\" gap=\"2xs\">\n {displayPropertyOptions.map((option) => {\n const isActive = settings.displayProperties.includes(option.value);\n\n return (\n <Button\n key={option.value}\n size=\"2xs\"\n variant={isActive ? \"solid\" : \"outline\"}\n onClick={() => onDisplayPropertyToggle(option.value)}\n >\n {option.label}\n </Button>\n );\n })}\n </HStack>\n </Stack>\n </Stack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, IconButton, Popover, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { Check, Filter } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport type { FilterCategoryView } from \"./data-renderer-helpers\";\nimport type { DataRendererFilterState } from \"./types\";\n\ninterface FilterMenuProps {\n categories: FilterCategoryView[];\n filters: DataRendererFilterState;\n countsByCategory: Record<string, Record<string, number>>;\n onToggleFilterValue: (attributeId: string, value: string) => void;\n onClearFilter: (attributeId: string) => void;\n onClearAll: () => void;\n}\n\nconst getActiveFilterCount = (filters: DataRendererFilterState) =>\n Object.values(filters).reduce((sum, values) => sum + (values?.length ?? 0), 0);\n\nexport const FilterMenu = (props: FilterMenuProps) => {\n const { categories, filters, countsByCategory, onToggleFilterValue, onClearFilter, onClearAll } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [activeCategoryId, setActiveCategoryId] = useState<string>(categories[0]?.id ?? \"\");\n\n const activeCategory = categories.find((category) => category.id === activeCategoryId) ?? categories[0];\n\n const activeFilterCount = getActiveFilterCount(filters);\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target)) return;\n if (triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n return () => document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{ placement: \"bottom-end\", offset: { mainAxis: 8 } }}\n onOpenChange={(event) => setOpen(event.open)}\n >\n <Popover.Trigger asChild>\n <IconButton ref={triggerRef} aria-label=\"Filter rows\" variant=\"ghost\" size=\"sm\">\n <HStack gap=\"2xs\">\n <Icon as={Filter} boxSize=\"14px\" />\n {activeFilterCount > 0 ? <Badge variant=\"solid\">{activeFilterCount}</Badge> : null}\n </HStack>\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"420px\" p=\"0\" bg=\"bg\" overflow=\"hidden\">\n <HStack align=\"stretch\" gap=\"0\" minH=\"320px\">\n <Stack minWidth=\"180px\" borderRightWidth=\"1px\" borderColor=\"border.muted\" p=\"sm\" gap=\"2xs\">\n <HStack justifyContent=\"space-between\">\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\">\n Filters\n </Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={onClearAll}>\n Clear all\n </Button>\n </HStack>\n {categories.map((category) => {\n const selectedValues = filters[category.id] ?? [];\n return (\n <Button\n key={category.id}\n variant={activeCategoryId === category.id ? \"subtle\" : \"ghost\"}\n size=\"sm\"\n justifyContent=\"space-between\"\n onClick={() => setActiveCategoryId(category.id)}\n >\n <Text>{category.label}</Text>\n {selectedValues.length > 0 ? <Badge variant=\"subtle\">{selectedValues.length}</Badge> : null}\n </Button>\n );\n })}\n </Stack>\n\n <Stack flex=\"1\" p=\"sm\" gap=\"sm\">\n {activeCategory ? (\n <>\n <HStack justifyContent=\"space-between\">\n <Text textStyle=\"label/S/medium\">{activeCategory.label}</Text>\n <Button size=\"2xs\" variant=\"ghost\" onClick={() => onClearFilter(activeCategory.id)}>\n Clear\n </Button>\n </HStack>\n <Stack gap=\"2xs\">\n {activeCategory.options.map((option) => {\n const checked = (filters[activeCategory.id] ?? []).includes(option.value);\n const count = countsByCategory[activeCategory.id]?.[option.value] ?? 0;\n\n return (\n <Button\n key={option.value}\n role=\"checkbox\"\n aria-checked={checked}\n variant=\"ghost\"\n size=\"sm\"\n width=\"full\"\n px=\"xs\"\n py=\"2xs\"\n height=\"auto\"\n borderRadius=\"sm\"\n justifyContent=\"flex-start\"\n onClick={() => onToggleFilterValue(activeCategory.id, option.value)}\n >\n <Box\n boxSize=\"4\"\n borderWidth=\"1px\"\n borderRadius=\"xs\"\n borderColor={checked ? \"fg\" : \"border\"}\n bg={checked ? \"fg\" : \"transparent\"}\n color={checked ? \"bg\" : \"transparent\"}\n display=\"inline-flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n >\n {checked ? <Icon as={Check} boxSize=\"3\" /> : null}\n </Box>\n <HStack gap=\"2xs\" justifyContent=\"space-between\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/S/regular\">{option.label}</Text>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {count}\n </Text>\n </HStack>\n </Button>\n );\n })}\n </Stack>\n </>\n ) : null}\n </Stack>\n </HStack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport { omitFilterCategory } from \"./data-renderer-helpers\";\nimport {\n type DataRendererFilterState,\n type DataRendererSettings,\n DEFAULT_DATA_RENDERER_SETTINGS,\n MANUAL_ORDERING,\n NO_GROUPING,\n} from \"./types\";\n\ninterface DataRendererSnapshot {\n settings: DataRendererSettings;\n filters: DataRendererFilterState;\n expandedGroups: Record<string, boolean>;\n}\n\ninterface DataRendererStoreInitialState {\n settings?: Partial<DataRendererSettings>;\n filters?: DataRendererFilterState;\n expandedGroups?: Record<string, boolean>;\n}\n\ninterface DataRendererState extends DataRendererSnapshot {\n setViewMode: (viewMode: DataRendererSettings[\"viewMode\"]) => void;\n setColumnGrouping: (columnGrouping: DataRendererSettings[\"columnGrouping\"]) => void;\n setRowGrouping: (rowGrouping: DataRendererSettings[\"rowGrouping\"]) => void;\n setOrdering: (ordering: DataRendererSettings[\"ordering\"]) => void;\n setOrderingAttributeId: (attributeId: DataRendererSettings[\"ordering\"][\"attributeId\"]) => void;\n setDisplayProperties: (displayProperties: string[]) => void;\n toggleSortDirection: () => void;\n toggleDisplayProperty: (property: string) => void;\n setFilter: (attributeId: string, values: string[]) => void;\n toggleFilterValue: (attributeId: string, value: string) => void;\n clearFilter: (attributeId: string) => void;\n clearAllFilters: () => void;\n setExpandedGroup: (groupId: string, isExpanded: boolean) => void;\n reset: () => void;\n}\n\ninterface CreateDataRendererStoreOptions {\n storageKey: string;\n initialState?: DataRendererStoreInitialState;\n}\n\nconst WORKSPACE_STORE_NAMESPACE = \"pstdio/ui/data-renderer\";\n\nconst toStorageName = (storageKey: string) => `${WORKSPACE_STORE_NAMESPACE}/${storageKey}`;\n\nconst DEFAULT_SNAPSHOT: DataRendererSnapshot = {\n settings: DEFAULT_DATA_RENDERER_SETTINGS,\n filters: {},\n expandedGroups: {},\n};\n\nconst createSnapshot = (initialState?: DataRendererStoreInitialState): DataRendererSnapshot => ({\n settings: { ...DEFAULT_SNAPSHOT.settings, ...(initialState?.settings ?? {}) },\n filters: initialState?.filters ?? DEFAULT_SNAPSHOT.filters,\n expandedGroups: initialState?.expandedGroups ?? DEFAULT_SNAPSHOT.expandedGroups,\n});\n\nconst toggleValue = (values: string[], value: string) =>\n values.includes(value) ? values.filter((entry) => entry !== value) : [...values, value];\n\n// Strip the legacy \"tag:\" prefix used before attributes became first-class.\nconst stripTagPrefix = (id: string) => (id.startsWith(\"tag:\") ? id.slice(4) : id);\n\nconst migrateSettings = (settings: Record<string, unknown>): DataRendererSettings => {\n const orderingRaw = settings.ordering as Record<string, unknown> | undefined;\n const orderingId =\n typeof orderingRaw?.attributeId === \"string\"\n ? (orderingRaw.attributeId as string)\n : typeof orderingRaw?.field === \"string\"\n ? stripTagPrefix(orderingRaw.field as string)\n : MANUAL_ORDERING;\n const orderingDirection = (\n orderingRaw?.direction === \"desc\" ? \"desc\" : \"asc\"\n ) as DataRendererSettings[\"ordering\"][\"direction\"];\n\n const columnGrouping =\n typeof settings.columnGrouping === \"string\" ? stripTagPrefix(settings.columnGrouping) : NO_GROUPING;\n const rowGrouping = typeof settings.rowGrouping === \"string\" ? stripTagPrefix(settings.rowGrouping) : NO_GROUPING;\n const displayProperties = Array.isArray(settings.displayProperties)\n ? (settings.displayProperties as unknown[])\n .filter((entry): entry is string => typeof entry === \"string\")\n .map(stripTagPrefix)\n : [];\n\n return {\n viewMode: settings.viewMode === \"list\" ? \"list\" : \"board\",\n columnGrouping,\n rowGrouping,\n ordering: { attributeId: orderingId === \"manual\" ? MANUAL_ORDERING : orderingId, direction: orderingDirection },\n displayProperties,\n };\n};\n\nconst migrateFilters = (filters: Record<string, unknown>): DataRendererFilterState => {\n const next: DataRendererFilterState = {};\n for (const [id, values] of Object.entries(filters)) {\n if (!Array.isArray(values)) continue;\n const stringValues = values.filter((value): value is string => typeof value === \"string\");\n if (stringValues.length === 0) continue;\n next[stripTagPrefix(id)] = stringValues;\n }\n return next;\n};\n\nexport const createDataRendererStore = (options: CreateDataRendererStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = createSnapshot(initialState);\n\n return createStore<DataRendererState>()(\n persist(\n (set) => ({\n ...snapshot,\n setViewMode: (viewMode) => set((state) => ({ ...state, settings: { ...state.settings, viewMode } })),\n setColumnGrouping: (columnGrouping) =>\n set((state) => ({ ...state, settings: { ...state.settings, columnGrouping } })),\n setRowGrouping: (rowGrouping) => set((state) => ({ ...state, settings: { ...state.settings, rowGrouping } })),\n setOrdering: (ordering) => set((state) => ({ ...state, settings: { ...state.settings, ordering } })),\n setOrderingAttributeId: (attributeId) =>\n set((state) => ({\n ...state,\n settings: { ...state.settings, ordering: { ...state.settings.ordering, attributeId } },\n })),\n setDisplayProperties: (displayProperties) =>\n set((state) => ({ ...state, settings: { ...state.settings, displayProperties } })),\n toggleSortDirection: () =>\n set((state) => ({\n ...state,\n settings: {\n ...state.settings,\n ordering: {\n ...state.settings.ordering,\n direction: state.settings.ordering.direction === \"asc\" ? \"desc\" : \"asc\",\n },\n },\n })),\n toggleDisplayProperty: (property) =>\n set((state) => {\n const displayProperties = state.settings.displayProperties.includes(property)\n ? state.settings.displayProperties.filter((value) => value !== property)\n : [...state.settings.displayProperties, property];\n return { ...state, settings: { ...state.settings, displayProperties } };\n }),\n setFilter: (attributeId, values) =>\n set((state) => ({ ...state, filters: { ...state.filters, [attributeId]: values } })),\n toggleFilterValue: (attributeId, value) =>\n set((state) => {\n const currentValues = state.filters[attributeId] ?? [];\n const nextValues = toggleValue(currentValues, value);\n const nextFilters =\n nextValues.length === 0\n ? omitFilterCategory(state.filters, attributeId)\n : { ...state.filters, [attributeId]: nextValues };\n return { ...state, filters: nextFilters };\n }),\n clearFilter: (attributeId) =>\n set((state) => ({ ...state, filters: omitFilterCategory(state.filters, attributeId) })),\n clearAllFilters: () => set((state) => ({ ...state, filters: {} })),\n setExpandedGroup: (groupId, isExpanded) =>\n set((state) => ({ ...state, expandedGroups: { ...state.expandedGroups, [groupId]: isExpanded } })),\n reset: () => set(snapshot),\n }),\n {\n name: toStorageName(storageKey),\n version: 2,\n migrate: (persisted, version) => {\n if (!persisted || typeof persisted !== \"object\") return persisted as DataRendererSnapshot;\n const state = persisted as {\n settings?: Record<string, unknown>;\n filters?: Record<string, unknown>;\n expandedGroups?: Record<string, boolean>;\n };\n if (version >= 2) {\n const snapshot = state as unknown as DataRendererSnapshot;\n return { ...snapshot, expandedGroups: snapshot.expandedGroups ?? {} };\n }\n return {\n settings: migrateSettings(state.settings ?? {}),\n filters: migrateFilters(state.filters ?? {}),\n expandedGroups: {},\n };\n },\n storage: createJSONStorage(createBrowserStorage),\n partialize: (state) => ({\n settings: state.settings,\n filters: state.filters,\n expandedGroups: state.expandedGroups,\n }),\n },\n ),\n );\n};\n\nconst workspaceStoreRegistry = new Map<string, ReturnType<typeof createDataRendererStore>>();\n\nexport const getDataRendererStore = (storageKey: string, initialState?: DataRendererStoreInitialState) => {\n const existingStore = workspaceStoreRegistry.get(storageKey);\n if (existingStore) return existingStore;\n\n const store = createDataRendererStore({ storageKey, initialState });\n workspaceStoreRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useDataRendererStore = <T>(\n storageKey: string,\n selector: (state: DataRendererState) => T,\n initialState?: DataRendererStoreInitialState,\n) => {\n const store = getDataRendererStore(storageKey, initialState);\n return useStore(store, selector);\n};\n\nexport type { DataRendererSnapshot, DataRendererState, DataRendererStoreInitialState };\n","import { useEffect, useReducer } from \"react\";\n\nimport type { AttributeDescriptor, EnumOptionsSource } from \"./types\";\nimport { isEnumOptionsSource } from \"./types\";\n\nconst collectSources = (attributes: AttributeDescriptor[]): EnumOptionsSource[] => {\n const sources: EnumOptionsSource[] = [];\n for (const attribute of attributes) {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") continue;\n if (isEnumOptionsSource(attribute.type.options)) sources.push(attribute.type.options);\n }\n return sources;\n};\n\n/**\n * Returns the same descriptors with every source-backed enum's options\n * replaced by a fresh `getSnapshot()` array. Pure — call from anywhere that\n * needs a normalized view of the schema.\n */\nexport const resolveAttributeOptions = (attributes: AttributeDescriptor[]): AttributeDescriptor[] =>\n attributes.map((attribute) => {\n if (attribute.type.kind !== \"enum\" && attribute.type.kind !== \"enum-multi\") return attribute;\n if (!isEnumOptionsSource(attribute.type.options)) return attribute;\n return { ...attribute, type: { ...attribute.type, options: attribute.type.options.getSnapshot() } };\n });\n\n/**\n * Subscribes to every source-backed enum in `attributes` and returns the\n * resolved descriptors (options materialized to plain arrays). When any\n * source's listener fires the component rerenders, so downstream renders see\n * the new snapshot automatically.\n */\nexport const useResolvedAttributes = (attributes: AttributeDescriptor[]) => {\n const [, forceRender] = useReducer((tick: number) => tick + 1, 0);\n\n useEffect(() => {\n const sources = collectSources(attributes);\n if (sources.length === 0) return;\n const refresh = () => forceRender();\n const unsubscribes = sources.map((source) => source.subscribe(refresh));\n return () => {\n for (const dispose of unsubscribes) dispose();\n };\n }, [attributes]);\n\n return resolveAttributeOptions(attributes);\n};\n","import { Box, HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport { countFilterValues } from \"./data-renderer-grouping\";\nimport {\n buildDisplayPropertyOptions,\n buildFilterCategories,\n buildGroupingOptions,\n buildOrderingOptions,\n} from \"./data-renderer-helpers\";\nimport { DisplayMenu } from \"./display-menu\";\nimport { FilterMenu } from \"./filter-menu\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\nexport interface DataRendererToolbarProps<TRow extends DataRendererRow = DataRendererRow> {\n rows: TRow[];\n storageKey: string;\n attributes: AttributeDescriptor[];\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n leading?: ReactNode;\n align?: \"split\" | \"end\";\n}\n\nexport const DataRendererToolbar = <TRow extends DataRendererRow>(props: DataRendererToolbarProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n defaultSettings,\n defaultFilters,\n leading,\n align = \"split\",\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const groupingOptions = buildGroupingOptions(attributes);\n const orderingOptions = buildOrderingOptions(attributes);\n const displayPropertyOptions = buildDisplayPropertyOptions(attributes);\n\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n const setViewMode = useDataRendererStore(storageKey, (state) => state.setViewMode, initialState);\n const setColumnGrouping = useDataRendererStore(storageKey, (state) => state.setColumnGrouping, initialState);\n const setRowGrouping = useDataRendererStore(storageKey, (state) => state.setRowGrouping, initialState);\n const setOrderingAttributeId = useDataRendererStore(\n storageKey,\n (state) => state.setOrderingAttributeId,\n initialState,\n );\n const toggleSortDirection = useDataRendererStore(storageKey, (state) => state.toggleSortDirection, initialState);\n const toggleDisplayProperty = useDataRendererStore(storageKey, (state) => state.toggleDisplayProperty, initialState);\n const toggleFilterValue = useDataRendererStore(storageKey, (state) => state.toggleFilterValue, initialState);\n const clearFilter = useDataRendererStore(storageKey, (state) => state.clearFilter, initialState);\n const clearAllFilters = useDataRendererStore(storageKey, (state) => state.clearAllFilters, initialState);\n\n const categoryOptions = buildFilterCategories(attributes, rows);\n const countsByCategory = Object.fromEntries(\n categoryOptions.map((category) => [category.id, countFilterValues(rows, category.id, attributes)]),\n );\n\n return (\n <HStack\n gap=\"2xs\"\n minW=\"0\"\n w={align === \"split\" ? \"full\" : undefined}\n flexShrink={0}\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n padding=\"2xs\"\n >\n {leading}\n {align === \"split\" ? <Box flex=\"1\" /> : null}\n <FilterMenu\n categories={categoryOptions}\n filters={filters}\n countsByCategory={countsByCategory}\n onToggleFilterValue={toggleFilterValue}\n onClearFilter={clearFilter}\n onClearAll={clearAllFilters}\n />\n <DisplayMenu\n settings={settings}\n groupingOptions={groupingOptions}\n orderingOptions={orderingOptions}\n displayPropertyOptions={displayPropertyOptions}\n onViewModeChange={setViewMode}\n onColumnGroupingChange={setColumnGrouping}\n onRowGroupingChange={setRowGrouping}\n onOrderingAttributeIdChange={setOrderingAttributeId}\n onSortDirectionToggle={toggleSortDirection}\n onDisplayPropertyToggle={toggleDisplayProperty}\n />\n </HStack>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type {\n DataRendererBoardColumn,\n DataRendererBoardColumnAction,\n DataRendererBoardGroup,\n} from \"./data-renderer-board\";\nimport { DataRendererContent } from \"./data-renderer-content\";\nimport { type DataRendererColumnGroup, filterRows, groupRows, orderRows } from \"./data-renderer-grouping\";\nimport {\n collectDisplayBadges,\n collectDisplayCustomSlots,\n findEnumOption,\n resolveKnownColumnKeys,\n resolveListDropTargetColumnKey,\n} from \"./data-renderer-helpers\";\nimport type { DataRendererListItem } from \"./data-renderer-list\";\nimport { DataRendererToolbar } from \"./data-renderer-toolbar\";\nimport type { AttributeDescriptor, DataRendererFilterState, DataRendererRow, DataRendererSettings } from \"./types\";\nimport { findAttribute, MANUAL_ORDERING, NO_GROUPING } from \"./types\";\nimport { useDataRendererStore } from \"./use-data-renderer-store\";\nimport { useResolvedAttributes } from \"./use-resolved-attributes\";\n\n/** Board-column behavior and menu configuration for a resolved column group. */\nexport interface BoardColumnConfig {\n /** Chakra color palette used for the column header and group badges. */\n color?: string;\n canDragIn?: boolean;\n canDragOut?: boolean;\n canCreate?: boolean;\n actions?: DataRendererBoardColumnAction[];\n}\n\n/** Switchable list/board renderer for rows with typed attributes, filtering, grouping, and ordering. */\nexport interface DataRendererProps<TRow extends DataRendererRow = DataRendererRow> {\n /** Stable rows to render. Each row must have an id, title, and attributes map. */\n rows: TRow[];\n /** Persistent key used by the renderer store for view, filter, grouping, ordering, and list expansion settings. */\n storageKey: string;\n /** Attribute descriptors that define display, filtering, grouping, ordering, and board columns. */\n attributes: AttributeDescriptor[];\n selectedRowId?: string | null;\n emptyState?: ReactNode;\n emptyTitle?: string;\n emptyDescription?: string;\n defaultSettings?: Partial<DataRendererSettings>;\n defaultFilters?: DataRendererFilterState;\n hideToolbar?: boolean;\n toolbarLeading?: ReactNode;\n onRowClick?: (row: TRow) => void;\n /** Called when a row attribute changes through drag/drop, board movement, or inline controls. */\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => void;\n /** Called for manual row ordering when a dragged row is dropped before another row. */\n onReorder?: (rowId: string, beforeRowId?: string) => void;\n onCreateRow?: (columnId: string) => void;\n onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;\n getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\ninterface BuildListItemsInput<TRow extends DataRendererRow> {\n settings: DataRendererSettings;\n visibleRows: TRow[];\n grouped: DataRendererColumnGroup[];\n attributes: AttributeDescriptor[];\n onRowClick?: (row: TRow) => void;\n onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => void;\n onReorder?: (rowId: string, beforeRowId?: string) => void;\n getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];\n}\n\nconst buildListItems = <TRow extends DataRendererRow>(input: BuildListItemsInput<TRow>): DataRendererListItem[] => {\n const {\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n } = input;\n\n const supportsManualReorder = settings.ordering.attributeId === MANUAL_ORDERING;\n const getGroupColorPalette = (attributeId: string, key: string) => {\n const descriptor = findAttribute(attributes, attributeId);\n return descriptor ? findEnumOption(descriptor.type, key)?.color : undefined;\n };\n\n const toListItem = (row: TRow, placement?: { columnKey?: string; rowKey?: string }): DataRendererListItem => ({\n id: row.id,\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n contextMenuActions: getRowContextMenuActions?.(row),\n onClick: () => onRowClick?.(row),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) => onAttributeChange(row.id, attributeId, value)\n : undefined,\n draggable: Boolean(onAttributeChange || onReorder),\n onDropRow:\n supportsManualReorder && (onAttributeChange || onReorder)\n ? (draggedId) => {\n const targetColumnKey = resolveListDropTargetColumnKey(settings.columnGrouping, placement);\n if (targetColumnKey && settings.columnGrouping !== NO_GROUPING && onAttributeChange) {\n onAttributeChange(draggedId, settings.columnGrouping, targetColumnKey);\n }\n if (settings.rowGrouping !== NO_GROUPING && placement?.rowKey && onAttributeChange) {\n onAttributeChange(draggedId, settings.rowGrouping, placement.rowKey);\n }\n onReorder?.(draggedId, row.id);\n }\n : undefined,\n });\n\n const toSubgroupListItem = (\n subgroup: { key: string; label: string; rows: DataRendererRow[] },\n parent?: { columnKey: string },\n ): DataRendererListItem => ({\n id: parent ? `group::${parent.columnKey}::${subgroup.key}` : `group::${subgroup.key}`,\n title: subgroup.label,\n countBadge: subgroup.rows.length,\n countColorPalette: getGroupColorPalette(parent ? settings.rowGrouping : settings.columnGrouping, subgroup.key),\n onDropRow:\n onAttributeChange && settings.columnGrouping !== NO_GROUPING\n ? (draggedId) => {\n const columnKey = parent?.columnKey ?? subgroup.key;\n onAttributeChange(draggedId, settings.columnGrouping, columnKey);\n if (settings.rowGrouping !== NO_GROUPING && parent) {\n onAttributeChange(draggedId, settings.rowGrouping, subgroup.key);\n }\n }\n : undefined,\n children: orderRows(subgroup.rows, settings.ordering, attributes).map((row) =>\n toListItem(row as TRow, {\n columnKey: parent?.columnKey ?? subgroup.key,\n rowKey: parent ? subgroup.key : undefined,\n }),\n ),\n });\n\n if (settings.columnGrouping === NO_GROUPING) {\n return orderRows(visibleRows, settings.ordering, attributes).map((row) => toListItem(row as TRow));\n }\n\n return grouped.map((column) => {\n if (column.subgroups.length > 0) {\n return {\n id: `group::${column.key}`,\n title: column.label,\n countBadge: column.rows.length,\n countColorPalette: getGroupColorPalette(settings.columnGrouping, column.key),\n onDropRow: onAttributeChange\n ? (draggedId: string) => onAttributeChange(draggedId, settings.columnGrouping, column.key)\n : undefined,\n children: column.subgroups.map((subgroup) => toSubgroupListItem(subgroup, { columnKey: column.key })),\n } satisfies DataRendererListItem;\n }\n\n return toSubgroupListItem(column);\n });\n};\n\nexport const DataRenderer = <TRow extends DataRendererRow>(props: DataRendererProps<TRow>) => {\n const {\n rows,\n storageKey,\n attributes: rawAttributes,\n selectedRowId = null,\n emptyState,\n emptyTitle = \"No rows found\",\n emptyDescription = \"Try changing filters or display settings.\",\n defaultSettings,\n defaultFilters,\n onRowClick,\n onAttributeChange,\n onReorder,\n onCreateRow,\n onColumnAction,\n getBoardColumnConfig,\n getRowContextMenuActions,\n hideToolbar = false,\n toolbarLeading,\n } = props;\n\n const attributes = useResolvedAttributes(rawAttributes);\n const initialState = { settings: defaultSettings, filters: defaultFilters };\n const settings = useDataRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useDataRendererStore(storageKey, (state) => state.filters, initialState);\n const expandedGroups = useDataRendererStore(storageKey, (state) => state.expandedGroups, initialState);\n const setExpandedGroup = useDataRendererStore(storageKey, (state) => state.setExpandedGroup, initialState);\n\n const visibleRows = filterRows(rows, filters, attributes) as TRow[];\n\n const knownColumnKeys = resolveKnownColumnKeys(settings.columnGrouping, attributes, filters);\n\n const grouped = groupRows(visibleRows, {\n attributes,\n columnGrouping: settings.columnGrouping,\n rowGrouping: settings.rowGrouping,\n knownColumnKeys,\n });\n\n const listItems = buildListItems({\n settings,\n visibleRows,\n grouped,\n attributes,\n onRowClick,\n onAttributeChange,\n onReorder,\n getRowContextMenuActions,\n });\n\n const toBoardItems = (boardRows: DataRendererRow[]) =>\n boardRows.map((row) => ({\n id: row.id,\n contextMenuActions: getRowContextMenuActions?.(row as TRow),\n cardProps: {\n title: row.title,\n badges: collectDisplayBadges(row, attributes, settings.displayProperties),\n customSlots: collectDisplayCustomSlots(row, attributes, settings.displayProperties),\n onBadgeChange: onAttributeChange\n ? (attributeId: string, value: unknown) => onAttributeChange(row.id, attributeId, value)\n : undefined,\n onClick: () => onRowClick?.(row as TRow),\n },\n }));\n\n const columnGroupingDescriptor = findAttribute(attributes, settings.columnGrouping);\n\n const boardColumns: DataRendererBoardColumn[] = grouped.map((column) => {\n const columnConfig = getBoardColumnConfig?.(column.key) ?? {};\n const orderedRows = orderRows(column.rows, settings.ordering, attributes);\n // Column color follows the enum option when the contribution does not\n // provide one, while row display badges stay visually neutral.\n const enumColor = columnGroupingDescriptor\n ? findEnumOption(columnGroupingDescriptor.type, column.key)?.color\n : undefined;\n\n const groups: DataRendererBoardGroup[] | undefined =\n column.subgroups.length > 0\n ? column.subgroups.map((subgroup) => ({\n key: subgroup.key,\n label: subgroup.label,\n items: toBoardItems(orderRows(subgroup.rows, settings.ordering, attributes)),\n }))\n : undefined;\n\n return {\n id: column.key,\n label: column.label,\n color: columnConfig.color ?? enumColor,\n canDragIn: columnConfig.canDragIn ?? false,\n canDragOut: columnConfig.canDragOut ?? false,\n canCreate: columnConfig.canCreate ?? false,\n actions: columnConfig.actions ?? [],\n items: toBoardItems(orderedRows),\n groups,\n } satisfies DataRendererBoardColumn;\n });\n\n const handleBoardMoveItem = (rowId: string, targetColumnId: string) => {\n if (settings.columnGrouping === NO_GROUPING || !onAttributeChange) return;\n onAttributeChange(rowId, settings.columnGrouping, targetColumnId);\n };\n\n const handleBoardMoveToGroup = (rowId: string, targetGroupKey: string) => {\n if (settings.rowGrouping === NO_GROUPING || !onAttributeChange) return;\n onAttributeChange(rowId, settings.rowGrouping, targetGroupKey);\n };\n\n return (\n <Stack height=\"100%\" minH=\"0\" gap=\"0\">\n {hideToolbar ? null : (\n <DataRendererToolbar\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={defaultSettings}\n defaultFilters={defaultFilters}\n leading={toolbarLeading}\n />\n )}\n\n <DataRendererContent\n viewMode={settings.viewMode}\n boardColumns={boardColumns}\n listItems={listItems}\n listExpandedGroups={expandedGroups}\n selectedRowId={selectedRowId}\n emptyState={emptyState}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n onBoardMoveItem={handleBoardMoveItem}\n onBoardMoveToGroup={handleBoardMoveToGroup}\n onCreateRow={onCreateRow}\n onColumnAction={onColumnAction}\n onListExpandedGroupChange={setExpandedGroup}\n listKey={`${settings.columnGrouping}:${settings.rowGrouping}`}\n />\n </Stack>\n );\n};\n","import { Button, CloseButton, Dialog, Stack, Text } from \"@chakra-ui/react\";\nimport { useState } from \"react\";\n\ninterface DeleteConfirmationModalProps {\n open: boolean;\n onClose: () => void;\n onDelete: () => void | Promise<void>;\n headline?: string;\n notificationText?: string;\n buttonText?: string;\n}\n\nexport type { DeleteConfirmationModalProps };\n\nexport const DeleteConfirmationModal = (props: DeleteConfirmationModalProps) => {\n const [isDeleting, setIsDeleting] = useState(false);\n const { headline, buttonText, notificationText, onDelete, open, onClose } = props;\n\n const handleDelete = async () => {\n setIsDeleting(true);\n\n try {\n await onDelete();\n onClose();\n } catch {\n // Errors surface through parent state.\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onClose}>\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Text textStyle=\"heading/M\">{headline}</Text>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body>{notificationText}</Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"1\">\n <Button onClick={onClose}>Close</Button>\n <Button loading={isDeleting} variant=\"solid\" colorPalette=\"red\" onClick={handleDelete}>\n {buttonText}\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","export const LARGE_DIFF_LINE_THRESHOLD = 1000;\n\nconst generatedDiffFileNames = new Set([\"bun.lock\", \"bun.lockb\", \"package-lock.json\", \"pnpm-lock.yaml\", \"yarn.lock\"]);\n\n// Extensions whose byte content cannot be meaningfully shown as a unified diff.\n// SVG is intentionally excluded — it is text-based XML and benefits from a line diff.\nconst binaryDiffExtensions = new Set([\n \"avif\",\n \"bmp\",\n \"gif\",\n \"heic\",\n \"ico\",\n \"jpeg\",\n \"jpg\",\n \"png\",\n \"tif\",\n \"tiff\",\n \"webp\",\n \"pdf\",\n \"zip\",\n \"tar\",\n \"gz\",\n \"tgz\",\n \"rar\",\n \"7z\",\n \"exe\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"wasm\",\n \"class\",\n \"jar\",\n \"mp3\",\n \"mp4\",\n \"mov\",\n \"ogg\",\n \"wav\",\n \"webm\",\n \"flac\",\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n]);\n\nconst imageDiffExtensions = new Set([\"avif\", \"bmp\", \"gif\", \"heic\", \"ico\", \"jpeg\", \"jpg\", \"png\", \"tif\", \"tiff\", \"webp\"]);\n\nconst getExtension = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n const ext = fileName.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\nexport const getDiffLineCount = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return (input.additions ?? 0) + (input.deletions ?? 0);\n};\n\nexport const isLargeDiffContent = (input: {\n additions?: number;\n deletions?: number;\n oldContent?: string;\n newContent?: string;\n}) => {\n return getDiffLineCount(input) > LARGE_DIFF_LINE_THRESHOLD;\n};\n\nexport const isGeneratedDiffPath = (path: string) => {\n const fileName = path.split(/[\\\\/]/).pop() ?? path;\n\n return generatedDiffFileNames.has(fileName) || fileName.endsWith(\".min.js\") || fileName.endsWith(\".generated.ts\");\n};\n\nexport const isBinaryDiffPath = (path: string) => {\n const ext = getExtension(path);\n return ext.length > 0 && binaryDiffExtensions.has(ext);\n};\n\nexport const isImageDiffPath = (path: string) => {\n const ext = getExtension(path);\n return ext.length > 0 && imageDiffExtensions.has(ext);\n};\n","import { Box, Button } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffEditor } from \"./diff-editor\";\nimport { getDiffLineCount, isBinaryDiffPath, isImageDiffPath } from \"./diff-size\";\nimport { type BuiltDiffViewData, buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardBodyProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isLargeDiff: boolean;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardBodyModelInput extends DiffCardBodyProps {\n buildViewData?: typeof buildDiffViewData;\n}\n\nexport const createDiffCardBodyModel = (input: DiffCardBodyModelInput) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n buildViewData,\n } = input;\n\n if (isBinaryDiffPath(filePath)) {\n return {\n kind: \"binary\" as const,\n filePath,\n isImage: isImageDiffPath(filePath),\n };\n }\n\n if (isLargeDiff && !hasOptedIntoLargeDiff) {\n return {\n kind: \"placeholder\" as const,\n filePath,\n renderedLineCount: getDiffLineCount(diff),\n onShowFullDiff,\n };\n }\n\n const diffViewData = (buildViewData ?? buildDiffViewData)({\n original: oldContent,\n modified: newContent,\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n return {\n kind: \"editor\" as const,\n diffViewData,\n sideBySide: diffViewMode === \"split\",\n };\n};\n\nexport const DiffCardBody = (props: DiffCardBodyProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n const model = createDiffCardBodyModel({\n diff,\n filePath,\n oldContent,\n newContent,\n isLargeDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode,\n });\n\n return (\n <Box bg=\"bg\" borderBottomRadius=\"xs\" overflow=\"hidden\">\n {model.kind === \"editor\" ? (\n <DiffEditor\n original={oldContent}\n modified={newContent}\n oldPath={diff.oldPath}\n newPath={diff.newPath}\n sideBySide={model.sideBySide}\n data={model.diffViewData}\n />\n ) : model.kind === \"binary\" ? (\n <BinaryDiffPlaceholder isImage={model.isImage} />\n ) : (\n <LargeDiffPlaceholder\n filePath={model.filePath}\n renderedLineCount={model.renderedLineCount}\n onShowFullDiff={model.onShowFullDiff}\n />\n )}\n </Box>\n );\n};\n\ninterface LargeDiffPlaceholderProps {\n filePath: string;\n renderedLineCount: number;\n onShowFullDiff?: () => void;\n}\n\nconst LargeDiffPlaceholder = (props: LargeDiffPlaceholderProps) => {\n const { filePath, onShowFullDiff } = props;\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title=\"Large diffs are hidden by default\" paddingY=\"sm\">\n {onShowFullDiff ? (\n <Button size=\"xs\" variant=\"outline\" aria-label={`Render full diff for ${filePath}`} onClick={onShowFullDiff}>\n Show full diff\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\ninterface BinaryDiffPlaceholderProps {\n isImage: boolean;\n}\n\nconst BinaryDiffPlaceholder = (props: BinaryDiffPlaceholderProps) => {\n const { isImage } = props;\n const title = isImage ? \"Image diffs are not shown\" : \"Binary diffs are not shown\";\n\n return (\n <Box p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\" bg=\"bg\">\n <EmptyState title={title} paddingY=\"sm\" />\n </Box>\n );\n};\n\nexport type TestDiffViewData = BuiltDiffViewData;\n","import { Box, Button, Skeleton, Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\n\ninterface DeferredDiffLoadProps {\n title: string;\n actionLabel?: string;\n isLoadingDiff: boolean;\n onAction?: () => void;\n}\n\nexport const DeferredDiffLoad = (props: DeferredDiffLoadProps) => {\n const { title, actionLabel, isLoadingDiff, onAction } = props;\n\n return (\n <Box bg=\"bg\" p=\"md\" borderTop=\"1px solid\" borderColor=\"border.muted\">\n <EmptyState title={title} paddingY=\"sm\">\n {actionLabel ? (\n <Button size=\"xs\" variant=\"outline\" loading={isLoadingDiff} onClick={onAction}>\n {actionLabel}\n </Button>\n ) : null}\n </EmptyState>\n </Box>\n );\n};\n\nconst loadingDiffContentRows = [\"first\", \"second\", \"third\"] as const;\n\nexport const LoadingDiffContent = () => (\n <Stack\n h=\"280px\"\n bg=\"bg\"\n borderTop=\"1px solid\"\n borderColor=\"border.muted\"\n p=\"xs\"\n gap=\"2xs\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading diff\"\n >\n {loadingDiffContentRows.map((row) => (\n <Skeleton key={row} h=\"20px\" w=\"full\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { DiffCardBody } from \"./diff-card-body\";\nimport { DeferredDiffLoad, LoadingDiffContent } from \"./diff-card-load-state\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface DiffCardContentProps {\n diff: Diff;\n filePath: string;\n oldContent: string;\n newContent: string;\n isExpanded: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n hasDiffContent: boolean;\n canLoadDiff: boolean;\n shouldAutoLoadDiff: boolean;\n loadError: boolean;\n isLoadingDiff: boolean;\n onLoadDiff: () => Promise<void>;\n hasOptedIntoLargeDiff: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DeferredDiffLoadStateInput {\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n loadError: boolean;\n canLoadDiff: boolean;\n onLoadDiff: () => Promise<void>;\n onShowFullDiff?: () => void;\n}\n\nconst buildDeferredDiffLoadState = (input: DeferredDiffLoadStateInput) => {\n const { isLargeDiff, isGeneratedDiff, loadError, canLoadDiff, onLoadDiff, onShowFullDiff } = input;\n let title = \"Diff content is not loaded yet.\";\n let actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n let onAction: (() => void) | undefined = canLoadDiff ? () => void onLoadDiff() : undefined;\n\n if (isLargeDiff) {\n title = \"Large diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Show full diff\" : undefined;\n onAction = () => {\n onShowFullDiff?.();\n void onLoadDiff();\n };\n }\n\n if (isGeneratedDiff) {\n title = \"Generated diffs are hidden by default\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n if (loadError) {\n title = \"Diff failed to load. Try again.\";\n actionLabel = canLoadDiff ? \"Load diff\" : undefined;\n onAction = canLoadDiff ? () => void onLoadDiff() : undefined;\n }\n\n return { title, actionLabel, onAction };\n};\n\nexport const DiffCardContent = (props: DiffCardContentProps) => {\n const {\n diff,\n filePath,\n oldContent,\n newContent,\n isExpanded,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n hasDiffContent,\n canLoadDiff,\n shouldAutoLoadDiff,\n loadError,\n isLoadingDiff,\n onLoadDiff,\n hasOptedIntoLargeDiff,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n if (!isExpanded) return null;\n\n if (isBinaryDiff) {\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={false}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n }\n\n if (!hasDiffContent && !shouldAutoLoadDiff) {\n const { title, actionLabel, onAction } = buildDeferredDiffLoadState({\n isLargeDiff,\n isGeneratedDiff,\n loadError,\n canLoadDiff,\n onLoadDiff,\n onShowFullDiff,\n });\n\n return (\n <DeferredDiffLoad title={title} actionLabel={actionLabel} isLoadingDiff={isLoadingDiff} onAction={onAction} />\n );\n }\n\n if (shouldAutoLoadDiff) {\n return <LoadingDiffContent />;\n }\n\n return (\n <DiffCardBody\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isLargeDiff={isLargeDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n );\n};\n","import { Box, Grid, IconButton, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport { DiffCardContent } from \"./diff-card-content\";\nimport { isBinaryDiffPath, isGeneratedDiffPath, isLargeDiffContent } from \"./diff-size\";\nimport type { DiffViewMode } from \"./types\";\n\nexport interface Diff {\n change: \"added\" | \"deleted\" | \"modified\" | \"renamed\" | \"copied\" | \"permissionChange\";\n oldPath?: string;\n newPath?: string;\n oldContent?: string;\n newContent?: string;\n additions?: number;\n deletions?: number;\n}\n\ninterface DiffCardProps {\n diff: Diff;\n isSelected?: boolean;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n onSelect?: () => void;\n onLoadDiff?: (path: string) => Promise<void>;\n hasOptedIntoLargeDiff?: boolean;\n onShowFullDiff?: () => void;\n diffViewMode?: DiffViewMode;\n}\n\ninterface DiffCardHeaderProps {\n diff: Diff;\n isExpanded?: boolean;\n onToggleExpanded?: () => void;\n}\n\nexport const shouldAutoLoadDiffContent = (input: {\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n requestedPath: string | null;\n filePath: string;\n}) => {\n const { isExpanded, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, requestedPath, filePath } = input;\n\n return (\n isExpanded && !hasDiffContent && !isLargeDiff && !isGeneratedDiff && !isBinaryDiff && requestedPath !== filePath\n );\n};\n\nexport const resolveRequestedDiffPath = (input: {\n requestedPath: string | null;\n filePath: string;\n hasDiffContent: boolean;\n}) => {\n const { requestedPath, filePath, hasDiffContent } = input;\n\n if (requestedPath === filePath && hasDiffContent) {\n return null;\n }\n\n return requestedPath;\n};\n\nconst useDiffContentLoader = (input: {\n filePath: string;\n isExpanded: boolean;\n isSelected: boolean;\n hasDiffContent: boolean;\n isLargeDiff: boolean;\n isGeneratedDiff: boolean;\n isBinaryDiff: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n}) => {\n const { filePath, isExpanded, isSelected, hasDiffContent, isLargeDiff, isGeneratedDiff, isBinaryDiff, onLoadDiff } =\n input;\n const [isLoadingDiff, setLoadingDiff] = useState(false);\n const [requestedPath, setRequestedPath] = useState<string | null>(null);\n const [loadError, setLoadError] = useState(false);\n\n const loadDiff = async () => {\n if (!onLoadDiff || isLoadingDiff) return;\n\n setRequestedPath(filePath);\n setLoadError(false);\n setLoadingDiff(true);\n try {\n await onLoadDiff(filePath);\n } catch {\n setRequestedPath(null);\n setLoadError(true);\n } finally {\n setLoadingDiff(false);\n }\n };\n\n const shouldAutoLoadDiff = shouldAutoLoadDiffContent({\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n requestedPath,\n filePath,\n });\n\n useEffect(() => {\n setRequestedPath((current) => resolveRequestedDiffPath({ requestedPath: current, filePath, hasDiffContent }));\n }, [filePath, hasDiffContent]);\n\n useEffect(() => {\n if (!onLoadDiff || !shouldAutoLoadDiff || loadError) {\n return;\n }\n\n void loadDiff();\n });\n\n return {\n isLoadingDiff,\n loadError,\n shouldAutoLoadDiff: Boolean(onLoadDiff) && shouldAutoLoadDiff && !loadError,\n loadDiff,\n };\n};\n\nexport const DiffCard = (props: DiffCardProps) => {\n const {\n diff,\n isSelected = false,\n isExpanded = true,\n onToggleExpanded,\n onSelect,\n onLoadDiff,\n hasOptedIntoLargeDiff = false,\n onShowFullDiff,\n diffViewMode = \"unified\",\n } = props;\n\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const oldContent = diff.oldContent || \"\";\n const newContent = diff.newContent || \"\";\n const isLargeDiff = isLargeDiffContent(diff);\n const isGeneratedDiff = isGeneratedDiffPath(filePath);\n const isBinaryDiff = isBinaryDiffPath(filePath);\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n const { isLoadingDiff, loadError, shouldAutoLoadDiff, loadDiff } = useDiffContentLoader({\n filePath,\n isExpanded,\n isSelected,\n hasDiffContent,\n isLargeDiff: isLargeDiff && !hasOptedIntoLargeDiff,\n isGeneratedDiff,\n isBinaryDiff,\n onLoadDiff,\n });\n\n return (\n <Box\n data-testid=\"diff-card\"\n border=\"1px solid\"\n borderColor={isSelected ? \"border.accent\" : \"border.muted\"}\n borderRadius=\"xs\"\n overflow=\"visible\"\n bg=\"bg\"\n width=\"100%\"\n maxW=\"100%\"\n transition=\"border-color 0.14s ease\"\n _hover={{ borderColor: \"border.accent\" }}\n onClick={onSelect}\n >\n <DiffCardHeader diff={diff} isExpanded={isExpanded} onToggleExpanded={onToggleExpanded} />\n\n <DiffCardContent\n diff={diff}\n filePath={filePath}\n oldContent={oldContent}\n newContent={newContent}\n isExpanded={isExpanded}\n isLargeDiff={isLargeDiff}\n isGeneratedDiff={isGeneratedDiff}\n isBinaryDiff={isBinaryDiff}\n hasDiffContent={hasDiffContent}\n canLoadDiff={Boolean(onLoadDiff)}\n shouldAutoLoadDiff={shouldAutoLoadDiff}\n loadError={loadError}\n isLoadingDiff={isLoadingDiff}\n onLoadDiff={loadDiff}\n hasOptedIntoLargeDiff={hasOptedIntoLargeDiff}\n onShowFullDiff={onShowFullDiff}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n};\n\nexport const DiffCardHeader = (props: DiffCardHeaderProps) => {\n const { diff, isExpanded = true, onToggleExpanded } = props;\n const filePath = diff.newPath || diff.oldPath || \"unknown\";\n const additions = diff.additions ?? 0;\n const deletions = diff.deletions ?? 0;\n\n return (\n <Grid\n data-testid=\"diff-card-header\"\n templateColumns=\"auto minmax(0, 1fr) auto\"\n px=\"xs\"\n py=\"2xs\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderBottom={isExpanded ? \"1px solid\" : \"none\"}\n borderColor=\"border.muted\"\n borderTopRadius=\"xs\"\n borderBottomRadius={isExpanded ? \"0\" : \"xs\"}\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n bg=\"bg\"\n cursor=\"pointer\"\n transition=\"background 0.14s ease\"\n _hover={{ bg: \"bg\" }}\n onClick={() => onToggleExpanded?.()}\n gap=\"sm\"\n >\n <IconButton\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n variant=\"ghost\"\n size=\"2xs\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleExpanded?.();\n }}\n flexShrink={0}\n >\n {isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </IconButton>\n\n <Box minW={0} overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\" title={filePath}>\n {diff.change === \"renamed\" ? (\n <Text as=\"span\" textStyle=\"sm\">\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" mr=\"xs\">\n {diff.oldPath}\n </Text>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" verticalAlign=\"middle\" mr=\"xs\">\n <ChevronRight size={12} />\n </Box>\n {diff.newPath}\n </Text>\n ) : diff.change === \"deleted\" ? (\n <Text as=\"span\" color=\"fg.muted\" textDecoration=\"line-through\" textStyle=\"sm\">\n {filePath}\n </Text>\n ) : (\n <Text as=\"span\" textStyle=\"sm\">\n {filePath}\n </Text>\n )}\n </Box>\n\n <Box flexShrink={0}>\n <DiffBubble variant=\"ghost\" additions={additions} deletions={deletions} />\n </Box>\n </Grid>\n );\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { EmptyState } from \"../empty-state\";\nimport { ScrollArea } from \"../scroll-area\";\n\nexport const DiffDrawerEmptyState = () => (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <ScrollArea flex=\"1\" minH=\"0\" contentProps={{ p: \"xs\", spaceY: \"xs\" }}>\n <EmptyState title=\"No changes detected\" description=\"Make some changes to see the diff here.\" paddingY=\"sm\" />\n </ScrollArea>\n </Stack>\n);\n","import type { Diff } from \"./diff-card\";\nimport { isLargeDiffContent } from \"./diff-size\";\nimport { buildDiffViewData } from \"./diff-view-adapter\";\nimport type { DiffViewMode } from \"./types\";\n\nconst CARD_HEADER_HEIGHT = 34;\nconst CARD_BODY_LINE_HEIGHT = 18;\nconst HUNK_ROW_HEIGHT = 28;\nconst COLLAPSED_CARD_HEIGHT = 34;\nconst DEFERRED_BODY_HEIGHT = 88;\nconst ITEM_GAP_HEIGHT = 8;\n\ninterface EstimateDiffCardHeightInput {\n diff: Diff;\n isCollapsed: boolean;\n hasOptedIntoLargeDiff?: boolean;\n diffViewMode?: DiffViewMode;\n}\n\nconst deferredCardHeight = () => CARD_HEADER_HEIGHT + DEFERRED_BODY_HEIGHT + ITEM_GAP_HEIGHT;\n\n// Mirrors the branches DiffCardContent renders, so the virtualizer's estimate matches the DOM\n// before measureElement gets a chance to refine it.\nexport const estimateDiffCardHeight = (input: EstimateDiffCardHeightInput) => {\n const { diff, isCollapsed, hasOptedIntoLargeDiff = false, diffViewMode = \"unified\" } = input;\n\n if (isCollapsed) return COLLAPSED_CARD_HEIGHT + ITEM_GAP_HEIGHT;\n\n const hasDiffContent = diff.oldContent !== undefined || diff.newContent !== undefined;\n if (!hasDiffContent) return deferredCardHeight();\n if (isLargeDiffContent(diff) && !hasOptedIntoLargeDiff) return deferredCardHeight();\n\n const { unifiedContentRows, splitContentRows, hunkRows } = buildDiffViewData({\n original: diff.oldContent ?? \"\",\n modified: diff.newContent ?? \"\",\n oldPath: diff.oldPath,\n newPath: diff.newPath,\n });\n const contentRows = diffViewMode === \"split\" ? splitContentRows : unifiedContentRows;\n if (contentRows === 0 && hunkRows === 0) return deferredCardHeight();\n\n const bodyHeight = contentRows * CARD_BODY_LINE_HEIGHT + hunkRows * HUNK_ROW_HEIGHT;\n return CARD_HEADER_HEIGHT + bodyHeight + ITEM_GAP_HEIGHT;\n};\n","import type { Diff } from \"./diff-card\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface EstimateDiffRangeHeightInput {\n diffs: Diff[];\n collapsedPaths: Set<string>;\n largeDiffOptInPaths: Set<string>;\n diffViewMode: DiffViewMode;\n startIndex: number;\n endIndex: number;\n}\n\ninterface SelectedExpansionCommand {\n action: string;\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\ninterface ResolveSelectedScrollStateInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n expansionCommand: SelectedExpansionCommand | null;\n completedScrollCommandId: number | null;\n}\n\nexport interface RenderedDiffItem {\n element: HTMLElement;\n index: number;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst PINNED_DIFF_LOOKBEHIND_COUNT = 24;\n\nexport const estimateDiffRangeHeight = (input: EstimateDiffRangeHeightInput) => {\n const { diffs, collapsedPaths, largeDiffOptInPaths, diffViewMode, startIndex, endIndex } = input;\n let offset = 0;\n for (let diffIndex = startIndex; diffIndex < endIndex; diffIndex += 1) {\n const diff = diffs[diffIndex];\n const path = getDiffPath(diff);\n offset += estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n }\n return offset;\n};\n\nexport const resolveSelectedScrollState = (input: ResolveSelectedScrollStateInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, expansionCommand, completedScrollCommandId } = input;\n let selectedScrollPath = selectedDiffPath;\n let selectedScrollSourceKey = selectedDiffPath ? `selected:${selectedDiffPath}` : null;\n const selectedScrollCommandId = expansionCommand?.action === \"expand-selected\" ? expansionCommand.id : null;\n const hasCompletedSelectedScroll =\n selectedScrollCommandId !== null && completedScrollCommandId === selectedScrollCommandId;\n\n if (expansionCommand?.action === \"expand-selected\" && expansionCommand.path) {\n selectedScrollPath = expansionCommand.path;\n selectedScrollSourceKey = `command:${expansionCommand.id}:${expansionCommand.path}`;\n }\n\n let selectedScrollKey = selectedScrollSourceKey;\n if (selectedScrollPath && selectedScrollSourceKey) {\n const selectedScrollExpansionState = collapsedPaths.has(selectedScrollPath) ? \"collapsed\" : \"expanded\";\n selectedScrollKey = `${selectedScrollSourceKey}:${selectedScrollExpansionState}`;\n }\n\n const selectedScrollIndex = selectedScrollPath\n ? diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath)\n : -1;\n const shouldPinSelectedScrollIndex =\n selectedScrollIndex >= 0 &&\n expansionCommand?.action === \"expand-selected\" &&\n expansionCommand.direction === \"up\" &&\n !hasCompletedSelectedScroll;\n\n return {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n };\n};\n\nexport const includePinnedDiffIndexes = (input: {\n indexes: number[];\n selectedScrollIndex: number;\n shouldPinSelectedScrollIndex: boolean;\n}) => {\n const { indexes, selectedScrollIndex, shouldPinSelectedScrollIndex } = input;\n if (!shouldPinSelectedScrollIndex || indexes.includes(selectedScrollIndex)) return indexes;\n\n const pinnedStartIndex = Math.max(0, selectedScrollIndex - PINNED_DIFF_LOOKBEHIND_COUNT);\n const pinnedIndexes = Array.from(\n { length: selectedScrollIndex - pinnedStartIndex + 1 },\n (_, index) => pinnedStartIndex + index,\n );\n\n return Array.from(new Set([...indexes, ...pinnedIndexes])).sort((a, b) => a - b);\n};\n\nexport const getRenderedDiffItems = (scrollElement: HTMLElement | null) =>\n Array.from(scrollElement?.querySelectorAll<HTMLElement>(\"[data-index]\") ?? [])\n .filter((element) => element.querySelector('[data-testid=\"diff-card\"]'))\n .map((element) => ({ element, index: Number(element.dataset.index) }))\n .filter((item): item is RenderedDiffItem => Number.isInteger(item.index))\n .sort((a, b) => a.index - b.index);\n\nexport const getElementScrollOffset = (input: { element: HTMLElement; scrollElement: HTMLElement | null }) => {\n const { element, scrollElement } = input;\n if (!scrollElement) return element.offsetTop;\n\n const elementRect = element.getBoundingClientRect();\n const scrollRect = scrollElement.getBoundingClientRect();\n return scrollElement.scrollTop + elementRect.top - scrollRect.top;\n};\n","import { useLayoutEffect, useState } from \"react\";\nimport type { Diff } from \"./diff-card\";\nimport type { DiffExpansionCommand } from \"./diff-drawer\";\nimport {\n estimateDiffRangeHeight,\n getElementScrollOffset,\n getRenderedDiffItems,\n resolveSelectedScrollState,\n} from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\n\ninterface UseSelectedDiffScrollInput {\n diffs: Diff[];\n selectedDiffPath: string | null;\n collapsedPaths: Set<string>;\n largeDiffOptInPaths: Set<string>;\n expansionCommand: DiffExpansionCommand | null;\n diffViewMode: DiffViewMode;\n scrollRef: { current: HTMLDivElement | null };\n}\n\nconst SELECTED_ALIGNMENT_THRESHOLD = 72;\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nexport const useSelectedDiffScroll = (input: UseSelectedDiffScrollInput) => {\n const { diffs, selectedDiffPath, collapsedPaths, largeDiffOptInPaths, expansionCommand, diffViewMode, scrollRef } =\n input;\n const [completedScrollCommandId, setCompletedScrollCommandId] = useState<number | null>(null);\n const {\n selectedScrollPath,\n selectedScrollKey,\n selectedScrollCommandId,\n selectedScrollIndex,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n } = resolveSelectedScrollState({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n expansionCommand,\n completedScrollCommandId,\n });\n\n useLayoutEffect(() => {\n if (!selectedScrollPath || !selectedScrollKey) return;\n if (hasCompletedSelectedScroll) return;\n\n const index = diffs.findIndex((diff) => getDiffPath(diff) === selectedScrollPath);\n if (index < 0) return;\n\n const frameIds: number[] = [];\n let cancelledByUserScroll = false;\n const scrollElement = scrollRef.current;\n const cancelSelectedScroll = () => {\n cancelledByUserScroll = true;\n if (selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n }\n };\n const estimateRangeHeight = (startIndex: number, endIndex: number) => {\n return estimateDiffRangeHeight({\n diffs,\n collapsedPaths,\n largeDiffOptInPaths,\n diffViewMode,\n startIndex,\n endIndex,\n });\n };\n const scrollToOffset = (offset: number) => {\n if (cancelledByUserScroll) return;\n scrollRef.current?.scrollTo({ top: Math.max(0, offset), behavior: \"auto\" });\n };\n const scrollToSelectedDiff = () => scrollToOffset(estimateRangeHeight(0, index));\n const alignRenderedSelectedDiff = () => {\n const renderedItems = getRenderedDiffItems(scrollRef.current);\n const selectedItem = renderedItems.find((item) => item.index === index);\n if (selectedItem) {\n const selectedOffset = getElementScrollOffset({ element: selectedItem.element, scrollElement });\n const currentOffset = selectedOffset - (scrollElement?.scrollTop ?? 0);\n if (Math.abs(currentOffset) >= SELECTED_ALIGNMENT_THRESHOLD) {\n scrollToOffset(selectedOffset);\n }\n return Math.abs(currentOffset) < SELECTED_ALIGNMENT_THRESHOLD;\n }\n\n const firstItem = renderedItems[0];\n const lastItem = renderedItems.at(-1);\n if (firstItem && firstItem.index > index) {\n scrollToOffset(\n getElementScrollOffset({ element: firstItem.element, scrollElement }) -\n estimateRangeHeight(index, firstItem.index),\n );\n return false;\n }\n if (lastItem && lastItem.index < index) {\n scrollToOffset(\n getElementScrollOffset({ element: lastItem.element, scrollElement }) +\n estimateRangeHeight(lastItem.index, index),\n );\n return false;\n }\n if (!firstItem || !lastItem) {\n scrollToSelectedDiff();\n }\n return false;\n };\n let alignmentAttempts = 0;\n const reconcileSelectedDiff = () => {\n if (cancelledByUserScroll) return;\n const isAligned = alignRenderedSelectedDiff();\n alignmentAttempts += 1;\n const hasSettled = alignmentAttempts >= 3;\n if (isAligned && hasSettled && !collapsedPaths.has(selectedScrollPath) && selectedScrollCommandId !== null) {\n setCompletedScrollCommandId(selectedScrollCommandId);\n return;\n }\n if ((!isAligned || !hasSettled) && alignmentAttempts < 10) {\n frameIds.push(requestAnimationFrame(reconcileSelectedDiff));\n }\n };\n\n scrollElement?.addEventListener(\"wheel\", cancelSelectedScroll, { passive: true });\n scrollElement?.addEventListener(\"touchmove\", cancelSelectedScroll, { passive: true });\n const isInitiallyAligned = alignRenderedSelectedDiff();\n if (!shouldPinSelectedScrollIndex && !isInitiallyAligned) {\n scrollToSelectedDiff();\n }\n\n frameIds.push(requestAnimationFrame(reconcileSelectedDiff));\n\n return () => {\n scrollElement?.removeEventListener(\"wheel\", cancelSelectedScroll);\n scrollElement?.removeEventListener(\"touchmove\", cancelSelectedScroll);\n for (const frameId of frameIds) {\n cancelAnimationFrame(frameId);\n }\n };\n }, [\n selectedScrollKey,\n selectedScrollPath,\n selectedScrollCommandId,\n shouldPinSelectedScrollIndex,\n hasCompletedSelectedScroll,\n diffs,\n collapsedPaths,\n largeDiffOptInPaths,\n diffViewMode,\n scrollRef,\n ]);\n\n return { selectedScrollIndex, shouldPinSelectedScrollIndex };\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { defaultRangeExtractor, useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { type Diff, DiffCard } from \"./diff-card\";\nimport { DiffDrawerEmptyState } from \"./diff-drawer-empty-state\";\nimport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nimport { includePinnedDiffIndexes } from \"./diff-drawer-scroll\";\nimport type { DiffViewMode } from \"./types\";\nimport { useSelectedDiffScroll } from \"./use-selected-diff-scroll\";\n\ninterface DiffDrawerProps {\n diffs: Diff[];\n selectedDiffPath?: string | null;\n onLoadDiff?: (path: string) => Promise<void>;\n onSelectDiffPath?: (path: string) => void;\n onExpansionStateChange?: (state: DiffDrawerExpansionState) => void;\n expansionCommand?: DiffExpansionCommand | null;\n diffViewMode?: DiffViewMode;\n}\n\nexport interface DiffExpansionCommand {\n action: \"expand\" | \"collapse\" | \"expand-selected\";\n id: number;\n path?: string;\n direction?: \"up\" | \"down\";\n}\n\nexport interface DiffDrawerExpansionState {\n allExpanded: boolean;\n allCollapsed: boolean;\n}\n\nexport { estimateDiffCardHeight } from \"./diff-drawer-height\";\nexport type { Diff };\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\n\nconst INITIAL_EXPANDED_DIFF_COUNT = 10;\nconst INITIAL_COLLAPSED_LINE_THRESHOLD = 100;\n\nexport const buildInitialCollapsedPaths = (diffs: Diff[]) => {\n if (diffs.length <= INITIAL_EXPANDED_DIFF_COUNT) return new Set<string>();\n\n return new Set(\n diffs\n .filter((diff, index) => {\n const lineCount = (diff.additions ?? 0) + (diff.deletions ?? 0);\n return index >= INITIAL_EXPANDED_DIFF_COUNT || lineCount > INITIAL_COLLAPSED_LINE_THRESHOLD;\n })\n .map((diff) => getDiffPath(diff)),\n );\n};\n\nexport const buildAllCollapsedPaths = (diffs: Diff[]) => new Set(diffs.map((diff) => getDiffPath(diff)));\n\nexport const toggleCollapsedPath = (collapsedPaths: Set<string>, path: string) => {\n const next = new Set(collapsedPaths);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n};\n\nexport const resolveCollapsedPathsForSelectedDiff = (\n diffs: Diff[],\n collapsedPaths: Set<string>,\n selectedDiffPath: string | null,\n) => {\n if (!selectedDiffPath) return collapsedPaths;\n if (!collapsedPaths.has(selectedDiffPath)) return collapsedPaths;\n if (!diffs.some((diff) => getDiffPath(diff) === selectedDiffPath)) return collapsedPaths;\n\n const next = new Set(collapsedPaths);\n next.delete(selectedDiffPath);\n return next;\n};\n\nexport function DiffDrawer(props: DiffDrawerProps) {\n const {\n diffs,\n selectedDiffPath = null,\n onLoadDiff,\n onSelectDiffPath,\n onExpansionStateChange,\n expansionCommand = null,\n diffViewMode = \"unified\",\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const reportedExpansionStateRef = useRef<DiffDrawerExpansionState | null>(null);\n const [collapsedPaths, setCollapsedPaths] = useState<Set<string>>(() => buildInitialCollapsedPaths(diffs));\n const [largeDiffOptInPaths, setLargeDiffOptInPaths] = useState<Set<string>>(() => new Set());\n const { selectedScrollIndex, shouldPinSelectedScrollIndex } = useSelectedDiffScroll({\n diffs,\n selectedDiffPath,\n collapsedPaths,\n largeDiffOptInPaths,\n expansionCommand,\n diffViewMode,\n scrollRef,\n });\n\n const virtualizer = useVirtualizer({\n count: diffs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => {\n const diff = diffs[index];\n const path = getDiffPath(diff);\n return estimateDiffCardHeight({\n diff,\n isCollapsed: collapsedPaths.has(path),\n hasOptedIntoLargeDiff: largeDiffOptInPaths.has(path),\n diffViewMode,\n });\n },\n getItemKey: (index) => getDiffPath(diffs[index]),\n overscan: 3,\n rangeExtractor: (range) => {\n const indexes = defaultRangeExtractor(range);\n return includePinnedDiffIndexes({ indexes, selectedScrollIndex, shouldPinSelectedScrollIndex });\n },\n });\n virtualizer.shouldAdjustScrollPositionOnItemSizeChange = (_item, _delta, instance) => !instance.isScrolling;\n\n useLayoutEffect(() => {\n if (!selectedDiffPath) return;\n\n setCollapsedPaths((prev) => resolveCollapsedPathsForSelectedDiff(diffs, prev, selectedDiffPath));\n }, [diffs, selectedDiffPath]);\n\n useLayoutEffect(() => {\n if (!expansionCommand) return;\n\n if (expansionCommand.action === \"expand-selected\") {\n setCollapsedPaths((prev) =>\n expansionCommand.path ? resolveCollapsedPathsForSelectedDiff(diffs, prev, expansionCommand.path) : prev,\n );\n return;\n }\n\n setCollapsedPaths(expansionCommand.action === \"collapse\" ? buildAllCollapsedPaths(diffs) : new Set());\n }, [diffs, expansionCommand]);\n\n useEffect(() => {\n const expansionState = {\n allExpanded: collapsedPaths.size === 0,\n allCollapsed: diffs.length > 0 && diffs.every((diff) => collapsedPaths.has(getDiffPath(diff))),\n };\n const reportedExpansionState = reportedExpansionStateRef.current;\n if (\n reportedExpansionState?.allExpanded === expansionState.allExpanded &&\n reportedExpansionState.allCollapsed === expansionState.allCollapsed\n ) {\n return;\n }\n\n reportedExpansionStateRef.current = expansionState;\n onExpansionStateChange?.(expansionState);\n }, [collapsedPaths, diffs, onExpansionStateChange]);\n\n if (diffs.length === 0) return <DiffDrawerEmptyState />;\n\n const toggleExpanded = (path: string) => {\n setCollapsedPaths((prev) => toggleCollapsedPath(prev, path));\n };\n\n const showFullDiff = (path: string) => {\n setLargeDiffOptInPaths((prev) => {\n const next = new Set(prev);\n next.add(path);\n return next;\n });\n };\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\">\n <Box position=\"relative\" flex=\"1\" minH=\"0\" bg=\"bg\">\n <ScrollArea\n position=\"absolute\"\n inset=\"0\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n contentProps={{ p: \"xs\" }}\n >\n <Box position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualItems.map((virtualItem) => {\n const diff = diffs[virtualItem.index];\n const path = getDiffPath(diff);\n\n return (\n <Box\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n pb=\"xs\"\n style={{ top: `${virtualItem.start}px` }}\n >\n <DiffCard\n key={path}\n diff={diff}\n isSelected={selectedDiffPath === path}\n isExpanded={!collapsedPaths.has(path)}\n onToggleExpanded={() => toggleExpanded(path)}\n onSelect={() => onSelectDiffPath?.(path)}\n onLoadDiff={onLoadDiff}\n hasOptedIntoLargeDiff={largeDiffOptInPaths.has(path)}\n onShowFullDiff={() => showFullDiff(path)}\n diffViewMode={diffViewMode}\n />\n </Box>\n );\n })}\n </Box>\n </ScrollArea>\n </Box>\n </Stack>\n );\n}\n","import { Box } from \"@chakra-ui/react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from \"react\";\n\nexport type ResizableSplitSide = \"left\" | \"right\";\n\nconst RESIZE_SEPARATOR_HOVER_STYLE = { _before: { bg: \"border.emphasized\" } };\nconst RESIZE_HANDLE_WIDTH = \"12px\";\n\ninterface ResizeHandleProps {\n bounds: { minSize: number; maxSize: number };\n contentPanelId: string;\n resizablePanelId: string;\n resizeLabel: string;\n resolvedPanelWidth: number;\n showResizeSeparator: boolean;\n onResizeKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n onResizeStart: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport const ResizeHandle = (props: ResizeHandleProps) => {\n const {\n bounds,\n contentPanelId,\n resizablePanelId,\n resizeLabel,\n resolvedPanelWidth,\n showResizeSeparator,\n onResizeKeyDown,\n onResizeStart,\n } = props;\n return (\n <Box\n role=\"separator\"\n aria-label={resizeLabel}\n aria-orientation=\"vertical\"\n aria-controls={`${resizablePanelId} ${contentPanelId}`}\n aria-valuemin={0}\n aria-valuemax={Math.round(bounds.maxSize)}\n aria-valuenow={Math.round(resolvedPanelWidth)}\n tabIndex={0}\n position=\"relative\"\n zIndex=\"1\"\n flex={`0 0 ${RESIZE_HANDLE_WIDTH}`}\n w={RESIZE_HANDLE_WIDTH}\n mx=\"-6px\"\n cursor=\"col-resize\"\n touchAction=\"none\"\n outline=\"none\"\n onPointerDown={onResizeStart}\n onKeyDown={onResizeKeyDown}\n _before={{\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n bottom: 0,\n insetInlineStart: \"50%\",\n w: \"1px\",\n bg: showResizeSeparator ? \"border.muted\" : \"transparent\",\n transform: \"translateX(-50%)\",\n }}\n _hover={showResizeSeparator ? RESIZE_SEPARATOR_HOVER_STYLE : undefined}\n _focusVisible={{\n _before: {\n bg: \"colorPalette.focusRing\",\n w: \"2px\",\n },\n }}\n />\n );\n};\n","import { Flex, type FlexProps } from \"@chakra-ui/react\";\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { type ResizableSplitSide, ResizeHandle } from \"./resizable-split-layout.handle\";\n\ninterface ResizableSplitLayoutProps extends Omit<FlexProps, \"children\" | \"onResize\"> {\n resizablePanel: ReactNode;\n contentPanel: ReactNode;\n resizableSide?: ResizableSplitSide;\n defaultSizePx?: number;\n minSizePx?: number;\n maxSizePx?: number;\n contentMinSizePx?: number;\n collapsed?: boolean;\n collapsible?: boolean;\n resizeLabel?: string;\n showResizeSeparator?: boolean;\n onSizeChange?: (width: number) => void;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst FALLBACK_ROOT_WIDTH = 1200;\nconst KEYBOARD_RESIZE_STEP = 24;\nconst MIN_COLLAPSE_THRESHOLD_PX = 72;\nconst MAX_COLLAPSE_THRESHOLD_PX = 160;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveRootWidth = (rootWidth: number) => (rootWidth > 0 ? rootWidth : FALLBACK_ROOT_WIDTH);\n\nconst resolveCollapseThreshold = (minSizePx: number) =>\n clamp(minSizePx / 2, MIN_COLLAPSE_THRESHOLD_PX, MAX_COLLAPSE_THRESHOLD_PX);\n\nconst resolveResizableBoundsPx = (input: {\n rootWidth: number;\n minSizePx: number;\n maxSizePx?: number;\n contentMinSizePx: number;\n}) => {\n const rootWidth = resolveRootWidth(input.rootWidth);\n const maxFromContent = Math.max(0, rootWidth - input.contentMinSizePx);\n const configuredMax = input.maxSizePx ?? maxFromContent;\n const maxSize = Math.max(0, Math.min(configuredMax, maxFromContent));\n const minSize = Math.min(input.minSizePx, maxSize);\n\n return { minSize, maxSize };\n};\n\nconst getElementWidth = (element: HTMLDivElement | null) => element?.getBoundingClientRect().width ?? 0;\n\nconst applyPanelWidthToElement = (panel: HTMLDivElement | null, width: number) => {\n if (!panel) return;\n\n panel.style.width = `${width}px`;\n panel.style.flexBasis = `${width}px`;\n panel.style.flexGrow = \"0\";\n panel.style.flexShrink = \"0\";\n panel.style.display = width > 0 ? \"flex\" : \"none\";\n};\n\nconst clearPanelInlineStyles = (panel: HTMLDivElement | null) => {\n if (!panel) return;\n\n panel.style.width = \"\";\n panel.style.flexBasis = \"\";\n panel.style.flexGrow = \"\";\n panel.style.flexShrink = \"\";\n panel.style.display = \"\";\n};\n\nexport const ResizableSplitLayout = (props: ResizableSplitLayoutProps) => {\n const {\n resizablePanel,\n contentPanel,\n resizableSide = \"left\",\n defaultSizePx = 240,\n minSizePx = 200,\n maxSizePx,\n contentMinSizePx = 0,\n collapsed: controlledCollapsed,\n collapsible = true,\n resizeLabel = \"Resize panel\",\n showResizeSeparator = true,\n onSizeChange,\n onCollapsedChange,\n ...rest\n } = props;\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const resizablePanelRef = useRef<HTMLDivElement>(null);\n const contentPanelRef = useRef<HTMLDivElement>(null);\n const cleanupDragRef = useRef<() => void>(() => undefined);\n const lastWidthRef = useRef(defaultSizePx);\n const [panelWidth, setPanelWidth] = useState(defaultSizePx);\n const [rootWidth, setRootWidth] = useState(0);\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const collapseThresholdPx = resolveCollapseThreshold(minSizePx);\n const resolvedPanelWidth = collapsed ? 0 : clamp(panelWidth, bounds.minSize, bounds.maxSize);\n const contentPanelId = `${id}-content`;\n const resizablePanelId = `${id}-resizable`;\n\n useEffect(() => {\n const element = rootRef.current;\n if (!element) return;\n\n const updateRootWidth = () => {\n setRootWidth(element.getBoundingClientRect().width);\n };\n\n updateRootWidth();\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateRootWidth);\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n useEffect(() => {\n lastWidthRef.current = defaultSizePx;\n setPanelWidth(defaultSizePx);\n }, [defaultSizePx]);\n\n useEffect(() => () => cleanupDragRef.current(), []);\n\n const applyPanelWidth = (width: number) => {\n applyPanelWidthToElement(resizablePanelRef.current, width);\n };\n\n useEffect(() => {\n // React may reuse the same DOM element across renders when this component swaps roles\n // (e.g., a wrapping ResizableSplitLayout disappears, leaving the inner one in its place).\n // Clear any inline styles on the content panel that leaked from a prior render where\n // the same DOM element was the resizable panel; otherwise stale `flex: 0 0 Xpx` pins\n // the content's width.\n clearPanelInlineStyles(contentPanelRef.current);\n applyPanelWidthToElement(resizablePanelRef.current, resolvedPanelWidth);\n }, [resolvedPanelWidth]);\n\n const commitPanelWidth = (width: number) => {\n const rootWidth = getElementWidth(rootRef.current);\n const nextBounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const nextWidth = clamp(width, nextBounds.minSize, nextBounds.maxSize);\n\n lastWidthRef.current = nextWidth;\n setPanelWidth(nextWidth);\n applyPanelWidth(nextWidth);\n onSizeChange?.(nextWidth);\n };\n\n const setCollapsed = (nextCollapsed: boolean) => {\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(nextCollapsed);\n }\n\n onCollapsedChange?.(nextCollapsed);\n };\n\n const handleResizeStart = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0 || (collapsed && !collapsible)) return;\n\n event.preventDefault();\n cleanupDragRef.current();\n\n const resizeHandle = event.currentTarget;\n const rootWidth = getElementWidth(rootRef.current);\n const bounds = resolveResizableBoundsPx({ rootWidth, minSizePx, maxSizePx, contentMinSizePx });\n const startX = event.clientX;\n const startWidth = collapsed ? 0 : getElementWidth(resizablePanelRef.current) || lastWidthRef.current;\n const direction = resizableSide === \"left\" ? 1 : -1;\n const previousCursor = document.body.style.cursor;\n const previousUserSelect = document.body.style.userSelect;\n let nextWidth = startWidth === 0 ? 0 : clamp(startWidth, bounds.minSize, bounds.maxSize);\n let nextCollapsed = collapsed;\n let animationFrame = 0;\n\n const setDraggingPanelState = (value: string) => {\n if (resizablePanelRef.current) resizablePanelRef.current.style.pointerEvents = value;\n if (contentPanelRef.current) contentPanelRef.current.style.pointerEvents = value;\n };\n\n const schedulePanelWidth = () => {\n if (animationFrame) return;\n\n animationFrame = window.requestAnimationFrame(() => {\n animationFrame = 0;\n applyPanelWidth(nextWidth);\n });\n };\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const rawWidth = startWidth + (moveEvent.clientX - startX) * direction;\n nextCollapsed = collapsible && rawWidth <= collapseThresholdPx;\n nextWidth = nextCollapsed ? 0 : clamp(rawWidth, bounds.minSize, bounds.maxSize);\n if (!nextCollapsed) lastWidthRef.current = nextWidth;\n schedulePanelWidth();\n };\n\n const cleanup = () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", cleanup);\n window.removeEventListener(\"pointercancel\", cleanup);\n window.removeEventListener(\"blur\", cleanup);\n document.body.style.cursor = previousCursor;\n document.body.style.userSelect = previousUserSelect;\n if (resizeHandle.hasPointerCapture(event.pointerId)) resizeHandle.releasePointerCapture(event.pointerId);\n setDraggingPanelState(\"\");\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n animationFrame = 0;\n }\n cleanupDragRef.current = () => undefined;\n if (nextCollapsed) {\n applyPanelWidth(0);\n setCollapsed(true);\n } else {\n setCollapsed(false);\n commitPanelWidth(nextWidth);\n }\n };\n\n cleanupDragRef.current = cleanup;\n resizeHandle.setPointerCapture(event.pointerId);\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n setDraggingPanelState(\"none\");\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", cleanup, { once: true });\n window.addEventListener(\"pointercancel\", cleanup, { once: true });\n window.addEventListener(\"blur\", cleanup, { once: true });\n };\n\n const handleResizeKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const direction = resizableSide === \"left\" ? 1 : -1;\n const width = lastWidthRef.current;\n\n if (collapsed && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\" || event.key === \"End\")) {\n event.preventDefault();\n setCollapsed(false);\n commitPanelWidth(width);\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n commitPanelWidth(width - KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n commitPanelWidth(width + KEYBOARD_RESIZE_STEP * direction);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n if (collapsible) setCollapsed(true);\n else commitPanelWidth(bounds.minSize);\n } else if (event.key === \"End\") {\n event.preventDefault();\n commitPanelWidth(bounds.maxSize);\n }\n };\n\n const resizablePanelNode = (\n <Flex\n id={resizablePanelId}\n ref={resizablePanelRef}\n display={collapsed ? \"none\" : \"flex\"}\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex={`0 0 ${resolvedPanelWidth}px`}\n w={`${resolvedPanelWidth}px`}\n aria-hidden={collapsed ? true : undefined}\n >\n {resizablePanel}\n </Flex>\n );\n const contentPanelNode = (\n <Flex\n id={contentPanelId}\n ref={contentPanelRef}\n display=\"flex\"\n h=\"full\"\n minW=\"0\"\n minH=\"0\"\n overflow=\"hidden\"\n flex=\"1\"\n >\n {contentPanel}\n </Flex>\n );\n const resizeTrigger = collapsed ? null : (\n <ResizeHandle\n bounds={bounds}\n contentPanelId={contentPanelId}\n resizablePanelId={resizablePanelId}\n resizeLabel={resizeLabel}\n resolvedPanelWidth={resolvedPanelWidth}\n showResizeSeparator={showResizeSeparator}\n onResizeKeyDown={handleResizeKeyDown}\n onResizeStart={handleResizeStart}\n />\n );\n\n return (\n <Flex ref={rootRef} direction=\"row\" h=\"full\" w=\"full\" overflow=\"hidden\" {...rest}>\n {resizableSide === \"left\" ? (\n <>\n {resizablePanelNode}\n {resizeTrigger}\n {contentPanelNode}\n </>\n ) : (\n <>\n {contentPanelNode}\n {resizeTrigger}\n {resizablePanelNode}\n </>\n )}\n </Flex>\n );\n};\n","import type { ChangedFilesViewMode, ChangedFileTreeNode } from \"./types\";\n\nconst normalizeChangedFilePath = (path: string) =>\n path\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter(Boolean)\n .join(\"/\");\n\nconst sortNodes = (nodes: ChangedFileTreeNode[]) => {\n nodes.sort((left, right) => {\n if (left.type !== right.type) return left.type === \"folder\" ? -1 : 1;\n return left.name.localeCompare(right.name);\n });\n\n nodes.forEach((node) => {\n if (node.children) sortNodes(node.children);\n });\n\n return nodes;\n};\n\nconst dedupePaths = (paths: string[]) => Array.from(new Set(paths.map(normalizeChangedFilePath).filter(Boolean)));\n\nconst buildFlatTree = (paths: string[]) =>\n dedupePaths(paths)\n .map((path) => ({ id: `file:${path}`, name: path, type: \"file\" }) satisfies ChangedFileTreeNode)\n .sort((left, right) => left.name.localeCompare(right.name));\n\nexport const buildChangedFilesTree = (paths: string[], mode: ChangedFilesViewMode): ChangedFileTreeNode[] => {\n if (mode === \"flat\") return buildFlatTree(paths);\n\n const treeById = new Map<string, ChangedFileTreeNode>();\n const rootNodes: ChangedFileTreeNode[] = [];\n\n dedupePaths(paths).forEach((path) => {\n const segments = path.split(\"/\");\n let parentPath = \"\";\n let parentNode: ChangedFileTreeNode | null = null;\n\n segments.forEach((segment, index) => {\n const currentPath = parentPath ? `${parentPath}/${segment}` : segment;\n const isFile = index === segments.length - 1;\n const nodeId = `${isFile ? \"file\" : \"folder\"}:${currentPath}`;\n const existingNode = treeById.get(nodeId);\n\n if (existingNode) {\n parentNode = existingNode;\n parentPath = currentPath;\n return;\n }\n\n const nextNode: ChangedFileTreeNode = {\n id: nodeId,\n name: segment,\n type: isFile ? \"file\" : \"folder\",\n ...(isFile ? {} : { children: [] }),\n };\n\n treeById.set(nodeId, nextNode);\n\n if (!parentNode) rootNodes.push(nextNode);\n else parentNode.children?.push(nextNode);\n\n parentNode = nextNode;\n parentPath = currentPath;\n });\n });\n\n return sortNodes(rootNodes);\n};\n\nexport const collectExpandedFolderIds = (nodes: ChangedFileTreeNode[]) => {\n const folderIds: string[] = [];\n\n const visit = (items: ChangedFileTreeNode[]) => {\n items.forEach((item) => {\n if (item.type !== \"folder\") return;\n folderIds.push(item.id);\n visit(item.children ?? []);\n });\n };\n\n visit(nodes);\n return folderIds;\n};\n\nconst collectNestedFileOrder = (nodes: ChangedFileTreeNode[]) => {\n const orderedPaths: string[] = [];\n\n const visit = (treeNodes: ChangedFileTreeNode[]) => {\n treeNodes.forEach((node) => {\n if (node.type === \"file\") {\n orderedPaths.push(node.id.replace(/^file:/, \"\"));\n return;\n }\n\n visit(node.children ?? []);\n });\n };\n\n visit(nodes);\n return orderedPaths;\n};\n\nexport const sortPathsByViewMode = (paths: string[], mode: ChangedFilesViewMode) => {\n if (mode === \"flat\") return [...paths].sort((left, right) => left.localeCompare(right));\n return collectNestedFileOrder(buildChangedFilesTree(paths, \"nested\"));\n};\n","import { create } from \"zustand\";\nimport type { ChangedFilesViewMode, DiffViewMode } from \"./types\";\n\ninterface DiffViewerState {\n isTreePanelOpen: boolean;\n viewMode: ChangedFilesViewMode;\n diffViewMode: DiffViewMode;\n searchQuery: string;\n selectedPath: string | null;\n expandedFolderIds: Set<string>;\n setTreePanelOpen: (open: boolean) => void;\n toggleTreePanel: () => void;\n setViewMode: (viewMode: ChangedFilesViewMode) => void;\n setDiffViewMode: (diffViewMode: DiffViewMode) => void;\n setSearchQuery: (searchQuery: string) => void;\n setSelectedPath: (selectedPath: string | null) => void;\n setExpandedFolderIds: (folderIds: string[]) => void;\n toggleFolder: (folderId: string) => void;\n expandAll: (folderIds: string[]) => void;\n collapseAll: () => void;\n}\n\nexport const useDiffViewerStore = create<DiffViewerState>((set) => ({\n isTreePanelOpen: true,\n viewMode: \"nested\",\n diffViewMode: \"unified\",\n searchQuery: \"\",\n selectedPath: null,\n expandedFolderIds: new Set(),\n setTreePanelOpen: (isTreePanelOpen) => set({ isTreePanelOpen }),\n toggleTreePanel: () => set((state) => ({ isTreePanelOpen: !state.isTreePanelOpen })),\n setViewMode: (viewMode) => set({ viewMode }),\n setDiffViewMode: (diffViewMode) => set({ diffViewMode }),\n setSearchQuery: (searchQuery) => set({ searchQuery }),\n setSelectedPath: (selectedPath) => set({ selectedPath }),\n setExpandedFolderIds: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n toggleFolder: (folderId) =>\n set((state) => {\n const expandedFolderIds = new Set(state.expandedFolderIds);\n if (expandedFolderIds.has(folderId)) expandedFolderIds.delete(folderId);\n else expandedFolderIds.add(folderId);\n return { expandedFolderIds };\n }),\n expandAll: (folderIds) => set({ expandedFolderIds: new Set(folderIds) }),\n collapseAll: () => set({ expandedFolderIds: new Set() }),\n}));\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nexport const isInList = (id: string, values: string[]) => values.includes(id);\n\nexport const isActiveNode = (id: string, activeNodeId?: string | string[] | null) =>\n Array.isArray(activeNodeId) ? activeNodeId.includes(id) : activeNodeId === id;\n\nexport const isNavigableNode = (node: TreeListNode) => node.isNavigable || node.navigationIntent !== undefined;\n\nexport const getNodeChildren = (node: TreeListNode) => (node.children as TreeListNode[] | undefined) ?? [];\n\nexport const hasExpandableChildren = (node: TreeListNode) =>\n getNodeChildren(node).length > 0 || node.isContainer === true;\n\nexport type VirtualRow =\n | {\n kind: \"section-header\";\n key: string;\n sectionId: string;\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n }\n | { kind: \"node\"; key: string; sectionId: string; node: TreeListNode; level: number; parentNodeId?: string }\n | { kind: \"section-empty\"; key: string; sectionId: string; emptyState: TreeListSection[\"emptyState\"] };\n\nexport type VirtualNodeRow = Extract<VirtualRow, { kind: \"node\" }>;\nexport type VirtualSectionHeaderRow = Extract<VirtualRow, { kind: \"section-header\" }>;\n\n/** Rows the keyboard can land on: enabled nodes and collapsible section headers. */\nexport type FocusableRow = VirtualNodeRow | VirtualSectionHeaderRow;\n\nconst appendVisibleNodeRows = (input: {\n rows: VirtualRow[];\n sectionId: string;\n nodes: TreeListNode[];\n expandedNodeIds: string[];\n level: number;\n parentNodeId?: string;\n}) => {\n const { rows, sectionId, nodes, expandedNodeIds, level, parentNodeId } = input;\n\n for (const node of nodes) {\n rows.push({ kind: \"node\", key: `${sectionId}:${node.id}`, sectionId, node, level, parentNodeId });\n\n const children = getNodeChildren(node);\n if (children.length === 0 || !isInList(node.id, expandedNodeIds)) continue;\n\n appendVisibleNodeRows({\n rows,\n sectionId,\n nodes: children,\n expandedNodeIds,\n level: level + 1,\n parentNodeId: node.id,\n });\n }\n};\n\nexport const buildVirtualRows = (\n sections: TreeListSection[],\n expandedSectionIds: string[],\n expandedNodeIds: string[],\n) => {\n const rows: VirtualRow[] = [];\n for (const section of sections) {\n const collapsible = section.collapsible !== false && section.label !== undefined;\n const expanded = collapsible ? isInList(section.id, expandedSectionIds) : true;\n if (section.label) {\n rows.push({\n kind: \"section-header\",\n key: `header:${section.id}`,\n sectionId: section.id,\n section,\n collapsible,\n expanded,\n });\n }\n if (!expanded) continue;\n if (section.nodes.length === 0) {\n if (section.emptyState) {\n rows.push({\n kind: \"section-empty\",\n key: `empty:${section.id}`,\n sectionId: section.id,\n emptyState: section.emptyState,\n });\n }\n continue;\n }\n appendVisibleNodeRows({ rows, sectionId: section.id, nodes: section.nodes, expandedNodeIds, level: 0 });\n }\n return rows;\n};\n\n/** Stable id used to track keyboard focus across renders. */\nexport const getRowFocusId = (row: FocusableRow) => (row.kind === \"node\" ? row.node.id : row.key);\n\nexport const isFocusableRow = (row: VirtualRow): row is FocusableRow => {\n if (row.kind === \"node\") return row.node.disabled !== true;\n return row.kind === \"section-header\" && row.collapsible;\n};\n\nexport const getFocusableRows = (rows: VirtualRow[]) => rows.filter(isFocusableRow);\n\nexport const resolveTreeListFocusRowId = (\n focusedRowId: string | undefined,\n activeNodeId: string | string[] | null | undefined,\n rows: VirtualRow[],\n) => {\n const focusableRows = getFocusableRows(rows);\n const focusableIds = new Set(focusableRows.map(getRowFocusId));\n if (focusedRowId && focusableIds.has(focusedRowId)) return focusedRowId;\n\n const activeIds = Array.isArray(activeNodeId) ? activeNodeId : activeNodeId ? [activeNodeId] : [];\n const activeId = activeIds.find((id) => focusableIds.has(id));\n if (activeId) return activeId;\n\n const firstRow = focusableRows[0];\n return firstRow ? getRowFocusId(firstRow) : undefined;\n};\n\nconst resolveSectionHeaderNavigation = (input: {\n row: VirtualSectionHeaderRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, key } = input;\n\n if (key === \"Enter\" || key === \" \") return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n if (key === \"ArrowRight\") {\n if (!row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.sectionId === row.sectionId) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\" && row.expanded) return { type: \"toggle-section\" as const, sectionId: row.sectionId };\n\n return null;\n};\n\nconst resolveNodeNavigation = (input: {\n row: VirtualNodeRow;\n focusableRows: FocusableRow[];\n currentIndex: number;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { row, focusableRows, currentIndex, expandedNodeIds, key } = input;\n const expanded = isInList(row.node.id, expandedNodeIds);\n const expandable = hasExpandableChildren(row.node);\n\n if (key === \"ArrowRight\") {\n if (!expandable) return null;\n if (!expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n\n const nextRow = focusableRows[currentIndex + 1];\n if (nextRow?.kind === \"node\" && nextRow.parentNodeId === row.node.id) {\n return { type: \"focus\" as const, rowId: nextRow.node.id };\n }\n return null;\n }\n\n if (key === \"ArrowLeft\") {\n if (expandable && expanded) return { type: \"toggle-node\" as const, nodeId: row.node.id };\n if (row.parentNodeId) return { type: \"focus\" as const, rowId: row.parentNodeId };\n }\n\n return null;\n};\n\nexport const resolveTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n focusedRowId: string | undefined;\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n key: string;\n}) => {\n const { rows, focusedRowId, activeNodeId, expandedNodeIds, key } = input;\n const focusableRows = getFocusableRows(rows);\n if (focusableRows.length === 0) return null;\n\n const resolvedFocusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const currentIndex = Math.max(\n 0,\n focusableRows.findIndex((row) => getRowFocusId(row) === resolvedFocusRowId),\n );\n const currentRow = focusableRows[currentIndex];\n if (!currentRow) return null;\n\n const focusByIndex = (index: number) => {\n const clamped = Math.min(Math.max(index, 0), focusableRows.length - 1);\n return { type: \"focus\" as const, rowId: getRowFocusId(focusableRows[clamped]!) };\n };\n\n if (key === \"ArrowDown\") return focusByIndex(currentIndex + 1);\n if (key === \"ArrowUp\") return focusByIndex(currentIndex - 1);\n if (key === \"Home\") return focusByIndex(0);\n if (key === \"End\") return focusByIndex(focusableRows.length - 1);\n\n if (currentRow.kind === \"section-header\") {\n return resolveSectionHeaderNavigation({ row: currentRow, focusableRows, currentIndex, key });\n }\n\n return resolveNodeNavigation({ row: currentRow, focusableRows, currentIndex, expandedNodeIds, key });\n};\n","import type { StackProps } from \"@chakra-ui/react\";\nimport { Stack } from \"@chakra-ui/react\";\nimport type { FocusEventHandler } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode } from \"./tree-list.types\";\nimport { hasExpandableChildren, isActiveNode, isInList, isNavigableNode } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface TreeListNodeRowProps {\n sectionId: string;\n node: TreeListNode;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n tabIndex?: number;\n onFocus?: FocusEventHandler<HTMLElement>;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nexport const TreeListNodeRow = (props: TreeListNodeRowProps) => {\n const {\n sectionId,\n node,\n level,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent: LinkComponent,\n tabIndex,\n onFocus,\n onNavigate,\n onToggleNode,\n } = props;\n\n const hasChildren = hasExpandableChildren(node);\n const expanded = hasChildren && isInList(node.id, expandedNodeIds);\n const isActive = isActiveNode(node.id, activeNodeId);\n const isDisabled = node.disabled === true;\n const isNavigable = isNavigableNode(node);\n const canLink = Boolean(LinkComponent && node.href && isNavigable && !hasChildren && !isDisabled);\n\n const handleActivate = () => {\n if (isDisabled) return;\n if (hasChildren) {\n onToggleNode?.(node.id);\n return;\n }\n if (isNavigable && onNavigate) {\n onNavigate({ sectionId, nodeId: node.id, node, intent: node.navigationIntent });\n return;\n }\n node.onActivate?.();\n };\n\n const rowItem: TreeListNode = {\n ...node,\n actions: node.actions?.map((action) => ({\n ...action,\n onAction: action.onAction\n ? (context) => action.onAction?.({ sectionId, nodeId: node.id, ...context })\n : undefined,\n })),\n };\n\n const rowProps = {\n ...rowItem,\n depth: level,\n variant: rowVariant,\n isSelected: isActive,\n isExpanded: expanded,\n showExpandToggle: hasChildren,\n tabIndex,\n \"data-tree-list-focus-id\": node.id,\n \"aria-level\": level + 1,\n \"aria-expanded\": hasChildren ? expanded : undefined,\n onFocus,\n onActivate: handleActivate,\n onToggleExpand: () => onToggleNode?.(node.id),\n };\n\n const row =\n canLink && LinkComponent && node.href ? (\n <LinkComponent to={node.href}>\n <ListRow {...rowProps} asChild />\n </LinkComponent>\n ) : (\n <ListRow {...rowProps} />\n );\n\n return (\n <Stack gap={nodeGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {row}\n </Stack>\n );\n};\n","import { Box, HStack, IconButton, Menu, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { FocusEventHandler, MouseEvent as ReactMouseEvent } from \"react\";\nimport { SearchableActionMenu } from \"../list-row/searchable-action-menu\";\nimport type { TreeListAction, TreeListSection } from \"./tree-list.types\";\n\ninterface TreeListSectionActionsProps {\n sectionId: string;\n actions: TreeListAction[];\n}\n\nconst TreeListSectionActions = (props: TreeListSectionActionsProps) => {\n const { sectionId, actions } = props;\n if (actions.length === 0) return null;\n\n return (\n <HStack\n gap=\"0\"\n opacity=\"0\"\n pointerEvents=\"none\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n transition=\"opacity 120ms ease\"\n onClick={(event) => event.stopPropagation()}\n >\n {actions.map((action) => {\n if (action.menuItems && action.menuItems.length >= 8) {\n return <SearchableActionMenu key={action.id} action={action} />;\n }\n if (action.menuItems && action.menuItems.length > 0) {\n return (\n <Menu.Root key={action.id}>\n <Menu.Trigger asChild>\n <IconButton variant=\"ghost\" size=\"2xs\" aria-label={action.label}>\n {action.icon}\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {action.menuItems.map((item) => (\n <Menu.Item key={item.id} value={item.id} disabled={item.disabled} onClick={() => item.onAction?.()}>\n {item.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n }\n return (\n <IconButton\n key={action.id}\n variant=\"ghost\"\n size=\"2xs\"\n aria-label={action.label}\n onClick={(event) => {\n event.stopPropagation();\n action.onAction?.({ sectionId });\n }}\n >\n {action.icon}\n </IconButton>\n );\n })}\n </HStack>\n );\n};\n\ninterface TreeListSectionHeaderProps {\n section: TreeListSection;\n collapsible: boolean;\n expanded: boolean;\n focusId: string;\n tabIndex: number;\n onFocus: FocusEventHandler<HTMLElement>;\n onToggle: () => void;\n onContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nexport const TreeListSectionHeader = (props: TreeListSectionHeaderProps) => {\n const { section, collapsible, expanded, focusId, tabIndex, onFocus, onToggle, onContextMenu } = props;\n\n return (\n <HStack\n className=\"group\"\n justify=\"space-between\"\n align=\"center\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n px=\"sm\"\n py=\"2xs\"\n height=\"7\"\n cursor={collapsible ? \"pointer\" : \"default\"}\n tabIndex={collapsible ? tabIndex : undefined}\n data-tree-list-focus-id={collapsible ? focusId : undefined}\n aria-expanded={collapsible ? expanded : undefined}\n _hover={collapsible ? { bg: \"bg.hover\" } : undefined}\n _focusVisible={collapsible ? { bg: \"bg.hover\" } : undefined}\n onFocus={collapsible ? onFocus : undefined}\n onClick={collapsible ? onToggle : undefined}\n onContextMenu={\n onContextMenu\n ? (event) => {\n event.preventDefault();\n onContextMenu(event, section.id);\n }\n : undefined\n }\n >\n <HStack gap=\"1\" flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/XS\" textTransform=\"uppercase\" color=\"fg.muted\" letterSpacing=\"0.08em\" truncate>\n {section.label}\n </Text>\n {collapsible ? (\n <Box color=\"fg.muted\" flexShrink={0}>\n <ChevronRight\n size={14}\n style={{ transform: expanded ? \"rotate(90deg)\" : \"rotate(0deg)\", transition: \"120ms\" }}\n />\n </Box>\n ) : null}\n </HStack>\n <TreeListSectionActions sectionId={section.id} actions={section.actions ?? []} />\n </HStack>\n );\n};\n","import type { TreeListSection } from \"./tree-list.types\";\n\nconst SECTION_PREFIX = \"section:\";\n\nexport const toSectionDragId = (sectionId: string) => `${SECTION_PREFIX}${sectionId}`;\nexport const isSectionDragId = (id: string) => id.startsWith(SECTION_PREFIX);\nexport const fromSectionDragId = (id: string) => id.slice(SECTION_PREFIX.length);\n\nconst arrayMoveInPlace = <T>(items: T[], from: number, to: number) => {\n const next = items.slice();\n const [removed] = next.splice(from, 1);\n next.splice(to, 0, removed);\n return next;\n};\n\nexport type ReorderResult =\n | { kind: \"section\"; nextSectionIds: string[] }\n | { kind: \"node\"; sectionId: string; nextNodeIds: string[] };\n\nexport const computeReorderResult = (\n sections: TreeListSection[],\n activeId: string,\n overId: string,\n): ReorderResult | null => {\n if (activeId === overId) return null;\n\n if (isSectionDragId(activeId) && isSectionDragId(overId)) {\n const orderedIds = sections.map((section) => section.id);\n const oldIndex = orderedIds.indexOf(fromSectionDragId(activeId));\n const newIndex = orderedIds.indexOf(fromSectionDragId(overId));\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) return null;\n return { kind: \"section\", nextSectionIds: arrayMoveInPlace(orderedIds, oldIndex, newIndex) };\n }\n\n for (const section of sections) {\n const nodeIds = section.nodes.map((node) => node.id);\n const oldIndex = nodeIds.indexOf(activeId);\n const newIndex = nodeIds.indexOf(overId);\n if (oldIndex < 0 || newIndex < 0) continue;\n if (oldIndex === newIndex) return null;\n return {\n kind: \"node\",\n sectionId: section.id,\n nextNodeIds: arrayMoveInPlace(nodeIds, oldIndex, newIndex),\n };\n }\n\n return null;\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { computeReorderResult, toSectionDragId } from \"./tree-list-reorder\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\ninterface SortableHostProps {\n id: string;\n children: (input: {\n setNodeRef: (element: HTMLElement | null) => void;\n attributes: ReturnType<typeof useSortable>[\"attributes\"];\n listeners: ReturnType<typeof useSortable>[\"listeners\"];\n style: { transform?: string; transition?: string; opacity?: number };\n }) => React.ReactNode;\n}\n\n// Render-prop sortable host. The child decides which DOM node receives the\n// drag listeners so we never paint a visible grip glyph — the row or section\n// header is itself the drag handle. Clicks pass through because the pointer\n// sensor activates only after the cursor moves 4px (configured below).\nconst SortableHost = (props: SortableHostProps) => {\n const sortable = useSortable({ id: props.id });\n const style = {\n transform: CSS.Transform.toString(sortable.transform),\n transition: sortable.transition,\n opacity: sortable.isDragging ? 0.5 : 1,\n };\n return (\n <>\n {props.children({\n setNodeRef: sortable.setNodeRef,\n attributes: sortable.attributes,\n listeners: sortable.listeners,\n style,\n })}\n </>\n );\n};\n\ninterface SortableSectionGroupProps {\n section: TreeListSection;\n sectionRows: VirtualRow[];\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst SortableSectionGroup = (props: SortableSectionGroupProps) => {\n const {\n section,\n sectionRows,\n expandedNodeIds,\n activeNodeId,\n rowVariant,\n nodeGap,\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = props;\n\n const headerRow = sectionRows.find((row) => row.kind === \"section-header\");\n const nodeRows = sectionRows.filter((row) => row.kind === \"node\");\n const topLevelNodeIds = nodeRows\n .filter((row) => row.kind === \"node\" && row.level === 0)\n .map((row) => (row.kind === \"node\" ? row.node.id : \"\"));\n\n return (\n <SortableHost id={toSectionDragId(section.id)}>\n {({ setNodeRef, attributes, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\">\n {headerRow && headerRow.kind === \"section-header\" ? (\n // Drag listeners live on the header so dragging the section moves\n // it, while click-to-collapse still works via the activation\n // distance on the pointer sensor.\n <Box {...attributes} {...listeners}>\n <TreeListSectionHeader\n section={headerRow.section}\n collapsible={headerRow.collapsible}\n expanded={headerRow.expanded}\n focusId={headerRow.key}\n tabIndex={-1}\n onFocus={() => {}}\n onToggle={() => onToggleSection?.(headerRow.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n </Box>\n ) : null}\n <SortableContext items={topLevelNodeIds} strategy={verticalListSortingStrategy}>\n <Stack gap={nodeGap} w=\"full\" minW=\"0\">\n {nodeRows.map((row) =>\n row.kind === \"node\" ? (\n <SortableOrPlainNodeRow\n key={row.key}\n row={row}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n ) : null,\n )}\n </Stack>\n </SortableContext>\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface SortableOrPlainNodeRowProps {\n row: Extract<VirtualRow, { kind: \"node\" }>;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}\n\nconst renderNodeRow = (input: {\n node: TreeListNode;\n sectionId: string;\n level: number;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleNode?: (nodeId: string) => void;\n}) => (\n <TreeListNodeRow\n sectionId={input.sectionId}\n node={input.node}\n level={input.level}\n expandedNodeIds={input.expandedNodeIds}\n activeNodeId={input.activeNodeId}\n rowVariant={input.rowVariant}\n nodeGap={input.nodeGap}\n linkComponent={input.linkComponent}\n onNavigate={input.onNavigate}\n onToggleNode={input.onToggleNode}\n />\n);\n\n// Top-level nodes participate in their section's SortableContext; nested rows\n// inherit position from their parent and render plain (cross-section moves are\n// out of scope per the ADR).\nconst SortableOrPlainNodeRow = (props: SortableOrPlainNodeRowProps) => {\n const { row, ...rest } = props;\n if (row.level > 0) {\n return renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest });\n }\n return (\n <SortableHost id={row.node.id}>\n {({ setNodeRef, attributes, listeners, style }) => (\n <Box ref={setNodeRef} style={style} w=\"full\" minW=\"0\" {...attributes} {...listeners}>\n {renderNodeRow({ node: row.node, sectionId: row.sectionId, level: row.level, ...rest })}\n </Box>\n )}\n </SortableHost>\n );\n};\n\ninterface TreeListSortableProps {\n sections: TreeListSection[];\n expandedSectionIds?: string[];\n expandedNodeIds?: string[];\n activeNodeId?: string | string[] | null;\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\nexport const TreeListSortable = (props: TreeListSortableProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n onReorderSections,\n onReorderNodes,\n } = props;\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }));\n\n const handleDragEnd = (event: DragEndEvent) => {\n if (!event.over) return;\n const result = computeReorderResult(sections, String(event.active.id), String(event.over.id));\n if (!result) return;\n if (result.kind === \"section\") {\n onReorderSections?.(result.nextSectionIds);\n } else {\n onReorderNodes?.(result.sectionId, result.nextNodeIds);\n }\n };\n\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n\n return (\n <DndContext sensors={sensors} onDragEnd={handleDragEnd}>\n <SortableContext\n items={sections.map((section) => toSectionDragId(section.id))}\n strategy={verticalListSortingStrategy}\n >\n <Stack gap={sectionGap} w=\"full\" minW=\"0\" maxW=\"full\">\n {sections.map((section) => (\n <SortableSectionGroup\n key={section.id}\n section={section}\n sectionRows={rows.filter((row) => row.sectionId === section.id)}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onSectionContextMenu={onSectionContextMenu}\n />\n ))}\n </Stack>\n </SortableContext>\n </DndContext>\n );\n};\n","import { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport {\n getFocusableRows,\n getRowFocusId,\n isFocusableRow,\n resolveTreeListFocusRowId,\n resolveTreeListKeyboardNavigation,\n type VirtualRow,\n} from \"./tree-list-model\";\n\nconst findRowElement = (root: HTMLElement | null, focusId: string) => {\n if (!root) return null;\n const elements = root.querySelectorAll<HTMLElement>(\"[data-tree-list-focus-id]\");\n return [...elements].find((element) => element.dataset.treeListFocusId === focusId) ?? null;\n};\n\nconst findFocusedRowId = (root: HTMLElement | null, target: EventTarget | null) => {\n if (!root || !(target instanceof HTMLElement) || !root.contains(target)) return undefined;\n return target.closest<HTMLElement>(\"[data-tree-list-focus-id]\")?.dataset.treeListFocusId;\n};\n\nconst isTextEditingTarget = (target: EventTarget | null) => {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n return [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName);\n};\n\nconst getRowIndex = (rows: VirtualRow[], focusId: string) =>\n rows.findIndex((row) => isFocusableRow(row) && getRowFocusId(row) === focusId);\n\nexport const useTreeListKeyboardNavigation = (input: {\n rows: VirtualRow[];\n activeNodeId?: string | string[] | null;\n expandedNodeIds: string[];\n onToggleNode?: (nodeId: string) => void;\n onToggleSection?: (sectionId: string) => void;\n scrollToRow?: (index: number) => void;\n}) => {\n const { rows, activeNodeId, expandedNodeIds, onToggleNode, onToggleSection, scrollToRow } = input;\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [focusedRowId, setFocusedRowId] = useState<string>();\n const [pendingFocusRowId, setPendingFocusRowId] = useState<string>();\n const focusRowId = resolveTreeListFocusRowId(focusedRowId, activeNodeId, rows);\n const focusableRowIds = getFocusableRows(rows).map(getRowFocusId).join(\"\\0\");\n\n useEffect(() => {\n if (!focusedRowId) return;\n if (focusableRowIds.split(\"\\0\").includes(focusedRowId)) return;\n setFocusedRowId(undefined);\n }, [focusedRowId, focusableRowIds]);\n\n useEffect(() => {\n if (!pendingFocusRowId) return;\n const frame = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const element = findRowElement(rootRef.current, pendingFocusRowId);\n if (!element) return;\n element.focus();\n setPendingFocusRowId(undefined);\n });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [pendingFocusRowId]);\n\n const focusRow = (rowId: string) => {\n setFocusedRowId(rowId);\n const element = findRowElement(rootRef.current, rowId);\n if (element) {\n element.focus();\n return;\n }\n\n const rowIndex = getRowIndex(rows, rowId);\n if (rowIndex === -1) return;\n scrollToRow?.(rowIndex);\n setPendingFocusRowId(rowId);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (isTextEditingTarget(event.target)) return;\n\n const navigation = resolveTreeListKeyboardNavigation({\n rows,\n focusedRowId: findFocusedRowId(rootRef.current, event.target) ?? focusRowId,\n activeNodeId,\n expandedNodeIds,\n key: event.key,\n });\n if (!navigation) return;\n\n event.preventDefault();\n if (navigation.type === \"toggle-node\") {\n onToggleNode?.(navigation.nodeId);\n return;\n }\n if (navigation.type === \"toggle-section\") {\n onToggleSection?.(navigation.sectionId);\n return;\n }\n\n focusRow(navigation.rowId);\n };\n\n return {\n focusRowId,\n rootRef,\n handleKeyDown,\n onRowFocus: (rowId: string) => setFocusedRowId(rowId),\n };\n};\n","import { Box, Stack, type StackProps } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { MouseEvent as ReactMouseEvent, ReactNode, RefObject } from \"react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"../resource-context-menu\";\nimport type { TreeListLinkComponent, TreeListNavigateEvent, TreeListSection } from \"./tree-list.types\";\nimport { buildVirtualRows, type VirtualRow } from \"./tree-list-model\";\nimport { TreeListNodeRow } from \"./tree-list-node-row\";\nimport { TreeListSectionHeader } from \"./tree-list-section-header\";\nimport { TreeListSortable } from \"./tree-list-sortable\";\nimport { useTreeListKeyboardNavigation } from \"./use-tree-list-keyboard-navigation\";\n\nexport { buildVirtualRows } from \"./tree-list-model\";\n\ntype TreeListRowVariant = \"compact\" | \"tree\";\n\n/** Sectioned hierarchical list for files, resources, navigation, and customizable sidebars. */\ninterface TreeListProps {\n /** Ordered sections to render, each containing nested tree nodes. */\n sections: TreeListSection[];\n /** Controlled section ids that are currently expanded. */\n expandedSectionIds?: string[];\n /** Controlled node ids that are currently expanded. */\n expandedNodeIds?: string[];\n /** Active node id, or ids, used for selection styling. */\n activeNodeId?: string | string[] | null;\n /** Compact rows suit app navigation; tree rows suit file/resource hierarchies. */\n rowVariant?: TreeListRowVariant;\n sectionGap?: StackProps[\"gap\"];\n nodeGap?: StackProps[\"gap\"];\n /** Link renderer used when nodes provide `href`. */\n linkComponent?: TreeListLinkComponent;\n /** Called when a navigable node is activated. */\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n /** Render large trees with virtual rows. Disable when using drag ordering. */\n virtualize?: boolean;\n scrollRef?: RefObject<HTMLDivElement | null>;\n // When true, sections and items render with drag handles. Virtualization is\n // bypassed (per the ADR) — customizable trees are typically small. Hosts\n // must supply onReorderSections / onReorderNodes to persist the new order.\n draggable?: boolean;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n // When set, right-clicking the empty back area of the tree (everything not\n // covered by an item row) opens this menu. Item rows keep their own\n // right-click behaviour — the menu lives on a layer behind them.\n backgroundContextActions?: ResourceContextAction[];\n}\n\nconst VIRTUAL_ROW_ESTIMATE = 32;\nconst VIRTUAL_ROW_OVERSCAN = 4;\n\ninterface RenderVirtualRowInput {\n row: VirtualRow;\n expandedNodeIds: string[];\n activeNodeId?: string | string[] | null;\n focusRowId?: string;\n rowVariant: TreeListRowVariant;\n nodeGap: StackProps[\"gap\"];\n linkComponent?: TreeListLinkComponent;\n onRowFocus: (rowId: string) => void;\n onNavigate?: (event: TreeListNavigateEvent) => void;\n onToggleSection?: (sectionId: string) => void;\n onToggleNode?: (nodeId: string) => void;\n onSectionContextMenu?: (event: ReactMouseEvent<HTMLElement>, sectionId: string) => void;\n}\n\nconst renderVirtualRow = (input: RenderVirtualRowInput) => {\n const {\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n } = input;\n\n if (row.kind === \"section-header\") {\n return (\n <TreeListSectionHeader\n section={row.section}\n collapsible={row.collapsible}\n expanded={row.expanded}\n focusId={row.key}\n tabIndex={row.key === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.key)}\n onToggle={() => onToggleSection?.(row.sectionId)}\n onContextMenu={onSectionContextMenu}\n />\n );\n }\n\n if (row.kind === \"section-empty\") return row.emptyState ?? null;\n\n return (\n <TreeListNodeRow\n sectionId={row.sectionId}\n node={row.node}\n level={row.level}\n expandedNodeIds={expandedNodeIds}\n activeNodeId={activeNodeId}\n rowVariant={rowVariant}\n nodeGap={nodeGap}\n linkComponent={linkComponent}\n tabIndex={row.node.id === focusRowId ? 0 : -1}\n onFocus={() => onRowFocus(row.node.id)}\n onNavigate={onNavigate}\n onToggleNode={onToggleNode}\n />\n );\n};\n\ninterface VirtualTreeListProps extends TreeListProps {\n rows: VirtualRow[];\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nconst VirtualTreeList = (props: VirtualTreeListProps) => {\n const {\n rows,\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n scrollRef,\n } = props;\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => VIRTUAL_ROW_ESTIMATE,\n overscan: VIRTUAL_ROW_OVERSCAN,\n getItemKey: (index) => rows[index]?.key ?? index,\n });\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n scrollToRow: (index) => virtualizer.scrollToIndex(index, { align: \"auto\" }),\n });\n\n return (\n <Box\n ref={keyboard.rootRef}\n role=\"listbox\"\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n position=\"relative\"\n style={{ height: virtualizer.getTotalSize() }}\n onKeyDown={keyboard.handleKeyDown}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const row = rows[virtualItem.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualItem.key}\n ref={virtualizer.measureElement}\n data-index={virtualItem.index}\n data-tree-list-row={row.kind}\n position=\"absolute\"\n top=\"0\"\n left=\"0\"\n w=\"full\"\n style={{ transform: `translateY(${virtualItem.start}px)` }}\n >\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n );\n })}\n </Box>\n );\n};\n\nconst StackTreeList = (props: TreeListProps) => {\n const {\n sections,\n expandedSectionIds = [],\n expandedNodeIds = [],\n activeNodeId,\n rowVariant = \"tree\",\n sectionGap = \"0\",\n nodeGap = \"0\",\n linkComponent,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n virtualize,\n scrollRef,\n } = props;\n const rows = buildVirtualRows(sections, expandedSectionIds, expandedNodeIds);\n const keyboard = useTreeListKeyboardNavigation({\n rows,\n activeNodeId,\n expandedNodeIds,\n onToggleNode,\n onToggleSection,\n });\n\n if (virtualize && scrollRef) {\n return <VirtualTreeList {...props} rows={rows} scrollRef={scrollRef} />;\n }\n\n return (\n <Stack\n ref={keyboard.rootRef}\n role=\"listbox\"\n gap={sectionGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n overflowX=\"hidden\"\n onKeyDown={keyboard.handleKeyDown}\n >\n {sections.map((section) => {\n const sectionRows = rows.filter((row) => row.sectionId === section.id);\n\n return (\n <Stack\n key={section.id}\n gap={nodeGap}\n w=\"full\"\n minW=\"0\"\n maxW=\"full\"\n data-testid={`tree-list-section-${section.id}`}\n >\n {sectionRows.map((row) => (\n <Box key={row.key} w=\"full\" minW=\"0\">\n {renderVirtualRow({\n row,\n expandedNodeIds,\n activeNodeId,\n focusRowId: keyboard.focusRowId,\n rowVariant,\n nodeGap,\n linkComponent,\n onRowFocus: keyboard.onRowFocus,\n onNavigate,\n onToggleSection,\n onToggleNode,\n onSectionContextMenu,\n })}\n </Box>\n ))}\n </Stack>\n );\n })}\n </Stack>\n );\n};\n\ninterface TreeListBackgroundProps {\n actions: ResourceContextAction[];\n children: ReactNode;\n}\n\n// Renders the right-click target as a layer behind the rows so empty back-area\n// clicks open the menu while item rows (painted above) keep their own handling.\n// `flex` lets the layer grow to fill a flex-column host (e.g. a scroll area);\n// `minH=full` covers definite-height hosts. Either way the absolute child fills\n// the wrapper, so the whole back area is right-clickable, not just the rows.\nconst TreeListBackground = (props: TreeListBackgroundProps) => {\n const { actions, children } = props;\n\n return (\n <Box position=\"relative\" flex=\"1 0 auto\" minH=\"full\" w=\"full\" minW=\"0\" maxW=\"full\">\n <ResourceContextMenu actions={actions} closeOnSelect={false}>\n <Box position=\"absolute\" inset=\"0\" zIndex={0} aria-hidden data-tree-list-background=\"true\" />\n </ResourceContextMenu>\n <Box position=\"relative\" zIndex={1} w=\"full\" minW=\"0\" maxW=\"full\">\n {children}\n </Box>\n </Box>\n );\n};\n\nexport const TreeList = (props: TreeListProps) => {\n const content = props.draggable ? (\n <TreeListSortable\n sections={props.sections}\n expandedSectionIds={props.expandedSectionIds}\n expandedNodeIds={props.expandedNodeIds}\n activeNodeId={props.activeNodeId}\n rowVariant={props.rowVariant}\n sectionGap={props.sectionGap}\n nodeGap={props.nodeGap}\n linkComponent={props.linkComponent}\n onNavigate={props.onNavigate}\n onToggleSection={props.onToggleSection}\n onToggleNode={props.onToggleNode}\n onSectionContextMenu={props.onSectionContextMenu}\n onReorderSections={props.onReorderSections}\n onReorderNodes={props.onReorderNodes}\n />\n ) : (\n <StackTreeList {...props} />\n );\n\n if (!props.backgroundContextActions || props.backgroundContextActions.length === 0) {\n return content;\n }\n\n return <TreeListBackground actions={props.backgroundContextActions}>{content}</TreeListBackground>;\n};\n","import { Badge, Box, HStack, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { FileText, Search } from \"lucide-react\";\nimport { useRef } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport type { TreeListNode } from \"../tree-list/tree-list.types\";\nimport { buildChangedFilesTree } from \"./build-changed-files-tree\";\nimport type { ChangedFilesViewMode, ChangedFileTreeNode, FileIconInfo } from \"./types\";\n\ninterface FileListPanelProps {\n title: string;\n paths: string[];\n selectedPath: string | null;\n viewMode: ChangedFilesViewMode;\n searchQuery: string;\n expandedFolderIds: Set<string>;\n onSelectPath: (path: string) => void;\n onSearchQueryChange: (value: string) => void;\n onToggleFolder: (id: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}\n\nconst changeLabels: Record<string, string> = {\n added: \"A\",\n copied: \"C\",\n deleted: \"D\",\n modified: \"U\",\n permissionChange: \"M\",\n renamed: \"R\",\n};\n\nconst changeColors: Record<string, string> = {\n added: \"green\",\n copied: \"purple\",\n deleted: \"red\",\n modified: \"blue\",\n permissionChange: \"yellow\",\n renamed: \"orange\",\n};\n\nconst getFilePathParts = (filePath: string) => {\n const lastSlashIndex = filePath.lastIndexOf(\"/\");\n if (lastSlashIndex < 0) return { fileName: filePath, dirPath: \"\" };\n return { fileName: filePath.slice(lastSlashIndex + 1), dirPath: filePath.slice(0, lastSlashIndex) };\n};\n\nconst renderFileLabel = (node: ChangedFileTreeNode, viewMode: ChangedFilesViewMode, filePath: string) => {\n const { fileName, dirPath } = getFilePathParts(filePath);\n if (viewMode !== \"flat\" || !dirPath) return node.name;\n\n return (\n <Text textStyle=\"label/S/regular\" truncate>\n <Text as=\"span\" color=\"fg.default\">\n {fileName}\n </Text>{\" \"}\n <Text as=\"span\" color=\"fg.muted\">\n {dirPath}\n </Text>\n </Text>\n );\n};\n\nconst toTreeListNodes = (input: {\n nodes: ChangedFileTreeNode[];\n viewMode: ChangedFilesViewMode;\n onSelectPath: (path: string) => void;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n changeByPath?: Map<string, string>;\n}): TreeListNode[] => {\n const { nodes, viewMode, onSelectPath, resolveFileIcon, changeByPath } = input;\n\n return nodes.map((node) => {\n if (node.type === \"folder\") {\n return {\n id: node.id,\n label: node.name,\n isContainer: true,\n children: toTreeListNodes({\n nodes: node.children ?? [],\n viewMode,\n onSelectPath,\n resolveFileIcon,\n changeByPath,\n }),\n };\n }\n\n const filePath = node.id.replace(/^file:/, \"\");\n const fileIcon = resolveFileIcon?.(filePath) ?? { icon: <Icon as={FileText} boxSize=\"14px\" />, color: \"fg.subtle\" };\n const change = changeByPath?.get(filePath);\n\n return {\n id: node.id,\n label: renderFileLabel(node, viewMode, filePath),\n icon: fileIcon.icon,\n iconColor: fileIcon.color,\n endContent: change ? (\n <Badge size=\"sm\" variant=\"subtle\" colorPalette={changeColors[change] ?? \"gray\"} flexShrink={0}>\n {changeLabels[change] ?? change}\n </Badge>\n ) : undefined,\n onActivate: () => onSelectPath(filePath),\n };\n });\n};\n\nexport const FileListPanel = (props: FileListPanelProps) => {\n const {\n title,\n paths,\n selectedPath,\n viewMode,\n searchQuery,\n expandedFolderIds,\n onSelectPath,\n onSearchQueryChange,\n onToggleFolder,\n resolveFileIcon,\n changeByPath,\n } = props;\n const scrollRef = useRef<HTMLDivElement>(null);\n const fileTree = buildChangedFilesTree(paths, viewMode);\n const treeNodes = toTreeListNodes({ nodes: fileTree, viewMode, onSelectPath, resolveFileIcon, changeByPath });\n const emptyTitle = searchQuery.trim() ? \"No matching files\" : \"No changed files\";\n\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" gap=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Header variant=\"main\" justifyContent=\"space-between\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\">\n <HStack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"foreground.secondary\" truncate>\n {title}\n </Text>\n <Badge size=\"sm\" variant=\"subtle\" flexShrink={0}>\n {paths.length}\n </Badge>\n </HStack>\n </Header>\n <Stack gap=\"xs\" borderBottomWidth=\"1px\" bg=\"bg\">\n <InputGroup startElement={<Search size={14} />}>\n <Input\n size=\"sm\"\n border=\"0\"\n borderRadius=\"0\"\n placeholder=\"Filter files\"\n value={searchQuery}\n _hover={{ borderColor: \"transparent\" }}\n _focus={{ borderColor: \"transparent\", boxShadow: \"none\" }}\n _focusVisible={{ borderColor: \"transparent\", boxShadow: \"none\", outline: \"none\" }}\n onChange={(event) => onSearchQueryChange(event.target.value)}\n />\n </InputGroup>\n </Stack>\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n bg=\"bg\"\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowX: \"hidden\" } }}\n >\n {paths.length > 0 ? (\n <TreeList\n sections={[{ id: \"files\", nodes: treeNodes }]}\n expandedNodeIds={[...expandedFolderIds]}\n activeNodeId={selectedPath ? `file:${selectedPath}` : null}\n rowVariant=\"tree\"\n onToggleNode={onToggleFolder}\n virtualize\n scrollRef={scrollRef}\n />\n ) : (\n <Box px=\"xs\" py=\"xs\">\n <EmptyState title={emptyTitle} size=\"sm\" textAlign=\"left\" alignItems=\"flex-start\" />\n </Box>\n )}\n </ScrollArea>\n </Stack>\n );\n};\n","import { Box, Flex, HStack, IconButton, Menu, Skeleton, Stack, Text } from \"@chakra-ui/react\";\nimport {\n Check,\n ChevronsDownUp,\n ChevronsUpDown,\n List,\n ListTree,\n PanelLeftClose,\n PanelLeftOpen,\n Rows2,\n Settings2,\n SquareSplitHorizontal,\n} from \"lucide-react\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport { EmptyState } from \"../empty-state\";\nimport { Header } from \"../header\";\nimport { ResizableSplitLayout } from \"../resizable-split-layout\";\nimport { buildChangedFilesTree, collectExpandedFolderIds, sortPathsByViewMode } from \"./build-changed-files-tree\";\nimport { DiffBubble } from \"./diff-bubble\";\nimport type { Diff } from \"./diff-card\";\nimport { DiffDrawer, type DiffDrawerExpansionState, type DiffExpansionCommand } from \"./diff-drawer\";\nimport { useDiffViewerStore } from \"./diff-viewer.store\";\nimport { FileListPanel } from \"./file-list-panel\";\nimport type { ChangedFilesViewMode, FileIconInfo } from \"./types\";\n\nexport interface DiffViewerProps {\n diffs: Diff[];\n changedFilePaths?: string[];\n defaultSelectedPath?: string | null;\n loading?: boolean;\n onLoadDiff?: (path: string) => Promise<void>;\n resolveFileIcon?: (path: string, options?: { isFolder?: boolean; isExpanded?: boolean }) => FileIconInfo | undefined;\n}\n\nconst getDiffPath = (diff: Diff) => diff.newPath ?? diff.oldPath ?? \"unknown\";\nconst buildChangeByPath = (diffs: Diff[]) => new Map(diffs.map((diff) => [getDiffPath(diff), diff.change]));\nconst sumDiffStats = (diffs: Diff[]) =>\n diffs.reduce(\n (total, diff) => ({\n additions: total.additions + (diff.additions ?? 0),\n deletions: total.deletions + (diff.deletions ?? 0),\n }),\n { additions: 0, deletions: 0 },\n );\n\nconst buildFilteredDiffs = (input: {\n diffs: Diff[];\n normalizedSearchQuery: string;\n viewMode: ChangedFilesViewMode;\n}) => {\n const { diffs, normalizedSearchQuery, viewMode } = input;\n const matchingDiffs = normalizedSearchQuery\n ? diffs.filter((diff) => getDiffPath(diff).toLowerCase().includes(normalizedSearchQuery))\n : diffs;\n const orderedPaths = sortPathsByViewMode(matchingDiffs.map(getDiffPath), viewMode);\n const orderByPath = new Map(orderedPaths.map((path, index) => [path, index]));\n\n return [...matchingDiffs].sort((left, right) => {\n const leftOrder = orderByPath.get(getDiffPath(left)) ?? Number.MAX_SAFE_INTEGER;\n const rightOrder = orderByPath.get(getDiffPath(right)) ?? Number.MAX_SAFE_INTEGER;\n return leftOrder - rightOrder;\n });\n};\n\nconst resolveSelectedPath = (preferredPaths: string[], fallbackPaths: string[]) =>\n preferredPaths[0] ?? fallbackPaths[0] ?? null;\n\nconst MenuItemContent = (props: { checked?: boolean; icon: ReactNode; label: string }) => {\n const { checked, icon, label } = props;\n\n return (\n <HStack gap=\"2xs\" w=\"full\">\n <Box flexShrink={0}>{icon}</Box>\n <Text flex=\"1\">{label}</Text>\n {checked !== undefined ? (\n <Box w=\"14px\" flexShrink={0}>\n {checked ? <Check size={14} /> : null}\n </Box>\n ) : null}\n </HStack>\n );\n};\n\nconst loadingDiffItems = [\"first\", \"second\", \"third\"] as const;\n\nconst DiffViewerLoading = () => (\n <Stack flex=\"1\" minH=\"0\" bg=\"bg\" p=\"xs\" gap=\"xs\" role=\"status\" aria-busy=\"true\" aria-label=\"Loading diff panel\">\n {loadingDiffItems.map((item) => (\n <Skeleton key={item} h=\"72px\" w=\"full\" flexShrink=\"0\" borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const DiffViewer = (props: DiffViewerProps) => {\n const { diffs, changedFilePaths, defaultSelectedPath = null, loading = false, onLoadDiff, resolveFileIcon } = props;\n const [diffExpansionCommand, setDiffExpansionCommand] = useState<DiffExpansionCommand | null>(null);\n const [diffExpansionState, setDiffExpansionState] = useState<DiffDrawerExpansionState>({\n allExpanded: false,\n allCollapsed: false,\n });\n const {\n isTreePanelOpen,\n viewMode,\n diffViewMode,\n searchQuery,\n selectedPath,\n expandedFolderIds,\n setTreePanelOpen,\n setViewMode,\n setDiffViewMode,\n setSearchQuery,\n setSelectedPath,\n setExpandedFolderIds,\n toggleFolder,\n expandAll,\n collapseAll,\n } = useDiffViewerStore();\n\n const diffPaths = diffs.map(getDiffPath);\n const filePaths = changedFilePaths ?? diffPaths;\n const normalizedSearchQuery = searchQuery.trim().toLowerCase();\n const filteredFilePaths = normalizedSearchQuery\n ? filePaths.filter((path) => path.toLowerCase().includes(normalizedSearchQuery))\n : filePaths;\n const filteredDiffs = buildFilteredDiffs({ diffs, normalizedSearchQuery, viewMode });\n const changeByPath = buildChangeByPath(diffs);\n const filteredDiffPaths = filteredDiffs.map(getDiffPath);\n const fileTree = buildChangedFilesTree(filteredFilePaths, viewMode);\n const folderIds = viewMode === \"nested\" ? collectExpandedFolderIds(fileTree) : [];\n const filteredFilePathKey = filteredFilePaths.join(\"\\0\");\n const filteredDiffPathKey = filteredDiffPaths.join(\"\\0\");\n const resolvedSelectedPath =\n selectedPath ?? defaultSelectedPath ?? resolveSelectedPath(filteredDiffPaths, filteredFilePaths);\n const hasDiffs = filteredDiffs.length > 0;\n const emptyDiffTitle = normalizedSearchQuery ? \"No matching diffs\" : \"No changes\";\n const showDiffEmptyState = !loading && !hasDiffs;\n const totalDiff = sumDiffStats(filteredDiffs);\n const hasExpandableItems = folderIds.length > 0 || filteredDiffs.length > 0;\n const allFilesExpanded = folderIds.every((folderId) => expandedFolderIds.has(folderId));\n const allFilesCollapsed = folderIds.every((folderId) => !expandedFolderIds.has(folderId));\n const allDiffsExpanded = filteredDiffs.length === 0 || diffExpansionState.allExpanded;\n const allDiffsCollapsed = filteredDiffs.length === 0 || diffExpansionState.allCollapsed;\n const isExpandAllDisabled = !hasExpandableItems || (allFilesExpanded && allDiffsExpanded);\n const isCollapseAllDisabled = !hasExpandableItems || (allFilesCollapsed && allDiffsCollapsed);\n\n useEffect(() => {\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n const tree = buildChangedFilesTree(filePaths, viewMode);\n setExpandedFolderIds(viewMode === \"nested\" ? collectExpandedFolderIds(tree) : []);\n }, [filteredFilePathKey, setExpandedFolderIds, viewMode]);\n\n useEffect(() => {\n const diffPaths = filteredDiffPathKey ? filteredDiffPathKey.split(\"\\0\") : [];\n const filePaths = filteredFilePathKey ? filteredFilePathKey.split(\"\\0\") : [];\n if (resolvedSelectedPath && diffPaths.includes(resolvedSelectedPath)) return;\n setSelectedPath(resolveSelectedPath(diffPaths, filePaths));\n }, [filteredDiffPathKey, filteredFilePathKey, resolvedSelectedPath, setSelectedPath]);\n\n const expandAllFilesAndDiffs = () => {\n expandAll(folderIds);\n setDiffExpansionCommand((current) => ({ action: \"expand\", id: (current?.id ?? 0) + 1 }));\n };\n\n const collapseAllFilesAndDiffs = () => {\n collapseAll();\n setDiffExpansionCommand((current) => ({ action: \"collapse\", id: (current?.id ?? 0) + 1 }));\n };\n\n const selectChangedFilePath = (path: string) => {\n const currentIndex = resolvedSelectedPath ? filteredDiffPaths.indexOf(resolvedSelectedPath) : -1;\n const nextIndex = filteredDiffPaths.indexOf(path);\n const direction = currentIndex >= 0 && nextIndex >= 0 && nextIndex < currentIndex ? \"up\" : \"down\";\n\n setSelectedPath(path);\n setDiffExpansionCommand((current) => ({ action: \"expand-selected\", direction, id: (current?.id ?? 0) + 1, path }));\n };\n\n const diffPanel = (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" flex=\"1\" bg=\"bg\" gap=\"0\">\n <Header variant=\"main\" borderBottomWidth=\"1px\" borderColor=\"border.muted\" bg=\"bg\" justifyContent=\"space-between\">\n <HStack gap=\"xs\" minW=\"0\">\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Diff view options\" variant=\"ghost\" size=\"sm\">\n <Settings2 size={14} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"190px\" bg=\"bg\">\n <Menu.Item value=\"toggle-file-tree\" onClick={() => setTreePanelOpen(!isTreePanelOpen)}>\n <MenuItemContent\n icon={isTreePanelOpen ? <PanelLeftClose size={14} /> : <PanelLeftOpen size={14} />}\n label={isTreePanelOpen ? \"Hide file tree\" : \"Show file tree\"}\n />\n </Menu.Item>\n <Menu.Separator />\n {filePaths.length > 0 ? (\n <>\n <Menu.Item value=\"nested\" onClick={() => setViewMode(\"nested\")}>\n <MenuItemContent checked={viewMode === \"nested\"} icon={<ListTree size={14} />} label=\"Nested\" />\n </Menu.Item>\n <Menu.Item value=\"flat\" onClick={() => setViewMode(\"flat\")}>\n <MenuItemContent checked={viewMode === \"flat\"} icon={<List size={14} />} label=\"Flat\" />\n </Menu.Item>\n <Menu.Separator />\n </>\n ) : null}\n <Menu.Item value=\"unified\" onClick={() => setDiffViewMode(\"unified\")}>\n <MenuItemContent checked={diffViewMode === \"unified\"} icon={<Rows2 size={14} />} label=\"Unified\" />\n </Menu.Item>\n <Menu.Item value=\"split\" onClick={() => setDiffViewMode(\"split\")}>\n <MenuItemContent\n checked={diffViewMode === \"split\"}\n icon={<SquareSplitHorizontal size={14} />}\n label=\"Split\"\n />\n </Menu.Item>\n <Menu.Separator />\n <Menu.Item value=\"expand-all\" disabled={isExpandAllDisabled} onClick={expandAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsUpDown size={14} />} label=\"Expand all\" />\n </Menu.Item>\n <Menu.Item value=\"collapse-all\" disabled={isCollapseAllDisabled} onClick={collapseAllFilesAndDiffs}>\n <MenuItemContent icon={<ChevronsDownUp size={14} />} label=\"Collapse all\" />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n {showDiffEmptyState ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {emptyDiffTitle}\n </Text>\n ) : null}\n </HStack>\n <DiffBubble variant=\"ghost\" additions={totalDiff.additions} deletions={totalDiff.deletions} />\n </Header>\n {loading ? (\n <DiffViewerLoading />\n ) : hasDiffs ? (\n <Box flex=\"1\" minH=\"0\">\n <DiffDrawer\n diffs={filteredDiffs}\n selectedDiffPath={resolvedSelectedPath}\n onLoadDiff={onLoadDiff}\n onSelectDiffPath={setSelectedPath}\n onExpansionStateChange={setDiffExpansionState}\n expansionCommand={diffExpansionCommand}\n diffViewMode={diffViewMode}\n />\n </Box>\n ) : (\n <Box flex=\"1\" minH=\"0\" px=\"md\" py=\"lg\" display=\"flex\" alignItems=\"center\" justifyContent=\"center\" bg=\"bg\">\n <EmptyState title={emptyDiffTitle} />\n </Box>\n )}\n </Stack>\n );\n\n return (\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" bg=\"bg\" gap=\"0\" data-testid=\"diff-viewer\">\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={\n <FileListPanel\n title=\"Changed files\"\n paths={filteredFilePaths}\n selectedPath={resolvedSelectedPath}\n viewMode={viewMode}\n searchQuery={searchQuery}\n expandedFolderIds={expandedFolderIds}\n onSelectPath={selectChangedFilePath}\n onSearchQueryChange={setSearchQuery}\n onToggleFolder={toggleFolder}\n resolveFileIcon={resolveFileIcon}\n changeByPath={changeByPath}\n />\n }\n contentPanel={diffPanel}\n collapsed={!isTreePanelOpen}\n defaultSizePx={288}\n minSizePx={224}\n contentMinSizePx={320}\n resizeLabel=\"Resize file list panel\"\n onCollapsedChange={(collapsed) => setTreePanelOpen(!collapsed)}\n />\n </Flex>\n );\n};\n","import { AbsoluteCenter, Button, Stack, Text } from \"@chakra-ui/react\";\nimport { Component, type ErrorInfo, type ReactNode } from \"react\";\n\nimport { AlertMessage } from \"./alert\";\nimport { ContentPlaceholder } from \"./content-placeholder\";\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode;\n label?: string;\n onReset?: () => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n console.error(\"Dashboard error boundary caught an error\", error, info);\n }\n\n handleReset = () => {\n this.setState({ error: null });\n this.props.onReset?.();\n };\n\n render() {\n const { children, fallback, label } = this.props;\n const { error } = this.state;\n\n if (error) {\n if (fallback) {\n return fallback;\n }\n\n return <ErrorFallback error={error} label={label} onReset={this.handleReset} />;\n }\n\n return children;\n }\n}\n\ninterface ErrorFallbackProps {\n error: Error;\n label?: string;\n onReset?: () => void;\n}\n\nexport const ErrorFallback = (props: ErrorFallbackProps) => {\n const { error, label, onReset } = props;\n\n return (\n <ContentPlaceholder height=\"100%\" width=\"100%\">\n <AbsoluteCenter>\n <AlertMessage\n status=\"error\"\n title={<Text textStyle=\"paragraph/M/medium\">{label ?? \"Something went wrong\"}</Text>}\n >\n <Stack gap=\"sm\">\n <Text textStyle=\"paragraph/S/regular\">\n {error.message || \"An unexpected error occurred while rendering this section.\"}\n </Text>\n {onReset ? (\n <Button size=\"sm\" variant=\"solid\" colorScheme={\"black\"} onClick={onReset}>\n Try again\n </Button>\n ) : null}\n </Stack>\n </AlertMessage>\n </AbsoluteCenter>\n </ContentPlaceholder>\n );\n};\n","import { HStack, type StackProps } from \"@chakra-ui/react\";\n\ninterface HorizontalMenuStackProps extends StackProps {\n children?: StackProps[\"children\"];\n}\n\nexport function HorizontalMenuStack(props: HorizontalMenuStackProps) {\n const { children, h = \"41px\", px = \"xs\", py = \"xs\", borderBottomWidth = \"1px\", ...rest } = props;\n\n return (\n <HStack\n {...rest}\n h={h}\n justify=\"space-between\"\n align=\"center\"\n borderBottomWidth={borderBottomWidth}\n borderColor={\"border.muted\"}\n px={px}\n py={py}\n >\n {children}\n </HStack>\n );\n}\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\n\nexport type SimpleCardProps = BoxProps;\n\nexport const SimpleCard = (props: SimpleCardProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"0\" bg=\"bg\" {...rest}>\n {children}\n </Box>\n );\n};\n\nexport type SimpleCardBodyProps = BoxProps;\n\nexport const SimpleCardBody = (props: SimpleCardBodyProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box p=\"md\" {...rest}>\n {children}\n </Box>\n );\n};\n","import { Badge, Box, Button, HStack, Icon, Stack, Text } from \"@chakra-ui/react\";\nimport { Check } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { SimpleCard, SimpleCardBody } from \"./simple-card\";\n\nexport interface IntegrationCardProps {\n icon: ReactNode;\n name: string;\n description: string;\n id: string;\n version?: string;\n category?: string;\n active?: boolean;\n actionLabel?: string;\n}\n\nexport const IntegrationCard = (props: IntegrationCardProps) => {\n const { icon, name, description, id, version, category, active = false, actionLabel } = props;\n\n return (\n <SimpleCard>\n <SimpleCardBody>\n <HStack gap=\"4\" alignItems=\"flex-start\">\n <Icon boxSize=\"1em\" fontSize=\"2xl\" flexShrink=\"0\" color=\"fg.muted\">\n {icon}\n </Icon>\n <Box flex=\"1\" minW=\"0\">\n <Stack gap=\"1\">\n <HStack gap=\"2\" flexWrap=\"wrap\">\n <Text textStyle=\"sm\" fontWeight=\"semibold\">\n {name}\n </Text>\n <Badge size=\"sm\" variant=\"outline\">\n {id}\n </Badge>\n {version && (\n <Badge size=\"sm\" variant=\"outline\">\n v{version}\n </Badge>\n )}\n {category && (\n <Badge size=\"sm\" variant=\"outline\">\n {category}\n </Badge>\n )}\n </HStack>\n <Text color=\"fg.muted\">{description}</Text>\n </Stack>\n </Box>\n <Button\n type=\"button\"\n disabled={active}\n size=\"sm\"\n variant=\"outline\"\n colorPalette=\"gray\"\n bg=\"bg\"\n flexShrink=\"0\"\n >\n {active && (\n <Icon color=\"fg.success\">\n <Check />\n </Icon>\n )}\n {actionLabel ?? (active ? \"Active\" : \"Connect\")}\n </Button>\n </HStack>\n </SimpleCardBody>\n </SimpleCard>\n );\n};\n","import { Box, Collapsible, Flex, Text } from \"@chakra-ui/react\";\nimport { ChevronRight } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nexport interface ItemSectionProps {\n children: ReactNode;\n title?: string;\n defaultOpen?: boolean;\n action?: ReactNode;\n}\n\n/**\n * A collapsible section wrapper with a title trigger and optional action.\n */\nexport const ItemSection = (props: ItemSectionProps) => {\n const { children, title, defaultOpen = true, action } = props;\n\n return (\n <Collapsible.Root defaultOpen={defaultOpen} width=\"full\">\n <Flex>\n <Collapsible.Trigger\n _hover={{\n background: \"bg.hover\",\n }}\n padding=\"sm\"\n height=\"2rem\"\n display=\"flex\"\n width=\"full\"\n gap=\"2\"\n alignItems=\"center\"\n cursor=\"pointer\"\n justifyContent=\"space-between\"\n >\n {title && (\n <Text fontWeight=\"600\" textStyle=\"label/S/medium\">\n {title}\n </Text>\n )}\n <Collapsible.Indicator transition=\"transform 0.2s\" _open={{ transform: \"rotate(90deg)\" }}>\n <ChevronRight size={16} />\n </Collapsible.Indicator>\n </Collapsible.Trigger>\n {action && (\n <Box marginLeft=\"auto\" onClick={(e) => e.stopPropagation()}>\n {action}\n </Box>\n )}\n </Flex>\n <Collapsible.Content>{children}</Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import { Box, HStack, Link, Separator, Stack, Text } from \"@chakra-ui/react\";\n\nexport interface OpenSourceNotice {\n name: string;\n version?: string;\n license?: string;\n copyright?: string;\n homepageUrl?: string;\n sourceUrl?: string;\n attribution?: string;\n}\n\nexport interface OpenSourceNoticesScreenProps {\n notices: OpenSourceNotice[];\n title?: string;\n description?: string;\n productName?: string;\n productVersion?: string;\n generatedAt?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n}\n\nconst getNoticeKey = (notice: OpenSourceNotice, index: number) => {\n return `${notice.name}-${notice.version ?? \"unknown\"}-${index}`;\n};\n\nconst getNoticeTitle = (notice: OpenSourceNotice) => {\n if (!notice.version) return notice.name;\n\n return `${notice.name} v${notice.version}`;\n};\n\nexport const OpenSourceNoticesScreen = (props: OpenSourceNoticesScreenProps) => {\n const {\n notices,\n title = \"Open Source and Third-Party Notices\",\n description = \"This product includes software developed by the open source community.\",\n productName,\n productVersion,\n generatedAt,\n emptyTitle = \"No third-party notices available\",\n emptyDescription = \"No third-party packages were included in this build.\",\n } = props;\n\n return (\n <Stack width=\"full\" minHeight=\"100%\" background=\"bg\" color=\"fg\" padding={{ base: \"md\", md: \"xl\" }} gap=\"lg\">\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/L\">{title}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n\n <HStack gap=\"md\" flexWrap=\"wrap\">\n {productName ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Product: {productName}\n </Text>\n ) : null}\n\n {productVersion ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Version: {productVersion}\n </Text>\n ) : null}\n\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Packages: {notices.length}\n </Text>\n\n {generatedAt ? (\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n Generated: {generatedAt}\n </Text>\n ) : null}\n </HStack>\n </Stack>\n\n <Separator borderColor=\"border.muted\" />\n\n {notices.length === 0 ? (\n <Stack borderWidth=\"1px\" borderColor=\"border.muted\" borderRadius=\"md\" padding=\"lg\" gap=\"xs\">\n <Text textStyle=\"label/L/medium\">{emptyTitle}</Text>\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {emptyDescription}\n </Text>\n </Stack>\n ) : (\n <Stack gap=\"md\">\n {notices.map((notice, index) => (\n <Box\n key={getNoticeKey(notice, index)}\n borderWidth=\"1px\"\n borderColor=\"border.muted\"\n borderRadius=\"md\"\n padding=\"md\"\n >\n <Stack gap=\"sm\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"label/L/medium\">{getNoticeTitle(notice)}</Text>\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n License: {notice.license ?? \"Unknown\"}\n </Text>\n </Stack>\n\n {notice.copyright ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n {notice.copyright}\n </Text>\n ) : null}\n\n {(notice.homepageUrl || notice.sourceUrl) && (\n <Stack gap=\"2xs\">\n {notice.homepageUrl ? (\n <Link\n href={notice.homepageUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Homepage\n </Link>\n ) : null}\n\n {notice.sourceUrl ? (\n <Link\n href={notice.sourceUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n textStyle=\"label/S/medium\"\n width=\"fit-content\"\n >\n Source code\n </Link>\n ) : null}\n </Stack>\n )}\n\n {notice.attribution ? (\n <Box background=\"bg.muted\" borderRadius=\"sm\" padding=\"sm\">\n <Text textStyle=\"label/S/regular\" whiteSpace=\"pre-wrap\">\n {notice.attribution}\n </Text>\n </Box>\n ) : null}\n </Stack>\n </Box>\n ))}\n </Stack>\n )}\n </Stack>\n );\n};\n","import type { ReactNode } from \"react\";\n\nexport const DEFAULT_PALETTE_ASSET_LIMIT = 48;\n\nexport interface PaletteSearchEntry {\n id: string;\n mode?: string;\n label: ReactNode;\n searchText?: string;\n secondaryLabel?: ReactNode;\n assetType?: string;\n}\n\nexport interface PaletteMode {\n id: string;\n inputPrefix?: string;\n}\n\nexport interface FilterPaletteEntriesOptions {\n query: string;\n mode?: string;\n getEffectiveQuery?: (query: string) => string;\n defaultAssetLimit?: number;\n}\n\nconst getSearchableText = (entry: PaletteSearchEntry) => {\n const label = typeof entry.label === \"string\" ? entry.label : \"\";\n const secondaryLabel = typeof entry.secondaryLabel === \"string\" ? entry.secondaryLabel : \"\";\n\n return `${label} ${entry.searchText ?? \"\"} ${secondaryLabel}`;\n};\n\nconst hasInputPrefix = (query: string, inputPrefix: string) => query.trimStart().startsWith(inputPrefix);\n\nexport const resolvePaletteMode = (query: string, modes: readonly PaletteMode[] = [], fallbackMode?: string) => {\n const prefixedMode = modes.find((mode) => mode.inputPrefix && hasInputPrefix(query, mode.inputPrefix));\n\n return prefixedMode?.id ?? fallbackMode ?? modes.find((mode) => !mode.inputPrefix)?.id ?? modes[0]?.id;\n};\n\nexport const getPaletteEffectiveQuery = (query: string, modes: readonly PaletteMode[] = [], modeId?: string) => {\n const mode = modes.find(\n (candidate) => candidate.id === modeId && candidate.inputPrefix && hasInputPrefix(query, candidate.inputPrefix),\n );\n\n if (!mode?.inputPrefix) return query.trim();\n\n return query.trimStart().slice(mode.inputPrefix.length).trim();\n};\n\nconst limitDefaultAssetEntries = <T extends PaletteSearchEntry>(entries: T[], limit: number) => {\n const counts: Record<string, number> = {};\n\n return entries.filter((entry) => {\n const assetType = entry.assetType;\n if (!assetType) return true;\n\n const count = counts[assetType] ?? 0;\n if (count >= limit) return false;\n\n counts[assetType] = count + 1;\n return true;\n });\n};\n\nexport const filterPaletteEntries = <T extends PaletteSearchEntry>(\n entries: T[],\n options: FilterPaletteEntriesOptions,\n) => {\n const effectiveQuery = (options.getEffectiveQuery?.(options.query) ?? options.query.trim()).toLowerCase();\n\n const filteredEntries = entries.filter((entry) => {\n if (options.mode && entry.mode !== options.mode) return false;\n if (!effectiveQuery) return true;\n\n return getSearchableText(entry).toLowerCase().includes(effectiveQuery);\n });\n\n if (effectiveQuery || options.defaultAssetLimit === undefined) {\n return filteredEntries;\n }\n\n return limitDefaultAssetEntries(filteredEntries, options.defaultAssetLimit);\n};\n","import { Box, HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { Check } from \"lucide-react\";\nimport { type RefObject, useEffect } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport type { ListRowItem } from \"./list-row/list-row.types\";\nimport type { PaletteEntry } from \"./palette\";\n\ntype PaletteRow<T extends PaletteEntry> =\n | { type: \"group\"; id: string; label: string }\n | { type: \"entry\"; id: string; entry: T; entryIndex: number };\n\nconst GROUP_ROW_HEIGHT = 24;\nconst ENTRY_ROW_HEIGHT = 40;\nconst INITIAL_VIEWPORT_HEIGHT = 384;\nconst ACTIVE_ROW_BG = \"bg.menu-item.hover\";\n\nconst buildEntryItem = (entry: PaletteEntry): ListRowItem => ({\n id: entry.id,\n label: entry.label,\n description: entry.description ?? entry.secondaryLabel,\n icon: entry.icon,\n endContent:\n entry.endContent ??\n (entry.shortcut || entry.isSelected ? (\n <HStack gap=\"2\">\n {entry.shortcut}\n {entry.isSelected ? <Icon as={Check} boxSize=\"14px\" color=\"fg.muted\" /> : null}\n </HStack>\n ) : undefined),\n onActivate: entry.onActivate,\n});\n\nconst buildRows = <T extends PaletteEntry>(entries: T[]) => {\n const rows: PaletteRow<T>[] = [];\n\n entries.forEach((entry, index) => {\n const previousEntry = entries[index - 1];\n if (entry.group && entry.group !== previousEntry?.group) {\n rows.push({ type: \"group\", id: `group:${entry.group}:${entry.id}`, label: entry.group });\n }\n\n rows.push({ type: \"entry\", id: entry.id, entry, entryIndex: index });\n });\n\n return rows;\n};\n\nconst getActiveRowIndex = <T extends PaletteEntry>(rows: PaletteRow<T>[], activeIndex: number) =>\n rows.findIndex((row) => row.type === \"entry\" && row.entryIndex === activeIndex);\n\ninterface PaletteListProps<T extends PaletteEntry> {\n entries: T[];\n activeIndex: number;\n emptyLabel: string;\n onHover: (index: number) => void;\n scrollRef: RefObject<HTMLDivElement | null>;\n}\n\nexport const PaletteList = <T extends PaletteEntry>(props: PaletteListProps<T>) => {\n const { entries, activeIndex, emptyLabel, onHover, scrollRef } = props;\n const rows = buildRows(entries);\n const activeRowIndex = getActiveRowIndex(rows, activeIndex);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index) => (rows[index]?.type === \"group\" ? GROUP_ROW_HEIGHT : ENTRY_ROW_HEIGHT),\n getItemKey: (index) => rows[index]?.id ?? index,\n initialRect: { width: 0, height: INITIAL_VIEWPORT_HEIGHT },\n overscan: 6,\n });\n\n useEffect(() => {\n if (activeRowIndex < 0) return;\n\n virtualizer.scrollToIndex(activeRowIndex, { align: \"auto\", behavior: \"auto\" });\n }, [activeRowIndex, virtualizer]);\n\n if (entries.length === 0) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" px=\"sm\" py=\"md\">\n {emptyLabel}\n </Text>\n );\n }\n\n return (\n <Box role=\"listbox\" position=\"relative\" width=\"100%\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index];\n if (!row) return null;\n\n return (\n <Box\n key={virtualRow.key}\n data-index={virtualRow.index}\n ref={virtualizer.measureElement}\n position=\"absolute\"\n left=\"0\"\n width=\"100%\"\n style={{ top: virtualRow.start }}\n >\n {row.type === \"group\" ? (\n <Text textStyle=\"label/XS/medium\" color=\"fg.muted\" px=\"sm\" pt=\"xs\" pb=\"2xs\">\n {row.label}\n </Text>\n ) : (\n <ListRow\n variant=\"compact\"\n {...buildEntryItem(row.entry)}\n isSelected={row.entryIndex === activeIndex}\n selectedBg={ACTIVE_ROW_BG}\n hoverBg={row.entryIndex === activeIndex ? ACTIVE_ROW_BG : \"transparent\"}\n tabIndex={-1}\n onPointerMove={() => onHover(row.entryIndex)}\n />\n )}\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { CloseButton, Dialog, Input, InputGroup } from \"@chakra-ui/react\";\nimport type { KeyboardEvent, ReactNode, SetStateAction } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n DEFAULT_PALETTE_ASSET_LIMIT,\n type FilterPaletteEntriesOptions,\n filterPaletteEntries,\n getPaletteEffectiveQuery,\n type PaletteMode,\n type PaletteSearchEntry,\n resolvePaletteMode,\n} from \"./palette-filter\";\nimport { PaletteList } from \"./palette-list\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport type { FilterPaletteEntriesOptions, PaletteMode, PaletteSearchEntry };\nexport { DEFAULT_PALETTE_ASSET_LIMIT, filterPaletteEntries };\n\nexport interface PaletteEntry extends PaletteSearchEntry {\n description?: ReactNode;\n icon?: ReactNode;\n shortcut?: ReactNode;\n endContent?: ReactNode;\n group?: string;\n isSelected?: boolean;\n onActivate: () => void;\n}\n\nexport interface PaletteState<T extends PaletteEntry> {\n query: string;\n mode?: string;\n activeIndex: number;\n entries: T[];\n}\n\nexport interface PaletteEscapeContext<T extends PaletteEntry> extends PaletteState<T> {\n activeEntry: T | null;\n entryCount: number;\n setQuery: (query: string) => void;\n setActiveIndex: (index: SetStateAction<number>) => void;\n runActiveEntry: () => void;\n closePalette: () => void;\n}\n\nexport type PaletteStateValue<T extends PaletteEntry, TValue> = TValue | ((state: PaletteState<T>) => TValue);\n\nexport interface PaletteProps<T extends PaletteEntry = PaletteEntry> {\n open: boolean;\n entries: T[];\n initialQuery?: string;\n initialActiveIndex?: number;\n mode?: string;\n modes?: PaletteMode[];\n resetKey?: string;\n inputIcon?: PaletteStateValue<T, ReactNode>;\n placeholder?: PaletteStateValue<T, string>;\n emptyLabel?: string;\n footerStart?: ReactNode;\n footerEnd?: ReactNode;\n filterEntries?: (entries: T[], query: string, mode?: string) => T[];\n onActiveEntryChange?: (entry: T | null, index: number) => void;\n onQueryChange?: (query: string) => void;\n onClose: () => void;\n onEscape?: (ctx: PaletteEscapeContext<T>) => boolean | undefined;\n}\n\nconst resolveStateValue = <T extends PaletteEntry, TValue>(\n value: PaletteStateValue<T, TValue> | undefined,\n state: PaletteState<T>,\n fallback: TValue,\n) => {\n if (typeof value === \"function\") {\n return (value as (state: PaletteState<T>) => TValue)(state);\n }\n\n return value ?? fallback;\n};\n\nconst paletteInputStateProps = {\n borderColor: \"transparent\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nexport const Palette = <T extends PaletteEntry>(props: PaletteProps<T>) => {\n const {\n open,\n entries,\n initialQuery = \"\",\n initialActiveIndex = 0,\n mode,\n modes,\n resetKey = \"default\",\n inputIcon,\n placeholder,\n emptyLabel = \"No results.\",\n footerStart,\n footerEnd,\n filterEntries,\n onActiveEntryChange,\n onQueryChange,\n onClose,\n onEscape,\n } = props;\n const [query, setQueryState] = useState(initialQuery);\n const [activeIndex, setActiveIndex] = useState(initialActiveIndex);\n const inputRef = useRef<HTMLInputElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const setupRef = useRef({ open: false, resetKey });\n const activeMode = mode ?? resolvePaletteMode(query, modes);\n const filteredEntries = filterEntries\n ? filterEntries(entries, query, activeMode)\n : filterPaletteEntries(entries, {\n query,\n mode: activeMode,\n getEffectiveQuery: (value) => getPaletteEffectiveQuery(value, modes, activeMode),\n });\n const activeEntry = filteredEntries[activeIndex] ?? null;\n const state: PaletteState<T> = { query, mode: activeMode, activeIndex, entries: filteredEntries };\n const resolvedInputIcon = resolveStateValue(inputIcon, state, null);\n const resolvedPlaceholder = resolveStateValue(placeholder, state, \"Search\");\n\n const setQuery = (nextQuery: string) => {\n setQueryState(nextQuery);\n onQueryChange?.(nextQuery);\n };\n\n const runActiveEntry = () => {\n activeEntry?.onActivate();\n };\n\n const closePalette = () => {\n onClose();\n };\n\n useEffect(() => {\n const previousSetup = setupRef.current;\n setupRef.current = { open, resetKey };\n if (!open) return;\n\n const shouldInitialize = !previousSetup.open || previousSetup.resetKey !== resetKey;\n if (!shouldInitialize) return;\n\n setQueryState(initialQuery);\n setActiveIndex(initialActiveIndex);\n\n const timeout = setTimeout(() => {\n const input = inputRef.current;\n if (!input) return;\n input.focus();\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n return () => clearTimeout(timeout);\n }, [initialActiveIndex, initialQuery, open, resetKey]);\n\n useEffect(() => {\n setActiveIndex((current) => Math.min(current, Math.max(filteredEntries.length - 1, 0)));\n }, [filteredEntries.length]);\n\n useEffect(() => {\n onActiveEntryChange?.(activeEntry, activeIndex);\n }, [activeEntry, activeIndex, onActiveEntryChange]);\n\n const handleEscape = () => {\n const handled = onEscape?.({\n ...state,\n activeEntry,\n entryCount: filteredEntries.length,\n setQuery,\n setActiveIndex,\n runActiveEntry,\n closePalette,\n });\n if (handled) return;\n\n if (query.length > 0) {\n setQuery(\"\");\n setActiveIndex(0);\n return;\n }\n\n closePalette();\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setActiveIndex((current) => Math.min(current + 1, Math.max(filteredEntries.length - 1, 0)));\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(current - 1, 0));\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n runActiveEntry();\n return;\n }\n\n if (event.key !== \"Escape\") return;\n\n event.preventDefault();\n event.stopPropagation();\n handleEscape();\n };\n\n const hasFooter = footerStart || footerEnd;\n\n return (\n <Dialog.Root open={open} onOpenChange={(details) => !details.open && closePalette()}>\n <Dialog.Backdrop />\n <Dialog.Positioner alignItems=\"flex-start\" pt=\"10vh\">\n <Dialog.Content maxW=\"44rem\" p=\"0\" overflow=\"hidden\">\n <Dialog.Header px=\"0\" py=\"0\" borderBottomWidth=\"1px\" borderBottomColor=\"border.muted\">\n <InputGroup startElement={resolvedInputIcon}>\n <Input\n ref={inputRef}\n value={query}\n placeholder={resolvedPlaceholder}\n aria-label={resolvedPlaceholder}\n autoComplete=\"off\"\n borderWidth=\"0\"\n borderColor=\"transparent\"\n borderRadius=\"0\"\n h=\"3rem\"\n _hover={paletteInputStateProps}\n _active={paletteInputStateProps}\n _focus={paletteInputStateProps}\n _focusVisible={paletteInputStateProps}\n onChange={(event) => {\n setQuery(event.target.value);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n />\n </InputGroup>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" mr=\"2\" />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body p=\"0\">\n <ScrollArea\n maxH=\"24rem\"\n showHorizontalScrollbar={false}\n viewportRef={scrollRef}\n viewportProps={{ style: { overflowAnchor: \"none\" } }}\n >\n <PaletteList\n entries={filteredEntries}\n activeIndex={activeIndex}\n emptyLabel={emptyLabel}\n onHover={setActiveIndex}\n scrollRef={scrollRef}\n />\n </ScrollArea>\n </Dialog.Body>\n {hasFooter ? (\n <Dialog.Footer\n justifyContent=\"space-between\"\n px=\"sm\"\n py=\"xs\"\n borderTopWidth=\"1px\"\n borderTopColor=\"border.muted\"\n >\n {footerStart}\n {footerEnd}\n </Dialog.Footer>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { Kbd } from \"@chakra-ui/react\";\nimport { Fragment } from \"react\";\n\nexport type PaletteShortcutBinding = string | string[];\n\nconst splitShortcutStep = (step: string) => {\n return step\n .split(\"+\")\n .map((part) => part.trim())\n .filter(Boolean);\n};\n\nconst getShortcutDisplayParts = (binding: PaletteShortcutBinding) => {\n const steps = Array.isArray(binding) ? binding.map(splitShortcutStep) : [splitShortcutStep(binding)];\n\n return steps.map((step) => step.map((label) => ({ label })));\n};\n\nexport const PaletteShortcut = (props: { binding: PaletteShortcutBinding }) => {\n const { binding } = props;\n const steps = getShortcutDisplayParts(binding);\n\n return (\n <>\n {steps.map((step, stepIndex) => (\n <Fragment key={`${step.map((part) => part.label).join(\"+\")}-${stepIndex}`}>\n {step.map((part, partIndex) => (\n <Fragment key={`${part.label}-${partIndex}`}>\n <Kbd fontSize=\"xs\" borderRadius=\"0\" display=\"inline-flex\" alignItems=\"center\" aria-label={part.label}>\n {part.label}\n </Kbd>\n {partIndex < step.length - 1 ? \" + \" : null}\n </Fragment>\n ))}\n {stepIndex < steps.length - 1 ? \" then \" : null}\n </Fragment>\n ))}\n </>\n );\n};\n","import { HStack, Icon, Text } from \"@chakra-ui/react\";\nimport { CircleHelp } from \"lucide-react\";\nimport { Tooltip } from \"../tooltip\";\n\ninterface ParamEditorLabelProps {\n name: string;\n description?: string;\n}\n\nexport const ParamEditorLabel = (props: ParamEditorLabelProps) => {\n const { name, description } = props;\n\n return (\n <HStack gap=\"1\" alignItems=\"center\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg.muted\" truncate>\n {name}\n </Text>\n {description ? (\n <Tooltip content={description} showArrow>\n <Icon as={CircleHelp} boxSize=\"12px\" color=\"fg.muted\" opacity={0.6} cursor=\"help\" flexShrink={0} />\n </Tooltip>\n ) : null}\n </HStack>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface ParamEditorReadOnlyValueProps extends Omit<BoxProps, \"children\"> {\n children: ReactNode;\n preserveWhitespace?: boolean;\n}\n\nexport const ParamEditorReadOnlyValue = (props: ParamEditorReadOnlyValueProps) => {\n const { children, preserveWhitespace = false, ...boxProps } = props;\n\n return (\n <Box minW=\"0\" textStyle=\"label/S/regular\" whiteSpace={preserveWhitespace ? \"pre-wrap\" : undefined} {...boxProps}>\n {children}\n </Box>\n );\n};\n","import { Box, ColorPicker, type ColorPickerValueChangeDetails, Flex, parseColor } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface ColorInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const ColorInput = (props: ColorInputProps) => {\n const { id, defaultValue, name, onChange, description, readOnly, hideLabel = false, fullWidth = false } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextColor: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextColor), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newColor: string) => {\n setValue(newColor);\n scheduleChange(newColor);\n };\n\n if (readOnly) {\n const valueElement = (\n <ParamEditorReadOnlyValue>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Box boxSize=\"0.75rem\" borderRadius=\"xs\" borderWidth=\"1px\" borderColor=\"border.muted\" bg={value} />\n <Box as=\"span\">{value}</Box>\n </Flex>\n </ParamEditorReadOnlyValue>\n );\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n const rootProps = {\n value: parseColor(value),\n onValueChange: (details: ColorPickerValueChangeDetails) => handleChange(details.value.toString(\"hex\")),\n disabled: readOnly,\n };\n\n const picker = (\n <ColorPicker.Root {...rootProps} size=\"sm\" maxW={fullWidth ? \"100%\" : \"8.75rem\"}>\n <ColorPicker.HiddenInput />\n <ColorPicker.Label srOnly>{name}</ColorPicker.Label>\n <ColorPicker.Control>\n <ColorPicker.Input readOnly={readOnly} />\n <ColorPicker.Trigger />\n </ColorPicker.Control>\n <ColorPicker.Positioner>\n <ColorPicker.Content>\n <ColorPicker.Area />\n <ColorPicker.Sliders />\n <ColorPicker.SwatchGroup>\n <ColorPicker.SwatchTrigger value={value}>\n <ColorPicker.Swatch value={value} />\n </ColorPicker.SwatchTrigger>\n </ColorPicker.SwatchGroup>\n </ColorPicker.Content>\n </ColorPicker.Positioner>\n </ColorPicker.Root>\n );\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {picker}\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {picker}\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface DateInputProps {\n id: string;\n defaultValue: string;\n name: string;\n min?: string;\n max?: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const DateInput = (props: DateInputProps) => {\n const {\n id,\n defaultValue,\n name,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{value}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"8.75rem\"\n size=\"sm\"\n type=\"date\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n min={min}\n max={max}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n )}\n </Box>\n );\n};\n","import { NumberInput as ChakraNumberInput } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface NumberInputProps extends ChakraNumberInput.RootProps {}\n\nexport const NumberInputRoot = React.forwardRef<HTMLDivElement, NumberInputProps>(function NumberInput(props, ref) {\n const { children, ...rest } = props;\n return (\n <ChakraNumberInput.Root ref={ref} variant=\"outline\" {...rest}>\n {children}\n <ChakraNumberInput.Control>\n <ChakraNumberInput.IncrementTrigger />\n <ChakraNumberInput.DecrementTrigger />\n </ChakraNumberInput.Control>\n </ChakraNumberInput.Root>\n );\n});\n\nexport const NumberInputField = ChakraNumberInput.Input;\nexport const NumberInputScrubber = ChakraNumberInput.Scrubber;\nexport const NumberInputLabel = ChakraNumberInput.Label;\n","import { Slider as ChakraSlider } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SliderProps extends ChakraSlider.RootProps {}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(function Slider(props, ref) {\n const { children, ...rest } = props;\n\n return (\n <ChakraSlider.Root ref={ref} variant=\"solid\" {...rest}>\n <ChakraSlider.Control>\n <ChakraSlider.Track borderRadius=\"0\">\n <ChakraSlider.Range />\n </ChakraSlider.Track>\n <ChakraSlider.Thumbs />\n </ChakraSlider.Control>\n {children}\n </ChakraSlider.Root>\n );\n});\n","import { Box, Flex, type NumberInputValueChangeDetails, type SliderValueChangeDetails } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { NumberInputField, NumberInputRoot } from \"../number-input\";\nimport { Slider } from \"../slider\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface NumberInputProps {\n id: string;\n defaultValue: number;\n name: string;\n step?: number;\n min?: number;\n max?: number;\n onChange: (id: string, value: number) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n hideSlider?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n fullWidth?: boolean;\n}\n\nexport const NumberInput = (props: NumberInputProps) => {\n const {\n id,\n defaultValue,\n name,\n step = 1,\n min,\n max,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n hideSlider = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const isRange = min !== undefined && max !== undefined;\n const showSlider = isRange && !hideSlider;\n const useFullWidthLayout = fullWidth && !showSlider;\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const scheduleChange = (nextValue: number) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{value}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {useFullWidthLayout ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <NumberInputRoot\n disabled={readOnly}\n width=\"100%\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <NumberInputRoot\n disabled={readOnly}\n width=\"5rem\"\n size=\"sm\"\n value={`${value}`}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: NumberInputValueChangeDetails) => {\n const next = Number.isNaN(details.valueAsNumber) ? (min ?? 0) : details.valueAsNumber;\n setValue(next);\n scheduleChange(next);\n }}\n >\n <NumberInputField\n className=\"nodrag\"\n h=\"2rem\"\n readOnly={readOnly}\n placeholder={hideLabel ? name : undefined}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </NumberInputRoot>\n </Flex>\n )}\n {showSlider && (\n <Slider\n size=\"sm\"\n disabled={readOnly}\n value={[value]}\n step={step}\n min={min}\n max={max}\n onValueChange={(details: SliderValueChangeDetails) => {\n setValue(details.value[0]);\n }}\n onValueChangeEnd={(details: SliderValueChangeDetails) => {\n onChange(id, details.value[0]);\n }}\n />\n )}\n </Box>\n );\n};\n","import { Box, Button, Flex, Icon, Menu } from \"@chakra-ui/react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface Option {\n id: string;\n name: string;\n icon?: string;\n}\n\ninterface SelectionInputProps {\n id: string;\n defaultValue: string | string[];\n name: string;\n options: Option[];\n onChange: (id: string, value: string | string[]) => void;\n description: string;\n readOnly?: boolean;\n hideLabel?: boolean;\n multiSelect?: boolean;\n tooltipPlacement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n placeholder?: string;\n fullWidth?: boolean;\n}\n\nexport const SelectionInput = (props: SelectionInputProps) => {\n const {\n id,\n defaultValue,\n name,\n options,\n onChange,\n description,\n readOnly,\n hideLabel = false,\n multiSelect = false,\n placeholder,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string | string[]) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const isSelected = (optionId: string) => {\n if (multiSelect) {\n return Array.isArray(value) && value.includes(optionId);\n }\n return value === optionId;\n };\n\n const getDisplayText = () => {\n if (multiSelect) {\n const selectedValues = Array.isArray(value) ? value : [];\n if (selectedValues.length === 0) {\n return placeholder || `Select`;\n }\n\n const selectedOptions = selectedValues\n .map((id) => options.find((o) => o.id === id))\n .filter(Boolean)\n .map((opt) => opt!.name);\n\n if (selectedOptions.length <= 3) {\n return selectedOptions.join(\", \");\n }\n const displayItems = selectedOptions.slice(0, 3).join(\", \");\n const remaining = selectedOptions.length - 3;\n return `${displayItems} +${remaining}`;\n }\n const selectedOption = options.find((o) => o.id === value);\n return selectedOption?.name || \"Select\";\n };\n\n const handleSelect = (newValue: string) => {\n if (multiSelect) {\n const currentValues = Array.isArray(value) ? value : [];\n let updatedValues: string[];\n\n if (currentValues.includes(newValue)) {\n updatedValues = currentValues.filter((v) => v !== newValue);\n } else {\n updatedValues = [...currentValues, newValue];\n }\n\n setValue(updatedValues);\n scheduleChange(updatedValues);\n } else {\n setValue(newValue);\n scheduleChange(newValue);\n }\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue>{getDisplayText()}</ParamEditorReadOnlyValue>;\n\n if (fullWidth) {\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {fullWidth ? (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button\n size=\"sm\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor=\"border\"\n disabled={readOnly}\n width=\"100%\"\n >\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap=\"xs\" w=\"full\">\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n </Flex>\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Box>\n ) : (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Menu.Root closeOnSelect={!multiSelect}>\n <Menu.Trigger asChild>\n <Button size=\"sm\" borderWidth=\"1px\" borderStyle=\"solid\" borderColor=\"border\" disabled={readOnly}>\n <Flex alignItems=\"center\" gap=\"xs\">\n {getDisplayText()}\n <ChevronDown size={14} />\n </Flex>\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content>\n {options.map((opt) => (\n <Menu.Item key={opt.id} value={opt.id} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={opt.id}\n label={opt.name}\n endContent={multiSelect && isSelected(opt.id) ? <Icon as={Check} boxSize=\"12px\" /> : undefined}\n onActivate={() => handleSelect(opt.id)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n </Flex>\n )}\n </Box>\n );\n};\n","import { Box, Flex, Input, Textarea } from \"@chakra-ui/react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\n\ninterface TextInputProps {\n id: string;\n defaultValue: string;\n name: string;\n onChange: (id: string, value: string) => void;\n description: string;\n readOnly?: boolean;\n singleLine?: boolean;\n hideLabel?: boolean;\n fullWidth?: boolean;\n}\n\nexport const TextInput = (props: TextInputProps) => {\n const {\n id,\n defaultValue,\n name,\n onChange,\n description,\n readOnly,\n singleLine = true,\n hideLabel = false,\n fullWidth = false,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const scheduleChange = (nextValue: string) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => onChange(id, nextValue), 540);\n };\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n scheduleChange(newValue);\n };\n\n if (readOnly) {\n const valueElement = <ParamEditorReadOnlyValue preserveWhitespace={!singleLine}>{value}</ParamEditorReadOnlyValue>;\n\n if (singleLine && !fullWidth) {\n return (\n <Box>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n {valueElement}\n </Flex>\n </Box>\n );\n }\n\n return (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {valueElement}\n </Box>\n );\n }\n\n return (\n <Box>\n {singleLine && !fullWidth ? (\n <Flex alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n {!hideLabel && <ParamEditorLabel name={name} description={description} />}\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n flex=\"1\"\n maxW=\"12.5rem\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n </Flex>\n ) : (\n <Box>\n {!hideLabel && (\n <Box mb=\"xs\">\n <ParamEditorLabel name={name} description={description} />\n </Box>\n )}\n {singleLine ? (\n <Input\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n type=\"text\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n onKeyUp={(e) => {\n if (e.key === \"Enter\") {\n e.currentTarget.blur();\n }\n }}\n />\n ) : (\n <Textarea\n className=\"nodrag\"\n readOnly={readOnly}\n width=\"100%\"\n size=\"sm\"\n placeholder={hideLabel ? name : undefined}\n value={value}\n onChange={(e) => handleChange(e.target.value)}\n rows={3}\n resize=\"vertical\"\n />\n )}\n </Box>\n )}\n </Box>\n );\n};\n","import { Box, Button, Collapsible, Flex, Stack, Text, useDisclosure } from \"@chakra-ui/react\";\nimport { ChevronDown, ChevronLeft } from \"lucide-react\";\nimport { ColorInput } from \"./color-input\";\nimport { DateInput } from \"./date-input\";\nimport { NumberInput } from \"./number-input\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\nimport { SelectionInput } from \"./selection-input\";\nimport { TextInput } from \"./text-input\";\n\ninterface InputGroupComponentProps {\n group: InputGroup;\n defaultValues: ParamValueMap;\n onChange: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const InputGroupComponent = (props: InputGroupComponentProps) => {\n const { group, defaultValues, onChange, readOnly, fullWidth = false } = props;\n const { open, onToggle } = useDisclosure({\n defaultOpen: !group.defaultCollapsed,\n });\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={onChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n min={param.min}\n max={param.max}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={onChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Box>\n {group.collapsible ? (\n <Button variant=\"ghost\" size=\"xs\" onClick={onToggle} pl={0} _hover={{ bg: \"transparent\" }}>\n <Flex alignItems=\"center\" gap=\"xs\">\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n {open ? <ChevronDown size={14} /> : <ChevronLeft size={14} />}\n </Flex>\n </Button>\n ) : (\n <Text textStyle=\"label/M/medium\">{group.title}</Text>\n )}\n\n {group.description && (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" mb=\"sm\">\n {group.description}\n </Text>\n )}\n\n <Collapsible.Root open={group.collapsible ? open : true}>\n <Collapsible.Content>\n <Stack gap=\"md\">{group.params.map(renderParam)}</Stack>\n </Collapsible.Content>\n </Collapsible.Root>\n </Box>\n );\n};\n","import { Box, Flex, Separator, Stack } from \"@chakra-ui/react\";\nimport { Fragment } from \"react\";\nimport { ColorInput } from \"./color-input\";\nimport { DateInput } from \"./date-input\";\nimport { InputGroupComponent } from \"./input-group\";\nimport { NumberInput } from \"./number-input\";\nimport type { InputGroup, Param, ParamValue, ParamValueMap } from \"./param-editor.types\";\nimport { ParamEditorLabel } from \"./param-editor-label\";\nimport { ParamEditorReadOnlyValue } from \"./param-editor-read-only-value\";\nimport { SelectionInput } from \"./selection-input\";\nimport { TextInput } from \"./text-input\";\n\nexport interface ParamEditorProps {\n params?: Param[];\n groups?: InputGroup[];\n defaultValues?: ParamValueMap;\n onChange?: (id: string, value: ParamValue) => void;\n readOnly?: boolean;\n fullWidth?: boolean;\n}\n\nconst resolveDefaultValue = <T,>(defaultValues: ParamValueMap, paramId: string, fallback: T) => {\n return defaultValues[paramId] === undefined ? fallback : (defaultValues[paramId] as T);\n};\n\nexport const ParamEditor = (props: ParamEditorProps) => {\n const { params = [], groups = [], defaultValues = {}, onChange, readOnly, fullWidth = false } = props;\n const handleChange = onChange ?? (() => undefined);\n\n const renderNumberParam = (param: Extract<Param, { type: \"number\" }>) => (\n <NumberInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n step={param.step}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderTextParam = (param: Extract<Param, { type: \"text\" }>) => (\n <TextInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n singleLine={param.singleLine}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderSelectionParam = (param: Extract<Param, { type: \"selection\" }>) => (\n <SelectionInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n options={param.options}\n onChange={handleChange}\n multiSelect={param.multiSelect}\n placeholder={param.placeholder}\n fullWidth={fullWidth}\n />\n );\n\n const renderDateParam = (param: Extract<Param, { type: \"date\" }>) => (\n <DateInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue ?? param.min)}\n min={param.min}\n max={param.max}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderColorParam = (param: Extract<Param, { type: \"color\" }>) => (\n <ColorInput\n readOnly={readOnly}\n id={param.id}\n key={param.id}\n name={param.name}\n description={param.description || \"\"}\n defaultValue={resolveDefaultValue(defaultValues, param.id, param.defaultValue)}\n onChange={handleChange}\n fullWidth={fullWidth}\n />\n );\n\n const renderPropertyParam = (param: Extract<Param, { type: \"property\" }>) => {\n if (fullWidth) {\n return (\n <Box key={param.id}>\n <Box mb=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n </Box>\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Box>\n );\n }\n\n return (\n <Flex key={param.id} alignItems=\"center\" justifyContent=\"space-between\" minHeight=\"2rem\" gap=\"xs\">\n <ParamEditorLabel name={param.name} description={param.description} />\n <ParamEditorReadOnlyValue>{param.value}</ParamEditorReadOnlyValue>\n </Flex>\n );\n };\n\n const renderParam = (param: Param) => {\n switch (param.type) {\n case \"number\":\n return renderNumberParam(param);\n case \"text\":\n return renderTextParam(param);\n case \"selection\":\n return renderSelectionParam(param);\n case \"date\":\n return renderDateParam(param);\n case \"color\":\n return renderColorParam(param);\n case \"property\":\n return renderPropertyParam(param);\n default:\n return null;\n }\n };\n\n return (\n <Stack flex=\"1\" maxW=\"full\" gap=\"sm\">\n {params.map(renderParam)}\n\n {params.length > 0 && groups.length > 0 && <Separator borderColor=\"border.muted\" />}\n\n {groups.map((group, index) => (\n <Fragment key={group.id}>\n <InputGroupComponent\n group={group}\n defaultValues={defaultValues}\n onChange={handleChange}\n readOnly={readOnly}\n fullWidth={fullWidth}\n />\n {index < groups.length - 1 && <Separator borderColor=\"border.muted\" />}\n </Fragment>\n ))}\n </Stack>\n );\n};\n","import { Badge, Button, Dialog, Icon, Input, InputGroup, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUp, FileText, Folder, FolderOpen, Home, Search } from \"lucide-react\";\nimport { type KeyboardEvent, useEffect, useState } from \"react\";\nimport { ListRow } from \"./list-row/list-row\";\nimport { ScrollArea } from \"./scroll-area\";\n\nexport interface RepoPickerDialogEntry {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n}\n\ninterface RepoPickerDialogProps {\n open: boolean;\n title?: string;\n description?: string;\n currentPath?: string;\n entries: RepoPickerDialogEntry[];\n selectedPath?: string | null;\n selectedPaths?: string[];\n isLoading?: boolean;\n error?: string;\n isSelectDisabled?: boolean;\n onClose: () => void;\n onSelect: () => void;\n onSelectHomeDirectory: () => void;\n onSelectParentDirectory: () => void;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n}\n\nexport type { RepoPickerDialogProps };\n\nconst getEntryIcon = (entry: RepoPickerDialogEntry) => {\n if (!entry.isDirectory) return FileText;\n if (entry.isGitRepo) return FolderOpen;\n return Folder;\n};\n\nconst filterEntries = (entries: RepoPickerDialogEntry[], query: string) => {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return entries;\n }\n\n return entries.filter((entry) => `${entry.name} ${entry.path}`.toLowerCase().includes(normalizedQuery));\n};\n\ntype RepoPickerListEntryProps = {\n entry: RepoPickerDialogEntry;\n selectedPath: string | null;\n selectedPathSet: Set<string>;\n onEntryClick: (entry: RepoPickerDialogEntry) => void;\n};\n\nconst RepoPickerListEntry = (props: RepoPickerListEntryProps) => {\n const { entry, selectedPath, selectedPathSet, onEntryClick } = props;\n const isAlreadySelected = entry.isGitRepo && selectedPathSet.has(entry.path);\n const isDisabled = !entry.isDirectory || isAlreadySelected;\n\n const handleClick = () => {\n if (isAlreadySelected) {\n return;\n }\n\n onEntryClick(entry);\n };\n\n return (\n <ListRow\n variant=\"compact\"\n isSelected={selectedPath === entry.path}\n id={entry.path}\n label={entry.name}\n icon={<Icon as={getEntryIcon(entry)} boxSize=\"16px\" />}\n endContent={\n entry.isGitRepo ? (\n <Badge\n textStyle=\"label/XS/medium\"\n px=\"xs\"\n py=\"2px\"\n colorPalette=\"green\"\n variant=\"subtle\"\n pointerEvents=\"none\"\n >\n Git repo\n </Badge>\n ) : undefined\n }\n disabled={isDisabled}\n onActivate={handleClick}\n />\n );\n};\n\nconst searchInputBorderProps = {\n borderColor: \"border.muted\",\n boxShadow: \"none\",\n outline: \"none\",\n} as const;\n\nconst searchInputFocusVisibleProps = {\n boxShadow: \"none\",\n outline: \"2px solid\",\n outlineColor: \"blue.border\",\n outlineOffset: \"-2px\",\n} as const;\n\nconst focusInlinePickerOption = (event: KeyboardEvent<HTMLDivElement>) => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)) {\n return;\n }\n\n const options = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]:not(:disabled)'),\n );\n\n if (options.length === 0) {\n return;\n }\n\n const currentIndex = options.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex = (() => {\n if (event.key === \"Home\") return 0;\n if (event.key === \"End\") return options.length - 1;\n if (event.key === \"ArrowUp\") return currentIndex <= 0 ? options.length - 1 : currentIndex - 1;\n return currentIndex < 0 || currentIndex === options.length - 1 ? 0 : currentIndex + 1;\n })();\n\n event.preventDefault();\n options[nextIndex]?.focus();\n};\n\nexport const RepoPickerDialog = (props: RepoPickerDialogProps) => {\n const {\n open,\n title = \"Select folder\",\n description,\n currentPath = \"\",\n entries,\n selectedPath = null,\n selectedPaths = [],\n isLoading = false,\n error = \"\",\n isSelectDisabled = false,\n onClose,\n onSelect,\n onSelectHomeDirectory,\n onSelectParentDirectory,\n onEntryClick,\n } = props;\n\n const [query, setQuery] = useState(\"\");\n const selectedPathSet = new Set(selectedPaths);\n const filteredEntries = filterEntries(entries, query);\n const searchScope = currentPath || \"Home\";\n\n useEffect(() => {\n if (!open || !searchScope) return;\n setQuery(\"\");\n }, [open, searchScope]);\n\n return (\n <Dialog.Root\n lazyMount\n unmountOnExit\n closeOnInteractOutside={false}\n open={open}\n onOpenChange={(details) => !details.open && onClose()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content>\n <Dialog.Header>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n </Dialog.Header>\n <Dialog.Body>\n <Stack gap=\"md\">\n <Stack direction=\"row\" gap=\"sm\" align=\"center\">\n <Button aria-label=\"Go to home directory\" variant=\"outline\" size=\"sm\" onClick={onSelectHomeDirectory}>\n <Home size={16} />\n </Button>\n <Button\n aria-label=\"Go to parent directory\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onSelectParentDirectory}\n disabled={!currentPath || currentPath === \"/\"}\n >\n <ChevronUp size={16} />\n </Button>\n <Text\n data-testid=\"folder-picker-path\"\n textStyle=\"paragraph/S/regular\"\n color=\"fg.muted\"\n flex=\"1\"\n lineClamp={1}\n >\n {searchScope}\n </Text>\n </Stack>\n\n <Stack gap=\"0\" borderWidth=\"1px\" borderRadius=\"md\" borderColor=\"border.muted\" overflow=\"hidden\">\n <InputGroup\n startElement={<Search size={14} />}\n width=\"full\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n >\n <Input\n borderWidth=\"0\"\n borderRadius=\"0\"\n value={query}\n placeholder=\"Search repositories\"\n aria-label=\"Search repositories\"\n autoComplete=\"off\"\n _hover={searchInputBorderProps}\n _active={searchInputBorderProps}\n _focus={searchInputBorderProps}\n _focusVisible={searchInputFocusVisibleProps}\n onChange={(event) => setQuery(event.target.value)}\n />\n </InputGroup>\n {isLoading ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Loading...\n </Text>\n ) : error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"red.500\" p=\"sm\">\n {error}\n </Text>\n ) : filteredEntries.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n No entries found.\n </Text>\n ) : (\n <ScrollArea maxHeight=\"320px\" contentProps={{ padding: \"sm\" }}>\n <Stack gap=\"xs\" role=\"listbox\" aria-label=\"Repository folders\" onKeyDown={focusInlinePickerOption}>\n {filteredEntries.map((entry) => (\n <RepoPickerListEntry\n key={entry.path}\n entry={entry}\n selectedPath={selectedPath}\n selectedPathSet={selectedPathSet}\n onEntryClick={onEntryClick}\n />\n ))}\n </Stack>\n </ScrollArea>\n )}\n </Stack>\n </Stack>\n </Dialog.Body>\n <Dialog.Footer>\n <Stack direction=\"row\" gap=\"sm\">\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={onSelect} disabled={isSelectDisabled}>\n Select repository\n </Button>\n </Stack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface SidebarSnapshot {\n open: boolean;\n expandedSections: string[];\n expandedNodes: string[];\n width: number | null;\n}\n\ninterface SidebarState extends SidebarSnapshot {\n openSidebar: () => void;\n closeSidebar: () => void;\n toggleSidebar: () => void;\n toggleSection: (sectionId: string) => void;\n toggleNode: (nodeId: string) => void;\n setSectionExpanded: (sectionId: string, expanded: boolean) => void;\n setNodeExpanded: (nodeId: string, expanded: boolean) => void;\n setWidth: (width: number) => void;\n reset: () => void;\n}\n\ninterface CreateSidebarStoreOptions {\n storageKey: string;\n initialState?: Partial<SidebarSnapshot>;\n}\n\nconst DEFAULT_SNAPSHOT = {\n open: true,\n expandedSections: [],\n expandedNodes: [],\n width: null,\n} satisfies SidebarSnapshot;\n\nconst SIDEBAR_STORE_NAMESPACE = \"pstdio/ui/sidebar\";\n\nconst toStorageName = (storageKey: string) => `${SIDEBAR_STORE_NAMESPACE}/${storageKey}`;\n\nconst toggleId = (values: string[], id: string) =>\n values.includes(id) ? values.filter((value) => value !== id) : [...values, id];\n\nconst setExpanded = (values: string[], id: string, expanded: boolean) => {\n if (expanded) {\n return values.includes(id) ? values : [...values, id];\n }\n\n return values.filter((value) => value !== id);\n};\n\nconst getPersistedSnapshot = (state: SidebarState) => ({\n open: state.open,\n expandedSections: state.expandedSections,\n expandedNodes: state.expandedNodes,\n width: state.width,\n});\n\nexport const createSidebarStore = (options: CreateSidebarStoreOptions) => {\n const { storageKey, initialState } = options;\n const snapshot = { ...DEFAULT_SNAPSHOT, ...initialState };\n\n return createStore<SidebarState>()(\n persist(\n (set) => ({\n ...snapshot,\n openSidebar: () => set((state) => ({ ...state, open: true })),\n closeSidebar: () => set((state) => ({ ...state, open: false })),\n toggleSidebar: () => set((state) => ({ ...state, open: !state.open })),\n toggleSection: (sectionId) =>\n set((state) => ({\n ...state,\n expandedSections: toggleId(state.expandedSections, sectionId),\n })),\n toggleNode: (nodeId) =>\n set((state) => ({\n ...state,\n expandedNodes: toggleId(state.expandedNodes, nodeId),\n })),\n setSectionExpanded: (sectionId, expanded) =>\n set((state) => ({\n ...state,\n expandedSections: setExpanded(state.expandedSections, sectionId, expanded),\n })),\n setNodeExpanded: (nodeId, expanded) =>\n set((state) => ({\n ...state,\n expandedNodes: setExpanded(state.expandedNodes, nodeId, expanded),\n })),\n setWidth: (width) => set((state) => ({ ...state, width })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n};\n\nconst sidebarStoreRegistry = new Map<string, ReturnType<typeof createSidebarStore>>();\n\nexport const getSidebarStore = (storageKey: string, initialState?: Partial<SidebarSnapshot>) => {\n const existingStore = sidebarStoreRegistry.get(storageKey);\n\n if (existingStore) {\n return existingStore;\n }\n\n const store = createSidebarStore({ storageKey, initialState });\n sidebarStoreRegistry.set(storageKey, store);\n\n return store;\n};\n\nexport const useSidebarStore = <T>(\n storageKey: string,\n selector: (state: SidebarState) => T,\n initialState?: Partial<SidebarSnapshot>,\n) => {\n const store = getSidebarStore(storageKey, initialState);\n return useStore(store, selector);\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface SidebarFooterProps {\n children?: ReactNode;\n}\n\nexport const SidebarFooter = (props: SidebarFooterProps) => {\n const { children } = props;\n\n if (!children) {\n return null;\n }\n\n return (\n <Box bg=\"bg\" position=\"sticky\" bottom=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n","export const PANEL_HEADER_HEIGHT = \"2.5rem\";\n","import { HStack } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { PANEL_HEADER_HEIGHT } from \"../panel-header.constants\";\n\ninterface SidebarHeaderProps {\n children?: ReactNode;\n}\n\nexport const SidebarHeader = (props: SidebarHeaderProps) => {\n const { children } = props;\n\n return (\n <HStack\n data-testid=\"sidebar-header\"\n justify=\"space-between\"\n align=\"center\"\n minH={PANEL_HEADER_HEIGHT}\n bg=\"bg\"\n position=\"sticky\"\n top=\"0\"\n zIndex=\"1\"\n gap=\"0\"\n >\n <HStack minW=\"0\" flex=\"1\">\n {children}\n </HStack>\n </HStack>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { useEffect, useRef } from \"react\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { TreeList } from \"../tree-list/tree-list\";\nimport { useSidebarStore } from \"./sidebar.store\";\nimport type { SidebarProps } from \"./sidebar.types\";\nimport { SidebarFooter } from \"./sidebar-footer\";\nimport { SidebarHeader } from \"./sidebar-header\";\n\nconst DEFAULT_WIDTH = 240;\nconst DEFAULT_MIN_WIDTH = 200;\nconst DEFAULT_MAX_WIDTH = 480;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveInitialWidth = (width?: string | number, defaultWidth = DEFAULT_WIDTH) => {\n if (typeof width === \"number\") return width;\n if (typeof width === \"string\") {\n const parsed = parseInt(width, 10);\n if (!Number.isNaN(parsed)) return parsed;\n }\n return defaultWidth;\n};\n\nexport const Sidebar = (props: SidebarProps) => {\n const {\n storageKey,\n sections,\n activeNodeId,\n backgroundContextActions,\n header,\n footer,\n width,\n closable = true,\n emptyLabel = \"No items available.\",\n defaultExpandedSections,\n linkComponent,\n onNavigate,\n onOpenChange,\n resizable = true,\n defaultWidth,\n minWidth = DEFAULT_MIN_WIDTH,\n maxWidth = DEFAULT_MAX_WIDTH,\n virtualize = false,\n } = props;\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n\n const initialWidth = resolveInitialWidth(width, defaultWidth);\n const initialState = {\n ...(defaultExpandedSections ? { expandedSections: defaultExpandedSections } : {}),\n width: initialWidth,\n };\n\n const open = useSidebarStore(storageKey, (state) => state.open, initialState);\n const persistedWidth = useSidebarStore(storageKey, (state) => state.width, initialState);\n const expandedSections = useSidebarStore(storageKey, (state) => state.expandedSections, initialState);\n const expandedNodes = useSidebarStore(storageKey, (state) => state.expandedNodes, initialState);\n const toggleSection = useSidebarStore(storageKey, (state) => state.toggleSection, initialState);\n const toggleNode = useSidebarStore(storageKey, (state) => state.toggleNode, initialState);\n\n useEffect(() => {\n onOpenChange?.(open);\n }, [onOpenChange, open]);\n\n const effectiveWidth = clamp(persistedWidth ?? initialWidth, minWidth, maxWidth);\n if (!open && closable) {\n return null;\n }\n\n const widthCss = resizable ? `${effectiveWidth}px` : (width ?? `${initialWidth}px`);\n\n return (\n <Flex\n as=\"aside\"\n data-testid=\"sidebar\"\n direction=\"column\"\n position=\"relative\"\n h=\"100%\"\n w={widthCss}\n minW={widthCss}\n maxW={widthCss}\n flexShrink={0}\n borderRightWidth=\"1px\"\n borderRightColor=\"border.muted\"\n bg=\"bg\"\n >\n <SidebarHeader>{header}</SidebarHeader>\n\n <ScrollArea\n flex=\"1\"\n mt=\"lg\"\n viewportRef={viewportRef}\n viewportProps={{ display: \"block\", style: { overflowX: \"hidden\" } }}\n contentProps={{\n style: { minWidth: \"100%\", width: \"100%\", minHeight: \"100%\", display: \"flex\", flexDirection: \"column\" },\n }}\n >\n <Box w=\"full\" minW=\"0\" flex=\"1 0 auto\" display=\"flex\" flexDirection=\"column\">\n {sections.length === 0 ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"3\">\n {emptyLabel}\n </Text>\n ) : (\n <TreeList\n sections={sections}\n expandedSectionIds={expandedSections}\n expandedNodeIds={expandedNodes}\n activeNodeId={activeNodeId}\n backgroundContextActions={backgroundContextActions}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n linkComponent={linkComponent}\n onNavigate={onNavigate}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n virtualize={virtualize}\n scrollRef={viewportRef}\n />\n )}\n </Box>\n </ScrollArea>\n\n <SidebarFooter>{footer}</SidebarFooter>\n </Flex>\n );\n};\n","import { Avatar, Button, HStack, Icon, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { ChevronDown, FolderIcon } from \"lucide-react\";\nimport { ListRow } from \"../list-row/list-row\";\n\ninterface SidebarProjectMenuProps {\n name: string;\n projectsLabel: string;\n onSelectProjects: () => void;\n}\n\nexport const SidebarProjectMenu = (props: SidebarProjectMenuProps) => {\n const { name, projectsLabel, onSelectProjects } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button borderRadius=\"0\" variant=\"ghost\" size=\"sm\" width=\"full\" justifyContent=\"flex-start\">\n <HStack gap=\"xs\" minW=\"0\" flex=\"1\">\n <Avatar.Root size=\"2xs\">\n <Avatar.Fallback name={name} />\n </Avatar.Root>\n <Text textStyle=\"label/S/medium\" truncate>\n {name}\n </Text>\n </HStack>\n <ChevronDown size={14} />\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"240px\" bg=\"bg\">\n <Menu.Item value=\"projects\" asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id=\"projects\"\n label={projectsLabel}\n icon={<Icon as={FolderIcon} boxSize=\"16px\" />}\n onActivate={onSelectProjects}\n />\n </Menu.Item>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import { Switch as ChakraSwitch } from \"@chakra-ui/react\";\nimport * as React from \"react\";\n\nexport interface SwitchProps extends ChakraSwitch.RootProps {\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n rootRef?: React.RefObject<HTMLLabelElement | null>;\n trackLabel?: { on: React.ReactNode; off: React.ReactNode };\n thumbLabel?: { on: React.ReactNode; off: React.ReactNode };\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(function Switch(props, ref) {\n const { inputProps, children, rootRef, trackLabel, thumbLabel, disabled = false, ...rest } = props;\n const interactiveCursor = disabled ? \"not-allowed\" : \"pointer\";\n\n return (\n <ChakraSwitch.Root ref={rootRef} disabled={disabled} cursor={interactiveCursor} {...rest}>\n <ChakraSwitch.HiddenInput ref={ref} {...inputProps} />\n <ChakraSwitch.Control borderRadius=\"md\" cursor={interactiveCursor}>\n <ChakraSwitch.Thumb borderRadius=\"full\">\n {thumbLabel && (\n <ChakraSwitch.ThumbIndicator fallback={thumbLabel?.off}>{thumbLabel?.on}</ChakraSwitch.ThumbIndicator>\n )}\n </ChakraSwitch.Thumb>\n {trackLabel && <ChakraSwitch.Indicator fallback={trackLabel.off}>{trackLabel.on}</ChakraSwitch.Indicator>}\n </ChakraSwitch.Control>\n {children != null && <ChakraSwitch.Label cursor={interactiveCursor}>{children}</ChakraSwitch.Label>}\n </ChakraSwitch.Root>\n );\n});\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\n\ninterface TabVisibilitySnapshot {\n tabOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TabVisibilityState extends TabVisibilitySnapshot {\n setTab: (key: string, value: VisibilityOverride | undefined) => void;\n toggleTab: (key: string, hiddenByDefault: boolean) => void;\n clearTab: (key: string) => void;\n reset: () => void;\n}\n\ninterface CreateTabVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TabVisibilitySnapshot = { tabOverrides: {} };\n\nconst STORE_NAMESPACE = \"pstdio/ui/tab-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n key: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(key in overrides)) return overrides;\n const { [key]: _removed, ...rest } = overrides;\n return rest;\n }\n if (overrides[key] === value) return overrides;\n return { ...overrides, [key]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, key: string, hiddenByDefault: boolean) => {\n const current = resolveEffective(overrides[key], hiddenByDefault);\n return setOverride(overrides, key, current === \"hidden\" ? \"shown\" : \"hidden\");\n};\n\nconst getPersistedSnapshot = (state: TabVisibilityState) => ({ tabOverrides: state.tabOverrides });\n\nexport const createTabVisibilityStore = (options: CreateTabVisibilityStoreOptions) =>\n createStore<TabVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setTab: (key, value) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, value) })),\n toggleTab: (key, hiddenByDefault) =>\n set((state) => ({ ...state, tabOverrides: toggleOverride(state.tabOverrides, key, hiddenByDefault) })),\n clearTab: (key) =>\n set((state) => ({ ...state, tabOverrides: setOverride(state.tabOverrides, key, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTabVisibilityStore>>();\n\nexport const getTabVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n const store = createTabVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTabVisibilityStore = <T>(storageKey: string, selector: (state: TabVisibilityState) => T) => {\n const store = getTabVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TabVisibilitySnapshot, TabVisibilityState };\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { TreeListNode, TreeListSection } from \"./tree-list.types\";\nimport type { VisibilityOverride } from \"./tree-list-visibility.store\";\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nexport const resolveVisibility = (\n override: VisibilityOverride | undefined,\n hiddenByDefault: boolean | undefined,\n): VisibilityOverride => override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst isNodeVisible = (node: TreeListNode, nodeOverrides: Record<string, VisibilityOverride>) =>\n resolveVisibility(nodeOverrides[node.id], node.hiddenByDefault) === \"shown\";\n\nconst filterNodes = (nodes: TreeListNode[], nodeOverrides: Record<string, VisibilityOverride>): TreeListNode[] => {\n let changed = false;\n const next: TreeListNode[] = [];\n for (const node of nodes) {\n if (!isNodeVisible(node, nodeOverrides)) {\n changed = true;\n continue;\n }\n if (node.children && node.children.length > 0) {\n const filteredChildren = filterNodes(node.children, nodeOverrides);\n if (filteredChildren !== node.children) {\n changed = true;\n next.push({ ...node, children: filteredChildren });\n continue;\n }\n }\n next.push(node);\n }\n return changed ? next : nodes;\n};\n\nexport const filterVisibleSections = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n): TreeListSection[] => {\n let changed = false;\n const next: TreeListSection[] = [];\n for (const section of sections) {\n if (resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault) === \"hidden\") {\n changed = true;\n continue;\n }\n const filteredNodes = filterNodes(section.nodes, nodeOverrides);\n if (filteredNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: filteredNodes });\n continue;\n }\n next.push(section);\n }\n return changed ? next : sections;\n};\n\nexport interface TreeVisibilityMenuActions {\n onToggleSection: (id: string, hiddenByDefault: boolean) => void;\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n onResetOrder?: () => void;\n}\n\ninterface BuildMenuOptions {\n checkmark: ReactNode;\n}\n\nconst buildSectionAction = (\n section: TreeListSection,\n sectionOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = section.hiddenByDefault === true;\n const effective = resolveVisibility(sectionOverrides[section.id], hiddenByDefault);\n return {\n key: `section:${section.id}`,\n label: section.label ?? section.id,\n onClick: () => actions.onToggleSection(section.id, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n };\n};\n\nconst buildNodeAction = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction => {\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n // Locked nodes stay visible and are surfaced as a disabled, checked row.\n const locked = node.canHide === false;\n return {\n key: `node:${node.id}`,\n label: toStringLabel(node.label, node.id),\n isDisabled: locked,\n onClick: locked ? () => {} : () => actions.onToggleNode(node.id, hiddenByDefault),\n endContent: locked || effective === \"shown\" ? options.checkmark : null,\n };\n};\n\nexport const buildTreeVisibilityMenuActions = (\n sections: TreeListSection[],\n sectionOverrides: Record<string, VisibilityOverride>,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: TreeVisibilityMenuActions,\n options: BuildMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n\n for (const section of sections) {\n // Unlabeled sections are structural groupings, not user-facing toggle targets.\n if (section.label) result.push(buildSectionAction(section, sectionOverrides, actions, options));\n const sectionEffective = resolveVisibility(sectionOverrides[section.id], section.hiddenByDefault);\n if (sectionEffective === \"hidden\") continue;\n for (const node of section.nodes) {\n result.push(buildNodeAction(node, nodeOverrides, actions, options));\n }\n }\n\n result.push({ key: \"__reset-visibility\", label: \"Reset to default\", onClick: actions.onResetAll });\n if (actions.onResetOrder) {\n result.push({ key: \"__reset-order\", label: \"Reset order\", onClick: actions.onResetOrder });\n }\n\n return result;\n};\n","import type { ReactNode } from \"react\";\nimport type { ResourceContextAction } from \"../resource-context-menu\";\nimport type { VisibilityOverride } from \"../tree-list/tree-list-visibility.store\";\nimport { resolveVisibility } from \"../tree-list/tree-list-visibility-filter\";\n\nexport interface TabVisibilityPlacement {\n closable?: boolean;\n hiddenByDefault?: boolean;\n title?: string;\n contributionId: string;\n}\n\nexport const filterVisibleTabs = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n getKey: (placement: T) => string,\n): T[] => {\n let changed = false;\n const next: T[] = [];\n for (const placement of placements) {\n if (placement.closable === true) {\n next.push(placement);\n continue;\n }\n const effective = resolveVisibility(tabOverrides[getKey(placement)], placement.hiddenByDefault);\n if (effective === \"hidden\") {\n changed = true;\n continue;\n }\n next.push(placement);\n }\n return changed ? next : placements;\n};\n\nexport interface TabVisibilityMenuActions {\n onToggleTab: (key: string, hiddenByDefault: boolean) => void;\n onResetAll: () => void;\n}\n\ninterface BuildTabMenuOptions {\n checkmark: ReactNode;\n}\n\nexport const buildTabVisibilityMenuActions = <T extends TabVisibilityPlacement>(\n placements: T[],\n tabOverrides: Record<string, VisibilityOverride>,\n actions: TabVisibilityMenuActions,\n getKey: (placement: T) => string,\n options: BuildTabMenuOptions,\n): ResourceContextAction[] => {\n const result: ResourceContextAction[] = [];\n let nonCloseableCount = 0;\n\n for (const placement of placements) {\n if (placement.closable === true) continue;\n nonCloseableCount += 1;\n const key = getKey(placement);\n const hiddenByDefault = placement.hiddenByDefault === true;\n const effective = resolveVisibility(tabOverrides[key], hiddenByDefault);\n result.push({\n key: `tab:${key}`,\n label: placement.title ?? placement.contributionId,\n onClick: () => actions.onToggleTab(key, hiddenByDefault),\n endContent: effective === \"shown\" ? options.checkmark : null,\n });\n }\n\n if (nonCloseableCount === 0) return result;\n\n result.push({ key: \"__reset-tabs\", label: \"Reset to default\", onClick: actions.onResetAll });\n return result;\n};\n","import { Button, Editable, Flex, Icon, Menu, Table } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Check, ChevronDown, GripVertical, Trash2 } from \"lucide-react\";\n\nimport { IconColorPicker, type IconColorPickerIconOption } from \"../icon-color-picker\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { TagEditorAction, TagEditorValue } from \"./tag-editor.types\";\n\ninterface TagEditorRowProps {\n actionOptions?: TagEditorAction[];\n colorOptions?: readonly string[];\n iconOptions?: readonly IconColorPickerIconOption[];\n value: TagEditorValue;\n isSaving?: boolean;\n showDefault?: boolean;\n showIcons?: boolean;\n onActionsChange: (actions: string[]) => void;\n onColorChange: (color: string) => void;\n onDelete: () => void;\n onIconChange: (icon: string | null) => void;\n onNameChange: (name: string) => void;\n onSetDefault: () => void;\n}\n\nconst ActionDropdown = (props: {\n actions: string[];\n disabled?: boolean;\n options: TagEditorAction[];\n onChange: (actions: string[]) => void;\n}) => {\n const { actions, disabled, options, onChange } = props;\n\n const toggleAction = (action: string) => {\n onChange(actions.includes(action) ? actions.filter((item) => item !== action) : [...actions, action]);\n };\n\n return (\n <Menu.Root closeOnSelect={false}>\n <Menu.Trigger asChild>\n <Button size=\"2xs\" variant=\"outline\" gap=\"xs\" disabled={disabled}>\n {actions.length} action{actions.length !== 1 ? \"s\" : \"\"}\n <Icon as={ChevronDown} boxSize=\"12px\" />\n </Button>\n </Menu.Trigger>\n <Menu.Positioner>\n <Menu.Content minW=\"160px\" bg=\"bg\">\n {options.map((option) => (\n <Menu.Item key={option.value} value={option.value} asChild>\n <ListRow\n asChild\n variant=\"compact\"\n id={option.value}\n label={option.label}\n isSelected={actions.includes(option.value)}\n endContent={actions.includes(option.value) ? <Check size={14} /> : undefined}\n onActivate={() => toggleAction(option.value)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Menu.Root>\n );\n};\n\nexport const TagEditorRow = (props: TagEditorRowProps) => {\n const {\n actionOptions,\n colorOptions,\n iconOptions,\n value,\n isSaving,\n showDefault,\n showIcons,\n onActionsChange,\n onColorChange,\n onDelete,\n onIconChange,\n onNameChange,\n onSetDefault,\n } = props;\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: value.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <Table.Row ref={setNodeRef} style={style}>\n <Table.Cell width=\"40px\">\n <Flex cursor=\"grab\" {...attributes} {...listeners}>\n <GripVertical size={14} color=\"var(--chakra-colors-fg-muted)\" />\n </Flex>\n </Table.Cell>\n <Table.Cell>\n <Editable.Root\n defaultValue={value.name}\n onValueCommit={(details) => {\n const trimmed = details.value.trim();\n if (trimmed && trimmed !== value.name) onNameChange(trimmed);\n }}\n >\n <Editable.Preview />\n <Editable.Input />\n </Editable.Root>\n </Table.Cell>\n <Table.Cell width=\"54px\">\n <IconColorPicker\n color={value.color}\n colorOptions={colorOptions}\n icon={value.icon}\n iconOptions={iconOptions}\n showIcons={showIcons}\n onColorChange={onColorChange}\n onIconChange={onIconChange}\n disabled={isSaving}\n />\n </Table.Cell>\n {showDefault ? (\n <Table.Cell width=\"80px\">\n <Button\n size=\"2xs\"\n variant={value.isDefault ? \"solid\" : \"ghost\"}\n onClick={onSetDefault}\n disabled={isSaving || value.isDefault}\n aria-label={`Set ${value.name} as default`}\n >\n <Check size={14} />\n </Button>\n </Table.Cell>\n ) : null}\n {actionOptions ? (\n <Table.Cell width=\"140px\">\n <ActionDropdown\n actions={value.actions ?? []}\n disabled={isSaving}\n options={actionOptions}\n onChange={onActionsChange}\n />\n </Table.Cell>\n ) : null}\n <Table.Cell width=\"40px\">\n <Button\n size=\"2xs\"\n variant=\"ghost\"\n colorPalette=\"red\"\n onClick={onDelete}\n disabled={isSaving || value.isDefault}\n aria-label={`Delete ${value.name}`}\n >\n <Trash2 size={14} />\n </Button>\n </Table.Cell>\n </Table.Row>\n );\n};\n","import { Button, Flex, HStack, Input, Stack, Table, Text } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { Plus, X } from \"lucide-react\";\nimport type { KeyboardEvent } from \"react\";\nimport { useState } from \"react\";\n\nimport { DeleteConfirmationModal } from \"../delete-confirmation-modal\";\nimport { IconColorPicker } from \"../icon-color-picker\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\nimport { TagEditorRow } from \"./tag-editor-row\";\n\ninterface AddFormState {\n name: string;\n color: string;\n icon: string | null;\n}\n\nconst buildDraftItem = (form: AddFormState, sortOrder: number) => ({\n id: `new-${crypto.randomUUID()}`,\n name: form.name.trim(),\n color: form.color,\n icon: form.icon,\n sortOrder,\n isNew: true,\n});\n\nexport const TagEditor = (props: TagEditorProps) => {\n const {\n title,\n description,\n values,\n onValuesChange,\n onSave,\n onCancel,\n onDeleteValue,\n onSetDefault,\n hasChanges,\n isSaving,\n addLabel = \"Add tag\",\n addPlaceholder = \"Tag name\",\n actionOptions,\n actionsColumnLabel = \"Actions\",\n cancelLabel = \"Cancel\",\n colorOptions,\n defaultAddColor = \"blue\",\n defaultAddIcon = null,\n defaultColumnLabel = \"Default\",\n deleteButtonText = \"Delete tag\",\n deleteHeadline = \"Delete tag?\",\n deleteNotificationText = (value) => `This will delete \"${value.name}\".`,\n iconOptions,\n saveLabel = \"Save\",\n showDefault,\n showIcons = true,\n valueColumnLabel = \"Name\",\n } = props;\n const [isAdding, setIsAdding] = useState(false);\n const [addForm, setAddForm] = useState<AddFormState>({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n const [valueToDelete, setValueToDelete] = useState<TagEditorValue | null>(null);\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n const resetAddForm = () => {\n setIsAdding(false);\n setAddForm({ name: \"\", color: defaultAddColor, icon: defaultAddIcon });\n };\n\n const updateValue = (index: number, patch: Partial<TagEditorValue>) => {\n const next = [...values];\n next[index] = { ...next[index], ...patch };\n onValuesChange(next);\n };\n\n const handleAddOption = () => {\n if (!addForm.name.trim()) return;\n const maxOrder = values.length > 0 ? Math.max(...values.map((value) => value.sortOrder)) : 0;\n onValuesChange([...values, buildDraftItem(addForm, maxOrder + 1)]);\n resetAddForm();\n };\n\n const handleDeleteOption = () => {\n if (!valueToDelete) return;\n if (onDeleteValue) {\n onDeleteValue(valueToDelete);\n } else {\n onValuesChange(values.filter((value) => value.id !== valueToDelete.id));\n }\n setValueToDelete(null);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = values.findIndex((value) => value.id === active.id);\n const newIndex = values.findIndex((value) => value.id === over.id);\n if (oldIndex < 0 || newIndex < 0) return;\n\n onValuesChange(arrayMove(values, oldIndex, newIndex).map((value, index) => ({ ...value, sortOrder: index })));\n };\n\n const handleAddKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") handleAddOption();\n if (event.key === \"Escape\") resetAddForm();\n };\n\n return (\n <>\n <Stack gap=\"md\" height=\"100%\">\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap=\"sm\" flexWrap=\"wrap\">\n <Stack gap=\"2xs\">\n <Text textStyle=\"heading/S\">{title}</Text>\n {description ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n {description}\n </Text>\n ) : null}\n </Stack>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsAdding(true)} disabled={isAdding || isSaving}>\n <Plus size={16} />\n {addLabel}\n </Button>\n </Flex>\n\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={values.map((value) => value.id)} strategy={verticalListSortingStrategy}>\n <Table.Root size=\"sm\" variant=\"outline\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader width=\"40px\" />\n <Table.ColumnHeader>{valueColumnLabel}</Table.ColumnHeader>\n <Table.ColumnHeader width=\"54px\" />\n {showDefault ? <Table.ColumnHeader width=\"80px\">{defaultColumnLabel}</Table.ColumnHeader> : null}\n {actionOptions ? <Table.ColumnHeader width=\"140px\">{actionsColumnLabel}</Table.ColumnHeader> : null}\n <Table.ColumnHeader width=\"40px\" />\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {values.map((value, index) => (\n <TagEditorRow\n key={value.id}\n value={value}\n isSaving={isSaving}\n showDefault={showDefault}\n showIcons={showIcons}\n actionOptions={actionOptions}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onNameChange={(name) => updateValue(index, { name })}\n onColorChange={(color) => updateValue(index, { color })}\n onIconChange={(icon) => updateValue(index, { icon })}\n onActionsChange={(actions) => updateValue(index, { actions })}\n onSetDefault={() => onSetDefault?.(value)}\n onDelete={() => setValueToDelete(value)}\n />\n ))}\n {isAdding ? (\n <Table.Row>\n <Table.Cell />\n <Table.Cell>\n <Input\n size=\"xs\"\n placeholder={addPlaceholder}\n value={addForm.name}\n onChange={(event) => setAddForm({ ...addForm, name: event.target.value })}\n onKeyDown={handleAddKeyDown}\n autoFocus\n />\n </Table.Cell>\n <Table.Cell>\n <IconColorPicker\n color={addForm.color}\n icon={addForm.icon}\n showIcons={showIcons}\n colorOptions={colorOptions}\n iconOptions={iconOptions}\n onColorChange={(color) => setAddForm({ ...addForm, color })}\n onIconChange={(icon) => setAddForm({ ...addForm, icon })}\n />\n </Table.Cell>\n {showDefault ? <Table.Cell /> : null}\n {actionOptions ? <Table.Cell /> : null}\n <Table.Cell>\n <HStack gap=\"2xs\">\n <Button size=\"2xs\" variant=\"primary\" onClick={handleAddOption} disabled={!addForm.name.trim()}>\n Add\n </Button>\n <Button size=\"2xs\" variant=\"ghost\" onClick={resetAddForm} aria-label=\"Cancel add value\">\n <X size={14} />\n </Button>\n </HStack>\n </Table.Cell>\n </Table.Row>\n ) : null}\n </Table.Body>\n </Table.Root>\n </SortableContext>\n </DndContext>\n\n <Flex justifyContent=\"flex-end\">\n <HStack gap=\"xs\">\n <Button size=\"sm\" variant=\"outline\" onClick={onCancel} disabled={!hasChanges || isSaving}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" variant=\"primary\" onClick={onSave} loading={isSaving} disabled={!hasChanges}>\n {saveLabel}\n </Button>\n </HStack>\n </Flex>\n </Stack>\n\n <DeleteConfirmationModal\n open={Boolean(valueToDelete)}\n onClose={() => setValueToDelete(null)}\n onDelete={handleDeleteOption}\n headline={deleteHeadline}\n notificationText={valueToDelete ? deleteNotificationText(valueToDelete) : \"\"}\n buttonText={deleteButtonText}\n />\n </>\n );\n};\n","import { HStack, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { useEffect, useState } from \"react\";\nimport { AlertMessage } from \"../alert\";\nimport { TagEditor } from \"./tag-editor\";\nimport type { TagEditorProps, TagEditorValue } from \"./tag-editor.types\";\n\nexport interface SaveTagSettingsInput<TValue> {\n deletedIds: Set<string>;\n drafts: TagEditorValue[];\n values: TValue[];\n}\n\ntype EditorLabels = Pick<\n TagEditorProps,\n | \"actionOptions\"\n | \"actionsColumnLabel\"\n | \"addLabel\"\n | \"addPlaceholder\"\n | \"colorOptions\"\n | \"deleteButtonText\"\n | \"deleteHeadline\"\n | \"deleteNotificationText\"\n | \"description\"\n | \"iconOptions\"\n | \"showIcons\"\n | \"title\"\n | \"valueColumnLabel\"\n>;\n\ntype SortableValue = { id: string; sortOrder: number };\n\nexport interface TagSettingsPanelProps<TValue extends SortableValue> extends EditorLabels {\n errorTitle: string;\n loadingText?: string;\n /** Loaded values; pass undefined while the initial load is pending. */\n values: TValue[] | undefined;\n /** Load/save error surfaced by the host's data layer. */\n loadError?: unknown;\n /**\n * Persists the pending edits. The host owns fetching and cache invalidation;\n * the panel resets its delete tracking once the returned promise resolves.\n */\n onSave: (input: SaveTagSettingsInput<TValue>) => Promise<void>;\n toEditorValue: (value: TValue) => TagEditorValue;\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean;\n}\n\nconst bySortOrder = (left: TagEditorValue, right: TagEditorValue) =>\n left.sortOrder - right.sortOrder || left.name.localeCompare(right.name);\n\nconst toEditorValues = <TValue extends SortableValue>(\n values: TValue[],\n toEditorValue: (value: TValue) => TagEditorValue,\n) => values.map(toEditorValue).sort(bySortOrder);\n\nconst findOriginalValue = <TValue extends SortableValue>(values: TValue[], draft: TagEditorValue) =>\n values.find((value) => value.id === draft.id);\n\nconst hasTagValueChanges = <TValue extends SortableValue>(\n values: TValue[],\n drafts: TagEditorValue[],\n deletedIds: Set<string>,\n valueNeedsUpdate: (original: TValue, draft: TagEditorValue) => boolean,\n) => {\n if (deletedIds.size > 0) return true;\n\n return drafts.some((draft) => {\n if (draft.isNew) return true;\n const original = findOriginalValue(values, draft);\n if (!original) return true;\n return valueNeedsUpdate(original, draft) || draft.sortOrder !== original.sortOrder;\n });\n};\n\nconst errorMessage = (error: unknown) => (error instanceof Error ? error.message : error ? String(error) : null);\n\nexport const TagSettingsPanel = <TValue extends SortableValue>(props: TagSettingsPanelProps<TValue>) => {\n const {\n errorTitle,\n loadingText = \"Loading...\",\n values: loadedValues,\n loadError,\n onSave,\n toEditorValue,\n valueNeedsUpdate,\n ...editorProps\n } = props;\n const [drafts, setDrafts] = useState<TagEditorValue[]>([]);\n const [deletedIds, setDeletedIds] = useState<Set<string>>(new Set());\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<unknown>(null);\n\n const values = loadedValues ?? [];\n\n // Edits never refetch in the background, so loaded values only change on\n // initial load and after a save invalidates the host's cache — keeping local\n // drafts in sync.\n useEffect(() => {\n if (loadedValues) setDrafts(toEditorValues(loadedValues, toEditorValue));\n }, [loadedValues, toEditorValue]);\n\n const handleSave = async () => {\n setIsSaving(true);\n setSaveError(null);\n try {\n await onSave({ deletedIds, drafts, values });\n setDeletedIds(new Set());\n } catch (error) {\n setSaveError(error);\n } finally {\n setIsSaving(false);\n }\n };\n\n const hasChanges = hasTagValueChanges(values, drafts, deletedIds, valueNeedsUpdate);\n const error = errorMessage(loadError) ?? errorMessage(saveError);\n\n const handleDeleteValue = (value: TagEditorValue) => {\n if (!value.isNew) setDeletedIds(new Set([...deletedIds, value.id]));\n setDrafts(drafts.filter((draft) => draft.id !== value.id));\n };\n\n const handleCancel = () => {\n setDrafts(toEditorValues(values, toEditorValue));\n setDeletedIds(new Set());\n setSaveError(null);\n };\n\n return (\n <Stack boxSizing=\"border-box\" minH=\"100%\" p=\"lg\" gap=\"lg\" bg=\"bg\" color=\"fg\">\n {error ? (\n <AlertMessage status=\"error\" colorPalette=\"red\" title={errorTitle} size=\"sm\">\n {error}\n </AlertMessage>\n ) : null}\n {loadedValues === undefined ? (\n <HStack gap=\"sm\" color=\"fg.muted\">\n <Spinner size=\"sm\" />\n <Text textStyle=\"paragraph/S/regular\">{loadingText}</Text>\n </HStack>\n ) : (\n <TagEditor\n {...editorProps}\n values={drafts}\n onValuesChange={setDrafts}\n onDeleteValue={handleDeleteValue}\n hasChanges={hasChanges}\n isSaving={isSaving}\n onSave={() => void handleSave()}\n onCancel={handleCancel}\n />\n )}\n </Stack>\n );\n};\n","import { Toaster as ChakraToaster, createToaster, Portal, Spinner, Stack, Toast } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@/components/scroll-area\";\n\nexport const toaster: ReturnType<typeof createToaster> = createToaster({\n placement: \"top\",\n pauseOnPageIdle: true,\n duration: 10000,\n});\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }} alignItems=\"start\">\n {toast.type === \"loading\" ? <Spinner size=\"sm\" color=\"blue.solid\" /> : <Toast.Indicator />}\n <Stack gap=\"1\" flex=\"1\" minWidth=\"0\" maxWidth=\"100%\">\n {toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n {toast.description && (\n <ScrollArea maxHeight=\"12rem\" contentProps={{ paddingEnd: \"1\" }}>\n <Toast.Description whiteSpace=\"pre-wrap\" wordBreak=\"break-word\">\n {toast.description}\n </Toast.Description>\n </ScrollArea>\n )}\n </Stack>\n {toast.action && <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>}\n <Toast.CloseTrigger />\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n );\n};\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\ninterface TreeListOrderSnapshot {\n sectionOrder: string[];\n nodeOrderBySection: Record<string, string[]>;\n}\n\ninterface TreeListOrderState extends TreeListOrderSnapshot {\n setSectionOrder: (nextSectionIds: string[]) => void;\n setNodeOrder: (sectionId: string, nextNodeIds: string[]) => void;\n resetSectionOrder: () => void;\n resetNodeOrder: (sectionId: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListOrderStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListOrderSnapshot = {\n sectionOrder: [],\n nodeOrderBySection: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-order\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst dedupe = (ids: string[]) => {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const id of ids) {\n if (seen.has(id)) continue;\n seen.add(id);\n result.push(id);\n }\n return result;\n};\n\nconst getPersistedSnapshot = (state: TreeListOrderState) => ({\n sectionOrder: state.sectionOrder,\n nodeOrderBySection: state.nodeOrderBySection,\n});\n\nexport const createTreeListOrderStore = (options: CreateTreeListOrderStoreOptions) =>\n createStore<TreeListOrderState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSectionOrder: (nextSectionIds) => set((state) => ({ ...state, sectionOrder: dedupe(nextSectionIds) })),\n setNodeOrder: (sectionId, nextNodeIds) =>\n set((state) => ({\n ...state,\n nodeOrderBySection: { ...state.nodeOrderBySection, [sectionId]: dedupe(nextNodeIds) },\n })),\n resetSectionOrder: () => set((state) => ({ ...state, sectionOrder: [] })),\n resetNodeOrder: (sectionId) =>\n set((state) => {\n if (!(sectionId in state.nodeOrderBySection)) return state;\n const { [sectionId]: _removed, ...rest } = state.nodeOrderBySection;\n return { ...state, nodeOrderBySection: rest };\n }),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListOrderStore>>();\n\nexport const getTreeListOrderStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListOrderStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListOrderStore = <T>(storageKey: string, selector: (state: TreeListOrderState) => T) => {\n const store = getTreeListOrderStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListOrderSnapshot, TreeListOrderState };\n","import type { TreeListNode, TreeListSection } from \"./tree-list.types\";\n\nconst reorderBy = <T extends { id: string }>(items: T[], order: string[]): T[] => {\n if (order.length === 0) return items;\n\n const indexById = new Map(items.map((item, index) => [item.id, index]));\n const placed = new Set<number>();\n const next: T[] = [];\n\n for (const id of order) {\n const index = indexById.get(id);\n if (index === undefined || placed.has(index)) continue;\n placed.add(index);\n next.push(items[index]);\n }\n\n let changed = next.length > 0 && next.length !== items.length;\n for (let i = 0; i < items.length; i += 1) {\n if (placed.has(i)) continue;\n if (next.length !== i && !changed) changed = true;\n next.push(items[i]);\n }\n\n if (!changed) {\n for (let i = 0; i < items.length; i += 1) {\n if (items[i] !== next[i]) {\n changed = true;\n break;\n }\n }\n }\n\n return changed ? next : items;\n};\n\nexport const applyTreeListOrder = (\n sections: TreeListSection[],\n sectionOrder: string[],\n nodeOrderBySection: Record<string, string[]>,\n): TreeListSection[] => {\n let changed = false;\n const reorderedSections = reorderBy(sections, sectionOrder);\n if (reorderedSections !== sections) changed = true;\n\n const next: TreeListSection[] = [];\n for (const section of reorderedSections) {\n const nodeOrder = nodeOrderBySection[section.id];\n if (!nodeOrder || nodeOrder.length === 0) {\n next.push(section);\n continue;\n }\n const reorderedNodes = reorderBy(section.nodes, nodeOrder);\n if (reorderedNodes !== section.nodes) {\n changed = true;\n next.push({ ...section, nodes: reorderedNodes });\n } else {\n next.push(section);\n }\n }\n\n return changed ? next : sections;\n};\n\nexport const reorderNodesById = (nodes: TreeListNode[], order: string[]) => reorderBy(nodes, order);\n","import { useStore } from \"zustand\";\nimport { createJSONStorage, persist } from \"zustand/middleware\";\nimport { createStore } from \"zustand/vanilla\";\nimport { createBrowserStorage } from \"../../utils/browser-storage\";\n\nexport type VisibilityOverride = \"hidden\" | \"shown\";\n\ninterface TreeListVisibilitySnapshot {\n sectionOverrides: Record<string, VisibilityOverride>;\n nodeOverrides: Record<string, VisibilityOverride>;\n}\n\ninterface TreeListVisibilityState extends TreeListVisibilitySnapshot {\n setSection: (id: string, value: VisibilityOverride | undefined) => void;\n setNode: (id: string, value: VisibilityOverride | undefined) => void;\n toggleSection: (id: string, hiddenByDefault: boolean) => void;\n toggleNode: (id: string, hiddenByDefault: boolean) => void;\n clearSection: (id: string) => void;\n clearNode: (id: string) => void;\n reset: () => void;\n}\n\ninterface CreateTreeListVisibilityStoreOptions {\n storageKey: string;\n}\n\nconst DEFAULT_SNAPSHOT: TreeListVisibilitySnapshot = {\n sectionOverrides: {},\n nodeOverrides: {},\n};\n\nconst STORE_NAMESPACE = \"pstdio/ui/tree-list-visibility\";\n\nconst toStorageName = (storageKey: string) => `${STORE_NAMESPACE}/${storageKey}`;\n\nconst resolveEffective = (override: VisibilityOverride | undefined, hiddenByDefault: boolean): VisibilityOverride =>\n override ?? (hiddenByDefault ? \"hidden\" : \"shown\");\n\nconst flipOverride = (current: VisibilityOverride): VisibilityOverride => (current === \"hidden\" ? \"shown\" : \"hidden\");\n\nconst setOverride = (\n overrides: Record<string, VisibilityOverride>,\n id: string,\n value: VisibilityOverride | undefined,\n) => {\n if (value === undefined) {\n if (!(id in overrides)) return overrides;\n const { [id]: _removed, ...rest } = overrides;\n return rest;\n }\n\n if (overrides[id] === value) return overrides;\n return { ...overrides, [id]: value };\n};\n\nconst toggleOverride = (overrides: Record<string, VisibilityOverride>, id: string, hiddenByDefault: boolean) => {\n const next = flipOverride(resolveEffective(overrides[id], hiddenByDefault));\n return setOverride(overrides, id, next);\n};\n\nconst getPersistedSnapshot = (state: TreeListVisibilityState) => ({\n sectionOverrides: state.sectionOverrides,\n nodeOverrides: state.nodeOverrides,\n});\n\nexport const createTreeListVisibilityStore = (options: CreateTreeListVisibilityStoreOptions) =>\n createStore<TreeListVisibilityState>()(\n persist(\n (set) => ({\n ...DEFAULT_SNAPSHOT,\n setSection: (id, value) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, value) })),\n setNode: (id, value) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, value) })),\n toggleSection: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n sectionOverrides: toggleOverride(state.sectionOverrides, id, hiddenByDefault),\n })),\n toggleNode: (id, hiddenByDefault) =>\n set((state) => ({\n ...state,\n nodeOverrides: toggleOverride(state.nodeOverrides, id, hiddenByDefault),\n })),\n clearSection: (id) =>\n set((state) => ({ ...state, sectionOverrides: setOverride(state.sectionOverrides, id, undefined) })),\n clearNode: (id) =>\n set((state) => ({ ...state, nodeOverrides: setOverride(state.nodeOverrides, id, undefined) })),\n reset: () => set(DEFAULT_SNAPSHOT),\n }),\n {\n name: toStorageName(options.storageKey),\n storage: createJSONStorage(createBrowserStorage),\n partialize: getPersistedSnapshot,\n },\n ),\n );\n\nconst storeRegistry = new Map<string, ReturnType<typeof createTreeListVisibilityStore>>();\n\nexport const getTreeListVisibilityStore = (storageKey: string) => {\n const existing = storeRegistry.get(storageKey);\n if (existing) return existing;\n\n const store = createTreeListVisibilityStore({ storageKey });\n storeRegistry.set(storageKey, store);\n return store;\n};\n\nexport const useTreeListVisibilityStore = <T>(storageKey: string, selector: (state: TreeListVisibilityState) => T) => {\n const store = getTreeListVisibilityStore(storageKey);\n return useStore(store, selector);\n};\n\nexport type { TreeListVisibilitySnapshot, TreeListVisibilityState };\n","const readDefaultExport = (module: { default?: unknown }) => module.default ?? module;\n\nexport const installPrismGlobal = async () => {\n const globalScope = globalThis as typeof globalThis & { Prism?: unknown };\n if (globalScope.Prism) return;\n\n const prismModule = await import(\"prismjs\");\n globalScope.Prism = readDefaultExport(prismModule);\n};\n"],"names":["ActivityAvatar","props","$","_c","actor","icon","color","t0","background","t1","undefined","t2","Box","avatarSrc","t3","avatarAlt","name","t4","Avatar","t5","t6","t7","TimestampSeparator","Symbol","for","jsx","ActivityCommentHeader","timestamp","actions","Text","jsxs","Fragment","HStack","ActivityReply","children","rootProps","Stack","ActivityComment","composer","replies","hasReplies","Children","count","ActivityComposer","value","defaultValue","placeholder","variant","minRows","attachLabel","submitLabel","onAttach","onChange","onSubmit","internalValue","setInternalValue","useState","currentValue","isInline","canSubmit","trim","length","handleChange","nextValue","handleSubmit","event","preventDefault","chakra","borderColor","boxShadow","Textarea","outline","currentTarget","Spacer","Tooltip","IconButton","Icon","Paperclip","ArrowUp","EventSeparator","ActivityEvent","iconColor","iconBackground","Timeline","t8","ActivityRoot","ActivityHeader","title","ActivityFeed","ActivityTimeline","Activity","Root","Header","Feed","Event","Comment","Reply","Composer","DEFAULT_RESIZABLE_MIN_WIDTH","AttachedPanel","header","minWidth","rest","width","resizable","resolvedMinWidth","resolvedWidth","Flex","headerVariantStyles","main","h","px","narrow","input","React","forwardRef","ref","filterSearchableMenuItems","items","query","normalizedQuery","toLowerCase","filter","item","label","searchText","Boolean","join","includes","shouldResetSearchableMenuQuery","currentListId","nextListId","resolveActiveListConfig","isShowingParent","parentList","childConfig","filterItems","showSearch","searchPlaceholder","emptyState","contentTestId","closeOnSelect","listId","searchInputBorderProps","SearchableMenu","trigger","maxListHeight","lazyMount","open","positioning","onOpenChange","onFocusOutside","portalled","hasParentList","internalOpen","setInternalOpen","setQuery","activeList","setActiveList","inputRef","useRef","isOpen","config","filteredItems","previousListIdRef","useEffect","current","timeout","setTimeout","focus","clearTimeout","details","handleOpenChange","t9","details_0","find","i","id","onSelect","handleMenuItemSelect","renderIcon","_temp","t10","item_0","description","secondaryLabel","disabled","isDisabled","tooltip","tooltipLabel","buildRowItem","t11","ariaLabel","_temp2","event_0","stopPropagation","_temp3","ListRow","selectedLabel","selectedIcon","ChevronDown","resolvedHeader","shouldShowSeparator","searchInput","InputGroup","Search","Input","event_1","target","_temp4","t12","Menu","t13","t14","T0","Portal","t15","t16","t17","t18","t19","t20","t21","t22","T1","ScrollArea","t23","overscrollBehavior","t24","t25","t26","map","item_1","bg","isSelected","t27","t28","Content","t29","Positioner","t30","t31","event_2","SearchableActionMenu","action","menuItems","emptyMenuLabel","onAction","keyedTooltip","child","RowActions","context","opacity","pointerEvents","readOnly","endContent","RowContent","isExpanded","showChevron","tone","isDenseVariant","labelTextStyle","descriptionTextStyle","descriptionMarginLeft","bb0","labelColor","descriptionColor","ChevronRight","height","indicator","ListRowContent","nodeId","ListRowMenuItemIcon","ListRowMenu","placement","mainAxis","offset","separatorBefore","cursor","computePaddingLeft","depth","resolveListRowSizing","hasDescription","rowHeight","minHeight","createRowBackgroundProps","selectedBg","_hover","hoverBg","createResourceContextActions","entry","key","onClick","className","contextMenuItems","draggable","href","isContainer","isNavigable","menuPlacement","navigationIntent","onActivate","onDragEnd","onDragOver","onDragStart","onDrop","onPointerMove","onToggleExpand","roleProp","showExpandToggle","asChild","role","menuOpen","setMenuOpen","dragProps","hasChildren","hasMenuItems","handleActivate","defaultPrevented","handleClick","handleMenuClick","paddingLeft","verticalPadding","activationProps","rowRole","maxWidth","display","alignItems","justifyContent","gap","py","pl","borderRadius","overflow","textAlign","textDecoration","rowProps","content","children_0","ResourceContextMenu","wrapWithContextMenu","children_1","menuItem","wrapWithMenu","children_2","wrapWithTooltip","children_3","wrap","contentMinWidth","contentBackground","linkProps","minW","maxW","textOverflow","whiteSpace","_active","_focus","_focusVisible","staticProps","isInteractiveItem","url","BreadcrumbItemLink","isCurrent","linkComponent","LinkComponent","ChakraBreadcrumb","BreadcrumbItemContent","contextMenuActions","BreadcrumbSeparator","separator","Breadcrumb","separatorGap","index","BubbleButton","containerProps","button","BubblePanel","menu","onClose","closeLabel","onPopOut","popOutLabel","testId","SquareArrowOutUpRight","Minus","defaultThemePreferences","mode","isThemePreference","themePreferences","some","theme","getThemePreferenceMode","preference","getThemePreferenceClassName","getThemePreferenceClassNames","THEME_TOKEN_PATHS_ATTRIBUTE","getThemePreferenceCssVariableName","tokenPath","replaceAll","removeThemeTokens","el","tokens","Object","keys","style","removeProperty","removeTrackedThemeTokens","tokenPaths","getAttribute","split","setAttribute","applyThemeTokens","entries","setProperty","applyThemePreference","document","root","documentElement","body","option","previousTheme","previousPreference","classList","remove","add","colorScheme","noopStorage","getItem","removeItem","setItem","readLocalStorage","globalThis","localStorage","createBrowserStorage","storage","STORAGE_KEY","ThemePreferenceContext","createContext","getDefaultThemePreference","getInitialThemePreference","window","stored","prefersDark","matchMedia","matches","ThemePreferenceProvider","initialPreference","themePreference","setThemePreference","prev","nextMode","toggleThemePreference","useThemePreference","useContext","Error","customTheme","base","inherit","rules","colors","isMonacoTheme","EDITOR_THEME_NAME","useEditorTheme","monacoTheme","useApplyEditorTheme","editorTheme","monacoRef","monaco","editor","defineTheme","setTheme","monaco_0","CodeEditor","defaultCode","code","showLineNumbers","isEditable","language","disableScroll","applyEditorTheme","enabled","scrollbar","vertical","horizontal","useShadows","alwaysConsumeMouseWheel","scrollBeyondLastLine","mouseWheelScrollSensitivity","overviewRulerLanes","tabSize","minimap","fontSize","lineNumbers","options","languages","typescript","typescriptDefaults","setCompilerOptions","JsxEmit","addCommand","KeyMod","CtrlCmd","KeyCode","KeyS","getAction","run","Editor","CodeDiffEditor","original","modified","originalEditable","renderSideBySide","useInlineViewWhenSpaceIsTooSmall","_","DiffEditor","contentPlaceholderBackgroundImage","ContentPlaceholder","backgroundClip","backgroundImage","Label","resolveSessionIndicatorIcon","status","CircleCheck","CircleAlert","CircleStop","CirclePause","ClockAlert","CircleDashed","resolveSessionIndicatorColor","SessionIndicator","boxSize","ATTEMPT_STATUS_COLOR_ALIASES","amber","CHAKRA_COLOR_PALETTES","Set","resolveWorkspaceIcon","workspaceType","GitCommitIcon","GitBranchIcon","resolveAttemptStatusColor","startsWith","resolvedColor","has","buildAttemptStatusTooltip","attemptStatus","handleIconClick","handleBadgeClick","LeadingSessionIndicator","sessionStatus","onSessionIndicatorClick","sessionTooltip","WorkspaceTypeIndicator","initializing","shorthand","WorkspaceTypeIcon","displayLabel","Spinner","WorkspaceAttemptStatusIndicator","WorkspaceDiffTotals","diffAdditions","diffDeletions","WorkspaceDropdownTrigger","hasMultipleWorkspaces","onDropdownClick","WorkspaceBadge","showLeadingSessionIndicator","backgroundColor","Badge","suppressionKey","getInteractionGlobal","suppressNextDataRendererCardClick","Date","now","isDataRendererCardClickSuppressed","optionColors","optionIcons","Circle","Bug","Sparkles","BookOpen","Wrench","Gauge","Feather","Scale","Layers","AlertTriangle","Star","Flag","Flame","Lightbulb","Shield","Eye","Clock","CheckCircle","Tag","Code","ChartColumnIncreasing","CircleQuestionMark","ShieldAlert","getIconComponent","iconOptions","IconColorPicker","colorOptions","onColorChange","onIconChange","showIcons","IconComponent","Popover","optionColor","GridItem","Grid","NO_GROUPING","MANUAL_ORDERING","isEnumOptionsSource","Array","isArray","isAttributesSource","attributes","DEFAULT_DATA_RENDERER_SETTINGS","viewMode","columnGrouping","rowGrouping","ordering","attributeId","direction","displayProperties","findAttribute","attribute","getEnumOptions","type","kind","getSnapshot","toTitleCase","chunk","toUpperCase","slice","findEnumOption","enumOptionLabel","summarizeMultiEnum","values","getAttributeBadgeColorPalette","_badge","renderEnumBadge","descriptor","stringValue","editable","attributeLabel","renderMultiEnumBadge","summary","firstOption","getAttributeValue","row","raw","getAttributeStringValues","String","formatDateValue","date","Number","isNaN","getTime","toLocaleDateString","formatNumberValue","isFinite","formatStringValue","formatUserValue","isRenderableNode","isRecord","textValue","workspaceTypeFrom","normalizeWorkspaceBadgeItems","flatMap","renderWorkspaceBadgeDisplay","itemsAttributeId","selectedId","selectedItem","createElement","renderAttributeBadge","render","formatted","collectDisplayBadges","badges","displayable","badge","push","collectDisplayCustomSlots","slots","slot","collectValuesFromRows","rows","buildFilterCategories","categories","filterable","declared","auto","declaredValues","undeclared","sort","a","b","localeCompare","numeric","buildGroupingOptions","groupable","buildOrderingOptions","sortable","buildDisplayPropertyOptions","resolveSubGroupingOptions","resolveListDropTargetColumnKey","columnKey","resolveKnownColumnKeys","filters","active","omitFilterCategory","next","sanitizeSettings","settings","knownIds","validGroupingId","validOrderingId","orderingId","sanitizeFilters","stopRowActivation","markRowActivationSuppression","suppressRowActivation","getSelectedValues","toggleMultiValue","optionValue","DataRendererAttributeBadge","T2","T3","canEdit","isMultiValue","selectedValues","onClickCapture","onPointerDownCapture","onKeyDown","rowInteractionProps","handleOptionChange","handleClearSelection","badgeContent","X","Check","DataRendererCard","customSlots","workspaceBadge","onBadgeChange","hasBadges","Node","contains","Wrap","DataRendererBoard","columns","selectedItemId","onMoveItem","onMoveToGroup","onCreateStart","onColumnAction","activeColumn","setActiveColumn","activeGroup","setActiveGroup","handleDragStart","handleDragEnd","columnId","dataTransfer","dropEffect","handleDragOver","relatedTarget","handleDragLeave","columnId_0","itemId_0","getData","itemId","handleDrop","pb","minH","column","borderLeft","canDragIn","ColumnHeader","margin","spaceY","ps","pe","groups","group","groupId","GroupSection","canDragOut","event_3","event_4","event_5","beforeItemId","itemId_1","event_6","event_7","itemId_2","cardProps","isDropTarget","onGroupDragOver","onGroupDragLeave","onGroupDrop","expanded","setExpanded","canCreate","createLabel","Plus","MoreHorizontal","setData","effectAllowed","v","flattenDataRendererListItems","canExpand","getRowIsExpanded","getDropTargetBoxShadow","isGroup","expandedState","rowId","updateExpandedState","renderLabel","countBadge","countColorPalette","renderEndContent","buildListRowItem","statusIcon","statusColor","DataRendererList","expandedGroups","onItemClick","onExpandedGroupChange","localExpandedGroups","setLocalExpandedGroups","activeDropTargetId","setActiveDropTargetId","draggedItemId","setDraggedItemId","handleExpandedChange","DataRendererListRow","onDraggedItemChange","onDropTargetChange","onExpandedChange","canDropHere","onDropRow","rowItem","toggleExpanded","draggedId","DataRendererEmptyState","EmptyState","DataRendererContent","boardColumns","listItems","listExpandedGroups","selectedRowId","emptyTitle","emptyDescription","onBoardMoveItem","onBoardMoveToGroup","onCreateRow","onListExpandedGroupChange","listKey","UNASSIGNED_LABEL","fallbackLabel","labelForGroupKey","getGroupingKey","first","compareGroupKey","compareGroupKeyForDescriptor","ordered","compareEnumValues","orderByDirection","left","right","toIndex","findIndex","compareForDescriptor","compare","leftTime","rightTime","leftNum","rightNum","leftValue","rightValue","leftString","rightString","orderRows","groupRows","knownColumnKeys","columnDescriptor","rowDescriptor","groupedByColumn","Map","set","get","columnRows","subgroups","groupedByRow","rowKey","rowRows","matchesFilter","filterRows","activeFilters","every","countFilterValues","counts","SectionLabel","viewModeOptions","List","KanbanSquare","Dropdown","hasNoneFirst","Button","option_0","DisplayMenu","groupingOptions","orderingOptions","displayPropertyOptions","onViewModeChange","onColumnGroupingChange","onRowGroupingChange","onOrderingAttributeIdChange","onSortDirectionToggle","onDisplayPropertyToggle","triggerRef","contentRef","setOpen","closeOnOutsidePointerDown","addEventListener","removeEventListener","Settings2","ViewModeIcon","Separator","ArrowDownUp","isActive","getActiveFilterCount","reduce","sum","FilterMenu","countsByCategory","onToggleFilterValue","onClearFilter","onClearAll","activeCategoryId","setActiveCategoryId","category","activeCategory","activeFilterCount","Filter","category_0","checked","WORKSPACE_STORE_NAMESPACE","toStorageName","storageKey","DEFAULT_SNAPSHOT","createSnapshot","initialState","toggleValue","stripTagPrefix","migrateSettings","orderingRaw","field","orderingDirection","migrateFilters","stringValues","createDataRendererStore","snapshot","createStore","persist","setViewMode","state","setColumnGrouping","setRowGrouping","setOrdering","setOrderingAttributeId","setDisplayProperties","toggleSortDirection","toggleDisplayProperty","property","setFilter","toggleFilterValue","currentValues","nextValues","nextFilters","clearFilter","clearAllFilters","setExpandedGroup","reset","version","migrate","persisted","createJSONStorage","partialize","workspaceStoreRegistry","getDataRendererStore","existingStore","store","useDataRendererStore","selector","useStore","collectSources","sources","resolveAttributeOptions","useResolvedAttributes","forceRender","useReducer","refresh","unsubscribes","source","subscribe","dispose","tick","DataRendererToolbar","rawAttributes","defaultSettings","defaultFilters","leading","align","_temp5","_temp6","_temp7","_temp8","_temp9","_temp0","_temp1","categoryOptions","fromEntries","state_0","state_1","state_2","state_3","state_4","state_5","state_6","state_7","state_8","state_9","buildListItems","visibleRows","grouped","onRowClick","onAttributeChange","onReorder","getRowContextMenuActions","supportsManualReorder","getGroupColorPalette","toListItem","targetColumnKey","toSubgroupListItem","subgroup","parent","DataRenderer","getBoardColumnConfig","hideToolbar","toolbarLeading","boardRows","toBoardItems","columnGroupingDescriptor","columnConfig","orderedRows","enumColor","targetColumnId","handleBoardMoveItem","rowId_0","targetGroupKey","handleBoardMoveToGroup","DeleteConfirmationModal","isDeleting","setIsDeleting","headline","buttonText","notificationText","onDelete","handleDelete","Dialog","CloseButton","LARGE_DIFF_LINE_THRESHOLD","generatedDiffFileNames","binaryDiffExtensions","imageDiffExtensions","getExtension","path","ext","pop","getDiffLineCount","additions","deletions","isLargeDiffContent","isGeneratedDiffPath","fileName","endsWith","isBinaryDiffPath","isImageDiffPath","createDiffCardBodyModel","diff","filePath","oldContent","newContent","isLargeDiff","hasOptedIntoLargeDiff","onShowFullDiff","diffViewMode","buildViewData","isImage","renderedLineCount","diffViewData","buildDiffViewData","oldPath","newPath","sideBySide","DiffCardBody","model","BinaryDiffPlaceholder","LargeDiffPlaceholder","DeferredDiffLoad","actionLabel","isLoadingDiff","loadingDiffContentRows","LoadingDiffContent","Skeleton","buildDeferredDiffLoadState","isGeneratedDiff","loadError","canLoadDiff","onLoadDiff","DiffCardContent","isBinaryDiff","hasDiffContent","shouldAutoLoadDiff","shouldAutoLoadDiffContent","requestedPath","resolveRequestedDiffPath","useDiffContentLoader","setLoadingDiff","setRequestedPath","setLoadError","loadDiff","DiffCard","onToggleExpanded","DiffCardHeader","change","DiffBubble","DiffDrawerEmptyState","p","CARD_HEADER_HEIGHT","CARD_BODY_LINE_HEIGHT","HUNK_ROW_HEIGHT","COLLAPSED_CARD_HEIGHT","DEFERRED_BODY_HEIGHT","ITEM_GAP_HEIGHT","deferredCardHeight","estimateDiffCardHeight","isCollapsed","unifiedContentRows","splitContentRows","hunkRows","contentRows","bodyHeight","getDiffPath","PINNED_DIFF_LOOKBEHIND_COUNT","estimateDiffRangeHeight","diffs","collapsedPaths","largeDiffOptInPaths","startIndex","endIndex","diffIndex","resolveSelectedScrollState","selectedDiffPath","expansionCommand","completedScrollCommandId","selectedScrollPath","selectedScrollSourceKey","selectedScrollCommandId","hasCompletedSelectedScroll","selectedScrollKey","selectedScrollExpansionState","selectedScrollIndex","shouldPinSelectedScrollIndex","includePinnedDiffIndexes","indexes","pinnedStartIndex","Math","max","pinnedIndexes","from","getRenderedDiffItems","scrollElement","querySelectorAll","element","querySelector","dataset","isInteger","getElementScrollOffset","offsetTop","elementRect","getBoundingClientRect","scrollRect","scrollTop","top","SELECTED_ALIGNMENT_THRESHOLD","useSelectedDiffScroll","scrollRef","setCompletedScrollCommandId","frameIds","cancelledByUserScroll","cancelSelectedScroll","estimateRangeHeight","scrollToOffset","scrollTo","behavior","scrollToSelectedDiff","alignRenderedSelectedDiff","renderedItems","selectedOffset","currentOffset","abs","firstItem","lastItem","at","alignmentAttempts","reconcileSelectedDiff","isAligned","hasSettled","requestAnimationFrame","passive","isInitiallyAligned","frameId","cancelAnimationFrame","useLayoutEffect","INITIAL_EXPANDED_DIFF_COUNT","INITIAL_COLLAPSED_LINE_THRESHOLD","buildInitialCollapsedPaths","lineCount","buildAllCollapsedPaths","toggleCollapsedPath","delete","resolveCollapsedPathsForSelectedDiff","DiffDrawer","onSelectDiffPath","onExpansionStateChange","reportedExpansionStateRef","setCollapsedPaths","setLargeDiffOptInPaths","virtualizer","useVirtualizer","getScrollElement","estimateSize","getItemKey","overscan","rangeExtractor","range","defaultRangeExtractor","shouldAdjustScrollPositionOnItemSizeChange","_item","_delta","instance","isScrolling","expansionState","allExpanded","size","allCollapsed","reportedExpansionState","showFullDiff","virtualItems","getVirtualItems","overflowAnchor","getTotalSize","virtualItem","measureElement","start","RESIZE_SEPARATOR_HOVER_STYLE","_before","RESIZE_HANDLE_WIDTH","ResizeHandle","bounds","contentPanelId","resizablePanelId","resizeLabel","resolvedPanelWidth","showResizeSeparator","onResizeKeyDown","onResizeStart","maxSize","round","position","bottom","insetInlineStart","w","transform","FALLBACK_ROOT_WIDTH","KEYBOARD_RESIZE_STEP","MIN_COLLAPSE_THRESHOLD_PX","MAX_COLLAPSE_THRESHOLD_PX","clamp","min","resolveRootWidth","rootWidth","resolveCollapseThreshold","minSizePx","resolveResizableBoundsPx","maxFromContent","contentMinSizePx","configuredMax","maxSizePx","minSize","getElementWidth","applyPanelWidthToElement","panel","flexBasis","flexGrow","flexShrink","clearPanelInlineStyles","ResizableSplitLayout","contentPanel","controlledCollapsed","onCollapsedChange","onSizeChange","resizablePanel","resizableSide","defaultSizePx","collapsed","collapsible","useId","rootRef","resizablePanelRef","contentPanelRef","cleanupDragRef","lastWidthRef","panelWidth","setPanelWidth","setRootWidth","internalCollapsed","setInternalCollapsed","collapseThresholdPx","updateRootWidth","ResizeObserver","observer","observe","disconnect","applyPanelWidth","width_0","rootWidth_0","nextBounds","nextWidth","commitPanelWidth","nextCollapsed","setCollapsed","resizeHandle","rootWidth_1","bounds_0","startX","clientX","startWidth","previousCursor","previousUserSelect","userSelect","nextWidth_0","nextCollapsed_0","animationFrame","setDraggingPanelState","schedulePanelWidth","handlePointerMove","moveEvent","rawWidth","cleanup","hasPointerCapture","pointerId","releasePointerCapture","setPointerCapture","once","handleResizeStart","direction_0","width_1","handleResizeKeyDown","resizablePanelNode","contentPanelNode","resizeTrigger","normalizeChangedFilePath","segment","sortNodes","nodes","forEach","node","dedupePaths","paths","buildFlatTree","buildChangedFilesTree","treeById","rootNodes","segments","parentPath","parentNode","currentPath","isFile","existingNode","nextNode","collectExpandedFolderIds","folderIds","visit","collectNestedFileOrder","orderedPaths","treeNodes","replace","sortPathsByViewMode","useDiffViewerStore","create","isTreePanelOpen","searchQuery","selectedPath","expandedFolderIds","setTreePanelOpen","toggleTreePanel","setDiffViewMode","setSearchQuery","setSelectedPath","setExpandedFolderIds","toggleFolder","folderId","expandAll","collapseAll","isInList","isActiveNode","activeNodeId","isNavigableNode","getNodeChildren","hasExpandableChildren","appendVisibleNodeRows","sectionId","expandedNodeIds","level","parentNodeId","buildVirtualRows","sections","expandedSectionIds","section","getRowFocusId","isFocusableRow","getFocusableRows","resolveTreeListFocusRowId","focusedRowId","focusableRows","focusableIds","activeId","firstRow","resolveSectionHeaderNavigation","currentIndex","nextRow","resolveNodeNavigation","expandable","resolveTreeListKeyboardNavigation","resolvedFocusRowId","currentRow","focusByIndex","clamped","TreeListNodeRow","rowVariant","nodeGap","tabIndex","onFocus","onNavigate","onToggleNode","canLink","intent","TreeListSectionActions","TreeListSectionHeader","focusId","onToggle","onContextMenu","transition","SECTION_PREFIX","toSectionDragId","isSectionDragId","fromSectionDragId","arrayMoveInPlace","to","removed","splice","computeReorderResult","overId","orderedIds","oldIndex","indexOf","newIndex","nextSectionIds","nodeIds","nextNodeIds","SortableHost","useSortable","isDragging","listeners","setNodeRef","CSS","Transform","toString","SortableSectionGroup","sectionRows","onToggleSection","onSectionContextMenu","headerRow","nodeRows","topLevelNodeIds","SortableContext","verticalListSortingStrategy","row_3","SortableOrPlainNodeRow","renderNodeRow","TreeListSortable","sectionGap","onReorderSections","onReorderNodes","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","over","result","DndContext","section_0","row_0","row_1","row_2","findRowElement","treeListFocusId","findFocusedRowId","HTMLElement","closest","isTextEditingTarget","isContentEditable","tagName","getRowIndex","useTreeListKeyboardNavigation","scrollToRow","setFocusedRowId","pendingFocusRowId","setPendingFocusRowId","focusRowId","focusableRowIds","frame","element_0","rowIndex","focusRow","altKey","ctrlKey","metaKey","shiftKey","navigation","handleKeyDown","onRowFocus","VIRTUAL_ROW_ESTIMATE","VIRTUAL_ROW_OVERSCAN","renderVirtualRow","VirtualTreeList","keyboard","scrollToIndex","StackTreeList","virtualize","TreeListBackground","TreeList","backgroundContextActions","changeLabels","added","copied","deleted","permissionChange","renamed","changeColors","getFilePathParts","lastSlashIndex","lastIndexOf","dirPath","renderFileLabel","toTreeListNodes","onSelectPath","resolveFileIcon","changeByPath","fileIcon","FileText","FileListPanel","onSearchQueryChange","onToggleFolder","fileTree","overflowX","buildChangeByPath","sumDiffStats","total","buildFilteredDiffs","normalizedSearchQuery","matchingDiffs","orderByPath","leftOrder","MAX_SAFE_INTEGER","rightOrder","resolveSelectedPath","preferredPaths","fallbackPaths","MenuItemContent","loadingDiffItems","DiffViewerLoading","DiffViewer","changedFilePaths","defaultSelectedPath","loading","diffExpansionCommand","setDiffExpansionCommand","diffExpansionState","setDiffExpansionState","allFilesExpanded","emptyDiffTitle","filePaths","filteredDiffPathKey","filteredDiffPaths","filteredDiffs","filteredFilePathKey","filteredFilePaths","hasDiffs","hasExpandableItems","resolvedSelectedPath","showDiffEmptyState","totalDiff","diffPaths","folderId_0","allFilesCollapsed","allDiffsExpanded","allDiffsCollapsed","isExpandAllDisabled","isCollapseAllDisabled","filePaths_0","tree","diffPaths_0","filePaths_1","expandAllFilesAndDiffs","collapseAllFilesAndDiffs","path_0","nextIndex","current_1","selectChangedFilePath","PanelLeftClose","PanelLeftOpen","ListTree","Rows2","SquareSplitHorizontal","ChevronsUpDown","t32","ChevronsDownUp","t33","t34","t35","t36","t37","t38","t39","t40","diffPanel","t41","t42","t43","t44","current_0","ErrorBoundary","Component","error","getDerivedStateFromError","componentDidCatch","info","console","handleReset","setState","onReset","fallback","ErrorFallback","message","AbsoluteCenter","AlertMessage","HorizontalMenuStack","borderBottomWidth","SimpleCard","SimpleCardBody","IntegrationCard","ItemSection","defaultOpen","Collapsible","e","getNoticeKey","notice","getNoticeTitle","OpenSourceNoticesScreen","notices","productName","productVersion","generatedAt","md","license","copyright","homepageUrl","sourceUrl","Link","attribution","DEFAULT_PALETTE_ASSET_LIMIT","getSearchableText","hasInputPrefix","inputPrefix","trimStart","resolvePaletteMode","modes","fallbackMode","getPaletteEffectiveQuery","modeId","candidate","limitDefaultAssetEntries","limit","assetType","filterPaletteEntries","effectiveQuery","getEffectiveQuery","filteredEntries","defaultAssetLimit","GROUP_ROW_HEIGHT","ENTRY_ROW_HEIGHT","INITIAL_VIEWPORT_HEIGHT","ACTIVE_ROW_BG","buildEntryItem","shortcut","buildRows","previousEntry","entryIndex","getActiveRowIndex","activeIndex","PaletteList","emptyLabel","onHover","activeRowIndex","initialRect","virtualRow","resolveStateValue","paletteInputStateProps","Palette","initialQuery","initialActiveIndex","resetKey","inputIcon","footerStart","footerEnd","filterEntries","onActiveEntryChange","onQueryChange","onEscape","setQueryState","setActiveIndex","setupRef","activeEntry","resolvedInputIcon","activeMode","resolvedPlaceholder","nextQuery","runActiveEntry","closePalette","previousSetup","setSelectionRange","entryCount","handleEscape","hasFooter","splitShortcutStep","step","part","getShortcutDisplayParts","binding","PaletteShortcut","steps","stepIndex","part_0","partIndex","Kbd","ParamEditorLabel","CircleHelp","ParamEditorReadOnlyValue","boxProps","preserveWhitespace","ColorInput","hideLabel","fullWidth","setValue","timeoutRef","nextColor","scheduleChange","newColor","valueElement","parseColor","onValueChange","ColorPicker","picker","DateInput","newValue","e_1","e_0","blur","e_2","NumberInputRoot","ChakraNumberInput","NumberInputField","Scrubber","Slider","ChakraSlider","NumberInput","hideSlider","showSlider","useFullWidthLayout","valueAsNumber","next_0","details_1","details_2","SelectionInput","multiSelect","optionId","selectedOptions","id_0","o","displayItems","remaining","o_0","getDisplayText","handleSelect","updatedValues","opt_0","opt","opt_1","TextInput","singleLine","e_3","resolveDefaultValue","defaultValues","paramId","InputGroupComponent","defaultCollapsed","useDisclosure","param","renderNumberParam","param_0","renderTextParam","param_1","renderSelectionParam","param_2","renderDateParam","param_3","renderColorParam","param_4","renderPropertyParam","param_5","renderParam","ChevronLeft","params","ParamEditor","getEntryIcon","isDirectory","isGitRepo","FolderOpen","Folder","RepoPickerListEntry","selectedPathSet","onEntryClick","isAlreadySelected","searchInputFocusVisibleProps","outlineColor","outlineOffset","focusInlinePickerOption","activeElement","RepoPickerDialog","selectedPaths","isLoading","isSelectDisabled","onSelectHomeDirectory","onSelectParentDirectory","searchScope","Home","ChevronUp","padding","Body","t45","t46","t47","t48","expandedSections","expandedNodes","SIDEBAR_STORE_NAMESPACE","toggleId","getPersistedSnapshot","createSidebarStore","openSidebar","closeSidebar","toggleSidebar","toggleSection","toggleNode","setSectionExpanded","setNodeExpanded","setWidth","sidebarStoreRegistry","getSidebarStore","useSidebarStore","SidebarFooter","PANEL_HEADER_HEIGHT","SidebarHeader","DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","resolveInitialWidth","defaultWidth","parsed","parseInt","Sidebar","footer","closable","defaultExpandedSections","viewportRef","initialWidth","persistedWidth","effectiveWidth","widthCss","flexDirection","SidebarProjectMenu","projectsLabel","onSelectProjects","FolderIcon","Switch","inputProps","thumbLabel","trackLabel","interactiveCursor","ChakraSwitch","off","on","tabOverrides","STORE_NAMESPACE","resolveEffective","override","hiddenByDefault","setOverride","overrides","_removed","toggleOverride","createTabVisibilityStore","setTab","toggleTab","clearTab","storeRegistry","getTabVisibilityStore","existing","useTabVisibilityStore","toStringLabel","resolveVisibility","isNodeVisible","nodeOverrides","filterNodes","changed","filteredChildren","filterVisibleSections","sectionOverrides","filteredNodes","buildSectionAction","effective","checkmark","buildNodeAction","locked","canHide","buildTreeVisibilityMenuActions","onResetAll","onResetOrder","filterVisibleTabs","placements","getKey","buildTabVisibilityMenuActions","nonCloseableCount","contributionId","onToggleTab","ActionDropdown","toggleAction","TagEditorRow","actionOptions","isSaving","showDefault","onActionsChange","onNameChange","onSetDefault","GripVertical","Table","trimmed","Editable","isDefault","Trash2","buildDraftItem","form","sortOrder","crypto","randomUUID","isNew","TagEditor","onValuesChange","onSave","onCancel","onDeleteValue","hasChanges","addLabel","addPlaceholder","actionsColumnLabel","cancelLabel","defaultAddColor","defaultAddIcon","defaultColumnLabel","deleteButtonText","deleteHeadline","deleteNotificationText","saveLabel","valueColumnLabel","isAdding","setIsAdding","addForm","setAddForm","valueToDelete","setValueToDelete","resetAddForm","updateValue","patch","handleAddOption","maxOrder","handleDeleteOption","arrayMove","handleAddKeyDown","closestCenter","bySortOrder","toEditorValues","toEditorValue","findOriginalValue","draft","hasTagValueChanges","drafts","deletedIds","valueNeedsUpdate","errorMessage","TagSettingsPanel","errorTitle","loadingText","loadedValues","editorProps","setDrafts","setDeletedIds","setIsSaving","saveError","setSaveError","handleSave","handleDeleteValue","handleCancel","toaster","createToaster","pauseOnPageIdle","duration","Toaster","ChakraToaster","mdDown","toast","Toast","paddingEnd","sectionOrder","nodeOrderBySection","dedupe","ids","seen","createTreeListOrderStore","setSectionOrder","setNodeOrder","resetSectionOrder","resetNodeOrder","getTreeListOrderStore","useTreeListOrderStore","reorderBy","order","indexById","placed","applyTreeListOrder","reorderedSections","nodeOrder","reorderedNodes","flipOverride","createTreeListVisibilityStore","setSection","setNode","clearSection","clearNode","getTreeListVisibilityStore","useTreeListVisibilityStore","readDefaultExport","module","default","installPrismGlobal","globalScope","Prism","prismModule"],"mappings":"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"}