{"version":3,"sources":["../../src/runtime/CanvasHooksContext.tsx","../../src/runtime/ToolpadApp.tsx","../../src/appDom/index.ts","../../src/utils/immutability.ts","../../src/server/schema.ts","../../src/bindings.ts","../../src/runtime/toolpadComponents/index.tsx","../../src/runtime/AppThemeProvider.tsx","../../src/runtime/evalJsBindings.ts","../../src/runtime/constants.ts","../../src/runtime/toolpadComponents/layoutBox.ts","../../src/runtime/useDataQuery.ts","../../src/runtime/AppNavigation.tsx","../../src/runtime/PreviewHeader.tsx","../../src/toolpad/ToolpadShell/Header/index.tsx","../../src/toolpad/ToolpadShell/Header/UserFeedback/index.tsx","../../src/utils/useMenu.ts","../../src/constants.ts","../../src/api.ts","../../src/rpcClient.ts","../../src/utils/useBoolean.ts","../../src/toolpad/ToolpadShell/Header/ThemeModeMenu.tsx","../../src/ThemeContext.tsx","../../src/theme.ts","../../src/utils/useLocalStorageState.ts","../../src/utils/useEvent.ts"],"sourcesContent":["import { NodeId } from '@mui/toolpad-core';\nimport * as React from 'react';\nimport { NodeHashes } from '../types';\n\nexport interface NavigateToPage {\n  (pageNodeId: NodeId, pageParameters?: Record<string, string>): void;\n}\n\n/**\n * Context created by the app canvas to override behavior for the app editor\n */\nexport interface CanvasHooks {\n  savedNodes?: NodeHashes;\n}\n\nexport const CanvasHooksContext = React.createContext<CanvasHooks>({});\n","import * as React from 'react';\nimport {\n  Stack,\n  CssBaseline,\n  Alert,\n  Box,\n  styled,\n  AlertTitle,\n  LinearProgress,\n  Container,\n  Tooltip,\n  Typography,\n} from '@mui/material';\nimport {\n  ToolpadComponent,\n  createComponent,\n  TOOLPAD_COMPONENT,\n  Slots,\n  Placeholder,\n  NodeId,\n  BindableAttrValue,\n  NestedBindableAttrs,\n  BindingEvaluationResult,\n  ScopeMeta,\n  getArgTypeDefaultValue,\n  ScopeMetaPropField,\n  ComponentsContextProvider,\n  isToolpadComponent,\n  createToolpadComponentThatThrows,\n  useComponents,\n  useComponent,\n  RuntimeScope,\n  ApplicationVm,\n  JsExpressionAttrValue,\n} from '@mui/toolpad-core';\nimport { createProvidedContext, useAssertedContext } from '@mui/toolpad-utils/react';\nimport { QueryClient, QueryClientProvider, useMutation } from '@tanstack/react-query';\nimport {\n  BrowserRouter,\n  Routes,\n  Route,\n  useLocation,\n  Navigate,\n  Location as RouterLocation,\n  useNavigate,\n  matchPath,\n} from 'react-router-dom';\nimport { ErrorBoundary, FallbackProps } from 'react-error-boundary';\nimport {\n  CanvasEventsContext,\n  NodeErrorProps,\n  NodeRuntimeWrapper,\n  ResetNodeErrorsKeyProvider,\n} from '@mui/toolpad-core/runtime';\nimport * as _ from 'lodash-es';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport { getBrowserRuntime } from '@mui/toolpad-core/jsBrowserRuntime';\nimport * as builtIns from '@mui/toolpad-components';\nimport { errorFrom } from '@mui/toolpad-utils/errors';\nimport { mapProperties, mapValues } from '@mui/toolpad-utils/collections';\nimport useBoolean from '@mui/toolpad-utils/hooks/useBoolean';\nimport usePageTitle from '@mui/toolpad-utils/hooks/usePageTitle';\nimport invariant from 'invariant';\nimport * as appDom from '../appDom';\nimport { RuntimeState } from '../types';\nimport { getBindingType, getBindingValue } from '../bindings';\nimport {\n  getElementNodeComponentId,\n  INTERNAL_COMPONENTS,\n  isPageLayoutComponent,\n  isPageRow,\n  PAGE_ROW_COMPONENT_ID,\n} from './toolpadComponents';\nimport AppThemeProvider from './AppThemeProvider';\nimport evalJsBindings, {\n  buildGlobalScope,\n  EvaluatedBinding,\n  ParsedBinding,\n} from './evalJsBindings';\nimport { HTML_ID_EDITOR_OVERLAY, NON_BINDABLE_CONTROL_TYPES } from './constants';\nimport { layoutBoxArgTypes } from './toolpadComponents/layoutBox';\nimport { execDataSourceQuery, useDataQuery, UseDataQueryConfig, UseFetch } from './useDataQuery';\nimport { NavigateToPage } from './CanvasHooksContext';\nimport AppNavigation from './AppNavigation';\nimport PreviewHeader from './PreviewHeader';\nimport useEvent from '../utils/useEvent';\n\nconst browserJsRuntime = getBrowserRuntime();\n\nconst isPreview = process.env.NODE_ENV !== 'production';\nconst isRenderedInCanvas =\n  typeof window === 'undefined'\n    ? false\n    : !!(window.frameElement as HTMLIFrameElement)?.dataset?.toolpadCanvas;\n\nconst Pre = styled('pre')(({ theme }) => ({\n  margin: 0,\n  fontFamily: theme.fontFamilyMonospaced,\n}));\n\nconst PREVIEW_PAGE_ROUTE = '/preview/pages/:nodeId';\n\nexport const internalComponents: ToolpadComponents = Object.fromEntries(\n  [...INTERNAL_COMPONENTS].map(([name]) => {\n    let builtIn = (builtIns as any)[name];\n\n    if (!isToolpadComponent(builtIn)) {\n      builtIn = createToolpadComponentThatThrows(\n        new Error(`Imported builtIn \"${name}\" is not a ToolpadComponent`),\n      );\n    }\n\n    return [name, builtIn];\n  }),\n);\n\nconst ReactQueryDevtoolsProduction = React.lazy(() =>\n  import('@tanstack/react-query-devtools/build/lib/index.prod.js').then((d) => ({\n    default: d.ReactQueryDevtools,\n  })),\n);\n\nconst EMPTY_ARRAY: any[] = [];\nconst EMPTY_OBJECT: any = {};\n\nconst INITIAL_FETCH: UseFetch = {\n  call: async () => {},\n  refetch: async () => {},\n  fetch: async () => {},\n  isLoading: false,\n  isFetching: false,\n  error: null,\n  data: null,\n  rows: [],\n};\n\nconst USE_DATA_QUERY_CONFIG_KEYS: readonly (keyof UseDataQueryConfig)[] = [\n  'enabled',\n  'refetchInterval',\n];\n\nfunction usePageNavigator(): NavigateToPage {\n  const navigate = useNavigate();\n\n  const canvasEvents = React.useContext(CanvasEventsContext);\n\n  const navigateToPage: NavigateToPage = React.useCallback(\n    (pageNodeId, pageParameters) => {\n      const urlParams = pageParameters && new URLSearchParams(pageParameters);\n\n      if (canvasEvents) {\n        canvasEvents.emit('pageNavigationRequest', { pageNodeId });\n      } else {\n        navigate({\n          pathname: `/pages/${pageNodeId}`,\n          ...(urlParams\n            ? {\n                search: urlParams.toString(),\n              }\n            : {}),\n        });\n      }\n    },\n    [canvasEvents, navigate],\n  );\n\n  return navigateToPage;\n}\n\nfunction isEqual(\n  a: BindingEvaluationResult<unknown>,\n  b: BindingEvaluationResult<unknown>,\n): boolean {\n  return a.value === b.value && !!a.error === !!b.error && a.loading === b.loading;\n}\n\nconst AppRoot = styled('div')({\n  overflow: 'auto' /* Prevents margins from collapsing into root */,\n  position: 'relative' /* Makes sure that the editor overlay that renders inside sizes correctly */,\n  minHeight: '100vh',\n  display: 'flex',\n  flexDirection: 'column',\n});\n\nconst EditorOverlay = styled('div')({\n  position: 'absolute',\n  inset: '0 0 0 0',\n  pointerEvents: 'none',\n  overflow: 'hidden',\n});\n\ntype ToolpadComponents = Partial<Record<string, ToolpadComponent<any>>>;\n\ninterface CreateScopeParams {\n  parentScope?: RuntimeScope;\n  localValues?: Record<string, unknown> | undefined;\n  meta: ScopeMeta;\n}\n\nfunction createScope(\n  id: string,\n  bindings: Record<string, ParsedBinding | EvaluatedBinding<unknown>>,\n  { localValues, parentScope, meta = {} }: CreateScopeParams,\n): RuntimeScope {\n  const scopeValues = { ...parentScope?.values, ...localValues };\n\n  const evaluatedBindings = evalJsBindings(browserJsRuntime, bindings, scopeValues);\n\n  return {\n    id,\n    parentScope,\n    bindings: mapValues(evaluatedBindings, (binding) => binding.result || { value: undefined }),\n    values: buildGlobalScope(scopeValues, evaluatedBindings),\n    meta,\n  };\n}\n\ntype ApplicationVmApi = {\n  registerScope: (scope: RuntimeScope) => () => void;\n  registerBindingScope: (bindingId: string, scope: RuntimeScope) => () => void;\n};\n\nfunction useApplicationVm(onUpdate: (registry: ApplicationVm) => void) {\n  const vm: ApplicationVm = { scopes: {}, bindingScopes: {} };\n\n  let scheduledUpdate: Promise<void> | undefined;\n  const scheduleUpdate = () => {\n    if (scheduledUpdate) {\n      return;\n    }\n    scheduledUpdate = Promise.resolve().then(() => {\n      onUpdate(vm);\n      scheduledUpdate = undefined;\n    });\n  };\n\n  return React.useRef<ApplicationVmApi>({\n    registerScope(scope: RuntimeScope) {\n      if (vm.scopes[scope.id]) {\n        throw new Error(`Scope with id \"${scope.id}\" already registered`);\n      }\n      vm.scopes[scope.id] = scope;\n      scheduleUpdate();\n      return () => {\n        delete vm.scopes[scope.id];\n        scheduleUpdate();\n      };\n    },\n    registerBindingScope(bindingId: string, scope: RuntimeScope) {\n      if (vm.bindingScopes[bindingId]) {\n        return () => {};\n      }\n      vm.bindingScopes[bindingId] = scope.id;\n      scheduleUpdate();\n      return () => {\n        delete vm.bindingScopes[bindingId];\n        scheduleUpdate();\n      };\n    },\n  });\n}\n\nconst ApplicationVmApiContext = React.createContext<\n  React.MutableRefObject<ApplicationVmApi> | undefined\n>(undefined);\nconst RuntimeScopeContext = React.createContext<RuntimeScope | undefined>(undefined);\nconst [useDomContext, DomContextProvider] = createProvidedContext<appDom.AppDom>('Dom');\nconst [useEvaluateScopeExpression, EvaluateScopeExpressionProvider] =\n  createProvidedContext<(expr: string) => any>('EvaluateScopeExpression');\n\ninterface SetBindingContextValue {\n  setBinding: (id: string, result: BindingEvaluationResult, scopeId?: string) => void;\n  setControlledBinding: (id: string, result: BindingEvaluationResult, scopeId?: string) => void;\n  setBindingByScopePath: (\n    scopePath: string,\n    result: BindingEvaluationResult,\n    scopeId?: string,\n  ) => void;\n}\n\nconst SetBindingContext = React.createContext<SetBindingContextValue | undefined>(undefined);\n\nfunction getComponentId(elm: appDom.ElementNode): string {\n  const componentId = getElementNodeComponentId(elm);\n  return componentId;\n}\n\n/**\n * Turns an object consisting of a nested structure of BindableAttrValues\n * into a flat array of relative paths associated with their value.\n * Example:\n *   { foo: { bar: 1 }, baz: [{ $$jsExpression: 'quux' }] }\n *   =>\n *   [\n *    ['.foo.bar', 1],\n *    ['.baz[0]', { $$jsExpression: 'quux' }]\n *   ]\n */\nfunction flattenNestedBindables(\n  params?: NestedBindableAttrs,\n  prefix = '',\n): [string, BindableAttrValue<any>][] {\n  if (!params) {\n    return [];\n  }\n  if (Array.isArray(params)) {\n    return params.flatMap((param, i) => {\n      return flattenNestedBindables(param[1], `${prefix}[${i}][1]`);\n    });\n  }\n  // TODO: create a marker in bindables (similar to $ref) to recognize them automatically\n  // in a nested structure. This would allow us to build deeply nested structures\n  if (typeof params !== 'object' || getBindingType(params) !== 'const') {\n    return [[prefix, params as BindableAttrValue<any>]];\n  }\n  return Object.entries(params).flatMap(([key, param]) =>\n    flattenNestedBindables(param, `${prefix}.${key}`),\n  );\n}\n\n/**\n * Returns an object with the resolved values of the bindables.\n * Example bindings:\n * {\n *  'nodeId.params.order': { error: undefined, loading: false, value: { \"OrderID\": \"\" } },\n * }\n * Example bindingId: 'nodeId.params'\n * Example params:\n * {\n * [\"order\", { $$jsExpression: 'form.value\\n' }]\n * }\n * Example result:\n * {\n * order: { \"OrderID\": \"\" }\n * }\n */\n\nfunction resolveBindables(\n  bindings: Partial<Record<string, BindingEvaluationResult>>,\n  bindingId: string,\n  params?: NestedBindableAttrs,\n): BindingEvaluationResult<Record<string, unknown>> {\n  const result: any = {};\n  const resultKey = 'value';\n  const flattened = flattenNestedBindables(params);\n\n  for (const [path] of flattened) {\n    const resolvedBinding = bindings[`${bindingId}${path}`];\n\n    if (resolvedBinding?.error) {\n      return { error: resolvedBinding?.error };\n    }\n    if (resolvedBinding?.loading) {\n      return { loading: true };\n    }\n\n    _.set(result, `${resultKey}${path}`, resolvedBinding?.value);\n  }\n\n  return { value: result[resultKey] || {} };\n}\n\ninterface ParseBindingOptions {\n  scopePath?: string;\n}\n\nfunction parseBinding(\n  bindable: BindableAttrValue<any>,\n  { scopePath }: ParseBindingOptions = {},\n): ParsedBinding | EvaluatedBinding {\n  const bindingType = bindable && getBindingType(bindable);\n\n  if (bindingType === 'const') {\n    return {\n      scopePath,\n      result: { value: bindable },\n    };\n  }\n  if (bindingType === 'jsExpression') {\n    return {\n      scopePath,\n      expression: bindable.$$jsExpression,\n    };\n  }\n  return {\n    scopePath,\n    result: { value: undefined },\n  };\n}\n\n/**\n * Returns all elements for the current scope. This includes the root node and all of its descendants.\n * Templates are not included.\n */\nfunction getScopeElements(\n  dom: appDom.AppDom,\n  rootNode: appDom.AppDomNode | appDom.AppDomNode[],\n  components: ToolpadComponents,\n): readonly appDom.AppDomNode[] {\n  if (Array.isArray(rootNode)) {\n    return [...rootNode, ...rootNode.flatMap((child) => getScopeElements(dom, child, components))];\n  }\n\n  const childNodes = appDom.getChildNodes(dom, rootNode);\n  const result: appDom.AppDomNode[] = [];\n\n  for (const [prop, children] of Object.entries(childNodes) as [string, appDom.AppDomNode[]][]) {\n    if (appDom.isElement(rootNode)) {\n      const componentId = getComponentId(rootNode);\n      const Component = components[componentId];\n      const componentConfig = Component?.[TOOLPAD_COMPONENT];\n      const { argTypes = {} } = componentConfig ?? {};\n\n      if (argTypes[prop]?.type !== 'template') {\n        result.push(\n          ...children,\n          ...children.flatMap((child) => getScopeElements(dom, child, components)),\n        );\n      }\n    } else {\n      result.push(\n        ...children,\n        ...children.flatMap((child) => getScopeElements(dom, child, components)),\n      );\n    }\n  }\n\n  return result;\n}\n\nfunction parseBindings(\n  dom: appDom.AppDom,\n  rootNode: appDom.ElementNode | appDom.PageNode | appDom.ElementNode[],\n  components: ToolpadComponents,\n  location: RouterLocation,\n) {\n  const scopeElements = getScopeElements(dom, rootNode, components);\n\n  const parsedBindingsMap = new Map<string, ParsedBinding | EvaluatedBinding>();\n  const controlled = new Set<string>();\n  const scopeMeta: ScopeMeta = {};\n\n  for (const elm of scopeElements) {\n    if (appDom.isElement<any>(elm)) {\n      const componentId = getComponentId(elm);\n      const Component = components[componentId];\n\n      const componentConfig = Component?.[TOOLPAD_COMPONENT];\n\n      const { argTypes = {} } = componentConfig ?? {};\n\n      const propsMeta: Record<string, ScopeMetaPropField> = {};\n\n      for (const [propName, argType] of Object.entries(argTypes)) {\n        const initializerId = argType?.defaultValueProp\n          ? `${elm.id}.props.${argType.defaultValueProp}`\n          : undefined;\n\n        const propValue: BindableAttrValue<any> = elm.props?.[propName];\n\n        const binding: BindableAttrValue<any> =\n          propValue || (argType ? getArgTypeDefaultValue(argType) : undefined);\n\n        const bindingId = `${elm.id}.props.${propName}`;\n\n        let scopePath: string | undefined;\n\n        const isResizableHeightProp =\n          componentConfig?.resizableHeightProp && propName === componentConfig?.resizableHeightProp;\n\n        if (\n          componentId !== PAGE_ROW_COMPONENT_ID &&\n          !isResizableHeightProp &&\n          !NON_BINDABLE_CONTROL_TYPES.includes(argType?.control?.type as string)\n        ) {\n          scopePath = `${elm.name}.${propName}`;\n        }\n\n        propsMeta[propName] = {\n          tsType: argType?.tsType,\n        };\n\n        if (argType) {\n          if (argType.onChangeProp) {\n            controlled.add(bindingId);\n            parsedBindingsMap.set(bindingId, {\n              scopePath,\n              initializer: initializerId,\n            });\n          } else {\n            parsedBindingsMap.set(bindingId, parseBinding(binding, { scopePath }));\n          }\n        }\n\n        const parseNestedBindings = (value: unknown, parentBindingId: string) => {\n          if (value && typeof value === 'object') {\n            for (const [nestedPropName, nestedProp] of Object.entries(value)) {\n              const nestedBindingId = `${parentBindingId}${\n                Array.isArray(value) ? `[${nestedPropName}]` : `.${nestedPropName}`\n              }`;\n\n              if (nestedProp && getBindingType(nestedProp) !== 'const') {\n                parsedBindingsMap.set(nestedBindingId, parseBinding(nestedProp));\n              } else {\n                parseNestedBindings(\n                  (value as Record<string, unknown>)[nestedPropName],\n                  nestedBindingId,\n                );\n              }\n            }\n          }\n        };\n\n        const propBindingValue = propValue && getBindingValue(propValue);\n        if (propBindingValue) {\n          parseNestedBindings(propBindingValue, bindingId);\n        }\n      }\n\n      if (componentId !== PAGE_ROW_COMPONENT_ID) {\n        scopeMeta[elm.name] = {\n          kind: 'element',\n          componentId,\n          props: propsMeta,\n        };\n      }\n\n      if (!isPageLayoutComponent(elm)) {\n        for (const [propName, argType] of Object.entries(layoutBoxArgTypes)) {\n          const binding =\n            elm.layout?.[propName as keyof typeof layoutBoxArgTypes] ||\n            (argType ? getArgTypeDefaultValue(argType) : undefined);\n          const bindingId = `${elm.id}.layout.${propName}`;\n          parsedBindingsMap.set(bindingId, parseBinding(binding, {}));\n        }\n      }\n    }\n\n    if (appDom.isQuery(elm)) {\n      scopeMeta[elm.name] = {\n        kind: 'query',\n      };\n\n      if (elm.params) {\n        const nestedBindablePaths = flattenNestedBindables(Object.fromEntries(elm.params ?? []));\n\n        for (const [nestedPath, paramValue] of nestedBindablePaths) {\n          const bindingId = `${elm.id}.params${nestedPath}`;\n          const scopePath = `${elm.name}.params${nestedPath}`;\n          const bindable = paramValue;\n          parsedBindingsMap.set(bindingId, parseBinding(bindable, { scopePath }));\n        }\n      }\n\n      for (const [key, value] of Object.entries(INITIAL_FETCH)) {\n        const bindingId = `${elm.id}.${key}`;\n        const scopePath = `${elm.name}.${key}`;\n        controlled.add(bindingId);\n        parsedBindingsMap.set(bindingId, {\n          scopePath,\n          result: { value, loading: true },\n        });\n      }\n\n      const configBindings = _.pick(elm.attributes, USE_DATA_QUERY_CONFIG_KEYS);\n      const nestedBindablePaths = flattenNestedBindables(configBindings);\n\n      for (const [nestedPath, paramValue] of nestedBindablePaths) {\n        const bindingId = `${elm.id}.config${nestedPath}`;\n        const scopePath = `${elm.name}.config${nestedPath}`;\n        const bindable = paramValue;\n        parsedBindingsMap.set(bindingId, parseBinding(bindable, { scopePath }));\n      }\n    }\n\n    if (appDom.isMutation(elm)) {\n      if (elm.params) {\n        for (const [paramName, bindable] of Object.entries(elm.params)) {\n          const bindingId = `${elm.id}.params.${paramName}`;\n          const scopePath = `${elm.name}.params.${paramName}`;\n\n          const bindingType = bindable && getBindingType(bindable);\n          if (bindingType === 'const') {\n            parsedBindingsMap.set(bindingId, {\n              scopePath,\n              result: { value: bindable },\n            });\n          } else if (bindingType === 'jsExpression') {\n            parsedBindingsMap.set(bindingId, {\n              scopePath,\n              expression: (bindable as JsExpressionAttrValue).$$jsExpression,\n            });\n          }\n        }\n      }\n\n      for (const [key, value] of Object.entries(INITIAL_FETCH)) {\n        const bindingId = `${elm.id}.${key}`;\n        const scopePath = `${elm.name}.${key}`;\n        controlled.add(bindingId);\n        parsedBindingsMap.set(bindingId, {\n          scopePath,\n          result: { value, loading: true },\n        });\n      }\n    }\n  }\n\n  if (!Array.isArray(rootNode) && appDom.isPage(rootNode)) {\n    if (location && !Array.isArray(rootNode) && appDom.isPage(rootNode)) {\n      const urlParams = new URLSearchParams(location.search);\n      const pageParameters = rootNode.attributes.parameters || [];\n\n      for (const [paramName, paramDefault] of pageParameters) {\n        const bindingId = `${rootNode.id}.parameters.${paramName}`;\n        const scopePath = `page.parameters.${paramName}`;\n        parsedBindingsMap.set(bindingId, {\n          scopePath,\n          result: { value: urlParams.get(paramName) || paramDefault },\n        });\n      }\n    }\n  }\n\n  const parsedBindings: Record<string, ParsedBinding | EvaluatedBinding> =\n    Object.fromEntries(parsedBindingsMap);\n\n  return { parsedBindings, controlled, scopeMeta };\n}\n\nfunction useElmToolpadComponent(elm: appDom.ElementNode): ToolpadComponent {\n  const componentId = getElementNodeComponentId(elm);\n  return useComponent(componentId);\n}\n\ninterface RenderedNodeProps {\n  nodeId: NodeId;\n}\n\nfunction RenderedNode({ nodeId }: RenderedNodeProps) {\n  const dom = useDomContext();\n  const node = appDom.getNode(dom, nodeId, 'element');\n  const Component: ToolpadComponent<any> = useElmToolpadComponent(node);\n  const childNodeGroups = appDom.getChildNodes(dom, node);\n\n  return (\n    /* eslint-disable-next-line @typescript-eslint/no-use-before-define */\n    <RenderedNodeContent node={node} childNodeGroups={childNodeGroups} Component={Component} />\n  );\n}\n\ninterface RuntimeScopedProps {\n  id: string;\n  parseBindingsResult: ReturnType<typeof parseBindings>;\n  localScope?: Record<string, unknown>;\n  onUpdate?: (params: { scope: RuntimeScope; scopeMeta: ScopeMeta }) => void;\n  children?: React.ReactNode;\n}\n\nfunction RuntimeScoped({\n  id,\n  parseBindingsResult,\n  localScope,\n  onUpdate,\n  children,\n}: RuntimeScopedProps) {\n  const parentScope = React.useContext(RuntimeScopeContext);\n  const dom = useDomContext();\n\n  const { parsedBindings, controlled, scopeMeta } = parseBindingsResult;\n\n  const [scopeBindings, setScopeBindings] =\n    React.useState<Record<string, ParsedBinding | EvaluatedBinding>>(parsedBindings);\n\n  const prevDom = React.useRef(dom);\n  React.useEffect(() => {\n    if (dom === prevDom.current) {\n      // Ignore this effect if there are no dom updates.\n      // IMPORTANT!!! This assumes the `RenderedPage` component is remounted when the `nodeId` changes\n      //  <RenderedPage nodeId={someId} key={someId} />\n      return;\n    }\n    prevDom.current = dom;\n\n    setScopeBindings((existingBindings) => {\n      // Make sure to patch page bindings after dom nodes have been added or removed\n      const updated: Record<string, ParsedBinding | EvaluatedBinding> = {};\n      for (const [key, binding] of Object.entries(parsedBindings)) {\n        updated[key] = controlled.has(key) ? existingBindings[key] || binding : binding;\n      }\n      return updated;\n    });\n  }, [parsedBindings, controlled, dom]);\n\n  const { setBindingByScopePath: setParentBindingByScopePath } =\n    React.useContext(SetBindingContext) ?? {};\n\n  const setBinding = React.useCallback(\n    (bindingId: string, result: BindingEvaluationResult) => {\n      setScopeBindings((existingBindings): Record<string, ParsedBinding | EvaluatedBinding> => {\n        const { expression, initializer, ...parsedBinding } = parsedBindings[bindingId];\n        const existingBinding = existingBindings[bindingId];\n\n        if (existingBinding?.result && isEqual(existingBinding.result, result)) {\n          return existingBindings;\n        }\n\n        return {\n          ...existingBindings,\n          ...{\n            [bindingId]: { ...parsedBinding, result },\n          },\n        };\n      });\n    },\n    [parsedBindings],\n  );\n\n  const bindingsByScopePath = React.useMemo(\n    () =>\n      new Map<string, string>(\n        Object.entries(scopeBindings).map(\n          ([bindingId, binding]) => [binding.scopePath, bindingId] as [string, string],\n        ),\n      ),\n    [scopeBindings],\n  );\n\n  const setBindingByScopePath = React.useCallback(\n    (scopePath: string, result: BindingEvaluationResult) => {\n      const bindingToUpdateId = bindingsByScopePath.get(scopePath);\n      if (bindingToUpdateId) {\n        setBinding(bindingToUpdateId, result);\n      } else if (setParentBindingByScopePath) {\n        setParentBindingByScopePath(scopePath, result);\n      } else {\n        throw new Error(`No binding found for scope path \"${scopePath}\"`);\n      }\n    },\n    [bindingsByScopePath, setBinding, setParentBindingByScopePath],\n  );\n\n  const setControlledBinding = React.useCallback(\n    (bindingId: string, result: BindingEvaluationResult) => {\n      if (!controlled.has(bindingId)) {\n        throw new Error(`Not a controlled binding \"${bindingId}\"`);\n      }\n\n      setBinding(bindingId, result);\n    },\n    [controlled, setBinding],\n  );\n\n  const childScope = React.useMemo(\n    () =>\n      createScope(id, scopeBindings, {\n        localValues: localScope,\n        parentScope,\n        meta: scopeMeta,\n      }),\n    [id, localScope, parentScope, scopeBindings, scopeMeta],\n  );\n\n  const vmRef = React.useContext(ApplicationVmApiContext);\n  React.useEffect(() => {\n    if (!vmRef) {\n      return () => {};\n    }\n    return vmRef.current.registerScope(childScope);\n  }, [vmRef, childScope]);\n\n  const evaluateScopeExpression = React.useCallback(\n    async (expression: string) => {\n      const updates: Record<string, unknown> = {};\n\n      const proxify = <T extends object>(obj: T, scopePathSegments: string[]): T => {\n        return new Proxy(obj, {\n          get(target, prop, receiver) {\n            if (typeof prop === 'symbol') {\n              return Reflect.get(target, prop, receiver);\n            }\n\n            const result = target[prop as keyof T];\n\n            if (result && typeof result === 'object') {\n              return proxify(result, [...scopePathSegments, prop]);\n            }\n\n            return Reflect.get(target, prop, receiver);\n          },\n          set(target, prop, newValue, receiver) {\n            if (typeof prop === 'symbol') {\n              return Reflect.set(target, prop, newValue, receiver);\n            }\n\n            const scopePath = [...scopePathSegments, prop].join('.');\n            updates[scopePath] = newValue;\n            return Reflect.set(target, prop, newValue, receiver);\n          },\n        });\n      };\n\n      const scopeValues = childScope.values;\n      const result = browserJsRuntime.evaluateExpression(expression, proxify(scopeValues, []));\n\n      await result.value;\n\n      for (const [scopePath, newValue] of Object.entries(updates)) {\n        setBindingByScopePath(scopePath, { value: newValue });\n      }\n\n      return result;\n    },\n    [childScope.values, setBindingByScopePath],\n  );\n\n  React.useEffect(() => {\n    onUpdate?.({\n      scopeMeta,\n      scope: childScope,\n    });\n  }, [scopeMeta, childScope, onUpdate]);\n\n  const setBindingContext = React.useMemo<SetBindingContextValue>(\n    () => ({\n      setBinding,\n      setControlledBinding,\n      setBindingByScopePath,\n    }),\n    [setBinding, setControlledBinding, setBindingByScopePath],\n  );\n\n  return (\n    <RuntimeScopeContext.Provider value={childScope}>\n      <SetBindingContext.Provider value={setBindingContext}>\n        <EvaluateScopeExpressionProvider value={evaluateScopeExpression}>\n          {children}\n        </EvaluateScopeExpressionProvider>\n      </SetBindingContext.Provider>\n    </RuntimeScopeContext.Provider>\n  );\n}\n\ninterface TemplateScopedProps {\n  id: string;\n  propName: string;\n  node: appDom.ElementNode;\n  localScope: Record<string, unknown>;\n  children?: React.ReactNode;\n}\n\nfunction TemplateScoped({ id, node, localScope, propName, children }: TemplateScopedProps) {\n  const dom = useDomContext();\n  const components = useComponents();\n  const location = useLocation();\n\n  const parseBindingsResult = React.useMemo(() => {\n    const { [propName]: templateChildren = [] } = appDom.getChildNodes(dom, node);\n    return parseBindings(dom, templateChildren, components, location);\n  }, [components, dom, node, propName, location]);\n\n  return (\n    <RuntimeScoped id={id} parseBindingsResult={parseBindingsResult} localScope={localScope}>\n      {children}\n    </RuntimeScoped>\n  );\n}\n\nfunction NodeError({ error }: NodeErrorProps) {\n  return (\n    <Tooltip title={error.message}>\n      <span\n        style={{\n          display: 'inline-flex',\n          flexDirection: 'row',\n          alignItems: 'center',\n          padding: 8,\n          background: 'red',\n          color: 'white',\n        }}\n      >\n        <ErrorIcon color=\"inherit\" style={{ marginRight: 8 }} /> Error\n      </span>\n    </Tooltip>\n  );\n}\n\ninterface RenderedNodeContentProps {\n  node: appDom.PageNode | appDom.ElementNode;\n  childNodeGroups: appDom.NodeChildren<appDom.ElementNode>;\n  Component: ToolpadComponent<any>;\n}\n\nfunction RenderedNodeContent({ node, childNodeGroups, Component }: RenderedNodeContentProps) {\n  const { setControlledBinding } = React.useContext(SetBindingContext) ?? {};\n  invariant(setControlledBinding, 'Node must be rendered in a RuntimeScoped context');\n\n  const nodeId = node.id;\n\n  const componentConfig = Component[TOOLPAD_COMPONENT];\n  const {\n    argTypes = {},\n    errorProp,\n    loadingProp,\n    loadingPropSource,\n    errorPropSource,\n  } = componentConfig;\n\n  const isLayoutNode =\n    appDom.isPage(node) || (appDom.isElement(node) && isPageLayoutComponent(node));\n\n  const scope = useAssertedContext(RuntimeScopeContext);\n  const liveBindings = scope.bindings;\n\n  const boundProps: Record<string, any> = React.useMemo(() => {\n    const loadingPropSourceSet = loadingPropSource ? new Set(loadingPropSource) : null;\n    const errorPropSourceSet = errorPropSource ? new Set(errorPropSource) : null;\n    const hookResult: Record<string, any> = {};\n\n    // error state we will propagate to the component\n    let error: Error | undefined;\n    // loading state we will propagate to the component\n    let loading: boolean = false;\n\n    for (const [propName, argType] of Object.entries(argTypes)) {\n      const bindingId = `${nodeId}.props.${propName}`;\n      const binding = liveBindings[bindingId];\n\n      if (binding) {\n        hookResult[propName] = binding.value;\n\n        if (binding.loading && (!loadingPropSourceSet || loadingPropSourceSet.has(propName))) {\n          loading = true;\n        } else if (\n          !error &&\n          binding.error &&\n          (!errorPropSourceSet || errorPropSourceSet.has(propName))\n        ) {\n          error = binding.error;\n        }\n      }\n\n      if (typeof hookResult[propName] === 'undefined' && argType) {\n        hookResult[propName] = getArgTypeDefaultValue(argType);\n      }\n    }\n\n    if (error) {\n      if (errorProp) {\n        hookResult[errorProp] = error;\n      } else {\n        console.error(errorFrom(error));\n      }\n    }\n\n    if (loadingProp && loading) {\n      hookResult[loadingProp] = true;\n    }\n\n    return hookResult;\n  }, [argTypes, errorProp, errorPropSource, liveBindings, loadingProp, loadingPropSource, nodeId]);\n\n  const boundLayoutProps: Record<string, any> = React.useMemo(() => {\n    const hookResult: Record<string, any> = {};\n\n    for (const [propName, argType] of isLayoutNode ? [] : Object.entries(layoutBoxArgTypes)) {\n      const bindingId = `${nodeId}.layout.${propName}`;\n      const binding = liveBindings[bindingId];\n      if (binding) {\n        hookResult[propName] = binding.value;\n      }\n\n      if (typeof hookResult[propName] === 'undefined' && argType) {\n        hookResult[propName] = getArgTypeDefaultValue(argType);\n      }\n    }\n\n    return hookResult;\n  }, [isLayoutNode, liveBindings, nodeId]);\n\n  const onChangeHandlers: Record<string, (param: any) => void> = React.useMemo(\n    () =>\n      mapProperties(argTypes, ([key, argType]) => {\n        if (!argType || !argType.onChangeProp) {\n          return null;\n        }\n\n        const handler = (param: any) => {\n          const bindingId = `${nodeId}.props.${key}`;\n\n          const value = argType.onChangeHandler ? argType.onChangeHandler(param) : param;\n          setControlledBinding(bindingId, { value });\n        };\n\n        return [argType.onChangeProp, handler];\n      }),\n    [argTypes, nodeId, setControlledBinding],\n  );\n\n  const navigateToPage = usePageNavigator();\n  const evaluateScopeExpression = useEvaluateScopeExpression();\n\n  const eventHandlers: Record<string, (param: any) => void> = React.useMemo(() => {\n    return mapProperties(argTypes, ([key, argType]) => {\n      if (!argType || argType.type !== 'event' || !appDom.isElement(node)) {\n        return null;\n      }\n\n      const action = (node as appDom.ElementNode).props?.[key];\n\n      if (action?.$$navigationAction) {\n        const handler = async () => {\n          const { page, parameters = {} } = action.$$navigationAction;\n          if (page) {\n            const parsedParameterEntries = await Promise.all(\n              Object.keys(parameters).map(async (parameterName) => {\n                const parameterValue = parameters[parameterName];\n\n                if (parameterValue?.$$jsExpression) {\n                  const result = await evaluateScopeExpression(parameterValue.$$jsExpression);\n                  return [parameterName, result.value];\n                }\n                return [parameterName, parameterValue];\n              }),\n            );\n\n            const parsedParameters = Object.fromEntries(parsedParameterEntries);\n\n            navigateToPage(page, parsedParameters);\n          }\n        };\n\n        return [key, handler];\n      }\n\n      if (action?.$$jsExpressionAction) {\n        const handler = () => {\n          const code = action.$$jsExpressionAction;\n          const exprToEvaluate = `(async () => {${code}})()`;\n          evaluateScopeExpression(exprToEvaluate);\n        };\n\n        return [key, handler];\n      }\n\n      return null;\n    });\n  }, [argTypes, node, navigateToPage, evaluateScopeExpression]);\n\n  const reactChildren = React.useMemo(() => {\n    const result: Record<string, React.ReactNode> = {};\n    for (const [prop, childNodes] of Object.entries(childNodeGroups)) {\n      result[prop] = childNodes.map((child) => <RenderedNode key={child.id} nodeId={child.id} />);\n    }\n    return result;\n  }, [childNodeGroups]);\n\n  const layoutElementProps = React.useMemo(() => {\n    if (appDom.isElement(node) && isPageRow(node)) {\n      return {\n        layoutColumnSizes: childNodeGroups.children.map((child) => child.layout?.columnSize),\n      };\n    }\n    return {};\n  }, [childNodeGroups.children, node]);\n\n  const props: Record<string, any> = React.useMemo(() => {\n    return {\n      ...boundProps,\n      ...onChangeHandlers,\n      ...eventHandlers,\n      ...layoutElementProps,\n      ...reactChildren,\n    };\n  }, [boundProps, eventHandlers, layoutElementProps, onChangeHandlers, reactChildren]);\n\n  const previousProps = React.useRef<Record<string, any>>(props);\n  const [hasSetInitialBindings, setHasSetInitialBindings] = React.useState(false);\n  React.useEffect(() => {\n    Object.entries(argTypes).forEach(([key, argType]) => {\n      if (!argType?.defaultValueProp) {\n        return;\n      }\n\n      if (\n        hasSetInitialBindings &&\n        previousProps.current[argType.defaultValueProp] === props[argType.defaultValueProp]\n      ) {\n        return;\n      }\n\n      const bindingIdToUpdate = `${nodeId}.props.${key}`;\n      setControlledBinding(bindingIdToUpdate, { value: props[argType.defaultValueProp] });\n    });\n\n    previousProps.current = props;\n    setHasSetInitialBindings(true);\n  }, [props, argTypes, nodeId, setControlledBinding, hasSetInitialBindings]);\n\n  const wrappedProps = React.useMemo(() => {\n    const hookResult: Record<string, any> = { ...props };\n    // Wrap element props\n    for (const [propName, argType] of Object.entries(argTypes)) {\n      const isElement = argType?.type === 'element';\n      const isTemplate = argType?.type === 'template';\n\n      if (isElement || isTemplate) {\n        const value = hookResult[propName];\n\n        let wrappedValue = value;\n        if (argType.control?.type === 'slots') {\n          wrappedValue = <Slots prop={propName}>{value}</Slots>;\n        } else if (argType.control?.type === 'slot' || argType.control?.type === 'layoutSlot') {\n          wrappedValue = (\n            <Placeholder prop={propName} hasLayout={argType.control?.type === 'layoutSlot'}>\n              {value}\n            </Placeholder>\n          );\n        }\n\n        if (isTemplate) {\n          appDom.assertIsElement(node);\n          hookResult[propName] = (key: string, localScope: Record<string, unknown>) => {\n            return (\n              <TemplateScoped\n                id={`${node.id}.props.${propName}.${key}`}\n                localScope={localScope}\n                node={node}\n                propName={propName}\n              >\n                {wrappedValue}\n              </TemplateScoped>\n            );\n          };\n        } else {\n          hookResult[propName] = wrappedValue;\n        }\n      }\n    }\n    return hookResult;\n  }, [argTypes, node, props]);\n\n  const vmRef = React.useContext(ApplicationVmApiContext);\n  React.useEffect(() => {\n    if (!vmRef) {\n      return () => {};\n    }\n    const unsubscribers: (() => void)[] = [];\n    for (const propName of Object.keys(argTypes)) {\n      const unsubscribe = vmRef.current.registerBindingScope(`${nodeId}.props.${propName}`, scope);\n      unsubscribers.push(unsubscribe);\n    }\n    return () => {\n      unsubscribers.forEach((unsubscribe) => unsubscribe());\n    };\n  }, [nodeId, argTypes, vmRef, scope]);\n\n  return (\n    <NodeRuntimeWrapper\n      nodeId={nodeId}\n      nodeName={node.name}\n      componentConfig={Component[TOOLPAD_COMPONENT]}\n      NodeError={NodeError}\n    >\n      {isLayoutNode ? (\n        <Component {...wrappedProps} />\n      ) : (\n        <Box\n          sx={{\n            display: 'flex',\n            alignItems: boundLayoutProps.verticalAlign,\n            justifyContent: boundLayoutProps.horizontalAlign,\n          }}\n        >\n          <Component {...wrappedProps} />\n        </Box>\n      )}\n    </NodeRuntimeWrapper>\n  );\n}\n\ninterface PageRootProps {\n  children?: React.ReactNode;\n}\n\nfunction PageRoot({ children }: PageRootProps) {\n  return (\n    <Container>\n      <Stack\n        data-testid=\"page-root\"\n        direction=\"column\"\n        sx={{\n          my: 2,\n          gap: 1,\n        }}\n      >\n        {children}\n      </Stack>\n    </Container>\n  );\n}\n\nconst PageRootComponent = createComponent(PageRoot, {\n  argTypes: {\n    children: {\n      type: 'element',\n      control: { type: 'slots' },\n    },\n  },\n});\n\ninterface QueryNodeProps {\n  page: appDom.PageNode;\n  node: appDom.QueryNode;\n}\n\nfunction QueryNode({ page, node }: QueryNodeProps) {\n  const { setControlledBinding } = React.useContext(SetBindingContext) ?? {};\n  invariant(setControlledBinding, 'QueryNode must be rendered in a RuntimeScoped context');\n\n  const { bindings } = useAssertedContext(RuntimeScopeContext);\n\n  const params = resolveBindables(\n    bindings,\n    `${node.id}.params`,\n    Object.fromEntries(node.params ?? []),\n  );\n\n  const configBindings = _.pick(node.attributes, USE_DATA_QUERY_CONFIG_KEYS);\n  const options = resolveBindables(bindings, `${node.id}.config`, configBindings);\n\n  const inputError = params.error || options.error;\n  const inputIsLoading = params.loading || options.loading;\n\n  const queryResult = useDataQuery(page, node, params.value, {\n    ...options.value,\n    enabled: !inputIsLoading && !inputError,\n  });\n\n  React.useEffect(() => {\n    const { isLoading: queryIsLoading, error: queryError, data, rows, ...result } = queryResult;\n\n    const error = queryError || inputError;\n    const isLoading = queryIsLoading || inputIsLoading;\n\n    for (const [key, value] of Object.entries(result)) {\n      const bindingId = `${node.id}.${key}`;\n      setControlledBinding(bindingId, { value });\n    }\n\n    // Here we propagate the error and loading state to the data and rows properties\n    // TODO: is there a straightforward way for us to generalize this behavior?\n    setControlledBinding(`${node.id}.isLoading`, { value: isLoading });\n    setControlledBinding(`${node.id}.error`, {\n      value: error ? String(error.message || error) : undefined,\n    });\n    const deferredStatus = { loading: isLoading, error };\n    setControlledBinding(`${node.id}.data`, { ...deferredStatus, value: data });\n    setControlledBinding(`${node.id}.rows`, { ...deferredStatus, value: rows });\n  }, [node.name, node.id, queryResult, setControlledBinding, inputError, inputIsLoading]);\n\n  return null;\n}\n\ninterface MutationNodeProps {\n  page: appDom.PageNode;\n  node: appDom.QueryNode;\n}\n\nfunction MutationNode({ node, page }: MutationNodeProps) {\n  const { setControlledBinding } = React.useContext(SetBindingContext) ?? {};\n  invariant(setControlledBinding, 'MutationNode must be rendered in a RuntimeScoped context');\n\n  const { bindings } = useAssertedContext(RuntimeScopeContext);\n\n  const queryId = node.id;\n  const { value: params } = resolveBindables(\n    bindings,\n    `${node.id}.params`,\n    Object.fromEntries(node.params ?? []),\n  );\n\n  const {\n    isLoading,\n    data: responseData = EMPTY_OBJECT,\n    error: fetchError,\n    mutateAsync,\n  } = useMutation(\n    async (overrides: any = {}) =>\n      execDataSourceQuery({\n        pageName: page.name,\n        queryName: node.name,\n        params: { ...params, ...overrides },\n      }),\n    {\n      mutationKey: [queryId, params],\n    },\n  );\n\n  const { data, error: apiError } = responseData;\n\n  const error = apiError || fetchError;\n\n  // Stabilize the mutation and prepare for inclusion in global scope\n  const mutationResult: UseFetch = React.useMemo(\n    () => ({\n      isLoading,\n      isFetching: isLoading,\n      error,\n      data,\n      rows: Array.isArray(data) ? data : EMPTY_ARRAY,\n      call: mutateAsync,\n      fetch: mutateAsync,\n      refetch: () => {\n        throw new Error(`refetch is not supported in manual queries`);\n      },\n    }),\n    [isLoading, error, mutateAsync, data],\n  );\n\n  React.useEffect(() => {\n    for (const [key, value] of Object.entries(mutationResult)) {\n      const bindingId = `${node.id}.${key}`;\n      setControlledBinding(bindingId, { value });\n    }\n  }, [node.id, mutationResult, setControlledBinding]);\n\n  return null;\n}\n\ninterface FetchNodeProps {\n  page: appDom.PageNode;\n  node: appDom.QueryNode;\n}\n\nfunction FetchNode({ node, page }: FetchNodeProps) {\n  const mode: appDom.FetchMode = node.attributes.mode || 'query';\n  switch (mode) {\n    case 'query':\n      return <QueryNode node={node} page={page} />;\n    case 'mutation':\n      return <MutationNode node={node} page={page} />;\n    default:\n      throw new Error(`Unrecognized fetch mode \"${mode}\"`);\n  }\n}\n\nfunction RenderedPage({ nodeId }: RenderedNodeProps) {\n  const dom = useDomContext();\n  const page = appDom.getNode(dom, nodeId, 'page');\n  const { children = [], queries = [] } = appDom.getChildNodes(dom, page);\n\n  usePageTitle(page.attributes.title);\n\n  const location = useLocation();\n  const components = useComponents();\n\n  const parseBindingsResult = React.useMemo(\n    () => parseBindings(dom, page, components, location),\n    [components, dom, location, page],\n  );\n\n  const canvasEvents = React.useContext(CanvasEventsContext);\n\n  const onUpdate = useEvent(({ scope, scopeMeta }) => {\n    if (canvasEvents) {\n      canvasEvents.emit('pageStateUpdated', {\n        pageState: scope.values,\n        globalScopeMeta: scopeMeta,\n      });\n      canvasEvents.emit('pageBindingsUpdated', { bindings: scope.bindings });\n    }\n  });\n\n  const applicationVm = useApplicationVm((vm) => {\n    if (canvasEvents) {\n      canvasEvents.emit('vmUpdated', { vm });\n    }\n  });\n\n  return (\n    <ApplicationVmApiContext.Provider value={applicationVm}>\n      <RuntimeScoped id={'global'} parseBindingsResult={parseBindingsResult} onUpdate={onUpdate}>\n        <RenderedNodeContent\n          node={page}\n          childNodeGroups={{ children }}\n          Component={PageRootComponent}\n        />\n        {queries.map((node) => (\n          <FetchNode key={node.id} page={page} node={node} />\n        ))}\n      </RuntimeScoped>\n    </ApplicationVmApiContext.Provider>\n  );\n}\n\nfunction PageNotFound() {\n  return (\n    <Container\n      sx={{\n        display: 'flex',\n        alignItems: 'center',\n        justifyContent: 'center',\n        flexDirection: 'column',\n      }}\n    >\n      <Typography variant=\"h1\">Not found</Typography>\n      <Typography>The page doesn&apos;t exist in this application.</Typography>\n    </Container>\n  );\n}\n\ninterface RenderedPagesProps {\n  pages: appDom.PageNode[];\n  defaultPage: appDom.PageNode;\n}\n\nfunction RenderedPages({ pages, defaultPage }: RenderedPagesProps) {\n  const defaultPageNavigation = <Navigate to={`/pages/${defaultPage.id}`} replace />;\n  return (\n    <Routes>\n      {pages.map((page) => (\n        <React.Fragment key={page.id}>\n          <Route\n            path={`/pages/${page.id}`}\n            element={\n              <RenderedPage\n                nodeId={page.id}\n                // Make sure the page itself mounts when the route changes. This make sure all pageBindings are reinitialized\n                // during first render. Fixes https://github.com/mui/mui-toolpad/issues/1050\n                key={page.id}\n              />\n            }\n          />\n        </React.Fragment>\n      ))}\n      {pages.map((page) => (\n        <React.Fragment key={page.id}>\n          <Route\n            path={`/pages/${page.name}`}\n            element={<Navigate to={`/pages/${page.id}`} replace />}\n          />\n        </React.Fragment>\n      ))}\n      <Route path=\"/pages\" element={defaultPageNavigation} />\n      <Route path=\"/\" element={defaultPageNavigation} />\n      <Route path=\"*\" element={<PageNotFound />} />\n    </Routes>\n  );\n}\n\nconst FullPageCentered = styled('div')({\n  width: '100%',\n  height: '100%',\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n});\n\nfunction AppLoading() {\n  return <LinearProgress />;\n}\n\nfunction AppError({ error }: FallbackProps) {\n  return (\n    <FullPageCentered>\n      <Alert severity=\"error\">\n        <AlertTitle>Something went wrong</AlertTitle>\n        <Pre>{error.message}</Pre>\n        <Pre>{error.stack}</Pre>\n      </Alert>\n    </FullPageCentered>\n  );\n}\n\nexport const queryClient = new QueryClient({\n  defaultOptions: {\n    queries: {\n      retry: false,\n      staleTime: 60 * 1000,\n    },\n  },\n});\n\nexport interface ToolpadAppLayoutProps {\n  dom: appDom.RenderTree;\n  hasShell?: boolean;\n}\n\nfunction ToolpadAppLayout({ dom, hasShell: hasShellProp = true }: ToolpadAppLayoutProps) {\n  const root = appDom.getApp(dom);\n  const { pages = [] } = appDom.getChildNodes(dom, root);\n\n  const location = useLocation();\n  const { pathname, search } = location;\n  const urlParams = React.useMemo(() => new URLSearchParams(search), [search]);\n\n  const pageMatch = matchPath(PREVIEW_PAGE_ROUTE, `/preview${pathname}`);\n  const pageId = pageMatch?.params.nodeId;\n\n  const defaultPage = pages[0];\n  const page = pageId ? appDom.getMaybeNode(dom, pageId as NodeId, 'page') : defaultPage;\n\n  const displayMode = urlParams.get('toolpad-display') || page?.attributes.display;\n\n  const hasShell = hasShellProp && displayMode !== 'standalone';\n\n  const showPreviewHeader = isPreview && !isRenderedInCanvas;\n\n  return (\n    <React.Fragment>\n      {showPreviewHeader ? <PreviewHeader pageId={pageId} /> : null}\n      <Box sx={{ flex: 1, display: 'flex' }}>\n        {hasShell && pages.length > 0 ? (\n          <AppNavigation pages={pages} clipped={showPreviewHeader} />\n        ) : null}\n        <RenderedPages pages={pages} defaultPage={defaultPage} />\n      </Box>\n    </React.Fragment>\n  );\n}\n\nexport interface LoadComponents {\n  (state: RuntimeState): Promise<ToolpadComponents>;\n}\n\nexport interface ToolpadAppProps {\n  rootRef?: React.Ref<HTMLDivElement>;\n  loadComponents: LoadComponents;\n  hasShell?: boolean;\n  basename: string;\n  state: RuntimeState;\n}\n\nexport default function ToolpadApp({\n  rootRef,\n  loadComponents,\n  basename,\n  hasShell = true,\n  state,\n}: ToolpadAppProps) {\n  const { dom } = state;\n\n  const [components, setComponents] = React.useState<ToolpadComponents | null>(null);\n\n  const [resetNodeErrorsKey, setResetNodeErrorsKey] = React.useState(0);\n\n  React.useEffect(() => setResetNodeErrorsKey((key) => key + 1), [dom]);\n\n  const { value: showDevtools, toggle: toggleDevtools } = useBoolean(false);\n\n  React.useEffect(() => {\n    (window as any).toggleDevtools = () => toggleDevtools();\n  }, [toggleDevtools]);\n\n  React.useEffect(() => {\n    loadComponents(state).then((codeComponents) =>\n      setComponents({ ...codeComponents, ...internalComponents }),\n    );\n  }, [loadComponents, state]);\n\n  return (\n    <AppThemeProvider dom={dom}>\n      <CssBaseline enableColorScheme />\n      <AppRoot ref={rootRef}>\n        {components ? (\n          <ComponentsContextProvider value={components}>\n            <DomContextProvider value={dom}>\n              <ErrorBoundary FallbackComponent={AppError}>\n                <ResetNodeErrorsKeyProvider value={resetNodeErrorsKey}>\n                  <React.Suspense fallback={<AppLoading />}>\n                    <QueryClientProvider client={queryClient}>\n                      <BrowserRouter basename={basename}>\n                        <ToolpadAppLayout dom={dom} hasShell={hasShell} />\n                      </BrowserRouter>\n                      {showDevtools ? <ReactQueryDevtoolsProduction initialIsOpen={false} /> : null}\n                    </QueryClientProvider>\n                  </React.Suspense>\n                </ResetNodeErrorsKeyProvider>\n              </ErrorBoundary>\n            </DomContextProvider>\n          </ComponentsContextProvider>\n        ) : (\n          <AppLoading />\n        )}\n        <EditorOverlay id={HTML_ID_EDITOR_OVERLAY} />\n      </AppRoot>\n    </AppThemeProvider>\n  );\n}\n","import { nanoid } from 'nanoid/non-secure';\nimport { generateKeyBetween } from 'fractional-indexing';\nimport {\n  NodeId,\n  NodeReference,\n  BindableAttrValue,\n  BindableAttrValues,\n  SecretAttrValue,\n  BindableAttrEntries,\n  JsExpressionAttrValue,\n  EnvAttrValue,\n} from '@mui/toolpad-core';\nimport invariant from 'invariant';\nimport { BoxProps, ThemeOptions as MuiThemeOptions } from '@mui/material';\nimport { pascalCase, removeDiacritics, uncapitalize } from '@mui/toolpad-utils/strings';\nimport { mapProperties, mapValues } from '@mui/toolpad-utils/collections';\nimport { ConnectionStatus } from '../types';\nimport { omit, update, updateOrCreate } from '../utils/immutability';\nimport { ExactEntriesOf, Maybe } from '../utils/types';\nimport { envBindingSchema } from '../server/schema';\n\nexport const CURRENT_APPDOM_VERSION = 7;\n\nexport const RESERVED_NODE_PROPERTIES = [\n  'id',\n  'type',\n  'parentId',\n  'parentProp',\n  'parentIndex',\n] as const;\nexport type ReservedNodeProperty = (typeof RESERVED_NODE_PROPERTIES)[number];\n\nexport function createFractionalIndex(index1: string | null, index2: string | null) {\n  return generateKeyBetween(index1, index2);\n}\n\n// Compares two strings lexicographically\nexport function compareFractionalIndex(index1: string, index2: string): number {\n  if (index1 === index2) {\n    return 0;\n  }\n  return index1 > index2 ? 1 : -1;\n}\n\ntype AppDomNodeType =\n  | 'app'\n  | 'connection'\n  | 'theme'\n  | 'page'\n  | 'element'\n  | 'codeComponent'\n  | 'query'\n  | 'mutation';\n\nexport interface AppDomNodeBase {\n  readonly id: NodeId;\n  readonly type: AppDomNodeType;\n  readonly name: string;\n  readonly parentId: NodeId | null;\n  readonly parentProp: string | null;\n  readonly parentIndex: string | null;\n  readonly attributes: {};\n}\n\nexport interface AppNode extends AppDomNodeBase {\n  readonly type: 'app';\n  readonly parentId: null;\n}\n\nexport interface ThemeNode extends AppDomNodeBase {\n  readonly type: 'theme';\n  readonly theme?: MuiThemeOptions;\n}\n\nexport interface ConnectionNode<P = unknown> extends AppDomNodeBase {\n  readonly type: 'connection';\n  readonly attributes: {\n    readonly dataSource: string;\n    readonly params: SecretAttrValue<P | null>;\n    readonly status: ConnectionStatus | null;\n  };\n}\n\nexport type PageDisplayMode = 'standalone' | 'shell';\n\nexport interface PageNode extends AppDomNodeBase {\n  readonly type: 'page';\n  readonly attributes: {\n    readonly title: string;\n    readonly parameters?: [string, string][];\n    readonly module?: string;\n    readonly display?: PageDisplayMode;\n  };\n}\n\nexport interface ElementNode<P = any> extends AppDomNodeBase {\n  readonly type: 'element';\n  readonly attributes: {\n    readonly component: string;\n  };\n  readonly props?: BindableAttrValues<P>;\n  readonly layout?: {\n    readonly horizontalAlign?: BoxProps['justifyContent'];\n    readonly verticalAlign?: BoxProps['alignItems'];\n    readonly columnSize?: number;\n  };\n}\n\nexport interface CodeComponentNode extends AppDomNodeBase {\n  readonly type: 'codeComponent';\n  readonly attributes: {\n    readonly code: string;\n    readonly isNew?: boolean;\n  };\n}\n\nexport type FetchMode = 'query' | 'mutation';\n\n/**\n * A DOM query is defined primarily by a server defined part \"attributes.query\"\n * and a clientside defined part \"params\". \"params\" are constructed in the runtime\n * from bound expressions. The resolved object will be sent to the server and combined\n * with the query will be used to collect the data from the backend.\n */\nexport interface QueryNode<Q = any> extends AppDomNodeBase {\n  readonly type: 'query';\n  readonly params?: BindableAttrEntries;\n  readonly attributes: {\n    readonly mode?: FetchMode;\n    readonly dataSource?: string;\n    readonly connectionId: NodeReference | null;\n    readonly query: Q;\n    readonly transform?: string;\n    readonly transformEnabled?: boolean;\n    /** @deprecated Not necessary to be user-facing, we will expose staleTime instead if necessary */\n    readonly refetchOnWindowFocus?: boolean;\n    /** @deprecated Not necessary to be user-facing, we will expose staleTime instead if necessary */\n    readonly refetchOnReconnect?: boolean;\n    readonly refetchInterval?: number;\n    readonly cacheTime?: number;\n    readonly enabled?: BindableAttrValue<boolean>;\n  };\n}\n\n/**\n * @deprecated QueryNode can act as a mutation by switching the `mode` attribute to 'mutation'\n */\nexport interface MutationNode<Q = any> extends AppDomNodeBase {\n  readonly type: 'mutation';\n  readonly params?: BindableAttrValues;\n  readonly attributes: {\n    readonly dataSource?: string;\n    readonly connectionId: NodeReference | null;\n    readonly query: Q;\n  };\n}\n\ntype AppDomNodeOfType<K extends AppDomNodeType> = {\n  app: AppNode;\n  connection: ConnectionNode;\n  theme: ThemeNode;\n  page: PageNode;\n  element: ElementNode;\n  codeComponent: CodeComponentNode;\n  query: QueryNode;\n  mutation: MutationNode;\n}[K];\n\ntype AllowedChildren = {\n  app: {\n    pages: 'page';\n    connections: 'connection';\n    themes: 'theme';\n    codeComponents: 'codeComponent';\n  };\n  theme: {};\n  connection: {};\n  page: {\n    children: 'element';\n    queries: 'query';\n    mutations: 'mutation';\n  };\n  element: {\n    [prop: string]: 'element';\n  };\n  codeComponent: {};\n  query: {};\n  mutation: {};\n};\n\nexport type AppDomNode = AppDomNodeOfType<AppDomNodeType>;\n\ntype TypeOf<N extends AppDomNode> = N['type'];\ntype AllowedChildTypesOfType<T extends AppDomNodeType> = AllowedChildren[T];\ntype AllowedChildTypesOf<N extends AppDomNode> = AllowedChildTypesOfType<TypeOf<N>>;\n\nexport type ChildNodesOf<N extends AppDomNode> = {\n  [K in keyof AllowedChildTypesOf<N>]: AllowedChildTypesOf<N>[K] extends AppDomNodeType\n    ? AppDomNodeOfType<AllowedChildTypesOf<N>[K]>[]\n    : never;\n};\n\ntype CombinedChildrenOfType<T extends AppDomNodeType> =\n  AllowedChildren[T][keyof AllowedChildren[T]];\n\ntype CombinedAllowedChildren = {\n  [K in AppDomNodeType]: CombinedChildrenOfType<K>;\n};\n\ntype ParentTypeOfType<T extends AppDomNodeType> = {\n  [K in AppDomNodeType]: T extends CombinedAllowedChildren[K] ? K : never;\n}[AppDomNodeType];\nexport type ParentOf<N extends AppDomNode> = AppDomNodeOfType<ParentTypeOfType<TypeOf<N>>> | null;\n\nexport type ParentProp<Parent extends AppDomNode> = keyof AllowedChildTypesOfType<TypeOf<Parent>>;\n\nexport type ParentPropOf<Child extends AppDomNode, Parent extends AppDomNode> = {\n  [K in keyof AllowedChildren[TypeOf<Parent>]]: TypeOf<Child> extends AllowedChildren[TypeOf<Parent>][K]\n    ? K & string\n    : never;\n}[keyof AllowedChildren[TypeOf<Parent>]];\n\nexport type AppDomNodes = Record<NodeId, AppDomNode>;\n\nexport interface AppDom {\n  nodes: AppDomNodes;\n  root: NodeId;\n  version?: number;\n}\n\nfunction isType<T extends AppDomNode>(node: AppDomNode, type: T['type']): node is T {\n  return node.type === type;\n}\n\nfunction assertIsType<T extends AppDomNode>(node: AppDomNode, type: T['type']): asserts node is T {\n  invariant(isType(node, type), `Expected node type \"${type}\" but got \"${node.type}\"`);\n}\n\nexport function createId(): NodeId {\n  return nanoid(7) as NodeId;\n}\n\nexport function createSecret<V>(value: V): SecretAttrValue<V> {\n  return { $$secret: value };\n}\n\nexport function getMaybeNode<T extends AppDomNodeType>(\n  dom: AppDom,\n  nodeId: NodeId,\n  type: T,\n): AppDomNodeOfType<T> | null;\nexport function getMaybeNode<T extends AppDomNodeType>(\n  dom: AppDom,\n  nodeId: NodeId,\n  type?: T,\n): AppDomNode | null;\nexport function getMaybeNode<T extends AppDomNodeType>(\n  dom: AppDom,\n  nodeId: NodeId,\n  type?: T,\n): AppDomNode | null {\n  const node = dom.nodes[nodeId];\n  if (!node) {\n    return null;\n  }\n  if (type) {\n    assertIsType(node, type);\n  }\n  return node;\n}\n\nexport function getNode<T extends AppDomNodeType>(\n  dom: AppDom,\n  nodeId: NodeId,\n  type: T,\n): AppDomNodeOfType<T>;\nexport function getNode<T extends AppDomNodeType>(\n  dom: AppDom,\n  nodeId: NodeId,\n  type?: T,\n): AppDomNode;\nexport function getNode<T extends AppDomNodeType>(\n  dom: AppDom,\n  nodeId: NodeId,\n  type?: T,\n): AppDomNode {\n  const node = getMaybeNode(dom, nodeId, type);\n  if (!node) {\n    throw new Error(`Node \"${nodeId}\" not found`);\n  }\n  return node;\n}\n\nexport function isApp(node: AppDomNode): node is AppNode {\n  return isType<AppNode>(node, 'app');\n}\n\nexport function assertIsApp(node: AppDomNode): asserts node is AppNode {\n  assertIsType<AppNode>(node, 'app');\n}\n\nexport function isPage(node: AppDomNode): node is PageNode {\n  return isType<PageNode>(node, 'page');\n}\n\nexport function assertIsPage(node: AppDomNode): asserts node is PageNode {\n  assertIsType<PageNode>(node, 'page');\n}\n\nexport function isConnection<P>(node: AppDomNode): node is ConnectionNode<P> {\n  return isType<ConnectionNode>(node, 'connection');\n}\n\nexport function assertIsConnection<P>(node: AppDomNode): asserts node is ConnectionNode<P> {\n  assertIsType<ConnectionNode>(node, 'connection');\n}\n\nexport function isCodeComponent(node: AppDomNode): node is CodeComponentNode {\n  return isType<CodeComponentNode>(node, 'codeComponent');\n}\n\nexport function assertIsCodeComponent(node: AppDomNode): asserts node is CodeComponentNode {\n  assertIsType<CodeComponentNode>(node, 'codeComponent');\n}\n\nexport function isTheme(node: AppDomNode): node is ThemeNode {\n  return isType<ThemeNode>(node, 'theme');\n}\n\nexport function assertIsTheme(node: AppDomNode): asserts node is ThemeNode {\n  assertIsType<ThemeNode>(node, 'theme');\n}\n\nexport function isElement<P>(node: AppDomNode): node is ElementNode<P> {\n  return isType<ElementNode>(node, 'element');\n}\n\nexport function assertIsElement<P>(node: AppDomNode): asserts node is ElementNode<P> {\n  assertIsType<ElementNode>(node, 'element');\n}\n\nexport function isQuery<P>(node: AppDomNode): node is QueryNode<P> {\n  return isType<QueryNode>(node, 'query');\n}\n\nexport function assertIsQuery<P>(node: AppDomNode): asserts node is QueryNode<P> {\n  assertIsType<QueryNode>(node, 'query');\n}\n\nexport function isMutation<P>(node: AppDomNode): node is MutationNode<P> {\n  return isType<MutationNode>(node, 'mutation');\n}\n\nexport function assertIsMutation<P>(node: AppDomNode): asserts node is MutationNode<P> {\n  assertIsType<MutationNode>(node, 'mutation');\n}\n\nexport function getRoot(dom: AppDom): AppDomNode {\n  return getNode(dom, dom.root);\n}\n\nexport function getApp(dom: AppDom): AppNode {\n  const app = getRoot(dom);\n  assertIsApp(app);\n  return app;\n}\n\nexport type NodeChildren<N extends AppDomNode = any> = ChildNodesOf<N>;\n\n// TODO: memoize the result of this function per dom in a WeakMap\nconst childrenMemo = new WeakMap<AppDom, Map<NodeId, NodeChildren<any>>>();\nexport function getChildNodes<N extends AppDomNode>(dom: AppDom, parent: N): NodeChildren<N> {\n  let domChildrenMemo = childrenMemo.get(dom);\n  if (!domChildrenMemo) {\n    domChildrenMemo = new Map();\n    childrenMemo.set(dom, domChildrenMemo);\n  }\n\n  let result = domChildrenMemo.get(parent.id);\n  if (!result) {\n    result = {};\n    domChildrenMemo.set(parent.id, result);\n\n    const allNodeChildren: AppDomNode[] = Object.values(dom.nodes).filter(\n      (node: AppDomNode) => node.parentId === parent.id,\n    );\n\n    for (const child of allNodeChildren) {\n      const prop = child.parentProp || 'children';\n      let existing = result[prop];\n      if (!existing) {\n        existing = [];\n        result[prop] = existing;\n      }\n      existing.push(child);\n    }\n\n    for (const childArray of Object.values(result)) {\n      childArray?.sort((node1: AppDomNode, node2: AppDomNode) => {\n        invariant(\n          node1.parentIndex && node2.parentIndex,\n          `Nodes inside the dom should have a parentIndex if they have a parent`,\n        );\n        return compareFractionalIndex(node1.parentIndex, node2.parentIndex);\n      });\n    }\n  }\n\n  return result;\n}\n\nexport function getParent<N extends AppDomNode>(dom: AppDom, child: N): ParentOf<N> {\n  // Make sure we're using the last version of child in the dom\n  child = getNode(dom, child.id, child.type) as N;\n  if (child.parentId) {\n    const parent = getNode(dom, child.parentId);\n    return parent as ParentOf<N>;\n  }\n  return null;\n}\n\ntype AppDomNodeInitOfType<T extends AppDomNodeType> = Omit<\n  AppDomNodeOfType<T>,\n  ReservedNodeProperty | 'name'\n> & { name?: string };\n\nfunction createNodeInternal<T extends AppDomNodeType>(\n  id: NodeId,\n  type: T,\n  init: AppDomNodeInitOfType<T> & { name: string },\n): AppDomNodeOfType<T> {\n  return {\n    ...init,\n    id,\n    type,\n    parentId: null,\n    parentProp: null,\n    parentIndex: null,\n  } as AppDomNodeOfType<T>;\n}\n\nfunction slugifyNodeName(nameCandidate: string, fallback: string): string {\n  let slug = nameCandidate;\n  slug = slug.trim();\n  // try to replace accents with relevant ascii\n  slug = removeDiacritics(slug);\n  // replace spaces with camelcase\n  const [first, ...rest] = slug.split(/\\s+/);\n  slug = first + pascalCase(...rest);\n  // replace disallowed characters for js identifiers\n  slug = slug.replace(/[^a-zA-Z0-9]+/g, '_');\n  // remove leading digits\n  slug = slug.replace(/^\\d+/g, '');\n  if (!slug) {\n    slug = fallback;\n  }\n  return slug;\n}\n\nexport function validateNodeName(name: string, disallowedNames: Set<string>, kind: string) {\n  if (!name) {\n    return 'a name is required';\n  }\n\n  const firstLetter = name[0];\n  if (!/[a-z_]/i.test(firstLetter)) {\n    return `${kind} may not start with a \"${firstLetter}\"`;\n  }\n\n  const match = /([^a-z0-9_])/i.exec(name);\n\n  if (match) {\n    const invalidCharacter = match[1];\n    if (/\\s/.test(invalidCharacter)) {\n      return `${kind} may not contain spaces`;\n    }\n\n    return `${kind} may not contain a \"${invalidCharacter}\"`;\n  }\n\n  const slug = slugifyNodeName(name, kind);\n\n  const isDuplicate = disallowedNames.has(slug);\n\n  if (isDuplicate) {\n    return `There already is a ${kind} with this name`;\n  }\n\n  return null;\n}\n\nexport function createNode<T extends AppDomNodeType>(\n  dom: AppDom,\n  type: T,\n  init: AppDomNodeInitOfType<T>,\n): AppDomNodeOfType<T> {\n  const id = createId();\n  const name = slugifyNodeName(init.name || type, type);\n  return createNodeInternal(id, type, {\n    ...init,\n    name,\n  });\n}\n\nexport function createFragmentInternal<T extends AppDomNodeType>(\n  id: NodeId,\n  type: T,\n  init: AppDomNodeInitOfType<T> & { name: string },\n): AppDom {\n  return {\n    nodes: {\n      [id]: createNodeInternal(id, type, init),\n    },\n    root: id,\n    version: CURRENT_APPDOM_VERSION,\n  };\n}\n\nexport function createFragment<T extends AppDomNodeType>(\n  type: T,\n  init: AppDomNodeInitOfType<T> & { name: string },\n): AppDom {\n  const rootId = createId();\n  return createFragmentInternal(rootId, type, init);\n}\n\nexport function createDom(): AppDom {\n  return createFragment('app', {\n    name: 'Application',\n    attributes: {},\n  });\n}\n\n/**\n * Creates a new DOM node representing a React Element\n */\nexport function createElement<P>(\n  dom: AppDom,\n  component: string,\n  props: Partial<BindableAttrValues<P>> = {},\n  layout: Partial<BindableAttrValues<P>> = {},\n  name?: string,\n): ElementNode {\n  return createNode(dom, 'element', {\n    name: name || uncapitalize(component),\n    props,\n    attributes: {\n      component,\n    },\n    layout,\n  });\n}\n\n/**\n * Get all descendants of a `node`, flattens childNodes objects into one single array\n */\nexport function getDescendants(dom: AppDom, node: AppDomNode): readonly AppDomNode[] {\n  const children: readonly AppDomNode[] = Object.values(getChildNodes(dom, node))\n    .flat()\n    .filter(Boolean);\n  return [...children, ...children.flatMap((child) => getDescendants(dom, child))];\n}\n\n/**\n * Get all siblings of a `node`\n */\nexport function getSiblings(dom: AppDom, node: AppDomNode): readonly AppDomNode[] {\n  return Object.values(dom.nodes).filter(\n    (sibling) =>\n      sibling.parentId === node.parentId &&\n      sibling.parentProp === node.parentProp &&\n      sibling.id !== node.id,\n  );\n}\n\nexport function getAncestors(dom: AppDom, node: AppDomNode): readonly AppDomNode[] {\n  const parent = getParent(dom, node);\n  return parent ? [...getAncestors(dom, parent), parent] : [];\n}\n\n/**\n * Get all the ancestors of the `node` up until the first PageNode node is encountered\n */\nexport function getPageAncestors(\n  dom: AppDom,\n  node: AppDomNode,\n): readonly (ElementNode | PageNode)[] {\n  const parent = getParent(dom, node);\n  return parent && (isElement(parent) || isPage(parent))\n    ? [...getPageAncestors(dom, parent), parent]\n    : [];\n}\n\n/**\n * Get the first PageNode node up in the DOM tree starting from `node`\n */\nexport function getPageAncestor(dom: AppDom, node: AppDomNode): PageNode | null {\n  if (isPage(node)) {\n    return node;\n  }\n  const parent = getParent(dom, node);\n  if (parent) {\n    return getPageAncestor(dom, parent);\n  }\n  return null;\n}\n\n/**\n * Returns all nodes with a given component type\n */\nexport function getComponentTypeNodes(dom: AppDom, componentId: string): readonly AppDomNode[] {\n  return Object.values(dom.nodes).filter(\n    (node) => isElement(node) && node.attributes.component === componentId,\n  );\n}\n\n/**\n * Returns the set of names for which the given node must have a different name\n */\nexport function getExistingNamesForNode(dom: AppDom, node: AppDomNode): Set<string> {\n  if (isElement(node)) {\n    const pageNode = getPageAncestor(dom, node);\n    const pageDescendants = pageNode ? getDescendants(dom, pageNode) : [];\n    return new Set(\n      pageDescendants\n        .filter((descendant) => descendant.id !== node.id)\n        .map((scopeNode) => scopeNode.name),\n    );\n  }\n\n  return new Set(getSiblings(dom, node).map((scopeNode) => scopeNode.name));\n}\n\nexport function getExistingNamesForChildren<Parent extends AppDomNode>(\n  dom: AppDom,\n  parent: Parent,\n  parentProp?: ParentProp<Parent>,\n): Set<string> {\n  const pageNode = getPageAncestor(dom, parent);\n\n  if (pageNode) {\n    const pageDescendants = getDescendants(dom, pageNode);\n    return new Set(pageDescendants.map((scopeNode) => scopeNode.name));\n  }\n\n  if (parentProp) {\n    const childNodes = getChildNodes(dom, parent);\n    const { [parentProp]: children = [] } = childNodes;\n    return new Set(children.map((scopeNode) => scopeNode.name));\n  }\n\n  const descendants = getDescendants(dom, parent);\n  return new Set(descendants.map((scopeNode: AppDomNode) => scopeNode.name));\n}\n\nexport function proposeName(candidate: string, disallowedNames: Set<string> = new Set()): string {\n  const slug = slugifyNodeName(candidate, 'node');\n  if (!disallowedNames.has(slug)) {\n    return slug;\n  }\n  const basename = candidate.replace(/\\d+$/, '');\n  let counter = 1;\n  while (disallowedNames.has(basename + counter)) {\n    counter += 1;\n  }\n  return basename + counter;\n}\n\nexport function setNodeName(dom: AppDom, node: AppDomNode, name: string): AppDom {\n  if (dom.nodes[node.id].name === name) {\n    return dom;\n  }\n  return update(dom, {\n    nodes: update(dom.nodes, {\n      [node.id]: {\n        ...node,\n        name: slugifyNodeName(name, node.type),\n      },\n    }),\n  });\n}\n\nexport type PropNamespaces<N extends AppDomNode> = {\n  [K in keyof N]: N[K] extends BindableAttrValues<any> | undefined ? K : never;\n}[keyof N & string];\n\nexport type BindableProps<T> = {\n  [K in keyof T]: T[K] extends BindableAttrValue<any> ? K : never;\n}[keyof T & string];\n\nexport function setNodeProp<Node extends AppDomNode, Prop extends BindableProps<Node>>(\n  dom: AppDom,\n  node: Node,\n  prop: Prop,\n  value: Node[Prop] | null,\n): AppDom {\n  if (value) {\n    return update(dom, {\n      nodes: update(dom.nodes, {\n        [node.id]: update(node, {\n          [prop]: value,\n        } as any) as Partial<Node>,\n      } as Partial<AppDomNodes>),\n    });\n  }\n\n  return update(dom, {\n    nodes: update(dom.nodes, {\n      [node.id]: omit(node, prop) as Partial<Node>,\n    } as Partial<AppDomNodes>),\n  });\n}\n\nexport function setNamespacedProp<\n  Node extends AppDomNode,\n  Namespace extends PropNamespaces<Node>,\n  Prop extends keyof Node[Namespace] & string,\n>(node: Node, namespace: Namespace, prop: Prop, value: Node[Namespace][Prop] | null): Node {\n  if (value) {\n    return update(node, {\n      [namespace]: updateOrCreate((node as Node)[namespace], {\n        [prop]: value,\n      } as any) as Partial<Node[Namespace]>,\n    } as Partial<Node>);\n  }\n  return update(node, {\n    [namespace]: omit(node[namespace], prop) as Partial<Node[Namespace]>,\n  } as Partial<Node>);\n}\n\nexport function setQueryProp<Q, K extends keyof Q>(\n  node: QueryNode<Q>,\n  prop: K,\n  value: Q[K],\n): QueryNode<Q> {\n  const original = node.attributes.query;\n  return setNamespacedProp(node, 'attributes', 'query', { ...original, [prop]: value });\n}\n\nexport function setNodeNamespacedProp<\n  Node extends AppDomNode,\n  Namespace extends PropNamespaces<Node>,\n  Prop extends keyof NonNullable<Node[Namespace]> & string,\n>(\n  dom: AppDom,\n  node: Node,\n  namespace: Namespace,\n  prop: Prop,\n  value: NonNullable<Node[Namespace]>[Prop] | null,\n): AppDom {\n  if (value) {\n    return update(dom, {\n      nodes: update(dom.nodes, {\n        [node.id]: update(dom.nodes[node.id], {\n          [namespace]: updateOrCreate((dom.nodes[node.id] as Node)[namespace], {\n            [prop]: value,\n          } as any) as Partial<Node[Namespace]>,\n        } as Partial<Node>),\n      }),\n    });\n  }\n  return update(dom, {\n    nodes: update(dom.nodes, {\n      [node.id]: update(node, {\n        [namespace]: omit(node[namespace]!, prop) as Partial<Node[Namespace]>,\n      } as Partial<Node>),\n    }),\n  });\n}\n\nfunction setNodeParent<N extends AppDomNode>(\n  dom: AppDom,\n  node: N,\n  parentId: NodeId,\n  parentProp: string,\n  parentIndex?: string,\n) {\n  if (!parentIndex) {\n    const parent = getNode(dom, parentId);\n\n    const children: readonly AppDomNode[] = (getChildNodes(dom, parent) as any)[parentProp] ?? [];\n    const lastIndex = children.length > 0 ? children[children.length - 1].parentIndex : null;\n    parentIndex = createFractionalIndex(lastIndex, null);\n  }\n\n  return update(dom, {\n    nodes: update(dom.nodes, {\n      [node.id]: update(node as AppDomNode, {\n        parentId,\n        parentProp,\n        parentIndex,\n      }),\n    }),\n  });\n}\n\nexport function addNode<Parent extends AppDomNode, Child extends AppDomNode>(\n  dom: AppDom,\n  newNode: Child,\n  parent: Parent,\n  parentProp: ParentPropOf<Child, Parent>,\n  parentIndex?: string,\n): AppDom {\n  if (newNode.parentId) {\n    throw new Error(`Node \"${newNode.id}\" is already attached to a parent`);\n  }\n\n  const existingNames = getExistingNamesForChildren(dom, parent, parentProp);\n\n  if (existingNames.has(newNode.name)) {\n    newNode = {\n      ...newNode,\n      name: proposeName(newNode.name, existingNames),\n    };\n  }\n\n  return setNodeParent(dom, newNode, parent.id, parentProp, parentIndex);\n}\n\nexport function moveNode<Parent extends AppDomNode, Child extends AppDomNode>(\n  dom: AppDom,\n  node: Child,\n  parent: Parent,\n  parentProp: ParentPropOf<Child, Parent>,\n  parentIndex?: string,\n) {\n  return setNodeParent(dom, node, parent.id, parentProp, parentIndex);\n}\n\nexport function nodeExists(dom: AppDom, nodeId: NodeId): boolean {\n  return !!getMaybeNode(dom, nodeId);\n}\n\nexport function saveNode(dom: AppDom, node: AppDomNode) {\n  if (!nodeExists(dom, node.id)) {\n    throw new Error(`Attempt to update node \"${node.id}\", but it doesn't exist in the dom`);\n  }\n\n  return update(dom, {\n    nodes: update(dom.nodes, {\n      [node.id]: update(dom.nodes[node.id], omit(node, ...RESERVED_NODE_PROPERTIES)),\n    }),\n  });\n}\n\nexport function removeNode(dom: AppDom, nodeId: NodeId) {\n  const node = getNode(dom, nodeId);\n  const parent = getParent(dom, node);\n\n  invariant(parent, `Node: \"${node.id}\" can't be removed`);\n\n  const descendantIds = getDescendants(dom, node).map(({ id }) => id);\n\n  return update(dom, {\n    nodes: omit(dom.nodes, node.id, ...descendantIds),\n  });\n}\n\nexport function fromConstPropValue(prop: undefined): undefined;\nexport function fromConstPropValue<T>(prop: BindableAttrValue<T>): T;\nexport function fromConstPropValue<T>(prop?: BindableAttrValue<T | undefined>): T | undefined;\nexport function fromConstPropValue<T>(prop?: BindableAttrValue<T | undefined>): T | undefined {\n  if (!prop) {\n    return undefined;\n  }\n  if ((prop as JsExpressionAttrValue).$$jsExpression || (prop as EnvAttrValue).$$env) {\n    throw new Error(`trying to unbox a non-constant prop value`);\n  }\n  return prop as T;\n}\n\nexport function fromConstPropValues<P>(props: BindableAttrValues<P>): Partial<P> {\n  const result: Partial<P> = {};\n  (Object.entries(props) as ExactEntriesOf<BindableAttrValues<P>>).forEach(([name, prop]) => {\n    if (prop) {\n      result[name] = fromConstPropValue<P[typeof name]>(prop);\n    }\n  });\n  return result;\n}\n\nconst nodeByNameCache = new WeakMap<AppDom, Map<string, NodeId>>();\nfunction getNodeIdByNameIndex(dom: AppDom): Map<string, NodeId> {\n  let cached = nodeByNameCache.get(dom);\n  if (!cached) {\n    cached = new Map(Array.from(Object.values(dom.nodes), (node) => [node.name, node.id]));\n    nodeByNameCache.set(dom, cached);\n  }\n  return cached;\n}\n\nexport function getNodeIdByName(dom: AppDom, name: string): NodeId | null {\n  const index = getNodeIdByNameIndex(dom);\n  return index.get(name) ?? null;\n}\n\nexport function getNodeFirstChild(dom: AppDom, node: ElementNode | PageNode, parentProp: string) {\n  const nodeChildren = (getChildNodes(dom, node) as NodeChildren<ElementNode>)[parentProp] || [];\n  return nodeChildren.length > 0 ? nodeChildren[0] : null;\n}\n\nexport function getNodeLastChild(dom: AppDom, node: ElementNode | PageNode, parentProp: string) {\n  const nodeChildren = (getChildNodes(dom, node) as NodeChildren<ElementNode>)[parentProp] || [];\n  return nodeChildren.length > 0 ? nodeChildren[nodeChildren.length - 1] : null;\n}\n\nexport function getSiblingBeforeNode(\n  dom: AppDom,\n  node: ElementNode | PageNode,\n  parentProp: string,\n) {\n  const parent = getParent(dom, node);\n\n  invariant(parent, `Node: \"${node.id}\" has no parent`);\n\n  const parentChildren =\n    ((isPage(parent) || isElement(parent)) &&\n      (getChildNodes(dom, parent) as NodeChildren<ElementNode>)[parentProp]) ||\n    [];\n\n  const nodeIndex = parentChildren.findIndex((child) => child.id === node.id);\n  const nodeBefore = nodeIndex > 0 ? parentChildren[nodeIndex - 1] : null;\n\n  return nodeBefore;\n}\n\nexport function getSiblingAfterNode(dom: AppDom, node: ElementNode | PageNode, parentProp: string) {\n  const parent = getParent(dom, node);\n\n  invariant(parent, `Node: \"${node.id}\" has no parent`);\n\n  const parentChildren =\n    ((isPage(parent) || isElement(parent)) &&\n      (getChildNodes(dom, parent) as NodeChildren<ElementNode>)[parentProp]) ||\n    [];\n\n  const nodeIndex = parentChildren.findIndex((child) => child.id === node.id);\n  const nodeAfter = nodeIndex < parentChildren.length - 1 ? parentChildren[nodeIndex + 1] : null;\n\n  return nodeAfter;\n}\n\nexport function getNewFirstParentIndexInNode(\n  dom: AppDom,\n  node: ElementNode | PageNode,\n  parentProp: string,\n) {\n  const firstChild = getNodeFirstChild(dom, node, parentProp);\n  return createFractionalIndex(null, firstChild?.parentIndex || null);\n}\n\nexport function getNewLastParentIndexInNode(\n  dom: AppDom,\n  node: ElementNode | PageNode,\n  parentProp: string,\n) {\n  const lastChild = getNodeLastChild(dom, node, parentProp);\n  return createFractionalIndex(lastChild?.parentIndex || null, null);\n}\n\nexport function getNewParentIndexBeforeNode(\n  dom: AppDom,\n  node: ElementNode | PageNode,\n  parentProp: string,\n) {\n  const nodeBefore = getSiblingBeforeNode(dom, node, parentProp);\n  return createFractionalIndex(nodeBefore?.parentIndex || null, node.parentIndex);\n}\n\nexport function getNewParentIndexAfterNode(\n  dom: AppDom,\n  node: ElementNode | PageNode,\n  parentProp: string,\n) {\n  const nodeAfter = getSiblingAfterNode(dom, node, parentProp);\n  return createFractionalIndex(node.parentIndex, nodeAfter?.parentIndex || null);\n}\n\nexport function addFragment(\n  dom: AppDom,\n  fragment: AppDom,\n  parentId: NodeId,\n  parentProp: string,\n  parentIndex?: string | undefined,\n) {\n  const parent = getNode(dom, parentId);\n  const existingNames = getExistingNamesForChildren<any>(dom, parent, parentProp);\n  let combinedDom: AppDom = {\n    ...dom,\n    nodes: {\n      ...dom.nodes,\n      ...mapValues(fragment.nodes, (node: AppDomNode) => {\n        return existingNames.has(node.name)\n          ? { ...node, name: proposeName(node.name, existingNames) }\n          : node;\n      }),\n    },\n  };\n  const fragmentRoot = getNode(combinedDom, fragment.root);\n  combinedDom = setNodeParent(combinedDom, fragmentRoot, parentId, parentProp, parentIndex);\n  return combinedDom;\n}\n\n/**\n * Make a copy of a subtree (a fragment) of the dom. The structure of a fragment is\n * the same as a dom where the root is the node we create the fragment for\n */\nexport function cloneFragment(dom: AppDom, nodeId: NodeId): AppDom {\n  const node = getNode(dom, nodeId);\n  const newNode = createNode(dom, node.type, node);\n  const childNodes = getChildNodes(dom, node);\n\n  let result: AppDom = {\n    root: newNode.id,\n    nodes: {\n      [newNode.id]: newNode,\n    },\n  };\n\n  for (const [childParentProp, children] of Object.entries(childNodes)) {\n    if (children) {\n      for (const child of children as AppDomNode[]) {\n        const childFragment = cloneFragment(dom, child.id);\n        result = addFragment(result, childFragment, newNode.id, childParentProp);\n      }\n    }\n  }\n\n  return result;\n}\n\nexport function duplicateNode(\n  dom: AppDom,\n  node: AppDomNode,\n  parent: AppDomNode | null = getParent(dom, node),\n  parentProp: string | null = node.parentProp,\n): AppDom {\n  if (!parent || !parentProp) {\n    throw new Error(`Node \"${node.id}\" can't be duplicated, it must have a parent`);\n  }\n\n  const fragment = cloneFragment(dom, node.id);\n  return addFragment(dom, fragment, parent.id, parentProp);\n}\n\nconst RENDERTREE_NODES = [\n  'app',\n  'page',\n  'element',\n  'query',\n  'mutation',\n  'theme',\n  'codeComponent',\n] as const;\n\nexport type RenderTreeNodeType = (typeof RENDERTREE_NODES)[number];\nexport type RenderTreeNode = { [K in RenderTreeNodeType]: AppDomNodeOfType<K> }[RenderTreeNodeType];\nexport type RenderTreeNodes = Record<NodeId, RenderTreeNode>;\n\nexport interface RenderTree {\n  root: NodeId;\n  nodes: RenderTreeNodes;\n  version?: number;\n}\n\nconst frontendNodes = new Set<string>(RENDERTREE_NODES);\nfunction createRenderTreeNode(node: AppDomNode): RenderTreeNode | null {\n  if (!frontendNodes.has(node.type)) {\n    return null;\n  }\n\n  if (isQuery(node) || isMutation(node)) {\n    if (node.attributes.query) {\n      node = setNamespacedProp(node, 'attributes', 'query', null);\n    }\n  }\n\n  return node as RenderTreeNode;\n}\n\n/**\n * We need to make sure no secrets end up in the frontend html, so let's only send the\n * nodes that we need to build frontend, and that we know don't contain secrets.\n * TODO: Would it make sense to create a separate datastructure that represents the render tree?\n */\nexport function createRenderTree(dom: AppDom): RenderTree {\n  return {\n    ...dom,\n    nodes: mapProperties(dom.nodes, ([id, node]) => {\n      const rendernode = createRenderTreeNode(node);\n      return rendernode ? [id, rendernode] : null;\n    }),\n  };\n}\n\nexport function ref(nodeId: NodeId): NodeReference;\nexport function ref(nodeId: null | undefined): null;\nexport function ref(nodeId: Maybe<NodeId>): NodeReference | null;\nexport function ref(nodeId: Maybe<NodeId>): NodeReference | null {\n  return nodeId ? { $ref: nodeId } : null;\n}\n\nexport function deref(nodeRef: NodeReference): NodeId;\nexport function deref(nodeRef: null | undefined): null;\nexport function deref(nodeRef: Maybe<NodeReference>): NodeId | null;\nexport function deref(nodeRef: Maybe<NodeReference>): NodeId | null {\n  if (nodeRef) {\n    return nodeRef.$ref;\n  }\n  return null;\n}\n\nexport function createDefaultDom(): AppDom {\n  let dom = createDom();\n  const appNode = getApp(dom);\n\n  // Create default page\n  const newPageNode = createNode(dom, 'page', {\n    name: 'Page 1',\n    attributes: {\n      title: 'Page 1',\n      display: 'shell',\n    },\n  });\n\n  dom = addNode(dom, newPageNode, appNode, 'pages');\n\n  return dom;\n}\n\nexport function getPageByName(dom: AppDom, name: string): PageNode | null {\n  const rootNode = getApp(dom);\n  const { pages = [] } = getChildNodes(dom, rootNode);\n  return pages.find((page) => page.name === name) ?? null;\n}\n\nexport function getQueryByName(dom: AppDom, page: PageNode, name: string): QueryNode | null {\n  const { queries = [] } = getChildNodes(dom, page);\n  return queries.find((query) => query.name === name) ?? null;\n}\n\n/**\n * Represents the changes between two doms in terms of added/deleted nodes.\n */\nexport interface DomDiff {\n  set: AppDomNode[];\n  unset: NodeId[];\n}\n\n/**\n * Compare two doms and return a diff of the changes.\n */\nexport function createDiff(from: AppDom, to: AppDom): DomDiff {\n  const result: DomDiff = {\n    set: [],\n    unset: [],\n  };\n\n  const allIds = new Set<NodeId>([\n    ...(Object.keys(from.nodes) as NodeId[]),\n    ...(Object.keys(to.nodes) as NodeId[]),\n  ]);\n\n  for (const id of allIds) {\n    if (to.nodes[id] && to.nodes[id] !== from.nodes[id]) {\n      result.set.push(to.nodes[id]);\n    } else if (!to.nodes[id] && from.nodes[id]) {\n      result.unset.push(id);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Apply a diff to a dom and return the new dom.\n */\nexport function applyDiff(dom: AppDom, diff: DomDiff): AppDom {\n  let result = dom;\n\n  for (const node of diff.set) {\n    result = update(result, {\n      nodes: update(result.nodes, {\n        [node.id]: node,\n      }),\n    });\n  }\n\n  for (const id of diff.unset) {\n    result = update(result, {\n      nodes: omit(result.nodes, id),\n    });\n  }\n\n  return result;\n}\n\nfunction findEnvBindings(obj: unknown): EnvAttrValue[] {\n  if (Array.isArray(obj)) {\n    return obj.flatMap((item) => findEnvBindings(item));\n  }\n\n  if (obj && typeof obj === 'object') {\n    try {\n      return [envBindingSchema.parse(obj)];\n    } catch {\n      return Object.values(obj).flatMap((value) => findEnvBindings(value));\n    }\n  }\n\n  return [];\n}\n\nexport function getRequiredEnvVars(dom: AppDom): Set<string> {\n  const allVars = Object.values(dom.nodes)\n    .flatMap((node) => findEnvBindings(node))\n    .map((binding) => binding.$$env);\n\n  return new Set(allVars);\n}\n","import { setWith, clone } from 'lodash-es';\n\n/**\n * Applies changes to an object in an immutable way. The `dest` object will adopt the properties of\n * the `src` object. Object identity is preserved if the operation results in a no-op.\n */\nexport function update<T>(dest: T, src: Partial<T>): T {\n  let result: T | undefined;\n  Object.entries(src).forEach(([key, value]) => {\n    if (dest[key as keyof T] !== value) {\n      result = result || { ...dest };\n      (result as any)[key] = value;\n    }\n  });\n  return result || dest;\n}\n/**\n * Applies changes to an object in an immutable way. The `dest` object will adopt the properties of\n * the `src` object. If `dest` is undefined, `src` will be used. Object identity is preserved if\n * the operation results in a no-op.\n */\nexport function updateOrCreate<T>(dest: T | null | undefined, src: NonNullable<T>): T {\n  return dest ? update(dest, src) : src;\n}\n\n/**\n * Updates an object's property value for a given path in an immutable way.\n */\nexport function updatePath<P extends object, V>(obj: P, path: string, value: V): P {\n  return setWith(clone(obj), path, value, clone);\n}\n\n/**\n * Inserts a value in an immutable array.\n */\nexport function insert<T>(array: readonly T[], value: T, index: number): T[] {\n  return [...array.slice(0, index), value, ...array.slice(index)];\n}\n\n/**\n * Updates a value in an immutable array.\n */\nexport function updateArray<T>(array: readonly T[], value: T, index: number): T[] {\n  return [...array.slice(0, index), value, ...array.slice(index + 1)];\n}\n\n/**\n * Removes a value in an immutable array.\n */\nexport function remove<T>(array: readonly T[], index: number): T[] {\n  return [...array.slice(0, index), ...array.slice(index + 1)];\n}\n\n/**\n * Removes a set of properties from an object in an immutable way. Object identity is preserved if\n * the operation results in a no-op.\n */\nexport function omit<T, K extends keyof T>(obj: T, ...keys: readonly K[]): Omit<T, K> {\n  let result: T | undefined;\n\n  keys.forEach((key) => {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      if (!result) {\n        result = { ...obj };\n      }\n      delete result[key];\n    }\n  });\n\n  return result || obj;\n}\n\n/**\n * Returns an object created from `obj` with only the specified `keys`. Object identity is preserved if\n * the operation results in a no-op.\n */\nexport function take<K extends string, T extends Record<K, unknown>>(\n  obj: T,\n  ...keys: readonly K[]\n): Omit<T, Exclude<keyof T, K>> {\n  const keySet = new Set<string>(keys);\n  let result: T | undefined;\n\n  Object.keys(obj).forEach((key) => {\n    if (!keySet.has(key)) {\n      if (!result) {\n        result = { ...obj };\n      }\n      delete result[key as keyof T];\n    }\n  });\n\n  return result || obj;\n}\n/**\n * Returns an array without any of its items equal to `value`. Object identity is preserved if\n * the operation results in a no-op.\n */\nexport function without<T>(array: readonly T[], value: T): readonly T[] {\n  const result: T[] = [];\n\n  let found = false;\n  for (let i = 0; i < array.length; i += 1) {\n    const elm = array[i];\n    if (elm === value) {\n      found = true;\n    } else {\n      result.push(elm);\n    }\n  }\n\n  return found ? result : array;\n}\n","import { SimplePaletteColorOptions, ThemeOptions } from '@mui/material';\nimport { z } from 'zod';\n\nexport const API_VERSION = 'v1';\n\nfunction toolpadObjectSchema<K extends string, T extends z.ZodType>(kind: K, spec: T) {\n  return z.object({\n    apiVersion: z\n      .literal('v1')\n      .describe(\n        `Defines the version of this object. Used in determining compatibility between Toolpad \"${kind}\" objects.`,\n      ),\n    kind: z.literal(kind).describe(`Describes the nature of this Toolpad \"${kind}\" object.`),\n    spec: spec.describe(`Defines the shape of this \"${kind}\" object`),\n  });\n}\n\nconst literalSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);\n\nfunction nameValuePairSchema<V extends z.ZodTypeAny>(valueType: V) {\n  return z\n    .object({\n      name: z.string().describe('The name'),\n      value: valueType.describe(valueType.description ?? 'The value'),\n    })\n    .describe('A name/value pair.');\n}\n\nexport const jsExpressionBindingSchema = z\n  .object({\n    $$jsExpression: z.string().describe('The expression to be evaluated.'),\n  })\n  .describe('A binding that evaluates an expression and returns the result.');\n\nexport const envBindingSchema = z\n  .object({\n    $$env: z.string().describe('The name of an environment variable.'),\n  })\n  .describe('An environment variable.');\n\nfunction bindableSchema<V extends z.ZodTypeAny>(valueType: V) {\n  return z.union([valueType, jsExpressionBindingSchema, envBindingSchema]);\n}\n\nconst jsExpressionActionSchema = z\n  .object({\n    $$jsExpressionAction: z.string().describe('The code to be executed.'),\n  })\n  .describe('A javascript expression to be executed when this action is triggered.');\n\nconst navigationActionSchema = z\n  .object({\n    $$navigationAction: z.object({\n      page: z.string().describe('The page that is being navigated to'),\n      parameters: z\n        .record(bindableSchema(z.any()))\n        .describe('Parameters to pass when navigating to this page'),\n    }),\n  })\n  .describe(\n    'A navigation from one page to another, optionally passing parameters to the next page.',\n  );\n\nexport type NavigationAction = z.infer<typeof navigationActionSchema>;\n\nconst fetchModeSchema = z.union([\n  z.literal('query').describe('Fetch automatically when the page opens'),\n  z.literal('mutation').describe('Fetch on manual action only'),\n]);\n\nconst nameStringValuePairSchema = nameValuePairSchema(z.string()).describe(\n  'a name/value pair with a string value.',\n);\n\nconst rawBodySchema = z.object({\n  kind: z.literal('raw'),\n  content: bindableSchema(z.string()),\n  contentType: z.string(),\n});\n\nconst bindableNameStringValueSchema = nameValuePairSchema(bindableSchema(z.string())).describe(\n  'A name/value pair where the value is dynamically bindable to strings.',\n);\n\nconst urlEncodedBodySchema = z.object({\n  kind: z.literal('urlEncoded'),\n  content: z.array(bindableNameStringValueSchema),\n});\n\nconst fetchBodySchema = z.discriminatedUnion('kind', [rawBodySchema, urlEncodedBodySchema]);\n\nexport type FetchBody = z.infer<typeof fetchBodySchema>;\n\nconst rawResponseTypeSchema = z\n  .object({\n    kind: z.literal('raw'),\n  })\n  .describe(\"Don't interpret this body at all.\");\n\nconst jsonResponseTypeSchema = z\n  .object({\n    kind: z.literal('json'),\n  })\n  .describe('Interpret the fetch response as JSON');\n\nconst csvResponseTypeSchema = z\n  .object({\n    kind: z.literal('csv'),\n    headers: z.boolean().describe('First row contains headers'),\n  })\n  .describe('Interpret the fetch response as CSV');\n\nconst xmlResponseTypeSchema = z\n  .object({\n    kind: z.literal('xml'),\n  })\n  .describe('Interpret the fetch response as XML');\n\nconst responseTypeSchema = z\n  .discriminatedUnion('kind', [\n    rawResponseTypeSchema,\n    jsonResponseTypeSchema,\n    csvResponseTypeSchema,\n    xmlResponseTypeSchema,\n  ])\n  .describe('Describes how a the fetch response is to be interpreted.');\n\nexport type ResponseType = z.infer<typeof responseTypeSchema>;\n\nconst fetchQueryConfigSchema = z.object({\n  kind: z.literal('rest').describe('Designates this object as a fetch query.'),\n  url: bindableSchema(z.string()).optional().describe('The URL of the request'),\n  method: z.string().optional().describe('The request method.'),\n  headers: z.array(bindableNameStringValueSchema).optional().describe('Extra request headers.'),\n  searchParams: z\n    .array(bindableNameStringValueSchema)\n    .optional()\n    .describe('Extra url query parameters.'),\n  body: fetchBodySchema.optional().describe('The request body.'),\n  transformEnabled: z.boolean().optional().describe('Run a custom transformer on the response.'),\n  transform: z.string().optional().describe('The custom transformer to run when enabled.'),\n  response: responseTypeSchema.optional().describe('How to parse the response.'),\n});\n\nexport type FetchQueryConfig = z.infer<typeof fetchQueryConfigSchema>;\n\nconst localQueryConfigSchema = z.object({\n  kind: z.literal('local').describe('Designates this object as a local function query.'),\n  function: z\n    .string()\n    .optional()\n    .describe('The function to be executed on the backend by this query.'),\n});\n\nexport type LocalQueryConfig = z.infer<typeof localQueryConfigSchema>;\n\nconst queryConfigSchema = z.discriminatedUnion('kind', [\n  fetchQueryConfigSchema,\n  localQueryConfigSchema,\n]);\n\nexport type QueryConfig = z.infer<typeof queryConfigSchema>;\n\nconst querySchema = z.object({\n  name: z.string().describe('A name for the query'),\n  enabled: bindableSchema(z.boolean())\n    .optional()\n    .describe(\n      \"Activates or deactivates the query. When deactivated the data won't be loaded when the page opens.\",\n    ),\n  parameters: z\n    .array(nameValuePairSchema(bindableSchema(z.any())))\n    .optional()\n    .describe('Parameters to pass to this query.'),\n  mode: fetchModeSchema.optional().describe('How to fetch this query.'),\n  query: queryConfigSchema.optional().describe('Query definition'),\n  transform: z.string().optional().describe('Transformation to run on the response'),\n  transformEnabled: z.boolean().optional().describe('Enable the transformation'),\n  refetchInterval: z.number().optional().describe('Interval to rerun this query at'),\n  cacheTime: z.number().optional().describe('Time to cache before refetching'),\n});\n\nexport type Query = z.infer<typeof querySchema>;\n\nexport type Template = {\n  $$template: ElementType[];\n};\n\nlet elementSchema: z.ZodType<ElementType>;\n\nconst templateSchema: z.ZodType<Template> = z\n  .object({\n    $$template: z\n      .lazy(() => z.array(elementSchema))\n      .describe('The subtree, that describes the UI to be rendered by the template.'),\n  })\n  .describe('Describes a fragment of Toolpad elements, to be used as a template.');\n\nconst baseElementSchema = z.object({\n  component: z.string().describe('The component that this element was based on.'),\n  name: z\n    .string()\n    .describe('a name for this component, which is used to reference it inside bindings.'),\n  layout: z\n    .object({\n      horizontalAlign: z\n        .string()\n        .optional()\n        .describe('Lays out the element along the horizontal axis.'),\n      verticalAlign: z\n        .string()\n        .optional()\n        .describe('Lays out the element along the vertical axis.'),\n      columnSize: z\n        .number()\n        .optional()\n        .describe('The width this element takes up, expressed in terms of columns on the page.'),\n    })\n    .optional()\n    .describe('Layout properties for this element.'),\n});\n\ntype BaseElement = z.infer<typeof baseElementSchema>;\n\nexport const bindablePropSchema: z.ZodType = z.lazy(() =>\n  z.union([\n    ...literalSchema.options,\n    z.array(bindablePropSchema),\n    z.record(\n      z.string().refine((key) => !key.startsWith('$$')),\n      bindablePropSchema,\n    ),\n    jsExpressionBindingSchema,\n    envBindingSchema,\n    jsExpressionActionSchema,\n    navigationActionSchema,\n    templateSchema,\n  ]),\n);\n\nexport type BindableProp = z.infer<typeof bindablePropSchema>;\n\nexport type ElementType = BaseElement & {\n  children?: ElementType[];\n  props?: Record<string, BindableProp>;\n};\n\nelementSchema = baseElementSchema\n  .extend({\n    children: z\n      .lazy(() => z.array(elementSchema).optional())\n      .describe('The children of this element.'),\n    props: z\n      .lazy(() => z.record(bindablePropSchema).optional())\n      .describe('The properties to configure this instance of the component.'),\n  })\n  .describe('The instance of a component. Used to build user interfaces in pages.');\n\nexport const pageSchema = toolpadObjectSchema(\n  'page',\n  z.object({\n    id: z.string().describe('Serves as a canonical id of the page.'),\n    title: z.string().optional().describe('Title for this page.'),\n    parameters: z\n      .array(nameStringValuePairSchema)\n      .optional()\n      .describe('Parameters for the page. These can be set inside of the url query string.'),\n    queries: z\n      .array(querySchema)\n      .optional()\n      .describe('Queries that are used by the page. These will load data when the page opens.'),\n    content: z\n      .array(elementSchema)\n      .optional()\n      .describe('The content of the page. This defines the UI.'),\n    display: z\n      .union([\n        z\n          .literal('standalone')\n          .describe('Hide the Toolpad chrome and just display the content of the page'),\n        z.literal('shell').describe('Show Toolpad header and navigation.'),\n      ])\n      .optional()\n      .describe(\n        'Display mode of the page. This can also be set at runtime with the toolpad-display query parameter',\n      ),\n  }),\n);\n\nconst simplePaletteColorOptionsSchema: z.ZodType<SimplePaletteColorOptions> = z.object({\n  main: z.string(),\n  light: z.string().optional(),\n  dark: z.string().optional(),\n  contrastText: z.string().optional(),\n});\n\nconst themeOptionsSchema: z.ZodType<ThemeOptions> = z\n  .object({\n    // TODO: expand to full MUI theme object\n    palette: z\n      .object({\n        mode: z.union([z.literal('light'), z.literal('dark')]).optional(),\n        primary: simplePaletteColorOptionsSchema.optional(),\n        secondary: simplePaletteColorOptionsSchema.optional(),\n      })\n      .passthrough(),\n  })\n  .passthrough();\n\nexport type Page = z.infer<typeof pageSchema>;\n\nexport const themeSchema = toolpadObjectSchema(\n  'theme',\n  z.object({\n    options: themeOptionsSchema\n      .optional()\n      .describe(\"The ThemeOptions object that gets fed into MUI's createTheme function.\"),\n  }),\n);\n\nexport type Theme = z.infer<typeof themeSchema>;\n\nexport const META = {\n  schemas: {\n    Page: pageSchema,\n    Theme: themeSchema,\n  },\n  definitions: {\n    JsExpressionBinding: jsExpressionBindingSchema,\n    EnvBinding: envBindingSchema,\n    JsExpressionAction: jsExpressionActionSchema,\n    NavigationAction: navigationActionSchema,\n    BindableProp: bindablePropSchema,\n    Element: elementSchema,\n    Template: templateSchema,\n    NameStringValuePair: nameStringValuePairSchema,\n    BindableNameStringValue: bindableNameStringValueSchema,\n    SimplePaletteColorOptions: simplePaletteColorOptionsSchema,\n  },\n};\n","import {\n  BindableAttrValue,\n  EnvAttrValue,\n  JsExpressionAction,\n  JsExpressionAttrValue,\n} from '@mui/toolpad-core';\nimport { NavigationAction } from './server/schema';\n\ntype BindingType =\n  | 'const'\n  | 'jsExpression'\n  | 'env'\n  | 'jsExpressionAction'\n  | 'navigationAction'\n  | 'secret';\n\nexport function getBindingType<V>(binding: BindableAttrValue<V>): BindingType {\n  if ((binding as JsExpressionAttrValue).$$jsExpression) {\n    return 'jsExpression';\n  }\n  if ((binding as EnvAttrValue).$$env) {\n    return 'env';\n  }\n  if ((binding as JsExpressionAction).$$jsExpressionAction) {\n    return 'jsExpressionAction';\n  }\n  if ((binding as NavigationAction).$$navigationAction) {\n    return 'navigationAction';\n  }\n  return 'const';\n}\n\nexport function getBindingValue<V>(binding: BindableAttrValue<V>):\n  | V\n  | string\n  | {\n      page: string;\n      parameters?: Record<string, unknown>;\n    } {\n  if ((binding as JsExpressionAttrValue).$$jsExpression) {\n    return (binding as JsExpressionAttrValue).$$jsExpression;\n  }\n  if ((binding as EnvAttrValue).$$env) {\n    return (binding as EnvAttrValue).$$env;\n  }\n  if ((binding as JsExpressionAction).$$jsExpressionAction) {\n    return (binding as JsExpressionAction).$$jsExpressionAction;\n  }\n  if ((binding as NavigationAction).$$navigationAction) {\n    return (binding as NavigationAction).$$navigationAction;\n  }\n  return binding as V;\n}\n","import { NodeId, ToolpadComponent } from '@mui/toolpad-core';\nimport * as appDom from '../../appDom';\n\nexport interface ToolpadComponentDefinition {\n  displayName: string;\n  builtIn?: string;\n  system?: boolean;\n  codeComponentId?: NodeId;\n}\n\nexport type ToolpadComponentDefinitions = Record<string, ToolpadComponentDefinition | undefined>;\nexport interface InstantiatedComponent extends ToolpadComponentDefinition {\n  Component: ToolpadComponent<any>;\n}\nexport type InstantiatedComponents = Record<string, InstantiatedComponent | undefined>;\n\nexport const PAGE_ROW_COMPONENT_ID = 'PageRow';\nexport const PAGE_COLUMN_COMPONENT_ID = 'PageColumn';\nexport const STACK_COMPONENT_ID = 'Stack';\nexport const FORM_COMPONENT_ID = 'Form';\n\nexport const INTERNAL_COMPONENTS = new Map<string, ToolpadComponentDefinition>([\n  [PAGE_ROW_COMPONENT_ID, { displayName: 'Row', builtIn: 'PageRow', system: true }],\n  [PAGE_COLUMN_COMPONENT_ID, { displayName: 'Column', builtIn: 'PageColumn', system: true }],\n  [STACK_COMPONENT_ID, { displayName: 'Stack', builtIn: 'Stack', system: true }],\n  [\n    'Autocomplete',\n    {\n      displayName: 'Autocomplete',\n      builtIn: 'Autocomplete',\n    },\n  ],\n  [\n    'Button',\n    {\n      displayName: 'Button',\n      builtIn: 'Button',\n    },\n  ],\n  ['Image', { displayName: 'Image', builtIn: 'Image' }],\n  ['DataGrid', { displayName: 'Data Grid', builtIn: 'DataGrid' }],\n  ['TextField', { displayName: 'Text Field', builtIn: 'TextField' }],\n  ['DatePicker', { displayName: 'Date Picker', builtIn: 'DatePicker' }],\n  ['FilePicker', { displayName: 'File Picker', builtIn: 'FilePicker' }],\n  ['Text', { displayName: 'Text', builtIn: 'Text' }],\n  ['Select', { displayName: 'Select', builtIn: 'Select' }],\n  ['List', { displayName: 'List', builtIn: 'List' }],\n  ['Paper', { displayName: 'Paper', builtIn: 'Paper' }],\n  ['Tabs', { displayName: 'Tabs', builtIn: 'Tabs' }],\n  ['Container', { displayName: 'Container', builtIn: 'Container' }],\n  [FORM_COMPONENT_ID, { displayName: 'Form', builtIn: 'Form' }],\n]);\n\nfunction createCodeComponent(domNode: appDom.CodeComponentNode): ToolpadComponentDefinition {\n  return {\n    displayName: domNode.name,\n    codeComponentId: domNode.id,\n  };\n}\n\nexport function getToolpadComponents(dom: appDom.AppDom): ToolpadComponentDefinitions {\n  const app = appDom.getApp(dom);\n  const { codeComponents = [] } = appDom.getChildNodes(dom, app);\n  return Object.fromEntries([\n    ...INTERNAL_COMPONENTS.entries(),\n    ...codeComponents.map((codeComponent) => [\n      `codeComponent.${codeComponent.name}`,\n      createCodeComponent(codeComponent),\n    ]),\n  ]);\n}\n\nexport function getToolpadComponent(\n  components: ToolpadComponentDefinitions,\n  componentId: string,\n): ToolpadComponentDefinition | null {\n  const component = components[componentId];\n  return component || null;\n}\n\nexport function getElementNodeComponentId(elementNode: appDom.ElementNode): string {\n  return elementNode.attributes.component;\n}\n\nexport function isPageRow(elementNode: appDom.ElementNode): boolean {\n  return getElementNodeComponentId(elementNode) === PAGE_ROW_COMPONENT_ID;\n}\n\nexport function isPageColumn(elementNode: appDom.ElementNode): boolean {\n  return getElementNodeComponentId(elementNode) === PAGE_COLUMN_COMPONENT_ID;\n}\n\nexport function isPageLayoutComponent(elementNode: appDom.ElementNode): boolean {\n  return isPageRow(elementNode) || isPageColumn(elementNode);\n}\n\nexport function isFormComponent(elementNode: appDom.ElementNode): boolean {\n  return getElementNodeComponentId(elementNode) === FORM_COMPONENT_ID;\n}\n","import * as React from 'react';\nimport { createTheme, Theme, ThemeProvider, ThemeOptions } from '@mui/material';\nimport { deepmerge } from '@mui/utils';\nimport * as appDom from '../appDom';\n\ndeclare module '@mui/material/styles' {\n  interface Theme {\n    fontFamilyMonospaced: string;\n  }\n  // allow configuration using `createTheme`\n  interface ThemeOptions {\n    fontFamilyMonospaced?: string;\n  }\n}\n\nfunction createMuiThemeFromToolpadTheme(toolpadTheme: ThemeOptions = {}): Theme {\n  return createTheme(\n    deepmerge(\n      {\n        typography: {\n          h1: {\n            fontSize: `3.25rem`,\n            fontWeight: 800,\n          },\n\n          h2: {\n            fontSize: `2.25rem`,\n            fontWeight: 700,\n          },\n\n          h3: {\n            fontSize: `1.75rem`,\n            fontWeight: 700,\n          },\n\n          h4: {\n            fontSize: `1.5rem`,\n            fontWeight: 700,\n          },\n\n          h5: {\n            fontSize: `1.25rem`,\n            fontWeight: 700,\n          },\n\n          h6: {\n            fontSize: `1.15rem`,\n            fontWeight: 700,\n          },\n        },\n        fontFamilyMonospaced: 'Consolas, Menlo, Monaco, \"Andale Mono\", \"Ubuntu Mono\", monospace',\n      },\n      toolpadTheme,\n    ),\n  );\n}\n\nexport function createToolpadAppTheme(dom: appDom.AppDom): Theme {\n  const root = appDom.getApp(dom);\n  const { themes = [] } = appDom.getChildNodes(dom, root);\n  const themeNode = themes.length > 0 ? themes[0] : null;\n  const toolpadTheme = themeNode?.theme;\n  return createMuiThemeFromToolpadTheme(toolpadTheme);\n}\n\nexport interface ThemeProviderProps {\n  dom: appDom.AppDom;\n  children?: React.ReactNode;\n}\n\nexport default function AppThemeProvider({ dom, children }: ThemeProviderProps) {\n  const theme = React.useMemo(() => createToolpadAppTheme(dom), [dom]);\n  return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n}\n","import { BindingEvaluationResult, JsRuntime } from '@mui/toolpad-core';\nimport { set } from 'lodash-es';\nimport { mapValues } from '@mui/toolpad-utils/collections';\nimport { updatePath } from '../utils/immutability';\n\n/**\n * Represents the state of a binding. It both describes which place it takes in the gobal scope\n * and how to obtain the result\n */\nexport interface ParsedBinding {\n  /**\n   * How this binding presents itself to expressions in the global scope.\n   * Path in the form that is accepted by lodash.set\n   */\n  scopePath?: string;\n  /**\n   * javascript expression that evaluates to the value of this binding\n   */\n  expression?: string;\n  dependencies?: undefined;\n  result?: undefined;\n  /**\n   * javascript expression that evaluates to the initial value of this binding if it doesn't have one\n   */\n  initializer?: string;\n}\n\nexport interface EvaluatedBinding<T = unknown> {\n  scopePath?: string;\n  expression?: undefined;\n  dependencies?: string[];\n  /**\n   * actual evaluated result of the binding\n   */\n  result?: BindingEvaluationResult<T>;\n  initializer?: undefined;\n}\n\ntype Dependencies = Map<string, Set<string>>;\n\nfunction flattenDependency(\n  deps: Dependencies,\n  dep: string,\n  history = new Set<string>([dep]),\n): Set<string> {\n  const depDeps = deps.get(dep) ?? new Set();\n  const result = new Set(depDeps);\n  for (const depDep of depDeps) {\n    if (!history.has(depDep)) {\n      const flat = flattenDependency(deps, depDep, new Set([...history, depDep]));\n      for (const flatted of flat) {\n        result.add(flatted);\n      }\n    }\n  }\n  return result;\n}\n\nfunction flattenDependencies(deps: Dependencies): Dependencies {\n  const result: Dependencies = new Map();\n  for (const dep of deps.keys()) {\n    result.set(dep, flattenDependency(deps, dep));\n  }\n  return result;\n}\n\nfunction bubbleError(\n  flatDependencies: Dependencies,\n  results: Record<string, BindingEvaluationResult<unknown>>,\n  bindingId: string,\n): Error | undefined {\n  const result = results[bindingId];\n  if (result.error) {\n    return result.error;\n  }\n  const deps = flatDependencies.get(bindingId) ?? new Set();\n  for (const dep of deps) {\n    const depResult = results[dep];\n    if (depResult.error) {\n      return depResult.error;\n    }\n  }\n  return undefined;\n}\n\nfunction bubbleLoading(\n  flatDependencies: Dependencies,\n  results: Record<string, BindingEvaluationResult<unknown>>,\n  bindingId: string,\n): boolean {\n  const result = results[bindingId];\n  if (result.loading) {\n    return true;\n  }\n  const deps = flatDependencies.get(bindingId) ?? new Set();\n  for (const dep of deps) {\n    const depResult = results[dep];\n    if (depResult.loading) {\n      return depResult.loading;\n    }\n  }\n  return false;\n}\n\nexport function buildGlobalScope(\n  base: Record<string, unknown>,\n  bindings: Record<string, { result?: BindingEvaluationResult; scopePath?: string }>,\n): Record<string, unknown> {\n  const globalScope = { ...base };\n  for (const binding of Object.values(bindings)) {\n    if (binding.scopePath) {\n      const value = binding.result?.value;\n      set(globalScope, binding.scopePath, value);\n    }\n  }\n  return globalScope;\n}\n\n/**\n * Evaluates the expressions and replace with their result\n */\nexport default function evalJsBindings(\n  jsRuntime: JsRuntime,\n  bindings: Record<string, ParsedBinding | EvaluatedBinding>,\n  globalScope: Record<string, unknown>,\n): Record<string, EvaluatedBinding> {\n  const bindingsMap = new Map(Object.entries(bindings));\n\n  const bindingIdMap = new Map<string, string>();\n  for (const [bindingId, binding] of bindingsMap) {\n    if (binding.scopePath) {\n      bindingIdMap.set(binding.scopePath, bindingId);\n    }\n  }\n\n  const computationStatuses = new Map<string, { result: null | BindingEvaluationResult }>();\n  let currentParentBinding: string | undefined;\n  const dependencies: Dependencies = new Map();\n\n  let proxiedScope: Record<string, unknown>;\n\n  const evaluateBinding = (\n    bindingId: string,\n    scopePath?: string,\n  ): BindingEvaluationResult | null => {\n    const binding = bindingId && bindingsMap.get(bindingId);\n\n    if (!binding) {\n      return null;\n    }\n\n    if (currentParentBinding) {\n      let bindingDependencies = dependencies.get(currentParentBinding);\n      if (!bindingDependencies) {\n        bindingDependencies = new Set<string>();\n        dependencies.set(currentParentBinding, bindingDependencies);\n      }\n      bindingDependencies.add(bindingId);\n    }\n\n    const expression = binding.expression;\n\n    if (expression) {\n      const computed = computationStatuses.get(expression);\n      if (computed) {\n        if (computed.result) {\n          // From cache\n          return computed.result;\n        }\n\n        throw new Error(`Cycle detected \"${scopePath}\"`);\n      }\n\n      // use null to mark as \"computing\"\n      computationStatuses.set(expression, { result: null });\n      const prevContext = currentParentBinding;\n      currentParentBinding = bindingId;\n      const result = jsRuntime.evaluateExpression(expression, proxiedScope);\n      currentParentBinding = prevContext;\n      computationStatuses.set(expression, { result });\n      // From freshly computed\n      return result;\n    }\n\n    if (binding.result) {\n      if (binding.dependencies) {\n        dependencies.set(bindingId, new Set(binding.dependencies));\n      }\n      // From input value on the page\n      return binding.result;\n    }\n\n    const initializer = binding.initializer;\n    if (initializer) {\n      const result = evaluateBinding(initializer, scopePath);\n      if (result) {\n        return result;\n      }\n    }\n\n    return null;\n  };\n\n  const proxify = (obj: Record<string, unknown>, label?: string): Record<string, unknown> =>\n    new Proxy(obj, {\n      get(target, prop, receiver) {\n        if (typeof prop === 'symbol') {\n          return Reflect.get(target, prop, receiver);\n        }\n\n        const scopePath = label ? `${label}.${prop}` : prop;\n        const bindingId = bindingIdMap.get(scopePath);\n\n        if (bindingId) {\n          const evaluated = evaluateBinding(bindingId, scopePath);\n          if (evaluated) {\n            return evaluated.value;\n          }\n        }\n\n        const result = target[prop];\n\n        if (result && typeof result === 'object') {\n          return proxify(result as Record<string, unknown>, scopePath);\n        }\n\n        return Reflect.get(target, prop, receiver);\n      },\n    });\n\n  const scope = buildGlobalScope(globalScope, bindings);\n  proxiedScope = proxify(scope);\n\n  const results = mapValues(bindings, (binding, bindingId) => {\n    return evaluateBinding(bindingId) || { value: undefined };\n  });\n\n  const flatDependencies = flattenDependencies(dependencies);\n\n  return mapValues(bindings, (binding, bindingId) => {\n    const { scopePath } = binding;\n\n    let bindingResult = results[bindingId];\n\n    const mergeNestedBindings = (value: unknown, parentBindingId: string) => {\n      if (value && typeof value === 'object') {\n        for (const nestedPropName of Object.keys(value)) {\n          const nestedBindingId = `${parentBindingId}${\n            Array.isArray(value) ? `[${nestedPropName}]` : `.${nestedPropName}`\n          }`;\n\n          const nestedBindingResultValue = results[nestedBindingId]?.value;\n          if (nestedBindingResultValue) {\n            bindingResult = updatePath(\n              bindingResult,\n              `value.${nestedBindingId.replace(bindingId, '')}`,\n              nestedBindingResultValue,\n            );\n          } else {\n            mergeNestedBindings(\n              (value as Record<string, unknown>)[nestedPropName],\n              nestedBindingId,\n            );\n          }\n        }\n      }\n    };\n\n    if (bindingResult.value) {\n      mergeNestedBindings(bindingResult.value, bindingId);\n    }\n\n    return {\n      scopePath,\n      dependencies: Array.from(flatDependencies.get(bindingId) ?? []),\n      result: {\n        ...bindingResult,\n        error: bubbleError(flatDependencies, results, bindingId),\n        loading: bubbleLoading(flatDependencies, results, bindingId),\n      },\n    };\n  });\n}\n","export const HTML_ID_EDITOR_OVERLAY = 'editor-overlay';\n\nexport const NON_BINDABLE_CONTROL_TYPES = ['GridColumns'];\n","import { BoxProps } from '@mui/material';\nimport { ArgTypeDefinition } from '@mui/toolpad-core';\n\nexport const LAYOUT_DIRECTION_HORIZONTAL = 'horizontal';\nexport const LAYOUT_DIRECTION_VERTICAL = 'vertical';\nexport const LAYOUT_DIRECTION_BOTH = 'both';\n\nexport const layoutBoxArgTypes: {\n  horizontalAlign: ArgTypeDefinition<BoxProps, 'justifyContent'>;\n  verticalAlign: ArgTypeDefinition<BoxProps, 'alignItems'>;\n} = {\n  horizontalAlign: {\n    helperText: 'Horizontal alignment of the component',\n    type: 'string',\n    enum: ['start', 'center', 'end', 'space-between', 'space-around', 'space-evenly'],\n    default: 'start',\n    label: 'Horizontal alignment',\n    control: { type: 'HorizontalAlign' },\n  },\n  verticalAlign: {\n    helperText: 'Vertical alignment of the component.',\n    type: 'string',\n    enum: ['start', 'center', 'end', 'space-between', 'space-around', 'space-evenly'],\n    default: 'center',\n    label: 'Vertical alignment',\n    control: { type: 'VerticalAlign' },\n  },\n};\n","/// <reference types=\"vite/client\" />\n\nimport { GridRowsProp } from '@mui/x-data-grid-pro';\nimport * as React from 'react';\nimport { useQuery, UseQueryOptions } from '@tanstack/react-query';\nimport { CanvasHooksContext } from './CanvasHooksContext';\nimport * as appDom from '../appDom';\n\ninterface ExecDataSourceQueryParams {\n  signal?: AbortSignal;\n  pageName: string;\n  queryName: string;\n  params: any;\n}\n\nexport async function execDataSourceQuery({\n  signal,\n  pageName,\n  queryName,\n  params,\n}: ExecDataSourceQueryParams) {\n  const dataUrl = new URL(`${process.env.BASE_URL}/api/data/`, window.location.href);\n  const url = new URL(\n    `./${encodeURIComponent(pageName)}/${encodeURIComponent(queryName)}`,\n    dataUrl,\n  );\n\n  const res = await fetch(String(url), {\n    method: 'POST',\n    body: JSON.stringify(params),\n    headers: [['content-type', 'application/json']],\n    signal,\n  });\n\n  if (!res.ok) {\n    throw new Error(`HTTP ${res.status} while fetching \"${url}\"`);\n  }\n\n  return res.json();\n}\n\nexport type UseDataQueryConfig = Pick<\n  UseQueryOptions<any, unknown, unknown, any[]>,\n  'enabled' | 'refetchInterval'\n>;\n\nexport interface UseFetch {\n  isLoading: boolean;\n  isFetching: boolean;\n  error: any;\n  data: any;\n  rows: GridRowsProp;\n  fetch: (overrides?: any) => void;\n  refetch: () => void;\n  /** @deprecated Use fetch */\n  call: (overrides?: any) => Promise<void>;\n}\n\nconst EMPTY_ARRAY: any[] = [];\nconst EMPTY_OBJECT: any = {};\n\nexport function useDataQuery(\n  page: appDom.PageNode,\n  node: appDom.QueryNode,\n  params: any,\n  {\n    enabled = true,\n    ...options\n  }: Pick<UseQueryOptions<any, unknown, unknown, any[]>, 'enabled' | 'refetchInterval'>,\n): UseFetch {\n  const { savedNodes } = React.useContext(CanvasHooksContext);\n  const queryName = node.name;\n  const pageName = page.name;\n\n  // These are only used by the editor to invalidate caches whenever the query changes during editing\n  const nodeHash: number | undefined = savedNodes ? savedNodes[node.id] : undefined;\n  const isNodeAvailableOnServer: boolean = savedNodes ? !!savedNodes[node.id] : true;\n\n  const {\n    isLoading,\n    isFetching,\n    error: fetchError,\n    data: responseData = EMPTY_OBJECT,\n    refetch,\n  } = useQuery(\n    [nodeHash, pageName, queryName, params],\n    ({ signal }) => execDataSourceQuery({ signal, pageName, queryName, params }),\n    {\n      ...options,\n      enabled: isNodeAvailableOnServer && enabled,\n    },\n  );\n\n  const { data, error: apiError } = responseData;\n\n  const error = apiError || fetchError;\n\n  const rows = Array.isArray(data) ? data : EMPTY_ARRAY;\n\n  const result: UseFetch = React.useMemo(\n    () => ({\n      isLoading: isLoading && enabled,\n      isFetching,\n      error,\n      data,\n      rows,\n      refetch,\n      fetch: async () => {\n        throw new Error(`\"fetch\" is unsupported for automatic queries`);\n      },\n      call: async () => {\n        throw new Error(`\"call\" is unsupported for automatic queries`);\n      },\n    }),\n    [isLoading, enabled, isFetching, error, data, rows, refetch],\n  );\n\n  return result;\n}\n","import * as React from 'react';\nimport {\n  Drawer,\n  Box,\n  List,\n  ListSubheader,\n  ListItem,\n  ListItemButton,\n  ListItemText,\n  Toolbar,\n} from '@mui/material';\nimport { useLocation, useHref, Link } from 'react-router-dom';\nimport * as appDom from '../appDom';\n\nconst DRAWER_WIDTH = 250; // px\n\ninterface AppNavigationProps {\n  pages: appDom.PageNode[];\n  clipped?: boolean;\n}\n\nexport default function AppNavigation({ pages, clipped = false }: AppNavigationProps) {\n  const location = useLocation();\n  const { search } = location;\n  const href = useHref('');\n\n  const activePagePath = location.pathname.replace(href, '');\n\n  const navListSubheaderId = React.useId();\n\n  return (\n    <Drawer\n      variant=\"permanent\"\n      anchor=\"left\"\n      open\n      sx={{\n        width: DRAWER_WIDTH,\n        flexShrink: 0,\n        [`& .MuiDrawer-paper`]: { width: DRAWER_WIDTH, boxSizing: 'border-box' },\n      }}\n    >\n      {clipped ? <Toolbar variant=\"dense\" /> : null}\n      <Box>\n        <List\n          component=\"nav\"\n          subheader={\n            <ListSubheader id={navListSubheaderId} sx={{ px: 4 }}>\n              Pages\n            </ListSubheader>\n          }\n          aria-labelledby={navListSubheaderId}\n        >\n          {pages.map((page) => (\n            <ListItem key={page.id} disablePadding>\n              <ListItemButton\n                component={Link}\n                to={`pages/${page.id}${search}`}\n                selected={activePagePath === `/pages/${page.id}`}\n              >\n                <ListItemText primary={page.name} sx={{ ml: 2 }} />\n              </ListItemButton>\n            </ListItem>\n          ))}\n        </List>\n      </Box>\n    </Drawer>\n  );\n}\n","import * as React from 'react';\nimport { Stack, Button, Typography } from '@mui/material';\nimport EditIcon from '@mui/icons-material/Edit';\nimport Header from '../toolpad/ToolpadShell/Header';\nimport { ThemeProvider } from '../ThemeContext';\n\nexport interface PreviewHeaderProps {\n  pageId?: string;\n}\n\nexport default function PreviewHeader({ pageId }: PreviewHeaderProps) {\n  return (\n    <ThemeProvider>\n      <Header\n        enableUserFeedback={false}\n        actions={\n          <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n            <Typography variant=\"body2\" sx={{ color: 'primary.main' }}>\n              This is a preview version of the application.\n            </Typography>\n            <Button\n              variant=\"outlined\"\n              endIcon={<EditIcon />}\n              color=\"primary\"\n              component=\"a\"\n              href={pageId ? `/_toolpad/app/pages/${pageId}` : '/_toolpad/app'}\n            >\n              Edit\n            </Button>\n          </Stack>\n        }\n      />\n    </ThemeProvider>\n  );\n}\n","import * as React from 'react';\nimport { AppBar, Box, Toolbar, Tooltip, Chip, Link, useTheme } from '@mui/material';\nimport UserFeedback from './UserFeedback';\nimport ThemeModeMenu from './ThemeModeMenu';\nimport { useThemeMode, ThemeMode } from '../../../ThemeContext';\n\nexport interface HeaderProps {\n  actions?: React.ReactNode;\n  status?: React.ReactNode;\n  enableUserFeedback?: boolean;\n}\n\nfunction Header({ actions, status, enableUserFeedback = true }: HeaderProps) {\n  const theme = useTheme();\n  const { themeMode, setThemeMode } = useThemeMode();\n\n  const handleThemeModeChange = React.useCallback(\n    (event: React.MouseEvent, mode: ThemeMode) => {\n      setThemeMode(mode);\n    },\n    [setThemeMode],\n  );\n\n  const productIcon =\n    theme.palette.mode === 'dark' ? '/product-icon-dark.svg' : '/product-icon-light.svg';\n\n  return (\n    <React.Fragment>\n      <AppBar\n        position=\"fixed\"\n        color=\"default\"\n        elevation={0}\n        sx={{ zIndex: theme.zIndex.drawer + 1, borderBottom: 1, borderColor: 'divider' }}\n      >\n        <Toolbar>\n          <Box\n            sx={{\n              flex: 1,\n              display: 'flex',\n              flexDirection: 'row',\n              alignItems: 'center',\n              justifyContent: 'start',\n            }}\n          >\n            <Tooltip title=\"Home\">\n              <Link\n                color=\"inherit\"\n                aria-label=\"Home\"\n                href=\"/\"\n                underline=\"none\"\n                sx={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 1 }}\n              >\n                <img src={productIcon} alt=\"Toolpad product icon\" width={25} height={25} />\n                <Box\n                  data-testid=\"brand\"\n                  sx={{\n                    color: 'primary.main',\n                    lineHeight: '21px',\n                    fontSize: '16px',\n                    fontWeight: 700,\n                    letterSpacing: 0,\n                    fontFamily: theme.typography.fontFamily,\n                  }}\n                >\n                  MUI Toolpad\n                </Box>\n              </Link>\n            </Tooltip>\n            <Chip sx={{ ml: 1 }} label=\"Beta\" size=\"small\" color=\"grey\" />\n          </Box>\n          <Box\n            sx={{\n              flex: 1,\n              display: 'flex',\n              flexDirection: 'row',\n              alignItems: 'center',\n              justifyContent: 'center',\n            }}\n          >\n            {actions}\n          </Box>\n          <Box\n            sx={{\n              flex: 1,\n              display: 'flex',\n              flexDirection: 'row',\n              alignItems: 'center',\n              justifyContent: 'end',\n              gap: 2,\n            }}\n          >\n            {status}\n            <ThemeModeMenu mode={themeMode} onChange={handleThemeModeChange} />\n            {enableUserFeedback ? <UserFeedback /> : null}\n          </Box>\n        </Toolbar>\n      </AppBar>\n      <Toolbar />\n    </React.Fragment>\n  );\n}\n\nexport default Header;\n","import * as React from 'react';\nimport {\n  Chip,\n  Divider,\n  ListItemText,\n  IconButton,\n  Menu,\n  MenuItem,\n  Tooltip,\n  Button,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogContentText,\n  DialogTitle,\n  Box,\n} from '@mui/material';\nimport HelpOutlinedIcon from '@mui/icons-material/HelpOutlined';\nimport OpenInNewIcon from '@mui/icons-material/OpenInNew';\nimport invariant from 'invariant';\nimport useMenu from '../../../../utils/useMenu';\nimport {\n  TOOLPAD_TARGET_CLOUD,\n  TOOLPAD_TARGET_CE,\n  TOOLPAD_TARGET_PRO,\n  DOCUMENTATION_URL,\n  VERSION_CHECK_INTERVAL,\n} from '../../../../constants';\nimport client from '../../../../api';\nimport useBoolean from '../../../../utils/useBoolean';\nimport type { PackageManager } from '../../../../server/versionInfo';\n\nconst REPORT_BUG_URL =\n  'https://github.com/mui/mui-toolpad/issues/new?assignees=&labels=status%3A+needs+triage&template=1.bug.yml';\nconst FEATURE_REQUEST_URL = 'https://github.com/mui/mui-toolpad/issues';\n\ninterface SnippetProps {\n  children: string;\n}\n\nfunction CliCommandSnippet({ children }: SnippetProps) {\n  return (\n    <Box\n      component=\"pre\"\n      sx={{\n        p: 1,\n        backgroundColor: 'background.paper',\n        borderRadius: 1,\n        border: 1,\n        borderColor: 'divider',\n      }}\n    >\n      {children}\n    </Box>\n  );\n}\n\ninterface FeedbackMenuItemLinkProps {\n  href: string;\n  children: React.ReactNode;\n}\n\nfunction FeedbackMenuItemLink({ href, children }: FeedbackMenuItemLinkProps) {\n  return (\n    <MenuItem component=\"a\" target=\"_blank\" href={href}>\n      <ListItemText>{children}</ListItemText>\n      <OpenInNewIcon fontSize=\"inherit\" sx={{ ml: 3, color: 'text.secondary' }} />\n    </MenuItem>\n  );\n}\n\nfunction getReadableTarget(): string {\n  switch (process.env.TOOLPAD_TARGET) {\n    case TOOLPAD_TARGET_CLOUD:\n      return 'Cloud';\n    case TOOLPAD_TARGET_CE:\n      return 'Community Edition';\n    case TOOLPAD_TARGET_PRO:\n      return 'Pro';\n    default:\n      return 'Unknown';\n  }\n}\n\nfunction getUpgradeMessage(packageManager: PackageManager | null): string {\n  const pkgName = '@mui/toolpad';\n  switch (packageManager) {\n    case 'yarn':\n      return `yarn add ${pkgName}`;\n    case 'pnpm':\n      return `pnpm install ${pkgName}`;\n    default:\n      return `npm install ${pkgName}`;\n  }\n}\n\nfunction UserFeedback() {\n  const { buttonProps, menuProps } = useMenu();\n\n  invariant(process.env.TOOLPAD_VERSION, 'Missing env var TOOLPAD_VERSION');\n  invariant(process.env.TOOLPAD_BUILD, 'Missing env var TOOLPAD_BUILD');\n\n  const { data: versionInfo } = client.useQuery('getVersionInfo', [], {\n    staleTime: VERSION_CHECK_INTERVAL,\n  });\n\n  const {\n    value: updateDialogOpen,\n    setFalse: handleUpdateDialogClose,\n    setTrue: handleUpdateDialogOpen,\n  } = useBoolean(false);\n\n  const updateAvailable = !!versionInfo?.updateAvailable;\n\n  return (\n    <React.Fragment>\n      <Dialog open={updateDialogOpen} onClose={handleUpdateDialogClose} maxWidth=\"xs\">\n        <DialogTitle>Update Toolpad</DialogTitle>\n        <DialogContent>\n          <DialogContentText>\n            A new Toolpad version is available. To upgrade to the latest version, run:\n            <CliCommandSnippet>\n              {getUpgradeMessage(versionInfo?.packageManager ?? null)}\n            </CliCommandSnippet>\n          </DialogContentText>\n        </DialogContent>\n        <DialogActions>\n          <Button onClick={handleUpdateDialogClose} autoFocus>\n            Close\n          </Button>\n        </DialogActions>\n      </Dialog>\n      <Tooltip title=\"Help and resources\">\n        <IconButton {...buttonProps} color=\"primary\">\n          <HelpOutlinedIcon />\n        </IconButton>\n      </Tooltip>\n      <Menu {...menuProps}>\n        <FeedbackMenuItemLink href={DOCUMENTATION_URL}>Documentation</FeedbackMenuItemLink>\n        <FeedbackMenuItemLink href={REPORT_BUG_URL}>Report bug</FeedbackMenuItemLink>\n        <FeedbackMenuItemLink href={FEATURE_REQUEST_URL}>\n          Request or upvote feature\n        </FeedbackMenuItemLink>\n        <Divider />\n        <MenuItem disabled>{getReadableTarget()}</MenuItem>\n\n        <MenuItem\n          disabled={!updateAvailable}\n          onClick={handleUpdateDialogOpen}\n          sx={{ justifyContent: 'space-between' }}\n        >\n          Version {process.env.TOOLPAD_VERSION}\n          {updateAvailable ? (\n            <Chip size=\"small\" color=\"error\" variant=\"outlined\" label=\"Update\" clickable />\n          ) : null}\n        </MenuItem>\n        <MenuItem disabled>Build {process.env.TOOLPAD_BUILD}</MenuItem>\n      </Menu>\n    </React.Fragment>\n  );\n}\n\nexport default UserFeedback;\n","import { ButtonProps, MenuProps } from '@mui/material';\nimport * as React from 'react';\n\n/**\n * Abstracts MUI menus opening logic and some of the a11y.\n */\nexport default function useMenu() {\n  const buttonId = React.useId();\n  const menuId = React.useId();\n\n  const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n  const open = Boolean(anchorEl);\n\n  const onMenuClose = React.useCallback((event?: any) => {\n    event?.stopPropagation?.();\n    setAnchorEl(null);\n  }, []);\n\n  const buttonProps = React.useMemo<ButtonProps>(\n    () => ({\n      id: buttonId,\n      'aria-controls': open ? menuId : undefined,\n      'aria-haspopup': 'true',\n      'aria-expanded': open ? 'true' : undefined,\n      onClick(event: React.MouseEvent<HTMLButtonElement>) {\n        event.stopPropagation();\n        setAnchorEl(event.currentTarget);\n      },\n    }),\n    [buttonId, menuId, open],\n  );\n\n  const menuProps = React.useMemo<MenuProps>(\n    () => ({\n      id: menuId,\n      anchorEl,\n      open,\n      onClose: onMenuClose,\n      MenuListProps: {\n        'aria-labelledby': buttonId,\n      },\n    }),\n    [anchorEl, buttonId, menuId, onMenuClose, open],\n  );\n\n  return {\n    buttonProps,\n    menuProps,\n    onMenuClose,\n  };\n}\n","export const MUI_X_PRO_LICENSE =\n  'f359d9c0d105599a7d83c3f8d775eca5Tz0xMjMsRT0yNTI0NjA0NDAwMDAwLFM9cHJlbWl1bSxMTT1wZXJwZXR1YWwsS1Y9Mg==';\nexport const HTML_ID_EDITOR_OVERLAY = 'editor-overlay';\nexport const WINDOW_PROP_TOOLPAD_APP_RENDER_PARAMS = '__TOOLPAD_APP_RENDER_PARAMS__';\nexport const RUNTIME_CONFIG_WINDOW_PROPERTY = '__TOOLPAD_RUNTIME_CONFIG__';\n\nexport const TOOLPAD_TARGET_CE = 'CE';\nexport const TOOLPAD_TARGET_CLOUD = 'CLOUD';\nexport const TOOLPAD_TARGET_PRO = 'PRO';\nexport const REPOSITORY_URL = 'https://github.com/mui/mui-toolpad';\nexport const LANDING_PAGE_URL = 'https://mui.com/toolpad/';\nexport const DOCUMENTATION_URL = 'https://mui.com/toolpad/getting-started/overview/';\nexport const DOCUMENTATION_INSTALLATION_URL =\n  'https://mui.com/toolpad/getting-started/installation/';\nexport const ROADMAP_URL = 'https://github.com/orgs/mui/projects/9';\nexport const SCHEDULE_DEMO_URL = 'https://calendly.com/prakhar-mui/toolpad';\n\nexport const PRODUCTION_DATASOURCES = new Set([\n  'rest',\n  'function',\n  'googleSheets',\n  'postgres',\n  'mysql',\n  'local',\n]);\n\nexport const TOOLPAD_BRIDGE_GLOBAL = '__TOOLPAD_BRIDGE__';\n\nexport const NON_BINDABLE_CONTROL_TYPES = ['GridColumns'];\n\nexport const VERSION_CHECK_INTERVAL = 1000 * 60 * 10;\n","import invariant from 'invariant';\nimport {\n  QueryClient,\n  useMutation,\n  UseMutationOptions,\n  UseMutationResult,\n  useQuery,\n  UseQueryOptions,\n  UseQueryResult,\n} from '@tanstack/react-query';\nimport type { Definition, MethodsGroup, MethodsOf, ServerDefinition } from './server/rpc';\nimport { createRpcClient } from './rpcClient';\n\nexport const queryClient = new QueryClient({\n  defaultOptions: {\n    queries: {\n      networkMode: 'always',\n    },\n    mutations: {\n      networkMode: 'always',\n    },\n  },\n});\n\nexport interface UseQueryFnOptions<F extends (...args: any[]) => any>\n  extends Omit<\n    UseQueryOptions<Awaited<ReturnType<F>>, unknown, Awaited<ReturnType<F>>, any[]>,\n    'queryKey' | 'queryFn'\n  > {}\n\ninterface UseQueryFn<M extends MethodsGroup> {\n  <K extends keyof M & string>(\n    name: K,\n    params: Parameters<M[K]> | null,\n    options?: UseQueryFnOptions<M[K]>,\n  ): UseQueryResult<Awaited<ReturnType<M[K]>>>;\n}\n\ninterface UseMutationFn<M extends MethodsGroup> {\n  <K extends keyof M & string>(\n    name: K,\n    options?: UseMutationOptions<any, unknown, Parameters<M[K]>>,\n  ): UseMutationResult<Awaited<ReturnType<M[K]>>, unknown, Parameters<M[K]>>;\n}\n\ninterface RpcClient<D extends Definition> {\n  query: D['query'];\n  mutation: D['mutation'];\n}\n\ninterface ApiClient<D extends Definition> extends RpcClient<D> {\n  query: D['query'];\n  mutation: D['mutation'];\n  useQuery: UseQueryFn<D['query']>;\n  useMutation: UseMutationFn<D['mutation']>;\n  refetchQueries: <K extends keyof D['query']>(\n    key: K,\n    params?: Parameters<D['query'][K]>,\n  ) => Promise<void>;\n  invalidateQueries: <K extends keyof D['query']>(\n    key: K,\n    params?: Parameters<D['query'][K]>,\n  ) => Promise<void>;\n}\n\nfunction createClient<D extends MethodsOf<any>>(endpoint: string): ApiClient<D> {\n  const { query, mutation } = createRpcClient<D>(endpoint);\n\n  return {\n    query,\n    mutation,\n    useQuery: (key, params, options) => {\n      return useQuery({\n        ...options,\n        enabled: !!params && options?.enabled !== false,\n        queryKey: [key, params],\n        queryFn: () => {\n          invariant(params, `\"enabled\" prop of useQuery should prevent this call'`);\n          return query[key](...params);\n        },\n      });\n    },\n    useMutation: (key, options) => useMutation((params) => mutation[key](...params), options),\n    refetchQueries(key, params?) {\n      return queryClient.refetchQueries(params ? [key, params] : [key]);\n    },\n    invalidateQueries(key, params?) {\n      return queryClient.invalidateQueries(params ? [key, params] : [key]);\n    },\n  };\n}\n\nexport default createClient<ServerDefinition>('/api/rpc');\n","import { parse as superjsonParse } from 'superjson';\nimport type { MethodsOf, MethodsOfGroup, RpcRequest, RpcResponse } from './server/rpc';\n\nfunction createFetcher(endpoint: string, type: 'query' | 'mutation'): MethodsOfGroup<any> {\n  return new Proxy(\n    {},\n    {\n      get(target, prop) {\n        return async (...params: any[]) => {\n          const body: RpcRequest = {\n            type,\n            name: prop as string,\n            params,\n          };\n          const res = await fetch(endpoint, {\n            method: 'POST',\n            headers: {\n              'content-type': 'application/json',\n            },\n            body: JSON.stringify(body),\n          });\n\n          if (res.ok) {\n            const response = (await res.json()) as RpcResponse;\n            if (response.error) {\n              const toolpadError = new Error(response.error.message, {\n                cause: response.error,\n              });\n              if (response.error.code) {\n                toolpadError.code = response.error.code;\n              }\n              throw toolpadError;\n            }\n            return superjsonParse(response.result);\n          }\n\n          throw new Error(`HTTP ${res.status}`);\n        };\n      },\n    },\n  );\n}\n\nexport interface RpcClient<D extends MethodsOf<any>> {\n  query: D['query'];\n  mutation: D['mutation'];\n}\n\nexport function createRpcClient<D extends MethodsOf<any>>(endpoint: string): RpcClient<D> {\n  const query = createFetcher(endpoint, 'query');\n  const mutation = createFetcher(endpoint, 'mutation');\n  return { query, mutation };\n}\n","// TODO: replace references to this file with the '@mui/toolpad-utils/hooks/useBoolean'\nexport { default } from '@mui/toolpad-utils/hooks/useBoolean';\n","import * as React from 'react';\nimport { IconButton, Menu, MenuItem, ListItemText, ListItemIcon, Tooltip } from '@mui/material';\nimport LightModeOutlined from '@mui/icons-material/LightMode';\nimport DarkModeOutlined from '@mui/icons-material/DarkMode';\nimport SettingsBrightnessOutlined from '@mui/icons-material/SettingsBrightnessOutlined';\nimport { ThemeMode } from '../../../ThemeContext';\nimport useMenu from '../../../utils/useMenu';\n\ninterface ThemeModeMenuProps {\n  mode: ThemeMode;\n  onChange: (event: React.MouseEvent, mode: ThemeMode) => void;\n}\n\ninterface ThemeModeMenuOption {\n  label: string;\n  icon: React.ReactNode;\n  value: ThemeMode;\n}\n\nconst options: Record<string, ThemeModeMenuOption> = {\n  light: {\n    label: 'Light',\n    value: 'light',\n    icon: <LightModeOutlined />,\n  },\n  dark: {\n    label: 'Dark',\n    value: 'dark',\n    icon: <DarkModeOutlined />,\n  },\n  system: {\n    label: 'System',\n    value: 'system',\n    icon: <SettingsBrightnessOutlined />,\n  },\n};\n\nfunction ThemeModeMenu({ mode, onChange }: ThemeModeMenuProps) {\n  const { buttonProps, menuProps, onMenuClose } = useMenu();\n\n  return (\n    <React.Fragment>\n      <Tooltip title=\"Change theme\">\n        <IconButton {...buttonProps} aria-label=\"Change theme\" color=\"primary\">\n          {options[mode].icon}\n        </IconButton>\n      </Tooltip>\n\n      <Menu {...menuProps}>\n        {Object.values(options).map((option) => (\n          <MenuItem\n            key={option.value}\n            selected={option.value === mode}\n            onClick={(event) => {\n              onChange(event, option.value);\n              onMenuClose();\n            }}\n          >\n            <ListItemIcon>{option.icon}</ListItemIcon>\n            <ListItemText primary={option.label} />\n          </MenuItem>\n        ))}\n      </Menu>\n    </React.Fragment>\n  );\n}\n\nexport default ThemeModeMenu;\n","import * as React from 'react';\nimport { PaletteMode, ScopedCssBaseline } from '@mui/material';\nimport { ThemeProvider as MuiThemeProvider, createTheme } from '@mui/material/styles';\nimport { deepmerge } from '@mui/utils';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport { getDesignTokens, getMetaThemeColor, getThemedComponents } from './theme';\nimport useLocalStorageState from './utils/useLocalStorageState';\n\ninterface ThemeProviderProps {\n  children?: React.ReactNode;\n}\n\nexport type ThemeMode = PaletteMode | 'system';\n\nfunction usePreferredMode(): PaletteMode {\n  const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');\n  return prefersDarkMode ? 'dark' : 'light';\n}\n\nexport function useThemeMode() {\n  const [themeMode, setThemeMode] = useLocalStorageState<ThemeMode>(\n    'toolpad-palette-mode',\n    'system',\n  );\n  return { themeMode, setThemeMode };\n}\n\nexport function usePaletteMode(): PaletteMode {\n  const preferredMode = usePreferredMode();\n  const { themeMode } = useThemeMode();\n  return themeMode === 'system' ? preferredMode : themeMode;\n}\n\nexport function ThemeProvider({ children }: ThemeProviderProps) {\n  const paletteMode = usePaletteMode();\n  const theme = React.useMemo(() => {\n    const brandingDesignTokens = getDesignTokens(paletteMode);\n    let nextTheme = createTheme({\n      ...brandingDesignTokens,\n      palette: {\n        ...brandingDesignTokens.palette,\n        mode: paletteMode,\n      },\n    });\n    nextTheme = deepmerge(nextTheme, getThemedComponents(nextTheme));\n\n    return nextTheme;\n  }, [paletteMode]);\n\n  React.useMemo(() => {\n    let meta: HTMLMetaElement | null = document.querySelector(\"meta[name='theme-color']\");\n    if (!meta) {\n      meta = document.createElement('meta');\n      meta.name = 'theme-color';\n      document.head.appendChild(meta);\n    }\n    meta.setAttribute('content', getMetaThemeColor(paletteMode));\n    meta.setAttribute('media', `(prefers-color-scheme: ${paletteMode})`);\n  }, [paletteMode]);\n\n  return (\n    <MuiThemeProvider theme={theme}>\n      <ScopedCssBaseline enableColorScheme>{children}</ScopedCssBaseline>\n    </MuiThemeProvider>\n  );\n}\n","import ArrowDropDownRounded from '@mui/icons-material/ArrowDropDownRounded';\nimport { tooltipClasses } from '@mui/material';\nimport { createTheme, ThemeOptions, Theme, alpha } from '@mui/material/styles';\n\ndeclare module '@mui/material/styles/createPalette' {\n  interface ColorRange {\n    50: string;\n    100: string;\n    200: string;\n    300: string;\n    400: string;\n    500: string;\n    600: string;\n    700: string;\n    800: string;\n    900: string;\n  }\n\n  interface PaletteColor extends ColorRange {}\n\n  interface Palette {\n    primaryDark: PaletteColor;\n  }\n}\n\ndeclare module '@mui/material/styles/createTypography' {\n  interface TypographyOptions {\n    fontWeightSemiBold?: number;\n    fontWeightExtraBold?: number;\n    fontFamilyCode?: string;\n  }\n\n  interface Typography {\n    fontWeightSemiBold: number;\n    fontWeightExtraBold: number;\n    fontFamilyCode: string;\n  }\n}\n\ndeclare module '@mui/material/Chip' {\n  interface ChipPropsColorOverrides {\n    grey: true;\n  }\n}\n\n// TODO: enable this once types conflict is fixed\n// declare module '@mui/material/Button' {\n//   interface ButtonPropsVariantOverrides {\n//     code: true;\n//   }\n// }\n\nconst defaultTheme = createTheme();\n\nconst blue = {\n  50: '#F0F7FF',\n  100: '#C2E0FF',\n  200: '#99CCF3',\n  300: '#66B2FF',\n  400: '#3399FF',\n  main: '#007FFF',\n  500: '#007FFF',\n  600: '#0072E5', // vs blueDark 900: WCAG 4.6 AAA (large), APCA 36 Not for reading text\n  700: '#0059B2',\n  800: '#004C99',\n  900: '#003A75',\n};\nconst blueDark = {\n  50: '#E2EDF8',\n  100: '#CEE0F3',\n  200: '#91B9E3',\n  300: '#5090D3',\n  main: '#5090D3',\n  400: '#265D97',\n  500: '#1E4976',\n  600: '#173A5E',\n  700: '#132F4C', // contrast 13.64:1\n  800: '#001E3C',\n  900: '#0A1929',\n};\nconst grey = {\n  50: '#F3F6F9',\n  100: '#E7EBF0',\n  200: '#E0E3E7',\n  300: '#CDD2D7', // vs blueDark 900: WCAG 11.6 AAA, APCA 78 Best for text\n  400: '#B2BAC2', // vs blueDark 900: WCAG 9 AAA, APCA 63.3 Ok for text\n  500: '#A0AAB4', // vs blueDark 900: WCAG 7.5 AAA, APCA 54.3 Only for large text\n  600: '#6F7E8C', // vs white bg: WCAG 4.1 AA, APCA 68.7 Ok for text\n  700: '#3E5060', // vs white bg: WCAG 8.3 AAA, APCA 88.7 Best for text\n  800: '#2D3843', // vs white bg: WCAG 11.9 AAA, APCA 97.3 Best for text\n  900: '#1A2027',\n};\n// context on the Advanced Perceptual Contrast Algorithm (APCA) used above here: https://github.com/w3c/wcag/issues/695\n\nconst systemFont = [\n  '-apple-system',\n  'BlinkMacSystemFont',\n  '\"Segoe UI\"',\n  'Roboto',\n  '\"Helvetica Neue\"',\n  'Arial',\n  'sans-serif',\n  '\"Apple Color Emoji\"',\n  '\"Segoe UI Emoji\"',\n  '\"Segoe UI Symbol\"',\n];\n\nexport const getMetaThemeColor = (mode: 'light' | 'dark') => {\n  const themeColor = {\n    light: grey[50],\n    dark: blueDark[800],\n  };\n  return themeColor[mode];\n};\n\nexport const getDesignTokens = (mode: 'light' | 'dark') =>\n  ({\n    palette: {\n      primary: {\n        ...blue,\n        ...(mode === 'dark' && {\n          main: blue[400],\n        }),\n      },\n      divider: mode === 'dark' ? alpha(blue[100], 0.08) : grey[100],\n      primaryDark: blueDark,\n      mode,\n      ...(mode === 'dark' && {\n        background: {\n          default: blueDark[800],\n          paper: blueDark[900],\n        },\n      }),\n      common: {\n        black: '#1D1D1D',\n      },\n      text: {\n        ...(mode === 'light' && {\n          primary: grey[900],\n          secondary: grey[700],\n        }),\n        ...(mode === 'dark' && {\n          primary: '#fff',\n          secondary: grey[400],\n        }),\n      },\n      grey: {\n        ...(mode === 'light' && {\n          main: grey[100],\n          contrastText: grey[600],\n        }),\n        ...(mode === 'dark' && {\n          main: blueDark[700],\n          contrastText: grey[600],\n        }),\n      },\n      error: {\n        50: '#FFF0F1',\n        100: '#FFDBDE',\n        200: '#FFBDC2',\n        300: '#FF99A2',\n        400: '#FF7A86',\n        500: '#FF505F',\n        main: '#EB0014', // contrast 4.63:1\n        600: '#EB0014',\n        700: '#C70011',\n        800: '#94000D',\n        900: '#570007',\n      },\n      success: {\n        50: '#E9FBF0',\n        100: '#C6F6D9',\n        200: '#9AEFBC',\n        300: '#6AE79C',\n        400: '#3EE07F',\n        500: '#21CC66',\n        600: '#1DB45A',\n        ...(mode === 'light' && {\n          main: '#1AA251', // contrast 3.31:1\n        }),\n        ...(mode === 'dark' && {\n          main: '#1DB45A', // contrast 6.17:1 (blueDark.800)\n        }),\n        700: '#1AA251',\n        800: '#178D46',\n        900: '#0F5C2E',\n      },\n      warning: {\n        50: '#FFF9EB',\n        100: '#FFF3C1',\n        200: '#FFECA1',\n        300: '#FFDC48', // vs blueDark900: WCAG 10.4 AAA, APCA 72 Ok for text\n        400: '#F4C000', // vs blueDark900: WCAG 6.4 AA normal, APCA 48 Only large text\n        500: '#DEA500', // vs blueDark900: WCAG 8 AAA normal, APCA 58 Only large text\n        main: '#DEA500',\n        600: '#D18E00', // vs blueDark900: WCAG 6.4 AA normal, APCA 48 Only large text\n        700: '#AB6800', // vs white bg: WCAG 4.4 AA large, APCA 71 Ok for text\n        800: '#8C5800', // vs white bg: WCAG 5.9 AAA large, APCA 80 Best for text\n        900: '#5A3600', // vs white bg: WCAG 10.7 AAA, APCA 95 Best for text\n      },\n    },\n    shape: {\n      borderRadius: 10,\n    },\n    spacing: 10,\n    typography: {\n      fontFamily: ['\"IBM Plex Sans\"', ...systemFont].join(','),\n      fontFamilyCode: [\n        'Consolas',\n        'Menlo',\n        'Monaco',\n        'Andale Mono',\n        'Ubuntu Mono',\n        'monospace',\n      ].join(','),\n      fontFamilyTagline: ['\"PlusJakartaSans-ExtraBold\"', ...systemFont].join(','),\n      fontFamilySystem: systemFont.join(','),\n      fontWeightSemiBold: 600,\n      fontWeightExtraBold: 800,\n      h1: {\n        fontFamily: ['\"PlusJakartaSans-ExtraBold\"', ...systemFont].join(','),\n        fontSize: 'clamp(2.625rem, 1.2857rem + 3.5714vw, 4rem)',\n        fontWeight: 800,\n        lineHeight: 78 / 70,\n        ...(mode === 'light' && {\n          color: blueDark[900],\n        }),\n      },\n      h2: {\n        fontFamily: ['\"PlusJakartaSans-ExtraBold\"', ...systemFont].join(','),\n        fontSize: 'clamp(1.5rem, 0.9643rem + 1.4286vw, 2.25rem)',\n        fontWeight: 800,\n        lineHeight: 44 / 36,\n        color: mode === 'dark' ? grey[100] : blueDark[700],\n      },\n      h3: {\n        fontFamily: ['\"PlusJakartaSans-Bold\"', ...systemFont].join(','),\n        fontSize: defaultTheme.typography.pxToRem(36),\n        lineHeight: 44 / 36,\n        letterSpacing: 0.2,\n      },\n      h4: {\n        fontFamily: ['\"PlusJakartaSans-Bold\"', ...systemFont].join(','),\n        fontSize: defaultTheme.typography.pxToRem(28),\n        lineHeight: 42 / 28,\n        letterSpacing: 0.2,\n      },\n      h5: {\n        fontFamily: ['\"PlusJakartaSans-Bold\"', ...systemFont].join(','),\n        fontSize: defaultTheme.typography.pxToRem(24),\n        lineHeight: 36 / 24,\n        letterSpacing: 0.1,\n        color: mode === 'dark' ? blue[300] : blue.main,\n      },\n      h6: {\n        fontSize: defaultTheme.typography.pxToRem(20),\n        lineHeight: 30 / 20,\n      },\n      button: {\n        textTransform: 'initial',\n        fontWeight: 700,\n        letterSpacing: 0,\n      },\n      subtitle1: {\n        fontSize: defaultTheme.typography.pxToRem(18),\n        lineHeight: 24 / 18,\n        letterSpacing: 0,\n        fontWeight: 500,\n      },\n      body1: {\n        fontSize: defaultTheme.typography.pxToRem(16), // 16px\n        lineHeight: 24 / 16,\n        letterSpacing: 0,\n      },\n      body2: {\n        fontSize: defaultTheme.typography.pxToRem(14), // 14px\n        lineHeight: 21 / 14,\n        letterSpacing: 0,\n      },\n      caption: {\n        fontSize: defaultTheme.typography.pxToRem(12), // 12px\n        lineHeight: 18 / 12,\n        letterSpacing: 0,\n        fontWeight: 700,\n      },\n      allVariants: {\n        scrollMarginTop: 'calc(var(--MuiDocs-header-height) + 32px)',\n      },\n    },\n  } as ThemeOptions);\n\nexport function getThemedComponents(theme: Theme): { components: Theme['components'] } {\n  return {\n    components: {\n      MuiButtonBase: {\n        defaultProps: {\n          disableTouchRipple: true,\n        },\n      },\n      MuiButton: {\n        defaultProps: {\n          disableElevation: true,\n          size: 'small',\n        },\n        styleOverrides: {\n          sizeLarge: {\n            padding: '0.875rem 1rem',\n            ...theme.typography.body1,\n            lineHeight: 21 / 16,\n            fontWeight: 700,\n          },\n          sizeSmall: {\n            padding: theme.spacing(0.5, 1),\n          },\n          containedPrimary: {\n            backgroundColor: theme.palette.primary[500],\n            color: '#fff',\n          },\n        },\n        variants: [\n          {\n            // @ts-ignore internal repo module augmentation issue\n            props: { variant: 'code' },\n            style: {\n              color:\n                theme.palette.mode === 'dark' ? theme.palette.grey[400] : theme.palette.grey[800],\n              border: '1px solid',\n              borderColor:\n                theme.palette.mode === 'dark'\n                  ? theme.palette.primaryDark[400]\n                  : theme.palette.grey[300],\n              backgroundColor:\n                theme.palette.mode === 'dark'\n                  ? theme.palette.primaryDark[700]\n                  : theme.palette.grey[50],\n              fontFamily: theme.typography.fontFamilyCode,\n              fontWeight: 400,\n              fontSize: defaultTheme.typography.pxToRem(13), // 14px\n              lineHeight: 21 / 14,\n              letterSpacing: 0,\n              WebkitFontSmoothing: 'subpixel-antialiased',\n              '&:hover, &.Mui-focusVisible': {\n                borderColor: theme.palette.primary.main,\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.primaryDark[600]\n                    : theme.palette.primary[50],\n                '& .MuiButton-endIcon': {\n                  color:\n                    theme.palette.mode === 'dark'\n                      ? theme.palette.primary[300]\n                      : theme.palette.primary.main,\n                },\n              },\n              '& .MuiButton-startIcon': {\n                color: theme.palette.grey[400],\n              },\n              '& .MuiButton-endIcon': {\n                display: 'inline-block',\n                position: 'absolute',\n                right: 0,\n                marginRight: 10,\n                color:\n                  theme.palette.mode === 'dark' ? theme.palette.grey[400] : theme.palette.grey[700],\n              },\n            },\n          },\n          {\n            // @ts-ignore internal repo module augmentation issue\n            props: { variant: 'link' },\n            style: {\n              fontSize: theme.typography.pxToRem(14),\n              fontWeight: 700,\n              color:\n                theme.palette.mode === 'dark'\n                  ? theme.palette.primary[300]\n                  : theme.palette.primary[600],\n              mb: 1,\n              '& svg': {\n                ml: -0.5,\n              },\n            },\n          },\n        ],\n      },\n      MuiIconButton: {\n        defaultProps: {\n          size: 'small',\n        },\n        variants: [\n          {\n            props: { color: 'primary' },\n            style: {\n              height: 34,\n              width: 34,\n              border: `1px solid ${\n                theme.palette.mode === 'dark'\n                  ? theme.palette.primaryDark[700]\n                  : theme.palette.grey[200]\n              }`,\n              borderRadius: theme.shape.borderRadius,\n              color:\n                theme.palette.mode === 'dark'\n                  ? theme.palette.primary[300]\n                  : theme.palette.primary[500],\n              '&:hover': {\n                borderColor:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.primaryDark[600]\n                    : theme.palette.grey[300],\n                background:\n                  theme.palette.mode === 'dark'\n                    ? alpha(theme.palette.primaryDark[700], 0.4)\n                    : theme.palette.grey[50],\n              },\n            },\n          },\n        ],\n      },\n      MuiMenu: {\n        styleOverrides: {\n          paper: {\n            minWidth: 160,\n            color: theme.palette.text.secondary,\n            backgroundImage: 'none',\n            backgroundColor:\n              theme.palette.mode === 'dark'\n                ? theme.palette.primaryDark[900]\n                : theme.palette.background.paper,\n            border: `1px solid ${\n              theme.palette.mode === 'dark'\n                ? theme.palette.primaryDark[700]\n                : theme.palette.grey[200]\n            }`,\n            '& .MuiMenuItem-root': {\n              fontSize: theme.typography.pxToRem(14),\n              fontWeight: 500,\n              '&:hover': {\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? alpha(theme.palette.primaryDark[700], 0.4)\n                    : theme.palette.grey[50],\n              },\n              '&:focus': {\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? alpha(theme.palette.primaryDark[700], 0.4)\n                    : theme.palette.grey[50],\n              },\n              '&.Mui-selected': {\n                fontWeight: 500,\n                color:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.primary[300]\n                    : theme.palette.primary[600],\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.primaryDark[700]\n                    : alpha(theme.palette.primary[100], 0.6),\n              },\n            },\n          },\n        },\n      },\n      MuiPopover: {\n        styleOverrides: {\n          paper: {\n            boxShadow: `0px 4px 20px ${\n              theme.palette.mode === 'dark' ? 'rgba(0, 0, 0, 0.5)' : 'rgba(170, 180, 190, 0.3)'\n            }`,\n          },\n        },\n      },\n      MuiDivider: {\n        styleOverrides: {\n          root: {\n            borderColor:\n              theme.palette.mode === 'dark'\n                ? alpha(theme.palette.primary[100], 0.08)\n                : theme.palette.grey[100],\n          },\n        },\n      },\n      MuiLink: {\n        defaultProps: {\n          underline: 'none',\n        },\n        styleOverrides: {\n          root: {\n            color:\n              theme.palette.mode === 'dark'\n                ? theme.palette.primary[300]\n                : theme.palette.primary[600],\n            fontWeight: 700,\n            alignItems: 'center',\n            '&:hover': {\n              color:\n                theme.palette.mode === 'dark'\n                  ? theme.palette.primary[200]\n                  : theme.palette.primary[700],\n            },\n            '&.MuiTypography-body1 > svg': {\n              marginTop: 2,\n            },\n            '& svg:last-child': {\n              marginLeft: 2,\n            },\n            [`.${tooltipClasses.tooltip} &`]: {\n              // Tooltip has a dark background in light mode\n              color: theme.palette.primary[300],\n              '&:hover': {\n                color: theme.palette.primary[200],\n              },\n            },\n          },\n        },\n      },\n      MuiChip: {\n        styleOverrides: {\n          root: ({ ownerState: { color, variant } }) => ({\n            fontWeight: 500,\n            ...(variant === 'outlined' &&\n              color === 'default' && {\n                color:\n                  theme.palette.mode === 'dark' ? theme.palette.grey[300] : theme.palette.grey[900],\n                backgroundColor: 'transparent',\n                borderColor:\n                  theme.palette.mode === 'dark'\n                    ? alpha(theme.palette.grey[100], 0.1)\n                    : theme.palette.grey[200],\n                '&:hover': {\n                  color:\n                    theme.palette.mode === 'dark'\n                      ? theme.palette.grey[300]\n                      : theme.palette.grey[900],\n                },\n              }),\n            ...(variant === 'outlined' &&\n              color === 'primary' && {\n                '&:hover': {\n                  color: theme.palette.primary[500],\n                },\n              }),\n            ...(variant === 'filled' &&\n              color === 'default' && {\n                border: '1px solid transparent',\n                color: theme.palette.mode === 'dark' ? '#fff' : theme.palette.primary[700],\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? alpha(theme.palette.primaryDark[500], 0.8)\n                    : alpha(theme.palette.primary[100], 0.5),\n                '&:hover': {\n                  backgroundColor:\n                    theme.palette.mode === 'dark'\n                      ? theme.palette.primaryDark[600]\n                      : theme.palette.primary[100],\n                },\n              }),\n            // for labelling product in the search\n            // @ts-ignore internal repo module augmentation issue\n            ...(variant === 'light' && {\n              ...(color === 'default' && {\n                color:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.primary[200]\n                    : theme.palette.primary[700],\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? alpha(theme.palette.primaryDark[700], 0.5)\n                    : alpha(theme.palette.primary[100], 0.3),\n              }),\n              ...(color === 'warning' && {\n                color: theme.palette.mode === 'dark' ? '#fff' : theme.palette.warning[900],\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.warning[900]\n                    : theme.palette.warning[100],\n              }),\n              ...(color === 'success' && {\n                color: theme.palette.mode === 'dark' ? '#fff' : theme.palette.success[900],\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.success[900]\n                    : theme.palette.success[100],\n              }),\n            }),\n          }),\n          deleteIcon: {\n            color: theme.palette.mode === 'dark' ? '#fff' : theme.palette.primary[700],\n            '&:hover': {\n              color:\n                theme.palette.mode === 'dark'\n                  ? theme.palette.grey[100]\n                  : theme.palette.primary[900],\n            },\n          },\n        },\n      },\n      MuiList: {\n        defaultProps: {\n          dense: true,\n        },\n        styleOverrides: {\n          root: {\n            padding: 0,\n          },\n        },\n      },\n      MuiListItemButton: {\n        defaultProps: {\n          dense: true,\n        },\n        styleOverrides: {\n          root: {\n            padding: '8px',\n            textTransform: 'none',\n            fontWeight: 500,\n            fontSize: theme.typography.pxToRem(14),\n            color:\n              theme.palette.mode === 'dark' ? theme.palette.grey[300] : theme.palette.grey[700],\n            borderRadius: 0,\n            '&:hover': {\n              backgroundColor:\n                theme.palette.mode === 'dark'\n                  ? alpha(theme.palette.primaryDark[700], 0.4)\n                  : theme.palette.grey[50],\n            },\n            '&.Mui-selected': {\n              color: theme.palette.mode === 'dark' ? '#fff' : theme.palette.primary[500],\n              borderRadius: 10,\n              border: '1px solid',\n              borderColor:\n                theme.palette.mode === 'dark'\n                  ? `${theme.palette.primary[700]} !important`\n                  : `${theme.palette.primary[500]} !important`,\n              backgroundColor:\n                theme.palette.mode === 'dark'\n                  ? theme.palette.primaryDark[700]\n                  : theme.palette.primary[50],\n              '&:hover': {\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.primaryDark[600]\n                    : theme.palette.primary[100],\n              },\n            },\n            '&.MuiListItemButton-dense': {\n              padding: '4px 16px',\n            },\n          },\n        },\n      },\n      MuiSelect: {\n        defaultProps: {\n          IconComponent: ArrowDropDownRounded,\n          size: 'small',\n        },\n        styleOverrides: {\n          iconFilled: {\n            top: 'calc(50% - .25em)',\n          },\n        },\n      },\n      MuiTab: {\n        styleOverrides: {\n          root: {\n            padding: 8,\n            minHeight: 0,\n          },\n        },\n        defaultProps: {\n          disableTouchRipple: true,\n        },\n      },\n      MuiPaper: {\n        styleOverrides: {\n          root: {\n            backgroundImage: 'none',\n            backgroundColor:\n              theme.palette.mode === 'dark' ? theme.palette.primaryDark[900] : '#fff',\n            '&[href]': {\n              textDecorationLine: 'none',\n            },\n          },\n          outlined: {\n            display: 'block',\n            borderColor:\n              theme.palette.mode === 'dark'\n                ? theme.palette.primaryDark[500]\n                : theme.palette.grey[200],\n            ...(theme.palette.mode === 'dark' && {\n              backgroundColor: theme.palette.primaryDark[700],\n            }),\n            'a&, button&': {\n              '&:hover': {\n                boxShadow: `0px 4px 20px ${\n                  theme.palette.mode === 'dark' ? 'rgba(0, 0, 0, 0.5)' : 'rgba(170, 180, 190, 0.3)'\n                }`,\n              },\n            },\n          },\n        },\n      },\n      MuiTableCell: {\n        styleOverrides: {\n          root: {\n            padding: theme.spacing(1, 2),\n            borderColor: theme.palette.divider,\n          },\n          head: {\n            color: theme.palette.text.primary,\n            fontWeight: 700,\n          },\n          body: {\n            color: theme.palette.text.secondary,\n          },\n        },\n      },\n      MuiToggleButtonGroup: {\n        defaultProps: {\n          size: 'small',\n        },\n      },\n      MuiToggleButton: {\n        styleOverrides: {\n          root: {\n            textTransform: 'none',\n            fontWeight: 500,\n            padding: theme.spacing(0.5),\n            color:\n              theme.palette.mode === 'dark' ? theme.palette.grey[300] : theme.palette.grey[700],\n            borderColor:\n              theme.palette.mode === 'dark'\n                ? theme.palette.primaryDark[500]\n                : theme.palette.grey[200],\n            '&.Mui-selected': {\n              color: theme.palette.mode === 'dark' ? '#fff' : theme.palette.primary[500],\n              borderColor:\n                theme.palette.mode === 'dark'\n                  ? `${theme.palette.primary[700]} !important`\n                  : `${theme.palette.primary[500]} !important`,\n              backgroundColor:\n                theme.palette.mode === 'dark'\n                  ? theme.palette.primaryDark[700]\n                  : theme.palette.primary[50],\n              '&:hover': {\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.primaryDark[600]\n                    : theme.palette.primary[100],\n              },\n            },\n          },\n        },\n      },\n      MuiTooltip: {\n        styleOverrides: {\n          tooltip: {\n            padding: '5px 9px',\n          },\n        },\n      },\n      MuiSwitch: {\n        styleOverrides: {\n          root: {\n            width: 32,\n            height: 20,\n            padding: 0,\n            '& .MuiSwitch-switchBase': {\n              '&.Mui-checked': {\n                transform: 'translateX(11px)',\n                color: '#fff',\n              },\n            },\n          },\n          switchBase: {\n            height: 20,\n            width: 20,\n            padding: 0,\n            color: '#fff',\n            '&.Mui-checked + .MuiSwitch-track': {\n              opacity: 1,\n            },\n          },\n          track: {\n            opacity: 1,\n            borderRadius: 32,\n            backgroundColor:\n              theme.palette.mode === 'dark' ? theme.palette.grey[800] : theme.palette.grey[400],\n          },\n          thumb: {\n            flexShrink: 0,\n            width: '14px',\n            height: '14px',\n          },\n        },\n      },\n      MuiPaginationItem: {\n        styleOverrides: {\n          root: {\n            textTransform: 'none',\n            fontWeight: 700,\n            color:\n              theme.palette.mode === 'dark' ? theme.palette.grey[300] : theme.palette.grey[700],\n            borderColor:\n              theme.palette.mode === 'dark'\n                ? theme.palette.primaryDark[500]\n                : theme.palette.grey[200],\n            '&.Mui-selected': {\n              color: theme.palette.mode === 'dark' ? '#fff' : theme.palette.primary[500],\n              borderColor:\n                theme.palette.mode === 'dark'\n                  ? `${theme.palette.primary[700]} !important`\n                  : `${theme.palette.primary[500]} !important`,\n              backgroundColor:\n                theme.palette.mode === 'dark'\n                  ? theme.palette.primaryDark[700]\n                  : theme.palette.primary[50],\n              '&:hover': {\n                backgroundColor:\n                  theme.palette.mode === 'dark'\n                    ? theme.palette.primaryDark[600]\n                    : theme.palette.primary[100],\n              },\n            },\n          },\n        },\n      },\n      MuiCssBaseline: {\n        defaultProps: {\n          enableColorScheme: true,\n        },\n      },\n      MuiTextField: {\n        defaultProps: {\n          size: 'small',\n          margin: 'dense',\n        },\n      },\n      MuiCheckbox: {\n        defaultProps: {\n          size: 'small',\n        },\n      },\n      MuiFormControl: {\n        defaultProps: {\n          size: 'small',\n          margin: 'dense',\n        },\n      },\n      MuiFormHelperText: {\n        defaultProps: {\n          margin: 'dense',\n        },\n      },\n      MuiMenuItem: {\n        defaultProps: {\n          dense: true,\n        },\n      },\n      MuiAutocomplete: {\n        defaultProps: {\n          size: 'small',\n        },\n      },\n      MuiDataGrid: {\n        defaultProps: {\n          density: 'compact',\n        },\n      },\n      MuiSvgIcon: {\n        defaultProps: {\n          fontSize: 'small',\n        },\n      },\n      MuiTabs: {\n        styleOverrides: {\n          root: {\n            minHeight: 0,\n          },\n        },\n      },\n      MuiToolbar: {\n        defaultProps: {\n          variant: 'dense',\n        },\n      },\n      MuiFilledInput: {\n        defaultProps: {\n          margin: 'dense',\n        },\n      },\n      MuiInputBase: {\n        defaultProps: {\n          margin: 'dense',\n        },\n      },\n      MuiInputLabel: {\n        defaultProps: {\n          margin: 'dense',\n        },\n      },\n      MuiListItem: {\n        defaultProps: {\n          dense: true,\n        },\n      },\n      MuiOutlinedInput: {\n        defaultProps: {\n          margin: 'dense',\n        },\n      },\n      MuiFab: {\n        defaultProps: {\n          size: 'small',\n        },\n      },\n      MuiTable: {\n        defaultProps: {\n          size: 'small',\n        },\n      },\n    },\n  };\n}\n","import * as React from 'react';\nimport { Emitter } from '@mui/toolpad-utils/events';\n\n// storage events only work across windows, we'll use an event emitter to announce within the window\nconst emitter = new Emitter<Record<string, null>>();\n// local cache, needed for getSnapshot\nconst cache = new Map<string, any>();\n\nfunction subscribe(key: string, cb: () => void): () => void {\n  const onKeyChange = () => {\n    // invalidate local cache\n    cache.delete(key);\n    cb();\n  };\n  const storageHandler = (event: StorageEvent) => {\n    if (event.storageArea === window.localStorage && event.key === key) {\n      onKeyChange();\n    }\n  };\n  window.addEventListener('storage', storageHandler);\n  emitter.on(key, onKeyChange);\n  return () => {\n    window.removeEventListener('storage', storageHandler);\n    emitter.off(key, onKeyChange);\n  };\n}\n\nfunction getSnapshot<T = unknown>(key: string): T | undefined {\n  try {\n    let value = cache.get(key);\n    if (!value) {\n      const item = window.localStorage.getItem(key);\n      value = item ? JSON.parse(item) : undefined;\n      cache.set(key, value);\n    }\n    return value;\n  } catch (error) {\n    console.error(error);\n    return undefined;\n  }\n}\n\nfunction setValue<T = unknown>(key: string, value: T) {\n  try {\n    if (typeof window !== 'undefined') {\n      cache.set(key, value);\n      window.localStorage.setItem(key, JSON.stringify(value));\n      emitter.emit(key, null);\n    }\n  } catch (error) {\n    console.error(error);\n  }\n}\n\n/**\n * Sync state to local storage so that it persists through a page refresh. Usage is\n * similar to useState except we pass in a local storage key so that we can default\n * to that value on page load instead of the specified initial value.\n *\n * Since the local storage API isn't available in server-rendering environments, we\n * return initialValue during SSR and hydration.\n *\n * Things this hook does different from existing solutions:\n * - SSR-capable: it shows initial value during SSR and hydration, but immediately\n *   initializes when clientside mounted.\n * - Sync state across tabs: When another tab changes the value in local storage, the\n *   current tab follows suit.\n */\nexport default function useLocalStorageState<V>(\n  key: string,\n  initialValue: V,\n): [V, React.Dispatch<React.SetStateAction<V>>] {\n  const subscribeKey = React.useCallback((cb: () => void) => subscribe(key, cb), [key]);\n  const getKeySnapshot = React.useCallback(\n    () => getSnapshot<V>(key) ?? initialValue,\n    [initialValue, key],\n  );\n  const getKeyServerSnapshot = React.useCallback(() => initialValue, [initialValue]);\n\n  const storedValue: V = React.useSyncExternalStore(\n    subscribeKey,\n    getKeySnapshot,\n    getKeyServerSnapshot,\n  );\n\n  const setStoredValue = React.useCallback(\n    (value: React.SetStateAction<V>) => {\n      const valueToStore = value instanceof Function ? value(storedValue) : value;\n      setValue(key, valueToStore);\n    },\n    [key, storedValue],\n  );\n\n  return [storedValue, setStoredValue];\n}\n","import * as React from 'react';\n\nlet dispatcher: any = null;\n\nfunction getCurrentDispatcher() {\n  // Only used to provide debug info during development.\n  // eslint-disable-next-line no-underscore-dangle\n  return (React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher\n    .current;\n}\n\nfunction useRenderTracker() {\n  if (dispatcher === null) {\n    dispatcher = getCurrentDispatcher();\n  }\n}\n\nfunction isInRender() {\n  return dispatcher !== null && dispatcher === getCurrentDispatcher();\n}\n\n/**\n * A Hook to define an event handler with an always-stable function identity.\n * In anticipation of a react native solution\n * See https://github.com/reactjs/rfcs/pull/220\n */\nexport default function useEvent<F extends (...args: any[]) => void>(handler: F): F {\n  useRenderTracker();\n  const ref = React.useRef(handler);\n  React.useInsertionEffect(() => {\n    ref.current = handler;\n  });\n  // @ts-expect-error\n  return React.useCallback((...args) => {\n    if (process.env.NODE_ENV !== 'production' && isInRender()) {\n      console.error(`Functions returned by useEvent can't be called during a React render.`);\n    }\n    const fn = ref.current;\n    fn(...args);\n  }, []);\n}\n"],"mappings":";AACA,YAAY,WAAW;AAchB,IAAM,qBAA2B,oBAA2B,CAAC,CAAC;;;ACfrE,YAAYA,aAAW;AACvB;AAAA,EACE,SAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AAAA,OACK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAMA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP,SAAS,uBAAuB,0BAA0B;AAC1D,SAAS,eAAAC,cAAa,qBAAqB,eAAAC,oBAAmB;AAC9D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AACP,SAAS,qBAAoC;AAC7C;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AACP,YAAY,OAAO;AACnB,OAAO,eAAe;AACtB,SAAS,yBAAyB;AAClC,YAAY,cAAc;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,iBAAAC,gBAAe,aAAAC,kBAAiB;AACzC,OAAO,gBAAgB;AACvB,OAAO,kBAAkB;AACzB,OAAOC,gBAAe;;;AC9DtB,SAAS,cAAc;AACvB,SAAS,0BAA0B;AAWnC,OAAO,eAAe;AAEtB,SAAS,YAAY,kBAAkB,oBAAoB;AAC3D,SAAS,eAAe,iBAAiB;;;ACfzC,SAAS,SAAS,aAAa;AA4BxB,SAAS,WAAgC,KAAQ,MAAc,OAAa;AACjF,SAAO,QAAQ,MAAM,GAAG,GAAG,MAAM,OAAO,KAAK;AAC/C;;;AC7BA,SAAS,SAAS;AAIlB,SAAS,oBAA2D,MAAS,MAAS;AACpF,SAAO,EAAE,OAAO;AAAA,IACd,YAAY,EACT,QAAQ,IAAI,EACZ;AAAA,MACC,0FAA0F,IAAI;AAAA,IAChG;AAAA,IACF,MAAM,EAAE,QAAQ,IAAI,EAAE,SAAS,yCAAyC,IAAI,WAAW;AAAA,IACvF,MAAM,KAAK,SAAS,8BAA8B,IAAI,UAAU;AAAA,EAClE,CAAC;AACH;AAEA,IAAM,gBAAgB,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,GAAG,EAAE,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;AAE7E,SAAS,oBAA4C,WAAc;AACjE,SAAO,EACJ,OAAO;AAAA,IACN,MAAM,EAAE,OAAO,EAAE,SAAS,UAAU;AAAA,IACpC,OAAO,UAAU,SAAS,UAAU,eAAe,WAAW;AAAA,EAChE,CAAC,EACA,SAAS,oBAAoB;AAClC;AAEO,IAAM,4BAA4B,EACtC,OAAO;AAAA,EACN,gBAAgB,EAAE,OAAO,EAAE,SAAS,iCAAiC;AACvE,CAAC,EACA,SAAS,gEAAgE;AAErE,IAAM,mBAAmB,EAC7B,OAAO;AAAA,EACN,OAAO,EAAE,OAAO,EAAE,SAAS,sCAAsC;AACnE,CAAC,EACA,SAAS,0BAA0B;AAEtC,SAAS,eAAuC,WAAc;AAC5D,SAAO,EAAE,MAAM,CAAC,WAAW,2BAA2B,gBAAgB,CAAC;AACzE;AAEA,IAAM,2BAA2B,EAC9B,OAAO;AAAA,EACN,sBAAsB,EAAE,OAAO,EAAE,SAAS,0BAA0B;AACtE,CAAC,EACA,SAAS,uEAAuE;AAEnF,IAAM,yBAAyB,EAC5B,OAAO;AAAA,EACN,oBAAoB,EAAE,OAAO;AAAA,IAC3B,MAAM,EAAE,OAAO,EAAE,SAAS,qCAAqC;AAAA,IAC/D,YAAY,EACT,OAAO,eAAe,EAAE,IAAI,CAAC,CAAC,EAC9B,SAAS,iDAAiD;AAAA,EAC/D,CAAC;AACH,CAAC,EACA;AAAA,EACC;AACF;AAIF,IAAM,kBAAkB,EAAE,MAAM;AAAA,EAC9B,EAAE,QAAQ,OAAO,EAAE,SAAS,yCAAyC;AAAA,EACrE,EAAE,QAAQ,UAAU,EAAE,SAAS,6BAA6B;AAC9D,CAAC;AAED,IAAM,4BAA4B,oBAAoB,EAAE,OAAO,CAAC,EAAE;AAAA,EAChE;AACF;AAEA,IAAM,gBAAgB,EAAE,OAAO;AAAA,EAC7B,MAAM,EAAE,QAAQ,KAAK;AAAA,EACrB,SAAS,eAAe,EAAE,OAAO,CAAC;AAAA,EAClC,aAAa,EAAE,OAAO;AACxB,CAAC;AAED,IAAM,gCAAgC,oBAAoB,eAAe,EAAE,OAAO,CAAC,CAAC,EAAE;AAAA,EACpF;AACF;AAEA,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACpC,MAAM,EAAE,QAAQ,YAAY;AAAA,EAC5B,SAAS,EAAE,MAAM,6BAA6B;AAChD,CAAC;AAED,IAAM,kBAAkB,EAAE,mBAAmB,QAAQ,CAAC,eAAe,oBAAoB,CAAC;AAI1F,IAAM,wBAAwB,EAC3B,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,KAAK;AACvB,CAAC,EACA,SAAS,mCAAmC;AAE/C,IAAM,yBAAyB,EAC5B,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,MAAM;AACxB,CAAC,EACA,SAAS,sCAAsC;AAElD,IAAM,wBAAwB,EAC3B,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,KAAK;AAAA,EACrB,SAAS,EAAE,QAAQ,EAAE,SAAS,4BAA4B;AAC5D,CAAC,EACA,SAAS,qCAAqC;AAEjD,IAAM,wBAAwB,EAC3B,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,KAAK;AACvB,CAAC,EACA,SAAS,qCAAqC;AAEjD,IAAM,qBAAqB,EACxB,mBAAmB,QAAQ;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,EACA,SAAS,0DAA0D;AAItE,IAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,MAAM,EAAE,QAAQ,MAAM,EAAE,SAAS,0CAA0C;AAAA,EAC3E,KAAK,eAAe,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,EAC5E,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,qBAAqB;AAAA,EAC5D,SAAS,EAAE,MAAM,6BAA6B,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAAA,EAC5F,cAAc,EACX,MAAM,6BAA6B,EACnC,SAAS,EACT,SAAS,6BAA6B;AAAA,EACzC,MAAM,gBAAgB,SAAS,EAAE,SAAS,mBAAmB;AAAA,EAC7D,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,2CAA2C;AAAA,EAC7F,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,6CAA6C;AAAA,EACvF,UAAU,mBAAmB,SAAS,EAAE,SAAS,4BAA4B;AAC/E,CAAC;AAID,IAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,MAAM,EAAE,QAAQ,OAAO,EAAE,SAAS,mDAAmD;AAAA,EACrF,UAAU,EACP,OAAO,EACP,SAAS,EACT,SAAS,2DAA2D;AACzE,CAAC;AAID,IAAM,oBAAoB,EAAE,mBAAmB,QAAQ;AAAA,EACrD;AAAA,EACA;AACF,CAAC;AAID,IAAM,cAAc,EAAE,OAAO;AAAA,EAC3B,MAAM,EAAE,OAAO,EAAE,SAAS,sBAAsB;AAAA,EAChD,SAAS,eAAe,EAAE,QAAQ,CAAC,EAChC,SAAS,EACT;AAAA,IACC;AAAA,EACF;AAAA,EACF,YAAY,EACT,MAAM,oBAAoB,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,EAClD,SAAS,EACT,SAAS,mCAAmC;AAAA,EAC/C,MAAM,gBAAgB,SAAS,EAAE,SAAS,0BAA0B;AAAA,EACpE,OAAO,kBAAkB,SAAS,EAAE,SAAS,kBAAkB;AAAA,EAC/D,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uCAAuC;AAAA,EACjF,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,EAC7E,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iCAAiC;AAAA,EACjF,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iCAAiC;AAC7E,CAAC;AAQD,IAAI;AAEJ,IAAM,iBAAsC,EACzC,OAAO;AAAA,EACN,YAAY,EACT,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC,EACjC,SAAS,oEAAoE;AAClF,CAAC,EACA,SAAS,qEAAqE;AAEjF,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACjC,WAAW,EAAE,OAAO,EAAE,SAAS,+CAA+C;AAAA,EAC9E,MAAM,EACH,OAAO,EACP,SAAS,2EAA2E;AAAA,EACvF,QAAQ,EACL,OAAO;AAAA,IACN,iBAAiB,EACd,OAAO,EACP,SAAS,EACT,SAAS,iDAAiD;AAAA,IAC7D,eAAe,EACZ,OAAO,EACP,SAAS,EACT,SAAS,+CAA+C;AAAA,IAC3D,YAAY,EACT,OAAO,EACP,SAAS,EACT,SAAS,6EAA6E;AAAA,EAC3F,CAAC,EACA,SAAS,EACT,SAAS,qCAAqC;AACnD,CAAC;AAIM,IAAM,qBAAgC,EAAE;AAAA,EAAK,MAClD,EAAE,MAAM;AAAA,IACN,GAAG,cAAc;AAAA,IACjB,EAAE,MAAM,kBAAkB;AAAA,IAC1B,EAAE;AAAA,MACA,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,WAAW,IAAI,CAAC;AAAA,MAChD;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AASA,gBAAgB,kBACb,OAAO;AAAA,EACN,UAAU,EACP,KAAK,MAAM,EAAE,MAAM,aAAa,EAAE,SAAS,CAAC,EAC5C,SAAS,+BAA+B;AAAA,EAC3C,OAAO,EACJ,KAAK,MAAM,EAAE,OAAO,kBAAkB,EAAE,SAAS,CAAC,EAClD,SAAS,6DAA6D;AAC3E,CAAC,EACA,SAAS,sEAAsE;AAE3E,IAAM,aAAa;AAAA,EACxB;AAAA,EACA,EAAE,OAAO;AAAA,IACP,IAAI,EAAE,OAAO,EAAE,SAAS,uCAAuC;AAAA,IAC/D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,IAC5D,YAAY,EACT,MAAM,yBAAyB,EAC/B,SAAS,EACT,SAAS,2EAA2E;AAAA,IACvF,SAAS,EACN,MAAM,WAAW,EACjB,SAAS,EACT,SAAS,8EAA8E;AAAA,IAC1F,SAAS,EACN,MAAM,aAAa,EACnB,SAAS,EACT,SAAS,+CAA+C;AAAA,IAC3D,SAAS,EACN,MAAM;AAAA,MACL,EACG,QAAQ,YAAY,EACpB,SAAS,kEAAkE;AAAA,MAC9E,EAAE,QAAQ,OAAO,EAAE,SAAS,qCAAqC;AAAA,IACnE,CAAC,EACA,SAAS,EACT;AAAA,MACC;AAAA,IACF;AAAA,EACJ,CAAC;AACH;AAEA,IAAM,kCAAwE,EAAE,OAAO;AAAA,EACrF,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,cAAc,EAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAED,IAAM,qBAA8C,EACjD,OAAO;AAAA;AAAA,EAEN,SAAS,EACN,OAAO;AAAA,IACN,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,SAAS;AAAA,IAChE,SAAS,gCAAgC,SAAS;AAAA,IAClD,WAAW,gCAAgC,SAAS;AAAA,EACtD,CAAC,EACA,YAAY;AACjB,CAAC,EACA,YAAY;AAIR,IAAM,cAAc;AAAA,EACzB;AAAA,EACA,EAAE,OAAO;AAAA,IACP,SAAS,mBACN,SAAS,EACT,SAAS,wEAAwE;AAAA,EACtF,CAAC;AACH;;;AFzRO,SAAS,uBAAuB,QAAgB,QAAwB;AAC7E,MAAI,WAAW,QAAQ;AACrB,WAAO;AAAA,EACT;AACA,SAAO,SAAS,SAAS,IAAI;AAC/B;AA4LA,SAAS,OAA6B,MAAkB,MAA4B;AAClF,SAAO,KAAK,SAAS;AACvB;AAEA,SAAS,aAAmC,MAAkB,MAAoC;AAChG,YAAU,OAAO,MAAM,IAAI,GAAG,uBAAuB,IAAI,cAAc,KAAK,IAAI,GAAG;AACrF;AAoBO,SAAS,aACd,KACA,QACA,MACmB;AACnB,QAAM,OAAO,IAAI,MAAM,MAAM;AAC7B,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,MAAI,MAAM;AACR,iBAAa,MAAM,IAAI;AAAA,EACzB;AACA,SAAO;AACT;AAYO,SAAS,QACd,KACA,QACA,MACY;AACZ,QAAM,OAAO,aAAa,KAAK,QAAQ,IAAI;AAC3C,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,SAAS,MAAM,aAAa;AAAA,EAC9C;AACA,SAAO;AACT;AAMO,SAAS,YAAY,MAA2C;AACrE,eAAsB,MAAM,KAAK;AACnC;AAEO,SAAS,OAAO,MAAoC;AACzD,SAAO,OAAiB,MAAM,MAAM;AACtC;AA8BO,SAAS,UAAa,MAA0C;AACrE,SAAO,OAAoB,MAAM,SAAS;AAC5C;AAEO,SAAS,gBAAmB,MAAkD;AACnF,eAA0B,MAAM,SAAS;AAC3C;AAEO,SAAS,QAAW,MAAwC;AACjE,SAAO,OAAkB,MAAM,OAAO;AACxC;AAMO,SAAS,WAAc,MAA2C;AACvE,SAAO,OAAqB,MAAM,UAAU;AAC9C;AAMO,SAAS,QAAQ,KAAyB;AAC/C,SAAO,QAAQ,KAAK,IAAI,IAAI;AAC9B;AAEO,SAAS,OAAO,KAAsB;AAC3C,QAAM,MAAM,QAAQ,GAAG;AACvB,cAAY,GAAG;AACf,SAAO;AACT;AAKA,IAAM,eAAe,oBAAI,QAAgD;AAClE,SAAS,cAAoC,KAAa,QAA4B;AAC3F,MAAI,kBAAkB,aAAa,IAAI,GAAG;AAC1C,MAAI,CAAC,iBAAiB;AACpB,sBAAkB,oBAAI,IAAI;AAC1B,iBAAa,IAAI,KAAK,eAAe;AAAA,EACvC;AAEA,MAAI,SAAS,gBAAgB,IAAI,OAAO,EAAE;AAC1C,MAAI,CAAC,QAAQ;AACX,aAAS,CAAC;AACV,oBAAgB,IAAI,OAAO,IAAI,MAAM;AAErC,UAAM,kBAAgC,OAAO,OAAO,IAAI,KAAK,EAAE;AAAA,MAC7D,CAAC,SAAqB,KAAK,aAAa,OAAO;AAAA,IACjD;AAEA,eAAW,SAAS,iBAAiB;AACnC,YAAM,OAAO,MAAM,cAAc;AACjC,UAAI,WAAW,OAAO,IAAI;AAC1B,UAAI,CAAC,UAAU;AACb,mBAAW,CAAC;AACZ,eAAO,IAAI,IAAI;AAAA,MACjB;AACA,eAAS,KAAK,KAAK;AAAA,IACrB;AAEA,eAAW,cAAc,OAAO,OAAO,MAAM,GAAG;AAC9C,kBAAY,KAAK,CAAC,OAAmB,UAAsB;AACzD;AAAA,UACE,MAAM,eAAe,MAAM;AAAA,UAC3B;AAAA,QACF;AACA,eAAO,uBAAuB,MAAM,aAAa,MAAM,WAAW;AAAA,MACpE,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AA4nBA,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAYA,IAAM,gBAAgB,IAAI,IAAY,gBAAgB;;;AGzhC/C,SAAS,eAAkB,SAA4C;AAC5E,MAAK,QAAkC,gBAAgB;AACrD,WAAO;AAAA,EACT;AACA,MAAK,QAAyB,OAAO;AACnC,WAAO;AAAA,EACT;AACA,MAAK,QAA+B,sBAAsB;AACxD,WAAO;AAAA,EACT;AACA,MAAK,QAA6B,oBAAoB;AACpD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,gBAAmB,SAM7B;AACJ,MAAK,QAAkC,gBAAgB;AACrD,WAAQ,QAAkC;AAAA,EAC5C;AACA,MAAK,QAAyB,OAAO;AACnC,WAAQ,QAAyB;AAAA,EACnC;AACA,MAAK,QAA+B,sBAAsB;AACxD,WAAQ,QAA+B;AAAA,EACzC;AACA,MAAK,QAA6B,oBAAoB;AACpD,WAAQ,QAA6B;AAAA,EACvC;AACA,SAAO;AACT;;;ACpCO,IAAM,wBAAwB;AAC9B,IAAM,2BAA2B;AACjC,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAE1B,IAAM,sBAAsB,oBAAI,IAAwC;AAAA,EAC7E,CAAC,uBAAuB,EAAE,aAAa,OAAO,SAAS,WAAW,QAAQ,KAAK,CAAC;AAAA,EAChF,CAAC,0BAA0B,EAAE,aAAa,UAAU,SAAS,cAAc,QAAQ,KAAK,CAAC;AAAA,EACzF,CAAC,oBAAoB,EAAE,aAAa,SAAS,SAAS,SAAS,QAAQ,KAAK,CAAC;AAAA,EAC7E;AAAA,IACE;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,CAAC,SAAS,EAAE,aAAa,SAAS,SAAS,QAAQ,CAAC;AAAA,EACpD,CAAC,YAAY,EAAE,aAAa,aAAa,SAAS,WAAW,CAAC;AAAA,EAC9D,CAAC,aAAa,EAAE,aAAa,cAAc,SAAS,YAAY,CAAC;AAAA,EACjE,CAAC,cAAc,EAAE,aAAa,eAAe,SAAS,aAAa,CAAC;AAAA,EACpE,CAAC,cAAc,EAAE,aAAa,eAAe,SAAS,aAAa,CAAC;AAAA,EACpE,CAAC,QAAQ,EAAE,aAAa,QAAQ,SAAS,OAAO,CAAC;AAAA,EACjD,CAAC,UAAU,EAAE,aAAa,UAAU,SAAS,SAAS,CAAC;AAAA,EACvD,CAAC,QAAQ,EAAE,aAAa,QAAQ,SAAS,OAAO,CAAC;AAAA,EACjD,CAAC,SAAS,EAAE,aAAa,SAAS,SAAS,QAAQ,CAAC;AAAA,EACpD,CAAC,QAAQ,EAAE,aAAa,QAAQ,SAAS,OAAO,CAAC;AAAA,EACjD,CAAC,aAAa,EAAE,aAAa,aAAa,SAAS,YAAY,CAAC;AAAA,EAChE,CAAC,mBAAmB,EAAE,aAAa,QAAQ,SAAS,OAAO,CAAC;AAC9D,CAAC;AA6BM,SAAS,0BAA0B,aAAyC;AACjF,SAAO,YAAY,WAAW;AAChC;AAEO,SAAS,UAAU,aAA0C;AAClE,SAAO,0BAA0B,WAAW,MAAM;AACpD;AAEO,SAAS,aAAa,aAA0C;AACrE,SAAO,0BAA0B,WAAW,MAAM;AACpD;AAEO,SAAS,sBAAsB,aAA0C;AAC9E,SAAO,UAAU,WAAW,KAAK,aAAa,WAAW;AAC3D;;;AC9FA,YAAYC,YAAW;AACvB,SAAS,aAAoB,qBAAmC;AAChE,SAAS,iBAAiB;AAa1B,SAAS,+BAA+B,eAA6B,CAAC,GAAU;AAC9E,SAAO;AAAA,IACL;AAAA,MACE;AAAA,QACE,YAAY;AAAA,UACV,IAAI;AAAA,YACF,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,UAEA,IAAI;AAAA,YACF,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,UAEA,IAAI;AAAA,YACF,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,UAEA,IAAI;AAAA,YACF,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,UAEA,IAAI;AAAA,YACF,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,UAEA,IAAI;AAAA,YACF,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,QACF;AAAA,QACA,sBAAsB;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB,KAA2B;AAC/D,QAAM,OAAc,OAAO,GAAG;AAC9B,QAAM,EAAE,SAAS,CAAC,EAAE,IAAW,cAAc,KAAK,IAAI;AACtD,QAAM,YAAY,OAAO,SAAS,IAAI,OAAO,CAAC,IAAI;AAClD,QAAM,eAAe,WAAW;AAChC,SAAO,+BAA+B,YAAY;AACpD;AAOe,SAAR,iBAAkC,EAAE,KAAK,SAAS,GAAuB;AAC9E,QAAM,QAAc,eAAQ,MAAM,sBAAsB,GAAG,GAAG,CAAC,GAAG,CAAC;AACnE,SAAO,qCAAC,iBAAc,SAAe,QAAS;AAChD;;;ACxEA,SAAS,WAAW;AACpB,SAAS,aAAAC,kBAAiB;AAsC1B,SAAS,kBACP,MACA,KACA,UAAU,oBAAI,IAAY,CAAC,GAAG,CAAC,GAClB;AACb,QAAM,UAAU,KAAK,IAAI,GAAG,KAAK,oBAAI,IAAI;AACzC,QAAM,SAAS,IAAI,IAAI,OAAO;AAC9B,aAAW,UAAU,SAAS;AAC5B,QAAI,CAAC,QAAQ,IAAI,MAAM,GAAG;AACxB,YAAM,OAAO,kBAAkB,MAAM,QAAQ,oBAAI,IAAI,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC;AAC1E,iBAAW,WAAW,MAAM;AAC1B,eAAO,IAAI,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAkC;AAC7D,QAAM,SAAuB,oBAAI,IAAI;AACrC,aAAW,OAAO,KAAK,KAAK,GAAG;AAC7B,WAAO,IAAI,KAAK,kBAAkB,MAAM,GAAG,CAAC;AAAA,EAC9C;AACA,SAAO;AACT;AAEA,SAAS,YACP,kBACA,SACA,WACmB;AACnB,QAAM,SAAS,QAAQ,SAAS;AAChC,MAAI,OAAO,OAAO;AAChB,WAAO,OAAO;AAAA,EAChB;AACA,QAAM,OAAO,iBAAiB,IAAI,SAAS,KAAK,oBAAI,IAAI;AACxD,aAAW,OAAO,MAAM;AACtB,UAAM,YAAY,QAAQ,GAAG;AAC7B,QAAI,UAAU,OAAO;AACnB,aAAO,UAAU;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,cACP,kBACA,SACA,WACS;AACT,QAAM,SAAS,QAAQ,SAAS;AAChC,MAAI,OAAO,SAAS;AAClB,WAAO;AAAA,EACT;AACA,QAAM,OAAO,iBAAiB,IAAI,SAAS,KAAK,oBAAI,IAAI;AACxD,aAAW,OAAO,MAAM;AACtB,UAAM,YAAY,QAAQ,GAAG;AAC7B,QAAI,UAAU,SAAS;AACrB,aAAO,UAAU;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,iBACd,MACA,UACyB;AACzB,QAAM,cAAc,EAAE,GAAG,KAAK;AAC9B,aAAW,WAAW,OAAO,OAAO,QAAQ,GAAG;AAC7C,QAAI,QAAQ,WAAW;AACrB,YAAM,QAAQ,QAAQ,QAAQ;AAC9B,UAAI,aAAa,QAAQ,WAAW,KAAK;AAAA,IAC3C;AAAA,EACF;AACA,SAAO;AACT;AAKe,SAAR,eACL,WACA,UACA,aACkC;AAClC,QAAM,cAAc,IAAI,IAAI,OAAO,QAAQ,QAAQ,CAAC;AAEpD,QAAM,eAAe,oBAAI,IAAoB;AAC7C,aAAW,CAAC,WAAW,OAAO,KAAK,aAAa;AAC9C,QAAI,QAAQ,WAAW;AACrB,mBAAa,IAAI,QAAQ,WAAW,SAAS;AAAA,IAC/C;AAAA,EACF;AAEA,QAAM,sBAAsB,oBAAI,IAAwD;AACxF,MAAI;AACJ,QAAM,eAA6B,oBAAI,IAAI;AAE3C,MAAI;AAEJ,QAAM,kBAAkB,CACtB,WACA,cACmC;AACnC,UAAM,UAAU,aAAa,YAAY,IAAI,SAAS;AAEtD,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AAEA,QAAI,sBAAsB;AACxB,UAAI,sBAAsB,aAAa,IAAI,oBAAoB;AAC/D,UAAI,CAAC,qBAAqB;AACxB,8BAAsB,oBAAI,IAAY;AACtC,qBAAa,IAAI,sBAAsB,mBAAmB;AAAA,MAC5D;AACA,0BAAoB,IAAI,SAAS;AAAA,IACnC;AAEA,UAAM,aAAa,QAAQ;AAE3B,QAAI,YAAY;AACd,YAAM,WAAW,oBAAoB,IAAI,UAAU;AACnD,UAAI,UAAU;AACZ,YAAI,SAAS,QAAQ;AAEnB,iBAAO,SAAS;AAAA,QAClB;AAEA,cAAM,IAAI,MAAM,mBAAmB,SAAS,GAAG;AAAA,MACjD;AAGA,0BAAoB,IAAI,YAAY,EAAE,QAAQ,KAAK,CAAC;AACpD,YAAM,cAAc;AACpB,6BAAuB;AACvB,YAAM,SAAS,UAAU,mBAAmB,YAAY,YAAY;AACpE,6BAAuB;AACvB,0BAAoB,IAAI,YAAY,EAAE,OAAO,CAAC;AAE9C,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,QAAQ;AAClB,UAAI,QAAQ,cAAc;AACxB,qBAAa,IAAI,WAAW,IAAI,IAAI,QAAQ,YAAY,CAAC;AAAA,MAC3D;AAEA,aAAO,QAAQ;AAAA,IACjB;AAEA,UAAM,cAAc,QAAQ;AAC5B,QAAI,aAAa;AACf,YAAM,SAAS,gBAAgB,aAAa,SAAS;AACrD,UAAI,QAAQ;AACV,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,CAAC,KAA8B,UAC7C,IAAI,MAAM,KAAK;AAAA,IACb,IAAI,QAAQ,MAAM,UAAU;AAC1B,UAAI,OAAO,SAAS,UAAU;AAC5B,eAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,MAC3C;AAEA,YAAM,YAAY,QAAQ,GAAG,KAAK,IAAI,IAAI,KAAK;AAC/C,YAAM,YAAY,aAAa,IAAI,SAAS;AAE5C,UAAI,WAAW;AACb,cAAM,YAAY,gBAAgB,WAAW,SAAS;AACtD,YAAI,WAAW;AACb,iBAAO,UAAU;AAAA,QACnB;AAAA,MACF;AAEA,YAAM,SAAS,OAAO,IAAI;AAE1B,UAAI,UAAU,OAAO,WAAW,UAAU;AACxC,eAAO,QAAQ,QAAmC,SAAS;AAAA,MAC7D;AAEA,aAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,IAC3C;AAAA,EACF,CAAC;AAEH,QAAM,QAAQ,iBAAiB,aAAa,QAAQ;AACpD,iBAAe,QAAQ,KAAK;AAE5B,QAAM,UAAUC,WAAU,UAAU,CAAC,SAAS,cAAc;AAC1D,WAAO,gBAAgB,SAAS,KAAK,EAAE,OAAO,OAAU;AAAA,EAC1D,CAAC;AAED,QAAM,mBAAmB,oBAAoB,YAAY;AAEzD,SAAOA,WAAU,UAAU,CAAC,SAAS,cAAc;AACjD,UAAM,EAAE,UAAU,IAAI;AAEtB,QAAI,gBAAgB,QAAQ,SAAS;AAErC,UAAM,sBAAsB,CAAC,OAAgB,oBAA4B;AACvE,UAAI,SAAS,OAAO,UAAU,UAAU;AACtC,mBAAW,kBAAkB,OAAO,KAAK,KAAK,GAAG;AAC/C,gBAAM,kBAAkB,GAAG,eAAe,GACxC,MAAM,QAAQ,KAAK,IAAI,IAAI,cAAc,MAAM,IAAI,cAAc,EACnE;AAEA,gBAAM,2BAA2B,QAAQ,eAAe,GAAG;AAC3D,cAAI,0BAA0B;AAC5B,4BAAgB;AAAA,cACd;AAAA,cACA,SAAS,gBAAgB,QAAQ,WAAW,EAAE,CAAC;AAAA,cAC/C;AAAA,YACF;AAAA,UACF,OAAO;AACL;AAAA,cACG,MAAkC,cAAc;AAAA,cACjD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,cAAc,OAAO;AACvB,0BAAoB,cAAc,OAAO,SAAS;AAAA,IACpD;AAEA,WAAO;AAAA,MACL;AAAA,MACA,cAAc,MAAM,KAAK,iBAAiB,IAAI,SAAS,KAAK,CAAC,CAAC;AAAA,MAC9D,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,OAAO,YAAY,kBAAkB,SAAS,SAAS;AAAA,QACvD,SAAS,cAAc,kBAAkB,SAAS,SAAS;AAAA,MAC7D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC1RO,IAAM,yBAAyB;AAE/B,IAAM,6BAA6B,CAAC,aAAa;;;ACKjD,IAAM,oBAGT;AAAA,EACF,iBAAiB;AAAA,IACf,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,MAAM,CAAC,SAAS,UAAU,OAAO,iBAAiB,gBAAgB,cAAc;AAAA,IAChF,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS,EAAE,MAAM,kBAAkB;AAAA,EACrC;AAAA,EACA,eAAe;AAAA,IACb,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,MAAM,CAAC,SAAS,UAAU,OAAO,iBAAiB,gBAAgB,cAAc;AAAA,IAChF,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS,EAAE,MAAM,gBAAgB;AAAA,EACnC;AACF;;;ACxBA,YAAYC,YAAW;AACvB,SAAS,gBAAiC;AAW1C,eAAsB,oBAAoB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8B;AAC5B,QAAM,UAAU,IAAI,IAAI,GAAG,QAAQ,IAAI,QAAQ,cAAc,OAAO,SAAS,IAAI;AACjF,QAAM,MAAM,IAAI;AAAA,IACd,KAAK,mBAAmB,QAAQ,CAAC,IAAI,mBAAmB,SAAS,CAAC;AAAA,IAClE;AAAA,EACF;AAEA,QAAM,MAAM,MAAM,MAAM,OAAO,GAAG,GAAG;AAAA,IACnC,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,MAAM;AAAA,IAC3B,SAAS,CAAC,CAAC,gBAAgB,kBAAkB,CAAC;AAAA,IAC9C;AAAA,EACF,CAAC;AAED,MAAI,CAAC,IAAI,IAAI;AACX,UAAM,IAAI,MAAM,QAAQ,IAAI,MAAM,oBAAoB,GAAG,GAAG;AAAA,EAC9D;AAEA,SAAO,IAAI,KAAK;AAClB;AAmBA,IAAM,cAAqB,CAAC;AAC5B,IAAM,eAAoB,CAAC;AAEpB,SAAS,aACd,MACA,MACA,QACA;AAAA,EACE,UAAU;AAAA,EACV,GAAGC;AACL,GACU;AACV,QAAM,EAAE,WAAW,IAAU,kBAAW,kBAAkB;AAC1D,QAAM,YAAY,KAAK;AACvB,QAAM,WAAW,KAAK;AAGtB,QAAM,WAA+B,aAAa,WAAW,KAAK,EAAE,IAAI;AACxE,QAAM,0BAAmC,aAAa,CAAC,CAAC,WAAW,KAAK,EAAE,IAAI;AAE9E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,MAAM,eAAe;AAAA,IACrB;AAAA,EACF,IAAI;AAAA,IACF,CAAC,UAAU,UAAU,WAAW,MAAM;AAAA,IACtC,CAAC,EAAE,OAAO,MAAM,oBAAoB,EAAE,QAAQ,UAAU,WAAW,OAAO,CAAC;AAAA,IAC3E;AAAA,MACE,GAAGA;AAAA,MACH,SAAS,2BAA2B;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,EAAE,MAAM,OAAO,SAAS,IAAI;AAElC,QAAM,QAAQ,YAAY;AAE1B,QAAM,OAAO,MAAM,QAAQ,IAAI,IAAI,OAAO;AAE1C,QAAM,SAAyB;AAAA,IAC7B,OAAO;AAAA,MACL,WAAW,aAAa;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,YAAY;AACjB,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAChE;AAAA,MACA,MAAM,YAAY;AAChB,cAAM,IAAI,MAAM,6CAA6C;AAAA,MAC/D;AAAA,IACF;AAAA,IACA,CAAC,WAAW,SAAS,YAAY,OAAO,MAAM,MAAM,OAAO;AAAA,EAC7D;AAEA,SAAO;AACT;;;ACtHA,YAAYC,YAAW;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,aAAa,SAAS,YAAY;AAG3C,IAAM,eAAe;AAON,SAAR,cAA+B,EAAE,OAAO,UAAU,MAAM,GAAuB;AACpF,QAAM,WAAW,YAAY;AAC7B,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,OAAO,QAAQ,EAAE;AAEvB,QAAM,iBAAiB,SAAS,SAAS,QAAQ,MAAM,EAAE;AAEzD,QAAM,qBAA2B,aAAM;AAEvC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,MAAI;AAAA,MACJ,IAAI;AAAA,QACF,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,CAAC,oBAAoB,GAAG,EAAE,OAAO,cAAc,WAAW,aAAa;AAAA,MACzE;AAAA;AAAA,IAEC,UAAU,qCAAC,WAAQ,SAAQ,SAAQ,IAAK;AAAA,IACzC,qCAAC,WACC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,WACE,qCAAC,iBAAc,IAAI,oBAAoB,IAAI,EAAE,IAAI,EAAE,KAAG,OAEtD;AAAA,QAEF,mBAAiB;AAAA;AAAA,MAEhB,MAAM,IAAI,CAAC,SACV,qCAAC,YAAS,KAAK,KAAK,IAAI,gBAAc,QACpC;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,IAAI,SAAS,KAAK,EAAE,GAAG,MAAM;AAAA,UAC7B,UAAU,mBAAmB,UAAU,KAAK,EAAE;AAAA;AAAA,QAE9C,qCAAC,gBAAa,SAAS,KAAK,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG;AAAA,MACnD,CACF,CACD;AAAA,IACH,CACF;AAAA,EACF;AAEJ;;;ACnEA,YAAYC,aAAW;AACvB,SAAS,OAAO,UAAAC,SAAQ,kBAAkB;AAC1C,OAAO,cAAc;;;ACFrB,YAAYC,aAAW;AACvB,SAAS,QAAQ,OAAAC,MAAK,WAAAC,UAAS,WAAAC,UAAS,QAAAC,OAAM,QAAAC,OAAM,gBAAgB;;;ACDpE,YAAYC,YAAW;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA,gBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAC;AAAA,OACK;AACP,OAAO,sBAAsB;AAC7B,OAAO,mBAAmB;AAC1B,OAAOC,gBAAe;;;AClBtB,YAAYC,YAAW;AAKR,SAAR,UAA2B;AAChC,QAAM,WAAiB,aAAM;AAC7B,QAAM,SAAe,aAAM;AAE3B,QAAM,CAAC,UAAU,WAAW,IAAU,gBAA6B,IAAI;AACvE,QAAM,OAAO,QAAQ,QAAQ;AAE7B,QAAM,cAAoB,mBAAY,CAAC,UAAgB;AACrD,WAAO,kBAAkB;AACzB,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,CAAC;AAEL,QAAM,cAAoB;AAAA,IACxB,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,iBAAiB,OAAO,SAAS;AAAA,MACjC,iBAAiB;AAAA,MACjB,iBAAiB,OAAO,SAAS;AAAA,MACjC,QAAQ,OAA4C;AAClD,cAAM,gBAAgB;AACtB,oBAAY,MAAM,aAAa;AAAA,MACjC;AAAA,IACF;AAAA,IACA,CAAC,UAAU,QAAQ,IAAI;AAAA,EACzB;AAEA,QAAM,YAAkB;AAAA,IACtB,OAAO;AAAA,MACL,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,eAAe;AAAA,QACb,mBAAmB;AAAA,MACrB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU,QAAQ,aAAa,IAAI;AAAA,EAChD;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC5CO,IAAM,oBAAoB;AAC1B,IAAM,uBAAuB;AAC7B,IAAM,qBAAqB;AAG3B,IAAM,oBAAoB;AAe1B,IAAM,wBAAwB;AAI9B,IAAM,yBAAyB,MAAO,KAAK;;;AC9BlD,OAAOC,gBAAe;AACtB;AAAA,EACE;AAAA,EACA;AAAA,EAGA,YAAAC;AAAA,OAGK;;;ACTP,SAAS,SAAS,sBAAsB;AAGxC,SAAS,cAAc,UAAkB,MAAiD;AACxF,SAAO,IAAI;AAAA,IACT,CAAC;AAAA,IACD;AAAA,MACE,IAAI,QAAQ,MAAM;AAChB,eAAO,UAAU,WAAkB;AACjC,gBAAM,OAAmB;AAAA,YACvB;AAAA,YACA,MAAM;AAAA,YACN;AAAA,UACF;AACA,gBAAM,MAAM,MAAM,MAAM,UAAU;AAAA,YAChC,QAAQ;AAAA,YACR,SAAS;AAAA,cACP,gBAAgB;AAAA,YAClB;AAAA,YACA,MAAM,KAAK,UAAU,IAAI;AAAA,UAC3B,CAAC;AAED,cAAI,IAAI,IAAI;AACV,kBAAM,WAAY,MAAM,IAAI,KAAK;AACjC,gBAAI,SAAS,OAAO;AAClB,oBAAM,eAAe,IAAI,MAAM,SAAS,MAAM,SAAS;AAAA,gBACrD,OAAO,SAAS;AAAA,cAClB,CAAC;AACD,kBAAI,SAAS,MAAM,MAAM;AACvB,6BAAa,OAAO,SAAS,MAAM;AAAA,cACrC;AACA,oBAAM;AAAA,YACR;AACA,mBAAO,eAAe,SAAS,MAAM;AAAA,UACvC;AAEA,gBAAM,IAAI,MAAM,QAAQ,IAAI,MAAM,EAAE;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAOO,SAAS,gBAA0C,UAAgC;AACxF,QAAM,QAAQ,cAAc,UAAU,OAAO;AAC7C,QAAM,WAAW,cAAc,UAAU,UAAU;AACnD,SAAO,EAAE,OAAO,SAAS;AAC3B;;;ADvCO,IAAM,cAAc,IAAI,YAAY;AAAA,EACzC,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,WAAW;AAAA,MACT,aAAa;AAAA,IACf;AAAA,EACF;AACF,CAAC;AA2CD,SAAS,aAAuC,UAAgC;AAC9E,QAAM,EAAE,OAAO,SAAS,IAAI,gBAAmB,QAAQ;AAEvD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU,CAAC,KAAK,QAAQC,aAAY;AAClC,aAAOC,UAAS;AAAA,QACd,GAAGD;AAAA,QACH,SAAS,CAAC,CAAC,UAAUA,UAAS,YAAY;AAAA,QAC1C,UAAU,CAAC,KAAK,MAAM;AAAA,QACtB,SAAS,MAAM;AACb,UAAAE,WAAU,QAAQ,sDAAsD;AACxE,iBAAO,MAAM,GAAG,EAAE,GAAG,MAAM;AAAA,QAC7B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,aAAa,CAAC,KAAKF,aAAY,YAAY,CAAC,WAAW,SAAS,GAAG,EAAE,GAAG,MAAM,GAAGA,QAAO;AAAA,IACxF,eAAe,KAAK,QAAS;AAC3B,aAAO,YAAY,eAAe,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC;AAAA,IAClE;AAAA,IACA,kBAAkB,KAAK,QAAS;AAC9B,aAAO,YAAY,kBAAkB,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC;AAAA,IACrE;AAAA,EACF;AACF;AAEA,IAAO,cAAQ,aAA+B,UAAU;;;AE3FxD,SAAS,WAAAG,gBAAe;;;AL+BxB,IAAM,iBACJ;AACF,IAAM,sBAAsB;AAM5B,SAAS,kBAAkB,EAAE,SAAS,GAAiB;AACrD,SACE;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,IAAI;AAAA,QACF,GAAG;AAAA,QACH,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,aAAa;AAAA,MACf;AAAA;AAAA,IAEC;AAAA,EACH;AAEJ;AAOA,SAAS,qBAAqB,EAAE,MAAM,SAAS,GAA8B;AAC3E,SACE,qCAAC,YAAS,WAAU,KAAI,QAAO,UAAS,QACtC,qCAACC,eAAA,MAAc,QAAS,GACxB,qCAAC,iBAAc,UAAS,WAAU,IAAI,EAAE,IAAI,GAAG,OAAO,iBAAiB,GAAG,CAC5E;AAEJ;AAEA,SAAS,oBAA4B;AACnC,UAAQ,QAAQ,IAAI,gBAAgB;AAAA,IAClC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,kBAAkB,gBAA+C;AACxE,QAAM,UAAU;AAChB,UAAQ,gBAAgB;AAAA,IACtB,KAAK;AACH,aAAO,YAAY,OAAO;AAAA,IAC5B,KAAK;AACH,aAAO,gBAAgB,OAAO;AAAA,IAChC;AACE,aAAO,eAAe,OAAO;AAAA,EACjC;AACF;AAEA,SAAS,eAAe;AACtB,QAAM,EAAE,aAAa,UAAU,IAAI,QAAQ;AAE3C,EAAAC,WAAU,QAAQ,IAAI,iBAAiB,iCAAiC;AACxE,EAAAA,WAAU,QAAQ,IAAI,eAAe,+BAA+B;AAEpE,QAAM,EAAE,MAAM,YAAY,IAAI,YAAO,SAAS,kBAAkB,CAAC,GAAG;AAAA,IAClE,WAAW;AAAA,EACb,CAAC;AAED,QAAM;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,EACX,IAAIC,SAAW,KAAK;AAEpB,QAAM,kBAAkB,CAAC,CAAC,aAAa;AAEvC,SACE,qCAAO,iBAAN,MACC,qCAAC,UAAO,MAAM,kBAAkB,SAAS,yBAAyB,UAAS,QACzE,qCAAC,mBAAY,gBAAc,GAC3B,qCAAC,qBACC,qCAAC,yBAAkB,8EAEjB,qCAAC,yBACE,kBAAkB,aAAa,kBAAkB,IAAI,CACxD,CACF,CACF,GACA,qCAAC,qBACC,qCAAC,UAAO,SAAS,yBAAyB,WAAS,QAAC,OAEpD,CACF,CACF,GACA,qCAAC,WAAQ,OAAM,wBACb,qCAAC,cAAY,GAAG,aAAa,OAAM,aACjC,qCAAC,sBAAiB,CACpB,CACF,GACA,qCAAC,QAAM,GAAG,aACR,qCAAC,wBAAqB,MAAM,qBAAmB,eAAa,GAC5D,qCAAC,wBAAqB,MAAM,kBAAgB,YAAU,GACtD,qCAAC,wBAAqB,MAAM,uBAAqB,2BAEjD,GACA,qCAAC,aAAQ,GACT,qCAAC,YAAS,UAAQ,QAAE,kBAAkB,CAAE,GAExC;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,MACT,IAAI,EAAE,gBAAgB,gBAAgB;AAAA;AAAA,IACvC;AAAA,IACU,QAAQ,IAAI;AAAA,IACpB,kBACC,qCAAC,QAAK,MAAK,SAAQ,OAAM,SAAQ,SAAQ,YAAW,OAAM,UAAS,WAAS,MAAC,IAC3E;AAAA,EACN,GACA,qCAAC,YAAS,UAAQ,QAAC,UAAO,QAAQ,IAAI,aAAc,CACtD,CACF;AAEJ;AAEA,IAAO,uBAAQ;;;AMlKf,YAAYC,YAAW;AACvB,SAAS,cAAAC,aAAY,QAAAC,OAAM,YAAAC,WAAU,gBAAAC,eAAc,cAAc,WAAAC,gBAAe;AAChF,OAAO,uBAAuB;AAC9B,OAAO,sBAAsB;AAC7B,OAAO,gCAAgC;AAevC,IAAM,UAA+C;AAAA,EACnD,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM,qCAAC,uBAAkB;AAAA,EAC3B;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM,qCAAC,sBAAiB;AAAA,EAC1B;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM,qCAAC,gCAA2B;AAAA,EACpC;AACF;AAEA,SAAS,cAAc,EAAE,MAAM,SAAS,GAAuB;AAC7D,QAAM,EAAE,aAAa,WAAW,YAAY,IAAI,QAAQ;AAExD,SACE,qCAAO,iBAAN,MACC,qCAACC,UAAA,EAAQ,OAAM,kBACb,qCAACC,aAAA,EAAY,GAAG,aAAa,cAAW,gBAAe,OAAM,aAC1D,QAAQ,IAAI,EAAE,IACjB,CACF,GAEA,qCAACC,OAAA,EAAM,GAAG,aACP,OAAO,OAAO,OAAO,EAAE,IAAI,CAAC,WAC3B;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAK,OAAO;AAAA,MACZ,UAAU,OAAO,UAAU;AAAA,MAC3B,SAAS,CAAC,UAAU;AAClB,iBAAS,OAAO,OAAO,KAAK;AAC5B,oBAAY;AAAA,MACd;AAAA;AAAA,IAEA,qCAAC,oBAAc,OAAO,IAAK;AAAA,IAC3B,qCAACC,eAAA,EAAa,SAAS,OAAO,OAAO;AAAA,EACvC,CACD,CACH,CACF;AAEJ;AAEA,IAAO,wBAAQ;;;ACnEf,YAAYC,YAAW;AACvB,SAAsB,yBAAyB;AAC/C,SAAS,iBAAiB,kBAAkB,eAAAC,oBAAmB;AAC/D,SAAS,aAAAC,kBAAiB;AAC1B,OAAO,mBAAmB;;;ACJ1B,OAAO,0BAA0B;AACjC,SAAS,sBAAsB;AAC/B,SAAS,eAAAC,cAAkC,aAAa;AAkDxD,IAAM,eAAeA,aAAY;AAEjC,IAAM,OAAO;AAAA,EACX,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AACA,IAAM,WAAW;AAAA,EACf,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AACA,IAAM,OAAO;AAAA,EACX,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,KAAK;AACP;AAGA,IAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,oBAAoB,CAAC,SAA2B;AAC3D,QAAM,aAAa;AAAA,IACjB,OAAO,KAAK,EAAE;AAAA,IACd,MAAM,SAAS,GAAG;AAAA,EACpB;AACA,SAAO,WAAW,IAAI;AACxB;AAEO,IAAM,kBAAkB,CAAC,UAC7B;AAAA,EACC,SAAS;AAAA,IACP,SAAS;AAAA,MACP,GAAG;AAAA,MACH,GAAI,SAAS,UAAU;AAAA,QACrB,MAAM,KAAK,GAAG;AAAA,MAChB;AAAA,IACF;AAAA,IACA,SAAS,SAAS,SAAS,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG;AAAA,IAC5D,aAAa;AAAA,IACb;AAAA,IACA,GAAI,SAAS,UAAU;AAAA,MACrB,YAAY;AAAA,QACV,SAAS,SAAS,GAAG;AAAA,QACrB,OAAO,SAAS,GAAG;AAAA,MACrB;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,MAAM;AAAA,MACJ,GAAI,SAAS,WAAW;AAAA,QACtB,SAAS,KAAK,GAAG;AAAA,QACjB,WAAW,KAAK,GAAG;AAAA,MACrB;AAAA,MACA,GAAI,SAAS,UAAU;AAAA,QACrB,SAAS;AAAA,QACT,WAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,GAAI,SAAS,WAAW;AAAA,QACtB,MAAM,KAAK,GAAG;AAAA,QACd,cAAc,KAAK,GAAG;AAAA,MACxB;AAAA,MACA,GAAI,SAAS,UAAU;AAAA,QACrB,MAAM,SAAS,GAAG;AAAA,QAClB,cAAc,KAAK,GAAG;AAAA,MACxB;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,IACA,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,GAAI,SAAS,WAAW;AAAA,QACtB,MAAM;AAAA;AAAA,MACR;AAAA,MACA,GAAI,SAAS,UAAU;AAAA,QACrB,MAAM;AAAA;AAAA,MACR;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,IACA,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA;AAAA,MACL,KAAK;AAAA;AAAA,MACL,KAAK;AAAA;AAAA,MACL,MAAM;AAAA,MACN,KAAK;AAAA;AAAA,MACL,KAAK;AAAA;AAAA,MACL,KAAK;AAAA;AAAA,MACL,KAAK;AAAA;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,cAAc;AAAA,EAChB;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,IACV,YAAY,CAAC,mBAAmB,GAAG,UAAU,EAAE,KAAK,GAAG;AAAA,IACvD,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,GAAG;AAAA,IACV,mBAAmB,CAAC,+BAA+B,GAAG,UAAU,EAAE,KAAK,GAAG;AAAA,IAC1E,kBAAkB,WAAW,KAAK,GAAG;AAAA,IACrC,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,IAAI;AAAA,MACF,YAAY,CAAC,+BAA+B,GAAG,UAAU,EAAE,KAAK,GAAG;AAAA,MACnE,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY,KAAK;AAAA,MACjB,GAAI,SAAS,WAAW;AAAA,QACtB,OAAO,SAAS,GAAG;AAAA,MACrB;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,YAAY,CAAC,+BAA+B,GAAG,UAAU,EAAE,KAAK,GAAG;AAAA,MACnE,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY,KAAK;AAAA,MACjB,OAAO,SAAS,SAAS,KAAK,GAAG,IAAI,SAAS,GAAG;AAAA,IACnD;AAAA,IACA,IAAI;AAAA,MACF,YAAY,CAAC,0BAA0B,GAAG,UAAU,EAAE,KAAK,GAAG;AAAA,MAC9D,UAAU,aAAa,WAAW,QAAQ,EAAE;AAAA,MAC5C,YAAY,KAAK;AAAA,MACjB,eAAe;AAAA,IACjB;AAAA,IACA,IAAI;AAAA,MACF,YAAY,CAAC,0BAA0B,GAAG,UAAU,EAAE,KAAK,GAAG;AAAA,MAC9D,UAAU,aAAa,WAAW,QAAQ,EAAE;AAAA,MAC5C,YAAY,KAAK;AAAA,MACjB,eAAe;AAAA,IACjB;AAAA,IACA,IAAI;AAAA,MACF,YAAY,CAAC,0BAA0B,GAAG,UAAU,EAAE,KAAK,GAAG;AAAA,MAC9D,UAAU,aAAa,WAAW,QAAQ,EAAE;AAAA,MAC5C,YAAY,KAAK;AAAA,MACjB,eAAe;AAAA,MACf,OAAO,SAAS,SAAS,KAAK,GAAG,IAAI,KAAK;AAAA,IAC5C;AAAA,IACA,IAAI;AAAA,MACF,UAAU,aAAa,WAAW,QAAQ,EAAE;AAAA,MAC5C,YAAY,KAAK;AAAA,IACnB;AAAA,IACA,QAAQ;AAAA,MACN,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,eAAe;AAAA,IACjB;AAAA,IACA,WAAW;AAAA,MACT,UAAU,aAAa,WAAW,QAAQ,EAAE;AAAA,MAC5C,YAAY,KAAK;AAAA,MACjB,eAAe;AAAA,MACf,YAAY;AAAA,IACd;AAAA,IACA,OAAO;AAAA,MACL,UAAU,aAAa,WAAW,QAAQ,EAAE;AAAA;AAAA,MAC5C,YAAY,KAAK;AAAA,MACjB,eAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,UAAU,aAAa,WAAW,QAAQ,EAAE;AAAA;AAAA,MAC5C,YAAY,KAAK;AAAA,MACjB,eAAe;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,UAAU,aAAa,WAAW,QAAQ,EAAE;AAAA;AAAA,MAC5C,YAAY,KAAK;AAAA,MACjB,eAAe;AAAA,MACf,YAAY;AAAA,IACd;AAAA,IACA,aAAa;AAAA,MACX,iBAAiB;AAAA,IACnB;AAAA,EACF;AACF;AAEK,SAAS,oBAAoB,OAAmD;AACrF,SAAO;AAAA,IACL,YAAY;AAAA,MACV,eAAe;AAAA,QACb,cAAc;AAAA,UACZ,oBAAoB;AAAA,QACtB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,cAAc;AAAA,UACZ,kBAAkB;AAAA,UAClB,MAAM;AAAA,QACR;AAAA,QACA,gBAAgB;AAAA,UACd,WAAW;AAAA,YACT,SAAS;AAAA,YACT,GAAG,MAAM,WAAW;AAAA,YACpB,YAAY,KAAK;AAAA,YACjB,YAAY;AAAA,UACd;AAAA,UACA,WAAW;AAAA,YACT,SAAS,MAAM,QAAQ,KAAK,CAAC;AAAA,UAC/B;AAAA,UACA,kBAAkB;AAAA,YAChB,iBAAiB,MAAM,QAAQ,QAAQ,GAAG;AAAA,YAC1C,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,UAAU;AAAA,UACR;AAAA;AAAA,YAEE,OAAO,EAAE,SAAS,OAAO;AAAA,YACzB,OAAO;AAAA,cACL,OACE,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ,KAAK,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,cAClF,QAAQ;AAAA,cACR,aACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,KAAK,GAAG;AAAA,cAC5B,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,KAAK,EAAE;AAAA,cAC3B,YAAY,MAAM,WAAW;AAAA,cAC7B,YAAY;AAAA,cACZ,UAAU,aAAa,WAAW,QAAQ,EAAE;AAAA;AAAA,cAC5C,YAAY,KAAK;AAAA,cACjB,eAAe;AAAA,cACf,qBAAqB;AAAA,cACrB,+BAA+B;AAAA,gBAC7B,aAAa,MAAM,QAAQ,QAAQ;AAAA,gBACnC,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,QAAQ,EAAE;AAAA,gBAC9B,wBAAwB;AAAA,kBACtB,OACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,QAAQ,GAAG,IACzB,MAAM,QAAQ,QAAQ;AAAA,gBAC9B;AAAA,cACF;AAAA,cACA,0BAA0B;AAAA,gBACxB,OAAO,MAAM,QAAQ,KAAK,GAAG;AAAA,cAC/B;AAAA,cACA,wBAAwB;AAAA,gBACtB,SAAS;AAAA,gBACT,UAAU;AAAA,gBACV,OAAO;AAAA,gBACP,aAAa;AAAA,gBACb,OACE,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ,KAAK,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,cACpF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA;AAAA,YAEE,OAAO,EAAE,SAAS,OAAO;AAAA,YACzB,OAAO;AAAA,cACL,UAAU,MAAM,WAAW,QAAQ,EAAE;AAAA,cACrC,YAAY;AAAA,cACZ,OACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,QAAQ,GAAG,IACzB,MAAM,QAAQ,QAAQ,GAAG;AAAA,cAC/B,IAAI;AAAA,cACJ,SAAS;AAAA,gBACP,IAAI;AAAA,cACN;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,eAAe;AAAA,QACb,cAAc;AAAA,UACZ,MAAM;AAAA,QACR;AAAA,QACA,UAAU;AAAA,UACR;AAAA,YACE,OAAO,EAAE,OAAO,UAAU;AAAA,YAC1B,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,QAAQ,aACN,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,KAAK,GAAG,CAC5B;AAAA,cACA,cAAc,MAAM,MAAM;AAAA,cAC1B,OACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,QAAQ,GAAG,IACzB,MAAM,QAAQ,QAAQ,GAAG;AAAA,cAC/B,WAAW;AAAA,gBACT,aACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,KAAK,GAAG;AAAA,gBAC5B,YACE,MAAM,QAAQ,SAAS,SACnB,MAAM,MAAM,QAAQ,YAAY,GAAG,GAAG,GAAG,IACzC,MAAM,QAAQ,KAAK,EAAE;AAAA,cAC7B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB;AAAA,UACd,OAAO;AAAA,YACL,UAAU;AAAA,YACV,OAAO,MAAM,QAAQ,KAAK;AAAA,YAC1B,iBAAiB;AAAA,YACjB,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,WAAW;AAAA,YAC/B,QAAQ,aACN,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,KAAK,GAAG,CAC5B;AAAA,YACA,uBAAuB;AAAA,cACrB,UAAU,MAAM,WAAW,QAAQ,EAAE;AAAA,cACrC,YAAY;AAAA,cACZ,WAAW;AAAA,gBACT,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,MAAM,QAAQ,YAAY,GAAG,GAAG,GAAG,IACzC,MAAM,QAAQ,KAAK,EAAE;AAAA,cAC7B;AAAA,cACA,WAAW;AAAA,gBACT,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,MAAM,QAAQ,YAAY,GAAG,GAAG,GAAG,IACzC,MAAM,QAAQ,KAAK,EAAE;AAAA,cAC7B;AAAA,cACA,kBAAkB;AAAA,gBAChB,YAAY;AAAA,gBACZ,OACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,QAAQ,GAAG,IACzB,MAAM,QAAQ,QAAQ,GAAG;AAAA,gBAC/B,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,MAAM,QAAQ,QAAQ,GAAG,GAAG,GAAG;AAAA,cAC7C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV,gBAAgB;AAAA,UACd,OAAO;AAAA,YACL,WAAW,gBACT,MAAM,QAAQ,SAAS,SAAS,uBAAuB,0BACzD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,aACE,MAAM,QAAQ,SAAS,SACnB,MAAM,MAAM,QAAQ,QAAQ,GAAG,GAAG,IAAI,IACtC,MAAM,QAAQ,KAAK,GAAG;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,cAAc;AAAA,UACZ,WAAW;AAAA,QACb;AAAA,QACA,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,OACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,QAAQ,GAAG,IACzB,MAAM,QAAQ,QAAQ,GAAG;AAAA,YAC/B,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,WAAW;AAAA,cACT,OACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,QAAQ,GAAG,IACzB,MAAM,QAAQ,QAAQ,GAAG;AAAA,YACjC;AAAA,YACA,+BAA+B;AAAA,cAC7B,WAAW;AAAA,YACb;AAAA,YACA,oBAAoB;AAAA,cAClB,YAAY;AAAA,YACd;AAAA,YACA,CAAC,IAAI,eAAe,OAAO,IAAI,GAAG;AAAA;AAAA,cAEhC,OAAO,MAAM,QAAQ,QAAQ,GAAG;AAAA,cAChC,WAAW;AAAA,gBACT,OAAO,MAAM,QAAQ,QAAQ,GAAG;AAAA,cAClC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB;AAAA,UACd,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,QAAQ,EAAE,OAAO;AAAA,YAC7C,YAAY;AAAA,YACZ,GAAI,YAAY,cACd,UAAU,aAAa;AAAA,cACrB,OACE,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ,KAAK,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,cAClF,iBAAiB;AAAA,cACjB,aACE,MAAM,QAAQ,SAAS,SACnB,MAAM,MAAM,QAAQ,KAAK,GAAG,GAAG,GAAG,IAClC,MAAM,QAAQ,KAAK,GAAG;AAAA,cAC5B,WAAW;AAAA,gBACT,OACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,KAAK,GAAG,IACtB,MAAM,QAAQ,KAAK,GAAG;AAAA,cAC9B;AAAA,YACF;AAAA,YACF,GAAI,YAAY,cACd,UAAU,aAAa;AAAA,cACrB,WAAW;AAAA,gBACT,OAAO,MAAM,QAAQ,QAAQ,GAAG;AAAA,cAClC;AAAA,YACF;AAAA,YACF,GAAI,YAAY,YACd,UAAU,aAAa;AAAA,cACrB,QAAQ;AAAA,cACR,OAAO,MAAM,QAAQ,SAAS,SAAS,SAAS,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACzE,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,MAAM,QAAQ,YAAY,GAAG,GAAG,GAAG,IACzC,MAAM,MAAM,QAAQ,QAAQ,GAAG,GAAG,GAAG;AAAA,cAC3C,WAAW;AAAA,gBACT,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACjC;AAAA,YACF;AAAA;AAAA;AAAA,YAGF,GAAI,YAAY,WAAW;AAAA,cACzB,GAAI,UAAU,aAAa;AAAA,gBACzB,OACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,QAAQ,GAAG,IACzB,MAAM,QAAQ,QAAQ,GAAG;AAAA,gBAC/B,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,MAAM,QAAQ,YAAY,GAAG,GAAG,GAAG,IACzC,MAAM,MAAM,QAAQ,QAAQ,GAAG,GAAG,GAAG;AAAA,cAC7C;AAAA,cACA,GAAI,UAAU,aAAa;AAAA,gBACzB,OAAO,MAAM,QAAQ,SAAS,SAAS,SAAS,MAAM,QAAQ,QAAQ,GAAG;AAAA,gBACzE,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,QAAQ,GAAG,IACzB,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACjC;AAAA,cACA,GAAI,UAAU,aAAa;AAAA,gBACzB,OAAO,MAAM,QAAQ,SAAS,SAAS,SAAS,MAAM,QAAQ,QAAQ,GAAG;AAAA,gBACzE,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,QAAQ,GAAG,IACzB,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACjC;AAAA,YACF;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,OAAO,MAAM,QAAQ,SAAS,SAAS,SAAS,MAAM,QAAQ,QAAQ,GAAG;AAAA,YACzE,WAAW;AAAA,cACT,OACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,KAAK,GAAG,IACtB,MAAM,QAAQ,QAAQ,GAAG;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,cAAc;AAAA,UACZ,OAAO;AAAA,QACT;AAAA,QACA,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,MACA,mBAAmB;AAAA,QACjB,cAAc;AAAA,UACZ,OAAO;AAAA,QACT;AAAA,QACA,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,SAAS;AAAA,YACT,eAAe;AAAA,YACf,YAAY;AAAA,YACZ,UAAU,MAAM,WAAW,QAAQ,EAAE;AAAA,YACrC,OACE,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ,KAAK,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,YAClF,cAAc;AAAA,YACd,WAAW;AAAA,cACT,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,MAAM,QAAQ,YAAY,GAAG,GAAG,GAAG,IACzC,MAAM,QAAQ,KAAK,EAAE;AAAA,YAC7B;AAAA,YACA,kBAAkB;AAAA,cAChB,OAAO,MAAM,QAAQ,SAAS,SAAS,SAAS,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACzE,cAAc;AAAA,cACd,QAAQ;AAAA,cACR,aACE,MAAM,QAAQ,SAAS,SACnB,GAAG,MAAM,QAAQ,QAAQ,GAAG,CAAC,gBAC7B,GAAG,MAAM,QAAQ,QAAQ,GAAG,CAAC;AAAA,cACnC,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,QAAQ,EAAE;AAAA,cAC9B,WAAW;AAAA,gBACT,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACjC;AAAA,YACF;AAAA,YACA,6BAA6B;AAAA,cAC3B,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,cAAc;AAAA,UACZ,eAAe;AAAA,UACf,MAAM;AAAA,QACR;AAAA,QACA,gBAAgB;AAAA,UACd,YAAY;AAAA,YACV,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,SAAS;AAAA,YACT,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA,cAAc;AAAA,UACZ,oBAAoB;AAAA,QACtB;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,iBAAiB;AAAA,YACjB,iBACE,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ,YAAY,GAAG,IAAI;AAAA,YACnE,WAAW;AAAA,cACT,oBAAoB;AAAA,YACtB;AAAA,UACF;AAAA,UACA,UAAU;AAAA,YACR,SAAS;AAAA,YACT,aACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,KAAK,GAAG;AAAA,YAC5B,GAAI,MAAM,QAAQ,SAAS,UAAU;AAAA,cACnC,iBAAiB,MAAM,QAAQ,YAAY,GAAG;AAAA,YAChD;AAAA,YACA,eAAe;AAAA,cACb,WAAW;AAAA,gBACT,WAAW,gBACT,MAAM,QAAQ,SAAS,SAAS,uBAAuB,0BACzD;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,cAAc;AAAA,QACZ,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,SAAS,MAAM,QAAQ,GAAG,CAAC;AAAA,YAC3B,aAAa,MAAM,QAAQ;AAAA,UAC7B;AAAA,UACA,MAAM;AAAA,YACJ,OAAO,MAAM,QAAQ,KAAK;AAAA,YAC1B,YAAY;AAAA,UACd;AAAA,UACA,MAAM;AAAA,YACJ,OAAO,MAAM,QAAQ,KAAK;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,MACA,sBAAsB;AAAA,QACpB,cAAc;AAAA,UACZ,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,iBAAiB;AAAA,QACf,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,eAAe;AAAA,YACf,YAAY;AAAA,YACZ,SAAS,MAAM,QAAQ,GAAG;AAAA,YAC1B,OACE,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ,KAAK,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,YAClF,aACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,KAAK,GAAG;AAAA,YAC5B,kBAAkB;AAAA,cAChB,OAAO,MAAM,QAAQ,SAAS,SAAS,SAAS,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACzE,aACE,MAAM,QAAQ,SAAS,SACnB,GAAG,MAAM,QAAQ,QAAQ,GAAG,CAAC,gBAC7B,GAAG,MAAM,QAAQ,QAAQ,GAAG,CAAC;AAAA,cACnC,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,QAAQ,EAAE;AAAA,cAC9B,WAAW;AAAA,gBACT,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACjC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,2BAA2B;AAAA,cACzB,iBAAiB;AAAA,gBACf,WAAW;AAAA,gBACX,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,SAAS;AAAA,YACT,OAAO;AAAA,YACP,oCAAoC;AAAA,cAClC,SAAS;AAAA,YACX;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,SAAS;AAAA,YACT,cAAc;AAAA,YACd,iBACE,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ,KAAK,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,UACpF;AAAA,UACA,OAAO;AAAA,YACL,YAAY;AAAA,YACZ,OAAO;AAAA,YACP,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,MACA,mBAAmB;AAAA,QACjB,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,eAAe;AAAA,YACf,YAAY;AAAA,YACZ,OACE,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ,KAAK,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,YAClF,aACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,KAAK,GAAG;AAAA,YAC5B,kBAAkB;AAAA,cAChB,OAAO,MAAM,QAAQ,SAAS,SAAS,SAAS,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACzE,aACE,MAAM,QAAQ,SAAS,SACnB,GAAG,MAAM,QAAQ,QAAQ,GAAG,CAAC,gBAC7B,GAAG,MAAM,QAAQ,QAAQ,GAAG,CAAC;AAAA,cACnC,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,QAAQ,EAAE;AAAA,cAC9B,WAAW;AAAA,gBACT,iBACE,MAAM,QAAQ,SAAS,SACnB,MAAM,QAAQ,YAAY,GAAG,IAC7B,MAAM,QAAQ,QAAQ,GAAG;AAAA,cACjC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,cAAc;AAAA,UACZ,mBAAmB;AAAA,QACrB;AAAA,MACF;AAAA,MACA,cAAc;AAAA,QACZ,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX,cAAc;AAAA,UACZ,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,mBAAmB;AAAA,QACjB,cAAc;AAAA,UACZ,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX,cAAc;AAAA,UACZ,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,iBAAiB;AAAA,QACf,cAAc;AAAA,UACZ,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX,cAAc;AAAA,UACZ,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV,cAAc;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB;AAAA,UACd,MAAM;AAAA,YACJ,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV,cAAc;AAAA,UACZ,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,cAAc;AAAA,UACZ,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,cAAc;AAAA,QACZ,cAAc;AAAA,UACZ,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,eAAe;AAAA,QACb,cAAc;AAAA,UACZ,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX,cAAc;AAAA,UACZ,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,kBAAkB;AAAA,QAChB,cAAc;AAAA,UACZ,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,cAAc;AAAA,UACZ,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,cAAc;AAAA,UACZ,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC55BA,YAAYC,YAAW;AACvB,SAAS,eAAe;AAGxB,IAAM,UAAU,IAAI,QAA8B;AAElD,IAAM,QAAQ,oBAAI,IAAiB;AAEnC,SAAS,UAAU,KAAa,IAA4B;AAC1D,QAAM,cAAc,MAAM;AAExB,UAAM,OAAO,GAAG;AAChB,OAAG;AAAA,EACL;AACA,QAAM,iBAAiB,CAAC,UAAwB;AAC9C,QAAI,MAAM,gBAAgB,OAAO,gBAAgB,MAAM,QAAQ,KAAK;AAClE,kBAAY;AAAA,IACd;AAAA,EACF;AACA,SAAO,iBAAiB,WAAW,cAAc;AACjD,UAAQ,GAAG,KAAK,WAAW;AAC3B,SAAO,MAAM;AACX,WAAO,oBAAoB,WAAW,cAAc;AACpD,YAAQ,IAAI,KAAK,WAAW;AAAA,EAC9B;AACF;AAEA,SAAS,YAAyB,KAA4B;AAC5D,MAAI;AACF,QAAI,QAAQ,MAAM,IAAI,GAAG;AACzB,QAAI,CAAC,OAAO;AACV,YAAM,OAAO,OAAO,aAAa,QAAQ,GAAG;AAC5C,cAAQ,OAAO,KAAK,MAAM,IAAI,IAAI;AAClC,YAAM,IAAI,KAAK,KAAK;AAAA,IACtB;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,KAAK;AACnB,WAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAsB,KAAa,OAAU;AACpD,MAAI;AACF,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,IAAI,KAAK,KAAK;AACpB,aAAO,aAAa,QAAQ,KAAK,KAAK,UAAU,KAAK,CAAC;AACtD,cAAQ,KAAK,KAAK,IAAI;AAAA,IACxB;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,KAAK;AAAA,EACrB;AACF;AAgBe,SAAR,qBACL,KACA,cAC8C;AAC9C,QAAM,eAAqB,mBAAY,CAAC,OAAmB,UAAU,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC;AACpF,QAAM,iBAAuB;AAAA,IAC3B,MAAM,YAAe,GAAG,KAAK;AAAA,IAC7B,CAAC,cAAc,GAAG;AAAA,EACpB;AACA,QAAM,uBAA6B,mBAAY,MAAM,cAAc,CAAC,YAAY,CAAC;AAEjF,QAAM,cAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,iBAAuB;AAAA,IAC3B,CAAC,UAAmC;AAClC,YAAM,eAAe,iBAAiB,WAAW,MAAM,WAAW,IAAI;AACtE,eAAS,KAAK,YAAY;AAAA,IAC5B;AAAA,IACA,CAAC,KAAK,WAAW;AAAA,EACnB;AAEA,SAAO,CAAC,aAAa,cAAc;AACrC;;;AFhFA,SAAS,mBAAgC;AACvC,QAAM,kBAAkB,cAAc,8BAA8B;AACpE,SAAO,kBAAkB,SAAS;AACpC;AAEO,SAAS,eAAe;AAC7B,QAAM,CAAC,WAAW,YAAY,IAAI;AAAA,IAChC;AAAA,IACA;AAAA,EACF;AACA,SAAO,EAAE,WAAW,aAAa;AACnC;AAEO,SAAS,iBAA8B;AAC5C,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,EAAE,UAAU,IAAI,aAAa;AACnC,SAAO,cAAc,WAAW,gBAAgB;AAClD;AAEO,SAASC,eAAc,EAAE,SAAS,GAAuB;AAC9D,QAAM,cAAc,eAAe;AACnC,QAAM,QAAc,eAAQ,MAAM;AAChC,UAAM,uBAAuB,gBAAgB,WAAW;AACxD,QAAI,YAAYC,aAAY;AAAA,MAC1B,GAAG;AAAA,MACH,SAAS;AAAA,QACP,GAAG,qBAAqB;AAAA,QACxB,MAAM;AAAA,MACR;AAAA,IACF,CAAC;AACD,gBAAYC,WAAU,WAAW,oBAAoB,SAAS,CAAC;AAE/D,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,CAAC;AAEhB,EAAM,eAAQ,MAAM;AAClB,QAAI,OAA+B,SAAS,cAAc,0BAA0B;AACpF,QAAI,CAAC,MAAM;AACT,aAAO,SAAS,cAAc,MAAM;AACpC,WAAK,OAAO;AACZ,eAAS,KAAK,YAAY,IAAI;AAAA,IAChC;AACA,SAAK,aAAa,WAAW,kBAAkB,WAAW,CAAC;AAC3D,SAAK,aAAa,SAAS,0BAA0B,WAAW,GAAG;AAAA,EACrE,GAAG,CAAC,WAAW,CAAC;AAEhB,SACE,qCAAC,oBAAiB,SAChB,qCAAC,qBAAkB,mBAAiB,QAAE,QAAS,CACjD;AAEJ;;;ARrDA,SAAS,OAAO,EAAE,SAAS,QAAQ,qBAAqB,KAAK,GAAgB;AAC3E,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,WAAW,aAAa,IAAI,aAAa;AAEjD,QAAM,wBAA8B;AAAA,IAClC,CAAC,OAAyB,SAAoB;AAC5C,mBAAa,IAAI;AAAA,IACnB;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AAEA,QAAM,cACJ,MAAM,QAAQ,SAAS,SAAS,2BAA2B;AAE7D,SACE,sCAAO,kBAAN,MACC;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,OAAM;AAAA,MACN,WAAW;AAAA,MACX,IAAI,EAAE,QAAQ,MAAM,OAAO,SAAS,GAAG,cAAc,GAAG,aAAa,UAAU;AAAA;AAAA,IAE/E,sCAACC,UAAA,MACC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,MAAM;AAAA,UACN,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,QAClB;AAAA;AAAA,MAEA,sCAACC,UAAA,EAAQ,OAAM,UACb;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,cAAW;AAAA,UACX,MAAK;AAAA,UACL,WAAU;AAAA,UACV,IAAI,EAAE,SAAS,QAAQ,eAAe,OAAO,YAAY,UAAU,KAAK,EAAE;AAAA;AAAA,QAE1E,sCAAC,SAAI,KAAK,aAAa,KAAI,wBAAuB,OAAO,IAAI,QAAQ,IAAI;AAAA,QACzE;AAAA,UAACF;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,IAAI;AAAA,cACF,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,YAAY,MAAM,WAAW;AAAA,YAC/B;AAAA;AAAA,UACD;AAAA,QAED;AAAA,MACF,CACF;AAAA,MACA,sCAACG,OAAA,EAAK,IAAI,EAAE,IAAI,EAAE,GAAG,OAAM,QAAO,MAAK,SAAQ,OAAM,QAAO;AAAA,IAC9D,GACA;AAAA,MAACH;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,MAAM;AAAA,UACN,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,QAClB;AAAA;AAAA,MAEC;AAAA,IACH,GACA;AAAA,MAACA;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,MAAM;AAAA,UACN,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,KAAK;AAAA,QACP;AAAA;AAAA,MAEC;AAAA,MACD,sCAAC,yBAAc,MAAM,WAAW,UAAU,uBAAuB;AAAA,MAChE,qBAAqB,sCAAC,0BAAa,IAAK;AAAA,IAC3C,CACF;AAAA,EACF,GACA,sCAACD,UAAA,IAAQ,CACX;AAEJ;AAEA,IAAO,iBAAQ;;;AD5FA,SAAR,cAA+B,EAAE,OAAO,GAAuB;AACpE,SACE,sCAACK,gBAAA,MACC;AAAA,IAAC;AAAA;AAAA,MACC,oBAAoB;AAAA,MACpB,SACE,sCAAC,SAAM,WAAU,OAAM,SAAS,GAAG,YAAW,YAC5C,sCAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,OAAO,eAAe,KAAG,+CAE3D,GACA;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,sCAAC,cAAS;AAAA,UACnB,OAAM;AAAA,UACN,WAAU;AAAA,UACV,MAAM,SAAS,uBAAuB,MAAM,KAAK;AAAA;AAAA,QAClD;AAAA,MAED,CACF;AAAA;AAAA,EAEJ,CACF;AAEJ;;;AYlCA,YAAYC,aAAW;AAEvB,IAAI,aAAkB;AAEtB,SAAS,uBAAuB;AAG9B,SAAsB,2DAAmD,uBACtE;AACL;AAEA,SAAS,mBAAmB;AAC1B,MAAI,eAAe,MAAM;AACvB,iBAAa,qBAAqB;AAAA,EACpC;AACF;AAEA,SAAS,aAAa;AACpB,SAAO,eAAe,QAAQ,eAAe,qBAAqB;AACpE;AAOe,SAAR,SAA8D,SAAe;AAClF,mBAAiB;AACjB,QAAM,MAAY,eAAO,OAAO;AAChC,EAAM,2BAAmB,MAAM;AAC7B,QAAI,UAAU;AAAA,EAChB,CAAC;AAED,SAAa,oBAAY,IAAI,SAAS;AACpC,QAAI,QAAQ,IAAI,aAAa,gBAAgB,WAAW,GAAG;AACzD,cAAQ,MAAM,uEAAuE;AAAA,IACvF;AACA,UAAM,KAAK,IAAI;AACf,OAAG,GAAG,IAAI;AAAA,EACZ,GAAG,CAAC,CAAC;AACP;;;AxB+CA,IAAM,mBAAmB,kBAAkB;AAE3C,IAAM,YAAY,QAAQ,IAAI,aAAa;AAC3C,IAAM,qBACJ,OAAO,WAAW,cACd,QACA,CAAC,CAAE,OAAO,cAAoC,SAAS;AAE7D,IAAM,MAAM,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACxC,QAAQ;AAAA,EACR,YAAY,MAAM;AACpB,EAAE;AAEF,IAAM,qBAAqB;AAEpB,IAAM,qBAAwC,OAAO;AAAA,EAC1D,CAAC,GAAG,mBAAmB,EAAE,IAAI,CAAC,CAAC,IAAI,MAAM;AACvC,QAAI,UAAW,SAAiB,IAAI;AAEpC,QAAI,CAAC,mBAAmB,OAAO,GAAG;AAChC,gBAAU;AAAA,QACR,IAAI,MAAM,qBAAqB,IAAI,6BAA6B;AAAA,MAClE;AAAA,IACF;AAEA,WAAO,CAAC,MAAM,OAAO;AAAA,EACvB,CAAC;AACH;AAEA,IAAM,+BAAqC;AAAA,EAAK,MAC9C,OAAO,wDAAwD,EAAE,KAAK,CAAC,OAAO;AAAA,IAC5E,SAAS,EAAE;AAAA,EACb,EAAE;AACJ;AAEA,IAAMC,eAAqB,CAAC;AAC5B,IAAMC,gBAAoB,CAAC;AAE3B,IAAM,gBAA0B;AAAA,EAC9B,MAAM,YAAY;AAAA,EAAC;AAAA,EACnB,SAAS,YAAY;AAAA,EAAC;AAAA,EACtB,OAAO,YAAY;AAAA,EAAC;AAAA,EACpB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM,CAAC;AACT;AAEA,IAAM,6BAAoE;AAAA,EACxE;AAAA,EACA;AACF;AAEA,SAAS,mBAAmC;AAC1C,QAAM,WAAW,YAAY;AAE7B,QAAM,eAAqB,mBAAW,mBAAmB;AAEzD,QAAM,iBAAuC;AAAA,IAC3C,CAAC,YAAY,mBAAmB;AAC9B,YAAM,YAAY,kBAAkB,IAAI,gBAAgB,cAAc;AAEtE,UAAI,cAAc;AAChB,qBAAa,KAAK,yBAAyB,EAAE,WAAW,CAAC;AAAA,MAC3D,OAAO;AACL,iBAAS;AAAA,UACP,UAAU,UAAU,UAAU;AAAA,UAC9B,GAAI,YACA;AAAA,YACE,QAAQ,UAAU,SAAS;AAAA,UAC7B,IACA,CAAC;AAAA,QACP,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,EACzB;AAEA,SAAO;AACT;AAEA,SAAS,QACP,GACA,GACS;AACT,SAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE;AAC3E;AAEA,IAAM,UAAU,OAAO,KAAK,EAAE;AAAA,EAC5B,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,SAAS;AAAA,EACT,eAAe;AACjB,CAAC;AAED,IAAM,gBAAgB,OAAO,KAAK,EAAE;AAAA,EAClC,UAAU;AAAA,EACV,OAAO;AAAA,EACP,eAAe;AAAA,EACf,UAAU;AACZ,CAAC;AAUD,SAAS,YACP,IACA,UACA,EAAE,aAAa,aAAa,OAAO,CAAC,EAAE,GACxB;AACd,QAAM,cAAc,EAAE,GAAG,aAAa,QAAQ,GAAG,YAAY;AAE7D,QAAM,oBAAoB,eAAe,kBAAkB,UAAU,WAAW;AAEhF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAUC,WAAU,mBAAmB,CAAC,YAAY,QAAQ,UAAU,EAAE,OAAO,OAAU,CAAC;AAAA,IAC1F,QAAQ,iBAAiB,aAAa,iBAAiB;AAAA,IACvD;AAAA,EACF;AACF;AAOA,SAAS,iBAAiB,UAA6C;AACrE,QAAM,KAAoB,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,EAAE;AAE1D,MAAI;AACJ,QAAM,iBAAiB,MAAM;AAC3B,QAAI,iBAAiB;AACnB;AAAA,IACF;AACA,sBAAkB,QAAQ,QAAQ,EAAE,KAAK,MAAM;AAC7C,eAAS,EAAE;AACX,wBAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,SAAa,eAAyB;AAAA,IACpC,cAAc,OAAqB;AACjC,UAAI,GAAG,OAAO,MAAM,EAAE,GAAG;AACvB,cAAM,IAAI,MAAM,kBAAkB,MAAM,EAAE,sBAAsB;AAAA,MAClE;AACA,SAAG,OAAO,MAAM,EAAE,IAAI;AACtB,qBAAe;AACf,aAAO,MAAM;AACX,eAAO,GAAG,OAAO,MAAM,EAAE;AACzB,uBAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,qBAAqB,WAAmB,OAAqB;AAC3D,UAAI,GAAG,cAAc,SAAS,GAAG;AAC/B,eAAO,MAAM;AAAA,QAAC;AAAA,MAChB;AACA,SAAG,cAAc,SAAS,IAAI,MAAM;AACpC,qBAAe;AACf,aAAO,MAAM;AACX,eAAO,GAAG,cAAc,SAAS;AACjC,uBAAe;AAAA,MACjB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,IAAM,0BAAgC,sBAEpC,MAAS;AACX,IAAM,sBAA4B,sBAAwC,MAAS;AACnF,IAAM,CAAC,eAAe,kBAAkB,IAAI,sBAAqC,KAAK;AACtF,IAAM,CAAC,4BAA4B,+BAA+B,IAChE,sBAA6C,yBAAyB;AAYxE,IAAM,oBAA0B,sBAAkD,MAAS;AAE3F,SAAS,eAAe,KAAiC;AACvD,QAAM,cAAc,0BAA0B,GAAG;AACjD,SAAO;AACT;AAaA,SAAS,uBACP,QACA,SAAS,IAC2B;AACpC,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC;AAAA,EACV;AACA,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO,OAAO,QAAQ,CAAC,OAAO,MAAM;AAClC,aAAO,uBAAuB,MAAM,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM;AAAA,IAC9D,CAAC;AAAA,EACH;AAGA,MAAI,OAAO,WAAW,YAAY,eAAe,MAAM,MAAM,SAAS;AACpE,WAAO,CAAC,CAAC,QAAQ,MAAgC,CAAC;AAAA,EACpD;AACA,SAAO,OAAO,QAAQ,MAAM,EAAE;AAAA,IAAQ,CAAC,CAAC,KAAK,KAAK,MAChD,uBAAuB,OAAO,GAAG,MAAM,IAAI,GAAG,EAAE;AAAA,EAClD;AACF;AAmBA,SAAS,iBACP,UACA,WACA,QACkD;AAClD,QAAM,SAAc,CAAC;AACrB,QAAM,YAAY;AAClB,QAAM,YAAY,uBAAuB,MAAM;AAE/C,aAAW,CAAC,IAAI,KAAK,WAAW;AAC9B,UAAM,kBAAkB,SAAS,GAAG,SAAS,GAAG,IAAI,EAAE;AAEtD,QAAI,iBAAiB,OAAO;AAC1B,aAAO,EAAE,OAAO,iBAAiB,MAAM;AAAA,IACzC;AACA,QAAI,iBAAiB,SAAS;AAC5B,aAAO,EAAE,SAAS,KAAK;AAAA,IACzB;AAEA,IAAE,MAAI,QAAQ,GAAG,SAAS,GAAG,IAAI,IAAI,iBAAiB,KAAK;AAAA,EAC7D;AAEA,SAAO,EAAE,OAAO,OAAO,SAAS,KAAK,CAAC,EAAE;AAC1C;AAMA,SAAS,aACP,UACA,EAAE,UAAU,IAAyB,CAAC,GACJ;AAClC,QAAM,cAAc,YAAY,eAAe,QAAQ;AAEvD,MAAI,gBAAgB,SAAS;AAC3B,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,EAAE,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF;AACA,MAAI,gBAAgB,gBAAgB;AAClC,WAAO;AAAA,MACL;AAAA,MACA,YAAY,SAAS;AAAA,IACvB;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,EAAE,OAAO,OAAU;AAAA,EAC7B;AACF;AAMA,SAAS,iBACP,KACA,UACA,YAC8B;AAC9B,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,WAAO,CAAC,GAAG,UAAU,GAAG,SAAS,QAAQ,CAAC,UAAU,iBAAiB,KAAK,OAAO,UAAU,CAAC,CAAC;AAAA,EAC/F;AAEA,QAAM,aAAoB,cAAc,KAAK,QAAQ;AACrD,QAAM,SAA8B,CAAC;AAErC,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,UAAU,GAAsC;AAC5F,QAAW,UAAU,QAAQ,GAAG;AAC9B,YAAM,cAAc,eAAe,QAAQ;AAC3C,YAAM,YAAY,WAAW,WAAW;AACxC,YAAM,kBAAkB,YAAY,iBAAiB;AACrD,YAAM,EAAE,WAAW,CAAC,EAAE,IAAI,mBAAmB,CAAC;AAE9C,UAAI,SAAS,IAAI,GAAG,SAAS,YAAY;AACvC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG,SAAS,QAAQ,CAAC,UAAU,iBAAiB,KAAK,OAAO,UAAU,CAAC;AAAA,QACzE;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG,SAAS,QAAQ,CAAC,UAAU,iBAAiB,KAAK,OAAO,UAAU,CAAC;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,cACP,KACA,UACA,YACA,UACA;AACA,QAAM,gBAAgB,iBAAiB,KAAK,UAAU,UAAU;AAEhE,QAAM,oBAAoB,oBAAI,IAA8C;AAC5E,QAAM,aAAa,oBAAI,IAAY;AACnC,QAAM,YAAuB,CAAC;AAE9B,aAAW,OAAO,eAAe;AAC/B,QAAW,UAAe,GAAG,GAAG;AAC9B,YAAM,cAAc,eAAe,GAAG;AACtC,YAAM,YAAY,WAAW,WAAW;AAExC,YAAM,kBAAkB,YAAY,iBAAiB;AAErD,YAAM,EAAE,WAAW,CAAC,EAAE,IAAI,mBAAmB,CAAC;AAE9C,YAAM,YAAgD,CAAC;AAEvD,iBAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC1D,cAAM,gBAAgB,SAAS,mBAC3B,GAAG,IAAI,EAAE,UAAU,QAAQ,gBAAgB,KAC3C;AAEJ,cAAM,YAAoC,IAAI,QAAQ,QAAQ;AAE9D,cAAM,UACJ,cAAc,UAAU,uBAAuB,OAAO,IAAI;AAE5D,cAAM,YAAY,GAAG,IAAI,EAAE,UAAU,QAAQ;AAE7C,YAAI;AAEJ,cAAM,wBACJ,iBAAiB,uBAAuB,aAAa,iBAAiB;AAExE,YACE,gBAAgB,yBAChB,CAAC,yBACD,CAAC,2BAA2B,SAAS,SAAS,SAAS,IAAc,GACrE;AACA,sBAAY,GAAG,IAAI,IAAI,IAAI,QAAQ;AAAA,QACrC;AAEA,kBAAU,QAAQ,IAAI;AAAA,UACpB,QAAQ,SAAS;AAAA,QACnB;AAEA,YAAI,SAAS;AACX,cAAI,QAAQ,cAAc;AACxB,uBAAW,IAAI,SAAS;AACxB,8BAAkB,IAAI,WAAW;AAAA,cAC/B;AAAA,cACA,aAAa;AAAA,YACf,CAAC;AAAA,UACH,OAAO;AACL,8BAAkB,IAAI,WAAW,aAAa,SAAS,EAAE,UAAU,CAAC,CAAC;AAAA,UACvE;AAAA,QACF;AAEA,cAAM,sBAAsB,CAAC,OAAgB,oBAA4B;AACvE,cAAI,SAAS,OAAO,UAAU,UAAU;AACtC,uBAAW,CAAC,gBAAgB,UAAU,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChE,oBAAM,kBAAkB,GAAG,eAAe,GACxC,MAAM,QAAQ,KAAK,IAAI,IAAI,cAAc,MAAM,IAAI,cAAc,EACnE;AAEA,kBAAI,cAAc,eAAe,UAAU,MAAM,SAAS;AACxD,kCAAkB,IAAI,iBAAiB,aAAa,UAAU,CAAC;AAAA,cACjE,OAAO;AACL;AAAA,kBACG,MAAkC,cAAc;AAAA,kBACjD;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,cAAM,mBAAmB,aAAa,gBAAgB,SAAS;AAC/D,YAAI,kBAAkB;AACpB,8BAAoB,kBAAkB,SAAS;AAAA,QACjD;AAAA,MACF;AAEA,UAAI,gBAAgB,uBAAuB;AACzC,kBAAU,IAAI,IAAI,IAAI;AAAA,UACpB,MAAM;AAAA,UACN;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,CAAC,sBAAsB,GAAG,GAAG;AAC/B,mBAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,iBAAiB,GAAG;AACnE,gBAAM,UACJ,IAAI,SAAS,QAA0C,MACtD,UAAU,uBAAuB,OAAO,IAAI;AAC/C,gBAAM,YAAY,GAAG,IAAI,EAAE,WAAW,QAAQ;AAC9C,4BAAkB,IAAI,WAAW,aAAa,SAAS,CAAC,CAAC,CAAC;AAAA,QAC5D;AAAA,MACF;AAAA,IACF;AAEA,QAAW,QAAQ,GAAG,GAAG;AACvB,gBAAU,IAAI,IAAI,IAAI;AAAA,QACpB,MAAM;AAAA,MACR;AAEA,UAAI,IAAI,QAAQ;AACd,cAAMC,uBAAsB,uBAAuB,OAAO,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC;AAEvF,mBAAW,CAAC,YAAY,UAAU,KAAKA,sBAAqB;AAC1D,gBAAM,YAAY,GAAG,IAAI,EAAE,UAAU,UAAU;AAC/C,gBAAM,YAAY,GAAG,IAAI,IAAI,UAAU,UAAU;AACjD,gBAAM,WAAW;AACjB,4BAAkB,IAAI,WAAW,aAAa,UAAU,EAAE,UAAU,CAAC,CAAC;AAAA,QACxE;AAAA,MACF;AAEA,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,aAAa,GAAG;AACxD,cAAM,YAAY,GAAG,IAAI,EAAE,IAAI,GAAG;AAClC,cAAM,YAAY,GAAG,IAAI,IAAI,IAAI,GAAG;AACpC,mBAAW,IAAI,SAAS;AACxB,0BAAkB,IAAI,WAAW;AAAA,UAC/B;AAAA,UACA,QAAQ,EAAE,OAAO,SAAS,KAAK;AAAA,QACjC,CAAC;AAAA,MACH;AAEA,YAAM,iBAAmB,OAAK,IAAI,YAAY,0BAA0B;AACxE,YAAM,sBAAsB,uBAAuB,cAAc;AAEjE,iBAAW,CAAC,YAAY,UAAU,KAAK,qBAAqB;AAC1D,cAAM,YAAY,GAAG,IAAI,EAAE,UAAU,UAAU;AAC/C,cAAM,YAAY,GAAG,IAAI,IAAI,UAAU,UAAU;AACjD,cAAM,WAAW;AACjB,0BAAkB,IAAI,WAAW,aAAa,UAAU,EAAE,UAAU,CAAC,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,QAAW,WAAW,GAAG,GAAG;AAC1B,UAAI,IAAI,QAAQ;AACd,mBAAW,CAAC,WAAW,QAAQ,KAAK,OAAO,QAAQ,IAAI,MAAM,GAAG;AAC9D,gBAAM,YAAY,GAAG,IAAI,EAAE,WAAW,SAAS;AAC/C,gBAAM,YAAY,GAAG,IAAI,IAAI,WAAW,SAAS;AAEjD,gBAAM,cAAc,YAAY,eAAe,QAAQ;AACvD,cAAI,gBAAgB,SAAS;AAC3B,8BAAkB,IAAI,WAAW;AAAA,cAC/B;AAAA,cACA,QAAQ,EAAE,OAAO,SAAS;AAAA,YAC5B,CAAC;AAAA,UACH,WAAW,gBAAgB,gBAAgB;AACzC,8BAAkB,IAAI,WAAW;AAAA,cAC/B;AAAA,cACA,YAAa,SAAmC;AAAA,YAClD,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAEA,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,aAAa,GAAG;AACxD,cAAM,YAAY,GAAG,IAAI,EAAE,IAAI,GAAG;AAClC,cAAM,YAAY,GAAG,IAAI,IAAI,IAAI,GAAG;AACpC,mBAAW,IAAI,SAAS;AACxB,0BAAkB,IAAI,WAAW;AAAA,UAC/B;AAAA,UACA,QAAQ,EAAE,OAAO,SAAS,KAAK;AAAA,QACjC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,MAAM,QAAQ,QAAQ,KAAY,OAAO,QAAQ,GAAG;AACvD,QAAI,YAAY,CAAC,MAAM,QAAQ,QAAQ,KAAY,OAAO,QAAQ,GAAG;AACnE,YAAM,YAAY,IAAI,gBAAgB,SAAS,MAAM;AACrD,YAAM,iBAAiB,SAAS,WAAW,cAAc,CAAC;AAE1D,iBAAW,CAAC,WAAW,YAAY,KAAK,gBAAgB;AACtD,cAAM,YAAY,GAAG,SAAS,EAAE,eAAe,SAAS;AACxD,cAAM,YAAY,mBAAmB,SAAS;AAC9C,0BAAkB,IAAI,WAAW;AAAA,UAC/B;AAAA,UACA,QAAQ,EAAE,OAAO,UAAU,IAAI,SAAS,KAAK,aAAa;AAAA,QAC5D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBACJ,OAAO,YAAY,iBAAiB;AAEtC,SAAO,EAAE,gBAAgB,YAAY,UAAU;AACjD;AAEA,SAAS,uBAAuB,KAA2C;AACzE,QAAM,cAAc,0BAA0B,GAAG;AACjD,SAAO,aAAa,WAAW;AACjC;AAMA,SAAS,aAAa,EAAE,OAAO,GAAsB;AACnD,QAAM,MAAM,cAAc;AAC1B,QAAM,OAAc,QAAQ,KAAK,QAAQ,SAAS;AAClD,QAAM,YAAmC,uBAAuB,IAAI;AACpE,QAAM,kBAAyB,cAAc,KAAK,IAAI;AAEtD;AAAA;AAAA,IAEE,sCAAC,uBAAoB,MAAY,iBAAkC,WAAsB;AAAA;AAE7F;AAUA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuB;AACrB,QAAM,cAAoB,mBAAW,mBAAmB;AACxD,QAAM,MAAM,cAAc;AAE1B,QAAM,EAAE,gBAAgB,YAAY,UAAU,IAAI;AAElD,QAAM,CAAC,eAAe,gBAAgB,IAC9B,iBAA2D,cAAc;AAEjF,QAAM,UAAgB,eAAO,GAAG;AAChC,EAAM,kBAAU,MAAM;AACpB,QAAI,QAAQ,QAAQ,SAAS;AAI3B;AAAA,IACF;AACA,YAAQ,UAAU;AAElB,qBAAiB,CAAC,qBAAqB;AAErC,YAAM,UAA4D,CAAC;AACnE,iBAAW,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,cAAc,GAAG;AAC3D,gBAAQ,GAAG,IAAI,WAAW,IAAI,GAAG,IAAI,iBAAiB,GAAG,KAAK,UAAU;AAAA,MAC1E;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,gBAAgB,YAAY,GAAG,CAAC;AAEpC,QAAM,EAAE,uBAAuB,4BAA4B,IACnD,mBAAW,iBAAiB,KAAK,CAAC;AAE1C,QAAM,aAAmB;AAAA,IACvB,CAAC,WAAmB,WAAoC;AACtD,uBAAiB,CAAC,qBAAuE;AACvF,cAAM,EAAE,YAAY,aAAa,GAAG,cAAc,IAAI,eAAe,SAAS;AAC9E,cAAM,kBAAkB,iBAAiB,SAAS;AAElD,YAAI,iBAAiB,UAAU,QAAQ,gBAAgB,QAAQ,MAAM,GAAG;AACtE,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,YACD,CAAC,SAAS,GAAG,EAAE,GAAG,eAAe,OAAO;AAAA,UAC1C;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,QAAM,sBAA4B;AAAA,IAChC,MACE,IAAI;AAAA,MACF,OAAO,QAAQ,aAAa,EAAE;AAAA,QAC5B,CAAC,CAAC,WAAW,OAAO,MAAM,CAAC,QAAQ,WAAW,SAAS;AAAA,MACzD;AAAA,IACF;AAAA,IACF,CAAC,aAAa;AAAA,EAChB;AAEA,QAAM,wBAA8B;AAAA,IAClC,CAAC,WAAmB,WAAoC;AACtD,YAAM,oBAAoB,oBAAoB,IAAI,SAAS;AAC3D,UAAI,mBAAmB;AACrB,mBAAW,mBAAmB,MAAM;AAAA,MACtC,WAAW,6BAA6B;AACtC,oCAA4B,WAAW,MAAM;AAAA,MAC/C,OAAO;AACL,cAAM,IAAI,MAAM,oCAAoC,SAAS,GAAG;AAAA,MAClE;AAAA,IACF;AAAA,IACA,CAAC,qBAAqB,YAAY,2BAA2B;AAAA,EAC/D;AAEA,QAAM,uBAA6B;AAAA,IACjC,CAAC,WAAmB,WAAoC;AACtD,UAAI,CAAC,WAAW,IAAI,SAAS,GAAG;AAC9B,cAAM,IAAI,MAAM,6BAA6B,SAAS,GAAG;AAAA,MAC3D;AAEA,iBAAW,WAAW,MAAM;AAAA,IAC9B;AAAA,IACA,CAAC,YAAY,UAAU;AAAA,EACzB;AAEA,QAAM,aAAmB;AAAA,IACvB,MACE,YAAY,IAAI,eAAe;AAAA,MAC7B,aAAa;AAAA,MACb;AAAA,MACA,MAAM;AAAA,IACR,CAAC;AAAA,IACH,CAAC,IAAI,YAAY,aAAa,eAAe,SAAS;AAAA,EACxD;AAEA,QAAM,QAAc,mBAAW,uBAAuB;AACtD,EAAM,kBAAU,MAAM;AACpB,QAAI,CAAC,OAAO;AACV,aAAO,MAAM;AAAA,MAAC;AAAA,IAChB;AACA,WAAO,MAAM,QAAQ,cAAc,UAAU;AAAA,EAC/C,GAAG,CAAC,OAAO,UAAU,CAAC;AAEtB,QAAM,0BAAgC;AAAA,IACpC,OAAO,eAAuB;AAC5B,YAAM,UAAmC,CAAC;AAE1C,YAAM,UAAU,CAAmB,KAAQ,sBAAmC;AAC5E,eAAO,IAAI,MAAM,KAAK;AAAA,UACpB,IAAI,QAAQ,MAAM,UAAU;AAC1B,gBAAI,OAAO,SAAS,UAAU;AAC5B,qBAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,YAC3C;AAEA,kBAAMC,UAAS,OAAO,IAAe;AAErC,gBAAIA,WAAU,OAAOA,YAAW,UAAU;AACxC,qBAAO,QAAQA,SAAQ,CAAC,GAAG,mBAAmB,IAAI,CAAC;AAAA,YACrD;AAEA,mBAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,UAC3C;AAAA,UACA,IAAI,QAAQ,MAAM,UAAU,UAAU;AACpC,gBAAI,OAAO,SAAS,UAAU;AAC5B,qBAAO,QAAQ,IAAI,QAAQ,MAAM,UAAU,QAAQ;AAAA,YACrD;AAEA,kBAAM,YAAY,CAAC,GAAG,mBAAmB,IAAI,EAAE,KAAK,GAAG;AACvD,oBAAQ,SAAS,IAAI;AACrB,mBAAO,QAAQ,IAAI,QAAQ,MAAM,UAAU,QAAQ;AAAA,UACrD;AAAA,QACF,CAAC;AAAA,MACH;AAEA,YAAM,cAAc,WAAW;AAC/B,YAAM,SAAS,iBAAiB,mBAAmB,YAAY,QAAQ,aAAa,CAAC,CAAC,CAAC;AAEvF,YAAM,OAAO;AAEb,iBAAW,CAAC,WAAW,QAAQ,KAAK,OAAO,QAAQ,OAAO,GAAG;AAC3D,8BAAsB,WAAW,EAAE,OAAO,SAAS,CAAC;AAAA,MACtD;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,WAAW,QAAQ,qBAAqB;AAAA,EAC3C;AAEA,EAAM,kBAAU,MAAM;AACpB,eAAW;AAAA,MACT;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,YAAY,QAAQ,CAAC;AAEpC,QAAM,oBAA0B;AAAA,IAC9B,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,YAAY,sBAAsB,qBAAqB;AAAA,EAC1D;AAEA,SACE,sCAAC,oBAAoB,UAApB,EAA6B,OAAO,cACnC,sCAAC,kBAAkB,UAAlB,EAA2B,OAAO,qBACjC,sCAAC,mCAAgC,OAAO,2BACrC,QACH,CACF,CACF;AAEJ;AAUA,SAAS,eAAe,EAAE,IAAI,MAAM,YAAY,UAAU,SAAS,GAAwB;AACzF,QAAM,MAAM,cAAc;AAC1B,QAAM,aAAa,cAAc;AACjC,QAAM,WAAWC,aAAY;AAE7B,QAAM,sBAA4B,gBAAQ,MAAM;AAC9C,UAAM,EAAE,CAAC,QAAQ,GAAG,mBAAmB,CAAC,EAAE,IAAW,cAAc,KAAK,IAAI;AAC5E,WAAO,cAAc,KAAK,kBAAkB,YAAY,QAAQ;AAAA,EAClE,GAAG,CAAC,YAAY,KAAK,MAAM,UAAU,QAAQ,CAAC;AAE9C,SACE,sCAAC,iBAAc,IAAQ,qBAA0C,cAC9D,QACH;AAEJ;AAEA,SAAS,UAAU,EAAE,MAAM,GAAmB;AAC5C,SACE,sCAACC,UAAA,EAAQ,OAAO,MAAM,WACpB;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA;AAAA,IAEA,sCAAC,aAAU,OAAM,WAAU,OAAO,EAAE,aAAa,EAAE,GAAG;AAAA,IAAE;AAAA,EAC1D,CACF;AAEJ;AAQA,SAAS,oBAAoB,EAAE,MAAM,iBAAiB,UAAU,GAA6B;AAC3F,QAAM,EAAE,qBAAqB,IAAU,mBAAW,iBAAiB,KAAK,CAAC;AACzE,EAAAC,WAAU,sBAAsB,kDAAkD;AAElF,QAAM,SAAS,KAAK;AAEpB,QAAM,kBAAkB,UAAU,iBAAiB;AACnD,QAAM;AAAA,IACJ,WAAW,CAAC;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,eACG,OAAO,IAAI,KAAa,UAAU,IAAI,KAAK,sBAAsB,IAAI;AAE9E,QAAM,QAAQ,mBAAmB,mBAAmB;AACpD,QAAM,eAAe,MAAM;AAE3B,QAAM,aAAwC,gBAAQ,MAAM;AAC1D,UAAM,uBAAuB,oBAAoB,IAAI,IAAI,iBAAiB,IAAI;AAC9E,UAAM,qBAAqB,kBAAkB,IAAI,IAAI,eAAe,IAAI;AACxE,UAAM,aAAkC,CAAC;AAGzC,QAAI;AAEJ,QAAI,UAAmB;AAEvB,eAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC1D,YAAM,YAAY,GAAG,MAAM,UAAU,QAAQ;AAC7C,YAAM,UAAU,aAAa,SAAS;AAEtC,UAAI,SAAS;AACX,mBAAW,QAAQ,IAAI,QAAQ;AAE/B,YAAI,QAAQ,YAAY,CAAC,wBAAwB,qBAAqB,IAAI,QAAQ,IAAI;AACpF,oBAAU;AAAA,QACZ,WACE,CAAC,SACD,QAAQ,UACP,CAAC,sBAAsB,mBAAmB,IAAI,QAAQ,IACvD;AACA,kBAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AAEA,UAAI,OAAO,WAAW,QAAQ,MAAM,eAAe,SAAS;AAC1D,mBAAW,QAAQ,IAAI,uBAAuB,OAAO;AAAA,MACvD;AAAA,IACF;AAEA,QAAI,OAAO;AACT,UAAI,WAAW;AACb,mBAAW,SAAS,IAAI;AAAA,MAC1B,OAAO;AACL,gBAAQ,MAAM,UAAU,KAAK,CAAC;AAAA,MAChC;AAAA,IACF;AAEA,QAAI,eAAe,SAAS;AAC1B,iBAAW,WAAW,IAAI;AAAA,IAC5B;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,WAAW,iBAAiB,cAAc,aAAa,mBAAmB,MAAM,CAAC;AAE/F,QAAM,mBAA8C,gBAAQ,MAAM;AAChE,UAAM,aAAkC,CAAC;AAEzC,eAAW,CAAC,UAAU,OAAO,KAAK,eAAe,CAAC,IAAI,OAAO,QAAQ,iBAAiB,GAAG;AACvF,YAAM,YAAY,GAAG,MAAM,WAAW,QAAQ;AAC9C,YAAM,UAAU,aAAa,SAAS;AACtC,UAAI,SAAS;AACX,mBAAW,QAAQ,IAAI,QAAQ;AAAA,MACjC;AAEA,UAAI,OAAO,WAAW,QAAQ,MAAM,eAAe,SAAS;AAC1D,mBAAW,QAAQ,IAAI,uBAAuB,OAAO;AAAA,MACvD;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,cAAc,cAAc,MAAM,CAAC;AAEvC,QAAM,mBAA+D;AAAA,IACnE,MACEC,eAAc,UAAU,CAAC,CAAC,KAAK,OAAO,MAAM;AAC1C,UAAI,CAAC,WAAW,CAAC,QAAQ,cAAc;AACrC,eAAO;AAAA,MACT;AAEA,YAAM,UAAU,CAAC,UAAe;AAC9B,cAAM,YAAY,GAAG,MAAM,UAAU,GAAG;AAExC,cAAM,QAAQ,QAAQ,kBAAkB,QAAQ,gBAAgB,KAAK,IAAI;AACzE,6BAAqB,WAAW,EAAE,MAAM,CAAC;AAAA,MAC3C;AAEA,aAAO,CAAC,QAAQ,cAAc,OAAO;AAAA,IACvC,CAAC;AAAA,IACH,CAAC,UAAU,QAAQ,oBAAoB;AAAA,EACzC;AAEA,QAAM,iBAAiB,iBAAiB;AACxC,QAAM,0BAA0B,2BAA2B;AAE3D,QAAM,gBAA4D,gBAAQ,MAAM;AAC9E,WAAOA,eAAc,UAAU,CAAC,CAAC,KAAK,OAAO,MAAM;AACjD,UAAI,CAAC,WAAW,QAAQ,SAAS,WAAW,CAAQ,UAAU,IAAI,GAAG;AACnE,eAAO;AAAA,MACT;AAEA,YAAM,SAAU,KAA4B,QAAQ,GAAG;AAEvD,UAAI,QAAQ,oBAAoB;AAC9B,cAAM,UAAU,YAAY;AAC1B,gBAAM,EAAE,MAAM,aAAa,CAAC,EAAE,IAAI,OAAO;AACzC,cAAI,MAAM;AACR,kBAAM,yBAAyB,MAAM,QAAQ;AAAA,cAC3C,OAAO,KAAK,UAAU,EAAE,IAAI,OAAO,kBAAkB;AACnD,sBAAM,iBAAiB,WAAW,aAAa;AAE/C,oBAAI,gBAAgB,gBAAgB;AAClC,wBAAM,SAAS,MAAM,wBAAwB,eAAe,cAAc;AAC1E,yBAAO,CAAC,eAAe,OAAO,KAAK;AAAA,gBACrC;AACA,uBAAO,CAAC,eAAe,cAAc;AAAA,cACvC,CAAC;AAAA,YACH;AAEA,kBAAM,mBAAmB,OAAO,YAAY,sBAAsB;AAElE,2BAAe,MAAM,gBAAgB;AAAA,UACvC;AAAA,QACF;AAEA,eAAO,CAAC,KAAK,OAAO;AAAA,MACtB;AAEA,UAAI,QAAQ,sBAAsB;AAChC,cAAM,UAAU,MAAM;AACpB,gBAAM,OAAO,OAAO;AACpB,gBAAM,iBAAiB,iBAAiB,IAAI;AAC5C,kCAAwB,cAAc;AAAA,QACxC;AAEA,eAAO,CAAC,KAAK,OAAO;AAAA,MACtB;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,UAAU,MAAM,gBAAgB,uBAAuB,CAAC;AAE5D,QAAM,gBAAsB,gBAAQ,MAAM;AACxC,UAAM,SAA0C,CAAC;AACjD,eAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,eAAe,GAAG;AAChE,aAAO,IAAI,IAAI,WAAW,IAAI,CAAC,UAAU,sCAAC,gBAAa,KAAK,MAAM,IAAI,QAAQ,MAAM,IAAI,CAAE;AAAA,IAC5F;AACA,WAAO;AAAA,EACT,GAAG,CAAC,eAAe,CAAC;AAEpB,QAAM,qBAA2B,gBAAQ,MAAM;AAC7C,QAAW,UAAU,IAAI,KAAK,UAAU,IAAI,GAAG;AAC7C,aAAO;AAAA,QACL,mBAAmB,gBAAgB,SAAS,IAAI,CAAC,UAAU,MAAM,QAAQ,UAAU;AAAA,MACrF;AAAA,IACF;AACA,WAAO,CAAC;AAAA,EACV,GAAG,CAAC,gBAAgB,UAAU,IAAI,CAAC;AAEnC,QAAM,QAAmC,gBAAQ,MAAM;AACrD,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF,GAAG,CAAC,YAAY,eAAe,oBAAoB,kBAAkB,aAAa,CAAC;AAEnF,QAAM,gBAAsB,eAA4B,KAAK;AAC7D,QAAM,CAAC,uBAAuB,wBAAwB,IAAU,iBAAS,KAAK;AAC9E,EAAM,kBAAU,MAAM;AACpB,WAAO,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,KAAK,OAAO,MAAM;AACnD,UAAI,CAAC,SAAS,kBAAkB;AAC9B;AAAA,MACF;AAEA,UACE,yBACA,cAAc,QAAQ,QAAQ,gBAAgB,MAAM,MAAM,QAAQ,gBAAgB,GAClF;AACA;AAAA,MACF;AAEA,YAAM,oBAAoB,GAAG,MAAM,UAAU,GAAG;AAChD,2BAAqB,mBAAmB,EAAE,OAAO,MAAM,QAAQ,gBAAgB,EAAE,CAAC;AAAA,IACpF,CAAC;AAED,kBAAc,UAAU;AACxB,6BAAyB,IAAI;AAAA,EAC/B,GAAG,CAAC,OAAO,UAAU,QAAQ,sBAAsB,qBAAqB,CAAC;AAEzE,QAAM,eAAqB,gBAAQ,MAAM;AACvC,UAAM,aAAkC,EAAE,GAAG,MAAM;AAEnD,eAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC1D,YAAMC,aAAY,SAAS,SAAS;AACpC,YAAM,aAAa,SAAS,SAAS;AAErC,UAAIA,cAAa,YAAY;AAC3B,cAAM,QAAQ,WAAW,QAAQ;AAEjC,YAAI,eAAe;AACnB,YAAI,QAAQ,SAAS,SAAS,SAAS;AACrC,yBAAe,sCAAC,SAAM,MAAM,YAAW,KAAM;AAAA,QAC/C,WAAW,QAAQ,SAAS,SAAS,UAAU,QAAQ,SAAS,SAAS,cAAc;AACrF,yBACE,sCAAC,eAAY,MAAM,UAAU,WAAW,QAAQ,SAAS,SAAS,gBAC/D,KACH;AAAA,QAEJ;AAEA,YAAI,YAAY;AACd,UAAO,gBAAgB,IAAI;AAC3B,qBAAW,QAAQ,IAAI,CAAC,KAAa,eAAwC;AAC3E,mBACE;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI,GAAG,KAAK,EAAE,UAAU,QAAQ,IAAI,GAAG;AAAA,gBACvC;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,cAEC;AAAA,YACH;AAAA,UAEJ;AAAA,QACF,OAAO;AACL,qBAAW,QAAQ,IAAI;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,MAAM,KAAK,CAAC;AAE1B,QAAM,QAAc,mBAAW,uBAAuB;AACtD,EAAM,kBAAU,MAAM;AACpB,QAAI,CAAC,OAAO;AACV,aAAO,MAAM;AAAA,MAAC;AAAA,IAChB;AACA,UAAM,gBAAgC,CAAC;AACvC,eAAW,YAAY,OAAO,KAAK,QAAQ,GAAG;AAC5C,YAAM,cAAc,MAAM,QAAQ,qBAAqB,GAAG,MAAM,UAAU,QAAQ,IAAI,KAAK;AAC3F,oBAAc,KAAK,WAAW;AAAA,IAChC;AACA,WAAO,MAAM;AACX,oBAAc,QAAQ,CAAC,gBAAgB,YAAY,CAAC;AAAA,IACtD;AAAA,EACF,GAAG,CAAC,QAAQ,UAAU,OAAO,KAAK,CAAC;AAEnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU,KAAK;AAAA,MACf,iBAAiB,UAAU,iBAAiB;AAAA,MAC5C;AAAA;AAAA,IAEC,eACC,sCAAC,aAAW,GAAG,cAAc,IAE7B;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,SAAS;AAAA,UACT,YAAY,iBAAiB;AAAA,UAC7B,gBAAgB,iBAAiB;AAAA,QACnC;AAAA;AAAA,MAEA,sCAAC,aAAW,GAAG,cAAc;AAAA,IAC/B;AAAA,EAEJ;AAEJ;AAMA,SAAS,SAAS,EAAE,SAAS,GAAkB;AAC7C,SACE,sCAAC,iBACC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,MACV,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,KAAK;AAAA,MACP;AAAA;AAAA,IAEC;AAAA,EACH,CACF;AAEJ;AAEA,IAAM,oBAAoB,gBAAgB,UAAU;AAAA,EAClD,UAAU;AAAA,IACR,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS,EAAE,MAAM,QAAQ;AAAA,IAC3B;AAAA,EACF;AACF,CAAC;AAOD,SAAS,UAAU,EAAE,MAAM,KAAK,GAAmB;AACjD,QAAM,EAAE,qBAAqB,IAAU,mBAAW,iBAAiB,KAAK,CAAC;AACzE,EAAAJ,WAAU,sBAAsB,uDAAuD;AAEvF,QAAM,EAAE,SAAS,IAAI,mBAAmB,mBAAmB;AAE3D,QAAM,SAAS;AAAA,IACb;AAAA,IACA,GAAG,KAAK,EAAE;AAAA,IACV,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC;AAAA,EACtC;AAEA,QAAM,iBAAmB,OAAK,KAAK,YAAY,0BAA0B;AACzE,QAAMK,WAAU,iBAAiB,UAAU,GAAG,KAAK,EAAE,WAAW,cAAc;AAE9E,QAAM,aAAa,OAAO,SAASA,SAAQ;AAC3C,QAAM,iBAAiB,OAAO,WAAWA,SAAQ;AAEjD,QAAM,cAAc,aAAa,MAAM,MAAM,OAAO,OAAO;AAAA,IACzD,GAAGA,SAAQ;AAAA,IACX,SAAS,CAAC,kBAAkB,CAAC;AAAA,EAC/B,CAAC;AAED,EAAM,kBAAU,MAAM;AACpB,UAAM,EAAE,WAAW,gBAAgB,OAAO,YAAY,MAAM,MAAM,GAAG,OAAO,IAAI;AAEhF,UAAM,QAAQ,cAAc;AAC5B,UAAM,YAAY,kBAAkB;AAEpC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,YAAM,YAAY,GAAG,KAAK,EAAE,IAAI,GAAG;AACnC,2BAAqB,WAAW,EAAE,MAAM,CAAC;AAAA,IAC3C;AAIA,yBAAqB,GAAG,KAAK,EAAE,cAAc,EAAE,OAAO,UAAU,CAAC;AACjE,yBAAqB,GAAG,KAAK,EAAE,UAAU;AAAA,MACvC,OAAO,QAAQ,OAAO,MAAM,WAAW,KAAK,IAAI;AAAA,IAClD,CAAC;AACD,UAAM,iBAAiB,EAAE,SAAS,WAAW,MAAM;AACnD,yBAAqB,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,gBAAgB,OAAO,KAAK,CAAC;AAC1E,yBAAqB,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,gBAAgB,OAAO,KAAK,CAAC;AAAA,EAC5E,GAAG,CAAC,KAAK,MAAM,KAAK,IAAI,aAAa,sBAAsB,YAAY,cAAc,CAAC;AAEtF,SAAO;AACT;AAOA,SAAS,aAAa,EAAE,MAAM,KAAK,GAAsB;AACvD,QAAM,EAAE,qBAAqB,IAAU,mBAAW,iBAAiB,KAAK,CAAC;AACzE,EAAAL,WAAU,sBAAsB,0DAA0D;AAE1F,QAAM,EAAE,SAAS,IAAI,mBAAmB,mBAAmB;AAE3D,QAAM,UAAU,KAAK;AACrB,QAAM,EAAE,OAAO,OAAO,IAAI;AAAA,IACxB;AAAA,IACA,GAAG,KAAK,EAAE;AAAA,IACV,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC;AAAA,EACtC;AAEA,QAAM;AAAA,IACJ;AAAA,IACA,MAAM,eAAeN;AAAA,IACrB,OAAO;AAAA,IACP;AAAA,EACF,IAAIY;AAAA,IACF,OAAO,YAAiB,CAAC,MACvB,oBAAoB;AAAA,MAClB,UAAU,KAAK;AAAA,MACf,WAAW,KAAK;AAAA,MAChB,QAAQ,EAAE,GAAG,QAAQ,GAAG,UAAU;AAAA,IACpC,CAAC;AAAA,IACH;AAAA,MACE,aAAa,CAAC,SAAS,MAAM;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,EAAE,MAAM,OAAO,SAAS,IAAI;AAElC,QAAM,QAAQ,YAAY;AAG1B,QAAM,iBAAiC;AAAA,IACrC,OAAO;AAAA,MACL;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,MAAM,MAAM,QAAQ,IAAI,IAAI,OAAOb;AAAA,MACnC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,MAAM;AACb,cAAM,IAAI,MAAM,4CAA4C;AAAA,MAC9D;AAAA,IACF;AAAA,IACA,CAAC,WAAW,OAAO,aAAa,IAAI;AAAA,EACtC;AAEA,EAAM,kBAAU,MAAM;AACpB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,cAAc,GAAG;AACzD,YAAM,YAAY,GAAG,KAAK,EAAE,IAAI,GAAG;AACnC,2BAAqB,WAAW,EAAE,MAAM,CAAC;AAAA,IAC3C;AAAA,EACF,GAAG,CAAC,KAAK,IAAI,gBAAgB,oBAAoB,CAAC;AAElD,SAAO;AACT;AAOA,SAAS,UAAU,EAAE,MAAM,KAAK,GAAmB;AACjD,QAAM,OAAyB,KAAK,WAAW,QAAQ;AACvD,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,sCAAC,aAAU,MAAY,MAAY;AAAA,IAC5C,KAAK;AACH,aAAO,sCAAC,gBAAa,MAAY,MAAY;AAAA,IAC/C;AACE,YAAM,IAAI,MAAM,4BAA4B,IAAI,GAAG;AAAA,EACvD;AACF;AAEA,SAAS,aAAa,EAAE,OAAO,GAAsB;AACnD,QAAM,MAAM,cAAc;AAC1B,QAAM,OAAc,QAAQ,KAAK,QAAQ,MAAM;AAC/C,QAAM,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,EAAE,IAAW,cAAc,KAAK,IAAI;AAEtE,eAAa,KAAK,WAAW,KAAK;AAElC,QAAM,WAAWK,aAAY;AAC7B,QAAM,aAAa,cAAc;AAEjC,QAAM,sBAA4B;AAAA,IAChC,MAAM,cAAc,KAAK,MAAM,YAAY,QAAQ;AAAA,IACnD,CAAC,YAAY,KAAK,UAAU,IAAI;AAAA,EAClC;AAEA,QAAM,eAAqB,mBAAW,mBAAmB;AAEzD,QAAM,WAAW,SAAS,CAAC,EAAE,OAAO,UAAU,MAAM;AAClD,QAAI,cAAc;AAChB,mBAAa,KAAK,oBAAoB;AAAA,QACpC,WAAW,MAAM;AAAA,QACjB,iBAAiB;AAAA,MACnB,CAAC;AACD,mBAAa,KAAK,uBAAuB,EAAE,UAAU,MAAM,SAAS,CAAC;AAAA,IACvE;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,iBAAiB,CAAC,OAAO;AAC7C,QAAI,cAAc;AAChB,mBAAa,KAAK,aAAa,EAAE,GAAG,CAAC;AAAA,IACvC;AAAA,EACF,CAAC;AAED,SACE,sCAAC,wBAAwB,UAAxB,EAAiC,OAAO,iBACvC,sCAAC,iBAAc,IAAI,UAAU,qBAA0C,YACrE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,iBAAiB,EAAE,SAAS;AAAA,MAC5B,WAAW;AAAA;AAAA,EACb,GACC,QAAQ,IAAI,CAAC,SACZ,sCAAC,aAAU,KAAK,KAAK,IAAI,MAAY,MAAY,CAClD,CACH,CACF;AAEJ;AAEA,SAAS,eAAe;AACtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA;AAAA,IAEA,sCAACS,aAAA,EAAW,SAAQ,QAAK,WAAS;AAAA,IAClC,sCAACA,aAAA,MAAW,6CAAgD;AAAA,EAC9D;AAEJ;AAOA,SAAS,cAAc,EAAE,OAAO,YAAY,GAAuB;AACjE,QAAM,wBAAwB,sCAAC,YAAS,IAAI,UAAU,YAAY,EAAE,IAAI,SAAO,MAAC;AAChF,SACE,sCAAC,cACE,MAAM,IAAI,CAAC,SACV,sCAAO,kBAAN,EAAe,KAAK,KAAK,MACxB;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,UAAU,KAAK,EAAE;AAAA,MACvB,SACE;AAAA,QAAC;AAAA;AAAA,UACC,QAAQ,KAAK;AAAA,UAGb,KAAK,KAAK;AAAA;AAAA,MACZ;AAAA;AAAA,EAEJ,CACF,CACD,GACA,MAAM,IAAI,CAAC,SACV,sCAAO,kBAAN,EAAe,KAAK,KAAK,MACxB;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,UAAU,KAAK,IAAI;AAAA,MACzB,SAAS,sCAAC,YAAS,IAAI,UAAU,KAAK,EAAE,IAAI,SAAO,MAAC;AAAA;AAAA,EACtD,CACF,CACD,GACD,sCAAC,SAAM,MAAK,UAAS,SAAS,uBAAuB,GACrD,sCAAC,SAAM,MAAK,KAAI,SAAS,uBAAuB,GAChD,sCAAC,SAAM,MAAK,KAAI,SAAS,sCAAC,kBAAa,GAAI,CAC7C;AAEJ;AAEA,IAAM,mBAAmB,OAAO,KAAK,EAAE;AAAA,EACrC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAClB,CAAC;AAED,SAAS,aAAa;AACpB,SAAO,sCAAC,oBAAe;AACzB;AAEA,SAAS,SAAS,EAAE,MAAM,GAAkB;AAC1C,SACE,sCAAC,wBACC,sCAAC,SAAM,UAAS,WACd,sCAAC,kBAAW,sBAAoB,GAChC,sCAAC,WAAK,MAAM,OAAQ,GACpB,sCAAC,WAAK,MAAM,KAAM,CACpB,CACF;AAEJ;AAEO,IAAMC,eAAc,IAAIC,aAAY;AAAA,EACzC,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,OAAO;AAAA,MACP,WAAW,KAAK;AAAA,IAClB;AAAA,EACF;AACF,CAAC;AAOD,SAAS,iBAAiB,EAAE,KAAK,UAAU,eAAe,KAAK,GAA0B;AACvF,QAAM,OAAc,OAAO,GAAG;AAC9B,QAAM,EAAE,QAAQ,CAAC,EAAE,IAAW,cAAc,KAAK,IAAI;AAErD,QAAM,WAAWX,aAAY;AAC7B,QAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,QAAM,YAAkB,gBAAQ,MAAM,IAAI,gBAAgB,MAAM,GAAG,CAAC,MAAM,CAAC;AAE3E,QAAM,YAAY,UAAU,oBAAoB,WAAW,QAAQ,EAAE;AACrE,QAAM,SAAS,WAAW,OAAO;AAEjC,QAAM,cAAc,MAAM,CAAC;AAC3B,QAAM,OAAO,SAAgB,aAAa,KAAK,QAAkB,MAAM,IAAI;AAE3E,QAAM,cAAc,UAAU,IAAI,iBAAiB,KAAK,MAAM,WAAW;AAEzE,QAAM,WAAW,gBAAgB,gBAAgB;AAEjD,QAAM,oBAAoB,aAAa,CAAC;AAExC,SACE,sCAAO,kBAAN,MACE,oBAAoB,sCAAC,iBAAc,QAAgB,IAAK,MACzD,sCAACK,MAAA,EAAI,IAAI,EAAE,MAAM,GAAG,SAAS,OAAO,KACjC,YAAY,MAAM,SAAS,IAC1B,sCAAC,iBAAc,OAAc,SAAS,mBAAmB,IACvD,MACJ,sCAAC,iBAAc,OAAc,aAA0B,CACzD,CACF;AAEJ;AAce,SAAR,WAA4B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,GAAoB;AAClB,QAAM,EAAE,IAAI,IAAI;AAEhB,QAAM,CAAC,YAAY,aAAa,IAAU,iBAAmC,IAAI;AAEjF,QAAM,CAAC,oBAAoB,qBAAqB,IAAU,iBAAS,CAAC;AAEpE,EAAM,kBAAU,MAAM,sBAAsB,CAAC,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AAEpE,QAAM,EAAE,OAAO,cAAc,QAAQ,eAAe,IAAI,WAAW,KAAK;AAExE,EAAM,kBAAU,MAAM;AACpB,IAAC,OAAe,iBAAiB,MAAM,eAAe;AAAA,EACxD,GAAG,CAAC,cAAc,CAAC;AAEnB,EAAM,kBAAU,MAAM;AACpB,mBAAe,KAAK,EAAE;AAAA,MAAK,CAAC,mBAC1B,cAAc,EAAE,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAAA,IAC5D;AAAA,EACF,GAAG,CAAC,gBAAgB,KAAK,CAAC;AAE1B,SACE,sCAAC,oBAAiB,OAChB,sCAAC,eAAY,mBAAiB,MAAC,GAC/B,sCAAC,WAAQ,KAAK,WACX,aACC,sCAAC,6BAA0B,OAAO,cAChC,sCAAC,sBAAmB,OAAO,OACzB,sCAAC,iBAAc,mBAAmB,YAChC,sCAAC,8BAA2B,OAAO,sBACjC,sCAAO,kBAAN,EAAe,UAAU,sCAAC,gBAAW,KACpC,sCAAC,uBAAoB,QAAQK,gBAC3B,sCAAC,iBAAc,YACb,sCAAC,oBAAiB,KAAU,UAAoB,CAClD,GACC,eAAe,sCAAC,gCAA6B,eAAe,OAAO,IAAK,IAC3E,CACF,CACF,CACF,CACF,CACF,IAEA,sCAAC,gBAAW,GAEd,sCAAC,iBAAc,IAAI,wBAAwB,CAC7C,CACF;AAEJ;","names":["React","Stack","Box","Tooltip","Typography","QueryClient","useMutation","useLocation","mapProperties","mapValues","invariant","React","mapValues","mapValues","React","options","React","React","Button","React","Box","Toolbar","Tooltip","Chip","Link","React","ListItemText","Box","invariant","React","invariant","useQuery","options","useQuery","invariant","default","Box","ListItemText","invariant","default","React","IconButton","Menu","MenuItem","ListItemText","Tooltip","Tooltip","IconButton","Menu","MenuItem","ListItemText","React","createTheme","deepmerge","createTheme","React","ThemeProvider","createTheme","deepmerge","Toolbar","Box","Tooltip","Link","Chip","ThemeProvider","Button","React","EMPTY_ARRAY","EMPTY_OBJECT","mapValues","nestedBindablePaths","result","useLocation","Tooltip","invariant","mapProperties","isElement","Box","Stack","options","useMutation","Typography","queryClient","QueryClient"]}