From bcee356f06fec3ffb185ea2797694cf019543e0f Mon Sep 17 00:00:00 2001 From: Akshat Kotpalliwar Date: Thu, 3 Apr 2025 01:51:51 +0530 Subject: [PATCH 01/23] init --- eslint.config.mjs | 35 +++++++++++ frontend/index.ts | 38 +++++++++++ nest-cli.json | 8 +++ src/app.module.ts | 25 ++++++++ src/auth/auth.controller.ts | 20 ++++++ src/auth/auth.module.ts | 10 +++ src/auth/auth.service.ts | 14 +++++ src/config/config.module.ts | 9 +++ src/container/container.controller.ts | 19 ++++++ src/container/container.module.ts | 10 +++ src/container/container.service.ts | 51 +++++++++++++++ src/db/database.module.ts | 20 ++++++ src/deployment/deployment.controller.ts | 13 ++++ src/deployment/deployment.module.ts | 13 ++++ src/deployment/deployment.service.ts | 40 ++++++++++++ src/htmx/htmx.controller.ts | 64 +++++++++++++++++++ src/htmx/htmx.module.ts | 13 ++++ src/htmx/htmx.service.ts | 47 ++++++++++++++ src/main.ts | 11 ++++ src/redis/redis.module.ts | 9 +++ src/redis/redis.service.ts | 24 +++++++ src/subdomain/subdomain.controller.ts | 20 ++++++ src/subdomain/subdomain.module.ts | 10 +++ src/subdomain/subdomain.service.ts | 83 +++++++++++++++++++++++++ src/user/user.controller.ts | 18 ++++++ src/user/user.entity.ts | 23 +++++++ src/user/user.module.ts | 13 ++++ src/user/user.service.ts | 32 ++++++++++ src/utils/container.util.ts | 32 ++++++++++ src/utils/server.util.ts | 79 +++++++++++++++++++++++ tsconfig.build.json | 4 ++ tsconfig.json | 39 +++++------- 32 files changed, 822 insertions(+), 24 deletions(-) create mode 100644 eslint.config.mjs create mode 100644 frontend/index.ts create mode 100644 nest-cli.json create mode 100644 src/app.module.ts create mode 100644 src/auth/auth.controller.ts create mode 100644 src/auth/auth.module.ts create mode 100644 src/auth/auth.service.ts create mode 100644 src/config/config.module.ts create mode 100644 src/container/container.controller.ts create mode 100644 src/container/container.module.ts create mode 100644 src/container/container.service.ts create mode 100644 src/db/database.module.ts create mode 100644 src/deployment/deployment.controller.ts create mode 100644 src/deployment/deployment.module.ts create mode 100644 src/deployment/deployment.service.ts create mode 100644 src/htmx/htmx.controller.ts create mode 100644 src/htmx/htmx.module.ts create mode 100644 src/htmx/htmx.service.ts create mode 100644 src/main.ts create mode 100644 src/redis/redis.module.ts create mode 100644 src/redis/redis.service.ts create mode 100644 src/subdomain/subdomain.controller.ts create mode 100644 src/subdomain/subdomain.module.ts create mode 100644 src/subdomain/subdomain.service.ts create mode 100644 src/user/user.controller.ts create mode 100644 src/user/user.entity.ts create mode 100644 src/user/user.module.ts create mode 100644 src/user/user.service.ts create mode 100644 src/utils/container.util.ts create mode 100644 src/utils/server.util.ts create mode 100644 tsconfig.build.json diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..32465cc --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,35 @@ +// @ts-check +import eslint from '@eslint/js'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + { + ignores: ['eslint.config.mjs'], + }, + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + eslintPluginPrettierRecommended, + { + languageOptions: { + globals: { + ...globals.node, + ...globals.jest, + }, + ecmaVersion: 5, + sourceType: 'module', + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-floating-promises': 'warn', + '@typescript-eslint/no-unsafe-argument': 'warn' + }, + }, +); \ No newline at end of file diff --git a/frontend/index.ts b/frontend/index.ts new file mode 100644 index 0000000..f8aa9ed --- /dev/null +++ b/frontend/index.ts @@ -0,0 +1,38 @@ +document.getElementById('loginForm')?.addEventListener('submit', async (e: Event) => { + e.preventDefault(); + const loginButton = document.getElementById('loginButton') as HTMLButtonElement; + const errorMessage = document.getElementById('errorMessage') as HTMLDivElement; + + // Reset UI state + errorMessage.style.display = 'none'; + loginButton.disabled = true; + loginButton.textContent = 'Logging in...'; + + const githubUsername = (document.getElementById('githubUsername') as HTMLInputElement).value; + const passKey = (document.getElementById('passKey') as HTMLInputElement).value; + + try { + const response = await fetch('/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ githubUsername, passKey }), + credentials: 'same-origin' + }); + + if (response.ok) { + window.location.href = '/'; // Redirect to the dashboard + } else { + const data = await response.json(); + errorMessage.textContent = data.message || 'Invalid credentials'; + errorMessage.style.display = 'block'; + } + } catch (error) { + errorMessage.textContent = 'Connection error. Please try again.'; + errorMessage.style.display = 'block'; + } finally { + loginButton.disabled = false; + loginButton.textContent = 'Login'; + } +}); \ No newline at end of file diff --git a/nest-cli.json b/nest-cli.json new file mode 100644 index 0000000..f9aa683 --- /dev/null +++ b/nest-cli.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "deleteOutDir": true + } +} diff --git a/src/app.module.ts b/src/app.module.ts new file mode 100644 index 0000000..eb4aa21 --- /dev/null +++ b/src/app.module.ts @@ -0,0 +1,25 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule } from './config/config.module'; +import { AuthModule } from './auth/auth.module'; +import { ContainerModule } from './container/container.module'; +import { DeploymentModule } from './deployment/deployment.module'; +import { UserModule } from './user/user.module'; +import { DatabaseModule } from './db/database.module'; +import { RedisModule } from './redis/redis.module'; +import { SubdomainModule } from './subdomain/subdomain.module'; +import { HtmxModule } from './htmx/htmx.module'; + +@Module({ + imports: [ + ConfigModule, + AuthModule, + ContainerModule, + DeploymentModule, + UserModule, // Import the UserModule here + DatabaseModule, + RedisModule, + SubdomainModule, + HtmxModule, + ], +}) +export class AppModule {} diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts new file mode 100644 index 0000000..d7d8007 --- /dev/null +++ b/src/auth/auth.controller.ts @@ -0,0 +1,20 @@ +// src/auth/auth.controller.ts +import { Controller, Post, Req, Res, UseGuards } from '@nestjs/common'; +import { Request, Response } from 'express'; +import { AuthService } from './auth.service'; + +@Controller('auth') +export class AuthController { + constructor(private readonly authService: AuthService) {} + + @Post('login') + async login(@Req() req: Request, @Res() res: Response) { + const { githubUsername, passKey } = req.body; + const sessionId = await this.authService.login(githubUsername, passKey); + if (sessionId) { + res.cookie('sessionId', sessionId, { httpOnly: true, secure: false }); + return res.status(200).json({ message: 'Login successful', githubUsername }); + } + return res.status(401).json({ message: 'Unauthorized' }); + } +} diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts new file mode 100644 index 0000000..39afe0f --- /dev/null +++ b/src/auth/auth.module.ts @@ -0,0 +1,10 @@ +// src/auth/auth.module.ts +import { Module } from '@nestjs/common'; +import { AuthService } from './auth.service'; +import { AuthController } from './auth.controller'; + +@Module({ + providers: [AuthService], + controllers: [AuthController], +}) +export class AuthModule {} diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts new file mode 100644 index 0000000..21cee9d --- /dev/null +++ b/src/auth/auth.service.ts @@ -0,0 +1,14 @@ +// src/auth/auth.service.ts +import { Injectable } from '@nestjs/common'; +import { createDirectory } from '../utils/container.util'; + +@Injectable() +export class AuthService { + login(githubUsername: string, passKey: string): string | null { + if (passKey === process.env.PASS_KEY) { + createDirectory(githubUsername); + return Math.random().toString(36).substring(2); // Generate session ID + } + return null; + } +} diff --git a/src/config/config.module.ts b/src/config/config.module.ts new file mode 100644 index 0000000..b5f83b8 --- /dev/null +++ b/src/config/config.module.ts @@ -0,0 +1,9 @@ +// src/config/config.module.ts +import { Module } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; + +@Module({ + providers: [ConfigService], + exports: [ConfigService], +}) +export class ConfigModule {} diff --git a/src/container/container.controller.ts b/src/container/container.controller.ts new file mode 100644 index 0000000..802b4cc --- /dev/null +++ b/src/container/container.controller.ts @@ -0,0 +1,19 @@ +// src/container/container.controller.ts +import { Controller, Post, Body, Res } from '@nestjs/common'; +import { Response } from 'express'; +import { ContainerService } from './container.service'; + +@Controller('container') +export class ContainerController { + constructor(private readonly containerService: ContainerService) {} + + @Post('run') + async runContainer(@Body() body: any, @Res() res: Response) { + try { + const result = await this.containerService.runContainer(body); + res.json(result); + } catch (error) { + res.status(500).json({ error: 'Deployment failed', message: error.message }); + } + } +} diff --git a/src/container/container.module.ts b/src/container/container.module.ts new file mode 100644 index 0000000..ac83a9d --- /dev/null +++ b/src/container/container.module.ts @@ -0,0 +1,10 @@ +// src/container/container.module.ts +import { Module } from '@nestjs/common'; +import { ContainerService } from './container.service'; +import { ContainerController } from './container.controller'; + +@Module({ + providers: [ContainerService], + controllers: [ContainerController], +}) +export class ContainerModule {} diff --git a/src/container/container.service.ts b/src/container/container.service.ts new file mode 100644 index 0000000..0df9b38 --- /dev/null +++ b/src/container/container.service.ts @@ -0,0 +1,51 @@ +// src/container/container.service.ts +import { Injectable } from '@nestjs/common'; +import { exec } from 'child_process'; +import { promisify } from 'util'; +import { createDirectory } from '../utils/container.util'; +import { DeploymentService } from '../deployment/deployment.service'; +import { SubdomainService } from '../subdomain/subdomain.service'; + +const execAsync = promisify(exec); + +@Injectable() +export class ContainerService { + constructor( + private readonly deploymentService: DeploymentService, + private readonly subdomainService: SubdomainService, + ) {} + + async runContainer(body: any) { + const { userName, projectName, repoLink, entryPoint, buildCommand, runCommand } = body; + + await this.deploymentService.trackDeployment(userName); + + const imageName = `${userName.toLowerCase()}-${projectName}`; + const port = await this.getPort(8081); + + await this.createImage(userName, projectName, repoLink, entryPoint, buildCommand, runCommand); + const { stdout } = await execAsync(`podman run -d -p ${port}:8080 -t localhost/${imageName}:latest`); + + const containerId = stdout.trim(); + await this.subdomainService.setupSubdomain(containerId.substring(0, 12), port, containerId); + + return { containerId, imageName, status: 'deployed' }; + } + + private async getPort(findPort: number): Promise { + const server = require('net').createServer(); + return new Promise((resolve) => { + server.once('error', (err) => resolve(err.code === 'EADDRINUSE' ? this.getPort(findPort + 1) : findPort)); + server.once('listening', () => server.close(() => resolve(findPort))); + server.listen(findPort); + }); + } + + private async createImage(userName: string, projectName: string, repoLink: string, entryPoint: string, buildCommand: string, runCommand: string) { + createDirectory(userName); + process.chdir(`/home/${process.env.LINUX_USER}/${userName.toLowerCase()}`); + await execAsync(`git clone ${repoLink}`); + process.chdir(projectName); + await execAsync(`buildah build -t ${userName.toLowerCase()}-${projectName} .`); + } +} diff --git a/src/db/database.module.ts b/src/db/database.module.ts new file mode 100644 index 0000000..0d743c2 --- /dev/null +++ b/src/db/database.module.ts @@ -0,0 +1,20 @@ +// src/db/database.module.ts +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Deployment } from '../user/user.entity'; + +@Module({ + imports: [ + TypeOrmModule.forRoot({ + type: 'postgres', + host: process.env.DATABASE_HOST || 'localhost', + port: parseInt(process.env.DATABASE_PORT, 10) || 5432, + username: process.env.DATABASE_USERNAME || 'postgres', + password: process.env.DATABASE_PASSWORD || 'password', + database: process.env.DATABASE_NAME || 'flexhost', + entities: [Deployment], + synchronize: true, + }), + ], +}) +export class DatabaseModule {} diff --git a/src/deployment/deployment.controller.ts b/src/deployment/deployment.controller.ts new file mode 100644 index 0000000..6c79ab2 --- /dev/null +++ b/src/deployment/deployment.controller.ts @@ -0,0 +1,13 @@ +// src/deployment/deployment.controller.ts +import { Controller, Get, Query } from '@nestjs/common'; +import { DeploymentService } from './deployment.service'; + +@Controller('deployment') +export class DeploymentController { + constructor(private readonly deploymentService: DeploymentService) {} + + @Get() + async getDeployments(@Query('userName') userName: string) { + return this.deploymentService.getDeployments(userName); + } +} diff --git a/src/deployment/deployment.module.ts b/src/deployment/deployment.module.ts new file mode 100644 index 0000000..aee1268 --- /dev/null +++ b/src/deployment/deployment.module.ts @@ -0,0 +1,13 @@ +// src/deployment/deployment.module.ts +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { DeploymentService } from './deployment.service'; +import { DeploymentController } from './deployment.controller'; +import { Deployment } from '../user/user.entity'; + +@Module({ + imports: [TypeOrmModule.forFeature([Deployment])], + providers: [DeploymentService], + controllers: [DeploymentController], +}) +export class DeploymentModule {} diff --git a/src/deployment/deployment.service.ts b/src/deployment/deployment.service.ts new file mode 100644 index 0000000..2819a12 --- /dev/null +++ b/src/deployment/deployment.service.ts @@ -0,0 +1,40 @@ +// src/deployment/deployment.service.ts +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { Deployment } from '../user/user.entity'; +import { RedisService } from '../redis/redis.service'; + +@Injectable() +export class DeploymentService { + constructor( + @InjectRepository(Deployment) + private readonly deploymentRepository: Repository, + private readonly redisService: RedisService, + ) {} + + async getDeployments(userName: string) { + return this.deploymentRepository.find({ where: { userName } }); + } + + async addDeployment(projectName: string, userName: string, containerId: string) { + const deployment = new Deployment(); + deployment.userName = userName; + deployment.projectName = projectName; + deployment.status = 'deployed'; + deployment.time = new Date(); + deployment.containerId = containerId; + await this.deploymentRepository.save(deployment); + + await this.redisService.set(userName.toLowerCase(), 'true'); + } + + async trackDeployment(userName: string): Promise { + const key = userName.toLowerCase(); + const existing = await this.redisService.get(key); + if (existing) { + throw new Error('Deployment limit reached'); + } + await this.redisService.set(key, 'true'); + } +} diff --git a/src/htmx/htmx.controller.ts b/src/htmx/htmx.controller.ts new file mode 100644 index 0000000..d472833 --- /dev/null +++ b/src/htmx/htmx.controller.ts @@ -0,0 +1,64 @@ +// src/htmx/htmx.controller.ts +import { Controller, Post, Get, Query, Body, Res } from '@nestjs/common'; +import { Response } from 'express'; +import { HtmxService } from './htmx.service'; + +@Controller('htmx') +export class HtmxController { + constructor(private readonly htmxService: HtmxService) {} + + @Post() + async runContainer(@Body() body: any, @Res() res: Response) { + const { userName, buildCommand, runCommand, repoLink, entryPoint } = body; + try { + const result = await this.htmxService.runContainer(userName, repoLink, entryPoint, buildCommand, runCommand); + res.send(`

Container ID: ${result.containerId}

`); + } catch (error) { + console.error('Error:', error); + res.send('

Error deploying container

'); + } + } + + @Get('deployments') + async getDeployments(@Query('userName') userName: string, @Res() res: Response) { + try { + const deployments = await this.htmxService.getDeployments(userName.toLowerCase()); + if (!deployments || deployments.length === 0) { + return res.send('

No deployments found

'); + } + const deploymentsHTML = deployments + .map((deployment) => ` +
+

${deployment.project_name}

+

Status: ${deployment.status}

+

Deployed at: ${new Date(deployment.time).toLocaleString()}

+

Deployment ID: ${deployment.container_id}

+
+ `) + .join(''); + res.send(` +
+ ${deploymentsHTML} +
+ `); + } catch (error) { + console.error('Error fetching deployments:', error); + res.send('

Error fetching deployments

'); + } + } + + @Get('subscription') + async getSubscription(@Query('userName') userName: string, @Res() res: Response) { + try { + const subscription = await this.htmxService.getSubscription(userName.toLowerCase()); + if (subscription) { + res.send(`

You are in free tier

Upgrade to premium to get more deployments

`); + } else { + res.send(`

You are in free tier

You can deploy one application

`); + } + } catch (error) { + console.error('Error fetching subscription:', error); + res.send('

Error fetching subscription

'); + } + } +} diff --git a/src/htmx/htmx.module.ts b/src/htmx/htmx.module.ts new file mode 100644 index 0000000..f376b75 --- /dev/null +++ b/src/htmx/htmx.module.ts @@ -0,0 +1,13 @@ +// src/htmx/htmx.module.ts +import { Module } from '@nestjs/common'; +import { HtmxService } from './htmx.service'; +import { HtmxController } from './htmx.controller'; +import { DeploymentModule } from '../deployment/deployment.module'; +import { RedisModule } from '../redis/redis.module'; + +@Module({ + imports: [DeploymentModule, RedisModule], + providers: [HtmxService], + controllers: [HtmxController], +}) +export class HtmxModule {} diff --git a/src/htmx/htmx.service.ts b/src/htmx/htmx.service.ts new file mode 100644 index 0000000..8b167aa --- /dev/null +++ b/src/htmx/htmx.service.ts @@ -0,0 +1,47 @@ +// src/htmx/htmx.service.ts +import { Injectable } from '@nestjs/common'; +import { DeploymentService } from '../deployment/deployment.service'; +import { RedisService } from '../redis/redis.service'; + +@Injectable() +export class HtmxService { + constructor( + private readonly deploymentService: DeploymentService, + private readonly redisService: RedisService, + ) {} + + async runContainer(userName: string, repoLink: string, entryPoint: string, buildCommand?: string, runCommand?: string) { + const projectName = repoLink.split('/').pop()?.split('.')[0] || ''; + const redisData = await this.redisService.get(userName.toLowerCase()); + if (redisData) { + throw new Error('Deployments limit reached'); + } + const response = await fetch('http://localhost:8080/v1/runContainer', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + userName, + projectName, + repoLink, + buildCommand: buildCommand || 'npm install', + runCommand: runCommand || 'node', + entryPoint, + }), + }); + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + throw new Error(errorData.message || 'Error occurred'); + } + + return response.json(); + } + + async getDeployments(userName: string) { + return this.deploymentService.getDeployments(userName); + } + + async getSubscription(userName: string) { + return this.redisService.get(userName.toLowerCase()); + } +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..8890efc --- /dev/null +++ b/src/main.ts @@ -0,0 +1,11 @@ +// src/main.ts +import { NestFactory } from '@nestjs/core'; +import { AppModule } from './app.module'; + +async function bootstrap() { + const app = await NestFactory.create(AppModule); + app.enableCors(); + await app.listen(8080); + console.log('Server is running on port 8080'); +} +bootstrap(); diff --git a/src/redis/redis.module.ts b/src/redis/redis.module.ts new file mode 100644 index 0000000..c3b2835 --- /dev/null +++ b/src/redis/redis.module.ts @@ -0,0 +1,9 @@ +// src/redis/redis.module.ts +import { Module } from '@nestjs/common'; +import { RedisService } from './redis.service'; + +@Module({ + providers: [RedisService], + exports: [RedisService], +}) +export class RedisModule {} diff --git a/src/redis/redis.service.ts b/src/redis/redis.service.ts new file mode 100644 index 0000000..d6c027f --- /dev/null +++ b/src/redis/redis.service.ts @@ -0,0 +1,24 @@ +// src/redis/redis.service.ts +import { Injectable } from '@nestjs/common'; +import Redis from 'ioredis'; + +@Injectable() +export class RedisService { + private client: Redis; + + constructor() { + this.client = new Redis(process.env.REDIS_URL || 'redis://localhost:6379'); + } + + async set(key: string, value: string): Promise { + await this.client.set(key, value); + } + + async get(key: string): Promise { + return this.client.get(key); + } + + async delete(key: string): Promise { + await this.client.del(key); + } +} diff --git a/src/subdomain/subdomain.controller.ts b/src/subdomain/subdomain.controller.ts new file mode 100644 index 0000000..38659ba --- /dev/null +++ b/src/subdomain/subdomain.controller.ts @@ -0,0 +1,20 @@ +// src/subdomain/subdomain.controller.ts +import { Controller, Post, Body, Res } from '@nestjs/common'; +import { Response } from 'express'; +import { SubdomainService } from './subdomain.service'; + +@Controller('subdomain') +export class SubdomainController { + constructor(private readonly subdomainService: SubdomainService) {} + + @Post('setup') + async setupSubdomain(@Body() body: any, @Res() res: Response) { + const { subdomain, port, dnsRecordId } = body; + try { + const result = await this.subdomainService.setupSubdomain(subdomain, port, dnsRecordId); + res.json({ message: result }); + } catch (error) { + res.status(500).json({ error: 'Subdomain setup failed', message: error.message }); + } + } +} diff --git a/src/subdomain/subdomain.module.ts b/src/subdomain/subdomain.module.ts new file mode 100644 index 0000000..c06d99a --- /dev/null +++ b/src/subdomain/subdomain.module.ts @@ -0,0 +1,10 @@ +// src/subdomain/subdomain.module.ts +import { Module } from '@nestjs/common'; +import { SubdomainService } from './subdomain.service'; +import { SubdomainController } from './subdomain.controller'; + +@Module({ + providers: [SubdomainService], + controllers: [SubdomainController], +}) +export class SubdomainModule {} diff --git a/src/subdomain/subdomain.service.ts b/src/subdomain/subdomain.service.ts new file mode 100644 index 0000000..4044514 --- /dev/null +++ b/src/subdomain/subdomain.service.ts @@ -0,0 +1,83 @@ +// src/subdomain/subdomain.service.ts +import { Injectable } from '@nestjs/common'; +import { exec } from 'child_process'; +import { promisify } from 'util'; +import fetch from 'node-fetch'; +import * as fs from 'fs'; + +const execAsync = promisify(exec); + +@Injectable() +export class SubdomainService { + async setupSubdomain(subdomain: string, port: number, dnsRecordId: string): Promise { + await this.addDnsRecord(subdomain, dnsRecordId); + await this.createNginxConfig(subdomain, port); + await this.createNginxSymlink(subdomain); + await this.getSSL(subdomain); + await this.restartNginx(); + return 'Subdomain setup completed'; + } + + private async addDnsRecord(subdomain: string, dnsRecordId: string): Promise { + const zoneId = process.env.CLOUDFLARE_ZONE_ID; + const url = `https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`; + const data = { + type: 'A', + name: `${subdomain}.flexr`, + content: '35.223.20.186', + ttl: 120, + proxied: false, + comment: 'Domain verification record', + tags: [], + id: dnsRecordId, + }; + + const response = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Auth-Email': process.env.CLOUDFLARE_EMAIL || '', + 'X-Auth-Key': process.env.CLOUDFLARE_GLOBAL_TOKEN || '', + }, + body: JSON.stringify(data), + }); + + if (!response.ok) { + throw new Error('Error updating DNS record'); + } + } + + private async createNginxConfig(subdomain: string, port: number): Promise { + const config = ` +server { + listen 443 ssl; + server_name ${subdomain}.flexr.flexhost.tech; + ssl_certificate /etc/letsencrypt/live/${subdomain}.flexr.flexhost.tech/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${subdomain}.flexr.flexhost.tech/privkey.pem; + location / { + proxy_pass http://localhost:${port}; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + `; + + fs.writeFileSync(`/etc/nginx/sites-available/${subdomain}`, config, { encoding: 'utf8' }); + } + + private async createNginxSymlink(subdomain: string): Promise { + await execAsync(`sudo ln -s /etc/nginx/sites-available/${subdomain} /etc/nginx/sites-enabled/`); + } + + private async getSSL(subdomain: string): Promise { + await execAsync( + `sudo certbot --nginx -d ${subdomain}.flexr.flexhost.tech --non-interactive --agree-tos --email ${process.env.CERTBOT_EMAIL} && sudo systemctl reload nginx` + ); + } + + private async restartNginx(): Promise { + await execAsync('sudo systemctl reload nginx'); + } +} diff --git a/src/user/user.controller.ts b/src/user/user.controller.ts new file mode 100644 index 0000000..e829a74 --- /dev/null +++ b/src/user/user.controller.ts @@ -0,0 +1,18 @@ +import { Controller, Post, Body, Get, Query } from '@nestjs/common'; +import { UserService } from './user.service'; + +@Controller('users') +export class UserController { + constructor(private readonly userService: UserService) {} + + @Post('register') + async register(@Body() body: { username: string; password: string }) { + const { username, password } = body; + return this.userService.createUser(username, password); + } + + @Get('subscription') + async getSubscription(@Query('username') username: string) { + return this.userService.trackDeployment(username); + } +} diff --git a/src/user/user.entity.ts b/src/user/user.entity.ts new file mode 100644 index 0000000..bc52d53 --- /dev/null +++ b/src/user/user.entity.ts @@ -0,0 +1,23 @@ +// src/user/user.entity.ts +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; + +@Entity() +export class Deployment { + @PrimaryGeneratedColumn() + id: number; + + @Column() + userName: string; + + @Column() + projectName: string; + + @Column() + status: string; + + @Column() + time: Date; + + @Column() + containerId: string; +} diff --git a/src/user/user.module.ts b/src/user/user.module.ts new file mode 100644 index 0000000..4de811f --- /dev/null +++ b/src/user/user.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { UserController } from './user.controller'; +import { UserService } from './user.service'; +import { User } from './user.entity'; + +@Module({ + imports: [TypeOrmModule.forFeature([User])], // Register the User entity with TypeORM + controllers: [UserController], // Include the user controller + providers: [UserService], // Include the user service + exports: [UserService], // Export the service if needed in other modules +}) +export class UserModule {} diff --git a/src/user/user.service.ts b/src/user/user.service.ts new file mode 100644 index 0000000..c35d480 --- /dev/null +++ b/src/user/user.service.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { User } from './user.entity'; +import { RedisService } from '../redis/redis.service'; + +@Injectable() +export class UserService { + constructor( + @InjectRepository(User) + private readonly userRepository: Repository, + private readonly redisService: RedisService, + ) {} + + async createUser(username: string, password: string): Promise { + const user = this.userRepository.create({ username, password }); + return this.userRepository.save(user); + } + + async findUserByUsername(username: string): Promise { + return this.userRepository.findOne({ where: { username } }); + } + + async trackDeployment(username: string): Promise { + const key = username.toLowerCase(); + const existing = await this.redisService.get(key); + if (existing) { + throw new Error('Deployment limit reached'); + } + await this.redisService.set(key, 'true'); + } +} diff --git a/src/utils/container.util.ts b/src/utils/container.util.ts new file mode 100644 index 0000000..f68eca3 --- /dev/null +++ b/src/utils/container.util.ts @@ -0,0 +1,32 @@ +import * as fs from 'fs'; +import * as net from 'net'; + +export const dockerFile = ( + entryPoint: string, + buildCommand: string, + runCommand: string +): string => ` +FROM node:22-alpine +WORKDIR /app +COPY . . +RUN npm install && ${buildCommand} +EXPOSE 8080 +CMD ["${runCommand}", "${entryPoint}"] +`; + +export async function getPort(findPort: number): Promise { + const server = net.createServer(); + return new Promise((resolve) => { + server.once('error', (err) => resolve(err.message === 'EADDRINUSE' ? getPort(findPort + 1) : findPort)); + server.once('listening', () => server.close(() => resolve(findPort))); + server.listen(findPort); + }); +} + +export function createDirectory(userName: string): void { + const linuxUser = process.env.LINUX_USER || 'root'; + const dirPath = `/home/${linuxUser}/${userName.toLowerCase()}`; + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }); + } +} diff --git a/src/utils/server.util.ts b/src/utils/server.util.ts new file mode 100644 index 0000000..dd5f52c --- /dev/null +++ b/src/utils/server.util.ts @@ -0,0 +1,79 @@ +import * as fs from 'fs'; +import fetch from 'node-fetch'; +import { exec } from 'child_process'; +import { promisify } from 'util'; + +const execAsync = promisify(exec); + +export async function addRecord(subdomain: string, dnsRecordId: string): Promise { + const zoneId = process.env.CLOUDFLARE_ZONE_ID; + const url = `https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`; + const data = { + type: 'A', + name: `${subdomain}.flexr`, + content: '35.223.20.186', + ttl: 120, + proxied: false, + comment: 'Domain verification record', + tags: [], + id: dnsRecordId, + }; + + const response = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Auth-Email': process.env.CLOUDFLARE_EMAIL || '', + 'X-Auth-Key': process.env.CLOUDFLARE_GLOBAL_TOKEN || '', + }, + body: JSON.stringify(data), + }); + + if (!response.ok) { + throw new Error('Error updating DNS record'); + } + + return 'DNS record updated'; +} + +export async function setupSubdomain(subdomain: string, port: number, dnsRecordId: string): Promise { + await addRecord(subdomain, dnsRecordId); + await createNginxConfig(subdomain, port); + await createNginxSymlink(subdomain); + await getSSL(subdomain); + await restartNginx(); + return 'Subdomain setup completed'; +} + +async function createNginxConfig(subdomain: string, port: number): Promise { + const config = ` +server { + listen 443 ssl; + server_name ${subdomain}.flexr.flexhost.tech; + ssl_certificate /etc/letsencrypt/live/${subdomain}.flexr.flexhost.tech/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${subdomain}.flexr.flexhost.tech/privkey.pem; + location / { + proxy_pass http://localhost:${port}; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + `; + fs.writeFileSync(`/etc/nginx/sites-available/${subdomain}`, config, { encoding: 'utf8' }); +} + +async function createNginxSymlink(subdomain: string): Promise { + await execAsync(`sudo ln -s /etc/nginx/sites-available/${subdomain} /etc/nginx/sites-enabled/`); +} + +async function getSSL(subdomain: string): Promise { + await execAsync( + `sudo certbot --nginx -d ${subdomain}.flexr.flexhost.tech --non-interactive --agree-tos --email ${process.env.CERTBOT_EMAIL}` + ); +} + +async function restartNginx(): Promise { + await execAsync('sudo systemctl reload nginx'); +} diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..64f86c6 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/tsconfig.json b/tsconfig.json index e2ddb9c..e4dbf2e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,30 +1,21 @@ { "compilerOptions": { - "target": "ES2020", "module": "commonjs", - "lib": ["es2020"], - "strict": true, - "esModuleInterop": true, + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "ES2023", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, "skipLibCheck": true, + "strictNullChecks": true, "forceConsistentCasingInFileNames": true, - "outDir": "dist", - "rootDir": ".", - "sourceMap": true, - "declaration": true, - "resolveJsonModule": true, - "moduleResolution": "node", - "baseUrl": ".", - "paths": { - "*": ["node_modules/*"] - } - }, - "include": [ - "server/**/*", - "db/**/*" - ], - "exclude": [ - "node_modules", - "dist" - ] + "noImplicitAny": false, + "strictBindCallApply": false, + "noFallthroughCasesInSwitch": false + } } - From fd485db3fc08c2863ea95e4c137e63922782b7eb Mon Sep 17 00:00:00 2001 From: Akshat Kotpalliwar Date: Thu, 3 Apr 2025 01:52:36 +0530 Subject: [PATCH 02/23] update @1 --- .gitignore | 60 +++++++++++++++++++++++++--- README.md | 101 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 109 +++++++++++++++++++++++++++++++-------------------- 3 files changed, 222 insertions(+), 48 deletions(-) diff --git a/.gitignore b/.gitignore index cb0f782..4b56acf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,56 @@ -node_modules/* -dist/* -package-lock.json -id_rsa -id_rsa.pub +# compiled output +/dist +/node_modules +/build + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# OS +.DS_Store + +# Tests +/coverage +/.nyc_output + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# dotenv environment variable files .env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# temp directory +.temp +.tmp + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/README.md b/README.md index 6872b29..dec022b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +<<<<<<< HEAD # Flexr

@@ -120,3 +121,103 @@ This program is free software: you can redistribute it and/or modify it under th --- Made with ❤️ by Akshat Kotpalliwar (alias IntegerAlex on GitHub) ``` +======= +

+ Nest Logo +

+ +[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 +[circleci-url]: https://circleci.com/gh/nestjs/nest + +

A progressive Node.js framework for building efficient and scalable server-side applications.

+

+NPM Version +Package License +NPM Downloads +CircleCI +Discord +Backers on Open Collective +Sponsors on Open Collective + Donate us + Support us + Follow us on Twitter +

+ + +## Description + +[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. + +## Project setup + +```bash +$ npm install +``` + +## Compile and run the project + +```bash +# development +$ npm run start + +# watch mode +$ npm run start:dev + +# production mode +$ npm run start:prod +``` + +## Run tests + +```bash +# unit tests +$ npm run test + +# e2e tests +$ npm run test:e2e + +# test coverage +$ npm run test:cov +``` + +## Deployment + +When you're ready to deploy your NestJS application to production, there are some key steps you can take to ensure it runs as efficiently as possible. Check out the [deployment documentation](https://docs.nestjs.com/deployment) for more information. + +If you are looking for a cloud-based platform to deploy your NestJS application, check out [Mau](https://mau.nestjs.com), our official platform for deploying NestJS applications on AWS. Mau makes deployment straightforward and fast, requiring just a few simple steps: + +```bash +$ npm install -g mau +$ mau deploy +``` + +With Mau, you can deploy your application in just a few clicks, allowing you to focus on building features rather than managing infrastructure. + +## Resources + +Check out a few resources that may come in handy when working with NestJS: + +- Visit the [NestJS Documentation](https://docs.nestjs.com) to learn more about the framework. +- For questions and support, please visit our [Discord channel](https://discord.gg/G7Qnnhy). +- To dive deeper and get more hands-on experience, check out our official video [courses](https://courses.nestjs.com/). +- Deploy your application to AWS with the help of [NestJS Mau](https://mau.nestjs.com) in just a few clicks. +- Visualize your application graph and interact with the NestJS application in real-time using [NestJS Devtools](https://devtools.nestjs.com). +- Need help with your project (part-time to full-time)? Check out our official [enterprise support](https://enterprise.nestjs.com). +- To stay in the loop and get updates, follow us on [X](https://x.com/nestframework) and [LinkedIn](https://linkedin.com/company/nestjs). +- Looking for a job, or have a job to offer? Check out our official [Jobs board](https://jobs.nestjs.com). + +## Support + +Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). + +## Stay in touch + +- Author - [Kamil Myśliwiec](https://twitter.com/kammysliwiec) +- Website - [https://nestjs.com](https://nestjs.com/) +- Twitter - [@nestframework](https://twitter.com/nestframework) + +## License + +Nest is [MIT licensed](https://github.com/nestjs/nest/blob/master/LICENSE). +>>>>>>> 4728644 (update @1) diff --git a/package.json b/package.json index c1630c8..e59649e 100644 --- a/package.json +++ b/package.json @@ -1,52 +1,75 @@ -{ - "name": "flexr", - "version": "1.0.0", - "main": "dist/server/setup.js", +{ "name": "fenrir", + "version": "0.0.1", + "description": "", + "author": "", + "private": true, + "license": "UNLICENSED", "scripts": { - "dev": "nodemon --exec ts-node server/setup.ts", - "build": "tsc", - "start": "node dist/server/setup.js", - "lint": "eslint . --ext .ts", + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", - "db:migrate": "node dist/db/create.js" + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json" }, - "keywords": [ - "deployment", - "containers", - "podman", - "nodejs" - ], - "author": "Akshat Kotpalliwar", - "license": "GPL-3.0", - "description": "", "dependencies": { - "cloudflare": "^3.5.0", - "compression": "^1.7.4", - "cookie-parser": "^1.4.7", - "cors": "^2.8.5", - "dotenv": "^16.4.5", - "express": "^4.19.2", - "helmet": "^7.1.0", - "htmx": "^0.0.2", - "pg": "^8.12.0", - "redis": "^4.7.0", - "uuid": "^11.1.0", - "winston": "^3.11.0" + "@nestjs/common": "^11.0.1", + "@nestjs/core": "^11.0.1", + "@nestjs/platform-express": "^11.0.1", + "@nestjs/typeorm": "^11.0.0", + "pg": "^8.14.1", + "reflect-metadata": "^0.2.2", + "rxjs": "^7.8.1", + "typeorm": "^0.3.21" }, "devDependencies": { - "@types/cookie-parser": "^1.4.8", - "@types/cors": "^2.8.17", - "@types/express": "^4.17.21", - "@types/jest": "^29.5.0", - "@types/node": "^20.14.12", - "@types/pg": "^8.11.6", - "@types/uuid": "^10.0.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint": "^8.57.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "^9.18.0", + "@nestjs/cli": "^11.0.0", + "@nestjs/schematics": "^11.0.0", + "@nestjs/testing": "^11.0.1", + "@swc/cli": "^0.6.0", + "@swc/core": "^1.10.7", + "@types/express": "^5.0.0", + "@types/jest": "^29.5.14", + "@types/node": "^22.10.7", + "@types/supertest": "^6.0.2", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.2", + "globals": "^16.0.0", "jest": "^29.7.0", - "nodemon": "^3.0.0", - "ts-jest": "^29.1.0", - "ts-node": "^10.9.2" + "prettier": "^3.4.2", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-jest": "^29.2.5", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.7.3", + "typescript-eslint": "^8.20.0" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" } } From 655500723b016701c24b6e25b7333ab6280bfbe3 Mon Sep 17 00:00:00 2001 From: Akshat Kotpalliwar Date: Thu, 3 Apr 2025 03:24:41 +0530 Subject: [PATCH 03/23] rm express --- server/config.ts | 41 ------ server/containerServices.ts | 110 --------------- server/routes/htmx.ts | 151 -------------------- server/setup.ts | 251 ---------------------------------- server/utils/containerUtil.ts | 57 -------- server/utils/serverUtils.ts | 183 ------------------------- 6 files changed, 793 deletions(-) delete mode 100644 server/config.ts delete mode 100644 server/containerServices.ts delete mode 100644 server/routes/htmx.ts delete mode 100644 server/setup.ts delete mode 100644 server/utils/containerUtil.ts delete mode 100755 server/utils/serverUtils.ts diff --git a/server/config.ts b/server/config.ts deleted file mode 100644 index f53936f..0000000 --- a/server/config.ts +++ /dev/null @@ -1,41 +0,0 @@ -interface Config { - server: { - port: number | string; - baseUrl: string; - }; - cloudflare: { - zoneId?: string; - email?: string; - token?: string; - }; - certbot: { - email?: string; - }; - redis: { - url: string; - }; - postgres: { - url: string; - }; -} - -export const config: Config = { - server: { - port: process.env.PORT || 8080, - baseUrl: process.env.BASEURL || 'http://localhost:8080', - }, - cloudflare: { - zoneId: process.env.CLOUDFLARE_ZONE_ID, - email: process.env.CLOUDFLARE_EMAIL, - token: process.env.CLOUDFLARE_GLOBAL_TOKEN, - }, - certbot: { - email: process.env.CERTBOT_EMAIL, - }, - redis: { - url: process.env.REDIS_URL || 'redis://localhost:6379', - }, - postgres: { - url: process.env.DATABASE_URL || 'postgresql://localhost:5432/flexhost', - }, -}; diff --git a/server/containerServices.ts b/server/containerServices.ts deleted file mode 100644 index f646012..0000000 --- a/server/containerServices.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { exec, execSync } from 'child_process'; -import { promisify } from 'util'; -import { createWriteStream, writeFileSync } from 'fs'; -import { getPort, dockerFile } from './utils/containerUtil'; -import { setupSubdomain } from './utils/serverUtils'; -import { postDeployment } from '../db/operations'; -const execAsync = promisify(exec); -const HOST = process.env.HOST || 'http://localhost:8080'; -const linuxUser = process.env.LINUX_USER || 'root'; -export async function runContainer( - username: string, - projectName: string -): Promise { - if (!username || !projectName) { - throw new Error('Invalid input'); - } - - try { - const port = await getPort(8081); - const imageName = `${username.toLowerCase()}-${projectName}`; - const { stdout } = await execAsync( - `podman run -d -p ${port}:8080 -t localhost/${imageName}:latest` - ); - createWriteStream('containerId.txt').write(stdout); - await postDeployment(projectName, username.toLowerCase(), stdout.trim()); - const link = `${HOST}/${stdout.trim().substring(0, 12)}`; - await setupSubdomain(stdout.trim().substring(0, 12), port, stdout.trim()); - return link; - } catch (error: unknown) { - if (error instanceof Error) { - console.error(`Error running container: ${error.message}`); - } else { - console.error('Error running container: Unknown error'); - } - throw error; - } -} - -export async function createImage( - username: string, - projectName: string, - repoLink: string, - entryPoint: string, - buildCommand: string, - runCommand: string -): Promise { - if (!username || !projectName || !repoLink) { - throw new Error('Invalid input'); - } - - try { - await generateDockerFile( - username, - projectName, - repoLink, - entryPoint, - buildCommand, - runCommand - ); - const imageName = `${username.toLowerCase()}-${projectName}`; - const { stdout } = await execAsync(`buildah build -t ${imageName} .`); - console.log(`Image built: ${stdout}`); - return imageName; - } catch (error: unknown) { - if (error instanceof Error) { - console.error(`Error creating image: ${error.message}`); - } else { - console.error('Error creating image: Unknown error'); - } - throw error; - } -} - -async function generateDockerFile( - username: string, - projectName: string, - repoLink: string, - entryPoint: string, - buildCommand: string, - runCommand: string -): Promise { - try { - // Change directory to username folder - process.chdir(`/home/${linuxUser}/${username.toLowerCase()}`); - - // Clone the repository into the project directory - await execAsync(`git clone ${repoLink}`); - process.chdir(projectName); // Change directory to the project folder - - // Check if Dockerfile already exists - try { - execSync('ls Dockerfile'); - console.log('Dockerfile already exists, skipping creation.'); - } catch { - // Create Dockerfile if it doesn't exist - writeFileSync( - 'Dockerfile', - dockerFile(entryPoint, buildCommand, runCommand) - ); - console.log('Dockerfile created.'); - } - } catch (error: unknown) { - if (error instanceof Error) { - console.error(`Error generating Dockerfile: ${error.message}`); - } else { - console.error('Error generating Dockerfile: Unknown error'); - } - throw error; - } -} diff --git a/server/routes/htmx.ts b/server/routes/htmx.ts deleted file mode 100644 index b9d0386..0000000 --- a/server/routes/htmx.ts +++ /dev/null @@ -1,151 +0,0 @@ -import express, { Request, Response } from 'express'; -import path from 'path'; -import { getDeployments } from '../../db/operations'; -import database from '../../db/main'; - -const router = express.Router(); - -// Define the request body type for the POST route -interface RunContainerRequestBody { - userName: string; - buildCommand?: string; - runCommand?: string; - repoLink: string; - entryPoint?: string; -} - -// Define the response type for the runContainer API call -interface RunContainerResponse { - containerId: string; -} - -// Define the deployment type -interface Deployment { - id: string; - project_name: string; - status: string; - time: string; - container_id: string; -} - -// Define the error response type -interface ErrorResponse { - message?: string; -} - -router.post('/', async (req: Request, res: Response) => { - const { - userName, - buildCommand, - runCommand, - repoLink, - entryPoint, - }: RunContainerRequestBody = req.body; - const projectName = repoLink.split('/').pop()?.split('.')[0] || ''; - - try { - const redisData = await database.dbRedisGet(userName.toLowerCase()); - if (redisData) { - // Uncomment if you want to limit deployments - // return res.send(`

Deployments limit reached

`); - } - - console.log(projectName, repoLink, entryPoint); - const response = await fetch('http://localhost:8080/v1/runContainer', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - userName, - projectName, - repoLink, - buildCommand: buildCommand || 'npm install', - runCommand: runCommand || 'node', - entryPoint, - }), - }); - - // Check if the response is OK and parse the JSON - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); // Handle potential JSON parsing errors - console.error('Error response:', errorData); - return res.status(response.status).json({ - message: (errorData as ErrorResponse).message || 'Error occurred', - }); - } - - const runContainerData: RunContainerResponse = - (await response.json()) as RunContainerResponse; // Assert the type of runContainerData - const containerId = runContainerData.containerId; // Now TypeScript knows this is safe - res.send(`

Container ID: ${containerId}

`); - } catch (error) { - console.error('Error:', error); - res.send('Error'); - } -}); - -//db.addContainer(containerId , projectName , repoLink , entryPoint) - -//res.send("

Deploying... please Wait

"); - -router.get('/deployments', async (req: Request, res: Response) => { - try { - const userName = req.query.userName as string; - console.log(userName.toLowerCase()); - //const data = await response.json(); - // - // - // - // const userName = data.nickname; - - const deployments: Deployment[] = await getDeployments( - userName.toLowerCase() - ); - if (!deployments || deployments.length === 0) { - return res.send('

No deployments found

'); - } - - const deploymentsHTML = deployments - .map((deployment) => { - return ` -
-

${deployment.project_name}

-

Status: ${deployment.status}

-

Deployed at: ${new Date(deployment.time).toLocaleString()}

-

Deployment ID: ${deployment.container_id}

-
- `; - }) - .join(''); - - res.send(` -
- ${deploymentsHTML} -
- `); - } catch (error) { - console.error('Error fetching deployments:', error); - res.send('

Error fetching deployments

'); - } -}); - -router.get('/subscription', async (req: Request, res: Response) => { - console.log('subscription'); - const userName = req.query.userName as string; - try { - const data = await database.dbRedisGet(userName.toLowerCase()); - if (data) { - res.send(`

You are in free tier

-

Upgrade to premium to get more deployments

`); - } else { - res.send(`

You are in free tier

-

You can deploy one application

`); - } - } catch (error) { - console.error('Error fetching subscription:', error); - res.send('

Error fetching subscription

'); - } -}); - -export default router; diff --git a/server/setup.ts b/server/setup.ts deleted file mode 100644 index 75edb00..0000000 --- a/server/setup.ts +++ /dev/null @@ -1,251 +0,0 @@ -import express from 'express'; -import cookieParser from 'cookie-parser'; // Added cookie-parser import -import { runContainer, createImage } from './containerServices'; -import htmxRouter from './routes/htmx'; -import path from 'path'; -import bodyParser from 'body-parser'; -import cors from 'cors'; -require('dotenv').config(); -import { createDirectory } from './utils/containerUtil'; -import database from '../db/main'; -import { exec } from 'child_process'; - -const app = express(); - -// Add cookie-parser middleware before any routes that use cookies -app.use(cookieParser()); -app.set('trust proxy', true); -app.use(cors()); -app.use(express.json()); -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: true })); - -app.use('/htmx', htmxRouter); -app.use(express.static(path.join(__dirname, '../../frontend/'))); - -// Health Check -app.get('/v1/health', (req, res) => { - res.status(200).send('Healthy'); -}); - -// Endpoint to run container -app.post('/v1/runContainer', async (req, res) => { - const { - userName, - projectName, - repoLink, - entryPoint, - buildCommand = 'npm install', - runCommand = 'node', - } = req.body as { - userName: string; - projectName: string; - repoLink: string; - entryPoint: string; - buildCommand?: string; - runCommand?: string; - }; - - const missingFields = []; - if (!userName) missingFields.push('userName'); - if (!projectName) missingFields.push('projectName'); - if (!repoLink) missingFields.push('repoLink'); - if (!entryPoint) missingFields.push('entryPoint'); - - if (missingFields.length > 0) { - return res.status(400).json({ - error: 'Missing required fields', - fields: missingFields, - }); - } - - try { - const imageName = await createImage( - userName, - projectName, - repoLink, - entryPoint, - buildCommand, - runCommand - ); - const containerId = await runContainer(userName, projectName); - - await database.dbRedisSet(userName.toLowerCase(), true); - res.json({ - containerId, - imageName, - status: 'deployed', - }); - } catch (err: unknown) { - if (err instanceof Error) { - console.error(`Deployment error: ${err.message}`); - res.status(500).json({ - error: 'Deployment failed', - message: err.message, - }); - } else { - console.error('Deployment error: Unknown error'); - res.status(500).json({ - error: 'Deployment failed', - message: 'Unknown error occurred', - }); - } - } -}); - -// In-memory session storage -const sessions: { [key: string]: { username: string; createdAt: number } } = {}; - -// Simple session ID generator -function generateSessionId(): string { - return Math.random().toString(36).substring(2); -} - -const SESSION_EXPIRY_MS = 30 * 60 * 1000; // 30 minutes expiry - -// Login route that sets a cookie with the session ID -app.post('/login', (req, res) => { - const { githubUsername, passKey } = req.body; - - if (passKey === process.env.PASS_KEY) { - createDirectory(githubUsername); - const sessionId = generateSessionId(); - sessions[sessionId] = { username: githubUsername, createdAt: Date.now() }; - res.cookie('sessionId', sessionId, { httpOnly: true, secure: false }); - console.log('Session ID set:', sessionId); - res.status(200).json({ message: 'Login successful', githubUsername }); - } else { - res.status(401).json({ message: 'Unauthorized' }); - } -}); - -// Middleware to check authentication -const isAuthenticated = ( - req: express.Request, - res: express.Response, - next: express.NextFunction -) => { - const sessionId = req.cookies?.sessionId; - console.log('Session ID:', sessionId); - - if (!sessionId) { - console.log('No session ID found'); - return res.status(401).json({ message: 'Unauthorized' }); - } - - const session = sessions[sessionId]; - if (!session) { - console.log('Session not found for ID:', sessionId); - return res.status(401).json({ message: 'Unauthorized' }); - } - - const sessionAge = Date.now() - session.createdAt; - - if (sessionAge > SESSION_EXPIRY_MS) { - console.log('Session expired:', sessionId); - delete sessions[sessionId]; - return res - .status(401) - .json({ message: 'Session expired. Please log in again.' }); - } else { - (req as any).user = { username: session.username }; - console.log('User authenticated:', session.username); - next(); - } -}; - -// Protected route example -app.get('/protected-route', isAuthenticated, (req, res) => { - res.json({ message: 'This is a protected route' }); -}); - -// /home route serving home.html -app.get('/home', (req, res) => { - console.log('User accessed /home'); - res.sendFile(path.join(__dirname, '../../frontend/home.html')); -}); - -// Callback route -app.get('/callback', (req, res) => { - console.log(req.oidc?.user); - res.sendFile(path.join(__dirname, '../../frontend/index.html')); -}); - -// Extend Request interface for oidc (if used) -declare global { - namespace Express { - interface Request { - oidc?: { - user: { - nickname: string; - }; - }; - } - } -} - -// Profile route with authentication -app.get( - '/v1/profile', - isAuthenticated, - (req: express.Request, res: express.Response) => { - console.log('User accessed /profile'); - res.json({ nickname: (req as any).user.username }); - } -); - -// Route to fetch GitHub repositories -app.get('/v1/repositories', (req: express.Request, res: express.Response) => { - const user_id = req.query.user_id as string; - - fetch(`https://api.github.com/users/${user_id}/repos`, { method: 'GET' }) - .then((response) => response.json()) - .then((data: any) => { - const repositories = data.map( - (repo: { name: string; html_url: string }) => ({ - name: repo.name, - url: repo.html_url, - }) - ); - res.send({ - repositories: repositories, - avatar_url: data[0]?.owner?.avatar_url, - }); - }) - .catch((error) => { - console.error('Error fetching repositories:', error); - res.status(500).send('Error fetching repositories'); - }); -}); - -// Error handling middleware -app.use( - ( - err: Error, - req: express.Request, - res: express.Response, - next: express.NextFunction - ) => { - console.error(err.stack); - res.status(500).send('Something broke!'); - } -); - -// Request logging middleware -app.use( - (req: express.Request, res: express.Response, next: express.NextFunction) => { - console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`); - next(); - } -); - -// Route to serve the login page -app.get('/', (req, res) => { - const filePath = path.join(__dirname, '../../frontend/login.html'); - console.log('Login file path:', filePath); - res.sendFile(filePath); -}); - -app.listen(8080, () => { - console.log('Server is running on port 8080'); -}); diff --git a/server/utils/containerUtil.ts b/server/utils/containerUtil.ts deleted file mode 100644 index 09ddc4d..0000000 --- a/server/utils/containerUtil.ts +++ /dev/null @@ -1,57 +0,0 @@ -import net from 'net'; -import fs from 'fs'; - -export const dockerFile = ( - entryPoint: string, - buildCommand: string, - runCommand: string -): string => ` -FROM node:22-alpine -WORKDIR /app -COPY . . -RUN npm install && ${buildCommand} -EXPOSE 8080 -CMD ["${runCommand}", "${entryPoint}"] -`; - -function isPortInUse(port: number, host = '127.0.0.1'): Promise { - return new Promise((resolve) => { - const server = net.createServer(); - - server.once('error', (err) => { - if (err.name === 'EADDRINUSE') { - resolve(true); // Port is in use - } else { - resolve(false); // Other errors - } - }); - - server.once('listening', () => { - server.close(() => { - resolve(false); // Port is not in use - }); - }); - - server.listen(port, host); - }); -} - -export async function getPort(findPort: number): Promise { - // Check if the starting port is in use - const inUse = await isPortInUse(findPort); - if (inUse) { - // If the port is in use, try the next port - return getPort(findPort + 1); - } else { - // Port is available - return findPort; - } -} - -export function createDirectory(userName: string): boolean { - const linuxUser = process.env.LINUX_USER || 'root'; - if (!fs.existsSync(`/home/${linuxUser}/${userName.toLowerCase()}`)) { - fs.mkdirSync(`/home/${linuxUser}/${userName.toLowerCase()}`); - } - return true; -} diff --git a/server/utils/serverUtils.ts b/server/utils/serverUtils.ts deleted file mode 100755 index d170af0..0000000 --- a/server/utils/serverUtils.ts +++ /dev/null @@ -1,183 +0,0 @@ -import * as fs from 'fs'; -import { exec } from 'child_process'; -import fetch from 'node-fetch'; - -// Function to add DNS record -async function addRecord( - subdomain: string, - dnsRecordId: string -): Promise { - const zoneId = process.env.CLOUDFLARE_ZONE_ID; - const url = `https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`; - const data = { - type: 'A', - name: `${subdomain}.flexr`, - content: '35.223.20.186', - ttl: 120, - proxied: false, - comment: 'Domain verification record', - tags: [], - id: dnsRecordId, - }; - - return fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'X-Auth-Email': process.env.CLOUDFLARE_EMAIL || '', - 'X-Auth-Key': process.env.CLOUDFLARE_GLOBAL_TOKEN || '', - }, - body: JSON.stringify(data), - }) - .then((response) => { - if (response.ok) { - return 'DNS record updated'; - } else { - throw new Error('Error updating DNS record'); - } - }) - .catch((error) => { - throw new Error('Error adding DNS record: ' + error.message); - }); -} - -// Function to get SSL certificate using Certbot -function getSSL(subdomain: string): Promise { - return new Promise((resolve, reject) => { - exec( - `sudo certbot --nginx -d ${subdomain}.flexr.flexhost.tech --non-interactive --agree-tos --email ${process.env.CERTBOT_EMAIL} && ` + - `sudo systemctl reload nginx`, - (error, stdout, stderr) => { - if (error) { - console.error(`Certbot error: ${error}`); - reject('Error obtaining SSL certificate'); - return; - } - resolve('SSL certificate obtained'); - console.log(`Certbot stdout: ${stdout}`); - console.error(`Certbot stderr: ${stderr}`); - } - ); - }); -} - -// Function to create NGINX server block configuration -function NginxServerBlock(subdomain: string, port: number): Promise { - const serverBlockConfig = ` -server { - listen 443 ssl; - server_name ${subdomain}.flexr.flexhost.tech; - - ssl_certificate /etc/letsencrypt/live/${subdomain}.flexr.flexhost.tech/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/${subdomain}.flexr.flexhost.tech/privkey.pem; - - location / { - proxy_pass http://localhost:${port}; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } -} - `; - - return new Promise((resolve, reject) => { - fs.writeFile( - `/etc/nginx/sites-available/${subdomain}`, - serverBlockConfig, - { encoding: 'utf8' }, - (error) => { - if (error) { - console.error(`File write error: ${error}`); - reject('Error creating NGINX server block configuration'); - } else { - resolve('NGINX server block configuration created'); - } - } - ); - }); -} - -// Function to create symbolic link for NGINX server block -function NginxServerBlockSymLink(subdomain: string): Promise { - return new Promise((resolve, reject) => { - exec( - `sudo ln -s /etc/nginx/sites-available/${subdomain} /etc/nginx/sites-enabled/`, - (error, stdout, stderr) => { - if (error) { - console.error(`Symlink error: ${error}`); - reject('Error creating symbolic link'); - } else { - resolve('Symbolic link created'); - console.log(`Symlink stdout: ${stdout}`); - console.error(`Symlink stderr: ${stderr}`); - } - } - ); - }); -} - -// Function to restart NGINX -function restartNginx(): Promise { - return new Promise((resolve, reject) => { - exec('sudo systemctl reload nginx', (error, stdout, stderr) => { - if (error) { - console.error(`NGINX reload error: ${error}`); - reject('Error restarting NGINX'); - } else { - resolve('NGINX restarted'); - console.log(`NGINX reload stdout: ${stdout}`); - console.error(`NGINX reload stderr: ${stderr}`); - } - }); - }); -} - -// Combine functions to setup DNS, SSL, and NGINX server block -export async function setupSubdomain( - subdomain: string, - port: number, - dnsRecordID: string -): Promise { - return addRecord(subdomain, dnsRecordID) - .then((dnsRecordUpdate) => { - console.log(dnsRecordUpdate); - return NginxServerBlock(subdomain, port); - }) - .catch((error) => { - console.error(`Error updating DNS record: ${error}`); - throw new Error('Error setting up subdomain'); - }) - .then((serverBlockCreated) => { - console.log(serverBlockCreated); - return NginxServerBlockSymLink(subdomain); - }) - .catch((error) => { - console.error(`Error creating NGINX server block: ${error}`); - throw new Error('Error setting up subdomain'); - }) - .then((symlinkCreated) => { - console.log(symlinkCreated); - return getSSL(subdomain); - }) - .catch((error) => { - console.error(`Error creating symbolic link: ${error}`); - throw new Error('Error setting up subdomain'); - }) - .then((sslObtained) => { - console.log(sslObtained); - return restartNginx(); - }) - .catch((error) => { - console.error(`Error obtaining SSL certificate: ${error}`); - throw new Error('Error setting up subdomain'); - }) - .then((nginxRestarted) => { - console.log(nginxRestarted); - return 'Subdomain setup completed'; - }) - .catch((error) => { - console.error(`Error restarting NGINX: ${error}`); - throw new Error('Error setting up subdomain'); - }); -} From 0e1f22dc2317a76b35ba67abe3f648921c5f5092 Mon Sep 17 00:00:00 2001 From: Akshatkotpalliwar Date: Thu, 3 Apr 2025 03:37:11 +0530 Subject: [PATCH 04/23] Removed REDIS --- frontend/index.ts | 3 +- frontend/login.html | 4 +-- src/app.module.ts | 2 -- src/auth/auth.controller.ts | 6 ++-- src/auth/auth.service.ts | 3 +- src/container/container.service.ts | 4 +-- src/deployment/deployment.controller.ts | 4 +-- .../deployment.entity.ts} | 6 +--- src/deployment/deployment.module.ts | 2 +- src/deployment/deployment.service.ts | 22 +++---------- src/htmx/htmx.controller.ts | 6 ++-- src/htmx/htmx.service.ts | 6 ++-- src/subdomain/subdomain.service.ts | 1 - src/user/user.controller.ts | 18 ----------- src/user/user.module.ts | 13 -------- src/user/user.service.ts | 32 ------------------- 16 files changed, 21 insertions(+), 111 deletions(-) rename src/{user/user.entity.ts => deployment/deployment.entity.ts} (81%) delete mode 100644 src/user/user.controller.ts delete mode 100644 src/user/user.module.ts delete mode 100644 src/user/user.service.ts diff --git a/frontend/index.ts b/frontend/index.ts index f8aa9ed..cd5849b 100644 --- a/frontend/index.ts +++ b/frontend/index.ts @@ -8,7 +8,6 @@ document.getElementById('loginForm')?.addEventListener('submit', async (e: Event loginButton.disabled = true; loginButton.textContent = 'Logging in...'; - const githubUsername = (document.getElementById('githubUsername') as HTMLInputElement).value; const passKey = (document.getElementById('passKey') as HTMLInputElement).value; try { @@ -17,7 +16,7 @@ document.getElementById('loginForm')?.addEventListener('submit', async (e: Event headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({ githubUsername, passKey }), + body: JSON.stringify({ passKey }), credentials: 'same-origin' }); diff --git a/frontend/login.html b/frontend/login.html index 9f96607..be0805f 100644 --- a/frontend/login.html +++ b/frontend/login.html @@ -28,7 +28,6 @@

Login

-
@@ -44,7 +43,6 @@

Login

loginButton.disabled = true; loginButton.textContent = 'Logging in...'; - const githubUsername = document.getElementById('githubUsername').value; const passKey = document.getElementById('passKey').value; try { @@ -53,7 +51,7 @@

Login

headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({ githubUsername, passKey }), + body: JSON.stringify({ passKey }), credentials: 'same-origin' }); diff --git a/src/app.module.ts b/src/app.module.ts index eb4aa21..a2d076c 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -15,9 +15,7 @@ import { HtmxModule } from './htmx/htmx.module'; AuthModule, ContainerModule, DeploymentModule, - UserModule, // Import the UserModule here DatabaseModule, - RedisModule, SubdomainModule, HtmxModule, ], diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index d7d8007..3826a16 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -9,11 +9,11 @@ export class AuthController { @Post('login') async login(@Req() req: Request, @Res() res: Response) { - const { githubUsername, passKey } = req.body; - const sessionId = await this.authService.login(githubUsername, passKey); + const { passKey } = req.body; + const sessionId = await this.authService.login(passKey); if (sessionId) { res.cookie('sessionId', sessionId, { httpOnly: true, secure: false }); - return res.status(200).json({ message: 'Login successful', githubUsername }); + return res.status(200).json({ message: 'Login successful' }); } return res.status(401).json({ message: 'Unauthorized' }); } diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 21cee9d..587d0a3 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -4,9 +4,8 @@ import { createDirectory } from '../utils/container.util'; @Injectable() export class AuthService { - login(githubUsername: string, passKey: string): string | null { + login(passKey: string): string | null { if (passKey === process.env.PASS_KEY) { - createDirectory(githubUsername); return Math.random().toString(36).substring(2); // Generate session ID } return null; diff --git a/src/container/container.service.ts b/src/container/container.service.ts index 0df9b38..dd33655 100644 --- a/src/container/container.service.ts +++ b/src/container/container.service.ts @@ -17,9 +17,7 @@ export class ContainerService { async runContainer(body: any) { const { userName, projectName, repoLink, entryPoint, buildCommand, runCommand } = body; - - await this.deploymentService.trackDeployment(userName); - + const imageName = `${userName.toLowerCase()}-${projectName}`; const port = await this.getPort(8081); diff --git a/src/deployment/deployment.controller.ts b/src/deployment/deployment.controller.ts index 6c79ab2..b1a4a60 100644 --- a/src/deployment/deployment.controller.ts +++ b/src/deployment/deployment.controller.ts @@ -7,7 +7,7 @@ export class DeploymentController { constructor(private readonly deploymentService: DeploymentService) {} @Get() - async getDeployments(@Query('userName') userName: string) { - return this.deploymentService.getDeployments(userName); + async getDeployments() { + return this.deploymentService.getDeployments(); } } diff --git a/src/user/user.entity.ts b/src/deployment/deployment.entity.ts similarity index 81% rename from src/user/user.entity.ts rename to src/deployment/deployment.entity.ts index bc52d53..7e5fb0a 100644 --- a/src/user/user.entity.ts +++ b/src/deployment/deployment.entity.ts @@ -1,4 +1,3 @@ -// src/user/user.entity.ts import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() @@ -6,9 +5,6 @@ export class Deployment { @PrimaryGeneratedColumn() id: number; - @Column() - userName: string; - @Column() projectName: string; @@ -20,4 +16,4 @@ export class Deployment { @Column() containerId: string; -} +} \ No newline at end of file diff --git a/src/deployment/deployment.module.ts b/src/deployment/deployment.module.ts index aee1268..d441d5e 100644 --- a/src/deployment/deployment.module.ts +++ b/src/deployment/deployment.module.ts @@ -3,7 +3,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { DeploymentService } from './deployment.service'; import { DeploymentController } from './deployment.controller'; -import { Deployment } from '../user/user.entity'; +import { Deployment } from './deployment.entity'; @Module({ imports: [TypeOrmModule.forFeature([Deployment])], diff --git a/src/deployment/deployment.service.ts b/src/deployment/deployment.service.ts index 2819a12..1993832 100644 --- a/src/deployment/deployment.service.ts +++ b/src/deployment/deployment.service.ts @@ -2,39 +2,25 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { Deployment } from '../user/user.entity'; -import { RedisService } from '../redis/redis.service'; +import { Deployment } from './deployment.entity'; @Injectable() export class DeploymentService { constructor( @InjectRepository(Deployment) private readonly deploymentRepository: Repository, - private readonly redisService: RedisService, ) {} - async getDeployments(userName: string) { - return this.deploymentRepository.find({ where: { userName } }); + async getDeployments() { + return this.deploymentRepository.find(); } - async addDeployment(projectName: string, userName: string, containerId: string) { + async addDeployment(projectName: string, containerId: string) { const deployment = new Deployment(); - deployment.userName = userName; deployment.projectName = projectName; deployment.status = 'deployed'; deployment.time = new Date(); deployment.containerId = containerId; await this.deploymentRepository.save(deployment); - - await this.redisService.set(userName.toLowerCase(), 'true'); - } - - async trackDeployment(userName: string): Promise { - const key = userName.toLowerCase(); - const existing = await this.redisService.get(key); - if (existing) { - throw new Error('Deployment limit reached'); - } - await this.redisService.set(key, 'true'); } } diff --git a/src/htmx/htmx.controller.ts b/src/htmx/htmx.controller.ts index d472833..f2c7a6c 100644 --- a/src/htmx/htmx.controller.ts +++ b/src/htmx/htmx.controller.ts @@ -22,17 +22,17 @@ export class HtmxController { @Get('deployments') async getDeployments(@Query('userName') userName: string, @Res() res: Response) { try { - const deployments = await this.htmxService.getDeployments(userName.toLowerCase()); + const deployments = await this.htmxService.getDeployments(); if (!deployments || deployments.length === 0) { return res.send('

No deployments found

'); } const deploymentsHTML = deployments .map((deployment) => `
-

${deployment.project_name}

+

${deployment.projectName}

Status: ${deployment.status}

Deployed at: ${new Date(deployment.time).toLocaleString()}

-

Deployment ID: ${deployment.container_id}

+

Deployment ID: ${deployment.containerId}

`) .join(''); diff --git a/src/htmx/htmx.service.ts b/src/htmx/htmx.service.ts index 8b167aa..464670f 100644 --- a/src/htmx/htmx.service.ts +++ b/src/htmx/htmx.service.ts @@ -6,7 +6,7 @@ import { RedisService } from '../redis/redis.service'; @Injectable() export class HtmxService { constructor( - private readonly deploymentService: DeploymentService, + private readonly deploymentService: DeploymentService, private readonly redisService: RedisService, ) {} @@ -37,8 +37,8 @@ export class HtmxService { return response.json(); } - async getDeployments(userName: string) { - return this.deploymentService.getDeployments(userName); + async getDeployments() { + return this.deploymentService.getDeployments(); } async getSubscription(userName: string) { diff --git a/src/subdomain/subdomain.service.ts b/src/subdomain/subdomain.service.ts index 4044514..b163444 100644 --- a/src/subdomain/subdomain.service.ts +++ b/src/subdomain/subdomain.service.ts @@ -2,7 +2,6 @@ import { Injectable } from '@nestjs/common'; import { exec } from 'child_process'; import { promisify } from 'util'; -import fetch from 'node-fetch'; import * as fs from 'fs'; const execAsync = promisify(exec); diff --git a/src/user/user.controller.ts b/src/user/user.controller.ts deleted file mode 100644 index e829a74..0000000 --- a/src/user/user.controller.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Controller, Post, Body, Get, Query } from '@nestjs/common'; -import { UserService } from './user.service'; - -@Controller('users') -export class UserController { - constructor(private readonly userService: UserService) {} - - @Post('register') - async register(@Body() body: { username: string; password: string }) { - const { username, password } = body; - return this.userService.createUser(username, password); - } - - @Get('subscription') - async getSubscription(@Query('username') username: string) { - return this.userService.trackDeployment(username); - } -} diff --git a/src/user/user.module.ts b/src/user/user.module.ts deleted file mode 100644 index 4de811f..0000000 --- a/src/user/user.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; -import { UserController } from './user.controller'; -import { UserService } from './user.service'; -import { User } from './user.entity'; - -@Module({ - imports: [TypeOrmModule.forFeature([User])], // Register the User entity with TypeORM - controllers: [UserController], // Include the user controller - providers: [UserService], // Include the user service - exports: [UserService], // Export the service if needed in other modules -}) -export class UserModule {} diff --git a/src/user/user.service.ts b/src/user/user.service.ts deleted file mode 100644 index c35d480..0000000 --- a/src/user/user.service.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { User } from './user.entity'; -import { RedisService } from '../redis/redis.service'; - -@Injectable() -export class UserService { - constructor( - @InjectRepository(User) - private readonly userRepository: Repository, - private readonly redisService: RedisService, - ) {} - - async createUser(username: string, password: string): Promise { - const user = this.userRepository.create({ username, password }); - return this.userRepository.save(user); - } - - async findUserByUsername(username: string): Promise { - return this.userRepository.findOne({ where: { username } }); - } - - async trackDeployment(username: string): Promise { - const key = username.toLowerCase(); - const existing = await this.redisService.get(key); - if (existing) { - throw new Error('Deployment limit reached'); - } - await this.redisService.set(key, 'true'); - } -} From 6e854f0445c12a402235da5dfd36464606b000a1 Mon Sep 17 00:00:00 2001 From: Akshatkotpalliwar Date: Thu, 3 Apr 2025 03:43:37 +0530 Subject: [PATCH 05/23] removed user module --- .env.example | 3 +++ src/app.module.ts | 1 - src/db/database.module.ts | 5 ++--- src/utils/server.util.ts | 1 - 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index fb8e65e..1c42dcb 100644 --- a/.env.example +++ b/.env.example @@ -6,9 +6,12 @@ PG_USER= PG_PASSWORD= PG_HOST= PG_DATABASE= +PG_PORT= REDIS_URL= CLOUDFLARE_API_TOKEN= CLOUDFLARE_ZONE_ID= CLOUDFLARE_GLOBAL_TOKEN= CLOUDFLARE_EMAIL= CERTBOT_EMAIL= +GITHUB_USERNAME= +GITHUB_TOKEN= diff --git a/src/app.module.ts b/src/app.module.ts index a2d076c..c66c5d1 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -3,7 +3,6 @@ import { ConfigModule } from './config/config.module'; import { AuthModule } from './auth/auth.module'; import { ContainerModule } from './container/container.module'; import { DeploymentModule } from './deployment/deployment.module'; -import { UserModule } from './user/user.module'; import { DatabaseModule } from './db/database.module'; import { RedisModule } from './redis/redis.module'; import { SubdomainModule } from './subdomain/subdomain.module'; diff --git a/src/db/database.module.ts b/src/db/database.module.ts index 0d743c2..a701f4a 100644 --- a/src/db/database.module.ts +++ b/src/db/database.module.ts @@ -1,14 +1,13 @@ // src/db/database.module.ts import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Deployment } from '../user/user.entity'; - +import { Deployment } from '../deployment/deployment.entity'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: process.env.DATABASE_HOST || 'localhost', - port: parseInt(process.env.DATABASE_PORT, 10) || 5432, + port: 5432, username: process.env.DATABASE_USERNAME || 'postgres', password: process.env.DATABASE_PASSWORD || 'password', database: process.env.DATABASE_NAME || 'flexhost', diff --git a/src/utils/server.util.ts b/src/utils/server.util.ts index dd5f52c..c66ede2 100644 --- a/src/utils/server.util.ts +++ b/src/utils/server.util.ts @@ -1,5 +1,4 @@ import * as fs from 'fs'; -import fetch from 'node-fetch'; import { exec } from 'child_process'; import { promisify } from 'util'; From 3861c5fa1b44b16620d6613a140978b69f130c06 Mon Sep 17 00:00:00 2001 From: Akshatkotpalliwar Date: Thu, 3 Apr 2025 03:44:46 +0530 Subject: [PATCH 06/23] nest/config --- package.json | 76 +--------------------------------------------------- 1 file changed, 1 insertion(+), 75 deletions(-) diff --git a/package.json b/package.json index e59649e..d870241 100644 --- a/package.json +++ b/package.json @@ -1,75 +1 @@ -{ "name": "fenrir", - "version": "0.0.1", - "description": "", - "author": "", - "private": true, - "license": "UNLICENSED", - "scripts": { - "build": "nest build", - "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", - "start:dev": "nest start --watch", - "start:debug": "nest start --debug --watch", - "start:prod": "node dist/main", - "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", - "test": "jest", - "test:watch": "jest --watch", - "test:cov": "jest --coverage", - "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./test/jest-e2e.json" - }, - "dependencies": { - "@nestjs/common": "^11.0.1", - "@nestjs/core": "^11.0.1", - "@nestjs/platform-express": "^11.0.1", - "@nestjs/typeorm": "^11.0.0", - "pg": "^8.14.1", - "reflect-metadata": "^0.2.2", - "rxjs": "^7.8.1", - "typeorm": "^0.3.21" - }, - "devDependencies": { - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "^9.18.0", - "@nestjs/cli": "^11.0.0", - "@nestjs/schematics": "^11.0.0", - "@nestjs/testing": "^11.0.1", - "@swc/cli": "^0.6.0", - "@swc/core": "^1.10.7", - "@types/express": "^5.0.0", - "@types/jest": "^29.5.14", - "@types/node": "^22.10.7", - "@types/supertest": "^6.0.2", - "eslint": "^9.18.0", - "eslint-config-prettier": "^10.0.1", - "eslint-plugin-prettier": "^5.2.2", - "globals": "^16.0.0", - "jest": "^29.7.0", - "prettier": "^3.4.2", - "source-map-support": "^0.5.21", - "supertest": "^7.0.0", - "ts-jest": "^29.2.5", - "ts-loader": "^9.5.2", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.7.3", - "typescript-eslint": "^8.20.0" - }, - "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "rootDir": "src", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "collectCoverageFrom": [ - "**/*.(t|j)s" - ], - "coverageDirectory": "../coverage", - "testEnvironment": "node" - } -} +{"name":"fenrir","version":"0.0.1","description":"","author":"","private":true,"license":"UNLICENSED","scripts":{"build":"nest build","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start":"nest start","start:dev":"nest start --watch","start:debug":"nest start --debug --watch","start:prod":"node dist/main","lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e":"jest --config ./test/jest-e2e.json"},"dependencies":{"@nestjs/common":"^11.0.1","@nestjs/config":"^4.0.2","@nestjs/core":"^11.0.1","@nestjs/platform-express":"^11.0.1","@nestjs/typeorm":"^11.0.0","pg":"^8.14.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.1","typeorm":"^0.3.21"},"devDependencies":{"@eslint/eslintrc":"^3.2.0","@eslint/js":"^9.18.0","@nestjs/cli":"^11.0.0","@nestjs/schematics":"^11.0.0","@nestjs/testing":"^11.0.1","@swc/cli":"^0.6.0","@swc/core":"^1.10.7","@types/express":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.14.0","@types/supertest":"^6.0.2","eslint":"^9.18.0","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2","globals":"^16.0.0","jest":"^29.7.0","prettier":"^3.4.2","source-map-support":"^0.5.21","supertest":"^7.0.0","ts-jest":"^29.2.5","ts-loader":"^9.5.2","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","typescript":"^5.7.3","typescript-eslint":"^8.20.0"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"}} \ No newline at end of file From e85a1740d0e5f687674ee9517a1975b619d31013 Mon Sep 17 00:00:00 2001 From: Akshatkotpalliwar Date: Thu, 3 Apr 2025 03:53:21 +0530 Subject: [PATCH 07/23] fixers --- package.json | 2 +- src/container/container.module.ts | 5 ++++- src/container/container.service.ts | 13 ++----------- src/deployment/deployment.module.ts | 1 + 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index d870241..6e7743f 100644 --- a/package.json +++ b/package.json @@ -1 +1 @@ -{"name":"fenrir","version":"0.0.1","description":"","author":"","private":true,"license":"UNLICENSED","scripts":{"build":"nest build","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start":"nest start","start:dev":"nest start --watch","start:debug":"nest start --debug --watch","start:prod":"node dist/main","lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e":"jest --config ./test/jest-e2e.json"},"dependencies":{"@nestjs/common":"^11.0.1","@nestjs/config":"^4.0.2","@nestjs/core":"^11.0.1","@nestjs/platform-express":"^11.0.1","@nestjs/typeorm":"^11.0.0","pg":"^8.14.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.1","typeorm":"^0.3.21"},"devDependencies":{"@eslint/eslintrc":"^3.2.0","@eslint/js":"^9.18.0","@nestjs/cli":"^11.0.0","@nestjs/schematics":"^11.0.0","@nestjs/testing":"^11.0.1","@swc/cli":"^0.6.0","@swc/core":"^1.10.7","@types/express":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.14.0","@types/supertest":"^6.0.2","eslint":"^9.18.0","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2","globals":"^16.0.0","jest":"^29.7.0","prettier":"^3.4.2","source-map-support":"^0.5.21","supertest":"^7.0.0","ts-jest":"^29.2.5","ts-loader":"^9.5.2","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","typescript":"^5.7.3","typescript-eslint":"^8.20.0"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"}} \ No newline at end of file +{"name":"fenrir","version":"0.0.1","description":"","author":"","private":true,"license":"UNLICENSED","scripts":{"build":"nest build","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start":"nest start","start:dev":"nest start --watch","start:debug":"nest start --debug --watch","start:prod":"node dist/main","lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e":"jest --config ./test/jest-e2e.json"},"dependencies":{"@nestjs/common":"^11.0.1","@nestjs/config":"^4.0.2","@nestjs/core":"^11.0.1","@nestjs/platform-express":"^11.0.1","@nestjs/typeorm":"^11.0.0","ioredis":"^5.6.0","pg":"^8.14.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.1","typeorm":"^0.3.21"},"devDependencies":{"@eslint/eslintrc":"^3.2.0","@eslint/js":"^9.18.0","@nestjs/cli":"^11.0.0","@nestjs/schematics":"^11.0.0","@nestjs/testing":"^11.0.1","@swc/cli":"^0.6.0","@swc/core":"^1.10.7","@types/express":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.14.0","@types/supertest":"^6.0.2","eslint":"^9.18.0","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2","globals":"^16.0.0","jest":"^29.7.0","prettier":"^3.4.2","source-map-support":"^0.5.21","supertest":"^7.0.0","ts-jest":"^29.2.5","ts-loader":"^9.5.2","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","typescript":"^5.7.3","typescript-eslint":"^8.20.0"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"}} \ No newline at end of file diff --git a/src/container/container.module.ts b/src/container/container.module.ts index ac83a9d..fa4f6b0 100644 --- a/src/container/container.module.ts +++ b/src/container/container.module.ts @@ -2,9 +2,12 @@ import { Module } from '@nestjs/common'; import { ContainerService } from './container.service'; import { ContainerController } from './container.controller'; +import { SubdomainService } from '../subdomain/subdomain.service'; +import { DeploymentModule } from '../deployment/deployment.module'; @Module({ - providers: [ContainerService], + imports: [DeploymentModule], + providers: [ContainerService, SubdomainService], controllers: [ContainerController], }) export class ContainerModule {} diff --git a/src/container/container.service.ts b/src/container/container.service.ts index dd33655..e9e0ec6 100644 --- a/src/container/container.service.ts +++ b/src/container/container.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { exec } from 'child_process'; import { promisify } from 'util'; -import { createDirectory } from '../utils/container.util'; +import { createDirectory , getPort } from '../utils/container.util'; import { DeploymentService } from '../deployment/deployment.service'; import { SubdomainService } from '../subdomain/subdomain.service'; @@ -19,7 +19,7 @@ export class ContainerService { const { userName, projectName, repoLink, entryPoint, buildCommand, runCommand } = body; const imageName = `${userName.toLowerCase()}-${projectName}`; - const port = await this.getPort(8081); + const port = await getPort(8081); await this.createImage(userName, projectName, repoLink, entryPoint, buildCommand, runCommand); const { stdout } = await execAsync(`podman run -d -p ${port}:8080 -t localhost/${imageName}:latest`); @@ -30,15 +30,6 @@ export class ContainerService { return { containerId, imageName, status: 'deployed' }; } - private async getPort(findPort: number): Promise { - const server = require('net').createServer(); - return new Promise((resolve) => { - server.once('error', (err) => resolve(err.code === 'EADDRINUSE' ? this.getPort(findPort + 1) : findPort)); - server.once('listening', () => server.close(() => resolve(findPort))); - server.listen(findPort); - }); - } - private async createImage(userName: string, projectName: string, repoLink: string, entryPoint: string, buildCommand: string, runCommand: string) { createDirectory(userName); process.chdir(`/home/${process.env.LINUX_USER}/${userName.toLowerCase()}`); diff --git a/src/deployment/deployment.module.ts b/src/deployment/deployment.module.ts index d441d5e..96a7569 100644 --- a/src/deployment/deployment.module.ts +++ b/src/deployment/deployment.module.ts @@ -9,5 +9,6 @@ import { Deployment } from './deployment.entity'; imports: [TypeOrmModule.forFeature([Deployment])], providers: [DeploymentService], controllers: [DeploymentController], + exports: [DeploymentService], }) export class DeploymentModule {} From d33d2c01945340a148a5389c1fae5ab889bc8742 Mon Sep 17 00:00:00 2001 From: Akshat Kotpalliwar <84370725+IntegerAlex@users.noreply.github.com> Date: Thu, 3 Apr 2025 04:07:53 +0530 Subject: [PATCH 08/23] Update src/container/container.service.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- src/container/container.service.ts | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/container/container.service.ts b/src/container/container.service.ts index e9e0ec6..cbe37c1 100644 --- a/src/container/container.service.ts +++ b/src/container/container.service.ts @@ -31,10 +31,29 @@ export class ContainerService { } private async createImage(userName: string, projectName: string, repoLink: string, entryPoint: string, buildCommand: string, runCommand: string) { + const linuxUser = process.env.LINUX_USER || 'root'; + const userDirPath = `/home/${linuxUser}/${userName.toLowerCase()}`; + const projectDirPath = `${userDirPath}/${projectName}`; + createDirectory(userName); - process.chdir(`/home/${process.env.LINUX_USER}/${userName.toLowerCase()}`); - await execAsync(`git clone ${repoLink}`); - process.chdir(projectName); - await execAsync(`buildah build -t ${userName.toLowerCase()}-${projectName} .`); + + // Clone the repository without changing the process directory + await execAsync(`git clone ${repoLink} ${projectDirPath}`); + + // Create a Dockerfile using the provided parameters + const dockerfile = [ + 'FROM node:16', + `WORKDIR /app`, + 'COPY . /app/', + `RUN ${buildCommand}`, + `EXPOSE 8080`, + `CMD ${runCommand} ${entryPoint}` + ].join('\n'); + + // Write Dockerfile to the project directory + await execAsync(`echo '${dockerfile}' > ${projectDirPath}/Dockerfile`); + + // Build the image + await execAsync(`buildah build -t ${userName.toLowerCase()}-${projectName} ${projectDirPath}`); } } From c1658a04a42a6a7bb92168a6d66d68aceb240b52 Mon Sep 17 00:00:00 2001 From: Akshat Kotpalliwar <84370725+IntegerAlex@users.noreply.github.com> Date: Thu, 3 Apr 2025 04:08:24 +0530 Subject: [PATCH 09/23] Update src/config/config.module.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- src/config/config.module.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/config/config.module.ts b/src/config/config.module.ts index b5f83b8..4a9f997 100644 --- a/src/config/config.module.ts +++ b/src/config/config.module.ts @@ -1,9 +1,15 @@ // src/config/config.module.ts import { Module } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; +import { ConfigModule as NestConfigModule, ConfigService } from '@nestjs/config'; @Module({ - providers: [ConfigService], + imports: [ + NestConfigModule.forRoot({ + isGlobal: true, + envFilePath: ['.env'], + // You can add validation using Joi + }), + ], exports: [ConfigService], }) export class ConfigModule {} From d7a440f9181ba85fc35b33bc2d2279b381904bf3 Mon Sep 17 00:00:00 2001 From: Akshat Kotpalliwar Date: Fri, 4 Apr 2025 08:28:27 +0530 Subject: [PATCH 10/23] Working somewhat --- frontend/{login.html => index.html} | 0 package.json | 2 +- src/app.module.ts | 6 ++++++ src/auth/auth.controller.ts | 2 +- src/config/config.module.ts | 9 ++++----- src/db/database.module.ts | 10 +++++----- 6 files changed, 17 insertions(+), 12 deletions(-) rename frontend/{login.html => index.html} (100%) diff --git a/frontend/login.html b/frontend/index.html similarity index 100% rename from frontend/login.html rename to frontend/index.html diff --git a/package.json b/package.json index 6e7743f..007c91d 100644 --- a/package.json +++ b/package.json @@ -1 +1 @@ -{"name":"fenrir","version":"0.0.1","description":"","author":"","private":true,"license":"UNLICENSED","scripts":{"build":"nest build","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start":"nest start","start:dev":"nest start --watch","start:debug":"nest start --debug --watch","start:prod":"node dist/main","lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e":"jest --config ./test/jest-e2e.json"},"dependencies":{"@nestjs/common":"^11.0.1","@nestjs/config":"^4.0.2","@nestjs/core":"^11.0.1","@nestjs/platform-express":"^11.0.1","@nestjs/typeorm":"^11.0.0","ioredis":"^5.6.0","pg":"^8.14.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.1","typeorm":"^0.3.21"},"devDependencies":{"@eslint/eslintrc":"^3.2.0","@eslint/js":"^9.18.0","@nestjs/cli":"^11.0.0","@nestjs/schematics":"^11.0.0","@nestjs/testing":"^11.0.1","@swc/cli":"^0.6.0","@swc/core":"^1.10.7","@types/express":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.14.0","@types/supertest":"^6.0.2","eslint":"^9.18.0","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2","globals":"^16.0.0","jest":"^29.7.0","prettier":"^3.4.2","source-map-support":"^0.5.21","supertest":"^7.0.0","ts-jest":"^29.2.5","ts-loader":"^9.5.2","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","typescript":"^5.7.3","typescript-eslint":"^8.20.0"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"}} \ No newline at end of file +{"name":"fenrir","version":"0.0.1","description":"","author":"","private":true,"license":"UNLICENSED","scripts":{"build":"nest build","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start":"nest start","start:dev":"nest start --watch","start:debug":"nest start --debug --watch","start:prod":"node dist/main","lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e":"jest --config ./test/jest-e2e.json"},"dependencies":{"@nestjs/common":"^11.0.1","@nestjs/config":"^4.0.2","@nestjs/core":"^11.0.1","@nestjs/platform-express":"^11.0.1","@nestjs/serve-static":"^5.0.3","@nestjs/typeorm":"^11.0.0","ioredis":"^5.6.0","pg":"^8.14.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.1","typeorm":"^0.3.21"},"devDependencies":{"@eslint/eslintrc":"^3.2.0","@eslint/js":"^9.18.0","@nestjs/cli":"^11.0.0","@nestjs/schematics":"^11.0.0","@nestjs/testing":"^11.0.1","@swc/cli":"^0.6.0","@swc/core":"^1.10.7","@types/express":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.14.0","@types/supertest":"^6.0.2","eslint":"^9.18.0","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2","globals":"^16.0.0","jest":"^29.7.0","prettier":"^3.4.2","source-map-support":"^0.5.21","supertest":"^7.0.0","ts-jest":"^29.2.5","ts-loader":"^9.5.2","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","typescript":"^5.7.3","typescript-eslint":"^8.20.0"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"}} \ No newline at end of file diff --git a/src/app.module.ts b/src/app.module.ts index c66c5d1..60925fd 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,4 +1,6 @@ import { Module } from '@nestjs/common'; +import { ServeStaticModule } from '@nestjs/serve-static'; +import { join } from 'path'; import { ConfigModule } from './config/config.module'; import { AuthModule } from './auth/auth.module'; import { ContainerModule } from './container/container.module'; @@ -10,11 +12,15 @@ import { HtmxModule } from './htmx/htmx.module'; @Module({ imports: [ + ServeStaticModule.forRoot({ + rootPath: join(__dirname, '../../frontend'), // Path to your frontend directory + }), ConfigModule, AuthModule, ContainerModule, DeploymentModule, DatabaseModule, + RedisModule, SubdomainModule, HtmxModule, ], diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 3826a16..1f4a824 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -7,7 +7,7 @@ import { AuthService } from './auth.service'; export class AuthController { constructor(private readonly authService: AuthService) {} - @Post('login') + @Post('/login') async login(@Req() req: Request, @Res() res: Response) { const { passKey } = req.body; const sessionId = await this.authService.login(passKey); diff --git a/src/config/config.module.ts b/src/config/config.module.ts index 4a9f997..80083fc 100644 --- a/src/config/config.module.ts +++ b/src/config/config.module.ts @@ -1,15 +1,14 @@ -// src/config/config.module.ts import { Module } from '@nestjs/common'; import { ConfigModule as NestConfigModule, ConfigService } from '@nestjs/config'; @Module({ imports: [ NestConfigModule.forRoot({ - isGlobal: true, - envFilePath: ['.env'], - // You can add validation using Joi + isGlobal: true, // Makes ConfigService globally available + envFilePath: ['.env'], // Load environment variables from .env }), ], - exports: [ConfigService], + providers: [ConfigService], // Register ConfigService as a provider + exports: [ConfigService], // Export ConfigService for use in other modules }) export class ConfigModule {} diff --git a/src/db/database.module.ts b/src/db/database.module.ts index a701f4a..0c45ca8 100644 --- a/src/db/database.module.ts +++ b/src/db/database.module.ts @@ -6,11 +6,11 @@ import { Deployment } from '../deployment/deployment.entity'; imports: [ TypeOrmModule.forRoot({ type: 'postgres', - host: process.env.DATABASE_HOST || 'localhost', - port: 5432, - username: process.env.DATABASE_USERNAME || 'postgres', - password: process.env.DATABASE_PASSWORD || 'password', - database: process.env.DATABASE_NAME || 'flexhost', + host: process.env.PG_HOST || 'localhost', + port: process.env.PG_PORT ? parseInt(process.env.PG_PORT, 10) : 5432, + username: process.env.PG_USERNAME || 'postgres', + password: process.env.PG_PASSWORD || 'password', + database: process.env.PG_DATABASE || 'flexhost', entities: [Deployment], synchronize: true, }), From 15034757b30085741ecd0f1a43e75f2db2203217 Mon Sep 17 00:00:00 2001 From: Akshat Kotpalliwar <84370725+IntegerAlex@users.noreply.github.com> Date: Fri, 4 Apr 2025 08:37:34 +0530 Subject: [PATCH 11/23] Update src/container/container.module.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/container/container.module.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/container/container.module.ts b/src/container/container.module.ts index fa4f6b0..bd2ea52 100644 --- a/src/container/container.module.ts +++ b/src/container/container.module.ts @@ -6,8 +6,8 @@ import { SubdomainService } from '../subdomain/subdomain.service'; import { DeploymentModule } from '../deployment/deployment.module'; @Module({ - imports: [DeploymentModule], - providers: [ContainerService, SubdomainService], + imports: [DeploymentModule, SubdomainModule], + providers: [ContainerService], controllers: [ContainerController], }) export class ContainerModule {} From ce54dffc698876eff36604b0f54d330c62100438 Mon Sep 17 00:00:00 2001 From: akshat k Date: Fri, 4 Apr 2025 11:44:07 +0530 Subject: [PATCH 12/23] rm redis && add config.service --- src/db/database.module.ts | 24 ++++++++++++++---------- src/redis/redis.module.ts | 9 --------- src/redis/redis.service.ts | 24 ------------------------ 3 files changed, 14 insertions(+), 43 deletions(-) delete mode 100644 src/redis/redis.module.ts delete mode 100644 src/redis/redis.service.ts diff --git a/src/db/database.module.ts b/src/db/database.module.ts index 0c45ca8..c2b5523 100644 --- a/src/db/database.module.ts +++ b/src/db/database.module.ts @@ -1,18 +1,22 @@ -// src/db/database.module.ts import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Deployment } from '../deployment/deployment.entity'; +import { ConfigService } from '@nestjs/config'; + @Module({ imports: [ - TypeOrmModule.forRoot({ - type: 'postgres', - host: process.env.PG_HOST || 'localhost', - port: process.env.PG_PORT ? parseInt(process.env.PG_PORT, 10) : 5432, - username: process.env.PG_USERNAME || 'postgres', - password: process.env.PG_PASSWORD || 'password', - database: process.env.PG_DATABASE || 'flexhost', - entities: [Deployment], - synchronize: true, + TypeOrmModule.forRootAsync({ + useFactory: (configService: ConfigService) => ({ + type: 'postgres', + host: configService.get('PG_HOST', 'localhost'), + port: parseInt(configService.get('PG_PORT'), 10) || 5432, + username: configService.get('PG_USERNAME', 'postgres'), + password: configService.get('PG_PASSWORD', 'password'), + database: configService.get('PG_DATABASE', 'flexhost'), + entities: [Deployment], + synchronize: true, + }), + inject: [ConfigService], }), ], }) diff --git a/src/redis/redis.module.ts b/src/redis/redis.module.ts deleted file mode 100644 index c3b2835..0000000 --- a/src/redis/redis.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -// src/redis/redis.module.ts -import { Module } from '@nestjs/common'; -import { RedisService } from './redis.service'; - -@Module({ - providers: [RedisService], - exports: [RedisService], -}) -export class RedisModule {} diff --git a/src/redis/redis.service.ts b/src/redis/redis.service.ts deleted file mode 100644 index d6c027f..0000000 --- a/src/redis/redis.service.ts +++ /dev/null @@ -1,24 +0,0 @@ -// src/redis/redis.service.ts -import { Injectable } from '@nestjs/common'; -import Redis from 'ioredis'; - -@Injectable() -export class RedisService { - private client: Redis; - - constructor() { - this.client = new Redis(process.env.REDIS_URL || 'redis://localhost:6379'); - } - - async set(key: string, value: string): Promise { - await this.client.set(key, value); - } - - async get(key: string): Promise { - return this.client.get(key); - } - - async delete(key: string): Promise { - await this.client.del(key); - } -} From 1f53bbcd6933ba93113a45609131477c1e7fa84d Mon Sep 17 00:00:00 2001 From: akshat k Date: Fri, 4 Apr 2025 16:54:21 +0530 Subject: [PATCH 13/23] fixes --- frontend/index.html | 4 +- src/app.module.ts | 2 - src/auth/auth.controller.ts | 2 +- src/container/container.module.ts | 2 +- src/container/container.service.ts | 121 ++++++++++++++++++++--------- src/db/database.module.ts | 12 +-- src/htmx/htmx.module.ts | 3 +- src/htmx/htmx.service.ts | 8 +- src/subdomain/subdomain.module.ts | 1 + 9 files changed, 96 insertions(+), 59 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index be0805f..0a46af3 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -46,7 +46,7 @@

Login

const passKey = document.getElementById('passKey').value; try { - const response = await fetch('/login', { + const response = await fetch('/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -73,4 +73,4 @@

Login

}); - \ No newline at end of file + diff --git a/src/app.module.ts b/src/app.module.ts index 60925fd..f308e67 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -6,7 +6,6 @@ import { AuthModule } from './auth/auth.module'; import { ContainerModule } from './container/container.module'; import { DeploymentModule } from './deployment/deployment.module'; import { DatabaseModule } from './db/database.module'; -import { RedisModule } from './redis/redis.module'; import { SubdomainModule } from './subdomain/subdomain.module'; import { HtmxModule } from './htmx/htmx.module'; @@ -20,7 +19,6 @@ import { HtmxModule } from './htmx/htmx.module'; ContainerModule, DeploymentModule, DatabaseModule, - RedisModule, SubdomainModule, HtmxModule, ], diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 1f4a824..3826a16 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -7,7 +7,7 @@ import { AuthService } from './auth.service'; export class AuthController { constructor(private readonly authService: AuthService) {} - @Post('/login') + @Post('login') async login(@Req() req: Request, @Res() res: Response) { const { passKey } = req.body; const sessionId = await this.authService.login(passKey); diff --git a/src/container/container.module.ts b/src/container/container.module.ts index bd2ea52..5ec4f5a 100644 --- a/src/container/container.module.ts +++ b/src/container/container.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { ContainerService } from './container.service'; import { ContainerController } from './container.controller'; -import { SubdomainService } from '../subdomain/subdomain.service'; +import { SubdomainModule } from '../subdomain/subdomain.module'; import { DeploymentModule } from '../deployment/deployment.module'; @Module({ diff --git a/src/container/container.service.ts b/src/container/container.service.ts index cbe37c1..8bbf452 100644 --- a/src/container/container.service.ts +++ b/src/container/container.service.ts @@ -1,10 +1,9 @@ -// src/container/container.service.ts import { Injectable } from '@nestjs/common'; -import { exec } from 'child_process'; -import { promisify } from 'util'; -import { createDirectory , getPort } from '../utils/container.util'; import { DeploymentService } from '../deployment/deployment.service'; import { SubdomainService } from '../subdomain/subdomain.service'; +import { getPort, dockerFile, createDirectory } from '../utils/container.util'; +import { promisify } from 'util'; +import { exec } from 'child_process'; const execAsync = promisify(exec); @@ -16,44 +15,90 @@ export class ContainerService { ) {} async runContainer(body: any) { - const { userName, projectName, repoLink, entryPoint, buildCommand, runCommand } = body; - - const imageName = `${userName.toLowerCase()}-${projectName}`; - const port = await getPort(8081); + const { + userName, + projectName, + repoLink, + entryPoint, + buildCommand = 'npm install', + runCommand = 'node', + } = body; + + // Validate required fields + const missingFields: string[] = []; // Explicitly type as string[] + if (!userName) missingFields.push('userName'); + if (!projectName) missingFields.push('projectName'); + if (!repoLink) missingFields.push('repoLink'); + if (!entryPoint) missingFields.push('entryPoint'); + + if (missingFields.length > 0) { + throw new Error(`Missing required fields: ${missingFields.join(', ')}`); + } + + try { + // Track deployment limit + await this.deploymentService.addDeployment(projectName, ''); // Use addDeployment instead of trackDeployment - await this.createImage(userName, projectName, repoLink, entryPoint, buildCommand, runCommand); - const { stdout } = await execAsync(`podman run -d -p ${port}:8080 -t localhost/${imageName}:latest`); + // Create directory for user + createDirectory(userName); - const containerId = stdout.trim(); - await this.subdomainService.setupSubdomain(containerId.substring(0, 12), port, containerId); + // Generate Dockerfile and build image + const imageName = `${userName.toLowerCase()}-${projectName}`; + const port = await this.findAvailablePort(); + await this.createImage(userName, projectName, repoLink, entryPoint, buildCommand, runCommand); - return { containerId, imageName, status: 'deployed' }; + // Run container + const { stdout } = await execAsync(`podman run -d -p ${port}:8080 -t localhost/${imageName}:latest`); + const containerId = stdout.trim(); + + // Set up subdomain + const subdomain = containerId.substring(0, 12); + await this.subdomainService.setupSubdomain(subdomain, port, containerId); + + return { containerId, imageName, status: 'deployed' }; + } catch (error) { + console.error('Error deploying container:', error); + throw new Error('Deployment failed'); + } + } + + private async findAvailablePort(): Promise { + // Use utility function to find an available port + return getPort(8081); } - private async createImage(userName: string, projectName: string, repoLink: string, entryPoint: string, buildCommand: string, runCommand: string) { - const linuxUser = process.env.LINUX_USER || 'root'; - const userDirPath = `/home/${linuxUser}/${userName.toLowerCase()}`; - const projectDirPath = `${userDirPath}/${projectName}`; - - createDirectory(userName); - - // Clone the repository without changing the process directory - await execAsync(`git clone ${repoLink} ${projectDirPath}`); - - // Create a Dockerfile using the provided parameters - const dockerfile = [ - 'FROM node:16', - `WORKDIR /app`, - 'COPY . /app/', - `RUN ${buildCommand}`, - `EXPOSE 8080`, - `CMD ${runCommand} ${entryPoint}` - ].join('\n'); - - // Write Dockerfile to the project directory - await execAsync(`echo '${dockerfile}' > ${projectDirPath}/Dockerfile`); - - // Build the image - await execAsync(`buildah build -t ${userName.toLowerCase()}-${projectName} ${projectDirPath}`); + private async createImage( + userName: string, + projectName: string, + repoLink: string, + entryPoint: string, + buildCommand: string, + runCommand: string + ): Promise { + try { + // Change directory to user folder + process.chdir(`/home/${process.env.LINUX_USER || 'root'}/${userName.toLowerCase()}`); + + // Clone repository into project directory + await execAsync(`git clone ${repoLink}`); + process.chdir(projectName); + + // Check if Dockerfile exists; create if not + try { + await execAsync('ls Dockerfile'); + console.log('Dockerfile already exists, skipping creation.'); + } catch { + const dockerfileContent = dockerFile(entryPoint, buildCommand, runCommand); + await execAsync(`echo '${dockerfileContent}' > Dockerfile`); + console.log('Dockerfile created.'); + } + + // Build Docker image + await execAsync(`buildah build -t ${userName.toLowerCase()}-${projectName} .`); + console.log('Docker image built successfully.'); + } catch (error) { + console.error('Error creating Docker image:', error); + throw error; + } } } diff --git a/src/db/database.module.ts b/src/db/database.module.ts index c2b5523..6472fa1 100644 --- a/src/db/database.module.ts +++ b/src/db/database.module.ts @@ -7,12 +7,12 @@ import { ConfigService } from '@nestjs/config'; imports: [ TypeOrmModule.forRootAsync({ useFactory: (configService: ConfigService) => ({ - type: 'postgres', - host: configService.get('PG_HOST', 'localhost'), - port: parseInt(configService.get('PG_PORT'), 10) || 5432, - username: configService.get('PG_USERNAME', 'postgres'), - password: configService.get('PG_PASSWORD', 'password'), - database: configService.get('PG_DATABASE', 'flexhost'), + type: 'postgres' as const, // Explicitly type as "postgres" + host: configService.get('PG_HOST', 'localhost'), + port: configService.get('PG_PORT', 5444), + username: configService.get('PG_USERNAME', 'postgres'), + password: configService.get('PG_PASSWORD', 'password'), + database: configService.get('PG_DATABASE', 'flexhost'), entities: [Deployment], synchronize: true, }), diff --git a/src/htmx/htmx.module.ts b/src/htmx/htmx.module.ts index f376b75..8829429 100644 --- a/src/htmx/htmx.module.ts +++ b/src/htmx/htmx.module.ts @@ -3,10 +3,9 @@ import { Module } from '@nestjs/common'; import { HtmxService } from './htmx.service'; import { HtmxController } from './htmx.controller'; import { DeploymentModule } from '../deployment/deployment.module'; -import { RedisModule } from '../redis/redis.module'; @Module({ - imports: [DeploymentModule, RedisModule], + imports: [DeploymentModule], providers: [HtmxService], controllers: [HtmxController], }) diff --git a/src/htmx/htmx.service.ts b/src/htmx/htmx.service.ts index 464670f..035e12e 100644 --- a/src/htmx/htmx.service.ts +++ b/src/htmx/htmx.service.ts @@ -1,21 +1,15 @@ // src/htmx/htmx.service.ts import { Injectable } from '@nestjs/common'; import { DeploymentService } from '../deployment/deployment.service'; -import { RedisService } from '../redis/redis.service'; @Injectable() export class HtmxService { constructor( private readonly deploymentService: DeploymentService, - private readonly redisService: RedisService, ) {} async runContainer(userName: string, repoLink: string, entryPoint: string, buildCommand?: string, runCommand?: string) { const projectName = repoLink.split('/').pop()?.split('.')[0] || ''; - const redisData = await this.redisService.get(userName.toLowerCase()); - if (redisData) { - throw new Error('Deployments limit reached'); - } const response = await fetch('http://localhost:8080/v1/runContainer', { method: 'POST', headers: { 'Content-Type': 'application/json' }, @@ -42,6 +36,6 @@ export class HtmxService { } async getSubscription(userName: string) { - return this.redisService.get(userName.toLowerCase()); + return true; } } diff --git a/src/subdomain/subdomain.module.ts b/src/subdomain/subdomain.module.ts index c06d99a..496c932 100644 --- a/src/subdomain/subdomain.module.ts +++ b/src/subdomain/subdomain.module.ts @@ -6,5 +6,6 @@ import { SubdomainController } from './subdomain.controller'; @Module({ providers: [SubdomainService], controllers: [SubdomainController], + exports: [SubdomainService], // Export SubdomainService if needed in other modules }) export class SubdomainModule {} From 3b90807fa446fbfb3268b57076b7ce443b7304f5 Mon Sep 17 00:00:00 2001 From: akshat k Date: Fri, 4 Apr 2025 17:40:17 +0530 Subject: [PATCH 14/23] Changes in frontend init --- frontend/dashboard.html | 4 ++-- src/container/container.module.ts | 4 ++-- src/htmx/htmx.controller.ts | 38 +++++++++++++++++++++++++++++-- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/frontend/dashboard.html b/frontend/dashboard.html index 3df3454..3db0538 100644 --- a/frontend/dashboard.html +++ b/frontend/dashboard.html @@ -71,7 +71,7 @@

Deployments

diff --git a/frontend/components/dashboard/deployments.html b/frontend/components/dashboard/deployments.html new file mode 100644 index 0000000..c168de2 --- /dev/null +++ b/frontend/components/dashboard/deployments.html @@ -0,0 +1,4 @@ +
+

{deployment_name}

+

Status: {status}

+
diff --git a/frontend/components/login-form.html b/frontend/components/login-form.html new file mode 100644 index 0000000..c634df1 --- /dev/null +++ b/frontend/components/login-form.html @@ -0,0 +1,33 @@ + diff --git a/frontend/dashboard.html b/frontend/dashboard.html deleted file mode 100644 index 3db0538..0000000 --- a/frontend/dashboard.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - Project Setup Dashboard - - - - - -
-
- -
-
- -
-
-
- - -
-
- -
- -
- - -
-
- - -
-
- - -
- -
-
-
Deploying...
-
-
-
- - - - - diff --git a/frontend/dashboard.png b/frontend/dashboard.png deleted file mode 100755 index e35709489b4e87204a2568c6cba048c7968bd2c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21523 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 z 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 - Login - + SPA Application + + + -

Login

-
- -
- -
- +
+ +
+ +
+
+ diff --git a/frontend/scripts/auth.js b/frontend/scripts/auth.js new file mode 100644 index 0000000..c894edc --- /dev/null +++ b/frontend/scripts/auth.js @@ -0,0 +1,34 @@ +export function checkAuth() { + const token = sessionStorage.getItem('auth_token'); + const contentDiv = document.getElementById('content'); + + if (!token) { + // Load login form if not authenticated + htmx.ajax('GET', '/components/login-form.html', { target: '#content' }); + } else { + // Load dashboard if authenticated + htmx.ajax('GET', '/components/dashboard/dashboard.html', { target: '#content' }); + } +} + +// Initialize the app +htmx.onLoad(() => { + checkAuth(); + + // Handle navigation + document.body.addEventListener('click', (e) => { + if (e.target.matches('[data-route]')) { + e.preventDefault(); + const route = e.target.getAttribute('data-route'); + htmx.ajax('GET', `/components/${route}.html`, { target: '#content' }); + } + }); + + // Prevent infinite loops by ensuring only one request is made + document.body.addEventListener('htmx:beforeRequest', (e) => { + const currentTarget = e.detail.elt; + if (currentTarget.closest('#content')) { + currentTarget.removeAttribute('hx-get'); + } + }); +}); diff --git a/frontend/scripts/dashboard.js b/frontend/scripts/dashboard.js new file mode 100644 index 0000000..ff65548 --- /dev/null +++ b/frontend/scripts/dashboard.js @@ -0,0 +1,35 @@ +export function initializeDashboard() { + // Fetch user profile + fetch('/htmx/v1/profile') + .then(response => response.json()) + .then(data => { + document.getElementById('userName').value = data.nickname; + + // Fetch repositories + return fetch(`/htmx/v1/repositories?user_id=${data.nickname}`); + }) + .then(response => response.json()) + .then(repoData => { + const repoSelect = document.getElementById('repoLink'); + repoSelect.innerHTML = ''; + + repoData.repositories.forEach(repo => { + const option = document.createElement('option'); + option.value = repo.url; + option.textContent = repo.name; + repoSelect.appendChild(option); + }); + }) + .catch(error => console.error('Error:', error)); + + // HTMX event listeners for loading state + document.getElementById('project-setup-form') + .addEventListener('htmx:beforeRequest', () => { + document.getElementById('loading-message').style.display = 'block'; + }); + + document.getElementById('project-setup-form') + .addEventListener('htmx:afterRequest', () => { + document.getElementById('loading-message').style.display = 'none'; + }); +} diff --git a/frontend/serve.jpg b/frontend/serve.jpg deleted file mode 100755 index b58510d7b6d533c73334666f6dd5049d9d883a9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404632 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%0Aw$qduNzG}+YIexJ~pP7w9<1r}6)x#(^>ik(i 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

DFROR=XF`~ z;yQVozw((*g;HDnACn0w@ADr2CzlKs?m7N~uU1fmIe`oS6i@?x^AQp(gac&5D_4SX z1)!`kfHGsipg_Z8l>sdH3SgBRC~iDZYJml^?)Jb8f#}d9vEN;z2?R{xfPx?xt5pr2 z4loGth(SO2Ed;`%>82lyjKokN1XGOxzQAO}03U!!{IA*t8u?5n6UKGT+kh6i2r@<* z!X*XGGV(r`^81h;#qCbc-bZOL;W;V_^Xy>`Etk%wa84M116QW#}?J^}ACPo}zsvP%nk>TF#b}(^N2>4 zTn`BW*;v0ppe2E}BWXZlXh{dKE@rDHFeHrO!HoG2)DiHMRAnH{AoHaQ{2uTR#4ArO-3pxPB(Zl2IFaCY4NxQqR#<^||AiaC z32*rn5E!#m1QNT16Eb}=t~qlh{?4I3^zTfFn0&?S?|FHBPr8HAg6Q`)Z-lkSQ!kj3 zgF8P5wg0|deAHs;{cFvtO6Z zibBverh)n%h$8Dd%mx-1TLc`Ph)F^rDS$f$CKkih-XI%=sWB-|MFRMBFeS_XYu7xF z4en-rFK-4yi~tybD=x52Ik*O1t~0J!;4&~qOenDQhA^apWyJ-A9Ej#)3?lHk4ksTx zQ4M&*AUcKwsp6y*0{D>%GX&QJ0wqz0K-38V+k&$bz`fYLB~Yl8GaNe>Zi57Rxe)AR z;CXmj`{>UVeKl~t%+O)j!xmmj3B^_I4KJ>-k^7h0fBQy>(0#N$c zfP^$eba{gT=MzM-C{Pl}z0(1l2SyJDC?j{BB2{C32TYHAz<|KT0Fi82PAD0u$pZuh zXbB(%pcebRLJ0;Uu;_(Ur4W3DX_zh``kRDY+)(g_b|n*}Dlldc6kr6<2nOLmGG>B$ zvbt-(gNs0}1TMd&f{AiqS)(zC1CUZc2xKV1fBk$2wgJYbhBE_ePo0wtn+&G+ndn|OM8WwK_7IOUe!K+XA7*@-sYz}_3 zd!T}|TCY58rhb|A*V}-ju{$69#lT^IEh-Sf-#~YqkbK}+#VC?v{Hg1lJ*d_K#B|-# z)i8s^eg@Wv;3A8mkU}{mBp(ydR|i#0!2AMYtOPd$SabRKGXMPoBZDAV0AZjH%xqR8 zoI3%vVUQb+1aC013vgu#hJ}a0y&w%5BdaP0&;mjp-oSDAzg=S@2!LWR?U_9U2^1uP z`A#`R4b&_{@WKG(xVoUs7-Rm{aZ-fNBok0H07!r{LV>Mg!b#!dMuE*<0+m=*-m*aK z9w9F`_AmcF30Ms6S!kY_nLc_&^!n(k=S^+GG;9!K`(vsXh~*1G#SJDOF2kb0tp@}& zrq%@O|4sPyV8EQpAu;JF6CGV<=zkU|C*&qGhSZ?o94QcTyN=(0n}Nmw4T;$YSs@=F z8kvt{T93)OgIlqYm>VKv)vo`6UUdF*=z*BUWR|f;S@bY>0Pvuhz-j#~Wp{b@&Hc2zw*o`5GXbH(5dfkpzwjRa+OWW69)1i*wt zpe!<&ae&4NrW`a-!wjlC!exNV0}LE6nH4gaSOtj6V!xMxG8Y5=@xSZ^raBokX5i3+ z3C>3XP*mz>tD05;835shA)b6p<`nz@12>TK*L^{ssQ@Hn0WBp06d({B#rYsOX{|#E z!#wSOjVRn#wAgd_8aWNwaAq1??fFFtm z5&tCNez$Y&LhGYOj&0o*FWP zk^jBLk^{HRI%|H$$dYT%li-@+{&R7#ue%1n0ul&I0Tkq^THWL!uB4y9&&%l1mF6EH@pCBGD65q0p+se1aJ_`a9-PL7{j3ux16^? z1wx#eu(eFPF?Jbr&{Ma48uGi+8Xf3O%9@G>teFo80i#xV^C7rMlSr~cK=2qCu3^Ej zzX7mWm>b^90#S-4dr^oF%pK4TlnhJeI!K0H!ioe>0KN(*8HQ~zBgGV!fQCeXsQ0z7 z0JH*x0*`o={<2<=}0I*0%F1$Z_va}_bN39k;wKhS{k1ilwwRp9o5$p_?c zlNlpb3DkL!U|&;k=QU|V@IZk~K1gIB!RKp@0D;U#iUExPxChWXFmXZG7(M|~Aw~w@ zTEzeph{8aqLl!|nhBjybg_uBNWD>##B_J6i*S+K9dtaLz6qq~JNLBQ}&P?)O?I3!3 z2nhHDo`(%;dP_jy0fd1zK`{;h4olT49~;KZTU;OmL`7Y_stjO3psXMux(3ugmKDMt z3<4S{d&~;H&c{p*W@Nyf$An#hx{k2|>NVTH{SwmM4d>DyBhux=y%PQ4&rJ~Ht`h2Rg1_ao;>8tpM@Cqp?POFB_*TXCzkHHe3##e z3iw4mVe97)n%+OS@yI`Fyt0nZcwV$-9eXA#G4OpuTRpTPtAPgXoU)LvbkIU_mrnZS zlCIf_$0z4zbSm9;At@t&)X)g-!pOv4FF(qJ5;aR=52qd=(rYr~c!@{HpO-~{if8Pg zL)Q*Ps2Wv{w78i9Pj&|V z2WmR)_Tix)vnUbxI3S3UpV5y^bY^r!3U{u2x#?$7Rs75_izt};i?`Mb+ODTyov^%I zy2>juzh6gMWE>F-!LvxAKDMM+7K0)P`X}XIlGk8yXp797c0wBG?U9ufKNCB2o1476 zhulR?w|kDNo-5_8E;?JC7BQq)XOg?qh=0z((KMAfZr&}z^)XWzsom7Hv3Ohndd?|E z&BPnr7%74p#Sk13SO;(;|oJ%Hywai(;F6QF}be%D2Brjq_Pbe_13Zw%&QG@Ccj# zGtO28yF)n2SWjopvtf#dUWf-%Xy zyn&l+h{*PJx}hDLA-F}pTsK|ABSCh2Dr|LREB4TLJ#J%xN&Vps=9ngvc~*CO>cag5 zf5jywg(blX_k>7>x(1Yc&IzhHJs!1CYyCt6z)fTkBC#G=8tYU|8K+n{>C|e38MU8N zcX2_0;feb0+0vs*T>; zx{*__YJTS3zyf>Ym+IZVFn1b<$A;&Hkm71q_P-~0+ZJSBN}zg75Z4lLC$2dNpVggM z$t5T>V!GBm)yFLL@0U5en(jw2m6{@4>;)q9zS9BdxrHpfcP!0`;g}ui0xL^0?NE(HhY+b=kVS3R{b{o{Tsz z92h6u%-J5a$Ze>Fz|&?L6?dPG*iV4O^dyh>; zm;P0@uC}|d81_m>O@*4GMApQ6vEr$mUj~b!SQE)ysJY5N+Z8*?MyIyt*t-vqHqL>=AI2tX?BbdOw zT{)*)L(xn2CE@Y=FrIC*k=87ahBf;S_Wj_GTv1`-Q6SqQy|vfd-_$KBf3k8+b=xAa z=;tMM^#_(>GvphBHy_c|(7(Jj2mU-UFS8rfbEXoyaUIb#p@Vcn8LY$~Gp0q=X{cX1 zo`$lGD?U$8tZAju7ir(A`Q%Ol3u_(ezwJR((8}z`&{(=7iO^G{Q^ha0-zP2d5Q2mK z=CivV#ZP)QuOMz&iRxT7eCQoLk|#`lZuC2!mGtehNsTboh-~Nx)u>|V27j*o(MWgD z%W?iUmQvkep%=fu9u0p7AM^Z<#$I36=B4sgs9JNYe*Z09#1TOraW}8pQCq2~Y~Yjc zdArsdQq8$z?q8PYdkjxE?#VCgg;H=@BfCSG%&XjCCOl>);wVW|Wh2q3FQnD0bS#^9(;V%QKw7Wk(m7GBU&8e7yn9UJ|W z#w#xFBSV$jpNx1Z6_rVGW0)5esYm;o893u_tl95`zdFqIgfh~sRDhpBY(v=Ud+74LjnqESiZ zRHZO!Pp52*y)~7v?GBshmUbJ3DZ5s}jD{!bnKD0SNr@JQdM-Sa?f1lf%le4rF7@mt z<)+b|QGAnq5kFe!l?>7&;#16y;u|g{ysVu`XoVx0 zK3cVwanc$0+&JbhC|QxdRt`)XIvgyg29QsJsnkDLunTKR{DnEv8w(5|jYwEw% zq?G8Y_1jygnnOl?65yirliZDkGyeL74e6ALuYK(3%4o})D0|D@W7f;}!@RlM+Ld(S z-er&#wZ;m(_}nM@`*%&mW2uge4i=)+`q&2%zOz-T9ww<)c}{^xsyIXl?sNS1+Qz+S zQMeRbMzph?&tjvbI>}}3 zX_+*5kE-eW@y)OiaK2<6e3|mNVtGb!5B5H$)6f!|UFPF7+3@Et)<10b4PW*tmQB?+ zrFk1M$$CBL;};kbD)Ut~$|&#EHlw%Y3Cw0wtSuTLE*3u23xCDBl|iv9$%Vi0fWfJA z+EG-#!71OaTG942_NPVSyi5Ju?rQW`_D{wyPh|U)d-03i7zC6W<#>y?lHg)`%nMr6 zG-OAttBUP0K`*I4$P8=}quhSg#+AbHlx}_YcXSPmrG({XJulk3n#{)uo+aqH(b~uN z5M3=@%udH?hQpstyOFB8@z`}UAlVh7{@D|E)PsNv71$xCPn8p1%%P2Ys7GN=hGI4H zW0vImXisU_-+8_#OEBl@L*j38RFdB5~MV4f)EU)p`vA-LynXLQdAJOEFg5FzYyc5xs{X(HHOKeJf zP=Vs@&52D=aV~rnH63kO2aLNQM}uK#{bog-Uo>q{LH~{n(beDdPdzZcNoSnC%fthEsJ*uVC|dv9QW(YS);eiai;-qr(XEHp``J0Vv$!2 z-7=i8;YfXvCbsk;M7zP?S)|jD4li4j(!X~hmXW0W)5q}kKix|z59%YU*>kPBJ4BaC zD#~uU-uP4&&A9o~qqEVxQ>^*V?C|q%0$*>>vNQ~A;~NYLE57U)NW3KO9`|+VF!6Bz zU7Oc0IUe;hxpeQ3vy#Be$q(Myj_pDZtHfIW%(o_?tfj_hS8HR+ITq)eEP9N_y@yXd zyWWg;)ynKF93UQ#(Y5|=ZC+v7S@@c<_oZE0^t7Xiu{sZ-H9+(9K9-i6NLI#k{hHa+ z*ed$_abNXD#1~p#QWP|ai^-yG)P4q+Xq&4j#QsTJTzh;s{WeTdLGZN56cz z1)_bm{p3ZS8)hy0;|z(*!H>j~-~x3GwlwT6+=l8mZ=q&Z6Q@@QH%_}dXWVL}K7EOD zG5l6SBlst2aoj~JA% z)0qE0+qYjU+R%IblNE9*O$?b|kzE?Ia*Z3O?@|o>U&l<0YW1mgSIXuXZ#v9`upBKM zR3+KoUjC~`nx4GNB@S62y3!Gqcj9AMsWM4+7Njn~efH>^e1AuCzGn;{LfB7^kbAz) z^LtF?)_hQrUY!Uh7k(~f@tru?6z)ts(Z|NYlDfV;Of6Wcs8=5s9guh>7HT@_#+yph zA$UFue>?uJk+1$$vC2u86Xyw{ZO&$ELXYld7E3gy!kiR^oC;_(!8r{X!B%AF?l_MZ z0%T3Lek}f^eXEufLzHr8#2SnLUd1iO;%Bd%i432I`ne))@#iD*!dodk#472z zkLk6I`GOlh?t6VMch{6>UM{lEAxTZf8(LU+BDGI-;p+1);BH8$W9MIP?3`&HAy&q& zz)jJ3Y-1lW-X5Y7uUQA(c$;iPix@O&BNB=?aBFK{TD<&{h|02>-C5x9M5W3)Bggu4 zjQN5ZxdO=wSoiRM)@wpZB!7pUpENOTCye8)G|vxQ zu6m8X$n@@PmJl zbI(WJvl?Rq1tzfru#6nt{20UaJY0Km+36hur}P*Kp`}`0sc8gmUE4i7s1sk26zUL7 zl9Oh{{acUsC!F5&{h3=x@F|Ybj9V0Y?+ba+4CjV)d)Oc74cn2_7awyLZ^p;EQWi_> z2*mLV6MW#A?PoT|GoIfUd;9q5AL_en%jsCGQtX{G@d7j^AIEMpYjNwQCRnAMQWn^z zyi|RxfVk^^zCzuZ<7c;>Ps)Rk`0N^@`29+m%R#X$Y*(T;Ky&{{vs%>q{r0!JbD@vt zX$hH{n%tTgbE9$*T)keFK}|F_2o_wE)4jv9%3tSvc2ZnWy3J9Y@L(o1@J3cv_TFjs z3OI4?kNDm3Rn@HdX;)IJ8%Lr3qlsiGE_%d{PS$0kBQ5tb-xmIHWAIj0zzG+5hb`9l zGqygp)q3Mmaqx5@x)INnIj~zoop6=I=E!BLa*$BLwc|VJ)9RTEG8;ynhakkqE?0 z;}@6@n^Bcui28jVO1FhHtd$!@4VA_fS&Uu}7rPzvLd6SnzKJoV4 zfwA8r9Ubk@*lO>yQ_C&Te>ELVT_oht_o0=mt%Nz~(j$U+JTLqm#;VVU@z828yC#U? z$XnbwpW@dneDj{4W{5kPyEFA(r(_WsX+_4(h>DhGJ|mguf1n(6)%m3-`M2q1>43p& zDMq&>gI;YY3+tStV(DOpdFEz5YNd|qqq}Au@8da0Y}WrB^HA-}M=}){ z1b#RszboxSz6uW4{hINUF~J5!9bm*oulgCt&b_T>QtqM5&BEtS>!D9RE!Wg{Sa4M? zs8KGw^?R zPFpl|`HIq`W>^+U?xQXs*7vmC++rrlGEKblA)RmTTt1vE?{1c+8X(hDYGRFXcuRX4 z=w;N{^3ClrqJ z4Ov@XFk#D)+iviTGEq1c8NZtD9ZOInQ_7Dq^0F)!E6eOa94=V|@;;gRBthdm?`#NY zx|1ZLINDH-BwQ=Lj7hwKz4c#7ghi+irhg6r$;3m-M1ChY ziuP63q>G%&G^z6#*B5c_vwf_?B||qJhUVtjXHODJgMX&})^m}Vi1mOU`YN`!8j!PF zJa4J=`v{k)DP>g*Wur<EDkG}PSux? zp?M><{h<0 z@VCAL<>fyw0WjjmLJxPp4*Lby?4eJMnjMDRY4GCBDDOyY8BQxr%3-NIOOmI*v6}Jn zQ^(o8&|fQtov6RuL_V)0jqKTsaLh-ExyST|awB}iD-_d+N%hhZDno+@&$Zs`2o%NA zv)s5Oif-WWPx9rzfS$c^kd05Ug;_YAcaSL67NOhI@nOeh^bA@kiQvsx=&<2x)YJmm z$Nh&kHGFi1&5ik~WlH^uFV9%_FT5NB7!VTF(YUb!Db?1_8K&tk>*51MU?j1bap$X z+;x=ld~)f$`zBH@#GjH%LeSX(_u_a~sFHgqY{u_MH27WB0TmK4djw_c8OiNemAMz5 zzCoc*U>_idKk_VIwuY3yv1@N=rDPc#LA8{<64vwuzd7FCn{7P-YSUDBR5i37$eHmZ zXL={m#rHdfBqd5p$a#$8!`EH&M0F~QCGky>ZBt%Zi@Ybtt1VOX>P*=M?!sA18=OtA z$5>M`s^75j1YR=hk-?qX;p~cqJ2JeCUBiBWmPLE(FA{kzzS2@4*be4T% zxb?l~lc{^3=z8967jKjr>eCWVjBQIal{>L#PAH|<^jNjq5eQXS>5;uckX12IK9|U4 z6^t{Xi`t)O{^qT#vq+!Kxqnwx^wXyCU&RzZ-c=_la&~W}quc)w0 zhr+8ZBye<4Xvp))j*1z4mPkRtLM^szcG_b9)uifEmBVkB+aEj55=Ztz!)%Jy+0p%S z@5$=sZs>-J;>~Gcy<_RI!J)1ZW4t@I8WnQIC-G|Ij_FwI0W`E9QE9aIYXa-F#q2$59X07(ZPB&8%BfU`S91Rf;op>UXNtt+&?i zi*Q*%iyzvFmY0T1h@TmB6&owI#X#AX>LA*cv<}*J74*Q-JY8Z_=FW$7uT` z0M)(YvsLP>dZX((_xXSwGoI_go!74sOPr*UWNP^}h&-B9#RExHlT%4U~9GjO3 zvq|=>*1Iz5^8UiLn`(HBGRG}3{~&d>b8&kS21Vd}U3>dPG$>{M&>nqO^|HEKU35S=R`NlR)6 z$KJ<$jgk`QYsG}NqZ>mCwS)ZM^+ye)8Uh%9}wXFO{PwT_wkd_fc|}7bECnDx1UfnthmXR z!CK*GSO?PQ^v_az!NAHkI;>EO z856RBeMS8ObVe!senSqN>QeVbnp`RRUIZQ2cY?`JeiQduAwCMFTj6)87Krp;GpIDA z$l>>Rlr^+zd4PpJQZ;7+^?dcsXl zd^)Q1h9CFPZa-s=@H?wUN_U;x!-nW(6vPg@kE6PX)tF*>t9XYERx$Gw6A=~?s{~%uSZ@6CpW?8qG8kfOO zE<$Op3if_9I@c0NGa0~k8MyaTfxI!9)YnDV*G13%-cV-Zp#2@jsK+w_{qCU|4`vA6 z-(i_#sN?Q_BKfAk?PME4_a1KDY?fzhcW3y6+6D$f`p=!V^xvX&#qd-7~yYN z{ep_xV=3_rr44y>ysdck0){PI6H?{zC! zSgsPT6Wlzxb?*Ons#ljN!IqMXhx#Z%LnUK<>li_svtG(!|7}o|KqPSyxY1P2lWB%S z6Kynx^z+Tb&@Wg0290u+;{5dK3y(|fVX&>#x1}*!8m0H&heA!#bZR(xsIaLwg(hR$ zvKnbVErvG~HNiAm1x_dHxo1L{b!;;FWbx$bLLXn|cm%Jt_J>qOcQx;QtM3|>ZY{aV zuHk1*5h7DdpE%LWJ#(2^LT~^8(-5`05Nvk2rHa}_~RE* z*d{CGmG%}hwjUMG9Gh4~<;BH$?(-Ni!c>%@?Do{eMEXv%yxqr}pOk92iY67Xm<#n} z4bVCKiHqL-x{Cy*y1|*WzLQXKo+saFR@?RuyT2K_A-Y_On(==P1U&uy<6}^yd6t6P z@K8FfkLP4seuRyg?w-`_gPr5Q=l1E!2N!p{iRu`SrbeaOh%CMTK^)2Vd&o|+I-|#L z4vQ`I_MEPw8YLMcy?Lk``YFhskMM3yuLBQ(taCl@E}A^YP@^PSir-Zenz$(8PohCC zx^sz86EGH(CA1hrt3)*0zgHw^vgv+RL8|4_BDE56PH>q;^zie8&RjL#t!ChBO!teI zQzRSw`bfUflAmJWb3)XQitk*T2vmTxkqLW=?B3ruuB9)1j2n?D)c$vQWmG3zFMl$Q zQ%S%hYC43ee$uJ?)>y6jiFKxS`PG`@C%a+CtGTlDqn;R#=^_8aCsSZX%#Lr=sf#SU zKMe~xtDK4##D4pRMq{EmrcPL=<31LZQVEq(@!ks>MW?+8J=v{q?#7`ObD9}MCp<)g zLN%Z04u=__h0{ zU$dzLRg=`_jeh;|697p`5Ki#dqyLjRy#};q4ag}j(t@; ztZc^vrQ2wnMV@z68#GevacT*AXz9oCARsZdj=FAU4WEk-o*M~RY8bpIRkY~J<~P1| zL!MfeZh`h>BV$p~@s6$P+X$IbRo*CRUrAxaOR_418b4bCbibsPX*CUqeZ=YJQdVU> z;DF(15#(9Cv!rVlvR8kovlkpVJbFbKA(!Y0wG3Ndtabirzum5@I`=+9%koFx@n%QF zK`?PHyGBa@>eCaWhhuED>=hx}A386eS~CWUUHs}^gO1NGnO|m|PcpO7k%yexj5Ouy^&;XNnnQ<>H zRd`T+zqG@AZuD8`1o?7JSu%=3qf5N-`%XWTlb;gWRM0AC+#*g8X^Z>IL7#gq=;0&t zM($Vb`3m<2Kt$0~RNq-m!Bx}^4ReH>hQqx2okpszbQadQ|3OHN?@S5^zgP%;Xw}%1 zbz)Yvm9cTh#VNyKXi-=G!RO;6O6>FfifnGgVzg6Y%BET(5Ws<=sKqN3cidkMWhLb{ zsUF#>;-Sp3U&k>^9B=ztXVShKFFk>O`v;j?%7cMT!r}Wr!+w~-nXZ;n$h>@25~hX~ zWMs-u)S(}kzpC?F-Hu)CRkS@iuBzX*Js9{luA0#<%G3E_u$kpfFkW*BtbOlifIa?@ zLa{x0mPj0ag0%<3l+0LxNexOTC*zS?BbqCPx*R8d53mnXt!6x zG*FGcVeN;`o{JElzBB&IQ2zFlMk&NYT~b;#pKLCg1>)oN zx9MXE3C;pCR&T3GJQBtiaMoLza}Cg+n(4$VDGf*8)I)756gCMZ>NRtz$>`qSN?y+w zzE@x@Q~pd!MRmkNZr75iRb}4nBKI-V1*a0qI;NVX z@OTGHV`ND6$t5Rsikda9H_Zh8qhZsALwvmTTI$m0f-_m7$2p}d!Gb}wS5_)I75ynV z;;IV^4-k_sy(-fwJZK(OLDFv`{~rYv)>$Z;#(D3hTg&c?ar-p-nlrKcmIpo3vY&j1 zGRH4H)P6KQK48lDyBGYF?3ab_)0LQmN2lj+!gd{drl%^n-se(wNborerfG5dtBDb7 z8@4H->tort-n|b#8{z2R7eQ88%-~khrPmP8QWm`aOFUsZ>gRO(Ce^)`%1#j(f|?tK z?*?rhw2N)inhw-np>7&h>X%pB;ffA^-+(<8*W*9fS1~!4^|~RNmg;g(hp-)qND~q~ zA9`{kNLDDc)aoLKs-(7s6$u8h#FxkxqDkUu$KMW|J@)tN+V}@4x8r&K^{gM>>&Mx_ zC3iQ@h&VxYl4lHqgh8>A*9|uZ_RT60=uFxHNva^kf(ME}sZ|lTTI7_d(mUFSzcHX= zTS6nts_RWjY8aPtE$O7s*vEDIHHkL|{b#&Ea|6Ha!rTkMVL)2B5?ZC4L$uive2D%q zPs1PdoQQiVC3+c|jd9|$r4$ukiKzPbRR`*qG)>ThUJK$5hxV15(L@;xdL9x*Gsa}} z!s?ukPKFG@?g0XLyoo_GIWglb26evNGvPT?W{E#Y%b^My!~O8fcy|%3Mt*kfJKO`@ zw*+Jb&k<+Tt0!Y)V(lI$MA7yCApSxf4*Bd%Y3n321Y+q7=>ubNMuJMEJ61VHsdhrC zx79`LfP2CERFZjmZ|B45=y#vP zdw;E-RCzr5vpe-`D0oTr$5fdGRh$GoP?a_nMAnt`pU)1>lQCRmQor5#=t{lIq9dSi z+<24xxzpQ|y?6XR12QQhsPY7#ucYZ zD28wEJ>(s)PkP|!nET_ykgs-I((XUVH>ynS*+q}QTnWF8bec(*0hQ_8^geO%5#6pw zZC0;G2{qg_91`>fnQnQ@*9ATvheq96uDc-hd&%PDy78e%613-K+PW2SeUp$u^(HgkAow|6u6{u)M)Cx|4>B<2HS$(WB)et49m`AQ#0+ z=MJtYT~kRG`scy-J7hv1&u}ARGflrS(fKt<-uL88e)WAz@TN@L#wC@+6_r*RyGgC> zw&TN`;QFg)L2G|BrGt|^pDg@okZPF@i2|hQw>6@hDk9#_cV93aPC*AJpB?Ugb8+ds zr1L54(-(V`;1Ibdf^x%T#jj68xKESPBD(~B`MK?aGUWW=Dg`T~lOFa}5@b8~dulIRVxDBi&hP^J{v(_X-eh=fdzwFDun$_DZmzdC({KhVl zF;m66QRR< zz8j|rXs9sn?qG1^r)Db;eIXk@f4R2@oqQuwUS0AKzA#KpfDm0Hw(^(# z>(b>#E}H*>hTmUm4b^nTo03Z29NcVQoudNeIC^<;6?k?s8fZHAiYSqfa8SWbXN?|fRS1*9_X6m%y^=9t+tzSm% zDctoA&yVW7Z#ou8ruTd>en+c|;MYa*nh|6fsi=z5w<)po zRW!Rc0mb42q{m0A>plJ!bL4a9*>BGBcRxyR+h5K+>_IiWb(aR<$6Vv*v>dLv&e6Ms@0A4Lt28tFNB71x3(S(<@4_gD(sK=eF7@_ zfz|u^!o{b~Z!4AC;trVVlg^l^<@7wK^j`4{jOiObWnH7n*8QwGhRV1h&j?yW6KB0iXG48DZ&H`b>3izwj0U$_6LIO*3MCIt2PBu zA17r=RIcK^R4)5!rDg}V_JzYA+4sLPD|>=Kt@0#eU`Ezf-=(Foz~8(pi;nV!c%z+3 zp`Z-CostE#Uyqnpmm_8xIHZ-919qj;>vUHc6VC=62Jv@G_n4+yFMeBo*e~$dFRZ6OV(8>= zJ@M}DHCLUg)mNm{wIug0nNe=c*m)_YmBz0-Rc6^u{-z|EJazy*RJ^1_rTgHo9K(pE z_eZ;8<|S`Ee+N4fl5z@b7^PDyD(lqpU?AY;V#Cs`yR~7gD0T^o&$!p+jpx;~x!g$8 zWQ8toq=M1_s8*wP(b1=q_=4ts6vRE5^ZhP7_-A^YO-HkakraQ&dG4E2w|WLpqetGn zv-vRnqMNu2RP+vS*cQGql5WiWF7?#<&i34o$nV?s@B4{q$I*{QDFvZ#-yeD%*tGBY z6Ff61ktr3wt3Ee+$$w^ZnY>TF%HiN=%VbhHOF9#qiG6S|rsdnwB1v77)c8NdWko%E z6qQFu#{GOTjR2>YFve!cVsfF$8cO@J3Fo^RTbdK zTQWZDn=4`2O@*3jV87R3Xv7~wShv&fx3ISn+&%noZwW;;_YXq#590A+W%;T1nk&`( z<-M7l%xAUqd7iSazvUOwp@QN(O-2&kwdV!tr%c`aHD|WBR!%e*q%9Zcw<^Zz7SR<) zmp5f8M&y#dmdSmSQma-IRID=L*XA;dA*K^xn~B|RTdNl&j|RQ&SxAH-g2#UgNQRZ|-^ z=es@3sq|DYa47SrwqV*$mz!po*+3MDs~hZZl3tAVOlRuPIwh(H!@Vz1eEVkLo8Yetw>y8nY`z<~`gJuYp!r1J)JGR7 zOP}cmaf>nHZmLDnc#_c{Rv5pXL+?4uogK*8;B!>&bJm=Dk%!v#uH~Dg9lCv zzba&&J1jY(Z{IrO*x&kXcC7fQQJeO&Tc$UOtC5>oMzB!YY!O~*1oNCGWz5&AZnSy( z@?lu#YYyX@?di^Gr99%H&uBSQEuJ7|)4H1lP4MuFS19Wok&*s#lQKv9!;wo^>~8bI zt-yKPjW`NfN!Hnjl*5s&W&&XzP`9*S+yqNnM3NGZ@@R7JmEkJ}o<_GaR%t)FWIlUB z#}NHJezyx9-F*B3e^d^e(5}&{W`U?Vo1b(fk#+s7#-5F(cLJ*7~Lr$-6E-|;QjS?|L^~658%O`>^kRM zajy6EIo+0><=P02eX-pAxo8Q0Zo)kEmm0!Tc}j2b%ak_)WnSz{R4zNrh9_gGvu9oN zQY<(%$AjF%7k{2YEGs4`^J{Zo-sgA zz`(D5yYK_;vt}4vUL*tp5mSF*&aSnv8i6!@C*NZNKu&;Vu_nQ;L-%5B|59@l%UkTt zEU8G+o4@k0n@A#+UnQX?9CmqA#my|i~vb*$8O8L=nv4tf+C`7q$C zmFk`FkF<`}SJxBY-eT8ilu=_>@8EJYrU>OzjN0LF4X6@_W)+h=aqlWh+K;P?^|NRH zKmj9b!HIvw(m9LS;untg^E5b2EPG=fVhf!Wr_?JK>xVT=@soWD)>CW%SfErw!%-~M z&VIfzH_4!;GTF~DLpC+^5N$hdH1!Z;I9oi(Lx<**^7w@58SYi13LKS1F#qbij2en$ z_U+truMNy^inzT1!|OFFUzILuUMUj=Q_ND`cY?Bw>Y_ME5^qv8g&NLJq9d*+wH$id_%Q`c z?#&+ONnd?ww6G5JG*6tnCK}evOF!%z+&`nO10}|*A{Bt%L=Z#jfC%81r{fRoI4R6H z4UfP6>x_{f^&gK9mXNY;#gHq2p6M#8UjhYs%45i<7gdLe%~9Z|6}QV!Zyo=zHcW_(MMK_=d;B z%>_QcL2H@t-+b}EE;nokx)A#|1squ{;>`|_rf=CItP530)fnXoLL7ZN-2+N|MQjKSU0XbQKM40`<(sbHY?O{ia zg__muKW7Y5L~4guS)3|tEafnL!km^D;>6t#FI3BDinq2gX**O1wxMb7!w0z(nuXz) zBKzV8%hm>Q$=C|D^cytw^_wYj_Z2kln+w?-A2Ui3W!`MuES*4Iwd1(=P$Uofc!RuV zrcp>?wO}L8d1Pl`H{hkD49hgi)>0_^ylI!Y28u#SDL&~FTfI-m9Uz?Sl(+6V{xbBL zJ@Hw}5^py82?`dmcTI+PO`i^1J(y&U7K$dRw^MOkM(nE9LRKFT3=3&dY!7?srwkee zJU{bHRZ-<&i2!}ii+dM3FU-!{*B*DZkLD2!r;Y?HQ7$^ftj{*-6#a7WZ6~Bw@O$d8 zX1SOYr_VLv5_Z4$wzSUNkz%8Z>Dwa6l=bPnW<2txmcL#$v4QCh5rzZ8m}d& z(|vD|pus(C`g0w)wozYZ9lHPHv-q@S%S&dH!LMFFwa?Ly8p zS`3)OK$$08-MCbxs29F4E;hn`TSw7V0wEm>YvUSs#ZL+gCbnL(Rc$FAl!*+b2AYO3 zkSf-%gzdKVDiZJw&e(>ltwrp9PmK4656IJ^0LQksI?nfVHF~Z@sGNADe(h+{wwN^S z4tpT1X2#!e(eI9qD!gtVfT|>KF#7q$^d4`wDRX9W`GbNc%O3f*OV?l01U5F2LH;6N^ANj8E1w3rL zktzo9bRV*b?c`7C>=D0kPWnN3NU9g^3CYqru-Vm6iNsrOs#^BbqDek7QX*4P<<%lD zi#8lplrw)@q4@60&tx=I%Th?C150&YTR-F*pPX|b@k3mIO>@%3w3O^CNKJCVA7y2A zGvkFTRpJ$|)LM$4_h(D(NW{@cH(R7OWyvxfD*0Mg$+b~3SRK?)%=p=AYZ(Pbie%Sg z_1mS6@*TeLRg&tDbSJ?|e^9wMDuF_jI|?INgq$cJPmTZP+=)4C|59yeOLNu_=PIR2 zS|Y~#n98lPbmYby)NdsF{)N9r=@TWn^`~G4^OIaMSv+o)T`mn!Ql4U_^>LHt5W+zE z+-Do3ltoXzIh2*v``|Px?(xQ2f-;eC{2XNew~$w4ptAL2F1fE=MI#9m7h(&e3s!;; z&}3!4KEP})Y9=Peivxt{$IJe#Qf;oEJA8H6S%_0qOg>u50adK6aRY~!gx-q@A^tWR zexJns=$`qAD&HHl2)r`xszMbwIwXYD#b(N~B`BORUd8A%9k&DAdO(UKrg}S^-HFMw zhzcS&B1V#cuWD=7&l(!HU9~xdLTLZ4$<^3A?qNY$nSB7m#qM zUje+Oa~8Qs7{>7xbc$(Bf(_$&kK#>+6OW7%m6Di@Ge|uwmnv5NFV?bjzt8H)RwoZ| z3V&{B&@tMxL@Yt7QN{@y9^RX#H(jp#-`N5TFGae~u3pcrtvyEoZs}|@TU>I=;2ujW z<>9I+M{EU=YlQB!LMdKFqe^e`)WQwzK*vX&?7_xC0j*hqxs;d)_8(H&%ks7@mrC(% z8sN_)X@E{Uk@oijvvl|xhc35uq4#mrTV6IN7=xyBTXvjKvkPN?*~WviueH=bA#Bho z%;|razOo6U)+P-DBEXs(euFQ(YnS+p}{n^~uQ zK3``71jvJT~!cBi~ci?$}nz@mC!5%i;Y~+8|H-jZsA4KPSoGW zAcL6>%bNMbK3p0Z14g%lNPzYfwQ zt5&fL_F8ti!lKn)FV&=pn7Hg z{qWRvL4Y87G;7$nGL|hZun_-p^d7}i>O_-b{m`T=_fjf`;!iK;Fz=ic3>(kkwSlD- z<0Wk6CiN<}Tu_&wfwrF7M)x_`?%5fop~*ldAkGyF@7;B z!?f$8I7|ehQeY>;*XUX(b^YpulDePfzq*8|Hiieqi(Abea6uh9Xu?&t?0f^i(Ifb< zKFL~-mS~Zeb903atE}3mgI0C3OpCd=6+PUSnAYiXxjs-e>EJs<9#2GcGHTZamvHbG+DAv(QsBA~}Z{R)&$vfD$YdSrbJi6Cn5^HOe1a(a4Bc z4RvKmd~dP>eQb8vi=|HPJ=@>~^Bg)Ho=?p*O0Qhhx-mm+M6m1bxH=nm&35a~Svx-p zr_?+u8$5k}`4uI3Gf@7}4xx9X2pZso34xwHV)#Jg#3C`UGd}uqakD@D;{@-NK8AbS z@LbPeDCQ*(hrwt=x}(O0veo=>ah@>I6hj(+MUI^8t$}j?gQ0`goPT2~RK0$-+b4c^X*xV`)D5Szs%3=Z)`6PB&+0dxUIRbu1g0~( zFGU!Sfkn!>rM{cEfVylf$M)CmPP%+Pp3MwxHf1B4()XaUe)etR*teYLD)R<~+N&b@ z5-%o{&I@f2ZZ-R(tG%Y*Q|2MVzhKHwRf#Ig%@QgB)+;K|IRe4Tv|EOunWaCrc+5w` z7ja`2LN%mXYSwBMVroUYIzREAQ@vu@Svoum;4lb9qE>!0Db9n z^@LLYg#0N6Da=ufShv^}{}TV8Ca2!x!ub>mVdlAd${MfG0eugptq?ZJB)FIjxzpSc zdJPQqjmRNI#VOVZHI-Adn%b%~a_Z8+BlHP?`MAl^`$2l?+x6&}dO*a#jp6Vj0YpOB z6-%N$qOtYRr;4S_2akN5AP`9LenV7+og}{|o1zi+?|omm;1K!0_5B^dI2MSOnH}iE zCy8VI!HFbAQ4a}oaXws8C~@L!1sO%)9m!>se`eJDAmTRYw@j5UQ={`s;8c#Fx8n(z zv+OUH3en(2)_3=B9il)KlHF4_rPz6R@G_3zg6S#f6~ zjd7{xKM@}7J|B=mcFB0%=LSQs4CZtoGoc!NN0A4cM?Uu5a(m_wVJ8t-G~$@1-QQQW z%6YqGoxK;q7pz1Ik{fVrx${k#O{bqFat(=4bOkZ30_@qYcjg9p~hsy7Xbw7f-gUjTT7Y^zP zZ)~u?KYO|iUF|WvfA{;3L0ZMU;;Sz9wpPl`6?1WI4sBc=OYXylz?j2wDK_2YigZ=T^m_|Jn54A7d>GK^k`&cZho`VfyBZ9-NNn7Y`ZC z)O5f_)`mUGiZXaFLSNd`2)W>S2y1+OWK+s+nS@>k920N~Tw9}!Db&1$`X0{@g~eNr zv^nFW8(`S$;MuwHa7-z3=z-QjAmVUO0aU7jcUklaqd_ z!J)OFnnnJn?#FkNz?-o;%Wi)A&|8djeQ@WkXmIOA`|>)!%WRhONe@W`N9J|Q2V!Qn z11O4;<6(6sClydqF~C#_yVZZc$1De^F)$oiZK8ZsURP~BrV!K?0POjn0FZ0-KwB#n zp=6dMM9#k)Ic!7&%1)EeuVm+G(6Q9`%pN5$vU=7x)9r-dWfU3wa{s0wry)JoXO$?e zK~gX(XQqD^KUPG5fM)xQ38`Jpz4*+Eb~^5;HeCw>?9Q2c8TV4}xf|mM8soSd-~g7) za^GxaYJJrN0|asoSF~`b3j=tzSB<`Xs~47s@R}Q=pLjNQ3e&5r(AL4lCb7lO!&&Q& z7Xvfwdqn+Y*V1FHsupf#z;0X?^|7`OIP^3Y<&{2 z5AFW=&$z3i-Mts>(qoRrB4~Z+qi><}HONJnwMUYqbDN&IWHqK5ZC2G} z$`8zNeLc5)ITXMTacoULUo#sC79ykYm_3$9gzjd(b10*D#T%fmz<4maQDP%!?#)z; zrx5Kwkmx~tk(1DF8)5El<>1Zd4y`<54YhG!WXg}U)D5zo)JQYWdnuHsFh-3-`+Kb5 zy56Lw*tg=x-A0Zvj)sP)B5rRwaoT9%u`HIN!Ny6C~}@(QV`6L-E2A~%#zIbc#plTs@b%9r|W<165z)FfBzaG=jKsk0kvW! z=_y)|D&Bp2ulNb3^BAv&-L$?vU7tPYi5VTYT%Z!|FD7&&rE1%ee%hek#*UL z(8uwrNjp`fI+tcxntASKebzLg?!*I>XLY)mu!4-t^Oe2ZVy}U#jMkSc!HpuFk-2#y z4@fYues(W*>;5Q9s0X%?PA9oiVca!iH}j`JzuU@R`#vKD@)wi6>$P(UCl&{lCx5Z> z>$oz-ad_s-Fv2Swqbr*axt=kJM>fLI{T5pWSK@IwKghfubKNLAQOdo%d%>Udh>QzY z8Do;&+AlmFu9u(heql@37<&7$!1h%{Ql%I+(M$A2EVo%Txs0rFZTy&t!cqfraYfEJ zubb758AoO}pm8)=M24FMuCBzEvoqXdh}s^_PF}#!gy;x6d!*WcddsvzG*j-r-+&!lgFX#eYC#xx?92=D7<1zJXR+TjV>kY z&$DO|W@GBv7;2%DMpjbGQ^)`bY& zmUyBeo#8j-rsRi`&%f+-r}9}r-Wc9aEUV3Q*Rqof8 zkzi7X&(o;~bkNOZB{#takpn!5G-_94KqY@@na?~zodpKbz8Wgh_S6P_SMH`%!N?RX zu^~bgyM+2v8kL)8gvkUl$PtwaL5M8DY8BB_m7uY?`>Q^=B+C(D6ZU&r^@*?&_IBFvLBcM7Ex<;?IdHgq}$y$SNjq`lcv>%M-aM!r&hUIUR^R8?=o0)RKO&)H)$q6Y&Hcu|ST9EB zoQznJDW8|z7YT~3Yv!j{gK%1l(_^z@@Q^>V`|RVeZ7i^|(H17%&dA?@ z-itR^@y;2B&IdWi3`VD6m4``9HnrnKZ{_SR^4eKysEPi7jqcUepWV; z62p+>+{qKbqF~e50Mp^QFQTmM0Qa!WS7~Y^stVd7q4sRptYChzph&%hNlL^5eyor) z2DrXRW_|D`4l}>Q{x2q512MTbD%VE5K7l?B9zmKpg#@-H6-+3FNQNx5GMQ=qxdZdgz%F1>>MkV zewU2)bBL8<|IgQcYbp1ch21I^Kb_M3G12HFsn055b3TB^_-=sXPP-&4O=7vf7&INK zq}I-+Fj#Bcr-mRiSpcKY0mT;6G}e4rXkN66_UI}l)JKXinU9F8mBfWRZ@whwPg)dB z|Ad^VcF)5P)NO%@!mqgNuo}EnfcsDZgzn_zs>*!DWZYItzxI<)!Tzoz#wu8tdG2AZ zFkkH<(WKGi_pW+|4JDz2dq&RD1S>*gnj-L@osAp;8XLMP+E+)ayBbc`pXUaKLEX&p zJ<+VoaYnI~yNYed&cXy@D@-OUuL-&s+a@4Bk1>}m5u~T{XyC>8aCb)RmU!r@4=@G0 z{IzKl@Jh11zXAt=W_SP7HwO|q-_Sh1+5B$Ycr1(cu%j6z0_*8q>)6+;xb1PM8RCU6 zJGZ&*TOBdOA3DxbTeOj@FODI42WM-dObr24h>=$v&5bIb(nKj3iujBe3dtv{jT&Yu zAF(X(QJu@YG!A@nr7Ew#WESgi&!8W#6Rz z#To!>@@x*B$k#YU)^m}hGGvUF*BuOTTA3qwQ`99lHH`XFK=~8WsQ2``LLWn;2On&Q z8&+`>CzNwlF4B|KvRZhXX&>78>1`$tB#KUYY=nlh;zDG-wX4G4=ajxR3oW8Tw3snQ zF)Swkut79m3CULJ1bXNyDfv*DmU|yAzR-XanJ9I-B>@#b4;)eOA z+;(8pLsd3|V%Axzr4Jmxr^vCr0CAT~7Ut<=7Vl3jtEL)@z0{Hf@lFl@#VSWKxGX>I zzO>^ar2H0d$4cEb?A69o2p6(rv+kGaAoQX!21>H_(ce;DgFa+w0$y7Zj=@HOVT<)+ z?f&P=o>WoDG+%GixEP})bx#PeGxe)0+2S~)It~}n>K=g8iB?} zdqa!`Jtx;t*e5@@dZSsM=%CT<@?=~A8X{#Fd1IFGv+OE)7L_ydl-2gx;j=^O3PtTG zOV=<(Poui+l*)Ih$V_VC+E@bOqlCu?@MMU3gAbNem2?MjWgKeKQ zCARbM7k{j#6k8>69tII7bMSl)h5ea>zvpR8WHUq`ZN5Wg5i#X(YXd>_|0kml%> zVZ$tc^|}C~!L3{xW7~D{X^?3#!di96G2TNavxc@p(bjA#R&#t`EDmN_5ZQAocD$Z1 zQ-MruKU+M0nWtTN{bX*d?sq}Xk&u$nXO2d)%16Wm`^|d1z(j(ck`Pm+EfE#^gr_pC z`gJZ7FVG>#%lq(i^hzfaHBNG#K5Ra1rlVCg-6MrPKW^^S)=SanQBxrNlsQjg64&T}z#ntx8<(7P=hftc;E%Uw^K(0Z_n!V*L42rDF2fA#C z)e^CAd4U%E{Mlr7BiIIk&gV7M#eg;`5Rom}#qvI_D7vZPIqvDNIi zIQiH+rrAo~GxBZT`)G6C{FQAB_a53Is4!n7uIMk;2)WWfU-T|4K*`Xt-rEtbn9KMO zVM!LACew1*t@$&CiJT)bivKPj=>yE)gDk;aPdH%K81(#kgZEDE8a6XAcSE!(j}CQZ z+A4NE95qY4u(o?!T;--`^weXk`Q$^McAGEZ%Gve@kj@0{mzf*;Zz@fl)=BDBdVJ)O zWo)L$z%pPR_p}w5aea9DK{8#&eo&Oo#~JOz%%)5E_-EISTY9^=A;IP|$*Ja-E<%4q zj#W<6F+V+FUndjUa8-k+z=<=K^nw7a)-o+1Gm0VHOQgKm;8vIeZG}U!IDNQY;$~El6i7^Jd1iBgse}GqCZz3w2{Zbivuhi<}l}ag4k~#TVk_HuT-I-IY_fM>8U< z@?5J7iZ029CyLaSliTA}@1ylYeNBtr!JI@bk`)23BMhfJM=GftY=3)%+Oyr3m*=Q; z+huWfy0tnR8J-yA_x48pSvp-_%C5$07*Zvo?y3IMl~pp&h3`1P5)Zx*J zXIM5GZR|}uz=NarDEQ88xmVUrFOBgpR>EHMTkl_6OPqd#>DSMDcsu`Mk$3<2_=(13 zabB%Tq5R)`gA>cV0eMj|Hy{q92`E-EGga8Vu(hjx9iuh7At}&&lO)s!dQ)|^U1}n% zQYl#}()g=g`oys;k!t%lua|qL9&i}CAAws#+ZH@}2rHkxSGq`o&>hMPz8M5=hff4U zI>r1PaG%r&b$vgd!iw+Mjb$;5WwlZT#5Wm8M=G;cWlQ#rMwRJ3DRhAmrSXqM>ZjJ@ zw8i88fmKWmvOiuowfxxArtKEG85tKjd?;&BdHLmBpv*n4zCHe*yFU;0)#5b3gIC+E z0uP+aM>|)91)oVekc22iJ>*vTXl@DeMkTD$zblW7gPtKw2a|h9gXfpcJR9HG9=T<| z`}unNi;9=G|GB_!q9Hq2Xa>%-CIC!n&O<@V{2;OW=$Db>D63ArL%T3GzEXX@yp|>- zBA@bYE2QYLD9tV<5$I3ex_?TozQK!9>auX_GF7PJVVKFl3na6^SFe140K4ERTsvF4 zPN=*J8F=<1QRKKc$j;-#W$*7GjtYRD*~Pp=SSl&sm*zJ#UH)GO1dQrD-ttW|9G8ytC8)^Pq6!-Yxxb4Zv$+h)7;;y|$Z|~QGs*n*)rfhAS*~mER zZ=cLvzF_acL!Mt-xz#W*mSz{pm=7j7+5o3x3a_)`{k@GO)Td0d3A?Z3<|bd~R=Zll z`7XxgcUjWaLxWVOhI!KUt1G^sKMq@GPLF>GQ#MT>#~A9l@rJ*SWw8_Muvp*2XHKrN zflM7GxpA@J3^?cD-ZJ4b|SRSC_f0sFq7x9-IzW5sqx zo<`%-Sn9DRNtVfjWVjfZ<>wpzjNZQbX74TANIDwpac8FU=%w`N6ni4r*5Ym7@Rx6q z@0xvG=>8aU*d=Jk!ryerlH0bSf){4@jR-~gf*=Igw7)g4=HGqM&#*f<9gohmf!XII zEz_B8mlIkhU4=v%HFZ4mAN*A~mFy07X8ENKLuT3(?xGcH)p zx!JSzt$$$v<|YRaZZc_h^&!P@2>?(}6^0H!D;B%#NZ8`!70$B2uZO=kv9{{llj}fV zNEfc2Z3q8n-sAW z^$=E*%b;9c;$(ZVSi0>I7$10PC0#sMC9i+%L7%9PnT69%9r^aSP{1gOTJUfGfT;L8 z{#23rv%c&g=!^}hFhQw^x`K$<$_3F#jC)lH5f?Qb!J_WFul-9raQ-XikAYES@&iA$ z@8ja>gA??Bv2@=AP#Vd|^NQcI6dIX9ytAi}W$Svj+}!1lsW!^Ych|w8<_T0e{Nmr= z%CJ}(FuuQ-(x{ThSoLo#Uc?{S8ZFU(au2t@{i8|Z<){ao`Ww3c$HNQ>##uVm!O!X; zlRE!7AE<)1Ku43QKrBD_JmE6e=&>mNCh6T%nMIQ|TSJ+A*$)jqFHv`rzdta(sarW) zbz6SYaV1r3NH7-{v_vc%JN%!4W2}_Fr*e^p8G3Qz|6d-1#Y$9VzQ= zILxxk!)ir;aYvG>mc^KQc$f%UG30T5plPZ)Y*DSw9IxAjlPdT(1Ss4S-0I%#p%spk z;53j+uV{oEF3GCcU zw!0+_TExj@QG+(-RjxifvZ`1@F-G&sp^vyRQJFD?2{M5)9ZM{vA zuY9$q;W&+t&c3{OEiYp~Aj)g>UxxC6^zme~xn0B`jaTR7Uw@yQP5E?;=SvHSYfq*8 zH=5~Btz*pQ-Xq|kfs;7#Zgidhbu8Ee@a^BnwynS}RB>NvOa~nB%|!HK`Px-^AoovY zo~NUr7f*$rp35&nC7A-cN~Dl`{z&7zw4mZ97bv?pQ3<<$ftu%2`ir-Sfawrq>RsNq z>^w_`2GL{aj0WELaOr`<8O^~bn}&jVQezsEqRa*OD}tHHnnLX^LrBp&LGO&e8!|I5 zGt>^ujRp;Ht7wzL?Ra-1`^>Zh@tVyv zIYmrLMLFvJ)B4vp}=RO`=tD=J2m5dA9DUMorhmLu`S_S zmL+5w_|TU4&^jPv5D}1c(=pS@!putOhb__(ce9s{YORz?aJ;-Z$41~=aduSm?=B;_ zoCI(kn#)!WeQehE+tyXy{>2InrZN4aR&S~62hG;TsQMZZ`iEID!Tt!oRf{W!|9wm}Jm^|`0(wcC8SNp%}1p!nqSUmjtD!|PO z%?lP@>SQgG0Y>~+xmJfTZ6%kVP}@jM}$RIf-g=7}<0_!PROm{yn!B7g9E% zEL-){^XjK>9A!$Q25nbSUP@e(f=t8UHir9kON?=|>B-**rfGqD}+z!#`Jg> ze*?X7V!{`n&`6xbGoT81+9hKB*mDnB_aI;M!XVY@0<%g_+@f+Cg+FYP1=)5yN!Bre zdA9Ajsl^s`b}P9_jv!DO<&cqFei-v6N})j%J;l@p?*El|*PC}>G7D4izhE4jBdYX0 z`nQ#lvS*mp?BEbrg+Aw?APYv|UH}Kk5RHLYRz?LY$--U=|M}-8y#9-_RG}#fR<2J9 z$g*@}<3VjUKLPlHebGF^Vv9p#v&mOG(FAH}|GoOx+~9rmT)?{t@&jkN1%#;gX8vXY-$;bcxPjjy|D3tTP6_bJ(?{4g z@M0zHaTVbTgSkbD!3cwaC9bh0+|L7NS=NyzE=6(KWVNmjQIZ0T)6Bh7Q6VDNo>#F> z42_wMxB~%?3Y#d9ZL3*R*ok0auzgXayE+VEnV<{Ud`8wtGhU`njGe2?Jc4?Gx_=H`+lw#=Ni#} zB^W!Or*38&);tSQ{5Pqwd;u0>hdTDtby=jA$1;m2ZiKL#8;IU1B-^L+IG_3XAOUiG zo%hvUDLmJ(=sca1Ok?ip0r?^@cc;2cZoaWw{&r<1WgAgsY|hMokD?dX+;GSHB4uvo zu$0hvq!FpOS|93r!+YjnoFv+LCs*{@QUloKebo3UBRiy zZ^!LRC!adP z?XvslgHM0s`lSrAA|DTCU!$JRJzKT%+M4i+GGYX8SNhJXNpVLfTX}JzH3PA;<;WC3 zjGm#H0PWww#DFL`Q{=|I^!it^#N=V$Itek^l$UZfW&S+u2Maxb29}b}sC^F*Ac79f&R17ALFUne7E`UM?vW3npT)r>^?&SIPs#|rt z|AYw#*uzt`R#LX0OdQA)pjG+^!>`8(j$@P=;^~tQf=|ivYi%WBjMWf%LB1Kc;$3&S zd_C>HXQzL$>dzS4;$mZ1KNe1nS>!RsN{dM~pc0y`(WA$|-?wcMh=?C8V%7C~=`SsH zR7N7%1fw0cM`Nr>R56M`J2fb_gMUdnFGe~*W6~+J*5E0%z;7ZSK2Pc5k-?nnk*9O= zbAbC!lwN=FtN#0%Q$Z>p(Mfr9C}nqM6>fW;5CvbB|CBG{?fxekY9MINgnF>xP&NYf zIaz}p!m_$A{=hbd;#Ob8F=J3F&~@}khWaz>*G7IyPVdM>nG9v_RQ`@D;pWjDdLkMF z53Rx??}OQbCAnOFi!c0CwyQwLAGR@N-vqqUs2LvBUuAnjM%&)p3kQh1e5* z0gFc2p2Vqg8E$MWTRblYe@LecF$jokY8Am=rhPMeI@8cY&_nQT;%$>F_WDSlUafGq zEaf@9gI@e-V@Gm=;Z*)LwtG;}7+%pDz212o=0?ri?A-gMu=lo~=1d9&9hu@l1EKVm zX74d%wtl#;cxG$tcgXrbTWbGE6d*jzEsf|j_ZWf6yS(brr)V%a&5qCe(E9L3Zt%vw zDyZi}H@|`wWik!1kU`CUb274$aPzB+`8_}VDphB(!R$)_*RcBT@?ht_vxis$=#Que z8Z3kO zuM7`sWDmrE2lvbH2I7mERs%Q0RXvrPCA1;ZE(gr|^`d-cg}Svkc&hw=v24eE-u~Qy z>F=NI{^n&E?MCLU(>r0lW59V{%MK0iF*Jr_+C2HeMq@-8@%ppQ)+%hX$Ho%t<3g#V z2nO21qG%2% z7s0xFDtE|LsxQN}YE|xd)lQVv#+l#;GR;90kvsBVwhO^vXKgqAus?0>Td-eP-g4hh{Rfodwq}Z=5mg1&xWT*FLjjHwRpniEkO1Xt_+kf}rI zC%3(&xl~jP-|?a$u@uCK?2h=Xh#mc$p(DdMS~u#d&u6u-`~PTkl`M%*pAP=${IzI7 zTK(<$Fl7Fg8tJyD1!%Nh1d9a(N6zVZ;d9t0euC#HUa!OzE%Q-utd5fGn6PDT7%)wK zxKsU3IC9PZlH~1v{@h+qy+8M2H^V1# zkxjx`1DtYMp;gwo9{#y9wL+DE#7m1!L%IhT;+dmAXM*laqgp-rj+5CXlU z1K9(XU4~b+X)a1?<TWvkFFTdDeUwZKQ`8EIo*bEFt|LoST!a*Ia#D+N$~T{Q~a z4!Cy7_P%8Li&d%>s2d9inbnfP8a@*^Q_q(W7laDw@Xrg){izFMg?NoTjzd4CmIcc{ zv3^l$`iafvC(rXc)CN52Fa*KBih}4!6KW)ntjn* z`6xsmephz%t7K+J{eyt$O-%Xd&`S}vo2*J0CN_hmH7RS|&a+k(qk*0HnRCh|Ks0k$ zgXcvIXY`={%H3LrZ5?#7+QMvDgoS=DP16DIN@$W!l{k$23|{ZUxKa`eeKS{Ov!pm? zrzIr)3!w9SI*!z=f{SZ^xjJ`#SZ>Oq1bsn@mgS9=#^xrMKnbX)#niT^peKuZg#DoRHs zQVhZ_cz5yI%FOnB3iI6IM?31-xvOH2I0nlGIR=IA@+kO%C_zn%%u2yFu4`yMOY2fh z!_Ta{ypr_Wj?WhZdLqNsO0K|Q&HTBO86~?81vjz@S9A~6#v^7XsNh{XSL^XmSSjP4{ruU~jq2HuXp@qh^v8E43g7-#b>f$CUJ8=7q*V#o49vW>+o)T(U6-zgSn5PlQBm*PbtMNo?Nv2Gfn zd_s`6ahab~c2x~M;Q6A#ppadlLg!O9$SNCB43xaCq}}$TR{*{a($|ZKB`u9HI*4uvtolKlbDOX^clA_l)tbJBcmo}Wv_hLVw*+Ir^gE_P_M#P2r;uC&xaf1OJXTyi(OXFaF8W6!TsH#L*A%Gc?WK!AmnFuLc-8&ofo_AqIEXx>0 zEx~4>h%YD?4oD?@wj1wmxx1Dd^@9Z3Ul@ejqKj!*=h(=L%EY}*fzf}%D9M6lL93^^ zxs)>U)2}S5t%WOSIu)@Z4eak(oWD`^Vxb+2F+$TL(+RVl&@(qDsbr=V_eP#SEc+9O z^0Db~xtu%s84`G9F_)u&lua-!PnF30jHI3!76fZfI#IHz9D>i&;##jy#j`uDRNf6g zWdw}Da=e0u5YcD;3m1S?L(RsTri*P)^A$gX{lE7HOaC9#Iu|6V zBSY80i~G)WYRvjvL%E<)B-n8Bp}wE5R5IVD4=DnBK&4Gv{J z47&=qOOSrMSa&=>yp#aVNOAD#uFJ|IAxj_TW9E}5o(-FaFTIDpnN%KpU% zo0*blWqG{$7mEWH)n9B4XntsO`9Ki&DRrjh{r4`SRMt=volgHjwE$#moNYfe>y!_Y z{H zD}~4Dh6*(eQKP6JX|W0WdU7dbR6>vPWg>mV*r9~tc2pn z#Z?U*@hR!4kfSe!pAVj3jZnY9bvTV*TKaMqm44dl#aPRe_aOrQKP-K9SXAHlH7X#f zbb~ZQGeeis4H7d$N_Te~gh&iMAVW#V4B-$WNJtDYl+uzSUD6^LeBSH#_x{WCz&+=1 z@7a5=z4ltY5NwiZwJYy{_u=*nmLEh#-88rD4Bny$UN+17 zl~Cu?50KVv%2rgeT9(9LS``#qQbe*ce^Gmg>UyoVD>P)V(F8PgQp%s1w; zNsq2hpNzqO;yR)}CZ4rq0V?n8yCvlT_(1%2^B{48F)s~xt1fY0RIrOIT6*8|^0Gtd zymC4y=h>$|aD<#tvv6CS6*EPWw;p(Qfc{pkVOhNef;t7#>G(pR5DkA(io{jBxm~!= zX9{EuWk9mIfvyB2HFe*_?1R{jr!sq6zRh!>Y0gAgyaKN_$W=y$ z538#Dn;=PU4nc7&;cYuOH5SJAzSRc^&lVc6;biFmg|X~9pGVRX$?kc-nluJfY3V{W zDjms;vqc$)G&}HX_<@PyPTJYnNE6d~5U6v(0YT2l-24Cur1O;B1zYv|^dPpzruxOJ zS+qJQoQjnzn=<_C2*(&^wy@eiQg7@DMK;}@OQC0R)W|y`}}6Hyix(5 zv_XqLKkkK7Y#2Vz+F?L?I}Y)Qn7qDNBEvbF$45*)S6E>z7zW1;X}Rp%w6J^*w8b0c z2tmzqC#^3C>YdHTb|S;u$Dunb#JTsZfUW~2lyDLoED3Fx4ccNfxpQ2l#FY{m&W-WhmH!5?^T%8%QW95`|RrOXcCQ~3IB4r~ryq0qm>h~%0 z>C@5^LO@5Onno`ROxqC3F7Zq^P8<9lGFEXho5Pu!v23eiI$$UM@a{XZLc2jpTsMXj zvb(YhK>c`=(k0!Y3^BU%vJMz=7n00S72EzB`Q3~2sGRmoq(yazRpQ`R1Ex7Ade<{) zlrF~%cZz$q9l84QLlwoW3UkCs?$zumTrO@5nwtM{=v{d{*8|u>5lwwWnd3nRKi4EU zmpjSkEs!*_)ELgXQw@|qdGQF^74oZA|DqB7Z0Q@|Lo@i01};qH=`_ny=Ul~2si@}Z zh%`1b(Wh@AqQPX8hZGW~_=)cbh<>3ez_H#`k+JsU({~9klocd2@;)lP^V9f`0PGop z)*|0ap~9C#mh)Fe}r16{zo6*8I)6Nz_SI(3x2j zF}_QKlR4G+kxnAZx$&NTx9VRqn()p0wB|Cs-*2&eO4!x3T23W4dza*BRG}S0lI6=n z4Dz={b!5U`m$mS;OPEZZpX1`Q1k-S50=WJj7S$~@g9tnx23E?L=i*#_I~woO{Ut_EiY-d2q zxKH6z=a}vbhWnPW1Vw4&O-@)g#__}N;No9)i?X?VwEo7(?&SZXfCgw&LH<^JWUk%7 z=<3tZ|K)TK|ENjg&l)+W*!vGx(AyDuxYRq&kx^A=#!EMtY6~&D#aUTiOR7>yyCFGr zXKKu>or4(r6i6AzUDJBe@*m#2{Wv^s>tX-4#TppC+{?|DriV*1BR)?9#~E~py2vt_ z0d6L$eeN?W|39ZsvD68QrO%?=btRD<+F1Z-r7cQT!%jY?6Ed+;xCWGc+bPssdeJgcuFP->45GeL4r#pjL5RlhRNYIet0TE zaX83g?09XV$DBUKG-?oL;Xbg)@!k zRe7!tM17}uYHH9{@#CvWm-cXW)RL%r?9oVoM#7m}c+Zp$(vNY_R+)CaiJ+qoE2e=#x+R#938_e6g(q3=AV8OmPy+d^a3B?TiY37gl>i zzn?Q7P$Z8F_8O72Zt&_&C1+(=PV2-)`?})7hITMt5L(5EUa%mbXO>h_QCFr_tNrdLxj$<_$9L7?v~_wLXK`4jcC3w=PA%? z!@s}z*+?kY=B{_{KX)}V#|c3@jB9(o&~4-cTCJ`2!)*e&^Kc*Crie@^!L&HS@hox% zS|QOdn1`T`D;`^Hx(+!zDiNI@dK_+B<#FM+`Wk%khs~2-vS-e}Ct$+7D|5KM;-{Hi9CmZi!HND)iY$1D5)et#uzpynm zb~O3$IbO?Wtw$nguqQK;=<6w6Im^tpaRW8a3WDjCU~%j1oW1pL#7y=wC?_Jv0|+)? z#gD2%0Zomto*YdHH&>aCUl@qiOk)NW8B0=GD*Q3|kKlgBPsbholD|wxLuHZcLRgKr zrs=5LQ(EZ5imBv0C%#{Ck<4cExw7u1GOTk=(`;)!Id~cyMe4*`PUt%Jt@!vhpMxsZ z8+1tc!Di|c6U<=v9X9@X7W}6a=bu;;(~(SSO5z zbGzKbi@+DlZ%!5-M?MVhFq};N9_dDam;*?5ytWWd)FfJPAj6c6zmha{Z}T3hEWZx&v z)2ud@l;kIOZu&zk!|0>5xnB1Hfu7ppSHT{jwPRTAH=hj5k3YG)TH7M=`MvJ5H>nFn zO*3+O21$h9F?!;6sp($`oIQOrp#us8qP))VQ0SNIjjx~nW}UU2C}UOsBe2<5q5>av zeEye{>B36D%~JL_EPyX$e%CWH1GSS2AYe26Y4wycL3)=I`x+$n6|kol)%zxr;12 z>`9Gxk;SB&<$0w`BUhpOdc6VA1nOL{`y&5-yQ9?;WJPNspE?&;x1#LUotd`#d#y;1 zm}~-(HjU9}k>c_2T4!NMuGI&@?SzqtA&v1OM)82zgLx9pAxmNf$z}xvTVU#*CYgie zzc!Ob1Ar6xX5F_sjm5U_X&R4{BnnVl{dFp`u2+}}dcW=UU7;xseNkt@&**wvx+aDq z*H%IcTsP6Gd23L}bkZP207(gN%zf(}~qgs5nzcTU+c?iou0=M4N^rV=t&Y~I=5^i)-VVWq41{zaM9gJ{ zL?mO(m;Dl6i8MM%QoU$v!(JM8Ovu-!E&!BfV9d3ORFh(m_VYLrFkxuPiJAoz?IT0W zpWlgW!OC%efeFK_L=p^Cz1r_s0EJCKJawF6v*0+}ILX&;%UX5ltv2Rg@o^6XWil5n zMl9`SoChR9mWo_Y-d6igzZ+c-OlTrIp>>9+HL_mQT4tyU%EgW~{KQSXlD{xNsw-l6 zn@E~w5{LeQm#sD8vF)B}yBx!uFI+!M2xXZY>i+&oa|u3b{H+#JXjVqKzRsW62k_uR zqhaThGD274cmJdoq)*bD{5g2|b{Im$^0GQJlx>iP0Sb;p{~+cMLs(pH04cO+lCA;T zIm~8O$d3;YHTbekRB`kQ!MJ*BFg%lNSwjJpt$MJNBn^4Lr|XrtQAL`SaJ z0EgTb%Pkj{7cNvu*^seU+QHcHspVYA3$OdK-YSh+**0Anr3AMCR!CJiUdPrn7I1I% z0*q>`D_LjpY~szY#jQ=;mfQSQ)3n7QO2lR(tva~QvT5$Z*@Dbu-sP+_YiuxBJ4vi0 zsNt(>yUY48HVkr$veRvCF!WU~+29_L=@M7elcRlEM#W8?ab9{-C6bP2n3#>Nf zv2$~eR-xVFpPF4(4h_puQOXr3;t^Ii#iX`R~l%o7%@2P zi6I~{uQzanH;_>G6+`UTiae!`{=z*z%;oPY%fW{M*TM!sUL2 z9S@&5j|djgExm1YZG9=HD5wr&36eVbEdly4EIouAlQJQRGON|42#C{*6wK6unA*`Jh2?__)|~N&4&Uw?u-n~_;bOZ*>9Bd$Pj3A_%B<0n#9$PkJqqO% zezwN8%M(1ib=f{R&ldkK)UMW{mGa$+a@gwKiW{Gt()SgMz<=p5S(&PH2G@ye*vIOd z4zgT`L;oY-UcFE9dB-51KNP73@*+ieM~#i(7IfM6+e;yRyF}J}A;V|6jZj(I7pKY8lo>mV5B*P5%v{}N;qa7s9Ahj1*jvGb2ZK2W3IUS z57_tFRvMUDd`b6(6N=9&4k8#&;tbiln&TxK!{ncqwl~{o#LSk_H{V3uEHuj}OBCMQiK0rx zxxeFV`B@<}^ZUgnz>kUarYIJNj5}J zD*DnOERwKG-+{44>V$jDrJa&ws;c$u|<^c>~mNdsLx_)8Dxd`Tsn5#kV*Z+5msruUGqWuROO{xaC{S=uvwu-Ol(d&dTyZ6#n1Nz9$pAjZx zV^!KA)QVNEF8dk&`J(1#am^z@38dLjA>T{3KzMaHvvwirls{Kr^G+^6gnO*%n#7#L zi${^Ku_TWh<*ee1>&$Y-XL*|h()O+iO?t^_kT{>;7f2j;4Dr+wM3qe!C&rtLyNoxAj>k}KBa@2N7K@Xq1mRxZw*Qfj#N&Cb4ga{ zc;O)n zyD~`Y|30-Z_9GYAMbOt-==bw8k#Ec`wMo-vCTJPscb;>vTb#OE-9O?i!ONvnKz!F>`C-lT0FJ zo*C05;#Neq(i++h$x&=s5vxkwY8%6KTWdnPh)IKXL}YgsHF-x)FiosNUi0>(+ErJn zM6RN&ZNFTstF)u)(^gMsZmKw2*)u0vi+52FB9~i(q7W$)vT{;GHBtIYNQy24MginP zcM70mAZmicGPNX=Q7SL?A~)F4i|?=d=6fj8CY%Mk^cv3U*mvyHUn#&UDpSd#oy7MV z%2RXSAM*HVzO;!@>Lea|8x;iHXC^6%&D=S}^#xR2y$75je9ZbsMF4KkQ>j#WIJ!fnXpEllo9 z)*{NR26f+Oz#8@LYl~wD`y>Nx|EFhoinpjU5di4rr&*#AntBvfqEsWQ4<+U7>s&v_ z)geUlhzD}GvUkpMfO5RJTwVM{Q0$4fTNiQ?f=O+cTMRlb{7& zH?}k#KvdQ#tAxJ!kz-V#^Q5Qs8JtzE*X(&C+pqZvK>g(D(z9;0I9;RrjIpW&gaKvo5JpmagOkTb43t zC?{DygFyC~Jj7=2fzb1=vZb$s$q69m&J$habQ&6wE-XkBRc7wFY{6a~AqeMJ_B;tY z`j&uvYV=Z4twJH+-5(nAS+G4VAzbNg*|X+?0S&1b0BABWF=$1u-g31IR``!VO5Z|o z&$Tv2P}9I*w{@l;RB8#dI136H9?9O8q-o82!`5xFY}MjK=R_ib-)2Z?R%lril5npb zN70Rp*Yvtp1PL+7^2OjgVL=)hyjB4p;IQJ50l2gvBxB`Gh%bMvdzJHOgcOopvL0Te z8um|cvFUN8_-dO%7Xwn^*%IfXb-Kceg@>1&D7)9t9`=$!m}EE)??n*-i*#c7LxZT$ zRjY7p*otRbd2dbrx23%e62ZJB59n}|_DQ&iWuM=Lx&0M+^%y_lP{<(;*3wf&axn0Y zh%>j8rNSW^4XPiyYf%fgHwUkP`9t`-JMU5^r2{f8%1$-nnmC-%w7?y~S}Ckexmawe>Q$^(fm1 z8=#6PXoJCn?{>sQV{r3Lg5h>K8MA4&n4(KpzHvD>ZlKylD1U+j<61gvQ zInL}mCBh<+M5&SSnJcHxsfa2tZh~T8Ei|0L zyCBrlM5~ds99H-MI;q;C`tXrB2;COz>MjM;!d-U=oZ;?<$o12RwEx8|;H^0b^^c6W zLu^r00n7@7)T^`-YItt3oSIk5*Sz)W=gL7)>pPBNW{lbF6XDM4iZx`W#&McYS3lcc z8#{=~F0bygj_*eTPVdfreSA1etdVl0Jb9i9tW z(^MPG@#!TFOcfH(c?YoUM7BXq6pLAvdw-aHxB0&Q_w~m(06+Co1WT z)!b+K=#KfVyX}F4lNCCJo^c6Bck0rp8NV(up{RG_NR(IIBF>VA2de^zWlHTmW7rXs zc+w&_rPI0ep_cuvFM!hg2~i+D;q5!NcnU+;Z-;ta+F?vi#3&ZfkO^Wq0fc+HaV-;l zWKbgl5vS>O|26?N@FTw6*r|#uXNg%2Ir{^sh!YA3YA`vUlU~ia!LuRpJPgQ%OtQSP zAhT-$>Rrvr7pjdf--3tiP1&{>vf0FKN_Y+7a6QI*-jnbqUM&0T4J9lKGwiGIOC=ug{HClZ!*u1Y>C zTL0rtaI1emUoRlv0PdNugP1# zm(beQsq&vg@sdr(0WvbuFMnhX61)7I>*`wb%QZghB@e$4{^+pCCG%Ue3`73R#Kjb` z{p!|jX10>Pxg(C5{i!hjSP8dKXSH&ARFkZs%uIidQf>Uz*l&gUj9YoFYS74+ES6+r z?lkwAJ(!1dXO)LmqkR=ZNzGh)^!|z?o8eJwzm+zw)r*Y$0gcf&-!Ic1*&Xq{%6;ka zlsWXTfx;j5uXDz=g3>9iXthh@!SGr6VtQ`AI!mRw^AZ>rl^PhsVXwOVFuU|3Ts*2K zWO5ffnR0m}s0j>81IjOsq!+ps-LFlPL4eSVrRqvs1|LXHwkW|#(&P~X2NG3OXB?k- zz@)o@77fQ!(Iyv4o868fV;pq*=k`aE{B`jO8&)E2LW$RDw^H74kZ^45>vNgan6(rB z4IxS<17^9m5ct(}gDmgfOyOd^>dOWjCZ5cZj0R4ssd`fhSJz~elo?OQBkHmzdrBpV zK;nTPl2i5?BHsv_7|FHQ^bxjnGR_w15(wd+Jbd?C$)&3a?DHRi=t>!a*Cq`3!H&iC z^v=z2*v;2Rl>48?ydH@1LvD(Vth#yLtgZe>khgE-{!?h?M&c+Am1eT|XtR)jEC`v5wK#X1+<0T(ubXo&Uqk#X~5B<6+s-3;2KpTpZHE8q*PG zgLk|D{kFh=oIsU2aO0gb0gLNb6(emC8UU(~b6VRoNi!+SnZ}!Mc6$HKw8+tA2jYpAey~E4s zsOQ9Xt3&8Fifq{BF0&bG`ebL8@OrwOM-^Yrj_-hXZf}xm%rw&2!-{_D$63?5DCJg66Z*OwHoZQfBI!4nQ&h^p6zX!6~IK7<(bf3m7V6vx!%t zsQI|?OoS}I*8}pFcbb8U$8<|D^C?`I1Hmx<>JdOSR z?@c#NDL3bw#u<3;zR+v{KAI|nzGz<{(TJ~?c(FT!Cj^v=ylgjxvSbZ?)BA1eWcQaF z2K?$C-}Zdrk$M_2rE2~GzD%iW1d014FCIZ}$(s8JyEY*^Nk?eW{eI_H_mK4Q?HUE1 zzl;SYogro{Ji5rXC;l1f?n2$Zhjc-*Iwc0FFYRaog{~%(+U#YN6OyH01%nL|)#4eG z4JPJ5X*xfWc@L9G@C+?w6(ja8q{zpq<4ocyi%fm9l1Nqms$FLYz2P})T>K;bT&Blzh=&Z~G>c?U0@cu)W91&o%F7A;6k3X@6&y5q z&SAcSgKgVd9L>jxvhO3XYU`gskvXby^{f#ra11gbGFnLSv6k?zwtgP72WN<+4#hFjhr60oZYz(J%l=3hN>l7IeVD%c@-z z*ccJ`WHWjmvyil#<~}>ZcYrHet!E5AqjJa^86>GxuAMH62lWD`2WCJEAHn>38Og&f z&8Wdvb{5MC$br`Z z?vpL87Df(~xqiak=%^m;8|V)^g0;`r}9dkrx+wIUe))N%RC6FA_?DStxwKT);~uI@^9{Iut0( z0eh?jSj6jUwoZA^-EST(FHWte<6;j{#9xaTFMujAMor^3j8&GSSUt6hMR2wL)I?;K{#ARx);I zTO~9P^Y3;7KC~O~J?9)xe-^AWa5)Q|88dqu74gSuiPEV_a-$^mJONg~nxV0oc9o7m zGE!RO4tI>)N`@%i$GK z%xmTd90L;9m-|}Br;oX;KYI2jF8<2}HIbZB8884|M8zA6w48}QjI%F|c8xBJ_KoJV zTe3<`rcKUPvg6Ar9 zT@*XUIbw~AJ?%Hd0f;Xb+`At+S4}hp_tU4n8Z#JIp-iTx&ov*L_xFX>L1^m~Ma`6Gl|1F9INuT^S zA8X`qA~LvvWmGF@!nsz_+m2hmmA1r1O7dq(YLR`v7SzGPJQPca?yLEHDvA{(d^uVB=2(R2#7+-Bl{Q zWhbp$gS<1E@-=E;yRrP5#8fr!DrQaJ8VIW*x_8Aci9rZZ3Ns}&5~+j6&n5@O#_-G1 zC*tAnjUOs1OiV^zS{WnldW+utWL;`5MRM9O?k^?9$dmlBnCP<9y$6ne%66=AZM^@$ zK>5?D_32k&R&tc1Zf52AYqCTQe1Ycv?!nbhBZ3akUK5044^5*?t88w5t*S*WDTZF) zF7PbU4L+;M+dm|u#)KWX-Tkz`y?*tRp95`*v~ekfKN3+@wkZ*jC8}lyq^9I2Ch0j! zgNK%%)4mziYEF@r;S4Pt>s^c$E>M-!rbT+u{LlsU$@u99zAhJU~H0i$1Jbo`OXdZUbuAAV%~IIpGrzcH9QD*f-8Jz72<97 zhKi%GsGM!^ad_UaZ@OeC-23*uBcb?^B&mZe8V~i;t;vGm(jC2mF~;(d(4v;F(Ux3^L37ij9{5t;z9tDsT+c-OyDd|0U`{D#wq$4G&V=%<6{mw zU1mw#ANfYVhanv=r~e~(bjqq_c*oa_x!C$_sNd3iLMo7sh-AopUponLW?MY9`mLXp z)Uy3eYahu*my)soFZSxa1~WQZk!k4f{h_)#S)YI}!v7I)EjPwK{INIKm7omKv@9nT zrcdOPlf+1ENITXNpNf>AHl%pyAOqW5cjNaqwKE5^I_}Q@S{X7V)Gib9ShNg*UP{e3b#2xH zh@}~i|1Gav%5#$zfi{^m?ob(}&Wq80*5x6;Pvx&Wy#M7M6d= z6d^Uz>oJaWoByNre6@r1slN|jT5+<*Su>v*W^&BRvt{HA{Ho-ZY#<}4$%u`iD*=Pm zV5X0rt6lnQK`r+(ByZ#i50D(m9a25EopHw40I+wyNse_uvtED~9T#t8B}=m{ZxRvb zr#mEB{zJXEoI5XJ0t_8k15LOmm7YncG4e_M#)gywo%lruVpz613($RCgDS*f?=~1y zDf8~%@VGx+Y+U(|;HkFNHT|sguEL`A8?fj53-6e=;>56>rWsksRYU&|8J#}Y(+P)< z9wf`r$hhkX1%zrh-sYLkTZUIjkyB^Y`^QH62FQ*qr6y;`w&@YVKfe8yFss`V^M+OK z?eVV%taJmKo|(kuf~vIs^`2R|SM$?+%o%>^-5WU+8Fi|AeTMEDYzxotw>;Z|AC0zK zJ{y3}m$oq6Smil&>uavWvp$QG)f};kbs+Qmz*b*m+bI|SCq|AK-mK+snylA%i=X)6uQ(zw?>jdNrT;=<=G`PyNBgn|{Z<EGyU;J#kAKEFuL0WE^ReP)y>XC>Z zhrCpf4hKR(NzoSl<}L#eP0zEEYcq)wb*QuTAiy{tX-na(@5S$&EN;x?#-djt%jr{U zJZ6sL;+@%pF0P?anZ$k$m8J74W!5tmoC&=}m1?b~1?D!`iw;6x?N%<6S5PF#eFmua zvI2OJYwhid;UA^aj)iN#Mg&_zY!_m$IyZ1o{Oti3V5>mUvi2^!5`O%+-BR$pap{!B z8|)&|mE!z5W69EfuiY@Ep5@2pFBz+e2BrZ0Yg)&Wi zw?nr8*B)g|X^_1}CWv1)7|8pSb$k63A0jZoflbT{rlN@ak@{s^z9k8&Yj2kfwFGa6k9 z(Nq7cup?R?j>CTv9+_|c=~)#^zc**IimI%OVYg#`GW_IC)$Bn}w##7&Zp3c*&rq9+ z`r(@*v_yWM;S-!k(I8Bn-?&>*3exg|78|SD(>LUBzsOfhZT(&d%CKZ6V(#?Upa&r9<>2l-fWqKex2SsHr#*8}*#kn|AGlzHj zfwa~dev_a`8%RgB{A%-=-C{`)qvwbmiEN>jp(ldBiYHdBnK2-9!5E(>o<2@8&Ph1t zVBl-C_(0)La?HY&LbHkn+%r#ba{puE4^kowu!IhKecG0LBlW*7ORNz401R~`*|WFb z_Fe#Ru~I(*DBm+H>xJoELU9&)X-*rMx5D{8B+iF^6B+ZH31*9&=l4B73AiG?jS-n~ z;Lf!vFDMTmh~-1VsA6)Y5VK^=>9zltB=lfFfs*q>`%R5|pAyEYsV&jQAFj)1*#+=08Zgajy_QNw=z$1fgUZn_Dtva1sZ*SX1d9794GI!RlCZ65y$RgVAVbH`5QTK z_PZ|`!OwXEA5IdH{zqW2>T`m$GIWi9!X(K$L7i@Z+$#bi^du$W~4B4OO}7 z7OyzhRgqN*M3`QWF*x#V0Y}B!uX=j@!8_|RF|aP%8FG^%8k)GjRd#>nVLy3~=C{OP zA9@&{vU-S}rjPHXdgJbadx>8hqY@M~{_prx2j|+3`0oDV!@nN%M{KxpOe71Y4$F<# zn-~kKb6Frh7pRin&yE;>U2@|&ek=3euK%}beyJlAwA){wx<#md|KG9iW*{FNHa+Ww z|K$7MV-R;xxFY|~A$Q1&{ZG*x zGyr%ccVS|5&$!QBT1&pPrYDEQk9PXGwCjuEIylJIARSJtT??*1R+fUE5ffq+)zGVr zu0%Bx06KEh_a8wMtZP#7CE_5>i*iRu&6+3u+>d{BVFkfF=4zJ}R@&~` ziK;ZksY2UBWyRoiq=dk#asQeg4;Z!TOzP*2UErPD8!2iJG4JYKUu@USaTYDX9P9W~ zO`V>?lZ!Pz=JL41tY;5DwzB8|zdH9}#{~Y<<@gTr+GOWsF{&UAt9(7f(HK{?gH@p* zuo0#R)7umcI2pPY%wwnzdm2BteZcN+MevD%7^aCSN|sLzUv|n$9HPGz8~gt6d2r66 z1q%#N4|C3)O)i+?nP>)l$S|Q@c?=cKfcEBJeU7g`>yOD-?+T*Xa>@oc#})#q0#SWoaL8(epj~6+g7Qg z@3I?kNG3|+Qg@^#vZELwyNT7NQQOi@8Uc-4mJFAH3K=Ttghi#TmIp2*ty;nbJS1^9 zdkaN%pW|oq2WTfiv22;{cp6A@T3xO47^$O7QjS;a;m4MR834R3?Ksys6E(lN>RwZ- z!eRp{I(7OVDpGTDbt#2}arx)4v|4L8q+J(Q);(nUt2}Si!~Hb}4bB2>%2SyXSd~;k zNc$ZYR2I=~dW@y{G2BbpDf*wjdv7{U5p74z@;Nrox;Z9h0K4~mQI&#dN`em;tx9T_ zOli@T{L(GXHTbcWxcFG14PzZs3k)WnjAbG)`P4}w2afTrUGiSeN-10H>7R2bt;Cw- z=6HQK!im1@_oE`6P_39rj>cWU+nth+;2uR3{lEf6#!6gfc!pUL*ENI5$5hX_CghXC z()h($B2b2rFc}0I$V-QI9te%|lRdt)T(U-Z^_Vjl#XS4yf>@N-+}rkIic)Xk*>IGJ zC)u$2s2$7vJuhZP{uuuSeYP^9mnLmF>C7rL*UGpI%$W+>L0co zt=q6$H(Tj{$En-zD#Gxbk0Qj;iYxUFKep_{j=DF17Ny|Bfe31yv=_=%%~ z4N@g%!Ip1pK2LC_L27k!+=X0T*QLESqfCtuBd>^Ttw588qkJ@4j3vGBIZvHAfCOl; z{7Va^J7`>L2}^YFB+aZFlC*5K&X`3+@7C{MZ4W{l`|*>QK95~@Z~T+`jNikem~Z>1 zZixeZJfrKcIy@U7>QP#=NW-!`HQ37miYhv8IlL?L6?FRqoB2*C_$(|Xazj^Y?w90# z*^6HfSzJZppmLXBUfuB8Pr*GTT0yE6M`d8rdS?QLVK-Yq(;4elqxgt7NV`)gK9TpP{TUchH;tXv-~q}INg0?=Y~MR#UI^Xh?e9i< z=J!yZtwv>7`umZy_U3(Ng~g^9LWqPH9-7DsK%HV(W4@VR7&*=Tca0QJRz~kaz#ng^ zghD1(@)<-8{K>`|IKzc9bb)KIf@IEP%%d6v8iBxk>1YOaT2!%C%lftfwz=kCN=519 zqw`X2*VSla5;cRHP@6FyVzC!&JArwe3N$tO%5^JcO|knnjkC%;j^O#k}XqmDv&xsEZN# z_pPRxXjx8Ox>C5R?2f9x=PXC-04Q*P3?|f|b86NTHHU$rtpK7EM}7;9>Y?`2YRU(i zZ!P@Z^yD_5-#wwqh>dwE{S6e}Lw^T{ZE-w>w@uUBMn=30OI9|1GIob_5)AzNp7T^iQ>^Tz!l zS%;)fT?O>qstQq23QcC;_nU#z8=V()KnD>0cN*|uXAaxxQwLc z04-J%+?Zhf1@b^H=ov7u*>~e1q_A@R@6H}8Gs9wvf(4P!gwv9NZ5qe3n15}v6dy-zk z(q_yWzsGi6IN#70a=u~BqfDH5J3J6ya&2cn>`D5o_V;rw6Ax}E1#-_YbHm!Dhe*xY(va$>@_z_iGo9T9d%==lNaej)97?Ux@9a`k#EpUI}s z&A;NK-LG=t@%(-FNqSb3w&0EI*0~IpDI*P>BI(mAy5{(+?4cC-@|9{^^|ie}MZGI> zttc}FxVG+%Sf4y)P~^2bXYfc#O=gJ=v1{IUA?+K=a4$1s3E%CUR_IOHd}p^2-Y~g5 z=|DPA(dwp81*!7bdB9MG+U}B!A|ytOh@gFf;lJ3_VY@l+7hPp%UFvlg{eaC#wrfF~7jRVF7=(%gq%6 z+Mxi72m32O1b$C*Y>*PYof>Zh7*X$_2JRqiD}Chh%Mex3R3%YjNWU+jXS zW`g_|&TsF(h`{&H;sa$aEbr(UfPK+^6MZ zYc+Y+NbU)Z!Wu7f35QQl%YnhTXcr;Yno7pWe&y2}$IT{6x?{9_j=fHrTsvPJZouRz z58KNwYB#}&JUK&wDMd}+KrH;4{Zy94d!q9;TjEbAIYZSMc1VauLGz#f>}HwAT-_DB zIGEQlmzq{FEi+Z`O4$NyBoFnD5bVmkIpLcLK0A8W5z859ag)hk%U{R=F3gus5zC}%+W|GG2oFJJ!wYA04eFNM|z|iB?v=Cw{!?7%}7Us6Nw=m(#>x^pX>Yk ze*a5?Jd4jOdl^2t`d9o%dgiSFsn_I=Qla-?>Yue{a(ygvf0N zKztl|DKeyrH9JErjlm?~$k|NK%#?Yk-Xq4ThubuiiIIM)a{})g^NjegYtuh0ZVi6~ zpAjcpI6Z^FoMXhIv_j-vE<#wE8r3#yKkx|4KwjY`|+wZMpwn zs&<9$VBE@n#kFz!_ft)o0LF$YouOIhv{KJ` z|6vLduJHR&5(A>2OkE@lS#p&7jdA64gu~6%vfiJ+Bl-V%9KT0(X`*T$ z)E#VhcmL}>zpgiQrV*FFk>|k=KV3IJ)z-Ek_xN^0k~VVw+zIf7&w$PIr~bmhI}`6} z#@S3S$FGl**Jd9Wi-)zMKeAK~cD)lKFSKlF4VrHaI@W2g{Vaf+ORFhk{T4vq*ZtR% zVUaL+=?O6lssVjL@?5j+-Y>?D!*Gz1hVJl&;lEZdaDO(Dd_N%9Q}u(=(wy%4lkxe# zo4-XJ9>b;o#cF!zj1AmYRpl;jG3s};7=*QN`FuRcMhjLyaXj6qlC-R5)9<2^hvvau z-jo6TWh|SE=wJ7BZ_3#OB?rUljsDrCPm$2u7d^;jg|2G}NSKvzsLqPO8Pz;0pA(b3 z1w7dFYK~5;7h7$$WCQsOsNY%Q;)yahv2%LrFXJw`%2;Q!Jjf6U<<~T8o^q9Wf4AV% z1?IC*87u3Zb!^7WAqUs#{sw>G2Gu{BXD-t~Z|IyCYn-0HR~T_Ix343%YfiQiE< zU@@jTe4auq^qk$LezdC0JZk$kUxa2~dh;2?%i{f6=I2`6OFhBmwq~%3A*!5=sgFJ) zn5=!v6Eg4N->A=iurQ;}74qDi6k-c!A~)7`-bqFiTc)r5OIE>%cdIU8SlIX1{HU%C1$a+AO!(9N7GQF(ueH zoV%(RFi0XZg9oJ|98YIn%MHi5xtng17gQv- zZvA!p7Afi7+kgG_7s+3DNdCHYn~Ib}m|Em9&EGFMpNVSUq5VhR%1y`89iZ?^jO*C*rQ+#T3h|B*8{4-Z*2)j$^yl77sO<8^=bbZQli6oAe?Fg%f; zfFB_F+PmHc7#t#cyor{lVmW=i0%70WspEjwOJ{*72%u}xCx)4;WeJc)H7|HU^>GkWhh z6&L(+%<`49zOYWD@iSyH|At81$~en?zQjHSIu8H~d2eE|EJP6wRZ~N7^r~PNH8RsE zx1Xj&%O8VNnrRKI!wF{m{n(M-G>J^5wyi@qK4vLQpD9d6#AaO1YGO&>q9-jh-|{+k zLsqZJK9WzA*QlPsw{|*<&4wi*qp|uL5q|C%5c+BT_1G9by5ZyJ4biT9C(7C>uQy_& z4V&eNWyp@Qc``^nF1<@;*i@|xyQ6_0Hk7!yNrOkdweJQSK8CP0>{?%DkshF|%37 zKlE0T9wi6oy)n%JXdY7e;_QcXoWhs~ZFUrX-?>1_gk(c}QTPr1jo4100U-H&oQKta zA>sK@R3aZr9N0l1j7_c-I!WW8Pm(buG&s4rL9wJ00M@BKsS=zEqYo<0o#->oxt&J| z7SXyEO|D|e6${Fi!zmYP>x(D<`b@=Kk+Y|t7Yk6?H0p4c0*0UW43pE3MkpwMaVN(# z$(N^;Mf0N@S!2>L(>o5JX>(Y`u5zJ{rq#Pi6Lt^wm{1f)ab*ahm?%?=C0GHm^Q)Bb zTyJ?2w}IjjPPbE*5#l+5352JmHM>Doh0dXB?K9w#N~R1*Gr0pg!-Q7ArAAG1rkS9b zYsSTwxAQcI*ce{wpiY}rY!$Cx5bq}+mc(`RDhfwm`NnBWyt+Jb0CMD+DZiQS2*^*~ zfpbSF-KI+N1eQevYRhOQpMXOt&Yh=D0Qv)9tKu3K5$2N%5u`gcg z>WR4Cnf)67I6QWduKi9-_cV0jpwb%F8IX}nr z2tNMU$GbQPEGN$EQp1j>1toPg*;TkXesS2ha$fA>s6_4XO&JQgYYI=A#)%21-^q!V z*g=?-R9Kr}0%A-^)430)HMX_|OV>^SUiy{oUp&6_r0*&Ujhl4=3&I!B32Cp>zmwM0 zm{K%XYA@x2I{9$eed3M=M;e=^Z8}!H-Wh4r%1b~#B9HyCBOV=&vj`BEiOQ=19m$~9 zl%#y^_5pf;PHN|M?Hzdit0YHIaaP-C`e|r$F-+XmD=Fg%kho)J;&{V~3S_MuwoKnk z^2OUA-2osATf#l3rw7)2=%uNh5+0ZtBT6$b@oL-K0Csd4_wM z8ATgT8B;{Z#>7{ev=7yP@%4L9&WpVp5)XW*k+`%`(5hH7M{zA<1$%mS(sN=fa+?kp z8SSr|HFDVL#8;U?ccbf3_wLu`USVi5Qu|6`og%2N#y5gz6NeN63JSYS_~HQAuZj z!5b2K*`|G>Qu~lUVQ3JLQ9P+sH&_*k8iKyxGVgY3unmx?m}LZh{n&HMi3M3G3O{tN zRZ6m&g!_rj6;HG{LrmedG~bqTK*Y13&2yrdmPlEjJT^;dv-cSfT9IWcJyiot+lBP9 zpxxiT1ay#|%1FtTCsa?$bu8wb&OznBI0(qR1JYg~zfC)_6tEF^ zo(Alz5t@L`85F96R6mgsK!QuhoaC_v>|3LRQIY6`%}?ZW{w@DN z!oEo9D8Z0>GFag}U8P!ka?6p;#p;p%JC2I*9dJvz2@TQzK=79TyT~vg_4G4rI+5@+ zW09wa`pcH&b3a87rlle-zU!qLepaNs!D#rtt~z%@W#t;(53?-cfhG^^#?LK<56So& z5`w~dt@Z`kG2&7L`^&zbY8)oJ)W*-LT>U$oP^*2|&u`$Dd#A0ah^~q3dBg$9{!VYf&}*`wE77$ME9P5wf++ZJ_D$0IOSQ$GG*fhiAqHc0=1WtW5w# zsM5TTe9NpGMK~;PRAm?d7Gwn);g|6-Bm6fczYGs&OKQkE;5k-$0V&BGiZ-26?pPTO zKu1yaEK3cf>Mof_0>tt&)lvk5kLdVm=!ESJi8jNPatMNb%vdfT@uwwM@u;3X_g=q~ z-Dl(@TYBeXU}0q-CO{GrrX8e8@m}^hP!Sh@S0f6_s4Gdg_N70;J?Xx-b9U+^eo*eQ zt0PXUNIz>8Xnfkfo$pLf){D>w{L6#qo-GS5Cubs@HFj{ZA8Yfh}GP)%olQa{R z2t_d)DXMRIT@8wRO<&dwyVNejc~?Luykl}6!ts7WVLLQVVN&Z|O+~+Xf9=_cD%O2V zCp{cf%6#4aD)p!;%!K^xrMMVRq2KH448SD4_oFy}fbLAlL;%&6qcjtd+!LDf?u(2o z_1rC?^TM(XwhAHtuUnuMC~BA{uqU}xdxdV}O<8?v2+y`Pz?NZeP|WFlB6S?Klm@3k zFBgbUf;pbvZczNUi2>rfOZHF|l*cV*eKR_c4&lS$EvuNIz8+=Niao|KgLgS;i}xZ~ zm{2gjHu20Zy2tqY=E(r>q+yAf zke%0Is|fT?;{#EojIMfN9))Z0>?3~ku9d&|4GF(zO%PSl4%fRdcb!>e)t2o06On+r z&#ExVwwdb;%0kn*lxOOTFpiS=v|oIgpnUW0wM>wr1-IIok4j>t_IXU?(P&h_=B{#C zT@c_~l%q5hx_CpPnbcN${^8}0V<570g{?x)56ecugBtJIb|U}_W@In z{V>7mU7okJ;e7g&2f>Yu+&ypl*HQDm{_hgMLHcA>rjY9?DZcO{o!~r|eLuNEh4u84 zuZ^F~Pyk6t6y!G##J*Xpz_`(fg@ZFdd`k;~@lv`Vf8JH2=$#O(C_e+ON5@{^N*B_r z*J6gD4(s2pI1T_r!tle;>e8#CQuH2j-7OASXi*nmRd%MFu2&$N_Q`QEVi+7y4)Pq~ z^lI$KAUBk*igK?+WFoKj1h!u67lbjZJMS!%shfpj<2@7}1%XWDYxq-NA!R_P#FIks zQrc@4JMM~eCDC$ZhL7i+b2TBaG;??D%EEQO(@Yu$$RHl>*<*OTpE?5GGppQ? ztPQb6`2GE*?lAO#C53O0_1XowrqmXnhj&p5(m+=WV6?E%GzZyty|$HiJWbJX3t&p+ z8tMzZS2Y`*FLREyee7LF*!tKNbudb7K&CsVw7y&hSlPsKhC+FnWq$$R;*HW$?lPoFi`6^XcU+vD%?pqyz-g~&x!cv zlA<(}JTL*moeqlFiC3$qyWSVAbg~XG{slX={>4>yqHrelyLM&-dcQJL-QpT_^gMk7 zvop4f3CP9A9HW?)IvAM*$Eu3EZbQPrkK-<&O0G1@xl2s^^RH~%@>^Pq#tbo8CmH5x zk3n91{FB(@ghuQ#(GYpWgi4q^Xv%iC^mzv~5vQ&mg+jiuPn~1O9@$${3H$j?Mp; zMVPl!CXZB<=VTg~jMG&YpU#>0XSEb0pJ(P2$4LMWVH>8YM2^?&G&1BIC`)Cb$)OJG zn4f|cU&jWV!se$!_wBLYt^kJkxHCx9+lG1d5RA}y{F&e=TtU+|`#WbQ;LcuV90MG> z;pfX4#D1BvS?aznl@b+{GzZy05%wUtkCSu-aoFP;w}y5CPY*ibY2LBOd{?ekLxzCZ zv<*vE;JbXHv9EMU)I~xoZ0yk&X~FV4#{oa$BL25RwwTpi)FQ>w58Xgwx6aU7UB*2D zi#_=s@#=%DrDp3IA^eq?Kk(~ku7D>UbUZ}e=L-WmqqW1;2Z?5XIBBHQ6n~V9Y{hzx*wQfk(?ND;g6mfvwU+&m7TriFPyanDb zgnb9PL4Q&^_AAC=t2P^{mHBv)vXCXs@d_g;`DXOw!YBM|XY*leoaf4bBRI{G<+Db% zGP;j@C*;F1auH3TN)?&BkeDevFYn+&%l!g-U(tq9wC^v9?$9IPAgNzouaDXT?x^Mv z0#V0AQI}GiV19P-rTyl|{j}JREnlzpc2;vw_18!rvvV^nt05JyA9P?d)1Bu!+`UeM zQl852e|fVUkFM_Cv-W}=T&PZ(wH|DN!Pa_=xF&MeuqJOhZGJ`g(^ZKe--lCa^&ZydWk4ou<6 z>lATcs4|h*hv@4a+ov+LLYM?!t(Dq7TZ>jLK99WWiwdtsokx6ruUw)&lbFuh&8r?^ zE&PKh+K*~FL}H&}TFc{=MAwn~Ac>wgCdDZYrfg)7OKRxyl`OAb{8||wC-tXB9}Dv? z&c$olYjCt?2pHB;@eG*OcB$KU{c9uRwgo&=^<~SaX@5+p*%eKsRCG@9vkf?_Txv7( z6h-C_dU?aPV5eToZO*}NbFVdJDes#|xD6a_`%<-(-QTk~QYwtB{)rlXm`++!9ms5q z=fk6Zf>w%nYG@5Dq-zECtRVjMj$?CNMLaU2YxXT2UQ$Ng11pm>lWz(jM1d0@B7iQO zM@9WE<=FF>P7gX^vp&PqTzyFoNqvheP-*fk3tIAPx&J9S5lqE<*AIxi$8A*AkB%Aog77`*yM3}Cr18D@sM7vva%f*?b4_cyFSgFr2M3{B=W(cEaQn_(husft`@F^ zr2w&?N({j|MJzVb8OSe9qHpsXZ8Pf{5RwC?IlEf!rnSS-cpYf?FSCc;*0uqO37o-w%ugl{=hJ6&K137NG^+oPEL_kj zbN}55!}5suUd2)!flDb$?`i?yw`=YEyus4~Y-R0Zfk1BbgJf;C(pdVxacf2EoTH^C z^C68)N=III=)D!sMB2F{f2Z}GS9}UqrZjdT-(+a2_cV<&YQvos+W^xBTs=GL66=CA zHXO1Q1qQpoj(#ZWSi(U|pi;T}Rks{{fxxWmQl_d0Vv{51Eu|r7E5tgaFUKD51KqJj zONxzqBvLB8ewEckC!FLydCje_WtwwlNc17lxF@5aDAWjI$0<2J1?RCD>x2^f@ghpU zF#Zn1mYR20b29NMOw`;DiWyN!EZX5wRx&I2srNy3M{V~LVRk>)d2w#wi0CL87Dt@I zR~gG|M0I{JK!-oG^{3SA`zbWj`_NTntd*^EhQ6w8%c)R0D*31PId6{Q=({OxXDPOa zbk7%RLQB;oSzqsK6WCr7M6vd1L~!}5rF|F>ON*r1#Y#L5-vE1t4}UljP42S9Zghle zd`fzVEY%@sM?4%brOKOEXlU|DZugLRmDx~n6=%Sa;vg=Z*+s}c>aNw5bPK{SjDe@( z+H;F{Wjz~Ns3NC*+oJ0N{)Rp_yZ^hYjoyc-(_@0U)HmpTMUSwA3Bzb)3bYhd`GCK@ zp2OfEjPL#pi9yGh<@z(rb#R@(FgQX+(&Y{RZ+DG#nvRK4`EZ*U%m{+bG>I3I4CqIm z`GlBWHlKNgn6b%&Q~bI2wHXg{ZTBJ}XQIMMx8i^C<~|}|9d+jJr>qFV_PJ{@79C>C zeWZtzMh6U0M1`>G#Zwrx%`hgkD=xD-frUyHayKPV9Y+%yXXqw37FIJd}xMl-K)b&fIFmrb9bYSD2V_NsrJKn1Eu=ZGXa9Krj^AC3w%w;7zpI zyJat}mhv4Vc-@qOA2@HQcWeeShzl0EKG2;HDzaXr8lScIz2nt+D-K>BX`6{q4}ib2eR2?e#nAFm|}Q;foGFdqLP@l#R#Z3$zAI zDv$R0%cuS->na_>_oFb{9K{g{Njmd)oakvRXzu9cJmt78nojCCO@aEz}OWHf$- z6=z;wxu{kKDRQb$hRwZBLwcG3eH`;Ayqr^MY!8B(Oj7RrG%}h91^x z^RTsqVEDJ>Y-HF!T@9s!HVMAnS#Em{tKoqoiK@>F&&n6nE}oVP>I+XpD!frkpmt59NAokB4lBukgNKFLgR; zu2-nTujLe;ry)fR%EWgz_iCVMk_Jbu2t9($GI~G_Zb%&X%F~hvnhgHVtaVe*2XDM4YGOs}gjIsEzbGB!+hl~`FaH40o1IbltzrTJ%(jO0CyF-tK znaZt8uK-rYkEmR&1bhAZkjHUpvQTF3S7AWY3|k8VVr}8V2dMe&8Y;S5eeTbXp)9dV z>nd0nAEoY+x&MKh2$|}owAi3LJpApW9^Q(xEW1HUY!26ZT>^kowfe3YbwZ z0dRhezlyesh+5sCSbwSqBDqK9TisR{P{+QDf~q(r84R8Y9)V8uYJurCxjx5y*AFk- z3R1Uk77#G-*%}l}`{(z!W6@WQ;^4eaIyL$60=#n*t*VJB*-sw!=SjtJ(qvc9{koc| zw-}n2jfZeNUfq}Tc)E>^96%{GuqdP_r3jC32wv#>a|qq-*KPOOF>Brs?m%$rV5uZn zX4EEweWMnJ;1;u_HK9{>Mth6-gL%NKgy+ynLY2P6yUET#(L#PLl~jG$0KWF0so$*6 zg=|z!B3=k4YAU_ao{3;V-^bnG>9em>qCW$A{jGJTa&{hC92fY9muWo0Cl24SD1SpT z$>8(YpebLk5hrLsO>6fR|@R8i_z3sAJ#tK=hK_g=#_^`@{w? zHl;!gP2`RPG{LfIl0AWFuRG10?4DP!uiklsfA~9-`Vf$#_E?{ygo=QZOGx)gIiV&T zIb#h`!*VnG@Wiwj2)~&&q)Sj$TKEL={?m)}ca^Nda%K)B3ub7<37Y zOW+IENBe3s3Sqt@kTtKL+VsaX=k^J~YdH>EqpU9`m40Bh?TBNQHntGvEtE|+BqQDG zYHbJ{Z~#;ox8VJql5oJ#ya7>_5rae3fnO)mxdc;GHfRV?Fq_DCkBI`BLA2-Fq8++D zn2;6w1~DRwnNN+l&zq#EQVvl2ZDmg?o9h|~7HC$u&dJPpWN}7?O8+a_P9l*BKpMNE zw>$>RgZiN=y^{(}F~iS&5oUhq)d3d{Rawfh67h~l&eNPz9XXj*J0W&onvV2QQ$ld9 zv!N@toDIx;=V;+5a|i}BCp+c09#Sg!M}KN(<#q8*Yx>e{lx6VdiUini!Juax>tA}3 zhLX5-H4eQ7XJb9(>jM)XBV{;=P|*ly7Uqw=2Dj~4PDZPX;ev}YY@r2-(o&DO6%%vYzEyVaG8Lf|Cc>l#hd=cheCUa1iFm#3UthqM z^UwRg)CI>MS{}+@a1eQ@!YdDKfePah>-kOm7@-s?uFtTEWqc&pDcFq|Hjo5V$g1j^ zV%L5W5z+;RRY?!OzZEy*ro8QpRej8=U{Z1>R2r0RsI1?R4K2l7^Yl^3Ymc#D8 z$A!f#anV11xukN;Ki7G^g?I9c zS}!1~^4*k22ne8pO%1>T=%o}EXI;5`8t_alAN%baF6{FP&B3z{0ll2Nnd|<)2cI6? z3LO6%Uu5Fqic0FUtE5J}ok~ik599%zT_FhQF2%le>EKe^?s7 z(leQp?e$xitr7B58Z$TVOeO~3^yctq?`qt)iGG#f5_9a<3Gh#(dzy5E7y%5ixHQ^C z$tu;Zg(K5J6FsKrl^0qWt{r#tYr@S8ca$?D?Fe4KA?dW%+(TM<#T)jo_Wb!ICFG{u zEDv8D7>o0H{47i|Ak)jRm66T>bJXF;esRKd5TJ)>DJP+5N~;Y)bpL+32yb6?u)ueI z@}#Cxh-x@-klfgnp4pt);eU6$E&nsqGO?GFN{g&_AkCPeR119{vZN>h_Xuto zSJLcyYm!`&VfSk>{4UjXS3&4mX1;nr60$6P8_abqbuv?=Pn)i7S4lMr<*KDOOe2o& zJ>wm>iSUvKC*rrMTWkepr8$f{iCKh4hdFwm>prh16!cd{;|IjP=+hsg&Ykys0y&u- z)csRnE0sAm&)yN`Ne|Nr)TH?)=mgL64(?At+K&t>Cu#G@BG_Z5iTtd~z<%DZlz0Mq zBPoD}@4e1%{ShBw)1P#VfZg98?b?c8*mE@KCE_{1h=~;ku3I5?p-cY9#MsBLAIISD zNg_X+f5A=!24VKGMZqzX6Ebotb=go6zVYSog@3nG8W4}f3R)3AipIAGL8q~3JX;WZ z^RJf|8IT*2vi$Rc9|b=mt2fdZ*RC~S7I(w0%TTsI@~<=abO8Eko*ib|(f6)^p>;~| z+N@0V0iGfeXIu{)6*_n9U*iuV=Bbe$MSNtK~hq9w!56e&$QB{xj zH1GSx<$nO4WrHV{5KBItSv`Wg#;*{1-!aKOlEV#38NZ?wtvKoF!}eVxVDZH9aPE{h+lQ zC42(%d5*x2az+^5--8!^=lR0^Fg|B%TA_qeYqay@;`6vbwPs+EnZ{)+loOQ7Ui~dG z`R-k$U9JFz+r+^jLs37t&l%A1fgey9Z>TqWHkVibI(rH>2r^JobMle_Lkb`(geH5X zvhd1@5NoFt0mB~;bZJJ-dm6A8j{|oEDfQjV0B_TGw3_s*iR zbo;44NY(_cf@mFET0{^d{dxsl5M2WisLAsalgAAr#H{8du6hfrji;lXg)1i5z*Agt zyV?{)uMKDRb7|nH#;jXBWzZQ_NexuY>###N`*LnSL=F5P&uZlq3-0d#OcGQAjKtfn>mj3y&!$RI?daIi_lyQp5z~^0^N2h0=Q@KP@A6wbdB_$g z7=Q2Ak4w%9UWmLYs)g@$?DH7~O-5JFE4YKjEqaV$t7d|PO1KV;YPmW*e@&s3Kfo_1 z{X#@MNmzjRRH|&ZxGjy9cFb49l{7;6jyM`KiLTDVFZ` zn{}@`u~le}>Y{YhXMF`(1z$*c___$DtxGjM( zEf&l`VUrkh5-%gtuCn}y!RT_DQ)B}YsmH^QEafH|5MbeJu0@u>RDEgSGza7kvP;HT zDBn@NnsMm-b^Tb#F+DF8D3FldOje ziJ<2~f_(>ts`)&QqcH2ly0WwxRP6dXVKuo=-~5LP#($=Pm72Sj@8K0|U0Z~U)%vzDI@v1&y{qTcDR`RKtU+x;-i>}xUq9X0EEB4IHo9=Rx)<^W zvdVwVd#Q7}U!z@BIb7Qu)1L~QlTiPDCzGcy0c)73YVaMeelId0M#=JW=#CfDq%_;# z`uW=P)_tFlUZON(bEcV~Y$?0EcPWc^n)&SIP5}f9yukrY5BQNc=Z2{-;K*&<+!j!?EpTXFgsFLHbWIX&in4)!z zSx^m~gx=p{03?0FDPp%5y-{p)h_;XVpsm|=73C)jNGkSeQ!w^Unc&O+D)8-jA* zQHXjJ&VM=*cgJ)ZXb7`-SY`gj{RxMdlKR*r|jrHpLnu-M`N?Gw=57-dj8`?)SA zr7`_hJf9IFn$vLFG$pv_PMAA?yY>h9$p_l>_FU!12=h$cd0S!a5-tlo%qg*dJ*alY zk(|9VfJPX#A>1mT4XH~y*5n(u%VofF_tXeurE~up8GNo3Am`8OZCHcPKFHYje)YY$ z)bUk^OYq%HO)xuVJXlP3*5&u4RK!%;APfe}qGHGgH@WMjQ)`;H7MH+M2!jDV8mf`70(d`JNgfYl42c!87o2 zi(5|TfcJsfNcCut9n(E7sr!E)=~NT`}!w?uoD6a(#JB~LgN?RJZ*h;plsZA4+bqu zy|(hGGE2l9evEj;Y%V~c!fvhLBXXDLm} z=*T-66@BD()nUWrSMk}R(cHh|v&?$}rW!JsI!BnKS`ZFDt9culQ~YTlqdtL(Rq8yh zBEs>{W2J&;`ToPDJw}pA`Ll?i_s@L}FSu8sNkPN~(k{$xzCm)}i6*(~o{3`^OTmj~ z9lghTDv)#YZA9abJsmRl=U76;_~ zR$S%r7Rb?y{N zk9ZTve={I$PHF-A80NX<-wA7-HY$y|uHZbEi-5^3QImQB@7y*0;E zR)>F~%7Lv83jwCo?dv}r1YI;x;?~%l_z5jK11bq22f$L*C9Wm_XbSjgEGS#R&3-m{ zywlVfRzzfslKIFpai~h$w9goRctc`65Q?Q}796jd&5+T_L@>f!FZsqh+cjtK99ZcB zz)F|4#N$h~^27f4WpOmbVulE%H!B{d8-8!0Yag3QB_^nt^xg52Z`Ww7k(sKtIFV2_GA%xjw29|%*`qO@65CHhcHMw))#%$Mk@%tDdub?VFXm9LUDDo-`~W}J4sg5&F}rL2S&8a26hEPq$& zO3-a=qKDix&>13LU%aH;=SCVnze7Xsjxm`2(F(%zkl!>^iTj|yCD3rY$2Nky9;;P4 z5Xe+?se}!B9a)`or?N?~aL-Yk&9j@zAbnn0XO^7l2dY7M4v-v_HhF zj+{;;uz%dE{4kCAi%q9YOz_H&EfYE?Ae&nKvy6yS=8Hsj8!woqPw2yjIKEJ?0KOKt z#nep>f&3s56Jkz9a&GSUHApWHpV+!h&Ft!rD5!gtyUS@<@aKs-8|0~3ofvQ&9HeIb z!P*-8Sa^CR8Th2x5{Go zT**zViYcqRCI;VP96sz&Yi}zW%-UwYhrnS$zh1KqWt1(l(YYD}@n-X*%=Nm_K;wRm zZj0M-Kx2CgweBX_2Q(^&omhqX)J@&F*IJ@5jhdK#bao|~PVKRM23)#P(OZ0ZkwENr z0a{}QsX3d8=PlPJlCQ-}ip=-FB4T!zGO_h;i(7Ug3T2n-b??$WK>0OKItT~Cb-2j! zJya=-Ct6KbDu6Nw4TPtEVq2;f0i}W-tewh;&TdkRTt} zh=1CQTd0Mi2~dSy6RskQ007sitXA9x{T{SBM-wMJBW>2he3 zqF9pa`~Oo$SO}_3~<;x0rcfg^{*5|O%!ca|lGZ785=jFL8 zE?ltu%Hd_K)OHyWqV-#A&lP+G9S4iK-jIk4R?DU|ia+v??$2B2oc#TGqL;ED)=?3Y zQ*C>{X2xI-`NX+4Ol;Y|#pZPe@bTI@Rf z4t@(dQ<}I&s0BBTO13P@j z?GvOLS@V_MGorU(W+u56HCmV|9Ue_Ot_$O1ZB#9K@) za=TXUFq$(9Vtq`fTZ<;mg=MH{$4i2o0s)7r^+dJnPN>o)d#~ZnkJFcZE`a-P@#N#T zW07U;tx)K6(1Kw}#Ia3@=k1D$!lb9ouGDYlzNARoNX;{?#jh|_8`RDz9`Qvs3pSrn zmy$Pzrt?kB)tw?#JZ$Tb z5@Qc`k^ZHQov@0whfrpGfFUSPsSUX4sf!Ou6mkFY9~l1AbdV1#z$Ka%x=KN&S$p)V z=8w+&(jU2({?J3PT9G&|>WKBlhydW4xB!J~9F+jSZ7UNmS6e(Y*#ARvm=m=L^;pxc z3I7C)F6xsou zDQZm7Tzg$znz<~%Q0;}-v82H0<`3}sMqe{Cue;NawAYnYjb8c{DQsNw=Uc2s^AAUB z3E56^SaXbfuqcPeyG>}A+cAnCS80h=eicgnh|77Ql5kA6~Z{e^om*J_& z3(5N!3CPj5&p@;7JN>%shMXyZ;5?A;Pc#l*HVvDG861*x_avS9Ql(f0E z9998O8>20&w1Xei;3!H0x`wkVpm};unGr&E_C=fH^<= zC+XjjbbTf7j3CF)v%d&azGZdsrFY4PRZb-hTns=7l z-VUmnu<(58H{e&L`i07IgdbR(-UjZ`9h(~wYBN3`{k55IN{~x1<4xrA2IQOA4^!H2 zGUq}UPlLv>_IJzbNkQB)83v7W_8sCWYK2;@6Har0zHqpy~D@g)FnN6Ko~a z??ElF(8-V0XigdWu34NlKM>NfSlTFbU!4n(CNBXwmIv^6aq(yUI-W^3gWih}_@8bm zRCW)d*Aj-=Hh2$$3hC7-7j2DyI=qjV(k8aC+Hd^tlbS97Pzf`UzT&->U@Eq)Se~kT z#|CNmzFg#+N`vl_!lfT{@3w!icPwTxje`0kQQ@aBgL;`lYkGc+mx#AL%GjqdTxxDk z-o8k84pPl-Ibkx%$z8~VkCm%w;+eeA@a_%Fs~k96$o9g=d3h#odU@sW(hayS@|V6M zM2-j%Njkddu|v-@^N$5$h%X=|G_lv)Y6+5%&g~rctKb%Eas3jYC0IhZ`Toj6gqt4$ zjp4qWXhWI}?}yqLIxlt@l#0wI=AS@J7x8M(J~e7gt(}QaEs|o4J`mcQY(#|W8^tLKi(ObTp|~Y5R*bP8(pxX9}GVN zVXCAk+KH5S|BO1;HuW%rJL-j%ZFLy_^4BF|M%j=6a9BF@UWPMz4M@ z^dUM!W=Z{7C^gUSKZDX4ON;dW7It>-E9Cv3zJwKfs|ZxfO9CZdWZX??kAJ4paaH=k zl+KZOEK+?i`r==weC$^;QQqh-5Pno|5m|^>$@H^=iyOGUrGq@pw&9?;uu|<=p>q!HqpT&w9aW>=bh-7Q$|tmo;LT|g zk>1%~7X*AZvPc{1vHGOu!c!n)YFOHZjeZTlKdfKd`w#>1dmz;eUB3Gw~); ztwT<@etoPN6!5g?vNklo#{$6p3pt@nvmR&_b@ak{p4rHU!4N@)_eaN-%cE35|1E*SGJN_?j?6}^WQG|C-3Be9f^JBL_CD*Im< z=`GURckbW%i}bJCf2v4HZj(|8-=XFp){(yan^RQVjTZ3iA9)=scRI_vTw<@R-zvPz z)%_P)z4u==>8<}&lWrvttA0-U%Fl;VYtj0T7mZ&e#E$ zykQ?|$r&5l(6m3z2{+(-VUTL`7N@8omv9OL``0nG|seOjKA;V^iD*fz9+ znYCLt#eRd^DG2UwfRaFlke z^FZvrDVf6-;G+3^>a5R2w}H{BHj$fFW3cXj)?X3r1*79R?>C?H?FSy3K=T=2u&YSe z_EONmS^hqMFQIn1xOjUEz5x5@*CBeUc0<4(LfweSJ<3WR6de#9l;c?$QO%P#77dzu z%o^|r6qXH2n{x#51?8%XuT?t)i~B+I->OQHSx|m59MVd@bTK}9Y-u2;!5DX8*~iYa z;vji%k({QTjxe3IukVIc%R;+XWLR{*FtDN-8JN@P=>RISg88 zsrmsXT62u)zD$d{5L&wUIqubd$ zC&2K&DLuz1OLkY6Cc5b;F8Z<~>eH(*C!FK41C?mWw1SZ3cX^=n5U<+! zu&6M?#VbiZY02O9+}P8oZLmD3;<*a`WjYbUrKGw)^Cv~FAr$3GbWgZ`@?5K4 zYd59#IoM9Y@b(j18gddxbB1pd+c1JaH=E+atWu7EzVd_gZ&2~8r};bfs-yYp)2o8m zUo!t6OJ5z=^!NRbfr!$R7Ell-C5*0tNGS{^%|MV2Dd`3kB&0-YBSuP&7#lrQ8fh3z z8KHD{r@y^F-{0f0zxTTL+*9|Q=kr`{CD@mX(n9tDIdytD*7(e?DkSw5*7tV$N2cZ5 z1#3TCL+`pipK5P-mdeo)EceIpLS%tAORT z*B!XNB{sj`q5kz$07Qw39)7xR>Uib%jjTk(v-{BjJcpNw7O zI6aeqg!lsb4A>g4!#YIQE=~Jn{*bOuUuJld?Kdfb0UNWr3-dP*LFkPcYop)+$UGuV z>cyg*=I@l7h>aUXBVw;K_ivU9cXjD^y0G_&uh#}9U>=^9k6495JgLM<6MRvG5IQ3} zx#-4Y5tJJ+rCrC7AfMwu^y3E#mhvgo<7~=1Lx9%5&-)%GCgXwty0TNEg1Ww{9K{hV zWVEeK;NpK8y)2mwJNU!X z&`PwIZUgMcnn~gNRJX?+}k2;AB{nj+} zb_l9hX9&-rbX`+tnIC&Oo{>JwpD;4OGm~qcB-z)>NRQJ<@9&F0XSkwl2e_W(b z7zTzL#5cr8e@pJE^^Nr@X9gbMM%)-FR&0*9PtBPN5MCwFsqe4df_h)#0khCva-id5 zd^y~$=-Y%_farvca>4)(qRRdw*Hyt&kstn@Gw9I`oJ3Wjq{Q0y4zt(iA7U+hvWWc{>yO8!1{O)avfJNFD1^>uA`29B7 zRDJR!fGCk|Xwmx@#5-V)%d!GMJqhujzp!0;qz_94>x(+pqJ)?WAH*-u2~+ufT&+44+ZYY8 zSq#pf@mZ&Dj5xE#)>l2(=Kl_}_qX@}%YZm@)pG9=*As;8|rGP6E0K`u#bgUp{})V8lf+l2c_0 z(@TNvs)*eGO@^>wuiNK}oX=b0(U*P7!SleCugX2+ZprTE$SS9T92o8`FLscV<*JfZcn#CAwhv z+NE9w?&e1f&l7}F17E6tCaTdPr5K%e{!FbO-{1szEQ2?7HlzRwWJOv&AfegbJ`9^mryGaDE@fLJ2oTC0Fu!UNoVJoP z=Bqo*YIBy22>$eoVBSGSG|zydq~)`jY|UVPlj?s9RgJM`-oO@$EZDi zH+)`d!23q&_}nV>sDKSU$>-4;FRiC7x7KCXl{)r*Zm!d6FE*r1&eY7@iK=id#6&IP zs|i%)FIPsqBxgbj7HOIb#m`?AAZ5=av_JS)tPq1U04p(;_X*0xF=^gX(NPjrzRB`_w5H-Q;;Rde4^%y|*+a@Uh1&IL+z5dH~T=>bEPsmI4J`-5kK0w71;NM7=k zrsP$cxwqRbLtGt^{;XWsA-g4LhdAvlw6LBl@ZtEPids^sKDCg%^@5qj9`3K-`*nZW z$l(ZZ8=K^&XsP+~NB_ESZN~4yn^6XLhbjM7!||P~8dDlSxC*rvi=*WkvR#X`T0Xop6Wne)keMN%BQLa>l*6x2aICoo{E7 z*)gDxBWHKo4trbS;8BUPP{21a5soE0Q8R7Sx)H5@((V;#YhzV-wlT$r z!+P;|3mc!F)Q%@IU%0LiGIEwrtiWar*b@AiZv?o#5&9mZ<%P)e3s5IN&hds=kV#`u z_rZ*^-lO(^f0;QB&(V)lF_~s|_UPlZXjjEL%Kk*x#6fJ=TA=%4E;w&|;ov6yEfiVm zZ0JgA*~X*p4SI(f8>!@s+tZ+ptGJNj3%{0GOU>f}X^P(@aHo+uxT7_@Ckco_^S7b$j!FmJop6_i8(T+g=PV3AXcBxJb>(($v z5{%o#Cz?1+lg{sFpcdnS(I5X(oZw35d}qmxAg|41qe(R8GSXl z!4yj40Fe(X!C%SADI8HD!fp@Q?<>7BFCKjrKkuh0?@${*W!;&a0u@eDmMl5*

V@O%4iJ_>b@AEs!d5K@JBo5mh>4o9)p%>(74$ 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�SI=n9P<9zX|7@cSg-~Zgm7^5dF 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≪⃒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

EaD4R$tn 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

Ri#CZ1Wk}SC}9~V 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⪻jTDsntq?E3W&+`jD$2I5@DCo>GDpF*8aA7@y&(_ z^={$^%bQ6+(VJA&ncC#v&UjKPK7QcGhYSO?Y5c-UmxSbjC2&TvJ2yGq!@ zJ*Hb!6U0J$kB(1a$TY1bg^E;iPDE!VBg#b14^^f`Ex-06;(`O z<3bcqwL;nM$DkwCekag8XVIsBqrY*7BiVpjH*R}$`$V@T=(ZVqR{xyT7-L$JrQ%

8aiV<48II;m~X9q!R==ocY5 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 Woz$|Vg`cp!$v;2UkiYBShyMqGL}^d} diff --git a/frontend/style/base.css b/frontend/style/base.css new file mode 100644 index 0000000..53e8d3b --- /dev/null +++ b/frontend/style/base.css @@ -0,0 +1,57 @@ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.navbar { + display: flex; + justify-content: space-between; + padding: 1rem; + background: #f8f9fa; + border-bottom: 1px solid #ddd; +} + +.dashboard-main { + display: flex; + padding: 20px; + gap: 20px; +} + +.deployments-container { + flex: 1; + padding-right: 20px; + border-right: 1px solid #ddd; +} + +.project-setup-container { + flex: 2; + padding-left: 20px; +} + +.form-group { + margin-bottom: 15px; +} + +.btn { + padding: 8px 16px; + border: none; + border-radius: 4px; + cursor: pointer; +} + +.primary-btn { + background: #4CAF50; + color: white; +} + +.secondary-btn { + background: #f44336; + color: white; +} + +.loading { + color: #ff9800; + font-size: 1.2em; +} diff --git a/frontend/styles.css b/frontend/styles.css deleted file mode 100644 index 89c99ed..0000000 --- a/frontend/styles.css +++ /dev/null @@ -1,175 +0,0 @@ -/* Root color variables */ -:root { - --background: hsl(210, 100%, 97%); - --foreground: hsl(339, 20%, 20%); - --primary: hsl(308, 56%, 85%); - --primary-foreground: hsl(210, 22%, 22%); - --secondary: hsl(196, 75%, 88%); - --secondary-foreground: hsl(210, 22%, 22%); - --accent: hsl(211, 86%, 70%); - --accent-foreground: hsl(210, 22%, 22%); - --destructive: hsl(0, 93%, 73%); - --destructive-foreground: hsl(210, 22%, 22%); - --muted: hsl(210, 100%, 95%); - --muted-foreground: hsl(210, 22%, 22%); - --card: hsl(210, 100%, 97%); - --card-foreground: hsl(210, 22%, 22%); - --popover: hsl(0, 0%, 100%); - --popover-foreground: hsl(341, 20%, 22%); - --border: hsl(210, 40%, 80%); - --input: hsl(210, 40%, 56%); - --ring: hsl(210, 40%, 60%); - --radius: 1rem; -} - -/* General reset and base styles */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; - border-color: var(--border); -} - -body { - background-color: var(--background); - color: var(--foreground); - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; - line-height: 1.5; -} - -h1, h2, h3, h4, h5, h6 { - font-weight: 700; -} - -a { - color: var(--primary); - text-decoration: none; -} - -a:hover, a:focus { - text-decoration: underline; -} - -button { - border: none; - cursor: pointer; - font: inherit; - display: inline-flex; - align-items: center; - justify-content: center; - border-radius: var(--radius); -} - -.dashboard { - display: flex; - flex-direction: column; - min-height: 100vh; -} - -.dashboard-header, .dashboard-footer { - padding: 1rem 2rem; - background-color: var(--card); -} - -/* Navbar styles */ -.navbar { - display: flex; - align-items: center; - justify-content: space-between; - padding: 1rem; - background-color: var(--card); -} - -.navbar-left { - display: flex; - align-items: center; -} - -.navbar-left img.profile-image { - margin-right: 1rem; /* Adds space between the profile image and any adjacent elements */ -} - -.navbar-right { - display: flex; - align-items: center; - margin-left: auto; /* Pushes the navbar-right section to the far right */ -} - -.profile-image { - border-radius: 50%; - width: 40px; - height: 40px; -} - -.dashboard-main { - display: flex; - flex: 1; - padding: 2rem; -} - -.deployments-container { - flex: 1; - margin-right: 2rem; - background-color: var(--card); - padding: 1rem; - border-radius: var(--radius); -} - -.project-setup-container { - flex: 2; - background-color: var(--card); - padding: 1rem; - border-radius: var(--radius); -} - -.form-group { - margin-bottom: 1rem; -} - -.form-group label { - display: block; - margin-bottom: 0.5rem; - font-weight: 700; -} - -.form-group select, -.form-group input { - width: 100%; - padding: 0.5rem; - border: 1px solid var(--border); - border-radius: var(--radius); - font-size: 1rem; -} - -.btn { - padding: 0.75rem 1.5rem; - font-size: 1rem; - font-weight: 700; - transition: background-color 0.3s; -} - -.primary-btn { - background-color: var(--accent); - color: var(--accent-foreground); -} - -.primary-btn:hover { - background-color: var(--accent-foreground); - color: var(--accent); -} - -.secondary-btn { - background-color: var(--secondary); - color: var(--secondary-foreground); -} - -.secondary-btn:hover { - background-color: var(--secondary-foreground); - color: var(--secondary); -} - -.footer-text { - text-align: center; - font-size: 0.875rem; -} - From 2d43bc155fa7dfc3d5954e3d2cf52871ad00b182 Mon Sep 17 00:00:00 2001 From: akshat k Date: Fri, 4 Apr 2025 22:28:09 +0530 Subject: [PATCH 16/23] removed old db --- db/create.ts | 31 ---------------- db/main.ts | 94 ------------------------------------------------ db/operations.ts | 39 -------------------- 3 files changed, 164 deletions(-) delete mode 100644 db/create.ts delete mode 100644 db/main.ts delete mode 100644 db/operations.ts diff --git a/db/create.ts b/db/create.ts deleted file mode 100644 index 71e323f..0000000 --- a/db/create.ts +++ /dev/null @@ -1,31 +0,0 @@ -import database from './main'; - -export async function createDatabase() { - const dbName = process.env.PG_DATABASE; - const query = `CREATE DATABASE ${dbName};`; - - try { - await database.dbQuery(query); - console.log(`Database '${dbName}' created successfully.`); - } catch (error) { - console.error('Error creating database:', error); - } -} - -export async function createTableDeployments() { - try { - await database.dbQuery(` - CREATE TABLE IF NOT EXISTS deployments ( - project_name VARCHAR(255) NOT NULL, - id SERIAL PRIMARY KEY, - container_id VARCHAR(255) NOT NULL, - user_name VARCHAR(255) NOT NULL, - time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - status VARCHAR(255) NOT NULL - ); - `); - console.log("Table 'deployments' created or already exists."); - } catch (error) { - console.error('Error creating table:', error); - } -} diff --git a/db/main.ts b/db/main.ts deleted file mode 100644 index 1550082..0000000 --- a/db/main.ts +++ /dev/null @@ -1,94 +0,0 @@ -import pg from 'pg'; -import { createClient } from 'redis'; -import { createDatabase, createTableDeployments } from './create'; -require('dotenv').config(); - -class db { - private client: pg.Client; - private redisClient; - - constructor() { - // Initialize PostgreSQL client - this.client = new pg.Client({ - user: process.env.PG_USER, // Replace with your local username - host: process.env.PG_HOST, // Replace with your local host - database: process.env.PG_DATABASE, // Replace with your local database name - password: process.env.PG_PASSWORD, // Replace with your local password - port: 5432, // Default PostgreSQL port - }); - - // Connect to PostgreSQL - this.client - .connect() - .then(() => { - console.log('Connected to PostgreSQL database'); - }) - .catch((err) => { - console.error('Error connecting to PostgreSQL database:', err); - }); - - // Initialize Redis client - this.redisClient = createClient({ - url: process.env.REDIS_URL, - }); - - // Handle Redis connection errors - this.redisClient.on('error', (err) => { - console.error('Redis Client Error:', err); - }); - - // Connect to Redis - this.redisClient - .connect() - .then(() => { - console.log('Connected to Redis'); - }) - .catch((err) => { - console.error('Error connecting to Redis:', err); - }); - } - - // Method to execute a PostgreSQL query - async dbQuery(query: string, values?: any[]): Promise { - try { - // test remove before production - if (query == 'integeralex') { - return null; - } - const result = await this.client.query(query, values); - return result; - } catch (error) { - console.error('Database query error:', error); - throw error; - } - } - - async dbRedisSet(key: string, value: boolean): Promise { - try { - await this.redisClient.set(key, value.toString()); - console.log('Redis set reply: OK'); - } catch (error) { - console.error('Redis set error:', error); - throw error; - } - } - - // Method to get a boolean value from Redis - async dbRedisGet(key: string): Promise { - try { - const value = await this.redisClient.get(key); - if (value === null) { - console.log('Key not found'); - return null; - } - return value === 'true'; - } catch (error) { - console.error('Redis get error:', error); - throw error; - } - } -} - -const database = new db(); -export default database; -createTableDeployments(); diff --git a/db/operations.ts b/db/operations.ts deleted file mode 100644 index fb06758..0000000 --- a/db/operations.ts +++ /dev/null @@ -1,39 +0,0 @@ -import database from './main'; - -export async function getDeployments(userName: string) { - const query = 'SELECT * FROM deployments WHERE user_name = $1'; - const values = [userName]; - - try { - const result = await database.dbQuery(query, values); - return result.rows; - } catch (err) { - console.error('Error fetching deployments:', err); - throw err; - } -} -export async function postDeployment( - projectName: string, - userName: string, - containerId: string -) { - const query = ` - INSERT INTO deployments (project_name, user_name, container_id, status) - VALUES ($1, $2, $3, 'deployed'); - `; - - try { - // Use parameterized query to avoid SQL injection and syntax issues - await database.dbQuery(query, [projectName, userName, containerId]); - console.log('Deployment inserted successfully.'); - } catch (error) { - console.error('Error inserting deployment:', error); - throw error; // Re-throw the error to handle it in the calling function - } -} - -export async function deleteDeployment(userName: string, containerId: string) { - database.dbQuery( - `DELETE FROM deployments WHERE user_name = ${userName} AND container_id = ${containerId}` - ); -} From 427ae1bb076b865ad1b06407d931f1cbcdfe17fa Mon Sep 17 00:00:00 2001 From: Akshat Kotpalliwar <84370725+IntegerAlex@users.noreply.github.com> Date: Fri, 4 Apr 2025 22:36:21 +0530 Subject: [PATCH 17/23] Update frontend/index.ts Co-authored-by: codiumai-pr-agent-free[bot] <138128286+codiumai-pr-agent-free[bot]@users.noreply.github.com> --- frontend/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.ts b/frontend/index.ts index cd5849b..0591880 100644 --- a/frontend/index.ts +++ b/frontend/index.ts @@ -11,7 +11,7 @@ document.getElementById('loginForm')?.addEventListener('submit', async (e: Event const passKey = (document.getElementById('passKey') as HTMLInputElement).value; try { - const response = await fetch('/login', { + const response = await fetch('/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json', From aa231bb11a78d75c9b8fa38b77bad6c61a0b689d Mon Sep 17 00:00:00 2001 From: akshat k Date: Fri, 4 Apr 2025 23:33:19 +0530 Subject: [PATCH 18/23] Remove node_modules from the repository --- frontend/components/Dashboard.jsx | 147 + frontend/components/LoginForm.jsx | 51 + frontend/components/dashboard/dashboard.html | 35 - .../components/dashboard/deployments.html | 4 - frontend/components/login-form.html | 33 - frontend/dist/assets/index-BdP7FtLk.js | 60 + frontend/dist/assets/index-e_w_UV3K.css | 1 + frontend/dist/index.html | 13 + frontend/eslint.config.js | 33 + frontend/index.html | 27 +- frontend/index.js | 0 frontend/index.ts | 37 - frontend/package-lock.json | 2815 +++++++++++++++++ frontend/package.json | 28 + frontend/scripts/auth.js | 34 - frontend/scripts/dashboard.js | 35 - frontend/src/App.jsx | 18 + frontend/src/Navbar.jsx | 14 + frontend/src/index.jsx | 12 + frontend/style/base.css | 60 +- frontend/vite.config.js | 7 + 21 files changed, 3220 insertions(+), 244 deletions(-) create mode 100644 frontend/components/Dashboard.jsx create mode 100644 frontend/components/LoginForm.jsx delete mode 100644 frontend/components/dashboard/dashboard.html delete mode 100644 frontend/components/dashboard/deployments.html delete mode 100644 frontend/components/login-form.html create mode 100644 frontend/dist/assets/index-BdP7FtLk.js create mode 100644 frontend/dist/assets/index-e_w_UV3K.css create mode 100644 frontend/dist/index.html create mode 100644 frontend/eslint.config.js delete mode 100644 frontend/index.js delete mode 100644 frontend/index.ts create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json delete mode 100644 frontend/scripts/auth.js delete mode 100644 frontend/scripts/dashboard.js create mode 100644 frontend/src/App.jsx create mode 100644 frontend/src/Navbar.jsx create mode 100644 frontend/src/index.jsx create mode 100644 frontend/vite.config.js diff --git a/frontend/components/Dashboard.jsx b/frontend/components/Dashboard.jsx new file mode 100644 index 0000000..7441e82 --- /dev/null +++ b/frontend/components/Dashboard.jsx @@ -0,0 +1,147 @@ +import React, { useEffect, useState } from 'react'; +import Navbar from '../src/Navbar'; + +function Dashboard() { + const [deployments, setDeployments] = useState([]); + const [formData, setFormData] = useState({ + repoLink: '', + userName: '', + buildCommand: '', + runCommand: '', + entryPoint: '' + }); + const [responseMessage, setResponseMessage] = useState(''); + const [loading, setLoading] = useState(false); + + // Fetch deployments on component mount + useEffect(() => { + async function fetchDeployments() { + try { + const res = await fetch('/htmx/deployments'); + if (res.ok) { + const data = await res.json(); + setDeployments(data); + } + } catch (error) { + console.error('Error fetching deployments', error); + } + } + fetchDeployments(); + }, []); + + const handleFormChange = (e) => { + setFormData({ ...formData, [e.target.name]: e.target.value }); + }; + + const handleDeploySubmit = async (e) => { + e.preventDefault(); + setLoading(true); + setResponseMessage(''); + try { + const res = await fetch('/htmx/deploy', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(formData) + }); + const data = await res.json(); + setResponseMessage(data.message || 'Deployment triggered'); + } catch (error) { + setResponseMessage('Error deploying application'); + } finally { + setLoading(false); + } + }; + + return ( +

+ ); +} + +export default Dashboard; + diff --git a/frontend/components/LoginForm.jsx b/frontend/components/LoginForm.jsx new file mode 100644 index 0000000..d45dd74 --- /dev/null +++ b/frontend/components/LoginForm.jsx @@ -0,0 +1,51 @@ +import React, { useState } from 'react'; +import { useNavigate } from 'react-router-dom'; + +function LoginForm() { + const [passKey, setPassKey] = useState(''); + const [errorMessage, setErrorMessage] = useState(''); + const navigate = useNavigate(); + + const handleSubmit = async (e) => { + e.preventDefault(); + setErrorMessage(''); + try { + const response = await fetch('/auth/login', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ passKey }) + }); + + if (response.ok) { + const data = await response.json(); + sessionStorage.setItem('auth_token', data.token); + navigate('/dashboard'); + } else { + const errorData = await response.json(); + setErrorMessage(errorData.message || 'Invalid credentials'); + } + } catch (error) { + setErrorMessage('Connection error'); + } + }; + + return ( +
+

Login

+
+ setPassKey(e.target.value)} + placeholder="Enter Pass Key" + required + /> +
{errorMessage}
+ +
+
+ ); +} + +export default LoginForm; + diff --git a/frontend/components/dashboard/dashboard.html b/frontend/components/dashboard/dashboard.html deleted file mode 100644 index 1a43e25..0000000 --- a/frontend/components/dashboard/dashboard.html +++ /dev/null @@ -1,35 +0,0 @@ -
-
- -
-
-
- - -
- -
- - -
-
- - -
-
- - -
- -
-
-
Deploying...
-
-
- diff --git a/frontend/components/dashboard/deployments.html b/frontend/components/dashboard/deployments.html deleted file mode 100644 index c168de2..0000000 --- a/frontend/components/dashboard/deployments.html +++ /dev/null @@ -1,4 +0,0 @@ -
-

{deployment_name}

-

Status: {status}

-
diff --git a/frontend/components/login-form.html b/frontend/components/login-form.html deleted file mode 100644 index c634df1..0000000 --- a/frontend/components/login-form.html +++ /dev/null @@ -1,33 +0,0 @@ - diff --git a/frontend/dist/assets/index-BdP7FtLk.js b/frontend/dist/assets/index-BdP7FtLk.js new file mode 100644 index 0000000..5005312 --- /dev/null +++ b/frontend/dist/assets/index-BdP7FtLk.js @@ -0,0 +1,60 @@ +(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const h of document.querySelectorAll('link[rel="modulepreload"]'))r(h);new MutationObserver(h=>{for(const g of h)if(g.type==="childList")for(const z of g.addedNodes)z.tagName==="LINK"&&z.rel==="modulepreload"&&r(z)}).observe(document,{childList:!0,subtree:!0});function o(h){const g={};return h.integrity&&(g.integrity=h.integrity),h.referrerPolicy&&(g.referrerPolicy=h.referrerPolicy),h.crossOrigin==="use-credentials"?g.credentials="include":h.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function r(h){if(h.ep)return;h.ep=!0;const g=o(h);fetch(h.href,g)}})();function Vd(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var gf={exports:{}},zu={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Md;function xy(){if(Md)return zu;Md=1;var c=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function o(r,h,g){var z=null;if(g!==void 0&&(z=""+g),h.key!==void 0&&(z=""+h.key),"key"in h){g={};for(var O in h)O!=="key"&&(g[O]=h[O])}else g=h;return h=g.ref,{$$typeof:c,type:r,key:z,ref:h!==void 0?h:null,props:g}}return zu.Fragment=s,zu.jsx=o,zu.jsxs=o,zu}var _d;function Uy(){return _d||(_d=1,gf.exports=xy()),gf.exports}var I=Uy(),Sf={exports:{}},et={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var xd;function Ny(){if(xd)return et;xd=1;var c=Symbol.for("react.transitional.element"),s=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),g=Symbol.for("react.consumer"),z=Symbol.for("react.context"),O=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),R=Symbol.for("react.lazy"),B=Symbol.iterator;function N(y){return y===null||typeof y!="object"?null:(y=B&&y[B]||y["@@iterator"],typeof y=="function"?y:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},H=Object.assign,V={};function G(y,C,Q){this.props=y,this.context=C,this.refs=V,this.updater=Q||j}G.prototype.isReactComponent={},G.prototype.setState=function(y,C){if(typeof y!="object"&&typeof y!="function"&&y!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,y,C,"setState")},G.prototype.forceUpdate=function(y){this.updater.enqueueForceUpdate(this,y,"forceUpdate")};function q(){}q.prototype=G.prototype;function k(y,C,Q){this.props=y,this.context=C,this.refs=V,this.updater=Q||j}var X=k.prototype=new q;X.constructor=k,H(X,G.prototype),X.isPureReactComponent=!0;var ct=Array.isArray,P={H:null,A:null,T:null,S:null,V:null},xt=Object.prototype.hasOwnProperty;function Rt(y,C,Q,Y,K,ft){return Q=ft.ref,{$$typeof:c,type:y,key:C,ref:Q!==void 0?Q:null,props:ft}}function Dt(y,C){return Rt(y.type,C,void 0,void 0,void 0,y.props)}function pt(y){return typeof y=="object"&&y!==null&&y.$$typeof===c}function Jt(y){var C={"=":"=0",":":"=2"};return"$"+y.replace(/[=:]/g,function(Q){return C[Q]})}var oe=/\/+/g;function Qt(y,C){return typeof y=="object"&&y!==null&&y.key!=null?Jt(""+y.key):C.toString(36)}function bl(){}function El(y){switch(y.status){case"fulfilled":return y.value;case"rejected":throw y.reason;default:switch(typeof y.status=="string"?y.then(bl,bl):(y.status="pending",y.then(function(C){y.status==="pending"&&(y.status="fulfilled",y.value=C)},function(C){y.status==="pending"&&(y.status="rejected",y.reason=C)})),y.status){case"fulfilled":return y.value;case"rejected":throw y.reason}}throw y}function Zt(y,C,Q,Y,K){var ft=typeof y;(ft==="undefined"||ft==="boolean")&&(y=null);var tt=!1;if(y===null)tt=!0;else switch(ft){case"bigint":case"string":case"number":tt=!0;break;case"object":switch(y.$$typeof){case c:case s:tt=!0;break;case R:return tt=y._init,Zt(tt(y._payload),C,Q,Y,K)}}if(tt)return K=K(y),tt=Y===""?"."+Qt(y,0):Y,ct(K)?(Q="",tt!=null&&(Q=tt.replace(oe,"$&/")+"/"),Zt(K,C,Q,"",function(ke){return ke})):K!=null&&(pt(K)&&(K=Dt(K,Q+(K.key==null||y&&y.key===K.key?"":(""+K.key).replace(oe,"$&/")+"/")+tt)),C.push(K)),1;tt=0;var te=Y===""?".":Y+":";if(ct(y))for(var bt=0;bt>>1,y=M[vt];if(0>>1;vth(Y,W))Kh(ft,Y)?(M[vt]=ft,M[K]=W,vt=K):(M[vt]=Y,M[Q]=W,vt=Q);else if(Kh(ft,W))M[vt]=ft,M[K]=W,vt=K;else break t}}return L}function h(M,L){var W=M.sortIndex-L.sortIndex;return W!==0?W:M.id-L.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var g=performance;c.unstable_now=function(){return g.now()}}else{var z=Date,O=z.now();c.unstable_now=function(){return z.now()-O}}var p=[],m=[],R=1,B=null,N=3,j=!1,H=!1,V=!1,G=!1,q=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function ct(M){for(var L=o(m);L!==null;){if(L.callback===null)r(m);else if(L.startTime<=M)r(m),L.sortIndex=L.expirationTime,s(p,L);else break;L=o(m)}}function P(M){if(V=!1,ct(M),!H)if(o(p)!==null)H=!0,xt||(xt=!0,Qt());else{var L=o(m);L!==null&&Zt(P,L.startTime-M)}}var xt=!1,Rt=-1,Dt=5,pt=-1;function Jt(){return G?!0:!(c.unstable_now()-ptM&&Jt());){var vt=B.callback;if(typeof vt=="function"){B.callback=null,N=B.priorityLevel;var y=vt(B.expirationTime<=M);if(M=c.unstable_now(),typeof y=="function"){B.callback=y,ct(M),L=!0;break e}B===o(p)&&r(p),ct(M)}else r(p);B=o(p)}if(B!==null)L=!0;else{var C=o(m);C!==null&&Zt(P,C.startTime-M),L=!1}}break t}finally{B=null,N=W,j=!1}L=void 0}}finally{L?Qt():xt=!1}}}var Qt;if(typeof X=="function")Qt=function(){X(oe)};else if(typeof MessageChannel<"u"){var bl=new MessageChannel,El=bl.port2;bl.port1.onmessage=oe,Qt=function(){El.postMessage(null)}}else Qt=function(){q(oe,0)};function Zt(M,L){Rt=q(function(){M(c.unstable_now())},L)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(M){M.callback=null},c.unstable_forceFrameRate=function(M){0>M||125vt?(M.sortIndex=W,s(m,M),o(p)===null&&M===o(m)&&(V?(k(Rt),Rt=-1):V=!0,Zt(P,W-vt))):(M.sortIndex=y,s(p,M),H||j||(H=!0,xt||(xt=!0,Qt()))),M},c.unstable_shouldYield=Jt,c.unstable_wrapCallback=function(M){var L=N;return function(){var W=N;N=L;try{return M.apply(this,arguments)}finally{N=W}}}}(Ef)),Ef}var Cd;function By(){return Cd||(Cd=1,bf.exports=Hy()),bf.exports}var Tf={exports:{}},Kt={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Hd;function qy(){if(Hd)return Kt;Hd=1;var c=Mf();function s(p){var m="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(s){console.error(s)}}return c(),Tf.exports=qy(),Tf.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var qd;function jy(){if(qd)return Ou;qd=1;var c=By(),s=Mf(),o=Yy();function r(t){var e="https://react.dev/errors/"+t;if(1y||(t.current=vt[y],vt[y]=null,y--)}function Y(t,e){y++,vt[y]=t.current,t.current=e}var K=C(null),ft=C(null),tt=C(null),te=C(null);function bt(t,e){switch(Y(tt,e),Y(ft,t),Y(K,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?ld(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=ld(e),t=ad(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Q(K),Y(K,t)}function ke(){Q(K),Q(ft),Q(tt)}function ei(t){t.memoizedState!==null&&Y(te,t);var e=K.current,l=ad(e,t.type);e!==l&&(Y(ft,t),Y(K,l))}function Cu(t){ft.current===t&&(Q(K),Q(ft)),te.current===t&&(Q(te),bu._currentValue=W)}var li=Object.prototype.hasOwnProperty,ai=c.unstable_scheduleCallback,ui=c.unstable_cancelCallback,fh=c.unstable_shouldYield,rh=c.unstable_requestPaint,Ae=c.unstable_now,oh=c.unstable_getCurrentPriorityLevel,Bf=c.unstable_ImmediatePriority,qf=c.unstable_UserBlockingPriority,Hu=c.unstable_NormalPriority,sh=c.unstable_LowPriority,Yf=c.unstable_IdlePriority,dh=c.log,hh=c.unstable_setDisableYieldValue,Ma=null,ee=null;function We(t){if(typeof dh=="function"&&hh(t),ee&&typeof ee.setStrictMode=="function")try{ee.setStrictMode(Ma,t)}catch{}}var le=Math.clz32?Math.clz32:vh,mh=Math.log,yh=Math.LN2;function vh(t){return t>>>=0,t===0?32:31-(mh(t)/yh|0)|0}var Bu=256,qu=4194304;function Tl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Yu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var f=a&134217727;return f!==0?(a=f&~n,a!==0?u=Tl(a):(i&=f,i!==0?u=Tl(i):l||(l=f&~t,l!==0&&(u=Tl(l))))):(f=a&~n,f!==0?u=Tl(f):i!==0?u=Tl(i):l||(l=a&~t,l!==0&&(u=Tl(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function _a(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function gh(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function jf(){var t=Bu;return Bu<<=1,(Bu&4194048)===0&&(Bu=256),t}function Lf(){var t=qu;return qu<<=1,(qu&62914560)===0&&(qu=4194304),t}function ni(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function xa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Sh(t,e,l,a,u,n){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var f=t.entanglements,d=t.expirationTimes,E=t.hiddenUpdates;for(l=i&~l;0)":-1u||d[a]!==E[u]){var D=` +`+d[a].replace(" at new "," at ");return t.displayName&&D.includes("")&&(D=D.replace("",t.displayName)),D}while(1<=a&&0<=u);break}}}finally{si=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Kl(l):""}function Rh(t){switch(t.tag){case 26:case 27:case 5:return Kl(t.type);case 16:return Kl("Lazy");case 13:return Kl("Suspense");case 19:return Kl("SuspenseList");case 0:case 15:return di(t.type,!1);case 11:return di(t.type.render,!1);case 1:return di(t.type,!0);case 31:return Kl("Activity");default:return""}}function kf(t){try{var e="";do e+=Rh(t),t=t.return;while(t);return e}catch(l){return` +Error generating stack: `+l.message+` +`+l.stack}}function se(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Wf(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function zh(t){var e=Wf(t)?"checked":"value",l=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),a=""+t[e];if(!t.hasOwnProperty(e)&&typeof l<"u"&&typeof l.get=="function"&&typeof l.set=="function"){var u=l.get,n=l.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return u.call(this)},set:function(i){a=""+i,n.call(this,i)}}),Object.defineProperty(t,e,{enumerable:l.enumerable}),{getValue:function(){return a},setValue:function(i){a=""+i},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Gu(t){t._valueTracker||(t._valueTracker=zh(t))}function Ff(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var l=e.getValue(),a="";return t&&(a=Wf(t)?t.checked?"true":"false":t.value),t=a,t!==l?(e.setValue(t),!0):!1}function Xu(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Oh=/[\n"\\]/g;function de(t){return t.replace(Oh,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function hi(t,e,l,a,u,n,i,f){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),e!=null?i==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+se(e)):t.value!==""+se(e)&&(t.value=""+se(e)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),e!=null?mi(t,i,se(e)):l!=null?mi(t,i,se(l)):a!=null&&t.removeAttribute("value"),u==null&&n!=null&&(t.defaultChecked=!!n),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?t.name=""+se(f):t.removeAttribute("name")}function Pf(t,e,l,a,u,n,i,f){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(t.type=n),e!=null||l!=null){if(!(n!=="submit"&&n!=="reset"||e!=null))return;l=l!=null?""+se(l):"",e=e!=null?""+se(e):l,f||e===t.value||(t.value=e),t.defaultValue=e}a=a??u,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=f?t.checked:!!a,t.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i)}function mi(t,e,l){e==="number"&&Xu(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function Jl(t,e,l,a){if(t=t.options,e){e={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),pi=!1;if(Ne)try{var Ha={};Object.defineProperty(Ha,"passive",{get:function(){pi=!0}}),window.addEventListener("test",Ha,Ha),window.removeEventListener("test",Ha,Ha)}catch{pi=!1}var Pe=null,bi=null,Zu=null;function nr(){if(Zu)return Zu;var t,e=bi,l=e.length,a,u="value"in Pe?Pe.value:Pe.textContent,n=u.length;for(t=0;t=Ya),sr=" ",dr=!1;function hr(t,e){switch(t){case"keyup":return tm.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function mr(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Fl=!1;function lm(t,e){switch(t){case"compositionend":return mr(e);case"keypress":return e.which!==32?null:(dr=!0,sr);case"textInput":return t=e.data,t===sr&&dr?null:t;default:return null}}function am(t,e){if(Fl)return t==="compositionend"||!zi&&hr(t,e)?(t=nr(),Zu=bi=Pe=null,Fl=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=a}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=Tr(l)}}function Rr(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Rr(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function zr(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Xu(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=Xu(t.document)}return e}function Mi(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var sm=Ne&&"documentMode"in document&&11>=document.documentMode,Pl=null,_i=null,Xa=null,xi=!1;function Or(t,e,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;xi||Pl==null||Pl!==Xu(a)||(a=Pl,"selectionStart"in a&&Mi(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Xa&&Ga(Xa,a)||(Xa=a,a=Hn(_i,"onSelect"),0>=i,u-=i,He=1<<32-le(e)+u|l<n?n:8;var i=M.T,f={};M.T=f,yc(t,!1,e,l);try{var d=u(),E=M.S;if(E!==null&&E(f,d),d!==null&&typeof d=="object"&&typeof d.then=="function"){var D=bm(d,a);lu(t,e,D,fe(t))}else lu(t,e,a,fe(t))}catch(U){lu(t,e,{then:function(){},status:"rejected",reason:U},fe())}finally{L.p=n,M.T=i}}function zm(){}function hc(t,e,l,a){if(t.tag!==5)throw Error(r(476));var u=Mo(t).queue;Do(t,u,e,W,l===null?zm:function(){return _o(t),l(a)})}function Mo(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:W,baseState:W,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:W},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function _o(t){var e=Mo(t).next.queue;lu(t,e,{},fe())}function mc(){return wt(bu)}function xo(){return Nt().memoizedState}function Uo(){return Nt().memoizedState}function Om(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=fe();t=el(l);var a=ll(e,t,l);a!==null&&(re(a,e,l),Wa(a,e,l)),e={cache:Vi()},t.payload=e;return}e=e.return}}function Dm(t,e,l){var a=fe();l={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null},mn(t)?Co(e,l):(l=Hi(t,e,l,a),l!==null&&(re(l,t,a),Ho(l,e,a)))}function No(t,e,l){var a=fe();lu(t,e,l,a)}function lu(t,e,l,a){var u={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null};if(mn(t))Co(e,u);else{var n=t.alternate;if(t.lanes===0&&(n===null||n.lanes===0)&&(n=e.lastRenderedReducer,n!==null))try{var i=e.lastRenderedState,f=n(i,l);if(u.hasEagerState=!0,u.eagerState=f,ae(f,i))return Wu(t,e,u,0),St===null&&ku(),!1}catch{}finally{}if(l=Hi(t,e,u,a),l!==null)return re(l,t,a),Ho(l,e,a),!0}return!1}function yc(t,e,l,a){if(a={lane:2,revertLane:Jc(),action:a,hasEagerState:!1,eagerState:null,next:null},mn(t)){if(e)throw Error(r(479))}else e=Hi(t,l,a,2),e!==null&&re(e,t,2)}function mn(t){var e=t.alternate;return t===lt||e!==null&&e===lt}function Co(t,e){fa=fn=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function Ho(t,e,l){if((l&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,Xf(t,l)}}var yn={readContext:wt,use:on,useCallback:Mt,useContext:Mt,useEffect:Mt,useImperativeHandle:Mt,useLayoutEffect:Mt,useInsertionEffect:Mt,useMemo:Mt,useReducer:Mt,useRef:Mt,useState:Mt,useDebugValue:Mt,useDeferredValue:Mt,useTransition:Mt,useSyncExternalStore:Mt,useId:Mt,useHostTransitionStatus:Mt,useFormState:Mt,useActionState:Mt,useOptimistic:Mt,useMemoCache:Mt,useCacheRefresh:Mt},Bo={readContext:wt,use:on,useCallback:function(t,e){return Ft().memoizedState=[t,e===void 0?null:e],t},useContext:wt,useEffect:So,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,hn(4194308,4,To.bind(null,e,t),l)},useLayoutEffect:function(t,e){return hn(4194308,4,t,e)},useInsertionEffect:function(t,e){hn(4,2,t,e)},useMemo:function(t,e){var l=Ft();e=e===void 0?null:e;var a=t();if(Bl){We(!0);try{t()}finally{We(!1)}}return l.memoizedState=[a,e],a},useReducer:function(t,e,l){var a=Ft();if(l!==void 0){var u=l(e);if(Bl){We(!0);try{l(e)}finally{We(!1)}}}else u=e;return a.memoizedState=a.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},a.queue=t,t=t.dispatch=Dm.bind(null,lt,t),[a.memoizedState,t]},useRef:function(t){var e=Ft();return t={current:t},e.memoizedState=t},useState:function(t){t=rc(t);var e=t.queue,l=No.bind(null,lt,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:sc,useDeferredValue:function(t,e){var l=Ft();return dc(l,t,e)},useTransition:function(){var t=rc(!1);return t=Do.bind(null,lt,t.queue,!0,!1),Ft().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var a=lt,u=Ft();if(ot){if(l===void 0)throw Error(r(407));l=l()}else{if(l=e(),St===null)throw Error(r(349));(it&124)!==0||eo(a,e,l)}u.memoizedState=l;var n={value:l,getSnapshot:e};return u.queue=n,So(ao.bind(null,a,n,t),[t]),a.flags|=2048,oa(9,dn(),lo.bind(null,a,n,l,e),null),l},useId:function(){var t=Ft(),e=St.identifierPrefix;if(ot){var l=Be,a=He;l=(a&~(1<<32-le(a)-1)).toString(32)+l,e="«"+e+"R"+l,l=rn++,0$?(jt=w,w=null):jt=w.sibling;var rt=T(S,w,b[$],_);if(rt===null){w===null&&(w=jt);break}t&&w&&rt.alternate===null&&e(S,w),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt,w=jt}if($===b.length)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;$$?(jt=w,w=null):jt=w.sibling;var pl=T(S,w,rt.value,_);if(pl===null){w===null&&(w=jt);break}t&&w&&pl.alternate===null&&e(S,w),v=n(pl,v,$),at===null?Z=pl:at.sibling=pl,at=pl,w=jt}if(rt.done)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;!rt.done;$++,rt=b.next())rt=U(S,rt.value,_),rt!==null&&(v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return ot&&_l(S,$),Z}for(w=a(w);!rt.done;$++,rt=b.next())rt=A(w,S,$,rt.value,_),rt!==null&&(t&&rt.alternate!==null&&w.delete(rt.key===null?$:rt.key),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return t&&w.forEach(function(_y){return e(S,_y)}),ot&&_l(S,$),Z}function yt(S,v,b,_){if(typeof b=="object"&&b!==null&&b.type===H&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case N:t:{for(var Z=b.key;v!==null;){if(v.key===Z){if(Z=b.type,Z===H){if(v.tag===7){l(S,v.sibling),_=u(v,b.props.children),_.return=S,S=_;break t}}else if(v.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===Dt&&Yo(Z)===v.type){l(S,v.sibling),_=u(v,b.props),uu(_,b),_.return=S,S=_;break t}l(S,v);break}else e(S,v);v=v.sibling}b.type===H?(_=Dl(b.props.children,S.mode,_,b.key),_.return=S,S=_):(_=Pu(b.type,b.key,b.props,null,S.mode,_),uu(_,b),_.return=S,S=_)}return i(S);case j:t:{for(Z=b.key;v!==null;){if(v.key===Z)if(v.tag===4&&v.stateNode.containerInfo===b.containerInfo&&v.stateNode.implementation===b.implementation){l(S,v.sibling),_=u(v,b.children||[]),_.return=S,S=_;break t}else{l(S,v);break}else e(S,v);v=v.sibling}_=Yi(b,S.mode,_),_.return=S,S=_}return i(S);case Dt:return Z=b._init,b=Z(b._payload),yt(S,v,b,_)}if(Zt(b))return F(S,v,b,_);if(Qt(b)){if(Z=Qt(b),typeof Z!="function")throw Error(r(150));return b=Z.call(b),J(S,v,b,_)}if(typeof b.then=="function")return yt(S,v,vn(b),_);if(b.$$typeof===X)return yt(S,v,ln(S,b),_);gn(S,b)}return typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint"?(b=""+b,v!==null&&v.tag===6?(l(S,v.sibling),_=u(v,b),_.return=S,S=_):(l(S,v),_=qi(b,S.mode,_),_.return=S,S=_),i(S)):l(S,v)}return function(S,v,b,_){try{au=0;var Z=yt(S,v,b,_);return sa=null,Z}catch(w){if(w===$a||w===un)throw w;var at=ue(29,w,null,S.mode);return at.lanes=_,at.return=S,at}finally{}}}var da=jo(!0),Lo=jo(!1),ge=C(null),ze=null;function ul(t){var e=t.alternate;Y(Ht,Ht.current&1),Y(ge,t),ze===null&&(e===null||ca.current!==null||e.memoizedState!==null)&&(ze=t)}function Go(t){if(t.tag===22){if(Y(Ht,Ht.current),Y(ge,t),ze===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(ze=t)}}else nl()}function nl(){Y(Ht,Ht.current),Y(ge,ge.current)}function Le(t){Q(ge),ze===t&&(ze=null),Q(Ht)}var Ht=C(0);function Sn(t){for(var e=t;e!==null;){if(e.tag===13){var l=e.memoizedState;if(l!==null&&(l=l.dehydrated,l===null||l.data==="$?"||nf(l)))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if((e.flags&128)!==0)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}function vc(t,e,l,a){e=t.memoizedState,l=l(a,e),l=l==null?e:R({},e,l),t.memoizedState=l,t.lanes===0&&(t.updateQueue.baseState=l)}var gc={enqueueSetState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueReplaceState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.tag=1,u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueForceUpdate:function(t,e){t=t._reactInternals;var l=fe(),a=el(l);a.tag=2,e!=null&&(a.callback=e),e=ll(t,a,l),e!==null&&(re(e,t,l),Wa(e,t,l))}};function Xo(t,e,l,a,u,n,i){return t=t.stateNode,typeof t.shouldComponentUpdate=="function"?t.shouldComponentUpdate(a,n,i):e.prototype&&e.prototype.isPureReactComponent?!Ga(l,a)||!Ga(u,n):!0}function Qo(t,e,l,a){t=e.state,typeof e.componentWillReceiveProps=="function"&&e.componentWillReceiveProps(l,a),typeof e.UNSAFE_componentWillReceiveProps=="function"&&e.UNSAFE_componentWillReceiveProps(l,a),e.state!==t&&gc.enqueueReplaceState(e,e.state,null)}function ql(t,e){var l=e;if("ref"in e){l={};for(var a in e)a!=="ref"&&(l[a]=e[a])}if(t=t.defaultProps){l===e&&(l=R({},l));for(var u in t)l[u]===void 0&&(l[u]=t[u])}return l}var pn=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var e=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(e))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)};function Zo(t){pn(t)}function Vo(t){console.error(t)}function wo(t){pn(t)}function bn(t,e){try{var l=t.onUncaughtError;l(e.value,{componentStack:e.stack})}catch(a){setTimeout(function(){throw a})}}function Ko(t,e,l){try{var a=t.onCaughtError;a(l.value,{componentStack:l.stack,errorBoundary:e.tag===1?e.stateNode:null})}catch(u){setTimeout(function(){throw u})}}function Sc(t,e,l){return l=el(l),l.tag=3,l.payload={element:null},l.callback=function(){bn(t,e)},l}function Jo(t){return t=el(t),t.tag=3,t}function $o(t,e,l,a){var u=l.type.getDerivedStateFromError;if(typeof u=="function"){var n=a.value;t.payload=function(){return u(n)},t.callback=function(){Ko(e,l,a)}}var i=l.stateNode;i!==null&&typeof i.componentDidCatch=="function"&&(t.callback=function(){Ko(e,l,a),typeof u!="function"&&(sl===null?sl=new Set([this]):sl.add(this));var f=a.stack;this.componentDidCatch(a.value,{componentStack:f!==null?f:""})})}function _m(t,e,l,a,u){if(l.flags|=32768,a!==null&&typeof a=="object"&&typeof a.then=="function"){if(e=l.alternate,e!==null&&wa(e,l,u,!0),l=ge.current,l!==null){switch(l.tag){case 13:return ze===null?Qc():l.alternate===null&&Ot===0&&(Ot=3),l.flags&=-257,l.flags|=65536,l.lanes=u,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?l.updateQueue=new Set([a]):e.add(a),Vc(t,a,u)),!1;case 22:return l.flags|=65536,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?(e={transitions:null,markerInstances:null,retryQueue:new Set([a])},l.updateQueue=e):(l=e.retryQueue,l===null?e.retryQueue=new Set([a]):l.add(a)),Vc(t,a,u)),!1}throw Error(r(435,l.tag))}return Vc(t,a,u),Qc(),!1}if(ot)return e=ge.current,e!==null?((e.flags&65536)===0&&(e.flags|=256),e.flags|=65536,e.lanes=u,a!==Gi&&(t=Error(r(422),{cause:a}),Va(he(t,l)))):(a!==Gi&&(e=Error(r(423),{cause:a}),Va(he(e,l))),t=t.current.alternate,t.flags|=65536,u&=-u,t.lanes|=u,a=he(a,l),u=Sc(t.stateNode,a,u),Wi(t,u),Ot!==4&&(Ot=2)),!1;var n=Error(r(520),{cause:a});if(n=he(n,l),su===null?su=[n]:su.push(n),Ot!==4&&(Ot=2),e===null)return!0;a=he(a,l),l=e;do{switch(l.tag){case 3:return l.flags|=65536,t=u&-u,l.lanes|=t,t=Sc(l.stateNode,a,t),Wi(l,t),!1;case 1:if(e=l.type,n=l.stateNode,(l.flags&128)===0&&(typeof e.getDerivedStateFromError=="function"||n!==null&&typeof n.componentDidCatch=="function"&&(sl===null||!sl.has(n))))return l.flags|=65536,u&=-u,l.lanes|=u,u=Jo(u),$o(u,t,l,a),Wi(l,u),!1}l=l.return}while(l!==null);return!1}var ko=Error(r(461)),qt=!1;function Lt(t,e,l,a){e.child=t===null?Lo(e,null,l,a):da(e,t.child,l,a)}function Wo(t,e,l,a,u){l=l.render;var n=e.ref;if("ref"in a){var i={};for(var f in a)f!=="ref"&&(i[f]=a[f])}else i=a;return Cl(e),a=ec(t,e,l,i,n,u),f=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&f&&ji(e),e.flags|=1,Lt(t,e,a,u),e.child)}function Fo(t,e,l,a,u){if(t===null){var n=l.type;return typeof n=="function"&&!Bi(n)&&n.defaultProps===void 0&&l.compare===null?(e.tag=15,e.type=n,Po(t,e,n,a,u)):(t=Pu(l.type,null,a,e,e.mode,u),t.ref=e.ref,t.return=e,e.child=t)}if(n=t.child,!Oc(t,u)){var i=n.memoizedProps;if(l=l.compare,l=l!==null?l:Ga,l(i,a)&&t.ref===e.ref)return Ge(t,e,u)}return e.flags|=1,t=Ce(n,a),t.ref=e.ref,t.return=e,e.child=t}function Po(t,e,l,a,u){if(t!==null){var n=t.memoizedProps;if(Ga(n,a)&&t.ref===e.ref)if(qt=!1,e.pendingProps=a=n,Oc(t,u))(t.flags&131072)!==0&&(qt=!0);else return e.lanes=t.lanes,Ge(t,e,u)}return pc(t,e,l,a,u)}function Io(t,e,l){var a=e.pendingProps,u=a.children,n=t!==null?t.memoizedState:null;if(a.mode==="hidden"){if((e.flags&128)!==0){if(a=n!==null?n.baseLanes|l:l,t!==null){for(u=e.child=t.child,n=0;u!==null;)n=n|u.lanes|u.childLanes,u=u.sibling;e.childLanes=n&~a}else e.childLanes=0,e.child=null;return ts(t,e,a,l)}if((l&536870912)!==0)e.memoizedState={baseLanes:0,cachePool:null},t!==null&&an(e,n!==null?n.cachePool:null),n!==null?Fr(e,n):Pi(),Go(e);else return e.lanes=e.childLanes=536870912,ts(t,e,n!==null?n.baseLanes|l:l,l)}else n!==null?(an(e,n.cachePool),Fr(e,n),nl(),e.memoizedState=null):(t!==null&&an(e,null),Pi(),nl());return Lt(t,e,u,l),e.child}function ts(t,e,l,a){var u=Ki();return u=u===null?null:{parent:Ct._currentValue,pool:u},e.memoizedState={baseLanes:l,cachePool:u},t!==null&&an(e,null),Pi(),Go(e),t!==null&&wa(t,e,a,!0),null}function En(t,e){var l=e.ref;if(l===null)t!==null&&t.ref!==null&&(e.flags|=4194816);else{if(typeof l!="function"&&typeof l!="object")throw Error(r(284));(t===null||t.ref!==l)&&(e.flags|=4194816)}}function pc(t,e,l,a,u){return Cl(e),l=ec(t,e,l,a,void 0,u),a=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,u),e.child)}function es(t,e,l,a,u,n){return Cl(e),e.updateQueue=null,l=Ir(e,a,l,u),Pr(t),a=lc(),t!==null&&!qt?(ac(t,e,n),Ge(t,e,n)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,n),e.child)}function ls(t,e,l,a,u){if(Cl(e),e.stateNode===null){var n=la,i=l.contextType;typeof i=="object"&&i!==null&&(n=wt(i)),n=new l(a,n),e.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,n.updater=gc,e.stateNode=n,n._reactInternals=e,n=e.stateNode,n.props=a,n.state=e.memoizedState,n.refs={},$i(e),i=l.contextType,n.context=typeof i=="object"&&i!==null?wt(i):la,n.state=e.memoizedState,i=l.getDerivedStateFromProps,typeof i=="function"&&(vc(e,l,i,a),n.state=e.memoizedState),typeof l.getDerivedStateFromProps=="function"||typeof n.getSnapshotBeforeUpdate=="function"||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(i=n.state,typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount(),i!==n.state&&gc.enqueueReplaceState(n,n.state,null),Pa(e,a,n,u),Fa(),n.state=e.memoizedState),typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!0}else if(t===null){n=e.stateNode;var f=e.memoizedProps,d=ql(l,f);n.props=d;var E=n.context,D=l.contextType;i=la,typeof D=="object"&&D!==null&&(i=wt(D));var U=l.getDerivedStateFromProps;D=typeof U=="function"||typeof n.getSnapshotBeforeUpdate=="function",f=e.pendingProps!==f,D||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(f||E!==i)&&Qo(e,n,a,i),tl=!1;var T=e.memoizedState;n.state=T,Pa(e,a,n,u),Fa(),E=e.memoizedState,f||T!==E||tl?(typeof U=="function"&&(vc(e,l,U,a),E=e.memoizedState),(d=tl||Xo(e,l,d,a,T,E,i))?(D||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount()),typeof n.componentDidMount=="function"&&(e.flags|=4194308)):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),e.memoizedProps=a,e.memoizedState=E),n.props=a,n.state=E,n.context=i,a=d):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!1)}else{n=e.stateNode,ki(t,e),i=e.memoizedProps,D=ql(l,i),n.props=D,U=e.pendingProps,T=n.context,E=l.contextType,d=la,typeof E=="object"&&E!==null&&(d=wt(E)),f=l.getDerivedStateFromProps,(E=typeof f=="function"||typeof n.getSnapshotBeforeUpdate=="function")||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(i!==U||T!==d)&&Qo(e,n,a,d),tl=!1,T=e.memoizedState,n.state=T,Pa(e,a,n,u),Fa();var A=e.memoizedState;i!==U||T!==A||tl||t!==null&&t.dependencies!==null&&en(t.dependencies)?(typeof f=="function"&&(vc(e,l,f,a),A=e.memoizedState),(D=tl||Xo(e,l,D,a,T,A,d)||t!==null&&t.dependencies!==null&&en(t.dependencies))?(E||typeof n.UNSAFE_componentWillUpdate!="function"&&typeof n.componentWillUpdate!="function"||(typeof n.componentWillUpdate=="function"&&n.componentWillUpdate(a,A,d),typeof n.UNSAFE_componentWillUpdate=="function"&&n.UNSAFE_componentWillUpdate(a,A,d)),typeof n.componentDidUpdate=="function"&&(e.flags|=4),typeof n.getSnapshotBeforeUpdate=="function"&&(e.flags|=1024)):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),e.memoizedProps=a,e.memoizedState=A),n.props=a,n.state=A,n.context=d,a=D):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),a=!1)}return n=a,En(t,e),a=(e.flags&128)!==0,n||a?(n=e.stateNode,l=a&&typeof l.getDerivedStateFromError!="function"?null:n.render(),e.flags|=1,t!==null&&a?(e.child=da(e,t.child,null,u),e.child=da(e,null,l,u)):Lt(t,e,l,u),e.memoizedState=n.state,t=e.child):t=Ge(t,e,u),t}function as(t,e,l,a){return Za(),e.flags|=256,Lt(t,e,l,a),e.child}var bc={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Ec(t){return{baseLanes:t,cachePool:Zr()}}function Tc(t,e,l){return t=t!==null?t.childLanes&~l:0,e&&(t|=Se),t}function us(t,e,l){var a=e.pendingProps,u=!1,n=(e.flags&128)!==0,i;if((i=n)||(i=t!==null&&t.memoizedState===null?!1:(Ht.current&2)!==0),i&&(u=!0,e.flags&=-129),i=(e.flags&32)!==0,e.flags&=-33,t===null){if(ot){if(u?ul(e):nl(),ot){var f=zt,d;if(d=f){t:{for(d=f,f=Re;d.nodeType!==8;){if(!f){f=null;break t}if(d=Te(d.nextSibling),d===null){f=null;break t}}f=d}f!==null?(e.memoizedState={dehydrated:f,treeContext:Ml!==null?{id:He,overflow:Be}:null,retryLane:536870912,hydrationErrors:null},d=ue(18,null,null,0),d.stateNode=f,d.return=e,e.child=d,$t=e,zt=null,d=!0):d=!1}d||Ul(e)}if(f=e.memoizedState,f!==null&&(f=f.dehydrated,f!==null))return nf(f)?e.lanes=32:e.lanes=536870912,null;Le(e)}return f=a.children,a=a.fallback,u?(nl(),u=e.mode,f=Tn({mode:"hidden",children:f},u),a=Dl(a,u,l,null),f.return=e,a.return=e,f.sibling=a,e.child=f,u=e.child,u.memoizedState=Ec(l),u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),Ac(e,f))}if(d=t.memoizedState,d!==null&&(f=d.dehydrated,f!==null)){if(n)e.flags&256?(ul(e),e.flags&=-257,e=Rc(t,e,l)):e.memoizedState!==null?(nl(),e.child=t.child,e.flags|=128,e=null):(nl(),u=a.fallback,f=e.mode,a=Tn({mode:"visible",children:a.children},f),u=Dl(u,f,l,null),u.flags|=2,a.return=e,u.return=e,a.sibling=u,e.child=a,da(e,t.child,null,l),a=e.child,a.memoizedState=Ec(l),a.childLanes=Tc(t,i,l),e.memoizedState=bc,e=u);else if(ul(e),nf(f)){if(i=f.nextSibling&&f.nextSibling.dataset,i)var E=i.dgst;i=E,a=Error(r(419)),a.stack="",a.digest=i,Va({value:a,source:null,stack:null}),e=Rc(t,e,l)}else if(qt||wa(t,e,l,!1),i=(l&t.childLanes)!==0,qt||i){if(i=St,i!==null&&(a=l&-l,a=(a&42)!==0?1:ii(a),a=(a&(i.suspendedLanes|l))!==0?0:a,a!==0&&a!==d.retryLane))throw d.retryLane=a,ea(t,a),re(i,t,a),ko;f.data==="$?"||Qc(),e=Rc(t,e,l)}else f.data==="$?"?(e.flags|=192,e.child=t.child,e=null):(t=d.treeContext,zt=Te(f.nextSibling),$t=e,ot=!0,xl=null,Re=!1,t!==null&&(ye[ve++]=He,ye[ve++]=Be,ye[ve++]=Ml,He=t.id,Be=t.overflow,Ml=e),e=Ac(e,a.children),e.flags|=4096);return e}return u?(nl(),u=a.fallback,f=e.mode,d=t.child,E=d.sibling,a=Ce(d,{mode:"hidden",children:a.children}),a.subtreeFlags=d.subtreeFlags&65011712,E!==null?u=Ce(E,u):(u=Dl(u,f,l,null),u.flags|=2),u.return=e,a.return=e,a.sibling=u,e.child=a,a=u,u=e.child,f=t.child.memoizedState,f===null?f=Ec(l):(d=f.cachePool,d!==null?(E=Ct._currentValue,d=d.parent!==E?{parent:E,pool:E}:d):d=Zr(),f={baseLanes:f.baseLanes|l,cachePool:d}),u.memoizedState=f,u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),l=t.child,t=l.sibling,l=Ce(l,{mode:"visible",children:a.children}),l.return=e,l.sibling=null,t!==null&&(i=e.deletions,i===null?(e.deletions=[t],e.flags|=16):i.push(t)),e.child=l,e.memoizedState=null,l)}function Ac(t,e){return e=Tn({mode:"visible",children:e},t.mode),e.return=t,t.child=e}function Tn(t,e){return t=ue(22,t,null,e),t.lanes=0,t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},t}function Rc(t,e,l){return da(e,t.child,null,l),t=Ac(e,e.pendingProps.children),t.flags|=2,e.memoizedState=null,t}function ns(t,e,l){t.lanes|=e;var a=t.alternate;a!==null&&(a.lanes|=e),Qi(t.return,e,l)}function zc(t,e,l,a,u){var n=t.memoizedState;n===null?t.memoizedState={isBackwards:e,rendering:null,renderingStartTime:0,last:a,tail:l,tailMode:u}:(n.isBackwards=e,n.rendering=null,n.renderingStartTime=0,n.last=a,n.tail=l,n.tailMode=u)}function is(t,e,l){var a=e.pendingProps,u=a.revealOrder,n=a.tail;if(Lt(t,e,a.children,l),a=Ht.current,(a&2)!==0)a=a&1|2,e.flags|=128;else{if(t!==null&&(t.flags&128)!==0)t:for(t=e.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&ns(t,l,e);else if(t.tag===19)ns(t,l,e);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break t;for(;t.sibling===null;){if(t.return===null||t.return===e)break t;t=t.return}t.sibling.return=t.return,t=t.sibling}a&=1}switch(Y(Ht,a),u){case"forwards":for(l=e.child,u=null;l!==null;)t=l.alternate,t!==null&&Sn(t)===null&&(u=l),l=l.sibling;l=u,l===null?(u=e.child,e.child=null):(u=l.sibling,l.sibling=null),zc(e,!1,u,l,n);break;case"backwards":for(l=null,u=e.child,e.child=null;u!==null;){if(t=u.alternate,t!==null&&Sn(t)===null){e.child=u;break}t=u.sibling,u.sibling=l,l=u,u=t}zc(e,!0,l,null,n);break;case"together":zc(e,!1,null,null,void 0);break;default:e.memoizedState=null}return e.child}function Ge(t,e,l){if(t!==null&&(e.dependencies=t.dependencies),ol|=e.lanes,(l&e.childLanes)===0)if(t!==null){if(wa(t,e,l,!1),(l&e.childLanes)===0)return null}else return null;if(t!==null&&e.child!==t.child)throw Error(r(153));if(e.child!==null){for(t=e.child,l=Ce(t,t.pendingProps),e.child=l,l.return=e;t.sibling!==null;)t=t.sibling,l=l.sibling=Ce(t,t.pendingProps),l.return=e;l.sibling=null}return e.child}function Oc(t,e){return(t.lanes&e)!==0?!0:(t=t.dependencies,!!(t!==null&&en(t)))}function xm(t,e,l){switch(e.tag){case 3:bt(e,e.stateNode.containerInfo),Ie(e,Ct,t.memoizedState.cache),Za();break;case 27:case 5:ei(e);break;case 4:bt(e,e.stateNode.containerInfo);break;case 10:Ie(e,e.type,e.memoizedProps.value);break;case 13:var a=e.memoizedState;if(a!==null)return a.dehydrated!==null?(ul(e),e.flags|=128,null):(l&e.child.childLanes)!==0?us(t,e,l):(ul(e),t=Ge(t,e,l),t!==null?t.sibling:null);ul(e);break;case 19:var u=(t.flags&128)!==0;if(a=(l&e.childLanes)!==0,a||(wa(t,e,l,!1),a=(l&e.childLanes)!==0),u){if(a)return is(t,e,l);e.flags|=128}if(u=e.memoizedState,u!==null&&(u.rendering=null,u.tail=null,u.lastEffect=null),Y(Ht,Ht.current),a)break;return null;case 22:case 23:return e.lanes=0,Io(t,e,l);case 24:Ie(e,Ct,t.memoizedState.cache)}return Ge(t,e,l)}function cs(t,e,l){if(t!==null)if(t.memoizedProps!==e.pendingProps)qt=!0;else{if(!Oc(t,l)&&(e.flags&128)===0)return qt=!1,xm(t,e,l);qt=(t.flags&131072)!==0}else qt=!1,ot&&(e.flags&1048576)!==0&&qr(e,tn,e.index);switch(e.lanes=0,e.tag){case 16:t:{t=e.pendingProps;var a=e.elementType,u=a._init;if(a=u(a._payload),e.type=a,typeof a=="function")Bi(a)?(t=ql(a,t),e.tag=1,e=ls(null,e,a,t,l)):(e.tag=0,e=pc(null,e,a,t,l));else{if(a!=null){if(u=a.$$typeof,u===ct){e.tag=11,e=Wo(null,e,a,t,l);break t}else if(u===Rt){e.tag=14,e=Fo(null,e,a,t,l);break t}}throw e=El(a)||a,Error(r(306,e,""))}}return e;case 0:return pc(t,e,e.type,e.pendingProps,l);case 1:return a=e.type,u=ql(a,e.pendingProps),ls(t,e,a,u,l);case 3:t:{if(bt(e,e.stateNode.containerInfo),t===null)throw Error(r(387));a=e.pendingProps;var n=e.memoizedState;u=n.element,ki(t,e),Pa(e,a,null,l);var i=e.memoizedState;if(a=i.cache,Ie(e,Ct,a),a!==n.cache&&Zi(e,[Ct],l,!0),Fa(),a=i.element,n.isDehydrated)if(n={element:a,isDehydrated:!1,cache:i.cache},e.updateQueue.baseState=n,e.memoizedState=n,e.flags&256){e=as(t,e,a,l);break t}else if(a!==u){u=he(Error(r(424)),e),Va(u),e=as(t,e,a,l);break t}else{switch(t=e.stateNode.containerInfo,t.nodeType){case 9:t=t.body;break;default:t=t.nodeName==="HTML"?t.ownerDocument.body:t}for(zt=Te(t.firstChild),$t=e,ot=!0,xl=null,Re=!0,l=Lo(e,null,a,l),e.child=l;l;)l.flags=l.flags&-3|4096,l=l.sibling}else{if(Za(),a===u){e=Ge(t,e,l);break t}Lt(t,e,a,l)}e=e.child}return e;case 26:return En(t,e),t===null?(l=sd(e.type,null,e.pendingProps,null))?e.memoizedState=l:ot||(l=e.type,t=e.pendingProps,a=qn(tt.current).createElement(l),a[Vt]=e,a[kt]=t,Xt(a,l,t),Bt(a),e.stateNode=a):e.memoizedState=sd(e.type,t.memoizedProps,e.pendingProps,t.memoizedState),null;case 27:return ei(e),t===null&&ot&&(a=e.stateNode=fd(e.type,e.pendingProps,tt.current),$t=e,Re=!0,u=zt,ml(e.type)?(cf=u,zt=Te(a.firstChild)):zt=u),Lt(t,e,e.pendingProps.children,l),En(t,e),t===null&&(e.flags|=4194304),e.child;case 5:return t===null&&ot&&((u=a=zt)&&(a=uy(a,e.type,e.pendingProps,Re),a!==null?(e.stateNode=a,$t=e,zt=Te(a.firstChild),Re=!1,u=!0):u=!1),u||Ul(e)),ei(e),u=e.type,n=e.pendingProps,i=t!==null?t.memoizedProps:null,a=n.children,lf(u,n)?a=null:i!==null&&lf(u,i)&&(e.flags|=32),e.memoizedState!==null&&(u=ec(t,e,Tm,null,null,l),bu._currentValue=u),En(t,e),Lt(t,e,a,l),e.child;case 6:return t===null&&ot&&((t=l=zt)&&(l=ny(l,e.pendingProps,Re),l!==null?(e.stateNode=l,$t=e,zt=null,t=!0):t=!1),t||Ul(e)),null;case 13:return us(t,e,l);case 4:return bt(e,e.stateNode.containerInfo),a=e.pendingProps,t===null?e.child=da(e,null,a,l):Lt(t,e,a,l),e.child;case 11:return Wo(t,e,e.type,e.pendingProps,l);case 7:return Lt(t,e,e.pendingProps,l),e.child;case 8:return Lt(t,e,e.pendingProps.children,l),e.child;case 12:return Lt(t,e,e.pendingProps.children,l),e.child;case 10:return a=e.pendingProps,Ie(e,e.type,a.value),Lt(t,e,a.children,l),e.child;case 9:return u=e.type._context,a=e.pendingProps.children,Cl(e),u=wt(u),a=a(u),e.flags|=1,Lt(t,e,a,l),e.child;case 14:return Fo(t,e,e.type,e.pendingProps,l);case 15:return Po(t,e,e.type,e.pendingProps,l);case 19:return is(t,e,l);case 31:return a=e.pendingProps,l=e.mode,a={mode:a.mode,children:a.children},t===null?(l=Tn(a,l),l.ref=e.ref,e.child=l,l.return=e,e=l):(l=Ce(t.child,a),l.ref=e.ref,e.child=l,l.return=e,e=l),e;case 22:return Io(t,e,l);case 24:return Cl(e),a=wt(Ct),t===null?(u=Ki(),u===null&&(u=St,n=Vi(),u.pooledCache=n,n.refCount++,n!==null&&(u.pooledCacheLanes|=l),u=n),e.memoizedState={parent:a,cache:u},$i(e),Ie(e,Ct,u)):((t.lanes&l)!==0&&(ki(t,e),Pa(e,null,null,l),Fa()),u=t.memoizedState,n=e.memoizedState,u.parent!==a?(u={parent:a,cache:a},e.memoizedState=u,e.lanes===0&&(e.memoizedState=e.updateQueue.baseState=u),Ie(e,Ct,a)):(a=n.cache,Ie(e,Ct,a),a!==u.cache&&Zi(e,[Ct],l,!0))),Lt(t,e,e.pendingProps.children,l),e.child;case 29:throw e.pendingProps}throw Error(r(156,e.tag))}function Xe(t){t.flags|=4}function fs(t,e){if(e.type!=="stylesheet"||(e.state.loading&4)!==0)t.flags&=-16777217;else if(t.flags|=16777216,!vd(e)){if(e=ge.current,e!==null&&((it&4194048)===it?ze!==null:(it&62914560)!==it&&(it&536870912)===0||e!==ze))throw ka=Ji,Vr;t.flags|=8192}}function An(t,e){e!==null&&(t.flags|=4),t.flags&16384&&(e=t.tag!==22?Lf():536870912,t.lanes|=e,va|=e)}function nu(t,e){if(!ot)switch(t.tailMode){case"hidden":e=t.tail;for(var l=null;e!==null;)e.alternate!==null&&(l=e),e=e.sibling;l===null?t.tail=null:l.sibling=null;break;case"collapsed":l=t.tail;for(var a=null;l!==null;)l.alternate!==null&&(a=l),l=l.sibling;a===null?e||t.tail===null?t.tail=null:t.tail.sibling=null:a.sibling=null}}function Tt(t){var e=t.alternate!==null&&t.alternate.child===t.child,l=0,a=0;if(e)for(var u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags&65011712,a|=u.flags&65011712,u.return=t,u=u.sibling;else for(u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags,a|=u.flags,u.return=t,u=u.sibling;return t.subtreeFlags|=a,t.childLanes=l,e}function Um(t,e,l){var a=e.pendingProps;switch(Li(e),e.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Tt(e),null;case 1:return Tt(e),null;case 3:return l=e.stateNode,a=null,t!==null&&(a=t.memoizedState.cache),e.memoizedState.cache!==a&&(e.flags|=2048),Ye(Ct),ke(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(t===null||t.child===null)&&(Qa(e)?Xe(e):t===null||t.memoizedState.isDehydrated&&(e.flags&256)===0||(e.flags|=1024,Lr())),Tt(e),null;case 26:return l=e.memoizedState,t===null?(Xe(e),l!==null?(Tt(e),fs(e,l)):(Tt(e),e.flags&=-16777217)):l?l!==t.memoizedState?(Xe(e),Tt(e),fs(e,l)):(Tt(e),e.flags&=-16777217):(t.memoizedProps!==a&&Xe(e),Tt(e),e.flags&=-16777217),null;case 27:Cu(e),l=tt.current;var u=e.type;if(t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}t=K.current,Qa(e)?Yr(e):(t=fd(u,a,l),e.stateNode=t,Xe(e))}return Tt(e),null;case 5:if(Cu(e),l=e.type,t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}if(t=K.current,Qa(e))Yr(e);else{switch(u=qn(tt.current),t){case 1:t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case 2:t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;default:switch(l){case"svg":t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case"math":t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;case"script":t=u.createElement("div"),t.innerHTML=" + + + +
+ + + diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 0000000..ec2b712 --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,33 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' + +export default [ + { ignores: ['dist'] }, + { + files: ['**/*.{js,jsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...js.configs.recommended.rules, + ...reactHooks.configs.recommended.rules, + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +] diff --git a/frontend/index.html b/frontend/index.html index a21c8f1..40d78a6 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,20 +1,13 @@ - - - - SPA Application - - - - - -
- -
- -
-
- - + + + + + + +
+ + + diff --git a/frontend/index.js b/frontend/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/frontend/index.ts b/frontend/index.ts deleted file mode 100644 index 0591880..0000000 --- a/frontend/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -document.getElementById('loginForm')?.addEventListener('submit', async (e: Event) => { - e.preventDefault(); - const loginButton = document.getElementById('loginButton') as HTMLButtonElement; - const errorMessage = document.getElementById('errorMessage') as HTMLDivElement; - - // Reset UI state - errorMessage.style.display = 'none'; - loginButton.disabled = true; - loginButton.textContent = 'Logging in...'; - - const passKey = (document.getElementById('passKey') as HTMLInputElement).value; - - try { - const response = await fetch('/auth/login', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ passKey }), - credentials: 'same-origin' - }); - - if (response.ok) { - window.location.href = '/'; // Redirect to the dashboard - } else { - const data = await response.json(); - errorMessage.textContent = data.message || 'Invalid credentials'; - errorMessage.style.display = 'block'; - } - } catch (error) { - errorMessage.textContent = 'Connection error. Please try again.'; - errorMessage.style.display = 'block'; - } finally { - loginButton.disabled = false; - loginButton.textContent = 'Login'; - } -}); \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..9a39e4e --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,2815 @@ +{ + "name": "new", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "new", + "version": "0.0.0", + "dependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-router": "^7.4.1", + "react-router-dom": "^7.4.1" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "vite": "^6.2.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", + "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.13.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", + "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz", + "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz", + "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", + "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz", + "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz", + "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz", + "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz", + "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz", + "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz", + "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz", + "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz", + "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz", + "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz", + "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz", + "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", + "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", + "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz", + "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz", + "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz", + "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.0.tgz", + "integrity": "sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", + "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.0", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001710", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001710.tgz", + "integrity": "sha512-B5C0I0UmaGqHgo5FuqJ7hBd4L57A4dDD+Xi+XX1nXOoxGeDdY4Ko38qJYOyqznBVJEqON5p8P1x5zRR3+rsnxA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.132", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.132.tgz", + "integrity": "sha512-QgX9EBvWGmvSRa74zqfnG7+Eno0Ak0vftBll0Pt2/z5b3bEGYL6OUXLgKPtvx73dn3dvwrlyVkjPKRRlhLYTEg==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", + "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.4.1.tgz", + "integrity": "sha512-Vmizn9ZNzxfh3cumddqv3kLOKvc7AskUT0dC1prTabhiEi0U4A33LmkDOJ79tXaeSqCqMBXBU/ySX88W85+EUg==", + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.4.1.tgz", + "integrity": "sha512-L3/4tig0Lvs6m6THK0HRV4eHUdpx0dlJasgCxXKnavwhh4tKYgpuZk75HRYNoRKDyDWi9QgzGXsQ1oQSBlWpAA==", + "license": "MIT", + "dependencies": { + "react-router": "7.4.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", + "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.39.0", + "@rollup/rollup-android-arm64": "4.39.0", + "@rollup/rollup-darwin-arm64": "4.39.0", + "@rollup/rollup-darwin-x64": "4.39.0", + "@rollup/rollup-freebsd-arm64": "4.39.0", + "@rollup/rollup-freebsd-x64": "4.39.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", + "@rollup/rollup-linux-arm-musleabihf": "4.39.0", + "@rollup/rollup-linux-arm64-gnu": "4.39.0", + "@rollup/rollup-linux-arm64-musl": "4.39.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", + "@rollup/rollup-linux-riscv64-gnu": "4.39.0", + "@rollup/rollup-linux-riscv64-musl": "4.39.0", + "@rollup/rollup-linux-s390x-gnu": "4.39.0", + "@rollup/rollup-linux-x64-gnu": "4.39.0", + "@rollup/rollup-linux-x64-musl": "4.39.0", + "@rollup/rollup-win32-arm64-msvc": "4.39.0", + "@rollup/rollup-win32-ia32-msvc": "4.39.0", + "@rollup/rollup-win32-x64-msvc": "4.39.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", + "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@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": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..cde92b6 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,28 @@ +{ + "name": "new", + "private": true, + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-router": "^7.4.1", + "react-router-dom": "^7.4.1" + }, + "devDependencies": { + "@eslint/js": "^9.21.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.21.0", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "vite": "^6.2.0" + } +} diff --git a/frontend/scripts/auth.js b/frontend/scripts/auth.js deleted file mode 100644 index c894edc..0000000 --- a/frontend/scripts/auth.js +++ /dev/null @@ -1,34 +0,0 @@ -export function checkAuth() { - const token = sessionStorage.getItem('auth_token'); - const contentDiv = document.getElementById('content'); - - if (!token) { - // Load login form if not authenticated - htmx.ajax('GET', '/components/login-form.html', { target: '#content' }); - } else { - // Load dashboard if authenticated - htmx.ajax('GET', '/components/dashboard/dashboard.html', { target: '#content' }); - } -} - -// Initialize the app -htmx.onLoad(() => { - checkAuth(); - - // Handle navigation - document.body.addEventListener('click', (e) => { - if (e.target.matches('[data-route]')) { - e.preventDefault(); - const route = e.target.getAttribute('data-route'); - htmx.ajax('GET', `/components/${route}.html`, { target: '#content' }); - } - }); - - // Prevent infinite loops by ensuring only one request is made - document.body.addEventListener('htmx:beforeRequest', (e) => { - const currentTarget = e.detail.elt; - if (currentTarget.closest('#content')) { - currentTarget.removeAttribute('hx-get'); - } - }); -}); diff --git a/frontend/scripts/dashboard.js b/frontend/scripts/dashboard.js deleted file mode 100644 index ff65548..0000000 --- a/frontend/scripts/dashboard.js +++ /dev/null @@ -1,35 +0,0 @@ -export function initializeDashboard() { - // Fetch user profile - fetch('/htmx/v1/profile') - .then(response => response.json()) - .then(data => { - document.getElementById('userName').value = data.nickname; - - // Fetch repositories - return fetch(`/htmx/v1/repositories?user_id=${data.nickname}`); - }) - .then(response => response.json()) - .then(repoData => { - const repoSelect = document.getElementById('repoLink'); - repoSelect.innerHTML = ''; - - repoData.repositories.forEach(repo => { - const option = document.createElement('option'); - option.value = repo.url; - option.textContent = repo.name; - repoSelect.appendChild(option); - }); - }) - .catch(error => console.error('Error:', error)); - - // HTMX event listeners for loading state - document.getElementById('project-setup-form') - .addEventListener('htmx:beforeRequest', () => { - document.getElementById('loading-message').style.display = 'block'; - }); - - document.getElementById('project-setup-form') - .addEventListener('htmx:afterRequest', () => { - document.getElementById('loading-message').style.display = 'none'; - }); -} diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx new file mode 100644 index 0000000..3f118c4 --- /dev/null +++ b/frontend/src/App.jsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; +import LoginForm from '../components/LoginForm'; +import Dashboard from '../components/Dashboard'; + +function App() { + return ( + + + } /> + } /> + + + ); +} + +export default App; + diff --git a/frontend/src/Navbar.jsx b/frontend/src/Navbar.jsx new file mode 100644 index 0000000..dd73d25 --- /dev/null +++ b/frontend/src/Navbar.jsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; + +function Navbar() { + return ( + + ); +} + +export default Navbar; + diff --git a/frontend/src/index.jsx b/frontend/src/index.jsx new file mode 100644 index 0000000..9baadbc --- /dev/null +++ b/frontend/src/index.jsx @@ -0,0 +1,12 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import '../style/base.css'; // Optionally import your CSS here (or base.css) + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + +); + diff --git a/frontend/style/base.css b/frontend/style/base.css index 53e8d3b..352a9eb 100644 --- a/frontend/style/base.css +++ b/frontend/style/base.css @@ -1,57 +1,19 @@ -body { - font-family: Arial, sans-serif; - margin: 0; - padding: 0; - box-sizing: border-box; -} - -.navbar { - display: flex; - justify-content: space-between; - padding: 1rem; - background: #f8f9fa; - border-bottom: 1px solid #ddd; -} +/* base.css */ -.dashboard-main { - display: flex; - padding: 20px; - gap: 20px; -} - -.deployments-container { - flex: 1; - padding-right: 20px; - border-right: 1px solid #ddd; -} - -.project-setup-container { - flex: 2; - padding-left: 20px; -} - -.form-group { - margin-bottom: 15px; +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; } -.btn { - padding: 8px 16px; - border: none; - border-radius: 4px; - cursor: pointer; +.login-container, +.dashboard { + padding: 20px; } -.primary-btn { - background: #4CAF50; - color: white; +.error { + color: red; } -.secondary-btn { - background: #f44336; - color: white; -} +/* Additional styles for navbar, forms, deployments, etc. */ -.loading { - color: #ff9800; - font-size: 1.2em; -} diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..8b0f57b --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From ddfd2ece5461d9f1a6ac0683c3e7263b9ff71f2f Mon Sep 17 00:00:00 2001 From: akshat k Date: Fri, 4 Apr 2025 23:35:03 +0530 Subject: [PATCH 19/23] endpoint fix and react is the go --- frontend/.gitignore | 1 + src/htmx/htmx.controller.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 frontend/.gitignore diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/src/htmx/htmx.controller.ts b/src/htmx/htmx.controller.ts index 9d209ca..17cae4a 100644 --- a/src/htmx/htmx.controller.ts +++ b/src/htmx/htmx.controller.ts @@ -75,7 +75,7 @@ export class HtmxController { } @Get('v1/repositories') async getRepositories(@Res() res: Response) { - fetch(`https://api.github.com/${this.nickname}/repos`, { + fetch(`https://api.github.com/users/${this.nickname}/repos`, { method: 'GET'}) .then((response) => response.json()) .then((data: any) => { From 0b4fe575f9f63154714c8b7f90c1f1fcf9fa3eb8 Mon Sep 17 00:00:00 2001 From: akshat k Date: Sat, 5 Apr 2025 00:07:40 +0530 Subject: [PATCH 20/23] React works fine as i am dumb --- README.md | 99 ---------- eslint.config.mjs | 4 +- frontend/components/Dashboard.jsx | 174 ++++-------------- frontend/components/DeploymentForm.jsx | 32 ++++ frontend/components/DeploymentList.jsx | 20 ++ .../{index-BdP7FtLk.js => index-CGI3YR-4.js} | 24 +-- frontend/dist/assets/index-DQXFXOnt.css | 1 + frontend/dist/assets/index-e_w_UV3K.css | 1 - frontend/dist/index.html | 4 +- frontend/style/base.css | 147 ++++++++++++++- package.json | 2 +- src/app.module.ts | 5 +- src/config/config.module.ts | 5 +- src/container/container.controller.ts | 4 +- src/container/container.service.ts | 29 ++- src/deployment/deployment.entity.ts | 2 +- src/deployment/deployment.service.ts | 2 +- src/htmx/htmx.controller.ts | 155 ++++++++++------ src/htmx/htmx.service.ts | 14 +- src/subdomain/subdomain.controller.ts | 10 +- src/subdomain/subdomain.service.ts | 24 ++- src/utils/container.util.ts | 4 +- src/utils/server.util.ts | 24 ++- 23 files changed, 437 insertions(+), 349 deletions(-) create mode 100644 frontend/components/DeploymentForm.jsx create mode 100644 frontend/components/DeploymentList.jsx rename frontend/dist/assets/{index-BdP7FtLk.js => index-CGI3YR-4.js} (64%) create mode 100644 frontend/dist/assets/index-DQXFXOnt.css delete mode 100644 frontend/dist/assets/index-e_w_UV3K.css diff --git a/README.md b/README.md index 3577bff..483d82a 100644 --- a/README.md +++ b/README.md @@ -119,102 +119,3 @@ This program is free software: you can redistribute it and/or modify it under th --- Made with ❤️ by Akshat Kotpalliwar (alias IntegerAlex on GitHub) -``` -======= -
- -[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 -[circleci-url]: https://circleci.com/gh/nestjs/nest - -

A progressive Node.js framework for building efficient and scalable server-side applications.

-

-NPM Version -Package License -NPM Downloads -CircleCI -Discord -Backers on Open Collective -Sponsors on Open Collective - Donate us - Support us - Follow us on Twitter -

- - -## Description - -[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. - -## Project setup - -```bash -$ npm install -``` - -## Compile and run the project - -```bash -# development -$ npm run start - -# watch mode -$ npm run start:dev - -# production mode -$ npm run start:prod -``` - -## Run tests - -```bash -# unit tests -$ npm run test - -# e2e tests -$ npm run test:e2e - -# test coverage -$ npm run test:cov -``` - -## Deployment - -When you're ready to deploy your NestJS application to production, there are some key steps you can take to ensure it runs as efficiently as possible. Check out the [deployment documentation](https://docs.nestjs.com/deployment) for more information. - -If you are looking for a cloud-based platform to deploy your NestJS application, check out [Mau](https://mau.nestjs.com), our official platform for deploying NestJS applications on AWS. Mau makes deployment straightforward and fast, requiring just a few simple steps: - -```bash -$ npm install -g mau -$ mau deploy -``` - -With Mau, you can deploy your application in just a few clicks, allowing you to focus on building features rather than managing infrastructure. - -## Resources - -Check out a few resources that may come in handy when working with NestJS: - -- Visit the [NestJS Documentation](https://docs.nestjs.com) to learn more about the framework. -- For questions and support, please visit our [Discord channel](https://discord.gg/G7Qnnhy). -- To dive deeper and get more hands-on experience, check out our official video [courses](https://courses.nestjs.com/). -- Deploy your application to AWS with the help of [NestJS Mau](https://mau.nestjs.com) in just a few clicks. -- Visualize your application graph and interact with the NestJS application in real-time using [NestJS Devtools](https://devtools.nestjs.com). -- Need help with your project (part-time to full-time)? Check out our official [enterprise support](https://enterprise.nestjs.com). -- To stay in the loop and get updates, follow us on [X](https://x.com/nestframework) and [LinkedIn](https://linkedin.com/company/nestjs). -- Looking for a job, or have a job to offer? Check out our official [Jobs board](https://jobs.nestjs.com). - -## Support - -Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). - -## Stay in touch - -- Author - [Kamil Myśliwiec](https://twitter.com/kammysliwiec) -- Website - [https://nestjs.com](https://nestjs.com/) -- Twitter - [@nestframework](https://twitter.com/nestframework) - -## License - diff --git a/eslint.config.mjs b/eslint.config.mjs index 32465cc..0cdee2e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -17,7 +17,7 @@ export default tseslint.config( ...globals.node, ...globals.jest, }, - ecmaVersion: 5, + ecmaVersion: 2020, sourceType: 'module', parserOptions: { projectService: true, @@ -32,4 +32,4 @@ export default tseslint.config( '@typescript-eslint/no-unsafe-argument': 'warn' }, }, -); \ No newline at end of file +); diff --git a/frontend/components/Dashboard.jsx b/frontend/components/Dashboard.jsx index 7441e82..9be6558 100644 --- a/frontend/components/Dashboard.jsx +++ b/frontend/components/Dashboard.jsx @@ -1,147 +1,41 @@ -import React, { useEffect, useState } from 'react'; -import Navbar from '../src/Navbar'; +import React, { useState } from "react"; +import DeploymentList from "./DeploymentList"; +import DeploymentForm from "./DeploymentForm"; -function Dashboard() { - const [deployments, setDeployments] = useState([]); - const [formData, setFormData] = useState({ - repoLink: '', - userName: '', - buildCommand: '', - runCommand: '', - entryPoint: '' - }); - const [responseMessage, setResponseMessage] = useState(''); - const [loading, setLoading] = useState(false); +const Dashboard = () => { + const [showDeployFormOnly, setShowDeployFormOnly] = useState(false); - // Fetch deployments on component mount - useEffect(() => { - async function fetchDeployments() { - try { - const res = await fetch('/htmx/deployments'); - if (res.ok) { - const data = await res.json(); - setDeployments(data); - } - } catch (error) { - console.error('Error fetching deployments', error); - } - } - fetchDeployments(); - }, []); - - const handleFormChange = (e) => { - setFormData({ ...formData, [e.target.name]: e.target.value }); - }; - - const handleDeploySubmit = async (e) => { - e.preventDefault(); - setLoading(true); - setResponseMessage(''); - try { - const res = await fetch('/htmx/deploy', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(formData) - }); - const data = await res.json(); - setResponseMessage(data.message || 'Deployment triggered'); - } catch (error) { - setResponseMessage('Error deploying application'); - } finally { - setLoading(false); - } - }; - - return ( -
-
- -
-
- -
-
-
- - -
- -
- - + return ( +
+
+
-
- - -
-
- - -
- - -
{responseMessage}
- {loading && ( -
- Deploying... + +
+ {!showDeployFormOnly && ( + + )} +
+ +
- )} -
-
-
- ); -} + + ); +}; export default Dashboard; diff --git a/frontend/components/DeploymentForm.jsx b/frontend/components/DeploymentForm.jsx new file mode 100644 index 0000000..6da5dde --- /dev/null +++ b/frontend/components/DeploymentForm.jsx @@ -0,0 +1,32 @@ +import React from "react"; + +const DeploymentForm = () => { + return ( +
+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+ +
+
+ ); +}; + +export default DeploymentForm; + diff --git a/frontend/components/DeploymentList.jsx b/frontend/components/DeploymentList.jsx new file mode 100644 index 0000000..08a962d --- /dev/null +++ b/frontend/components/DeploymentList.jsx @@ -0,0 +1,20 @@ +import React from "react"; + +const DeploymentList = () => { + return ( +
+ {/* Replace with dynamic fetch/render logic */} +
+

My App

+

Status: Running

+
+
+

Test Site

+

Status: Building

+
+
+ ); +}; + +export default DeploymentList; + diff --git a/frontend/dist/assets/index-BdP7FtLk.js b/frontend/dist/assets/index-CGI3YR-4.js similarity index 64% rename from frontend/dist/assets/index-BdP7FtLk.js rename to frontend/dist/assets/index-CGI3YR-4.js index 5005312..dfe65ac 100644 --- a/frontend/dist/assets/index-BdP7FtLk.js +++ b/frontend/dist/assets/index-CGI3YR-4.js @@ -1,4 +1,4 @@ -(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const h of document.querySelectorAll('link[rel="modulepreload"]'))r(h);new MutationObserver(h=>{for(const g of h)if(g.type==="childList")for(const z of g.addedNodes)z.tagName==="LINK"&&z.rel==="modulepreload"&&r(z)}).observe(document,{childList:!0,subtree:!0});function o(h){const g={};return h.integrity&&(g.integrity=h.integrity),h.referrerPolicy&&(g.referrerPolicy=h.referrerPolicy),h.crossOrigin==="use-credentials"?g.credentials="include":h.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function r(h){if(h.ep)return;h.ep=!0;const g=o(h);fetch(h.href,g)}})();function Vd(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var gf={exports:{}},zu={};/** +(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const h of document.querySelectorAll('link[rel="modulepreload"]'))r(h);new MutationObserver(h=>{for(const g of h)if(g.type==="childList")for(const R of g.addedNodes)R.tagName==="LINK"&&R.rel==="modulepreload"&&r(R)}).observe(document,{childList:!0,subtree:!0});function s(h){const g={};return h.integrity&&(g.integrity=h.integrity),h.referrerPolicy&&(g.referrerPolicy=h.referrerPolicy),h.crossOrigin==="use-credentials"?g.credentials="include":h.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function r(h){if(h.ep)return;h.ep=!0;const g=s(h);fetch(h.href,g)}})();function Zd(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var gf={exports:{}},zu={};/** * @license React * react-jsx-runtime.production.js * @@ -6,7 +6,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Md;function xy(){if(Md)return zu;Md=1;var c=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function o(r,h,g){var z=null;if(g!==void 0&&(z=""+g),h.key!==void 0&&(z=""+h.key),"key"in h){g={};for(var O in h)O!=="key"&&(g[O]=h[O])}else g=h;return h=g.ref,{$$typeof:c,type:r,key:z,ref:h!==void 0?h:null,props:g}}return zu.Fragment=s,zu.jsx=o,zu.jsxs=o,zu}var _d;function Uy(){return _d||(_d=1,gf.exports=xy()),gf.exports}var I=Uy(),Sf={exports:{}},et={};/** + */var Dd;function xy(){if(Dd)return zu;Dd=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function s(r,h,g){var R=null;if(g!==void 0&&(R=""+g),h.key!==void 0&&(R=""+h.key),"key"in h){g={};for(var O in h)O!=="key"&&(g[O]=h[O])}else g=h;return h=g.ref,{$$typeof:c,type:r,key:R,ref:h!==void 0?h:null,props:g}}return zu.Fragment=o,zu.jsx=s,zu.jsxs=s,zu}var Md;function Uy(){return Md||(Md=1,gf.exports=xy()),gf.exports}var I=Uy(),Sf={exports:{}},et={};/** * @license React * react.production.js * @@ -14,7 +14,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var xd;function Ny(){if(xd)return et;xd=1;var c=Symbol.for("react.transitional.element"),s=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),g=Symbol.for("react.consumer"),z=Symbol.for("react.context"),O=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),R=Symbol.for("react.lazy"),B=Symbol.iterator;function N(y){return y===null||typeof y!="object"?null:(y=B&&y[B]||y["@@iterator"],typeof y=="function"?y:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},H=Object.assign,V={};function G(y,C,Q){this.props=y,this.context=C,this.refs=V,this.updater=Q||j}G.prototype.isReactComponent={},G.prototype.setState=function(y,C){if(typeof y!="object"&&typeof y!="function"&&y!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,y,C,"setState")},G.prototype.forceUpdate=function(y){this.updater.enqueueForceUpdate(this,y,"forceUpdate")};function q(){}q.prototype=G.prototype;function k(y,C,Q){this.props=y,this.context=C,this.refs=V,this.updater=Q||j}var X=k.prototype=new q;X.constructor=k,H(X,G.prototype),X.isPureReactComponent=!0;var ct=Array.isArray,P={H:null,A:null,T:null,S:null,V:null},xt=Object.prototype.hasOwnProperty;function Rt(y,C,Q,Y,K,ft){return Q=ft.ref,{$$typeof:c,type:y,key:C,ref:Q!==void 0?Q:null,props:ft}}function Dt(y,C){return Rt(y.type,C,void 0,void 0,void 0,y.props)}function pt(y){return typeof y=="object"&&y!==null&&y.$$typeof===c}function Jt(y){var C={"=":"=0",":":"=2"};return"$"+y.replace(/[=:]/g,function(Q){return C[Q]})}var oe=/\/+/g;function Qt(y,C){return typeof y=="object"&&y!==null&&y.key!=null?Jt(""+y.key):C.toString(36)}function bl(){}function El(y){switch(y.status){case"fulfilled":return y.value;case"rejected":throw y.reason;default:switch(typeof y.status=="string"?y.then(bl,bl):(y.status="pending",y.then(function(C){y.status==="pending"&&(y.status="fulfilled",y.value=C)},function(C){y.status==="pending"&&(y.status="rejected",y.reason=C)})),y.status){case"fulfilled":return y.value;case"rejected":throw y.reason}}throw y}function Zt(y,C,Q,Y,K){var ft=typeof y;(ft==="undefined"||ft==="boolean")&&(y=null);var tt=!1;if(y===null)tt=!0;else switch(ft){case"bigint":case"string":case"number":tt=!0;break;case"object":switch(y.$$typeof){case c:case s:tt=!0;break;case R:return tt=y._init,Zt(tt(y._payload),C,Q,Y,K)}}if(tt)return K=K(y),tt=Y===""?"."+Qt(y,0):Y,ct(K)?(Q="",tt!=null&&(Q=tt.replace(oe,"$&/")+"/"),Zt(K,C,Q,"",function(ke){return ke})):K!=null&&(pt(K)&&(K=Dt(K,Q+(K.key==null||y&&y.key===K.key?"":(""+K.key).replace(oe,"$&/")+"/")+tt)),C.push(K)),1;tt=0;var te=Y===""?".":Y+":";if(ct(y))for(var bt=0;bt>>1,y=M[vt];if(0>>1;vth(Y,W))Kh(ft,Y)?(M[vt]=ft,M[K]=W,vt=K):(M[vt]=Y,M[Q]=W,vt=Q);else if(Kh(ft,W))M[vt]=ft,M[K]=W,vt=K;else break t}}return L}function h(M,L){var W=M.sortIndex-L.sortIndex;return W!==0?W:M.id-L.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var g=performance;c.unstable_now=function(){return g.now()}}else{var z=Date,O=z.now();c.unstable_now=function(){return z.now()-O}}var p=[],m=[],R=1,B=null,N=3,j=!1,H=!1,V=!1,G=!1,q=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function ct(M){for(var L=o(m);L!==null;){if(L.callback===null)r(m);else if(L.startTime<=M)r(m),L.sortIndex=L.expirationTime,s(p,L);else break;L=o(m)}}function P(M){if(V=!1,ct(M),!H)if(o(p)!==null)H=!0,xt||(xt=!0,Qt());else{var L=o(m);L!==null&&Zt(P,L.startTime-M)}}var xt=!1,Rt=-1,Dt=5,pt=-1;function Jt(){return G?!0:!(c.unstable_now()-ptM&&Jt());){var vt=B.callback;if(typeof vt=="function"){B.callback=null,N=B.priorityLevel;var y=vt(B.expirationTime<=M);if(M=c.unstable_now(),typeof y=="function"){B.callback=y,ct(M),L=!0;break e}B===o(p)&&r(p),ct(M)}else r(p);B=o(p)}if(B!==null)L=!0;else{var C=o(m);C!==null&&Zt(P,C.startTime-M),L=!1}}break t}finally{B=null,N=W,j=!1}L=void 0}}finally{L?Qt():xt=!1}}}var Qt;if(typeof X=="function")Qt=function(){X(oe)};else if(typeof MessageChannel<"u"){var bl=new MessageChannel,El=bl.port2;bl.port1.onmessage=oe,Qt=function(){El.postMessage(null)}}else Qt=function(){q(oe,0)};function Zt(M,L){Rt=q(function(){M(c.unstable_now())},L)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(M){M.callback=null},c.unstable_forceFrameRate=function(M){0>M||125vt?(M.sortIndex=W,s(m,M),o(p)===null&&M===o(m)&&(V?(k(Rt),Rt=-1):V=!0,Zt(P,W-vt))):(M.sortIndex=y,s(p,M),H||j||(H=!0,xt||(xt=!0,Qt()))),M},c.unstable_shouldYield=Jt,c.unstable_wrapCallback=function(M){var L=N;return function(){var W=N;N=L;try{return M.apply(this,arguments)}finally{N=W}}}}(Ef)),Ef}var Cd;function By(){return Cd||(Cd=1,bf.exports=Hy()),bf.exports}var Tf={exports:{}},Kt={};/** + */var Ud;function Cy(){return Ud||(Ud=1,function(c){function o(M,L){var W=M.length;M.push(L);t:for(;0>>1,y=M[vt];if(0>>1;vth(Y,W))Kh(ft,Y)?(M[vt]=ft,M[K]=W,vt=K):(M[vt]=Y,M[Q]=W,vt=Q);else if(Kh(ft,W))M[vt]=ft,M[K]=W,vt=K;else break t}}return L}function h(M,L){var W=M.sortIndex-L.sortIndex;return W!==0?W:M.id-L.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var g=performance;c.unstable_now=function(){return g.now()}}else{var R=Date,O=R.now();c.unstable_now=function(){return R.now()-O}}var p=[],m=[],z=1,B=null,H=3,j=!1,C=!1,V=!1,G=!1,q=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function ct(M){for(var L=s(m);L!==null;){if(L.callback===null)r(m);else if(L.startTime<=M)r(m),L.sortIndex=L.expirationTime,o(p,L);else break;L=s(m)}}function P(M){if(V=!1,ct(M),!C)if(s(p)!==null)C=!0,xt||(xt=!0,Qt());else{var L=s(m);L!==null&&Zt(P,L.startTime-M)}}var xt=!1,Rt=-1,Dt=5,pt=-1;function Jt(){return G?!0:!(c.unstable_now()-ptM&&Jt());){var vt=B.callback;if(typeof vt=="function"){B.callback=null,H=B.priorityLevel;var y=vt(B.expirationTime<=M);if(M=c.unstable_now(),typeof y=="function"){B.callback=y,ct(M),L=!0;break e}B===s(p)&&r(p),ct(M)}else r(p);B=s(p)}if(B!==null)L=!0;else{var N=s(m);N!==null&&Zt(P,N.startTime-M),L=!1}}break t}finally{B=null,H=W,j=!1}L=void 0}}finally{L?Qt():xt=!1}}}var Qt;if(typeof X=="function")Qt=function(){X(oe)};else if(typeof MessageChannel<"u"){var bl=new MessageChannel,El=bl.port2;bl.port1.onmessage=oe,Qt=function(){El.postMessage(null)}}else Qt=function(){q(oe,0)};function Zt(M,L){Rt=q(function(){M(c.unstable_now())},L)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(M){M.callback=null},c.unstable_forceFrameRate=function(M){0>M||125vt?(M.sortIndex=W,o(m,M),s(p)===null&&M===s(m)&&(V?(k(Rt),Rt=-1):V=!0,Zt(P,W-vt))):(M.sortIndex=y,o(p,M),C||j||(C=!0,xt||(xt=!0,Qt()))),M},c.unstable_shouldYield=Jt,c.unstable_wrapCallback=function(M){var L=H;return function(){var W=H;H=L;try{return M.apply(this,arguments)}finally{H=W}}}}(Ef)),Ef}var Nd;function By(){return Nd||(Nd=1,bf.exports=Cy()),bf.exports}var Tf={exports:{}},Kt={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Hd;function qy(){if(Hd)return Kt;Hd=1;var c=Mf();function s(p){var m="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(s){console.error(s)}}return c(),Tf.exports=qy(),Tf.exports}/** + */var Hd;function qy(){if(Hd)return Kt;Hd=1;var c=Mf();function o(p){var m="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(o){console.error(o)}}return c(),Tf.exports=qy(),Tf.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var qd;function jy(){if(qd)return Ou;qd=1;var c=By(),s=Mf(),o=Yy();function r(t){var e="https://react.dev/errors/"+t;if(1y||(t.current=vt[y],vt[y]=null,y--)}function Y(t,e){y++,vt[y]=t.current,t.current=e}var K=C(null),ft=C(null),tt=C(null),te=C(null);function bt(t,e){switch(Y(tt,e),Y(ft,t),Y(K,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?ld(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=ld(e),t=ad(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Q(K),Y(K,t)}function ke(){Q(K),Q(ft),Q(tt)}function ei(t){t.memoizedState!==null&&Y(te,t);var e=K.current,l=ad(e,t.type);e!==l&&(Y(ft,t),Y(K,l))}function Cu(t){ft.current===t&&(Q(K),Q(ft)),te.current===t&&(Q(te),bu._currentValue=W)}var li=Object.prototype.hasOwnProperty,ai=c.unstable_scheduleCallback,ui=c.unstable_cancelCallback,fh=c.unstable_shouldYield,rh=c.unstable_requestPaint,Ae=c.unstable_now,oh=c.unstable_getCurrentPriorityLevel,Bf=c.unstable_ImmediatePriority,qf=c.unstable_UserBlockingPriority,Hu=c.unstable_NormalPriority,sh=c.unstable_LowPriority,Yf=c.unstable_IdlePriority,dh=c.log,hh=c.unstable_setDisableYieldValue,Ma=null,ee=null;function We(t){if(typeof dh=="function"&&hh(t),ee&&typeof ee.setStrictMode=="function")try{ee.setStrictMode(Ma,t)}catch{}}var le=Math.clz32?Math.clz32:vh,mh=Math.log,yh=Math.LN2;function vh(t){return t>>>=0,t===0?32:31-(mh(t)/yh|0)|0}var Bu=256,qu=4194304;function Tl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Yu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var f=a&134217727;return f!==0?(a=f&~n,a!==0?u=Tl(a):(i&=f,i!==0?u=Tl(i):l||(l=f&~t,l!==0&&(u=Tl(l))))):(f=a&~n,f!==0?u=Tl(f):i!==0?u=Tl(i):l||(l=a&~t,l!==0&&(u=Tl(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function _a(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function gh(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function jf(){var t=Bu;return Bu<<=1,(Bu&4194048)===0&&(Bu=256),t}function Lf(){var t=qu;return qu<<=1,(qu&62914560)===0&&(qu=4194304),t}function ni(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function xa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Sh(t,e,l,a,u,n){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var f=t.entanglements,d=t.expirationTimes,E=t.hiddenUpdates;for(l=i&~l;0y||(t.current=vt[y],vt[y]=null,y--)}function Y(t,e){y++,vt[y]=t.current,t.current=e}var K=N(null),ft=N(null),tt=N(null),te=N(null);function bt(t,e){switch(Y(tt,e),Y(ft,t),Y(K,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?ed(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=ed(e),t=ld(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Q(K),Y(K,t)}function ke(){Q(K),Q(ft),Q(tt)}function ei(t){t.memoizedState!==null&&Y(te,t);var e=K.current,l=ld(e,t.type);e!==l&&(Y(ft,t),Y(K,l))}function Hu(t){ft.current===t&&(Q(K),Q(ft)),te.current===t&&(Q(te),bu._currentValue=W)}var li=Object.prototype.hasOwnProperty,ai=c.unstable_scheduleCallback,ui=c.unstable_cancelCallback,fh=c.unstable_shouldYield,rh=c.unstable_requestPaint,Ae=c.unstable_now,oh=c.unstable_getCurrentPriorityLevel,Cf=c.unstable_ImmediatePriority,Bf=c.unstable_UserBlockingPriority,Cu=c.unstable_NormalPriority,sh=c.unstable_LowPriority,qf=c.unstable_IdlePriority,dh=c.log,hh=c.unstable_setDisableYieldValue,Ma=null,ee=null;function We(t){if(typeof dh=="function"&&hh(t),ee&&typeof ee.setStrictMode=="function")try{ee.setStrictMode(Ma,t)}catch{}}var le=Math.clz32?Math.clz32:vh,mh=Math.log,yh=Math.LN2;function vh(t){return t>>>=0,t===0?32:31-(mh(t)/yh|0)|0}var Bu=256,qu=4194304;function Tl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Yu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var f=a&134217727;return f!==0?(a=f&~n,a!==0?u=Tl(a):(i&=f,i!==0?u=Tl(i):l||(l=f&~t,l!==0&&(u=Tl(l))))):(f=a&~n,f!==0?u=Tl(f):i!==0?u=Tl(i):l||(l=a&~t,l!==0&&(u=Tl(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function _a(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function gh(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Yf(){var t=Bu;return Bu<<=1,(Bu&4194048)===0&&(Bu=256),t}function jf(){var t=qu;return qu<<=1,(qu&62914560)===0&&(qu=4194304),t}function ni(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function xa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Sh(t,e,l,a,u,n){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var f=t.entanglements,d=t.expirationTimes,E=t.hiddenUpdates;for(l=i&~l;0)":-1u||d[a]!==E[u]){var D=` -`+d[a].replace(" at new "," at ");return t.displayName&&D.includes("")&&(D=D.replace("",t.displayName)),D}while(1<=a&&0<=u);break}}}finally{si=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Kl(l):""}function Rh(t){switch(t.tag){case 26:case 27:case 5:return Kl(t.type);case 16:return Kl("Lazy");case 13:return Kl("Suspense");case 19:return Kl("SuspenseList");case 0:case 15:return di(t.type,!1);case 11:return di(t.type.render,!1);case 1:return di(t.type,!0);case 31:return Kl("Activity");default:return""}}function kf(t){try{var e="";do e+=Rh(t),t=t.return;while(t);return e}catch(l){return` +`+d[a].replace(" at new "," at ");return t.displayName&&D.includes("")&&(D=D.replace("",t.displayName)),D}while(1<=a&&0<=u);break}}}finally{si=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Kl(l):""}function Rh(t){switch(t.tag){case 26:case 27:case 5:return Kl(t.type);case 16:return Kl("Lazy");case 13:return Kl("Suspense");case 19:return Kl("SuspenseList");case 0:case 15:return di(t.type,!1);case 11:return di(t.type.render,!1);case 1:return di(t.type,!0);case 31:return Kl("Activity");default:return""}}function $f(t){try{var e="";do e+=Rh(t),t=t.return;while(t);return e}catch(l){return` Error generating stack: `+l.message+` -`+l.stack}}function se(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Wf(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function zh(t){var e=Wf(t)?"checked":"value",l=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),a=""+t[e];if(!t.hasOwnProperty(e)&&typeof l<"u"&&typeof l.get=="function"&&typeof l.set=="function"){var u=l.get,n=l.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return u.call(this)},set:function(i){a=""+i,n.call(this,i)}}),Object.defineProperty(t,e,{enumerable:l.enumerable}),{getValue:function(){return a},setValue:function(i){a=""+i},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Gu(t){t._valueTracker||(t._valueTracker=zh(t))}function Ff(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var l=e.getValue(),a="";return t&&(a=Wf(t)?t.checked?"true":"false":t.value),t=a,t!==l?(e.setValue(t),!0):!1}function Xu(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Oh=/[\n"\\]/g;function de(t){return t.replace(Oh,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function hi(t,e,l,a,u,n,i,f){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),e!=null?i==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+se(e)):t.value!==""+se(e)&&(t.value=""+se(e)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),e!=null?mi(t,i,se(e)):l!=null?mi(t,i,se(l)):a!=null&&t.removeAttribute("value"),u==null&&n!=null&&(t.defaultChecked=!!n),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?t.name=""+se(f):t.removeAttribute("name")}function Pf(t,e,l,a,u,n,i,f){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(t.type=n),e!=null||l!=null){if(!(n!=="submit"&&n!=="reset"||e!=null))return;l=l!=null?""+se(l):"",e=e!=null?""+se(e):l,f||e===t.value||(t.value=e),t.defaultValue=e}a=a??u,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=f?t.checked:!!a,t.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i)}function mi(t,e,l){e==="number"&&Xu(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function Jl(t,e,l,a){if(t=t.options,e){e={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),pi=!1;if(Ne)try{var Ha={};Object.defineProperty(Ha,"passive",{get:function(){pi=!0}}),window.addEventListener("test",Ha,Ha),window.removeEventListener("test",Ha,Ha)}catch{pi=!1}var Pe=null,bi=null,Zu=null;function nr(){if(Zu)return Zu;var t,e=bi,l=e.length,a,u="value"in Pe?Pe.value:Pe.textContent,n=u.length;for(t=0;t=Ya),sr=" ",dr=!1;function hr(t,e){switch(t){case"keyup":return tm.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function mr(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Fl=!1;function lm(t,e){switch(t){case"compositionend":return mr(e);case"keypress":return e.which!==32?null:(dr=!0,sr);case"textInput":return t=e.data,t===sr&&dr?null:t;default:return null}}function am(t,e){if(Fl)return t==="compositionend"||!zi&&hr(t,e)?(t=nr(),Zu=bi=Pe=null,Fl=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=a}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=Tr(l)}}function Rr(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Rr(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function zr(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Xu(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=Xu(t.document)}return e}function Mi(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var sm=Ne&&"documentMode"in document&&11>=document.documentMode,Pl=null,_i=null,Xa=null,xi=!1;function Or(t,e,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;xi||Pl==null||Pl!==Xu(a)||(a=Pl,"selectionStart"in a&&Mi(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Xa&&Ga(Xa,a)||(Xa=a,a=Hn(_i,"onSelect"),0>=i,u-=i,He=1<<32-le(e)+u|l<n?n:8;var i=M.T,f={};M.T=f,yc(t,!1,e,l);try{var d=u(),E=M.S;if(E!==null&&E(f,d),d!==null&&typeof d=="object"&&typeof d.then=="function"){var D=bm(d,a);lu(t,e,D,fe(t))}else lu(t,e,a,fe(t))}catch(U){lu(t,e,{then:function(){},status:"rejected",reason:U},fe())}finally{L.p=n,M.T=i}}function zm(){}function hc(t,e,l,a){if(t.tag!==5)throw Error(r(476));var u=Mo(t).queue;Do(t,u,e,W,l===null?zm:function(){return _o(t),l(a)})}function Mo(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:W,baseState:W,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:W},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function _o(t){var e=Mo(t).next.queue;lu(t,e,{},fe())}function mc(){return wt(bu)}function xo(){return Nt().memoizedState}function Uo(){return Nt().memoizedState}function Om(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=fe();t=el(l);var a=ll(e,t,l);a!==null&&(re(a,e,l),Wa(a,e,l)),e={cache:Vi()},t.payload=e;return}e=e.return}}function Dm(t,e,l){var a=fe();l={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null},mn(t)?Co(e,l):(l=Hi(t,e,l,a),l!==null&&(re(l,t,a),Ho(l,e,a)))}function No(t,e,l){var a=fe();lu(t,e,l,a)}function lu(t,e,l,a){var u={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null};if(mn(t))Co(e,u);else{var n=t.alternate;if(t.lanes===0&&(n===null||n.lanes===0)&&(n=e.lastRenderedReducer,n!==null))try{var i=e.lastRenderedState,f=n(i,l);if(u.hasEagerState=!0,u.eagerState=f,ae(f,i))return Wu(t,e,u,0),St===null&&ku(),!1}catch{}finally{}if(l=Hi(t,e,u,a),l!==null)return re(l,t,a),Ho(l,e,a),!0}return!1}function yc(t,e,l,a){if(a={lane:2,revertLane:Jc(),action:a,hasEagerState:!1,eagerState:null,next:null},mn(t)){if(e)throw Error(r(479))}else e=Hi(t,l,a,2),e!==null&&re(e,t,2)}function mn(t){var e=t.alternate;return t===lt||e!==null&&e===lt}function Co(t,e){fa=fn=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function Ho(t,e,l){if((l&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,Xf(t,l)}}var yn={readContext:wt,use:on,useCallback:Mt,useContext:Mt,useEffect:Mt,useImperativeHandle:Mt,useLayoutEffect:Mt,useInsertionEffect:Mt,useMemo:Mt,useReducer:Mt,useRef:Mt,useState:Mt,useDebugValue:Mt,useDeferredValue:Mt,useTransition:Mt,useSyncExternalStore:Mt,useId:Mt,useHostTransitionStatus:Mt,useFormState:Mt,useActionState:Mt,useOptimistic:Mt,useMemoCache:Mt,useCacheRefresh:Mt},Bo={readContext:wt,use:on,useCallback:function(t,e){return Ft().memoizedState=[t,e===void 0?null:e],t},useContext:wt,useEffect:So,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,hn(4194308,4,To.bind(null,e,t),l)},useLayoutEffect:function(t,e){return hn(4194308,4,t,e)},useInsertionEffect:function(t,e){hn(4,2,t,e)},useMemo:function(t,e){var l=Ft();e=e===void 0?null:e;var a=t();if(Bl){We(!0);try{t()}finally{We(!1)}}return l.memoizedState=[a,e],a},useReducer:function(t,e,l){var a=Ft();if(l!==void 0){var u=l(e);if(Bl){We(!0);try{l(e)}finally{We(!1)}}}else u=e;return a.memoizedState=a.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},a.queue=t,t=t.dispatch=Dm.bind(null,lt,t),[a.memoizedState,t]},useRef:function(t){var e=Ft();return t={current:t},e.memoizedState=t},useState:function(t){t=rc(t);var e=t.queue,l=No.bind(null,lt,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:sc,useDeferredValue:function(t,e){var l=Ft();return dc(l,t,e)},useTransition:function(){var t=rc(!1);return t=Do.bind(null,lt,t.queue,!0,!1),Ft().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var a=lt,u=Ft();if(ot){if(l===void 0)throw Error(r(407));l=l()}else{if(l=e(),St===null)throw Error(r(349));(it&124)!==0||eo(a,e,l)}u.memoizedState=l;var n={value:l,getSnapshot:e};return u.queue=n,So(ao.bind(null,a,n,t),[t]),a.flags|=2048,oa(9,dn(),lo.bind(null,a,n,l,e),null),l},useId:function(){var t=Ft(),e=St.identifierPrefix;if(ot){var l=Be,a=He;l=(a&~(1<<32-le(a)-1)).toString(32)+l,e="«"+e+"R"+l,l=rn++,0$?(jt=w,w=null):jt=w.sibling;var rt=T(S,w,b[$],_);if(rt===null){w===null&&(w=jt);break}t&&w&&rt.alternate===null&&e(S,w),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt,w=jt}if($===b.length)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;$$?(jt=w,w=null):jt=w.sibling;var pl=T(S,w,rt.value,_);if(pl===null){w===null&&(w=jt);break}t&&w&&pl.alternate===null&&e(S,w),v=n(pl,v,$),at===null?Z=pl:at.sibling=pl,at=pl,w=jt}if(rt.done)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;!rt.done;$++,rt=b.next())rt=U(S,rt.value,_),rt!==null&&(v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return ot&&_l(S,$),Z}for(w=a(w);!rt.done;$++,rt=b.next())rt=A(w,S,$,rt.value,_),rt!==null&&(t&&rt.alternate!==null&&w.delete(rt.key===null?$:rt.key),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return t&&w.forEach(function(_y){return e(S,_y)}),ot&&_l(S,$),Z}function yt(S,v,b,_){if(typeof b=="object"&&b!==null&&b.type===H&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case N:t:{for(var Z=b.key;v!==null;){if(v.key===Z){if(Z=b.type,Z===H){if(v.tag===7){l(S,v.sibling),_=u(v,b.props.children),_.return=S,S=_;break t}}else if(v.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===Dt&&Yo(Z)===v.type){l(S,v.sibling),_=u(v,b.props),uu(_,b),_.return=S,S=_;break t}l(S,v);break}else e(S,v);v=v.sibling}b.type===H?(_=Dl(b.props.children,S.mode,_,b.key),_.return=S,S=_):(_=Pu(b.type,b.key,b.props,null,S.mode,_),uu(_,b),_.return=S,S=_)}return i(S);case j:t:{for(Z=b.key;v!==null;){if(v.key===Z)if(v.tag===4&&v.stateNode.containerInfo===b.containerInfo&&v.stateNode.implementation===b.implementation){l(S,v.sibling),_=u(v,b.children||[]),_.return=S,S=_;break t}else{l(S,v);break}else e(S,v);v=v.sibling}_=Yi(b,S.mode,_),_.return=S,S=_}return i(S);case Dt:return Z=b._init,b=Z(b._payload),yt(S,v,b,_)}if(Zt(b))return F(S,v,b,_);if(Qt(b)){if(Z=Qt(b),typeof Z!="function")throw Error(r(150));return b=Z.call(b),J(S,v,b,_)}if(typeof b.then=="function")return yt(S,v,vn(b),_);if(b.$$typeof===X)return yt(S,v,ln(S,b),_);gn(S,b)}return typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint"?(b=""+b,v!==null&&v.tag===6?(l(S,v.sibling),_=u(v,b),_.return=S,S=_):(l(S,v),_=qi(b,S.mode,_),_.return=S,S=_),i(S)):l(S,v)}return function(S,v,b,_){try{au=0;var Z=yt(S,v,b,_);return sa=null,Z}catch(w){if(w===$a||w===un)throw w;var at=ue(29,w,null,S.mode);return at.lanes=_,at.return=S,at}finally{}}}var da=jo(!0),Lo=jo(!1),ge=C(null),ze=null;function ul(t){var e=t.alternate;Y(Ht,Ht.current&1),Y(ge,t),ze===null&&(e===null||ca.current!==null||e.memoizedState!==null)&&(ze=t)}function Go(t){if(t.tag===22){if(Y(Ht,Ht.current),Y(ge,t),ze===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(ze=t)}}else nl()}function nl(){Y(Ht,Ht.current),Y(ge,ge.current)}function Le(t){Q(ge),ze===t&&(ze=null),Q(Ht)}var Ht=C(0);function Sn(t){for(var e=t;e!==null;){if(e.tag===13){var l=e.memoizedState;if(l!==null&&(l=l.dehydrated,l===null||l.data==="$?"||nf(l)))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if((e.flags&128)!==0)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}function vc(t,e,l,a){e=t.memoizedState,l=l(a,e),l=l==null?e:R({},e,l),t.memoizedState=l,t.lanes===0&&(t.updateQueue.baseState=l)}var gc={enqueueSetState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueReplaceState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.tag=1,u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueForceUpdate:function(t,e){t=t._reactInternals;var l=fe(),a=el(l);a.tag=2,e!=null&&(a.callback=e),e=ll(t,a,l),e!==null&&(re(e,t,l),Wa(e,t,l))}};function Xo(t,e,l,a,u,n,i){return t=t.stateNode,typeof t.shouldComponentUpdate=="function"?t.shouldComponentUpdate(a,n,i):e.prototype&&e.prototype.isPureReactComponent?!Ga(l,a)||!Ga(u,n):!0}function Qo(t,e,l,a){t=e.state,typeof e.componentWillReceiveProps=="function"&&e.componentWillReceiveProps(l,a),typeof e.UNSAFE_componentWillReceiveProps=="function"&&e.UNSAFE_componentWillReceiveProps(l,a),e.state!==t&&gc.enqueueReplaceState(e,e.state,null)}function ql(t,e){var l=e;if("ref"in e){l={};for(var a in e)a!=="ref"&&(l[a]=e[a])}if(t=t.defaultProps){l===e&&(l=R({},l));for(var u in t)l[u]===void 0&&(l[u]=t[u])}return l}var pn=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var e=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(e))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)};function Zo(t){pn(t)}function Vo(t){console.error(t)}function wo(t){pn(t)}function bn(t,e){try{var l=t.onUncaughtError;l(e.value,{componentStack:e.stack})}catch(a){setTimeout(function(){throw a})}}function Ko(t,e,l){try{var a=t.onCaughtError;a(l.value,{componentStack:l.stack,errorBoundary:e.tag===1?e.stateNode:null})}catch(u){setTimeout(function(){throw u})}}function Sc(t,e,l){return l=el(l),l.tag=3,l.payload={element:null},l.callback=function(){bn(t,e)},l}function Jo(t){return t=el(t),t.tag=3,t}function $o(t,e,l,a){var u=l.type.getDerivedStateFromError;if(typeof u=="function"){var n=a.value;t.payload=function(){return u(n)},t.callback=function(){Ko(e,l,a)}}var i=l.stateNode;i!==null&&typeof i.componentDidCatch=="function"&&(t.callback=function(){Ko(e,l,a),typeof u!="function"&&(sl===null?sl=new Set([this]):sl.add(this));var f=a.stack;this.componentDidCatch(a.value,{componentStack:f!==null?f:""})})}function _m(t,e,l,a,u){if(l.flags|=32768,a!==null&&typeof a=="object"&&typeof a.then=="function"){if(e=l.alternate,e!==null&&wa(e,l,u,!0),l=ge.current,l!==null){switch(l.tag){case 13:return ze===null?Qc():l.alternate===null&&Ot===0&&(Ot=3),l.flags&=-257,l.flags|=65536,l.lanes=u,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?l.updateQueue=new Set([a]):e.add(a),Vc(t,a,u)),!1;case 22:return l.flags|=65536,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?(e={transitions:null,markerInstances:null,retryQueue:new Set([a])},l.updateQueue=e):(l=e.retryQueue,l===null?e.retryQueue=new Set([a]):l.add(a)),Vc(t,a,u)),!1}throw Error(r(435,l.tag))}return Vc(t,a,u),Qc(),!1}if(ot)return e=ge.current,e!==null?((e.flags&65536)===0&&(e.flags|=256),e.flags|=65536,e.lanes=u,a!==Gi&&(t=Error(r(422),{cause:a}),Va(he(t,l)))):(a!==Gi&&(e=Error(r(423),{cause:a}),Va(he(e,l))),t=t.current.alternate,t.flags|=65536,u&=-u,t.lanes|=u,a=he(a,l),u=Sc(t.stateNode,a,u),Wi(t,u),Ot!==4&&(Ot=2)),!1;var n=Error(r(520),{cause:a});if(n=he(n,l),su===null?su=[n]:su.push(n),Ot!==4&&(Ot=2),e===null)return!0;a=he(a,l),l=e;do{switch(l.tag){case 3:return l.flags|=65536,t=u&-u,l.lanes|=t,t=Sc(l.stateNode,a,t),Wi(l,t),!1;case 1:if(e=l.type,n=l.stateNode,(l.flags&128)===0&&(typeof e.getDerivedStateFromError=="function"||n!==null&&typeof n.componentDidCatch=="function"&&(sl===null||!sl.has(n))))return l.flags|=65536,u&=-u,l.lanes|=u,u=Jo(u),$o(u,t,l,a),Wi(l,u),!1}l=l.return}while(l!==null);return!1}var ko=Error(r(461)),qt=!1;function Lt(t,e,l,a){e.child=t===null?Lo(e,null,l,a):da(e,t.child,l,a)}function Wo(t,e,l,a,u){l=l.render;var n=e.ref;if("ref"in a){var i={};for(var f in a)f!=="ref"&&(i[f]=a[f])}else i=a;return Cl(e),a=ec(t,e,l,i,n,u),f=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&f&&ji(e),e.flags|=1,Lt(t,e,a,u),e.child)}function Fo(t,e,l,a,u){if(t===null){var n=l.type;return typeof n=="function"&&!Bi(n)&&n.defaultProps===void 0&&l.compare===null?(e.tag=15,e.type=n,Po(t,e,n,a,u)):(t=Pu(l.type,null,a,e,e.mode,u),t.ref=e.ref,t.return=e,e.child=t)}if(n=t.child,!Oc(t,u)){var i=n.memoizedProps;if(l=l.compare,l=l!==null?l:Ga,l(i,a)&&t.ref===e.ref)return Ge(t,e,u)}return e.flags|=1,t=Ce(n,a),t.ref=e.ref,t.return=e,e.child=t}function Po(t,e,l,a,u){if(t!==null){var n=t.memoizedProps;if(Ga(n,a)&&t.ref===e.ref)if(qt=!1,e.pendingProps=a=n,Oc(t,u))(t.flags&131072)!==0&&(qt=!0);else return e.lanes=t.lanes,Ge(t,e,u)}return pc(t,e,l,a,u)}function Io(t,e,l){var a=e.pendingProps,u=a.children,n=t!==null?t.memoizedState:null;if(a.mode==="hidden"){if((e.flags&128)!==0){if(a=n!==null?n.baseLanes|l:l,t!==null){for(u=e.child=t.child,n=0;u!==null;)n=n|u.lanes|u.childLanes,u=u.sibling;e.childLanes=n&~a}else e.childLanes=0,e.child=null;return ts(t,e,a,l)}if((l&536870912)!==0)e.memoizedState={baseLanes:0,cachePool:null},t!==null&&an(e,n!==null?n.cachePool:null),n!==null?Fr(e,n):Pi(),Go(e);else return e.lanes=e.childLanes=536870912,ts(t,e,n!==null?n.baseLanes|l:l,l)}else n!==null?(an(e,n.cachePool),Fr(e,n),nl(),e.memoizedState=null):(t!==null&&an(e,null),Pi(),nl());return Lt(t,e,u,l),e.child}function ts(t,e,l,a){var u=Ki();return u=u===null?null:{parent:Ct._currentValue,pool:u},e.memoizedState={baseLanes:l,cachePool:u},t!==null&&an(e,null),Pi(),Go(e),t!==null&&wa(t,e,a,!0),null}function En(t,e){var l=e.ref;if(l===null)t!==null&&t.ref!==null&&(e.flags|=4194816);else{if(typeof l!="function"&&typeof l!="object")throw Error(r(284));(t===null||t.ref!==l)&&(e.flags|=4194816)}}function pc(t,e,l,a,u){return Cl(e),l=ec(t,e,l,a,void 0,u),a=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,u),e.child)}function es(t,e,l,a,u,n){return Cl(e),e.updateQueue=null,l=Ir(e,a,l,u),Pr(t),a=lc(),t!==null&&!qt?(ac(t,e,n),Ge(t,e,n)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,n),e.child)}function ls(t,e,l,a,u){if(Cl(e),e.stateNode===null){var n=la,i=l.contextType;typeof i=="object"&&i!==null&&(n=wt(i)),n=new l(a,n),e.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,n.updater=gc,e.stateNode=n,n._reactInternals=e,n=e.stateNode,n.props=a,n.state=e.memoizedState,n.refs={},$i(e),i=l.contextType,n.context=typeof i=="object"&&i!==null?wt(i):la,n.state=e.memoizedState,i=l.getDerivedStateFromProps,typeof i=="function"&&(vc(e,l,i,a),n.state=e.memoizedState),typeof l.getDerivedStateFromProps=="function"||typeof n.getSnapshotBeforeUpdate=="function"||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(i=n.state,typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount(),i!==n.state&&gc.enqueueReplaceState(n,n.state,null),Pa(e,a,n,u),Fa(),n.state=e.memoizedState),typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!0}else if(t===null){n=e.stateNode;var f=e.memoizedProps,d=ql(l,f);n.props=d;var E=n.context,D=l.contextType;i=la,typeof D=="object"&&D!==null&&(i=wt(D));var U=l.getDerivedStateFromProps;D=typeof U=="function"||typeof n.getSnapshotBeforeUpdate=="function",f=e.pendingProps!==f,D||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(f||E!==i)&&Qo(e,n,a,i),tl=!1;var T=e.memoizedState;n.state=T,Pa(e,a,n,u),Fa(),E=e.memoizedState,f||T!==E||tl?(typeof U=="function"&&(vc(e,l,U,a),E=e.memoizedState),(d=tl||Xo(e,l,d,a,T,E,i))?(D||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount()),typeof n.componentDidMount=="function"&&(e.flags|=4194308)):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),e.memoizedProps=a,e.memoizedState=E),n.props=a,n.state=E,n.context=i,a=d):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!1)}else{n=e.stateNode,ki(t,e),i=e.memoizedProps,D=ql(l,i),n.props=D,U=e.pendingProps,T=n.context,E=l.contextType,d=la,typeof E=="object"&&E!==null&&(d=wt(E)),f=l.getDerivedStateFromProps,(E=typeof f=="function"||typeof n.getSnapshotBeforeUpdate=="function")||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(i!==U||T!==d)&&Qo(e,n,a,d),tl=!1,T=e.memoizedState,n.state=T,Pa(e,a,n,u),Fa();var A=e.memoizedState;i!==U||T!==A||tl||t!==null&&t.dependencies!==null&&en(t.dependencies)?(typeof f=="function"&&(vc(e,l,f,a),A=e.memoizedState),(D=tl||Xo(e,l,D,a,T,A,d)||t!==null&&t.dependencies!==null&&en(t.dependencies))?(E||typeof n.UNSAFE_componentWillUpdate!="function"&&typeof n.componentWillUpdate!="function"||(typeof n.componentWillUpdate=="function"&&n.componentWillUpdate(a,A,d),typeof n.UNSAFE_componentWillUpdate=="function"&&n.UNSAFE_componentWillUpdate(a,A,d)),typeof n.componentDidUpdate=="function"&&(e.flags|=4),typeof n.getSnapshotBeforeUpdate=="function"&&(e.flags|=1024)):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),e.memoizedProps=a,e.memoizedState=A),n.props=a,n.state=A,n.context=d,a=D):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),a=!1)}return n=a,En(t,e),a=(e.flags&128)!==0,n||a?(n=e.stateNode,l=a&&typeof l.getDerivedStateFromError!="function"?null:n.render(),e.flags|=1,t!==null&&a?(e.child=da(e,t.child,null,u),e.child=da(e,null,l,u)):Lt(t,e,l,u),e.memoizedState=n.state,t=e.child):t=Ge(t,e,u),t}function as(t,e,l,a){return Za(),e.flags|=256,Lt(t,e,l,a),e.child}var bc={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Ec(t){return{baseLanes:t,cachePool:Zr()}}function Tc(t,e,l){return t=t!==null?t.childLanes&~l:0,e&&(t|=Se),t}function us(t,e,l){var a=e.pendingProps,u=!1,n=(e.flags&128)!==0,i;if((i=n)||(i=t!==null&&t.memoizedState===null?!1:(Ht.current&2)!==0),i&&(u=!0,e.flags&=-129),i=(e.flags&32)!==0,e.flags&=-33,t===null){if(ot){if(u?ul(e):nl(),ot){var f=zt,d;if(d=f){t:{for(d=f,f=Re;d.nodeType!==8;){if(!f){f=null;break t}if(d=Te(d.nextSibling),d===null){f=null;break t}}f=d}f!==null?(e.memoizedState={dehydrated:f,treeContext:Ml!==null?{id:He,overflow:Be}:null,retryLane:536870912,hydrationErrors:null},d=ue(18,null,null,0),d.stateNode=f,d.return=e,e.child=d,$t=e,zt=null,d=!0):d=!1}d||Ul(e)}if(f=e.memoizedState,f!==null&&(f=f.dehydrated,f!==null))return nf(f)?e.lanes=32:e.lanes=536870912,null;Le(e)}return f=a.children,a=a.fallback,u?(nl(),u=e.mode,f=Tn({mode:"hidden",children:f},u),a=Dl(a,u,l,null),f.return=e,a.return=e,f.sibling=a,e.child=f,u=e.child,u.memoizedState=Ec(l),u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),Ac(e,f))}if(d=t.memoizedState,d!==null&&(f=d.dehydrated,f!==null)){if(n)e.flags&256?(ul(e),e.flags&=-257,e=Rc(t,e,l)):e.memoizedState!==null?(nl(),e.child=t.child,e.flags|=128,e=null):(nl(),u=a.fallback,f=e.mode,a=Tn({mode:"visible",children:a.children},f),u=Dl(u,f,l,null),u.flags|=2,a.return=e,u.return=e,a.sibling=u,e.child=a,da(e,t.child,null,l),a=e.child,a.memoizedState=Ec(l),a.childLanes=Tc(t,i,l),e.memoizedState=bc,e=u);else if(ul(e),nf(f)){if(i=f.nextSibling&&f.nextSibling.dataset,i)var E=i.dgst;i=E,a=Error(r(419)),a.stack="",a.digest=i,Va({value:a,source:null,stack:null}),e=Rc(t,e,l)}else if(qt||wa(t,e,l,!1),i=(l&t.childLanes)!==0,qt||i){if(i=St,i!==null&&(a=l&-l,a=(a&42)!==0?1:ii(a),a=(a&(i.suspendedLanes|l))!==0?0:a,a!==0&&a!==d.retryLane))throw d.retryLane=a,ea(t,a),re(i,t,a),ko;f.data==="$?"||Qc(),e=Rc(t,e,l)}else f.data==="$?"?(e.flags|=192,e.child=t.child,e=null):(t=d.treeContext,zt=Te(f.nextSibling),$t=e,ot=!0,xl=null,Re=!1,t!==null&&(ye[ve++]=He,ye[ve++]=Be,ye[ve++]=Ml,He=t.id,Be=t.overflow,Ml=e),e=Ac(e,a.children),e.flags|=4096);return e}return u?(nl(),u=a.fallback,f=e.mode,d=t.child,E=d.sibling,a=Ce(d,{mode:"hidden",children:a.children}),a.subtreeFlags=d.subtreeFlags&65011712,E!==null?u=Ce(E,u):(u=Dl(u,f,l,null),u.flags|=2),u.return=e,a.return=e,a.sibling=u,e.child=a,a=u,u=e.child,f=t.child.memoizedState,f===null?f=Ec(l):(d=f.cachePool,d!==null?(E=Ct._currentValue,d=d.parent!==E?{parent:E,pool:E}:d):d=Zr(),f={baseLanes:f.baseLanes|l,cachePool:d}),u.memoizedState=f,u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),l=t.child,t=l.sibling,l=Ce(l,{mode:"visible",children:a.children}),l.return=e,l.sibling=null,t!==null&&(i=e.deletions,i===null?(e.deletions=[t],e.flags|=16):i.push(t)),e.child=l,e.memoizedState=null,l)}function Ac(t,e){return e=Tn({mode:"visible",children:e},t.mode),e.return=t,t.child=e}function Tn(t,e){return t=ue(22,t,null,e),t.lanes=0,t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},t}function Rc(t,e,l){return da(e,t.child,null,l),t=Ac(e,e.pendingProps.children),t.flags|=2,e.memoizedState=null,t}function ns(t,e,l){t.lanes|=e;var a=t.alternate;a!==null&&(a.lanes|=e),Qi(t.return,e,l)}function zc(t,e,l,a,u){var n=t.memoizedState;n===null?t.memoizedState={isBackwards:e,rendering:null,renderingStartTime:0,last:a,tail:l,tailMode:u}:(n.isBackwards=e,n.rendering=null,n.renderingStartTime=0,n.last=a,n.tail=l,n.tailMode=u)}function is(t,e,l){var a=e.pendingProps,u=a.revealOrder,n=a.tail;if(Lt(t,e,a.children,l),a=Ht.current,(a&2)!==0)a=a&1|2,e.flags|=128;else{if(t!==null&&(t.flags&128)!==0)t:for(t=e.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&ns(t,l,e);else if(t.tag===19)ns(t,l,e);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break t;for(;t.sibling===null;){if(t.return===null||t.return===e)break t;t=t.return}t.sibling.return=t.return,t=t.sibling}a&=1}switch(Y(Ht,a),u){case"forwards":for(l=e.child,u=null;l!==null;)t=l.alternate,t!==null&&Sn(t)===null&&(u=l),l=l.sibling;l=u,l===null?(u=e.child,e.child=null):(u=l.sibling,l.sibling=null),zc(e,!1,u,l,n);break;case"backwards":for(l=null,u=e.child,e.child=null;u!==null;){if(t=u.alternate,t!==null&&Sn(t)===null){e.child=u;break}t=u.sibling,u.sibling=l,l=u,u=t}zc(e,!0,l,null,n);break;case"together":zc(e,!1,null,null,void 0);break;default:e.memoizedState=null}return e.child}function Ge(t,e,l){if(t!==null&&(e.dependencies=t.dependencies),ol|=e.lanes,(l&e.childLanes)===0)if(t!==null){if(wa(t,e,l,!1),(l&e.childLanes)===0)return null}else return null;if(t!==null&&e.child!==t.child)throw Error(r(153));if(e.child!==null){for(t=e.child,l=Ce(t,t.pendingProps),e.child=l,l.return=e;t.sibling!==null;)t=t.sibling,l=l.sibling=Ce(t,t.pendingProps),l.return=e;l.sibling=null}return e.child}function Oc(t,e){return(t.lanes&e)!==0?!0:(t=t.dependencies,!!(t!==null&&en(t)))}function xm(t,e,l){switch(e.tag){case 3:bt(e,e.stateNode.containerInfo),Ie(e,Ct,t.memoizedState.cache),Za();break;case 27:case 5:ei(e);break;case 4:bt(e,e.stateNode.containerInfo);break;case 10:Ie(e,e.type,e.memoizedProps.value);break;case 13:var a=e.memoizedState;if(a!==null)return a.dehydrated!==null?(ul(e),e.flags|=128,null):(l&e.child.childLanes)!==0?us(t,e,l):(ul(e),t=Ge(t,e,l),t!==null?t.sibling:null);ul(e);break;case 19:var u=(t.flags&128)!==0;if(a=(l&e.childLanes)!==0,a||(wa(t,e,l,!1),a=(l&e.childLanes)!==0),u){if(a)return is(t,e,l);e.flags|=128}if(u=e.memoizedState,u!==null&&(u.rendering=null,u.tail=null,u.lastEffect=null),Y(Ht,Ht.current),a)break;return null;case 22:case 23:return e.lanes=0,Io(t,e,l);case 24:Ie(e,Ct,t.memoizedState.cache)}return Ge(t,e,l)}function cs(t,e,l){if(t!==null)if(t.memoizedProps!==e.pendingProps)qt=!0;else{if(!Oc(t,l)&&(e.flags&128)===0)return qt=!1,xm(t,e,l);qt=(t.flags&131072)!==0}else qt=!1,ot&&(e.flags&1048576)!==0&&qr(e,tn,e.index);switch(e.lanes=0,e.tag){case 16:t:{t=e.pendingProps;var a=e.elementType,u=a._init;if(a=u(a._payload),e.type=a,typeof a=="function")Bi(a)?(t=ql(a,t),e.tag=1,e=ls(null,e,a,t,l)):(e.tag=0,e=pc(null,e,a,t,l));else{if(a!=null){if(u=a.$$typeof,u===ct){e.tag=11,e=Wo(null,e,a,t,l);break t}else if(u===Rt){e.tag=14,e=Fo(null,e,a,t,l);break t}}throw e=El(a)||a,Error(r(306,e,""))}}return e;case 0:return pc(t,e,e.type,e.pendingProps,l);case 1:return a=e.type,u=ql(a,e.pendingProps),ls(t,e,a,u,l);case 3:t:{if(bt(e,e.stateNode.containerInfo),t===null)throw Error(r(387));a=e.pendingProps;var n=e.memoizedState;u=n.element,ki(t,e),Pa(e,a,null,l);var i=e.memoizedState;if(a=i.cache,Ie(e,Ct,a),a!==n.cache&&Zi(e,[Ct],l,!0),Fa(),a=i.element,n.isDehydrated)if(n={element:a,isDehydrated:!1,cache:i.cache},e.updateQueue.baseState=n,e.memoizedState=n,e.flags&256){e=as(t,e,a,l);break t}else if(a!==u){u=he(Error(r(424)),e),Va(u),e=as(t,e,a,l);break t}else{switch(t=e.stateNode.containerInfo,t.nodeType){case 9:t=t.body;break;default:t=t.nodeName==="HTML"?t.ownerDocument.body:t}for(zt=Te(t.firstChild),$t=e,ot=!0,xl=null,Re=!0,l=Lo(e,null,a,l),e.child=l;l;)l.flags=l.flags&-3|4096,l=l.sibling}else{if(Za(),a===u){e=Ge(t,e,l);break t}Lt(t,e,a,l)}e=e.child}return e;case 26:return En(t,e),t===null?(l=sd(e.type,null,e.pendingProps,null))?e.memoizedState=l:ot||(l=e.type,t=e.pendingProps,a=qn(tt.current).createElement(l),a[Vt]=e,a[kt]=t,Xt(a,l,t),Bt(a),e.stateNode=a):e.memoizedState=sd(e.type,t.memoizedProps,e.pendingProps,t.memoizedState),null;case 27:return ei(e),t===null&&ot&&(a=e.stateNode=fd(e.type,e.pendingProps,tt.current),$t=e,Re=!0,u=zt,ml(e.type)?(cf=u,zt=Te(a.firstChild)):zt=u),Lt(t,e,e.pendingProps.children,l),En(t,e),t===null&&(e.flags|=4194304),e.child;case 5:return t===null&&ot&&((u=a=zt)&&(a=uy(a,e.type,e.pendingProps,Re),a!==null?(e.stateNode=a,$t=e,zt=Te(a.firstChild),Re=!1,u=!0):u=!1),u||Ul(e)),ei(e),u=e.type,n=e.pendingProps,i=t!==null?t.memoizedProps:null,a=n.children,lf(u,n)?a=null:i!==null&&lf(u,i)&&(e.flags|=32),e.memoizedState!==null&&(u=ec(t,e,Tm,null,null,l),bu._currentValue=u),En(t,e),Lt(t,e,a,l),e.child;case 6:return t===null&&ot&&((t=l=zt)&&(l=ny(l,e.pendingProps,Re),l!==null?(e.stateNode=l,$t=e,zt=null,t=!0):t=!1),t||Ul(e)),null;case 13:return us(t,e,l);case 4:return bt(e,e.stateNode.containerInfo),a=e.pendingProps,t===null?e.child=da(e,null,a,l):Lt(t,e,a,l),e.child;case 11:return Wo(t,e,e.type,e.pendingProps,l);case 7:return Lt(t,e,e.pendingProps,l),e.child;case 8:return Lt(t,e,e.pendingProps.children,l),e.child;case 12:return Lt(t,e,e.pendingProps.children,l),e.child;case 10:return a=e.pendingProps,Ie(e,e.type,a.value),Lt(t,e,a.children,l),e.child;case 9:return u=e.type._context,a=e.pendingProps.children,Cl(e),u=wt(u),a=a(u),e.flags|=1,Lt(t,e,a,l),e.child;case 14:return Fo(t,e,e.type,e.pendingProps,l);case 15:return Po(t,e,e.type,e.pendingProps,l);case 19:return is(t,e,l);case 31:return a=e.pendingProps,l=e.mode,a={mode:a.mode,children:a.children},t===null?(l=Tn(a,l),l.ref=e.ref,e.child=l,l.return=e,e=l):(l=Ce(t.child,a),l.ref=e.ref,e.child=l,l.return=e,e=l),e;case 22:return Io(t,e,l);case 24:return Cl(e),a=wt(Ct),t===null?(u=Ki(),u===null&&(u=St,n=Vi(),u.pooledCache=n,n.refCount++,n!==null&&(u.pooledCacheLanes|=l),u=n),e.memoizedState={parent:a,cache:u},$i(e),Ie(e,Ct,u)):((t.lanes&l)!==0&&(ki(t,e),Pa(e,null,null,l),Fa()),u=t.memoizedState,n=e.memoizedState,u.parent!==a?(u={parent:a,cache:a},e.memoizedState=u,e.lanes===0&&(e.memoizedState=e.updateQueue.baseState=u),Ie(e,Ct,a)):(a=n.cache,Ie(e,Ct,a),a!==u.cache&&Zi(e,[Ct],l,!0))),Lt(t,e,e.pendingProps.children,l),e.child;case 29:throw e.pendingProps}throw Error(r(156,e.tag))}function Xe(t){t.flags|=4}function fs(t,e){if(e.type!=="stylesheet"||(e.state.loading&4)!==0)t.flags&=-16777217;else if(t.flags|=16777216,!vd(e)){if(e=ge.current,e!==null&&((it&4194048)===it?ze!==null:(it&62914560)!==it&&(it&536870912)===0||e!==ze))throw ka=Ji,Vr;t.flags|=8192}}function An(t,e){e!==null&&(t.flags|=4),t.flags&16384&&(e=t.tag!==22?Lf():536870912,t.lanes|=e,va|=e)}function nu(t,e){if(!ot)switch(t.tailMode){case"hidden":e=t.tail;for(var l=null;e!==null;)e.alternate!==null&&(l=e),e=e.sibling;l===null?t.tail=null:l.sibling=null;break;case"collapsed":l=t.tail;for(var a=null;l!==null;)l.alternate!==null&&(a=l),l=l.sibling;a===null?e||t.tail===null?t.tail=null:t.tail.sibling=null:a.sibling=null}}function Tt(t){var e=t.alternate!==null&&t.alternate.child===t.child,l=0,a=0;if(e)for(var u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags&65011712,a|=u.flags&65011712,u.return=t,u=u.sibling;else for(u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags,a|=u.flags,u.return=t,u=u.sibling;return t.subtreeFlags|=a,t.childLanes=l,e}function Um(t,e,l){var a=e.pendingProps;switch(Li(e),e.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Tt(e),null;case 1:return Tt(e),null;case 3:return l=e.stateNode,a=null,t!==null&&(a=t.memoizedState.cache),e.memoizedState.cache!==a&&(e.flags|=2048),Ye(Ct),ke(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(t===null||t.child===null)&&(Qa(e)?Xe(e):t===null||t.memoizedState.isDehydrated&&(e.flags&256)===0||(e.flags|=1024,Lr())),Tt(e),null;case 26:return l=e.memoizedState,t===null?(Xe(e),l!==null?(Tt(e),fs(e,l)):(Tt(e),e.flags&=-16777217)):l?l!==t.memoizedState?(Xe(e),Tt(e),fs(e,l)):(Tt(e),e.flags&=-16777217):(t.memoizedProps!==a&&Xe(e),Tt(e),e.flags&=-16777217),null;case 27:Cu(e),l=tt.current;var u=e.type;if(t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}t=K.current,Qa(e)?Yr(e):(t=fd(u,a,l),e.stateNode=t,Xe(e))}return Tt(e),null;case 5:if(Cu(e),l=e.type,t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}if(t=K.current,Qa(e))Yr(e);else{switch(u=qn(tt.current),t){case 1:t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case 2:t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;default:switch(l){case"svg":t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case"math":t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;case"script":t=u.createElement("div"),t.innerHTML=" - + +
diff --git a/frontend/style/base.css b/frontend/style/base.css index 352a9eb..a7cece4 100644 --- a/frontend/style/base.css +++ b/frontend/style/base.css @@ -1,19 +1,148 @@ -/* base.css */ +/* RESET & BASE STYLES */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} body { - font-family: Arial, sans-serif; - margin: 0; - padding: 0; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + background-color: #f5f7fa; + color: #333; + line-height: 1.6; + padding: 0; + margin: 0; +} + +a { + color: inherit; + text-decoration: none; +} + +/* BUTTONS */ +button, .btn { + background-color: #0057ff; + color: white; + border: none; + padding: 0.6rem 1.2rem; + border-radius: 6px; + cursor: pointer; + font-size: 1rem; + transition: background 0.3s ease; +} + +button:hover, .btn:hover { + background-color: #003fcc; +} + +.primary-btn { + background-color: #007bff; } -.login-container, -.dashboard { - padding: 20px; +.primary-btn:hover { + background-color: #0056b3; } +/* FORM ELEMENTS */ +input, select, textarea { + width: 100%; + padding: 0.5rem; + margin-top: 0.25rem; + margin-bottom: 1rem; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 1rem; +} + +label { + display: block; + font-weight: 500; + margin-bottom: 0.25rem; +} + +.form-group { + margin-bottom: 1rem; +} + +/* ERROR & FEEDBACK */ .error { - color: red; + color: red; + margin-top: 0.5rem; +} + +.loading { + margin-top: 1rem; + color: #888; } -/* Additional styles for navbar, forms, deployments, etc. */ +/* LAYOUT */ +.dashboard-main { + padding: 2rem; + display: flex; + flex-direction: column; +} + +.dashboard-header { + display: flex; + justify-content: flex-start; + margin-bottom: 1rem; +} + +.dashboard-body { + display: flex; + gap: 1.5rem; +} + +.deployments-container { + background: white; + padding: 1rem; + border-radius: 10px; + box-shadow: 0 2px 6px rgba(0,0,0,0.05); + flex: 1; + max-width: 300px; +} + +.project-setup-container { + background: white; + padding: 1.5rem; + border-radius: 10px; + box-shadow: 0 2px 6px rgba(0,0,0,0.05); + flex: 2; +} + +/* DEPLOYMENT ITEMS */ +.deployment-item { + background-color: #f0f2f5; + padding: 1rem; + margin-bottom: 1rem; + border-radius: 8px; + cursor: pointer; + transition: background 0.2s; +} + +.deployment-item:hover { + background-color: #e1e4e8; +} + +/* LOGIN PAGE */ +.login-container { + max-width: 400px; + margin: 4rem auto; + background: white; + padding: 2rem; + border-radius: 12px; + box-shadow: 0 5px 20px rgba(0, 0, 0, 0.05); +} + +/* RESPONSIVENESS */ +@media (max-width: 768px) { + .dashboard-body { + flex-direction: column; + } + + .deployments-container, + .project-setup-container { + max-width: 100%; + } +} diff --git a/package.json b/package.json index 007c91d..61966db 100644 --- a/package.json +++ b/package.json @@ -1 +1 @@ -{"name":"fenrir","version":"0.0.1","description":"","author":"","private":true,"license":"UNLICENSED","scripts":{"build":"nest build","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start":"nest start","start:dev":"nest start --watch","start:debug":"nest start --debug --watch","start:prod":"node dist/main","lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e":"jest --config ./test/jest-e2e.json"},"dependencies":{"@nestjs/common":"^11.0.1","@nestjs/config":"^4.0.2","@nestjs/core":"^11.0.1","@nestjs/platform-express":"^11.0.1","@nestjs/serve-static":"^5.0.3","@nestjs/typeorm":"^11.0.0","ioredis":"^5.6.0","pg":"^8.14.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.1","typeorm":"^0.3.21"},"devDependencies":{"@eslint/eslintrc":"^3.2.0","@eslint/js":"^9.18.0","@nestjs/cli":"^11.0.0","@nestjs/schematics":"^11.0.0","@nestjs/testing":"^11.0.1","@swc/cli":"^0.6.0","@swc/core":"^1.10.7","@types/express":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.14.0","@types/supertest":"^6.0.2","eslint":"^9.18.0","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2","globals":"^16.0.0","jest":"^29.7.0","prettier":"^3.4.2","source-map-support":"^0.5.21","supertest":"^7.0.0","ts-jest":"^29.2.5","ts-loader":"^9.5.2","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","typescript":"^5.7.3","typescript-eslint":"^8.20.0"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"}} \ No newline at end of file +{"name":"fenrir","version":"0.0.1","description":"","author":"","private":true,"license":"UNLICENSED","scripts":{"build":"nest build","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start":"nest start","start:dev":"nest start --watch","start:debug":"nest start --debug --watch","start:prod":"node dist/main","lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e":"jest --config ./test/jest-e2e.json"},"dependencies":{"@nestjs/common":"^11.0.1","@nestjs/config":"^4.0.2","@nestjs/core":"^11.0.1","@nestjs/platform-express":"^11.0.1","@nestjs/serve-static":"^5.0.3","@nestjs/typeorm":"^11.0.0","ioredis":"^5.6.0","pg":"^8.14.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.1","typeorm":"^0.3.21"},"devDependencies":{"@eslint/eslintrc":"^3.2.0","@eslint/js":"^9.23.0","@nestjs/cli":"^11.0.0","@nestjs/schematics":"^11.0.0","@nestjs/testing":"^11.0.1","@swc/cli":"^0.6.0","@swc/core":"^1.10.7","@types/express":"^5.0.0","@types/jest":"^29.5.14","@types/node":"^22.14.0","@types/supertest":"^6.0.2","eslint":"^9.23.0","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2","globals":"^16.0.0","jest":"^29.7.0","prettier":"^3.4.2","source-map-support":"^0.5.21","supertest":"^7.0.0","ts-jest":"^29.2.5","ts-loader":"^9.5.2","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","typescript":"^5.7.3","typescript-eslint":"^8.29.0"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"}} \ No newline at end of file diff --git a/src/app.module.ts b/src/app.module.ts index f308e67..38f7227 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,6 +1,5 @@ import { Module } from '@nestjs/common'; import { ServeStaticModule } from '@nestjs/serve-static'; -import { join } from 'path'; import { ConfigModule } from './config/config.module'; import { AuthModule } from './auth/auth.module'; import { ContainerModule } from './container/container.module'; @@ -8,11 +7,11 @@ import { DeploymentModule } from './deployment/deployment.module'; import { DatabaseModule } from './db/database.module'; import { SubdomainModule } from './subdomain/subdomain.module'; import { HtmxModule } from './htmx/htmx.module'; - +import * as path from 'path'; @Module({ imports: [ ServeStaticModule.forRoot({ - rootPath: join(__dirname, '../../frontend'), // Path to your frontend directory + rootPath: '/home/akshat/projects/cloudRun/frontend/dist', // Path to your frontend directory }), ConfigModule, AuthModule, diff --git a/src/config/config.module.ts b/src/config/config.module.ts index 80083fc..771746a 100644 --- a/src/config/config.module.ts +++ b/src/config/config.module.ts @@ -1,5 +1,8 @@ import { Module } from '@nestjs/common'; -import { ConfigModule as NestConfigModule, ConfigService } from '@nestjs/config'; +import { + ConfigModule as NestConfigModule, + ConfigService, +} from '@nestjs/config'; @Module({ imports: [ diff --git a/src/container/container.controller.ts b/src/container/container.controller.ts index 802b4cc..48a5925 100644 --- a/src/container/container.controller.ts +++ b/src/container/container.controller.ts @@ -13,7 +13,9 @@ export class ContainerController { const result = await this.containerService.runContainer(body); res.json(result); } catch (error) { - res.status(500).json({ error: 'Deployment failed', message: error.message }); + res + .status(500) + .json({ error: 'Deployment failed', message: error.message }); } } } diff --git a/src/container/container.service.ts b/src/container/container.service.ts index 8bbf452..007963f 100644 --- a/src/container/container.service.ts +++ b/src/container/container.service.ts @@ -11,7 +11,7 @@ const execAsync = promisify(exec); export class ContainerService { constructor( private readonly deploymentService: DeploymentService, - private readonly subdomainService: SubdomainService, + private readonly subdomainService: SubdomainService ) {} async runContainer(body: any) { @@ -45,10 +45,19 @@ export class ContainerService { // Generate Dockerfile and build image const imageName = `${userName.toLowerCase()}-${projectName}`; const port = await this.findAvailablePort(); - await this.createImage(userName, projectName, repoLink, entryPoint, buildCommand, runCommand); + await this.createImage( + userName, + projectName, + repoLink, + entryPoint, + buildCommand, + runCommand + ); // Run container - const { stdout } = await execAsync(`podman run -d -p ${port}:8080 -t localhost/${imageName}:latest`); + const { stdout } = await execAsync( + `podman run -d -p ${port}:8080 -t localhost/${imageName}:latest` + ); const containerId = stdout.trim(); // Set up subdomain @@ -77,7 +86,9 @@ export class ContainerService { ): Promise { try { // Change directory to user folder - process.chdir(`/home/${process.env.LINUX_USER || 'root'}/${userName.toLowerCase()}`); + process.chdir( + `/home/${process.env.LINUX_USER || 'root'}/${userName.toLowerCase()}` + ); // Clone repository into project directory await execAsync(`git clone ${repoLink}`); @@ -88,13 +99,19 @@ export class ContainerService { await execAsync('ls Dockerfile'); console.log('Dockerfile already exists, skipping creation.'); } catch { - const dockerfileContent = dockerFile(entryPoint, buildCommand, runCommand); + const dockerfileContent = dockerFile( + entryPoint, + buildCommand, + runCommand + ); await execAsync(`echo '${dockerfileContent}' > Dockerfile`); console.log('Dockerfile created.'); } // Build Docker image - await execAsync(`buildah build -t ${userName.toLowerCase()}-${projectName} .`); + await execAsync( + `buildah build -t ${userName.toLowerCase()}-${projectName} .` + ); console.log('Docker image built successfully.'); } catch (error) { console.error('Error creating Docker image:', error); diff --git a/src/deployment/deployment.entity.ts b/src/deployment/deployment.entity.ts index 7e5fb0a..4eefecf 100644 --- a/src/deployment/deployment.entity.ts +++ b/src/deployment/deployment.entity.ts @@ -16,4 +16,4 @@ export class Deployment { @Column() containerId: string; -} \ No newline at end of file +} diff --git a/src/deployment/deployment.service.ts b/src/deployment/deployment.service.ts index 1993832..31b87be 100644 --- a/src/deployment/deployment.service.ts +++ b/src/deployment/deployment.service.ts @@ -8,7 +8,7 @@ import { Deployment } from './deployment.entity'; export class DeploymentService { constructor( @InjectRepository(Deployment) - private readonly deploymentRepository: Repository, + private readonly deploymentRepository: Repository ) {} async getDeployments() { diff --git a/src/htmx/htmx.controller.ts b/src/htmx/htmx.controller.ts index 17cae4a..3a0c101 100644 --- a/src/htmx/htmx.controller.ts +++ b/src/htmx/htmx.controller.ts @@ -1,5 +1,13 @@ // src/htmx/htmx.controller.ts -import { Controller, Post, Get, Query, Body, Res } from '@nestjs/common'; +import { + Controller, + Post, + Get, + Query, + Body, + Res, + HttpStatus, +} from '@nestjs/common'; import { Response } from 'express'; import { HtmxService } from './htmx.service'; import { ConfigService } from '@nestjs/config'; @@ -8,91 +16,134 @@ import { ConfigService } from '@nestjs/config'; export class HtmxController { public nickname: string; constructor( - private readonly htmxService: HtmxService , - private readonly configService: ConfigService - + private readonly htmxService: HtmxService, + private readonly configService: ConfigService ) { - this.nickname = this.configService.get('GH_USERNAME', 'IntegerAlex'); + this.nickname = this.configService.get( + 'GH_USERNAME', + 'IntegerAlex' + ); } + @Post() async runContainer(@Body() body: any, @Res() res: Response) { const { userName, buildCommand, runCommand, repoLink, entryPoint } = body; try { - const result = await this.htmxService.runContainer(userName, repoLink, entryPoint, buildCommand, runCommand); - res.send(`

Container ID: ${result.containerId}

`); + const result = await this.htmxService.runContainer( + userName, + repoLink, + entryPoint, + buildCommand, + runCommand + ); + res.status(HttpStatus.OK).json({ + success: true, + data: { containerId: result.containerId }, + }); } catch (error) { console.error('Error:', error); - res.send('

Error deploying container

'); + res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({ + success: false, + error: 'Error deploying container', + }); } } @Get('deployments') - async getDeployments(@Query('userName') userName: string, @Res() res: Response) { + async getDeployments( + @Query('userName') userName: string, + @Res() res: Response + ) { try { const deployments = await this.htmxService.getDeployments(); if (!deployments || deployments.length === 0) { - return res.send('

No deployments found

'); + return res.status(HttpStatus.OK).json({ + success: true, + message: 'No deployments found', + }); } - const deploymentsHTML = deployments - .map((deployment) => ` -
-

${deployment.projectName}

-

Status: ${deployment.status}

-

Deployed at: ${new Date(deployment.time).toLocaleString()}

-

Deployment ID: ${deployment.containerId}

-
- `) - .join(''); - res.send(` -
- ${deploymentsHTML} -
- `); + const formattedDeployments = deployments.map((deployment) => ({ + projectName: deployment.projectName, + status: deployment.status, + deployedAt: new Date(deployment.time).toLocaleString(), + containerId: deployment.containerId, + })); + res.status(HttpStatus.OK).json({ + success: true, + data: formattedDeployments, + }); } catch (error) { console.error('Error fetching deployments:', error); - res.send('

Error fetching deployments

'); + res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({ + success: false, + error: 'Error fetching deployments', + }); } } @Get('subscription') - async getSubscription(@Query('userName') userName: string, @Res() res: Response) { + async getSubscription( + @Query('userName') userName: string, + @Res() res: Response + ) { try { - const subscription = await this.htmxService.getSubscription(userName.toLowerCase()); - if (subscription) { - res.send(`

You are in free tier

Upgrade to premium to get more deployments

`); - } else { - res.send(`

You are in free tier

You can deploy one application

`); - } + const subscription = await this.htmxService.getSubscription( + userName.toLowerCase() + ); + const message = subscription + ? 'You are in free tier' + : 'You can deploy one application'; + res.status(HttpStatus.OK).json({ + success: true, + data: { + tier: 'free', + message, + upgrade: subscription ? 'Upgrade to premium' : null, + }, + }); } catch (error) { console.error('Error fetching subscription:', error); - res.send('

Error fetching subscription

'); + res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({ + success: false, + error: 'Error fetching subscription', + }); } } @Get('v1/profile') async getProfile(@Res() res: Response) { - return res.json({nickname: this.nickname}); + res.status(HttpStatus.OK).json({ + success: true, + data: { nickname: this.nickname }, + }); } + @Get('v1/repositories') async getRepositories(@Res() res: Response) { - fetch(`https://api.github.com/users/${this.nickname}/repos`, { - method: 'GET'}) - .then((response) => response.json()) - .then((data: any) => { - const repositories = data.map( - (repo: { name: string; html_url: string }) => ({ - name: repo.name, - url: repo.html_url, - }) - ); - res.send({ - repositories: repositories, - avatar_url: data[0]?.owner?.avatar_url, + try { + const response = await fetch( + `https://api.github.com/users/${this.nickname}/repos`, + { method: 'GET' } + ); + const data = await response.json(); + const repositories = data.map((repo: any) => ({ + name: repo.name, + url: repo.html_url, + })); + const avatarUrl = data[0]?.owner?.avatar_url; + res.status(HttpStatus.OK).json({ + success: true, + data: { + repositories, + avatarUrl, + }, }); - }) - .catch((error) => { + } catch (error) { console.error('Error fetching repositories:', error); - res.status(500).send('Error fetching repositories'); - }); + res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({ + success: false, + error: 'Error fetching repositories', + }); + } } } diff --git a/src/htmx/htmx.service.ts b/src/htmx/htmx.service.ts index 035e12e..29e03b0 100644 --- a/src/htmx/htmx.service.ts +++ b/src/htmx/htmx.service.ts @@ -4,11 +4,15 @@ import { DeploymentService } from '../deployment/deployment.service'; @Injectable() export class HtmxService { - constructor( - private readonly deploymentService: DeploymentService, - ) {} + constructor(private readonly deploymentService: DeploymentService) {} - async runContainer(userName: string, repoLink: string, entryPoint: string, buildCommand?: string, runCommand?: string) { + async runContainer( + userName: string, + repoLink: string, + entryPoint: string, + buildCommand?: string, + runCommand?: string + ) { const projectName = repoLink.split('/').pop()?.split('.')[0] || ''; const response = await fetch('http://localhost:8080/v1/runContainer', { method: 'POST', @@ -36,6 +40,6 @@ export class HtmxService { } async getSubscription(userName: string) { - return true; + return true; } } diff --git a/src/subdomain/subdomain.controller.ts b/src/subdomain/subdomain.controller.ts index 38659ba..807e225 100644 --- a/src/subdomain/subdomain.controller.ts +++ b/src/subdomain/subdomain.controller.ts @@ -11,10 +11,16 @@ export class SubdomainController { async setupSubdomain(@Body() body: any, @Res() res: Response) { const { subdomain, port, dnsRecordId } = body; try { - const result = await this.subdomainService.setupSubdomain(subdomain, port, dnsRecordId); + const result = await this.subdomainService.setupSubdomain( + subdomain, + port, + dnsRecordId + ); res.json({ message: result }); } catch (error) { - res.status(500).json({ error: 'Subdomain setup failed', message: error.message }); + res + .status(500) + .json({ error: 'Subdomain setup failed', message: error.message }); } } } diff --git a/src/subdomain/subdomain.service.ts b/src/subdomain/subdomain.service.ts index b163444..56f5c3b 100644 --- a/src/subdomain/subdomain.service.ts +++ b/src/subdomain/subdomain.service.ts @@ -8,7 +8,11 @@ const execAsync = promisify(exec); @Injectable() export class SubdomainService { - async setupSubdomain(subdomain: string, port: number, dnsRecordId: string): Promise { + async setupSubdomain( + subdomain: string, + port: number, + dnsRecordId: string + ): Promise { await this.addDnsRecord(subdomain, dnsRecordId); await this.createNginxConfig(subdomain, port); await this.createNginxSymlink(subdomain); @@ -17,7 +21,10 @@ export class SubdomainService { return 'Subdomain setup completed'; } - private async addDnsRecord(subdomain: string, dnsRecordId: string): Promise { + private async addDnsRecord( + subdomain: string, + dnsRecordId: string + ): Promise { const zoneId = process.env.CLOUDFLARE_ZONE_ID; const url = `https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`; const data = { @@ -46,7 +53,10 @@ export class SubdomainService { } } - private async createNginxConfig(subdomain: string, port: number): Promise { + private async createNginxConfig( + subdomain: string, + port: number + ): Promise { const config = ` server { listen 443 ssl; @@ -63,11 +73,15 @@ server { } `; - fs.writeFileSync(`/etc/nginx/sites-available/${subdomain}`, config, { encoding: 'utf8' }); + fs.writeFileSync(`/etc/nginx/sites-available/${subdomain}`, config, { + encoding: 'utf8', + }); } private async createNginxSymlink(subdomain: string): Promise { - await execAsync(`sudo ln -s /etc/nginx/sites-available/${subdomain} /etc/nginx/sites-enabled/`); + await execAsync( + `sudo ln -s /etc/nginx/sites-available/${subdomain} /etc/nginx/sites-enabled/` + ); } private async getSSL(subdomain: string): Promise { diff --git a/src/utils/container.util.ts b/src/utils/container.util.ts index f68eca3..d8f816b 100644 --- a/src/utils/container.util.ts +++ b/src/utils/container.util.ts @@ -17,7 +17,9 @@ CMD ["${runCommand}", "${entryPoint}"] export async function getPort(findPort: number): Promise { const server = net.createServer(); return new Promise((resolve) => { - server.once('error', (err) => resolve(err.message === 'EADDRINUSE' ? getPort(findPort + 1) : findPort)); + server.once('error', (err) => + resolve(err.message === 'EADDRINUSE' ? getPort(findPort + 1) : findPort) + ); server.once('listening', () => server.close(() => resolve(findPort))); server.listen(findPort); }); diff --git a/src/utils/server.util.ts b/src/utils/server.util.ts index c66ede2..fcd2a41 100644 --- a/src/utils/server.util.ts +++ b/src/utils/server.util.ts @@ -4,7 +4,10 @@ import { promisify } from 'util'; const execAsync = promisify(exec); -export async function addRecord(subdomain: string, dnsRecordId: string): Promise { +export async function addRecord( + subdomain: string, + dnsRecordId: string +): Promise { const zoneId = process.env.CLOUDFLARE_ZONE_ID; const url = `https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`; const data = { @@ -35,7 +38,11 @@ export async function addRecord(subdomain: string, dnsRecordId: string): Promise return 'DNS record updated'; } -export async function setupSubdomain(subdomain: string, port: number, dnsRecordId: string): Promise { +export async function setupSubdomain( + subdomain: string, + port: number, + dnsRecordId: string +): Promise { await addRecord(subdomain, dnsRecordId); await createNginxConfig(subdomain, port); await createNginxSymlink(subdomain); @@ -44,7 +51,10 @@ export async function setupSubdomain(subdomain: string, port: number, dnsRecordI return 'Subdomain setup completed'; } -async function createNginxConfig(subdomain: string, port: number): Promise { +async function createNginxConfig( + subdomain: string, + port: number +): Promise { const config = ` server { listen 443 ssl; @@ -60,11 +70,15 @@ server { } } `; - fs.writeFileSync(`/etc/nginx/sites-available/${subdomain}`, config, { encoding: 'utf8' }); + fs.writeFileSync(`/etc/nginx/sites-available/${subdomain}`, config, { + encoding: 'utf8', + }); } async function createNginxSymlink(subdomain: string): Promise { - await execAsync(`sudo ln -s /etc/nginx/sites-available/${subdomain} /etc/nginx/sites-enabled/`); + await execAsync( + `sudo ln -s /etc/nginx/sites-available/${subdomain} /etc/nginx/sites-enabled/` + ); } async function getSSL(subdomain: string): Promise { From 33e5c9537b60226c237b273c28832f5314f560c3 Mon Sep 17 00:00:00 2001 From: akshat k Date: Sat, 5 Apr 2025 00:37:52 +0530 Subject: [PATCH 21/23] removed dist --- .../{index-CGI3YR-4.js => index-BcJos_jx.js} | 26 +++++++++---------- frontend/dist/assets/index-DQXFXOnt.css | 1 - frontend/dist/index.html | 13 ---------- 3 files changed, 13 insertions(+), 27 deletions(-) rename frontend/dist/assets/{index-CGI3YR-4.js => index-BcJos_jx.js} (79%) delete mode 100644 frontend/dist/assets/index-DQXFXOnt.css delete mode 100644 frontend/dist/index.html diff --git a/frontend/dist/assets/index-CGI3YR-4.js b/frontend/dist/assets/index-BcJos_jx.js similarity index 79% rename from frontend/dist/assets/index-CGI3YR-4.js rename to frontend/dist/assets/index-BcJos_jx.js index dfe65ac..e58f05d 100644 --- a/frontend/dist/assets/index-CGI3YR-4.js +++ b/frontend/dist/assets/index-BcJos_jx.js @@ -1,4 +1,4 @@ -(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const h of document.querySelectorAll('link[rel="modulepreload"]'))r(h);new MutationObserver(h=>{for(const g of h)if(g.type==="childList")for(const R of g.addedNodes)R.tagName==="LINK"&&R.rel==="modulepreload"&&r(R)}).observe(document,{childList:!0,subtree:!0});function s(h){const g={};return h.integrity&&(g.integrity=h.integrity),h.referrerPolicy&&(g.referrerPolicy=h.referrerPolicy),h.crossOrigin==="use-credentials"?g.credentials="include":h.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function r(h){if(h.ep)return;h.ep=!0;const g=s(h);fetch(h.href,g)}})();function Zd(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var gf={exports:{}},zu={};/** +(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))r(d);new MutationObserver(d=>{for(const g of d)if(g.type==="childList")for(const R of g.addedNodes)R.tagName==="LINK"&&R.rel==="modulepreload"&&r(R)}).observe(document,{childList:!0,subtree:!0});function s(d){const g={};return d.integrity&&(g.integrity=d.integrity),d.referrerPolicy&&(g.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?g.credentials="include":d.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function r(d){if(d.ep)return;d.ep=!0;const g=s(d);fetch(d.href,g)}})();function Zd(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var gf={exports:{}},Ou={};/** * @license React * react-jsx-runtime.production.js * @@ -6,7 +6,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Dd;function xy(){if(Dd)return zu;Dd=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function s(r,h,g){var R=null;if(g!==void 0&&(R=""+g),h.key!==void 0&&(R=""+h.key),"key"in h){g={};for(var O in h)O!=="key"&&(g[O]=h[O])}else g=h;return h=g.ref,{$$typeof:c,type:r,key:R,ref:h!==void 0?h:null,props:g}}return zu.Fragment=o,zu.jsx=s,zu.jsxs=s,zu}var Md;function Uy(){return Md||(Md=1,gf.exports=xy()),gf.exports}var I=Uy(),Sf={exports:{}},et={};/** + */var Dd;function xy(){if(Dd)return Ou;Dd=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function s(r,d,g){var R=null;if(g!==void 0&&(R=""+g),d.key!==void 0&&(R=""+d.key),"key"in d){g={};for(var z in d)z!=="key"&&(g[z]=d[z])}else g=d;return d=g.ref,{$$typeof:c,type:r,key:R,ref:d!==void 0?d:null,props:g}}return Ou.Fragment=o,Ou.jsx=s,Ou.jsxs=s,Ou}var Md;function Uy(){return Md||(Md=1,gf.exports=xy()),gf.exports}var I=Uy(),Sf={exports:{}},et={};/** * @license React * react.production.js * @@ -14,7 +14,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var _d;function Ny(){if(_d)return et;_d=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),g=Symbol.for("react.consumer"),R=Symbol.for("react.context"),O=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),z=Symbol.for("react.lazy"),B=Symbol.iterator;function H(y){return y===null||typeof y!="object"?null:(y=B&&y[B]||y["@@iterator"],typeof y=="function"?y:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,V={};function G(y,N,Q){this.props=y,this.context=N,this.refs=V,this.updater=Q||j}G.prototype.isReactComponent={},G.prototype.setState=function(y,N){if(typeof y!="object"&&typeof y!="function"&&y!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,y,N,"setState")},G.prototype.forceUpdate=function(y){this.updater.enqueueForceUpdate(this,y,"forceUpdate")};function q(){}q.prototype=G.prototype;function k(y,N,Q){this.props=y,this.context=N,this.refs=V,this.updater=Q||j}var X=k.prototype=new q;X.constructor=k,C(X,G.prototype),X.isPureReactComponent=!0;var ct=Array.isArray,P={H:null,A:null,T:null,S:null,V:null},xt=Object.prototype.hasOwnProperty;function Rt(y,N,Q,Y,K,ft){return Q=ft.ref,{$$typeof:c,type:y,key:N,ref:Q!==void 0?Q:null,props:ft}}function Dt(y,N){return Rt(y.type,N,void 0,void 0,void 0,y.props)}function pt(y){return typeof y=="object"&&y!==null&&y.$$typeof===c}function Jt(y){var N={"=":"=0",":":"=2"};return"$"+y.replace(/[=:]/g,function(Q){return N[Q]})}var oe=/\/+/g;function Qt(y,N){return typeof y=="object"&&y!==null&&y.key!=null?Jt(""+y.key):N.toString(36)}function bl(){}function El(y){switch(y.status){case"fulfilled":return y.value;case"rejected":throw y.reason;default:switch(typeof y.status=="string"?y.then(bl,bl):(y.status="pending",y.then(function(N){y.status==="pending"&&(y.status="fulfilled",y.value=N)},function(N){y.status==="pending"&&(y.status="rejected",y.reason=N)})),y.status){case"fulfilled":return y.value;case"rejected":throw y.reason}}throw y}function Zt(y,N,Q,Y,K){var ft=typeof y;(ft==="undefined"||ft==="boolean")&&(y=null);var tt=!1;if(y===null)tt=!0;else switch(ft){case"bigint":case"string":case"number":tt=!0;break;case"object":switch(y.$$typeof){case c:case o:tt=!0;break;case z:return tt=y._init,Zt(tt(y._payload),N,Q,Y,K)}}if(tt)return K=K(y),tt=Y===""?"."+Qt(y,0):Y,ct(K)?(Q="",tt!=null&&(Q=tt.replace(oe,"$&/")+"/"),Zt(K,N,Q,"",function(ke){return ke})):K!=null&&(pt(K)&&(K=Dt(K,Q+(K.key==null||y&&y.key===K.key?"":(""+K.key).replace(oe,"$&/")+"/")+tt)),N.push(K)),1;tt=0;var te=Y===""?".":Y+":";if(ct(y))for(var bt=0;bt>>1,y=M[vt];if(0>>1;vth(Y,W))Kh(ft,Y)?(M[vt]=ft,M[K]=W,vt=K):(M[vt]=Y,M[Q]=W,vt=Q);else if(Kh(ft,W))M[vt]=ft,M[K]=W,vt=K;else break t}}return L}function h(M,L){var W=M.sortIndex-L.sortIndex;return W!==0?W:M.id-L.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var g=performance;c.unstable_now=function(){return g.now()}}else{var R=Date,O=R.now();c.unstable_now=function(){return R.now()-O}}var p=[],m=[],z=1,B=null,H=3,j=!1,C=!1,V=!1,G=!1,q=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function ct(M){for(var L=s(m);L!==null;){if(L.callback===null)r(m);else if(L.startTime<=M)r(m),L.sortIndex=L.expirationTime,o(p,L);else break;L=s(m)}}function P(M){if(V=!1,ct(M),!C)if(s(p)!==null)C=!0,xt||(xt=!0,Qt());else{var L=s(m);L!==null&&Zt(P,L.startTime-M)}}var xt=!1,Rt=-1,Dt=5,pt=-1;function Jt(){return G?!0:!(c.unstable_now()-ptM&&Jt());){var vt=B.callback;if(typeof vt=="function"){B.callback=null,H=B.priorityLevel;var y=vt(B.expirationTime<=M);if(M=c.unstable_now(),typeof y=="function"){B.callback=y,ct(M),L=!0;break e}B===s(p)&&r(p),ct(M)}else r(p);B=s(p)}if(B!==null)L=!0;else{var N=s(m);N!==null&&Zt(P,N.startTime-M),L=!1}}break t}finally{B=null,H=W,j=!1}L=void 0}}finally{L?Qt():xt=!1}}}var Qt;if(typeof X=="function")Qt=function(){X(oe)};else if(typeof MessageChannel<"u"){var bl=new MessageChannel,El=bl.port2;bl.port1.onmessage=oe,Qt=function(){El.postMessage(null)}}else Qt=function(){q(oe,0)};function Zt(M,L){Rt=q(function(){M(c.unstable_now())},L)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(M){M.callback=null},c.unstable_forceFrameRate=function(M){0>M||125vt?(M.sortIndex=W,o(m,M),s(p)===null&&M===s(m)&&(V?(k(Rt),Rt=-1):V=!0,Zt(P,W-vt))):(M.sortIndex=y,o(p,M),C||j||(C=!0,xt||(xt=!0,Qt()))),M},c.unstable_shouldYield=Jt,c.unstable_wrapCallback=function(M){var L=H;return function(){var W=H;H=L;try{return M.apply(this,arguments)}finally{H=W}}}}(Ef)),Ef}var Nd;function By(){return Nd||(Nd=1,bf.exports=Cy()),bf.exports}var Tf={exports:{}},Kt={};/** + */var Ud;function Cy(){return Ud||(Ud=1,function(c){function o(M,L){var W=M.length;M.push(L);t:for(;0>>1,y=M[vt];if(0>>1;vtd(Y,W))Kd(ft,Y)?(M[vt]=ft,M[K]=W,vt=K):(M[vt]=Y,M[Q]=W,vt=Q);else if(Kd(ft,W))M[vt]=ft,M[K]=W,vt=K;else break t}}return L}function d(M,L){var W=M.sortIndex-L.sortIndex;return W!==0?W:M.id-L.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var g=performance;c.unstable_now=function(){return g.now()}}else{var R=Date,z=R.now();c.unstable_now=function(){return R.now()-z}}var p=[],m=[],O=1,B=null,H=3,j=!1,C=!1,V=!1,G=!1,q=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function ct(M){for(var L=s(m);L!==null;){if(L.callback===null)r(m);else if(L.startTime<=M)r(m),L.sortIndex=L.expirationTime,o(p,L);else break;L=s(m)}}function P(M){if(V=!1,ct(M),!C)if(s(p)!==null)C=!0,xt||(xt=!0,Qt());else{var L=s(m);L!==null&&Zt(P,L.startTime-M)}}var xt=!1,Rt=-1,Dt=5,pt=-1;function Jt(){return G?!0:!(c.unstable_now()-ptM&&Jt());){var vt=B.callback;if(typeof vt=="function"){B.callback=null,H=B.priorityLevel;var y=vt(B.expirationTime<=M);if(M=c.unstable_now(),typeof y=="function"){B.callback=y,ct(M),L=!0;break e}B===s(p)&&r(p),ct(M)}else r(p);B=s(p)}if(B!==null)L=!0;else{var N=s(m);N!==null&&Zt(P,N.startTime-M),L=!1}}break t}finally{B=null,H=W,j=!1}L=void 0}}finally{L?Qt():xt=!1}}}var Qt;if(typeof X=="function")Qt=function(){X(oe)};else if(typeof MessageChannel<"u"){var bl=new MessageChannel,El=bl.port2;bl.port1.onmessage=oe,Qt=function(){El.postMessage(null)}}else Qt=function(){q(oe,0)};function Zt(M,L){Rt=q(function(){M(c.unstable_now())},L)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(M){M.callback=null},c.unstable_forceFrameRate=function(M){0>M||125vt?(M.sortIndex=W,o(m,M),s(p)===null&&M===s(m)&&(V?(k(Rt),Rt=-1):V=!0,Zt(P,W-vt))):(M.sortIndex=y,o(p,M),C||j||(C=!0,xt||(xt=!0,Qt()))),M},c.unstable_shouldYield=Jt,c.unstable_wrapCallback=function(M){var L=H;return function(){var W=H;H=L;try{return M.apply(this,arguments)}finally{H=W}}}}(Ef)),Ef}var Nd;function By(){return Nd||(Nd=1,bf.exports=Cy()),bf.exports}var Tf={exports:{}},Kt={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Hd;function qy(){if(Hd)return Kt;Hd=1;var c=Mf();function o(p){var m="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(o){console.error(o)}}return c(),Tf.exports=qy(),Tf.exports}/** + */var Hd;function qy(){if(Hd)return Kt;Hd=1;var c=Mf();function o(p){var m="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(o){console.error(o)}}return c(),Tf.exports=qy(),Tf.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Bd;function jy(){if(Bd)return Ou;Bd=1;var c=By(),o=Mf(),s=Yy();function r(t){var e="https://react.dev/errors/"+t;if(1y||(t.current=vt[y],vt[y]=null,y--)}function Y(t,e){y++,vt[y]=t.current,t.current=e}var K=N(null),ft=N(null),tt=N(null),te=N(null);function bt(t,e){switch(Y(tt,e),Y(ft,t),Y(K,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?ed(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=ed(e),t=ld(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Q(K),Y(K,t)}function ke(){Q(K),Q(ft),Q(tt)}function ei(t){t.memoizedState!==null&&Y(te,t);var e=K.current,l=ld(e,t.type);e!==l&&(Y(ft,t),Y(K,l))}function Hu(t){ft.current===t&&(Q(K),Q(ft)),te.current===t&&(Q(te),bu._currentValue=W)}var li=Object.prototype.hasOwnProperty,ai=c.unstable_scheduleCallback,ui=c.unstable_cancelCallback,fh=c.unstable_shouldYield,rh=c.unstable_requestPaint,Ae=c.unstable_now,oh=c.unstable_getCurrentPriorityLevel,Cf=c.unstable_ImmediatePriority,Bf=c.unstable_UserBlockingPriority,Cu=c.unstable_NormalPriority,sh=c.unstable_LowPriority,qf=c.unstable_IdlePriority,dh=c.log,hh=c.unstable_setDisableYieldValue,Ma=null,ee=null;function We(t){if(typeof dh=="function"&&hh(t),ee&&typeof ee.setStrictMode=="function")try{ee.setStrictMode(Ma,t)}catch{}}var le=Math.clz32?Math.clz32:vh,mh=Math.log,yh=Math.LN2;function vh(t){return t>>>=0,t===0?32:31-(mh(t)/yh|0)|0}var Bu=256,qu=4194304;function Tl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Yu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var f=a&134217727;return f!==0?(a=f&~n,a!==0?u=Tl(a):(i&=f,i!==0?u=Tl(i):l||(l=f&~t,l!==0&&(u=Tl(l))))):(f=a&~n,f!==0?u=Tl(f):i!==0?u=Tl(i):l||(l=a&~t,l!==0&&(u=Tl(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function _a(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function gh(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Yf(){var t=Bu;return Bu<<=1,(Bu&4194048)===0&&(Bu=256),t}function jf(){var t=qu;return qu<<=1,(qu&62914560)===0&&(qu=4194304),t}function ni(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function xa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Sh(t,e,l,a,u,n){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var f=t.entanglements,d=t.expirationTimes,E=t.hiddenUpdates;for(l=i&~l;0y||(t.current=vt[y],vt[y]=null,y--)}function Y(t,e){y++,vt[y]=t.current,t.current=e}var K=N(null),ft=N(null),tt=N(null),te=N(null);function bt(t,e){switch(Y(tt,e),Y(ft,t),Y(K,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?ed(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=ed(e),t=ld(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Q(K),Y(K,t)}function ke(){Q(K),Q(ft),Q(tt)}function ei(t){t.memoizedState!==null&&Y(te,t);var e=K.current,l=ld(e,t.type);e!==l&&(Y(ft,t),Y(K,l))}function Hu(t){ft.current===t&&(Q(K),Q(ft)),te.current===t&&(Q(te),bu._currentValue=W)}var li=Object.prototype.hasOwnProperty,ai=c.unstable_scheduleCallback,ui=c.unstable_cancelCallback,fh=c.unstable_shouldYield,rh=c.unstable_requestPaint,Ae=c.unstable_now,oh=c.unstable_getCurrentPriorityLevel,Cf=c.unstable_ImmediatePriority,Bf=c.unstable_UserBlockingPriority,Cu=c.unstable_NormalPriority,sh=c.unstable_LowPriority,qf=c.unstable_IdlePriority,dh=c.log,hh=c.unstable_setDisableYieldValue,Ma=null,ee=null;function We(t){if(typeof dh=="function"&&hh(t),ee&&typeof ee.setStrictMode=="function")try{ee.setStrictMode(Ma,t)}catch{}}var le=Math.clz32?Math.clz32:vh,mh=Math.log,yh=Math.LN2;function vh(t){return t>>>=0,t===0?32:31-(mh(t)/yh|0)|0}var Bu=256,qu=4194304;function Tl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Yu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var f=a&134217727;return f!==0?(a=f&~n,a!==0?u=Tl(a):(i&=f,i!==0?u=Tl(i):l||(l=f&~t,l!==0&&(u=Tl(l))))):(f=a&~n,f!==0?u=Tl(f):i!==0?u=Tl(i):l||(l=a&~t,l!==0&&(u=Tl(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function _a(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function gh(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Yf(){var t=Bu;return Bu<<=1,(Bu&4194048)===0&&(Bu=256),t}function jf(){var t=qu;return qu<<=1,(qu&62914560)===0&&(qu=4194304),t}function ni(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function xa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Sh(t,e,l,a,u,n){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var f=t.entanglements,h=t.expirationTimes,E=t.hiddenUpdates;for(l=i&~l;0)":-1u||d[a]!==E[u]){var D=` -`+d[a].replace(" at new "," at ");return t.displayName&&D.includes("")&&(D=D.replace("",t.displayName)),D}while(1<=a&&0<=u);break}}}finally{si=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Kl(l):""}function Rh(t){switch(t.tag){case 26:case 27:case 5:return Kl(t.type);case 16:return Kl("Lazy");case 13:return Kl("Suspense");case 19:return Kl("SuspenseList");case 0:case 15:return di(t.type,!1);case 11:return di(t.type.render,!1);case 1:return di(t.type,!0);case 31:return Kl("Activity");default:return""}}function $f(t){try{var e="";do e+=Rh(t),t=t.return;while(t);return e}catch(l){return` +`);for(u=a=0;au||h[a]!==E[u]){var D=` +`+h[a].replace(" at new "," at ");return t.displayName&&D.includes("")&&(D=D.replace("",t.displayName)),D}while(1<=a&&0<=u);break}}}finally{si=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Kl(l):""}function Rh(t){switch(t.tag){case 26:case 27:case 5:return Kl(t.type);case 16:return Kl("Lazy");case 13:return Kl("Suspense");case 19:return Kl("SuspenseList");case 0:case 15:return di(t.type,!1);case 11:return di(t.type.render,!1);case 1:return di(t.type,!0);case 31:return Kl("Activity");default:return""}}function $f(t){try{var e="";do e+=Rh(t),t=t.return;while(t);return e}catch(l){return` Error generating stack: `+l.message+` -`+l.stack}}function se(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function kf(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function zh(t){var e=kf(t)?"checked":"value",l=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),a=""+t[e];if(!t.hasOwnProperty(e)&&typeof l<"u"&&typeof l.get=="function"&&typeof l.set=="function"){var u=l.get,n=l.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return u.call(this)},set:function(i){a=""+i,n.call(this,i)}}),Object.defineProperty(t,e,{enumerable:l.enumerable}),{getValue:function(){return a},setValue:function(i){a=""+i},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Gu(t){t._valueTracker||(t._valueTracker=zh(t))}function Wf(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var l=e.getValue(),a="";return t&&(a=kf(t)?t.checked?"true":"false":t.value),t=a,t!==l?(e.setValue(t),!0):!1}function Xu(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Oh=/[\n"\\]/g;function de(t){return t.replace(Oh,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function hi(t,e,l,a,u,n,i,f){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),e!=null?i==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+se(e)):t.value!==""+se(e)&&(t.value=""+se(e)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),e!=null?mi(t,i,se(e)):l!=null?mi(t,i,se(l)):a!=null&&t.removeAttribute("value"),u==null&&n!=null&&(t.defaultChecked=!!n),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?t.name=""+se(f):t.removeAttribute("name")}function Ff(t,e,l,a,u,n,i,f){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(t.type=n),e!=null||l!=null){if(!(n!=="submit"&&n!=="reset"||e!=null))return;l=l!=null?""+se(l):"",e=e!=null?""+se(e):l,f||e===t.value||(t.value=e),t.defaultValue=e}a=a??u,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=f?t.checked:!!a,t.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i)}function mi(t,e,l){e==="number"&&Xu(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function Jl(t,e,l,a){if(t=t.options,e){e={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),pi=!1;if(Ne)try{var Ca={};Object.defineProperty(Ca,"passive",{get:function(){pi=!0}}),window.addEventListener("test",Ca,Ca),window.removeEventListener("test",Ca,Ca)}catch{pi=!1}var Pe=null,bi=null,Zu=null;function ur(){if(Zu)return Zu;var t,e=bi,l=e.length,a,u="value"in Pe?Pe.value:Pe.textContent,n=u.length;for(t=0;t=Ya),or=" ",sr=!1;function dr(t,e){switch(t){case"keyup":return tm.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function hr(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Fl=!1;function lm(t,e){switch(t){case"compositionend":return hr(e);case"keypress":return e.which!==32?null:(sr=!0,or);case"textInput":return t=e.data,t===or&&sr?null:t;default:return null}}function am(t,e){if(Fl)return t==="compositionend"||!zi&&dr(t,e)?(t=ur(),Zu=bi=Pe=null,Fl=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=a}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=Er(l)}}function Ar(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Ar(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Rr(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Xu(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=Xu(t.document)}return e}function Mi(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var sm=Ne&&"documentMode"in document&&11>=document.documentMode,Pl=null,_i=null,Xa=null,xi=!1;function zr(t,e,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;xi||Pl==null||Pl!==Xu(a)||(a=Pl,"selectionStart"in a&&Mi(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Xa&&Ga(Xa,a)||(Xa=a,a=Cn(_i,"onSelect"),0>=i,u-=i,Ce=1<<32-le(e)+u|l<n?n:8;var i=M.T,f={};M.T=f,yc(t,!1,e,l);try{var d=u(),E=M.S;if(E!==null&&E(f,d),d!==null&&typeof d=="object"&&typeof d.then=="function"){var D=bm(d,a);lu(t,e,D,fe(t))}else lu(t,e,a,fe(t))}catch(x){lu(t,e,{then:function(){},status:"rejected",reason:x},fe())}finally{L.p=n,M.T=i}}function zm(){}function hc(t,e,l,a){if(t.tag!==5)throw Error(r(476));var u=Do(t).queue;Oo(t,u,e,W,l===null?zm:function(){return Mo(t),l(a)})}function Do(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:W,baseState:W,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:W},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function Mo(t){var e=Do(t).next.queue;lu(t,e,{},fe())}function mc(){return wt(bu)}function _o(){return Nt().memoizedState}function xo(){return Nt().memoizedState}function Om(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=fe();t=el(l);var a=ll(e,t,l);a!==null&&(re(a,e,l),Wa(a,e,l)),e={cache:Vi()},t.payload=e;return}e=e.return}}function Dm(t,e,l){var a=fe();l={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null},mn(t)?No(e,l):(l=Ci(t,e,l,a),l!==null&&(re(l,t,a),Ho(l,e,a)))}function Uo(t,e,l){var a=fe();lu(t,e,l,a)}function lu(t,e,l,a){var u={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null};if(mn(t))No(e,u);else{var n=t.alternate;if(t.lanes===0&&(n===null||n.lanes===0)&&(n=e.lastRenderedReducer,n!==null))try{var i=e.lastRenderedState,f=n(i,l);if(u.hasEagerState=!0,u.eagerState=f,ae(f,i))return Wu(t,e,u,0),St===null&&ku(),!1}catch{}finally{}if(l=Ci(t,e,u,a),l!==null)return re(l,t,a),Ho(l,e,a),!0}return!1}function yc(t,e,l,a){if(a={lane:2,revertLane:Jc(),action:a,hasEagerState:!1,eagerState:null,next:null},mn(t)){if(e)throw Error(r(479))}else e=Ci(t,l,a,2),e!==null&&re(e,t,2)}function mn(t){var e=t.alternate;return t===lt||e!==null&&e===lt}function No(t,e){fa=fn=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function Ho(t,e,l){if((l&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,Gf(t,l)}}var yn={readContext:wt,use:on,useCallback:Mt,useContext:Mt,useEffect:Mt,useImperativeHandle:Mt,useLayoutEffect:Mt,useInsertionEffect:Mt,useMemo:Mt,useReducer:Mt,useRef:Mt,useState:Mt,useDebugValue:Mt,useDeferredValue:Mt,useTransition:Mt,useSyncExternalStore:Mt,useId:Mt,useHostTransitionStatus:Mt,useFormState:Mt,useActionState:Mt,useOptimistic:Mt,useMemoCache:Mt,useCacheRefresh:Mt},Co={readContext:wt,use:on,useCallback:function(t,e){return Ft().memoizedState=[t,e===void 0?null:e],t},useContext:wt,useEffect:go,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,hn(4194308,4,Eo.bind(null,e,t),l)},useLayoutEffect:function(t,e){return hn(4194308,4,t,e)},useInsertionEffect:function(t,e){hn(4,2,t,e)},useMemo:function(t,e){var l=Ft();e=e===void 0?null:e;var a=t();if(Bl){We(!0);try{t()}finally{We(!1)}}return l.memoizedState=[a,e],a},useReducer:function(t,e,l){var a=Ft();if(l!==void 0){var u=l(e);if(Bl){We(!0);try{l(e)}finally{We(!1)}}}else u=e;return a.memoizedState=a.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},a.queue=t,t=t.dispatch=Dm.bind(null,lt,t),[a.memoizedState,t]},useRef:function(t){var e=Ft();return t={current:t},e.memoizedState=t},useState:function(t){t=rc(t);var e=t.queue,l=Uo.bind(null,lt,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:sc,useDeferredValue:function(t,e){var l=Ft();return dc(l,t,e)},useTransition:function(){var t=rc(!1);return t=Oo.bind(null,lt,t.queue,!0,!1),Ft().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var a=lt,u=Ft();if(ot){if(l===void 0)throw Error(r(407));l=l()}else{if(l=e(),St===null)throw Error(r(349));(it&124)!==0||to(a,e,l)}u.memoizedState=l;var n={value:l,getSnapshot:e};return u.queue=n,go(lo.bind(null,a,n,t),[t]),a.flags|=2048,oa(9,dn(),eo.bind(null,a,n,l,e),null),l},useId:function(){var t=Ft(),e=St.identifierPrefix;if(ot){var l=Be,a=Ce;l=(a&~(1<<32-le(a)-1)).toString(32)+l,e="«"+e+"R"+l,l=rn++,0$?(jt=w,w=null):jt=w.sibling;var rt=T(S,w,b[$],_);if(rt===null){w===null&&(w=jt);break}t&&w&&rt.alternate===null&&e(S,w),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt,w=jt}if($===b.length)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;$$?(jt=w,w=null):jt=w.sibling;var pl=T(S,w,rt.value,_);if(pl===null){w===null&&(w=jt);break}t&&w&&pl.alternate===null&&e(S,w),v=n(pl,v,$),at===null?Z=pl:at.sibling=pl,at=pl,w=jt}if(rt.done)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;!rt.done;$++,rt=b.next())rt=x(S,rt.value,_),rt!==null&&(v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return ot&&_l(S,$),Z}for(w=a(w);!rt.done;$++,rt=b.next())rt=A(w,S,$,rt.value,_),rt!==null&&(t&&rt.alternate!==null&&w.delete(rt.key===null?$:rt.key),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return t&&w.forEach(function(_y){return e(S,_y)}),ot&&_l(S,$),Z}function yt(S,v,b,_){if(typeof b=="object"&&b!==null&&b.type===C&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case H:t:{for(var Z=b.key;v!==null;){if(v.key===Z){if(Z=b.type,Z===C){if(v.tag===7){l(S,v.sibling),_=u(v,b.props.children),_.return=S,S=_;break t}}else if(v.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===Dt&&qo(Z)===v.type){l(S,v.sibling),_=u(v,b.props),uu(_,b),_.return=S,S=_;break t}l(S,v);break}else e(S,v);v=v.sibling}b.type===C?(_=Dl(b.props.children,S.mode,_,b.key),_.return=S,S=_):(_=Pu(b.type,b.key,b.props,null,S.mode,_),uu(_,b),_.return=S,S=_)}return i(S);case j:t:{for(Z=b.key;v!==null;){if(v.key===Z)if(v.tag===4&&v.stateNode.containerInfo===b.containerInfo&&v.stateNode.implementation===b.implementation){l(S,v.sibling),_=u(v,b.children||[]),_.return=S,S=_;break t}else{l(S,v);break}else e(S,v);v=v.sibling}_=Yi(b,S.mode,_),_.return=S,S=_}return i(S);case Dt:return Z=b._init,b=Z(b._payload),yt(S,v,b,_)}if(Zt(b))return F(S,v,b,_);if(Qt(b)){if(Z=Qt(b),typeof Z!="function")throw Error(r(150));return b=Z.call(b),J(S,v,b,_)}if(typeof b.then=="function")return yt(S,v,vn(b),_);if(b.$$typeof===X)return yt(S,v,ln(S,b),_);gn(S,b)}return typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint"?(b=""+b,v!==null&&v.tag===6?(l(S,v.sibling),_=u(v,b),_.return=S,S=_):(l(S,v),_=qi(b,S.mode,_),_.return=S,S=_),i(S)):l(S,v)}return function(S,v,b,_){try{au=0;var Z=yt(S,v,b,_);return sa=null,Z}catch(w){if(w===$a||w===un)throw w;var at=ue(29,w,null,S.mode);return at.lanes=_,at.return=S,at}finally{}}}var da=Yo(!0),jo=Yo(!1),ge=N(null),ze=null;function ul(t){var e=t.alternate;Y(Ct,Ct.current&1),Y(ge,t),ze===null&&(e===null||ca.current!==null||e.memoizedState!==null)&&(ze=t)}function Lo(t){if(t.tag===22){if(Y(Ct,Ct.current),Y(ge,t),ze===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(ze=t)}}else nl()}function nl(){Y(Ct,Ct.current),Y(ge,ge.current)}function Le(t){Q(ge),ze===t&&(ze=null),Q(Ct)}var Ct=N(0);function Sn(t){for(var e=t;e!==null;){if(e.tag===13){var l=e.memoizedState;if(l!==null&&(l=l.dehydrated,l===null||l.data==="$?"||nf(l)))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if((e.flags&128)!==0)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}function vc(t,e,l,a){e=t.memoizedState,l=l(a,e),l=l==null?e:z({},e,l),t.memoizedState=l,t.lanes===0&&(t.updateQueue.baseState=l)}var gc={enqueueSetState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueReplaceState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.tag=1,u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueForceUpdate:function(t,e){t=t._reactInternals;var l=fe(),a=el(l);a.tag=2,e!=null&&(a.callback=e),e=ll(t,a,l),e!==null&&(re(e,t,l),Wa(e,t,l))}};function Go(t,e,l,a,u,n,i){return t=t.stateNode,typeof t.shouldComponentUpdate=="function"?t.shouldComponentUpdate(a,n,i):e.prototype&&e.prototype.isPureReactComponent?!Ga(l,a)||!Ga(u,n):!0}function Xo(t,e,l,a){t=e.state,typeof e.componentWillReceiveProps=="function"&&e.componentWillReceiveProps(l,a),typeof e.UNSAFE_componentWillReceiveProps=="function"&&e.UNSAFE_componentWillReceiveProps(l,a),e.state!==t&&gc.enqueueReplaceState(e,e.state,null)}function ql(t,e){var l=e;if("ref"in e){l={};for(var a in e)a!=="ref"&&(l[a]=e[a])}if(t=t.defaultProps){l===e&&(l=z({},l));for(var u in t)l[u]===void 0&&(l[u]=t[u])}return l}var pn=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var e=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(e))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)};function Qo(t){pn(t)}function Zo(t){console.error(t)}function Vo(t){pn(t)}function bn(t,e){try{var l=t.onUncaughtError;l(e.value,{componentStack:e.stack})}catch(a){setTimeout(function(){throw a})}}function wo(t,e,l){try{var a=t.onCaughtError;a(l.value,{componentStack:l.stack,errorBoundary:e.tag===1?e.stateNode:null})}catch(u){setTimeout(function(){throw u})}}function Sc(t,e,l){return l=el(l),l.tag=3,l.payload={element:null},l.callback=function(){bn(t,e)},l}function Ko(t){return t=el(t),t.tag=3,t}function Jo(t,e,l,a){var u=l.type.getDerivedStateFromError;if(typeof u=="function"){var n=a.value;t.payload=function(){return u(n)},t.callback=function(){wo(e,l,a)}}var i=l.stateNode;i!==null&&typeof i.componentDidCatch=="function"&&(t.callback=function(){wo(e,l,a),typeof u!="function"&&(sl===null?sl=new Set([this]):sl.add(this));var f=a.stack;this.componentDidCatch(a.value,{componentStack:f!==null?f:""})})}function _m(t,e,l,a,u){if(l.flags|=32768,a!==null&&typeof a=="object"&&typeof a.then=="function"){if(e=l.alternate,e!==null&&wa(e,l,u,!0),l=ge.current,l!==null){switch(l.tag){case 13:return ze===null?Qc():l.alternate===null&&Ot===0&&(Ot=3),l.flags&=-257,l.flags|=65536,l.lanes=u,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?l.updateQueue=new Set([a]):e.add(a),Vc(t,a,u)),!1;case 22:return l.flags|=65536,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?(e={transitions:null,markerInstances:null,retryQueue:new Set([a])},l.updateQueue=e):(l=e.retryQueue,l===null?e.retryQueue=new Set([a]):l.add(a)),Vc(t,a,u)),!1}throw Error(r(435,l.tag))}return Vc(t,a,u),Qc(),!1}if(ot)return e=ge.current,e!==null?((e.flags&65536)===0&&(e.flags|=256),e.flags|=65536,e.lanes=u,a!==Gi&&(t=Error(r(422),{cause:a}),Va(he(t,l)))):(a!==Gi&&(e=Error(r(423),{cause:a}),Va(he(e,l))),t=t.current.alternate,t.flags|=65536,u&=-u,t.lanes|=u,a=he(a,l),u=Sc(t.stateNode,a,u),Wi(t,u),Ot!==4&&(Ot=2)),!1;var n=Error(r(520),{cause:a});if(n=he(n,l),su===null?su=[n]:su.push(n),Ot!==4&&(Ot=2),e===null)return!0;a=he(a,l),l=e;do{switch(l.tag){case 3:return l.flags|=65536,t=u&-u,l.lanes|=t,t=Sc(l.stateNode,a,t),Wi(l,t),!1;case 1:if(e=l.type,n=l.stateNode,(l.flags&128)===0&&(typeof e.getDerivedStateFromError=="function"||n!==null&&typeof n.componentDidCatch=="function"&&(sl===null||!sl.has(n))))return l.flags|=65536,u&=-u,l.lanes|=u,u=Ko(u),Jo(u,t,l,a),Wi(l,u),!1}l=l.return}while(l!==null);return!1}var $o=Error(r(461)),qt=!1;function Lt(t,e,l,a){e.child=t===null?jo(e,null,l,a):da(e,t.child,l,a)}function ko(t,e,l,a,u){l=l.render;var n=e.ref;if("ref"in a){var i={};for(var f in a)f!=="ref"&&(i[f]=a[f])}else i=a;return Hl(e),a=ec(t,e,l,i,n,u),f=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&f&&ji(e),e.flags|=1,Lt(t,e,a,u),e.child)}function Wo(t,e,l,a,u){if(t===null){var n=l.type;return typeof n=="function"&&!Bi(n)&&n.defaultProps===void 0&&l.compare===null?(e.tag=15,e.type=n,Fo(t,e,n,a,u)):(t=Pu(l.type,null,a,e,e.mode,u),t.ref=e.ref,t.return=e,e.child=t)}if(n=t.child,!Oc(t,u)){var i=n.memoizedProps;if(l=l.compare,l=l!==null?l:Ga,l(i,a)&&t.ref===e.ref)return Ge(t,e,u)}return e.flags|=1,t=He(n,a),t.ref=e.ref,t.return=e,e.child=t}function Fo(t,e,l,a,u){if(t!==null){var n=t.memoizedProps;if(Ga(n,a)&&t.ref===e.ref)if(qt=!1,e.pendingProps=a=n,Oc(t,u))(t.flags&131072)!==0&&(qt=!0);else return e.lanes=t.lanes,Ge(t,e,u)}return pc(t,e,l,a,u)}function Po(t,e,l){var a=e.pendingProps,u=a.children,n=t!==null?t.memoizedState:null;if(a.mode==="hidden"){if((e.flags&128)!==0){if(a=n!==null?n.baseLanes|l:l,t!==null){for(u=e.child=t.child,n=0;u!==null;)n=n|u.lanes|u.childLanes,u=u.sibling;e.childLanes=n&~a}else e.childLanes=0,e.child=null;return Io(t,e,a,l)}if((l&536870912)!==0)e.memoizedState={baseLanes:0,cachePool:null},t!==null&&an(e,n!==null?n.cachePool:null),n!==null?Wr(e,n):Pi(),Lo(e);else return e.lanes=e.childLanes=536870912,Io(t,e,n!==null?n.baseLanes|l:l,l)}else n!==null?(an(e,n.cachePool),Wr(e,n),nl(),e.memoizedState=null):(t!==null&&an(e,null),Pi(),nl());return Lt(t,e,u,l),e.child}function Io(t,e,l,a){var u=Ki();return u=u===null?null:{parent:Ht._currentValue,pool:u},e.memoizedState={baseLanes:l,cachePool:u},t!==null&&an(e,null),Pi(),Lo(e),t!==null&&wa(t,e,a,!0),null}function En(t,e){var l=e.ref;if(l===null)t!==null&&t.ref!==null&&(e.flags|=4194816);else{if(typeof l!="function"&&typeof l!="object")throw Error(r(284));(t===null||t.ref!==l)&&(e.flags|=4194816)}}function pc(t,e,l,a,u){return Hl(e),l=ec(t,e,l,a,void 0,u),a=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,u),e.child)}function ts(t,e,l,a,u,n){return Hl(e),e.updateQueue=null,l=Pr(e,a,l,u),Fr(t),a=lc(),t!==null&&!qt?(ac(t,e,n),Ge(t,e,n)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,n),e.child)}function es(t,e,l,a,u){if(Hl(e),e.stateNode===null){var n=la,i=l.contextType;typeof i=="object"&&i!==null&&(n=wt(i)),n=new l(a,n),e.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,n.updater=gc,e.stateNode=n,n._reactInternals=e,n=e.stateNode,n.props=a,n.state=e.memoizedState,n.refs={},$i(e),i=l.contextType,n.context=typeof i=="object"&&i!==null?wt(i):la,n.state=e.memoizedState,i=l.getDerivedStateFromProps,typeof i=="function"&&(vc(e,l,i,a),n.state=e.memoizedState),typeof l.getDerivedStateFromProps=="function"||typeof n.getSnapshotBeforeUpdate=="function"||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(i=n.state,typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount(),i!==n.state&&gc.enqueueReplaceState(n,n.state,null),Pa(e,a,n,u),Fa(),n.state=e.memoizedState),typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!0}else if(t===null){n=e.stateNode;var f=e.memoizedProps,d=ql(l,f);n.props=d;var E=n.context,D=l.contextType;i=la,typeof D=="object"&&D!==null&&(i=wt(D));var x=l.getDerivedStateFromProps;D=typeof x=="function"||typeof n.getSnapshotBeforeUpdate=="function",f=e.pendingProps!==f,D||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(f||E!==i)&&Xo(e,n,a,i),tl=!1;var T=e.memoizedState;n.state=T,Pa(e,a,n,u),Fa(),E=e.memoizedState,f||T!==E||tl?(typeof x=="function"&&(vc(e,l,x,a),E=e.memoizedState),(d=tl||Go(e,l,d,a,T,E,i))?(D||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount()),typeof n.componentDidMount=="function"&&(e.flags|=4194308)):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),e.memoizedProps=a,e.memoizedState=E),n.props=a,n.state=E,n.context=i,a=d):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!1)}else{n=e.stateNode,ki(t,e),i=e.memoizedProps,D=ql(l,i),n.props=D,x=e.pendingProps,T=n.context,E=l.contextType,d=la,typeof E=="object"&&E!==null&&(d=wt(E)),f=l.getDerivedStateFromProps,(E=typeof f=="function"||typeof n.getSnapshotBeforeUpdate=="function")||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(i!==x||T!==d)&&Xo(e,n,a,d),tl=!1,T=e.memoizedState,n.state=T,Pa(e,a,n,u),Fa();var A=e.memoizedState;i!==x||T!==A||tl||t!==null&&t.dependencies!==null&&en(t.dependencies)?(typeof f=="function"&&(vc(e,l,f,a),A=e.memoizedState),(D=tl||Go(e,l,D,a,T,A,d)||t!==null&&t.dependencies!==null&&en(t.dependencies))?(E||typeof n.UNSAFE_componentWillUpdate!="function"&&typeof n.componentWillUpdate!="function"||(typeof n.componentWillUpdate=="function"&&n.componentWillUpdate(a,A,d),typeof n.UNSAFE_componentWillUpdate=="function"&&n.UNSAFE_componentWillUpdate(a,A,d)),typeof n.componentDidUpdate=="function"&&(e.flags|=4),typeof n.getSnapshotBeforeUpdate=="function"&&(e.flags|=1024)):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),e.memoizedProps=a,e.memoizedState=A),n.props=a,n.state=A,n.context=d,a=D):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),a=!1)}return n=a,En(t,e),a=(e.flags&128)!==0,n||a?(n=e.stateNode,l=a&&typeof l.getDerivedStateFromError!="function"?null:n.render(),e.flags|=1,t!==null&&a?(e.child=da(e,t.child,null,u),e.child=da(e,null,l,u)):Lt(t,e,l,u),e.memoizedState=n.state,t=e.child):t=Ge(t,e,u),t}function ls(t,e,l,a){return Za(),e.flags|=256,Lt(t,e,l,a),e.child}var bc={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Ec(t){return{baseLanes:t,cachePool:Qr()}}function Tc(t,e,l){return t=t!==null?t.childLanes&~l:0,e&&(t|=Se),t}function as(t,e,l){var a=e.pendingProps,u=!1,n=(e.flags&128)!==0,i;if((i=n)||(i=t!==null&&t.memoizedState===null?!1:(Ct.current&2)!==0),i&&(u=!0,e.flags&=-129),i=(e.flags&32)!==0,e.flags&=-33,t===null){if(ot){if(u?ul(e):nl(),ot){var f=zt,d;if(d=f){t:{for(d=f,f=Re;d.nodeType!==8;){if(!f){f=null;break t}if(d=Te(d.nextSibling),d===null){f=null;break t}}f=d}f!==null?(e.memoizedState={dehydrated:f,treeContext:Ml!==null?{id:Ce,overflow:Be}:null,retryLane:536870912,hydrationErrors:null},d=ue(18,null,null,0),d.stateNode=f,d.return=e,e.child=d,$t=e,zt=null,d=!0):d=!1}d||Ul(e)}if(f=e.memoizedState,f!==null&&(f=f.dehydrated,f!==null))return nf(f)?e.lanes=32:e.lanes=536870912,null;Le(e)}return f=a.children,a=a.fallback,u?(nl(),u=e.mode,f=Tn({mode:"hidden",children:f},u),a=Dl(a,u,l,null),f.return=e,a.return=e,f.sibling=a,e.child=f,u=e.child,u.memoizedState=Ec(l),u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),Ac(e,f))}if(d=t.memoizedState,d!==null&&(f=d.dehydrated,f!==null)){if(n)e.flags&256?(ul(e),e.flags&=-257,e=Rc(t,e,l)):e.memoizedState!==null?(nl(),e.child=t.child,e.flags|=128,e=null):(nl(),u=a.fallback,f=e.mode,a=Tn({mode:"visible",children:a.children},f),u=Dl(u,f,l,null),u.flags|=2,a.return=e,u.return=e,a.sibling=u,e.child=a,da(e,t.child,null,l),a=e.child,a.memoizedState=Ec(l),a.childLanes=Tc(t,i,l),e.memoizedState=bc,e=u);else if(ul(e),nf(f)){if(i=f.nextSibling&&f.nextSibling.dataset,i)var E=i.dgst;i=E,a=Error(r(419)),a.stack="",a.digest=i,Va({value:a,source:null,stack:null}),e=Rc(t,e,l)}else if(qt||wa(t,e,l,!1),i=(l&t.childLanes)!==0,qt||i){if(i=St,i!==null&&(a=l&-l,a=(a&42)!==0?1:ii(a),a=(a&(i.suspendedLanes|l))!==0?0:a,a!==0&&a!==d.retryLane))throw d.retryLane=a,ea(t,a),re(i,t,a),$o;f.data==="$?"||Qc(),e=Rc(t,e,l)}else f.data==="$?"?(e.flags|=192,e.child=t.child,e=null):(t=d.treeContext,zt=Te(f.nextSibling),$t=e,ot=!0,xl=null,Re=!1,t!==null&&(ye[ve++]=Ce,ye[ve++]=Be,ye[ve++]=Ml,Ce=t.id,Be=t.overflow,Ml=e),e=Ac(e,a.children),e.flags|=4096);return e}return u?(nl(),u=a.fallback,f=e.mode,d=t.child,E=d.sibling,a=He(d,{mode:"hidden",children:a.children}),a.subtreeFlags=d.subtreeFlags&65011712,E!==null?u=He(E,u):(u=Dl(u,f,l,null),u.flags|=2),u.return=e,a.return=e,a.sibling=u,e.child=a,a=u,u=e.child,f=t.child.memoizedState,f===null?f=Ec(l):(d=f.cachePool,d!==null?(E=Ht._currentValue,d=d.parent!==E?{parent:E,pool:E}:d):d=Qr(),f={baseLanes:f.baseLanes|l,cachePool:d}),u.memoizedState=f,u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),l=t.child,t=l.sibling,l=He(l,{mode:"visible",children:a.children}),l.return=e,l.sibling=null,t!==null&&(i=e.deletions,i===null?(e.deletions=[t],e.flags|=16):i.push(t)),e.child=l,e.memoizedState=null,l)}function Ac(t,e){return e=Tn({mode:"visible",children:e},t.mode),e.return=t,t.child=e}function Tn(t,e){return t=ue(22,t,null,e),t.lanes=0,t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},t}function Rc(t,e,l){return da(e,t.child,null,l),t=Ac(e,e.pendingProps.children),t.flags|=2,e.memoizedState=null,t}function us(t,e,l){t.lanes|=e;var a=t.alternate;a!==null&&(a.lanes|=e),Qi(t.return,e,l)}function zc(t,e,l,a,u){var n=t.memoizedState;n===null?t.memoizedState={isBackwards:e,rendering:null,renderingStartTime:0,last:a,tail:l,tailMode:u}:(n.isBackwards=e,n.rendering=null,n.renderingStartTime=0,n.last=a,n.tail=l,n.tailMode=u)}function ns(t,e,l){var a=e.pendingProps,u=a.revealOrder,n=a.tail;if(Lt(t,e,a.children,l),a=Ct.current,(a&2)!==0)a=a&1|2,e.flags|=128;else{if(t!==null&&(t.flags&128)!==0)t:for(t=e.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&us(t,l,e);else if(t.tag===19)us(t,l,e);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break t;for(;t.sibling===null;){if(t.return===null||t.return===e)break t;t=t.return}t.sibling.return=t.return,t=t.sibling}a&=1}switch(Y(Ct,a),u){case"forwards":for(l=e.child,u=null;l!==null;)t=l.alternate,t!==null&&Sn(t)===null&&(u=l),l=l.sibling;l=u,l===null?(u=e.child,e.child=null):(u=l.sibling,l.sibling=null),zc(e,!1,u,l,n);break;case"backwards":for(l=null,u=e.child,e.child=null;u!==null;){if(t=u.alternate,t!==null&&Sn(t)===null){e.child=u;break}t=u.sibling,u.sibling=l,l=u,u=t}zc(e,!0,l,null,n);break;case"together":zc(e,!1,null,null,void 0);break;default:e.memoizedState=null}return e.child}function Ge(t,e,l){if(t!==null&&(e.dependencies=t.dependencies),ol|=e.lanes,(l&e.childLanes)===0)if(t!==null){if(wa(t,e,l,!1),(l&e.childLanes)===0)return null}else return null;if(t!==null&&e.child!==t.child)throw Error(r(153));if(e.child!==null){for(t=e.child,l=He(t,t.pendingProps),e.child=l,l.return=e;t.sibling!==null;)t=t.sibling,l=l.sibling=He(t,t.pendingProps),l.return=e;l.sibling=null}return e.child}function Oc(t,e){return(t.lanes&e)!==0?!0:(t=t.dependencies,!!(t!==null&&en(t)))}function xm(t,e,l){switch(e.tag){case 3:bt(e,e.stateNode.containerInfo),Ie(e,Ht,t.memoizedState.cache),Za();break;case 27:case 5:ei(e);break;case 4:bt(e,e.stateNode.containerInfo);break;case 10:Ie(e,e.type,e.memoizedProps.value);break;case 13:var a=e.memoizedState;if(a!==null)return a.dehydrated!==null?(ul(e),e.flags|=128,null):(l&e.child.childLanes)!==0?as(t,e,l):(ul(e),t=Ge(t,e,l),t!==null?t.sibling:null);ul(e);break;case 19:var u=(t.flags&128)!==0;if(a=(l&e.childLanes)!==0,a||(wa(t,e,l,!1),a=(l&e.childLanes)!==0),u){if(a)return ns(t,e,l);e.flags|=128}if(u=e.memoizedState,u!==null&&(u.rendering=null,u.tail=null,u.lastEffect=null),Y(Ct,Ct.current),a)break;return null;case 22:case 23:return e.lanes=0,Po(t,e,l);case 24:Ie(e,Ht,t.memoizedState.cache)}return Ge(t,e,l)}function is(t,e,l){if(t!==null)if(t.memoizedProps!==e.pendingProps)qt=!0;else{if(!Oc(t,l)&&(e.flags&128)===0)return qt=!1,xm(t,e,l);qt=(t.flags&131072)!==0}else qt=!1,ot&&(e.flags&1048576)!==0&&Br(e,tn,e.index);switch(e.lanes=0,e.tag){case 16:t:{t=e.pendingProps;var a=e.elementType,u=a._init;if(a=u(a._payload),e.type=a,typeof a=="function")Bi(a)?(t=ql(a,t),e.tag=1,e=es(null,e,a,t,l)):(e.tag=0,e=pc(null,e,a,t,l));else{if(a!=null){if(u=a.$$typeof,u===ct){e.tag=11,e=ko(null,e,a,t,l);break t}else if(u===Rt){e.tag=14,e=Wo(null,e,a,t,l);break t}}throw e=El(a)||a,Error(r(306,e,""))}}return e;case 0:return pc(t,e,e.type,e.pendingProps,l);case 1:return a=e.type,u=ql(a,e.pendingProps),es(t,e,a,u,l);case 3:t:{if(bt(e,e.stateNode.containerInfo),t===null)throw Error(r(387));a=e.pendingProps;var n=e.memoizedState;u=n.element,ki(t,e),Pa(e,a,null,l);var i=e.memoizedState;if(a=i.cache,Ie(e,Ht,a),a!==n.cache&&Zi(e,[Ht],l,!0),Fa(),a=i.element,n.isDehydrated)if(n={element:a,isDehydrated:!1,cache:i.cache},e.updateQueue.baseState=n,e.memoizedState=n,e.flags&256){e=ls(t,e,a,l);break t}else if(a!==u){u=he(Error(r(424)),e),Va(u),e=ls(t,e,a,l);break t}else{switch(t=e.stateNode.containerInfo,t.nodeType){case 9:t=t.body;break;default:t=t.nodeName==="HTML"?t.ownerDocument.body:t}for(zt=Te(t.firstChild),$t=e,ot=!0,xl=null,Re=!0,l=jo(e,null,a,l),e.child=l;l;)l.flags=l.flags&-3|4096,l=l.sibling}else{if(Za(),a===u){e=Ge(t,e,l);break t}Lt(t,e,a,l)}e=e.child}return e;case 26:return En(t,e),t===null?(l=od(e.type,null,e.pendingProps,null))?e.memoizedState=l:ot||(l=e.type,t=e.pendingProps,a=qn(tt.current).createElement(l),a[Vt]=e,a[kt]=t,Xt(a,l,t),Bt(a),e.stateNode=a):e.memoizedState=od(e.type,t.memoizedProps,e.pendingProps,t.memoizedState),null;case 27:return ei(e),t===null&&ot&&(a=e.stateNode=cd(e.type,e.pendingProps,tt.current),$t=e,Re=!0,u=zt,ml(e.type)?(cf=u,zt=Te(a.firstChild)):zt=u),Lt(t,e,e.pendingProps.children,l),En(t,e),t===null&&(e.flags|=4194304),e.child;case 5:return t===null&&ot&&((u=a=zt)&&(a=uy(a,e.type,e.pendingProps,Re),a!==null?(e.stateNode=a,$t=e,zt=Te(a.firstChild),Re=!1,u=!0):u=!1),u||Ul(e)),ei(e),u=e.type,n=e.pendingProps,i=t!==null?t.memoizedProps:null,a=n.children,lf(u,n)?a=null:i!==null&&lf(u,i)&&(e.flags|=32),e.memoizedState!==null&&(u=ec(t,e,Tm,null,null,l),bu._currentValue=u),En(t,e),Lt(t,e,a,l),e.child;case 6:return t===null&&ot&&((t=l=zt)&&(l=ny(l,e.pendingProps,Re),l!==null?(e.stateNode=l,$t=e,zt=null,t=!0):t=!1),t||Ul(e)),null;case 13:return as(t,e,l);case 4:return bt(e,e.stateNode.containerInfo),a=e.pendingProps,t===null?e.child=da(e,null,a,l):Lt(t,e,a,l),e.child;case 11:return ko(t,e,e.type,e.pendingProps,l);case 7:return Lt(t,e,e.pendingProps,l),e.child;case 8:return Lt(t,e,e.pendingProps.children,l),e.child;case 12:return Lt(t,e,e.pendingProps.children,l),e.child;case 10:return a=e.pendingProps,Ie(e,e.type,a.value),Lt(t,e,a.children,l),e.child;case 9:return u=e.type._context,a=e.pendingProps.children,Hl(e),u=wt(u),a=a(u),e.flags|=1,Lt(t,e,a,l),e.child;case 14:return Wo(t,e,e.type,e.pendingProps,l);case 15:return Fo(t,e,e.type,e.pendingProps,l);case 19:return ns(t,e,l);case 31:return a=e.pendingProps,l=e.mode,a={mode:a.mode,children:a.children},t===null?(l=Tn(a,l),l.ref=e.ref,e.child=l,l.return=e,e=l):(l=He(t.child,a),l.ref=e.ref,e.child=l,l.return=e,e=l),e;case 22:return Po(t,e,l);case 24:return Hl(e),a=wt(Ht),t===null?(u=Ki(),u===null&&(u=St,n=Vi(),u.pooledCache=n,n.refCount++,n!==null&&(u.pooledCacheLanes|=l),u=n),e.memoizedState={parent:a,cache:u},$i(e),Ie(e,Ht,u)):((t.lanes&l)!==0&&(ki(t,e),Pa(e,null,null,l),Fa()),u=t.memoizedState,n=e.memoizedState,u.parent!==a?(u={parent:a,cache:a},e.memoizedState=u,e.lanes===0&&(e.memoizedState=e.updateQueue.baseState=u),Ie(e,Ht,a)):(a=n.cache,Ie(e,Ht,a),a!==u.cache&&Zi(e,[Ht],l,!0))),Lt(t,e,e.pendingProps.children,l),e.child;case 29:throw e.pendingProps}throw Error(r(156,e.tag))}function Xe(t){t.flags|=4}function cs(t,e){if(e.type!=="stylesheet"||(e.state.loading&4)!==0)t.flags&=-16777217;else if(t.flags|=16777216,!yd(e)){if(e=ge.current,e!==null&&((it&4194048)===it?ze!==null:(it&62914560)!==it&&(it&536870912)===0||e!==ze))throw ka=Ji,Zr;t.flags|=8192}}function An(t,e){e!==null&&(t.flags|=4),t.flags&16384&&(e=t.tag!==22?jf():536870912,t.lanes|=e,va|=e)}function nu(t,e){if(!ot)switch(t.tailMode){case"hidden":e=t.tail;for(var l=null;e!==null;)e.alternate!==null&&(l=e),e=e.sibling;l===null?t.tail=null:l.sibling=null;break;case"collapsed":l=t.tail;for(var a=null;l!==null;)l.alternate!==null&&(a=l),l=l.sibling;a===null?e||t.tail===null?t.tail=null:t.tail.sibling=null:a.sibling=null}}function Tt(t){var e=t.alternate!==null&&t.alternate.child===t.child,l=0,a=0;if(e)for(var u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags&65011712,a|=u.flags&65011712,u.return=t,u=u.sibling;else for(u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags,a|=u.flags,u.return=t,u=u.sibling;return t.subtreeFlags|=a,t.childLanes=l,e}function Um(t,e,l){var a=e.pendingProps;switch(Li(e),e.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Tt(e),null;case 1:return Tt(e),null;case 3:return l=e.stateNode,a=null,t!==null&&(a=t.memoizedState.cache),e.memoizedState.cache!==a&&(e.flags|=2048),Ye(Ht),ke(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(t===null||t.child===null)&&(Qa(e)?Xe(e):t===null||t.memoizedState.isDehydrated&&(e.flags&256)===0||(e.flags|=1024,jr())),Tt(e),null;case 26:return l=e.memoizedState,t===null?(Xe(e),l!==null?(Tt(e),cs(e,l)):(Tt(e),e.flags&=-16777217)):l?l!==t.memoizedState?(Xe(e),Tt(e),cs(e,l)):(Tt(e),e.flags&=-16777217):(t.memoizedProps!==a&&Xe(e),Tt(e),e.flags&=-16777217),null;case 27:Hu(e),l=tt.current;var u=e.type;if(t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}t=K.current,Qa(e)?qr(e):(t=cd(u,a,l),e.stateNode=t,Xe(e))}return Tt(e),null;case 5:if(Hu(e),l=e.type,t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}if(t=K.current,Qa(e))qr(e);else{switch(u=qn(tt.current),t){case 1:t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case 2:t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;default:switch(l){case"svg":t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case"math":t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;case"script":t=u.createElement("div"),t.innerHTML=" - - - -
- - - From 919b090f6cda9b20fc60324257363db2b75ba715 Mon Sep 17 00:00:00 2001 From: akshat k Date: Sat, 5 Apr 2025 00:44:33 +0530 Subject: [PATCH 22/23] err --- frontend/components/DeploymentForm.jsx | 62 +++++++++++++++++-- frontend/dist/assets/index-DQXFXOnt.css | 1 + .../{index-BcJos_jx.js => index-k5LmFf-e.js} | 26 ++++---- frontend/dist/index.html | 13 ++++ 4 files changed, 83 insertions(+), 19 deletions(-) create mode 100644 frontend/dist/assets/index-DQXFXOnt.css rename frontend/dist/assets/{index-BcJos_jx.js => index-k5LmFf-e.js} (89%) create mode 100644 frontend/dist/index.html diff --git a/frontend/components/DeploymentForm.jsx b/frontend/components/DeploymentForm.jsx index 6da5dde..cb3b800 100644 --- a/frontend/components/DeploymentForm.jsx +++ b/frontend/components/DeploymentForm.jsx @@ -1,15 +1,63 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; const DeploymentForm = () => { + const [repositories, setRepositories] = useState([]); + const [isLoading, setIsLoading] = useState(true); + + // Fetch repositories when component mounts + useEffect(() => { + fetch("/htmx/v1/repositories") + .then((response) => response.json()) + .then((data) => { + setRepositories(data.data.repositories); + setIsLoading(false); + }) + .catch((error) => { + console.error("Error fetching repositories:", error); + setIsLoading(false); + }); + }, []); + + // Handle form submission + const handleFormSubmit = (event) => { + event.preventDefault(); + const formData = new FormData(event.target); + const data = Object.fromEntries(formData.entries()); + console.log("Form Data:", data); + + fetch("/htmx/v1/deploy", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(data), + }) + .then((response) => response.json()) + .then((data) => { + const responseContainer = document.getElementById("response-container"); + responseContainer.innerHTML = `

${data.message}

`; + }) + .catch((error) => { + console.error("Error:", error); + }); + }; + return ( -
+
- + {isLoading ? ( + + ) : ( + repositories.map((repo) => ( + + )) + )}
-
@@ -22,7 +70,9 @@ const DeploymentForm = () => {
- +
); diff --git a/frontend/dist/assets/index-DQXFXOnt.css b/frontend/dist/assets/index-DQXFXOnt.css new file mode 100644 index 0000000..17c292f --- /dev/null +++ b/frontend/dist/assets/index-DQXFXOnt.css @@ -0,0 +1 @@ +*{margin:0;padding:0;box-sizing:border-box}body{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;background-color:#f5f7fa;color:#333;line-height:1.6;padding:0;margin:0}a{color:inherit;text-decoration:none}button,.btn{background-color:#0057ff;color:#fff;border:none;padding:.6rem 1.2rem;border-radius:6px;cursor:pointer;font-size:1rem;transition:background .3s ease}button:hover,.btn:hover{background-color:#003fcc}.primary-btn{background-color:#007bff}.primary-btn:hover{background-color:#0056b3}input,select,textarea{width:100%;padding:.5rem;margin-top:.25rem;margin-bottom:1rem;border:1px solid #ccc;border-radius:4px;font-size:1rem}label{display:block;font-weight:500;margin-bottom:.25rem}.form-group{margin-bottom:1rem}.error{color:red;margin-top:.5rem}.loading{margin-top:1rem;color:#888}.dashboard-main{padding:2rem;display:flex;flex-direction:column}.dashboard-header{display:flex;justify-content:flex-start;margin-bottom:1rem}.dashboard-body{display:flex;gap:1.5rem}.deployments-container{background:#fff;padding:1rem;border-radius:10px;box-shadow:0 2px 6px #0000000d;flex:1;max-width:300px}.project-setup-container{background:#fff;padding:1.5rem;border-radius:10px;box-shadow:0 2px 6px #0000000d;flex:2}.deployment-item{background-color:#f0f2f5;padding:1rem;margin-bottom:1rem;border-radius:8px;cursor:pointer;transition:background .2s}.deployment-item:hover{background-color:#e1e4e8}.login-container{max-width:400px;margin:4rem auto;background:#fff;padding:2rem;border-radius:12px;box-shadow:0 5px 20px #0000000d}@media (max-width: 768px){.dashboard-body{flex-direction:column}.deployments-container,.project-setup-container{max-width:100%}} diff --git a/frontend/dist/assets/index-BcJos_jx.js b/frontend/dist/assets/index-k5LmFf-e.js similarity index 89% rename from frontend/dist/assets/index-BcJos_jx.js rename to frontend/dist/assets/index-k5LmFf-e.js index e58f05d..c9f66c0 100644 --- a/frontend/dist/assets/index-BcJos_jx.js +++ b/frontend/dist/assets/index-k5LmFf-e.js @@ -1,4 +1,4 @@ -(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))r(d);new MutationObserver(d=>{for(const g of d)if(g.type==="childList")for(const R of g.addedNodes)R.tagName==="LINK"&&R.rel==="modulepreload"&&r(R)}).observe(document,{childList:!0,subtree:!0});function s(d){const g={};return d.integrity&&(g.integrity=d.integrity),d.referrerPolicy&&(g.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?g.credentials="include":d.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function r(d){if(d.ep)return;d.ep=!0;const g=s(d);fetch(d.href,g)}})();function Zd(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var gf={exports:{}},Ou={};/** +(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const h of document.querySelectorAll('link[rel="modulepreload"]'))r(h);new MutationObserver(h=>{for(const g of h)if(g.type==="childList")for(const R of g.addedNodes)R.tagName==="LINK"&&R.rel==="modulepreload"&&r(R)}).observe(document,{childList:!0,subtree:!0});function s(h){const g={};return h.integrity&&(g.integrity=h.integrity),h.referrerPolicy&&(g.referrerPolicy=h.referrerPolicy),h.crossOrigin==="use-credentials"?g.credentials="include":h.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function r(h){if(h.ep)return;h.ep=!0;const g=s(h);fetch(h.href,g)}})();function Zd(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var gf={exports:{}},Ou={};/** * @license React * react-jsx-runtime.production.js * @@ -6,7 +6,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Dd;function xy(){if(Dd)return Ou;Dd=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function s(r,d,g){var R=null;if(g!==void 0&&(R=""+g),d.key!==void 0&&(R=""+d.key),"key"in d){g={};for(var z in d)z!=="key"&&(g[z]=d[z])}else g=d;return d=g.ref,{$$typeof:c,type:r,key:R,ref:d!==void 0?d:null,props:g}}return Ou.Fragment=o,Ou.jsx=s,Ou.jsxs=s,Ou}var Md;function Uy(){return Md||(Md=1,gf.exports=xy()),gf.exports}var I=Uy(),Sf={exports:{}},et={};/** + */var Dd;function xy(){if(Dd)return Ou;Dd=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function s(r,h,g){var R=null;if(g!==void 0&&(R=""+g),h.key!==void 0&&(R=""+h.key),"key"in h){g={};for(var z in h)z!=="key"&&(g[z]=h[z])}else g=h;return h=g.ref,{$$typeof:c,type:r,key:R,ref:h!==void 0?h:null,props:g}}return Ou.Fragment=o,Ou.jsx=s,Ou.jsxs=s,Ou}var Md;function Uy(){return Md||(Md=1,gf.exports=xy()),gf.exports}var P=Uy(),Sf={exports:{}},et={};/** * @license React * react.production.js * @@ -14,7 +14,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var _d;function Ny(){if(_d)return et;_d=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),g=Symbol.for("react.consumer"),R=Symbol.for("react.context"),z=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),O=Symbol.for("react.lazy"),B=Symbol.iterator;function H(y){return y===null||typeof y!="object"?null:(y=B&&y[B]||y["@@iterator"],typeof y=="function"?y:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,V={};function G(y,N,Q){this.props=y,this.context=N,this.refs=V,this.updater=Q||j}G.prototype.isReactComponent={},G.prototype.setState=function(y,N){if(typeof y!="object"&&typeof y!="function"&&y!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,y,N,"setState")},G.prototype.forceUpdate=function(y){this.updater.enqueueForceUpdate(this,y,"forceUpdate")};function q(){}q.prototype=G.prototype;function k(y,N,Q){this.props=y,this.context=N,this.refs=V,this.updater=Q||j}var X=k.prototype=new q;X.constructor=k,C(X,G.prototype),X.isPureReactComponent=!0;var ct=Array.isArray,P={H:null,A:null,T:null,S:null,V:null},xt=Object.prototype.hasOwnProperty;function Rt(y,N,Q,Y,K,ft){return Q=ft.ref,{$$typeof:c,type:y,key:N,ref:Q!==void 0?Q:null,props:ft}}function Dt(y,N){return Rt(y.type,N,void 0,void 0,void 0,y.props)}function pt(y){return typeof y=="object"&&y!==null&&y.$$typeof===c}function Jt(y){var N={"=":"=0",":":"=2"};return"$"+y.replace(/[=:]/g,function(Q){return N[Q]})}var oe=/\/+/g;function Qt(y,N){return typeof y=="object"&&y!==null&&y.key!=null?Jt(""+y.key):N.toString(36)}function bl(){}function El(y){switch(y.status){case"fulfilled":return y.value;case"rejected":throw y.reason;default:switch(typeof y.status=="string"?y.then(bl,bl):(y.status="pending",y.then(function(N){y.status==="pending"&&(y.status="fulfilled",y.value=N)},function(N){y.status==="pending"&&(y.status="rejected",y.reason=N)})),y.status){case"fulfilled":return y.value;case"rejected":throw y.reason}}throw y}function Zt(y,N,Q,Y,K){var ft=typeof y;(ft==="undefined"||ft==="boolean")&&(y=null);var tt=!1;if(y===null)tt=!0;else switch(ft){case"bigint":case"string":case"number":tt=!0;break;case"object":switch(y.$$typeof){case c:case o:tt=!0;break;case O:return tt=y._init,Zt(tt(y._payload),N,Q,Y,K)}}if(tt)return K=K(y),tt=Y===""?"."+Qt(y,0):Y,ct(K)?(Q="",tt!=null&&(Q=tt.replace(oe,"$&/")+"/"),Zt(K,N,Q,"",function(ke){return ke})):K!=null&&(pt(K)&&(K=Dt(K,Q+(K.key==null||y&&y.key===K.key?"":(""+K.key).replace(oe,"$&/")+"/")+tt)),N.push(K)),1;tt=0;var te=Y===""?".":Y+":";if(ct(y))for(var bt=0;bt>>1,y=M[vt];if(0>>1;vtd(Y,W))Kd(ft,Y)?(M[vt]=ft,M[K]=W,vt=K):(M[vt]=Y,M[Q]=W,vt=Q);else if(Kd(ft,W))M[vt]=ft,M[K]=W,vt=K;else break t}}return L}function d(M,L){var W=M.sortIndex-L.sortIndex;return W!==0?W:M.id-L.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var g=performance;c.unstable_now=function(){return g.now()}}else{var R=Date,z=R.now();c.unstable_now=function(){return R.now()-z}}var p=[],m=[],O=1,B=null,H=3,j=!1,C=!1,V=!1,G=!1,q=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function ct(M){for(var L=s(m);L!==null;){if(L.callback===null)r(m);else if(L.startTime<=M)r(m),L.sortIndex=L.expirationTime,o(p,L);else break;L=s(m)}}function P(M){if(V=!1,ct(M),!C)if(s(p)!==null)C=!0,xt||(xt=!0,Qt());else{var L=s(m);L!==null&&Zt(P,L.startTime-M)}}var xt=!1,Rt=-1,Dt=5,pt=-1;function Jt(){return G?!0:!(c.unstable_now()-ptM&&Jt());){var vt=B.callback;if(typeof vt=="function"){B.callback=null,H=B.priorityLevel;var y=vt(B.expirationTime<=M);if(M=c.unstable_now(),typeof y=="function"){B.callback=y,ct(M),L=!0;break e}B===s(p)&&r(p),ct(M)}else r(p);B=s(p)}if(B!==null)L=!0;else{var N=s(m);N!==null&&Zt(P,N.startTime-M),L=!1}}break t}finally{B=null,H=W,j=!1}L=void 0}}finally{L?Qt():xt=!1}}}var Qt;if(typeof X=="function")Qt=function(){X(oe)};else if(typeof MessageChannel<"u"){var bl=new MessageChannel,El=bl.port2;bl.port1.onmessage=oe,Qt=function(){El.postMessage(null)}}else Qt=function(){q(oe,0)};function Zt(M,L){Rt=q(function(){M(c.unstable_now())},L)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(M){M.callback=null},c.unstable_forceFrameRate=function(M){0>M||125vt?(M.sortIndex=W,o(m,M),s(p)===null&&M===s(m)&&(V?(k(Rt),Rt=-1):V=!0,Zt(P,W-vt))):(M.sortIndex=y,o(p,M),C||j||(C=!0,xt||(xt=!0,Qt()))),M},c.unstable_shouldYield=Jt,c.unstable_wrapCallback=function(M){var L=H;return function(){var W=H;H=L;try{return M.apply(this,arguments)}finally{H=W}}}}(Ef)),Ef}var Nd;function By(){return Nd||(Nd=1,bf.exports=Cy()),bf.exports}var Tf={exports:{}},Kt={};/** + */var Ud;function Cy(){return Ud||(Ud=1,function(c){function o(M,L){var W=M.length;M.push(L);t:for(;0>>1,y=M[vt];if(0>>1;vth(Y,W))Kh(ft,Y)?(M[vt]=ft,M[K]=W,vt=K):(M[vt]=Y,M[Q]=W,vt=Q);else if(Kh(ft,W))M[vt]=ft,M[K]=W,vt=K;else break t}}return L}function h(M,L){var W=M.sortIndex-L.sortIndex;return W!==0?W:M.id-L.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var g=performance;c.unstable_now=function(){return g.now()}}else{var R=Date,z=R.now();c.unstable_now=function(){return R.now()-z}}var p=[],m=[],O=1,B=null,H=3,j=!1,C=!1,V=!1,G=!1,q=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function ct(M){for(var L=s(m);L!==null;){if(L.callback===null)r(m);else if(L.startTime<=M)r(m),L.sortIndex=L.expirationTime,o(p,L);else break;L=s(m)}}function I(M){if(V=!1,ct(M),!C)if(s(p)!==null)C=!0,xt||(xt=!0,Qt());else{var L=s(m);L!==null&&Zt(I,L.startTime-M)}}var xt=!1,Rt=-1,Dt=5,pt=-1;function Jt(){return G?!0:!(c.unstable_now()-ptM&&Jt());){var vt=B.callback;if(typeof vt=="function"){B.callback=null,H=B.priorityLevel;var y=vt(B.expirationTime<=M);if(M=c.unstable_now(),typeof y=="function"){B.callback=y,ct(M),L=!0;break e}B===s(p)&&r(p),ct(M)}else r(p);B=s(p)}if(B!==null)L=!0;else{var N=s(m);N!==null&&Zt(I,N.startTime-M),L=!1}}break t}finally{B=null,H=W,j=!1}L=void 0}}finally{L?Qt():xt=!1}}}var Qt;if(typeof X=="function")Qt=function(){X(oe)};else if(typeof MessageChannel<"u"){var bl=new MessageChannel,El=bl.port2;bl.port1.onmessage=oe,Qt=function(){El.postMessage(null)}}else Qt=function(){q(oe,0)};function Zt(M,L){Rt=q(function(){M(c.unstable_now())},L)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(M){M.callback=null},c.unstable_forceFrameRate=function(M){0>M||125vt?(M.sortIndex=W,o(m,M),s(p)===null&&M===s(m)&&(V?(k(Rt),Rt=-1):V=!0,Zt(I,W-vt))):(M.sortIndex=y,o(p,M),C||j||(C=!0,xt||(xt=!0,Qt()))),M},c.unstable_shouldYield=Jt,c.unstable_wrapCallback=function(M){var L=H;return function(){var W=H;H=L;try{return M.apply(this,arguments)}finally{H=W}}}}(Ef)),Ef}var Nd;function By(){return Nd||(Nd=1,bf.exports=Cy()),bf.exports}var Tf={exports:{}},Kt={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Hd;function qy(){if(Hd)return Kt;Hd=1;var c=Mf();function o(p){var m="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(o){console.error(o)}}return c(),Tf.exports=qy(),Tf.exports}/** + */var Hd;function qy(){if(Hd)return Kt;Hd=1;var c=Mf();function o(p){var m="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(o){console.error(o)}}return c(),Tf.exports=qy(),Tf.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Bd;function jy(){if(Bd)return zu;Bd=1;var c=By(),o=Mf(),s=Yy();function r(t){var e="https://react.dev/errors/"+t;if(1y||(t.current=vt[y],vt[y]=null,y--)}function Y(t,e){y++,vt[y]=t.current,t.current=e}var K=N(null),ft=N(null),tt=N(null),te=N(null);function bt(t,e){switch(Y(tt,e),Y(ft,t),Y(K,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?ed(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=ed(e),t=ld(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Q(K),Y(K,t)}function ke(){Q(K),Q(ft),Q(tt)}function ei(t){t.memoizedState!==null&&Y(te,t);var e=K.current,l=ld(e,t.type);e!==l&&(Y(ft,t),Y(K,l))}function Hu(t){ft.current===t&&(Q(K),Q(ft)),te.current===t&&(Q(te),bu._currentValue=W)}var li=Object.prototype.hasOwnProperty,ai=c.unstable_scheduleCallback,ui=c.unstable_cancelCallback,fh=c.unstable_shouldYield,rh=c.unstable_requestPaint,Ae=c.unstable_now,oh=c.unstable_getCurrentPriorityLevel,Cf=c.unstable_ImmediatePriority,Bf=c.unstable_UserBlockingPriority,Cu=c.unstable_NormalPriority,sh=c.unstable_LowPriority,qf=c.unstable_IdlePriority,dh=c.log,hh=c.unstable_setDisableYieldValue,Ma=null,ee=null;function We(t){if(typeof dh=="function"&&hh(t),ee&&typeof ee.setStrictMode=="function")try{ee.setStrictMode(Ma,t)}catch{}}var le=Math.clz32?Math.clz32:vh,mh=Math.log,yh=Math.LN2;function vh(t){return t>>>=0,t===0?32:31-(mh(t)/yh|0)|0}var Bu=256,qu=4194304;function Tl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Yu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var f=a&134217727;return f!==0?(a=f&~n,a!==0?u=Tl(a):(i&=f,i!==0?u=Tl(i):l||(l=f&~t,l!==0&&(u=Tl(l))))):(f=a&~n,f!==0?u=Tl(f):i!==0?u=Tl(i):l||(l=a&~t,l!==0&&(u=Tl(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function _a(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function gh(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Yf(){var t=Bu;return Bu<<=1,(Bu&4194048)===0&&(Bu=256),t}function jf(){var t=qu;return qu<<=1,(qu&62914560)===0&&(qu=4194304),t}function ni(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function xa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Sh(t,e,l,a,u,n){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var f=t.entanglements,h=t.expirationTimes,E=t.hiddenUpdates;for(l=i&~l;0y||(t.current=vt[y],vt[y]=null,y--)}function Y(t,e){y++,vt[y]=t.current,t.current=e}var K=N(null),ft=N(null),tt=N(null),te=N(null);function bt(t,e){switch(Y(tt,e),Y(ft,t),Y(K,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?ed(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=ed(e),t=ld(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Q(K),Y(K,t)}function ke(){Q(K),Q(ft),Q(tt)}function ei(t){t.memoizedState!==null&&Y(te,t);var e=K.current,l=ld(e,t.type);e!==l&&(Y(ft,t),Y(K,l))}function Hu(t){ft.current===t&&(Q(K),Q(ft)),te.current===t&&(Q(te),bu._currentValue=W)}var li=Object.prototype.hasOwnProperty,ai=c.unstable_scheduleCallback,ui=c.unstable_cancelCallback,fh=c.unstable_shouldYield,rh=c.unstable_requestPaint,Ae=c.unstable_now,oh=c.unstable_getCurrentPriorityLevel,Cf=c.unstable_ImmediatePriority,Bf=c.unstable_UserBlockingPriority,Cu=c.unstable_NormalPriority,sh=c.unstable_LowPriority,qf=c.unstable_IdlePriority,dh=c.log,hh=c.unstable_setDisableYieldValue,Ma=null,ee=null;function We(t){if(typeof dh=="function"&&hh(t),ee&&typeof ee.setStrictMode=="function")try{ee.setStrictMode(Ma,t)}catch{}}var le=Math.clz32?Math.clz32:vh,mh=Math.log,yh=Math.LN2;function vh(t){return t>>>=0,t===0?32:31-(mh(t)/yh|0)|0}var Bu=256,qu=4194304;function Tl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Yu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var f=a&134217727;return f!==0?(a=f&~n,a!==0?u=Tl(a):(i&=f,i!==0?u=Tl(i):l||(l=f&~t,l!==0&&(u=Tl(l))))):(f=a&~n,f!==0?u=Tl(f):i!==0?u=Tl(i):l||(l=a&~t,l!==0&&(u=Tl(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function _a(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function gh(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Yf(){var t=Bu;return Bu<<=1,(Bu&4194048)===0&&(Bu=256),t}function jf(){var t=qu;return qu<<=1,(qu&62914560)===0&&(qu=4194304),t}function ni(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function xa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Sh(t,e,l,a,u,n){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var f=t.entanglements,d=t.expirationTimes,E=t.hiddenUpdates;for(l=i&~l;0)":-1u||h[a]!==E[u]){var D=` -`+h[a].replace(" at new "," at ");return t.displayName&&D.includes("")&&(D=D.replace("",t.displayName)),D}while(1<=a&&0<=u);break}}}finally{si=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Kl(l):""}function Rh(t){switch(t.tag){case 26:case 27:case 5:return Kl(t.type);case 16:return Kl("Lazy");case 13:return Kl("Suspense");case 19:return Kl("SuspenseList");case 0:case 15:return di(t.type,!1);case 11:return di(t.type.render,!1);case 1:return di(t.type,!0);case 31:return Kl("Activity");default:return""}}function $f(t){try{var e="";do e+=Rh(t),t=t.return;while(t);return e}catch(l){return` +`);for(u=a=0;au||d[a]!==E[u]){var D=` +`+d[a].replace(" at new "," at ");return t.displayName&&D.includes("")&&(D=D.replace("",t.displayName)),D}while(1<=a&&0<=u);break}}}finally{si=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Kl(l):""}function Rh(t){switch(t.tag){case 26:case 27:case 5:return Kl(t.type);case 16:return Kl("Lazy");case 13:return Kl("Suspense");case 19:return Kl("SuspenseList");case 0:case 15:return di(t.type,!1);case 11:return di(t.type.render,!1);case 1:return di(t.type,!0);case 31:return Kl("Activity");default:return""}}function $f(t){try{var e="";do e+=Rh(t),t=t.return;while(t);return e}catch(l){return` Error generating stack: `+l.message+` -`+l.stack}}function se(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function kf(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function Oh(t){var e=kf(t)?"checked":"value",l=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),a=""+t[e];if(!t.hasOwnProperty(e)&&typeof l<"u"&&typeof l.get=="function"&&typeof l.set=="function"){var u=l.get,n=l.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return u.call(this)},set:function(i){a=""+i,n.call(this,i)}}),Object.defineProperty(t,e,{enumerable:l.enumerable}),{getValue:function(){return a},setValue:function(i){a=""+i},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Gu(t){t._valueTracker||(t._valueTracker=Oh(t))}function Wf(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var l=e.getValue(),a="";return t&&(a=kf(t)?t.checked?"true":"false":t.value),t=a,t!==l?(e.setValue(t),!0):!1}function Xu(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var zh=/[\n"\\]/g;function de(t){return t.replace(zh,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function hi(t,e,l,a,u,n,i,f){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),e!=null?i==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+se(e)):t.value!==""+se(e)&&(t.value=""+se(e)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),e!=null?mi(t,i,se(e)):l!=null?mi(t,i,se(l)):a!=null&&t.removeAttribute("value"),u==null&&n!=null&&(t.defaultChecked=!!n),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?t.name=""+se(f):t.removeAttribute("name")}function Ff(t,e,l,a,u,n,i,f){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(t.type=n),e!=null||l!=null){if(!(n!=="submit"&&n!=="reset"||e!=null))return;l=l!=null?""+se(l):"",e=e!=null?""+se(e):l,f||e===t.value||(t.value=e),t.defaultValue=e}a=a??u,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=f?t.checked:!!a,t.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i)}function mi(t,e,l){e==="number"&&Xu(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function Jl(t,e,l,a){if(t=t.options,e){e={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),pi=!1;if(Ne)try{var Ca={};Object.defineProperty(Ca,"passive",{get:function(){pi=!0}}),window.addEventListener("test",Ca,Ca),window.removeEventListener("test",Ca,Ca)}catch{pi=!1}var Pe=null,bi=null,Zu=null;function ur(){if(Zu)return Zu;var t,e=bi,l=e.length,a,u="value"in Pe?Pe.value:Pe.textContent,n=u.length;for(t=0;t=Ya),or=" ",sr=!1;function dr(t,e){switch(t){case"keyup":return tm.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function hr(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Fl=!1;function lm(t,e){switch(t){case"compositionend":return hr(e);case"keypress":return e.which!==32?null:(sr=!0,or);case"textInput":return t=e.data,t===or&&sr?null:t;default:return null}}function am(t,e){if(Fl)return t==="compositionend"||!Oi&&dr(t,e)?(t=ur(),Zu=bi=Pe=null,Fl=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=a}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=Er(l)}}function Ar(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Ar(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Rr(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Xu(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=Xu(t.document)}return e}function Mi(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var sm=Ne&&"documentMode"in document&&11>=document.documentMode,Pl=null,_i=null,Xa=null,xi=!1;function Or(t,e,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;xi||Pl==null||Pl!==Xu(a)||(a=Pl,"selectionStart"in a&&Mi(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Xa&&Ga(Xa,a)||(Xa=a,a=Cn(_i,"onSelect"),0>=i,u-=i,Ce=1<<32-le(e)+u|l<n?n:8;var i=M.T,f={};M.T=f,yc(t,!1,e,l);try{var h=u(),E=M.S;if(E!==null&&E(f,h),h!==null&&typeof h=="object"&&typeof h.then=="function"){var D=bm(h,a);lu(t,e,D,fe(t))}else lu(t,e,a,fe(t))}catch(U){lu(t,e,{then:function(){},status:"rejected",reason:U},fe())}finally{L.p=n,M.T=i}}function Om(){}function hc(t,e,l,a){if(t.tag!==5)throw Error(r(476));var u=Do(t).queue;zo(t,u,e,W,l===null?Om:function(){return Mo(t),l(a)})}function Do(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:W,baseState:W,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:W},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function Mo(t){var e=Do(t).next.queue;lu(t,e,{},fe())}function mc(){return wt(bu)}function _o(){return Nt().memoizedState}function xo(){return Nt().memoizedState}function zm(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=fe();t=el(l);var a=ll(e,t,l);a!==null&&(re(a,e,l),Wa(a,e,l)),e={cache:Vi()},t.payload=e;return}e=e.return}}function Dm(t,e,l){var a=fe();l={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null},mn(t)?No(e,l):(l=Ci(t,e,l,a),l!==null&&(re(l,t,a),Ho(l,e,a)))}function Uo(t,e,l){var a=fe();lu(t,e,l,a)}function lu(t,e,l,a){var u={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null};if(mn(t))No(e,u);else{var n=t.alternate;if(t.lanes===0&&(n===null||n.lanes===0)&&(n=e.lastRenderedReducer,n!==null))try{var i=e.lastRenderedState,f=n(i,l);if(u.hasEagerState=!0,u.eagerState=f,ae(f,i))return Wu(t,e,u,0),St===null&&ku(),!1}catch{}finally{}if(l=Ci(t,e,u,a),l!==null)return re(l,t,a),Ho(l,e,a),!0}return!1}function yc(t,e,l,a){if(a={lane:2,revertLane:Jc(),action:a,hasEagerState:!1,eagerState:null,next:null},mn(t)){if(e)throw Error(r(479))}else e=Ci(t,l,a,2),e!==null&&re(e,t,2)}function mn(t){var e=t.alternate;return t===lt||e!==null&&e===lt}function No(t,e){fa=fn=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function Ho(t,e,l){if((l&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,Gf(t,l)}}var yn={readContext:wt,use:on,useCallback:Mt,useContext:Mt,useEffect:Mt,useImperativeHandle:Mt,useLayoutEffect:Mt,useInsertionEffect:Mt,useMemo:Mt,useReducer:Mt,useRef:Mt,useState:Mt,useDebugValue:Mt,useDeferredValue:Mt,useTransition:Mt,useSyncExternalStore:Mt,useId:Mt,useHostTransitionStatus:Mt,useFormState:Mt,useActionState:Mt,useOptimistic:Mt,useMemoCache:Mt,useCacheRefresh:Mt},Co={readContext:wt,use:on,useCallback:function(t,e){return Ft().memoizedState=[t,e===void 0?null:e],t},useContext:wt,useEffect:go,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,hn(4194308,4,Eo.bind(null,e,t),l)},useLayoutEffect:function(t,e){return hn(4194308,4,t,e)},useInsertionEffect:function(t,e){hn(4,2,t,e)},useMemo:function(t,e){var l=Ft();e=e===void 0?null:e;var a=t();if(Bl){We(!0);try{t()}finally{We(!1)}}return l.memoizedState=[a,e],a},useReducer:function(t,e,l){var a=Ft();if(l!==void 0){var u=l(e);if(Bl){We(!0);try{l(e)}finally{We(!1)}}}else u=e;return a.memoizedState=a.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},a.queue=t,t=t.dispatch=Dm.bind(null,lt,t),[a.memoizedState,t]},useRef:function(t){var e=Ft();return t={current:t},e.memoizedState=t},useState:function(t){t=rc(t);var e=t.queue,l=Uo.bind(null,lt,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:sc,useDeferredValue:function(t,e){var l=Ft();return dc(l,t,e)},useTransition:function(){var t=rc(!1);return t=zo.bind(null,lt,t.queue,!0,!1),Ft().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var a=lt,u=Ft();if(ot){if(l===void 0)throw Error(r(407));l=l()}else{if(l=e(),St===null)throw Error(r(349));(it&124)!==0||to(a,e,l)}u.memoizedState=l;var n={value:l,getSnapshot:e};return u.queue=n,go(lo.bind(null,a,n,t),[t]),a.flags|=2048,oa(9,dn(),eo.bind(null,a,n,l,e),null),l},useId:function(){var t=Ft(),e=St.identifierPrefix;if(ot){var l=Be,a=Ce;l=(a&~(1<<32-le(a)-1)).toString(32)+l,e="«"+e+"R"+l,l=rn++,0$?(jt=w,w=null):jt=w.sibling;var rt=T(S,w,b[$],_);if(rt===null){w===null&&(w=jt);break}t&&w&&rt.alternate===null&&e(S,w),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt,w=jt}if($===b.length)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;$$?(jt=w,w=null):jt=w.sibling;var pl=T(S,w,rt.value,_);if(pl===null){w===null&&(w=jt);break}t&&w&&pl.alternate===null&&e(S,w),v=n(pl,v,$),at===null?Z=pl:at.sibling=pl,at=pl,w=jt}if(rt.done)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;!rt.done;$++,rt=b.next())rt=U(S,rt.value,_),rt!==null&&(v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return ot&&_l(S,$),Z}for(w=a(w);!rt.done;$++,rt=b.next())rt=A(w,S,$,rt.value,_),rt!==null&&(t&&rt.alternate!==null&&w.delete(rt.key===null?$:rt.key),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return t&&w.forEach(function(_y){return e(S,_y)}),ot&&_l(S,$),Z}function yt(S,v,b,_){if(typeof b=="object"&&b!==null&&b.type===C&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case H:t:{for(var Z=b.key;v!==null;){if(v.key===Z){if(Z=b.type,Z===C){if(v.tag===7){l(S,v.sibling),_=u(v,b.props.children),_.return=S,S=_;break t}}else if(v.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===Dt&&qo(Z)===v.type){l(S,v.sibling),_=u(v,b.props),uu(_,b),_.return=S,S=_;break t}l(S,v);break}else e(S,v);v=v.sibling}b.type===C?(_=Dl(b.props.children,S.mode,_,b.key),_.return=S,S=_):(_=Pu(b.type,b.key,b.props,null,S.mode,_),uu(_,b),_.return=S,S=_)}return i(S);case j:t:{for(Z=b.key;v!==null;){if(v.key===Z)if(v.tag===4&&v.stateNode.containerInfo===b.containerInfo&&v.stateNode.implementation===b.implementation){l(S,v.sibling),_=u(v,b.children||[]),_.return=S,S=_;break t}else{l(S,v);break}else e(S,v);v=v.sibling}_=Yi(b,S.mode,_),_.return=S,S=_}return i(S);case Dt:return Z=b._init,b=Z(b._payload),yt(S,v,b,_)}if(Zt(b))return F(S,v,b,_);if(Qt(b)){if(Z=Qt(b),typeof Z!="function")throw Error(r(150));return b=Z.call(b),J(S,v,b,_)}if(typeof b.then=="function")return yt(S,v,vn(b),_);if(b.$$typeof===X)return yt(S,v,ln(S,b),_);gn(S,b)}return typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint"?(b=""+b,v!==null&&v.tag===6?(l(S,v.sibling),_=u(v,b),_.return=S,S=_):(l(S,v),_=qi(b,S.mode,_),_.return=S,S=_),i(S)):l(S,v)}return function(S,v,b,_){try{au=0;var Z=yt(S,v,b,_);return sa=null,Z}catch(w){if(w===$a||w===un)throw w;var at=ue(29,w,null,S.mode);return at.lanes=_,at.return=S,at}finally{}}}var da=Yo(!0),jo=Yo(!1),ge=N(null),Oe=null;function ul(t){var e=t.alternate;Y(Ct,Ct.current&1),Y(ge,t),Oe===null&&(e===null||ca.current!==null||e.memoizedState!==null)&&(Oe=t)}function Lo(t){if(t.tag===22){if(Y(Ct,Ct.current),Y(ge,t),Oe===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(Oe=t)}}else nl()}function nl(){Y(Ct,Ct.current),Y(ge,ge.current)}function Le(t){Q(ge),Oe===t&&(Oe=null),Q(Ct)}var Ct=N(0);function Sn(t){for(var e=t;e!==null;){if(e.tag===13){var l=e.memoizedState;if(l!==null&&(l=l.dehydrated,l===null||l.data==="$?"||nf(l)))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if((e.flags&128)!==0)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}function vc(t,e,l,a){e=t.memoizedState,l=l(a,e),l=l==null?e:O({},e,l),t.memoizedState=l,t.lanes===0&&(t.updateQueue.baseState=l)}var gc={enqueueSetState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueReplaceState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.tag=1,u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueForceUpdate:function(t,e){t=t._reactInternals;var l=fe(),a=el(l);a.tag=2,e!=null&&(a.callback=e),e=ll(t,a,l),e!==null&&(re(e,t,l),Wa(e,t,l))}};function Go(t,e,l,a,u,n,i){return t=t.stateNode,typeof t.shouldComponentUpdate=="function"?t.shouldComponentUpdate(a,n,i):e.prototype&&e.prototype.isPureReactComponent?!Ga(l,a)||!Ga(u,n):!0}function Xo(t,e,l,a){t=e.state,typeof e.componentWillReceiveProps=="function"&&e.componentWillReceiveProps(l,a),typeof e.UNSAFE_componentWillReceiveProps=="function"&&e.UNSAFE_componentWillReceiveProps(l,a),e.state!==t&&gc.enqueueReplaceState(e,e.state,null)}function ql(t,e){var l=e;if("ref"in e){l={};for(var a in e)a!=="ref"&&(l[a]=e[a])}if(t=t.defaultProps){l===e&&(l=O({},l));for(var u in t)l[u]===void 0&&(l[u]=t[u])}return l}var pn=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var e=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(e))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)};function Qo(t){pn(t)}function Zo(t){console.error(t)}function Vo(t){pn(t)}function bn(t,e){try{var l=t.onUncaughtError;l(e.value,{componentStack:e.stack})}catch(a){setTimeout(function(){throw a})}}function wo(t,e,l){try{var a=t.onCaughtError;a(l.value,{componentStack:l.stack,errorBoundary:e.tag===1?e.stateNode:null})}catch(u){setTimeout(function(){throw u})}}function Sc(t,e,l){return l=el(l),l.tag=3,l.payload={element:null},l.callback=function(){bn(t,e)},l}function Ko(t){return t=el(t),t.tag=3,t}function Jo(t,e,l,a){var u=l.type.getDerivedStateFromError;if(typeof u=="function"){var n=a.value;t.payload=function(){return u(n)},t.callback=function(){wo(e,l,a)}}var i=l.stateNode;i!==null&&typeof i.componentDidCatch=="function"&&(t.callback=function(){wo(e,l,a),typeof u!="function"&&(sl===null?sl=new Set([this]):sl.add(this));var f=a.stack;this.componentDidCatch(a.value,{componentStack:f!==null?f:""})})}function _m(t,e,l,a,u){if(l.flags|=32768,a!==null&&typeof a=="object"&&typeof a.then=="function"){if(e=l.alternate,e!==null&&wa(e,l,u,!0),l=ge.current,l!==null){switch(l.tag){case 13:return Oe===null?Qc():l.alternate===null&&zt===0&&(zt=3),l.flags&=-257,l.flags|=65536,l.lanes=u,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?l.updateQueue=new Set([a]):e.add(a),Vc(t,a,u)),!1;case 22:return l.flags|=65536,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?(e={transitions:null,markerInstances:null,retryQueue:new Set([a])},l.updateQueue=e):(l=e.retryQueue,l===null?e.retryQueue=new Set([a]):l.add(a)),Vc(t,a,u)),!1}throw Error(r(435,l.tag))}return Vc(t,a,u),Qc(),!1}if(ot)return e=ge.current,e!==null?((e.flags&65536)===0&&(e.flags|=256),e.flags|=65536,e.lanes=u,a!==Gi&&(t=Error(r(422),{cause:a}),Va(he(t,l)))):(a!==Gi&&(e=Error(r(423),{cause:a}),Va(he(e,l))),t=t.current.alternate,t.flags|=65536,u&=-u,t.lanes|=u,a=he(a,l),u=Sc(t.stateNode,a,u),Wi(t,u),zt!==4&&(zt=2)),!1;var n=Error(r(520),{cause:a});if(n=he(n,l),su===null?su=[n]:su.push(n),zt!==4&&(zt=2),e===null)return!0;a=he(a,l),l=e;do{switch(l.tag){case 3:return l.flags|=65536,t=u&-u,l.lanes|=t,t=Sc(l.stateNode,a,t),Wi(l,t),!1;case 1:if(e=l.type,n=l.stateNode,(l.flags&128)===0&&(typeof e.getDerivedStateFromError=="function"||n!==null&&typeof n.componentDidCatch=="function"&&(sl===null||!sl.has(n))))return l.flags|=65536,u&=-u,l.lanes|=u,u=Ko(u),Jo(u,t,l,a),Wi(l,u),!1}l=l.return}while(l!==null);return!1}var $o=Error(r(461)),qt=!1;function Lt(t,e,l,a){e.child=t===null?jo(e,null,l,a):da(e,t.child,l,a)}function ko(t,e,l,a,u){l=l.render;var n=e.ref;if("ref"in a){var i={};for(var f in a)f!=="ref"&&(i[f]=a[f])}else i=a;return Hl(e),a=ec(t,e,l,i,n,u),f=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&f&&ji(e),e.flags|=1,Lt(t,e,a,u),e.child)}function Wo(t,e,l,a,u){if(t===null){var n=l.type;return typeof n=="function"&&!Bi(n)&&n.defaultProps===void 0&&l.compare===null?(e.tag=15,e.type=n,Fo(t,e,n,a,u)):(t=Pu(l.type,null,a,e,e.mode,u),t.ref=e.ref,t.return=e,e.child=t)}if(n=t.child,!zc(t,u)){var i=n.memoizedProps;if(l=l.compare,l=l!==null?l:Ga,l(i,a)&&t.ref===e.ref)return Ge(t,e,u)}return e.flags|=1,t=He(n,a),t.ref=e.ref,t.return=e,e.child=t}function Fo(t,e,l,a,u){if(t!==null){var n=t.memoizedProps;if(Ga(n,a)&&t.ref===e.ref)if(qt=!1,e.pendingProps=a=n,zc(t,u))(t.flags&131072)!==0&&(qt=!0);else return e.lanes=t.lanes,Ge(t,e,u)}return pc(t,e,l,a,u)}function Po(t,e,l){var a=e.pendingProps,u=a.children,n=t!==null?t.memoizedState:null;if(a.mode==="hidden"){if((e.flags&128)!==0){if(a=n!==null?n.baseLanes|l:l,t!==null){for(u=e.child=t.child,n=0;u!==null;)n=n|u.lanes|u.childLanes,u=u.sibling;e.childLanes=n&~a}else e.childLanes=0,e.child=null;return Io(t,e,a,l)}if((l&536870912)!==0)e.memoizedState={baseLanes:0,cachePool:null},t!==null&&an(e,n!==null?n.cachePool:null),n!==null?Wr(e,n):Pi(),Lo(e);else return e.lanes=e.childLanes=536870912,Io(t,e,n!==null?n.baseLanes|l:l,l)}else n!==null?(an(e,n.cachePool),Wr(e,n),nl(),e.memoizedState=null):(t!==null&&an(e,null),Pi(),nl());return Lt(t,e,u,l),e.child}function Io(t,e,l,a){var u=Ki();return u=u===null?null:{parent:Ht._currentValue,pool:u},e.memoizedState={baseLanes:l,cachePool:u},t!==null&&an(e,null),Pi(),Lo(e),t!==null&&wa(t,e,a,!0),null}function En(t,e){var l=e.ref;if(l===null)t!==null&&t.ref!==null&&(e.flags|=4194816);else{if(typeof l!="function"&&typeof l!="object")throw Error(r(284));(t===null||t.ref!==l)&&(e.flags|=4194816)}}function pc(t,e,l,a,u){return Hl(e),l=ec(t,e,l,a,void 0,u),a=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,u),e.child)}function ts(t,e,l,a,u,n){return Hl(e),e.updateQueue=null,l=Pr(e,a,l,u),Fr(t),a=lc(),t!==null&&!qt?(ac(t,e,n),Ge(t,e,n)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,n),e.child)}function es(t,e,l,a,u){if(Hl(e),e.stateNode===null){var n=la,i=l.contextType;typeof i=="object"&&i!==null&&(n=wt(i)),n=new l(a,n),e.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,n.updater=gc,e.stateNode=n,n._reactInternals=e,n=e.stateNode,n.props=a,n.state=e.memoizedState,n.refs={},$i(e),i=l.contextType,n.context=typeof i=="object"&&i!==null?wt(i):la,n.state=e.memoizedState,i=l.getDerivedStateFromProps,typeof i=="function"&&(vc(e,l,i,a),n.state=e.memoizedState),typeof l.getDerivedStateFromProps=="function"||typeof n.getSnapshotBeforeUpdate=="function"||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(i=n.state,typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount(),i!==n.state&&gc.enqueueReplaceState(n,n.state,null),Pa(e,a,n,u),Fa(),n.state=e.memoizedState),typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!0}else if(t===null){n=e.stateNode;var f=e.memoizedProps,h=ql(l,f);n.props=h;var E=n.context,D=l.contextType;i=la,typeof D=="object"&&D!==null&&(i=wt(D));var U=l.getDerivedStateFromProps;D=typeof U=="function"||typeof n.getSnapshotBeforeUpdate=="function",f=e.pendingProps!==f,D||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(f||E!==i)&&Xo(e,n,a,i),tl=!1;var T=e.memoizedState;n.state=T,Pa(e,a,n,u),Fa(),E=e.memoizedState,f||T!==E||tl?(typeof U=="function"&&(vc(e,l,U,a),E=e.memoizedState),(h=tl||Go(e,l,h,a,T,E,i))?(D||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount()),typeof n.componentDidMount=="function"&&(e.flags|=4194308)):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),e.memoizedProps=a,e.memoizedState=E),n.props=a,n.state=E,n.context=i,a=h):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!1)}else{n=e.stateNode,ki(t,e),i=e.memoizedProps,D=ql(l,i),n.props=D,U=e.pendingProps,T=n.context,E=l.contextType,h=la,typeof E=="object"&&E!==null&&(h=wt(E)),f=l.getDerivedStateFromProps,(E=typeof f=="function"||typeof n.getSnapshotBeforeUpdate=="function")||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(i!==U||T!==h)&&Xo(e,n,a,h),tl=!1,T=e.memoizedState,n.state=T,Pa(e,a,n,u),Fa();var A=e.memoizedState;i!==U||T!==A||tl||t!==null&&t.dependencies!==null&&en(t.dependencies)?(typeof f=="function"&&(vc(e,l,f,a),A=e.memoizedState),(D=tl||Go(e,l,D,a,T,A,h)||t!==null&&t.dependencies!==null&&en(t.dependencies))?(E||typeof n.UNSAFE_componentWillUpdate!="function"&&typeof n.componentWillUpdate!="function"||(typeof n.componentWillUpdate=="function"&&n.componentWillUpdate(a,A,h),typeof n.UNSAFE_componentWillUpdate=="function"&&n.UNSAFE_componentWillUpdate(a,A,h)),typeof n.componentDidUpdate=="function"&&(e.flags|=4),typeof n.getSnapshotBeforeUpdate=="function"&&(e.flags|=1024)):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),e.memoizedProps=a,e.memoizedState=A),n.props=a,n.state=A,n.context=h,a=D):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),a=!1)}return n=a,En(t,e),a=(e.flags&128)!==0,n||a?(n=e.stateNode,l=a&&typeof l.getDerivedStateFromError!="function"?null:n.render(),e.flags|=1,t!==null&&a?(e.child=da(e,t.child,null,u),e.child=da(e,null,l,u)):Lt(t,e,l,u),e.memoizedState=n.state,t=e.child):t=Ge(t,e,u),t}function ls(t,e,l,a){return Za(),e.flags|=256,Lt(t,e,l,a),e.child}var bc={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Ec(t){return{baseLanes:t,cachePool:Qr()}}function Tc(t,e,l){return t=t!==null?t.childLanes&~l:0,e&&(t|=Se),t}function as(t,e,l){var a=e.pendingProps,u=!1,n=(e.flags&128)!==0,i;if((i=n)||(i=t!==null&&t.memoizedState===null?!1:(Ct.current&2)!==0),i&&(u=!0,e.flags&=-129),i=(e.flags&32)!==0,e.flags&=-33,t===null){if(ot){if(u?ul(e):nl(),ot){var f=Ot,h;if(h=f){t:{for(h=f,f=Re;h.nodeType!==8;){if(!f){f=null;break t}if(h=Te(h.nextSibling),h===null){f=null;break t}}f=h}f!==null?(e.memoizedState={dehydrated:f,treeContext:Ml!==null?{id:Ce,overflow:Be}:null,retryLane:536870912,hydrationErrors:null},h=ue(18,null,null,0),h.stateNode=f,h.return=e,e.child=h,$t=e,Ot=null,h=!0):h=!1}h||Ul(e)}if(f=e.memoizedState,f!==null&&(f=f.dehydrated,f!==null))return nf(f)?e.lanes=32:e.lanes=536870912,null;Le(e)}return f=a.children,a=a.fallback,u?(nl(),u=e.mode,f=Tn({mode:"hidden",children:f},u),a=Dl(a,u,l,null),f.return=e,a.return=e,f.sibling=a,e.child=f,u=e.child,u.memoizedState=Ec(l),u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),Ac(e,f))}if(h=t.memoizedState,h!==null&&(f=h.dehydrated,f!==null)){if(n)e.flags&256?(ul(e),e.flags&=-257,e=Rc(t,e,l)):e.memoizedState!==null?(nl(),e.child=t.child,e.flags|=128,e=null):(nl(),u=a.fallback,f=e.mode,a=Tn({mode:"visible",children:a.children},f),u=Dl(u,f,l,null),u.flags|=2,a.return=e,u.return=e,a.sibling=u,e.child=a,da(e,t.child,null,l),a=e.child,a.memoizedState=Ec(l),a.childLanes=Tc(t,i,l),e.memoizedState=bc,e=u);else if(ul(e),nf(f)){if(i=f.nextSibling&&f.nextSibling.dataset,i)var E=i.dgst;i=E,a=Error(r(419)),a.stack="",a.digest=i,Va({value:a,source:null,stack:null}),e=Rc(t,e,l)}else if(qt||wa(t,e,l,!1),i=(l&t.childLanes)!==0,qt||i){if(i=St,i!==null&&(a=l&-l,a=(a&42)!==0?1:ii(a),a=(a&(i.suspendedLanes|l))!==0?0:a,a!==0&&a!==h.retryLane))throw h.retryLane=a,ea(t,a),re(i,t,a),$o;f.data==="$?"||Qc(),e=Rc(t,e,l)}else f.data==="$?"?(e.flags|=192,e.child=t.child,e=null):(t=h.treeContext,Ot=Te(f.nextSibling),$t=e,ot=!0,xl=null,Re=!1,t!==null&&(ye[ve++]=Ce,ye[ve++]=Be,ye[ve++]=Ml,Ce=t.id,Be=t.overflow,Ml=e),e=Ac(e,a.children),e.flags|=4096);return e}return u?(nl(),u=a.fallback,f=e.mode,h=t.child,E=h.sibling,a=He(h,{mode:"hidden",children:a.children}),a.subtreeFlags=h.subtreeFlags&65011712,E!==null?u=He(E,u):(u=Dl(u,f,l,null),u.flags|=2),u.return=e,a.return=e,a.sibling=u,e.child=a,a=u,u=e.child,f=t.child.memoizedState,f===null?f=Ec(l):(h=f.cachePool,h!==null?(E=Ht._currentValue,h=h.parent!==E?{parent:E,pool:E}:h):h=Qr(),f={baseLanes:f.baseLanes|l,cachePool:h}),u.memoizedState=f,u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),l=t.child,t=l.sibling,l=He(l,{mode:"visible",children:a.children}),l.return=e,l.sibling=null,t!==null&&(i=e.deletions,i===null?(e.deletions=[t],e.flags|=16):i.push(t)),e.child=l,e.memoizedState=null,l)}function Ac(t,e){return e=Tn({mode:"visible",children:e},t.mode),e.return=t,t.child=e}function Tn(t,e){return t=ue(22,t,null,e),t.lanes=0,t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},t}function Rc(t,e,l){return da(e,t.child,null,l),t=Ac(e,e.pendingProps.children),t.flags|=2,e.memoizedState=null,t}function us(t,e,l){t.lanes|=e;var a=t.alternate;a!==null&&(a.lanes|=e),Qi(t.return,e,l)}function Oc(t,e,l,a,u){var n=t.memoizedState;n===null?t.memoizedState={isBackwards:e,rendering:null,renderingStartTime:0,last:a,tail:l,tailMode:u}:(n.isBackwards=e,n.rendering=null,n.renderingStartTime=0,n.last=a,n.tail=l,n.tailMode=u)}function ns(t,e,l){var a=e.pendingProps,u=a.revealOrder,n=a.tail;if(Lt(t,e,a.children,l),a=Ct.current,(a&2)!==0)a=a&1|2,e.flags|=128;else{if(t!==null&&(t.flags&128)!==0)t:for(t=e.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&us(t,l,e);else if(t.tag===19)us(t,l,e);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break t;for(;t.sibling===null;){if(t.return===null||t.return===e)break t;t=t.return}t.sibling.return=t.return,t=t.sibling}a&=1}switch(Y(Ct,a),u){case"forwards":for(l=e.child,u=null;l!==null;)t=l.alternate,t!==null&&Sn(t)===null&&(u=l),l=l.sibling;l=u,l===null?(u=e.child,e.child=null):(u=l.sibling,l.sibling=null),Oc(e,!1,u,l,n);break;case"backwards":for(l=null,u=e.child,e.child=null;u!==null;){if(t=u.alternate,t!==null&&Sn(t)===null){e.child=u;break}t=u.sibling,u.sibling=l,l=u,u=t}Oc(e,!0,l,null,n);break;case"together":Oc(e,!1,null,null,void 0);break;default:e.memoizedState=null}return e.child}function Ge(t,e,l){if(t!==null&&(e.dependencies=t.dependencies),ol|=e.lanes,(l&e.childLanes)===0)if(t!==null){if(wa(t,e,l,!1),(l&e.childLanes)===0)return null}else return null;if(t!==null&&e.child!==t.child)throw Error(r(153));if(e.child!==null){for(t=e.child,l=He(t,t.pendingProps),e.child=l,l.return=e;t.sibling!==null;)t=t.sibling,l=l.sibling=He(t,t.pendingProps),l.return=e;l.sibling=null}return e.child}function zc(t,e){return(t.lanes&e)!==0?!0:(t=t.dependencies,!!(t!==null&&en(t)))}function xm(t,e,l){switch(e.tag){case 3:bt(e,e.stateNode.containerInfo),Ie(e,Ht,t.memoizedState.cache),Za();break;case 27:case 5:ei(e);break;case 4:bt(e,e.stateNode.containerInfo);break;case 10:Ie(e,e.type,e.memoizedProps.value);break;case 13:var a=e.memoizedState;if(a!==null)return a.dehydrated!==null?(ul(e),e.flags|=128,null):(l&e.child.childLanes)!==0?as(t,e,l):(ul(e),t=Ge(t,e,l),t!==null?t.sibling:null);ul(e);break;case 19:var u=(t.flags&128)!==0;if(a=(l&e.childLanes)!==0,a||(wa(t,e,l,!1),a=(l&e.childLanes)!==0),u){if(a)return ns(t,e,l);e.flags|=128}if(u=e.memoizedState,u!==null&&(u.rendering=null,u.tail=null,u.lastEffect=null),Y(Ct,Ct.current),a)break;return null;case 22:case 23:return e.lanes=0,Po(t,e,l);case 24:Ie(e,Ht,t.memoizedState.cache)}return Ge(t,e,l)}function is(t,e,l){if(t!==null)if(t.memoizedProps!==e.pendingProps)qt=!0;else{if(!zc(t,l)&&(e.flags&128)===0)return qt=!1,xm(t,e,l);qt=(t.flags&131072)!==0}else qt=!1,ot&&(e.flags&1048576)!==0&&Br(e,tn,e.index);switch(e.lanes=0,e.tag){case 16:t:{t=e.pendingProps;var a=e.elementType,u=a._init;if(a=u(a._payload),e.type=a,typeof a=="function")Bi(a)?(t=ql(a,t),e.tag=1,e=es(null,e,a,t,l)):(e.tag=0,e=pc(null,e,a,t,l));else{if(a!=null){if(u=a.$$typeof,u===ct){e.tag=11,e=ko(null,e,a,t,l);break t}else if(u===Rt){e.tag=14,e=Wo(null,e,a,t,l);break t}}throw e=El(a)||a,Error(r(306,e,""))}}return e;case 0:return pc(t,e,e.type,e.pendingProps,l);case 1:return a=e.type,u=ql(a,e.pendingProps),es(t,e,a,u,l);case 3:t:{if(bt(e,e.stateNode.containerInfo),t===null)throw Error(r(387));a=e.pendingProps;var n=e.memoizedState;u=n.element,ki(t,e),Pa(e,a,null,l);var i=e.memoizedState;if(a=i.cache,Ie(e,Ht,a),a!==n.cache&&Zi(e,[Ht],l,!0),Fa(),a=i.element,n.isDehydrated)if(n={element:a,isDehydrated:!1,cache:i.cache},e.updateQueue.baseState=n,e.memoizedState=n,e.flags&256){e=ls(t,e,a,l);break t}else if(a!==u){u=he(Error(r(424)),e),Va(u),e=ls(t,e,a,l);break t}else{switch(t=e.stateNode.containerInfo,t.nodeType){case 9:t=t.body;break;default:t=t.nodeName==="HTML"?t.ownerDocument.body:t}for(Ot=Te(t.firstChild),$t=e,ot=!0,xl=null,Re=!0,l=jo(e,null,a,l),e.child=l;l;)l.flags=l.flags&-3|4096,l=l.sibling}else{if(Za(),a===u){e=Ge(t,e,l);break t}Lt(t,e,a,l)}e=e.child}return e;case 26:return En(t,e),t===null?(l=od(e.type,null,e.pendingProps,null))?e.memoizedState=l:ot||(l=e.type,t=e.pendingProps,a=qn(tt.current).createElement(l),a[Vt]=e,a[kt]=t,Xt(a,l,t),Bt(a),e.stateNode=a):e.memoizedState=od(e.type,t.memoizedProps,e.pendingProps,t.memoizedState),null;case 27:return ei(e),t===null&&ot&&(a=e.stateNode=cd(e.type,e.pendingProps,tt.current),$t=e,Re=!0,u=Ot,ml(e.type)?(cf=u,Ot=Te(a.firstChild)):Ot=u),Lt(t,e,e.pendingProps.children,l),En(t,e),t===null&&(e.flags|=4194304),e.child;case 5:return t===null&&ot&&((u=a=Ot)&&(a=uy(a,e.type,e.pendingProps,Re),a!==null?(e.stateNode=a,$t=e,Ot=Te(a.firstChild),Re=!1,u=!0):u=!1),u||Ul(e)),ei(e),u=e.type,n=e.pendingProps,i=t!==null?t.memoizedProps:null,a=n.children,lf(u,n)?a=null:i!==null&&lf(u,i)&&(e.flags|=32),e.memoizedState!==null&&(u=ec(t,e,Tm,null,null,l),bu._currentValue=u),En(t,e),Lt(t,e,a,l),e.child;case 6:return t===null&&ot&&((t=l=Ot)&&(l=ny(l,e.pendingProps,Re),l!==null?(e.stateNode=l,$t=e,Ot=null,t=!0):t=!1),t||Ul(e)),null;case 13:return as(t,e,l);case 4:return bt(e,e.stateNode.containerInfo),a=e.pendingProps,t===null?e.child=da(e,null,a,l):Lt(t,e,a,l),e.child;case 11:return ko(t,e,e.type,e.pendingProps,l);case 7:return Lt(t,e,e.pendingProps,l),e.child;case 8:return Lt(t,e,e.pendingProps.children,l),e.child;case 12:return Lt(t,e,e.pendingProps.children,l),e.child;case 10:return a=e.pendingProps,Ie(e,e.type,a.value),Lt(t,e,a.children,l),e.child;case 9:return u=e.type._context,a=e.pendingProps.children,Hl(e),u=wt(u),a=a(u),e.flags|=1,Lt(t,e,a,l),e.child;case 14:return Wo(t,e,e.type,e.pendingProps,l);case 15:return Fo(t,e,e.type,e.pendingProps,l);case 19:return ns(t,e,l);case 31:return a=e.pendingProps,l=e.mode,a={mode:a.mode,children:a.children},t===null?(l=Tn(a,l),l.ref=e.ref,e.child=l,l.return=e,e=l):(l=He(t.child,a),l.ref=e.ref,e.child=l,l.return=e,e=l),e;case 22:return Po(t,e,l);case 24:return Hl(e),a=wt(Ht),t===null?(u=Ki(),u===null&&(u=St,n=Vi(),u.pooledCache=n,n.refCount++,n!==null&&(u.pooledCacheLanes|=l),u=n),e.memoizedState={parent:a,cache:u},$i(e),Ie(e,Ht,u)):((t.lanes&l)!==0&&(ki(t,e),Pa(e,null,null,l),Fa()),u=t.memoizedState,n=e.memoizedState,u.parent!==a?(u={parent:a,cache:a},e.memoizedState=u,e.lanes===0&&(e.memoizedState=e.updateQueue.baseState=u),Ie(e,Ht,a)):(a=n.cache,Ie(e,Ht,a),a!==u.cache&&Zi(e,[Ht],l,!0))),Lt(t,e,e.pendingProps.children,l),e.child;case 29:throw e.pendingProps}throw Error(r(156,e.tag))}function Xe(t){t.flags|=4}function cs(t,e){if(e.type!=="stylesheet"||(e.state.loading&4)!==0)t.flags&=-16777217;else if(t.flags|=16777216,!yd(e)){if(e=ge.current,e!==null&&((it&4194048)===it?Oe!==null:(it&62914560)!==it&&(it&536870912)===0||e!==Oe))throw ka=Ji,Zr;t.flags|=8192}}function An(t,e){e!==null&&(t.flags|=4),t.flags&16384&&(e=t.tag!==22?jf():536870912,t.lanes|=e,va|=e)}function nu(t,e){if(!ot)switch(t.tailMode){case"hidden":e=t.tail;for(var l=null;e!==null;)e.alternate!==null&&(l=e),e=e.sibling;l===null?t.tail=null:l.sibling=null;break;case"collapsed":l=t.tail;for(var a=null;l!==null;)l.alternate!==null&&(a=l),l=l.sibling;a===null?e||t.tail===null?t.tail=null:t.tail.sibling=null:a.sibling=null}}function Tt(t){var e=t.alternate!==null&&t.alternate.child===t.child,l=0,a=0;if(e)for(var u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags&65011712,a|=u.flags&65011712,u.return=t,u=u.sibling;else for(u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags,a|=u.flags,u.return=t,u=u.sibling;return t.subtreeFlags|=a,t.childLanes=l,e}function Um(t,e,l){var a=e.pendingProps;switch(Li(e),e.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Tt(e),null;case 1:return Tt(e),null;case 3:return l=e.stateNode,a=null,t!==null&&(a=t.memoizedState.cache),e.memoizedState.cache!==a&&(e.flags|=2048),Ye(Ht),ke(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(t===null||t.child===null)&&(Qa(e)?Xe(e):t===null||t.memoizedState.isDehydrated&&(e.flags&256)===0||(e.flags|=1024,jr())),Tt(e),null;case 26:return l=e.memoizedState,t===null?(Xe(e),l!==null?(Tt(e),cs(e,l)):(Tt(e),e.flags&=-16777217)):l?l!==t.memoizedState?(Xe(e),Tt(e),cs(e,l)):(Tt(e),e.flags&=-16777217):(t.memoizedProps!==a&&Xe(e),Tt(e),e.flags&=-16777217),null;case 27:Hu(e),l=tt.current;var u=e.type;if(t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}t=K.current,Qa(e)?qr(e):(t=cd(u,a,l),e.stateNode=t,Xe(e))}return Tt(e),null;case 5:if(Hu(e),l=e.type,t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}if(t=K.current,Qa(e))qr(e);else{switch(u=qn(tt.current),t){case 1:t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case 2:t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;default:switch(l){case"svg":t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case"math":t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;case"script":t=u.createElement("div"),t.innerHTML=" + + + +
+ + + From 05e08240d757aebe7a517fbb24f6290618a97c3d Mon Sep 17 00:00:00 2001 From: akshat k Date: Sat, 5 Apr 2025 00:44:52 +0530 Subject: [PATCH 23/23] err --- frontend/dist/assets/index-DQXFXOnt.css | 1 - frontend/dist/assets/index-k5LmFf-e.js | 60 ------------------------- frontend/dist/index.html | 13 ------ 3 files changed, 74 deletions(-) delete mode 100644 frontend/dist/assets/index-DQXFXOnt.css delete mode 100644 frontend/dist/assets/index-k5LmFf-e.js delete mode 100644 frontend/dist/index.html diff --git a/frontend/dist/assets/index-DQXFXOnt.css b/frontend/dist/assets/index-DQXFXOnt.css deleted file mode 100644 index 17c292f..0000000 --- a/frontend/dist/assets/index-DQXFXOnt.css +++ /dev/null @@ -1 +0,0 @@ -*{margin:0;padding:0;box-sizing:border-box}body{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;background-color:#f5f7fa;color:#333;line-height:1.6;padding:0;margin:0}a{color:inherit;text-decoration:none}button,.btn{background-color:#0057ff;color:#fff;border:none;padding:.6rem 1.2rem;border-radius:6px;cursor:pointer;font-size:1rem;transition:background .3s ease}button:hover,.btn:hover{background-color:#003fcc}.primary-btn{background-color:#007bff}.primary-btn:hover{background-color:#0056b3}input,select,textarea{width:100%;padding:.5rem;margin-top:.25rem;margin-bottom:1rem;border:1px solid #ccc;border-radius:4px;font-size:1rem}label{display:block;font-weight:500;margin-bottom:.25rem}.form-group{margin-bottom:1rem}.error{color:red;margin-top:.5rem}.loading{margin-top:1rem;color:#888}.dashboard-main{padding:2rem;display:flex;flex-direction:column}.dashboard-header{display:flex;justify-content:flex-start;margin-bottom:1rem}.dashboard-body{display:flex;gap:1.5rem}.deployments-container{background:#fff;padding:1rem;border-radius:10px;box-shadow:0 2px 6px #0000000d;flex:1;max-width:300px}.project-setup-container{background:#fff;padding:1.5rem;border-radius:10px;box-shadow:0 2px 6px #0000000d;flex:2}.deployment-item{background-color:#f0f2f5;padding:1rem;margin-bottom:1rem;border-radius:8px;cursor:pointer;transition:background .2s}.deployment-item:hover{background-color:#e1e4e8}.login-container{max-width:400px;margin:4rem auto;background:#fff;padding:2rem;border-radius:12px;box-shadow:0 5px 20px #0000000d}@media (max-width: 768px){.dashboard-body{flex-direction:column}.deployments-container,.project-setup-container{max-width:100%}} diff --git a/frontend/dist/assets/index-k5LmFf-e.js b/frontend/dist/assets/index-k5LmFf-e.js deleted file mode 100644 index c9f66c0..0000000 --- a/frontend/dist/assets/index-k5LmFf-e.js +++ /dev/null @@ -1,60 +0,0 @@ -(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const h of document.querySelectorAll('link[rel="modulepreload"]'))r(h);new MutationObserver(h=>{for(const g of h)if(g.type==="childList")for(const R of g.addedNodes)R.tagName==="LINK"&&R.rel==="modulepreload"&&r(R)}).observe(document,{childList:!0,subtree:!0});function s(h){const g={};return h.integrity&&(g.integrity=h.integrity),h.referrerPolicy&&(g.referrerPolicy=h.referrerPolicy),h.crossOrigin==="use-credentials"?g.credentials="include":h.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function r(h){if(h.ep)return;h.ep=!0;const g=s(h);fetch(h.href,g)}})();function Zd(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var gf={exports:{}},Ou={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Dd;function xy(){if(Dd)return Ou;Dd=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function s(r,h,g){var R=null;if(g!==void 0&&(R=""+g),h.key!==void 0&&(R=""+h.key),"key"in h){g={};for(var z in h)z!=="key"&&(g[z]=h[z])}else g=h;return h=g.ref,{$$typeof:c,type:r,key:R,ref:h!==void 0?h:null,props:g}}return Ou.Fragment=o,Ou.jsx=s,Ou.jsxs=s,Ou}var Md;function Uy(){return Md||(Md=1,gf.exports=xy()),gf.exports}var P=Uy(),Sf={exports:{}},et={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var _d;function Ny(){if(_d)return et;_d=1;var c=Symbol.for("react.transitional.element"),o=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),g=Symbol.for("react.consumer"),R=Symbol.for("react.context"),z=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),O=Symbol.for("react.lazy"),B=Symbol.iterator;function H(y){return y===null||typeof y!="object"?null:(y=B&&y[B]||y["@@iterator"],typeof y=="function"?y:null)}var j={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,V={};function G(y,N,Q){this.props=y,this.context=N,this.refs=V,this.updater=Q||j}G.prototype.isReactComponent={},G.prototype.setState=function(y,N){if(typeof y!="object"&&typeof y!="function"&&y!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,y,N,"setState")},G.prototype.forceUpdate=function(y){this.updater.enqueueForceUpdate(this,y,"forceUpdate")};function q(){}q.prototype=G.prototype;function k(y,N,Q){this.props=y,this.context=N,this.refs=V,this.updater=Q||j}var X=k.prototype=new q;X.constructor=k,C(X,G.prototype),X.isPureReactComponent=!0;var ct=Array.isArray,I={H:null,A:null,T:null,S:null,V:null},xt=Object.prototype.hasOwnProperty;function Rt(y,N,Q,Y,K,ft){return Q=ft.ref,{$$typeof:c,type:y,key:N,ref:Q!==void 0?Q:null,props:ft}}function Dt(y,N){return Rt(y.type,N,void 0,void 0,void 0,y.props)}function pt(y){return typeof y=="object"&&y!==null&&y.$$typeof===c}function Jt(y){var N={"=":"=0",":":"=2"};return"$"+y.replace(/[=:]/g,function(Q){return N[Q]})}var oe=/\/+/g;function Qt(y,N){return typeof y=="object"&&y!==null&&y.key!=null?Jt(""+y.key):N.toString(36)}function bl(){}function El(y){switch(y.status){case"fulfilled":return y.value;case"rejected":throw y.reason;default:switch(typeof y.status=="string"?y.then(bl,bl):(y.status="pending",y.then(function(N){y.status==="pending"&&(y.status="fulfilled",y.value=N)},function(N){y.status==="pending"&&(y.status="rejected",y.reason=N)})),y.status){case"fulfilled":return y.value;case"rejected":throw y.reason}}throw y}function Zt(y,N,Q,Y,K){var ft=typeof y;(ft==="undefined"||ft==="boolean")&&(y=null);var tt=!1;if(y===null)tt=!0;else switch(ft){case"bigint":case"string":case"number":tt=!0;break;case"object":switch(y.$$typeof){case c:case o:tt=!0;break;case O:return tt=y._init,Zt(tt(y._payload),N,Q,Y,K)}}if(tt)return K=K(y),tt=Y===""?"."+Qt(y,0):Y,ct(K)?(Q="",tt!=null&&(Q=tt.replace(oe,"$&/")+"/"),Zt(K,N,Q,"",function(ke){return ke})):K!=null&&(pt(K)&&(K=Dt(K,Q+(K.key==null||y&&y.key===K.key?"":(""+K.key).replace(oe,"$&/")+"/")+tt)),N.push(K)),1;tt=0;var te=Y===""?".":Y+":";if(ct(y))for(var bt=0;bt>>1,y=M[vt];if(0>>1;vth(Y,W))Kh(ft,Y)?(M[vt]=ft,M[K]=W,vt=K):(M[vt]=Y,M[Q]=W,vt=Q);else if(Kh(ft,W))M[vt]=ft,M[K]=W,vt=K;else break t}}return L}function h(M,L){var W=M.sortIndex-L.sortIndex;return W!==0?W:M.id-L.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var g=performance;c.unstable_now=function(){return g.now()}}else{var R=Date,z=R.now();c.unstable_now=function(){return R.now()-z}}var p=[],m=[],O=1,B=null,H=3,j=!1,C=!1,V=!1,G=!1,q=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function ct(M){for(var L=s(m);L!==null;){if(L.callback===null)r(m);else if(L.startTime<=M)r(m),L.sortIndex=L.expirationTime,o(p,L);else break;L=s(m)}}function I(M){if(V=!1,ct(M),!C)if(s(p)!==null)C=!0,xt||(xt=!0,Qt());else{var L=s(m);L!==null&&Zt(I,L.startTime-M)}}var xt=!1,Rt=-1,Dt=5,pt=-1;function Jt(){return G?!0:!(c.unstable_now()-ptM&&Jt());){var vt=B.callback;if(typeof vt=="function"){B.callback=null,H=B.priorityLevel;var y=vt(B.expirationTime<=M);if(M=c.unstable_now(),typeof y=="function"){B.callback=y,ct(M),L=!0;break e}B===s(p)&&r(p),ct(M)}else r(p);B=s(p)}if(B!==null)L=!0;else{var N=s(m);N!==null&&Zt(I,N.startTime-M),L=!1}}break t}finally{B=null,H=W,j=!1}L=void 0}}finally{L?Qt():xt=!1}}}var Qt;if(typeof X=="function")Qt=function(){X(oe)};else if(typeof MessageChannel<"u"){var bl=new MessageChannel,El=bl.port2;bl.port1.onmessage=oe,Qt=function(){El.postMessage(null)}}else Qt=function(){q(oe,0)};function Zt(M,L){Rt=q(function(){M(c.unstable_now())},L)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(M){M.callback=null},c.unstable_forceFrameRate=function(M){0>M||125vt?(M.sortIndex=W,o(m,M),s(p)===null&&M===s(m)&&(V?(k(Rt),Rt=-1):V=!0,Zt(I,W-vt))):(M.sortIndex=y,o(p,M),C||j||(C=!0,xt||(xt=!0,Qt()))),M},c.unstable_shouldYield=Jt,c.unstable_wrapCallback=function(M){var L=H;return function(){var W=H;H=L;try{return M.apply(this,arguments)}finally{H=W}}}}(Ef)),Ef}var Nd;function By(){return Nd||(Nd=1,bf.exports=Cy()),bf.exports}var Tf={exports:{}},Kt={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Hd;function qy(){if(Hd)return Kt;Hd=1;var c=Mf();function o(p){var m="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(o){console.error(o)}}return c(),Tf.exports=qy(),Tf.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Bd;function jy(){if(Bd)return zu;Bd=1;var c=By(),o=Mf(),s=Yy();function r(t){var e="https://react.dev/errors/"+t;if(1y||(t.current=vt[y],vt[y]=null,y--)}function Y(t,e){y++,vt[y]=t.current,t.current=e}var K=N(null),ft=N(null),tt=N(null),te=N(null);function bt(t,e){switch(Y(tt,e),Y(ft,t),Y(K,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?ed(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=ed(e),t=ld(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}Q(K),Y(K,t)}function ke(){Q(K),Q(ft),Q(tt)}function ei(t){t.memoizedState!==null&&Y(te,t);var e=K.current,l=ld(e,t.type);e!==l&&(Y(ft,t),Y(K,l))}function Hu(t){ft.current===t&&(Q(K),Q(ft)),te.current===t&&(Q(te),bu._currentValue=W)}var li=Object.prototype.hasOwnProperty,ai=c.unstable_scheduleCallback,ui=c.unstable_cancelCallback,fh=c.unstable_shouldYield,rh=c.unstable_requestPaint,Ae=c.unstable_now,oh=c.unstable_getCurrentPriorityLevel,Cf=c.unstable_ImmediatePriority,Bf=c.unstable_UserBlockingPriority,Cu=c.unstable_NormalPriority,sh=c.unstable_LowPriority,qf=c.unstable_IdlePriority,dh=c.log,hh=c.unstable_setDisableYieldValue,Ma=null,ee=null;function We(t){if(typeof dh=="function"&&hh(t),ee&&typeof ee.setStrictMode=="function")try{ee.setStrictMode(Ma,t)}catch{}}var le=Math.clz32?Math.clz32:vh,mh=Math.log,yh=Math.LN2;function vh(t){return t>>>=0,t===0?32:31-(mh(t)/yh|0)|0}var Bu=256,qu=4194304;function Tl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Yu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var f=a&134217727;return f!==0?(a=f&~n,a!==0?u=Tl(a):(i&=f,i!==0?u=Tl(i):l||(l=f&~t,l!==0&&(u=Tl(l))))):(f=a&~n,f!==0?u=Tl(f):i!==0?u=Tl(i):l||(l=a&~t,l!==0&&(u=Tl(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function _a(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function gh(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Yf(){var t=Bu;return Bu<<=1,(Bu&4194048)===0&&(Bu=256),t}function jf(){var t=qu;return qu<<=1,(qu&62914560)===0&&(qu=4194304),t}function ni(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function xa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Sh(t,e,l,a,u,n){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var f=t.entanglements,d=t.expirationTimes,E=t.hiddenUpdates;for(l=i&~l;0)":-1u||d[a]!==E[u]){var D=` -`+d[a].replace(" at new "," at ");return t.displayName&&D.includes("")&&(D=D.replace("",t.displayName)),D}while(1<=a&&0<=u);break}}}finally{si=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Kl(l):""}function Rh(t){switch(t.tag){case 26:case 27:case 5:return Kl(t.type);case 16:return Kl("Lazy");case 13:return Kl("Suspense");case 19:return Kl("SuspenseList");case 0:case 15:return di(t.type,!1);case 11:return di(t.type.render,!1);case 1:return di(t.type,!0);case 31:return Kl("Activity");default:return""}}function $f(t){try{var e="";do e+=Rh(t),t=t.return;while(t);return e}catch(l){return` -Error generating stack: `+l.message+` -`+l.stack}}function se(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function kf(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function Oh(t){var e=kf(t)?"checked":"value",l=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),a=""+t[e];if(!t.hasOwnProperty(e)&&typeof l<"u"&&typeof l.get=="function"&&typeof l.set=="function"){var u=l.get,n=l.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return u.call(this)},set:function(i){a=""+i,n.call(this,i)}}),Object.defineProperty(t,e,{enumerable:l.enumerable}),{getValue:function(){return a},setValue:function(i){a=""+i},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Gu(t){t._valueTracker||(t._valueTracker=Oh(t))}function Wf(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var l=e.getValue(),a="";return t&&(a=kf(t)?t.checked?"true":"false":t.value),t=a,t!==l?(e.setValue(t),!0):!1}function Xu(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var zh=/[\n"\\]/g;function de(t){return t.replace(zh,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function hi(t,e,l,a,u,n,i,f){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),e!=null?i==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+se(e)):t.value!==""+se(e)&&(t.value=""+se(e)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),e!=null?mi(t,i,se(e)):l!=null?mi(t,i,se(l)):a!=null&&t.removeAttribute("value"),u==null&&n!=null&&(t.defaultChecked=!!n),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?t.name=""+se(f):t.removeAttribute("name")}function Ff(t,e,l,a,u,n,i,f){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(t.type=n),e!=null||l!=null){if(!(n!=="submit"&&n!=="reset"||e!=null))return;l=l!=null?""+se(l):"",e=e!=null?""+se(e):l,f||e===t.value||(t.value=e),t.defaultValue=e}a=a??u,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=f?t.checked:!!a,t.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i)}function mi(t,e,l){e==="number"&&Xu(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function Jl(t,e,l,a){if(t=t.options,e){e={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),pi=!1;if(Ne)try{var Ca={};Object.defineProperty(Ca,"passive",{get:function(){pi=!0}}),window.addEventListener("test",Ca,Ca),window.removeEventListener("test",Ca,Ca)}catch{pi=!1}var Pe=null,bi=null,Zu=null;function ur(){if(Zu)return Zu;var t,e=bi,l=e.length,a,u="value"in Pe?Pe.value:Pe.textContent,n=u.length;for(t=0;t=Ya),or=" ",sr=!1;function dr(t,e){switch(t){case"keyup":return tm.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function hr(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Fl=!1;function lm(t,e){switch(t){case"compositionend":return hr(e);case"keypress":return e.which!==32?null:(sr=!0,or);case"textInput":return t=e.data,t===or&&sr?null:t;default:return null}}function am(t,e){if(Fl)return t==="compositionend"||!Oi&&dr(t,e)?(t=ur(),Zu=bi=Pe=null,Fl=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=a}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=Er(l)}}function Ar(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Ar(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Rr(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Xu(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=Xu(t.document)}return e}function Mi(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var sm=Ne&&"documentMode"in document&&11>=document.documentMode,Pl=null,_i=null,Xa=null,xi=!1;function Or(t,e,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;xi||Pl==null||Pl!==Xu(a)||(a=Pl,"selectionStart"in a&&Mi(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Xa&&Ga(Xa,a)||(Xa=a,a=Cn(_i,"onSelect"),0>=i,u-=i,Ce=1<<32-le(e)+u|l<n?n:8;var i=M.T,f={};M.T=f,yc(t,!1,e,l);try{var d=u(),E=M.S;if(E!==null&&E(f,d),d!==null&&typeof d=="object"&&typeof d.then=="function"){var D=bm(d,a);lu(t,e,D,fe(t))}else lu(t,e,a,fe(t))}catch(U){lu(t,e,{then:function(){},status:"rejected",reason:U},fe())}finally{L.p=n,M.T=i}}function Om(){}function hc(t,e,l,a){if(t.tag!==5)throw Error(r(476));var u=Do(t).queue;zo(t,u,e,W,l===null?Om:function(){return Mo(t),l(a)})}function Do(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:W,baseState:W,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:W},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:je,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function Mo(t){var e=Do(t).next.queue;lu(t,e,{},fe())}function mc(){return wt(bu)}function _o(){return Nt().memoizedState}function xo(){return Nt().memoizedState}function zm(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=fe();t=el(l);var a=ll(e,t,l);a!==null&&(re(a,e,l),Wa(a,e,l)),e={cache:Vi()},t.payload=e;return}e=e.return}}function Dm(t,e,l){var a=fe();l={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null},mn(t)?No(e,l):(l=Ci(t,e,l,a),l!==null&&(re(l,t,a),Ho(l,e,a)))}function Uo(t,e,l){var a=fe();lu(t,e,l,a)}function lu(t,e,l,a){var u={lane:a,revertLane:0,action:l,hasEagerState:!1,eagerState:null,next:null};if(mn(t))No(e,u);else{var n=t.alternate;if(t.lanes===0&&(n===null||n.lanes===0)&&(n=e.lastRenderedReducer,n!==null))try{var i=e.lastRenderedState,f=n(i,l);if(u.hasEagerState=!0,u.eagerState=f,ae(f,i))return Wu(t,e,u,0),St===null&&ku(),!1}catch{}finally{}if(l=Ci(t,e,u,a),l!==null)return re(l,t,a),Ho(l,e,a),!0}return!1}function yc(t,e,l,a){if(a={lane:2,revertLane:Jc(),action:a,hasEagerState:!1,eagerState:null,next:null},mn(t)){if(e)throw Error(r(479))}else e=Ci(t,l,a,2),e!==null&&re(e,t,2)}function mn(t){var e=t.alternate;return t===lt||e!==null&&e===lt}function No(t,e){fa=fn=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function Ho(t,e,l){if((l&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,Gf(t,l)}}var yn={readContext:wt,use:on,useCallback:Mt,useContext:Mt,useEffect:Mt,useImperativeHandle:Mt,useLayoutEffect:Mt,useInsertionEffect:Mt,useMemo:Mt,useReducer:Mt,useRef:Mt,useState:Mt,useDebugValue:Mt,useDeferredValue:Mt,useTransition:Mt,useSyncExternalStore:Mt,useId:Mt,useHostTransitionStatus:Mt,useFormState:Mt,useActionState:Mt,useOptimistic:Mt,useMemoCache:Mt,useCacheRefresh:Mt},Co={readContext:wt,use:on,useCallback:function(t,e){return Ft().memoizedState=[t,e===void 0?null:e],t},useContext:wt,useEffect:go,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,hn(4194308,4,Eo.bind(null,e,t),l)},useLayoutEffect:function(t,e){return hn(4194308,4,t,e)},useInsertionEffect:function(t,e){hn(4,2,t,e)},useMemo:function(t,e){var l=Ft();e=e===void 0?null:e;var a=t();if(Bl){We(!0);try{t()}finally{We(!1)}}return l.memoizedState=[a,e],a},useReducer:function(t,e,l){var a=Ft();if(l!==void 0){var u=l(e);if(Bl){We(!0);try{l(e)}finally{We(!1)}}}else u=e;return a.memoizedState=a.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},a.queue=t,t=t.dispatch=Dm.bind(null,lt,t),[a.memoizedState,t]},useRef:function(t){var e=Ft();return t={current:t},e.memoizedState=t},useState:function(t){t=rc(t);var e=t.queue,l=Uo.bind(null,lt,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:sc,useDeferredValue:function(t,e){var l=Ft();return dc(l,t,e)},useTransition:function(){var t=rc(!1);return t=zo.bind(null,lt,t.queue,!0,!1),Ft().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var a=lt,u=Ft();if(ot){if(l===void 0)throw Error(r(407));l=l()}else{if(l=e(),St===null)throw Error(r(349));(it&124)!==0||to(a,e,l)}u.memoizedState=l;var n={value:l,getSnapshot:e};return u.queue=n,go(lo.bind(null,a,n,t),[t]),a.flags|=2048,oa(9,dn(),eo.bind(null,a,n,l,e),null),l},useId:function(){var t=Ft(),e=St.identifierPrefix;if(ot){var l=Be,a=Ce;l=(a&~(1<<32-le(a)-1)).toString(32)+l,e="«"+e+"R"+l,l=rn++,0$?(jt=w,w=null):jt=w.sibling;var rt=T(S,w,b[$],_);if(rt===null){w===null&&(w=jt);break}t&&w&&rt.alternate===null&&e(S,w),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt,w=jt}if($===b.length)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;$$?(jt=w,w=null):jt=w.sibling;var pl=T(S,w,rt.value,_);if(pl===null){w===null&&(w=jt);break}t&&w&&pl.alternate===null&&e(S,w),v=n(pl,v,$),at===null?Z=pl:at.sibling=pl,at=pl,w=jt}if(rt.done)return l(S,w),ot&&_l(S,$),Z;if(w===null){for(;!rt.done;$++,rt=b.next())rt=U(S,rt.value,_),rt!==null&&(v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return ot&&_l(S,$),Z}for(w=a(w);!rt.done;$++,rt=b.next())rt=A(w,S,$,rt.value,_),rt!==null&&(t&&rt.alternate!==null&&w.delete(rt.key===null?$:rt.key),v=n(rt,v,$),at===null?Z=rt:at.sibling=rt,at=rt);return t&&w.forEach(function(_y){return e(S,_y)}),ot&&_l(S,$),Z}function yt(S,v,b,_){if(typeof b=="object"&&b!==null&&b.type===C&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case H:t:{for(var Z=b.key;v!==null;){if(v.key===Z){if(Z=b.type,Z===C){if(v.tag===7){l(S,v.sibling),_=u(v,b.props.children),_.return=S,S=_;break t}}else if(v.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===Dt&&qo(Z)===v.type){l(S,v.sibling),_=u(v,b.props),uu(_,b),_.return=S,S=_;break t}l(S,v);break}else e(S,v);v=v.sibling}b.type===C?(_=Dl(b.props.children,S.mode,_,b.key),_.return=S,S=_):(_=Pu(b.type,b.key,b.props,null,S.mode,_),uu(_,b),_.return=S,S=_)}return i(S);case j:t:{for(Z=b.key;v!==null;){if(v.key===Z)if(v.tag===4&&v.stateNode.containerInfo===b.containerInfo&&v.stateNode.implementation===b.implementation){l(S,v.sibling),_=u(v,b.children||[]),_.return=S,S=_;break t}else{l(S,v);break}else e(S,v);v=v.sibling}_=Yi(b,S.mode,_),_.return=S,S=_}return i(S);case Dt:return Z=b._init,b=Z(b._payload),yt(S,v,b,_)}if(Zt(b))return F(S,v,b,_);if(Qt(b)){if(Z=Qt(b),typeof Z!="function")throw Error(r(150));return b=Z.call(b),J(S,v,b,_)}if(typeof b.then=="function")return yt(S,v,vn(b),_);if(b.$$typeof===X)return yt(S,v,ln(S,b),_);gn(S,b)}return typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint"?(b=""+b,v!==null&&v.tag===6?(l(S,v.sibling),_=u(v,b),_.return=S,S=_):(l(S,v),_=qi(b,S.mode,_),_.return=S,S=_),i(S)):l(S,v)}return function(S,v,b,_){try{au=0;var Z=yt(S,v,b,_);return sa=null,Z}catch(w){if(w===$a||w===un)throw w;var at=ue(29,w,null,S.mode);return at.lanes=_,at.return=S,at}finally{}}}var da=Yo(!0),jo=Yo(!1),ge=N(null),Oe=null;function ul(t){var e=t.alternate;Y(Ct,Ct.current&1),Y(ge,t),Oe===null&&(e===null||ca.current!==null||e.memoizedState!==null)&&(Oe=t)}function Lo(t){if(t.tag===22){if(Y(Ct,Ct.current),Y(ge,t),Oe===null){var e=t.alternate;e!==null&&e.memoizedState!==null&&(Oe=t)}}else nl()}function nl(){Y(Ct,Ct.current),Y(ge,ge.current)}function Le(t){Q(ge),Oe===t&&(Oe=null),Q(Ct)}var Ct=N(0);function Sn(t){for(var e=t;e!==null;){if(e.tag===13){var l=e.memoizedState;if(l!==null&&(l=l.dehydrated,l===null||l.data==="$?"||nf(l)))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if((e.flags&128)!==0)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}function vc(t,e,l,a){e=t.memoizedState,l=l(a,e),l=l==null?e:O({},e,l),t.memoizedState=l,t.lanes===0&&(t.updateQueue.baseState=l)}var gc={enqueueSetState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueReplaceState:function(t,e,l){t=t._reactInternals;var a=fe(),u=el(a);u.tag=1,u.payload=e,l!=null&&(u.callback=l),e=ll(t,u,a),e!==null&&(re(e,t,a),Wa(e,t,a))},enqueueForceUpdate:function(t,e){t=t._reactInternals;var l=fe(),a=el(l);a.tag=2,e!=null&&(a.callback=e),e=ll(t,a,l),e!==null&&(re(e,t,l),Wa(e,t,l))}};function Go(t,e,l,a,u,n,i){return t=t.stateNode,typeof t.shouldComponentUpdate=="function"?t.shouldComponentUpdate(a,n,i):e.prototype&&e.prototype.isPureReactComponent?!Ga(l,a)||!Ga(u,n):!0}function Xo(t,e,l,a){t=e.state,typeof e.componentWillReceiveProps=="function"&&e.componentWillReceiveProps(l,a),typeof e.UNSAFE_componentWillReceiveProps=="function"&&e.UNSAFE_componentWillReceiveProps(l,a),e.state!==t&&gc.enqueueReplaceState(e,e.state,null)}function ql(t,e){var l=e;if("ref"in e){l={};for(var a in e)a!=="ref"&&(l[a]=e[a])}if(t=t.defaultProps){l===e&&(l=O({},l));for(var u in t)l[u]===void 0&&(l[u]=t[u])}return l}var pn=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var e=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(e))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)};function Qo(t){pn(t)}function Zo(t){console.error(t)}function Vo(t){pn(t)}function bn(t,e){try{var l=t.onUncaughtError;l(e.value,{componentStack:e.stack})}catch(a){setTimeout(function(){throw a})}}function wo(t,e,l){try{var a=t.onCaughtError;a(l.value,{componentStack:l.stack,errorBoundary:e.tag===1?e.stateNode:null})}catch(u){setTimeout(function(){throw u})}}function Sc(t,e,l){return l=el(l),l.tag=3,l.payload={element:null},l.callback=function(){bn(t,e)},l}function Ko(t){return t=el(t),t.tag=3,t}function Jo(t,e,l,a){var u=l.type.getDerivedStateFromError;if(typeof u=="function"){var n=a.value;t.payload=function(){return u(n)},t.callback=function(){wo(e,l,a)}}var i=l.stateNode;i!==null&&typeof i.componentDidCatch=="function"&&(t.callback=function(){wo(e,l,a),typeof u!="function"&&(sl===null?sl=new Set([this]):sl.add(this));var f=a.stack;this.componentDidCatch(a.value,{componentStack:f!==null?f:""})})}function _m(t,e,l,a,u){if(l.flags|=32768,a!==null&&typeof a=="object"&&typeof a.then=="function"){if(e=l.alternate,e!==null&&wa(e,l,u,!0),l=ge.current,l!==null){switch(l.tag){case 13:return Oe===null?Qc():l.alternate===null&&zt===0&&(zt=3),l.flags&=-257,l.flags|=65536,l.lanes=u,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?l.updateQueue=new Set([a]):e.add(a),Vc(t,a,u)),!1;case 22:return l.flags|=65536,a===Ji?l.flags|=16384:(e=l.updateQueue,e===null?(e={transitions:null,markerInstances:null,retryQueue:new Set([a])},l.updateQueue=e):(l=e.retryQueue,l===null?e.retryQueue=new Set([a]):l.add(a)),Vc(t,a,u)),!1}throw Error(r(435,l.tag))}return Vc(t,a,u),Qc(),!1}if(ot)return e=ge.current,e!==null?((e.flags&65536)===0&&(e.flags|=256),e.flags|=65536,e.lanes=u,a!==Gi&&(t=Error(r(422),{cause:a}),Va(he(t,l)))):(a!==Gi&&(e=Error(r(423),{cause:a}),Va(he(e,l))),t=t.current.alternate,t.flags|=65536,u&=-u,t.lanes|=u,a=he(a,l),u=Sc(t.stateNode,a,u),Wi(t,u),zt!==4&&(zt=2)),!1;var n=Error(r(520),{cause:a});if(n=he(n,l),su===null?su=[n]:su.push(n),zt!==4&&(zt=2),e===null)return!0;a=he(a,l),l=e;do{switch(l.tag){case 3:return l.flags|=65536,t=u&-u,l.lanes|=t,t=Sc(l.stateNode,a,t),Wi(l,t),!1;case 1:if(e=l.type,n=l.stateNode,(l.flags&128)===0&&(typeof e.getDerivedStateFromError=="function"||n!==null&&typeof n.componentDidCatch=="function"&&(sl===null||!sl.has(n))))return l.flags|=65536,u&=-u,l.lanes|=u,u=Ko(u),Jo(u,t,l,a),Wi(l,u),!1}l=l.return}while(l!==null);return!1}var $o=Error(r(461)),qt=!1;function Lt(t,e,l,a){e.child=t===null?jo(e,null,l,a):da(e,t.child,l,a)}function ko(t,e,l,a,u){l=l.render;var n=e.ref;if("ref"in a){var i={};for(var f in a)f!=="ref"&&(i[f]=a[f])}else i=a;return Hl(e),a=ec(t,e,l,i,n,u),f=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&f&&ji(e),e.flags|=1,Lt(t,e,a,u),e.child)}function Wo(t,e,l,a,u){if(t===null){var n=l.type;return typeof n=="function"&&!Bi(n)&&n.defaultProps===void 0&&l.compare===null?(e.tag=15,e.type=n,Fo(t,e,n,a,u)):(t=Pu(l.type,null,a,e,e.mode,u),t.ref=e.ref,t.return=e,e.child=t)}if(n=t.child,!zc(t,u)){var i=n.memoizedProps;if(l=l.compare,l=l!==null?l:Ga,l(i,a)&&t.ref===e.ref)return Ge(t,e,u)}return e.flags|=1,t=He(n,a),t.ref=e.ref,t.return=e,e.child=t}function Fo(t,e,l,a,u){if(t!==null){var n=t.memoizedProps;if(Ga(n,a)&&t.ref===e.ref)if(qt=!1,e.pendingProps=a=n,zc(t,u))(t.flags&131072)!==0&&(qt=!0);else return e.lanes=t.lanes,Ge(t,e,u)}return pc(t,e,l,a,u)}function Po(t,e,l){var a=e.pendingProps,u=a.children,n=t!==null?t.memoizedState:null;if(a.mode==="hidden"){if((e.flags&128)!==0){if(a=n!==null?n.baseLanes|l:l,t!==null){for(u=e.child=t.child,n=0;u!==null;)n=n|u.lanes|u.childLanes,u=u.sibling;e.childLanes=n&~a}else e.childLanes=0,e.child=null;return Io(t,e,a,l)}if((l&536870912)!==0)e.memoizedState={baseLanes:0,cachePool:null},t!==null&&an(e,n!==null?n.cachePool:null),n!==null?Wr(e,n):Pi(),Lo(e);else return e.lanes=e.childLanes=536870912,Io(t,e,n!==null?n.baseLanes|l:l,l)}else n!==null?(an(e,n.cachePool),Wr(e,n),nl(),e.memoizedState=null):(t!==null&&an(e,null),Pi(),nl());return Lt(t,e,u,l),e.child}function Io(t,e,l,a){var u=Ki();return u=u===null?null:{parent:Ht._currentValue,pool:u},e.memoizedState={baseLanes:l,cachePool:u},t!==null&&an(e,null),Pi(),Lo(e),t!==null&&wa(t,e,a,!0),null}function En(t,e){var l=e.ref;if(l===null)t!==null&&t.ref!==null&&(e.flags|=4194816);else{if(typeof l!="function"&&typeof l!="object")throw Error(r(284));(t===null||t.ref!==l)&&(e.flags|=4194816)}}function pc(t,e,l,a,u){return Hl(e),l=ec(t,e,l,a,void 0,u),a=lc(),t!==null&&!qt?(ac(t,e,u),Ge(t,e,u)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,u),e.child)}function ts(t,e,l,a,u,n){return Hl(e),e.updateQueue=null,l=Pr(e,a,l,u),Fr(t),a=lc(),t!==null&&!qt?(ac(t,e,n),Ge(t,e,n)):(ot&&a&&ji(e),e.flags|=1,Lt(t,e,l,n),e.child)}function es(t,e,l,a,u){if(Hl(e),e.stateNode===null){var n=la,i=l.contextType;typeof i=="object"&&i!==null&&(n=wt(i)),n=new l(a,n),e.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,n.updater=gc,e.stateNode=n,n._reactInternals=e,n=e.stateNode,n.props=a,n.state=e.memoizedState,n.refs={},$i(e),i=l.contextType,n.context=typeof i=="object"&&i!==null?wt(i):la,n.state=e.memoizedState,i=l.getDerivedStateFromProps,typeof i=="function"&&(vc(e,l,i,a),n.state=e.memoizedState),typeof l.getDerivedStateFromProps=="function"||typeof n.getSnapshotBeforeUpdate=="function"||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(i=n.state,typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount(),i!==n.state&&gc.enqueueReplaceState(n,n.state,null),Pa(e,a,n,u),Fa(),n.state=e.memoizedState),typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!0}else if(t===null){n=e.stateNode;var f=e.memoizedProps,d=ql(l,f);n.props=d;var E=n.context,D=l.contextType;i=la,typeof D=="object"&&D!==null&&(i=wt(D));var U=l.getDerivedStateFromProps;D=typeof U=="function"||typeof n.getSnapshotBeforeUpdate=="function",f=e.pendingProps!==f,D||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(f||E!==i)&&Xo(e,n,a,i),tl=!1;var T=e.memoizedState;n.state=T,Pa(e,a,n,u),Fa(),E=e.memoizedState,f||T!==E||tl?(typeof U=="function"&&(vc(e,l,U,a),E=e.memoizedState),(d=tl||Go(e,l,d,a,T,E,i))?(D||typeof n.UNSAFE_componentWillMount!="function"&&typeof n.componentWillMount!="function"||(typeof n.componentWillMount=="function"&&n.componentWillMount(),typeof n.UNSAFE_componentWillMount=="function"&&n.UNSAFE_componentWillMount()),typeof n.componentDidMount=="function"&&(e.flags|=4194308)):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),e.memoizedProps=a,e.memoizedState=E),n.props=a,n.state=E,n.context=i,a=d):(typeof n.componentDidMount=="function"&&(e.flags|=4194308),a=!1)}else{n=e.stateNode,ki(t,e),i=e.memoizedProps,D=ql(l,i),n.props=D,U=e.pendingProps,T=n.context,E=l.contextType,d=la,typeof E=="object"&&E!==null&&(d=wt(E)),f=l.getDerivedStateFromProps,(E=typeof f=="function"||typeof n.getSnapshotBeforeUpdate=="function")||typeof n.UNSAFE_componentWillReceiveProps!="function"&&typeof n.componentWillReceiveProps!="function"||(i!==U||T!==d)&&Xo(e,n,a,d),tl=!1,T=e.memoizedState,n.state=T,Pa(e,a,n,u),Fa();var A=e.memoizedState;i!==U||T!==A||tl||t!==null&&t.dependencies!==null&&en(t.dependencies)?(typeof f=="function"&&(vc(e,l,f,a),A=e.memoizedState),(D=tl||Go(e,l,D,a,T,A,d)||t!==null&&t.dependencies!==null&&en(t.dependencies))?(E||typeof n.UNSAFE_componentWillUpdate!="function"&&typeof n.componentWillUpdate!="function"||(typeof n.componentWillUpdate=="function"&&n.componentWillUpdate(a,A,d),typeof n.UNSAFE_componentWillUpdate=="function"&&n.UNSAFE_componentWillUpdate(a,A,d)),typeof n.componentDidUpdate=="function"&&(e.flags|=4),typeof n.getSnapshotBeforeUpdate=="function"&&(e.flags|=1024)):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),e.memoizedProps=a,e.memoizedState=A),n.props=a,n.state=A,n.context=d,a=D):(typeof n.componentDidUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=4),typeof n.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&T===t.memoizedState||(e.flags|=1024),a=!1)}return n=a,En(t,e),a=(e.flags&128)!==0,n||a?(n=e.stateNode,l=a&&typeof l.getDerivedStateFromError!="function"?null:n.render(),e.flags|=1,t!==null&&a?(e.child=da(e,t.child,null,u),e.child=da(e,null,l,u)):Lt(t,e,l,u),e.memoizedState=n.state,t=e.child):t=Ge(t,e,u),t}function ls(t,e,l,a){return Za(),e.flags|=256,Lt(t,e,l,a),e.child}var bc={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Ec(t){return{baseLanes:t,cachePool:Qr()}}function Tc(t,e,l){return t=t!==null?t.childLanes&~l:0,e&&(t|=Se),t}function as(t,e,l){var a=e.pendingProps,u=!1,n=(e.flags&128)!==0,i;if((i=n)||(i=t!==null&&t.memoizedState===null?!1:(Ct.current&2)!==0),i&&(u=!0,e.flags&=-129),i=(e.flags&32)!==0,e.flags&=-33,t===null){if(ot){if(u?ul(e):nl(),ot){var f=Ot,d;if(d=f){t:{for(d=f,f=Re;d.nodeType!==8;){if(!f){f=null;break t}if(d=Te(d.nextSibling),d===null){f=null;break t}}f=d}f!==null?(e.memoizedState={dehydrated:f,treeContext:Ml!==null?{id:Ce,overflow:Be}:null,retryLane:536870912,hydrationErrors:null},d=ue(18,null,null,0),d.stateNode=f,d.return=e,e.child=d,$t=e,Ot=null,d=!0):d=!1}d||Ul(e)}if(f=e.memoizedState,f!==null&&(f=f.dehydrated,f!==null))return nf(f)?e.lanes=32:e.lanes=536870912,null;Le(e)}return f=a.children,a=a.fallback,u?(nl(),u=e.mode,f=Tn({mode:"hidden",children:f},u),a=Dl(a,u,l,null),f.return=e,a.return=e,f.sibling=a,e.child=f,u=e.child,u.memoizedState=Ec(l),u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),Ac(e,f))}if(d=t.memoizedState,d!==null&&(f=d.dehydrated,f!==null)){if(n)e.flags&256?(ul(e),e.flags&=-257,e=Rc(t,e,l)):e.memoizedState!==null?(nl(),e.child=t.child,e.flags|=128,e=null):(nl(),u=a.fallback,f=e.mode,a=Tn({mode:"visible",children:a.children},f),u=Dl(u,f,l,null),u.flags|=2,a.return=e,u.return=e,a.sibling=u,e.child=a,da(e,t.child,null,l),a=e.child,a.memoizedState=Ec(l),a.childLanes=Tc(t,i,l),e.memoizedState=bc,e=u);else if(ul(e),nf(f)){if(i=f.nextSibling&&f.nextSibling.dataset,i)var E=i.dgst;i=E,a=Error(r(419)),a.stack="",a.digest=i,Va({value:a,source:null,stack:null}),e=Rc(t,e,l)}else if(qt||wa(t,e,l,!1),i=(l&t.childLanes)!==0,qt||i){if(i=St,i!==null&&(a=l&-l,a=(a&42)!==0?1:ii(a),a=(a&(i.suspendedLanes|l))!==0?0:a,a!==0&&a!==d.retryLane))throw d.retryLane=a,ea(t,a),re(i,t,a),$o;f.data==="$?"||Qc(),e=Rc(t,e,l)}else f.data==="$?"?(e.flags|=192,e.child=t.child,e=null):(t=d.treeContext,Ot=Te(f.nextSibling),$t=e,ot=!0,xl=null,Re=!1,t!==null&&(ye[ve++]=Ce,ye[ve++]=Be,ye[ve++]=Ml,Ce=t.id,Be=t.overflow,Ml=e),e=Ac(e,a.children),e.flags|=4096);return e}return u?(nl(),u=a.fallback,f=e.mode,d=t.child,E=d.sibling,a=He(d,{mode:"hidden",children:a.children}),a.subtreeFlags=d.subtreeFlags&65011712,E!==null?u=He(E,u):(u=Dl(u,f,l,null),u.flags|=2),u.return=e,a.return=e,a.sibling=u,e.child=a,a=u,u=e.child,f=t.child.memoizedState,f===null?f=Ec(l):(d=f.cachePool,d!==null?(E=Ht._currentValue,d=d.parent!==E?{parent:E,pool:E}:d):d=Qr(),f={baseLanes:f.baseLanes|l,cachePool:d}),u.memoizedState=f,u.childLanes=Tc(t,i,l),e.memoizedState=bc,a):(ul(e),l=t.child,t=l.sibling,l=He(l,{mode:"visible",children:a.children}),l.return=e,l.sibling=null,t!==null&&(i=e.deletions,i===null?(e.deletions=[t],e.flags|=16):i.push(t)),e.child=l,e.memoizedState=null,l)}function Ac(t,e){return e=Tn({mode:"visible",children:e},t.mode),e.return=t,t.child=e}function Tn(t,e){return t=ue(22,t,null,e),t.lanes=0,t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},t}function Rc(t,e,l){return da(e,t.child,null,l),t=Ac(e,e.pendingProps.children),t.flags|=2,e.memoizedState=null,t}function us(t,e,l){t.lanes|=e;var a=t.alternate;a!==null&&(a.lanes|=e),Qi(t.return,e,l)}function Oc(t,e,l,a,u){var n=t.memoizedState;n===null?t.memoizedState={isBackwards:e,rendering:null,renderingStartTime:0,last:a,tail:l,tailMode:u}:(n.isBackwards=e,n.rendering=null,n.renderingStartTime=0,n.last=a,n.tail=l,n.tailMode=u)}function ns(t,e,l){var a=e.pendingProps,u=a.revealOrder,n=a.tail;if(Lt(t,e,a.children,l),a=Ct.current,(a&2)!==0)a=a&1|2,e.flags|=128;else{if(t!==null&&(t.flags&128)!==0)t:for(t=e.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&us(t,l,e);else if(t.tag===19)us(t,l,e);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break t;for(;t.sibling===null;){if(t.return===null||t.return===e)break t;t=t.return}t.sibling.return=t.return,t=t.sibling}a&=1}switch(Y(Ct,a),u){case"forwards":for(l=e.child,u=null;l!==null;)t=l.alternate,t!==null&&Sn(t)===null&&(u=l),l=l.sibling;l=u,l===null?(u=e.child,e.child=null):(u=l.sibling,l.sibling=null),Oc(e,!1,u,l,n);break;case"backwards":for(l=null,u=e.child,e.child=null;u!==null;){if(t=u.alternate,t!==null&&Sn(t)===null){e.child=u;break}t=u.sibling,u.sibling=l,l=u,u=t}Oc(e,!0,l,null,n);break;case"together":Oc(e,!1,null,null,void 0);break;default:e.memoizedState=null}return e.child}function Ge(t,e,l){if(t!==null&&(e.dependencies=t.dependencies),ol|=e.lanes,(l&e.childLanes)===0)if(t!==null){if(wa(t,e,l,!1),(l&e.childLanes)===0)return null}else return null;if(t!==null&&e.child!==t.child)throw Error(r(153));if(e.child!==null){for(t=e.child,l=He(t,t.pendingProps),e.child=l,l.return=e;t.sibling!==null;)t=t.sibling,l=l.sibling=He(t,t.pendingProps),l.return=e;l.sibling=null}return e.child}function zc(t,e){return(t.lanes&e)!==0?!0:(t=t.dependencies,!!(t!==null&&en(t)))}function xm(t,e,l){switch(e.tag){case 3:bt(e,e.stateNode.containerInfo),Ie(e,Ht,t.memoizedState.cache),Za();break;case 27:case 5:ei(e);break;case 4:bt(e,e.stateNode.containerInfo);break;case 10:Ie(e,e.type,e.memoizedProps.value);break;case 13:var a=e.memoizedState;if(a!==null)return a.dehydrated!==null?(ul(e),e.flags|=128,null):(l&e.child.childLanes)!==0?as(t,e,l):(ul(e),t=Ge(t,e,l),t!==null?t.sibling:null);ul(e);break;case 19:var u=(t.flags&128)!==0;if(a=(l&e.childLanes)!==0,a||(wa(t,e,l,!1),a=(l&e.childLanes)!==0),u){if(a)return ns(t,e,l);e.flags|=128}if(u=e.memoizedState,u!==null&&(u.rendering=null,u.tail=null,u.lastEffect=null),Y(Ct,Ct.current),a)break;return null;case 22:case 23:return e.lanes=0,Po(t,e,l);case 24:Ie(e,Ht,t.memoizedState.cache)}return Ge(t,e,l)}function is(t,e,l){if(t!==null)if(t.memoizedProps!==e.pendingProps)qt=!0;else{if(!zc(t,l)&&(e.flags&128)===0)return qt=!1,xm(t,e,l);qt=(t.flags&131072)!==0}else qt=!1,ot&&(e.flags&1048576)!==0&&Br(e,tn,e.index);switch(e.lanes=0,e.tag){case 16:t:{t=e.pendingProps;var a=e.elementType,u=a._init;if(a=u(a._payload),e.type=a,typeof a=="function")Bi(a)?(t=ql(a,t),e.tag=1,e=es(null,e,a,t,l)):(e.tag=0,e=pc(null,e,a,t,l));else{if(a!=null){if(u=a.$$typeof,u===ct){e.tag=11,e=ko(null,e,a,t,l);break t}else if(u===Rt){e.tag=14,e=Wo(null,e,a,t,l);break t}}throw e=El(a)||a,Error(r(306,e,""))}}return e;case 0:return pc(t,e,e.type,e.pendingProps,l);case 1:return a=e.type,u=ql(a,e.pendingProps),es(t,e,a,u,l);case 3:t:{if(bt(e,e.stateNode.containerInfo),t===null)throw Error(r(387));a=e.pendingProps;var n=e.memoizedState;u=n.element,ki(t,e),Pa(e,a,null,l);var i=e.memoizedState;if(a=i.cache,Ie(e,Ht,a),a!==n.cache&&Zi(e,[Ht],l,!0),Fa(),a=i.element,n.isDehydrated)if(n={element:a,isDehydrated:!1,cache:i.cache},e.updateQueue.baseState=n,e.memoizedState=n,e.flags&256){e=ls(t,e,a,l);break t}else if(a!==u){u=he(Error(r(424)),e),Va(u),e=ls(t,e,a,l);break t}else{switch(t=e.stateNode.containerInfo,t.nodeType){case 9:t=t.body;break;default:t=t.nodeName==="HTML"?t.ownerDocument.body:t}for(Ot=Te(t.firstChild),$t=e,ot=!0,xl=null,Re=!0,l=jo(e,null,a,l),e.child=l;l;)l.flags=l.flags&-3|4096,l=l.sibling}else{if(Za(),a===u){e=Ge(t,e,l);break t}Lt(t,e,a,l)}e=e.child}return e;case 26:return En(t,e),t===null?(l=od(e.type,null,e.pendingProps,null))?e.memoizedState=l:ot||(l=e.type,t=e.pendingProps,a=qn(tt.current).createElement(l),a[Vt]=e,a[kt]=t,Xt(a,l,t),Bt(a),e.stateNode=a):e.memoizedState=od(e.type,t.memoizedProps,e.pendingProps,t.memoizedState),null;case 27:return ei(e),t===null&&ot&&(a=e.stateNode=cd(e.type,e.pendingProps,tt.current),$t=e,Re=!0,u=Ot,ml(e.type)?(cf=u,Ot=Te(a.firstChild)):Ot=u),Lt(t,e,e.pendingProps.children,l),En(t,e),t===null&&(e.flags|=4194304),e.child;case 5:return t===null&&ot&&((u=a=Ot)&&(a=uy(a,e.type,e.pendingProps,Re),a!==null?(e.stateNode=a,$t=e,Ot=Te(a.firstChild),Re=!1,u=!0):u=!1),u||Ul(e)),ei(e),u=e.type,n=e.pendingProps,i=t!==null?t.memoizedProps:null,a=n.children,lf(u,n)?a=null:i!==null&&lf(u,i)&&(e.flags|=32),e.memoizedState!==null&&(u=ec(t,e,Tm,null,null,l),bu._currentValue=u),En(t,e),Lt(t,e,a,l),e.child;case 6:return t===null&&ot&&((t=l=Ot)&&(l=ny(l,e.pendingProps,Re),l!==null?(e.stateNode=l,$t=e,Ot=null,t=!0):t=!1),t||Ul(e)),null;case 13:return as(t,e,l);case 4:return bt(e,e.stateNode.containerInfo),a=e.pendingProps,t===null?e.child=da(e,null,a,l):Lt(t,e,a,l),e.child;case 11:return ko(t,e,e.type,e.pendingProps,l);case 7:return Lt(t,e,e.pendingProps,l),e.child;case 8:return Lt(t,e,e.pendingProps.children,l),e.child;case 12:return Lt(t,e,e.pendingProps.children,l),e.child;case 10:return a=e.pendingProps,Ie(e,e.type,a.value),Lt(t,e,a.children,l),e.child;case 9:return u=e.type._context,a=e.pendingProps.children,Hl(e),u=wt(u),a=a(u),e.flags|=1,Lt(t,e,a,l),e.child;case 14:return Wo(t,e,e.type,e.pendingProps,l);case 15:return Fo(t,e,e.type,e.pendingProps,l);case 19:return ns(t,e,l);case 31:return a=e.pendingProps,l=e.mode,a={mode:a.mode,children:a.children},t===null?(l=Tn(a,l),l.ref=e.ref,e.child=l,l.return=e,e=l):(l=He(t.child,a),l.ref=e.ref,e.child=l,l.return=e,e=l),e;case 22:return Po(t,e,l);case 24:return Hl(e),a=wt(Ht),t===null?(u=Ki(),u===null&&(u=St,n=Vi(),u.pooledCache=n,n.refCount++,n!==null&&(u.pooledCacheLanes|=l),u=n),e.memoizedState={parent:a,cache:u},$i(e),Ie(e,Ht,u)):((t.lanes&l)!==0&&(ki(t,e),Pa(e,null,null,l),Fa()),u=t.memoizedState,n=e.memoizedState,u.parent!==a?(u={parent:a,cache:a},e.memoizedState=u,e.lanes===0&&(e.memoizedState=e.updateQueue.baseState=u),Ie(e,Ht,a)):(a=n.cache,Ie(e,Ht,a),a!==u.cache&&Zi(e,[Ht],l,!0))),Lt(t,e,e.pendingProps.children,l),e.child;case 29:throw e.pendingProps}throw Error(r(156,e.tag))}function Xe(t){t.flags|=4}function cs(t,e){if(e.type!=="stylesheet"||(e.state.loading&4)!==0)t.flags&=-16777217;else if(t.flags|=16777216,!yd(e)){if(e=ge.current,e!==null&&((it&4194048)===it?Oe!==null:(it&62914560)!==it&&(it&536870912)===0||e!==Oe))throw ka=Ji,Zr;t.flags|=8192}}function An(t,e){e!==null&&(t.flags|=4),t.flags&16384&&(e=t.tag!==22?jf():536870912,t.lanes|=e,va|=e)}function nu(t,e){if(!ot)switch(t.tailMode){case"hidden":e=t.tail;for(var l=null;e!==null;)e.alternate!==null&&(l=e),e=e.sibling;l===null?t.tail=null:l.sibling=null;break;case"collapsed":l=t.tail;for(var a=null;l!==null;)l.alternate!==null&&(a=l),l=l.sibling;a===null?e||t.tail===null?t.tail=null:t.tail.sibling=null:a.sibling=null}}function Tt(t){var e=t.alternate!==null&&t.alternate.child===t.child,l=0,a=0;if(e)for(var u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags&65011712,a|=u.flags&65011712,u.return=t,u=u.sibling;else for(u=t.child;u!==null;)l|=u.lanes|u.childLanes,a|=u.subtreeFlags,a|=u.flags,u.return=t,u=u.sibling;return t.subtreeFlags|=a,t.childLanes=l,e}function Um(t,e,l){var a=e.pendingProps;switch(Li(e),e.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Tt(e),null;case 1:return Tt(e),null;case 3:return l=e.stateNode,a=null,t!==null&&(a=t.memoizedState.cache),e.memoizedState.cache!==a&&(e.flags|=2048),Ye(Ht),ke(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(t===null||t.child===null)&&(Qa(e)?Xe(e):t===null||t.memoizedState.isDehydrated&&(e.flags&256)===0||(e.flags|=1024,jr())),Tt(e),null;case 26:return l=e.memoizedState,t===null?(Xe(e),l!==null?(Tt(e),cs(e,l)):(Tt(e),e.flags&=-16777217)):l?l!==t.memoizedState?(Xe(e),Tt(e),cs(e,l)):(Tt(e),e.flags&=-16777217):(t.memoizedProps!==a&&Xe(e),Tt(e),e.flags&=-16777217),null;case 27:Hu(e),l=tt.current;var u=e.type;if(t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}t=K.current,Qa(e)?qr(e):(t=cd(u,a,l),e.stateNode=t,Xe(e))}return Tt(e),null;case 5:if(Hu(e),l=e.type,t!==null&&e.stateNode!=null)t.memoizedProps!==a&&Xe(e);else{if(!a){if(e.stateNode===null)throw Error(r(166));return Tt(e),null}if(t=K.current,Qa(e))qr(e);else{switch(u=qn(tt.current),t){case 1:t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case 2:t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;default:switch(l){case"svg":t=u.createElementNS("http://www.w3.org/2000/svg",l);break;case"math":t=u.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;case"script":t=u.createElement("div"),t.innerHTML=" - - - -
- - -

- Nest Logo -