From 947751431ec2d9e01a9d42d4ce06a3a97a21a448 Mon Sep 17 00:00:00 2001 From: bicochan Date: Wed, 25 Feb 2026 14:42:16 +0900 Subject: [PATCH 01/39] =?UTF-8?q?[as]=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/.env.example | 5 + apps/as/.eslintrc.json | 3 + apps/as/.gitignore | 36 +++ apps/as/.gitkeep | 0 apps/as/.prettierrc | 8 + apps/as/README.md | 89 ++++++ apps/as/app/globals.css | 27 ++ apps/as/app/layout.tsx | 22 ++ apps/as/app/page.tsx | 10 + apps/as/app/providers.tsx | 18 ++ apps/as/entities/README.md | 43 +++ apps/as/eslint.config.mjs | 18 ++ apps/as/features/README.md | 36 +++ apps/as/next.config.ts | 8 + apps/as/package.json | 34 +++ apps/as/postcss.config.mjs | 8 + apps/as/shared/api/client.ts | 9 + apps/as/shared/api/index.ts | 1 + apps/as/shared/config/env.ts | 11 + apps/as/shared/config/index.ts | 1 + apps/as/shared/lib/dayjs.ts | 12 + apps/as/shared/lib/index.ts | 2 + apps/as/shared/lib/query-client.ts | 11 + apps/as/shared/types/index.ts | 29 ++ apps/as/shared/ui/button.tsx | 36 +++ apps/as/shared/ui/index.ts | 1 + apps/as/tailwind.config.ts | 23 ++ apps/as/tsconfig.json | 35 +++ apps/as/widgets/README.md | 35 +++ pnpm-lock.yaml | 420 ++++++++++++++++++----------- 30 files changed, 832 insertions(+), 159 deletions(-) create mode 100644 apps/as/.env.example create mode 100644 apps/as/.eslintrc.json create mode 100644 apps/as/.gitignore delete mode 100644 apps/as/.gitkeep create mode 100644 apps/as/.prettierrc create mode 100644 apps/as/README.md create mode 100644 apps/as/app/globals.css create mode 100644 apps/as/app/layout.tsx create mode 100644 apps/as/app/page.tsx create mode 100644 apps/as/app/providers.tsx create mode 100644 apps/as/entities/README.md create mode 100644 apps/as/eslint.config.mjs create mode 100644 apps/as/features/README.md create mode 100644 apps/as/next.config.ts create mode 100644 apps/as/package.json create mode 100644 apps/as/postcss.config.mjs create mode 100644 apps/as/shared/api/client.ts create mode 100644 apps/as/shared/api/index.ts create mode 100644 apps/as/shared/config/env.ts create mode 100644 apps/as/shared/config/index.ts create mode 100644 apps/as/shared/lib/dayjs.ts create mode 100644 apps/as/shared/lib/index.ts create mode 100644 apps/as/shared/lib/query-client.ts create mode 100644 apps/as/shared/types/index.ts create mode 100644 apps/as/shared/ui/button.tsx create mode 100644 apps/as/shared/ui/index.ts create mode 100644 apps/as/tailwind.config.ts create mode 100644 apps/as/tsconfig.json create mode 100644 apps/as/widgets/README.md diff --git a/apps/as/.env.example b/apps/as/.env.example new file mode 100644 index 000000000..f5cfcfb89 --- /dev/null +++ b/apps/as/.env.example @@ -0,0 +1,5 @@ +# apps/as/shared/config/env.ts 참고 +NEXT_PUBLIC_PORT=3000 +NEXT_PUBLIC_PROXY_HOST=http://localhost:3000 +NEXT_PUBLIC_SITE_ID=AS +NEXT_PUBLIC_SERVER_API_URL=http://192.168.0.102:8000 diff --git a/apps/as/.eslintrc.json b/apps/as/.eslintrc.json new file mode 100644 index 000000000..ea782d70a --- /dev/null +++ b/apps/as/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/apps/as/.gitignore b/apps/as/.gitignore new file mode 100644 index 000000000..fd3dbb571 --- /dev/null +++ b/apps/as/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/as/.gitkeep b/apps/as/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/as/.prettierrc b/apps/as/.prettierrc new file mode 100644 index 000000000..059b4e33c --- /dev/null +++ b/apps/as/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "trailingComma": "all", + "singleQuote": false, + "printWidth": 100, + "tabWidth": 2, + "plugins": ["prettier-plugin-tailwindcss"] +} diff --git a/apps/as/README.md b/apps/as/README.md new file mode 100644 index 000000000..95a9b7a31 --- /dev/null +++ b/apps/as/README.md @@ -0,0 +1,89 @@ +# AS Application + +Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 + +## 기술 스택 + +- **프레임워크**: Next.js 15 + TypeScript +- **스타일링**: Tailwind CSS +- **상태관리**: Zustand +- **데이터 페칭**: TanStack Query (React Query) +- **폼 관리**: React Hook Form + Zod +- **테이블**: TanStack Table +- **HTTP 클라이언트**: Axios +- **날짜 처리**: Day.js + +## 프로젝트 구조 (FSD) + +``` +as/ +├── app/ # Next.js App Router (라우팅) +│ ├── layout.tsx +│ ├── page.tsx +│ ├── globals.css +│ └── providers.tsx +├── shared/ # 공통 코드 레이어 +│ ├── api/ # API 클라이언트 설정 +│ ├── config/ # 환경 설정 +│ ├── lib/ # 유틸리티 라이브러리 +│ ├── types/ # 공통 타입 정의 +│ └── ui/ # 공통 UI 컴포넌트 +├── entities/ # 비즈니스 엔티티 +├── features/ # 비즈니스 기능 +└── widgets/ # 복합 UI 블록 +``` + +## FSD 레이어 설명 + +### 1. Shared +- 프로젝트 전체에서 재사용되는 코드 +- 비즈니스 로직 없음 +- API 클라이언트, 유틸리티, UI 컴포넌트 등 + +### 2. Entities +- 비즈니스 엔티티 (예: User, Product, Order) +- 엔티티 모델, 타입, API 호출 + +### 3. Features +- 사용자 시나리오와 기능 (예: 로그인, 상품 검색) +- 한 가지 기능에 집중 + +### 4. Widgets +- 여러 features와 entities를 조합한 복잡한 UI 블록 +- 독립적으로 작동 가능한 UI 컴포넌트 + +### 5. App +- Next.js App Router +- 라우팅 및 전역 providers 설정 + +## 시작하기 + +```bash +# 의존성 설치 +npm install + +# 개발 서버 실행 +npm run dev + +# 프로덕션 빌드 +npm run build + +# 프로덕션 서버 실행 +npm start +``` + +## 환경 변수 + +`.env.local` 파일 생성: + +```env +NEXT_PUBLIC_API_URL=http://localhost:3000/api +``` + +## 코드 규칙 + +- TypeScript 사용 (strict mode) +- 함수형 컴포넌트 사용 +- Named exports 선호 +- Tailwind CSS 사용 +- ESLint + Prettier 적용 diff --git a/apps/as/app/globals.css b/apps/as/app/globals.css new file mode 100644 index 000000000..13d40b892 --- /dev/null +++ b/apps/as/app/globals.css @@ -0,0 +1,27 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --background: #ffffff; + --foreground: #171717; +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +body { + color: var(--foreground); + background: var(--background); + font-family: Arial, Helvetica, sans-serif; +} + +@layer utilities { + .text-balance { + text-wrap: balance; + } +} diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx new file mode 100644 index 000000000..719c143d3 --- /dev/null +++ b/apps/as/app/layout.tsx @@ -0,0 +1,22 @@ +import type { Metadata } from "next"; +import { Providers } from "./providers"; +import "./globals.css"; + +export const metadata: Metadata = { + title: "AS Application", + description: "Next.js application with FSD architecture", +}; + +interface RootLayoutProps { + children: React.ReactNode; +} + +export default function RootLayout({ children }: RootLayoutProps) { + return ( + + + {children} + + + ); +} diff --git a/apps/as/app/page.tsx b/apps/as/app/page.tsx new file mode 100644 index 000000000..7e739afaa --- /dev/null +++ b/apps/as/app/page.tsx @@ -0,0 +1,10 @@ +export default function HomePage() { + return ( +
+
+

AS Application

+

Feature Sliced Design Architecture with Next.js

+
+
+ ); +} diff --git a/apps/as/app/providers.tsx b/apps/as/app/providers.tsx new file mode 100644 index 000000000..bc12c443b --- /dev/null +++ b/apps/as/app/providers.tsx @@ -0,0 +1,18 @@ +"use client"; + +import { QueryClientProvider } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import { queryClient } from "@/shared/lib"; + +interface ProvidersProps { + children: React.ReactNode; +} + +export function Providers({ children }: ProvidersProps) { + return ( + + {children} + + + ); +} diff --git a/apps/as/entities/README.md b/apps/as/entities/README.md new file mode 100644 index 000000000..bf042e60a --- /dev/null +++ b/apps/as/entities/README.md @@ -0,0 +1,43 @@ +# Entities Layer + +비즈니스 엔티티를 정의하는 레이어입니다. + +## 구조 + +각 엔티티는 다음 구조를 따릅니다: + +``` +entities/ +└── [entity-name]/ + ├── api/ # API 호출 함수 + ├── model/ # 상태 관리 (zustand) + ├── types/ # 타입 정의 + ├── ui/ # UI 컴포넌트 (선택적) + └── index.ts # Public API +``` + +## 예시 + +```typescript +// entities/user/types/index.ts +export interface User { + id: string; + name: string; + email: string; +} + +// entities/user/api/index.ts +export async function getUser(id: string): Promise { + // API 호출 +} + +// entities/user/index.ts +export { type User } from "./types"; +export { getUser } from "./api"; +``` + +## 규칙 + +1. 엔티티는 다른 엔티티에 의존할 수 있습니다 +2. Features나 Widgets에 의존하면 안 됩니다 +3. 비즈니스 로직은 최소화하고 데이터 관리에 집중합니다 diff --git a/apps/as/eslint.config.mjs b/apps/as/eslint.config.mjs new file mode 100644 index 000000000..05e726d1b --- /dev/null +++ b/apps/as/eslint.config.mjs @@ -0,0 +1,18 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import nextVitals from "eslint-config-next/core-web-vitals"; +import nextTs from "eslint-config-next/typescript"; + +const eslintConfig = defineConfig([ + ...nextVitals, + ...nextTs, + // Override default ignores of eslint-config-next. + globalIgnores([ + // Default ignores of eslint-config-next: + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ]), +]); + +export default eslintConfig; diff --git a/apps/as/features/README.md b/apps/as/features/README.md new file mode 100644 index 000000000..37b83407e --- /dev/null +++ b/apps/as/features/README.md @@ -0,0 +1,36 @@ +# Features Layer + +사용자 인터랙션과 비즈니스 기능을 구현하는 레이어입니다. + +## 구조 + +각 기능은 다음 구조를 따릅니다: + +``` +features/ +└── [feature-name]/ + ├── api/ # API 호출 (선택적) + ├── model/ # 상태 관리 + ├── ui/ # UI 컴포넌트 + ├── lib/ # 유틸리티 함수 + └── index.ts # Public API +``` + +## 예시 + +```typescript +// features/auth-login/ui/login-form.tsx +export function LoginForm() { + // 로그인 폼 UI +} + +// features/auth-login/index.ts +export { LoginForm } from "./ui/login-form"; +``` + +## 규칙 + +1. 하나의 기능에만 집중합니다 +2. Entities와 Shared에만 의존할 수 있습니다 +3. 다른 Features에 직접 의존하면 안 됩니다 +4. 재사용 가능한 기능으로 설계합니다 diff --git a/apps/as/next.config.ts b/apps/as/next.config.ts new file mode 100644 index 000000000..8864de0e7 --- /dev/null +++ b/apps/as/next.config.ts @@ -0,0 +1,8 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + reactStrictMode: true, + transpilePackages: ["@common/assets"], +}; + +export default nextConfig; diff --git a/apps/as/package.json b/apps/as/package.json new file mode 100644 index 000000000..c50f002ea --- /dev/null +++ b/apps/as/package.json @@ -0,0 +1,34 @@ +{ + "name": "as", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@common/assets": "workspace:*", + "@common/components": "workspace:*", + "@common/network": "workspace:*", + "@hookform/resolvers": "^4.1.3", + "@tanstack/react-query": "^5.75.5", + "@tanstack/react-query-devtools": "^5.75.5", + "@tanstack/react-table": "^8.21.2", + "axios": "^1.8.1", + "dayjs": "^1.11.13", + "next": "15.3.8", + "react-hook-form": "^7.54.2", + "zod": "^3.24.2" + }, + "devDependencies": { + "eslint": "^9.0.0", + "eslint-config-next": "15.4.0", + "postcss": "^8.4.49", + "prettier": "^3.4.2", + "prettier-plugin-tailwindcss": "^0.6.11", + "tailwindcss": "^3.4.14", + "typescript": "^5.7.2" + } +} diff --git a/apps/as/postcss.config.mjs b/apps/as/postcss.config.mjs new file mode 100644 index 000000000..1a69fd2a4 --- /dev/null +++ b/apps/as/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/apps/as/shared/api/client.ts b/apps/as/shared/api/client.ts new file mode 100644 index 000000000..d7c4a8f1d --- /dev/null +++ b/apps/as/shared/api/client.ts @@ -0,0 +1,9 @@ +import { Client } from "@common/network"; +import { PROXY_HOST, SITE_ID } from "@/shared/config/env"; + +const BASE_URL = `${PROXY_HOST}/server`; + +export const apiClient = Client.getInstance({ + baseURL: BASE_URL, + siteId: SITE_ID, +}); diff --git a/apps/as/shared/api/index.ts b/apps/as/shared/api/index.ts new file mode 100644 index 000000000..c5eb98066 --- /dev/null +++ b/apps/as/shared/api/index.ts @@ -0,0 +1 @@ +export { apiClient } from "./client"; diff --git a/apps/as/shared/config/env.ts b/apps/as/shared/config/env.ts new file mode 100644 index 000000000..4f08c722a --- /dev/null +++ b/apps/as/shared/config/env.ts @@ -0,0 +1,11 @@ +export const PORT = process.env.NEXT_PUBLIC_PORT || "3000"; +export const PROXY_HOST = + process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; +export const SERVER_API_URL = process.env.NEXT_PUBLIC_SERVER_API_URL; +export const SITE_ID = process.env.NEXT_PUBLIC_SITE_ID || "AS"; +export const CLAIM_NAME = process.env.NEXT_PUBLIC_CLAIM_NAME || "Authorization"; +export const ACCESS_TOKEN = + process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; +export const REFRESH_TOKEN = + process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; +export const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id"; diff --git a/apps/as/shared/config/index.ts b/apps/as/shared/config/index.ts new file mode 100644 index 000000000..c76f8cd47 --- /dev/null +++ b/apps/as/shared/config/index.ts @@ -0,0 +1 @@ +export * from "./env"; diff --git a/apps/as/shared/lib/dayjs.ts b/apps/as/shared/lib/dayjs.ts new file mode 100644 index 000000000..28b3f908b --- /dev/null +++ b/apps/as/shared/lib/dayjs.ts @@ -0,0 +1,12 @@ +import dayjs from "dayjs"; +import "dayjs/locale/ko"; +import utc from "dayjs/plugin/utc"; +import timezone from "dayjs/plugin/timezone"; +import relativeTime from "dayjs/plugin/relativeTime"; + +dayjs.extend(utc); +dayjs.extend(timezone); +dayjs.extend(relativeTime); +dayjs.locale("ko"); + +export { dayjs }; diff --git a/apps/as/shared/lib/index.ts b/apps/as/shared/lib/index.ts new file mode 100644 index 000000000..51e9c2c5d --- /dev/null +++ b/apps/as/shared/lib/index.ts @@ -0,0 +1,2 @@ +export { queryClient } from "./query-client"; +export { dayjs } from "./dayjs"; diff --git a/apps/as/shared/lib/query-client.ts b/apps/as/shared/lib/query-client.ts new file mode 100644 index 000000000..0da2fb899 --- /dev/null +++ b/apps/as/shared/lib/query-client.ts @@ -0,0 +1,11 @@ +import { QueryClient } from "@tanstack/react-query"; + +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: 1, + refetchOnWindowFocus: false, + staleTime: 60 * 1000, + }, + }, +}); diff --git a/apps/as/shared/types/index.ts b/apps/as/shared/types/index.ts new file mode 100644 index 000000000..15ddf4254 --- /dev/null +++ b/apps/as/shared/types/index.ts @@ -0,0 +1,29 @@ +export interface BaseEntity { + id: string; + createdAt: string; + updatedAt: string; +} + +export interface PaginationParams { + page: number; + limit: number; +} + +export interface PaginationResponse { + data: T[]; + total: number; + page: number; + limit: number; +} + +export interface ApiResponse { + success: boolean; + data: T; + message?: string; +} + +export interface ApiError { + message: string; + code?: string; + status?: number; +} diff --git a/apps/as/shared/ui/button.tsx b/apps/as/shared/ui/button.tsx new file mode 100644 index 000000000..3d9fb0bf5 --- /dev/null +++ b/apps/as/shared/ui/button.tsx @@ -0,0 +1,36 @@ +import { ButtonHTMLAttributes, forwardRef } from "react"; + +interface ButtonProps extends ButtonHTMLAttributes { + variant?: "primary" | "secondary" | "outline"; + size?: "sm" | "md" | "lg"; +} + +export const Button = forwardRef( + ({ className = "", variant = "primary", size = "md", children, ...props }, ref) => { + const baseStyles = "rounded-md font-medium transition-colors focus:outline-none focus:ring-2"; + + const variantStyles = { + primary: "bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500", + secondary: "bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500", + outline: "border border-gray-300 bg-transparent hover:bg-gray-50 focus:ring-gray-500", + }; + + const sizeStyles = { + sm: "px-3 py-1.5 text-sm", + md: "px-4 py-2 text-base", + lg: "px-6 py-3 text-lg", + }; + + return ( + + ); + }, +); + +Button.displayName = "Button"; diff --git a/apps/as/shared/ui/index.ts b/apps/as/shared/ui/index.ts new file mode 100644 index 000000000..812a8ab55 --- /dev/null +++ b/apps/as/shared/ui/index.ts @@ -0,0 +1 @@ +export { Button } from "./button"; diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts new file mode 100644 index 000000000..24811c1a4 --- /dev/null +++ b/apps/as/tailwind.config.ts @@ -0,0 +1,23 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./shared/**/*.{js,ts,jsx,tsx,mdx}", + "./entities/**/*.{js,ts,jsx,tsx,mdx}", + "./features/**/*.{js,ts,jsx,tsx,mdx}", + "./widgets/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + extend: { + colors: { + background: "var(--background)", + foreground: "var(--foreground)", + }, + }, + }, + plugins: [], +}; + +export default config; diff --git a/apps/as/tsconfig.json b/apps/as/tsconfig.json new file mode 100644 index 000000000..1668155c8 --- /dev/null +++ b/apps/as/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"], + "@/app/*": ["./app/*"], + "@/shared/*": ["./shared/*"], + "@/entities/*": ["./entities/*"], + "@/features/*": ["./features/*"], + "@/widgets/*": ["./widgets/*"], + "@/pages/*": ["./pages/*"], + "@common/components": ["../../../packages/common/components/dist/"], + "@common/network": ["../../../packages/common/network/"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/apps/as/widgets/README.md b/apps/as/widgets/README.md new file mode 100644 index 000000000..7da206bc5 --- /dev/null +++ b/apps/as/widgets/README.md @@ -0,0 +1,35 @@ +# Widgets Layer + +여러 features와 entities를 조합한 독립적인 UI 블록입니다. + +## 구조 + +각 위젯은 다음 구조를 따릅니다: + +``` +widgets/ +└── [widget-name]/ + ├── ui/ # UI 컴포넌트 + ├── model/ # 상태 관리 (선택적) + ├── lib/ # 유틸리티 함수 (선택적) + └── index.ts # Public API +``` + +## 예시 + +```typescript +// widgets/header/ui/header.tsx +export function Header() { + // 헤더 UI (로고, 네비게이션, 사용자 메뉴 등) +} + +// widgets/header/index.ts +export { Header } from "./ui/header"; +``` + +## 규칙 + +1. 여러 Features와 Entities를 조합할 수 있습니다 +2. 다른 Widgets에 직접 의존하면 안 됩니다 +3. 독립적으로 작동할 수 있어야 합니다 +4. 페이지 레벨 레이아웃 컴포넌트로 사용됩니다 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb4b94fd8..18702cf33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,6 +51,67 @@ importers: specifier: 2.4.2 version: 2.4.2 + apps/as: + dependencies: + '@common/assets': + specifier: workspace:* + version: link:../../packages/common/assets + '@common/components': + specifier: workspace:* + version: link:../../packages/common/components + '@common/network': + specifier: workspace:* + version: link:../../packages/common/network + '@hookform/resolvers': + specifier: ^4.1.3 + version: 4.1.3(react-hook-form@7.68.0(react@19.2.3)) + '@tanstack/react-query': + specifier: ^5.75.5 + version: 5.90.12(react@19.2.3) + '@tanstack/react-query-devtools': + specifier: ^5.75.5 + version: 5.91.1(@tanstack/react-query@5.90.12(react@19.2.3))(react@19.2.3) + '@tanstack/react-table': + specifier: ^8.21.2 + version: 8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + axios: + specifier: ^1.8.1 + version: 1.8.1 + dayjs: + specifier: ^1.11.13 + version: 1.11.19 + next: + specifier: 15.3.8 + version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-hook-form: + specifier: ^7.54.2 + version: 7.68.0(react@19.2.3) + zod: + specifier: ^3.24.2 + version: 3.25.76 + devDependencies: + eslint: + specifier: ^9.0.0 + version: 9.39.2(jiti@1.21.7) + eslint-config-next: + specifier: 15.4.0 + version: 15.4.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + postcss: + specifier: ^8.4.49 + version: 8.5.6 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(prettier@3.7.4) + tailwindcss: + specifier: ^3.4.14 + version: 3.4.19(yaml@2.8.2) + typescript: + specifier: ^5.7.2 + version: 5.9.3 + apps/cm: dependencies: '@common/assets': @@ -1542,7 +1603,7 @@ importers: version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3) '@storybook/react-vite': specifier: ^8.5.3 - version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) '@storybook/test': specifier: ^8.5.3 version: 8.6.14(storybook@8.6.14(prettier@3.7.4)) @@ -1554,22 +1615,22 @@ importers: version: 22.19.2 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) autoprefixer: specifier: ^10.4.20 version: 10.4.22(postcss@8.5.6) eslint: specifier: ^9.17.0 - version: 9.39.2(jiti@1.21.7) + version: 9.39.2(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^5.0.0 - version: 5.2.0(eslint@9.39.2(jiti@1.21.7)) + version: 5.2.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.16 - version: 0.4.24(eslint@9.39.2(jiti@1.21.7)) + version: 0.4.24(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-storybook: specifier: ^0.11.2 - version: 0.11.6(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + version: 0.11.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) globals: specifier: ^15.14.0 version: 15.15.0 @@ -1590,19 +1651,19 @@ importers: version: 3.4.19(yaml@2.8.2) tsup: specifier: 8.3.6 - version: 8.3.6(jiti@1.21.7)(postcss@8.5.6)(typescript@5.6.3)(yaml@2.8.2) + version: 8.3.6(jiti@2.6.1)(postcss@8.5.6)(typescript@5.6.3)(yaml@2.8.2) typescript: specifier: ~5.6.2 version: 5.6.3 typescript-eslint: specifier: ^8.18.2 - version: 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + version: 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) vite: specifier: ^6.0.5 - version: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) + version: 6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) + version: 5.1.4(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) packages/common/config: devDependencies: @@ -7886,15 +7947,6 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': - dependencies: - glob: 10.5.0 - magic-string: 0.27.0 - react-docgen-typescript: 2.4.0(typescript@5.6.3) - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - optionalDependencies: - typescript: 5.6.3 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: glob: 10.5.0 @@ -8788,14 +8840,6 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.7.4))(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': - dependencies: - '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.7.4)) - browser-assert: 1.2.1 - storybook: 8.6.14(prettier@3.7.4) - ts-dedent: 2.2.0 - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.7.4))(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.7.4)) @@ -8865,28 +8909,6 @@ snapshots: react-dom: 19.2.3(react@19.2.3) storybook: 8.6.14(prettier@3.7.4) - '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': - dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) - '@rollup/pluginutils': 5.3.0(rollup@4.53.3) - '@storybook/builder-vite': 8.6.14(storybook@8.6.14(prettier@3.7.4))(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3) - find-up: 5.0.0 - magic-string: 0.30.21 - react: 19.2.3 - react-docgen: 7.1.1 - react-dom: 19.2.3(react@19.2.3) - resolve: 1.22.11 - storybook: 8.6.14(prettier@3.7.4) - tsconfig-paths: 4.2.0 - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - optionalDependencies: - '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.7.4)) - transitivePeerDependencies: - - rollup - - supports-color - - typescript - '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.7.4)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.53.3)(storybook@8.6.14(prettier@3.7.4))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) @@ -9177,19 +9199,19 @@ snapshots: dependencies: xlsx: 0.18.5 - '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.49.0 - '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.49.0 eslint: 9.39.2(jiti@1.21.7) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9225,15 +9247,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3)': + '@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.49.0 '@typescript-eslint/types': 8.49.0 - '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.49.0 debug: 4.4.3 eslint: 9.39.2(jiti@1.21.7) - typescript: 5.6.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9292,15 +9314,15 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.49.0 - '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.2(jiti@1.21.7) - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9360,14 +9382,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3)': + '@typescript-eslint/utils@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.7)) '@typescript-eslint/scope-manager': 8.49.0 '@typescript-eslint/types': 8.49.0 - '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) eslint: 9.39.2(jiti@1.21.7) - typescript: 5.6.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9457,18 +9479,6 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) - '@rolldown/pluginutils': 1.0.0-beta.27 - '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - transitivePeerDependencies: - - supports-color - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@babel/core': 7.28.5 @@ -10497,8 +10507,8 @@ snapshots: '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@2.6.1)) @@ -10509,6 +10519,26 @@ snapshots: - eslint-plugin-import-x - supports-color + eslint-config-next@15.4.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3): + dependencies: + '@next/eslint-plugin-next': 15.4.0 + '@rushstack/eslint-patch': 1.15.0 + '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@1.21.7)) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + eslint-config-next@15.4.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): dependencies: '@next/eslint-plugin-next': 15.4.0 @@ -10537,6 +10567,36 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.2(jiti@2.6.1) + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.2(jiti@1.21.7) + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 @@ -10552,6 +10612,28 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 @@ -10563,6 +10645,64 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.2(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.2(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 @@ -10592,6 +10732,25 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.2(jiti@1.21.7)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.11.0 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.39.2(jiti@1.21.7) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.2(jiti@2.6.1)): dependencies: aria-query: 5.3.2 @@ -10619,14 +10778,32 @@ snapshots: dependencies: eslint: 9.39.2(jiti@2.6.1) - eslint-plugin-react-refresh@0.4.24(eslint@9.39.2(jiti@1.21.7)): - dependencies: - eslint: 9.39.2(jiti@1.21.7) - eslint-plugin-react-refresh@0.4.24(eslint@9.39.2(jiti@2.6.1)): dependencies: eslint: 9.39.2(jiti@2.6.1) + eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@1.21.7)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.39.2(jiti@1.21.7) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + eslint-plugin-react@7.37.5(eslint@9.39.2(jiti@2.6.1)): dependencies: array-includes: 3.1.9 @@ -10649,16 +10826,6 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@0.11.6(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3): - dependencies: - '@storybook/csf': 0.1.13 - '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - eslint: 9.39.2(jiti@1.21.7) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - - typescript - eslint-plugin-storybook@0.11.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@storybook/csf': 0.1.13 @@ -12734,33 +12901,6 @@ snapshots: tslib@2.8.1: {} - tsup@8.3.6(jiti@1.21.7)(postcss@8.5.6)(typescript@5.6.3)(yaml@2.8.2): - dependencies: - bundle-require: 5.1.0(esbuild@0.24.2) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.3 - esbuild: 0.24.2 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.2) - resolve-from: 5.0.0 - rollup: 4.53.3 - source-map: 0.7.6 - sucrase: 3.35.1 - tinyexec: 0.3.2 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - optionalDependencies: - postcss: 8.5.6 - typescript: 5.6.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsup@8.3.6(jiti@2.6.1)(postcss@8.5.6)(typescript@5.6.3)(yaml@2.8.2): dependencies: bundle-require: 5.1.0(esbuild@0.24.2) @@ -12891,17 +13031,6 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3))(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.6.3) - eslint: 9.39.2(jiti@1.21.7) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - typescript-eslint@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) @@ -13028,17 +13157,6 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-tsconfig-paths@5.1.4(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)): - dependencies: - debug: 4.4.3 - globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.6.3) - optionalDependencies: - vite: 6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) - transitivePeerDependencies: - - supports-color - - typescript - vite-tsconfig-paths@5.1.4(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)): dependencies: debug: 4.4.3 @@ -13061,22 +13179,6 @@ snapshots: lightningcss: 1.30.2 terser: 5.44.1 - vite@6.4.1(@types/node@22.19.2)(jiti@1.21.7)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2): - dependencies: - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.53.3 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 22.19.2 - fsevents: 2.3.3 - jiti: 1.21.7 - lightningcss: 1.30.2 - terser: 5.44.1 - yaml: 2.8.2 - vite@6.4.1(@types/node@22.19.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2): dependencies: esbuild: 0.25.12 From 6e7b3dd5395f7de231c850ff5b446010312096ad Mon Sep 17 00:00:00 2001 From: bicochan Date: Wed, 25 Feb 2026 17:10:56 +0900 Subject: [PATCH 02/39] =?UTF-8?q?[as]=20feat:=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=EC=9D=B8=EA=B0=80=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/README.md | 219 +- apps/as/app/README.md | 169 + apps/as/entities/README.md | 101 +- apps/as/entities/instl-sncn/api/index.ts | 23 + .../instl-sncn/api/instl-sncn-service-impl.ts | 222 + apps/as/entities/instl-sncn/api/queries.ts | 312 ++ apps/as/entities/instl-sncn/index.ts | 61 + apps/as/entities/instl-sncn/lib/format.ts | 47 + apps/as/entities/instl-sncn/lib/index.ts | 18 + apps/as/entities/instl-sncn/lib/validation.ts | 73 + .../as/entities/instl-sncn/model/constants.ts | 30 + apps/as/entities/instl-sncn/model/index.ts | 22 + .../instl-sncn/model/instl-sncn-service.ts | 151 + apps/as/entities/instl-sncn/model/types.ts | 158 + apps/as/features/README.md | 120 +- apps/as/package.json | 4 +- apps/as/shared/README.md | 149 + apps/as/shared/{types => model}/index.ts | 0 apps/as/widgets/README.md | 126 +- apps/cs/docs/표준단어정의서.md | 831 --- docs/IIPBS_단어목록.md | 4760 +++++++++++++++++ pnpm-lock.yaml | 68 +- 22 files changed, 6701 insertions(+), 963 deletions(-) create mode 100644 apps/as/app/README.md create mode 100644 apps/as/entities/instl-sncn/api/index.ts create mode 100644 apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts create mode 100644 apps/as/entities/instl-sncn/api/queries.ts create mode 100644 apps/as/entities/instl-sncn/index.ts create mode 100644 apps/as/entities/instl-sncn/lib/format.ts create mode 100644 apps/as/entities/instl-sncn/lib/index.ts create mode 100644 apps/as/entities/instl-sncn/lib/validation.ts create mode 100644 apps/as/entities/instl-sncn/model/constants.ts create mode 100644 apps/as/entities/instl-sncn/model/index.ts create mode 100644 apps/as/entities/instl-sncn/model/instl-sncn-service.ts create mode 100644 apps/as/entities/instl-sncn/model/types.ts create mode 100644 apps/as/shared/README.md rename apps/as/shared/{types => model}/index.ts (100%) delete mode 100644 apps/cs/docs/표준단어정의서.md create mode 100644 docs/IIPBS_단어목록.md diff --git a/apps/as/README.md b/apps/as/README.md index 95a9b7a31..46a8536a5 100644 --- a/apps/as/README.md +++ b/apps/as/README.md @@ -15,46 +15,131 @@ Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 ## 프로젝트 구조 (FSD) +이 프로젝트는 **Feature-Sliced Design v2.1**을 따르며, 계층적 아키텍처로 구성되어 있습니다. + ``` as/ -├── app/ # Next.js App Router (라우팅) -│ ├── layout.tsx -│ ├── page.tsx -│ ├── globals.css -│ └── providers.tsx -├── shared/ # 공통 코드 레이어 -│ ├── api/ # API 클라이언트 설정 -│ ├── config/ # 환경 설정 -│ ├── lib/ # 유틸리티 라이브러리 -│ ├── types/ # 공통 타입 정의 -│ └── ui/ # 공통 UI 컴포넌트 -├── entities/ # 비즈니스 엔티티 -├── features/ # 비즈니스 기능 -└── widgets/ # 복합 UI 블록 +├── app/ # App 레이어 (Next.js App Router) +│ ├── (routes)/ # 라우트 구조 +│ ├── layout.tsx # 루트 레이아웃 +│ ├── page.tsx # 홈 페이지 +│ ├── globals.css # 글로벌 스타일 +│ └── providers.tsx # 전역 providers +│ +├── widgets/ # Widgets 레이어 +│ └── [widget-name]/ # 큰 독립적 UI 블록 (여러 페이지에서 재사용) +│ ├── ui/ +│ ├── model/ +│ └── index.ts +│ +├── features/ # Features 레이어 +│ └── [feature-name]/ # 사용자 상호작용 기능 (여러 페이지에서 재사용) +│ ├── ui/ +│ ├── api/ +│ ├── model/ +│ └── index.ts +│ +├── entities/ # Entities 레이어 +│ └── [entity-name]/ # 비즈니스 엔티티 (User, Product 등) +│ ├── model/ +│ ├── api/ +│ ├── ui/ +│ └── index.ts +│ +└── shared/ # Shared 레이어 + ├── ui/ # UI Kit (비즈니스 로직 없는 공통 컴포넌트) + ├── api/ # API 클라이언트 설정 + ├── lib/ # 내부 라이브러리 (dates, colors 등) + ├── config/ # 환경 설정, feature flags + ├── types/ # 공통 타입 정의 + └── routes/ # 라우트 상수 ``` +### 계층 구조 이해하기 + +FSD는 **3단계 계층**으로 구성됩니다: + +1. **Layers (레이어)**: 책임과 의존성에 따른 수평적 분리 (app, pages, widgets, features, entities, shared) +2. **Slices (슬라이스)**: 비즈니스 도메인에 따른 수직적 분리 (user, product, auth-login 등) +3. **Segments (세그먼트)**: 기술적 목적에 따른 분리 (ui, api, model, lib 등) + +> 📚 각 레이어의 자세한 설명은 해당 폴더의 README.md를 참고하세요. + ## FSD 레이어 설명 -### 1. Shared -- 프로젝트 전체에서 재사용되는 코드 -- 비즈니스 로직 없음 -- API 클라이언트, 유틸리티, UI 컴포넌트 등 +FSD는 계층적 아키텍처로, 각 레이어는 책임의 범위와 의존성의 정도에 따라 구분됩니다. 7개의 표준화된 레이어가 있으며, 프로젝트에 필요한 레이어만 사용하면 됩니다. -### 2. Entities -- 비즈니스 엔티티 (예: User, Product, Order) -- 엔티티 모델, 타입, API 호출 +### 레이어 계층 구조 (위에서 아래로) -### 3. Features -- 사용자 시나리오와 기능 (예: 로그인, 상품 검색) -- 한 가지 기능에 집중 +``` +app/ ↑ 가장 높은 책임, 가장 많은 의존성 +pages/ | +widgets/ | +features/ | +entities/ | +shared/ ↓ 가장 낮은 책임, 의존성 없음 +``` -### 4. Widgets -- 여러 features와 entities를 조합한 복잡한 UI 블록 -- 독립적으로 작동 가능한 UI 컴포넌트 +### 1. App +- **목적**: 앱 전체에 영향을 주는 기술적/비즈니스적 사항 +- **내용**: Context providers, 글로벌 스타일, 스토어 설정, 라우터 설정, 애널리틱스 +- **특징**: 슬라이스가 없고 세그먼트로만 구성 +- **의존성**: 모든 하위 레이어 사용 가능 -### 5. App -- Next.js App Router -- 라우팅 및 전역 providers 설정 +### 2. Pages (app 디렉토리) +- **목적**: 웹사이트나 애플리케이션을 구성하는 페이지/화면 +- **내용**: 페이지 UI, 로딩 상태, 에러 바운더리, 데이터 fetching +- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능) +- **의존성**: `widgets`, `features`, `entities`, `shared` 사용 가능 + +> 💡 **FSD v2.1 권장사항**: "pages-first" 접근 방식을 따라, 재사용되지 않는 큰 UI 블록과 비즈니스 로직은 페이지 슬라이스에 유지하세요. + +### 3. Widgets +- **목적**: 큰 규모의 독립적인 UI 블록 +- **내용**: 여러 features와 entities를 조합한 복합 UI +- **사용 시기**: 여러 페이지에서 재사용되거나, 페이지에 여러 개의 큰 독립적 블록이 있을 때 +- **의존성**: `features`, `entities`, `shared` 사용 가능 (다른 `widgets` 불가) + +### 4. Features +- **목적**: 사용자가 수행하는 주요 상호작용과 비즈니스 기능 +- **내용**: 사용자 시나리오 (예: 로그인, 상품 검색, 댓글 작성) +- **사용 시기**: 여러 페이지에서 재사용되는 기능 +- **의존성**: `entities`, `shared` 사용 가능 (다른 `features` 불가) + +### 5. Entities +- **목적**: 비즈니스가 다루는 실제 개념 (User, Product, Order 등) +- **내용**: 데이터 모델, 타입, API 요청, 엔티티의 시각적 표현 +- **특징**: 비즈니스 용어로 명명 +- **의존성**: 다른 `entities`, `shared` 사용 가능 + +### 6. Shared +- **목적**: 애플리케이션의 기반 제공 +- **내용**: API 클라이언트, UI Kit, 유틸리티 라이브러리, 글로벌 설정 +- **특징**: 비즈니스 로직 없음, 슬라이스가 없고 세그먼트로만 구성 +- **의존성**: 외부 라이브러리만 사용 가능 (다른 레이어 불가) + +## 레이어 간 Import 규칙 + +> **핵심 규칙**: 슬라이스 내의 모듈(파일)은 **오직 하위 레이어**에 있는 다른 슬라이스만 import할 수 있습니다. + +예시: +- `features/auth-login/ui/form.tsx`는 `entities/user`와 `shared/ui`를 import 가능 +- 하지만 다른 `features/post-create`나 상위 레이어인 `widgets`는 import 불가 +- 같은 슬라이스 내부(`features/auth-login/`)의 다른 파일들은 자유롭게 import 가능 + +## Public API 규칙 + +> **슬라이스 외부의 모듈은 슬라이스의 Public API만 참조할 수 있으며, 내부 파일 구조에 직접 접근할 수 없습니다.** + +모든 슬라이스(및 슬라이스가 없는 레이어의 세그먼트)는 반드시 `index.ts`를 통해 Public API를 정의해야 합니다. + +```typescript +// ✅ 올바른 import +import { LoginForm } from 'features/auth-login'; + +// ❌ 잘못된 import (내부 구조 직접 접근) +import { LoginForm } from 'features/auth-login/ui/login-form'; +``` ## 시작하기 @@ -80,6 +165,69 @@ npm start NEXT_PUBLIC_API_URL=http://localhost:3000/api ``` +## FSD 핵심 규칙 + +### 1. Import 규칙 + +> **슬라이스 내의 모듈(파일)은 오직 하위 레이어에 있는 슬라이스만 import할 수 있습니다.** + +```typescript +// ✅ 올바른 import (하위 레이어) +// features/auth-login/ui/form.tsx +import { User } from 'entities/user'; +import { Button } from 'shared/ui/button'; + +// ❌ 잘못된 import (같은 레이어) +// features/auth-login/ui/form.tsx +import { PostForm } from 'features/post-create'; // 금지! + +// ❌ 잘못된 import (상위 레이어) +// features/auth-login/ui/form.tsx +import { Header } from 'widgets/header'; // 금지! +``` + +### 2. Public API 규칙 + +> **슬라이스 외부에서는 Public API(index.ts)를 통해서만 접근해야 합니다.** + +```typescript +// ✅ 올바른 import (Public API 사용) +import { LoginForm } from 'features/auth-login'; + +// ❌ 잘못된 import (내부 구조 직접 접근) +import { LoginForm } from 'features/auth-login/ui/login-form'; +``` + +**Public API 작성 시 주의사항**: +- 와일드카드 re-export(`export * from`) 사용 지양 +- 필요한 것만 명시적으로 export +- 슬라이스의 인터페이스를 명확하게 표현 + +```typescript +// ❌ 나쁜 예시 +export * from './ui/Comment'; +export * from './model/comments'; + +// ✅ 좋은 예시 +export { Comment } from './ui/comment'; +export { CommentForm } from './ui/comment-form'; +export { useComments } from './model/use-comments'; +export type { Comment, CommentFormData } from './model/types'; +``` + +### 3. 슬라이스 독립성 + +- **Zero Coupling**: 같은 레이어의 슬라이스들은 서로 독립적이어야 합니다 +- **High Cohesion**: 슬라이스는 주요 목표와 관련된 대부분의 코드를 포함해야 합니다 +- 예외: Entities 레이어에서 필요한 경우 `@x` 표기법으로 cross-import 가능 + +### 4. 세그먼트 명명 규칙 + +세그먼트 이름은 **목적**을 설명해야 하며, **본질**을 설명하면 안 됩니다: + +- ❌ **나쁜 이름**: `components`, `hooks`, `types` (무엇인지만 설명) +- ✅ **좋은 이름**: `ui`, `api`, `model`, `lib` (왜 있는지 설명) + ## 코드 규칙 - TypeScript 사용 (strict mode) @@ -87,3 +235,14 @@ NEXT_PUBLIC_API_URL=http://localhost:3000/api - Named exports 선호 - Tailwind CSS 사용 - ESLint + Prettier 적용 +- Public API는 명시적으로 정의 (와일드카드 export 지양) + +## 아키텍처 린팅 + +코드베이스의 FSD 규칙 준수를 자동으로 검증하려면 [Steiger](https://github.com/feature-sliced/steiger)를 사용하세요. + +```bash +# Steiger 설치 및 실행 +npm install -D @feature-sliced/steiger +npx steiger src +``` diff --git a/apps/as/app/README.md b/apps/as/app/README.md new file mode 100644 index 000000000..5ab63ea34 --- /dev/null +++ b/apps/as/app/README.md @@ -0,0 +1,169 @@ +# App Layer + +**App**은 애플리케이션 전체에 영향을 미치는 기술적, 비즈니스적 사항을 다루는 최상위 레이어입니다. + +## 목적 + +- 애플리케이션의 진입점(entrypoint) 제공 +- 전역 Context Providers 설정 +- 라우터 구성 +- 글로벌 스타일 정의 +- 전역 상태 저장소 설정 +- 애널리틱스 및 모니터링 설정 + +## 특징 + +- **슬라이스 없음**: App 레이어는 Shared처럼 슬라이스가 없고 세그먼트로만 구성됩니다 +- **전체 앱 관심사**: 특정 비즈니스 도메인이 아닌 앱 전체와 관련된 코드만 포함 +- **최상위 레이어**: 모든 하위 레이어의 모듈을 자유롭게 import 가능 + +## 구조 (Next.js App Router) + +Next.js를 사용하는 경우, App 레이어는 주로 `app/` 디렉토리로 표현됩니다: + +``` +app/ +├── (routes)/ # 라우트 그룹 및 페이지 +│ ├── (auth)/ +│ │ ├── login/ +│ │ │ └── page.tsx +│ │ └── register/ +│ │ └── page.tsx +│ └── (main)/ +│ ├── dashboard/ +│ │ └── page.tsx +│ └── settings/ +│ └── page.tsx +├── layout.tsx # 루트 레이아웃 +├── page.tsx # 홈 페이지 +├── globals.css # 글로벌 스타일 +├── providers.tsx # 전역 Providers 설정 +└── error.tsx # 글로벌 에러 핸들러 +``` + +### 일반적인 FSD 세그먼트 구조 + +FSD 표준 세그먼트를 사용하는 경우: + +``` +app/ +├── entrypoint/ # 애플리케이션 진입점 (프레임워크별) +│ └── index.tsx +├── providers/ # Context Providers +│ ├── query-provider.tsx +│ ├── theme-provider.tsx +│ └── index.tsx +├── styles/ # 글로벌 스타일 +│ ├── globals.css +│ └── theme.css +├── store/ # 글로벌 상태 저장소 설정 +│ └── index.ts +└── routes/ # 라우터 설정 + └── index.tsx +``` + +## 예시 + +### Next.js Providers 설정 + +```typescript +// app/providers.tsx +'use client'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { ThemeProvider } from 'next-themes'; +import { useState } from 'react'; + +export function Providers({ children }: { children: React.ReactNode }) { + const [queryClient] = useState(() => new QueryClient({ + defaultOptions: { + queries: { + staleTime: 60 * 1000, + }, + }, + })); + + return ( + + + {children} + + + ); +} + +// app/layout.tsx +import { Providers } from './providers'; +import './globals.css'; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + + {children} + + + + ); +} +``` + +### 글로벌 설정 + +```typescript +// app/config/analytics.ts +export function initAnalytics() { + if (typeof window !== 'undefined') { + // 애널리틱스 초기화 + } +} + +// app/config/monitoring.ts +export function initMonitoring() { + // 에러 모니터링 설정 +} +``` + +## Next.js App Router와 FSD + +Next.js의 `app/` 디렉토리는 FSD의 **App 레이어**와 **Pages 레이어**를 동시에 담당합니다: + +- **루트 레벨 파일들** (`layout.tsx`, `providers.tsx`, `globals.css`): App 레이어 +- **라우트 폴더들** (`dashboard/`, `login/` 등): Pages 레이어 + +각 페이지별 비즈니스 로직은: +- 재사용되지 않는 UI는 페이지 슬라이스(`app/dashboard/` 등) 안에 유지 +- 재사용되는 기능은 `features/` 레이어로 분리 +- 여러 페이지에서 재사용되는 큰 UI 블록은 `widgets/` 레이어로 분리 + +## 레이어 의존성 규칙 + +✅ **허용되는 의존성**: +- 모든 하위 레이어 (`pages`, `widgets`, `features`, `entities`, `shared`) +- 같은 `app` 레이어 내의 다른 세그먼트 +- 외부 라이브러리 + +❌ **금지된 의존성**: +- 없음 (App은 최상위 레이어) + +## 주의사항 + +1. **비대화 방지**: App 레이어가 너무 커지면 관리가 어려워집니다. 대부분의 로직은 하위 레이어에 배치하세요 +2. **전역 관심사만**: 특정 페이지나 기능에만 관련된 코드는 해당 레이어로 이동 +3. **라우터 레벨 로직**: 라우터 및 서버 레벨 로직은 이 레이어에 유지 +4. **Processes 레이어 사용 지양**: Processes 레이어는 deprecated되었으므로 해당 로직은 `app`이나 `features`에 배치 + +## FSD v2.1 권장사항 + +최신 FSD 버전(v2.1)은 **"pages-first"** 접근 방식을 권장합니다: + +- 더 많은 코드를 페이지 슬라이스에 유지 +- 큰 UI 블록과 재사용되지 않는 비즈니스 로직은 즉시 추출하지 말고 페이지에 보관 +- 실제로 재사용이 필요할 때만 `features`나 `widgets`로 분리 + +이 접근 방식은 과도한 추상화를 방지하고 코드를 더 쉽게 탐색할 수 있게 합니다. diff --git a/apps/as/entities/README.md b/apps/as/entities/README.md index bf042e60a..b28c10790 100644 --- a/apps/as/entities/README.md +++ b/apps/as/entities/README.md @@ -1,43 +1,114 @@ # Entities Layer -비즈니스 엔티티를 정의하는 레이어입니다. +**Entities**는 프로젝트가 다루는 실제 비즈니스 개념을 나타내는 레이어입니다. 비즈니스에서 제품을 설명할 때 사용하는 용어들(예: User, Product, Order)이 주로 엔티티가 됩니다. + +## 목적 + +- 비즈니스 엔티티의 데이터 모델 및 타입 정의 +- 엔티티 관련 API 요청 함수 관리 +- 엔티티의 시각적 표현 제공 (재사용 가능한 UI) +- 여러 페이지에서 동일한 외관을 재사용할 수 있도록 지원 ## 구조 -각 엔티티는 다음 구조를 따릅니다: +각 엔티티 슬라이스는 다음 세그먼트로 구성됩니다: ``` entities/ └── [entity-name]/ - ├── api/ # API 호출 함수 - ├── model/ # 상태 관리 (zustand) - ├── types/ # 타입 정의 - ├── ui/ # UI 컴포넌트 (선택적) + ├── model/ # 데이터 저장소, 검증 스키마, 상태 관리 + ├── api/ # 엔티티 관련 API 요청 함수 + ├── ui/ # 엔티티 시각적 표현 (선택적) + ├── lib/ # 엔티티 관련 유틸리티 (선택적) + ├── @x/ # 다른 엔티티로부터의 cross-import용 Public API (선택적) └── index.ts # Public API ``` +### 세그먼트 설명 + +- **model**: 데이터 모델, 타입 정의, 상태 저장소 (Zustand 등) +- **api**: 백엔드 API 호출 함수 +- **ui**: 엔티티를 표시하는 UI 컴포넌트 (완전한 UI 블록이 아니라 재사용 가능한 표현) +- **lib**: 엔티티 관련 유틸리티 함수 +- **@x**: 다른 엔티티가 이 엔티티를 import할 때 사용하는 명시적 cross-import API +- **index.ts**: 슬라이스의 Public API (외부에서 사용할 수 있는 것만 export) + ## 예시 ```typescript -// entities/user/types/index.ts +// entities/user/model/user.ts export interface User { id: string; name: string; email: string; + role: 'admin' | 'user'; } -// entities/user/api/index.ts +// entities/user/api/get-user.ts +import type { User } from '../model/user'; + export async function getUser(id: string): Promise { - // API 호출 + const response = await fetch(`/api/users/${id}`); + return response.json(); +} + +// entities/user/ui/user-card.tsx +import type { User } from '../model/user'; + +interface UserCardProps { + user: User; + onClick?: () => void; +} + +export function UserCard({ user, onClick }: UserCardProps) { + return ( +
+

{user.name}

+

{user.email}

+
+ ); } // entities/user/index.ts -export { type User } from "./types"; -export { getUser } from "./api"; +export { type User } from './model/user'; +export { getUser } from './api/get-user'; +export { UserCard } from './ui/user-card'; ``` -## 규칙 +## 엔티티 간 관계 -1. 엔티티는 다른 엔티티에 의존할 수 있습니다 -2. Features나 Widgets에 의존하면 안 됩니다 -3. 비즈니스 로직은 최소화하고 데이터 관리에 집중합니다 +엔티티가 서로 연결되어 있을 때는 `@x` 표기법을 사용하여 명시적으로 cross-import를 관리하는 것이 권장됩니다: + +```typescript +// entities/artist/model/artist.ts +import type { Song } from 'entities/song/@x/artist'; + +export interface Artist { + name: string; + songs: Array; +} + +// entities/song/@x/artist.ts +export type { Song } from '../model/song'; +``` + +> `@x` 폴더를 사용하면 엔티티 간 연결을 명확하게 만들어 함께 리팩터링이 필요한 코드를 쉽게 찾을 수 있습니다. + +## 레이어 의존성 규칙 + +✅ **허용되는 의존성**: +- `shared` 레이어의 모듈 +- 같은 엔티티 슬라이스 내의 다른 세그먼트 +- 다른 엔티티 슬라이스 (필요한 경우, `@x` 표기법 권장) + +❌ **금지된 의존성**: +- `features` 레이어 +- `widgets` 레이어 +- `pages` 레이어 +- `app` 레이어 + +## 주의사항 + +1. **UI 컴포넌트는 완전한 비즈니스 로직을 포함하지 않음**: UI는 주로 props나 slots를 통해 다양한 비즈니스 로직을 연결할 수 있도록 설계 +2. **엔티티 간 비즈니스 로직은 상위 레이어에**: 엔티티 간 상호작용의 비즈니스 로직은 Features나 Pages 레이어에서 처리 +3. **데이터 관리에 집중**: 복잡한 비즈니스 로직보다는 데이터 모델, 검증, 저장에 집중 diff --git a/apps/as/entities/instl-sncn/api/index.ts b/apps/as/entities/instl-sncn/api/index.ts new file mode 100644 index 000000000..2e4d9c20b --- /dev/null +++ b/apps/as/entities/instl-sncn/api/index.ts @@ -0,0 +1,23 @@ +export { instlSncnService } from "./instl-sncn-service-impl"; +export { + instlSncnKeys, + useListPageLoadCnfm, + useRegistPageLoadCnfm, + useViewPageLoadCnfm, + useSelectInstlCnfmListCnt, + useSelectInstlCnfmList, + useSelectInstlCnfmDtl, + useInsertInstlCnfm, + useMergeInstlCnfm, + useDeleteInstlCnfm, + useUpdatePrgrsSttusCnfm, + useSaveInstlCnfmPrgrsStts, + useSaveInstlCnfmSanctnPrgrsStts, + useInsertInstlCnfmSpl, + useSelectEssntlInstlCnfmAtchFileList, + useSelectInstlCnfmExmntFile, + useSelectInstlCnfmEtcFile, + useSelectInstlCnfmSpl, + useSelectInstlCnfmExmntResult, + useSelectInstlCnfmOpinionList, +} from "./queries"; diff --git a/apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts b/apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts new file mode 100644 index 000000000..356f8a033 --- /dev/null +++ b/apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts @@ -0,0 +1,222 @@ +import { apiClient } from "@/shared/api"; +import type { + InstlSncnService, + FnrscVO, + ListPageResult, + RegistPageData, + ViewPageData, + SplmntRqst, +} from "../model"; + +class InstlSncnServiceImpl implements InstlSncnService { + async selectInstlCnfmListCount(vo: FnrscVO): Promise { + const response = await apiClient.get<{ count: number }>( + "/fnrsc/cnfm/list/count", + { params: vo } + ); + return response.data.count; + } + + async selectInstlCnfmList(vo: FnrscVO): Promise { + const response = await apiClient.get("/fnrsc/cnfm/list", { + params: vo, + }); + return response.data; + } + + async listPageLoadCnfm(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/list/pageLoad.do", + { + params: { + ...vo, + pageIndex: vo.pageIndex || 1, + recordCountPerPage: vo.recordCountPerPage || 10, + pageSize: vo.pageSize || 10, + }, + } + ); + return response.data; + } + + async registPageLoadCnfm(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/regist/pageLoad.do", + { + params: vo, + } + ); + return response.data; + } + + async insertInstlCnfm(vo: FnrscVO, files?: File[]): Promise { + const formData = new FormData(); + + Object.entries(vo).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + if (typeof value === "object") { + formData.append(key, JSON.stringify(value)); + } else { + formData.append(key, String(value)); + } + } + }); + + if (files && files.length > 0) { + files.forEach((file) => { + formData.append("uploadFile", file); + }); + } + + await apiClient.post("/fnrsc/cnfm/regist/insertFnrscCnfm.do", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }); + } + + async mergeInstlCnfm(vo: FnrscVO, files?: File[]): Promise { + const formData = new FormData(); + + Object.entries(vo).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + if (typeof value === "object") { + formData.append(key, JSON.stringify(value)); + } else { + formData.append(key, String(value)); + } + } + }); + + if (files && files.length > 0) { + files.forEach((file) => { + formData.append("uploadFile", file); + }); + } + + await apiClient.post("/fnrsc/cnfm/regist/mergeFnrscCnfm.do", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }); + } + + async selectInstlCnfmDetail(vo: FnrscVO): Promise { + const response = await apiClient.get("/fnrsc/cnfm/detail", { + params: vo, + }); + return response.data; + } + + async viewPageLoadCnfm(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/view/pageLoad.do", + { + params: vo, + } + ); + return response.data; + } + + async updateProgrsSttusCnfm(vo: FnrscVO): Promise { + await apiClient.post("/fnrsc/cnfm/update/updateProgrsSttus.do", vo); + } + + async saveInstlCnfmProgrsSttus(vo: FnrscVO, file?: File): Promise { + const formData = new FormData(); + + Object.entries(vo).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + formData.append(key, String(value)); + } + }); + + if (file) { + formData.append("uploadFile", file); + } + + await apiClient.post( + "/fnrsc/cnfm/update/saveProgrsSttus.do", + formData, + { + headers: { + "Content-Type": "multipart/form-data", + }, + } + ); + } + + async saveInstlCnfmSanctnProgrsSttus(vo: FnrscVO): Promise { + await apiClient.post( + "/fnrsc/cnfm/update/saveInstlCnfmSanctnProgrsSttus.do", + vo + ); + } + + async deleteInstlCnfm(vo: FnrscVO): Promise { + await apiClient.post("/fnrsc/cnfm/regist/deleteInstlCnfm.do", vo); + } + + async selectEssntlInstlCnfmAtchFileList(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/files/essential", + { params: vo } + ); + return response.data; + } + + async selectInstlCnfmExmntFile(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/files/examination", + { params: vo } + ); + return response.data; + } + + async selectInstlCnfmEtcFile(vo: FnrscVO): Promise { + const response = await apiClient.get("/fnrsc/cnfm/files/etc", { + params: vo, + }); + return response.data; + } + + async selectInstlCnfmSanctnManage( + vo: FnrscVO + ): Promise> { + const response = await apiClient.get>( + "/fnrsc/cnfm/sanction/manage", + { params: vo } + ); + return response.data; + } + + async insertInstlCnfmSpl(vo: FnrscVO): Promise { + await apiClient.post("/fnrsc/cnfm/update/insertInstlCnfmSpl.do", vo); + } + + async selectInstlCnfmSpl(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/supplement", + { params: vo } + ); + return response.data; + } + + async selectInstlCnfmExmntResult(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/examination/result", + { params: vo } + ); + return response.data; + } + + async selectInstlCnfmOpinionList(vo: FnrscVO): Promise { + const response = await apiClient.get( + "/fnrsc/cnfm/opinion/list", + { params: vo } + ); + return response.data; + } +} + +export const instlSncnService = new InstlSncnServiceImpl(); diff --git a/apps/as/entities/instl-sncn/api/queries.ts b/apps/as/entities/instl-sncn/api/queries.ts new file mode 100644 index 000000000..26fa394da --- /dev/null +++ b/apps/as/entities/instl-sncn/api/queries.ts @@ -0,0 +1,312 @@ +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { instlSncnService } from "./instl-sncn-service-impl"; +import type { FnrscVO } from "../model"; + +export const instlSncnKeys = { + all: ["instl-sncn"] as const, + lists: () => [...instlSncnKeys.all, "list"] as const, + list: (vo: FnrscVO) => [...instlSncnKeys.lists(), vo] as const, + dtls: () => [...instlSncnKeys.all, "dtl"] as const, + dtl: (instlCnfmDocNo: string) => + [...instlSncnKeys.dtls(), instlCnfmDocNo] as const, + registPage: (jobSeSp: string) => + [...instlSncnKeys.all, "regist-page", jobSeSp] as const, + viewPage: (instlCnfmDocNo: string) => + [...instlSncnKeys.all, "view-page", instlCnfmDocNo] as const, +}; + +/** + * 설치인가 목록 페이지 로드 (카운트 + 목록 + 페이지네이션) + */ +export function useListPageLoadCnfm(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.list(vo), + queryFn: () => instlSncnService.listPageLoadCnfm(vo), + }); +} + +/** + * 설치인가 등록 페이지 로드 (체크리스트 + 필수첨부파일) + */ +export function useRegistPageLoadCnfm(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.registPage(vo.jobSeSp || ""), + queryFn: () => instlSncnService.registPageLoadCnfm(vo), + enabled: !!vo.jobSeSp, + }); +} + +/** + * 설치인가 상세/수정 페이지 로드 + */ +export function useViewPageLoadCnfm(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.viewPage(vo.instlCnfmDocNo || ""), + queryFn: () => instlSncnService.viewPageLoadCnfm(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 목록 카운트 조회 + */ +export function useSelectInstlCnfmListCnt(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.lists(), "count", vo], + queryFn: () => instlSncnService.selectInstlCnfmListCount(vo), + }); +} + +/** + * 설치인가 목록 조회 + */ +export function useSelectInstlCnfmList(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.list(vo), + queryFn: () => instlSncnService.selectInstlCnfmList(vo), + }); +} + +/** + * 설치인가 상세 조회 + */ +export function useSelectInstlCnfmDtl(vo: FnrscVO) { + return useQuery({ + queryKey: instlSncnKeys.dtl(vo.instlCnfmDocNo || ""), + queryFn: () => instlSncnService.selectInstlCnfmDetail(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 신규 등록 + */ +export function useInsertInstlCnfm() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ vo, files }: { vo: FnrscVO; files?: File[] }) => + instlSncnService.insertInstlCnfm(vo, files), + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + }, + }); +} + +/** + * 설치인가 수정 (병합) + */ +export function useMergeInstlCnfm() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ vo, files }: { vo: FnrscVO; files?: File[] }) => + instlSncnService.mergeInstlCnfm(vo, files), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.vo.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.vo.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.vo.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 삭제 + */ +export function useDeleteInstlCnfm() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (vo: FnrscVO) => instlSncnService.deleteInstlCnfm(vo), + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + }, + }); +} + +/** + * 설치인가 진행상태 업데이트 + */ +export function useUpdatePrgrsSttusCnfm() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (vo: FnrscVO) => + instlSncnService.updateProgrsSttusCnfm(vo), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 진행상태 저장 (검토의견 + 파일) + */ +export function useSaveInstlCnfmPrgrsStts() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ vo, file }: { vo: FnrscVO; file?: File }) => + instlSncnService.saveInstlCnfmProgrsSttus(vo, file), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.vo.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.vo.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.vo.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 기술검토 최종결재 + */ +export function useSaveInstlCnfmSanctnPrgrsStts() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (vo: FnrscVO) => + instlSncnService.saveInstlCnfmSanctnProgrsSttus(vo), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 보완요청 등록 + */ +export function useInsertInstlCnfmSpl() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (vo: FnrscVO) => instlSncnService.insertInstlCnfmSpl(vo), + onSuccess: (_, variables) => { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.lists(), + }); + if (variables.instlCnfmDocNo) { + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), + }); + queryClient.invalidateQueries({ + queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), + }); + } + }, + }); +} + +/** + * 설치인가 필수 첨부파일 목록 조회 + */ +export function useSelectEssntlInstlCnfmAtchFileList(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.all, "essential-files", vo.instlCnfmDocNo], + queryFn: () => instlSncnService.selectEssntlInstlCnfmAtchFileList(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 검토의견 첨부파일 조회 + */ +export function useSelectInstlCnfmExmntFile(vo: FnrscVO) { + return useQuery({ + queryKey: [ + ...instlSncnKeys.all, + "exmnt-files", + vo.instlCnfmDocNo, + vo.exmntOpinionSeqNo, + ], + queryFn: () => instlSncnService.selectInstlCnfmExmntFile(vo), + enabled: !!vo.instlCnfmDocNo && !!vo.exmntOpinionSeqNo, + }); +} + +/** + * 설치인가 기타 첨부파일 조회 + */ +export function useSelectInstlCnfmEtcFile(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.all, "etc-files", vo.instlCnfmDocNo], + queryFn: () => instlSncnService.selectInstlCnfmEtcFile(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 보완요청 조회 + */ +export function useSelectInstlCnfmSpl(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.all, "supplement", vo.instlCnfmDocNo], + queryFn: () => instlSncnService.selectInstlCnfmSpl(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} + +/** + * 설치인가 검토결과 조회 + */ +export function useSelectInstlCnfmExmntResult(vo: FnrscVO) { + return useQuery({ + queryKey: [ + ...instlSncnKeys.all, + "exmnt-result", + vo.instlCnfmDocNo, + vo.jobSe, + ], + queryFn: () => instlSncnService.selectInstlCnfmExmntResult(vo), + enabled: !!vo.instlCnfmDocNo && !!vo.jobSe, + }); +} + +/** + * 설치인가 담당자 목록 조회 + */ +export function useSelectInstlCnfmOpinionList(vo: FnrscVO) { + return useQuery({ + queryKey: [...instlSncnKeys.all, "opinion-list", vo.instlCnfmDocNo], + queryFn: () => instlSncnService.selectInstlCnfmOpinionList(vo), + enabled: !!vo.instlCnfmDocNo, + }); +} diff --git a/apps/as/entities/instl-sncn/index.ts b/apps/as/entities/instl-sncn/index.ts new file mode 100644 index 000000000..40b412b7f --- /dev/null +++ b/apps/as/entities/instl-sncn/index.ts @@ -0,0 +1,61 @@ +export type { + PrgrsStts, + FnrscVO, + JobSeItem, + CeckVO, + AtchFile, + ExmntOpinion, + SplmntRqst, + ListPageResult, + RegistPageData, + ViewPageData, + InstlSncnService, +} from "./model"; + +export { + PRGRS_STTS_LABELS, + PRGRS_STTS_OPTIONS, + JOB_TYPE_CODE, + DEFAULT_PAGE_SIZE, + DEFAULT_RECORD_COUNT_PER_PAGE, +} from "./model"; + +export { + instlSncnService, + instlSncnKeys, + useListPageLoadCnfm, + useRegistPageLoadCnfm, + useViewPageLoadCnfm, + useSelectInstlCnfmListCnt, + useSelectInstlCnfmList, + useSelectInstlCnfmDtl, + useInsertInstlCnfm, + useMergeInstlCnfm, + useDeleteInstlCnfm, + useUpdatePrgrsSttusCnfm, + useSaveInstlCnfmPrgrsStts, + useSaveInstlCnfmSanctnPrgrsStts, + useInsertInstlCnfmSpl, + useSelectEssntlInstlCnfmAtchFileList, + useSelectInstlCnfmExmntFile, + useSelectInstlCnfmEtcFile, + useSelectInstlCnfmSpl, + useSelectInstlCnfmExmntResult, + useSelectInstlCnfmOpinionList, +} from "./api"; + +export { + fmtPrgrsStts, + fmtJobSeComma, + jobSeSpSummary, + parseJobSeSpArr, + fmtFileSize, + fmtDt, + vldtInstlSncnForm, + canAply, + canDel, + canMdfy, + canRqstSplmnt, + canAprv, + type VldtnErr, +} from "./lib"; diff --git a/apps/as/entities/instl-sncn/lib/format.ts b/apps/as/entities/instl-sncn/lib/format.ts new file mode 100644 index 000000000..3b16cff56 --- /dev/null +++ b/apps/as/entities/instl-sncn/lib/format.ts @@ -0,0 +1,47 @@ +import { PRGRS_STTS_LABELS, type PrgrsStts } from "../model"; + +export function fmtPrgrsStts(stts: PrgrsStts): string { + return PRGRS_STTS_LABELS[stts] || stts; +} + +export function fmtJobSeComma(jobSe: string): string { + if (!jobSe) return ""; + return jobSe.split("").join(","); +} + +export function jobSeSpSummary(jobSeSp: string): string { + if (!jobSeSp) return ""; + return jobSeSp.replace(/,/g, ""); +} + +export function parseJobSeSpArr(jobSeSp: string): string[] { + if (!jobSeSp) return []; + return jobSeSp.split(",").filter(Boolean); +} + +export function fmtFileSize(bytes: number): string { + if (bytes === 0) return "0 Bytes"; + + const k = 1024; + const sizes = ["Bytes", "KB", "MB", "GB"]; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + " " + sizes[i]; +} + +export function fmtDt(dtString: string | undefined): string { + if (!dtString) return "-"; + + try { + const dt = new Date(dtString); + return new Intl.DateTimeFormat("ko-KR", { + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + }).format(dt); + } catch { + return dtString; + } +} diff --git a/apps/as/entities/instl-sncn/lib/index.ts b/apps/as/entities/instl-sncn/lib/index.ts new file mode 100644 index 000000000..9333d229e --- /dev/null +++ b/apps/as/entities/instl-sncn/lib/index.ts @@ -0,0 +1,18 @@ +export { + fmtPrgrsStts, + fmtJobSeComma, + jobSeSpSummary, + parseJobSeSpArr, + fmtFileSize, + fmtDt, +} from "./format"; + +export { + vldtInstlSncnForm, + canAply, + canDel, + canMdfy, + canRqstSplmnt, + canAprv, + type VldtnErr, +} from "./validation"; diff --git a/apps/as/entities/instl-sncn/lib/validation.ts b/apps/as/entities/instl-sncn/lib/validation.ts new file mode 100644 index 000000000..97860ccaa --- /dev/null +++ b/apps/as/entities/instl-sncn/lib/validation.ts @@ -0,0 +1,73 @@ +import type { FnrscVO } from "../model"; + +export interface VldtnErr { + field: string; + message: string; +} + +export function vldtInstlSncnForm(data: FnrscVO): VldtnErr[] { + const errors: VldtnErr[] = []; + + if (!data.jobSe) { + errors.push({ + field: "jobSe", + message: "업무구분을 선택해주세요.", + }); + } + + if (!data.bplcNm || data.bplcNm.trim() === "") { + errors.push({ + field: "bplcNm", + message: "사업장명을 입력해주세요.", + }); + } + + if (!data.fcltNm || data.fcltNm.trim() === "") { + errors.push({ + field: "fcltNm", + message: "시설명을 입력해주세요.", + }); + } + + return errors; +} + +export function canAply(data: FnrscVO): boolean { + const errors = vldtInstlSncnForm(data); + return errors.length === 0; +} + +export function canDel( + prgrsStts: string | undefined, + regId: string | undefined, + currentUsrId: string +): boolean { + return prgrsStts === "SV" && regId === currentUsrId; +} + +export function canMdfy( + prgrsStts: string | undefined, + regId: string | undefined, + currentUsrId: string +): boolean { + return ( + (prgrsStts === "SV" || prgrsStts === "SL") && regId === currentUsrId + ); +} + +export function canRqstSplmnt( + prgrsStts: string | undefined, + usrRole: string +): boolean { + return ( + (prgrsStts === "ER" || prgrsStts === "PR") && + (usrRole === "REVIEWER" || usrRole === "APPROVER") + ); +} + +export function canAprv( + prgrsStts: string | undefined, + usrRole: string +): boolean { + return prgrsStts === "PE" && usrRole === "APPROVER"; +} diff --git a/apps/as/entities/instl-sncn/model/constants.ts b/apps/as/entities/instl-sncn/model/constants.ts new file mode 100644 index 000000000..e8bea4018 --- /dev/null +++ b/apps/as/entities/instl-sncn/model/constants.ts @@ -0,0 +1,30 @@ +import type { PrgrsStts } from "./types"; + +export const PRGRS_STTS_LABELS: Record = { + SV: "저장", + ST: "신청", + SL: "보완요청", + ER: "기술검토중", + EE: "기술검토완료", + PR: "환경청검토중", + PE: "환경청검토완료", + AP: "승인", + RJ: "반려", +} as const; + +export const PRGRS_STTS_OPTIONS = [ + { value: "SV", label: "저장" }, + { value: "ST", label: "신청" }, + { value: "SL", label: "보완요청" }, + { value: "ER", label: "기술검토중" }, + { value: "EE", label: "기술검토완료" }, + { value: "PR", label: "환경청검토중" }, + { value: "PE", label: "환경청검토완료" }, + { value: "AP", label: "승인" }, + { value: "RJ", label: "반려" }, +] as const; + +export const JOB_TYPE_CODE = "FNR01" as const; + +export const DEFAULT_PAGE_SIZE = 10 as const; +export const DEFAULT_RECORD_COUNT_PER_PAGE = 10 as const; diff --git a/apps/as/entities/instl-sncn/model/index.ts b/apps/as/entities/instl-sncn/model/index.ts new file mode 100644 index 000000000..7c8c73489 --- /dev/null +++ b/apps/as/entities/instl-sncn/model/index.ts @@ -0,0 +1,22 @@ +export type { + PrgrsStts, + FnrscVO, + JobSeItem, + CeckVO, + AtchFile, + ExmntOpinion, + SplmntRqst, + ListPageResult, + RegistPageData, + ViewPageData, +} from "./types"; + +export { + PRGRS_STTS_LABELS, + PRGRS_STTS_OPTIONS, + JOB_TYPE_CODE, + DEFAULT_PAGE_SIZE, + DEFAULT_RECORD_COUNT_PER_PAGE, +} from "./constants"; + +export type { InstlSncnService } from "./instl-sncn-service"; diff --git a/apps/as/entities/instl-sncn/model/instl-sncn-service.ts b/apps/as/entities/instl-sncn/model/instl-sncn-service.ts new file mode 100644 index 000000000..74a35cef9 --- /dev/null +++ b/apps/as/entities/instl-sncn/model/instl-sncn-service.ts @@ -0,0 +1,151 @@ +import type { + FnrscVO, + CeckVO, + AtchFile, + SplmntRqst, + ListPageResult, + RegistPageData, + ViewPageData, +} from "./types"; + +/** + * 설치인가 서비스 인터페이스 + * Java CnfmService.java의 TypeScript 버전 + */ +export interface InstlSncnService { + /** + * 설치인가 목록 카운트 조회 + * @param vo 검색 조건 + * @returns 목록 개수 + */ + selectInstlCnfmListCount(vo: FnrscVO): Promise; + + /** + * 설치인가 목록 조회 + * @param vo 검색 조건 + * @returns 설치인가 목록 + */ + selectInstlCnfmList(vo: FnrscVO): Promise; + + /** + * 설치인가 목록 페이지 로드 (카운트 + 목록 + 페이지네이션) + * @param vo 검색 조건 + * @returns 목록 페이지 데이터 + */ + listPageLoadCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 등록 페이지 로드 (체크리스트 + 필수첨부파일) + * @param vo jobSeSp 포함 + * @returns 등록 페이지 데이터 + */ + registPageLoadCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 데이터 저장 (신규) + * @param vo 설치인가 VO + * @param files 첨부파일 목록 + */ + insertInstlCnfm(vo: FnrscVO, files?: File[]): Promise; + + /** + * 설치인가 데이터 병합 (수정) + * @param vo 설치인가 VO + * @param files 첨부파일 목록 + */ + mergeInstlCnfm(vo: FnrscVO, files?: File[]): Promise; + + /** + * 설치인가 상세 데이터 조회 + * @param vo instlCnfmDocNo 포함 + * @returns 설치인가 상세 정보 + */ + selectInstlCnfmDetail(vo: FnrscVO): Promise; + + /** + * 설치인가 상세/수정 페이지 로드 + * @param vo instlCnfmDocNo 포함 + * @returns 상세 페이지 데이터 + */ + viewPageLoadCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 진행상태 업데이트 + * @param vo instlCnfmDocNo, progrsSttus 포함 + */ + updateProgrsSttusCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 진행상태 저장 (검토의견 + 파일) + * @param vo instlCnfmDocNo, progrsSttus, exmntOpinionCn 포함 + * @param file 첨부파일 + */ + saveInstlCnfmProgrsSttus(vo: FnrscVO, file?: File): Promise; + + /** + * 설치인가 기술검토 최종결재 + * @param vo instlCnfmDocNo, progrsSttus 포함 + */ + saveInstlCnfmSanctnProgrsSttus(vo: FnrscVO): Promise; + + /** + * 설치인가 삭제 + * @param vo instlCnfmDocNo 포함 + */ + deleteInstlCnfm(vo: FnrscVO): Promise; + + /** + * 설치인가 신청 첨부파일 목록 + * @param vo instlCnfmDocNo 포함 + * @returns 필수 첨부파일 목록 + */ + selectEssntlInstlCnfmAtchFileList(vo: FnrscVO): Promise; + + /** + * 설치인가 의견 첨부파일 + * @param vo instlCnfmDocNo, exmntOpinionSeqNo 포함 + * @returns 검토의견 첨부파일 목록 + */ + selectInstlCnfmExmntFile(vo: FnrscVO): Promise; + + /** + * 설치인가 기타 첨부파일 + * @param vo instlCnfmDocNo 포함 + * @returns 기타 첨부파일 목록 + */ + selectInstlCnfmEtcFile(vo: FnrscVO): Promise; + + /** + * 설치인가 결재권자 조회 + * @param vo instlCnfmDocNo, regId 포함 + * @returns 결재권자 정보 + */ + selectInstlCnfmSanctnManage(vo: FnrscVO): Promise>; + + /** + * 설치인가 보완요청 등록 + * @param vo instlCnfmDocNo, splCn 포함 + */ + insertInstlCnfmSpl(vo: FnrscVO): Promise; + + /** + * 설치인가 보완요청 조회 + * @param vo instlCnfmDocNo 포함 + * @returns 보완요청 정보 + */ + selectInstlCnfmSpl(vo: FnrscVO): Promise; + + /** + * 설치인가 검토결과 조회 + * @param vo instlCnfmDocNo, jobSe 포함 + * @returns 검토결과 목록 + */ + selectInstlCnfmExmntResult(vo: FnrscVO): Promise; + + /** + * 설치인가 담당자 정보 조회 + * @param vo instlCnfmDocNo 포함 + * @returns 담당자 목록 + */ + selectInstlCnfmOpinionList(vo: FnrscVO): Promise; +} diff --git a/apps/as/entities/instl-sncn/model/types.ts b/apps/as/entities/instl-sncn/model/types.ts new file mode 100644 index 000000000..ce61009c1 --- /dev/null +++ b/apps/as/entities/instl-sncn/model/types.ts @@ -0,0 +1,158 @@ +export type PrgrsStts = + | "SV" // 저장 + | "ST" // 신청 + | "SL" // 보완요청 + | "ER" // 기술검토 + | "EE" // 기술검토완료 + | "PR" // 환경청검토 + | "PE" // 환경청검토완료 + | "AP" // 승인 + | "RJ"; // 반려 + +export interface FnrscVO { + fnrscDscssDocNo?: string; + instlCnfmDocNo?: string; + seqNo?: string; + yr?: string; + bzCd?: string; + bzNm?: string; + strtYr?: string; + edYr?: string; + dtlBzCd?: string; + untBzCd?: string; + rgnCd?: string; + rgnNm?: string; + rvbsnCd?: string; + adstDstrCd?: string; + adstDstrNm?: string; + bzSpec?: string; + aidRt?: string; + confBzCd?: string; + bzPd?: string; + bzCn?: string; + jobSe?: string; + jobSeSp?: string; + jobSeList?: Array; + jobSeNm?: string; + fcltyKnd?: string; + reusePrpos?: string; + progrsSttus?: PrgrsStts; + fileSeq?: number; + regId?: string; + regDt?: string; + udtId?: string; + udtDt?: string; + registMan?: string; + updtMan?: string; + registDe?: string; + updtDe?: string; + atchFileId?: string; + grpCd?: string; + bplcNm?: string; + fcltNm?: string; + lclgvrnmntNm?: string; + localCd?: string; + exmntOpinionSeqNo?: string; + exmntOpinionCn?: string; + scdExmntOpinionSeqNo?: string; + prmyExmntOpinionSeqNo?: string; + splCn?: string; + pageIndex?: number; + recordCountPerPage?: number; + pageSize?: number; + searchKeyword?: string; + searchCondition?: string; +} + +export interface JobSeItem { + jobSeCd: string; + jobSeNm: string; +} + +export interface CeckVO { + ceckSn: string; + ceckCn: string; + ceckResultAt?: "Y" | "N"; + ceckResultCn?: string; + jobSe: string; +} + +export interface AtchFile { + atchFileId: string; + fileSn: string; + fileStreCours: string; + streFileNm: string; + orignlFileNm: string; + fileExtsn: string; + fileMg: number; + fileType?: string; + essntlAt?: "Y" | "N"; +} + +export interface ExmntOpinion { + exmntOpinionSeqNo: string; + instlCnfmDocNo: string; + exmntOpinionCn: string; + exmntResultAt?: "Y" | "N"; + atchFileList?: AtchFile[]; + regId?: string; + regDt?: string; +} + +export interface SplmntRqst { + splSeqNo: string; + instlCnfmDocNo: string; + splCn: string; + splDt?: string; + regId?: string; + regDt?: string; +} + +export interface ListPageResult { + cnt: number; + list: FnrscVO[]; + pageIndex: number; + lastPage: number; + paginationInfo: { + currentPageNo: number; + recordCountPerPage: number; + pageSize: number; + totalRecordCount: number; + lastPageNo: number; + }; + searchVO: FnrscVO; +} + +export interface RegistPageData { + ceckEssntlArr: Array<{ + jobSeCd: string; + jobSeNm: string; + ceckForm1: CeckVO[]; + essntlList: FnrscVO[]; + }>; + jobSe: string; + jobSeSp: string; + grpCd: string; + adstDstrCd: string; + lclgvrnmntNm: string; + localCd: string; +} + +export interface ViewPageData { + view: FnrscVO; + jobSeSp: string; + ceckEssntlArr: Array<{ + jobSeCd: string; + jobSeNm: string; + ceckForm1: FnrscVO[]; + essntlList: FnrscVO[]; + }>; + prmyFileList: FnrscVO[]; + scdFileList: FnrscVO[]; + etcFileList: FnrscVO[]; + grpCd: string; + usrId: string; + sanctnChk: Record; + spl: SplmntRqst | null; + opinionList: FnrscVO[]; +} diff --git a/apps/as/features/README.md b/apps/as/features/README.md index 37b83407e..2be9a3e17 100644 --- a/apps/as/features/README.md +++ b/apps/as/features/README.md @@ -1,36 +1,130 @@ # Features Layer -사용자 인터랙션과 비즈니스 기능을 구현하는 레이어입니다. +**Features**는 앱의 주요 사용자 상호작용과 기능을 구현하는 레이어입니다. 사용자가 실제로 수행하는 작업들로, 주로 비즈니스 엔티티와 관련이 있습니다. + +## 목적 + +- 사용자가 중요하게 생각하는 주요 상호작용 구현 +- 재사용 가능한 비즈니스 기능 제공 +- 여러 페이지에서 사용되는 기능의 중복 제거 + +## Feature로 만들어야 하는 경우 + +> ⚠️ **중요**: 모든 것을 feature로 만들 필요는 없습니다. + +Feature로 만드는 것이 좋은 지표: +- **여러 페이지에서 재사용됨**: 예를 들어, 여러 에디터가 있고 모두 댓글 기능이 있다면, 댓글은 재사용 가능한 feature입니다 +- **중요한 비즈니스 기능**: 신규 프로젝트 참여자가 Features 폴더를 보고 앱의 주요 기능을 빠르게 파악할 수 있어야 합니다 + +Feature가 너무 많으면 중요한 기능이 묻히므로, 신규 참여자의 경험을 최적화하여 결정하세요. ## 구조 -각 기능은 다음 구조를 따릅니다: +각 feature 슬라이스는 다음 세그먼트로 구성됩니다: ``` features/ └── [feature-name]/ - ├── api/ # API 호출 (선택적) - ├── model/ # 상태 관리 - ├── ui/ # UI 컴포넌트 - ├── lib/ # 유틸리티 함수 + ├── ui/ # 상호작용을 수행하는 UI (폼, 버튼 등) + ├── api/ # 액션 수행에 필요한 API 호출 (선택적) + ├── model/ # 검증 및 내부 상태 관리 (선택적) + ├── lib/ # 유틸리티 함수 (선택적) + ├── config/ # feature flags (선택적) └── index.ts # Public API ``` +### 세그먼트 설명 + +- **ui**: 사용자 상호작용을 위한 UI 컴포넌트 (폼, 모달, 버튼 등) +- **api**: feature 실행에 필요한 API 요청 함수 +- **model**: 폼 검증, 내부 상태, 비즈니스 로직 +- **lib**: feature 내부에서만 사용되는 유틸리티 +- **config**: feature flags, feature별 설정값 +- **index.ts**: 슬라이스의 Public API (외부에서 사용할 수 있는 것만 export) + ## 예시 ```typescript // features/auth-login/ui/login-form.tsx +import { useState } from 'react'; +import { loginUser } from '../api/login-user'; +import type { LoginCredentials } from '../model/types'; + export function LoginForm() { - // 로그인 폼 UI + const [credentials, setCredentials] = useState({ + email: '', + password: '' + }); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + await loginUser(credentials); + }; + + return ( +
+ setCredentials({ ...credentials, email: e.target.value })} + /> + setCredentials({ ...credentials, password: e.target.value })} + /> + +
+ ); +} + +// features/auth-login/api/login-user.ts +import type { LoginCredentials } from '../model/types'; + +export async function loginUser(credentials: LoginCredentials) { + const response = await fetch('/api/auth/login', { + method: 'POST', + body: JSON.stringify(credentials), + }); + return response.json(); +} + +// features/auth-login/model/types.ts +export interface LoginCredentials { + email: string; + password: string; } // features/auth-login/index.ts -export { LoginForm } from "./ui/login-form"; +export { LoginForm } from './ui/login-form'; +export { loginUser } from './api/login-user'; +export type { LoginCredentials } from './model/types'; ``` -## 규칙 +## 레이어 의존성 규칙 -1. 하나의 기능에만 집중합니다 -2. Entities와 Shared에만 의존할 수 있습니다 -3. 다른 Features에 직접 의존하면 안 됩니다 -4. 재사용 가능한 기능으로 설계합니다 +✅ **허용되는 의존성**: +- `shared` 레이어의 모듈 +- `entities` 레이어의 모듈 +- 같은 feature 슬라이스 내의 다른 세그먼트 + +❌ **금지된 의존성**: +- 다른 `features` 슬라이스 (feature 간 직접 의존 금지) +- `widgets` 레이어 +- `pages` 레이어 +- `app` 레이어 + +> 💡 **팁**: 여러 features가 공통 기능을 필요로 한다면, 그 기능을 `shared` 레이어로 이동시키거나 `entities` 레이어에서 관리하세요. + +## 명명 규칙 + +- 소문자와 대시 사용: `auth-login`, `post-create`, `comment-edit` +- 동사 형태 권장: 사용자 액션을 나타내는 이름 사용 +- 명확하고 구체적으로: 기능의 목적이 명확하게 드러나도록 + +## 주의사항 + +1. **하나의 기능에만 집중**: 각 feature는 단일 사용자 시나리오를 구현해야 합니다 +2. **재사용성 고려**: 여러 페이지에서 사용될 수 있도록 설계 +3. **독립성 유지**: 다른 features에 의존하지 않고 독립적으로 작동 +4. **적절한 추상화**: 너무 많은 feature를 만들지 말고, 중요한 기능 위주로 구성 diff --git a/apps/as/package.json b/apps/as/package.json index c50f002ea..a39004940 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -6,7 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "lint:fsd": "steiger ." }, "dependencies": { "@common/assets": "workspace:*", @@ -28,6 +29,7 @@ "postcss": "^8.4.49", "prettier": "^3.4.2", "prettier-plugin-tailwindcss": "^0.6.11", + "steiger": "^0.5.11", "tailwindcss": "^3.4.14", "typescript": "^5.7.2" } diff --git a/apps/as/shared/README.md b/apps/as/shared/README.md new file mode 100644 index 000000000..2b247021d --- /dev/null +++ b/apps/as/shared/README.md @@ -0,0 +1,149 @@ +# Shared Layer + +**Shared**는 애플리케이션의 기반을 형성하는 레이어입니다. 외부 세계(백엔드, 서드파티 라이브러리, 환경)와의 연결을 생성하고, 높은 응집력을 가진 자체 라이브러리를 정의하는 곳입니다. + +## 목적 + +- 외부 시스템 및 라이브러리와의 통합 +- 프로젝트 전체에서 사용되는 공통 코드 제공 +- 비즈니스 로직이 없는 재사용 가능한 유틸리티 및 UI 제공 +- 글로벌 설정 및 환경 변수 관리 + +## 특징 + +- **슬라이스 없음**: Shared 레이어는 비즈니스 도메인이 없으므로 슬라이스로 나뉘지 않습니다 +- **세그먼트 구성**: 기술적 목적에 따라 세그먼트로 직접 구성됩니다 +- **자유로운 import**: Shared 내의 모든 파일은 서로를 참조하고 import할 수 있습니다 + +## 구조 + +``` +shared/ +├── ui/ # 애플리케이션 UI Kit +│ ├── button/ +│ ├── input/ +│ ├── modal/ +│ └── index.ts +├── api/ # API 클라이언트 및 백엔드 엔드포인트 함수 +│ ├── client.ts +│ └── index.ts +├── lib/ # 내부 라이브러리 모음 +│ ├── dates/ # 날짜 관련 유틸리티 +│ ├── colors/ # 색상 관련 유틸리티 +│ ├── text/ # 텍스트 처리 유틸리티 +│ └── index.ts +├── config/ # 환경 변수, 글로벌 feature flags +│ ├── env.ts +│ └── index.ts +├── types/ # 공통 타입 정의 +│ └── index.ts +├── i18n/ # 번역 설정, 글로벌 번역 문자열 +│ └── index.ts +└── routes/ # 라우트 상수 또는 패턴 + └── index.ts +``` + +## 세그먼트 설명 + +### 📁 ui +애플리케이션의 UI Kit로, 비즈니스 로직을 포함하지 않는 재사용 가능한 UI 컴포넌트들입니다. + +- Button, Input, Modal 같은 기본 컴포넌트 +- 비즈니스 로직은 없지만 UI 로직은 포함 가능 (예: Autocomplete, SearchBar) +- 비즈니스 테마 컴포넌트도 허용 (예: 회사 로고, 페이지 레이아웃) + +### 📁 api +API 클라이언트 및 특정 백엔드 엔드포인트 요청 함수입니다. + +- HTTP 클라이언트 설정 (Axios, Fetch 등) +- 인증 인터셉터 +- 공통 에러 핸들링 + +### 📁 lib +내부 라이브러리 모음으로, 각 라이브러리는 **하나의 관심사**에 집중해야 합니다. + +> ⚠️ **중요**: `helpers`나 `utils` 폴더처럼 덤프 폴더로 만들지 마세요. 각 라이브러리는 명확한 초점 영역(예: dates, colors, text)을 가져야 하며, README로 문서화해야 합니다. + +### 📁 config +환경 변수, 글로벌 feature flags 및 앱 전체 설정입니다. + +### 📁 types +프로젝트 전체에서 사용되는 공통 타입 정의입니다. + +### 📁 i18n +번역 설정 코드 및 글로벌 번역 문자열입니다. + +### 📁 routes +라우트 상수 또는 라우트 매칭 패턴입니다. + +## 예시 + +```typescript +// shared/ui/button/button.tsx +interface ButtonProps { + children: React.ReactNode; + variant?: 'primary' | 'secondary'; + onClick?: () => void; +} + +export function Button({ children, variant = 'primary', onClick }: ButtonProps) { + return ( + + ); +} + +// shared/api/client.ts +import axios from 'axios'; + +export const apiClient = axios.create({ + baseURL: process.env.NEXT_PUBLIC_API_URL, + timeout: 10000, +}); + +// shared/lib/dates/format-date.ts +import dayjs from 'dayjs'; + +export function formatDate(date: Date, format: string = 'YYYY-MM-DD'): string { + return dayjs(date).format(format); +} + +// shared/config/env.ts +export const ENV = { + apiUrl: process.env.NEXT_PUBLIC_API_URL!, + isDev: process.env.NODE_ENV === 'development', +} as const; +``` + +## 레이어 의존성 규칙 + +✅ **허용되는 의존성**: +- 같은 `shared` 레이어 내의 다른 세그먼트 (자유로운 cross-import) +- 외부 라이브러리 및 패키지 + +❌ **금지된 의존성**: +- `entities` 레이어 +- `features` 레이어 +- `widgets` 레이어 +- `pages` 레이어 +- `app` 레이어 + +> 💡 **원칙**: Shared는 가장 낮은 레이어이므로 상위 레이어에 의존하지 않습니다. + +## 세그먼트 명명 규칙 + +세그먼트 이름은 **내용의 목적**을 설명해야 하며, **본질**을 설명하면 안 됩니다. + +❌ **나쁜 예시**: `components`, `hooks`, `types` (본질을 설명) +✅ **좋은 예시**: `ui`, `api`, `lib/dates`, `config` (목적을 설명) + +## 주의사항 + +1. **비즈니스 로직 없음**: Shared는 순수한 기술적 코드만 포함 +2. **높은 재사용성**: 앱 전체에서 사용될 수 있어야 함 +3. **명확한 라이브러리 구조**: `lib` 내부는 관심사별로 명확하게 분리 +4. **문서화**: 각 라이브러리는 README로 사용법과 목적을 문서화 diff --git a/apps/as/shared/types/index.ts b/apps/as/shared/model/index.ts similarity index 100% rename from apps/as/shared/types/index.ts rename to apps/as/shared/model/index.ts diff --git a/apps/as/widgets/README.md b/apps/as/widgets/README.md index 7da206bc5..cd160abd9 100644 --- a/apps/as/widgets/README.md +++ b/apps/as/widgets/README.md @@ -1,35 +1,135 @@ # Widgets Layer -여러 features와 entities를 조합한 독립적인 UI 블록입니다. +**Widgets**는 큰 규모의 독립적인 UI 블록을 위한 레이어입니다. 여러 features와 entities를 조합하여 완전한 기능을 제공하는 복합 컴포넌트를 담습니다. + +## 목적 + +- 큰 규모의 독립적인 UI 블록 구성 +- 여러 features와 entities를 하나의 응집력 있는 UI로 결합 +- 여러 페이지에서 재사용되는 복잡한 UI 제공 +- 페이지 레벨 레이아웃 및 섹션 관리 + +## Widget으로 만들어야 하는 경우 + +Widget은 다음 조건에 해당할 때 사용하세요: + +✅ **Widget으로 만들기 좋은 경우**: +- 여러 페이지에서 재사용되는 큰 UI 블록 +- 페이지에 여러 개의 큰 독립적 블록이 있고, 이것이 그 중 하나인 경우 +- 페이지 레벨 레이아웃 컴포넌트 (nested routing 시스템 사용 시) + +❌ **Widget으로 만들지 말아야 하는 경우**: +- UI 블록이 페이지의 대부분을 차지하고 재사용되지 않는 경우 → 페이지 슬라이스 내부에 직접 배치 +- 작은 재사용 컴포넌트 → `shared/ui`에 배치 ## 구조 -각 위젯은 다음 구조를 따릅니다: +각 widget 슬라이스는 다음 세그먼트로 구성됩니다: ``` widgets/ └── [widget-name]/ - ├── ui/ # UI 컴포넌트 - ├── model/ # 상태 관리 (선택적) - ├── lib/ # 유틸리티 함수 (선택적) + ├── ui/ # 위젯의 메인 UI 컴포넌트 + ├── model/ # 위젯 내부 상태 관리 (선택적) + ├── api/ # 위젯 전용 API 호출 (선택적) + ├── lib/ # 위젯 내부 유틸리티 (선택적) └── index.ts # Public API ``` +### 세그먼트 설명 + +- **ui**: 여러 features와 entities를 조합한 위젯 UI +- **model**: 위젯 내부 상태 및 로직 (선택적) +- **api**: 위젯이 필요로 하는 데이터 fetching (선택적) +- **lib**: 위젯 내부에서만 사용되는 헬퍼 함수 (선택적) +- **index.ts**: 슬라이스의 Public API (외부에서 사용할 수 있는 것만 export) + ## 예시 ```typescript // widgets/header/ui/header.tsx +import { Logo } from 'shared/ui/logo'; +import { Navigation } from 'shared/ui/navigation'; +import { UserMenu } from 'features/user-menu'; +import { NotificationBell } from 'features/notifications'; + export function Header() { - // 헤더 UI (로고, 네비게이션, 사용자 메뉴 등) + return ( +
+ + + + +
+ ); } -// widgets/header/index.ts -export { Header } from "./ui/header"; +// widgets/product-list/ui/product-list.tsx +import { useProducts } from '../api/use-products'; +import { ProductCard } from 'entities/product'; +import { AddToCartButton } from 'features/cart-add-item'; + +export function ProductList() { + const { data: products, isLoading } = useProducts(); + + if (isLoading) return
로딩 중...
; + + return ( +
+ {products.map((product) => ( +
+ + +
+ ))} +
+ ); +} + +// widgets/product-list/api/use-products.ts +import { useQuery } from '@tanstack/react-query'; +import { getProducts } from 'entities/product'; + +export function useProducts() { + return useQuery({ + queryKey: ['products'], + queryFn: getProducts, + }); +} + +// widgets/product-list/index.ts +export { ProductList } from './ui/product-list'; ``` -## 규칙 +## 레이어 의존성 규칙 -1. 여러 Features와 Entities를 조합할 수 있습니다 -2. 다른 Widgets에 직접 의존하면 안 됩니다 -3. 독립적으로 작동할 수 있어야 합니다 -4. 페이지 레벨 레이아웃 컴포넌트로 사용됩니다 +✅ **허용되는 의존성**: +- `shared` 레이어의 모듈 +- `entities` 레이어의 모듈 +- `features` 레이어의 모듈 +- 같은 widget 슬라이스 내의 다른 세그먼트 + +❌ **금지된 의존성**: +- 다른 `widgets` 슬라이스 (widget 간 직접 의존 금지) +- `pages` 레이어 +- `app` 레이어 + +## 명명 규칙 + +- 소문자와 대시 사용: `header`, `sidebar`, `product-list` +- 명사 형태 권장: UI 블록의 성격을 나타내는 이름 사용 +- 구체적으로: 위젯의 역할이 명확하게 드러나도록 + +## Nested Routing 사용 시 + +Remix 같은 nested routing 시스템을 사용한다면: +- Widgets 레이어를 flat routing의 Pages 레이어처럼 사용 가능 +- 완전한 라우터 블록 생성 (데이터 fetching, loading states, error boundaries 포함) +- 페이지 레이아웃을 이 레이어에 저장 가능 + +## 주의사항 + +1. **독립성 유지**: 각 위젯은 독립적으로 작동 가능해야 합니다 +2. **적절한 크기**: 너무 작은 컴포넌트는 `shared/ui`에, 재사용되지 않으면 `pages`에 배치 +3. **응집력**: 관련된 features와 entities를 의미 있게 조합 +4. **재사용 최적화**: 여러 페이지에서 동일한 방식으로 사용될 수 있도록 설계 diff --git a/apps/cs/docs/표준단어정의서.md b/apps/cs/docs/표준단어정의서.md deleted file mode 100644 index 6950eb84b..000000000 --- a/apps/cs/docs/표준단어정의서.md +++ /dev/null @@ -1,831 +0,0 @@ -# 표준단어정의서 - -AI 이해용으로 정리된 표준단어명, 영문약어명, 영문명 목록입니다. - -| 표준단어명 | 표준단어 영문약어명 | 표준단어 영문명 | -|-----------|-------------------|----------------| -| BOD | BOD | Biochemical Oxygen Demand | -| C/N비 | CNR | Carbon-Nitrogen Ratio | -| COD | COD | Chemical Oxygen Demand | -| F/M비 | FMR | Food-Microorganism Ratio | -| GISD | GISDATA | Geographic Information System Data | -| HTML | HTML | Hypertext Markup Language | -| ID | ID | Id | -| IP | IP | Internet Protocol | -| KEY | KEY | Key | -| ND | ND | Not Detected | -| NON | NON | Non | -| NTU | NTU | Nephelometry Turbidity Unit | -| OPT | OPT | Opt | -| PAC | PAC | Polyaluminium Chloride | -| PH | PH | Hydrogen Exponent | -| PKI | PKI | Public Key Infrastructure | -| POOL | POOL | Pool | -| SS | SS | Suspended Solids (Ss) | -| TCE | TCE | Trichloroethane | -| TM | TM | Transverse Mercator | -| T-N | TN | Total Nitrogen | -| TOC | TOC | Total Organic Carbon | -| T-P | TP | Total Phosphorus | -| URL | URL | Uniform Resource Locator | -| 가구 | HSHD | Household | -| 가능 | PSBL | Possible | -| 가동 | OPR | Operation | -| 가산 | ADTN | Addition | -| 가성소다 | NAOH | Caustic Soda(Nach) | -| 가축분뇨 | ANMA | Animal Manure | -| 값 | VAL | Value | -| 강도 | IN | Intensity | -| 강우 | RAIN | Rain | -| 개방 | OPN | Opening | -| 개별 | INDIV | Individual | -| 개보수비 | RPAFEE | Repair Fee | -| 개설 | ESTBL | Establishment | -| 개시 | STRT | Start | -| 개정 | RVSN | Revision | -| 개조 | REMDEL | Remodeling | -| 개체 | INDVD | Individual | -| 개체군 | POPU | Population | -| 개폐 | RORGN | Reorganization | -| 갱신 | UPDT | Update | -| 건물 | BLDG | Building | -| 건설 | CONC | Construction | -| 건수 | NOCS | The Number Of Cases | -| 건조 | DRY | Dry | -| 검사 | INSP | Inspection | -| 검사서 | EXRPT | Examination Report | -| 검정 | RCGN | Recognition | -| 검증 | VRFC | Verification | -| 검출 | DETECT | Detection | -| 검토 | RVW | Review | -| 격자 | LATTC | Lattice | -| 결과 | RSLT | Result | -| 결의 | DCIS | Decision | -| 결정 | DCSN | Decision | -| 경계 | BNDRY | Boundary | -| 경과 | PROC | Process | -| 경도 | LOT | Longitude | -| 경보 | ALARM | Alarm | -| 경사판 | ICNTPT | Inclination plate | -| 계 | SUM | Summation | -| 계량기 | MRNR | Measuring Instrument | -| 계량기분리 | METRSPRT | Meter Separation | -| 계면 | SGLV | Sludge Level | -| 계산식 | FMUL | Formula | -| 계약 | CTRT | Contract | -| 계약기간 | CNTRPD | Contract Period | -| 계절 | SEASON | Season | -| 계획 | PLAN | Plan | -| 고도처리 | AWTR | Advanced Water Treatment | -| 고시 | ANCMNT | Announcement | -| 고액분리 | SLSPRT | Solid-Liquid Separation | -| 고형물체류시간 | SRT | Solid Retention Time | -| 공간데이터 | SPCEDATA | Space Data | -| 공공 | PUBLIC | Public | -| 공급 | SPLY | Supply | -| 공기 | AIR | Air | -| 공기여과 | ARFT | Air Filter | -| 공문 | ODOC | Official Documnet | -| 공법 | MSRC | Method Of Construction | -| 공사 | CSTRN | Construction | -| 공사비 | CONSTEXPN | Construction Expenses | -| 공업지역 | MNFTR_ARA | Manufacturing Area | -| 공용면적 | CMAR | Common Area | -| 공통 | CMMN | Commonness | -| 관 | PP | Pipe | -| 관계 | REL | Relation | -| 관련 | RLTN | Relation | -| 관로 | PPLINE | Pipe Line | -| 관리 | MNG | Management | -| 관리기관 | MGC | Management Agency | -| 관리자 | MNGR | Manager | -| 관찰 | WTCH | Watch | -| 관측 | OBSR | Observation | -| 관측소 | OBSRVT | Observatory | -| 교반기 | AGITOR | Agirator | -| 교정 | CRRC | Correction | -| 구간 | SCTN | Section | -| 구동 | DRIVE | Drive | -| 구분 | SE | Section | -| 구성 | CMPSG | Composing | -| 구역 | ZONE | Zone | -| 구조 | STRCT | Structure | -| 권역 | DSTR | District | -| 권한 | AUTH | Authority | -| 규격 | STNDRD | Standard | -| 규모 | SCAL | Scale | -| 규제 | REGL | Regulation | -| 균등 | EQLTY | Equality | -| 금액 | AMT | Amount | -| 급수 | WSP | Water Supply | -| 기간 | WHL | While | -| 기관 | INST | Institution | -| 기록 | RECD | Recording | -| 기록부 | REGI | Register | -| 기밀 | SCRET | Secret | -| 기법 | TECQU | Techniques | -| 기본 | BSIC | Basics | -| 기본정보 | BASINF | Bassinfo | -| 기본키 | PK | Primary Key | -| 기상 | WETHER | Weather | -| 기안 | DRFTG | Drafting | -| 기재 | WRIT | Write | -| 기점 | CDPNT | Cardinal Point | -| 기존 | LGCY | Legacy | -| 기준 | CRTR | Criteria | -| 기타 | ETC | Etc | -| 기한 | TERM | Term | -| 기후 | CLMT | Climate | -| 긴급 | EMRG | Emergency | -| 날개벽 | WW | Wing Wall | -| 날씨 | WETHR | Weather | -| 날짜 | DATE | DATE | -| 남조류 | BLAL | Blue-Green Algae | -| 납 | PB | Plumbum | -| 내려받기 | DWLD | Download | -| 내부반송 | ITNRCC | Internal Recycl | -| 내용 | CN | Content | -| 내용연수 | SVLF | Service Life | -| 냄새 | SMELL | Smell | -| 년 | YY | Year | -| 년간 | FAYR | For A Year | -| 노즐 | NZL | Nozzle | -| 노출 | EXPSR | Exposure | -| 농도 | DNSTY | Density | -| 농축 | TKN | Thickened | -| 누적 | ACML | Accumulate | -| 누출 | LKG | Leakage | -| 눈 | SNW | Snow | -| 단가 | UNPRC | Unit Price | -| 단기 | SRTPD | Short Period | -| 단순 | SIMPL | Simplicity | -| 단위 | UNIT | Unit | -| 대구역 | LZONE | Large Zone | -| 대분류 | LCLAS | Large Classification | -| 대장 | REGSTR | Register | -| 대장균 | COLI | Coliform, Fecal Coliform | -| 대장균군 | COLIB | Coliform Bacteria | -| 대지면적 | SIAR | Site Area | -| 대체 | RPLC | Replace | -| 덮개 | COVR | Cover | -| 데이타 | DAT | Data | -| 도구 | UNT | Unit | -| 도래 | ADVNT | Advent | -| 도로 | ROAD | Road | -| 도로명 | RN | Road Name | -| 도시 | CTY | City | -| 도엽 | MAPDMC | Map Demarcation | -| 도표 | CHART | Chart | -| 독성 | TOXCTY | Toxicity | -| 동의 | AGRE | Agreement | -| 동절기 | WSESN | The Winter Season | -| 등급 | GRD | Grade | -| 등기 | RG | Registered | -| 등록 | REG | Registration | -| 디바이스 | DVICE | Device | -| 디코딩 | DCD | Decoding | -| 레이어 | LYR | Layer | -| 로그인 | LGN | Login | -| 로우 | ROW | Row | -| 마감 | DDLN | Deadline | -| 마이크로필터 | MCRFT | Micro Filter | -| 막 | MBRN | Membrane | -| 만족도 | STFDG | Satisfaction Degree | -| 맑음 | CLAR | Clear | -| 매각 | SAL | Sale | -| 맨홀 | MH | Manhole | -| 맵 | MAP | Map | -| 메인 | MAIN | Main | -| 메일 | EMAIL | Email | -| 메탄올 | MTN | Methanol(CH3OH) | -| 명 | NM | Name | -| 모니터링 | MTRG | Monitoring | -| 모델 | MODL | Model | -| 모델링 | MODLNG | Modeling | -| 모래 | SAND | Sand | -| 목 | MOK | Mok | -| 무산소 | ANX | Anoxic | -| 무산소조 | ANX_TANK | Anoxic Tank | -| 무인센서 | MNLSENSR | Manless Sensor | -| 문서 | DCMT | Document | -| 물 | WTR | Water | -| 미급수 | NONWTRSPL | Non Water Supply | -| 미생물 | BLGC | Biological | -| 미세먼지 | PM | Particulate Matter | -| 미세목 | MCRB | Micro Bar | -| 민간위탁 | ETSVN | Entrustment To Civilian | -| 민감 | SST | Sensitive | -| 민원 | CVLCPT | Civil Complaint | -| 바이러스 | VIRS | Virus | -| 반기 | HT | Half Term | -| 반류수 | SIDSWT | Side Stream Water | -| 반송 | SNDBK | Send Back | -| 반송수 | RCCWT | Recycled Water | -| 반송슬러지 | RTNSLG | Return Sludge | -| 반영 | RFLT | Reflection | -| 반응조 | RETNK | Reactant Tank | -| 반출 | EXPRT | Export | -| 반토 | ALUM | Alumina | -| 반환 | GVBK | Giving Back | -| 받이 | INL | Inlet | -| 발생 | OCRN | Occurrence | -| 발전 | PWGNRT | Power Generation | -| 발주기관 | ORNT | Order Institution | -| 방류 | DCWTR | Discharge Water Stock Etc | -| 방류구 | DSCHG | Discharge | -| 방류수 | EFLEC | Effluence | -| 방문 | VST | Visit | -| 방문자 | VSTR | Visitor | -| 방법 | MTHD | Method | -| 방사 | RLSE | Release | -| 배관 | PLINE | Pipeline | -| 배분 | DSTRB | Distirbution | -| 배설물 | EXCRTN | Excretion | -| 배수 | DRNG | Drainage | -| 배수구역 | DRANGZN | Drainage Zone | -| 배출 | EXHST | Exhaust | -| 배출가스 | EMGA | Emission Gases | -| 배출구 | VENT | Vent | -| 배출시설 | DHGP | Discharge Equipment | -| 배출시험 | EXHTST | Exhaust Test | -| 배출자 | DCHGR | Discharge Person | -| 밸브 | VALVE | Valve | -| 번호 | NO | Number | -| 법 | LAW | Law | -| 법적 | LGL | Legal | -| 법정 | STTY | Statutory | -| 법정동 | STDG | Statutory Dong(Administrative District) | -| 법정리 | STLI | Statutory Li(Administrative District) | -| 변경 | CHG | Change | -| 변동 | FLCTN | Fluctuation | -| 변속기 | TRMIS | Transmission | -| 보고 | RPT | Report | -| 보고서 | RPOT | Report | -| 보관 | STORG | Storage | -| 보수 | MEND | Mend | -| 보유 | HOLD | Hold | -| 보정 | RVSION | Revision | -| 보조 | ASSISC | Assistance | -| 보조금 | SBSIDY | Subsidy | -| 복개 | COVE | Cover | -| 복토 | CWTH | Covering With Soil | -| 본류 | MI_RV | Main River | -| 본번 | MNO | Main Number | -| 부검 | ATPSY | Autopsy | -| 부과 | LEVY | Levy | -| 부과금 | LVYAMT | Levy Amount | -| 부기 | BUKIP | Bookkeeping | -| 부담금 | ALOTM | Allotment | -| 부번 | SNO | Sub Number | -| 부산물 | BYPRD | By-Product | -| 부서 | DEPT | Department | -| 부숙화 | DECPZ | Decomposed ~Ize | -| 부적합 | IMPPRTY | Impropriety | -| 부착 | ASN | Adhesion | -| 부품 | CMPNT | Components | -| 부하량 | LOADQTY | Load Quantity | -| 분과 | DIVSN | Division | -| 분뇨 | ENSO | Excreta, Night Soil | -| 분류 | CL | Classification | -| 분류군 | TAXON | Taxon | -| 분리막 | SPRTMBR | Separation Membrane | -| 분배 | DTRBT | Distribution | -| 분배조 | DTRBT_TANK | Distribution Tank | -| 분야 | RLM | Realm | -| 분원성 | FECL | Fecal | -| 분원성대장균군 | FCOLI | Fecal Coliform | -| 분원성연쇄상구균 | FCSTRCCI | Fecal Streptococci | -| 분할 | PRTIN | Partition | -| 비밀번호 | PSWD | Password | -| 비상 | EMGNY | Emergency | -| 비정상 | ABNRM | Abnormality | -| 사양 | SPECS | Specification | -| 사업비 | WCT | Working Cost | -| 사업장 | BPLC | Business Place | -| 사여과지 | SAND_ FILTR | Sand Filter | -| 사용 | USE | Use | -| 사용가능 | USABLE | Usable | -| 사용권 | RIOUS | Right Of Using | -| 사용량 | USG | USAGE | -| 사용자 | USER | User | -| 사위 | FDG | Four Directions Girth | -| 사유 | RESN | Reason | -| 사이클 | CYCLE | Cycle | -| 사이트 | SITE | Site | -| 사진 | PHOT | Photograph | -| 사항 | MATTR | Matter | -| 사후 | AFTFAT | After Fact | -| 삭제 | DEL | Deletion | -| 산기관 | DFS | Diffuser | -| 산업 | INDUST | Industrial | -| 산화환원전위 | ORP | Oxidation Reduction Potential | -| 살모넬라 | SLMN | Salmonella | -| 삼원촉매장치 | TWCTLC | Three Way Catalytic Converter | -| 상세 | DTL | Details | -| 상세주소 | DADDR | Detailed Address | -| 상수 | WT | Water | -| 상업지역 | CMCL_ARA | Commercial Area | -| 상태 | STUS | Status | -| 상품 | GDS | Goods | -| 상향류 | UFW | Upflow | -| 상호 | CONM | Company Name | -| 색도 | CRMTY | Chromaticity | -| 생략 | OMS | Omission | -| 생물 | LVB | Living Being | -| 생물반응조 | BIRAT | Bioreactor | -| 생물서식처 | ORGNHBT | Organism Habitat | -| 생물종 | BISP | Biological Species | -| 생성 | CRT | Creation | -| 생슬러지 | RSLG | Raw Sludge | -| 생태 | ECLGY | Ecology | -| 생태독성 | ECTOX | ecotoxicity | -| 서류 | PAPE | Papers | -| 서명 | SIGN | Signing | -| 서버 | SRVR | Server | -| 서비스 | SRVC | Service | -| 설계 | DESGN | Design | -| 설계용량 | DESGN_CPCT | Design Capacity | -| 설립 | FNDN | Foundation | -| 설정 | STNG | Setting | -| 설치 | INSTL | Installation | -| 성격 | CHTR | Character | -| 성공 | SCS | Success | -| 성능 | PRFMNC | Performance | -| 성능검사 | EFTST | Efficiency Test | -| 성적서 | SCRRP | Score Report | -| 세균 | BCLS | Bacillus | -| 세목 | FB | Fine bar | -| 세부 | DETAIL | Detail | -| 세정 | WS | Washing | -| 세정제 | CNML | Cleaning Material | -| 소 | SML | Small | -| 소독 | DSNF | Disinfection | -| 소독제 | DSINF | Disinfectant | -| 소분류 | SCLAS | Small Classification | -| 소수점 | DCPT | Decimal Point | -| 소요 | REQ | Required | -| 소유 | OWN | Own | -| 소유역 | SBASIN | Sub Basin | -| 소재지 | PLAC | Place Of Location | -| 소포 | ATFM | Antifoaming | -| 소포수 | FBW | Foam Breaking Water | -| 소포제 | ANAG | Antifoaming Agent | -| 송부 | SENDNG | Sending | -| 송신 | SNDM | Send Message | -| 송풍기 | BLW | Blower | -| 수 | CNT | Count | -| 수거 | TKAWY | Take Away | -| 수계 | WWBH | Watershed, Water Basin, Hydrosphere | -| 수동 | HOPR | Hand Operation | -| 수리학적 체류시간 | HRT | Hydraulic Retention Time | -| 수문 | Gate | Gate | -| 수산화나트륨 | SOHY | Sodium Hydroxide | -| 수소이온 | HION | Hydrogen Ion | -| 수신 | RCPTN | Reception | -| 수용가 | RCPTR | Receptor | -| 수위 | WAL | Water Level | -| 수정 | MDFCN | Modification | -| 수정자 | MDFR | Modifier | -| 수제 | SPRDIKE | Superdike | -| 수조 | Tank | Tank | -| 수질 | QTWT | Quality Of Water | -| 수질개선 | WTRQLIMP | Water Quality Improvement | -| 수질기준 | WQST | Water Quality Standards | -| 수질배출정보 | WTDI | Water Discharge Information | -| 수집 | CLCT | Collection | -| 순환 | CCL | Cycling | -| 쉬겔라 | SHIGLA | Shigella | -| 스컴 | SCM | Scum | -| 스크린 | SCR | Screen | -| 슬러지 | SLG | Sludge | -| 슬러지 밀도지수 | SDI | sludge density index | -| 슬러지 용량 지표 | SVI | Sludge Volume Index | -| 습지 | WTLN | Wetland | -| 승인 | APRV | Approval | -| 승인권 | APPRVRGT | Right Of Approval | -| 시각 | TIME | Time | -| 시간 | HR | Hour | -| 시군구 | SGG | Si/Gun/Gu | -| 시나리오 | SCEN | Scenario | -| 시도 | CTPV | Cities And Provinces | -| 시료 | SMPL | Sample | -| 시설 | FCLT | Facility | -| 시설면적 | FCAR | Facility Area | -| 시설물 | FCLTS | Facilities | -| 시스템 | SYS | System | -| 시안 | CYN | Cyaan | -| 시운전 | TSTRN | Test Run | -| 시작 | BGNG | Beginning | -| 시점 | PTM | Point Time | -| 시행 | ENFC | Enforcement | -| 시험 | TEST | Test | -| 신고 | DCLR | Declaration | -| 신고자 | DCL | Declarer | -| 신규 | NEW | New | -| 신기술 | NTCH | New Technology | -| 신뢰 | CNFDNC | Confidence | -| 신뢰성 | CRDIBLTY | Credibility | -| 실시 | OPRT | Operation | -| 실적 | ACRS | Actual Result | -| 실행 | EXCN | Execution | -| 심사 | SRNG | Screening | -| 심의 | DLBR | Deliberation | -| 아황산환원혐기성포자형성균 | SFSRA | Spore Forming Sulfite Reducing Anaerobes | -| 안정화 | STBLZT | Stabilization | -| 암롤박스(컨테이너) | ARTCT | Arm roll type container | -| 암모니아성질소 | NHN | Ammonia Nitrogen | -| 압력 | PRESSR | Pressure | -| 압송 | PUMPNG | Pumping | -| 압축 | CMPRS | Compress | -| 액비 | LQFERTLZ | Liquid Fertilizer | -| 액상 | LIQD | Liquid | -| 약 | GENTLE | Gentle | -| 약품 | CMC | Chemical | -| 약품비 | MEDFEE | Medicine Fee | -| 약품사용 | USMD | Use Medicines | -| 업로드 | UPLD | Upload | -| 업무 | DTY | Duty | -| 없음 | NOT | Nothing | -| 에너지 | ENR | Energy | -| 에틸벤젠 | ETBNZN | Ethylbenzene | -| 여과 | FILTR | Filteration | -| 여과수 | FTWT | Filtered Water | -| 여과재 | FTMTRL | Filter Material | -| 여과형 | FILTRFOM | Filter Form | -| 여부 | YN | Yes or No | -| 여시니아균 | YERSNA | Yersinia | -| 역률 | PWRER_FCT | Power Factor | -| 역세척 | BWS | Back Wash | -| 연결 | CONN | Connection | -| 연계 | LINK | Link | -| 연도 | YR | Year | -| 연락 | CNTC | Contact | -| 연령 | AGE | Age | -| 연료화 | FUELZ | Fuelize | -| 연월 | YM | Year and Month | -| 염소 | CLRN | Chlorine | -| 염소소독 | CHDI | Chlorine Disinfection | -| 염소이온 | CLION | Chlorine Ion | -| 염화제이철 | IRCLD | Iron(III) Chloride | -| 예보 | FRCST | Forecast | -| 예비 | PRPT | Preparation | -| 예산 | BGT | Budget | -| 예상 | EXPCT | Expectation | -| 예약 | RSVT | Reservation | -| 예외 | EXCPT | Exception | -| 예정 | PRNG | Prearrangement | -| 예찰 | PRDICT | Prediction | -| 오류 | ERR | Error | -| 오수받이 | HUS_INL | House Inlet | -| 오염물질 | CNTMN | Contaminant | -| 오염원 | POLUSRC | Pollution Source | -| 오존 | OZN | Ozone | -| 오프로드 | OFFRD | Off Road | -| 옥살산 | OXACID | Oxalic Acid | -| 와류 | VORTEX | Vortex | -| 와류형 | VORTXFOM | Vortex From | -| 완결 | COMPLT | Completion | -| 완료 | CMPTN | Completion | -| 완전 | PRFECT | Perfection | -| 요건 | REQSIT | Requisite | -| 요막액 | ALLNTFLD | Allantoic Fluid | -| 요청 | DMND | Demand | -| 용량 | CPCT | Capacity | -| 용역 | SERVC | Service | -| 용존산소 | DO | Dissolved Oxygen | -| 용해 | DSLV | Dissolving | -| 우량 | EXLT | Excellent | -| 우수 | ST | Storm | -| 우수받이 | STRT_INL | Street Inlet | -| 우수토구 | STM_OVFL_MUT | Storm Overflow Mouth | -| 우회 | BP | BY PASS | -| 운반 | CNVY | Conveyance | -| 운영 | OPER | Operation | -| 운영비 | OPEXP | Operation Expense | -| 운행 | OPRAT | Operation | -| 원격 | RMRT | Rmrt | -| 원격감시체계 | TMS | Tele Monitoring System | -| 원료 | MTRAL | Material | -| 원수 | ORGWT | Origin'S Water | -| 원인자 | ORGPR | The Origin Person | -| 월 | MM | Month | -| 위도 | LAT | Latitude | -| 위반 | CNTR | Contravene | -| 위촉 | ENTRST | Entrusting | -| 위치 | LOC | Location | -| 위탁 | CNSG | Consign | -| 위탁자 | CONSGNR | Consignor | -| 유기인 | ORGP | Organic Phosphorus | -| 유량 | FLUX | Flux | -| 유량조정조 | EQLZT__TANK | Equalization Tank | -| 유입 | INFlOW | Inflow | -| 유입수 | INFWTR | Influent Water | -| 유주 | SWARMG | Swarming | -| 유지 | MNTNC | Maintenance | -| 유지용수공급 | MWRS | Maintenance Water Requirement Supply | -| 유체 | FLUID | Fluid | -| 유출 | EFFLUX | Efflux | -| 유충 | LAVL | Larval | -| 유형 | TY | Type | -| 유효 | VLD | Validity | -| 음용 | DKPS | For Drinking Purpose | -| 읍면동 | EMD | Eup/Myun/Dong | -| 응답 | RSPNS | Response | -| 응집제 | COAG | Cohesive Agents | -| 이관 | TRNSF | Transfer | -| 이동 | MVMN | Movement | -| 이력 | HST | History | -| 이메일 | EML | Email | -| 이상 | ABOVE | Above | -| 이송 | TRSF | Transfer | -| 이의 | OBJC | Objection | -| 이차 | SCDR | Secondary | -| 이차침전지 | SCDR_SDMT_TANK | Secondary Sedimaentation | -| 이행 | MIG | Migratation | -| 인건비 | PEXP | Personnel Expenses{Expenditure] | -| 인계 | HNDVR | Handover | -| 인계서 | HDOVDC | Handover Document | -| 인구 | POPL | Population | -| 인산 | PHACID | Phosphoric Acid | -| 인산염인 | POP | phosphate | -| 인양기 | LFT | Lifter | -| 인원수 | NOPE | The Number of Persons | -| 인증 | CERT | Certification | -| 인처리 | PPRCS | Phosphorus Process | -| 인허가 | APVL | Approval | -| 일 | DY | Day | -| 일련번호 | SN | Serial Number | -| 일반 | GNRL | General | -| 일별 | DALY | Daily | -| 일시 | DT | Date and Time | -| 일자 | YMD | YEAR Month Day | -| 일지 | DIARY | Diary | -| 일차 | PRM | Primary | -| 일차침전지 | PST_SDMT_TANK | Primary Sedimentation Tank | -| 일평균 | DYRG | Day Average | -| 임시 | TMPR | Temporary | -| 임의 | RNDM | Random | -| 입고 | WRHS | Warehousing | -| 입력 | INPT | Input | -| 잉여 | SPS | Surplus | -| 잉여슬러지 | EC_SLG | Excess Sludge | -| 자 | MAN | Man | -| 자갈 | GRAVEL | Gravel | -| 자료 | DATA | Data | -| 자리 | DIGIT | Digit | -| 자립화 | SLFRLI | Self Reliance | -| 자연형 | NATRLFOM | Natural Form | -| 자외선 | URLI | Ultraviolet Rays, Light | -| 자재 | MTRIL | Material | -| 자체 | ITSL | Itself | -| 작성 | WRT | Writing | -| 작업 | JOB | Job | -| 잠금 | LOCK | Lock | -| 장기 | LNGTR | Long Term | -| 장소 | PLCE | Place | -| 장착 | MNTNG | Mounting | -| 재 | RE | Re | -| 재이용 | REUSE | Reuse | -| 재이용수 | | Reuse Water | -| 재활용 | RUSE | Reuse | -| 저감 | REDUC | Reduction | -| 저류조 | DTT_TANK | Detention Tank | -| 저온 | LOWTMP | Low Temperature | -| 저장 | STRG | Storage | -| 저장소 | STORGE | Storage | -| 적발 | DSCL | Disclose | -| 적산 | ADD | Addition | -| 적용 | APLCN | Application | -| 적합 | STBLT | Suitability | -| 전기 | ELCTY | Electricity | -| 전기료 | ELFEE | Electricity Fee | -| 전력 | PWRER | Power | -| 전문 | SPCY | Specially | -| 전산 | CMPUTT | Computation | -| 전송 | TRSM | Transmission | -| 전압 | VLTGE | Voltage | -| 전용 | EXUSE | Exclusive Use | -| 전원 | SELCT | Source Of Electricity | -| 전처리 | PRETR | Pretreatment | -| 점검 | CHCK | Check | -| 접속 | CNTN | Connection | -| 정밀 | PRCIS | Precision | -| 정보 | INFO | Information | -| 정산 | CLCLN | Calculation | -| 정상 | NRMLT | Normality | -| 정수장 | WPPW | Water Purification Plant, Waterworks | -| 정제 | REFINE | Refining | -| 정지 | STP | Stop | -| 제거 | RMV | Removal | -| 제수변 | SL_VALVE | Sluice Valve | -| 제작 | MNFCT | Manufacture | -| 제조사 | MKR | Maker | -| 제출 | SBMSN | Submission | -| 제한 | LIMT | Limitation | -| 조류 | ALG | Algae | -| 조목 | CSB | Coarse Bar | -| 조사 | EXMN | Examination | -| 조성 | MAKE | Make | -| 조정 | EQLT | Equalization | -| 조치 | ACTN | Action | -| 조회 | INQ | Inquiry | -| 존재 | EXST | Existence | -| 종결 | TRMN | Termination | -| 종균제 | MICBA | Microbial Agent | -| 종료 | END | End | -| 종류 | KND | Kind | -| 종목 | IEM | Item | -| 종별 | ASORT | Assortment | -| 종사자 | ENFSN | Enfilade Person | -| 종점 | TMNL | Terminal | -| 좌표 | COOR | Coordinate | -| 주간 | WIK | Week | -| 주변 | CFR | Circumference | -| 주소 | ADDR | Address | -| 주입 | IJTN | Injection | -| 주파수 | FQNC | Frequency | -| 준공 | CMCN | Completion Of Construction | -| 중권역 | MDSTRC | Medium District | -| 중복 | DPCN | Duplication | -| 중분류 | MLSFC | Middle Classification | -| 중온 | MESPH | Mesophilic | -| 중첩 | RETRTN | Reiteration | -| 중화설비 | NUTEQP | Neutralization Equipment | -| 중화제 | CNTAG | Counteragent | -| 증가 | INCRS | Increase | -| 지도점검표사본 | CITBMR | Copy of Instruction Checklist | -| 지방자치단체 | LGOV | Local Governments | -| 지번 | LOTNO | Lot Number | -| 지상 | GRND | Ground | -| 지역 | ARA | Area | -| 지질 | NTRFS | Nature Of Soil | -| 지질도 | GEOMAP | Geological Map | -| 지하 | UDGD | Underground | -| 지하수 | GROU | Groundwater | -| 지형 | TPGRPH | Topography | -| 진공 | VCM | Vacuum | -| 진단 | DGNSS | Diagnosis | -| 진동 | VIBRAT | Vibration | -| 진행 | PRGRE | Progress | -| 질산 | NIACID | Nitric Acid. | -| 질산성질소 | NO3N | Nitrate Nitrogen | -| 집계 | TOT | Total | -| 집계구 | SUMDST | Summation District | -| 집행 | IMPL | Implementation | -| 찌꺼기 | LEES | Lees | -| 차아염소산 | NAOCL | Hypochlorous Acid | -| 차집 | ITCT | Intercepting | -| 착공 | BGNCST | Begin Construction | -| 채수 | SAMWT | Sampling Of Water | -| 채수기 | WTRSMPLR | Water Sampler | -| 채수병 | WTRBOTL | Water Bottle | -| 처리 | PRCS | Process | -| 처리비 | PSSFEE | Process Fee | -| 처리수 | TRT_WT | Treated Water | -| 처리수조 | TRT_WT_TANK | Treated Water Tank | -| 처리시설 | TRTMTFCLT | Treatment Facility | -| 처리자 | PRCR | Processor | -| 처분 | DSPS | Disposition | -| 철염 | FESLT | Ferric Salt | -| 첨부 | ATCH | Attachment | -| 첨부파일 | ATFI | Attachment File | -| 초과 | EXCS | Excess | -| 초기화 | INITL | Initialization | -| 촉매 | CTLY | Catalyst | -| 총계 | TSM | Summation | -| 총대장균군 | TCOLFGRP | Total Coliform Group | -| 총량 | TQT | Total Quantity | -| 총면적 | GFA | Gross Floor Area | -| 총사업비 | TPCO | Total Project Cost | -| 총인구 | TPOPLTN | Total Population | -| 총인처리시설 | TPFCT | Total Phosphorus facility | -| 최근 | RCNT | Recent | -| 최대값 | MAXV | Maximum Value | -| 최소값 | MINV | Minimum Value | -| 최적 | BMTB | Being The Most Suitable | -| 최종 | LAST | Last | -| 최초 | FRST | First | -| 추출 | EXTR | Extraction | -| 추출정보 | EXTRINFO | Extraction Information | -| 축 | AXS | Axis | -| 출력 | OTPT | Output | -| 출발 | LVE | Leave | -| 충전기 | CHRGR | Charger | -| 취득 | ACQS | Acquisition | -| 취소 | RTRCN | Retraction | -| 측정 | MSUR | Measurement | -| 측정기 | MSRR | Measurement Instrument | -| 측정소 | MSRSTN | Measurement Station | -| 침사지 | GTCB | Grit Chamber | -| 침전 | SDMT | Sediment | -| 침전지 | SDMT_TANK | sedimentation tank | -| 컨베이어 | CVY | Conveyor | -| 컬럼 | COL | Column | -| 코드 | CD | Code | -| 크기 | SZ | Size | -| 크실렌 | XYLEN | Xylene | -| 탄화 | CARB | Carbonization | -| 탈거 | CRYOFF | Carry Off | -| 탈리액 | SPNT | Supernatant | -| 탈수 | DWTR | Dewatering | -| 탈수기 | DEHYM | Dehydration Machine | -| 탈질 | DNTFCT | Denitrificatio | -| 탈취 | DODRZ | Deodorization | -| 탈취기 | DEODRZ | Deodorizer | -| 탈취제 | DEODR | Deodorant | -| 탈황제 | DSLFA | Desulfurizing Agent | -| 터널형 | YUNLTP | Tunnel Type | -| 테이블 | TBL | Table | -| 토구 | OTFL | Outfall | -| 토지 | LAD | Land | -| 토지면적 | LDAR | Land Area | -| 통계 | STATS | Statistics | -| 통보 | NTFCTN | Notification | -| 통신 | COMM | Communication | -| 통지 | AVTSMT | Avertissement | -| 통합 | UNTY | Unity | -| 특성 | CHRT | Character | -| 특수 | SPECL | Special | -| 특정유해물질 | SHCH | Specified Hazardous Chemicals | -| 파일 | FILE | File | -| 판정 | JGMT | Judgement | -| 펌프 | PUMP | Pump | -| 펌프장 | PUMP_STT | Pump Station | -| 페놀 | PHNL | Phenol | -| 평가 | EVL | Evaluation | -| 폐기 | DSCD | Discard | -| 폐기물 | WSTE | Waste | -| 폐쇄 | CLSG | Closing | -| 폐수 | WAWA | Waste Water | -| 폐수처리 | WSWT | Wastewater Treatment | -| 폐열 | WASTHET | Waste Heat | -| 포기 | ARTN | Aeration | -| 포트 | PORT | Port | -| 폭기조 | ARTN_TANK | Aeration Tank | -| 폴리머 | PLYMR | Polymer | -| 폴리철 | FRRCSU | Ferric Sulfate | -| 표고 | AL | Altitude | -| 표기 | MARK | Mark | -| 표시 | INDCT | Indication | -| 표준 | STD | Standard | -| 표출 | EPRSS | Expression | -| 플래그 | FLAG | Flag | -| 필드 | FILD | Field | -| 필수 | ESNTL | Essential | -| 필증 | CERFIN | Certificate Of Finishing | -| 필터 | FLTER | Filter | -| 하수 | SWGE | Sewage | -| 하수도 | DRNGSYS | Drainage System | -| 하수미처리 | SEWGUNTTM | Un Sewage Treatment | -| 하수처리 | SEWGTRTM | Sewage Treatment | -| 하수처리수 | STWTR | Sewage Treatment Water | -| 하위 | LOWR | Lower | -| 하향류 | DWFW | Downflow | -| 할인 | DSCNT | Discount | -| 함수율 | MISTR_CTNT | Moisture content | -| 합계 | SMM | Summation | -| 해당 | RLVT | Relevant | -| 해석 | INTRPRTT | Interpretation | -| 해양투기 | OCDU | Ocean Dumping | -| 행망 | ADMNW | Administration Network | -| 행정 | ADMN | Administration | -| 행정구역 | ADMI | Administrative District | -| 행정동 | DONG | Dong (Administrative District) | -| 허가 | PRMSN | Permission | -| 허용 | PERM | Permission | -| 현상 | PHNMN | Phenomenon | -| 혐기 | AARB | Anaerobic | -| 혐기조 | AARB_TANK | Anaerobic tank | -| 협잡물 | CCMT | Concomitant | -| 형태 | SHAP | Shape | -| 호기 | ARB | Aerobic | -| 호기조 | ARB_TANK | Aerobic Tank | -| 호소수 | LMSHWT | Lake And Marsh Water | -| 호수 | LKE | Lake | -| 호안 | RVTMNT | Revetment | -| 호이스트 | HIST | Hoist | -| 혼합 | CMPN | Compound | -| 혼합액현탁고형물 | MLSS | Mixed liquor suspended solids | -| 혼화지 | MXG_TNAK | Mixing tank | -| 홈페이지 | HMPG | Homepage | -| 홍수 | FLOOD | Flood | -| 확인 | IDNTY | Identify | -| 확인서 | CNFRMN | Confirmation | -| 확인자 | IDFR | Identifier | -| 확장자 | EXTN | Extension | -| 확정 | CFMTN | Confirmation | -| 환경 | ENVR | Environment | -| 환경기초시설 | ENINF | Environmental Infrastructure | -| 환원 | RSTORE | Restoration | -| 활성탄 | AC | Activated Carbon | -| 활성화 | PRMT | Promote/Facilitate | -| 활용 | PRUS | Practical Use | -| 황산 | ECCBT | Encyclopaedia Britannica (H2So4) | -| 회사 | CO | Company | -| 회수 | RTRVL | Retrieval | -| 회신 | RPLY | Reply | -| 효율 | EFC | Efficiency | -| 효율성 | EFFCTV | Effectiveness | -| 휴대 | MBL | Mobile | -| 흡수정 | EXTTW | Extraction Well | -| 흡착 | ADST | Adsorption | diff --git a/docs/IIPBS_단어목록.md b/docs/IIPBS_단어목록.md new file mode 100644 index 000000000..87cfba8cb --- /dev/null +++ b/docs/IIPBS_단어목록.md @@ -0,0 +1,4760 @@ +# 단어목록 + + +| 단어명 | 영문약어명 | 영문명 | +| ----------- | ------ | ----------------------------------------------------- | +| 값 | VL | Value | +| 강 | BICLSS | (Biological) Class | +| 건 | EVNTCS | (Event) Case | +| 계 | BIKNDM | (Biological) Kingdom | +| 과 | BIFMLY | (Biological) Family | +| 구 | OLD | Old | +| 국 | TELOFC | Telephone Office | +| 길 | | | +| 널 | NUL | Null | +| 논 | PDFLD | Paddy Field | +| 답 | | | +| 댐 | DM | Dam | +| 률 | | | +| 리 | LI | Li | +| 명 | NM | Name | +| 목 | BIORDR | (Biological) Order | +| 문 | BIPHLM | (Biological) Phylum | +| 물 | WTR | Water | +| 밭 | FILD | (Farm) Field | +| 법 | LAW | Law | +| 보 | WEIR | Weir | +| 분 | MI | Minute | +| 뷰 | VIEW | View | +| 산 | MTN | Mountain | +| 선 | LINE | Line | +| 속 | BIGNUS | (Biological) Genus | +| 수 | CNT | Count | +| 열 | HEAT | Heat | +| 원 | | | +| 월 | MM | Month | +| 웹 | WEB | Web | +| 율 | | | +| 일 | DAY | Day | +| 전 | | | +| 종 | BISPCS | (Biological) Species | +| 좌 | LFT | Left | +| 주 | MN | Main | +| 쪽 | PAGE | Page | +| 책 | | | +| 초 | SS | (Time) Second | +| 층 | FLR | Floor | +| 타 | OTHR | Other | +| 팀 | TEAM | Team | +| 폭 | WDT | Width | +| 호 | | | +| 후 | | | +| 가감 | ADSB | Addition And Subtraction | +| 가격 | PRC | Price | +| 가공 | MNFCT | Manufacture | +| 가구 | HSHD | Household | +| 가능 | PSBLTY | Possibility | +| 가동 | OPRTNG | Operating | +| 가로 | WDTH | Width | +| 가뭄 | DRGHT | Drought | +| 가산 | ADTN | Addition | +| 가상 | VR | Virtual | +| 가스 | GAS | Gas | +| 가액 | EQVL | Equivalent Value | +| 가용 | AVL | Available | +| 가입 | JOIN | Join | +| 가점 | | | +| 가족 | FAM | Family | +| 가치 | WRTH | Worth | +| 각도 | ANGL | Angle | +| 각서 | MRND | Memorandum | +| 각하 | RJTN | Rejection | +| 간격 | GAP | Gap | +| 간부 | EXCTV | Excutive | +| 간사 | ORGNZR | Organizer | +| 간이 | SMPLF | Simplified | +| 간접 | IDRT | Indirect | +| 간편 | SMP | Simplicity | +| 감독 | SUP | Supervision | +| 감리 | SPVS | Supervision | +| 감면 | RDCT | Reduction | +| 감사 | ADT | Audit | +| 감소 | DCRS | Decrease | +| 감시 | SVLNC | Surveillance | +| 감액 | RDAMT | Reduction Amount | +| 감점 | SBPT | Subtract Points | +| 감정 | APRS | Appraisal | +| 감지 | SNSNG | Sensing | +| 감축 | RDC | Reduction | +| 강도 | STRTH | Strength | +| 강변 | RVSD | Riverside | +| 강사 | INSTR | Instructor | +| 강수 | PRCP | Precipitation | +| 강우 | RAIN | Rain | +| 강의 | LCTR | Lecture | +| 강제 | FRC | Force | +| 개관 | OPNNG | Opening | +| 개도 | OPRAD | Opening The Road | +| 개량 | IMPRVM | Improvement | +| 개문 | OPGTE | Opening The Gate | +| 개발 | DVLP | Development | +| 개방 | OPN | Open | +| 개별 | INDIV | Individual | +| 개봉 | OPEN | Open | +| 개선 | IMPV | Improvement | +| 개설 | ESTBL | Establishment | +| 개수 | | | +| 개시 | STRT | Start | +| 개업 | OPBIZ | Opening Of Business | +| 개요 | OTLN | Outline | +| 개인 | INDV | Individuals | +| 개점 | OPSTR | Open Store | +| 개정 | RVSN | Revision | +| 개찰 | BDOPN | Bid Opening | +| 개체 | INDVL | Individual | +| 개최 | HDMT | Hold A Meeting | +| 개통 | OPNG | Opening | +| 개폐 | SWCHG | Switching | +| 객석 | ADTRM | Auditorium | +| 객실 | GSRM | Guest Room | +| 객체 | OBJT | Object | +| 갯벌 | MDF | Mud Flat | +| 갱생 | RGNR | Regeneration | +| 갱신 | UPDT | Update | +| 거래 | DLNG | Dealings | +| 거리 | DSTNC | Distance | +| 거부 | RFUS | Refuse | +| 거절 | RFSL | Refusal | +| 거점 | POSITN | Position | +| 거주 | HAB | Habitation | +| 거치 | DFMT | Deferment | +| 건강 | HLTH | Health | +| 건물 | BLDG | Building | +| 건설 | BLDP | Build Up | +| 건수 | NOCS | The Number Of Cases | +| 건의 | SGST | Suggestion | +| 건조 | DRY | Dry | +| 건축 | ARCH | Architecture | +| 검사 | INSP | Inspection | +| 검색 | SRCH | Search | +| 검수 | IGI | Incoming Goods Inspection | +| 검정 | RCGN | Recognition | +| 검증 | VRFC | Verification | +| 검진 | CKUP | Checkup | +| 검체 | SPCMN | Specimen | +| 검출 | DTCT | Detection | +| 검침 | MTRD | Meter Reading | +| 검토 | RVW | Review | +| 게시 | PSTG | Posting | +| 게임 | GAME | Game | +| 격자 | LATC | Lattice | +| 견적 | ESTMT | Estimate | +| 결과 | RSLT | Result | +| 결근 | ABSWK | Absence From Work | +| 결산 | SOA | Settlement Of Accounts | +| 결석 | ABSNC | Absence | +| 결의 | RSLTN | Resolution | +| 결재 | ATRZ | Authorization | +| 결정 | DCSN | Decision | +| 결제 | STLM | Settlement | +| 결측 | MSNG | Missing | +| 결함 | DFC | Defect | +| 결합 | COMB | Combination | +| 결혼 | MRG | Marriage | +| 겸업 | SDJB | Side Job | +| 겸직 | CCPS | Concurrent Position | +| 경감 | RDUCT | Reduction | +| 경계 | MGNL | Marginal | +| 경고 | WARN | Warning | +| 경과 | ELPS | Elapse | +| 경도 | LOT | Longitude | +| 경력 | CRR | Career | +| 경로 | PATH | Path | +| 경매 | AUCTN | Auction | +| 경보 | ART | Alert | +| 경비 | EPS | Expense | +| 경영 | MNGM | Management | +| 경위 | CHIST | Case History | +| 경작 | CLVT | Cultivation | +| 경쟁 | CMPET | Competition | +| 경제 | ECNM | Economy | +| 경조 | CGCD | Congratulations And Condolences | +| 경차 | LVHC | Light Vehicles | +| 경품 | GVW | Giveaway | +| 경향 | TNDNC | Tendency | +| 경험 | EXPRNC | Experience | +| 계급 | ECHLN | Echelon | +| 계단 | STAIR | Stair | +| 계대 | SCDNG | Succeeding | +| 계량 | MSR | Measuring | +| 계산 | CAL | Calculation | +| 계수 | CFC | Coefficient | +| 계약 | CTRT | Contract | +| 계열 | SERS | Series | +| 계절 | SSN | Season | +| 계정 | ACNT | Account | +| 계좌 | BACNT | Bank Account | +| 계측 | MSRG | Measuring | +| 계층 | LYR | Layer | +| 계통 | PSYS | Power System/Circuit | +| 계획 | PLAN | Plan | +| 고객 | CUST | Customer | +| 고교 | | | +| 고도 | ALTD | Altitude | +| 고발 | ACSTN | Accusation | +| 고시 | ANCMNT | Announcement | +| 고용 | EPM | Employment | +| 고유 | UNQ | Unique | +| 고장 | BKDN | Breakdown | +| 고정 | FIX | Fixation | +| 고지 | INFRM | Inform | +| 고철 | STSCP | Steel Scrap | +| 고충 | DSTRS | Distress | +| 곡선 | CURVE | Curve | +| 골재 | AGGRGT | Aggregates | +| 공간 | SPAC | Space | +| 공개 | RLS | Release | +| 공고 | PBANC | Public Announcement | +| 공공 | PUB | Public | +| 공급 | SPLY | Supply | +| 공기 | AIR | Air | +| 공단 | IDTCMP | Industrial Complex | +| 공동 | JNT | Joint | +| 공란 | BLNK | Blank | +| 공람 | PDSP | Public Display | +| 공매 | PBAC | Public Auction | +| 공모 | PBCNTS | Public Contest | +| 공문 | OFDOC | Official Document | +| 공백 | | | +| 공법 | MTCNS | Method Of Construction | +| 공부 | OFBK | Official Book | +| 공사 | CSTRN | Construction | +| 공시 | PBLNT | Public Notice | +| 공실 | EPRM | Empty Room | +| 공업 | MDSR | (Manufacturing) Industry | +| 공연 | PRFR | Performance | +| 공용 | CMNUS | Common Use | +| 공원 | PARK | Park | +| 공유 | SHRN | Sharing | +| 공인 | PBFG | Public Figure | +| 공장 | FCTRY | Factory | +| 공적 | CNTRB | Contribution | +| 공정 | PROCS | Process | +| 공제 | DDC | Deduction | +| 공지 | NTC | Notice | +| 공채 | ONTPM | Open invitation of applications for employment | +| 공탁 | DPOST | Deposit | +| 공통 | COM | Common | +| 공포 | PRMG | Promulgation | +| 공표 | OFANC | Official Announcement | +| 과거 | PAST | Past | +| 과락 | FLSBJ | Fail A Subject | +| 과목 | SBJCT | Subject | +| 과세 | TXTN | Taxation | +| 과정 | CRS | Course | +| 과제 | ASMT | Assignment | +| 과학 | SCNC | Science | +| 관경 | PDMT | Pipe Diameter | +| 관계 | REL | Relation | +| 관광 | TOURSM | Tourism | +| 관급 | GVSP | Government Supply | +| 관내 | WTJR | Within The Jurisdiction | +| 관람 | VWNG | Viewing | +| 관련 | | | +| 관로 | PPL | Pipe Line | +| 관리 | MNG | Management | +| 관목 | SHRUB | Shrub | +| 관서 | GVMNFC | Government Office | +| 관심 | ITRST | Interest | +| 관압 | PIPS | Pipe Press | +| 관정 | GWEL | Groundwater Well | +| 관찰 | OBSR | Observation | +| 관청 | GVMNTC | Government Office | +| 관측 | OBSRVN | Observation | +| 관할 | CMPTNC | Competence | +| 광역 | WAREA | Wide Area | +| 교과 | | | +| 교란 | DSTRB | Disturb | +| 교량 | BRG | Bridge | +| 교목 | CHPLAN | Chaplain | +| 교부 | DTBN | Distribution | +| 교수 | PRFSR | Professor | +| 교육 | EDU | Education | +| 교재 | TCMTR | Teaching Materials | +| 교점 | NODE | Node | +| 교정 | RCTF | Rectification | +| 교체 | RPLC | Replacement | +| 교통 | TRFC | Traffic | +| 교환 | EXCH | Exchange | +| 교훈 | LSSN | Lesson | +| 구간 | ISEG | Interval Segment | +| 구내 | PRMS | Premises | +| 구매 | PRCHS | Purchase | +| 구분 | SE | Section | +| 구성 | CPST | Composition | +| 구역 | ZONE | Zone | +| 구입 | | | +| 구제 | RLF | Relief | +| 구조 | STRC | Structure | +| 구축 | ETBL | Establish | +| 국가 | NTN | Nation | +| 국고 | NTTR | National Treasury | +| 국내 | DMST | Domestic | +| 국도 | NARO | National Road | +| 국비 | NLEP | National Expenditure | +| 국산 | DMPRD | Domestic Product | +| 국외 | OVRSEA | Oversea | +| 국장 | DRTR | Director | +| 국적 | NTNLTY | Nationality | +| 국정 | NTAD | National Administration | +| 국제 | INTL | International | +| 국회 | NLASM | The National Assembly | +| 군락 | CLN | Colony | +| 군집 | BCMNT | (Biotic) Community | +| 군필 | MSVCF | Military Service Fulfilled | +| 굴뚝 | CHMN | Chimney | +| 굴착 | DGG | Digging | +| 권고 | RCMND | Recommendation | +| 권리 | RGHT | Right | +| 권역 | SAREA | Sub-Area | +| 권한 | AUTHRT | Authority | +| 권호 | EDTN | Edition | +| 귀속 | BLN | Belonging | +| 규격 | SPCFCT | Specification | +| 규모 | SCL | Scale | +| 규정 | RULE | Rule | +| 규제 | RGL | Regulation | +| 규칙 | RUL | Rule | +| 균등 | EQLTY | Equality | +| 균주 | STN | Strain | +| 그룹 | GROUP | Group | +| 근거 | BSS | Basis | +| 근로 | LBR | Labor | +| 근무 | WORK | Work | +| 근속 | CNSVC | Continuous Service | +| 근태 | ATAB | Attendance And Absence | +| 글꼴 | FONT | Font | +| 금강 | GMRVR | Geum River | +| 금리 | IRT | Interest Rate | +| 금속 | MTAL | Metal | +| 금액 | AMT | Amount | +| 금연 | NSMK | No Smoking | +| 금융 | FNNC | Finance | +| 금회 | TSTM | This Time | +| 급속 | RAP | Rapid | +| 급수 | WATSUP | Water Supply | +| 급여 | SLRY | Salary | +| 기각 | RJC | Reject | +| 기간 | PRD | Period | +| 기계 | MCHN | Machine | +| 기고 | CTB | Contribution (From) | +| 기관 | INST | Institution | +| 기구 | ORGZN | Organization | +| 기금 | | | +| 기기 | ISTR | Instrument | +| 기념 | CMMRT | Commemoration | +| 기능 | FWK | Functional Work | +| 기대 | EXPT | Expectation | +| 기록 | RCD | Record | +| 기반 | BAS | BASE | +| 기본 | BSC | Basic | +| 기부 | DNTN | Donation | +| 기사 | ARTC | Article | +| 기산 | RCK | Reckoning | +| 기상 | WTH | Weather | +| 기술 | TECH | Technology | +| 기안 | DRFT | Drafting | +| 기압 | ATMPR | Atmospheric Pressure | +| 기업 | ENT | Enterprise | +| 기여 | CTRBT | Contribution | +| 기온 | ARTMP | Air Temperature | +| 기원 | ORGN | Origin | +| 기자 | JRNLST | Journalist | +| 기재 | FLLN | Filling In | +| 기저 | BASIS | Basis | +| 기존 | EXS | Existing | +| 기종 | MKND | Machine Kind (Model) | +| 기준 | CRTR | Criteria | +| 기초 | BSCS | Basics | +| 기출 | PVEX | Previous Examination | +| 기타 | ETC | Etc | +| 기통 | CYLN | Cylinder | +| 기표 | BLTG | Balloting | +| 기한 | TERM | Term | +| 기호 | SMBL | Symbol | +| 기획 | PLN | Planning | +| 기후 | CLIMT | Climate | +| 긴급 | EMRG | Emergency | +| 길이 | LEN | Length | +| 깊이 | DPTH | Depth | +| 나라 | | | +| 나쁨 | BD | Bad | +| 나이 | | | +| 나지 | BLD | Bare Land | +| 낙차 | FLHD | Fall Head | +| 낙찰 | SCSBD | Successful Bid | +| 난간 | HDRL | Handrail | +| 난방 | HTNG | Heating | +| 날씨 | WTHR | Weather | +| 남성 | ML | Male | +| 남쪽 | STHRN | Southern | +| 납기 | DUDT | Due Date | +| 납부 | PAY | Payment | +| 납입 | | | +| 납품 | DLVGDS | Delivery Of Goods | +| 낭비 | WASTE | Waste | +| 내륙 | INLND | Inland | +| 내부 | INSD | Inside | +| 내선 | EXT | Extension | +| 내성 | TLRNC | Tolerance | +| 내역 | DSCTN | Description | +| 내용 | CN | Content | +| 내원 | VSHSP | Visit A Hospital | +| 내일 | TMRW | Tomorrow | +| 내진 | ETRS | Earthquake Resistant | +| 냄새 | SMLL | Smell | +| 냉각 | CLNG | Cooling | +| 냉동 | REFRIG | Refrigeration | +| 냉매 | RERGRT | Refrigerant | +| 냉방 | COOL | Cooling | +| 너비 | | | +| 년도 | | | +| 년수 | YYCNT | Year Count | +| 년월 | | | +| 노드 | | | +| 노력 | EFFORT | Effort | +| 노선 | RTE | Route | +| 노인 | SNCTZ | Senior Citizen | +| 노임 | WGS | Wages | +| 노장 | OBSVF | Observation Field | +| 노점 | | | +| 노조 | | | +| 노출 | EXPSR | Exposure | +| 노트 | | | +| 노후 | OBSLT | Obsolete | +| 녹취 | TRSC | Transcript | +| 논리 | LGC | Logic | +| 논문 | THSS | Thesis | +| 농가 | FRMHS | Farmhouse | +| 농도 | DNST | Density | +| 농약 | AGRPST | Agricultural Pesticides | +| 농업 | FARM | Farming | +| 농장 | FARMS | Farms | +| 농지 | AGLN | Agricultural Land | +| 농축 | ERCT | Enrichment | +| 높이 | HGT | Height | +| 누가 | CMTAD | Cumulative Addition | +| 누계 | ACTOT | Accumulated Total | +| 누락 | OMIT | Omit | +| 누수 | WTLKG | Water Leakage | +| 누적 | ACML | Accumulation | +| 누출 | LKG | Leakage | +| 뉴스 | NEWS | News | +| 능력 | ABLT | Ability | +| 다량 | BULK | Bulk | +| 다음 | NEXT | Next | +| 다중 | MLT | Multiple | +| 단가 | UNTPRC | Unit Price | +| 단계 | STP | Step | +| 단기 | SRTPD | Short Period | +| 단독 | SNGL | Single | +| 단면 | CRSCN | Cross Section | +| 단속 | CRDN | Crackdown | +| 단수 | SPWTSP | Suspension of Water Supply | +| 단어 | WORD | Word | +| 단위 | UNIT | Unit | +| 단일 | SINGL | Singleness | +| 단지 | CMPX | Complex | +| 단체 | GRP | Group | +| 단축 | SHRTN | Shortening | +| 달력 | CLDR | Calendar | +| 달성 | ACHV | Achievement | +| 담당 | TKCG | Taking Charge | +| 담보 | CLTR | Collateral | +| 담수 | PLWT | Plain Water | +| 답글 | PRPLY | (Post) Reply | +| 답변 | ANS | Answer | +| 답안 | ANSW | Answer | +| 답장 | RPL | Reply | +| 당기 | THTM | This Term | +| 당시 | TTM | That Time | +| 당월 | TSMM | This Month | +| 당일 | THDY | This Day | +| 당직 | ONDT | On Duty | +| 당첨 | PRWN | Prize Winning | +| 당초 | OGN | Origin | +| 당해 | TYY | This Year | +| 대가 | PYMNT | Payment | +| 대금 | PYMT | Payment | +| 대기 | WTNG | Waiting | +| 대량 | LQTY | Large Quantity | +| 대륙 | CNTNT | Continent | +| 대리 | SBT | Substitution | +| 대면 | FTF | Face To Face | +| 대민 | FCVLN | (For) Civilians | +| 대변 | CRSD | The Credit Side | +| 대비 | CTRS | Contrast | +| 대상 | TRGT | Target | +| 대수 | CNTOM | Count Of Machines | +| 대여 | RNTL | Rental | +| 대역 | BAND | Band | +| 대원 | CRW | Crew | +| 대응 | CRSP | Correspondence | +| 대장 | LDGR | Ledger | +| 대지 | ERTH | Earth | +| 대책 | CTPN | Counterplan | +| 대체 | SBST | Substitution | +| 대출 | LOAN | Loan | +| 대치 | RPMNT | Replacement | +| 대표 | RPRS | Representation | +| 대행 | PRXY | Proxy | +| 대형 | LGSZ | Large Size | +| 대화 | CNVRS | Conversation | +| 대회 | CNFRN | Conference | +| 댓글 | CMNT | Comment | +| 덮개 | COVR | Cover | +| 도구 | TOOL | Tool | +| 도급 | CTRC | Contract | +| 도달 | RCHNG | Reaching | +| 도래 | MGRTR | Migratory | +| 도로 | ROAD | Road | +| 도면 | FLRPLN | Floor Plan | +| 도색 | PAINT | Painting | +| 도서 | BOOK | Book | +| 도시 | CTY | City | +| 도엽 | MAPSHT | Map Sheet | +| 도입 | INTR | Introduction | +| 도착 | ARVL | Arrival | +| 도출 | DDUC | Deduction | +| 독려 | ENCR | Encouragement | +| 독성 | TOXC | Toxicity | +| 독촉 | URG | Urge | +| 돌풍 | GUST | Gust | +| 동거 | CHBTN | Cohabitation | +| 동결 | FRZG | Freezing | +| 동기 | MTV | Motive | +| 동력 | POWER | Power | +| 동물 | ANML | Animal | +| 동반 | ACMP | Accompany | +| 동시 | SMLTN | Simultaneous | +| 동압 | DNMPRS | Dynamic Pressure | +| 동의 | AGRE | Agreement | +| 동일 | SAME | Same | +| 동작 | MOTN | Motion | +| 동쪽 | ESTRN | Eastern | +| 동파 | FRZBUR | Frozen To Burst | +| 동향 | | | +| 두께 | THICK | Thickness | +| 두수 | NOHD | The Number Of Heads | +| 둔치 | ESPD | Esplanade | +| 둘레 | CRCF | Circumference | +| 뒷면 | BKSD | Back Side | +| 드론 | DRN | Drone | +| 등급 | GRD | Grade | +| 등기 | RG | Registered | +| 등록 | REG | Registration | +| 등재 | REGST | Registration | +| 뚜껑 | LID | Lid | +| 라벨 | LBL | Label | +| 라틴 | LTN | Latin | +| 레벨 | LVL | Level | +| 로그 | LOG | Log | +| 로트 | LT | Lot | +| 리셋 | | | +| 링크 | | | +| 마감 | DDLN | Deadline | +| 마을 | VLG | Village | +| 만기 | MTRY | Maturity | +| 만료 | EXPRY | Expiry | +| 만족 | STFC | Satisfaction | +| 말소 | ERSR | Erasure | +| 맞춤 | CSTMZ | Custmizing | +| 매각 | DSPSL | Disposal | +| 매도 | SLL | Sell | +| 매립 | RCLM | Reclamation | +| 매매 | TRD | Trading | +| 매설 | LAYING | Laying | +| 매수 | BYNG | Buying | +| 매입 | | | +| 매장 | SHOP | Shop | +| 매출 | SLS | Sales | +| 매핑 | MPNG | Mapping | +| 맨홀 | MNHL | Manhole | +| 먼지 | DST | Dust | +| 메뉴 | MENU | Menu | +| 메모 | MEMO | Memo | +| 메인 | | | +| 메일 | | | +| 메타 | META | Meta | +| 메탄 | METHN | Methane | +| 면담 | ITVW | Interview | +| 면세 | TXEX | Tax Exemption | +| 면적 | AREA | Area | +| 면접 | INTV | Interview | +| 면제 | EXMPTN | Exemption | +| 면책 | EXRS | Exemption From Responsibility | +| 면허 | LCNS | License | +| 멸균 | STZ | Sterilization | +| 명령 | CMD | Command | +| 명명 | NMNG | Naming | +| 명세 | PRTCLR | Particulars | +| 명수 | | | +| 명예 | HNR | Honor | +| 명의 | NMNL | Nominal | +| 명칭 | | | +| 모델 | MDL | Model | +| 모듈 | MODL | Module | +| 모래 | SAND | Sand | +| 모레 | DATMRW | Day After Tomorrow | +| 모양 | SHAPE | Shape | +| 모집 | RCRT | Recruitment | +| 모형 | | | +| 목록 | LIST | List | +| 목재 | TIMBER | Timber | +| 목적 | PRPS | Purpose | +| 목차 | TOC | Table Of Contents | +| 목표 | GOAL | Goal | +| 묘지 | GRVYD | Graveyard | +| 무게 | | | +| 무료 | FREE | Free | +| 무상 | FRE | Free | +| 무선 | WRLS | (Network) Wireless | +| 무형 | ITN | Intangible | +| 무효 | INVLD | Invalidity | +| 묶음 | BNDL | Bundle | +| 문구 | PHRS | Phrase | +| 문서 | DOC | Document | +| 문의 | ENQY | Enquiry | +| 문자 | LTR | Letter | +| 문제 | PRBLM | Problem | +| 문항 | QITEM | Question Item | +| 문헌 | LTRT | Literature | +| 문화 | CTR | Culture | +| 물가 | PRCO | Prices Of Commodities | +| 물건 | THING | Thing | +| 물류 | LOGIS | Logistics | +| 물리 | PHYS | Physics | +| 물빛 | DYCLR | Dye Color | +| 물적 | SBSTE | Substance | +| 물질 | SBSTN | Substance | +| 물품 | CMDTY | Commodity | +| 미결 | PND | Pendency | +| 미납 | UNPAID | Unpaid | +| 미달 | BLSTD | BelowStandard | +| 미만 | UDR | Under | +| 미수 | UCLT | Uncollected | +| 미투 | METOO | Metoo Movement | +| 미필 | INCMP | Incompletion | +| 미흡 | INSF | Insufficiency | +| 민간 | PRVTO | Private (Non-Official) | +| 민감 | SST | Sensitive | +| 민원 | CVLCPT | Civil Complaint | +| 밀도 | SMPVM | Substance's Math Per Volume | +| 밀폐 | SEALG | Sealing | +| 바닥 | BTM | Bottom | +| 바람 | WIND | Wind | +| 반경 | RDIS | Radius | +| 반기 | HT | Half Term | +| 반납 | RTN | Return | +| 반대 | OPST | Opposition | +| 반려 | RJCT | Reject | +| 반복 | REPT | Repetition | +| 반송 | SNDBK | Send Back | +| 반영 | RFLT | Reflection | +| 반응 | RACT | Reaction | +| 반입 | CRYN | Carry In | +| 반출 | SHPGOT | Shipping Out | +| 반품 | RTGD | Returned Goods | +| 반환 | GVBK | Giving Back | +| 받는 | | | +| 발간 | PBLS | Publish | +| 발견 | DSCV | Discovery | +| 발광 | LMNS | Luminous | +| 발급 | ISSU | Issue | +| 발령 | APNT | Appoint | +| 발명 | INVN | Invention | +| 발병 | ONST | Onset | +| 발부 | ISUE | Issue | +| 발생 | OCRN | Occurrence | +| 발송 | SNDNG | Sending | +| 발신 | DSPTCH | Dispatch | +| 발암 | CCGS | Carcinogenesis | +| 발열 | FVR | Fever | +| 발의 | PRPSL | Proposal | +| 발전 | ETGT | Electricity Generation | +| 발주 | ORDER | Order | +| 발표 | PRSNTN | Presentation | +| 발행 | PBLCN | Publication | +| 발효 | EFCTN | Effectuation | +| 방류 | DSCHG | Discharge | +| 방문 | VST | Visit | +| 방법 | MTHD | Method | +| 방송 | BRDC | Broadcast | +| 방수 | WPROF | Waterproof | +| 방식 | MTH | Method | +| 방안 | MSRS | Measures | +| 방어 | DFS | Defense | +| 방위 | DRTN | Direction | +| 방재 | PVOD | Prevention Of Disasters | +| 방제 | INPS | Insect Pests | +| 방지 | PRV | Prevention | +| 방침 | PRCPL | Principle | +| 방향 | DCTN | Direction | +| 배경 | BKGR | Background | +| 배관 | PIPE | Pipe | +| 배너 | BNR | Banner | +| 배당 | ALCTN | Allocation | +| 배부 | HNDT | Handout | +| 배분 | APRT | Apportionment | +| 배상 | RPN | Reparation | +| 배송 | DLVR | Delivery | +| 배수 | | | +| 배양 | CLTVT | Cultivate | +| 배점 | SCOR | Scoring | +| 배정 | ALTMNT | Allotment | +| 배제 | EXCLU | Exclusion | +| 배지 | CTRMD | Culture Medium | +| 배차 | CRAL | Car Allocation | +| 배출 | EMSN | Emission | +| 배치 | BTCH | Batch | +| 배포 | CRLTN | Circulation | +| 백신 | VACN | Vaccine | +| 백업 | BKUP | Backup | +| 밸브 | VALVE | Valve | +| 버전 | VER | Version | +| 버튼 | BTN | Button | +| 번역 | TRSL | Translation | +| 번호 | NO | Number | +| 벌금 | FNE | Fine | +| 벌점 | DEM | Demerit Mark | +| 범례 | LGND | Legend | +| 범위 | SCP | Scope | +| 범주 | CTGRY | Category | +| 법규 | LWRG | Laws And Regulations | +| 법령 | STT | Statute | +| 법무 | JDAF | Judicial Affairs | +| 법안 | LBIL | (Law) Bill | +| 법원 | CT | Court | +| 법인 | CORP | Corporation | +| 법적 | LGL | Legal | +| 법정 | STTY | Statutory | +| 변경 | CHG | Change | +| 변동 | FLCTN | Fluctuation | +| 변수 | VRBL | Variable | +| 변이 | MTTN | Mutation | +| 변제 | REPAY | Repayment | +| 변종 | VRY | (Biological) Variety | +| 변형 | DFRMT | Deformation | +| 변화 | VARTN | Variation | +| 변환 | TRSF | Transformation | +| 별도 | APART | Apart | +| 별명 | | | +| 별칭 | NCNM | Nickname | +| 별표 | ASTK | Asterisk | +| 병가 | SKLV | Sick Leave | +| 병과 | BR | Branch (Of Service) | +| 병상 | SCKBD | Sickbed | +| 병설 | ESANX | Establish Sth As An Annex | +| 병원 | HSPTL | Hospital | +| 병합 | MRGER | Merger | +| 보강 | REINFC | Reinforcement | +| 보건 | HLTHCR | Health Care | +| 보고 | RPT | Report | +| 보관 | KPNG | Keeping | +| 보급 | PSPLY | Public Supply | +| 보기 | EXMCS | (Example) Case | +| 보도 | NSCVRG | News Coverage | +| 보류 | HLDOF | Hold Off | +| 보상 | CMPN | Compensation | +| 보세 | BOND | Bonded | +| 보수 | | | +| 보안 | SCRTY | Security | +| 보완 | SPLMNT | Supplementation | +| 보유 | HLD | Holding | +| 보전 | PRSRV | Preservation | +| 보정 | CRCT | Correction | +| 보조 | ASST | Assistance | +| 보존 | PRSV | Preservation | +| 보증 | GRNTE | Guarantee | +| 보직 | APPNT | Appointment | +| 보통 | USL | Usual / Neutral | +| 보험 | INSRNC | Insurance | +| 보호 | PRTC | Protection | +| 보훈 | PV | Patriots And Veterans | +| 복개 | RCVG | River Covering | +| 복구 | RSTR | Restoration | +| 복무 | SERVC | Service | +| 복본 | DPLC | Duplication | +| 복사 | COPY | Copy | +| 복원 | RSTRT | Restoration | +| 복지 | WLFR | Welfare | +| 복직 | RINST | Reinstatement | +| 복토 | CWTH | Covering With Soil | +| 복합 | MULTI | Multiplex | +| 본류 | MNSTM | The Main Stream | +| 본문 | MTXT | Main Text | +| 본번 | MNO | Main Number | +| 본부 | HQ | Headquarters | +| 본사 | HDOFC | Head Office | +| 본세 | MNTX | Main Tax | +| 본인 | ONSLF | Oneself | +| 본점 | MNBR | Main Branch | +| 봉사 | SVC | Service | +| 부가 | ADDTN | Addition | +| 부과 | LEVY | Levy | +| 부담 | BRDN | Burden | +| 부당 | UNFAR | Unfair | +| 부대 | SBSD | Subsidiary | +| 부도 | ISVC | Insolvency | +| 부모 | PRNT | Parent | +| 부문 | SECT | Sector | +| 부번 | SNO | Sub Number | +| 부분 | PART | Part | +| 부상 | INJR | Injury | +| 부서 | DEPT | Department | +| 부설 | LAY | Lay | +| 부속 | ANX | Annex | +| 부수 | NOCP | Number Of Copies | +| 부식 | CORRSN | Corrosion | +| 부양 | SPT | Support | +| 부여 | GRNT | Grant | +| 부위 | REGN | Region | +| 부임 | ACSN | Accession | +| 부재 | ABSN | Absence | +| 부제 | | | +| 부족 | SHTG | Shortage | +| 부지 | LND | Land | +| 부착 | STIK | Sticking | +| 부채 | LBLT | Liabilities | +| 부처 | MAO | Ministry And Office | +| 부품 | PRTS | Parts | +| 부호 | SYMBL | Symbol | +| 북쪽 | NRTRN | Northern | +| 분개 | JRNL | Journalizing | +| 분과 | SCMT | Subcommittee | +| 분기 | QTR | Quarter | +| 분납 | ISPY | Installment Payment | +| 분뇨 | HMN | Humanure | +| 분담 | SHARE | Share | +| 분당 | PRMI | Per Minute | +| 분류 | CLSF | Classification | +| 분리 | SPR | Separate | +| 분배 | | | +| 분석 | ANLS | Analysis | +| 분쇄 | CRSH | Crush | +| 분수 | WTRDVN | Water Diversion | +| 분실 | LOST | Lost | +| 분야 | FLD | Field | +| 분양 | LTOT | Lotting-Out | +| 분자 | MOCL | Molecule | +| 분쟁 | DISPT | Dispute | +| 분포 | DSTB | Distribution | +| 분할 | PRTTN | Partition | +| 분해 | DCOMP | Decomposition | +| 불가 | IMPS | Impossible | +| 불능 | INBL | Inability | +| 불량 | BAD | Bad | +| 불만 | DSCNTT | Discontent | +| 불법 | UNLAW | Unlawfulness | +| 불복 | DSBDNC | Disobedience | +| 불용 | DUSE | Disuse | +| 불입 | PAYMNT | Payment | +| 불참 | NATT | Nonattendance | +| 불출 | RELS | Release | +| 블록 | BLCK | Block | +| 비고 | RMRK | Remarks | +| 비교 | CMPR | Compare | +| 비닐 | VINYL | Vinyl | +| 비료 | FERT | Fertilizer | +| 비목 | ITMEXP | Item Of Expenditure | +| 비밀 | SCRET | Secret | +| 비산 | ASCTR | Air Scatter | +| 비상 | EMRGY | Emergency | +| 비용 | CST | Cost | +| 비위 | VIOL | Violation | +| 비율 | RT | Rate | +| 비중 | SPGR | Specific Gravity | +| 비치 | FRNSH | Furnishing | +| 비품 | FXTRS | Fixtures | +| 비행 | FLYNG | Flying | +| 빈도 | FREQ | Frequency | +| 사건 | INCDNT | Incident | +| 사고 | ACDNT | Accident | +| 사령 | DTOF | Duty Officer | +| 사례 | CASE | Case | +| 사료 | FEED | Feed | +| 사망 | DTH | Death | +| 사면 | PRDN | Pardon | +| 사무 | OFCW | Office Work | +| 사수 | DWTR | Dead Water | +| 사실 | FACT | Fact | +| 사업 | BIZ | Business | +| 사용 | USE | Use | +| 사원 | | | +| 사유 | RSN | Reason | +| 사육 | BRED | Breed | +| 사전 | BFHD | Beforehand | +| 사주 | SNDBR | Sand Bar | +| 사진 | PHOTO | Photograph | +| 사체 | CORPSE | Corpse | +| 사항 | MTTR | Matter | +| 사회 | SOCTY | Society | +| 사후 | EPFC | Ex Post Facto | +| 삭감 | CTBK | Cutback | +| 삭제 | DEL | Deletion | +| 산간 | MNTNS | Mountainous | +| 산림 | FORST | Forest | +| 산소 | OXYG | Oxygen | +| 산식 | FMLA | Formula | +| 산업 | INDST | Industry | +| 산입 | INCLSN | Inclusion | +| 산재 | IA | Industrial Accident | +| 산정 | CMPTTN | Computation | +| 산지 | MTLND | Mountain Land | +| 산출 | CALC | Calculation | +| 산하 | AFLTD | Affiliated | +| 살수 | SPRKL | Sprinkling | +| 살포 | SPRAY | Spray | +| 상가 | STORE | Store (Section) | +| 상각 | AMTZ | Amortization | +| 상계 | STFF | Setoff | +| 상관 | CRLT | Correlation | +| 상금 | AWARD | Award | +| 상단 | UPEND | Upper End | +| 상담 | DSCSN | Discussion | +| 상대 | RLT | Relative | +| 상류 | UPSTM | Upstream | +| 상벌 | RWPN | Reward And Punishment | +| 상부 | UPPRT | Upper Part | +| 상세 | DTL | Details | +| 상소 | APLH | Appeal To A Higher Court | +| 상속 | IHRT | Inheritance | +| 상쇄 | OFSTG | Offsetting | +| 상승 | ASND | Ascending | +| 상시 | ODTM | Ordinary Times | +| 상신 | RTSO | Report To Superior Official | +| 상실 | LOSE | Lose | +| 상압 | NMPS | Normal Pressure | +| 상업 | CMC | Commerce | +| 상영 | SCRG | Screening | +| 상온 | RMTMP | Room Temperature | +| 상용 | CMCUS | Commercial Use | +| 상위 | UP | Upper | +| 상장 | LSTG | Listing | +| 상주 | RESD | Reside | +| 상층 | UPCL | Upper Class | +| 상태 | STTS | Status | +| 상표 | TDMK | Trademark | +| 상품 | GDS | Goods | +| 상한 | UPLMT | The Upper Limit | +| 상해 | BHRM | Bodily Harm | +| 상향 | UPWRD | Upward | +| 상호 | CONM | Company Name | +| 상환 | RPMT | Repayment | +| 상황 | STTN | Situation | +| 상훈 | PZDC | Prizes And Decorations | +| 새창 | NPAG | New Page | +| 색도 | CRMTY | Chromaticity | +| 색맹 | ACHRM | Achromatopsia | +| 색상 | COLR | Color | +| 색인 | INDX | Index | +| 샘플 | SMPLE | Sample | +| 생물 | CRTURE | Creature | +| 생산 | PRDCTN | Production | +| 생성 | CRT | Creation | +| 생식 | PRTN | Procreation | +| 생존 | SRVL | Survival | +| 생태 | ECLG | Ecology | +| 생활 | LVNG | Living | +| 서가 | BKSH | Bookshelf | +| 서류 | DCMNT | Document | +| 서면 | WRTN | Written | +| 서명 | SIGN | Signature | +| 서무 | GNAFR | General Affairs | +| 서버 | SRVR | Server | +| 서식 | TMPLT | Template | +| 서약 | OATH | Oath | +| 서쪽 | WSTRN | Western | +| 서체 | | | +| 석면 | ABSTS | Asbestos | +| 석식 | DNNR | Dinner | +| 석축 | STNWRK | Stonework | +| 선고 | ADJ | Adjudication | +| 선납 | PRPY | Prepayment | +| 선로 | RLWY | Railway | +| 선박 | VSL | Vessel | +| 선발 | PICK | Pick | +| 선별 | SLCF | Select And Classify | +| 선원 | CREW | Crew | +| 선임 | | | +| 선장 | CPTN | Captain | +| 선적 | SHPG | Shipping | +| 선정 | SLCTN | Selection | +| 선택 | CHC | Choice | +| 선행 | PRCD | Preceding | +| 선호 | PRFRC | Preferance | +| 설계 | DESIGN | Design | +| 설립 | FNDN | Foundation | +| 설명 | EXPLN | Explanation | +| 설문 | SRVY | Survey | +| 설비 | FCL | (Equipment) Facility | +| 설정 | STNG | Setting | +| 설치 | INSTL | Installation | +| 섭식 | FED | Feeding | +| 성격 | PRSNL | Personality | +| 성공 | SCS | Success | +| 성과 | OTCM | Outcome | +| 성능 | PRFRNC | (Machine) Performance | +| 성명 | FLNM | Full Name | +| 성별 | GNDR | Gender | +| 성분 | IGRD | Ingredient | +| 성상 | TMPSTE | Temperamnet And State | +| 성인 | ADLT | Adult | +| 성장 | GROW | Growth | +| 성적 | PGRD | Performance Grade | +| 성향 | | | +| 세공 | CRFTS | Craftsmanship | +| 세관 | CSTMHS | Customs-House | +| 세균 | GERM | Germ | +| 세금 | TX | Tax | +| 세대 | HH | Households | +| 세로 | VRTC | Vertical | +| 세목 | TXITM | Tax Item | +| 세무 | TXBIZ | Taxation Business | +| 세부 | | | +| 세션 | SYSSN | System Session | +| 세액 | TXAMT | Tax Amount | +| 세입 | ANRVN | Annual Revenue | +| 세전 | BFTX | Before Tax | +| 세척 | CLNSG | Cleansing | +| 세출 | ANEXP | Annual Expenditure | +| 세포 | BCLL | Biology Cell | +| 센서 | SNSR | Sensor | +| 센터 | CNTR | Center | +| 소각 | INCNR | Incineration | +| 소개 | INTDC | Introducion | +| 소계 | STOT | Subtotal | +| 소관 | JRSD | Jurisdiction | +| 소급 | RTRCT | Retroactivity | +| 소독 | STLZ | Sterilze | +| 소득 | EARN | Earnings | +| 소량 | SMLQ | Small Quantity | +| 소리 | SOUND | Sound | +| 소멸 | EXTSH | Extinguishment | +| 소명 | VNDC | Vindicate | +| 소모 | CSMT | Consumption | +| 소방 | FRFG | Firefighting | +| 소비 | CNSM | Consume | +| 소생 | | | +| 소속 | OGDP | Organization/Department | +| 소송 | LWS | Lawsuit | +| 소액 | SAMT | Small Amount | +| 소요 | REQ | Required | +| 소유 | PSN | Possession | +| 소음 | NOIS | Noise | +| 소재 | | | +| 소집 | CNVC | Convocation | +| 소형 | STYP | Small Type | +| 속도 | SPD | Speed | +| 속성 | ATRB | Attribute | +| 손실 | LOSS | Loss | +| 손익 | PFLS | Profit And Loss | +| 손해 | HRM | Harm | +| 송금 | RMT | Remittance | +| 송달 | TMTL | Transmittal | +| 송부 | SNDG | Sending | +| 송수 | WTSUPL | Water Supply | +| 송신 | | | +| 송장 | INVC | Invoice | +| 송치 | TRNSR | Transference | +| 수강 | ATNLC | Attendance Lecture | +| 수거 | CLT | Collect | +| 수계 | WTST | Water System | +| 수관 | ASCTL | Assumption Of Control | +| 수급 | RECIPT | Receipt | +| 수기 | HWRT | Handwriting | +| 수납 | RCVMT | Receiving Money (Or Thing) | +| 수단 | MNS | Means | +| 수당 | ALW | Allowance | +| 수도 | | | +| 수동 | MANL | Manual | +| 수락 | ACPT | Acceptance | +| 수량 | QTY | Quantity | +| 수령 | RCV | Receive | +| 수로 | WTRWY | Waterway | +| 수료 | FNSH | Finish | +| 수리 | RPR | Repair | +| 수립 | FNDG | Founding | +| 수면 | WTSF | Water Surface | +| 수명 | LIFES | Lifespan | +| 수몰 | SBMRG | Be Submerged | +| 수문 | WTGT | Water Gate | +| 수변 | WTRSD | Waterside | +| 수분 | MSTR | Moisture | +| 수산 | MRP | Marine Products | +| 수상 | WNAWD | Winning Award | +| 수선 | MNDG | Mending | +| 수소 | HYDR | Hydrogen | +| 수술 | SRGR | Surgery | +| 수습 | PRBT | Probation | +| 수식 | | | +| 수신 | RCPTN | Reception | +| 수심 | WTDTH | Water Depth | +| 수압 | WTRPRS | Water Pressure | +| 수여 | CNFR | Conferment | +| 수역 | WTRS | Waters | +| 수온 | WTTM | Water Temperature | +| 수요 | DMD | Demand | +| 수용 | ACTC | Acceptance | +| 수원 | WTRSRC | Water Source | +| 수위 | WTLV | Water Level | +| 수은 | MRCR | Mercury | +| 수임 | ACAP | Acceptance Of Appointment | +| 수입 | INCM | Income | +| 수정 | MDFCN | Modification | +| 수조 | WATNK | Water Tank | +| 수종 | TRSPC | Tree Species | +| 수준 | LV | Level | +| 수직 | VTCL | Vertical | +| 수질 | WQ | Water Quality | +| 수집 | CLCT | Collection | +| 수차 | WTRBN | Water Turbine | +| 수출 | EXP | Export | +| 수치 | NVL | Numerical Value | +| 수탁 | TRST | Trust | +| 수표 | CHECK | Check | +| 수풀 | WDLND | Woodland | +| 수행 | FLFMT | Fulfillment | +| 수험 | TKEXM | Taking An Exam | +| 숙박 | LDG | Lodge | +| 숙소 | ACMD | Accommodations | +| 순간 | MMNT | Moment | +| 순도 | PURDG | Purity Degree | +| 순번 | | | +| 순서 | SEQ | Sequence | +| 순수 | PURE | Pure | +| 순위 | RNK | Ranking | +| 순찰 | PTL | Patrol | +| 순환 | CRCL | Circulation | +| 순회 | RNDS | Rounds | +| 숨김 | HIDE | Hide | +| 숫자 | NUM | Numeral | +| 쉼터 | SHLTR | Shelter | +| 스팸 | SPAM | Spam | +| 습도 | HUM | Humidity | +| 습지 | WTLND | Wetland | +| 승계 | SCSN | Succession | +| 승급 | ADVN | Advancement | +| 승선 | EMKT | Embarkation | +| 승용 | PSNGR | Passenger | +| 승인 | APRV | Approval | +| 승진 | PRMT | Promotion | +| 승차 | RIDE | Ride | +| 시가 | MPRC | Market Price | +| 시각 | TM | Time | +| 시간 | HR | Hour | +| 시공 | CNST | Construct | +| 시군 | SIGUN | Si/Gun | +| 시기 | TMNG | Timing | +| 시도 | CTPV | Cities And Provinces | +| 시료 | SPCM | Specimen | +| 시범 | DMSTR | Demonstration | +| 시분 | HM | Hour And Minute | +| 시상 | WNARD | Winning Award | +| 시설 | FCLT | Facilities | +| 시작 | BGNG | Beginning | +| 시장 | MRKT | Market | +| 시정 | CRC | Correction | +| 시추 | DRLL | Drilling | +| 시트 | SHEET | Sheet | +| 시행 | ENFC | Enforcement | +| 시험 | TEST | Test | +| 식단 | DIET | Diet | +| 식당 | RSTNT | Restaurants | +| 식물 | PLNT | Plant | +| 식별 | IDNTF | Identification | +| 식비 | FDEXP | Food Expenses | +| 식사 | MEAL | Meal | +| 식생 | VGTTN | Vegetation | +| 식성 | TASTE | Taste | +| 식수 | DRWT | Drinking Water | +| 식품 | FOOD | Food | +| 신고 | DCLR | Declaration | +| 신규 | NEW | New | +| 신뢰 | CNFDNC | Confidence | +| 신설 | NBLDP | New Build Up | +| 신속 | RPD | Rapid | +| 신용 | CRDT | Credit | +| 신원 | IDTY | Identity | +| 신청 | APLY | Apply | +| 신체 | BDY | Body | +| 신축 | NWCN | New Constuction | +| 신탁 | TRUST | Trust | +| 신호 | SGNL | Signal | +| 실내 | IND | Indoor | +| 실명 | RLNM | Real Name | +| 실무 | PWRK | Practical Work | +| 실사 | ACINSP | Actual Inspection | +| 실습 | PRCTC | Practice | +| 실시 | ENFRC | Enforcement | +| 실외 | TOSD | The Outside | +| 실장 | DVSLD | Division Leader | +| 실적 | PRFMNC | Performance | +| 실제 | ACTL | Actual | +| 실측 | RLMSR | Real Measurement | +| 실태 | ACCND | Actual Condition | +| 실패 | FAIL | Failure | +| 실행 | EXCN | Execution | +| 실황 | LIVE | Live | +| 실효 | ACEF | Actual Effect | +| 심각 | SRUS | Serious | +| 심사 | SRNG | Screening | +| 심의 | DLBR | Deliberation | +| 심층 | DEPTHS | The Depths | +| 아동 | CHLDRN | Children | +| 아종 | SSPECS | (Biological) Subspecies | +| 악성 | MLGN | Malignant | +| 악취 | ODOR | Odor | +| 안개 | FOG | Fog | +| 안건 | AGND | Agenda | +| 안내 | GD | Guide | +| 안분 | PRDV | Proportional Division | +| 안전 | SFTY | Safety | +| 알람 | ALRM | Alarm | +| 알림 | NTI | Notice | +| 암거 | UNDDRN | Underdrain | +| 암반 | BLOCK | Bedlock | +| 암석 | ROK | Rock | +| 압력 | PRSUR | Pressure | +| 압류 | SZR | Seizure | +| 압축 | CMPRS | Compression | +| 애로 | DFCL | Difficulty | +| 액비 | LIQFER | Liquid Fertilizer | +| 액상 | | | +| 액체 | LQD | Liquid | +| 야간 | NGHT | Night | +| 야생 | WLDNS | Wildness | +| 약관 | TRMS | Terms | +| 약국 | PMCY | Pharmacy | +| 약도 | RGHMP | Rough Map | +| 약식 | INFML | Informality | +| 약어 | ABBR | Abbreviation | +| 약정 | STPL | Stipulation | +| 약품 | MDCN | Medicine | +| 양도 | CNVYN | Conveyance | +| 양력 | SLCL | Solar Calendar | +| 양성 | NRTR | Nurture | +| 양수 | AQST | Acquisition | +| 양식 | FORM | Form | +| 양육 | BRUP | Bringing-Up | +| 어도 | FSHWY | A Fishway | +| 어류 | FSH | Fish | +| 어선 | FSBT | Fishing Boat | +| 어업 | FSHRY | Fishery | +| 어음 | PRMNT | Promissory Note | +| 어종 | KDFSH | Kind Of Fish | +| 언론 | MSSMD | Mass Media | +| 언어 | LANG | Language | +| 업무 | TASK | Task | +| 업소 | BIZEST | Business Establishment | +| 업종 | TPBIZ | Type Of Business | +| 업체 | BZENTY | Business Entity | +| 업태 | BZSTAT | Business Status | +| 엑셀 | EXCEL | Excel | +| 엔진 | ENGN | Engine | +| 여과 | FILTR | Filteration | +| 여부 | YN | Yes Or No | +| 여비 | TRVEXP | Traveling Expenses | +| 여성 | FML | Female | +| 여울 | RPDS | Rapids (Ina River) | +| 여유 | RLXD | Relaxed | +| 여행 | TRVL | Travel | +| 역량 | CPBL | Capability | +| 역률 | PWRFTR | Power Factor | +| 역할 | ROLE | Role | +| 연간 | ANL | Annual | +| 연결 | LNKG | Linkage | +| 연계 | LINK | Link | +| 연관 | | | +| 연구 | RSCH | Research | +| 연금 | PN | Pension | +| 연대 | SLDT | Solidarity | +| 연도 | YR | Year | +| 연동 | ITRCK | Interlock | +| 연락 | CNCT | Contact | +| 연령 | AGE | Age | +| 연료 | FUEL | Fuel | +| 연못 | POND | Pond | +| 연번 | | | +| 연보 | ANNLS | Annuals | +| 연봉 | ANLSL | Annual Salary | +| 연산 | ARTOPN | Arithmetic Operation | +| 연소 | BURN | Burning | +| 연속 | CNTIN | Continue | +| 연수 | STDTRN | Study And Training | +| 연식 | MDLYY | Model Year | +| 연안 | COAST | Coast | +| 연월 | YM | Year And Month | +| 연임 | RPNTM | Reappointment | +| 연장 | PRLG | Prolongation | +| 연차 | ORDYR | Order Of Year | +| 연체 | ARG | Arrearage | +| 연혁 | CRNCL | Chronicle | +| 열람 | PRSL | Perusal | +| 열차 | TRAIN | Train | +| 염도 | SLDNS | Salt Density | +| 염소 | CHLOR | Chlorine | +| 영구 | PRMCE | Permanence | +| 영농 | FARMG | Farming | +| 영문 | ENG | English | +| 영업 | SALS | Sales | +| 영역 | RLM | Realm | +| 영치 | CSDY | Custody | +| 영향 | IMPCT | Impact | +| 영화 | MOVIE | Movie | +| 예규 | ESTRL | Established Rule | +| 예금 | SVG | Savings | +| 예년 | AVRYR | Average Year | +| 예문 | EXSNT | Example Sentence | +| 예방 | PRVTN | Prevention | +| 예보 | FRCST | Forecast | +| 예비 | RSRV | Reserve | +| 예산 | BGT | Budget | +| 예상 | EXPC | Expect | +| 예시 | EXM | Example | +| 예약 | RSVT | Reservation | +| 예외 | EXCP | Exception | +| 예정 | PRNMNT | Prearrangement | +| 예제 | EXRC | Exercise | +| 예측 | PREDC | Prediction | +| 예치 | DEPST | Deposit | +| 예탁 | DPSTG | Depositing | +| 오너 | | | +| 오늘 | TD | Today | +| 오니 | | | +| 오류 | ERR | Error | +| 오수 | DRTW | Dirty Water | +| 오염 | PLLTN | Pollution | +| 오일 | OIL | Oil | +| 오전 | AM | Ante Meridiem | +| 오존 | OZON | Ozone | +| 오차 | EGAP | Error Gap | +| 오픈 | OP | Open | +| 오후 | AFN | Afternoon | +| 옥내 | INDR | Indoor | +| 옥외 | OTDR | Outdoor | +| 온도 | TP | Temperature | +| 와류 | VORTEX | Vortex | +| 완납 | FLPY | Full Payment | +| 완료 | CMPTN | Completion | +| 완성 | FNL | Finalization | +| 완제 | FLRPY | Full Repayment | +| 외관 | APPRNC | Appearance | +| 외국 | FRGN | Foreign Nation | +| 외기 | OTAIR | Outside Air | +| 외래 | FREGN | Foreign | +| 외부 | OTSD | Outside | +| 외상 | ONCR | On Credit | +| 외식 | EATOUT | Eat Out | +| 외자 | FRCPTL | Foreign Capital | +| 외출 | GNOT | Going Out | +| 외화 | FRCNCY | Foreign Currency | +| 왼쪽 | | | +| 요건 | RQMT | Requirement | +| 요구 | RQT | Request | +| 요금 | CRG | Charge | +| 요령 | TCK | Trick | +| 요소 | ELM | Element | +| 요약 | SMRY | Summary | +| 요양 | RCPR | Recuperation | +| 요율 | TRF | Tariff | +| 요인 | FCT | (Cause) Factor | +| 요일 | DOW | Day Of The Week | +| 요청 | DMND | Demand | +| 욕실 | BTHRM | Bathroom | +| 용기 | BOWL | Bowl | +| 용도 | USG | Usage | +| 용량 | CPCT | Capacity | +| 용수 | USWTR | Using Water | +| 용어 | TRM | Terminology | +| 용역 | LBSVC | Labor Service | +| 용지 | LDPL | Land Parcel | +| 용출 | RSRGN | Resurgence | +| 우려 | CNCRN | Concern | +| 우선 | PRRTY | Priority | +| 우수 | EXLN | Excellence | +| 우안 | RGTBK | Right Bank | +| 우점 | DMNC | Dominance | +| 우측 | RGSD | Right Side | +| 우편 | MAIL | Mail | +| 우화 | EMRN | Emergence | +| 운고 | HFTC | Height Of The Cloud | +| 운동 | MVM | Movement | +| 운량 | CLDQ | Cloud (Amount) | +| 운반 | CRRG | Carriage | +| 운송 | TRNSP | Transportation | +| 운수 | TRANSP | Transportation | +| 운영 | OPER | Operation | +| 운임 | FARE | Fare | +| 운전 | OPRN | Operation | +| 운항 | NVGT | Navigation | +| 운행 | OPR | Operation | +| 운형 | CLDS | Cloud Designs | +| 원가 | PRMCO | Prime Cost | +| 원격 | REMT | Remote | +| 원경 | DSTNVW | Distant View | +| 원고 | PLNTF | Plaintiff | +| 원금 | PRN | Principal | +| 원료 | BMTRL | Base Material | +| 원리 | PRNCP | Principle | +| 원문 | ORGTXT | Original Text | +| 원본 | ORGNL | Original | +| 원수 | ORGWT | Origin'S Water | +| 원시 | PRMTV | Primitive | +| 원인 | CS | Cause | +| 원장 | GNLGR | General Ledger | +| 원점 | TRGNPT | Trigon Point | +| 원천 | SOU | Source | +| 원화 | KCUR | Korean Currency | +| 월간 | MTHL | Monthly | +| 월류 | WORFLW | (Water) Overflow | +| 월별 | BMM | By Month To Month | +| 월세 | MRNT | Monthly Rent | +| 위도 | LAT | Latitude | +| 위반 | VLTN | Violation | +| 위배 | | | +| 위생 | HGEN | Hygiene | +| 위성 | STLT | Satellite | +| 위원 | MBCMT | Member Of Committee | +| 위임 | DLGT | Delegation | +| 위촉 | ENTRST | Entrusting | +| 위치 | PSTN | Position | +| 위탁 | CNSGN | Consign | +| 위험 | DNGR | Danger | +| 유가 | OILPRC | Oil Price | +| 유관 | | | +| 유량 | VLFL | Volume Of Flow | +| 유로 | FLWCNL | Flow Channel | +| 유료 | CHRG | Charged | +| 유리 | GLASS | Glass | +| 유무 | EN | Existence And Nonexistence | +| 유물 | RLC | Relic | +| 유발 | INDC | Induce | +| 유보 | DFR | Defer | +| 유사 | SMLR | Similar | +| 유상 | CMPNS | (Pay) Compensation | +| 유선 | WRD | Wired | +| 유속 | FVLC | Flow Velocity(Velocity Of A Moving Fluid) | +| 유실 | LSWTR | Loss In Water | +| 유압 | OLPRSR | Oil Pressure | +| 유역 | BSN | Basin | +| 유예 | PSTP | Postponement | +| 유의 | CTN | Caution | +| 유입 | INFLW | Inflow | +| 유저 | | | +| 유지 | KEEP | Keep | +| 유찰 | FLBD | Failure In Bidding | +| 유체 | FLUID | Fluid | +| 유출 | OTFLW | Outflow | +| 유통 | RTL | Retail | +| 유해 | HRMFL | Harmful | +| 유형 | TYPE | Type | +| 유효 | VLD | Validity | +| 육상 | OLAND | Overland | +| 윤달 | LPMM | Leap Month | +| 은행 | BANK | Bank | +| 음력 | LNCL | Lunar Calendar | +| 음성 | VOICE | Voice | +| 음식 | | | +| 음용 | DKPP | Drinking Purpose | +| 음원 | SDSRC | A Sound Source | +| 음주 | DRNK | Drinking | +| 응급 | EMGNCY | Emergency | +| 응답 | RSPNS | Response | +| 응모 | ENTRY | Entry | +| 응시 | TKEX | Take An Exam | +| 의견 | OPNN | Opinion | +| 의결 | DCS | Decision | +| 의뢰 | RQST | Request | +| 의료 | MDLCR | Medical Care | +| 의류 | CLTHS | Clothes | +| 의무 | OBLG | Obligation | +| 의미 | MNNG | Meaning | +| 의사 | DR | Doctor | +| 의안 | PBIL | (Proposal) Bill | +| 의제 | | | +| 이격 | SEPR | Separation (Clearance) | +| 이관 | TRNSF | Transfer | +| 이내 | WTHN | Within | +| 이동 | MVMN | Movement | +| 이력 | HSTRY | History | +| 이름 | | | +| 이사 | MVHS | Move House | +| 이상 | ANMLY | Anomaly | +| 이송 | TRNFR | Transferred | +| 이수 | CMCRS | Completion Of Course | +| 이슈 | ISSUE | Issue | +| 이연 | DFRD | Deferred | +| 이온 | ION | Ion | +| 이용 | UTZTN | Utilization | +| 이월 | CRFW | Carry Forward | +| 이유 | | | +| 이윤 | PRFT | Profit | +| 이율 | INRT | Interest Rate | +| 이의 | OBJC | Objection | +| 이익 | PRF | Profit | +| 이자 | INT | Interest Charge | +| 이전 | BFR | Before | +| 이주 | MV | Move | +| 이첩 | FRWD | Forwarding | +| 이체 | TFR | Transfer | +| 이하 | LSST | Less Than | +| 이행 | IMPLT | Implementation | +| 이혼 | DVRC | Divorce | +| 이후 | AFTR | After | +| 익명 | ANMT | Anonymity | +| 익일 | NXDD | Next Day | +| 인가 | SNCN | Sanction | +| 인계 | HNOV | Handover | +| 인공 | ARTFC | Artificial | +| 인구 | PPLTN | Population | +| 인근 | NRBY | Nearby | +| 인당 | PS | Person | +| 인도 | CNVYNC | Conveyance | +| 인력 | MNPW | Manpower | +| 인명 | HNL | Human Life | +| 인물 | PRSN | Personage | +| 인사 | HMRS | Human Resource | +| 인산 | PHACID | Phosphoric Acid | +| 인쇄 | PRINT | Print | +| 인수 | ACPTN | Acceptance | +| 인식 | AWRNS | Awareness | +| 인원 | PEPL | People | +| 인자 | FCTR | Factor | +| 인접 | ADJC | Adjacent | +| 인정 | RCG | Recognition | +| 인증 | CERT | Certification | +| 인지 | PRCPT | Perception | +| 인체 | HMBD | Human Body | +| 인허 | | | +| 일괄 | EBLC | En Bloc | +| 일기 | | | +| 일문 | JPNS | Japanese Sentence | +| 일반 | GNRL | General | +| 일별 | BDAY | By Day | +| 일본 | JPN | Japan | +| 일비 | DLYEXP | Daily Expenses | +| 일사 | SOLRD | Solar Radiation | +| 일선 | FRLN | First Line | +| 일시 | DT | Date And Time | +| 일일 | DAILY | Daily | +| 일자 | YMD | Year Month Day | +| 일정 | SCHDL | Schedule | +| 일조 | SNSH | Sunshine | +| 일지 | DLYD | Daily Report | +| 일치 | CCRNC | Concurrence | +| 일터 | | | +| 일할 | DBAS | Daily Basis | +| 임기 | TNR | Tenure | +| 임대 | RENT | Rent | +| 임명 | NMNT | Nomination | +| 임무 | MSSN | Mission | +| 임시 | TMPR | Temporary | +| 임신 | PRGN | Pregnancy | +| 임야 | FSTLND | Forest Land | +| 임업 | FSTR | Forestry | +| 임용 | APNTMN | Appointment | +| 임원 | EXC | Executive | +| 임의 | RNDM | Random | +| 임차 | HIRE | Hire | +| 입고 | WRHS | Warehousing | +| 입교 | ENTSCH | Entrance Into A School | +| 입국 | ENTCNY | Entering A Country | +| 입금 | DPST | Deposit | +| 입대 | ENLSTM | Enlistment | +| 입도 | GRNSZ | Grain Size | +| 입력 | INPT | Input | +| 입사 | JNCMP | Joining A Company | +| 입산 | MTCG | Mountain-Climbing | +| 입소 | ENTRC | Entrance | +| 입수 | OBTN | Obtain | +| 입실 | ENTRM | Entering A Room | +| 입양 | ADP | Adoption | +| 입원 | HSPTLZ | Hospitalization | +| 입자 | PARTCL | Particle | +| 입장 | ADMS | Admission | +| 입주 | MVN | Moving In | +| 입증 | PROV | Prove | +| 입지 | PSTST | (Site) Position | +| 입찰 | BID | Bid | +| 입학 | MTCLTN | Matriculation | +| 입항 | PTENT | Port Entry | +| 입회 | ATWT | Attend And Witness | +| 잉여 | SURPLS | Surplus | +| 자가 | OSLF | Oneself | +| 자갈 | GRVL | Gravel | +| 자격 | QLFC | Qualification | +| 자금 | FNDS | Funds | +| 자녀 | CHLD | Children | +| 자동 | AUTO | Automatic | +| 자료 | DATA | Data | +| 자립 | SRLNE | Self-Reliance | +| 자막 | CAPTN | Caption | +| 자문 | CNSTN | Consultation | +| 자본 | CPT | Capital | +| 자사 | MYCOMP | My Company | +| 자산 | AST | Asset | +| 자연 | NATR | Nature | +| 자원 | RSRC | Resources | +| 자율 | SLCR | Self-Control | +| 자재 | MTRL | Materials | +| 자체 | ONLF | Oneself | +| 자택 | HOME | Home | +| 작동 | OPRTG | Operating | +| 작물 | CROP | Crop | +| 작성 | WRT | Writing | +| 작업 | JOB | Job | +| 작품 | WRKS | Works | +| 잔금 | BALNC | Balance | +| 잔량 | RSDQNT | Residual Quantity | +| 잔류 | REMN | Remaining | +| 잔반 | LTVRS | Leftovers | +| 잔식 | UNTFD | Uneaten Food | +| 잔액 | BLNC | Balance | +| 잔여 | RMND | Remainder | +| 잔존 | RMN | Remain | +| 잠금 | LCK | Locking | +| 잠재 | LDRMNT | Lie Dormant | +| 잡비 | MSEXP | Miscellaneous Expenses | +| 잡종 | CRHY | Crossbreed Hybrid | +| 장관 | MNST | Minister | +| 장기 | LTRM | Long Term | +| 장내 | ITHL | In The Hall | +| 장부 | | | +| 장비 | EQPMNT | Equipment | +| 장소 | PLC | Place | +| 장애 | DSBLTY | Disability | +| 장외 | OTCNTR | Over The Counter | +| 장착 | MNTNG | Mounting | +| 장치 | DVC | Device | +| 재개 | RSMP | Resumption | +| 재결 | ADJD | Adjudication | +| 재고 | INVT | Inventory | +| 재난 | CLMTY | Calamity | +| 재료 | MATRL | Material | +| 재무 | FNNR | Financial Affair | +| 재물 | RCHS | Riches | +| 재발 | RECUR | Recur | +| 재배 | CTVT | Cultivation | +| 재산 | PRPT | Property | +| 재원 | FNRS | Financial Resource | +| 재정 | FNN | (Economy) Finance | +| 재직 | HDOF | Hold Office | +| 재진 | REXM | Re-Examination | +| 재질 | MQLT | Material Quality | +| 재택 | ATHM | At Home | +| 재학 | INSCH | In School | +| 재해 | DSTR | Disaster | +| 쟁점 | | | +| 저감 | MTGT | Mitigation | +| 저류 | IMPD | Impound | +| 저서 | WRBK | Writing Book | +| 저자 | AUT | Author | +| 저장 | STRG | Storage | +| 저항 | RS | Resistance | +| 적격 | ELGB | Eligibility | +| 적발 | DSCL | Disclose | +| 적산 | | | +| 적설 | DSNW | Deep Snow | +| 적요 | ABSTR | Abstract | +| 적용 | APLCN | Application | +| 적재 | LOAD | Load | +| 적정 | RSNB | Reasonable | +| 적중 | CMTR | Come True | +| 적합 | STBLT | Suitability | +| 전거 | | | +| 전결 | DCARB | Deciding Arbitrarily | +| 전공 | MJR | Major | +| 전국 | NTWDE | Nationwide | +| 전기 | PRVTM | Previous Term | +| 전년 | PRYY | Previous Year | +| 전단 | FRDED | Forward Edge | +| 전달 | CNVY | Convey | +| 전담 | EXCHG | Exclusive Charge | +| 전도 | CDTN | Conduction | +| 전등 | | | +| 전략 | STRTG | Strategy | +| 전력 | ELPWR | Electric Power | +| 전류 | ERCRT | Electric Current | +| 전망 | PRSPT | Prospect | +| 전문 | TELGM | Telegram | +| 전산 | EDP | Electronic Data Processing | +| 전세 | LODB | Lease Of Deposit Basis | +| 전송 | TRSM | Transmission | +| 전시 | EXHB | Exhibition | +| 전압 | VLTGE | Voltage | +| 전역 | DCRG | Discharge | +| 전용 | EXUSE | Exclusive Use | +| 전원 | SELCT | Source Of Electricity | +| 전월 | PRVMM | The Previous Month | +| 전일 | PRVDY | The Previous Day | +| 전입 | MVIN | Move In | +| 전자 | ELTR | Electron | +| 전주 | LSWEEK | Last Week | +| 전지 | BATT | Battery | +| 전체 | WHOL | Whole | +| 전출 | MVOUT | Moving Out | +| 전표 | SLIP | Slip | +| 전화 | TEL | Telephone | +| 전환 | SWTC | Switching | +| 전회 | PRTRN | Previous Turn | +| 절감 | RTRC | Retrenchment | +| 절대 | CMPLTL | Completely | +| 절사 | TRNC | Truncation | +| 절약 | ECNMY | Economy(Save) | +| 절차 | PROC | Procedure | +| 점검 | CHCK | Check | +| 점도 | VSC | Viscosity | +| 점수 | SCR | Score | +| 점용 | OCPY | Occupy | +| 점유 | | | +| 점포 | STOR | Store | +| 접근 | ACS | Access | +| 접속 | CNTN | Connection | +| 접수 | RCPT | Receipt | +| 접종 | INCLN | Inoculation | +| 접촉 | CNTC | Contact | +| 정격 | RGLT | Regularity | +| 정기 | REGL | Regular | +| 정년 | RTAG | Retirement Age | +| 정답 | CRANS | Correct Answer | +| 정당 | PLTPT | Political Party | +| 정도 | ABT | About | +| 정량 | QNTV | Quantitive | +| 정렬 | SORT | Sort | +| 정리 | ARNGMT | Arrangement | +| 정면 | FRNT | Front | +| 정밀 | PRCIS | Precision | +| 정보 | INFO | Information | +| 정부 | GOV | Government | +| 정비 | MTNC | Maintenance | +| 정산 | CLCLN | Calculation | +| 정상 | NML | Normal | +| 정수 | CLWR | Clean Water | +| 정액 | FXAMT | Fixed Amount | +| 정원 | PSCP | Personnel Capacity | +| 정의 | DEF | Definition | +| 정전 | OTG | Outage | +| 정정 | CRCTN | Correction | +| 정제 | REFINE | Refining | +| 정지 | STOP | Stop | +| 정책 | PLCY | Policy | +| 정체 | STGNTN | Stagnation | +| 정화 | PRFCTN | Purification | +| 제거 | RMVL | Removal | +| 제곱 | SQ | Square (Of) | +| 제공 | PVSN | Provision | +| 제기 | RAIS | Raise | +| 제도 | SYST | (Policy) System | +| 제목 | TTL | Title | +| 제방 | LEV | Levee | +| 제보 | TPOF | Tip Off | +| 제안 | PRP | Proposal | +| 제약 | RSTRCT | Restriction | +| 제어 | CNTL | Control | +| 제외 | EXCL | Exclusion | +| 제원 | SPEC | Specifications | +| 제작 | FBCTN | Fabrication | +| 제재 | RSTRC | Restriction | +| 제정 | ENCT | Enactment | +| 제조 | MNFTR | Manufacture | +| 제체 | LVBD | Levee Body | +| 제출 | SBMSN | Submission | +| 제품 | PRDCT | Product | +| 제한 | LMT | Limit | +| 제휴 | AFLT | Affiliation | +| 조건 | CND | Condition | +| 조경 | LDHC | Landscape Architecture | +| 조기 | ERLY | Early | +| 조달 | PRCM | Procurement | +| 조류 | BIRDS | Birds | +| 조명 | LGHT | Light | +| 조문 | LPRVS | Legal Provision | +| 조사 | EXMN | Examination | +| 조석 | TIDE | Tide | +| 조성 | MKNG | Making | +| 조식 | BRKF | Breakfast | +| 조위 | TDLV | Tide Level | +| 조작 | HNDLG | Handling | +| 조절 | RGLTE | Regulate | +| 조정 | AJMT | Adjustment | +| 조직 | OGNZ | Organization | +| 조치 | ACTN | Action | +| 조합 | ASCT | Association | +| 조항 | CLUS | Clause | +| 조회 | INQ | Inquiry | +| 존속 | CNEXS | Continue To Exist | +| 존재 | EXST | Existence | +| 존폐 | MTNABN | Maintenance Or Abolition | +| 졸업 | GRDTN | Graduation | +| 종결 | TRMN | Termination | +| 종교 | RLGN | Religion | +| 종료 | END | End | +| 종류 | KND | Kind | +| 종목 | CLS | Class | +| 종별 | BKND | By Kind | +| 종이 | PPR | Paper | +| 종일 | ALDY | All Day | +| 종자 | SEED | Seed | +| 종점 | EDPNT | End Point | +| 종합 | SNTHS | Synthesize | +| 좋음 | GOOD | Good | +| 좌석 | SEAT | Seat | +| 좌안 | LFTBK | Left Bank | +| 좌측 | LSD | Left Side | +| 주간 | DDTM | Daytime | +| 주거 | | | +| 주관 | SPRVSN | Supervision | +| 주기 | CYCLE | Cycle | +| 주말 | WKND | Weekend | +| 주무 | ICHG | In Charge Of | +| 주문 | ORDR | Order | +| 주민 | RSDR | Resident Person | +| 주변 | ARND | Around | +| 주석 | ANTN | Annotation | +| 주소 | ADDR | Address | +| 주수 | WKCNT | Week Count | +| 주식 | STCK | Stock | +| 주심 | CRFR | Chief Referee | +| 주요 | MAIN | Main | +| 주유 | RFL | Refueling | +| 주의 | CUTN | Caution | +| 주입 | INJCT | Injection | +| 주제 | TPC | Topic | +| 주주 | STHD | Stockholder | +| 주차 | PRK | Parking | +| 주체 | MNBD | Main Body | +| 주최 | HST | Host | +| 주키 | | | +| 주택 | HS | House | +| 준공 | CMCN | Completion Of Construction | +| 준비 | PREPR | Preparation | +| 준설 | DRDGN | Dredging | +| 준수 | CMPLY | Comply | +| 중간 | MD | Middle | +| 중개 | MDT | Mediation | +| 중계 | RLY | Relay | +| 중고 | USED | Used | +| 중국 | CHIN | China | +| 중기 | MLTRM | Middle Term | +| 중단 | ITRP | Interruption | +| 중도 | MDWY | Midway | +| 중량 | WGHT | Weight | +| 중문 | CHNS | Chinese Sentence | +| 중복 | DPCN | Duplication | +| 중식 | LUNCH | Lunch | +| 중심 | CEN | Central | +| 중앙 | CTRL | Central | +| 중요 | IMPT | Important | +| 중점 | EMPHS | Emphasis | +| 중증 | SVRLY | Severely | +| 중지 | HLT | Halt | +| 중층 | MDCL | Middle Class | +| 증가 | INCRS | Increase | +| 증감 | ICDC | Increase And Decrease | +| 증권 | SCRT | Securities | +| 증기 | STM | Steam | +| 증량 | AGMNT | Augmentation | +| 증명 | ECTFN | (Evidence) Certification | +| 증발 | VPRZN | Vaporization | +| 증빙 | EVDNC | Evidence | +| 증상 | SMPTM | Symptom | +| 증설 | XBLDP | Extension Build Up | +| 증식 | PRLRT | Proliferation | +| 증액 | ICAMT | Increased Amount | +| 지구 | DSTRCT | District | +| 지급 | GIVE | Give | +| 지도 | MAP | Map | +| 지령 | DRTV | Directive | +| 지로 | GIRO | Giro | +| 지류 | TRBTR | Tributary | +| 지면 | GROND | Ground | +| 지목 | LDCG | Land Category | +| 지반 | BSGR | Base Ground | +| 지방 | LCL | Local | +| 지번 | LOTNO | Lot Number | +| 지분 | SHR | Share | +| 지불 | DFRY | Defrayal | +| 지붕 | ROOF | Roof | +| 지사 | BROF | Branch Office | +| 지상 | GRND | Ground | +| 지세 | TPGPH | Topography | +| 지속 | SSTN | Sustain | +| 지수 | IDX | Index | +| 지시 | DRCTN | Direction | +| 지식 | KNWL | Knowledge | +| 지역 | RGN | Region | +| 지연 | DLY | Delay | +| 지열 | TRHT | Terrestrial Heat | +| 지원 | SPRT | Support | +| 지적 | PTOUT | Point Out | +| 지점 | BRNCH | Branch | +| 지정 | DSGN | Designation | +| 지진 | ERTHQK | Earthquake | +| 지질 | GEOLG | Geology | +| 지체 | | | +| 지출 | EXPND | Expenditure | +| 지침 | GUIDNC | Guidance | +| 지표 | IDCT | Indicator | +| 지하 | UDGD | Underground | +| 지형 | TRRN | Terrain | +| 직경 | DIA | Diameter | +| 직군 | JGRP | Job Group | +| 직급 | JBGD | Job Grade | +| 직렬 | JBSRS | Job Series | +| 직류 | TPOC | Type Of Occupation | +| 직무 | DUTY | Duty | +| 직업 | CR | Career | +| 직영 | DROPER | Direct Operation | +| 직원 | EMP | Employee | +| 직위 | JBPS | Job Position | +| 직인 | OFSL | Office Seal | +| 직장 | WRC | Workplace | +| 직접 | DRCT | Direct | +| 직제 | OFORG | Office Organization | +| 직종 | OCPT | Occupation | +| 직책 | JBTTL | Job Title | +| 직통 | DRLN | Direct Line | +| 진단 | DGNS | Diagnosis | +| 진도 | PRGD | Progress Degree | +| 진동 | VBRT | Vibration | +| 진료 | MDEXM | Medical Examination | +| 진입 | ACCS | Access | +| 진행 | PRGRS | Progress | +| 질량 | MSS | Mass | +| 질문 | QSTN | Question | +| 질병 | DSS | Disease | +| 질의 | INQRY | Inquiry | +| 집계 | TOT | Total | +| 집광 | CRTL | Concentrate Light | +| 집중 | FCUS | Focus | +| 집행 | IMPL | Implementation | +| 집회 | GTHR | Gathering | +| 징계 | DSPN | Disciplinary Punishment | +| 징구 | CLRQ | Collection Request | +| 징수 | CLCTN | Collection | +| 쪽지 | NOTE | Note | +| 차감 | SBTR | Subtraction | +| 차관 | VMNST | Vice-Minister | +| 차기 | NXTM | Next Term | +| 차단 | SHTOT | Shut Out | +| 차량 | VHCL | Vehicle | +| 차로 | LANE | Lane | +| 차변 | DBSD | The Debit Side | +| 차선 | TRFLN | Traffic Lane | +| 차수 | CYCL | Cycle | +| 차압 | PSD | Pressure Difference | +| 차액 | DFAMT | Difference Amount | +| 차이 | DIFF | Difference | +| 차입 | BRW | Borrowing | +| 차종 | CARMDL | Car Model | +| 차집 | ICPTG | Intercepting | +| 차축 | AXLE | An Axle | +| 차트 | CHRT | Chart | +| 착공 | BGNCST | Begin Construction | +| 착수 | OTST | Outset | +| 착정 | BRNG | Boring | +| 찬반 | FRAGN | For And Against | +| 참고 | REF | Reference | +| 참석 | ATND | Attendance | +| 참여 | PTCP | Participation | +| 참조 | RFRNC | Reference | +| 창고 | WRHUS | Warehouse | +| 창업 | STUP | Start Up | +| 채광 | BWL | Be Well-Lighted | +| 채권 | BND | Bond | +| 채널 | CHNL | Channel | +| 채무 | DBT | Debt | +| 채수 | WTSMP | Water Sampling | +| 채용 | RCRUT | Recruit | +| 채점 | GRDG | Grading | +| 채집 | CLLT | Collect | +| 채취 | PCKNG | Picking | +| 채택 | ADPT | Adoption | +| 채혈 | BLDGTH | Blood-Gathering | +| 책임 | RSP | Responsibility | +| 책자 | BKLET | Booklet | +| 처리 | PRCS | Process | +| 처방 | PRSC | Prescription | +| 처분 | DSPS | Disposition | +| 척도 | YDST | Yardstick | +| 철거 | DMLTN | Demolition | +| 철관 | IRPP | An Iron Pipe | +| 철회 | RCNTT | Recantation | +| 첨두 | PEAK | Peak | +| 첨부 | ATCH | Attachment | +| 청구 | CLM | Claim | +| 청렴 | INTGRT | Integrity | +| 청문 | HRNG | Hearing | +| 청소 | CLEAN | Cleaning | +| 청약 | SBSC | Subscription | +| 청정 | CLEN | Clean | +| 청취 | LSTN | Listening | +| 청탁 | SLCT | Solicitation | +| 체결 | CNCLS | Conclusion | +| 체계 | SYSTM | System | +| 체납 | NPMNT | Nonpayment | +| 체류 | STAY | Stay | +| 체적 | VLM | (Capacity) Volume | +| 체크 | BCHCK | (Basic) Check | +| 체험 | EXPRN | Experience | +| 초과 | EXCS | Excess | +| 초기 | INITL | Initial | +| 초당 | PRSEC | Per Second | +| 초록 | ABST | Abstract | +| 초상 | FRSTSS | First Frost Of Season | +| 초지 | GRSLND | Grassland | +| 초진 | FMEXM | First Medical Examination | +| 총계 | TSM | Summation | +| 총괄 | OVRL | Overall | +| 총서 | SRS | Series | +| 총액 | | | +| 총인 | TPH | Total Phosphorus | +| 총종 | TNSPCS | Total Species | +| 총쪽 | TPAGE | Total Pages | +| 촬영 | SHT | Shooting | +| 최고 | HGHST | Highest | +| 최근 | RCNT | Recent | +| 최대 | MAX | Maximum | +| 최소 | MIN | Minimum | +| 최신 | LTST | Latest | +| 최저 | LOWST | Lowest | +| 최적 | OPTMM | Optimum | +| 최종 | LAST | Last | +| 최초 | FRST | First | +| 추가 | ADD | Addition | +| 추계 | ESTM | Estimating | +| 추세 | TRND | Trend | +| 추심 | EXCT | Exaction | +| 추인 | CNFRM | Confirmation | +| 추적 | TRC | Trace | +| 추정 | PRSMP | Presumption | +| 추진 | PRPL | Propulsion | +| 추천 | RCMDTN | Recommendation | +| 추첨 | LTRY | Lottery | +| 추출 | EXTR | Extraction | +| 축냉 | CLDST | Cold Storage | +| 축분 | LIVEMR | Livestock Manure | +| 축사 | CTSHD | Cattle Shed | +| 축산 | LVST | Livestock | +| 축제 | FSTVL | Festival | +| 축종 | DASPCS | Domestic Animal Species | +| 축척 | RDSCL | Reduced Scale | +| 출고 | SPMT | Shipment | +| 출구 | EXIT | Exit | +| 출국 | DPTCNY | Departure From A Country | +| 출근 | GTWK | Go To Work | +| 출금 | TKMNY | Taking Out Money | +| 출동 | DSPT | Dispatched | +| 출력 | OTPT | Output | +| 출발 | DPTRE | Departure | +| 출산 | CHLDB | Childbirth | +| 출생 | BRTH | Birth | +| 출석 | ATNDC | Attendance | +| 출시 | RELSE | Release | +| 출연 | CTRB | Contribution | +| 출원 | APPL | Application | +| 출입 | ENEX | Entrance And Exit | +| 출자 | INVST | Investment | +| 출장 | BZTRP | Business Trip | +| 출제 | STXQ | Setting Exam Questions | +| 출처 | SRC | Source | +| 출판 | PBLSG | Publishing | +| 출하 | CON | Con | +| 출항 | DFPT | Departure From Port | +| 출현 | APRC | Appearance | +| 충당 | APRP | Appropriation | +| 충돌 | CRASH | Crash | +| 충전 | CHARG | Charging | +| 충족 | STSF | Satisfaction | +| 취급 | HNDL | Handling | +| 취득 | ACQS | Acquisition | +| 취미 | HBY | Hobby | +| 취소 | RTRCN | Retraction | +| 취수 | WTRIT | Water-Intake | +| 취약 | FRGLTY | Fragility | +| 취업 | EMPM | Employment | +| 취임 | INGR | Inauguration | +| 취지 | INTN | Intent | +| 취하 | DISCON | Discontinuance | +| 취합 | GTRG | Gathering | +| 측량 | SVY | Surveying | +| 측면 | SIDE | Side | +| 측선 | SDTRCK | Sidetrack | +| 측점 | MSREPT | A Measuring Point | +| 측정 | MSRMT | Measurement | +| 층수 | NOFL | The Number Of Floors | +| 치료 | MDTRT | Medical Treatment | +| 치어 | YGFISH | Young Of Fishes | +| 친수 | HDRPL | Hydrophile | +| 친화 | FRSHP | Friendship | +| 침수 | FLDNG | Flooding | +| 침하 | SSDCE | Subsidence | +| 침해 | INFR | Infringement | +| 카드 | CARD | Card | +| 커버 | | | +| 컬럼 | COL | Column | +| 코드 | CD | Code | +| 콘도 | CONDO | Condominium | +| 쿠폰 | CPN | Coupon | +| 쿼터 | QTA | Quota | +| 퀴즈 | QZ | Quiz | +| 크기 | SZ | Size | +| 클릭 | CLCK | Click | +| 타사 | OCMP | Other Company | +| 탁도 | TRBT | Turbidity | +| 탄소 | CRBN | Carbon | +| 탈거 | CRYOFF | Carry Off | +| 탈락 | ELMT | Elimination | +| 탈수 | DHDR | Dehydration | +| 탈착 | DPTN | Desorption | +| 탈퇴 | WHDWL | Withdrawal | +| 탐사 | EXPLR | Exploration | +| 탑승 | BRDG | Boarding | +| 태그 | TAG | Tag | +| 태풍 | TYPHN | Typhoon | +| 터널 | TNL | Tunnel | +| 토론 | DSCS | Discussion | +| 토목 | ENGRK | Engineering Works | +| 토사 | ETND | Earth And Sand | +| 토양 | SOIL | Soil | +| 토익 | TOEIC | Test Of English For International Communication | +| 토지 | LAND | Land | +| 톤수 | TON | Tonnage | +| 통계 | STATS | Statistics | +| 통과 | PAS | Pass | +| 통관 | CSCL | Customs Clearance | +| 통보 | NTFCTN | Notification | +| 통신 | CMN | Communication | +| 통일 | UNFCTN | Unification | +| 통제 | CNTRL | Control | +| 통지 | AVTSMT | Avertissement | +| 통합 | INTG | Integration | +| 통화 | CALL | Call | +| 퇴거 | EVCT | Eviction | +| 퇴근 | LVWK | Leave Work | +| 퇴비 | CMPS | Compost | +| 퇴사 | RSGNTN | Resignation | +| 퇴소 | DSCG | Discharge | +| 퇴실 | LVRM | Leaving The Room | +| 퇴원 | DFHSP | Discharged From Hospital | +| 퇴직 | RTRM | Retirement | +| 투과 | PENTR | Penetration | +| 투약 | MDCT | Medication | +| 투입 | INPUT | Input | +| 투자 | IVST | Investment | +| 투찰 | BDNG | Bidding | +| 투표 | VOTE | Vote | +| 트럭 | TRCK | Truck | +| 특기 | SPCLT | Specialty | +| 특례 | SPCS | Special Case | +| 특별 | SPC | Special | +| 특보 | SPNWS | Special News | +| 특성 | CHRTC | Characteristic | +| 특수 | SPCL | Special | +| 특약 | SPPRV | Special Provision | +| 특이 | EXCPTN | Exception | +| 특정 | PTCLR | Particular | +| 특징 | GNCHC | (General) Characteristic | +| 특허 | PTNT | Patent | +| 팀장 | TMLDR | Team Leader | +| 파견 | SND | Send | +| 파고 | WVHGT | Wave Height | +| 파기 | DSTRC | Destruction | +| 파산 | BNKRP | Bankruptcy | +| 파손 | BRKG | Breakage | +| 파일 | FILE | File | +| 판결 | JDGM | Judgment | +| 판독 | INTERP | Interpretation | +| 판매 | NTSL | Net Sales | +| 판정 | JGMT | Judgement | +| 팝업 | POPUP | Popup | +| 패류 | SHLFSH | Shellfish | +| 패소 | LSCS | Lose A Case | +| 패스 | | | +| 패턴 | PTTN | Pattern | +| 팩스 | FAX | Fax | +| 펀드 | FUND | Fund | +| 펌프 | PUMP | Pump | +| 페놀 | PHNL | Phenol | +| 편성 | FRMT | Formation | +| 편입 | ENRL | Enrollment | +| 편집 | EDIT | Edit/ Editing | +| 편차 | DVT | Deviation | +| 평가 | EVL | Evaluation | +| 평균 | AVG | Average | +| 평면 | PLANE | Plane | +| 폐간 | DSCT | Discontinuation | +| 폐강 | CLCTR | Closing Lecture | +| 폐국 | | | +| 폐기 | DSCD | Discard | +| 폐쇄 | CLSG | Closing | +| 폐수 | WWT | Waste Water | +| 폐업 | CLSBIZ | Closing Of Business | +| 폐열 | EXSH | Exhaust Heat | +| 폐지 | ABL | Abolition | +| 포괄 | CMPH | Comprehend | +| 포기 | ABND | Abandonment | +| 포럼 | FRUM | Forum | +| 포맷 | | | +| 포상 | RWRD | Reward | +| 포장 | PCKGN | Packaging | +| 포집 | SPCR | Speicherung | +| 포트 | PORT | Port | +| 포함 | INCL | Inclusion | +| 포화 | STRN | Saturation | +| 포획 | CPTR | Capture | +| 폭발 | EPLS | Explosion | +| 폰트 | FNT | Font | +| 폴더 | FLDR | Folder | +| 표고 | ELVTN | Elevation | +| 표기 | MARK | Marking | +| 표면 | SRFC | Surface | +| 표본 | SAMPLE | Sample | +| 표시 | INDCT | Indication | +| 표준 | STD | Standard | +| 표지 | CVR | Cover | +| 표출 | EXPRS | Expression | +| 품목 | ITEM | Item | +| 품의 | CNSL | Consultation | +| 품종 | VRTY | Variety | +| 품질 | QLT | Quality | +| 풍력 | WPWR | Wind Power | +| 풍속 | WSPD | Wind Speed | +| 풍정 | WDDST | Wind Drift Distance | +| 풍향 | WDRCT | Wind Direction | +| 피고 | DFND | Defendant | +| 피도 | CVRAGE | Cover (Age) | +| 피해 | DAM | Damage | +| 피혁 | LTHR | Leather | +| 픽셀 | PXL | Pixel | +| 필기 | NTTK | Note-Taking | +| 필수 | ESNTL | Essential | +| 필요 | NEED | Need | +| 필지 | LTLND | Lot Of Land | +| 필터 | FILT | Filter | +| 하구 | RVMTH | River Mouth | +| 하단 | LWND | Lower End | +| 하도 | RVCRS | River Course | +| 하류 | DNSTM | Downsteam | +| 하상 | RVBD | A River Bed | +| 하수 | SWAGE | Sewage | +| 하안 | RVRSD | Riverside | +| 하역 | LNL | Loading And Unloading | +| 하위 | LWR | Lower | +| 하자 | FLW | Flaw | +| 하천 | RVR | River | +| 하층 | LWCL | Lower Class | +| 하폭 | WR | Width Of River | +| 하한 | LLMT | The Lower Limit | +| 하향 | DWNWRD | Downward | +| 학과 | SCSBJT | School Subject | +| 학교 | SCHL | School | +| 학급 | CLAS | Class | +| 학년 | SCYR | School Year | +| 학력 | ACBG | Academic Background | +| 학명 | STNM | Scientific Name | +| 학생 | STDNT | Student | +| 학술 | ACDM | Academic | +| 학습 | LRN | Learning | +| 학원 | PEIT | Private Educational Institute | +| 학위 | DGR | Degree | +| 학회 | ACSCT | Academic Society | +| 한강 | HNRVR | Han River | +| 한계 | MLMT | (Max) Limit | +| 한국 | KOR | Korea | +| 한글 | KORN | Korean (Language) | +| 한도 | LIM | Limit | +| 한문 | CLSCHN | Classical Chinese | +| 한발 | | | +| 한자 | CHNCRT | Chinese Character | +| 할당 | ALOT | Allotment | +| 할부 | IS | Installment | +| 할인 | DSCNT | Discount | +| 할증 | EXCHRG | Extra Charge | +| 함량 | | | +| 함수 | FNC | Function | +| 함유 | CONTN | Contain | +| 합격 | PASS | Pass | +| 합계 | SUM | Sum | +| 합병 | MERG | Merger | +| 합산 | ADUP | Adding Up | +| 합숙 | LDTG | Lodge Together | +| 합의 | ACRD | Accord | +| 항공 | AVTN | Aviation | +| 항구 | PRT | Port | +| 항만 | HRBR | Harbor | +| 항목 | ARTCL | Article | +| 항소 | APL | Appeal | +| 항속 | CRSPD | Cruise Speed | +| 항차 | VYG | Voyage | +| 해당 | RLVT | Relevant | +| 해면 | SSRFC | Sea Surface | +| 해발 | ELVT | Elevation | +| 해산 | DSBND | Disband | +| 해석 | INTPR | Interpret | +| 해설 | EXPL | Explain | +| 해소 | RSLV | Resolve | +| 해수 | SEAW | Seawater | +| 해약 | CNCL | Cancellation | +| 해양 | OCEAN | Ocean | +| 해역 | OCE | Ocean | +| 해외 | OVSEA | Overseas | +| 해임 | DSMSL | Dismissal | +| 해제 | RMV | Remove | +| 해지 | CNCLTN | Cancellation | +| 해체 | DSMT | Dismantlement | +| 해촉 | DSMS | Dismissal | +| 핵심 | KPNT | Key Point | +| 행망 | | | +| 행사 | EVNT | Event | +| 행위 | ACT | Act | +| 행정 | PBADMS | Public Administration | +| 향후 | HCFH | Henceforth | +| 허가 | PRMSN | Permission | +| 허용 | PRM | Permit | +| 현금 | CASH | Cash | +| 현상 | PRSST | Present State | +| 현안 | PDISS | Pending Issue | +| 현원 | ACNO | Actual Number Of Employee | +| 현장 | GRNDS | Grounds | +| 현재 | NOW | Now | +| 현지 | LOCAL | Local | +| 현행 | EXSTN | Existing | +| 현황 | PRST | Present Situation | +| 혈압 | BDPR | Blood Pressure | +| 협력 | CLBR | Collaboration | +| 협약 | CVTN | Convention | +| 협의 | CNSLTN | Consultation | +| 협회 | ASOC | Association | +| 형사 | CMLC | Criminal Case | +| 형상 | CONF | Configuration | +| 형식 | FRM | Formality | +| 형태 | SHP | Shape | +| 호봉 | SLCLS | Salary Class | +| 호소 | LKMR | Lakes And Marshes | +| 호안 | RVTMNT | Revetment | +| 호우 | HRAIN | Heavy Rain | +| 호출 | CLOT | Call Out | +| 혼인 | | | +| 혼입 | MIXTR | Mixture | +| 혼합 | MIX | Mix | +| 홍보 | PBRL | Public Relations | +| 홍수 | FLOOD | Flood | +| 화력 | THPWR | Thermal Power | +| 화면 | SCRN | Screen | +| 화물 | FRGHT | Freight | +| 화소 | | | +| 화일 | | | +| 화재 | FIRE | Fire | +| 화주 | SHPPR | Shipper | +| 화폐 | CRNC | Currency | +| 화학 | CHEM | Chemistry | +| 확대 | EXPD | Expand | +| 확률 | PRBBT | Probability | +| 확보 | SECR | Secure | +| 확산 | DFFSN | Diffusion | +| 확인 | IDNTY | Identify | +| 확장 | EXTND | Extend | +| 확정 | CFMTN | Confirmation | +| 환경 | ENV | Environment | +| 환급 | RMBR | Reimbursement | +| 환기 | VNTL | Ventilation | +| 환매 | RPRCH | Repurchase | +| 환불 | RFND | Refundment | +| 환산 | CNVS | Conversion | +| 환수 | RDM | Redemption | +| 환원 | RVERT | Revert | +| 환율 | EXCHRT | Exchange Rate | +| 환입 | RTRN | Returns | +| 환자 | PTN | Patient | +| 환전 | CREX | Currency Exchange | +| 활동 | ACTV | Activity | +| 활성 | ACTVTN | Activation | +| 활용 | UTLZ | Utilize | +| 황사 | YLDST | Yellow Dust[Sand] | +| 회계 | ACNTG | Accounting | +| 회기 | SESN | Session | +| 회복 | RCVRY | Recovery | +| 회비 | MFEE | Membership Fee | +| 회사 | CO | Company | +| 회생 | RVVL | Revival | +| 회선 | CRCUT | (Telephone/Telegraph) Circuit | +| 회수 | RTRVL | Retrieval | +| 회신 | RPLY | Reply | +| 회원 | MBR | Member | +| 회의 | MTG | Meeting | +| 회장 | CHRMN | Chairman | +| 회차 | | | +| 횟수 | NMTM | Number Of Times | +| 효과 | EFCT | Effect | +| 효력 | EFECT | Effect | +| 효율 | EFFC | Efficiency | +| 후기 | LATP | The Latter Part | +| 후보 | CNDT | Candidate | +| 후원 | SPN | Sponsor | +| 훈련 | TRNG | Training | +| 훼손 | DMG | Damage | +| 휴가 | VCT | Vacation | +| 휴관 | CLSR | Closure | +| 휴대 | MBL | Mobile | +| 휴면 | DRMC | Dormancy | +| 휴무 | DYOFF | Day Off | +| 휴식 | RELX | Relax | +| 휴양 | RLX | Relax | +| 휴업 | TCBIZ | Temporary Close Of Business | +| 휴일 | HLDY | Holiday | +| 휴지 | PAUS | Pause | +| 휴직 | LVABSN | Leave Of Absence | +| 흡수 | ABSTN | Absorption | +| 흡연 | SMK | Smoking | +| 흡입 | INHL | Inhalation | +| 희망 | HOPE | Hope | +| 희석 | DLTN | Dilution | +| 힌트 | HNT | Hint | +| 가능량 | PSBQTY | Possible Quantity | +| 가능성 | PSBTY | Possibility | +| 가동률 | OPRT | Operation Rate | +| 가동보 | OPRWR | Operating Weir | +| 가두리 | CAGE | Cage | +| 가맹점 | FRCS | Franchise | +| 가산세 | ADDTX | Additional Tax | +| 가산점 | ADSC | Additional Score | +| 가속도 | ACCT | Acceleration | +| 가수금 | SPRCP | Suspense Receipt | +| 가압류 | PRAT | Provisional Attachment | +| 가연성 | CMBSTB | Combustibility | +| 가이드 | GUIDE | Guide | +| 가입자 | SBSR | Subscriber | +| 가정용 | HSHUS | Household Use | +| 가중치 | WGVL | Weighted Value | +| 가지급 | PRVPY | Provisional Payment | +| 가지불 | | | +| 가해자 | ASLNT | Assailant | +| 간소화 | SMPLFC | Simplification | +| 간접비 | IDRCO | Indirect Cost | +| 간접세 | IDTX | indirect tax | +| 간행물 | PBLC | Publication | +| 간호사 | NRS | Nurse | +| 갈수위 | DWTRLV | Droughty Water Level | +| 감독자 | SPVSR | Supervisor | +| 감리원 | SPVR | Supervisor | +| 감리자 | | | +| 감면율 | RDCRT | Reduction Rate | +| 감사인 | ADTR | Auditor | +| 감사자 | | | +| 감정가 | APPRC | Appraised Price | +| 감정값 | | | +| 감축량 | RQTY | Reduction Quantity | +| 강기슭 | RVRBNK | Riverbank | +| 강수량 | RN | Rainfall | +| 강우량 | AMRF | (The Amount Of) Rainfall | +| 강의실 | LCTRM | Lecture Room | +| 개발비 | DVLCO | Development Cost | +| 개발자 | DVLPR | Developer | +| 개월수 | MCNT | Month Count | +| 개인별 | BINDV | By Individuals | +| 객관식 | MLCH | Multiple Choice | +| 거래소 | STCNG | Stock Exchange | +| 거래자 | DLR | Dealer | +| 거래처 | CNPT | Counterparty | +| 거주지 | RSDC | Residence | +| 건강성 | HLTHY | Healthy | +| 건축물 | BDST | Buildings & Structures | +| 건축주 | OWNER | (Architecture) Owner | +| 건폐율 | BDCVRT | Building Coverage Ratio | +| 검보정 | CVACT | Cal/Val Activity | +| 검사소 | INSOFC | Inspection Office | +| 검사원 | INSPTR | Inspector | +| 검사자 | TSTR | Tester | +| 검색어 | SRWRD | Search Word | +| 검수자 | CHCKR | Checker | +| 검증자 | VRIFER | Verifier | +| 검토자 | RVWR | Reviewer | +| 게시글 | PSTAT | Post Article | +| 게시물 | PST | Post | +| 게시자 | PBLR | Publisher | +| 게시판 | BBS | Bulletin Board System | +| 격자선 | GLINE | Grid Line | +| 결과서 | RSTRPT | Results Report | +| 결의서 | RSDOC | Resolution Document | +| 결재선 | APLN | Approval Line | +| 결재자 | APRVR | Approver | +| 결측치 | MSVAL | Missing Value | +| 경년관 | AGPIP | Aged Pipes | +| 경사도 | GRAD | Gradient | +| 경상자 | SLIPR | Slightly Injured Person | +| 경영체 | BIZORG | Business Organization | +| 경유국 | TRCTRY | Transit Country | +| 경유지 | STPV | Stopover | +| 경작면 | | | +| 경제성 | ECNMFB | Economic Feasibility | +| 경찰서 | POLSTN | Police Station | +| 계곡수 | VLLWTR | Valley Water | +| 계근대 | | | +| 계량기 | MSINS | Measuring Instrument | +| 계량대 | SCAL | Scale | +| 계산서 | BLL | Bill | +| 계산식 | CALFM | Calculation Formula | +| 계수기 | COUNTR | Counter | +| 계약서 | CTRTD | Contract Document | +| 계약자 | CTRTR | Contractor | +| 계약직 | CTWK | Contract Work | +| 계측기 | MSRINS | Measuring Instrument | +| 계통도 | SDGRM | System Diagram | +| 계획량 | PLNQTY | Planned Quantity | +| 계획서 | PLDOC | Planning Document | +| 고농도 | HCNTR | High Concentration | +| 고수위 | HWL | High Water Level | +| 고유종 | ESP | Endemic Species | +| 고지서 | NTDOC | Notice Document | +| 고혈압 | HBPR | High Blood Pressure | +| 고형물 | SLD | Solid | +| 곡선식 | CRVFM | Curve Formula | +| 골프장 | GC | Golf Course | +| 공고자 | NOTIF | Notifier | +| 공급량 | SQTY | Supply Quantity | +| 공급원 | SRCSL | Source Of Supply | +| 공급자 | SPLR | Supplier | +| 공람자 | PDSPR | Public Display Person | +| 공모전 | CNTEXH | Contest Exhibit | +| 공무원 | PBOFC | Public Official | +| 공문서 | | | +| 공사비 | CNSCO | Construction Cost | +| 공시가 | OFPRC | Official Notice Price | +| 공용량 | EMPCPT | Empty Capacity | +| 공작물 | STRCT | Structures | +| 공정도 | PRCSDG | Process Diagram | +| 공정률 | PRCRT | Process Rate | +| 공휴일 | LHLDY | Legal Holiday | +| 과부족 | OVSRT | Overs And Shorts | +| 과수원 | OCD | Orchard | +| 과오납 | OEPY | Overpayment Or Erroneous Payment | +| 과징금 | SRCHG | Surcharge | +| 과태료 | FFNLG | Fine For Negligence | +| 관개전 | RFLD | Irrigation Field | +| 관계식 | RLEXP | Relational Expression | +| 관계인 | | | +| 관계자 | RLPR | Related Person | +| 관공서 | GVMNTF | Government Office | +| 관광지 | TRSPT | Tourist Spot | +| 관리비 | MNCO | Maintenance Cost | +| 관리자 | MNGR | Manager | +| 관리청 | MNAGC | Management Agency | +| 관서장 | CGO | Chief Of Government Office | +| 관세율 | TRFRT | Tariff Rate | +| 관측소 | OBSVTR | Observatory | +| 광화학 | PHTCH | Photochemistry | +| 교부세 | SHTX | Shared Tax | +| 교육비 | EDUCO | Educational Cost | +| 교육생 | TRNE | Trainee | +| 교육세 | EDUTX | Education Tax | +| 교직원 | TSTF | The Teaching Staff | +| 교통량 | TRFV | Traffic Volume | +| 교통비 | TRNSCO | Transportation Cost | +| 교통세 | TRTAX | Transportation Tax | +| 교환국 | | | +| 구매량 | PCHQTY | Purchased Quantity | +| 구매자 | PRCHR | Purchaser | +| 구매처 | PCPL | Purchasing Place | +| 구성원 | GMBR | (Group) Member | +| 구역내 | WTZN | Within Zone | +| 구조물 | STRTS | Structures | +| 구체성 | CCRTNS | Concreteness | +| 국고금 | NTFND | National Funds | +| 국내산 | | | +| 권리금 | PRMM | Premium | +| 권리자 | RTHDR | Rights Holder | +| 귀화종 | NTSPCS | Naturalized Species | +| 균등도 | EVNS | Evenness | +| 그리드 | GRID | Grid | +| 근로자 | WRKR | Worker | +| 근무일 | WRKDY | Working Day | +| 근무자 | STF | Staff | +| 근무조 | WKTM | Working Team | +| 근무지 | POWK | Place Of Work | +| 근무처 | OPLEMP | One'S Place Of Employment | +| 근저당 | FXCL | Fixed Collateral | +| 글쓴이 | | | +| 금수성 | WRPLCY | Water repellency (of waste) | +| 금요일 | FRI | Friday | +| 금칙어 | PHWRD | Prohibited Words | +| 급수관 | FEEDP | Feed Pipe | +| 급수량 | AMWTSP | Amount of Water Supply | +| 급수전 | WTSTP | Water Supply Tap | +| 기간별 | BPRD | By Period | +| 기계식 | MCNCL | Mechanical | +| 기관장 | INLDR | Institution Leader | +| 기납부 | PVPY | Previously Payment | +| 기념일 | ANVS | Anniversary | +| 기능직 | TCJB | Technical Service Jobs | +| 기록물 | RCDS | Records | +| 기록부 | REGI | Register | +| 기록자 | RCDR | Recorder | +| 기본도 | BSDG | Basic Diagram | +| 기본키 | PK | Primary Key | +| 기부금 | AOD | Amount Of Donation | +| 기부자 | CTBTR | Contributor | +| 기부처 | CTBPL | Contribution Place | +| 기상청 | KMA | Korea Meteorological Administration | +| 기수종 | BRSPC | Brackish Species | +| 기숙사 | DMTRY | Dormitory | +| 기술료 | RLTY | Royalty | +| 기술성 | TYFCY | Technology Efficiency | +| 기술자 | ENGNR | Engineer | +| 기술직 | ENJB | Engineering Jobs | +| 기안자 | DRFR | Drafter | +| 기압계 | MNMTR | Manometer | +| 기업체 | | | +| 기울기 | | | +| 기자재 | MCMTR | Machinery And Materials | +| 기준율 | STDRT | Standard Rate | +| 기준점 | CRLPT | Control Point | +| 기준치 | STDVAL | Standard Value | +| 기증자 | DNR | Donor | +| 기환급 | ARFND | Already Refund | +| 기후부 | | | +| 꼬리말 | FTR | Footer (Comment) | +| 끓는점 | BPNT | Boiling Point | +| 낙동강 | NDRVR | Nakdong River | +| 낙차공 | DSTC | Drop Structure | +| 낙찰률 | SCBRT | Successful Bid Rate | +| 낙찰자 | SCBDR | Successful Bidder | +| 난이도 | DFCTY | Difficulty (Degree) | +| 남북한 | SANK | South And North Korea | +| 남조류 | BLAL | Blue-Green Algae | +| 납부자 | RTPYR | Ratepayer | +| 납세자 | TXPR | Taxpayer | +| 내국인 | DOMPL | Domestic People | +| 내륙수 | INTWTR | Interior Waters | +| 내부망 | | | +| 내성종 | TRSPCS | Tolerance Species | +| 내역서 | DTSTMN | Detailed Statement | +| 냉각수 | CULWTR | Cooling Water | +| 냉난방 | HAC | Heating And Cooling | +| 노무비 | LBCO | Labor Cost | +| 노트북 | NTBK | Notebook (Computer) | +| 녹는점 | MPNT | Melting Point | +| 농경지 | FMLND | Farmland | +| 농어촌 | FFV | Farming And Fishing Villages | +| 농업인 | FRMR | Farmer | +| 농작물 | CRPS | Crops | +| 농장주 | FRMER | Farm Owner | +| 농축산 | AGST | Agriculture And Stockbreeding | +| 농축조 | THCKNR | Thickener | +| 누리집 | HMPG | Homepage | +| 누수량 | LKQTY | Leakage Quantity | +| 누출량 | LKGQTY | Leakage Quantity | +| 닉네임 | NICK | Nick Name | +| 다기능 | MTFN | Multifunctional | +| 다양성 | DVRST | Diversity | +| 다자녀 | MCHLD | Multi-Child | +| 단계별 | BSTP | By Step | +| 단답형 | SRQT | Short Questions | +| 단말기 | TRMNL | Terminal | +| 단면적 | CRSA | Cross Sectional Areas | +| 단백질 | PROTN | Protein | +| 단속자 | RGLTR | Regulator | +| 단위별 | BUNIT | By Unit | +| 달성도 | ACHDGR | Achievement Degree | +| 달성량 | ACHQTY | Achieved Quantity | +| 달성률 | ACMTRT | Achievement Rate | +| 담당인 | | | +| 담당자 | PIC | Person In Charge | +| 담수화 | WTCON | Water Conversion | +| 답변서 | ANSDOC | Answer Document | +| 답변자 | ANSWR | Answerer | +| 당사자 | CNCPR | Concerned Person | +| 당직자 | DTPR | Duty Person | +| 당첨자 | PZWNR | Prize Winner | +| 대국민 | TNATN | To The Nation | +| 대권역 | LSIRB | Large Sphere Of Influence In A River Basin | +| 대기업 | LCO | Large Company | +| 대기자 | WAITR | Waiting Person | +| 대기질 | ARQLT | Air Quality | +| 대리인 | AGT | Agent | +| 대리자 | | | +| 대리점 | AGNC | Agency | +| 대분류 | LCLSF | Large-Scale Classification | +| 대블록 | LBLK | Large Block | +| 대상자 | TRPR | Target Person | +| 대여자 | LNDR | Lender | +| 대장균 | CLBCL | Colon Bacillus | +| 대집행 | EBRXY | Execution By Proxy | +| 대표자 | RPRSV | Representative | +| 대학교 | UNIV | University | +| 대학생 | UNVST | University Student | +| 대학원 | GDSCHL | Graduate School | +| 데이터 | | | +| 도래지 | SSNH | Seasonal Home | +| 도메인 | DMN | Domain | +| 도서관 | LIB | Library | +| 도수관 | WCNVP | Water Conveyance Pipe | +| 도식도 | SCDG | Schema Diagram | +| 도움말 | HLP | Help | +| 도입종 | | | +| 도착지 | DEST | Destination | +| 도착항 | ARPT | Arrival Port | +| 돌망태 | WRCLDR | Wire Cylinder | +| 동거자 | RMMT | Roommate | +| 동기화 | SYNC | Synchronization | +| 동승자 | FLPS | Fellow Passenger | +| 동식물 | ANPL | Animals And Plants | +| 동영상 | VDO | Video | +| 동의서 | WTCS | Written Consent | +| 동의어 | SYNM | Synonym | +| 동의자 | ASNTR | Assentor | +| 동호회 | CLUB | Club | +| 드렛지 | DRDG | Dredge | +| 등기소 | RGOFC | Registry Office | +| 등록세 | RGTX | Registration Tax | +| 등록인 | | | +| 등록자 | RGTR | Registrant | +| 등록증 | REGC | Registration Certificate | +| 디자인 | DDSGN | (Drawing) Design | +| 디지털 | DGTL | Digital | +| 디폴트 | | | +| 레이더 | RADR | Radar | +| 레이어 | | | +| 레코드 | RCRD | Record | +| 레포트 | | | +| 로그인 | LGN | Login | +| 리소스 | RSC | Resource | +| 만수위 | FWTLV | Full Water Level | +| 만족도 | DGSTFN | Degree Of Satisfaction | +| 맞벌이 | DLICM | Dual Income | +| 매뉴얼 | MNL | Manual | +| 매립량 | LFDQTY | Landfilled Quantity | +| 매립장 | GRLNDF | Garbage Landfill | +| 매립지 | RCMLND | Reclaimed Land | +| 매수인 | | | +| 매수자 | BYR | Buyer | +| 머리말 | PRFC | Preface | +| 메모리 | MMRY | Memory | +| 메세지 | | | +| 메시지 | MSG | Message | +| 면담자 | ITVWR | Interviewer | +| 명명일 | NMCLT | Nomenclate | +| 명명자 | NMCLTR | Nomenclator | +| 명세서 | SPCFCD | Specification Document | +| 모니터 | MNT | Monitor | +| 모델링 | MDLN | Modelling | +| 모바일 | MOBL | Mobile | +| 모식도 | MIMIC | Mimic | +| 목요일 | THUR | Thursday | +| 목욕탕 | BTHHS | Bathhouse | +| 목적세 | | | +| 목적어 | OBJECT | Object | +| 목적지 | DSTNST | Destination | +| 목표량 | GLQTY | Goal Quantity | +| 목표물 | MRK | Mark | +| 무역업 | TRDB | Trade Business | +| 무응답 | NRPLY | No Reply | +| 무이자 | ZINT | Zero Interest | +| 무제한 | UNLMT | Unlimit | +| 무주택 | HMLS | Homeless | +| 무피해 | NDMGE | Nothing Damage | +| 문의처 | INQPL | Inquiring Place | +| 문제점 | PBPT | Problem Point | +| 문화재 | CLTPTY | Cultural Property | +| 물건지 | RELC | Real Estate Location | +| 물리적 | PHYSCL | Physical | +| 미가동 | NORUN | No Run | +| 미개설 | UDVLP | Undeveloped | +| 미개통 | UOPN | UnOpened | +| 미검사 | NINSP | No Inspection | +| 미구축 | NBULD | Unbuilt | +| 미급수 | NWSPLY | Non Water Supply | +| 미달성 | NCHV | Nonachievement | +| 미등록 | UNREG | Unregistration | +| 미디어 | CMDIA | (Content) Media | +| 미반영 | URFT | Unreflection | +| 미반출 | NSHPGT | Non Shipping Out | +| 미부과 | NLVY | Not Levy | +| 미부착 | NTASN | Not Adhesion | +| 미사용 | UNUSE | Unused | +| 미상각 | UAMTZ | Unamortized | +| 미상환 | NRPY | Non Repayment | +| 미생물 | MCROG | Microorganism | +| 미선정 | NSLCT | Non-Selection | +| 미설치 | NOINS | No Installation | +| 미수금 | ACNRCV | Accounts Receivable | +| 미수납 | NRCP | Non-Receipt | +| 미승인 | UNAPRV | Unapproved | +| 미신고 | UNDCLR | Undeclared | +| 미신청 | UNAPL | Unappplied | +| 미실행 | NEXCN | Non Execution | +| 미완료 | INCPL | Incomplete | +| 미운행 | NOPRTN | Non Operation | +| 미이행 | NFLFL | Non-Fulfillment | +| 미작성 | NOSPEC | Not Specified | +| 미적용 | DNAP | Does Not Apply | +| 미전송 | NTST | Not Sent | +| 미점검 | NPCTD | Uninspected | +| 미제출 | UNSBM | Unsubmitted | +| 미지급 | OTSPY | Outstanding Payment | +| 미지정 | NDSN | Not Designation | +| 미집행 | UNEX | Unexecuted | +| 미처리 | UNPRCS | Unprocessed | +| 미첨부 | UTCH | Unattachment | +| 미추진 | UPMT | Unpromoted | +| 미취득 | UCQS | Unacquisition | +| 미포함 | NINCLS | Noninclusion | +| 미허가 | UPRMSN | Un Permission | +| 미확정 | UDTM | Undetermined | +| 미환급 | UNRFND | Unrefunded | +| 미활용 | UNUTL | Unutilized | +| 미회수 | UNRT | Un-Retrieval | +| 민감종 | STSPCS | Sensitiveness Species | +| 민원인 | CVLPR | Civil Petitioner | +| 바이오 | BIO | Bio | +| 바코드 | BARCD | Bar-Code | +| 박물관 | MSM | Museum | +| 반송자 | RTRNR | Returner | +| 반영량 | RFLQTY | Reflected Quantity | +| 반올림 | ROUND | Rounding | +| 반응조 | RETNK | Reactant Tank | +| 반입량 | CIVLM | Carry-In Volume | +| 반출량 | COVLM | Carry-Out Volume | +| 반출입 | CRRYIO | Carry In And Out | +| 발간물 | | | +| 발견지 | DCVRST | Discovery Site | +| 발급자 | ISPR | Issuing Person | +| 발명자 | INVTR | Inventor | +| 발생량 | AMTGNR | Amount Generated | +| 발송인 | | | +| 발송자 | SNDR | Sender | +| 발신인 | | | +| 발신자 | SNDPTY | Sending Party | +| 발신처 | DSPL | Dispatch Place | +| 발열량 | CLRVAL | Calorific Value | +| 발원지 | SRCE | Source (Of A River) | +| 발전기 | GNRTR | Generator | +| 발전량 | ELTQTY | Electricity Generation Quantity | +| 발전소 | PWPL | Power Plant | +| 발주자 | ORDERR | Orderer | +| 발주처 | ORDPL | Ordering Place | +| 발표자 | PRSNTR | Presenter | +| 발행인 | | | +| 발행자 | ISR | Issuer | +| 발행처 | ISPL | Issue Place | +| 발화점 | IGPT | Ignition Point | +| 방류구 | DWOT | Dewatering Outlets | +| 방류량 | OTFL | Outflow | +| 방류수 | EFLNT | Effluent | +| 방문객 | | | +| 방문자 | VSTR | Visitor | +| 방법론 | MHDLG | Methodology | +| 방사능 | RDACT | Radioactivity | +| 방수로 | SPWY | A Spillway | +| 방수위 | WTELV | Tailwater Elevation | +| 방화벽 | FRWL | Firewall | +| 배기량 | DSVLM | Displacement Volume | +| 배달처 | DLDTN | Delivery Destination | +| 배당금 | DVDND | Dividend | +| 배송지 | DLVRPL | Delivery Place | +| 배수관 | DRNP | Drain Pipe | +| 배수문 | DRGT | Drainage Gate | +| 배수지 | DTBRSV | Distribution Reservoir | +| 배양체 | EBDY | Embryoid Body | +| 배우자 | SPS | Spouse | +| 배정자 | ALTMTR | Allotment Person | +| 배출구 | OTLT | Outlet | +| 배출권 | EMCRD | Emmision Credit | +| 배출량 | EHQTY | Exhaust Quantity | +| 배출수 | DCGWTR | Discharge Water | +| 배출원 | EMSRC | Emission Source | +| 배출자 | EMTR | Emitter | +| 배치도 | LSKC | Layout Sketch | +| 배터리 | BTRY | Battery | +| 번역문 | TRNSN | Translation Sentence | +| 번호판 | NOPLT | Number Plate | +| 범람원 | FLDPLN | Flood Plain | +| 법무사 | JDSCR | Judicial Scrivener | +| 법인세 | COTX | Corporate Tax | +| 법정동 | STDG | Statutory Dong(Administrative District) | +| 법정리 | STLI | Statutory Li(Administrative District) | +| 변경자 | CHNRG | Changer | +| 변동량 | FLCQTY | Fluctuation Quantity | +| 변동률 | FLCTNR | Fluctuation Rate | +| 변호사 | LWYR | Lawyer | +| 변화량 | CHQTY | Change Quantity | +| 변환기 | | | +| 병해충 | DIP | Disease And Insect Pest | +| 보건소 | PHC | Public Health Center | +| 보고량 | RPTQTY | Repoted Quantity | +| 보고서 | RPTP | Report Paper | +| 보고자 | RPTR | Reporter | +| 보관량 | HDQTY | Held Quantity | +| 보상금 | CPMNY | Compensation Money | +| 보수자 | MENDER | Mender | +| 보수적 | CSVT | Conservative | +| 보안성 | PSCRTY | (Property) Security | +| 보유량 | HLDQTY | Holding Quantity | +| 보일러 | BLR | Boiler | +| 보조금 | SBSIDY | Subsidy | +| 보조비 | SBSDY | Subsidy | +| 보좌관 | AIDE | Aide | +| 보증금 | GTN | Guaranty Money | +| 보증료 | GRFE | Guarantee Fee | +| 보증서 | WTGR | Written Guarantee | +| 보증인 | GRNR | Guarantor | +| 보험료 | ISPM | Insurance Premium | +| 보호자 | PRTCR | Protector | +| 보호종 | PRSPCS | Protected Species | +| 복잡성 | CMPXTY | Complexity | +| 복호화 | DECD | Decoding | +| 본거지 | STRHLD | Stronghold | +| 본예산 | MBGT | Main Budget | +| 봉사료 | SVCHG | Service Charge | +| 부과금 | LVYAMT | Levy Amount | +| 부과량 | BMCPT | Billed metered consumption | +| 부녀자 | WMAN | Woman | +| 부담금 | BDNC | Burden Charge | +| 부동산 | REST | Real Estate | +| 부산물 | BYPRD | By-Product | +| 부상자 | INJPSN | Injured Person | +| 부서별 | BDPT | By Department | +| 부서장 | DH | Department Head | +| 부속서 | ANXD | Annex Document | +| 부식성 | CRRS | Corrosiveness | +| 부유물 | | | +| 부유사 | SPDSMT | Suspended Sediment | +| 부적격 | INDQ | Inadequacy | +| 부적정 | IMPRTY | Impropriety | +| 부적합 | ICPT | Incompatibility | +| 부전공 | MNR | Minor | +| 부정당 | DSQ | Disqualified | +| 부제목 | SBTTL | Subtitle | +| 부존량 | PTTQTY | Potential Quantity | +| 부하량 | LDQTY | Loading Quantity | +| 부하율 | ALFT | A Load Factor | +| 북마크 | | | +| 분기별 | BQTR | By Quarte | +| 분류군 | TXGRP | Taxonomic Group | +| 분류식 | SPRSYS | Separate System | +| 분석서 | ANLRPT | Analysis Report | +| 분석자 | ANLSR | Analysis Person (Analyst) | +| 분야별 | BFLD | By Field | +| 분양가 | LTOTPR | Lotting-Out Price | +| 분자량 | MWT | Molecular Weight | +| 분자식 | MCFM | Molecular Formula | +| 불가능 | IMPSBL | Impossible | +| 불공정 | UNFAIR | Unfair | +| 불만족 | DSTF | Dissatisfaction | +| 불연성 | NFLY | Incombustibility, Noninflammability | +| 불완전 | IPRFCT | Imperfection | +| 불이행 | NFUFL | No Fulfill Or Execute | +| 불인정 | NRCG | Nonrecognition | +| 불일치 | NCNSN | Non-Consensus | +| 불투수 | IMPMB | Impermeable | +| 불합격 | FAL | Fail | +| 불확도 | UNCTDG | Uncertainty Degree | +| 불활성 | INCTVY | Inactivity | +| 블로그 | BLOG | Blog | +| 비공개 | PRVT | Private | +| 비과세 | TXFR | Tax-Free | +| 비관리 | UCTL | Uncontrolled | +| 비대상 | NTRGT | Non-Target | +| 비도로 | NROAD | Non Road | +| 비동의 | DSAG | Disagree | +| 비디오 | | | +| 비산업 | NINDS | No Industry | +| 비상용 | EUSE | Emergency Use | +| 비영리 | NPRF | Non-Profit | +| 비인가 | NAPR | Non Approval | +| 비정상 | ABNML | Abnormal | +| 비추천 | DCMD | Decommendation | +| 비포장 | UNPVD | Unpaved | +| 비표준 | NSTNRD | Non-Standard | +| 비할당 | USGN | Unassignment | +| 비활성 | IACTV | Inactive | +| 비회원 | NMBR | Non Member | +| 빈용기 | ECNTNR | Empty Container | +| 사망인 | | | +| 사망자 | DCSD | The Deceased | +| 사무소 | OFCE | Office | +| 사무실 | OFC | Office | +| 사무직 | OFJB | Office Jobs | +| 사분면 | QDRNT | Quadrant | +| 사상자 | CSLTS | Casualties | +| 사수량 | DWTVLM | Dead Water Volume | +| 사수위 | DSRL | Dead Storage Level | +| 사업비 | PJTCO | Project Cost | +| 사업소 | | | +| 사업자 | BZMN | Businessman | +| 사업장 | BPLC | Business Place | +| 사업체 | BZENT | Business Enterprise | +| 사용권 | TROU | The Right Of Using | +| 사용량 | USQTY | Usage Quantity | +| 사용료 | USFE | Use Fee | +| 사용률 | USGRT | Usage Rate | +| 사용인 | | | +| 사용자 | USER | User | +| 사용처 | PLCUS | Place Of Use | +| 사원증 | EMPC | Employee Card | +| 사유서 | LTFRSN | Letter For The Reason | +| 사이즈 | | | +| 사이트 | SITE | Site | +| 삭제자 | DLTR | Deleter | +| 산번지 | MLNO | Mountain Lot Number | +| 산소량 | OXYQTY | Oxygen Quantity | +| 산업군 | INDGRP | Industry Group | +| 산정식 | CCTFM | Calculating Formula | +| 산출물 | OTPTS | Outputs | +| 산출식 | CFML | Calculating Formula | +| 산화성 | OXDZ | Oxidizing | +| 살포자 | SEDER | Seeder | +| 살포지 | SPRPLC | Spray Place | +| 상담원 | CNSLR | Counselor | +| 상담자 | | | +| 상대방 | CNTPT | Counterpart | +| 상반기 | FRHFYR | First Half Of The Year | +| 상소인 | APLNT | Appellant | +| 상속인 | IHTR | Inheritor | +| 상수도 | WTSPL | Water Supply | +| 상수원 | WTSRC | Water Source | +| 상여금 | BONUS | Bonus | +| 상주종 | RSSPCS | Residing Species | +| 상품권 | GFTCD | Gift Card | +| 상호명 | | | +| 생물군 | BIOTA | Biota | +| 생물량 | CRTQTY | Creature Quantity | +| 생산량 | OUTTRN | Outturn | +| 생산자 | PRDCR | Producer | +| 생산지 | PRDLC | Production Location | +| 생산품 | PRDT | Product | +| 생성자 | CREATR | Creator | +| 생장형 | GRWFM | Growth Form | +| 생태계 | ESSTM | Ecosystem | +| 생활관 | DTUNIT | Dormitory Unit | +| 서명자 | SIGR | A Signer | +| 서비스 | SRVC | Service | +| 서술형 | DPTV | Descriptive | +| 서식지 | HBTAT | Habitat | +| 서약서 | WROT | Written Oath | +| 서한문 | EPST | Epistle | +| 선급금 | PRPAMT | Prepayments Amount | +| 선다형 | MTPC | Multiple-Choice | +| 선수금 | ADPYR | Advance Payment Received | +| 선순위 | PRORD | Prior Order | +| 선적항 | POL | Port Of Loading | +| 선정자 | CHCR | Choice Person | +| 선지급 | ADPY | Advance Payment | +| 선호도 | DPRFRC | Degree Of Preferance | +| 설계자 | DSGNR | Designer | +| 설명서 | | | +| 설명회 | BRFN | Briefing | +| 설문자 | SRVYR | Survey Person | +| 설문지 | SRVPP | Survey Paper | +| 설치자 | INSTLR | Installer | +| 성과물 | OUTCM | Outcome | +| 성수기 | PKSN | Peak Season | +| 성적서 | SCRPT | Score Report | +| 세대원 | FMBR | Family Members | +| 세대주 | HSHLDR | Householder | +| 세무서 | TXOFC | Tax Office | +| 세분류 | DCLSF | Detailed Classification | +| 세수입 | TXRVN | Tax Revenue | +| 세척수 | WSHWTR | Wash Water | +| 소각량 | INCQTY | Incineration Quantity | +| 소각로 | INCNRT | Incinerator | +| 소각열 | INCH | Incineration Heat | +| 소각재 | INCRSH | Incineration Ash | +| 소권역 | SSIRB | Small Sphere Of Influence In A River Basin | +| 소규모 | SMSCL | Small Scale | +| 소독제 | DSINF | Disinfectant | +| 소득세 | INCTX | Income Tax | +| 소득자 | INERN | Income Earner | +| 소모품 | CSGD | Consumable Goods | +| 소방서 | FRSTN | Fire Station | +| 소분류 | SCLSF | Small-Scale Classification | +| 소블록 | SBLK | Small Block | +| 소비량 | CNSQTY | Consumption Quantity | +| 소비자 | CNSMR | Consumer | +| 소송인 | LTGNT | Litigant | +| 소수력 | SMH | Small Hydro | +| 소수점 | DCPT | Decimal Point | +| 소유권 | OWNSHP | Ownership | +| 소유역 | SBBSN | Sub Basin | +| 소유인 | | | +| 소유자 | OWNR | Owner | +| 소유주 | | | +| 소장품 | CLCN | Collection | +| 소재지 | LCTN | Location | +| 소제기 | FLGLW | Filing A Lawsuit | +| 소하천 | SMLRVR | Small River | +| 송달지 | DLPL | Delivery Place | +| 송수관 | WPP | Water Pipe | +| 송수신 | TRRC | Transmit And Receive | +| 송신자 | | | +| 쇼핑몰 | SOPMAL | Shopping Mall | +| 수거식 | TASYS | Take Away System | +| 수검자 | EXAMNE | Examinee | +| 수계별 | BWTST | By Water System | +| 수급자 | RECPNT | Recipient | +| 수납인 | | | +| 수납자 | RCPN | Recipient | +| 수령자 | RCPNT | Recipient | +| 수령지 | RCPL | Receipt Place | +| 수료자 | CMPCSR | Completer | +| 수료장 | | | +| 수료증 | DPLM | Diploma | +| 수목원 | ARBRT | Arboretum | +| 수상자 | AWRDR | Awardee | +| 수상작 | AWRT | Award Art | +| 수생태 | AE | Aquatic Ecology | +| 수수료 | FEE | Fee | +| 수신인 | | | +| 수신자 | RCVR | Receiver | +| 수신처 | RCOFC | Receiving Office | +| 수업료 | TTFE | Tuition Fee | +| 수요일 | WED | Wednesday | +| 수용가 | RCPTR | Receptor | +| 수위계 | WTGG | A Water Gauge | +| 수위표 | WLTBL | Water Level Table | +| 수익률 | ERNRT | Earnings Rate | +| 수익자 | BNFR | Benefiter | +| 수입국 | ICNTRY | Importing Country | +| 수입량 | IMPQTY | Import Quantity | +| 수입자 | INCMR | Income Person | +| 수입항 | POE | Port Of Entry | +| 수자원 | WTRSC | Water Resource | +| 수작업 | HNWK | Hand Work | +| 수정인 | | | +| 수정자 | MDFR | Modifier | +| 수진자 | MDEXME | Medical Examinee | +| 수처리 | WTRMT | Water Treatment | +| 수출국 | ECNTRY | Exporting Country | +| 수출량 | EXPQTY | Export Quantity | +| 수출입 | IMPEXP | Imports And Exports | +| 수출자 | EXPR | Export Person | +| 수출항 | EPRT | Export Port | +| 수취인 | ADDRSE | Addressee | +| 수행사 | EXCMP | Execution Company | +| 수행자 | PRFMR | Performer | +| 수험자 | EXMNE | Examinee | +| 수혜자 | BNFCR | Beneficiary | +| 숙련도 | SKLVL | Skill Level | +| 순이익 | NETPF | Net Profit | +| 순자산 | NAST | Net Assets | +| 순찰자 | PTLR | Patroller | +| 쉬는날 | | | +| 스레드 | THRED | Thread | +| 스케줄 | | | +| 스크랩 | SCRP | Scrap | +| 스키마 | SCHM | Schema | +| 슬러지 | SLUDGE | Sludge | +| 승강기 | ELVTR | Elevator | +| 승용차 | PCAR | (Passenger) Car | +| 승인자 | AUTZR | Authorizer | +| 승하차 | GNGF | Get On Or Get Off | +| 승합차 | VAN | (Passenger) Van | +| 시가지 | CTYD | City District | +| 시가화 | UBNZTN | Urbanization | +| 시간당 | PRHR | Per Hour | +| 시간대 | TMZON | Time Zone | +| 시간별 | BHR | By Hour | +| 시간외 | OVTM | Overtime | +| 시공자 | BLDR | Builder | +| 시군구 | SGG | Si/Gun/Gu | +| 시료량 | SPCQTY | Specimen Quantity | +| 시멘트 | CEMT | Cement | +| 시설물 | FCLTY | Facility | +| 시설별 | BFCLTY | By Facility | +| 시스템 | SYS | System | +| 시운전 | TSTRN | Test Run | +| 시퀀스 | | | +| 시행자 | DVLR | Developer | +| 식물상 | FLORA | Flora | +| 식별자 | UID | Unique Identifier | +| 신고량 | DCLQTY | Declared Quantity | +| 신고서 | RPDCD | Report Or Declare Document | +| 신고인 | | | +| 신고자 | DCL | Declarer | +| 신기술 | NTCH | New Technology | +| 신뢰도 | CRRL | Credibility Reliability | +| 신뢰성 | RLBL | Reliability | +| 신용장 | LC | Letter Of Credit | +| 신인도 | RCGDGR | Recognition Degree | +| 신재생 | NRNW | New And Renewable | +| 신적설 | FSNCVR | Fresh Snow Cover | +| 신증설 | NBXB | New Build Up And Extension Build Up | +| 신청량 | APLQTY | Applied Quantity | +| 신청서 | APFR | Application Form | +| 신청인 | | | +| 신청자 | APLCNT | Applicant | +| 신호등 | SGNLG | Signal Light | +| 실린더 | | | +| 실무자 | HWKR | Hands-On Worker | +| 실수령 | RLRC | Real Receipt | +| 실시간 | RLTM | Realtime | +| 실업률 | UMRT | Unemployment Rate | +| 실적량 | PFMQTY | Performance Quantity | +| 실지급 | ACTPY | Actual Payment | +| 실행자 | OPERTR | Operator | +| 실험실 | LAB | Laboratory | +| 실효성 | EFTNS | Effectiveness | +| 심사자 | JDG | Judge | +| 심층수 | DPWT | Deep Water | +| 썸네일 | THMB | Thumbnail | +| 아이디 | ID | ID | +| 아이콘 | ICON | Icon | +| 아이템 | | | +| 아이피 | | | +| 아이핀 | IPN | IPIN | +| 아파트 | APT | Apartment | +| 아황산 | SLFAC | Sulfurous Acid | +| 안내문 | GDNTC | Guidance Notice | +| 안내소 | INFDSK | Information Desk | +| 안전모 | SFHM | Safety Helmet | +| 안전성 | SFT | Safety | +| 안정화 | STBZN | Stabilization | +| 알림창 | NTWIN | Notice Window | +| 암호화 | ENCPT | Encryption | +| 앙상블 | ESBL | Ensemble | +| 앞자리 | FRDGT | Front Digit | +| 액면가 | FVAL | Face Value | +| 액비화 | LIQFZR | Liquefaction for Fertilizer | +| 액세스 | | | +| 양도량 | TRSQTY | Transferred Quantity | +| 양도인 | TRSFR | Transferor | +| 양도자 | HNOVR | Hand Over Person | +| 양서류 | AMPHBN | Amphibian | +| 양성화 | LGLZTN | Legalization | +| 양수량 | RCVQTY | Received Quantity | +| 양수인 | GRNE | Grantee | +| 양수자 | | | +| 양수장 | PMPSTN | Pumping Station | +| 양식장 | NRSFM | Nursery Farm | +| 양어장 | FSHFM | Fishing Farm | +| 어린이 | CHILD | Child | +| 언론사 | PRESS | Press | +| 업로드 | ULD | Upload | +| 업무망 | BNSNW | Business Network | +| 에너지 | ENGY | Energy | +| 에디터 | | | +| 엔터티 | ENTTY | Entity | +| 엠바고 | EBRG | Embargo | +| 여과지 | FLTPR | Filter Paper | +| 여수로 | SPWAY | Spillway | +| 역분개 | RJRNL | Reverse Journalizing | +| 역삼투 | ROSMS | Reverse Osmosis | +| 연구비 | RSCO | Research Cost | +| 연구소 | RSINS | Research Institute | +| 연구원 | RSCR | Researcher | +| 연도별 | BYRG | By Year Group | +| 연락처 | CNPL | Contact Place | +| 연령대 | AGGR | Age Group | +| 연령별 | BAG | By Age | +| 연료량 | FLQTY | Fuel Quantity | +| 연료화 | FUELZ | Fuelize | +| 연면적 | | | +| 연체율 | DLQRT | Delinquent Rate | +| 연평균 | ANAVG | Annual Average | +| 연회비 | ANFE | Annual Fee | +| 열람자 | RDR | Reader | +| 엽록소 | CLO | Chiorophyll | +| 영문자 | | | +| 영산강 | YSRVR | Yeongsan River | +| 영상실 | THTR | Theater | +| 영수증 | RCET | Receipt | +| 영양염 | NTRNT | Nutrient | +| 영업비 | BIZEXP | Business Expenses | +| 영업소 | BIZOFC | Business Office | +| 영업점 | SLSBR | Sales Branch | +| 예금자 | | | +| 예금주 | DPSTR | Depositor | +| 예보관 | FRCSTR | Forecaster | +| 예상량 | EXDQTY | Expected Quantity | +| 예약자 | BKR | Booker | +| 예정지 | PSITE | Planned Site | +| 오른쪽 | | | +| 오염원 | PLTSRC | Pollution Sources | +| 온나라 | NNR | Onnara | +| 온라인 | ONLN | Online | +| 외국어 | FRLAN | Foreign Language | +| 외국인 | FRGNR | Foreigner | +| 외래종 | INSPCS | Introduced Species | +| 외부망 | | | +| 외수위 | EZWTL | External Water Level | +| 외필지 | BYLT | Bylot | +| 요주의 | ATNT | Attention | +| 요청서 | REQDOC | Request Document | +| 요청인 | | | +| 요청자 | RQSTR | Requester | +| 용수량 | USWQTY | Using Water Quantity | +| 용적률 | FART | Floor Area Ratio | +| 용천수 | SPRWTR | Spring Water | +| 용해도 | SLBL | Solubility | +| 우량계 | RNGUG | A Raingauge | +| 우선권 | PRTY | Priority | +| 우점도 | DMNCD | Dominance (Degree) | +| 우점종 | DSPCS | Dominant Species | +| 우체국 | PSTOFC | Post Office | +| 우편물 | POSTM | Postal Matter | +| 운동성 | MOTILE | Motile | +| 운반량 | CRDQTY | Carried Quantity | +| 운반업 | TRBIZ | Transportation Business | +| 운반자 | TRSPR | Transposer | +| 운반증 | TRNLCS | Transport License | +| 운송비 | LGCO | Logistics Cost | +| 운송장 | WYBL | Waybill | +| 운영자 | SYSOP | System Operator | +| 운전자 | DRVR | Driver | +| 원거래 | ORGDL | Original Deal | +| 원동기 | MTR | Motor | +| 원리금 | PNI | Principal And Interest | +| 원산지 | PLOR | The Place Of Origin | +| 원승인 | ORGAPR | Original Approval | +| 원인자 | ORGPR | The Origin Person | +| 원재료 | RAWM | Raw Materials | +| 원파일 | ORGNFL | Original File | +| 월류언 | OVFLWE | Overflow Weir | +| 월요일 | MON | Monday | +| 월평균 | MAVG | Month Average | +| 위약금 | PNLT | Penalty | +| 위원장 | CHRPR | Chairperson | +| 위원회 | CMT | Committee | +| 위치도 | LOCMP | Location Map | +| 위탁금 | TRMNY | Trust Money | +| 위탁자 | CSNR | Consignor | +| 위험물 | DGROB | A Dangerous Object | +| 위험성 | RSKNS | Riskiness | +| 유기인 | OGPS | Organic Phosphorus | +| 유량계 | FMT | Flowmeter | +| 유류비 | FLCO | Fuel Cost | +| 유사량 | SMTDC | Sediment Discharge | +| 유수성 | EPTMC | Eupotamic | +| 유수식 | RUNWTR | Running Water | +| 유원지 | AMMP | Amusement Park | +| 유입구 | INLET | Inlet | +| 유입량 | INFLR | Inflow Rate | +| 유입원 | INFCAU | Inflow Cause | +| 유전자 | GENE | Gene | +| 유지비 | MNTFE | Maintenance Fee | +| 유출량 | OTDRG | Outflow Discharge | +| 유출부 | EFXCTN | Efflux Section | +| 유형별 | BTYPE | By Type | +| 유효성 | VLDTY | Validity | +| 육식성 | CRNVRS | Carnivorous | +| 음식물 | FDNK | Food And Drink | +| 읍면동 | EMD | Eup/Myun/Dong | +| 응답자 | RSPDNT | Respondent | +| 의견서 | WROPN | Written Opinion | +| 의견자 | OPNR | Opinion Person | +| 의뢰인 | RQSR | Requestor | +| 의뢰자 | | | +| 의료비 | MDEXP | Medical Expenses | +| 의료인 | HCWKR | Healthcare Worker | +| 의무자 | OBLGR | Obligator | +| 이동량 | MVDQTY | Moved Quantity | +| 이동식 | RVGN | Rovingness | +| 이륜차 | BIKE | Bike | +| 이메일 | EML | Email | +| 이물질 | ALSBTN | Alien Substance | +| 이미지 | IMG | Image | +| 이벤트 | SEVNT | System Event | +| 이상치 | OUTLR | Outliers | +| 이송량 | TRQTY | Transfer Quantity | +| 이슬점 | DWPNT | Dewpoint | +| 이용량 | UTQTY | Utilization Quantity | +| 이재민 | DSVCTM | Disaster Victims | +| 이중화 | DPLX | Duplexing | +| 인건비 | LBRCO | Labor Cost | +| 인계서 | HDOVDC | Handover Document | +| 인계자 | HVPRSN | Handover Person | +| 인사말 | GRTG | Greeting | +| 인상률 | INCRT | Increase Rate | +| 인솔자 | LDR | Leader | +| 인쇄비 | PRNTC | Printing Cost | +| 인수인 | | | +| 인수자 | ACPTR | Acceptor | +| 인원수 | NOPE | The Number Of Persons | +| 인정량 | RCGQTY | Recognized Quantity | +| 인증량 | CRFQTY | Certification Quantity | +| 인증서 | CRTF | Certificate | +| 인지세 | STMTX | Stamp Tax | +| 인터넷 | ITNT | Internet | +| 인허가 | LCPMT | Licenses And Permits | +| 인화성 | FLMABT | Flammability | +| 인화점 | FSPN | Fiashing Point | +| 일기도 | WTHCT | Weather Chart | +| 일사량 | SRQTY | Solar Radiation Quantity | +| 일시금 | LSMPY | A Lump Sum Payment | +| 일시적 | MMTR | Momentary | +| 일요일 | SUN | Sunday | +| 일조량 | ASNSH | Amount Of Sunshine | +| 일치성 | CNFMTY | Conformity | +| 일평균 | DYRG | Day Average | +| 임대료 | RTFE | Rental Fee | +| 임대인 | LSR | Lessor | +| 임진강 | IJRV | Imjin River | +| 임차료 | LSFE | Lease Fee | +| 임차인 | HIRER | Hirer | +| 입고량 | WHSQTY | Warehousing Quantity | +| 입고자 | WRHSGR | Warehousing Person | +| 입금자 | PYR | Payer | +| 입력자 | KBRDR | Keyboarder | +| 입주자 | OCPNT | Occupant | +| 입찰자 | BDDER | Bidder | +| 입출고 | PIPO | Put-In, Put-Out | +| 입학금 | ADMFE | Admission Fee | +| 입회자 | OBSRVR | Observer | +| 잉여금 | SRAMT | Surplus Amount | +| 자격증 | CRTFCT | Certificate | +| 자국어 | OLANG | One'S Own Language | +| 자동차 | CAR | Car | +| 자동화 | ATMTN | Automation | +| 자료실 | RPSTR | Repository | +| 자릿수 | DGT | Digit | +| 자발적 | VLNTR | Voluntary | +| 자본금 | CPTL | Capital | +| 자부담 | PHW | Pay His Way | +| 자연성 | NTRLTY | Naturality | +| 자주식 | SFPRPL | Self-Propelled | +| 작성자 | WRTR | Writer | +| 작업자 | OPRTR | Operator | +| 잔반량 | LTRQTY | Leftover Quantity | +| 잔식량 | UNFQTY | Uneaten Food Quantity | +| 잔여량 | RMNQTY | Remainder | +| 잡식성 | OMNVRT | Omnivority | +| 잡종지 | MCLNAR | Miscellaneous Area | +| 장려금 | SUBSD | Subsidy | +| 장애인 | PWDBS | People With Disabilities | +| 장차관 | MAVM | A Minister And Vice Minister | +| 재개업 | ROBIZ | Reopening Of Business | +| 재검사 | RTST | Retest | +| 재검토 | REVLT | Re-Evaluation | +| 재계산 | RECAL | Recalculation | +| 재고량 | INVQTY | Inventory Quantity | +| 재공고 | RANC | Re-Announcement | +| 재교부 | RISU | Reissue | +| 재등록 | RRG | Re-Registration | +| 재료비 | MTCO | Material Cost | +| 재반입 | RCRYN | Re Carry In | +| 재발급 | RISSU | Reissuance | +| 재발송 | RSND | Resend | +| 재발행 | RPBLC | Republication | +| 재배부 | RDTBN | Redistribution | +| 재배종 | CULTVR | Cultivar | +| 재배지 | CLTLND | Cultivation Land | +| 재부착 | RMNT | Remount | +| 재사용 | RUSE | Reuse | +| 재산세 | PRPTX | Property Tax | +| 재산정 | RCTN | Recomputation | +| 재설문 | RSRVY | Resurvey | +| 재설정 | RSET | Reset | +| 재수신 | RCAG | Receiving Again | +| 재수행 | REDO | Redo | +| 재승인 | REAPR | Reapproval | +| 재시도 | RTRY | Retry | +| 재시험 | REEXM | Reexamination | +| 재신청 | RQAG | Request Again | +| 재심사 | REXAM | Reexamination | +| 재요청 | RDMND | Redemand | +| 재이용 | RTLZTN | Reutiliztion | +| 재입찰 | REBID | Rebid | +| 재작성 | REWRT | Rewrite | +| 재전송 | RTRSM | Retransmission | +| 재제출 | RSMN | Resubmission | +| 재처리 | RPRCS | Reprocess | +| 재판부 | JSDP | Justice Department | +| 재평가 | REVL | Revaluation | +| 재할당 | RSGN | Reassignment | +| 재해자 | DVCTM | Disaster Victim | +| 재확인 | RECFM | Reconfirmation | +| 재활용 | REUTIL | Reutilization | +| 저감량 | DCQTY | Decrease Quantity | +| 저공해 | LPOLU | Low Pollution | +| 저배출 | LESN | Low Emission | +| 저서종 | BTHSPC | Benthic Species | +| 저수량 | RSQTY | Reservoir Quantity | +| 저수로 | LWATCH | Low Water Channel | +| 저수위 | LWLV | Low-Water Level | +| 저수지 | RSRVR | Reservoir | +| 저작권 | CPRGT | Copyright | +| 저작물 | WRTS | Writings | +| 저작자 | AUTHR | Author | +| 저장량 | STRQTY | Stored Quantity | +| 저장소 | STRGP | Storage Place | +| 저장조 | REPO | Repository | +| 적립금 | RSEV | Reserve | +| 적설량 | SNWFL | Snowfall | +| 적절성 | APTNS | Appropriateness | +| 전광판 | ELTRD | Electronic Display (Board) | +| 전기료 | ELCHG | Electricity Charges | +| 전년도 | | | +| 전도식 | CDTNT | Conduction Type | +| 전력량 | ELCEG | Electric Energy | +| 전문가 | EXPRT | Expert | +| 전문성 | PFSNL | Professionality | +| 전송자 | TRSMR | Transmitter | +| 전송처 | TRSPL | Transmission Place | +| 전처리 | PRCSG | Preprocessing | +| 전화국 | | | +| 절감량 | SVQTY | Saving Quantity | +| 절차서 | PROCD | Procedure Document | +| 점검자 | INSCTR | Inspector | +| 점검표 | CKLST | Check List | +| 점유율 | PCSHR | Percentage Share | +| 접속자 | ACSR | Accessor | +| 접수인 | | | +| 접수자 | CLR | Clerk | +| 정규직 | PMEMP | Permanent Employee | +| 정밀도 | PRCDGR | Precision Degree | +| 정보화 | INFMZ | Informatization | +| 정수성 | LNTIC | Lentic | +| 정수장 | FTTP | A Filtration Plant | +| 정의서 | DEFDOC | Definition Document | +| 정착금 | RSTFND | Resettlement Funds | +| 정형화 | PTNG | Patterning | +| 정화조 | SPCTNK | Septic Tank | +| 정확도 | ACCR | Accuracy | +| 제개정 | ENAM | Enactment And Amendment | +| 제경비 | OVEXP | Overhead Expenses | +| 제공자 | OFFR | Offerer | +| 제내지 | PRLL | Protected Lowland | +| 제방고 | LVHGT | Levee Height | +| 제보자 | INFMT | Informant | +| 제삼자 | | | +| 제수당 | SALW | Sundry Allowances | +| 제안서 | PRPSD | Proposal Document | +| 제안자 | PRPSR | Proposer | +| 제어기 | CTRLR | Controller | +| 제외지 | RVRSL | River Side Land | +| 제작사 | MNFCTR | Manufacturer | +| 제작자 | PDCR | Producer | +| 제조물 | PRODCT | Product | +| 제조사 | MKR | Maker | +| 제조업 | MFBIZ | Manufacturing Business | +| 제출자 | PRSNR | Presenter | +| 제출처 | SMPL | Submission Place | +| 제품군 | PDGP | Product Group | +| 조건부 | CNDL | Conditional | +| 조달청 | PPS | Public Procuerment Service | +| 조사서 | INVD | Investigation Ducument | +| 조사원 | | | +| 조사자 | EXMNR | Examiner | +| 조정량 | ADJQTY | Adjustment Quantity | +| 조직도 | ORGCHT | Organization Chart | +| 조치자 | ACTPR | Action Person | +| 조합원 | MBRAS | Member Of Association | +| 조회자 | INQPR | Inquiry Person | +| 종량제 | MRST | The Meter-Rate System | +| 종사자 | PRCTR | Practicioner | +| 종업원 | | | +| 좋아요 | LIKES | Likes | +| 좋은물 | WSWTR | Wholesome Water | +| 좌표계 | CDSSTM | Coordinate System | +| 주관식 | SBJV | Subjective | +| 주문자 | ORDRR | Orderer | +| 주민세 | RSDTX | Resident Tax | +| 주부속 | MANX | Main Annex | +| 주소록 | ADBK | Address Book | +| 주유소 | GSTN | Gas Station | +| 주의보 | WTC | Watch | +| 주입량 | INJQTY | Injected Quantity | +| 주저자 | PRAUT | Primary Author | +| 주제도 | THEME | Thematic Map | +| 주차장 | PKLT | Parking Lot | +| 준비물 | SPPLS | Supplies | +| 중간종 | ITRMDM | Intermedium | +| 중권역 | MSIRB | Middle Sphere Of Influence In A River Basin | +| 중도금 | ITRPY | Interim Payment | +| 중분류 | MCLSF | Medium-Scale Classification | +| 중블록 | MBLK | Middle Block | +| 중상자 | SRIPR | Seriously Injured Person | +| 중수도 | RUSWTR | Reusing Water | +| 중요도 | IMPDG | Important Degree | +| 중장비 | HVEQP | Heavy Equipment | +| 중하층 | LMCL | Lower Middle Classes | +| 증가율 | GRWRT | Growth Rate | +| 증기압 | STPS | Steam Pressure | +| 증명서 | PRDOC | Proof Documentation | +| 증발량 | EVAMT | Evaporation Amount | +| 지급인 | PAYR | Payer | +| 지급자 | | | +| 지급처 | PMPL | Payment Place | +| 지방비 | LCEP | Local Expense | +| 지방세 | LCLTX | Local Tax | +| 지방채 | MCPBND | Municipal Bond | +| 지방청 | LGVOFC | Local Government Office | +| 지분율 | SHRT | Share Ratio | +| 지수식 | WTRBLK | Water Block | +| 지역별 | BRGN | By Region | +| 지은이 | | | +| 지자체 | | | +| 지적부 | | | +| 지정자 | ASNR | Assigner | +| 지표면 | LNDSF | Land Surface | +| 지표수 | SRFWTR | Surface Water | +| 지하수 | UGWTR | Underground Water | +| 직접비 | DRCO | Direct Cost | +| 직접세 | DRTX | direct tax | +| 진입로 | ACCRD | Access Road | +| 진행률 | PRGRT | Progress Rate | +| 질문자 | QSTNR | Questioner | +| 질의자 | | | +| 집약도 | INTSDG | Intensive Degree | +| 징수관 | CLTOR | Collector | +| 차감량 | SBDQTY | Subtracted Quantity | +| 차상위 | SHGHRK | The Second Highest Rank | +| 차수벽 | SDMBN | Shielding Membrane | +| 참가비 | ENTFE | Entry Fee | +| 참가자 | PRTPT | Participant | +| 참석자 | ATD | Attendee | +| 참여율 | PTRT | Participation Rate | +| 참여자 | PRTPNT | Participant | +| 참조자 | RFPR | Reference Person | +| 창업자 | FNDR | Founder | +| 채권자 | CRDTR | Creditor | +| 채무자 | DBTR | Debtor | +| 채수구 | WTRLT | Water Inlet | +| 채수병 | WSBT | Water Sample Bottle | +| 채집자 | CLTNR | Collecter | +| 채집지 | CLTNG | Collect Ground | +| 채취량 | CLTQTY | Collected Quantity | +| 채취자 | CLCTOR | Collector | +| 책임자 | RBPRSN | Responsible Person | +| 처리량 | PRCQTY | Processing Quantity | +| 처리율 | PRSRT | Processing Rate | +| 처리인 | | | +| 처리자 | PRCR | Processor | +| 처리장 | TMPLNT | Treatment Plant | +| 첨가제 | ADTV | Additive | +| 청구인 | CLMT | Claimant | +| 청구자 | | | +| 청구지 | BLADR | Billing Address | +| 체납자 | DFLTR | Defaulter | +| 초기화 | INIT | Initialization | +| 초식성 | HRBVR | Herbivory | +| 총가구 | THSHD | Total Household | +| 총개체 | TNINDV | TotalIndividual | +| 총거래 | TDLNG | Total Dealings | +| 총건수 | TNOCS | Total Number Of Cases | +| 총결제 | TSTLM | Total Settlement | +| 총계약 | TCTRT | Total Contract | +| 총공급 | TSPLY | Total Supply | +| 총공사 | TCSTRN | Total Construction | +| 총구매 | TPRCH | Total Purchase | +| 총군집 | TNCMNT | Total Communities | +| 총근무 | TWRK | Total Working | +| 총금액 | GRAMT | Gross Amount | +| 총급여 | TSL | Total Salary | +| 총길이 | TLEN | Total Length | +| 총납부 | TPY | Total Payment | +| 총대출 | TLOAN | Total Loan | +| 총매출 | TSLS | Total Sales | +| 총면적 | GFA | Gross Floor Area | +| 총명수 | | | +| 총배당 | TDVD | Total Dividends | +| 총배정 | TALTM | Total Allotment | +| 총보유 | THLD | Total Holding | +| 총보증 | TGRNT | Total Guarantee | +| 총부채 | TLBLT | Total Liabilities | +| 총비용 | TCO | Total Cost | +| 총사용 | TUSE | Total Use | +| 총상환 | TRPY | Total Repayment | +| 총세포 | TBCLL | Total Biology Cell | +| 총소요 | TREQ | Total Requirement | +| 총수납 | TPYRC | Total Payments Received | +| 총수입 | TICM | Total Income | +| 총승인 | TAPRV | Total Approval | +| 총시설 | TFCLT | Total Facilities | +| 총신청 | TRQST | Total Request | +| 총업소 | TBZEST | Total Business Establishments | +| 총여신 | TCRDT | Total Credit | +| 총예산 | TBGT | Total Budget | +| 총이익 | TPRF | Total Profit | +| 총자산 | TAST | Total Assets | +| 총정원 | TCPC | Total Capacity | +| 총조회 | TINQ | Total Inquiry | +| 총주차 | TPKCT | Total Parking Capacity | +| 총주행 | TDRVG | Total Driving | +| 총중량 | TWGHT | Total Weight | +| 총지급 | TPMT | Total Payment | +| 총지출 | TEXPND | Total Expenditure | +| 총차입 | TBRW | Total Borrowings | +| 총채권 | TRCVB | Total Receivables | +| 총채무 | TDBT | Total Debt | +| 총처리 | TPRCS | Total Processing | +| 총청구 | TCLM | Total Claims | +| 총투자 | TIVST | Total Investment | +| 총평가 | TEVL | Total Evaluation | +| 총품목 | TITEM | Total Items | +| 총환수 | TRDM | Total Redemption | +| 총회수 | TRTRVL | Total Retrieval | +| 최고가 | HGPRC | The Highest Price | +| 최상위 | HGHRK | The Highest Rank | +| 최저가 | LWPRC | The Lowest Price | +| 최하위 | LWTRK | The Lowest Rank | +| 추천인 | RCMDR | Recommender | +| 추천자 | | | +| 출고량 | OBDQTY | Outbound Quantity | +| 출력량 | OTPPW | Output Power | +| 출력물 | PRNOT | Printout | +| 출발지 | DPPL | Departure Place | +| 출원인 | APLT | Applicant | +| 출입구 | GATE | Gate | +| 출입증 | ADPS | Admission Pass | +| 출장비 | BTEXP | Business Trip Expenses | +| 출장소 | LCOFC | Local Office | +| 출장자 | BZTRVR | Business Traveler | +| 출장지 | BTDST | Business Trip Destination | +| 출제자 | STXQR | Setting Exam Questions Person | +| 출판사 | PBLCO | Publishing Company | +| 충당금 | APAMT | Appropriation Amount | +| 충식성 | INSCTS | Insectivorous | +| 충전소 | CHRS | Charging Station | +| 취급량 | HDLQTY | Handling Quantity | +| 취급자 | HDLR | Handler | +| 취소자 | CNCLR | Canceler | +| 취수량 | WITQTY | Water-Intake Quantity | +| 취수원 | SWSP | Resource of Water Supply | +| 취수장 | ITKPL | Intake Plant | +| 취업자 | EMPR | Employed Person | +| 측정기 | MSINST | Measuring Instrument | +| 측정량 | MSQTY | Measured Quantity | +| 측정망 | MNTNW | Monitoring Network | +| 측정소 | MSRSTN | Measuring Station | +| 측정자 | MSRPSN | Measurement Person | +| 친환경 | ECFRD | Eco-Friendly | +| 침사지 | GRCHMB | Grit Chamber | +| 침전수 | PRPW | Precipitation-Water | +| 침출수 | EFNT | Effluent | +| 침투수 | PCLTWT | Percolating Water | +| 카드뮴 | CDMM | Cadmium | +| 캐노피 | CNPY | Canopy | +| 캠페인 | CMPGN | Campaign | +| 컨버터 | CNVRTR | Converter | +| 컨설팅 | CNSLT | Consulting | +| 컨텐츠 | | | +| 컬러맵 | CRMP | Colormap | +| 컴퓨터 | PC | Personal Computer | +| 콘텐츠 | CONTS | Contents | +| 콜센터 | CLLR | Call Center | +| 쿼터량 | QTAQTY | Quota Quantity | +| 크롤링 | CRWLG | Crawling | +| 키워드 | KYWD | Keyword | +| 타기관 | OINST | Other Institution | +| 타당성 | WSDM | Wisdom | +| 타원체 | ELPSD | Ellipsoid | +| 탈수기 | DEHYM | Dehydration Machine | +| 탈퇴자 | SCDR | Seceder | +| 탐지기 | DTOR | Detector | +| 탑승자 | PSGR | Passenger | +| 태양광 | SLRLG | Solar Light | +| 태양열 | SLREG | Solar Energy | +| 테스트 | | | +| 테이블 | TBL | Table | +| 텍스트 | TXT | Text | +| 템플릿 | | | +| 토요일 | SAT | Saturday | +| 토지계 | LNDCRL | Land Circles | +| 토출관 | DELP | Delivery Pipe | +| 통계청 | NSO | National Statistical Office | +| 통보서 | NTFCTD | Notification Document | +| 통보자 | ANCR | Announcer | +| 통신사 | TLCMCO | Telecommunication Company | +| 통신실 | OPRRM | An Operating Room | +| 통제소 | CNRPT | Control Post | +| 통지서 | WRNTC | Written Notice | +| 통행량 | TRFVLM | Traffic Volume | +| 통화자 | CALR | Caller | +| 퇴비화 | CMPSTG | Composting | +| 퇴적물 | SDM | Sediment | +| 특별세 | SPTX | Special Tax | +| 특수지 | SPAREA | Special Area | +| 파충류 | RPTL | Reptile | +| 판결문 | RLNG | Ruling | +| 판매량 | SLQTY | Sales Quantity | +| 판매자 | SLR | Seller | +| 판매처 | SLPL | Sales Place | +| 팝업창 | | | +| 패키지 | PKG | Package | +| 팽창률 | EXPSRT | Expansion Rate | +| 펌웨어 | FW | Firmware | +| 펌프장 | PUMPST | Pump Station | +| 페이지 | | | +| 편집기 | EDTR | Editor | +| 평가군 | EVLGRP | Evaluation Group | +| 평가자 | EVLTR | Evaluator | +| 평가표 | EVLSHT | Evaluation Sheet | +| 평균량 | AVGQTY | Average Quantity | +| 폐기물 | WST | Waste | +| 폐사체 | DBDY | Dead Body | +| 폐쇄망 | CLSDNW | Closed Network | +| 포유류 | MNM | Manmal | +| 포장재 | PACKNG | Packing | +| 포지션 | | | +| 폭발성 | EXPSV | Explosiveness | +| 표류수 | SFCWT | Surface Water | +| 표준화 | STDZ | Standardize | +| 품목량 | ITMQTY | Item Quantity | +| 풍부도 | ABDNC | Abundance | +| 풍속계 | ANMTR | Anemometer | +| 풍향도 | WDDRM | Wind Direction Diagram | +| 프레임 | FRAME | Frame | +| 프로필 | PRFL | Profile | +| 플랫폼 | PLTFM | Platform | +| 피의자 | SSPCT | Suspect | +| 피해량 | DAMQTY | Damaged Quantity | +| 피해자 | VCTM | Victim | +| 하도급 | SBCTR | Subcontract | +| 하반기 | SHYR | Second Half Of The Year | +| 하수도 | SEWER | Sewer | +| 하수량 | SWQTY | Sewage Quantity | +| 하역항 | PULDG | Port Of Unloading | +| 하천수 | RWTR | River Water | +| 학술지 | ACJRNL | Academic Journal | +| 학습자 | LRNR | Learning Person (Learner) | +| 한부모 | SGPRN | Single Parent | +| 할당량 | QT | Quota | +| 할인율 | DSCRT | Discount Rate | +| 함수율 | MOSRT | Moisture Rate | +| 함유량 | CTQTY | Content Quantity | +| 합격자 | PASSR | Passed Person(Successful Candidate) | +| 합류식 | CBSYS | Combined Sewer System | +| 합류점 | CNFLN | Confluence | +| 합리화 | RTNZ | Rationalization | +| 항공기 | ARPLN | Airplane | +| 항공사 | ARLN | Airline | +| 해상도 | RSLU | (Display) Resolution | +| 해수면 | | | +| 해양수 | OCWTRS | Ocean Waters | +| 해조류 | SWD | Seaweed | +| 행정동 | DONG | Dong (Administrative District) | +| 허가량 | PRMQTY | Permitted Quantity | +| 허가서 | PERMD | Permit Document | +| 허가증 | PERMC | Permission Certificate | +| 허용량 | ALWQTY | Allowed Quantity | +| 현미경 | MCPE | Microscope | +| 현실화 | RLZTN | Realization | +| 혈액형 | BLDTY | Blood Type | +| 협의회 | CUNCL | Council | +| 협잡물 | CTMN | Contaminants | +| 협조자 | HLPR | Helper | +| 형태별 | BSHP | By Shape | +| 호소수 | PNWTR | Pond Water | +| 호스트 | HOST | (Facility) Host | +| 홍수기 | FLDSN | Flood Season | +| 홍수량 | FLDSC | Flood Discharge | +| 홍수위 | FLDEL | Flood Elevation | +| 화요일 | TUE | Tuesday | +| 확약서 | DFPRD | Definite Promise Document | +| 확인서 | CNFDOC | Confirmation Document | +| 확인자 | IDFR | Identifier | +| 확장자 | EXTN | Extension | +| 확정자 | DTMR | Determiner | +| 환경부 | MOE | Ministry Of Environment | +| 환경성 | ENVL | Environmental | +| 환경처 | OMOE | (Old) Ministry Of Environment | +| 환경청 | ENVO | Environmental Office | +| 환산량 | CNVQTY | Converted Quantity | +| 환승역 | TRFSTN | Transfer Station | +| 활성화 | VTLZ | Vitalization | +| 회수량 | RTVQTY | Retrieved Quantity | +| 회신자 | RPLYR | Reply Person | +| 회원사 | MBRCO | Member Company | +| 회의실 | CFRM | Conference Room | +| 회전율 | RTTRT | Rotation Rate | +| 효율성 | EFFCTV | Effectiveness | +| 후처리 | PSTC | Post-Cleaning | +| 휘발성 | VLATIL | Volatility | +| 휴폐업 | SCBIZ | Suspension Or Closing Of Business | +| 희귀종 | RSPCS | Rare Species | +| 가능면적 | PMSBAR | Permissible Area | +| 가성소다 | NAOH | Caustic Soda(NACH) | +| 가조시간 | PDOSN | Possible Duration Of Sunshine | +| 가중평균 | WGAVG | Weighted Average | +| 가축분뇨 | LVEXTN | Livestock Excretions | +| 간선시설 | ATLFCS | Arterial Facilities | +| 감가상각 | DPRC | Depreciation | +| 감시수량 | MTRWQT | Monitoring Water Quantity | +| 강수확률 | POR | Probability Of Rainfall | +| 개발면적 | DVLPAR | Developed Area | +| 개인식별 | PRIDTF | Personal Identification | +| 개인정보 | PRVC | Privacy | +| 객체면적 | OBJTAR | Object Area | +| 거주면적 | HABAR | Habitation Area | +| 거치연수 | DFYRS | Deferment Years | +| 건물면적 | | | +| 건물번호 | BNO | Building Number | +| 건물본번 | BMNO | Building Main Number | +| 건물부번 | BSNO | Building Sub Number | +| 건설기계 | CTCQ | Construction Equipment | +| 건축면적 | BDAR | Building Area | +| 검정곡선 | CLBCV | Calibration Curve | +| 겨울철새 | WNTVST | Winter Visitor | +| 결정계수 | RSQR | R-Squared | +| 경과연수 | ELYRS | Elapsed Years | +| 경로우대 | SNPR | Senior Preference | +| 경상이익 | ORDPF | Ordinary Profit | +| 경작면적 | CLTVAR | Cultivation Area | +| 경지정리 | ROEL | Readjustment Of Erable Land | +| 경합채권 | CMPCLM | Competition Claims | +| 계약면적 | CTRTAR | Contract Area | +| 계정과목 | ACNTL | Account Title | +| 계좌번호 | ACTNO | Account Number | +| 계좌이체 | ACTRSF | Account Transfer | +| 계획수량 | DSNWQT | Design Water Quantity | +| 고도처리 | AWTR | Advanced Water Treatment | +| 고등균류 | HGF | Higher Fungi | +| 고등학교 | HGSCHL | High School | +| 고속도로 | HWAY | Express Highway | +| 고수부지 | | | +| 고시면적 | NTFAR | Notified Area | +| 고용보험 | EPIS | Employment Insurance | +| 고정비율 | FARTO | Fixed Assets Ratio | +| 고체연료 | HTTBS | Heat Tabs | +| 공간정보 | SPTINF | Spatial Information | +| 공공기관 | PBNST | Public Institution | +| 공공누리 | KOGL | Korea Open Government License | +| 공공수량 | PBCWQT | public water quantity | +| 공급면적 | SPLYAR | Supply Area | +| 공급설비 | SPLFC | Supply Facilities | +| 공동명의 | JNTNM | Joint Name | +| 공동수급 | JSD | Joint Supply And Demand | +| 공동주택 | APTCPX | Apartment Complex | +| 공부면적 | PBRGAR | Public Register Area | +| 공시지가 | OALP | Officially Announced Land Price | +| 공업용수 | IWTR | Industrial Water | +| 공용면적 | CMAR | Common Area | +| 공원면적 | PRKAR | Park Area | +| 공유면적 | SHRAR | Shared Area | +| 공통비용 | | | +| 과세면적 | TXAR | Taxable Area | +| 과세표준 | TXBS | Tax Base | +| 과오납금 | OVPMNT | Overpayments | +| 관개용수 | WTFIR | Water For Irrigation | +| 관리기관 | MGC | Management Agency | +| 관리주체 | MNATH | Management Authority | +| 광역시도 | MCTPV | Metropolitan Cities And Provinces | +| 교류전류 | AC | Alternating Current | +| 교육과정 | CRCLM | Curriculum | +| 교육기관 | EDNST | Education Institution | +| 교육연수 | EDTRN | Education And Training | +| 구름저항 | RLGRS | Rolling Resistance | +| 구비서류 | RQDOC | Required Documents | +| 구상채권 | RIDNT | Right Of Indemnity | +| 국립공원 | NTPK | National Park | +| 국민연금 | NPN | National Pension | +| 국회의원 | MTNA | Member Of The National Assembly | +| 군립공원 | CNTRPK | Country Park | +| 규제개혁 | RGRF | Regulatory Reform | +| 그룹웨어 | GRPWR | Groupware | +| 근로소득 | ERICM | Earned Income | +| 근무연수 | SVCYRS | Service Years | +| 근속연수 | CSYRS | Continuous Service Years | +| 금융기관 | FNST | Financial Institution | +| 급속여과 | RPDFTR | Rapidity Filtration | +| 기능점수 | FP | Function_Point | +| 기록물철 | RCDSF | Records Files | +| 기말잔액 | EBLNC | Ending Balance | +| 기준면적 | RFAR | Reference Area | +| 기초잔액 | OPBLNC | Opening Balance | +| 기타면적 | OTHRAR | Other Area | +| 기후대기 | CLAIR | Climate And Air | +| 내부면적 | INTNAR | Internal Area | +| 내용년수 | | | +| 내용연수 | SVLF | Service Life | +| 네트워크 | NTWRK | Network | +| 노동조합 | LBUN | Labor Union | +| 노출면적 | EXPDAR | Exposed Area | +| 녹색제품 | GPRDC | Green Product | +| 녹지면적 | GRNAR | Green Area | +| 녹피면적 | GRCVAR | Green Covered Area | +| 뉴스레터 | NEWSL | Newsletter | +| 다면평가 | MSEVL | Multisource Evaluation | +| 다운로드 | DWNLD | Download | +| 단과대학 | CLG | College | +| 단기자금 | SRTF | Short Term Fund | +| 담수어류 | FWF | Freshwater Fish | +| 담수조류 | ALG | Algae | +| 당좌예금 | CKACNT | Checking Account | +| 대기발령 | PLWTLS | Being Placed On The Waiting List | +| 대기배출 | ATEMS | Atmospheric Emission | +| 대기오염 | ARPLT | Air Pollution | +| 대기환경 | ATENV | Atmospheric Environment | +| 대상업체 | TBET | Target Business Entity | +| 대위변제 | SBRG | Subrogation | +| 대장균군 | CLFG | Coliform Group | +| 대지면적 | SIAR | Site Area | +| 대표이사 | CEO | Chief Executive Officer | +| 데이터셋 | DTST | Data Set | +| 도서지역 | ISLND | Islands | +| 도전양식 | CCRF | Cultivation Of Carp In Rice Fields | +| 독성물질 | TOXST | Toxic Substance | +| 독성지수 | TXIDX | Toxicity Index | +| 등기원인 | RGCS | Registration Cause | +| 디바이스 | DVCE | Device | +| 라이선스 | LCS | License | +| 로그아웃 | LGT | Log Out | +| 마일리지 | MLG | Mileage | +| 매개변수 | PARM | Parameter | +| 매우만족 | HSTFY | Highly Satisfy | +| 매입세액 | IPTXAM | Input Tax Amount | +| 메인화면 | MSCRN | Main Screen | +| 멸종위기 | CRETN | Crisis Of Extinction | +| 명품마을 | MPVLLG | Myeongpum Village | +| 모니터링 | MNTR | Monitoring | +| 무기물질 | NRGNC | Nonorganic | +| 무수수량 | NRVWTR | Non Revenue Water | +| 무효수량 | INFWQT | Ineffective Water Quantity | +| 물가지수 | PRIDX | Price Index | +| 미리보기 | PRVW | Preview | +| 미성년자 | LMNR | Legally a Minor | +| 미세먼지 | PM | Particulate Matter | +| 미소입지 | MCRST | Micro Site | +| 민원서류 | CADOC | Civil Affair Documents | +| 바로가기 | SCUT | Shortcut | +| 바이러스 | VRS | Virus | +| 바탕시료 | BLSMPL | Blank Sample | +| 박테리아 | BCTR | Bacteria | +| 발행기관 | PBINS | Publish Institute | +| 방지시설 | PRVFCT | Prevention Facility | +| 배당요구 | DVDMND | Dividend Demand | +| 배수방식 | DRGPTN | Drainage Pattern | +| 배수암거 | DGCVT | Drainge Culvert | +| 배수통관 | CGC | Circular Gate Culvert | +| 배출수량 | DCWQTY | Discharge Water Qauntity | +| 배출수지 | EMTWTR | Emit Drain Water | +| 배출활동 | EMAT | Emission Activity | +| 배후습지 | RRSMLD | Rear Swampy Land | +| 백두대간 | BDMTRG | Baekdudaegan Mountain Range | +| 법인세율 | CPTXRT | Corporate Tax Rate | +| 베셀함수 | BSFUN | Bessel Function | +| 벤처기업 | VENT | Venture Enterprise | +| 벤치마크 | BCHM | Benchmark | +| 보수월액 | MRAMT | Monthly Remuneration Amount | +| 보정계수 | COFC | Correction Factor | +| 보증료율 | GRNRT | Guarantee Rate | +| 보험료율 | PMRT | Premium Rate | +| 보훈번호 | PVNO | Patriots And Veterans Number | +| 본류면적 | MNSTAR | The Main Stream Area | +| 부외자산 | NLAST | Non-Ledger Assets | +| 부유물질 | SPNS | Suspended Solid | +| 부재지주 | ABLD | Absentee Landlord | +| 부정수급 | ILRCP | Illegal Receipt | +| 부지면적 | PLTAR | Plottage Area | +| 부착조류 | ATAG | Attached Algae | +| 분류체계 | TXNM | Taxonomy | +| 분양면적 | LTOTAR | Lotting-Out Area | +| 불감수량 | URCWQT | Under Recognition Water Qauntity | +| 불납결손 | LSNPY | Loss By Nonpayment | +| 불이행량 | UFDQTY | Unfulfilled Quantity | +| 불쾌지수 | DCFIDX | Discomfort Index | +| 불투수면 | IVAREA | Impervious Area | +| 불확실도 | UCTMR | Uncertainty Of Measurement | +| 불활성화 | INCTVN | Inactivation | +| 브라우저 | BRWSR | Browser | +| 블랙박스 | BLBOX | Black Box | +| 비내식성 | NCNRT | Non Corrosion Resistant | +| 비밀번호 | PSWD | Password | +| 비시가지 | UCTARA | Un City Area | +| 비정규직 | IREMP | Irregular Employee | +| 사고수습 | ACDRES | Accident Response | +| 사업면적 | BZAR | Business Area | +| 사업분야 | BSR | Business Area | +| 사업유형 | BTYP | Biz Type | +| 사용수량 | USEWQT | Use Water Quantity | +| 산림면적 | FRSTAR | Forest Area | +| 산재보험 | IACI | Industrial Accident Compensation Insurance | +| 산하기관 | AFINS | Affiliated Institute | +| 상관계수 | CORR | Correlation Coefficient | +| 상류면적 | USTRAR | Upstream Area | +| 상세주소 | DADDR | Detailed Address | +| 상호명칭 | | | +| 상호작용 | INTRCN | Interaction | +| 상황전파 | STCM | Situation Communication | +| 생년월일 | BRDT | Birth Date | +| 생리학적 | PSLG | Physiologic | +| 생물학적 | BOIL | Biological | +| 생태관광 | ECTRSM | Eco-Tourism | +| 생활하수 | DSWAG | Domestic Sewage | +| 선수수익 | UNRV | Unearned Revenue | +| 선하증권 | BL | Bill Of Lading | +| 선화증권 | | | +| 성과지표 | PI | Performance Indicator | +| 세계은행 | WB | World Bank | +| 소득공제 | ICMDCT | Income Deduction | +| 소득세율 | ICTXRT | Income Tax Rate | +| 소득월액 | MINAMT | Monthly Income Amount | +| 소멸시효 | ETPRSC | Extinctive Prescription | +| 소상공인 | SBO | Small Business Owner | +| 수도꼭지 | SPGT | Spigot | +| 수량징수 | WQTCLT | Water Quantity Collection | +| 수로면적 | WTRAR | Waterway Area | +| 수리시설 | WTUF | Water Utilization Facilities | +| 수몰면적 | SBMGAR | Submerged Area | +| 수문곡선 | HDRGPH | Hydrograph | +| 수변식생 | RPVGTN | Riparian Vegetation | +| 수소이온 | HION | Hydrogen Ion | +| 수수료율 | CMRT | Commission Rate | +| 수의계약 | PVCT | Private Contract | +| 수입업체 | IMPTR | Importer | +| 수입인지 | RVSTM | Revenue Stamp | +| 수준거표 | LSTND | Level Standard | +| 수질오염 | WTPLT | Water Pollution | +| 수혜면적 | BNFAR | Benefitted Area | +| 순발열량 | NCFV | Net Calorific Value | +| 순환골재 | RCLAGT | Recycling Aggregate | +| 승차정원 | RDCPCT | Ride Capacity | +| 시나리오 | SCNR | Scenario | +| 시설면적 | FCAR | Facility Area | +| 시험회차 | TSCYCL | Test Cycle | +| 식물뿌리 | PLTRT | Plant Root | +| 식별정보 | | | +| 식생면적 | VGTNAR | Vegetation Area | +| 식생피복 | VGTCVR | Vegetation Cover | +| 신용카드 | CRCD | Credit Card | +| 신용평가 | CRDRTG | Credit Rating | +| 신적설량 | FSQTY | Fresh Snow Quantity | +| 실거주지 | RLRSD | Real Residence | +| 실효세율 | EFTXRT | Effective Tax Rate | +| 아스팔트 | ASPT | Asphalt | +| 아우점종 | SBSPCS | Subdominant Species | +| 아이디어 | IDEA | Idea | +| 아주좋음 | VRGD | Very Good | +| 알고리즘 | ALGR | Algorithm | +| 암거면적 | UDRAR | Underdrain Area | +| 액면가격 | | | +| 액티비티 | | | +| 야생동물 | WANMLS | Wild Animals | +| 야생생물 | WLDF | Wildlife | +| 양해각서 | MOU | Memorandum Of Understanding | +| 업데이트 | | | +| 업무분장 | TSKASN | Task Assignment | +| 여권번호 | PNO | Passport Number | +| 여성기업 | FOBIZ | Female-Owned Business | +| 여울면적 | RPDSAR | Rapids Area | +| 연립주택 | TNHS | Town House | +| 연말정산 | YTXADJ | Year-End Tax Adjustment | +| 연차휴가 | ANVCT | Annual Vacation | +| 염지하수 | SLTUGW | Salty Underground Water | +| 영점표고 | ZRELV | Zero Elevation | +| 예산전용 | DVSBGT | Diversion Of Budget | +| 오브젝트 | | | +| 오수처리 | SWGDPL | Sewage Disposal | +| 오염물질 | PLTT | Pollutant | +| 오프라인 | OFLN | Offline | +| 온실가스 | GRGS | Greenhouse Gas | +| 완료면적 | CMPTAR | Completed Area | +| 완료수량 | CMPWQT | Complete Water Quantity | +| 완속여과 | SLWFTR | Slow Filtration | +| 외래생물 | ALSP | Alien Species | +| 외부면적 | EXTNAR | External Area | +| 요금수량 | CRGWQT | Charge Water Quantity | +| 용도지역 | ZNG | Zoning | +| 용존산소 | DOX | Dissolved Oxygen | +| 용존총인 | DTP | Dissolved Total Phosphorus | +| 용지면적 | LANDAR | Land Area | +| 용해성철 | SI | Soluble Iron | +| 우편번호 | ZIP | Zip Code | +| 운영체제 | OS | Operating System | +| 원도급자 | ORGCTR | Original Contractor | +| 원소유자 | ORGOWN | Original Owner | +| 원천징수 | WTHD | Withholding | +| 웹사이트 | | | +| 유가증권 | MSCRT | Marketable Securities | +| 유기물질 | ORGMT | Organic Matter | +| 유기탄소 | ORGCB | Organic Carbon | +| 유동부채 | CRLBL | Current Liability | +| 유동비율 | CRRT | Current Ratio | +| 유동자산 | CRAST | Current Asset | +| 유류탱크 | OLTNK | Oil Tank | +| 유수수량 | RVNWTR | Revenue Water | +| 유역면적 | DRAR | Drainage Area | +| 유전자원 | GRSC | Genetic Resources | +| 유지관리 | MNTMNG | Maintenance Management | +| 유지보수 | MNTN | Maintenance | +| 유효수량 | EFTWQT | Effective Water Quantity | +| 육상면적 | LDBSAR | Land Based Area | +| 이격거리 | SPDST | Seperated Distance | +| 이노비즈 | INOBIZ | Innovation Business | +| 이용면적 | USGAR | Usage Area | +| 이자수익 | INTRV | Interest Revenues | +| 이전신청 | RCTAPL | Relocation Apllication | +| 이전연도 | PRVYR | Previous Year | +| 인공증식 | CPPGN | Captive Propagation | +| 인산염인 | PO4P | Phosphate Phosphorus | +| 인센티브 | ICNTV | Incentive | +| 인터넷망 | ITNTNW | Internet Network | +| 일기개황 | WTHST | Weather Situation | +| 일련번호 | SN | Serial Number | +| 일상감사 | DLADT | Daily Audit | +| 임대면적 | RNTAR | Rent Area | +| 임차면적 | LSAR | Leased Area | +| 자금이체 | FNDTR | Fund Transfer | +| 자기소개 | SLFINT | Self Introduction | +| 자기자본 | EQCPTL | Equity Capital | +| 자기평가 | SLFEVL | Self Evaluation | +| 자동이체 | ATTR | Automatic Transfer | +| 자동차세 | AMTX | Automobile Tax | +| 자본조정 | CPAD | Capital Adjustment | +| 자연보호 | CTNT | Conservation Of Nautre | +| 자원봉사 | VLTR | Volunteering | +| 자치단체 | | | +| 장바구니 | SHPBS | Shopping Basket | +| 장부가액 | BKVL | Book Value | +| 재무제표 | FNSTM | Financial Statements | +| 재배작물 | CRTLVN | Crops Of Cultivation | +| 재사용량 | RSDQTY | Reused Quantity | +| 재수출국 | RPGCNY | Reexporting Country | +| 재이용수 | RUSWT | Reuse Water | +| 재충전량 | RCRQTY | Recharged Quantity | +| 재택근무 | TLCM | Telecommuting | +| 재활용량 | RCYQTY | Recycled Quantity | +| 저소득층 | LINBR | Low Income Bracket | +| 저수면적 | IMPDAR | Impoundment Area | +| 저수용량 | RSCPT | Reservoir Capacity | +| 저작권자 | CPRGTR | Copyright Holder | +| 저장매체 | STRMDA | Storage Media | +| 적색목록 | RLST | Redlist | +| 적용세율 | APTXRT | Applied Tax Rates | +| 전기탐사 | ELCRST | Electrical Resistivity | +| 전문분야 | ARSP | Area Of Specialty | +| 전용면적 | XUAR | Exclusive Use Area | +| 전자결재 | ELAPR | Electronic Approval | +| 전자계약 | ELCT | Electronic Contract | +| 전자문서 | ELDOC | Electronic Document | +| 전자발행 | ELPBL | Electronic Publication | +| 전자서명 | ELSGN | Electronic Signature | +| 전자우편 | | | +| 전자접수 | ELRCP | Electronic Receipt | +| 전체면적 | WHLAR | Whole Area | +| 전통시장 | TRMKT | Traditional Market | +| 전화번호 | TELNO | Telephone Number | +| 점오염원 | PTPSRC | Point Pollution Source | +| 정격전압 | RVLT | Rating Voltage | +| 정격출력 | RTOPUT | Rated Output | +| 정량평가 | QTEVL | Quantitative Evaluation | +| 정성평가 | QLEVL | Qualitative Evaluation | +| 정수처리 | WTRTRM | Water Treatment | +| 정유공정 | RFPC | Refining Process | +| 제약시장 | PHMRKT | Pharmaceutical Market | +| 제조업체 | MNFCO | Manufacture Company | +| 제조회사 | | | +| 조경면적 | LAAR | Landscape Architecture Area | +| 조도계수 | RGHCF | Roughness Coefficient | +| 종사업장 | MRBPL | Minor Business Place | +| 주건축물 | MBLD | Main Building | +| 주계약자 | MCNTR | Main Contractor | +| 주담당자 | MPIC | Main Person In Charge | +| 주무관청 | CMPADG | Competent Administrative Agency/Office | +| 주민번호 | | | +| 주민세율 | RSTXRT | Residence Tax Rate | +| 주사업자 | MBPR | Main Business Person | +| 주사업장 | MBPL | Main Business Place | +| 주상복합 | MUBLD | Mixed-Use Buildings | +| 주생산품 | MPRD | Main Product | +| 주택면적 | HSAR | House Area | +| 주행모드 | DSCHDL | Drive Schedule | +| 중부원점 | CTRMRD | Central Meridian | +| 중소기업 | SME | Small And Medium Enterprise | +| 즐겨찾기 | BKMK | Bookmark | +| 증발산량 | EVTRTN | Evapotranspiration | +| 증발잠열 | LHOV | Latent Heat Of Vaporization | +| 지도교수 | ACAVSR | Academic Adviser | +| 지류면적 | TRBAR | Tributary Area | +| 지목면적 | LDCGAR | Land Category Area | +| 지번본번 | | | +| 지번부번 | | | +| 지역지구 | ZNDST | Zoning District | +| 지오서버 | GSVR | Geoserver | +| 지적대장 | | | +| 지적면적 | PBCDAR | Public Cadastre Area | +| 지중온도 | SLTMPR | Soil Temperature | +| 지체상금 | LQDMG | Liquidated Damages | +| 지형지물 | FTRE | Feature | +| 질의응답 | QNA | Question And Answer | +| 집수구역 | CHMARA | Catchment Area | +| 집합건물 | CNBD | Condominium Buildings | +| 차대번호 | VIN | Vehicle Identification Number | +| 차량번호 | | | +| 처리수량 | PRCWQT | Process Water Quantity | +| 처리효율 | DSPEFC | Disposal Efficiency | +| 청정연료 | CLNRFL | Cleaner Fuel | +| 체크카드 | CKCRD | Check Card | +| 초등학교 | ELSCHL | Elementary School | +| 총가입자 | TNSBSR | Total Subscribers | +| 총감축량 | TRNQTY | Total Reduction Quantity | +| 총경년관 | TNAGP | Total Aged Pipes | +| 총계획량 | TPLQTY | Total Planned Quantity | +| 총매립량 | TLFQTY | Total Landfilled Quantity | +| 총발열량 | TCLVL | Total Calorific Value | +| 총방류량 | TOTFL | Total Outflow | +| 총방문자 | TVSTR | Total Visitors | +| 총배출권 | TEMCRD | Total Emmision Credit | +| 총배출량 | TEHQTY | Total Exhaust Quantity | +| 총부존량 | TPTQTY | Total Potential Quantity | +| 총사업비 | TPCO | Total Project Cost | +| 총사용량 | TUQTY | Total Usage Quantity | +| 총세대수 | TNOHSH | Total Number Of Households | +| 총신청량 | TAPQTY | Total Applied Quantity | +| 총연구비 | TRSCO | Total Research Cost | +| 총이동량 | TMVQTY | Total Moved Quantity | +| 총인구수 | TPPL | Total Population | +| 총인원수 | TNOPE | Total Number Of People | +| 총인정량 | TRGQTY | Total Recognized Quantity | +| 총자본금 | TEQCP | Total Equity Capital | +| 총저수량 | TREQTY | Total Reservoir Quantity | +| 총직원수 | TNOEMP | Total Number Of Employees | +| 총하수량 | TSWQTY | Total Sewage Quantity | +| 총할당량 | TQTY | Total Quota | +| 총회수량 | TRVQTY | Total Retrieved Quantity | +| 출제회차 | SQCYCL | Set Exam Questions Cycle | +| 취득면적 | ACQAR | Acquired Area | +| 침수면적 | FLDAR | Flooded Area | +| 침엽수림 | CFF | Coniferous Forests | +| 카카오톡 | KATLK | Kakao Talk | +| 카탈로그 | CTLG | Catalog | +| 카테고리 | | | +| 캠벨선도 | CAMPDG | Campbell Diagram | +| 커뮤니티 | CMNTY | Community | +| 컨설턴트 | CNSLTT | Consultant | +| 컨트롤러 | PCTLR | (Program) Controllor | +| 콘크리트 | CNCRT | Concrete | +| 큐알코드 | | | +| 클라우드 | CLD | Cloud (Computing) | +| 토지대장 | LNDRG | Land Register | +| 토지면적 | LDAR | Land Area | +| 토지이동 | AOCR | Alteration Of Cadastral Record | +| 토지피복 | LCV | Land Cover | +| 통근버스 | CMBUS | Commuter Bus | +| 통상임금 | ORWG | Ordinary Wage | +| 투수면적 | PRMBAR | Permeable Area | +| 파라미터 | | | +| 파트너십 | PTNS | Partnership | +| 팝업메뉴 | | | +| 패스워드 | | | +| 팩스번호 | FXNO | Fax Number | +| 편의시설 | CVNFCL | Convenient Facilities | +| 편입면적 | ICLAR | Included Area | +| 폐수처리 | WSWT | Wastewater Treatment | +| 표준편차 | STDDV | Standard Deviation | +| 프로그램 | PRGRM | Program | +| 프로세스 | PRCSS | Process | +| 프로젝트 | | | +| 플라스틱 | PLSTIC | Plastic | +| 플랑크톤 | PLNKTN | Plankton | +| 피보험자 | ISRT | Insurant | +| 피승계인 | SCSR | Successor | +| 피신청인 | | | +| 피신청자 | RQPRSN | Requested Person | +| 필지면적 | LPAR | Land Parcel Area | +| 하구면적 | ESTNAR | Estuarine Area | +| 하드웨어 | HW | Hardware | +| 하상면적 | RVBDAR | Riverbed Area | +| 하수처리 | SWTRMT | Sewage Treatment | +| 하자보수 | WRP | Warranty Repair | +| 학술대회 | SMPSM | Symposium | +| 합계면적 | SUMAR | Sum Area | +| 합성수지 | SYRSN | Synthetic Resin | +| 해시태그 | HSTG | Hashtag | +| 해양투기 | OCDU | Ocean Dumping | +| 행정구역 | ADMDST | Administrative District | +| 행정기관 | ADMNST | Administrative Institution | +| 행정처분 | ADMDSP | Administrative Disposition | +| 허가면적 | PMTAR | Permitted Area | +| 현장소장 | STMGR | Site Manager | +| 홈페이지 | | | +| 홍수사상 | FLDEV | Flood Event | +| 환경매체 | ENVMDA | Environment Media | +| 환경청장 | AOEO | Administrator Of Environmental Office | +| 활동자료 | ATTD | Activity Data | +| 활엽수림 | BDF | A Broadleaf Forest | +| 회계연도 | FYR | Fiscal Year | +| 회수시설 | RTFT | Retrieval Facilities | +| 후기내용 | RVCN | Review Contents | +| 휴대전화 | MPHN | Mobilephone | +| 간접생산비 | | | +| 감가상각률 | DPRT | Depreciation Rate | +| 감가상각비 | DPCO | Depreciation Cost | +| 건강보험증 | HIC | Health Insurance Card | +| 건축물대장 | BDRG | Building Register | +| 계면활성제 | SRFCT | Surfactant | +| 계약보증금 | CRYMY | Contract Guaranty Money | +| 계획하상고 | PLNRB | Planned River Bed | +| 고도처리량 | AWTVLM | Advanced Water Treatment Volume | +| 고용보험료 | EPISPM | Employment Insurance Premium | +| 골재채취업 | AGPKBS | Aggregate Picking Business | +| 공간데이터 | SPCDT | Space Data | +| 공급받는자 | SPLRCP | Supply Recipient | +| 공인인증서 | PCRTF | Public Certificate | +| 과불화탄소 | PFCS | Perfluoro Carbon | +| 과학기술인 | SCEGNR | Scientists And Engineers | +| 구우편번호 | OZIP | Old Zip Code | +| 구조물면적 | STRTAR | Structures Area | +| 국가정보원 | NIS | National Intelligence Service | +| 국고보조금 | GVSBS | Government Subsidy | +| 기초배출량 | BSCEMS | Basic Emissions | +| 납세의무자 | | | +| 냉난방면적 | HACAR | Heating And Cooling Area | +| 농축수산물 | ARLSFS | Agricultural And Livestock And Fishery | +| 다세대주택 | MLTPHS | Multiplex House | +| 다양도지수 | DVRIDX | Diversity Index | +| 대권역면적 | LSRBAR | Large Sphere Of Influence In A River Basin Area | +| 대유역면적 | LRBAR | Large River Basin Area | +| 만수위면적 | FWLVAR | Full Water Level Area | +| 매우불만족 | HDSTFY | Highly Dissatisfy | +| 매출원가율 | COGSRT | Cost Of Goods Sold (Cogs) Ratio | +| 메타데이터 | MTDAT | Metadata | +| 멤버스카드 | MBSCR | Members Card | +| 면적강우량 | ARRF | Areal Rainfall | +| 멸종위기종 | EGSPCS | Endangered Species | +| 무척추동물 | INVTB | Invertebrates | +| 문자메시지 | TMSG | Text Message (Service) | +| 미구축면적 | UNBTAR | Unbuilt Area | +| 미수납수량 | NPDWQT | Non Paid Water Quantity | +| 바이오가스 | BGS | Biogas | +| 바이오매스 | BMSS | Biomass | +| 방사성물질 | RATSBT | Radioactive Substance | +| 배슬러지지 | EMSLDG | Emit Sludge | +| 배출허용량 | EMSALW | Emission Allowances | +| 법정보호종 | LPRSP | Legally Protected Species | +| 복리후생비 | WLFCO | Welfare Cost | +| 부가가치세 | VAT | Value Added Tax | +| 부유물질량 | SPNQTY | Suspended Solid Quantity | +| 부착돌말류 | ATTDM | Attached Diatom | +| 불투수면적 | IMPBAR | Impermeable Area | +| 비유동부채 | NCLBL | Non-Current Liabilities | +| 비유동자산 | NCAST | Non-Current Assets | +| 비점오염원 | NPTLS | Nonpoint Pollution Source | +| 사업소면적 | | | +| 사업자번호 | | | +| 사업장면적 | BZSTAR | Business Site Area | +| 사전할당량 | PRALC | Pre-Allocation | +| 사회적기업 | SCENT | Social Enterprise | +| 상쇄배출권 | KCU | Korean Credit Unit | +| 상시만수위 | NHWL | Normal High Water Level | +| 생물다양성 | BODVS | Biodiversity | +| 생물측정망 | AEM | Aquatic Ecology Monitering Network | +| 생태자연도 | ENM | Ecological And Natural Map | +| 섭식기능군 | FFG | Funtional Feeding Groups | +| 세계측지계 | WGS84 | World Geodetic System | +| 세금계산서 | TXIV | Tax Invoice | +| 소수력발전 | SMHPWR | Small Hydropower | +| 소유권이전 | OWNTRS | Ownership Transfer | +| 소유역면적 | SBAREA | Sub Basin Area | +| 소프트웨어 | SW | Software | +| 수리모델링 | MTMD | Mathematical Modeling | +| 수리안전답 | IRPDY | Irrigated Rice Paddy | +| 수리전도도 | HYDCON | Hydraulic Conductivity | +| 수질측정망 | WQMN | Water Quality Monitoring Network | +| 숙련도시험 | PFTSTG | Proficiency Testing | +| 스트레이너 | STRENE | Strainer | +| 시뮬레이션 | SMLT | Simulation | +| 시장조성자 | MRMKR | Market Maker | +| 아산화질소 | NTRXD | Nitrous Oxide | +| 아이핀번호 | IPIN | Internet Personal Identification Number | +| 아황산가스 | SPDX | Sulphur Dioxide | +| 양서파충류 | AMPHRP | Amphibian Reptile | +| 업그레이드 | UPGRAD | Upgrade | +| 연속지적도 | CCDM | Continuous Cadastral Map | +| 열병합발전 | CHP | Combined Heat And Power | +| 영업외비용 | NOCO | Non-Operating Cost | +| 영업외수익 | NOICM | Non-Operating Income | +| 오수처리량 | SWDQTY | Sewage Disposal Quantity | +| 외국인번호 | | | +| 용존고형물 | TDS | Total Dissolved Solide | +| 용존산소량 | DOQTY | Dissolved Oxygen Quantity | +| 용존총질소 | DTN | Dissolved Total Nitrogen | +| 우점종면적 | DMSPAR | Dominant Species Area | +| 워크플로우 | WFLW | Workflow | +| 웹맵서비스 | WMS | Web Map Service | +| 유기물질량 | OMQTY | Organic Matter Quantity | +| 이산화질소 | NTDX | Nitrogen Dioxide | +| 이산화탄소 | CBDX | Carbon Dioxide | +| 이해관계인 | | | +| 이해관계자 | STHDR | Stakeholder | +| 인증배출량 | CRTEMS | Certified Emissions | +| 인터페이스 | IF | Interface | +| 일산화탄소 | CBMX | Carbon Monoxide | +| 임금피크제 | SLPK | Salary Peak | +| 임대차계약 | LSCT | Lease Contract | +| 잉여배출권 | SPSEMP | Supplus Emission Permits | +| 자본적지출 | CPEX | Capital Expenditure | +| 자연발화성 | PYHRC | Pyropholic | +| 전기자동차 | ELCAR | Electric Car | +| 전기전도도 | ELCD | Electrical Conductivity | +| 전자기록물 | ERCDS | Electronic Records | +| 정수여과지 | WTFB | Water Treatment Filter Basin | +| 조류측정망 | SWMN | Sea Weed Mesure Network | +| 주거래은행 | MBNK | Main Bank | +| 주차장면적 | PKLTAR | Parking Lot Area | +| 중권역면적 | MSRBAR | Middle Sphere Of Influence In A River Basin Area | +| 지식재산권 | IPR | Intellectual Property Rights | +| 질소산화물 | NOX | Nitrogen Oxide | +| 차상위계층 | LICLS | Low Income Class | +| 채무불이행 | DFOBL | Default On An Obligation | +| 천연기념물 | NTM | Natural Monument | +| 체크리스트 | | | +| 초미세먼지 | FPM | Fine Particulate Matter | +| 총교육시간 | TTRHR | Total Training Hours | +| 총근로자수 | TNOWK | Total Number Of Workers | +| 총근무시간 | TWKHR | Total Work Hours | +| 총대장균군 | CFBCTR | Coliform Bacteria | +| 총등록건수 | TRGCNT | Total Registration Count | +| 총사업비용 | | | +| 총유기탄소 | TORGCB | Total Organic Carbon | +| 총재사용량 | TRDQTY | Total Reused Quantity | +| 총저수용량 | TRSCPT | Total Reservoir Capacity | +| 최심하상고 | LRB | The Lowest River Bed | +| 최종할당량 | FNALC | Final Allocation | +| 추가할당량 | ADDALC | Additional Allocation | +| 추곡수매량 | AGPQTY | Autumn Grain Purchase Quantity | +| 측정망면적 | MTNTAR | Monitoring Network Area | +| 친환경마을 | ECVL | Eco-Friendly Village | +| 클라이언트 | CLNT | Client | +| 테스트베드 | TSTBD | Test Bed | +| 투수량계수 | TRSMI | Transmissivity | +| 평가배출량 | ASDEMS | Assessed Emissions | +| 평균하상고 | AVGRB | Average River Bed | +| 평형하상고 | EBRB | Equilibrium River Bed | +| 폐기물처리 | WSTDSP | Waste Disposal | +| 풍부도지수 | RCNIDX | Richness Index | +| 하수미처리 | USWTMT | Un Sewage Treatment | +| 하수처리량 | SWTQTY | Sewage Treatment Quantity | +| 하수처리수 | STWTR | Sewage Treatment Water | +| 하수처리장 | STPLNT | Sewage Treatment Plant | +| 하이브리드 | HYB | Hybrid | +| 할당배출권 | KAU | Korean Allownce Unit | +| 할당취소량 | ALCRVC | Allocation Revocation | +| 해산어류종 | MFSPCS | Marine Fishes Species | +| 헬프데스크 | HDESK | Helpdesk | +| 현금매도율 | CSSRT | Cash Selling Rate | +| 현금영수증 | CSRT | Cash Receipt | +| 환경주제도 | ENVTHM | Environmental Thematic Map | +| 활동자료량 | ADQTY | Activity Data Quantity | +| 회유성어종 | DRMSPC | Diadromous Species | +| 경사면일사량 | SRDINC | Solar Radiation Quantity On Inclined Surface | +| 고유식별정보 | UII | Unique Identifier Information | +| 과불화탄소량 | PFCQTY | Perfluoro Carbon Quantity | +| 국지수집장치 | LAU | Local Area Observation Unit | +| 굴뚝자동측정 | CMAM | Chimney Automatic Measurement | +| 기초구역번호 | | | +| 기한이익상실 | TRGCLS | Trigger Clause | +| 기후변화협약 | UNFCCC | United Nations Framework Convention On Climate Change | +| 놀이시설면적 | PFCAR | Play Facility Area | +| 농어촌특별세 | ASRDTX | ACT ON SPECIAL RURAL DEVELOPMENT TAX | +| 대기오염물질 | ARPLTS | Air Pollutants | +| 데이터베이스 | DB | Database | +| 동물플랑크톤 | ZPLKTN | Zooplankton | +| 명품마을면적 | MPVAR | Myeongpum Village Area | +| 물이용부담금 | WUALMT | Water Utilization Allotment | +| 미활용확약서 | LCNM | Letter of Commitment on Nullification of Mitigations | +| 바이오에너지 | BENRG | Bioenergy | +| 배출권이월량 | BKEMP | Banking of Emission Permits | +| 배출권제출량 | SRDEMP | surrender of emission permits | +| 배출권차입량 | BRWEMP | Borrowing of Emission Permits | +| 배출권총수량 | TEA | Total Emission Allowances | +| 배출허용기준 | EQS | Effluent Quality Standard | +| 배출허용총량 | EMSCAP | (Emission) Cap | +| 법인등록번호 | CRNO | Corporation Registration Number | +| 보호구역면적 | RTNAR | Retention Area | +| 부가가치세율 | VATRT | Value Added Tax Rate | +| 부대시설면적 | SFAR | Subsidiary Facilities Area | +| 비점오염물질 | NPLTS | Nonpoint Pollutions | +| 산림보호구역 | FRSTPA | Forest Protection Area | +| 생태계교란종 | DISP | Ecological Disruption Species | +| 수관그늘면적 | WPSHAR | Water Pipe Shade Area | +| 수리불안전답 | PIRPDY | Partially Irrigated Rice Paddy | +| 수소이온농도 | PH | Hydrogen Ion Concentration | +| 수질오염물질 | WTPLTS | Water Pollutants | +| 수질평가지수 | WQI | Water Quality Index | +| 슬러지케이크 | SLDGCK | Sludge Cake | +| 식물플랑크톤 | PTPKTN | Phytoplankton | +| 신용평가기관 | CRBU | Credit Bureau | +| 애프터서비스 | AS | After-Sales Service | +| 애플리케이션 | APP | Application (App) | +| 어류평가지수 | FAI | Fish Assessment Index | +| 어플리케이션 | | | +| 우편일련번호 | | | +| 운전면허번호 | DLN | Driver'S License Number | +| 율리우스날짜 | JLSDY | Julius Day | +| 일제관측수위 | SWL | Simultanous Water Level | +| 저서동물지수 | BMI | Benthic Macroinvrtebrates Index | +| 전도식가동보 | RVOPW | Reversal Operating Weir | +| 전문처리분야 | SPCFLD | Specialized Field | +| 전신환매도율 | TTSRT | Telegraphic Transfer Selling Rate | +| 전신환매입률 | TTBRT | Telegraphic Transfer Buying Rate | +| 전자납부번호 | EPAYNO | Electronic Payment Number | +| 전자수입인지 | ERSTP | E-Revenue Stamp | +| 조정감액수량 | DCMWQT | Decrement Water Quantity | +| 종합주가지수 | KOSPI | Korean Composite Stock Price Index | +| 주거공용면적 | DCAR | Dwelling Common Area | +| 주민등록번호 | RRNO | Resident Registration Number | +| 주요생산제품 | | | +| 지방자치단체 | LCLGV | Local Government | +| 지역내총생산 | GRDP | Gross Regional Domestic Product | +| 총발행주식수 | TSHOSD | Total Shares Outstanding | +| 토양오염물질 | SLCTMS | Soil Contaminants | +| 토지이용규제 | LURGLT | Land Use Regulation | +| 토지피복면적 | LCVAR | Land Cover Area | +| 토지피복지도 | LCM | Land Cover Map | +| 특정유해물질 | SHCH | Specified Hazardous Chemicals | +| 하수종말처리 | FNTRMT | Final Treatment | +| 하수처리구역 | STAA | Sewage Treatment Area | +| 핵심성과지표 | KPI | Key Performance Indicator | +| 행정구역면적 | ADSTAR | Administrative District Area | +| 환경생태유량 | ENVFLW | Environmental Flow | +| 환경영향평가 | EIA | Environmental Impact Assessment | +| 공간정보데이터 | GEOM | (Data) Geometry | +| 국외반출승인종 | OEASP | Overseas Export Approval Species | +| 기초생활수급자 | ROBL | Recipients Of Basic Livelihood | +| 도로명상세주소 | | | +| 분원성대장균군 | FCFS | Fecal Coliforms | +| 사업자등록번호 | BRNO | Business Registration Number | +| 사회적협동조합 | SCCP | Social Cooperative | +| 생태계교란생물 | | | +| 스마트워크센터 | SWC | Smart Work Center | +| 식생자연도지수 | VNI | Vegetation Naturalness Index | +| 암모니아성질소 | AMNG | Ammonium Nitrogen | +| 암호화계좌번호 | ENACNO | Encrypted Account Number | +| 암호화비밀번호 | ENPSWD | Encrypted Password | +| 외국인등록번호 | FRNO | Foreigner Registration Number | +| 자동기상관측소 | AWS | Automatic Weather Station | +| 자동차등록번호 | VHRNO | Vehicle Registration Number | +| 전자세금계산서 | ETXIV | Electronic Tax Invoice | +| 지구온난화지수 | GWPTN | Global Warming Potential | +| 지상기상관측소 | MTRST | Meteorological Station | +| 철새도래지면적 | MBDHAR | Migratory Bird Habitat Area | +| 총트리할로메탄 | THMS | Total Trihalomethane | +| 탄소중립포인트 | CNPNT | Carbon Neutral Point | +| 트리클로로에탄 | TCRN | Trichloroethane | +| 표준지공시지가 | | | +| 하수미처리구역 | RSAA | Raw Sewage Area | +| 하수처리장면적 | STPAR | Sewage Treatment Plant Area | +| 한국십진분류법 | KDC | Korea Decimal Classification | +| 항공화물운송장 | AIRBL | Air Waybill | +| 국제적멸종위기종 | CSPCS | Cites Species | +| 국제표준도서번호 | ISBN | International Standard Book Number | +| 기초생활수급권자 | | | +| 기후에너지환경부 | MCEE | Ministry of Climate, Energy and Environment | +| 배출량산정계획서 | ECPD | Emission Computation Plan Document | +| 상쇄배출권전환량 | KCUCVT | KCUS Converted | +| 서식수변환경지수 | HRI | Haitat And Riparian Index | +| 서식지적합도지수 | HIS | Habitat Suitability Indexes | +| 석면함유가능물질 | ACM | Asbestos Containing Materials | +| 선행토양함수조건 | AMC | Antecedent Moisture Condition | +| 옥탄올물분배계수 | OWPC | Octanol-Water Partition Coefficient | +| 외부사업인증실적 | KOC | Korean Offset Credit | +| 우편번호일련번호 | | | +| 최소검출가능농도 | MDA | Minimum Detectable Activity | +| 한국표준산업분류 | KSIC | Korean Standard Industrial Classification | +| 행정정보공동이용 | ADINSR | Administrative Information Sharing | +| 화학적산소요구량 | COD | Chemical Oxygen Demand | +| 환경기초조사사업 | EBSP | Environmental Basis Survey Project | +| 휘발성유기화합물 | VOCS | Volatile Organic Compounds | +| 미국연방통신위원회 | FCC | Federal Communications Commission | +| 암호화법인등록번호 | ENCRNO | Encrypted Corporation Registration Number | +| 암호화주민등록번호 | ENRRNO | Encrypted Resident Registration Number | +| 개인정보수집이용동의 | PICUC | Personal Information Collection/Use Consent | +| 생물화학적산소요구량 | BOD | Biochemical Oxygen Demand | +| 생태계교란야생동식물 | | | +| 암호화사업자등록번호 | ENBRNO | Encrypted Business Registration Number | +| 저서성대형무척추동물 | BMCRIB | Benthic Macroinvertebrate | +| 국제표준연속간행물번호 | ISSN | International Standard Serial Number | +| 총생물화학적산소요구량 | TBOD | Total Biochemical Oxygen Demand | +| 1회섭취참고량 | RAFOS | Reference Amount For One Serving | +| 14세 | YO14 | 14 Years Old | +| 코로나19 | COVID | Covid19 | +| 차량2부제 | ATNDS | Alternate No-Driving System | +| 2차원 | DMS2 | Two Dimensions | +| 제3자 | TDPTY | Third Party | +| 제3채무자 | GRNS | Garnishee | +| 3차원 | DMS3 | Three Dimensions | +| 4대강 | FMRVR | Four Major Rivers | +| 오픈API | OPAPI | Open Application Programming Interface | +| API | API | Application Programming Interface | +| ARS | ARS | Automatic Response System | +| CAS | CAS | Chemical Abstract Service | +| CCTV | CCTV | Closed Circuit Television | +| CI | CI | Connecting Information | +| CMS | CMS | Cash Management Service | +| COP | COP | Community Of Practice | +| CP | CP | Capacity Parameter | +| CPU | CPU | Central Processing Unit | +| DB | | | +| DI | DI | Duplicated Joining Verification Information | +| DN | DN | Distinguish Name | +| DRM | DRM | Digital Rights Management | +| EAI | EAI | Enterprise Application Integration | +| e-mail | | | +| EMAIL | | | +| FAQ | FAQ | Frequently Asked Question | +| FAX번호 | | | +| FILE | | | +| G2B | G2B | Government-To-Business | +| GIS | GIS | Geographic Information System | +| GOTP | GOTP | Government One Time Password | +| GPKI | GPKI | Government Public Key Infrastructure | +| GPS | GPS | Global Positioning System | +| GVPN | GVPN | Government Virtual Private Network | +| HS | HSYS | Harmonized System | +| HSK | HSK | Harmonized System Korea | +| HTML | HTML | Hypertext Markup Language | +| ID | | | +| IEA | IEA | International Energy Agency | +| IP | IP | Internet Protocol | +| IPCC | IPCC | Intergovernmental Panel On Climate Change | +| ISBN | | | +| JSON | JSON | Javascript Object Notation | +| KTSN | KTSN | Korea Taxonomic Serial Number | +| LAN | LAN | Local Area Network | +| LULUCF | LULUCF | Land Use, Land Use Change And Forestry | +| MAC | MAC | Medium Access Control | +| MMS | MMS | Multimedia Messaging Service | +| MOU | | | +| NCBI | NCBI | National Center For Biotechnology Information | +| NULL | | | +| OCR | OCR | Optical Character Reader | +| OECD | OECD | Organization For Economic Cooperation And Development | +| PC | | | +| PDF | PDF | Portable Document Format | +| PG | PG | Payment Gateway | +| PK | | | +| POS | POS | Point Of Sales | +| QA | QA | Quality Assurance | +| QC | QC | Quality Control | +| QR코드 | QRCD | Quick Response Code | +| RFID | RFID | Radio Frequency Identification | +| RPA | RPA | Robotics Process Automation | +| RSS | RSS | Really Simple Syndication | +| RSSI | RSSI | Received Signal Strength Indication | +| SMS | SMS | Short Message Service | +| SNS | SNS | Social Networking Service | +| SQL | SQL | Structured Query Language | +| SSID | SSID | Service Set Identifier | +| SSL | SSL | Secure Sockets Layer | +| TMS | TMS | Tele Monitoring System | +| TV수신료 | TVSFE | TV Subscription Fee | +| UID | | | +| UPS | UPS | Uninterruptible Power Supply | +| URI | URI | Uniform Resource Identifier | +| URL | URL | Uniform Resource Locator | +| USB | USB | Universial Serial Bus | +| UUID | UUID | Universal Unique Identifier | +| VOC | VOC | Voice Of Customer | +| VOD | VOD | Video On Demand | +| WBS | WBS | Work Breakdown Structure | +| WRI | WRI | World Resource Institute | +| WSI | WSI | Water Safety Index | +| X좌표 | XCRD | X-Coordinate | +| XML | XML | Extensible Mark-Up Language | +| Y좌표 | YCRD | Y-Coordinate | +| Z좌표 | ZCRD | Z-Coordinate | + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18702cf33..f78691690 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,6 +105,9 @@ importers: prettier-plugin-tailwindcss: specifier: ^0.6.11 version: 0.6.14(prettier@3.7.4) + steiger: + specifier: ^0.5.11 + version: 0.5.11(typescript@5.9.3) tailwindcss: specifier: ^3.4.14 version: 3.4.19(yaml@2.8.2) @@ -10507,8 +10510,8 @@ snapshots: '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@2.6.1)) @@ -10528,7 +10531,7 @@ snapshots: eslint: 9.39.2(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@1.21.7)) eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@1.21.7)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.2(jiti@1.21.7)) @@ -10567,21 +10570,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - get-tsconfig: 4.13.0 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.15 - unrs-resolver: 1.11.1 - optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@1.21.7)): dependencies: '@nolyfill/is-core-module': 1.0.39 @@ -10593,7 +10581,7 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)) transitivePeerDependencies: - supports-color @@ -10623,17 +10611,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 @@ -10645,7 +10622,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.7)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@1.21.7)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -10674,35 +10651,6 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.39.2(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 From 26d01a7032689ea05b29bf86c39622bca8532698 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 10:49:33 +0900 Subject: [PATCH 03/39] =?UTF-8?q?[as]=20feat:=20=EC=B4=88=EA=B8=B0=20?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/.env.example | 8 ++--- apps/as/app/(with-base-layout)/layout.tsx | 35 ++++++++++++++++++++++ apps/as/app/(with-base-layout)/page.tsx | 9 ++++++ apps/as/app/globals.css | 26 +++++----------- apps/as/app/layout.tsx | 16 +++++++--- apps/as/app/page.tsx | 10 ------- apps/as/entities/menu/index.ts | 1 + apps/as/entities/menu/model/index.ts | 1 + apps/as/entities/menu/model/types.ts | 19 ++++++++++++ apps/as/package.json | 2 +- apps/as/shared/ui/button.tsx | 36 ----------------------- apps/as/shared/ui/index.ts | 2 +- apps/as/shared/ui/page-layout.tsx | 35 ++++++++++++++++++++++ apps/as/tailwind.config.ts | 4 +++ packages/common/components/package.json | 4 +-- 15 files changed, 131 insertions(+), 77 deletions(-) create mode 100644 apps/as/app/(with-base-layout)/layout.tsx create mode 100644 apps/as/app/(with-base-layout)/page.tsx delete mode 100644 apps/as/app/page.tsx create mode 100644 apps/as/entities/menu/index.ts create mode 100644 apps/as/entities/menu/model/index.ts create mode 100644 apps/as/entities/menu/model/types.ts delete mode 100644 apps/as/shared/ui/button.tsx create mode 100644 apps/as/shared/ui/page-layout.tsx diff --git a/apps/as/.env.example b/apps/as/.env.example index f5cfcfb89..b2d706024 100644 --- a/apps/as/.env.example +++ b/apps/as/.env.example @@ -1,5 +1,5 @@ # apps/as/shared/config/env.ts 참고 -NEXT_PUBLIC_PORT=3000 -NEXT_PUBLIC_PROXY_HOST=http://localhost:3000 -NEXT_PUBLIC_SITE_ID=AS -NEXT_PUBLIC_SERVER_API_URL=http://192.168.0.102:8000 +NEXT_PUBLIC_PORT= +NEXT_PUBLIC_PROXY_HOST= +NEXT_PUBLIC_SITE_ID= +NEXT_PUBLIC_SERVER_API_URL= diff --git a/apps/as/app/(with-base-layout)/layout.tsx b/apps/as/app/(with-base-layout)/layout.tsx new file mode 100644 index 000000000..fd8cee5bd --- /dev/null +++ b/apps/as/app/(with-base-layout)/layout.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { useCallback } from "react"; +import { usePathname, useRouter } from "next/navigation"; +import { useQueryClient } from "@tanstack/react-query"; +import { BaseLayout } from "@common/components"; +import type { MenuItem } from "@/entities/menu"; +import { PageLayout } from "@/shared/ui/page-layout"; + +export default function WithBaseLayout({ + children, +}: { + children: React.ReactNode; +}) { + const router = useRouter(); + const pathname = usePathname(); + const queryClient = useQueryClient(); + + const handleMenuClick = useCallback( + (item: MenuItem) => { + router.push(item.urlPath); + }, + [router], + ); + + return ( + + {children} + + ); +} diff --git a/apps/as/app/(with-base-layout)/page.tsx b/apps/as/app/(with-base-layout)/page.tsx new file mode 100644 index 000000000..e118e732e --- /dev/null +++ b/apps/as/app/(with-base-layout)/page.tsx @@ -0,0 +1,9 @@ +"use client"; + +export default function MainPage() { + return ( +
+

Home

+
+ ); +} diff --git a/apps/as/app/globals.css b/apps/as/app/globals.css index 13d40b892..60bc92fb6 100644 --- a/apps/as/app/globals.css +++ b/apps/as/app/globals.css @@ -1,27 +1,15 @@ +@import "@common/assets/styles/base.css"; +@import "@common/assets/styles/diveicon.css"; +@import "@common/components/index.css"; + @tailwind base; @tailwind components; @tailwind utilities; -:root { - --background: #ffffff; - --foreground: #171717; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - +html, body { color: var(--foreground); background: var(--background); - font-family: Arial, Helvetica, sans-serif; -} - -@layer utilities { - .text-balance { - text-wrap: balance; - } + font-family: var(--font-noto-sans-kr), sans-serif; + font-size: 10px; } diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index 719c143d3..d152e0da3 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,10 +1,18 @@ import type { Metadata } from "next"; +import { Noto_Sans_KR } from "next/font/google"; import { Providers } from "./providers"; import "./globals.css"; +const notoSansKR = Noto_Sans_KR({ + subsets: ["latin"], + weight: ["100", "300", "400", "500", "700", "900"], + display: "swap", + variable: "--font-noto-sans-kr", +}); + export const metadata: Metadata = { - title: "AS Application", - description: "Next.js application with FSD architecture", + title: "행정지원시스템", + description: "행정지원시스템", }; interface RootLayoutProps { @@ -13,8 +21,8 @@ interface RootLayoutProps { export default function RootLayout({ children }: RootLayoutProps) { return ( - - + + {children} diff --git a/apps/as/app/page.tsx b/apps/as/app/page.tsx deleted file mode 100644 index 7e739afaa..000000000 --- a/apps/as/app/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -export default function HomePage() { - return ( -
-
-

AS Application

-

Feature Sliced Design Architecture with Next.js

-
-
- ); -} diff --git a/apps/as/entities/menu/index.ts b/apps/as/entities/menu/index.ts new file mode 100644 index 000000000..03aed8131 --- /dev/null +++ b/apps/as/entities/menu/index.ts @@ -0,0 +1 @@ +export { type MenuItem } from "./model"; diff --git a/apps/as/entities/menu/model/index.ts b/apps/as/entities/menu/model/index.ts new file mode 100644 index 000000000..89ebe7381 --- /dev/null +++ b/apps/as/entities/menu/model/index.ts @@ -0,0 +1 @@ +export { type MenuItem } from "./types"; diff --git a/apps/as/entities/menu/model/types.ts b/apps/as/entities/menu/model/types.ts new file mode 100644 index 000000000..9692821e3 --- /dev/null +++ b/apps/as/entities/menu/model/types.ts @@ -0,0 +1,19 @@ +export interface MenuItem { + menuCd: number; + menuKornNm: string; + menuEngNm: string; + parentId: number | null; + sortSeq: number; + iconNm?: string; + children: MenuItem[] | null; + levelNo: number; + urlPath: string; + menuLnkgTypeCd: string; + menuLnkgSn: number; + menuPath: string; + qrcd: string; + useYn: string; + otptYn: string; + newWndwYn: string; + requiredUrlPath: boolean; +} diff --git a/apps/as/package.json b/apps/as/package.json index a39004940..fb27f8af7 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -33,4 +33,4 @@ "tailwindcss": "^3.4.14", "typescript": "^5.7.2" } -} +} \ No newline at end of file diff --git a/apps/as/shared/ui/button.tsx b/apps/as/shared/ui/button.tsx deleted file mode 100644 index 3d9fb0bf5..000000000 --- a/apps/as/shared/ui/button.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { ButtonHTMLAttributes, forwardRef } from "react"; - -interface ButtonProps extends ButtonHTMLAttributes { - variant?: "primary" | "secondary" | "outline"; - size?: "sm" | "md" | "lg"; -} - -export const Button = forwardRef( - ({ className = "", variant = "primary", size = "md", children, ...props }, ref) => { - const baseStyles = "rounded-md font-medium transition-colors focus:outline-none focus:ring-2"; - - const variantStyles = { - primary: "bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500", - secondary: "bg-gray-600 text-white hover:bg-gray-700 focus:ring-gray-500", - outline: "border border-gray-300 bg-transparent hover:bg-gray-50 focus:ring-gray-500", - }; - - const sizeStyles = { - sm: "px-3 py-1.5 text-sm", - md: "px-4 py-2 text-base", - lg: "px-6 py-3 text-lg", - }; - - return ( - - ); - }, -); - -Button.displayName = "Button"; diff --git a/apps/as/shared/ui/index.ts b/apps/as/shared/ui/index.ts index 812a8ab55..460542995 100644 --- a/apps/as/shared/ui/index.ts +++ b/apps/as/shared/ui/index.ts @@ -1 +1 @@ -export { Button } from "./button"; +export { PageLayout } from "./page-layout"; diff --git a/apps/as/shared/ui/page-layout.tsx b/apps/as/shared/ui/page-layout.tsx new file mode 100644 index 000000000..ecefc36bd --- /dev/null +++ b/apps/as/shared/ui/page-layout.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { PageTitle } from "@common/components"; + +const mockCurrentMenuInfo = { + menuCd: 0, + menuKornNm: "메인", + menuEngNm: "Main", + parentId: null, + sortSeq: 0, + children: null, + levelNo: 0, + urlPath: "/", + menuLnkgTypeCd: "", + menuLnkgSn: 0, + menuPath: "메인", + qrcd: "", + useYn: "Y", + otptYn: "Y", + newWndwYn: "N", + requiredUrlPath: false, +}; + +function PageLayout({ children }: { children: React.ReactNode }) { + const menuPaths = mockCurrentMenuInfo.menuPath.split(">").map((path) => path.trim()); + + return ( +
+ + {children} +
+ ); +} + +export { PageLayout }; diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts index 24811c1a4..ff6042e10 100644 --- a/apps/as/tailwind.config.ts +++ b/apps/as/tailwind.config.ts @@ -8,6 +8,7 @@ const config: Config = { "./features/**/*.{js,ts,jsx,tsx,mdx}", "./widgets/**/*.{js,ts,jsx,tsx,mdx}", "./app/**/*.{js,ts,jsx,tsx,mdx}", + "../../packages/common/components/dist/**/*.{js,ts,jsx,tsx,mdx}", ], theme: { extend: { @@ -15,6 +16,9 @@ const config: Config = { background: "var(--background)", foreground: "var(--foreground)", }, + fontFamily: { + sans: ["var(--font-noto-sans-kr)", "Noto Sans KR", "sans-serif"], + }, }, }, plugins: [], diff --git a/packages/common/components/package.json b/packages/common/components/package.json index 3cef3b0f0..bd06e3402 100644 --- a/packages/common/components/package.json +++ b/packages/common/components/package.json @@ -5,7 +5,7 @@ "sideEffects": false, "type": "module", "main": "./dist/index.js", - "module": "./dist/index.mjs", + "module": "./dist/index.js", "types": "./dist/index.d.ts", "files": [ "dist/**" @@ -13,7 +13,7 @@ "exports": { ".": { "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", + "import": "./dist/index.js", "require": "./dist/index.js" }, "./index.css": "./dist/index.css" From b34d131c1a91de04a32a17a0a4225f9d5247465d Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 11:17:25 +0900 Subject: [PATCH 04/39] =?UTF-8?q?[as]=20chore:=20tailwind=20preset=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/app/(with-base-layout)/layout.tsx | 6 +----- apps/as/tailwind.config.ts | 2 ++ apps/as/tsconfig.json | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/as/app/(with-base-layout)/layout.tsx b/apps/as/app/(with-base-layout)/layout.tsx index fd8cee5bd..1d182a0ee 100644 --- a/apps/as/app/(with-base-layout)/layout.tsx +++ b/apps/as/app/(with-base-layout)/layout.tsx @@ -7,11 +7,7 @@ import { BaseLayout } from "@common/components"; import type { MenuItem } from "@/entities/menu"; import { PageLayout } from "@/shared/ui/page-layout"; -export default function WithBaseLayout({ - children, -}: { - children: React.ReactNode; -}) { +export default function WithBaseLayout({ children }: { children: React.ReactNode }) { const router = useRouter(); const pathname = usePathname(); const queryClient = useQueryClient(); diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts index ff6042e10..c02405aca 100644 --- a/apps/as/tailwind.config.ts +++ b/apps/as/tailwind.config.ts @@ -1,6 +1,8 @@ import type { Config } from "tailwindcss"; +import presetConfig from "../../tailwind.config.preset"; const config: Config = { + presets: [presetConfig], content: [ "./pages/**/*.{js,ts,jsx,tsx,mdx}", "./shared/**/*.{js,ts,jsx,tsx,mdx}", diff --git a/apps/as/tsconfig.json b/apps/as/tsconfig.json index 1668155c8..15b023415 100644 --- a/apps/as/tsconfig.json +++ b/apps/as/tsconfig.json @@ -26,8 +26,8 @@ "@/features/*": ["./features/*"], "@/widgets/*": ["./widgets/*"], "@/pages/*": ["./pages/*"], - "@common/components": ["../../../packages/common/components/dist/"], - "@common/network": ["../../../packages/common/network/"] + "@common/components": ["../../packages/common/components/dist/"], + "@common/network": ["../../packages/common/network/"] } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], From 717732aad3bad05fb43c906a2d15287f278f6fe3 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 13:56:32 +0900 Subject: [PATCH 05/39] =?UTF-8?q?[as]=20feat:=20=EC=BF=A0=ED=82=A4=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/app/layout.tsx | 11 +++++++++-- apps/as/package.json | 2 ++ apps/as/shared/lib/cookie.ts | 22 ++++++++++++++++++++++ apps/as/shared/lib/index.ts | 1 + pnpm-lock.yaml | 6 ++++++ 5 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 apps/as/shared/lib/cookie.ts diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index d152e0da3..f08c67ca7 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,6 +1,9 @@ import type { Metadata } from "next"; +import { cookies } from "next/headers"; import { Noto_Sans_KR } from "next/font/google"; import { Providers } from "./providers"; +import { setCookie } from "@/shared/lib"; +import { SITE_ID } from "@/shared/config"; import "./globals.css"; const notoSansKR = Noto_Sans_KR({ @@ -19,9 +22,13 @@ interface RootLayoutProps { children: React.ReactNode; } -export default function RootLayout({ children }: RootLayoutProps) { +setCookie("site-id-key", SITE_ID); + +export default async function RootLayout({ children }: RootLayoutProps) { + const theme = (await cookies()).get("site-theme-key"); + return ( - + {children} diff --git a/apps/as/package.json b/apps/as/package.json index fb27f8af7..3806f73ee 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -19,11 +19,13 @@ "@tanstack/react-table": "^8.21.2", "axios": "^1.8.1", "dayjs": "^1.11.13", + "js-cookie": "^3.0.5", "next": "15.3.8", "react-hook-form": "^7.54.2", "zod": "^3.24.2" }, "devDependencies": { + "@types/js-cookie": "^3.0.6", "eslint": "^9.0.0", "eslint-config-next": "15.4.0", "postcss": "^8.4.49", diff --git a/apps/as/shared/lib/cookie.ts b/apps/as/shared/lib/cookie.ts new file mode 100644 index 000000000..6557cb81d --- /dev/null +++ b/apps/as/shared/lib/cookie.ts @@ -0,0 +1,22 @@ +import Cookies from "js-cookie"; + +export function getCookie(name: string): string | undefined { + if (typeof window === "undefined") { + return undefined; + } + return Cookies.get(name); +} + +export function setCookie(name: string, value: string, options?: Cookies.CookieAttributes): void { + if (typeof window === "undefined") { + return; + } + Cookies.set(name, value, options); +} + +export function removeCookie(name: string, options?: Cookies.CookieAttributes): void { + if (typeof window === "undefined") { + return; + } + Cookies.remove(name, options); +} diff --git a/apps/as/shared/lib/index.ts b/apps/as/shared/lib/index.ts index 51e9c2c5d..26a6d4551 100644 --- a/apps/as/shared/lib/index.ts +++ b/apps/as/shared/lib/index.ts @@ -1,2 +1,3 @@ export { queryClient } from "./query-client"; export { dayjs } from "./dayjs"; +export { getCookie, setCookie, removeCookie } from "./cookie"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f78691690..569437868 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,6 +80,9 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.19 + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 next: specifier: 15.3.8 version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -90,6 +93,9 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: + '@types/js-cookie': + specifier: ^3.0.6 + version: 3.0.6 eslint: specifier: ^9.0.0 version: 9.39.2(jiti@1.21.7) From 98d53fb4bdbe7fd12aff7ca5a6072f34c2f0305f Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 14:04:20 +0900 Subject: [PATCH 06/39] =?UTF-8?q?[=5Ftemplate,=20as]=20chore:=20middleware?= =?UTF-8?q?.ts=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/middleware.ts | 50 ++++++++++++++++++++++ apps/as/middleware.ts | 50 ++++++++++++++++++++++ pnpm-lock.yaml | 82 ++++++++++++++++++++++++++++++------ 3 files changed, 168 insertions(+), 14 deletions(-) create mode 100644 apps/_template/middleware.ts create mode 100644 apps/as/middleware.ts diff --git a/apps/_template/middleware.ts b/apps/_template/middleware.ts new file mode 100644 index 000000000..da09c5840 --- /dev/null +++ b/apps/_template/middleware.ts @@ -0,0 +1,50 @@ +import { NextRequest, NextResponse } from "next/server"; +import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config"; + +const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000"; + +// CSP 헤더 설정 함수 (img-src만) +function addSecurityHeaders(response: NextResponse): NextResponse { + response.headers.set("Content-Security-Policy", "img-src 'self' data: https: blob:;"); + return response; +} + +export function middleware(req: NextRequest) { + const pathname = req.nextUrl.pathname; + const searchParams = req.nextUrl.searchParams; + + const logMessages: string[] = [ + `[Middleware Request] ${new Date().toISOString()}`, + `[Environment]\n Mode: ${process.env.NODE_ENV}\n Port: ${PORT}\n Proxy Host: ${PROXY_HOST}\n Server API URL: ${SERVER_API_URL}\n Site ID: ${SITE_ID}`, + `[Request]\n Original Pathname: ${pathname}`, + ]; + + if (pathname.startsWith("/server")) { + const queryParams = searchParams.toString(); + const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${ + queryParams ? `?${queryParams}` : "" + }`; + + logMessages.push(` Rewritten URL: ${newUrl}`); + logMessages.push("\n--------------------------------\n"); + console.log(logMessages.join("\n")); + + const response = NextResponse.rewrite(new URL(newUrl)); + return addSecurityHeaders(response); + } + + // if (pathname === "/") { + // const response = NextResponse.redirect(new URL("/dashboard", req.url)); + // return addSecurityHeaders(response); + // } + + logMessages.push("\n--------------------------------\n"); + console.log(logMessages.join("\n")); + + const response = NextResponse.next(); + return addSecurityHeaders(response); +} + +export const config = { + matcher: ["/server/:path*", "/"], +}; diff --git a/apps/as/middleware.ts b/apps/as/middleware.ts new file mode 100644 index 000000000..da09c5840 --- /dev/null +++ b/apps/as/middleware.ts @@ -0,0 +1,50 @@ +import { NextRequest, NextResponse } from "next/server"; +import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config"; + +const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000"; + +// CSP 헤더 설정 함수 (img-src만) +function addSecurityHeaders(response: NextResponse): NextResponse { + response.headers.set("Content-Security-Policy", "img-src 'self' data: https: blob:;"); + return response; +} + +export function middleware(req: NextRequest) { + const pathname = req.nextUrl.pathname; + const searchParams = req.nextUrl.searchParams; + + const logMessages: string[] = [ + `[Middleware Request] ${new Date().toISOString()}`, + `[Environment]\n Mode: ${process.env.NODE_ENV}\n Port: ${PORT}\n Proxy Host: ${PROXY_HOST}\n Server API URL: ${SERVER_API_URL}\n Site ID: ${SITE_ID}`, + `[Request]\n Original Pathname: ${pathname}`, + ]; + + if (pathname.startsWith("/server")) { + const queryParams = searchParams.toString(); + const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${ + queryParams ? `?${queryParams}` : "" + }`; + + logMessages.push(` Rewritten URL: ${newUrl}`); + logMessages.push("\n--------------------------------\n"); + console.log(logMessages.join("\n")); + + const response = NextResponse.rewrite(new URL(newUrl)); + return addSecurityHeaders(response); + } + + // if (pathname === "/") { + // const response = NextResponse.redirect(new URL("/dashboard", req.url)); + // return addSecurityHeaders(response); + // } + + logMessages.push("\n--------------------------------\n"); + console.log(logMessages.join("\n")); + + const response = NextResponse.next(); + return addSecurityHeaders(response); +} + +export const config = { + matcher: ["/server/:path*", "/"], +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03c2fb60c..d7b788c19 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,11 +51,7 @@ importers: specifier: 2.4.2 version: 2.4.2 -<<<<<<< HEAD - apps/as: -======= - apps/(template): ->>>>>>> f0dcccaee9deebb48069ce1e382ca146be4ddcf9 + apps/_template: dependencies: '@common/assets': specifier: workspace:* @@ -84,12 +80,6 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.19 -<<<<<<< HEAD - js-cookie: - specifier: ^3.0.5 - version: 3.0.5 -======= ->>>>>>> f0dcccaee9deebb48069ce1e382ca146be4ddcf9 next: specifier: 15.3.8 version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -100,12 +90,76 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: -<<<<<<< HEAD + eslint: + specifier: ^9.0.0 + version: 9.39.2(jiti@2.6.1) + eslint-config-next: + specifier: 15.4.0 + version: 15.4.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + postcss: + specifier: ^8.4.49 + version: 8.5.6 + prettier: + specifier: ^3.4.2 + version: 3.7.4 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(prettier@3.7.4) + steiger: + specifier: ^0.5.11 + version: 0.5.11(typescript@5.9.3) + tailwindcss: + specifier: ^3.4.14 + version: 3.4.19(yaml@2.8.2) + typescript: + specifier: ^5.7.2 + version: 5.9.3 + + apps/as: + dependencies: + '@common/assets': + specifier: workspace:* + version: link:../../packages/common/assets + '@common/components': + specifier: workspace:* + version: link:../../packages/common/components + '@common/network': + specifier: workspace:* + version: link:../../packages/common/network + '@hookform/resolvers': + specifier: ^4.1.3 + version: 4.1.3(react-hook-form@7.68.0(react@19.2.3)) + '@tanstack/react-query': + specifier: ^5.75.5 + version: 5.90.12(react@19.2.3) + '@tanstack/react-query-devtools': + specifier: ^5.75.5 + version: 5.91.1(@tanstack/react-query@5.90.12(react@19.2.3))(react@19.2.3) + '@tanstack/react-table': + specifier: ^8.21.2 + version: 8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + axios: + specifier: ^1.8.1 + version: 1.8.1 + dayjs: + specifier: ^1.11.13 + version: 1.11.19 + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + next: + specifier: 15.3.8 + version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-hook-form: + specifier: ^7.54.2 + version: 7.68.0(react@19.2.3) + zod: + specifier: ^3.24.2 + version: 3.25.76 + devDependencies: '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 -======= ->>>>>>> f0dcccaee9deebb48069ce1e382ca146be4ddcf9 eslint: specifier: ^9.0.0 version: 9.39.2(jiti@1.21.7) From f788a1ae08c3c39e0ccfe3969277e1cb5e998144 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 14:11:21 +0900 Subject: [PATCH 07/39] =?UTF-8?q?fix:=20template=20name=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/_template/package.json b/apps/_template/package.json index fb27f8af7..f56c904c6 100644 --- a/apps/_template/package.json +++ b/apps/_template/package.json @@ -1,5 +1,5 @@ { - "name": "as", + "name": "template", "version": "0.1.0", "private": true, "scripts": { From 240311e540e5d605f44902573d67916e3a05688e Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 14:14:04 +0900 Subject: [PATCH 08/39] =?UTF-8?q?fix:=20pre-push=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .husky/pre-push | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.husky/pre-push b/.husky/pre-push index 82c73e102..5d858c3ae 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,3 +1,8 @@ #!/bin/sh BRANCH=$(git rev-parse --abbrev-ref HEAD) -pnpm turbo run build --filter="...[origin/$BRANCH]" +REMOTE_REF="origin/$BRANCH" +if git rev-parse --verify "$REMOTE_REF" >/dev/null 2>&1; then + pnpm turbo run build --filter="...[$REMOTE_REF]" +else + pnpm turbo run build +fi From bd53c17fecedb01a9433638ad5e4fb8c5f6d55b1 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 15:14:19 +0900 Subject: [PATCH 09/39] =?UTF-8?q?[as]=20refactor:=20=ED=8F=B4=EB=8D=94=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD(src)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/README.md | 66 +++++++++---------- apps/as/app/(with-base-layout)/layout.tsx | 36 ++-------- apps/as/app/(with-base-layout)/page.tsx | 10 +-- apps/as/app/layout.tsx | 4 +- apps/as/next-env.d.ts | 1 + apps/as/pages/README.md | 9 +++ apps/as/src/app/layouts/base-layout.tsx | 35 ++++++++++ .../app/providers/index.tsx} | 0 apps/as/{app => src/app/styles}/globals.css | 30 ++++----- apps/as/{ => src}/entities/README.md | 0 .../entities/instl-sncn/api/index.ts | 0 .../instl-sncn/api/instl-sncn-service-impl.ts | 0 .../entities/instl-sncn/api/queries.ts | 0 .../as/{ => src}/entities/instl-sncn/index.ts | 0 .../entities/instl-sncn/lib/format.ts | 0 .../entities/instl-sncn/lib/index.ts | 0 .../entities/instl-sncn/lib/validation.ts | 0 .../entities/instl-sncn/model/constants.ts | 0 .../entities/instl-sncn/model/index.ts | 0 .../instl-sncn/model/instl-sncn-service.ts | 0 .../entities/instl-sncn/model/types.ts | 0 apps/as/{ => src}/entities/menu/index.ts | 0 .../as/{ => src}/entities/menu/model/index.ts | 0 .../as/{ => src}/entities/menu/model/types.ts | 0 apps/as/{ => src}/features/README.md | 0 apps/as/src/pages/home/index.ts | 1 + apps/as/src/pages/home/ui/main-page.tsx | 9 +++ apps/as/{ => src}/shared/README.md | 0 apps/as/{ => src}/shared/api/client.ts | 0 apps/as/{ => src}/shared/api/index.ts | 0 apps/as/{ => src}/shared/config/env.ts | 0 apps/as/{ => src}/shared/config/index.ts | 0 apps/as/{ => src}/shared/lib/cookie.ts | 0 apps/as/{ => src}/shared/lib/dayjs.ts | 0 apps/as/{ => src}/shared/lib/index.ts | 0 apps/as/{ => src}/shared/lib/query-client.ts | 0 apps/as/{ => src}/shared/model/index.ts | 0 apps/as/{ => src}/shared/ui/index.ts | 0 apps/as/{ => src}/shared/ui/page-layout.tsx | 0 apps/as/{ => src}/widgets/README.md | 0 apps/as/tsconfig.json | 14 +--- 41 files changed, 112 insertions(+), 103 deletions(-) create mode 100644 apps/as/pages/README.md create mode 100644 apps/as/src/app/layouts/base-layout.tsx rename apps/as/{app/providers.tsx => src/app/providers/index.tsx} (100%) rename apps/as/{app => src/app/styles}/globals.css (95%) rename apps/as/{ => src}/entities/README.md (100%) rename apps/as/{ => src}/entities/instl-sncn/api/index.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/api/instl-sncn-service-impl.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/api/queries.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/index.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/lib/format.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/lib/index.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/lib/validation.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/model/constants.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/model/index.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/model/instl-sncn-service.ts (100%) rename apps/as/{ => src}/entities/instl-sncn/model/types.ts (100%) rename apps/as/{ => src}/entities/menu/index.ts (100%) rename apps/as/{ => src}/entities/menu/model/index.ts (100%) rename apps/as/{ => src}/entities/menu/model/types.ts (100%) rename apps/as/{ => src}/features/README.md (100%) create mode 100644 apps/as/src/pages/home/index.ts create mode 100644 apps/as/src/pages/home/ui/main-page.tsx rename apps/as/{ => src}/shared/README.md (100%) rename apps/as/{ => src}/shared/api/client.ts (100%) rename apps/as/{ => src}/shared/api/index.ts (100%) rename apps/as/{ => src}/shared/config/env.ts (100%) rename apps/as/{ => src}/shared/config/index.ts (100%) rename apps/as/{ => src}/shared/lib/cookie.ts (100%) rename apps/as/{ => src}/shared/lib/dayjs.ts (100%) rename apps/as/{ => src}/shared/lib/index.ts (100%) rename apps/as/{ => src}/shared/lib/query-client.ts (100%) rename apps/as/{ => src}/shared/model/index.ts (100%) rename apps/as/{ => src}/shared/ui/index.ts (100%) rename apps/as/{ => src}/shared/ui/page-layout.tsx (100%) rename apps/as/{ => src}/widgets/README.md (100%) diff --git a/apps/as/README.md b/apps/as/README.md index 46a8536a5..79d0b2e2a 100644 --- a/apps/as/README.md +++ b/apps/as/README.md @@ -13,46 +13,40 @@ Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 - **HTTP 클라이언트**: Axios - **날짜 처리**: Day.js -## 프로젝트 구조 (FSD) +## 프로젝트 구조 (FSD + Next.js App Router) -이 프로젝트는 **Feature-Sliced Design v2.1**을 따르며, 계층적 아키텍처로 구성되어 있습니다. +이 프로젝트는 **Feature-Sliced Design v2.1**과 **FSD 공식 Next.js 가이드**에 맞춰 구성되어 있습니다. Next.js `app/`은 라우트만 담당하고, 실제 레이어는 `src/` 아래에 있습니다. ``` as/ -├── app/ # App 레이어 (Next.js App Router) -│ ├── (routes)/ # 라우트 구조 -│ ├── layout.tsx # 루트 레이아웃 -│ ├── page.tsx # 홈 페이지 -│ ├── globals.css # 글로벌 스타일 -│ └── providers.tsx # 전역 providers +├── app/ # Next.js App Router (루트) — 라우트·레이아웃 진입점만 +│ ├── layout.tsx # 루트 레이아웃 (src/app에서 providers, styles import) +│ └── (with-base-layout)/ +│ ├── layout.tsx # BaseLayout 래퍼 (src/app/layouts에서 import) +│ └── page.tsx # re-export: export { MainPage as default } from '@/pages/home' │ -├── widgets/ # Widgets 레이어 -│ └── [widget-name]/ # 큰 독립적 UI 블록 (여러 페이지에서 재사용) -│ ├── ui/ -│ ├── model/ -│ └── index.ts +├── pages/ # 빈 폴더 + README (Next.js가 src/pages를 Pages Router로 쓰지 않도록) +│ └── README.md │ -├── features/ # Features 레이어 -│ └── [feature-name]/ # 사용자 상호작용 기능 (여러 페이지에서 재사용) -│ ├── ui/ -│ ├── api/ -│ ├── model/ -│ └── index.ts -│ -├── entities/ # Entities 레이어 -│ └── [entity-name]/ # 비즈니스 엔티티 (User, Product 등) -│ ├── model/ -│ ├── api/ -│ ├── ui/ -│ └── index.ts -│ -└── shared/ # Shared 레이어 - ├── ui/ # UI Kit (비즈니스 로직 없는 공통 컴포넌트) - ├── api/ # API 클라이언트 설정 - ├── lib/ # 내부 라이브러리 (dates, colors 등) - ├── config/ # 환경 설정, feature flags - ├── types/ # 공통 타입 정의 - └── routes/ # 라우트 상수 +└── src/ # FSD 레이어 (실제 코드) + ├── app/ # App 레이어 (슬라이스 없음, 세그먼트만) + │ ├── providers/ # 전역 Providers (QueryClient 등) + │ ├── styles/ # 글로벌 스타일 (globals.css) + │ └── layouts/ # 공통 레이아웃 컴포넌트 (BaseLayoutWrapper) + │ + ├── pages/ # Pages 레이어 (페이지 슬라이스) + │ └── home/ + │ ├── ui/ + │ └── index.ts # Public API + │ + ├── widgets/ # Widgets 레이어 + ├── features/ # Features 레이어 + ├── entities/ # Entities 레이어 + └── shared/ # Shared 레이어 + ├── ui/ + ├── api/ + ├── lib/ + └── config/ ``` ### 계층 구조 이해하기 @@ -86,10 +80,10 @@ shared/ ↓ 가장 낮은 책임, 의존성 없음 - **특징**: 슬라이스가 없고 세그먼트로만 구성 - **의존성**: 모든 하위 레이어 사용 가능 -### 2. Pages (app 디렉토리) +### 2. Pages (src/pages) - **목적**: 웹사이트나 애플리케이션을 구성하는 페이지/화면 - **내용**: 페이지 UI, 로딩 상태, 에러 바운더리, 데이터 fetching -- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능) +- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능). Next.js `app/`의 route 파일에서 re-export - **의존성**: `widgets`, `features`, `entities`, `shared` 사용 가능 > 💡 **FSD v2.1 권장사항**: "pages-first" 접근 방식을 따라, 재사용되지 않는 큰 UI 블록과 비즈니스 로직은 페이지 슬라이스에 유지하세요. diff --git a/apps/as/app/(with-base-layout)/layout.tsx b/apps/as/app/(with-base-layout)/layout.tsx index 1d182a0ee..24e6e7276 100644 --- a/apps/as/app/(with-base-layout)/layout.tsx +++ b/apps/as/app/(with-base-layout)/layout.tsx @@ -1,31 +1,9 @@ -"use client"; +import { BaseLayoutWrapper } from "@/app/layouts/base-layout"; -import { useCallback } from "react"; -import { usePathname, useRouter } from "next/navigation"; -import { useQueryClient } from "@tanstack/react-query"; -import { BaseLayout } from "@common/components"; -import type { MenuItem } from "@/entities/menu"; -import { PageLayout } from "@/shared/ui/page-layout"; - -export default function WithBaseLayout({ children }: { children: React.ReactNode }) { - const router = useRouter(); - const pathname = usePathname(); - const queryClient = useQueryClient(); - - const handleMenuClick = useCallback( - (item: MenuItem) => { - router.push(item.urlPath); - }, - [router], - ); - - return ( - - {children} - - ); +interface WithBaseLayoutProps { + children: React.ReactNode; +} + +export default function WithBaseLayout({ children }: WithBaseLayoutProps) { + return {children}; } diff --git a/apps/as/app/(with-base-layout)/page.tsx b/apps/as/app/(with-base-layout)/page.tsx index e118e732e..82a918b59 100644 --- a/apps/as/app/(with-base-layout)/page.tsx +++ b/apps/as/app/(with-base-layout)/page.tsx @@ -1,9 +1 @@ -"use client"; - -export default function MainPage() { - return ( -
-

Home

-
- ); -} +export { MainPage as default } from "@/pages/home"; diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index f08c67ca7..05858ffe8 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,10 +1,10 @@ import type { Metadata } from "next"; import { cookies } from "next/headers"; import { Noto_Sans_KR } from "next/font/google"; -import { Providers } from "./providers"; +import { Providers } from "@/app/providers"; import { setCookie } from "@/shared/lib"; import { SITE_ID } from "@/shared/config"; -import "./globals.css"; +import "@/app/styles/globals.css"; const notoSansKR = Noto_Sans_KR({ subsets: ["latin"], diff --git a/apps/as/next-env.d.ts b/apps/as/next-env.d.ts index 1b3be0840..3cd7048ed 100644 --- a/apps/as/next-env.d.ts +++ b/apps/as/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/as/pages/README.md b/apps/as/pages/README.md new file mode 100644 index 000000000..287ea7ddb --- /dev/null +++ b/apps/as/pages/README.md @@ -0,0 +1,9 @@ +# 이 폴더는 비워 둡니다 (FSD + Next.js App Router) + +Next.js가 `src/pages`를 **Pages Router**용 `pages` 디렉터리로 인식하지 않도록, +프로젝트 루트에 **빈 `pages` 폴더**를 두는 것이 FSD 공식 가이드 권장사항입니다. + +- 실제 페이지(FSD Pages 레이어)는 **`src/pages`**에 있습니다. +- Next.js 라우트는 **`app/`** 에서 `src/pages`를 re-export 하는 방식으로 연결됩니다. + +[Feature-Sliced Design - Usage with Next.js (App Router)](https://feature-sliced.design/docs/guides/tech/with-nextjs) diff --git a/apps/as/src/app/layouts/base-layout.tsx b/apps/as/src/app/layouts/base-layout.tsx new file mode 100644 index 000000000..72b95709f --- /dev/null +++ b/apps/as/src/app/layouts/base-layout.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { useCallback } from "react"; +import { usePathname, useRouter } from "next/navigation"; +import { useQueryClient } from "@tanstack/react-query"; +import { BaseLayout } from "@common/components"; +import type { MenuItem } from "@/entities/menu"; +import { PageLayout } from "@/shared/ui/page-layout"; + +interface BaseLayoutWrapperProps { + children: React.ReactNode; +} + +export function BaseLayoutWrapper({ children }: BaseLayoutWrapperProps) { + const router = useRouter(); + const pathname = usePathname(); + const queryClient = useQueryClient(); + + const handleMenuClick = useCallback( + (item: MenuItem) => { + router.push(item.urlPath); + }, + [router], + ); + + return ( + + {children} + + ); +} diff --git a/apps/as/app/providers.tsx b/apps/as/src/app/providers/index.tsx similarity index 100% rename from apps/as/app/providers.tsx rename to apps/as/src/app/providers/index.tsx diff --git a/apps/as/app/globals.css b/apps/as/src/app/styles/globals.css similarity index 95% rename from apps/as/app/globals.css rename to apps/as/src/app/styles/globals.css index 60bc92fb6..2b1b139cf 100644 --- a/apps/as/app/globals.css +++ b/apps/as/src/app/styles/globals.css @@ -1,15 +1,15 @@ -@import "@common/assets/styles/base.css"; -@import "@common/assets/styles/diveicon.css"; -@import "@common/components/index.css"; - -@tailwind base; -@tailwind components; -@tailwind utilities; - -html, -body { - color: var(--foreground); - background: var(--background); - font-family: var(--font-noto-sans-kr), sans-serif; - font-size: 10px; -} +@import "@common/assets/styles/base.css"; +@import "@common/assets/styles/diveicon.css"; +@import "@common/components/index.css"; + +@tailwind base; +@tailwind components; +@tailwind utilities; + +html, +body { + color: var(--foreground); + background: var(--background); + font-family: var(--font-noto-sans-kr), sans-serif; + font-size: 10px; +} diff --git a/apps/as/entities/README.md b/apps/as/src/entities/README.md similarity index 100% rename from apps/as/entities/README.md rename to apps/as/src/entities/README.md diff --git a/apps/as/entities/instl-sncn/api/index.ts b/apps/as/src/entities/instl-sncn/api/index.ts similarity index 100% rename from apps/as/entities/instl-sncn/api/index.ts rename to apps/as/src/entities/instl-sncn/api/index.ts diff --git a/apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts b/apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts similarity index 100% rename from apps/as/entities/instl-sncn/api/instl-sncn-service-impl.ts rename to apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts diff --git a/apps/as/entities/instl-sncn/api/queries.ts b/apps/as/src/entities/instl-sncn/api/queries.ts similarity index 100% rename from apps/as/entities/instl-sncn/api/queries.ts rename to apps/as/src/entities/instl-sncn/api/queries.ts diff --git a/apps/as/entities/instl-sncn/index.ts b/apps/as/src/entities/instl-sncn/index.ts similarity index 100% rename from apps/as/entities/instl-sncn/index.ts rename to apps/as/src/entities/instl-sncn/index.ts diff --git a/apps/as/entities/instl-sncn/lib/format.ts b/apps/as/src/entities/instl-sncn/lib/format.ts similarity index 100% rename from apps/as/entities/instl-sncn/lib/format.ts rename to apps/as/src/entities/instl-sncn/lib/format.ts diff --git a/apps/as/entities/instl-sncn/lib/index.ts b/apps/as/src/entities/instl-sncn/lib/index.ts similarity index 100% rename from apps/as/entities/instl-sncn/lib/index.ts rename to apps/as/src/entities/instl-sncn/lib/index.ts diff --git a/apps/as/entities/instl-sncn/lib/validation.ts b/apps/as/src/entities/instl-sncn/lib/validation.ts similarity index 100% rename from apps/as/entities/instl-sncn/lib/validation.ts rename to apps/as/src/entities/instl-sncn/lib/validation.ts diff --git a/apps/as/entities/instl-sncn/model/constants.ts b/apps/as/src/entities/instl-sncn/model/constants.ts similarity index 100% rename from apps/as/entities/instl-sncn/model/constants.ts rename to apps/as/src/entities/instl-sncn/model/constants.ts diff --git a/apps/as/entities/instl-sncn/model/index.ts b/apps/as/src/entities/instl-sncn/model/index.ts similarity index 100% rename from apps/as/entities/instl-sncn/model/index.ts rename to apps/as/src/entities/instl-sncn/model/index.ts diff --git a/apps/as/entities/instl-sncn/model/instl-sncn-service.ts b/apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts similarity index 100% rename from apps/as/entities/instl-sncn/model/instl-sncn-service.ts rename to apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts diff --git a/apps/as/entities/instl-sncn/model/types.ts b/apps/as/src/entities/instl-sncn/model/types.ts similarity index 100% rename from apps/as/entities/instl-sncn/model/types.ts rename to apps/as/src/entities/instl-sncn/model/types.ts diff --git a/apps/as/entities/menu/index.ts b/apps/as/src/entities/menu/index.ts similarity index 100% rename from apps/as/entities/menu/index.ts rename to apps/as/src/entities/menu/index.ts diff --git a/apps/as/entities/menu/model/index.ts b/apps/as/src/entities/menu/model/index.ts similarity index 100% rename from apps/as/entities/menu/model/index.ts rename to apps/as/src/entities/menu/model/index.ts diff --git a/apps/as/entities/menu/model/types.ts b/apps/as/src/entities/menu/model/types.ts similarity index 100% rename from apps/as/entities/menu/model/types.ts rename to apps/as/src/entities/menu/model/types.ts diff --git a/apps/as/features/README.md b/apps/as/src/features/README.md similarity index 100% rename from apps/as/features/README.md rename to apps/as/src/features/README.md diff --git a/apps/as/src/pages/home/index.ts b/apps/as/src/pages/home/index.ts new file mode 100644 index 000000000..d11882ce5 --- /dev/null +++ b/apps/as/src/pages/home/index.ts @@ -0,0 +1 @@ +export { MainPage } from "./ui/main-page"; diff --git a/apps/as/src/pages/home/ui/main-page.tsx b/apps/as/src/pages/home/ui/main-page.tsx new file mode 100644 index 000000000..0370d5814 --- /dev/null +++ b/apps/as/src/pages/home/ui/main-page.tsx @@ -0,0 +1,9 @@ +"use client"; + +export function MainPage() { + return ( +
+

Home

+
+ ); +} diff --git a/apps/as/shared/README.md b/apps/as/src/shared/README.md similarity index 100% rename from apps/as/shared/README.md rename to apps/as/src/shared/README.md diff --git a/apps/as/shared/api/client.ts b/apps/as/src/shared/api/client.ts similarity index 100% rename from apps/as/shared/api/client.ts rename to apps/as/src/shared/api/client.ts diff --git a/apps/as/shared/api/index.ts b/apps/as/src/shared/api/index.ts similarity index 100% rename from apps/as/shared/api/index.ts rename to apps/as/src/shared/api/index.ts diff --git a/apps/as/shared/config/env.ts b/apps/as/src/shared/config/env.ts similarity index 100% rename from apps/as/shared/config/env.ts rename to apps/as/src/shared/config/env.ts diff --git a/apps/as/shared/config/index.ts b/apps/as/src/shared/config/index.ts similarity index 100% rename from apps/as/shared/config/index.ts rename to apps/as/src/shared/config/index.ts diff --git a/apps/as/shared/lib/cookie.ts b/apps/as/src/shared/lib/cookie.ts similarity index 100% rename from apps/as/shared/lib/cookie.ts rename to apps/as/src/shared/lib/cookie.ts diff --git a/apps/as/shared/lib/dayjs.ts b/apps/as/src/shared/lib/dayjs.ts similarity index 100% rename from apps/as/shared/lib/dayjs.ts rename to apps/as/src/shared/lib/dayjs.ts diff --git a/apps/as/shared/lib/index.ts b/apps/as/src/shared/lib/index.ts similarity index 100% rename from apps/as/shared/lib/index.ts rename to apps/as/src/shared/lib/index.ts diff --git a/apps/as/shared/lib/query-client.ts b/apps/as/src/shared/lib/query-client.ts similarity index 100% rename from apps/as/shared/lib/query-client.ts rename to apps/as/src/shared/lib/query-client.ts diff --git a/apps/as/shared/model/index.ts b/apps/as/src/shared/model/index.ts similarity index 100% rename from apps/as/shared/model/index.ts rename to apps/as/src/shared/model/index.ts diff --git a/apps/as/shared/ui/index.ts b/apps/as/src/shared/ui/index.ts similarity index 100% rename from apps/as/shared/ui/index.ts rename to apps/as/src/shared/ui/index.ts diff --git a/apps/as/shared/ui/page-layout.tsx b/apps/as/src/shared/ui/page-layout.tsx similarity index 100% rename from apps/as/shared/ui/page-layout.tsx rename to apps/as/src/shared/ui/page-layout.tsx diff --git a/apps/as/widgets/README.md b/apps/as/src/widgets/README.md similarity index 100% rename from apps/as/widgets/README.md rename to apps/as/src/widgets/README.md diff --git a/apps/as/tsconfig.json b/apps/as/tsconfig.json index 15b023415..8428fd5c2 100644 --- a/apps/as/tsconfig.json +++ b/apps/as/tsconfig.json @@ -13,19 +13,9 @@ "isolatedModules": true, "jsx": "preserve", "incremental": true, - "plugins": [ - { - "name": "next" - } - ], + "plugins": [{ "name": "next" }], "paths": { - "@/*": ["./*"], - "@/app/*": ["./app/*"], - "@/shared/*": ["./shared/*"], - "@/entities/*": ["./entities/*"], - "@/features/*": ["./features/*"], - "@/widgets/*": ["./widgets/*"], - "@/pages/*": ["./pages/*"], + "@/*": ["./src/*"], "@common/components": ["../../packages/common/components/dist/"], "@common/network": ["../../packages/common/network/"] } From b7e343b24f8ecb0ff19537e9fa3cc771f3013f61 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 26 Feb 2026 15:31:22 +0900 Subject: [PATCH 10/39] =?UTF-8?q?[=5Ftemplate]=20refactor:=20=ED=8F=B4?= =?UTF-8?q?=EB=8D=94=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD(src)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/README.md | 149 ++++++------------ .../app/(with-base-layout)/layout.tsx | 41 ++--- .../_template/app/(with-base-layout)/page.tsx | 10 +- apps/_template/app/layout.tsx | 4 +- apps/{as => _template}/pages/README.md | 18 +-- .../_template/src/app/layouts/base-layout.tsx | 35 ++++ .../app/providers/index.tsx} | 36 ++--- .../{app => src/app/styles}/globals.css | 0 apps/_template/{ => src}/entities/README.md | 0 .../{ => src}/entities/menu/index.ts | 0 .../{ => src}/entities/menu/model/types.ts | 0 apps/_template/{ => src}/features/README.md | 0 .../{as => _template}/src/pages/home/index.ts | 2 +- .../src/pages/home/ui/main-page.tsx | 18 +-- apps/_template/{ => src}/shared/README.md | 0 apps/_template/{ => src}/shared/api/client.ts | 0 apps/_template/{ => src}/shared/api/index.ts | 0 apps/_template/{ => src}/shared/config/env.ts | 0 .../{ => src}/shared/config/index.ts | 0 apps/_template/{ => src}/shared/lib/dayjs.ts | 0 apps/_template/{ => src}/shared/lib/index.ts | 0 .../{ => src}/shared/lib/query-client.ts | 0 .../_template/{ => src}/shared/model/index.ts | 0 apps/_template/{ => src}/shared/ui/index.ts | 0 .../{ => src}/shared/ui/page-layout.tsx | 0 apps/_template/{ => src}/widgets/README.md | 0 apps/_template/tsconfig.json | 8 +- 27 files changed, 130 insertions(+), 191 deletions(-) rename apps/{as => _template}/pages/README.md (98%) create mode 100644 apps/_template/src/app/layouts/base-layout.tsx rename apps/_template/{app/providers.tsx => src/app/providers/index.tsx} (96%) rename apps/_template/{app => src/app/styles}/globals.css (100%) rename apps/_template/{ => src}/entities/README.md (100%) rename apps/_template/{ => src}/entities/menu/index.ts (100%) rename apps/_template/{ => src}/entities/menu/model/types.ts (100%) rename apps/_template/{ => src}/features/README.md (100%) rename apps/{as => _template}/src/pages/home/index.ts (97%) rename apps/{as => _template}/src/pages/home/ui/main-page.tsx (95%) rename apps/_template/{ => src}/shared/README.md (100%) rename apps/_template/{ => src}/shared/api/client.ts (100%) rename apps/_template/{ => src}/shared/api/index.ts (100%) rename apps/_template/{ => src}/shared/config/env.ts (100%) rename apps/_template/{ => src}/shared/config/index.ts (100%) rename apps/_template/{ => src}/shared/lib/dayjs.ts (100%) rename apps/_template/{ => src}/shared/lib/index.ts (100%) rename apps/_template/{ => src}/shared/lib/query-client.ts (100%) rename apps/_template/{ => src}/shared/model/index.ts (100%) rename apps/_template/{ => src}/shared/ui/index.ts (100%) rename apps/_template/{ => src}/shared/ui/page-layout.tsx (100%) rename apps/_template/{ => src}/widgets/README.md (100%) diff --git a/apps/_template/README.md b/apps/_template/README.md index 7e14528f8..c48c1534a 100644 --- a/apps/_template/README.md +++ b/apps/_template/README.md @@ -1,4 +1,4 @@ -# AS Application +# Template Application Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 @@ -13,46 +13,40 @@ Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 - **HTTP 클라이언트**: Axios - **날짜 처리**: Day.js -## 프로젝트 구조 (FSD) +## 프로젝트 구조 (FSD + Next.js App Router) -이 프로젝트는 **Feature-Sliced Design v2.1**을 따르며, 계층적 아키텍처로 구성되어 있습니다. +이 프로젝트는 **Feature-Sliced Design v2.1**과 **FSD 공식 Next.js 가이드**에 맞춰 구성되어 있습니다. Next.js `app/`은 라우트만 담당하고, 실제 레이어는 `src/` 아래에 있습니다. ``` -as/ -├── app/ # App 레이어 (Next.js App Router) -│ ├── (routes)/ # 라우트 구조 -│ ├── layout.tsx # 루트 레이아웃 -│ ├── page.tsx # 홈 페이지 -│ ├── globals.css # 글로벌 스타일 -│ └── providers.tsx # 전역 providers +_template/ +├── app/ # Next.js App Router (루트) — 라우트·레이아웃 진입점만 +│ ├── layout.tsx # 루트 레이아웃 (src/app에서 providers, styles import) +│ └── (with-base-layout)/ +│ ├── layout.tsx # BaseLayout 래퍼 (src/app/layouts에서 import) +│ └── page.tsx # re-export: export { MainPage as default } from '@/pages/home' │ -├── widgets/ # Widgets 레이어 -│ └── [widget-name]/ # 큰 독립적 UI 블록 (여러 페이지에서 재사용) -│ ├── ui/ -│ ├── model/ -│ └── index.ts +├── pages/ # 빈 폴더 + README (Next.js가 src/pages를 Pages Router로 쓰지 않도록) +│ └── README.md │ -├── features/ # Features 레이어 -│ └── [feature-name]/ # 사용자 상호작용 기능 (여러 페이지에서 재사용) -│ ├── ui/ -│ ├── api/ -│ ├── model/ -│ └── index.ts -│ -├── entities/ # Entities 레이어 -│ └── [entity-name]/ # 비즈니스 엔티티 (User, Product 등) -│ ├── model/ -│ ├── api/ -│ ├── ui/ -│ └── index.ts -│ -└── shared/ # Shared 레이어 - ├── ui/ # UI Kit (비즈니스 로직 없는 공통 컴포넌트) - ├── api/ # API 클라이언트 설정 - ├── lib/ # 내부 라이브러리 (dates, colors 등) - ├── config/ # 환경 설정, feature flags - ├── types/ # 공통 타입 정의 - └── routes/ # 라우트 상수 +└── src/ # FSD 레이어 (실제 코드) + ├── app/ # App 레이어 (슬라이스 없음, 세그먼트만) + │ ├── providers/ # 전역 Providers (QueryClient 등) + │ ├── styles/ # 글로벌 스타일 (globals.css) + │ └── layouts/ # 공통 레이아웃 컴포넌트 (BaseLayoutWrapper) + │ + ├── pages/ # Pages 레이어 (페이지 슬라이스) + │ └── home/ + │ ├── ui/ + │ └── index.ts # Public API + │ + ├── widgets/ # Widgets 레이어 + ├── features/ # Features 레이어 + ├── entities/ # Entities 레이어 + └── shared/ # Shared 레이어 + ├── ui/ + ├── api/ + ├── lib/ + └── config/ ``` ### 계층 구조 이해하기 @@ -86,10 +80,10 @@ shared/ ↓ 가장 낮은 책임, 의존성 없음 - **특징**: 슬라이스가 없고 세그먼트로만 구성 - **의존성**: 모든 하위 레이어 사용 가능 -### 2. Pages (app 디렉토리) +### 2. Pages (src/pages) - **목적**: 웹사이트나 애플리케이션을 구성하는 페이지/화면 - **내용**: 페이지 UI, 로딩 상태, 에러 바운더리, 데이터 fetching -- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능) +- **특징**: 한 페이지당 한 슬라이스 (유사한 페이지는 그룹화 가능). Next.js `app/`의 route 파일에서 re-export - **의존성**: `widgets`, `features`, `entities`, `shared` 사용 가능 > 💡 **FSD v2.1 권장사항**: "pages-first" 접근 방식을 따라, 재사용되지 않는 큰 UI 블록과 비즈니스 로직은 페이지 슬라이스에 유지하세요. @@ -118,29 +112,6 @@ shared/ ↓ 가장 낮은 책임, 의존성 없음 - **특징**: 비즈니스 로직 없음, 슬라이스가 없고 세그먼트로만 구성 - **의존성**: 외부 라이브러리만 사용 가능 (다른 레이어 불가) -## 레이어 간 Import 규칙 - -> **핵심 규칙**: 슬라이스 내의 모듈(파일)은 **오직 하위 레이어**에 있는 다른 슬라이스만 import할 수 있습니다. - -예시: -- `features/auth-login/ui/form.tsx`는 `entities/user`와 `shared/ui`를 import 가능 -- 하지만 다른 `features/post-create`나 상위 레이어인 `widgets`는 import 불가 -- 같은 슬라이스 내부(`features/auth-login/`)의 다른 파일들은 자유롭게 import 가능 - -## Public API 규칙 - -> **슬라이스 외부의 모듈은 슬라이스의 Public API만 참조할 수 있으며, 내부 파일 구조에 직접 접근할 수 없습니다.** - -모든 슬라이스(및 슬라이스가 없는 레이어의 세그먼트)는 반드시 `index.ts`를 통해 Public API를 정의해야 합니다. - -```typescript -// ✅ 올바른 import -import { LoginForm } from 'features/auth-login'; - -// ❌ 잘못된 import (내부 구조 직접 접근) -import { LoginForm } from 'features/auth-login/ui/login-form'; -``` - ## 시작하기 ```bash @@ -174,16 +145,16 @@ NEXT_PUBLIC_API_URL=http://localhost:3000/api ```typescript // ✅ 올바른 import (하위 레이어) // features/auth-login/ui/form.tsx -import { User } from 'entities/user'; -import { Button } from 'shared/ui/button'; +import { User } from "entities/user"; +import { Button } from "shared/ui/button"; // ❌ 잘못된 import (같은 레이어) // features/auth-login/ui/form.tsx -import { PostForm } from 'features/post-create'; // 금지! +import { PostForm } from "features/post-create"; // 금지! // ❌ 잘못된 import (상위 레이어) // features/auth-login/ui/form.tsx -import { Header } from 'widgets/header'; // 금지! +import { Header } from "widgets/header"; // 금지! ``` ### 2. Public API 규칙 @@ -192,10 +163,10 @@ import { Header } from 'widgets/header'; // 금지! ```typescript // ✅ 올바른 import (Public API 사용) -import { LoginForm } from 'features/auth-login'; +import { LoginForm } from "features/auth-login"; // ❌ 잘못된 import (내부 구조 직접 접근) -import { LoginForm } from 'features/auth-login/ui/login-form'; +import { LoginForm } from "features/auth-login/ui/login-form"; ``` **Public API 작성 시 주의사항**: @@ -205,44 +176,12 @@ import { LoginForm } from 'features/auth-login/ui/login-form'; ```typescript // ❌ 나쁜 예시 -export * from './ui/Comment'; -export * from './model/comments'; +export * from "./ui/Comment"; +export * from "./model/comments"; // ✅ 좋은 예시 -export { Comment } from './ui/comment'; -export { CommentForm } from './ui/comment-form'; -export { useComments } from './model/use-comments'; -export type { Comment, CommentFormData } from './model/types'; -``` - -### 3. 슬라이스 독립성 - -- **Zero Coupling**: 같은 레이어의 슬라이스들은 서로 독립적이어야 합니다 -- **High Cohesion**: 슬라이스는 주요 목표와 관련된 대부분의 코드를 포함해야 합니다 -- 예외: Entities 레이어에서 필요한 경우 `@x` 표기법으로 cross-import 가능 - -### 4. 세그먼트 명명 규칙 - -세그먼트 이름은 **목적**을 설명해야 하며, **본질**을 설명하면 안 됩니다: - -- ❌ **나쁜 이름**: `components`, `hooks`, `types` (무엇인지만 설명) -- ✅ **좋은 이름**: `ui`, `api`, `model`, `lib` (왜 있는지 설명) - -## 코드 규칙 - -- TypeScript 사용 (strict mode) -- 함수형 컴포넌트 사용 -- Named exports 선호 -- Tailwind CSS 사용 -- ESLint + Prettier 적용 -- Public API는 명시적으로 정의 (와일드카드 export 지양) - -## 아키텍처 린팅 - -코드베이스의 FSD 규칙 준수를 자동으로 검증하려면 [Steiger](https://github.com/feature-sliced/steiger)를 사용하세요. - -```bash -# Steiger 설치 및 실행 -pnpm add -D @feature-sliced/steiger -npx steiger src +export { Comment } from "./ui/comment"; +export { CommentForm } from "./ui/comment-form"; +export { useComments } from "./model/use-comments"; +export type { Comment, CommentFormData } from "./model/types"; ``` diff --git a/apps/_template/app/(with-base-layout)/layout.tsx b/apps/_template/app/(with-base-layout)/layout.tsx index 1d182a0ee..1ff36f8ec 100644 --- a/apps/_template/app/(with-base-layout)/layout.tsx +++ b/apps/_template/app/(with-base-layout)/layout.tsx @@ -1,31 +1,10 @@ -"use client"; - -import { useCallback } from "react"; -import { usePathname, useRouter } from "next/navigation"; -import { useQueryClient } from "@tanstack/react-query"; -import { BaseLayout } from "@common/components"; -import type { MenuItem } from "@/entities/menu"; -import { PageLayout } from "@/shared/ui/page-layout"; - -export default function WithBaseLayout({ children }: { children: React.ReactNode }) { - const router = useRouter(); - const pathname = usePathname(); - const queryClient = useQueryClient(); - - const handleMenuClick = useCallback( - (item: MenuItem) => { - router.push(item.urlPath); - }, - [router], - ); - - return ( - - {children} - - ); -} +import type { ReactNode } from "react"; +import { BaseLayoutWrapper } from "@/app/layouts/base-layout"; + +interface WithBaseLayoutProps { + children: ReactNode; +} + +export default function WithBaseLayout({ children }: WithBaseLayoutProps) { + return {children}; +} diff --git a/apps/_template/app/(with-base-layout)/page.tsx b/apps/_template/app/(with-base-layout)/page.tsx index e118e732e..82a918b59 100644 --- a/apps/_template/app/(with-base-layout)/page.tsx +++ b/apps/_template/app/(with-base-layout)/page.tsx @@ -1,9 +1 @@ -"use client"; - -export default function MainPage() { - return ( -
-

Home

-
- ); -} +export { MainPage as default } from "@/pages/home"; diff --git a/apps/_template/app/layout.tsx b/apps/_template/app/layout.tsx index d152e0da3..5f5f63ad8 100644 --- a/apps/_template/app/layout.tsx +++ b/apps/_template/app/layout.tsx @@ -1,7 +1,7 @@ import type { Metadata } from "next"; import { Noto_Sans_KR } from "next/font/google"; -import { Providers } from "./providers"; -import "./globals.css"; +import { Providers } from "@/app/providers"; +import "@/app/styles/globals.css"; const notoSansKR = Noto_Sans_KR({ subsets: ["latin"], diff --git a/apps/as/pages/README.md b/apps/_template/pages/README.md similarity index 98% rename from apps/as/pages/README.md rename to apps/_template/pages/README.md index 287ea7ddb..e011944c3 100644 --- a/apps/as/pages/README.md +++ b/apps/_template/pages/README.md @@ -1,9 +1,9 @@ -# 이 폴더는 비워 둡니다 (FSD + Next.js App Router) - -Next.js가 `src/pages`를 **Pages Router**용 `pages` 디렉터리로 인식하지 않도록, -프로젝트 루트에 **빈 `pages` 폴더**를 두는 것이 FSD 공식 가이드 권장사항입니다. - -- 실제 페이지(FSD Pages 레이어)는 **`src/pages`**에 있습니다. -- Next.js 라우트는 **`app/`** 에서 `src/pages`를 re-export 하는 방식으로 연결됩니다. - -[Feature-Sliced Design - Usage with Next.js (App Router)](https://feature-sliced.design/docs/guides/tech/with-nextjs) +# 이 폴더는 비워 둡니다 (FSD + Next.js App Router) + +Next.js가 `src/pages`를 **Pages Router**용 `pages` 디렉터리로 인식하지 않도록, +프로젝트 루트에 **빈 `pages` 폴더**를 두는 것이 FSD 공식 가이드 권장사항입니다. + +- 실제 페이지(FSD Pages 레이어)는 **`src/pages`**에 있습니다. +- Next.js 라우트는 **`app/`** 에서 `src/pages`를 re-export 하는 방식으로 연결됩니다. + +[Feature-Sliced Design - Usage with Next.js (App Router)](https://feature-sliced.design/docs/guides/tech/with-nextjs) diff --git a/apps/_template/src/app/layouts/base-layout.tsx b/apps/_template/src/app/layouts/base-layout.tsx new file mode 100644 index 000000000..1081134e0 --- /dev/null +++ b/apps/_template/src/app/layouts/base-layout.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { useCallback } from "react"; +import { usePathname, useRouter } from "next/navigation"; +import { useQueryClient } from "@tanstack/react-query"; +import { BaseLayout } from "@common/components"; +import type { MenuItem } from "@/entities/menu"; +import { PageLayout } from "@/shared/ui/page-layout"; + +interface BaseLayoutWrapperProps { + children: React.ReactNode; +} + +export function BaseLayoutWrapper({ children }: BaseLayoutWrapperProps) { + const router = useRouter(); + const pathname = usePathname(); + const queryClient = useQueryClient(); + + const handleMenuClick = useCallback( + (item: MenuItem) => { + router.push(item.urlPath); + }, + [router], + ); + + return ( + + {children} + + ); +} diff --git a/apps/_template/app/providers.tsx b/apps/_template/src/app/providers/index.tsx similarity index 96% rename from apps/_template/app/providers.tsx rename to apps/_template/src/app/providers/index.tsx index bc12c443b..05bac42cc 100644 --- a/apps/_template/app/providers.tsx +++ b/apps/_template/src/app/providers/index.tsx @@ -1,18 +1,18 @@ -"use client"; - -import { QueryClientProvider } from "@tanstack/react-query"; -import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; -import { queryClient } from "@/shared/lib"; - -interface ProvidersProps { - children: React.ReactNode; -} - -export function Providers({ children }: ProvidersProps) { - return ( - - {children} - - - ); -} +"use client"; + +import { QueryClientProvider } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import { queryClient } from "@/shared/lib"; + +interface ProvidersProps { + children: React.ReactNode; +} + +export function Providers({ children }: ProvidersProps) { + return ( + + {children} + + + ); +} diff --git a/apps/_template/app/globals.css b/apps/_template/src/app/styles/globals.css similarity index 100% rename from apps/_template/app/globals.css rename to apps/_template/src/app/styles/globals.css diff --git a/apps/_template/entities/README.md b/apps/_template/src/entities/README.md similarity index 100% rename from apps/_template/entities/README.md rename to apps/_template/src/entities/README.md diff --git a/apps/_template/entities/menu/index.ts b/apps/_template/src/entities/menu/index.ts similarity index 100% rename from apps/_template/entities/menu/index.ts rename to apps/_template/src/entities/menu/index.ts diff --git a/apps/_template/entities/menu/model/types.ts b/apps/_template/src/entities/menu/model/types.ts similarity index 100% rename from apps/_template/entities/menu/model/types.ts rename to apps/_template/src/entities/menu/model/types.ts diff --git a/apps/_template/features/README.md b/apps/_template/src/features/README.md similarity index 100% rename from apps/_template/features/README.md rename to apps/_template/src/features/README.md diff --git a/apps/as/src/pages/home/index.ts b/apps/_template/src/pages/home/index.ts similarity index 97% rename from apps/as/src/pages/home/index.ts rename to apps/_template/src/pages/home/index.ts index d11882ce5..97a463408 100644 --- a/apps/as/src/pages/home/index.ts +++ b/apps/_template/src/pages/home/index.ts @@ -1 +1 @@ -export { MainPage } from "./ui/main-page"; +export { MainPage } from "./ui/main-page"; diff --git a/apps/as/src/pages/home/ui/main-page.tsx b/apps/_template/src/pages/home/ui/main-page.tsx similarity index 95% rename from apps/as/src/pages/home/ui/main-page.tsx rename to apps/_template/src/pages/home/ui/main-page.tsx index 0370d5814..f757224dc 100644 --- a/apps/as/src/pages/home/ui/main-page.tsx +++ b/apps/_template/src/pages/home/ui/main-page.tsx @@ -1,9 +1,9 @@ -"use client"; - -export function MainPage() { - return ( -
-

Home

-
- ); -} +"use client"; + +export function MainPage() { + return ( +
+

Home

+
+ ); +} diff --git a/apps/_template/shared/README.md b/apps/_template/src/shared/README.md similarity index 100% rename from apps/_template/shared/README.md rename to apps/_template/src/shared/README.md diff --git a/apps/_template/shared/api/client.ts b/apps/_template/src/shared/api/client.ts similarity index 100% rename from apps/_template/shared/api/client.ts rename to apps/_template/src/shared/api/client.ts diff --git a/apps/_template/shared/api/index.ts b/apps/_template/src/shared/api/index.ts similarity index 100% rename from apps/_template/shared/api/index.ts rename to apps/_template/src/shared/api/index.ts diff --git a/apps/_template/shared/config/env.ts b/apps/_template/src/shared/config/env.ts similarity index 100% rename from apps/_template/shared/config/env.ts rename to apps/_template/src/shared/config/env.ts diff --git a/apps/_template/shared/config/index.ts b/apps/_template/src/shared/config/index.ts similarity index 100% rename from apps/_template/shared/config/index.ts rename to apps/_template/src/shared/config/index.ts diff --git a/apps/_template/shared/lib/dayjs.ts b/apps/_template/src/shared/lib/dayjs.ts similarity index 100% rename from apps/_template/shared/lib/dayjs.ts rename to apps/_template/src/shared/lib/dayjs.ts diff --git a/apps/_template/shared/lib/index.ts b/apps/_template/src/shared/lib/index.ts similarity index 100% rename from apps/_template/shared/lib/index.ts rename to apps/_template/src/shared/lib/index.ts diff --git a/apps/_template/shared/lib/query-client.ts b/apps/_template/src/shared/lib/query-client.ts similarity index 100% rename from apps/_template/shared/lib/query-client.ts rename to apps/_template/src/shared/lib/query-client.ts diff --git a/apps/_template/shared/model/index.ts b/apps/_template/src/shared/model/index.ts similarity index 100% rename from apps/_template/shared/model/index.ts rename to apps/_template/src/shared/model/index.ts diff --git a/apps/_template/shared/ui/index.ts b/apps/_template/src/shared/ui/index.ts similarity index 100% rename from apps/_template/shared/ui/index.ts rename to apps/_template/src/shared/ui/index.ts diff --git a/apps/_template/shared/ui/page-layout.tsx b/apps/_template/src/shared/ui/page-layout.tsx similarity index 100% rename from apps/_template/shared/ui/page-layout.tsx rename to apps/_template/src/shared/ui/page-layout.tsx diff --git a/apps/_template/widgets/README.md b/apps/_template/src/widgets/README.md similarity index 100% rename from apps/_template/widgets/README.md rename to apps/_template/src/widgets/README.md diff --git a/apps/_template/tsconfig.json b/apps/_template/tsconfig.json index 15b023415..dab9b0b8e 100644 --- a/apps/_template/tsconfig.json +++ b/apps/_template/tsconfig.json @@ -19,13 +19,7 @@ } ], "paths": { - "@/*": ["./*"], - "@/app/*": ["./app/*"], - "@/shared/*": ["./shared/*"], - "@/entities/*": ["./entities/*"], - "@/features/*": ["./features/*"], - "@/widgets/*": ["./widgets/*"], - "@/pages/*": ["./pages/*"], + "@/*": ["./src/*"], "@common/components": ["../../packages/common/components/dist/"], "@common/network": ["../../packages/common/network/"] } From f769c508adfba6548b6198213c32033e8a070286 Mon Sep 17 00:00:00 2001 From: bicochan Date: Fri, 27 Feb 2026 13:43:57 +0900 Subject: [PATCH 11/39] =?UTF-8?q?[as]=20feat:=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=EC=9D=B8=EA=B0=80=20=EB=AA=A9=EB=A1=9D=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EB=B7=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/app/layout.tsx | 17 +- apps/_template/src/app/styles/globals.css | 2 +- apps/_template/tailwind.config.ts | 3 - .../(with-base-layout)/instl-sncn/page.tsx | 1 + apps/as/app/(with-base-layout)/page.tsx | 1 - apps/as/app/layout.tsx | 13 +- apps/as/package.json | 1 + apps/as/pages/.gitkeep | 0 apps/as/src/app/providers/index.tsx | 4 +- apps/as/src/app/styles/components.css | 129 +++++++++++++ apps/as/src/app/styles/globals.css | 2 +- apps/as/src/pages/instl-sncn/index.ts | 1 + .../pages/instl-sncn/model/table-columns.tsx | 80 ++++++++ apps/as/src/pages/instl-sncn/ui/list-page.tsx | 178 ++++++++++++++++++ apps/as/tailwind.config.ts | 9 +- pnpm-lock.yaml | 9 + 16 files changed, 414 insertions(+), 36 deletions(-) create mode 100644 apps/as/app/(with-base-layout)/instl-sncn/page.tsx delete mode 100644 apps/as/app/(with-base-layout)/page.tsx create mode 100644 apps/as/pages/.gitkeep create mode 100644 apps/as/src/app/styles/components.css create mode 100644 apps/as/src/pages/instl-sncn/index.ts create mode 100644 apps/as/src/pages/instl-sncn/model/table-columns.tsx create mode 100644 apps/as/src/pages/instl-sncn/ui/list-page.tsx diff --git a/apps/_template/app/layout.tsx b/apps/_template/app/layout.tsx index 5f5f63ad8..a6eecfc27 100644 --- a/apps/_template/app/layout.tsx +++ b/apps/_template/app/layout.tsx @@ -1,15 +1,8 @@ import type { Metadata } from "next"; -import { Noto_Sans_KR } from "next/font/google"; +import { cookies } from "next/headers"; import { Providers } from "@/app/providers"; import "@/app/styles/globals.css"; -const notoSansKR = Noto_Sans_KR({ - subsets: ["latin"], - weight: ["100", "300", "400", "500", "700", "900"], - display: "swap", - variable: "--font-noto-sans-kr", -}); - export const metadata: Metadata = { title: "행정지원시스템", description: "행정지원시스템", @@ -19,10 +12,12 @@ interface RootLayoutProps { children: React.ReactNode; } -export default function RootLayout({ children }: RootLayoutProps) { +export default async function RootLayout({ children }: RootLayoutProps) { + const theme = (await cookies()).get("site-theme-key"); + return ( - - + + {children} diff --git a/apps/_template/src/app/styles/globals.css b/apps/_template/src/app/styles/globals.css index 60bc92fb6..e557f947b 100644 --- a/apps/_template/src/app/styles/globals.css +++ b/apps/_template/src/app/styles/globals.css @@ -10,6 +10,6 @@ html, body { color: var(--foreground); background: var(--background); - font-family: var(--font-noto-sans-kr), sans-serif; + font-family: "Noto Sans KR", sans-serif; font-size: 10px; } diff --git a/apps/_template/tailwind.config.ts b/apps/_template/tailwind.config.ts index c02405aca..d19dec7ed 100644 --- a/apps/_template/tailwind.config.ts +++ b/apps/_template/tailwind.config.ts @@ -18,9 +18,6 @@ const config: Config = { background: "var(--background)", foreground: "var(--foreground)", }, - fontFamily: { - sans: ["var(--font-noto-sans-kr)", "Noto Sans KR", "sans-serif"], - }, }, }, plugins: [], diff --git a/apps/as/app/(with-base-layout)/instl-sncn/page.tsx b/apps/as/app/(with-base-layout)/instl-sncn/page.tsx new file mode 100644 index 000000000..324982f41 --- /dev/null +++ b/apps/as/app/(with-base-layout)/instl-sncn/page.tsx @@ -0,0 +1 @@ +export { InstlSncnListPage as default } from "@/pages/instl-sncn"; diff --git a/apps/as/app/(with-base-layout)/page.tsx b/apps/as/app/(with-base-layout)/page.tsx deleted file mode 100644 index 82a918b59..000000000 --- a/apps/as/app/(with-base-layout)/page.tsx +++ /dev/null @@ -1 +0,0 @@ -export { MainPage as default } from "@/pages/home"; diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index 05858ffe8..5293046d6 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,17 +1,10 @@ import type { Metadata } from "next"; import { cookies } from "next/headers"; -import { Noto_Sans_KR } from "next/font/google"; import { Providers } from "@/app/providers"; import { setCookie } from "@/shared/lib"; import { SITE_ID } from "@/shared/config"; import "@/app/styles/globals.css"; - -const notoSansKR = Noto_Sans_KR({ - subsets: ["latin"], - weight: ["100", "300", "400", "500", "700", "900"], - display: "swap", - variable: "--font-noto-sans-kr", -}); +import "@/app/styles/components.css"; export const metadata: Metadata = { title: "행정지원시스템", @@ -28,8 +21,8 @@ export default async function RootLayout({ children }: RootLayoutProps) { const theme = (await cookies()).get("site-theme-key"); return ( - - + + {children} diff --git a/apps/as/package.json b/apps/as/package.json index 3806f73ee..92b2e6482 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -13,6 +13,7 @@ "@common/assets": "workspace:*", "@common/components": "workspace:*", "@common/network": "workspace:*", + "@faker-js/faker": "^10.3.0", "@hookform/resolvers": "^4.1.3", "@tanstack/react-query": "^5.75.5", "@tanstack/react-query-devtools": "^5.75.5", diff --git a/apps/as/pages/.gitkeep b/apps/as/pages/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/as/src/app/providers/index.tsx b/apps/as/src/app/providers/index.tsx index bc12c443b..ff37c57b7 100644 --- a/apps/as/src/app/providers/index.tsx +++ b/apps/as/src/app/providers/index.tsx @@ -12,7 +12,9 @@ export function Providers({ children }: ProvidersProps) { return ( {children} - +
+ +
); } diff --git a/apps/as/src/app/styles/components.css b/apps/as/src/app/styles/components.css new file mode 100644 index 000000000..5b9742c0f --- /dev/null +++ b/apps/as/src/app/styles/components.css @@ -0,0 +1,129 @@ +.card { + position: relative; + margin: 0.6rem; + box-sizing: border-box; + min-height: 2rem; + border-radius: 0.5rem; + padding: 0.6rem; + font-size: 1.3rem; + color: #666; +} + +.card_width10 { + width: calc(10% - 12px); +} + +.card_width20 { + width: calc(20% - 12px); +} + +.card_width25 { + width: calc(25% - 12px); +} + +.card_width30 { + width: calc(30% - 12px); +} + +.card_width33 { + width: calc(33.333% - 12px); +} + +.card_width40 { + width: calc(40% - 12px); +} + +.card_width45 { + width: calc(45% - 12px); +} + +.card_width50 { + width: calc(50% - 12px); +} + +.card_width60 { + width: calc(60% - 12px); +} + +.card_width66 { + width: calc(66.666% - 12px); +} + +.card_width70 { + width: calc(70% - 12px); +} + +.card_width75 { + width: calc(75% - 12px); +} + +.card_width80 { + width: calc(80% - 12px); +} + +.card_width90 { + width: calc(90% - 12px); +} + +.card_width100 { + width: calc(100% - 12px); +} + +.card_nopadding { + padding: 0 !important; +} + +.card_nomargin { + width: 100%; + margin: 0 !important; + padding: 0 !important; +} + +.topline { + border-top: 1px solid #ccc; +} + +.bottomline { + border-bottom: 1px solid #e6eef3; + background: #fff; +} + +.card-border { + border: 1px solid #dbe2e6; + background-color: rgba(255, 255, 255, 0.6); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +.card-header { + margin-top: -0.6rem; + margin-left: -0.6rem; + margin-right: -0.6rem; + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid #e1e7eb; + padding: 1rem; +} + +.card-footer { + margin-left: -0.6rem; + margin-right: -0.6rem; + margin-top: 0.5rem; + display: flex; + align-items: center; + justify-content: center; + border-top: 1px solid #e1e7eb; + padding-top: 1rem; + padding-bottom: 1rem; +} + +/* 블랙 테마 */ +[data-theme="black"] { + .card-border { + background-color: rgba(255, 255, 255, 0.065); + border-color: #38383a; + } + .card-header { + border-bottom-color: #3f4042; + } +} diff --git a/apps/as/src/app/styles/globals.css b/apps/as/src/app/styles/globals.css index 2b1b139cf..91c6845e5 100644 --- a/apps/as/src/app/styles/globals.css +++ b/apps/as/src/app/styles/globals.css @@ -10,6 +10,6 @@ html, body { color: var(--foreground); background: var(--background); - font-family: var(--font-noto-sans-kr), sans-serif; + font-family: "Noto Sans KR", sans-serif; font-size: 10px; } diff --git a/apps/as/src/pages/instl-sncn/index.ts b/apps/as/src/pages/instl-sncn/index.ts new file mode 100644 index 000000000..b9127c3a1 --- /dev/null +++ b/apps/as/src/pages/instl-sncn/index.ts @@ -0,0 +1 @@ +export { InstlSncnListPage } from "./ui/list-page"; diff --git a/apps/as/src/pages/instl-sncn/model/table-columns.tsx b/apps/as/src/pages/instl-sncn/model/table-columns.tsx new file mode 100644 index 000000000..e53a7fad4 --- /dev/null +++ b/apps/as/src/pages/instl-sncn/model/table-columns.tsx @@ -0,0 +1,80 @@ +import { createColumnHelper } from "@tanstack/react-table"; +import type { FnrscVO } from "@/entities/instl-sncn"; +import { Badge } from "@common/components"; + +const columnHelper = createColumnHelper(); + +const LIST_STEPS = ["저장", "신청완료", "기술검토", "검토결과 회신"] as const; + +function stepIndex(status: string | undefined): number { + if (!status) return 0; + const map: Record = { + SV: 0, + ST: 1, + LE: 2, + SL: 2, + ER: 2, + TE: 2, + TR: 2, + TP: 2, + EE: 2, + TA: 3, + }; + return map[status] ?? 0; +} + +function ProgrsSttusCell({ value }: { value?: string }) { + const current = stepIndex(value); + return ( +
+ {LIST_STEPS.map((label, i) => ( + <> + + {label} + + {i < LIST_STEPS.length - 1 && ( + + )} + + ))} +
+ ); +} + +export const instlSncnListColumns = [ + columnHelper.accessor("adstDstrNm", { + id: "adstDstrNm", + header: "지자체", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.accessor("bzNm", { + id: "bzNm", + header: "사업명", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.accessor("jobSeNm", { + id: "jobSeNm", + header: "업무구분", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.accessor("regId", { + id: "regId", + header: "담당자", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.accessor("rgnNm", { + id: "rgnNm", + header: "해당기관", + cell: (info) => info.getValue() ?? "-", + }), + columnHelper.display({ + id: "progrsSttus", + header: "진행상황", + cell: (info) => , + }), + columnHelper.accessor("regDt", { + id: "regDt", + header: "시행일", + cell: (info) => info.getValue() ?? "-", + }), +]; diff --git a/apps/as/src/pages/instl-sncn/ui/list-page.tsx b/apps/as/src/pages/instl-sncn/ui/list-page.tsx new file mode 100644 index 000000000..6aecea351 --- /dev/null +++ b/apps/as/src/pages/instl-sncn/ui/list-page.tsx @@ -0,0 +1,178 @@ +"use client"; + +import { useState, useCallback } from "react"; +import { useRouter } from "next/navigation"; +import { fakerKO as faker } from "@faker-js/faker"; +import { + Button, + DataTable, + Input, + Label, + LoadingWithAnimation, + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@common/components"; +import { getCoreRowModel, useReactTable } from "@tanstack/react-table"; +import { useListPageLoadCnfm } from "@/entities/instl-sncn"; +import type { FnrscVO } from "@/entities/instl-sncn"; +import { instlSncnListColumns } from "../model/table-columns"; + +const PAGE_SIZE = 10; +const JOB_SE_OPTIONS = [ + { value: "ALL", label: "전체" }, + { value: "SF", label: "하수처리시설" }, + { value: "SP", label: "하수관로" }, + { value: "RE", label: "재이용수" }, +] as const; + +function buildMockFnrscVO(): FnrscVO { + return { + instlCnfmDocNo: faker.string.alphanumeric(10), + adstDstrNm: faker.location.city(), + bzNm: faker.company.name(), + jobSeNm: faker.helpers.arrayElement(["하수처리시설", "하수관로", "재이용수"]), + regId: faker.person.fullName(), + rgnNm: faker.company.name(), + progrsSttus: faker.helpers.arrayElement(["SV", "ST", "SL", "ER", "EE", "PR", "PE", "AP", "RJ"]), + regDt: faker.date.past().toISOString().slice(0, 10), + }; +} + +const MOCK_LIST: FnrscVO[] = Array.from({ length: PAGE_SIZE }, () => buildMockFnrscVO()); + +export function InstlSncnListPage() { + const router = useRouter(); + const [bzNm, setBzNm] = useState(""); + const [jobSeNm, setJobSeNm] = useState("ALL"); + const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: PAGE_SIZE }); + + const searchVO: FnrscVO = { + bzNm: bzNm.trim() || undefined, + jobSeNm: jobSeNm === "ALL" ? undefined : jobSeNm, + pageIndex: pagination.pageIndex + 1, + recordCountPerPage: PAGE_SIZE, + pageSize: PAGE_SIZE, + }; + + const { data, isPending, isError } = useListPageLoadCnfm(searchVO); + const list = data?.list && data.list.length > 0 ? data.list : MOCK_LIST; + const totalCount = data?.cnt ?? list.length; + const pageCount = data?.paginationInfo?.lastPageNo ?? 1; + + const handleSearch = useCallback((e: React.FormEvent) => { + e.preventDefault(); + setPagination((p) => ({ ...p, pageIndex: 0 })); + }, []); + + const handleRowClick = useCallback( + (row: FnrscVO) => { + if (row.instlCnfmDocNo) { + router.push(`/instl-sncn/${row.instlCnfmDocNo}`); + } + }, + [router], + ); + + const handleRegist = useCallback(() => { + router.push("/instl-sncn/regist"); + }, [router]); + + const table = useReactTable({ + data: list, + columns: instlSncnListColumns, + getCoreRowModel: getCoreRowModel(), + manualPagination: true, + pageCount, + state: { + pagination, + }, + onPaginationChange: setPagination, + }); + + const isEmpty = list.length === 0; + + return ( +
+
+
+ + setBzNm(e.target.value)} + onKeyDown={(e) => e.key === "Enter" && handleSearch(e as unknown as React.FormEvent)} + /> +
+
+ + +
+ +
+ +
+
+

+ 검색된 리스트 ({totalCount}) +

+ +
+ +
+ {isPending && ( +
+
+ +
+
+ )} + {/* {isError && ( +
+ 목록을 불러오는 중 오류가 발생했습니다. +
+ )} */} + {!isPending && !isError && isEmpty && ( +
+ 목록이 존재하지 않습니다. +
+ )} + {!isPending && !isEmpty && ( +
+ +
+ )} +
+
+
+ ); +} diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts index c02405aca..e51b76dd9 100644 --- a/apps/as/tailwind.config.ts +++ b/apps/as/tailwind.config.ts @@ -4,12 +4,8 @@ import presetConfig from "../../tailwind.config.preset"; const config: Config = { presets: [presetConfig], content: [ - "./pages/**/*.{js,ts,jsx,tsx,mdx}", - "./shared/**/*.{js,ts,jsx,tsx,mdx}", - "./entities/**/*.{js,ts,jsx,tsx,mdx}", - "./features/**/*.{js,ts,jsx,tsx,mdx}", - "./widgets/**/*.{js,ts,jsx,tsx,mdx}", "./app/**/*.{js,ts,jsx,tsx,mdx}", + "./src/**/*.{js,ts,jsx,tsx,mdx}", "../../packages/common/components/dist/**/*.{js,ts,jsx,tsx,mdx}", ], theme: { @@ -18,9 +14,6 @@ const config: Config = { background: "var(--background)", foreground: "var(--foreground)", }, - fontFamily: { - sans: ["var(--font-noto-sans-kr)", "Noto Sans KR", "sans-serif"], - }, }, }, plugins: [], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d7b788c19..b6572670c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,6 +126,9 @@ importers: '@common/network': specifier: workspace:* version: link:../../packages/common/network + '@faker-js/faker': + specifier: ^10.3.0 + version: 10.3.0 '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.68.0(react@19.2.3)) @@ -2476,6 +2479,10 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@faker-js/faker@10.3.0': + resolution: {integrity: sha512-It0Sne6P3szg7JIi6CgKbvTZoMjxBZhcv91ZrqrNuaZQfB5WoqYYbzCUOq89YR+VY8juY9M1vDWmDDa2TzfXCw==} + engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} + '@faker-js/faker@9.9.0': resolution: {integrity: sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} @@ -7901,6 +7908,8 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 + '@faker-js/faker@10.3.0': {} + '@faker-js/faker@9.9.0': {} '@feature-sliced/filesystem@3.0.1': From edc2fd5720734648c692f0b4d62b2671a69a9e5a Mon Sep 17 00:00:00 2001 From: ljpark Date: Fri, 8 May 2026 17:53:51 +0900 Subject: [PATCH 12/39] =?UTF-8?q?wr:=20=ED=91=9C=EC=A4=80=EA=B3=B5?= =?UTF-8?q?=EC=82=AC=EB=B9=84=20=EB=AA=A8=EC=9D=98=EC=82=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constCostSimulation/page.tsx | 20 ++ .../matMng/coMat/coMatRvw/page.tsx | 26 +- .../ui/form/coMat/conCostForm/conCostForm.tsx | 229 ++++++++++-------- 3 files changed, 165 insertions(+), 110 deletions(-) create mode 100644 apps/wr/app/(popUp-layout)/constCostSimulation/page.tsx diff --git a/apps/wr/app/(popUp-layout)/constCostSimulation/page.tsx b/apps/wr/app/(popUp-layout)/constCostSimulation/page.tsx new file mode 100644 index 000000000..870f54b1f --- /dev/null +++ b/apps/wr/app/(popUp-layout)/constCostSimulation/page.tsx @@ -0,0 +1,20 @@ +"use client"; + +/** + * 표준공사비 시뮬레이션 Popup + */ +import { useForm } from "react-hook-form"; +import ConCostForm from "@/components/ui/form/coMat/conCostForm/conCostForm"; +import type { DmdCoReqType } from "@/app/store/matDmd/coMatRvw/type"; + +export default function ConstCostSimulationPage() { + const form = useForm({ + defaultValues: { + dmndQty: 0, + demandCst: { cstrnCst: 0, usgPrcsProcs: "", prcsFcltCpctCstrnCst: 0, fcltSbsdCstrnCst: 0 }, + totalConstCost: 0 + } as any + }); + + return ; +} diff --git a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx index 4304945bd..e2e80f745 100644 --- a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx @@ -74,9 +74,7 @@ export default function CoMatRvw() { const [toDate, setToDate] = useState( String(new Date().getFullYear()) ); - const [selectData, setSelectData] = useState( - {} as DmdCoReqType - ); + const [selectData, setSelectData] = useState(null); // selectData를 null로 초기화 const [selectionVersion, setSelectionVersion] = useState(0); const bottomRef = useRef(null); @@ -122,7 +120,7 @@ export default function CoMatRvw() { if (coMatRvwRes && coMatRvwRes[index]) { setSelectData(coMatRvwRes[index]); setSelectionVersion((v) => v + 1); // 행을 클릭할 때마다 버전을 1씩 증가 - bottomRef.current?.scrollIntoView({ behavior: "smooth" }); // 화면 스크로 처리 + bottomRef.current?.scrollIntoView({ behavior: "smooth" }); // 화면 스크롤 처리 } }; const useUsgCdWatch = useWatch({ control: form.control, name: "useUsgCd" }); @@ -131,7 +129,6 @@ export default function CoMatRvw() { String(useUsgCdWatch ?? ""); useEffect(() => { if (useUsgCdWatch) { - console.log("useUsgCdWatch:" , useUsgCdWatch); const normalizedUseUsgCd = code.sewageOutFclttUse?.find((item) => item.val === useUsgCdWatch)?.val ?? code.sewageOutFclttUse?.find((item) => item.text === useUsgCdWatch)?.val ?? @@ -205,6 +202,20 @@ export default function CoMatRvw() { setSelectionVersion((v) => v + 1); // 강제로 바뀌었다고 알리기 } }, [selectData, form]); + + /** + * 하수 표준공사비 시뮬레이션(모의산정) + */ + const constCostSimulation = () => { + const url = `/constCostSimulation`; + const width = window.screen.availWidth; + const height = 600; + const left = 0; + const top = 0; + const popupOptions = `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes`; + window.open(url, "candidatePopup", popupOptions); + }; + return ( <> @@ -290,6 +301,9 @@ export default function CoMatRvw() { > 조회 + @@ -773,5 +787,3 @@ export default function CoMatRvw() { ); } - - diff --git a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx index 932382709..40dd1c215 100644 --- a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx +++ b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx @@ -20,20 +20,21 @@ import { Form, FormField, FormUi, + SelectBox, UiTable, } from "@common/business_components/ui"; import { useConfirm } from "@frontend-opensource/use-react-hooks"; import PopoverUi from "@common/business_components/ui/popover_ui"; import { Button, Checkbox, Input, Label } from "@common/components/ui"; import { useCallback, useEffect, useRef, useState } from "react"; -import { type UseFormReturn } from "react-hook-form"; +import { useForm, type UseFormReturn } from "react-hook-form"; /** - * ConCostForm - * 호출: (with-layout)/matMng/coMat/coMatRvw 에서 호출 + * ConCostForm + * 호출: (with-layout)/matMng/coMat/coMatRvw * - * 공사비를 산정하고 - * - * */ + * @param form - 외부에서 전달된 폼 객체 (없을 경우 시뮬레이션용 로컬 폼 사용) + * @param type - "mat": 매칭, "hist": 이력, "simulation": 모의산정 + */ export default function ConCostForm({ form, @@ -41,11 +42,22 @@ export default function ConCostForm({ selectionVersion, readonly = false, }: { - form: UseFormReturn; + form?: UseFormReturn; type: string; - selectionVersion: number; - readonly: boolean; + selectionVersion?: number; + readonly?: boolean; }) { + // 시뮬레이션 모드를 위한 로컬 폼 생성 + const localForm = useForm({ + defaultValues: { + dmndQty: 0, + demandCst: { cstrnCst: 0, usgPrcsProcs: "" } + } as any + }); + + const activeForm = form || localForm; + const isSim = type === "simulation"; + const readOnlyInputClass = "bg-slate-50 text-gray-700"; const { constCostRes, // 표준사업비 @@ -105,23 +117,33 @@ export default function ConCostForm({ link.click(); }); }; - const usgPrcsProcsWatch = form.watch("demandCst.usgPrcsProcs"); - const dmndQtyWatch = form.watch("dmndQty"); - const totalConstCost = form.watch("totalConstCost"); - const cstrnCst = form.watch("demandCst.cstrnCst"); - const splyList = form.watch("splyCndtList"); - const useUsgCdWatch = form.watch("useUsgCd"); + const usgPrcsProcsWatch = activeForm.watch("demandCst.usgPrcsProcs"); + const dmndQtyWatch = activeForm.watch("dmndQty"); + const totalConstCost = activeForm.watch("totalConstCost"); + const cstrnCst = activeForm.watch("demandCst.cstrnCst") || 0; + const splyList = activeForm.watch("splyCndtList"); + const useUsgCdWatch = activeForm.watch("useUsgCd"); const useUsgCdLabel = code.sewageOutFclttUse?.find((item) => item.val === useUsgCdWatch)?.text ?? String(useUsgCdWatch ?? ""); + // 용도 변경 시 처리공정 자동 매핑 (시뮬레이션 대응) + useEffect(() => { + if (useUsgCdWatch) { + const matched = usageProcData.find((item) => item.useUsgCd === useUsgCdWatch); + if (matched && matched.process !== usgPrcsProcsWatch) { + activeForm.setValue("demandCst.usgPrcsProcs", matched.process); + } + } + }, [useUsgCdWatch, activeForm, usgPrcsProcsWatch]); + /** * 표준공산비 산정 : "계산"버튼 click시 */ const calculateConstCost = useCallback(() => { const usgPrcsProcs = usgPrcsProcsWatch; - if (selectionVersion == 0) { - alert("먼저 목록에서 수요신청 건을 선택하세요."); + if (!isSim && selectionVersion == 0) { + alert("목록에서 수요신청 건을 선택하세요."); return; } if (!dmndQtyWatch) { @@ -194,12 +216,12 @@ export default function ConCostForm({ 100; const realResult = result + fcltSbsdCstrnCst; - form.setValue("demandCst.prcsFcltCpctCstrnCst", Math.round(result)); - form.setValue("demandCst.fcltSbsdCstrnCst", Math.round(fcltSbsdCstrnCst)); - form.setValue("totalConstCost", Math.round(realResult)); + activeForm.setValue("demandCst.prcsFcltCpctCstrnCst", Math.round(result)); + activeForm.setValue("demandCst.fcltSbsdCstrnCst", Math.round(fcltSbsdCstrnCst)); + activeForm.setValue("totalConstCost", Math.round(realResult)); alert("표준공산비 산정이 완료되었습니다."); } - }, [constCostRes, rateFeeRes, usgPrcsProcsWatch, dmndQtyWatch]); + }, [constCostRes, rateFeeRes, usgPrcsProcsWatch, dmndQtyWatch, isSim, selectionVersion, activeForm]); /** * 저장 버튼 click 시 실행 @@ -235,11 +257,11 @@ export default function ConCostForm({ if (checkFinish) { if (await confirm("검토완료 변경시 공사비는 변경할수 없습니다.\n진행하시겠습니까?")) { - const message = await coMatRvwUpdate( pk, form.getValues("dmdInfoId"), data ); + const message = await coMatRvwUpdate( pk, activeForm.getValues("dmdInfoId"), data ); alert(message); } } else { - const message = await coMatRvwUpdate( pk, form.getValues("dmdInfoId"), data ); + const message = await coMatRvwUpdate( pk, activeForm.getValues("dmdInfoId"), data ); alert(message); } }else{ @@ -292,10 +314,11 @@ export default function ConCostForm({ useEffect(() => { - form.register("dmdInfoSn"); - form.register("dmdInfoId"); - form.register("ruseUtztnFcltNm"); - }, []); + if (!activeForm) return; + activeForm.register("dmdInfoSn"); + activeForm.register("dmdInfoId"); + activeForm.register("ruseUtztnFcltNm"); + }, [activeForm]); /** @@ -309,7 +332,7 @@ export default function ConCostForm({ alert("먼저 목록에서 수요신청 건을 선택하세요."); return; } - const dmdInfoId = form.getValues("dmdInfoId"); + const dmdInfoId = activeForm.getValues("dmdInfoId"); console.log(dmdInfoId) const url = `/splyPopup?dmdInfoId=${encodeURIComponent(dmdInfoId)}`; @@ -324,7 +347,7 @@ export default function ConCostForm({ return ( <> -
+ {/*

표준공사비 산정

*/} @@ -334,36 +357,35 @@ export default function ConCostForm({ - - - { - if (readonly) return; - setCheckFinish(checked === true); - } - - // 'indeterminate' 상태를 무시하고 순수 boolean 값으로만 상태를 업데이트합니다. - } - > - - + {!isSim && ( + <> + + + { + if (readonly) return; + setCheckFinish(checked === true); + }} + /> + + )} + {!isSim && ( + <> + + + + )}

기본사항

@@ -371,25 +393,33 @@ export default function ConCostForm({
( - + {isSim ? ( + + ) : ( + + )} )} />
( @@ -401,8 +431,8 @@ export default function ConCostForm({ field.onChange(Number(e.target.value)); }} value={field.value ?? 0} - readOnly={true} - className={readOnlyInputClass} + readOnly={!isSim} + className={!isSim ? readOnlyInputClass : ""} /> )} @@ -439,7 +469,7 @@ export default function ConCostForm({ bodyClassName={"w-[25vw] max-w-none"} > ( @@ -457,7 +487,7 @@ export default function ConCostForm({
( @@ -502,7 +532,7 @@ export default function ConCostForm({ >
( @@ -540,7 +570,7 @@ export default function ConCostForm({ >
( @@ -585,7 +615,7 @@ export default function ConCostForm({ bodyClassName={"w-[22vw]"} > ( @@ -604,35 +634,28 @@ export default function ConCostForm({ )} />
-
-
- - + {form && ( +
+
+ + +
+ + +
- - - -
+ )}
( @@ -641,7 +664,7 @@ export default function ConCostForm({ type="number" step="0.01" onChange={(e) => { - if (readonly) return; + if (readonly && !isSim) return; field.onChange(Number(e.target.value)); }} From 62494eba30fa7ac3623dac192ebe3e194827ff94 Mon Sep 17 00:00:00 2001 From: ljpark Date: Fri, 8 May 2026 18:19:39 +0900 Subject: [PATCH 13/39] =?UTF-8?q?wr:=20=ED=91=9C=EC=A4=80=EA=B3=B5?= =?UTF-8?q?=EC=82=AC=EB=B9=84=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/(popUp-layout)/constCostSimulation/page.tsx | 10 +++++++++- .../(with-layout)/matMng/coMat/coMatRvw/page.tsx | 13 ++++++++----- .../ui/form/coMat/conCostForm/conCostForm.tsx | 9 ++++++++- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/apps/wr/app/(popUp-layout)/constCostSimulation/page.tsx b/apps/wr/app/(popUp-layout)/constCostSimulation/page.tsx index 870f54b1f..c76e3d597 100644 --- a/apps/wr/app/(popUp-layout)/constCostSimulation/page.tsx +++ b/apps/wr/app/(popUp-layout)/constCostSimulation/page.tsx @@ -6,6 +6,7 @@ import { useForm } from "react-hook-form"; import ConCostForm from "@/components/ui/form/coMat/conCostForm/conCostForm"; import type { DmdCoReqType } from "@/app/store/matDmd/coMatRvw/type"; +import ListDiv from "@common/business_components/ui/list_div"; export default function ConstCostSimulationPage() { const form = useForm({ @@ -16,5 +17,12 @@ export default function ConstCostSimulationPage() { } as any }); - return ; + return ( + +
+

표준공사비 산정

+
+ +
+ ) } diff --git a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx index e2e80f745..d74d74a1f 100644 --- a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx @@ -52,6 +52,7 @@ export default function CoMatRvw() { const { auth, code, coRvw, coMatRvwInit, coMatRvwSearch, coMatRvwInqua } = useWrStore((state) => state); const { coMatRvwRes, coMatRvwCount } = coRvw; + const [mounted, setMounted] = useState(false); const { regAuthrtYn } = auth; const alert = useAlertStore((state) => state.setMessage); @@ -185,6 +186,7 @@ export default function CoMatRvw() { useEffect(() => { if (!initRef.current) { coMatRvwInit(1, 13, fromDate, toDate); + setMounted(true); initRef.current = true; } }, [coMatRvwInit, initRef, fromDate, toDate]); @@ -208,9 +210,9 @@ export default function CoMatRvw() { */ const constCostSimulation = () => { const url = `/constCostSimulation`; - const width = window.screen.availWidth; - const height = 600; - const left = 0; + const width = Math.floor(window.screen.availWidth * 0.6); + const height = 500; + const left = Math.floor((window.screen.availWidth - width) / 2); const top = 0; const popupOptions = `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes`; window.open(url, "candidatePopup", popupOptions); @@ -357,10 +359,11 @@ export default function CoMatRvw() { onChange={(e) => { field.onChange(String(e.target.value)); }} - value={ - moment(field.value).format("YYYY-MM-DD") ?? "" + value={ // 값이 있을 때만 moment 실행, 없으면 빈 문자열 + field.value ? moment(field.value).format("YYYY-MM-DD") : "" } readOnly + suppressHydrationWarning // 시간 차이로 인한 경고 무시 className={readOnlyInputClass} />
diff --git a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx index 40dd1c215..9d18fe213 100644 --- a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx +++ b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx @@ -47,6 +47,11 @@ export default function ConCostForm({ selectionVersion?: number; readonly?: boolean; }) { + const [mounted, setMounted] = useState(false); + useEffect(() => { + setMounted(true); + }, []); + // 시뮬레이션 모드를 위한 로컬 폼 생성 const localForm = useForm({ defaultValues: { @@ -344,6 +349,8 @@ export default function ConCostForm({ window.open(url, "candidatePopup", popupOptions); }; + if (!mounted) return null; // 서버 사이드 렌더링 시에는 아무것도 그리지 않음 (선택 사항) + return ( <> @@ -634,7 +641,7 @@ export default function ConCostForm({ )} />
- {form && ( + {!isSim && (
From 18b552f4910d3cd166ca36ad2f0667ea46469c76 Mon Sep 17 00:00:00 2001 From: LGS Date: Mon, 11 May 2026 11:18:14 +0900 Subject: [PATCH 14/39] =?UTF-8?q?=EB=AC=BC=20=EC=9E=AC=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=20=20=EC=86=8C=EA=B0=9C=20>=20=EB=AC=BC=20=EC=9E=AC=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=20=EB=B2=95=20=EA=B4=80=EB=A0=A8=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95=EB=B3=B8=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../images/landing/intro/policy_timeline.png | Bin 298725 -> 291193 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/dm/public/images/landing/intro/policy_timeline.png b/apps/dm/public/images/landing/intro/policy_timeline.png index 1cb90cef4894f4d087f93b9507736ccfa0ef04db..296bad77683e54056983d7cd655f55397a92151d 100644 GIT binary patch literal 291193 zcmV*uKtaEWP)rbjzBJHCQqpuw~;h@j&vx z1Bvs6V4Q)M2YlouIKW%$dmn>I)_TAr2_(VEM+n%MBn$>a^5P+YZDL8bv9V>zlC61G zx5l2Qdr$4}k6l%#?m72fb@#p98v6W}me#qa _YwQJX&Y8Npx&NnbK5hbtB9pr6c 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�ZdU>MB3K*2 z8OGPwirt@lX}c`CH~cB)9a}mXoY3}zVrPsOEjuzQTB}@v&LLtZkT!u1YyxP6M1`Z| zv&~1PX?KS?lvLF+J4~Z|i6QC%L)~7eNaS)?j8Hk(P!NQy6Jm$e_T{_G|9%UZ%>A4X z*KW19!jVy`mGVBs^r_gw6D609$uP?JjLR*)Wv90v?0xCU!&_WMu4*D$J9FWE%dd7n z*Ueh^rK|4+2HiyXcDg%4z^l zAKv=;%}=?&5Yf%eIpNFzI)}Qyu=%Muwe@eGb&)1KeP|neql{>A*3iRD%V)Ix?|1xW zV@35qX5>#_{O<1FE&!W4cW9`#n#SwqEYIx9VhB;IeFha1DtHcVQ;|^8Y1S45>&8?t5 zC5ye=&?jkTWw{`;F>DI|Bt--wXc-IZh0=_k@o1tBZ&g9?8CBx1jhTwfR2PKw%%=WeG--L-nHx(eka@ZXf5AsT~vZu=@JD@2sF&_Y4!s<0g08!iR)%hdogZ#V~&S$W@@9b zcx)jjusmKxZrh{^020j(6)Ahs1I&qZ(aPw8bOy7<#2|#>_STlgBI9$D$@4d^nZ4+} z7hR^w3;_`-R?HzQ5``9k{AqV@mmGZkz>DIS#uv6cd3?BML)Y&A_O=__>YH=BRLRzW z$M(M5ml^(z#g{K>Y#Gdset+LDAKtMk`K2=Hne@_zIiI`YEd+`sAAp8o6zfX0gI zrA@8tW-h#~ea+n3rjNb&UD2j4n{`oLMb$uN-7X>;yjL`nM0dEi;AwDCH!`~zcyaX^jonn> zZJ`yNL6adsV<0foMv6n!MbQf7)ND@!w^C&8wvG~EhEJ&=2*e{Y1y(0aO{lqJ!KDbY z8C&z(7`hu+>fhSdX_S1+aSeg35Q#t?$WXKDMP7S`pX;7ZbsS zZ5Xl+);0%!ysS=>`q*nd-Pw>R(6B}+DL*FFk!C26HA^DeXKsuF1OR_=X~Vi%RX^_< z{p?$P#+yz2=}Vdx)dtU;9R1dTLA%A+b9zhIiDG7b@}?yKxegb75Vz|E_qq6-TQ`Pe%7-GR9H?hEinIV{WXhoLQ*= z>>C`hyw4N{8^|p`y-m(ikuusZ*e6x%{slxyl0{P*%eZ&poU2u;po=oObTMpP>$Li*~ z)lKyWhekJ?=#^Go+tLhRYtPU%t&O+OoB2lfz(4Hi8kd3*GsMEuNhzGlFUlEx&O~oz z!-CpsYi%)*cmyKZ>B{{hnZ9fWo*jfE3Y*NAvj$YU-|>HK#9|`B~TD z&#k)xOn<*?+o6F0(W4=Px94niRo~n;@22@3eWRmac;hvvy>ppt?LNqcSq4GCHoriL z@F{un&Qh+gtdxrS@MgBaoyZy00uH6fBNG0qwNDsM0{Jv znoq2`eeLXv#5K)|KL7d?ceJni{@!2qWk*B-@=R39YYCV+^fY|GX7d1PqX6+h4!?s@ zlriCDl}m$(D#0e+wWWF{5e;MphqA*U00Ape$Dx@?6H_P=-AaPF$wq(!_bj=+ zrFQ22{v%KBe-0Fi(j@tH*!r%GpAH}jSo3?A-QHR|dvEWdCk{L(VcZ%L;K6S5x#>4( zF#X1|ceT{c+s(;`84AbHHI{kWcyLp5e*Yq%?lcr-qi8y0KUKTABQu20HBFU8;MOT zkgls}tgWa8aB}z($H$ztkrN)z&f+r#mHT(L5 zkGf4AGKlvQ9ByR9Eq{8(IJ?da~=H+RFPcs@*@JKlXYrC{U!CaYIYhH?Ekm zuRrtSuH&o~fXCO*T38p{^z#$znyY?yQQiK5>;td&y10ECP*8r5jWsG4yJQ<}kz~Qe zwQd*QBkcn8UtPZR>e-D&_CI~`%>!S0^RVN$(avh7JLb*&%G;L!xa;|CFP`Yt#)k~6 z$2w3`Ma6F}oV~KSZed+DvFgrdo;-SL!uUEU)z0D+S6PaG*<;~&_b9X-h)G<%-mR|?p@dl;Kk$po6rkzM_u&~ zuU+MN1cjWU+$|EIasLZ%ZS5UstgM_-K}4hptD9@rw>EcY!-aJ<5>b9|XmtJThV`w@ z%>2EBCvDIX%N}?{7F=H4RR6>4Rsxv&_@+ynYwumydT?;`Q(N`}CYj7_b7z12lJ7lo_e|3kA5YF`v3!18`{_O2n1Ng;HyWZA3>&}iPFV!A@bni|8 z%mjs|pz@Zv?Etp*oZivbZHrQk6_s~&EC%q9T~)8E?l z){hP!fOw@8zH#+Ufd1B=T|ezS1mLP!Z6CgPl_vfB8=nKvSXp`J!o>hyIdS}D<0A@K z8+DzTp){GG67yYG&2IbLWmg^=9Q;|=;X6B)0Qk|N{f7nyu4-w$a&}v2wq2O<3PFnX zE2mDrbh7Jh%`JDfFFHIh@cC`8Noz$_m=wlm%lAWmN+}1qMj!vgl(J(WGxGF-t&~GU zkq+KgH=}E?o0-M&8;iamMu0ps1wdTKRs=ROo|{9lcQ&6o1fagM`V*Jl`h4fE!R#mi zCM<1iyJzv+0UR6b6>BCjI){3{v2#O#8WHU^@aC+$`uL@{#@b4dU<&=nt`|B7PUi+q zlJ-M;Pgt_NTI%F33dD`&1aHgxLcuC0xgb$2Yh(eDkpAcfymXBQi zXRs{D2*#vISD2i~z~eiaUuAGoYW``(07Ijbl%AT4Dfq zUi`aP&%5RH(1}lP_1W>g53{OUAKmulUmSe~&=QJ9M8xXLzw!eBkG}EOFCG1f zgx@0O&ZH2anRP9Hbou9)`Hz2k&$5}Tmd{+>J$&NzV=v6EnY(QED$NY2b*)z|pSf}{ zGkC?ko1|k8_w1WhJ4f2{#GdaA4fmIQK;gMYra(fQqEK^(sgXN?ni8wIGmsJ_BBreM{xD+A`tdluCE;}tXf{(8^+y7$aC!t3w8-0lBKJO+PxX>(Jh zq{|>tu0Ff1*ZC3xP0m=Zh`{*C^|KUcQC$G&8P)1%?`+iwzp|sBnE~JIt&C~bOja&C zJ4>oS?&gH~Z?w{T7h`ISXN&jtkwSrbv*Fg${eJTRwQ5Ffb7ch~AR=Z^loU-9DF)B1 zFd|4tUDXS0cS0NGFp}y%yXvCH67mHSfH zMH`Rz+4);V1Sy!ZKS8%{(N;?fBOpoR6-v4@kx&|DP&_`{`h|MYDO z{QGyzohi)*aL@DGWa>F}mzlr(_NDe&1!MvBKez5vkxoOl(oifQkFUQ3Ku3KofK@Z< z9=q-mK>fd4_5c91PK@js1-wG^=9N&=9*5+0-Wp4+C|;CT%+aC2LxY2W*%~3WT-@B; zR8h&uNWJf0a`F3@ESKly>;x&{|9S02TMUV-CkhrKzN>xl$5&n6SZUbTxAyG#!W*KR zYHK^RGZz5x@zv|@Tf73mFHW9#v*%Rb=qP~3s;XP&F1Wa9=AXU&>c*<-NB8a&5#frK z*?{`d!F}S#o>yOgMN6yeDDPV(yEEI99q^Sa*1xT3CafJ(BFX>b$icVzdgVJ}eRX+D z+lN-HO7tK=c<8O|FP-cX6-oQAO6I~zh*}_<*QzXh)v-;NVFoVg)H^hqv3??$!t*_Ec(_T`paHQ6Owiq(sjsLt3QwhoQc5EviS;F(Q#7C}o7#%%dzRiFBUAbIZKroV zcjTp*e(B#h16EmzJKL^&)3$- z`2NJ6e?HQ;Pj(!9^oq~TsEGtZD{SJ6FMMn$>}L}@E|wT=wyiS*STSP_1F)Ic*zUG) zF~5wkuA=eIi+>M*gljT$0DAGrGpB|-Int!0>p~)$S=;iyOa3VOY@n{P!F|rZ@BQb~ z!{)#XqBBOSjt{e(AC!Lecr zAAGa#!8iMu`91UNet6AH0C#OV{i7p;M6|FrSX^H*qta_LtNRvLiPrs%eS<$gF?!jI z%KI*=SvRBd@%1e?J$DLMDME{j9}x z6#%+3;blKLv4229Bu!92PZmEvp0QgB?N&y!gGcWh%(}Qo*2eYu?gcfA>nh~qr3W6_ zH?V)e=6Ev!BgAqtD#DvuYuuO3sKgDe0T4XA-)VF%JVE<=+U?>RCY@;$A1^zXT*zhV z_9r);oG{@Z)Lg7F5}jkLm^lpfi6f`}`!9FLYI*6_wat|kfQ#Q|yW81R^ucBGr49Ek zZ2R896E>j)S>2n7)B_i{|JP-60etts@$c+Ec4%lc1TU(q`OSr`_bzPx_$BQ5@wSVb_s{$_igdx_#b^)y?&=r^^B^c!-Gkz`)3c6Xvj4Cd{a;Sk+ul`6W08=)mB} z+{a%4n3&q@s(x_&%J$kC06m%TSAMqn&~V22^X1`<$NMBPYeu6| zn$gEE*%dD2mn^W1EYZfwGJqfM-}BJUZOrWNWPbWr{!3FurC1w@sHw7YeqFs^g3!7u z&?F6RuWfj6-BkekvY9t~PhUA}&ij|F=o=k*>V*sG3vP!h>hu(VQt2?&)6!(QU zUiu+vrf8Wv-kM7+GlSf?v`1SV1m(QL9puMgkDln&2CS8-u?9y0SGrz9h8CV6) zRn^LFpk%k{4FK?L*Wu2AK>#b78{fa=Z2vJ1lpIm0S4Cjsu(jj5*wJY-i_4&*syIy?Lr1-m&2adtP4C(!Q**ZEjsN z0sSMRM~Az2_Z@%j#D1sZk`;mN?sOIkAu?G8h-hQi?qkD!ubn*T2ygSr{hxnbS_^kj zd2If64faYc3Q;nfXvYNe_xJqb`+Hs?qNd84rw(r=U?3ym_fbMhyGU8%fF=;Xe)15A zItP2i+KZgsBqbqca4aRYug^AP;f;<6MXYCF(nHN{7J7yxjMNIj9T(js&AV~_JD%MC z+=-!68cHH;Rons+t^Cdc!jZYg?38Y)ogrHH|JeA2ef@_4tem;*Q&)cUh6PtX{N@h_ zv;9#dIolJwfJKc9KeXz%iBVJK;(&-$$eP3u09J-?6EQ1NR98{`-evEKk=(;?{(vMu zlu6HS^H~xGvm;-9Zb4gY58oNsc=~IJUfAo|05Rrcv7$IP0QvBsx9*4gnQWWplQR&{>i=ub}%oj^pf(blkC-EW9;!3by7 zw#=%Y0~k@%@z0^KUvz1c=7^b4;Rn}THUH)-=iNjF=C15@uc@lLdfv@B_nEhxeDTDv zBKs2__d3+S|J&RCMpT$t)ortDS^*sD-#Zizu%^TPd)u298Kq_tj6#lPN?&=$h$%Y9 zo4s(~GKZSm#A8yC9Ci&>+ET?guAIS=+7VjLV`#4Q8>aztCR(a?wVKg<0B)0 z-g`%zsmE;?L-@N3>j8Xo|IqKha+-mM_hZjM<6o|Ax}mk&SJA(`bFe3i-TfJxGb02m zO-#%H-7vfA>sQWLR9CTgQ1^_6>t<9wd;RRsZ0~>Mz@W>N@c7|@#}5z8s0co~yl&mh zikX!GfQR?>J$pR6Z%|^NngQI@Qu&Wp&gdS|54_$j+Q*l7_5Y}IgqaoSwVu)D$|$D@ zEJu@uE`H(|fcr11{q)Ml{R7#XpF5=q-I?rzE9(Ju=e)Xw4HZ^kjkIo)GLeFUn$0-j z?;0)9ANw{^j6tWixbq z_rS659yr!qS^0-c=dNt7YphfNzPJDQcMcr43a$e5b+eoQ>ar!h+3csb91!~Z``w*S z9zCtV8aOaG*ilyrPXUG){s}~M#ecj?n*U(g{6AbecWZC|{V(n$&8IVF&)yyLTNc(- z!b;~h@g-4V$<(dxju>2oTe*xrd3}s!RI~FzbOr_J_jD|}qO}zOSOsP;x1Lv9>p%U~ z9dG>Y&Nl%3<25&2HLLB1hxUHzwO;_3S08EPeuEY0zg@fvz~SM+-+1*znGvgmJH!oxt{ftIY~L%nHx2r-BO5z+Z|vM%=-mQs zbh*zAeqhUY4|EQ7cOL34@Or$oSVVnp8yMi;%wX($&Awl^Mn^vxz>|l!K6!Yn{cAk8 z@C4u+Wqg!cuBE-0HkFfC(m4qy6%-g*N49QLaLqBi6JCl5Gs>oA*9{&EK!8^9 zbn5%Ne#VMOd#nPVUie`UdXoduK!c4q&f3z65g$)%?A*+R(qQUpjS`3 z=>4;USc*@K!g!=Y8`&k<27> zi;5e#C>#Gu0Cx3m?u@m{uK>g_diCrN!I!a>8c%#{+n1cb@NX{sDiIY?v?iRB|4Zg} zB-63Y-T$?^`8{i9Ump!bWdO@@#g^`MzdHE9SSHa}KGQ`D6dYU1tqCTOfIm)6dR27hu<<$dRsy)vA6vMY7}p;01gj?lWxYQ-z=X4DqXT(GWp zaLk0^%`6SwR2q`BZJFTq;mrD;lvv}KQ4zA4!3@#{?@@YdPiSVI5e)*E5e*J{-q5&a z^UmWlbF=Oy!(TM9QUs3~Ifc*)+9of0O7p)(P6PM9X{Xk}4O4ZH%+7b+90@l^%pj5X zezKD2F%f6VgTYH`%kEk{Lt?h?eYKm}`|7!~{%%3z_02W^w7=_@9sSaY0z`EO@Z0YG zY;`OP;`em-(9N@_RfK{SMJkpyRkfJ;gU$6#;iBCm@n??>hqtwj9>T1JpdlRbWvlZViqCmK{^r0Dt?^&QES#Y@AU z;lvAl!?4NT+U|?{*AA6B<6|0-==!E`xGOO(MhCg<<~emPn%(ZKmZ`lqh4`1kMMg-` zuSuH8-R*g%{lZ({{SPJgMAZ-}ogOVc>HKpEz(yiSQCI-*msWR187W&slEVG{eY;|5 z55V{K@42>lR(Yss_0)#nbhi3yHwYoc(%$#>@A>pOi*A@b?}pj)UL6@69nS!IdZcuE zB+AUAUPcnm*`Q|uz#~UqU4Q%p!&_cE^;7c}0=TGlN}e~{JVooG?jyzAy(wXkv?fVHjb z*B{$**RsEvS>AZZvcLJ&!L?g^cPG5KXcyW9yBSs!2}K=~R3PJ0cGgNPp`1w_p15hZlWjZq?%J=6<3nI_tTP z|Llw%HNoE5<1H)T35JeTCd)T-n9?AUgQ3A_ES&|QYvia&-Ezr3%xp5OTl!>p2`_PI&>&(?FP$yFe00$*)4!i3GEGK4CYzR)bLy4N8}YY*TDK#2_pjgnbb4=sAEW5a_dqc9v&bpo zAK!AIB9t!{GqcGlB^nvmmaFhjmd{;LTTu}Vf)Go4U)*){SM7ZoTv=4~x%mxE(eV8j zw0!m4Sx}#&@$p}6W1Y00qc%p1C54!j>;eOr87Y>$@rqF3le4EhaO8xX zcT9M!eXuzaT2WhWxu>QHCWf5dop3hi$%R5ZlV`-P+t(OO0h?_7O)owtRS=mu0PJ{O=vy`{h@*YQmLM8!n&XTu+winP(NUxiv4K+LPBUkW*CbEXWprYX4K3-!@&4 znmT@M$7xn<^J23{zYA+=F{hX z^wYqef&E|E`YljEu_@$L7pVeJ7p{UZ7h*6ATzNQHvbd@Rz>$&8lsER>-9Oticy;9T-WsyDI)fqOWA(}B)k#XzLEd{AOJ~3K~&V4AhLM?yQ+e5^IRTiz;UWAYkv{!G)D`2#6L%7FNxTgu-UQEqkns z)Lb|BT>ui9R3un(`_h}gvh~}KAO78j?w4kk8&q=xP7Qzvlz9#Kp@KC3nd`oBhwmhh zUB6DqHrUqlyaJxTk{zw`iy)YDp`qNUn&G0->f$N=spDBUGHC$k)xAZo?}#0h+ldIE zhVq#e;riiZ4}edc_xFvZ#?3o0)_ecUUmhIm{n3tpyn6PBL?c~3{fhon&)UO}ZaMbf z+Pa$Ei$x^3<(|L`vd)$Ac_P_8QeYEx}p6yl4RakI;&>-6%D1c zV1pkCT2JuaPrf;;cR>!{H`2~t9d7_m{Vr@1lMb;mW$Rga*G)U=l_!0f)#F|3R#%H- zye+Q3vM)9~&g)jyEUgUPG$YLHeez|OqN7EKz5CVCb#=w7Yl~mHqWY<0V@oSTqD$X* zXmljwl*Yj7+5mvc;y82KyavF-?TO(Gb`FjoHLhm$@tF|-k8~s-YKuSA7OxD^d6h-2 zaZfN0D~kc>wxn)NdH{~bz1Fy1S{axX2>^mEgd=h9q1I6V0`6sEDJdH-H{zr3b+b#1ZamD_y`Fq=|-1=_c zno(EOmjB)SMgY(E4G*W&WK)+#w{fiY2Zv8IM~YwUi?QXvor&>B+j~2b;{YzHE&E_o zZFYh=|M7);DRbgJaOBvYSYq!`ydycrj7w_EuWzma@Gq~nOJI3ZxTrZ=(wa!gT9g+B z0qhx$4W~T-?TOS#T33WnQCvh80lzbmdaS+2g%67zDi=LoV)tn4+s`9|o@FN694Y?s z#q$8{9*!?AkKVInCV(FvJ}#okW9=v2Qd7R7wp<8RgH*02KVg6KE#m%fPzcixO~`V5 zU8{Sue@BoKBv5jh^B=jX748WaES5IIrBcha4CQ%+mG%a9sI(=3;t^U z;^}44@9o>uolG=_BUenBZeu`{fG`QFZ~+}cK97fqwm=~mpgVINC7+>^wts5>)0NC1OdM~{8wrEe{p za_-g5m(_)9`V&KdB1x8p0Xeqhc!>Pu>V+p&QiP=qVv2`sE?`PN(S@N?-zCfS$lWvE0t z30orG)bch7G69LRC87(boCjd<;32XlqGyyf+`0S~)0beNgJ)DU{@wYXtSzbTOAg+< zpZyT=bb^IX^F-b9Ni-hhQwW6z=po!RDBv;9=(j@{Gi)_=nKizpSA z>D_waKR9GH+w6hs6AnLl?%y->U7P-5Fxle<2+(EC?*?#qaNm%@4Abs<0M8tK?CHZl zOJ+tvI6Sm_*NM&R+W(UjYpoL;fBe7$JNq_Y-u#|LHOp#B>JJU=fnU%eRF~9Mh3jF3 ze2*!pz)YI-SUQ>TM%kokDFekvSU&A-H6^tGwjNvW?=4Sa=}Vlj)o^riurwTu0vH(U z6$lTaK+=o3i&>ijAeS}12f&Wr7k|Fz{;F{O-Ix53nW5Oe6eePSSI>*9XS}DObk>(I z{eCKwC<#WR!6<+Y9lwEi^#MRBE*JzUCInadlMQhu56ZKY;|-rAQQ*n2g6s)tuqhwc zmPl)Y(nLfaI0$Nr1OSYrF`V&$Z22xxAUB>EUtL>#-=WdF_l^vY6DhuMUGK-5BcExB zeq~==!y8QN_Jr4(@K_U*xBdj*y*GB}!m{(Liq5Yxv97u4c(Uy0dziTAknMjR{%_?>5fik!KSN1x|0x zw5qG8R}0C=G{-W&}zMoK^g@QT`s2QQvi5el})$8Oqk;QHp; z&z;kB&ytx<;S#c&Vs=?GGpp=$PPx&318^RX@;hg6y8Ksq5Ocd5Kq3E~_yXnetH4MK!fA5A?gpwO2=m%ZdUG){Weq z81+kv%41gMZ90}r`6nd@Hg(! zT|H$QfUZ>H8+*3LGU@U_@u%i3ytZK$dHlugTVX>)tzTV}mPmp^?p+>@xloHqYTZti z!WkyHKehi4G{0;%NuSR|mMcB`oi0RV6w5QLf=eFa-husp|KdNlj`&GcIT5WF~R%D?d0I>wa+G<2TL!KwY@zx;aA1^oo$Y&56MuiQ}%KoY#qgu$_E^ypxs#~*T46PZ$7T$f14yGD-!OiWPbs2xiu zeWRk~)800>YB7KpkN-aJW$7AeO?t7u#0daD+joC*ES}6HK-v^?w5OD1xxVeG&Bxbwj~?z((0CmD{fqIv8 zZiCb(d|Uv-{9s_ezpUo+x{@cllb_r+rLNAoi&C-gf z__rO0b_{4$ZLvQc9RQ#oZclCK9eeK!{a;y7wYn~}x-JA@LvQ--y~6^oCI^^}Bel*! z8KiIe#(%}Q=7oVPYKwogtWr4a&Y|@7;qjRz>U}Q`wkN&2cgK#7X6{~4df%b=dmF+4 zm_1XG!zO-6&jMYDLObx>YgrJw_w#hWTgh)>J@vi9`o;UCzr3^Uj$Li8Ga~htnlh<4 zecd1SbtK1-yB1eXuU=FZks96sBF`7|nP&x9GnJn28-Ag07)rG##_rtJ`s0h|F|edO zx}-enJIU3@U)2=*_e1SJs)>;7z^5 zckFI$PmBSEZyI7`zbPOm$lOUK?|XjF-<{KV`vQ~mCh&5*hm*H$JJgv--Mg==E1r3O zbM?O+JtjEtoQ+ru*x8wQkT>4k9!cEMBy|WK#4=;COu8%> znpa-lm58$<01GOr0lXUPNA^WCIo`|a>aS^<>01z7xX2P_d4ysxlp-D(AOG&Fdjaf=4Y*##BTd8&C8bwPozBdoUgo0ODd$vFz0}_m zOJ(a+Ijx%suMQ1dK4sdv@jy%XlMob3X*KfphAJ}@l{U%RUYM`NAD06b8DOx0!v>AG-@c(!|z0~n-sIqScRzAR^wtGc zEnp(XZ`(FrHRJNW)WE&lf7Bj3MvOmny|i!O(EI1SbMMgM{?y=$2nRaFO=#g)|{3YZHpJcBA zaYI?l`{sQdz@ec%o4bAwfPIGSAMN^DU+OrRuV{KtaVU~&&GEaqlmtQ$1A0D=qRX59S9MAKK&t1!u$hIX-1oN-Er%%;F68Gm+SyRN zCD?|Xi5D9xgxgY?5~@rT-y1pRndswSjH(zJaj{a|}?c-(V!5f~mJ z;HxxNu$HGMPhR=)H@{Z@y4~7kbUGn3)7CXh9R!+dTi$WL`}}Bo?`O6h0_dt~Ro6G= z7tKE9v-a@|eZ$O5jG>GtW4q$H9SRsp>%|pO39%MOy0mAG4G6RqLlJa)d<;NmDm|P| z?;0BIPNwfWzXb$l&uZ5YUZxC;nOR_FT^1^;3JD~YaY_U9XxoVw`i4E`pv4%ojzX=W z@)Dcc6G`#tKhr(1sb{dPC@`AV?TIn}+W+v#iC?z$?jDH)B-Ea>0!pY=<+wGKF-^&z zZ(Fx(IGusDiTr!}@n3ZGF!Q7By#Qk4-tLk3qwW12i4*_@%8-8TvM7EUbIq@@Oa_jH zeTi!B-#iWcOf({5VAs1p2yhHe#>h})rCDMStsJiyr=2-wf@%$ft zymHk=wRNAKyYQ*5Haih{!Wkzzq?j;@D5ARvHhc?QQnwLdj~^IPKl zR_W8W`%LT>faiIBE$Hlkt1;B9(x&U?T#eV9k+W~_8#uI~dkYiZKW9x{xTZJR|Et4K z*M_SXRnPs)B_FwG>-~MnA=rzhnnG`4@UE@*0jBhqQM`NiZ0vgR&gHk(gsTZ0EwZ&F z6tU(+CY8vf7FNx9f6F^H_?|7_GA>PMV#UC$(uSGk)0z3D6FUh3v3!f4ur6G4+xa)w zmej`6$$Pebiz#avWYSF9)iNQX-qgS?8}IB*4H>}_s4c0gFR9+xwHZKj>GalE*Z21P z9KeZGKa6X*Tkkzlkx)$`N6-z4&tB4e0HKxP1|XZ)|ql3XxRe>6pIWW|>5bpu{}AaUaU zm%nVHToqqE>(8#9{h@(Wk8@LtnScQzO{_?9SVcdw1s^)j+b`rh3>D>U5nRwERJ1LxXA+_#2B1GZbey`om2DqAhaOK1bY)cU1 z4J#4IjnxIzpVk}uG8&#mw9k%4!xP`K5s0C|ih!Xs|M|a$I=C&n*3`X6iWD-Q;j zR763%sXxXh>plbHEzDvWIxY!dVMXNemGg(UtqA)2`}Ztg zIpxB-DQn;MuH*61i)!ltJbd&(XEIKXzsU8>`$q=FvpqEud0*qK<+W3$g~Me*3XMTD0k5{f*cf1pV6+qd60U(BG-3=v?dzN0jprX1g6!4QwXCm?aS9h*E zam=68%@$>;fX(kDEa3U*;>=;IITY4W@Tc}ay`75KIJdstn`(aBrQf(YncCo|-H5Sg z@W6L>|I7}<15`8^zH$Eh0Br2syl?2Rmt|Tyksd1vlze=_wU;%l0Pu9%hTg>B_jmvF z&gGw}57&I_vb!I8^$Cd^mpE{cV)BSpBov7RO9IjrgW*9@Jd;2Y0HVPX1PllTl&KhB zAE{kX-2z}ybqfHG5wM=kg*9_#lr{Av2VE?_*rXR#&HdE5AFeB@0r0)ukMt!6T*8+y zCbFf!g^@yYUvh{@hl7#-HDmQvvsOg{B@*8z-6qoUtv$Pcb@=JN9 z0P<+^H25J+s3Yt8FVx@_0*mV|dfz#p6y2DCNFWMeZq<@IF8w}iLf3yB_|dN3%>crI z(yLmo7fo_36aUfnuMH$l5D6MNNluftAZB2GeE*M2ilS!v2r#^5)32OYvFO-n>$;Ao z;JoPY2!Xg4H>>2t4JXyG2$c*YT^fJ@4c$_?_`?fttqo5Bu=dEKYmfY#h|I;lxNeCW z{Ps&Di5j35Sw5LE&e&yFq_Hj&5DMeSW$Ui zd5DPoa^C9N;@jq;EuLBRhyM0a4Ps(Qg(vClKUP!?kGm%^fXZNY2MGZvV2-`#>m@3v5=Bp4bPtWmVlE2x0Tqik3 z$CKrrz4jSHq@Xn^CAllV?C2{E1&N5X2Pjs=%%WFU&Iv9o3KD}f82o(S2vN*wm_!69 zQM`Y9Vz4uwI)(L82IEh$V~}xlD`)$#Z2jtnns1&z3&7MTUo=-5(-RG+(;bO%(L()m zuLuQK)>UMmM(9kWI^tr_B%43sR{+N114<`0JhsjE2}GADEmp< zrrzNn9zHGs?R;w1na5uJ1Vgso;pC6%iE8|rZp+iEqX4${_kI7>J+8ivn=g@=-}Mz!8tyrNS$U`kKrE9U9ZNHzF1NcuQH)E044u z%s#l#T6Z2{IFg&>+3%t@&Wa&l3E|m%dw(i{yC7@+lSZ6hx5#HFRZ1xh_5sK%lQqfg z@88G6-Iq93u{XD*&Sc}hXM%zgBC{uv8PWteJ!XrE?%%epU)#O`Kwom`?k(TEbNOd# zORC#qUCZj00JiEigAmZfv&$R4wColDTaWKf>eRs45ZJqS+XHgh9m{T6R6SQSX)tLL z%vQSs5RkT0HPN2|FmTb7C3WGN-qgUouRPE`(#4crK$fIKf(C=ZTJBOBTCuuu{`quujlZXaO>cVvwOkN`evbY2R|uKQxxj1kj)A`Swd+>`(Q;$7k3^gqeU;qMd!4 zHM6PL%L7TLXndSlRfg!is^EhcR?dh9AH1mY ziVc0@JZ08yo2=HY3_KjOC+N`beFJXWHB=c2kmi9552d~KQGGPw%_z;E3qdn!lhF(B zzC-Z`+mcqiP?GX162oWaM6a1%0*MQdKmZ9fhbO`9r@2EXYkqs@WEigN%`ZiX5a55Q zUY8D;83b#HRCh0)(G)HA6;7BaH8`U_Gc(y_DQ4~DJc+4hW~+iSz&E!{xoT>SAH(cl zFPKdffaVITi{7_%4geh`{tH?fBSp8* zpZ=L`hoM=FME)&cXySc;lotR1AOJ~3K~w-F`-7+=6tq1PG=u2YZAZkq85>WJWW4rx zsv|jmNsTW(gbgO3OGIbpFYRu1$bU}CCMXa3<~dW}IjtH7h@POtJoH++xBp-NpDxD? zlc2*qN+WBAKchUIC;(Ppz2GgtYxw(NRbu+m_RaTQRD9>ot)0mPF%;oD`*;8Mv91ws zJnvq!J_Km~_JQ5MZa=zuT4Q-IxOJdsYhQ1+XJc_Ue@b}yr{^sy4;8ID-u>krFFIsC zCR|)S<-X-Br$@pcnKk#H_U_Oo;WB&T9!n;+^!4}!6e5zOaa)(cT-=>Ze0}fsb4n|| zv1glzAWwC)z1-gi@I_U5@UtKi@&GemIc<7lI2y~0ePF|X3BEe)e%*84vTK`X{q?*> zKRtTTeQETl0*Y|C^uUuY>BPQ(VSg3RGe>yF^#QjsC((NV*gz-0Z2<g|Nsur$&8CJ@P8nAX>(P=LZ(`-ieXK}PY+zQhyQbyX%)aB6&jWx8 z28xL2SYpt>z%nE3v1@??mxJ;b-hzUdlQ3qZ~5lJnsfH{AEY^JOt)6+HQsLkz{3ZA z*_Rx$<{`uA?%DDk*<|ZgU?OrLjT^gPGUiduLa@u~7e+!+*o$GG^6>uu=t&K1=-Qm{ zQiczSK}Iw!(!`>_0nW?~3I|I>>wa+GvtwU~1rD18z_rLAeAg#2LAlWAl{OFVC zeqlq$Z#T66CYed(I9m*Z0!+H7XcL0N=Me%-9vIrBq?)II{n{~ZSoj%1GAA%dF>_T( z9W$4NqPJf7Rff;UzmogUVm#&h*B7)5}8}ddC0^YicHfCIq$*r}q`ZECTjoT3lXsNo@`! zf&0^S=seXg^baXe#^7IQKs82-nK|HNukNmns`^2rGyu2gY_e zlF0z*NTy!slcLQ8AeK%)-y7?QCl^&jo1(>lm}-?@in{KPd)wn<07=0LV*1rv7hO_Y zX8I-o^jP}|+o#WJOza;dkPVcQ%l1i@xYLk*v$(!_idl1z29*E3KH2`BY$E{6i&3B) zZ-0dz|GdsnV_%i&M~)tN?$~j5K$7kPqV7bDh`@-Yy-&Qb0m!Lxy?aK{$DQsGXNiX?gz({Bk=8Gj(0l8>Y<3T9%f>Ia@_0y zpqMq2A>BZZ-&o+PnEk$bHUg!xQ6UnlBON+1Aj?~>n|c0?b1ylb9QyFO2YkbGX98fM zRgF@V9iEN^OWr^0f;nYV=9JgP(__bzBhU97{9Wf>qJRc}?%b=+uW5RwbJsuZd?p$y z{#eVUQ^TcqZu<>c9j@S!7X>+g9qV&~>`5+A#BUP$^7NY1b+zGq#M;&4AWZ_VqX1%f z62<`F-fa(<71kzf2ZY|l;Kt-;A`(<{*-ddg_#uJni))?c;*%o4%mMI;u_39K$vPV* z`Muo_3HX)_5t{2RzI9<$iw#XD;a8#$Ki#%o>VyII-6DT9obzyIo7>a6NDY%ol@ZQ8 ztE@qOiWWsp0FgvtoOwRyPF}}XC&~Bx&5MRUt}9<1@9ZduoDvZYgsY3|Gy$yg44sMeXu?a7;?#J2efv`q zgewWNU?rAF*P)3SAsgAw>cwO04i4@{c9x1sOCVB9?UJi!UjIgR=1nyx`}wJ{;7^&@ z&aC2XBsS}5JfqLbf3$ttT?t{DZ?i_F`>kr~$R*?HBl$(w!@m6$$(bHnM^&=ggE~3RGk-(2#gj zvz6I2a<*geh!GHT(`!;NNeM3VE(4@&iAgrU zN{n2q&}sMSD9|rk_%(sk9I8LvotcPkoVQ|5Wqnz(wa?nK=IX|Un()H$!?Da5lc`53 z8&no5URvDwUIk4>^;Q2J|c@tTH(Q^Mu(%-FMCdru^W>=J1J zKYZ&AQ^S?(k%Kle9b&;c0gw`z5Hl4%{azKZt%+z;VCEVC(^*U?N=HgNaD7J!HWO0ZlAu(L@@g z+%f7-VP{?5xp(laI#7dJS zIG79sX7;QplNe9|cg%>~nMfxeKfLz3Iaj}{dG+%8B|XUjS(dtRO>MXez{c(^dk0=M zF`LMV?>IxvaUnS$1AzehaPR%6=VTrM>v}1;4njmCPBAlBlK&X2NNH&0tj`LXYywLv z9kWwri0e-J;cP-p_FR!_)mHLnX6wTv7<-H77>*|W^F7}pQ+r4WZ8&2elTsii?S%L4 zSQ`-yjh#>kI2OXpStTD3t=^}UY7wy*>b>(n`CfeTq|37Q$fIiy|3VTL*|_ll87j24 z1(;yx1(8+7h(LNE*)y2z@gMY#9;%~L?02fLWsLKPt&rB4Q@1l7YM!G-IJB=-*lhr zkSUby({FTlHSPRQIr(i$&Ryr@GMmB7<-tIC@O7)L$i3p}4rt{CtOe0N-O{82m||%i zOMBWrC~x}WGq;Bd9_7G3Cti6_KmEL$anz`)4(_?NbAA)=A-bN~#PSTVoeWxU^H z1wQkw_C3bvs6Rb?X#e2QN9W92R$I5cHjDP(orpi#e)MNY4|FCIWZY8$1_-)4p6D(~ z*dyN=YwXtAmgo0li~Z~SRc{^W`O>y6u}s=8>{_q88cAo~zwvkPX_|da4`g#p~2dTe`NhgFOl>m%jN+z_q+0K!|Rw2Y)vM6_d| zQ@&xql}B>UYofq)GcLSw-il}_3taMS$DVKOddB_vv6huL&RgOC^Rt^D?MV*HpDXKU zpI_6org4e%@J!cUC*^AJrS-GVub#1{X;Cy(%)qwi+G3eBv1KoU2u<1PuW4Fz|0hc?-TYMvUdjHkywwEjo&bds4bojUI; z7hb!janUz+KI0B4&Bo;W(81^bx#rJ4HhabPz78Ui^xaA9nS?7!K)3cqm6OxAK=DkfFEs$8O4+B7 zJ?AN?SbNq@EzcayBzuwrHY3VJS{UySKngK0DbNEN9wcRq0gH`vwj@*S&dT=Vpf`EH3dgyDI>4 zk6=HU`M)`B3iLD20t%De#LvuUz14$NrH65@2a182`wX zp*pLvD<&oi93I-`SG54JjTUqt{Qe>1UZb2?0G9GlS*=(b{4=ZR42<>X3_Isv4^YX> zs0oa<+K>_0WNexe>BP_WejB7=&B3sWh6^0XIqaFiigR8%YwRyj%drO9e22nyfAV%_ z;~wENx68qw$z-(FnM|f;U4gOb@|yp>HSsvPLUzs|{SmEBi}ov)teBvPv+oRN{n*C( z<;sH-%?bxSpe>Px4Sm!EgUXgm{Qzc1gUmdX;lXsqKL8>UKX!IH@BmE|FpL@oXE@JH z2%iw;B&($%vnLsp6LE2YNxo@`zuf_8$-aS@;Ib04hR7WkrfKOPO>T zhIU3VZBSs?0vJ|=0%b)(#pp;%!2g>doBwD2wCko<3Dt?{=_qhAr*pSSuju*3K5Y+Zcn(t^=xi$h(wvW zJDG59aOcXF>!*jqM5-&1oS32Nzf8ns$)B9C3%;S|{A#|>`nAjmO=fIEB&rFc-_bV&=Q-mrj(zP97(|LWQUpez`EpRyP;Ot z0884|WwBy>I2efrBT#|<)N%L>Se%;)>-&iTa=-ePMlt0C$~cPvGczP&7vVr@BoJmo zU#f=ykVzHts}-OCEb(VE!zT!ZMqbUvz>72Aiv-KU!Ehp-NO?&}p(vjMk`<-_0Fhu> zBoKxQ^d;Y*=>CSo{JZ~Tc_v!Bs*C9xHbEF33t z10phxUv{oGk?Nr>LD&>%C1h=Ak$ieMGare279LO&0uFnCh}e%QLmI%*WEzfa*~IA) zNV`}Rcv;HkAj5l9O98CHcJkW|f=M+QCV7lHFoUcyAa~UnWNZK=P@Gh*=9I2{DPA*BQRWr7WMt z8tSmq02)qv!)ZUr$3&Y&*5Z+SfmvpWoDyxAvXR4--991#^RTnddjtd4CQA;v(PV~m zfZ7vDh@v9@&tZT7AmD05#VuiZn0ZoAKQN&3eB+)PjJXgUh8%}5RnK01)=KKeyGUklpBMcqZ?bT z+f~Lg@}h)Y4Cdx1#aQgoQlSn6XQ zk}BIE$;p>=5;4N>cr0KGFy1%wLI8j4Ip}EMrw2FvS9isEl}&4!7P%{#IY4?-&k;%9 zo*FJ+)3}70|D*NgSY`~s;gR05q7vl1bV@;c1On|G=z93jCdK&4!50Ai$iYqjvi$n< zYMa(HE_wLiivVt#cPW75$&uS$d=$WrzK(xcas9b9jZ3Q=Um0u%Lww_FrY$a0atuI^aZeg6>j!n6VPlj4tKYk;=U!iiZQ~`$mn#~#DY%C0j zp~>q_^!qhTCNO)X0+x!6H$sN!js``{q!O7_Je>qdG0R-wE^V#J*3E7|c*F|YV}da! znlyKp!3IIy5u1oa*T^9%8Qmt<9SoD;lYJJOa|MctK*>xpl}<7<6cdwyZy{%(R|zkb z%%lV&SNOhJ3S!PhAUuQnk}HI}KONJXB(rkFmTUblWHTZb!x~$xD8dX2!A(R)M-@+v zM3ah!>3ivzxo@lotmGgt9tz*&Oq$xjJyR4~jWr?I&Nn{fRpL$ z8zh^NPrFL4$2yqn&YZHB8{YXCcnqHAB0$*ce->+^nxAfFy2^ zedZj^OyasTY0d!P6bT|Su^(&-di%ZKcHcB*chNI%rg;iERB-8p-3e-7%*7h2P2dH4 z$|NZX6>1l_ZWKOc?38fTP^=+TfY9txcw%F7Iy)f%W>TEx8sfZ{#~R2mSusrr`NLzZ zBfX%THQ}(IB=zUXvhJnIgOEAZaOC%FvZz(9Z8REuwao#@5lSc1^!(a|CX(z@^R;yy zyJ%|I=Q@>=+|@+Np1ZR768gYSn>9HCRwuW4-G1v~j!bC|UD5&r;xNzcPx7zIs>Ei@ zrYmRE$X!VStYU5EVvHU#9iNIzc3#FN>XGrZ6Op@8gH%?8a?me1>+B9Uzdgcj%}I9G z7hL4NafIPlcut!OI}YxOnivG;GZ|zg>n2`eS@`@=@T{J!2%2p=pHw+AzxwqJ1|Znc z0kH2}^vzM^MZd2`Lt@}`*3PY@#;tb3uF54vvQ8VnO7GW!o!eZq5)s3)%KY$AF)=V{ zXF-6WA2l)1H0K*@Dac<^ACmc*IF<8EKRmf;w>;w!GmALuN0&V9DY$zT5Dpd3Ew5+h zoqZhuMD~AWu#*Nl72_REi`+AaNCSU7e&~H3cxcwP%zApkg*8afY6Q^VzQ)OD>r*XZt`W zpr7s71z>4aGx9f4F?+x3+zVhzI4X*_h7`XzX)?bC)CXoSyJ5}>BFc*pF_YEIisqEp z0T9SEx$&9KJ!=}5Oo>#@DW7sIF+8`To){1A-xLkKTv}wX3>D+t>gIPuN`Ke6H{ioJ zk^vtc=|uxBnL6)@)|XFj`(C>_T*=8xpMFSPrvmv|F7w#{R};z1%JFvJ2@(%ZHj9NA zl1XRAZ05l1V?pql0zm`=u4WY_i^1k|u`nq~1Q(?k_V89ju%%K69jmX^rs)tu`ZM3%I`HksUb0hvt| zBsTPk32RF>_?!%NX9ZTPw`>13<}Lt2vnJS+Ok907LNV(gsodCo*1b~$y zl5BokMpNfr29vho6Ox6s0S+(#a36fN#3}bZ$?j|JW!WlRzAxcRUnR*bV+)i(S!YX* z0_>isSZi%9OSS-@OcwBD@ET-ow9E_=7|HZTAHw8lW$BXDL3M# z`KD+lPn3sGqV*TIdt=?^s7WrE#^g@rUg>|9@7`>3b#{0*{Kv9gX3na+t~Vd|%kSK$ zS|j&E&V%x9pYW^spse;Q?*05t&>CWEGNqIA!^m@PU;#fPOIp&iqg7cBFp=wotd7Vo zeBZrl0J1^*PTS9!kvv>G)5FO|_1e>SAN*{}L99)NUkRp*>)bx>Y`|t_b>p06&^}c* z>jgEg-HDwzcI0}?z09tjf%$bByP+sX-oNgriQ~-amOz3!eyZ`XGXk6}X%k@f2!wzV zBcvDt47itx(agr+Ii=b^yOSyNryTI)+r(~9`$2v~m{6cnDxFTh_8akrJ2wUz4K=5% z9>DSB$f#%1XJB}p#6+0JCjG=y*2LUWZUA_vMk{Pkx3+FZe0sr^qnWWyCk{S;;;=ZMqzTm*+ zsJ_-1jbn-79fMu+{nT*z)Nr}W`4_Z8Si_&c9gdkgv~w!zr-aMzx$s)wGYxQuW!d`h zNU!aXB)<&Muk?2SXeq5V!^=ADC)M0>St#1h~9zSTa9 zBnd#5&KmW!DE-V#_C;_eMbg9pGg{KX>!R2ctQB1OnP}@NxZc6cesRNYNUmg_>jcgd z#mILh@;)=ufe3N{03ZNKL_t*hw2YHI+72M^Mt=|a-$48!W+YC0B)JM`~dK~AyPZf8MDJ>#L~e%%{q zSMfgic*I@o*dKC={rtbDX@WvP>i9|EH^4acL8Y}O1Y9KpV_RZF>{g&uQZ0-v)}mZ& zYCxXh8NHF_FJS9=o@Cp;S%Nv0#_sPbmz$iyW^{Bp9G$kTjo@b)wDO$||0n6t`nQc4 z6ItUoi5<%Ni}We!MZ&~H=O!_yl1*l5=|y7!q!@qOLKHaNlszfIoj=@_ouj;8=bii=>KIq;nb zmeVSjP)yIQ51UNai8LqS8){lf`Qee?XFGRoI(8_o$8Km@apT-eY(yNaGOxGycYLe` z(NOVqGcJ6*?d3=?cvH(tS%4`eWzQc!@X*2MPo!dCbzW72gyrA4?boq%s-?Uh%+X*t zQdI0y8^DA_dJI5msHE(FGxz2Ja#dy8`177xx|Xi0UaC7u@11malI|oVkd1(3;Tu_0 zKv2<9S=>fYKu1UCH!2XA`DVn0#TjwN1p!AzS@n|u3M2@DEI`)I*6F0zbb7C*VP{?j?AXiFBty$Ed9zjsNMdM ztaj(@sQ5gHo)Y;f->oHoIo|pO&`adeWd=`x}W>&D)1gwUIAC27#L!YJKo z41pEK=WPUX_ClRkrg!M6E1)@s_A_j7v>;fr_<7!glJUl8yUO3CWTn4m$J+}4OcF9J zNzuffdDN}`bvPVk3QrTgsx`MO3;ewM9$NnSl{CEmWT=pB3p_`oJD*C(1Me6S> z>z6;?{>E530gF@m{sS*YQsYO%0~wkCQdOQ*L*lvygHimU!>=ev)%q1Th@KJ{v5x< zX`nqp1VoeL4;^{UaG{e_z+1)PU)!+ytkPO*-;7$~3?pit;ITU+sW?xQ#~YTA9Cbyl zq@CWYk+Y0zic@V)%9~=X7|~$**Py)D?*T(wj_A3kV6aNO*8ZV)A*NBA%*<_NWl%3E z0T4E&OB$Jk((t<&)>uI@v+2*ESa(=vwpJ9wqy_3U)+?LMrbtzE`^b-@B^x>lVm4gL z@2%}NC-)oKq2SYV35$xA1E)1Nv0)2Riy{j)>j4PMf;`ibv*AwN=<`k_AHZ9$Db^gb zJY4rJh0JVfNh-rxyw_d}7@0yWNI)8dXK!o%RH1H0zy|cXYGlN!xy_^s;g}|8P7~V< z&nwK*XlGiO*;>(L+T~1G9|_QJvRdUxWq+x!EmY+BQ%G_|^~GS#BNCE9Y*VYFWG1pG zO_H*xwX%c=W-d3(MHOmsvj!G2vxVTz+6Ns2HM25VHPi>S9xz>QpHp5j&%#DHKWQ%9 zJnSx~A=ZpaO@4M-t8*61nsT~YzcR>*)f6=;ThEl_n0QpGZI0pQ^hA5S^+%i*nmUy# zY-9;4G-&Z5>L_S3KPoZ$a82WC0(K2|&vyG~yZqNSo%>%0UPNY!;^n@!6Nyn`5QO22 zW-|%`;>x;Z3a0+*$W}#K7EL8o%RYyuXESi40?#_Y_$_=o7C_DhHMDU}%Pniv-5(2& zr4vWO{X$c#8nNq8{CqHN1YdjYk!u>(yuZ3-j>oraxbw%YoB!whYhd7KGdlyKFBW>X zXP@2hDJCrhEHHfjI)k>346|IaCHAaYsU?a}s zG|>JO#A@x*2Q?5nZR?M&-xZCzs);hhJQ1W?V85b zs-oD#ZCkxI=f<-yzp{RLBsKofk=G0)27~W|pmlBo$xE`WDWChL<_!S$40rzG@K$v} zlf6t~V*_$4oIEx@ku{fcJEcTsZYtZN$jp85@P$u*Pjy}}WM-euuuq#OYa0Op1jxR4 z_^!Rr+_m=^ucIKEjL-AW0sumPB4S=t{AS(f(;)TnSL?n2=<1bVVG}H)6NzV4c$zgZ z64PuoOQ+My)&n!{Y>NA@^`l-_b4V*0cuNcJG>O$jOhm*s&IjCo*Fvxv4Ch2-vYnmY zBhc@T%ov&klYwwlZns+Y6i-`*H;yDT5y&JwpIOOxTurgU>?vx1YVp(ze`jRpHEtyT z7k&p~Te>G_=g3PR27&RY&d1i;!^+snV&7$Y8udGDaqX zBqmi3O~Hw@#l@(Y4&D=kz(y$YX%_K5C9YQQmCF3lcF?@M+iGhu{xCDBNm)b8nU_~X zz^QwwJl&a91neK=Tq8`q?p5JyZvVsS1R`M*>1lg z6@Pi4UH6uVv$7AEbM`x#S)j~1BPKkak$z@YiCqG^x{lSuFD+|^ z1Q1Qe1&gcdmZ{$EQY7#MK%R(?5Nwj9wgi|Zw#7Vuna^I}ak$O501dt})o6b_@@^m2 z+l$raXoW+k=lmfvSY0juD=Va6A&H3vYp6f-!RA&+sD4$fkb7D%f)!Rxy|s6E zMa6B-`OQ^69Z?+lSy_J5hPoA(mSh<8?CL`5SpZfRx6B_#0cJp_7v;q(W^{NuvJ2n2 zep@ z{(m!|$&$a>(}#cLMO(T|TFaSjD1Cuqb!?1Sp(LsH$VC&wjJd74BjpTVx^; zOC?OYNSf^~1f)oBj!Ra2dC3XljBeGoP!kn76!0~!4e2V zKU78^vv{lu;+W~Dl5O~g#TTMJPSM>Bi}A>cIP&n&nT?ojGWo-BMja||B}614gr z6_`8~VUk8AFu_n|&kWRUQ?-^&wb$~XRW1=TQ-+y;rp0QQw(i0+Jyr4nyeC($J+rfr zhyr$6TkiTpZxSR`h3)qm_9n;+$_lQjaRK6MyThZYcc8MHcR?`Rl4toHb%hRMIh>R) z4Ngc18>D2uw${D2%)M)L;=Z;qko4PWZP4+@z6s59er6@-O_*X+Ikwe2@3=$;hq(f^ z05Rj-puZO3w=hT1TV*-G0J2N#~`DxA9b{ zd*pz_QSGre2fSUeiJsVaXKWmR@@(IGb_0M-eIw8G4l!eKkq0dHg~u#5;u*IT=Xktx z)?A(x7Zvd_kb(lXde*;JbU?jHFWlmY0?v3XMck$!WircOrW3 zS=~O&Y`5E|i)WQgnMwqQ^;bG`{%Ck0k{b8f9kac@ld&-fTVtU7hpVo({_vZNE(T%O zaOc-vd*r)&HZ=xjzd6(eGU5@K(?4$A{L8~zW2p%Zyo~`-k+F~fmX=ig^I4awDd4jg z+`anaFxQA@yZ7F;=eb9Z?R$e?kQr!7>2 zETRL=PJ6GkuB&?8)6Fs~@0TibJw5$@8zEKP8fieZlr#>-2Ky7EGk(=~Ddvc!0sFc+ zXE&G5?~L^PsdLL|*aST`SDB}@);DJ$HaeIX?2nIt1yP#Gc4NyY0qh*ux1)a-Gu8X5 zn7Jczf<>Anv3@8sPdGo>-p$!bUej_3b(MUYya_fPN5eo<$>PD-z-YYhJ?Qw>#Eb2tt<&asGZ_QCHcx$UQK7>>6hF}$>4>EwYALPs&s|^rK>&{*{zWtu1!QCK zLUn?+R!nc``&;)k^N#5?aHcPs58$2S`N=={$rTniH+XJu@&DuQ(7i{aD)NCLiXA*U zp)5esv{xA(U?O5kMNS@_FgnjjXBH0F80lJ%qa$W$Z%j7gG*lf$qyZG!ZKJ8QHKv_` z+ZXzo`KgoRyGBxq-Bf40N^qUWetlgbfIALEMpJ-(RWbnE7I4UL60GWkQDzrj9B@2w zZgHJQkhy0ci>3Z?cj&3!1b_`?u20vxw|MM7IvQo>7v2|KTIAU9*P)mClS~=DcWs8x z1J!||JkgL-_CFwyhmwlo5^{*Z1icbJ^bxj!qozd}UFx(vQ{(0Tvu6SbQbGsEcvI@?ak%wXJX!ab) zK_gbhaf$|@9BiLa-195OR3}urT@S2TcQ7>k(U<-L049Hx&+Z7PlbM8AU2cQ`pwMQI zrc#y~;OZ=4IwW%_(5zvz(q}J-q{dCYDuYq{!t%-mfs)=>_{r`Lg;=bdX8=B2H5b6^ zLxVdps9Dy)Sql*p{5D58l{ODbKvcLr|F(41@?e?u!9Co5_`9vUh~cw~D{ATi{O6&4 zkyz?W^A~-wsrknTTkk)z&pKRrtF@Lvv)LgS(^dOJ&tdKPIlX2rztRB$5i)dCsNq=IP*;tuLFsqqnI0o6{aL1Byqa-0` zb|>9}LEfga_?Usr%wUrwTvtyjcbBfMSV0hf>Uc4pN=T#)BNTzi1}U3M=dZ0?wSV}? z(;ZtfcOlrEs{)V$q_a03=aE{})X5WVX zVMVIJoHp{nAq^wK%!?KOsCQtBMNM?G>W@=GteF=h#F|J^hRaXXlvjJ~k8}=%Qz;@; zy9@4ET(_pw=XcrxJkmMvgM-}`|1fGi1$Uo4_qE z?V=(-BolE&`sD}#~qg1(Q{1Rv=b0Ny5@B2S{V&napE z>W6yWvrg>%i@FhFd~tpYfd6ejq7=C0r6pf#YFQqf1)wK7_I!WuUHf;L#jXW_Pu0)6 zroO4d;|1_!=dt?_@9&Mr%vL3U6(zwN=C@S23m|UFAa03bqhioc8p~Q6RM5rYxJ&y8!;`$kt`0SD#-#?}_%ElH}ge z&I_OZf$7dw@{Y|+(qMP67QF*NET8G#tCF{~7|6}WiNM5t@zIaJ_>+15Sw5%h@aV}{ zYC=&1Fyq0)uRe6-HN1sA<+<*C&vk3FOK!x+l2>&B+; z{m=BYHU!EG9R){6`ywgBM#(CjQjjLly0Lk~jm;b0YG5vW`ffnZcKer=R!36f&vmx~ z%AYiC(^TncieGK&t`Vi<*=)8{Durx&w>FpLPsm1q1h21HRpu_;(z7F;N&qPHlwP~w z^5)`3kHZUKOV74Pk3KVy7&bR3p5-q6!s5SgDQN^S5FdK*;A5}%?^lLlwWXH2i$7Sm z_MBN~4aA4<-2Nj$%&>veOtRcndc)#R)cPvDcJDxZXnX(OhYvmq2mva06@R4RQUIHK zw?$KNLBxz}7hGBEo1>;gt*;sk1H+R9*+7QfoQOQOf)CWJy|{j@Lf5S$ZTIi}-~RXz zGp{ILbnSvG0X%r{@s3CjfR8j>)Lh(jL(8W&Zof~>SP4S~>KN-fFnoAnNz;Zot6n&< z&9v~dE&x8W&m?;{WV4cp_1mdPjwU(vDg6$GEJ5a1HhqSH&0SA{1arEfXwk*>A8#sI z3}7hHzpeMhP3^z7*3DX1bJ<06ulCvt0laqNg=ddGGL-03Uo{jjxn%Cu3dBZJ(f$3e z{pr|mN8IM?JQhZ{h^f=>k0Vju7B?tJFcSCmGkd?)gS!8+)udeUUl6k4*ooz9#f56 zGWQb=#fyf=2c9_ivsiMh#5?Qa`j4-z`Or|Je{<&_tQTfUJ5IcC>AX*@t-b8Uu0M^Z z#-z>$pJ5?0z=wzwv(L2Heg3B8gVkL9VYS?x!5nWQT31#OaL|Jt6P+=A3YQi+E_`W78H#RQSa`b$q#3xr&Qo7#yYQuw*OVCxw#AQExL0K*You-~LQXj>XHe9QRJc7KuC6~3k3HGl!Gte0 zw%jnkMW0jYExe|_so58}{?#o2nB<2mYyY`r82|;PuBfSBQCjxVm;M|{C7Ez}RqZ!h zmiZlawTb%dPSbyG1IdNHzyoX6>Bg4_XZ?Qd-+gq;UwY%QY~MI^xn>2?Gq8KmCJqIYg>q=&*21cV085P-W~|@hYN0)KjHJ(3!MeX znqCATl1x9@dF<13n?60a>HZ`86zH&aX<8q`TZ*PJw;nw0?LTMH(~}V90yvF|#jfG* zXmWf>X;qome=;^|vC|nYYjY&EoO(!^a5543bI(2o#wHS$Z*^oY`(`{Ot zHScj|7kth*6Xhj!7XaAO`JkT^<|IEqtCpca#eFl!yP;Rb1**4#AUAHZ?E`r znY&ayh%$Ha*Oz@^{ja1ES1b)>yn~DAB*Y_XV)Hc-|*2 zoqM%3UAU#L@=NDlUE(hLP3wK?$hw-#u59|Own(j>y`iyq(f3~aN<1CApyoqeR3`!e z03ZNKL_t(nHGWpN@3nhZR$N%&n|IgtuYh@F#fB^Af6im`>a}t8oDGe|i|%^$mV}IF zFc+9$lbj|NE@xpw$)e0m0|*dOm?cLqKok@DfI@VQxNZq@-PG-nR##4#yy_?t8d|-X` z2cBvFJ*m=5`NH0Mi#+8vR&zE(O3oz75Q|$HyaYUSJPMMd6SQY^qS!&#zY*Hp zpIBB@@Wi>rH6GjT&4oWY8kL;Byux!`tsB5s_k`~`61lzEciTe$Escdwo=9vN7++iJ zRH%F7f$+xG$SsZjyO;RZ1q&_+I=2jr*LfWZb#FWnzWu=1wKbk!E-zYJTJY%_&qEzi z-6I2pbDCK^)sv_nIH`_ZQR%vSi5~!)CN!1=N{5rSyW8Vmo$I~s_2HKWCzb{rkF6=G zbJND=!iSE>M^ou=5_cRJyLF-G@inERNhV0YT>!YJExId|gbLV%Syh8MluSQ(JbFuG z;a3{G8(YUnFkqq2%5S+f{TiI!5}dQhTI(}g&#_)>YW;mjUDE&8cnX>W-p=UwtAk+x zp^0=jCHF%Qa6_^0NYYLBxkI)2qFt;~Gy*^O(0 z02M*%zP`Jc&0G2BHvszj!s;rIGn`6a|JtEf2E+HBJ?~>RW&bq4>UW((p=9djH`9-5N(;i8t?>g9Ry{1`e zf?gdAg_5cBg1#!Rt2>&=GxoL`-HncA2XUSDDy$~3=9QdYt>QF9g4fTf1h8$e4;HNQ zaQor=5AF9moi{YKTwYzbJUDB4Y4G*oAu!)Ce-VHe`ntcfYp37t_}#kqS9%LSRX<+^ zX8WB5(NsE`O3!vV%~)|2q9P&r2g}a~(32SZ=$60u?T(+Hx4yE#^MB7;b=_+(nv)8u z60#1az4-Y*rOl*he9Ls1I0JaU-X^bI}``o zPY&&09xS_}rv8fR`rdd{`RY%^V}I;y12DNv&Wk5{KRvf;WpLL0M_P5AJm!2CR@7^e zw%1JE;HYCabkNxhkPOKO+qT}gaQ(FntMA(LoB=Eim$mwyGuc&d8^GTeAN}s`P5Ptx z>g6D94cpSnpJQ-ISx(C+Qc!FZI&swamrYJD6@jO9Q`J378U;wQv@tQF$++^0n=NN} zpUo~Q`qQlLGPAO9S^zD;nMXj3hmLH0C!<{M_FdPs29OUOc}+zcgOFVmZK^U|TjAt2 zGiPF}zXj!`jyIqz6s4ZhT3_WrVz_na2m#SlG&&JKp6LDMfycTcy%*Q6zjnbDW$x08 zYu7$}=m|*vXu}7}+@<~T;X8Nyh)I5_<&z6bnr>{l=BAf#gJh4rfSHF9!v^+Np@E9M z7Pz$LeP!;_!T89=9rp~xMi!RNy=}!;md|SOI^3~TLS*+%4ZsiH{JF>J2Ef2I3qHKE zd=$ZE4CsI)WFLeIl*`vQ9vRyLw>a{f=s`AyXp1pos z-;3ShlMnsy?G$1w%O}mA5{t147@p#{Na)4 zJ!kog9JXqYts|EHOq~b7@v-DRZ82i8u{Cl_gRjWJSIlv3=}%r;U#Py_xIYSrdyj;# zsV-Pr?7X(t`_kaVwKZ-4qe@%$T)>#pRES^@8{~_2PR|f)YWHb3qCe); zHG#$So?kyC0k~*RF@V-^OaM&ijE!IU%D&F%xa#;%kM?|`HrVXL3G; zbPaaK5&(VgP}dV>%{AVFbIW|M4veiS^#j<{JG^x$LWH{xc3oXl=6BjJt|)n= zNkVkRC;t0r-#6x0eW79Y4-Rz$2qlv%p51lnoZzaUr^w*|urCz-UFVQWLDy;rOGE7< z#@3<8C9{h!nO&@W_4zS~yp?DTfGsiSr`MF#?sKM{-V&h8tLg!4?(0>DetdZU&Y{6= zLjwdENhSa5$o|W#>OffFFWxycxM5C(LajeObRe9Z2q!0$bNEy98h+fij~EZPAAa~~ zTb0NC%!MCN4QgbyAW%~6^#ZtS@1F4Zcw}PYS8a#CxoGJ*!7`uS5lJP51ypMqtuHn$ zgb@)hO`1QA%#AZQ%&DmIcmVv%o7;B|^#j;B)c={SFTli32f`y)zx3QWrDe-Yf(#n# zOCA~>ec@zJIF$xvo`TL)J{TDSusm2=>GAf&)UqsRyqr$9HtlRIg)X^mhq48&I60XDpL`sW!ZHmizCEZO2N z&Wv`}_$VU6EO)(Nqy@k^;hDy@m_RJ8!)xlOM3!2K=C`N7%sSx0a>TGh^~WQ3?Rj># zC(sw45n`~MxnadZr_q!)`dFRb89N#q++ErNGIOFHAOow)&H}{oP?tJB7$3c3$9;qG zQPqv7JN~k+az(ALvZc6zIZY53RICK>*PiVIu^|ADwmtKm6-{NHlIG&3{liE4<0Ch} zbO#f@v;4-ElKBLos(;yu(#$G$eIPzGm>4D!t;6lHbj)M()cUJhhYwl1r%1*b;?mj+ zf}T<}o$Gy-#^5kiDH9l|kszRv^65BDv|<@AnMs=!qN!i)bqH_~D-~39bUkYX7{pk$sD1tyX^E z$B+Cpo{q&*(e1r2tgZRbx|++MZvXAJp6Bp{<5lKePeO+>PiE6pNJm&&z;|DC|%rCv>1}x z(Rw(%Z|}+NvGf>(8R-GAAeKbLZ6o{QsaTP#tfZi9czhtAH9obUFK^zFJcXKT&rcp~ z32!fF1#E!aJdh^AU=0oXN~A|mEA6YU;JuM1*Hz+sm7f-2T+6gFe7_u8(n zQ@}fmL&yj`160*#A{tGyVo+p8o!3r89Z}g4OVxVCFU~2lu3W@osl#?zrAu(2)@$F` z8j%K*mWp&@klZ|w1hBTuQRE;+0+*!%Dx$R+7QNZ0(`l7%F-1B6Hs!6Zl^1|V){vPs zWdQpwaOpfbc|$NW8DauYUi^U`WM#D?d3i7WoS!<6P}60PyUI z5p@?mvGH&!?YG-neD0hMe0@Ppwa3{VOZ@O~kJ*`w_G1K>5uFzdtSR$Zd#}`5%@xDU zeun@Mnn;_s#@hzNSb%`TUgIfP9rS&?y3Ft$k*Wnn=a%}v&@kI?w+9^dmCu>gdX1G1 z0AA}4T{64)+@SxbNBhofCHE@zKmz?=7azi1d0Ik#xhpF?L!0FwL3O$FirUE z4gkwb$^k@DV(6g5oY)u&MLR3JC-1p%DHKV#i|h#5WF&|!pX2>@T9u&9m6L9 zfUvx@{Kbx@1L_$D@9gM%o7Q z`W+X}uDo%Aei0A<`UOJN=W$H0gY1vHoHyX8q!(0O^D+8Hf$b*^xEc7Qekt9n&YNA@9 zh=J!>GG&6F)k~|+G}yByL2DS61y+q?a>rDbxn-;jFu;(c?@!qjY)qLr3-hj7+X!|K zb?+MPo}sB}bw4U=<5bMwFsnIez?0*9RLYN`0?o8Y2FZmb4FFn4j;gCm@IYde)WSjp zvc-~d0P$1;5G^GQ>Zkih+SEMRKXO>ji&|ghfswx2J zGbySzIpbP-4$RJZqo=-0YU__~El&wwB$?r{`>K3%0rZR=Q))DGx+ij!j4Tsb0jm3-9 zjen~7mST5#W>gp+hj(u2qKoQ3?y-5}>F96v-=|kXlh_yCk@m*oMe|A)4WD=s5N6KJ z3`!2@(9>q7=YO6&-pJN1X8NLUBTEBLK!lPB01P8niv*aB4f5=O4M0aU)e%bpIIGyn z%%PMDJ5!K@0n``Tz@om;0pNI48pQW3j>S>{YP|w10uBJ^7)u%>AZb@<0`L?&MXkr) z5lbl#jGoy!J5%_{Kd!5IAU9J0qpdG;7Z4s~t zjnn!vS4T8OM1F@*jB$HLlbum+k0!&tiOqxK*L&R-(^Xvrj z_RuD;!c!5e_K;(PM;@o59?5FA6TpFRT)?Ptt-d!a6?02bA%M=P5sy$9kxXR1{hyCj6Ab{^5=r(UWt8b=(hQG7F zqsT6pnIJyfFzeDeCCcF=VYntF5Kg54v=n&*4o7$*38G3fnY_yFw1HZRyy2t-P~@=t z90I`BflxS=3MErru~aB&jK9=6C7~lR!OTkng)pH$W*+>U5*Xyn7EHlbsFf$}wmO40 zMG`hTW z_LrJk=D6J_;_;`tjz8Ib3=n>2K~qslG?`-N3XcasIF&vW8i^z)BFTxJgD1(tHmt7B zghS!*f+H+PZF7Moz(|mh*DG+v_s3 zBm#2%!jl@2y3{tnFsb-e3U~HtYKb*{xmjcrX5&_!*toc=daPF@q4E(X-OgLm#S0*9 z^e3~kNzwpb0)QZfB$@HL%Sl1M%xThnnC?6XtCGf3j`Xo=eLB0rx*js?F`e00%&1CD zwla4yfR0EnjHeGUgGh6g*ZSrF=#LKxklUelG#Qo}AqRv;%%mT#Pz%-*z1weLq#kB8_*6GKl z-+Q_me;ZL1jw*ch0OF}=EEUyjuR_JlEQlHci`DtPkuGMg@y`QfPxzRwUp*8*0f2xK zSNTw)pIL=IfQTwQ^(vg9d#r<*3AQwtz{)dM>YA;b=RMKmDqY)%YUGScpO_f?(avuH zP?Y#Lo&B!>B*99SuI|S8t(l+2q{4TE=)6*ON4Lky4i1E}=P-QN2GbA?^D|HKDS2>_$1G(Fx+l0b58S;31J1OZ(B>TpL?-qPg#%DlqMDqSTG zWy6<-ryT&$8B5oAZ1X(!&S(Ne#5SX>w~6-iBYORv`Xo8!YJMj0kGdTIRO2pyd250* zJ!CKueQkcV-(dsry+hpq`|Wmha>Q^igY-I@-M&E;PNHjUyxQ#wIBX_%WdIjflvH~Q zLdn!`y9Qu}XX@4EqB+F@r;R1mcnkba`y#)0#dEI{iH{|N09cd#Fw~TNrg!A?bLaT& zwtJSbVDy;n8Q_()HMRbTrGo0sNh~abC0QAOUYPZ%@RXRN3 zhNi_ZoXPzX>~q=yL?$v^-)#CID_yP~Ce_&~uSF(9HKYnn!-<$tKt;LJ)tFRxJfEs> z^4XnUr>)3QFyHTgeQ@wUTHjCwlR4u>S84?_;CHwHEH4dim|daXol0-v@?cq^!~Uyd zM{e2ivi4*?d*KHwJf2^*9k~BU>+;gzzb#$0qO>fxt3+T9Cno^R@p_f^sR%B_Der9t zM9(zqmY-v=ez(&`!yC3RtLd+%sp9~2_;(hZFcPPQQR&dIU;OQ&&6X-2d@Nc)p2$_ijF#Pbwg)&*% zW}5n2TSnCRtfG!H2jz6_%u_Tn=7?46V~b=iVOl_DS~M|4nWq$hqA9UjSJnM~bl&?F zn0fT*(`?3y10pWtCLcf+Q5-USY7!8_C_86Vr;nu*-`n+*@2>p+%G{+lEcq0G<`NVcrP~xL=FS)AW{e$t)#_jh((5)+OT3B3vLFH~)ykB|q*a|$cZG+G8HzmoY$akb0}3@7?wSWYtRwu&<8l6hAH7)taV9@%ZI z)oROQ&c+ddJ`SkguC4nJfT2YH;gQ`6=bKBB4a}FAY-f80x0&ia0Vwta*VSC+ad_P} zZ-K*GRXDe8c+cZUey&wefl2xBswXThlV9H5>tZNDk@1aCU$-|B8&;&0jve$d;zg$sVUl_ilHNpUy z<}p|^c1RwNrnd|v)6DB;IRg%%h&_a{)Ebwo_Bg;33~6K*kyOR7W*&RzCW9&e&$PS- zI?5<#b;#E|)Yp-Uz`Qe>kOuNpsu&SbwcBab_v#$ziA@-+Jm!*}d3TUj%AcNm!fb(! zJrfY5QG)<|thyY)D}!ND{OXj|r#lzdu8ALZUHdlE(4E)#OeE^6NnV10JFL0O*2pzK9 zlSmkWwVIU0{K{z795o^WOF$^R4H(RhDxj{ymQ$~-kQOt&`{+cwlMKy%z)mADQtLnx-JXi`nw z%;I3xcV}8S+qrFp+*6!;YSvka2Bux5usknKV{WK$DqmDb4dkSlPVNjd6S2vHo)u=U z-XH?8$=qgnF}2J6l+Q~QJqEy5Mjv%%8tI%~DR66pvY6YlU)n5f*!T$nlWJ{R$3&g1 z0)w;8F;d6Xx*#Y09NK=NkhVhR=C);)B0F8;eWUb%c{#1-T7%3_d-b#0ddQRd$-<|_UAS^vOGL&Dw<}P0hs(2Zq}ekq0C*B*WyymD~~P9<&cJp}cZc zW>|>87)y-dRDe_4eN9M-l_Z`(sc<$tC5h z%;MOO498AdRjE=}`ISu>YIFcZOl_H0GHvh;SRTBJ%7Hzjk4Yn67-q}bdt`J&X;2nq zM1rM3FqsB0o{Y8+?*mZcE(;cvBjZs|gIS&9vU~E05Urqqrpf2`HznV!=4V_1HMTLe z2MDD-8dZ+(Ug}f+@Y`F*I-(K)2^vmuiCyV%Y9F%IdIdvtMkRobXsXt0ukqNBZ6aiV znT98zh|)+^z9UmJ)%7XZKRE8$_&CtYXGHpdd3M?tdsEP(rugASd zWB0U0LGtdUMYqiJ-oDVkWnf}Uf0BqKr!SvVQ0%m;ORO(Go&rLU5gH=IlaZ9IKxI-E^R%hhh@ zW9PR3=!#AJ;7}I;W;v2F!gPI32gfJW!GOa7h|y#^lr%IspHq;@JznE+1L%s5!|*4A z!RG~i0A3vo8^|5%L63j$K(|(gLdj$(nF^<5>u6LFxf$bQ)Q@M?Pj&wH4|cvhFmhg* zFJO0W>Kg%A0q>EN@{V$i$F-)^HmZor5OwZ_FsA&;rn{J#ZA9tZoa!uW3iHfUM!9B`Z!;L%vR_!Z(+rquZ8F<9&S?NS zolznH9o?NaU6-nbQxQ`cp(2oEgDq{Qm!EoI)H8i#{K05EBwUw({hYoE%v9m8e{OFNQEFdI<#8@g8ODAH<`0;Ree|*Ri zaFKD+fQVTP#+6Y3Ki>OmRRH|4wr4M`S;;Go2^*f59>jI;rOWJxHr7i6v_h@{H6%uB4fIsE{n(`kpP1LVxQk(_#?001BWNkl7r{&dgX1R~uqfy%S4<{k z0o(C(RNqvkZ{9_7KMtU0?ASByzgKo;uqqotB?YstX#5O-k$B&xqrcTpaL>tChhzO_ zBk5Q&nvk)caQkq4&^jzOi+w;HQFXV%-;{tX$z1pkpwi~qk@l+fDldSUB zS9<4dKd~9i@lm&r)mY9E|A$p`S( znnd2r32!5#<0$||4l+zl2D?-Gwie%48VUj2ejxHt*ObW>$Pk8aYkBErtcaZ2e3OlzO=}*wyc27?2fr!2MEVvGL&Qh8(YViq$*eT zW+=U9BxMA37^Wlb1O@;B$!s{i1qtRfm{m;fJ%^(=&-D<|x-#eH!3jkeeeYRCMz@W= zsged6AhBg2`Cv!XFkESes#0%YVscLBr<|DHp{csMy2+hiv{3uS0YjE zc2&Czx})P}H&Np$c=Y@Q)oy1fnYw=4fv#8*U}D-IHo|xo1-z}HF#rLFGvKfTI4~OP zi5V$dRUQ{JB(V)t?QsHfUnr`v>v=)H@*Q=>t<`bS6`%Ow;hrj&wx$%$uzsa{%-t zVm~>!A23ch7#Y0`sB(K14>^EFGfVtXXaoRL3J_TdfuyYVqBl0C4pe$Pz40iMsBjx` zJ$ z<7(P0n1mT_C5b4VLDWKbAf0u0%Iu{+W-_)W-IUGJe^Wippz$m$n!&ovsuqqiwWKG( zduEcB4HuG)d`Ox+A2LO5G>aQ$(tUNGGl|VGe`gsSz`|cetYLrF25r>=V6g;g;*!%2 zHD^||amI3|r`##mz<1lYRn4<9T3II^Bd=>9GY=+)gRYV?cW@vvs(8@=3VMoeU2$`n zyEK+c+`a3k1Bp>$Ku|}d2Y>>!o#7q{Ds;NNb}t~0M|(jwVikI3J}j0Hq?lT~4tH~L z6M*ggdlhrrqivg3mM^LGRW2`Ix}|sLaAM@K_Gg0bqUNGTBHG@+R{<5MM=UI>sq(n6 zQTzR5VgLY0dL0GPRE(L&lCfAa?s2%iHn(H~Q0^-J;^I$c-@VLPR3AOEsdeNi0|Ml= zdjJe2Mxou^M*Y9jH|xAZIi-(LzcN!dd6Om3OwZ>jw)r|IhCK zYewT5q3IEUQ+5VABp$1sS0OAkVGOg zCQ?XdCMNxE8r8hXT;6s31xph0#8^j_Z*H}>R+X1$h?0Ub0KyqHPm(0ET zt=uST0&MTy98Zst$Setoi7_j~)QpPN^`iB?JfwN&19{;`R_wf@!u5~#&}a&EUWZDnexM@`7F+sLm(3|y zS|o~`A~ZoDxinx0EC}^|q+l_Q3KI02>d4_lA;e z`k)x;jyS8TW24D5lMS3E0f3lsQ-k}d-b80y(T~ez0h@u&nMl3lEUw=2x|r6_{x;dC@>5!l^Vf zS9@HqBBT!1cnTgnzopva1n|{2+V_OwHZ=m^?&x?|JW=g-T{64qcb)wJE}9citJurK zp-?jQ%3$ccVBnJ3r9W%y6HIG@e&t|%bx<|VM54m$RLX8-LgsjqiBaQq-FNm}09&7X zGn7>0WSsEIU<5#?X&^9f0U*@43zU1DnQJ_*&(50zU{mif8*xXnH5C2u%dG+y#T+K_ zH0a)Q=2g3$AZd;a`HTqs@%*f|R#a*K}bF{HX2E#0Rt-uhRWn-VN)TR zOmc?_q%W_kzyC-pF)pjB2XG=D+dk4yFo4GuRrQzG)bAV|xc=1_&C43D_@}x$nbX~I zWjoKHju-lRKRvf;eju>Cv|N=FTM#HwU-iUdYJ{KaKE8cu!1#$Ef&>c*CPq`B=${uY zg$30xq0;3g;6yZP9hrOznQlf*vQwX)XysMY3TTyLdMBZPp{N;#Dj18G#c^lciuq1S z?QPX>o25&d;ydez7K4L2>nrtI36Uv9D+HtjY_O#*>Ef0IZxb?`jZ7XA>rV`xHUo%e z#qBe*B(g?sTW^P%%{$Ui-;6ZLwh>4Rinf>!tPJXzsB+`sLY{W*C+i%rngZF9^^kMg zXf7bymmJkL5he@#GoR& z%^6beGSa{IzjRwHH3mb`A~5eCX(PtK_%L9wZ>aKjonyVxRMcztuB}-0SoO@Sf7hOH5Oqh6 z1902D4JC`(M)rVsaoH*WM@IIIr=mnCb(MeV?0+qF%^DsbxbO9E4aWybr-G9#b$)Sy0J(V9YSm}sCoFcHc)o3PKe3dGpxIz8 zB|ujB=Bm(lsdNDbk*Fw~2Vf{MsGnE9RCMDur8e6 zLkYmYG+-ywI`xAk-mf+?(qvJ&4knjE zPs_?{)o5Xv)n^2L6WO}s(MW3CXD^r^2pkH909;XBbLZ04N}=x=i~dvdGN02976SP8 z?rl4V245cpnHFDUwQh9gZt%>H$2_(XRWW*`$nsWU^u*`R!e=spuQh$Oj;z9YcfL zhfc02optB372n(YMuo@s#inKef9N`{Tez&U_QnN^-exqIS;uq`qsmhV;9xkUuReVP z|BghhOF6!7ShmioTYqdeTQZrP_PJ-yaOLtPn{l}eV$?Lw=8FcH&pOAn>ajZu9R&i^ z7Z1avXVb~{3RkN_!(>LPOB2`wQj(?a7XUySP&PND-2~D$vp;fDmuyyN^8e4?yT`|I zR(Ip)nU!p7SC-?8R(9gpmM?+CvO^%Taw{bA??VDbAr#sur4Sl{d1;G-OW(JIC=?Qd z3$*wb=PmsZqO=K@$Uup)+&D>pmSVs`YjUxzl>@$LW!a9sD_>+uyOJ#JJikBA%+c9r zcGuF*>`0d8`}xFK&CWja%*=Vt{hSADdNt-V;P1s>Fk|Ml82}JX^ynac%+%CD2$_@u zG~ojP<{B_BYCI)$r~?g-Bb52C5E6QZ2I515JU8FeUmeTKAl=M?u~NrT4EPZZ$2Dli zo9gH}v3TZHSC?ERPD#*>SU0vPJJWyurr@eSUHpD2Gyr|~@x8m>+56(L-4DF`&u$E^ ze&Ai7IM#debq z-ulxs17|*PW#x5qR{+4?*n#w~47WGYjm{UpIl1@O@9gC{=eQGm-^GEQ9lJlV{KKDE z{^9uWKv(~nPb~Ye1UQp8cktX{6zKkfqOaZb#Y;XFVRZb`ubp#^05}srZ!{p(L8Q2) z@(#r?CRuD#PjkU`N`GAdkg|KAYap4J;q%X(5j-;x6GC58R`sch^(b@B#iJizQCn14 zjLhw)ZBHIK7e0JGykd66UtafjzdpWW&h)Ysvnv2#@98EG`oiL6U%c`0qJjWOIGc!m z{9T_d@&#}U?q42yCNbQ*{=JXm-d*Pgq941ac1A$}pW*J~jo~wUrP;j%0I!A`Oy=7k=-YDv_|)yEsxEe5v*NZ zx3lA?R|b~MF$&k8M}tFX@}>oAso7g5XrK$wF{!<@s1yKB_8kScqGAN@0CItH+~{hq zIGn~e^0WWE4giY-1y>Y`?je1#zW}Xn1n+Yuqz2H_5g+=-+kKl?&%F1lz`a-DH~QD# z?!gH5`C<9c{&W9vnmyO#^`4U4s&mplcwckPlv0QtkCr*AEt^`ZH*Kfi1~e$^Qt{Fk?nYXG{`e}4Szt);VSt}b1--267tzu_%o zt5N^}U7}SirR+@fn})75GazU`Gq}n>U7a}!d|jUGAJT;s!Z4~A`KQmCCax};{#eCg zAtZp-Gn}kD5W(bmr6Kv&&aUH$i+oI)Tg%xV^A(8eX88eN&zTEGdX$SimuAbW9Ki{v zJCQL_-8go*&><-#yxrZiW?tz{bAo@oa6yyW7p_?i0BFLjna4VQOGpAp0gvo!slTo2 zD%Jw+SDlgV$B*IXk6m5PFY)e@S=Y{*0|0gVUY7vh4!^Z#UT{H?{~s%Ez!Uz^bN=5B zw`n7xKjR6{npS{&i~#_8i?E5L4@A$!A^s%q@2;^aq|;^C$S5Q~inW z9||iS(Rzk1{`lx27}4i^xU)BY?zuRGCtu|c;1*?vE}Uoi8E%6DJ|fk+1B*Bq4M^0| zu*qan*-X(9NC69GT=9+fe)PE`ukDE*l~Nk6W0pe>21CXT0we$|n_2cZ*WL*L-#M@| z)^GSbR?G^1ukz0&z$ag=j}BZAIm%b+K3BTnwOZzl&saC@=n?;m6tr=U zZbTY&T?ijiln%iAoP+U@wLf3_zE3Z|^;F{gU%mQ_kf57=EzOEwlMzd)t5w-rpm5qJ z%HO+eX4y3*!JeUk)BQbrVuxQjaS-SHzgOM;o;eF&J{kV*fmZ^Bg%7N_ZNZG0kG}aU z@+LS%tK7{^ov!TrdMLll>VkBwt2sJiB*4M5hd*#tWqI)eAvFo|js-VktQ!F470vzt zb{&%d0^UB`4w~3`tm)c0%Wn#<{?L*;@U%1i=YMhZMGRqIJLj4YTzM1Hos=?ASoDD_ zZvlXVXAi&Kee_@VJ@w@qJ{K&S`%h~|Y~Z)gwZC+1H-47PaMP7loDP=HsaOsbbI-T#KHk`$?E6XElb^f(;kiZg{_5T9v1`N5$j`b5 zx&(j#+!RU2k#`?&6atS>!(F3AbYdtWL6cGs6wJhJ*p8e#2mqGu?s){KH^-C0(!!vBdDB07rT@9kME8*Vr-MD#{aS^DNPkiY0aDv?q<430VEqbz zxqsTR`0#%oi|;;T?3}C#`CR9~?z5-A_U@VG{%IY3L;ra^vAb)~NH7C!ch^w)&gef~ zS6uEdI2PBR?MyVq`i+NRgr>2BD?GHKc>VGKe?HP|!u6TgyPxam*EEBVbi{|2z8w4X zBL4?U3(Nh}x`&b-@!|jI>~HN(n(YnIc`5*4cA;DxK&ncyh%^a{1F-$%zy;6&#JyMg z0btuZ7o}OlCX9~7K8!KsdkqkyMB_)%LB|S3XH`7k}_bn>xxj59;Gw_4I!b_=&t%OjZyoO+ zl%^8gnHc!^Z{EIj?##bfR4Rn8wY%@>_EVjSLGsU_&Wfymp?{h&pvBW)vfv85$E%B` zVf(k2-suK2q21*=Xflkcy(&80?eHt2E~4ad?dxtLm@xuA%B8U1|g|=~~5LX8LfDut)WETm|Scx~y zo!1mS1pqhAnFjz(r{C!@dl^!@W7onyJinJ<-}R2X6wPl<(}sqIh_%|9E`yNpsTH>_ zpA{^gHUruq8Hk9-(u|f@3KD>S=oJb}Xmn-{-^ZqN>^d$$5^`6+-@oIdyUuXg({66;9nf|jTE7L&=U4RC% zy|+`!WJk|CkNtkjjlt`046YJV>l!$>H@5%v*a0DgCb6|8t#tjL)_gJ3)A+kzf1|7a ztXXlL#GH~JwEpPrb4S($R|N|E9X%&r>}>8zoHy%n(eb1MXr=zS*2d(>)+)=cKY0F# zkWlKMeeIm(0Py?M`;F%90wicsSbv%qaLK6adSPLqecGduIn_zGQXTOn06_T6-fQNp zs$5XD_vEV}^jDAVC@LrhO&XiNGcgxW_DU(c2fChk{i}B_tiF2I(!@~wz?o3!&|-}| z)D9|sqk&6?H`!FQoxMBPO*a+o8wW4k@&4cgiv!Odi(eQ@Zu|rGh>}KcThJwF$cBVw zZ1BFnXXwG-_ZTG^#yF;54WOe}*1mB;>H>_kG{CT*CZyE0V{!e#*Sifj64$ZNNEWg) zk<^8;Qph9fU4*4c!;`)w3P_&mN19I1bU)5dcQBO@m%nUoma<6`=Mc zG;iUtxBI%|a!Il8j?%(NLVxbqfM9BYA==$?J8@6BgTvATNAJ5ZcUN}s5|;vb0pP+= z^0ls>4_!IuFBZ*xx;^^Z+1}UA_L?pL3f)NdD+wTe*4g#*V`ro=Ol1v(CNV|c^nhGjm_|MU8eXuBqa3_iy8&8 z=tvB9CI%Xgo259?u=K&KYQXJR0N~cSC1PIs1fCO#i(hN)lv2NW-b?`4+S%1(R-m}^ za=7zFalw$I&<+dces_ZPh-;7nws&^?%{41;oLf4xz}Gvh|ET?tFgA4;(%2<&1VRWM zqh&1=HEA&VRY(=h1-+xcF}?Td{i1q7N-xiR1re(^K)GLAD%Jx5x(v+&*~i>{M4&I>>EnxpuN9r z`PXl}_pXJjzH{Ieg(FERpF7<0uX7iFX2mTV&UTvNdMC>wh+he_A4+bdNWW47kDS?p z$s_XJWX-TfCB%pO!)K4K39kCURcl`AY<~OPk%MOsgURIthZWQ78bVvdulZZzi)cv_vv7vg0yfo?k$X9uFKT_Fjuy7VRh2%UZv zsZaozy;}1N!2nKMADQ6Zc48u3w*&VfH2Lb8;Yecmj(LS2D4qW6u3=p!g;CpJwm?Lh zVbhdorlihV5}69)d?0IymW_~n1mH%6+1p^r&eNltx^67ll+ldg1Y5v3jqJk;AwX)n z&_T%cOG`k)bDeR8(1j50^z;WXx_5Hf52l~erY6cavvrgIa+owPgn*~oPk-pjIiFj) z;D<*~(YNStN7Fi$IpJr+;stY8C9s6?GlZK<#xzqn5g(kttz~qhihp?5)d29Xe>fop#v@e^LY}}MAQ$t_I)M0SjP&8a^Y7Z%;U zaODF3tjFGW52j(?b!Ej}SEqEF|C{To@WZzc?2N`Qm{%fF(lyN|W%7pEi@tDOl>pdx zu5$eo znUB5iUV(P++2hM*mfb#o`2zp!ue|5(4J|*HLI=9 zFg}9iGfS71l+i|CoJv>B3jXiw@1j3-wk`nRNKdqPcyOj~`WLSIz>%IVA$%Xa@>&2m z-QOc*Ql?Bu7eeeiccOQAaP{m(GYg7(jXu~p^OF?L#>K9E?UU?wYNIR6IxipvUAh!g zHJa@U9i({a*sE)TtNwJ!9XmT-6=GyLjBq)!9t^Jr#xl%*!Kg$q#036leq~%J6&Q+9 z>{tw^AL~82{@0I<_7)`Pv!=vl7Zm24&h&TR|MElDK@8^tb}W~g5JH0d`0@_}Xg_a% z5e$_Qz}WZRB?Fbap^0q3i2ya%A?b)4c8AFu`;&c5ojX3X^u9Y5-}B}|~ zUxRL)W6Eji?jc2o;f9Hn(%hfug+D(1!XKZu{8YJm=IdZ)c*^k<(?Gd8e%{&Mu(Q1( z`$Z9RX9QOVZ$38|4ZZU}LI^2GN^A29X@ZWpW1qTbc+(xaZ}xEL07A;zH!l40<|`Ka zr%4zT0I7AUQvwpB;t~YF>>1)%LjTW50;C3RS=tJS&nj=iCc$vFt^}0acK}H#0p#z_ z^t^QHY{|63g@GAZ7j5i+Jf6#9+_1<$y?1!{XUBUx69dA?Bhk`}mwbW?>FiceZX?5Z z_qHJXsQu7iExYC_e*m(YvXd2L(E)&vaO1qvQ~ik_{2@GE^Wl*nI>>cUuwgI@7E5<< zKU+S?$IIUf0DGcGv2EDb-q`-YHMjg*xH&XkWmp_dvt8U-9D=(C2p-&7+}#~QaCZ+9 z+$~7(1a}MW1b26LhhTT!?|E+jV|SUI>8?6;>U3@OCtnqOK(iHa9Q%0lT9-DS?NQI# zNay}|E5ZXx#!XrMQK3XF<44YYmRLx(C4D zeg}M=ZSNL265~dTwk5HvZg(SKmiF^bzIB2Vy-{=)>=q9CgQ=ky^zwzkXTm&m0_7{2 zc!ym6YwuH$ye=bvF&B5PG<=qawI-*&Z{hy^c?8d86s>0;&G(rXZc?h0t zg<4%V;IQCJl^>FW50*l5{c}S?^08)HpyzVEhqRjv zA9jdFo1WDdxW$y1h1|GNUszjK*!yHqf11+3#3SJ8hx0#JL7>gl3N_Snf4wBJ4gZ(L zDn;TfM0CV{$)Tql68O?;exlp*b9mIe6r6Ewp*mC$dbVItxFXGXfY1AAx&jCUfEV;C zB`6i>TJ|t-F9E)YB%Lp8{IcEyuqbGxPJw$(&Z&@xe}K>h1&W52R5--qEXXGW33xnm zu{E~gf&P{Ch0VF(kLRicv);}>Er7bd)2(pEgPh-&#vdn*^Bn)36*1lCo~;5Hy3wNe zt7+M*)(x;Z5C(nvw}w?#G6$GR{70)b%|`j^0pV;SqRi-7SEzu-+ds0uJ_mJ{uWxm0 zDH6j5b{hKY)dUbi#)j%rl~1#3d^IsZIfCtj8$t!1|2RQi_sAC+b*0SJSOJJQ#MtE2 z#An}Sw7s5R_TJ~NG!1<&R;UHW&vD|g(z`WGPCb*YV3dM!GC^JC0~bwi)IzIZ&^fFd z9XhHoA|jf{FHFiz-kTJ`4RoAG(KIP66d^3F-C!)Udc`?F)O1n*>yXtOyWJz@!=(_> z=Xmk{bY~RnQ+`$3^;VhsYVc88jpDC>f`>eZE&X_yR;ovD7V%lS2j|-_x_O9Pg%2VR zDJHr8#U=g!BI|yamX`3!XFqhm zf}=BK;ul*8jm@#koU&849n~{YcnP3uOSB6Y*E2(bqFj(;Yvz`8 z*H|6c2iDI7Gm0NYJC^X~q`X|CA<6t*O0)dPBM&nsMb}+xmP=(5*i>`Xuog2_h@=gjt+Dr5Ef*^ESLK;G{$wT@gzQ`#>4y-HkS33=?;&6vOTq-`E?8ZttH(>#Hk%6x8cJf zdmqHZnnWZ?3}1C{y+jRJO0$2ccueRxTJRj3qlAv#CYSq9yka$fh^P%n25kho4z%eS z(DeCJj6(og-kPC1+J9)h7(rx#4gz}AgES{}>H+nnQeP%;WuFxvH1&4AU@Bc2kRG3D z<70dCUDiG~01ZUkg3&8{)f8D+Ei^V#!=#M*U00dhh5cdga#nO4 z>4%%z5pXtU)E|zJhBpBdm;om_ix!)i+ZPTG*Y!8}hy$hg;TWIm;JN^3x!R_*y5uA5 z%8(0nG3)^8nfrks0|AfeKjmr?!XfIw3#`s;eYRV}$r!vu5MOEu3fc0OD$JNX`@&7G zr`4XMY%tKO^i|pYCcOXRVt; z5E&xdiX|eBy(N*$nsqj1qVsWvD9BP6J@U8+_RB@uhDI3%sKp1u-}lvp|Icf)U7Y5_ zqvlezHMO10wz<~sD732V7SYlutcX$)$|fI996x5hnCIt7ikM!iV|QE>g~Qf9X_jZnpc#*E za-)1NRk;7nR|kjA)N>Qvg_P^RJK`Y|q{}c;=dJz=b4*b6f+cYfsDOr3ywl)ue$!A$0%P?F@3lyVeO%fw8UrVV+pU9b zdO%!jIExe24@^Gi-g8BpUp+yo(8xwv{!(nuzv5>G;X+0hpN3XL2p=SKf93!ABrc0o zj^I{&7*Xdq-z_NnUvS-+yS%KnJr8BZU}xZTxu9~9V~bx_A8p}`wzK*ALhVFHjukBvDDeqV7- z1kF_hu}se99Gb?p%+|(FCbl=z94h)QNPH=_@EQ#bt%W=wW{9#;iG8G{_zO{4O&0`$ zDVEk_5qTOB;#2NOwH`9gKLT?9Wj#tqT@#6Nah$>cCE5b> zm^4h_| z?jN7eU+b=kd{_)$rlvMx4oAr4la?T3z%Sjm04d24p%%tUi2&1Va#*$`(U}6)|D32D zvNPFXTJr4E5m1d3cOu5Y6Ta{X5;m^vO;z&Tw$Slt&}z#7x-Gpl-Isy+;jmp*ZQKe4 zjV9)cn<5e=IK6jm=Zz96XE-Brcvuln9_H{1jsorxwreQ1C^MeVe(A^Zk@%N%#AAP1 zkcuRG1~WbV=CJAKYEju*k+de;Pr~9RY!#?xuSyC!{CLrquvmE0e?;=;5L}m}+mTjx zNhk6=T5E&KEYAW{W(V4k;ntppTv|qF-Uvl-QwN;rb|T^lTX3a*!tt9DlU-m%Uj@tG zaISiykI*!aiJy}?gO)mxRY`P2xoPe3OU*2nn|-FuOli3p5~p;!CuG)QQ5f#h_&~R4 z4=^G%4w)J9`A1mL9X9{b1H4BosICGBd!pf3mh87jG_p4TbwH008zg!jCq@X=Qv4?D zsnKt>?sjsmb7Oeui83)eiOT&|or;|qj+xc)GUY@V6;$(f-pbRIaWlCsE)Fcf0ltA# z@9J+Op>@VkM7*({oUP6yzG$EJ30B6Zw2{tqBX#H2&V$j9dNoAE`y10|(IPur%4j02 zH%3?Ql`X7D*SYI2b5l7iHzV$VTz*$bLxT>VY^$;JOjxum>-?~SPvKeXctcElpdA78{cpvL)MoAZL|SbIm~%C9#3aWOLe=*nCpc z!>5kQ@KF@mzX%+$r>OL5{B405(?>&J1@+H|sK4R%E*5_orGgmKW*-P-h7ThT_ESb0 ztQ!u|e$or@-xWgzO%6!yxcE=u5}d#XT7h3Ht*YPuwS4EqP#t+aP`al<0BxouZN2+k zYM>s!-E^dRhr?fV{Mz2wSXU67W@{bKs)y<_&@y=NSkQz+E_px)+b_RQM`aWp&Yb?? zom}_X-%COu({?|x>&Cr-sVj)gX{*u=>lARj4^1Anps|SCxSV2tFMpie^guslzDe6` z@MbX-AQTo<%Tf`r`-a0dqZQhjX`~L_dP+iiN_5T&61OxCxy_L3X|XTfA2Dj|e7YVE z`Rhs+IR{9n^ArrB;0qdMUcaD##^m8ckt(MW=zF&xc@Q6DD2QG6Z3e(fLS{>C4e}iM zAiT>fa3DSif?BZGx0W#pBNMy@?bqmA9ofk7PKFf|tEdoZ&A_sNS+tRkE2`BExxc-8 z@ZEfTGnn{|*Y0J%TYBaPdG>cqpnC{!RE|l{qUB?5{e(6qCov3$cKS)XOz$zami{*3 zlqY?`vp>HQ2hZo-YRib_Q<^ZG(H@wMC#nC;Qyl>)u;1|a{;-)*%fC_Rx6p?hdN=qM z*5PuVo0)o~&HH#!23lt?=YVFV|LLT{&nlKEW+W_L>`hPa#wEbFg4HVl)#0nB0yaV* zkiGvKoFnV$w8E3$@O42mgobVR{dvcaVCbFyItDiMIs=rc+|{cV?HA}qy@2x}Tfie= z!X)3lZ~PW11eAGSeNrB#CZEUM{97zea+$TSz`rl{J)#cUfpZ@DD_9AM6t#Cg?I(2X z_ILD2T6&&>5xYG~2aqr2q3l54GGStVLsyP_mKm{NkV$=az!WgztocvBZ4&}k8q zGY=Ddiupe=JX=@-~+GTL*(VHv8`O_O>wEp}Z zP)v9Nq>#q9(h?SO1#kHoES$Dnm(%2eFtfN5yFM}*9L_IZl%#3+Uyj%wQ6Qh@Qp18? z4jo62-s~wtD~UerH%B)0SI(#F*rvn2yI0#NozjB>b702~n{Cv`ZF^Rg(EySU3woX) z#TH9{DtA|Ku&09&Vb73QS+QIUr;iakd|_0TRY0tRo$pPCk&&{uaY=NMU^Xp+`N-qZ zcI@4Z8c!L`enGd*tG_n5(g5oXP9wqjHR<*zuM29skS5fdE>6VzTN6U)HnwYFYnBw1 zN1U_+X*qcao=mJ*Y;55()|SeM#rO?zM%;L-14zK{Q7;cW$<`PJg!1gmcuzw`I4 zBvA$yhy|J=)N-J^PCKUOw3IgNO&DlKJrNo5RU0~%qA1k*=X27Su)e0Mu0HRdS23-N zOY$6I1y`-thfYL_LShE@9c-T`&y&$Xy|ESfPmwjb#1}J8udDqFR_T{abl~aK{q%^p zz0_P33N;6Hm`OL|F(6&++A!3*Yg*8#8T?^d3H0@R>F4?Thfj#}ae6oeBxMBj8d;aB zZc3sg!%!{yn4z~QwJyh%n+ah;`*f7X(VIOS=fSb(Q zU;?MX@!o|9lA%2~1sDA$d#caQXbK-Crfk5IvN=V#k5Eqk^O0P9ssI6OPL$LjuVLk` zu9Wk|Bq?2bKteqE(}drF;w=qpWoBKetCUPRnOs`MJZF(NA%!9dr+bdcc8;vR=aV@B z2q?2;bG{%v#0s5?&5_r>(OX;0>;1YMP+x-bd+?L4Ju-Az&@97(OyH8**diR-V#X@% z!e98wKfSLTLe)vJC={VAMcmi1g~?MAJnID*$&6Jn5wi$Cvw8_V?=MNo#q|)4De!4t zoL{pgRYx{Vjfu&T6m=`6S04y?)aobx9o8jEe!bLF{((X&fPrJj#^XroYN|>~OJNO` zgl?|gs3!W>R2$kZgg`nSoHgivt2pk6OGKo`BDk^w6BKSr-Viz$drId+$`jvY7@^d~ z(O<%gBkRJp1^ri5Po4F!nZzeYs;l|jCH($ntieO5dOP)k)HCd7Tjp%E#EE(xwt{Jy zTv?I%?Gtt1KcCLJcMCSXfGndAdZq;o-!l$CBHgP0>4%9Li z%8!HpzMbGUA!1CBESqT#nU&M-WD(NPZ;373_4J56tCvJ?M(Tny@?duZTS)ApBu(sh z8UBh9DGhm72g?~QPnxh7X1W*!m2!P++}A< z^E1&wnenED1q~RKktPnGeg>NbH^ozZtH2OLKx$3+#6t6fRY5wiMv&k$90(OfQTnA{Jr&^I)Z-3J{Pdi}xNWiEUH{NH}HNf`}nudTQ}Ymw1LT4>;ejNH8tu z!RNHLofVvPVw4U_v);<&I&ruq$9mE*XcsWli{07+BXj+}J4JywG;-ty(ZehXRz8RQ!4lbp;0OCigjvpxaGDxS~9 zB$x@j=yzH-^+I6H__V=W08F zS;e|Jp3Bv8#D>d&6H|Ips9i$k&h7-W27Bp6Yjc-X_CfvaD(X;|5*^{F7?wpDkhL)W zrYYWG21DvNXhDo-UuuSokRRpLn)I?I4S%~s5JFRoPo>+RhRlZ#(KSW>+O+ZBP z!xZ+U7+1Hft%$)%1Unjun^JvQ$w<=NrI&0vqNK7|@1GZ*95sK_W9tvzL7bw*F)w8u z2WZ*DX3pYHO{N3Gi-S~*?WNdDSZGQiKc)petD$4akcET)T#`2xTq1%!tZJ(SyU7CqhZQT#+7M2&p-Q#`hhl?YAUBR4DL(|d~&U{r` z>fJ*Q!=jhkh6HB%xEJdANO(1$l7~WQli=Xs1Xj<26ZgMujS>Cw%Ao^ibUl?r?0T~} znvZ2*yd@5y*b60sizsr(hV07oz)_*1yaO9OFK<;-=%34t; zB~i3chJqG`*x(!MJ?e%W$I zc-3ye1iMiG6qI)7%%4>tg{$S#0w9=EyVhr^yYhAi(y>d8`?%5(Y^R#r?CPi)BpP*=e z2&!h+DqF)aFPRu;shQw?itAYXFxFcb%JpH81bdFAmnfrL4Jn(Hmd5;e+@%zDw-LVi zzN>=49?`4aGm7dX)wX4vpJGuotr|bRXZ9qF*p^l@IX5l5gl zDwN6(tmCVp2^di%P_acDcMF?UU~FH4fV>b!nz%R|aLR%Faz38(zeiu8aU?;{O=bPi zu2#8ydA8NDG21o)_`@I(6T8av{H$-;v!B(-8#F~DX8(}@&n_!P(7c!D#IXJG@2g7T zfvqR|13LbtAiC$edpnKYS3zK=TRS5T}hlrNd-6YtY_N z5C5q5<2Y*%aFndo`y+`=F0LpkCY|e+F*(n4*iG{;4%bsAo2XOwkBLWH*U(`Pyd};Q zTz`uqcs$WQ3Yx=}phZ3Ho|e?NR^gPy;lE$y1%_MD?<~Zk%QDiwZ}$5NXm@is%RIvp z9evK876@nxpAv}_;p56oblq?16cqV_6N=b-TrvIu*#@a@b~FS5J)yEB4#jskCW6O& zQJ^aX0s2=K@-CG_@4|;uGH^D0`B5|X9}fKlx6cW~y?fBI)w>B&9dIPVcJgM| zhm=ZBSDO?l#1vSScUK{#4>w&Ds%@9_|8huF<+Fw?eL6^KiIRzl7YLGxFdg1>wC_@afO%s{CNLA+ER;C!$XP@MfH3L&oXqE4DDs^5oyw1$SufS3yEj1u!6iHnkjawpV8 z1PkH7NPOv8;!DI5F}r#Xs$&4DnfQ*C>7L3~-A3&>A0F;ntx41DI0cPgNih~n!q7x5 zc+nQlDZ-V|X7hD0UFGM@p|{``&7(T;g@MLe4Duf# z34RI>FGEm>NH~wX6*C11@!c?)FrJs$DEh;nI_PH6~V*LI05Y z6C6G0ok98gNP$vX(;T72jIL~wLjLsh^ntF+2iiyRCA!Lp28ikmoR;2R>0;IY9;m6I zL=b~;(&yjPVVb`JyI4?Sh-lQ-VzOmOP==E}$l_^Op|D9(jt`#B{~TS0(1-r99e%jB zSN3Wq?rso5coou#_gD$}%VN; z=FgDFdLWWTf40I=$Q3ex_GBzU=zF@sM@CkD;8Y{)uS-b1Ww*jk8I@UQ!wmJ zPAaRYOx+&MkYu%nkCGisqA}Y=RrzVefSE!;V@d6#(}AV2BgBVF{JlSqAsPns6C|0n;WBW~eW@_37+tdl zy$m_$CaOKIP0y2%dABwHHKtK6*`u62%q^VoYU?1vXijL*_ay<%p;<8}dj*+72QVow zCxse{-PhkaRIhMd(|n`7v!Qo)*lps-PSj(G(#$c2I<0h$f`w28P08n@jgiVQZ0U^L zT$k!XV4clcgUy@+AN?0(QWmOol1J^zW}rzPd|a|BkKe2MkcmSrDJ>>7P~m3^TJed* zWTNwkTdtZj3nvAU&oR>0*0g{TOE_zT+e!M1dD$_swI+zCMCS-ET<_aUFuXC?X&9nW z6!dzL0j+0EkZQ+AHaA=yqsYWFJv$E2!sJ#Ww-Dkc02q+(hNCScxoVsF_E(J1&*Cs5 zyexXwZZG;>jZA2#8e3xMxvg}KT~M$K22_pa00MCq?B%%H3rkMZRj-7FGkj<6+eI9{ z%8$5{sq;vn^b&k%LSX;)=@7bjV#@tTTD)_F)iN>#r_#1J1i|oV6J5=@_mZ~k0**+~ z9D0DLn^Q#|dkC*Aev3L3G%12j|28(?Vc6$%ET+BQAwv}0TumjzHv)fcnAw8Bf;oL}n%zyd2n^*6I@KGneyuv)=Oxb$hFha6PGBn5)1vJ5fRanfOG zA4XQ1Xj?v~JIkm@J9OHEZMuj4PU6q?gnkOv6Pj)*)*+>ZQy z+s_d-Z2$Z6JdcS|mLuckFm#4t+gMK4OSWMV8(!px(Wbn=ZCe$OYd@l>ywZ~~zM|}{ zmge4Q(wLhoxZMD(adBl9h0jVwVO2lV@yjn#S~46D3N1mG0+F!e$%~z%AEfNvzfzVs z)g48OS^@{*1+}|lprz?0(uw#$wr8iao4|i~#^m#hIy7NV2rOMtpcLw)jD2*>g4srx zfW3}~lNC^QT3U1kO(DvnwIF~YVD+86M>H4G)U*X?IjZa3s_=U9&gkvu#?QTZ!{;QUP)Z*DNQRM|X{pjg-@9 z0+wvtJFwb0G2iq?W-zm8_N8HvD!kbPlq;sq%26%w|`VjiCZ%PrYWu)e>_~&@B`}e))d~@G?T|| zJk+X!StsSUq3GY3hH8FbP3;)-=L}2aoYyae(?s=swh=j1#7zIz-)EqR9z*DvN}g2s4&e8`zTmkPao~#bIsp8z22s zGQBd>Ev^|cTPbFP8$1;fv2<{wBJraHo1fbOoCH1Xj_(KO%URVH70z5e0GzBBw^PFp zq{@#422{9ds$&e%N6SJsq%8cq;@mfn+^mmRo88DX%T#A>!G);kCfsHB^-93U&9@hm z6U~jy^lVBJc?IM(>A7@lP{;;g-}IK1=Vx98%!AA;=(B&-(O{m|0J#}PhSM*XZh1$B z?J@D#>64l*3X<|zrK}dIc$VWK{FK4(g5;ijEUZrT1XCOT!EF?-KXEeGyY&j3Mh(4pC#O$?q{17z7Kg#pyhC;^ABYIfDdOc z`ZUHyhTXOcJKzWBTy~n=E0g(Qf3FZ}KJ-Ar z5Esi5tx^G*bVkZ{W77xe+PKp+($_wzCq81)9MUvrl%3y6P9AaFeiLY#;QhWSe(4sr zLC%$S7N(QXx`>jiu70(jIMG4+|mg+;1B1 zIe}O#R)v4kkWQp0`mhIF{S7J9)IP==?PaHpR@fWg3UnxviMiHF)V*Pb2#X+(a$lT#8ET<668B$Ll+O;UAWXNOiPbf_~xAc_b{dL6PgfaJ*9CX zmTHKb&bWs!dQUm>=vnx!&XjdGmR1wL3iow0mC{vcyCIyE!C1;(E4nOBLMG7lFWqziayOfBs-Dl9oYsq1@9V$W-VqUUh*^JHc|!9WwEOUhtT5V{GUf=XE8rtWfDj4|A~E5Fn97i zAW}>i)rO&p-6+8NT?5lUb5i#bD zfffI}wCk{y(7yzi4qGd-1?`M1+xS$pgRhKvg`>KoB&;aBJufc2bTe*t@Y_;kTOaV1 zfg}A;VjR6)3f(<=dPKotI|Y00vCjZj3GzqQAZK6_xf(|m^wQrUNcOvhBP}AOmxPVp zOfapsr?r=4CRGkAoR6Ngi z%WK9bG>=&hc_tnpY$Tk)9puZXi8a=M{u+D4JRnKpv>T3nCbJAXP&6#&{)_y(&sBHh zQ97Nu>Cg_13+vI>k+Tnqjz7Yosk>ln>Sig6Zl8S7(GL-w@$!~v@^%#U2DQ%nOyK&U zvMs!Q`(wUOsAL4*twe4jHRS4S&dM9>uL&C0U|u6{EOfrzy~HR6%cg(6J(N#T9Z&y6 z6|mrjkpS7PXj+dN-03#Pkg5r+%f*NrY-?+S+Wg_M?sYT917&=Fx@0p^C@PjenJ*p= z9Td26F)_$UvX?&M0zql@$aZmZaw5kFoO1eO&i+|IAo^5whBJ9m6P}M2ah@5Nz6L}pqO`f`}90w#SQUV&pA`@y;B5Uf+`4?@;2JhGn zo8Bwoj^c@eWH~=zTHgl2!TAdg4$dOQSKWo%L*+wY2EtJA_u29=f(Ha#50!a|NsHDK zHKBEd_3oPF-+nmq$|nK^J7!|EiuCMFi6dfvn^m{3c%w~=qT%sb4f~J)P2t$`i}Xpz zY@y#zL4yS#f4HXbI)c(o5l>{Wu&|iFacP!j;pA}Qi1ieBTiJNiR9R1+BKFO)G4T_E z9A|eWTP21(j-vq&nu$~^)Ri;OL)e`Ep3j<_s%D>4@lmf4xJCI5O^yG?*1^F4hP;)g zx_Y@$=eoB5Va)kr4b0McyVuQm=exh}Oulkyet!P1U%!6-ga+~P@ztWDgP61`_1oM( zzJ5Rt-?{R%u%LO#KD3R zJn483>prZYudB_N2N`%^yt=31Zy)l+OP3t&!v9UOTGdgmL3Ng7FuG3^B{#u%l{^8qmN1~ z0+>T(`cOu={GUHf&z2hihbwWOy1#el%!*{r%KUF6r%W#{F3!)-FDz*3>dMODGXLhX z;x%<;5R8gIAM78FF^@me)BOcfHZmeZ4imagh+B1;5PZp2rdKyIns_?km=M554y)C# zZ){8*0!%wpEZ>+7QdL}8$%6OYZl&=o!zw3Is^GU~g{*D;*NqOr1c=W>~ z7PT%wHfvyDASo%SpfHxCB-G-(Hxfg{BSne1yDrOF)!yC?OcD;V-CFD2IR8a?X{qC9 z{I26jsz@6vZDNI)`mHS!Qcc1KHk9p~+;?A2!o8cVi#-J4N2mo&+&t>FW+yXVVohor z0n#`LO2GB^MpAr3|NR4OVL*pR)SJ09WZkk4U$xU8HU zR9;1eLPA`&2IZY4{ydBL6tCTMC&cb+xA02gpMe3X-OIi()0#zK0fM{9(Bo+OG*j4m!vh%?Y#DFv|IUBIF9snFqQ z2`-P+w)Py{xdIlk-Z`Xub0CH&q?_EMUngL3ax##X*lLw63dCRt$C`Pc?J3YsXxGMUf0E|v00gKX#uyk{9UA4{1DrNqTy zret(F&HeoR05BlO5b0&WK-}z=P-_P+XcKq&mt%sSaw7_jh`YY2X+|S6 zE2}P7Sk^H-kLt@$EY;1_xUsT*?hhalwa_Y^T0TSoGw{B0-FF7)SWBTV#gPnn3``c4Qw2t00vjHJ8LRx;@S7Zm8x#qt5jRpTXI2XH&Rc9FL{ zic?1Zxd;DmEeZ15o`5mlB!>hRjR_7aJcpz=q^3`}t+f@W7k6zn{-5s`TU(AJFyKFT zcXzzTR*n~q=y2!OPp;cvoF9H@0 zh_}|(i>+?9etxg}V_7Mpz;zr3jnFne0D!u4m&b8_MTs;GMX@Welb6nRgQHu z{|S%W!^6p0s3CiNa?-oy=;h^QXZMkXbTIeFYdGt7fDc{(R)N^5vGfbMxtP0}80)I;E;yw;_s5Iz)gNT}w+VZn&eL zd91dU{nng|n;QrYRA>bn!Xr+#Ff-HH4e?=17T&}ka~o_I7_SLvScDNS_~h0x{!}e5 z>r&g)nsm9cGxpU1&Rp*Z;N$(-3KK9G8Jj&mk7h^q=4H*v-kY;aQeyURRK;sbO2T0= z{^H`DV_tB(QIKJ9GZ;j5c}ACpo^#*I#U4DSRoBvD@{RN%2*aQjXCNuBujibR4cJYP z2K-4mUjjQJ9Y@)oZY-=|h3C9MFh?E})-k$%C zO1fQzW6sN>VTL${G!j-3zqR=c6*h_cly*%Di03QI$)QY3(IV8`{YSCTJa-ifSiQw= zus{Hz^znI~E|Pm{A~-A-9%lM6f7Bb-x8t;3+(wjxH}RyPeDf_7)~a@$-JwkP{Orcb5i6 zF^w2Q9zMOZA{ltRWXZ77h4WdmavPBn+fN6%0Qxh2{P>ZD zC02qGz_?$4>yCz$n|6FU*U!&+TMF2=wzhRPp4hxU zc9|<$)>vlt^kQvFYin!eO_HLbkXxPl6^Op~bK5P4cDF*PYt07H-zGtzClrvYn_EL; zqbiH3E>=Z(xq4zNE=r%b+F?(h%(q?>>gf7Yu$5%X9t70}%|~7PitccIx!Ob=@3;Ta zbkUaMBS2BgDk^A(F@g0WG1fp~K~fJqZ#f_>+&w-%CgFFNC{S??+C%MU7e#2H8i+IQ z=lXo{_Y|k`>ynuM_uhZVlO*GD#yQa1=^B880Wm~?bnxpLg!;OO)$i!-`J$@4yl^3A zDiNSHKV5-o**;obLJBlh5R3Ts4W21i6b_o?35e8?KM=Ye)o#c#YHTEDcBnO#&2PN{X0=QSjzyJn7jSd?*+$uvCKuxRwX;oF#;38^zi{=6lEMUFS8~XzugE)MdNF%bsLaOm>VXh`+~ABZ&`qOL9U-V3tEK49 zoEn&%(9kF*daOutwGmfbUsu2&`}_On9RN5=!BhA2FCIaBqnvbz-8$di-kzRTJr<2W z@+W~^T9IHx*4am5xqHN9_UVhgkwMI#?NDX$xHk$a>nak&w!z%-OpZ-w5Fm&fOu*l% zEvu}otg3pSPV1<5KhtIO=)RO=Bj}^I0I==;eaPRVRR8B&I1_^QcGOP^(*S6F=OB^I z1ZmQ%=T`s#N}o-?Agn`6{w#kOS0c|NjH+=G5QA5x$I)%FC)vj#pXk?FisN*iOCtKq z9WEKaKCFij_l8weR0QzW)lLx|zAh}P$fE7v-4V#GyTA$nY;W>wDL}w^exD?$nEEt| zkazuf80njy_jH+jij??SR1}tdI~1!zpq8(z>p)LiWW*j%iXINf^g*mij2=g}&2YZT zD2`O&w>PjHcDSg?!xKhmR`@|8BC?SsP$Ha!l7o!n;kpFTxG%cXU;EQ~d0{2*sCT0D zbnGd8KB40kGafKGl$4c4E>QLDTmdMjVo#(i!L#9eQ)$pPxrr&ptW#@#vp@DIU37Pzxl3ePyMjH)ER2)A39Y4 z#3d9ZwXcjLpT^nAodkSaQc_Y>M?w(5KO@wKKn(3QHJCp}qdY8ubSxtoS^f}61E?^C z(^;v1Rp>q+4UFquRL^^z~NXxyUVNUuBJ4@+)x;VA6qNlI_ zvKayf@>akx0l+WUYeHwu)GQOPE%Y?gbzohe{iX5y@*vqcT8DJxFAx?<{U1%*J!sI7 zKL^-ztw;Hmj4l-lLZ`KC-fFIM@TNp=EEEafmS(Qv}adxjik!!v`t@C z-hKwRT8?ERkojWx73)a3U=$uPNJ)3}7s-|Fuddl!NiygII!eGElTr69JDZ=g%>j8) zp?N-#)zJS9HsvxWO-@ZMRxs%iA_gij$?{hvMOS8LLn-iU-LAAe(c$*k|LDq>^m(Zw zThmUESt83YXjSM+>h=KS--#B;4gko_+IX?F`EM}nr|R`4LN;WRvtE>vw@v-f)pyQt z4l^!=e7OgAZ>99p+foNzBk6K|6BoMy^Pyk)5LaJcZ|vAsTk8zOj?&|~*;(IRDl$={ zJAkd#6e8CJdd}l%RBcrO;2nw~`x70D^s`Z|H5-tb010#`M$g5=M!@?kL7G&s1Hkm` z?8ek36tt+NnbRwf4~eN&j-Qcfugp~=Lb{FZ?9K|}gml%_CB|BnFX{;eYP8D>3SdB# z2@zuVhtl+{tVV#?;QqZ^W}Aq@$e~ywrKSh7QO-eDd%My;m~yT?qrw@T(M#JpM4FJ0 zFel*ciP>cU7L8#KAQAv9QYIiaZ2zvTwEyzui-W`9S{Qle|JMTWjN61HQlwaZoJTQv z#FT+s!Y3RiKv3@CHD;u5j+p)?j+q{g^}U~wiD}9y64$Arp`qPHbeUlfthurxnxvNr z@^D~8DL1gI=+Y9`Fq3_y7AvFf!=sZp2olLFFOPowb+>N&<%@FW29V4r{{RAC-NW@( zBX*Uoh+}R0(|#7iV(cH^I^}%{kj&O8<$j{FKhu)s^=FtQi^B;(Q~-FMBI)B-uNkge zcB^CIVC_zSL1cW3@qA^(59Cp7zHtOG|B>i64+j9nfcL82x7{|?l`55)7cy&6;M6Yx zM*B+x2X3j|%LT~8EO&uqx2WQ>hbd7bE{%MSMhyoU&Ec56G+GDnG2FFeq`9f7DFB~! zbehDAF)juw;i(0!R50$$Ty}HUVh2h6XNUIM4+5hll@tU9M!K zxHo_1#;tB-i^>v;Dua6*WmJFDum(HwrjEmhy)}THhG78n2c&6L_ET@4J@mK$u-n010V zBpfQIBO-vT@74buP_J-er1W%k5AU7erh7K;i7X1O0^n@&7wI5uihKWphi6>I8-YYe z%#6t3;}A`aJ(*ITHWOixwnIUC=6`BS!4x28F_y*QK>F0-Y{3GV9QT-eX1XN+#CZWp z9lgIA8~;01LWv!$h&di|Sm_3-DphWD?XY9BsWrJG?DW5pPHt=q<;jVyOjEFI zR!R(MT~4XMt*(3M9s%l^O-QPl>5mr{;!i#}V=2}XuZvU`2|A*NDlga>NLAZ4!P%~W zdNePj#MzYw$#Bk~rl*xPM>1|~Xb^nbO{&pGb)f~)+(22ReJ|az%0GX8urvXh-u?YO zK+ra|T-n|7L@fxj;7yE9nETf&gX-D@klvhz8>_`^TqIqs(J-l~dbEkzG$X6Mmy*LR zY1n+B)pbPZE>{iy3M14}=`QPuY>WZaf}fAino#y5_}8-WzmQsKUOMRNQP3i7XT5uy zg7-i=aw_kZ*g)u)msBiV8A`L_xmXf@e?Z-xAuq_q^`;mdyXS#rk-9oAY{iH)JrqmG zB95|;$1B~e(5d^jB4*8%AB^90S`(VqYjgREwaV+ zGzfAdAgI^4`6}fDgvM5wvNjyGVuFc?!qs7BYarESWhGO{72`ZCAGA5!OjW9M)7c3! z;lbtLLA{V8tqJD;Q!dGi!>!`a^{;X{`!KTl@`w%#IDPQb`e+N1joTv~D-~=i#;N}6E=KId)2Ljj zoEByJ+X@H2?}uO?&8d*FS;FpPq|q4PFr9-WJzl<*K>HN{%0@6q$-QC^&j{kQ(=aViMc%QjvuGo8D zdvZ?S+}DG49o&-skw3*E2j>u^vi{!s)6kWj)OssWz=uH z_Ny`nkkn7xeqr6xPByPWUs30GH&!`+V8Qpk9GBq>EgW8M{262|1}(Nnuw3ccIHOZY zG;t3YPUA5%zN{U2vrLWgc>&;sM9W+*Ec9Jc!O$T6Es&=-7ZYZLJ>LANxr^cYCGN42 z>>pTptRJNIqr&g1WNYs_ZOb=EB6}?L{pZtBu-^5c-GNiE#|f}L{wg44vR2I zll$A-+W-~znGr|YN63O4#3zKGi4?D~zB+%cSUXquS!aGL=uVqf8n74PJpd0d-HU>r zkIPWheIS-6AZH#+AVPu%{cP!%-|*0l^m>jUxGCgxL_aAYQpp^Y&mPt04qM0`e{E%L zy%vGaPnib=a4>QF3Fli4b;2w%%l-vfw2I76Dv+H>3tz=fg)pD1a7- z!`rj#8#;jh52nj*mfSP16hFSfV6;rQDrQ>5%G3fZ1S_VdT|QKEnFtNBcsumRYAz@p zC@jViu9=C4Q?z9ntJ1iV%Wu*VMA}gEi%5Ved7_Lz@<+>)EY#N!k9$)}td8V?Nfi;H zR6(L@%!7l25G;VxGIT-7N#;JjeH_X76xq?@2byuuLMO%L^8fx5|7C1!Tv4gkJb8ZZ z?0RPUi5QALjpfxew;kb^X1$ih7d(m{l{4!9d@&nKIK|R=UrsZ|hld0|##`7F3zK+} zQ6BSO%AAf6-`$ozoNOd$j@H*rf9>E;3|)+hsC>nbI@N71OPhd=7c8@^NkBDpU;5H* z+4+~Y)JOjgFVWiMoP=DgK>k6JfjKFHfPFrIg#Uw@np&0Tg{A#Gf}WWR%g~=Pqj8MJ zFwH#SxlL|1u?@!!7t%nvZLoqgU&S(-04k0{fhqFHz88Dz2Y|NdB^aj$?1Q$f`sU9w ztSpf2why?2v`eCVtZ%8@k1r4R_r;wUgHIox`l0L#1{~!Kn#!N9X9xMj3@8Mqb@StlxYZcMop#MqY1PRf!Qxa@!CDB_*ZK6PeRRN!=7FQj6kHcHNkbetBw)d}I{+rZ|+LiIl&Y zL=bY{%W*5N`!Na3GJ~c#R(X-C?Fm%@F*+x*f4>h@s^FN7m9H+mJ;feV7x%3#C_ogj z1shHX@LiyTo_-p_YDGe)U>rpLj=}hDt%Dx%yOLuNO39?>yFA6L7Ez_2Iy@Gb1C}uK zm>=?+)cijz$R)Q8yUemRfOCyn5)-O!JME>0tLci>klu;L;m3LJ>ge)Ck)a461wJ3_ z9TWC=d@=eKRu}>8R6Y=yaMJ#?8~qVVl0A!Bm1s zt6RhI+wZjcZ)t*@A|L5r|3%S2$n5z`tK~20A)#r610C$r)O)whNS#5Sp8TKUM^jEr zs$_cRu>Z{e`^sKC^gZoAIdn=DU)~i;v#x*-h$MgC8q?~%-ME(Wjm;N+@Ydbmn)1$c zxxd`1{ZQa9m6AKTb67Jf{JG-6=wYug_D`;kkqTON#_E70?_=jHiq&Jb+F|53Z({jF z{`gg12xp$`6=wD-il4hOMCE?^yK}+llCG_ie7%Tleq63>B27Cofa6|RsL#|fRu&*; z*tU}_Ac0$gMrL`Ndw@QQwb4UM3_UZjoNV(6Wc~2Q{PAGEGN(Yo&EJp-Z{Tx{*fC*_ zL00W%RaI5y%j3=?_T#!JWdPmR%WSN<2!q>FocHbGomX+yX?^|o+5k*FysUb~6Mko9 zW)OyBz(J_Y`0MrS*ALf68=kBNFj8cf9f5GdnV8|jf1~B3K31ZPudh>E#!$KMpPbCd z;RZ!jo!8fO8QS62W?Z@ZjOXmLL&fbfqq%wAW?_QGluK|0Q{ z(L%x^Fa})gze;1KTP63h2EZe?%7)%#PW+-=gjT#il$oNpxA=BoT# z{8lo0ID|Gnjg2R&PlR^RukRO(ypP_0_*8OZ@Tq{8p2GK1txdFQuSGWsnKff3{u(YY z!1QPX#^O=j%|dqEG8zX>(@QskNpzn@I44Y;ExGFv5C!TzjPvCZfxl0R0$v+qeiQj9 zjMKaLI5+QM6)|}fkrwk;7#^e1^oZdrmOiSv4#|Fux@k6sY0E22a#Dap6BBbr`I~Zx zluo`0t{n9%gk}R^@r>ELf?g%VXDx)lk(I`Zls%Q7gX0WTi0b6U7(%{3+cmTQ=7fE+ zHr%jz%7gE}fuA4m?p@L+(oOgPGtG?hGO_#d8cWMf)uhIYbQabSBKnEircFioF0Z&x zUIY{%**XEDbR3EII&7w$`m}#lB zu*9vVuXF~sx7u#nl{eC$NX$KoF!nJw&jZaKc*WYj%r`&2f6u}}n`=ex5#J^_S!lq# z8u|6_Bg_@ZJ}QVGxp!zNAD%A+_2Fk%NWv0dJ)V@OQ=o#cH@I7jXzkFdtDR{1&H%Ks z5Rtn96%10|0AT}QZ2QFa>z4Y-#$wiG|99IQ74vJggWTZmoE`?cNHt=?a$*Hq9BoY{ zvaG!Dj12O8D`U}xSv&}oZiUop8E7m>@edK1G7Cy?|rHmBR-i3MYF!|Au!gw9ams$3;v_*!47`}Bjw11VA$cLTQ{~R zU*qKJ>gw#wnWA{S+?Mw6CIK<@+c)+haiLC;$Re!*<5HGHkCV0=sKs*aGFlS8zS!B- z{gYqwGTjyQYjA_1>NjYPhcR@>a*WR*ki?83g`rnpbvdhe6mJ;k*r_lN?mQ#rk&uX} z3dg}y!FU!f3g7hXFM3+AC)%^(|Jc5{lIYsK22P?Xb4t7S;kHSm*iZNvc@c?;_`fhn zAwMWYery^BPYoLeqkO8&ar7RfH&jiuez%}*q9H@-=C^2J^ej`zxpEj?H4^UpGY)zkzig*iE$hH#r_jHwlILt7X! zu}h=%rpv*tS+JIap33<`LPGsNcdLcGuLF97mt(Z}X=1~$#OZBKYH)H37z*wz;^X7l z+AeX*qY?V}kd#qSv7uw82|gIX{YyjBxEK#ZbJlyMm_abO2N;`)?REP&4UHK-=L3D@ z-e|Q-^RbDg{3$mUGSbpTq>Qld`8CixrT^sM)N@zvA*&0sdUgp)lU`{wt1cxG1Qsj^Tr2as6>hf;auafL^JyMRH(`H`()G zXv>%EJ6oKZXe>Kd>s1!++a6d|cSdz-%t-9Zn;Yil*Wb9SYy&4!^7H9fw#?)qUW^9) z_Ka-#wdb#?KIj8mivJQ*j6x76GMhZzuqaRL6CuxM-7F3z7nmV z(PjQQAt~wRUEA-uH_X}utJ)zL6h}PFW4n&xX2YmIaXAp=bQ~isGe{7gZPIOLZwV=d zJm0Z+px%ZLEYZ}Y2y0nvi`ieZ#M12`OKn!4zmMQ|glE@5s$m@;ejBW7V33}i%#If1 zF4sQ8G!vAlZV3%Lw=jI0s&#!&IdbrK>^Aw{3py?lOBN*!qQmms9H3q6T3Z#pf22l?fFq;~ z@rWBTd+N#8v*uymm5lUtEMHHAtwrje{TBB}flrbS%^~)xZqm7rT2LkVk64K-QlqGN z(lB_fR`CL%))l;;>+h!u#Fm^<5rcmI{24)z^*vM1THZKebJLBvOJ81&Bst+H*ML9} zZjP;;arcJg@i}>ll%BWU`4|pczjvE8s`iQ2B{M1&)YMxl;C${Dzcfa`F7i#DB=y;T zNrk$D!d-R5iXnfoLrTTWVE;xY-F1zmuIJ=sJ{@V#mszf%-`HcJ`!W^oib>^4p7glxx0Dx)-yw!*!N@WZY}k zBC&}qBs>p|w8C8&xJ8tbk`jet3i}nU(Bl)FeDyuEkas=Eg>_!|mYfv)u1F0%Ye{-X zTY6Zy1N~)`%t;NtpJPf+!q1PC{$#2%*qvS=`0Duqe>7_Z7ENrFkV~&;pusC3I+uia zNoO;{B#*#S!Jo7~9hk9C{Ec4434>Mm=sU93j30)N`_xijZ%OzM@AdZf#x7ffRYP$> zfQ5Nl7)xyD55@|)->Lix)w)KSrq9Z+A8FU7#Yy@3^ZijfY$^SxgeG{sh|XFe`Ui>a z5MMQW`rM?3QGU=&sTXS+8vX>TAg{Jv7aS?OryjB3KI@8Kzl>Hax(g7z$s*?|1F?dmmwqn{=U@8rb{azQUQx7X@%(2AVsD>VxK-);0Ns*4wStpFVu} z0QxAk2WFt{qs3vgkeJT_Y&qVv4t}A)IJvWkpgn-y6fzY;pOlGErkn=X`hXDj@$Leo z*+J&dip<%t5c_aNb4!c-Rf(%8+DrS%s;3_1q6S#efk+=r0)A7Ze$8|IZb{sqh!%r{*;D?J5bQKS z&}=2NdKSVVtIj9HWtua8-?wJK9y+EB6TO*)LqAcX z^}NVAr>K>eEoxnAbUPwG7wWlodr&f5VIbvWd(x|7D-@ieQf$$IkF0GT|EQ5O>+`qu zh=Avr+uf-xJ(I2Zg_>t0Ooq&1S#hzk%65g~0Ru~hHOE1Do^9g_VX6GV-PZ4Im09ci zl0-Y+r02#QPjRA@aPcn?%DRvr7pPV5!8H;rzKi8be%=;~MN(Zh)x3|>+QW%kz6$BQ z*BV{hgM$zX`K?lq?+UVz4L5hT5kuA@3n?_Mj;>?wTW09Nm-P71skc%Fsv)Aj;b;#1 zWD!7>aKMAYkQq4r!|xZ%o6q5IXD_?uZU)btBCYbeceLS{>tR=xwN9&PoS!nA{zPiy zS|IdTe9zZ1_?c{>7VuM~=dayn?`vc!eL9RPDx8R9avrWlKMlu))9paEXL$=B=8}SR z-nS74(#tLK{`O87YN1gr@cCU*7rY-LWx1 z1QB0{4$&LXOIu~b5)!7GLg-e<$roZbIMvO0+~!Z+xuo<+f3RkE+v9Eq&od}PjQpyvQXxq|m{Vvd@`%BUIV zyQexCV^)?PP&L&lae4MrTAf(E@C@Bw;r|(S)>~*As(fgt> zLWJnDgz1*3;C|M(xu!t}J1~$A8Ym3~MUyxwRpsbS@9Ml>HF68};J-Dr?tM^A5YnuP&7IYxh0VyB-6T_pi9` zx6ZvjWaBz7>PF>-8KX*xJ%>cCpWv=*vrv==jr9GJuPB{(dz~9R8J;doQsm1YsMH6| zj0h{zEE_8SHriPyQF+en-KyS^RFjncJ$DFSW9y>aW-CTn`C7OWXD#Do>c6ch=LS6Z zWr-TQWx<(59o7*xKHDf8eI)JDy7QozoA8kqO@kd~_Koz&gmr$6z>06RVnz;and1F- zJtfQy+I1IqUkKmv{Yp_ypU#W^E>6##LCmaKc*{VH8?P~v+_53VBarFB7Lf2HKB2AV z#lv`)fSTa*#57Z@q$a0OiSv!8QpLX6L4K<$@ZH!Tgtb-yVUIb&FqVMi;9JMCX%(|@ zAUX`>U)J3GO*e_J7(|li3OfnMEr7~OT_K0LhL3X7%1!djXXV(>7ltjn%)$6hJnVLO zGvW6A&hSLwvdNVwJ^c=8mg;|w-tf3(sM)P*b-oDp3G5xZvuTT&c=XykKB#hc>9? zc=G)!nUE*(wZa)m2zO+WpFkz7aVvCY#_*zG$1X!l8q=1Dsya)Ac`_b_XgP+Yi{&H| zZ~TK8t**R-l9JdY1};By`a(>a)M4!3zGaY`EN-N{Vk^qojN7v9Cr$G=k!uWAlsG6Y zWWpVe#$4If8NpZOHD1R@ZI_mXNFZ5DvaytwZxxTyJ5TOZ)>Ug>m7qBbVbB$)4O-ay zfA(IeDGtnRz=UUYd!hy3ZPD=jH9aSC^-X+701jiQk4_jMjTX z8?)On3|Dm((Xci$bx6Q28ftOr;}UTrNnj{1ph!x3NgR*WSiYwFQ^i&u(#k%?R`RJC zALgMBUmb<2RXu_&*Jf;Ca39ffNI{#w@%L;@wCRg#n(37@xcx%|= zUuE(fEVcYZ^N`^q%WoG*>5e-hJ5$!OAHw$B4cnh@JZ!!^zfDZqOcE zYrG;$4@bxTe_DW5x+f+PNl(T?D67_#rt>YemU6zfJTWGrA9ho}1BX_pQ%X>OB5J`x z$>UYzw_=P$9wy!1zNX786j9z17{=fj*og+tBvv*HRP;@~)!_vyF@xz}Ef{GqYmOT& z2UN$cxjS)sJIjLV}5+oF$lu}>*O`f7?X=fL8lJ{yzwR260ZqnGWozX%XY4pPzIFnjC>pF+Tmg?J_ zzSbZOH!O5ooN$q+Jr$slCqxs!o=W$5f8RZBbqSQ)hynHW+&^n`#;v@)1^gM7WM@`4 zKnq#sru8N0;gmbJ2$VrUmIDI;qC`NQlQi}m?C<~gk+3nB=2;=@^RI{%*}O@0dCZQe zG`W}hAInu3a_QTRVf~5V7dn)MTnJERu ze_y5jSr8D|-*3fXc@+zlws)6h1k1LV*eX@{Wp>opJ_Lmd8c8NRZdAZ5B=;sh-GymT zp8=OiGe}D}lXc}wc57p!$N8q*emIG|HB-Vw!%4YlKpxILh5NHs?*%SO$QyckJ66ye zAD)~PiU15R5DpkHu671V+5u_M=~`E($tn2Tw4L2Uc=p($c zx|%g%$$&diaryA{uagn-e7c(HS~~?ULb3Olq`X*>J<>8VeZ9S>kf>90&SHUx%C3sm z^9U?h{V?fVAnXlgCB^6i3U*X2M;|X^wNL<2{fLf+gQ$J*_ZI;~d1^tHiXa~!pRlknKqmXWeFg!B4XhPHLqqq5 zfG!ut#MKp=5oYXZZfa4NtU%i{(3 z=8ypYUQ-UA?&GBv7?YJ>zJBe-DOPxhdh_2t0ySAm>|pa1btg^Undj#36`uo`2gL9t zImRl>zzfAD^iIIdQAGCqAmz)MB#h99-gqE3t#ot*FyifXaKA!C{Mu2Pl$)Ci*c^1_IsIHbkIyIC z76i(OH>vFByXt?}hW?zf;FwVYBOPEC&Q}0HQVzfFw#}l2@X-*hc-5-!f#R{Z?at!@+jYSRe+c8@D$5>U*1+|+~mq4xbp6mciX1iUj2 zz+O_xl%>5*qO0N+7XE>e1klxgXsk9`pJp=P0!`QnBYTW|ue5#=LPM!zSk8Jmqr|pE zC8BUmrD(;8CpKWn>$j0_HS9U_{o?Ez(DYs}IM9S- zy=7--r_86l8bHqFbzFsfKv{E4Hs{AN2eW2?rbX8a3|r(S#c03ZFKKIQix9?-l8%iB z8_wKxQ;CF>)aR&f2E--TUS4i)FnS1h4}JlGz1PWu?!G@1RaDYaO)P?y8vklF+Iz$k z2fj3ydBsVD)pnV4Hnp~*f#WdxChyzKj*=x(h&Wi>LAmx75iYLoJIXlTr{Z0IzxI~_ z`bd5@>qn#a4Icz29+!AdHL$coOo}D>S zn^aQ5X|w`V8N$xXn=DJ4GhPIBwzftV5n}R$#LUc!%7ga1pq+ZMp^5CLFys`lV?Y8A z%tWf)AOX*t#&#wqCO$stK1C$3!V=-Io^g3t;z(?SM2ws`f`9%DLc$f4Sofd|qQhdF-K24>!!3 zGW#1~SANskpU+#4>I%h-UlM1(qR1xCO(!KIlhR-U^JoJ)lnmG0Cq~ogY%qd2g0hwb zJ4y8q0{enSjQNo4!?Mz3p+Paas@mGTNjL}yuv=Re&IroN%KKmI+S@7i~#VZK};p0LC9}a7{eaR^(=vNq0rNMjIN;0mWpcu>8`2@})J0TaDV+f1d zU)T=tfR)Dh-i$WgWpe0#=Pyee_MDDD5M9=kny12dQ0Vw16qkP5Jr>% zmzb1P(q5WA5WxYdqWzhloS~eK&coyO^rMsrtwK;Jx@^AWGF^UNANEPea8nFsJ#BGSu=RB!C1RLt2Hio~ZSiGuV&hZ~Tr<%BJ%%J_EsE-W=4hc5 zj=f48K!nqR_s`DGfLQqT##GUMHYH|=_^v;74NNY-7b?h_wzi5d9h>A5zT-O=ZI9=F zw3k-@lcq+UWCmgPtPn7uR$THKoS``dh5o``)E4sm6{RD8 zr}gOdXjyHhkb!Fv-B(jzFYVRw?RE(+umhx!aq?ca-J6Gp`};ho7iV4^2UWhSsRu~H z8-3BQg2Y^_n2DFcobqWvaI+T8?Jn31nw*Mkz_#b%=7hlV&oy*LtVi4-aODv-koJIJ8UejwoRyTl8`Kq6+A=jV!YO>81;QUzVu$GpXp^q zd;33Dkpi z)P%E8unMrOfPxdHt==0)H+w8K?;@I|h9k1%^Y{hvTDZ`&r#8s)X6A^)M6c zOH!A%3F%T_ySPKCZm@bRk?pU@J7a;LI_Mi=9&;x3!iV{`HGNHm|uOsQlZRftkmi{&?n`W97FgN{LukjIQs}C&J*!TN8!n->Bv%;Abu-|ytShGTn7QO8O zse37$Q0f@qiCx5ofq?;(l#aZufKMAT7Y(Jm3Jx0;-UfonJSbc1DQqS^cmZd3J`r=P z7k7$DiP({U{eK@c@sT0H15It%Ae92TRnE(#$dd*w4iP!IbhFGyP!4@$ZS_oLFt3B* zdM*}g=EOz$7=e5B$-`rI`PDYlWj`inpIi#esVt1KG~1EiZkl!!lJ>-6w)`4S3@tmk zEIl}#&%aUG#xnbVSP%WA<#JY3R*nlN2c-7TpW;aED-QW^*||*kkpR`rd95KGUAvj5 z)33XyQtflA1H{qjh(T+Px_XhvOt_hp>=(1H`9xwSjtd)dE1ax`M$P_xZuHTr;-U$m z=im;#nBFmCpa;zz-vvtTeq&Ei1OCgvms8N8Wr~;EzL+UorJwE~w6rF4NDydIVy)5! z;wlsE0fH}MFKu5lSfx{rgO4xV60?!b^r&;#mKw8K-4zE29D;(1LxY;x-B~CQ(1TEWcdm!- zriPa4;8qXPz3t%)SvmRN1g4<05+!jI)8{^`M{wNP@8Vzhfxp09&-KXx6Ry_qvXEWC zEvJ|Djl_z&&w9+$uC6x3xhq<0-OUxlT+FZC9~`OMA67A-HZ}V|)KsHJc@8C|`d3Un zKRu|e!gheNJ#?U!HWiN}0$y~W*JJx(Gyd(c8<*F&keVC8Eqbh z^WQPM(}}PU!G`J0#jOgrBlaE42(tY6A_Y*jf`SSl&S1j3rlzL(UNY{pkI!Qi&+_ic ziA?SXdAV^jSWfC%gGWD+0#BD3@f0QXK~Pdsza3Josc;;hn+rFh| zzF_FAw%4g@7Sw$@R2XFZ!Q>1+tRZKhFb9R=so^fRY*qWykptC1OE-quE)t7}hi4#d z;jSevjZ?HG6ZRQmfubhmVZ1Eu_3={V%EHbCRa%#MWq3HU!R!!$30QMlui8u}#*k%+ z9I74xy5J5;J=XW*VP9rH-go%q-+VWE*1iU2<4@;rd6%{8h&nqv?L+d8tlBPB` z`#`VJzX$?P?hv-Hm{#|82g+_ndh#&Jl|9~WsZi%`YVeAW)=*16S+E7 z7&9myiJD+|9ARKW0$z=hs9TD9u#K?UuhiF_xn&0~%x$M%!IZq)>}}xalcHgJ&k6_s%Aelw-aFu{mL|NGbZQ0Qf3_b9rWrj7O1S8IndL7HUB|JsG! z5^f8%Q1KAw`5vQe6)i65U_J7%2)509^*<;zRbj#YK{2Tw{WiPYEF}G}Z=jM?P>9@% zV(2I3B>g)Jp#&;=G_+aT;C7(spN$8_4|DNGf6|yxgcJh^IPCr5>v8febMA;6hF<*0 zZ35*Z9jf$}F~^`k^zm7I6Qc#QYM$rirz~q>F~uw5uIDb`Of_=DP<3vmEmB%bX7L_> zo(h}-b8~p+{k6evFn_b|0mf(6h~Xz?TA%L^z_bJ)u8^tX$i(fP?!$}1h}BY;aN$^M z(PY@;WpE&9$gsg!;=}|5<+dx+AGOv)Yb9+Kg^oktFu+z*SeTlAEl~k0KA5UR1%G$0 zXfX%YZ(55=Z2RUx&S1Yr4yiM!m$0jnrxl#tv2z(?suxB=G-{%YA5=$F=w>L0##5+z zpI~5ggvAs0Vl#2I#J*-cUH(&TUC)|5Dk8986lKLXVT;B$L=dC8SXs+!sp)YBu?^E#SZJLyJH zrK^?^UT;a4Y6CDaQIgcUVMs39SG8-PCj7n+JP|-rQMdDd0InF1J0d&p0;kpEI6;*9 zUO+b5tjVH&NHt^M1czo|w!3LTZ)AN%dHEme8s0>5wC~iE_3y7uf8q(x5bp!5i{Ft` z&cV;l>#(eu8C$2v5xX7-oRQkF$I6oOItJYCfzU(Z(0X=Y{L)-khnMzyi|cmG_-S89 zRxKzf$SOUnDk>W2cQ#7sQHVPR2IMlVA8Rt7N^5FfUliOjn>64Z8-H~C%7K0>3)7^& z$S#^5X>|B-V5sM<-}YGoErYtFy*Q2+ZcbAE@_USG;ku1BZX`Zxp<~ZgfRTb1!%rDF z6Gz7}8-882Rq!B}m#*xDhet;V>erW-r#8eux6^-Vo0CKWJO2gwrOj~E;JpD%2Lz6% z{`I#Z1AXOTHiNxipVF*rBIt}i{wkF5#lE#kb^$oT0N|BDzfexOjsi=L234o-8;h(8 z=~|mH@{I`_6eRNz|Az+u&s(GaDa$gB z4-eZpgj}P=P{K&ocjTSQrrc3`Rh?8!(b_pvjk9vw-%#inOVry`7vEokX*8EElB;wu zyWRg~m<>pSc^!e!H@fK@|rwL2ELzn&t{h69@i-2k1WgPkZHd z)Yn8cu1aCQR*P#5%NcxhsyqLcOijgbJLK{opN}vFesLcb50gKyKB%4kZ7L8Qv)6{x zdcG!tW*_8m!3sP{DK^*WI<4jkj68068}WE+A0Ho6({&)6MQ@Mu;41j~kDb2Qv1SOc zZU7x}s_$73f&cwvrurD(gNj6`Mws^u_>b7;JIPFrVI;V;_oSO_|Hj}5nm{^IW5W%S z{ZC&OD|mFZgiTnEZvS=OdWb=tg&AHEHD#ThVj)eA^92qO{!DCNv1Lb?IWoDikPcVc zDYm%q2WV}w^R2+FJ1Dq1DfwQy0ix6&O9OJJRi+DaAg#@PD)^T*J*q*{S{%aUs8%Zc z*kX?Ya|I=s_j!_q0)*-)$Y*H-%riI(^T*ZJD+zuCupu$F;;~tDBma6`SD3O^YIiCk z`b9V-2xx{hm7^meJ$<&RM8P!Nyu4PadY|5fs14_n11gzCH$j%Rk~n=rGa*1zz@O*HA%F*us`KL|*QHv-U?oCz6cVhW59pM8}`7UQ)R~$aX8@))|PEEhL z^Yin60;;!YVE7*c14L*xV288RlH{hIRk$i|h?^So7UnkkGnsX2ohcm5-O>vHGg$GZ2n-leJ*__V;kld6k(>LGXv5f2j%7U99pUH zi;Rp6{hK$gE>e2$kV_+YGrFVy*fDK}C*y`9V{1pE0oosk0Dgf=4)jxTY!n0zxqbsK zq6{#YJ#aAX#MK^XpU#%mxqnWnHoj8Uxh&KR9_!!gC#OQgq7)q(8mYVTeH}$HdEI%a zp^fvn=joj@M(9O+|k(tg~#62*5(H5q0 zoV_E~AxpjtTNd@ph(N;zV7`EWz(9)-AK%^iA2u^T2Y|kQ0uCu)I0(c#oQiB!+0jBQ zafSg4LWj;)`FuE(BBljkz5p8MidV6DP|y#$=L1dqZ*>WV$TMubWhq6NOk-tPDS2ed z3WFBEqx<3d7MJf7aT|{+)ghPk+VuUXE}Q+>iw{c0Z-Ds{81U--83(-0Dn`@!fc=;1 zNsi%e}crc z{DZZKiMS5!EA6$lP+3}lrl?x1e+x>Oikc3_iR>k$!aykJo(ZAkq^3ha24Trz_3BcU zg|RH@LF@o|`1K<)*=wr?iSnhjn+M>k;z-m3+A_;ep8`D%^P!-!0yV*`WQ5~imAcg=L;P)QWKY#uZBF@|_u17MD z@d7}i2Ug09A{YydPqs?JEOT;k(FS*Lvi}prf>%eCb|Htts`a_U6<3q(pI=9Q2i{V0 z6*2^XmJtF`G8@bnJZQaS%RUC8qG?bCTuyX2fhT>^#;q4IX_h0{h7<2(c> z&H8NC1`=)P*dD#tf=ZP~)hV$P)zrhhaD2Vwd$Tl{u({V;J%P8NTBthqS>0e<^8zl4 zFs$Tosf7nW63B8L9UWCa6*4qhkLqg1I!O$Jy7Di~t`kVJiEhSUFqy~AVDder#;9g3Ku{2f;O)ch;t z260Iy!oT$%IQkEEJUrw84ud z4`%zT_)Vzhivca)co3Sax>3#fyb-Ql#9fGQl6&5PCQE`M?;Ot>ua@z0X<=Zx4u;^R zQ5-m-ENMSGlhSP_@4{)Q3yr%=rTI`h9W02zc6_dA>)nC7hSB%|lx|f4*(0d~5CH1! zie(YM+f9VKc@iCbEIguvUR?enKPBeefT0o+|GE}S{ZFKEd|u9i%H5`>!cv_4=D*^B0tM;mSFG#i6R&RMH4v8({o<8;!90J?duAvw*!DagcZ zPU6_)WY-+mHkC`rn^;*SD(-3hiWb3yhOS{-7)Z@M&PtM{!!3hGT>-=2K3tlJ6fn)7HUqKjhR^D@(>Bxj{#WZ$m)dR9(nLo ztu?5|LU}~XgqGcKe+8Hw9#5TBHDRMll?*B)p2Y^0HK);?8Q{MkepR=146n0Z4B!83 zvKzT6u<@AFj82Gkl2kgXylw*Z)uj64?g7V@ zugLT5MwPCjoHSeju>Ba=84U9B_RjR&ChAYT?3=<$8!3jF$ImNCS@k4&27KfzF{t#y+89C54v;A*> ze?Or9{sHBYo3Cvz1a+?HgtrChrtRp;#2-91n(gKDUApe_1aVz{j|X%gI`t=ZcSw!g z8}7E!dad_$*){y17T{8baqBT(kwQs;i>dN1=5i7Y<^lGUeT#(e*(4ia>3ygO zbA|F4=;+x&008ab1_uwiq~tWcrYKGK9v20f3i{hw{>u6$%PJ+y&gS=0ggPN?Fc&S7 zgglifQc6nuqt?vykJ2-mOTAzgBTspY0N1d+5DbUxC?nsdIy$AmB&Q$W%|(QTl}k#& zuP!o2a8S~5;qZ>o-&01?-eyEm>)X*xy?g% z_97^Xv&q3-D@fc-JL_w6@`eO`Z0-cN@}_-X9G0Na(B)ooUt~6k-y9&*?Dj)A$|}WM zu66+<-i;uz=oY8G&M#+c)76d|=sl<8;v0emiv}aU?swk6#%{mZ=;Y+L_v=`BnHbra zU(fSTVSav(t2!Xx6tjbEiTVMb#7H9Ukg7(kf26-RVd7k%`O&Gk0D$`D1)vyFRD$ze3Pm7JO?cz6*Q>Jcg23wtE0+l5oq%IfyBIE2`(I zto5pB2c#&#vqx5(GK1z-ojvKGAmyTi>FPC+-WRRt$6W3#!et-y)`eAa_ng<0dJTU0 zkeJ_apy`^3k9FJ{oO(E3!hpnVu~RqHBC^sszi8Rt#NUt#c{U?Q2u7MSB}xPtNI(y4 z3dHGR-Xcl5e>?;hKeX|39~=w?Z>n@^kzB5Otx5bf;TF{R zA&Ze4f`NtyH%9_7Xm3iF&GY$XX@i0sU3#qermIVy1eKZiT|WAy&iHjn?4pP-);QTF*EjwC@0+x{cqJxvW^i*%aT zMB~T*5XOxxp!3ym@$Q!wpn>xFOlWfOhzg4Xr$Po$V|97^AyvN5gDR3URH^p`3$JXc z#|~8m-w#&cv)i-KH*V&;-5!<@-n^UAIU5CawNw-)JnTQ7SV7^>Ks>3KE-Sw&bc_-ibbWq&D2L2^5t<@(CTcEu!}DJG`4B*5oc7~0u$F4?57TfY z3O>9*#-^sO05~F$((r4s?85bRr1As~Qa=vauHxt;Day2*kN_hezRS&)Ex98|$IYZf=POsm;s94&~Z%3~2JYGGxOh zNQ|OkW$q4Z+B|jNycyOr@mL)#;K072LwjTe7(=6IN751wvgex$$85H@H7TwhIPM2( zemLU5Yp;Z*#Hg(HW9Dc>RT}+kC>DA(%S8%9Fckt4u_BFk0rZ*(cXQGxr1SU5@Mca1QJQE4RqfV;K>q5yXiu?4tu z{Kj?D|9+mn12F}B?j;z*Lrg3@m@SHwGS#VZ$qe0nmdSY}0zN&dFhcTVWOG{-mWD~# zR(lMYwr^cw%WZa!{xMAl9bece3#ysFHQ*@-j+RvZ)QR>|I z5$=K~{iS^^=y#wsje-2`SZckCs-4H*5V8N#W)2Sv!(vcTw3>`4H_%MlX)?xzRaR@V zAq*U!xVHER`PiNXhrmC{a^2ThtIE+ zBytS9nO?pszxm;pzb?_x{O9gqECGae@IFANC0~x7c)>A6gX)E472Hi%@KoCHB8qqG zws=KT8OZBW)U(jEx^2ZfW62zZ|7#rX%5RL;4#m=@96E&3HLe4tbcsH=Pb{c%-H zUq7v6R0>c(Mw7pxisMIiUMAO_goElQ4kOWqRg0LFAlLUan4#zEdrZi z$#1JyhUAcA6LeBqfSWC63g8SbJb+*CtD4TLMlPYP^Mu=`-JUBEbQp5lvM)0=71?`h zq0cBLONW6hN7?(~2?(dg6*DbWQmwA5>lF01xDaqS>=_F+-q_D}F>f+=RD2`a(~j;U zmJ-f%01ZICzp2npe1KfGa`O>)+`#7iJn{5J?$6DHqK&!!klCq&MQYPP$*LOfg>tfm zKrJnrgP&HIdd9$b8Q_T_#$zbjHM0@D9%uiF>%FcYn6W-64S!f7wH$Ve)8@Awz0X3i zL7`kfYfOS6JQ|;d5Trpmq`RbBx)JH_?hd6(x5&9Z+-;JbCTU0y8TOT)O&De|=b_bM;`_ZqBI*YvdkD=0IwKDD>-gOD`j_wOKS z+;+Okry9)Ihd`$k8-41b1Q-a6kUh)8{8f2u)p0qqatzrYBEcX1+rUtb+9mc+%+pGJ z_bPjf`wz@=8xSQTej&h^Azw6YF7{*?!Nu8P`~CGgtU*Xd zTQcwVb!C0hrY#5ULjU5?3i-U!oIA?zT0P6-PcdkCz<$U^?E&3*)e{5a&IqWs6x>hA z2~bUaGiU!{b!=N#ls=}}`sR&otEN&Gq0b8dhZAr?LU(HuwP|!V{NgWdUWG5&Kp)n> z4J=$mkb1AX*U?aInOT(lK+yTGwYCF8H^cQ+bwgk+o6J4@F=wZI&%RbkwzR$*8F_1Y z_DpZ(Y!8|G^rwv*tXs^hyO6+LWJc4DSl2s|>;}x&a*82LlXSSB}p$Wg2gn&$KGb*}ErTGe7 zuwcOVleDGw>U^fnPyA&e|4KI0oMxtp^_yeGh+%lz8ozpIjb^uZIP(ka4=uCUpA%|p z72WZ2WN}?kd8M_jdC!bc|Jf&yEdCdz^WK4XIFCL%nSmMz#BX0W(S7Z<)R>7?5$Buz zCnvwG3W>vPn=(D}Tqe4@mDRw{?^2ItyAvi^S*S#Py zPD@oMO&NY3*PV)65C z)-v~Xm$XKk=pvpYZQY1wnhxH|vUzxY5iLM-#^D)XZ#7wD-KI^V^Osg|;}0@lWfI#v zvd01nKmVXm@w+iXpSG4cCmo}D`8pIr&i?s7m)1A)U((?pj@*R(NcoO>b_ZWfXJ*|` zB#NRrpd#S*eX@8FREPOEaR(&238$rdBY;tXlUxc27dsjw~zr98)ZbvA86L z2nRdcH#v3!jP>o~goamkE0+WOB5~#rY)Sw3S1(X*E_b~6j+Q0o2#JZ`IF9GfoDup6 z%x~SkhPO4W#=_Xyqxwl8V@xrV#3#1wVQ8N5p(X1Vgp49)(5U*!)8?T3u|Hjc`z4I{ zo=*dry|M^Frlfvme)}eecWL-FC8msZ zSku!CS@;$k+1Bw8_=;vsgVt0wx33w2*WRp9UmM(@wbjZV@NY|n{VRUbhz6+LHuafF zl8P#Setzby4@}_+y%MJ!m1Fg>6xD$Jxywy9GSFSi7|=;x(9*uVZnSyjuVWqa-^rXJ zKsvssE6#z)N3HC999NFqpZf|+}WSHUuc(5YEm%w~TU5tFx;3nY}wn z!d=t_6BX}*V9_nl2c^N?@6A@tZGFfn8ghf(JbEI+Kr7bk6_Pn{sW~}VN@~y?`0t+1 z)}R>w1n;L(FJYWTRDPvt^o$}b;_Y{BiiZ+hS7)2mrC3vap0SBmJ=;3fhLW76?4n=B z{v2H%rrsi1$oPbBA#?!ws#d%Q<>%l3cyi9kF}J**0t+=qSCYcdjt!Ub z6m%v{gE{~u)H-jtdo|g*Pcdg1p^vJz@w?N}key+SykMot7)4r-AVmBeXL_U#-+~0A zKuT?F^*B^*;B4=y;p2-XGrWR~qX-4>6XB@by{oYbewkQ{WtBhKsiRtkl#tvMtcc_R z#JAaj3imIzFbvcR{`_^te3f}leCSxAjlQ8#Dgl0jYyBiY$4VT5U|n4lyN2-K=wyZf z*6;%~5@~ZY4?e-jcBJ%OSgo@6wJ0jPkjOLs+7&EU9Diyn}$=FyvP!wj_>*zL0CY3}{=O!FU^U z>*5O5sfjInN0OT5<_SJ>uz8Q?^N;@J+w#o6hs$Hq1ZP&47q@jGqv)~a1qvp$arhs> zkp{&Vd5wB|x{yi9{f?==7#@Cc2>xjZpM4H$geedE_Divt8`KY=Mr2{fqd4fDTY*&kmp> z&~Be)9LH^Dn`#>dpauP z$&MA!l8DNEUwCiUD}pY$rTiFw>$|Azm#LFQJ_$w3dkVq0oh*7Z%o53e@EGZD6|rO- zRer9KW(jK1uzk7_G?~YCYx`k0_Bn>xDRkRfNk_e(!tXpXV`bfX?BN#;|3kUXURj_j zkGouTc$1cV!gfJ8+WGi0qQmoe-$MwY&V?3V!ms2V+e8a*8~lFu%)BD4f^MK!iH0a!~#+nOcsIzpi$8uJoa_)(QPm6xcthyI(pyIdk?@= zmGe_Wk{@X+EO-nz^u7_D-dJn%E}hmNY&={W9aHZ$yqN9(8XGL_@QFyAH#NH67C)pZ zIJ1e1UfCJ5|7$|94(UEM&?-pOl5(i0{kCfIhYiZ_H&!})X6Qvm`@0xJ*1hKk7F-STh!-7IgL&o4_n6e|w*Kivx>8F;kL-fwm6{*Jpsfg%aURy-|t)EHBrjA>+7 zl`NWhqa%L%4U(Te?RBG%~ou>!o2jM|gjBC>SZl|3$@I#j@dI;P9 z;(vmx$M;@jIV`jVRu&d4tv{QcU)IsPZ%@x)J07Wu7)Kb^+VfDL)&%cq1lzcXmm%OE z0#8>uJ5MV&*4AL>q!Q#NfG}4QYwLE8``#Tw4ubD1tO@lh_or+3+kfb_c*-~`8*b0+ z$AbHz`juTv8>^oWd>3L@O2Yf&;`==HclfpQY-}8NTB+k=jNUiBRx*Zpl?8_@Bf+e( zGLfj)o>-)81?S@63RqoALLdqbLrT;~_?g{g~l@$y+dVkE?JE2GWWndo$NvW`7N-uLX>^t-<9`eYpr zl)M+0vk$3@uPZK8i?78)SHUosF|webw~xX3%LyaRZs;bHnS~b^`+eR* zV>&S;_Nl%eE^1IKt-Y?`krtVfEB?JNcAQL{`7?)>y4MhGTQFZ=Z>#zAXQ|)Rgp1D3 z=cVr&jB=KKYjsO&EwJL;MHhS~^I?T}YioDz+tOz}?Oa-NzT@f@xVyUq51qH(w)?Qw zZC5M2KU<27FA0iDUQRzD6Rk#Q6ZS6+92tsdr5S>zb?!(UIYl8X~(tv@O){C%3L1DC+s%MD1D)hJLv@aXJ} zqp7c}ODLsxLZ%~MSgF_SZaY6`O{o1h9Fcx&nZlg_|L>n1d=lJBowVjBoVH*$vUQCZ{k?r%i#PoOddCIcO%hi`C zFm=5DH+fh8-ZY?)I#3)ADlpOOK-!nlp-!_>o46V(%6J5Q^&9k&>@VWSO&A%CaOTHz zahXgD{+PzfB#-8o`?QT7UHjY}?oWPCwr}#jaNj{m$c#i)&XO1dqgPj-;Py1QAIoI2 zpN3E1#UQ6YqN5RCQ%8y3psA}nYQ)lVLXMM9q66_DPt-bmE)^1vOO{~y6x`U>wx)G~ zFX9HZVYMUj5w@H`E^9pfmEPeKodJ^i>m77F6=TPa_pc{i=Hhg@4@R0VLCtpaGuqVTd03` z&)$<2tNfWO*Oqhx%ecoElJ*3~McJ?$q$7q0%Tl$XZc0O-iYEKf5KsJnc!|8jUSquX z;_|cHGx~H~PjKp$dSb4!6$l%<4Via#e`0N4>&zRMRjP$fk_U}qkXTdRO0NN%WC!QR zvEW%aPQlYDyF^ZDtJ%TCM4TCc@TbOG#7c-4rH}c^1v$ER>BLxNdAa=suu1_+2l`57 z7nLHCS|4cx3N2`CPLe?*2cQX9jpB%FsIIo3k9v}^ax}SKP?yHJvInPeVlt&Y@JWkeaQo;>e zNfggJab>6~5dPR$nfg%IkxvoJWH>B#Lv z!fF<-nC0aY@&EjFm|)3peWS|GD=REY{oA-fNg4=x1BUKtN8+ih_Xr~@TRF@NaNVI~ zks3z26Rop~hEoO9A$o$NzJqBl2DKEOEQ4;GPkBUD zrJ^ylEw7aT-Jy6_E*xtvhGg!ra>pgz?;uk$i%l#Q;h50X`S*G`-NDTq_6}CaCFKXL z+A+2L|H4@6Qz~gnahVRDJ}&DEy~p%Cj_;{GMEH7Zb6QsVIYbj`nSN~Eu$phWGm@YK zwzgDc$Z3sI#l&_({aDA%N=M|%d@fPWt$-XUT_t!*u zL+_6o3M}^H`uLEqG!?eF5Sh%>uI7(SAViN{OCXaSLI~iU(X(Y?l^k=`;aE&hc5rtR zRzLGaXw$eA7I)GQ@@c!uy-H15q8P9*&QT1YN^3j6yI=b?@n-jrDBb(9_U0;je-jYR zjd>14TL1R4YYp6H)c$Pp%5bHvA`n11D*vDT8nSUh;K^hOtM&I^QQu`qgA(4iWRGn# z96&rKre@+Z+YPy2YabSC(A_JGrGN2C86%cYT<-cWSMcn7Y1yiozG$Enn4g`y=HqNL zYCw=tp%~D~Al&#E@xIwfNx_4VrMbd?X@(*GTbZ^At|u>K_QjVv;Qx97o>FVx4)k$Nw!2_-gbsYUD5@~{ zl|Ga}E$cRO%rTg(pM6BNti{b)w!la2Bm&`?lol86k~flx*&6(?+O$CAaIgJmODguc zVZ!!{JC92m)DSfyXM&oTivh#<+wm8tV-smr>6NwSQ{tws40U(aljuM}H4d0LO9>^ITijdHMh>BUnE=3JvJiR+?03i96|*jBtpeXd8Z7A zUBqiv)4m5)0-b|_pupuSPf?h^8-h|C!i%+&$tYvF5;Bi&@e8_hm0#4SKtjSHIUJ`_ zeC~`L`U{ECWsR=44p4QubtHx(CsO$sRM=V+rl*Et8U^jnbj8Y$n@n!0>;YSe-mz7k%sUds$B=BS@uJ&k<@dcqM4=dtK2o70tI z_D2-H6H={lIga8KE#X6{5Jr2*D2f2;(3VsGmGf6px!C5Unw}fWg})mH?>EOpL~Yb& z8}(6nWViVWEVHB^(g)O%>5D7bS8_c5x62Wq7t-_;Y05p8bzOFn0ByFxfn9!uvgRZmgpv2ItFec|&U zbERK)8886+x;IyngMhX=s>!ntf{gStiyieqRBU&B4-+n)ILWiiZBWShxkObUTI3u> zrGXQOZ!wXRAVAZ59CmxbpB@uCS5i8&0cY&0Fpu4iFH2hE*)L+;?SQi+|M%u{Map2y z`oEdBQdr$@+YiUCE(0Q%Qyl?oz3h^hwiWXpe3=1QYY_yOCC^G|y!HOil_3%+_2p)h zB$h=jhev72zoic$qpf0W+SZ1W*SgZ<)jQTA6)a!0_f;{5Sk!JJ8`;PsU=>CgJ}tx4 zEMNNdsmPq{&BN%A`;+-=C+X;C^1jjcyr7dmr_+6OHXj*YD60unGHzkTk!IhI5PRR- zZk{caVtcb^DV(Qc)*z>Tf&)!;uO+`!>Ci^*fa`|4pYN1=fIVZ9^TcyXKJ-f)7drH` zqG%dJs!Y^w4S*pMdPk_QglFmDIN|cY zB@Xjj(_%{J?<+lQPgwpfK|589RuwO96lP`bANuaVE_04UbOU>vq8eQPPFeP3OI(f^ ziAqV1lQg1!H+@AzoTg%+eCko{c_p1{%i(gFTXsFRK~wa_&fU8}G-+&k#Irz#FBb{n zPiF2RZP>z{>!hZHeazbem){Rn)$1z09>M}q79^4d-7EUa--e~VeaPCUt|h12xNYZJ z4VVmvdn4lxb&ZX#8U5*Ga)YoYkgc&9cvguJr)kt80!)47*w0e_NW3qnF{p2dfi6yvwbTA4 zeDwdBmGwIQ`ZSJ6RN=d4A0D7@OG-`#;AEN8Kmw5T z0q2e$;!ldO1#(cGSl;lZ%sbZ}z?m1>I^xy+;p*`I-W^{yzxCwg1R%F+=FXtnaeo4! zVXJ%w&+N*|hv@!lcAxJK=PN5Kz~TeV4Yeb58gK3iKsk1I34+|!d<3cm=Dh$d2P zv*pPU0NM;NY!P{-z;FRjU+u;K2Da?X*Qms!cA%nM3oTd#T$N(5q~4>Vi!=LDA%mkc@Rxu?G(+D?NRs+7NM) zS?a&wYv_)yt}Y<3050~%OV}5sQBi0X(wJLnRdL4WZeBhkMj}j^KbsSJan`0E4L8Jw) z_2j#vA2zn%(+z6>!qC*vXtdi5SU)X#Uw$kIC4HTL&ZU~2evOufhm5yy`5lrWZV9reZu3S6=kV;dNljp!If*M(aHqirk zsJQ-J5Dw}bls(1!RPfJm2Y!&IU^$`$0SZ_bw!a*;18haRkAcDF-^JR2xrv)<{53be zwyLU_20`#2W{Q>3`Ocs+xIM0@q3k|~=%>pU$)vL!I^nAdh+Q-t)6m5sXTT1^91`i5 zCFqhBB)mRUzAnwoTy+z_U_b#%EoesrZBJl4z?TCnBnwcFRSvs0&$Mk@3%m|hXcOg& zvOG_?#g07>3z8EM`EOSop)kTl$zlh9BI5P%8DO2jgOO{d3YtihE>Mz)`f$H?+jiUY zPJvo*bbLIE%f2h2m+!0t7H|csUXZ+)Jm5)#F1Es^ixectV%OI6cv$)Q!6mcYav2e| zsQy+7oNSFypasZxP|6bvvWnz0VEiPA+~Hn(6wUw`0Hbv>5O6bq(~R#~An`;m5?j(; z3RrIqYaT}cKr9RliEJ4%4T$DS)1l zU%fkNJ_V2p?|t6&oXNYhZuIus)>BeprFE$6)>cB(QWi7ggc`~KUV%v+nkK`if&mQL z$u!SDGsS>JJ)ckx^nvX#eoj36f`a3|*0#22%fCxQ39k|Yjfdth7fE&P6Xm5WX zaQE6CS5KAFhHe391S~Z`CNDw(1ZM?>adh9i&jkc1C@6sCLI(}{1CEc6L2A1D7Wtm) zCJCT0qlx$*m|icKo_4^*U-Nx^{s$$)MlMjIc~NG@^8&J%qM{-Ir6%$^6NdV?Ml&<_ z=AB$!$qO#0JS_f>N%TLV=P<7-*XVlUa%CrN&Q|kj_>z zCtKXC*cvj$wZFf=4jS;mLksE|1$sobGS#aZCuW2+wy}sF@v29 zR{PV{;j~xV1Y$;Jru@hFCi?Eh^MBiUgqJ#-iHM`)<<%AV4@F>#nwpp_EiV_3g1JNP z%zxhVPI6xa$wS%dtS9{4Y0D*=%MXMi2;{vcWhQvmL!S>ReC?s`0G`>z#Dt_&F}H7V zb=4byl}NIzEG^%O9KijUX2n3FCe9@}xKfi|3dZ6U>27OOLF+}ymednNONA+77VK_+ z1b_R>%xdGp8Lv2W=D^G|Rll{c&b zTI$b~6k$j5MCn%01gSKnLW>hF3i_o&cAmkC8W|nMOfj&e?g48R5FZ1gg&0fX7bo*1 z6tV=$e_#;_f|-36790%P(Sv4&3!Z=%ry#(f0~#}aWpw{`JD5citI^0*w7&t9tp^x+ zRrvM*I{7{rUY&!qp~jSy6filH38aCi4>%_FL*Bk3|HFa2Nv=7FVM%k>6SrUsJ__M9 zx>Xu8V#$X~z!C*ZK0UH;+djC|A^TYteEIi4V8ZmhfBWD2;>;% zk^&0|&cJWwUB5@uB;-*foGD;3G9Bnf7cBdZ${5EjRWNPN^P1fLM42dUFD1J~<*_cs zAoQj>oJDtdN;_6AC66+J(&qRMoKG8O{oD3poHb4G?Vc1^q?l3q@3=ABvC4Je546Cy z0!kaOQ~*b_FuC>hOZJ*!S0#rOWoDPVj z#&#!Ctt~CP1>F(z6Ts%Vc?$-!H53Tm5Ay+T>lT#(l`a3UqEx-|qG)`4{PyN1uA>lo zGwO>s1ttJKEFAyC3Ch_(nc3L5L<1zsOj0L?2;!ZX>YT;Qh!7Pe3N&H0m79Kjfhhxg7>Z65a*1-aBQ zm2Om6OjFLf)4v6j#qtqu7ON$ub-W~-K3&1zuF{rC4-a(ZXPAXU{k4{z=Huhj0ji32 zORWJcc0ek1L}Ze~A;6f?ics7p)Jk&p@Oao61bU-)KZR=-t*SM=&NhTAQ`TEO)g4|) z^+JBYD;5FYGT^5ai~-SMOqAwEMgWm$q51#R?E1#Fi$KPU7J7edxEYTp`;??msZ~xy zNEm+7)cxl_kp+f&I4e}M^&=ldXer~B8~)&K+`=3;8RTfs4C(o6=v#sXi8oPOgutyT zeDFrSg`WuQ5aw+7S>87(B_*K8oCwE_ya2V2`G-i(#_glCE)zDgSNuoOyvY|v>^0IP zZ-`D*|F&XiWU;yUuS^%u=?8A{d+mIZ00Ut4iuk10qcW% zhs#7L@H;pdUJex8guw#c-YAWQFV%CP&0laR;`nNPIEl3jGJ z`OWD$=BZfPyaED+naU$`4-v$@B$5nJQw^Y=zQ~i2Z&lJJhz_3JG4-P zx}a())mbyP2yWT1?+zE_jih`P$9B)AMn};lCBQbUhF)&^Z!^wl`rcax_37X8Me(C1 zl$glU*qJQ`ctp_>9w}?tMt4qP@VZ6n4WJ&&7>qDSbzjmnsQ@~HWnHQ$ z9`jZ7d>kWpQm~~Vwb*T=`gSlzSOk`co$rg^A;4{md`ZwMuZKV&AZCf~2QFT|r&B%n zk>VU_AlA_LzD}g5mAX)EUhP}S$2{LUdtZi^MYx`9o(fLmk`k??I*^-GSD$B0wL<0? z-gxH467P#WHOX{ye#Ptij>`nP>q}-!^7w2u=ccCO_!R>_!nS7|AYer>vgVsacpnzW=}7#zt!WL=Cc5J-3>XdR8G zQgCr~4Q5b!YjOY<&x<27o6e>hA6(h}^NZ|9$JZBc2`2LYxE8066%?jQSW-rST4!G0 zH)D900>`Fwzr=&mNys3l0foc z#)C^%QN7+BP6k3ce<467jm-5O-o1EvX&c{PURj|}l!oY>92`)`N_GhFbd@sv_q|Sw z0Yv4O0Ea1Tw-N~iXW*DO)=ZHVpLdRU3%T3Kr6L=Fz;SD3={zJnyf0Vy`_NQDOh`x* zfrS=I8Yo?ZN$*9C;rI2Ymq6C2$k#!mA;LW zq>!Bkvj&j<4w}-wRcllZd`3bAv2^lXt~owBJEHP`{Q04JFLrTVheLoGPtq(SJc--6 zEk_{{9`#K{iBvf04@#qfH`{wR`Hnfa&~605d5by_0pPZ=2RQ(q=3;Lca7omlPZ~Ap z?57`w(S;A}6!;{NYZ-CEN{2-3gpw#-pjCb$p<6i*LgM03`J&o}2HfwxUuj5)^vcyR zH^rCTeMNFj%GF92twcW7kF#dTD>EBZYmDqVgvq30g!7Cojz(;FDYUf0M~4WJU?9PL zy%J{pO>X!F8-6kx40=h4jg8G#FNlu~w*wss2;Nz_{{~>y1>XH4)Jd@_OsgT_SQ{%z zktiK&u__Z9yCaFlOxe_I$CW<3J0K+WncT7ve0^!kpwzU&MT z2ZxHP90&|mfbSh#VCQMr14Bwnxee-G?DX47QtRe#vbpfd`=@KI%`Gke^0xvdvRFI{ zNZ?1ICEL77zwEKJ*kJ5WKR_%$#Wu?P14L(gm+sB?aYcUqEcVs&Y`+|bZeXYqq?^vT z4Z}QI#~8K;jaU+;`F);#a^Wp}{N!i_w=ohaz74z!fW~eoGR94Sj4T?gG8aeSou|oo za5$;m@iBnw2}Gr7!zoN60Y>N58o%yEdne7Q*PzOCJ4fHFY<}E@lm1QVj3l^OuHEpV znV*N};@&G8&!esPTWsi5I1w^Jh#p|1_iyJ5gTr`sRyBWMOS)JEv`&Lm3S`AqWuJ{k zOlrZ-(JJ!cv4i<792F4v6I`6{XZh+?&J$`1hP}uZoQU{q_ZtM`qZ}HNN>N>-#+`(5 zhK=*Z!+i;3UjG_R;as3XJ8MyA#->G^cya#(5`M@BQkbOSU0}6#z9wW9DIRFL;P7Ug z`K=@#)JRsBczQ_*Fd}n+{Jnh?UPzSgW&R;h-vMf?K^;Ma1k@2-az$S=R(#MqiXv4g z$L=tGc>L>DFQ61nA|srvpjRzxq^_;Ago zQf{suGVrPSq%I?`px~?7307`ea!BIl z6k8ffx={Q!Aa6F30rztSQ-8)h^A7-P+5w5L|NM~{TG!s*$0V=XMbT%z=>E%{!FMWN z8oIi{5seT?%J@F!eix^}g--uUnb=Ox{gE60gFU3MEv4B^YkuA|x zC+Y0G&;g6sy+{BBOgAEn;zf>OH6Ahw=@G&EOt9WsS~R&noYX0O@V*drUcgo)gEqXb ze*EfuJBWY}hcyc^9niVQlpmu+`RDY-Yc`V z4*D1#NL~T`9mqjL3^1Y#-jJ&y6)z1~Zs@=(1FyAUk+@zY9?F5=E11%-7KO{|T_?;8B_j^!*eIq2eeR3If_>72E?1oYaxip{l{;^Q&CIXc#A(2L}wg?0m3Uq(8H)h8q>qFo1u zA3}Xmyi8qXM0{>vHPxC|*VfiRc)j5xY0*pWeYWARqOp8*4dPRP(vzk@JVC5QtB@=k zXa2$KdZK9C@|9~#{YkkWTJG8(Qa9CW*bdN$0)X;d_EhMP&6tMTB#!DoO z7FUkL_F-_EL5Qt(%eCNsRg%}vr-{3?aFGTBPSB$gf^{P_=l zlE5hl_z*pT9K8Uei)|FxmUS19T3KZkrR6}k*R;340?Q&XGR&VoU%Nu6>Ez0$56?w^(%8BuV{+aK8BNg?^N;Oq!>n=Ka8V)wFQhl2 z?ZMaA&Kk%)XB#b1`su%)xLZs1_K zIyhVa=A&AvDjb%~a#g}+$WKS9_3W)r-hSR}7)TRK-Q4flq!`(0S0kh|fhGX*LUT6G8xk1 z6dK}q-KhC&K;D%@@{CMIQm|-iYYX7zxrk$P!2ELS+$~4(mkRAfBxaX%2}loH{v=i$ z=~b$4jf2pVnE11q(Dm1q8DOPZuh;YIlD(7~nT5iz`e)wYc&2sKL&p`<)&z#Qzu!(W zlRnXh4;#xmjG-cy;6V1VNH{1o+;C)KEAOdh~Qf>R_xT|viD zqAnpO!)-qYsi1^N*YU!z#3cc)2nlkmpsWMg?xp+Nh|fwwDM`lut)Kta(wBnpQEvI# zBV&pmV~Cc4Ycq5`F0jFOVf%*=o~jx;%* z!7iV)tM{eN?VR828Vxj+1hH@lQ}UKv^@6ItA^mNc!DIR^Bg)1out5SVFfPDCfQjy6 zO$w(48WV-uV0OD3M|{J2r}~2fGqfy(6v}}8z1&{=&HwcRRKL}uJmXha!j4(GExf%m+beuUe`)waLw%S{VL-n_9^4aW&u*-7`nMf9D#XYJXl_Y>9dZ;kfT&JS?*&`|*@+|$ z*J>A`8-JLEhY(9K>+xOWO|V(}_+);VNt8DB@mV{)CAUiJsKr@2uCF-4j)C1cCcpXD z-ekamt<_xwV6`Gm_5xX)a?@?^$(1CT1%F_OsH(QFpWu75FYokv}!x@pC zZy3E`Oi-0{A(3Lxs52(t>q@#k-P!XI?dMQBMfBYx7%y1!Uo9Gs!1o|oJz>#A{Qy%O z>v=grtf!zvUy({qHrBY6IC1q)|-+kg_wvLFs2eIs5A^;NkF`pHcIxPFV^X>Zi|&^Z0gWy z>6qgg+27Cwa@7p=%~fSOA&o@B6YXi`+n9Rjap;VsPqhwXcd<-qALBSd$a&iOQ{Sg? zc%^A@$@BE|1Wq%#>8Gn{h5NAd^4@QskPN|b&uP2%o7Wk`R202L{TjJSZkjDRDk^o< zq-ffo{}VQ{R5Q1HN1{k)+NcRnMu;}3{|n@P|L3dvsbYM8Tbn}Ke`4HTl#EdHn?8MN z;qyP@^q_(d*haG(K?L*Cgx(6@bP-7W)N#J{D70kJpX>TIfM(ZC2CJjd4S7lwM=ZSe z8&KYRdZu~!02#MitakRKncuN!frU!7h8 znM48o5@w`0*f?qz|EhZXorI;A9{d5OBN`P=S%L?50dGZ}s0u&o+* z9a8ujI)G+4ckckw8L3&U0<^w{KSE^AwDDw|@ZMmYnE$M5YSJoK1CDE;Dte{;7}b}T z7mNW)XH(p3Nyd|mUi)K&le<2^oEBKZ`Fm&bjS{@y);Zs!>U%>9sx*~NR3c%Z{ySq9{9dIOC6vYnLSex`ig!d_*urKXY4;fa-8FiePPWBk;iLEpzv z1Qn28Fp&NH>^-n9$+LUBns&3Y>@C!Blf@f%wUGw`*j8|dtyD}M5#ZhbWwj1gvpFJH zNWkgJN`{3%sroOr9%J(Kp%VobG;C**L^U(G%JC_4`fl0f5Q>NFMc2y3%*Z*r#K@FC zMccJ^PUQc72_1_dCjS^3sq01$82NQ?R&D#wn!+$WfJ9EO64ykao0)8XYH624aw;0zJR z{oNq_hP(wYXM0)pV?3~2egu{f)sUWT`!TrldO0cRn@W zaYG>mW@k4K*OpCO8#i`)9>e>WMA4xUsb_uED~O4H`lpFEpJ#qN{Gy@)Z73>#LPNI8 zrVs4v8D1ey@E%ClWk(OdXC0J3@2x160^=u6Jac01zy%w4cByzZA0JfgS`|sgB=^QA z=@X*bbI~N?MT@l)9DmIp6`J$(-MmFYGQueOwHK2h;a4moRWW}Awu%IK*CGO8@2~xi zEug%~i42Z*(AmLQ4$>x9XXm>4rmCz+;Q~~lbZnQCYY$R;k>+|=G2`F<0;;3B7KAoJ z>9|b|Y37nLFC!IhfqDv1;>0wsVuwkcfp6lXMAcMr#3=2^!r&4-%jS=&RC&ihWtcm2 z8?5DLz#Zs<^K&P&i$d197A{x&42cj3xH~_ucA7gG91PDVLUG~viSfVLc!EkVt^6PV9$xM2o8LmTenXH}O0>K}ZW#$BSkTpMXb5~Qr5y6||HPY$ECtdJKRg^& z@@AmjxH7|$nFB~bRaJJ01yiy(V{$j9OiQ;#T~k8?l~j0_8V*+VNedlm&)nR9?Xe&q z`H+bFAk!PAfcNFL+lKMv{J3HLqSo+n#IEJ1cob*sVb$$)DgU3bZU;zpwSnebt?77F zRFutn+h|_k?-O^)E$iuI!)t83v{*B5P(V(o`5~U?^nowyZEhyDWH;NWOEYT3`zO8p z<8t2)hW#!&I=Xbm`|>ZEh5@ZlQ^D}D$liW97Qf^@_)V*>0g^@h!9plC!HScSxY$_J zr9I_Y-dwSAe%V(PZnsNPp+B7Tqvp4ODER6Jr>Ki^w$E)5$6umar!1j?i_~Ef%3>GI z2alm_Zka?~@ppa)>Q7(Zt|<`vVp^~*`8sU(p_0OxufjD~hkPwEGS{gBRgy)U24Ta5 zzt-zIp$_wBEjFN2MIs7aI$37jg@?QCY!8S--N$?)R#hcj|89u?su+_=dYg3lX2E}3k`P=|BSCCA(kKvwmg?uN z2&z^poSe8jqET=H-;;>Ls$gRi5q}^3@&y|%WqfqB^VDH)=}_S^T_3fPhkh78hL!6@ z4PR!OtvEZHjnXSd{I^0~vhBtQhdP!t?i2E}bM32x3(tQ?=%@PlGE;reKJ9tlE-`*I zSABFr)9Nh=P?dU}Y1c|EpK~xAtPgg|U790#il<=w`BixClIYezrZeyCLy~KNr|O%nvZe9)v>T7~RC@`rq`XB4 zj57U{tw9G9kS~BZW8u*{WXI)oqKO_C#sn#rI8rtsbrkh^x8>&D#?``S5ifTXe^Pj{WbJ5(w^@>Ob~i#b`;P^ ziLwkhV619`E`cQDO(Zsa{62xlgDL23EUfS#^VIPyK~VgZZYbf-5B6!WNSpGDEP`qi zl>fY$b!9=7NKk;L*X|S9K2?nh>k>>wMhMr{?))@_nvX{5;LjQ(@lFc0%myZ3Wy<}* z$TX`v7^Y+bOiJB$pNw2D5Tft3wc*1=VkliaT>m>AblQEM!G--xqY2uTdkZ<=y?`L; z(5Cg>RQBh+kb(xi{;VjdZswRSr^y9NrhooQzL$HW;4TG(r)Ri3R4cs@=< z)=0w!QS+$wKY~0p#i6VHhaBgf&$WcYK6puElz{S@S|}C7`QIE>(~813?|&^WFpewT zySnclTBdWF2xEpbq?)$24k_OCp8CE%&R6Q|gP&>JEb340XUP_G8-%g$bs1@_3F`0N zCoR(n`-r4D(1)U_IWuu3p-ubhurBO1R@{1!rRsM|JYi=mr!A)6Y9crxjpxwA9W`bD z*itn;g5%7DFIWDiDyuG97o-tsDM@KW zLXeh{77&nwzENRcPVHjz z)z&lO+gBfW=a*-bbFT2tiU?U?)`Sx(T3I%1&Xq3ilW_LnwQVY6Qkn>nQSEjiiaQihtX)_SPEKZ!vuQeS zcnTQ2u=#?RjgZ|R>~b{|QvZGAZkvE78WpoSyJ~VlD%c-T$`B#!!kyJaP@x<>HQtqS zr!m4VSgdYi#59}N1Mhp3Y%fllSOibB@%mquQ~9&xES%4kQ4)LB7t3|0HD?==iK`wn zON3T>UKg2zv}9q?oqZpS)*W!=U+y!6OBJ4Ej_Y&zcrJA)IqcX(H7gY#i6j1XW)bEm zDmdl)>r}y^I^I$9XL7#g>}LWkT~5t`vv2W`XcV5mS8L|4fV|?n2h$9F^3l;xe`~Md zgaop88*Ra4l)9vbf~)6Ae8lIzm`b%8QS?>*j9cLq)_WuxKP6l4*QaNRno8Td9NL@b z#609R$8_;`$yz?=TF-4(w$ILWB3*fRnO62?@mU+GGQKs4Iul{F5QQx$Xl$kkSQQ)kM{nlbj_$ zzr)+r{emP~KRtxAsou`6wzobg5;YnP4bZ|9L6PZflvvMoL5%_MZm z!}n)&aXY0-B5&fj$GkyQ8R<7x>P(N(S47%*L4 zs<{aorP=P-Y^aPtzO^G)QV{}Hy)C(<=1z|)VF12cejwspTXJRV`^)ul{+Ivk(9(Lw zyC{}Khi#|d?F{eUGnpzK)yI|Z-gQ|Y??3;LIi@hL{(yI*nnb^`g}M7MNrt0*sj_<% z|ExBIx}o@!Ygo14TFVE<m>{Rda=%W6EeXP#*6^gEke17fwMao?i{MYJ`tblVrFd#O^(K{Lj^Z_#08BJE)TiPVKUYR@uUh60Q1zd4MR~qdn zFLR%iX4HmxZ23#qYZr{j7L4c!z2yNMgCMh_Cnf(i6QTLojtx4=c`2uLS>}I?_8D8a z*94oUT=$B-&aACxtd4nuPI=uzM0Rf_o#NAjO={Vfc0U*GkR+9ZON&M=1=4rsW-AoF zPOv&D7mv!1kb4HY&LHt{DL6!r^0M*R*NSRy$KOL6E8qy!9kp`2azgJh&#>hO3`7|NyeWi&$WLdQ)1)MSyA&|(6 z_OZuG2dxuJl&yPE$yMjE0+5Hhl*Xw3sP*ytj5YD6qOM+AmltgU{ zwq+S_tF##6AdwSf+$x38d5>-$!^DZ-ipl^*RkEt|W_d8;hiH|Ul1Q-<5s2eHLn+D4doA++dim97A7}vaRKziqgp&zhYgLk-XaC0CeRse9*Y}GY9yLe zO}z`QTB8~%XDwDKbQGYt0-bek229TZJcO7G&HFPkx^1=So?m0vJ++@HNM@H<*ey-RHQ6_!=3`31e)HT%Ab4%&M{47$+T@KXx+$4l3{{j97u#tNIXyPRO1I7~H z3V(0rP$=Nua(c>yAGH|dyPfT2;XX`POzJh+yA9Kh>LLj7&t?Lt!T8_10pirSu7LUA zKFl0=ZdAbgcCPk$R`lF1J5d<^zr4g-T;0+vC()!8OM~nhiexyqO4}U>Ui%fXm^9y=nansK1Je*d9M74Mdb)`S}ym zM?KL*GDo?$(ovT^K@RSCG}?toV^~y$^dfFV>wGtofYc_)XI^5;zc&?Y!5vfp>D<+o zCqo?nvuE`8-{agfJ09@4aZqHOu=)-&oF3wpjlE#keWRpa z^`51MQOf-Z7cO1%Y`MOgPq;7t$uIi$tegGA%Yxv)V*;QQcUkCida5> z`IrRj1T!5{L+59@y1D@0h8G-WcSLFdi1*N0zI*i$Fk@VF*k)kB%jsnvDr6AOT3Ot9 zVs{wgWwjv?8Q0Gc%>+P<4q%cAay6~Rjixf&zPg=_9?_44ggzRJ)<-R^&3n1d01km4 zBHHYAvNh4#+Pbk}`Jdtj8(8tu&=)ZeZ^_c1?)sYJC+*|&g^-Ra`C!PYA4km6F0jpw{Nv4D; zm&+-ZnfQTyRKRga^;@$+4cenX9M}%WXCO$?Nb~6j@_X%ju0nwZ5MjwidgmJ(we_)K zca~Bx>sW`O@|e?3du}O5^?#zNpjwkB$v}4w7ZOUYI|>vPwPAj;(4xkDubqlyxDBYR zcd)s1k3$aAPte`~_M>^w)+WwD@?{jhB*w-Bz3zNyHmJk*BPxB^THcc+370Yb{PQPq z?dR2*PVwm0-|#FdW;O2wmO5vXmh z0k~O8Ymh!$p$X~M8+Ce2gq`Mc_3qJ*$eN!El#uMnvi`nbWNTD+T+g4e_7I|cI0513 zz>dCuxZOL-fpt@6jQGK~Xk`8U{h}hd3!!^s>yDt_{41+Fc6i=Ux(U`1%BX^obx7-! zp{uN`v(#wb#_|1km#WZJkVDUq2ZGkusnQXnT2_U-4$~y{rBit(8A(Lh)v&qy;)bb)fJi98D`*b3?(lENr zd3llBpJE=I|6;O5m9{PMU?t`JIdxw5Jh{Qcch@>Hls7(Gl|?e^uQN)>&RxXW>t1GM z2 z#x^EXM7OiI&)yX1nC&#I5YMu8bTr24I|B+R1N<9}jrY_@d;WsBa z?Geix8%r!EFL#^SHI?XuVR`y%plj2uW0A)uP1QZg`ir2i81En`&UibjuxwL+n_z@H ztmEPDRQE<}{nGA~9TZJcyaU8ly7R;b5mL1}a7t+6OZiAl$?4^P21Y>gL8Xe=ozwkfWpmbB|oBL9_ zIchmNREIG+uaVN1-?fB+>Ib_9zIg7)y6IQhU&_GtbiFDYyY?2j=WC6p4ccC;cIqd0 zk?#N~7b)dPojEY@#IqlH=)v%>cuo_3`-7b3uh%xH81sr(2$FkDr{W08RW-{`H_Sd_ zcZ$;pHOX@X$W6MK$RnF-T1VNZcAi+>ij`E*5(#@Wp4Ei;hys*RSEJk}l4E=lZKs&zYL z=%^Tp+rPXX{5HgYXS0S(Y5>M3S8J7k(@dV>6%(N?F<5fqdcsfW2JnoN@NA?R>bM8T z=c-Iz@4Qs8;zm(Er|;YsU5sBm^62M5t{Cx2&4o-$ORN##!qg^G3#k4 z6qK0EQ~vbUOSNT4WbV7_sEq>C{zDoFJ2kZ-QyZHB!~GLBo2z<+QZIRf8UV)KCMH*^34srLX zve3VK9GVUGmrquy`4;8shLb1Z`eYZs>XI~YenjfBA@w^BGM?t)+{MM3eIigeYFVg? zNx22e8cZ5+nYFeewskn^CWSNPTY#n!7s0*da-~z%eaW~KNEyJkL6Rbqr_%by78v4h zB}`Blwyx@h@<#DzW)ai5)0Rx-A&UwOXnv95(oq}V4&Qkke`7QRGZICclM`jcd+X<+kGDg0C#JsR=JA5l^D-v4L;e!&oA=2#u& zc$nb|EIrnOb3Mpndmbsi!)kZExjF}}A2J|G@U8Mx#PE_|V1h_ofHYab4ke>btu7{t z_DHJvL-6tK5V<5%n%R@ksi(7w1%9Dk@nr9L_O5)XVXTCN^5=U$1iRwR$;vU|OwTC> zLDDBQ=HH&MIjyLYzDj9N{usFUI3ThnNer%+n=F7`3-bn139WKq`1srt4oIRfXkpg& zRB0*h8CH-a@AFb@GYX;-ZEOcixhET(A5(~v~XB$=oZ&??6>^<36zg18Bi7AYH|NcE%Kf+S; zT3Upke*uX`Nr)U9oI@{c!n8}2CMSnvK)DA)iKU$I)*fQB%+Kh#S;(rqsJXUS_DEtC zChXu2=6h77tl7;QR8;i2Z4qV$2ZE1~Amqo!21^Yn`UcUoze*}I+@oXTr75cR9&mztuc)1 zLT_Vf%Qs0nqdgarB)-zbs)pJrgSC`bT=7wyjm-R|W9`&r{YpJ!p1ZOiUgu(cs_IL$ z+(@ieD3Zvh6$}&TY+;lj{48>@XiPLxS7?TF8+-2%-(R^u^Xk(Y^y-poYHYpCq1i<& zRX+QRC@0o@rFNoZRE`F>KUo@u)M{$GGxdyhkt3#GLx!@pj$alxbkFxHDQMsH(78?gq7gcISA`{{Gi|r~}nIPQHA*G!ov``mKn5q$Nt3 zD@iXOESicT7$C^b#x`8&g3vFT?*jvPVxB!JVOo>nd$Tz5S+0+}PbvrT z@8#`Crasd+Ii#ajaFv~r9(*RCMX_TF9k$}}1D@LuiuIs2G_%=xEM!Ba`8Kvu%7Ap5 zfv2`fAw0ALX7;wzd8l)BberS;w);=>;EFtVJ?03$w4K*b-c1vMylxJb^qga}7L=91 zwA_;=uXT-KZ0x4hH6!w5)wBK=;i@c}9O472vlFX_C1quYZkRN1e^e@%PFcVkP*Gg* zgH#qrLZE|arIL=HV0>x{;^&~20!msu_;%6-de&y0Bby6P>V2MlH39B|8EX-+%a5!> z0y_D#fQPLyGC%Cr!f=|t)YNy}I|o(8#3R`Vc_dc_KB@cnRsF1q-cMW7XRZ0lmXqd9f5(_f{>u(0 zUGxEfM7aUJT??hZTr7}RLnc5G1sc3J0`fXZ8u2(~pr@w?9L$2UX5U#~j5$eg+Xa-5 zS{g8xv%UphS=Bvy#HF13y$9dU1?^xK;bhKu(WX8r-vt6%vjVSmM3xlkA0m#)FH)#| z(Z!-{W^J`pAz1{Yb(h6|XmOrx;aq-eK4bW}-tJz1gt6VmW`QFmbs?x4q_PB!Vw2#O zHJ?*LC%!oH9bYIfF_FN#8)z^%MDu%!7^e7cj6Qm(y6o?ete~d$o2KAVc|m)SEOA!g zM8USJ;BBb*x=g4Y2g&s0q`*kY!@^S#Xv1&gF^ck$&rVG_qz$8>G4ixfl5-Nms!6}= za#sX|1mZL-BsW0a*{eIu>(J?ry;M}Ro^6;Y{`{`Yq2cSq7svNH?5ynU1nGBaSbO16 zgHLqx09_`mqqxX!JTA&Jo;Udm5>EmMI`Z)>73sBsFDa=hw)6&8)#I^Tn-c0{$|pZO zqM7h3p4XL5-QPvT!wyQQCJ@YXd&rhP`N=SC&H8?@Db>5R7eN*Nk}@{Ylz+{!&iFS#NeOIRP=^dZM9l{)PDk|;74x{CAH<^0&XvKm; ztOp`SWn;KpM~J)^gUv^y=#3L)HD#98BvSP=&YmS+BtZEOMLgjB(E3Io{Z?!Q#32gT z3)w?}28Yb!;S>RHjo(pWQIRpz7K&z0ZYlL&aqN~s=zJ%v1Y&u05U*D2N@?R&%Nebr z_JG>^?ES+d&iZg~uYAaSy4Imfc*hNcep)`K#(6xJPV7i1QOO}bO_Z5Hr)R|;G}=F( zEk0Cy@LEeN`w@JrrTsKFHipmHI&8GB{YEr>%IvW&RI;Df^;x zd#ZX}lR;WA1{b;`kff`rfzT%z6AN!V0nea>O(MyDdMsfX^ZtEp(yP_s`|A;W2cojs zBis?06ByK=k`(bAj8kKuV5#X?KF9c$hI)aEgq@#YEmo0NK9QQG&GByNJ{>?ttVHcN z%1IzF(d`_RagR!SRV&-Oc$eHOc7yYPj=pXqPuXaY>nTd}+?*9pEms-z38@Oq?lC!| zmJ@}bDBQ{o&7OZ=tCN3*u6j~c4-<(o$L(+eB>kCLiJh`PN`0;!KAw+T+dtxyr~LwCs=$JD=5iA9ef+)wo?hc2ro)A=Uq9F zlL2a!c<5W{c}3mXP>jJ?R(8E`&x1=RGQn${~`Ua&0{$GR5Hzar-_+z3?!3T z#|v|SL9sVq;Rh|=EHjGu>Ku$}=&#o)hPtpMEXLmBO*p`i4@P=%+4!_+MB=`4;FTty zDClSiF=74XzBF!?skErjl(3Mk`w-17yWhWJKb(Ab{F#$(*{G$&{m|@hS|#FHqTY-& zKa_=G|ch(NiZ8z|bo%7exNQA8F#}xLH+aC^GZyd?1tE)3DkoP@F z4)-dIZKrB*@$tzF)m>T)qVjf?9k@rYtgx=m<7D(Op4;t+tFpQ*$&Jj>3Eq6~ih;Cq z4S<5gh<;STe?yHc`uz(Ur3i~&?+ClhbXMieG-f6c+jXem~u!x5ovDd0Na zkJ+su;PH-&=D6$}CrM8Xo{hCNw#i-KFqa=;(i2cyAK>9lZ}Kg^FXJG@1V2_y6vyeo zO0Nu^_;a0zcTL1woQZ5zCi^_?D}S$s+`qCuBE$rbonZxf`s;@6pZOSqWMuTz!-&}k z@$cF>ey$wMA9L)?HcqX6=1^0^qr9Wtl6O};^+`=T+TWMB%jOc@J>i?Pw1=Vx6btVT zZYzb}0pUxmOu*ZPFSodaf82KbX_{To$2RKW1hs>YN~=WJ^K5Y6HQ2BMLL&P|Sux4fil8cgO?Uf7=3A%`4&PTQ&DB^^*^B$V8?!CkC?qPOapDlR9VTO$Q^caj-Pn3l zIr07ujiD>rmILbh;=HTF-1Bp8q1mg$ZhJ-?>IDtH3-W+xzcp1n)L?Ym9}pjMkSr5G zh6dH$=FNYRm;QhB>Bqfj1 z*{5{{FEAhk1C$vVQFM_^w2n7p1{^{&dtJbYpCV7a{P%?nu4 z!P$jMx%5@99FrD6GdIt*Rp#_uaM+1L(!^GBo2T`o+nYVQI#Dn?UEHL&Ky8h$)iNilU8=7&6@DE>4-YTd``teo#_ z+)e#I6T~@k3$&Q!YP^ehbj{(;E_C<1k*LIl_cAlCFZ};@b|L za`y3|awlHVoucIdG~aPu&p)Zp6b~a-u>dFzoWBg`EEwo=(g``xL~?iXSDU}jQI{C| z((;<#r+ZlJzRZ2QvNRC;dfl+OQ1t0pFo64lHtx z7jwf$)F-VBA6#bE9dE79xUgS3nqGP>AP+)(XoJG??);-QF3oU0{z4tLBsuyX<5w&R za6I%64LLmnW$Joz%hKq6?HGYnbO&e#Bf|kl%{O_iF~4WrQ}G;C+TfAMjyEBh`Cdj) z_SOCd$&SZ^?bYF$9MVZCl2cDHRmPBaMzzEnmf6gup4(U-*3CJSU>V>j-Y2vd43Or% z*O4l}>+JVOvPCJbR*9?GFq$vtMPJZVh0GE8^x_UBEqb3>%8A)W@?f4d-+E?iS>sL| z!YWi@MOG;Bqq)REmuu@d)q8~i*!5%#?jq1jw}u4SkwK?)Gm@12p6lrDhYnjO{po@U zaset;b|n7s^N;IFC3VLrdep{_J%#7Yxs{xc0i=d-Cm*V?4sx{|shpVJ6-V7JQWl68 ziF+v=bHvmX8nejeBtD0F2l3~mBn!C0B>{W+c6cPIX~Ea)6v=z;`8i`wN$WI6I%Ju9*9XEwIFoToDNn_sN~=8MFloxV`fU|i zvK0t-#SnfYNFV%I+6VVG6XD`MUpQZ*6>k!HJw|6zG z+1vV}H5J0PHQdHnkzsqw>}}+1wBRh;P*+cljO2(Qw^`Xf5N9)*HLWT7^pv{p@>?p3 z=yyszRX-fgb}ZzF7|e9TUNwm8Lb1BdBC$QWjZ!)BHeWXD8sl$gmJ*^A!cxl_ur;f5 zfGb=v%Hb?g$aN?#!hH6l@{4_KxT{SU5_NP*V{I)){VhUKq4~oGf+L<)b#eDaMBL++ zff%wkxTbe3f2q+FnWBjaS`-)wKc$w`!#Z%# zdl?x$u&SnZ>%B91z3mJ@a=j{xSgqIb#{JKD$LyE^Z5I~;MY1rqI9@;TGx4C4myb`g zR!OV@%EmqbYs|Cx7Q#L^I_UdgW!Z-CHI+gL?}apGpiapbW%{}k{nxNAFd6O_?$qHf z!jnQjZD|J3_UZVZcBLA8D%esNJHph9olbXjnFWqw-O1=}>%%<`2zXF~BV1Ej(}4Gh z7HD~$dFdBVZ(G%5_8u~c@$HDbT>26XymBL8TC`%>0 zBz2`=1F}$FtBY*k#x;^}hC~Kitk~gU>uS578nFC~p8!A_9Z!%Zh}q1m>yMQA&E-SB z#jPOtYYdxs>vz^L@|%y3vByTaA7>8G4rx?s(q^5)crwfCsg(R%i=YFn(^1O=ZN06V zRR9+hzscSC-my7W7M0FE_M^BHeKsp0g-^NA}P*;rlWT!v3Xs@Jn z1R94%;bIBLx}FT|Q6P>HPE+Nwx;-&l=542@Mll#hQfOc5BX|rtbg5$=(~n{wRHY{y z(_;xKuU@d#lhS60-QjJlcM*zhPxB!uc@znjpzP(3xZ)$+H3ztF6#_P6C?Yhc#@MR+-30kKCcC!5MVDJcRjHL@k zgtC22c1xWS_icn%Ia5%E9$N^rEv;R7`&4Olw1c)~+xY?7fIS<8bU>}K_F4>S_jnCX zsM~w@uP5_Lw(O2aXf~8=@ESfz5+w+ndYzpIl^k}EL+v!AU-Uh7>rz;Tp~$Iyz!T{O zy_l)7Lvp&YJ80-y%1XJTfv+QZ8>**UM}E##@JvI#+H(ji=??zflAQpX+oz*L((S%C zXrn3%%e*Km$x@NkZ^A-3((TM@bV!n#9$T#<;-Q)V=>4gh{T=oCj zM)Y%r0E9i!2$x4A{MG)7zC?S3yZ(b02tI)$=rPVc#CF?ujBbU~BKnYBGr%%lg+N@j zSWUoF5l|`jDy?lt0ic?_3-}D6Rp8H{eA&VT!Cdgxs<__~LD{x^zuPcaH#5jj$|gB> z@~&c}!}O!C9~w>UaaY8sHeZO_t+WKY>5yfM)EMbMUstK+DZT8ngY=+0m6(1r6~cfgnPBZKD%x8rEOG}%V}x5- zUF(jJ|FQcFoKv+H7I2w;`{Xu1caL3#dW^xnk(%4}kdg#rbT}BIOX7MUWJIp|FNx{2 zWffHMbGu2_iANQ1)UdO4I4UnffasfdN8_|%>Fs_y!+e6TOB zORR7W;x}u;THBYy=#wG>0^;J1U$vufib3PZ(0s0Fy5cXRWQ`I)CM znES?M>F~k9iIgF~;3|!j@x>#g25> z^4vqDDsASY4C~m!#25G3F1VmMNOo5z4EWhFH6-1z>Eva<_2IiGFWoA7k)?3rtUoT` zmDdjjA5-&)ku_?_p1U{R02pSG;Vb(76+8aDT&kj?jnhjvOC+ixcoIYHe`wRlO|l=X z&^SffZPV&mYA$t$EkIQE_OGQUezbHRrzC#;pAUi23e=-U@jcpJ=Qw0eUwY>>@HAO% z@?#cpFiWQljgWl^oBh;=rd09*W{Y)<9o0jcQDW*-qq3pPa7q2AseRkq?+m7Bm~h7; z&ABmAOvgPikng}I9UzW~w@!j*uyMk%gy`Gz0*W3GkDoll;ol$+&2E6?G{*uVQM=C; z;ne;Lk-9Qin6cTZ3v?*nTNj>GU}xG3f~=w`{fHTjaJl2|glH_z1}4a6kl~J=^lvv{ zHuOZ6QzE3NjACbH9rp?IclIWvdY{KR8BC1pnMD5LqshPW7*f;n9F4&V^m#c#jz=3p zeiTAQF>`qQ(l)-K7Pye|EM z!oKS*9O3+^d8t-BUoee*$i5vyk^L7g((C%-c)a+B!auuv9}MRH@;6-{cC4>k6pSRN zrq+933%qMu+!op%LZGF^@CIeGH$*Xk?)C{Me!CRXVn!q9Q1; zA7nSe4Y=#lktdsT{ymIWH*Kl^g+uB=F+Xu#qXY-m5_~66es^Wu{lkkg;~__BV=nmh z02TBL96G1MRQuoOV)4nRldSGP8z$?@<2beS+zH>s)JA4SHHRdhdlct?;;a35@XWlM zs?;u-bRAP0?&%&uW?EF&P4>Ee*XGGWry?V5RG6T>71z+6zm0D)7tnJJcm4GymOX`6 z4{G{x zcerUx=)+g2Ih(d4IfL7uG3@(a3i>jLRTEU%Mr^LqhOf;2=Hts3i{$VW-%L!Lz~aLF zQcYlQJJk0?N%OInO5Tqj-2;tn(`JSzW%p3xCp)~FIbG%8LtaxQ$GIn(jG zx$*ZK%TsT?rASmZhS2JXPpQHv^>#->Ag0KYwrkDY!$NA~bnl?A!4?rmmi~ttnV8Qt zRYPhwoVznSLG5MBzw>)1$;YA59s62W7^`AUPw`mo@v49XnY@fO0xaot1bR1_3`*h`?4L;hl8HYw^&|;*tdOdhXbNIaKc_M{J{RrL_fGW(uPNw+z8%RrSf-I(dEUWcWS? zUsHOk?8=9RyKGxS3C!Vwc7c2$^LeDDbo2KKZR(q5;_j&toh2IB7jKf2V%DDKZLU7e zyW6IXhB#Ni+%UWAT|`vkPMU zl-`A!60?h@#Qg)&N#cv?4(b?eA#4+W{&1cFJrVMS2zf)Z1ppyfF*cq;+=r*+qRaMkRIl_I;lYAf_S=1(So>m1X z&;Y_sq`*}Vq8wM)*)EPasO3j~U{Hw`jGPzvTrjGsxozu@aR0k({&#uXym#^K#P9d< z&b?n9Ru=I47=4K(vRug^ymW?{L_kUUoYYZzPvb>pf2~YU`z-A_V*iWZooaUO+p}Dop1%>C8Kn2$^m-mUD@xC_{4Xo-yS5)*VTdU-cb@fw)7X>2_>(HoI#~htlx+#v% z)^QwzPq8B3TM79H7Aa}eoN11teg-6crX#j@6vnZ?P#oDr_1IrkM+yA`1-JKU{hURL z^Itk&VxT|66`~!-}t(Vr{thKgbZtc>s?hlSC zHIIsL`&!o9Or^8xk@fiA6(|h;wD_o$jb%Rb_}x=O?(OYC z?#y$WTd~f$=~s}vfLxbc+NydAOj~14GrOmL6HWr@reAC8>fFJZu`UJDJBGL{yYop1 zO#+1756p^kdG_w^8^`VhArf@>t;g-{?Qb|puu%7R!S`D{T9j|`5u-Cg;vq!#G)g>d z%JpLYb-Ar_LAQzXZKvY5x{f9x#EP<7!^w}CLi-}~$7ah#fA2O|y9r{lYp_0s3nK>}`+eQ07iEclQwim9lL0pE z9A_sfa(UqN{(;aSrvVek*`FuYnVR1LMcNXa+&0?)Tl6|$Ydz0CAY>+w3?LK$rw z$dBtv;X{C)4C~;ifCkfI@;1&{QW;*ItFwxwYk-oDWCe#DV79C0FDCQFaQ^P zpB&*piQCu8s}S^c{TC$1fRBN$>+f8D4Xlr>1HAao{I{7&%+SlEy6<_K0*k(dNjil;AoOf`khP1QYJ$xNtmhB>Q!c2z>%!rL;1h!j#}so zr2sqLtcK9r>0^^VlNHziU?<_!%@JyS>OG==W|F;Y~0!Z|3FT;BY}Hk7)0Wkb7v2M4<3?36697O=PXwu zh7F9)>4GjYN{BVr>AN=_@UU3r2q*>V0?-ig96Ro9viP&B$9hlT}2rf=3MD%wQO-JDb_Jrzukv`En_JDse0D{`|Rl{aQa0`6>} zWc+?Y1PA03Uj%WyP5E9`WrA~1IZ&=u0^#gHRmSGem~%s3AJ`4rgK!LzeB(*NI&RjY zZq{ID%>-rag}<-y*9qVvA%|IZjAHICQ*?6`TrpeHI;IbbHFdI4{&x|@fu(!34k=Or zq-?b2q@s9aAXu1+J+l++I;niD#CS)W;IOzs)9{-wHoP((ig~J|S?08} zNjy%7pC3byfXX9er)w?0UB|Aa;BC5bo9Zv`0xHn@$w_UOk>= zU>FkaY!zEDy7Uy&cI9uYsq_VT8J22WF^)+0e$9^%q3#Cg=I*p`v_;CepG=VyR_$;3 zv19Oepd$kZDUhzGtqr1~So>MaDoBH9`2JnW*}-*n(8|YWZu9s2*R$(#La!>4t&QBaEv#o|phfSv8SL4Ue4Z6}=c3z23j^62x zJxU0@4OJi&;NXZ~hGg7c;ptB)~r!0hV;?tb%q-YXz&?)dYrY_t zXLu^ah>tPCEdp775TOo>LQ)xYPFU@1ZHao~&EQ_-<>fV>g*B6G(`4SIlddL_Zb4}&Oxc`$ejI)Rfpu9XkoO zCzFGhIIYhiN)!?cKfh_40<~WcUSmxSQ-JZ|StaB+0fc?)Yw85+108;HW+o&y1ClPB zX=7){86y*oNH)@`Zk{xxFtY6YQXc6+DPcbYO=_QI3K3?&puC&_B;wa8Hi?lXwau?% zdZS;~WJ4!Uga311_PZ7U$czCzgYPhD>}z!@G>bm^j7Uh_ zMuMZ=dZlqvNn~2EEt69Cxpttuq#bFb>D~XxYe;OS#;t*K9sUAi?nW&`B*ZJj$5)<5 zic*(XRvthMy%LjgifPUe--ssd#0thyDFz6u0_i^D>>1;tfx(Nlw{2Rcl2tpzkA3`#a5&k$Tkm`{}?udWdppHGgHQ z^}Yd{c!G7}-}NWcpg6#-7y=yiDl{CL!Vv^ltoBcx(p5TGM>lLt3m0d5L{ z!W?Ci4oR0KP-Ck)<*2gQeK#aQUF}H8ANu|?GrXuML;{pC&6hj%=K6)ISnYgVPs1p| zSOw-Q!d|Eoz#j9A5=Yf*nc2XxUqww#fguhKT2L10KHX)~i9tjEcu{E`J1Q%U2u1c{AAlZ4(CP~{JdyFut&XBDBB0yxyb-J_>Z z<6pW7K(?hQQdZ|E%$@MqZCu@V9kd7dK1K%40g#;7_d|RxYww358y_;5sjm%n+Z5E815mNU z+c|0pnUsvR1|*H4(XeVRAN(kp$P0j@)v^jAlVo!P4Petn4h$}})?p$fA|e7Y{cZjj zS5ohU1CzPMRDm&xlyIg?n#0!#`8*XkLn))$F$bYo4rqg;&8Tjrdp>ffg6|5om0P^8 zmi3V-q77FXiWZX5dPMHa%1ar;Qd&5gbISPO9m2=>fwBVCqVP*Z$^Wp%pnp^zyAP(u zo#EUl#SYLK|EyJy30(`CQlX@S5jscj^-4I2l9SHUN-&MF~3mvb8RZLkEw6sE$(WQETO&X zyBp9pKCTHxY=Yb}69`uO`?Jl@1wQ__;}FhFRloV%#YZylMoJXFUot)`{-|aaonYs$ zfy0KIno*RFcchn-`Ou-T>)xBUZ^LdR-ui2Qj9h}i|B~a5Fyd`WAP9z2ekI7Ec+hhf zRIIic?}mh6AiyD@dH}T`;wL30*NmV-;|9%Ngiy`E&xjVt3n5LERO2(8#az||Gx^}r zNS256iJ9-*t_xakX~TCf1;FE4=C%D6q_`)~_xtSHlN;yJqBQTM)-3a3n-KlBe2PWq z*uE#FOf#`&Z1u;jM=09i^G18vB6*AA&(jjKJQc+Ep2AUq6%?uPnsxq`^v2cY==4WV zi$XxKY1l`Vbct6v%Z1oreP$?gvyAA8!mej`uQPPDX-}-f2vCdHwGlL7K9S=(Opj3q ztAq(QOlCQw045ERzg7X@*V@!%DjZ@;Z>k1fE&kvs1J3~k6> z;sYkzX-0js9R;b;H`HX!(dnx}HgVzK&Ij~f>V2Bs8n8&!2OVW%P42d4}`6D)U@u zLzzZL{HLR-39Rq(xpn*R-@nh!_;zlb)`#;TSSl=L(Z0|;8cFnF%zUyF5cw|&r9q<* zNx8RSEcuE-`(X^9%MSVM0sIcjlQ~{xX35a|6cwJRdK@&1? zxK_tkKvCwQf@SkTDy>y~1oby>&d4+4pCAc?0FR5#&RaSWrbD5=``phro9&NY|M!Go zS4=Kp5TmH#JJpTsO-l3#1@pY$b8Vvl2Qg7|f2m3KU)I<<1JNr+tc6oWd+J>fo%c&4 zQBPmLOug8c+JLbNhAn*k>Srf17dz+k?;3m^K&S{8knJX=(uYVGT3BEp=#0%wPd9j; zKgq8>&yUKoQz=o0i_pJ>oNp3mLQ@*uM)%Pj0?^Ly?68Tz?ca)jllR+U;F;M+rf~%r z-s+Z-BtsW|T#bMbw{hM#>B0%4kYwnF*SS%3?P7&iR)#`#PH@`WohXiLn|kmNfBFX^ zQDmc^k(Lz1x4rg{FZon8J3bC0F95}l!?o)YypSzX7j(4cYxY*iF-@3 zH30zux6(I)9W72Cp6@j^=F0`tg{qbyfXhqL6JPi-|F5%CDz#$(>Ahj#qBQ=vpPh1) z`cq!13PX>(sLS_hX!vL z_##gwq|W$=L8XZD+StvFKV9)KtXjf@72)vN}%f67kI~b0;wfndiqv`p}zDp;Zf7R{AHq@2ws;Rn{Hihyq3N` zOw;IOnL8_n-K%&MblkOJ(~uBc{|wSi=VZS(ba4~u7Th1xR!cZJkl^4-?gsz|2o4@@ zN=~-;cLhrpCB($UBkMuTesm|(x5WpHI<&}-hr z@kb=J4{|`iRa;1y=_F})fUZx8i4LIPeZ-cxWsMMzUaC_Yds_)lzhG}Xf>};`axiFy z9MiG{>iK?59c^up9yV1!&*2MC8f>%bG*@_<$doOQ8(Rt!r7WvLvx9FaxDPD$eY|TY zCSFgWExXNvE49ukytI7CYQ?bSPe*OkW?4*jnPpM>4Xgf!ViHL0d-XhrQy1?9pZicp-gqt6E-9xfHFYCQ7 zoeNdnPbSQUZ0Z^sw(806_D^;g^W09U>I(Q19_p46gt9nmI?f9%FHA0ig55)=0@z%( zBuJ|5e+<6&S{-XIFAByC#7%UETJlb`J(&`9F1gze&QcM_(z>&h}8KS`r_Eq!hH*$`E7KT&v1#Nl=>xq zs1Yj)hqmIN?syhH;_dWC{FyZXwaRJwl&tgC@-iJ;U&Nb%7kH-L>@Ye{t&L@J&zw)J z9W^648J09Or9@$N?2JS*q-Oqq>cCaD@+Mxtc+_^+P#8N)@p~NVD&uWX@WDof3*1*2 zUL~n7^h89Yxx8G|$I$;zx6o>-147HVDdQhySMywh&-Lb)h5aUFqfY0Q#$aY<=Y1bw zV`XLh_4RbGyPX~061@~n4Ffj&S0yI!Qr=EPgJcQF%yRl=g76;fRFB!&APB+ z3_E|s!Vwc%#QCrJ0jRDO-*_MQH+;Tz8$-!9G%fpKd9`*mBWJJ|)ER#+01MEOvwQSv ziN`LF*GL&*S{`jqkerPy2BW@@v(VewnP_SO4x$-N^?RECdIbkdBjeqZEV17aR}(7o zf46x$u5;Jus3+{+pVJ5bkEibrq_ThGKC(B-UU8I2M%jB4g%Gkw**kkBvuq*CUfFwQ zbFz|1iL&?Jvd4RQe((F9|DGp@bKmFwe!tiCxjtk18hO$mK0dw|9>E)5t55I}e@o`w zeB3_U7(L{`mbiX)yr;jl-Qh$Xy_Du1br>(W>oNP5mBD+R$8QDrN#2@{s!QL$f5+!) zD*ybscWz9nU}wjP0k`|#gJsq6?qr96!uXCgaQ5cMFFd@L^UBV^=a=)K51#09^)r2a zj>JAV_T?SI@aJ|OSkb5IaD<5YDpnaSqm66G)Vlkp?;-EJF65b#5;kh5oZ>b!w#uC0 zxEDw2H(dt|k;+QbCH2V2$eKT5Nv#?#+e5j^kg|orm}p&6G|Z0qji)n_>sLT?`J7D-jF!`GaxzuZcQzrv#&=wg2Nm`%tA}r z(^c3LvU=$?Z$}{_jbb(YGmhyG=DO+-sY*Ar+mdTW?lE8MVNLf`YU#+vTDmrfkD@)h zb`sE5A<|>4J4q#QCl_EI-aetwLFs0K>T4{7nVFeSykwz~z#=7DpMts)to0GQ2UM$i9<_2w zLPQv1_dib4SGK`dzIMLdg7&ky{BU7yx%%&g>@uUR0+ajUbZnaj!+K1>o7Yghm@!%W zajZj@d)Cgt*IX^aHaX&Q-?nW!**B$?>)`t%((mc_YpIvWnj&!AX zN;pFBJ|vr~F&~?lVYF~k$Cm{0JxvTBaqN?3F5Xb8$C=pcMCOk?ULo=oSiy+Mx|@5{ zASYltNaUcaga5RCDH=IuONM3puItwsgc1s2S z`6Ev3fPXV`Po_l0#Z|mjQUoK)RjF`UG(x`;q_3?t&X>gsdCuM*O*db+k8OD6a*m-= zkFYsoFIbemJ2>1Ehm>ycRy?Thr)XK?WA4@QfE0{*JInWH*+W%4t9t_y4*J&;YI#&Q z@<)fYW+-Z`G@Mz~mT))@dbC@K3FMwFyLC7`>Z4|46d0=V?Ir+_obDEVt;y-q3k~aeDX(MZZ5c58LN`f$UcOThn%FN7+jU~!-K=n#@kzjBK(g?6vBV4Aw+dY4b$TC%V7$5c+jBP>7EShL^dUG(HX3C^`cFW z{Id%Zx3I8S0(=#TM9Rp>uy~s^SWoECQ9WhE15Q1B0MzZU@?A@hz2nFO+@y@7@s|TX z_@|{W)k?G!o}xPcMldekMEg!kYkpk2jH_K`*|n6^-mVlRE`z%`f*gJ$y1d9>&*4)3Bz z=tIXWeI%Vz)|3U{=g*(dKS)1*6qK+ve{bUhJFa9M*T~!$E`oY8KLEBXSw#V%TY5vw zRkR`QOJcK68a*=wnhqzuuYT88277k%&_;CGQp@p&oLkM!Vh`Vt2##;d&#}HsqePT1 z-5MDH$tfVR(`kn~P&GQIMP5U(?$oelUN-6mf~f~@Q^A;AI+8apg1+Fpq{4T;JZQ;__ia8CDpqzc6{(PRYs8F6@Vj z&H1QZ;-6ttThq#{`dH{!-0<6?BC-c9ab?0TMXq|?sTnHDRdOXA+G9Q51k(#FseiEa zC!6Awr~Nz>N&*M%?ljZU{2kb2Mpr}<-Xx&Eh0~&DMBTM|J0kd8_{j@99AjV17K&EO z>Qrq_-!L>r^D%6Z8L9;I(zZ}s(s&CMf$PPcwz-s_7Eav|KYKOS9E*Ea=KWkV$Qz07 z{o(fVzWKg>;4Yqtrd|u9(g>kL5V3`7@}c4~9Vb;gMfU8iZNs>%DW=9tEp5^2beuo2 z)$Aqb+PhiwxayCaG;opk#^;InLu@YZHrgNbntb!iOdNHvFVC#nc}>ZTCnXraZNOr6 zuhQpE1obB^g%b4YK|fY$GKPY8Eq2~HSQ3W)l6w`X!_Rb;Gf2jNt_eg%);j9+x<9&- zSS;zY3Giw8Bua^j5|OzK)RR6PIrWp6MruONLb%ka2mNH>P;uGWBLX$)>2#M16wYbVWKpIcVj*&gMvmD}e&|=m ziEj|MV=~6b+&_9jtUK@3?|Dp?-K>6%wcjpG8qb4lj-~q;`&(0Rr<$fNh`8&o!im(W zD{`W;pLB|#Ugi3N3T>>al-Rs;GHLSP|HlQGXz@RfaCJ!*#zPNbqK#$A`@=cB?dj4o zVy$6|STgM?Wq#i3ibr0NYI$QwBERH?^z&u5>Htx3!3BiY=|oWZ`r+7`{KIi$kvINt}`w_lht#V_9_mb1i6j8PnVshA|U8pN+w>#6zB zL@?&o9}&Yog=M{n8EPeC7ET9t5@nGtOQY7e=TD5b^Fw5OmAAx@VoH1h;`_-r@y-$d z&b!*VU+li-P!%NB_{8;J;hlQn0M`)QD` z2)00l4!1me)0SM-2}@iv)ynbrMF(6B3~>xcIJMXoJSTT|K|q%g_{a7DsOs{a`Xg5^ z1OI#NU5&5YSouVyM*Y$!_1$yECV!9b~=Af={LWkmeIInG3#N@JutC#pm8tkGAAc_LZv~as3@&w+@XN;)a*&o8}>T{ z9Qix-D4w&Mk%?MmBTiNMIIHXgoCjychXseR@r$Gfe1)5j+Du}^RDF0yu?jjtC zYy&f9sCo5;KRn{(T8jrMZ6Cq%iBPFv^WxL@!*E8AGA%E^+e z8*-+QHUmQ!3Y41wc>JW=QB(E_oGkj&CR<;xV*v8eqgWEu$d;h8-Pfd zo7!#=5LUf%a*F-6aCB6^)&Q4unmToy3W@{i%j%bM%OQM$*-okMMSA<=&iMyaOz(3*wbFbKo*ByofUnQ#!G>}oXJje;!MIb^{Gipvcv$!kY4J_HAXj`2P1SrByte}FHKb?2}3?Fs9Y5>OkBd!ot(cID! zWhRsi-6X6KaCYkMHmlHKj&-E7u(kb`KLk(#tQ%+zq+)3icM|(R1Fyt#{lS9=3U+N5 zLGzJgG^C$|YqQ`ccPym6C!)XzAm)9d9YSz)r z@cGJUcOG(PUjUm2Rt|JI#6UwhUsjNi?zeaM`!5UYWjUdPg;j7a7SgCD=I3$->AT+gip>s?bXFG z&^zf0rI5NZ)1tDxY4qJrblqu1Z-CVfKL}cQ(ki6E$T?(8I4^u9Z^~b5fb=jZ%%LR% z&#ERY3?dQi+vAb>U7Q3Bp=)aUJ==@otknK^8*kbFqMEmwiH`sf4RN_+f?f1b?r+7l zIShoF5;U6dEI?c%kU6@QbFZJ=r0@Rhwn4)HnP$KNks zFx;-oyMZ^f&s?N{=m0HustxL#FV+@0kT)7c=R!1}G+bZ6IWZSoI&|vxNq^k(r7zQ< zA6^GrkcE(xED;UOkIjt@>IM7&IIXv>NZr0;22nJXy*gim2kqGB0-$8()0fW9*W(&i zcn9{t=7xh}Y;^PrtI_6Bb@=urJZdmdYUfR0g!+h^Q!lX}~%Wnmr!!6zfev(3hrs_~2x42$%wJitcS+ z$yl{st=0MApW}0rpkEJ*QWIBkurH*1*|ZaQG!cAYS$p(=ZHoKYYJ5Uw(`|VeapPa5 zZ%T3*)z2;*{yHm=513Vqf}6>v1u;ot^u4BVS5R>l{{(vk($R|XJLnU9^lnP z7T&4o&78F8viOaD5mQ$QaEQTG_CSonX|V32L&KmT7uSwl&yNxBo-FET zaFLcjW{TX_lGtfhI*s!dExb8KOT&<^$S%2AHMc8)cOK1ye>-A5wzO)=O-|ffnhH_x zp_U`u)HguB zJH0o$|KSWqFM;Ttutmx;?|`p9q}IYkDJ^x~`e}=zC1VGG5u&KUT>zeLi2CR>1>~xm zCv&SA_Ep%Ew;;cuRFfS7tUY&oSwZiv=&nHFEy|FdoQ$HG%_pXeYXsn%oDWg9=Ol#T zO}e8M>3fVdErdG}=w(9_h_zYxxg9++l8$LSCIAMQygQ$Ug)C|JG+#Dsf`4{T7v~K; zaHg_}d^_bP1lz)gM~iUarY)K9CP$d8>T>J!Tddp!%8Giyv_5hk{N-dtF2|-W_yu|l zM!=Qz>>F5$ZsJhU(_{KWJe(9?Q}2k(OS*bqtUH4$hTI|7SOa9Xn&SqYlK4eeheevy zSeX_W4z;?PW%-!i*S$I-4+)YAwrPs_Zhs~zf5Z3I%O*_PRlCf8cuQz%wsve2qgg`b zN08oGOdyYRT>l~=5|v%!_itFcXn1vY)|5S=qk6-%VwC;picc&d;gItZ0#M=ASlSm2 zgaaK8*hck7_-5}QVjzf=3xTN7B}Cr^cd3qG{I1^8H2`(qzJ1H(GlLJ~;j8H;Xj~qA z_y(&~0!Hl`Lh|(t^n|do+=Q2UgHyyCwErwNb2qWQ4r;{}t1oq|9Mm;y3(Xilntl_O z^e()<8(V>#>D2FIW=VWU3f;jsA8-nPilS-C0w4Ik>((7Mf9nDS-0= zUZL_-9d7pTsJZQ)gR`@ywFVFaNSv>z(sxVUr4e{PZP5jDEm+?5lr-nRe;);64E$Tz zrI6R{SwRn^wX${4t~>rMK6(6M@VE1(?33yflcKVQFrM)*#J`jo3dGMQBlELe8l~?p zKdrnZ#_FY|1ZWnMmM(LrzNe>0@hCOAXDe`%L3ff%$7(=y?;F%rHM$0{CESh^RL>d! zi8e*}=TZ@2;fDJ9H>g6GQSoN_;^#cp)60zi_~FCbPE$B4fPr=I7;;AKyTCK&zuAD( zlR6L4t86e!bMuheo_1x&n&{s7BbW?8R(vijqDL&(Ve5gx&e2oOL>X_9506YWv7%Yy zdi6Q;YSNODsHjlMr+C>)ydv=o{W~FDAFYQD@k_XehB9K^CLelyt>g73Q2OLCt@ORW zAI9mn^WOwb7H9OfP_+0=$m(ymX~l>`-r@^^q}7y z+aIt(-4eI+6IVYHRdDkJIxe8^0HA+dYk-r8=li}Llckf2tI+5?kS%5b>|T(V(n za)gI)=5HE}_LXyIgTwYfY=EY?e-G}662BY)s)u7^CAcvCt)ifrNe2|qJ(Ta6p*2ph|7FPGTTvFjoq@}0-S26>Q#MB{vmH+mT(NPCwhNrNA3Zt&B z?rgG0oC=gs^_#c48qlUeIp>-J2o)=HSqE z88=k`-~Ai?O6Y{7P2{Rd)iYufJQf2bJnoNSc<9)#@|d6aws{%uiYgU;HbyuTnPA?MT8;Ny0Wz^BxtBp3@g8Pus4 zeEaszvF{b)W;ZW;QTs!_&_yN{7Hb14MGvJMo@+SB2WNG$cU{h6lybLaL>UCK23tM| zC55XjZXO*SJs1#uAS`TMuMBIhU3ps+CV1|2OW!^`Sa7Cx<EM*kwkrT ziaT?G(w&RRa;BHES<=DnT{x#fyqX?oDbiD7V}%NWQdD?f9TAwEzqh?YDVwgS#>YOB zlO}y{bYK7hFRG>L`~G^bYdXdei-aKXcVk0T>1@m6} zP$$z)O$;@|-VQMUzKJb$z z3#xC3v7CZ+f;tp@*4AMZ4X|SX zEz!^KA|De-S8#$2>_z1MBN+jE&rV$17V_^)d$1vEMnUHQG+vdw$Op&i5Karl)vf`? z>-R-g|6a~{lxP8|2Do#S;AqM(AP{*!QgAX5n|S>tsBs|<$B%)Q7L~lw?EbI{6H`%| zxd7dvA^+;JF`Dq|+R<$Xe3D!kBdoa?*+QYU|eJ0W*AXuvoU$SeMI>C2Z5l`(q|E zwPzMp&va>t5n)%P)|B*g2aSy8ui>46m3 zaNIoxl)_*aSSxG~(^{b4ZaH+`_{$ez4$hPC&;d;r{I*W`q3;G8XxhS57v8b%*TPd| z4jy}I#Pll%a=~#piDbLCvA(Nj4>=kN9QudEOOEemqT(QS%K=!d;E+r-aM({It=Dk= z6mFn+dY*B1*@|?dQS}dwrSGXS{f*#U=cWQgKhZMO=uvN{03E$NX3=6!Khksj*mWmx z$+HRn%QF)MJP9IfB-(m23iWEoL`s$eqB1l9mN^3Ti;u&jwR?{Z`;)A91}>QaG_{ z0*Lb*xYw241uhfI%n#2x6ug68hq7>Y1UVuj*i;xZ$$vcwaTig?e(e<<68lhkW%8+UhLrm&`Y1TaddPY5?r(k*+Xg({z=0M|Okbb@YJ5s$W7 zXmZf;IEbzf4?Ti(ibzPOx_N#6do)Wz>C342OgmfJ-$GDs`*iXd2|rB#RF;1mc68`U z{rA3+W;-okZr2L%s%9^LNmUg?^DP}&+sE-xr0^9E{k;uhQ~0V=Qd3>&EMB}=P}7D= z2Y@a(SRo($`xQ|xUA#0fEM08irGYlvi*F=9b$@=%A8co-gSLml0oo_?sums#eeSC} zQT432b<6x7U|S5)MvZRwD8lV*ZNX_bd!I%s+Cwyo$>pNK^&Rghq2fO|o!gW`t3EGW z@3vD8H)T0^s77W=$k^v_q+C~1SRo15r%JOQPH}PLpcBqt^Z6A@c-xk^x52Qxnbtwz1TU>|u&86qT`m=8qsHdu?6-lJe7w<3LbvVPZ z^Rm#Vq}-4x^0v3%gd+yZAm9Q+dSi>r%JtiI8eQF>`;6<&*`moSq3Ne!8Na;`&j}O+ zkoDW*zGVovk|G?olJ<`8$36^{L>T@q!l}K_x8FR;Jw85OSXclhfOxE8MsuXe8T=2k zXF~E-pKD_C@i!YYJ?5-DVuKNm?cAc%Xc^)ojv{ygXm6?i)y`N5=P&k_xNv8&CljOz z{S7-nkBGzZdL9BVSnR(il22FV3WW-$xzV4QOt)vU9yW$PdN=RHaw5_6b^1JLD^yEj zg`p+U{%Jbm9(Vp$v0btJE!MBPa~Qd#?!R}$(l6gC|D3aE2|fi&Z-{1q-5V$%O*>uC z9Su?)h;o5af6gf-tSlak?CNv#wiX<*ASU*{zyJc_P687?$eZt6uZO|?%yWkn?C-44 z230bl!}b8Y63ySaujV%xBHxJpG}mQk$|6b;4#E$UeyH9)<>hH>YeN=QTrZ3KXQBFZ zkd1WqZy;_a_wU9wFL}CvlQw9)Xdj?}&64J|S|D+fEdebe6>;}mcg_3P_TP4XNB+a? zpu{13_`W$l_#npPPVF~`o@)hnyOFx@sYo~+H}n`%KOIjp;Y#?=)6Fe!=F6Ir*Ky@c z*$WZmeDeA{Wx~ZgStvAIGCZh3;=e#6_w?oqy%@Zx97l0=9`WjehXOaWicDn=$mBU( zjD1q*IEl}M-WAY2o#|?q$$X~M^vB7WZ)3ZnsR>B&A)lapyGs%NJRDjoi8GXhD3Hno z^gSQzkHE61m4p5PU{fCbM~Ph|hj2O?J%#4%nq;Qhw&(zZ>fPMJ;lepVpJD3C(3L2- zGm)R|bZxqw00wMmZ0sW*Qr&Ix3E$(vHeoRPvMyo0 zeLLy}F13qz2qW643gd^Bd)3{Jj0*SN@`6k@F(@$t&L)20Z*6VG9pK*%(m%ya`)fDo z`8diq=SJ_aCsWIcME_k5ibqb-Kl`DYLtVFH8d zI8L#4^geU-!v`437b}lf_6|+U4b0C-jfei+q?+`>$f)UBiJEB1cf6kIo~+KvRGs>$ zjEq{F3AMt6e$9aX6&=lCt#`e><{V2$_Rlj?Yzm3trZ4#Ae`HJiobws4m=A)d08-B` zj+K}r0X?M^upjLf8`u*iMl}KO02t@&)NG-Z<{nVB3N$00{;UYODzYbFWdT(eN-+;n zaS;)lQyr%jzO$dM25F2c*ehKSGm@zW%ts$a2Zk~?0|18`0gLqWYtdu}B8^dt&!2oM z1RyB_lOE`-ZDl1TLQ!V4m+?5$jnQ=uac;B|ihS7q+eH%2f8t`Y9q-5skeXW=mGVdK z%da?L1RT0|y{j_`dB{7I%{MG9Oc#CQo8Zt6gU*E8aeFD%5cSAX%(s2pi3Ns@xsqoM zWjP=5H)c>@VzdN|euRA`i0h(O-=Zt~OQV=e&BQ_#Tc4F+l%_|!BeJgxB^4!?p}wJ^ z8(p4O5t!R5&5Q5X4Tv4mAqKU!p~#0jB7a};3glOJ83ERkdco*vR1-MK0Xyvg>Z3V9 zfP(?epuFDdv6J;A4iN5vrJV=nfoimqjPu#n{i|VexB1ntD z={Nn;9DdNT&3~ix-Q&kWs5f70x~7;b+j37SeJ~^L|8x}Tj&YWjIP7mA=mO*q{Id)W zq3dZqPHyczJhr@)!Snxl!~P3H6y3?>Ud-1xPvY}5=V`Tf_jTevODUDnojyk`;>T3Q;6%8d_472^QCb?>qJYb%e&)4XW76B5-v#kjPM-Yc zP_W0uEXs7?6E03Z-vbJtEb|jE*&JTVCtsd_E+UfgSdwAsy-1Wyov}q-?TL{2ipBj8 zFbW7Jn#D5jzTcl*s5E&PgBL?P#)PR#W!s~c8K17$As$wet4jL)&gxwPoScRFU%?R` zbxO}D|B%_%ms|1A6pcN*ZlEfG+J#T*6e(5m@8aSD6lvZmeXRRJ01QDv=ixymP?@)} zj$$#KCI0cVpay)8e(Fm296A19ro(*Q%@lp``(Y6Gc{3Y&`o^@@Q?XA$z+52X+W6EI zkU+o)7I0G`bs;ytBdLKs*o9+xtyv|u%5@AiYjnlD4~i>jpRsnXb~V``$y!kEQ+rK7 zWiVT)C33)ymKh}RWvMR}xqm-EDVnTa(pgYFUD;q8s8Po_Hk?qaxw}J)B>&$_ZPhV2 zvu##EM(OJVg+Fm=+U4zOlr`zjCAp>Ky8vf*HeKzCO;DL0`Pf7J>d*ZTEWXoui+&WXoQjz)EzD3g5r(HriCJi_L|z$Dw= z#xpa<1)Ou-S7`ZTQA)b;992x!{_>$dzo^82B;q}ZESQUZJ}4J#_uI|coYlopZ_3!O z=)uZ7j$ZatX(`PGcO7g?6?|g!1j$7*PXXC~xGga)0e8&5P@Qw!x_C3CU>O)|!7!@Y zPah@f!TDE}d;8z|VMg{k)VKnYFMl^~D3hq%3DK0Dr56Z#+&k0~z*xw0oF1+~#rS#R zXXvlR34WsN;ocvURxAs36-!7q34-wnvKccukMF)wZwSq)+3!wp1r^x=ig&hQFzEl6Ys&a+LMw>jjDFiuc8L z7lxnskJ6)GL^pedYPE^aP_0E|%j^CXc!O z<<87rz)??vcu|+I9chbZ`}Gmu;MQ|m(nVh@jpoUwkkDGyAYVJ<`dv&4c7mU>ANvh& z2Q%oLMSOHgYh-%Hz>4#ZgxvHJGwnVrlR~D<4L!^@fdh{mXG>*A%VHODC)eP1X}N}d zF|MG1$pB-?F;0@^ADR<=<&2-qBD?3@pFu%ZPK)jzvMd6UdAZpLD6=( zb#N2k!u04C9VpT&DwV6zotT_F5Np+B|6EFY#Q7JZIkdF3^?bt#!JqE}3=mSLz%K8z ze$)kI@BDW>4#w(p*0r>3>U~;kfHEt~@F=!)*^{A6k64YPjxKSMu=O%v#xaM-a)7t- z33W`l1*2Kgm)Zq7guN6sk7F!aJ0(hvs-9$Gw4X?)R;cHuS~>T%d!#fo@lEo_l+1ns z{T1`UuD&8XtBanmxI7gC2pN6V8+4CMJr8;Y2T3;BXzHt>m)0`RoD&4rJ~t6eM*&UL z|Lpw2%j@saDxkNJIW)f@ zNQTZCD!ECowUWL>E{!K}Tzymz!`r#)NQ9&IM$MvUhyipf(EJF)J+h;|rDs&XCdbUi-q`5Q|qxh=;xa98H# zt$C5Qx%VN&;#5E^fOZi9q&)C1KuiNg66&Io@7>cdr({MYpZHtXeC%6*#(sSxcy6cO z>5J($|?g-h|A1Z*br*bdOAYO+f8LLH9XoBVKefe+}bf2+f~B_UFax+Pc$ zNXD@Ve`?2f2IUlB{+jH6LYyjeTnrM|J&me=!>kL>f64OzcgF*&YUu0ro4slh8v=~* z7lO8AuYYZOxu_jk9eb;DzO-6Z+MSK2#k$RqWN zx;rYEk$8AJ#gf@ceV6w-5|a}YuN)NNPyqq}CLHxZTs*Dc+;cw(JVrr^4uC$02)=v? zGGRBnqO$bp+M_^l3PLoV9ql3 z8M#j^|0v`g3py>ksNom%XwqSAD&BQ&GZrF+$+tbDs^vT#_j2}`d-p4dL)bK^L?b*0 z=h3!m^Ib-^Yb|Voc)f$rx_&3joTvJ@p|9=(0>a&S6+Mx%0WxNon{=C2z!DrD9)@p3 zk!5jdiN5=Xt^^3t0E0~I1H%Xyihx}%&{}G05>)a$J(^G-jf0NivGcgdRZg7rn2Q8B zL@9SYj^~Y-gv3?@=LfyCrION8aDe*sa|Kj$yp}Mkh3b3B6XxfoYr;`+O1VDGh_oe` zjliF_t~uFocqJ062m=BI^YV-?qk5^0@&6pAG zs2BJ!wYwjz^&g%|`i5B~k@Z8|h+bAyKxA1`@S)ewfMFNeFL0_7a{bGAwO%^&*gA2N zdF3DUwWMiU1>ZwEP!VT1E3+#5TmKtY?>wLxI1-9gjEIg_ef&7K=5u+u<)lvG*uHh5NcF*cXe&6HsLLXj=|jI3x2f*OpGRI10(DCW*rbEi(Q-Nw0o^h|2ML@}G>^N!h( zS5E?4NZlYVtN1Kof33iqLUP?~nsDX0^yde3PmOi|kXKi}U_Eh%J=~DU4pb~9?b4ak zr&ozTKr!n7_U)0XDs842$Dpf$*~P)#vL@3JH!rUfkbAvznzPiX@d^|jKx#C>X3U=O z{Qk3|VVD%4-J}SA(l)-=1j0wry^HhH1?OYHC3UXy8k~H6eL>MiV*>7sph7#J*z%)% zxqeIzcOG8cnkv|L6F`d;HqpWRbJQsX9?4>I1msCgiFEk*HNI#F-H63~^#pl9RmqES zYj9g>{Xf?Sm>~nuZ_Dq!_WRx=zAFiDZ%r&%XxPXs->v=)&M*15AK6fE76aYy=FVW6=Pii91Gyoj zetnRHaeC>RdcV`i8a^fGwxob=Yt)>vnt@HEUi=>(H&fW?&CHPh1-in{JUnWrYyp(=fu^7toGV?^VkbXSZ&ph#*J;|>2aS5_7K_Y2S~Kr5Xp#7bN_ zD6)_7qvl{BIQZ2QBR!G}OUKAWP)hBLp!+d*gktu7QvlaEb-(XayHb_1+Wl_5ZIl3G zC_!f1BqPJ>-s2aP80GJovX7rlwAe=|f{B?f zAL0LJTRkWh0n>5vpX^+NZr7TH(Jl#k2=Z z#GQjuG#J|+X46Hdi+UmX_u+U001sk|uC)O%c75IUcH9oRP%(cPnaS2YR3~$`$jC{fR%c3>>nz zJpNlK?+@f$BmB-8^tA<_QT4vB?odl|?wMS4(@avD9pFi)L%jur0H)svuxt`8=3d0w zLyj}sX#{MsFYwpr-AE0@{NEIdJr}BaO`e%Ev5hzv_}Iaj6Z>c{zzmB z=7d^sSKRL75`uy^ktz78MAtx4?dYlP(9vOS(|( z^tUi5fdMrF()R!j-4m_;s{6u?z94gU$788?NoNq~)MS%YeT0`@-oSzmaPXY_}D^YE7<#QxI@#k<1fMb7yD~#2>8fDal*X zQuU)atDBmNSw=R4+8E=)?6-*Dne_6J=}MVBNV`EHf40uV*cx`zk$~y#7db`m?!vA| z4zWN$)#D-zn2B_b7H9n`{*I3ygH}DhEoFhpV9S{L3F${kdd|j);b9=kP96L94-5cp zjDM+a=XSL_FCDoEZmm`kxD6nEGn5Nsg4)X)kbe}ZUn#a6SWX&+JiHzFHhrde{=$C66Vr&m1iv8LF+xC8w5hHRyWd+LCm_;(oh9H^$QE-2S+`J# zac(94wGNr_9CUAz+bf-gi$|}$)jPL1k2-RLZ#a33h+OXJRNgze*GpC>Y4cKgfZf)p zQ|D=Ex3)kF-pbAlY0f5T$z9oHF-u}vX38Ua&EH=*J1LGLGa5SDq&~7=Pe)Qnqnb94 z>4MSxF`_Rba&++iy=}f%&2&A|eLnnP@jlLDuXq6|OU!135BFc85X)n8>VJl3D&zih zU!DrGh)%pY{LLiSiNo#YKzEboUk++wBX<5o8o7?@u9@AX&?Oztq0*!5wWZ7?oam9) zv@N(MWf@G0#XyHjwji1#T{*=xQk3rDBb(;q_A@=I=!mvFB}7)cM)2W&%N*Wp_oXga zjQ>F4QQm`!aA64utG$`?N=Z=OlE0Xgir@k3`()u3hFen8gS>6q_6qNWQM=SR_S$dg zkPmorK4#rI_rOtLQQHo7?)Q36`P&sWrpUEbm!g-cI!JImAx4~rJtj(4e4ju~vl@L0 zM}fbakNI%p#YW!ms;{!M7&Whk`+WLj7<2E;T)d9PiNvNn;;G@8Sond@54x>~zi+)r z4sSat#AoOvrO%s}_!LeHVO*r1q3nq!x@;yyou z#9wpSksGQU9Dm*p{)reM4J&+9 z`WqEKWt_j&ULTHA@c`LT500CR@7nC^=@*`)xeTuVuysPivCAKQ_Ht+guf>trl?BKr zBd99B=e~^XH+MC0P*K9Xzwhbp#G{(W#KQ3oIZtPG)H#F6u!T}!ber|{gnL#ZHlB@u zMSoA8`5qec`wlDA@)nXB&2c4?JD!CAt5zW-=hnL~bRv^DSy;go(_LFfLLCfMWSDpE zdw$&UJqhIQrXA&$F1F7k_bI0K^SZ~o^qIQ3MKQzJxZ9H#=~yxDbG?8}x7~t?-Nw(B zTXRpAmQ>=knTS{0kT%?VhQnG_64e-E@8=zdp9k07a)xBF@%YEZbCDA*mSu-KixeJQ zT=(`L=nu;$thXy%*WZp;2Op=IK1wXy8xm%>3Kg$Kr&ubJVFiL*ZdegNn*VO71p&3^ zdVsOaETy=77LApSCSXG`vDTbl)dnMnOO9~3pBEzE8;_1xabi<0*l^hPU=H3y6bs_Uo!Ot~c( z7F&O(6w0_{6!#h3P{u!hTlO3f^_Z^Id|u=;gP8Cs5NOgX%qd`@T|Yv&O$yCi%DPTf&*8Z9NNJYu;%-?~b&x@^h+y)oKZ zVffOyTi|_2BL1^t$E=x;5I_-at1is+x5DVIS4E-Ft61*I{P>gkIMsQ25`?5pb7P}& z`p)C&a661Hw->R#!P@KX__y~Z(w6?bY+@27w|!JItm~ad*`i~D7@e9r6pePF|J!xY z)NQ=|j}53lxl80E*GnKKc(-r++nbnP@uR)-b6-?~5HBxFq3TWX<9RZB%9zS9C8-^I zO8mUcPmaP&!*#8#t?+m4?Uy$mwWWQB^@a$gg!BX_t}@Pj+z`j?88K1OZ+qXE8tf!C zB9I6Ou{(uN+(F5iVySj8xMRhEfq3F_+4U6@Bg!51+feX0V-=mBmxb(B&JKFNO>L%c za5{Xj44(b!MuRhc$0g-hd9zgO9K$l@@4*NJR5I~P`5%#!Gx$q$ViEaqQwm;_8bo-A z0`Ut8iOiz?@7te*%;$CFny0GpWaU^@q$YFlWHZ{gS3*TL7T3R({u#aeIW@n zLAG6ok@iEJE?RPBz9ng@PuF||`}jl*^QR)x{XCwt2H?sjK~Lh05<_r8Wqp36rsFd`XQyp1sx zJIwZ5UAD8M#ql)OA5vf9v}DKwb>i0^jj~iQtgb*rVsv1? z^-Lz*1$R!d*|1wYNl)Buo|UDkjj0Q!Mcs_AeDZyVAMCt2h)s1q-om&V@O+%v|6%KT zo?j}5)U`L=NgHu=VmR#^3o8x#n(?)D%XfI~U$n%9hl2xgqd`kku)X25z}fI;;alw& z+bH7bhC$t>(tL61OWE(Z?=BCf+lVcgM^ha%`7)h*P9MM^=z+cX$ue>>DL&gN$5bZm zrz;9=e%Ft+Ik6{;}=t&mIHFuM=z^S z?6{HzMJGx(Dyq9cQv3Zok;*z#wBSWq2{{`oFr2`uWR0+V4m{O><_Uw)u4DSzhf9y$ zIU+fBr|?`nuOUj-15QGRhCB+Nb6ai~(mJ-w3}YkGkH1;KBr2;u&rEV&0`bqw*TMq3 zp8-KdP0du4^o6U?CX*!VAp7zO4$RvaefNLxi*c3vYISJ#UL5xhN!TsFJU)B@cZEI* zdX@35zyJ%KX%kLaGi92iObk$*%wSKY)gA8p`3y^Rki0_(s22@;yyyCh8q}E#2>pZ_ zAw+Q3UGvsEOBWSq&0P{(nY+A*y#&8iuu#Ch#Ve3u;!R9UtkKzE&|FG8>B2f+&T?+k zL~tc)fT5Tb2HnOmu^3fxJ_9$mFbz%L;nwEn&@~C(-@M<_m}B#vYhy)P>213mqIcWCp&R%L~! zi*K_Jcc&J4eP%&SEsH{bK^z>}Bq6%Dk1?DSLCbf4Yr85C?K*{FpO_ro)Bme-cvYh9~0aI@eVp7f7JrC_N<1FA(y!)D%9 zDejY|t?4+79hthlk|_*rZiGa z+D`+tvS#nf-Q1n3IEy3rX|d{-`E2XBbi>_p%q_}X5`|Tz!Cik~a|^wTRPU0uvfW`` zr%NL5*@dUZc0F_0cudVY(L>|v<&X)qV*K09p$bQrESgPd8=Px*gVE`dv@kX!dsQ z7p&y}Q%v3y_;c7*aQ-@%oUL!-yB@O8-GAi6bzeK&oIF)KIp-ILVqG#h%8n%^w0KeT zd65Krg(udMv9Bg&L%&K$M2@^>2r`Y8x9nlz>x;!$S98g>7>Xo#`A*o9KeWxO@91V* z-CKV)9lw?xy3A)(io}vtC7lC@%_%*vSa%)bC5JU^N&K;YoT}6f-uir*$>|n=|*@mkrO*oL6Wn7y0r-UZ#ZfD8!W4I{sj` zjZ01r)F(Cr&JSIUvajbNnrNN24BKR6m&Y(06MhTOmZC{8NR(2QU|?xShIIB<{0-8l*hqnQMI9 z?q+Q&L$oeUGNg5ubwJAAp3ju1LOVsvi^pSVeo{ExXm>f@atF8c-t5_u-Ddd6?<3nL zst~52#G9Q`C9-or_#K{59U+m#ciu9Od_O?W;dR#A%$?^EpB)g6y)8AxH}U3~)+RkZ zOn7A|gP>wy_%wsr%U|c?e>`#ANWzf)cYkmPUE6D!APX-;J4t}%Qi!)UDC1^`X%y42 z==Q8c1tItv)^1m8BbhHZ7Sc;Q?%En#O6VmaUr&)1h@k%Tw=(zcG;_^8(20&%dpJR5 zvR6bUpK8CXXSQr^6i~-b6fAeKadM;;eOOrA{@_=tj)2smr9bxPgFW9_&6m44+wxUL z9}b9#yzXBJE$j~Hz2#t3cW>)@{cHN{a(nb2>p*s`%T0Rhwa=)Bw3kO0<1Nc@q&eXZ zQR#O+$q3$@XmP1qNu7ywoLRJ58gJ}PrxtssRcRw?b^7L9t>E^rFD*l_meWh@2dUO* zZ`ri+M)MDI%eG&{_3uDH&o25e4aHVCe4d znX~!+p3nC@e?Nbm>zp$e*Ckxz-1j{@)?Rz9yN_t`p2{Q$wuz490L*kz_O{bch`K2b=eQj{yhr-6O}$MPy?nWLf3LmIX2L% zab^?d=p4D@u&YLzrJBBrgu*ap(Gt1R6hXnvtE$yg(yWatFT@3xr#S zOpr!6IHP&!-y9;fl5iF@ubov`DMuIg`->7`i^dXT?YCPJ#iMEIY@SF@oQBS34(#`@ zC&0=H9Hk_GYX3d!k7kyd6D4uB^Oc{gobh>YvBPq0i#XhtadGXUP|v;9SiQ9Hn##tU zo-HTDO3TJ0;PUHMys;3rztbpn)9YW`!&yfrYi#b{bRVtJmRm%ZJn%KCx<%T!4kv_l zyAOC<>F6=&7hHWPeR_1od6~F$Ze9q#X+c67Fk`xKg;9-Djr(^mDGFYK=MNxsh1R zyy(&_dk6yC`!jUphY6pUa7P+{LIq=P%c#J`gT;rJsqfq=zXa+XKbht^Ua?iItI-Pe zx$V8YErL~AKN#?F?G{ubDeLdNVljQJWb{Yib!fS zy2ShvKVU^3%gj-pKid#_&{$2M{v?0(Lz_f{9uM%46?;qk+GRE$Wc!>K_ zZwXl^MA~8YH8eH;8t3N;`t5icW!(k+Eyv{N1(&tUvo<2dX;1it&`18BrlB&dGZ2HT zpjmyDYv+ipnTOAaQmD@HWQfU^J#1JoS6r!tIb~Qj^-t(%sbtKa(@p35UI?qOU0^1< zWC}FV(acRH%j)CrKe0Kv)0?Nv!hKv1LaTZ zWA1TL{hYk69dwb+{X662H~&w`SP;M5O(m)Gc;@-AmBe&nl1{!6CG8x>e5E%^)j4VV z)Q9@`sfzI^@k|9--w=I*ocIReDw@yZhC;Na1Cp8iO1QsBqdhD8*GYZ_SMJ6k@&u=I zhJS42e4Sd8uo>eETPg|5Abnvm8O?VvtAr-uaY)B~aq`KI_9NK=;R90qf1ES*C+fta zgO$!txL#CnHa9eNe(DK2E`7Fy5I8Rg;^=zNu`lsq$I|4tlde3&wsQZvCWdBVruaoJ z_G1|)Ox$n8{@j@B9k$rHH6qm5N`T`5$mL5 z?mBPZhGbAgoIh&$Vr(ElSi?ZRxs%>&Cu>#u=p z(LPa8KI7XZS5h(@tmhE8b4lAE{CMq_WtZII&4tB&<{b!6`8@>+gNN;!w`ZNG4qjk%WkMe zG8~XPE@w>**9$h@3SjPH3HP)-P(4tZ%aRzxl-00j3{?MTEI75vRUe%YH2FJ-h1`=s zlb<_}vMTk^=e{_Jn^&*dC^7P&agW(mbGjlkDugWhOmP0HSM{_l<8-mnYDsh$8Ogu5U71-H!nc=ku_0~4W!*API9bOCt;}>C;k>P>?J~iRI6P29lXi+U zjGvmz4CiM_3~fGaXa#*y0Z#Qz53_MrB`Q)`1ZAX8{vlw(C>OtATc%}>izT`6xf-?z zWiCZk^7e+zFs)^D08qlcUCSUk2U*I>RCR0`;h^oOIQjp{H} zos!uTYsX6{I`*Ua;@RhA`l1?iLZKc)ila8VIK-Sv+|@bjH!L||BAm9TnRw$2LBE8V zFz#P@LxcLjfd9XK23FI*J$~_w?AHJK5p|82=lS%BhlG!2rw*krM z9!`)_y!Ix2piT;E`Am-gZLXYmr8$iTb~vGueOPU?zw|cn+5TN~9mZLf!t*ArKdZF?JDf1GV;9Xeo`p1SUWVeFII@$3*m=pJfqd#`hUq(Z-MEeK{ zW)z5bv7Vj#{6-_Z>Y@;wv9Xxd=89NZ9Zn1ZWQhYj8rjzep!JD46EWY+XN8;m@y^?y zgAYAZ3ReAuv0gud`Ro;p4Y-v3k(d_PSw#nrrDooA`e)=73?fUB%Ya{Sk2Y%fH!bOk z+o{m+Gr!MqVyNI=vNc9uteA0_c;{(T$ zBif9y@)GeG39-!C|FrQsis*w2;h-4)b~Z#<+Bp`6pZf>f3cHhsCiPH zsLc?`)fJ+bJ=%tMn-Ee%{Uw|czuoqYjX}pVucM;Z3H#p|@Ue+&BV(Q~IhcQr_Z`qffryT8O(>6oH{W;@b-U}Iqv^@HS5Vrx4l9TSh zq25b2dRpfzL%ir+ax`tKR}LPeY-0u?0NM-ow=LLiNJ}ul<}fAUG2MC18_y4>46-v1 zLd?Z_Ex-JVP}~&fLJs`>z>w|+rk8KjPdlQNx&7J)`8z?RZhY~ zw9Bmfj~LN6xf^luIHxe+cRjZZ*;~g847Lb-`WKujcX3G%BmDMwfAt$<^y~dM+zMQ+ zIZtinY;07xuU=6Fj;V4y(6+-@fh{Pq@PiIv!r{mnpPMr)3EP+LqIp!H7cE^|E>lYw zMsX7JhJZNet24=NEd#Nz;8}-^YmGi0i6&m5y{?Rlr7a|oQS;1=!+$S6*d=;QbNr3v zqOE*3`-;50#uXGd<^uyQUyFb9*u}7Bot^m0JN~p{f?u`*OMc*3(j*o;whCOP#O%Eb zlg(kui@>gY5FDrU7{8svdg%ujLppD2$COnI*JqfKy=?!Jz;b&qpa$^D611aLX2{sL z95-EDVi?ltq)B>YnL#B++?r@-^LqBs*${D&MQ7IsiYl#a{!h95E-@_QLZnX!J}?|T z$a^Lve!ap+jq;sLL^{>EQ^%pOhVgz}yk~vV2JX9s+eMBg zL`?S~-*ur)N2x6Qs9MZ(DoNGfi zB(+EGm@mGdO(-l0c1$nSx)_TIYfxbMNIUR}?nC3VTqj&$a~^<|N=lLAxa|@NOYwgM zL2pi0_@5l+YK~7xjLkEMpT=U^WNtmUkjX@xYh+%qKD_JwVJMs5@>71!hl_X_^ddca z?lQ8A4ZVvvBQmU$6(z}*FAkWiz7V7i?y`+2I+i9bqDNeH@%dw*>MvegArXF$s2doU z%b?d@7>DN^$9OVV`moboQ%z0GeosB->7nlhmqs7vM1&91QDIw#-iE$mqr;Fyp;T^0 zf#nh(^!;`RsmzjEGcC7KP=FE%WN$)Y;RdnIV1Ea)aS==^bG6?CD@{nnY&+kebp{5k zFbAhu(93EW|AjvlSA$ts52Q2j!q=s;Wk+l2u&>*9F;hQ{HnBHuU_yB z1AjtP7+sMJMR)QA45HIRodY&O<2|%-O4X(hsBFFpriZj1C1?3v?RRm|(DrvxjwgUO z&gP-3v)Zcj*>d(}VH7sk^`VG9pb)4*_et@i1;=7yywY}|( zUZ^m;K%ZhJhY^P|mPY)(KrkUk8z+Nmr~eeY2OB zh56{6k=rI?FGN@e{murJy{Ev4kacxCV7ya=W4(-c&vS{8IhDa`g`FXxbXT;pC5%Ji zcy^lhruw37*4G-Cqi~tC7VI-;^!X6%QUW8ne-=b|ohFB#efzyf=BzDiI^cZw8yYQh zzEXc@CFCQTBIH%<15`VvA9Z=V%XQ{76CvPc$7K_Epm#g^pKMy;lV41c&$i2ILxSkO z*b{TlzzM?hACE8dCs-QF%X>P+yqK+JdC;+GLNxIErQTyaG+R`Mw(xh+Qd48Xu=mbo zEW}GoZ8o1(m+w>GUDnAVC;Ij&GrU$s@St*2>~gPzmd>M}IGiHb5rGCYuC}f~YgweYHLgoJMpF79)LneP6^EXF4YRqwPvqQ`@&mSOeid)r za@yPhj+iDK)ea7}y_Ye(+E=?sQc)QF`*lh&hd+=+NjD>g_H25U&iCw{HhN`xYipJM zf|y)NI`#Y~+iv3PUc*P9Pj)sC#;V{bW@FO=v$VUjvT~Plod*5i`3pj+b={8fI1vd!Y6-_!Oo50f;{y zI!8oMz1=HTVO%PpyE@9mqx0Krr>SVZAk=zuTCf{C`<`BR2^O$Gz~s9Z1yuDiCKM<+-sa_0wk`m`pCOXE ziRrDvv=rGQ!wKexb$?L5^i@@cM1;+9_eNeGwB=-jixzf-__@PsB*4N@B?f^+iTuc` ztV$UThBo=k>#HG{v>N=*4$e8A;OQX@f3|W-uLCZU33gt+yM8m z{^`&sm9MIAc-o@w|9q)HNnj~3p{WDHPI?x}NvMG9^xjAhHrT-;PS*7y_>N99W9kaD zA9!zP)z)op0V#wZ`Qv6OQKU0!akVP(pgsju+WPoA5kervVV$)#F_eGe+^SFd#lD6& zZ0<}z11{Gck#$n1?X&3RMUB5xGFexDV!`EMWQyobdzsChofXCL{*@N}R9{8HsUei> z`T`Pmy!2}JqOaaZfRgc6MN5)4K6#{x0Czc4iI|NFVU!9STv$Nn3=NHqg&M(s+k3iC zA(4n<{n_={nR_qa6F??vWcP9FsVQ;M8C6fB@KFn2MuQ~0w!TI^RB74>MPV2&VRuQT&(?C}Vd7_z9xd{aRx3rFdaAtQC^en+*iPyFKRL*?I+^L(#l>r{ zYB{wp@J5+~>5qISE~vA~k&@M|tl3A6*5KAr30%8o=WPl*ovT@FU&HCp(_NlBXDj3M zH*E{ek`hTr4`p7`oA(P3FT1pq z@G5FZTC+=90b}4W{dA1RS@jusu9aexAzWqDG~rwJM`u1)7pmOvPb{Z!Xg>WO6+P^3 zn4H91oh?p3Ll3XTNq7Y~oaOYJ_`P4(kbZI&%13|Eu78KXkX%kvK|w`FB{MB!{$OTi zCi0Tr+w=888WeVQoH7acLdjH5$`6~tq32&pJ$Y7KZp> z-VU#KuTP=sNn;9<(|joJ!>rk+$|PoWe2%ptB;qmC^Pk$vmq{^Fq|+J{jKx=rrT**5 zYJfUcloaWJtSj>%C4}r5-vU-lja<%QX6zdD-kH80FBC2G{Q0OUJoJa-@k(DryPa5sljZ-9bsLy}(x0;0R&yyO^cV6i3rUu=jfcSq(MruA6mEjLh7LdiU@n>6cpG+paH+ z?MP(4pLd4uP6RA>CsJj>&rVqREanZNrymMeRH1XnF8A}8M&)VDnggdsSwBa zZMb8d&;M{U7RHz%z1PrR<#r7gBv%Xy4DgnJUaI-;4n~z;jBb8k4Z1v)JezC7AuVEt zJ$=CD7~ffsYO1`vx4)5ONq+Zes-)t|VMF(hz{M`+ibxa!f!yk(DJ7DNaF#iLv!9n$ zs;-se3)|jT;Mb9sZ71mE9@lKp3zb}X1o3$i(Dpy~&JA(y* zlsP8zJl5(;;(?uSKVcjTV>KkNCphoeeQ9#BJY-rGG?UdL(=L%1MOe12zzOD#$WiQR znWK==%xunOOe{Lt85WKQmm)>M#-*xaV(#>HP5oe*neo~~qq;Q$yh^j)yx}n{t$S{# zIN&Jf#;mAdHba-l&b_V=Mz)9r+u4E&yr#bDa7xi zReV)}t~pzzzc)B8kir}ryLbQRdphsEjJ%JlR@O0+=vp)yi)rZ5%mwdTgBcQGI_=Me z3M!f*KY^|A-BIRKQu+MtUA4gK_9W=A)^*a%ylG{4<8BPe6;$RjC8}_1r)BYD_z)P} z4c_}qtGpW%2NuuW=c-9}edgL?ko91C`pqkHa3bp*nV)NyvM4I6nn7B57|gk-zJT$% zcTIYwjMi860XXD(-loC9fJO?nr%b?jcx`Qg(_q%oaP1kfJh_A8cPAoQ-b_s&!a_-y z;3Y5yY4-{;eG&f4zKQyBll=-4pVKlC)Wz$I9`fhIe9*Z|8xP=Ap5;=hoKpEoZy%>ZtMz9EdO%XiA_dWW@XC~9s$7^{Ebqlij>GNae z520dOy>drj09*lM?=ruj5pdNUIbB3$W`bN5W_qJ&=Kao$G;JhO=a3+aN8Nd5jE9}+ z_One~NT~!BDjl;~wYAmoFfSe9)K8m!E=Ep*dOr)68_+0`O!kc;pBcUalUX#Z%c|cw zGzL}Wc#i*&++vJ*k3{W%+-y!rUo6*Ts3e^zw|{JP5$ zM{2u(IG-uG)p2mO!r#sP6bjMxYOn z8vf{3`A9taY2Pm8dQ{am(YoL&)w1FoB|O!hA~3qwD3$*1V-|9C#KG_`eHNJl>;#;b zlDcZx*@-1nAOL{t}*Bh4=?B|8qbg0=`-I z5tqz$XQ&8aJZv1*5<2$1#B3(>GAm%eKmCr^qa!*2I3NyshwC0D}gD zZyWYwv2Vu_>1|81I-=>qKa-bNPYT=bN#<>tnep#plNLLwLS-mW#JSH$i@;6*1{o=E zc`}WeHA~xA`;l>|N9bTr*qV=b<7Ba?@%76Z*L&>x1jc_sGyMecN{^7 zIXwm4rSP~J;84LFm%J8%$t&#VFmi;NuU9h}5}F|S^obrrk^L1L*DJw$qY%j0qq>HB zgVp!$rQiJ$!KvNyZhdI|#s>ns0&to#QI0q7GsV2?*5qPCtU+b?&g+j5JkjY$4I3&4AA&U9L&A=CQt?^{I^U+YMuyn=CKj8YfBch|3Rl>OXz z%i;cyw8ByuuhUbQqx%u?()e0x>LP+0@AhQhcpVxkgS9;GnCxd%2*28S#ZQHoWR*lo zDJtX{(Lf-jMAudCTaJ&0Wzx@3VDy`Qgp5y2`F9QO!jc!^x2;1znUIiU=DpZ-J_vq| z`kdN{IG~A|t`nxSD;YJ|m;hBgj*sh{HpePDp|#HIq9@n8n9;K{`-+wWuom0QDo1cW zdQ^{DuFu+NSvwk3DSM3v?EPV=erBs{m5@@TbHwTke`i&P#mYLV+&ew=f8n&R&c-E#xTQ*P8NY* z=kcb$K<2s#PsZQLb7lI|Hq_APbOvMH6Ye|<_dtSuABvKOfypqM(R$Rkt2{#^;1aoU z6ve=??3n85=&(+QXpmG!R+2u%}NxkaWyquBH)a1ZK8t_o9At z=5tA#hqRy@g{#`z?!bHeJH-bqgPFsh`9hn*y zt54NLdh`#nwH04hK;@a7UW7_HPnwUjS#oi@CP|#}yQiCPv7h3Q6Zi<(Mo8qG@eI1*L;Q}F8>p`1Mb4-h78DX| zdGvr>dzpFkYyD^m9t7gVk{*>Gdez~!=y=+RIVqsDamOnxbuLz^eU2a1ho^omvGTy8=p=8>suaDn1)8IlN^>n7( z;W|H_2QD;om{)vY$Z48go3F=z{_{&7+2gULm+gmOEtY1|R{2W!oZN62{^Tw;M3_yk zd>sjoxFalSu-M$DWfm&L`DNmg(20Q7kRfl0JPAXhjK%>wL|N5`j5)t#=^lWWDXTUfF*bl!mZX>WFWG==#q2pr&ZKWXU<$-M^u=@sMc(R5#aI&hCiaxQ12e~RN@ zv_7fZ4_at$Be&P;8|~x1rRO!PdeoXj_}pyKlra*D1*s$;*L4;lN=>)AyT}MJzjv3B zvE)FEPbH-5eFtch;CJg^*_LI>ytssgl6igQBF6hGt_j=bU=YXz?V6U%t_kP8L75>K zv>z7>(ux=9#hZvJhz)qtY>Z`uPq9nVx2q7cFM+5=l}(IXkrrs#>Zqi@g~hy;ki=hrK+k>%F}c@&2@iFvorbAnWY!WcErP;*Q(xC2qnWEJG#={cM_PAi@-Y*{aFD z7cveCApnIWCI1ifyd?|N(2Cb^b7j0VPU?jEWOhNx>jpo%QW) zT_~u@eihUnvq(W0s>9jo0Z0^pDzgrr8)(pEyewhsh(49%i~lpy*lQ!0`m&&??>B46 zM2r7>paQJAurErb$20$2=KjYbTPew3V+v9efQ)v4^LN<|2v$1V`S_#|QG8VFavi}D zAr8jVxE8i=&z%M`61J%qvFv#O^h+A+w!tFibMU6YMA~&hA-Ee0g2)5WB9UlNiqC!D zkbPg$IUqnf{tvB`Z%tX5I(}TQ)uXN_#LU#u0A(UB?z=VdB-83?%BNMIFpGck*Wo)r z%Psbi#MtEIa|PuX+W89N4s(LVwZYsli(5-PLKVhI%a_tbWPp0D-Ti{KgR}mvVfkip z#n>iC(5#u?EKnH*l$1Na-<5Ap)s@k5x9q;pWD7AcG;}o`|6YoFkmXdu#B|@q;~nKG zbvl#In(zV=hU>M04m(8z zJ6-H%vQuDj$S7Ts>+z+Lq2b_h5+IF$5>S?76vght3I4sb#mfNUG!nngU1BQyCSjAz z?S_0?>4V?QI5;@Ip@cgMExQ2B4rFctFPaHlAtfUNC@7R~=4*3!EP$`y@Yud#>&Vj- zU_y#hxCT_{xF%lE?mUx{lA5Lyb|WX}N(q$<3di3$j;0?3Wa4s-v7dF@fFZ%b(m!L} zpE)XYzE?TyHxUz{3Wa8s_X~8s);ji@Jxzp5fb!z8v0siWU45j=QeT&s-`*!ZoAr~X zuay2#-oyOKcS}-pQy)-Xgy^$ZePX3A3Ih~KGUtP;+IR$l)bJV4y!4g*W}yZKn$foA zYS@sgI-E|LX+bcgH{lK^Cz89MIKn|eMikpZIx3|(_8?IDWV+TqS-d=XzMP_toIP6Wcnpk+9eckJy!c;Zg#dA2FWu}X4Z1D=16x0pOI`nZ3PAx9UU6p5>>uh((}d zfgH#kEL`=GY&Zp4pvTAiI2Oi#f%0{MjM7`PH`OZ6&K1;ukGpJASxMUg#0UVH{6eyD z-#1nGRA;UN<@dW>?tB@+7#_QohuDw+Bv@#jsFU9A3v%QMst2+hoy7KAxYt7Ms2S?$W*?DEPV>1*j}Mn^4OQZ{fE>9fH08 z5$JG0f&!z_f_m0b90+ymLViF9OFRFSk=qjI$1hm7zw2-kFajxV{ojm5O;6jub2Ekz zwi9=dSAxmV4`|GQUb60P^rt(_0_ZIJ7lqoUmOdaOe_uA~aX+@paLsQiPI=>)eAKPy zyTRkP7*ymvHiOhR0zo^?`s}XpwL8F;C}BClvL)UHA0xkgwi^^}ec&LRz!4=t4m9gC zZ6+9c3iW?`%m9S;C^;BlfH~~*YjAVPs}xu@)$_wFOcMeDwY8yT{0@f~)698y4|ixp z{63VtQ~gw3U~5a)MMv$-8(3XZ$tr-`1Wj5T^EcUrw!jrSM>k^L%U@Fa=Z$tPW1I@b z$4&>~9%Xk4A!EUjXLpqBT|Amg`u_d}u!V64GlQ#ss<;K|PsNyKQM5fz_eyQ_W z3j!=%=qN!XLhh}+mPHBo!@_K#FiJ|Mr|S21oLo#Ry?+u(bj$)8W0?GXjV$Trrl#rf z@m0~j_2B}5?(M&@^VTi+vZTYEM^{@;W$u8qf{K%~+$Bir1A3eQ5fsO)EGiw(atuV% z{=9iH{GwnO2wnrkDff2KKjf7A4>VixtzpeJvp>KB2*FICZ)2 zgM!h-FMs-mDz&!2I#YT{NqF0dpkJssK5WxEA&5inJ9 z`w|gIpJ-tm7<3xK;Y|S}~SS3aL|{2nv2f-p1aA;EF?pA8R%}Q`2-4>%qdhenx8j z7E2LYSH@&?&OI|${&KLRBSC|k|M&o|x6&GfV^UgBunHI^Kh{r)goOd*ErTC~#E(N5 z^|%-JMU|5P=xS%Onk`Wk;HdyT3^1L{u8I(O+;yB5eg~AMxSqjtdFe0k+Xd zU>uPMn9MkoodQ&x>)d^+hn<+(>uWo)vMkyM=suZJ?}2A1oHqKXF5mXfojX7to+fN? zd|aRVzK{7lv30&}F->}A<{h0Lssl-9fQug~dIh|3e6Q6jDj|8>5VAy7MSLyJL~jep zRUQFi=0w$oa-iic=8>K$5xshWLYbNU{xueIgJC<==b10?UHBQ9>Ujbja!|L|g|IG+@)1V(;3g09CQt-9Sj<MUE%6gF{+ydL7ezuRtZqRj zRBrsN@Idyz?=szRaBqD8qCMzrdeRpHSYpqW`Fwi+JU{0YoAR`PtGICY{hx^a5lw`W8V3|vOt(C*zzRY+SeP~+enm9f3QQAv_2^hUQKDt$a9JzetM z$_sscDr-Hk+=41%0LZpezi)r6aP;$@#?qlr?N9mom{C6yNmk(EY?k=o7kk|Z;DNo> zaf>ckDf$n;PnLGy9-f@^S@=mn_i{43NCy5NT>XS?e@8Z4D9kx0f6SEoKEScTuT%Hr z*%MWBb8~5xl3%duF3I&?mWg$132oxVx?QCmlzjbgo;a^m#sjwaIv|FYCePqO(sQj! zF()Zvw{TSBZ|J?CRZ#L&RZPFZVnpB9J?SDDXQX4_%C3P*_tigzHBZQ9pT#TW4z}Lc zyU;TZYF~FxtzIuaO~1{@k+b7h}x|G}nc^&6<4S%-_f6RL&nBuK6MlCh5?@6Ess$9Z0H*S90W=Iz_JuC9ZEy+Db~H=~cA zxG${m7YXkq@CH@@jDPJ7E!OsVM zZTaZlH&5YZNuxR(%a*ZH`J4SD1C0cy%tKd5Nt4P|Lz$11zikA&%ip8!hs1Y;@{vb8 zsp7VO^G1P$+fR8u|A5KI^J#eEXe%o|Eo<*e*qf(f!ot5Ek`={>cb^ZrpX|)gOi;ea z`I1-E_6~gL{P5UR#V6ubTK#$zZg;66pQRYymb<6tn3`?A-aVHKsV-M<9eu>hi3e>D zw|uOVQa!#1ce}p6Giubq4^9JsSH1J>OR(Rv5Tb?9P=XbX6_7-|Up?{He_XqkiqV~4 zrbX5PNv_IDeo;{s-EBA^Z#$~x=RcADXwCX4?<*f4-|5kjrp@yPCc4O zEuUId@4aXxF;bryXtn}=WL7^AIIG@HEC_CG8740Ai{|6ZTe5NN;HP%bRiBDEeZf$T zV>{0&WI+U!tYQ{HYXNxp9^AG0nwGs>|F>!FGlR1f0qdmXWS>9vcUCE1l>xKdvKt#6 z{q||ftAdx0#NAc=bt|mKJv1^Ui$pZmH*}&m=ldnYBrn!-X+O}Fb7ohK`@II68g97| zgf>wpSc9?8UmyLde$bKC@GzabgP&Mx%{09J4Uvch|G^=9!NP{=IEe%bXPy`m7=4o$ z7tpd#Kav$%cRL7`(Iwa{Gs<1|+&XI`GpjIyj;m~Kz)_Qd0 z4!*XzkB@MgZjpV$_@fpl7aZ{2!nTFBq!veKF7|a+uPfJ{#0nS?3ap*0E}6&U9CAQ zLk(f#V5$#8?>kjJe`>L-X$n&N?=-Bsug44gK~>U zO992L9`~$UzeW398dnFu=Ps((f8aa!iN%;-u0h6$f7UQ9`#pY|(8Rpwnsv_Vm5tCA9*Qjp-+1V+JoF={dqabgThWx z$+h)u4c2(DMb=Zs{(}VFvHOwkV<)zZx^z~(W8+G5;mHUxuk)}eHH;F{>MQ}0rI(74 zo#%dL4=4;8T-fDy_3e~Rz@ir{u{62R35uf;S1rJ z=VEu#G(p|16T~0(dshbr~=^1H%f)u_`Mo8|u${*j!O^4FNCt z>Y3w3yW`sC=HeL$9RU4@dRBD+#<>&dxc zQ6ihf7Rh(4MfC|eWx0G%SJ>`#GBIV5+-$jnQM5R0JJ3q>`>3=Gy`X$>q0k@ViJ5so4xpo8n>lTzHVW zMr3>>d^lI6+#f2mksABeDrJxQ%uhO2^BqK(6O3#1Tvy?jW>Y^oYoyOiWDc;s;4WyLQ5fV<#O~b)ir4E#T-PPUPhN z<|VqdRW@6a#?xL;_tl@(7tRhGMBYuCy4nIUVRClGD0@+)$yrHDOUqtJp(T1o9ZGA?Z36DJ3JV1VpDo#hPK0|ES-jrmjf+P(Y1 z8|p~yZd?I4I|I=U z7l$g!^c9U`yUr;5B;qYUU%~TK-Q3vFj`HWi|G6B7JQ;bVQM)!|E`K-EseJSHosyWX zMG(Xa8trUa5N{GsmN4q=9$t5sq$922k5j1>`A5Rd*f?#>qmR%)la^fZT$uNijlvfW0F9h^f~_V zYdmUVJ(6FeR*$1oNoj8~8=MA0^>OEySy}hwt_E98K|+pt+GP7QxKs_(@z;mx!W>OF z2iI&Y8d+Y!|Tk@4?%%Tqp_~zOF z>|WXlNTOnyr^hGsO)9vAb`FY}i5SaME(2534$8fZ93)$WhSx=R@>gWPNep!a$pnSp zQxSeX)x39TJN?PGqep1|(|*u0kHyF@_UJ4Egc`~HRs;s`jxZgD|DBoY`G0eDQKw2P z!KL2LbT{cSSqSkb2!sq0bsEO@9rfSr2SoU(W)nEN^q*JYePC7o&4t)7{-3^4c}Im~ zypaH0sFer%f6{bgSd2e?MQ-l%LlJCB{=Emt_Bca~?zD4YL9$sN(1G_I?n>8yr!x;` zR$)rL3xU{uuz3gmciJuQCM+ACFSnknB!NFM!VpMcFOejQCLPvr#+53DxJeap^ENYw zd=^**o)*C=NX759My!LUpuo88>(kFn)uPHEJh$j}dqWw#X~wXYmx9JfAQL}LG6F-$ z_5#4kA2G5X5t==a3q)sMo?`wdnY3cHB1t~44{ldtZhi|A2oYGdh@0*wb#MIlEWkwT z;(uH7|0B7if1Cg2apzVRFVT2=Lz@$vm11$)#Rx2bC6vyg#^Fu^EMUjDD5^dN!Y&*B zNNDRum#oqIxFS+jn+Ws-`w&+Xgtkr!fx>yiE=-`j|?O`gtbJ=2X z!&?VI+G8A-;kf@KcolxaaDeP}YChPb;H+gw^ z!Aufjk!l;RY_2H>ObE)c^OJrwTW>(PbT|#uklvcXhT8lu8OS^DbWgunwKi z1Yg#`kcDYjFn5sswA5QNU~PbrF=Y3$Ww%63Mb(h^M!g+5H5CDL;}vtY=pIsoETU@O zmyMp5UF+&e5CTv>BA@#m#|)%yrw}mM+?cz!=S>dhMrDxiCf}z03Y=>4*hqjwfhXSq z9w$1D^Csux%;srpYJE!oDu_oyeb-q$ z{*#=D1pAjSyB|@Pn}?(Yw_;P7#mGUTO$0Rku&qZ(UdEfJlf%QWcIVlTpy_xT9*oF3 zkm~}`^Q^_xwSMJVfb_o`hZf+#3Hj0%VdLT9@%l9r=psCTl?O4#-i3SgRoo>71=h1I z{?VcA{f8hr3z7+vbTR=~XJA_aJk_jEL?9Z#q}|^osD4c~UQ&EIK?BgpkGix>gCkV) zhCp}{aHVk)aa=b46VwK=c0g$lvoK6r^#Q>GAcqZNgCH~_7vUhhDH>z(V9;j7H67#{ zExTg&CxE)0WWT+$vxxez$4rIaGS@~45V7Ghwr%AuBkhuWc9)!VCr|s&VN+Gr6OOm6 z@fL~5@7&`aqx$tngMsS5JpK?y6CIZ9z@30ZL1XUCae`ws*S-#)Wh(0?qg=%6Dx1{& za_{$5bh8wfls(2|fDV#UJV6LcB2}Baa(i-7>37#f$t6e0V7} z{~jqWO;VVi)JMv)y>+2uZDEZpkTG5T0pc*6suOdadW$X@Lh6=V{7ZjC_C|p)l(lui zMY2TEYY;O7zQ#OZk+@I^Y*b3vmYPhiw6rwDl1zo>$5F7u;=nPB@2*Wg#t*cV4ren^ zq$)NL=;-k{ukuNFkJ(w1%gN4c@P%Ph=R1|?Vh(y5Kp;5#0L*X@J@Va6D>BBy*2vf4 zTt4(k%6F$y{Aaj8BTMXEeto@2qAG_FSa4rg-AG%3r~oHWE5<5$HAkhR?`0}7kOn&U zTt0Xl%$CtDlZ}>%mR44Cbky!kUDSjVb}J7qIHqU&bJ2C&WB4Wynz{N&+V7vm;k%I` zAS<<4`LSQH_kT}JeT7+DuU1)hfe~(1UFQg5n{-?tRr1!b&Jpi*2(~4AznvtSmyhp8 zPivV=DR|#ND7>qWp2sfQ&L82{{}TwA_dx;uw)4ZYGw;95~rtO$Z~)ago|`bzkl@*q{*?Ad(}V9 z+?FL@Gt})?MetV5WX z;O6TKZ~M!V2gD+_=5>_YsYY{Mr20R0Ey5SdytG@0mitABEkVDUnwqNDK~;SK7>(`+ zuwB{9auKbsv==RUPek;}HvK!x^-Vc+^|hvKn_bsIh(los&f9Z0$j;-@P@SXRp}`Wq zAnW~)>!)-v-^X;FJbs?~)13f}~y?7!sx-B0Lic5V`nX3JBwH-Y&M7 zPoGBo@WECIByv|+??7LRMN{s&HI$;*GZ}!|f?c4QqagKL`NSJZ1Vhz7jEvKBzP~Df z3k-PegfQ;=i(-nHWaliB?)l`9iXlIIDM;CWdfFfkFge+e!d?rKx{eI`;r{l-t{}*%b9ZhHW zb&Cpu=t2-gi|8$)CR%iY=q-AW=$+_Y^d3D3g6PqE??i-6M2i+B(TRRm^83yi_kQD! zJMOsm{&D<~5qq<@{l3q$p0(zjYfYF>pX_e`U2f!s(rvu+_58%LEr6|UMF^fA-r$Sy zbDwL!(d2!8ELwb1NTVS&>p_s=&HB{j-DhR`N8lacp--KTGI{a?jZ;C@O|P-6gk|1H zK^7xNY{UiGR_adZ&iR!;3c6aPRy~joRW;wZ6>1A#XSwYzc7Q;^U?QwH2H`RX2STD; zK5$p&CulfW3yRdSG)lh9Xq+KN-0pm%nNLVGJX68@jfdw>Oy8sxS8Bk8oXWpB_e^tIcMGer}yyB3if zC&N)#zGmK5_Wk?Sro-9Oijzg~VQMRL#QgM4h!LYNc6s#&Sqlq>YfLaOC8yaRT^;+?*oYOQWhy z=WQTXlNHbn#}AO61g6^i^Ey*dm{v&rt&>~rNAL6nlN6-cEI;1D>SiUad^A(_5eRU7 z*AK5_%Z3s@Vw*}h|Eu$F+6Hb?v9N*Y^75h{7=*qz2kL;L%woL*4_ZQz*kHQnR}2~SIt|I1GW zjUO(uk90`Ol+0AInyS1PM7+-qVaBV6&OT+cPQSXqcN`~{;Y6f`#U8iWpv+ixI_T? zU-lQ-7c*E4kgrEY57Uf*f`EP5V;pA^ahL)tx;Q!XC4KZ*txZb^SjA}Jmd+M_*>KKL z;&<6p6VBEwbkDLNm10hUjq&x>6d`Rze$84VgW@OG!=K7NkrXkoK5BfguS8W}UA>Dk zk@}NjjFVCP5}Cgmk3=aDg-*008j^apjswB0uO9sqN%pi~O4C_Wf>09D)SB}Xbp^;R zkIJ1zP-c(9Kl~T1v~-TV=-s(Qo@{nEByMOGoIC-(l>Oq^0*)(SI&j+R`)AjvxR>3r z@g10(MoD1>Bcmr4*GwR8mN&lNOcU+m)RNy5EU)}AlIaPd<$_~f3UljDp<*WRFQ%q+ z=_6HnYXc0~YNN4RHf%^y%2n>~EMO}u9&{`ei|V#m0CpKxQ^0A?^ ztxXgXk@=jQ9Ee4bZ;nhP2x}$R*ewVPVRyL9nIF>HmNM(Aj+pTOXi;MP;3i(`xr|(E zQ!NV!JE%!UX9~y$g0X@-4-dKfh9S}Pp5r1YLR}N=z8T5He3fnBXaB=?agTKFHmVRR2SfuN>Vq93GRc_ zW;1ObP5oU@ceB#ZC`D>DgQC4lKl4>&F_fM5I(c3j)FXvz6?eCQtr2*P*4mV?=jqF2 z(pRG(*;o4kOn~d(5h32MCiC2o5|F!fyq$$xt|J5qu=HhC%}`X9Q;Wi2A!_VlG8CYSL5&Q_ng`-K(_CFnK! zP@?Zyp>HuJ9Di;`eGb#Aa4^D{Vk(c7H~^XfZeFY2N47VqC~q|iRsHtWF{`Ts zi`neSB?LEt-lMWYH^%%wOm|k(`1tww_~581_ZvKvQb%OB;>l>eSi@#TU^kg%g2i~% zd=J45Pycq&j`Mi#Yj=<864A065M@lg!ZT20OI`|Y-JDG$^aObn5hkjmHGkAem+<;mAl^fM-T7!sH ze)~!HtMK%_pwO;A9t}zjy7aW83MIZJw$*iYnwcdU7d-ujeV5AGw7KIy@5cy!nfBV& zq+z3aLeBBWV6<}VdH4d(m6iEJBqFU!{41_hwTDp>bU{iD(H>ZSX}A1~ z$QE)gUaKV$HE?FXctkJQjI88xSHDJ!BQ^|{jF`q7N6y@)$2J0(u3zL;ONd72`ZH-&7|;C?@snZ z@LuxV8>UG8c%^PM4Zc{Oat$DuNm2}$D}>5N{Qq`VE-oq0Gxv+``(>zO8y4!gt3+7Xga!NggX9n(V9$-Blvf9Zx~Z6K`K* zV=-THbs;Z-Mb~~c9wX`5>ZDdlg zv!}bgLB>~IkKp*k(8ZrBD<=D#f!8dYQ8pLoDsSIHxCG+^&AxfG z_W3exQ|OcJf9@N-)m;nG(Z%5m$RW>9cGiQ1)M`Wzz8ASVDQ`R{GYE6*q0R*jNDcI9 z{vX(=CMD+bCm}i&>=oa;#t|9yVPRh>4bL3;@9+%To6p$~AGUni9fg zyZ#j7Jh#|X8B%MPxum2!JVO<6&lIdaN>_TMZI;*Fp7chYOdRC-n$g@D-n4a>q(1ng zOSN+3FN`xXyZp1wF=mP^4b_D4=W!~azkK+RfU>@xnI=dFZ|qH-RW&B44X3lPn0Kv_1iBrgFekJI~V*T+0OJw>Qpo;8?wOEpN$3DGap#KpzWb{vnlXP{VQ zF~F+pK4_kqnGww_Qj_!D_D=!z%r1Ek0b`@+hrS%tSQUs%!k32=%mLI$8iM|K$p6?Z zg(&rzpfq=9-4J<`gUii%3WfO<}Cx9yIzo&OmKVr)|6%PFv|LtVD0Yyw(C^u zV~Pq$hGO~vRDj}LmE9!GoSUqsJu}F|p0+Kyem{cAdh0Xh^Vc1 zi_$X1@*`AFbIID5M&vTf5JCb^bxdJx3y)P6^a@~ zFG8d`^_u65grdd%{8d3gwat_C5uN0o{d9a|GqWBSy-~$NDaZNGPZnPp9a?Dz^J3r6 z9xF*P$X2M=THN5t%0Zrbpl=7qKVo7cFIlZ3Gvef1`zYCBAQF+?uFtsU-J-x7fhCEK zrlvv5t6yD-tlqBOWw}r{A zo8LBUS+vnS<-wK6=1pMY^y17O<6vbC($qoAB}O5?0Q8-2zo#6yu;fB=)a3QcPt(jKjtHjaCqk!*m*-zCyM-r_uHm}s3;x( za(;)pt2-7}*ok$lTL47)Q-PXUlt>&&gCD@eoLVNF?>>*>u5Y;a_zUOmKbZbW6{fjR zZ4vVgTTE~7GIY)XXIpA2<>=HG`6zOh5&CN$LuIIFU!_c7a4AbvOvQ*}4L&1fns>X6p z#u-6Uu|hc~^{Y+wA_ZG3{ZF#!HMbvVmxIa&w)wW}V!d3ni8MMYTYf=G(;kz*ZI4|Q zer`$0mcjLr!O_I4QR(79`$3jb+kA^;jawPz2O2Vyc`Te!+Pb=GZ{C#6ZJfvQ{2cen z0X^L)j)kkzu3Tz+!$>->n$g{Fn2E);=bkj5qh<|azy&hx#K+{Z{YXmAz+UM93$F>m z=lpk`XI>+8HVA99^2PLwjIXK-PoleaoR))JaSTzk|F}aG&*Ur4^bxW>5=FN zuJtFh_Qyc6d^bfNck_>H@vnY%U3~YoJwJ=QAzQ3|*O3OU=(AfVapv;_X=ctl+6Oze zS@gpF;% z>nYaH7i`1-zJg-V9r=QcMBbA{*c$R%*~=;1&wI=mgz==VT-##g+h$SbQL9Za`Sn$P z@T;reQ8Ui+~x4GlsOOYhMx z8s>X_jzCz|=+=1SdzsIc_Ki+L|5A9uz z%xyXvZDb^*i&=OjUXFic*y@jR%e4#7I%C!9`om~^vC#|$TBZlzp8&mwa{pf!*2Ped zfw%K3gl8S{Cw%BMBMDfv(Lzs5K-b}e<}fE0pcIa zsir&W>8S@2LC{l%R2JY*fP{oRoDnMNXo3>+zpmi_=k~t;A3FvAAHGyzdd$u_Rr|AY zlM*B?j`xX6fvr1FfB@D{u-I!W+kyryXuO&#A~_ZubI2gK;X*<@9dYCF+iEP^nmVuD zJJ&6*SoipTuPm>$bgA*1ugNqJXs(Y&7F&JwV$3`|8UP(8jkd+U@>i>=TV$GSiuJsN z8!x^!hg6XRJy9TdX8>31`98|m!`up2gD02J44_(NrVWKz73&rFy6Cb)jm!{K@lSA< zDJc=XocOnC4D=|>NyTn2`yBR91)tl2hAc_$Zpc#!l|hiELZ8pViNXZ58|}F_yF5qo zI|;X$h4!f=IXJ_2>%i(2_RY~K4|ZVFownm-vm&`SJ-J4t7yC_R;5ZF%Q%fs#kWx0} z4?E{@@B@;L8BEBaNE)L2+%BfaIK&7#lvIii_lGzP`fO0_#dn(q8*$ov)YPw`YwLIH zh`GW91v&Y0XRS@Ppofa@fVz;%AkbWH1#_D$6W= zM<1UobiN7hBP-DLkXyE$^%ohGoEEO1`xL1;>ZO!?3Dr0{``ZFr@i%7JlAU^G1-~Au z5*%AT-TA+vj}Ac}^?yMhl?W>na=?t&rDv9Vq*tS`qPfZU+9x@w3rJj* z`jE=XN=xoX5J??LoJfdQNaDv)5 z`;=&|WuRJJka9ikpF+!8nuR!mK{3P93#+kU&=vJx|DIu$s-`Bo&{#{<0c5!#woxdiPJ z@I3t1hh|Rz<4XgDu=_6c&>1AjebM(oot-}NtrqmWGY$8mq}Yb4Y@SeSp_=yrvWFv6 zIN|lur3X;p+vDST(h3vK6bwJ4Jskh1762$Wv4Fb-UPwmO1b_85o_0lvDkq^^Z`_a& zE)B0f*Cgvy=x*_k0%n1Emq)?r8b;j3e?P*#_c&3pF#H3oOUz)4EDr$E)*F8l`K3oB z#z$!YyYibyy#p55XEvcR)yKRbOnuX1OdAIk#r6;nc3#2U)Il>iR%@~LUW#=n{xPon z*=Vc4;wPpKG9r-Sopu54{9C!uN>lyn6gINGED+_73q6qwUcxm;P(0|oFW<6WQ1*f4 zLZUm3vm{N;H-jlj4z@ON#IO05CJ_FsF;}Lx>Jz0q5^QOL&|TQ)qJG|;n3tb=lrysZ zSI|zrKAkcOWX_9xljH+z!{*ihh-qOJxQgF$hq>XX_={cP0Mal2GOfT&+p3fV@T-u` zj*bqMB5oleZ&2XrV|_y)`c$Fc6NH9p%zIwLf4P|D2YDY$fUIkEW+etR3UE{1$%% z56nFR@WB-joowvvQ)&t*DO0m||Ge=fsV%H_2nvIiovoz8ljsZ_N-;mrxL=t1YwzAX zxE*d>8D@l!g#VZII{o0{pvLo|+PQ4|5}+0}95s`YhO;-9=FP(&Wo0FMa-mBkW$pC2 zWJl@8j~_a9Edtf6kUkO38RZ+|q;}~-``xqSU@?HNAqQmDkk``scsE>5V%v9_rD|}b zv$8A}A(&Yl&DtWW_2x)0#>OgNC7ey0Pe}YW5)Wv+nI1^1DXV+0E-xWwxfL{&P>M+y zo+>2}oR7JrSi^lJj#zaRc-Obz04BuXHk~lQh+uhc3LEgb;GTrZ>c~NJ0>kssv9a^k zG4?5lK#<{mxE&=$7>@e-mB5cQM1oT%QSHpVC$84e;G?z=Rrf73JIM>359KaE3Y%6W*aFQE~?H$!XWQrXTt9 z4AwLVe9-Leq0Khb*-N>I(zCcoja85lqI7R(bCZmU%7R=&6k}~goanZ!$H@C)x{6z$ zc~Iz&&IG7v3<46AH(Fd^A*2i?4Xpy_8ngp{JXG#Q)nz9FNV~$y`oGa0MKE`LooG$` zL3Vr@lGN@9VuNOR^-}fxevMJB-=&-Gr24z^Iv-ryXI^O&uX`{0*|w|T#Q>3h z@`L~P$vFV^j?rcJK4_Fc;tPKO^rYZni1p)y!UZ&rMVqR%xmBl1a)57*Ea$`_ja!?L zK*(y@ZNs|bUl4LW6n=TJy^U=&FY}Tm!L31;IB=;ViI8Ri=k(`q;9E*^9~2mkgtSvL zVNVA073`b`Z<&l8eBu7({21O=YA~PR2@=hzeUTbj=HUnZ@-3ZeZUqYqi`96qL?#+S zNvf3&*Z>tw;tSXu3KOhD-5N!Soj!(}#$@rmyTAF?|PRpD9gJXlD>P>eG2# z*5_95^O2&Lzc;$Pa@LvXG(O;u4*WGEq52s@_Al3^yrrAbaMga=;iYm&TlZaVPL|Ng zMrNxp1!pdmeXh>L-@p93+~i`>q?m#gdRF-9_kjeToK&B!t+Z`_eCuw%kx@c9yI#%x z@Ddd(6BF^{pThk7Z`0EQU$J|+O-hd5k@;3`&=$g^AD}5f5Wgj<5i3R-0s}@bRylkH zpuV{qA_CnA&m!WFKlZt!KaDLYs=QASU$Xl8Zf$#9lo$4)uEv+9%BWaM+31nby9+X9 zDSsi@FfR>~*Pa8K(aS%h4Cq|9mrH%sOEsRrtc1x(YvzrMa@PyzZG@`@8L3is z#*d#UySM1uag)JC77-Q>Nt&;>H!{kxPyC!j=6PDNzHD&+UfNaX!E3jhPwkzZ)yfeE zqff$KhN{kPZf?R1%@?J~JLj7GrEL?mH)j4sq9$l3cQlUnpwUPu@6uC656f%SEE_h> z5p#Sb;m|jH@|!;zfk5aXybso*8Zja|=_z2*Zf$K%TfJz-?7|m*UBxi-?Hd`rxrCLO zHgO2e;S@B(AS1=*tCviQ`IwsqsOt<8Dh92Xv~%Lj)Z+B@8~MELiaoaGwhlj}jLVbJ zkv3vpG8r)XSj0IaGxHAFJeIimqIBR`<0aM89Sp9NLe4~@ z{LQ{&zG78NCRz*koN36JG+2#rABNW z5fc+<33}vGeNC`DhX#95M{9_EQ*% zU6Q{$I!2p%cJ(v$RSFL<=ydgmr^%SMdPM};$54q(t$NI?=~*Rd@{@67;5#PdEGm>? zcbQBfvDYYtlGA+eYK_-wf|3*_IBq5I@I3ZB$%& z5Kk(1BM*=4@y&t91=#}I8<=Yd?eI`Q-t{0xdsN4aU|*z+?%+sBx^((`j0Ssx#(op0=?d^FG8nuk~nrnj4= zXD7zmKrr(*Ws8rC_YS$T4-F)|ZHe7%V1Aoc0CF;8Eph&{i;Ihj?U5keJ5qL?yra`% z`@o&`-v9+naE8%Se3?zhes|B?9C?gF2Ms=6&ex@gEtpz&`rT0KJJ<2x;0aU4)GyZq z;+Lkwl!atx4r2%Vgg+`?aokJ8Y)kTfjAJ|3c(l7D-moja_T7P<+ZiVporpb(rypTY zkts&mjTPyE1?QEiT0hlk>j9PTpXWnWK2?XyTV*mg?$hU-yv-I~WBPRxy1NwzIe8TH>I4%5f@(gQpT$k;CUiTf(!{A@0ap`wBVZ{an6sBrUb#V{Hwm3Ha>e&4`LdMFJ) za07Gx-_r=R30nfOeg(e(zP~Sl0snA4WppR}`#&$l=dKKVF-FK+`cYv=^>^nyc|a3H)VUM~kKin!BlK>F z2|KVRji<-si(%%}3D5+^k|VRt2gxVPYcnqo!lRZ8@FzPu<@B5ruE+SERX@I1YkcL9 zCvcg4UBk-q|P*CSuco&p*7YD~L*Q5PqZ{ zj4p&?ww%7Heyl^eN9p*ET}xFL1y3VR7)BQ^+o-NgH~J8I5$PjKd~!@znDA*x_&INj zg>@|PeUn+=bvp| z7+t%&yY|Dz3nm`~9zSk$#*nOhiXW-H9uvj*22*-X@F_lw7ny5$T{maj)~9vmAGoVN z^4?QmS@TxuB^e?ksF_8i{x@dq^EdkCh+nP`F`%dx@jUEzpzum6c-b`9i@(um+oJEL zM`G|mHlRFFrEJUA+Iq1V=8u37mvxAB=*vzOw5ztc5J_e#q7x?VoWrc1w`plym~Iq( zCzn<=j~n32k*91t42Wp3`|B_D zr`0awZl6P1LDu>zhXGJ=aycAyvR}52Iyn<-YHVg9XMz!6j1xaO?u(Xx)F}CK_jSws z($W$T`cYy^>z*y_LXV%v(?K!LUpQxr*m7Aoncz-RS1z2Ww0R9D_4VUuLe!^qvo^fx zy{hD&bV~W7v7QJY!VH?HJAPIOE1ua}hn!{pJYVYlqTI22ryi#AktLixGQJO6t+>f7 zkGqQfeaF*5k1#GLJz-UosKTM&%=l4cO}7O-hiuZyWm=wZ^uwejcRbxg&+jFg<-OYq zE&4kE=;^YrZ)MQQ0;-xaRHK6<-FvO~UIR*sQyT7Qlc6ee3yUM;*;up&o;x0PmCr<8<^LoYIksg%evx*0Zj9e6sNX!${>-f_|BY$4pzJWb#dJf33~% z4LIO^j<@fI=nNOs+B}IS?Atp#J4-R}5qR{-$<;MkbJoO`6U|{*MUDyK@-X3n>=%G? z=(G(C`aYV^x>EGP?Wz4Gm%o3nm2`g(InLeHRm0#N9$KJ&xm!^LDluxUP2o!`R&DBl zP3hnBEfILZLmJ{jpDHVr>rsQgwzRgEC3bQVoCGuCI!U+MM2N{1YLws*QUYX|zaT69 zL_i=sS7u&?NV3=1QY*W&Q>MJFIdyM!iB1-Zzc!1b+Mcm0R&2OscPt#4T*XE40yYO- z=B#RppLx&O)*-f@mfY-#<=$p|vzwHoCO7d3v9-j4aDla34MPkZi!(Y5cOhLY3e5TD&q;6!&ScI&8M*loy{*-6=yOA zl*;Zzl5hd|`HiQdm+L33mM)hOcMGVnyYSl#^Hn;Eky1`PTc|O3VGJD!$=-g{O*GRZ zxqMn?wLBQpmekBX>AtI3u77myefM<^?Z(MD=r?5J`};XspDo9lrEWDsdC_)tR1QPt zoQr^3;>3PcqZ3aDtxQmk?r$x!cu_79AUOz?-+_r%RB!Sap;f3^{1oxo`{&{Lg9YjeRbuNR^UNcxpNM?y+xm6q4r+icuE5_qB(pd$ud~Es}p#U>Oc`u!eIT)gM~^M zV$AeNcQ+l202GjGsc@JD=-Xw~Bg=*4jrfqo(zwCX?_V3@W zO?nF__xd16DWT_GLbGvpM#f6Y_RBQmE3hI-%gn?HFoaaY!QtV;gY(PQezp+KTQhjH zm<2R?y5kQL92+8yZcGpt7k{dxHRysJq^Cmt{uhMc=F((o5GMwW=L{)ZDHKvcRohpXhj$(Br3 z*_;Cbl&^BDHxSSS-^(Ke3@7A}(n(G#*y!vOtDey{Fu?1=Z$!x_N*0Y?Zg=|Z{*vqX zYT^2FA#6XVgbTM*i}t#)Y}T3=J+PzP=ZNK{|I4(iGelbm)fC1UZsacqioDmyoY4Ty$AF?&g%@n8r_(Q3J z$9V=BouTEiw+MC@HHKA9nlQ`#+b+|^$W8*SjueHu?C4MNLvkKkz%6BcLcQsIH|X#a~}rBB=S#pwYjcFyOg?vgb+NyJ!VxO+FArnc@xV12@!diNs-lwlB}JzMm1 z3K^#&p5pUI-?!mcP$ib{ithKtpgs4gV77=Dt-@~2^h{M@rJTU{l)wf1 zW&~MY{&Pq8Zk`kwi{Wp-kI^X&RaF58mB#^yvJ4SLOP14azZ*^-9(P;v0G=g_qQ(#$ zdlqkMVIfVAJa%w6dQ(Vo{=o`hn6mLYrLO14Hq%p>Eo@(dz3*h>G*SJYw&Z?Cu2?OwC$f!VztspyCzL5Y1!oOy*Vqpn^1n6dT8%uLG=k|%!hHA3SKfgFFFHQV450y)2uy8N%{Sfuf!jOERCq-oA=jQbK=lR15S}Q7I`7p4mV&5#g19~S? zmL1}>e@`Nk^YrFjF_s>3B@TRs`|{qeUz7LHW}t5Ebdm)yzJb{WK+{mqiu#3`!az`{ zw&}uAqJMVv@aI&osETEieRdjWqT52(Nm=*!VUd$~dkm|Axby_VB>vi}yHSLg7UpoN zToJbdmU!Bc1OqSvJ12fpJE9|bjF?>&3p-H0bh+v1VF-q_ac9)!F^UORs1%P|iY~t! zI^8FuA&$<*GyC*vz>t$)P>{$DZVAAsC6hWYUL1HE1e9Ps5Yo%k{26!;^#-cQ#nyQ% zySwl4%nPQV9C3exNJjQ?I6&l<4&FQp*n8`F0IC^#62AHH#D!n3Mz_OqWjG{Ajvm;9Vl$GqDlUo%g~4I>HPd+9Ax{~g=+)PNH?Z}_4+u7K%Gu|}td zL#0$h(sFFf?*nI+8j*bN0PV^-@=ZG~0@Lr^D}`7~a!eoJuF9)_`Z#{mu0F5p#TdT= zMO_u^MBZbE@1$FS)PIg=?XXG%Rto%kByzYYN6-e4VKvS3k5?G&BrQ)`O`dpbdE-0_ z&f0sX_sMDCEH6>)?BS6s2`8$Z$xYQ#jksONg6L(rApdZ8Ck+8^6HnSQvHO&>Eo%z# zvmSw=>148p+Mt;$I5jnONVt2KMblxqJ3VDRsc?crq961MlU7H7O_4r?4<3t-p_~TU zUF?D6W~|NwSuR@j+o#-&pN2M^Fwf$a`5nJulqNUYf4{RH2lJdd3>O>Obu@F5t<25Q z`VNq>zvT?`1BB+ua)-lt1M9;yAUi&~T;Ej|w{C2G*lM(!Z@v}qZpQiz>T5?wfdP`-r9$0A`~~BGA6eyGRv^DT=NM zCvB2vV25ZT$sZROUvjuf6DxfsSw&i8rLR#wY2{9yBzNYkc~SiR zvpMjPC{ooj%1`{w$+O+yY!IkenD;6#l4llUyk*y5AcUpyC3gtKRV|C=E@+3Byz@#TL`_Us3?hF?$J_ix2Zl3?c$9qnYnS6qXm{kGsAdghI-e}joUYrFhakuDZN zmoNLMmy1X)ANoTFR9Lt|{>1z=E}h4c_{L|;unru)=wl3Q>Bc9P`W1Y-%9sXBwxNfZ zF!XnHbTc&@CxNKl${OZDRp57;k-U=AQ>707cy=i)l?1?-_Q(E0xurjN*%pU2&Bi2U zgr_Bk7dQD8V)CQ{hts#eaO>&nCVpnV-$SHpqLjcN4S9g@TT%NYYuuM3nBC zm{M8H9<}+5;5tB!BrEY$ZPT{y2_N6d$^c>iOTbw(6{T}qVt-M|mM%UL;p4Nwct$$% zIsI_CU%8MyASmumr@Nlgb5i|14|S3du5C4AuPuJX7JazG6* z&XmO4US7QWqqo0YNEwB9s*CoCb!g>9WcChGc*yX|XHR;ulxD4pS~YpKSoy4h^s zD*^7CFVlp*{@6<}oklhc};tnGBfZpCZw(OBSz?EL%( z{C>_&a|E~=`yOs?B&~+QHwU)^yBp<-KwFoePtBu`i~2IIanHw@kNvXaAtB&+0O`Rp zgTt_kT($uC6Z@C2p1A!;=}ZBweU82%t>@Y zNm-p~Ui+e>4|8Rld8RnA6S(#x+iCL0EvbdbABz!5R>|J@T<85|)(RgLvaZaBA`!B? zH{CDKT-p}epurR5@O1ilqI3Sbx|+L|v3c)uG)M%pA71D3X(#h^j&iizx`xB-4+d-} zLGLp)`3?_h(y;@WyLB+-epyPJv~0*pnk+<)lIJ=5@Tp$^z%-X!ZwAbA0bu{9c;zy` z=Ro}Mm-=Upl}EQkr5yD5rMZ2Q%}%?MgU=)yh+DVL0;CJaEq@x^9be8`@5n(~w#s>) z?Q`om0BD{Dw;g?oKCZ8PWH|Lt2LjhGhoia^;es@O-OAleSE6afd5<2m=NAUe3zL$u9Tj0nYQVU`g@76TuVr# zp3C|vn9)&uwPb7Efn4!tM1^hLYagF0Kr}D8-*Y6ZiECld%2ugZy?iN)SEEECa80*F z7|9@&>!NmR?W5RJwZhNl0qUApIYD%?74`^CHc(Z>_V&zjMlTy&ZUVUjf`MqQi7tO7 zk^Mh=CeHRkGGFW!2khvB_}+;;`RJilwv@jb*lYA<>G5_*Y{ACbTEUkpl))eR1_d#S zH<0%5$e)y8DG*xQV#rWpqd`xTrKZx}&){b!vyeya1{Orr?=|z|#MZ+Y3($-4+06_3 zUS0fCCJ)c5ROOo)wZ{hBzw~KS+R51Q3l95@^z9RXDMCV*`>W3+=A-NFKS@`5zR=@G z7T*Z3x0ID*nCzD>Ff8F!R+pjI%%g{_J@ZPXW4QmsT#s|RWA+zsWSxgHzF5sxqdm`? zW&WWm+d7ugS8wZWXL)(U#&=k%7^f6D-IhzB9U?F9e&vhyE7k?tLD825xR!L%&Zu)K zM$?fddJ>+mvqIgl*iguB2M|;|)wz;#k8Nfby>{7c4qN#`_~4x)5#F?6io+$+bjfm;B5?5B*Zsdem;~)WLWCLBK#pM@L~$9DqeMuc3C3 zRW4C2nXEXE01+W^eE9F(m)aUW(%&^of)&25*sSC!1006aLH=bF&-YK)I5}(FbEI&7 zP6=wEak9^)0l}jD55F_6RCnj)j*ufZ^~oXQg)+Q#r|WmOtL*G(y<^Hoh6&9`vp#OERel5y5fHnYd$<8juL+WfVKkAe@8 zwGef+wTDiTY_~b@Z_U!K7&yk$;UgaM!!-C0;a%t}2umn#yo80fbreatl~^Zzv>pql#%|BJeftgoZPsf^qBy=VoqU7S<>G4ow%cQK z2?{}M-;<_=C}A64U#hf^UW*}no7BAk`4MP1c;H_UpJEVouSQQJgq zvNF+L@q)IAp9^=B77Acw+Ql5bpP?U7YRE>39MoFablOQ@$+*R4DD&$)*}u0bTY7ZR zgFt&q`{O<@A75QfjhS^)Mj-%LO?m{g%t?cn=OdJQU-^ipFIRzg*3aoedo;$Iz zXf!!Xi-XFnd@T_Dh=*sjkzGFSEHyZ9!O{b}Np_$=e9zw2c69ng`3*p%zg)>XJ(gN0 z#Nz3|_m(3zP&{LWCXSMVLeOLXeT5A+xvSwz{O6BfCUEk1eJrh$$|zsQbJDA`*OHpz z7IM9uwQIX~tP~L0BIQ^2)e3s+sjOoxGdof1@(z-tlq}`;55`BeA=UG6i)00YVz!(BKz$cIGMk*e^DQ7;}C_JWfCsp+xrN%v`&+veG{ZwKLT@PojE;;yCF` z#fBdA z<~HMCMh72xdQZD{cxFN-_IshN{6$@&3d{|LX&5c~WBAQNV_iRXtTOjvJ>9f~T(Y(N zgmexVq?Jvrk%R-rg-8T4A_L{!&x>;T(1M^d7<(&sMIoq(RpmJ_q>W_}-Q&>JJyZpw zVTMU6ylBPXIC$ymN}TpxDo?p&@&~`v=Rf(cU)}#hoNZL{^}HXThmi1h{X+DEX5H50 zFMF}WTE!Z3qbQuQ zUaJf32Y|V4Vd2|1u8{i+C%~$AadLm`;EWMB%S*)U+P%2&a&@iMW$*fegoB)>n{4*% z*|Sy0yK86Tcg3qB*t#*to-*?+uMn&*R)25|v7yt@3PaT-=Z{wX;6GAj?c}7o5Uab8 zYRyS1IvHVmv^mN0(0jelLO!l{iYDwp#qK(>V(ROb%Vnteu>#$%!WV?6t)d<2x_9$P zFtudETy?2bq`mSJ14NAzL*CMQ*W5T!``BXYz3f5hXnDunHwRzwYY**CCcA)$NQ#pE zG7IcP_U4BN!R^ep6wPWjF@*EY9x$T`ik(e+_!xC{g(2I~yv9yDM%Y-GJ)?Y^Ro3br z<^Dz`v~w=@UXd@BrGm?C<>Ruv$_biY#nbIJ-sV%wS8LHHary~^lc7;9BjR#J(y)RR ziv;=!pFD|p2goxDLFYkpb10T6n%5Nh`>>y1s9l(JL{!H#-uWIWR^O)YI3ae9D*IGl z|F*5k^x54u?k>J_p@MG?hgpA5+7!9Me&oO~hX%=bx-f@F#>JD8Ke!tx*e_dmn#v+* zNErH0Axu}fNE#_%(+C)JU8KrQm`5`zk+#H5SM1f=3zNC_d0jL&P7ihQGe*As<{abM z;qDKLHjEgAZ~gVv&NVS#sDqVae;)_|9D7KyuuS|YA6B((NxbR~X3ocCNGA|b#!!|6 zMUhxcJ?qfbuZ649-P_YIvD&`P&+|_C-uAt*qF?3rIpL0h&I@;^_BKV4XvWq~{;m_l zw>kCtbRGXCDv-oKFkqc^}3JGu8U(efX&n1@} zA0C!pk|GTb6iqe*{g0=blkkw+()vYPmmK3t%Zu~3F7Ajg*fZNgZ|)ULQ7rk0h;b*C z1FF1~YZsYqUo%t}YNTP1G)p25%lG*F5*osnnLq~>(sLf^17ree-J@*^PrC82C{VhK z*JfUL)ipLgz9N%v^LpFi<#o6r9u8)(_)Eu6(5Dm!}AS{7>F^DI_pR^o*eE=i$R`LGCO_fK zN&54~lBYoM#x2tXkCmN2hrP!OR6Yr2Ga^@A3kGhI{qNr`UNRj##G3yPVQbv(9~aBA z4xIkpavwLcuW!!c<$$=R(_iir_}_(#Bgp>pU!DT<+i&rg!TtAmKYGV^;vlb;|Du>_ zR#g2Sz7O*H^uNA;9kb%z^!p9)yujN0=T}a$PNs3P@b@#H{)b8a%de(V{}<7WaVqhy zM1Y2h;XmIy;wTAHo8JCBnGqX9_#Xnc0gaIoexpI)f4&F&K0U@wJ286PIi_1Q@9}YC z;1OGlzr-Q_ez-|d%Dj$wcvxvjh@9WFme``$VyESf`vfQ2~bx>>@TyA_Z zY}~dSsr`u%V!QubP7E5;fdBrn{#~^Ht)I|*o>oA$R9arCv0@%?mU_Vhz&{l>+F2Z( zY%XKGhK{@XQpesaMTuY?2Lkq{JaHz zyd(c|&u$c-6bcH8NL51aZMRG=jE1F)#YPrUVJ5(P>SlYsc|!FCO%Kt_izVC&P;h9> zL$}hF3&LejJ)Z85923m^?d?S?`}Y02;FBjqRl`-Rm+XHvzAvPeziv2J)I-;ZM#)TV zY2sj&wVN9-aQQ%X0;+iA?Hf?;hoAr1a@;m*3JXTEZSyNu&m<-^&Dr9k!Yf$T^{Oiq zLA3qn&a}_hdFwPVVBLeiwXV)$w$}MZ|1cwPV{qVum}GJ@A8&fYxs&tz{Jc~T=*8AO z94J6)w3d>UwJz`>LWhG5@BrsAA6zfg5Ds0F#^Iv}3IuaZcKT(zg zR2~5qEmbPa*j>O9l_QRB-MoEojV$$?vjaqNUS{8Z9fuWG*feRBEIlfI^H^H>5NHX2 zLCEv`L9iFJSEz)W*hc_tWW;lKJR{QFSw-jr$YLsg#x%L%oXdDNx8q|$1e6R^_cV#$ zYHcE4|8ku@@m9No4j6ts-Tz?kt-`7dyT3t$?viehZYhzF4ngUX79^ylrMpF>krohX zkS+;nML^15nziVNcdV zq!?I=U}#FklxYr7@|jeDu2C^E0ZfSmnHHV1#UY* zP3Tw>ejJZfE^>8HRM&GQdV1HZngls`n6K@0lil+q#O}6**)GlA2pXN|HF1+Sx^d_w zHi)el4}t`Mb4p7~i;4ha0bYPew$|=hGbHBifdhtTM}Qn#nJspy%c;4w^>QWI7)Fp> zEAYxtG#`KRAIwg0HWX6Purj3^13CkZg6~QAd&%Bl7K86?bA48u@Tp{Ftu@^qA0N52 za4pM%PWhlG51)qQBT7=u+u@Bm;r%Ow<*VC&9IG_?V<4!2?7wv%7mxs{n zUpwJ^Suy<3(%s$N&u?zMHgnAsXDq;1RYKh(O|o#5w~Wu@aD8}xe;=&O?d<`S(Ya`y zY3d)1%GXx@T$8e1Vsppri5TMqq{%?L`TeQRlB5uBG&)i;3h ztF^1sFXh342|hrn@n*n3Ac*iLPpF47mM+i2xN}cSi&*}T@$sZ3;gnv?LJ=t@6+EO< zXP`?U@O$w9+U79Bkb>E*qbd%}z-;|en2=TO-1W(K?OO({Yh(QwMn!YFd~V{li$7Bx z2iIfkij^BYm9@&I5jO^p+hOMnFDSdy~UsD1;CNvvWCAeDF0iH!BDPq$p`XwgJ6fPh-hQI(3gbSE{F{9+I>G-gwy$rgk6%&R3+eG?A$6p@&Fdk!FuesTYF zCj1s+uC1-AivH@k-k+1TERsyU;<3ZuxSmgv<1iuUug-o(N??TFu13FXt6wt{n7wd- z*zps^hDN_AKvv`tZl@y*k#Gp1HKW^RC&?&?9+Kh<4(bYjkU8q#Fva&*p z26iB7Q4jwHOHNe27wl%sFs{tSrXwDCH0V0??mk)|4;F7a3Mw$ko#EiGZJ^2Kc}gpE;CQ56}C#L=RGKP^9~sf?nBH+nK}AWZs!ftpQ?e$$LxR}aszp^PW+ zPqb*{F`=d(5;BEXM{n*Oj+0&OL*1#+He-JbvV6b5viZ+9ZdoEN74S)d4njC~p{)Et z%(LyldkyNKJb>{U+QloL)b=-p!hrS_%a-%lUyg7>suEL1?##rA#cD;sp<+`5EKaDW z{cDeBUN6UvQZ}VL1N>Ysr0S-`9y~aMoA1a>Z0Hq)feiWnskW~x9s<;i$So4+gK1fs ztUcAB_8TbZt~oIw`t7Q(SEoYlrdZx~2+|>LLe+m{BHaBwnvUXyeX5V;^XET8bW-rm zf^p#?Z{rfs)1^%hi#XN|C+;9usAE*RDY1(2V)cuPiM4dB-8H9V+}7Af@q|)d1gCh= zs63ewJ-V-KOWg0W84^(kEcVJY5mt)C$f@c!FJB%kFC)47-{3jbpK+gf=pGo8i)OzA zs_}OtsoF8hM5Hmpp)YF4r_&l|>`6m;tYhP%T21S~VX-Me? zB23FPdIUo2FYCNR{0{(#%gCU*Z?6ZN1T|e) zI@&G*vWO^qNJT)ohU9y}<;d4Ff1|n(`0?_s$tYQ&_FxSBF@dp8~& zywt7c{k}kK#oQ}Hh|~^->gu0FQ6h&qyA$wSo%AwBC3aKrU5gPex3`SrnN{V%_O`N7 zxH^VNAjd%Tr%fIX3Su-?x;A1d>HfJgo{u<{i~9(kogheeQ!RC7j~Vv}ho0*u*O(A`lqF?7jsPN};+d)n4e030g-sCB=Dqf5S8mI>1Ix^As|k zHn(7tgQ2VQA?HBh#2dQ1CKs?&o8eRjIUjk9T&Xri((A}L_M0P7q__bVdOVMn)U7Ux zL7U#J2D5A$%M>acr|W+Z%CNe^xk!sP|L2{>PuNt_3Lvq$^IMp?5nCckkfit?fbVoo z>9&7N|E90!1?=77iy)r$(zUU_`IwjIWHFq2)=V#HL7cV_JN>(>Ww2KZ4*qcM4v6^QgmHVg<^28iIyt5OOPR=8;TSFY&VZY zzVW{IDq#VIIgzZ~xQp&m3`Vvg+4wv_)6LJMeD7)$X~rRcM{C-0Yl2SK6VV1|8iKZ| z-fjvKlEvODangxWvb+R+{ zV^x-6q=65&c)u({6>q&Z_IWiKQoD|^Plz9WDyvNhjDrV17Hs{dV##pz&2E_2nyzKH zWv83G#dO7wWnAcTF7WP6=XV|bWR>K!4<#s6`Ezq50TOfjvK>9$!zYEk^5Vr&)SSu7 zUyn%H&Bdu+^4|chJrqgWN_3bLAf!6%+Q#!gI`uo-se@X(ii7dz<5A81&z%|aej^+M zC_(L~r;WcKzh-N{YMa_IJ77z=k?Lk=_tl9~aV4eB`cc%qmOc{a)w3eHQm%hHU9}@rKz?SdxNj_Ix880^=C(5Tuch|PKbmczXr<=P=P!x_U z_YPUxRktGc*$^1#D8@+9T_NG|DOWP)j=nBV?Udb22`Wai>W4uPFBFfBXjyxOfMe?3 z`P1?V&Vl%c1fm57xBT>fGd(POCmahqgzN}~)2f5t*;BAvkliF}z$|r(8+t=k@%{D0 zI-jaxOzq`{o2&Fkd5@Q++5-crC&Ss_Q^``x4)P=~jYI%oJ7t=@VR(nh{UQ;H7)7HI z*vnJ91(O?+EJSt#eeV=sy#Tt-o^?sioB1A~8 z3wdaDc)bUmnw%%`Is158MDOqcBa2~cC}ZEz`yuiTSrX4N592@AobAoS2N5@Kw;~u~ zP9O{4ZfdurQv`*q*CLD2cByEHJw-3(C;r(}wtOf+%wPWo*BTTzGPzQIC0w@TDZxf< zzA+ImW)gG$M+-n~%zK4;63d!A(5oD)DW;&o_{x7n&oXAmbY3{^_@^)P9JW{x%r}-( zBS`#66IRTbOAqIT+4N&droHma1WAJ4J{^FNeZ0>x2>Ea_*IGRGq$F-#?VgW!A$aE> zG1(pOaJDZA&(6)s?<1q%M75*QB3^eVVBRk_zQ7Rg#LICi?-Z^l-XVFJl){v6FRX%{K@H~tX>RF!aKY?1qgdzY8NP~=p(-qE9oYK7 z0@bZEFO0)vy?u$@iEQq{`c7TwBo>AYgEsul&}IiQ5^9^&mGsh_`!9Ny*S=B0vDf{Z z;Vq($^&i%Y z-!*Xqyrdg-`_J&!k$I=%u<}{!+}088&{S;;r1i0E$mrgJO9%MU z3$%id(2$CCrV6t?Djz(HV@RYGm;M?&M1SW|IqzcdkrYg#9pO(L#OYXE%+37T6xXqk z`~6HL7RCtBY^`m*zUQ?}mc-svK^{^Q^84wftXw4z7Iq(@+YHA5oc{|CtZVcY1eoQs z{kVya#D>@hO>iZ=`-pvu2vo}w{mE~y(;hN-=wh|yk~kWY6xbFi&eG3pxG)Bu9t=t7 zq*aL7R?JLJ#+CkX0o+FZ^_3E9k5lXU{v)J6uMepAQN!{Rn1iFi`_sUO0<3JLuJazQAUe&sT2%9mvK;k%b;4C5#L1^Qy8X?nli$%8d50?$bK^>rt>#C2CboBf|OkeCXiGxR+W? zpZCeB)k$V3mI?Ll)2DOL2F{+aQ@#gdhhi-&yOr%jb~-2L!J z)^P7}0ZF>wXC5rOsqU7;FuwD#Ju3!kqH*NckLMZ@_AE8E^Qb>=gyrN*C-0TcD+c~NVvU?#P0Uwn_zKsq^4`*@rhr{ zKJuP?_S8BJNB?WMV{(#V5?bneDDxtuhJN`0)0}*__1loOb*Idwx*gu*B{I3zygna* zQ##CIR8r=Xq`s0g7*T^*iF(Ozw&K2c{Y>4QZ}C+zz=q1TNC>y4#%<^?F{(=pG30`d zGne*XN91Do^cuH%>v@oL8egc7HadB`y50$_6DDHG=NL%K${HG&RE!6o%$>-dc-9%T zO0JTJm-E7;5vSeE1AJt@*g>M=%M72xOuJ5Aw_0EB^*Av1?j=dszelDEj$Vx?%3gl; z)$e>kf^*=sZ{&4(6FqYDeblz&H?PBh5Xeh774}2k--{d4d0%JqzK&Jd=a722j^(ZF z)!$lLR*cytxle_SliH|Rm``YhQX_DpdE#QT&b@w@tn3UEB(D#07m3uN#gv%RVP>(17kLekEVLw=jA{40ELnijBx&e$IMTh z8qxj-G7mOD{~z)Iz+^f zy4HiBH~u19LPFwdeVC!gX;&+)05liHHWRK}M=(0X z*_23D5>H0$)2B}^SC>BbecjytoS(c@zW>h*rx1XmM&v3&HHguQ_-7wm83%D{^&7jX zR)kKm)=84L<$LQ>1klFt<^eECvgq4;TzF5)_G~eV8}v?99G!RfB~ekK@ZLJ}Z7~8F z*hznXAzsM7MxWF6m6rvKiUYC% z$aK&I#wZn7>(`T}WoCjW3oQ^jVp~B#IiCPlUf*9;0y*(hwQm_c&;Rmfx=$7lz>Kwc z#-FpZNeoaaLs*Qi2_#&Apl+TQz{w*)xxLo^P72D_=U ztx!|lzs>7~K*BgjfricdXiVpC%pr=2o_5`otD%lP#5_>-v_AnuU*7O{zn>t^VN^Wq z&hrB$mK!DWT-ogF|JndE9``uCdtP0Xz-G`sRU319J$DC$gor~80)J!dT-OEzxq$!_ zR52Y^fPr_V=a+e~U`Mw;pB`zv9!jLHrjI!+kK3>b(`IMvVU&W4udflthFcTf-#>ZBYsSFP_L|;Vvm9D425E zET0`F-IQtDg=T_*T7C^g{BWgC*EzGjV2BYIoQ(C7EHoL6i{axfZ@VP#Oi+Us47B+$ zG@?xju`xm$M2ps`>Z>tT3wdUmY~9&~qxN-nQ%NFQw@cJ*x*ou*gw&H)ug(C|2DRfU z_+Xno;bRFk%=A-(r-C94h8^T!HGAYEM3#Wl{6AS3j*_>G_r=BS`N;ugiTe))lkzH; zr9($|5v)p4>es7NnSVxhqJ4<6y{9kOHqws;G2K0>0+)Xw5ly_lS%Rm8gIEMzzRz>AV8 zpBSJJ+28-ThZdrb6;2phfsZ8FGy{=`2hDIP0q20Pjvg5jY0Hu^8{KG}YMMxscgfdl zIr+6PSu3ty5)}>2629t9(N&(C=r7C+cj2+RcLyE@d@(b60eDo3T&ZZt1bMM~L&n0~ zP0Ak0i*lvaw#tWc1fC3v@j%&?YP;^FgU|_D5X9N~Qe2l~^Tbv}N+b>Pvs@R)-%@9in|7h*lL?1mRgouD~}aA{#{=)*l#e*L8c43ybj_?tlLacj3k+$!WWh;5&B;~G@x*xjoRzL<>N7gD}hQn4s z;1y|7_OwT?93FzzP=Gu}zf{on1YdTTXEboS*YRVAp{82U59l{i%+*?lKP(sUW#n6@ zS)>kH#4f4MGA%1zBQscY$4kOx6I*c(bibj}E7F9e5Dl(Nsvcm!B=LZ^3x5a-5uQM@ zVpL@w5WyJxp5)t2fsa#MT>STu7dR|Zc6fvyl0*S1>jI>)goGc2Q!z$NUuO}tU2e5q zhXxq7lI1dN-8M|pR$4)J(8Yqd;93}kmR4X&+VMf4!wN1vAZ5@z`^;Ut$Z~9I*f5Et zWrP@|^M5QZ(j)!g!8#aE1ULuSz=eCFWnx2w)~X3Iz_P8xjHUnn8Gu2=MPJSFl2Sft z`$KmHGcuT%>>k?DjUY4PEv--tQG}WnkFj|xbNGR$5f2G`#|2+HL$ZE_ z8I?E;M1r_YK*sU!zCFItLH$devM0IUqZL8H$NZz}^bKsKTSq4O!A~Q5@1rQjL(Uz5 z(bD3QPb3f6f80V-w@oVmA^%^;t#M9i71l^j@7bA|FR7-an_SFFFV16^K)d}(m65{k zcW72P3)A~6uS_9*Ebw4GB$=I>8o=GAZ_O<%heS_d6p@RtpqKB?rx3@+EnWhPt+#yT zJ!r6A?X0(Lc34seWnM}}GX?j^`#|O}vpla&mHiJWcKu&v-I$>zZus)G%D{ zE#uFrDcBaP;^Pj6?di%lA599!4o70>FajQ=O9lu$9i05UDO>XjX$88yIMuf6&0%z( zAoOKl_38SEtkJ{`c>=2f)tC8t63ZXKNyVr*-vIdM#Q1o&>b-t`My(lEDy)~DU+Mw8 z|K#9ED=&c8d4G_bC?I@)4CJ;Pi(^v`xR1O$Ii*O~>UtT)|<0kw8lW5ySEoLL5k zh8~rE|HwH&uHhni{wSUimqvVgX2$3IuTzcwougE*CN(;0q)uSOfShgL-*+~xglQ{R z?t_BbEQXz(R$W@xdR-FG6RK*d0hIgkDB|h0HEQLaROj*>qav-x>p!>r%T@B#1DNnd zj=jb5hdKzdC2U*2e#W95W{+J0)`Se@NTfKb&d0-prK&~!;~YYoc1VY5fX^V1_nu$i zy7-SNiGBb)O=d~&9qRLI$ffelowVW}y$xP94Gj^HHT*Qx?0`@AkD4r&UtIhVl1o$_ z*vkof#%9N{byqye?G}R&Tu)Qw0?PY@7T~!e#ez0CQ5|3?FEcPmkdQQ#wQxnB>#B}y zxiS05hQ!U7VruW1y~XFOmU7RBX6siok)574M56PP1L+eihi1E5PQ6+i zIVNbk0n^H7?BOH>D}1w}3hSLv(M)^_A z60pb1s3R95*~TXYyY9sycTjAZl6Y7bJOZOXOgUvJNKMB_v+Cv$11Su1A9Kg4kpS{{v@X*wR*at~ z=rj}DE|B?--R3MK!x4@uoavVpyY%qk*WyS3vb9lJWrakO239~1?CWdaTUq}H20N8% zV~Tg5uB)*nwt_NzxIcqY(Wuqi)7$%90qb^O<{Bqp+}!@Agr!8!a2ESa2}4s4fw>=1 zIqW!aFc}mKb*7ETIp}cL#~zNP*Lj48=y^(WKmz`4#-^O^I0a0rb~=17LSn6248D z2Sr}y7Zd>7;fp07o>oLpA_ZH+Fvm9U6ZKoiKfY9{ zWNCk3Vf;rCFa-wd^hrrt2c4ztqm;!TMH=KsZPA;U>m>=5(>+#X4MBTJ=}x%@?+XfI zntlJ}&H(@5ISZM0bRAR&r>-SQw2hy?S(kK-$!4duE{8bm@?1%Cc*P~6GEde5*am6o zIjQWi&xAwF6!p21@$GJAy_|d*9W5h?_YfOu2zYs8r)KNX1zRO1P3q*?7=qp|Umo(78!_lxz$|5l|lII7;J>NIrE1f&8WRdT^ z-3qtY@9KCoG4>3*o)~q1`g}0*C9#n zejzb_sH924+C|y3CyJ}a_93x304l!vb%wSK{PoyN_F0-mKQ4rUPBziF0k@5v9ri?| zVIw3(r>l5!0xvlnV$_0JTsLuNJtrl7*LOe3#=M?VyUwPD9O>q22vlS=m%CxmAgB>x zzihl2zl4(dCwks{X_+OGQHkak*}DUn8(&06Wj;AzU}WTbxc;Uwe8NBTmNAUP*)Wm? zjdSOSE}m3(030*q`<{}C>Wj3N9HzW?qXtFOyzy3r$LVG^W2FEvrd-yhS&qAHw#xgWZC7p%0 zL;X_&Vx(famN<^Q%5a$M2j8!ZK$%N$6xG%e;9;=j)P;P5+w#zh{0?;`IyT?CEg!tH z{l-LxNzQrPlgCd7KBI*mM>Evut0>#(C2a(@K=#jjPtSdVfpf%x_qcDGhrt{rArwL0_Li8Mr({kmwjlE6KPbIZCxt zA{iw_hd{dKY1bLJi4S9!!X2aV4Tz-|4e!TpJavIkO;fwiZ7Gs5pAAn)GJW-uAZP8` z%Q+pj|LaY{vv?Pb-dYw0rdQ|nkbCFrOTF&4U0i?o*`}7LsepF1$o&r=v)?L&dCT2gO&%+j(fTinaQ15+!+d3{jV zyA~CHiGz(ShtlKJ^^o~NT>AmxEb5{Z_e!`o-}VukT?2X!RX%tViEv&h#$WqgLr8^w z{rc5GQSig(F7)W&zP?>w_LOCX{5FoaP_!8G&0n>x!=d>1?rtLx1K}_pmY0Jz2NFaW zYRw{Ztw2?bjeF}gFBTjdPyqS1Ip~c;R(SHPTM_3={A z@4$_@O%?vAYnf~HC;m%z83WH(9?!rlQzrAn$SVz{0vztI4TZcuOzQ|~Y^_BF=<8T~ z#H4Yaa0PJ~=NlECZ_oHTtQ`-ACrF{O=c`y32)HB}yC+y(!SU$wtHa}f3vIlxz&cZ` ziqIc1DF@e%-+Nk*?*@4Gt9H$|$IxI(9D*MQdRTsPkKjjy8)}I{-P7dX0G)Wp!02q+v9AI#@Kcz3*L6>kk@DGYTs0>NEq)moVXVGxyG2L6(|S> zDS4SdhU7|LO8 ze)5!sfaqPax#OJv;WjCzibux1{rwm)G%X%*fmYavY#*$9r}t!k#6@28^>cG8$inj5 zfAr$+M^qO|#uv6V`T#BjKjZ?~Rxn`ZM7(4U#!HxsEq_c6iPUtf7h% z6A;LkM;qTdGUcKOj^n+y^b!o?MVX@hZN)9U+T3KzZAeH`(7;aBt2Dsr#Cu8S+$r^m zn8ZRj?wP~xe|S-bX3CIxcGn!7Fg)>g63I~iZN2XH=25Ee$9v-uxgSP1>dT_AgkVFx zHa~@yGJ&@!Z&=sZSU&z~_}0m2*Pp0e6JEWg`jRi8p7Y#a?prr8VI>xjTv)t+UuutW z=U&^*`rpPGxarZ?IXn5*81AZ*`4llIUB2(~(%)c{sQxn<&d0J~+Ba{)>B=!+()1L9 zr(|cwD}*{U)N1dMqAc#JiRn#}ZGGuLQrks?F#^g@ZWQZ^5kAF3y6~kbH(Vx;rhv22 z*zdx%71=0lf%O_kx+#VeS|gXYH(-3JUN-i~|3|4MR#LgaM5!iQZ_JaBd9A&JtSd?& z9nGF_pY*G?^eH1f%e&O7(FeaXREbj&cNOV#Dug8&H~$H20ptTM;NkFXn~d{ywZH6n zVh{)hX*4YPUM;ggq{3+Q_xu{tZW}=r?}aj@oC*7K`RcPL6%}!RwyFC{aWg z9LnEOzkFpzSlymTv9F`(0Z*|9bI2mQFY7YTguI#u!G=V>+EXV2Q7EY0=1ypkS6`fC zc<`U^xHUmB6(Uh)Hw7&a)HCH|u5SqGjA>++S8nga?Tl6qp~Aud_R~ZTuJk^N4hpyU z0+f-_=lM`&&9W`f6zV61+?T5=3_l}`cKG^y^w`IvrW7X7J$XVyMWrZ0A15pr{O;+C)Wl1Y*U^n;-nUBZ$rcEQ0ze@KkIbGQV(1l;Dv{t><) zWd`XnBXjbYx=~d;QpdGAt6xB66m}ooR1Aw(96_No7yrp$e&(6!my))OR1jS2R_ulp z!pxG+E7opXI*+MhY;4|mNa6dvcZUuuS!{p;3#e$`qJ-I^5^x}{xyLDew zo<%eqVLWv4(NNy$0`J z(p>2ad}NK50V77`UGc)=;&LxSUH215v%B#*PCra+Eo~CHEr8b4F)t{uhPtt%9ees92>CS{G73!kQZ-|5=Msy`hKigl_mtgoPfcjv6Up5k8Sa zS0Bm#x-4J9FTeE}yN2>ZfoS|^m;wB`n_363-<3oh3k_WAUFbpP5K#kWD<4)mjy`No zKQ+pj5~)z zwHslc_srZA9N`xb<>95_eO$SYGRWGKoMZt!@~{=7Y)6At6Vf31W*O?{^l4*L(U|7~(9%B|%lA0`o=tAj%~hl}ChY_0s8b~ss~*J`7#f1$=@^XRm`7_RA&(~U#i>Ce%^ zitEiiU%t>uh$hbb5xyT4&>3VW7qk-H-CK+%st;SG{dl;l z8uyxY7bL#2IP^$=iBbDH~9P>f#=DqM&A1~WNbsaP0GO5uA+1Vg(#AeVzgL?mN z5;FqR2BX0EOM_gkQ#ZoqhG(e}pM@w7{5NDPwh-rY>I1SNo-2fNAb+|Bv^2W!}Ya z5k_RnT?&+2zwox@ZY4y^<*`I^46r4Oyz;I;b50T;w9O8yO(dFEr?Yt27NskI#2cqf zcq<5x4+k!9-#VvrgX<;F%$Bb^30~@{Ky0|3YV0~$_VVQ$4V>qg{c@zLT!s)(cUm>; zM6{M}l03BSA_7UbRzh3e@-+3D&B-;E9T*FsKj!_&qQa|fzr!$$0octe#H<+BaD@~5 z{{8#6&iPZ7;~`utd%s0x*6zcwmGV+yX;0ONUybwP%FfC%!LtB=YFX?30yAeY)F)0^ zkjOf%eWN-*Yz%SS=a62pG9t!V_B0YVwYP^>lFqDxF);B{DA_yZpy6A+-8Ugm`S(l{ zo8e!lw3LRa-I*lJT`R40{YGD9Xyk0M5H z>G3G%$lIQB;n51|aT|fIxHA*H`m%HV!&`1Sm0OK`QK7s8RZcIwV7{kGm}Y*)t$yXv zdF4?rli{#oF9`KS9An=sm=O4x_9!E)E$toQpoofI(ZKw;Zql?(O+iA4)f|ur1H}%X zUkM0^j7s20C2Kt={h1D!lVeUlQia$VzrDB0iIs?#x~McGtg(sOe@61Ze%3?GblQ_d z1COUx{ZB6Nzo!W9_@}T~4hyB8fj^j+{hxf{lbm6(M%E5=y5(Qe3)f!HICg&JILJboD?`xoPNumt~-;-vx;Gh+M0F+b&3~+~c=g^`w?nODi~~s^%yj z^p0n=P9r}VtlEa0Utus{?MrJ_)zu|4_VHU1s25a~I9#bHC z1>x|^%jRk3=#XrEy)1fb=&v&uzh`lBa*BEG!;AAyT!T2t&vCu3Gmi_G8p{mA7Zlm25MftIF}xPRaCX!DK;7(L;*zAG8Ts2JKwC#TbjfRNp(T3lS*Yw4AE159(C+8KCd zFO{Iq2E-E9lgE!CZbEeE*k_z3?dRkKn>JshZe4QasNq8C+j;bkH=)vINUr+~@f)3%x zr)_kDNH%~Of~_NSAyQRHXvMUe17z-?7WM<4+gC%BidtUX1B&G(VSt{}*66!#d;y1( zXC^c1*~KMLpMWYI-cy5%UClB2BJ1Nvf0i<(BH`GWw*v}AMuvuvybdW^oc0CRfx zYVGPg3ur{QrWo_Lj6m-L|B%XCMH0Gjc`2@+lFMQ{Wu&j)2!g+0QAin5T9JM3e|bNW zzQ^fMi1?b}@QMoPhIuBYpCO+Yx)#*eT{R9aA%kzfiR6Hr9>oN!{3=}%U?46rqJ8nXPf^gJu3~U~stzU@_ zbxxXrQnuv>un8#)!1x^T0}K(HIa_Pz@)`UMwRRLfj3To630sZO`BmtfY+tq#qf3cn zB|OO|LirxlPK(uPRE~O4M4^ZhbTcyFD4IQg)lrxuJwDqth98s?fe$6VR+T(1tcGbL z2KJLxwo}wX=wO0{uvaxA&&)#W$U};lP@|)`F!1A9y)p=Sx72Pp@nzSrjZJ0Lw~gDC zQ0dk5J90Xbs5j(Tp#PcC;Nw4Kk)%sg7(X|4x@UID8IKaRnK?26JTk;Zel zyCGV;gaT6OFh84X-6zHJo|_1%yOeQ0&Se3V=s?u(__tv^qg6=%x{hnpjOdWhT(Wz* z#ZQ;UfwxH@?>qyOUF{9{g}Y(0A`&?(IFsOmyIu$fx6h}IGUd~ zad+1V{Tp}lZ*+TO^b7!s%)(8-x3}k8KMY(O8Z9ooD_=xJmW|m!zPD%WyX2Vj525f{ z{wa3ERYn&aSzg*CB9h|z&JQH64j>p%#MmzQk1_aaxPt4x+t(e4az`%y{VP0l09*}- znP7bUk(XzZ_QWJh9bX^&OH1d#`nqr}0~LddU~~xI0IBc6>Q}%<);ukaFgth#4?yFw zQN{v<#MkEsqfaCt{rabE(iY|>_iB4jz5xoZg4=G?T zl)aFRJO;&xk7M^bIK=2A=`cr@vM0qe!J10YAUIBmrMWMEp%ENdyA95UI!yb+L0*|* z_OC1~kO{}|W_LM-u<)J7z`w&o+4gen+rk29(JYQRT{=^2-6$coO$H=#mDBj=5Pt`O zBl?`b#(OPtnq*E}xn&2AeJX7!vL^?Gk03^IaoyC)n5Yg7pN;I5yAm}+P4r33-#!d@CTfgUmqv%iELTNtkYs&7CIY}fNc?3 zH?mIoGen4&PplYIDc)4aBlL9s_46m$I9qatQi8fEsl9{4T%+q2$hhVZ!25#aJ+T^z zNy%c}{yOeYUc5>?JD2FLOOY z?mDwxHGa1vj_J2Df+5|6X5M=!_Xrv-%_O_Q2ss6BbTelWtkOP$0xRA zQgjBbQ1O`K$=)8X+>nUlb}*-y3TVZyRvj*%LnL%vUGYJZr0t~=>$84;uXJyoxE@FM zjyKK$5C8%4{Lu|?7vdJdZPRThZ4$&W5J>AtxdsU%W^>eMH)XMquUlel; zT+1GES@6mwv&7$)k*&Rs+Gi!gI)x-MgBPv9w2yPF;{e-yujhMfj*>T&W z-qkt&6Q=X#vg|N9sFj+V@@-1WVi*3K^`-ZJmkXR-U2D9>&Md_Ckhvp#8KtkaC4VI}F z#tHi!Vp?0e@vTKJ-P7U(*n7&2TBP#R@x6thK;g z9EgVLjX6HuodZrD;|#vu zGmWZ}`a9fSxRRpBRc7cJ6VbSbYwNV3gE<(Sl2qF|&65uxneI1EIeN_gH}1iKGl zCrh`rN}d5{aqq9bFX~(d`ue{nCqJVR$eZ85cCzQl`|xQwngZXfrok6!Hq(g`K0nc+ zxn|FMAV~Nk|FFwsW(z6FZwWt+eeT#4^(7@L@ewF&$|vr8oiP_-({gW{>-iW4vFTme zNg2q&u;s(1V`pdQv){)IV5p`8nxG5@taE9DV3}1u5k63O*>vpLxa;W z-jS(4bz^RcLw=E@D4NV0Tfytpd=Nba;!08WB+@a%6az!UFSZ4jjnOE?Q(WiZ_&0)) zXaf*gG2yyDGNRrP!Y@Z6muB_cqW?1*GB>@kPaLRemYE*HCWG42M2-`d@;do3&cNFH z*Igc8s!FVt=c>-NxO#3F#_fsFudGWd?d7mw>`^Balh#ET(4+YHCRKCBrXm$if$z~{m@MkpcB?OS>9LS9lS%LB;4NdJU^kz?p4RP z1-M$VOWE+gv8VF79tqip-35*C^;QdU$D{JT^fHO$yS{C&Jt@&TuFtj!FergZHLYMJ z`@-*H!ViYO1&+->$r1JPll6A2Rw{4P$9e*Z4x&3U`#2@BowP#!iDFKDJdO@q%=-0&LK zV#G9dk#YQ7SGFa!ytO4RP74Z_DJ4j00HivQmQ+a1!uE|A4h%G~TdOC0e-?Dq#1aWv z99w^;z(Lg*p`g*id`;zo8Cbyh2pC4{7 zGaW!Bb#mUvob|bpULI^*yOK%KIANXqDwXP925CIT48&@lislXdM6x&84SaEwf47~@ zAPz@Wkxg=Slz_u?RZB$;R%9=~5EQ(P3TqqUlRK1jxbD5N>;4Sg&mSZ}zt-2$o*g^1 zUARp@pnFe{0BY0geagF*qgb>$=-aI<*GfkGn@8cNR|^v7s1fpbNH^&@6q;}6{{Xa( zT}+^gg90avWeucwPclV|24CVK`CT3RUCp=O-tLOfuZ7qFr5XyY4dDD?rp;-f4afTT zrFT%XfIDt;W*VqZsge!remT1OaxOhrOKXNs>ojeyH4xgC@!MPKxj8!emoEw@)r==u zKs5nDNlOKa@t-T_JpRB2h=X30N1cJDpDf2xr`(%h* z_RWH${riH#&kLw@fEjrkzkeX9{EQML*dx|0z8B;SXZ$Kqo*PVnbFs6VVsm;yCBxm> zi4u;Ujuiip?C=rI;xQm*%*V(YyK`A8kny!&E|{AfhOD2l8&0653Y_kvZX=+Huh)JI z*%-8F{WD8|2kgE>< zwiQ)q&L`ZZ=rTC2)&H9Az0?yrZFT5<+@L+KlbrR7Rz)M_5GI5$BLLS2A}mHH*&=nD zn9B$yg~b0+bF(6U&g8tR;Pm6sLy*-d#*@z8)D?9w$GQ|=5v5oVw4EYGWIDx+z>9tQ zi&wRsGV=5D7`$Al-;d>S3+Pdg#3?ckAuJPEvMQKT{{G)Y(SAGu&&+{b7*Zf{b$(zu zl-b_?1UE0z7vzHrL2I7iGFeFb;aT_5Qk`U$FLWM@zkx$Fi7A2Q{_ivKPwmGpO8f>j z7DGGeKRef+SLGC~N1Y!EB>vhUf_rwh_ASkyyR4b4rBhgtssWo#{vf zmzFS^>6*bz3KEY}9c3RkMTy_S-}?KNh-6ppv!b!u=g0$4vO&G-;%V^_y+M&K`N*i@7^2Q9yubfTiZx|{+-Z=h{hv>=6 zn<{4JX-R0QP+wDOy?V^>1m5n@M#9ApsOBHZ?PbE5U4Ptm!!hLP?(%1 zj7?6_Bx+I%O)C~fJOgt)Z50ucB+T}-e1~2RlY>2%#`TgEA3nHXUkc+|Gk9VyMF&ybiwPeIX;p@O!gZh&SG)yz*OEJp7UJ->MTbcSD8rGzPPC9bHh874kpSt z{O^qW6pAjMu1B6)=noe=oF2WuvEhG@H^c9%z~Qc!30JPM3z)!b*F6o)g8Oq zq%gvl{rL83M5a15 z*v0+e2YMu}zZ{O6su?lw=}U$WoB{YLcW1#rZ~jG@h}aGNgx|k@S?CMz3vOo&@u5-d zpxlc1rA<>m}r^DaB8ZKcbLhyy4?V)~i}{Q7Hx=8)Ltc{Sq2AKh+sXIDO<$3Fzfn9S&8U ze8JrT!QLmmoAYFH8u-Do?arVM^EIFdIyMf&Eunq)1-e%2V;Zim~4Se4P@TX-z73v4z!Qw)eGa z4L1m?)J_x`w{n(gkjRmMrqtfSfyy;225dy)z>KnP{VO*b40Q|#F&{xcjTShfp^n)l4BB&6Qy2E<}^^Y!;Z)7d;~8pkl<7=36KR_;w8|P^4NAo+1hW zL2HX(Z2{q{90PS7#8|@|Xle}vFr&{k4#7Fo^Dp$l%UIzyKb=h|Ws|wle2~j1();Az zjQLl7nk#@rv+Z8PM|{OnyD1y-H;ACePDn`L>llbuVo3+C9e7F{D{7D+slO2&kK(j( zY{J4c@VZ(Qw5}q6Z{D0J1=hcS3wwKD@Fc$e3&jp~v3R=bf|D4M6b`#M%#cmV#mR~O zw9VNLUlT&6qe*B9HyvD@-~e}YBzUDp!IJny=nud~@;T8bjtQ3PKc=SigS-bHUcfOR zA})pR(-be@+>_#rMJ3mcO$kWK#781n5P7R-Q^cG*2qBl26g6A^!uQh~0W~{xoH`qs zk8mHvSn2~UGh?yU`2#ey)b}4K7vdfJPO4HnT{I$dgUVK^RcQ+h{3)n;5)+V#| zWmezz(yq9+qqw&q+5(D{cIPO_XPFa~FMg1a1I#h2@jVzuiAHP(!2m_aU~Qq=v!1p` zB+fg*vSDpiN$IMA>h<0y^;zHET%ns4ElT5HS4)A6)diR_@?1ueC0k3ts{+24s#2lU zZUlBGO6I4)&qkaNCjfTen4O&kTP*z{_l(6F2b%Ua-L~~>>FmEARF#kaov3wF<_Pg- zPe$yi7A=G+A=kNtle(R&{V}ju*DpF=!T$y#TdgF3b-Z@KFBL!f1$2A~+Ka+(^3~q( z@bGj=_in;GLh^VEWKUhq@FY{dGDvWBa^iz=MrlFxKj7UBkCiS7HYG;cBZ*!h&Y>N# z1yfZ3ZqaKgp$HNXvhx1$qE_}AM{YA8w^X{bi6B#KEQ`qbPy3MXB-H9WzP2mZ48ysL z(oSG!1dn46)Dw}f6Gexxz-Y=Hv6LI-1Vbuc`gawIEA#Acq~OFc7?Qb+Q*+=AA^hBoHFU#fuk{UeW5l&Z@bb zcoi~E5)u%VjA%r=(tuT&O5eU@iGCd#DBWol{-f(UNsPK!aAiBR-?Jzwg9r z!puusjBSqrg(wJFg*GG-6AALqjeGJ@s5@Sj@#Xs$;_kVc&Hn90mkh^N!}^@2GElfb zpOQ5n0s~3800@8+J=jjoRW>f?=NzYYomUa>x9G3sygWR!4G@y@r@pe%4VDA#hc#bA z*j{Sd7^8t=Q0He3RJ+KU;pA;=i>^}Vh-dD!7Bnz136=yY*Vyj}YIOFuKWm6e+?ywK z7V67`M$N+440y>flVZe<3Wr`*M+!pw;LD}*9OKJ_4Xac!1^Rjr#NM}2huFR|9$3rD zySPgMa5CPTJGp#u1a#L`MYdx*PNG`Mls^mwu=}#9aa&K1nyI5#FV@Mx{(wmoQYPk% z{g&4NW=n!4sD(2YZ}}eSaV&U%cdri|3DEP-C63rN^PKY8Z0@UW(}MAQ zXF&1%DVbc>%_|fZ`aucjZyX8~Xox8Vr)3uOZqjsLk(C2V!$mkYy)ERD#S<^K)rjIp z0#MJ-_R&OCb@JZr8l@3eXWV`W-1UemjhJ8D+uJ*ops#KN2Yrqg{GK}!j^o+ipkw^V zlfS(9dLQq!i|?tWWp0{X;Se&43!uk&n*zM1Y<7pKh6l!vi*zZ`s0|6QF|0xqYv)~1 znq3w4T5VlyoG)s2R)z|@9AVGFm^Nb(B|)6ff~zCo+OS0uV-9|ubIT5uucI#4;7GeO zmk!3a;$G`<;<0o>1n>jn)+jd4rrj;4wnN4#|j0o(qFj z%DN*=%0hE?ojo!}9+%(sUO_Q^SM${*;wLvV7Fau!oc*XM`xc0-2gis%9pFbSV!f!Z z6);@X6@f6~aaidUt*&@n7^Z*Wckgc`Zk*yqpM^u| zz00GRNeg3$m;=Tw?oU=sd4aGSw|5=mn4}5c+HeMZqo_6C1O91M|D;1@)=+9UtEPNr z6YTT%{d&WS%t!$4R;dumzt9QgZudUMf%g$MlWvtIRokuec(UuE^bbR`qllhZqCnEt z3(UDMmny5PDKXD`tAlOO6vqZHlZ{1H-Qbf0v6~yE_xBBR6qlYfc>aZjgj@JvUz6Mk zx1m*#r(dC<2W4k!n&mwMCZoz$36^bx1kHqs*93=sIt0@`;dcB69(5p@hz9w^e4TuP4SE32~H?CP6EX_x80_ z2`NGd(tQ~u!{nJ-hGx})KT};^s}VZIzBH* z#y*e0YE2a9Ox1a8hr%R{XT$yc&P#Z_4Da(M#B7-%G`1*O?T-!%!;t0A6*JL__=UE; zV3}tFkxM`b5Dgg$i+{$K?#!u6>@PXe9nmny3v4fI@xhN(xtwxx?BB zWK-7dZ!E986f+iK46j@OP|hv!oIf~L^fI@4pJ4K9FG^pP%5)4|!_|!1Han>7|Mk#0 zypFCu9UMgpzi_1+p`MgzVMbqT6=6UN)L#QaI`zFw6qCy&K$t%-bQS%SCe%w{Dg5hq zI5veX?d0yhB&zE1TETh)afqFS1i;{y8Gz5GQyiGluOwtTSdhE>V*R54&!$O;Pb$mc zzv!s1qkrSx(oCBVR`Bh;;e@MS+U`>DgMtBX-s`#+lgLF`kCm~_dkutGUtK4F_afuY zwDbc4pJ*|@I@93OS-$&7{pC4#ZvxZzJVhymlX#6ZIsM%jIwwesDFo=;6p&58#t{x(HO;o2p~Qr%Uarg$o-5xG_FkGO6h zcMew1z<|bkFY@%Slnk3wrgyCL9X0c=c8y#Sd99AmfEoh*P1=+#GmmMsVA*K**QfSb|T?pa-3wi%WoC>m`jp zhiv!)Z9Xi8KcS|arb^7?IKprSAB2#K8<@X# z&92n&G@mFvWY#t)wDWO0y?$-D-OpAp|Te!MSdc-yQ0{8bM z%f=bp-^FdK{jceto-M@x*i;!^U;GU!ScWiXjUxid|3qW9E^hfVR zZZynReGp<%6F6_ek$i&Cf#Uy?&u>7x0xEehC(G#+c(&O;keDv*6cBwitIzs#hSBJ= z@YqZz;cC9R3&s$Y-Znq+kdJUvpqYP`Emna~W^_3g>$`ZCH=fZ=nk(%>9O`Q;67Q?W z@d_py{pe078+;5a94-F6;+BlBbHcQ>!JjZ}9|n+iWAcr9l%sMgBJE)h4C6IJ21E50 z;Qj>?k<-ETP#L4kENvSwG~mC`qMP=W)e_$@)L40&{*g?A<*~068U@5|khC8*5LoIZ zyO)hZY_e$!4En(*JWd|Nr_l5kH{nz63j*j)&6rr`=p>7UC0kEnV35Qu&>bEqZ&^`9 zbB?&fG~Va7T^(1|xur3Vf=&M_Un(;uqz36tJ&}Y#`Rm;e`8jdT!v2WNN3XzYGF-5tc4UVO9B}xtRd6~_RuK)<9ibr zmV6Ws&G4u%BY|o_d;lfQLLIj)0F}Wl3>9>ZuB$p{@$jD7{k8z>dBR`%@q?;j=jdmu z;~k3?Ah?7kFe{PBt#?Py5i3kQw6t7UUneXsL@D*jNyao&ClCP5qIXkSL=c~P>$j@W z2=L45MlzqPT-NUNu@a?GUS|QL2By zMFvL+G<`s$TCIUbU$3R0r=4cSdsr-Dj#&u`Hj_GcqIQ0rrcT{;6VL-K0cr60U&4eo zK732uS4e~NJ;;@UCzAbUTE#l}ACj#Mcy z*AW+o!g=gB@Shs%#|gK9_Hl;adn)^^nbgO&eAxt*uskue>))^sbXX1oT|SmdU2SM4 zdO8nk*WnjXkdOY=HZgWQ5<vZd zX2o&k9(afU!ptZ@Z`D%YcI+8N5Qt8I`rQ_g$Ocm{j}6Q>+j9qbxXQpV0XI)05-j08 zc>Eh2t;tGe#LQT_lxbiH3NA^HWUVwg-vC7u4mkEu{B|$bhS)S;%$y5Miet^q7g&{{ zfdU%xd_Pcl6WiwfFUS+4s$W0#htD5Dk3Hu-=0w`8tR(Kl*Yf=?-IQQzH{4hV!{*jx zpw3O1L653*4mF8 znm5p2AVxma3_^GlU+0iTg&09?45KWl#`lM%NkqJbn|Y=iG@YN4etg3rrz=CS^174l zhN+8v^TNPWzl=rT+Fcf1-4-{%75$Of5`Rxeryq68sP{(R{6E=*k*mE$k(Vv@#Zzh} zdI1`r6{RJY*EkU(o5ML6#2}``$A(7i5bWq#)k3Ge!#*qHBx8|G&d2a$lgT%VGQ1x> zEUMz6W=2P=`qNtf#&EdfK#w}50XHI|*LvUZAOi&`3Y=a>)Qk6cf}O^30?u7o46p|+ zf|qjpq$vNw=#^eZ;=rtnR#*RIk0rYH8jx zg8I;SSlf6%_c41e3D2q}+Y{+2s@sj;9v-9LeLS1LCi?!a^5pjk4vhcaW;M4KAAs<2 z7CamTpRbI6{2&lE{?cptRJH6RH!YSAekg1iw=leNQ1>42eUbrE}}n0)FF9`5cIgW=bjcy(H_i2v(Em_nR;O|Ric-dzdW0rM?_l2N;$z&g9LJN=0qd1ty2VF zXS+{bjbTm}aGqz5n6v5mx+xKwEvUkKkD+%HFu=8}4SgQ(&jN6aE5+1}u$-mzG_Hkr zxXLM~8+%G+va4c~GN4g-z4r#T*4Lf7Eb<*6!FKTGKAR&*QUUAX%)w1g18`C#RlZqQ zP6Mn8pnBp)+l}q`Kt#t}m8CvKmpMKd0E1}HMwZ~0sFCM4@P#6 zyBHJmY&_<}??&~+VQquU@F(uVKI^cX@JkO3X%FVX+dM8e8tL9N`a_G5?Tc2kvqvkg zwU_>-eXe02++s@8?%7JtnU4Y7zn-HFG%v6vPj(znE7Hc8m1aeIHpeS|%jcAWIx7{7 z`@qFa0%};PC(X9b4@N3};>6x;_A3Mgz-r1Ls4n4Leh>q|-vv_B z6q0Xp;L5kckx6G)2{wweQ)k{{-)0h4$>EWT1ci_QseS@z2&BLLs7TMVA;bh#ICS~S z1#rLeHtYewj6V#Be}3HK%CQ8?Gn5vM+va?fI(5_rKrxEHLtVM^d#5A)$dGlv#^r32e)=K~#O1IT^oOthp#aC3oJmJaVI;H?8C z$7keOaC7k+D}9~(0SJ@k&tOrxFZ+k;s__Pl6CiQLgy%j*$7jK}HsU=LNsHAd+Q{4m zMmWUvN6oO&;Wk8YVK8MARB7P@D+8$I#g4!TYkM>LR2i7v#|J`%``hO>hLVb|iM+9l z6W8VpZDS^S{Lc6lrbb_ki)HktMDII+7`0F50RAACVn!Ah_+SF0XC7H2uCCW=%geE5 z!iflifF0$tGx~_)vTWBuLu6@S21MXOR|s5ue~>R@59qA}Ta~6AK7!1@9XZq*DiHZ>J4HN zZw(U2g0KnYfI5|P$XtWuTN@t{JYG!?OG-;MD*kZh!Y)I7u%q1cF~NMBfwI&G^roiu zX747<8TNHYDBzawcl2~}Dygk4T*dUsDRs^b66VHbEQ^3}P*{`Jq~>4>|M z#t+ND@IEaqZYUjw4cb=%=v4+_JRp6;Dsj*)xCam?Xs(i6G?lOO@Bpx_6M8R~#7JpQ zG^kuBf{um;LS7uP#)Th%>Knt=7{ z+N78Xb1D%JHYvy3M&;QwP6g|L$6@(Bzu*#0Dm69&A&2V@36?;~aJbHMqYZDcQ3zl} zox%qP1|}{nnamV1LJ{V1LmSB}wLX-?l;LIJ7$0n!AK^G28S=>V$CJpFLWJ*bZg?`S;6a9T;f!Zo>JD!gnJY3fJZ{vpMQL-It2=x)CQh zLQ!R|SipDbJrCftaTtR4ZofBO(8Qtn#Eth?Wy>*qvrqYVvmv&;t*x!-6H%Jb^ReE)kn}_OoKD#l_E4jd>tlBrlrI|!{%WZis}QG~n#)|R ziI@DoS26S$Ze3=j+KHe-xs<%9oU3_W7UwwwxR>^$XW^PDdc$Uop-$4;cs$k!N^m(c z^}z*+mQY|xLhPA3$H69*jX}aT#N~mvE>L(Zh(4Y-Q^1mbo*aOvP0enAVSk@rCN~<` zHIR+YX_Bc4p=vOEe??>ZRsVA|t&WcoR&Zk12N$`{ZHz{{80Ml?W6{8x@^Vr+B5xFg zHKiPHye0kd64xg*Em9}D4h0NGd}CUa=!F8ndClr^TavEIbO-_ErA|aIEL?8leHU}c z-!EGjA@I1nzcTj@^H(e$f$ii2x*CAD;xs{t9;Mc%eejWuk4Mw<3<0F@#gficaA&0B zJw5b0T?4_kH|?WCZDmvNMqP*TZaP6ZVx#w(@J1YoD~J1BX#E$qb`$7X(OQkKX-1;Q zKzwKq4p;+9sErG=K(r*kh{(kk)Ni3K8YIP%sV&fay5Le}AltUYrD$mc636N7MGs?|cF=*=-j0rp zLqZKw?{efqfrLKnjEAZ#Z-YJb?JrWf((3A06c0sJ62u^e(r-vj3KC@+gOel5Tq6ZG< z_WF$M-#@}V3J2d#q40n&%-i8|H^EJ*I{dAR{)hGVZh?bc!qnR&%)bJqapW!wz}YDF zcDlt}{*Q@S-KD8rO7sd<=0&j<0}S&DxkzsMn@_)2T)!%^Nf2(Sozs1U6nxpdD*CncNX`!&4HEF(bbnHvUSuDpsD(XCVP}-vOa6^}r}V`P zsv+yzofLd~`!Qn^6JC=L`<3C55y;LgO)b(OR?paWw^1&D9Jagy(-&9=)3q)pjGd9* z!@Hl#di{CI?Wr^9>99FnfV>Uj*FR#8C2(NdHIMv$=ImBFLOEilHiviP+zqBrBF}_) zbvFY8v3$hO@m`KK183!KiN_+d0$MyH?POCLB;e#%Qu5rgGU|BiMx!sYQh>YfoR#Td z^~Eo62orgp+Z0%zd#->zJ{Vs3R95^MA<#(T`AOn6MXyc_00}Vtdw6JLef`HcP`Qe# z5L+|?n`DF-N}KCvYyo^jMssia)T)Q!G&`~}mtV5Jyx7hM)}~8u{L!fUO#Acw24pZmjSWG?;7;x!qK8GlN9hDD9h;?knILbG!x(eWl|7WdiOE?f*N zAHBU`8fxv3uLZaWh*ZuwO?l?}=KYXd=7xoG1ACaXfur!Mt87%u;D@!x zd2D(Kf8;di{~pnZ=AQm>YaCF+YauMW=T%Q@;hodhf%>YK5>d{4P)6}Y&n6`yF;9f* zGXD}oFhGK@=JYBzDCv9SH*NJ37%63$ldHP6+S%lBRadz|~(ifIfbo!EJG#+D+~L37(n{`JS)qEZ$7x z$OV1XjSp4#7o(Ghs@I>RsPM7%<}T}+if2w@aNtlKJMCI0x}J>N(- zs(4;uy6JMQKR(TTFITHN?CxCt^4LCi8H^uc>QMOR)qbtZWf+{}x4=K?6s`!l5X7;PF3Nzey15_u~GVh4!SGUp|vIR4NSh4PKp3og4LU{N5RDh7@m)`(F~<@zV^J<lWo$h(2X5cj##3u(ygbXi@*Z?Tky7&FE9yx97 ztxs(4M(>i;1Z{|D(z=mb7@LVcP*&}T1QVWm=ac@~)^HOO-Dyu7=LfqO7baF`;s7c? z*y3PhTU~s};*tBN8t#RG8`y^9y9JV{obt890b6&wp0{+>d>FAe_J57uxJC4m4zyHs zZju3|y1wOby|vG@VUEPxTso?H!g^CsMYZ~9C@{VCkToQJCj0X!&GoUcaQVFTjEB>)Pxp+vbn5=AAN{^1oSNr%&Qv=r zj8FQ$f1pUgna>CQ8AbLySd1*P>8AfH_8p8j#Q*X5ID>`$Gj!Ra=h^H<;&^~Gbr4`8 zh9>|qoJVzz#HvS9;E6p`uOcr4skg(9 zBQEz+1UKyP9ecz_gxsL6SZwNOCi3yxYGF@n_|H9)6By8$t=S?(Q^7U(ov7rWsl6m* z^xh1XI$3zrYXXHiK46AcrW^*;Md$c8)Lp?RgwJo~IX60c8p;v(1!e~2-NzY zS>FFzxc{dgF@Fi1XHo`2v#Z82JKOIf;Gd=bvzcU@6qqRS5D$>&ciz#6Lu^2-ke6e) zyn#fi6k|hsALwQ@~o3jxJN=|5PL6LoT z1tYY3%Thc2bQWG)^CCyq!Q1HUOLicG({l_wOrJwT4vrt9R~ouDz4<7h{Q(VCbrD2t z8jZx`@$ad|!077Jn0+<)fAQh7Gy%8RM6M_b;Rx$%kR({fH%=h-9N~vLA&9dn#1G^S zKIB_^D&DY$u7uPK{hu}94Cum#NQ)3xj%fhTk)UaSKkj|WSo8o2WZN}p zh)Co)km0u6M5)4Kn57@Pd~#9jO2|P5Z@(1(9TAJA(596-f1b%0a85gsa***-iIC;Oj4d#A^zb2 zJ`QN~iYBVojV&QjwTsjD_1xSXH=3rsZ;iB_U%9I860+n*ci~(mXm=8YsTz|b1xD=z zv?-7@ET^$`c+9MXz;tR20b%-vhF4?b99RIGb*4$Y`e9_1j?aiS5l;&+LAUTJMu4+a zvO>0sArK%sprch8)`~)gVW%y9f7Rqv9F4LnTlSzG1QIHtga!#EvB4tXqG8$APo4~X zo3y+$sG_Dpa&YH)zhH)UloHFdsH#3TbusySwbKgrP~2usO`H}dQJU-vAX3ZKLSi0d z80IdgrKKGqoD|OR&kG|V9v9~xdi2O}0QYnqvT^37=clwdw&5tB8+|YmuP?SeVUx}t z3W5`3tDHXA0S6Z0J)psIb8{O?(r1VsNFt7zbMMW56OIR>k;7w2WeQ$9v`K01O1B&Zhh1yI(Cl}kc3=_73b5>zwjA|4rW9rrzddL_SOlFqUZRZqoFfoAYg8x$#wxCxLj!I%*0Y(mTJI+@?{NZK7^PIPVR01aWVr5w z(7F;VwL^h;-pseg%!H9xgVSYqw)$$-5FHww>z`ymF36Dq7n?p^Rph9 zj?uZ1(yGKsNwk$p=%s_6w3sdT7<@NKb=PqzYt>_^+30=d={Bz&R7T8!-+YIf)mVkK z%{-{FmoruluJgHO=j#-uibC+hvhgUmaW_*F7}|IbpB{sZzfFG|=s9tkQ04A@goiSK zUMU85asrN*C)z0u=*f$go06Xg)$#|LenZMnxIBz=|Cw*k2_Q4DC|hiR(HPhX3;`f# zuhS{y$jwx<80VfdFO^?W&Pk&p^J)Myc|XLt$ZF7PCIod24nLSJ;UE!Y-9p8y}&48cem+jc@pYMddaZX5uH`?i`j=IN<}^!MI%5XE>$XYYqITO6f{DL@lVq<7F#jBHHnCb9&q8;E&H%n4uO6b z+=_tF)r`TNDF0rdwm*=%oxRB>B|Eu@zfGv#kD|=L=g^JU1fxyVkeIhXbNc!NVvG9& zA{P{_MQ9_3Jp3^Cx8~>X$YgFj_lBIBv@~FEjf7DVVoGN$0#li#E0XV>WEaWcOQ$QY zkkCbq0F4F)2A&67Hr;YuS1KF* zH*MuWQ+KEnY*ya!2VkuHE`1C1ytXp#mOmE9%lT{_C_6VdIJuUyxK&f;L}Ptx5AG^D zt{3wrnw-zYhNg0g<2{PyymA5Xh2azdLon5hIZ>Ea($I|8dnLXo{MUlm{On2|ft7!x zKWr`d7Mr-`qmmN~hBBqSI#*@nIcz2hISq@k3P}`yz2Cy$cl_l^{I9j4vVcfu`9;5a zJRZ+YN$)*EKjq^JZ+^s91+5(dj~&!N8*FV={Zev6&I{*$G^~jr!l-cnan4%4Ezf!o zdD^Ich>PK$BveYs8HO?6<8nTlO!3B>PR~I!^8Lbo!dE(|2^y#T{?4{8FLPWNQL2>n zh^oe8!yb_mYTyY!jo0i~H{sZZeFw9`k`lrohLzteO?zr2a_rtsD&hVFe>KWRKiEmD zOSz7|O+PM+L1+Q}w3mqorX9THYL`V`711@89Ka2;a6W?-+xQ-kxZizpECa4szO zA~N(G(dYlHlLvmC&Cjr3E`*p+D^=J#+S$QDN-t&qQWG|+G6z%K``%RXh!Hl+9GX3x_H%mKV|BT*nE>W(NmpCsDy5pW)h*Y>gL~E&2%{ve8WlRg*d<*)DBs z&Ee$;z3}&~Z$Tyj+^kSqnNl>k|IK!BxMB1rNpEaV@tMXIRw7sG7vXo!2!qi}3rTT> z1Is|;QJU+IUoL%05#&t6lqQVL`~tX683(oA^qLa>0q35s!ek8?JobIzQ}5uKtEI5~ z$Q}x=PUC}Z%PCKTSHP`k@cJu_+{0^rW=n@K`vhZPSL4)M91o!a6unC>DV_)W$se>z zkxYz?*|x9!Me22lvlZnjN7X6Y>JWFF@SqR!?Aj5R!f@dO&@DAVde)btP*_;Fr**omQU6LT*=VHIQhoHRH1;qAG>t(!z2CyWTiaKm zAM_IjP5823C3EAz?F78Y;ZI`3_yt3-C+e@&Q)6SC?23I6kiX&bRVeTjG+)Upz|PYQ zFu#*^d%+5;S;OZQ?IPO3Twsm-eU39hSN$ugvs~?hM1hVkR_Us2I00~rfB|hWGLI zNKye55!>6Y_eMX)$&@f)@R}yQ6O91k8cq8?1QrrzgL(~iSEdN$Riu46Bwqg83Fcao zrB6I8Z*ezOZ4s|}W{j-u@=xe4KqjGZ1F>8m%zVC*XycMk_V>pKhPL5PLNhnsL397v za+%=Gh_dSHeSn)GwpKPm7yJA6rtdOSo6;Aa-=%%t*SbX-T39}g*c~>!$t#fjlc_bq zbiBd#co2fWzu{B+t(e~MT&peOf>Ys|yCvN=HyYur?JvHe9y)nPkXQ`gz9GdT=7YcC zuJ{@x;qpvjcO%WxQy7Jh0>IU5*9X6Hr=nh?i&|l*{u9aPx~DK%1xG>(>&u|`kdPRB zq|$N;9zGx|4!Bvf!TyRQ!Ej8ueoHp2vnDG|4@`q#l*Qc{g@ z_fv)Q?FdleuO4$Q9}oC_0}Y!*FPbROer!Rpv*I`Sa`^mwq@|#i!hA2i(mO*iruw$` zq@8ehRy8=H0|Bv3cqEZY@kYh6XwQg=-*rE#nWrgv8YJ;-O~YJL=z{+CyN3gBPMANU z_!W~Z^@~;!Hsi4a6IPcm0GR`VU~`DyaxjZ)I=Hn$mo+DtN0S(69mQKeY+I4%*iNCK zB2_=YTrg_a<;(V4Zc(%cXuSMylCvbLYDhw+UE*Iq1M!k5W;*^?;cgT`^#h**3REW(h#}v3?w7>P1C+ZFs_nM&#RD-rNxYZ#@|i0~nYKZ|Fkw00=tXO18l)D#Vv97xba{TlG~{>=V`Cpcp{^*~03h zj;*G@qK6xK#ysAd`W7i~@sW<)xtgwt`k^Yz1^(}Gnh|py5_nT43&lBaE`d}OzYacj zQN@a>-SXqT-qQm|G|Ja=l`Sy|`__8Kc1Q!=&yc3ZF~6L+nsJjE%|SKO+)BzW?zPZnXc5 zyK^Ug&z%|Wj@gTe>F2V!dNi>N?-LVgo7p~LWUOJ;n^O@qL@aUBScr&LD_?~y9himh zlI|WNj<}80zqE{O+hG<6n8TrC9Gsygp1~nF1o90TAt7JZPQeiO1l?wtA7B+CG&%A* zS8vP-_iaqDh6vFEb3b2D(YO9^WUTp_biL6*Z_cOnc(2%ZYrs$nd0R*1{f=qAp-xaVw*T<=Kd@TJ%36i^i~O^$efa;8ui)Qr`XE4}H(wvF^vVOR z1PZz#$6!f9@{@adrYR;jLbE}VjHio6afgDcv*Ah13X~^ueS)^&!pYnjx7+Fl{E8Un zw&sn#g@2rJw+qkrOpZ;Wp}-$&79Z!-=9yRz1)fn6I#ZYKWrc(Uq-~JQ0Hf}uisQX5Gvz_hH@1M5UP&^sQ@Md zd&_;n-c7_6FM3twANl9XwkM?8k;!X(0>$Xlr_36$t2ITd&&01C*9Jk?E2>bT7FaFvVa64z`g8c!UxfIzMkD^3xRK@k=08gF*@cvVfcL1s{0c z3LO#9Am4qbuK$Vzv&m4~xbGr}ZMe~04C*O)&NOe*(+eDf{Q&bT&%+slg7oe0U{ear z^F?V;nFpjQSKYbQ3(Z{B4&(;G=w=Q)7cfU2FOU<7QS;ZOs28SLj&8YT!T1iEQW&Y< zkqGlz1SS`r{)v8ivg6bIyqC>mj(VDiP0TTx$p6 zz?nlUMdzl(h%4l7;_CuPnT<1Z;3dWCd6AGK9s_PlPTS^d?b4SwS4WDGQK-{X&DtrD zaMZb%qEP*h%V$O9`vBsI-rlAl)~F;(0wptj5@g-bTuLB#d$0HoNWip}v(j+Nr&h-N zOEu;YXi`2$BVyk<60lpElbxMsDS7YwdQiW>SB{vB(KC+IvUfAAgYxGM2A%TaB@mASopg!1sUYgJ;Uf}3 z3fH;?j5}U?5EYp3W@E#F-?F{EogzO1kOtV29mJfOCUn`>6nSm_R6(QE6C-%eZQSPT zX^f*n9B!XzkbnZm!QoGHGf^D6GlYRmKP)O3VbmNplm`H(x3CGa# zQ}3x$VDOwO-3KaV-&Q@e^!ch%8j7#%$EtX{q=h`KrQFv+B*lUjIIeZ3nagn zkCA>r#)UIuN^snutO2U(NR?mT$9flX7XkEX0pz+HP(mjGk-Lulk7I?+^mP^#mW(pN zQhv5AoSMD76oDSJIpQrTFI|NqDC9XT0Gm9<4{kJ}UGawx?>2WTmwwsnC)kf!f96=# z{pkZN-ET$Z1Is0myX`m=@$tf(+JN!`X0kFw(RA0wU!(|BU0dIHz|A4PT(irW294?$ z{1}#ft$lgh^F`C`Y@@LXg&b(g<9@csJCVfCxiU2=>Ot{o@dq(shIRpZQ~dBw{wgZY zN&Y)&eQ(A$>rO$HS%nzOHaCMi=rCwL6UrFaq#eL_VZLFY7yDA(x?j%BCz6*cv!W4; z9*|@~=Qy6Fxo<@2e%RnhQaq@&aaS2&Y#Npxz3yF~c4wmzpZ$#mXsG_e{gT~aSd6D6WjJVzUPqKR5XExk624!4!}v+qOiS#N zcc>{2XWh;6J=t%Qw|K^af5?4kU}#udLKZDan6c=y*)4KFe3SyW z6#34z@1vtlA)XW>)Oa9@$sgDU1oU!xrItRTYog~I%517=pPVorGL*wk71<8d^mcO} z<}yI6q&zn6oWx02Z+qz!PhaO!ND@tOs5H!IR7od~?R*m-n?2N`0W?TE;aFx!!M(P3 zIl(f}w5qD=`|36s85uVktZBvpb(om=Nb~A@kaZ6LndSnWV7-wU|+aZ4SG=|ZVJ zb-nywwt#0=Po(4<)*wbJD}ZF=IW0zxP_c$LFzUcQ@sb13B3)O9VIwxEP;PV~tW5C! zf8oT1FDn=<-2V*@+h?lpvjrbdTY~Ee2wuTG2SAh%69MtW2FVzRDF8MO+k@OTiAgvJ z;b=d&WbIT$@F1_@fhY@;?_D~Zc4r5;%TVXWtvxeeAEL#AV^4MBKgEh0!gtn~MT?VtPJx~Ye-01U5QG(Gh3sh@B# z|6bCS&?}HaC8I-$rb2UZS!v|gK#>Hzu6i)K6^$Tzvg3J+^0A>~@=>A5@%uWr9NU@? zziN1X^fS>bya$Es+j9hcb{_P9;Ny!)38WcXo`1<1n6i}r@ssNI0RE#8`RN6#Q=rJY zFs))eTB&RGEgKc&!8ZR^1=b0yO8v`E;b4d9MnQ}Eiu^2i#k`rqyBbEF<(sjn`RD$q z4ITKWNc7$WJV;!eGaspnJ3fC-our%E<^LJ034vOjZ<`>qPRMFSb>Jy@ecXRmxQTPV zg|~3?ZvvDR3d1h1O?2G+!a}o?VAqL>6(lbzrR$2Cr^6@;uoWCK-DZ#o7#O@is#){^ zD;_{pUPEL6%S)chS^1`@MGp{l$X#>IScJ1DNw5|by$?G|P)h#h6?`_<)g=xEY8xLs zJ!3IfvP=U#Ui0_WJqkHQ0h-CYmt`{}fuQbQS6a%zfn@q^YzRaslJ#_VLuRO<v{SEWpf8d;tL5g$G(1` zCq9`3OgQW)EON{920l$I(TieyGzzLvFtPdIvn`?aBMLnfP}J9tPhINPo%A@QwyPy0 zo(Yo7i6p4eV1nPm#~m3sxwf18-iY{qkw)S*;Bw6>F8nwFAm=67G@RiXB>9~~lfR#V zTUXzSQ839${OP-*#D=N(>n#hXP)T_5efVTN1#AFqhdXP(9!SQ@v-9L~#><8jYDz@9 zTs7kC4{x+u7d{&oQp(Pn?}?aqAC#`HzITya zVlJo~M|}XZL+`t7%Ac*DSj%K1Deu=8(JBjnH5O=BFG{pDupVOyu-B(Zplj^1Xbz}S zg>-J`A9ocGeoBfmT@2i^Dn9BOlOYeGG0b-h_&DAyh_{?0 zT%hl=aC>&agigD5;EPz5`<8)@e?iIH*8n}fi-y5CUH>mHV=wDnV`F2Fw<}}y5#c$v znI2VNd#h330IdhbuZiz69y}ucL>*f#gKMIHNs6_4Df0$oNP9pjG;cfnLOxZ$&)6iD}MCpsPHlKyt)r^^*RW3mk&;FlBt%j|N<@&B?(UNAMnVzk zk`yGQ5s*|mq)TFx(o&L2OT*mTbKY4KYu3E8X8s)hJLks&dG_AVbAPY-BkF0(t4V z%mr#bxE50KI`0k<&+^lzx@3QN2BjyEAF5t3M9xPiVMd zWmH;$L$ky1i#;?1%ZCFWkCepI(2MWklk5MLPc-3J_J5_6z?=Pl_U!)b-?EMVzxxf`F18BN;%cGMQb_s4&v6p{Ufm+AdKu4sJmvdUyboZS z4d9s*uT%#(;dgC(ymCK~cS_jDJq?|juYgT>`JqptNXSNIi&7@H)?CYJRXUtwCZUhLPzpKPhGE{uQ03-9{-ewTb zoaRjQ)rORC<6#{9*uyILc^!tYL)He5jp%8)wwjGYm&ZEE{=c|Fa4r8Q1*-oCm;Jv# zbfi9M_2hQVrmP&1ej?B@+4zKHV(Fnns8nvM`z_3tS!?ya9&pwG)cm_qOiCyQrKa9o zZ{C3c*6V>)XOx+TbZonm&q8$tt88q}FO7asU1*nfR;oulo=Q_dR8X#x!8c-&pSR=- zCVQbr$z>gveWV9$4dBc2uI}Z46+A-{Km4)tX!#HyQWE=5T9H9-<3PJ%<^&HJp{sM3 z{~@iQk=~ndd)b)2S+^%)b`9>d9Sj>#iU(Q&YCQcGI1=#@AiJ_YzzRr&0n&aJpY?01;J?%0e5Y zqb9%)LRfc#d{OeLD`fPMxIT3+?HAfFrg=-uwD%6yM+{0WilfQRfJDI9*S87O#!|u%$%g1z=|o(;uHgeLvFWPAo1s~ZXaO*K zOjm_x#fSMopg?v>ZNs{O;B+Q}=&JWHCWqD0>r$62rzc)|z z%UvfPtDg$rK9i((&`t~t+54-U8*t5+Csz&5A31lIpXv6msa(&yi{c3;?z8Fx*j-g zicbBqSqFATDk^N$H_$f#T5w+lAP12m(#!NDdUPRCttP0y-nLzS5kc$-PeaP2@&NH) zC7ZvzqQ0R%#+g6zaCbLr&PFf}?n@(X=o?E$2}UhByX(=G3l4TI?Ly=tB9dO(WHjAe zI|%=NZu}BIK0)FFbH~bR-NV1(8#UmjH%|_Xa`u8wam@Xpirr6x?bXA28Cyt`HZ0(g z^PzKJ1$c4~zP;ooTMu>ksw2r6h`kwzObz7(a9p5Hs20WV`NDva3&?6_BvwcnZTa^sbRZ^Dx~QK~B*fE=(_khvZY z#SOs8nXlzp#ZbaX&ij8)|(WjC&7~-i|?02w{Q>b0IiG>!WK|7XEG)Tz76TO(_T0=k<#b(6j@_|X@$bbU!W%U= zp7-m8h1-$Too0RcU8v6rAwM*%owZkFE&zsT3Rf{y3S7nah3s;1xz^A2S_D9&Vh=Dd zU~DbfRA6?ssh(E(^|t0S6}>7aruWHn()`KpXm@dJ#yCxqluTeG&jPO^)GFzPi*>Ik)l>-x7F z_ZV@M+3EJO(yNagEdKJ95!bv4vhUGORQo2iw)N=a=i?|2o8akij!Z3o_pjs)?ws;Y zHQa$N`kKto;>XF9O0~qi!6wwa$~oNi+@T7f?Nmu*$<4jRwJI2oZP5wi=*wB5u~t_L zc+d;K`acw4GW*XWji_)o1zgT3VJ7XwenT&6^2*0Asn;cVDbcY5zBy5R!ho}Knk(}G z$ysY%4UjGs6ng7R2015I6Yv%wCU8sSUcM|9rR1P{adSn*9t7-6ngO+f5%4UEkS7w1 zSnNrZ4R)<-rh!~Mwa0B7;KBj*-I*@iA)rYdN4$Ce{%ce^_%`s}-*RC*ADbv=l}%|P zKPX3kb}9x)*(gamSJ7HP1kO!BCn~+P5}FpF1eojUc?S1WHcl~b`sETT7+uKIdo(tQ zG?q~H$i}vNhGm6@m47AYvu_wXp`kr3fTKq;6yfZ02t;j&)Ldp@@&!E08d)EW;Afj{ zjqHaTa-#((`o{2>aI)ubJvlTU-Cs*6NZ8CC%q$FR>_8y!>cW>Q#7l@@isXmxY3^77 z<0=tZ4(G&Q_X?H+^m2-JDS2yU0-t;^=rW9r-onFh8kWwdrT!P2$li!In2Ce0?55$Z z*#Ck+U6=7y!DEB1Ts>0_`!0jaKhP$Ki_*!_CxZLYd9Lbr61yQByNrLAf#PZ?WYFaV zuj>+jBAG*%lUX!L4u+VZoB&)3jsvOk=-P)J70*v6)a0;gzr zf1$pSEQbciUf=e~h3#R%K zxIMGN?YZ8#fgSNt)4DKnCL$2!u$ICWg%h3Y?n<$WuRJX3krs>_q><=t-+Yqja-!qj z6(#2ViYpB2Tq@^O&|0yEfG?`t@Mi7<{o#--^IPkI5oX;ypF9+x;=Y`bc7Kl-&(k#O znvac(3jt3L7X!iCe5?Gz*(I__1B^HeA<)JLPnf>?GQ0X0merUxO9@D;4%!3UPSk`ziZ}+=SANaZC@p{_gDq^QD3~=Xq$03NWo`;#j!KSmx93Ku94y6LX(gJ+ z-%l`9f$a`t=EVfh!L9~nLF3VAAL9Ys{$qMtb=6lfhdtp^P-Mvk%Rb9rlREmEp%flI z8R8@BAW1^m^zXS^7jS|KJ6O2t*)$Qw5t-zXwpU_sWITJ zKR7fYl73={M{1j2c%|fZv(P=z_j0=vEcVpKCPFqsg(f#1t1*aT6$&?|Y}Ec%Ia1ud zS=-ZYB*PS#eXPnnY%cX&aASo-`x}IR1QL0ycK= ze1x{Mx`Ne?$;o8AY#DY--%KoFgQmK4VSjt>;mgy_(tW|CYhynMAL{%1&g_Ng*iAQi z?Z1!@=%drNwY5$C2Ue6n4Vy#IVYR{LgHBq7_S049jc|}LIIx}$iV@p)IZ+AwQJ}nz zzm|9uyLvJ=H^<$t$iaEtL4~&N26E6~(57xoCcS)P8!6xq%S8PVwXx$b&fi>OeylGq zqs%rSPULkyt-IusHTJKca{P)BWBDU|v98!@-M!G0x+C+6wJ$7d=!1zLbaTVwOhS2W zDVHg?a|!Cq65_^4@p7rto~8(0-8Y_hw5 zwmyzCYiLVBVabJNV)p$E!}r4AtuB}xUloQ@0Sz6AI$I#h>PLSE29cHaIH=}}izX)q z=}q?^R}Eraj1B#E=M;H`6z6LTmeo!4QY8$GFl4(OIuvLHcuJdwYH}A@b71b zb{fD4z^LbvcWEt7eYp2xxA+^4tZXV7+_`E()y8JQvxf}Uk#d+@Sy`!+ZbKpCuV3*h zjF@pBc9)lzx3=V7;6RHLTT*c?QvItub;X#=5qIT*t(}Lob^akrA`5m7g7?Fyh7$Kiw~x%D{=f?bel=Hi_ApTaPjGr+wLm6XsUtXAE5uJ; zO~V!-R>I&wWTQd2POcSxwlG+M_(i8vL@(_ZbJ*r0k?T!0HOCucEWWmn(hh1vve0hQ z8J|GsD3p*K7On&4+oOaP@C!}bIH)(#6CyW(a*oZsHS|Bc0AwdR^gq_Vf8yir$RJUJ z2^czV;&sfNa3@5z*^$)z0d_8Q$%U0L*79+B-?-cR{0m|xCmO9mqZ(KP)L zV+>#+gweVrH34^9n@MUU{PUfJi*in?Km)7jGjEkQE>ITgki=_WxN(k)r+)`-CugzM zrQ2s*a@?Kf9akAoUj|j|K)KDtg#N_r{CqVl<{boQNRdG42oS_!K_QuuPDsA=G!k8c zGwVC-@y`rU4McZ^O-Kg!aj_V4^D@|yOM-gC9FMd z2B1_BdIdlkEFlF4m-svLdMi=rCh^bVwVQB53{d=bMqIq)Ah87mefbd-g{9=FL@AYI zk7Rqu%|=k&2M;;C&3$dwtz$Ib2$5tSkfK8J&L57$D}MJ2U2Vv3`Wp9^fCdemLKu3bld zJw3g4wKQ z7|P^~j4prNoj_wof*@Inw;0mvhTd0~7rkY#ONb(VeT8WZemTO@OdNS#|NOZeygFAj zzbOl-tun`dCG2o|!wfbTO&EYo{hyiIZ1!eYy0QE10vH_6vs&jfSTf*ox8cso=Voe_my%s%tFC()rl!E03#plQ zqSzpWCB5%2w>a+)rh$(K_hZzubFt#dce$vq%2}>bfG8 zpbPjCvO9fNO=b1s@|t*0cP`;9#&M7mzqmk8K~3HFsqP zNA{tXHWHJV-j7=9eTiGT1uP&@e~g|Jkrsh%4ca;`gU*6jy5fc}2kC<(ub}Gn2|a73&%*i(d4 z08|ovp_^>%TXY?p;V|^`ysY{3<=#ivQ*LO?HC-%+4^l6~%~PYu)2PlR&Zb^L@&M(!pqI zIi`M1rHi9Mn(@?sf0jb}J`2qNSevV3p({%OAIi_`p`#m$@Y#tS(DoW38w_NpOx0F(oK zeU3SjheUF71gRqr&iX5Cp(0_X5FpVSMTcNGRjibH+6D9^Vnd(TZ4ju&|J_zy3YnNN!L$`B!zL-eEnI z16YNsdhtfc_+8Kuy7bki?B#}Ll{1C~+#8aeKj5{LwB|Iay(G$6g%?cn(RJD^mXG$u zI;TG_R{bxk&9(odk9L3e?Jhsq{yWc@Thdm#v(Q%|=Ww4U=?>K!NX^6!iX{b0PpGe; zb(&l1Hr3Tx+lpsgU>=&rId__`Nkw||`qI>Kl26*7dl_3F>eKaiJ0``&(@WQ~9CI`D zGdTMA_;`DVQTkT1Ed?5J=UI&dQ5{aA7D1Q8jn%j51kM#7jq|P1rJgip(1&vWVxGt2 z61XRzujx+5H?AhLpfZsmEJsFh`N&Kt zkJXT(Y&N3Cu|eR1#nP_bcx=u4boT$`M64HjeH0u4Que!rHh&IO5s*xp=dYf>`Nk~| zD#;7&`mHax2oQ1%y=<)&K;=GQgFAp=@i!@yn|GYG2xzl#x+41&u7Pb15p14H%k2MmKG6SnGW$~r<#>Q|#?yy3(aWov_UPK-_N~yJK)77hzA80GdQUJqi&1{W zN&^Ot-u|Y~S&Xst@66-`*hCGJ*BT!S3VyHHs!+{TTc@hsNhW|oOq5PhL6tqh=AEd2 zmPe-feCb%|u!@`NjZ}0o$u}H19*5a}E1iUYZqJI98kVNi1NULO(vJhn9M{}Hq!-Sh z2khw3G+(>Ke+*(Q!ZJ{^ezUI8V9-tfgw{Y)Iu<(4Hz8Y>umY;oakRO%ryI16Lv!5R zKgE6N?UeObc-Yy20G7oFTl+Ss!=7szQUBEe$t-QXX96l%F6($xs8 zW3$lhv!&f*_>?7(qqpq<1`AR|xtn!~=Ihk=rB#w&{)Mr#;rH*~AZvjc92FA>8#@9l zBYG2G?Lg1~~*&gahlav@a4W++lnM)vQ>MEYg}+-7AgUqYDC*P#{tvig zxt<;n{8zf1KWgI;$A%UeNVfn24%B%*K1e$`^2^1xBTJNG>06|_pCX-;=m+53Zt8dT z;>hx*yUorSyIEII(^r9|{CfKgPCXU#ptG;mrXy%l==->OJV}*v&BWR`W+o@!MMKf# zFs{`0cMk!f5c7cKqlI)^?L;$m*}Wk^+F)Im$XTP z-RhZML6scl1VwRH9*2Vs>!hOdkTVDmlV7O61qAq9>s{)0QFgVya#OLqcUd3kJ zKfmfadAtYI5WuS0(}CtEr-6J_Ze_R%X> zxqPlSp|7v6p4+XLc6&AMh6DO%Fb7Cg!cp`3wTg87_{3_+Aix{)0HxiD)l0ig_;N{@ z_UlJJarOsPCu+9tf>aKJeW5?maVsOw3VNh#dwpNC8<2Rt;#b{5&jsd&Y~L2?mp17PofGc02tc7PFB z7~#d~OhE=er`BDExo4sG$iQGcdvWg%YoBP&lzlb$AfV|9-p{oOD)=Xf5Wqrb;?paI zHNqu_^azsGJDjpN0;MlpBP%N_r+2we^N|ohh%7^uPS~1Ihtth=Ef72)!6v79p6$H$W{?mU-$krl>KHg=!DB$ zZ_oQdnGn!x6yFvXY5#`baBEA=!}w7Sgs!CCH4~NsTEL&g+N24!2_V)1!*Y{ zmShfK)DCiBL4vc_;AY8h{wT0&*i9$Yo;%AcoIKm<0Qa|Vt)C^I{mhUiv_T`@BywQE zjc~&QK9t*MK=Ujq`SbfXDl*z!?QuXvr*$ljcjyW{VEm3r^H?+7duc`fL_9sxOFx{4Czx~L6PDi9yQ%l}nJnUE&1 z;FFkvuC7=|jo&6yE^y=_<7#dpvGgM$QJEKeq~@)gB~}JKx}?gpxKU`RD&*MG+@{l+ z^8|dp(m;;PF9V0~(i6#k7H;+W+%_q$7VB*&*Gi-Z_m$-In#AX&r;QGNYU%5LWyL%i z1v!h`@cX{rlrVW;Zs2JvVb*K!f1!M=wgtzU@^ZwwtK-JO4mrEtMSY~?&FV~pG4?lw zjJZSg;@%Y@>*ULdUWCM4f8XXSt)u{H_3qOs)9EV64(Uy#efS_2eS}n6_o>Mhk;GgO zjldc8W=tJ>ItY+XP=G5o5SZPFudfJEP=*TDHgdGg5Il4>RGgKG&w>4(uw@4PA6ZeK z00|++6({e9)yIF+%}J*yK#7tgn)g!csX+_R3RyaaUIG>7oZxvb9|YLVA;&P42^moM zjqr`<1#>B!u<%C=1>$Qu=Z`p1z%pEI4jDg_$RD|f1|O86*R5{)U#yBrDV4S@KYNsq z3yZEqv$D^lB_zBk_^~Uf=-Le}O?lTZZXNr_9JG$jipBq_*P~2$%JRlRp6rY-Hk=?W!Jw1Zz%vHbHpUm?2w>R8CAlWi3GR&;R_jq zqypRRL+|6d%{pQDj479_@<$<5$Zp|+93S#mxq?BF>M`z?j{5>XcFJzj(%^dAI+7VF zK2tRC;lZ`up+jA&!RzpLNK~F9j;ho1jm)5nG8MFdNC?;=aged`=93T2le4oOxUni9 zJ`b>*jBrcDHG(_@5rXNe+^nW^afuUCcsdgJLDG!UWhmIP*G2R{@p!(7EqI^2w{3r5rxY z>&|QbP4ZKj5I(5A_gp&jAyaH`pUBci+0_ySG68eZ;lcH|i0BxFo*}xz31Q!&gOLPH zFAMEN^`^>r6+q?!=#Zacv8r{CKdOyG@X3?7dNFELn7Sn1Ih~nSMlC)68Tn5Bpyg^v zPnP#B+8sRNyE3`EEiEFo8D)+X`HaA+HM?e)I|`W?fzm1-GSBRmN`t}Xni|V#UYQ{! zs@MG{mfTCcpo+FF?7%Z{Wq250RKD@hP2LJ_MI_4|B;_lgm%XAywmC%8In@IV_M=y6 z^3)1u2o(-bT}*-ik|+x%5J{iL($|A*;SDSOq=TJ2U4#SAhTQY z1!g0FGOV|ame0hj)fvOhEa-Ad%=2S&{w~9K*V9f->#6=ly9ZCpDZ4;UhNs@c+f>~n z*=4m2A`$n(wy+C-KHT~v0Tse0GEhG;H8(e2DFaM0Ac9u0ocHGa4$^ zZo92l*}?N2z*Dln((o|5|5r!oNeHC@D;eYhOjW3gS1WfjptbLuNi}p7<=cu! zESBgas}ry?*LmezS!*Y%wXCb7@aU_Dia!o#YAGz&dlAy|O0Hn%onkreRnpq7=)BMV z9ekw>e~DO*EsjK^2}=to?T+YF>lyw!ZO;EAjzAs3cr&h)O$h0qokz&hL0Aw)OQ+w|&-U?#+ z{QA_NP^_;E^E6yV_&lZF;3t)^kPr+sfVYNvd2BiyNs(##Q%~CjoLp&g_CYs%6cNCS zPA6|B1xL&$lX9}t zI4u|?gQtL%;C}^q*pU0yb3?DH91DzN?l!1YL`_iTv9@ZhzyJU{qqTfZ!ndwFooFR8 zpP+&+lbMQI-mv`HMC6>6Y6;^P#J7-(&Qm7}aKtZbHlHTEd)KP8T5Uh8BIA{Ap(d7z z{aKHQwQkmafw(KEcY?v^6L;f{BrrzeE_W+swfI}syq|>Q3CEd&V>h!J|&%rN# z2sOc7<>fvMq3Nq*SeOv+240&U2`kM}G~z?#NZ(mfyb3f+y!59b~!heD_+_`tcuZ~3BC!0&o+97m6Ogu1ouz4EkPw9 z<1tzrE?ZE9Glq|izdvZ>;=`bXH9&=2u=Pr(xwVriFV{^5j*U8&1;{-80Nukv@{1UA@qP}FC@}O16+q$MPL->sB=n$-2Er?(M)#f ze&Tfj&*>*c#Xg8Aq`P}&^U%?Jv7}4Syz|uC{H50u7?Mj%vqLcCd6iOw-!+;|Io677 zeCX6ld~0$G9aOHk-mFWpWB*t#H`%$nbV zriTc+MIJ9DVvfl_T?LfHp@MoOS{!buy}cOrC%voRVSNkjwqc^%GWw?6Waio$_Q|CV z%?)(z!z-n0``@)!RiliDkCA(^SYKDy<^L@2H}uIv)&w9&KA+SOcYr3cJr+bE4O@@j zEj>Lw0B#a$DZT84ct%HeE<7{s>@sI`dUIBEyV3gx2bYB3?@N1sT3?y@tN}R+wR=CR ze355a>4cDbeO&*rpsN}FCDoIXRmX6)g_tI9(=cEG^hS@iUi-MZ1}?-$(6l^=B+4m$ zb6@hUqWncPBA=3y4p<0tRX!NAa=qD~)~DY&O*D}|r52W-OF;|E0_R{{2xA}D`c8yL zqId(SC=*~P%A2?0>ipWSSwq;zmUSpgsNTYr%5UW8{N4QRH{J21qog?!ak5%M2^zYd z^u6L<8E6RT6_OYT$2iJI2O!( z5w{EmVOYNsU{^anjceY8Rs`QF) z{ybCMpIh1QrJ3G_b}dVOqfa8K>OU^w6eCeFmmAl|mdaaxpeW;tzp!Uk^ ziP38lGd~m9&gaoDf`??EJ={vM=SWXI?V0EjWT(C*Sy3P?kP7|3Aj&mR=Cr2zHiVXt zgKaZvojr38^HUzH*YI@Td+F!#hQV>;qqlX6Ch^`4RM{PP0CS`(Blak5)UC`pLa)my zuO}_(Dlm)jz&+pl{(D3s*Px4)h_!2~B-2>V&#D*O#Ch5ep2}kp^U|?9j9ZqVb5)3~ zJlv>OMBy20UC|U<>07ijq=tm_*#%I(v#&oU%SakA<>o21YQLO?y3g`8X5kcP%tMxj zF)gh5lSsXN?xIOeuguG3H61KN!nZbGHNT4`aGMKK@7prmfl(`Ld*JEXo_v=AuUOp7(jNsY2F|d^rp} zEqoP6W>^#E1q1}RtP>)WG`;SMeG^!rqWIW+A3ESTj}CLVeS#k(V1F*&EDE@VYLVR3 zB?Hx3hRp^#I?Va)Kf;S^%gQ(|rspl69i>gvuFGfi>K6EL_3`s;ut`yWv{~^ua|p{i zK5IUk?o&YP$GEv&v}KJlNBsn;@1r8Y2UuXrZy*Plz<+)BMaVV7zpwvS@%p5XjA4BW zH(=rLvi0BY;2|K?lhQWXo*(`XFTnrCpO0KjAjAAAk9qUyX$#xC=zuUqAY8MBf~)V8 z$owNEHlzSw_X7bQf~SSdA#0Ku5T3tSLqoKhk(&o%n}*Vw`70oJUiF*jFX}wGoWFuM z_YYuAFoy+O$AZ&h{~( zy=UAHocUe0CvI(I+bn;&{13B{nF{!^-bi-EV(ByS1B-vrg}?J<;(OMnk^f&@Em+z7 zmk06xd=KzH1DVia30w62!zdlgEuXIq9f|bPc{84b5-SOP!Eg?~D}jhd$F)iU_eb-X zW}b(Sk6?YIA{3YtLRfhnGylZO5!{=;tHP0&%1E}$ikIKQ>B>#S#5uU(FF#icsL&Sf zzWMKd>1gl#WFO2yil<-Zfp%lVDi=$S7642xQ2RmoyU1=a`dNn*STmsDUYXl!Dbakk z)+K+^c03=DEjFn?Y!U-1LdXyijEn>kZft~SO9{r0(m4B>O}_kA$V`e z4YvIB)%7!Q+kk(kicJ>kl`{mroUbl@FH-M$9s47p^x#gv(1m-r6NU6XJpACOcFC5u zS+_!f9fJR%Kd-439ECQMo?ai?7C7Wb;Iw;DaCnD|Gyl>J^dyG`6lPFk0LeFNPuxs7 z0P#A@uR4teI5rxn3srXYB~Wr1o^=fVsmP~!Fu#vS`=6Wo8m}nQu^6$RqL;J6Fy#-! zC(!i$-u9|~j)yuCZZfb5fUnnvK{~+FUyzDe;x%`*4x4rt|AQ5}1l1$x6MFOJ<^`?V zs-|s99)EHPkcvDO^q;x*|6^WcMMqQZfDi_L+jZBSd~KF9fL0@r`9*N@1aq2aV~yO`2uxn zqp~+2UW=C>%@Hrb*zq+q1PlE9QG$x3atJg!j(|!vmnZ(~c_EcBPOum~(F$6^{abaA zK34g30tpfL7hd_|?QgPd3j5-s@b|#bEsFOn(cFmw(slIGF~^wEYP2VN5=1C10OJIG zR#QX6@g1ORf)?VX+l!)$hkVx;bnV_~v!(tQs)c*Fb~=eG z{84J5MGi?f2qh4b1H?SL^Ocm*`1h1h5KZU)W z-8yAWqJ4p7>dT#A__+V)Wb&x6^zf;IHo|(Ecj^UlHwO`7&}dh}oW7BM zQ-^>?Q#kmL!I22SJV!sjrupq)W5#A|4L=B^x3sjt*2AaczbR)!pWRzwZbNsUUCAGE zZ+1|CR>mI*8^?q$t%pwEN>+dU8m+$RCLQf(=|u4)iteqvcH)ZHLz_k0=lazEJ_UB% z?;qF2Coul4w;|?J9%hiS#joHSx1NxY075P~W~6|lI21C$)SUgf#%>ypz?RDqbDzCy zv|a=jpJv1rCgGvMf9!+1FG5u_?dUddz!ztuh)75?f7%}y+nD~^k9u$i0s~+@!f8|5 zuFy4<7P`;vDY^E6z6Weq^3Cv$MR=bekE2Wc(0mXGYox|B;ix(Wua%%{mO*S|2;kDO zotO7BhC!$b_5*A@)%*@?!>k?LKOC|V&u)39iAN+`dlQE{ebo6RF+;w!`fV;DPe0 zPfY})Ont9o1{0r!<_0h3hvL%yw+c{9BB10!4|+%zy>wU!0@_x#x7*?-`Ngj$oKk_y z3=Uyv51Xz6=Q3zrhK3HjABKXRH?lh4m^_AT@Wke+*NR)^WT3-i)^G5e`YQONkW{;D zP3^=`?BE|_e~aORDm@YP4%VyPj2d{Dk?HwXWI>rr{NT@y$&O?F9`~xHa`YJM_7=kO zfX{!Q&;Me=KeGJ=em@XGJhlIw+^=0{@~)Y+uP>S2K7tZ;gVG748Spp1o=CGD+LP{d-%%ZJC>O_)BSd zpZ?T~pfN$4IFclbLu4sIR|>Ti<=_UTn?D3&tJMd1&eE1tuo8U8p>KzeF*g|#P!!%A zzYbw8w0}Oo;8>s=eb{u;L@j}bf`k2fr>$O@u+eKj@8DUgtY(CSk%8oZb?B1($d|P& zEL{(hAgdI6TU*cc+fO#&>$uyWx3}R5;;B~mD&W>FQ`6l~k5p=cjnTTG%jk{n zFMjO1P#&i^LRci+SvO|hNP|WL1m~(4_BE@#R-!253B2FS1PddzOL0C-4!HV8YpW@H zIomr1dMBgj!^gNxb=_h550S*+LvfoOm2sS4tE1M++u0Fa3qS?18?^^LWV50Pabr`NB2bgUXK^V>x~pw3Kcq#1eRdKipRR zm!35ae-MaX4PJW1nLf1aOw`TEz;qKjnj+hm(6S`yb~Z{4CSjfE$lCQe;}`BlM2-1I zKIdGdWLtMCPCoimCV|x7hcC+S(ME0Jk4C26fCuI{JNRBBaTL~%ED-r=|2mwdUKx|G zqNM1>S(Ca~(*CaaOzLIn5IUStYLk8-u;jjCI^QGRGx)~I!<8<7AV*-X%5Ia4s}t&?}`GRK79S7#1oOWd)Ysr zy#?Nkrx$*W1{w6j|CWkO=XLM?Odnl<1BM<(!Z867T$E(l68?xnCpTw<=_vLTS zMmK{(84r!CC0Oc%iC5YgJM^JcOXT^^&Jbf%Zr)kU-Nsd=KeEwX;~6MzY2<@#U|lX- zn;5p_K8Wyc+J-OCl-StW^R2>0U7;kh%c)G~ow@cduIZ1CYfyFk&$SO}F((SFyg*1l zy>xa4P_x<3wq6AZ#hsY7`zz)6@95DxWvIyY16g2OCQ^N;`Y$Y_!bb4+df;;^bdA|h z@6K7=yp=`TC_KzO&i%UEmT+%WBx-W|jfV3kS=U9luOuv_-#mViVR$iGRC}E>tiZYCbNJ zP5a0>GM-x=NZN-=%kK40A3bvM@hLtlO1fcV!72SxV(RY(wMiP>6`=VGaI%uw z*KZ1SYG|G*ZJ#PXXL>L>z&us@47=S+*`@vfozotrSM{ukz0*vPO-m@I-Uyj&@+Jvt zG*D!MKCL_^i$+KGT0GpsB|(a|=*nSLo(#@09RKl@!>r;{G|4!3Dyv%`sX z;o3Fxxg3UCnzAK+Ni4zN(}8j~-}2RZ;g-2-e^nLf80gf68Mf|&-djuoo|AkriKbW5 zgU^($`pWC>XOjJx%u9~?_EnKRMs>D_DeXy2k9G>tZMC)v@b&x}4zgbv}L+IR2KTlhsmX@U3@a3AIXHG_$N3$5ZH;R^f1W5?pA?ba2&& zj)Wx{*@Z7*F_=*K&DR4n62w_|2m-$9o?HiV9}s!E4Fgi{o<{ISnHF!7H|ah{e{<;9 z<)rlN>%piKg=_@1$%Ycs7jCsJ@RcAxhqapw+nDe~lE{AT=9a`x(I-F zg3|S)#!>lLj>ehj>`Bx{wgu~dQN=Q#< zWup4>2B0bcQyelZg91ZdZE?~n>dUZ zg)B?=e8-}U5;f0#dG}GAbife|VGxNeatY_tqnD{%S?D;}#ET0$5D?&%AAu*~uq4B* zINBDhD`5yB?EwQ!sAy?W;fMdc1VMyzu7jASs3P~Q)G~y8yY@0owDA-Tm~U zDRs2Ujx|YfK1zVSOJ9$yepd%8W(|fj??V~)IHCFBYLUa!=kJCcke7Nm&50mfv$3H8 z+CiG<=clJfwy~YJ^iRpqXl_Ai#n++c8c^tCkpXR}dB{dUd92C(=_B9x?7(|S2SwYz z1IDgccyVUOIo}Y_DQR9aC-x}swyvQj78s|?j6i&IF+!z^@L2{O)wV|P+XjMaiZ9)Q=1uJ-;zW0fHtGt?UhbVMb(P-$Z9T;9$hW4 zT<+rs*8|bg5FUL4gT%DM?4Nca@!e&^^(DIc8=cp(j$m3D{<}dE_e?ipmIB4E}Y&pFttHD9$v)hB=B>;=^iN+yP%5tu+2D@kj1! z>P+|h47#si@sx8zR^U%u%T?P+a9bo1_Z?o`GL3#fW>FV8hp?Ig|T3!3kAlb<)bMMUR9 z>7|XZl{gs5c|;b>ALUY6+n*;LnE8@r=I1B$lNz{rS3^)-J8|K*0TDifar&M4Q4FF$ z4*GTtFqeG~3OC$c)Uo{n+<^n?2jcI%(u407K0WPz88!2S_50D8FFo3;J~3PrfE+qG zIl)%Qdc*`7zlf;;v+v0INB8jI_V*1#!~m;fxkJE{{)Ju|9$3qvZzZaK+;04Nrz-vh z{Q#16hD9A1c3KULsVckjz>vg}_wpNUn_g5HJw~3;rw3&5W!@)n3Vr+-PubU4pvYR@ z28&n&NCTqgd0{sXO`V!?rF5>72|sxP6*>i;ddhRjhGfY0r&=-?u^ABg4KdfBtD2c@ z6~7lCXEK9U1f=H}&`)OC3J5&*RwX7PC0xX- zg20Ol5ax>dbM{!*anvEFYBz1myPGv;4e$vjwh%RUC{NC6%y$)dtJ#pwR7T?du;f=A zCTxfoOEVpUdHf(wg0O_1b+8ZXl_-#j4}q9m=1HgSVD-+RHgRz$D+Diy_%%I=L2<=; zQnq_OKqtm_al>-J1lIlYb3D2adKL`F2ji%Ul3>SyBh8CMo z-RWPdCj2p2ev_?HMAKYtJT6&F*8Yh6*9=hKs;Xq%ps+6`Ee(+4K+-Vr1=HygKg0~Z z51GTVq<7^wexDmo-km^27@c9)<-(apjiBs%K}{}w?ikkbMlURC=$5>f{}M4 zRnP*+sz3vThqV@04Vjh+{J~Xrrgs#4?&bt{a|EjsO;$&f1F3md>8pFnqSD5r18n+{kd?=O zPu@d};_C@%@dfvXFT7mw#jN9hYOJE;!T*D&s(%XiA`&i=PIr2(0R6fz!UE4%i-<`}K{X}zmCGJtX!FpBhv>DL_BbeYcg{YK z`j7V+no{P!Zzi7neE0yo-4O5cZWN-5hUY}P(}ig1(jqo=tHX2+EqOUpQA;GzMS7#( zzssesN^0vfTI9a929|MlY$CQwX-{*v5M#%c%#-Maw9${OT7sTC5D732JiE9Aa-4CC z23STOBrnISNXLGoh+OW}l4mKg`4|*=S>ADU&ETvlI?JTP3A=3v%>U1`3k=^i0geC? zd#Bjoj{%88mgD&utM3cT|8(D>!^?j+sE?2P6|>qv4EHa`^}xVq(L9{DCs_B z!acN8VtP)0+Z!P@rCzF-C- z8sEp8s;Xf8$YZxgQYL{gP!~K{D%7BLgCmgdbkh2((h^(L5_q_rb~*!ea8a`6R$OJ6 z2opN0!~9fECKyGr^WXDF72PI%rU}PGjD^!i7yXGNUnUu;v40Ac4N``|3XEQKBMBOU z=!TtxL$(TE;n_zng74an_(6f4#YX_ehAY<{y>jMPI`I-J8w<5%+_|T#;9qR(1SN>L zq9V9hsBaD^x}02B)k&tUb}ze!FwsJ(J|rjCs(Ecl3;JKeVYUp&z4c83IOIWSfdy|S zBxC6pDTF@dAucbW^=QY4oh&fi2ijv{fdwjJhM7(OJ_S$F1M}!dGdY|LL^Nv!*Gn9j z8WS-o)yvv>*Jruq`S|$Uq9MBrsG2f*&UMDV3MwHVOIOrQ%+BL)%7zUiMJ=yIaPK)~ z&k)a8`h?1lU?V@@-EZOkM!p0moU~2q0!zAbg4CDFT-CGovY+Vbmhd)Wm~wsQgU6JA z?RJ;v3}k=J9i?aWgBB3LGY`5zY%-;XkZo3~RZS zuuUe946^6xupR)PnGauCv)XD3iV&VBK8gUa%EF3W~o1iJ5v)5xDlCvz2Fo4g+0gBkWQ;F*N{FB^PhX1hX2YZ>D;e(Vj? zl&3H~KYiKZ#r{(Dp)8?9=i*uJGg65zr-KjVU7RK^_65;_F^YIF6`A@R&3X`Ri_$*> zQ#+k-b^0plK$gG`aR*Mi6Cr)DZA)PNu_-#Uf`|}yM8rI*#1p%9SM7{jGUu&uV2P13 z5~SMx^9MGahRl3THFCsHGs1gL4nJ*Ja;KOHBwE=cewK3IF{B8So||}IZ@3ZWdZ35X zk^H3`OOyLpk$?>fwNvuAWMujfmP$0j5yTtkEzlO|?*11(SBp~+OSb87jo5zLq4P>h zW@N$%R2M>txWs}*e!t7}6S(J_zm>S6kaqVC6kVgHUS^0n$0I^2ewpdxB3EC)YY5)! zsw&>dEZGrPZZbH)txp7~OI+M2H~O4!6=)*PfOhdrKW#%=-Mi5M*n7?-7^EMW9#1&( zZylZGw$(TPFRZ;~Se0#*HjIjh(g=!lN{0y2C@CQ+A>B%sbV`bpNJ>kIfPx_1-67y6 zq(kZMe%I!CW{&rpU*Ehl{P0lOZ0>!>b**)-GwN(qq#->`ssVjCjb0&TT92F0k0yfU zV@uh0Nx&CiRa%8`A8oVDt>AsQq{2(!PVY?0#|Sk)_%?*HcAq>!ueb^|Mqti4cja$$ zyQN+AJ_KqrioCE0QwslxEW5+zBXS+un>Y}mC^l+3R=RO=7Y%0$9bKKxQ}%O3Ru|Tu zo2Q*!f9YD+{XZ%8OlB&0JiQQz@xYIr+;N666nmve#`16D?hinjaO@Me{(}pU*mJ+u zBlLOwk`QJSXn|=(3@dfU$0RS4d=5!6+l8#zq;3PB8bl z4bPf}H(-vpc0*yirM+ks$d)}Wf|9s*YHvVg2Ekkd6b}4kNfV0MK?u?H7{ecK4EOlI zS66EbiMyGjY3FR5q!%L;YN9X~G7OpC&Q<`(6o9^j$P9kZ@XVBG#O~I-Uw!u#RjOY{ znrSK3*QSo5n7Hvp+oO@s>fc7ajKqYx<*;W{_h0o<@IbJyZUG5N-bQ(v&L2Hqu+y=c zFwd;g(MC6Smis~fxemD8>g>Dy5t*}D-wep#9cvAWSHsNr=GGS!>D$bL7!J4N4OSb= zRa37Pjt3_AKI{sJLy>trEj1H3jFhnb5<&S`&{Uza&z?)^Wm8>7NvU@ZV=qYA-rAK`nI?2m3E0KoSGRI1&GYmRCq*-gAuD(iiWUT z0Wql>CWyl;75U5KHc$(JxUH6tWK_WRh<*&B2!V`Atx`+5+lJG)kszf$JK#0h@yzE_jb^>h^C35H^X@jYwU`!6pO z@)CV~? znIqIUUTUDdHJ>_wNhB^Rv_Qw#vcx_SePK;TAn%IiX z@eajtV74VKi!uRR)EKa_wwBf@_G7g9BLN}r-L0Ec>Te)B{$c3UH#4u+;FHa^_tD$J zf`nPOf0{pC8C%>B=+RxsYW8Yr>)KbNbEp%Q+JFgFz&ylA*(Y?IE=F^qxS>d7v;}m)czTbSZPj`uA-k`^Cb*; zCPzlz5b(4bfZ*HXmV=)4HSwGv_V=M$-~wEfC4*6UaLYQj_$z%1idh0=bDlY6g37I; z_Im$>DXZM`uYu8%&R#~ykY6Zt*woc95V5Uh*zwy8+a2}+Ey-rYO2bj!>h5I;&J2vq zNt5(;0d%D+&EK`37b|#EZ|~3?TvZyvEi@nkA2kr0B$)G(HoDUxGf}~cPjCZ1h?}Bh z-4q2B1P%34@sG&g$0##IFf!s`C9c7&%@Rl&g5(OF-!}nj1DkyZX!j^Jz>6LxBETax zAku`~%Bc%oo*fxw*Y;gxUs z9{K1e&lf}((9z>4U(KWO5R3DGdm2$--T7VtEa#`!BlP5)*wjuyM-V*c z!a)?;HV1DC_A;A|=X$v)L`lRE)f0B4+Pp*TDl=li0fcATMP3ODeBINtp`Y4HDYF7< zJsy%`%d&1l#4{G`NrS#oFO_@fxBWeu<6P(B_VL~$o?hF{lxk4RLu^3AhAudM+>z$M z4lzmi3>7r>yFKOCkYD;oJ2^yk*b#cE8SBHB@SH7~ZHk!Pc_P%VeM_7K?R5>#;u|)C z{@bKMtkRLuxpt_0U3HSIC=WQBJdYuGmJ6FFlJU#VTZ*QjCk`X-A6^xXT$zEo6WUiG zlxQF1feek8)R6E~xzql9N0cF16pZa$$$e{piCR@$%*FWE_l^+_W-3|>$d6=n6Cc6WD6{eAuQdUWt9I9?5G znq{~X(FtJ+%RO)Qp_iVmWa}hd)ZsLLqu1Wq*$E{{iwMdvb2eCLB+IuUZY8eB{{`n$ zIuw%-rFT!tzpKZZctZ8ticWOLraC~N7Pihj1Uy5NlPOkXK-ZXkmEVh@_3SaaKd#}E zf2YetE@U@EP;6{JI)S54i2E{kezdY3>01LZd=aBb77k6?RM*qc@S$-l8^iL2J?P!Y zL*qxjWi16H2nZD`T?J#*ejnWe9#U+2!cVcifI1zVoN-|443lA^L2wNhspfblEbF9g zk^zEEbKsSDZ9aaGM@Fht>d%(TDcD~~8;oRO+$*)B2X0WB)mVvUPrFT=N&Hvq`b3?{ z0A_ayrYcZwe4Rt-#UR=TP=en)P>Waj58+$U*1AzkC>*@NiNAIu1BcM!oe3hSGf)@JDd*Xn87?JKiqZXGgD)OkQ1~z@{)02tG7u5K zoiN9NHCA;_{Ab7AW6=zp7mD>QYO7OgPIx)%C$)!H#g+U6ZtBE=&>FT(*kOddPKmG@ z7sEs?K+~Nb3$vD4-l5ltMgr+o^ctB+e^6le7&V6utTaYf(8HllM_Zd+@19|tuFOx1 z3gN-vTMik64#bY-9C*PJAHL#gk1zvpgnP^8GBkSxR5X$qRMIUn2aJS{QQEay-@rJ3 z93Ux6I~`}p68&{<_EFXG$~!jI#SUpQhJDC{0oR@Q`1s(70WP`7%#SGDNbgtyB20%F ztjC*EAgDV|$zN$?N&1{a@CbsEX0C#ZSh__N*G_=?TU0Z*u1$9w-zUzB!(nSLP#Y{B zZ0jwe<`1K>Ph6pE-gJW)wwEu_Fc>7UUw<~G^Vh!j?{Q*AYgXjpFiM)pQWob|1}wb} zz3XmofLDMap;NM~wjjzCZUnm;%VdlH8q!Lo7;g3IY8J=uA0o6vH{EKUs8F(}6!TM6 z7(b7*`1QJLwA3nkmMiPrDE2{kLpn#sHc4wdv&Z`$2;!c$N2)=(mM(_9y4XR z+(oAnKOC(kfvB0OyA$_yDAP-}h}HfC zOIiME=-nZmS(juhUimZ@?8wrUi!gU<*(Ui_tV94G_2YqEFxV|*I!mqKcsIdxXW zb{7uLcXbYC2mek#%_7)<&vkm^)DVur&yS*l`p8Z!rJ?hg1%v^}FBaN%g((B#ztbOTi?Raqz+n|pt z@uAj)my}qG38nxpx4|(tMc1-oRjyeHHt8s*azs_&`!{xuAmiCh;|@ZSOj)|v#+o43 z57aT*%MsuZ7izVo-5NWPDACS!+F!Mfg1k4|vpROhflmxmB$*r-j*ezeZ9G*fuBova zb1Dqr4ToW>7f^tw4hpZYEn2nOk)n#^A%H4;>|;O#oJGK}COVMe;9&5Xze3E)oOPKh zs|^wq=WJRzWX!L_^wG`&u%dumOfLt9T)kSyu-zK&%Ov7P|t~Yr(a41D0vx zro3qU>sdAg$n~{9Vo<~>UBgJBZ|5f#S0pl>jR^ZK1i4+D)m^*|8@W*xld=v0R?wy) ztvgKaK>RzTO%?3*PM1tBuyi2<#hkQREXvn%AWE@L_*@H& z^N=iP_{-USY5Z|NWfZQd@!2q=^eiWXcwGoIrd-6^Bf~3>yQ2r5<3lsHBP)AAnG+Vzs%5R;5i~ugl?IBG z=TzIPid|eI$9fl2c#|!u)6FIvM4VU<_P>QV5vFHW2o@4h_!6D2=JWi)?xa2kx-T+Q zibof*;`nR@j~MHQW!A6LQ;#k2!1^uUP@UBPQ0YQOTTTX zxfL#tW4J|X)vi=Ve4^H90Mlfa0g0v)pyhzG#3kFW7in`{g)k>{f3aFRxsZNue6j9$ z>Du$(+vn%P9^YX60ySzn!?IJ=%E}7h*bONVqf=s{aZD4ub6dA`h0H@=EbZJPpcCLkqXf%gx0Ek zMUO}Ox7_0(T9&$M(b5|_GA-?kdKGEb2j;zOpYvA$6s1Hb4h!5kF_p9I3R2w{+z@S0 z%$0XkWeHqo2uAbsQ8ouJf}-1ni{I1$y}Fq{Z2nPf@e$a8i)To;R6 zPhb;jvxDxyS1HepOW5Ad-cjj89A)8yQ*Lb1TP?!hNFzuKl1{=)S(Mp{eQn z3RM^#W>za|=vpqIs|B6Qf-CGt@F-O2c&O}Eq3FjCPfW0PH=}J3Y7CEna}hTS-uy)Bt*Btsg3Pn`ZBd`kfzJ;tVu&1GKCCqDhg&~h{dzW%;A-p)$cVc>huGei~&L`d&j_7_M;pD$ACpQnn&P) z>XK4cTZ^5&ONkEo0<*K}CK^F(;dAA>1uL~@rh1mc9GU9l0$T`n!iYr$uyaXRj(eVm zuvMv=xMLEY6$Q&4>N)3mYtDme`*^d2Km${kukAO)Q@(J?Aqn9z=!^3kbr-d2d1=Yu zFHmj?W=eeuX2Orp8fTh($H0r_e2d~jDfz~?MNcOkXHQR0WjA!*)Img&_N{*(p!)hD z;Gr07i>lEdmKfg1%nf|>B>iO*GvWFuoJ(nZvD?&`z_|t;RJ4im^)@5pFTQ?dyj#oI z1DtkXNCxCk9?T!hg4p-?+kzh5;8;m3k1ocvC|%WH;*~Y|J}-4!mb;nuQKw1cta&m$ zIS;27&C}xbtWYxG9@I?@zeO+A_Ebo^%XyPNMn$#UV<~&`_SAt81Y8t2>|SDF4<|X3 zz8J{0NcP7r?!awHFwUg9^uh`5<=Zn@vWGyr0q_VHwbZI?Yz>%4P+VFYYwUy5Dx8n8 zQn1b~obTWGCpiMJO;J4iyPn^zNJOqI+NLZ7eSM_ti@Z;|sj`{Xo_%uPW6iqtoXfLXHM zr~6Tn^YW%^*)ul+X7c_n;Tn(MH{;PvAKGyRWP-Nv*^(_DjP zVOjgIffucb`11rP#DHfg$s;4=v&Ug6eP%_}y(j$Xngq?fEpJj{A`nJ=$cU^Oml@1b zZNuE=f=pUU76-5+#m>2l#AMG{b%+UH`>kkBP|7{eQ3wq0>FvF9AWm2a)yz>kaynW} zS1Q$}Kiity3<5Y95UR%KenpsX<_)_mukM&~;on6uGX}rwspl8R+`3)DEzQ3Th(zfj z3sZe6oYHC7vE^+YF!B?7W^7+n54)zgr`+hcp_TvP5$U^TOe>qkCxVr&ri*uHT~iFc zwFJkcgw?rB>z%gfX&>fAFC4+P0j@t+U(-%nT*g17)=J-?{(4P*x=4cYdV%{WR-S%h zVj|H%LG7^&V?ZljLmIo!61%O>o}12)@b^NsJWn7fO1@g&JBDBnVilPlK)HH*J9~<( zP8yYc{Rxo7pO&m5&u8o$pF2{ZiLB4e&Yv~onylRHuL;Y_Q_in=<`lpk#BA%wOgv8` zHX9`YB|q%C!3xko3<|QsCI4suFcXYE;7Jq)#kv&H;DTFUy zrGbHoE-oZEf5KXiNU)$cz~aG;7llo;X<=obS04smb?r5f9vUlV!FZ{aAw`65krDBc zX?zH3p)+|Qh-Q=zR>f=%GfI|->p`!3I(;oE9c%7Uv8Nrw?!XYoDvh0UjqcRsWIn>Y zMc@R8q0l>>R`Vwu=e&P|Ck!#Aw^YhQWL2Fs%thXm@jK(dy$EJ91@u|r>}>0lett?t zT54>#3i$`6T<<^edrNKRZ=BfEd_PrMW}?P;(4v4ka3?k;D8d{DHtr3(QGaK7^p_I2 zs5V$zb_JuJF}HYUo9!z9K{}a~?U46*C2tuu0T+sWD1p5s1f4L)x>iu0i)x#^0Hsp12b|8rpvT~l~ zDcM+Us15g7&WGvW{Ok-m{Go_|s?3WbK~xDVF37w*1j7_hjNO@`A!Ldq=g-XUWl=k; zs|$@Q%ELg|<7<{Bk(0}vgFq4}yP>Ycd+^z?vX9 z$763k@yBa>6E+VQwyf9?8&&kbc@>}a7L-!|$`lNphaD^*-<1`{2J=2}6MJdzsJoQ? zOQ)3R_qSdQi+chz@8eV+`d%?rKvC%h4^Kk~Hxk04g<>=y^;C zl9s+5@%6)l$@yC_h)KM0?iEK^>DEXz>XN3~Gr|z2T~1Fm_&V+F>y|;VqD%NZi0Vfe zGAqxoBSCTBa~*f%?WZaXcV#=>3_C8Z&_^tH-hsRfa1eZc_vcbmxK%6iUogdm-5j(u zN)TQ8kzLNfSW8UQ($tJ(&0n#$v5C_Z#?ndiHg5Ld$yq?0gEGX%((=h`Lz-9=CPAGK zW-MUxO2A0^V-NeJ7N>=mI4m@CR0i46W<|4I*xu>e0WHej;x5pyA>(^!Xm{hv$9rL) zOo)7d95VB1{lp8X)gSkn!N-OqD_WOQ?)Vh!qK$CBlle@+2!q{?#YiqY+B~G}iZa@w zI&G{Lf#we@t?hw~)E8|H2PF8v6wI~NY-#O&gXRl}+4uSMnX}RvK=&C*NKN)YL%pvV zdO`ZN*ag1e!n*;^b{bE~8>N}ZtT9-qvS0iM7a)o)bL1%4S=L+HpltZ9^FXm{0-kH#q0p3NVg zN!#}<`vwC)!dyREXF#nTM9jSpRsW{vH`Ci4_8ccqr}H4?sVam_@sm{Q-+wrS$P!M| z#mLE`yMu#jkj(IUeEM|}NS|dlQKzDy$WmKh7Q27%z;bLzwTz>uv!6ELanH7$U556r zEUyYCm9pJtyChh-!A%V0Bde>2heUJqh?wIJj_5}g2LN^mU&@Tu9?0}yfL@}B#mK)EJIBjV8=L_ao8y|{(40noD*4rmGQid1 z;R*hn5E$(34Fb^a2|G5&bJq8Qd5@b+BXHs%LdrxbT3OPERIw6G&p@~S2a^+@Q0b2m zdtB7;xx-qV*KhgbW?}!}3c(!b3=1nd&ti@^t$t$BpTQn(q%(yLl*Vg2v@3(_>-oY2 zQlX)(beub)gvLo2LBm<|)TJyK$!#86jW0XeeP~z+AxDO5r>}@` zx9w2!iVBrfvL4V!aDr(>Lnw{xVJm@%S`bIf(!q%c?&;dpIcshtvA(=tLel{8HooWi z(SjZ6-2fhHauaiWWd0Eocig+^77vR7OG(B(Sbu&!P+JfQjPmEfKW&`9dWLgXhP$Lg zUQiFsPh@L3bZ2=zSzGR;ImZP>e=*Ux-0uV=h{~!Oyoe3e_gbf%*d;}5UdqqTYdMY zziP8FMi~I$kLk~re>n8Dd#P_tFsRVK9A>FG$gWaME%VQ%kM5dd={jOqKeoazIeBSIx6nd*E4FYBy%0oCM$I3%_>Y&z#L^ z;=ohE3ER8oqMkC)=9Qa_oScRnb)@jJqE%2^c>cnn4at1Sd+x=%6~*$y$?<#*Ezd=Q zhvTA^{R(H1q>}&k$B!?bbTiBU>~N@Wu^Xs5eol+C2{aQZJ|0}-Na5iPgP=T-RKV1y zr=Q#^ToeGEyR>$uFJ4jOi`&Y%#FDuMb?23CEw}i-?6SJ1&|nmvo*gHCPRaXw75pX5w4eL3Q54FgHo$V;&`qrnS6V@5FE=O-|*X z&}%Qt%Ke?PkEXrLxc)3oMOm&z!M(&0=pRtdFSn+p)0N{XSdzBQrsiyno0mlVB;pGz z#8Yr|ti86>*Wa%M=y1E3ZbCP>Z!FKxH$#O*bf{YZ6XW^c;EjH|KV}2Nd;v45EeWuj z00S)-`a4&BDW7zrd3NKuRf0X5PlEBz<-p7p2dN)>m(oV)MnrtgUQ|k|t5g?8iv2D_=Z0D)-_&>kyniSY~0T40a=QZP_iMZGSnzk!TXXu8RG9Ka(>} z1_H#ezOA1KYf9q#8%h=rSSZOzm!=HRWrMXMO|gx#0&=pRnvz0oEU!#YM9G1w;rrp2 zqTGw8QL*6gzzx|jIkYen3B&Jf5650mSY=O3!(aNAZ=6YeiPZBU`=+b+|3n_QY&s)$ z!n!2C5M=%8?36L%RL#11vOIgoR|)OiUu$J7e9yZSgrmN9BMT(Rzr$>iQZhplw8_U} z*j+mTAtJFR(w5hm=8^qT&iR(1vLjp0nU=Y^iZxG)EeGymSwOJqD zB6_ynSShsN0LRG$l!XFnQ|o;Jv}x_aTNZf;*ywy#e7_P!Ut4T3t$WO85|g*_MGy_`6sXat@wC2meCZ3oYkhfy^%*-)zM zhut$TJx;H?A_l6S7+1wY#cMAKj(DC#m}p7_A~$8%(UOsRfe-wBRS@G2+G+^@&b^@; z{kEYDEHJWG$YgT1T#{&Sc0zh3jtf}9N6(v#lOaFSq}JsUjB(d!;C(uzd#yM|Zi-Ut zKS0DrD=m*t6zdj1ZAZZBl6A!TM{jEaAo7PcG?~?vWB!Yae;O#Cf(;ff`t#vo}7 z@GcuF-cj`WSb8iI9a^(GYcaLQIwZ&ECmXVH!I+NbW$Xr7&t<~!3&v?O zIndz)vjwfB;luq2boSx*kxmR19kjIH@=Y|rw*rw$Ez}Vo@p%d0mgUx_5)urB-0qIX zgR=(xH^l~}Rv99E0p~BMe^YlA!T)G4j$o68bWV;K`Wwi~7X`0c)NZJ&5c9kVeOgH2 zs2j5YVDw5s-J^YRZpx!FUbU9lCoP}h6q7Z(_=8JI!MxWpGe_e2=hN#l6mTS$gTZthaRjibznpxFVb)!En? z+mE!sH1q9kj*L>d;B@NU@qlIqv#CKJ=H#iT9jS|1rI-U;XFWDvQ41BiT-?(5#_U?a zMNdr~?!%W*A_}}j&7|L#O=eM|!|>60%2WLTu|_P`+a~zek^^Sy{%kLU>}^yL3A$3y zJdTy>(w1^b*8FyY;6bo#RjU@kq`$nN?ig@EAAk@CQK9XlGL+o{``E`1*=Dz_-c*!) zF?@#-cMb0f^Pt7NvTq%~cnJ}`P~T-J>fKpVximbpM*<7`ZGIjR;LFm8tMkh%WdWZ3 zdnBGyJn12H4MgYM+N}EgkG4ytHk^e4|E zjls(5Iy=n$BN79U*AemgA#FlqHwk&RAx^48koDrjO+g&9EaP7Ppdngm%#L464l>W5 z6?PLbUZ;jZ(S%vWu~|;SUbs

+X|9nDZC+XXkV@h$;)uG@WQ-o95;H*EgYIJ3oLf*-Iucdn=aR!E zvObQ6Bv{AmrmOr?O^_tKD;xgqibsOemr7~I$W&l&$E<&chD{E?0J@kNJE5C8{Ec=Q zQyb1zI-V4~p%9Ly>$)Y?3zK)Ez^s#Bz@!{BPJ&4RsAySIW7gkz?}hPv367#Yf*D6h z%+;f`b7PReR#Mlf`045BASQ}@DeH}1AFS)#N2dfDN8b0Mt+wuqQ@sm_kAGZukiAh! zQ`Q@Bs~H#N@dD}@a7I*QJa0MAWTc65(3~7(Y04tAyruVw9dH?xlFl-&Ba;i_mfw)) z_@ry6$J)$4e>437CZ>#R95*wA0PRDBuSB7VBr(8v{CyW8_(O4#<1iyj!OYJDzk77sgg5u(=Z_@E; zyOl@?kLyOcFGsDS3d!hj!JyD~|MLWn(_8Q9u;XjXcWM2`96O(fjA|U*sA!P*GN6B` z{8__IG3tg$vU4JLlN8=qsnRhUrWnE9`h5<}mAy)~Oz=-O?=pIKqvBEFHGC(S$8*UE z^(AhnX)?5+DTz(>0sK^{qo z9<5xv0ru`~c0_>?L~?$1;=&USo6MZyG(J3K_HwZ7J63F;9!kDMBqcig;U-Y<`Oz-8cwdRzV{}&F&+E1@~1v>&Kg(Q{Y z?hdy0!`oMG--}>=e#}+7kbpZ;#gR9P7)V(XxHz4w@8gU|9l&BhW+b|W^A|9V{p`Gd0{SC5~(Npe)gN=%3)Ef_Z&biJ{wMS-Tb^5DnPI0U^!HpsX z0b&{WQk(?25Ll`0RD(@gRK_ml%D7+bPKfSADwjXIEBB5;Ucrk;mqj3)s^ zG*G+729LY3oxOyn;n4?~o>D7mU0wl!G4qoAs4nDTYMr z{+Uts)81!$!{)y4#vFCbku0{dD@Oki@~F~=)7w^LO(=Nz!GAz<&uxP5M(GxB_z#w< z7U1ciANi-X{PUjpmBrw%w6y1TTqTtRdJ8*(@qV8DFKPcK<}4$M&KRKg9u7zt z?|f0m`Ax)oQrSPdpK1Lglozewv&`T2xnm=09jC3qw9pL%Ez>C=(QPk@h8#TYeSFbX zm+MC{<;X5*#TLm zRxUS!KD^CM#NEERL-82=-};Z`(2tsDicg>W-Pw4bbg{2@KA1XnGKl1JCHhgsC|3h- zY@6aA0vop1eDHi57V9Mw<$re4E-%Ob&iVguzLj+fOIN<_FBd_!iIjzke*KgM9(VI? z1Enn#m8j2V1QKQmy5+A(+mr}&)>sB{kv4aP0`1)QrIl;43+t4bkX}~wo_9j~Ly*Sy zy5mMx7YxBa4+D789f%4%PU>NtRNDl0xbXV-lN26f;z|xPO3NNe*{(^Kx83E{_D}(; zJOrXkLl8}4oSxSbFZLwRWH7}RuM9gvn8-?{OWqVR<&zX)`G`W$MX>-(H2zU6!%$d| zTr0K&u=1iJAl#T}v^;OK1OH?W9Weg}$CpwoB)0_^)Ie#Hd(JgrUXrOkF9adR=!t@T zAqSo?2^-MjKSPp%yaAU-4opXu96My0SORdp`4)BGa=5)`}($ z2xEQ$M|P?qoQLudtS{6HhU*}v z7hVH=T(AZJ5Bc^t0IZEdmIyQ(5Wv*ecNszB?cku2TQb0f<@<#3PbC|s8dUHw+hZ)L ztD9QcvmArVVCv09e1_0FLvX*km|wWUG^}VX!-%dgh<5y~+2|9^>r=OIJeAU$`Z@yD_mL6z`4ingf5U(smH=G#G-t4rktCP*ebck1O>K ziS(dKwS{kYC4ovrg1&oNO6vGU-S_LoJcB-X_A(tGOy8_?!EkqIN7S)>C%Uu&jKIy_p zNGl8+9ix!;72$Ib?X%`IGrDr(1*C8PaARwi8c3@Tt9IQ%a~FMFJZ2SirP|Tno_gPDJLMYd zD@*^7f-RzXS8P2rL3(h3Dzy>}%VKT%2%hQoV0UqsUDw|LUG}A2AFcEN7tFT7WC%&G zf(h*8B)NZC{-51i!jgE)ejJg5lc$by@DxF44dwQQf&`>7IS;}DlOP47-&9DgTWVMLomq0LezZF9k1u+*GYAEG(?7B$oKF;Oa6z zS?kFhHpdv8{spKs!2}8}fXt2YFd*_IJhAO8G$3t`+#w^Wc-Af;izk>GRdJdIB_x0K z8a>|b{7&Cvo~skGC*!7E4tndl1<07sfs$MR%9Z zgzoc$w?+6IT+b|mS|=EazcirTW)bSRJJ08>U!6aXDA5N4c6q{ z+7FlmT;Ax&-(QblgDIC;0`bfcuT1J}m*5K<#is+5_tu&SM|Y}$a<*|GflyDJYj>B( z=x698=_El4QypHY->HV-*2V$Y6#^w`7d10( zr4pJi!nilq1Qd>BwFq8b>DJuugOepUECo)J`hFPM^C1&7?k;9y={!W&HvM3+6jc;;_xwjg!F2 zT8?`BA`#2!<#G0dTf+}*3xa0%aRxu zEhM@Kk~i&WU%XLY^!U0f?NO^+f%|ku){KJ)6pAy_7{2=8$H_HvSvy~P(L7vyxS?Bc z10&{{H(m;Bl;*R9saj9CbGi==c3+b&K#wCiH|2F=mGBu*r7YijLyy`I(^<(rKYVcn z4`0Es-`G*WQC53Z*5DG+Z?v0*bcU|@FU;+94i*=s%A#S{mD+cATsQRuE5_@~_g(#H zTtA-Xk?=t@+}<*wF49=x(4(^n?OMrKyv5Wwu*7kB3aF={fMNAaw+GO?-v!0u$O4AK zKzL?0_9zfT9bk{Y3k!~XVW-BBAzW(M9JO*+ng1il{<50q>N}QqGC6?xWkp-}fvqlr z4TUhEd{2Rn2`_p*kSok3j27<;(c7ywvy6(KX29jryFT)5!df8Qk6sS47$2xT<0$22 z4`-6=MppE=oHs$1-cGcOPotKBHcoaVo2be0x&-3v{Kxn2lm(7)+cUNdqu(7U^)BltFl)20$QxS|y={2Ij`1!1 z!y;ecc_Y#Xj{71DFggbQRJXUOEw8Y#bpmyjX}7HIj8!l_t0)U4hq7b;E?Uy8Tllr+kuQUrK0x{Unc}4u!w+^EYb2_aeWX&ER;y zLG9cjEwyNN#YXdk`9;4es*TpO9N280X5fiFNlT9YeALl)g9`HR#*AxU71K@BarE;7c?( zM&mZ@z(b>3001mF;W4X_fQ$ok^IY-CbUy7CzN^uES)1e~J9l@jyq{3@(-?#wPdqBR zwwO-9J}s&AEC+NSilx7CC(+R!S*GQ$#G-wfOOK$@8Rwe+b}NcyzGkJe^&L3QYHErK zfUm{a*w{r~%>hO*O;z8y!ipmkCQaOxrwrdaNP52KsOU$lgtF}4rBe47w{B!e%#CT* z{rc#E#XO0RV^oaOXs(twIV(*QH zOXexXH|S#d;nyuswcM`V7#$Sq*|fnM*s1swn6eJU?$mX@zN2%#z(cNq+zuuS`x;vr zc0rzUi-)-id7~iv^Z4wZ3_N7)x9ZFM>oT=N7G`D-?h|CJUET8` zEgR1{lBp+)!m5`dq-q%WtOPm_b>Y{zHYLMdCu@QkEIz6~_0R80r#Mv6 zH51*jvhNX)OL_U-_<+Qwdd6J9kx2;W+agsMt#|orY1Yvz4-isg_g7rNSOhe^KM@ku zwm8OT5Q#|tT8lU(bbWW zk1N8h4uQI=G-)*!JWbUKwD_ZiMs0AH72>%LD;gwJ0h)_j#6mD>oZR2`sdvlN$Gq8* zz{2v^goe(yPyFP1AF@fMeIcX+2!^}XKY@}Jv~!iZ5MrM8!g_m`zIFE{3jpEy44N~N zd%eWO#Jl50d3W?9JR(_ozNCno8daTJ(c-@or|#{_$;lBB7FE}>W*``7Sy(o&q8?g& znclVG@q;6dO~=0GTfmEr50jw771+>sbv*(m12`;%s(8C?)*Uo1A@6u9-xKseL6Xz1 zi=&@KU(eXrMpuL9vv6OlQ4P@=rJAT8AF;5i@L0<;W~KbC+Wh6qGDd>Zc}c|$UBtm|>W!467W9H@Hh?}F@(NYUl- zj^)_utxF^W`9~j2tS>(_{Lzl~e<4x~5A9wavO%L2Wg7iOU<=R^fnPo>wHSk5z z!59@+G)2#J%d7RMqvk!LC#NUB<#o@*MKz>OdcKxnG#Ptz2~pjp@lHXCGvP%S&VPD) z@~@9RfuE}VPVfyY@ePsdm&%(|eGe`+Za`*;W*z*Uk2LnN4af#VcLdl^|DMO~TRO3( z*dVVqQsp^+(QtVl$CGA5=YRa)_|*T-x%9caW zetBBdLaoM-G2lQ*i&h2>T#*6H6IS``%< zQ$!&x$0sLI9mbCmTS`!``aGfh3FB=@8J6OP-{0BQHTL`WrVaFXu$X{lcT&k!_GV0Mgmx4aoaxZfaVu4g+gAmcwCb3yT#vSx`YSY9$?ffii~R7BC0oStpvoCm0UF z8HI{CjGr#nMB}GCkhIwbOCBzgD7ntD8UFy?UWWsJSZmzNrPWn&BjW4JV@gLL-h=Bx zaXNj2Jo^qDDty^x^>%(T0mk9h#=G0}aEyH^LSw_j3!3+S(Z@fle3X2{r8bnm&G12Y z?%~;aWhH+_3%DKEc%4-i{&*HE1Z6t#G~xW5?5~wG!dWY6ERX3h-iC~B)1)VqxVHit zXKa1Qbc4jH;mX(hT#Gd^`7sI?A02gG2QQ=rej$7fE;#^4?Dgv(T#W4pla#a+|1Je? z?O)U>&P8SJU7Iz*dfs8oiT{p>WCiF{AtA}x9B=G{S`5h>$5i*;{dAnDD=1)3?9q%Z z0eA!qm5gSeyg~8n#9s>N;&WX71*h9V=&#+)uJw%Kd!Pc0?3jlocVNjuILBzriRI49 z`npb-XuQ1SV$>{&(3*;Y668*;r9YCsZ?DnguwxuBYzw+!J{~ zOj4t2$Qcj57zU3LWA;BZ0=;Wb)OPI%wc4Rwk-`67uqjut(2h>Bpc}~iI*g0*^14bq z;2}_5&%tz9_X5aItCKZaaX-I|eA6nctgJM) z?_n%u{L%3nssQBbtVTy1wtTgtbgk|%q^_RmEOF}e^TCUIRR*aJ{GI?`L6HD=m}r^5 zC>7?cge3z{&b3hvK0auSlN87ypCQP~6fCR3^F7Xg9++7$4b%%^^OOVD{e zNw-juK}A;=qV~Y+vch7R?G=sws~~E=B{0_b8tr=(wbf^v{dZ^4SNMn)cGUQ1tD`^Q zwlU?|IJug9v(Ao@f-Z;#h3&c74>XQLW*&9)2997iUV%^ZaO-*g6%{5y+pMh>hQMiO z?*nH;vNf3ZudP8W7$l_DxR+&Q7`26y*;H=@{(6Lq{v!7JhKY7u=R=AQ&+Y@`=Y`?k zF-gqu0&poSuHC?We?)fnM1=+a9k1i(k6-%{a6L^lIO$DL^7i5%zS^{Lb>$m>uq}sT zz(zwH))+^^I%i%b$qWyFoUWU6=Z$hX_~Z~<8i*4h=w`YA(@bbA;GG9GZr5zZVewEJ zJN`3UGVan3qO*JCR0L;Z;l-$G%=N22U``2STy;H9Zh~7SrKOE;LJyT|aL;~?TJFQ` zwB%5kmIjZulY>JN-|JSyRc&?k8}7W-#&yuR02I z)Yum}MCP#Etk3XH{QUW;>t#1PtU_RnZ^pb(h(jR^!DS;AuU|0`K++)GSb-Pc!lS1( z!(c4|l=cBl*B@x)V1=vy`!z9KX(2E$5VB=G0pC^p#*xooATPWa=r-)M`Q=EKy~bg> z-pAtvh4-lIOw`Z8**WC4I0Hc=89O_B0c0|Ku>{{8bkuFWu@!`(rnjvZU8;of?7-%| z*{L~#!WWq26FyI1-2mb5N|_iV-ND`5$vLMvhs`Suqk~Jua1q+(e@_F$f}EJx+}c`l z4ighoJfk0~SJM+?&QZ`qqN5@o0-wSc&r&}q$-cgAZpJ3r<}waXHDK2g!7J{wQ)N?L ziLq8icK>+|{9na{MGFC6l-a;@2;TMO+#B1_o>@im*zFAy#Agx`Q$~9y3(|M0|E)dt>H@ zoYTw%hY;cHJn2fG*wc7h0RP?Y!NCglfbG`tl~AjTh*ceLRG{K9CBFf;RXO7F^6k{8u@Hg zur~OK`AluJVZ$v7D;&s)h83c5jMHAfG*^^?QHdNQVthRGEl*<4vhcD@B0j(CHf;-^ z2HC$$d1U)0Je@RmLPXw4zsL#QZfVep`wWptfr?zb&g-P1`GJ~J_oK4qla*ztiirIV z;S|6cWI7F=s1WTnz~~0e1E>}76tPNj=%2x|Q#pgJX3_818bq-V-uas9>UVDi6pgOJ z__%H-d4qQ?HeVauJoNQZva1}Hlwn6!lDy+wlF1*zmRC{X3af-nPHgO*kJ40k>keu* zmgIt&BUd#x@rMiKIc;Ezg1*A^TY=YJ-j{2?C^>cX>b!(Vv1v;0dG#X^enXfEQ4kT~ zt_T@+#WWpisH-o`7^n2%{cie0bX%y(Y0V9kqG=Z&o@1pfa8Mdu7<1lKcniEgkloUp zkucp3X@Pv-#W=lk~+Q&Z5Nd`20rAQz{$oT{yXib8Y>Z0?D|Bw?Ta za3a@Na$o)&Dxk{L3ac^Lgdx?vlaJt*PPL0tEWQhD4BE*9d;2zEV!XcIniOQBA>g$7 zlg@#I2#I2l{-5UF`m4$}XdhJsMY=({M7mT`Hb|Es-61L6At@@ozmC{Mwh-fwmL z;vU0x=gytH&sGWX%CI*Raqfz_8|%|$65po@`d@J$HVpcga&qXBGch4UuT?*D+#QS) z15`Gg&!X#4U5|ov`$U**sK(yX8*UjtG_bImGg|1!*i zhvz&OiAO?N!ZuT&omgw7WWPb^wKduiI3Zyv{xKFDo}wv#7d@4EsUdjqJz4=ak`{oP9t; z%}oP$wIZRofN3vgTuxHcx7=6%Y3Q|z%6t7}Sh>O+vU1?6Wd6o0*F6P~@3B!_t6S(d z!-9nc5f_wR?V{x6=PPNyOL{6&%sCiXS+)6ttoyG@9)L>qS|h^dc$> z%geRo<->=JIUQ_NTvK^>6Zh8v5_VNs^T1{6ffX*-e^R175M&lO+pdbL@`gKky4?6( z)c~*xN~2!kqSH=hic{LU+qeg%Mh5ueB@P+Fs~4z&IBJYG{0Jde5H6&VU!TVm&XwlBXJ?s zHiF6W0_L>zvs3V;Zd<>DB01MUQ#UIs3+zA$tHy66ADDVxS4YBNOCK1(Mp3DH_QbD> znfp`ku_i0S&`uXChWy@s>D6QfYwu;0{z{V-xKIG5O-<7}&&bqmMaN(oNre&trPPY| zNmtu#0j;MxRR`A2)f(C-lB#AbGsG2=9o8Y(FJFUQ8yJ6(l9Gb+VEa-$q_Dn438UaN zhC6mdTiD*(dK1iT&q0KU^CjbHliQ9y>qpG;NL6!%m5G;(OH~uZR}t-28cYfD3`%_B zrKkm9KUaA{lI~B#vaXICe^GY>{%ze`0D6x)*3Qb$&R|lF_bGiXmKV{-qPbCylAXF# zWf(+AA?V7w@%v*f8Da&!u%Gx-t8q8h^q>j%8(1&$sL$RWyr{@X5Y0fKu!|?P?IABo z5cLj)(xMAoNEt1~Hx|}D?qCyIBcT#iriU{)aKhJ|NzE>zqM`shjU)S=N#f4rg$_sb zcF}meCq3eK-Td%b4)tAoArGIN{@ZY3j=$)9;K!Yg@x2|YN7GYqDA4To4=XHV=Nvv3 z{==nV$%*NIUrI$ZA*^v`L*sSq?GxVrGNu@%C>8^oI># zxMU$m4>sALTi(yfJQQED`c*n~Kuy_QblFjpB^RDIuzm_Q)Oa$UEfqbNR=RSCC;q+% zA5+W}5?w8lM7o56I4jrS;-v3#S7}1vrKgw9s)=c$eCzl5a*{!CMQ81)S3##9d3}e; zBy$dda^u>%LWv%-Y9m! z(cMS+$f5a(bEu015EN8b6B3<(`+P9@8v>U|Z5f`Y_0h^m7u33@VC97`=CL8#DoEr; z`mQ0lAP_%0J9`aV5XMhslYiEyGl_(jo7^O|^CA!ORnk(49_?L)j7?Ii5Cf0)ub&b( zG8J`N*_M<%ey_`C$ly5t86Ur=14B9oYKt@wI14)Z`dGZ<;0erostn^XxIUIHeWp9Z zEVz3PsPnF@iFryNjCnv349UYZ7Gac*b zB{XE$M90f^LjT6vrCZ5*>%B%5?50aFC@hOVP%{7I-xv&*S@eSaKv~8wg4}AFX%2 zJqio+*PB}npAeU%?XudD_DV)(SE`QcWUp2KOu=T=ti>)fS-j-q<1*z`#?AS~ITOrbN zG_U80G9%G&@=i3kX23I@w8xU+S{9vTBkhjRH?7xDzS{YiJu4=uRZ6j>uu#zHZ^Zo1 ztN~JzyOx)Z5yQHbDf1&`?i-!eqjQ0uH={N$tOGJpH-vmXv3 zCSsr+0_m!o^TTFuFVRJj4yf@FUZ|HE3V02G^0l?ZowR{!V+As~zchcD0{E+o0n;34 z`?qh4K8??T7I+l^nWu#0*N2I*T~ZSnzwE^`bkc-z&H^fnW^^oA<7#We`vJMnlQn%x zt`_wvFu`=v(t}ysqc!t!k?-#&j(rFCu^(vrWEfG#wqdZw-rbN?VeJJnK32)x5*5mW zNU_q$kEvzJc=8ngrH#J$*=|7#Vi6fQ z6!;>KTX)OB@jJ{4_+EKEql7uvSV5xugcZ)zV%F3+U;9+kS^$9Jg?6k6U!RIl$4Jxf zCKL+C@fB;yP3kTeIt%=noXn3$Lq>uF?(XjX>eZ{9%JU_D@iA5xB=Zr#%@O=(XJ;lj zOxZD_cX2e|t^fs1LPVlZ7J~HCt!Sx9Nw)rr$1uyscdSMy=a6U;>xJb2Pi>yG)b-W) zg`wu~l7S3cVb!u121d4#K)MfTwn#D4d210{c#Ws`9`t&kyykP0tYalI*O%)(ef|2i z=9urOS`r#yq7R>WqgfWHaPo5; zs@CT$}mF#cgaFkDM^F|m%co1cwhE6D~{bW2xHvX!=) zV1?m)XQCW}+Qul0n9mR~(xTup3^l#53|7Le3Gz~`KVUZjcvq+$ZF=Q0OTD*2_xNmu}~G^#<@v6BU4?0(s_z*uz;C zYUhEC)O4uI$&nan@XHkWa63U6aO*uRavYmGsR4z!cpOHIuHJ$jZ?(goimJ!CKa2YO zG2)P+u)Rmb_=CSMg`D)Hai20Wkh7o@j?z3qyqo&&uZ8hJOEM-gYe!BG1o_ zhz$Ot&rzA3y$FZIgGej;iIyW14(eBwugO@@5Di^s;Vkl<=V?rn=fu? zAiyXY>hDvQE{^fHWg~HG%hUI(g*4&|x;X4;A&q|@U`1~hbwT8LmphAqrG&t-XO%E}hoRx(U`jZ=esN;$AXfQezA~-us3=? zN$-i;d7d=Wb%`&?;;b_I#g}N%3? zkx?Se(rMe#fvC>P! zIdZc3H(vFWGDehuVY=o>mrr4e7>QSxWBQZ>O2Vuq{(hy@U>5A(Qy+7G#hTi6(@q>kM>Ks+to<0OX=P8w*rVPl~= zq&N7jwPKGU}0d)**oNQ9g9%URTZ|U z+0u7Dm7Mpu1w#QJjS;!l1n7DKu61NwvVs8`kYWg(4g&|u2A<+>0AwRZ7avE80na|` zvB9=%ZySi^yBNtEgD2X`p3J1Fsp$@KOv(j7QCLa{J3%fk@YymT(IfG=XOJ4cQQMDD z#bJ(X6D?9}xLDoZ4qmBOQE+y3U0~Uf2uP!|TiIvJyR&i?$_pY_U5QX@To0Q>kje*Y z;WEdid;U)?0HAB2E?T(Csz_MV3S&E|4eo~|fhR-#^_A3c%~?B&kl*s~l@>E=x`Jns zkQK6p@k356UKGXeC3=l8aYx)G_tzR&EJ%C6(CEQYHDso4sH?%PqeKgWY%56gk%Wrx zvx(lc#^lFsU`e}_Be4iW9V>rv(gXf2vp7wgkEb-PaUze)ocN;toGwKkOwzR z6c9rZf2f-*_Wnx%sN4Wp{4+!10y4z>nJBd^lQ@*j!SG=-_>f3Rn<*kCztK)u_#+9a zqf(3qrHSg2<*eu%F}<$Fw71@H0575tc@)Olx1eogqGeS6p`5*hmADjHXE5MwI`$ z%2=16AHk7X=c4PX<|9s3l1&HR8&%i>#!eL$KE})1h~}xNe(;U#=c&Q#e9X?i6Yj^9qmV8T6x(2`Mdh{YhkC2%1R|tI=-{g^YkkjaeOj+~=i6VrcmZnx zfh|1GUK6}RtCquIIr1;>ML8Lwci~~{)Y^tJ1d;;93z2V0?~kL{5*pcuMqVy`Tes++ z9h_gn9tW?Y>3R*E;vQ8mFWS57H!$*AKH1F=)teV?i{#gBJT{K6)iaG0oNre29*9aK z((-8`mF<-XhstFUjEJlbi?p|grtjY$59&VCdaD8Y1ZY7qFFb&!tJwmRcMWylg!iaSv?7*$j}X~{8t+82cxT)f!3Qe% zX&c%KkN=r@vqIr5Na-g{&&|X0#qAFudI$|a+c-s@u`g}*&!0q52zq#WCM8UJU>=wn zi21ljs|bdFzn5X^EeAFJo141FBKr~Zv4OMqeVifrNs}*Bb^r%ay~=i($Y0nCsyae% zZYMi8w|jBwf2vVFCoumf^=*Vb?)J;O(|0$3im{d}@rI#4Iy?kBM`4@~$-L+y4OjwL z2(VCk*%q8FPQ{NvbzomW-tl)8UrnvMdlc7SC@FHI=l#HZO%ph2pz*FfJnT)W$s zXtDX0;C@NJIum-t_?4$wd_-QS5s@9B@&BZ!oYoW}e> zpnpuTsR8a_478TD%+;Sfndb|(mVlIOdX4&c=x4xM>t7x(PQhZh`&x@XR7!ry=nN3l z`&%JSWGr^w>{Lyp5&9n0bLDnZx5vX=0?(`UI-|L8zt(M24&XN=tpd z^V=_z$$LBoA$8PWy z3|^?UnF?mBu>q$Cwb3_SCQL41;SzFF%XeTlm=+z_;o>5XXU*)3B-%7R>aW-+2rs?7 z8yob0SJV@ZU2TO0de84-ilAkcmJaOvYcKy+QFKG&FIX@9gVg-e;2=mkYkuADeg7y` zOXH@Bgz@GRt+(@P?NcdftV~?~geJ~l2HhVGVOhlBE2SkbmANhf_-1WO~nx?-4A& z;nSu@Y3&-fkzRO@IQ4#G3M`IGJd{pv}|>T&oqhr z|GMz#|5UtOZo-fxGmV?7R;IU)F51AYEYI&=Y59LUpKPlrYQlb$Ir*Z~=p0`(B)D_v z9!((XY1d8-RG*pa5LWo@=I$iZ?zH!syQ-A4DQJTB`?cXz&Ckq-qNuq0k+b;?nQZV3 zPFd#)-{Xkhntcb0o*~BAlqvYyxzWit>vk^M5>zXaj=6mjlr@ zQ|gwMm7wEKqlhkiI_ce4(RDo#ul)VXB|P=`v)+O2%bnSR=}qkzOnP4d_KKr=&z-gb zpX0|t#6`Ei|5-G45X6^I26a&b{8J#Fg- zjjT{P>&A`0b89YhddwohgZDpM$^I{8`2QdOqT*?pjb~+{ z;ez%<<3$xsn|X_psfIFr;=H8Fhom+E%*myiQ#HIfT8Q)awxNwX-wUi-66M&JFzcgo zb%+s*=H`*_tUa7;a5mhx1}yP$D;a;`rH|wCuxJ5Us2wh+Cdjw(KJ}vilErpIkjsN4$nD(CfQzMaO))n{~2949e7e8!gAUXUkj6Ay~k?C)JaAnVq)LZ zK7+rG{FwtQh|`YqO=y5nj(^9oT5UBR78bVu=Mu?Nk2aQsoP4^{ zJlcvT(KJUnpX&OgJ71MKK^9D;_qJ2!K}&AeJhb(JJ%5id=H%rij_!tUd>0&ib>4d2 z2oY2ZDHYZAXsM5ywsx2=xI-9fa52!w!;!*HfTrjg#a41Ud^R|Bs1p74p^P%t!{ z->8S@Fw_{{H*ygJNfx(B?>S@FNWzpJevDulF5uKs4U?}hQ2anO?;(o2;6)6<>UC{B zJUpOu4u@0uz-qiiO#=Wnjm1N6UYtJ*N0_O~HLZ<|Xk(>&5)C=s zmwIr=zhtDOgo)Ea1-L7PAtn|UrGPW)_rb-8xsFhL7^XlR(h51$P;n$=%`g$4JdqTU*=On#Ivti9ac< zZ+A2mNKrp}-+Op`OnRJ1Y~Zz*prH@tZj7>QGP58rF3+%daEe7CKu-bsIszmZ0;M;% zWoapE>u0J3JQX1D;SKxp6Q1|I^zUWXTx6NjAlWIKGvm3_tjkV}itL4;x;q#u{t42I z!!!xXytdO5a8`8Z zx~Y6wZTuS^U`qf!s-^W{Th!P%dng+!q$egcnG=+?-@)|Qw3HN}rq43qUGC7-n8VPI zq>?`ZE6$!&SW*JAe}po^LPD3z9KKq<{*Y6=d+*+|`vPwwQ1c@nR)Lkj{^=Ky#b?$2O5nQN)Tl|UHERle~1U4k+qbLV7l z@w?w1rBe%D0)r}TY!6)X#otsrfj&Q+QS5RX!30@gQPykqnVt#?vgG1}DPv(~hWS)- zva+tguuQ?1-t?y>rP=IbU+-eWyUQyPviU%MeP?s3=>^Rk5P5@gEo<^1;t(u>XBoPO zM12+T0Z=1(#7@(6`ZtwZG0TpFg@ufY3jQrDD2OZMw1jn#l#+rZXO1E$KV%NPv&h$F zcY{u;=FGXFm$DD>LMtjNgglQYYG6E^o|e`c!8{l?sBZ1r>iI_o$#uro=b&7)=a6ms zxto&TQG6$`E)f2H4v)1jjyOAQ@ABU)On>&8e=h}F*vw2)AGdBsp5Y*&)Jvjf8tm%S z>=loG=Y)UKThKYGzyC%6@S_R(+j8_^V)#ao9ys4_gvST9A8-`%X{012;d-$t1ds_E z%F1^4x~U8rU5lX~xVc$R@_xlNv>RhkoRN@<)5gL@FFD&od5LAobS)9|kI~ zm&5VOV6h1a34{0WbDhp=Hx?zP88QbnbacW)?>7GiVRRA<2E0&oV)mxv-&XxyxB1rL zX7TaygO6_|nvRZ-8`t{z`BhYK>*`5J1hwcWDGg79+~zpkTklzGY=nI-_=v)P4h&4y0M@q| z+3JcU>orkki`;yi`~#-urPn;qzd6vgpm_r=Un`FM&jNtLsJMe+ySfYV85!y6o$`TB z`o^}lkRN0r!5|_e1giz^`;x+FT9AZ9F^vxj^ninb%aWCqy*gC9CYU8XY67*dt*Kg< zc{bBeQgA{(?VouC{<<~u>(@azs1!zDpG3p30&m1DaMb^e6gYu`|X$5ySc(viWCc z9!eHd@nc zkoY5|?h;wAkYU6pCN9`yM#Gx+tbF?Psr59qwYN6+$MC|6p}RZDPopNvy{3&M`_)03 zY>!0K8|(edeQ@fGjn6kAUb#QB3Cy0kpb2*}2<0wT%AaOcNz*SJoWhU<2HrMVwgHe> z9bfqy@#!!#7`ponIr*MGh4N{~dh!Gw8XY9S;Wf98j*h^wCz`6Msv6R-ADk-Z#}}@v z-<)R=YU=EFz%~CjYNk}T-VqMFF*SRJXFxzeadB~%$YY{#@I)ZEW^_wQRaF%VnfjK& z7^>u}!nrWjQv2^!uZty-keJv%FaVnC8xn1h@0EkU-1s=Tav<{u%;!y4WihvafCtog z(@90~VLu5B^9pXw)8_6mOar^IN`adsO%I38`Hm74oB3RvfC+qFPycL}H?yfzcE@&}@ z4bk1zWzv9LLu>)vpBYd?;o$#(@{7vu0S#%12-2pKgF28#&>@LCTro_auZy_>a(*quvsx)@bU3! zYH5W^IYMp|GOS)+UeJ_XG62=ZZ>4K&VAdLRs2f*^Fm|NeOAb?)=w@VM$}cWX2l_fC zg?lpwP$_I3Vehl5C&tt`A2Ks{*4F_qCXJ_9{XE)nLxsa6WyS6W;(O zIV`133m3ql6WRFJYwMm|Tr`!F&1{_!O~1S#0bAP#1I~t`eVk$EMW2O8LBDzsZF;X(RMFoN*QD=4`PE!}eycRz4XVdCv#`U0xQt9M*q0!5VrFJ$ zFN6UfInNT~T`v1GmltGMQ^s%y5zW-hV7MYgp?_aBqkJ5W7??7{;kH|(X2=-+ZD63l z4tsky`xrv8CD=%=;*UG|iJwy_?ePJvl~3&IOU4s>I9fBJLw;srnW6H@<|F(r86 zo$<-Gomej|T)p`)f2bnJ|RFAuQ^ zWv$3fjyPVP;c>D&_?%ceDN9RBK%k0>*xM)Y-Gi)=k&yrd;3J{e7$P!eX2^)&q-LtW zs)(hmj{9DY&&QWMX}!N@0S-X&9&pU|Q64mA;H~C`&T}}t*T8~*(#9Jo5h)?TLJ=sd zn5lCx2I%+N-g;yps-Iy6%#noCgJMVsz!1zUjLe(O%f(d=E&)bTLR@nVg-*V&(`t)~ zFh;xN#LiM3EC0R<-}}pzf|Zb*k^;%jcisaNPG)8dBpB-t4cW7+s#J+b?R9yhM(sX1 z5O#T5gR;VbV8!)+Iwe0&PGF~c!FeB8*;rd!+u9OxUVRB-3d?TnNlqE0rVU-GV5cUk z)e}vhzxtw_@BXZ%tn4K`v-?cur?Z#aZs{pwtDeC~u!nmpVH%PkH}^sn2^oieRlO1e zxzkIk6`C`@yqc>-S9N(a3sCb0d6S!vHOCCc{#Wy#_(X}!$b?AL8Of6X>mMfEfOq)i zJ|$8r^3`&9-dFx>aD8MT=$nO6>e8OF6|0GS5Nz)j=b6%L0b@$)>#q(-ltD{QS%E6t-u$9xod8wc$kLp_VBv@ zfC#Ku6<3qeJg0uzs0(CXDo7N{Gp~$iG)$Hhaak4qUc8)>GP$iitmf7x?FJB<=0fRm%_3byHZwQx$)Ew)l!Q&v# z6Q+?g`MBJ&6K$)e{dL(jAiB=KcQ~WVp8HSWMi)c!ksnslDN`DFgP;BVi3tfZFF4h1 zo2K@fFfcIK`;HEqL}EmlHbKqse$aNdCuA&PSTCsW5R@G8H5THZpPbY^D=tx0Q=@q1 z4z11Z*47yN`w$|ARJ+b_R}HVOGN#e(jz*I4(g&-jB|4mbh_D}3-Hqo5WNm8tFzq>x z?#F3{CPNIx9OcvPop)3|?%;Oq`JN#V2tK}vkrC&Gj{AS2HQ0WVeQ))s+{oH=_uiVU z?0y+gf~Vmd-NtdtTg*3_rdI;8Rv?5Kbq0W%Zh`lGZwN|DdAX8CC*_!e-sT%kZsYO^ z0D14ok$0N^QC48jO@P3VJi{Fg(mW3hUo#7vW(Ke&H?uwyl;`aMFk)h37b^Y}F#oyS zn{X^;@Y9WV$YNROF>nZw#cP8YzXyDS)$TJ_Xr(I2%L5y729OS0$e%h^dM+oowQ;ur za+`0T`%G%m;6!)Beri3;;doH`d|I%H=V+EX`?(L0HiC8=kVWA13o*o$zY8NjEgM~$+w~IP$GBH-IeBohRUZBxW^shxePazKk*@E5u} zl^7oZ_3lAy|F`%+RKb2)!7huj;m4?ht5TZp;LQPnAY6Y@f^I8yK{IIpn&AeOsVpc z7mwB|AW(-SAK1?l-TL9tQB!0h$oT`_B70Rn!Ts#n=D}%%vn@P?n*nh8Z6ky!bCr-Nus*^w~NM#zum_4APx(P2N2gXbE!o_K` zUP|NPkdD?lEJ^|aWQ(7p3Noif9jK3CcGSNQo4|VIhHn9l2DC=K$d6f>eP-*9duzS@ ziGeC-H%uFALsamsTiEYp#Gk7Q3qy|k$XfHm`QSj53iakUMxY0QWomQF2DX6&L%-fJ zr?wU}3A2Nvz+C{hQ17^m=D3!%1d|CsDbxJ=pS=bV%wP7jc6B`lYze@COYqF|$I3x< zZLORm+GI#RyZpn?%K4C9-|!M^{1#!LqGD_`@RuM+JW(WmQ!X zAQ%eu1p{#QlVR*?50N2gxZsUPKEFQ#A3!?I=n+5Sw_RfmRF|U?7ag!GtaOIjO1wl$e-!ZDJl2JW~23RvLC5 zNQh_mG=S|hMGb~|OYL+b+U*srUWsi26+#aP2OrNi)KGe<%&%@BZ-tKO0Em#hO%8<* zQo?7kt5txbAYSm=@ti&XM%?ldI~C9c^pnt=&j9iPB)dT#NNHeycDM%4x~}enV$4Sd z&V#UG%I}sy3jiwkQqOTiBVX+&0nuWZ4;3F}A2wR|fu5L0H+U&mz5(S2?Wh&y<+#a9 zOU}x*rM{ON(8-)2OCjJaO>F1Ux%ZD z@o?m;9@%=F9HF_-HAJ0t?yl+Vl($Vv9oYU#FE=4R{ws}WCfyXcIYt8i@qq7-v(~)) zcg?=y(__+tJRHg~5OQY#5;c+!hv+;aoPb;CLl%d-nc=jw*jBcC70NG~y!(Kwg6wbj z9^e$m{%8F_ga7zJF6`rFZ*LFI(-zS+q6VZ0f-B452t2?pcL#mE&;7V#D9xR>AAgBT zAs@b~1B{VwCUyQi6nB)RUVRJH5WT4nc`r<}ln>d+7`C^R6TZ>LB#3cP;N72e^y*n6i6Y%re$$xZ2EvQIU|Wi6%f76l(ZR( zF>3@3r~D6IeK^vwGVg%TrFpC+BO?QNIl{PKOjisZ(kT);?h)Iy0G-`Yh?GSy*gEVu z3@H_F!`iYkdnj`T>TUTu;e^nfdI3jJPP_+T7Tkp>d{CeR4g|Y*7~|k04aHIFs;;1v zr6c@3@JmA14;^u$Z0h2mxe3H3F)4kc zFGfP1eq|eMEb*axiP@10-%Atpe2p zhY6<2NNHP-OVnqv#N5aD#$m9qOvY;)5g7?fy-G2`6y_{-M{`Qw_tIraYfwe3Ef9SL zwXedcTvJBo{;yOvMTh}_DB-rC`!Cu#4%iQ^M!hB@4f?bjq^>p44C)mSe^b=dQ@TXks;lSP+vW8A@!XN7%lS?mB0fHz;KN)xPKDM@{QES<+7h)gUe~IhN_+9&)lc5p z_>t;cboce%7zOF%=CXwOmw=7qlLm3=hSS{J` z^|V;#)aXXT7(?OX5iHd+D3b2}@aFahcZh0I($j;!iugaA#$EZYxI08bK_T%m-&6~l zZzYo#b~#v#`!p2jGEC;xv24EV0O|n>4(j^mPCmwqjz2{!0xXb`5&Yf%F_N|E!-o&S z`j#+=n3{jwZdx?#6qU}2G#z7`)csI!Oi zFrf8-0~8M@A*L<%~k>0Iay5x45HQDwbh)(G7@=HtI6p+Ie z#uOVMHU>xzrEQQu0WKG!F#(O=Vg>#HAX+c_TAfK9k4i#T>2tsj<9_?7>pcXt9_S9k z|NNJ3+#ckC=*UDNGdHreVQ?*gNE7ze|BGuoU56Xpz06V{2%RKw-ajidAwS?(4AY-) z#v}WRj~q>wGm?3InrSyx!!|pN-TxNl$M*8$D}2!m%Ku{0kacxAG~~S*lJ!?2f7hRE zhjrVc5E;3@6l9yZ%jq26tIaeDnHtD0R1t-J`JO~lR8+JH2@?;}0_aTx03Yf)wgK(V z!0L5Gs{D9rMEz~#ZIR8kcCr_r)RN>c8TSI+r{n<;4R&>P?cPXIaCXESOSF@yb8JRP zuR*}tqk$?~y(AnR|A!H+YXFq|+Y{N3M%q(R%DfnTL;zmN&=k1_%1dO1pRj)&4c?himf6r z)j_ah!v|8EE@!v2sz-*&Feo4NG%}n^i*o;YF!lX?;4=~o9v&V6iar;^do`?9FyYC} ztZPyx#>{}J8j=&>+}qZS?M}8f?y-{*1d#jm2^@PG_$!#2E+@4d=71@XJAi6eJ_57{ zu~;69ecvhUrN&#Cm+(}tHvcI=9PwHB`R+4EJy2kO%E!0rMY2by*;9{7lX_F*q4O4e zlLJ54{7jQuH^@3A#nJ4kn-QO|phLqhTll;zo0hNMy+(z|mGx{EuI95(9C(NokB?mR z+z_txCdr_>vu+gYEWP!y=z7|q%>+{=S}yS3o|luDz3Pn+rw!SIaPeyhKKkoE90R7H zubU7M=(3xGoaF7nvYw9{9)zds2GlStqWOZv|fX|Qx> zk={{zXJ-(#?V{Kdt(IG+JLu=nSd}*aoqnD{J&x3zI&^f&;m&GbXPI{QwED-JNx6+- z!CJEG1sf*)f3MZ*e)QP(_r6#@WnIP2j%TX0e&UV4KLRCCJwzh^cppn*_Z4836|wRL zqp%=#e={@f@CO2daN)H%C)drZd^lSd(zV3wx}2=SH8z=i4xhk278hf7Eg{M2X&q>yX=pp4V5vyb* zAO*B}7MuGkf)^6TXcA<-Z!+;bDc$(0pnwwcDCjqusM58B&avOqnFBDC(mrPLi(}*C z#CXwL@q3KjN00FKRutbDk(Ea1TLN9A)UzQ~g^!ydcvX*iE zlXNzF#glV)j`X0aT@+^Dag~kMR1_X*zgA)v3E}f!!ZOcM_ksbRn&V#*d*rl^=^T#h z$@@yOQ$?q1G?&{OK42M)(m1Jy%k1e1DcY$%M$&LjrW7nKSzMlS(rZ{KK##pMUPyXU z7REh3Gsn`9XiBGomK*aaLQb<(h1k98DNzM`GrG>$<#Ofl*{aJ#2uxNsw%y$MZJrp} zuUW&;x4n4jIj=oZ;G0yt8qH19aihCmaaH6X-QZvy$}AL=aA?-2=3e+R#NEAs)R*o{ uNrq@fGmAEgm33h5XUxnvOQ>7Jzw+&5WS7Ymr2ldYUNRC2;w7Sn{{IihT~0ax literal 298725 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

-
-

기본사항

-
+
+
+

기본사항

+
공사비 입력사항
-
+
)} @@ -590,7 +591,7 @@ export default function ConCostForm({ }} value={field.value ?? 0} readOnly - className={readOnlyInputClass} + className={`mt-2 ${readOnlyInputClass}`} /> )} @@ -645,22 +646,23 @@ export default function ConCostForm({
-
- + +
)} -
+
Date: Mon, 11 May 2026 15:03:12 +0900 Subject: [PATCH 16/39] =?UTF-8?q?[as]=20feat:=20=EA=B2=B0=EC=9E=AC?= =?UTF-8?q?=EC=84=A0=EA=B4=80=EB=A6=AC=20=EC=8A=A4=ED=8E=99=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=20=EC=B4=88=EC=95=88=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/docs/approval-line-management/SPEC.md | 358 + pnpm-lock.yaml | 11928 ++++++---------- 2 files changed, 4614 insertions(+), 7672 deletions(-) create mode 100644 apps/as/docs/approval-line-management/SPEC.md diff --git a/apps/as/docs/approval-line-management/SPEC.md b/apps/as/docs/approval-line-management/SPEC.md new file mode 100644 index 000000000..42e9999c1 --- /dev/null +++ b/apps/as/docs/approval-line-management/SPEC.md @@ -0,0 +1,358 @@ +# 화면설계서: 결재선 관리 + +## 1. 기본 정보 + +| 항목 | 내용 | +| ---------- | -------------------------------------------------------- | +| 버전 | 0.1 (초안) | +| 프로세스명 | UI설계 | +| 화면명 | 결재선 관리 | +| 화면 유형 | [x] 조회 [x] 입력 [x] 수정 [x] 삭제 [ ] 출력 | +| 메뉴 경로 | 디지털행정지원 > 사이트관리 > 결재선 관리 | + +--- + +## 2. 화면 목적 + +전자결재 처리에 사용할 **결재서식**(템플릿)을 등록·관리하고, 각 서식별로 **결재선**(접수 → 검토 → 최종승인 단계)을 구성한다. 좌측 상단의 결재서식 목록에서 하나를 선택하면 하단 영역에 해당 서식의 결재 단계(결재자/순서/구분)가 표시되며, 사용자는 결재자 추가·수정·삭제와 결재선 저장을 수행한다. + +--- + +## 3. 화면 구성 + +### 3-1. 전체 레이아웃 + +``` +┌──────────────────────────────────────────────────────────────────────────────┐ +│ 페이지 타이틀: 결재선 관리 브레드크럼: 디지털행정지원 > … > │ +├──────────────────────────────────────────────────────────────────────────────┤ +│ [영역 A] 전자결재선 관리 목록 [서식 등록] │ +│ ┌──────────────────────────────────────────────────────────────────────┐ │ +│ │ 전자결재서식아이디 | 결재서식명 | 문서구분 | 등록일시 | 관리 │ │ +│ ├──────────────────────────────────────────────────────────────────────┤ │ +│ │ TMPL-0001 (선택 행 강조) … [수정][삭제] │ │ +│ │ TMPL-0002 … [수정][삭제] │ │ +│ └──────────────────────────────────────────────────────────────────────┘ │ +├──────────────────────────────────────────────────────────────────────────────┤ +│ [영역 B] 결재선 관리 선택된 서식: TMPL-0001 │ +│ ┌──────────────────────────────────────────────────────────────────────┐ │ +│ │ [영역 B-1] 결재자 입력 폼 │ │ +│ │ 결재선아이디(자동발급) | 결재구분 ▾ | 결재자명 [검토인력 선택] │ │ +│ │ 결재순서번호 [결재자 추가] [결재선 저장] [초기화] │ │ +│ ├──────────────────────────────────────────────────────────────────────┤ │ +│ │ [영역 B-2] 결재선 그리드 │ │ +│ │ 결재선아이디 | 결재순서번호 | 결재구분 | 결재자명 | 등록일시 | 관리 │ │ +│ │ APLN-0001 | 1 | 접수 | 김민수 | … |[수정][삭제] │ +│ │ APLN-0002 | 2 | 검토 | 박지훈 | … |[수정][삭제] │ +│ │ APLN-0003 | 3 | 최종승인 | 이서연 | … |[수정][삭제] │ +│ └──────────────────────────────────────────────────────────────────────┘ │ +└──────────────────────────────────────────────────────────────────────────────┘ +``` + +### 3-2. 화면 데이터 흐름 + +``` +BEGIN + + // 최초 진입 + CALL TBD.결재서식목록조회() + DISPLAY 결재서식 그리드 (영역 A) + DISPLAY 빈 상태 안내 (영역 B) // 서식 미선택 시 폼·그리드 비활성 + + // 영역 A: 서식 행 선택 + ON 영역 A 행 CLICK DO + SET 선택된 서식 = 행.전자결재서식아이디 // 영역 B 상단 라벨에 표시 + CALL TBD.결재선목록조회(서식아이디) + DISPLAY 결재선 그리드 (영역 B-2) + RESET 결재자 입력 폼 (영역 B-1) + END ON + + // 영역 A: 신규 서식 등록 + ON [서식 등록] 버튼 CLICK DO + OPEN 결재서식 등록 다이얼로그 + ON 확인 DO + CALL TBD.결재서식등록(서식정보) + CALL TBD.결재서식목록조회() // → 영역 A 갱신 + END ON + END ON + + // 영역 A: 서식 수정·삭제 + ON 영역 A [수정] 버튼 CLICK DO + OPEN 결재서식 수정 다이얼로그(선택 행) + ON 확인 DO + CALL TBD.결재서식수정(서식아이디, 서식정보) + CALL TBD.결재서식목록조회() + END ON + END ON + + ON 영역 A [삭제] 버튼 CLICK DO + CONFIRM "선택한 결재서식을 삭제하시겠습니까?" + CALL TBD.결재서식삭제(서식아이디) + CALL TBD.결재서식목록조회() + IF 삭제된 서식이 현재 선택된 서식 THEN + RESET 영역 B (그리드 비우기, 폼 비활성) + END IF + END ON + + // 영역 B-1: 결재자 입력 폼 + ON [검토인력 선택] 버튼 CLICK DO + VALIDATE 서식 선택됨 // 미선택 시 안내 후 종료 + OPEN 검토인력 선택 다이얼로그 + ON 선택 DO + SET 결재자명 = 선택인력.성명 + SET 결재자ID = 선택인력.사용자ID // 내부 상태로 보관 + END ON + END ON + + ON 결재구분 SELECT CHANGE DO + SET 결재구분 = 선택값 // 접수 / 검토 / 최종승인 + END ON + + ON 결재순서번호 INPUT CHANGE DO + SET 결재순서번호 = 값(숫자) + END ON + + // 영역 B-1: 결재자 추가 (그리드에 행 추가, 미저장 상태) + ON [결재자 추가] 버튼 CLICK DO + VALIDATE 서식 선택됨 + · 결재구분 입력 + · 결재자 선택됨 + · 결재순서번호 > 0 (중복 시 안내) + ADD 입력 폼 값을 영역 B-2 그리드에 임시 행으로 추가 + RESET 결재자 입력 폼 (영역 B-1) + // 결재선아이디는 저장 시점에 서버에서 자동 발급되므로 + // 임시 행은 클라이언트 임시 키로 식별 (예: APLN-0007 같은 미발급 표기 또는 임시 ID) + END ON + + // 영역 B-1: 결재선 저장 (그리드 전체 일괄 저장) + ON [결재선 저장] 버튼 CLICK DO + VALIDATE 서식 선택됨 · 결재선 1건 이상 · 순서번호 중복 없음 + CALL TBD.결재선일괄저장(서식아이디, 결재선목록) + CALL TBD.결재선목록조회(서식아이디) // → 영역 B-2 갱신 + TOAST "결재선이 저장되었습니다." + END ON + + // 영역 B-1: 초기화 + ON [초기화] 버튼 CLICK DO + RESET 결재자 입력 폼 (영역 B-1) → 기본값 + (결재구분=접수, 결재자명="", 결재순서번호=1) + END ON + + // 영역 B-2: 그리드 행 수정·삭제 + ON 영역 B-2 [수정] 버튼 CLICK DO + OPEN 결재자 수정 다이얼로그(선택 행) + ON 확인 DO + CALL TBD.결재선수정(결재선아이디, 결재선정보) + CALL TBD.결재선목록조회(서식아이디) + END ON + END ON + + ON 영역 B-2 [삭제] 버튼 CLICK DO + CONFIRM "선택한 결재자를 삭제하시겠습니까?" + CALL TBD.결재선삭제(결재선아이디) + CALL TBD.결재선목록조회(서식아이디) + END ON + +END +``` + +--- + +## 4. 영역 A: 전자결재선 관리 목록 + +선택된 결재서식이 영역 B의 작업 대상이 된다. 행 클릭으로 선택 상태를 표시(좌측 컬러 바·배경 강조)한다. + +### 4-1. 헤더 / 툴바 + +| 항목 | 내용 | +| ---------- | ------------------------------------------------------------- | +| 섹션 타이틀 | 전자결재선 관리 목록 | +| 우측 버튼 | **[서식 등록]** — 결재서식 등록 다이얼로그 오픈 | + +### 4-2. 그리드 컬럼 + +| 컬럼명 | Field | 타입 | 비고 | +| ------------------ | -------------------- | ------ | ------------------------------------------------- | +| 전자결재서식아이디 | `elctAtrzTmpltId` | string | 예) `TMPL-0001` (서버 자동 발급, TBD) | +| 결재서식명 | `atrzTmpltNm` | string | 예) `설치인가 검토 결재` | +| 문서구분 | `docSeNm` | string | 예) `설치인가`, `기본계획` (코드/명 매핑 TBD) | +| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | +| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | + +- 행 클릭 시: 해당 서식을 **선택 상태**로 만들고 영역 B 라벨(`선택된 서식: {전자결재서식아이디}`)과 영역 B-2 그리드를 갱신한다. +- 페이지네이션: TBD (스크린샷에는 미표시). + +### 4-3. 버튼 + +| 버튼명 | 위치 | 동작 | +| ---------- | ------------------ | -------------------------------------------------------------------- | +| 서식 등록 | 섹션 우측 상단 | 결재서식 등록 다이얼로그 오픈 (입력 항목·필수값 TBD) | +| 수정 | 행별 | 결재서식 수정 다이얼로그 오픈 (해당 행 값으로 초기화) | +| 삭제 | 행별 | 확인 다이얼로그 후 삭제. 선택 중인 서식이면 영역 B 상태도 초기화. | + +### 4-4. 다이얼로그(개요) + +| 다이얼로그명 | 트리거 | 입력 항목(예상) | 비고 | +| ---------------------- | ---------------- | ------------------------------------------------ | -------------------------- | +| 결재서식 등록 | [서식 등록] 클릭 | 결재서식명, 문서구분(드롭다운) | 등록 성공 시 영역 A 갱신 | +| 결재서식 수정 | 행별 [수정] | 결재서식명, 문서구분 | 기존 값으로 초기화 | +| 결재서식 삭제 확인 | 행별 [삭제] | (확인/취소) | | + +--- + +## 5. 영역 B: 결재선 관리 + +영역 A에서 선택된 결재서식을 기준으로 결재 단계(접수·검토·최종승인)와 결재자, 순서를 관리한다. 영역 B는 상단 **결재자 입력 폼(B-1)** 과 하단 **결재선 그리드(B-2)** 로 구성된다. + +### 5-1. 헤더 / 상태 표시 + +| 항목 | 내용 | +| ------------ | ------------------------------------------------------------------------------------- | +| 섹션 타이틀 | 결재선 관리 | +| 우측 라벨 | `선택된 서식: {전자결재서식아이디}` — 영역 A에서 선택한 서식 ID를 강조 색으로 표시. 미선택 시 영역 B 비활성. | + +### 5-2. 영역 B-1: 결재자 입력 폼 + +#### 필드 정의 + +| 표시명 | 입력 유형 | 필수 | 기본값 | 데이터 소스 | API 파라미터 매핑 | 비고 | +| -------------------- | -------------------- | ---- | ------------ | ---------------------- | ----------------- | --------------------------------------------------------------- | +| 결재선아이디(자동발급) | 텍스트(읽기 전용) | — | `APLN-XXXX` | 서버 자동 발급 (TBD) | TBD | 입력 불가. 저장 시 서버 발급. 표시값은 미발급 자리표시(또는 임시 ID). | +| 결재구분 | 드롭다운 | 예 | `접수` | 코드 (TBD) | TBD | 옵션: **접수 / 검토 / 최종승인** (그리드 행 기준) | +| 결재자명 | 텍스트(읽기 전용) | 예 | `""` | [검토인력 선택] 결과 | TBD | 자유 입력 불가. 다이얼로그 선택 결과로 채움. | +| 결재순서번호 | 숫자 입력 | 예 | `1` | — | TBD | 1 이상의 정수. 동일 서식 내 중복 검증 필요. | + +플레이스홀더 / 표시 텍스트: + +- 결재자명 입력란 플레이스홀더: `검토인력을 선택하세요` +- 결재선아이디 표시 예시: `APLN-0007` (다음 발급 예정 번호 노출 또는 빈 칸 — 표시 정책 TBD) + +#### 버튼 + +| 버튼명 | 동작 | +| --------------- | ------------------------------------------------------------------------------------------------------------- | +| 검토인력 선택 | **검토인력 선택 다이얼로그** 오픈. 선택 시 `결재자명`과 내부 `결재자 ID`를 폼 상태에 반영. | +| 결재자 추가 | 입력 폼 값을 영역 B-2 그리드에 **임시 행**으로 추가하고 폼을 초기화한다. (서버 호출 없음, 저장 시 일괄 반영.) | +| 결재선 저장 | 영역 B-2의 결재선 목록을 일괄 저장 API로 전송한다. 성공 시 그리드 재조회 + 토스트 표시. | +| 초기화 | 입력 폼을 기본값으로 리셋(결재구분=접수, 결재자명=빈값, 결재순서번호=1). | + +> 정책 메모: **[결재자 추가]** 와 **[결재선 저장]** 의 분리에 대해서는 두 가지 운영이 가능하다. 본 SPEC 초안은 그리드에 임시 행을 누적해 두고 [결재선 저장] 시점에 서버에 일괄 반영하는 모델을 가정한다. 실제 구현 방식(추가 즉시 저장 vs 일괄 저장)은 백엔드 API 확정 후 재정의(TBD). + +#### 다이얼로그 + +| 다이얼로그명 | 트리거 | 표시 내용 / 입력 항목 | 결과 | +| -------------------- | -------------------- | -------------------------------------------------------- | --------------------------------------------------- | +| 검토인력 선택 | [검토인력 선택] | 사용자 검색 필터(이름/소속 등 TBD), 사용자 목록(단일 선택) | 선택된 사용자 정보를 입력 폼에 반영 | +| 결재자 수정 | B-2 행별 [수정] | 결재구분, 결재자명(선택), 결재순서번호 | 확인 시 해당 행 갱신 | +| 결재자 삭제 확인 | B-2 행별 [삭제] | (확인/취소) | 확인 시 해당 행 삭제 | + +### 5-3. 영역 B-2: 결재선 그리드 + +#### 그리드 컬럼 + +| 컬럼명 | Field | 타입 | 비고 | +| -------------- | ---------------- | ------ | ---------------------------------------------------------- | +| 결재선아이디 | `atrzLineId` | string | 예) `APLN-0001` (서버 자동 발급, TBD) | +| 결재순서번호 | `atrzSeqNo` | number | 1부터 시작. 단계 순서. | +| 결재구분 | `atrzSeNm` | string | `접수` / `검토` / `최종승인` | +| 결재자명 | `atrzUserNm` | string | 검토인력 선택 시 채워짐 | +| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | +| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | + +- 표시 정렬: 기본 `결재순서번호` 오름차순. +- 임시 행(서버 미저장)과 저장된 행의 시각적 구분 필요(예: ID 컬럼 표기 또는 행 스타일). 세부 UI는 TBD. +- 페이지네이션: TBD. + +--- + +## 6. API/DTO 명세 + +> 본 화면은 현재 UI 위주 초안으로, API/DTO는 백엔드 명세 확정 후 채운다. + +### 6-1. 공통 + +| 항목 | 내용 | +| ----------- | ------------------------------------------------------------------- | +| Base prefix | TBD (예: `/server` 또는 결재 서비스 prefix) | +| 인증 | JWT 토큰 기반 (Authorization 헤더) | +| 클라이언트 | TBD (예: `@/entities/approval-line`) | + +### 6-2. 전자결재서식 (영역 A) + +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| --------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | +| 결재서식 목록 조회 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 등록 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 수정 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 삭제 | TBD | TBD | TBD | TBD | TBD | + +### 6-3. 결재선 (영역 B) + +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | +| 결재선 목록 조회(서식별) | TBD | TBD | `{ elctAtrzTmpltId }` (TBD) | TBD | TBD | +| 결재선 추가/일괄 저장 | TBD | TBD | `{ elctAtrzTmpltId, lines[] }` (TBD) | TBD | TBD | +| 결재선 수정 | TBD | TBD | TBD | TBD | TBD | +| 결재선 삭제 | TBD | TBD | TBD | TBD | TBD | + +### 6-4. 검토인력 (다이얼로그) + +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | +| 검토인력 목록 조회 | TBD | TBD | TBD (검색 필터) | TBD | TBD | + +--- + +## 7. UI 구현 가이드 + +### 7-1. 기술 스택·원칙 + +- **공통 컴포넌트**: `@common/components` (버튼, 셀렉트, 인풋, 카드 등 기존 패턴 재사용). +- **테이블**: `@tanstack/react-table`, 프로젝트 표준 `useDataTable` 패턴이 있다면 동일하게 적용. +- **데이터**: React Query 기반 조회/뮤테이션. API 확정 후 `queryKey` 와 무효화 정책 정리. +- **상태**: 영역 A의 **선택된 서식 ID**, 영역 B-1의 **결재자 입력 폼 값**, 영역 B-2의 **임시 결재선 배열**은 페이지 로컬 상태로 관리. 다이얼로그 상태(검토인력 선택 등)는 컴포넌트 로컬 상태 또는 가벼운 상태 관리 훅으로 분리. +- **모의 데이터**: 백엔드 명세 확정 전까지 `@faker-js/faker` 로 그리드 목데이터 구성(스크린샷 컬럼/값과 동일 형태). + +### 7-2. 모듈·파일 배치(제안) + +| 구분 | 경로 | +| ---------------- | --------------------------------------------------------------------------------------------- | +| 라우트(App Router) | `apps/as/app/(with-base-layout)/approval-line-management/page.tsx` | +| 페이지 컴포넌트 | `apps/as/src/pages/approval-line-management/index.ts`
`.../ui/approval-line-management-page.tsx` | +| 위젯(영역 단위) | `apps/as/src/widgets/approval-template-list/`
`apps/as/src/widgets/approval-line-editor/` | +| 피처(상호작용) | `apps/as/src/features/approver-picker/` (검토인력 선택 다이얼로그) | +| 엔티티(도메인) | `apps/as/src/entities/approval-template/`
`apps/as/src/entities/approval-line/` | +| 그리드 컬럼 정의 | `entities/approval-template/model/approval-template-table-columns.tsx`
`entities/approval-line/model/approval-line-table-columns.tsx` | +| API 클라이언트 | `entities/approval-template/api/*`, `entities/approval-line/api/*` (TBD) | + +### 7-3. 영역별 UI 매핑 + +| 영역 | 주요 UI | 비고 | +| ----- | ----------------------------------------------------------------------------- | --------------------------------------------------- | +| A | 섹션 헤더 + Button(`서식 등록`) + DataTable (행 선택, 행별 Action 버튼) | 선택 행 강조, 행 클릭으로 영역 B 갱신 | +| B 헤더| 상태 라벨 `선택된 서식: {ID}` | 미선택 시 영역 B-1·B-2 비활성 | +| B-1 | 읽기 전용 Input(아이디), Select(결재구분), Input+Button(결재자/검토인력 선택), NumberInput(순서번호), Action 버튼 3종(`결재자 추가`/`결재선 저장`/`초기화`) | 폼 유효성 검증 후 그리드에 임시 행 추가 | +| B-2 | DataTable (행별 [수정][삭제]), 임시 행 시각적 구분 | 기본 정렬: 결재순서번호 ASC | +| 공통 | Dialog(검토인력 선택, 서식 등록/수정, 결재자 수정, 삭제 확인) | 디자인 시스템의 `Dialog` 컴포넌트 사용 | + +### 7-4. 데이터 흐름(요약) + +- **진입 시**: 결재서식 목록 조회(TBD) → 영역 A 그리드 렌더. 영역 B는 안내/비활성 상태. +- **서식 선택 시**: 선택된 `elctAtrzTmpltId` 를 페이지 상태로 보관 → 결재선 목록 조회(TBD) → 영역 B-2 그리드 갱신. 영역 B-1 폼 초기화. +- **결재자 추가**: 입력 폼 값을 영역 B-2의 **클라이언트 임시 배열**에 push. 결재선아이디는 미발급 상태로 표시(또는 임시 키). 폼 리셋. +- **결재선 저장**: 임시 배열 + 기존 그리드 행을 합쳐 일괄 저장 API(TBD) 호출 → 성공 시 그리드 재조회 + 토스트. +- **수정/삭제**: 각각의 단건 API(TBD) 호출 후 그리드 재조회. +- **검토인력 선택 다이얼로그**: 사용자 목록 조회(TBD) → 단일 선택 → 폼의 결재자명/결재자 ID 갱신. +- **서식 등록/수정/삭제**: 다이얼로그 또는 확인 후 단건 API(TBD) 호출 → 영역 A 그리드 재조회. 삭제 대상이 현재 선택된 서식이면 영역 B 초기화. + +### 7-5. 미확정 / 검증 필요 항목 (TBD) + +- 모든 백엔드 API 경로·DTO·필드명. +- `결재선아이디(자동발급)` 입력 박스의 표시 정책: (a) 다음 발급 예정 번호 미리 보여주기, (b) 저장 전에는 빈 칸 또는 자리표시자만, (c) 임시 ID. +- `[결재자 추가]` 의 동작: 그리드에 임시 누적(현재 가정) vs 즉시 단건 저장. +- 결재구분 코드 값(`접수`/`검토`/`최종승인`)의 코드 매핑. +- 문서구분 코드 값(`설치인가`/`기본계획` 등)의 코드 매핑. +- 영역 A·B 그리드의 페이지네이션·정렬·검색 필터 유무. +- 검토인력 선택 다이얼로그의 검색 필드(부서/직급/이름 등) 및 다중 선택 허용 여부. +- 결재선 저장 시 순서번호 중복·누락(예: 1, 2, 4) 허용 정책. +- 권한(역할별 등록/수정/삭제 가능 여부). diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb268f2c1..d8cc097be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,18 +1,19 @@ -lockfileVersion: "9.0" +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false overrides: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 lodash.isequal: ^4.5.0 source-map: ^0.7.4 importers: + .: dependencies: chart.js: @@ -31,22 +32,22 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@next/eslint-plugin-next": + '@next/eslint-plugin-next': specifier: ^15.3.8 version: 15.3.8 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/react": + '@types/react': specifier: ^19.2.7 version: 19.2.14 - "@types/react-dom": + '@types/react-dom': specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) - "@typescript-eslint/parser": + '@typescript-eslint/parser': specifier: ^8.56.1 version: 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-simple-import-sort: @@ -64,25 +65,25 @@ importers: apps/_template: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@common/network": + '@common/network': specifier: workspace:* version: link:../../packages/common/network - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.75.5 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -126,66 +127,139 @@ importers: specifier: ^5.7.2 version: 5.9.3 - apps/cm: + apps/as: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@common/config": + '@common/network': specifier: workspace:* - version: link:../../packages/common/config - "@fontsource-variable/noto-sans-kr": - specifier: ^5.2.5 - version: 5.2.10 - "@frontend-opensource/use-react-hooks": - specifier: ^1.1.4 - version: 1.1.4 - "@fullcalendar/core": - specifier: ^6.1.17 - version: 6.1.20 - "@fullcalendar/daygrid": - specifier: ^6.1.17 - version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/interaction": - specifier: ^6.1.17 - version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/react": - specifier: ^6.1.17 - version: 6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@fullcalendar/timegrid": - specifier: ^6.1.17 - version: 6.1.20(@fullcalendar/core@6.1.20) - "@hookform/resolvers": + version: link:../../packages/common/network + '@faker-js/faker': + specifier: ^10.3.0 + version: 10.3.0 + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": - specifier: 3.5.1-alpha.1 - version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": - specifier: ^1.3.2 - version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": - specifier: ^2.1.2 - version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": - specifier: ^1.1.2 - version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-tooltip": - specifier: ^1.1.8 - version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.75.5 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tinymce/tinymce-react": + axios: + specifier: ^1.8.1 + version: 1.8.1 + dayjs: + specifier: ^1.11.13 + version: 1.11.20 + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + next: + specifier: 15.3.8 + version: 15.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-hook-form: + specifier: ^7.54.2 + version: 7.72.0(react@19.2.4) + zod: + specifier: ^3.24.2 + version: 3.25.76 + devDependencies: + '@types/js-cookie': + specifier: ^3.0.6 + version: 3.0.6 + eslint: + specifier: ^9.0.0 + version: 9.39.4(jiti@2.6.1) + eslint-config-next: + specifier: 15.4.0 + version: 15.4.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + postcss: + specifier: ^8.4.49 + version: 8.5.8 + prettier: + specifier: ^3.4.2 + version: 3.8.1 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(prettier@3.8.1) + steiger: + specifier: ^0.5.11 + version: 0.5.11(typescript@5.9.3) + tailwindcss: + specifier: ^3.4.14 + version: 3.4.19(yaml@2.8.3) + typescript: + specifier: ^5.7.2 + version: 5.9.3 + + apps/cm: + dependencies: + '@common/assets': + specifier: workspace:* + version: link:../../packages/common/assets + '@common/components': + specifier: workspace:* + version: link:../../packages/common/components + '@common/config': + specifier: workspace:* + version: link:../../packages/common/config + '@fontsource-variable/noto-sans-kr': + specifier: ^5.2.5 + version: 5.2.10 + '@frontend-opensource/use-react-hooks': + specifier: ^1.1.4 + version: 1.1.4 + '@fullcalendar/core': + specifier: ^6.1.17 + version: 6.1.20 + '@fullcalendar/daygrid': + specifier: ^6.1.17 + version: 6.1.20(@fullcalendar/core@6.1.20) + '@fullcalendar/interaction': + specifier: ^6.1.17 + version: 6.1.20(@fullcalendar/core@6.1.20) + '@fullcalendar/react': + specifier: ^6.1.17 + version: 6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@fullcalendar/timegrid': + specifier: ^6.1.17 + version: 6.1.20(@fullcalendar/core@6.1.20) + '@hookform/resolvers': + specifier: ^4.1.3 + version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) + '@minoru/react-dnd-treeview': + specifier: 3.5.1-alpha.1 + version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-icons': + specifier: ^1.3.2 + version: 1.3.2(react@19.2.4) + '@radix-ui/react-label': + specifier: ^2.1.2 + version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': + specifier: ^1.1.2 + version: 1.2.4(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-tooltip': + specifier: ^1.1.8 + version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tanstack/react-query': + specifier: ^5.75.5 + version: 5.95.2(react@19.2.4) + '@tanstack/react-query-devtools': + specifier: ^5.75.5 + version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) + '@tanstack/react-table': + specifier: ^8.21.2 + version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@tinymce/tinymce-react': specifier: ^5.1.1 version: 5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -237,16 +311,16 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3.0.0 version: 3.3.5 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -276,49 +350,49 @@ importers: apps/common/features: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../../packages/common/components - "@common/config": + '@common/config': specifier: workspace:* version: link:../../../packages/common/config - "@common/network": + '@common/network': specifier: workspace:* version: link:../../../packages/common/network - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: ^3.5.0 version: 3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": + '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tinymce/tinymce-react": + '@tinymce/tinymce-react': specifier: ^5.1.1 version: 5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -367,16 +441,16 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -406,64 +480,64 @@ importers: apps/cs: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@common/config": + '@common/config': specifier: workspace:* version: link:../../packages/common/config - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@fullcalendar/core": + '@fullcalendar/core': specifier: ^6.1.17 version: 6.1.20 - "@fullcalendar/daygrid": + '@fullcalendar/daygrid': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/interaction": + '@fullcalendar/interaction': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/react": + '@fullcalendar/react': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@fullcalendar/timegrid": + '@fullcalendar/timegrid': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": + '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-tooltip": + '@radix-ui/react-tooltip': specifier: ^1.1.8 version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.75.5 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tinymce/tinymce-react": + '@tinymce/tinymce-react': specifier: ^5.1.1 version: 5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -515,16 +589,16 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3.0.0 version: 3.3.5 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -554,31 +628,31 @@ importers: apps/dc: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: ^3.5.0 version: 3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.75.5 version: 5.95.2(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -627,19 +701,19 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3.0.0 version: 3.3.5 - "@faker-js/faker": + '@faker-js/faker': specifier: ^9.5.0 version: 9.9.0 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.17.0 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -669,16 +743,16 @@ importers: apps/dm: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) class-variance-authority: @@ -715,10 +789,10 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -739,16 +813,16 @@ importers: apps/dm_new: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) class-variance-authority: @@ -785,10 +859,10 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -809,37 +883,37 @@ importers: apps/fo: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tailwindcss/vite": + '@tailwindcss/vite': specifier: ^4.0.10 version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -882,7 +956,7 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 eslint: @@ -903,40 +977,40 @@ importers: apps/sn: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -997,19 +1071,19 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@faker-js/faker": + '@faker-js/faker': specifier: ^9.5.0 version: 9.9.0 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -1039,73 +1113,73 @@ importers: apps/st: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@common/config": + '@common/config': specifier: workspace:* version: link:../../packages/common/config - "@faker-js/faker": + '@faker-js/faker': specifier: ^9.9.0 version: 9.9.0 - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@fullcalendar/core": + '@fullcalendar/core': specifier: ^6.1.17 version: 6.1.20 - "@fullcalendar/daygrid": + '@fullcalendar/daygrid': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/interaction": + '@fullcalendar/interaction': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@fullcalendar/react": + '@fullcalendar/react': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@fullcalendar/timegrid": + '@fullcalendar/timegrid': specifier: ^6.1.17 version: 6.1.20(@fullcalendar/core@6.1.20) - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": + '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-tooltip": + '@radix-ui/react-tooltip': specifier: ^1.1.8 version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@rsone/components": + '@rsone/components': specifier: workspace:* version: link:../../packages/rsone - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tinymce/tinymce-react": + '@tinymce/tinymce-react': specifier: ^5.1.1 version: 5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@types/xlsx": + '@types/xlsx': specifier: ^0.0.36 version: 0.0.36 axios: @@ -1178,16 +1252,16 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -1220,40 +1294,40 @@ importers: apps/wr: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../../packages/common/assets - "@common/business_components": + '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components - "@common/components": + '@common/components': specifier: workspace:* version: link:../../packages/common/components - "@fontsource-variable/noto-sans-kr": + '@fontsource-variable/noto-sans-kr': specifier: ^5.2.5 version: 5.2.10 - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-query-devtools": + '@tanstack/react-query-devtools': specifier: ^5.75.5 version: 5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) axios: @@ -1326,10 +1400,10 @@ importers: specifier: ^5.0.3 version: 5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) devDependencies: - "@eslint/eslintrc": + '@eslint/eslintrc': specifier: ^3 version: 3.3.5 - "@types/webpack": + '@types/webpack': specifier: ^5.28.5 version: 5.28.5 eslint: @@ -1350,7 +1424,7 @@ importers: packages/common/assets: devDependencies: - "@types/node": + '@types/node': specifier: ^20.11.0 version: 20.19.37 tsup: @@ -1362,25 +1436,25 @@ importers: packages/common/business_components: dependencies: - "@common/components": + '@common/components': specifier: workspace:* version: link:../components - "@hookform/resolvers": + '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: 3.5.1-alpha.1 version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-scroll-area": + '@radix-ui/react-scroll-area': specifier: ^1.2.3 version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-select": + '@radix-ui/react-select': specifier: ^2.1.6 version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) axios: @@ -1447,43 +1521,43 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: - "@eslint/js": + '@eslint/js': specifier: ^9.17.0 version: 9.39.4 - "@storybook/addon-essentials": + '@storybook/addon-essentials': specifier: ^8.5.3 version: 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-interactions": + '@storybook/addon-interactions': specifier: ^8.5.3 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-onboarding": + '@storybook/addon-onboarding': specifier: ^8.5.3 version: 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-themes": + '@storybook/addon-themes': specifier: ^8.5.4 version: 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/blocks": + '@storybook/blocks': specifier: ^8.5.3 version: 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/manager-api": + '@storybook/manager-api': specifier: ^8.5.5 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/react": + '@storybook/react': specifier: ^8.5.3 version: 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3) - "@storybook/react-vite": + '@storybook/react-vite': specifier: ^8.5.3 version: 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.0)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@storybook/test": + '@storybook/test': specifier: ^8.5.3 version: 8.6.15(storybook@8.6.18(prettier@3.8.1)) - "@storybook/theming": + '@storybook/theming': specifier: ^8.5.5 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@vitejs/plugin-react": + '@vitejs/plugin-react': specifier: ^4.3.4 version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@xlsx/xlsx-populate": + '@xlsx/xlsx-populate': specifier: ^0.0.8 version: 0.0.8 autoprefixer: @@ -1537,82 +1611,82 @@ importers: packages/common/components: dependencies: - "@common/assets": + '@common/assets': specifier: workspace:* version: link:../assets - "@common/config": + '@common/config': specifier: workspace:* version: link:../config - "@frontend-opensource/use-react-hooks": + '@frontend-opensource/use-react-hooks': specifier: ^1.1.4 version: 1.1.4 - "@minoru/react-dnd-treeview": + '@minoru/react-dnd-treeview': specifier: ^3.5.0 version: 3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-accordion": + '@radix-ui/react-accordion': specifier: ^1.2.3 version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-checkbox": + '@radix-ui/react-checkbox': specifier: ^1.1.4 version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-collapsible": + '@radix-ui/react-collapsible': specifier: ^1.1.3 version: 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-dialog": + '@radix-ui/react-dialog': specifier: ^1.1.6 version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-dropdown-menu": + '@radix-ui/react-dropdown-menu': specifier: ^2.1.6 version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-icons": + '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.2.4) - "@radix-ui/react-label": + '@radix-ui/react-label': specifier: ^2.1.2 version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-popover": + '@radix-ui/react-popover': specifier: ^1.1.6 version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-progress": + '@radix-ui/react-progress': specifier: ^1.1.2 version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-radio-group": + '@radix-ui/react-radio-group': specifier: ^1.2.2 version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-scroll-area": + '@radix-ui/react-scroll-area': specifier: ^1.2.3 version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-select": + '@radix-ui/react-select': specifier: ^2.1.6 version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-separator": + '@radix-ui/react-separator': specifier: ^1.1.2 version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slider": + '@radix-ui/react-slider': specifier: ^1.2.3 version: 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": + '@radix-ui/react-slot': specifier: ^1.1.2 version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-switch": + '@radix-ui/react-switch': specifier: ^1.1.3 version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-tabs": + '@radix-ui/react-tabs': specifier: ^1.1.3 version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-tooltip": + '@radix-ui/react-tooltip': specifier: ^1.1.8 version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-visually-hidden": + '@radix-ui/react-visually-hidden': specifier: ^1.1.2 version: 1.2.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@tanstack/react-query": + '@tanstack/react-query': specifier: ^5.67.1 version: 5.95.2(react@19.2.4) - "@tanstack/react-table": + '@tanstack/react-table': specifier: ^8.21.2 version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 axios: @@ -1664,46 +1738,46 @@ importers: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.19(yaml@2.8.3)) devDependencies: - "@eslint/js": + '@eslint/js': specifier: ^9.17.0 version: 9.39.4 - "@faker-js/faker": + '@faker-js/faker': specifier: ^9.5.0 version: 9.9.0 - "@storybook/addon-essentials": + '@storybook/addon-essentials': specifier: ^8.5.3 version: 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-interactions": + '@storybook/addon-interactions': specifier: ^8.5.3 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-onboarding": + '@storybook/addon-onboarding': specifier: ^8.5.3 version: 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-themes": + '@storybook/addon-themes': specifier: ^8.5.4 version: 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/blocks": + '@storybook/blocks': specifier: ^8.5.3 version: 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/manager-api": + '@storybook/manager-api': specifier: ^8.5.5 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/react": + '@storybook/react': specifier: ^8.5.3 version: 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3) - "@storybook/react-vite": + '@storybook/react-vite': specifier: ^8.5.3 version: 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.0)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@storybook/test": + '@storybook/test': specifier: ^8.5.3 version: 8.6.15(storybook@8.6.18(prettier@3.8.1)) - "@storybook/theming": + '@storybook/theming': specifier: ^8.5.5 version: 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@types/node": + '@types/node': specifier: ^22.13.1 version: 22.19.15 - "@vitejs/plugin-react": + '@vitejs/plugin-react': specifier: ^4.3.4 version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) autoprefixer: @@ -1772,7 +1846,7 @@ importers: packages/common/network: dependencies: - "@types/js-cookie": + '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 axios: @@ -1782,7 +1856,7 @@ importers: specifier: ^3.0.5 version: 3.0.5 devDependencies: - "@types/node": + '@types/node': specifier: ^20.11.19 version: 20.19.37 typescript: @@ -1791,7 +1865,7 @@ importers: packages/rsone: dependencies: - "@common/components": + '@common/components': specifier: workspace:* version: link:../common/components jszip: @@ -1824,2599 +1898,1739 @@ importers: version: 5.6.3 packages: - "@adobe/css-tools@4.4.4": - resolution: - { - integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==, - } - "@alloc/quick-lru@5.2.0": - resolution: - { - integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, - } - engines: { node: ">=10" } + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - "@babel/code-frame@7.29.0": - resolution: - { - integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==, - } - engines: { node: ">=6.9.0" } + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} - "@babel/compat-data@7.29.0": - resolution: - { - integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==, - } - engines: { node: ">=6.9.0" } + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} - "@babel/core@7.29.0": - resolution: - { - integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==, - } - engines: { node: ">=6.9.0" } + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} - "@babel/generator@7.29.1": - resolution: - { - integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==, - } - engines: { node: ">=6.9.0" } + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} - "@babel/helper-compilation-targets@7.28.6": - resolution: - { - integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==, - } - engines: { node: ">=6.9.0" } + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} - "@babel/helper-globals@7.28.0": - resolution: - { - integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} - "@babel/helper-module-imports@7.28.6": - resolution: - { - integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} - "@babel/helper-module-transforms@7.28.6": - resolution: - { - integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0 + '@babel/core': ^7.0.0 - "@babel/helper-plugin-utils@7.28.6": - resolution: - { - integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} - "@babel/helper-string-parser@7.27.1": - resolution: - { - integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} - "@babel/helper-validator-identifier@7.28.5": - resolution: - { - integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} - "@babel/helper-validator-option@7.27.1": - resolution: - { - integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==, - } - engines: { node: ">=6.9.0" } + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} - "@babel/helpers@7.29.2": - resolution: - { - integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==, - } - engines: { node: ">=6.9.0" } + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} - "@babel/parser@7.29.2": - resolution: - { - integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==, - } - engines: { node: ">=6.0.0" } + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} hasBin: true - "@babel/plugin-transform-react-jsx-self@7.27.1": - resolution: - { - integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==, - } - engines: { node: ">=6.9.0" } + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 - "@babel/plugin-transform-react-jsx-source@7.27.1": - resolution: - { - integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==, - } - engines: { node: ">=6.9.0" } + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} peerDependencies: - "@babel/core": ^7.0.0-0 + '@babel/core': ^7.0.0-0 - "@babel/runtime@7.29.2": - resolution: - { - integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==, - } - engines: { node: ">=6.9.0" } + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} - "@babel/template@7.28.6": - resolution: - { - integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==, - } - engines: { node: ">=6.9.0" } + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} - "@babel/traverse@7.29.0": - resolution: - { - integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==, - } - engines: { node: ">=6.9.0" } + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} - "@babel/types@7.29.0": - resolution: - { - integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, - } - engines: { node: ">=6.9.0" } + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} - "@clack/core@0.4.1": - resolution: - { - integrity: sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==, - } + '@clack/core@0.4.1': + resolution: {integrity: sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==} - "@clack/prompts@0.9.1": - resolution: - { - integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==, - } + '@clack/prompts@0.9.1': + resolution: {integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==} - "@date-fns/tz@1.4.1": - resolution: - { - integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==, - } + '@date-fns/tz@1.4.1': + resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} - "@dependents/detective-less@5.0.1": - resolution: - { - integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==, - } - engines: { node: ">=18" } + '@dependents/detective-less@5.0.1': + resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} + engines: {node: '>=18'} - "@emnapi/core@1.9.1": - resolution: - { - integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==, - } + '@emnapi/core@1.9.1': + resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - "@emnapi/runtime@1.9.1": - resolution: - { - integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==, - } + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} - "@emnapi/wasi-threads@1.2.0": - resolution: - { - integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==, - } + '@emnapi/wasi-threads@1.2.0': + resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} - "@esbuild/aix-ppc64@0.21.5": - resolution: - { - integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, - } - engines: { node: ">=12" } + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.24.2": - resolution: - { - integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==, - } - engines: { node: ">=18" } + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.25.12": - resolution: - { - integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==, - } - engines: { node: ">=18" } + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - "@esbuild/android-arm64@0.21.5": - resolution: - { - integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, - } - engines: { node: ">=12" } + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.24.2": - resolution: - { - integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==, - } - engines: { node: ">=18" } + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.25.12": - resolution: - { - integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==, - } - engines: { node: ">=18" } + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - "@esbuild/android-arm@0.21.5": - resolution: - { - integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, - } - engines: { node: ">=12" } + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} cpu: [arm] os: [android] - "@esbuild/android-arm@0.24.2": - resolution: - { - integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==, - } - engines: { node: ">=18" } + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} cpu: [arm] os: [android] - "@esbuild/android-arm@0.25.12": - resolution: - { - integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==, - } - engines: { node: ">=18" } + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} cpu: [arm] os: [android] - "@esbuild/android-x64@0.21.5": - resolution: - { - integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, - } - engines: { node: ">=12" } + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} cpu: [x64] os: [android] - "@esbuild/android-x64@0.24.2": - resolution: - { - integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==, - } - engines: { node: ">=18" } + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} cpu: [x64] os: [android] - "@esbuild/android-x64@0.25.12": - resolution: - { - integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==, - } - engines: { node: ">=18" } + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} cpu: [x64] os: [android] - "@esbuild/darwin-arm64@0.21.5": - resolution: - { - integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, - } - engines: { node: ">=12" } + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.24.2": - resolution: - { - integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==, - } - engines: { node: ">=18" } + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.25.12": - resolution: - { - integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==, - } - engines: { node: ">=18" } + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - "@esbuild/darwin-x64@0.21.5": - resolution: - { - integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, - } - engines: { node: ">=12" } + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.24.2": - resolution: - { - integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==, - } - engines: { node: ">=18" } + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.25.12": - resolution: - { - integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==, - } - engines: { node: ">=18" } + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - "@esbuild/freebsd-arm64@0.21.5": - resolution: - { - integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.24.2": - resolution: - { - integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.25.12": - resolution: - { - integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-x64@0.21.5": - resolution: - { - integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, - } - engines: { node: ">=12" } + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.24.2": - resolution: - { - integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.25.12": - resolution: - { - integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==, - } - engines: { node: ">=18" } + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - "@esbuild/linux-arm64@0.21.5": - resolution: - { - integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.24.2": - resolution: - { - integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.25.12": - resolution: - { - integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - "@esbuild/linux-arm@0.21.5": - resolution: - { - integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, - } - engines: { node: ">=12" } + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.24.2": - resolution: - { - integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.25.12": - resolution: - { - integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==, - } - engines: { node: ">=18" } + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - "@esbuild/linux-ia32@0.21.5": - resolution: - { - integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, - } - engines: { node: ">=12" } + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.24.2": - resolution: - { - integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==, - } - engines: { node: ">=18" } + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.25.12": - resolution: - { - integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==, - } - engines: { node: ">=18" } + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - "@esbuild/linux-loong64@0.21.5": - resolution: - { - integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, - } - engines: { node: ">=12" } + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.24.2": - resolution: - { - integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==, - } - engines: { node: ">=18" } + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.25.12": - resolution: - { - integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==, - } - engines: { node: ">=18" } + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - "@esbuild/linux-mips64el@0.21.5": - resolution: - { - integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, - } - engines: { node: ">=12" } + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.24.2": - resolution: - { - integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==, - } - engines: { node: ">=18" } + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.25.12": - resolution: - { - integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==, - } - engines: { node: ">=18" } + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - "@esbuild/linux-ppc64@0.21.5": - resolution: - { - integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, - } - engines: { node: ">=12" } + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.24.2": - resolution: - { - integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==, - } - engines: { node: ">=18" } + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.25.12": - resolution: - { - integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==, - } - engines: { node: ">=18" } + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - "@esbuild/linux-riscv64@0.21.5": - resolution: - { - integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, - } - engines: { node: ">=12" } + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.24.2": - resolution: - { - integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==, - } - engines: { node: ">=18" } + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.25.12": - resolution: - { - integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==, - } - engines: { node: ">=18" } + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - "@esbuild/linux-s390x@0.21.5": - resolution: - { - integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, - } - engines: { node: ">=12" } + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.24.2": - resolution: - { - integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==, - } - engines: { node: ">=18" } + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.25.12": - resolution: - { - integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==, - } - engines: { node: ">=18" } + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - "@esbuild/linux-x64@0.21.5": - resolution: - { - integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, - } - engines: { node: ">=12" } + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.24.2": - resolution: - { - integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==, - } - engines: { node: ">=18" } + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.25.12": - resolution: - { - integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==, - } - engines: { node: ">=18" } + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - "@esbuild/netbsd-arm64@0.24.2": - resolution: - { - integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-arm64@0.25.12": - resolution: - { - integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-x64@0.21.5": - resolution: - { - integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, - } - engines: { node: ">=12" } + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.24.2": - resolution: - { - integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.25.12": - resolution: - { - integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==, - } - engines: { node: ">=18" } + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - "@esbuild/openbsd-arm64@0.24.2": - resolution: - { - integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-arm64@0.25.12": - resolution: - { - integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-x64@0.21.5": - resolution: - { - integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, - } - engines: { node: ">=12" } + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.24.2": - resolution: - { - integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.25.12": - resolution: - { - integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==, - } - engines: { node: ">=18" } + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - "@esbuild/openharmony-arm64@0.25.12": - resolution: - { - integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==, - } - engines: { node: ">=18" } + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - "@esbuild/sunos-x64@0.21.5": - resolution: - { - integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, - } - engines: { node: ">=12" } + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.24.2": - resolution: - { - integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==, - } - engines: { node: ">=18" } + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.25.12": - resolution: - { - integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==, - } - engines: { node: ">=18" } + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - "@esbuild/win32-arm64@0.21.5": - resolution: - { - integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, - } - engines: { node: ">=12" } + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.24.2": - resolution: - { - integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==, - } - engines: { node: ">=18" } + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.25.12": - resolution: - { - integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==, - } - engines: { node: ">=18" } + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - "@esbuild/win32-ia32@0.21.5": - resolution: - { - integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, - } - engines: { node: ">=12" } + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.24.2": - resolution: - { - integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==, - } - engines: { node: ">=18" } + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.25.12": - resolution: - { - integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==, - } - engines: { node: ">=18" } + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - "@esbuild/win32-x64@0.21.5": - resolution: - { - integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, - } - engines: { node: ">=12" } + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.24.2": - resolution: - { - integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==, - } - engines: { node: ">=18" } + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.25.12": - resolution: - { - integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==, - } - engines: { node: ">=18" } + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - "@eslint-community/eslint-utils@4.9.1": - resolution: - { - integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - "@eslint-community/regexpp@4.12.2": - resolution: - { - integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - "@eslint/config-array@0.21.2": - resolution: - { - integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/config-helpers@0.4.2": - resolution: - { - integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/core@0.17.0": - resolution: - { - integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/eslintrc@3.3.5": - resolution: - { - integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/js@9.39.4": - resolution: - { - integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/object-schema@2.1.7": - resolution: - { - integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@eslint/plugin-kit@0.4.1": - resolution: - { - integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@faker-js/faker@10.3.0": - resolution: - { - integrity: sha512-It0Sne6P3szg7JIi6CgKbvTZoMjxBZhcv91ZrqrNuaZQfB5WoqYYbzCUOq89YR+VY8juY9M1vDWmDDa2TzfXCw==, - } - engines: { node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: ">=10" } + '@faker-js/faker@10.3.0': + resolution: {integrity: sha512-It0Sne6P3szg7JIi6CgKbvTZoMjxBZhcv91ZrqrNuaZQfB5WoqYYbzCUOq89YR+VY8juY9M1vDWmDDa2TzfXCw==} + engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} - "@faker-js/faker@9.9.0": - resolution: - { - integrity: sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==, - } - engines: { node: ">=18.0.0", npm: ">=9.0.0" } + '@faker-js/faker@9.9.0': + resolution: {integrity: sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==} + engines: {node: '>=18.0.0', npm: '>=9.0.0'} - "@feature-sliced/filesystem@3.0.1": - resolution: - { - integrity: sha512-RlrfjhaX81o6E5OBc2A0tOLG/cZSOvcM+FpPlzEhTraIzBz8JmhxgwrYQbafMqiC+TOrqhd2pTLkU7PFQG1QdQ==, - } + '@feature-sliced/filesystem@3.0.1': + resolution: {integrity: sha512-RlrfjhaX81o6E5OBc2A0tOLG/cZSOvcM+FpPlzEhTraIzBz8JmhxgwrYQbafMqiC+TOrqhd2pTLkU7PFQG1QdQ==} - "@feature-sliced/steiger-plugin@0.5.7": - resolution: - { - integrity: sha512-xENW2fvfU+UyMgcB3S+CCMPrH2Tq/BG1W9IxGp5B8+j0TtbgmbzT3DIj3A2HG4kouVYUjzgWA6JIuHbGo3lDzg==, - } + '@feature-sliced/steiger-plugin@0.5.7': + resolution: {integrity: sha512-xENW2fvfU+UyMgcB3S+CCMPrH2Tq/BG1W9IxGp5B8+j0TtbgmbzT3DIj3A2HG4kouVYUjzgWA6JIuHbGo3lDzg==} - "@floating-ui/core@1.7.5": - resolution: - { - integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==, - } + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - "@floating-ui/dom@1.7.6": - resolution: - { - integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==, - } + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - "@floating-ui/react-dom@2.1.8": - resolution: - { - integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==, - } + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 - "@floating-ui/utils@0.2.11": - resolution: - { - integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==, - } + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - "@fontsource-variable/noto-sans-kr@5.2.10": - resolution: - { - integrity: sha512-UZOO7HF44Rt5+7SCeFMHYVgbKu36Jet6IxrAd7jjEkQMVDmeefwd0H8V5pSZydvBOOxClk3V5cQsujJqGHhQMw==, - } + '@fontsource-variable/noto-sans-kr@5.2.10': + resolution: {integrity: sha512-UZOO7HF44Rt5+7SCeFMHYVgbKu36Jet6IxrAd7jjEkQMVDmeefwd0H8V5pSZydvBOOxClk3V5cQsujJqGHhQMw==} - "@frontend-opensource/use-react-hooks@1.1.4": - resolution: - { - integrity: sha512-otCSyciL5MVCNNYmdDdg2lEL6rbZ3XX1meYQCzapUSC4V6qx2YxMk1kUbhwEM/+vdxhYzBHsVBGD0rZWl5cgrw==, - } + '@frontend-opensource/use-react-hooks@1.1.4': + resolution: {integrity: sha512-otCSyciL5MVCNNYmdDdg2lEL6rbZ3XX1meYQCzapUSC4V6qx2YxMk1kUbhwEM/+vdxhYzBHsVBGD0rZWl5cgrw==} - "@fullcalendar/core@6.1.20": - resolution: - { - integrity: sha512-1cukXLlePFiJ8YKXn/4tMKsy0etxYLCkXk8nUCFi11nRONF2Ba2CD5b21/ovtOO2tL6afTJfwmc1ed3HG7eB1g==, - } + '@fullcalendar/core@6.1.20': + resolution: {integrity: sha512-1cukXLlePFiJ8YKXn/4tMKsy0etxYLCkXk8nUCFi11nRONF2Ba2CD5b21/ovtOO2tL6afTJfwmc1ed3HG7eB1g==} - "@fullcalendar/daygrid@6.1.20": - resolution: - { - integrity: sha512-AO9vqhkLP77EesmJzuU+IGXgxNulsA8mgQHynclJ8U70vSwAVnbcLG9qftiTAFSlZjiY/NvhE7sflve6cJelyQ==, - } + '@fullcalendar/daygrid@6.1.20': + resolution: {integrity: sha512-AO9vqhkLP77EesmJzuU+IGXgxNulsA8mgQHynclJ8U70vSwAVnbcLG9qftiTAFSlZjiY/NvhE7sflve6cJelyQ==} peerDependencies: - "@fullcalendar/core": ~6.1.20 + '@fullcalendar/core': ~6.1.20 - "@fullcalendar/interaction@6.1.20": - resolution: - { - integrity: sha512-p6txmc5txL0bMiPaJxe2ip6o0T384TyoD2KGdsU6UjZ5yoBlaY+dg7kxfnYKpYMzEJLG58n+URrHr2PgNL2fyA==, - } + '@fullcalendar/interaction@6.1.20': + resolution: {integrity: sha512-p6txmc5txL0bMiPaJxe2ip6o0T384TyoD2KGdsU6UjZ5yoBlaY+dg7kxfnYKpYMzEJLG58n+URrHr2PgNL2fyA==} peerDependencies: - "@fullcalendar/core": ~6.1.20 + '@fullcalendar/core': ~6.1.20 - "@fullcalendar/react@6.1.20": - resolution: - { - integrity: sha512-1w0pZtceaUdfAnxMSCGHCQalhi+mR1jOe76sXzyAXpcPz/Lf0zHSdcGK/U2XpZlnQgQtBZW+d+QBnnzVQKCxAA==, - } + '@fullcalendar/react@6.1.20': + resolution: {integrity: sha512-1w0pZtceaUdfAnxMSCGHCQalhi+mR1jOe76sXzyAXpcPz/Lf0zHSdcGK/U2XpZlnQgQtBZW+d+QBnnzVQKCxAA==} peerDependencies: - "@fullcalendar/core": ~6.1.20 + '@fullcalendar/core': ~6.1.20 react: ^19.2.1 react-dom: ^19.2.1 - "@fullcalendar/timegrid@6.1.20": - resolution: - { - integrity: sha512-4H+/MWbz3ntA50lrPif+7TsvMeX3R1GSYjiLULz0+zEJ7/Yfd9pupZmAwUs/PBpA6aAcFmeRr0laWfcz1a9V1A==, - } + '@fullcalendar/timegrid@6.1.20': + resolution: {integrity: sha512-4H+/MWbz3ntA50lrPif+7TsvMeX3R1GSYjiLULz0+zEJ7/Yfd9pupZmAwUs/PBpA6aAcFmeRr0laWfcz1a9V1A==} peerDependencies: - "@fullcalendar/core": ~6.1.20 + '@fullcalendar/core': ~6.1.20 - "@hookform/resolvers@4.1.3": - resolution: - { - integrity: sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==, - } + '@hookform/resolvers@4.1.3': + resolution: {integrity: sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==} peerDependencies: react-hook-form: ^7.0.0 - "@humanfs/core@0.19.1": - resolution: - { - integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, - } - engines: { node: ">=18.18.0" } + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} - "@humanfs/node@0.16.7": - resolution: - { - integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==, - } - engines: { node: ">=18.18.0" } + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} - "@humanwhocodes/module-importer@1.0.1": - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: ">=12.22" } + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} - "@humanwhocodes/retry@0.4.3": - resolution: - { - integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, - } - engines: { node: ">=18.18" } + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} - "@img/colour@1.1.0": - resolution: - { - integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, - } - engines: { node: ">=18" } + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} - "@img/sharp-darwin-arm64@0.34.5": - resolution: - { - integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - "@img/sharp-darwin-x64@0.34.5": - resolution: - { - integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - "@img/sharp-libvips-darwin-arm64@1.2.4": - resolution: - { - integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, - } + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - "@img/sharp-libvips-darwin-x64@1.2.4": - resolution: - { - integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, - } + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - "@img/sharp-libvips-linux-arm64@1.2.4": - resolution: - { - integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, - } + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] - "@img/sharp-libvips-linux-arm@1.2.4": - resolution: - { - integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, - } + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] - "@img/sharp-libvips-linux-ppc64@1.2.4": - resolution: - { - integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, - } + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] - "@img/sharp-libvips-linux-riscv64@1.2.4": - resolution: - { - integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, - } + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] - "@img/sharp-libvips-linux-s390x@1.2.4": - resolution: - { - integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, - } + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] - "@img/sharp-libvips-linux-x64@1.2.4": - resolution: - { - integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, - } + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] - "@img/sharp-libvips-linuxmusl-arm64@1.2.4": - resolution: - { - integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, - } + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] - "@img/sharp-libvips-linuxmusl-x64@1.2.4": - resolution: - { - integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, - } + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] - "@img/sharp-linux-arm64@0.34.5": - resolution: - { - integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - "@img/sharp-linux-arm@0.34.5": - resolution: - { - integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - "@img/sharp-linux-ppc64@0.34.5": - resolution: - { - integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - "@img/sharp-linux-riscv64@0.34.5": - resolution: - { - integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] - "@img/sharp-linux-s390x@0.34.5": - resolution: - { - integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - "@img/sharp-linux-x64@0.34.5": - resolution: - { - integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - "@img/sharp-linuxmusl-arm64@0.34.5": - resolution: - { - integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - "@img/sharp-linuxmusl-x64@0.34.5": - resolution: - { - integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - "@img/sharp-wasm32@0.34.5": - resolution: - { - integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - "@img/sharp-win32-arm64@0.34.5": - resolution: - { - integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - "@img/sharp-win32-ia32@0.34.5": - resolution: - { - integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - "@img/sharp-win32-x64@0.34.5": - resolution: - { - integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - "@isaacs/cliui@8.0.2": - resolution: - { - integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, - } - engines: { node: ">=12" } + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} - "@joshwooding/vite-plugin-react-docgen-typescript@0.5.0": - resolution: - { - integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==, - } + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0': + resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==} peerDependencies: - typescript: ">= 4.3.x" + typescript: '>= 4.3.x' vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: typescript: optional: true - "@jridgewell/gen-mapping@0.3.13": - resolution: - { - integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, - } + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - "@jridgewell/remapping@2.3.5": - resolution: - { - integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, - } + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - "@jridgewell/resolve-uri@3.1.2": - resolution: - { - integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, - } - engines: { node: ">=6.0.0" } + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} - "@jridgewell/source-map@0.3.11": - resolution: - { - integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==, - } + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - "@jridgewell/sourcemap-codec@1.5.5": - resolution: - { - integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, - } + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - "@jridgewell/trace-mapping@0.3.31": - resolution: - { - integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, - } + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - "@juggle/resize-observer@3.4.0": - resolution: - { - integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==, - } + '@juggle/resize-observer@3.4.0': + resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - "@kurkle/color@0.3.4": - resolution: - { - integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==, - } + '@kurkle/color@0.3.4': + resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} - "@mapbox/jsonlint-lines-primitives@2.0.2": - resolution: - { - integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==, - } - engines: { node: ">= 0.6" } + '@mapbox/jsonlint-lines-primitives@2.0.2': + resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} + engines: {node: '>= 0.6'} - "@mapbox/mapbox-gl-style-spec@13.28.0": - resolution: - { - integrity: sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==, - } + '@mapbox/mapbox-gl-style-spec@13.28.0': + resolution: {integrity: sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==} hasBin: true - "@mapbox/point-geometry@0.1.0": - resolution: - { - integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==, - } + '@mapbox/point-geometry@0.1.0': + resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} - "@mapbox/unitbezier@0.0.0": - resolution: - { - integrity: sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==, - } + '@mapbox/unitbezier@0.0.0': + resolution: {integrity: sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==} - "@mdx-js/react@3.1.1": - resolution: - { - integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==, - } + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 - "@minoru/react-dnd-treeview@3.5.1-alpha.1": - resolution: - { - integrity: sha512-XEKBjhyltG0gzn+ioZRwhlV7+Q/uVZqTMS/tAO3On/rPNuNgqWHROFsyGdHQS/DYoENGOG8JX03chCxExOgEpA==, - } + '@minoru/react-dnd-treeview@3.5.1-alpha.1': + resolution: {integrity: sha512-XEKBjhyltG0gzn+ioZRwhlV7+Q/uVZqTMS/tAO3On/rPNuNgqWHROFsyGdHQS/DYoENGOG8JX03chCxExOgEpA==} peerDependencies: react: ^19.2.1 react-dnd: 15.x || 16.x react-dom: ^19.2.1 - "@minoru/react-dnd-treeview@3.5.3": - resolution: - { - integrity: sha512-k9Hz99pLWR/0AMWYR4Hyda4jQjhfBz0dqqqLpk9apfbB7RthamjIJsKKobxgvA8d7ykbVRLCOlrWlRckP1uSkw==, - } + '@minoru/react-dnd-treeview@3.5.3': + resolution: {integrity: sha512-k9Hz99pLWR/0AMWYR4Hyda4jQjhfBz0dqqqLpk9apfbB7RthamjIJsKKobxgvA8d7ykbVRLCOlrWlRckP1uSkw==} peerDependencies: react: ^19.2.1 react-dnd: 15.x || 16.x react-dom: ^19.2.1 - "@napi-rs/wasm-runtime@0.2.12": - resolution: - { - integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==, - } + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - "@next/env@15.3.8": - resolution: - { - integrity: sha512-SAfHg0g91MQVMPioeFeDjE+8UPF3j3BvHjs8ZKJAUz1BG7eMPvfCKOAgNWJ6s1MLNeP6O2InKQRTNblxPWuq+Q==, - } + '@next/env@15.3.8': + resolution: {integrity: sha512-SAfHg0g91MQVMPioeFeDjE+8UPF3j3BvHjs8ZKJAUz1BG7eMPvfCKOAgNWJ6s1MLNeP6O2InKQRTNblxPWuq+Q==} - "@next/eslint-plugin-next@15.3.8": - resolution: - { - integrity: sha512-CKpvDZhNXPUjUHmjHddcsqjwj46oQblFms2hr2uA79C0kVTiSXQEQxkawUsDNSofHhTI31IbSeBdVyuk/U1nKw==, - } + '@next/eslint-plugin-next@15.3.8': + resolution: {integrity: sha512-CKpvDZhNXPUjUHmjHddcsqjwj46oQblFms2hr2uA79C0kVTiSXQEQxkawUsDNSofHhTI31IbSeBdVyuk/U1nKw==} - "@next/swc-darwin-arm64@15.3.5": - resolution: - { - integrity: sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w==, - } - engines: { node: ">= 10" } + '@next/eslint-plugin-next@15.4.0': + resolution: {integrity: sha512-dlGuj2B76ltswtpdDFQJfTlu6ux0v+EUYzsAYR1IqxqHi5iMPWhPRztgu8eqQZo4uNYkABKzLCmVeGDwbTYTiw==} + + '@next/swc-darwin-arm64@15.3.5': + resolution: {integrity: sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w==} + engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - "@next/swc-darwin-x64@15.3.5": - resolution: - { - integrity: sha512-WhwegPQJ5IfoUNZUVsI9TRAlKpjGVK0tpJTL6KeiC4cux9774NYE9Wu/iCfIkL/5J8rPAkqZpG7n+EfiAfidXA==, - } - engines: { node: ">= 10" } + '@next/swc-darwin-x64@15.3.5': + resolution: {integrity: sha512-WhwegPQJ5IfoUNZUVsI9TRAlKpjGVK0tpJTL6KeiC4cux9774NYE9Wu/iCfIkL/5J8rPAkqZpG7n+EfiAfidXA==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] - "@next/swc-linux-arm64-gnu@15.3.5": - resolution: - { - integrity: sha512-LVD6uMOZ7XePg3KWYdGuzuvVboxujGjbcuP2jsPAN3MnLdLoZUXKRc6ixxfs03RH7qBdEHCZjyLP/jBdCJVRJQ==, - } - engines: { node: ">= 10" } + '@next/swc-linux-arm64-gnu@15.3.5': + resolution: {integrity: sha512-LVD6uMOZ7XePg3KWYdGuzuvVboxujGjbcuP2jsPAN3MnLdLoZUXKRc6ixxfs03RH7qBdEHCZjyLP/jBdCJVRJQ==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] - "@next/swc-linux-arm64-musl@15.3.5": - resolution: - { - integrity: sha512-k8aVScYZ++BnS2P69ClK7v4nOu702jcF9AIHKu6llhHEtBSmM2zkPGl9yoqbSU/657IIIb0QHpdxEr0iW9z53A==, - } - engines: { node: ">= 10" } + '@next/swc-linux-arm64-musl@15.3.5': + resolution: {integrity: sha512-k8aVScYZ++BnS2P69ClK7v4nOu702jcF9AIHKu6llhHEtBSmM2zkPGl9yoqbSU/657IIIb0QHpdxEr0iW9z53A==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] - "@next/swc-linux-x64-gnu@15.3.5": - resolution: - { - integrity: sha512-2xYU0DI9DGN/bAHzVwADid22ba5d/xrbrQlr2U+/Q5WkFUzeL0TDR963BdrtLS/4bMmKZGptLeg6282H/S2i8A==, - } - engines: { node: ">= 10" } + '@next/swc-linux-x64-gnu@15.3.5': + resolution: {integrity: sha512-2xYU0DI9DGN/bAHzVwADid22ba5d/xrbrQlr2U+/Q5WkFUzeL0TDR963BdrtLS/4bMmKZGptLeg6282H/S2i8A==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] - "@next/swc-linux-x64-musl@15.3.5": - resolution: - { - integrity: sha512-TRYIqAGf1KCbuAB0gjhdn5Ytd8fV+wJSM2Nh2is/xEqR8PZHxfQuaiNhoF50XfY90sNpaRMaGhF6E+qjV1b9Tg==, - } - engines: { node: ">= 10" } + '@next/swc-linux-x64-musl@15.3.5': + resolution: {integrity: sha512-TRYIqAGf1KCbuAB0gjhdn5Ytd8fV+wJSM2Nh2is/xEqR8PZHxfQuaiNhoF50XfY90sNpaRMaGhF6E+qjV1b9Tg==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] - "@next/swc-win32-arm64-msvc@15.3.5": - resolution: - { - integrity: sha512-h04/7iMEUSMY6fDGCvdanKqlO1qYvzNxntZlCzfE8i5P0uqzVQWQquU1TIhlz0VqGQGXLrFDuTJVONpqGqjGKQ==, - } - engines: { node: ">= 10" } + '@next/swc-win32-arm64-msvc@15.3.5': + resolution: {integrity: sha512-h04/7iMEUSMY6fDGCvdanKqlO1qYvzNxntZlCzfE8i5P0uqzVQWQquU1TIhlz0VqGQGXLrFDuTJVONpqGqjGKQ==} + engines: {node: '>= 10'} cpu: [arm64] os: [win32] - "@next/swc-win32-x64-msvc@15.3.5": - resolution: - { - integrity: sha512-5fhH6fccXxnX2KhllnGhkYMndhOiLOLEiVGYjP2nizqeGWkN10sA9taATlXwake2E2XMvYZjjz0Uj7T0y+z1yw==, - } - engines: { node: ">= 10" } + '@next/swc-win32-x64-msvc@15.3.5': + resolution: {integrity: sha512-5fhH6fccXxnX2KhllnGhkYMndhOiLOLEiVGYjP2nizqeGWkN10sA9taATlXwake2E2XMvYZjjz0Uj7T0y+z1yw==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - "@nodelib/fs.scandir@2.1.5": - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: ">= 8" } + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} - "@nodelib/fs.stat@2.0.5": - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: ">= 8" } + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} - "@nodelib/fs.walk@1.2.8": - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: ">= 8" } + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} - "@nolyfill/is-core-module@1.0.39": - resolution: - { - integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==, - } - engines: { node: ">=12.4.0" } + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} - "@petamoriken/float16@3.9.3": - resolution: - { - integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==, - } + '@petamoriken/float16@3.9.3': + resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==} - "@pkgjs/parseargs@0.11.0": - resolution: - { - integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, - } - engines: { node: ">=14" } + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} - "@radix-ui/number@1.1.1": - resolution: - { - integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==, - } + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} - "@radix-ui/primitive@1.1.3": - resolution: - { - integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==, - } + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - "@radix-ui/react-accordion@1.2.12": - resolution: - { - integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==, - } + '@radix-ui/react-accordion@1.2.12': + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-arrow@1.1.7": - resolution: - { - integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==, - } + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-checkbox@1.3.3": - resolution: - { - integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==, - } + '@radix-ui/react-checkbox@1.3.3': + resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-collapsible@1.1.12": - resolution: - { - integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==, - } + '@radix-ui/react-collapsible@1.1.12': + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-collection@1.1.7": - resolution: - { - integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==, - } + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-compose-refs@1.1.2": - resolution: - { - integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==, - } + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-context@1.1.2": - resolution: - { - integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==, - } + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-context@1.1.3": - resolution: - { - integrity: sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==, - } + '@radix-ui/react-context@1.1.3': + resolution: {integrity: sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-dialog@1.1.15": - resolution: - { - integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==, - } + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-direction@1.1.1": - resolution: - { - integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==, - } + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-dismissable-layer@1.1.11": - resolution: - { - integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==, - } + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-dropdown-menu@2.1.16": - resolution: - { - integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==, - } + '@radix-ui/react-dropdown-menu@2.1.16': + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-focus-guards@1.1.3": - resolution: - { - integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==, - } + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-focus-scope@1.1.7": - resolution: - { - integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==, - } + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-icons@1.3.2": - resolution: - { - integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==, - } + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} peerDependencies: react: ^19.2.1 - "@radix-ui/react-id@1.1.1": - resolution: - { - integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==, - } + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-label@2.1.8": - resolution: - { - integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==, - } + '@radix-ui/react-label@2.1.8': + resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-menu@2.1.16": - resolution: - { - integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==, - } + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-popover@1.1.15": - resolution: - { - integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==, - } + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-popper@1.2.8": - resolution: - { - integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==, - } + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-portal@1.1.9": - resolution: - { - integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==, - } + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-presence@1.1.5": - resolution: - { - integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==, - } + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-primitive@2.1.3": - resolution: - { - integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==, - } + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-primitive@2.1.4": - resolution: - { - integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==, - } + '@radix-ui/react-primitive@2.1.4': + resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-progress@1.1.8": - resolution: - { - integrity: sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==, - } + '@radix-ui/react-progress@1.1.8': + resolution: {integrity: sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-radio-group@1.3.8": - resolution: - { - integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==, - } + '@radix-ui/react-radio-group@1.3.8': + resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-roving-focus@1.1.11": - resolution: - { - integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==, - } + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-scroll-area@1.2.10": - resolution: - { - integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==, - } + '@radix-ui/react-scroll-area@1.2.10': + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-select@2.2.6": - resolution: - { - integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==, - } + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-separator@1.1.8": - resolution: - { - integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==, - } + '@radix-ui/react-separator@1.1.8': + resolution: {integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-slider@1.3.6": - resolution: - { - integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==, - } + '@radix-ui/react-slider@1.3.6': + resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-slot@1.2.3": - resolution: - { - integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==, - } + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-slot@1.2.4": - resolution: - { - integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==, - } + '@radix-ui/react-slot@1.2.4': + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-switch@1.2.6": - resolution: - { - integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==, - } + '@radix-ui/react-switch@1.2.6': + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-tabs@1.1.13": - resolution: - { - integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==, - } + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-tooltip@1.2.8": - resolution: - { - integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==, - } + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-use-callback-ref@1.1.1": - resolution: - { - integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==, - } + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-controllable-state@1.2.2": - resolution: - { - integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==, - } + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-effect-event@0.0.2": - resolution: - { - integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==, - } + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-escape-keydown@1.1.1": - resolution: - { - integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==, - } + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-layout-effect@1.1.1": - resolution: - { - integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==, - } + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-previous@1.1.1": - resolution: - { - integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==, - } + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-rect@1.1.1": - resolution: - { - integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==, - } + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-use-size@1.1.1": - resolution: - { - integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==, - } + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@radix-ui/react-visually-hidden@1.2.3": - resolution: - { - integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==, - } + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/react-visually-hidden@1.2.4": - resolution: - { - integrity: sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==, - } + '@radix-ui/react-visually-hidden@1.2.4': + resolution: {integrity: sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==} peerDependencies: - "@types/react": ^19.2.7 - "@types/react-dom": ^19.2.3 + '@types/react': ^19.2.7 + '@types/react-dom': ^19.2.3 react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true - "@types/react-dom": + '@types/react-dom': optional: true - "@radix-ui/rect@1.1.1": - resolution: - { - integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==, - } + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - "@react-dnd/asap@5.0.2": - resolution: - { - integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==, - } + '@react-dnd/asap@5.0.2': + resolution: {integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==} - "@react-dnd/invariant@4.0.2": - resolution: - { - integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==, - } + '@react-dnd/invariant@4.0.2': + resolution: {integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==} - "@react-dnd/shallowequal@4.0.2": - resolution: - { - integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==, - } + '@react-dnd/shallowequal@4.0.2': + resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} - "@rolldown/pluginutils@1.0.0-beta.27": - resolution: - { - integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==, - } + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - "@rollup/pluginutils@5.3.0": - resolution: - { - integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==, - } - engines: { node: ">=14.0.0" } + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - "@rollup/rollup-android-arm-eabi@4.60.0": - resolution: - { - integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==, - } + '@rollup/rollup-android-arm-eabi@4.60.0': + resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} cpu: [arm] os: [android] - "@rollup/rollup-android-arm64@4.60.0": - resolution: - { - integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==, - } + '@rollup/rollup-android-arm64@4.60.0': + resolution: {integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==} cpu: [arm64] os: [android] - "@rollup/rollup-darwin-arm64@4.60.0": - resolution: - { - integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==, - } + '@rollup/rollup-darwin-arm64@4.60.0': + resolution: {integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==} cpu: [arm64] os: [darwin] - "@rollup/rollup-darwin-x64@4.60.0": - resolution: - { - integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==, - } + '@rollup/rollup-darwin-x64@4.60.0': + resolution: {integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==} cpu: [x64] os: [darwin] - "@rollup/rollup-freebsd-arm64@4.60.0": - resolution: - { - integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==, - } + '@rollup/rollup-freebsd-arm64@4.60.0': + resolution: {integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==} cpu: [arm64] os: [freebsd] - "@rollup/rollup-freebsd-x64@4.60.0": - resolution: - { - integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==, - } + '@rollup/rollup-freebsd-x64@4.60.0': + resolution: {integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==} cpu: [x64] os: [freebsd] - "@rollup/rollup-linux-arm-gnueabihf@4.60.0": - resolution: - { - integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==, - } + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': + resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} cpu: [arm] os: [linux] - "@rollup/rollup-linux-arm-musleabihf@4.60.0": - resolution: - { - integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==, - } + '@rollup/rollup-linux-arm-musleabihf@4.60.0': + resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} cpu: [arm] os: [linux] - "@rollup/rollup-linux-arm64-gnu@4.60.0": - resolution: - { - integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==, - } + '@rollup/rollup-linux-arm64-gnu@4.60.0': + resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} cpu: [arm64] os: [linux] - "@rollup/rollup-linux-arm64-musl@4.60.0": - resolution: - { - integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==, - } + '@rollup/rollup-linux-arm64-musl@4.60.0': + resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} cpu: [arm64] os: [linux] - "@rollup/rollup-linux-loong64-gnu@4.60.0": - resolution: - { - integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==, - } + '@rollup/rollup-linux-loong64-gnu@4.60.0': + resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} cpu: [loong64] os: [linux] - "@rollup/rollup-linux-loong64-musl@4.60.0": - resolution: - { - integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==, - } + '@rollup/rollup-linux-loong64-musl@4.60.0': + resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} cpu: [loong64] os: [linux] - "@rollup/rollup-linux-ppc64-gnu@4.60.0": - resolution: - { - integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==, - } + '@rollup/rollup-linux-ppc64-gnu@4.60.0': + resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} cpu: [ppc64] os: [linux] - "@rollup/rollup-linux-ppc64-musl@4.60.0": - resolution: - { - integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==, - } + '@rollup/rollup-linux-ppc64-musl@4.60.0': + resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} cpu: [ppc64] os: [linux] - "@rollup/rollup-linux-riscv64-gnu@4.60.0": - resolution: - { - integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==, - } + '@rollup/rollup-linux-riscv64-gnu@4.60.0': + resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} cpu: [riscv64] os: [linux] - "@rollup/rollup-linux-riscv64-musl@4.60.0": - resolution: - { - integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==, - } + '@rollup/rollup-linux-riscv64-musl@4.60.0': + resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} cpu: [riscv64] os: [linux] - "@rollup/rollup-linux-s390x-gnu@4.60.0": - resolution: - { - integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==, - } + '@rollup/rollup-linux-s390x-gnu@4.60.0': + resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} cpu: [s390x] os: [linux] - "@rollup/rollup-linux-x64-gnu@4.60.0": - resolution: - { - integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==, - } + '@rollup/rollup-linux-x64-gnu@4.60.0': + resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} cpu: [x64] os: [linux] - "@rollup/rollup-linux-x64-musl@4.60.0": - resolution: - { - integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==, - } + '@rollup/rollup-linux-x64-musl@4.60.0': + resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} cpu: [x64] os: [linux] - "@rollup/rollup-openbsd-x64@4.60.0": - resolution: - { - integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==, - } + '@rollup/rollup-openbsd-x64@4.60.0': + resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} cpu: [x64] os: [openbsd] - "@rollup/rollup-openharmony-arm64@4.60.0": - resolution: - { - integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==, - } + '@rollup/rollup-openharmony-arm64@4.60.0': + resolution: {integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==} cpu: [arm64] os: [openharmony] - "@rollup/rollup-win32-arm64-msvc@4.60.0": - resolution: - { - integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==, - } + '@rollup/rollup-win32-arm64-msvc@4.60.0': + resolution: {integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==} cpu: [arm64] os: [win32] - "@rollup/rollup-win32-ia32-msvc@4.60.0": - resolution: - { - integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==, - } + '@rollup/rollup-win32-ia32-msvc@4.60.0': + resolution: {integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==} cpu: [ia32] os: [win32] - "@rollup/rollup-win32-x64-gnu@4.60.0": - resolution: - { - integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==, - } + '@rollup/rollup-win32-x64-gnu@4.60.0': + resolution: {integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==} cpu: [x64] os: [win32] - "@rollup/rollup-win32-x64-msvc@4.60.0": - resolution: - { - integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==, - } + '@rollup/rollup-win32-x64-msvc@4.60.0': + resolution: {integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==} cpu: [x64] os: [win32] - "@rtsao/scc@1.1.0": - resolution: - { - integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==, - } + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - "@rushstack/eslint-patch@1.16.1": - resolution: - { - integrity: sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==, - } + '@rushstack/eslint-patch@1.16.1': + resolution: {integrity: sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==} - "@sindresorhus/merge-streams@2.3.0": - resolution: - { - integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==, - } - engines: { node: ">=18" } + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} - "@standard-schema/utils@0.3.0": - resolution: - { - integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==, - } + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - "@storybook/addon-actions@8.6.14": - resolution: - { - integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==, - } + '@storybook/addon-actions@8.6.14': + resolution: {integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-backgrounds@8.6.14": - resolution: - { - integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==, - } + '@storybook/addon-backgrounds@8.6.14': + resolution: {integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-controls@8.6.14": - resolution: - { - integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==, - } + '@storybook/addon-controls@8.6.14': + resolution: {integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-docs@8.6.14": - resolution: - { - integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==, - } + '@storybook/addon-docs@8.6.14': + resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-essentials@8.6.14": - resolution: - { - integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==, - } + '@storybook/addon-essentials@8.6.14': + resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-highlight@8.6.14": - resolution: - { - integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==, - } + '@storybook/addon-highlight@8.6.14': + resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-interactions@8.6.14": - resolution: - { - integrity: sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==, - } + '@storybook/addon-interactions@8.6.14': + resolution: {integrity: sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-measure@8.6.14": - resolution: - { - integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==, - } + '@storybook/addon-measure@8.6.14': + resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-onboarding@8.6.18": - resolution: - { - integrity: sha512-F0rpD5GwIpstQlRaPYQNroIPECB//yy0v2hHQOjFtH5OnCfJXpih4M5pFYcwXsMStRwLVJWS5ywfz+Xea0hmgg==, - } + '@storybook/addon-onboarding@8.6.18': + resolution: {integrity: sha512-F0rpD5GwIpstQlRaPYQNroIPECB//yy0v2hHQOjFtH5OnCfJXpih4M5pFYcwXsMStRwLVJWS5ywfz+Xea0hmgg==} peerDependencies: storybook: ^8.6.18 - "@storybook/addon-outline@8.6.14": - resolution: - { - integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==, - } + '@storybook/addon-outline@8.6.14': + resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-themes@8.6.18": - resolution: - { - integrity: sha512-v+Xcxo/XB2ayw9E/RygGOqUIaPOXp9XEFv6EF7DRt41/RQkQ846yJBARTC2cH8kCb+7FYcvDLD3GN/ms7i8wNg==, - } + '@storybook/addon-themes@8.6.18': + resolution: {integrity: sha512-v+Xcxo/XB2ayw9E/RygGOqUIaPOXp9XEFv6EF7DRt41/RQkQ846yJBARTC2cH8kCb+7FYcvDLD3GN/ms7i8wNg==} peerDependencies: storybook: ^8.6.18 - "@storybook/addon-toolbars@8.6.14": - resolution: - { - integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==, - } + '@storybook/addon-toolbars@8.6.14': + resolution: {integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/addon-viewport@8.6.14": - resolution: - { - integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==, - } + '@storybook/addon-viewport@8.6.14': + resolution: {integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==} peerDependencies: storybook: ^8.6.14 - "@storybook/blocks@8.6.14": - resolution: - { - integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==, - } + '@storybook/blocks@8.6.14': + resolution: {integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 @@ -4427,1087 +3641,652 @@ packages: react-dom: optional: true - "@storybook/builder-vite@8.6.18": - resolution: - { - integrity: sha512-XLqnOv4C36jlTd4uC8xpWBxv+7GV4/05zWJ0wAcU4qflorropUTirt4UQPGkwIzi+BVAhs9pJj+m4k0IWJtpHg==, - } + '@storybook/builder-vite@8.6.18': + resolution: {integrity: sha512-XLqnOv4C36jlTd4uC8xpWBxv+7GV4/05zWJ0wAcU4qflorropUTirt4UQPGkwIzi+BVAhs9pJj+m4k0IWJtpHg==} peerDependencies: storybook: ^8.6.18 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - "@storybook/components@8.6.18": - resolution: - { - integrity: sha512-55yViiZzPS/cPBuOeW4QGxGqrusjXVyxuknmbYCIwDtFyyvI/CgbjXRHdxNBaIjz+IlftxvBmmSaOqFG5+/dkA==, - } + '@storybook/components@8.6.18': + resolution: {integrity: sha512-55yViiZzPS/cPBuOeW4QGxGqrusjXVyxuknmbYCIwDtFyyvI/CgbjXRHdxNBaIjz+IlftxvBmmSaOqFG5+/dkA==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/core@8.6.18": - resolution: - { - integrity: sha512-dRBP2TnX6fGdS0T2mXBHjkS/3Nlu1ra1huovZVFuM67CYMzrhM/3hX/zru1vWSC5rqY93ZaAhjMciPW4pK5mMQ==, - } + '@storybook/core@8.6.18': + resolution: {integrity: sha512-dRBP2TnX6fGdS0T2mXBHjkS/3Nlu1ra1huovZVFuM67CYMzrhM/3hX/zru1vWSC5rqY93ZaAhjMciPW4pK5mMQ==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - "@storybook/csf-plugin@8.6.14": - resolution: - { - integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==, - } + '@storybook/csf-plugin@8.6.14': + resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/csf-plugin@8.6.18": - resolution: - { - integrity: sha512-x1ioz/L0CwaelCkHci3P31YtvwayN3FBftvwQOPbvRh9qeb4Cpz5IdVDmyvSxxYwXN66uAORNoqgjTi7B4/y5Q==, - } + '@storybook/csf-plugin@8.6.18': + resolution: {integrity: sha512-x1ioz/L0CwaelCkHci3P31YtvwayN3FBftvwQOPbvRh9qeb4Cpz5IdVDmyvSxxYwXN66uAORNoqgjTi7B4/y5Q==} peerDependencies: storybook: ^8.6.18 - "@storybook/csf@0.1.13": - resolution: - { - integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==, - } + '@storybook/csf@0.1.13': + resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==} - "@storybook/global@5.0.0": - resolution: - { - integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==, - } + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - "@storybook/icons@1.6.0": - resolution: - { - integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==, - } - engines: { node: ">=14.0.0" } + '@storybook/icons@1.6.0': + resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==} + engines: {node: '>=14.0.0'} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 - "@storybook/instrumenter@8.6.14": - resolution: - { - integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==, - } + '@storybook/instrumenter@8.6.14': + resolution: {integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==} peerDependencies: storybook: ^8.6.14 - "@storybook/instrumenter@8.6.15": - resolution: - { - integrity: sha512-TvHR/+yyIAOp/1bLulFai2kkhIBtAlBw7J6Jd9DKyInoGhTWNE1G1Y61jD5GWXX29AlwaHfzGUaX5NL1K+FJpg==, - } + '@storybook/instrumenter@8.6.15': + resolution: {integrity: sha512-TvHR/+yyIAOp/1bLulFai2kkhIBtAlBw7J6Jd9DKyInoGhTWNE1G1Y61jD5GWXX29AlwaHfzGUaX5NL1K+FJpg==} peerDependencies: storybook: ^8.6.15 - "@storybook/manager-api@8.6.14": - resolution: - { - integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==, - } + '@storybook/manager-api@8.6.14': + resolution: {integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/manager-api@8.6.18": - resolution: - { - integrity: sha512-BjIp12gEMgzFkEsgKpDIbZdnSWTZpm2dlws8WiPJCpgJtG+HWSxZ0/Ms30Au9yfwzQEKRSbV/5zpsKMGc2SIJw==, - } + '@storybook/manager-api@8.6.18': + resolution: {integrity: sha512-BjIp12gEMgzFkEsgKpDIbZdnSWTZpm2dlws8WiPJCpgJtG+HWSxZ0/Ms30Au9yfwzQEKRSbV/5zpsKMGc2SIJw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/preview-api@8.6.18": - resolution: - { - integrity: sha512-joXRXh3GdVvzhbfIgmix1xs90p8Q/nja7AhEAC2egn5Pl7SKsIYZUCYI6UdrQANb2myg9P552LKXfPect8llKg==, - } + '@storybook/preview-api@8.6.18': + resolution: {integrity: sha512-joXRXh3GdVvzhbfIgmix1xs90p8Q/nja7AhEAC2egn5Pl7SKsIYZUCYI6UdrQANb2myg9P552LKXfPect8llKg==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/react-dom-shim@8.6.14": - resolution: - { - integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==, - } + '@storybook/react-dom-shim@8.6.14': + resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 storybook: ^8.6.14 - "@storybook/react-dom-shim@8.6.18": - resolution: - { - integrity: sha512-N4xULcAWZQTUv4jy1/d346Tyb4gufuC3UaLCuU/iVSZ1brYF4OW3ANr+096btbMxY8pR/65lmtoqr5CTGwnBvA==, - } + '@storybook/react-dom-shim@8.6.18': + resolution: {integrity: sha512-N4xULcAWZQTUv4jy1/d346Tyb4gufuC3UaLCuU/iVSZ1brYF4OW3ANr+096btbMxY8pR/65lmtoqr5CTGwnBvA==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 storybook: ^8.6.18 - "@storybook/react-vite@8.6.18": - resolution: - { - integrity: sha512-qpSYyH2IizlEsI95MJTdIL6xpLSgiNCMoJpHu+IEqLnyvmecRR/YEZvcHalgdtawuXlimH0bAYuwIu3l8Vo6FQ==, - } - engines: { node: ">=18.0.0" } + '@storybook/react-vite@8.6.18': + resolution: {integrity: sha512-qpSYyH2IizlEsI95MJTdIL6xpLSgiNCMoJpHu+IEqLnyvmecRR/YEZvcHalgdtawuXlimH0bAYuwIu3l8Vo6FQ==} + engines: {node: '>=18.0.0'} peerDependencies: - "@storybook/test": 8.6.18 + '@storybook/test': 8.6.18 react: ^19.2.1 react-dom: ^19.2.1 storybook: ^8.6.18 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: - "@storybook/test": + '@storybook/test': optional: true - "@storybook/react@8.6.18": - resolution: - { - integrity: sha512-BuLpzMkKtF+UCQCbi+lYVX9cdcAMG86Lu2dDn7UFkPi5HRNFq/zHPSvlz1XDgL0OYMtcqB1aoVzFzcyzUBhhjw==, - } - engines: { node: ">=18.0.0" } + '@storybook/react@8.6.18': + resolution: {integrity: sha512-BuLpzMkKtF+UCQCbi+lYVX9cdcAMG86Lu2dDn7UFkPi5HRNFq/zHPSvlz1XDgL0OYMtcqB1aoVzFzcyzUBhhjw==} + engines: {node: '>=18.0.0'} peerDependencies: - "@storybook/test": 8.6.18 + '@storybook/test': 8.6.18 react: ^19.2.1 react-dom: ^19.2.1 storybook: ^8.6.18 - typescript: ">= 4.2.x" + typescript: '>= 4.2.x' peerDependenciesMeta: - "@storybook/test": + '@storybook/test': optional: true typescript: optional: true - "@storybook/test@8.6.14": - resolution: - { - integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==, - } + '@storybook/test@8.6.14': + resolution: {integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==} peerDependencies: storybook: ^8.6.14 - "@storybook/test@8.6.15": - resolution: - { - integrity: sha512-EwquDRUDVvWcZds3T2abmB5wSN/Vattal4YtZ6fpBlIUqONV4o/cOBX39cFfQSUCBrIXIjQ6RmapQCHK/PvBYw==, - } + '@storybook/test@8.6.15': + resolution: {integrity: sha512-EwquDRUDVvWcZds3T2abmB5wSN/Vattal4YtZ6fpBlIUqONV4o/cOBX39cFfQSUCBrIXIjQ6RmapQCHK/PvBYw==} peerDependencies: storybook: ^8.6.15 - "@storybook/theming@8.6.14": - resolution: - { - integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==, - } + '@storybook/theming@8.6.14': + resolution: {integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@storybook/theming@8.6.18": - resolution: - { - integrity: sha512-n6OEjEtHupa2PdTwWzRepr7cO8NkDd4rgF6BKLitRbujOspLxzMBEqdphs+QLcuiCIgf33SqmEA64QWnbSMhPw==, - } + '@storybook/theming@8.6.18': + resolution: {integrity: sha512-n6OEjEtHupa2PdTwWzRepr7cO8NkDd4rgF6BKLitRbujOspLxzMBEqdphs+QLcuiCIgf33SqmEA64QWnbSMhPw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - "@swc/counter@0.1.3": - resolution: - { - integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, - } + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - "@swc/helpers@0.5.15": - resolution: - { - integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==, - } + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - "@tabby_ai/hijri-converter@1.0.5": - resolution: - { - integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==, - } - engines: { node: ">=16.0.0" } + '@tabby_ai/hijri-converter@1.0.5': + resolution: {integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==} + engines: {node: '>=16.0.0'} - "@tailwindcss/node@4.2.2": - resolution: - { - integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==, - } + '@tailwindcss/node@4.2.2': + resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} - "@tailwindcss/oxide-android-arm64@4.2.2": - resolution: - { - integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-android-arm64@4.2.2': + resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} + engines: {node: '>= 20'} cpu: [arm64] os: [android] - "@tailwindcss/oxide-darwin-arm64@4.2.2": - resolution: - { - integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-darwin-arm64@4.2.2': + resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} + engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - "@tailwindcss/oxide-darwin-x64@4.2.2": - resolution: - { - integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-darwin-x64@4.2.2': + resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} + engines: {node: '>= 20'} cpu: [x64] os: [darwin] - "@tailwindcss/oxide-freebsd-x64@4.2.2": - resolution: - { - integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-freebsd-x64@4.2.2': + resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} + engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2": - resolution: - { - integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} + engines: {node: '>= 20'} cpu: [arm] os: [linux] - "@tailwindcss/oxide-linux-arm64-gnu@4.2.2": - resolution: - { - integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - "@tailwindcss/oxide-linux-arm64-musl@4.2.2": - resolution: - { - integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - "@tailwindcss/oxide-linux-x64-gnu@4.2.2": - resolution: - { - integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - "@tailwindcss/oxide-linux-x64-musl@4.2.2": - resolution: - { - integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-linux-x64-musl@4.2.2': + resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - "@tailwindcss/oxide-wasm32-wasi@4.2.2": - resolution: - { - integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==, - } - engines: { node: ">=14.0.0" } + '@tailwindcss/oxide-wasm32-wasi@4.2.2': + resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} + engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: - - "@napi-rs/wasm-runtime" - - "@emnapi/core" - - "@emnapi/runtime" - - "@tybys/wasm-util" - - "@emnapi/wasi-threads" + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' - tslib - "@tailwindcss/oxide-win32-arm64-msvc@4.2.2": - resolution: - { - integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} + engines: {node: '>= 20'} cpu: [arm64] os: [win32] - "@tailwindcss/oxide-win32-x64-msvc@4.2.2": - resolution: - { - integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} + engines: {node: '>= 20'} cpu: [x64] os: [win32] - "@tailwindcss/oxide@4.2.2": - resolution: - { - integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==, - } - engines: { node: ">= 20" } + '@tailwindcss/oxide@4.2.2': + resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} + engines: {node: '>= 20'} - "@tailwindcss/vite@4.2.2": - resolution: - { - integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==, - } + '@tailwindcss/vite@4.2.2': + resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - "@tanstack/query-core@5.95.2": - resolution: - { - integrity: sha512-o4T8vZHZET4Bib3jZ/tCW9/7080urD4c+0/AUaYVpIqOsr7y0reBc1oX3ttNaSW5mYyvZHctiQ/UOP2PfdmFEQ==, - } + '@tanstack/query-core@5.95.2': + resolution: {integrity: sha512-o4T8vZHZET4Bib3jZ/tCW9/7080urD4c+0/AUaYVpIqOsr7y0reBc1oX3ttNaSW5mYyvZHctiQ/UOP2PfdmFEQ==} - "@tanstack/query-devtools@5.95.2": - resolution: - { - integrity: sha512-QfaoqBn9uAZ+ICkA8brd1EHj+qBF6glCFgt94U8XP5BT6ppSsDBI8IJ00BU+cAGjQzp6wcKJL2EmRYvxy0TWIg==, - } + '@tanstack/query-devtools@5.95.2': + resolution: {integrity: sha512-QfaoqBn9uAZ+ICkA8brd1EHj+qBF6glCFgt94U8XP5BT6ppSsDBI8IJ00BU+cAGjQzp6wcKJL2EmRYvxy0TWIg==} - "@tanstack/react-query-devtools@5.95.2": - resolution: - { - integrity: sha512-AFQFmbznVkbtfpx8VJ2DylW17wWagQel/qLstVLkYmNRo2CmJt3SNej5hvl6EnEeljJIdC3BTB+W7HZtpsH+3g==, - } + '@tanstack/react-query-devtools@5.95.2': + resolution: {integrity: sha512-AFQFmbznVkbtfpx8VJ2DylW17wWagQel/qLstVLkYmNRo2CmJt3SNej5hvl6EnEeljJIdC3BTB+W7HZtpsH+3g==} peerDependencies: - "@tanstack/react-query": ^5.95.2 + '@tanstack/react-query': ^5.95.2 react: ^19.2.1 - "@tanstack/react-query@5.95.2": - resolution: - { - integrity: sha512-/wGkvLj/st5Ud1Q76KF1uFxScV7WeqN1slQx5280ycwAyYkIPGaRZAEgHxe3bjirSd5Zpwkj6zNcR4cqYni/ZA==, - } + '@tanstack/react-query@5.95.2': + resolution: {integrity: sha512-/wGkvLj/st5Ud1Q76KF1uFxScV7WeqN1slQx5280ycwAyYkIPGaRZAEgHxe3bjirSd5Zpwkj6zNcR4cqYni/ZA==} peerDependencies: react: ^19.2.1 - "@tanstack/react-table@8.21.3": - resolution: - { - integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==, - } - engines: { node: ">=12" } + '@tanstack/react-table@8.21.3': + resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==} + engines: {node: '>=12'} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 - "@tanstack/table-core@8.21.3": - resolution: - { - integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==, - } - engines: { node: ">=12" } + '@tanstack/table-core@8.21.3': + resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} + engines: {node: '>=12'} - "@testing-library/dom@10.4.0": - resolution: - { - integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==, - } - engines: { node: ">=18" } + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} - "@testing-library/jest-dom@6.5.0": - resolution: - { - integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==, - } - engines: { node: ">=14", npm: ">=6", yarn: ">=1" } + '@testing-library/jest-dom@6.5.0': + resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - "@testing-library/user-event@14.5.2": - resolution: - { - integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==, - } - engines: { node: ">=12", npm: ">=6" } + '@testing-library/user-event@14.5.2': + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} peerDependencies: - "@testing-library/dom": ">=7.21.4" + '@testing-library/dom': '>=7.21.4' - "@tinymce/tinymce-react@5.1.1": - resolution: - { - integrity: sha512-DQ0wpvnf/9z8RsOEAmrWZ1DN1PKqcQHfU+DpM3llLze7FHmxVtzuN8O+FYh0oAAF4stzAXwiCIVacfqjMwRieQ==, - } + '@tinymce/tinymce-react@5.1.1': + resolution: {integrity: sha512-DQ0wpvnf/9z8RsOEAmrWZ1DN1PKqcQHfU+DpM3llLze7FHmxVtzuN8O+FYh0oAAF4stzAXwiCIVacfqjMwRieQ==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 - "@tybys/wasm-util@0.10.1": - resolution: - { - integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==, - } + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - "@types/aria-query@5.0.4": - resolution: - { - integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==, - } + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - "@types/babel__core@7.20.5": - resolution: - { - integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, - } + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - "@types/babel__generator@7.27.0": - resolution: - { - integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, - } + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - "@types/babel__template@7.4.4": - resolution: - { - integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, - } + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - "@types/babel__traverse@7.28.0": - resolution: - { - integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==, - } + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - "@types/d3-array@3.2.2": - resolution: - { - integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==, - } + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} - "@types/d3-color@3.1.3": - resolution: - { - integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==, - } + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - "@types/d3-ease@3.0.2": - resolution: - { - integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==, - } + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - "@types/d3-interpolate@3.0.4": - resolution: - { - integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==, - } + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - "@types/d3-path@3.1.1": - resolution: - { - integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==, - } + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} - "@types/d3-scale@4.0.9": - resolution: - { - integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==, - } + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - "@types/d3-shape@3.1.8": - resolution: - { - integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==, - } + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} - "@types/d3-time@3.0.4": - resolution: - { - integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==, - } + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} - "@types/d3-timer@3.0.2": - resolution: - { - integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==, - } + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - "@types/doctrine@0.0.9": - resolution: - { - integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==, - } + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} - "@types/eslint-scope@3.7.7": - resolution: - { - integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, - } + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - "@types/eslint@9.6.1": - resolution: - { - integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==, - } + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - "@types/estree@1.0.8": - resolution: - { - integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, - } + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - "@types/hammerjs@2.0.46": - resolution: - { - integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==, - } + '@types/hammerjs@2.0.46': + resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==} - "@types/js-cookie@3.0.6": - resolution: - { - integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==, - } + '@types/js-cookie@3.0.6': + resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} - "@types/json-schema@7.0.15": - resolution: - { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, - } + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - "@types/json5@0.0.29": - resolution: - { - integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, - } + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - "@types/mdx@2.0.13": - resolution: - { - integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==, - } + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - "@types/node@20.19.37": - resolution: - { - integrity: sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==, - } + '@types/node@20.19.37': + resolution: {integrity: sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==} - "@types/node@22.19.15": - resolution: - { - integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==, - } + '@types/node@22.19.15': + resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} - "@types/react-dom@19.2.3": - resolution: - { - integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==, - } + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 - "@types/react@19.2.14": - resolution: - { - integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==, - } + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} - "@types/resolve@1.20.6": - resolution: - { - integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==, - } + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - "@types/uuid@9.0.8": - resolution: - { - integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==, - } + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - "@types/webpack@5.28.5": - resolution: - { - integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==, - } + '@types/webpack@5.28.5': + resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} - "@types/xlsx@0.0.36": - resolution: - { - integrity: sha512-mvfrKiKKMErQzLMF8ElYEH21qxWCZtN59pHhWGmWCWFJStYdMWjkDSAy6mGowFxHXaXZWe5/TW7pBUiWclIVOw==, - } + '@types/xlsx@0.0.36': + resolution: {integrity: sha512-mvfrKiKKMErQzLMF8ElYEH21qxWCZtN59pHhWGmWCWFJStYdMWjkDSAy6mGowFxHXaXZWe5/TW7pBUiWclIVOw==} deprecated: This is a stub types definition for xlsx (https://github.com/sheetjs/js-xlsx). xlsx provides its own type definitions, so you don't need @types/xlsx installed! - "@typescript-eslint/eslint-plugin@8.57.2": - resolution: - { - integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/eslint-plugin@8.57.2': + resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - "@typescript-eslint/parser": ^8.57.2 + '@typescript-eslint/parser': ^8.57.2 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/parser@8.57.2": - resolution: - { - integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/parser@8.57.2': + resolution: {integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/project-service@8.57.2": - resolution: - { - integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/project-service@8.57.2': + resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/scope-manager@8.57.2": - resolution: - { - integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/scope-manager@8.57.2': + resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@typescript-eslint/tsconfig-utils@8.57.2": - resolution: - { - integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/tsconfig-utils@8.57.2': + resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/type-utils@8.57.2": - resolution: - { - integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/type-utils@8.57.2': + resolution: {integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/types@8.57.2": - resolution: - { - integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/types@8.57.2': + resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@typescript-eslint/typescript-estree@8.57.2": - resolution: - { - integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/typescript-estree@8.57.2': + resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/utils@8.57.2": - resolution: - { - integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/utils@8.57.2': + resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' - "@typescript-eslint/visitor-keys@8.57.2": - resolution: - { - integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@typescript-eslint/visitor-keys@8.57.2': + resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - "@unrs/resolver-binding-android-arm-eabi@1.11.1": - resolution: - { - integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==, - } + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] os: [android] - "@unrs/resolver-binding-android-arm64@1.11.1": - resolution: - { - integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==, - } + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} cpu: [arm64] os: [android] - "@unrs/resolver-binding-darwin-arm64@1.11.1": - resolution: - { - integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==, - } + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} cpu: [arm64] os: [darwin] - "@unrs/resolver-binding-darwin-x64@1.11.1": - resolution: - { - integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==, - } + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} cpu: [x64] os: [darwin] - "@unrs/resolver-binding-freebsd-x64@1.11.1": - resolution: - { - integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==, - } + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} cpu: [x64] os: [freebsd] - "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": - resolution: - { - integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==, - } + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} cpu: [arm] os: [linux] - "@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": - resolution: - { - integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==, - } + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} cpu: [arm] os: [linux] - "@unrs/resolver-binding-linux-arm64-gnu@1.11.1": - resolution: - { - integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==, - } + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] - "@unrs/resolver-binding-linux-arm64-musl@1.11.1": - resolution: - { - integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==, - } + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] - "@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": - resolution: - { - integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==, - } + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] - "@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": - resolution: - { - integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==, - } + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] - "@unrs/resolver-binding-linux-riscv64-musl@1.11.1": - resolution: - { - integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==, - } + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] - "@unrs/resolver-binding-linux-s390x-gnu@1.11.1": - resolution: - { - integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==, - } + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] - "@unrs/resolver-binding-linux-x64-gnu@1.11.1": - resolution: - { - integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==, - } + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] - "@unrs/resolver-binding-linux-x64-musl@1.11.1": - resolution: - { - integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==, - } + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] - "@unrs/resolver-binding-wasm32-wasi@1.11.1": - resolution: - { - integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==, - } - engines: { node: ">=14.0.0" } + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} cpu: [wasm32] - "@unrs/resolver-binding-win32-arm64-msvc@1.11.1": - resolution: - { - integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==, - } + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} cpu: [arm64] os: [win32] - "@unrs/resolver-binding-win32-ia32-msvc@1.11.1": - resolution: - { - integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==, - } + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} cpu: [ia32] os: [win32] - "@unrs/resolver-binding-win32-x64-msvc@1.11.1": - resolution: - { - integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==, - } + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} cpu: [x64] os: [win32] - "@vitejs/plugin-react@4.7.0": - resolution: - { - integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - "@vitest/expect@2.0.5": - resolution: - { - integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==, - } + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - "@vitest/pretty-format@2.0.5": - resolution: - { - integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==, - } + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - "@vitest/pretty-format@2.1.9": - resolution: - { - integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==, - } + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - "@vitest/spy@2.0.5": - resolution: - { - integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==, - } + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - "@vitest/utils@2.0.5": - resolution: - { - integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==, - } + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - "@vitest/utils@2.1.9": - resolution: - { - integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==, - } + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - "@vue/compiler-core@3.5.30": - resolution: - { - integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==, - } + '@vue/compiler-core@3.5.30': + resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==} - "@vue/compiler-dom@3.5.30": - resolution: - { - integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==, - } + '@vue/compiler-dom@3.5.30': + resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==} - "@vue/compiler-sfc@3.5.30": - resolution: - { - integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==, - } + '@vue/compiler-sfc@3.5.30': + resolution: {integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==} - "@vue/compiler-ssr@3.5.30": - resolution: - { - integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==, - } + '@vue/compiler-ssr@3.5.30': + resolution: {integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==} - "@vue/shared@3.5.30": - resolution: - { - integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==, - } + '@vue/shared@3.5.30': + resolution: {integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==} - "@webassemblyjs/ast@1.14.1": - resolution: - { - integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==, - } + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - "@webassemblyjs/floating-point-hex-parser@1.13.2": - resolution: - { - integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==, - } + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - "@webassemblyjs/helper-api-error@1.13.2": - resolution: - { - integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==, - } + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - "@webassemblyjs/helper-buffer@1.14.1": - resolution: - { - integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==, - } + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - "@webassemblyjs/helper-numbers@1.13.2": - resolution: - { - integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==, - } + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - "@webassemblyjs/helper-wasm-bytecode@1.13.2": - resolution: - { - integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==, - } + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - "@webassemblyjs/helper-wasm-section@1.14.1": - resolution: - { - integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==, - } + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - "@webassemblyjs/ieee754@1.13.2": - resolution: - { - integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==, - } + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - "@webassemblyjs/leb128@1.13.2": - resolution: - { - integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==, - } + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - "@webassemblyjs/utf8@1.13.2": - resolution: - { - integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==, - } + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - "@webassemblyjs/wasm-edit@1.14.1": - resolution: - { - integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==, - } + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - "@webassemblyjs/wasm-gen@1.14.1": - resolution: - { - integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==, - } + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - "@webassemblyjs/wasm-opt@1.14.1": - resolution: - { - integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==, - } + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - "@webassemblyjs/wasm-parser@1.14.1": - resolution: - { - integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==, - } + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - "@webassemblyjs/wast-printer@1.14.1": - resolution: - { - integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==, - } + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - "@xlsx/xlsx-populate@0.0.8": - resolution: - { - integrity: sha512-6yu24ePaO3cnAuti77FhVPZvKkzUt6s6x3zJ9wiuBSjR0ImWu7l/SgePelZaf8Oty4SP4rg4vznQVCGQtfzu2A==, - } - engines: { node: ">=16" } + '@xlsx/xlsx-populate@0.0.8': + resolution: {integrity: sha512-6yu24ePaO3cnAuti77FhVPZvKkzUt6s6x3zJ9wiuBSjR0ImWu7l/SgePelZaf8Oty4SP4rg4vznQVCGQtfzu2A==} + engines: {node: '>=16'} - "@xtuc/ieee754@1.2.0": - resolution: - { - integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, - } + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - "@xtuc/long@4.2.2": - resolution: - { - integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, - } + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} acorn-import-phases@1.0.4: - resolution: - { - integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} peerDependencies: acorn: ^8.14.0 acorn-jsx@5.3.2: - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn@8.16.0: - resolution: - { - integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} hasBin: true adler-32@1.3.1: - resolution: - { - integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} ajv-formats@2.1.1: - resolution: - { - integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==, - } + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -5515,1321 +4294,763 @@ packages: optional: true ajv-keywords@5.1.0: - resolution: - { - integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==, - } + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 ajv@6.14.0: - resolution: - { - integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==, - } + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} ajv@8.18.0: - resolution: - { - integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==, - } + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} ansi-escapes@7.3.0: - resolution: - { - integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} ansi-regex@6.2.2: - resolution: - { - integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} ansi-styles@5.2.0: - resolution: - { - integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} ansi-styles@6.2.3: - resolution: - { - integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} any-promise@1.3.0: - resolution: - { - integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, - } + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} arg@5.0.2: - resolution: - { - integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, - } + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} aria-hidden@1.2.6: - resolution: - { - integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} aria-query@5.3.0: - resolution: - { - integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, - } + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} aria-query@5.3.2: - resolution: - { - integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-buffer-byte-length@1.0.2: - resolution: - { - integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} array-includes@3.1.9: - resolution: - { - integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} array.prototype.findlast@1.2.5: - resolution: - { - integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} array.prototype.findlastindex@1.2.6: - resolution: - { - integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} array.prototype.flat@1.3.3: - resolution: - { - integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} array.prototype.flatmap@1.3.3: - resolution: - { - integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} array.prototype.tosorted@1.1.4: - resolution: - { - integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} arraybuffer.prototype.slice@1.0.4: - resolution: - { - integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} assertion-error@2.0.1: - resolution: - { - integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} ast-module-types@6.0.1: - resolution: - { - integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} + engines: {node: '>=18'} ast-types-flow@0.0.8: - resolution: - { - integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==, - } + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} ast-types@0.16.1: - resolution: - { - integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} async-function@1.0.0: - resolution: - { - integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} async-wave@1.8.6: - resolution: - { - integrity: sha512-wqWvr0Mrc1TrY92hN9MV0Xebxa6kt+T7QtjZ7FEMv+RUBa/Hfpz/UOgz0rB+7uqVK8TuBSXykOyU/k9gogdLkw==, - } + resolution: {integrity: sha512-wqWvr0Mrc1TrY92hN9MV0Xebxa6kt+T7QtjZ7FEMv+RUBa/Hfpz/UOgz0rB+7uqVK8TuBSXykOyU/k9gogdLkw==} asynckit@0.4.0: - resolution: - { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, - } + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} attr-accept@2.2.5: - resolution: - { - integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} + engines: {node: '>=4'} autoprefixer@10.4.27: - resolution: - { - integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} + engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 available-typed-arrays@1.0.7: - resolution: - { - integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} axe-core@4.11.1: - resolution: - { - integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} + engines: {node: '>=4'} axios@1.8.1: - resolution: - { - integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==, - } + resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} axobject-query@4.1.0: - resolution: - { - integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} balanced-match@4.0.4: - resolution: - { - integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} base64-arraybuffer@1.0.2: - resolution: - { - integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==, - } - engines: { node: ">= 0.6.0" } + resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} + engines: {node: '>= 0.6.0'} baseline-browser-mapping@2.10.10: - resolution: - { - integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==} + engines: {node: '>=6.0.0'} hasBin: true better-opn@3.0.2: - resolution: - { - integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} binary-extensions@2.3.0: - resolution: - { - integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} brace-expansion@1.1.12: - resolution: - { - integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==, - } + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} brace-expansion@2.0.2: - resolution: - { - integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==, - } + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} brace-expansion@5.0.5: - resolution: - { - integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: - resolution: - { - integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} browser-assert@1.2.1: - resolution: - { - integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==, - } + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} browserslist@4.28.1: - resolution: - { - integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==, - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true buffer-from@1.1.2: - resolution: - { - integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, - } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} bundle-require@5.1.0: - resolution: - { - integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: - esbuild: ">=0.18" + esbuild: '>=0.18' busboy@1.6.0: - resolution: - { - integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==, - } - engines: { node: ">=10.16.0" } + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} cac@6.7.14: - resolution: - { - integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} call-bind-apply-helpers@1.0.2: - resolution: - { - integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} call-bind@1.0.8: - resolution: - { - integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} call-bound@1.0.4: - resolution: - { - integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} camelcase-css@2.0.1: - resolution: - { - integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} camelcase@5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} caniuse-lite@1.0.30001781: - resolution: - { - integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==, - } + resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} cfb@1.2.2: - resolution: - { - integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} chai@5.3.3: - resolution: - { - integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} chalk@3.0.0: - resolution: - { - integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} chart.js@4.5.1: - resolution: - { - integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==, - } - engines: { pnpm: ">=8" } + resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} + engines: {pnpm: '>=8'} chartjs-plugin-zoom@2.2.0: - resolution: - { - integrity: sha512-in6kcdiTlP6npIVLMd4zXZ08PDUXC52gZ4FAy5oyjk1zX3gKarXMAof7B9eFiisf9WOC3bh2saHg+J5WtLXZeA==, - } + resolution: {integrity: sha512-in6kcdiTlP6npIVLMd4zXZ08PDUXC52gZ4FAy5oyjk1zX3gKarXMAof7B9eFiisf9WOC3bh2saHg+J5WtLXZeA==} peerDependencies: - chart.js: ">=3.2.0" + chart.js: '>=3.2.0' check-error@2.1.3: - resolution: - { - integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==, - } - engines: { node: ">= 16" } + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} chokidar@3.6.0: - resolution: - { - integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==, - } - engines: { node: ">= 8.10.0" } + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} chokidar@4.0.3: - resolution: - { - integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, - } - engines: { node: ">= 14.16.0" } + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} chrome-trace-event@1.0.4: - resolution: - { - integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} class-variance-authority@0.7.1: - resolution: - { - integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==, - } + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} cli-cursor@5.0.0: - resolution: - { - integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} cli-truncate@5.2.0: - resolution: - { - integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} + engines: {node: '>=20'} client-only@0.0.1: - resolution: - { - integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, - } + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} cliui@6.0.0: - resolution: - { - integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, - } + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} cliui@8.0.1: - resolution: - { - integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} cliui@9.0.1: - resolution: - { - integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} clsx@2.1.1: - resolution: - { - integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} codepage@1.15.0: - resolution: - { - integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: ">=7.0.0" } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} colorette@2.0.20: - resolution: - { - integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, - } + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} combine-errors@3.0.3: - resolution: - { - integrity: sha512-C8ikRNRMygCwaTx+Ek3Yr+OuZzgZjduCOfSQBjbM8V3MfgcjSTeto/GXP6PAwKvJz/v15b7GHZvx5rOlczFw/Q==, - } + resolution: {integrity: sha512-C8ikRNRMygCwaTx+Ek3Yr+OuZzgZjduCOfSQBjbM8V3MfgcjSTeto/GXP6PAwKvJz/v15b7GHZvx5rOlczFw/Q==} combined-stream@1.0.8: - resolution: - { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, - } - engines: { node: ">= 0.8" } + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} commander@12.1.0: - resolution: - { - integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} commander@14.0.3: - resolution: - { - integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} commander@2.20.3: - resolution: - { - integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, - } + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} commander@4.1.1: - resolution: - { - integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, - } + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} consola@3.4.2: - resolution: - { - integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==, - } - engines: { node: ^14.18.0 || >=16.10.0 } + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} convert-source-map@2.0.0: - resolution: - { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, - } + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} core-util-is@1.0.3: - resolution: - { - integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, - } + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} cosmiconfig@9.0.1: - resolution: - { - integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} + engines: {node: '>=14'} peerDependencies: - typescript: ">=4.9.5" + typescript: '>=4.9.5' peerDependenciesMeta: typescript: optional: true crc-32@1.2.2: - resolution: - { - integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} hasBin: true cross-spawn@7.0.6: - resolution: - { - integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} css-line-break@2.1.0: - resolution: - { - integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==, - } + resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} css.escape@1.5.1: - resolution: - { - integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==, - } + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} csscolorparser@1.0.3: - resolution: - { - integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==, - } + resolution: {integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==} cssesc@3.0.0: - resolution: - { - integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true csstype@3.2.3: - resolution: - { - integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, - } + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} custom-error-instance@2.1.1: - resolution: - { - integrity: sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg==, - } + resolution: {integrity: sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg==} d3-array@3.2.4: - resolution: - { - integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} d3-color@3.1.0: - resolution: - { - integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} d3-ease@3.0.1: - resolution: - { - integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} d3-format@3.1.2: - resolution: - { - integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} d3-interpolate@3.0.1: - resolution: - { - integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} d3-path@3.1.0: - resolution: - { - integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} d3-scale@4.0.2: - resolution: - { - integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} d3-shape@3.2.0: - resolution: - { - integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} d3-time-format@4.1.0: - resolution: - { - integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} d3-time@3.1.0: - resolution: - { - integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} d3-timer@3.0.1: - resolution: - { - integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} damerau-levenshtein@1.0.8: - resolution: - { - integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, - } + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} data-view-buffer@1.0.2: - resolution: - { - integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} data-view-byte-length@1.0.2: - resolution: - { - integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} data-view-byte-offset@1.0.1: - resolution: - { - integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} date-fns-jalali@4.1.0-0: - resolution: - { - integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==, - } + resolution: {integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==} date-fns@3.6.0: - resolution: - { - integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==, - } + resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} date-fns@4.1.0: - resolution: - { - integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==, - } + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} dayjs@1.11.20: - resolution: - { - integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==, - } + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} debug@3.2.7: - resolution: - { - integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, - } + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true debug@4.4.3: - resolution: - { - integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true decamelize@1.2.0: - resolution: - { - integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} decimal.js-light@2.5.1: - resolution: - { - integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==, - } + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} deep-eql@5.0.2: - resolution: - { - integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} define-data-property@1.1.4: - resolution: - { - integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} define-lazy-prop@2.0.0: - resolution: - { - integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} define-properties@1.2.1: - resolution: - { - integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} delayed-stream@1.0.0: - resolution: - { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, - } - engines: { node: ">=0.4.0" } + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} dequal@2.0.3: - resolution: - { - integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} detect-libc@2.1.2: - resolution: - { - integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} detect-node-es@1.1.0: - resolution: - { - integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, - } + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} detective-amd@6.0.1: - resolution: - { - integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==} + engines: {node: '>=18'} hasBin: true detective-cjs@6.1.0: - resolution: - { - integrity: sha512-Qt3S4IddVNDb+71lm+jmt5NznIsgcKlibTnrw9Zr91rT9vRwKp+73+ImqLTNrQj4YuOxnzrC7GwIAVwF7136XQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-Qt3S4IddVNDb+71lm+jmt5NznIsgcKlibTnrw9Zr91rT9vRwKp+73+ImqLTNrQj4YuOxnzrC7GwIAVwF7136XQ==} + engines: {node: '>=18'} detective-es6@5.0.1: - resolution: - { - integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==} + engines: {node: '>=18'} detective-postcss@7.0.1: - resolution: - { - integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==, - } - engines: { node: ^14.0.0 || >=16.0.0 } + resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==} + engines: {node: ^14.0.0 || >=16.0.0} peerDependencies: postcss: ^8.4.47 detective-sass@6.0.1: - resolution: - { - integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==} + engines: {node: '>=18'} detective-scss@5.0.1: - resolution: - { - integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==} + engines: {node: '>=18'} detective-stylus@5.0.1: - resolution: - { - integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} + engines: {node: '>=18'} detective-typescript@14.0.0: - resolution: - { - integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} + engines: {node: '>=18'} peerDependencies: typescript: ^5.4.4 detective-vue2@2.2.0: - resolution: - { - integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} + engines: {node: '>=18'} peerDependencies: typescript: ^5.4.4 didyoumean@1.2.2: - resolution: - { - integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, - } + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dijkstrajs@1.0.3: - resolution: - { - integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==, - } + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} dlv@1.1.3: - resolution: - { - integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, - } + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dnd-core@16.0.1: - resolution: - { - integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==, - } + resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} dnd-multi-backend@8.1.2: - resolution: - { - integrity: sha512-KPDVEsiM+6gNEegqZYTWJQgJxYV4vB91tUrvoKJjaS0wwWqT/jNU0P7xJAwCue/cbasJNvk2dFZH7tC+bjX1Rg==, - } + resolution: {integrity: sha512-KPDVEsiM+6gNEegqZYTWJQgJxYV4vB91tUrvoKJjaS0wwWqT/jNU0P7xJAwCue/cbasJNvk2dFZH7tC+bjX1Rg==} peerDependencies: dnd-core: ^16.0.1 doctrine@2.1.0: - resolution: - { - integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} doctrine@3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dom-accessibility-api@0.5.16: - resolution: - { - integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==, - } + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dom-accessibility-api@0.6.3: - resolution: - { - integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==, - } + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} dom-helpers@5.2.1: - resolution: - { - integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==, - } + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dunder-proto@1.0.1: - resolution: - { - integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} earcut@2.2.4: - resolution: - { - integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==, - } + resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} eastasianwidth@0.2.0: - resolution: - { - integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, - } + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} effector@23.4.4: - resolution: - { - integrity: sha512-QkZboRN28K/iwxigDhlJcI3ux3aNbt8kYGGH/GkqWG0OlGeyuBhb7PdM89Iu+ogV8Lmz16xIlwnXR2UNWI6psg==, - } - engines: { node: ">=11.0.0" } + resolution: {integrity: sha512-QkZboRN28K/iwxigDhlJcI3ux3aNbt8kYGGH/GkqWG0OlGeyuBhb7PdM89Iu+ogV8Lmz16xIlwnXR2UNWI6psg==} + engines: {node: '>=11.0.0'} electron-to-chromium@1.5.323: - resolution: - { - integrity: sha512-oQm+FxbazvN2WICCbvJgj3IYPKV8awip57+W5VP+Aatk4kFU4pDYCPHZOX22Z27zpw8uttBehEqgK+VTJAYrVw==, - } + resolution: {integrity: sha512-oQm+FxbazvN2WICCbvJgj3IYPKV8awip57+W5VP+Aatk4kFU4pDYCPHZOX22Z27zpw8uttBehEqgK+VTJAYrVw==} embla-carousel-autoplay@8.6.0: - resolution: - { - integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==, - } + resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} peerDependencies: embla-carousel: 8.6.0 embla-carousel-react@8.6.0: - resolution: - { - integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==, - } + resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} peerDependencies: react: ^19.2.1 embla-carousel-reactive-utils@8.6.0: - resolution: - { - integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==, - } + resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} peerDependencies: embla-carousel: 8.6.0 embla-carousel@8.6.0: - resolution: - { - integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==, - } + resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} emoji-regex@10.6.0: - resolution: - { - integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==, - } + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: - resolution: - { - integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, - } + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} empathic@1.1.0: - resolution: - { - integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==} + engines: {node: '>=14'} enhanced-resolve@5.20.1: - resolution: - { - integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + engines: {node: '>=10.13.0'} entities@7.0.1: - resolution: - { - integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==, - } - engines: { node: ">=0.12" } + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} env-paths@2.2.1: - resolution: - { - integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} environment@1.1.0: - resolution: - { - integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} error-ex@1.3.4: - resolution: - { - integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==, - } + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} es-abstract@1.24.1: - resolution: - { - integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} + engines: {node: '>= 0.4'} es-define-property@1.0.1: - resolution: - { - integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} es-errors@1.3.0: - resolution: - { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} es-iterator-helpers@1.3.1: - resolution: - { - integrity: sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==} + engines: {node: '>= 0.4'} es-module-lexer@2.0.0: - resolution: - { - integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==, - } + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} es-object-atoms@1.1.1: - resolution: - { - integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: - resolution: - { - integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} es-shim-unscopables@1.1.0: - resolution: - { - integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} es-to-primitive@1.3.0: - resolution: - { - integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} esbuild-register@3.6.0: - resolution: - { - integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==, - } + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: - esbuild: ">=0.12 <1" + esbuild: '>=0.12 <1' esbuild@0.21.5: - resolution: - { - integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} hasBin: true esbuild@0.24.2: - resolution: - { - integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} hasBin: true esbuild@0.25.12: - resolution: - { - integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} hasBin: true escalade@3.2.0: - resolution: - { - integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} escodegen@2.1.0: - resolution: - { - integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, - } - engines: { node: ">=6.0" } + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} hasBin: true eslint-config-next@15.3.8: - resolution: - { - integrity: sha512-s/imi0g/LQZsXif8RhlwhgryyqyMhEIMkUL0Yvj0l16ByEAqve4wodS8al+bt+utxf68fgfb1EXlOpuZKqOjlg==, - } + resolution: {integrity: sha512-s/imi0g/LQZsXif8RhlwhgryyqyMhEIMkUL0Yvj0l16ByEAqve4wodS8al+bt+utxf68fgfb1EXlOpuZKqOjlg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: ">=3.3.1" + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-config-next@15.4.0: + resolution: {integrity: sha512-OFkQ8br0wuZNRlXDyLpfaCwzW+qayzNaiHNcLHDMW874/1Nktb2+cCUMlItXdzDvNS/QY5jggKlYXEH2+vz1BA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' peerDependenciesMeta: typescript: optional: true eslint-import-resolver-node@0.3.9: - resolution: - { - integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, - } + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} eslint-import-resolver-typescript@3.10.1: - resolution: - { - integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: "*" - eslint-plugin-import: "*" - eslint-plugin-import-x: "*" + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' peerDependenciesMeta: eslint-plugin-import: optional: true @@ -6837,19 +5058,16 @@ packages: optional: true eslint-module-utils@2.12.1: - resolution: - { - integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" - eslint: "*" - eslint-import-resolver-node: "*" - eslint-import-resolver-typescript: "*" - eslint-import-resolver-webpack: "*" + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true eslint: optional: true @@ -6861,263 +5079,158 @@ packages: optional: true eslint-plugin-import@2.32.0: - resolution: - { - integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} peerDependencies: - "@typescript-eslint/parser": "*" + '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: - "@typescript-eslint/parser": + '@typescript-eslint/parser': optional: true eslint-plugin-jsx-a11y@6.10.2: - resolution: - { - integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 eslint-plugin-react-hooks@5.2.0: - resolution: - { - integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 eslint-plugin-react-refresh@0.4.26: - resolution: - { - integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==, - } + resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} peerDependencies: - eslint: ">=8.40" + eslint: '>=8.40' eslint-plugin-react@7.37.5: - resolution: - { - integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint-plugin-simple-import-sort@12.1.1: - resolution: - { - integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==, - } + resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} peerDependencies: - eslint: ">=5.0.0" + eslint: '>=5.0.0' eslint-plugin-storybook@0.11.6: - resolution: - { - integrity: sha512-3WodYD6Bs9ACqnB+TP2TuLh774c/nacAjxSKOP9bHJ2c8rf+nrhocxjjeAWNmO9IPkFIzTKlcl0vNXI2yYpVOw==, - } - engines: { node: ">= 18" } + resolution: {integrity: sha512-3WodYD6Bs9ACqnB+TP2TuLh774c/nacAjxSKOP9bHJ2c8rf+nrhocxjjeAWNmO9IPkFIzTKlcl0vNXI2yYpVOw==} + engines: {node: '>= 18'} peerDependencies: - eslint: ">=8" + eslint: '>=8' eslint-scope@5.1.1: - resolution: - { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} eslint-scope@8.4.0: - resolution: - { - integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: - resolution: - { - integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint-visitor-keys@4.2.1: - resolution: - { - integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@5.0.1: - resolution: - { - integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, - } - engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint@9.39.4: - resolution: - { - integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: - jiti: "*" + jiti: '*' peerDependenciesMeta: jiti: optional: true espree@10.4.0: - resolution: - { - integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: - resolution: - { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true esquery@1.7.0: - resolution: - { - integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} estraverse@4.3.0: - resolution: - { - integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, - } + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} estree-walker@3.0.3: - resolution: - { - integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, - } + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} eventemitter3@4.0.7: - resolution: - { - integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, - } + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} eventemitter3@5.0.4: - resolution: - { - integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==, - } + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} events@3.3.0: - resolution: - { - integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, - } - engines: { node: ">=0.8.x" } + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-equals@5.4.0: - resolution: - { - integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==, - } - engines: { node: ">=6.0.0" } + resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} + engines: {node: '>=6.0.0'} fast-glob@3.3.1: - resolution: - { - integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, - } - engines: { node: ">=8.6.0" } + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} fast-glob@3.3.3: - resolution: - { - integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, - } - engines: { node: ">=8.6.0" } + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} fast-uri@3.1.0: - resolution: - { - integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==, - } + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fastest-levenshtein@1.0.16: - resolution: - { - integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==, - } - engines: { node: ">= 4.9.1" } + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} fastq@1.20.1: - resolution: - { - integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==, - } + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fdir@6.5.0: - resolution: - { - integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -7125,110 +5238,68 @@ packages: optional: true file-entry-cache@8.0.0: - resolution: - { - integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, - } - engines: { node: ">=16.0.0" } + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-selector@2.1.2: - resolution: - { - integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==, - } - engines: { node: ">= 12" } + resolution: {integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==} + engines: {node: '>= 12'} fill-range@7.1.1: - resolution: - { - integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} find-up@4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} flat-cache@4.0.1: - resolution: - { - integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, - } - engines: { node: ">=16" } + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.4.2: - resolution: - { - integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==, - } + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} follow-redirects@1.15.11: - resolution: - { - integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} peerDependencies: - debug: "*" + debug: '*' peerDependenciesMeta: debug: optional: true for-each@0.3.5: - resolution: - { - integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} foreground-child@3.3.1: - resolution: - { - integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} form-data@4.0.5: - resolution: - { - integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} frac@1.1.2: - resolution: - { - integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} fraction.js@5.3.4: - resolution: - { - integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==, - } + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} framer-motion@11.18.2: - resolution: - { - integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==, - } + resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} peerDependencies: - "@emotion/is-prop-valid": "*" + '@emotion/is-prop-valid': '*' react: ^19.2.1 react-dom: ^19.2.1 peerDependenciesMeta: - "@emotion/is-prop-valid": + '@emotion/is-prop-valid': optional: true react: optional: true @@ -7236,286 +5307,163 @@ packages: optional: true fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, - } + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} function.prototype.name@1.1.8: - resolution: - { - integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, - } + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} generator-function@2.0.1: - resolution: - { - integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} gensync@1.0.0-beta.2: - resolution: - { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, - } - engines: { node: ">=6.9.0" } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} geotiff@2.1.3: - resolution: - { - integrity: sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==, - } - engines: { node: ">=10.19" } + resolution: {integrity: sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==} + engines: {node: '>=10.19'} get-amd-module-type@6.0.1: - resolution: - { - integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==} + engines: {node: '>=18'} get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, - } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} get-east-asian-width@1.5.0: - resolution: - { - integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} get-intrinsic@1.3.0: - resolution: - { - integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} get-nonce@1.0.1: - resolution: - { - integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} get-proto@1.0.1: - resolution: - { - integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} get-symbol-description@1.1.0: - resolution: - { - integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} get-tsconfig@4.13.7: - resolution: - { - integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==, - } + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} glob-to-regexp@0.4.1: - resolution: - { - integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, - } + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} glob@10.5.0: - resolution: - { - integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==, - } + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true globals@14.0.0: - resolution: - { - integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globals@15.15.0: - resolution: - { - integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} globalthis@1.0.4: - resolution: - { - integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} globby@14.1.0: - resolution: - { - integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} globrex@0.1.2: - resolution: - { - integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==, - } + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} gonzales-pe@4.3.0: - resolution: - { - integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==, - } - engines: { node: ">=0.6.0" } + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} + engines: {node: '>=0.6.0'} hasBin: true goober@2.1.18: - resolution: - { - integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==, - } + resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==} peerDependencies: csstype: ^3.0.10 gopd@1.2.0: - resolution: - { - integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, - } + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} hammerjs@2.0.8: - resolution: - { - integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==, - } - engines: { node: ">=0.8.0" } + resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==} + engines: {node: '>=0.8.0'} has-bigints@1.1.0: - resolution: - { - integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} has-property-descriptors@1.0.2: - resolution: - { - integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, - } + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} has-proto@1.2.0: - resolution: - { - integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} has-symbols@1.1.0: - resolution: - { - integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} has-tostringtag@1.0.2: - resolution: - { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} hasown@2.0.2: - resolution: - { - integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} hoist-non-react-statics@3.3.2: - resolution: - { - integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==, - } + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} html-parse-stringify@3.0.1: - resolution: - { - integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==, - } + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} html2canvas@1.4.1: - resolution: - { - integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==, - } - engines: { node: ">=8.0.0" } + resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} + engines: {node: '>=8.0.0'} husky@9.1.7: - resolution: - { - integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} hasBin: true i18next@25.10.9: - resolution: - { - integrity: sha512-hQY9/bFoQKGlSKMlaCuLR8w1h5JjieqrsnZvEmj1Ja6Ec7fbyc4cTrCsY9mb9Sd8YQ/swsrKz1S9M8AcvVI70w==, - } + resolution: {integrity: sha512-hQY9/bFoQKGlSKMlaCuLR8w1h5JjieqrsnZvEmj1Ja6Ec7fbyc4cTrCsY9mb9Sd8YQ/swsrKz1S9M8AcvVI70w==} peerDependencies: typescript: ^5 || ^6 peerDependenciesMeta: @@ -7523,1087 +5471,616 @@ packages: optional: true ieee754@1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, - } + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} ignore@5.3.2: - resolution: - { - integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} ignore@7.0.5: - resolution: - { - integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} immediate@3.0.6: - resolution: - { - integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, - } + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} immer@10.2.0: - resolution: - { - integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==, - } + resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} import-fresh@3.3.1: - resolution: - { - integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: ">=0.8.19" } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} indent-string@4.0.0: - resolution: - { - integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} inherits@2.0.3: - resolution: - { - integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==, - } + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} internal-slot@1.1.0: - resolution: - { - integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} internmap@2.0.3: - resolution: - { - integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} is-arguments@1.2.0: - resolution: - { - integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} is-array-buffer@3.0.5: - resolution: - { - integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} is-arrayish@0.2.1: - resolution: - { - integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, - } + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-async-function@2.1.1: - resolution: - { - integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} is-bigint@1.1.0: - resolution: - { - integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} is-boolean-object@1.2.2: - resolution: - { - integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} is-bun-module@2.0.0: - resolution: - { - integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==, - } + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} is-core-module@2.16.1: - resolution: - { - integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} is-data-view@1.0.2: - resolution: - { - integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} is-date-object@1.1.0: - resolution: - { - integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} is-docker@2.2.1: - resolution: - { - integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} hasBin: true is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} is-finalizationregistry@1.1.1: - resolution: - { - integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} is-fullwidth-code-point@5.1.0: - resolution: - { - integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} is-generator-function@1.1.2: - resolution: - { - integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} is-map@2.0.3: - resolution: - { - integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} is-negative-zero@2.0.3: - resolution: - { - integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} is-number-object@1.1.1: - resolution: - { - integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: ">=0.12.0" } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} is-promise@4.0.0: - resolution: - { - integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==, - } + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} is-regex@1.2.1: - resolution: - { - integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} is-set@2.0.3: - resolution: - { - integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} is-shared-array-buffer@1.0.4: - resolution: - { - integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} is-stream@2.0.1: - resolution: - { - integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} is-string@1.1.1: - resolution: - { - integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} is-symbol@1.1.1: - resolution: - { - integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} is-typed-array@1.1.15: - resolution: - { - integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} is-url-superb@4.0.0: - resolution: - { - integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} is-url@1.2.4: - resolution: - { - integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==, - } + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} is-weakmap@2.0.2: - resolution: - { - integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} is-weakref@1.1.1: - resolution: - { - integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} is-weakset@2.0.4: - resolution: - { - integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} is-wsl@2.2.0: - resolution: - { - integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} isarray@1.0.0: - resolution: - { - integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, - } + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, - } + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} iterator.prototype@1.1.5: - resolution: - { - integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} jackspeak@3.4.3: - resolution: - { - integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, - } + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} jest-worker@27.5.1: - resolution: - { - integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} jiti@1.21.7: - resolution: - { - integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==, - } + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true jiti@2.6.1: - resolution: - { - integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==, - } + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true joycon@3.1.1: - resolution: - { - integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} js-base64@3.7.8: - resolution: - { - integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==, - } + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} js-cookie@3.0.5: - resolution: - { - integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} js-sha512@0.9.0: - resolution: - { - integrity: sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==, - } + resolution: {integrity: sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==} js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} js-yaml@4.1.1: - resolution: - { - integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==, - } + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true jsdoc-type-pratt-parser@4.8.0: - resolution: - { - integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} + engines: {node: '>=12.0.0'} jsesc@3.1.0: - resolution: - { - integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, - } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} json-parse-even-better-errors@2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, - } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-schema-traverse@1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, - } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} json-stringify-pretty-compact@2.0.0: - resolution: - { - integrity: sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==, - } + resolution: {integrity: sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==} json5@1.0.2: - resolution: - { - integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, - } + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true jsx-ast-utils@3.3.5: - resolution: - { - integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, - } - engines: { node: ">=4.0" } + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} jszip@3.10.1: - resolution: - { - integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==, - } + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} keyv@4.5.4: - resolution: - { - integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, - } + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} language-subtag-registry@0.3.23: - resolution: - { - integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==, - } + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} language-tags@1.0.9: - resolution: - { - integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==, - } - engines: { node: ">=0.10" } + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} lerc@3.0.0: - resolution: - { - integrity: sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==, - } + resolution: {integrity: sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==} levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} libphonenumber-js@1.12.40: - resolution: - { - integrity: sha512-HKGs7GowShNls3Zh+7DTr6wYpPk5jC78l508yQQY3e8ZgJChM3A9JZghmMJZuK+5bogSfuTafpjksGSR3aMIEg==, - } + resolution: {integrity: sha512-HKGs7GowShNls3Zh+7DTr6wYpPk5jC78l508yQQY3e8ZgJChM3A9JZghmMJZuK+5bogSfuTafpjksGSR3aMIEg==} lie@3.3.0: - resolution: - { - integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==, - } + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} lightningcss-android-arm64@1.32.0: - resolution: - { - integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] lightningcss-darwin-arm64@1.32.0: - resolution: - { - integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] lightningcss-darwin-x64@1.32.0: - resolution: - { - integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] lightningcss-freebsd-x64@1.32.0: - resolution: - { - integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: - { - integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] lightningcss-linux-arm64-gnu@1.32.0: - resolution: - { - integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] lightningcss-linux-arm64-musl@1.32.0: - resolution: - { - integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] lightningcss-linux-x64-gnu@1.32.0: - resolution: - { - integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] lightningcss-linux-x64-musl@1.32.0: - resolution: - { - integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] lightningcss-win32-arm64-msvc@1.32.0: - resolution: - { - integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] lightningcss-win32-x64-msvc@1.32.0: - resolution: - { - integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] lightningcss@1.32.0: - resolution: - { - integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} lilconfig@3.1.3: - resolution: - { - integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} lines-and-columns@1.2.4: - resolution: - { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, - } + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} lint-staged@16.4.0: - resolution: - { - integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==, - } - engines: { node: ">=20.17" } + resolution: {integrity: sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==} + engines: {node: '>=20.17'} hasBin: true listr2@9.0.5: - resolution: - { - integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==, - } - engines: { node: ">=20.0.0" } + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} + engines: {node: '>=20.0.0'} load-tsconfig@0.2.5: - resolution: - { - integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} loader-runner@4.3.1: - resolution: - { - integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==, - } - engines: { node: ">=6.11.5" } + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} + engines: {node: '>=6.11.5'} locate-path@5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} lodash-es@4.17.23: - resolution: - { - integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==, - } + resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} lodash._baseiteratee@4.7.0: - resolution: - { - integrity: sha512-nqB9M+wITz0BX/Q2xg6fQ8mLkyfF7MU7eE+MNBNjTHFKeKaZAPEzEg+E8LWxKWf1DQVflNEn9N49yAuqKh2mWQ==, - } + resolution: {integrity: sha512-nqB9M+wITz0BX/Q2xg6fQ8mLkyfF7MU7eE+MNBNjTHFKeKaZAPEzEg+E8LWxKWf1DQVflNEn9N49yAuqKh2mWQ==} lodash._basetostring@4.12.0: - resolution: - { - integrity: sha512-SwcRIbyxnN6CFEEK4K1y+zuApvWdpQdBHM/swxP962s8HIxPO3alBH5t3m/dl+f4CMUug6sJb7Pww8d13/9WSw==, - } + resolution: {integrity: sha512-SwcRIbyxnN6CFEEK4K1y+zuApvWdpQdBHM/swxP962s8HIxPO3alBH5t3m/dl+f4CMUug6sJb7Pww8d13/9WSw==} lodash._baseuniq@4.6.0: - resolution: - { - integrity: sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A==, - } + resolution: {integrity: sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A==} lodash._createset@4.0.3: - resolution: - { - integrity: sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA==, - } + resolution: {integrity: sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA==} lodash._root@3.0.1: - resolution: - { - integrity: sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==, - } + resolution: {integrity: sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==} lodash._stringtopath@4.8.0: - resolution: - { - integrity: sha512-SXL66C731p0xPDC5LZg4wI5H+dJo/EO4KTqOMwLYCH3+FmmfAKJEZCm6ohGpI+T1xwsDsJCfL4OnhorllvlTPQ==, - } + resolution: {integrity: sha512-SXL66C731p0xPDC5LZg4wI5H+dJo/EO4KTqOMwLYCH3+FmmfAKJEZCm6ohGpI+T1xwsDsJCfL4OnhorllvlTPQ==} lodash.add@3.7.0: - resolution: - { - integrity: sha512-/uxUZkB6vYiPoGSXADJJE+Ee4W2vU+bxZOFdvJdx+mDgv+qyAO76sWD84Q4FxsMgTjC1+gVFC9YNhdG243QRDw==, - } + resolution: {integrity: sha512-/uxUZkB6vYiPoGSXADJJE+Ee4W2vU+bxZOFdvJdx+mDgv+qyAO76sWD84Q4FxsMgTjC1+gVFC9YNhdG243QRDw==} lodash.clonedeep@4.5.0: - resolution: - { - integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==, - } + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} lodash.isequal@4.5.0: - resolution: - { - integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==, - } + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.isfunction@3.0.9: - resolution: - { - integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==, - } + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.size@4.2.0: - resolution: - { - integrity: sha512-wbu3SF1XC5ijqm0piNxw59yCbuUf2kaShumYBLWUrcCvwh6C8odz6SY/wGVzCWTQTFL/1Ygbvqg2eLtspUVVAQ==, - } + resolution: {integrity: sha512-wbu3SF1XC5ijqm0piNxw59yCbuUf2kaShumYBLWUrcCvwh6C8odz6SY/wGVzCWTQTFL/1Ygbvqg2eLtspUVVAQ==} lodash.throttle@4.1.1: - resolution: - { - integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==, - } + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} lodash.uniqby@4.5.0: - resolution: - { - integrity: sha512-IRt7cfTtHy6f1aRVA5n7kT8rgN3N1nH6MOWLcHfpWG2SH19E3JksLK38MktLxZDhlAjCP9jpIXkOnRXlu6oByQ==, - } + resolution: {integrity: sha512-IRt7cfTtHy6f1aRVA5n7kT8rgN3N1nH6MOWLcHfpWG2SH19E3JksLK38MktLxZDhlAjCP9jpIXkOnRXlu6oByQ==} lodash@4.17.23: - resolution: - { - integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==, - } + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} log-update@6.1.0: - resolution: - { - integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} loose-envify@1.4.0: - resolution: - { - integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, - } + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true loupe@3.2.1: - resolution: - { - integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==, - } + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lru-cache@10.4.3: - resolution: - { - integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, - } + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@5.1.1: - resolution: - { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, - } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} lucide-react@0.474.0: - resolution: - { - integrity: sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==, - } + resolution: {integrity: sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==} peerDependencies: react: ^19.2.1 lz-string@1.5.0: - resolution: - { - integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==, - } + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true magic-string@0.27.0: - resolution: - { - integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} magic-string@0.30.21: - resolution: - { - integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, - } + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} map-or-similar@1.5.0: - resolution: - { - integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==, - } + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} mapbox-to-css-font@2.4.5: - resolution: - { - integrity: sha512-VJ6nB8emkO9VODI0Fk+TQ/0zKBTqmf/Pkt8Xv0kHstoc0iXRajA00DAid4Kc3K5xeFIOoiZrVxijEzj0GLVO2w==, - } + resolution: {integrity: sha512-VJ6nB8emkO9VODI0Fk+TQ/0zKBTqmf/Pkt8Xv0kHstoc0iXRajA00DAid4Kc3K5xeFIOoiZrVxijEzj0GLVO2w==} math-intrinsics@1.1.0: - resolution: - { - integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} memoizerific@1.11.3: - resolution: - { - integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==, - } + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} merge-stream@2.0.0: - resolution: - { - integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, - } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} mgrs@1.0.0: - resolution: - { - integrity: sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==, - } + resolution: {integrity: sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==} micromatch@4.0.8: - resolution: - { - integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} mime-db@1.52.0: - resolution: - { - integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} mime-types@2.1.35: - resolution: - { - integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, - } - engines: { node: ">= 0.6" } + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} mimic-function@5.0.1: - resolution: - { - integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} min-indent@1.0.1: - resolution: - { - integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} minimatch@10.2.4: - resolution: - { - integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==, - } - engines: { node: 18 || 20 || >=22 } + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.5: - resolution: - { - integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==, - } + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} minimatch@9.0.9: - resolution: - { - integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==, - } - engines: { node: ">=16 || 14 >=14.17" } + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: - resolution: - { - integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, - } + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} minipass@7.1.3: - resolution: - { - integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==, - } - engines: { node: ">=16 || 14 >=14.17" } + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} module-definition@6.0.1: - resolution: - { - integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==} + engines: {node: '>=18'} hasBin: true moment@2.30.1: - resolution: - { - integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==, - } + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} motion-dom@11.18.1: - resolution: - { - integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==, - } + resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} motion-utils@11.18.1: - resolution: - { - integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==, - } + resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} mz@2.7.0: - resolution: - { - integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, - } + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} nanoid@3.3.11: - resolution: - { - integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true napi-postinstall@0.3.4: - resolution: - { - integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==, - } - engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} neo-async@2.6.2: - resolution: - { - integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, - } + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} next-qrcode@2.5.1: - resolution: - { - integrity: sha512-ibiS1+p+myjurC1obVIgo7UCjFhxm0SNYTkikahQVmnyzlfREOdUCf2f77Vbz6W6q2zfx5Eww2/20vbgkLNdLw==, - } - engines: { node: ">=8", npm: ">=5" } + resolution: {integrity: sha512-ibiS1+p+myjurC1obVIgo7UCjFhxm0SNYTkikahQVmnyzlfREOdUCf2f77Vbz6W6q2zfx5Eww2/20vbgkLNdLw==} + engines: {node: '>=8', npm: '>=5'} peerDependencies: react: ^19.2.1 next-themes@0.4.6: - resolution: - { - integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==, - } + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 next@15.3.8: - resolution: - { - integrity: sha512-L+4c5Hlr84fuaNADZbB9+ceRX9/CzwxJ+obXIGHupboB/Q1OLbSUapFs4bO8hnS/E6zV/JDX7sG1QpKVR2bguA==, - } - engines: { node: ^18.18.0 || ^19.8.0 || >= 20.0.0 } + resolution: {integrity: sha512-L+4c5Hlr84fuaNADZbB9+ceRX9/CzwxJ+obXIGHupboB/Q1OLbSUapFs4bO8hnS/E6zV/JDX7sG1QpKVR2bguA==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: - "@opentelemetry/api": ^1.1.0 - "@playwright/test": ^1.41.2 - babel-plugin-react-compiler: "*" + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' react: ^19.2.1 react-dom: ^19.2.1 sass: ^1.3.0 peerDependenciesMeta: - "@opentelemetry/api": + '@opentelemetry/api': optional: true - "@playwright/test": + '@playwright/test': optional: true babel-plugin-react-compiler: optional: true @@ -8611,367 +6088,211 @@ packages: optional: true node-exports-info@1.6.0: - resolution: - { - integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} node-releases@2.0.36: - resolution: - { - integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==, - } + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} node-source-walk@7.0.1: - resolution: - { - integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} + engines: {node: '>=18'} normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} object-assign@4.1.1: - resolution: - { - integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} object-hash@3.0.0: - resolution: - { - integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} object-inspect@1.13.4: - resolution: - { - integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} object.assign@4.1.7: - resolution: - { - integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} object.entries@1.1.9: - resolution: - { - integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} object.fromentries@2.0.8: - resolution: - { - integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} object.groupby@1.0.3: - resolution: - { - integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} object.values@1.2.1: - resolution: - { - integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} ol-ext@4.0.38: - resolution: - { - integrity: sha512-fJmMcUYV8tfNhaHTl93eV1esBo1L8QHdOjJsBzapomgpmXiW7PGv91i6tmvXU4mL2z0gFrupuzs8BMLGi6T0QQ==, - } + resolution: {integrity: sha512-fJmMcUYV8tfNhaHTl93eV1esBo1L8QHdOjJsBzapomgpmXiW7PGv91i6tmvXU4mL2z0gFrupuzs8BMLGi6T0QQ==} peerDependencies: - ol: ">= 5.3.0" + ol: '>= 5.3.0' ol-mapbox-style@10.7.0: - resolution: - { - integrity: sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw==, - } + resolution: {integrity: sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw==} ol@7.5.2: - resolution: - { - integrity: sha512-HJbb3CxXrksM6ct367LsP3N+uh+iBBMdP3DeGGipdV9YAYTP0vTJzqGnoqQ6C2IW4qf8krw9yuyQbc9fjOIaOQ==, - } + resolution: {integrity: sha512-HJbb3CxXrksM6ct367LsP3N+uh+iBBMdP3DeGGipdV9YAYTP0vTJzqGnoqQ6C2IW4qf8krw9yuyQbc9fjOIaOQ==} onetime@7.0.0: - resolution: - { - integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} open@8.4.2: - resolution: - { - integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} optionator@0.9.4: - resolution: - { - integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} own-keys@1.0.1: - resolution: - { - integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} p-limit@2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} p-locate@4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} p-try@2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} package-json-from-dist@1.0.1: - resolution: - { - integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, - } + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} pako@1.0.11: - resolution: - { - integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, - } + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} pako@2.1.0: - resolution: - { - integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==, - } + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} parse-headers@2.0.6: - resolution: - { - integrity: sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==, - } + resolution: {integrity: sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==} parse-json@5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} path-scurry@1.11.1: - resolution: - { - integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, - } - engines: { node: ">=16 || 14 >=14.18" } + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-type@6.0.0: - resolution: - { - integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} path@0.12.7: - resolution: - { - integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==, - } + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} pathval@2.0.1: - resolution: - { - integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==, - } - engines: { node: ">= 14.16" } + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} patronum@2.3.0: - resolution: - { - integrity: sha512-BfKIOpoymVz6XnkOn8Fi5QZ1a3r/3lXdd8BcdHmYDbIXPTIRnD1EPFBFev/DheWnOge6/ZswEqgNF2ANLGOxLw==, - } + resolution: {integrity: sha512-BfKIOpoymVz6XnkOn8Fi5QZ1a3r/3lXdd8BcdHmYDbIXPTIRnD1EPFBFev/DheWnOge6/ZswEqgNF2ANLGOxLw==} peerDependencies: effector: ^23 pbf@3.2.1: - resolution: - { - integrity: sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==, - } + resolution: {integrity: sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==} hasBin: true picocolors@1.1.1: - resolution: - { - integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, - } + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.2: - resolution: - { - integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, - } - engines: { node: ">=8.6" } + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} picomatch@4.0.4: - resolution: - { - integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} pify@2.3.0: - resolution: - { - integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} pirates@4.0.7: - resolution: - { - integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==, - } - engines: { node: ">= 6" } + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} pluralize@8.0.0: - resolution: - { - integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} pngjs@5.0.0: - resolution: - { - integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} polished@4.3.1: - resolution: - { - integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} + engines: {node: '>=10'} possible-typed-array-names@1.1.0: - resolution: - { - integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} postcss-import@15.1.0: - resolution: - { - integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 postcss-js@4.1.0: - resolution: - { - integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==, - } - engines: { node: ^12 || ^14 || >= 16 } + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} + engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 postcss-load-config@6.0.1: - resolution: - { - integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==, - } - engines: { node: ">= 18" } + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} peerDependencies: - jiti: ">=1.21.0" - postcss: ">=8.0.9" + jiti: '>=1.21.0' + postcss: '>=8.0.9' tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: @@ -8985,111 +6306,81 @@ packages: optional: true postcss-nested@6.2.0: - resolution: - { - integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==, - } - engines: { node: ">=12.0" } + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 postcss-selector-parser@6.1.2: - resolution: - { - integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} postcss-value-parser@4.2.0: - resolution: - { - integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, - } + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} postcss-values-parser@6.0.2: - resolution: - { - integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} + engines: {node: '>=10'} peerDependencies: postcss: ^8.2.9 postcss@8.4.31: - resolution: - { - integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} postcss@8.5.8: - resolution: - { - integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} preact@10.12.1: - resolution: - { - integrity: sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==, - } + resolution: {integrity: sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==} precinct@12.2.0: - resolution: - { - integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} + engines: {node: '>=18'} hasBin: true prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} prettier-plugin-tailwindcss@0.6.14: - resolution: - { - integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==, - } - engines: { node: ">=14.21.3" } + resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==} + engines: {node: '>=14.21.3'} peerDependencies: - "@ianvs/prettier-plugin-sort-imports": "*" - "@prettier/plugin-hermes": "*" - "@prettier/plugin-oxc": "*" - "@prettier/plugin-pug": "*" - "@shopify/prettier-plugin-liquid": "*" - "@trivago/prettier-plugin-sort-imports": "*" - "@zackad/prettier-plugin-twig": "*" + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' prettier: ^3.0 - prettier-plugin-astro: "*" - prettier-plugin-css-order: "*" - prettier-plugin-import-sort: "*" - prettier-plugin-jsdoc: "*" - prettier-plugin-marko: "*" - prettier-plugin-multiline-arrays: "*" - prettier-plugin-organize-attributes: "*" - prettier-plugin-organize-imports: "*" - prettier-plugin-sort-imports: "*" - prettier-plugin-style-order: "*" - prettier-plugin-svelte: "*" + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' peerDependenciesMeta: - "@ianvs/prettier-plugin-sort-imports": + '@ianvs/prettier-plugin-sort-imports': optional: true - "@prettier/plugin-hermes": + '@prettier/plugin-hermes': optional: true - "@prettier/plugin-oxc": + '@prettier/plugin-oxc': optional: true - "@prettier/plugin-pug": + '@prettier/plugin-pug': optional: true - "@shopify/prettier-plugin-liquid": + '@shopify/prettier-plugin-liquid': optional: true - "@trivago/prettier-plugin-sort-imports": + '@trivago/prettier-plugin-sort-imports': optional: true - "@zackad/prettier-plugin-twig": + '@zackad/prettier-plugin-twig': optional: true prettier-plugin-astro: optional: true @@ -9115,255 +6406,156 @@ packages: optional: true prettier@3.8.1: - resolution: - { - integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + engines: {node: '>=14'} hasBin: true pretty-format@27.5.1: - resolution: - { - integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==, - } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} prexit@2.3.0: - resolution: - { - integrity: sha512-mX+LIbtS0anKtl2PykYabxninwloblUQMRO6CubeSmjxb+kKlATuJoH9UeN8NLE4TgIEFWfBXw7V3GkWbBrSmg==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-mX+LIbtS0anKtl2PykYabxninwloblUQMRO6CubeSmjxb+kKlATuJoH9UeN8NLE4TgIEFWfBXw7V3GkWbBrSmg==} + engines: {node: '>=12'} process-nextick-args@2.0.1: - resolution: - { - integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, - } + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} process@0.11.10: - resolution: - { - integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, - } - engines: { node: ">= 0.6.0" } + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} proj4@2.20.4: - resolution: - { - integrity: sha512-/EEBoXjBw+zW1Lofinw0YFQ4OFOqC6XThnwRAgjEHw8WBN+wSy/6aeqRRdjy4b2igy3X0k3RNDuwcYqcQq7nDw==, - } + resolution: {integrity: sha512-/EEBoXjBw+zW1Lofinw0YFQ4OFOqC6XThnwRAgjEHw8WBN+wSy/6aeqRRdjy4b2igy3X0k3RNDuwcYqcQq7nDw==} prop-types@15.8.1: - resolution: - { - integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, - } + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} proper-lockfile@4.1.2: - resolution: - { - integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==, - } + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} protocol-buffers-schema@3.6.0: - resolution: - { - integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==, - } + resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} proxy-from-env@1.1.0: - resolution: - { - integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, - } + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} punycode@2.3.1: - resolution: - { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} qr.js@0.0.0: - resolution: - { - integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==, - } + resolution: {integrity: sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==} qrcode@1.5.4: - resolution: - { - integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} + engines: {node: '>=10.13.0'} hasBin: true querystringify@2.2.0: - resolution: - { - integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, - } + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} quick-lru@6.1.2: - resolution: - { - integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==} + engines: {node: '>=12'} quickselect@2.0.0: - resolution: - { - integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==, - } + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} quote-unquote@1.0.0: - resolution: - { - integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==, - } + resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} rbush@3.0.1: - resolution: - { - integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==, - } + resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} react-chartjs-2@5.3.1: - resolution: - { - integrity: sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A==, - } + resolution: {integrity: sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A==} peerDependencies: chart.js: ^4.1.1 react: ^19.2.1 react-day-picker@8.10.1: - resolution: - { - integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==, - } + resolution: {integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==} peerDependencies: date-fns: ^2.28.0 || ^3.0.0 react: ^19.2.1 react-day-picker@9.14.0: - resolution: - { - integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==} + engines: {node: '>=18'} peerDependencies: react: ^19.2.1 react-dnd-html5-backend@16.0.1: - resolution: - { - integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==, - } + resolution: {integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==} react-dnd-touch-backend@16.0.1: - resolution: - { - integrity: sha512-NonoCABzzjyWGZuDxSG77dbgMZ2Wad7eQiCd/ECtsR2/NBLTjGksPUx9UPezZ1nQ/L7iD130Tz3RUshL/ClKLA==, - } + resolution: {integrity: sha512-NonoCABzzjyWGZuDxSG77dbgMZ2Wad7eQiCd/ECtsR2/NBLTjGksPUx9UPezZ1nQ/L7iD130Tz3RUshL/ClKLA==} react-dnd@16.0.1: - resolution: - { - integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==, - } + resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} peerDependencies: - "@types/hoist-non-react-statics": ">= 3.3.1" - "@types/node": ">= 12" - "@types/react": ^19.2.7 + '@types/hoist-non-react-statics': '>= 3.3.1' + '@types/node': '>= 12' + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/hoist-non-react-statics": + '@types/hoist-non-react-statics': optional: true - "@types/node": + '@types/node': optional: true - "@types/react": + '@types/react': optional: true react-docgen-typescript@2.4.0: - resolution: - { - integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==, - } + resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: - typescript: ">= 4.3.x" + typescript: '>= 4.3.x' react-docgen@7.1.1: - resolution: - { - integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==, - } - engines: { node: ">=16.14.0" } + resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} + engines: {node: '>=16.14.0'} react-dom@19.2.4: - resolution: - { - integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==, - } + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: react: ^19.2.1 react-draggable@4.5.0: - resolution: - { - integrity: sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw==, - } + resolution: {integrity: sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 react-dropzone@14.4.1: - resolution: - { - integrity: sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g==, - } - engines: { node: ">= 10.13" } + resolution: {integrity: sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g==} + engines: {node: '>= 10.13'} peerDependencies: react: ^19.2.1 react-hook-form@7.72.0: - resolution: - { - integrity: sha512-V4v6jubaf6JAurEaVnT9aUPKFbNtDgohj5CIgVGyPHvT9wRx5OZHVjz31GsxnPNI278XMu+ruFz+wGOscHaLKw==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-V4v6jubaf6JAurEaVnT9aUPKFbNtDgohj5CIgVGyPHvT9wRx5OZHVjz31GsxnPNI278XMu+ruFz+wGOscHaLKw==} + engines: {node: '>=18.0.0'} peerDependencies: react: ^19.2.1 react-hot-toast@2.6.0: - resolution: - { - integrity: sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==} + engines: {node: '>=10'} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 react-i18next@15.7.4: - resolution: - { - integrity: sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw==, - } + resolution: {integrity: sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw==} peerDependencies: - i18next: ">= 23.4.0" + i18next: '>= 23.4.0' react: ^19.2.1 - react-dom: "*" - react-native: "*" + react-dom: '*' + react-native: '*' typescript: ^5 peerDependenciesMeta: react-dom: @@ -9374,100 +6566,67 @@ packages: optional: true react-is@16.13.1: - resolution: - { - integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, - } + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} react-is@17.0.2: - resolution: - { - integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, - } + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} react-is@18.3.1: - resolution: - { - integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==, - } + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} react-qr-code@2.0.18: - resolution: - { - integrity: sha512-v1Jqz7urLMhkO6jkgJuBYhnqvXagzceg3qJUWayuCK/c6LTIonpWbwxR1f1APGd4xrW/QcQEovNrAojbUz65Tg==, - } + resolution: {integrity: sha512-v1Jqz7urLMhkO6jkgJuBYhnqvXagzceg3qJUWayuCK/c6LTIonpWbwxR1f1APGd4xrW/QcQEovNrAojbUz65Tg==} peerDependencies: react: ^19.2.1 react-refresh@0.17.0: - resolution: - { - integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} react-remove-scroll-bar@2.3.8: - resolution: - { - integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true react-remove-scroll@2.7.2: - resolution: - { - integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true react-smooth@4.0.4: - resolution: - { - integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==, - } + resolution: {integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 react-style-singleton@2.2.3: - resolution: - { - integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true react-transition-group@4.4.5: - resolution: - { - integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==, - } + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 react-use-measure@2.1.7: - resolution: - { - integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==, - } + resolution: {integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 @@ -9476,496 +6635,280 @@ packages: optional: true react@19.2.4: - resolution: - { - integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + engines: {node: '>=0.10.0'} read-cache@1.0.0: - resolution: - { - integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==, - } + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} readable-stream@2.3.8: - resolution: - { - integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, - } + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, - } - engines: { node: ">=8.10.0" } + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} readdirp@4.1.2: - resolution: - { - integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, - } - engines: { node: ">= 14.18.0" } + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} realgrid-react@0.9.9: - resolution: - { - integrity: sha512-1zvD9eM45kMViOdMT6cLag7+riiu7vGq3FXf0/9Se/O8MRj86d3PpPCYfyrCV5Xo37cUZZHyEJ86sZsMj6VoBA==, - } + resolution: {integrity: sha512-1zvD9eM45kMViOdMT6cLag7+riiu7vGq3FXf0/9Se/O8MRj86d3PpPCYfyrCV5Xo37cUZZHyEJ86sZsMj6VoBA==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 realgrid@2.9.7: - resolution: - { - integrity: sha512-gPn2Ol10gomZw6KH7HgRXEe8O67XfPb35BrgCmWF0/GzlJEqb1XzdAKzuVYmoQuj6eXVwsnjP0w5RaE3O1DoNg==, - } + resolution: {integrity: sha512-gPn2Ol10gomZw6KH7HgRXEe8O67XfPb35BrgCmWF0/GzlJEqb1XzdAKzuVYmoQuj6eXVwsnjP0w5RaE3O1DoNg==} recast@0.23.11: - resolution: - { - integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} recharts-scale@0.4.5: - resolution: - { - integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==, - } + resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} recharts@2.15.4: - resolution: - { - integrity: sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==} + engines: {node: '>=14'} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 redent@3.0.0: - resolution: - { - integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} redux@4.2.1: - resolution: - { - integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==, - } + resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} reflect.getprototypeof@1.0.10: - resolution: - { - integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} regexp.prototype.flags@1.5.4: - resolution: - { - integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} remixicon@4.9.1: - resolution: - { - integrity: sha512-36gLSoujkabnCFZFDyP17VNh9piuBA/rsXUb4auSJWLGsHVXtmxLj/EM5FjaEAGnk8oIAj1Azob/DZ2N+90lAQ==, - } + resolution: {integrity: sha512-36gLSoujkabnCFZFDyP17VNh9piuBA/rsXUb4auSJWLGsHVXtmxLj/EM5FjaEAGnk8oIAj1Azob/DZ2N+90lAQ==} require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} require-from-string@2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} require-main-filename@2.0.0: - resolution: - { - integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, - } + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} requires-port@1.0.0: - resolution: - { - integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, - } + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} resolve-from@5.0.0: - resolution: - { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} resolve-pkg-maps@1.0.0: - resolution: - { - integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, - } + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} resolve-protobuf-schema@2.1.0: - resolution: - { - integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==, - } + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} resolve@1.22.11: - resolution: - { - integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} hasBin: true resolve@2.0.0-next.6: - resolution: - { - integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + engines: {node: '>= 0.4'} hasBin: true restore-cursor@5.1.0: - resolution: - { - integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} retry@0.12.0: - resolution: - { - integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==, - } - engines: { node: ">= 4" } + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} reusify@1.1.0: - resolution: - { - integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, - } - engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.4.1: - resolution: - { - integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==, - } + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} rollup@4.60.0: - resolution: - { - integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==, - } - engines: { node: ">=18.0.0", npm: ">=8.0.0" } + resolution: {integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} rw@1.3.3: - resolution: - { - integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, - } + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} safe-array-concat@1.1.3: - resolution: - { - integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==, - } - engines: { node: ">=0.4" } + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} safe-buffer@5.1.2: - resolution: - { - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, - } + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-push-apply@1.0.0: - resolution: - { - integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} safe-regex-test@1.1.0: - resolution: - { - integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} sax@1.6.0: - resolution: - { - integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==, - } - engines: { node: ">=11.0.0" } + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} scheduler@0.27.0: - resolution: - { - integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, - } + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} schema-utils@4.3.3: - resolution: - { - integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} select@1.1.2: - resolution: - { - integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==, - } + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} semver@6.3.1: - resolution: - { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, - } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.7.4: - resolution: - { - integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} hasBin: true set-blocking@2.0.0: - resolution: - { - integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, - } + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} set-function-length@1.2.2: - resolution: - { - integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} set-function-name@2.0.2: - resolution: - { - integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} set-proto@1.0.0: - resolution: - { - integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} setimmediate@1.0.5: - resolution: - { - integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, - } + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} sharp@0.34.5: - resolution: - { - integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, - } - engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} side-channel-list@1.0.0: - resolution: - { - integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} side-channel-map@1.0.1: - resolution: - { - integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} side-channel-weakmap@1.0.2: - resolution: - { - integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} side-channel@1.1.0: - resolution: - { - integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} signal-exit@3.0.7: - resolution: - { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, - } + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} signal-exit@4.1.0: - resolution: - { - integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, - } - engines: { node: ">=14" } + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} sisteransi@1.0.5: - resolution: - { - integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, - } + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} slash@5.1.0: - resolution: - { - integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==, - } - engines: { node: ">=14.16" } + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} slice-ansi@7.1.2: - resolution: - { - integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} slice-ansi@8.0.0: - resolution: - { - integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} sonner@2.0.7: - resolution: - { - integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==, - } + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: react: ^19.2.1 react-dom: ^19.2.1 sort-asc@0.1.0: - resolution: - { - integrity: sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==} + engines: {node: '>=0.10.0'} sort-desc@0.1.1: - resolution: - { - integrity: sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==} + engines: {node: '>=0.10.0'} sort-object@0.3.2: - resolution: - { - integrity: sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==} + engines: {node: '>=0.10.0'} source-map-js@1.2.1: - resolution: - { - integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} source-map-support@0.5.21: - resolution: - { - integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, - } + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} source-map@0.7.6: - resolution: - { - integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==, - } - engines: { node: ">= 12" } + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} ssf@0.11.2: - resolution: - { - integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} stable-hash@0.0.5: - resolution: - { - integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==, - } + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} steiger@0.5.11: - resolution: - { - integrity: sha512-Sv6ovPX8tVlUufvAvGSUnwDQLupccYjcgfK5pbqECGP5KCe9M257U0IbRdjuLfUXfey4FprZWQQtnIz3qOPpWA==, - } + resolution: {integrity: sha512-Sv6ovPX8tVlUufvAvGSUnwDQLupccYjcgfK5pbqECGP5KCe9M257U0IbRdjuLfUXfey4FprZWQQtnIz3qOPpWA==} hasBin: true stop-iteration-iterator@1.1.0: - resolution: - { - integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} storybook@8.6.18: - resolution: - { - integrity: sha512-p8seiSI6FiVY6P3V0pG+5v7c8pDMehMAFRWEhG5XqIBSQszzOjDnW2rNvm3odoLKfo3V3P6Cs6Hv9ILzymULyQ==, - } + resolution: {integrity: sha512-p8seiSI6FiVY6P3V0pG+5v7c8pDMehMAFRWEhG5XqIBSQszzOjDnW2rNvm3odoLKfo3V3P6Cs6Hv9ILzymULyQ==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -9974,237 +6917,144 @@ packages: optional: true streamsearch@1.1.0: - resolution: - { - integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} string-argv@0.3.2: - resolution: - { - integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==, - } - engines: { node: ">=0.6.19" } + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} string-width@5.1.2: - resolution: - { - integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} string-width@7.2.0: - resolution: - { - integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} string-width@8.2.0: - resolution: - { - integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==, - } - engines: { node: ">=20" } + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} string.prototype.includes@2.0.1: - resolution: - { - integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} string.prototype.matchall@4.0.12: - resolution: - { - integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} string.prototype.repeat@1.0.0: - resolution: - { - integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==, - } + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} string.prototype.trim@1.2.10: - resolution: - { - integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} string.prototype.trimend@1.0.9: - resolution: - { - integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: - resolution: - { - integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} string_decoder@1.1.1: - resolution: - { - integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, - } + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} strip-ansi@7.2.0: - resolution: - { - integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} strip-bom@3.0.0: - resolution: - { - integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, - } - engines: { node: ">=4" } + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} strip-indent@3.0.0: - resolution: - { - integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} strip-indent@4.1.1: - resolution: - { - integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} + engines: {node: '>=12'} strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} styled-jsx@5.1.6: - resolution: - { - integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==, - } - engines: { node: ">= 12.0.0" } + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} peerDependencies: - "@babel/core": "*" - babel-plugin-macros: "*" + '@babel/core': '*' + babel-plugin-macros: '*' react: ^19.2.1 peerDependenciesMeta: - "@babel/core": + '@babel/core': optional: true babel-plugin-macros: optional: true sucrase@3.35.1: - resolution: - { - integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==, - } - engines: { node: ">=16 || 14 >=14.17" } + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} + engines: {node: '>=16 || 14 >=14.17'} hasBin: true supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} supports-color@8.1.1: - resolution: - { - integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} swr@2.4.1: - resolution: - { - integrity: sha512-2CC6CiKQtEwaEeNiqWTAw9PGykW8SR5zZX8MZk6TeAvEAnVS7Visz8WzphqgtQ8v2xz/4Q5K+j+SeMaKXeeQIA==, - } + resolution: {integrity: sha512-2CC6CiKQtEwaEeNiqWTAw9PGykW8SR5zZX8MZk6TeAvEAnVS7Visz8WzphqgtQ8v2xz/4Q5K+j+SeMaKXeeQIA==} peerDependencies: react: ^19.2.1 tailwind-merge@3.5.0: - resolution: - { - integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==, - } + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} tailwindcss-animate@1.0.7: - resolution: - { - integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==, - } + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: - tailwindcss: ">=3.0.0 || insiders" + tailwindcss: '>=3.0.0 || insiders' tailwindcss@3.4.19: - resolution: - { - integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} + engines: {node: '>=14.0.0'} hasBin: true tailwindcss@4.2.2: - resolution: - { - integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==, - } + resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} tapable@2.3.2: - resolution: - { - integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + engines: {node: '>=6'} terser-webpack-plugin@5.4.0: - resolution: - { - integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==, - } - engines: { node: ">= 10.13.0" } + resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} + engines: {node: '>= 10.13.0'} peerDependencies: - "@swc/core": "*" - esbuild: "*" - uglify-js: "*" + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' webpack: ^5.1.0 peerDependenciesMeta: - "@swc/core": + '@swc/core': optional: true esbuild: optional: true @@ -10212,120 +7062,69 @@ packages: optional: true terser@5.46.1: - resolution: - { - integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + engines: {node: '>=10'} hasBin: true text-segmentation@1.0.3: - resolution: - { - integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==, - } + resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} thenify-all@1.6.0: - resolution: - { - integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} thenify@3.3.1: - resolution: - { - integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, - } + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} tiny-invariant@1.3.3: - resolution: - { - integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==, - } + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} tinyexec@0.3.2: - resolution: - { - integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==, - } + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} tinyexec@1.0.4: - resolution: - { - integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + engines: {node: '>=18'} tinyglobby@0.2.15: - resolution: - { - integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, - } - engines: { node: ">=12.0.0" } + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} tinymce@7.9.2: - resolution: - { - integrity: sha512-zS2gn2CPQmZhUqLzkhwYH+WGsx/DIRY/mS18RVzsIcuQg2lN2uzaqoHSJU6DdMUpvXBtBFnLNpumC3QrDwLBzA==, - } + resolution: {integrity: sha512-zS2gn2CPQmZhUqLzkhwYH+WGsx/DIRY/mS18RVzsIcuQg2lN2uzaqoHSJU6DdMUpvXBtBFnLNpumC3QrDwLBzA==} tinyrainbow@1.2.0: - resolution: - { - integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} tinyspy@3.0.2: - resolution: - { - integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: ">=8.0" } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} tree-kill@1.2.2: - resolution: - { - integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==, - } + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true ts-api-utils@2.5.0: - resolution: - { - integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==, - } - engines: { node: ">=18.12" } + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} peerDependencies: - typescript: ">=4.8.4" + typescript: '>=4.8.4' ts-dedent@2.2.0: - resolution: - { - integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==, - } - engines: { node: ">=6.10" } + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} ts-interface-checker@0.1.13: - resolution: - { - integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, - } + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} tsconfck@3.1.6: - resolution: - { - integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==, - } - engines: { node: ^18 || >=20 } + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} hasBin: true peerDependencies: typescript: ^5.0.0 @@ -10334,40 +7133,28 @@ packages: optional: true tsconfig-paths@3.15.0: - resolution: - { - integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==, - } + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} tsconfig-paths@4.2.0: - resolution: - { - integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} tslib@2.8.1: - resolution: - { - integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, - } + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tsup@8.3.6: - resolution: - { - integrity: sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-XkVtlDV/58S9Ye0JxUUTcrQk4S+EqlOHKzg6Roa62rdjL1nGWNUstG0xgI4vanHdfIpjP448J8vlN0oK6XOJ5g==} + engines: {node: '>=18'} hasBin: true peerDependencies: - "@microsoft/api-extractor": ^7.36.0 - "@swc/core": ^1 + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 postcss: ^8.4.12 - typescript: ">=4.5.0" + typescript: '>=4.5.0' peerDependenciesMeta: - "@microsoft/api-extractor": + '@microsoft/api-extractor': optional: true - "@swc/core": + '@swc/core': optional: true postcss: optional: true @@ -10375,289 +7162,181 @@ packages: optional: true turbo-darwin-64@2.4.2: - resolution: - { - integrity: sha512-HFfemyWB60CJtEvVQj9yby5rkkWw9fLAdLtAPGtPQoU3tKh8t/uzCAZKso2aPVbib9vGUuGbPGoGpaRXdVhj5g==, - } + resolution: {integrity: sha512-HFfemyWB60CJtEvVQj9yby5rkkWw9fLAdLtAPGtPQoU3tKh8t/uzCAZKso2aPVbib9vGUuGbPGoGpaRXdVhj5g==} cpu: [x64] os: [darwin] turbo-darwin-arm64@2.4.2: - resolution: - { - integrity: sha512-uwSx1dsBSSFeEC0nxyx2O219FEsS/haiESaWwE9JI8mHkQK61s6w6fN2G586krKxyNam4AIxRltleL+O2Em94g==, - } + resolution: {integrity: sha512-uwSx1dsBSSFeEC0nxyx2O219FEsS/haiESaWwE9JI8mHkQK61s6w6fN2G586krKxyNam4AIxRltleL+O2Em94g==} cpu: [arm64] os: [darwin] turbo-linux-64@2.4.2: - resolution: - { - integrity: sha512-Fy/uL8z/LAYcPbm7a1LwFnTY9pIi5FAi12iuHsgB7zHjdh4eeIKS2NIg4nroAmTcUTUZ0/cVTo4bDOCUcS3aKw==, - } + resolution: {integrity: sha512-Fy/uL8z/LAYcPbm7a1LwFnTY9pIi5FAi12iuHsgB7zHjdh4eeIKS2NIg4nroAmTcUTUZ0/cVTo4bDOCUcS3aKw==} cpu: [x64] os: [linux] turbo-linux-arm64@2.4.2: - resolution: - { - integrity: sha512-AEA0d8h5W/K6iiXfEgiNwWt0yqRL1NpBs8zQCLdc4/L7WeYeJW3sORWX8zt7xhutF/KW9gTm8ehKpiK6cCIsAA==, - } + resolution: {integrity: sha512-AEA0d8h5W/K6iiXfEgiNwWt0yqRL1NpBs8zQCLdc4/L7WeYeJW3sORWX8zt7xhutF/KW9gTm8ehKpiK6cCIsAA==} cpu: [arm64] os: [linux] turbo-windows-64@2.4.2: - resolution: - { - integrity: sha512-CybtIZ9wRgnnNFVN9En9G+rxsO+mwU81fvW4RpE8BWyNEkhQ8J28qYf4PaimueMxGHHp/28i/G7Kcdn2GAWG0g==, - } + resolution: {integrity: sha512-CybtIZ9wRgnnNFVN9En9G+rxsO+mwU81fvW4RpE8BWyNEkhQ8J28qYf4PaimueMxGHHp/28i/G7Kcdn2GAWG0g==} cpu: [x64] os: [win32] turbo-windows-arm64@2.4.2: - resolution: - { - integrity: sha512-7V0yneVPL8Y3TgrkUIjw7Odmwu1tHnyIiPHFM7eFcA7U+H6hPXyCxge7nC3wOKfjhKCQqUm+Vf/k6kjmLz5G4g==, - } + resolution: {integrity: sha512-7V0yneVPL8Y3TgrkUIjw7Odmwu1tHnyIiPHFM7eFcA7U+H6hPXyCxge7nC3wOKfjhKCQqUm+Vf/k6kjmLz5G4g==} cpu: [arm64] os: [win32] turbo@2.4.2: - resolution: - { - integrity: sha512-Qxi0ioQCxMRUCcHKHZkTnYH8e7XCpNfg9QiJcyfWIc+ZXeaCjzV5rCGlbQlTXMAtI8qgfP8fZADv3CFtPwqdPQ==, - } + resolution: {integrity: sha512-Qxi0ioQCxMRUCcHKHZkTnYH8e7XCpNfg9QiJcyfWIc+ZXeaCjzV5rCGlbQlTXMAtI8qgfP8fZADv3CFtPwqdPQ==} hasBin: true tus-js-client@4.3.1: - resolution: - { - integrity: sha512-ZLeYmjrkaU1fUsKbIi8JML52uAocjEZtBx4DKjRrqzrZa0O4MYwT6db+oqePlspV+FxXJAyFBc/L5gwUi2OFsg==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-ZLeYmjrkaU1fUsKbIi8JML52uAocjEZtBx4DKjRrqzrZa0O4MYwT6db+oqePlspV+FxXJAyFBc/L5gwUi2OFsg==} + engines: {node: '>=18'} type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: ">= 0.8.0" } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} type-fest@2.19.0: - resolution: - { - integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==, - } - engines: { node: ">=12.20" } + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} typed-array-buffer@1.0.3: - resolution: - { - integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} typed-array-byte-length@1.0.3: - resolution: - { - integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} typed-array-byte-offset@1.0.4: - resolution: - { - integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} typed-array-length@1.0.7: - resolution: - { - integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} typescript-eslint@8.57.2: - resolution: - { - integrity: sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + resolution: {integrity: sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" + typescript: '>=4.8.4 <6.0.0' typescript@5.6.3: - resolution: - { - integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==, - } - engines: { node: ">=14.17" } + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} hasBin: true typescript@5.9.3: - resolution: - { - integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, - } - engines: { node: ">=14.17" } + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} hasBin: true unbox-primitive@1.1.0: - resolution: - { - integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} undici-types@6.21.0: - resolution: - { - integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, - } + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} unicorn-magic@0.3.0: - resolution: - { - integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} unplugin@1.16.1: - resolution: - { - integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==, - } - engines: { node: ">=14.0.0" } + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} + engines: {node: '>=14.0.0'} unrs-resolver@1.11.1: - resolution: - { - integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==, - } + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} update-browserslist-db@1.2.3: - resolution: - { - integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==, - } + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: - browserslist: ">= 4.21.0" + browserslist: '>= 4.21.0' uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} url-parse@1.5.10: - resolution: - { - integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==, - } + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} use-callback-ref@1.3.3: - resolution: - { - integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true use-sidecar@1.1.3: - resolution: - { - integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} peerDependencies: - "@types/react": ^19.2.7 + '@types/react': ^19.2.7 react: ^19.2.1 peerDependenciesMeta: - "@types/react": + '@types/react': optional: true use-sync-external-store@1.6.0: - resolution: - { - integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==, - } + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: react: ^19.2.1 util-deprecate@1.0.2: - resolution: - { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, - } + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} util@0.10.4: - resolution: - { - integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==, - } + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} util@0.12.5: - resolution: - { - integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==, - } + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} utrie@1.0.2: - resolution: - { - integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==, - } + resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==} uuid@9.0.1: - resolution: - { - integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, - } + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true victory-vendor@36.9.2: - resolution: - { - integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==, - } + resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} vite-tsconfig-paths@5.1.4: - resolution: - { - integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==, - } + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: - vite: "*" + vite: '*' peerDependenciesMeta: vite: optional: true vite@5.4.21: - resolution: - { - integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true less: optional: true @@ -10675,26 +7354,23 @@ packages: optional: true vite@6.4.1: - resolution: - { - integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==, - } - engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 } + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: ">=1.21.0" - less: "*" + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true jiti: optional: true @@ -10718,157 +7394,94 @@ packages: optional: true void-elements@3.1.0: - resolution: - { - integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} watchpack@2.5.1: - resolution: - { - integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + engines: {node: '>=10.13.0'} web-worker@1.5.0: - resolution: - { - integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==, - } + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} webpack-sources@3.3.4: - resolution: - { - integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} + engines: {node: '>=10.13.0'} webpack-virtual-modules@0.6.2: - resolution: - { - integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==, - } + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} webpack@5.105.4: - resolution: - { - integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==, - } - engines: { node: ">=10.13.0" } + resolution: {integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==} + engines: {node: '>=10.13.0'} hasBin: true peerDependencies: - webpack-cli: "*" + webpack-cli: '*' peerDependenciesMeta: webpack-cli: optional: true which-boxed-primitive@1.1.1: - resolution: - { - integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} which-builtin-type@1.2.1: - resolution: - { - integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} which-collection@1.0.2: - resolution: - { - integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} which-module@2.0.1: - resolution: - { - integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==, - } + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} which-typed-array@1.1.20: - resolution: - { - integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==, - } - engines: { node: ">= 0.4" } + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} + engines: {node: '>= 0.4'} which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: ">= 8" } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true wkt-parser@1.5.4: - resolution: - { - integrity: sha512-heRp3QBynj8SAGepAkE8h2k4KhUGRqzgwlSRgqNhxjmSIeSvE5ZrV8n1uy5jk+iJO2jmfffIwjdAaTirBOOx0A==, - } + resolution: {integrity: sha512-heRp3QBynj8SAGepAkE8h2k4KhUGRqzgwlSRgqNhxjmSIeSvE5ZrV8n1uy5jk+iJO2jmfffIwjdAaTirBOOx0A==} wmf@1.0.2: - resolution: - { - integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} word-wrap@1.2.5: - resolution: - { - integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, - } - engines: { node: ">=0.10.0" } + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} word@0.3.0: - resolution: - { - integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} wrap-ansi@6.2.0: - resolution: - { - integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} wrap-ansi@7.0.0: - resolution: - { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} wrap-ansi@8.1.0: - resolution: - { - integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} wrap-ansi@9.0.2: - resolution: - { - integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==, - } - engines: { node: ">=18" } + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} ws@8.20.0: - resolution: - { - integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==, - } - engines: { node: ">=10.0.0" } + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true @@ -10876,135 +7489,81 @@ packages: optional: true xlsx-populate@1.21.0: - resolution: - { - integrity: sha512-8v2Gm8BehXo6LU7KT802QoXTPkYY1SKk5V8g/UuYZnNB3JzXqud/P99Pxr2yXeKyt+sKlCatmidz6jQNie1hRw==, - } + resolution: {integrity: sha512-8v2Gm8BehXo6LU7KT802QoXTPkYY1SKk5V8g/UuYZnNB3JzXqud/P99Pxr2yXeKyt+sKlCatmidz6jQNie1hRw==} xlsx@0.18.5: - resolution: - { - integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==, - } - engines: { node: ">=0.8" } + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} hasBin: true xml-utils@1.10.2: - resolution: - { - integrity: sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==, - } + resolution: {integrity: sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==} y18n@4.0.3: - resolution: - { - integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, - } + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} y18n@5.0.8: - resolution: - { - integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yaml@2.8.3: - resolution: - { - integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==, - } - engines: { node: ">= 14.6" } + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@18.1.3: - resolution: - { - integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, - } - engines: { node: ">=6" } + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} yargs-parser@21.1.1: - resolution: - { - integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} yargs-parser@22.0.0: - resolution: - { - integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==, - } - engines: { node: ^20.19.0 || ^22.12.0 || >=23 } + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yargs@15.4.1: - resolution: - { - integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, - } - engines: { node: ">=8" } + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} yargs@17.7.2: - resolution: - { - integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, - } - engines: { node: ">=12" } + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} yargs@18.0.0: - resolution: - { - integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==, - } - engines: { node: ^20.19.0 || ^22.12.0 || >=23 } + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: ">=10" } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} zod-validation-error@3.5.4: - resolution: - { - integrity: sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw==, - } - engines: { node: ">=18.0.0" } + resolution: {integrity: sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw==} + engines: {node: '>=18.0.0'} peerDependencies: zod: ^3.24.4 zod@3.25.76: - resolution: - { - integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, - } + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zstddec@0.1.0: - resolution: - { - integrity: sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==, - } + resolution: {integrity: sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==} zustand@5.0.12: - resolution: - { - integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==, - } - engines: { node: ">=12.20.0" } + resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} + engines: {node: '>=12.20.0'} peerDependencies: - "@types/react": ^19.2.7 - immer: ">=9.0.6" + '@types/react': ^19.2.7 + immer: '>=9.0.6' react: ^19.2.1 - use-sync-external-store: ">=1.2.0" + use-sync-external-store: '>=1.2.0' peerDependenciesMeta: - "@types/react": + '@types/react': optional: true immer: optional: true @@ -11014,30 +7573,31 @@ packages: optional: true snapshots: - "@adobe/css-tools@4.4.4": {} - "@alloc/quick-lru@5.2.0": {} + '@adobe/css-tools@4.4.4': {} - "@babel/code-frame@7.29.0": + '@alloc/quick-lru@5.2.0': {} + + '@babel/code-frame@7.29.0': dependencies: - "@babel/helper-validator-identifier": 7.28.5 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - "@babel/compat-data@7.29.0": {} + '@babel/compat-data@7.29.0': {} - "@babel/core@7.29.0": + '@babel/core@7.29.0': dependencies: - "@babel/code-frame": 7.29.0 - "@babel/generator": 7.29.1 - "@babel/helper-compilation-targets": 7.28.6 - "@babel/helper-module-transforms": 7.28.6(@babel/core@7.29.0) - "@babel/helpers": 7.29.2 - "@babel/parser": 7.29.2 - "@babel/template": 7.28.6 - "@babel/traverse": 7.29.0 - "@babel/types": 7.29.0 - "@jridgewell/remapping": 2.3.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 gensync: 1.0.0-beta.2 @@ -11046,377 +7606,377 @@ snapshots: transitivePeerDependencies: - supports-color - "@babel/generator@7.29.1": + '@babel/generator@7.29.1': dependencies: - "@babel/parser": 7.29.2 - "@babel/types": 7.29.0 - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - "@babel/helper-compilation-targets@7.28.6": + '@babel/helper-compilation-targets@7.28.6': dependencies: - "@babel/compat-data": 7.29.0 - "@babel/helper-validator-option": 7.27.1 + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - "@babel/helper-globals@7.28.0": {} + '@babel/helper-globals@7.28.0': {} - "@babel/helper-module-imports@7.28.6": + '@babel/helper-module-imports@7.28.6': dependencies: - "@babel/traverse": 7.29.0 - "@babel/types": 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - "@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)": + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: - "@babel/core": 7.29.0 - "@babel/helper-module-imports": 7.28.6 - "@babel/helper-validator-identifier": 7.28.5 - "@babel/traverse": 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - "@babel/helper-plugin-utils@7.28.6": {} + '@babel/helper-plugin-utils@7.28.6': {} - "@babel/helper-string-parser@7.27.1": {} + '@babel/helper-string-parser@7.27.1': {} - "@babel/helper-validator-identifier@7.28.5": {} + '@babel/helper-validator-identifier@7.28.5': {} - "@babel/helper-validator-option@7.27.1": {} + '@babel/helper-validator-option@7.27.1': {} - "@babel/helpers@7.29.2": + '@babel/helpers@7.29.2': dependencies: - "@babel/template": 7.28.6 - "@babel/types": 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 - "@babel/parser@7.29.2": + '@babel/parser@7.29.2': dependencies: - "@babel/types": 7.29.0 + '@babel/types': 7.29.0 - "@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)": + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: - "@babel/core": 7.29.0 - "@babel/helper-plugin-utils": 7.28.6 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - "@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)": + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - "@babel/core": 7.29.0 - "@babel/helper-plugin-utils": 7.28.6 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - "@babel/runtime@7.29.2": {} + '@babel/runtime@7.29.2': {} - "@babel/template@7.28.6": + '@babel/template@7.28.6': dependencies: - "@babel/code-frame": 7.29.0 - "@babel/parser": 7.29.2 - "@babel/types": 7.29.0 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 - "@babel/traverse@7.29.0": + '@babel/traverse@7.29.0': dependencies: - "@babel/code-frame": 7.29.0 - "@babel/generator": 7.29.1 - "@babel/helper-globals": 7.28.0 - "@babel/parser": 7.29.2 - "@babel/template": 7.28.6 - "@babel/types": 7.29.0 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 transitivePeerDependencies: - supports-color - "@babel/types@7.29.0": + '@babel/types@7.29.0': dependencies: - "@babel/helper-string-parser": 7.27.1 - "@babel/helper-validator-identifier": 7.28.5 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 - "@clack/core@0.4.1": + '@clack/core@0.4.1': dependencies: picocolors: 1.1.1 sisteransi: 1.0.5 - "@clack/prompts@0.9.1": + '@clack/prompts@0.9.1': dependencies: - "@clack/core": 0.4.1 + '@clack/core': 0.4.1 picocolors: 1.1.1 sisteransi: 1.0.5 - "@date-fns/tz@1.4.1": {} + '@date-fns/tz@1.4.1': {} - "@dependents/detective-less@5.0.1": + '@dependents/detective-less@5.0.1': dependencies: gonzales-pe: 4.3.0 node-source-walk: 7.0.1 - "@emnapi/core@1.9.1": + '@emnapi/core@1.9.1': dependencies: - "@emnapi/wasi-threads": 1.2.0 + '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 optional: true - "@emnapi/runtime@1.9.1": + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 optional: true - "@emnapi/wasi-threads@1.2.0": + '@emnapi/wasi-threads@1.2.0': dependencies: tslib: 2.8.1 optional: true - "@esbuild/aix-ppc64@0.21.5": + '@esbuild/aix-ppc64@0.21.5': optional: true - "@esbuild/aix-ppc64@0.24.2": + '@esbuild/aix-ppc64@0.24.2': optional: true - "@esbuild/aix-ppc64@0.25.12": + '@esbuild/aix-ppc64@0.25.12': optional: true - "@esbuild/android-arm64@0.21.5": + '@esbuild/android-arm64@0.21.5': optional: true - "@esbuild/android-arm64@0.24.2": + '@esbuild/android-arm64@0.24.2': optional: true - "@esbuild/android-arm64@0.25.12": + '@esbuild/android-arm64@0.25.12': optional: true - "@esbuild/android-arm@0.21.5": + '@esbuild/android-arm@0.21.5': optional: true - "@esbuild/android-arm@0.24.2": + '@esbuild/android-arm@0.24.2': optional: true - "@esbuild/android-arm@0.25.12": + '@esbuild/android-arm@0.25.12': optional: true - "@esbuild/android-x64@0.21.5": + '@esbuild/android-x64@0.21.5': optional: true - "@esbuild/android-x64@0.24.2": + '@esbuild/android-x64@0.24.2': optional: true - "@esbuild/android-x64@0.25.12": + '@esbuild/android-x64@0.25.12': optional: true - "@esbuild/darwin-arm64@0.21.5": + '@esbuild/darwin-arm64@0.21.5': optional: true - "@esbuild/darwin-arm64@0.24.2": + '@esbuild/darwin-arm64@0.24.2': optional: true - "@esbuild/darwin-arm64@0.25.12": + '@esbuild/darwin-arm64@0.25.12': optional: true - "@esbuild/darwin-x64@0.21.5": + '@esbuild/darwin-x64@0.21.5': optional: true - "@esbuild/darwin-x64@0.24.2": + '@esbuild/darwin-x64@0.24.2': optional: true - "@esbuild/darwin-x64@0.25.12": + '@esbuild/darwin-x64@0.25.12': optional: true - "@esbuild/freebsd-arm64@0.21.5": + '@esbuild/freebsd-arm64@0.21.5': optional: true - "@esbuild/freebsd-arm64@0.24.2": + '@esbuild/freebsd-arm64@0.24.2': optional: true - "@esbuild/freebsd-arm64@0.25.12": + '@esbuild/freebsd-arm64@0.25.12': optional: true - "@esbuild/freebsd-x64@0.21.5": + '@esbuild/freebsd-x64@0.21.5': optional: true - "@esbuild/freebsd-x64@0.24.2": + '@esbuild/freebsd-x64@0.24.2': optional: true - "@esbuild/freebsd-x64@0.25.12": + '@esbuild/freebsd-x64@0.25.12': optional: true - "@esbuild/linux-arm64@0.21.5": + '@esbuild/linux-arm64@0.21.5': optional: true - "@esbuild/linux-arm64@0.24.2": + '@esbuild/linux-arm64@0.24.2': optional: true - "@esbuild/linux-arm64@0.25.12": + '@esbuild/linux-arm64@0.25.12': optional: true - "@esbuild/linux-arm@0.21.5": + '@esbuild/linux-arm@0.21.5': optional: true - "@esbuild/linux-arm@0.24.2": + '@esbuild/linux-arm@0.24.2': optional: true - "@esbuild/linux-arm@0.25.12": + '@esbuild/linux-arm@0.25.12': optional: true - "@esbuild/linux-ia32@0.21.5": + '@esbuild/linux-ia32@0.21.5': optional: true - "@esbuild/linux-ia32@0.24.2": + '@esbuild/linux-ia32@0.24.2': optional: true - "@esbuild/linux-ia32@0.25.12": + '@esbuild/linux-ia32@0.25.12': optional: true - "@esbuild/linux-loong64@0.21.5": + '@esbuild/linux-loong64@0.21.5': optional: true - "@esbuild/linux-loong64@0.24.2": + '@esbuild/linux-loong64@0.24.2': optional: true - "@esbuild/linux-loong64@0.25.12": + '@esbuild/linux-loong64@0.25.12': optional: true - "@esbuild/linux-mips64el@0.21.5": + '@esbuild/linux-mips64el@0.21.5': optional: true - "@esbuild/linux-mips64el@0.24.2": + '@esbuild/linux-mips64el@0.24.2': optional: true - "@esbuild/linux-mips64el@0.25.12": + '@esbuild/linux-mips64el@0.25.12': optional: true - "@esbuild/linux-ppc64@0.21.5": + '@esbuild/linux-ppc64@0.21.5': optional: true - "@esbuild/linux-ppc64@0.24.2": + '@esbuild/linux-ppc64@0.24.2': optional: true - "@esbuild/linux-ppc64@0.25.12": + '@esbuild/linux-ppc64@0.25.12': optional: true - "@esbuild/linux-riscv64@0.21.5": + '@esbuild/linux-riscv64@0.21.5': optional: true - "@esbuild/linux-riscv64@0.24.2": + '@esbuild/linux-riscv64@0.24.2': optional: true - "@esbuild/linux-riscv64@0.25.12": + '@esbuild/linux-riscv64@0.25.12': optional: true - "@esbuild/linux-s390x@0.21.5": + '@esbuild/linux-s390x@0.21.5': optional: true - "@esbuild/linux-s390x@0.24.2": + '@esbuild/linux-s390x@0.24.2': optional: true - "@esbuild/linux-s390x@0.25.12": + '@esbuild/linux-s390x@0.25.12': optional: true - "@esbuild/linux-x64@0.21.5": + '@esbuild/linux-x64@0.21.5': optional: true - "@esbuild/linux-x64@0.24.2": + '@esbuild/linux-x64@0.24.2': optional: true - "@esbuild/linux-x64@0.25.12": + '@esbuild/linux-x64@0.25.12': optional: true - "@esbuild/netbsd-arm64@0.24.2": + '@esbuild/netbsd-arm64@0.24.2': optional: true - "@esbuild/netbsd-arm64@0.25.12": + '@esbuild/netbsd-arm64@0.25.12': optional: true - "@esbuild/netbsd-x64@0.21.5": + '@esbuild/netbsd-x64@0.21.5': optional: true - "@esbuild/netbsd-x64@0.24.2": + '@esbuild/netbsd-x64@0.24.2': optional: true - "@esbuild/netbsd-x64@0.25.12": + '@esbuild/netbsd-x64@0.25.12': optional: true - "@esbuild/openbsd-arm64@0.24.2": + '@esbuild/openbsd-arm64@0.24.2': optional: true - "@esbuild/openbsd-arm64@0.25.12": + '@esbuild/openbsd-arm64@0.25.12': optional: true - "@esbuild/openbsd-x64@0.21.5": + '@esbuild/openbsd-x64@0.21.5': optional: true - "@esbuild/openbsd-x64@0.24.2": + '@esbuild/openbsd-x64@0.24.2': optional: true - "@esbuild/openbsd-x64@0.25.12": + '@esbuild/openbsd-x64@0.25.12': optional: true - "@esbuild/openharmony-arm64@0.25.12": + '@esbuild/openharmony-arm64@0.25.12': optional: true - "@esbuild/sunos-x64@0.21.5": + '@esbuild/sunos-x64@0.21.5': optional: true - "@esbuild/sunos-x64@0.24.2": + '@esbuild/sunos-x64@0.24.2': optional: true - "@esbuild/sunos-x64@0.25.12": + '@esbuild/sunos-x64@0.25.12': optional: true - "@esbuild/win32-arm64@0.21.5": + '@esbuild/win32-arm64@0.21.5': optional: true - "@esbuild/win32-arm64@0.24.2": + '@esbuild/win32-arm64@0.24.2': optional: true - "@esbuild/win32-arm64@0.25.12": + '@esbuild/win32-arm64@0.25.12': optional: true - "@esbuild/win32-ia32@0.21.5": + '@esbuild/win32-ia32@0.21.5': optional: true - "@esbuild/win32-ia32@0.24.2": + '@esbuild/win32-ia32@0.24.2': optional: true - "@esbuild/win32-ia32@0.25.12": + '@esbuild/win32-ia32@0.25.12': optional: true - "@esbuild/win32-x64@0.21.5": + '@esbuild/win32-x64@0.21.5': optional: true - "@esbuild/win32-x64@0.24.2": + '@esbuild/win32-x64@0.24.2': optional: true - "@esbuild/win32-x64@0.25.12": + '@esbuild/win32-x64@0.25.12': optional: true - "@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.7))": + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.7))': dependencies: eslint: 9.39.4(jiti@1.21.7) eslint-visitor-keys: 3.4.3 - "@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))": + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': dependencies: eslint: 9.39.4(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - "@eslint-community/regexpp@4.12.2": {} + '@eslint-community/regexpp@4.12.2': {} - "@eslint/config-array@0.21.2": + '@eslint/config-array@0.21.2': dependencies: - "@eslint/object-schema": 2.1.7 + '@eslint/object-schema': 2.1.7 debug: 4.4.3 minimatch: 3.1.5 transitivePeerDependencies: - supports-color - "@eslint/config-helpers@0.4.2": + '@eslint/config-helpers@0.4.2': dependencies: - "@eslint/core": 0.17.0 + '@eslint/core': 0.17.0 - "@eslint/core@0.17.0": + '@eslint/core@0.17.0': dependencies: - "@types/json-schema": 7.0.15 + '@types/json-schema': 7.0.15 - "@eslint/eslintrc@3.3.5": + '@eslint/eslintrc@3.3.5': dependencies: ajv: 6.14.0 debug: 4.4.3 @@ -11430,26 +7990,26 @@ snapshots: transitivePeerDependencies: - supports-color - "@eslint/js@9.39.4": {} + '@eslint/js@9.39.4': {} - "@eslint/object-schema@2.1.7": {} + '@eslint/object-schema@2.1.7': {} - "@eslint/plugin-kit@0.4.1": + '@eslint/plugin-kit@0.4.1': dependencies: - "@eslint/core": 0.17.0 + '@eslint/core': 0.17.0 levn: 0.4.1 - "@faker-js/faker@10.3.0": {} + '@faker-js/faker@10.3.0': {} - "@faker-js/faker@9.9.0": {} + '@faker-js/faker@9.9.0': {} - "@feature-sliced/filesystem@3.0.1": + '@feature-sliced/filesystem@3.0.1': dependencies: typescript: 5.9.3 - "@feature-sliced/steiger-plugin@0.5.7(typescript@5.9.3)": + '@feature-sliced/steiger-plugin@0.5.7(typescript@5.9.3)': dependencies: - "@feature-sliced/filesystem": 3.0.1 + '@feature-sliced/filesystem': 3.0.1 fastest-levenshtein: 1.0.16 lodash-es: 4.17.23 pluralize: 8.0.0 @@ -11459,169 +8019,169 @@ snapshots: - supports-color - typescript - "@floating-ui/core@1.7.5": + '@floating-ui/core@1.7.5': dependencies: - "@floating-ui/utils": 0.2.11 + '@floating-ui/utils': 0.2.11 - "@floating-ui/dom@1.7.6": + '@floating-ui/dom@1.7.6': dependencies: - "@floating-ui/core": 1.7.5 - "@floating-ui/utils": 0.2.11 + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 - "@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@floating-ui/dom": 1.7.6 + '@floating-ui/dom': 1.7.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@floating-ui/utils@0.2.11": {} + '@floating-ui/utils@0.2.11': {} - "@fontsource-variable/noto-sans-kr@5.2.10": {} + '@fontsource-variable/noto-sans-kr@5.2.10': {} - "@frontend-opensource/use-react-hooks@1.1.4": + '@frontend-opensource/use-react-hooks@1.1.4': dependencies: async-wave: 1.8.6 fast-deep-equal: 3.1.3 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@fullcalendar/core@6.1.20": + '@fullcalendar/core@6.1.20': dependencies: preact: 10.12.1 - "@fullcalendar/daygrid@6.1.20(@fullcalendar/core@6.1.20)": + '@fullcalendar/daygrid@6.1.20(@fullcalendar/core@6.1.20)': dependencies: - "@fullcalendar/core": 6.1.20 + '@fullcalendar/core': 6.1.20 - "@fullcalendar/interaction@6.1.20(@fullcalendar/core@6.1.20)": + '@fullcalendar/interaction@6.1.20(@fullcalendar/core@6.1.20)': dependencies: - "@fullcalendar/core": 6.1.20 + '@fullcalendar/core': 6.1.20 - "@fullcalendar/react@6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@fullcalendar/react@6.1.20(@fullcalendar/core@6.1.20)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@fullcalendar/core": 6.1.20 + '@fullcalendar/core': 6.1.20 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@fullcalendar/timegrid@6.1.20(@fullcalendar/core@6.1.20)": + '@fullcalendar/timegrid@6.1.20(@fullcalendar/core@6.1.20)': dependencies: - "@fullcalendar/core": 6.1.20 - "@fullcalendar/daygrid": 6.1.20(@fullcalendar/core@6.1.20) + '@fullcalendar/core': 6.1.20 + '@fullcalendar/daygrid': 6.1.20(@fullcalendar/core@6.1.20) - "@hookform/resolvers@4.1.3(react-hook-form@7.72.0(react@19.2.4))": + '@hookform/resolvers@4.1.3(react-hook-form@7.72.0(react@19.2.4))': dependencies: - "@standard-schema/utils": 0.3.0 + '@standard-schema/utils': 0.3.0 react-hook-form: 7.72.0(react@19.2.4) - "@humanfs/core@0.19.1": {} + '@humanfs/core@0.19.1': {} - "@humanfs/node@0.16.7": + '@humanfs/node@0.16.7': dependencies: - "@humanfs/core": 0.19.1 - "@humanwhocodes/retry": 0.4.3 + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 - "@humanwhocodes/module-importer@1.0.1": {} + '@humanwhocodes/module-importer@1.0.1': {} - "@humanwhocodes/retry@0.4.3": {} + '@humanwhocodes/retry@0.4.3': {} - "@img/colour@1.1.0": + '@img/colour@1.1.0': optional: true - "@img/sharp-darwin-arm64@0.34.5": + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-darwin-arm64": 1.2.4 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - "@img/sharp-darwin-x64@0.34.5": + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-darwin-x64": 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - "@img/sharp-libvips-darwin-arm64@1.2.4": + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - "@img/sharp-libvips-darwin-x64@1.2.4": + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - "@img/sharp-libvips-linux-arm64@1.2.4": + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - "@img/sharp-libvips-linux-arm@1.2.4": + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - "@img/sharp-libvips-linux-ppc64@1.2.4": + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - "@img/sharp-libvips-linux-riscv64@1.2.4": + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - "@img/sharp-libvips-linux-s390x@1.2.4": + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - "@img/sharp-libvips-linux-x64@1.2.4": + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - "@img/sharp-libvips-linuxmusl-x64@1.2.4": + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - "@img/sharp-linux-arm64@0.34.5": + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-arm64": 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - "@img/sharp-linux-arm@0.34.5": + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-arm": 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - "@img/sharp-linux-ppc64@0.34.5": + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-ppc64": 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - "@img/sharp-linux-riscv64@0.34.5": + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-riscv64": 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - "@img/sharp-linux-s390x@0.34.5": + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-s390x": 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - "@img/sharp-linux-x64@0.34.5": + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linux-x64": 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - "@img/sharp-linuxmusl-arm64@0.34.5": + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - "@img/sharp-linuxmusl-x64@0.34.5": + '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: - "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true - "@img/sharp-wasm32@0.34.5": + '@img/sharp-wasm32@0.34.5': dependencies: - "@emnapi/runtime": 1.9.1 + '@emnapi/runtime': 1.9.1 optional: true - "@img/sharp-win32-arm64@0.34.5": + '@img/sharp-win32-arm64@0.34.5': optional: true - "@img/sharp-win32-ia32@0.34.5": + '@img/sharp-win32-ia32@0.34.5': optional: true - "@img/sharp-win32-x64@0.34.5": + '@img/sharp-win32-x64@0.34.5': optional: true - "@isaacs/cliui@8.0.2": + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 @@ -11630,7 +8190,7 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - "@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: glob: 10.5.0 magic-string: 0.27.0 @@ -11639,60 +8199,60 @@ snapshots: optionalDependencies: typescript: 5.6.3 - "@jridgewell/gen-mapping@0.3.13": + '@jridgewell/gen-mapping@0.3.13': dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/remapping@2.3.5": + '@jridgewell/remapping@2.3.5': dependencies: - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/resolve-uri@3.1.2": {} + '@jridgewell/resolve-uri@3.1.2': {} - "@jridgewell/source-map@0.3.11": + '@jridgewell/source-map@0.3.11': dependencies: - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/sourcemap-codec@1.5.5": {} + '@jridgewell/sourcemap-codec@1.5.5': {} - "@jridgewell/trace-mapping@0.3.31": + '@jridgewell/trace-mapping@0.3.31': dependencies: - "@jridgewell/resolve-uri": 3.1.2 - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 - "@juggle/resize-observer@3.4.0": {} + '@juggle/resize-observer@3.4.0': {} - "@kurkle/color@0.3.4": {} + '@kurkle/color@0.3.4': {} - "@mapbox/jsonlint-lines-primitives@2.0.2": {} + '@mapbox/jsonlint-lines-primitives@2.0.2': {} - "@mapbox/mapbox-gl-style-spec@13.28.0": + '@mapbox/mapbox-gl-style-spec@13.28.0': dependencies: - "@mapbox/jsonlint-lines-primitives": 2.0.2 - "@mapbox/point-geometry": 0.1.0 - "@mapbox/unitbezier": 0.0.0 + '@mapbox/jsonlint-lines-primitives': 2.0.2 + '@mapbox/point-geometry': 0.1.0 + '@mapbox/unitbezier': 0.0.0 csscolorparser: 1.0.3 json-stringify-pretty-compact: 2.0.0 minimist: 1.2.8 rw: 1.3.3 sort-object: 0.3.2 - "@mapbox/point-geometry@0.1.0": {} + '@mapbox/point-geometry@0.1.0': {} - "@mapbox/unitbezier@0.0.0": {} + '@mapbox/unitbezier@0.0.0': {} - "@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)": + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@types/mdx": 2.0.13 - "@types/react": 19.2.14 + '@types/mdx': 2.0.13 + '@types/react': 19.2.14 react: 19.2.4 - "@minoru/react-dnd-treeview@3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@minoru/react-dnd-treeview@3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@juggle/resize-observer": 3.4.0 + '@juggle/resize-observer': 3.4.0 dnd-multi-backend: 8.1.2(dnd-core@16.0.1) framer-motion: 11.18.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 @@ -11702,12 +8262,12 @@ snapshots: react-dom: 19.2.4(react@19.2.4) react-use-measure: 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) transitivePeerDependencies: - - "@emotion/is-prop-valid" + - '@emotion/is-prop-valid' - dnd-core - "@minoru/react-dnd-treeview@3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@minoru/react-dnd-treeview@3.5.3(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@juggle/resize-observer": 3.4.0 + '@juggle/resize-observer': 3.4.0 dnd-multi-backend: 8.1.2(dnd-core@16.0.1) framer-motion: 11.18.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 @@ -11717,832 +8277,836 @@ snapshots: react-dom: 19.2.4(react@19.2.4) react-use-measure: 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) transitivePeerDependencies: - - "@emotion/is-prop-valid" + - '@emotion/is-prop-valid' - dnd-core - "@napi-rs/wasm-runtime@0.2.12": + '@napi-rs/wasm-runtime@0.2.12': dependencies: - "@emnapi/core": 1.9.1 - "@emnapi/runtime": 1.9.1 - "@tybys/wasm-util": 0.10.1 + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 + '@tybys/wasm-util': 0.10.1 optional: true - "@next/env@15.3.8": {} + '@next/env@15.3.8': {} - "@next/eslint-plugin-next@15.3.8": + '@next/eslint-plugin-next@15.3.8': dependencies: fast-glob: 3.3.1 - "@next/swc-darwin-arm64@15.3.5": - optional: true - - "@next/swc-darwin-x64@15.3.5": - optional: true - - "@next/swc-linux-arm64-gnu@15.3.5": - optional: true - - "@next/swc-linux-arm64-musl@15.3.5": - optional: true - - "@next/swc-linux-x64-gnu@15.3.5": - optional: true - - "@next/swc-linux-x64-musl@15.3.5": - optional: true - - "@next/swc-win32-arm64-msvc@15.3.5": - optional: true - - "@next/swc-win32-x64-msvc@15.3.5": - optional: true - - "@nodelib/fs.scandir@2.1.5": + '@next/eslint-plugin-next@15.4.0': dependencies: - "@nodelib/fs.stat": 2.0.5 + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.3.5': + optional: true + + '@next/swc-darwin-x64@15.3.5': + optional: true + + '@next/swc-linux-arm64-gnu@15.3.5': + optional: true + + '@next/swc-linux-arm64-musl@15.3.5': + optional: true + + '@next/swc-linux-x64-gnu@15.3.5': + optional: true + + '@next/swc-linux-x64-musl@15.3.5': + optional: true + + '@next/swc-win32-arm64-msvc@15.3.5': + optional: true + + '@next/swc-win32-x64-msvc@15.3.5': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - "@nodelib/fs.stat@2.0.5": {} + '@nodelib/fs.stat@2.0.5': {} - "@nodelib/fs.walk@1.2.8": + '@nodelib/fs.walk@1.2.8': dependencies: - "@nodelib/fs.scandir": 2.1.5 + '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - "@nolyfill/is-core-module@1.0.39": {} + '@nolyfill/is-core-module@1.0.39': {} - "@petamoriken/float16@3.9.3": {} + '@petamoriken/float16@3.9.3': {} - "@pkgjs/parseargs@0.11.0": + '@pkgjs/parseargs@0.11.0': optional: true - "@radix-ui/number@1.1.1": {} + '@radix-ui/number@1.1.1': {} - "@radix-ui/primitive@1.1.3": {} + '@radix-ui/primitive@1.1.3': {} - "@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collapsible": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-context@1.1.3(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-context@1.1.3(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-menu": 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-icons@1.3.2(react@19.2.4)": + '@radix-ui/react-icons@1.3.2(react@19.2.4)': dependencies: react: 19.2.4 - "@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-roving-focus": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@floating-ui/react-dom": 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-arrow": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-rect": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/rect": 1.1.1 + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/rect': 1.1.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-slot": 1.2.4(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-context": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-roving-focus": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/number": 1.1.1 - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/number": 1.1.1 - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-visually-hidden": 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) aria-hidden: 1.2.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/number": 1.1.1 - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-direction": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-roving-focus": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-context": 1.1.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-id": 1.1.1(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@radix-ui/react-slot": 1.2.3(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-visually-hidden": 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-effect-event": 0.0.2(@types/react@19.2.14)(react@19.2.4) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/rect": 1.1.1 + '@radix-ui/rect': 1.1.1 react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)": + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': dependencies: - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) react: 19.2.4 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/react-visually-hidden@1.2.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@radix-ui/react-visually-hidden@1.2.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 - "@types/react-dom": 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) - "@radix-ui/rect@1.1.1": {} + '@radix-ui/rect@1.1.1': {} - "@react-dnd/asap@5.0.2": {} + '@react-dnd/asap@5.0.2': {} - "@react-dnd/invariant@4.0.2": {} + '@react-dnd/invariant@4.0.2': {} - "@react-dnd/shallowequal@4.0.2": {} + '@react-dnd/shallowequal@4.0.2': {} - "@rolldown/pluginutils@1.0.0-beta.27": {} + '@rolldown/pluginutils@1.0.0-beta.27': {} - "@rollup/pluginutils@5.3.0(rollup@4.60.0)": + '@rollup/pluginutils@5.3.0(rollup@4.60.0)': dependencies: - "@types/estree": 1.0.8 + '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: rollup: 4.60.0 - "@rollup/rollup-android-arm-eabi@4.60.0": + '@rollup/rollup-android-arm-eabi@4.60.0': optional: true - "@rollup/rollup-android-arm64@4.60.0": + '@rollup/rollup-android-arm64@4.60.0': optional: true - "@rollup/rollup-darwin-arm64@4.60.0": + '@rollup/rollup-darwin-arm64@4.60.0': optional: true - "@rollup/rollup-darwin-x64@4.60.0": + '@rollup/rollup-darwin-x64@4.60.0': optional: true - "@rollup/rollup-freebsd-arm64@4.60.0": + '@rollup/rollup-freebsd-arm64@4.60.0': optional: true - "@rollup/rollup-freebsd-x64@4.60.0": + '@rollup/rollup-freebsd-x64@4.60.0': optional: true - "@rollup/rollup-linux-arm-gnueabihf@4.60.0": + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': optional: true - "@rollup/rollup-linux-arm-musleabihf@4.60.0": + '@rollup/rollup-linux-arm-musleabihf@4.60.0': optional: true - "@rollup/rollup-linux-arm64-gnu@4.60.0": + '@rollup/rollup-linux-arm64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-arm64-musl@4.60.0": + '@rollup/rollup-linux-arm64-musl@4.60.0': optional: true - "@rollup/rollup-linux-loong64-gnu@4.60.0": + '@rollup/rollup-linux-loong64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-loong64-musl@4.60.0": + '@rollup/rollup-linux-loong64-musl@4.60.0': optional: true - "@rollup/rollup-linux-ppc64-gnu@4.60.0": + '@rollup/rollup-linux-ppc64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-ppc64-musl@4.60.0": + '@rollup/rollup-linux-ppc64-musl@4.60.0': optional: true - "@rollup/rollup-linux-riscv64-gnu@4.60.0": + '@rollup/rollup-linux-riscv64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-riscv64-musl@4.60.0": + '@rollup/rollup-linux-riscv64-musl@4.60.0': optional: true - "@rollup/rollup-linux-s390x-gnu@4.60.0": + '@rollup/rollup-linux-s390x-gnu@4.60.0': optional: true - "@rollup/rollup-linux-x64-gnu@4.60.0": + '@rollup/rollup-linux-x64-gnu@4.60.0': optional: true - "@rollup/rollup-linux-x64-musl@4.60.0": + '@rollup/rollup-linux-x64-musl@4.60.0': optional: true - "@rollup/rollup-openbsd-x64@4.60.0": + '@rollup/rollup-openbsd-x64@4.60.0': optional: true - "@rollup/rollup-openharmony-arm64@4.60.0": + '@rollup/rollup-openharmony-arm64@4.60.0': optional: true - "@rollup/rollup-win32-arm64-msvc@4.60.0": + '@rollup/rollup-win32-arm64-msvc@4.60.0': optional: true - "@rollup/rollup-win32-ia32-msvc@4.60.0": + '@rollup/rollup-win32-ia32-msvc@4.60.0': optional: true - "@rollup/rollup-win32-x64-gnu@4.60.0": + '@rollup/rollup-win32-x64-gnu@4.60.0': optional: true - "@rollup/rollup-win32-x64-msvc@4.60.0": + '@rollup/rollup-win32-x64-msvc@4.60.0': optional: true - "@rtsao/scc@1.1.0": {} + '@rtsao/scc@1.1.0': {} - "@rushstack/eslint-patch@1.16.1": {} + '@rushstack/eslint-patch@1.16.1': {} - "@sindresorhus/merge-streams@2.3.0": {} + '@sindresorhus/merge-streams@2.3.0': {} - "@standard-schema/utils@0.3.0": {} + '@standard-schema/utils@0.3.0': {} - "@storybook/addon-actions@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-actions@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@types/uuid": 9.0.8 + '@storybook/global': 5.0.0 + '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 storybook: 8.6.18(prettier@3.8.1) uuid: 9.0.1 - "@storybook/addon-backgrounds@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-backgrounds@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 memoizerific: 1.11.3 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-controls@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-controls@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 dequal: 2.0.3 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-docs@8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-docs@8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@mdx-js/react": 3.1.1(@types/react@19.2.14)(react@19.2.4) - "@storybook/blocks": 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/csf-plugin": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/react-dom-shim": 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) + '@storybook/blocks': 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) + '@storybook/csf-plugin': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 transitivePeerDependencies: - - "@types/react" + - '@types/react' - "@storybook/addon-essentials@8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-essentials@8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/addon-actions": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-backgrounds": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-controls": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-docs": 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-highlight": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-measure": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-outline": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-toolbars": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/addon-viewport": 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-actions': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-controls': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-docs': 8.6.14(@types/react@19.2.14)(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-highlight': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-measure': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-outline': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-toolbars': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/addon-viewport': 8.6.14(storybook@8.6.18(prettier@3.8.1)) storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 transitivePeerDependencies: - - "@types/react" + - '@types/react' - "@storybook/addon-highlight@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-highlight@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 storybook: 8.6.18(prettier@3.8.1) - "@storybook/addon-interactions@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-interactions@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@storybook/instrumenter": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@storybook/test": 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@storybook/test': 8.6.14(storybook@8.6.18(prettier@3.8.1)) polished: 4.3.1 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-measure@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-measure@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 storybook: 8.6.18(prettier@3.8.1) tiny-invariant: 1.3.3 - "@storybook/addon-onboarding@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-onboarding@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/addon-outline@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-outline@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 + '@storybook/global': 5.0.0 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-themes@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-themes@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 - "@storybook/addon-toolbars@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-toolbars@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/addon-viewport@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/addon-viewport@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: memoizerific: 1.11.3 storybook: 8.6.18(prettier@3.8.1) - "@storybook/blocks@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/blocks@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/icons": 1.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@storybook/icons': 1.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 optionalDependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@storybook/builder-vite@8.6.18(storybook@8.6.18(prettier@3.8.1))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@storybook/builder-vite@8.6.18(storybook@8.6.18(prettier@3.8.1))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: - "@storybook/csf-plugin": 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/csf-plugin': 8.6.18(storybook@8.6.18(prettier@3.8.1)) browser-assert: 1.2.1 storybook: 8.6.18(prettier@3.8.1) ts-dedent: 2.2.0 vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) - "@storybook/components@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/components@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/core@8.6.18(prettier@3.8.1)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/core@8.6.18(prettier@3.8.1)(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/theming": 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/theming': 8.6.18(storybook@8.6.18(prettier@3.8.1)) better-opn: 3.0.2 browser-assert: 1.2.1 esbuild: 0.25.12 @@ -12561,69 +9125,69 @@ snapshots: - supports-color - utf-8-validate - "@storybook/csf-plugin@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/csf-plugin@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) unplugin: 1.16.1 - "@storybook/csf-plugin@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/csf-plugin@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) unplugin: 1.16.1 - "@storybook/csf@0.1.13": + '@storybook/csf@0.1.13': dependencies: type-fest: 2.19.0 - "@storybook/global@5.0.0": {} + '@storybook/global@5.0.0': {} - "@storybook/icons@1.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@storybook/icons@1.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@storybook/instrumenter@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/instrumenter@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@vitest/utils": 2.1.9 + '@storybook/global': 5.0.0 + '@vitest/utils': 2.1.9 storybook: 8.6.18(prettier@3.8.1) - "@storybook/instrumenter@8.6.15(storybook@8.6.18(prettier@3.8.1))": + '@storybook/instrumenter@8.6.15(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@vitest/utils": 2.1.9 + '@storybook/global': 5.0.0 + '@vitest/utils': 2.1.9 storybook: 8.6.18(prettier@3.8.1) - "@storybook/manager-api@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/manager-api@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/manager-api@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/manager-api@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/preview-api@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/preview-api@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/react-dom-shim@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/react-dom-shim@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) - "@storybook/react-dom-shim@8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))": + '@storybook/react-dom-shim@8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) - "@storybook/react-vite@8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.0)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@storybook/react-vite@8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.60.0)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript": 0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@rollup/pluginutils": 5.3.0(rollup@4.60.0) - "@storybook/builder-vite": 8.6.18(storybook@8.6.18(prettier@3.8.1))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) - "@storybook/react": 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.6.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) + '@storybook/builder-vite': 8.6.18(storybook@8.6.18(prettier@3.8.1))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)) + '@storybook/react': 8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3) find-up: 5.0.0 magic-string: 0.30.21 react: 19.2.4 @@ -12634,68 +9198,68 @@ snapshots: tsconfig-paths: 4.2.0 vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) optionalDependencies: - "@storybook/test": 8.6.15(storybook@8.6.18(prettier@3.8.1)) + '@storybook/test': 8.6.15(storybook@8.6.18(prettier@3.8.1)) transitivePeerDependencies: - rollup - supports-color - typescript - "@storybook/react@8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)": + '@storybook/react@8.6.18(@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1))(typescript@5.6.3)': dependencies: - "@storybook/components": 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/global": 5.0.0 - "@storybook/manager-api": 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/preview-api": 8.6.18(storybook@8.6.18(prettier@3.8.1)) - "@storybook/react-dom-shim": 8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) - "@storybook/theming": 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/components': 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/preview-api': 8.6.18(storybook@8.6.18(prettier@3.8.1)) + '@storybook/react-dom-shim': 8.6.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.18(prettier@3.8.1)) + '@storybook/theming': 8.6.18(storybook@8.6.18(prettier@3.8.1)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) storybook: 8.6.18(prettier@3.8.1) optionalDependencies: - "@storybook/test": 8.6.15(storybook@8.6.18(prettier@3.8.1)) + '@storybook/test': 8.6.15(storybook@8.6.18(prettier@3.8.1)) typescript: 5.6.3 - "@storybook/test@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/test@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@storybook/instrumenter": 8.6.14(storybook@8.6.18(prettier@3.8.1)) - "@testing-library/dom": 10.4.0 - "@testing-library/jest-dom": 6.5.0 - "@testing-library/user-event": 14.5.2(@testing-library/dom@10.4.0) - "@vitest/expect": 2.0.5 - "@vitest/spy": 2.0.5 + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.14(storybook@8.6.18(prettier@3.8.1)) + '@testing-library/dom': 10.4.0 + '@testing-library/jest-dom': 6.5.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/expect': 2.0.5 + '@vitest/spy': 2.0.5 storybook: 8.6.18(prettier@3.8.1) - "@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1))": + '@storybook/test@8.6.15(storybook@8.6.18(prettier@3.8.1))': dependencies: - "@storybook/global": 5.0.0 - "@storybook/instrumenter": 8.6.15(storybook@8.6.18(prettier@3.8.1)) - "@testing-library/dom": 10.4.0 - "@testing-library/jest-dom": 6.5.0 - "@testing-library/user-event": 14.5.2(@testing-library/dom@10.4.0) - "@vitest/expect": 2.0.5 - "@vitest/spy": 2.0.5 + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.15(storybook@8.6.18(prettier@3.8.1)) + '@testing-library/dom': 10.4.0 + '@testing-library/jest-dom': 6.5.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/expect': 2.0.5 + '@vitest/spy': 2.0.5 storybook: 8.6.18(prettier@3.8.1) - "@storybook/theming@8.6.14(storybook@8.6.18(prettier@3.8.1))": + '@storybook/theming@8.6.14(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@storybook/theming@8.6.18(storybook@8.6.18(prettier@3.8.1))": + '@storybook/theming@8.6.18(storybook@8.6.18(prettier@3.8.1))': dependencies: storybook: 8.6.18(prettier@3.8.1) - "@swc/counter@0.1.3": {} + '@swc/counter@0.1.3': {} - "@swc/helpers@0.5.15": + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 - "@tabby_ai/hijri-converter@1.0.5": {} + '@tabby_ai/hijri-converter@1.0.5': {} - "@tailwindcss/node@4.2.2": + '@tailwindcss/node@4.2.2': dependencies: - "@jridgewell/remapping": 2.3.5 + '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.20.1 jiti: 2.6.1 lightningcss: 1.32.0 @@ -12703,101 +9267,101 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.2.2 - "@tailwindcss/oxide-android-arm64@4.2.2": + '@tailwindcss/oxide-android-arm64@4.2.2': optional: true - "@tailwindcss/oxide-darwin-arm64@4.2.2": + '@tailwindcss/oxide-darwin-arm64@4.2.2': optional: true - "@tailwindcss/oxide-darwin-x64@4.2.2": + '@tailwindcss/oxide-darwin-x64@4.2.2': optional: true - "@tailwindcss/oxide-freebsd-x64@4.2.2": + '@tailwindcss/oxide-freebsd-x64@4.2.2': optional: true - "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2": + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': optional: true - "@tailwindcss/oxide-linux-arm64-gnu@4.2.2": + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': optional: true - "@tailwindcss/oxide-linux-arm64-musl@4.2.2": + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': optional: true - "@tailwindcss/oxide-linux-x64-gnu@4.2.2": + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': optional: true - "@tailwindcss/oxide-linux-x64-musl@4.2.2": + '@tailwindcss/oxide-linux-x64-musl@4.2.2': optional: true - "@tailwindcss/oxide-wasm32-wasi@4.2.2": + '@tailwindcss/oxide-wasm32-wasi@4.2.2': optional: true - "@tailwindcss/oxide-win32-arm64-msvc@4.2.2": + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': optional: true - "@tailwindcss/oxide-win32-x64-msvc@4.2.2": + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': optional: true - "@tailwindcss/oxide@4.2.2": + '@tailwindcss/oxide@4.2.2': optionalDependencies: - "@tailwindcss/oxide-android-arm64": 4.2.2 - "@tailwindcss/oxide-darwin-arm64": 4.2.2 - "@tailwindcss/oxide-darwin-x64": 4.2.2 - "@tailwindcss/oxide-freebsd-x64": 4.2.2 - "@tailwindcss/oxide-linux-arm-gnueabihf": 4.2.2 - "@tailwindcss/oxide-linux-arm64-gnu": 4.2.2 - "@tailwindcss/oxide-linux-arm64-musl": 4.2.2 - "@tailwindcss/oxide-linux-x64-gnu": 4.2.2 - "@tailwindcss/oxide-linux-x64-musl": 4.2.2 - "@tailwindcss/oxide-wasm32-wasi": 4.2.2 - "@tailwindcss/oxide-win32-arm64-msvc": 4.2.2 - "@tailwindcss/oxide-win32-x64-msvc": 4.2.2 + '@tailwindcss/oxide-android-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-x64': 4.2.2 + '@tailwindcss/oxide-freebsd-x64': 4.2.2 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-x64-musl': 4.2.2 + '@tailwindcss/oxide-wasm32-wasi': 4.2.2 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - "@tailwindcss/vite@4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@tailwindcss/vite@4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: - "@tailwindcss/node": 4.2.2 - "@tailwindcss/oxide": 4.2.2 + '@tailwindcss/node': 4.2.2 + '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) - "@tanstack/query-core@5.95.2": {} + '@tanstack/query-core@5.95.2': {} - "@tanstack/query-devtools@5.95.2": {} + '@tanstack/query-devtools@5.95.2': {} - "@tanstack/react-query-devtools@5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4)": + '@tanstack/react-query-devtools@5.95.2(@tanstack/react-query@5.95.2(react@19.2.4))(react@19.2.4)': dependencies: - "@tanstack/query-devtools": 5.95.2 - "@tanstack/react-query": 5.95.2(react@19.2.4) + '@tanstack/query-devtools': 5.95.2 + '@tanstack/react-query': 5.95.2(react@19.2.4) react: 19.2.4 - "@tanstack/react-query@5.95.2(react@19.2.4)": + '@tanstack/react-query@5.95.2(react@19.2.4)': dependencies: - "@tanstack/query-core": 5.95.2 + '@tanstack/query-core': 5.95.2 react: 19.2.4 - "@tanstack/react-table@8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@tanstack/react-table@8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - "@tanstack/table-core": 8.21.3 + '@tanstack/table-core': 8.21.3 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@tanstack/table-core@8.21.3": {} + '@tanstack/table-core@8.21.3': {} - "@testing-library/dom@10.4.0": + '@testing-library/dom@10.4.0': dependencies: - "@babel/code-frame": 7.29.0 - "@babel/runtime": 7.29.2 - "@types/aria-query": 5.0.4 + '@babel/code-frame': 7.29.0 + '@babel/runtime': 7.29.2 + '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 dom-accessibility-api: 0.5.16 lz-string: 1.5.0 pretty-format: 27.5.1 - "@testing-library/jest-dom@6.5.0": + '@testing-library/jest-dom@6.5.0': dependencies: - "@adobe/css-tools": 4.4.4 + '@adobe/css-tools': 4.4.4 aria-query: 5.3.2 chalk: 3.0.0 css.escape: 1.5.1 @@ -12805,136 +9369,136 @@ snapshots: lodash: 4.17.23 redent: 3.0.0 - "@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)": + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: - "@testing-library/dom": 10.4.0 + '@testing-library/dom': 10.4.0 - "@tinymce/tinymce-react@5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + '@tinymce/tinymce-react@5.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: prop-types: 15.8.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) tinymce: 7.9.2 - "@tybys/wasm-util@0.10.1": + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 optional: true - "@types/aria-query@5.0.4": {} + '@types/aria-query@5.0.4': {} - "@types/babel__core@7.20.5": + '@types/babel__core@7.20.5': dependencies: - "@babel/parser": 7.29.2 - "@babel/types": 7.29.0 - "@types/babel__generator": 7.27.0 - "@types/babel__template": 7.4.4 - "@types/babel__traverse": 7.28.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 - "@types/babel__generator@7.27.0": + '@types/babel__generator@7.27.0': dependencies: - "@babel/types": 7.29.0 + '@babel/types': 7.29.0 - "@types/babel__template@7.4.4": + '@types/babel__template@7.4.4': dependencies: - "@babel/parser": 7.29.2 - "@babel/types": 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 - "@types/babel__traverse@7.28.0": + '@types/babel__traverse@7.28.0': dependencies: - "@babel/types": 7.29.0 + '@babel/types': 7.29.0 - "@types/d3-array@3.2.2": {} + '@types/d3-array@3.2.2': {} - "@types/d3-color@3.1.3": {} + '@types/d3-color@3.1.3': {} - "@types/d3-ease@3.0.2": {} + '@types/d3-ease@3.0.2': {} - "@types/d3-interpolate@3.0.4": + '@types/d3-interpolate@3.0.4': dependencies: - "@types/d3-color": 3.1.3 + '@types/d3-color': 3.1.3 - "@types/d3-path@3.1.1": {} + '@types/d3-path@3.1.1': {} - "@types/d3-scale@4.0.9": + '@types/d3-scale@4.0.9': dependencies: - "@types/d3-time": 3.0.4 + '@types/d3-time': 3.0.4 - "@types/d3-shape@3.1.8": + '@types/d3-shape@3.1.8': dependencies: - "@types/d3-path": 3.1.1 + '@types/d3-path': 3.1.1 - "@types/d3-time@3.0.4": {} + '@types/d3-time@3.0.4': {} - "@types/d3-timer@3.0.2": {} + '@types/d3-timer@3.0.2': {} - "@types/doctrine@0.0.9": {} + '@types/doctrine@0.0.9': {} - "@types/eslint-scope@3.7.7": + '@types/eslint-scope@3.7.7': dependencies: - "@types/eslint": 9.6.1 - "@types/estree": 1.0.8 + '@types/eslint': 9.6.1 + '@types/estree': 1.0.8 - "@types/eslint@9.6.1": + '@types/eslint@9.6.1': dependencies: - "@types/estree": 1.0.8 - "@types/json-schema": 7.0.15 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 - "@types/estree@1.0.8": {} + '@types/estree@1.0.8': {} - "@types/hammerjs@2.0.46": {} + '@types/hammerjs@2.0.46': {} - "@types/js-cookie@3.0.6": {} + '@types/js-cookie@3.0.6': {} - "@types/json-schema@7.0.15": {} + '@types/json-schema@7.0.15': {} - "@types/json5@0.0.29": {} + '@types/json5@0.0.29': {} - "@types/mdx@2.0.13": {} + '@types/mdx@2.0.13': {} - "@types/node@20.19.37": + '@types/node@20.19.37': dependencies: undici-types: 6.21.0 - "@types/node@22.19.15": + '@types/node@22.19.15': dependencies: undici-types: 6.21.0 - "@types/react-dom@19.2.3(@types/react@19.2.14)": + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 - "@types/react@19.2.14": + '@types/react@19.2.14': dependencies: csstype: 3.2.3 - "@types/resolve@1.20.6": {} + '@types/resolve@1.20.6': {} - "@types/uuid@9.0.8": {} + '@types/uuid@9.0.8': {} - "@types/webpack@5.28.5": + '@types/webpack@5.28.5': dependencies: - "@types/node": 22.19.15 + '@types/node': 22.19.15 tapable: 2.3.2 webpack: 5.105.4 transitivePeerDependencies: - - "@swc/core" + - '@swc/core' - esbuild - uglify-js - webpack-cli - "@types/xlsx@0.0.36": + '@types/xlsx@0.0.36': dependencies: xlsx: 0.18.5 - "@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)": + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/type-utils": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 eslint: 9.39.4(jiti@1.21.7) ignore: 7.0.5 natural-compare: 1.4.0 @@ -12943,14 +9507,14 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)": + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)': dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/type-utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.57.2 eslint: 9.39.4(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -12959,14 +9523,14 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)": + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/type-utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 eslint: 9.39.4(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -12975,78 +9539,78 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)": + '@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 eslint: 9.39.4(jiti@1.21.7) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)": + '@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)': dependencies: - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.6.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) typescript: 5.6.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)": + '@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/project-service@8.57.2(typescript@5.6.3)": + '@typescript-eslint/project-service@8.57.2(typescript@5.6.3)': dependencies: - "@typescript-eslint/tsconfig-utils": 8.57.2(typescript@5.6.3) - "@typescript-eslint/types": 8.57.2 + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.6.3) + '@typescript-eslint/types': 8.57.2 debug: 4.4.3 typescript: 5.6.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/project-service@8.57.2(typescript@5.9.3)": + '@typescript-eslint/project-service@8.57.2(typescript@5.9.3)': dependencies: - "@typescript-eslint/tsconfig-utils": 8.57.2(typescript@5.9.3) - "@typescript-eslint/types": 8.57.2 + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/scope-manager@8.57.2": + '@typescript-eslint/scope-manager@8.57.2': dependencies: - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 - "@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.6.3)": + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.6.3)': dependencies: typescript: 5.6.3 - "@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.9.3)": + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.9.3)': dependencies: typescript: 5.9.3 - "@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)": + '@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.4(jiti@1.21.7) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -13054,11 +9618,11 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)": + '@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)': dependencies: - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.6.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.6.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@5.6.3) @@ -13066,11 +9630,11 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)": + '@typescript-eslint/type-utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -13078,14 +9642,14 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/types@8.57.2": {} + '@typescript-eslint/types@8.57.2': {} - "@typescript-eslint/typescript-estree@8.57.2(typescript@5.6.3)": + '@typescript-eslint/typescript-estree@8.57.2(typescript@5.6.3)': dependencies: - "@typescript-eslint/project-service": 8.57.2(typescript@5.6.3) - "@typescript-eslint/tsconfig-utils": 8.57.2(typescript@5.6.3) - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/project-service': 8.57.2(typescript@5.6.3) + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.6.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.4 @@ -13095,12 +9659,12 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3)": + '@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3)': dependencies: - "@typescript-eslint/project-service": 8.57.2(typescript@5.9.3) - "@typescript-eslint/tsconfig-utils": 8.57.2(typescript@5.9.3) - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/visitor-keys": 8.57.2 + '@typescript-eslint/project-service': 8.57.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.4 @@ -13110,260 +9674,260 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)": + '@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@1.21.7)) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) eslint: 9.39.4(jiti@1.21.7) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)": + '@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3)': dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@2.6.1)) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.6.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.6.3) eslint: 9.39.4(jiti@2.6.1) typescript: 5.6.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)": + '@typescript-eslint/utils@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@2.6.1)) - "@typescript-eslint/scope-manager": 8.57.2 - "@typescript-eslint/types": 8.57.2 - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/visitor-keys@8.57.2": + '@typescript-eslint/visitor-keys@8.57.2': dependencies: - "@typescript-eslint/types": 8.57.2 + '@typescript-eslint/types': 8.57.2 eslint-visitor-keys: 5.0.1 - "@unrs/resolver-binding-android-arm-eabi@1.11.1": + '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true - "@unrs/resolver-binding-android-arm64@1.11.1": + '@unrs/resolver-binding-android-arm64@1.11.1': optional: true - "@unrs/resolver-binding-darwin-arm64@1.11.1": + '@unrs/resolver-binding-darwin-arm64@1.11.1': optional: true - "@unrs/resolver-binding-darwin-x64@1.11.1": + '@unrs/resolver-binding-darwin-x64@1.11.1': optional: true - "@unrs/resolver-binding-freebsd-x64@1.11.1": + '@unrs/resolver-binding-freebsd-x64@1.11.1': optional: true - "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': optional: true - "@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': optional: true - "@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-arm64-musl@1.11.1": + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': optional: true - "@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-riscv64-musl@1.11.1": + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': optional: true - "@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-x64-gnu@1.11.1": + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': optional: true - "@unrs/resolver-binding-linux-x64-musl@1.11.1": + '@unrs/resolver-binding-linux-x64-musl@1.11.1': optional: true - "@unrs/resolver-binding-wasm32-wasi@1.11.1": + '@unrs/resolver-binding-wasm32-wasi@1.11.1': dependencies: - "@napi-rs/wasm-runtime": 0.2.12 + '@napi-rs/wasm-runtime': 0.2.12 optional: true - "@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': optional: true - "@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': optional: true - "@unrs/resolver-binding-win32-x64-msvc@1.11.1": + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - "@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))": + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: - "@babel/core": 7.29.0 - "@babel/plugin-transform-react-jsx-self": 7.27.1(@babel/core@7.29.0) - "@babel/plugin-transform-react-jsx-source": 7.27.1(@babel/core@7.29.0) - "@rolldown/pluginutils": 1.0.0-beta.27 - "@types/babel__core": 7.20.5 + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 react-refresh: 0.17.0 vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - supports-color - "@vitest/expect@2.0.5": + '@vitest/expect@2.0.5': dependencies: - "@vitest/spy": 2.0.5 - "@vitest/utils": 2.0.5 + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 chai: 5.3.3 tinyrainbow: 1.2.0 - "@vitest/pretty-format@2.0.5": + '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 - "@vitest/pretty-format@2.1.9": + '@vitest/pretty-format@2.1.9': dependencies: tinyrainbow: 1.2.0 - "@vitest/spy@2.0.5": + '@vitest/spy@2.0.5': dependencies: tinyspy: 3.0.2 - "@vitest/utils@2.0.5": + '@vitest/utils@2.0.5': dependencies: - "@vitest/pretty-format": 2.0.5 + '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 loupe: 3.2.1 tinyrainbow: 1.2.0 - "@vitest/utils@2.1.9": + '@vitest/utils@2.1.9': dependencies: - "@vitest/pretty-format": 2.1.9 + '@vitest/pretty-format': 2.1.9 loupe: 3.2.1 tinyrainbow: 1.2.0 - "@vue/compiler-core@3.5.30": + '@vue/compiler-core@3.5.30': dependencies: - "@babel/parser": 7.29.2 - "@vue/shared": 3.5.30 + '@babel/parser': 7.29.2 + '@vue/shared': 3.5.30 entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - "@vue/compiler-dom@3.5.30": + '@vue/compiler-dom@3.5.30': dependencies: - "@vue/compiler-core": 3.5.30 - "@vue/shared": 3.5.30 + '@vue/compiler-core': 3.5.30 + '@vue/shared': 3.5.30 - "@vue/compiler-sfc@3.5.30": + '@vue/compiler-sfc@3.5.30': dependencies: - "@babel/parser": 7.29.2 - "@vue/compiler-core": 3.5.30 - "@vue/compiler-dom": 3.5.30 - "@vue/compiler-ssr": 3.5.30 - "@vue/shared": 3.5.30 + '@babel/parser': 7.29.2 + '@vue/compiler-core': 3.5.30 + '@vue/compiler-dom': 3.5.30 + '@vue/compiler-ssr': 3.5.30 + '@vue/shared': 3.5.30 estree-walker: 2.0.2 magic-string: 0.30.21 postcss: 8.5.8 source-map-js: 1.2.1 - "@vue/compiler-ssr@3.5.30": + '@vue/compiler-ssr@3.5.30': dependencies: - "@vue/compiler-dom": 3.5.30 - "@vue/shared": 3.5.30 + '@vue/compiler-dom': 3.5.30 + '@vue/shared': 3.5.30 - "@vue/shared@3.5.30": {} + '@vue/shared@3.5.30': {} - "@webassemblyjs/ast@1.14.1": + '@webassemblyjs/ast@1.14.1': dependencies: - "@webassemblyjs/helper-numbers": 1.13.2 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - "@webassemblyjs/floating-point-hex-parser@1.13.2": {} + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - "@webassemblyjs/helper-api-error@1.13.2": {} + '@webassemblyjs/helper-api-error@1.13.2': {} - "@webassemblyjs/helper-buffer@1.14.1": {} + '@webassemblyjs/helper-buffer@1.14.1': {} - "@webassemblyjs/helper-numbers@1.13.2": + '@webassemblyjs/helper-numbers@1.13.2': dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.13.2 - "@webassemblyjs/helper-api-error": 1.13.2 - "@xtuc/long": 4.2.2 + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 - "@webassemblyjs/helper-wasm-bytecode@1.13.2": {} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - "@webassemblyjs/helper-wasm-section@1.14.1": + '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-buffer": 1.14.1 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/wasm-gen": 1.14.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 - "@webassemblyjs/ieee754@1.13.2": + '@webassemblyjs/ieee754@1.13.2': dependencies: - "@xtuc/ieee754": 1.2.0 + '@xtuc/ieee754': 1.2.0 - "@webassemblyjs/leb128@1.13.2": + '@webassemblyjs/leb128@1.13.2': dependencies: - "@xtuc/long": 4.2.2 + '@xtuc/long': 4.2.2 - "@webassemblyjs/utf8@1.13.2": {} + '@webassemblyjs/utf8@1.13.2': {} - "@webassemblyjs/wasm-edit@1.14.1": + '@webassemblyjs/wasm-edit@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-buffer": 1.14.1 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/helper-wasm-section": 1.14.1 - "@webassemblyjs/wasm-gen": 1.14.1 - "@webassemblyjs/wasm-opt": 1.14.1 - "@webassemblyjs/wasm-parser": 1.14.1 - "@webassemblyjs/wast-printer": 1.14.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 - "@webassemblyjs/wasm-gen@1.14.1": + '@webassemblyjs/wasm-gen@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/ieee754": 1.13.2 - "@webassemblyjs/leb128": 1.13.2 - "@webassemblyjs/utf8": 1.13.2 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - "@webassemblyjs/wasm-opt@1.14.1": + '@webassemblyjs/wasm-opt@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-buffer": 1.14.1 - "@webassemblyjs/wasm-gen": 1.14.1 - "@webassemblyjs/wasm-parser": 1.14.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 - "@webassemblyjs/wasm-parser@1.14.1": + '@webassemblyjs/wasm-parser@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-api-error": 1.13.2 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/ieee754": 1.13.2 - "@webassemblyjs/leb128": 1.13.2 - "@webassemblyjs/utf8": 1.13.2 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - "@webassemblyjs/wast-printer@1.14.1": + '@webassemblyjs/wast-printer@1.14.1': dependencies: - "@webassemblyjs/ast": 1.14.1 - "@xtuc/long": 4.2.2 + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 - "@xlsx/xlsx-populate@0.0.8": {} + '@xlsx/xlsx-populate@0.0.8': {} - "@xtuc/ieee754@1.2.0": {} + '@xtuc/ieee754@1.2.0': {} - "@xtuc/long@4.2.2": {} + '@xtuc/long@4.2.2': {} acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: @@ -13658,11 +10222,11 @@ snapshots: chart.js@4.5.1: dependencies: - "@kurkle/color": 0.3.4 + '@kurkle/color': 0.3.4 chartjs-plugin-zoom@2.2.0(chart.js@4.5.1): dependencies: - "@types/hammerjs": 2.0.46 + '@types/hammerjs': 2.0.46 chart.js: 4.5.1 hammerjs: 2.0.8 @@ -13927,7 +10491,7 @@ snapshots: detective-typescript@14.0.0(typescript@5.9.3): dependencies: - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) ast-module-types: 6.0.1 node-source-walk: 7.0.1 typescript: 5.9.3 @@ -13936,8 +10500,8 @@ snapshots: detective-vue2@2.2.0(typescript@5.9.3): dependencies: - "@dependents/detective-less": 5.0.1 - "@vue/compiler-sfc": 3.5.30 + '@dependents/detective-less': 5.0.1 + '@vue/compiler-sfc': 3.5.30 detective-es6: 5.0.1 detective-sass: 6.0.1 detective-scss: 5.0.1 @@ -13955,8 +10519,8 @@ snapshots: dnd-core@16.0.1: dependencies: - "@react-dnd/asap": 5.0.2 - "@react-dnd/invariant": 4.0.2 + '@react-dnd/asap': 5.0.2 + '@react-dnd/invariant': 4.0.2 redux: 4.2.1 dnd-multi-backend@8.1.2(dnd-core@16.0.1): @@ -13977,7 +10541,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 csstype: 3.2.3 dunder-proto@1.0.1: @@ -14146,86 +10710,86 @@ snapshots: esbuild@0.21.5: optionalDependencies: - "@esbuild/aix-ppc64": 0.21.5 - "@esbuild/android-arm": 0.21.5 - "@esbuild/android-arm64": 0.21.5 - "@esbuild/android-x64": 0.21.5 - "@esbuild/darwin-arm64": 0.21.5 - "@esbuild/darwin-x64": 0.21.5 - "@esbuild/freebsd-arm64": 0.21.5 - "@esbuild/freebsd-x64": 0.21.5 - "@esbuild/linux-arm": 0.21.5 - "@esbuild/linux-arm64": 0.21.5 - "@esbuild/linux-ia32": 0.21.5 - "@esbuild/linux-loong64": 0.21.5 - "@esbuild/linux-mips64el": 0.21.5 - "@esbuild/linux-ppc64": 0.21.5 - "@esbuild/linux-riscv64": 0.21.5 - "@esbuild/linux-s390x": 0.21.5 - "@esbuild/linux-x64": 0.21.5 - "@esbuild/netbsd-x64": 0.21.5 - "@esbuild/openbsd-x64": 0.21.5 - "@esbuild/sunos-x64": 0.21.5 - "@esbuild/win32-arm64": 0.21.5 - "@esbuild/win32-ia32": 0.21.5 - "@esbuild/win32-x64": 0.21.5 + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 esbuild@0.24.2: optionalDependencies: - "@esbuild/aix-ppc64": 0.24.2 - "@esbuild/android-arm": 0.24.2 - "@esbuild/android-arm64": 0.24.2 - "@esbuild/android-x64": 0.24.2 - "@esbuild/darwin-arm64": 0.24.2 - "@esbuild/darwin-x64": 0.24.2 - "@esbuild/freebsd-arm64": 0.24.2 - "@esbuild/freebsd-x64": 0.24.2 - "@esbuild/linux-arm": 0.24.2 - "@esbuild/linux-arm64": 0.24.2 - "@esbuild/linux-ia32": 0.24.2 - "@esbuild/linux-loong64": 0.24.2 - "@esbuild/linux-mips64el": 0.24.2 - "@esbuild/linux-ppc64": 0.24.2 - "@esbuild/linux-riscv64": 0.24.2 - "@esbuild/linux-s390x": 0.24.2 - "@esbuild/linux-x64": 0.24.2 - "@esbuild/netbsd-arm64": 0.24.2 - "@esbuild/netbsd-x64": 0.24.2 - "@esbuild/openbsd-arm64": 0.24.2 - "@esbuild/openbsd-x64": 0.24.2 - "@esbuild/sunos-x64": 0.24.2 - "@esbuild/win32-arm64": 0.24.2 - "@esbuild/win32-ia32": 0.24.2 - "@esbuild/win32-x64": 0.24.2 + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 esbuild@0.25.12: optionalDependencies: - "@esbuild/aix-ppc64": 0.25.12 - "@esbuild/android-arm": 0.25.12 - "@esbuild/android-arm64": 0.25.12 - "@esbuild/android-x64": 0.25.12 - "@esbuild/darwin-arm64": 0.25.12 - "@esbuild/darwin-x64": 0.25.12 - "@esbuild/freebsd-arm64": 0.25.12 - "@esbuild/freebsd-x64": 0.25.12 - "@esbuild/linux-arm": 0.25.12 - "@esbuild/linux-arm64": 0.25.12 - "@esbuild/linux-ia32": 0.25.12 - "@esbuild/linux-loong64": 0.25.12 - "@esbuild/linux-mips64el": 0.25.12 - "@esbuild/linux-ppc64": 0.25.12 - "@esbuild/linux-riscv64": 0.25.12 - "@esbuild/linux-s390x": 0.25.12 - "@esbuild/linux-x64": 0.25.12 - "@esbuild/netbsd-arm64": 0.25.12 - "@esbuild/netbsd-x64": 0.25.12 - "@esbuild/openbsd-arm64": 0.25.12 - "@esbuild/openbsd-x64": 0.25.12 - "@esbuild/openharmony-arm64": 0.25.12 - "@esbuild/sunos-x64": 0.25.12 - "@esbuild/win32-arm64": 0.25.12 - "@esbuild/win32-ia32": 0.25.12 - "@esbuild/win32-x64": 0.25.12 + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 escalade@3.2.0: {} @@ -14241,14 +10805,14 @@ snapshots: eslint-config-next@15.3.8(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3): dependencies: - "@next/eslint-plugin-next": 15.3.8 - "@rushstack/eslint-patch": 1.16.1 - "@typescript-eslint/eslint-plugin": 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@next/eslint-plugin-next': 15.3.8 + '@rushstack/eslint-patch': 1.16.1 + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) eslint: 9.39.4(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@1.21.7)) @@ -14261,10 +10825,30 @@ snapshots: eslint-config-next@15.3.8(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): dependencies: - "@next/eslint-plugin-next": 15.3.8 - "@rushstack/eslint-patch": 1.16.1 - "@typescript-eslint/eslint-plugin": 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@next/eslint-plugin-next': 15.3.8 + '@rushstack/eslint-patch': 1.16.1 + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@2.6.1)) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-config-next@15.4.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@next/eslint-plugin-next': 15.4.0 + '@rushstack/eslint-patch': 1.16.1 + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.4(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) @@ -14289,7 +10873,7 @@ snapshots: eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)): dependencies: - "@nolyfill/is-core-module": 1.0.39 + '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 eslint: 9.39.4(jiti@1.21.7) get-tsconfig: 4.13.7 @@ -14298,13 +10882,13 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) transitivePeerDependencies: - supports-color eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)): dependencies: - "@nolyfill/is-core-module": 1.0.39 + '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 eslint: 9.39.4(jiti@2.6.1) get-tsconfig: 4.13.7 @@ -14321,7 +10905,7 @@ snapshots: dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) eslint: 9.39.4(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) @@ -14332,16 +10916,16 @@ snapshots: dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.4(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)): dependencies: - "@rtsao/scc": 1.1.0 + '@rtsao/scc': 1.1.0 array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 @@ -14362,7 +10946,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14370,7 +10954,7 @@ snapshots: eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)): dependencies: - "@rtsao/scc": 1.1.0 + '@rtsao/scc': 1.1.0 array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 @@ -14391,7 +10975,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14497,8 +11081,8 @@ snapshots: eslint-plugin-storybook@0.11.6(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3): dependencies: - "@storybook/csf": 0.1.13 - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@storybook/csf': 0.1.13 + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) eslint: 9.39.4(jiti@2.6.1) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -14523,18 +11107,18 @@ snapshots: eslint@9.39.4(jiti@1.21.7): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@1.21.7)) - "@eslint-community/regexpp": 4.12.2 - "@eslint/config-array": 0.21.2 - "@eslint/config-helpers": 0.4.2 - "@eslint/core": 0.17.0 - "@eslint/eslintrc": 3.3.5 - "@eslint/js": 9.39.4 - "@eslint/plugin-kit": 0.4.1 - "@humanfs/node": 0.16.7 - "@humanwhocodes/module-importer": 1.0.1 - "@humanwhocodes/retry": 0.4.3 - "@types/estree": 1.0.8 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -14564,18 +11148,18 @@ snapshots: eslint@9.39.4(jiti@2.6.1): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4(jiti@2.6.1)) - "@eslint-community/regexpp": 4.12.2 - "@eslint/config-array": 0.21.2 - "@eslint/config-helpers": 0.4.2 - "@eslint/core": 0.17.0 - "@eslint/eslintrc": 3.3.5 - "@eslint/js": 9.39.4 - "@eslint/plugin-kit": 0.4.1 - "@humanfs/node": 0.16.7 - "@humanwhocodes/module-importer": 1.0.1 - "@humanwhocodes/retry": 0.4.3 - "@types/estree": 1.0.8 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -14627,7 +11211,7 @@ snapshots: estree-walker@3.0.3: dependencies: - "@types/estree": 1.0.8 + '@types/estree': 1.0.8 esutils@2.0.3: {} @@ -14643,16 +11227,16 @@ snapshots: fast-glob@3.3.1: dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 fast-glob@3.3.3: dependencies: - "@nodelib/fs.stat": 2.0.5 - "@nodelib/fs.walk": 1.2.8 + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 @@ -14756,7 +11340,7 @@ snapshots: geotiff@2.1.3: dependencies: - "@petamoriken/float16": 3.9.3 + '@petamoriken/float16': 3.9.3 lerc: 3.0.0 pako: 2.1.0 parse-headers: 2.0.6 @@ -14834,7 +11418,7 @@ snapshots: globby@14.1.0: dependencies: - "@sindresorhus/merge-streams": 2.3.0 + '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.3 ignore: 7.0.5 path-type: 6.0.0 @@ -14896,7 +11480,7 @@ snapshots: i18next@25.10.9(typescript@5.9.3): dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 optionalDependencies: typescript: 5.9.3 @@ -15091,13 +11675,13 @@ snapshots: jackspeak@3.4.3: dependencies: - "@isaacs/cliui": 8.0.2 + '@isaacs/cliui': 8.0.2 optionalDependencies: - "@pkgjs/parseargs": 0.11.0 + '@pkgjs/parseargs': 0.11.0 jest-worker@27.5.1: dependencies: - "@types/node": 22.19.15 + '@types/node': 22.19.15 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -15331,11 +11915,11 @@ snapshots: magic-string@0.27.0: dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.5 magic-string@0.30.21: dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.5 map-or-similar@1.5.0: {} @@ -15425,9 +12009,9 @@ snapshots: next@15.3.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - "@next/env": 15.3.8 - "@swc/counter": 0.1.3 - "@swc/helpers": 0.5.15 + '@next/env': 15.3.8 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 busboy: 1.6.0 caniuse-lite: 1.0.30001781 postcss: 8.4.31 @@ -15435,17 +12019,17 @@ snapshots: react-dom: 19.2.4(react@19.2.4) styled-jsx: 5.1.6(react@19.2.4) optionalDependencies: - "@next/swc-darwin-arm64": 15.3.5 - "@next/swc-darwin-x64": 15.3.5 - "@next/swc-linux-arm64-gnu": 15.3.5 - "@next/swc-linux-arm64-musl": 15.3.5 - "@next/swc-linux-x64-gnu": 15.3.5 - "@next/swc-linux-x64-musl": 15.3.5 - "@next/swc-win32-arm64-msvc": 15.3.5 - "@next/swc-win32-x64-msvc": 15.3.5 + '@next/swc-darwin-arm64': 15.3.5 + '@next/swc-darwin-x64': 15.3.5 + '@next/swc-linux-arm64-gnu': 15.3.5 + '@next/swc-linux-arm64-musl': 15.3.5 + '@next/swc-linux-x64-gnu': 15.3.5 + '@next/swc-linux-x64-musl': 15.3.5 + '@next/swc-win32-arm64-msvc': 15.3.5 + '@next/swc-win32-x64-msvc': 15.3.5 sharp: 0.34.5 transitivePeerDependencies: - - "@babel/core" + - '@babel/core' - babel-plugin-macros node-exports-info@1.6.0: @@ -15459,7 +12043,7 @@ snapshots: node-source-walk@7.0.1: dependencies: - "@babel/parser": 7.29.2 + '@babel/parser': 7.29.2 normalize-path@3.0.0: {} @@ -15513,7 +12097,7 @@ snapshots: ol-mapbox-style@10.7.0: dependencies: - "@mapbox/mapbox-gl-style-spec": 13.28.0 + '@mapbox/mapbox-gl-style-spec': 13.28.0 mapbox-to-css-font: 2.4.5 ol: 7.5.2 @@ -15582,7 +12166,7 @@ snapshots: parse-json@5.2.0: dependencies: - "@babel/code-frame": 7.29.0 + '@babel/code-frame': 7.29.0 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -15632,7 +12216,7 @@ snapshots: polished@4.3.1: dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 possible-typed-array-names@1.1.0: {} @@ -15699,7 +12283,7 @@ snapshots: precinct@12.2.0: dependencies: - "@dependents/detective-less": 5.0.1 + '@dependents/detective-less': 5.0.1 commander: 12.1.0 detective-amd: 6.0.1 detective-cjs: 6.1.0 @@ -15794,8 +12378,8 @@ snapshots: react-day-picker@9.14.0(react@19.2.4): dependencies: - "@date-fns/tz": 1.4.1 - "@tabby_ai/hijri-converter": 1.0.5 + '@date-fns/tz': 1.4.1 + '@tabby_ai/hijri-converter': 1.0.5 date-fns: 4.1.0 date-fns-jalali: 4.1.0-0 react: 19.2.4 @@ -15806,20 +12390,20 @@ snapshots: react-dnd-touch-backend@16.0.1: dependencies: - "@react-dnd/invariant": 4.0.2 + '@react-dnd/invariant': 4.0.2 dnd-core: 16.0.1 react-dnd@16.0.1(@types/node@22.19.15)(@types/react@19.2.14)(react@19.2.4): dependencies: - "@react-dnd/invariant": 4.0.2 - "@react-dnd/shallowequal": 4.0.2 + '@react-dnd/invariant': 4.0.2 + '@react-dnd/shallowequal': 4.0.2 dnd-core: 16.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 react: 19.2.4 optionalDependencies: - "@types/node": 22.19.15 - "@types/react": 19.2.14 + '@types/node': 22.19.15 + '@types/react': 19.2.14 react-docgen-typescript@2.4.0(typescript@5.6.3): dependencies: @@ -15827,13 +12411,13 @@ snapshots: react-docgen@7.1.1: dependencies: - "@babel/core": 7.29.0 - "@babel/traverse": 7.29.0 - "@babel/types": 7.29.0 - "@types/babel__core": 7.20.5 - "@types/babel__traverse": 7.28.0 - "@types/doctrine": 0.0.9 - "@types/resolve": 1.20.6 + '@babel/core': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + '@types/doctrine': 0.0.9 + '@types/resolve': 1.20.6 doctrine: 3.0.0 resolve: 1.22.11 strip-indent: 4.1.1 @@ -15872,7 +12456,7 @@ snapshots: react-i18next@15.7.4(i18next@25.10.9(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 html-parse-stringify: 3.0.1 i18next: 25.10.9(typescript@5.9.3) react: 19.2.4 @@ -15900,7 +12484,7 @@ snapshots: react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): dependencies: @@ -15911,7 +12495,7 @@ snapshots: use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 react-smooth@4.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: @@ -15927,11 +12511,11 @@ snapshots: react: 19.2.4 tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 react-transition-group@4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -16006,7 +12590,7 @@ snapshots: redux@4.2.1: dependencies: - "@babel/runtime": 7.29.2 + '@babel/runtime': 7.29.2 reflect.getprototypeof@1.0.10: dependencies: @@ -16076,33 +12660,33 @@ snapshots: rollup@4.60.0: dependencies: - "@types/estree": 1.0.8 + '@types/estree': 1.0.8 optionalDependencies: - "@rollup/rollup-android-arm-eabi": 4.60.0 - "@rollup/rollup-android-arm64": 4.60.0 - "@rollup/rollup-darwin-arm64": 4.60.0 - "@rollup/rollup-darwin-x64": 4.60.0 - "@rollup/rollup-freebsd-arm64": 4.60.0 - "@rollup/rollup-freebsd-x64": 4.60.0 - "@rollup/rollup-linux-arm-gnueabihf": 4.60.0 - "@rollup/rollup-linux-arm-musleabihf": 4.60.0 - "@rollup/rollup-linux-arm64-gnu": 4.60.0 - "@rollup/rollup-linux-arm64-musl": 4.60.0 - "@rollup/rollup-linux-loong64-gnu": 4.60.0 - "@rollup/rollup-linux-loong64-musl": 4.60.0 - "@rollup/rollup-linux-ppc64-gnu": 4.60.0 - "@rollup/rollup-linux-ppc64-musl": 4.60.0 - "@rollup/rollup-linux-riscv64-gnu": 4.60.0 - "@rollup/rollup-linux-riscv64-musl": 4.60.0 - "@rollup/rollup-linux-s390x-gnu": 4.60.0 - "@rollup/rollup-linux-x64-gnu": 4.60.0 - "@rollup/rollup-linux-x64-musl": 4.60.0 - "@rollup/rollup-openbsd-x64": 4.60.0 - "@rollup/rollup-openharmony-arm64": 4.60.0 - "@rollup/rollup-win32-arm64-msvc": 4.60.0 - "@rollup/rollup-win32-ia32-msvc": 4.60.0 - "@rollup/rollup-win32-x64-gnu": 4.60.0 - "@rollup/rollup-win32-x64-msvc": 4.60.0 + '@rollup/rollup-android-arm-eabi': 4.60.0 + '@rollup/rollup-android-arm64': 4.60.0 + '@rollup/rollup-darwin-arm64': 4.60.0 + '@rollup/rollup-darwin-x64': 4.60.0 + '@rollup/rollup-freebsd-arm64': 4.60.0 + '@rollup/rollup-freebsd-x64': 4.60.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.0 + '@rollup/rollup-linux-arm-musleabihf': 4.60.0 + '@rollup/rollup-linux-arm64-gnu': 4.60.0 + '@rollup/rollup-linux-arm64-musl': 4.60.0 + '@rollup/rollup-linux-loong64-gnu': 4.60.0 + '@rollup/rollup-linux-loong64-musl': 4.60.0 + '@rollup/rollup-linux-ppc64-gnu': 4.60.0 + '@rollup/rollup-linux-ppc64-musl': 4.60.0 + '@rollup/rollup-linux-riscv64-gnu': 4.60.0 + '@rollup/rollup-linux-riscv64-musl': 4.60.0 + '@rollup/rollup-linux-s390x-gnu': 4.60.0 + '@rollup/rollup-linux-x64-gnu': 4.60.0 + '@rollup/rollup-linux-x64-musl': 4.60.0 + '@rollup/rollup-openbsd-x64': 4.60.0 + '@rollup/rollup-openharmony-arm64': 4.60.0 + '@rollup/rollup-win32-arm64-msvc': 4.60.0 + '@rollup/rollup-win32-ia32-msvc': 4.60.0 + '@rollup/rollup-win32-x64-gnu': 4.60.0 + '@rollup/rollup-win32-x64-msvc': 4.60.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -16138,7 +12722,7 @@ snapshots: schema-utils@4.3.3: dependencies: - "@types/json-schema": 7.0.15 + '@types/json-schema': 7.0.15 ajv: 8.18.0 ajv-formats: 2.1.1(ajv@8.18.0) ajv-keywords: 5.1.0(ajv@8.18.0) @@ -16177,34 +12761,34 @@ snapshots: sharp@0.34.5: dependencies: - "@img/colour": 1.1.0 + '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.7.4 optionalDependencies: - "@img/sharp-darwin-arm64": 0.34.5 - "@img/sharp-darwin-x64": 0.34.5 - "@img/sharp-libvips-darwin-arm64": 1.2.4 - "@img/sharp-libvips-darwin-x64": 1.2.4 - "@img/sharp-libvips-linux-arm": 1.2.4 - "@img/sharp-libvips-linux-arm64": 1.2.4 - "@img/sharp-libvips-linux-ppc64": 1.2.4 - "@img/sharp-libvips-linux-riscv64": 1.2.4 - "@img/sharp-libvips-linux-s390x": 1.2.4 - "@img/sharp-libvips-linux-x64": 1.2.4 - "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 - "@img/sharp-libvips-linuxmusl-x64": 1.2.4 - "@img/sharp-linux-arm": 0.34.5 - "@img/sharp-linux-arm64": 0.34.5 - "@img/sharp-linux-ppc64": 0.34.5 - "@img/sharp-linux-riscv64": 0.34.5 - "@img/sharp-linux-s390x": 0.34.5 - "@img/sharp-linux-x64": 0.34.5 - "@img/sharp-linuxmusl-arm64": 0.34.5 - "@img/sharp-linuxmusl-x64": 0.34.5 - "@img/sharp-wasm32": 0.34.5 - "@img/sharp-win32-arm64": 0.34.5 - "@img/sharp-win32-ia32": 0.34.5 - "@img/sharp-win32-x64": 0.34.5 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 optional: true shebang-command@2.0.0: @@ -16290,8 +12874,8 @@ snapshots: steiger@0.5.11(typescript@5.9.3): dependencies: - "@clack/prompts": 0.9.1 - "@feature-sliced/steiger-plugin": 0.5.7(typescript@5.9.3) + '@clack/prompts': 0.9.1 + '@feature-sliced/steiger-plugin': 0.5.7(typescript@5.9.3) chokidar: 4.0.3 cosmiconfig: 9.0.1(typescript@5.9.3) effector: 23.4.4 @@ -16318,7 +12902,7 @@ snapshots: storybook@8.6.18(prettier@3.8.1): dependencies: - "@storybook/core": 8.6.18(prettier@3.8.1)(storybook@8.6.18(prettier@3.8.1)) + '@storybook/core': 8.6.18(prettier@3.8.1)(storybook@8.6.18(prettier@3.8.1)) optionalDependencies: prettier: 3.8.1 transitivePeerDependencies: @@ -16432,7 +13016,7 @@ snapshots: sucrase@3.35.1: dependencies: - "@jridgewell/gen-mapping": 0.3.13 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 lines-and-columns: 1.2.4 mz: 2.7.0 @@ -16464,7 +13048,7 @@ snapshots: tailwindcss@3.4.19(yaml@2.8.3): dependencies: - "@alloc/quick-lru": 5.2.0 + '@alloc/quick-lru': 5.2.0 arg: 5.0.2 chokidar: 3.6.0 didyoumean: 1.2.2 @@ -16496,7 +13080,7 @@ snapshots: terser-webpack-plugin@5.4.0(webpack@5.105.4): dependencies: - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.46.1 @@ -16504,7 +13088,7 @@ snapshots: terser@5.46.1: dependencies: - "@jridgewell/source-map": 0.3.11 + '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -16566,7 +13150,7 @@ snapshots: tsconfig-paths@3.15.0: dependencies: - "@types/json5": 0.0.29 + '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 @@ -16711,10 +13295,10 @@ snapshots: typescript-eslint@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3): dependencies: - "@typescript-eslint/eslint-plugin": 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/parser": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) - "@typescript-eslint/typescript-estree": 8.57.2(typescript@5.6.3) - "@typescript-eslint/utils": 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.6.3) + '@typescript-eslint/utils': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.6.3) eslint: 9.39.4(jiti@2.6.1) typescript: 5.6.3 transitivePeerDependencies: @@ -16744,25 +13328,25 @@ snapshots: dependencies: napi-postinstall: 0.3.4 optionalDependencies: - "@unrs/resolver-binding-android-arm-eabi": 1.11.1 - "@unrs/resolver-binding-android-arm64": 1.11.1 - "@unrs/resolver-binding-darwin-arm64": 1.11.1 - "@unrs/resolver-binding-darwin-x64": 1.11.1 - "@unrs/resolver-binding-freebsd-x64": 1.11.1 - "@unrs/resolver-binding-linux-arm-gnueabihf": 1.11.1 - "@unrs/resolver-binding-linux-arm-musleabihf": 1.11.1 - "@unrs/resolver-binding-linux-arm64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-arm64-musl": 1.11.1 - "@unrs/resolver-binding-linux-ppc64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-riscv64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-riscv64-musl": 1.11.1 - "@unrs/resolver-binding-linux-s390x-gnu": 1.11.1 - "@unrs/resolver-binding-linux-x64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-x64-musl": 1.11.1 - "@unrs/resolver-binding-wasm32-wasi": 1.11.1 - "@unrs/resolver-binding-win32-arm64-msvc": 1.11.1 - "@unrs/resolver-binding-win32-ia32-msvc": 1.11.1 - "@unrs/resolver-binding-win32-x64-msvc": 1.11.1 + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: @@ -16784,7 +13368,7 @@ snapshots: react: 19.2.4 tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): dependencies: @@ -16792,7 +13376,7 @@ snapshots: react: 19.2.4 tslib: 2.8.1 optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 use-sync-external-store@1.6.0(react@19.2.4): dependencies: @@ -16820,13 +13404,13 @@ snapshots: victory-vendor@36.9.2: dependencies: - "@types/d3-array": 3.2.2 - "@types/d3-ease": 3.0.2 - "@types/d3-interpolate": 3.0.4 - "@types/d3-scale": 4.0.9 - "@types/d3-shape": 3.1.8 - "@types/d3-time": 3.0.4 - "@types/d3-timer": 3.0.2 + '@types/d3-array': 3.2.2 + '@types/d3-ease': 3.0.2 + '@types/d3-interpolate': 3.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-timer': 3.0.2 d3-array: 3.2.4 d3-ease: 3.0.1 d3-interpolate: 3.0.1 @@ -16852,7 +13436,7 @@ snapshots: postcss: 8.5.8 rollup: 4.60.0 optionalDependencies: - "@types/node": 22.19.15 + '@types/node': 22.19.15 fsevents: 2.3.3 lightningcss: 1.32.0 terser: 5.46.1 @@ -16866,7 +13450,7 @@ snapshots: rollup: 4.60.0 tinyglobby: 0.2.15 optionalDependencies: - "@types/node": 22.19.15 + '@types/node': 22.19.15 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 @@ -16888,12 +13472,12 @@ snapshots: webpack@5.105.4: dependencies: - "@types/eslint-scope": 3.7.7 - "@types/estree": 1.0.8 - "@types/json-schema": 7.0.15 - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/wasm-edit": 1.14.1 - "@webassemblyjs/wasm-parser": 1.14.1 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.16.0 acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 @@ -16914,7 +13498,7 @@ snapshots: watchpack: 2.5.1 webpack-sources: 3.3.4 transitivePeerDependencies: - - "@swc/core" + - '@swc/core' - esbuild - uglify-js @@ -17080,7 +13664,7 @@ snapshots: zustand@5.0.12(@types/react@19.2.14)(immer@10.2.0)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)): optionalDependencies: - "@types/react": 19.2.14 + '@types/react': 19.2.14 immer: 10.2.0 react: 19.2.4 use-sync-external-store: 1.6.0(react@19.2.4) From a24bb159902b40cd912afb17a52e73d4984497d3 Mon Sep 17 00:00:00 2001 From: ljpark Date: Mon, 11 May 2026 16:26:06 +0900 Subject: [PATCH 17/39] =?UTF-8?q?wr:=20=EA=B8=B0=EC=A1=B4=20=EA=B3=B5?= =?UTF-8?q?=EA=B8=89=EC=B2=98=20=EC=9E=88=EB=8A=94=20=EA=B2=BD=EC=9A=B0?= =?UTF-8?q?=EC=9D=98=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/app/store/matDmd/coMatRvw/index.tsx | 3 +- apps/wr/app/store/matDmd/coMatRvw/type.tsx | 2 +- .../ui/form/coMat/conCostForm/conCostForm.tsx | 51 +++++++++++++------ 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/apps/wr/app/store/matDmd/coMatRvw/index.tsx b/apps/wr/app/store/matDmd/coMatRvw/index.tsx index db4b47370..b347a1df8 100644 --- a/apps/wr/app/store/matDmd/coMatRvw/index.tsx +++ b/apps/wr/app/store/matDmd/coMatRvw/index.tsx @@ -66,7 +66,7 @@ type coRvwActions = { sggCd: string ) => void; }; - +// 수요매칭검토현황 목록 const coMatInit = async ( pageNo: number, pageCnt: number, @@ -149,6 +149,7 @@ export const coRvwActionsExport: (set: any) => coRvwActions = (set: any) => { sggCd: string, dmdCoNm: string ) => { + // 수요처 년도별 정보 검색 let url = `/reuseFc/request/infoList/Sub/${pageNo}/${pageCnt}/${startYear}/${endYear}`; if (sggCd.length > 0) { diff --git a/apps/wr/app/store/matDmd/coMatRvw/type.tsx b/apps/wr/app/store/matDmd/coMatRvw/type.tsx index 771fc03c4..d195953cd 100644 --- a/apps/wr/app/store/matDmd/coMatRvw/type.tsx +++ b/apps/wr/app/store/matDmd/coMatRvw/type.tsx @@ -93,7 +93,7 @@ export const DmdCoReqSchema = z.object({ demandCo: DemandCoSchema.nullish(), // 수요처 정보 demandMatching: DemandMatchingSchema.nullish(), // 매칭 정보 demandCst: DemandCstSchema.nullish(), // 공사비 정보 - ruseUtztnFcltNm: z.string().nullish(), // 공급처 선정 + ruseUtztnFcltNm: z.string().nullish(), // 공급처명 splyCndtList: z.array( z.object({ ruseUtztnFcltNm: z.string(), // 공급처명 diff --git a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx index 8dd87dfb4..3e118154b 100644 --- a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx +++ b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx @@ -122,16 +122,34 @@ export default function ConCostForm({ link.click(); }); }; - const usgPrcsProcsWatch = activeForm.watch("demandCst.usgPrcsProcs"); - const dmndQtyWatch = activeForm.watch("dmndQty"); - const totalConstCost = activeForm.watch("totalConstCost"); - const cstrnCst = activeForm.watch("demandCst.cstrnCst") || 0; - const splyList = activeForm.watch("splyCndtList"); - const useUsgCdWatch = activeForm.watch("useUsgCd"); + const usgPrcsProcsWatch = activeForm.watch("demandCst.usgPrcsProcs"); // 용도에 따른 처리공정 + const dmndQtyWatch = activeForm.watch("dmndQty"); // 요구수량(m³/일) + const totalConstCost = activeForm.watch("totalConstCost"); // 처리시설 총사업비(백만원) + const cstrnCst = activeForm.watch("demandCst.cstrnCst") || 0; // 공급관로 표준공사비(백만원) + const prcsFcltCpctCstrnCst = activeForm.watch("demandCst.prcsFcltCpctCstrnCst") || 0; // 처리시설용량에 따른 공사비(백만원) + const fcltSbsdCstrnCst = activeForm.watch("demandCst.fcltSbsdCstrnCst") || 0; // 시설부대경비 + const splyList = activeForm.watch("splyCndtList"); // 공급처 후보지 목록 + const useUsgCdWatch = activeForm.watch("useUsgCd"); // 사용 용도 코드 + const ruseUtztnFcltNmWatch = activeForm.watch("ruseUtztnFcltNm"); // 선정된 공급처 명 const useUsgCdLabel = - code.sewageOutFclttUse?.find((item) => item.val === useUsgCdWatch)?.text ?? + code.sewageOutFclttUse?.find((item) => item.val === useUsgCdWatch)?.text ?? // 사용 용도 명칭(라벨) String(useUsgCdWatch ?? ""); + useEffect(() => { + const calculatedTotalConstCost = + Number(prcsFcltCpctCstrnCst) + Number(fcltSbsdCstrnCst); + + if ((totalConstCost ?? 0) !== calculatedTotalConstCost) { + activeForm.setValue("totalConstCost", calculatedTotalConstCost); + } + }, [ + activeForm, + prcsFcltCpctCstrnCst, + fcltSbsdCstrnCst, + totalConstCost, + selectionVersion, + ]); + // 용도 변경 시 처리공정 자동 매핑 (시뮬레이션 대응) useEffect(() => { if (useUsgCdWatch) { @@ -239,13 +257,13 @@ export default function ConCostForm({ return; } - // const pk = - // splycd && splycd[0]?.ruseUtztnFcltCd - // ? splycd[0]?.ruseUtztnFcltCd - // : "11000SW001R1"; + // 1순위: 팝업에서 새로 선택한 코드 (lastSub) + // 2순위: 기존 DB에서 불러와 폼에 저장된 코드 (demandMatching.pbnstRuseFcltId) + const pk = + lastSub?.ruseUtztnFcltCd ?? + activeForm.getValues("demandMatching.pbnstRuseFcltId") ?? + null; - const pk =lastSub?.ruseUtztnFcltCd??null; // 후보지 - if (type === "mat") { if (value.demandCst) { const data: DedMatUpdateType = { @@ -652,13 +670,14 @@ export default function ConCostForm({
-
)} From 94130bdec289647182af1e4091a1c58cd6a3a916 Mon Sep 17 00:00:00 2001 From: ljpark Date: Mon, 11 May 2026 18:06:11 +0900 Subject: [PATCH 18/39] =?UTF-8?q?wr:=20=EA=B3=B5=EC=82=AC=EB=B9=84=20?= =?UTF-8?q?=EC=82=B0=EC=A0=95=ED=91=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../matMng/coMat/coMatRvw/page.tsx | 8 +++--- apps/wr/app/store/common/searchCode/index.ts | 4 +-- .../wr/app/store/matDmd/coMatRvw/headList.tsx | 23 ++++++++-------- .../ui/form/coMat/conCostForm/conCostForm.tsx | 26 +++++++++++-------- .../ui/modal/coMat/constCostFeeTable.tsx | 18 +++++++++---- 5 files changed, 46 insertions(+), 33 deletions(-) diff --git a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx index d88906641..f4aaef471 100644 --- a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx @@ -210,10 +210,10 @@ export default function CoMatRvw() { */ const constCostSimulation = () => { const url = `/constCostSimulation`; - const width = Math.floor(window.screen.availWidth * 0.6); - const height = 500; - const left = Math.floor((window.screen.availWidth - width) / 2); - const top = 0; + const width = Math.floor(window.screen.availWidth * 0.8); + const height = Math.floor(window.screen.availHeight * 0.8); + const left = Math.floor(window.screenX + (window.outerWidth - width) / 2); + const top = Math.floor(window.screenY + (window.outerHeight - height) / 2); const popupOptions = `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes`; window.open(url, "candidatePopup", popupOptions); }; diff --git a/apps/wr/app/store/common/searchCode/index.ts b/apps/wr/app/store/common/searchCode/index.ts index 31f5bd3fe..5454c1b74 100644 --- a/apps/wr/app/store/common/searchCode/index.ts +++ b/apps/wr/app/store/common/searchCode/index.ts @@ -53,7 +53,7 @@ export type comFcltState = { searchFclts: pubHasuType[]; demandCompList: DemandCompType[]; checkDemand: DemandCompType; - constCostRes:conCostFeeType[], // 표준사업비 + constCostRes:conCostFeeType[], // 표준사업비 (공사비 산정표) rateFeeRes:rateFeeType[], }; @@ -168,7 +168,7 @@ export const comFcltSearchAction: (set: any) => comFcltActions = (set: any) => { console.log(" error ", e); } }, - // 공사금액 조회 : ONSEMIRO_NEW.EM_STD_COST_REUSE 설치관리표준사업비 재이용시설 공사비 + // 공사금액 (공사비 산정표) 조회 : ONSEMIRO_NEW.EM_STD_COST_REUSE 설치관리표준사업비 재이용시설 공사비 getConstCostFee: async (year: string) => { try { const url = `/prcsFclt/CstRuse/${year}`; diff --git a/apps/wr/app/store/matDmd/coMatRvw/headList.tsx b/apps/wr/app/store/matDmd/coMatRvw/headList.tsx index c6ef94875..180e5dc5c 100644 --- a/apps/wr/app/store/matDmd/coMatRvw/headList.tsx +++ b/apps/wr/app/store/matDmd/coMatRvw/headList.tsx @@ -24,17 +24,18 @@ export const coRvwNodeListExport: CommonTableProps[] = [ ]; export const constCostHeadListExport: CommonTableProps[] = [ - { id: "gubun", title: "구분", visible: true, }, - { id: "500", title: "500", visible: true, }, - { id: "1000", title: "1,000", visible: true, }, - { id: "2000", title: "2,000", visible: true, }, - { id: "3000", title: "3,000", visible: true, }, //바꾸기 - { id: "5000", title: "5,000", visible: true, }, //바꾸기 - { id: "10000", title: "10,000", visible: true, }, // - { id: "20000", title: "20,000", visible: true, }, // - { id: "30000", title: "30,000", visible: true, }, // - { id: "50000", title: "50,000", visible: true, }, // - { id: "100000", title: "100,000", visible: true, }, //바꾸기 + { id: "gubun", title: "구분", visible: true, row: 0, rowSpan: 2, colSpan: 1 }, + { id: "A", title: "처리시설용량(m³)", visible: true, row: 0, rowSpan: 1, colSpan: 10 }, + { id: "500", title: "500", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, + { id: "1000", title: "1,000", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, + { id: "2000", title: "2,000", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, + { id: "3000", title: "3,000", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, + { id: "5000", title: "5,000", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, + { id: "10000", title: "10,000", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, + { id: "20000", title: "20,000", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, + { id: "30000", title: "30,000", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, + { id: "50000", title: "50,000", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, + { id: "100000", title: "100,000", visible: true, row: 1, rowSpan: 1, colSpan: 1 }, ]; export const rateFeeHeadListExport: CommonTableProps[] = [ diff --git a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx index 3e118154b..68ef09abf 100644 --- a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx +++ b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx @@ -169,6 +169,10 @@ export default function ConCostForm({ alert("목록에서 수요신청 건을 선택하세요."); return; } + if (!useUsgCdWatch) { + alert("용도 값이 없습니다."); + return; + } if (!dmndQtyWatch) { alert("요구수량(m³/일)을 확인해주세요 계산할수 없습니다. "); return; @@ -426,6 +430,7 @@ export default function ConCostForm({ {isSim ? (
- - + + +
diff --git a/apps/wr/components/ui/modal/coMat/constCostFeeTable.tsx b/apps/wr/components/ui/modal/coMat/constCostFeeTable.tsx index 6be066931..213237e26 100644 --- a/apps/wr/components/ui/modal/coMat/constCostFeeTable.tsx +++ b/apps/wr/components/ui/modal/coMat/constCostFeeTable.tsx @@ -1,3 +1,6 @@ +/** + * 공사비 산정표 + */ "use client"; import { useWrStore } from "@/app/store"; @@ -9,6 +12,7 @@ import { UiTable } from "@common/business_components/ui"; import ListDiv from "@common/business_components/ui/list_div"; import { Label, } from "@common/components/ui"; import { useEffect, useState } from "react"; + export function ConstCostFeeTable() { const { coRvw, constCostRes } = useWrStore((state) => state); @@ -48,7 +52,7 @@ export function ConstCostFeeTable() { }; acc?.push(target); } - target[cur.fctCpc] = cur.stdCost; + target[cur.fctCpc] = Number(cur.stdCost); return acc; }, @@ -65,14 +69,18 @@ export function ConstCostFeeTable() { return ( <> - + {/* */} +

공사비 산정표 보기


-
- - {기준년도} +
+
+ + {기준년도} +
+ 단위: 백만원
Date: Mon, 11 May 2026 22:12:16 +0900 Subject: [PATCH 19/39] =?UTF-8?q?=ED=88=B4=ED=8C=81=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../verification/VerificationTargetDialog.tsx | 57 ++++++++++++++++--- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx b/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx index ce9b1d26e..dddea3314 100644 --- a/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx +++ b/apps/st/src/components/statistics/verification/VerificationTargetDialog.tsx @@ -5,6 +5,7 @@ import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { Search } from "lucide-react"; +import { Tooltip, TooltipContent, TooltipTrigger } from "@common/components"; import { CodeSelect } from "@/entities/code/ui/code-select"; import { verificationTargetManagementApi } from "@/entities/statistics/api/verification-target-management-service"; @@ -320,7 +321,18 @@ export function VerificationTargetDialog({ {tabValue !== "IMR" && ( - 중요도 계수(μ) + + + + + 중요도 계수(μ) + + + + +

통계청(Statistics Canada) 등에서 기업 단위의 주기적 조사 데이터(수익, 매출, 생산량 등)에서 이상치(Outlier)를 탐지할 때, 데이터의 크기(규모)에 따라 이상치 판별 기준을 다르게 적용하기 위해 도입된 가중치 요인

+
+
- 백분위수 기준값(pct) + + + + 백분위수 기준값(pct) + + + + +

데이터가 정규분포를 따르지 않아도, 데이터의 하위/상위 몇 % 위치를 기준으로 이상치 범위를 정할지 결정

+
+
)} @@ -397,7 +419,18 @@ export function VerificationTargetDialog({ {tabValue !== "IMR" && ( - 스케일 조정 계수(A) + + + + + 스케일 조정 계수(A) + + + + +

데이터의 크기가 다른 경우, 특히 규모가 작은 업체가 이상치로 잘못 탐지되는 것을 막기 위해 변환된 비율(Symmetric Ratios)에 규모(size)의 영향을 보정하는 역할

+
+
- - 임계 계수(c) + + + + + 임계 계수(c) + + + + +

데이터의 분포가 중앙값(median)을 중심으로 얼마나 흩어져 있는지를 바탕으로 이상치 범위를 결정

+
+
Date: Tue, 12 May 2026 10:06:17 +0900 Subject: [PATCH 20/39] =?UTF-8?q?=EB=85=B8=ED=9B=84=EA=B4=80=EB=A1=9C=20?= =?UTF-8?q?=EB=B6=84=EC=84=9D=20-=20=EC=84=9C=EC=9A=B8,=20=EB=B6=80?= =?UTF-8?q?=EC=82=B0=20=EC=A0=84=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../map/components/agedPipe/agedPipeUtils.ts | 10 +++++++++- apps/sn/app/store/index.ts | 8 ++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/sn/app/(map-layout)/map/components/agedPipe/agedPipeUtils.ts b/apps/sn/app/(map-layout)/map/components/agedPipe/agedPipeUtils.ts index 62bccc416..588dc2a5a 100644 --- a/apps/sn/app/(map-layout)/map/components/agedPipe/agedPipeUtils.ts +++ b/apps/sn/app/(map-layout)/map/components/agedPipe/agedPipeUtils.ts @@ -11,7 +11,7 @@ export const AGED_PIPE_LAYER_TYPE = "tb_ms_swage_ppl"; export const AGED_PIPE_DEFAULT_ELAPSED_YEARS = 30; export const AGED_PIPE_PAGE_SIZE = 10; export const AGED_PIPE_MIN_ZOOM = 14; -export const AGED_PIPE_INVALID_INSTALL_YMD_PREFIXES = ["19000101", "19990101"]; +export const AGED_PIPE_INVALID_INSTALL_YMD_PREFIXES = ["19000101"]; export type AgedPipeFilters = { elapsedYears: number; @@ -46,6 +46,12 @@ export const AGED_PIPE_DEFAULT_FILTERS: AgedPipeFilters = { sggCd: "0", }; +const normalizeRegionFilterCode = (value: unknown, prefixLength: number) => { + const digits = String(value ?? "").replace(/[^0-9]/g, ""); + if (digits === "" || digits === "0") return "0"; + return digits.length > prefixLength ? digits.slice(0, prefixLength) : digits; +}; + export const AGED_PIPE_LIST_HEADLIST = [ { id: "rowNumber", title: "NO", widthPercent: 6 }, { id: "fcltMngNo", title: "시설관리번호", widthPercent: 18 }, @@ -82,6 +88,8 @@ export const normalizeAgedPipeFilters = (filters: AgedPipeFilters): AgedPipeFilt return { ...filters, + ctpvCd: normalizeRegionFilterCode(filters.ctpvCd, 2), + sggCd: normalizeRegionFilterCode(filters.sggCd, 5), elapsedYears: Number.isFinite(elapsedYears) && elapsedYears >= 1 && elapsedYears <= 100 ? elapsedYears diff --git a/apps/sn/app/store/index.ts b/apps/sn/app/store/index.ts index 91577ae1a..7d761f91a 100644 --- a/apps/sn/app/store/index.ts +++ b/apps/sn/app/store/index.ts @@ -33,8 +33,8 @@ export const fetchCtpv = async (set: (state: any) => void) => { const list = res.features .map((f: any) => ({ - text: f.properties.mctpv_korn_nm, - val: f.properties.mctpv_cd, + text: String(f.properties.mctpv_korn_nm ?? "").trim(), + val: String(f.properties.mctpv_cd ?? "").trim(), })) .sort((a:any, b:any) => { // 커스텀 순서 정의 @@ -83,8 +83,8 @@ export const fetchSgg = async (set: (state: any) => void) => { const list = res.features .map((f: any) => ({ - text: f.properties.sgg_korn_nm, - val: f.properties.sgg_cd, + text: String(f.properties.sgg_korn_nm ?? "").trim(), + val: String(f.properties.sgg_cd ?? "").trim(), })) .sort((a:any, b:any) => a.text.localeCompare(b.text, 'ko')); From c35017d05c26deb35a033edc3feefb7ee9f1bb55 Mon Sep 17 00:00:00 2001 From: ljpark Date: Tue, 12 May 2026 14:19:02 +0900 Subject: [PATCH 21/39] =?UTF-8?q?wr:=20=EC=8B=9C=EC=84=A4=EB=B6=80?= =?UTF-8?q?=EB=8C=80=EA=B2=BD=EB=B9=84=20=EC=9A=94=EC=9C=A8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../matMng/coMat/coMatRvw/page.tsx | 9 +- apps/wr/app/store/common/searchCode/index.ts | 27 ++++- .../ui/form/coMat/conCostForm/conCostForm.tsx | 9 +- .../ui/modal/coMat/constCostFeeTable.tsx | 90 ++++++++++----- .../ui/modal/coMat/rateFeeModal.tsx | 104 ++++++++++++------ .../src/ui/popover_ui/index.tsx | 2 +- 6 files changed, 173 insertions(+), 68 deletions(-) diff --git a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx index f4aaef471..bf784b41a 100644 --- a/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMat/coMatRvw/page.tsx @@ -210,8 +210,8 @@ export default function CoMatRvw() { */ const constCostSimulation = () => { const url = `/constCostSimulation`; - const width = Math.floor(window.screen.availWidth * 0.8); - const height = Math.floor(window.screen.availHeight * 0.8); + const width = Math.floor(window.screen.availWidth * 0.6); + const height = Math.floor(window.screen.availHeight * 0.6); const left = Math.floor(window.screenX + (window.outerWidth - width) / 2); const top = Math.floor(window.screenY + (window.outerHeight - height) / 2); const popupOptions = `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes`; @@ -334,10 +334,9 @@ export default function CoMatRvw() { getSearch(val, Number(fromDate), Number(toDate), con, dmdCoNm); }} > -
+
-

-
+
{/* */}
diff --git a/apps/wr/app/store/common/searchCode/index.ts b/apps/wr/app/store/common/searchCode/index.ts index 5454c1b74..b572307f5 100644 --- a/apps/wr/app/store/common/searchCode/index.ts +++ b/apps/wr/app/store/common/searchCode/index.ts @@ -57,13 +57,15 @@ export type comFcltState = { rateFeeRes:rateFeeType[], }; - type comFcltActions = { +type comFcltActions = { getSwtrmtFcltNm: (searchNm: string) => void; getDemandCompList: (searchNm: string, cnt: number) => void; regDemandCompany: (data: DemandCompType) => Promise; updateDemandCompany: (data: DemandCompType) => Promise; getConstCostFee: (year: string) => void; getRateFee: (year: string) => void; + getConstCostFeeRtn: (year: string) => conCostFeeType[]; + getRateFeeRtn: (year: string) => rateFeeType[]; }; export const comFcltSearchAction: (set: any) => comFcltActions = (set: any) => { @@ -168,6 +170,18 @@ export const comFcltSearchAction: (set: any) => comFcltActions = (set: any) => { console.log(" error ", e); } }, + // 요율정보 조회 : ONSEMIRO_NEW.EM_STD_COST_INC_EXP_RT 설치관리표준사업비 부대경비요율 + // 팝업에서 연도 변경하여 볼 수 있도록 데이터를 return한다. + getRateFeeRtn: async (year: string) => { + try { + const url = `/prcsFclt/CstRt/${year}`; + const rateFeeRes = await getFetch(fetchType.COMMON, url); + + return rateFeeRes; + } catch (e) { + console.log(" error ", e); + } + }, // 공사금액 (공사비 산정표) 조회 : ONSEMIRO_NEW.EM_STD_COST_REUSE 설치관리표준사업비 재이용시설 공사비 getConstCostFee: async (year: string) => { try { @@ -185,6 +199,17 @@ export const comFcltSearchAction: (set: any) => comFcltActions = (set: any) => { console.log('getConstCostFee ', e) } + }, + // 공사금액 (공사비 산정표) 조회 : ONSEMIRO_NEW.EM_STD_COST_REUSE 설치관리표준사업비 재이용시설 공사비 + getConstCostFeeRtn: async (year: string) => { + try { + const url = `/prcsFclt/CstRuse/${year}`; + const constCost = await getFetch(fetchType.COMMON, url); + return constCost; + } catch (e) { + console.log('getConstCostFee ', e) + } + } }; }; diff --git a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx index 68ef09abf..85b2cfaf1 100644 --- a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx +++ b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx @@ -136,8 +136,7 @@ export default function ConCostForm({ String(useUsgCdWatch ?? ""); useEffect(() => { - const calculatedTotalConstCost = - Number(prcsFcltCpctCstrnCst) + Number(fcltSbsdCstrnCst); + const calculatedTotalConstCost = Number(prcsFcltCpctCstrnCst) + Number(fcltSbsdCstrnCst); if ((totalConstCost ?? 0) !== calculatedTotalConstCost) { activeForm.setValue("totalConstCost", calculatedTotalConstCost); @@ -197,7 +196,7 @@ export default function ConCostForm({ const firstProc = getConstFctCode(usgPrcsProcs?.split("+")[0] || "") || ""; // 첫번째 공정 const secondProc = getConstFctCode(usgPrcsProcs?.split("+")[1] || "") || ""; // 두번째 공정 - // 첫번째 처리공정 코드에 해당하는 표준공사비 테이블이서 요구수량을 감싸는 하한/상한 구간을 찾는 부분이다. + // 첫번째 처리공정 코드에 해당하는 표준공사비 테이블에서 요구수량을 감싸는 하한/상한 구간을 찾는 부분이다. const { lower: firstLower, upper: firstUpper } = findBounds( constCostRes, // 표준공사비 firstProc || "", @@ -559,7 +558,7 @@ export default function ConCostForm({ } - bodyClassName={"w-fit max-w-[40vw]"} + bodyClassName={"w-fit max-w-[400] overflow-x-auto"} >
} - bodyClassName={"w-[22vw]"} + bodyClassName={"w-fit max-w-[100] overflow-x-auto"} >
state); + const { coRvw, constCostRes, getConstCostFeeRtn } = useWrStore((state) => state); const [constCostData, setConstCostData] = useState([]); - const 기준년도 = constCostRes?.[0]?.yr ?? ""; + const [selectedYear, setSelectedYear] = useState(String(new Date().getFullYear())); + // 연도 선택을 위한 옵션 생성 (예: 현재 연도부터 10년 전까지) + const yearOptions = Array.from({ length: 10 }, (_, i) => { + const year = new Date().getFullYear() - i; + return { val: String(year), text: String(year) }; + }); - const getFctDescription = (fctCd: string) => { - const fctMap: { [key: string]: string } = { - "001": "총인처리시설", - "002": "염소소독", - "003": "UV소독", - "004": "전처리시설", - "005": "RO", - }; - - return fctMap[fctCd]; - } - useEffect(() => { + const fetchData = async (constCostRes: conCostFeeType[]) => { const tableData = constCostRes?.reduce( (acc: ContCostMap[], cur: conCostFeeType) => { const key = cur.fctCd; @@ -64,21 +58,64 @@ export function ConstCostFeeTable() { gubun: getFctDescription(item.gubun) || item.gubun, }; }); - setConstCostData(formattedTableData); + + return formattedTableData; + }; + + const getFctDescription = (fctCd: string) => { + const fctMap: { [key: string]: string } = { + "001": "총인처리시설", + "002": "염소소독", + "003": "UV소독", + "004": "전처리시설", + "005": "RO", + }; + + return fctMap[fctCd]; + } + + useEffect(() => { + const fetchConstCost = async () => { + const data = await fetchData(constCostRes); + setConstCostData(data); + }; + fetchConstCost(); }, [constCostRes]); + useEffect(() => { + const fetchConstCost = async () => { + if (selectedYear) { + const result = await getConstCostFeeRtn(selectedYear); + if (result && result.length > 0) { + const data = await fetchData(result); + setConstCostData(data); + } else { + alert(selectedYear+'년 데이터가 없습니다.'); + } + } + } + fetchConstCost(); + }, [selectedYear]); + return ( - <> - {/* */} - -

+ +
+

공사비 산정표 보기

-
+
- - {기준년도} + + setSelectedYear(String(val)) + } + />
단위: 백만원
@@ -91,7 +128,10 @@ export function ConstCostFeeTable() { cellClick={undefined} onPageChange={() => { }} /> - - +
+ 시설용량 구간내 공사비는 직선보간법에 의하여 산출 +
+
+
); } diff --git a/apps/wr/components/ui/modal/coMat/rateFeeModal.tsx b/apps/wr/components/ui/modal/coMat/rateFeeModal.tsx index 9118f8127..5439d489c 100644 --- a/apps/wr/components/ui/modal/coMat/rateFeeModal.tsx +++ b/apps/wr/components/ui/modal/coMat/rateFeeModal.tsx @@ -2,15 +2,24 @@ import { useWrStore } from "@/app/store"; import type { rateFeeType } from "@/app/store/common/searchCode/type"; -import { UiTable } from "@common/business_components/ui"; +import { SelectBox, UiTable } from "@common/business_components/ui"; import ListDiv from "@common/business_components/ui/list_div"; import { Label } from "@common/components/ui"; import { useEffect, useState } from "react"; export function RateFeeTableModal() { - const { coRvw, rateFeeRes } = useWrStore((state) => state); - const [reateFeeTable, setRateFeeTable] = useState([]); - const 기준년도 = rateFeeRes?.[0]?.yr ?? ""; + const { coRvw, rateFeeRes, getRateFeeRtn } = useWrStore((state) => state); + const [rateFeeTable, setRateFeeTable] = useState([]); + const [selectedYear, setSelectedYear] = useState(String(new Date().getFullYear())); + + // 연도 선택을 위한 옵션 생성 (예: 현재 연도부터 10년 전까지) + const yearOptions = Array.from({ length: 10 }, (_, i) => { + const year = new Date().getFullYear() - i; + return { val: String(year), text: String(year) }; + }); + + // const 기준년도 = rateFeeRes?.[0]?.yr ?? selectedYear; // 실제 데이터의 기준년도 또는 선택된 연도 + // setSelectedYear(rateFeeRes?.[0]?.yr ?? selectedYear); const gubunLabelMap: Record = { 50: "5천만원까지", @@ -32,6 +41,11 @@ export function RateFeeTableModal() { 500000: "5000억원까지", }; + /** + * rateFeeRes 데이터를 가공하여 테이블에 표시하기 적합한 형태로 변환합니다. + * - 'SS' 코드를 제외하고, stdCost 기준으로 그룹화하여 BD, SE, CE 요율을 컬럼으로 피벗합니다. + * - gubunLabelMap을 사용하여 stdCost에 해당하는 한글 라벨을 추가합니다. + */ const fetchData = async (rateFeeRes: rateFeeType[]) => { const data = await rateFeeRes ?.filter((item: rateFeeType) => { @@ -65,40 +79,68 @@ export function RateFeeTableModal() { useEffect(() => { if (rateFeeRes?.length >= 0) { + setSelectedYear(rateFeeRes?.[0]?.yr ?? selectedYear); fetchData(rateFeeRes).then((data) => { setRateFeeTable(data); }); } }, [rateFeeRes]); - return ( - <> - -
-

- 요율표 보기 -

-
+ // 컴포넌트 마운트 시 또는 선택된 연도가 변경될 때 데이터 조회 + useEffect(() => { + const fetchRateFee = async () => { + if (selectedYear) { + const result = await getRateFeeRtn(selectedYear); + if (result && result.length > 0) { + const data = await fetchData(result); + setRateFeeTable(data); + } else { + alert(selectedYear+'년 데이터가 없습니다.'); + } + } + } + fetchRateFee(); + }, [selectedYear]); -
- - {기준년도} -
-
- {}} - pageSize={0} - total={0} - cellClick={undefined} - /> -
+ return ( + +
+

+ 시설부대경비 요율(%) +

+
+ +
+ + setSelectedYear(String(val)) + } + />
- - +
+ {}} + pageSize={0} + total={0} + cellClick={undefined} + /> +
+
+ 출처 : 하수도분야 보조금 편성 및 실무요령 +
+ 시설부대경비 및 감리비 요율적용시 공사비가 요율표의 중간에 있을 때는 직선보간법에 의하여 산출 +
+
+
); } diff --git a/packages/common/business_components/src/ui/popover_ui/index.tsx b/packages/common/business_components/src/ui/popover_ui/index.tsx index 39094bc24..bc7cb0b76 100644 --- a/packages/common/business_components/src/ui/popover_ui/index.tsx +++ b/packages/common/business_components/src/ui/popover_ui/index.tsx @@ -13,7 +13,7 @@ export default function PopoverUi({ <> {childrenTriger} - + e.preventDefault()}> {childrenBody} From d07c5fab1ac1ff2f9b8e45c92041375ce64d75bd Mon Sep 17 00:00:00 2001 From: bicochan Date: Tue, 12 May 2026 14:31:45 +0900 Subject: [PATCH 22/39] =?UTF-8?q?[as]=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/_template/.env.example | 4 +- apps/_template/middleware.ts | 2 +- apps/_template/src/shared/config/env.ts | 11 +- apps/as/.env.example | 5 - apps/as/README.md | 95 ++--- .../(with-base-layout)/instl-sncn/page.tsx | 1 - apps/as/app/(with-base-layout)/layout.tsx | 20 +- apps/as/app/(with-base-layout)/page.tsx | 1 + apps/as/app/api/proxy/[...url]/route.ts | 94 +++++ apps/as/app/auth/login/page.tsx | 2 + apps/as/app/layout.tsx | 7 +- apps/as/docs/approval-line-management/SPEC.md | 194 +++++------ apps/as/eslint.config.mjs | 45 ++- apps/as/middleware.ts | 3 +- apps/as/package.json | 7 +- apps/as/pages/.gitkeep | 0 apps/as/pages/README.md | 9 + apps/as/public/images/bg_login.jpg | Bin 0 -> 135228 bytes apps/as/src/app/layouts/base-layout.tsx | 72 ++-- apps/as/src/app/providers/index.tsx | 43 +-- apps/as/src/app/styles/components.css | 129 ------- apps/as/src/app/styles/globals.css | 30 +- .../as/src/entities/auth/api/login-service.ts | 92 +++++ apps/as/src/entities/auth/index.ts | 2 + .../as/src/entities/auth/lib/auth-wrapper.tsx | 45 +++ .../as/src/entities/auth/lib/token-manager.ts | 82 +++++ .../entities/auth/model/login-interface.ts | 9 + apps/as/src/entities/instl-sncn/api/index.ts | 23 -- .../instl-sncn/api/instl-sncn-service-impl.ts | 222 ------------ .../as/src/entities/instl-sncn/api/queries.ts | 312 ----------------- apps/as/src/entities/instl-sncn/index.ts | 61 ---- apps/as/src/entities/instl-sncn/lib/format.ts | 47 --- apps/as/src/entities/instl-sncn/lib/index.ts | 18 - .../src/entities/instl-sncn/lib/validation.ts | 73 ---- .../entities/instl-sncn/model/constants.ts | 30 -- .../as/src/entities/instl-sncn/model/index.ts | 22 -- .../instl-sncn/model/instl-sncn-service.ts | 151 -------- .../as/src/entities/instl-sncn/model/types.ts | 158 --------- apps/as/src/entities/menu/index.ts | 2 +- apps/as/src/entities/menu/model/index.ts | 1 - apps/as/src/pages/auth/login/index.ts | 1 + .../as/src/pages/auth/login/ui/login-page.tsx | 120 +++++++ apps/as/src/pages/auth/login/ui/login.css | 325 ++++++++++++++++++ apps/as/src/pages/home/index.ts | 1 + apps/as/src/pages/home/ui/main-page.tsx | 9 + apps/as/src/pages/instl-sncn/index.ts | 1 - .../pages/instl-sncn/model/table-columns.tsx | 80 ----- apps/as/src/pages/instl-sncn/ui/list-page.tsx | 178 ---------- apps/as/src/shared/api/client.ts | 4 +- apps/as/src/shared/api/index.ts | 2 +- apps/as/src/shared/config/api.ts | 9 + apps/as/src/shared/config/env.ts | 13 +- apps/as/src/shared/config/index.ts | 1 + apps/as/src/shared/lib/cookie.ts | 51 +-- apps/as/src/shared/lib/dayjs.ts | 7 +- apps/as/src/shared/lib/index.ts | 5 +- apps/as/src/shared/lib/use-user-store.ts | 16 + apps/as/src/shared/providers/index.ts | 1 + .../src/shared/providers/store-provider.tsx | 22 ++ apps/as/src/shared/store/index.ts | 1 + apps/as/src/shared/store/user-store.ts | 57 +++ apps/as/tailwind.config.ts | 6 +- apps/as/tsconfig.json | 6 +- pnpm-lock.yaml | 61 +--- 64 files changed, 1214 insertions(+), 1887 deletions(-) delete mode 100644 apps/as/.env.example delete mode 100644 apps/as/app/(with-base-layout)/instl-sncn/page.tsx create mode 100644 apps/as/app/(with-base-layout)/page.tsx create mode 100644 apps/as/app/api/proxy/[...url]/route.ts create mode 100644 apps/as/app/auth/login/page.tsx delete mode 100644 apps/as/pages/.gitkeep create mode 100644 apps/as/pages/README.md create mode 100755 apps/as/public/images/bg_login.jpg delete mode 100644 apps/as/src/app/styles/components.css create mode 100644 apps/as/src/entities/auth/api/login-service.ts create mode 100644 apps/as/src/entities/auth/index.ts create mode 100644 apps/as/src/entities/auth/lib/auth-wrapper.tsx create mode 100644 apps/as/src/entities/auth/lib/token-manager.ts create mode 100644 apps/as/src/entities/auth/model/login-interface.ts delete mode 100644 apps/as/src/entities/instl-sncn/api/index.ts delete mode 100644 apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts delete mode 100644 apps/as/src/entities/instl-sncn/api/queries.ts delete mode 100644 apps/as/src/entities/instl-sncn/index.ts delete mode 100644 apps/as/src/entities/instl-sncn/lib/format.ts delete mode 100644 apps/as/src/entities/instl-sncn/lib/index.ts delete mode 100644 apps/as/src/entities/instl-sncn/lib/validation.ts delete mode 100644 apps/as/src/entities/instl-sncn/model/constants.ts delete mode 100644 apps/as/src/entities/instl-sncn/model/index.ts delete mode 100644 apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts delete mode 100644 apps/as/src/entities/instl-sncn/model/types.ts delete mode 100644 apps/as/src/entities/menu/model/index.ts create mode 100644 apps/as/src/pages/auth/login/index.ts create mode 100644 apps/as/src/pages/auth/login/ui/login-page.tsx create mode 100755 apps/as/src/pages/auth/login/ui/login.css create mode 100644 apps/as/src/pages/home/index.ts create mode 100644 apps/as/src/pages/home/ui/main-page.tsx delete mode 100644 apps/as/src/pages/instl-sncn/index.ts delete mode 100644 apps/as/src/pages/instl-sncn/model/table-columns.tsx delete mode 100644 apps/as/src/pages/instl-sncn/ui/list-page.tsx create mode 100644 apps/as/src/shared/config/api.ts create mode 100644 apps/as/src/shared/lib/use-user-store.ts create mode 100644 apps/as/src/shared/providers/index.ts create mode 100644 apps/as/src/shared/providers/store-provider.tsx create mode 100644 apps/as/src/shared/store/index.ts create mode 100644 apps/as/src/shared/store/user-store.ts diff --git a/apps/_template/.env.example b/apps/_template/.env.example index f9794a6f8..318a30511 100644 --- a/apps/_template/.env.example +++ b/apps/_template/.env.example @@ -1,8 +1,8 @@ -# apps/as/shared/config/env.ts 참고 +# src/shared/config/env.ts 참고 NEXT_PUBLIC_PORT= NEXT_PUBLIC_PROXY_HOST= NEXT_PUBLIC_SITE_ID= -NEXT_PUBLIC_SERVER_API_URL= +SERVER_API_URL= # 401 시 브라우저 리다이렉트 대상 NEXT_PUBLIC_AUTH_LOGIN_REDIRECT_URL=/auth/login diff --git a/apps/_template/middleware.ts b/apps/_template/middleware.ts index da09c5840..e6bbba40a 100644 --- a/apps/_template/middleware.ts +++ b/apps/_template/middleware.ts @@ -1,7 +1,7 @@ import { NextRequest, NextResponse } from "next/server"; import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config"; -const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000"; +const serverApiUrl = process.env.SERVER_API_URL ?? "http://localhost:3000"; // CSP 헤더 설정 함수 (img-src만) function addSecurityHeaders(response: NextResponse): NextResponse { diff --git a/apps/_template/src/shared/config/env.ts b/apps/_template/src/shared/config/env.ts index 4f08c722a..a1825f415 100644 --- a/apps/_template/src/shared/config/env.ts +++ b/apps/_template/src/shared/config/env.ts @@ -1,11 +1,8 @@ export const PORT = process.env.NEXT_PUBLIC_PORT || "3000"; -export const PROXY_HOST = - process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; -export const SERVER_API_URL = process.env.NEXT_PUBLIC_SERVER_API_URL; +export const PROXY_HOST = process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; export const SITE_ID = process.env.NEXT_PUBLIC_SITE_ID || "AS"; +export const SERVER_API_URL = process.env.SERVER_API_URL; export const CLAIM_NAME = process.env.NEXT_PUBLIC_CLAIM_NAME || "Authorization"; -export const ACCESS_TOKEN = - process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; -export const REFRESH_TOKEN = - process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; +export const ACCESS_TOKEN = process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; +export const REFRESH_TOKEN = process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; export const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id"; diff --git a/apps/as/.env.example b/apps/as/.env.example deleted file mode 100644 index b2d706024..000000000 --- a/apps/as/.env.example +++ /dev/null @@ -1,5 +0,0 @@ -# apps/as/shared/config/env.ts 참고 -NEXT_PUBLIC_PORT= -NEXT_PUBLIC_PROXY_HOST= -NEXT_PUBLIC_SITE_ID= -NEXT_PUBLIC_SERVER_API_URL= diff --git a/apps/as/README.md b/apps/as/README.md index 79d0b2e2a..c48c1534a 100644 --- a/apps/as/README.md +++ b/apps/as/README.md @@ -1,4 +1,4 @@ -# AS Application +# Template Application Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 @@ -18,12 +18,12 @@ Next.js 애플리케이션 with FSD(Feature Sliced Design) 아키텍처 이 프로젝트는 **Feature-Sliced Design v2.1**과 **FSD 공식 Next.js 가이드**에 맞춰 구성되어 있습니다. Next.js `app/`은 라우트만 담당하고, 실제 레이어는 `src/` 아래에 있습니다. ``` -as/ +_template/ ├── app/ # Next.js App Router (루트) — 라우트·레이아웃 진입점만 │ ├── layout.tsx # 루트 레이아웃 (src/app에서 providers, styles import) │ └── (with-base-layout)/ │ ├── layout.tsx # BaseLayout 래퍼 (src/app/layouts에서 import) -│ └── page.tsx # re-export: export { MainPage as default } from '@/pages/home' +│ └── page.tsx # re-export: export { MainPage as default } from '@/pages/home' │ ├── pages/ # 빈 폴더 + README (Next.js가 src/pages를 Pages Router로 쓰지 않도록) │ └── README.md @@ -31,7 +31,7 @@ as/ └── src/ # FSD 레이어 (실제 코드) ├── app/ # App 레이어 (슬라이스 없음, 세그먼트만) │ ├── providers/ # 전역 Providers (QueryClient 등) - │ ├── styles/ # 글로벌 스타일 (globals.css) + │ ├── styles/ # 글로벌 스타일 (globals.css) │ └── layouts/ # 공통 레이아웃 컴포넌트 (BaseLayoutWrapper) │ ├── pages/ # Pages 레이어 (페이지 슬라이스) @@ -112,43 +112,20 @@ shared/ ↓ 가장 낮은 책임, 의존성 없음 - **특징**: 비즈니스 로직 없음, 슬라이스가 없고 세그먼트로만 구성 - **의존성**: 외부 라이브러리만 사용 가능 (다른 레이어 불가) -## 레이어 간 Import 규칙 - -> **핵심 규칙**: 슬라이스 내의 모듈(파일)은 **오직 하위 레이어**에 있는 다른 슬라이스만 import할 수 있습니다. - -예시: -- `features/auth-login/ui/form.tsx`는 `entities/user`와 `shared/ui`를 import 가능 -- 하지만 다른 `features/post-create`나 상위 레이어인 `widgets`는 import 불가 -- 같은 슬라이스 내부(`features/auth-login/`)의 다른 파일들은 자유롭게 import 가능 - -## Public API 규칙 - -> **슬라이스 외부의 모듈은 슬라이스의 Public API만 참조할 수 있으며, 내부 파일 구조에 직접 접근할 수 없습니다.** - -모든 슬라이스(및 슬라이스가 없는 레이어의 세그먼트)는 반드시 `index.ts`를 통해 Public API를 정의해야 합니다. - -```typescript -// ✅ 올바른 import -import { LoginForm } from 'features/auth-login'; - -// ❌ 잘못된 import (내부 구조 직접 접근) -import { LoginForm } from 'features/auth-login/ui/login-form'; -``` - ## 시작하기 ```bash # 의존성 설치 -npm install +pnpm install # 개발 서버 실행 -npm run dev +pnpm run dev # 프로덕션 빌드 -npm run build +pnpm run build # 프로덕션 서버 실행 -npm start +pnpm start ``` ## 환경 변수 @@ -168,16 +145,16 @@ NEXT_PUBLIC_API_URL=http://localhost:3000/api ```typescript // ✅ 올바른 import (하위 레이어) // features/auth-login/ui/form.tsx -import { User } from 'entities/user'; -import { Button } from 'shared/ui/button'; +import { User } from "entities/user"; +import { Button } from "shared/ui/button"; // ❌ 잘못된 import (같은 레이어) // features/auth-login/ui/form.tsx -import { PostForm } from 'features/post-create'; // 금지! +import { PostForm } from "features/post-create"; // 금지! // ❌ 잘못된 import (상위 레이어) // features/auth-login/ui/form.tsx -import { Header } from 'widgets/header'; // 금지! +import { Header } from "widgets/header"; // 금지! ``` ### 2. Public API 규칙 @@ -186,10 +163,10 @@ import { Header } from 'widgets/header'; // 금지! ```typescript // ✅ 올바른 import (Public API 사용) -import { LoginForm } from 'features/auth-login'; +import { LoginForm } from "features/auth-login"; // ❌ 잘못된 import (내부 구조 직접 접근) -import { LoginForm } from 'features/auth-login/ui/login-form'; +import { LoginForm } from "features/auth-login/ui/login-form"; ``` **Public API 작성 시 주의사항**: @@ -199,44 +176,12 @@ import { LoginForm } from 'features/auth-login/ui/login-form'; ```typescript // ❌ 나쁜 예시 -export * from './ui/Comment'; -export * from './model/comments'; +export * from "./ui/Comment"; +export * from "./model/comments"; // ✅ 좋은 예시 -export { Comment } from './ui/comment'; -export { CommentForm } from './ui/comment-form'; -export { useComments } from './model/use-comments'; -export type { Comment, CommentFormData } from './model/types'; -``` - -### 3. 슬라이스 독립성 - -- **Zero Coupling**: 같은 레이어의 슬라이스들은 서로 독립적이어야 합니다 -- **High Cohesion**: 슬라이스는 주요 목표와 관련된 대부분의 코드를 포함해야 합니다 -- 예외: Entities 레이어에서 필요한 경우 `@x` 표기법으로 cross-import 가능 - -### 4. 세그먼트 명명 규칙 - -세그먼트 이름은 **목적**을 설명해야 하며, **본질**을 설명하면 안 됩니다: - -- ❌ **나쁜 이름**: `components`, `hooks`, `types` (무엇인지만 설명) -- ✅ **좋은 이름**: `ui`, `api`, `model`, `lib` (왜 있는지 설명) - -## 코드 규칙 - -- TypeScript 사용 (strict mode) -- 함수형 컴포넌트 사용 -- Named exports 선호 -- Tailwind CSS 사용 -- ESLint + Prettier 적용 -- Public API는 명시적으로 정의 (와일드카드 export 지양) - -## 아키텍처 린팅 - -코드베이스의 FSD 규칙 준수를 자동으로 검증하려면 [Steiger](https://github.com/feature-sliced/steiger)를 사용하세요. - -```bash -# Steiger 설치 및 실행 -npm install -D @feature-sliced/steiger -npx steiger src +export { Comment } from "./ui/comment"; +export { CommentForm } from "./ui/comment-form"; +export { useComments } from "./model/use-comments"; +export type { Comment, CommentFormData } from "./model/types"; ``` diff --git a/apps/as/app/(with-base-layout)/instl-sncn/page.tsx b/apps/as/app/(with-base-layout)/instl-sncn/page.tsx deleted file mode 100644 index 324982f41..000000000 --- a/apps/as/app/(with-base-layout)/instl-sncn/page.tsx +++ /dev/null @@ -1 +0,0 @@ -export { InstlSncnListPage as default } from "@/pages/instl-sncn"; diff --git a/apps/as/app/(with-base-layout)/layout.tsx b/apps/as/app/(with-base-layout)/layout.tsx index 24e6e7276..71dd294a8 100644 --- a/apps/as/app/(with-base-layout)/layout.tsx +++ b/apps/as/app/(with-base-layout)/layout.tsx @@ -1,9 +1,11 @@ -import { BaseLayoutWrapper } from "@/app/layouts/base-layout"; - -interface WithBaseLayoutProps { - children: React.ReactNode; -} - -export default function WithBaseLayout({ children }: WithBaseLayoutProps) { - return {children}; -} +import type { ReactNode } from "react"; + +import { BaseLayoutWrapper } from "@/app/layouts/base-layout"; + +interface WithBaseLayoutProps { + children: ReactNode; +} + +export default function WithBaseLayout({ children }: WithBaseLayoutProps) { + return {children}; +} diff --git a/apps/as/app/(with-base-layout)/page.tsx b/apps/as/app/(with-base-layout)/page.tsx new file mode 100644 index 000000000..82a918b59 --- /dev/null +++ b/apps/as/app/(with-base-layout)/page.tsx @@ -0,0 +1 @@ +export { MainPage as default } from "@/pages/home"; diff --git a/apps/as/app/api/proxy/[...url]/route.ts b/apps/as/app/api/proxy/[...url]/route.ts new file mode 100644 index 000000000..36ec17557 --- /dev/null +++ b/apps/as/app/api/proxy/[...url]/route.ts @@ -0,0 +1,94 @@ +import { cookies } from "next/headers"; +import { NextResponse } from "next/server"; + +import { + ACCESS_TOKEN, + AUTH_USER_ID, + CLAIM_NAME, + REFRESH_TOKEN, + SERVER_API_URL, + SITE_ID, +} from "@/shared/config"; + +async function handler( + request: Request, + params: { url: string[] }, + method: "GET" | "POST" | "PUT" | "DELETE", +) { + const cookieStore = await cookies(); + const headers: Record = { + "Content-Type": "application/json", + "X-Site-Id": SITE_ID, + }; + let body = {}; + const isRefreshHandler = params.url.includes("refresh"); + + // silent refresh + if (isRefreshHandler) { + const refreshToken = cookieStore.get(REFRESH_TOKEN); + headers[CLAIM_NAME] = refreshToken?.value ?? ""; + + if (!headers[CLAIM_NAME]) { + return NextResponse.json({ message: "Can't refresh" }, { status: 401 }); + } + } + + try { + if (!isRefreshHandler) { + body = await request.json(); + } + + const result = await fetch(`${SERVER_API_URL}/${params.url.join("/")}`, { + method, + headers, + body: JSON.stringify(body), + }); + + if (!result.ok) { + return NextResponse.json({ message: "Invalid Credentials" }, { status: 401 }); + } + + const accessToken = result.headers.get(ACCESS_TOKEN); + const refreshToken = result.headers.get(REFRESH_TOKEN); + const userId = result.headers.get(AUTH_USER_ID); + + if (accessToken && userId) { + const response = NextResponse.json({ + [ACCESS_TOKEN]: accessToken, + [AUTH_USER_ID]: userId, + }); + + const forwardedHost = request.headers.get("x-forwarded-host"); + const host = request.headers.get("host"); + const actualHost = forwardedHost || host || new URL(request.url).hostname.toString(); + + // 운영 환경에서 domain 설정 + const domain = actualHost.includes("hasuon.or.kr") ? ".hasuon.or.kr" : actualHost; + + if (refreshToken) { + cookieStore.set(REFRESH_TOKEN, refreshToken, { + httpOnly: true, + sameSite: "strict", + domain: domain, + path: "/", + }); + } + + return response; + } + + return NextResponse.json({ message: "Invalid Credentials" }, { status: 401 }); + } catch (error) { + return NextResponse.json({ message: "Server Error", error }, { status: 500 }); + } +} + +export async function POST(request: Request, props: { params: Promise<{ url: string[] }> }) { + const params = await props.params; + return handler(request, params, "POST"); +} + +export async function PUT(request: Request, props: { params: Promise<{ url: string[] }> }) { + const params = await props.params; + return handler(request, params, "PUT"); +} diff --git a/apps/as/app/auth/login/page.tsx b/apps/as/app/auth/login/page.tsx new file mode 100644 index 000000000..8f9e6adc6 --- /dev/null +++ b/apps/as/app/auth/login/page.tsx @@ -0,0 +1,2 @@ +import { LoginPage } from "@/pages/auth/login"; +export default LoginPage; diff --git a/apps/as/app/layout.tsx b/apps/as/app/layout.tsx index 5293046d6..3b64ab52f 100644 --- a/apps/as/app/layout.tsx +++ b/apps/as/app/layout.tsx @@ -1,10 +1,9 @@ import type { Metadata } from "next"; import { cookies } from "next/headers"; + import { Providers } from "@/app/providers"; -import { setCookie } from "@/shared/lib"; -import { SITE_ID } from "@/shared/config"; + import "@/app/styles/globals.css"; -import "@/app/styles/components.css"; export const metadata: Metadata = { title: "행정지원시스템", @@ -15,8 +14,6 @@ interface RootLayoutProps { children: React.ReactNode; } -setCookie("site-id-key", SITE_ID); - export default async function RootLayout({ children }: RootLayoutProps) { const theme = (await cookies()).get("site-theme-key"); diff --git a/apps/as/docs/approval-line-management/SPEC.md b/apps/as/docs/approval-line-management/SPEC.md index 42e9999c1..8528f8241 100644 --- a/apps/as/docs/approval-line-management/SPEC.md +++ b/apps/as/docs/approval-line-management/SPEC.md @@ -2,19 +2,19 @@ ## 1. 기본 정보 -| 항목 | 내용 | -| ---------- | -------------------------------------------------------- | -| 버전 | 0.1 (초안) | -| 프로세스명 | UI설계 | -| 화면명 | 결재선 관리 | -| 화면 유형 | [x] 조회 [x] 입력 [x] 수정 [x] 삭제 [ ] 출력 | -| 메뉴 경로 | 디지털행정지원 > 사이트관리 > 결재선 관리 | +| 항목 | 내용 | +| ---------- | -------------------------------------------- | +| 버전 | 0.1 (초안) | +| 프로세스명 | UI설계 | +| 화면명 | 결재선 관리 | +| 화면 유형 | [v] 조회 [v] 입력 [v] 수정 [v] 삭제 [ ] 출력 | +| 메뉴 경로 | 디지털행정지원 > 시스템관리 > 결재선 관리 | --- ## 2. 화면 목적 -전자결재 처리에 사용할 **결재서식**(템플릿)을 등록·관리하고, 각 서식별로 **결재선**(접수 → 검토 → 최종승인 단계)을 구성한다. 좌측 상단의 결재서식 목록에서 하나를 선택하면 하단 영역에 해당 서식의 결재 단계(결재자/순서/구분)가 표시되며, 사용자는 결재자 추가·수정·삭제와 결재선 저장을 수행한다. +전자결재 처리에 사용할 **결재서식**(템플릿)을 등록·관리하고, 각 서식별로 **결재선**(접수 -> 검토 -> 승인 -> 최종승인 단계)을 구성한다. 상단의 결재서식 목록에서 하나를 선택하면 하단 영역에 해당 서식의 결재 단계(결재자/순서/구분)가 표시되며, 사용자는 결재자 추가·수정·삭제와 결재선 저장을 수행한다. --- @@ -28,10 +28,10 @@ ├──────────────────────────────────────────────────────────────────────────────┤ │ [영역 A] 전자결재선 관리 목록 [서식 등록] │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ -│ │ 전자결재서식아이디 | 결재서식명 | 문서구분 | 등록일시 | 관리 │ │ +│ │ 전자결재서식아이디 | 결재서식명 | 문서구분 | 등록일시 | 관리 │ │ │ ├──────────────────────────────────────────────────────────────────────┤ │ -│ │ TMPL-0001 (선택 행 강조) … [수정][삭제] │ │ -│ │ TMPL-0002 … [수정][삭제] │ │ +│ │ TMPL-0001 (선택 행 강조) … [수정][삭제] │ │ +│ │ TMPL-0002 … [수정][삭제] │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ ├──────────────────────────────────────────────────────────────────────────────┤ │ [영역 B] 결재선 관리 선택된 서식: TMPL-0001 │ @@ -164,39 +164,39 @@ END ### 4-1. 헤더 / 툴바 -| 항목 | 내용 | -| ---------- | ------------------------------------------------------------- | -| 섹션 타이틀 | 전자결재선 관리 목록 | -| 우측 버튼 | **[서식 등록]** — 결재서식 등록 다이얼로그 오픈 | +| 항목 | 내용 | +| ----------- | ----------------------------------------------- | +| 섹션 타이틀 | 전자결재선 관리 목록 | +| 우측 버튼 | **[서식 등록]** — 결재서식 등록 다이얼로그 오픈 | ### 4-2. 그리드 컬럼 -| 컬럼명 | Field | 타입 | 비고 | -| ------------------ | -------------------- | ------ | ------------------------------------------------- | -| 전자결재서식아이디 | `elctAtrzTmpltId` | string | 예) `TMPL-0001` (서버 자동 발급, TBD) | -| 결재서식명 | `atrzTmpltNm` | string | 예) `설치인가 검토 결재` | -| 문서구분 | `docSeNm` | string | 예) `설치인가`, `기본계획` (코드/명 매핑 TBD) | -| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | -| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | +| 컬럼명 | Field | 타입 | 비고 | +| ------------------ | ----------------- | ------ | --------------------------------------------- | +| 전자결재서식아이디 | `elctAtrzTmpltId` | string | 예) `TMPL-0001` (서버 자동 발급, TBD) | +| 결재서식명 | `atrzTmpltNm` | string | 예) `설치인가 검토 결재` | +| 문서구분 | `docSeNm` | string | 예) `설치인가`, `기본계획` (코드/명 매핑 TBD) | +| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | +| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | - 행 클릭 시: 해당 서식을 **선택 상태**로 만들고 영역 B 라벨(`선택된 서식: {전자결재서식아이디}`)과 영역 B-2 그리드를 갱신한다. - 페이지네이션: TBD (스크린샷에는 미표시). ### 4-3. 버튼 -| 버튼명 | 위치 | 동작 | -| ---------- | ------------------ | -------------------------------------------------------------------- | -| 서식 등록 | 섹션 우측 상단 | 결재서식 등록 다이얼로그 오픈 (입력 항목·필수값 TBD) | -| 수정 | 행별 | 결재서식 수정 다이얼로그 오픈 (해당 행 값으로 초기화) | -| 삭제 | 행별 | 확인 다이얼로그 후 삭제. 선택 중인 서식이면 영역 B 상태도 초기화. | +| 버튼명 | 위치 | 동작 | +| --------- | -------------- | ----------------------------------------------------------------- | +| 서식 등록 | 섹션 우측 상단 | 결재서식 등록 다이얼로그 오픈 (입력 항목·필수값 TBD) | +| 수정 | 행별 | 결재서식 수정 다이얼로그 오픈 (해당 행 값으로 초기화) | +| 삭제 | 행별 | 확인 다이얼로그 후 삭제. 선택 중인 서식이면 영역 B 상태도 초기화. | ### 4-4. 다이얼로그(개요) -| 다이얼로그명 | 트리거 | 입력 항목(예상) | 비고 | -| ---------------------- | ---------------- | ------------------------------------------------ | -------------------------- | -| 결재서식 등록 | [서식 등록] 클릭 | 결재서식명, 문서구분(드롭다운) | 등록 성공 시 영역 A 갱신 | -| 결재서식 수정 | 행별 [수정] | 결재서식명, 문서구분 | 기존 값으로 초기화 | -| 결재서식 삭제 확인 | 행별 [삭제] | (확인/취소) | | +| 다이얼로그명 | 트리거 | 입력 항목(예상) | 비고 | +| ------------------ | ---------------- | ------------------------------ | ------------------------ | +| 결재서식 등록 | [서식 등록] 클릭 | 결재서식명, 문서구분(드롭다운) | 등록 성공 시 영역 A 갱신 | +| 결재서식 수정 | 행별 [수정] | 결재서식명, 문서구분 | 기존 값으로 초기화 | +| 결재서식 삭제 확인 | 행별 [삭제] | (확인/취소) | | --- @@ -206,21 +206,21 @@ END ### 5-1. 헤더 / 상태 표시 -| 항목 | 내용 | -| ------------ | ------------------------------------------------------------------------------------- | -| 섹션 타이틀 | 결재선 관리 | -| 우측 라벨 | `선택된 서식: {전자결재서식아이디}` — 영역 A에서 선택한 서식 ID를 강조 색으로 표시. 미선택 시 영역 B 비활성. | +| 항목 | 내용 | +| ----------- | ------------------------------------------------------------------------------------------------------------ | +| 섹션 타이틀 | 결재선 관리 | +| 우측 라벨 | `선택된 서식: {전자결재서식아이디}` — 영역 A에서 선택한 서식 ID를 강조 색으로 표시. 미선택 시 영역 B 비활성. | ### 5-2. 영역 B-1: 결재자 입력 폼 #### 필드 정의 -| 표시명 | 입력 유형 | 필수 | 기본값 | 데이터 소스 | API 파라미터 매핑 | 비고 | -| -------------------- | -------------------- | ---- | ------------ | ---------------------- | ----------------- | --------------------------------------------------------------- | -| 결재선아이디(자동발급) | 텍스트(읽기 전용) | — | `APLN-XXXX` | 서버 자동 발급 (TBD) | TBD | 입력 불가. 저장 시 서버 발급. 표시값은 미발급 자리표시(또는 임시 ID). | -| 결재구분 | 드롭다운 | 예 | `접수` | 코드 (TBD) | TBD | 옵션: **접수 / 검토 / 최종승인** (그리드 행 기준) | -| 결재자명 | 텍스트(읽기 전용) | 예 | `""` | [검토인력 선택] 결과 | TBD | 자유 입력 불가. 다이얼로그 선택 결과로 채움. | -| 결재순서번호 | 숫자 입력 | 예 | `1` | — | TBD | 1 이상의 정수. 동일 서식 내 중복 검증 필요. | +| 표시명 | 입력 유형 | 필수 | 기본값 | 데이터 소스 | API 파라미터 매핑 | 비고 | +| ---------------------- | ----------------- | ---- | ----------- | -------------------- | ----------------- | --------------------------------------------------------------------- | +| 결재선아이디(자동발급) | 텍스트(읽기 전용) | — | `APLN-XXXX` | 서버 자동 발급 (TBD) | TBD | 입력 불가. 저장 시 서버 발급. 표시값은 미발급 자리표시(또는 임시 ID). | +| 결재구분 | 드롭다운 | 예 | `접수` | 코드 (TBD) | TBD | 옵션: **접수 / 검토 / 최종승인** (그리드 행 기준) | +| 결재자명 | 텍스트(읽기 전용) | 예 | `""` | [검토인력 선택] 결과 | TBD | 자유 입력 불가. 다이얼로그 선택 결과로 채움. | +| 결재순서번호 | 숫자 입력 | 예 | `1` | — | TBD | 1 이상의 정수. 동일 서식 내 중복 검증 필요. | 플레이스홀더 / 표시 텍스트: @@ -229,35 +229,35 @@ END #### 버튼 -| 버튼명 | 동작 | -| --------------- | ------------------------------------------------------------------------------------------------------------- | -| 검토인력 선택 | **검토인력 선택 다이얼로그** 오픈. 선택 시 `결재자명`과 내부 `결재자 ID`를 폼 상태에 반영. | -| 결재자 추가 | 입력 폼 값을 영역 B-2 그리드에 **임시 행**으로 추가하고 폼을 초기화한다. (서버 호출 없음, 저장 시 일괄 반영.) | -| 결재선 저장 | 영역 B-2의 결재선 목록을 일괄 저장 API로 전송한다. 성공 시 그리드 재조회 + 토스트 표시. | -| 초기화 | 입력 폼을 기본값으로 리셋(결재구분=접수, 결재자명=빈값, 결재순서번호=1). | +| 버튼명 | 동작 | +| ------------- | ------------------------------------------------------------------------------------------------------------- | +| 검토인력 선택 | **검토인력 선택 다이얼로그** 오픈. 선택 시 `결재자명`과 내부 `결재자 ID`를 폼 상태에 반영. | +| 결재자 추가 | 입력 폼 값을 영역 B-2 그리드에 **임시 행**으로 추가하고 폼을 초기화한다. (서버 호출 없음, 저장 시 일괄 반영.) | +| 결재선 저장 | 영역 B-2의 결재선 목록을 일괄 저장 API로 전송한다. 성공 시 그리드 재조회 + 토스트 표시. | +| 초기화 | 입력 폼을 기본값으로 리셋(결재구분=접수, 결재자명=빈값, 결재순서번호=1). | > 정책 메모: **[결재자 추가]** 와 **[결재선 저장]** 의 분리에 대해서는 두 가지 운영이 가능하다. 본 SPEC 초안은 그리드에 임시 행을 누적해 두고 [결재선 저장] 시점에 서버에 일괄 반영하는 모델을 가정한다. 실제 구현 방식(추가 즉시 저장 vs 일괄 저장)은 백엔드 API 확정 후 재정의(TBD). #### 다이얼로그 -| 다이얼로그명 | 트리거 | 표시 내용 / 입력 항목 | 결과 | -| -------------------- | -------------------- | -------------------------------------------------------- | --------------------------------------------------- | -| 검토인력 선택 | [검토인력 선택] | 사용자 검색 필터(이름/소속 등 TBD), 사용자 목록(단일 선택) | 선택된 사용자 정보를 입력 폼에 반영 | -| 결재자 수정 | B-2 행별 [수정] | 결재구분, 결재자명(선택), 결재순서번호 | 확인 시 해당 행 갱신 | -| 결재자 삭제 확인 | B-2 행별 [삭제] | (확인/취소) | 확인 시 해당 행 삭제 | +| 다이얼로그명 | 트리거 | 표시 내용 / 입력 항목 | 결과 | +| ---------------- | --------------- | ---------------------------------------------------------- | ----------------------------------- | +| 검토인력 선택 | [검토인력 선택] | 사용자 검색 필터(이름/소속 등 TBD), 사용자 목록(단일 선택) | 선택된 사용자 정보를 입력 폼에 반영 | +| 결재자 수정 | B-2 행별 [수정] | 결재구분, 결재자명(선택), 결재순서번호 | 확인 시 해당 행 갱신 | +| 결재자 삭제 확인 | B-2 행별 [삭제] | (확인/취소) | 확인 시 해당 행 삭제 | ### 5-3. 영역 B-2: 결재선 그리드 #### 그리드 컬럼 -| 컬럼명 | Field | 타입 | 비고 | -| -------------- | ---------------- | ------ | ---------------------------------------------------------- | -| 결재선아이디 | `atrzLineId` | string | 예) `APLN-0001` (서버 자동 발급, TBD) | -| 결재순서번호 | `atrzSeqNo` | number | 1부터 시작. 단계 순서. | -| 결재구분 | `atrzSeNm` | string | `접수` / `검토` / `최종승인` | -| 결재자명 | `atrzUserNm` | string | 검토인력 선택 시 채워짐 | -| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | -| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | +| 컬럼명 | Field | 타입 | 비고 | +| ------------ | ------------ | ------ | ------------------------------------- | +| 결재선아이디 | `atrzLineId` | string | 예) `APLN-0001` (서버 자동 발급, TBD) | +| 결재순서번호 | `atrzSeqNo` | number | 1부터 시작. 단계 순서. | +| 결재구분 | `atrzSeNm` | string | `접수` / `검토` / `최종승인` | +| 결재자명 | `atrzUserNm` | string | 검토인력 선택 시 채워짐 | +| 등록일시 | `regDt` | string | `YYYY-MM-DD HH:mm:ss` | +| 관리 | — | — | 행별 **[수정] · [삭제]** 버튼 | - 표시 정렬: 기본 `결재순서번호` 오름차순. - 임시 행(서버 미저장)과 저장된 행의 시각적 구분 필요(예: ID 컬럼 표기 또는 행 스타일). 세부 UI는 TBD. @@ -271,35 +271,35 @@ END ### 6-1. 공통 -| 항목 | 내용 | -| ----------- | ------------------------------------------------------------------- | -| Base prefix | TBD (예: `/server` 또는 결재 서비스 prefix) | -| 인증 | JWT 토큰 기반 (Authorization 헤더) | -| 클라이언트 | TBD (예: `@/entities/approval-line`) | +| 항목 | 내용 | +| ----------- | ------------------------------------------- | +| Base prefix | TBD (예: `/server` 또는 결재 서비스 prefix) | +| 인증 | JWT 토큰 기반 (Authorization 헤더) | +| 클라이언트 | TBD (예: `@/entities/approval-line`) | ### 6-2. 전자결재서식 (영역 A) -| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | -| --------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | -| 결재서식 목록 조회 | TBD | TBD | TBD | TBD | TBD | -| 결재서식 등록 | TBD | TBD | TBD | TBD | TBD | -| 결재서식 수정 | TBD | TBD | TBD | TBD | TBD | -| 결재서식 삭제 | TBD | TBD | TBD | TBD | TBD | +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------ | ------ | --- | ----------- | ------------ | ---------------------- | +| 결재서식 목록 조회 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 등록 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 수정 | TBD | TBD | TBD | TBD | TBD | +| 결재서식 삭제 | TBD | TBD | TBD | TBD | TBD | ### 6-3. 결재선 (영역 B) -| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | -| ------------------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | -| 결재선 목록 조회(서식별) | TBD | TBD | `{ elctAtrzTmpltId }` (TBD) | TBD | TBD | -| 결재선 추가/일괄 저장 | TBD | TBD | `{ elctAtrzTmpltId, lines[] }` (TBD) | TBD | TBD | -| 결재선 수정 | TBD | TBD | TBD | TBD | TBD | -| 결재선 삭제 | TBD | TBD | TBD | TBD | TBD | +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------------ | ------ | --- | ------------------------------------ | ------------ | ---------------------- | +| 결재선 목록 조회(서식별) | TBD | TBD | `{ elctAtrzTmpltId }` (TBD) | TBD | TBD | +| 결재선 추가/일괄 저장 | TBD | TBD | `{ elctAtrzTmpltId, lines[] }` (TBD) | TBD | TBD | +| 결재선 수정 | TBD | TBD | TBD | TBD | TBD | +| 결재선 삭제 | TBD | TBD | TBD | TBD | TBD | ### 6-4. 검토인력 (다이얼로그) -| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | -| ------------------- | ------ | ---- | ----------- | ------------ | ---------------------- | -| 검토인력 목록 조회 | TBD | TBD | TBD (검색 필터) | TBD | TBD | +| 기능 | Method | URL | Request DTO | Response DTO | API(클라이언트 함수명) | +| ------------------ | ------ | --- | --------------- | ------------ | ---------------------- | +| 검토인력 목록 조회 | TBD | TBD | TBD (검색 필터) | TBD | TBD | --- @@ -315,25 +315,25 @@ END ### 7-2. 모듈·파일 배치(제안) -| 구분 | 경로 | -| ---------------- | --------------------------------------------------------------------------------------------- | -| 라우트(App Router) | `apps/as/app/(with-base-layout)/approval-line-management/page.tsx` | -| 페이지 컴포넌트 | `apps/as/src/pages/approval-line-management/index.ts`
`.../ui/approval-line-management-page.tsx` | -| 위젯(영역 단위) | `apps/as/src/widgets/approval-template-list/`
`apps/as/src/widgets/approval-line-editor/` | -| 피처(상호작용) | `apps/as/src/features/approver-picker/` (검토인력 선택 다이얼로그) | -| 엔티티(도메인) | `apps/as/src/entities/approval-template/`
`apps/as/src/entities/approval-line/` | -| 그리드 컬럼 정의 | `entities/approval-template/model/approval-template-table-columns.tsx`
`entities/approval-line/model/approval-line-table-columns.tsx` | -| API 클라이언트 | `entities/approval-template/api/*`, `entities/approval-line/api/*` (TBD) | +| 구분 | 경로 | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | +| 라우트(App Router) | `apps/as/app/(with-base-layout)/approval-line-management/page.tsx` | +| 페이지 컴포넌트 | `apps/as/src/pages/approval-line-management/index.ts`
`.../ui/approval-line-management-page.tsx` | +| 위젯(영역 단위) | `apps/as/src/widgets/approval-template-list/`
`apps/as/src/widgets/approval-line-editor/` | +| 피처(상호작용) | `apps/as/src/features/approver-picker/` (검토인력 선택 다이얼로그) | +| 엔티티(도메인) | `apps/as/src/entities/approval-template/`
`apps/as/src/entities/approval-line/` | +| 그리드 컬럼 정의 | `entities/approval-template/model/approval-template-table-columns.tsx`
`entities/approval-line/model/approval-line-table-columns.tsx` | +| API 클라이언트 | `entities/approval-template/api/*`, `entities/approval-line/api/*` (TBD) | ### 7-3. 영역별 UI 매핑 -| 영역 | 주요 UI | 비고 | -| ----- | ----------------------------------------------------------------------------- | --------------------------------------------------- | -| A | 섹션 헤더 + Button(`서식 등록`) + DataTable (행 선택, 행별 Action 버튼) | 선택 행 강조, 행 클릭으로 영역 B 갱신 | -| B 헤더| 상태 라벨 `선택된 서식: {ID}` | 미선택 시 영역 B-1·B-2 비활성 | -| B-1 | 읽기 전용 Input(아이디), Select(결재구분), Input+Button(결재자/검토인력 선택), NumberInput(순서번호), Action 버튼 3종(`결재자 추가`/`결재선 저장`/`초기화`) | 폼 유효성 검증 후 그리드에 임시 행 추가 | -| B-2 | DataTable (행별 [수정][삭제]), 임시 행 시각적 구분 | 기본 정렬: 결재순서번호 ASC | -| 공통 | Dialog(검토인력 선택, 서식 등록/수정, 결재자 수정, 삭제 확인) | 디자인 시스템의 `Dialog` 컴포넌트 사용 | +| 영역 | 주요 UI | 비고 | +| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | +| A | 섹션 헤더 + Button(`서식 등록`) + DataTable (행 선택, 행별 Action 버튼) | 선택 행 강조, 행 클릭으로 영역 B 갱신 | +| B 헤더 | 상태 라벨 `선택된 서식: {ID}` | 미선택 시 영역 B-1·B-2 비활성 | +| B-1 | 읽기 전용 Input(아이디), Select(결재구분), Input+Button(결재자/검토인력 선택), NumberInput(순서번호), Action 버튼 3종(`결재자 추가`/`결재선 저장`/`초기화`) | 폼 유효성 검증 후 그리드에 임시 행 추가 | +| B-2 | DataTable (행별 [수정][삭제]), 임시 행 시각적 구분 | 기본 정렬: 결재순서번호 ASC | +| 공통 | Dialog(검토인력 선택, 서식 등록/수정, 결재자 수정, 삭제 확인) | 디자인 시스템의 `Dialog` 컴포넌트 사용 | ### 7-4. 데이터 흐름(요약) diff --git a/apps/as/eslint.config.mjs b/apps/as/eslint.config.mjs index 05e726d1b..19ccdfae3 100644 --- a/apps/as/eslint.config.mjs +++ b/apps/as/eslint.config.mjs @@ -1,18 +1,33 @@ -import { defineConfig, globalIgnores } from "eslint/config"; -import nextVitals from "eslint-config-next/core-web-vitals"; -import nextTs from "eslint-config-next/typescript"; +import { FlatCompat } from "@eslint/eslintrc"; +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import baseEsLintConfig from "../../eslint.config.mjs"; -const eslintConfig = defineConfig([ - ...nextVitals, - ...nextTs, - // Override default ignores of eslint-config-next. - globalIgnores([ - // Default ignores of eslint-config-next: - ".next/**", - "out/**", - "build/**", - "next-env.d.ts", - ]), -]); +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), + ...baseEsLintConfig, + { + rules: { + "react-hooks/exhaustive-deps": "off", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", + }, + ], + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-wrapper-object-types": "warn", + }, + }, +]; export default eslintConfig; diff --git a/apps/as/middleware.ts b/apps/as/middleware.ts index da09c5840..d9239dc40 100644 --- a/apps/as/middleware.ts +++ b/apps/as/middleware.ts @@ -1,7 +1,8 @@ import { NextRequest, NextResponse } from "next/server"; + import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config"; -const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000"; +const serverApiUrl = process.env.SERVER_API_URL ?? "http://localhost:3000"; // CSP 헤더 설정 함수 (img-src만) function addSecurityHeaders(response: NextResponse): NextResponse { diff --git a/apps/as/package.json b/apps/as/package.json index 92b2e6482..efafdcc50 100644 --- a/apps/as/package.json +++ b/apps/as/package.json @@ -13,7 +13,6 @@ "@common/assets": "workspace:*", "@common/components": "workspace:*", "@common/network": "workspace:*", - "@faker-js/faker": "^10.3.0", "@hookform/resolvers": "^4.1.3", "@tanstack/react-query": "^5.75.5", "@tanstack/react-query-devtools": "^5.75.5", @@ -26,9 +25,11 @@ "zod": "^3.24.2" }, "devDependencies": { + "@eslint/eslintrc": "^3", "@types/js-cookie": "^3.0.6", "eslint": "^9.0.0", - "eslint-config-next": "15.4.0", + "eslint-config-next": "15.3.8", + "eslint-plugin-react-hooks": "^5.0.0", "postcss": "^8.4.49", "prettier": "^3.4.2", "prettier-plugin-tailwindcss": "^0.6.11", @@ -36,4 +37,4 @@ "tailwindcss": "^3.4.14", "typescript": "^5.7.2" } -} \ No newline at end of file +} diff --git a/apps/as/pages/.gitkeep b/apps/as/pages/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/as/pages/README.md b/apps/as/pages/README.md new file mode 100644 index 000000000..e011944c3 --- /dev/null +++ b/apps/as/pages/README.md @@ -0,0 +1,9 @@ +# 이 폴더는 비워 둡니다 (FSD + Next.js App Router) + +Next.js가 `src/pages`를 **Pages Router**용 `pages` 디렉터리로 인식하지 않도록, +프로젝트 루트에 **빈 `pages` 폴더**를 두는 것이 FSD 공식 가이드 권장사항입니다. + +- 실제 페이지(FSD Pages 레이어)는 **`src/pages`**에 있습니다. +- Next.js 라우트는 **`app/`** 에서 `src/pages`를 re-export 하는 방식으로 연결됩니다. + +[Feature-Sliced Design - Usage with Next.js (App Router)](https://feature-sliced.design/docs/guides/tech/with-nextjs) diff --git a/apps/as/public/images/bg_login.jpg b/apps/as/public/images/bg_login.jpg new file mode 100755 index 0000000000000000000000000000000000000000..b7793d16a07f4870260d6fd16f31a9ef158c90a7 GIT binary patch literal 135228 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 z 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 literal 0 HcmV?d00001 diff --git a/apps/as/src/app/layouts/base-layout.tsx b/apps/as/src/app/layouts/base-layout.tsx index 72b95709f..54fb55c52 100644 --- a/apps/as/src/app/layouts/base-layout.tsx +++ b/apps/as/src/app/layouts/base-layout.tsx @@ -1,35 +1,37 @@ -"use client"; - -import { useCallback } from "react"; -import { usePathname, useRouter } from "next/navigation"; -import { useQueryClient } from "@tanstack/react-query"; -import { BaseLayout } from "@common/components"; -import type { MenuItem } from "@/entities/menu"; -import { PageLayout } from "@/shared/ui/page-layout"; - -interface BaseLayoutWrapperProps { - children: React.ReactNode; -} - -export function BaseLayoutWrapper({ children }: BaseLayoutWrapperProps) { - const router = useRouter(); - const pathname = usePathname(); - const queryClient = useQueryClient(); - - const handleMenuClick = useCallback( - (item: MenuItem) => { - router.push(item.urlPath); - }, - [router], - ); - - return ( - - {children} - - ); -} +"use client"; + +import { useCallback } from "react"; +import { usePathname, useRouter } from "next/navigation"; + +import { useQueryClient } from "@tanstack/react-query"; + +import { PageLayout } from "@/shared/ui/page-layout"; +import type { MenuItem } from "@/entities/menu"; +import { BaseLayout } from "@common/components"; + +interface BaseLayoutWrapperProps { + children: React.ReactNode; +} + +export function BaseLayoutWrapper({ children }: BaseLayoutWrapperProps) { + const router = useRouter(); + const pathname = usePathname(); + const queryClient = useQueryClient(); + + const handleMenuClick = useCallback( + (item: MenuItem) => { + router.push(item.urlPath); + }, + [router], + ); + + return ( + + {children} + + ); +} diff --git a/apps/as/src/app/providers/index.tsx b/apps/as/src/app/providers/index.tsx index ff37c57b7..476609d59 100644 --- a/apps/as/src/app/providers/index.tsx +++ b/apps/as/src/app/providers/index.tsx @@ -1,20 +1,23 @@ -"use client"; - -import { QueryClientProvider } from "@tanstack/react-query"; -import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; -import { queryClient } from "@/shared/lib"; - -interface ProvidersProps { - children: React.ReactNode; -} - -export function Providers({ children }: ProvidersProps) { - return ( - - {children} -
- -
-
- ); -} +"use client"; + +import { QueryClientProvider } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; + +import { queryClient } from "@/shared/lib"; +import { StoreProvider } from "@/shared/providers"; +import { AuthWrapper } from "@/entities/auth"; + +interface ProvidersProps { + children: React.ReactNode; +} + +export function Providers({ children }: ProvidersProps) { + return ( + + + {children} + + + + ); +} diff --git a/apps/as/src/app/styles/components.css b/apps/as/src/app/styles/components.css deleted file mode 100644 index 5b9742c0f..000000000 --- a/apps/as/src/app/styles/components.css +++ /dev/null @@ -1,129 +0,0 @@ -.card { - position: relative; - margin: 0.6rem; - box-sizing: border-box; - min-height: 2rem; - border-radius: 0.5rem; - padding: 0.6rem; - font-size: 1.3rem; - color: #666; -} - -.card_width10 { - width: calc(10% - 12px); -} - -.card_width20 { - width: calc(20% - 12px); -} - -.card_width25 { - width: calc(25% - 12px); -} - -.card_width30 { - width: calc(30% - 12px); -} - -.card_width33 { - width: calc(33.333% - 12px); -} - -.card_width40 { - width: calc(40% - 12px); -} - -.card_width45 { - width: calc(45% - 12px); -} - -.card_width50 { - width: calc(50% - 12px); -} - -.card_width60 { - width: calc(60% - 12px); -} - -.card_width66 { - width: calc(66.666% - 12px); -} - -.card_width70 { - width: calc(70% - 12px); -} - -.card_width75 { - width: calc(75% - 12px); -} - -.card_width80 { - width: calc(80% - 12px); -} - -.card_width90 { - width: calc(90% - 12px); -} - -.card_width100 { - width: calc(100% - 12px); -} - -.card_nopadding { - padding: 0 !important; -} - -.card_nomargin { - width: 100%; - margin: 0 !important; - padding: 0 !important; -} - -.topline { - border-top: 1px solid #ccc; -} - -.bottomline { - border-bottom: 1px solid #e6eef3; - background: #fff; -} - -.card-border { - border: 1px solid #dbe2e6; - background-color: rgba(255, 255, 255, 0.6); - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); -} - -.card-header { - margin-top: -0.6rem; - margin-left: -0.6rem; - margin-right: -0.6rem; - display: flex; - align-items: center; - justify-content: space-between; - border-bottom: 1px solid #e1e7eb; - padding: 1rem; -} - -.card-footer { - margin-left: -0.6rem; - margin-right: -0.6rem; - margin-top: 0.5rem; - display: flex; - align-items: center; - justify-content: center; - border-top: 1px solid #e1e7eb; - padding-top: 1rem; - padding-bottom: 1rem; -} - -/* 블랙 테마 */ -[data-theme="black"] { - .card-border { - background-color: rgba(255, 255, 255, 0.065); - border-color: #38383a; - } - .card-header { - border-bottom-color: #3f4042; - } -} diff --git a/apps/as/src/app/styles/globals.css b/apps/as/src/app/styles/globals.css index 91c6845e5..e557f947b 100644 --- a/apps/as/src/app/styles/globals.css +++ b/apps/as/src/app/styles/globals.css @@ -1,15 +1,15 @@ -@import "@common/assets/styles/base.css"; -@import "@common/assets/styles/diveicon.css"; -@import "@common/components/index.css"; - -@tailwind base; -@tailwind components; -@tailwind utilities; - -html, -body { - color: var(--foreground); - background: var(--background); - font-family: "Noto Sans KR", sans-serif; - font-size: 10px; -} +@import "@common/assets/styles/base.css"; +@import "@common/assets/styles/diveicon.css"; +@import "@common/components/index.css"; + +@tailwind base; +@tailwind components; +@tailwind utilities; + +html, +body { + color: var(--foreground); + background: var(--background); + font-family: "Noto Sans KR", sans-serif; + font-size: 10px; +} diff --git a/apps/as/src/entities/auth/api/login-service.ts b/apps/as/src/entities/auth/api/login-service.ts new file mode 100644 index 000000000..2dc784e97 --- /dev/null +++ b/apps/as/src/entities/auth/api/login-service.ts @@ -0,0 +1,92 @@ +import { AxiosError } from "axios"; + +import { + ACCESS_TOKEN, + AUTH_USER_ID, + CLAIM_NAME, + ENDPOINT, + JWT_EXPIRATION_TIME, +} from "@/shared/config"; + +import { tokenManager } from "../lib/token-manager"; +import type { ILogin, LoginService } from "../model/login-interface"; + +export class LoginApiService implements LoginService { + private static instance: LoginApiService; + + private constructor() {} + + public static getInstance(): LoginApiService { + if (!LoginApiService.instance) { + LoginApiService.instance = new LoginApiService(); + } + return LoginApiService.instance; + } + + public async login(payload: ILogin): Promise { + try { + const response = await fetch(`/api/proxy${ENDPOINT.USER_SERVICE.LOGIN}`, { + method: "POST", + body: JSON.stringify({ + userId: payload.userId, + password: payload.password, + }), + }); + + const data = await response.json(); + console.log("data ", data); + const accessToken = data[ACCESS_TOKEN]; + const tokenId = data[AUTH_USER_ID]; + + if (!accessToken || !tokenId) { + if (data.message == "Invalid Credentials") { + throw new Error("아이디와 비밀번호가 일치하지 않습니다."); + } else if (data.message == "User not found") { + throw new Error("존재하지 않는 아이디입니다."); + } else if (data.message == "User is not active") { + throw new Error("활성화되지 않은 계정입니다."); + } else if (data.message == "User is not verified") { + throw new Error("이메일 인증이 필요합니다."); + } else { + throw new Error(data.message); + } + } + + tokenManager.setToken(CLAIM_NAME, accessToken); + tokenManager.setToken(AUTH_USER_ID, tokenId); + tokenManager.setupRefreshTimer(() => this.silentRefresh(), JWT_EXPIRATION_TIME); + } catch (error) { + if (error instanceof AxiosError) { + throw new Error(`Login 실패 ${error.response?.data?.message}`); + } + throw new Error(`Login 실패 ${error}`); + } + } + + public async silentRefresh(): Promise { + try { + const response = await fetch(`/api/proxy${ENDPOINT.USER_SERVICE.SILENT_REFRESH}`, { + method: "PUT", + }); + + const data = await response.json(); + const accessToken = data[ACCESS_TOKEN]; + const tokenId = data[AUTH_USER_ID]; + + if (!accessToken || !tokenId) { + throw new Error("Missing required authentication tokens"); + } + + tokenManager.setToken(CLAIM_NAME, accessToken); + tokenManager.setToken(AUTH_USER_ID, tokenId); + } catch (error) { + tokenManager.clearAuthToken(); + if (error instanceof AxiosError) { + throw new Error(`Silent refresh failed: ${error.response?.data?.message}`); + } + throw new Error(`Silent refresh failed: ${error}`); + } + } +} + +export const LoginApi = LoginApiService.getInstance(); diff --git a/apps/as/src/entities/auth/index.ts b/apps/as/src/entities/auth/index.ts new file mode 100644 index 000000000..97e142225 --- /dev/null +++ b/apps/as/src/entities/auth/index.ts @@ -0,0 +1,2 @@ +export { LoginApi } from "./api/login-service"; +export { AuthWrapper } from "./lib/auth-wrapper"; diff --git a/apps/as/src/entities/auth/lib/auth-wrapper.tsx b/apps/as/src/entities/auth/lib/auth-wrapper.tsx new file mode 100644 index 000000000..e92957163 --- /dev/null +++ b/apps/as/src/entities/auth/lib/auth-wrapper.tsx @@ -0,0 +1,45 @@ +"use client"; + +import { useEffect } from "react"; + +import { client } from "@/shared/api"; +import { AUTH_LOGIN_REDIRECT_URL, AUTH_USER_ID, ENDPOINT } from "@/shared/config"; +import { getCookie, useUserStore } from "@/shared/lib"; +import type { IUserInfo } from "@/shared/store"; +import { isAtLoginRedirectUrl } from "@common/network"; + +const AuthWrapper = ({ children }: { children: React.ReactNode }) => { + const { userInfo, setUserInfo } = useUserStore((state) => state); + + async function authCheck() { + if (isAtLoginRedirectUrl(AUTH_LOGIN_REDIRECT_URL)) { + return; + } + + const userId = getCookie(AUTH_USER_ID); + if (!userId) { + throw new Error("Missing required authentication tokens"); + } + + const response = await client.get(`${ENDPOINT.USER_SERVICE.USERS}/info/me`); + if (!userInfo) setUserInfo(response.data); + } + + useEffect(() => { + (async () => { + try { + await authCheck(); + } catch (error) { + console.error(error); + setUserInfo(null); + if (!isAtLoginRedirectUrl(AUTH_LOGIN_REDIRECT_URL)) { + window.location.assign(AUTH_LOGIN_REDIRECT_URL); + } + } + })(); + }, []); + + return <>{children}; +}; + +export { AuthWrapper }; diff --git a/apps/as/src/entities/auth/lib/token-manager.ts b/apps/as/src/entities/auth/lib/token-manager.ts new file mode 100644 index 000000000..c5eeffc3a --- /dev/null +++ b/apps/as/src/entities/auth/lib/token-manager.ts @@ -0,0 +1,82 @@ +import { AUTH_USER_ID, CLAIM_NAME } from "@/shared/config"; +import { getCookie, removeCookie,setCookie } from "@/shared/lib"; + +export class TokenManager { + private static instance: TokenManager; + private refreshTimer: NodeJS.Timeout | null = null; + + private constructor() {} + + public static getInstance(): TokenManager { + if (!TokenManager.instance) { + TokenManager.instance = new TokenManager(); + } + return TokenManager.instance; + } + + public getToken(key: string): string | undefined { + return getCookie(key); + } + + public setToken(key: string, value: string): void { + const domain = this.getCookieDomain(); + + setCookie(key, value, { + secure: window.location.protocol === "https:", + sameSite: "lax", + domain: domain, + path: "/", // 모든 경로에서 접근 가능 + }); + } + + + private getCookieDomain(): string | undefined { + const hostname = window.location.hostname; + + // 개발 환경에서는 localhost 도메인 사용 + if (hostname === "localhost" || hostname === "127.0.0.1") { + return undefined; // localhost에서는 도메인 설정하지 않음 + } + + // 운영 환경에서는 서브도메인을 포함한 최상위 도메인 사용 + if (hostname.includes("hasuon.or.kr")) { + return ".hasuon.or.kr"; + } + + // 기타 환경에서는 현재 호스트명 사용 + return hostname; + } + + public removeToken(key: string): void { + const domain = this.getCookieDomain(); + removeCookie(key, { domain, path: "/" }); + } + + public setupRefreshTimer( + callback: () => Promise, + expirationTime: number, + ): void { + if (this.refreshTimer) { + clearTimeout(this.refreshTimer); + } + + this.refreshTimer = setTimeout(() => { + callback().catch((error) => { + console.error("Silent refresh failed:", error); + this.clearAuthToken(); + }); + }, expirationTime - 60000); + } + + public clearAuthToken(): void { + if (this.refreshTimer) { + clearTimeout(this.refreshTimer); + this.refreshTimer = null; + } + + this.removeToken(CLAIM_NAME); + this.removeToken(AUTH_USER_ID); + } +} + +export const tokenManager = TokenManager.getInstance(); diff --git a/apps/as/src/entities/auth/model/login-interface.ts b/apps/as/src/entities/auth/model/login-interface.ts new file mode 100644 index 000000000..5aaf53044 --- /dev/null +++ b/apps/as/src/entities/auth/model/login-interface.ts @@ -0,0 +1,9 @@ +export interface ILogin { + userId: string; + password: string; +} + +export interface LoginService { + login(payload: ILogin): Promise; + silentRefresh(): Promise; +} diff --git a/apps/as/src/entities/instl-sncn/api/index.ts b/apps/as/src/entities/instl-sncn/api/index.ts deleted file mode 100644 index 2e4d9c20b..000000000 --- a/apps/as/src/entities/instl-sncn/api/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -export { instlSncnService } from "./instl-sncn-service-impl"; -export { - instlSncnKeys, - useListPageLoadCnfm, - useRegistPageLoadCnfm, - useViewPageLoadCnfm, - useSelectInstlCnfmListCnt, - useSelectInstlCnfmList, - useSelectInstlCnfmDtl, - useInsertInstlCnfm, - useMergeInstlCnfm, - useDeleteInstlCnfm, - useUpdatePrgrsSttusCnfm, - useSaveInstlCnfmPrgrsStts, - useSaveInstlCnfmSanctnPrgrsStts, - useInsertInstlCnfmSpl, - useSelectEssntlInstlCnfmAtchFileList, - useSelectInstlCnfmExmntFile, - useSelectInstlCnfmEtcFile, - useSelectInstlCnfmSpl, - useSelectInstlCnfmExmntResult, - useSelectInstlCnfmOpinionList, -} from "./queries"; diff --git a/apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts b/apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts deleted file mode 100644 index 356f8a033..000000000 --- a/apps/as/src/entities/instl-sncn/api/instl-sncn-service-impl.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { apiClient } from "@/shared/api"; -import type { - InstlSncnService, - FnrscVO, - ListPageResult, - RegistPageData, - ViewPageData, - SplmntRqst, -} from "../model"; - -class InstlSncnServiceImpl implements InstlSncnService { - async selectInstlCnfmListCount(vo: FnrscVO): Promise { - const response = await apiClient.get<{ count: number }>( - "/fnrsc/cnfm/list/count", - { params: vo } - ); - return response.data.count; - } - - async selectInstlCnfmList(vo: FnrscVO): Promise { - const response = await apiClient.get("/fnrsc/cnfm/list", { - params: vo, - }); - return response.data; - } - - async listPageLoadCnfm(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/list/pageLoad.do", - { - params: { - ...vo, - pageIndex: vo.pageIndex || 1, - recordCountPerPage: vo.recordCountPerPage || 10, - pageSize: vo.pageSize || 10, - }, - } - ); - return response.data; - } - - async registPageLoadCnfm(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/regist/pageLoad.do", - { - params: vo, - } - ); - return response.data; - } - - async insertInstlCnfm(vo: FnrscVO, files?: File[]): Promise { - const formData = new FormData(); - - Object.entries(vo).forEach(([key, value]) => { - if (value !== undefined && value !== null) { - if (typeof value === "object") { - formData.append(key, JSON.stringify(value)); - } else { - formData.append(key, String(value)); - } - } - }); - - if (files && files.length > 0) { - files.forEach((file) => { - formData.append("uploadFile", file); - }); - } - - await apiClient.post("/fnrsc/cnfm/regist/insertFnrscCnfm.do", formData, { - headers: { - "Content-Type": "multipart/form-data", - }, - }); - } - - async mergeInstlCnfm(vo: FnrscVO, files?: File[]): Promise { - const formData = new FormData(); - - Object.entries(vo).forEach(([key, value]) => { - if (value !== undefined && value !== null) { - if (typeof value === "object") { - formData.append(key, JSON.stringify(value)); - } else { - formData.append(key, String(value)); - } - } - }); - - if (files && files.length > 0) { - files.forEach((file) => { - formData.append("uploadFile", file); - }); - } - - await apiClient.post("/fnrsc/cnfm/regist/mergeFnrscCnfm.do", formData, { - headers: { - "Content-Type": "multipart/form-data", - }, - }); - } - - async selectInstlCnfmDetail(vo: FnrscVO): Promise { - const response = await apiClient.get("/fnrsc/cnfm/detail", { - params: vo, - }); - return response.data; - } - - async viewPageLoadCnfm(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/view/pageLoad.do", - { - params: vo, - } - ); - return response.data; - } - - async updateProgrsSttusCnfm(vo: FnrscVO): Promise { - await apiClient.post("/fnrsc/cnfm/update/updateProgrsSttus.do", vo); - } - - async saveInstlCnfmProgrsSttus(vo: FnrscVO, file?: File): Promise { - const formData = new FormData(); - - Object.entries(vo).forEach(([key, value]) => { - if (value !== undefined && value !== null) { - formData.append(key, String(value)); - } - }); - - if (file) { - formData.append("uploadFile", file); - } - - await apiClient.post( - "/fnrsc/cnfm/update/saveProgrsSttus.do", - formData, - { - headers: { - "Content-Type": "multipart/form-data", - }, - } - ); - } - - async saveInstlCnfmSanctnProgrsSttus(vo: FnrscVO): Promise { - await apiClient.post( - "/fnrsc/cnfm/update/saveInstlCnfmSanctnProgrsSttus.do", - vo - ); - } - - async deleteInstlCnfm(vo: FnrscVO): Promise { - await apiClient.post("/fnrsc/cnfm/regist/deleteInstlCnfm.do", vo); - } - - async selectEssntlInstlCnfmAtchFileList(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/files/essential", - { params: vo } - ); - return response.data; - } - - async selectInstlCnfmExmntFile(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/files/examination", - { params: vo } - ); - return response.data; - } - - async selectInstlCnfmEtcFile(vo: FnrscVO): Promise { - const response = await apiClient.get("/fnrsc/cnfm/files/etc", { - params: vo, - }); - return response.data; - } - - async selectInstlCnfmSanctnManage( - vo: FnrscVO - ): Promise> { - const response = await apiClient.get>( - "/fnrsc/cnfm/sanction/manage", - { params: vo } - ); - return response.data; - } - - async insertInstlCnfmSpl(vo: FnrscVO): Promise { - await apiClient.post("/fnrsc/cnfm/update/insertInstlCnfmSpl.do", vo); - } - - async selectInstlCnfmSpl(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/supplement", - { params: vo } - ); - return response.data; - } - - async selectInstlCnfmExmntResult(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/examination/result", - { params: vo } - ); - return response.data; - } - - async selectInstlCnfmOpinionList(vo: FnrscVO): Promise { - const response = await apiClient.get( - "/fnrsc/cnfm/opinion/list", - { params: vo } - ); - return response.data; - } -} - -export const instlSncnService = new InstlSncnServiceImpl(); diff --git a/apps/as/src/entities/instl-sncn/api/queries.ts b/apps/as/src/entities/instl-sncn/api/queries.ts deleted file mode 100644 index 26fa394da..000000000 --- a/apps/as/src/entities/instl-sncn/api/queries.ts +++ /dev/null @@ -1,312 +0,0 @@ -import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; -import { instlSncnService } from "./instl-sncn-service-impl"; -import type { FnrscVO } from "../model"; - -export const instlSncnKeys = { - all: ["instl-sncn"] as const, - lists: () => [...instlSncnKeys.all, "list"] as const, - list: (vo: FnrscVO) => [...instlSncnKeys.lists(), vo] as const, - dtls: () => [...instlSncnKeys.all, "dtl"] as const, - dtl: (instlCnfmDocNo: string) => - [...instlSncnKeys.dtls(), instlCnfmDocNo] as const, - registPage: (jobSeSp: string) => - [...instlSncnKeys.all, "regist-page", jobSeSp] as const, - viewPage: (instlCnfmDocNo: string) => - [...instlSncnKeys.all, "view-page", instlCnfmDocNo] as const, -}; - -/** - * 설치인가 목록 페이지 로드 (카운트 + 목록 + 페이지네이션) - */ -export function useListPageLoadCnfm(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.list(vo), - queryFn: () => instlSncnService.listPageLoadCnfm(vo), - }); -} - -/** - * 설치인가 등록 페이지 로드 (체크리스트 + 필수첨부파일) - */ -export function useRegistPageLoadCnfm(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.registPage(vo.jobSeSp || ""), - queryFn: () => instlSncnService.registPageLoadCnfm(vo), - enabled: !!vo.jobSeSp, - }); -} - -/** - * 설치인가 상세/수정 페이지 로드 - */ -export function useViewPageLoadCnfm(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.viewPage(vo.instlCnfmDocNo || ""), - queryFn: () => instlSncnService.viewPageLoadCnfm(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 목록 카운트 조회 - */ -export function useSelectInstlCnfmListCnt(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.lists(), "count", vo], - queryFn: () => instlSncnService.selectInstlCnfmListCount(vo), - }); -} - -/** - * 설치인가 목록 조회 - */ -export function useSelectInstlCnfmList(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.list(vo), - queryFn: () => instlSncnService.selectInstlCnfmList(vo), - }); -} - -/** - * 설치인가 상세 조회 - */ -export function useSelectInstlCnfmDtl(vo: FnrscVO) { - return useQuery({ - queryKey: instlSncnKeys.dtl(vo.instlCnfmDocNo || ""), - queryFn: () => instlSncnService.selectInstlCnfmDetail(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 신규 등록 - */ -export function useInsertInstlCnfm() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: ({ vo, files }: { vo: FnrscVO; files?: File[] }) => - instlSncnService.insertInstlCnfm(vo, files), - onSuccess: () => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - }, - }); -} - -/** - * 설치인가 수정 (병합) - */ -export function useMergeInstlCnfm() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: ({ vo, files }: { vo: FnrscVO; files?: File[] }) => - instlSncnService.mergeInstlCnfm(vo, files), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.vo.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.vo.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.vo.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 삭제 - */ -export function useDeleteInstlCnfm() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: (vo: FnrscVO) => instlSncnService.deleteInstlCnfm(vo), - onSuccess: () => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - }, - }); -} - -/** - * 설치인가 진행상태 업데이트 - */ -export function useUpdatePrgrsSttusCnfm() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: (vo: FnrscVO) => - instlSncnService.updateProgrsSttusCnfm(vo), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 진행상태 저장 (검토의견 + 파일) - */ -export function useSaveInstlCnfmPrgrsStts() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: ({ vo, file }: { vo: FnrscVO; file?: File }) => - instlSncnService.saveInstlCnfmProgrsSttus(vo, file), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.vo.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.vo.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.vo.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 기술검토 최종결재 - */ -export function useSaveInstlCnfmSanctnPrgrsStts() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: (vo: FnrscVO) => - instlSncnService.saveInstlCnfmSanctnProgrsSttus(vo), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 보완요청 등록 - */ -export function useInsertInstlCnfmSpl() { - const queryClient = useQueryClient(); - - return useMutation({ - mutationFn: (vo: FnrscVO) => instlSncnService.insertInstlCnfmSpl(vo), - onSuccess: (_, variables) => { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.lists(), - }); - if (variables.instlCnfmDocNo) { - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.dtl(variables.instlCnfmDocNo), - }); - queryClient.invalidateQueries({ - queryKey: instlSncnKeys.viewPage(variables.instlCnfmDocNo), - }); - } - }, - }); -} - -/** - * 설치인가 필수 첨부파일 목록 조회 - */ -export function useSelectEssntlInstlCnfmAtchFileList(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.all, "essential-files", vo.instlCnfmDocNo], - queryFn: () => instlSncnService.selectEssntlInstlCnfmAtchFileList(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 검토의견 첨부파일 조회 - */ -export function useSelectInstlCnfmExmntFile(vo: FnrscVO) { - return useQuery({ - queryKey: [ - ...instlSncnKeys.all, - "exmnt-files", - vo.instlCnfmDocNo, - vo.exmntOpinionSeqNo, - ], - queryFn: () => instlSncnService.selectInstlCnfmExmntFile(vo), - enabled: !!vo.instlCnfmDocNo && !!vo.exmntOpinionSeqNo, - }); -} - -/** - * 설치인가 기타 첨부파일 조회 - */ -export function useSelectInstlCnfmEtcFile(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.all, "etc-files", vo.instlCnfmDocNo], - queryFn: () => instlSncnService.selectInstlCnfmEtcFile(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 보완요청 조회 - */ -export function useSelectInstlCnfmSpl(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.all, "supplement", vo.instlCnfmDocNo], - queryFn: () => instlSncnService.selectInstlCnfmSpl(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} - -/** - * 설치인가 검토결과 조회 - */ -export function useSelectInstlCnfmExmntResult(vo: FnrscVO) { - return useQuery({ - queryKey: [ - ...instlSncnKeys.all, - "exmnt-result", - vo.instlCnfmDocNo, - vo.jobSe, - ], - queryFn: () => instlSncnService.selectInstlCnfmExmntResult(vo), - enabled: !!vo.instlCnfmDocNo && !!vo.jobSe, - }); -} - -/** - * 설치인가 담당자 목록 조회 - */ -export function useSelectInstlCnfmOpinionList(vo: FnrscVO) { - return useQuery({ - queryKey: [...instlSncnKeys.all, "opinion-list", vo.instlCnfmDocNo], - queryFn: () => instlSncnService.selectInstlCnfmOpinionList(vo), - enabled: !!vo.instlCnfmDocNo, - }); -} diff --git a/apps/as/src/entities/instl-sncn/index.ts b/apps/as/src/entities/instl-sncn/index.ts deleted file mode 100644 index 40b412b7f..000000000 --- a/apps/as/src/entities/instl-sncn/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -export type { - PrgrsStts, - FnrscVO, - JobSeItem, - CeckVO, - AtchFile, - ExmntOpinion, - SplmntRqst, - ListPageResult, - RegistPageData, - ViewPageData, - InstlSncnService, -} from "./model"; - -export { - PRGRS_STTS_LABELS, - PRGRS_STTS_OPTIONS, - JOB_TYPE_CODE, - DEFAULT_PAGE_SIZE, - DEFAULT_RECORD_COUNT_PER_PAGE, -} from "./model"; - -export { - instlSncnService, - instlSncnKeys, - useListPageLoadCnfm, - useRegistPageLoadCnfm, - useViewPageLoadCnfm, - useSelectInstlCnfmListCnt, - useSelectInstlCnfmList, - useSelectInstlCnfmDtl, - useInsertInstlCnfm, - useMergeInstlCnfm, - useDeleteInstlCnfm, - useUpdatePrgrsSttusCnfm, - useSaveInstlCnfmPrgrsStts, - useSaveInstlCnfmSanctnPrgrsStts, - useInsertInstlCnfmSpl, - useSelectEssntlInstlCnfmAtchFileList, - useSelectInstlCnfmExmntFile, - useSelectInstlCnfmEtcFile, - useSelectInstlCnfmSpl, - useSelectInstlCnfmExmntResult, - useSelectInstlCnfmOpinionList, -} from "./api"; - -export { - fmtPrgrsStts, - fmtJobSeComma, - jobSeSpSummary, - parseJobSeSpArr, - fmtFileSize, - fmtDt, - vldtInstlSncnForm, - canAply, - canDel, - canMdfy, - canRqstSplmnt, - canAprv, - type VldtnErr, -} from "./lib"; diff --git a/apps/as/src/entities/instl-sncn/lib/format.ts b/apps/as/src/entities/instl-sncn/lib/format.ts deleted file mode 100644 index 3b16cff56..000000000 --- a/apps/as/src/entities/instl-sncn/lib/format.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { PRGRS_STTS_LABELS, type PrgrsStts } from "../model"; - -export function fmtPrgrsStts(stts: PrgrsStts): string { - return PRGRS_STTS_LABELS[stts] || stts; -} - -export function fmtJobSeComma(jobSe: string): string { - if (!jobSe) return ""; - return jobSe.split("").join(","); -} - -export function jobSeSpSummary(jobSeSp: string): string { - if (!jobSeSp) return ""; - return jobSeSp.replace(/,/g, ""); -} - -export function parseJobSeSpArr(jobSeSp: string): string[] { - if (!jobSeSp) return []; - return jobSeSp.split(",").filter(Boolean); -} - -export function fmtFileSize(bytes: number): string { - if (bytes === 0) return "0 Bytes"; - - const k = 1024; - const sizes = ["Bytes", "KB", "MB", "GB"]; - const i = Math.floor(Math.log(bytes) / Math.log(k)); - - return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + " " + sizes[i]; -} - -export function fmtDt(dtString: string | undefined): string { - if (!dtString) return "-"; - - try { - const dt = new Date(dtString); - return new Intl.DateTimeFormat("ko-KR", { - year: "numeric", - month: "2-digit", - day: "2-digit", - hour: "2-digit", - minute: "2-digit", - }).format(dt); - } catch { - return dtString; - } -} diff --git a/apps/as/src/entities/instl-sncn/lib/index.ts b/apps/as/src/entities/instl-sncn/lib/index.ts deleted file mode 100644 index 9333d229e..000000000 --- a/apps/as/src/entities/instl-sncn/lib/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -export { - fmtPrgrsStts, - fmtJobSeComma, - jobSeSpSummary, - parseJobSeSpArr, - fmtFileSize, - fmtDt, -} from "./format"; - -export { - vldtInstlSncnForm, - canAply, - canDel, - canMdfy, - canRqstSplmnt, - canAprv, - type VldtnErr, -} from "./validation"; diff --git a/apps/as/src/entities/instl-sncn/lib/validation.ts b/apps/as/src/entities/instl-sncn/lib/validation.ts deleted file mode 100644 index 97860ccaa..000000000 --- a/apps/as/src/entities/instl-sncn/lib/validation.ts +++ /dev/null @@ -1,73 +0,0 @@ -import type { FnrscVO } from "../model"; - -export interface VldtnErr { - field: string; - message: string; -} - -export function vldtInstlSncnForm(data: FnrscVO): VldtnErr[] { - const errors: VldtnErr[] = []; - - if (!data.jobSe) { - errors.push({ - field: "jobSe", - message: "업무구분을 선택해주세요.", - }); - } - - if (!data.bplcNm || data.bplcNm.trim() === "") { - errors.push({ - field: "bplcNm", - message: "사업장명을 입력해주세요.", - }); - } - - if (!data.fcltNm || data.fcltNm.trim() === "") { - errors.push({ - field: "fcltNm", - message: "시설명을 입력해주세요.", - }); - } - - return errors; -} - -export function canAply(data: FnrscVO): boolean { - const errors = vldtInstlSncnForm(data); - return errors.length === 0; -} - -export function canDel( - prgrsStts: string | undefined, - regId: string | undefined, - currentUsrId: string -): boolean { - return prgrsStts === "SV" && regId === currentUsrId; -} - -export function canMdfy( - prgrsStts: string | undefined, - regId: string | undefined, - currentUsrId: string -): boolean { - return ( - (prgrsStts === "SV" || prgrsStts === "SL") && regId === currentUsrId - ); -} - -export function canRqstSplmnt( - prgrsStts: string | undefined, - usrRole: string -): boolean { - return ( - (prgrsStts === "ER" || prgrsStts === "PR") && - (usrRole === "REVIEWER" || usrRole === "APPROVER") - ); -} - -export function canAprv( - prgrsStts: string | undefined, - usrRole: string -): boolean { - return prgrsStts === "PE" && usrRole === "APPROVER"; -} diff --git a/apps/as/src/entities/instl-sncn/model/constants.ts b/apps/as/src/entities/instl-sncn/model/constants.ts deleted file mode 100644 index e8bea4018..000000000 --- a/apps/as/src/entities/instl-sncn/model/constants.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { PrgrsStts } from "./types"; - -export const PRGRS_STTS_LABELS: Record = { - SV: "저장", - ST: "신청", - SL: "보완요청", - ER: "기술검토중", - EE: "기술검토완료", - PR: "환경청검토중", - PE: "환경청검토완료", - AP: "승인", - RJ: "반려", -} as const; - -export const PRGRS_STTS_OPTIONS = [ - { value: "SV", label: "저장" }, - { value: "ST", label: "신청" }, - { value: "SL", label: "보완요청" }, - { value: "ER", label: "기술검토중" }, - { value: "EE", label: "기술검토완료" }, - { value: "PR", label: "환경청검토중" }, - { value: "PE", label: "환경청검토완료" }, - { value: "AP", label: "승인" }, - { value: "RJ", label: "반려" }, -] as const; - -export const JOB_TYPE_CODE = "FNR01" as const; - -export const DEFAULT_PAGE_SIZE = 10 as const; -export const DEFAULT_RECORD_COUNT_PER_PAGE = 10 as const; diff --git a/apps/as/src/entities/instl-sncn/model/index.ts b/apps/as/src/entities/instl-sncn/model/index.ts deleted file mode 100644 index 7c8c73489..000000000 --- a/apps/as/src/entities/instl-sncn/model/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -export type { - PrgrsStts, - FnrscVO, - JobSeItem, - CeckVO, - AtchFile, - ExmntOpinion, - SplmntRqst, - ListPageResult, - RegistPageData, - ViewPageData, -} from "./types"; - -export { - PRGRS_STTS_LABELS, - PRGRS_STTS_OPTIONS, - JOB_TYPE_CODE, - DEFAULT_PAGE_SIZE, - DEFAULT_RECORD_COUNT_PER_PAGE, -} from "./constants"; - -export type { InstlSncnService } from "./instl-sncn-service"; diff --git a/apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts b/apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts deleted file mode 100644 index 74a35cef9..000000000 --- a/apps/as/src/entities/instl-sncn/model/instl-sncn-service.ts +++ /dev/null @@ -1,151 +0,0 @@ -import type { - FnrscVO, - CeckVO, - AtchFile, - SplmntRqst, - ListPageResult, - RegistPageData, - ViewPageData, -} from "./types"; - -/** - * 설치인가 서비스 인터페이스 - * Java CnfmService.java의 TypeScript 버전 - */ -export interface InstlSncnService { - /** - * 설치인가 목록 카운트 조회 - * @param vo 검색 조건 - * @returns 목록 개수 - */ - selectInstlCnfmListCount(vo: FnrscVO): Promise; - - /** - * 설치인가 목록 조회 - * @param vo 검색 조건 - * @returns 설치인가 목록 - */ - selectInstlCnfmList(vo: FnrscVO): Promise; - - /** - * 설치인가 목록 페이지 로드 (카운트 + 목록 + 페이지네이션) - * @param vo 검색 조건 - * @returns 목록 페이지 데이터 - */ - listPageLoadCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 등록 페이지 로드 (체크리스트 + 필수첨부파일) - * @param vo jobSeSp 포함 - * @returns 등록 페이지 데이터 - */ - registPageLoadCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 데이터 저장 (신규) - * @param vo 설치인가 VO - * @param files 첨부파일 목록 - */ - insertInstlCnfm(vo: FnrscVO, files?: File[]): Promise; - - /** - * 설치인가 데이터 병합 (수정) - * @param vo 설치인가 VO - * @param files 첨부파일 목록 - */ - mergeInstlCnfm(vo: FnrscVO, files?: File[]): Promise; - - /** - * 설치인가 상세 데이터 조회 - * @param vo instlCnfmDocNo 포함 - * @returns 설치인가 상세 정보 - */ - selectInstlCnfmDetail(vo: FnrscVO): Promise; - - /** - * 설치인가 상세/수정 페이지 로드 - * @param vo instlCnfmDocNo 포함 - * @returns 상세 페이지 데이터 - */ - viewPageLoadCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 진행상태 업데이트 - * @param vo instlCnfmDocNo, progrsSttus 포함 - */ - updateProgrsSttusCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 진행상태 저장 (검토의견 + 파일) - * @param vo instlCnfmDocNo, progrsSttus, exmntOpinionCn 포함 - * @param file 첨부파일 - */ - saveInstlCnfmProgrsSttus(vo: FnrscVO, file?: File): Promise; - - /** - * 설치인가 기술검토 최종결재 - * @param vo instlCnfmDocNo, progrsSttus 포함 - */ - saveInstlCnfmSanctnProgrsSttus(vo: FnrscVO): Promise; - - /** - * 설치인가 삭제 - * @param vo instlCnfmDocNo 포함 - */ - deleteInstlCnfm(vo: FnrscVO): Promise; - - /** - * 설치인가 신청 첨부파일 목록 - * @param vo instlCnfmDocNo 포함 - * @returns 필수 첨부파일 목록 - */ - selectEssntlInstlCnfmAtchFileList(vo: FnrscVO): Promise; - - /** - * 설치인가 의견 첨부파일 - * @param vo instlCnfmDocNo, exmntOpinionSeqNo 포함 - * @returns 검토의견 첨부파일 목록 - */ - selectInstlCnfmExmntFile(vo: FnrscVO): Promise; - - /** - * 설치인가 기타 첨부파일 - * @param vo instlCnfmDocNo 포함 - * @returns 기타 첨부파일 목록 - */ - selectInstlCnfmEtcFile(vo: FnrscVO): Promise; - - /** - * 설치인가 결재권자 조회 - * @param vo instlCnfmDocNo, regId 포함 - * @returns 결재권자 정보 - */ - selectInstlCnfmSanctnManage(vo: FnrscVO): Promise>; - - /** - * 설치인가 보완요청 등록 - * @param vo instlCnfmDocNo, splCn 포함 - */ - insertInstlCnfmSpl(vo: FnrscVO): Promise; - - /** - * 설치인가 보완요청 조회 - * @param vo instlCnfmDocNo 포함 - * @returns 보완요청 정보 - */ - selectInstlCnfmSpl(vo: FnrscVO): Promise; - - /** - * 설치인가 검토결과 조회 - * @param vo instlCnfmDocNo, jobSe 포함 - * @returns 검토결과 목록 - */ - selectInstlCnfmExmntResult(vo: FnrscVO): Promise; - - /** - * 설치인가 담당자 정보 조회 - * @param vo instlCnfmDocNo 포함 - * @returns 담당자 목록 - */ - selectInstlCnfmOpinionList(vo: FnrscVO): Promise; -} diff --git a/apps/as/src/entities/instl-sncn/model/types.ts b/apps/as/src/entities/instl-sncn/model/types.ts deleted file mode 100644 index ce61009c1..000000000 --- a/apps/as/src/entities/instl-sncn/model/types.ts +++ /dev/null @@ -1,158 +0,0 @@ -export type PrgrsStts = - | "SV" // 저장 - | "ST" // 신청 - | "SL" // 보완요청 - | "ER" // 기술검토 - | "EE" // 기술검토완료 - | "PR" // 환경청검토 - | "PE" // 환경청검토완료 - | "AP" // 승인 - | "RJ"; // 반려 - -export interface FnrscVO { - fnrscDscssDocNo?: string; - instlCnfmDocNo?: string; - seqNo?: string; - yr?: string; - bzCd?: string; - bzNm?: string; - strtYr?: string; - edYr?: string; - dtlBzCd?: string; - untBzCd?: string; - rgnCd?: string; - rgnNm?: string; - rvbsnCd?: string; - adstDstrCd?: string; - adstDstrNm?: string; - bzSpec?: string; - aidRt?: string; - confBzCd?: string; - bzPd?: string; - bzCn?: string; - jobSe?: string; - jobSeSp?: string; - jobSeList?: Array; - jobSeNm?: string; - fcltyKnd?: string; - reusePrpos?: string; - progrsSttus?: PrgrsStts; - fileSeq?: number; - regId?: string; - regDt?: string; - udtId?: string; - udtDt?: string; - registMan?: string; - updtMan?: string; - registDe?: string; - updtDe?: string; - atchFileId?: string; - grpCd?: string; - bplcNm?: string; - fcltNm?: string; - lclgvrnmntNm?: string; - localCd?: string; - exmntOpinionSeqNo?: string; - exmntOpinionCn?: string; - scdExmntOpinionSeqNo?: string; - prmyExmntOpinionSeqNo?: string; - splCn?: string; - pageIndex?: number; - recordCountPerPage?: number; - pageSize?: number; - searchKeyword?: string; - searchCondition?: string; -} - -export interface JobSeItem { - jobSeCd: string; - jobSeNm: string; -} - -export interface CeckVO { - ceckSn: string; - ceckCn: string; - ceckResultAt?: "Y" | "N"; - ceckResultCn?: string; - jobSe: string; -} - -export interface AtchFile { - atchFileId: string; - fileSn: string; - fileStreCours: string; - streFileNm: string; - orignlFileNm: string; - fileExtsn: string; - fileMg: number; - fileType?: string; - essntlAt?: "Y" | "N"; -} - -export interface ExmntOpinion { - exmntOpinionSeqNo: string; - instlCnfmDocNo: string; - exmntOpinionCn: string; - exmntResultAt?: "Y" | "N"; - atchFileList?: AtchFile[]; - regId?: string; - regDt?: string; -} - -export interface SplmntRqst { - splSeqNo: string; - instlCnfmDocNo: string; - splCn: string; - splDt?: string; - regId?: string; - regDt?: string; -} - -export interface ListPageResult { - cnt: number; - list: FnrscVO[]; - pageIndex: number; - lastPage: number; - paginationInfo: { - currentPageNo: number; - recordCountPerPage: number; - pageSize: number; - totalRecordCount: number; - lastPageNo: number; - }; - searchVO: FnrscVO; -} - -export interface RegistPageData { - ceckEssntlArr: Array<{ - jobSeCd: string; - jobSeNm: string; - ceckForm1: CeckVO[]; - essntlList: FnrscVO[]; - }>; - jobSe: string; - jobSeSp: string; - grpCd: string; - adstDstrCd: string; - lclgvrnmntNm: string; - localCd: string; -} - -export interface ViewPageData { - view: FnrscVO; - jobSeSp: string; - ceckEssntlArr: Array<{ - jobSeCd: string; - jobSeNm: string; - ceckForm1: FnrscVO[]; - essntlList: FnrscVO[]; - }>; - prmyFileList: FnrscVO[]; - scdFileList: FnrscVO[]; - etcFileList: FnrscVO[]; - grpCd: string; - usrId: string; - sanctnChk: Record; - spl: SplmntRqst | null; - opinionList: FnrscVO[]; -} diff --git a/apps/as/src/entities/menu/index.ts b/apps/as/src/entities/menu/index.ts index 03aed8131..cb55d9a1c 100644 --- a/apps/as/src/entities/menu/index.ts +++ b/apps/as/src/entities/menu/index.ts @@ -1 +1 @@ -export { type MenuItem } from "./model"; +export { type MenuItem } from "./model/types"; diff --git a/apps/as/src/entities/menu/model/index.ts b/apps/as/src/entities/menu/model/index.ts deleted file mode 100644 index 89ebe7381..000000000 --- a/apps/as/src/entities/menu/model/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { type MenuItem } from "./types"; diff --git a/apps/as/src/pages/auth/login/index.ts b/apps/as/src/pages/auth/login/index.ts new file mode 100644 index 000000000..2093c3d8d --- /dev/null +++ b/apps/as/src/pages/auth/login/index.ts @@ -0,0 +1 @@ +export { LoginPage } from "./ui/login-page"; diff --git a/apps/as/src/pages/auth/login/ui/login-page.tsx b/apps/as/src/pages/auth/login/ui/login-page.tsx new file mode 100644 index 000000000..2926a2ebe --- /dev/null +++ b/apps/as/src/pages/auth/login/ui/login-page.tsx @@ -0,0 +1,120 @@ +"use client"; + +import { useState } from "react"; +import Image from "next/image"; + +import { LoginApi } from "@/entities/auth"; +import { images } from "@common/assets"; + +import "./login.css"; + +function LoginPage() { + const [errorMessage, setErrorMessage] = useState(""); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setErrorMessage(""); // 에러 메시지 초기화 + + const formData = new FormData(e.target as HTMLFormElement); + const userId = formData.get("id") as string; + const password = formData.get("password") as string; + + try { + await LoginApi.login({ userId, password }); + window.location.href = "/"; + } catch (error) { + const message = error instanceof Error ? error.message : "로그인에 실패했습니다."; + setErrorMessage(message); + } + }; + + return ( +
+ ); +} + +export { LoginPage }; diff --git a/apps/as/src/pages/auth/login/ui/login.css b/apps/as/src/pages/auth/login/ui/login.css new file mode 100755 index 000000000..e8029fdb1 --- /dev/null +++ b/apps/as/src/pages/auth/login/ui/login.css @@ -0,0 +1,325 @@ +/** +* OLYM Cascading Style Sheets +* File Name : login.css +* Description : 로그인 스타일시트 +* Author : Web business Team / Choi Hyun Mi +* Email : desingtj@olym.co.kr +* Date : 2023.07.20 +* Update : 2023.07.26 +* Copyright(c) 2023 OLYM Communications. All Rights Reserved. +*/ +html, +body { + background: #fff; +} +.fx { + display: flex; + -ms-display: flex; + -webkit-display: flex; + box-sizing: border-box; +} +.login { + width: 100%; + height: 100vh; +} +.login .left_box { + width: 100%; + background: url(../../../../../public/images/bg_login.jpg) no-repeat + center/cover; + flex-direction: column; + justify-content: space-between; + padding: 7% 5% 5% 5%; +} +.login .left_box .text h1 { + font-size: 53px; + color: #fff; +} +.login .left_box .text h1 span { + font-weight: 800; +} +.login .left_box .text p { + margin-top: 40px; + font-size: 18px; + color: #fff; +} +.login .login_box { + width: 100%; + flex-direction: column; + justify-content: center; + padding: 4% 12% 4% 6%; +} +.login .login_box > ul { + flex-direction: column; + gap: 40px; +} +.login .login_box > ul > li h2 { + font-size: 22px; + font-weight: 600; + color: #2640a5; + margin-bottom: 14px; +} +.login .login_box > ul > li .input_st { + position: relative; +} +.login .login_box > ul > li .input_st .diveicon { + position: absolute; + top: 50%; + left: 28px; + transform: translateY(-50%); + font-family: "Xeicon"; + font-size: 25px; + color: #003288; +} +.login .login_box > ul > li input { + width: 100%; + padding: 20px 20px 20px 70px; + background: #f7f7f7; + box-sizing: border-box; + border: none; + border-radius: 5px; + font-size: 18px; + font-weight: 700; + color: #000; + height: auto; +} +.login .login_box > ul > li input:focus { + outline: 1px solid #3c5fe5; +} +.login .login_box > ul > li input::placeholder { + color: #afabab; + font-weight: 500; +} +.login .login_box .bottom_box { + justify-content: space-between; + gap: 20px; + padding: 50px 0 45px 0; +} +.login .login_box .bottom_box .checks { + display: flex; + align-items: center; + gap: 8px; +} +.login .login_box .bottom_box .checks input[type="checkbox"] { + width: 18px; + height: 18px; +} +.login .login_box .bottom_box .checks label { + font-size: 14px; +} +.login .login_box .bottom_box .pw_message { + align-items: center; + gap: 5px; + color: #636363; + font-weight: 500; + border-bottom: 1px solid #ccc; + padding-bottom: 5px; +} +.login .login_box .bottom_box .pw_message i { + color: #327af5; + font-size: 20px; +} +.login .login_box .error_message { + margin: 20px 0; + padding: 12px 20px; + background: #fee; + border: 1px solid #fcc; + border-radius: 5px; + color: #c33; + font-size: 14px; + text-align: center; +} +.login .login_box .error_message span { + display: block; + font-weight: 500; +} +.login .login_box .login_btn { + position: relative; + border-radius: 5px; + padding: 24px 15px; + background: linear-gradient( + to left, + #1d3969 0%, + #264078 10%, + #172558 40%, + #162254 50%, + #111c43 60%, + #111c42 100% + ); + overflow: hidden; + justify-content: center; + align-items: center; + gap: 10px; + color: #fff; + cursor: pointer; +} +.login .login_box .login_btn span { + font-family: "Montserrat"; + font-size: 19px; + font-weight: 700; + position: relative; +} +.login .login_box .login_btn i { + font-size: 22px; + transform: translateY(-2px); +} +.login .login_box .login_btn:before { + display: block; + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + background: linear-gradient( + to right, + #1d3969 0%, + #264078 10%, + #172558 40%, + #162254 50%, + #111c43 60%, + #111c42 100% + ); + transition: opacity 0.5s; +} +.login .login_box .login_btn:hover::before { + opacity: 1; +} +.login .footer .copy { + margin-top: 36px; + justify-content: space-between; + align-items: center; + gap: 3%; +} +.login .footer .copy p { + font-size: 13px; + color: #d4d4d4; + width: 44%; + text-align: center; +} +.login .footer .copy::before, +.login .login_box .copy::after { + content: ""; + width: 20%; + height: 1px; + background: #d4d4d4; +} +.login .footer .fot_btn { + gap: 20px; + margin: 30px 0 10px 0; +} +.login .footer .fot_btn a { + color: #333; + font-weight: 700; + font-size: 13px; +} +.login .footer .fot_btn a:hover { + color: #003288; +} +.login .footer .addr { + color: #666; + font-size: 13px; + gap: 3px 20px; + flex-wrap: wrap; +} +/* 비밀번호 변경 팝업창 */ +.login .modal .modal_container { + width: 750px; +} +.login .pw_desc { + padding: 10px 10px 30px 10px; + color: #666; +} +.login .pw_desc p { + font-size: 1.25rem; + color: #000; + font-weight: 700; + margin-bottom: 10px; +} +.login .pw_desc span { + color: #f60; + font-weight: 700; +} +.login .modal .form_write { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + padding: 20px 50px; +} +@media (max-width: 1024px) { + .login { + flex-direction: column; + height: auto; + } + .login .left_box { + padding: 30px; + flex-direction: column-reverse; + gap: 20px; + } + .login .left_box .text h1 { + font-size: 30px; + line-height: 1.2em; + } + .login .left_box .text p { + margin-top: 20px; + font-size: 14px; + } + .login .left_box .img img { + height: 40px; + } + .login .login_box { + padding: 30px; + } + .login .login_box > ul { + gap: 20px; + } + .login .login_box > ul > li h2 { + margin-bottom: 7px; + } + .login .login_box > ul > li .input_st::after { + left: 15px; + font-size: 20px; + } + .login .login_box > ul > li input { + padding: 15px 10px 15px 50px; + font-size: 16px; + } + .login .login_box .bottom_box { + flex-direction: column; + align-items: flex-start; + padding: 30px 0; + } + .login .login_box .bottom_box .id_save label { + font-size: 14px; + } + .login .login_box .login_btn { + padding: 15px; + } + .login .login_box .login_btn span { + font-size: 16px; + } + .login .login_box .login_btn i { + font-size: 18px; + transform: translateY(-1px); + } + .login .login_box .copy p { + width: 100%; + } + .login .login_box .copy::before, + .login .login_box .copy::after { + display: none; + } + .login .footer .addr { + font-size: 11px; + gap: 3px 10px; + } + .login .modal .modal_container { + width: 90%; + } + .login .pw_desc { + padding: 0 0 20px 0; + } + .login .modal .form_write { + padding: 10px; + } +} +/* // login */ diff --git a/apps/as/src/pages/home/index.ts b/apps/as/src/pages/home/index.ts new file mode 100644 index 000000000..97a463408 --- /dev/null +++ b/apps/as/src/pages/home/index.ts @@ -0,0 +1 @@ +export { MainPage } from "./ui/main-page"; diff --git a/apps/as/src/pages/home/ui/main-page.tsx b/apps/as/src/pages/home/ui/main-page.tsx new file mode 100644 index 000000000..f757224dc --- /dev/null +++ b/apps/as/src/pages/home/ui/main-page.tsx @@ -0,0 +1,9 @@ +"use client"; + +export function MainPage() { + return ( +
+

Home

+
+ ); +} diff --git a/apps/as/src/pages/instl-sncn/index.ts b/apps/as/src/pages/instl-sncn/index.ts deleted file mode 100644 index b9127c3a1..000000000 --- a/apps/as/src/pages/instl-sncn/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { InstlSncnListPage } from "./ui/list-page"; diff --git a/apps/as/src/pages/instl-sncn/model/table-columns.tsx b/apps/as/src/pages/instl-sncn/model/table-columns.tsx deleted file mode 100644 index e53a7fad4..000000000 --- a/apps/as/src/pages/instl-sncn/model/table-columns.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { createColumnHelper } from "@tanstack/react-table"; -import type { FnrscVO } from "@/entities/instl-sncn"; -import { Badge } from "@common/components"; - -const columnHelper = createColumnHelper(); - -const LIST_STEPS = ["저장", "신청완료", "기술검토", "검토결과 회신"] as const; - -function stepIndex(status: string | undefined): number { - if (!status) return 0; - const map: Record = { - SV: 0, - ST: 1, - LE: 2, - SL: 2, - ER: 2, - TE: 2, - TR: 2, - TP: 2, - EE: 2, - TA: 3, - }; - return map[status] ?? 0; -} - -function ProgrsSttusCell({ value }: { value?: string }) { - const current = stepIndex(value); - return ( -
- {LIST_STEPS.map((label, i) => ( - <> - - {label} - - {i < LIST_STEPS.length - 1 && ( - - )} - - ))} -
- ); -} - -export const instlSncnListColumns = [ - columnHelper.accessor("adstDstrNm", { - id: "adstDstrNm", - header: "지자체", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.accessor("bzNm", { - id: "bzNm", - header: "사업명", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.accessor("jobSeNm", { - id: "jobSeNm", - header: "업무구분", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.accessor("regId", { - id: "regId", - header: "담당자", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.accessor("rgnNm", { - id: "rgnNm", - header: "해당기관", - cell: (info) => info.getValue() ?? "-", - }), - columnHelper.display({ - id: "progrsSttus", - header: "진행상황", - cell: (info) => , - }), - columnHelper.accessor("regDt", { - id: "regDt", - header: "시행일", - cell: (info) => info.getValue() ?? "-", - }), -]; diff --git a/apps/as/src/pages/instl-sncn/ui/list-page.tsx b/apps/as/src/pages/instl-sncn/ui/list-page.tsx deleted file mode 100644 index 6aecea351..000000000 --- a/apps/as/src/pages/instl-sncn/ui/list-page.tsx +++ /dev/null @@ -1,178 +0,0 @@ -"use client"; - -import { useState, useCallback } from "react"; -import { useRouter } from "next/navigation"; -import { fakerKO as faker } from "@faker-js/faker"; -import { - Button, - DataTable, - Input, - Label, - LoadingWithAnimation, - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@common/components"; -import { getCoreRowModel, useReactTable } from "@tanstack/react-table"; -import { useListPageLoadCnfm } from "@/entities/instl-sncn"; -import type { FnrscVO } from "@/entities/instl-sncn"; -import { instlSncnListColumns } from "../model/table-columns"; - -const PAGE_SIZE = 10; -const JOB_SE_OPTIONS = [ - { value: "ALL", label: "전체" }, - { value: "SF", label: "하수처리시설" }, - { value: "SP", label: "하수관로" }, - { value: "RE", label: "재이용수" }, -] as const; - -function buildMockFnrscVO(): FnrscVO { - return { - instlCnfmDocNo: faker.string.alphanumeric(10), - adstDstrNm: faker.location.city(), - bzNm: faker.company.name(), - jobSeNm: faker.helpers.arrayElement(["하수처리시설", "하수관로", "재이용수"]), - regId: faker.person.fullName(), - rgnNm: faker.company.name(), - progrsSttus: faker.helpers.arrayElement(["SV", "ST", "SL", "ER", "EE", "PR", "PE", "AP", "RJ"]), - regDt: faker.date.past().toISOString().slice(0, 10), - }; -} - -const MOCK_LIST: FnrscVO[] = Array.from({ length: PAGE_SIZE }, () => buildMockFnrscVO()); - -export function InstlSncnListPage() { - const router = useRouter(); - const [bzNm, setBzNm] = useState(""); - const [jobSeNm, setJobSeNm] = useState("ALL"); - const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: PAGE_SIZE }); - - const searchVO: FnrscVO = { - bzNm: bzNm.trim() || undefined, - jobSeNm: jobSeNm === "ALL" ? undefined : jobSeNm, - pageIndex: pagination.pageIndex + 1, - recordCountPerPage: PAGE_SIZE, - pageSize: PAGE_SIZE, - }; - - const { data, isPending, isError } = useListPageLoadCnfm(searchVO); - const list = data?.list && data.list.length > 0 ? data.list : MOCK_LIST; - const totalCount = data?.cnt ?? list.length; - const pageCount = data?.paginationInfo?.lastPageNo ?? 1; - - const handleSearch = useCallback((e: React.FormEvent) => { - e.preventDefault(); - setPagination((p) => ({ ...p, pageIndex: 0 })); - }, []); - - const handleRowClick = useCallback( - (row: FnrscVO) => { - if (row.instlCnfmDocNo) { - router.push(`/instl-sncn/${row.instlCnfmDocNo}`); - } - }, - [router], - ); - - const handleRegist = useCallback(() => { - router.push("/instl-sncn/regist"); - }, [router]); - - const table = useReactTable({ - data: list, - columns: instlSncnListColumns, - getCoreRowModel: getCoreRowModel(), - manualPagination: true, - pageCount, - state: { - pagination, - }, - onPaginationChange: setPagination, - }); - - const isEmpty = list.length === 0; - - return ( -
-
-
- - setBzNm(e.target.value)} - onKeyDown={(e) => e.key === "Enter" && handleSearch(e as unknown as React.FormEvent)} - /> -
-
- - -
- -
- -
-
-

- 검색된 리스트 ({totalCount}) -

- -
- -
- {isPending && ( -
-
- -
-
- )} - {/* {isError && ( -
- 목록을 불러오는 중 오류가 발생했습니다. -
- )} */} - {!isPending && !isError && isEmpty && ( -
- 목록이 존재하지 않습니다. -
- )} - {!isPending && !isEmpty && ( -
- -
- )} -
-
-
- ); -} diff --git a/apps/as/src/shared/api/client.ts b/apps/as/src/shared/api/client.ts index d7c4a8f1d..061e1de99 100644 --- a/apps/as/src/shared/api/client.ts +++ b/apps/as/src/shared/api/client.ts @@ -1,9 +1,9 @@ +import { PROXY_HOST, SITE_ID } from "@/shared/config"; import { Client } from "@common/network"; -import { PROXY_HOST, SITE_ID } from "@/shared/config/env"; const BASE_URL = `${PROXY_HOST}/server`; -export const apiClient = Client.getInstance({ +export const client = Client.getInstance({ baseURL: BASE_URL, siteId: SITE_ID, }); diff --git a/apps/as/src/shared/api/index.ts b/apps/as/src/shared/api/index.ts index c5eb98066..0b96ffaa1 100644 --- a/apps/as/src/shared/api/index.ts +++ b/apps/as/src/shared/api/index.ts @@ -1 +1 @@ -export { apiClient } from "./client"; +export { client } from "./client"; diff --git a/apps/as/src/shared/config/api.ts b/apps/as/src/shared/config/api.ts new file mode 100644 index 000000000..154aa1052 --- /dev/null +++ b/apps/as/src/shared/config/api.ts @@ -0,0 +1,9 @@ +export const ENDPOINT = { + USER_SERVICE: { + LOGIN: "/user-service/login", + SILENT_REFRESH: "/user-service/api/v1/users/token/refresh", + USERS: "/user-service/api/v1/users", + }, +}; + +export const JWT_EXPIRATION_TIME = 1800000; diff --git a/apps/as/src/shared/config/env.ts b/apps/as/src/shared/config/env.ts index 4f08c722a..4625722bd 100644 --- a/apps/as/src/shared/config/env.ts +++ b/apps/as/src/shared/config/env.ts @@ -1,11 +1,10 @@ export const PORT = process.env.NEXT_PUBLIC_PORT || "3000"; -export const PROXY_HOST = - process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; -export const SERVER_API_URL = process.env.NEXT_PUBLIC_SERVER_API_URL; +export const PROXY_HOST = process.env.NEXT_PUBLIC_PROXY_HOST || `http://localhost:${PORT}`; export const SITE_ID = process.env.NEXT_PUBLIC_SITE_ID || "AS"; +export const SERVER_API_URL = process.env.SERVER_API_URL; +export const AUTH_LOGIN_REDIRECT_URL = + process.env.NEXT_PUBLIC_AUTH_LOGIN_REDIRECT_URL || "/auth/login"; export const CLAIM_NAME = process.env.NEXT_PUBLIC_CLAIM_NAME || "Authorization"; -export const ACCESS_TOKEN = - process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; -export const REFRESH_TOKEN = - process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; +export const ACCESS_TOKEN = process.env.NEXT_PUBLIC_ACCESS_TOKEN || "access-token"; +export const REFRESH_TOKEN = process.env.NEXT_PUBLIC_REFRESH_TOKEN || "refresh-token"; export const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id"; diff --git a/apps/as/src/shared/config/index.ts b/apps/as/src/shared/config/index.ts index c76f8cd47..856d35f87 100644 --- a/apps/as/src/shared/config/index.ts +++ b/apps/as/src/shared/config/index.ts @@ -1 +1,2 @@ +export * from "./api"; export * from "./env"; diff --git a/apps/as/src/shared/lib/cookie.ts b/apps/as/src/shared/lib/cookie.ts index 6557cb81d..8f5d0011b 100644 --- a/apps/as/src/shared/lib/cookie.ts +++ b/apps/as/src/shared/lib/cookie.ts @@ -1,22 +1,29 @@ -import Cookies from "js-cookie"; - -export function getCookie(name: string): string | undefined { - if (typeof window === "undefined") { - return undefined; - } - return Cookies.get(name); -} - -export function setCookie(name: string, value: string, options?: Cookies.CookieAttributes): void { - if (typeof window === "undefined") { - return; - } - Cookies.set(name, value, options); -} - -export function removeCookie(name: string, options?: Cookies.CookieAttributes): void { - if (typeof window === "undefined") { - return; - } - Cookies.remove(name, options); -} +import Cookies from "js-cookie"; + +export function getCookie(name: string): string | undefined { + if (typeof window === "undefined") { + return undefined; + } + return Cookies.get(name); +} + +export function setCookie( + name: string, + value: string, + options?: Cookies.CookieAttributes, +): void { + if (typeof window === "undefined") { + return; + } + Cookies.set(name, value, options); +} + +export function removeCookie( + name: string, + options?: Cookies.CookieAttributes, +): void { + if (typeof window === "undefined") { + return; + } + Cookies.remove(name, options); +} diff --git a/apps/as/src/shared/lib/dayjs.ts b/apps/as/src/shared/lib/dayjs.ts index 28b3f908b..62c6cef6e 100644 --- a/apps/as/src/shared/lib/dayjs.ts +++ b/apps/as/src/shared/lib/dayjs.ts @@ -1,8 +1,9 @@ import dayjs from "dayjs"; -import "dayjs/locale/ko"; -import utc from "dayjs/plugin/utc"; -import timezone from "dayjs/plugin/timezone"; import relativeTime from "dayjs/plugin/relativeTime"; +import timezone from "dayjs/plugin/timezone"; +import utc from "dayjs/plugin/utc"; + +import "dayjs/locale/ko"; dayjs.extend(utc); dayjs.extend(timezone); diff --git a/apps/as/src/shared/lib/index.ts b/apps/as/src/shared/lib/index.ts index 26a6d4551..013c429d1 100644 --- a/apps/as/src/shared/lib/index.ts +++ b/apps/as/src/shared/lib/index.ts @@ -1,3 +1,4 @@ -export { queryClient } from "./query-client"; +export { getCookie, removeCookie, setCookie } from "./cookie"; export { dayjs } from "./dayjs"; -export { getCookie, setCookie, removeCookie } from "./cookie"; +export { queryClient } from "./query-client"; +export { useUserStore } from "./use-user-store"; diff --git a/apps/as/src/shared/lib/use-user-store.ts b/apps/as/src/shared/lib/use-user-store.ts new file mode 100644 index 000000000..8aa5085a9 --- /dev/null +++ b/apps/as/src/shared/lib/use-user-store.ts @@ -0,0 +1,16 @@ +import { useContext } from "react"; + +import { useStore } from "zustand"; + +import { StoreContext } from "../providers"; +import type { UserStore } from "../store"; + +export const useUserStore = (selector: (store: UserStore) => T): T => { + const storeContext = useContext(StoreContext); + + if (!storeContext) { + throw new Error("useUserStore must be used within StoreProvider"); + } + + return useStore(storeContext.userStore, selector); +}; diff --git a/apps/as/src/shared/providers/index.ts b/apps/as/src/shared/providers/index.ts new file mode 100644 index 000000000..e19453b80 --- /dev/null +++ b/apps/as/src/shared/providers/index.ts @@ -0,0 +1 @@ +export { StoreContext, StoreProvider } from "./store-provider"; diff --git a/apps/as/src/shared/providers/store-provider.tsx b/apps/as/src/shared/providers/store-provider.tsx new file mode 100644 index 000000000..4ebb2151e --- /dev/null +++ b/apps/as/src/shared/providers/store-provider.tsx @@ -0,0 +1,22 @@ +"use client"; + +import { createContext, useRef } from "react"; + +import { createUserStore } from "../store"; + +type StoreContextType = { + userStore: ReturnType; +}; + +export const StoreContext = createContext(undefined); + +export const StoreProvider = ({ children }: { children: React.ReactNode }) => { + const storeRef = useRef(null); + if (storeRef.current === null) { + storeRef.current = { + userStore: createUserStore(), + }; + } + + return {children}; +}; diff --git a/apps/as/src/shared/store/index.ts b/apps/as/src/shared/store/index.ts new file mode 100644 index 000000000..8a0f34588 --- /dev/null +++ b/apps/as/src/shared/store/index.ts @@ -0,0 +1 @@ +export { createUserStore, type IUserInfo, type UserStore } from "./user-store"; diff --git a/apps/as/src/shared/store/user-store.ts b/apps/as/src/shared/store/user-store.ts new file mode 100644 index 000000000..65d897cf1 --- /dev/null +++ b/apps/as/src/shared/store/user-store.ts @@ -0,0 +1,57 @@ +import { createStore } from "zustand/vanilla"; + +export interface IUserInfo { + regDt: string; + mdfcnDt: string; + rgtr: string; + mdfr: string; + adminRoleYn: string; + userUnqId: string; + userId: string; + userName: string; + email: string; + encryptedPassword: string; + refreshToken: string; + userStateCode: string; + lastLoginDate: string; + loginFailCount: number; + pswdHnt: string; + pswdAns: string; + mphn: string; + telno: string; + zip: string; + addr: string; + daddr: string; + laeSeCd: string; + ogdpSeCd: string; + aprvYn: string; + autzrId: string; + expryYmd: string; + lastPswdChgDt: string; + googleId: string; + kakaoId: string; + naverId: string; + isSocialUser: boolean; + hasPassword: boolean; +} + +export type UserState = { + userInfo: IUserInfo | null; +}; + +export type UserActions = { + setUserInfo: (userInfo: IUserInfo | null) => void; +}; + +export type UserStore = UserState & UserActions; + +export const defaultInitState: UserState = { + userInfo: null, +}; + +export const createUserStore = (initState: UserState = defaultInitState) => { + return createStore()((set) => ({ + ...initState, + setUserInfo: (userInfo: IUserInfo | null) => set(() => ({ userInfo })), + })); +}; diff --git a/apps/as/tailwind.config.ts b/apps/as/tailwind.config.ts index e51b76dd9..d19dec7ed 100644 --- a/apps/as/tailwind.config.ts +++ b/apps/as/tailwind.config.ts @@ -4,8 +4,12 @@ import presetConfig from "../../tailwind.config.preset"; const config: Config = { presets: [presetConfig], content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./shared/**/*.{js,ts,jsx,tsx,mdx}", + "./entities/**/*.{js,ts,jsx,tsx,mdx}", + "./features/**/*.{js,ts,jsx,tsx,mdx}", + "./widgets/**/*.{js,ts,jsx,tsx,mdx}", "./app/**/*.{js,ts,jsx,tsx,mdx}", - "./src/**/*.{js,ts,jsx,tsx,mdx}", "../../packages/common/components/dist/**/*.{js,ts,jsx,tsx,mdx}", ], theme: { diff --git a/apps/as/tsconfig.json b/apps/as/tsconfig.json index 8428fd5c2..dab9b0b8e 100644 --- a/apps/as/tsconfig.json +++ b/apps/as/tsconfig.json @@ -13,7 +13,11 @@ "isolatedModules": true, "jsx": "preserve", "incremental": true, - "plugins": [{ "name": "next" }], + "plugins": [ + { + "name": "next" + } + ], "paths": { "@/*": ["./src/*"], "@common/components": ["../../packages/common/components/dist/"], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8cc097be..c9efd7b97 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,9 +138,6 @@ importers: '@common/network': specifier: workspace:* version: link:../../packages/common/network - '@faker-js/faker': - specifier: ^10.3.0 - version: 10.3.0 '@hookform/resolvers': specifier: ^4.1.3 version: 4.1.3(react-hook-form@7.72.0(react@19.2.4)) @@ -172,6 +169,9 @@ importers: specifier: ^3.24.2 version: 3.25.76 devDependencies: + '@eslint/eslintrc': + specifier: ^3 + version: 3.3.5 '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 @@ -179,8 +179,11 @@ importers: specifier: ^9.0.0 version: 9.39.4(jiti@2.6.1) eslint-config-next: - specifier: 15.4.0 - version: 15.4.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + specifier: 15.3.8 + version: 15.3.8(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-react-hooks: + specifier: ^5.0.0 + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) postcss: specifier: ^8.4.49 version: 8.5.8 @@ -2497,10 +2500,6 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@faker-js/faker@10.3.0': - resolution: {integrity: sha512-It0Sne6P3szg7JIi6CgKbvTZoMjxBZhcv91ZrqrNuaZQfB5WoqYYbzCUOq89YR+VY8juY9M1vDWmDDa2TzfXCw==} - engines: {node: ^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0, npm: '>=10'} - '@faker-js/faker@9.9.0': resolution: {integrity: sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} @@ -2796,9 +2795,6 @@ packages: '@next/eslint-plugin-next@15.3.8': resolution: {integrity: sha512-CKpvDZhNXPUjUHmjHddcsqjwj46oQblFms2hr2uA79C0kVTiSXQEQxkawUsDNSofHhTI31IbSeBdVyuk/U1nKw==} - '@next/eslint-plugin-next@15.4.0': - resolution: {integrity: sha512-dlGuj2B76ltswtpdDFQJfTlu6ux0v+EUYzsAYR1IqxqHi5iMPWhPRztgu8eqQZo4uNYkABKzLCmVeGDwbTYTiw==} - '@next/swc-darwin-arm64@15.3.5': resolution: {integrity: sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w==} engines: {node: '>= 10'} @@ -5032,15 +5028,6 @@ packages: typescript: optional: true - eslint-config-next@15.4.0: - resolution: {integrity: sha512-OFkQ8br0wuZNRlXDyLpfaCwzW+qayzNaiHNcLHDMW874/1Nktb2+cCUMlItXdzDvNS/QY5jggKlYXEH2+vz1BA==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -7999,8 +7986,6 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@faker-js/faker@10.3.0': {} - '@faker-js/faker@9.9.0': {} '@feature-sliced/filesystem@3.0.1': @@ -8293,10 +8278,6 @@ snapshots: dependencies: fast-glob: 3.3.1 - '@next/eslint-plugin-next@15.4.0': - dependencies: - fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.3.5': optional: true @@ -10812,7 +10793,7 @@ snapshots: eslint: 9.39.4(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@1.21.7)) @@ -10843,26 +10824,6 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-next@15.4.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@next/eslint-plugin-next': 15.4.0 - '@rushstack/eslint-patch': 1.16.1 - '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@2.6.1)) - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 @@ -10882,7 +10843,7 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)) transitivePeerDependencies: - supports-color @@ -10923,7 +10884,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 From 4928778b02b37c35ce0718b388162f961c67077a Mon Sep 17 00:00:00 2001 From: bicochan Date: Tue, 12 May 2026 14:48:42 +0900 Subject: [PATCH 23/39] =?UTF-8?q?chore:=20client=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/src/shared/api/client.ts | 4 ++++ packages/common/components/src/api/client.ts | 7 ++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/as/src/shared/api/client.ts b/apps/as/src/shared/api/client.ts index 061e1de99..22008492b 100644 --- a/apps/as/src/shared/api/client.ts +++ b/apps/as/src/shared/api/client.ts @@ -1,6 +1,10 @@ import { PROXY_HOST, SITE_ID } from "@/shared/config"; import { Client } from "@common/network"; +import { setCookie } from "../lib"; + +setCookie("site-id-key", SITE_ID); + const BASE_URL = `${PROXY_HOST}/server`; export const client = Client.getInstance({ diff --git a/packages/common/components/src/api/client.ts b/packages/common/components/src/api/client.ts index 46d5291fd..0226a4f9a 100644 --- a/packages/common/components/src/api/client.ts +++ b/packages/common/components/src/api/client.ts @@ -1,17 +1,14 @@ import { Client } from "@common/network"; import { getConfig } from "@common/config"; -import { getCookie } from "../lib"; - -const siteId = getCookie("site-id-key") ?? ""; const getClientInstance = () => { const config = getConfig(); - const { PROXY_HOST } = config; + const { PROXY_HOST, SITE_ID } = config; const BASE_URL = `${PROXY_HOST}/server`; return Client.getInstance({ baseURL: BASE_URL, - siteId, + siteId: SITE_ID ?? "", }); }; From 8d8b01071714942791c7c9daf9eeda4b522a4293 Mon Sep 17 00:00:00 2001 From: ljpark Date: Tue, 12 May 2026 15:04:19 +0900 Subject: [PATCH 24/39] =?UTF-8?q?wr:=20type=EC=98=A4=EB=A5=98=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/.eslintrc.ts | 6 ++++++ apps/wr/app/store/common/searchCode/index.ts | 14 ++++++++------ .../ui/form/coMat/conCostForm/conCostForm.tsx | 3 ++- 3 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 apps/wr/.eslintrc.ts diff --git a/apps/wr/.eslintrc.ts b/apps/wr/.eslintrc.ts new file mode 100644 index 000000000..9c0110d98 --- /dev/null +++ b/apps/wr/.eslintrc.ts @@ -0,0 +1,6 @@ +module.exports = { + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.eslint.json", + }, +}; \ No newline at end of file diff --git a/apps/wr/app/store/common/searchCode/index.ts b/apps/wr/app/store/common/searchCode/index.ts index b572307f5..f1c46820d 100644 --- a/apps/wr/app/store/common/searchCode/index.ts +++ b/apps/wr/app/store/common/searchCode/index.ts @@ -64,8 +64,8 @@ type comFcltActions = { updateDemandCompany: (data: DemandCompType) => Promise; getConstCostFee: (year: string) => void; getRateFee: (year: string) => void; - getConstCostFeeRtn: (year: string) => conCostFeeType[]; - getRateFeeRtn: (year: string) => rateFeeType[]; + getRateFeeRtn: (year: string) => Promise; + getConstCostFeeRtn: (year: string) => Promise; }; export const comFcltSearchAction: (set: any) => comFcltActions = (set: any) => { @@ -180,6 +180,7 @@ export const comFcltSearchAction: (set: any) => comFcltActions = (set: any) => { return rateFeeRes; } catch (e) { console.log(" error ", e); + return []; } }, // 공사금액 (공사비 산정표) 조회 : ONSEMIRO_NEW.EM_STD_COST_REUSE 설치관리표준사업비 재이용시설 공사비 @@ -196,20 +197,21 @@ export const comFcltSearchAction: (set: any) => comFcltActions = (set: any) => { }); } catch (e) { - console.log('getConstCostFee ', e) + console.log('getConstCostFee ', e); + } }, // 공사금액 (공사비 산정표) 조회 : ONSEMIRO_NEW.EM_STD_COST_REUSE 설치관리표준사업비 재이용시설 공사비 - getConstCostFeeRtn: async (year: string) => { + getConstCostFeeRtn: async (year: string): Promise => { try { const url = `/prcsFclt/CstRuse/${year}`; const constCost = await getFetch(fetchType.COMMON, url); return constCost; } catch (e) { - console.log('getConstCostFee ', e) + console.log('getConstCostFee ', e); + return []; } - } }; }; diff --git a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx index 85b2cfaf1..09ed01987 100644 --- a/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx +++ b/apps/wr/components/ui/form/coMat/conCostForm/conCostForm.tsx @@ -432,7 +432,8 @@ export default function ConCostForm({ selectClass="rounded-md" selectArray={code.sewageOutFclttUse || []} onSelectValue={field.onChange} - value={field.value} + value={field.value ?? ""} + className="" /> ) : ( Date: Tue, 12 May 2026 15:14:10 +0900 Subject: [PATCH 25/39] =?UTF-8?q?ci:=20ecosystem.config=20as=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecosystem.config.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ecosystem.config.js b/ecosystem.config.js index 497e040bc..80a252714 100644 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -52,6 +52,18 @@ module.exports = { error_file: './logs/cm-error.log', out_file: './logs/cm-out.log', }, + { + ...common, + + name: 'as-app', + cwd: './apps/as', + + script: 'node_modules/next/dist/bin/next', + args: 'start -p 3003', + + error_file: './logs/cm-error.log', + out_file: './logs/cm-out.log', + }, { ...common, From 715dec5fe508515b49e1f1dff01813188c207a9a Mon Sep 17 00:00:00 2001 From: LGS Date: Tue, 12 May 2026 15:28:12 +0900 Subject: [PATCH 26/39] =?UTF-8?q?=EB=AC=BC=20=EC=9E=AC=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=20=EC=86=8C=EA=B0=9C=20>=20=EB=AC=BC=20=EC=9E=AC=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=20=EB=B2=95=20=EA=B4=80=EB=A0=A8=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95=EB=B3=B8=20?= =?UTF-8?q?=EC=9E=AC=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../images/landing/intro/law_timeline.png | Bin 131773 -> 128990 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/dm/public/images/landing/intro/law_timeline.png b/apps/dm/public/images/landing/intro/law_timeline.png index 68cd72d17bdf70d9a7fc2cffcb6740311ebaf8c0..56ff1c347e8225ec44e1fc1bd882dc1df9676d1c 100644 GIT binary patch literal 128990 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%0D5n0gGPGj0D75hy5QNx-S?Es-b?rM5yl;1O~O~V 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